PageSourceSearch

https://giaoviendoimoi.com/assets/index-C0esqoXR.js

js giaoviendoimoi.com collected 2026-09-24 14:13:35 UTC 2,543,267 bytes, 573 lines download raw bytes

1const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/tugOfWarService-C5KzKzgB.js","assets/vendor-firebase-NOrVjYbK.js","assets/vendor-react-DJzUMfd1.js","assets/vendor-3d-B-0V4uEN.js","assets/vendor-katex-DqEyuLHo.js","assets/vendor-katex-CyAuISp2.css","assets/headTiltService-PeTe-xIm.js","assets/groupsApi-CtFxURg_.js","assets/handSlashService-CklEk98N.js","assets/starBagService-CaNJAfWC.js","assets/minesweeperService-D0RsD1b6.js","assets/poseQuizService-CBtK-gBK.js","assets/flipPuzzleService-4wqpcbkQ.js","assets/knowledgeTrainService-y7fRG4Qi.js","assets/turnBasedGameService-BU3KxH3n.js","assets/wheelQuizCloudService-Bqz9YCCY.js","assets/browser-image-compression-BzWLnoYn.js","assets/pacedQuizService-BtL7Bkox.js","assets/richQuestionScoring-n3wI_nQA.js","assets/quizScoring-vs8puWXz.js","assets/questionBankService-BH0424iv.js","assets/flyingWordsService-ECtyZAS2.js","assets/quizGameService-COfox1GO.js","assets/crosswordService-BGQeoqHM.js","assets/crosswordUtils-Qo8SSJVR.js","assets/flashcardService-CMQq3J1A.js","assets/mindMapService-B5fPv6E3.js","assets/lessonService-KFFZxx1P.js","assets/interactiveImageService-DLsLSujm.js","assets/QrScanButton-B3H0Mbxd.js","assets/StudentPlayerPage-d0XVZTtR.js","assets/types-BY_76wxi.js","assets/YouTube.esm-DZtBeJDg.js","assets/soundEffects-BNObq7V4.js","assets/MathText-CUiST3AE.js","assets/types-B_qXoiPY.css","assets/StudentPlayerPage-CNPIad6-.css","assets/AIToolsPage-CaRdKCmu.js","assets/AIToolsPage-DyhWVybP.css","assets/EdutechExtensionsPage-DdhVz3WL.js","assets/EdutechExtensionsPage-ChQG03Dt.css","assets/PaymentHistoryPage-Bd6WbMDq.js","assets/paymentReceiptPdf-Be_x2OuG.js","assets/robotoFont-BXYIbu15.js","assets/TeachingMaterialsPage-BxUzp-E9.js","assets/TeachingMaterialsPage-p10u3k2z.css","assets/JoinPage-DtxsIBmd.js","assets/assignmentService-tzBLKRhC.js","assets/joinCodeService-Duqlw8dB.js","assets/gallerySubmissionService-C6_XyJYL.js","assets/gameTypes-f5wEe58l.js","assets/useShuffleQuestions-CMMUsmAD.js","assets/FormControlLabel-UfST9rc_.js","assets/Checkbox-hNFsBxwF.js","assets/Cancel-HgNyvqSD.js","assets/HelpOutline-BjEUExVZ.js","assets/EmojiEvents-C3dbMUOl.js","assets/Container-BqzqHWDq.js","assets/useThemeProps-Cu1lPegC.js","assets/InputAdornment-DLc3DBCX.js","assets/Person-BfcZbBI6.js","assets/ArrowBack-DnBkz0iJ.js","assets/PlayAssignmentPage-CXOeOaN8.js","assets/LinearProgress-CFq27fme.js","assets/Divider-DGtAGn-z.js","assets/Timer-4ebcaaX7.js","assets/PlayAssignmentPage-CLETfkU_.css","assets/AssignmentHistoryPage-Dc2vrjVg.js","assets/HomeTabPageShell-CYm9Ejyp.js","assets/index-CPX-tAFT.js","assets/FileSaver.min-d7RW4grg.js","assets/Tooltip-DCBvMNYw.js","assets/Link-SqD1ZXeC.js","assets/TableContainer--SD-VYOD.js","assets/Lock-fDVNKez0.js","assets/FileDownload-yFOdmKFw.js","assets/ResultDetailModal-DYWpG4sA.js","assets/shortAnswerBlanks-Z6lHtHwe.js","assets/ToggleButtonGroup-CoAE_xr7.js","assets/Visibility-CXJu5lj5.js","assets/Stop-CCdargpS.js","assets/Delete-CqbOIsIj.js","assets/ImageAssignmentReportPage-eQR0ufIM.js","assets/Avatar-CSxuVQfa.js","assets/InfoOutlined-HGdjjro7.js","assets/QuizAssignmentReportPage-RRuzzM14.js","assets/canvasUtils-DM54i9rt.js","assets/NavigateBefore-dT0J7Yer.js","assets/NavigateNext-0yw495e6.js","assets/PrivacyPolicyPage-DGo7-MXi.js","assets/TermsOfServicePage-BIUu_1pn.js","assets/AboutPage-D1kbsdmP.js","assets/ShippingPolicyPage-Bt_Dsimp.js","assets/PricingPage-BxjXoplB.js","assets/WheelQuizPage-K6AfDMNW.js","assets/useFeaturePage-BgJZd55A.js","assets/FeatureSidebar-GlvnyiAl.js","assets/FeatureItemCard-B11iEbdV.js","assets/PinButton-DVd4Vn0o.js","assets/CardContent-HcqzoF-r.js","assets/Edit-D5TIkJzq.js","assets/PlayArrow-CWGWpNtH.js","assets/WheelQuizGameForm-C-4KO0RB.js","assets/Toast-Cc4ZjV4U.js","assets/FeatureContentHeader-B6FiouTH.js","assets/Skeleton-C-RseBC4.js","assets/ListToolbar-qYTbGaSa.js","assets/useFeatureGroups-DWQfcsfG.js","assets/core.esm-BwDchX8C.js","assets/TeacherShareModal-D2XdNkNX.js","assets/teacher
1ShareService-i2USwxcI.js","assets/QuestionPickerModal-BLwYR-OI.js","assets/ImportExportContent-Bu-IsCkc.js","assets/jszip.min-DGzWmKqs.js","assets/Tabs-ulQ2v4-7.js","assets/Download-BSMddDqv.js","assets/Search-D0SNSq96.js","assets/LessonPickerModal-DfhVg30E.js","assets/ManualQuestionEditor-DmqVzH-6.js","assets/MatchingEditor-Biaa9t2J.js","assets/Add-X1dRrWs4.js","assets/FormatSize-ByM8Do4m.js","assets/AudioUploader-Chm1xGy2.js","assets/MusicNote-DGIOj6D7.js","assets/AutoAwesome-D0bRN7MU.js","assets/Replay-CPM-fl2v.js","assets/ConnectorLayer-0AoE8xkX.js","assets/VolumeUp-B-Yk29oY.js","assets/AddPhotoAlternate-DayHwuCF.js","assets/SimpleMathKeyboard-BN4kmru0.js","assets/ConnectorLayer-B18KNi8Y.css","assets/RadioGroup-BAZJump4.js","assets/Radio-DtuO3MtI.js","assets/ImageUploader-fB6JdVWQ.js","assets/ImageUploader-t7ssZ5n2.css","assets/MathEditor-xebJ_Vun.js","assets/CloudUpload-CKwK07YJ.js","assets/AnswerChips-Dvy4IgCL.js","assets/QuestionsFormSection-BUa6ReGb.js","assets/QuickImportExcel-C9Hfbif-.js","assets/ReorderableQuestionList-DQv4tEwH.js","assets/useLibraryPublish-C-JOVX-R.js","assets/publicLibraryService-ZxnW36pj.js","assets/useFeatureAccess-CLO2m6i4.js","assets/Switch-BjW_bRl3.js","assets/buildAvatarSprite-DTjaj1qY.js","assets/useQuestionAudio-BvHiT-Pc.js","assets/fontSize-DJyXapZT.js","assets/useCopyAnalysis-CGpRXrnv.js","assets/WheelQuizPage-BxEtWk2o.css","assets/ClassManagerPage-Dy0VQzJa.js","assets/FullscreenExit-C10KOHzR.js","assets/Fullscreen-gJLBa94q.js","assets/Slider-PQnoAwqH.js","assets/Save-hbfbaGPU.js","assets/PhotoCamera-RLG0U09v.js","assets/CleaningServices-Bw3lGy9u.js","assets/ClassManagerPage-BA8I4Rqy.css","assets/InteractiveVideoPage-B5Pz3dYc.js","assets/AssignGameModal-yoaznfDx.js","assets/versusSessionService-C2bMmyTm.js","assets/htmlEmbedGameService-Plw4Vjhb.js","assets/WarningAmber-CyTKnF7w.js","assets/InteractiveVideoPage-B95hxqWA.css","assets/PanoramaMuseum-DIFKAPUo.js","assets/WalkableGallery-paey-x7I.js","assets/walkableLayout-BdxKC_S_.js","assets/panoramaService-ChbFvy9D.js","assets/PanoramaMuseum-CX-uG7Ux.css","assets/PanoramaViewer-CWMlWebd.js","assets/panoramaUtils-CiIoMmkc.js","assets/PanoramaViewer-CbB197co.css","assets/PanoramaEditor-lO_XMXn8.js","assets/PanoramaEditor-BrQvHYLw.js","assets/PanoramaEditor-Dd1VKsPY.css","assets/WalkableGalleryEditor-B28wEmqZ.js","assets/QrCode-DnQkLX1Q.js","assets/WalkableGalleryEditor-Bl0oZRCr.css","assets/StudentGalleryUploadPage-DkQvqWud.js","assets/SharePanoramaViewer-DOW88Gmy.js","assets/ExhibitionViewer-3Do72Ic-.js","assets/QuizGamePage-AEHN4TiS.js","assets/Undo-DC-JB9Mp.js","assets/groupingTypes-CAbobkax.js","assets/Grid-DAzlEAnp.js","assets/QuizGamePage--6vCbJY-.css","assets/QuizPreviewPage-Ccg9_QpN.js","assets/SortingPreview-D7YmPw4q.js","assets/Refresh-VvKVo17n.js","assets/KeyboardArrowUp-BlUfAUIY.js","assets/QuizPreview-D3LhzcUy.js","assets/HandSlashQuiz-BPykzyxT.js","assets/HandSlashGame-DBtAwU7i.js","assets/popSound-DALTQoUw.js","assets/useTextToSpeech-Bne2Q9kI.js","assets/TTSUpgradeModal-zsxsLhWO.js","assets/Computer-W5OerV6d.js","assets/demoLesson-IDhKhA72.js","assets/PanTool-Bkg4jAwl.js","assets/HandSlashQuizPage-CpzoDyc8.js","assets/BgmSelector-CnqowCqv.js","assets/HandSlashQuizPage-CwDznh4l.css","assets/ShareHandSlashQuiz-T-INMuQD.js","assets/FlyingWordsGamePage-0W_jU3LF.js","assets/demoLesson-bKz3kMLX.js","assets/ArrowUpward-DANMY_h1.js","assets/FlyingWordsGamePage-FAwSAa74.css","assets/PlayFlyingWordsPage-CGQau0Ru.js","assets/FlyingWordsGame-C9rUX58H.js","assets/Pause-D4-cH8gy.js","assets/Gesture-7uxWOiCk.js","assets/ShareFlyingWordsPage-DdxVJfat.js","assets/HeadTiltQuizPage-Bnyos8AO.js","assets/demoLesson-DqB1OEl-.js","assets/HeadTiltQuizPage-CdNPIYBA.css","assets/HeadTiltQuiz-BpSRv1g5.js","assets/FlashcardPage-C0jP2FXb.js","assets/FlashcardPlayer-DhnHqB80.js","assets/FlashcardPlayer-CALWa509.css","assets/FlashcardPage-C_dhgU3k.css","assets/MindMapPage-BA4qxQNT.js","assets/MindMapPage-CVhB1yM9.css","assets/TurnBasedGamePage-DLKBzuwm.js","assets/TurnBasedGamePlayer-Du3v4IJ9.js","assets/TurnBasedGamePage-CvrsBRl-.css","assets/VersusGamePage-c3pGMFW-.js","assets/VersusGamePage-SnbUeoYt.css","assets/VersusLobbyPage-B1PdT1ZK.js","assets/VersusMatchRoom-CBFiXDss.js","assets/QuestionBankPage-UhIyA4gK.js","assets/FlipPuzzleGamePage-C15xlmzI.js","assets/PuzzlePlayer-BiQZtx4b.js","assets/PuzzleCanvas-BIbUv9sx.js","assets/FlipPuzzleGamePage-CW0ns0PS.css","assets/ShareFlipPuzzlePage-Dr9PRrmb.js","assets/KnowledgeTrainGamePage-XOOqX8Kj.js","assets/TrainPlayer-DrZ72DR4.js","assets/TrainPlayer-DS4GX0kP.css","assets/KnowledgeTrainGamePage-DJgoCw7k.css","assets/ShareKnowledgeTrainPage-DByuwsz8.js","assets/PacedQuizPage-C3rpMnBb.js","assets/sessionService-BMBVjvS1.js","assets/PacedQuizPage-ChrL2J0W.css","assets/TeacherControlScreen-PMJdIVMc.js","assets/AutoFitText-D0rXCXtT.js","assets/useListeningAudio-BqnWWD5P.js","assets/QrCode2-CklJ54qi.js","assets/StudentAnswerPage-HGOG3fl-.js","assets/RichAnswerBlock-B1D4xo-F.js","assets/TeamSelectionPage-vmY0fYhr.
1js","assets/LeaderboardPage-CXw1E2r_.js","assets/CrosswordPuzzlePage-B_We3CDP.js","assets/CrosswordGrid-yVWAUtab.js","assets/CrosswordPlayer-D4kUTwJg.js","assets/LockOpen-Dm9vM1Jk.js","assets/TextIncrease-DsuFbsEa.js","assets/wordSearchUtils-BVN2oXD_.js","assets/CrosswordPuzzle-Drk9EKxP.css","assets/ShareCrosswordPage-CfbU2o24.js","assets/TugOfWarGamePage-CUlAf2XM.js","assets/TugOfWarPlayer-9s-2xlm5.js","assets/TugOfWarPlayer-DS7Y0oev.css","assets/TugOfWarGame-D2RQJSPd.css","assets/ShareTugOfWarPage-BPAZfbZf.js","assets/StarBagGamePage-l8wVgVNh.js","assets/StarBagPlayer-WezR28N1.js","assets/StarBagPlayer-Bs-jnUkf.css","assets/StarBagGame-BA_pqfk0.css","assets/ShareStarBagPage-DIn2kGpM.js","assets/MinesweeperPage-DLqk8gnO.js","assets/MinesweeperPlayer-BPnSILsR.js","assets/index-i_2xCsYW.js","assets/MinesweeperPlayer-i4UjqC06.css","assets/MinesweeperPage-BguNFS0f.css","assets/ShareMinesweeperPage-D5QOLlCb.js","assets/ClaimSharedGamePage-3zaDU92r.js","assets/escapeHtml-DqpNAFMJ.js","assets/InteractiveImagePage-dkl1lDni.js","assets/ImagePlayer-CD18Q63-.js","assets/ImagePlayer-UT3X1o_3.css","assets/InteractiveImagePage-FtWQDlRo.css","assets/ShareInteractiveImagePage-BdrohYVq.js","assets/NoiseTrackerPage-CrlrlnvS.js","assets/NoiseTrackerPage-DVF3SsvS.css","assets/PoseQuizPage-DoHnm3-L.js","assets/poseAssets-ZNOI986V.js","assets/VolumeOff-DQJHyR6C.js","assets/PoseCameraSlideshow-xVY9VWSj.js","assets/JourneyDashboardPage-DdbltMRO.js","assets/questionSetService-DzWTdDSV.js","assets/journeyService-CvO_pznV.js","assets/passportService-C0CEYbl1.js","assets/People-B1LkD4oz.js","assets/JourneyCreatorPage-GAbD0MFa.js","assets/JourneyPlayerPage-Cr7IehJ8.js","assets/CommunityLibraryPage-DRyGqQc8.js","assets/DeleteOutline-DjfIYkN5.js","assets/AdminApp-B8J0DjiI.js","assets/OpenInNew-Ccxnyczv.js","assets/miniAppOptions-o2MR3Qhf.js","assets/PaperModePage-C84AUVoC.js","assets/countdown-Dr_6K1bo.js","assets/arucoMarker-DFoJABdA.js","assets/surveyScales-BPALTy85.js","assets/paperResultsService-COGhFGQu.js","assets/ChevronRight-CC1dogF8.js","assets/PaperModePage-C8fMjPx8.css","assets/SessionControlPage-AgxsmEc_.js","assets/paperLiveSessionService-2E3wGp2F.js","assets/answerKeys-Bby1j-dW.js","assets/useWakeLock-Cbmy77_Z.js","assets/PhoneIphone-DwOC8Eqb.js","assets/ResultsPage-BIanAjg3.js","assets/ResultsPage-D7hKImsY.css","assets/ScanPage-B2vEd0Qv.js","assets/browserDetection-CeLYqcpk.js","assets/FaceRandomPage-Cibh3n4d.js","assets/useFaceRandomWebRTC-BW5vVoUM.js","assets/FaceRandomPage-ekKvqmdz.css","assets/FaceRandomScanPage-BjFpgOGC.js","assets/ScavengerHuntPage-B_pUbEn3.js","assets/scavengerHuntService-B0xB--Rj.js","assets/demoHunt-BkZSBJei.js","assets/ScavengerHuntPage-cDSd1PYa.css","assets/PlayHuntPage-9W2OYNL-.js","assets/PlayHuntPage-CUNFswIF.css","assets/HtmlEmbedGamePage-ZcPcnsLf.js","assets/PasteAiPage-CBU4Y29n.js","assets/PasteAiPage-7vVj0p_C.css","assets/CtvMiniAppsPage-DFz_9Awe.js","assets/miniAppsService-DS1h1ZtJ.js","assets/CtvMiniAppsPage-CitFs-qc.css","assets/MiniAppsBrowsePage-Bt4_hkl7.js","assets/MiniAppsBrowsePage-CV7ogg-Y.css"])))=>i.map(i=>d[i]);
2var Nt=Object.defineProperty;var Bt=(o,u,T)=>u in o?Nt(o,u,{enumerable:!0,configurable:!0,writable:!0,value:T}):o[u]=T;var pt=(o,u,T)=>Bt(o,typeof u!="symbol"?u+"":u,T);import{r as reactExports,b as React,g as getDefaultExportFromCjs,R as React$1,j as jsxRuntimeExports,d as ReactDOM,e as reactDomExports,f as commonjsGlobal,h as ReactDOM$1}from"./vendor-react-DJzUMfd1.js";import{_ as _extends$3,s as shimExports,a as __vitePreload}from"./vendor-3d-B-0V4uEN.js";import{i as initializeApp,a as initializeAppCheck,g as getAuth,b as getFirestore,c as getStorage,d as getDatabase,G as GoogleAuthProvider,R as ReCaptchaV3Provider,e as doc,s as setDoc,f as getDocFromServer,h as signOut,j as getRedirectResult,o as onAuthStateChanged,k as signInWithPopup,l as signInWithRedirect,m as getDoc,u as updateDoc,n as increment,p as onSnapshot,q as deleteDoc,T as Timestamp,r as query,t as collection,w as where,v as orderBy,x as limit,y as getDocs}from"./vendor-firebase-NOrVjYbK.js";import{k as katex}from"./vendor-katex-DqEyuLHo.js";(function(){const u=document.createElement("link").relList;if(u&&u.supports&&u.supports("modulepreload"))return;for(const E of document.querySelectorAll('link[rel="modulepreload"]'))S(E);new MutationObserver(E=>{for(const C of E)if(C.type==="childList")for(const _ of C.addedNodes)_.tagName==="LINK"&&_.rel==="modulepreload"&&S(_)}).observe(document,{childList:!0,subtree:!0});function T(E){const C={};return E.integrity&&(C.integrity=E.integrity),E.referrerPolicy&&(C.referrerPolicy=E.referrerPolicy),E.crossOrigin==="use-credentials"?C.credentials="include":E.crossOrigin==="anonymous"?C.credentials="omit":C.credentials="same-origin",C}function S(E){if(E.ep)return;E.ep=!0;const C=T(E);fetch(E.href,C)}})();/**
3 * @remix-run/router v1.23.0
4 *
5 * Copyright (c) Remix Software Inc.
6 *
7 * This source code is licensed under the MIT license found in the
8 * LICENSE.md file in the root directory of this source tree.
9 *
10 * @license MIT
11 */function _extends$2(){return _extends$2=Object.assign?Object.assign.bind():function(o){for(var u=1;u<arguments.length;u++){var T=arguments[u];for(var S in T)Object.prototype.hasOwnProperty.call(T,S)&&(o[S]=T[S])}return o},_extends$2.apply(this,arguments)}var Action;(function(o){o.Pop="POP",o.Push="PUSH",o.Replace="REPLACE"})(Action||(Action={}));const PopStateEventType="popstate";function createBrowserHistory(o){o===void 0&&(o={});function u(S,E){let{pathname:C,search:_,hash:P}=S.location;return createLocation("",{pathname:C,search:_,hash:P},E.state&&E.state.usr||null,E.state&&E.state.key||"default")}function T(S,E){return typeof E=="string"?E:createPath(E)}return getUrlBasedHistory(u,T,null,o)}function invariant$3(o,u){if(o===!1||o===null||typeof o>"u")throw new Error(u)}function warning(o,u){if(!o){typeof console<"u"&&console.warn(u);try{throw new Error(u)}catch{}}}function createKey(){return Math.random().toString(36).substr(2,8)}function getHistoryState(o,u){return{usr:o.state,key:o.key,idx:u}}function createLocation(o,u,T,S){return T===void 0&&(T=null),_extends$2({pathname:typeof o=="str
11ing"?o:o.pathname,search:"",hash:""},typeof u=="string"?parsePath(u):u,{state:T,key:u&&u.key||S||createKey()})}function createPath(o){let{pathname:u="/",search:T="",hash:S=""}=o;return T&&T!=="?"&&(u+=T.charAt(0)==="?"?T:"?"+T),S&&S!=="#"&&(u+=S.charAt(0)==="#"?S:"#"+S),u}function parsePath(o){let u={};if(o){let T=o.indexOf("#");T>=0&&(u.hash=o.substr(T),o=o.substr(0,T));let S=o.indexOf("?");S>=0&&(u.search=o.substr(S),o=o.substr(0,S)),o&&(u.pathname=o)}return u}function getUrlBasedHistory(o,u,T,S){S===void 0&&(S={});let{window:E=document.defaultView,v5Compat:C=!1}=S,_=E.history,P=Action.Pop,R=null,I=L();I==null&&(I=0,_.replaceState(_extends$2({},_.state,{idx:I}),""));function L(){return(_.state||{idx:null}).idx}function j(){P=Action.Pop;let G=L(),B=G==null?null:G-I;I=G,R&&R({action:P,location:N.location,delta:B})}function M(G,B){P=Action.Push;let H=createLocation(N.location,G,B);I=L()+1;let O=getHistoryState(H,I),V=N.createHref(H);try{_.pushState(O,"",V)}catch(U){if(U instanceof DOMException&&U.name==="DataCloneError")throw U;E.location.assign(V)}C&&R&&R({action:P,location:N.location,delta:1})}function D(G,B){P=Action.Replace;let H=createLocation(N.location,G,B);I=L();let O=getHistoryState(H,I),V=N.createHref(H);_.replaceState(O,"",V),C&&R&&R({action:P,location:N.location,delta:0})}function F(G){let B=E.location.origin!=="null"?E.location.origin:E.location.href,H=typeof G=="string"?G:createPath(G);return H=H.replace(/ $/,"%20"),invariant$3(B,"No window.location.(origin|href) available to create URL for href: "+H),new URL(H,B)}let N={get action(){return P},get location(){return o(E,_)},listen(G){if(R)throw new Error("A history only accepts one active listener");return E.addEventListener(PopStateEventType,j),R=G,()=>{E.removeEventListener(PopStateEventType,j),R=null}},createHref(G){return u(E,G)},createURL:F,encodeLocation(G){let B=F(G);return{pathname:B.pathname,search:B.search,hash:B.hash}},push:M,replace:D,go(G){return _.go(G)}};return N}var ResultType;(function(o){o.data="data",o.deferred="deferred",o.redirect="redirect",o.error="error"})(ResultType||(ResultType={}));function matchRoutes(o,u,T){return T===void 0&&(T="/"),matchRoutesImpl(o,u,T)}function matchRoutesImpl(o,u,T,S){let E=typeof u=="string"?parsePath(u):u,C=stripBasename(E.pathname||"/",T);if(C==null)return null;let _=flattenRoutes(o);rankRouteBranches(_);let P=null;for(let R=0;P==null&&R<_.length;++R){let I=decodePath(C);P=matchRouteBranch(_[R],I)}return P}function flattenRoutes(o,u,T,S){u===void 0&&(u=[]),T===void 0&&(T=[]),S===void 0&&(S="");let E=(C,_,P)=>{let R={relativePath:P===void 0?C.path||"":P,caseSensitive:C.caseSensitive===!0,childrenIndex:_,route:C};R.relativePath.startsWith("/")&&(invariant$3(R.relativePath.startsWith(S),'Absolute route path "'+R.relativePath+'" nested under path '+('"'+S+'" is not valid. An absolute child route path ')+"must start with the combined path of all its parent routes."),R.relativePath=R.relativePath.slice(S.length));let I=joinPaths([S,R.relativePath]),L=T.concat(R);C.children&&C.children.length>0&&(invariant$3(C.index!==!0,"Index routes must not have child routes. Please remove "+('all child routes from route path "'+I+'".')),flattenRoutes(C.children,u,L,I)),!(C.path==null&&!C.index)&&u.push({path:I,score:computeScore(I,C.index),routesMeta:L})};return o.forEach((C,_)=>{var P;if(C.path===""||!((P=C.path)!=null&&P.includes("?")))E(C,_);else for(let R of explodeOptionalSegments(C.path))E(C,_,R)}),u}function explodeOptionalSegments(o){let u=o.split("/");if(u.length===0)return[];let[T,...S]=u,E=T.endsWith("?"),C=T.replace(/\?$/,"");if(S.length===0)return E?[C,""]:[C];let _=explodeOptionalSegments(S.join("/")),P=[];return P.push(..._.map(R=>R===""?C:[C,R].join("/"))),E&&P.push(..._),P.map(R=>o.startsWith("/")&&R===""?"/":R)}function rankRouteBranches(o){o.sort((u,T)=>u.score!==T.score?T.score-u.score:compareIndexes(u.routesMeta.map(S=>S.childrenIndex),T.routesMeta.map(S=>S.childrenIndex)))}const paramRe=/^:[\w-]+$/,dynamicSegmentValue=3,indexRouteValue=2,emptySegmentValue=1,staticSegmentValue=10,splatPenalty=-2,isSplat=o=>o==="*";
11function computeScore(o,u){let T=o.split("/"),S=T.length;return T.some(isSplat)&&(S+=splatPenalty),u&&(S+=indexRouteValue),T.filter(E=>!isSplat(E)).reduce((E,C)=>E+(paramRe.test(C)?dynamicSegmentValue:C===""?emptySegmentValue:staticSegmentValue),S)}function compareIndexes(o,u){return o.length===u.length&&o.slice(0,-1).every((S,E)=>S===u[E])?o[o.length-1]-u[u.length-1]:0}function matchRouteBranch(o,u,T){let{routesMeta:S}=o,E={},C="/",_=[];for(let P=0;P<S.length;++P){let R=S[P],I=P===S.length-1,L=C==="/"?u:u.slice(C.length)||"/",j=matchPath({path:R.relativePath,caseSensitive:R.caseSensitive,end:I},L),M=R.route;if(!j)return null;Object.assign(E,j.params),_.push({params:E,pathname:joinPaths([C,j.pathname]),pathnameBase:normalizePathname(joinPaths([C,j.pathnameBase])),route:M}),j.pathnameBase!=="/"&&(C=joinPaths([C,j.pathnameBase]))}return _}function matchPath(o,u){typeof o=="string"&&(o={path:o,caseSensitive:!1,end:!0});let[T,S]=compilePath(o.path,o.caseSensitive,o.end),E=u.match(T);if(!E)return null;let C=E[0],_=C.replace(/(.)\/+$/,"$1"),P=E.slice(1);return{params:S.reduce((I,L,j)=>{let{paramName:M,isOptional:D}=L;if(M==="*"){let N=P[j]||"";_=C.slice(0,C.length-N.length).replace(/(.)\/+$/,"$1")}const F=P[j];return D&&!F?I[M]=void 0:I[M]=(F||"").replace(/%2F/g,"/"),I},{}),pathname:C,pathnameBase:_,pattern:o}}function compilePath(o,u,T){u===void 0&&(u=!1),T===void 0&&(T=!0),warning(o==="*"||!o.endsWith("*")||o.endsWith("/*"),'Route path "'+o+'" will be treated as if it were '+('"'+o.replace(/\*$/,"/*")+'" because the `*` character must ')+"always follow a `/` in the pattern. To get rid of this warning, "+('please change the route path to "'+o.replace(/\*$/,"/*")+'".'));let S=[],E="^"+o.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(_,P,R)=>(S.push({paramName:P,isOptional:R!=null}),R?"/?([^\\/]+)?":"/([^\\/]+)"));return o.endsWith("*")?(S.push({paramName:"*"}),E+=o==="*"||o==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):T?E+="\\/*$":o!==""&&o!=="/"&&(E+="(?:(?=\\/|$))"),[new RegExp(E,u?void 0:"i"),S]}function decodePath(o){try{return o.split("/").map(u=>decodeURIComponent(u).replace(/\//g,"%2F")).join("/")}catch(u){return warning(!1,'The URL path "'+o+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent '+("encoding ("+u+").")),o}}function stripBasename(o,u){if(u==="/")return o;if(!o.toLowerCase().startsWith(u.toLowerCase()))return null;let T=u.endsWith("/")?u.length-1:u.length,S=o.charAt(T);return S&&S!=="/"?null:o.slice(T)||"/"}function resolvePath(o,u){u===void 0&&(u="/");let{pathname:T,search:S="",hash:E=""}=typeof o=="string"?parsePath(o):o;return{pathname:T?T.startsWith("/")?T:resolvePathname(T,u):u,search:normalizeSearch(S),hash:normalizeHash(E)}}function resolvePathname(o,u){let T=u.replace(/\/+$/,"").split("/");return o.split("/").forEach(E=>{E===".."?T.length>1&&T.pop():E!=="."&&T.push(E)}),T.length>1?T.join("/"):"/"}function getInvalidPathError(o,u,T,S){return"Cannot include a '"+o+"' character in a manually specified "+("`to."+u+"` field ["+JSON.stringify(S)+"].  Please separate it out to the ")+("`to."+T+"` field. Alternatively you may provide the full path as ")+'a string in <Link to="..."> and the router will parse it for you.'}function getPathContributingMatches(o){return o.filter((u,T)=>T===0||u.route.path&&u.route.path.length>0)}function getResolveToMatches(o,u){let T=getPathContributingMatches(o);return u?T.map((S,E)=>E===T.length-1?S.pathname:S.pathnameBase):T.map(S=>S.pathnameBase)}function resolveTo(o,u,T,S){S===void 0&&(S=!1);let E;typeof o=="string"?E=parsePath(o):(E=_extends$2({},o),invariant$3(!E.pathname||!E.pathname.includes("?"),getInvalidPathError("?","pathname","search",E)),invariant$3(!E.pathname||!E.pathname.includes("#"),getInvalidPathError("#","pathname","hash",E)),invariant$3(!E.search||!E.search.includes("#"),getInvalidPathError("#","search","hash",E)));let C=o===""||E.pathname==="",_=C?"/":E.pathname,P;if(_==null)P=T;else{let j=u.length-1;if(!S&&_.startsWith("..")){let M=_.split("/");for(;M[0]==="..";)M.shift(),j-=1;E.pathname=M.join("/")}P=j>=0?u[j]:"/"}let R=resolvePath(E,P),I=_&&_!=="/"&&_.endsWith("/"),L=(C||_===".")&&T.endsWith("/");return!R.pathname.endsWith("/")&&(I||L)&&(R.pathname+="/"),R}const joinPaths=o=>o.join("/").replace(/\/\/+/g,"/"),normalizePathname=o=>o.replace(/\/+$/,"").replace(/^\/*/,"/"),normalizeSearch=o=>!o||o==="?"?"":o.startsWith("?")?o:"?"+o,normalizeHash=o=>!o||o==="#"?"":o.startsWith("#")?o:"#"+o;function isRouteErrorResponse(o){return o!=null&&typeof o.status=="number"&&typeof o.statusText=="string"&&typeof o.internal=="boolean"&&"data"in o}const validMutationMethodsArr=["post","put","patch","delete"];new Set(validMutationMethodsArr);const validRequestMethodsArr=["get",...validMutationMethodsArr];new Set(validRequestMethodsArr);/**
12 * React Router v6.30.1
13 *
14 * Copyright (c) Remix Software Inc.
15 *
16 * This source code is licensed under the MIT license found in the
17 * LICENSE.md file in the root directory of this source tree.
18 *
19 * @license MIT
20 */function _extends$1(){return _extends$1=Object.assign?Object.assign.bind():function(o){for(var u=1;u<arguments.length;u++){var T=arguments[u];for(var S in T)Object.prototype.hasOwnProperty.call(T,S)&&(o[S]=T[S])}return o},_extends$1.apply(this,arguments)}const DataRouterContext=reactExports.createContext(null),DataRouterStateContext=reactExports.createContext(null),NavigationContext=reactExports.createContext(null),LocationContext=reactExports.createContext(null),RouteContext=reactExports.createContext({outlet:null,matches:[],isDataRoute:!1}),RouteErrorContext=reactExports.createContext(null);function useHref(o,u){let{relative:T}=u===void 0?{}:u;useInRouterContext()||invariant$3(!1);let{basename:S,navigator:E}=reactExports.useContext(NavigationContext),{hash:C,pathname:_,search:P}=useResolvedPath(o,{relative:T}),R=_;return S!=="/"&&(R=_==="/"?S:joinPaths([S,_])),E.createHref({pathname:R,search:P,hash:C})}function useInRouterContext(){return reactExports.useContext(LocationContext)!=null}function useLocation(){return useInRouterContext()||invariant$3(!1),reactExports.useContext(LocationContext).location}function useIsomorphicLayoutEffect$1(o){reactExports.useContext(NavigationContext).static||reactExports.useLayoutEffect(o)}function useNavigate(){let{isDataRoute:o}=reactExports.useContext(RouteContext);return o?useNavigateStable():useNavigateUnstable()}function useNavigateUnstable(){useInRouterContext()||invariant$3(!1);
20let o=reactExports.useContext(DataRouterContext),{basename:u,future:T,navigator:S}=reactExports.useContext(NavigationContext),{matches:E}=reactExports.useContext(RouteContext),{pathname:C}=useLocation(),_=JSON.stringify(getResolveToMatches(E,T.v7_relativeSplatPath)),P=reactExports.useRef(!1);return useIsomorphicLayoutEffect$1(()=>{P.current=!0}),reactExports.useCallback(function(I,L){if(L===void 0&&(L={}),!P.current)return;if(typeof I=="number"){S.go(I);return}let j=resolveTo(I,JSON.parse(_),C,L.relative==="path");o==null&&u!=="/"&&(j.pathname=j.pathname==="/"?u:joinPaths([u,j.pathname])),(L.replace?S.replace:S.push)(j,L.state,L)},[u,S,_,C,o])}function useParams(){let{matches:o}=reactExports.useContext(RouteContext),u=o[o.length-1];return u?u.params:{}}function useResolvedPath(o,u){let{relative:T}=u===void 0?{}:u,{future:S}=reactExports.useContext(NavigationContext),{matches:E}=reactExports.useContext(RouteContext),{pathname:C}=useLocation(),_=JSON.stringify(getResolveToMatches(E,S.v7_relativeSplatPath));return reactExports.useMemo(()=>resolveTo(o,JSON.parse(_),C,T==="path"),[o,_,C,T])}function useRoutes(o,u){return useRoutesImpl(o,u)}function useRoutesImpl(o,u,T,S){useInRouterContext()||invariant$3(!1);let{navigator:E}=reactExports.useContext(NavigationContext),{matches:C}=reactExports.useContext(RouteContext),_=C[C.length-1],P=_?_.params:{};_&&_.pathname;let R=_?_.pathnameBase:"/";_&&_.route;let I=useLocation(),L;if(u){var j;let G=typeof u=="string"?parsePath(u):u;R==="/"||(j=G.pathname)!=null&&j.startsWith(R)||invariant$3(!1),L=G}else L=I;let M=L.pathname||"/",D=M;if(R!=="/"){let G=R.replace(/^\//,"").split("/");D="/"+M.replace(/^\//,"").split("/").slice(G.length).join("/")}let F=matchRoutes(o,{pathname:D}),N=_renderMatches(F&&F.map(G=>Object.assign({},G,{params:Object.assign({},P,G.params),pathname:joinPaths([R,E.encodeLocation?E.encodeLocation(G.pathname).pathname:G.pathname]),pathnameBase:G.pathnameBase==="/"?R:joinPaths([R,E.encodeLocation?E.encodeLocation(G.pathnameBase).pathname:G.pathnameBase])})),C,T,S);return u&&N?reactExports.createElement(LocationContext.Provider,{value:{location:_extends$1({pathname:"/",search:"",hash:"",state:null,key:"default"},L),navigationType:Action.Pop}},N):N}function DefaultErrorComponent(){let o=useRouteError(),u=isRouteErrorResponse(o)?o.status+" "+o.statusText:o instanceof Error?o.message:JSON.stringify(o),T=o instanceof Error?o.stack:null,E={padding:"0.5rem",backgroundColor:"rgba(200,200,200, 0.5)"};return reactExports.createElement(reactExports.Fragment,null,reactExports.createElement("h2",null,"Unexpected Application Error!"),reactExports.createElement("h3",{style:{fontStyle:"italic"}},u),T?reactExports.createElement("pre",{style:E},T):null,null)}const defaultErrorElement=reactExports.createElement(DefaultErrorComponent,null);class RenderErrorBoundary extends reactExports.Component{constructor(u){super(u),this.state={location:u.location,revalidation:u.revalidation,error:u.error}}static getDerivedStateFromError(u){return{error:u}}static getDerivedStateFromProps(u,T){return T.location!==u.location||T.revalidation!=="idle"&&u.revalidation==="idle"?{error:u.error,location:u.location,revalidation:u.revalidation}:{error:u.error!==void 0?u.error:T.error,location:T.location,revalidation:u.revalidation||T.revalidation}}componentDidCatch(u,T){console.error("React Router caught the following error during render",u,T)}render(){return this.state.error!==void 0?reactExports.createElement(RouteContext.Provider,{value:this.props.routeContext},reactExports.createElement(RouteErrorContext.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function RenderedRoute(o){let{routeContext:u,match:T,children:S}=o,E=reactExports.useContext(DataRouterContext);return E&&E.static&&E.staticContext&&(T.route.errorElement||T.route.ErrorBoundary)&&(E.staticContext._deepestRenderedBoundaryId=T.route.id),reactExports.createElement(RouteContext.Provider,{value:u},S)}function _renderMatches(o,u,T,S){var E;if(u===void 0&&(u=[]),T===void 0&&(T=null),S===void 0&&(S=null),o==null){var C;if(!T)return null;if(T.errors)o=T.matches;else if((C=S)!=null&&C.v7_partialHydration&&u.length===0&&!T.initialized&&T.matches.length>0)o=T.matches;else return null}let _=o,P=(E=T)==null?void 0:E.errors;if(P!=null){let L=_.findIndex(j=>j.route.id&&(P==null?void 0:P[j.route.id])!==void 0);L>=0||invariant$3(!1),_=_.slice(0,Math.min(_.length,L+1))}let R=!1,I=-1;if(T&&S&&S.v7_partialHydration)for(let L=0;L<_.length;L++){let j=_[L];if((j.route.HydrateFallback||j.route.hydrateFallbackElement)&&(I=L),j.route.id){let{loaderData:M,errors:D}=T,F=j.route.loader&&M[j.route.id]===void 0&&(!D||D[j.route.id]===void 0);if(j.route.lazy||F){R=!0,I>=0?_=_.slice(0,I+1):_=[_[0]];break}}}return _.reduceRight((L,j,M)=>{let D,F=!1,N=null,G=null;T&&(D=P&&j.route.id?P[j.route.id]:void 0,N=j.route.errorElement||defaultErrorElement,R&&(I<0&&M===0?(warningOnce("route-fallback"),F=!0,G=null):I===M&&(F=!0,G=j.route.hydrateFallbackElement||null)));let B=u.concat(_.slice(0,M+1)),H=()=>{let O;return D?O=N:F?O=G:j.route.Component?O=reactExports.createElement(j.route.Component,null):j.route.element?O=j.route.element:O=L,reactExports.createElement(RenderedRoute,{match:j,routeContext:{outlet:L,matches:B,isDataRoute:T!=null},children:O})};return T&&(j.route.ErrorBoundary||j.route.errorElement||M===0)?reactExports.createElement(RenderErrorBoundary,{location:T.location,revalidation:T.revalidation,component:N,error:D,children:H(),routeC
20ontext:{outlet:null,matches:B,isDataRoute:!0}}):H()},null)}var DataRouterHook$1=function(o){return o.UseBlocker="useBlocker",o.UseRevalidator="useRevalidator",o.UseNavigateStable="useNavigate",o}(DataRouterHook$1||{}),DataRouterStateHook$1=function(o){return o.UseBlocker="useBlocker",o.UseLoaderData="useLoaderData",o.UseActionData="useActionData",o.UseRouteError="useRouteError",o.UseNavigation="useNavigation",o.UseRouteLoaderData="useRouteLoaderData",o.UseMatches="useMatches",o.UseRevalidator="useRevalidator",o.UseNavigateStable="useNavigate",o.UseRouteId="useRouteId",o}(DataRouterStateHook$1||{});function useDataRouterContext(o){let u=reactExports.useContext(DataRouterContext);return u||invariant$3(!1),u}function useDataRouterState(o){let u=reactExports.useContext(DataRouterStateContext);return u||invariant$3(!1),u}function useRouteContext(o){let u=reactExports.useContext(RouteContext);return u||invariant$3(!1),u}function useCurrentRouteId(o){let u=useRouteContext(),T=u.matches[u.matches.length-1];return T.route.id||invariant$3(!1),T.route.id}function useRouteError(){var o;let u=reactExports.useContext(RouteErrorContext),T=useDataRouterState(),S=useCurrentRouteId();return u!==void 0?u:(o=T.errors)==null?void 0:o[S]}function useNavigateStable(){let{router:o}=useDataRouterContext(DataRouterHook$1.UseNavigateStable),u=useCurrentRouteId(DataRouterStateHook$1.UseNavigateStable),T=reactExports.useRef(!1);return useIsomorphicLayoutEffect$1(()=>{T.current=!0}),reactExports.useCallback(function(E,C){C===void 0&&(C={}),T.current&&(typeof E=="number"?o.navigate(E):o.navigate(E,_extends$1({fromRouteId:u},C)))},[o,u])}const alreadyWarned$1={};function warningOnce(o,u,T){alreadyWarned$1[o]||(alreadyWarned$1[o]=!0)}function logV6DeprecationWarnings(o,u){o==null||o.v7_startTransition,o==null||o.v7_relativeSplatPath}function Navigate(o){let{to:u,replace:T,state:S,relative:E}=o;useInRouterContext()||invariant$3(!1);let{future:C,static:_}=reactExports.useContext(NavigationContext),{matches:P}=reactExports.useContext(RouteContext),{pathname:R}=useLocation(),I=useNavigate(),L=resolveTo(u,getResolveToMatches(P,C.v7_relativeSplatPath),R,E==="path"),j=JSON.stringify(L);return reactExports.useEffect(()=>I(JSON.parse(j),{replace:T,state:S,relative:E}),[I,j,E,T,S]),null}function Route(o){invariant$3(!1)}function Router(o){let{basename:u="/",children:T=null,location:S,navigationType:E=Action.Pop,navigator:C,static:_=!1,future:P}=o;useInRouterContext()&&invariant$3(!1);let R=u.replace(/^\/*/,"/"),I=reactExports.useMemo(()=>({basename:R,navigator:C,static:_,future:_extends$1({v7_relativeSplatPath:!1},P)}),[R,P,C,_]);typeof S=="string"&&(S=parsePath(S));let{pathname:L="/",search:j="",hash:M="",state:D=null,key:F="default"}=S,N=reactExports.useMemo(()=>{let G=stripBasename(L,R);return G==null?null:{location:{pathname:G,search:j,hash:M,state:D,key:F},navigationType:E}},[R,L,j,M,D,F,E]);return N==null?null:reactExports.createElement(NavigationContext.Provider,{value:I},reactExports.createElement(LocationContext.Provider,{children:T,value:N}))}function Routes(o){let{children:u,location:T}=o;return useRoutes(createRoutesFromChildren(u),T)}new Promise(()=>{});function createRoutesFromChildren(o,u){u===void 0&&(u=[]);let T=[];return reactExports.Children.forEach(o,(S,E)=>{if(!reactExports.isValidElement(S))return;let C=[...u,E];if(S.type===reactExports.Fragment){T.push.apply(T,createRoutesFromChildren(S.props.children,C));return}S.type!==Route&&invariant$3(!1),!S.props.index||!S.props.children||invariant$3(!1);let _={id:S.props.id||C.join("-"),caseSensitive:S.props.caseSensitive,element:S.props.element,Component:S.props.Component,index:S.props.index,path:S.props.path,loader:S.props.loader,action:S.props.action,errorElement:S.props.errorElement,ErrorBoundary:S.props.ErrorBoundary,hasErrorBoundary:S.props.ErrorBoundary!=null||S.props.errorElement!=null,shouldRevalidate:S.props.shouldRevalidate,handle:S.props.handle,lazy:S.props.lazy};S.props.children&&(_.children=createRoutesFromChildren(S.props.children,C)),T.push(_)}),T}/**
21 * React Router DOM v6.30.1
22 *
23 * Copyright (c) Remix Software Inc.
24 *
25 * This source code is licensed under the MIT license found in the
26 * LICENSE.md file in the root directory of this source tree.
27 *
28 * @license MIT
29 */function _extends(){return _extends=Object.assign?Object.assign.bind():function(o){for(var u=1;u<arguments.length;u++){var T=arguments[u];for(var S in T)Object.prototype.hasOwnProperty.call(T,S)&&(o[S]=T[S])}return o},_extends.apply(this,arguments)}function _objectWithoutPropertiesLoose$2(o,u){if(o==null)return{};var T={},S=Object.keys(o),E,C;for(C=0;C<S.length;C++)E=S[C],!(u.indexOf(E)>=0)&&(T[E]=o[E]);return T}function isModifiedEvent(o){return!!(o.metaKey||o.altKey||o.ctrlKey||o.shiftKey)}function shouldProcessLinkClick(o,u){return o.button===0&&(!u||u==="_self")&&!isModifiedEvent(o)}function createSearchParams(o){return o===void 0&&(o=""),new URLSearchParams(typeof o=="str
29ing"||Array.isArray(o)||o instanceof URLSearchParams?o:Object.keys(o).reduce((u,T)=>{let S=o[T];return u.concat(Array.isArray(S)?S.map(E=>[T,E]):[[T,S]])},[]))}function getSearchParamsForLocation(o,u){let T=createSearchParams(o);return u&&u.forEach((S,E)=>{T.has(E)||u.getAll(E).forEach(C=>{T.append(E,C)})}),T}const _excluded$2=["onClick","relative","reloadDocument","replace","state","target","to","preventScrollReset","viewTransition"],REACT_ROUTER_VERSION="6";try{window.__reactRouterVersion=REACT_ROUTER_VERSION}catch{}const START_TRANSITION="startTransition",startTransitionImpl=React[START_TRANSITION];function BrowserRouter(o){let{basename:u,children:T,future:S,window:E}=o,C=reactExports.useRef();C.current==null&&(C.current=createBrowserHistory({window:E,v5Compat:!0}));let _=C.current,[P,R]=reactExports.useState({action:_.action,location:_.location}),{v7_startTransition:I}=S||{},L=reactExports.useCallback(j=>{I&&startTransitionImpl?startTransitionImpl(()=>R(j)):R(j)},[R,I]);return reactExports.useLayoutEffect(()=>_.listen(L),[_,L]),reactExports.useEffect(()=>logV6DeprecationWarnings(S),[S]),reactExports.createElement(Router,{basename:u,children:T,location:P.location,navigationType:P.action,navigator:_,future:S})}const isBrowser$2=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",ABSOLUTE_URL_REGEX=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,Link$1=reactExports.forwardRef(function(u,T){let{onClick:S,relative:E,reloadDocument:C,replace:_,state:P,target:R,to:I,preventScrollReset:L,viewTransition:j}=u,M=_objectWithoutPropertiesLoose$2(u,_excluded$2),{basename:D}=reactExports.useContext(NavigationContext),F,N=!1;if(typeof I=="string"&&ABSOLUTE_URL_REGEX.test(I)&&(F=I,isBrowser$2))try{let O=new URL(window.location.href),V=I.startsWith("//")?new URL(O.protocol+I):new URL(I),U=stripBasename(V.pathname,D);V.origin===O.origin&&U!=null?I=U+V.search+V.hash:N=!0}catch{}let G=useHref(I,{relative:E}),B=useLinkClickHandler(I,{replace:_,state:P,target:R,preventScrollReset:L,relative:E,viewTransition:j});function H(O){S&&S(O),O.defaultPrevented||B(O)}return reactExports.createElement("a",_extends({},M,{href:F||G,onClick:N||C?S:H,ref:T,target:R}))});var DataRouterHook;(function(o){o.UseScrollRestoration="useScrollRestoration",o.UseSubmit="useSubmit",o.UseSubmitFetcher="useSubmitFetcher",o.UseFetcher="useFetcher",o.useViewTransitionState="useViewTransitionState"})(DataRouterHook||(DataRouterHook={}));var DataRouterStateHook;(function(o){o.UseFetcher="useFetcher",o.UseFetchers="useFetchers",o.UseScrollRestoration="useScrollRestoration"})(DataRouterStateHook||(DataRouterStateHook={}));function useLinkClickHandler(o,u){let{target:T,replace:S,state:E,preventScrollReset:C,relative:_,viewTransition:P}=u===void 0?{}:u,R=useNavigate(),I=useLocation(),L=useResolvedPath(o,{relative:_});return reactExports.useCallback(j=>{if(shouldProcessLinkClick(j,T)){j.preventDefault();let M=S!==void 0?S:createPath(I)===createPath(L);R(o,{replace:M,state:E,preventScrollReset:C,relative:_,viewTransition:P})}},[I,R,L,S,E,T,o,C,_,P])}function useSearchParams(o){let u=reactExports.useRef(createSearchParams(o)),T=reactExports.useRef(!1),S=useLocation(),E=reactExports.useMemo(()=>getSearchParamsForLocation(S.search,T.current?null:u.current),[S.search]),C=useNavigate(),_=reactExports.useCallback((P,R)=>{const I=createSearchParams(typeof P=="function"?P(E):P);T.current=!0,C("?"+I,R)},[C,E]);return[E,_]}var hasElementType=typeof Element<"u",hasMap=typeof Map=="function",hasSet=typeof Set=="function",hasArrayBuffer=typeof ArrayBuffer=="function"&&!!ArrayBuffer.isView;function equal(o,u){if(o===u)return!0;if(o&&u&&typeof o=="object"&&typeof u=="object"){if(o.constructor!==u.constructor)return!1;var T,S,E;if(Array.isArray(o)){if(T=o.length,T!=u.length)return!1;for(S=T;S--!==0;)if(!equal(o[S],u[S]))return!1;return!0}var C;if(hasMap&&o instanceof Map&&u instanceof Map){if(o.size!==u.size)return!1;for(C=o.entries();!(S=C.next()).done;)if(!u.has(S.value[0]))return!1;for(C=o.entries();!(S=C.next()).done;)if(!equal(S.value[1],u.get(S.value[0])))return!1;return!0}if(hasSet&&o instanceof Set&&u instanceof Set){if(o.size!==u.size)return!1;for(C=o.entries();!(S=C.next()).done;)if(!u.has(S.value[0]))return!1;return!0}if(hasArrayBuffer&&ArrayBuffer.isView(o)&&ArrayBuffer.isView(u)){
29if(T=o.length,T!=u.length)return!1;for(S=T;S--!==0;)if(o[S]!==u[S])return!1;return!0}if(o.constructor===RegExp)return o.source===u.source&&o.flags===u.flags;if(o.valueOf!==Object.prototype.valueOf&&typeof o.valueOf=="function"&&typeof u.valueOf=="function")return o.valueOf()===u.valueOf();if(o.toString!==Object.prototype.toString&&typeof o.toString=="function"&&typeof u.toString=="function")return o.toString()===u.toString();if(E=Object.keys(o),T=E.length,T!==Object.keys(u).length)return!1;for(S=T;S--!==0;)if(!Object.prototype.hasOwnProperty.call(u,E[S]))return!1;if(hasElementType&&o instanceof Element)return!1;for(S=T;S--!==0;)if(!((E[S]==="_owner"||E[S]==="__v"||E[S]==="__o")&&o.$$typeof)&&!equal(o[E[S]],u[E[S]]))return!1;return!0}return o!==o&&u!==u}var reactFastCompare=function(u,T){try{return equal(u,T)}catch(S){if((S.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw S}};const fastCompare=getDefaultExportFromCjs(reactFastCompare);var invariant$1=function(o,u,T,S,E,C,_,P){if(!o){var R;if(u===void 0)R=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var I=[T,S,E,C,_,P],L=0;R=new Error(u.replace(/%s/g,function(){return I[L++]})),R.name="Invariant Violation"}throw R.framesToPop=1,R}},browser=invariant$1;const invariant$2=getDefaultExportFromCjs(browser);var shallowequal=function(u,T,S,E){var C=S?S.call(E,u,T):void 0;if(C!==void 0)return!!C;if(u===T)return!0;if(typeof u!="object"||!u||typeof T!="object"||!T)return!1;var _=Object.keys(u),P=Object.keys(T);if(_.length!==P.length)return!1;for(var R=Object.prototype.hasOwnProperty.bind(T),I=0;I<_.length;I++){var L=_[I];if(!R(L))return!1;var j=u[L],M=T[L];if(C=S?S.call(E,j,M,L):void 0,C===!1||C===void 0&&j!==M)return!1}return!0};const shallowEqual=getDefaultExportFromCjs(shallowequal);var TAG_NAMES=(o=>(o.BASE="base",o.BODY="body",o.HEAD="head",o.HTML="html",o.LINK="link",o.META="meta",o.NOSCRIPT="noscript",o.SCRIPT="script",o.STYLE="style",o.TITLE="title",o.FRAGMENT="Symbol(react.fragment)",o))(TAG_NAMES||{}),SEO_PRIORITY_TAGS={link:{rel:["amphtml","canonical","alternate"]},script:{type:["application/ld+json"]},meta:{charset:"",name:["generator","robots","description"],property:["og:type","og:title","og:url","og:image","og:image:alt","og:description","twitter:url","twitter:title","twitter:description","twitter:image","twitter:image:alt","twitter:card","twitter:site"]}},VALID_TAG_NAMES=Object.values(TAG_NAMES),REACT_TAG_MAP={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},HTML_TAG_MAP=Object.entries(REACT_TAG_MAP).reduce((o,[u,T])=>(o[T]=u,o),{}),HELMET_ATTRIBUTE="data-rh",HELMET_PROPS={DEFAULT_TITLE:"defaultTitle",DEFER:"defer",ENCODE_SPECIAL_CHARACTERS:"encodeSpecialCharacters",ON_CHANGE_CLIENT_STATE:"onChangeClientState",TITLE_TEMPLATE:"titleTemplate",PRIORITIZE_SEO_TAGS:"prioritizeSeoTags"},getInnermostProperty=(o,u)=>{for(let T=o.length-1;T>=0;T-=1){const S=o[T];if(Object.prototype.hasOwnProperty.call(S,u))return S[u]}return null},getTitleFromPropsList=o=>{let u=getInnermostProperty(o,"title");const T=getInnermostProperty(o,HELMET_PROPS.TITLE_TEMPLATE);if(Array.isArray(u)&&(u=u.join("")),T&&u)return T.replace(/%s/g,()=>u);const S=getInnermostProperty(o,HELMET_PROPS.DEFAULT_TITLE);return u||S||void 0},getOnChangeClientState=o=>getInnermostProperty(o,HELMET_PROPS.ON_CHANGE_CLIENT_STATE)||(()=>{}),getAttributesFromPropsList=(o,u)=>u.filter(T=>typeof T[o]<"u").map(T=>T[o]).reduce((T,S)=>({...T,...S}),{}),getBaseTagFromPropsList=(o,u)=>u.filter(T=>typeof T.base<"u").map(T=>T.base).reverse().reduce((T,S)=>{if(!T.length){const E=Object.keys(S);for(let C=0;C<E.length;C+=1){const P=E[C].toLowerCase();if(o.indexOf(P)!==-1&&S[P])return T.concat(S)}}return T},[]),warn$1=o=>console&&typeof console.warn=="function"&&console.warn(o),getTagsFromPropsList=(o,u,T)=>{const S={};return T.filter(E=>Array.isArray(E[o])?!0:(typeof E[o]<"u"&&warn$1(`Helmet: ${o} should be of type "Array". Instead found type "${typeof E[o]}"`),!1)).map(E=>E[o]).reverse().reduce((E,C)=>{const _={};C.filter(R=>{let I;const L=Object.keys(R);for(let M=0;M<L.length;M+=1){const D=L[M],F=D.toLowerCase();u.indexOf(F)!==-1&&!(I==="rel"&&R[I].toLowerCase()==="canonical")&&!(F==="rel"&&R[F].toLowerCase()==="stylesheet")&&(I=F),u.indexOf(D)!==-1&&(D==="innerHTML"||D==="cssText"||D==="itemprop")&&(I=D)}if(!I||!R[I])return!1;const j=R[I].toLowerCase();return S[I]||(S[I]={}),_[I]||(_[I]={}),S[I][j]?!1:(_[I][j]=!0,!0)}
29).reverse().forEach(R=>E.push(R));const P=Object.keys(_);for(let R=0;R<P.length;R+=1){const I=P[R],L={...S[I],..._[I]};S[I]=L}return E},[]).reverse()},getAnyTrueFromPropsList=(o,u)=>{if(Array.isArray(o)&&o.length){for(let T=0;T<o.length;T+=1)if(o[T][u])return!0}return!1},reducePropsToState=o=>({baseTag:getBaseTagFromPropsList(["href"],o),bodyAttributes:getAttributesFromPropsList("bodyAttributes",o),defer:getInnermostProperty(o,HELMET_PROPS.DEFER),encode:getInnermostProperty(o,HELMET_PROPS.ENCODE_SPECIAL_CHARACTERS),htmlAttributes:getAttributesFromPropsList("htmlAttributes",o),linkTags:getTagsFromPropsList("link",["rel","href"],o),metaTags:getTagsFromPropsList("meta",["name","charset","http-equiv","property","itemprop"],o),noscriptTags:getTagsFromPropsList("noscript",["innerHTML"],o),onChangeClientState:getOnChangeClientState(o),scriptTags:getTagsFromPropsList("script",["src","innerHTML"],o),styleTags:getTagsFromPropsList("style",["cssText"],o),title:getTitleFromPropsList(o),titleAttributes:getAttributesFromPropsList("titleAttributes",o),prioritizeSeoTags:getAnyTrueFromPropsList(o,HELMET_PROPS.PRIORITIZE_SEO_TAGS)}),flattenArray=o=>Array.isArray(o)?o.join(""):o,checkIfPropsMatch=(o,u)=>{const T=Object.keys(o);for(let S=0;S<T.length;S+=1)if(u[T[S]]&&u[T[S]].includes(o[T[S]]))return!0;return!1},prioritizer=(o,u)=>Array.isArray(o)?o.reduce((T,S)=>(checkIfPropsMatch(S,u)?T.priority.push(S):T.default.push(S),T),{priority:[],default:[]}):{default:o,priority:[]},without=(o,u)=>({...o,[u]:void 0}),SELF_CLOSING_TAGS=["noscript","script","style"],encodeSpecialCharacters=(o,u=!0)=>u===!1?String(o):String(o).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;"),generateElementAttributesAsString=o=>Object.keys(o).reduce((u,T)=>{const S=typeof o[T]<"u"?`${T}="${o[T]}"`:`${T}`;return u?`${u} ${S}`:S},""),generateTitleAsString=(o,u,T,S)=>{const E=generateElementAttributesAsString(T),C=flattenArray(u);return E?`<${o} ${HELMET_ATTRIBUTE}="true" ${E}>${encodeSpecialCharacters(C,S)}</${o}>`:`<${o} ${HELMET_ATTRIBUTE}="true">${encodeSpecialCharacters(C,S)}</${o}>`},generateTagsAsString=(o,u,T=!0)=>u.reduce((S,E)=>{const C=E,_=Object.keys(C).filter(I=>!(I==="innerHTML"||I==="cssText")).reduce((I,L)=>{const j=typeof C[L]>"u"?L:`${L}="${encodeSpecialCharacters(C[L],T)}"`;return I?`${I} ${j}`:j},""),P=C.innerHTML||C.cssText||"",R=SELF_CLOSING_TAGS.indexOf(o)===-1;return`${S}<${o} ${HELMET_ATTRIBUTE}="true" ${_}${R?"/>":`>${P}</${o}>`}`},""),convertElementAttributesToReactProps=(o,u={})=>Object.keys(o).reduce((T,S)=>{const E=REACT_TAG_MAP[S];return T[E||S]=o[S],T},u),generateTitleAsReactComponent=(o,u,T)=>{const S={key:u,[HELMET_ATTRIBUTE]:!0},E=convertElementAttributesToReactProps(T,S);return[React$1.createElement("title",E,u)]},generateTagsAsReactComponent=(o,u)=>u.map((T,S)=>{const E={key:S,[HELMET_ATTRIBUTE]:!0};return Object.keys(T).forEach(C=>{const P=REACT_TAG_MAP[C]||C;if(P==="innerHTML"||P==="cssText"){const R=T.innerHTML||T.cssText;E.dangerouslySetInnerHTML={__html:R}}else E[P]=T[C]}),React$1.createElement(o,E)}),getMethodsForTag=(o,u,T=!0)=>{switch(o){case"title":return{toComponent:()=>generateTitleAsReactComponent(o,u.title,u.titleAttributes),toString:()=>generateTitleAsString(o,u.title,u.titleAttributes,T)};case"bodyAttributes":case"htmlAttributes":return{toComponent:()=>convertElementAttributesToReactProps(u),toString:()=>generateElementAttributesAsString(u)};default:return{toComponent:()=>generateTagsAsReactComponent(o,u),toString:()=>generateTagsAsString(o,u,T)}}},getPriorityMethods=({metaTags:o,linkTags:u,scriptTags:T,encode:S})=>{const E=prioritizer(o,SEO_PRIORITY_TAGS.meta),C=prioritizer(u,SEO_PRIORITY_TAGS.link),_=prioritizer(T,SEO_PRIORITY_TAGS.script);return{priorityMethods:{toComponent:()=>[...generateTagsAsReactComponent("meta",E.priority),...generateTagsAsReactComponent("link",C.priority),...generateTagsAsReactComponent("script",_.priority)],toString:()=>`${getMethodsForTag("meta",E.priority,S)} ${getMethodsForTag("link",C.priority,S)} ${getMethodsForTag("script",_.priority,S)}`},metaTags:E.default,linkTags:C.default,scriptTags:_.default}},mapStateOnServer=o=>{const{baseTag:u,bodyAttributes:T,encode:S=!0,htmlAttributes:E,noscriptTags:C,styleTags:_,title:P="",titleAttributes:R,prioritizeSeoTags:I}=o;let{linkTags:L,metaTags:j,scriptTags:M}=o,D={toComponent:()=>[],toString:()=>""};return I&&({priorityMethods:D,linkTags:L,metaTags:j,scriptTags:M}=getPriorityMethods(o)),{priority:D,base:getMethodsForTag("base",u,S),bodyAttributes:getMethodsForTag("bodyAttributes",T,S),htmlAttributes:getMethodsForTag("htmlAttributes",E,S),link:getMethodsForTag("link",L,S),meta:getMethodsForTag("meta",j,S),noscript:getMethodsForTag("noscript",C,S),script:getMethodsForTag("script",M,S),style:getMethodsForTag("style",_,S),title:getMethodsForTag("title",{title:P,titleAttributes:R},S)}},server_default=mapStateOnServer,instances=[],isDocument=!!(typeof window<"u"&&window.document&&window.document.createElement),HelmetData=class{constructor(o,u){pt(this,"instances",[]);pt(this,"canUseDOM",isDocument);pt(this,"context");pt(this,"value",{setHelmet:o=>{this.context.helmet=o},helmetInstances:{get:()=>this.canUseDOM?instances:this.instances,add:o=>{(this.canUseDOM?instances:this.instances).push(o)},remove:o=>{const u=(this.canUseDOM?instances:this.instances).indexOf(o);(this.canUseDOM?instances:this.instances).splice(u,1)}}});this.context=o,this.canUseDOM=u||!1,u||(o.helmet=server_default({baseTag:[],bodyAttributes:{},htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))}},major=parseInt(React$1.version.split(".")[0],10),isReact19=major>=19,defaultValue={},Context=React$1.createContext(defaultValue),wt,HelmetProvider=(wt=class extends reactExports.Component{constructor(T){super(T);pt(this,"helmetData");isReact19?this.helmetData=null:this.helmetData=new HelmetData(this.props.context||{},wt.canUseDOM)}render(){return isReact19?React$1.createElement(React$1.Fragment,null,this.props.children):React$1.createElement(Context.Provider,{value:this.helmetData.value},this.props.children)}},pt(wt,"canUseDOM",isDocument),wt),updateTags=(o,u)=>{const T=document.head||document.querySelector("head"),S=T.querySelectorAll(`${o}[${HELMET_ATTRIBUTE}]`),E=[].slice.call(S),C=[];let _;return u&&u.length&&u.forEach(P=>{const R=document.createElement(o);for(const I in P)if(Object.prototype.hasOwnProperty.call(P,I))if(I==="innerHTML")R.innerHTML=P.innerHTML;else if(I==="cssText"){const L=P.cssText;R.appendChild(document.createTextNode(L))}else{const L=I,j=typeof P[L]>"u"?"":P[L];R.setAttribute(I,j)}R.setAttribute(HELMET_ATTRIBUTE,"true"),E.some((I,L)=>(_=L,R.isEqualNode(I)))?E.splice(_,1):C.push(R)}
29),E.forEach(P=>{var R;return(R=P.parentNode)==null?void 0:R.removeChild(P)}),C.forEach(P=>T.appendChild(P)),{oldTags:E,newTags:C}},updateAttributes=(o,u)=>{const T=document.getElementsByTagName(o)[0];if(!T)return;const S=T.getAttribute(HELMET_ATTRIBUTE),E=S?S.split(","):[],C=[...E],_=Object.keys(u);for(const P of _){const R=u[P]||"";T.getAttribute(P)!==R&&T.setAttribute(P,R),E.indexOf(P)===-1&&E.push(P);const I=C.indexOf(P);I!==-1&&C.splice(I,1)}for(let P=C.length-1;P>=0;P-=1)T.removeAttribute(C[P]);E.length===C.length?T.removeAttribute(HELMET_ATTRIBUTE):T.getAttribute(HELMET_ATTRIBUTE)!==_.join(",")&&T.setAttribute(HELMET_ATTRIBUTE,_.join(","))},updateTitle=(o,u)=>{typeof o<"u"&&document.title!==o&&(document.title=flattenArray(o)),updateAttributes("title",u)},commitTagChanges=(o,u)=>{const{baseTag:T,bodyAttributes:S,htmlAttributes:E,linkTags:C,metaTags:_,noscriptTags:P,onChangeClientState:R,scriptTags:I,styleTags:L,title:j,titleAttributes:M}=o;updateAttributes("body",S),updateAttributes("html",E),updateTitle(j,M);const D={baseTag:updateTags("base",T),linkTags:updateTags("link",C),metaTags:updateTags("meta",_),noscriptTags:updateTags("noscript",P),scriptTags:updateTags("script",I),styleTags:updateTags("style",L)},F={},N={};Object.keys(D).forEach(G=>{const{newTags:B,oldTags:H}=D[G];B.length&&(F[G]=B),H.length&&(N[G]=D[G].oldTags)}),u&&u(),R(o,F,N)},_helmetCallback=null,handleStateChangeOnClient=o=>{_helmetCallback&&cancelAnimationFrame(_helmetCallback),o.defer?_helmetCallback=requestAnimationFrame(()=>{commitTagChanges(o,()=>{_helmetCallback=null})}):(commitTagChanges(o),_helmetCallback=null)},client_default=handleStateChangeOnClient,HelmetDispatcher=class extends reactExports.Component{constructor(){super(...arguments);pt(this,"rendered",!1)}shouldComponentUpdate(u){return!shallowEqual(u,this.props)}componentDidUpdate(){this.emitChange()}componentWillUnmount(){const{helmetInstances:u}=this.props.context;u.remove(this),this.emitChange()}emitChange(){const{helmetInstances:u,setHelmet:T}=this.props.context;let S=null;const E=reducePropsToState(u.get().map(C=>{const{context:_,...P}=C.props;return P}));HelmetProvider.canUseDOM?client_default(E):server_default&&(S=server_default(E)),T(S)}init(){if(this.rendered)return;this.rendered=!0;const{helmetInstances:u}=this.props.context;u.add(this),this.emitChange()}render(){return this.init(),null}},react19Instances=[],toHtmlAttributes=o=>{const u={};for(const T of Object.keys(o))u[HTML_TAG_MAP[T]||T]=o[T];return u},toReactProps=o=>{const u={};for(const T of Object.keys(o)){const S=REACT_TAG_MAP[T];u[S||T]=o[T]}return u},applyAttributes=(o,u)=>{if(!isDocument)return;const T=document.getElementsByTagName(o)[0];if(!T)return;const S="data-rh-managed",E=T.getAttribute(S),C=E?E.split(","):[],_=Object.keys(u);for(const P of C)_.includes(P)||T.removeAttribute(P);for(const P of _){const R=u[P];R==null||R===!1?T.removeAttribute(P):R===!0?T.setAttribute(P,""):T.setAttribute(P,String(R))}_.length>0?T.setAttribute(S,_.join(",")):T.removeAttribute(S)},syncAllAttributes=()=>{const o={},u={};for(const T of react19Instances){const{htmlAttributes:S,bodyAttributes:E}=T.props;S&&Object.assign(o,toHtmlAttributes(S)),E&&Object.assign(u,toHtmlAttributes(E))}applyAttributes("html",o),applyAttributes("body",u)},React19Dispatcher=class extends reactExports.Component{componentDidMount(){react19Instances.push(this),syncAllAttributes()}componentDidUpdate(){syncAllAttributes()}componentWillUnmount(){const o=react19Instances.indexOf(this);o!==-1&&react19Instances.splice(o,1),syncAllAttributes()}resolveTitle(){const{title:o,titleTemplate:u,defaultTitle:T}=this.props;return o&&u?u.replace(/%s/g,()=>Array.isArray(o)?o.join(""):o):o||T||void 0}renderTitle(){const o=this.resolveTitle();if(o===void 0)return null;const u=this.props.titleAttributes||{};return React$1.createElement("title",toReactProps(u),o)}renderBase(){const{base:o}=this.props;return o?React$1.createElement("base",toReactProps(o)):null}renderMeta(){const{meta:o}=this.props;return!o||!Array.isArray(o)?null:o.map((u,T)=>React$1.createElement("meta",{key:T,...toReactProps(u)}))}renderLink(){const{link:o}=this.props;return!o||!Array.isArray(o)?null:o.map((u,T)=>
29React$1.createElement("link",{key:T,...toReactProps(u)}))}renderScript(){const{script:o}=this.props;return!o||!Array.isArray(o)?null:o.map((u,T)=>{const{innerHTML:S,...E}=u,C=toReactProps(E);return S&&(C.dangerouslySetInnerHTML={__html:S}),React$1.createElement("script",{key:T,...C})})}renderStyle(){const{style:o}=this.props;return!o||!Array.isArray(o)?null:o.map((u,T)=>{const{cssText:S,...E}=u,C=toReactProps(E);return S&&(C.dangerouslySetInnerHTML={__html:S}),React$1.createElement("style",{key:T,...C})})}renderNoscript(){const{noscript:o}=this.props;return!o||!Array.isArray(o)?null:o.map((u,T)=>{const{innerHTML:S,...E}=u,C=toReactProps(E);return S&&(C.dangerouslySetInnerHTML={__html:S}),React$1.createElement("noscript",{key:T,...C})})}render(){return React$1.createElement(React$1.Fragment,null,this.renderTitle(),this.renderBase(),this.renderMeta(),this.renderLink(),this.renderScript(),this.renderStyle(),this.renderNoscript())}},zt,Helmet=(zt=class extends reactExports.Component{shouldComponentUpdate(o){return!fastCompare(without(this.props,"helmetData"),without(o,"helmetData"))}mapNestedChildrenToProps(o,u){if(!u)return null;switch(o.type){case"script":case"noscript":return{innerHTML:u};case"style":return{cssText:u};default:throw new Error(`<${o.type} /> elements are self-closing and can not contain children. Refer to our API for more information.`)}}flattenArrayTypeChildren(o,u,T,S){return{...u,[o.type]:[...u[o.type]||[],{...T,...this.mapNestedChildrenToProps(o,S)}]}}mapObjectTypeChildren(o,u,T,S){switch(o.type){case"title":return{...u,[o.type]:S,titleAttributes:{...T}};case"body":return{...u,bodyAttributes:{...T}};case"html":return{...u,htmlAttributes:{...T}};default:return{...u,[o.type]:{...T}}}}mapArrayTypeChildrenToProps(o,u){let T={...u};return Object.keys(o).forEach(S=>{T={...T,[S]:o[S]}}),T}warnOnInvalidChildren(o,u){return invariant$2(VALID_TAG_NAMES.some(T=>o.type===T),typeof o.type=="function"?"You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.":`Only elements types ${VALID_TAG_NAMES.join(", ")} are allowed. Helmet does not support rendering <${o.type}> elements. Refer to our API for more information.`),invariant$2(!u||typeof u=="string"||Array.isArray(u)&&!u.some(T=>typeof T!="string"),`Helmet expects a string as a child of <${o.type}>. Did you forget to wrap your children in braces? ( <${o.type}>{\`\`}</${o.type}> ) Refer to our API for more information.`),!0}mapChildrenToProps(o,u){let T={};return React$1.Children.forEach(o,S=>{if(!S||!S.props)return;const{children:E,...C}=S.props,_=Object.keys(C).reduce((R,I)=>(R[HTML_TAG_MAP[I]||I]=C[I],R),{});let{type:P}=S;
29switch(typeof P=="symbol"?P=P.toString():this.warnOnInvalidChildren(S,E),P){case"Symbol(react.fragment)":u=this.mapChildrenToProps(E,u);break;case"link":case"meta":case"noscript":case"script":case"style":T=this.flattenArrayTypeChildren(S,T,_,E);break;default:u=this.mapObjectTypeChildren(S,u,_,E);break}}),this.mapArrayTypeChildrenToProps(T,u)}render(){const{children:o,...u}=this.props;let T={...u},{helmetData:S}=u;if(o&&(T=this.mapChildrenToProps(o,T)),S&&!(S instanceof HelmetData)){const E=S;S=new HelmetData(E.context,!0),delete T.helmetData}return isReact19?React$1.createElement(React19Dispatcher,{...T}):S?React$1.createElement(HelmetDispatcher,{...T,context:S.value}):React$1.createElement(Context.Consumer,null,E=>React$1.createElement(HelmetDispatcher,{...T,context:E}))}},pt(zt,"defaultProps",{defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1}),zt);function formatMuiErrorMessage(o,...u){const T=new URL(`https://mui.com/production-error/?code=${o}`);return u.forEach(S=>T.searchParams.append("args[]",S)),`Minified MUI error #${o}; visit ${T} for the full message.`}const THEME_ID="$$material";function sheetForTag(o){if(o.sheet)return o.sheet;for(var u=0;u<document.styleSheets.length;u++)if(document.styleSheets[u].ownerNode===o)return document.styleSheets[u]}function createStyleElement(o){var u=document.createElement("style");return u.setAttribute("data-emotion",o.key),o.nonce!==void 0&&u.setAttribute("nonce",o.nonce),u.appendChild(document.createTextNode("")),u.setAttribute("data-s",""),u}var StyleSheet=function(){function o(T){var S=this;this._insertTag=function(E){var C;S.tags.length===0?S.insertionPoint?C=S.insertionPoint.nextSibling:S.prepend?C=S.container.firstChild:C=S.before:C=S.tags[S.tags.length-1].nextSibling,S.container.insertBefore(E,C),S.tags.push(E)},this.isSpeedy=T.speedy===void 0?!0:T.speedy,this.tags=[],this.ctr=0,this.nonce=T.nonce,this.key=T.key,this.container=T.container,this.prepend=T.prepend,this.insertionPoint=T.insertionPoint,this.before=null}var u=o.prototype;return u.hydrate=function(S){S.forEach(this._insertTag)},u.insert=function(S){this.ctr%(this.isSpeedy?65e3:1)===0&&this._insertTag(createStyleElement(this));var E=this.tags[this.tags.length-1];if(this.isSpeedy){var C=sheetForTag(E);try{C.insertRule(S,C.cssRules.length)}catch{}}else E.appendChild(document.createTextNode(S));this.ctr++}
29,u.flush=function(){this.tags.forEach(function(S){var E;return(E=S.parentNode)==null?void 0:E.removeChild(S)}),this.tags=[],this.ctr=0},o}(),MS="-ms-",MOZ="-moz-",WEBKIT="-webkit-",COMMENT="comm",RULESET="rule",DECLARATION="decl",IMPORT="@import",KEYFRAMES="@keyframes",LAYER="@layer",abs=Math.abs,from=String.fromCharCode,assign$a=Object.assign;function hash(o,u){return charat(o,0)^45?(((u<<2^charat(o,0))<<2^charat(o,1))<<2^charat(o,2))<<2^charat(o,3):0}function trim(o){return o.trim()}function match(o,u){return(o=u.exec(o))?o[0]:o}function replace(o,u,T){return o.replace(u,T)}function indexof(o,u){return o.indexOf(u)}function charat(o,u){return o.charCodeAt(u)|0}function substr(o,u,T){return o.slice(u,T)}function strlen(o){return o.length}function sizeof(o){return o.length}function append(o,u){return u.push(o),o}function combine(o,u){return o.map(u).join("")}var line=1,column=1,length=0,position=0,character=0,characters="";function node(o,u,T,S,E,C,_){return{value:o,root:u,parent:T,type:S,props:E,children:C,line,column,length:_,return:""}}function copy$1(o,u){return assign$a(node("",null,null,"",null,null,0),o,{length:-o.length},u)}function char(){return character}function prev(){return character=position>0?charat(characters,--position):0,column--,character===10&&(column=1,line--),character}function next(){return character=position<length?charat(characters,position++):0,column++,character===10&&(column=1,line++),character}function peek(){return charat(characters,position)}function caret(){return position}function slice(o,u){return substr(characters,o,u)}function token(o){switch(o){case 0:case 9:case 10:case 13:case 32:return 5;case 33:case 43:case 44:case 47:case 62:case 64:case 126:case 59:case 123:case 125:return 4;case 58:return 3;case 34:case 39:case 40:case 91:return 2;case 41:case 93:return 1}return 0}function alloc(o){return line=column=1,length=strlen(characters=o),position=0,[]}function dealloc(o){return characters="",o}function delimit(o){return trim(slice(position-1,delimiter(o===91?o+2:o===40?o+1:o)))}function whitespace(o){for(;(character=peek())&&character<33;)next();return token(o)>2||token(character)>3?"":" "}function escaping(o,u){for(;--u&&next()&&!(character<48||character>102||character>57&&character<65||character>70&&character<97););return slice(o,caret()+(u<6&&peek()==32&&next()==32))}function delimiter(o){for(;next();)switch(character){case o:return position;case 34:case 39:o!==34&&o!==39&&delimiter(character);break;case 40:o===41&&delimiter(o);break;case 92:next();break}return position}function commenter(o,u){for(;next()&&o+character!==57;)if(o+character===84&&peek()===47)break;return"/*"+slice(u,position-1)+"*"+from(o===47?o:next())}function identifier(o){for(;!token(peek());)next();return slice(o,position)}function compile(o){return dealloc(parse("",null,null,null,[""],o=alloc(o),0,[0],o))}function parse(o,u,T,S,E,C,_,P,R){for(var I=0,L=0,j=_,M=0,D=0,F=0,N=1,G=1,B=1,H=0,O="",V=E,U=C,W=S,K=O;G;)switch(F=H,H=next()){case 40:if(F!=108&&charat(K,j-1)==58){indexof(K+=replace(delimit(H),"&","&\f"),"&\f")!=-1&&(B=-1);break}case 34:case 39:case 91:K+=delimit(H);break;case 9:case 10:case 13:case 32:K+=whitespace(F);break;case 92:K+=escaping(caret()-1,7);continue;case 47:switch(peek()){case 42:case 47:append(comment(commenter(next(),caret()),u,T),R);break;default:K+="/"}break;case 123*N:P[I++]=strlen(K)*B;case 125*N:case 59:case 0:switch(H){case 0:case 125:G=0;case 59+L:B==-1&&(K=replace(K,/\f/g,"")),D>0&&strlen(K)-j&&append(D>32?declaration(K+";",S,T,j-1):declaration(replace(K," ","")+";",S,T,j-2),R);break;case 59:K+=";";default:if(append(W=ruleset(K,u,T,I,L,E,P,O,V=[],U=[],j),C),H===123)if(L===0)parse(K,u,W,W,V,C,j,P,U);else switch(M===99&&charat(K,3)===110?100:M){case 100:case 108:case 109:case 115:parse(o,W,W,S&&append(ruleset(o,W,W,0,0,E,P,O,E,V=[],j),U),E,U,j,P,S?V:U);break;default:parse(K,W,W,W,[""],U,0,P,U)}}I=L=D=0,N=B=1,O=K="",j=_;break;case 58:j=1+strlen(K),D=F;default:if(N<1){if(H==123)--N;else if(H==125&&N++==0&&prev()==125)continue}switch(K+=from(H),H*N){case 38:B=L>0?1:(K+="\f",-1);break;case 44:P[I++]=(strlen(K)-1)*B,B=1;break;
29case 64:peek()===45&&(K+=delimit(next())),M=peek(),L=j=strlen(O=K+=identifier(caret())),H++;break;case 45:F===45&&strlen(K)==2&&(N=0)}}return C}function ruleset(o,u,T,S,E,C,_,P,R,I,L){for(var j=E-1,M=E===0?C:[""],D=sizeof(M),F=0,N=0,G=0;F<S;++F)for(var B=0,H=substr(o,j+1,j=abs(N=_[F])),O=o;B<D;++B)(O=trim(N>0?M[B]+" "+H:replace(H,/&\f/g,M[B])))&&(R[G++]=O);return node(o,u,T,E===0?RULESET:P,R,I,L)}function comment(o,u,T){return node(o,u,T,COMMENT,from(char()),substr(o,2,-2),0)}function declaration(o,u,T,S){return node(o,u,T,DECLARATION,substr(o,0,S),substr(o,S+1,-1),S)}function serialize(o,u){for(var T="",S=sizeof(o),E=0;E<S;E++)T+=u(o[E],E,o,u)||"";return T}function stringify(o,u,T,S){switch(o.type){case LAYER:if(o.children.length)break;case IMPORT:case DECLARATION:return o.return=o.return||o.value;case COMMENT:return"";case KEYFRAMES:return o.return=o.value+"{"+serialize(o.children,S)+"}";case RULESET:o.value=o.props.join(",")}return strlen(T=serialize(o.children,S))?o.return=o.value+"{"+T+"}":""}function middleware(o){var u=sizeof(o);return function(T,S,E,C){for(var _="",P=0;P<u;P++)_+=o[P](T,S,E,C)||"";return _}}function rulesheet(o){return function(u){u.root||(u=u.return)&&o(u)}}function memoize$1(o){var u=Object.create(null);return function(T){return u[T]===void 0&&(u[T]=o(T)),u[T]}}var identifierWithPointTracking=function(u,T,S){for(var E=0,C=0;E=C,C=peek(),E===38&&C===12&&(T[S]=1),!token(C);)next();return slice(u,position)},toRules=function(u,T){var S=-1,E=44;do switch(token(E)){case 0:E===38&&peek()===12&&(T[S]=1),u[S]+=identifierWithPointTracking(position-1,T,S);break;case 2:u[S]+=delimit(E);break;case 4:if(E===44){u[++S]=peek()===58?"&\f":"",T[S]=u[S].length;break}default:u[S]+=from(E)}while(E=next());return u},getRules=function(u,T){return dealloc(toRules(alloc(u),T))},fixedElements=new WeakMap,compat=function(u){if(!(u.type!=="rule"||!u.parent||u.length<1)){for(var T=u.value,S=u.parent,E=u.column===S.column&&u.line===S.line;S.type!=="rule";)if(S=S.parent,!S)return;if(!(u.props.length===1&&T.charCodeAt(0)!==58&&!fixedElements.get(S))&&!E){fixedElements.set(u,!0);for(var C=[],_=getRules(T,C),P=S.props,R=0,I=0;R<_.length;R++)for(var L=0;L<P.length;L++,I++)u.props[I]=C[R]?_[R].replace(/&\f/g,P[L]):P[L]+" "+_[R]}}},removeLabel=function(u){if(u.type==="decl"){var T=u.value;T.charCodeAt(0)===108&&T.charCodeAt(2)===98&&(u.return="",u.value="")}};function prefix(o,u){switch(hash(o,u)){case 5103:return WEBKIT+"print-"+o+o;case 5737:case 4201:case 3177:case 3433:case 1641:case 4457:case 2921:case 5572:case 6356:case 5844:case 3191:case 6645:case 3005:case 6391:case 5879:case 5623:case 6135:case 4599:case 4855:case 4215:case 6389:case 5109:case 5365:case 5621:case 3829:return WEBKIT+o+o;case 5349:case 4246:case 4810:case 6968:case 2756:return WEBKIT+o+MOZ+o+MS+o+o;case 6828:case 4268:return WEBKIT+o+MS+o+o;case 6165:return WEBKIT+o+MS+"flex-"+o+o;case 5187:return WEBKIT+o+replace(o,/(\w+).+(:[^]+)/,WEBKIT+"box-$1$2"+MS+"flex-$1$2")+o;case 5443:return WEBKIT+o+MS+"flex-item-"+replace(o,/flex-|-self/,"")+o;case 4675:return WEBKIT+o+MS+"flex-line-pack"+replace(o,/align-content|flex-|-self/,"")+o;case 5548:return WEBKIT+o+MS+replace(o,"shrink","negative")+o;case 5292:return WEBKIT+o+MS+replace(o,"basis","preferred-size")+o;case 6060:return WEBKIT+"box-"+replace(o,"-grow","")+WEBKIT+o+MS+replace(o,"grow","positive")+o;case 4554:return WEBKIT+replace(o,/([^-])(transform)/g,"$1"+WEBKIT+"$2")+o;case 6187:return replace(replace(replace(o,/(zoom-|grab)/,WEBKIT+"$1"),/(image-set)/,WEBKIT+"$1"),o,"")+o;case 5495:case 3959:return replace(o,/(image-set\([^]*)/,WEBKIT+"$1$`$1");case 4968:return replace(replace(o,/(.+:)(flex-)?(.*)/,WEBKIT+"box-pack:$3"+MS+"flex-pack:$3"),/s.+-b[^;]+/,"justify")+WEBKIT+o+o;case 4095:case 3583:case 4068:case 2532:return replace(o,/(.+)-inline(.+)/,WEBKIT+"$1$2")+o;case 8116:case 7059:case 5753:case 5535:case 5445:case 5701:case 4933:case 4677:case 5533:case 5789:case 5021:case 4765:if(strlen(o)-1-u>6)switch(charat(o,u+1)){case 109:if(charat(o,u+4)!==45)break;case 102:return replace(o,/(.+:)(.+)-([^]+)/,"$1"+WEBKIT+"$2-$3$1"+MOZ+(charat(o,u+3)==108?"$3":"$2-$3"))+o;case 115:return~indexof(o,"stretch")?prefix(replace(o,"stretch","fill-available"),u)+o:o}break;case 4949:if(charat(o,u+1)!==115)break;case 6444:switch(charat(o,strlen(o)-3-(~indexof(o,"!important")&&10))){case 107:return replace(o,":",":"+WEBKIT)+o;case 101:return replace(o,/(.+:)([^;!]+)(;|!.+)?/,"$1"+WEBKIT+(charat(o,14)===45?"inline-":"")+"box$3$1"+WEBKIT+"$2$3$1"+MS+"$2box$3")+o}break;case 5936:switch(charat(o,u+11)){case 114:return WEBKIT+o+MS+replace(o,/[svh]\w+-[tblr]{2}/,"tb")+o;case 108:return WEBKIT+o+MS+replace(o,/[svh]\w+-[tblr]{2}/,"tb-rl")+o;case 45:return WEBKIT+o+MS+replace(o,/[svh]\w+-[tblr]{2}/,"lr")+o}return WEBKIT+o+MS+o+o}return o}var prefixer=function(u,T,S,E){if(u.length>-1&&!u.return)switch(u.type){case DECLARATION:u.return=prefix(u.value,u.length);break;case KEYFRAMES:return serialize([copy$1(u,{value:replace(u.value,"@","@"+WEBKIT)})],E);case RULESET:if(u.length)return combine(u.props,function(C){switch(match(C,/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":return serialize([copy$1(u,{props:[replace(C,/:(read-\w+)/,":"+MOZ+"$1")]})],E);case"::placeholder":return serialize([copy$1(u,{props:[replace(C,/:(plac\w+)/,":"+WEBKIT+"input-$1")]}),copy$1(u,{props:[replace(C,/:(plac\w+)/,":"+MOZ+"$1")]}),copy$1(u,{props:[replace(C,/:(plac\w+)/,MS+"input-$1")]})],E)}return""})}},defaultStylisPlugins=[prefixer],createCache=function(u){var T=u.key;if(T==="css"){var S=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(S,function(N){var G=N.getAttribute("data-emotion");G.indexOf(" ")!==-1&&(document.head.appendChild(N),N.setAttribute("data-s",""))})}var E=u.stylisPlugins||defaultStylisPlugins,C={},_,P=[];_=u.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+T+' "]'),function(N){for(var G=N.getAttribute("data-emotion").split(" "),B=1;B<G.length;B++)C[G[B]]=!0;P.push(N)});var R,I=[compat,removeLabel];{var L,j=[stringify,rulesheet(function(N){L.insert(N)})],M=middleware(I.concat(E,j)),D=function(G){return serialize(compile(G),M)};R=function(G,B,H,O){L=H,D(G?G+"{"+B.styles+"}":B.styles),O&&(F.inserted[B.name]=!0)}}var F={key:T,sheet:new StyleSheet({key:T,container:_,nonce:u.nonce,speedy:u.speedy,prepend:u.prepend,insertionPoint:u.insertionPoint}),nonce:u.nonce,inserted:C,registered:{},insert:R};return F.sheet.hydrate(P),F},reactIs$2={exports:{}},reactIs_production_min={};/** @license React v16.13.1
30 * react-is.production.min.js
31 *
32 * Copyright (c) Facebook, Inc. and its affiliates.
33 *
34 * This source code is licensed under the MIT license found in the
35 * LICENSE file in the root directory of this source tree.
36 */var b=typeof Symbol=="function"&&Symbol.for,c$1=b?Symbol.for("react.element"):60103,d=b?Symbol.for("react.portal"):60106,e$1=b?Symbol.for("react.fragment"):60107,f=b?Symbol.for("react.strict_mode"):60108,g=b?Symbol.for("react.profiler"):60114,h=b?Symbol.for("react.provider"):60109,k=b?Symbol.for("react.context"):60110,l=b?Symbol.for("react.async_mode"):60111,m=b?Symbol.for("react.concurrent_mode"):60111,n$1=b?Symbol.for("react.forward_ref"):60112,p=b?Symbol.for("react.suspense"):60113,q=b?Symbol.for("react.suspense_list"):60120,r$2=b?Symbol.for("react.memo"):60115,t$1=b?Symbol.for("react.lazy"):60116,v=b?Symbol.for("react.block"):60121,w=b?Symbol.for("react.fundamental"):60117,x=b?Symbol.for("react.responder"):60118,y=b?Symbol.for("react.scope"):60119;function z(o){if(typeof o=="object"&&o!==null){var u=o.$$typeof;switch(u){case c$1:switch(o=o.type,o){case l:case m:case e$1:case g:case f:case p:return o;default:switch(o=o&&o.$$typeof,o){case k:case n$1:case t$1:case r$2:case h:return o;default:return u}}case d:return u}}}function A(o){return z(o)===m}reactIs_production_min.AsyncMode=l;reactIs_production_min.ConcurrentMode=m;reactIs_production_min.ContextConsumer=k;reactIs_production_min.ContextProvider=h;reactIs_production_min.Element=c$1;reactIs_production_min.ForwardRef=n$1;reactIs_production_min.Fragment=e$1;reactIs_production_min.Lazy=t$1;reactIs_production_min.Memo=r$2;reactIs_production_min.Portal=d;reactIs_production_min.Profiler=g;reactIs_production_min.StrictMode=f;reactIs_production_min.Suspense=p;reactIs_production_min.isAsyncMode=function(o){return A(o)||z(o)===l};reactIs_production_min.isConcurrentMode=A;reactIs_production_min.isContextConsumer=function(o){return z(o)===k};reactIs_production_min.isContextProvider=function(o){return z(o)===h};reactIs_production_min.isElement=function(o){return typeof o=="object"&&o!==null&&o.$$typeof===c$1};reactIs_production_min.isForwardRef=function(o){return z(o)===n$1};reactIs_production_min.isFragment=function(o){return z(o)===e$1};reactIs_production_min.isLazy=function(o){return z(o)===t$1};reactIs_production_min.isMemo=function(o){return z(o)===r$2};reactIs_production_min.isPortal=function(o){return z(o)===d};reactIs_production_min.isProfiler=function(o){return z(o)===g};reactIs_production_min.isStrictMode=function(o){return z(o)===f};reactIs_production_min.isSuspense=function(o){return z(o)===p};reactIs_production_min.isValidElementType=function(o){return typeof o=="str
36ing"||typeof o=="function"||o===e$1||o===m||o===g||o===f||o===p||o===q||typeof o=="object"&&o!==null&&(o.$$typeof===t$1||o.$$typeof===r$2||o.$$typeof===h||o.$$typeof===k||o.$$typeof===n$1||o.$$typeof===w||o.$$typeof===x||o.$$typeof===y||o.$$typeof===v)};reactIs_production_min.typeOf=z;reactIs$2.exports=reactIs_production_min;var reactIsExports$1=reactIs$2.exports,reactIs$1=reactIsExports$1,FORWARD_REF_STATICS={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},MEMO_STATICS={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},TYPE_STATICS={};TYPE_STATICS[reactIs$1.ForwardRef]=FORWARD_REF_STATICS;TYPE_STATICS[reactIs$1.Memo]=MEMO_STATICS;var isBrowser$1=!0;function getRegisteredStyles(o,u,T){var S="";return T.split(" ").forEach(function(E){o[E]!==void 0?u.push(o[E]+";"):E&&(S+=E+" ")}),S}var registerStyles=function(u,T,S){var E=u.key+"-"+T.name;(S===!1||isBrowser$1===!1)&&u.registered[E]===void 0&&(u.registered[E]=T.styles)},insertStyles=function(u,T,S){registerStyles(u,T,S);var E=u.key+"-"+T.name;if(u.inserted[T.name]===void 0){var C=T;do u.insert(T===C?"."+E:"",C,u.sheet,!0),C=C.next;while(C!==void 0)}};function murmur2(o){for(var u=0,T,S=0,E=o.length;E>=4;
36++S,E-=4)T=o.charCodeAt(S)&255|(o.charCodeAt(++S)&255)<<8|(o.charCodeAt(++S)&255)<<16|(o.charCodeAt(++S)&255)<<24,T=(T&65535)*1540483477+((T>>>16)*59797<<16),T^=T>>>24,u=(T&65535)*1540483477+((T>>>16)*59797<<16)^(u&65535)*1540483477+((u>>>16)*59797<<16);switch(E){case 3:u^=(o.charCodeAt(S+2)&255)<<16;case 2:u^=(o.charCodeAt(S+1)&255)<<8;case 1:u^=o.charCodeAt(S)&255,u=(u&65535)*1540483477+((u>>>16)*59797<<16)}return u^=u>>>13,u=(u&65535)*1540483477+((u>>>16)*59797<<16),((u^u>>>15)>>>0).toString(36)}var unitlessKeys={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,scale:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1},hyphenateRegex=/[A-Z]|^ms/g,animationRegex=/_EMO_([^_]+?)_([^]*?)_EMO_/g,isCustomProperty=function(u){return u.charCodeAt(1)===45},isProcessableValue=function(u){return u!=null&&typeof u!="boolean"},processStyleName=memoize$1(function(o){return isCustomProperty(o)?o:o.replace(hyphenateRegex,"-$&").toLowerCase()}),processStyleValue=function(u,T){switch(u){case"animation":case"animationName":if(typeof T=="string")return T.replace(animationRegex,function(S,E,C){return cursor={name:E,styles:C,next:cursor},E})}return unitlessKeys[u]!==1&&!isCustomProperty(u)&&typeof T=="number"&&T!==0?T+"px":T};function handleInterpolation(o,u,T){if(T==null)return"";var S=T;if(S.__emotion_styles!==void 0)return S;switch(typeof T){case"boolean":return"";case"object":{var E=T;if(E.anim===1)return cursor={name:E.name,styles:E.styles,next:cursor},E.name;var C=T;if(C.styles!==void 0){var _=C.next;if(_!==void 0)for(;_!==void 0;)cursor={name:_.name,styles:_.styles,next:cursor},_=_.next;var P=C.styles+";";return P}return createStringFromObject(o,u,T)}case"function":{if(o!==void 0){var R=cursor,I=T(o);return cursor=R,handleInterpolation(o,u,I)}break}}var L=T;if(u==null)return L;var j=u[L];return j!==void 0?j:L}function createStringFromObject(o,u,T){var S="";if(Array.isArray(T))for(var E=0;E<T.length;E++)S+=handleInterpolation(o,u,T[E])+";";else for(var C in T){var _=T[C];if(typeof _!="object"){var P=_;u!=null&&u[P]!==void 0?S+=C+"{"+u[P]+"}":isProcessableValue(P)&&(S+=processStyleName(C)+":"+processStyleValue(C,P)+";")}else if(Array.isArray(_)&&typeof _[0]=="string"&&(u==null||u[_[0]]===void 0))for(var R=0;R<_.length;R++)isProcessableValue(_[R])&&(S+=processStyleName(C)+":"+processStyleValue(C,_[R])+";");else{var I=handleInterpolation(o,u,_);switch(C){case"animation":case"animationName":{S+=processStyleName(C)+":"+I+";";break}default:S+=C+"{"+I+"}"}}}return S}var labelPattern=/label:\s*([^\s;{]+)\s*(;|$)/g,cursor;function serializeStyles(o,u,T){if(o.length===1&&typeof o[0]=="object"&&o[0]!==null&&o[0].styles!==void 0)return o[0];var S=!0,E="";cursor=void 0;var C=o[0];if(C==null||C.raw===void 0)S=!1,E+=handleInterpolation(T,u,C);else{var _=C;E+=_[0]}for(var P=1;P<o.length;P++)if(E+=handleInterpolation(T,u,o[P]),S){var R=C;E+=R[P]}labelPattern.lastIndex=0;for(var I="",L;(L=labelPattern.exec(E))!==null;)I+="-"+L[1];var j=murmur2(E)+I;return{name:j,styles:E,next:cursor}}var syncFallback=function(u){return u()},useInsertionEffect=React.useInsertionEffect?React.useInsertionEffect:!1,useInsertionEffectAlwaysWithSyncFallback=useInsertionEffect||syncFallback,useInsertionEffectWithLayoutFallback=useInsertionEffect||reactExports.useLayoutEffect,EmotionCacheContext=reactExports.createContext(typeof HTMLElement<"u"?createCache({key:"css"}):null);EmotionCacheContext.Provider;var withEmotionCache=function(u){return reactExports.forwardRef(function(T,S){var E=reactExports.useContext(EmotionCacheContext);return u(T,E,S)})},ThemeContext$1=reactExports.createContext({}),hasOwn={}.hasOwnProperty,typePropName="__EMOTION_TYPE_PLEASE_DO_NOT_USE__",createEmotionProps=function(u,T){var S={};for(var E in T)hasOwn.call(T,E)&&(S[E]=T[E]);return S[typePropName]=u,S}
36,Insertion$1=function(u){var T=u.cache,S=u.serialized,E=u.isStringTag;return registerStyles(T,S,E),useInsertionEffectAlwaysWithSyncFallback(function(){return insertStyles(T,S,E)}),null},Emotion=withEmotionCache(function(o,u,T){var S=o.css;typeof S=="string"&&u.registered[S]!==void 0&&(S=u.registered[S]);var E=o[typePropName],C=[S],_="";typeof o.className=="string"?_=getRegisteredStyles(u.registered,C,o.className):o.className!=null&&(_=o.className+" ");var P=serializeStyles(C,void 0,reactExports.useContext(ThemeContext$1));_+=u.key+"-"+P.name;var R={};for(var I in o)hasOwn.call(o,I)&&I!=="css"&&I!==typePropName&&(R[I]=o[I]);return R.className=_,T&&(R.ref=T),reactExports.createElement(reactExports.Fragment,null,reactExports.createElement(Insertion$1,{cache:u,serialized:P,isStringTag:typeof E=="string"}),reactExports.createElement(E,R))}),Emotion$1=Emotion,jsx=function(u,T){var S=arguments;if(T==null||!hasOwn.call(T,"css"))return reactExports.createElement.apply(void 0,S);var E=S.length,C=new Array(E);C[0]=Emotion$1,C[1]=createEmotionProps(u,T);for(var _=2;_<E;_++)C[_]=S[_];return reactExports.createElement.apply(null,C)};(function(o){var u;u||(u=o.JSX||(o.JSX={}))})(jsx||(jsx={}));var Global=withEmotionCache(function(o,u){var T=o.styles,S=serializeStyles([T],void 0,reactExports.useContext(ThemeContext$1)),E=reactExports.useRef();return useInsertionEffectWithLayoutFallback(function(){var C=u.key+"-global",_=new u.sheet.constructor({key:C,nonce:u.sheet.nonce,container:u.sheet.container,speedy:u.sheet.isSpeedy}),P=!1,R=document.querySelector('style[data-emotion="'+C+" "+S.name+'"]');return u.sheet.tags.length&&(_.before=u.sheet.tags[0]),R!==null&&(P=!0,R.setAttribute("data-emotion",C),_.hydrate([R])),E.current=[_,P],function(){_.flush()}},[u]),useInsertionEffectWithLayoutFallback(function(){var C=E.current,_=C[0],P=C[1];if(P){C[1]=!1;return}if(S.next!==void 0&&insertStyles(u,S.next,!0),_.tags.length){var R=_.tags[_.tags.length-1].nextElementSibling;_.before=R,_.flush()}u.insert("",S,_,!1)},[u,S.name]),null});function css(){for(var o=arguments.length,u=new Array(o),T=0;T<o;T++)u[T]=arguments[T];return serializeStyles(u)}function keyframes$1(){var o=css.apply(void 0,arguments),u="animation-"+o.name;return{name:u,styles:"@keyframes "+u+"{"+o.styles+"}",anim:1,toString:function(){return"_EMO_"+this.name+"_"+this.styles+"_EMO_"}}}var reactPropsRegex=/^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|disableRemotePlayback|download|draggable|encType|enterKeyHint|fetchpriority|fetchPriority|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|popover|popoverTarget|popoverTargetAction|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRen
36dering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/,isPropValid=memoize$1(function(o){return reactPropsRegex.test(o)||o.charCodeAt(0)===111&&o.charCodeAt(1)===110&&o.charCodeAt(2)<91}),testOmitPropsOnStringTag=isPropValid,testOmitPropsOnComponent=function(u){return u!=="theme"},getDefaultShouldForwardProp=function(u){return typeof u=="string"&&u.charCodeAt(0)>96?testOmitPropsOnStringTag:testOmitPropsOnComponent},composeShouldForwardProps=function(u,T,S){var E;if(T){var C=T.shouldForwardProp;E=u.__emotion_forwardProp&&C?function(_){return u.__emotion_forwardProp(_)&&C(_)}:C}return typeof E!="function"&&S&&(E=u.__emotion_forwardProp),E},Insertion=function(u){var T=u.cache,S=u.serialized,E=u.isStringTag;return registerStyles(T,S,E),useInsertionEffectAlwaysWithSyncFallback(function(){return insertStyles(T,S,E)}),null},createStyled$1=function o(u,T){var S=u.__emotion_real===u,E=S&&u.__emotion_base||u,C,_;T!==void 0&&(C=T.label,_=T.target);var P=composeShouldForwardProps(u,T,S),R=P||getDefaultShouldForwardProp(E),I=!R("as");return function(){var L=arguments,j=S&&u.__emotion_styles!==void 0?u.__emotion_styles.slice(0):[];if(C!==void 0&&j.push("label:"+C+";"),L[0]==null||L[0].raw===void 0)j.push.apply(j,L);else{var M=L[0];j.push(M[0]);for(var D=L.length,F=1;F<D;F++)j.push(L[F],M[F])}var N=withEmotionCache(function(G,B,H){var O=I&&G.as||E,V="",U=[],W=G;if(G.theme==null){W={};for(var K in G)W[K]=G[K];W.theme=reactExports.useContext(ThemeContext$1)}typeof G.className=="string"?V=getRegisteredStyles(B.registered,U,G.className):G.className!=null&&(V=G.className+" ");var Y=serializeStyles(j.concat(U),B.registered,W);V+=B.key+"-"+Y.name,_!==void 0&&(V+=" "+_);var ee=I&&P===void 0?getDefaultShouldForwardProp(O):R,oe={};for(var se in G)I&&se==="as"||ee(se)&&(oe[se]=G[se]);return oe.className=V,H&&(oe.ref=H),reactExports.createElement(reactExports.Fragment,null,reactExports.createElement(Insertion,{cache:B,serialized:Y,isStringTag:typeof O=="string"}),reactExports.createElement(O,oe))});return N.displayName=C!==void 0?C:"Styled("+(typeof E=="string"?E:E.displayName||E.name||"Component")+")",N.defaultProps=u.defaultProps,N.__emotion_real=N,N.__emotion_base=E,N.__emotion_styles=j,N.__emotion_forwardProp=P,Object.defineProperty(N,"toString",{value:function(){return"."+_}}),N.withComponent=function(G,B){var H=o(G,_extends$3({},T,B,{shouldForwardProp:composeShouldForwardProps(N,B,!0)}));return H.apply(void 0,j)},N}},tags=["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","big","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","marquee","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","title","tr","track","u","ul","var","video","wbr","circle","clipPath","defs","ellipse","foreignObject","g","image","line","linearGradient","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","svg","text","tspan"],styled$2=createStyled$1.bind(null);
36tags.forEach(function(o){styled$2[o]=styled$2(o)});function isEmpty$2(o){return o==null||Object.keys(o).length===0}function GlobalStyles$2(o){const{styles:u,defaultTheme:T={}}=o,S=typeof u=="function"?E=>u(isEmpty$2(E)?T:E):u;return jsxRuntimeExports.jsx(Global,{styles:S})}function styled$1(o,u){return styled$2(o,u)}function internal_mutateStyles(o,u){Array.isArray(o.__emotion_styles)&&(o.__emotion_styles=u(o.__emotion_styles))}const wrapper=[];function internal_serializeStyles(o){return wrapper[0]=o,serializeStyles(wrapper)}var reactIs={exports:{}},reactIs_production={};/**
37 * @license React
38 * react-is.production.js
39 *
40 * Copyright (c) Meta Platforms, Inc. and affiliates.
41 *
42 * This source code is licensed under the MIT license found in the
43 * LICENSE file in the root directory of this source tree.
44 */var REACT_ELEMENT_TYPE=Symbol.for("react.transitional.element"),REACT_PORTAL_TYPE=Symbol.for("react.portal"),REACT_FRAGMENT_TYPE=Symbol.for("react.fragment"),REACT_STRICT_MODE_TYPE=Symbol.for("react.strict_mode"),REACT_PROFILER_TYPE=Symbol.for("react.profiler"),REACT_CONSUMER_TYPE=Symbol.for("react.consumer"),REACT_CONTEXT_TYPE=Symbol.for("react.context"),REACT_FORWARD_REF_TYPE=Symbol.for("react.forward_ref"),REACT_SUSPENSE_TYPE=Symbol.for("react.suspense"),REACT_SUSPENSE_LIST_TYPE=Symbol.for("react.suspense_list"),REACT_MEMO_TYPE=Symbol.for("react.memo"),REACT_LAZY_TYPE=Symbol.for("react.lazy"),REACT_VIEW_TRANSITION_TYPE=Symbol.for("react.view_transition"),REACT_CLIENT_REFERENCE=Symbol.for("react.client.reference");function typeOf(o){if(typeof o=="object"&&o!==null){var u=o.$$typeof;switch(u){case REACT_ELEMENT_TYPE:switch(o=o.type,o){case REACT_FRAGMENT_TYPE:case REACT_PROFILER_TYPE:case REACT_STRICT_MODE_TYPE:case REACT_SUSPENSE_TYPE:case REACT_SUSPENSE_LIST_TYPE:case REACT_VIEW_TRANSITION_TYPE:return o;default:switch(o=o&&o.$$typeof,o){case REACT_CONTEXT_TYPE:case REACT_FORWARD_REF_TYPE:case REACT_LAZY_TYPE:case REACT_MEMO_TYPE:return o;case REACT_CONSUMER_TYPE:return o;default:return u}}case REACT_PORTAL_TYPE:return u}}}reactIs_production.ContextConsumer=REACT_CONSUMER_TYPE;reactIs_production.ContextProvider=REACT_CONTEXT_TYPE;reactIs_production.Element=REACT_ELEMENT_TYPE;reactIs_production.ForwardRef=REACT_FORWARD_REF_TYPE;reactIs_production.Fragment=REACT_FRAGMENT_TYPE;reactIs_production.Lazy=REACT_LAZY_TYPE;reactIs_production.Memo=REACT_MEMO_TYPE;reactIs_production.Portal=REACT_PORTAL_TYPE;reactIs_production.Profiler=REACT_PROFILER_TYPE;reactIs_production.StrictMode=REACT_STRICT_MODE_TYPE;reactIs_production.Suspense=REACT_SUSPENSE_TYPE;reactIs_production.SuspenseList=REACT_SUSPENSE_LIST_TYPE;reactIs_production.isContextConsumer=function(o){return typeOf(o)===REACT_CONSUMER_TYPE};reactIs_production.isContextProvider=function(o){return typeOf(o)===REACT_CONTEXT_TYPE};reactIs_production.isElement=function(o){return typeof o=="object"&&o!==null&&o.$$typeof===REACT_ELEMENT_TYPE};reactIs_production.isForwardRef=function(o){return typeOf(o)===REACT_FORWARD_REF_TYPE};reactIs_production.isFragment=function(o){return typeOf(o)===REACT_FRAGMENT_TYPE};reactIs_production.isLazy=function(o){return typeOf(o)===REACT_LAZY_TYPE};reactIs_production.isMemo=function(o){return typeOf(o)===REACT_MEMO_TYPE};reactIs_production.isPortal=function(o){return typeOf(o)===REACT_PORTAL_TYPE};reactIs_production.isProfiler=function(o){return typeOf(o)===REACT_PROFILER_TYPE};reactIs_production.isStrictMode=function(o){return typeOf(o)===REACT_STRICT_MODE_TYPE};reactIs_production.isSuspense=function(o){return typeOf(o)===REACT_SUSPENSE_TYPE};reactIs_production.isSuspenseList=function(o){return typeOf(o)===REACT_SUSPENSE_LIST_TYPE};reactIs_production.isValidElementType=function(o){return typeof o=="string"||typeof o=="function"||o===REACT_FRAGMENT_TYPE||o===REACT_PROFILER_TYPE||o===REACT_STRICT_MODE_TYPE||o===REACT_SUSPENSE_TYPE||o===REACT_SUSPENSE_LIST_TYPE||typeof o=="object"&&o!==null&&(o.$$typeof===REACT_LAZY_TYPE||o.$$typeof===REACT_MEMO_TYPE||o.$$typeof===REACT_CONTEXT_TYPE||o.$$typeof===REACT_CONSUMER_TYPE||o.$$typeof===REACT_FORWARD_REF_TYPE||o.$$typeof===REACT_CLIENT_REFERENCE||o.getModuleId!==void 0)};reactIs_production.typeOf=typeOf;reactIs.exports=reactIs_production;var reactIsExports=reactIs.exports;function isPlainObject(o){if(typeof o!="object"||o===null)return!1;
44const u=Object.getPrototypeOf(o);return(u===null||u===Object.prototype||Object.getPrototypeOf(u)===null)&&!(Symbol.toStringTag in o)&&!(Symbol.iterator in o)}function deepClone(o){if(reactExports.isValidElement(o)||reactIsExports.isValidElementType(o)||!isPlainObject(o))return o;const u={};return Object.keys(o).forEach(T=>{u[T]=deepClone(o[T])}),u}function deepmerge(o,u,T={clone:!0}){const S=T.clone?{...o}:o;return isPlainObject(o)&&isPlainObject(u)&&Object.keys(u).forEach(E=>{reactExports.isValidElement(u[E])||reactIsExports.isValidElementType(u[E])?S[E]=u[E]:isPlainObject(u[E])&&Object.prototype.hasOwnProperty.call(o,E)&&isPlainObject(o[E])?S[E]=deepmerge(o[E],u[E],T):T.clone?S[E]=isPlainObject(u[E])?deepClone(u[E]):u[E]:S[E]=u[E]}),S}const sortBreakpointsValues=o=>{const u=Object.keys(o).map(T=>({key:T,val:o[T]}))||[];return u.sort((T,S)=>T.val-S.val),u.reduce((T,S)=>({...T,[S.key]:S.val}),{})};function createBreakpoints(o){const{values:u={xs:0,sm:600,md:900,lg:1200,xl:1536},unit:T="px",step:S=5,...E}=o,C=sortBreakpointsValues(u),_=Object.keys(C);function P(M){return`@media (min-width:${typeof u[M]=="number"?u[M]:M}${T})`}function R(M){return`@media (max-width:${(typeof u[M]=="number"?u[M]:M)-S/100}${T})`}function I(M,D){const F=_.indexOf(D);return`@media (min-width:${typeof u[M]=="number"?u[M]:M}${T}) and (max-width:${(F!==-1&&typeof u[_[F]]=="number"?u[_[F]]:D)-S/100}${T})`}function L(M){return _.indexOf(M)+1<_.length?I(M,_[_.indexOf(M)+1]):P(M)}function j(M){const D=_.indexOf(M);return D===0?P(_[1]):D===_.length-1?R(_[D]):I(M,_[_.indexOf(M)+1]).replace("@media","@media not all and")}return{keys:_,values:C,up:P,down:R,between:I,only:L,not:j,unit:T,...E}}function sortContainerQueries(o,u){if(!o.containerQueries)return u;const T=Object.keys(u).filter(S=>S.startsWith("@container")).sort((S,E)=>{var _,P;const C=/min-width:\s*([0-9.]+)/;return+(((_=S.match(C))==null?void 0:_[1])||0)-+(((P=E.match(C))==null?void 0:P[1])||0)});return T.length?T.reduce((S,E)=>{const C=u[E];return delete S[E],S[E]=C,S},{...u}):u}function isCqShorthand(o,u){return u==="@"||u.startsWith("@")&&(o.some(T=>u.startsWith(`@${T}`))||!!u.match(/^@\d/))}function getContainerQuery(o,u){const T=u.match(/^@([^/]+)?\/?(.+)?$/);if(!T)return null;const[,S,E]=T,C=Number.isNaN(+S)?S||0:+S;return o.containerQueries(E).up(C)}function cssContainerQueries(o){const u=(C,_)=>C.replace("@media",_?`@container ${_}`:"@container");function T(C,_){C.up=(...P)=>u(o.breakpoints.up(...P),_),C.down=(...P)=>u(o.breakpoints.down(...P),_),C.between=(...P)=>u(o.breakpoints.between(...P),_),C.only=(...P)=>u(o.breakpoints.only(...P),_),C.not=(...P)=>{const R=u(o.breakpoints.not(...P),_);return R.includes("not all and")?R.replace("not all and ","").replace("min-width:","width<").replace("max-width:","width>").replace("and","or"):R}}const S={},E=C=>(T(S,C),S);return T(E),{...o,containerQueries:E}}const shape={borderRadius:4};function merge(o,u){return u?deepmerge(o,u,{clone:!1}):o}const values$1={xs:0,sm:600,md:900,lg:1200,xl:1536},defaultBreakpoints={keys:["xs","sm","md","lg","xl"],up:o=>`@media (min-width:${values$1[o]}px)`},defaultContainerQueries={containerQueries:o=>({up:u=>{let T=typeof u=="number"?u:values$1[u]||u;return typeof T=="number"&&(T=`${T}px`),o?`@container ${o} (min-width:${T})`:`@container (min-width:${T})`}})};function handleBreakpoints(o,u,T){const S=o.theme||{};if(Array.isArray(u)){const C=S.breakpoints||defaultBreakpoints;return u.reduce((_,P,R)=>(_[C.up(C.keys[R])]=T(u[R]),_),{})}if(typeof u=="object"){const C=S.breakpoints||defaultBreakpoints;return Object.keys(u).reduce((_,P)=>{if(isCqShorthand(C.keys,P)){const R=getContainerQuery(S.containerQueries?S:defaultContainerQueries,P);R&&(_[R]=T(u[P],P))}else if(Object.keys(C.values||values$1).includes(P)){const R=C.up(P);_[R]=T(u[P],P)}else{const R=P;_[R]=u[R]}return _},{})}return T(u)}function createEmptyBreakpointObject(o={}){var T;return((T=o.keys)==null?void 0:T.reduce((S,E)=>{const C=o.up(E);return S[C]={},S},{}))||{}}function removeUnusedBreakpoints(o,u){return o.reduce((T,S)=>{const E=T[S];return(!E||Object.keys(E).length===0)&&delete T[S],T},u)}function capitalize(o){if(typeof o!="string")throw new Error(formatMuiErrorMessage(7));return o.charAt(0).toUpperCase()+o.slice(1)}function getPath$1(o,u,T=!0){if(!u||typeof u!="string")return null;if(o&&o.vars&&T){const S=`vars.${u}`.split(".").reduce((E,C)=>E&&E[C]?E[C]:null,o);if(S!=null)return S}return u.split(".").reduce((S,E)=>S&&S[E]!=null?S[E]:null,o)}function getStyleValue$1(o,u,T,S=T){let E;return typeof o=="function"?E=o(T):Array.isArray(o)?E=o[T]||S:E=getPath$1(o,T)||S,u&&(E=u(E,S,o)),E}function style$1(o){const{prop:u,cssProperty:T=o.prop,themeKey:S,transform:E}=o,C=_=>{if(_[u]==null)return null;const P=_[u],R=_.theme,I=getPath$1(R,S)||{};return handleBreakpoints(_,P,j=>{let M=getStyleValue$1(I,E,j);return j===M&&typeof j=="string"&&(M=getStyleValue$1(I,E,`${u}${j==="default"?"":capitalize(j)}`,j)),T===!1?M:{[T]:M}})};return C.propTypes={},C.filterProps=[u],C}
44function memoize(o){const u={};return T=>(u[T]===void 0&&(u[T]=o(T)),u[T])}const properties={m:"margin",p:"padding"},directions={t:"Top",r:"Right",b:"Bottom",l:"Left",x:["Left","Right"],y:["Top","Bottom"]},aliases={marginX:"mx",marginY:"my",paddingX:"px",paddingY:"py"},getCssProperties=memoize(o=>{if(o.length>2)if(aliases[o])o=aliases[o];else return[o];const[u,T]=o.split(""),S=properties[u],E=directions[T]||"";return Array.isArray(E)?E.map(C=>S+C):[S+E]}),marginKeys=["m","mt","mr","mb","ml","mx","my","margin","marginTop","marginRight","marginBottom","marginLeft","marginX","marginY","marginInline","marginInlineStart","marginInlineEnd","marginBlock","marginBlockStart","marginBlockEnd"],paddingKeys=["p","pt","pr","pb","pl","px","py","padding","paddingTop","paddingRight","paddingBottom","paddingLeft","paddingX","paddingY","paddingInline","paddingInlineStart","paddingInlineEnd","paddingBlock","paddingBlockStart","paddingBlockEnd"];[...marginKeys,...paddingKeys];function createUnaryUnit(o,u,T,S){const E=getPath$1(o,u,!0)??T;return typeof E=="number"||typeof E=="string"?C=>typeof C=="string"?C:typeof E=="string"?E.startsWith("var(")&&C===0?0:E.startsWith("var(")&&C===1?E:`calc(${C} * ${E})`:E*C:Array.isArray(E)?C=>{if(typeof C=="string")return C;const _=Math.abs(C),P=E[_];return C>=0?P:typeof P=="number"?-P:typeof P=="string"&&P.startsWith("var(")?`calc(-1 * ${P})`:`-${P}`}:typeof E=="function"?E:()=>{}}function createUnarySpacing(o){return createUnaryUnit(o,"spacing",8)}function getValue(o,u){return typeof u=="string"||u==null?u:o(u)}function getStyleFromPropValue(o,u){return T=>o.reduce((S,E)=>(S[E]=getValue(u,T),S),{})}function resolveCssProperty(o,u,T,S){if(!u.includes(T))return null;const E=getCssProperties(T),C=getStyleFromPropValue(E,S),_=o[T];return handleBreakpoints(o,_,C)}function style(o,u){const T=createUnarySpacing(o.theme);return Object.keys(o).map(S=>resolveCssProperty(o,u,S,T)).reduce(merge,{})}function margin(o){return style(o,marginKeys)}margin.propTypes={};margin.filterProps=marginKeys;function padding(o){return style(o,paddingKeys)}padding.propTypes={};padding.filterProps=paddingKeys;function createSpacing(o=8,u=createUnarySpacing({spacing:o})){if(o.mui)return o;const T=(...S)=>(S.length===0?[1]:S).map(C=>{const _=u(C);return typeof _=="number"?`${_}px`:_}).join(" ");return T.mui=!0,T}function compose(...o){const u=o.reduce((S,E)=>(E.filterProps.forEach(C=>{S[C]=E}),S),{}),T=S=>Object.keys(S).reduce((E,C)=>u[C]?merge(E,u[C](S)):E,{});return T.propTypes={},T.filterProps=o.reduce((S,E)=>S.concat(E.filterProps),[]),T}function borderTransform(o){return typeof o!="number"?o:`${o}px solid`}function createBorderStyle(o,u){return style$1({prop:o,themeKey:"borders",transform:u})}const border=createBorderStyle("border",borderTransform),borderTop=createBorderStyle("borderTop",borderTransform),borderRight=createBorderStyle("borderRight",borderTransform),borderBottom=createBorderStyle("borderBottom",borderTransform),borderLeft=createBorderStyle("borderLeft",borderTransform),borderColor=createBorderStyle("borderColor"),borderTopColor=createBorderStyle("borderTopColor"),borderRightColor=createBorderStyle("borderRightColor"),borderBottomColor=createBorderStyle("borderBottomColor"),borderLeftColor=createBorderStyle("borderLeftColor"),outline=createBorderStyle("outline",borderTransform),outlineColor=createBorderStyle("outlineColor"),borderRadius=o=>
44{if(o.borderRadius!==void 0&&o.borderRadius!==null){const u=createUnaryUnit(o.theme,"shape.borderRadius",4),T=S=>({borderRadius:getValue(u,S)});return handleBreakpoints(o,o.borderRadius,T)}return null};borderRadius.propTypes={};borderRadius.filterProps=["borderRadius"];compose(border,borderTop,borderRight,borderBottom,borderLeft,borderColor,borderTopColor,borderRightColor,borderBottomColor,borderLeftColor,borderRadius,outline,outlineColor);const gap=o=>{if(o.gap!==void 0&&o.gap!==null){const u=createUnaryUnit(o.theme,"spacing",8),T=S=>({gap:getValue(u,S)});return handleBreakpoints(o,o.gap,T)}return null};gap.propTypes={};gap.filterProps=["gap"];const columnGap=o=>{if(o.columnGap!==void 0&&o.columnGap!==null){const u=createUnaryUnit(o.theme,"spacing",8),T=S=>({columnGap:getValue(u,S)});return handleBreakpoints(o,o.columnGap,T)}return null};columnGap.propTypes={};columnGap.filterProps=["columnGap"];const rowGap=o=>{if(o.rowGap!==void 0&&o.rowGap!==null){const u=createUnaryUnit(o.theme,"spacing",8),T=S=>({rowGap:getValue(u,S)});return handleBreakpoints(o,o.rowGap,T)}return null};rowGap.propTypes={};rowGap.filterProps=["rowGap"];const gridColumn=style$1({prop:"gridColumn"}),gridRow=style$1({prop:"gridRow"}),gridAutoFlow=style$1({prop:"gridAutoFlow"}),gridAutoColumns=style$1({prop:"gridAutoColumns"}),gridAutoRows=style$1({prop:"gridAutoRows"}),gridTemplateColumns=style$1({prop:"gridTemplateColumns"}),gridTemplateRows=style$1({prop:"gridTemplateRows"}),gridTemplateAreas=style$1({prop:"gridTemplateAreas"}),gridArea=style$1({prop:"gridArea"});compose(gap,columnGap,rowGap,gridColumn,gridRow,gridAutoFlow,gridAutoColumns,gridAutoRows,gridTemplateColumns,gridTemplateRows,gridTemplateAreas,gridArea);function paletteTransform(o,u){return u==="grey"?u:o}const color$1=style$1({prop:"color",themeKey:"palette",transform:paletteTransform}),bgcolor=style$1({prop:"bgcolor",cssProperty:"backgroundColor",themeKey:"palette",transform:paletteTransform}),backgroundColor=style$1({prop:"backgroundColor",themeKey:"palette",transform:paletteTransform});compose(color$1,bgcolor,backgroundColor);function sizingTransform(o){return o<=1&&o!==0?`${o*100}%`:o}const width=style$1({prop:"width",transform:sizingTransform}),maxWidth=o=>{if(o.maxWidth!==void 0&&o.maxWidth!==null){const u=T=>{var E,C,_,P,R;const S=((_=(C=(E=o.theme)==null?void 0:E.breakpoints)==null?void 0:C.values)==null?void 0:_[T])||values$1[T];return S?((R=(P=o.theme)==null?void 0:P.breakpoints)==null?void 0:R.unit)!=="px"?{maxWidth:`${S}${o.theme.breakpoints.unit}`}:{maxWidth:S}:{maxWidth:sizingTransform(T)}};return handleBreakpoints(o,o.maxWidth,u)}return null};maxWidth.filterProps=["maxWidth"];const minWidth=style$1({prop:"minWidth",transform:sizingTransform}),height=style$1({prop:"height",transform:sizingTransform}),maxHeight=style$1({prop:"maxHeight",transform:sizingTransform}),minHeight=style$1({prop:"minHeight",transform:sizingTransform});style$1({prop:"size",cssProperty:"width",transform:sizingTransform});style$1({prop:"size",cssProperty:"height",transform:sizingTransform});const boxSizing=style$1({prop:"boxSizing"});compose(width,maxWidth,minWidth,height,maxHeight,minHeight,boxSizing);const defaultSxConfig={border:{themeKey:"borders",transform:borderTransform},borderTop:{themeKey:"borders",transform:borderTransform},borderRight:{themeKey:"borders",transform:borderTransform},borderBottom:{themeKey:"borders",transform:borderTransform},borderLeft:{themeKey:"borders",transform:borderTransform},borderColor:{themeKey:"palette"},borderTopColor:{themeKey:"palette"},borderRightColor:{themeKey:"palette"},borderBottomColor:{themeKey:"palette"},borderLeftColor:{themeKey:"palette"},outline:{themeKey:"borders",transform:borderTransform},outlineColor:{themeKey:"palette"},borderRadius:{themeKey:"shape.borderRadius",style:borderRadius},color:{themeKey:"palette",transform:paletteTransform},bgcolor:{themeKey:"palette",cssProperty:"backgroundColor",transform:paletteTransform},backgroundColor:{themeKey:"palette",transform:paletteTransform},p:{style:padding},pt:{style:padding},pr:{style:padding},pb:{style:padding},pl:{style:padding},px:{style:padding},py:{style:padding},padding:{style:padding},paddingTop:{style:padding},paddingRight:{style:padding}
44,paddingBottom:{style:padding},paddingLeft:{style:padding},paddingX:{style:padding},paddingY:{style:padding},paddingInline:{style:padding},paddingInlineStart:{style:padding},paddingInlineEnd:{style:padding},paddingBlock:{style:padding},paddingBlockStart:{style:padding},paddingBlockEnd:{style:padding},m:{style:margin},mt:{style:margin},mr:{style:margin},mb:{style:margin},ml:{style:margin},mx:{style:margin},my:{style:margin},margin:{style:margin},marginTop:{style:margin},marginRight:{style:margin},marginBottom:{style:margin},marginLeft:{style:margin},marginX:{style:margin},marginY:{style:margin},marginInline:{style:margin},marginInlineStart:{style:margin},marginInlineEnd:{style:margin},marginBlock:{style:margin},marginBlockStart:{style:margin},marginBlockEnd:{style:margin},displayPrint:{cssProperty:!1,transform:o=>({"@media print":{display:o}})},display:{},overflow:{},textOverflow:{},visibility:{},whiteSpace:{},flexBasis:{},flexDirection:{},flexWrap:{},justifyContent:{},alignItems:{},alignContent:{},order:{},flex:{},flexGrow:{},flexShrink:{},alignSelf:{},justifyItems:{},justifySelf:{},gap:{style:gap},rowGap:{style:rowGap},columnGap:{style:columnGap},gridColumn:{},gridRow:{},gridAutoFlow:{},gridAutoColumns:{},gridAutoRows:{},gridTemplateColumns:{},gridTemplateRows:{},gridTemplateAreas:{},gridArea:{},position:{},zIndex:{themeKey:"zIndex"},top:{},right:{},bottom:{},left:{},boxShadow:{themeKey:"shadows"},width:{transform:sizingTransform},maxWidth:{style:maxWidth},minWidth:{transform:sizingTransform},height:{transform:sizingTransform},maxHeight:{transform:sizingTransform},minHeight:{transform:sizingTransform},boxSizing:{},font:{themeKey:"font"},fontFamily:{themeKey:"typography"},fontSize:{themeKey:"typography"},fontStyle:{themeKey:"typography"},fontWeight:{themeKey:"typography"},letterSpacing:{},textTransform:{},lineHeight:{},textAlign:{},typography:{cssProperty:!1,themeKey:"typography"}};function objectsHaveSameKeys(...o){const u=o.reduce((S,E)=>S.concat(Object.keys(E)),[]),T=new Set(u);return o.every(S=>T.size===Object.keys(S).length)}function callIfFn(o,u){return typeof o=="function"?o(u):o}function unstable_createStyleFunctionSx(){function o(T,S,E,C){const _={[T]:S,theme:E},P=C[T];if(!P)return{[T]:S};const{cssProperty:R=T,themeKey:I,transform:L,style:j}=P;if(S==null)return null;if(I==="typography"&&S==="inherit")return{[T]:S};const M=getPath$1(E,I)||{};return j?j(_):handleBreakpoints(_,S,F=>{let N=getStyleValue$1(M,L,F);return F===N&&typeof F=="string"&&(N=getStyleValue$1(M,L,`${T}${F==="default"?"":capitalize(F)}`,F)),R===!1?N:{[R]:N}})}function u(T){const{sx:S,theme:E={},nested:C}=T||{};if(!S)return null;const _=E.unstable_sxConfig??defaultSxConfig;function P(R){let I=R;if(typeof R=="function")I=R(E);else if(typeof R!="object")return R;if(!I)return null;const L=createEmptyBreakpointObject(E.breakpoints),j=Object.keys(L);let M=L;return Object.keys(I).forEach(D=>{const F=callIfFn(I[D],E);if(F!=null)if(typeof F=="object")if(_[D])M=merge(M,o(D,F,E,_));else{const N=handleBreakpoints({theme:E},F,G=>({[D]:G}));objectsHaveSameKeys(N,F)?M[D]=u({sx:F,theme:E,nested:!0}):M=merge(M,N)}else M=merge(M,o(D,F,E,_))}),!C&&E.modularCssLayers?{"@layer sx":sortContainerQueries(E,removeUnusedBreakpoints(j,M))}:sortContainerQueries(E,removeUnusedBreakpoints(j,M))}return Array.isArray(S)?S.map(P):P(S)}return u}const styleFunctionSx=unstable_createStyleFunctionSx();styleFunctionSx.filterProps=["sx"];function applyStyles(o,u){var S;const T=this;if(T.vars){if(!((S=T.colorSchemes)!=null&&S[o])||typeof T.getColorSchemeSelector!="function")return{};let E=T.getColorSchemeSelector(o);return E==="&"?u:((E.includes("data-")||E.includes("."))&&(E=`*:where(${E.replace(/\s*&$/,"")}) &`),{[E]:u})}return T.palette.mode===o?u:{}}function createTheme$1(o={},...u){const{breakpoints:T={},palette:S={},spacing:E,shape:C={},..._}=o,P=createBreakpoints(T),R=createSpacing(E);let I=deepmerge({breakpoints:P,direction:"ltr",components:{},palette:{mode:"light",...S},spacing:R,shape:{...shape,...C}},_);return I=cssContainerQueries(I),I.applyStyles=applyStyles,I=u.reduce((L,j)=>deepmerge(L,j),I),I.unstable_sxConfig={...defaultSxConfig,..._==null?void 0:_.unstable_sxConfig},I.unstable_sx=function(j){return styleFunctionSx({sx:j,theme:this})},I}function isObjectEmpty$2(o){return Object.keys(o).length===0}function useTheme$3(o=null){const u=reactExports.useContext(ThemeContext$1);return!u||isObjectEmpty$2(u)?o:u}const systemDefaultTheme$1=createTheme$1();function useTheme$2(o=systemDefaultTheme$1){return useTheme$3(o)}function wrapGlobalLayer(o){const u=internal_serializeStyles(o);return o!==u&&u.styles?(u.styles.match(/^@layer\s+[^{]*$/)||(u.styles=`@layer global{${u.styles}}`),u):o}function GlobalStyles$1({styles:o,themeId:u,defaultTheme:T={}}){const S=useTheme$2(T),E=u&&S[u]||S;let C=typeof o=="function"?o(E):o;return E.modularCssLayers&&(Array.isArray(C)?C=C.map(_=>wrapGlobalLayer(typeof _=="function"?_(E):_)):C=wrapGlobalLayer(C)),jsxRuntimeExports.jsx(GlobalStyles$2,{styles:C})}const splitProps=o=>{var S;const u={systemProps:{},otherProps:{}},T=((S=o==null?void 0:o.theme)==null?void 0:S.unstable_sxConfig)??defaultSxConfig;
44return Object.keys(o).forEach(E=>{T[E]?u.systemProps[E]=o[E]:u.otherProps[E]=o[E]}),u};function extendSxProp$1(o){const{sx:u,...T}=o,{systemProps:S,otherProps:E}=splitProps(T);let C;return Array.isArray(u)?C=[S,...u]:typeof u=="function"?C=(..._)=>{const P=u(..._);return isPlainObject(P)?{...S,...P}:S}:C={...S,...u},{...E,sx:C}}const defaultGenerator=o=>o,createClassNameGenerator=()=>{let o=defaultGenerator;return{configure(u){o=u},generate(u){return o(u)},reset(){o=defaultGenerator}}},ClassNameGenerator=createClassNameGenerator();function r$1(o){var u,T,S="";if(typeof o=="string"||typeof o=="number")S+=o;else if(typeof o=="object")if(Array.isArray(o)){var E=o.length;for(u=0;u<E;u++)o[u]&&(T=r$1(o[u]))&&(S&&(S+=" "),S+=T)}else for(T in o)o[T]&&(S&&(S+=" "),S+=T);return S}function clsx(){for(var o,u,T=0,S="",E=arguments.length;T<E;T++)(o=arguments[T])&&(u=r$1(o))&&(S&&(S+=" "),S+=u);return S}function createBox$1(o={}){const{themeId:u,defaultTheme:T,defaultClassName:S="MuiBox-root",generateClassName:E}=o,C=styled$1("div",{shouldForwardProp:P=>P!=="theme"&&P!=="sx"&&P!=="as"})(styleFunctionSx);return reactExports.forwardRef(function(R,I){const L=useTheme$2(T),{className:j,component:M="div",...D}=extendSxProp$1(R);return jsxRuntimeExports.jsx(C,{as:M,ref:I,className:clsx(j,E?E(S):S),theme:u&&L[u]||L,...D})})}const globalStateClasses={active:"active",checked:"checked",completed:"completed",disabled:"disabled",error:"error",expanded:"expanded",focused:"focused",focusVisible:"focusVisible",open:"open",readOnly:"readOnly",required:"required",selected:"selected"};function generateUtilityClass(o,u,T="Mui"){const S=globalStateClasses[u];return S?`${T}-${S}`:`${ClassNameGenerator.generate(o)}-${u}`}function generateUtilityClasses(o,u,T="Mui"){const S={};return u.forEach(E=>{S[E]=generateUtilityClass(o,E,T)}),S}function preprocessStyles(o){const{variants:u,...T}=o,S={variants:u,style:internal_serializeStyles(T),isProcessed:!0};return S.style===T||u&&u.forEach(E=>{typeof E.style!="function"&&(E.style=internal_serializeStyles(E.style))}),S}const systemDefaultTheme=createTheme$1();function shouldForwardProp(o){return o!=="ownerState"&&o!=="theme"&&o!=="sx"&&o!=="as"}function shallowLayer(o,u){return u&&o&&typeof o=="object"&&o.styles&&!o.styles.startsWith("@layer")&&(o.styles=`@layer ${u}{${String(o.styles)}}`),o}function defaultOverridesResolver(o){return o?(u,T)=>T[o]:null}function attachTheme(o,u,T){o.theme=isObjectEmpty$1(o.theme)?T:o.theme[u]||o.theme}function processStyle(o,u,T){const S=typeof u=="function"?u(o):u;if(Array.isArray(S))return S.flatMap(E=>processStyle(o,E,T));if(Array.isArray(S==null?void 0:S.variants)){let E;if(S.isProcessed)E=T?shallowLayer(S.style,T):S.style;else{const{variants:C,..._}=S;E=T?shallowLayer(internal_serializeStyles(_),T):_}return processStyleVariants(o,S.variants,[E],T)}return S!=null&&S.isProcessed?T?shallowLayer(internal_serializeStyles(S.style),T):S.style:T?shallowLayer(internal_serializeStyles(S),T):S}function processStyleVariants(o,u,T=[],S=void 0){var C;let E;e:for(let _=0;_<u.length;_+=1){const P=u[_];if(typeof P.props=="function"){if(E??(E={...o,...o.ownerState,ownerState:o.ownerState}),!P.props(E))continue}else for(const R in P.props)if(o[R]!==P.props[R]&&((C=o.ownerState)==null?void 0:C[R])!==P.props[R])continue e;typeof P.style=="function"?(E??(E={...o,...o.ownerState,ownerState:o.ownerState}),T.push(S?shallowLayer(internal_serializeStyles(P.style(E)),S):P.style(E))):T.push(S?shallowLayer(internal_serializeStyles(P.style),S):P.style)}return T}function createStyled(o={}){const{themeId:u,defaultTheme:T=systemDefaultTheme,rootShouldForwardProp:S=shouldForwardProp,slotShouldForwardProp:E=s
44houldForwardProp}=o;function C(P){attachTheme(P,u,T)}return(P,R={})=>{internal_mutateStyles(P,W=>W.filter(K=>K!==styleFunctionSx));const{name:I,slot:L,skipVariantsResolver:j,skipSx:M,overridesResolver:D=defaultOverridesResolver(lowercaseFirstLetter(L)),...F}=R,N=I&&I.startsWith("Mui")||L?"components":"custom",G=j!==void 0?j:L&&L!=="Root"&&L!=="root"||!1,B=M||!1;let H=shouldForwardProp;L==="Root"||L==="root"?H=S:L?H=E:isStringTag(P)&&(H=void 0);const O=styled$1(P,{shouldForwardProp:H,label:generateStyledLabel(),...F}),V=W=>{if(W.__emotion_real===W)return W;if(typeof W=="function")return function(Y){return processStyle(Y,W,Y.theme.modularCssLayers?N:void 0)};if(isPlainObject(W)){const K=preprocessStyles(W);return function(ee){return K.variants?processStyle(ee,K,ee.theme.modularCssLayers?N:void 0):ee.theme.modularCssLayers?shallowLayer(K.style,N):K.style}}return W},U=(...W)=>{const K=[],Y=W.map(V),ee=[];if(K.push(C),I&&D&&ee.push(function(ie){var te,Z;const re=(Z=(te=ie.theme.components)==null?void 0:te[I])==null?void 0:Z.styleOverrides;if(!re)return null;const J={};for(const X in re)J[X]=processStyle(ie,re[X],ie.theme.modularCssLayers?"theme":void 0);return D(ie,J)}),I&&!G&&ee.push(function(ie){var J,te;const ae=ie.theme,re=(te=(J=ae==null?void 0:ae.components)==null?void 0:J[I])==null?void 0:te.variants;return re?processStyleVariants(ie,re,[],ie.theme.modularCssLayers?"theme":void 0):null}),B||ee.push(styleFunctionSx),Array.isArray(Y[0])){const Q=Y.shift(),ie=new Array(K.length).fill(""),ae=new Array(ee.length).fill("");let re;re=[...ie,...Q,...ae],re.raw=[...ie,...Q.raw,...ae],K.unshift(re)}const oe=[...K,...Y,...ee],se=O(...oe);return P.muiName&&(se.muiName=P.muiName),se};return O.withConfig&&(U.withConfig=O.withConfig),U}}function generateStyledLabel(o,u){return void 0}function isObjectEmpty$1(o){for(const u in o)return!1;return!0}function isStringTag(o){return typeof o=="string"&&o.charCodeAt(0)>96}function lowercaseFirstLetter(o){return o&&o.charAt(0).toLowerCase()+o.slice(1)}function resolveProps(o,u,T=!1){const S={...u};for(const E in o)if(Object.prototype.hasOwnProperty.call(o,E)){const C=E;if(C==="components"||C==="slots")S[C]={...o[C],...S[C]};else if(C==="componentsProps"||C==="slotProps"){const _=o[C],P=u[C];if(!P)S[C]=_||{};else if(!_)S[C]=P;else{S[C]={...P};for(const R in _)if(Object.prototype.hasOwnProperty.call(_,R)){const I=R;S[C][I]=resolveProps(_[I],P[I],T)}}}else C==="className"&&T&&u.className?S.className=clsx(o==null?void 0:o.className,u==null?void 0:u.className):C==="style"&&T&&u.style?S.style={...o==null?void 0:o.style,...u==null?void 0:u.style}:S[C]===void 0&&(S[C]=o[C])}return S}function getThemeProps$1(o){const{theme:u,name:T,props:S}=o;return!u||!u.components||!u.components[T]||!u.components[T].defaultProps?S:resolveProps(u.components[T].defaultProps,S)}const useEnhancedEffect=typeof window<"u"?reactExports.useLayoutEffect:reactExports.useEffect;function useMediaQueryOld(o,u,T,S,E){const[C,_]=reactExports.useState(()=>E&&T?T(o).matches:S?S(o).matches:u);return useEnhancedEffect(()=>{if(!T)return;const P=T(o),R=()=>{_(P.matches)};return R(),P.addEventListener("change",R),()=>{P.removeEventListener("change",R)}},[o,T]),C}const safeReact$1={...React},maybeReactUseSyncExternalStore=safeReact$1.useSyncExternalStore;function useMediaQueryNew(o,u,T,S,E){const C=reactExports.useCallback(()=>u,[u]),_=reactExports.useMemo(()=>{if(E&&T)return()=>T(o).matches;if(S!==null){const{matches:L}=S(o);return()=>L}return C},[C,o,S,E,T]),[P,R]=reactExports.useMemo(()=>{if(T===null)return[C,()=>()=>{}];const L=T(o);return[()=>L.matches,j=>(L.addEventListener("change",j),()=>{L.removeEventListener("change",j)})]},[C,T,o]);return maybeReactUseSyncExternalStore(R,P,_)}function unstable_createUseMediaQuery(o={}){const{themeId:u}=o;return function(S,E={}){let C=useTheme$3();C&&u&&(C=C[u]||C);const _=typeof window<"u"&&typeof window.matchMedia<"u",{defaultMatches:P=!1,matchMedia:R=_?window.matchMedia:null,ssrMatchMedia:I=null,noSsr:L=!1}=getThemeProps$1({name:"MuiUseMediaQuery",props:E,theme:C});let j=typeof S=="function"?S(C):S;return j=j.replace(/^@media( ?)/m,""),j.includes("print")&&console.warn(["MUI: You have provided a `print` query to the `useMediaQuery` hook.","Using the print media query to modify print styles can lead to unexpected results.","Consider using the `displayPrint` field in the `sx` prop instead.","More information about `displayPrint` on our docs: https://mui.com/system/display/#display-in-print."].join(`
45`)),(maybeReactUseSyncExternalStore!==void 0?useMediaQueryNew:useMediaQueryOld)(j,P,R,I,L)}}unstable_createUseMediaQuery();function clamp$1(o,u=Number.MIN_SAFE_INTEGER,T=Number.MAX_SAFE_INTEGER){return Math.max(u,Math.min(o,T))}function clampWrapper(o,u=0,T=1){return clamp$1(o,u,T)}function hexToRgb(o){o=o.slice(1);const u=new RegExp(`.{1,${o.length>=6?2:1}}`,"g");let T=o.match(u);return T&&T[0].length===1&&(T=T.map(S=>S+S)),T?`rgb${T.length===4?"a":""}(${T.map((S,E)=>E<3?parseInt(S,16):Math.round(parseInt(S,16)/255*1e3)/1e3).join(", ")})`:""}function decomposeColor(o){if(o.type)return o;if(o.charAt(0)==="#")return decomposeColor(hexToRgb(o));const u=o.indexOf("("),T=o.substring(0,u);if(!["rgb","rgba","hsl","hsla","color"].includes(T))throw new Error(formatMuiErrorMessage(9,o));let S=o.substring(u+1,o.length-1),E;if(T==="color"){if(S=S.split(" "),E=S.shift(),S.length===4&&S[3].charAt(0)==="/"&&(S[3]=S[3].slice(1)),!["srgb","display-p3","a98-rgb","prophoto-rgb","rec-2020"].includes(E))throw new Error(formatMuiErrorMessage(10,E))}else S=S.split(",");return S=S.map(C=>parseFloat(C)),{type:T,values:S,colorSpace:E}}const colorChannel=o=>{const u=decomposeColor(o);return u.values.slice(0,3).map((T,S)=>u.type.includes("hsl")&&S!==0?`${T}%`:T).join(" ")},private_safeColorChannel=(o,u)=>{try{return colorChannel(o)}catch{return o}};function recomposeColor(o){const{type:u,colorSpace:T}=o;let{values:S}=o;return u.includes("rgb")?S=S.map((E,C)=>C<3?parseInt(E,10):E):u.includes("hsl")&&(S[1]=`${S[1]}%`,S[2]=`${S[2]}%`),u.includes("color")?S=`${T} ${S.join(" ")}`:S=`${S.join(", ")}`,`${u}(${S})`}function hslToRgb(o){o=decomposeColor(o);const{values:u}=o,T=u[0],S=u[1]/100,E=u[2]/100,C=S*Math.min(E,1-E),_=(I,L=(I+T/30)%12)=>E-C*Math.max(Math.min(L-3,9-L,1),-1);let P="rgb";const R=[Math.round(_(0)*255),Math.round(_(8)*255),Math.round(_(4)*255)];return o.type==="hsla"&&(P+="a",R.push(u[3])),recomposeColor({type:P,values:R})}function getLuminance(o){o=decomposeColor(o);let u=o.type==="hsl"||o.type==="hsla"?decomposeColor(hslToRgb(o)).values:o.values;return u=u.map(T=>(o.type!=="color"&&(T/=255),T<=.03928?T/12.92:((T+.055)/1.055)**2.4)),Number((.2126*u[0]+.7152*u[1]+.0722*u[2]).toFixed(3))}function getContrastRatio(o,u){const T=getLuminance(o),S=getLuminance(u);return(Math.max(T,S)+.05)/(Math.min(T,S)+.05)}function alpha$1(o,u){return o=decomposeColor(o),u=clampWrapper(u),(o.type==="rgb"||o.type==="hsl")&&(o.type+="a"),o.type==="color"?o.values[3]=`/${u}`:o.values[3]=u,recomposeColor(o)}function private_safeAlpha(o,u,T){try{return alpha$1(o,u)}catch{return o}}function darken(o,u){if(o=decomposeColor(o),u=clampWrapper(u),o.type.includes("hsl"))o.values[2]*=1-u;else if(o.type.includes("rgb")||o.type.includes("color"))for(let T=0;T<3;T+=1)o.values[T]*=1-u;return recomposeColor(o)}function private_safeDarken(o,u,T){try{return darken(o,u)}catch{return o}}function lighten(o,u){if(o=decomposeColor(o),u=clampWrapper(u),o.type.includes("hsl"))o.values[2]+=(100-o.values[2])*u;else if(o.type.includes("rgb"))for(let T=0;T<3;T+=1)o.values[T]+=(255-o.values[T])*u;else if(o.type.includes("color"))for(let T=0;T<3;T+=1)o.values[T]+=(1-o.values[T])*u;return recomposeColor(o)}function private_safeLighten(o,u,T){try{return lighten(o,u)}catch{return o}}function emphasize(o,u=.15){return getLuminance(o)>.5?darken(o,u):lighten(o,u)}function private_safeEmphasize(o,u,T){try{return emphasize(o,u)}catch{return o}}const ThemeContext=reactExports.createContext(null);function useTheme$1(){return reactExports.useContext(ThemeContext)}const hasSymbol=typeof Symbol=="function"&&Symbol.for,nested=hasSymbol?Symbol.for("mui.nested"):"__THEME_NESTED__";function mergeOuterLocalTheme(o,u){return typeof u=="function"?u(o):{...o,...u}}function ThemeProvider$2(o){const{children:u,theme:T}=o,S=useTheme$1(),E=reactExports.useMemo(()=>{const C=S===null?{...T}:mergeOuterLocalTheme(S,T);return C!=null&&(C[nested]=S!==null),C},[T,S]);return jsxRuntimeExports.jsx(ThemeContext.Provider,{value:E,children:u})}const RtlContext=reactExports.createContext();function RtlProvider({value:o,...u}){return jsxRuntimeExports.jsx(RtlContext.Provider,{value:o??!0,...u})}const useRtl=()=>reactExports.useContext(RtlContext)??!1,PropsContext=reactExports.createContext(void 0);function DefaultPropsProvider({value:o,children:u}){return jsxRuntimeExports.jsx(PropsContext.Provider,{value:o,children:u})}function getThemeProps(o){const{theme:u,name:T,props:S}=o;if(!u||!u.components||!u.components[T])return S;const E=u.components[T];return E.defaultProps?resolveProps(E.defaultProps,S,u.components.mergeClassNameAndStyle):!E.styleOverrides&&!E.variants?resolveProps(E,S,u.components.mergeClassNameAndStyle):S}function useDefaultProps$1({props:o,name:u}){const T=reactExports.useContext(PropsContext);return getThemeProps({props:o,name:u,theme:{components:T}})}let globalId=0;function useGlobalId(o){const[u,T]=reactExports.useState(o),S=o||u;return reactExports.useEffect(()=>{u==null&&(globalId+=1,T(`mui-${globalId}`))},[u]),S}const safeReact={...React},maybeReactUseId=safeReact.useId;function useId(o){if(maybeReactUseId!==void 0){const u=maybeReactUseId();return o??u}return useGlobalId(o)}function useLayerOrder(o){const u=useTheme$3(),T=useId()||"",{modularCssLayers:S}=o;let E="mui.global, mui.components, mui.theme, mui.custom, mui.sx";return!S||u!==null?E="":typeof S=="string"?E=S.replace(/mui(?!\.)/g,E):E=`@layer ${E};`,useEnhancedEffect(()=>{var P,R;const C=document.querySelector("head");if(!C)return;const _=C.firstChild;if(E){if(_&&((P=_.hasAttribute)!=null&&P.call(_,"data-mui-layer-order"))&&_.getAttribute("data-mui-layer-order")===T)return;const I=document.createElement("style");I.setAttribute("data-mui-layer-order",T),I.textContent=E,C.prepend(I)}else(R=C.querySelector(`style[data-mui-layer-order="${T}"]`))==null||R.remove()},[E,T]),E?jsxRuntimeExports.jsx(GlobalStyles$1,{styles:E}):null}const EMPTY_THEME={};function useThemeScoping(o,u,T,S=!1){return reactExports.useMemo(()=>{const E=o&&u[o]||u;if(typeof T=="function"){const C=T(E),_=o?{...u,[o]:C}:C;return S?()=>_:_}return o?{...u,[o]:T}:{...u,...T}},[o,u,T,S])}function ThemeProvider$1(o){const{children:u,theme:T,themeId:S}=o,E=useTheme$3(EMPTY_THEME),C=useTheme$1()||EMPTY_THEME,_=useThemeScoping(S,E,T),P=useThemeScoping(S,C,T,!0),R=(S?_[S]:_).direction==="rtl",I=useLayerOrder(_);return jsxRuntimeExports.jsx(ThemeProvider$2,{theme:P,children:jsxRuntimeExports.jsx(ThemeContext$1.Provider,{value:_,children:jsxRuntimeExports.jsx(RtlProvider,{value:R,children:jsxRuntimeExports.jsxs(DefaultPropsProvider,{value:S?_[S].components:_.components,children:[I,u]})})})})}const arg={theme:void 0};function unstable_memoTheme(o){let u,T;return function(E){let C=u;return(C===void 0||E.theme!==T)&&(arg.theme=E.theme,C=preprocessStyles(o(arg)),u=C,T=E.theme),C}}const DEFAULT_MODE_STORAGE_KEY="mode",DEFAULT_COLOR_SCHEME_STORAGE_KEY="color-scheme",DEFAULT_ATTRIBUTE="data-color-scheme";function InitColorSchemeScript(o){const{defaultMode:u="system",defaultLightColorScheme:T="light",defaultDar
45kColorScheme:S="dark",modeStorageKey:E=DEFAULT_MODE_STORAGE_KEY,colorSchemeStorageKey:C=DEFAULT_COLOR_SCHEME_STORAGE_KEY,attribute:_=DEFAULT_ATTRIBUTE,colorSchemeNode:P="document.documentElement",nonce:R}=o||{};let I="",L=_;if(_==="class"&&(L=".%s"),_==="data"&&(L="[data-%s]"),L.startsWith(".")){const M=L.substring(1);I+=`${P}.classList.remove('${M}'.replace('%s', light), '${M}'.replace('%s', dark));
46      ${P}.classList.add('${M}'.replace('%s', colorScheme));`}const j=L.match(/\[([^[\]]+)\]/);if(j){const[M,D]=j[1].split("=");D||(I+=`${P}.removeAttribute('${M}'.replace('%s', light));
47      ${P}.removeAttribute('${M}'.replace('%s', dark));`),I+=`
48      ${P}.setAttribute('${M}'.replace('%s', colorScheme), ${D?`${D}.replace('%s', colorScheme)`:'""'});`}else I+=`${P}.setAttribute('${L}', colorScheme);`;return jsxRuntimeExports.jsx("script",{suppressHydrationWarning:!0,nonce:typeof window>"u"?R:"",dangerouslySetInnerHTML:{__html:`(function() {
49try {
50  let colorScheme = '';
51  const mode = localStorage.getItem('${E}') || '${u}';
52  const dark = localStorage.getItem('${C}-dark') || '${S}';
53  const light = localStorage.getItem('${C}-light') || '${T}';
54  if (mode === 'system') {
55    // handle system mode
56    const mql = window.matchMedia('(prefers-color-scheme: dark)');
57    if (mql.matches) {
58      colorScheme = dark
59    } else {
60      colorScheme = light
61    }
62  }
63  if (mode === 'light') {
64    colorScheme = light;
65  }
66  if (mode === 'dark') {
67    colorScheme = dark;
68  }
69  if (colorScheme) {
70    ${I}
71  }
72} catch(e){}})();`}},"mui-color-scheme-init")}function noop$5(){}const localStorageManager=({key:o,storageWindow:u})=>(!u&&typeof window<"u"&&(u=window),{get(T){if(typeof window>"u")return;if(!u)return T;let S;try{S=u.localStorage.getItem(o)}catch{}return S||T},set:T=>{if(u)try{u.localStorage.setItem(o,T)}catch{}},subscribe:T=>{if(!u)return noop$5;const S=E=>{const C=E.newValue;E.key===o&&T(C)};return u.addEventListener("storage",S),()=>{u.removeEventListener("storage",S)}}});function noop$4(){}function getSystemMode(o){if(typeof window<"u"&&typeof window.matchMedia=="function"&&o==="system")return window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}function processState(o,u){if(o.mode==="light"||o.mode==="system"&&o.systemMode==="light")return u("light");if(o.mode==="dark"||o.mode==="system"&&o.systemMode==="dark")return u("dark")}function getColorScheme(o){return processState(o,u=>{if(u==="light")return o.lightColorScheme;if(u==="dark")return o.darkColorScheme})}function useCurrentColorScheme(o){const{defaultMode:u="light",defaultLightColorScheme:T,defaultDarkColorScheme:S,supportedColorSchemes:E=[],modeStorageKey:C=DEFAULT_MODE_STORAGE_KEY,colorSchemeStorageKey:_=DEFAULT_COLOR_SCHEME_STORAGE_KEY,storageWindow:P=typeof window>"u"?void 0:window,storageManager:R=localStorageManager,noSsr:I=!1}=o,L=E.join(","),j=E.length>1,M=reactExports.useMemo(()=>R==null?void 0:R({key:C,storageWindow:P}),[R,C,P]),D=reactExports.useMemo(()=>R==null?void 0:R({key:`${_}-light`,storageWindow:P}),[R,_,P]),F=reactExports.useMemo(()=>R==null?void 0:R({key:`${_}-dark`,storageWindow:P}),[R,_,P]),[N,G]=reactExports.useState(()=>{const Y=(M==null?void 0:M.get(u))||u,ee=(D==null?void 0:D.get(T))||T,oe=(F==null?void 0:F.get(S))||S;return{mode:Y,systemMode:getSystemMode(Y),lightColorScheme:ee,darkColorScheme:oe}}),[B,H]=reactExports.useState(I||!j);reactExports.useEffect(()=>{H(!0)},[]);const O=getColorScheme(N),V=reactExports.useCallback(Y=>{G(ee=>{if(Y===ee.mode)return ee;const oe=Y??u;return M==null||M.set(oe),{...ee,mode:oe,systemMode:getSystemMode(oe)}})},[M,u]),U=reactExports.useCallback(Y=>{Y?typeof Y=="string"?Y&&!L.includes(Y)?console.error(`\`${Y}\` does not exist in \`theme.colorSchemes\`.`):G(ee=>{const oe={...ee};return processState(ee,se=>{se==="light"&&(D==null||D.set(Y),oe.lightColorScheme=Y),se==="dark"&&(F==null||F.set(Y),oe.darkColorScheme=Y)}),oe}):G(ee=>{const oe={...ee},se=Y.light===null?T:Y.light,Q=Y.dark===null?S:Y.dark;return se&&(L.includes(se)?(oe.lightColorScheme=se,D==null||D.set(se)):console.error(`\`${se}\` does not exist in \`theme.colorSchemes\`.`)),Q&&(L.includes(Q)?(oe.darkColorScheme=Q,F==null||F.set(Q)):console.error(`\`${Q}\` does not exist in \`theme.colorSchemes\`.`)),oe}):G(ee=>(D==null||D.set(T),F==null||F.set(S),{...ee,lightColorScheme:T,darkColorScheme:S}))},[L,D,F,T,S]),W=reactExports.useCallback(Y=>{N.mode==="system"&&G(ee=>
72{const oe=Y!=null&&Y.matches?"dark":"light";return ee.systemMode===oe?ee:{...ee,systemMode:oe}})},[N.mode]),K=reactExports.useRef(W);return K.current=W,reactExports.useEffect(()=>{if(typeof window.matchMedia!="function"||!j)return;const Y=(...oe)=>K.current(...oe),ee=window.matchMedia("(prefers-color-scheme: dark)");return ee.addListener(Y),Y(ee),()=>{ee.removeListener(Y)}},[j]),reactExports.useEffect(()=>{if(j){const Y=(M==null?void 0:M.subscribe(se=>{(!se||["light","dark","system"].includes(se))&&V(se||u)}))||noop$4,ee=(D==null?void 0:D.subscribe(se=>{(!se||L.match(se))&&U({light:se})}))||noop$4,oe=(F==null?void 0:F.subscribe(se=>{(!se||L.match(se))&&U({dark:se})}))||noop$4;return()=>{Y(),ee(),oe()}}},[U,V,L,u,P,j,M,D,F]),{...N,mode:B?N.mode:void 0,systemMode:B?N.systemMode:void 0,colorScheme:B?O:void 0,setMode:V,setColorScheme:U}}const DISABLE_CSS_TRANSITION="*{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}";function createCssVarsProvider(o){const{themeId:u,theme:T={},modeStorageKey:S=DEFAULT_MODE_STORAGE_KEY,colorSchemeStorageKey:E=DEFAULT_COLOR_SCHEME_STORAGE_KEY,disableTransitionOnChange:C=!1,defaultColorScheme:_,resolveTheme:P}=o,R={allColorSchemes:[],colorScheme:void 0,darkColorScheme:void 0,lightColorScheme:void 0,mode:void 0,setColorScheme:()=>{},setMode:()=>{},systemMode:void 0},I=reactExports.createContext(void 0),L=()=>reactExports.useContext(I)||R,j={},M={};function D(B){var it,st,at,ot;const{children:H,theme:O,modeStorageKey:V=S,colorSchemeStorageKey:U=E,disableTransitionOnChange:W=C,storageManager:K,storageWindow:Y=typeof window>"u"?void 0:window,documentNode:ee=typeof document>"u"?void 0:document,colorSchemeNode:oe=typeof document>"u"?void 0:document.documentElement,disableNestedContext:se=!1,disableStyleSheetGeneration:Q=!1,defaultMode:ie="system",forceThemeRerender:ae=!1,noSsr:re}=B,J=reactExports.useRef(!1),te=useTheme$1(),Z=reactExports.useContext(I),X=!!Z&&!se,de=reactExports.useMemo(()=>O||(typeof T=="function"?T():T),[O]),he=de[u],ne=he||de,{colorSchemes:ue=j,components:ce=M,cssVarPrefix:fe}=ne,ve=Object.keys(ue).filter(je=>!!ue[je]).join(","),Te=reactExports.useMemo(()=>ve.split(","),[ve]),Se=typeof _=="string"?_:_.light,ke=typeof _=="string"?_:_.dark,we=ue[Se]&&ue[ke]?ie:((st=(it=ue[ne.defaultColorScheme])==null?void 0:it.palette)==null?void 0:st.mode)||((at=ne.palette)==null?void 0:at.mode),{mode:Le,setMode:pe,systemMode:Me,lightColorScheme:Pe,darkColorScheme:Ue,colorScheme:qe,setColorScheme:Ie}=useCurrentColorScheme({supportedColorSchemes:Te,defaultLightColorScheme:Se,defaultDarkColorScheme:ke,modeStorageKey:V,colorSchemeStorageKey:U,defaultMode:we,storageManager:K,storageWindow:Y,noSsr:re});let Xe=Le,et=qe;X&&(Xe=Z.mode,et=Z.colorScheme);let tt=et||ne.defaultColorScheme;ne.vars&&!ae&&(tt=ne.defaultColorScheme);const Ye=reactExports.useMemo(()=>{var Qe;const je=((Qe=ne.generateThemeVars)==null?void 0:Qe.call(ne))||ne.vars,Be={...ne,components:ce,colorSchemes:ue,cssVarPrefix:fe,vars:je};if(typeof Be.generateSpacing=="function"&&(Be.spacing=Be.generateSpacing()),tt){const Ge=ue[tt];Ge&&typeof Ge=="object"&&Object.keys(Ge).forEach(We=>{Ge[We]&&typeof Ge[We]=="object"?Be[We]={...Be[We],...Ge[We]}:Be[We]=Ge[We]})}return P?P(Be):Be},[ne,tt,ce,ue,fe]),ze=ne.colorSchemeSelector;useEnhancedEffect(()=>{if(et&&oe&&ze&&ze!=="media"){const je=ze;let Be=ze;if(je==="class"&&(Be=".%s"),je==="data"&&(Be="[data-%s]"),je!=null&&je.startsWith("data-")&&!je.includes("%s")&&(Be=`[${je}="%s"]`),Be.startsWith("."))oe.classList.remove(...Te.map(Qe=>Be.substring(1).replace("%s",Qe))),oe.classList.add(Be.substring(1).replace("%s",et));else{const Qe=Be.replace("%s",et).match(/\[([^\]]+)\]/);if(Qe){const[Ge,We]=Qe[1].split("=");We||Te.forEach(mt=>{oe.removeAttribute(Ge.replace(et,mt))}),oe.setAttribute(Ge,We?We.replace(/"|'/g,""):"")}else oe.setAttribute(Be,et)}}},[et,ze,oe,Te]),reactExports.useEffect(()=>{let je;if(W&&J.current&&ee){const Be=ee.createElement("style");Be.appendChild(ee.createTextNode(DISABLE_CSS_TRANSITION)),ee.head.appendChild(Be),window.getComputedStyle(ee.body),je=setTimeout(()=>{ee.head.removeChild(Be)},1)}return()=>{clearTimeout(je)}},[et,W,ee]),reactExports.useEffect(()=>(J.current=!0,()=>{J.current=!1}),[]);const Ze=reactExports.useMemo(()=>({allColorSchemes:Te,colorScheme:et,darkColorScheme:Ue,lightColorScheme:Pe,mode:Xe,setColorScheme:Ie,setMode:pe,systemMode:Me}),[Te,et,Ue,Pe,Xe,Ie,pe,Me,Ye.colorSchemeSelector]);let He=!0;(Q||ne.cssVariables===!1||X&&(te==null?void 0:te.cssVarPrefix)===fe)&&(He=!1);const rt=jsxRuntimeExports.jsxs(reactExports.Fragment,{children:[jsxRuntimeExports.jsx(ThemeProvider$1,{themeId:he?u:void 0,theme:Ye,children:H}),He&&jsxRuntimeExports.jsx(GlobalStyles$2,{styles:((ot=Ye.generateStyleSheets)==null?void 0:ot.call(Ye))||[]})]});return X?rt:jsxRuntimeExports.jsx(I.Provider,{value:Ze,children:rt})}const F=typeof _=="string"?_:_.light,N=typeof _=="string"?_:_.dark;
72return{CssVarsProvider:D,useColorScheme:L,getInitColorSchemeScript:B=>InitColorSchemeScript({colorSchemeStorageKey:E,defaultLightColorScheme:F,defaultDarkColorScheme:N,modeStorageKey:S,...B})}}function createGetCssVar$1(o=""){function u(...S){if(!S.length)return"";const E=S[0];return typeof E=="string"&&!E.match(/(#|\(|\)|(-?(\d*\.)?\d+)(px|em|%|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc))|^(-?(\d*\.)?\d+)$|(\d+ \d+ \d+)/)?`, var(--${o?`${o}-`:""}${E}${u(...S.slice(1))})`:`, ${E}`}return(S,...E)=>`var(--${o?`${o}-`:""}${S}${u(...E)})`}const assignNestedKeys=(o,u,T,S=[])=>{let E=o;u.forEach((C,_)=>{_===u.length-1?Array.isArray(E)?E[Number(C)]=T:E&&typeof E=="object"&&(E[C]=T):E&&typeof E=="object"&&(E[C]||(E[C]=S.includes(C)?[]:{}),E=E[C])})},walkObjectDeep=(o,u,T)=>{function S(E,C=[],_=[]){Object.entries(E).forEach(([P,R])=>{(!T||T&&!T([...C,P]))&&R!=null&&(typeof R=="object"&&Object.keys(R).length>0?S(R,[...C,P],Array.isArray(R)?[..._,P]:_):u([...C,P],R,_))})}S(o)},getCssValue=(o,u)=>typeof u=="number"?["lineHeight","fontWeight","opacity","zIndex"].some(S=>o.includes(S))||o[o.length-1].toLowerCase().includes("opacity")?u:`${u}px`:u;function cssVarsParser(o,u){const{prefix:T,shouldSkipGeneratingVar:S}=u||{},E={},C={},_={};return walkObjectDeep(o,(P,R,I)=>{if((typeof R=="string"||typeof R=="number")&&(!S||!S(P,R))){const L=`--${T?`${T}-`:""}${P.join("-")}`,j=getCssValue(P,R);Object.assign(E,{[L]:j}),assignNestedKeys(C,P,`var(${L})`,I),assignNestedKeys(_,P,`var(${L}, ${j})`,I)}},P=>P[0]==="vars"),{css:E,vars:C,varsWithDefaults:_}}function prepareCssVars(o,u={}){const{getSelector:T=B,disableCssColorScheme:S,colorSchemeSelector:E,enableContrastVars:C}=u,{colorSchemes:_={},components:P,defaultColorScheme:R="light",...I}=o,{vars:L,css:j,varsWithDefaults:M}=cssVarsParser(I,u);let D=M;const F={},{[R]:N,...G}=_;if(Object.entries(G||{}).forEach(([V,U])=>{const{vars:W,css:K,varsWithDefaults:Y}=cssVarsParser(U,u);D=deepmerge(D,Y),F[V]={css:K,vars:W}}),N){const{css:V,vars:U,varsWithDefaults:W}=cssVarsParser(N,u);D=deepmerge(D,W),F[R]={css:V,vars:U}}function B(V,U){var K,Y;let W=E;if(E==="class"&&(W=".%s"),E==="data"&&(W="[data-%s]"),E!=null&&E.startsWith("data-")&&!E.includes("%s")&&(W=`[${E}="%s"]`),V){if(W==="media")return o.defaultColorScheme===V?":root":{[`@media (prefers-color-scheme: ${((Y=(K=_[V])==null?void 0:K.palette)==null?void 0:Y.mode)||V})`]:{":root":U}};if(W)return o.defaultColorScheme===V?`:root, ${W.replace("%s",String(V))}`:W.replace("%s",String(V))}return":root"}return{vars:D,generateThemeVars:()=>{let V={...L};return Object.entries(F).forEach(([,{vars:U}])=>{V=deepmerge(V,U)}),V},generateStyleSheets:()=>{var ee,oe;const V=[],U=o.defaultColorScheme||"light";function W(se,Q){Object.keys(Q).length&&V.push(typeof se=="string"?{[se]:{...Q}}:se)}W(T(void 0,{...j}),j);const{[U]:K,...Y}=F;if(K){const{css:se}=K,Q=(oe=(ee=_[U])==null?void 0:ee.palette)==null?void 0:oe.mode,ie=!S&&Q?{colorScheme:Q,...se}:{...se};W(T(U,{...ie}),ie)}return Object.entries(Y).forEach(([se,{css:Q}])=>{var re,J;const ie=(J=(re=_[se])==null?void 0:re.palette)==null?void 0:J.mode,ae=!S&&ie?{colorScheme:ie,...Q}:{...Q};W(T(se,{...ae}),ae)}),C&&V.push({":root":{"--__l-threshold":"0.7","--__l":"clamp(0, (l / var(--__l-threshold) - 1) * -infinity, 1)","--__a":"clamp(0.87, (l / var(--__l-threshold) - 1) * -infinity, 1)"}}),V}}}function createGetColorSchemeSelector(o){return function(T){return o==="media"?`@media (prefers-color-scheme: ${T})`:o?o.startsWith("data-")&&!o.includes("%s")?`[${o}="${T}"] &`:o==="class"?`.${T} &`:o==="data"?`[data-${T}] &`:`${o.replace("%s",T)} &`:"&"}}function composeClasses(o,u,T=void 0){const S={};for(const E in o){const C=o[E];let _="",P=!0;for(let R=0;R<C.length;R+=1){const I=C[R];I&&(_+=(P===!0?"":" ")+u(I),P=!1,T&&T[I]&&(_+=" "+T[I]))}S[E]=_}return S}function isMuiElement(o,u){var T,S,E;return reactExports.isValidElement(o)&&u.indexOf(o.type.muiName??((E=(S=(T=o.type)==null?void 0:T._payload)==null?void 0:S.value)==null?void 0:E.muiName))!==-1}const common$5={black:"#000",white:"#fff"},grey={50:"#fafafa",100:"#f5f5f5",200:"#eeeeee",300:"#e0e0e0",400:"#bdbdbd",500:"#9e9e9e",600:"#757575",700:"#616161",800:"#424242",900:"#212121",A100:"#f5f5f5",A200:"#eeeeee",A400:"#bdbdbd",A700:"#616161"},purple={50:"#f3e5f5",200:"#ce93d8",300:"#ba68c8",400:"#ab47bc",500:"#9c27b0",700:"#7b1fa2"},red={300:"#e57373",400:"#ef5350",500:"#f44336",700:"#d32f2f",800:"#c62828"},orange={300:"#ffb74d",400:"#ffa726",500:"#ff9800",700:"#f57c00",900:"#e65100"},blue={50:"#e3f2fd",200:"#90caf9",400:"#42a5f5",700:"#1976d2",800:"#1565c0"},lightBlue={300:"#4fc3f7",400:"#29b6f6",500:"#03a9f4",700:"#0288d1",900:"#01579b"},green={300:"#81c784",400:"#66bb6a",500:"#4caf50",700:"#388e3c",800:"#2e7d32",900:"#1b5e20"};function getLight(){return{text:{primary:"rgba(0, 0, 0, 0.87)",secondary:"rgba(0, 0, 0, 0.6)",disabled:"rgba(0, 0, 0, 0.38)"},divider:"rgba(0, 0, 0, 0.12)",background:{paper:common$5.white,default:common$5.white},action:{active:"rgba(0, 0, 0, 0.54)",hover:"rgba(0, 0, 0, 0.04)",hoverOpacity:.04,selected:"rgba(0, 0, 0, 0.08)",selectedOpacity:.08,disabled:"rgba(0, 0, 0, 0.26)",disabledBackgroun
72d:"rgba(0, 0, 0, 0.12)",disabledOpacity:.38,focus:"rgba(0, 0, 0, 0.12)",focusOpacity:.12,activatedOpacity:.12}}}const light=getLight();function getDark(){return{text:{primary:common$5.white,secondary:"rgba(255, 255, 255, 0.7)",disabled:"rgba(255, 255, 255, 0.5)",icon:"rgba(255, 255, 255, 0.5)"},divider:"rgba(255, 255, 255, 0.12)",background:{paper:"#121212",default:"#121212"},action:{active:common$5.white,hover:"rgba(255, 255, 255, 0.08)",hoverOpacity:.08,selected:"rgba(255, 255, 255, 0.16)",selectedOpacity:.16,disabled:"rgba(255, 255, 255, 0.3)",disabledBackground:"rgba(255, 255, 255, 0.12)",disabledOpacity:.38,focus:"rgba(255, 255, 255, 0.12)",focusOpacity:.12,activatedOpacity:.24}}}const dark=getDark();function addLightOrDark(o,u,T,S){const E=S.light||S,C=S.dark||S*1.5;o[u]||(o.hasOwnProperty(T)?o[u]=o[T]:u==="light"?o.light=lighten(o.main,E):u==="dark"&&(o.dark=darken(o.main,C)))}function mixLightOrDark(o,u,T,S,E){const C=E.light||E,_=E.dark||E*1.5;u[T]||(u.hasOwnProperty(S)?u[T]=u[S]:T==="light"?u.light=`color-mix(in ${o}, ${u.main}, #fff ${(C*100).toFixed(0)}%)`:T==="dark"&&(u.dark=`color-mix(in ${o}, ${u.main}, #000 ${(_*100).toFixed(0)}%)`))}function getDefaultPrimary(o="light"){return o==="dark"?{main:blue[200],light:blue[50],dark:blue[400]}:{main:blue[700],light:blue[400],dark:blue[800]}}function getDefaultSecondary(o="light"){return o==="dark"?{main:purple[200],light:purple[50],dark:purple[400]}:{main:purple[500],light:purple[300],dark:purple[700]}}function getDefaultError(o="light"){return o==="dark"?{main:red[500],light:red[300],dark:red[700]}:{main:red[700],light:red[400],dark:red[800]}}function getDefaultInfo(o="light"){return o==="dark"?{main:lightBlue[400],light:lightBlue[300],dark:lightBlue[700]}:{main:lightBlue[700],light:lightBlue[500],dark:lightBlue[900]}}function getDefaultSuccess(o="light"){return o==="dark"?{main:green[400],light:green[300],dark:green[700]}:{main:green[800],light:green[500],dark:green[900]}}function getDefaultWarning(o="light"){return o==="dark"?{main:orange[400],light:orange[300],dark:orange[700]}:{main:"#ed6c02",light:orange[500],dark:orange[900]}}function contrastColor(o){return`oklch(from ${o} var(--__l) 0 h / var(--__a))`}function createPalette(o){const{mode:u="light",contrastThreshold:T=3,tonalOffset:S=.2,colorSpace:E,...C}=o,_=o.primary||getDefaultPrimary(u),P=o.secondary||getDefaultSecondary(u),R=o.error||getDefaultError(u),I=o.info||getDefaultInfo(u),L=o.success||getDefaultSuccess(u),j=o.warning||getDefaultWarning(u);function M(G){return E?contrastColor(G):getContrastRatio(G,dark.text.primary)>=T?dark.text.primary:light.text.primary}const D=({color:G,name:B,mainShade:H=500,lightShade:O=300,darkShade:V=700})=>{if(G={...G},!G.main&&G[H]&&(G.main=G[H]),!G.hasOwnProperty("main"))throw new Error(formatMuiErrorMessage(11,B?` (${B})`:"",H));if(typeof G.main!="string")throw new Error(formatMuiErrorMessage(12,B?` (${B})`:"",JSON.stringify(G.main)));return E?(mixLightOrDark(E,G,"light",O,S),mixLightOrDark(E,G,"dark",V,S)):(addLightOrDark(G,"light",O,S),addLightOrDark(G,"dark",V,S)),G.contrastText||(G.contrastText=M(G.main)),G};let F;return u==="light"?F=getLight():u==="dark"&&(F=getDark()),deepmerge({common:{...common$5},mode:u,primary:D({color:_,name:"primary"}),secondary:D({color:P,name:"secondary",mainShade:"A400",lightShade:"A200",darkShade:"A700"}),error:D({color:R,name:"error"}),warning:D({color:j,name:"warning"}),info:D({color:I,name:"info"}),success:D({color:L,name:"success"}),grey,contrastThreshold:T,getContrastText:M,augmentColor:D,tonalOffset:S,...F},C)}function prepareTypographyVars(o){const u={};return Object.entries(o).forEach(S=>{const[E,C]=S;typeof C=="object"&&(u[E]=`${C.fontStyle?`${C.fontStyle} `:""}${C.fontVariant?`${C.fontVariant} `:""}${C.fontWeight?`${C.fontWeight} `:""}${C.fontStretch?`${C.fontStretch} `:""}${C.fontSize||""}${C.lineHeight?`/${C.lineHeight} `:""}${C.fontFamily||""}`)}),u}function createMixins(o,u){return{toolbar:{minHeight:56,[o.up("xs")]:{"@media (orientation: landscape)":{minHeight:48}},[o.up("sm")]:{minHeight:64}},...u}}function round(o){return Math.round(o*1e5)/1e5}const caseAllCaps={textTransform:"uppercase"},defaultFontFamily='"Roboto", "Helvetica", "Arial", sans-serif';function createTypography(o,u){const{fontFamily:T=defaultFontFamily,fontSize:S=14,fontWeightLight:E=300,fontWeightRegular:C=400,fontWeightMedium:_=500,fontWeightBold:P=700,htmlFontSize:R=16,allVariants:I,pxToRem:L,...j}=typeof u=="function"?u(o):u,M=S/14,D=L||(G=>`${G/R*M}rem`),F=(G,B,H,O,V)=>({fontFamily:T,fontWeight:G,fontSize:D(B),lineHeight:H,...T===defaultFontFamily?{letterSpacing:`${round(O/B)}em`}:{},...V,...I}),N={h1:F(E,96,1.167,-1.5),h2:F(E,60,1.2,-.5),h3:F(C,48,1.167,0),h4:F(C,34,1.235,.25),h5:F(C,24,1.334,0),h6:F(_,20,1.6,.15),subtitle1:F(C,16,1.75,.15),subtitle2:F(_,14,1.57,.1),body1:F(C,16,1.5,.15),body2:F(C,14,1.43,.15),button:F(_,14,1.75,.4,caseAllCaps),caption:F(C,12,1.66,.4),overline:F(C,12,2.66,1,caseAllCaps),inherit:{fontFamily:"inherit",fontWeight:"inherit",fontSize:"inherit",lineHeight:"inherit",letterSpacing:"inherit"}};return deepmerge({htmlFontSize:R,pxToRem:D,fontFamily:T,fontSize:S,fontWeightLight:E,fontWeightRegular:C,fontWeightMedium:_,fontWeightBold:P,...N},j,{clone:!1})}const shadowKeyUmbraOpacity=.2,shadowKeyPenumbraOpacity=.14,shadowAmbientShadowOpacity=.12;function createShadow(...o){return[`${o[0]}px ${o[1]}px ${o[2]}px ${o[3]}px rgba(0,0,0,${shadowKeyUmbraOpacity})`,`${o[4]}
72px ${o[5]}px ${o[6]}px ${o[7]}px rgba(0,0,0,${shadowKeyPenumbraOpacity})`,`${o[8]}px ${o[9]}px ${o[10]}px ${o[11]}px rgba(0,0,0,${shadowAmbientShadowOpacity})`].join(",")}const shadows=["none",createShadow(0,2,1,-1,0,1,1,0,0,1,3,0),createShadow(0,3,1,-2,0,2,2,0,0,1,5,0),createShadow(0,3,3,-2,0,3,4,0,0,1,8,0),createShadow(0,2,4,-1,0,4,5,0,0,1,10,0),createShadow(0,3,5,-1,0,5,8,0,0,1,14,0),createShadow(0,3,5,-1,0,6,10,0,0,1,18,0),createShadow(0,4,5,-2,0,7,10,1,0,2,16,1),createShadow(0,5,5,-3,0,8,10,1,0,3,14,2),createShadow(0,5,6,-3,0,9,12,1,0,3,16,2),createShadow(0,6,6,-3,0,10,14,1,0,4,18,3),createShadow(0,6,7,-4,0,11,15,1,0,4,20,3),createShadow(0,7,8,-4,0,12,17,2,0,5,22,4),createShadow(0,7,8,-4,0,13,19,2,0,5,24,4),createShadow(0,7,9,-4,0,14,21,2,0,5,26,4),createShadow(0,8,9,-5,0,15,22,2,0,6,28,5),createShadow(0,8,10,-5,0,16,24,2,0,6,30,5),createShadow(0,8,11,-5,0,17,26,2,0,6,32,5),createShadow(0,9,11,-5,0,18,28,2,0,7,34,6),createShadow(0,9,12,-6,0,19,29,2,0,7,36,6),createShadow(0,10,13,-6,0,20,31,3,0,8,38,7),createShadow(0,10,13,-6,0,21,33,3,0,8,40,7),createShadow(0,10,14,-6,0,22,35,3,0,8,42,7),createShadow(0,11,14,-7,0,23,36,3,0,9,44,8),createShadow(0,11,15,-7,0,24,38,3,0,9,46,8)],easing={easeInOut:"cubic-bezier(0.4, 0, 0.2, 1)",easeOut:"cubic-bezier(0.0, 0, 0.2, 1)",easeIn:"cubic-bezier(0.4, 0, 1, 1)",sharp:"cubic-bezier(0.4, 0, 0.6, 1)"},duration={shortest:150,shorter:200,short:250,standard:300,complex:375,enteringScreen:225,leavingScreen:195};function formatMs(o){return`${Math.round(o)}ms`}function getAutoHeightDuration(o){if(!o)return 0;const u=o/36;return Math.min(Math.round((4+15*u**.25+u/5)*10),3e3)}function createTransitions(o){const u={...easing,...o.easing},T={...duration,...o.duration};return{getAutoHeightDuration,create:(E=["all"],C={})=>{const{duration:_=T.standard,easing:P=u.easeInOut,delay:R=0,...I}=C;return(Array.isArray(E)?E:[E]).map(L=>`${L} ${typeof _=="string"?_:formatMs(_)} ${P} ${typeof R=="string"?R:formatMs(R)}`).join(",")},...o,easing:u,duration:T}}const zIndex={mobileStepper:1e3,fab:1050,speedDial:1050,appBar:1100,drawer:1200,modal:1300,snackbar:1400,tooltip:1500};function isSerializable(o){return isPlainObject(o)||typeof o>"u"||typeof o=="string"||typeof o=="boolean"||typeof o=="number"||Array.isArray(o)}function stringifyTheme(o={}){const u={...o};function T(S){const E=Object.entries(S);for(let C=0;C<E.length;C++){const[_,P]=E[C];!isSerializable(P)||_.startsWith("unstable_")?delete S[_]:isPlainObject(P)&&(S[_]={...P},T(S[_]))}}return T(u),`import { unstable_createBreakpoints as createBreakpoints, createTransitions } from '@mui/material/styles';
73
74const theme = ${JSON.stringify(u,null,2)};
75
76theme.breakpoints = createBreakpoints(theme.breakpoints || {});
77theme.transitions = createTransitions(theme.transitions || {});
78
79export default theme;`}function coefficientToPercentage(o){return typeof o=="number"?`${(o*100).toFixed(0)}%`:`calc((${o}) * 100%)`}const parseAddition=o=>{if(!Number.isNaN(+o))return+o;const u=o.match(/\d*\.?\d+/g);if(!u)return 0;let T=0;for(let S=0;S<u.length;S+=1)T+=+u[S];return T};function attachColorManipulators(o){Object.assign(o,{alpha(u,T){const S=this||o;return S.colorSpace?`oklch(from ${u} l c h / ${typeof T=="string"?`calc(${T})`:T})`:S.vars?`rgba(${u.replace(/var\(--([^,\s)]+)(?:,[^)]+)?\)+/g,"var(--$1Channel)")} / ${typeof T=="string"?`calc(${T})`:T})`:alpha$1(u,parseAddition(T))},lighten(u,T){const S=this||o;return S.colorSpace?`color-mix(in ${S.colorSpace}, ${u}, #fff ${coefficientToPercentage(T)})`:lighten(u,T)},darken(u,T){const S=this||o;return S.colorSpace?`color-mix(in ${S.colorSpace}, ${u}, #000 ${coefficientToPercentage(T)})`:darken(u,T)}})}function createThemeNoVars(o={},...u){const{breakpoints:T,mixins:S={},spacing:E,palette:C={},transitions:_={},typography:P={},shape:R,colorSpace:I,...L}=o;if(o.vars&&o.generateThemeVars===void 0)throw new Error(formatMuiErrorMessage(20));const j=createPalette({...C,colorSpace:I}),M=createTheme$1(o);let D=deepmerge(M,{mixins:createMixins(M.breakpoints,S),palette:j,shadows:shadows.slice(),typography:createTypography(j,P),transitions:createTransitions(_),zIndex:{...zIndex}});return D=deepmerge(D,L),D=u.reduce((F,N)=>deepmerge(F,N),D),D.unstable_sxConfig={...defaultSxConfig,...L==null?void 0:L.unstable_sxConfig},D.unstable_sx=function(N){return styleFunctionSx({sx:N,theme:this})},D.toRuntimeSource=stringifyTheme,attachColorManipulators(D),D}function getOverlayAlpha(o){let u;return o<1?u=5.11916*o**2:u=4.5*Math.log(o+1)+2,Math.round(u*10)/1e3}
79const defaultDarkOverlays=[...Array(25)].map((o,u)=>{if(u===0)return"none";const T=getOverlayAlpha(u);return`linear-gradient(rgba(255 255 255 / ${T}), rgba(255 255 255 / ${T}))`});function getOpacity(o){return{inputPlaceholder:o==="dark"?.5:.42,inputUnderline:o==="dark"?.7:.42,switchTrackDisabled:o==="dark"?.2:.12,switchTrack:o==="dark"?.3:.38}}function getOverlays(o){return o==="dark"?defaultDarkOverlays:[]}function createColorScheme(o){const{palette:u={mode:"light"},opacity:T,overlays:S,colorSpace:E,...C}=o,_=createPalette({...u,colorSpace:E});return{palette:_,opacity:{...getOpacity(_.mode),...T},overlays:S||getOverlays(_.mode),...C}}function shouldSkipGeneratingVar(o){var u;return!!o[0].match(/(cssVarPrefix|colorSchemeSelector|modularCssLayers|rootSelector|typography|mixins|breakpoints|direction|transitions)/)||!!o[0].match(/sxConfig$/)||o[0]==="palette"&&!!((u=o[1])!=null&&u.match(/(mode|contrastThreshold|tonalOffset)/))}const excludeVariablesFromRoot=o=>[...[...Array(25)].map((u,T)=>`--${o?`${o}-`:""}overlays-${T}`),`--${o?`${o}-`:""}palette-AppBar-darkBg`,`--${o?`${o}-`:""}palette-AppBar-darkColor`],defaultGetSelector=o=>(u,T)=>{const S=o.rootSelector||":root",E=o.colorSchemeSelector;let C=E;if(E==="class"&&(C=".%s"),E==="data"&&(C="[data-%s]"),E!=null&&E.startsWith("data-")&&!E.includes("%s")&&(C=`[${E}="%s"]`),o.defaultColorScheme===u){if(u==="dark"){const _={};return excludeVariablesFromRoot(o.cssVarPrefix).forEach(P=>{_[P]=T[P],delete T[P]}),C==="media"?{[S]:T,"@media (prefers-color-scheme: dark)":{[S]:_}}:C?{[C.replace("%s",u)]:_,[`${S}, ${C.replace("%s",u)}`]:T}:{[S]:{...T,..._}}}if(C&&C!=="media")return`${S}, ${C.replace("%s",String(u))}`}else if(u){if(C==="media")return{[`@media (prefers-color-scheme: ${String(u)})`]:{[S]:T}};if(C)return C.replace("%s",String(u))}return S};function assignNode(o,u){u.forEach(T=>{o[T]||(o[T]={})})}function setColor(o,u,T){!o[u]&&T&&(o[u]=T)}function toRgb(o){return typeof o!="string"||!o.startsWith("hsl")?o:hslToRgb(o)}function setColorChannel(o,u){`${u}Channel`in o||(o[`${u}Channel`]=private_safeColorChannel(toRgb(o[u])))}function getSpacingVal(o){return typeof o=="number"?`${o}px`:typeof o=="string"||typeof o=="function"||Array.isArray(o)?o:"8px"}const silent=o=>{try{return o()}catch{}},createGetCssVar=(o="mui")=>createGetCssVar$1(o);function attachColorScheme$1(o,u,T,S,E){if(!T)return;T=T===!0?{}:T;const C=E==="dark"?"dark":"light";if(!S){u[E]=createColorScheme({...T,palette:{mode:C,...T==null?void 0:T.palette},colorSpace:o});return}const{palette:_,...P}=createThemeNoVars({...S,palette:{mode:C,...T==null?void 0:T.palette},colorSpace:o});return u[E]={...T,palette:_,opacity:{...getOpacity(C),...T==null?void 0:T.opacity},overlays:(T==null?void 0:T.overlays)||getOverlays(C)},P}function createThemeWithVars(o={},...u){const{colorSchemes:T={light:!0},defaultColorScheme:S,disableCssColorScheme:E=!1,cssVarPrefix:C="mui",nativeColor:_=!1,shouldSkipGeneratingVar:P=shouldSkipGeneratingVar,colorSchemeSelector:R=T.light&&T.dark?"media":void 0,rootSelector:I=":root",...L}=o,j=Object.keys(T)[0],M=S||(T.light&&j!=="light"?"light":j),D=createGetCssVar(C),{[M]:F,light:N,dark:G,...B}=T,H={...B};let O=F;if((M==="dark"&&!("dark"in T)||M==="light"&&!("light"in T))&&(O=!0),!O)throw new Error(formatMuiErrorMessage(21,M));let V;_&&(V="oklch");const U=attachColorScheme$1(V,H,O,L,M);N&&!H.light&&attachColorScheme$1(V,H,N,void 0,"light"),G&&!H.dark&&attachColorScheme$1(V,H,G,void 0,"dark");let W={defaultColorScheme:M,...U,cssVarPrefix:C,colorSchemeSelector:R,rootSelector:I,getCssVar:D,colorSchemes:H,font:{...prepareTypographyVars(U.typography),...U.font},spacing:getSpacingVal(L.spacing)};Object.keys(W.colorSchemes).forEach(se=>{const Q=W.colorSchemes[se].palette,ie=re=>{const J=re.split("-"),te=J[1],Z=J[2];return D(re,Q[te][Z])};Q.mode==="light"&&(setColor(Q.common,"background","#fff"),setColor(Q.common,"onBackground","#000")),Q.mode==="dark"&&(setColor(Q.common,"background","#000"),setColor(Q.common,"onBackground","#fff"));function ae(re,J,te){if(V){let Z;return re===private_safeAlpha&&(Z=`transparent ${((1-te)*100).toFixed(0)}%`),re===private_safeDarken&&(Z=`#000 ${(te*100).toFixed(0)}%`),re===private_safeLighten&&(Z=`#fff ${(te*100).toFixed(0)}%`),`color-mix(in ${V}, ${J}, ${Z})`}return re(J,te)}if(assignNode(Q,["Alert","AppBar","Avatar","Button","Chip","FilledInput","LinearProgress","Skeleton","Slider","SnackbarContent","SpeedDialAction","StepConnector","StepContent","Switch","TableCell","Tooltip"]),Q.mode==="light"){setColor(Q.Alert,"errorColor",ae(private_safeDarken,Q.error.light,.6)),setColor(Q.Alert,"infoColor",ae(private_safeDarken,Q.info.light,.6)),setColor(Q.Alert,"successColor",ae(private_safeDarken,Q.success.light,.6)),setColor(Q.Alert,"warningColor",ae(private_safeDarken,Q.warning.light,.6)),setColor(Q.Alert,"errorFilledBg",ie("palette-error-main")),setColor(Q.Alert,"infoFilledBg",ie("palette-info-main")),setColor(Q.Alert,"successFilledBg",ie("palette-success-main")),setColor(Q.Alert,"warningFilledBg",ie("palette-warning-main")),setColor(Q.Alert,"errorFilledColor",silent(()=>Q.getContrastText(Q.error.main))),setColor(Q.Alert,"infoFilledColor",silent(()=>Q.getContrastText(Q.info.main))),setColor(Q.Alert,"successFilledColor",silent(()=>Q.getContrastText(Q.success.main))),setColor(Q.Alert,"warningFilledColor",silent(()=>Q.getContrastText(Q.warning.main))),setColor(Q.Alert,"errorStandardBg",ae(private_safeLighten,Q.error.light,.9)),setColor(Q.Alert,"infoStandardBg",ae(private_safeLighten,Q.info.light,.9)),setColor(Q.Alert,"successStandardBg",ae(private_safeLighten,Q.success.light,.9)),setColor(Q.Alert,"warningStandardBg",ae(private_safeLighten,Q.warning.light,.9)),setColor(Q.Alert,"errorIconColor",ie("palette-error-main")),setColor(Q.Alert,"infoIconColor",ie("palette-info-main")),setColor(Q.Alert,"successIconColor",ie("palette-success-main")),setColor(Q.Alert,"warningIconColor",ie("palette-warning-main")),setColor(Q.AppBar,"defaultBg",ie("palette-grey-100")),setColor(Q.Avatar,"defaultBg",ie("palette-grey-400")),setColor(Q.Button,"inheritContainedBg",ie("palette-grey-300")),setColor(Q.Button,"inheritContainedHoverBg",ie("palette-grey-A100")),setColor(Q.Chip,"defaultBorder",ie("palette-grey-400")),setColor(Q.Chip,"defaultAvatarColor",ie("palette-grey-700")),setColor(Q.Chip,"defaultIconColor",ie("palette-grey-700")),setColor(Q.FilledInput,"bg","rgba(0, 0, 0, 0.06)"),setColor(Q.FilledInput,"hoverBg","rgba(0, 0, 0, 0.09)"),setColor(Q.FilledInput,"disabledBg","rgba(0, 0, 0, 0.12)"),setColor(Q.LinearProgress,"primaryBg",ae(private_safeLighten,Q.primary.main,.62)),setColor(Q.LinearProgress,"secondaryBg",ae(private_safeLighten,Q.secondary.main,.62)),setColor(Q.LinearProgress,"errorBg",ae(private_safeLighten,Q.error.main,.62)),setColor(Q.LinearProgress,"infoBg",ae(private_safeLighten,Q.info.main,.62)),setColor(Q.LinearProgress,"successBg",ae(private_safeLighten,Q.success.main,.62)),setColor(Q.LinearProgress,"warningBg",ae(private_safeLighten,Q.warning.main,.62)),setColor(Q.Skeleton,"bg",V?ae(private_safeAlpha,Q.text.primary,.11):`rgba(${ie("palette-text-primaryChannel")} / 0.11)`),setColor(Q.Slider,"primaryTrack",ae(private_safeLighten,Q.primary.main,.62)),setColor(Q.Slider,"secondaryTrack",ae(private_safeLighten,Q.secondary.main,.62)),setColor(Q.Slider,"errorTrack",ae(private_safeLighten,Q.error.main,.62)),setColor(Q.Slider,"infoTrack",ae(private_safeLighten,Q.info.main,.62)),setColor(Q.Slider,"successTrack",ae(private_safeLighten,Q.success.main,.62)),setColor(Q.Slider,"warningTrack",ae(private_safeLighten,Q.warning.main,.62));const re=V?ae(private_safeDarken,Q.background.default,.6825):private_safeEmphasize(Q.background.default,.8);setColor(Q.SnackbarContent,"bg",re),setColor(Q.SnackbarContent,"color",silent(()=>V?dark.text.primary:Q.getContrastText(re))),setColor(Q.SpeedDialAction,"fabHoverBg",private_safeEmphasize(Q.background.paper,.15)),setColor(Q.StepConnector,"border",ie("palette-grey-400")),setColor(Q.StepContent,"border",ie("palette-grey-400")),setColor(Q.Switch,"defaultColor",ie("palette-common-white")),setColor(Q.Switch,"defaultDisabledColor",ie("palette-grey-100")),setColor(Q.Switch,"primaryDisabledColor",ae(private_safeLighten,Q.primary.main,.62)),setColor(Q.Switch,"secondary
79DisabledColor",ae(private_safeLighten,Q.secondary.main,.62)),setColor(Q.Switch,"errorDisabledColor",ae(private_safeLighten,Q.error.main,.62)),setColor(Q.Switch,"infoDisabledColor",ae(private_safeLighten,Q.info.main,.62)),setColor(Q.Switch,"successDisabledColor",ae(private_safeLighten,Q.success.main,.62)),setColor(Q.Switch,"warningDisabledColor",ae(private_safeLighten,Q.warning.main,.62)),setColor(Q.TableCell,"border",ae(private_safeLighten,ae(private_safeAlpha,Q.divider,1),.88)),setColor(Q.Tooltip,"bg",ae(private_safeAlpha,Q.grey[700],.92))}if(Q.mode==="dark"){setColor(Q.Alert,"errorColor",ae(private_safeLighten,Q.error.light,.6)),setColor(Q.Alert,"infoColor",ae(private_safeLighten,Q.info.light,.6)),setColor(Q.Alert,"successColor",ae(private_safeLighten,Q.success.light,.6)),setColor(Q.Alert,"warningColor",ae(private_safeLighten,Q.warning.light,.6)),setColor(Q.Alert,"errorFilledBg",ie("palette-error-dark")),setColor(Q.Alert,"infoFilledBg",ie("palette-info-dark")),setColor(Q.Alert,"successFilledBg",ie("palette-success-dark")),setColor(Q.Alert,"warningFilledBg",ie("palette-warning-dark")),setColor(Q.Alert,"errorFilledColor",silent(()=>Q.getContrastText(Q.error.dark))),setColor(Q.Alert,"infoFilledColor",silent(()=>Q.getContrastText(Q.info.dark))),setColor(Q.Alert,"successFilledColor",silent(()=>Q.getContrastText(Q.success.dark))),setColor(Q.Alert,"warningFilledColor",silent(()=>Q.getContrastText(Q.warning.dark))),setColor(Q.Alert,"errorStandardBg",ae(private_safeDarken,Q.error.light,.9)),setColor(Q.Alert,"infoStandardBg",ae(private_safeDarken,Q.info.light,.9)),setColor(Q.Alert,"successStandardBg",ae(private_safeDarken,Q.success.light,.9)),setColor(Q.Alert,"warningStandardBg",ae(private_safeDarken,Q.warning.light,.9)),setColor(Q.Alert,"errorIconColor",ie("palette-error-main")),setColor(Q.Alert,"infoIconColor",ie("palette-info-main")),setColor(Q.Alert,"successIconColor",ie("palette-success-main")),setColor(Q.Alert,"warningIconColor",ie("palette-warning-main")),setColor(Q.AppBar,"defaultBg",ie("palette-grey-900")),setColor(Q.AppBar,"darkBg",ie("palette-background-paper")),setColor(Q.AppBar,"darkColor",ie("palette-text-primary")),setColor(Q.Avatar,"defaultBg",ie("palette-grey-600")),setColor(Q.Button,"inheritContainedBg",ie("palette-grey-800")),setColor(Q.Button,"inheritContainedHoverBg",ie("palette-grey-700")),setColor(Q.Chip,"defaultBorder",ie("palette-grey-700")),setColor(Q.Chip,"defaultAvatarColor",ie("palette-grey-300")),setColor(Q.Chip,"defaultIconColor",ie("palette-grey-300")),setColor(Q.FilledInput,"bg","rgba(255, 255, 255, 0.09)"),setColor(Q.FilledInput,"hoverBg","rgba(255, 255, 255, 0.13)"),setColor(Q.FilledInput,"disabledBg","rgba(255, 255, 255, 0.12)"),setColor(Q.LinearProgress,"primaryBg",ae(private_safeDarken,Q.primary.main,.5)),setColor(Q.LinearProgress,"secondaryBg",ae(private_safeDarken,Q.secondary.main,.5)),setColor(Q.LinearProgress,"errorBg",ae(private_safeDarken,Q.error.main,.5)),setColor(Q.LinearProgress,"infoBg",ae(private_safeDarken,Q.info.main,.5)),setColor(Q.LinearProgress,"successBg",ae(private_safeDarken,Q.success.main,.5)),setColor(Q.LinearProgress,"warningBg",ae(private_safeDarken,Q.warning.main,.5)),setColor(Q.Skeleton,"bg",V?ae(private_safeAlpha,Q.text.primary,.13):`rgba(${ie("palette-text-primaryChannel")} / 0.13)`),setColor(Q.Slider,"primaryTrack",ae(private_safeDarken,Q.primary.main,.5)),setColor(Q.Slider,"secondaryTrack",ae(private_safeDarken,Q.secondary.main,.5)),setColor(Q.Slider,"errorTrack",ae(private_safeDarken,Q.error.main,.5)),setColor(Q.Slider,"infoTrack",ae(private_safeDarken,Q.info.main,.5)),setColor(Q.Slider,"successTrack",ae(private_safeDarken,Q.success.main,.5)),setColor(Q.Slider,"warningTrack",ae(private_safeDarken,Q.warning.main,.5));const re=V?ae(private_safeLighten,Q.background.default,.985):private_safeEmphasize(Q.background.default,.98);setColor(Q.SnackbarContent,"bg",re),setColor(Q.SnackbarContent,"color",silent(()=>V?light.text.primary:Q.getContrastText(re))),setColor(Q.SpeedDialAction,"fabHoverBg",private_safeEmphasize(Q.background.paper,.15)),setColor(Q.StepConnector,"border",ie("palette-grey-600")),setColor(Q.StepContent,"border",ie("palette-grey-600")),setColor(Q.Switch,"defaultColor",ie("palette-grey-300")),setColor(Q.Switch,"defaultDisabledColor",ie("palette-grey-600")),setColor(Q.Switch,"primaryDisabledColor",ae(private_safeDarken,Q.primary.main,.55)),setColor(Q.Switch,"secondary
79DisabledColor",ae(private_safeDarken,Q.secondary.main,.55)),setColor(Q.Switch,"errorDisabledColor",ae(private_safeDarken,Q.error.main,.55)),setColor(Q.Switch,"infoDisabledColor",ae(private_safeDarken,Q.info.main,.55)),setColor(Q.Switch,"successDisabledColor",ae(private_safeDarken,Q.success.main,.55)),setColor(Q.Switch,"warningDisabledColor",ae(private_safeDarken,Q.warning.main,.55)),setColor(Q.TableCell,"border",ae(private_safeDarken,ae(private_safeAlpha,Q.divider,1),.68)),setColor(Q.Tooltip,"bg",ae(private_safeAlpha,Q.grey[700],.92))}setColorChannel(Q.background,"default"),setColorChannel(Q.background,"paper"),setColorChannel(Q.common,"background"),setColorChannel(Q.common,"onBackground"),setColorChannel(Q,"divider"),Object.keys(Q).forEach(re=>{const J=Q[re];re!=="tonalOffset"&&J&&typeof J=="object"&&(J.main&&setColor(Q[re],"mainChannel",private_safeColorChannel(toRgb(J.main))),J.light&&setColor(Q[re],"lightChannel",private_safeColorChannel(toRgb(J.light))),J.dark&&setColor(Q[re],"darkChannel",private_safeColorChannel(toRgb(J.dark))),J.contrastText&&setColor(Q[re],"contrastTextChannel",private_safeColorChannel(toRgb(J.contrastText))),re==="text"&&(setColorChannel(Q[re],"primary"),setColorChannel(Q[re],"secondary")),re==="action"&&(J.active&&setColorChannel(Q[re],"active"),J.selected&&setColorChannel(Q[re],"selected")))})}),W=u.reduce((se,Q)=>deepmerge(se,Q),W);const K={prefix:C,disableCssColorScheme:E,shouldSkipGeneratingVar:P,getSelector:defaultGetSelector(W),enableContrastVars:_},{vars:Y,generateThemeVars:ee,generateStyleSheets:oe}=prepareCssVars(W,K);return W.vars=Y,Object.entries(W.colorSchemes[W.defaultColorScheme]).forEach(([se,Q])=>{W[se]=Q}),W.generateThemeVars=ee,W.generateStyleSheets=oe,W.generateSpacing=function(){return createSpacing(L.spacing,createUnarySpacing(this))},W.getColorSchemeSelector=createGetColorSchemeSelector(R),W.spacing=W.generateSpacing(),W.shouldSkipGeneratingVar=P,W.unstable_sxConfig={...defaultSxConfig,...L==null?void 0:L.unstable_sxConfig},W.unstable_sx=function(Q){return styleFunctionSx({sx:Q,theme:this})},W.toRuntimeSource=stringifyTheme,W}function attachColorScheme(o,u,T){o.colorSchemes&&T&&(o.colorSchemes[u]={...T!==!0&&T,palette:createPalette({...T===!0?{}:T.palette,mode:u})})}function createTheme(o={},...u){const{palette:T,cssVariables:S=!1,colorSchemes:E=T?void 0:{light:!0},defaultColorScheme:C=T==null?void 0:T.mode,..._}=o,P=C||"light",R=E==null?void 0:E[P],I={...E,...T?{[P]:{...typeof R!="boolean"&&R,palette:T}}:void 0};if(S===!1){if(!("colorSchemes"in o))return createThemeNoVars(o,...u);let L=T;"palette"in o||I[P]&&(I[P]!==!0?L=I[P].palette:P==="dark"&&(L={mode:"dark"}));const j=createThemeNoVars({...o,palette:L},...u);return j.defaultColorScheme=P,j.colorSchemes=I,j.palette.mode==="light"&&(j.colorSchemes.light={...I.light!==!0&&I.light,palette:j.palette},attachColorScheme(j,"dark",I.dark)),j.palette.mode==="dark"&&(j.colorSchemes.dark={...I.dark!==!0&&I.dark,palette:j.palette},attachColorScheme(j,"light",I.light)),j}return!T&&!("light"in I)&&P==="light"&&(I.light=!0),createThemeWithVars({..._,colorSchemes:I,defaultColorScheme:P,...typeof S!="boolean"&&S},...u)}const defaultTheme$1=createTheme();function useTheme(){const o=useTheme$2(defaultTheme$1);return o[THEME_ID]||o}function slotShouldForwardProp(o){return o!=="ownerState"&&o!=="theme"&&o!=="sx"&&o!=="as"}const rootShouldForwardProp=o=>slotShouldForwardProp(o)&&o!=="classes",styled=createStyled({themeId:THEME_ID,defaultTheme:defaultTheme$1,rootShouldForwardProp});function ThemeProviderNoVars({theme:o,...u}){const T=THEME_ID in o?o[THEME_ID]:void 0;return jsxRuntimeExports.jsx(ThemeProvider$1,{...u,themeId:T?THEME_ID:void 0,theme:T||o})}const defaultConfig={colorSchemeStorageKey:"mui-color-scheme",defaultLightColorScheme:"light",defaultDarkColorScheme:"dark",modeStorageKey:"mui-mode"},{CssVarsProvider:InternalCssVarsProvider}=createCssVarsProvider({themeId:THEME_ID,theme:()=>createTheme({cssVariables:!0}),colorSchemeStorageKey:defaultConfig.colorSchemeStorageKey,modeStorageKey:defaultConfig.modeStorageKey,defaultColorScheme:{light:defaultConfig.defaultLightColorScheme,dark:defaultConfig.defaultDar
79kColorScheme},resolveTheme:o=>{const u={...o,typography:createTypography(o.palette,o.typography)};return u.unstable_sx=function(S){return styleFunctionSx({sx:S,theme:this})},u}}),CssVarsProvider=InternalCssVarsProvider;function ThemeProvider({theme:o,...u}){const T=reactExports.useMemo(()=>{if(typeof o=="function")return o;const S=THEME_ID in o?o[THEME_ID]:o;return"colorSchemes"in S?null:"vars"in S?o:{...o,vars:null}},[o]);return T?jsxRuntimeExports.jsx(ThemeProviderNoVars,{theme:T,...u}):jsxRuntimeExports.jsx(CssVarsProvider,{theme:o,...u})}const firebaseConfig={apiKey:"AIzaSyAhMtUEk4ewaYBoiMJUZgQw2SPKQHPWrMI",authDomain:"giao-vien-doi-moi.firebaseapp.com",projectId:"giao-vien-doi-moi",storageBucket:"giao-vien-doi-moi.firebasestorage.app",messagingSenderId:"198677949267",appId:"1:198677949267:web:fd0be4a88b3d2a4f734fa6",databaseURL:"https://giao-vien-doi-moi-default-rtdb.asia-southeast1.firebasedatabase.app"},app=initializeApp(firebaseConfig),RECAPTCHA_SITE_KEY="6Le9ZncsAAAAAFiL50lrRu_vsXPOdiu-KZtEZaCA",appCheck=initializeAppCheck(app,{provider:new ReCaptchaV3Provider(RECAPTCHA_SITE_KEY),isTokenAutoRefreshEnabled:!0}),auth=getAuth(app),db=getFirestore(app),storage=getStorage(app),realtimeDb=getDatabase(app),googleProvider=new GoogleAuthProvider,config$1=Object.freeze(Object.defineProperty({__proto__:null,appCheck,auth,db,default:app,googleProvider,realtimeDb,storage},Symbol.toStringTag,{value:"Module"}));function isInAppBrowser(){if(typeof navigator>"u")return!1;const o=navigator.userAgent.toLowerCase();return o.includes("zalo")||o.includes("fban")||o.includes("fbav")||o.includes("instagram")||o.includes("wechat")||o.includes("micromessenger")||o.includes("qq/")}function isDesktopDevice(){var _;if(typeof window>"u"||typeof navigator>"u")return!0;const o=navigator.userAgent.toLowerCase(),u=/android(?!.*tablet)|webos|iphone|ipod|blackberry|iemobile|opera mini|mobile/i.test(o),S=/macintosh/i.test(o)&&typeof navigator.maxTouchPoints=="number"&&navigator.maxTouchPoints>1||/(ipad|tablet|(android(?!.*mobile))|(windows(?!.*phone)(.*touch))|kindle|playbook|silk)/i.test(o),E=o.includes("zalo")||o.includes("fban")||o.includes("fbav")||o.includes("instagram")||o.includes("wechat")||o.includes("micromessenger")||o.includes("qq/");return!(u||S||E||(((_=window.screen)==null?void 0:_.width)||window.innerWidth||1920)<1024)}const DESKTOP_SESSION_KEY="desktopSessionId",SESSION_FIELD="activeDesktopSession",USERS_COLLECTION="subscriptions",VERIFY_CACHE_TTL_MS=6e5;let _lastVerifyOk=0,_lastVerifyUid=null;function showKickedOverlay(o=6){if(document.getElementById("session-expired-overlay"))return Promise.resolve();const u=document.createElement("div");return u.id="session-expired-overlay",u.style.cssText=["position:fixed","top:0","left:0","right:0","bottom:0","background:rgba(10,8,25,0.94)","z-index:2147483647","display:flex","flex-direction:column","align-items:center","justify-content:center",'font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif',"backdrop-filter:blur(8px)","animation:sgFadeIn 0.35s ease"].join(";"),u.innerHTML=`
80        <style>
81            @keyframes sgFadeIn { from { opacity:0; transform:scale(0.97) } to { opacity:1; transform:scale(1) } }
82            @keyframes sgPulse { 0%,100% { transform:scale(1) } 50% { transform:scale(1.12) } }
83        </style>
84        <div style="background:linear-gradient(145deg,#1a1040,#0f1b35);border:1px solid rgba(255,90,90,0.4);border-radius:24px;padding:52px 60px;text-align:center;max-width:540px;width:90%;box-shadow:0 28px 80px rgba(0,0,0,0.85)">
85            <div style="font-size:68px;margin-bottom:22px;animation:sgPulse 2s infinite">🔐</div>
86            <div style="color:#ff6b6b;font-size:1.45rem;font-weight:700;margin-bottom:16px">Phiên đăng nhập đã hết hạn</div>
87            <div style="color:rgba(255,255,255,0.82);font-size:1.02rem;line-height:1.75;margin-bottom:32px">
88                Tài khoản đang được sử dụng<br/>
89                trên <strong style="color:white">một máy tính khác</strong>.<br/>
90                Vui lòng đăng nhập lại để tiếp tục.
91            </div>
92            <div style="color:rgba(255,255,255,0.45);font-size:0.92rem;padding:12px 28px;background:rgba(255,255,255,0.06);border-radius:50px;display:inline-block">
93                Tự động đăng xuất sau&nbsp;<span id="sgCountdown" style="color:#ff6b6b;font-weight:700">${o}</span>&nbsp;giây...
94            </div>
95        </div>
96    `,document.body.appendChild(u),new Promise(T=>{let S=o;const E=setInterval(()=>{S-=1;const C=document.getElementById("sgCountdown");C&&(C.textContent=String(S)),S<=0&&(clearInterval(E),T())},1e3)})}async function emergencySignOut(){var o;try{localStorage.removeItem(DESKTOP_SESSION_KEY),await showKickedOverlay(6),await signOut(auth),window.location.href="/"}
96catch(u){localStorage.removeItem(DESKTOP_SESSION_KEY),(o=document.getElementById("session-expired-overlay"))==null||o.remove(),console.error("[SessionGuard] Emergency sign out error:",u),window.location.href="/"}}function useSessionGuard(){const{currentUser:o}=useAuth();return{verifySession:reactExports.useCallback(async()=>{var C;if(!isDesktopDevice())return!0;if(!o)return console.warn("[SessionGuard] verifySession called but no currentUser."),!1;const T=o.uid;if(_lastVerifyUid===T&&Date.now()-_lastVerifyOk<VERIFY_CACHE_TTL_MS)return!0;const S=localStorage.getItem(DESKTOP_SESSION_KEY);if(!S)return console.log("[SessionGuard] Local session missing, silently recreating..."),await createDesktopSession(o),!0;let E=null;try{const _=doc(db,USERS_COLLECTION,T),P=await getDocFromServer(_);if(!P.exists())return console.warn("[SessionGuard] User document not found on Firestore."),!0;E=((C=P.data())==null?void 0:C[SESSION_FIELD])??null}catch(_){return console.error("[SessionGuard] Failed to fetch session from server:",_),!0}return S===E?(_lastVerifyOk=Date.now(),_lastVerifyUid=T,!0):(_lastVerifyOk=0,_lastVerifyUid=null,console.warn(`[SessionGuard] Session mismatch! Local: "${S}", Server: "${E}". Kicking out...`),emergencySignOut(),!1)},[o])}}async function createDesktopSession(o){if(!isDesktopDevice())return null;if(!(o!=null&&o.uid))return console.warn("[SessionGuard] createDesktopSession called without valid user."),null;try{const u=typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():`session_${Date.now()}_${Math.random().toString(36).substring(2,11)}`,T=doc(db,USERS_COLLECTION,o.uid);return await setDoc(T,{[SESSION_FIELD]:u,[`${SESSION_FIELD}UpdatedAt`]:new Date().toISOString()},{merge:!0}),localStorage.setItem(DESKTOP_SESSION_KEY,u),_lastVerifyOk=0,_lastVerifyUid=null,console.log(`[SessionGuard] Session created: "${u}" for ${o.email}`),u}catch(u){return console.warn("[SessionGuard] createDesktopSession failed:",u.message),null}}const VI_FALLBACK={errInvalidCredential:"Phiên đăng nhập Google trên trình duyệt này đã hết hạn. Cách xử lý: mở cửa sổ ẩn danh (Ctrl + Shift + N) rồi đăng nhập lại. Nếu vào được, hãy quay lại cửa sổ thường và xoá cookie của Google (Cài đặt → Quyền riêng tư → Xoá dữ liệu duyệt web → chọn Cookie).",errPopupBlocked:"Trình duyệt đã chặn cửa sổ đăng nhập Google. Hãy bấm vào biểu tượng chặn pop-up ở góc phải thanh địa chỉ, chọn Luôn cho phép, rồi thử lại.",errPopupClosed:"Bạn đã đóng cửa sổ đăng nhập Google trước khi chọn xong tài khoản. Hãy bấm Đăng nhập bằng Google lần nữa.",errCookiesBlocked:"Trình duyệt đang chặn cookie nên không đăng nhập Google được. Hãy vào Cài đặt → Quyền riêng tư → Cookie, chọn Cho phép cookie của bên thứ ba (hoặc tắt tiện ích chặn quảng cáo cho trang này), rồi thử lại.",errNetwork:"Mất kết nối mạng khi đang đăng nhập. Hãy kiểm tra lại Wi-Fi hoặc 4G rồi thử lại.",errTooManyRequests:"Bạn đã thử đăng nhập quá nhiều lần. Vui lòng đợi vài phút rồi thử lại.",errUserDisabled:"Tài khoản này đã bị khoá. Vui lòng liên hệ quản trị viên để được hỗ trợ.",errWebView:"Bạn đang mở trang trong ứng dụng Zalo/Facebook nên không đăng nhập Google được. Hãy bấm dấu ba chấm ở góc trên bên phải, chọn Mở bằng trình duyệt, rồi đăng nhập lại.",errUnknown:"Không đăng nhập được. Hãy thử mở cửa sổ ẩn danh (Ctrl + Shift + N) hoặc dùng trình duyệt khác. Nếu vẫn lỗi, chụp màn hình này gửi cho quản trị viên."},CODE_TO_KEY={"auth/invalid-credential":"errInvalidCredential","auth/user-token-expired":"errInvalidCredential","auth/invalid-user-token":"errInvalidCredential","auth/popup-blocked":"errPopupBlocked","auth/popup-closed-by-user":"errPopupClosed","auth/cancelled-popup-request":"errPopupClosed","auth/web-storage-unsupported":"errCookiesBlocked","auth/network-request-failed":"errNetwork","auth/too-many-requests":"errTooManyRequests","auth/user-disabled":"errUserDisabled","auth/operation-not-supported-in-this-environment":"errWebView"};function mapAuthError(o,u){const T=(o==null?void 0:o.code)||"",S=(o==null?void 0:o.message)||"",E=(P,R)=>u?u(P,R):VI_FALLBACK[P]??P,C=CODE_TO_KEY[T];if(C)return E(C);if(!T&&S)return S;const _=T?u?u("errCodeHint",{code:T}):`Mã lỗi: ${T}`:"";return`${E("errUnknown")} ${_}`.trim()}const AuthContext=reactExports.createContext({}),isMobileOrWebView=()=>{const o=navigator.userAgent.toLowerCase(),u=/android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini/i.test(o),T=o.includes("zalo")||o.includes("fban")||o.includes("fbav")||o.includes("instagram")||o.includes("wechat")||o.includes("qq")||o.includes("micromessenger"),S=window.navigator.standalone===!0;return u||T||S},useAuth=()=>{const o=reactExports.useContext(AuthContext);if(!o)throw new Error("useAuth must be used within AuthProvider");return o},AuthProvider=({children:o})=>{const[u,T]=reactExports.useState(null),[S,E]=reactExports.useState(!0),[C,_]=reactExports.useState(null),[P,R]=reactExports.useState(""),I=D=>{},L=async()=>{var D;try{_(null),R(""),I("Starting loginWithGoogle...");const F=window.location.hostname;if(/^192\.168\.|^172\.16\.|^172\.31\.|^10\./.test(F)&&F!=="localhost"){const B=`Không hỗ trợ đăng nhập qua IP LAN ${F}. Vui lòng dùng localhost hoặc domain thật.`;throw _(B),I(B),new Error(B)}googleProvider.setCustomParameters({prompt:"select_account"});const G=isMobileOrWebView();I(`isMobile/WebView detected: ${G}`);
96try{I("Attempting signInWithPopup...");const B=await signInWithPopup(auth,googleProvider);return I(`Popup success for: ${(D=B.user)==null?void 0:D.email}`),B.user&&(await createDesktopSession(B.user),I(`Desktop session created for: ${B.user.email}`)),B.user}catch(B){if(I(`Popup failed: [${B.code}] ${B.message}`),G||B.code==="auth/internal-error"||B.code==="auth/popup-blocked")return I("Fallback to signInWithRedirect..."),sessionStorage.setItem("isGoogleRedirecting","true"),await signInWithRedirect(auth,googleProvider),null;throw B}}catch(F){throw I(`Fatal error: ${F.message}`),console.error("Error signing in with Google:",F),F}},j=async()=>{try{await signOut(auth)}catch(D){throw console.error("Error signing out:",D),D}};reactExports.useEffect(()=>{let D=()=>{},F=!0;return(async()=>{const G=sessionStorage.getItem("isGoogleRedirecting")==="true";try{I("Checking redirect result...");const B=await Promise.race([getRedirectResult(auth),new Promise((H,O)=>setTimeout(()=>O(Object.assign(new Error("getRedirectResult timeout"),{code:"auth/network-request-failed"})),1e4))]);B!=null&&B.user?(I(`Redirect result OK: ${B.user.email}`),await createDesktopSession(B.user),I(`Desktop session created (redirect flow) for: ${B.user.email}`)):I("Redirect result is NULL.")}catch(B){I(`Redirect error: [${(B==null?void 0:B.code)||"timeout"}] ${B.message}`),F&&_(mapAuthError(B))}finally{G&&sessionStorage.removeItem("isGoogleRedirecting"),D=onAuthStateChanged(auth,B=>{F&&(I(`onAuthStateChanged fired. User = ${(B==null?void 0:B.email)||"null"}`),T(B),E(!1))})}})(),()=>{F=!1,D()}},[]);const M={currentUser:u,loading:S,authError:C,authDebugLog:P,loginWithGoogle:L,logout:j};return jsxRuntimeExports.jsx(AuthContext.Provider,{value:M,children:S?jsxRuntimeExports.jsx("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",minHeight:"100vh",background:"linear-gradient(135deg, #667eea 0%, #764ba2 100%)"},children:jsxRuntimeExports.jsxs("div",{style:{color:"white",fontSize:"1.5em",fontWeight:"600",textAlign:"center",padding:"20px"},children:["Đang xử lý đăng nhập...",!1]})}):o})},APP_SALT="gvdm-2026-secure-companion-robot";async function deriveKey(o){const u=new TextEncoder,T=await crypto.subtle.importKey("raw",u.encode(o+APP_SALT),{name:"PBKDF2"},!1,["deriveKey"]);return crypto.subtle.deriveKey({name:"PBKDF2",salt:u.encode(APP_SALT),iterations:1e5,hash:"SHA-256"},T,{name:"AES-GCM",length:256},!1,["encrypt","decrypt"])}async function encryptApiKey(o,u){const T=await deriveKey(u),S=crypto.getRandomValues(new Uint8Array(12)),E=new TextEncoder,C=await crypto.subtle.encrypt({name:"AES-GCM",iv:S},T,E.encode(o)),_=Array.from(S).map(R=>R.toString(16).padStart(2,"0")).join(""),P=btoa(String.fromCharCode(...new Uint8Array(C)));return`${_}:${P}`}async function decryptApiKey(o,u){const[T,S]=o.split(":");if(!T||!S)throw new Error("Invalid encrypted format");const E=new Uint8Array(T.match(/.{2}/g).map(I=>parseInt(I,16))),C=Uint8Array.from(atob(S),I=>I.charCodeAt(0)),_=await deriveKey(u),P=new TextDecoder,R=await crypto.subtle.decrypt({name:"AES-GCM",iv:E},_,C);return P.decode(R)}function isEncrypted(o){return/^[0-9a-f]{24}:[A-Za-z0-9+/=]+$/.test(o)}const saveApiKeyToFirebase=async(o,u,T)=>{if(!o||!u)throw new Error("userId và apiKey không được để trống");try{const S=await encryptApiKey(u,o),E=doc(db,"users",o);await setDoc(E,{gemini_api_key:S,gemini_model_name:T||"gemini-2.5-flash",updated_at:new Date},{merge:!0})}catch(S){throw console.error("Lỗi khi lưu API key:",S),S}},saveApiKeysToFirebase=async(o,u,T)=>{if(!o||u.length===0)throw new Error("userId và apiKeys không được để trống");try{const S=await Promise.all(u.map(C=>encryptApiKey(C,o))),E=doc(db,"users",o);await setDoc(E,{gemini_api_key:S[0],gemini_api_keys:S,gemini_model_name:T||"gemini-2.5-flash",updated_at:new Date},{merge:!0})}catch(S){throw console.error("Lỗi khi lưu API keys:",S),S}},loadApiKeyFromFirebase=async o=>{if(!o)throw new Error("userId không được để trống");try{const u=doc(db,"users",o),T=await getDoc(u);if(T.exists()){const S=T.data();let E=S.gemini_api_key||"";if(E&&isEncrypted(E))try{E=await decryptApiKey(E,o)}catch{console.error("Không thể giải mã API key — key có thể bị hỏng"),E=""}let C=[];return S.gemini_api_keys&&Array.isArray(S.gemini_api_keys)&&(C=await Promise.all(S.gemini_api_keys.map(async _=>{if(_&&isEncrypted(_))try{return await decryptApiKey(_,o)}catch{return""}return _||""})),C=C.filter(_=>_.length>0)),C.length===0&&E&&(C=[E]),{apiKey:E,apiKeys:C,modelName:S.gemini_model_name||"gemini-2.5-flash"}}return{apiKey:"",apiKeys:[],modelName:"gemini-2.5-flash"}}catch(u){throw console.error("Lỗi khi load API key:",u),u}},deleteApiKeyFromFirebase=async o=>{if(!o)throw new Error("userId không được để trống");try{const u=doc(db,"users",o);await setDoc(u,{gemini_api_key:null,gemini_model_name:null},{merge:!0})}catch(u){throw console.error("Lỗi khi xóa API key:",u),u}},AIContext=reactExports.createContext(void 0),AI_MODELS=[{id:"gemini-2.5-pro",name:"Gemini 2.5 Pro (Mạnh nhất)"},{id:"gemini-2.5-flash",name:"Gemini 2.5 Flash (Nhanh)"},{id:"gemini-2.5-flash-lite",name:"Gemini 2.5 Flash-Lite (Rất nhanh
96)"},{id:"gemini-2.0-flash",name:"Gemini 2.0 Flash (Ổn định)"},{id:"gemini-2.0-flash-lite",name:"Gemini 2.0 Flash-Lite (Rất ổn định)"}];function AIProvider({children:o}){const{currentUser:u}=useAuth(),[T,S]=reactExports.useState(""),[E,C]=reactExports.useState([]),[_,P]=reactExports.useState(AI_MODELS[1].id),[R,I]=reactExports.useState(!1),[L,j]=reactExports.useState(!1),[M,D]=reactExports.useState(!0);reactExports.useEffect(()=>{(async()=>{if(!(u!=null&&u.uid)){D(!1);return}if(u.isAnonymous){D(!1);return}try{const{apiKey:U,apiKeys:W,modelName:K}=await loadApiKeyFromFirebase(u.uid);U&&(S(U),I(!0)),W&&W.length>0&&C(W),K&&P(K)}catch(U){console.error("Lỗi load API key từ Firebase:",U)}finally{D(!1)}})()},[u==null?void 0:u.uid,u==null?void 0:u.isAnonymous]);const F=async(V,U)=>{if(!(u!=null&&u.uid)){console.error("Người dùng chưa đăng nhập");return}if(u.isAnonymous){console.error("Anonymous users cannot save API keys");return}try{const W=U||_;await saveApiKeyToFirebase(u.uid,V,W),S(V),C(K=>K.length>0?[V,...K.slice(1)]:[V]),P(W),I(!!V)}catch(W){throw console.error("Lỗi khi lưu API key:",W),W}},N=async(V,U)=>{if(!(!(u!=null&&u.uid)||u.isAnonymous))try{const W=U||_;await saveApiKeysToFirebase(u.uid,V,W),C(V),S(V[0]||""),P(W),I(V.length>0)}catch(W){throw console.error("Lỗi khi lưu API keys:",W),W}},G=async V=>{if(!(u!=null&&u.uid)){console.error("Người dùng chưa đăng nhập");return}if(u.isAnonymous){console.error("Anonymous users cannot save model name");return}try{await saveApiKeyToFirebase(u.uid,T,V),P(V)}catch(U){throw console.error("Lỗi khi lưu model name:",U),U}},B=async()=>{if(!(u!=null&&u.uid)){console.error("Người dùng chưa đăng nhập");return}try{await deleteApiKeyFromFirebase(u.uid),S(""),C([]),I(!1)}catch(V){throw console.error("Lỗi khi xóa API key:",V),V}},H=()=>{j(!0)},O=()=>{j(!1)};return jsxRuntimeExports.jsx(AIContext.Provider,{value:{apiKey:T,apiKeys:E,isApiKeySet:R,saveApiKey:F,saveApiKeys:N,clearApiKey:B,openApiKeyModal:H,closeApiKeyModal:O,showModal:L,modelName:_,saveModelName:G,isLoading:M},children:o})}const ConsoleContext=reactExports.createContext(void 0);function ConsoleProvider({children:o}){return reactExports.useEffect(()=>{},[]),jsxRuntimeExports.jsx(ConsoleContext.Provider,{value:{},children:o})}const AI_TOOLS_MAP=[{id:"aiTool1",label:"skkn",featureCode:"aiT1",legacyGroupKey:"aiToolsUnlocked"},{id:"aiTool2",label:"bienphap",featureCode:"aiT2",legacyGroupKey:"aiToolsUnlocked"},{id:"aiTool4",label:"hocba",featureCode:"aiT4",legacyGroupKey:"aiToolsUnlocked"},{id:"aiTool5",label:"dethi7991",featureCode:"aiT5",legacyGroupKey:"aiToolsGroup2Unlocked"},{id:"aiTool6",label:"dethi7991en",featureCode:"aiT6",legacyGroupKey:"aiToolsGroup2Unlocked"},{id:"aiTool7",label:"dethinguvan",featureCode:"aiT7",legacyGroupKey:"aiToolsGroup2Unlocked"},{id:"aiTool8",label:"phantichde",featureCode:"aiT8",legacyGroupKey:"aiToolsGroup2Unlocked"},{id:"aiTool9",label:"giaoanmamnon",featureCode:"aiT9"},{id:"aiTool10",label:"phanmem",featureCode:"aiT10",legacyGroupKey:"aiToolsGroup3Unlocked"},{id:"aiTool11",label:"khgd3439",featureCode:"aiT11",legacyGroupKey:"aiToolsGroup4Unlocked"},{id:"aiTool14",label:"khgdai",featureCode:"aiT14",legacyGroupKey:"aiToolsGroup4Unlocked"},{id:"aiTool13",label:"giaoancde",featureCode:"aiT13",legacyGroupKey:"aiToolsGroup4Unlocked"},{id:"aiTool16",label:"tichhoptonghop",featureCode:"aiT16"}];Object.fromEntries(AI_TOOLS_MAP.map(o=>[o.featureCode,o.id]));const TRIAL_LIMITS={interactiveVideo:5,quizGame:5,panorama:3,companionRobot:5,wheelQuiz:15,wheelQuizPlay:15,wheelQuizSets:15,handSlashQuiz:5,flipPuzzle:5,pacedQuiz:5,crosswordPuzzle:5,tugOfWar:5,interactiveImage:5,headTiltQuiz:5,journey:1,poseQuiz:5,turnBasedGame:5,versusGame:1,paperMode:5,faceRandom:10,scavengerHunt:1,starBagGame:5,minesweeper:5,htmlEmbedGame:1,flashcard:5,mindMap:5,knowledgeTrain:5,flyingWordsGame:5},PRO_FEATURE_LABELS={interactiveVideo:{name:"Video tương tác",nameEn:"Interactive Video",unit:"video",unitEn:"videos"},quizGame:{name:"Kéo Thả - Nối Ý",nameEn:"Drag & Drop - Matching",unit:"bài",unitEn:"lessons"},panorama:{name:"Phòng ảo 360°",nameEn:"360° Virtual Room",unit:"phòng",unitEn:"rooms"},wheelQuiz:{name:"Vòng quay - Lượt chơi",nameEn:"Wheel Quiz - Play Sessions",unit:"lượt chơi",unitEn:"play sessions"},pacedQuiz:{name:"Paced Quiz",nameEn:"Paced Quiz",unit:"bài",unitEn:"lessons"},flipPuzzle:{name:"Lật mảnh ghép",nameEn:"Flip Puzzle",unit:"bài",unitEn:"lessons"}
96,crosswordPuzzle:{name:"Giải ô chữ",nameEn:"Crossword Puzzle",unit:"bài",unitEn:"lessons"},handSlashQuiz:{name:"Game chém tay",nameEn:"Hand Slash Quiz",unit:"bài",unitEn:"lessons"},headTiltQuiz:{name:"Trắc nghiệm nghiêng đầu",nameEn:"Head Tilt Quiz",unit:"bài",unitEn:"lessons"},interactiveImage:{name:"Ảnh tương tác",nameEn:"Interactive Image",unit:"ảnh",unitEn:"images"},tugOfWar:{name:"Kéo co",nameEn:"Tug of War",unit:"trò chơi",unitEn:"games"},turnBasedGame:{name:"Game Theo Lượt",nameEn:"Turn-Based Game",unit:"bài",unitEn:"games"},poseQuiz:{name:"Thể dục ABC",nameEn:"Pose Slideshow Quiz",unit:"bài",unitEn:"lessons"},journey:{name:"Hành Trình Học Tập",nameEn:"Learning Journey",unit:"hành trình",unitEn:"journeys"},versusGame:{name:"Game Đối Kháng",nameEn:"Versus Battle Game",unit:"bài",unitEn:"games"},faceRandom:{name:"Gọi Học Sinh Bằng Camera",nameEn:"Random Student Camera Picker",unit:"lượt gọi",unitEn:"sessions"},starBagGame:{name:"Cuộc đua ngôi sao",nameEn:"Star Bag Game",unit:"bài",unitEn:"games"},flashcard:{name:"Thẻ lật (Flashcard)",nameEn:"Flip Cards (Flashcard)",unit:"bộ thẻ",unitEn:"decks"},htmlEmbedGame:{name:"Game tự tạo",nameEn:"Custom Game",unit:"",unitEn:""},minesweeper:{name:"Dò Mìn",nameEn:"Minesweeper",unit:"bài",unitEn:"lessons"},mindMap:{name:"Sơ Đồ Tư Duy",nameEn:"Mind Map Builder",unit:"sơ đồ",unitEn:"maps"},knowledgeTrain:{name:"Đoàn tàu tri thức",nameEn:"Knowledge Train",unit:"bài",unitEn:"lessons"},flyingWordsGame:{name:"Từ ngữ biết bay",nameEn:"Flying Words",unit:"bài",unitEn:"lessons"},scavengerHunt:{name:"Săn Kho Báu",nameEn:"Scavenger Hunt",unit:"cuộc săn",unitEn:"hunts"}},MAX_PRO_FEATURE_LIMIT=500;async function getUserSubscription(o){try{const u=doc(db,"subscriptions",o),T=await getDoc(u);if(T.exists())return T.data();{const S={subscriptionLevel:"trial",skknCount:0,bienphaCount:0,interactiveVideoCount:0,quizGameCount:0,panoramaCount:0,companionRobotCount:0,wheelQuizCount:0,flipPuzzleCount:0,pacedQuizCount:0,crosswordPuzzleCount:0,tugOfWarCount:0,interactiveImageCount:0,headTiltQuizCount:0,handSlashQuizCount:0,noiseTrackerCount:0,journeyCount:0,turnBasedGameCount:0,versusGameCount:0,paperModeCount:0,faceRandomCount:0,htmlEmbedGameCount:0,flashcardCount:0,mindMapCount:0,proPlan:{isPurchased:!1,purchasedAt:null},proPlanExpiresAt:null,extendedAssignmentExpiresAt:null,pinnedLessons:{},conductEvaluation:{status:"none",trialValidUntil:null,proExpiresAt:null},createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()};return await setDoc(u,S),S}}catch(u){throw console.error("Error getting user subscription:",u),u}}async function checkCanUseFeature(o,u){var T;try{const S=await getUserSubscription(o),E=u+"Count",C=u+"ExpiresAt",_=S[E]||0,P=_>=999999,R=S[C],I=!!(R&&new Date(R)>new Date),L=S.proPlanExpiresAt,M=((T=S.proPlan)==null?void 0:T.isPurchased)===!0||L&&new Date(L)>new Date||S.subscriptionLevel==="premium";if(P||I||M){const H=P?Math.max(0,_-999999):_,O=MAX_PRO_FEATURE_LIMIT,V=H<O;let U="";P?U=" · Vĩnh viễn":I?U=` · Hết hạn ${new Date(R).toLocaleDateString("vi-VN")}`:L&&(U=` · FullGame hết hạn ${new Date(L).toLocaleDateString("vi-VN")}`);let W=M?"FullGame":P?"Đã mua (vĩnh viễn)":"Đã mua";return{canUse:V,canCreate:V,canViewExisting:!0,remaining:V?O-H:0,level:M?"premium":"pro",currentCount:H,limit:O,expiresAt:R||null,isLegacy:P,isExpired:!1,message:V?`${W}${U}: ${H}/${O} lượt`:`${W}: Đã đạt giới hạn tối đa ${O} bài học`}}const F=TRIAL_LIMITS[u]||5,N=S[u+"RevokedAt"];if(!!R||!!N){const H=R||N;return{canUse:!1,canCreate:!1,canViewExisting:!0,remaining:0,level:"expired",currentCount:_,limit:F,expiresAt:R||null,isLegacy:!1,isExpired:!0,message:H?`Đã hết hạn ngày ${new Date(H).toLocaleDateString("vi-VN")} — Gia hạn để tiếp tục`:"Đã hết hạn — Gia hạn để tiếp tục"}}const B=F-_;return{canUse:B>0,canCreate:B>0,canViewExisting:!0,remaining:Math.max(0,B),level:"trial",currentCount:_,limit:F,expiresAt:null,isLegacy:!1,isExpired:!1,message:`Trial: Đã dùng ${_}/${F} lượt`}}catch(S){throw console.error(`Error checking ${u} feature:`,S),S}}async function updateFeatureCounter(o,u,T=1){try{const S=doc(db,"subscriptions",o),E=u+"Count";await updateDoc(S,{[E]:increment(T)})}catch(S){throw console.error(`Error updating ${u} counter:`,S),S}}async function incrementInteractiveVideoCount(o){try{await updateFeatureCounter(o,"interactiveVideo",1)}catch(u){throw console.error("Error incrementing interactive video count:",u),u}}async function incrementQuizGameCount(o){try{await updateFeatureCounter(o,"quizGame",1)}
96catch(u){throw console.error("Error incrementing quiz game count:",u),u}}async function incrementPanoramaCount(o){try{await updateFeatureCounter(o,"panorama",1)}catch(u){throw console.error("Error incrementing panorama count:",u),u}}async function getAIToolsAccess(o){try{const u=await getUserSubscription(o),T={},S=new Date,E=u.fullAiPlanExpiresAt,C=!!(E&&new Date(E)>S);for(const _ of AI_TOOLS_MAP){if(C){const L=Math.ceil((new Date(E).getTime()-S.getTime())/864e5);T[_.id]={unlocked:!0,expiresAt:E,isLegacy:!1,daysRemaining:L};continue}if(u[_.id]===!0){T[_.id]={unlocked:!0,expiresAt:null,isLegacy:!0,daysRemaining:null};continue}const P=_.id+"ExpiresAt",R=u[P]||null;if(R){const L=new Date(R),j=Math.ceil((L.getTime()-S.getTime())/(1e3*60*60*24));T[_.id]={unlocked:j>0,expiresAt:R,isLegacy:!1,daysRemaining:j>0?j:-1};continue}if(u.proAiToolsLegacy===!0&&_.legacyGroupKey==="aiToolsUnlocked"){T[_.id]={unlocked:!0,expiresAt:null,isLegacy:!0,daysRemaining:null};continue}if(_.legacyGroupKey?!!u[_.legacyGroupKey]||_.legacyGroupKey==="aiToolsGroup3Unlocked"&&!!u.aiSpecialistUnlocked:!1){T[_.id]={unlocked:!0,expiresAt:null,isLegacy:!0,daysRemaining:null};continue}T[_.id]={unlocked:!1,expiresAt:null,isLegacy:!1,daysRemaining:null}}return T}catch(u){return console.error("Error getting AI Tools access:",u),{}}}async function checkCanUseExtendedLink(o){try{const u=await getUserSubscription(o),T=u.extendedAssignmentExpiresAt,S=!!(T&&new Date(T)>new Date);return{canUse:S,expiresAt:T||null,maxYears:S?u.extendedLinkMaxYears??5:1}}catch(u){throw console.error("Error checking extended link access:",u),u}}async function checkCanCreateFlipPuzzle(o){try{const u=await checkCanUseFeature(o,"flipPuzzle");if(!u.canUse){const T=new Error("LIMIT_REACHED");throw T.remaining=u.remaining,T.limit=u.limit,T.feature="flipPuzzle",T}return u}catch(u){throw u}}async function incrementFlipPuzzleCount(o){try{await updateFeatureCounter(o,"flipPuzzle",1)}catch(u){throw console.error("Error incrementing flip puzzle count:",u),u}}async function checkCanCreateKnowledgeTrain(o){try{const u=await checkCanUseFeature(o,"knowledgeTrain");if(!u.canUse){const T=new Error("LIMIT_REACHED");throw T.remaining=u.remaining,T.limit=u.limit,T.feature="knowledgeTrain",T}return u}catch(u){throw u}}async function incrementKnowledgeTrainCount(o){try{await updateFeatureCounter(o,"knowledgeTrain",1)}catch(u){throw console.error("Error incrementing knowledge train count:",u),u}}async function checkCanCreatePacedQuiz(o){try{const u=await checkCanUseFeature(o,"pacedQuiz");if(!u.canUse){const T=new Error("LIMIT_REACHED");throw T.remaining=u.remaining,T.limit=u.limit,T.feature="pacedQuiz",T}return u}catch(u){throw u}}async function incrementPacedQuizCount(o){try{await updateFeatureCounter(o,"pacedQuiz",1)}catch(u){throw console.error("Error incrementing paced quiz count:",u),u}}async function checkCanCreateCrosswordPuzzle(o){try{const u=await checkCanUseFeature(o,"crosswordPuzzle");if(!u.canUse){const T=new Error("LIMIT_REACHED");throw T.remaining=u.remaining,T.limit=u.limit,T.feature="crosswordPuzzle",T}return u}catch(u){throw u}}async function incrementCrosswordPuzzleCount(o){try{await updateFeatureCounter(o,"crosswordPuzzle",1)}catch(u){throw console.error("Error incrementing crossword puzzle count:",u),u}}async function checkCanCreateTugOfWar(o){try{const u=await checkCanUseFeature(o,"tugOfWar");if(!u.canUse){const T=new Error("LIMIT_REACHED");throw T.remaining=u.remaining,T.limit=u.limit,T.feature="tugOfWar",T}return u}catch(u){throw u}}async function incrementTugOfWarCount(o){try{await updateFeatureCounter(o,"tugOfWar",1)}catch(u){throw console.error("Error incrementing tug of war count:",u),u}}async function checkCanCreateInteractiveImage(o){try{const u=await checkCanUseFeature(o,"interactiveImage");if(!u.canUse){const T=new Error("LIMIT_REACHED");throw T.remaining=u.remaining,T.limit=u.limit,T.feature="interactiveImage",T}return u}catch(u){throw u}}async function incrementInteractiveImageCount(o){try{await updateFeatureCounter(o,"interactiveImage",1)}catch(u){throw console.error("Error incrementing interactive image count:",u),u}}async function checkCanCreateHeadTiltQuiz(o){try{const u=await checkCanUseFeature(o,"headTiltQuiz");
96if(!u.canUse){const T=new Error("LIMIT_REACHED");throw T.remaining=u.remaining,T.limit=u.limit,T.feature="headTiltQuiz",T}return u}catch(u){throw u}}async function incrementHeadTiltQuizCount(o){try{await updateFeatureCounter(o,"headTiltQuiz",1)}catch(u){throw console.error("Error incrementing head tilt quiz count:",u),u}}async function checkCanCreateJourney(o){try{const u=await checkCanUseFeature(o,"journey");if(!u.canUse){const T=new Error("LIMIT_REACHED");throw T.remaining=u.remaining,T.limit=u.limit,T.feature="journey",T}return u}catch(u){throw u}}async function incrementJourneyCount(o){try{await updateFeatureCounter(o,"journey",1)}catch(u){throw console.error("Error incrementing journey count:",u),u}}async function checkCanCreatePoseQuiz(o){try{const u=await checkCanUseFeature(o,"poseQuiz");if(!u.canUse){const T=new Error("LIMIT_REACHED");throw T.remaining=u.remaining,T.limit=u.limit,T.feature="poseQuiz",T}return u}catch(u){throw u}}async function incrementPoseQuizCount(o){try{await updateFeatureCounter(o,"poseQuiz",1)}catch(u){throw console.error("Error incrementing pose quiz count:",u),u}}async function getPinnedItems(o,u){var T;try{return((T=(await getUserSubscription(o)).pinnedLessons)==null?void 0:T[u])||[]}catch(S){return console.error("Error getting pinned items:",S),[]}}async function togglePinItem(o,u,T){var S;try{const E=doc(db,"subscriptions",o),C=await getUserSubscription(o),_=TRIAL_LIMITS[u]||5,P=((S=C.pinnedLessons)==null?void 0:S[u])||[];if(P.includes(T)){const I=P.filter(L=>L!==T);return await updateDoc(E,{pinnedLessons:{...C.pinnedLessons||{},[u]:I},updatedAt:new Date().toISOString()}),{pinned:!1,pinnedCount:I.length,limit:_,limitReached:!1}}else{if(P.length>=_)return{pinned:!1,pinnedCount:P.length,limit:_,limitReached:!0};const I=[...P,T];return await updateDoc(E,{pinnedLessons:{...C.pinnedLessons||{},[u]:I},updatedAt:new Date().toISOString()}),{pinned:!0,pinnedCount:I.length,limit:_,limitReached:!1}}}catch(E){throw console.error("Error toggling pin:",E),E}}async function autoPinRecentItems(o,u,T){var S;try{const E=await getUserSubscription(o);if((((S=E.pinnedLessons)==null?void 0:S[u])||[]).length>0)return;const _=TRIAL_LIMITS[u]||5,P=T.slice(0,_);if(P.length===0)return;const R=doc(db,"subscriptions",o);await updateDoc(R,{pinnedLessons:{...E.pinnedLessons||{},[u]:P},updatedAt:new Date().toISOString()})}catch(E){console.error("Error auto-pinning items:",E)}}async function checkCanCreateScavengerHunt(o){try{const u=await checkCanUseFeature(o,"scavengerHunt");if(!u.canUse){const T=new Error("LIMIT_REACHED");throw T.remaining=u.remaining,T.limit=u.limit,T.feature="scavengerHunt",T}return u}catch(u){throw u}}async function incrementScavengerHuntCount(o){try{await updateFeatureCounter(o,"scavengerHunt",1)}catch(u){throw console.error("Error incrementing scavenger hunt count:",u),u}}async function incrementStarBagGameCount(o){try{await updateFeatureCounter(o,"starBagGame",1)}catch(u){throw console.error("Error incrementing star bag game count:",u),u}}async function checkCanCreateMinesweeperGame(o){try{const u=await checkCanUseFeature(o,"minesweeper");if(!u.canUse){const T=new Error("LIMIT_REACHED");throw T.remaining=u.remaining,T.limit=u.limit,T.feature="minesweeper",T}return u}catch(u){throw u}}async function incrementMinesweeperGameCount(o){try{await updateFeatureCounter(o,"minesweeper",1)}catch(u){throw console.error("Error incrementing minesweeper game count:",u),u}}async function checkCanCreateHtmlEmbedGame(o){try{const u=await checkCanUseFeature(o,"htmlEmbedGame");if(!u.canUse){const T=new Error("LIMIT_REACHED");throw T.remaining=u.remaining,T.limit=u.limit,T.feature="htmlEmbedGame",T}return u}catch(u){throw u}}async function incrementHtmlEmbedGameCount(o){try{await updateFeatureCounter(o,"htmlEmbedGame",1)}catch(u){throw console.error("Error incrementing html embed game count:",u),u}}async function checkCanCreateFlashcard(o){try{const u=await checkCanUseFeature(o,"flashcard");if(!u.canUse){const T=new Error("LIMIT_REACHED");throw T.remaining=u.remaining,T.limit=u.limit,T.feature="flashcard",T}return u}catch(u){throw u}}
96async function incrementFlashcardCount(o){try{await updateFeatureCounter(o,"flashcard",1)}catch(u){throw console.error("Error incrementing flashcard count:",u),u}}async function checkCanCreateMindMap(o){try{const u=await checkCanUseFeature(o,"mindMap");if(!u.canUse){const T=new Error("LIMIT_REACHED");throw T.remaining=u.remaining,T.limit=u.limit,T.feature="mindMap",T}return u}catch(u){throw u}}async function incrementMindMapCount(o){try{await updateFeatureCounter(o,"mindMap",1)}catch(u){throw console.error("Error incrementing mind map count:",u),u}}function deriveFeatureStatus(o,u){var D,F;const T=TRIAL_LIMITS[u]||5;if(!o)return{canUse:!0,remaining:T,level:"trial",currentCount:0,limit:T,isExpired:!1};const S=o.proPlanExpiresAt,E=((D=o.proPlan)==null?void 0:D.isPurchased)===!0||S&&new Date(S)>new Date||o.subscriptionLevel==="premium"||o.subscriptionLevel==="pro",C=u+"Count",_=u+"ExpiresAt",P=o[C]||0,R=o[_],I=P>=999999,L=!!(R&&new Date(R)>new Date);if(E||I||L){const N=I?Math.max(0,P-999999):P;return{canUse:!0,canCreate:!0,remaining:-1,level:E?"premium":"pro",currentCount:N,limit:500,isExpired:!1,isLegacy:I||((F=o.proPlan)==null?void 0:F.isPurchased)}}if(!!R||!!S||!!o[u+"RevokedAt"])return{canUse:!1,canCreate:!1,remaining:0,level:"expired",currentCount:P,limit:T,isExpired:!0,isLegacy:!1};const M=T-P;return{canUse:M>0,canCreate:M>0,remaining:Math.max(0,M),level:"trial",currentCount:P,limit:T,isExpired:!1,isLegacy:!1}}const SubscriptionContext=reactExports.createContext(null),useSubscription=()=>{const o=reactExports.useContext(SubscriptionContext);if(!o)throw new Error("useSubscription must be used within SubscriptionProvider");return o},SubscriptionProvider=({children:o})=>{const{currentUser:u}=useAuth(),[T,S]=reactExports.useState(null),[E,C]=reactExports.useState(!1),[_,P]=reactExports.useState(!1),R=reactExports.useCallback(()=>P(!0),[]),I=reactExports.useCallback(async j=>{if(j){C(!0);try{const M=await getUserSubscription(j);S(M)}catch(M){(M==null?void 0:M.code)!=="permission-denied"&&console.error("[SubscriptionContext] Error fetching subscription:",M)}finally{C(!1)}}},[]);reactExports.useEffect(()=>{if(!(u!=null&&u.uid)){S(null);return}C(!0);const j=onSnapshot(doc(db,"subscriptions",u.uid),M=>{const D=M.exists()?M.data():null;S(D),C(!1)},M=>{(M==null?void 0:M.code)!=="permission-denied"&&(console.error("[SUB] onSnapshot error:",M),I(u.uid))});return()=>j()},[u==null?void 0:u.uid,I]);const L=reactExports.useCallback(()=>{u!=null&&u.uid&&I(u.uid)},[u==null?void 0:u.uid,I]);return jsxRuntimeExports.jsx(SubscriptionContext.Provider,{value:{subscription:T,subLoading:E,refreshSubscription:L,proModalOpen:_,setProModalOpen:P,openProModal:R},children:o})},STORAGE_KEY="mindmap_active_session",MindMapSessionContext=reactExports.createContext(null);function loadFromStorage(){try{const o=localStorage.getItem(STORAGE_KEY);return o?JSON.parse(o):null}catch{return null}}function saveToStorage(o){try{o?localStorage.setItem(STORAGE_KEY,JSON.stringify(o)):localStorage.removeItem(STORAGE_KEY)}catch{}}function flattenLeafNodes(o){const u=[];for(const T of o)if(T.children&&T.children.length>0)for(const S of T.children)u.push({nodeId:S.id,label:S.label,parentLabel:T.label,options:S.options||[],correctOptionIds:S.correctOptionIds||[],confirmedOptionIds:null});else u.push({nodeId:T.id,label:T.label,parentLabel:"",options:T.options||[],correctOptionIds:T.correctOptionIds||[],confirmedOptionIds:null});return u}function MindMapSessionProvider({children:o}){const[u,T]=reactExports.useState(()=>loadFromStorage());reactExports.useEffect(()=>{saveToStorage(u)},[u]);const S=reactExports.useCallback(R=>{const I={mapId:R.id,title:R.title,layout:R.layout??"radial",branchStyle:R.branchStyle??"organic",startedAt:Date.now(),nodes:flattenLeafNodes(R.nodes||[])};T(I)},[]),E=reactExports.useCallback((R,I)=>{T(L=>L&&{...L,nodes:L.nodes.map(j=>j.nodeId===R?{...j,confirmedOptionIds:I}:j)})},[]),C=reactExports.useCallback(()=>{if(!u)return{done:0,total:0};const R=u.nodes.length;return{done:u.nodes.filter(L=>L.confirmedOptionIds!==null).length,total:R}},[u]),_=reactExports.useCallback(()=>T(null),[]),P=reactExports.useCallback(()=>T(null),[]);return jsxRuntimeExports.jsx(MindMapSessionContext.Provider,{value:{session:u,startSession:S,confirmNode:E,getProgress:C,endSession:_,clearSession:P},children:o})}function useMindMapSession(){const o=reactExports.useContext(MindMapSessionContext);if(!o)throw new Error("useMindMapSession must be used within MindMapSessionProvider");return o}function renderFormulasOnly(o,u){const T=[],S=/\$([^$]+)\$/g;let E=0,C,_=u;for(;(C=S.exec(o))!==null;){C.index>E&&T.push(reactExports.createElement("span",{key:_++},o.slice(E,C.index)));try{const P=katex.renderToString(C[1],{throwOnError:!1});T.push(reactExports.createElement("span",{key:_++,dangerouslySetInnerHTML:{__html:P}}))}catch{T.push(reactExports.createElement("span",{key:_++},C[0]))}E=S.lastIndex}return E<o.length&&T.push(reactExports.createElement("span",{key:_++},o.slice(E))),{nodes:T,nextKey:_}}function renderWithKaTeX(o){if(!o)return"";const u=[],T=/\$([^$]+)\$|\[color=([^\]]+)\](.*?)\[\/color\]/gs;let S=0,E,C=0;for(;(E=T.exec(o))!==null;){if(E.index>S&&u.push(reactExports.createElement("span",{key:C++},o.slice(S,E.index))),E[1]!==void 0)try{const _=katex.renderToString(E[1],{throwOnError:!1});u.push(reactExports.createElement("span",{key:C++,dangerouslySetInnerHTML:{__html:_}}))}catch{u.push(reactExports.createElement("span",{key:C++},E[0]))}else if(E[2]!==void 0){const _=renderFormulasOnly(E[3],C);C=_.nextKey,u.push(reactExports.createElement("span",{key:C++,style:{color:E[2]}},_.nodes))}S=T.lastIndex}return S<o.length&&u.push(reactExports.createElement("span",{key:C++},o.slice(S))),u.length>0?u:o}function escapeHtml(o){return o.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function safeColor(o){return/^(#[0-9a-fA-F]{3,8}|[a-zA-Z]+)$/.test(o)?o:"inherit"}function renderInlineToHTML(o){let u="";const T=/\$([^$]+)\$/g;let S=0,E;for(;(E=T.exec(o))!==null;){E.index>S&&(u+=escapeHtml(o.slice(S,E.index)));try{u+=katex.renderToString(E[1],{throwOnError:!1})}catch{u+=escapeHtml(E[0])}S=T.lastIndex}return S<o.length&&(u+=escapeHtml(o.slice(S))),u}function katexToHTML(o){if(!o)return"";const u=/\[color=([^\]]+)\](.*?)\[\/color\]/gs;let T="",S=0,E;for(;(E=u.exec(o))!==null;)E.index>S&&(T+=renderInlineToHTML(o.slice(S,E.index))),T+=`<span style="color:${safeColor(E[1])}">${renderInlineToHTML(E[2])}</span>`,S=u.lastIndex;return S<o.length&&(T+=renderInlineToHTML(o.slice(S))),T}const HEADER_HEIGHT=64,DEFAULT_TOP=HEADER_HEIGHT+12,DEFAULT_RIGHT=20;function MindMapFloatingSticker(){const{session:o,confirmNode:u,getProgress:T,endSession:S}=useMindMapSession(),E=useNavigate(),[C,_]=reactExports.useState("collapsed"),[P,R]=reactExports.useState(null),[I,L]=reactExports.useState([]),[j,M]=reactExports.useState(null),D=reactExports.useRef(null),F=reactExports.useRef(null),N=reactExports.useRef(!1),G=reactExports.useCallback(()=>{var X;const te=DEFAULT_RIGHT,Z=window.innerWidth-te-(((X=F.current)==null?void 0:X.offsetWidth)??200);return{top:DEFAULT_TOP,left:Math.max(0,Z)}},[]);reactExports.useEffect(()=>{if(!o){M(null);return}j===null&&requestAnimationFrame(()=>M(G()))}
96,[o]);const B=reactExports.useCallback(te=>{if(te.target.closest("button, input, label"))return;N.current=!1;const Z=(j==null?void 0:j.top)??DEFAULT_TOP,X=(j==null?void 0:j.left)??window.innerWidth-DEFAULT_RIGHT-180;D.current={startX:te.clientX,startY:te.clientY,initTop:Z,initLeft:X};const de=ne=>{if(!D.current)return;const ue=ne.clientX-D.current.startX,ce=ne.clientY-D.current.startY;(Math.abs(ue)>3||Math.abs(ce)>3)&&(N.current=!0);const fe=180,ve=Math.max(HEADER_HEIGHT,D.current.initTop+ce),Te=Math.max(0,Math.min(window.innerWidth-fe,D.current.initLeft+ue));M({top:ve,left:Te})},he=()=>{D.current=null,window.removeEventListener("mousemove",de),window.removeEventListener("mouseup",he)};window.addEventListener("mousemove",de),window.addEventListener("mouseup",he)},[j]);if(!o)return null;const{done:H,total:O}=T(),V=O>0&&H===O,U=o.nodes.find(te=>te.confirmedOptionIds===null),W=o.nodes.find(te=>te.nodeId===P)||U,K=te=>{R(te.nodeId),L(te.confirmedOptionIds??[])},Y=te=>{L(Z=>Z.includes(te)?Z.filter(X=>X!==te):[...Z,te])},ee=()=>{!W||I.length===0||(u(W.nodeId,I),R(null),L([]))},oe=()=>{window.confirm("Kết thúc tiết học? Phiên hiện tại sẽ bị xóa.")&&(S(),_("collapsed"))},se=()=>{E("/mind-map?result=1",{state:{resultAt:Date.now()}})},Q=te=>te.confirmedOptionIds!==null?"✓":U&&te.nodeId===U.nodeId?"🟡":"🔒",ie=340,ae=8,re=j?{top:j.top,left:j.left,bottom:"auto",right:"auto"}:{top:DEFAULT_TOP,right:DEFAULT_RIGHT,bottom:"auto"},J=()=>{var ne;if(!j)return{top:DEFAULT_TOP,right:DEFAULT_RIGHT,bottom:"auto"};const te=((ne=F.current)==null?void 0:ne.offsetWidth)??180;let X=j.left+te/2-ie/2;X=Math.max(ae,Math.min(window.innerWidth-ie-ae,X));const de=window.innerHeight-200;return{top:Math.min(j.top,de),left:X,bottom:"auto",right:"auto"}};return C==="collapsed"?jsxRuntimeExports.jsxs("div",{ref:F,className:"mmfs-sticker",style:re,onMouseDown:B,onClick:()=>{N.current||_("panel")},children:[jsxRuntimeExports.jsx("div",{className:"mmfs-sticker__icon",children:"📌"}),jsxRuntimeExports.jsxs("div",{className:"mmfs-sticker__info",children:[jsxRuntimeExports.jsxs("span",{className:"mmfs-sticker__count",children:[H,"/",O]}),jsxRuntimeExports.jsx("span",{className:"mmfs-sticker__label",children:"Sơ đồ tư duy"})]}),jsxRuntimeExports.jsx("button",{className:"mmfs-sticker__close",title:"Kết thúc tiết học",onClick:te=>{te.stopPropagation(),oe()},children:"✕"})]}):jsxRuntimeExports.jsxs("div",{ref:F,className:"mmfs-panel",style:J(),onMouseDown:B,children:[jsxRuntimeExports.jsxs("div",{className:"mmfs-panel__header",style:{cursor:"grab"},children:[jsxRuntimeExports.jsxs("span",{className:"mmfs-panel__title",children:["📌 ",o.title]}),jsxRuntimeExports.jsx("div",{className:"mmfs-panel__header-actions",children:jsxRuntimeExports.jsx("button",{className:"mmfs-panel__min",title:"Thu gọn",onClick:()=>{_("collapsed"),R(null)},children:"—"})})]}),jsxRuntimeExports.jsxs("div",{className:"mmfs-panel__progress",children:[jsxRuntimeExports.jsx("div",{className:"mmfs-panel__progress-bar",children:jsxRuntimeExports.jsx("div",{className:"mmfs-panel__progress-fill",style:{width:O?`${H/O*100}%`:"0%"}})}),jsxRuntimeExports.jsxs("span",{className:"mmfs-panel__progress-text",children:[H,"/",O," nút"]})]}),W?jsxRuntimeExports.jsxs("div",{className:"mmfs-panel__current",children:[W.parentLabel?jsxRuntimeExports.jsx("div",{className:"mmfs-panel__node-parent",children:renderWithKaTeX(W.parentLabel)}):null,jsxRuntimeExports.jsx("div",{className:"mmfs-panel__node-label",children:renderWithKaTeX(W.label)}),jsxRuntimeExports.jsx("div",{className:"mmfs-panel__options",children:W.options.map(te=>{const Z=I.includes(te.id);return jsxRuntimeExports.jsxs("label",{className:`mmfs-opt ${Z?"mmfs-opt--checked":""}`,children:[jsxRuntimeExports.jsx("input",{type:"checkbox",checked:Z,onChange:()=>Y(te.id)}),jsxRuntimeExports.jsx("span",{children:renderWithKaTeX(te.text)})]},te.id)})}),jsxRuntimeExports.jsx("button",{className:"mmfs-panel__confirm",disabled:I.length===0,onClick:ee,children:"✓ Xác nhận"})]}):jsxRuntimeExports.jsx("div",{className:"mmfs-panel__current mmfs-panel__current--done",children:"🎉 Đã hoàn thành tất cả các nút!"}),jsxRuntimeExports.jsx("div",{className:"mmfs-panel__list",children:o.nodes.map(te=>{const Z=Q(te);return jsxRuntimeExports.jsxs("div",{className:`mmfs-row ${(W==null?void 0:W.nodeId)===te.nodeId?"mmfs-row--active":""}`,onClick:()=>K(te),children:[jsxRuntimeExports.jsx("span",{className:"mmfs-row__status",children:Z}),jsxRuntimeExports.jsxs("span",{className:"mmfs-row__label",children:[te.parentLabel?jsxRuntimeExports.jsxs("span",{className:"mmfs-row__parent",children:[renderWithKaTeX(te.parentLabel)," › "]}):null,renderWithKaTeX(te.label)]})]}
96,te.nodeId)})}),jsxRuntimeExports.jsxs("div",{className:"mmfs-panel__footer",children:[V&&jsxRuntimeExports.jsx("button",{className:"mmfs-panel__finish",onClick:se,children:"🎯 Hoàn thành sơ đồ"}),jsxRuntimeExports.jsx("button",{className:"mmfs-panel__end",onClick:oe,children:"Kết thúc"})]})]})}function ProtectedRoute({children:o}){const{currentUser:u,loading:T}=useAuth();return T?jsxRuntimeExports.jsx("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",minHeight:"100vh",background:"linear-gradient(135deg, #667eea 0%, #764ba2 100%)"},children:jsxRuntimeExports.jsx("div",{style:{color:"white",fontSize:"1.5em",fontWeight:"600"},children:"Đang tải..."})}):u?o:jsxRuntimeExports.jsx(Navigate,{to:"/login"})}function createChainedFunction(...o){return o.reduce((u,T)=>T==null?u:function(...E){u.apply(this,E),T.apply(this,E)},()=>{})}function GlobalStyles(o){return jsxRuntimeExports.jsx(GlobalStyles$1,{...o,defaultTheme:defaultTheme$1,themeId:THEME_ID})}function globalCss(o){return function(T){return jsxRuntimeExports.jsx(GlobalStyles,{styles:typeof o=="function"?S=>o({theme:S,...T}):o})}}function internal_createExtendSxProp(){return extendSxProp$1}const memoTheme=unstable_memoTheme;function useDefaultProps(o){return useDefaultProps$1(o)}function getSvgIconUtilityClass(o){return generateUtilityClass("MuiSvgIcon",o)}generateUtilityClasses("MuiSvgIcon",["root","colorPrimary","colorSecondary","colorAction","colorError","colorDisabled","fontSizeInherit","fontSizeSmall","fontSizeMedium","fontSizeLarge"]);const useUtilityClasses$N=o=>{const{color:u,fontSize:T,classes:S}=o,E={root:["root",u!=="inherit"&&`color${capitalize(u)}`,`fontSize${capitalize(T)}`]};return composeClasses(E,getSvgIconUtilityClass,S)},SvgIconRoot=styled("svg",{name:"MuiSvgIcon",slot:"Root",overridesResolver:(o,u)=>{const{ownerState:T}=o;return[u.root,T.color!=="inherit"&&u[`color${capitalize(T.color)}`],u[`fontSize${capitalize(T.fontSize)}`]]}})(memoTheme(({theme:o})=>{var u,T,S,E,C,_,P,R,I,L,j,M,D,F;return{userSelect:"none",width:"1em",height:"1em",display:"inline-block",flexShrink:0,transition:(E=(u=o.transitions)==null?void 0:u.create)==null?void 0:E.call(u,"fill",{duration:(S=(T=(o.vars??o).transitions)==null?void 0:T.duration)==null?void 0:S.shorter}),variants:[{props:N=>!N.hasSvgAsChild,style:{fill:"currentColor"}},{props:{fontSize:"inherit"},style:{fontSize:"inherit"}},{props:{fontSize:"small"},style:{fontSize:((_=(C=o.typography)==null?void 0:C.pxToRem)==null?void 0:_.call(C,20))||"1.25rem"}},{props:{fontSize:"medium"},style:{fontSize:((R=(P=o.typography)==null?void 0:P.pxToRem)==null?void 0:R.call(P,24))||"1.5rem"}},{props:{fontSize:"large"},style:{fontSize:((L=(I=o.typography)==null?void 0:I.pxToRem)==null?void 0:L.call(I,35))||"2.1875rem"}},...Object.entries((o.vars??o).palette).filter(([,N])=>N&&N.main).map(([N])=>{var G,B;return{props:{color:N},style:{color:(B=(G=(o.vars??o).palette)==null?void 0:G[N])==null?void 0:B.main}}}),{props:{color:"action"},style:{color:(M=(j=(o.vars??o).palette)==null?void 0:j.action)==null?void 0:M.active}},{props:{color:"disabled"},style:{color:(F=(D=(o.vars??o).palette)==null?void 0:D.action)==null?void 0:F.disabled}},{props:{color:"inherit"},style:{color:void 0}}]}})),SvgIcon=reactExports.forwardRef(function(u,T){const S=useDefaultProps({props:u,name:"MuiSvgIcon"}),{children:E,className:C,color:_="inherit",component:P="svg",fontSize:R="medium",htmlColor:I,inheritViewBox:L=!1,titleAccess:j,viewBox:M="0 0 24 24",...D}=S,F=reactExports.isValidElement(E)&&E.type==="svg",N={...S,color:_,component:P,fontSize:R,instanceFontSize:u.fontSize,inheritViewBox:L,viewBox:M,hasSvgAsChild:F},G={};L||(G.viewBox=M);const B=useUtilityClasses$N(N);return jsxRuntimeExports.jsxs(SvgIconRoot,{as:P,className:clsx(B.root,C),focusable:"false",color:I,"aria-hidden":j?void 0:!0,role:j?"img":void 0,ref:T,...G,...D,...F&&E.props,ownerState:N,children:[F?E.props.children:E,j?jsxRuntimeExports.jsx("title",{children:j}):null]})});SvgIcon.muiName="SvgIcon";function createSvgIcon(o,u){function T(S,E){return jsxRuntimeExports.jsx(SvgIcon,{"data-testid":void 0,ref:E,...S,children:o})}return T.muiName=SvgIcon.muiName,reactExports.memo(reactExports.forwardRef(T))}function debounce(o,u=166){let T;function S(...E){const C=()=>{o.apply(this,E)};clearTimeout(T),T=setTimeout(C,u)}return S.clear=()=>{clearTimeout(T)},S}function ownerDocument(o){return o&&o.ownerDocument||document}function ownerWindow(o){return ownerDocument(o).defaultView||window}function setRef(o,u){typeof o=="function"?o(u):o&&(o.current=u)}function useControlled(o){const{controlled:u,default:T,name:S,state:E="value"}=o,{current:C}=reactExports.useRef(u!==void 0),[_,P]=reactExports.useState(T),R=C?u:_,I=reactExports.useCallback(L=>{C||P(L)},[]);return[R,I]}function useEventCallback(o){const u=reactExports.useRef(o);return useEnhancedEffect(()=>{u.current=o}),reactExports.useRef((...T)=>(0,u.current)(...T)).current}function useForkRef(...o){const u=reactExports.useRef(void 0),T=reactExports.useCallback(S=>{const E=o.map(C=>{if(C==null)return null;if(typeof C=="function"){const _=C,P=_(S);return typeof P=="function"?P:()=>{_(null)}}return C.current=S,()=>{C.current=null}});return()=>
96{E.forEach(C=>C==null?void 0:C())}},o);return reactExports.useMemo(()=>o.every(S=>S==null)?null:S=>{u.current&&(u.current(),u.current=void 0),S!=null&&(u.current=T(S))},o)}function isEventHandler(o,u){const T=o.charCodeAt(2);return o[0]==="o"&&o[1]==="n"&&T>=65&&T<=90&&typeof u=="function"}function mergeSlotProps$1(o,u){if(!o)return u;function T(_,P){const R={};return Object.keys(P).forEach(I=>{isEventHandler(I,P[I])&&typeof _[I]=="function"&&(R[I]=(...L)=>{_[I](...L),P[I](...L)})}),R}if(typeof o=="function"||typeof u=="function")return _=>{const P=typeof u=="function"?u(_):u,R=typeof o=="function"?o({..._,...P}):o,I=clsx(_==null?void 0:_.className,P==null?void 0:P.className,R==null?void 0:R.className),L=T(R,P);return{...P,...R,...L,...!!I&&{className:I},...(P==null?void 0:P.style)&&(R==null?void 0:R.style)&&{style:{...P.style,...R.style}},...(P==null?void 0:P.sx)&&(R==null?void 0:R.sx)&&{sx:[...Array.isArray(P.sx)?P.sx:[P.sx],...Array.isArray(R.sx)?R.sx:[R.sx]]}}};const S=u,E=T(o,S),C=clsx(S==null?void 0:S.className,o==null?void 0:o.className);return{...u,...o,...E,...!!C&&{className:C},...(S==null?void 0:S.style)&&(o==null?void 0:o.style)&&{style:{...S.style,...o.style}},...(S==null?void 0:S.sx)&&(o==null?void 0:o.sx)&&{sx:[...Array.isArray(S.sx)?S.sx:[S.sx],...Array.isArray(o.sx)?o.sx:[o.sx]]}}}function _objectWithoutPropertiesLoose$1(o,u){if(o==null)return{};var T={};for(var S in o)if({}.hasOwnProperty.call(o,S)){if(u.indexOf(S)!==-1)continue;T[S]=o[S]}return T}function _setPrototypeOf(o,u){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(T,S){return T.__proto__=S,T},_setPrototypeOf(o,u)}function _inheritsLoose(o,u){o.prototype=Object.create(u.prototype),o.prototype.constructor=o,_setPrototypeOf(o,u)}const config={disabled:!1},TransitionGroupContext=React$1.createContext(null);var forceReflow=function(u){return u.scrollTop},UNMOUNTED="unmounted",EXITED="exited",ENTERING="entering",ENTERED="entered",EXITING="exiting",Transition=function(o){_inheritsLoose(u,o);function u(S,E){var C;C=o.call(this,S,E)||this;var _=E,P=_&&!_.isMounting?S.enter:S.appear,R;return C.appearStatus=null,S.in?P?(R=EXITED,C.appearStatus=ENTERING):R=ENTERED:S.unmountOnExit||S.mountOnEnter?R=UNMOUNTED:R=EXITED,C.state={status:R},C.nextCallback=null,C}u.getDerivedStateFromProps=function(E,C){var _=E.in;return _&&C.status===UNMOUNTED?{status:EXITED}:null};var T=u.prototype;return T.componentDidMount=function(){this.updateStatus(!0,this.appearStatus)},T.componentDidUpdate=function(E){var C=null;if(E!==this.props){var _=this.state.status;this.props.in?_!==ENTERING&&_!==ENTERED&&(C=ENTERING):(_===ENTERING||_===ENTERED)&&(C=EXITING)}this.updateStatus(!1,C)},T.componentWillUnmount=function(){this.cancelNextCallback()},T.getTimeouts=function(){var E=this.props.timeout,C,_,P;return C=_=P=E,E!=null&&typeof E!="number"&&(C=E.exit,_=E.enter,P=E.appear!==void 0?E.appear:_),{exit:C,enter:_,appear:P}},T.updateStatus=function(E,C){if(E===void 0&&(E=!1),C!==null)if(this.cancelNextCallback(),C===ENTERING){if(this.props.unmountOnExit||this.props.mountOnEnter){var _=this.props.nodeRef?this.props.nodeRef.current:ReactDOM.findDOMNode(this);_&&forceReflow(_)}this.performEnter(E)}else this.performExit();else this.props.unmountOnExit&&this.state.status===EXITED&&this.setState({status:UNMOUNTED})},T.performEnter=function(E){var C=this,_=this.props.enter,P=this.context?this.context.isMounting:E,R=this.props.nodeRef?[P]:[ReactDOM.findDOMNode(this),P],I=R[0],L=R[1],j=this.getTimeouts(),M=P?j.appear:j.enter;if(!E&&!_||config.disabled){this.safeSetState({status:ENTERED},function(){C.props.onEntered(I)});return}this.props.onEnter(I,L),this.safeSetState({status:ENTERING},function(){C.props.onEntering(I,L),C.onTransitionEnd(M,function(){C.safeSetState({status:ENTERED},function(){C.props.onEntered(I,L)})})})},T.performExit=function(){var E=this,C=this.props.exit,_=this.getTimeouts(),P=this.props.nodeRef?void 0:ReactDOM.findDOMNode(this);if(!C||config.disabled){this.safeSetState({status:EXITED},function(){E.props.onExited(P)});return}this.props.onExit(P),this.safeSetState({status:EXITING},function(){E.props.onExiting(P),E.onTransitionEnd(_.exit,function(){E.safeSetState({status:EXITED},function(){E.props.onExited(P)})})})},T.cancelNextCallback=function(){this.nextCallback!==null&&(this.nextCallback.cancel(),this.nextCallback=null)},T.safeSetState=function(E,C){C=this.setNextCallback(C),this.setState(E,C)},T.setNextCallback=function(E){var C=this,_=!0;return this.nextCallback=function(P){_&&(_=!1,C.nextCallback=null,E(P))},this.nextCallback.cancel=function(){_=!1},this.nextCallback},T.onTransitionEnd=function(E,C){this.setNextCallback(C);var _=this.props.nodeRef?this.props.nodeRef.current:ReactDOM.findDOMNode(this),P=E==null&&!this.props.addEndListener;if(!_||P){setTimeout(this.nextCallback,0);return}if(this.props.addEndListener){var R=this.props.nodeRef?[this.nextCallback]:[_,this.nextCallback],I=R[0],L=R[1];this.props.addEndListener(I,L)}E!=null&&setTimeout(this.nextCallback,E)},T.render=function(){var E=this.state.status;if(E===UNMOUNTED)return null;var C=this.props,_=C.children;C.in,C.mountOnEnter,C.unmountOnExit,C.appear,C.enter,C.exit,C.timeout,C.addEndListener,C.onEnter,C.onEntering,C.onEntered,C.onExit,C.onExiting,C.onExited,C.nodeRef;var P=_objectWithoutPropertiesLoose$1(C,["children","in","mountOnEnter","unmountOnExit","appear","enter","exit","timeout","addEndListener","onEnter","onEntering","onEntered","onExit","onExiting","onExited","nodeRef"]);return React$1.createElement(TransitionGroupContext.Provider,{value:null},typeof _=="function"?_(E,P):React$1.cloneElement(React$1.Children.only(_),P))},u}(React$1.Component);Transition.contextType=TransitionGroupContext;Transition.propTypes={};function noop$3(){}Transition.defaultProps={in:!1,mountOnEnter:!1,unmountOnExit:!1,appear:!1,enter
vendor: 1,323 bytes, line 96
96:!0,exit:!0,onEnter:noop$3,onEntering:noop$3,onEntered:noop$3,onExit:noop$3,onExiting:noop$3,onExited:noop$3};Transition.UNMOUNTED=UNMOUNTED;Transition.EXITED=EXITED;Transition.ENTERING=ENTERING;Transition.ENTERED=ENTERED;Transition.EXITING=EXITING;function _assertThisInitialized(o){if(o===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return o}function getChildMapping(o,u){var T=function(C){return u&&reactExports.isValidElement(C)?u(C):C},S=Object.create(null);return o&&reactExports.Children.map(o,function(E){return E}).forEach(function(E){S[E.key]=T(E)}),S}function mergeChildMappings(o,u){o=o||{},u=u||{};function T(L){return L in u?u[L]:o[L]}var S=Object.create(null),E=[];for(var C in o)C in u?E.length&&(S[C]=E,E=[]):E.push(C);var _,P={};for(var R in u){if(S[R])for(_=0;_<S[R].length;_++){var I=S[R][_];P[S[R][_]]=T(I)}P[R]=T(R)}for(_=0;_<E.length;_++)P[E[_]]=T(E[_]);return P}function getProp(o,u,T){return T[u]!=null?T[u]:o.props[u]}function getInitialChildMapping(o,u){return getChildMapping(o.children,function(T){return reactExports.cloneElement(T,{onExited:u.bind(null,T),in:!0,appear:getProp(T,"appear",o),enter:getProp(T,"enter",o),exit:getProp(T,"exit",o)})})}function getNextChildMapping(o,u,T){var S=getChildMapping(o.children),E=mergeChildMappings(u,S);
96return Object.keys(E).forEach(function(C){var _=E[C];if(reactExports.isValidElement(_)){var P=C in u,R=C in S,I=u[C],L=reactExports.isValidElement(I)&&!I.props.in;R&&(!P||L)?E[C]=reactExports.cloneElement(_,{onExited:T.bind(null,_),in:!0,exit:getProp(_,"exit",o),enter:getProp(_,"enter",o)}):!R&&P&&!L?E[C]=reactExports.cloneElement(_,{in:!1}):R&&P&&reactExports.isValidElement(I)&&(E[C]=reactExports.cloneElement(_,{onExited:T.bind(null,_),in:I.props.in,exit:getProp(_,"exit",o),enter:getProp(_,"enter",o)}))}}),E}var values=Object.values||function(o){return Object.keys(o).map(function(u){return o[u]})},defaultProps={component:"div",childFactory:function(u){return u}},TransitionGroup=function(o){_inheritsLoose(u,o);function u(S,E){var C;C=o.call(this,S,E)||this;var _=C.handleExited.bind(_assertThisInitialized(C));return C.state={contextValue:{isMounting:!0},handleExited:_,firstRender:!0},C}var T=u.prototype;return T.componentDidMount=function(){this.mounted=!0,this.setState({contextValue:{isMounting:!1}})},T.componentWillUnmount=function(){this.mounted=!1},u.getDerivedStateFromProps=function(E,C){var _=C.children,P=C.handleExited,R=C.firstRender;return{children:R?getInitialChildMapping(E,P):getNextChildMapping(E,_,P),firstRender:!1}},T.handleExited=function(E,C){var _=getChildMapping(this.props.children);E.key in _||(E.props.onExited&&E.props.onExited(C),this.mounted&&this.setState(function(P){var R=_extends$3({},P.children);return delete R[E.key],{children:R}}))},T.render=function(){var E=this.props,C=E.component,_=E.childFactory,P=_objectWithoutPropertiesLoose$1(E,["component","childFactory"]),R=this.state.contextValue,I=values(this.state.children).map(_);return delete P.appear,delete P.enter,delete P.exit,C===null?React$1.createElement(TransitionGroupContext.Provider,{value:R},I):React$1.createElement(TransitionGroupContext.Provider,{value:R},React$1.createElement(C,P,I))},u}(React$1.Component);TransitionGroup.propTypes={};TransitionGroup.defaultProps=defaultProps;const UNINITIALIZED={};function useLazyRef(o,u){const T=reactExports.useRef(UNINITIALIZED);return T.current===UNINITIALIZED&&(T.current=o(u)),T}const EMPTY=[];function useOnMount(o){reactExports.useEffect(o,EMPTY)}class Timeout{constructor(){pt(this,"currentId",null);pt(this,"clear",()=>{this.currentId!==null&&(clearTimeout(this.currentId),this.currentId=null)});pt(this,"disposeEffect",()=>this.clear)}
96static create(){return new Timeout}start(u,T){this.clear(),this.currentId=setTimeout(()=>{this.currentId=null,T()},u)}}function useTimeout(){const o=useLazyRef(Timeout.create).current;return useOnMount(o.disposeEffect),o}const reflow=o=>o.scrollTop;function getTransitionProps(o,u){const{timeout:T,easing:S,style:E={}}=o;return{duration:E.transitionDuration??(typeof T=="number"?T:T[u.mode]||0),easing:E.transitionTimingFunction??(typeof S=="object"?S[u.mode]:S),delay:E.transitionDelay}}function getCollapseUtilityClass(o){return generateUtilityClass("MuiCollapse",o)}generateUtilityClasses("MuiCollapse",["root","horizontal","vertical","entered","hidden","wrapper","wrapperInner"]);const useUtilityClasses$M=o=>{const{orientation:u,classes:T}=o,S={root:["root",`${u}`],entered:["entered"],hidden:["hidden"],wrapper:["wrapper",`${u}`],wrapperInner:["wrapperInner",`${u}`]};return composeClasses(S,getCollapseUtilityClass,T)},CollapseRoot=styled("div",{name:"MuiCollapse",slot:"Root",overridesResolver:(o,u)=>{const{ownerState:T}=o;return[u.root,u[T.orientation],T.state==="entered"&&u.entered,T.state==="exited"&&!T.in&&T.collapsedSize==="0px"&&u.hidden]}})(memoTheme(({theme:o})=>({height:0,overflow:"hidden",transition:o.transitions.create("height"),variants:[{props:{orientation:"horizontal"},style:{height:"auto",width:0,transition:o.transitions.create("width")}},{props:{state:"entered"},style:{height:"auto",overflow:"visible"}},{props:{state:"entered",orientation:"horizontal"},style:{width:"auto"}},{props:({ownerState:u})=>u.state==="exited"&&!u.in&&u.collapsedSize==="0px",style:{visibility:"hidden"}}]}))),CollapseWrapper=styled("div",{name:"MuiCollapse",slot:"Wrapper"})({display:"flex",width:"100%",variants:[{props:{orientation:"horizontal"},style:{width:"auto",height:"100%"}}]}),CollapseWrapperInner=styled("div",{name:"MuiCollapse",slot:"WrapperInner"})({width:"100%",variants:[{props:{orientation:"horizontal"},style:{width:"auto",height:"100%"}}]}),Collapse=reactExports.forwardRef(function(u,T){const S=useDefaultProps({props:u,name:"MuiCollapse"}),{addEndListener:E,children:C,className:_,collapsedSize:P="0px",component:R,easing:I,in:L,onEnter:j,onEntered:M,onEntering:D,onExit:F,onExited:N,onExiting:G,orientation:B="vertical",style:H,timeout:O=duration.standard,TransitionComponent:V=Transition,...U}=S,W={...S,orientation:B,collapsedSize:P},K=useUtilityClasses$M(W),Y=useTheme(),ee=useTimeout(),oe=reactExports.useRef(null),se=reactExports.useRef(),Q=typeof P=="number"?`${P}px`:P,ie=B==="horizontal",ae=ie?"width":"height",re=reactExports.useRef(null),J=useForkRef(T,re),te=ve=>Te=>{if(ve){const Se=re.current;Te===void 0?ve(Se):ve(Se,Te)}},Z=()=>oe.current?oe.current[ie?"clientWidth":"clientHeight"]:0,X=te((ve,Te)=>{oe.current&&ie&&(oe.current.style.position="absolute"),ve.style[ae]=Q,j&&j(ve,Te)}),de=te((ve,Te)=>{const Se=Z();oe.current&&ie&&(oe.current.style.position="");const{duration:ke,easing:we}=getTransitionProps({style:H,timeout:O,easing:I},{mode:"enter"});if(O==="auto"){const Le=Y.transitions.getAutoHeightDuration(Se);ve.style.transitionDuration=`${Le}ms`,se.current=Le}else ve.style.transitionDuration=typeof ke=="string"?ke:`${ke}ms`;ve.style[ae]=`${Se}px`,ve.style.transitionTimingFunction=we,D&&D(ve,Te)}),he=te((ve,Te)=>{ve.style[ae]="auto",M&&M(ve,Te)}),ne=te(ve=>{ve.style[ae]=`${Z()}px`,F&&F(ve)}),ue=te(N),ce=te(ve=>{const Te=Z(),{duration:Se,easing:ke}=getTransitionProps({style:H,timeout:O,easing:I},{mode:"exit"});if(O==="auto"){const we=Y.transitions.getAutoHeightDuration(Te);ve.style.transitionDuration=`${we}ms`,se.current=we}else ve.style.transitionDuration=typeof Se=="string"?Se:`${Se}ms`;ve.style[ae]=Q,ve.style.transitionTimingFunction=ke,G&&G(ve)}),fe=ve=>{O==="auto"&&ee.start(se.current||0,ve),E&&E(re.current,ve)};return jsxRuntimeExports.jsx(V,{in:L,onEnter:X,onEntered:he,onEntering:de,onExit:ne,onExited:ue,onExiting:ce,addEndListener:fe,nodeRef:re,timeout:O==="auto"?null:O,...U,children:(ve,{ownerState:Te,...Se})=>jsxRuntimeExports.jsx(CollapseRoot,{as:R,className:clsx(K.root,_,{entered:K.entered,exited:!L&&Q==="0px"&&K.hidden}[ve]),style:{[ie?"minWidth":"minHeight"]:Q,...H},ref:J,ownerState:{...W,state:ve},...Se,children:jsxRuntimeExports.jsx(CollapseWrapper,{ownerState:{...W,state:ve},className:K.wrapper,ref:oe,children:jsxRuntimeExports.jsx(CollapseWrapperInner,{ownerState:{...W,state:ve},className:K.wrapperInner,children:C})})})})});Collapse&&(Collapse.muiSupportAuto=!0);function getPaperUtilityClass(o){return generateUtilityClass("MuiPaper",o)}generateUtilityClasses("MuiPaper",["root","rounded","outlined","elevation","elevation0","elevation1","elevation2","elevation3","elevation4","elevation5","elevation6","elevation7","elevation8","elevation9","elevation10","elevation11","elevation12","elevation13","elevation14","elevation15","elevation16","elevation17","elevation18","elevation19","elevation20","elevation21","elevation22","elevation23","elevation24"]);const useUtilityClasses$L=o=>{const{square:u,elevation:T,variant:S,classes:E}=o,C={root:["root",S,!u&&"rounded",S==="elevation"&&`elevation${T}`]};return composeClasses(C,getPaperUtilityClass,E)},PaperRoot=styled("div",{name:"MuiPaper",slot:"Root",overridesResolver:(o,u)=>{const{ownerState:T}=o;
96return[u.root,u[T.variant],!T.square&&u.rounded,T.variant==="elevation"&&u[`elevation${T.elevation}`]]}})(memoTheme(({theme:o})=>({backgroundColor:(o.vars||o).palette.background.paper,color:(o.vars||o).palette.text.primary,transition:o.transitions.create("box-shadow"),variants:[{props:({ownerState:u})=>!u.square,style:{borderRadius:o.shape.borderRadius}},{props:{variant:"outlined"},style:{border:`1px solid ${(o.vars||o).palette.divider}`}},{props:{variant:"elevation"},style:{boxShadow:"var(--Paper-shadow)",backgroundImage:"var(--Paper-overlay)"}}]}))),Paper=reactExports.forwardRef(function(u,T){var D;const S=useDefaultProps({props:u,name:"MuiPaper"}),E=useTheme(),{className:C,component:_="div",elevation:P=1,square:R=!1,variant:I="elevation",...L}=S,j={...S,component:_,elevation:P,square:R,variant:I},M=useUtilityClasses$L(j);return jsxRuntimeExports.jsx(PaperRoot,{as:_,ownerState:j,className:clsx(M.root,C),ref:T,...L,style:{...I==="elevation"&&{"--Paper-shadow":(E.vars||E).shadows[P],...E.vars&&{"--Paper-overlay":(D=E.vars.overlays)==null?void 0:D[P]},...!E.vars&&E.palette.mode==="dark"&&{"--Paper-overlay":`linear-gradient(${alpha$1("#fff",getOverlayAlpha(P))}, ${alpha$1("#fff",getOverlayAlpha(P))})`}},...L.style}})});function isHostComponent(o){return typeof o=="string"}function appendOwnerState(o,u,T){return o===void 0||isHostComponent(o)?u:{...u,ownerState:{...u.ownerState,...T}}}function resolveComponentProps(o,u,T){return typeof o=="function"?o(u,T):o}function extractEventHandlers(o,u=[]){if(o===void 0)return{};const T={};return Object.keys(o).filter(S=>S.match(/^on[A-Z]/)&&typeof o[S]=="function"&&!u.includes(S)).forEach(S=>{T[S]=o[S]}),T}function omitEventHandlers(o){if(o===void 0)return{};const u={};return Object.keys(o).filter(T=>!(T.match(/^on[A-Z]/)&&typeof o[T]=="function")).forEach(T=>{u[T]=o[T]}),u}function mergeSlotProps(o){const{getSlotProps:u,additionalProps:T,externalSlotProps:S,externalForwardedProps:E,className:C}=o;if(!u){const D=clsx(T==null?void 0:T.className,C,E==null?void 0:E.className,S==null?void 0:S.className),F={...T==null?void 0:T.style,...E==null?void 0:E.style,...S==null?void 0:S.style},N={...T,...E,...S};return D.length>0&&(N.className=D),Object.keys(F).length>0&&(N.style=F),{props:N,internalRef:void 0}}const _=extractEventHandlers({...E,...S}),P=omitEventHandlers(S),R=omitEventHandlers(E),I=u(_),L=clsx(I==null?void 0:I.className,T==null?void 0:T.className,C,E==null?void 0:E.className,S==null?void 0:S.className),j={...I==null?void 0:I.style,...T==null?void 0:T.style,...E==null?void 0:E.style,...S==null?void 0:S.style},M={...I,...T,...R,...P};return L.length>0&&(M.className=L),Object.keys(j).length>0&&(M.style=j),{props:M,internalRef:I.ref}}function useSlot(o,u){const{className:T,elementType:S,ownerState:E,externalForwardedProps:C,internalForwardedProps:_,shouldForwardComponentProp:P=!1,...R}=u,{component:I,slots:L={[o]:void 0},slotProps:j={[o]:void 0},...M}=C,D=L[o]||S,F=resolveComponentProps(j[o],E),{props:{component:N,...G},internalRef:B}=mergeSlotProps({className:T,...R,externalForwardedProps:o==="root"?M:void 0,externalSlotProps:F}),H=useForkRef(B,F==null?void 0:F.ref,u.ref),O=o==="root"?N||I:N,V=appendOwnerState(D,{...o==="root"&&!I&&!L[o]&&_,...o!=="root"&&!L[o]&&_,...G,...O&&!P&&{as:O},...O&&P&&{component:O},ref:H},E);return[D,V]}function isFocusVisible(o){try{return o.matches(":focus-visible")}catch{}return!1}class LazyRipple{constructor(){pt(this,"mountEffect",()=>{this.shouldMount&&!this.didMount&&this.ref.current!==null&&(this.didMount=!0,this.mounted.resolve())});this.ref={current:null},this.mounted=null,this.didMount=!1,this.shouldMount=!1,this.setShouldMount=null}static create(){return new LazyRipple}static use(){const u=useLazyRef(LazyRipple.create).current,[T,S]=reactExports.useState(!1);return u.shouldMount=T,u.setShouldMount=S,reactExports.useEffect(u.mountEffect,[T]),u}mount(){return this.mounted||(this.mounted=createControlledPromise(),this.shouldMount=!0,this.setShouldMount(this.shouldMount)),this.mounted}start(...u){this.mount().then(()=>{var T;return(T=this.ref.current)==null?void 0:T.start(...u)})}stop(...u){this.mount().then(()=>{var T;return(T=this.ref.current)==null?void 0:T.stop(...u)})}pulsate(...u){this.mount().then(()=>{var T;return(T=this.ref.current)==null?void 0:T.pulsate(...u)})}}function useLazyRipple(){return LazyRipple.use()}function createControlledPromise(){let o,u;const T=new Promise((S,E)=>{o=S,u=E});return T.resolve=o,T.reject=u,T}function Ripple(o){const{className:u,classes:T,pulsate:S=!1,rippleX:E,rippleY:C,rippleSize:_,in:P,onExited:R,timeout:I}=o,[L,j]=reactExports.useState(!1),M=clsx(u,T.ripple,T.rippleVisible,S&&T.ripplePulsate),D={width:_,height:_,top:-(_/2)+C,left:-(_/2)+E},F=clsx(T.child,L&&T.childLeaving,S&&T.childPulsate);return!P&&!L&&j(!0),reactExports.useEffect(()=>{if(!P&&R!=null){const N=setTimeout(R,I);return()=>{clearTimeout(N)}}},[R,P,I]),jsxRuntimeExports.jsx("span",{className:M,style:D,children:jsxRuntimeExports.jsx("span",{className:F})})}const touchRippleClasses=generateUtilityClasses("MuiTouchRipple",["root","ripple","rippleVisible","ripplePulsate","child","childLeaving","childPulsate"]),DURATION=550,DELAY_RIPPLE=80,enterKeyframe=keyframes$1`
97  0% {
98    transform: scale(0);
99    opacity: 0.1;
100  }
101
102  100% {
103    transform: scale(1);
104    opacity: 0.3;
105  }
106`,exitKeyframe=keyframes$1`
107  0% {
108    opacity: 1;
109  }
110
111  100% {
112    opacity: 0;
113  }
114`,pulsateKeyframe=keyframes$1`
115  0% {
116    transform: scale(1);
117  }
118
119  50% {
120    transform: scale(0.92);
121  }
122
123  100% {
124    transform: scale(1);
125  }
126`,TouchRippleRoot=styled("span",{name:"MuiTouchRipple",slot:"Root"})({overflow:"hidden",pointerEvents:"none",position:"absolute",zIndex:0,top:0,right:0,bottom:0,left:0,borderRadius:"inherit"}),TouchRippleRipple=styled(Ripple,{name:"MuiTouchRipple",slot:"Ripple"})`
127  opacity: 0;
128  position: absolute;
129
130  &.${touchRippleClasses.rippleVisible} {
131    opacity: 0.3;
132    transform: scale(1);
133    animation-name: ${enterKeyframe};
134    animation-duration: ${DURATION}ms;
135    animation-timing-function: ${({theme:o})=>o.transitions.easing.easeInOut};
136  }
137
138  &.${touchRippleClasses.ripplePulsate} {
139    animation-duration: ${({theme:o})=>o.transitions.duration.shorter}ms;
140  }
141
142  & .${touchRippleClasses.child} {
143    opacity: 1;
144    display: block;
145    width: 100%;
146    height: 100%;
147    border-radius: 50%;
148    background-color: currentColor;
149  }
150
151  & .${touchRippleClasses.childLeaving} {
152    opacity: 0;
153    animation-name: ${exitKeyframe};
154    animation-duration: ${DURATION}ms;
155    animation-timing-function: ${({theme:o})=>o.transitions.easing.easeInOut};
156  }
157
158  & .${touchRippleClasses.childPulsate} {
159    position: absolute;
160    /* @noflip */
161    left: 0px;
162    top: 0;
163    animation-name: ${pulsateKeyframe};
164    animation-duration: 2500ms;
165    animation-timing-function: ${({theme:o})=>o.transitions.easing.easeInOut};
166    animation-iteration-count: infinite;
167    animation-delay: 200ms;
168  }
169`,TouchRipple=reactExports.forwardRef(function(u,T){const S=useDefaultProps({props:u,name:"MuiTouchRipple"}),{center:E=!1,classes:C={},className:_,...P}=S,[R,I]=reactExports.useState([]),L=reactExports.useRef(0),j=reactExports.useRef(null);reactExports.useEffect(()=>{j.current&&(j.current(),j.current=null)},[R]);const M=reactExports.useRef(!1),D=useTimeout(),F=reactExports.useRef(null),N=reactExports.useRef(null),G=reactExports.useCallback(V=>{const{pulsate:U,rippleX:W,rippleY:K,rippleSize:Y,cb:ee}=V;I(oe=>[...oe,jsxRuntimeExports.jsx(TouchRippleRipple,{classes:{ripple:clsx(C.r
169ipple,touchRippleClasses.ripple),rippleVisible:clsx(C.rippleVisible,touchRippleClasses.rippleVisible),ripplePulsate:clsx(C.ripplePulsate,touchRippleClasses.ripplePulsate),child:clsx(C.child,touchRippleClasses.child),childLeaving:clsx(C.childLeaving,touchRippleClasses.childLeaving),childPulsate:clsx(C.childPulsate,touchRippleClasses.childPulsate)},timeout:DURATION,pulsate:U,rippleX:W,rippleY:K,rippleSize:Y},L.current)]),L.current+=1,j.current=ee},[C]),B=reactExports.useCallback((V={},U={},W=()=>{})=>{const{pulsate:K=!1,center:Y=E||U.pulsate,fakeElement:ee=!1}=U;if((V==null?void 0:V.type)==="mousedown"&&M.current){M.current=!1;return}(V==null?void 0:V.type)==="touchstart"&&(M.current=!0);const oe=ee?null:N.current,se=oe?oe.getBoundingClientRect():{width:0,height:0,left:0,top:0};let Q,ie,ae;if(Y||V===void 0||V.clientX===0&&V.clientY===0||!V.clientX&&!V.touches)Q=Math.round(se.width/2),ie=Math.round(se.height/2);else{const{clientX:re,clientY:J}=V.touches&&V.touches.length>0?V.touches[0]:V;Q=Math.round(re-se.left),ie=Math.round(J-se.top)}if(Y)ae=Math.sqrt((2*se.width**2+se.height**2)/3),ae%2===0&&(ae+=1);else{const re=Math.max(Math.abs((oe?oe.clientWidth:0)-Q),Q)*2+2,J=Math.max(Math.abs((oe?oe.clientHeight:0)-ie),ie)*2+2;ae=Math.sqrt(re**2+J**2)}V!=null&&V.touches?F.current===null&&(F.current=()=>{G({pulsate:K,rippleX:Q,rippleY:ie,rippleSize:ae,cb:W})},D.start(DELAY_RIPPLE,()=>{F.current&&(F.current(),F.current=null)})):G({pulsate:K,rippleX:Q,rippleY:ie,rippleSize:ae,cb:W})},[E,G,D]),H=reactExports.useCallback(()=>{B({},{pulsate:!0})},[B]),O=reactExports.useCallback((V,U)=>{if(D.clear(),(V==null?void 0:V.type)==="touchend"&&F.current){F.current(),F.current=null,D.start(0,()=>{O(V,U)});return}F.current=null,I(W=>W.length>0?W.slice(1):W),j.current=U},[D]);return reactExports.useImperativeHandle(T,()=>({pulsate:H,start:B,stop:O}),[H,B,O]),jsxRuntimeExports.jsx(TouchRippleRoot,{className:clsx(touchRippleClasses.root,C.root,_),ref:N,...P,children:jsxRuntimeExports.jsx(TransitionGroup,{component:null,exit:!0,children:R})})});function getButtonBaseUtilityClass(o){return generateUtilityClass("MuiButtonBase",o)}const buttonBaseClasses=generateUtilityClasses("MuiButtonBase",["root","disabled","focusVisible"]),useUtilityClasses$K=o=>{const{disabled:u,focusVisible:T,focusVisibleClassName:S,classes:E}=o,_=composeClasses({root:["root",u&&"disabled",T&&"focusVisible"]},getButtonBaseUtilityClass,E);return T&&S&&(_.root+=` ${S}`),_},ButtonBaseRoot=styled("button",{name:"MuiButtonBase",slot:"Root"})({display:"inline-flex",alignItems:"center",justifyContent:"center",position:"relative",boxSizing:"border-box",WebkitTapHighlightColor:"transparent",backgroundColor:"transparent",outline:0,border:0,margin:0,borderRadius:0,padding:0,cursor:"pointer",userSelect:"none",verticalAlign:"middle",MozAppearance:"none",WebkitAppearance:"none",textDecoration:"none",color:"inherit","&::-moz-focus-inner":{borderStyle:"none"},[`&.${buttonBaseClasses.disabled}`]:{pointerEvents:"none",cursor:"default"},"@media print":{colorAdjust:"exact"}}),ButtonBase=reactExports.forwardRef(function(u,T){const S=useDefaultProps({props:u,name:"MuiButtonBase"}),{action:E,centerRipple:C=!1,children:_,className:P,component:R="button",disabled:I=!1,disableRipple:L=!1,disableTouchRipple:j=!1,focusRipple:M=!1,focusVisibleClassName:D,LinkComponent:F="a",onBlur:N,onClick:G,onContextMenu:B,onDragLeave:H,onFocus:O,onFocusVisible:V,onKeyDown:U,onKeyUp:W,onMouseDown:K,onMouseLeave:Y,onMouseUp:ee,onTouchEnd:oe,onTouchMove:se,onTouchStart:Q,tabIndex:ie=0,TouchRippleProps:ae,touchRippleRef:re,type:J,...te}=S,Z=reactExports.useRef(null),X=useLazyRipple(),de=useForkRef(X.ref,re),[he,ne]=reactExports.useState(!1);I&&he&&ne(!1),reactExports.useImperativeHandle(E,()=>({focusVisible:()=>{ne(!0),Z.current.focus()}}),[]);const ue=X.shouldMount&&!L&&!I;reactExports.useEffect(()=>{he&&M&&!L&&X.pulsate()},[L,M,he,X]);const ce=useRippleHandler(X,"start",K,j),fe=useRippleHandler(X,"stop",B,j),ve=useRippleHandler(X,"stop",H,j),Te=useRippleHandler(X,"stop",ee,j),Se=useRippleHandler(X,"stop",ze=>{he&&ze.preventDefault(),Y&&Y(ze)},j),ke=useRippleHandler(X,"start",Q,j),we=useRippleHandler(X,"stop",oe,j),Le=useRippleHandler(X,"stop",se,j),pe=useRippleHandler(X,"stop",ze=>{isFocusVisible(ze.target)||ne(!1),N&&N(ze)},!1),Me=useEventCallback(ze=>{Z.current||(Z.current=ze.currentTarget),isFocusVisible(ze.target)&&(ne(!0),V&&V(ze)),O&&O(ze)}),Pe=()=>{const ze=Z.current;return R&&R!=="button"&&!(ze.tagName==="A"&&ze.href)},Ue=useEventCallback(ze=>{M&&!ze.repeat&&he&&ze.key===" "&&X.stop(ze,()=>{X.start(ze)}),ze.target===ze.currentTarget&&Pe()&&ze.key===" "&&ze.preventDefault(),U&&U(ze),ze.target===ze.currentTarget&&Pe()&&ze.key==="Enter"&&!I&&(ze.preventDefault(),G&&G(ze))}),qe=useEventCallback(ze=>{M&&ze.key===" "&&he&&!ze.defaultPrevented&&X.stop(ze,()=>{X.pulsate(ze)}),W&&W(ze),G&&ze.target===ze.currentTarget&&Pe()&&ze.key===" "&&!ze.defaultPrevented&&G(ze)});let Ie=R;Ie==="button"&&(te.href||te.to)&&(Ie=F);const Xe={};Ie==="button"?(Xe.type=J===void 0?"button":J,Xe.disabled=I):(!te.href&&!te.to&&(Xe.role="button"),I&&(Xe["aria-disabled"]=I));const et=useForkRef(T,Z),tt={...S,centerRipple:C,component:R,disabled:I,disableRipple:L,disableTouchRipple:j,focusRipple:M,tabIndex:ie,focu
169sVisible:he},Ye=useUtilityClasses$K(tt);return jsxRuntimeExports.jsxs(ButtonBaseRoot,{as:Ie,className:clsx(Ye.root,P),ownerState:tt,onBlur:pe,onClick:G,onContextMenu:fe,onFocus:Me,onKeyDown:Ue,onKeyUp:qe,onMouseDown:ce,onMouseLeave:Se,onMouseUp:Te,onDragLeave:ve,onTouchEnd:we,onTouchMove:Le,onTouchStart:ke,ref:et,tabIndex:I?-1:ie,type:J,...Xe,...te,children:[_,ue?jsxRuntimeExports.jsx(TouchRipple,{ref:de,center:C,...ae}):null]})});function useRippleHandler(o,u,T,S=!1){return useEventCallback(E=>(T&&T(E),S||o[u](E),!0))}function hasCorrectMainProperty(o){return typeof o.main=="string"}function checkSimplePaletteColorValues(o,u=[]){if(!hasCorrectMainProperty(o))return!1;for(const T of u)if(!o.hasOwnProperty(T)||typeof o[T]!="string")return!1;return!0}function createSimplePaletteValueFilter(o=[]){return([,u])=>u&&checkSimplePaletteColorValues(u,o)}function getAlertUtilityClass(o){return generateUtilityClass("MuiAlert",o)}const alertClasses=generateUtilityClasses("MuiAlert",["root","action","icon","message","filled","colorSuccess","colorInfo","colorWarning","colorError","filledSuccess","filledInfo","filledWarning","filledError","outlined","outlinedSuccess","outlinedInfo","outlinedWarning","outlinedError","standard","standardSuccess","standardInfo","standardWarning","standardError"]);function getCircularProgressUtilityClass(o){return generateUtilityClass("MuiCircularProgress",o)}generateUtilityClasses("MuiCircularProgress",["root","determinate","indeterminate","colorPrimary","colorSecondary","svg","track","circle","circleDeterminate","circleIndeterminate","circleDisableShrink"]);const SIZE=44,circularRotateKeyframe=keyframes$1`
170  0% {
171    transform: rotate(0deg);
172  }
173
174  100% {
175    transform: rotate(360deg);
176  }
177`,circularDashKeyframe=keyframes$1`
178  0% {
179    stroke-dasharray: 1px, 200px;
180    stroke-dashoffset: 0;
181  }
182
183  50% {
184    stroke-dasharray: 100px, 200px;
185    stroke-dashoffset: -15px;
186  }
187
188  100% {
189    stroke-dasharray: 1px, 200px;
190    stroke-dashoffset: -126px;
191  }
192`,rotateAnimation=typeof circularRotateKeyframe!="string"?css`
193        animation: ${circularRotateKeyframe} 1.4s linear infinite;
194      `:null,dashAnimation=typeof circularDashKeyframe!="string"?css`
195        animation: ${circularDashKeyframe} 1.4s ease-in-out infinite;
196      `:null,useUtilityClasses$J=o=>{const{classes:u,variant:T,color:S,disableShrink:E}=o,C={root:["root",T,`color${capitalize(S)}`],svg:["svg"],track:["track"],circle:["circle",`circle${capitalize(T)}`,E&&"circleDisableShrink"]};return composeClasses(C,getCircularProgressUtilityClass,u)},CircularProgressRoot=styled("span",{name:"MuiCircularProgress",slot:"Root",overridesResolver:(o,u)=>{const{ownerState:T}=o;return[u.root,u[T.variant],u[`color${capitalize(T.color)}`]]}})(memoTheme(({theme:o})=>({display:"inline-block",variants:[{props:{variant:"determinate"},style:{transition:o.transitions.create("transform")}},{props:{variant:"indeterminate"},style:rotateAnimation||{animation:`${circularRotateKeyframe} 1.4s linear infinite`}},...Object.entries(o.palette).filter(createSimplePaletteValueFilter()).map(([u])=>({props:{color:u},style:{color:(o.vars||o).palette[u].main}}))]}))),CircularProgressSVG=styled("svg",{name:"MuiCircularProgress",slot:"Svg"})({display:"block"}),CircularProgressCircle=styled("circle",{name:"MuiCircularProgress",slot:"Circle",overridesResolver:(o,u)=>{const{ownerState:T}=o;return[u.circle,u[`circle${capitalize(T.variant)}`],T.disableShrink&&u.circleDisableShrink]}})(memoTheme(({theme:o})=>({stroke:"currentColor",variants:[{props:{variant:"determinate"},style:{transition:o.transitions.create("stroke-dashoffset")}},{props:{variant:"indeterminate"},style:{strokeDasharray:"80px, 200px",strokeDashoffset:0}},{props:({ownerState:u})=>u.variant==="indeterminate"&&!u.disableShrink,style:dashAnimation||{animation:`${circularDashKeyframe} 1.4s ease-in-out infinite`}}]}))),CircularProgressTrack=styled("circle",{name:"MuiCircularProgress",slot:"Track"})(memoTheme(({theme:o})=>({stroke:"currentColor",opacity:(o.vars||o).palette.action.activatedOpacity}))),CircularProgress=reactExports.forwardRef(function(u,T){const S=useDefaultProps({props:u,name:"MuiCircularProgress"}
196),{className:E,color:C="primary",disableShrink:_=!1,enableTrackSlot:P=!1,size:R=40,style:I,thickness:L=3.6,value:j=0,variant:M="indeterminate",...D}=S,F={...S,color:C,disableShrink:_,size:R,thickness:L,value:j,variant:M,enableTrackSlot:P},N=useUtilityClasses$J(F),G={},B={},H={};if(M==="determinate"){const O=2*Math.PI*((SIZE-L)/2);G.strokeDasharray=O.toFixed(3),H["aria-valuenow"]=Math.round(j),G.strokeDashoffset=`${((100-j)/100*O).toFixed(3)}px`,B.transform="rotate(-90deg)"}return jsxRuntimeExports.jsx(CircularProgressRoot,{className:clsx(N.root,E),style:{width:R,height:R,...B,...I},ownerState:F,ref:T,role:"progressbar",...H,...D,children:jsxRuntimeExports.jsxs(CircularProgressSVG,{className:N.svg,ownerState:F,viewBox:`${SIZE/2} ${SIZE/2} ${SIZE} ${SIZE}`,children:[P?jsxRuntimeExports.jsx(CircularProgressTrack,{className:N.track,ownerState:F,cx:SIZE,cy:SIZE,r:(SIZE-L)/2,fill:"none",strokeWidth:L,"aria-hidden":"true"}):null,jsxRuntimeExports.jsx(CircularProgressCircle,{className:N.circle,style:G,ownerState:F,cx:SIZE,cy:SIZE,r:(SIZE-L)/2,fill:"none",strokeWidth:L})]})})});function getIconButtonUtilityClass(o){return generateUtilityClass("MuiIconButton",o)}const iconButtonClasses=generateUtilityClasses("MuiIconButton",["root","disabled","colorInherit","colorPrimary","colorSecondary","colorError","colorInfo","colorSuccess","colorWarning","edgeStart","edgeEnd","sizeSmall","sizeMedium","sizeLarge","loading","loadingIndicator","loadingWrapper"]),useUtilityClasses$I=o=>{const{classes:u,disabled:T,color:S,edge:E,size:C,loading:_}=o,P={root:["root",_&&"loading",T&&"disabled",S!=="default"&&`color${capitalize(S)}`,E&&`edge${capitalize(E)}`,`size${capitalize(C)}`],loadingIndicator:["loadingIndicator"],loadingWrapper:["loadingWrapper"]};return composeClasses(P,getIconButtonUtilityClass,u)},IconButtonRoot=styled(ButtonBase,{name:"MuiIconButton",slot:"Root",overridesResolver:(o,u)=>{const{ownerState:T}=o;return[u.root,T.loading&&u.loading,T.color!=="default"&&u[`color${capitalize(T.color)}`],T.edge&&u[`edge${capitalize(T.edge)}`],u[`size${capitalize(T.size)}`]]}})(memoTheme(({theme:o})=>({textAlign:"center",flex:"0 0 auto",fontSize:o.typography.pxToRem(24),padding:8,borderRadius:"50%",color:(o.vars||o).palette.action.active,transition:o.transitions.create("background-color",{duration:o.transitions.duration.shortest}),variants:[{props:u=>!u.disableRipple,style:{"--IconButton-hoverBg":o.alpha((o.vars||o).palette.action.active,(o.vars||o).palette.action.hoverOpacity),"&:hover":{backgroundColor:"var(--IconButton-hoverBg)","@media (hover: none)":{backgroundColor:"transparent"}}}},{props:{edge:"start"},style:{marginLeft:-12}},{props:{edge:"start",size:"small"},style:{marginLeft:-3}},{props:{edge:"end"},style:{marginRight:-12}},{props:{edge:"end",size:"small"},style:{marginRight:-3}}]})),memoTheme(({theme:o})=>({variants:[{props:{color:"inherit"},style:{color:"inherit"}},...Object.entries(o.palette).filter(createSimplePaletteValueFilter()).map(([u])=>({props:{color:u},style:{color:(o.vars||o).palette[u].main}})),...Object.entries(o.palette).filter(createSimplePaletteValueFilter()).map(([u])=>({props:{color:u},style:{"--IconButton-hoverBg":o.alpha((o.vars||o).palette[u].main,(o.vars||o).palette.action.hoverOpacity)}})),{props:{size:"small"},style:{padding:5,fontSize:o.typography.pxToRem(18)}},{props:{size:"large"},style:{padding:12,fontSize:o.typography.pxToRem(28)}}],[`&.${iconButtonClasses.disabled}`]:{backgroundColor:"transparent",color:(o.vars||o).palette.action.disabled},[`&.${iconButtonClasses.loading}`]:{color:"transparent"}}))),IconButtonLoadingIndicator=styled("span",{name:"MuiIconButton",slot:"LoadingIndicator"})(({theme:o})=>({display:"none",position:"absolute",visibility:"visible",top:"50%",left:"50%",transform:"translate(-50%, -50%)",color:(o.vars||o).palette.action.disabled,variants:[{props:{loading:!0},style:{display:"flex"}}]})),IconButton=reactExports.forwardRef(function(u,T){const S=useDefaultProps({props:u,name:"MuiIconButton"}),{edge:E=!1,children:C,className:_,color:P="default",disabled:R=!1,disableFocusRipple:I=!1,size:L="medium",id:j,loading:M=null,loadingIndicator:D,...F}
196=S,N=useId(j),G=D??jsxRuntimeExports.jsx(CircularProgress,{"aria-labelledby":N,color:"inherit",size:16}),B={...S,edge:E,color:P,disabled:R,disableFocusRipple:I,loading:M,loadingIndicator:G,size:L},H=useUtilityClasses$I(B);return jsxRuntimeExports.jsxs(IconButtonRoot,{id:M?N:j,className:clsx(H.root,_),centerRipple:!0,focusRipple:!I,disabled:R||M,ref:T,...F,ownerState:B,children:[typeof M=="boolean"&&jsxRuntimeExports.jsx("span",{className:H.loadingWrapper,style:{display:"contents"},children:jsxRuntimeExports.jsx(IconButtonLoadingIndicator,{className:H.loadingIndicator,ownerState:B,children:M&&G})}),C]})}),SuccessOutlinedIcon=createSvgIcon(jsxRuntimeExports.jsx("path",{d:"M20,12A8,8 0 0,1 12,20A8,8 0 0,1 4,12A8,8 0 0,1 12,4C12.76,4 13.5,4.11 14.2, 4.31L15.77,2.74C14.61,2.26 13.34,2 12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0, 0 22,12M7.91,10.08L6.5,11.5L11,16L21,6L19.59,4.58L11,13.17L7.91,10.08Z"})),ReportProblemOutlinedIcon=createSvgIcon(jsxRuntimeExports.jsx("path",{d:"M12 5.99L19.53 19H4.47L12 5.99M12 2L1 21h22L12 2zm1 14h-2v2h2v-2zm0-6h-2v4h2v-4z"})),ErrorOutlineIcon=createSvgIcon(jsxRuntimeExports.jsx("path",{d:"M11 15h2v2h-2zm0-8h2v6h-2zm.99-5C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"})),InfoOutlinedIcon=createSvgIcon(jsxRuntimeExports.jsx("path",{d:"M11,9H13V7H11M12,20C7.59,20 4,16.41 4,12C4,7.59 7.59,4 12,4C16.41,4 20,7.59 20, 12C20,16.41 16.41,20 12,20M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10, 10 0 0,0 12,2M11,17H13V11H11V17Z"})),ClearIcon=createSvgIcon(jsxRuntimeExports.jsx("path",{d:"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"})),useUtilityClasses$H=o=>{const{variant:u,color:T,severity:S,classes:E}=o,C={root:["root",`color${capitalize(T||S)}`,`${u}${capitalize(T||S)}`,`${u}`],icon:["icon"],message:["message"],action:["action"]};return composeClasses(C,getAlertUtilityClass,E)},AlertRoot=styled(Paper,{name:"MuiAlert",slot:"Root",overridesResolver:(o,u)=>{const{ownerState:T}=o;return[u.root,u[T.variant],u[`${T.variant}${capitalize(T.color||T.severity)}`]]}})(memoTheme(({theme:o})=>{const u=o.palette.mode==="light"?o.darken:o.lighten,T=o.palette.mode==="light"?o.lighten:o.darken;return{...o.typography.body2,backgroundColor:"transparent",display:"flex",padding:"6px 16px",variants:[...Object.entries(o.palette).filter(createSimplePaletteValueFilter(["light"])).map(([S])=>({props:{colorSeverity:S,variant:"standard"},style:{color:o.vars?o.vars.palette.Alert[`${S}Color`]:u(o.palette[S].light,.6),backgroundColor:o.vars?o.vars.palette.Alert[`${S}StandardBg`]:T(o.palette[S].light,.9),[`& .${alertClasses.icon}`]:o.vars?{color:o.vars.palette.Alert[`${S}IconColor`]}:{color:o.palette[S].main}}})),...Object.entries(o.palette).filter(createSimplePaletteValueFilter(["light"])).map(([S])=>({props:{colorSeverity:S,variant:"outlined"},style:{color:o.vars?o.vars.palette.Alert[`${S}Color`]:u(o.palette[S].light,.6),border:`1px solid ${(o.vars||o).palette[S].light}`,[`& .${alertClasses.icon}`]:o.vars?{color:o.vars.palette.Alert[`${S}IconColor`]}:{color:o.palette[S].main}}})),...Object.entries(o.palette).filter(createSimplePaletteValueFilter(["dark"])).map(([S])=>({props:{colorSeverity:S,variant:"filled"},style:{fontWeight:o.typography.fontWeightMedium,...o.vars?{color:o.vars.palette.Alert[`${S}FilledColor`],backgroundColor:o.vars.palette.Alert[`${S}FilledBg`]}:{backgroundColor:o.palette.mode==="dark"?o.palette[S].dark:o.palette[S].main,color:o.palette.getContrastText(o.palette[S].main)}}}))]}})),AlertIcon=styled("div",{name:"MuiAlert",slot:"Icon"})({marginRight:12,padding:"7px 0",display:"flex",fontSize:22,opacity:.9}),AlertMessage=styled("div",{name:"MuiAlert",slot:"Message"})({padding:"8px 0",minWidth:0,overflow:"auto"}),AlertAction=styled("div",{name:"MuiAlert",slot:"Action"})({display:"flex",alignItems:"flex-start",padding:"4px 0 0 16px",marginLeft:"auto",marginRight:-8}),defaultIconMapping={success:jsxRuntimeExports.jsx(SuccessOutlinedIcon,{fontSize:"inherit"}),warning:jsxRuntimeExports.jsx(ReportProblemOutlinedIcon,{fontSize:"inherit"}),error:jsxRuntimeExports.jsx(ErrorOutlineIcon,{fontSize:"inherit"}),info:jsxRuntimeExports.jsx(InfoOutlinedIcon,{fontSize:"inherit"})},Alert=reactExports.forwardRef(function(u,T){const S=useDefaultProps({props:u,name:"MuiAlert"}),{action:E,children:C,className:_,closeText:P="Close",color:R,c
196omponents:I={},componentsProps:L={},icon:j,iconMapping:M=defaultIconMapping,onClose:D,role:F="alert",severity:N="success",slotProps:G={},slots:B={},variant:H="standard",...O}=S,V={...S,color:R,severity:N,variant:H,colorSeverity:R||N},U=useUtilityClasses$H(V),W={slots:{closeButton:I.CloseButton,closeIcon:I.CloseIcon,...B},slotProps:{...L,...G}},[K,Y]=useSlot("root",{ref:T,shouldForwardComponentProp:!0,className:clsx(U.root,_),elementType:AlertRoot,externalForwardedProps:{...W,...O},ownerState:V,additionalProps:{role:F,elevation:0}}),[ee,oe]=useSlot("icon",{className:U.icon,elementType:AlertIcon,externalForwardedProps:W,ownerState:V}),[se,Q]=useSlot("message",{className:U.message,elementType:AlertMessage,externalForwardedProps:W,ownerState:V}),[ie,ae]=useSlot("action",{className:U.action,elementType:AlertAction,externalForwardedProps:W,ownerState:V}),[re,J]=useSlot("closeButton",{elementType:IconButton,externalForwardedProps:W,ownerState:V}),[te,Z]=useSlot("closeIcon",{elementType:ClearIcon,externalForwardedProps:W,ownerState:V});return jsxRuntimeExports.jsxs(K,{...Y,children:[j!==!1?jsxRuntimeExports.jsx(ee,{...oe,children:j||M[N]||defaultIconMapping[N]}):null,jsxRuntimeExports.jsx(se,{...Q,children:C}),E!=null?jsxRuntimeExports.jsx(ie,{...ae,children:E}):null,E==null&&D?jsxRuntimeExports.jsx(ie,{...ae,children:jsxRuntimeExports.jsx(re,{size:"small","aria-label":P,title:P,color:"inherit",onClick:D,...J,children:jsxRuntimeExports.jsx(te,{fontSize:"small",...Z})})}):null]})});function getTypographyUtilityClass(o){return generateUtilityClass("MuiTypography",o)}const typographyClasses=generateUtilityClasses("MuiTypography",["root","h1","h2","h3","h4","h5","h6","subtitle1","subtitle2","body1","body2","inherit","button","caption","overline","alignLeft","alignRight","alignCenter","alignJustify","noWrap","gutterBottom","paragraph"]),v6Colors$1={primary:!0,secondary:!0,error:!0,info:!0,success:!0,warning:!0,textPrimary:!0,textSecondary:!0,textDisabled:!0},extendSxProp=internal_createExtendSxProp(),useUtilityClasses$G=o=>{const{align:u,gutterBottom:T,noWrap:S,paragraph:E,variant:C,classes:_}=o,P={root:["root",C,o.align!=="inherit"&&`align${capitalize(u)}`,T&&"gutterBottom",S&&"noWrap",E&&"paragraph"]};return composeClasses(P,getTypographyUtilityClass,_)},TypographyRoot=styled("span",{name:"MuiTypography",slot:"Root",overridesResolver:(o,u)=>{const{ownerState:T}=o;return[u.root,T.variant&&u[T.variant],T.align!=="inherit"&&u[`align${capitalize(T.align)}`],T.noWrap&&u.noWrap,T.gutterBottom&&u.gutterBottom,T.paragraph&&u.paragraph]}})(memoTheme(({theme:o})=>{var u;return{margin:0,variants:[{props:{variant:"inherit"},style:{font:"inherit",lineHeight:"inherit",letterSpacing:"inherit"}},...Object.entries(o.typography).filter(([T,S])=>T!=="inherit"&&S&&typeof S=="object").map(([T,S])=>({props:{variant:T},style:S})),...Object.entries(o.palette).filter(createSimplePaletteValueFilter()).map(([T])=>({props:{color:T},style:{color:(o.vars||o).palette[T].main}})),...Object.entries(((u=o.palette)==null?void 0:u.text)||{}).filter(([,T])=>typeof T=="string").map(([T])=>({props:{color:`text${capitalize(T)}`},style:{color:(o.vars||o).palette.text[T]}})),{props:({ownerState:T})=>T.align!=="inherit",style:{textAlign:"var(--Typography-textAlign)"}},{props:({ownerState:T})=>T.noWrap,style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}},{props:({ownerState:T})=>T.gutterBottom,style:{marginBottom:"0.35em"}},{props:({ownerState:T})=>T.paragraph,style:{marginBottom:16}}]}})),defaultVariantMapping={h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",subtitle1:"h6",subtitle2:"h6",body1:"p",body2:"p",inherit:"p"},Typography=reactExports.forwardRef(function(u,T){const{color:S,...E}=useDefaultProps({props:u,name:"MuiTypography"}),C=!v6Colors$1[S],_=extendSxProp({...E,...C&&{color:S}}),{align:P="inherit",className:R,component:I,gutterBottom:L=!1,noWrap:j=!1,paragraph:M=!1,variant:D="body1",variantMapping:F=defaultVariantMapping,...N}=_,G={..._,align:P,color:S,className:R,component:I,gutterBottom:L,noWrap:j,paragraph:M,variant:D,variantMapping:F},B=I||(M?"p":F[D]||defaultVariantMapping[D])||"span",H=useUtilityClasses$G(G);return jsxRuntimeExports.jsx(TypographyRoot,{as:B,ref:T,className:clsx(H.root,R),...N,ownerState:G,style:{...P!=="inherit"&&{"--Typography-textAlign":P},...N.style}})});function useSlotProps(o){var j;const{elementType:u,externalSlotProps:T,ownerState:S,skipResolvingSlotProps:E=!1,...C}=o,_=E?{}:resolveComponentProps(T,S),{props:P,internalRef:R}=mergeSlotProps({...C,externalSlotProps:_}),I=useForkRef(R,_==null?void 0:_.ref,(j=o.additionalProps)==null?void 0:j.ref);return appendOwnerState(u,{...P,ref:I},S)}function getReactElementRef(o){var u;return parseInt(reactExports.version,10)>=19?((u=o==null?void 0:o.props)==null?void 0:u.ref)||null:(o==null?void 0:o.ref)||null}function getContainer$1(o){return typeof o=="function"?o():o}const Portal=reactExports.forwardRef(function(u,T){const{children:S,container:E,disablePortal:C=!1}=u,[_,P]=reactExports.useState(null),R=useForkRef(reactExports.isValidElement(S)?getReactElementRef(S):null,T);
196if(useEnhancedEffect(()=>{C||P(getContainer$1(E)||document.body)},[E,C]),useEnhancedEffect(()=>{if(_&&!C)return setRef(T,_),()=>{setRef(T,null)}},[T,_,C]),C){if(reactExports.isValidElement(S)){const I={ref:R};return reactExports.cloneElement(S,I)}return S}return _&&reactDomExports.createPortal(S,_)}),CancelIcon=createSvgIcon(jsxRuntimeExports.jsx("path",{d:"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z"}));function getChipUtilityClass(o){return generateUtilityClass("MuiChip",o)}const chipClasses=generateUtilityClasses("MuiChip",["root","sizeSmall","sizeMedium","colorDefault","colorError","colorInfo","colorPrimary","colorSecondary","colorSuccess","colorWarning","disabled","clickable","clickableColorPrimary","clickableColorSecondary","deletable","deletableColorPrimary","deletableColorSecondary","outlined","filled","outlinedPrimary","outlinedSecondary","filledPrimary","filledSecondary","avatar","avatarSmall","avatarMedium","avatarColorPrimary","avatarColorSecondary","icon","iconSmall","iconMedium","iconColorPrimary","iconColorSecondary","label","labelSmall","labelMedium","deleteIcon","deleteIconSmall","deleteIconMedium","deleteIconColorPrimary","deleteIconColorSecondary","deleteIconOutlinedColorPrimary","deleteIconOutlinedColorSecondary","deleteIconFilledColorPrimary","deleteIconFilledColorSecondary","focusVisible"]),useUtilityClasses$F=o=>{const{classes:u,disabled:T,size:S,color:E,iconColor:C,onDelete:_,clickable:P,variant:R}=o,I={root:["root",R,T&&"disabled",`size${capitalize(S)}`,`color${capitalize(E)}`,P&&"clickable",P&&`clickableColor${capitalize(E)}`,_&&"deletable",_&&`deletableColor${capitalize(E)}`,`${R}${capitalize(E)}`],label:["label",`label${capitalize(S)}`],avatar:["avatar",`avatar${capitalize(S)}`,`avatarColor${capitalize(E)}`],icon:["icon",`icon${capitalize(S)}`,`iconColor${capitalize(C)}`],deleteIcon:["deleteIcon",`deleteIcon${capitalize(S)}`,`deleteIconColor${capitalize(E)}`,`deleteIcon${capitalize(R)}Color${capitalize(E)}`]};return composeClasses(I,getChipUtilityClass,u)},ChipRoot=styled("div",{name:"MuiChip",slot:"Root",overridesResolver:(o,u)=>{const{ownerState:T}=o,{color:S,iconColor:E,clickable:C,onDelete:_,size:P,variant:R}=T;return[{[`& .${chipClasses.avatar}`]:u.avatar},{[`& .${chipClasses.avatar}`]:u[`avatar${capitalize(P)}`]},{[`& .${chipClasses.avatar}`]:u[`avatarColor${capitalize(S)}`]},{[`& .${chipClasses.icon}`]:u.icon},{[`& .${chipClasses.icon}`]:u[`icon${capitalize(P)}`]},{[`& .${chipClasses.icon}`]:u[`iconColor${capitalize(E)}`]},{[`& .${chipClasses.deleteIcon}`]:u.deleteIcon},{[`& .${chipClasses.deleteIcon}`]:u[`deleteIcon${capitalize(P)}`]},{[`& .${chipClasses.deleteIcon}`]:u[`deleteIconColor${capitalize(S)}`]},{[`& .${chipClasses.deleteIcon}`]:u[`deleteIcon${capitalize(R)}Color${capitalize(S)}`]},u.root,u[`size${capitalize(P)}`],u[`color${capitalize(S)}`],C&&u.clickable,C&&S!=="default"&&u[`clickableColor${capitalize(S)})`],_&&u.deletable,_&&S!=="default"&&u[`deletableColor${capitalize(S)}`],u[R],u[`${R}${capitalize(S)}`]]}})(memoTheme(({theme:o})=>{const u=o.palette.mode==="light"?o.palette.grey[700]:o.palette.grey[300];return{maxWidth:"100%",fontFamily:o.typography.fontFamily,fontSize:o.typography.pxToRem(13),display:"inline-flex",alignItems:"center",justifyContent:"center",height:32,lineHeight:1.5,color:(o.vars||o).palette.text.primary,backgroundColor:(o.vars||o).palette.action.selected,borderRadius:32/2,whiteSpace:"nowrap",transition:o.transitions.create(["background-color","box-shadow"]),cursor:"unset",outline:0,textDecoration:"none",border:0,padding:0,verticalAlign:"middle",boxSizing:"border-box",[`&.${chipClasses.disabled}`]:{opacity:(o.vars||o).palette.action.disabledOpacity,pointerEvents:"none"},[`& .${chipClasses.avatar}`]:{marginLeft:5,marginRight:-6,width:24,height:24,color:o.vars?o.vars.palette.Chip.defaultAvatarColor:u,fontSize:o.typography.pxToRem(12)},[`& .${chipClasses.avatarColorPrimary}`]:{color:(o.vars||o).palette.primary.contrastText,backgroundColor:(o.vars||o).palette.primary.dark},[`& .${chipClasses.avatarColorSecondary}
196`]:{color:(o.vars||o).palette.secondary.contrastText,backgroundColor:(o.vars||o).palette.secondary.dark},[`& .${chipClasses.avatarSmall}`]:{marginLeft:4,marginRight:-4,width:18,height:18,fontSize:o.typography.pxToRem(10)},[`& .${chipClasses.icon}`]:{marginLeft:5,marginRight:-6},[`& .${chipClasses.deleteIcon}`]:{WebkitTapHighlightColor:"transparent",color:o.alpha((o.vars||o).palette.text.primary,.26),fontSize:22,cursor:"pointer",margin:"0 5px 0 -6px","&:hover":{color:o.alpha((o.vars||o).palette.text.primary,.4)}},variants:[{props:{size:"small"},style:{height:24,[`& .${chipClasses.icon}`]:{fontSize:18,marginLeft:4,marginRight:-4},[`& .${chipClasses.deleteIcon}`]:{fontSize:16,marginRight:4,marginLeft:-4}}},...Object.entries(o.palette).filter(createSimplePaletteValueFilter(["contrastText"])).map(([T])=>({props:{color:T},style:{backgroundColor:(o.vars||o).palette[T].main,color:(o.vars||o).palette[T].contrastText,[`& .${chipClasses.deleteIcon}`]:{color:o.alpha((o.vars||o).palette[T].contrastText,.7),"&:hover, &:active":{color:(o.vars||o).palette[T].contrastText}}}})),{props:T=>T.iconColor===T.color,style:{[`& .${chipClasses.icon}`]:{color:o.vars?o.vars.palette.Chip.defaultIconColor:u}}},{props:T=>T.iconColor===T.color&&T.color!=="default",style:{[`& .${chipClasses.icon}`]:{color:"inherit"}}},{props:{onDelete:!0},style:{[`&.${chipClasses.focusVisible}`]:{backgroundColor:o.alpha((o.vars||o).palette.action.selected,`${(o.vars||o).palette.action.selectedOpacity} + ${(o.vars||o).palette.action.focusOpacity}`)}}},...Object.entries(o.palette).filter(createSimplePaletteValueFilter(["dark"])).map(([T])=>({props:{color:T,onDelete:!0},style:{[`&.${chipClasses.focusVisible}`]:{background:(o.vars||o).palette[T].dark}}})),{props:{clickable:!0},style:{userSelect:"none",WebkitTapHighlightColor:"transparent",cursor:"pointer","&:hover":{backgroundColor:o.alpha((o.vars||o).palette.action.selected,`${(o.vars||o).palette.action.selectedOpacity} + ${(o.vars||o).palette.action.hoverOpacity}`)},[`&.${chipClasses.focusVisible}`]:{backgroundColor:o.alpha((o.vars||o).palette.action.selected,`${(o.vars||o).palette.action.selectedOpacity} + ${(o.vars||o).palette.action.focusOpacity}`)},"&:active":{boxShadow:(o.vars||o).shadows[1]}}},...Object.entries(o.palette).filter(createSimplePaletteValueFilter(["dark"])).map(([T])=>({props:{color:T,clickable:!0},style:{[`&:hover, &.${chipClasses.focusVisible}`]:{backgroundColor:(o.vars||o).palette[T].dark}}})),{props:{variant:"outlined"},style:{backgroundColor:"transparent",border:o.vars?`1px solid ${o.vars.palette.Chip.defaultBorder}`:`1px solid ${o.palette.mode==="light"?o.palette.grey[400]:o.palette.grey[700]}`,[`&.${chipClasses.clickable}:hover`]:{backgroundColor:(o.vars||o).palette.action.hover},[`&.${chipClasses.focusVisible}`]:{backgroundColor:(o.vars||o).palette.action.focus},[`& .${chipClasses.avatar}`]:{marginLeft:4},[`& .${chipClasses.avatarSmall}`]:{marginLeft:2},[`& .${chipClasses.icon}`]:{marginLeft:4},[`& .${chipClasses.iconSmall}`]:{marginLeft:2},[`& .${chipClasses.deleteIcon}`]:{marginRight:5},[`& .${chipClasses.deleteIconSmall}`]:{marginRight:3}}},...Object.entries(o.palette).filter(createSimplePaletteValueFilter()).map(([T])=>({props:{variant:"outlined",color:T},style:{color:(o.vars||o).palette[T].main,border:`1px solid ${o.alpha((o.vars||o).palette[T].main,.7)}`,[`&.${chipClasses.clickable}:hover`]:{backgroundColor:o.alpha((o.vars||o).palette[T].main,(o.vars||o).palette.action.hoverOpacity)},[`&.${chipClasses.focusVisible}`]:{backgroundColor:o.alpha((o.vars||o).palette[T].main,(o.vars||o).palette.action.focusOpacity)},[`& .${chipClasses.deleteIcon}`]:{color:o.alpha((o.vars||o).palette[T].main,.7),"&:hover, &:active":{color:(o.vars||o).palette[T].main}}}}))]}})),ChipLabel=styled("span",{name:"MuiChip",slot:"Label",overridesResolver:(o,u)=>{const{ownerState:T}=o,{size:S}=T;return[u.label,u[`label${capitalize(S)}`]]}})({overflow:"hidden",textOverflow:"ellipsis",paddingLeft:12,paddingRight:12,whiteSpace:"nowrap",variants:[{props:{variant:"outlined"},style:{paddingLeft:11,paddingRight:11}},{props:{size:"small"},style:{paddingLeft:8,paddingRight:8}},{props:{size:"small",variant:"outlined"},style:{paddingLeft:7,paddingRight:7}}]});function isDeleteKeyboardEvent(o){return o.key==="Backspace"||o.key==="Delete"}const Chip=reactExports.forwardRef(function(u,T){const S=useDefaultProps({props:u,name:"MuiChip"}
196),{avatar:E,className:C,clickable:_,color:P="default",component:R,deleteIcon:I,disabled:L=!1,icon:j,label:M,onClick:D,onDelete:F,onKeyDown:N,onKeyUp:G,size:B="medium",variant:H="filled",tabIndex:O,skipFocusWhenDisabled:V=!1,slots:U={},slotProps:W={},...K}=S,Y=reactExports.useRef(null),ee=useForkRef(Y,T),oe=ve=>{ve.stopPropagation(),F&&F(ve)},se=ve=>{ve.currentTarget===ve.target&&isDeleteKeyboardEvent(ve)&&ve.preventDefault(),N&&N(ve)},Q=ve=>{ve.currentTarget===ve.target&&F&&isDeleteKeyboardEvent(ve)&&F(ve),G&&G(ve)},ie=_!==!1&&D?!0:_,ae=ie||F?ButtonBase:R||"div",re={...S,component:ae,disabled:L,size:B,color:P,iconColor:reactExports.isValidElement(j)&&j.props.color||P,onDelete:!!F,clickable:ie,variant:H},J=useUtilityClasses$F(re),te=ae===ButtonBase?{component:R||"div",focusVisibleClassName:J.focusVisible,...F&&{disableRipple:!0}}:{};let Z=null;F&&(Z=I&&reactExports.isValidElement(I)?reactExports.cloneElement(I,{className:clsx(I.props.className,J.deleteIcon),onClick:oe}):jsxRuntimeExports.jsx(CancelIcon,{className:J.deleteIcon,onClick:oe}));let X=null;E&&reactExports.isValidElement(E)&&(X=reactExports.cloneElement(E,{className:clsx(J.avatar,E.props.className)}));let de=null;j&&reactExports.isValidElement(j)&&(de=reactExports.cloneElement(j,{className:clsx(J.icon,j.props.className)}));const he={slots:U,slotProps:W},[ne,ue]=useSlot("root",{elementType:ChipRoot,externalForwardedProps:{...he,...K},ownerState:re,shouldForwardComponentProp:!0,ref:ee,className:clsx(J.root,C),additionalProps:{disabled:ie&&L?!0:void 0,tabIndex:V&&L?-1:O,...te},getSlotProps:ve=>({...ve,onClick:Te=>{var Se;(Se=ve.onClick)==null||Se.call(ve,Te),D==null||D(Te)},onKeyDown:Te=>{var Se;(Se=ve.onKeyDown)==null||Se.call(ve,Te),se(Te)},onKeyUp:Te=>{var Se;(Se=ve.onKeyUp)==null||Se.call(ve,Te),Q(Te)}})}),[ce,fe]=useSlot("label",{elementType:ChipLabel,externalForwardedProps:he,ownerState:re,className:J.label});return jsxRuntimeExports.jsxs(ne,{as:ae,...ue,children:[X||de,jsxRuntimeExports.jsx(ce,{...fe,children:M}),Z]})});function getStyleValue(o){return parseInt(o,10)||0}const styles$3={shadow:{visibility:"hidden",position:"absolute",overflow:"hidden",height:0,top:0,left:0,transform:"translateZ(0)"}};function isObjectEmpty(o){for(const u in o)return!1;return!0}function isEmpty$1(o){return isObjectEmpty(o)||o.outerHeightStyle===0&&!o.overflowing}const TextareaAutosize=reactExports.forwardRef(function(u,T){const{onChange:S,maxRows:E,minRows:C=1,style:_,value:P,...R}=u,{current:I}=reactExports.useRef(P!=null),L=reactExports.useRef(null),j=useForkRef(T,L),M=reactExports.useRef(null),D=reactExports.useRef(null),F=reactExports.useCallback(()=>{const O=L.current,V=D.current;if(!O||!V)return;const W=ownerWindow(O).getComputedStyle(O);if(W.width==="0px")return{outerHeightStyle:0,overflowing:!1};V.style.width=W.width,V.value=O.value||u.placeholder||"x",V.value.slice(-1)===`
197`&&(V.value+=" ");const K=W.boxSizing,Y=getStyleValue(W.paddingBottom)+getStyleValue(W.paddingTop),ee=getStyleValue(W.borderBottomWidth)+getStyleValue(W.borderTopWidth),oe=V.scrollHeight;V.value="x";const se=V.scrollHeight;let Q=oe;C&&(Q=Math.max(Number(C)*se,Q)),E&&(Q=Math.min(Number(E)*se,Q)),Q=Math.max(Q,se);const ie=Q+(K==="border-box"?Y+ee:0),ae=Math.abs(Q-oe)<=1;return{outerHeightStyle:ie,overflowing:ae}},[E,C,u.placeholder]),N=useEventCallback(()=>{const O=L.current,V=F();if(!O||!V||isEmpty$1(V))return!1;const U=V.outerHeightStyle;return M.current!=null&&M.current!==U}),G=reactExports.useCallback(()=>{const O=L.current,V=F();if(!O||!V||isEmpty$1(V))return;const U=V.outerHeightStyle;M.current!==U&&(M.current=U,O.style.height=`${U}px`),O.style.overflow=V.overflowing?"hidden":""},[F]),B=reactExports.useRef(-1);useEnhancedEffect(()=>{const O=debounce(G),V=L==null?void 0:L.current;if(!V)return;const U=ownerWindow(V);U.addEventListener("resize",O);let W;return typeof ResizeObserver<"u"&&(W=new ResizeObserver(()=>{N()&&(W.unobserve(V),cancelAnimationFrame(B.current),G(),B.current=requestAnimationFrame(()=>{W.observe(V)}))}),W.observe(V)),()=>{O.clear(),cancelAnimationFrame(B.current),U.removeEventListener("resize",O),W&&W.disconnect()}},[F,G,N]),useEnhancedEffect(()=>{G()});const H=O=>{I||G();const V=O.target,U=V.value.length,W=V.value.endsWith(`
198`),K=V.selectionStart===U;W&&K&&V.setSelectionRange(U,U),S&&S(O)};return jsxRuntimeExports.jsxs(reactExports.Fragment,{children:[jsxRuntimeExports.jsx("textarea",{value:P,onChange:H,ref:j,rows:C,style:_,...R}
198),jsxRuntimeExports.jsx("textarea",{"aria-hidden":!0,className:u.className,readOnly:!0,ref:D,tabIndex:-1,style:{...styles$3.shadow,..._,paddingTop:0,paddingBottom:0}})]})});function formControlState({props:o,states:u,muiFormControl:T}){return u.reduce((S,E)=>(S[E]=o[E],T&&typeof o[E]>"u"&&(S[E]=T[E]),S),{})}const FormControlContext=reactExports.createContext(void 0);function useFormControl(){return reactExports.useContext(FormControlContext)}function hasValue(o){return o!=null&&!(Array.isArray(o)&&o.length===0)}function isFilled(o,u=!1){return o&&(hasValue(o.value)&&o.value!==""||u&&hasValue(o.defaultValue)&&o.defaultValue!=="")}function isAdornedStart(o){return o.startAdornment}function getInputBaseUtilityClass(o){return generateUtilityClass("MuiInputBase",o)}const inputBaseClasses=generateUtilityClasses("MuiInputBase",["root","formControl","focused","disabled","adornedStart","adornedEnd","error","sizeSmall","multiline","colorSecondary","fullWidth","hiddenLabel","readOnly","input","inputSizeSmall","inputMultiline","inputTypeSearch","inputAdornedStart","inputAdornedEnd","inputHiddenLabel"]);var _InputGlobalStyles;const rootOverridesResolver=(o,u)=>{const{ownerState:T}=o;return[u.root,T.formControl&&u.formControl,T.startAdornment&&u.adornedStart,T.endAdornment&&u.adornedEnd,T.error&&u.error,T.size==="small"&&u.sizeSmall,T.multiline&&u.multiline,T.color&&u[`color${capitalize(T.color)}`],T.fullWidth&&u.fullWidth,T.hiddenLabel&&u.hiddenLabel]},inputOverridesResolver=(o,u)=>{const{ownerState:T}=o;return[u.input,T.size==="small"&&u.inputSizeSmall,T.multiline&&u.inputMultiline,T.type==="search"&&u.inputTypeSearch,T.startAdornment&&u.inputAdornedStart,T.endAdornment&&u.inputAdornedEnd,T.hiddenLabel&&u.inputHiddenLabel]},useUtilityClasses$E=o=>{const{classes:u,color:T,disabled:S,error:E,endAdornment:C,focused:_,formControl:P,fullWidth:R,hiddenLabel:I,multiline:L,readOnly:j,size:M,startAdornment:D,type:F}=o,N={root:["root",`color${capitalize(T)}`,S&&"disabled",E&&"error",R&&"fullWidth",_&&"focused",P&&"formControl",M&&M!=="medium"&&`size${capitalize(M)}`,L&&"multiline",D&&"adornedStart",C&&"adornedEnd",I&&"hiddenLabel",j&&"readOnly"],input:["input",S&&"disabled",F==="search"&&"inputTypeSearch",L&&"inputMultiline",M==="small"&&"inputSizeSmall",I&&"inputHiddenLabel",D&&"inputAdornedStart",C&&"inputAdornedEnd",j&&"readOnly"]};return composeClasses(N,getInputBaseUtilityClass,u)},InputBaseRoot=styled("div",{name:"MuiInputBase",slot:"Root",overridesResolver:rootOverridesResolver})(memoTheme(({theme:o})=>({...o.typography.body1,color:(o.vars||o).palette.text.primary,lineHeight:"1.4375em",boxSizing:"border-box",position:"relative",cursor:"text",display:"inline-flex",alignItems:"center",[`&.${inputBaseClasses.disabled}`]:{color:(o.vars||o).palette.text.disabled,cursor:"default"},variants:[{props:({ownerState:u})=>u.multiline,style:{padding:"4px 0 5px"}},{props:({ownerState:u,size:T})=>u.multiline&&T==="small",style:{paddingTop:1}},{props:({ownerState:u})=>u.fullWidth,style:{width:"100%"}}]}))),InputBaseInput=styled("input",{name:"MuiInputBase",slot:"Input",overridesResolver:inputOverridesResolver})(memoTheme(({theme:o})=>{const u=o.palette.mode==="light",T={color:"currentColor",...o.vars?{opacity:o.vars.opacity.inputPlaceholder}:{opacity:u?.42:.5},transition:o.transitions.create("opacity",{duration:o.transitions.duration.shorter})},S={opacity:"0 !important"},E=o.vars?{opacity:o.vars.opacity.inputPlaceholder}:{opacity:u?.42:.5};return{font:"inherit",letterSpacing:"inherit",color:"currentColor",padding:"4px 0 5px",border:0,boxSizing:"content-box",background:"none",height:"1.4375em",margin:0,WebkitTapHighlightColor:"transparent",display:"block",minWidth:0,width:"100%","&::-webkit-input-placeholder":T,"&::-moz-placeholder":T,"&::-ms-input-placeholder":T,"&:focus":{outline:0},"&:invalid":{boxShadow:"none"},"&::-webkit-search-decoration":{WebkitAppearance:"none"},[`label[data-shrink=false] + .${inputBaseClasses.formControl} &`]:{"&::-webkit-input-placeholder":S,"&::-moz-placeholder":S,"&::-ms-input-placeholder":S,"&:focus::-webkit-input-placeholder":E,"&:focus::-moz-placeholder":E,"&:focus::-ms-input-placeholder":E},[`&.${inputBaseClasses.disabled}`]:{opacity:1,WebkitTextFillColor:(o.vars||o).palette.text.disabled},variants:[{props:({ownerState:C})=>!C.disableInjectingGlobalStyles,style:{animationName:"mui-auto-fill-cancel",animationDuration:"10ms","&:-webkit-autofill":{animationDuration:"5000s",animationName:"mui-auto-fill"}}},{props:{size:"small"},style:{paddingTop:1}},{props:({ownerState:C})=>C.multiline,style:{height:"auto",resize:"none",padding:0,paddingTop:0}},{props:{type:"search"},style:{MozAppearance:"textfield"}}]}})),InputGlobalStyles=globalCss({"@keyframes mui-auto-fill":{from:{display:"block"}},"@keyframes mui-auto-fill-cancel":{from:{display:"block"}}}),InputBase=reactExports.forwardRef(function(u,T){const S=useDefaultProps({props:u,name:"MuiInputBase"}),{"aria-describedby":E,autoComplete:C,autoFocus:_,className:P,color:R,c
198omponents:I={},componentsProps:L={},defaultValue:j,disabled:M,disableInjectingGlobalStyles:D,endAdornment:F,error:N,fullWidth:G=!1,id:B,inputComponent:H="input",inputProps:O={},inputRef:V,margin:U,maxRows:W,minRows:K,multiline:Y=!1,name:ee,onBlur:oe,onChange:se,onClick:Q,onFocus:ie,onKeyDown:ae,onKeyUp:re,placeholder:J,readOnly:te,renderSuffix:Z,rows:X,size:de,slotProps:he={},slots:ne={},startAdornment:ue,type:ce="text",value:fe,...ve}=S,Te=O.value!=null?O.value:fe,{current:Se}=reactExports.useRef(Te!=null),ke=reactExports.useRef(),we=reactExports.useCallback(Be=>{},[]),Le=useForkRef(ke,V,O.ref,we),[pe,Me]=reactExports.useState(!1),Pe=useFormControl(),Ue=formControlState({props:S,muiFormControl:Pe,states:["color","disabled","error","hiddenLabel","size","required","filled"]});Ue.focused=Pe?Pe.focused:pe,reactExports.useEffect(()=>{!Pe&&M&&pe&&(Me(!1),oe&&oe())},[Pe,M,pe,oe]);const qe=Pe&&Pe.onFilled,Ie=Pe&&Pe.onEmpty,Xe=reactExports.useCallback(Be=>{isFilled(Be)?qe&&qe():Ie&&Ie()},[qe,Ie]);useEnhancedEffect(()=>{Se&&Xe({value:Te})},[Te,Xe,Se]);const et=Be=>{ie&&ie(Be),O.onFocus&&O.onFocus(Be),Pe&&Pe.onFocus?Pe.onFocus(Be):Me(!0)},tt=Be=>{oe&&oe(Be),O.onBlur&&O.onBlur(Be),Pe&&Pe.onBlur?Pe.onBlur(Be):Me(!1)},Ye=(Be,...Qe)=>{if(!Se){const Ge=Be.target||ke.current;if(Ge==null)throw new Error(formatMuiErrorMessage(1));Xe({value:Ge.value})}O.onChange&&O.onChange(Be,...Qe),se&&se(Be,...Qe)};reactExports.useEffect(()=>{Xe(ke.current)},[]);const ze=Be=>{ke.current&&Be.currentTarget===Be.target&&ke.current.focus(),Q&&Q(Be)};let Ze=H,He=O;Y&&Ze==="input"&&(X?He={type:void 0,minRows:X,maxRows:X,...He}:He={type:void 0,maxRows:W,minRows:K,...He},Ze=TextareaAutosize);const rt=Be=>{Xe(Be.animationName==="mui-auto-fill-cancel"?ke.current:{value:"x"})};reactExports.useEffect(()=>{Pe&&Pe.setAdornedStart(!!ue)},[Pe,ue]);const it={...S,color:Ue.color||"primary",disabled:Ue.disabled,endAdornment:F,error:Ue.error,focused:Ue.focused,formControl:Pe,fullWidth:G,hiddenLabel:Ue.hiddenLabel,multiline:Y,size:Ue.size,startAdornment:ue,type:ce},st=useUtilityClasses$E(it),at=ne.root||I.Root||InputBaseRoot,ot=he.root||L.root||{},je=ne.input||I.Input||InputBaseInput;return He={...He,...he.input??L.input},jsxRuntimeExports.jsxs(reactExports.Fragment,{children:[!D&&typeof InputGlobalStyles=="function"&&(_InputGlobalStyles||(_InputGlobalStyles=jsxRuntimeExports.jsx(InputGlobalStyles,{}))),jsxRuntimeExports.jsxs(at,{...ot,ref:T,onClick:ze,...ve,...!isHostComponent(at)&&{ownerState:{...it,...ot.ownerState}},className:clsx(st.root,ot.className,P,te&&"MuiInputBase-readOnly"),children:[ue,jsxRuntimeExports.jsx(FormControlContext.Provider,{value:null,children:jsxRuntimeExports.jsx(je,{"aria-invalid":Ue.error,"aria-describedby":E,autoComplete:C,autoFocus:_,defaultValue:j,disabled:Ue.disabled,id:B,onAnimationStart:rt,name:ee,placeholder:J,readOnly:te,required:Ue.required,rows:X,value:Te,onKeyDown:ae,onKeyUp:re,type:ce,...He,...!isHostComponent(je)&&{as:Ze,ownerState:{...it,...He.ownerState}},ref:Le,className:clsx(st.input,He.className,te&&"MuiInputBase-readOnly"),onBlur:tt,onChange:Ye,onFocus:et})}),F,Z?Z({...Ue,startAdornment:ue}):null]})]})});function getInputUtilityClass(o){return generateUtilityClass("MuiInput",o)}const inputClasses={...inputBaseClasses,...generateUtilityClasses("MuiInput",["root","underline","input"])};function getOutlinedInputUtilityClass(o){return generateUtilityClass("MuiOutlinedInput",o)}const outlinedInputClasses={...inputBaseClasses,...generateUtilityClasses("MuiOutlinedInput",["root","notchedOutline","input"])};function getFilledInputUtilityClass(o){return generateUtilityClass("MuiFilledInput",o)}const filledInputClasses={...inputBaseClasses,...generateUtilityClasses("MuiFilledInput",["root","underline","input","adornedStart","adornedEnd","sizeSmall","multiline","hiddenLabel"])},ArrowDropDownIcon=createSvgIcon(jsxRuntimeExports.jsx("path",{d:"M7 10l5 5 5-5z"})),styles$2={entering:{opacity:1},entered:{opacity:1}},Fade=reactExports.forwardRef(function(u,T){const S=useTheme(),E={enter:S.transitions.duration.enteringScreen,exit:S.transitions.duration.leavingScreen},{addEndListener:C,appear:_=!0,children:P,easing:R,in:I,onEnter:L,onEntered:j,onEntering:M,onExit:D,onExited:F,onExiting:N,style:G,timeout:B=E,TransitionComponent:H=Transition,...O}=u,V=reactExports.useRef(null),U=useForkRef(V,getReactElementRef(P),T),W=ae=>re=>{if(ae){const J=V.current;re===void 0?ae(J):ae(J,re)}},K=W(M),Y=W((ae,re)=>{reflow(ae);const J=getTransitionProps({style:G,timeout:B,easing:R},{mode:"enter"});ae.style.webkitTransition=S.transitions.create("opacity",J),ae.style.transition=S.transitions.create("opacity",J),L&&L(ae,re)}),ee=W(j),oe=W(N),se=W(ae=>{const re=getTransitionProps({style:G,timeout:B,easing:R},{mode:"exit"});ae.style.webkitTransition=S.transitions.create("opacity",re),ae.style.transition=S.transitions.create("opacity",re),D&&D(ae)}),Q=W(F),ie=ae=>{C&&C(V.current,ae)};return jsxRuntimeExports.jsx(H,{appear:_,in:I,nodeRef:V,onEnter:Y,onEntered:ee,onEntering:K,onExit:se,onExited:Q,onExiting:oe,addEndListener:ie,timeout:B,...O,children:(ae,{ownerState:re,...J})=>reactExports.cloneElement(P,{style:{opacity:0,visibility:ae==="exited"&&!I?"hidden":void 0,...styles$2[ae],...G,...P.props.style},ref:U,...J})})});function getBackdropUtilityClass(o){return generateUtilityClass("MuiBackdrop",o)}generateUtilityClasses("MuiBackdrop",["root","invisible"]);const useUtilityClasses$D=o=>{const{classes:u,invisible:T}=o;return composeClasses({root:["root",T&&"invisible"]},getBackdropUtilityClass,u)},BackdropRoot=styled("div",{name:"MuiBackdrop",slot:"Root",overridesResolver:(o,u)=>{const{ownerState:T}=o;return[u.root,T.invisible&&u.invisible]}})({position:"fixed",display:"flex",alignItems:"center",justifyContent:"center",right:0,bottom:0,top:0,left:0,backgroundColor:"rgba(0, 0, 0, 0.5)",WebkitTapHighlightColor:"transparent",variants:[{props:{invisible:!0},style:{backgroundColor:"transparent"}}]}),Backdrop=reactExports.forwardRef(function(u,T){const S=useDefaultProps({props:u,name:"MuiBackdrop"}),{children:E,className:C,component:_="div",invisible:P=!1,open:R,components:I={},componentsProps:L={},slotProps:j={},slots:M={},TransitionComponent:D,transitionDuration:F,...N}=S,G={...S,component:_,invisible:P},B=useUtilityClasses$D(G),H={transition:D,root:I.Root,...M},O={...L,...j},V={component:_,slots:H,slotProps:O},[U,W]=useSlot("root",{elementType:BackdropRoot,externalForwardedProps:V,className:clsx(B.root,C),ownerState:G}),[K,Y]=useSlot("transition",{elementType:Fade,externalForwardedProps:V,ownerState:G});return jsxRuntimeExports.jsx(K,{in:R,timeout:F,...N,...Y,children:jsxRuntimeExports.jsx(U,{"aria-hidden":!0,...W,classes:B,ref:T,children:E})})}),boxClasses=generateUtilityClasses("MuiBox",["root"]),defaultTheme=createTheme(),Box=createBox$1({themeId:THEME_ID,defaultTheme,defaultClassName:boxClasses.root,generateClassName:ClassNameGenerator.generate});function getButtonUtilityClass(o){return generateUtilityClass("MuiButton",o)}
198const buttonClasses=generateUtilityClasses("MuiButton",["root","text","textInherit","textPrimary","textSecondary","textSuccess","textError","textInfo","textWarning","outlined","outlinedInherit","outlinedPrimary","outlinedSecondary","outlinedSuccess","outlinedError","outlinedInfo","outlinedWarning","contained","containedInherit","containedPrimary","containedSecondary","containedSuccess","containedError","containedInfo","containedWarning","disableElevation","focusVisible","disabled","colorInherit","colorPrimary","colorSecondary","colorSuccess","colorError","colorInfo","colorWarning","textSizeSmall","textSizeMedium","textSizeLarge","outlinedSizeSmall","outlinedSizeMedium","outlinedSizeLarge","containedSizeSmall","containedSizeMedium","containedSizeLarge","sizeMedium","sizeSmall","sizeLarge","fullWidth","startIcon","endIcon","icon","iconSizeSmall","iconSizeMedium","iconSizeLarge","loading","loadingWrapper","loadingIconPlaceholder","loadingIndicator","loadingPositionCenter","loadingPositionStart","loadingPositionEnd"]),ButtonGroupContext=reactExports.createContext({}),ButtonGroupButtonContext=reactExports.createContext(void 0),useUtilityClasses$C=o=>{const{color:u,disableElevation:T,fullWidth:S,size:E,variant:C,loading:_,loadingPosition:P,classes:R}=o,I={root:["root",_&&"loading",C,`${C}${capitalize(u)}`,`size${capitalize(E)}`,`${C}Size${capitalize(E)}`,`color${capitalize(u)}`,T&&"disableElevation",S&&"fullWidth",_&&`loadingPosition${capitalize(P)}`],startIcon:["icon","startIcon",`iconSize${capitalize(E)}`],endIcon:["icon","endIcon",`iconSize${capitalize(E)}`],loadingIndicator:["loadingIndicator"],loadingWrapper:["loadingWrapper"]},L=composeClasses(I,getButtonUtilityClass,R);return{...R,...L}},commonIconStyles=[{props:{size:"small"},style:{"& > *:nth-of-type(1)":{fontSize:18}}},{props:{size:"medium"},style:{"& > *:nth-of-type(1)":{fontSize:20}}},{props:{size:"large"},style:{"& > *:nth-of-type(1)":{fontSize:22}}}],ButtonRoot=styled(ButtonBase,{shouldForwardProp:o=>rootShouldForwardProp(o)||o==="classes",name:"MuiButton",slot:"Root",overridesResolver:(o,u)=>{const{ownerState:T}=o;return[u.root,u[T.variant],u[`${T.variant}${capitalize(T.color)}`],u[`size${capitalize(T.size)}`],u[`${T.variant}Size${capitalize(T.size)}`],T.color==="inherit"&&u.colorInherit,T.disableElevation&&u.disableElevation,T.fullWidth&&u.fullWidth,T.loading&&u.loading]}})(memoTheme(({theme:o})=>{const u=o.palette.mode==="light"?o.palette.grey[300]:o.palette.grey[800],T=o.palette.mode==="light"?o.palette.grey.A100:o.palette.grey[700];return{...o.typography.button,minWidth:64,padding:"6px 16px",border:0,borderRadius:(o.vars||o).shape.borderRadius,transition:o.transitions.create(["background-color","box-shadow","border-color","color"],{duration:o.transitions.duration.short}),"&:hover":{textDecoration:"none"},[`&.${buttonClasses.disabled}`]:{color:(o.vars||o).palette.action.disabled},variants:[{props:{variant:"contained"},style:{color:"var(--variant-containedColor)",backgroundColor:"var(--variant-containedBg)",boxShadow:(o.vars||o).shadows[2],"&:hover":{boxShadow:(o.vars||o).shadows[4],"@media (hover: none)":{boxShadow:(o.vars||o).shadows[2]}},"&:active":{boxShadow:(o.vars||o).shadows[8]},[`&.${buttonClasses.focusVisible}`]:{boxShadow:(o.vars||o).shadows[6]},[`&.${buttonClasses.disabled}`]:{color:(o.vars||o).palette.action.disabled,boxShadow:(o.vars||o).shadows[0],backgroundColor:(o.vars||o).palette.action.disabledBackground}}},{props:{variant:"outlined"},style:{padding:"5px 15px",border:"1px solid currentColor",borderColor:"var(--variant-outlinedBorder, currentColor)",backgroundColor:"var(--variant-outlinedBg)",color:"var(--variant-outlinedColor)",[`&.${buttonClasses.disabled}`]:{border:`1px solid ${(o.vars||o).palette.action.disabledBackground}`}}},{props:{variant:"text"},style:{padding:"6px 8px",color:"var(--variant-textColor)",backgroundColor:"var(--variant-textBg)"}},...Object.entries(o.palette).filter(createSimplePaletteValueFilter()).map(([S])=>({props:{color:S},style:{"--variant-textColor":(o.vars||o).palette[S].main,"--variant-outlinedColor":(o.vars||o).palette[S].main,"--variant-outlinedBorder":o.alpha((o.vars||o).palette[S].main,.5),"--variant-containedColor":(o.vars||o).palette[S].contrastText,"--variant-containedBg":(o.vars||o).palette[S].main,"@media (hover: hover)":{"&:hover":{"--variant-containedBg":(o.vars||o).palette[S].dark,"--variant-textBg":o.alpha((o.vars||o).palette[S].main,(o.vars||o).palette.action.hoverOpacity),"--variant-outlinedBorder":(o.vars||o).palette[S].main,"--variant-outlinedBg":o.alpha((o.vars||o).palette[S].main,(o.vars||o).palette.action.hoverOpacity)}}}})),{props:{color:"inherit"},style:{color:"inherit",borderColor:"currentColor","--variant-containedBg":o.vars?o.vars.palette.Button.inheritContainedBg:u,"@media (hover: hover)":{"&:hover":{"--variant-containedBg":o.vars?o.vars.palette.Button.inheritContainedHoverBg:T,"--variant-textBg":o.alpha((o.vars||o).palette.text.primary,(o.vars||o).palette.action.hoverOpacity),"--variant-outlinedBg":o.alpha((o.vars||o).palette.text.primary,(o.vars||o).palette.action.hoverOpacity)}}}},{props:{size:"small",variant:"text"},style:{padding:"4px 5px",fontSize:o.typography.pxToRem(13)}},{props:{size:"large",variant:"text"},style:{padding:"8px 11px",fontSize:o.typography.pxToRem(15)}},{props:{size:"small",variant:"outlined"},style:{padding:"3px 9px",fontSize:o.typography.pxToRem(13)}},{props:{size:"large",variant:"outlined"},style:{padding:"7px 21px",fontSize:o.typography.pxToRem(15)}},{props:{size:"small",variant:"contained"},style:{padding:"4px 10px",fontSize:o.typography.pxToRem(13)}},{props:{size:"large",variant:"contained"},style:{padding:"8px 22px",fontSize:o.typography.pxToRem(15)}},{props:{disableElevation:!0},style:{boxShadow:"none","&:hover":{boxShadow:"none"}
198,[`&.${buttonClasses.focusVisible}`]:{boxShadow:"none"},"&:active":{boxShadow:"none"},[`&.${buttonClasses.disabled}`]:{boxShadow:"none"}}},{props:{fullWidth:!0},style:{width:"100%"}},{props:{loadingPosition:"center"},style:{transition:o.transitions.create(["background-color","box-shadow","border-color"],{duration:o.transitions.duration.short}),[`&.${buttonClasses.loading}`]:{color:"transparent"}}}]}})),ButtonStartIcon=styled("span",{name:"MuiButton",slot:"StartIcon",overridesResolver:(o,u)=>{const{ownerState:T}=o;return[u.startIcon,T.loading&&u.startIconLoadingStart,u[`iconSize${capitalize(T.size)}`]]}})(({theme:o})=>({display:"inherit",marginRight:8,marginLeft:-4,variants:[{props:{size:"small"},style:{marginLeft:-2}},{props:{loadingPosition:"start",loading:!0},style:{transition:o.transitions.create(["opacity"],{duration:o.transitions.duration.short}),opacity:0}},{props:{loadingPosition:"start",loading:!0,fullWidth:!0},style:{marginRight:-8}},...commonIconStyles]})),ButtonEndIcon=styled("span",{name:"MuiButton",slot:"EndIcon",overridesResolver:(o,u)=>{const{ownerState:T}=o;return[u.endIcon,T.loading&&u.endIconLoadingEnd,u[`iconSize${capitalize(T.size)}`]]}})(({theme:o})=>({display:"inherit",marginRight:-4,marginLeft:8,variants:[{props:{size:"small"},style:{marginRight:-2}},{props:{loadingPosition:"end",loading:!0},style:{transition:o.transitions.create(["opacity"],{duration:o.transitions.duration.short}),opacity:0}},{props:{loadingPosition:"end",loading:!0,fullWidth:!0},style:{marginLeft:-8}},...commonIconStyles]})),ButtonLoadingIndicator=styled("span",{name:"MuiButton",slot:"LoadingIndicator"})(({theme:o})=>({display:"none",position:"absolute",visibility:"visible",variants:[{props:{loading:!0},style:{display:"flex"}},{props:{loadingPosition:"start"},style:{left:14}},{props:{loadingPosition:"start",size:"small"},style:{left:10}},{props:{variant:"text",loadingPosition:"start"},style:{left:6}},{props:{loadingPosition:"center"},style:{left:"50%",transform:"translate(-50%)",color:(o.vars||o).palette.action.disabled}},{props:{loadingPosition:"end"},style:{right:14}},{props:{loadingPosition:"end",size:"small"},style:{right:10}},{props:{variant:"text",loadingPosition:"end"},style:{right:6}},{props:{loadingPosition:"start",fullWidth:!0},style:{position:"relative",left:-10}},{props:{loadingPosition:"end",fullWidth:!0},style:{position:"relative",right:-10}}]})),ButtonLoadingIconPlaceholder=styled("span",{name:"MuiButton",slot:"LoadingIconPlaceholder"})({display:"inline-block",width:"1em",height:"1em"}),Button=reactExports.forwardRef(function(u,T){const S=reactExports.useContext(ButtonGroupContext),E=reactExports.useContext(ButtonGroupButtonContext),C=resolveProps(S,u),_=useDefaultProps({props:C,name:"MuiButton"}),{children:P,color:R="primary",component:I="button",className:L,disabled:j=!1,disableElevation:M=!1,disableFocusRipple:D=!1,endIcon:F,focusVisibleClassName:N,fullWidth:G=!1,id:B,loading:H=null,loadingIndicator:O,loadingPosition:V="center",size:U="medium",startIcon:W,type:K,variant:Y="text",...ee}=_,oe=useId(B),se=O??jsxRuntimeExports.jsx(CircularProgress,{"aria-labelledby":oe,color:"inherit",size:16}),Q={..._,color:R,component:I,disabled:j,disableElevation:M,disableFocusRipple:D,fullWidth:G,loading:H,loadingIndicator:se,loadingPosition:V,size:U,type:K,variant:Y},ie=useUtilityClasses$C(Q),ae=(W||H&&V==="start")&&jsxRuntimeExports.jsx(ButtonStartIcon,{className:ie.startIcon,ownerState:Q,children:W||jsxRuntimeExports.jsx(ButtonLoadingIconPlaceholder,{className:ie.loadingIconPlaceholder,ownerState:Q})}),re=(F||H&&V==="end")&&jsxRuntimeExports.jsx(ButtonEndIcon,{className:ie.endIcon,ownerState:Q,children:F||jsxRuntimeExports.jsx(ButtonLoadingIconPlaceholder,{className:ie.loadingIconPlaceholder,ownerState:Q})}),J=E||"",te=typeof H=="boolean"?jsxRuntimeExports.jsx("span",{className:ie.loadingWrapper,style:{display:"contents"},children:H&&jsxRuntimeExports.jsx(ButtonLoadingIndicator,{className:ie.loadingIndicator,ownerState:Q,children:se})}):null;return jsxRuntimeExports.jsxs(ButtonRoot,{ownerState:Q,className:clsx(S.className,ie.root,L,J),component:I,disabled:j||H,focusRipple:!D,focusVisibleClassName:clsx(ie.focusVisible,N),ref:T,type:K,id:H?oe:B,...ee,classes:ie,children:[ae,V!=="end"&&te,P,V==="end"&&te,re]})});function getScrollbarSize(o=window){const u=o.document.documentElement.clientWidth;return o.innerWidth-u}function isOverflowing(o){const u=ownerDocument(o);return u.body===o?ownerWindow(o).innerWidth>u.documentElement.clientWidth:o.scrollHeight>o.clientHeight}function ariaHidden(o,u){u?o.setAttribute("aria-hidden","true"):o.removeAttribute("aria-hidden")}function getPaddingRight(o){return parseInt(ownerWindow(o).getComputedStyle(o).paddingRight,10)||0}function isAriaHiddenForbiddenOnElement(o){const T=["TEMPLATE","SCRIPT","STYLE","LINK","MAP","META","NOSCRIPT","PICTURE","COL","COLGROUP","PARAM","SLOT","SOURCE","TRACK"].includes(o.tagName),S=o.tagName==="INPUT"&&o.getAttribute("type")==="hidden";return T||S}function ariaHiddenSiblings(o,u,T,S,E){const C=[u,T,...S];[].forEach.call(o.children,_=>{const P=!C.includes(_),R=!isAriaHiddenForbiddenOnElement(_);P&&R&&ariaHidden(_,E)})}function findIndexOf(o,u){let T=-1;return o.some((S,E)=>u(S)?(T=E,!0):!1),T}function handleContainer(o,u){const T=[],S=o.container;if(!u.disableScrollLock){if(isOverflowing(S)){const _=getScrollbarSize(ownerWindow(S));T.push({value:S.style.paddingRight,property:"padding-right",el:S}
198),S.style.paddingRight=`${getPaddingRight(S)+_}px`;const P=ownerDocument(S).querySelectorAll(".mui-fixed");[].forEach.call(P,R=>{T.push({value:R.style.paddingRight,property:"padding-right",el:R}),R.style.paddingRight=`${getPaddingRight(R)+_}px`})}let C;if(S.parentNode instanceof DocumentFragment)C=ownerDocument(S).body;else{const _=S.parentElement,P=ownerWindow(S);C=(_==null?void 0:_.nodeName)==="HTML"&&P.getComputedStyle(_).overflowY==="scroll"?_:S}T.push({value:C.style.overflow,property:"overflow",el:C},{value:C.style.overflowX,property:"overflow-x",el:C},{value:C.style.overflowY,property:"overflow-y",el:C}),C.style.overflow="hidden"}return()=>{T.forEach(({value:C,el:_,property:P})=>{C?_.style.setProperty(P,C):_.style.removeProperty(P)})}}function getHiddenSiblings(o){const u=[];return[].forEach.call(o.children,T=>{T.getAttribute("aria-hidden")==="true"&&u.push(T)}),u}class ModalManager{constructor(){this.modals=[],this.containers=[]}add(u,T){let S=this.modals.indexOf(u);if(S!==-1)return S;S=this.modals.length,this.modals.push(u),u.modalRef&&ariaHidden(u.modalRef,!1);const E=getHiddenSiblings(T);ariaHiddenSiblings(T,u.mount,u.modalRef,E,!0);const C=findIndexOf(this.containers,_=>_.container===T);return C!==-1?(this.containers[C].modals.push(u),S):(this.containers.push({modals:[u],container:T,restore:null,hiddenSiblings:E}),S)}mount(u,T){const S=findIndexOf(this.containers,C=>C.modals.includes(u)),E=this.containers[S];E.restore||(E.restore=handleContainer(E,T))}remove(u,T=!0){const S=this.modals.indexOf(u);if(S===-1)return S;const E=findIndexOf(this.containers,_=>_.modals.includes(u)),C=this.containers[E];if(C.modals.splice(C.modals.indexOf(u),1),this.modals.splice(S,1),C.modals.length===0)C.restore&&C.restore(),u.modalRef&&ariaHidden(u.modalRef,T),ariaHiddenSiblings(C.container,u.mount,u.modalRef,C.hiddenSiblings,!1),this.containers.splice(E,1);else{const _=C.modals[C.modals.length-1];_.modalRef&&ariaHidden(_.modalRef,!1)}return S}isTopModal(u){return this.modals.length>0&&this.modals[this.modals.length-1]===u}}const candidatesSelector=["input","select","textarea","a[href]","button","[tabindex]","audio[controls]","video[controls]",'[contenteditable]:not([contenteditable="false"])'].join(",");function getTabIndex(o){const u=parseInt(o.getAttribute("tabindex")||"",10);return Number.isNaN(u)?o.contentEditable==="true"||(o.nodeName==="AUDIO"||o.nodeName==="VIDEO"||o.nodeName==="DETAILS")&&o.getAttribute("tabindex")===null?0:o.tabIndex:u}function isNonTabbableRadio(o){if(o.tagName!=="INPUT"||o.type!=="radio"||!o.name)return!1;const u=S=>o.ownerDocument.querySelector(`input[type="radio"]${S}`);let T=u(`[name="${o.name}"]:checked`);return T||(T=u(`[name="${o.name}"]`)),T!==o}function isNodeMatchingSelectorFocusable(o){return!(o.disabled||o.tagName==="INPUT"&&o.type==="hidden"||isNonTabbableRadio(o))}function defaultGetTabbable(o){const u=[],T=[];return Array.from(o.querySelectorAll(candidatesSelector)).forEach((S,E)=>{const C=getTabIndex(S);C===-1||!isNodeMatchingSelectorFocusable(S)||(C===0?u.push(S):T.push({documentOrder:E,tabIndex:C,node:S}))}),T.sort((S,E)=>S.tabIndex===E.tabIndex?S.documentOrder-E.documentOrder:S.tabIndex-E.tabIndex).map(S=>S.node).concat(u)}function defaultIsEnabled(){return!0}function FocusTrap(o){const{children:u,disableAutoFocus:T=!1,disableEnforceFocus:S=!1,disableRestoreFocus:E=!1,getTabbable:C=defaultGetTabbable,isEnabled:_=defaultIsEnabled,open:P}=o,R=reactExports.useRef(!1),I=reactExports.useRef(null),L=reactExports.useRef(null),j=reactExports.useRef(null),M=reactExports.useRef(null),D=reactExports.useRef(!1),F=reactExports.useRef(null),N=useForkRef(getReactElementRef(u),F),G=reactExports.useRef(null);reactExports.useEffect(()=>{!P||!F.current||(D.current=!T)},[T,P]),reactExports.useEffect(()=>{if(!P||!F.current)return;const O=ownerDocument(F.current);return F.current.contains(O.activeElement)||(F.current.hasAttribute("tabIndex")||F.current.setAttribute("tabIndex","-1"),D.current&&F.current.focus()),()=>{E||(j.current&&j.current.focus&&(R.current=!0,j.current.focus()),j.current=null)}},[P]),reactExports.useEffect(()=>{if(!P||!F.current)return;const O=ownerDocument(F.current),V=K=>{G.current=K,!(S||!_()||K.key!=="Tab")&&O.activeElement===F.current&&K.shiftKey&&(R.current=!0,L.current&&L.current.focus())},U=()=>{var ee,oe;const K=F.current;if(K===null)return;if(!O.hasFocus()||!_()||R.current){R.current=!1;return}if(K.contains(O.activeElement)||S&&O.activeElement!==I.current&&O.activeElement!==L.current)return;if(O.activeElement!==M.current)M.current=null;else if(M.current!==null)return;if(!D.current)return;let Y=[];if((O.activeElement===I.current||O.activeElement===L.current)&&(Y=C(F.current)),Y.length>0){const se=!!((ee=G.current)!=null&&ee.shiftKey&&((oe=G.current)==null?void 0:oe.key)==="Tab"),Q=Y[0],ie=Y[Y.length-1];
198typeof Q!="string"&&typeof ie!="string"&&(se?ie.focus():Q.focus())}else K.focus()};O.addEventListener("focusin",U),O.addEventListener("keydown",V,!0);const W=setInterval(()=>{O.activeElement&&O.activeElement.tagName==="BODY"&&U()},50);return()=>{clearInterval(W),O.removeEventListener("focusin",U),O.removeEventListener("keydown",V,!0)}},[T,S,E,_,P,C]);const B=O=>{j.current===null&&(j.current=O.relatedTarget),D.current=!0,M.current=O.target;const V=u.props.onFocus;V&&V(O)},H=O=>{j.current===null&&(j.current=O.relatedTarget),D.current=!0};return jsxRuntimeExports.jsxs(reactExports.Fragment,{children:[jsxRuntimeExports.jsx("div",{tabIndex:P?0:-1,onFocus:H,ref:I,"data-testid":"sentinelStart"}),reactExports.cloneElement(u,{ref:N,onFocus:B}),jsxRuntimeExports.jsx("div",{tabIndex:P?0:-1,onFocus:H,ref:L,"data-testid":"sentinelEnd"})]})}function getContainer(o){return typeof o=="function"?o():o}function getHasTransition(o){return o?o.props.hasOwnProperty("in"):!1}const noop$2=()=>{},manager$2=new ModalManager;function useModal(o){const{container:u,disableEscapeKeyDown:T=!1,disableScrollLock:S=!1,closeAfterTransition:E=!1,onTransitionEnter:C,onTransitionExited:_,children:P,onClose:R,open:I,rootRef:L}=o,j=reactExports.useRef({}),M=reactExports.useRef(null),D=reactExports.useRef(null),F=useForkRef(D,L),[N,G]=reactExports.useState(!I),B=getHasTransition(P);let H=!0;(o["aria-hidden"]==="false"||o["aria-hidden"]===!1)&&(H=!1);const O=()=>ownerDocument(M.current),V=()=>(j.current.modalRef=D.current,j.current.mount=M.current,j.current),U=()=>{manager$2.mount(V(),{disableScrollLock:S}),D.current&&(D.current.scrollTop=0)},W=useEventCallback(()=>{const re=getContainer(u)||O().body;manager$2.add(V(),re),D.current&&U()}),K=()=>manager$2.isTopModal(V()),Y=useEventCallback(re=>{M.current=re,re&&(I&&K()?U():D.current&&ariaHidden(D.current,H))}),ee=reactExports.useCallback(()=>{manager$2.remove(V(),H)},[H]);reactExports.useEffect(()=>()=>{ee()},[ee]),reactExports.useEffect(()=>{I?W():(!B||!E)&&ee()},[I,ee,B,E,W]);const oe=re=>J=>{var te;(te=re.onKeyDown)==null||te.call(re,J),!(J.key!=="Escape"||J.which===229||!K())&&(T||(J.stopPropagation(),R&&R(J,"escapeKeyDown")))},se=re=>J=>{var te;(te=re.onClick)==null||te.call(re,J),J.target===J.currentTarget&&R&&R(J,"backdropClick")};return{getRootProps:(re={})=>{const J=extractEventHandlers(o);delete J.onTransitionEnter,delete J.onTransitionExited;const te={...J,...re};return{role:"presentation",...te,onKeyDown:oe(te),ref:F}},getBackdropProps:(re={})=>{const J=re;return{"aria-hidden":!0,...J,onClick:se(J),open:I}},getTransitionProps:()=>{const re=()=>{G(!1),C&&C()},J=()=>{G(!0),_&&_(),E&&ee()};return{onEnter:createChainedFunction(re,(P==null?void 0:P.props.onEnter)??noop$2),onExited:createChainedFunction(J,(P==null?void 0:P.props.onExited)??noop$2)}},rootRef:F,portalRef:Y,isTopModal:K,exited:N,hasTransition:B}}function getModalUtilityClass(o){return generateUtilityClass("MuiModal",o)}generateUtilityClasses("MuiModal",["root","hidden","backdrop"]);const useUtilityClasses$B=o=>{const{open:u,exited:T,classes:S}=o;return composeClasses({root:["root",!u&&T&&"hidden"],backdrop:["backdrop"]},getModalUtilityClass,S)},ModalRoot=styled("div",{name:"MuiModal",slot:"Root",overridesResolver:(o,u)=>{const{ownerState:T}=o;return[u.root,!T.open&&T.exited&&u.hidden]}})(memoTheme(({theme:o})=>({position:"fixed",zIndex:(o.vars||o).zIndex.modal,right:0,bottom:0,top:0,left:0,variants:[{props:({ownerState:u})=>!u.open&&u.exited,style:{visibility:"hidden"}}]}))),ModalBackdrop=styled(Backdrop,{name:"MuiModal",slot:"Backdrop"})({zIndex:-1}),Modal=reactExports.forwardRef(function(u,T){const S=useDefaultProps({name:"MuiModal",props:u}),{BackdropComponent:E=ModalBackdrop,BackdropProps:C,classes:_,className:P,closeAfterTransition:R=!1,children:I,container:L,component:j,components:M={},componentsProps:D={},disableAutoFocus:F=!1,disableEnforceFocus:N=!1,disableEscapeKeyDown:G=!1,disablePortal:B=!1,disableRestoreFocus:H=!1,disableScrollLock:O=!1,hideBackdrop:V=!1,keepMounted:U=!1,onClose:W,onTransitionEnter:K,onTransitionExited:Y,open:ee,slotProps:oe={},slots:se={},theme:Q,...ie}
198=S,ae={...S,closeAfterTransition:R,disableAutoFocus:F,disableEnforceFocus:N,disableEscapeKeyDown:G,disablePortal:B,disableRestoreFocus:H,disableScrollLock:O,hideBackdrop:V,keepMounted:U},{getRootProps:re,getBackdropProps:J,getTransitionProps:te,portalRef:Z,isTopModal:X,exited:de,hasTransition:he}=useModal({...ae,rootRef:T}),ne={...ae,exited:de},ue=useUtilityClasses$B(ne),ce={};if(I.props.tabIndex===void 0&&(ce.tabIndex="-1"),he){const{onEnter:we,onExited:Le}=te();ce.onEnter=we,ce.onExited=Le}const fe={slots:{root:M.Root,backdrop:M.Backdrop,...se},slotProps:{...D,...oe}},[ve,Te]=useSlot("root",{ref:T,elementType:ModalRoot,externalForwardedProps:{...fe,...ie,component:j},getSlotProps:re,ownerState:ne,className:clsx(P,ue==null?void 0:ue.root,!ne.open&&ne.exited&&(ue==null?void 0:ue.hidden))}),[Se,ke]=useSlot("backdrop",{ref:C==null?void 0:C.ref,elementType:E,externalForwardedProps:fe,shouldForwardComponentProp:!0,additionalProps:C,getSlotProps:we=>J({...we,onClick:Le=>{we!=null&&we.onClick&&we.onClick(Le)}}),className:clsx(C==null?void 0:C.className,ue==null?void 0:ue.backdrop),ownerState:ne});return!U&&!ee&&(!he||de)?null:jsxRuntimeExports.jsx(Portal,{ref:Z,container:L,disablePortal:B,children:jsxRuntimeExports.jsxs(ve,{...Te,children:[!V&&E?jsxRuntimeExports.jsx(Se,{...ke}):null,jsxRuntimeExports.jsx(FocusTrap,{disableEnforceFocus:N,disableAutoFocus:F,disableRestoreFocus:H,isEnabled:X,open:ee,children:reactExports.cloneElement(I,ce)})]})})});function getDialogUtilityClass(o){return generateUtilityClass("MuiDialog",o)}const dialogClasses=generateUtilityClasses("MuiDialog",["root","scrollPaper","scrollBody","container","paper","paperScrollPaper","paperScrollBody","paperWidthFalse","paperWidthXs","paperWidthSm","paperWidthMd","paperWidthLg","paperWidthXl","paperFullWidth","paperFullScreen"]),DialogContext=reactExports.createContext({}),DialogBackdrop=styled(Backdrop,{name:"MuiDialog",slot:"Backdrop",overrides:(o,u)=>u.backdrop})({zIndex:-1}),useUtilityClasses$A=o=>{const{classes:u,scroll:T,maxWidth:S,fullWidth:E,fullScreen:C}=o,_={root:["root"],container:["container",`scroll${capitalize(T)}`],paper:["paper",`paperScroll${capitalize(T)}`,`paperWidth${capitalize(String(S))}`,E&&"paperFullWidth",C&&"paperFullScreen"]};return composeClasses(_,getDialogUtilityClass,u)},DialogRoot=styled(Modal,{name:"MuiDialog",slot:"Root"})({"@media print":{position:"absolute !important"}}),DialogContainer=styled("div",{name:"MuiDialog",slot:"Container",overridesResolver:(o,u)=>{const{ownerState:T}=o;return[u.container,u[`scroll${capitalize(T.scroll)}`]]}})({height:"100%","@media print":{height:"auto"},outline:0,variants:[{props:{scroll:"paper"},style:{display:"flex",justifyContent:"center",alignItems:"center"}},{props:{scroll:"body"},style:{overflowY:"auto",overflowX:"hidden",textAlign:"center","&::after":{content:'""',display:"inline-block",verticalAlign:"middle",height:"100%",width:"0"}}}]}),DialogPaper=styled(Paper,{name:"MuiDialog",slot:"Paper",overridesResolver:(o,u)=>{const{ownerState:T}=o;return[u.paper,u[`scrollPaper${capitalize(T.scroll)}`],u[`paperWidth${capitalize(String(T.maxWidth))}`],T.fullWidth&&u.paperFullWidth,T.fullScreen&&u.paperFullScreen]}})(memoTheme(({theme:o})=>({margin:32,position:"relative",overflowY:"auto","@media print":{overflowY:"visible",boxShadow:"none"},variants:[{props:{scroll:"paper"},style:{display:"flex",flexDirection:"column",maxHeight:"calc(100% - 64px)"}},{props:{scroll:"body"},style:{display:"inline-block",verticalAlign:"middle",textAlign:"initial"}},{props:({ownerState:u})=>!u.maxWidth,style:{maxWidth:"calc(100% - 64px)"}},{props:{maxWidth:"xs"},style:{maxWidth:o.breakpoints.unit==="px"?Math.max(o.breakpoints.values.xs,444):`max(${o.breakpoints.values.xs}${o.breakpoints.unit}, 444px)`,[`&.${dialogClasses.paperScrollBody}`]:{[o.breakpoints.down(Math.max(o.breakpoints.values.xs,444)+32*2)]:{maxWidth:"calc(100% - 64px)"}}}},...Object.keys(o.breakpoints.values).filter(u=>u!=="xs").map(u=>({props:{maxWidth:u},style:{maxWidth:`${o.breakpoints.values[u]}${o.breakpoints.unit}`,[`&.${dialogClasses.paperScrollBody}`]:{[o.breakpoints.down(o.breakpoints.values[u]+32*2)]:{maxWidth:"calc(100% - 64px)"}}}})),{props:({ownerState:u})=>u.fullWidth,style:{width:"calc(100% - 64px)"}},{props:({ownerState:u})=>u.fullScreen,style:{margin:0,width:"100%",maxWidth:"100%",height:"100%",maxHeight:"none",borderRadius:0,[`&.${dialogClasses.paperScrollBody}`]:{margin:0,maxWidth:"100%"}}}]}))),Dialog=reactExports.forwardRef(function(u,T){const S=useDefaultProps({props:u,name:"MuiDialog"}),E=useTheme(),C={enter:E.transitions.duration.enteringScreen,exit:E.transitions.duration.leavingScreen},{"aria-describedby":_,"aria-labelledby":P,"aria-modal":R=!0,BackdropComponent:I,BackdropProps:L,children:j,className:M,disableEscapeKeyDown:D=!1,fullScreen:F=!1,fullWidth:N=!1,maxWidth:G="sm",onClick:B,onClose:H,open:O,PaperComponent:V=Paper,PaperProps:U={},scroll:W="paper",slots:K={},slotProps:Y={},TransitionComponent:ee=Fade,transitionDuration:oe=C,TransitionProps:se,...Q}=S,ie={...S,disableEscapeKeyDown:D,fullScreen:F,fullWidth:N,maxWidth:G,scroll:W}
198,ae=useUtilityClasses$A(ie),re=reactExports.useRef(),J=Me=>{re.current=Me.target===Me.currentTarget},te=Me=>{B&&B(Me),re.current&&(re.current=null,H&&H(Me,"backdropClick"))},Z=useId(P),X=reactExports.useMemo(()=>({titleId:Z}),[Z]),de={transition:ee,...K},he={transition:se,paper:U,backdrop:L,...Y},ne={slots:de,slotProps:he},[ue,ce]=useSlot("root",{elementType:DialogRoot,shouldForwardComponentProp:!0,externalForwardedProps:ne,ownerState:ie,className:clsx(ae.root,M),ref:T}),[fe,ve]=useSlot("backdrop",{elementType:DialogBackdrop,shouldForwardComponentProp:!0,externalForwardedProps:ne,ownerState:ie}),[Te,Se]=useSlot("paper",{elementType:DialogPaper,shouldForwardComponentProp:!0,externalForwardedProps:ne,ownerState:ie,className:clsx(ae.paper,U.className)}),[ke,we]=useSlot("container",{elementType:DialogContainer,externalForwardedProps:ne,ownerState:ie,className:ae.container}),[Le,pe]=useSlot("transition",{elementType:Fade,externalForwardedProps:ne,ownerState:ie,additionalProps:{appear:!0,in:O,timeout:oe,role:"presentation"}});return jsxRuntimeExports.jsx(ue,{closeAfterTransition:!0,slots:{backdrop:fe},slotProps:{backdrop:{transitionDuration:oe,as:I,...ve}},disableEscapeKeyDown:D,onClose:H,open:O,onClick:te,...ce,...Q,children:jsxRuntimeExports.jsx(Le,{...pe,children:jsxRuntimeExports.jsx(ke,{onMouseDown:J,...we,children:jsxRuntimeExports.jsx(Te,{as:V,elevation:24,role:"dialog","aria-describedby":_,"aria-labelledby":Z,"aria-modal":R,...Se,children:jsxRuntimeExports.jsx(DialogContext.Provider,{value:X,children:j})})})})})});function getDialogActionsUtilityClass(o){return generateUtilityClass("MuiDialogActions",o)}generateUtilityClasses("MuiDialogActions",["root","spacing"]);const useUtilityClasses$z=o=>{const{classes:u,disableSpacing:T}=o;return composeClasses({root:["root",!T&&"spacing"]},getDialogActionsUtilityClass,u)},DialogActionsRoot=styled("div",{name:"MuiDialogActions",slot:"Root",overridesResolver:(o,u)=>{const{ownerState:T}=o;return[u.root,!T.disableSpacing&&u.spacing]}})({display:"flex",alignItems:"center",padding:8,justifyContent:"flex-end",flex:"0 0 auto",variants:[{props:({ownerState:o})=>!o.disableSpacing,style:{"& > :not(style) ~ :not(style)":{marginLeft:8}}}]}),DialogActions=reactExports.forwardRef(function(u,T){const S=useDefaultProps({props:u,name:"MuiDialogActions"}),{className:E,disableSpacing:C=!1,..._}=S,P={...S,disableSpacing:C},R=useUtilityClasses$z(P);return jsxRuntimeExports.jsx(DialogActionsRoot,{className:clsx(R.root,E),ownerState:P,ref:T,..._})});function getDialogContentUtilityClass(o){return generateUtilityClass("MuiDialogContent",o)}generateUtilityClasses("MuiDialogContent",["root","dividers"]);function getDialogTitleUtilityClass(o){return generateUtilityClass("MuiDialogTitle",o)}const dialogTitleClasses=generateUtilityClasses("MuiDialogTitle",["root"]),useUtilityClasses$y=o=>{const{classes:u,dividers:T}=o;return composeClasses({root:["root",T&&"dividers"]},getDialogContentUtilityClass,u)},DialogContentRoot=styled("div",{name:"MuiDialogContent",slot:"Root",overridesResolver:(o,u)=>{const{ownerState:T}=o;return[u.root,T.dividers&&u.dividers]}})(memoTheme(({theme:o})=>({flex:"1 1 auto",WebkitOverflowScrolling:"touch",overflowY:"auto",padding:"20px 24px",variants:[{props:({ownerState:u})=>u.dividers,style:{padding:"16px 24px",borderTop:`1px solid ${(o.vars||o).palette.divider}`,borderBottom:`1px solid ${(o.vars||o).palette.divider}`}},{props:({ownerState:u})=>!u.dividers,style:{[`.${dialogTitleClasses.root} + &`]:{paddingTop:0}}}]}))),DialogContent=reactExports.forwardRef(function(u,T){const S=useDefaultProps({props:u,name:"MuiDialogContent"}),{className:E,dividers:C=!1,..._}=S,P={...S,dividers:C},R=useUtilityClasses$y(P);return jsxRuntimeExports.jsx(DialogContentRoot,{className:clsx(R.root,E),ownerState:P,ref:T,..._})}),useUtilityClasses$x=o=>{const{classes:u}=o;return composeClasses({root:["root"]},getDialogTitleUtilityClass,u)},DialogTitleRoot=styled(Typography,{name:"MuiDialogTitle",slot:"Root"})({padding:"16px 24px",flex:"0 0 auto"}),DialogTitle=reactExports.forwardRef(function(u,T){const S=useDefaultProps({props:u,name:"MuiDialogTitle"}),{className:E,id:C,..._}=S,P=S,R=useUtilityClasses$x(P),{titleId:I=C}=reactExports.useContext(DialogContext);return jsxRuntimeExports.jsx(DialogTitleRoot,{component:"h2",className:clsx(R.root,E),ownerState:P,ref:T,variant:"h6",id:C??I,..._})});function getDividerUtilityClass(o){return generateUtilityClass("MuiDivider",o)}const dividerClasses=generateUtilityClasses("MuiDivider",["root","absolute","fullWidth","inset","middle","flexItem","light","vertical","withChildren","withChildrenVertical","textAlignRight","textAlignLeft","wrapper","wrapperVertical"]);function getTranslateValue(o,u,T){const S=u.getBoundingClientRect(),E=T&&T.getBoundingClientRect(),C=ownerWindow(u);let _;if(u.fakeTransform)_=u.fakeTransform;else{const I=C.getComputedStyle(u);_=I.getPropertyValue("-webkit-transform")||I.getPropertyValue("transform")}let P=0,R=0;if(_&&_!=="none"&&typeof _=="string"){const I=_.split("(")[1].split(")")[0].split(",");P=parseInt(I[4],10),R=parseInt(I[5],10)}return o==="left"?E?`translateX(${E.right+P-S.left}px)`:`translateX(${C.innerWidth+P-S.left}px)`:o==="right"?E?`translateX(-${S.right-E.left-P}px)`:`translateX(-${S.left+S.width-P}px)`:o==="up"?E?`translateY(${E.bottom+R-S.top}px)`:`translateY(${C.innerHeight+R-S.top}px)`:E?`translateY(-${S.top-E.top+S.height-R}px)`:`translateY(-${S.top+S.height-R}px)`}
198function resolveContainer(o){return typeof o=="function"?o():o}function setTranslateValue(o,u,T){const S=resolveContainer(T),E=getTranslateValue(o,u,S);E&&(u.style.webkitTransform=E,u.style.transform=E)}const Slide=reactExports.forwardRef(function(u,T){const S=useTheme(),E={enter:S.transitions.easing.easeOut,exit:S.transitions.easing.sharp},C={enter:S.transitions.duration.enteringScreen,exit:S.transitions.duration.leavingScreen},{addEndListener:_,appear:P=!0,children:R,container:I,direction:L="down",easing:j=E,in:M,onEnter:D,onEntered:F,onEntering:N,onExit:G,onExited:B,onExiting:H,style:O,timeout:V=C,TransitionComponent:U=Transition,...W}=u,K=reactExports.useRef(null),Y=useForkRef(getReactElementRef(R),K,T),ee=Z=>X=>{Z&&(X===void 0?Z(K.current):Z(K.current,X))},oe=ee((Z,X)=>{setTranslateValue(L,Z,I),reflow(Z),D&&D(Z,X)}),se=ee((Z,X)=>{const de=getTransitionProps({timeout:V,style:O,easing:j},{mode:"enter"});Z.style.webkitTransition=S.transitions.create("-webkit-transform",{...de}),Z.style.transition=S.transitions.create("transform",{...de}),Z.style.webkitTransform="none",Z.style.transform="none",N&&N(Z,X)}),Q=ee(F),ie=ee(H),ae=ee(Z=>{const X=getTransitionProps({timeout:V,style:O,easing:j},{mode:"exit"});Z.style.webkitTransition=S.transitions.create("-webkit-transform",X),Z.style.transition=S.transitions.create("transform",X),setTranslateValue(L,Z,I),G&&G(Z)}),re=ee(Z=>{Z.style.webkitTransition="",Z.style.transition="",B&&B(Z)}),J=Z=>{_&&_(K.current,Z)},te=reactExports.useCallback(()=>{K.current&&setTranslateValue(L,K.current,I)},[L,I]);return reactExports.useEffect(()=>{if(M||L==="down"||L==="right")return;const Z=debounce(()=>{K.current&&setTranslateValue(L,K.current,I)}),X=ownerWindow(K.current);return X.addEventListener("resize",Z),()=>{Z.clear(),X.removeEventListener("resize",Z)}},[L,M,I]),reactExports.useEffect(()=>{M||te()},[M,te]),jsxRuntimeExports.jsx(U,{nodeRef:K,onEnter:oe,onEntered:Q,onEntering:se,onExit:ae,onExited:re,onExiting:ie,addEndListener:J,appear:P,in:M,timeout:V,...W,children:(Z,{ownerState:X,...de})=>reactExports.cloneElement(R,{ref:Y,style:{visibility:Z==="exited"&&!M?"hidden":void 0,...O,...R.props.style},...de})})});function getDrawerUtilityClass(o){return generateUtilityClass("MuiDrawer",o)}generateUtilityClasses("MuiDrawer",["root","docked","paper","anchorLeft","anchorRight","anchorTop","anchorBottom","paperAnchorLeft","paperAnchorRight","paperAnchorTop","paperAnchorBottom","paperAnchorDockedLeft","paperAnchorDockedRight","paperAnchorDockedTop","paperAnchorDockedBottom","modal"]);const overridesResolver$3=(o,u)=>{const{ownerState:T}=o;return[u.root,(T.variant==="permanent"||T.variant==="persistent")&&u.docked,u.modal]},useUtilityClasses$w=o=>{const{classes:u,anchor:T,variant:S}=o,E={root:["root",`anchor${capitalize(T)}`],docked:[(S==="permanent"||S==="persistent")&&"docked"],modal:["modal"],paper:["paper",`paperAnchor${capitalize(T)}`,S!=="temporary"&&`paperAnchorDocked${capitalize(T)}`]};return composeClasses(E,getDrawerUtilityClass,u)},DrawerRoot=styled(Modal,{name:"MuiDrawer",slot:"Root",overridesResolver:overridesResolver$3})(memoTheme(({theme:o})=>({zIndex:(o.vars||o).zIndex.drawer}))),DrawerDockedRoot=styled("div",{shouldForwardProp:rootShouldForwardProp,name:"MuiDrawer",slot:"Docked",skipVariantsResolver:!1,overridesResolver:overridesResolver$3})({flex:"0 0 auto"}),DrawerPaper=styled(Paper,{name:"MuiDrawer",slot:"Paper",overridesResolver:(o,u)=>{const{ownerState:T}=o;return[u.paper,u[`paperAnchor${capitalize(T.anchor)}`],T.variant!=="temporary"&&u[`paperAnchorDocked${capitalize(T.anchor)}`]]}})(memoTheme(({theme:o})=>({overflowY:"auto",display:"flex",flexDirection:"column",height:"100%",flex:"1 0 auto",zIndex:(o.vars||o).zIndex.drawer,WebkitOverflowScrolling:"touch",position:"fixed",top:0,outline:0,variants:[{props:{anchor:"left"},style:{left:0}},{props:{anchor:"top"},style:{top:0,left:0,right:0,height:"auto",maxHeight:"100%"}},{props:{anchor:"right"},style:{right:0}},{props:{anchor:"bottom"},style:{top:"auto",left:0,bottom:0,right:0,height:"auto",maxHeight:"100%"}},{props:({ownerState:u})=>u.anchor==="left"&&u.variant!=="temporary",style:{borderRight:`1px solid ${(o.vars||o).palette.divider}`}},{props:({ownerState:u})=>u.anchor==="top"&&u.variant!=="temporary",style:{borderBottom:`1px solid ${(o.vars||o).palette.divider}`}},{props:({ownerState:u})=>u.anchor==="right"&&u.variant!=="temporary",style:{borderLeft:`1px solid ${(o.vars||o).palette.divider}`}},{props:({ownerState:u})=>u.anchor==="bottom"&&u.variant!=="temporary",style:{borderTop:`1px solid ${(o.vars||o).palette.divider}`}}]}
198))),oppositeDirection={left:"right",right:"left",top:"down",bottom:"up"};function isHorizontal(o){return["left","right"].includes(o)}function getAnchor({direction:o},u){return o==="rtl"&&isHorizontal(u)?oppositeDirection[u]:u}const Drawer=reactExports.forwardRef(function(u,T){const S=useDefaultProps({props:u,name:"MuiDrawer"}),E=useTheme(),C=useRtl(),_={enter:E.transitions.duration.enteringScreen,exit:E.transitions.duration.leavingScreen},{anchor:P="left",BackdropProps:R,children:I,className:L,elevation:j=16,hideBackdrop:M=!1,ModalProps:{BackdropProps:D,...F}={},onClose:N,open:G=!1,PaperProps:B={},SlideProps:H,TransitionComponent:O,transitionDuration:V=_,variant:U="temporary",slots:W={},slotProps:K={},...Y}=S,ee=reactExports.useRef(!1);reactExports.useEffect(()=>{ee.current=!0},[]);const oe=getAnchor({direction:C?"rtl":"ltr"},P),Q={...S,anchor:P,elevation:j,open:G,variant:U,...Y},ie=useUtilityClasses$w(Q),ae={slots:{transition:O,...W},slotProps:{paper:B,transition:H,...K,backdrop:mergeSlotProps$1(K.backdrop||{...R,...D},{transitionDuration:V})}},[re,J]=useSlot("root",{ref:T,elementType:DrawerRoot,className:clsx(ie.root,ie.modal,L),shouldForwardComponentProp:!0,ownerState:Q,externalForwardedProps:{...ae,...Y,...F},additionalProps:{open:G,onClose:N,hideBackdrop:M,slots:{backdrop:ae.slots.backdrop},slotProps:{backdrop:ae.slotProps.backdrop}}}),[te,Z]=useSlot("paper",{elementType:DrawerPaper,shouldForwardComponentProp:!0,className:clsx(ie.paper,B.className),ownerState:Q,externalForwardedProps:ae,additionalProps:{elevation:U==="temporary"?j:0,square:!0,...U==="temporary"&&{role:"dialog","aria-modal":"true"}}}),[X,de]=useSlot("docked",{elementType:DrawerDockedRoot,ref:T,className:clsx(ie.root,ie.docked,L),ownerState:Q,externalForwardedProps:ae,additionalProps:Y}),[he,ne]=useSlot("transition",{elementType:Slide,ownerState:Q,externalForwardedProps:ae,additionalProps:{in:G,direction:oppositeDirection[oe],timeout:V,appear:ee.current}}),ue=jsxRuntimeExports.jsx(te,{...Z,children:I});if(U==="permanent")return jsxRuntimeExports.jsx(X,{...de,children:ue});const ce=jsxRuntimeExports.jsx(he,{...ne,children:ue});return U==="persistent"?jsxRuntimeExports.jsx(X,{...de,children:ce}):jsxRuntimeExports.jsx(re,{...J,children:ce})});function getFabUtilityClass(o){return generateUtilityClass("MuiFab",o)}const fabClasses=generateUtilityClasses("MuiFab",["root","primary","secondary","extended","circular","focusVisible","disabled","colorInherit","sizeSmall","sizeMedium","sizeLarge","info","error","warning","success"]),useUtilityClasses$v=o=>{const{color:u,variant:T,classes:S,size:E}=o,C={root:["root",T,`size${capitalize(E)}`,u==="inherit"?"colorInherit":u]},_=composeClasses(C,getFabUtilityClass,S);return{...S,..._}},FabRoot=styled(ButtonBase,{name:"MuiFab",slot:"Root",shouldForwardProp:o=>rootShouldForwardProp(o)||o==="classes",overridesResolver:(o,u)=>{const{ownerState:T}=o;return[u.root,u[T.variant],u[`size${capitalize(T.size)}`],T.color==="inherit"&&u.colorInherit,u[capitalize(T.size)],u[T.color]]}})(memoTheme(({theme:o})=>{var u,T;return{...o.typography.button,minHeight:36,transition:o.transitions.create(["background-color","box-shadow","border-color"],{duration:o.transitions.duration.short}),borderRadius:"50%",padding:0,minWidth:0,width:56,height:56,zIndex:(o.vars||o).zIndex.fab,boxShadow:(o.vars||o).shadows[6],"&:active":{boxShadow:(o.vars||o).shadows[12]},color:o.vars?o.vars.palette.grey[900]:(T=(u=o.palette).getContrastText)==null?void 0:T.call(u,o.palette.grey[300]),backgroundColor:(o.vars||o).palette.grey[300],"&:hover":{backgroundColor:(o.vars||o).palette.grey.A100,"@media (hover: none)":{backgroundColor:(o.vars||o).palette.grey[300]},textDecoration:"none"},[`&.${fabClasses.focusVisible}`]:{boxShadow:(o.vars||o).shadows[6]},variants:[{props:{size:"small"},style:{width:40,height:40}},{props:{size:"medium"},style:{width:48,height:48}},{props:{variant:"extended"},style:{borderRadius:48/2,padding:"0 16px",width:"auto",minHeight:"auto",minWidth:48,height:48}},{props:{variant:"extended",size:"small"},style:{width:"auto",padding:"0 8px",borderRadius:34/2,minWidth:34,he
198ight:34}},{props:{variant:"extended",size:"medium"},style:{width:"auto",padding:"0 16px",borderRadius:40/2,minWidth:40,height:40}},{props:{color:"inherit"},style:{color:"inherit"}}]}}),memoTheme(({theme:o})=>({variants:[...Object.entries(o.palette).filter(createSimplePaletteValueFilter(["dark","contrastText"])).map(([u])=>({props:{color:u},style:{color:(o.vars||o).palette[u].contrastText,backgroundColor:(o.vars||o).palette[u].main,"&:hover":{backgroundColor:(o.vars||o).palette[u].dark,"@media (hover: none)":{backgroundColor:(o.vars||o).palette[u].main}}}}))]})),memoTheme(({theme:o})=>({[`&.${fabClasses.disabled}`]:{color:(o.vars||o).palette.action.disabled,boxShadow:(o.vars||o).shadows[0],backgroundColor:(o.vars||o).palette.action.disabledBackground}}))),Fab=reactExports.forwardRef(function(u,T){const S=useDefaultProps({props:u,name:"MuiFab"}),{children:E,className:C,color:_="default",component:P="button",disabled:R=!1,disableFocusRipple:I=!1,focusVisibleClassName:L,size:j="large",variant:M="circular",...D}=S,F={...S,color:_,component:P,disabled:R,disableFocusRipple:I,size:j,variant:M},N=useUtilityClasses$v(F);return jsxRuntimeExports.jsx(FabRoot,{className:clsx(N.root,C),component:P,disabled:R,focusRipple:!I,focusVisibleClassName:clsx(N.focusVisible,L),ownerState:F,ref:T,...D,classes:N,children:E})}),useUtilityClasses$u=o=>{const{classes:u,disableUnderline:T,startAdornment:S,endAdornment:E,size:C,hiddenLabel:_,multiline:P}=o,R={root:["root",!T&&"underline",S&&"adornedStart",E&&"adornedEnd",C==="small"&&`size${capitalize(C)}`,_&&"hiddenLabel",P&&"multiline"],input:["input"]},I=composeClasses(R,getFilledInputUtilityClass,u);return{...u,...I}},FilledInputRoot=styled(InputBaseRoot,{shouldForwardProp:o=>rootShouldForwardProp(o)||o==="classes",name:"MuiFilledInput",slot:"Root",overridesResolver:(o,u)=>{const{ownerState:T}=o;return[...rootOverridesResolver(o,u),!T.disableUnderline&&u.underline]}})(memoTheme(({theme:o})=>{const u=o.palette.mode==="light",T=u?"rgba(0, 0, 0, 0.42)":"rgba(255, 255, 255, 0.7)",S=u?"rgba(0, 0, 0, 0.06)":"rgba(255, 255, 255, 0.09)",E=u?"rgba(0, 0, 0, 0.09)":"rgba(255, 255, 255, 0.13)",C=u?"rgba(0, 0, 0, 0.12)":"rgba(255, 255, 255, 0.12)";return{position:"relative",backgroundColor:o.vars?o.vars.palette.FilledInput.bg:S,borderTopLeftRadius:(o.vars||o).shape.borderRadius,borderTopRightRadius:(o.vars||o).shape.borderRadius,transition:o.transitions.create("background-color",{duration:o.transitions.duration.shorter,easing:o.transitions.easing.easeOut}),"&:hover":{backgroundColor:o.vars?o.vars.palette.FilledInput.hoverBg:E,"@media (hover: none)":{backgroundColor:o.vars?o.vars.palette.FilledInput.bg:S}},[`&.${filledInputClasses.focused}`]:{backgroundColor:o.vars?o.vars.palette.FilledInput.bg:S},[`&.${filledInputClasses.disabled}`]:{backgroundColor:o.vars?o.vars.palette.FilledInput.disabledBg:C},variants:[{props:({ownerState:_})=>!_.disableUnderline,style:{"&::after":{left:0,bottom:0,content:'""',position:"absolute",right:0,transform:"scaleX(0)",transition:o.transitions.create("transform",{duration:o.transitions.duration.shorter,easing:o.transitions.easing.easeOut}),pointerEvents:"none"},[`&.${filledInputClasses.focused}:after`]:{transform:"scaleX(1) translateX(0)"},[`&.${filledInputClasses.error}`]:{"&::before, &::after":{borderBottomColor:(o.vars||o).palette.error.main}},"&::before":{borderBottom:`1px solid ${o.vars?o.alpha(o.vars.palette.common.onBackground,o.vars.opacity.inputUnderline):T}`,left:0,bottom:0,content:'"\\00a0"',position:"absolute",right:0,transition:o.transitions.create("border-bottom-color",{duration:o.transitions.duration.shorter}),pointerEvents:"none"},[`&:hover:not(.${filledInputClasses.disabled}, .${filledInputClasses.error}):before`]:{borderBottom:`1px solid ${(o.vars||o).palette.text.primary}`},[`&.${filledInputClasses.disabled}:before`]:{borderBottomStyle:"dotted"}}},...Object.entries(o.palette).filter(createSimplePaletteValueFilter()).map(([_])=>{var P;return{props:{disableUnderline:!1,color:_},style:{"&::after":{borderBottom:`2px solid ${(P=(o.vars||o).palette[_])==null?void 0:P.main}`}}}}),{props:({ownerState:_})=>_.startAdornment,style:{paddingLeft:12}},{props:({ownerState:_})=>_.endAdornment,style:{paddingRight:12}},{props:({ownerState:_})=>_.multiline,style:{padding:"25px 12px 8px"}},{props:({ownerState:_,size:P})=>_.multiline&&P==="small",style:{paddingTop:21,paddingBottom:4}},{props:({ownerState:_})=>_.multiline&&_.hiddenLabel,style:{paddingTop:16,paddingBottom:17}},{props:({ownerState:_})=>_.multiline&&_.hiddenLabel&&_.size==="small",style:{paddingTop:8,paddingBottom:9}}]}})),FilledInputInput=styled(InputBaseInput,{name:"MuiFilledInput",slot:"Input",overridesResolver:inputOverridesResolver})(memoTheme(({theme:o})=>({paddingTop:25,paddingRight:12,paddingBottom:8,paddingLeft:12,...!o.vars&&{"&:-webkit-autofill":{WebkitBoxShadow:o.palette.mode==="light"?null:"0 0 0 100px #266798 inset",WebkitTextFillColor:o.palette.mode==="light"?null:"#fff",caretColor:o.palette.mode==="light"?null:"#fff",borderTopLeftRadius:"inherit",borderTopRightRadius:"inherit"}},...o.vars&&{"&:-webkit-autofill":{borderTopLeftRadius:"inherit",borderTopRightRadius:"inherit"},[o.getColorSchemeSelector("dark")]:{"&:-webkit-autofill":{WebkitBoxShadow:"0 0 0 100px #266798 inset",WebkitTextFillColor:"#fff",caretColor:"#fff"}}},variants:[{props:{size:"small"},style:{paddingTop:21,paddingBottom:4}},{props:({ownerState:u})=>u.hiddenLabel,style:{paddingTop:16,paddingBottom:17}},{props:({ownerState:u})=>u.startAdornment,style:{paddingLeft:0}},{props:({ownerState:u})=>u.endAdornment,style:{paddingRight:0}},{props:({ownerState:u})=>u.hiddenLabel&&u.size==="small",style:{paddingTop:8,paddingBottom:9}},{props:({ownerState:u})=>u.multiline,style:{paddingTop:0,paddingBottom:0,paddingLeft:0,paddingRight:0}}]}))),FilledInput=reactExports.forwardRef(function(u,T){const S=useDefaultProps({props:u,name:"MuiFilledInput"}),{disableUnderline:E=!1,components:C={},componentsProps:_,fullWidth:P=!1,hiddenLabel:R,inputComponent:I="input",multiline:L=!1,slotProps:j,slots:M={},type:D="text",...F}=S,N={...S,disableUnderline:E,fullWidth:P,inputComponent:I,multiline:L,type:D},G=useUtilityClasses$u(S),B={root:{ownerState:N}
198,input:{ownerState:N}},H=j??_?deepmerge(B,j??_):B,O=M.root??C.Root??FilledInputRoot,V=M.input??C.Input??FilledInputInput;return jsxRuntimeExports.jsx(InputBase,{slots:{root:O,input:V},slotProps:H,fullWidth:P,inputComponent:I,multiline:L,ref:T,type:D,...F,classes:G})});FilledInput.muiName="Input";function getFormControlUtilityClasses(o){return generateUtilityClass("MuiFormControl",o)}generateUtilityClasses("MuiFormControl",["root","marginNone","marginNormal","marginDense","fullWidth","disabled"]);const useUtilityClasses$t=o=>{const{classes:u,margin:T,fullWidth:S}=o,E={root:["root",T!=="none"&&`margin${capitalize(T)}`,S&&"fullWidth"]};return composeClasses(E,getFormControlUtilityClasses,u)},FormControlRoot=styled("div",{name:"MuiFormControl",slot:"Root",overridesResolver:(o,u)=>{const{ownerState:T}=o;return[u.root,u[`margin${capitalize(T.margin)}`],T.fullWidth&&u.fullWidth]}})({display:"inline-flex",flexDirection:"column",position:"relative",minWidth:0,padding:0,margin:0,border:0,verticalAlign:"top",variants:[{props:{margin:"normal"},style:{marginTop:16,marginBottom:8}},{props:{margin:"dense"},style:{marginTop:8,marginBottom:4}},{props:{fullWidth:!0},style:{width:"100%"}}]}),FormControl=reactExports.forwardRef(function(u,T){const S=useDefaultProps({props:u,name:"MuiFormControl"}),{children:E,className:C,color:_="primary",component:P="div",disabled:R=!1,error:I=!1,focused:L,fullWidth:j=!1,hiddenLabel:M=!1,margin:D="none",required:F=!1,size:N="medium",variant:G="outlined",...B}=S,H={...S,color:_,component:P,disabled:R,error:I,fullWidth:j,hiddenLabel:M,margin:D,required:F,size:N,variant:G},O=useUtilityClasses$t(H),[V,U]=reactExports.useState(()=>{let re=!1;return E&&reactExports.Children.forEach(E,J=>{if(!isMuiElement(J,["Input","Select"]))return;const te=isMuiElement(J,["Select"])?J.props.input:J;te&&isAdornedStart(te.props)&&(re=!0)}),re}),[W,K]=reactExports.useState(()=>{let re=!1;return E&&reactExports.Children.forEach(E,J=>{isMuiElement(J,["Input","Select"])&&(isFilled(J.props,!0)||isFilled(J.props.inputProps,!0))&&(re=!0)}),re}),[Y,ee]=reactExports.useState(!1);R&&Y&&ee(!1);const oe=L!==void 0&&!R?L:Y;let se;reactExports.useRef(!1);const Q=reactExports.useCallback(()=>{K(!0)},[]),ie=reactExports.useCallback(()=>{K(!1)},[]),ae=reactExports.useMemo(()=>({adornedStart:V,setAdornedStart:U,color:_,disabled:R,error:I,filled:W,focused:oe,fullWidth:j,hiddenLabel:M,size:N,onBlur:()=>{ee(!1)},onFocus:()=>{ee(!0)},onEmpty:ie,onFilled:Q,registerEffect:se,required:F,variant:G}),[V,_,R,I,W,oe,j,M,se,ie,Q,F,N,G]);return jsxRuntimeExports.jsx(FormControlContext.Provider,{value:ae,children:jsxRuntimeExports.jsx(FormControlRoot,{as:P,ownerState:H,className:clsx(O.root,C),ref:T,...B,children:E})})});function getFormHelperTextUtilityClasses(o){return generateUtilityClass("MuiFormHelperText",o)}const formHelperTextClasses=generateUtilityClasses("MuiFormHelperText",["root","error","disabled","sizeSmall","sizeMedium","contained","focused","filled","required"]);var _span$2;const useUtilityClasses$s=o=>{const{classes:u,contained:T,size:S,disabled:E,error:C,filled:_,focused:P,required:R}=o,I={root:["root",E&&"disabled",C&&"error",S&&`size${capitalize(S)}`,T&&"contained",P&&"focused",_&&"filled",R&&"required"]};return composeClasses(I,getFormHelperTextUtilityClasses,u)},FormHelperTextRoot=styled("p",{name:"MuiFormHelperText",slot:"Root",overridesResolver:(o,u)=>{const{ownerState:T}=o;return[u.root,T.size&&u[`size${capitalize(T.size)}`],T.contained&&u.contained,T.filled&&u.filled]}})(memoTheme(({theme:o})=>({color:(o.vars||o).palette.text.secondary,...o.typography.caption,textAlign:"left",marginTop:3,marginRight:0,marginBottom:0,marginLeft:0,[`&.${formHelperTextClasses.disabled}`]:{color:(o.vars||o).palette.text.disabled},[`&.${formHelperTextClasses.error}`]:{color:(o.vars||o).palette.error.main},variants:[{props:{size:"small"},style:{marginTop:4}},{props:({ownerState:u})=>u.contained,style:{marginLeft:14,marginRight:14}}]}))),FormHelperText=reactExports.forwardRef(function(u,T){const S=useDefaultProps({props:u,name:"MuiFormHelperText"}),{children:E,className:C,component:_="p",disabled:P,error:R,filled:I,focused:L,margin:j,required:M,variant:D,...F}
198=S,N=useFormControl(),G=formControlState({props:S,muiFormControl:N,states:["variant","size","disabled","error","filled","focused","required"]}),B={...S,component:_,contained:G.variant==="filled"||G.variant==="outlined",variant:G.variant,size:G.size,disabled:G.disabled,error:G.error,filled:G.filled,focused:G.focused,required:G.required};delete B.ownerState;const H=useUtilityClasses$s(B);return jsxRuntimeExports.jsx(FormHelperTextRoot,{as:_,className:clsx(H.root,C),ref:T,...F,ownerState:B,children:E===" "?_span$2||(_span$2=jsxRuntimeExports.jsx("span",{className:"notranslate","aria-hidden":!0,children:"​"})):E})});function getFormLabelUtilityClasses(o){return generateUtilityClass("MuiFormLabel",o)}const formLabelClasses=generateUtilityClasses("MuiFormLabel",["root","colorSecondary","focused","disabled","error","filled","required","asterisk"]),useUtilityClasses$r=o=>{const{classes:u,color:T,focused:S,disabled:E,error:C,filled:_,required:P}=o,R={root:["root",`color${capitalize(T)}`,E&&"disabled",C&&"error",_&&"filled",S&&"focused",P&&"required"],asterisk:["asterisk",C&&"error"]};return composeClasses(R,getFormLabelUtilityClasses,u)},FormLabelRoot=styled("label",{name:"MuiFormLabel",slot:"Root",overridesResolver:(o,u)=>{const{ownerState:T}=o;return[u.root,T.color==="secondary"&&u.colorSecondary,T.filled&&u.filled]}})(memoTheme(({theme:o})=>({color:(o.vars||o).palette.text.secondary,...o.typography.body1,lineHeight:"1.4375em",padding:0,position:"relative",variants:[...Object.entries(o.palette).filter(createSimplePaletteValueFilter()).map(([u])=>({props:{color:u},style:{[`&.${formLabelClasses.focused}`]:{color:(o.vars||o).palette[u].main}}})),{props:{},style:{[`&.${formLabelClasses.disabled}`]:{color:(o.vars||o).palette.text.disabled},[`&.${formLabelClasses.error}`]:{color:(o.vars||o).palette.error.main}}}]}))),AsteriskComponent=styled("span",{name:"MuiFormLabel",slot:"Asterisk"})(memoTheme(({theme:o})=>({[`&.${formLabelClasses.error}`]:{color:(o.vars||o).palette.error.main}}))),FormLabel=reactExports.forwardRef(function(u,T){const S=useDefaultProps({props:u,name:"MuiFormLabel"}),{children:E,className:C,color:_,component:P="label",disabled:R,error:I,filled:L,focused:j,required:M,...D}=S,F=useFormControl(),N=formControlState({props:S,muiFormControl:F,states:["color","required","focused","disabled","error","filled"]}),G={...S,color:N.color||"primary",component:P,disabled:N.disabled,error:N.error,filled:N.filled,focused:N.focused,required:N.required},B=useUtilityClasses$r(G);return jsxRuntimeExports.jsxs(FormLabelRoot,{as:P,ownerState:G,className:clsx(B.root,C),ref:T,...D,children:[E,N.required&&jsxRuntimeExports.jsxs(AsteriskComponent,{ownerState:G,"aria-hidden":!0,className:B.asterisk,children:[" ","*"]})]})});function getScale(o){return`scale(${o}, ${o**2})`}const styles$1={entering:{opacity:1,transform:getScale(1)},entered:{opacity:1,transform:"none"}},isWebKit154=typeof navigator<"u"&&/^((?!chrome|android).)*(safari|mobile)/i.test(navigator.userAgent)&&/(os |version\/)15(.|_)4/i.test(navigator.userAgent),Grow=reactExports.forwardRef(function(u,T){const{addEndListener:S,appear:E=!0,children:C,easing:_,in:P,onEnter:R,onEntered:I,onEntering:L,onExit:j,onExited:M,onExiting:D,style:F,timeout:N="auto",TransitionComponent:G=Transition,...B}=u,H=useTimeout(),O=reactExports.useRef(),V=useTheme(),U=reactExports.useRef(null),W=useForkRef(U,getReactElementRef(C),T),K=re=>J=>{if(re){const te=U.current;J===void 0?re(te):re(te,J)}},Y=K(L),ee=K((re,J)=>{reflow(re);const{duration:te,delay:Z,easing:X}=getTransitionProps({style:F,timeout:N,easing:_},{mode:"enter"});let de;N==="auto"?(de=V.transitions.getAutoHeightDuration(re.clientHeight),O.current=de):de=te,re.style.transition=[V.transitions.create("opacity",{duration:de,delay:Z}),V.transitions.create("transform",{duration:isWebKit154?de:de*.666,delay:Z,easing:X})].join(","),R&&R(re,J)}),oe=K(I),se=K(D),Q=K(re=>{const{duration:J,delay:te,easing:Z}=getTransitionProps({style:F,timeout:N,easing:_},{mode:"exit"});let X;N==="auto"?(X=V.transitions.getAutoHeightDuration(re.clientHeight),O.current=X):X=J,re.style.transition=[V.transitions.create("opacity",{duration:X,delay:te}),V.transitions.create("transform",{duration:isWebKit154?X:X*.666,delay:isWebKit154?te:te||X*.333,easing:Z}
198)].join(","),re.style.opacity=0,re.style.transform=getScale(.75),j&&j(re)}),ie=K(M),ae=re=>{N==="auto"&&H.start(O.current||0,re),S&&S(U.current,re)};return jsxRuntimeExports.jsx(G,{appear:E,in:P,nodeRef:U,onEnter:ee,onEntered:oe,onEntering:Y,onExit:Q,onExited:ie,onExiting:se,addEndListener:ae,timeout:N==="auto"?null:N,...B,children:(re,{ownerState:J,...te})=>reactExports.cloneElement(C,{style:{opacity:0,transform:getScale(.75),visibility:re==="exited"&&!P?"hidden":void 0,...styles$1[re],...F,...C.props.style},ref:W,...te})})});Grow&&(Grow.muiSupportAuto=!0);const useUtilityClasses$q=o=>{const{classes:u,disableUnderline:T}=o,E=composeClasses({root:["root",!T&&"underline"],input:["input"]},getInputUtilityClass,u);return{...u,...E}},InputRoot=styled(InputBaseRoot,{shouldForwardProp:o=>rootShouldForwardProp(o)||o==="classes",name:"MuiInput",slot:"Root",overridesResolver:(o,u)=>{const{ownerState:T}=o;return[...rootOverridesResolver(o,u),!T.disableUnderline&&u.underline]}})(memoTheme(({theme:o})=>{let T=o.palette.mode==="light"?"rgba(0, 0, 0, 0.42)":"rgba(255, 255, 255, 0.7)";return o.vars&&(T=o.alpha(o.vars.palette.common.onBackground,o.vars.opacity.inputUnderline)),{position:"relative",variants:[{props:({ownerState:S})=>S.formControl,style:{"label + &":{marginTop:16}}},{props:({ownerState:S})=>!S.disableUnderline,style:{"&::after":{left:0,bottom:0,content:'""',position:"absolute",right:0,transform:"scaleX(0)",transition:o.transitions.create("transform",{duration:o.transitions.duration.shorter,easing:o.transitions.easing.easeOut}),pointerEvents:"none"},[`&.${inputClasses.focused}:after`]:{transform:"scaleX(1) translateX(0)"},[`&.${inputClasses.error}`]:{"&::before, &::after":{borderBottomColor:(o.vars||o).palette.error.main}},"&::before":{borderBottom:`1px solid ${T}`,left:0,bottom:0,content:'"\\00a0"',position:"absolute",right:0,transition:o.transitions.create("border-bottom-color",{duration:o.transitions.duration.shorter}),pointerEvents:"none"},[`&:hover:not(.${inputClasses.disabled}, .${inputClasses.error}):before`]:{borderBottom:`2px solid ${(o.vars||o).palette.text.primary}`,"@media (hover: none)":{borderBottom:`1px solid ${T}`}},[`&.${inputClasses.disabled}:before`]:{borderBottomStyle:"dotted"}}},...Object.entries(o.palette).filter(createSimplePaletteValueFilter()).map(([S])=>({props:{color:S,disableUnderline:!1},style:{"&::after":{borderBottom:`2px solid ${(o.vars||o).palette[S].main}`}}}))]}})),InputInput=styled(InputBaseInput,{name:"MuiInput",slot:"Input",overridesResolver:inputOverridesResolver})({}),Input=reactExports.forwardRef(function(u,T){const S=useDefaultProps({props:u,name:"MuiInput"}),{disableUnderline:E=!1,components:C={},componentsProps:_,fullWidth:P=!1,inputComponent:R="input",multiline:I=!1,slotProps:L,slots:j={},type:M="text",...D}=S,F=useUtilityClasses$q(S),G={root:{ownerState:{disableUnderline:E}}},B=L??_?deepmerge(L??_,G):G,H=j.root??C.Root??InputRoot,O=j.input??C.Input??InputInput;return jsxRuntimeExports.jsx(InputBase,{slots:{root:H,input:O},slotProps:B,fullWidth:P,inputComponent:R,multiline:I,ref:T,type:M,...D,classes:F})});Input.muiName="Input";function getInputLabelUtilityClasses(o){return generateUtilityClass("MuiInputLabel",o)}generateUtilityClasses("MuiInputLabel",["root","focused","disabled","error","required","asterisk","formControl","sizeSmall","shrink","animated","standard","filled","outlined"]);const useUtilityClasses$p=o=>{const{classes:u,formControl:T,size:S,shrink:E,disableAnimation:C,variant:_,required:P}=o,R={root:["root",T&&"formControl",!C&&"animated",E&&"shrink",S&&S!=="medium"&&`size${capitalize(S)}`,_],asterisk:[P&&"asterisk"]},I=composeClasses(R,getInputLabelUtilityClasses,u);return{...u,...I}},InputLabelRoot=styled(FormLabel,{shouldForwardProp:o=>rootShouldForwardProp(o)||o==="classes",name:"MuiInputLabel",slot:"Root",overridesResolver:(o,u)=>{const{ownerState:T}=o;return[{[`& .${formLabelClasses.asterisk}`]:u.asterisk},u.root,T.formControl&&u.formControl,T.size==="small"&&u.sizeSmall,T.shrink&&u.shrink,!T.disableAnimation&&u.animated,T.focused&&u.focused,u[T.variant]]}})(memoTheme(({theme:o})=>({display:"block",transformOrigin:"top left",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",maxWidth:"100%",variants:[{props:({ownerState:u})=>u.formControl,style:{position:"absolute",left:0,top:0,transform:"translate(0, 20px) scale(1)"}},{props:{size:"small"},style:{transform:"translate(0, 17px) scale(1)"}},{props:({ownerState:u})=>u.shrink,style:{transform:"translate(0, -1.5px) scale(0.75)",transformOrigin:"top left",maxWidth:"133%"}},{props:({ownerState:u})=>!u.disableAnimation,style:{transition:o.transitions.create(["color","transform","max-width"],{duration:o.transitions.duration.shorter,easing:o.transitions.easing.easeOut})}},{props:{variant:"filled"},style:{zIndex:1,pointerEvents:"none",transform:"translate(12px, 16px) scale(1)",maxWidth:"calc(100% - 24px)"}},{props:{variant:"filled",size:"small"},style:{transform:"translate(12px, 13px) scale(1)"}},{props:({variant:u,ownerState:T})=>u==="filled"&&T.shrink,style:{userSelect:"none",pointerEvents:"auto",transform:"translate(12px, 7
198px) scale(0.75)",maxWidth:"calc(133% - 24px)"}},{props:({variant:u,ownerState:T,size:S})=>u==="filled"&&T.shrink&&S==="small",style:{transform:"translate(12px, 4px) scale(0.75)"}},{props:{variant:"outlined"},style:{zIndex:1,pointerEvents:"none",transform:"translate(14px, 16px) scale(1)",maxWidth:"calc(100% - 24px)"}},{props:{variant:"outlined",size:"small"},style:{transform:"translate(14px, 9px) scale(1)"}},{props:({variant:u,ownerState:T})=>u==="outlined"&&T.shrink,style:{userSelect:"none",pointerEvents:"auto",maxWidth:"calc(133% - 32px)",transform:"translate(14px, -9px) scale(0.75)"}}]}))),InputLabel=reactExports.forwardRef(function(u,T){const S=useDefaultProps({name:"MuiInputLabel",props:u}),{disableAnimation:E=!1,margin:C,shrink:_,variant:P,className:R,...I}=S,L=useFormControl();let j=_;typeof j>"u"&&L&&(j=L.filled||L.focused||L.adornedStart);const M=formControlState({props:S,muiFormControl:L,states:["size","variant","required","focused"]}),D={...S,disableAnimation:E,formControl:L,shrink:j,size:M.size,variant:M.variant,required:M.required,focused:M.focused},F=useUtilityClasses$p(D);return jsxRuntimeExports.jsx(InputLabelRoot,{"data-shrink":j,ref:T,className:clsx(F.root,R),...I,ownerState:D,classes:F})});function getLinkUtilityClass(o){return generateUtilityClass("MuiLink",o)}const linkClasses=generateUtilityClasses("MuiLink",["root","underlineNone","underlineHover","underlineAlways","button","focusVisible"]),getTextDecoration=({theme:o,ownerState:u})=>{const T=u.color;if("colorSpace"in o&&o.colorSpace){const C=getPath$1(o,`palette.${T}.main`)||getPath$1(o,`palette.${T}`)||u.color;return o.alpha(C,.4)}const S=getPath$1(o,`palette.${T}.main`,!1)||getPath$1(o,`palette.${T}`,!1)||u.color,E=getPath$1(o,`palette.${T}.mainChannel`)||getPath$1(o,`palette.${T}Channel`);return"vars"in o&&E?`rgba(${E} / 0.4)`:alpha$1(S,.4)},v6Colors={primary:!0,secondary:!0,error:!0,info:!0,success:!0,warning:!0,textPrimary:!0,textSecondary:!0,textDisabled:!0},useUtilityClasses$o=o=>{const{classes:u,component:T,focusVisible:S,underline:E}=o,C={root:["root",`underline${capitalize(E)}`,T==="button"&&"button",S&&"focusVisible"]};return composeClasses(C,getLinkUtilityClass,u)},LinkRoot=styled(Typography,{name:"MuiLink",slot:"Root",overridesResolver:(o,u)=>{const{ownerState:T}=o;return[u.root,u[`underline${capitalize(T.underline)}`],T.component==="button"&&u.button]}})(memoTheme(({theme:o})=>({variants:[{props:{underline:"none"},style:{textDecoration:"none"}},{props:{underline:"hover"},style:{textDecoration:"none","&:hover":{textDecoration:"underline"}}},{props:{underline:"always"},style:{textDecoration:"underline","&:hover":{textDecorationColor:"inherit"}}},{props:({underline:u,ownerState:T})=>u==="always"&&T.color!=="inherit",style:{textDecorationColor:"var(--Link-underlineColor)"}},{props:({underline:u,ownerState:T})=>u==="always"&&T.color==="inherit",style:o.colorSpace?{textDecorationColor:o.alpha("currentColor",.4)}:null},...Object.entries(o.palette).filter(createSimplePaletteValueFilter()).map(([u])=>({props:{underline:"always",color:u},style:{"--Link-underlineColor":o.alpha((o.vars||o).palette[u].main,.4)}})),{props:{underline:"always",color:"textPrimary"},style:{"--Link-underlineColor":o.alpha((o.vars||o).palette.text.primary,.4)}},{props:{underline:"always",color:"textSecondary"},style:{"--Link-underlineColor":o.alpha((o.vars||o).palette.text.secondary,.4)}},{props:{underline:"always",color:"textDisabled"},style:{"--Link-underlineColor":(o.vars||o).palette.text.disabled}},{props:{component:"button"},style:{position:"relative",WebkitTapHighlightColor:"transparent",backgroundColor:"transparent",outline:0,border:0,margin:0,borderRadius:0,padding:0,cursor:"pointer",userSelect:"none",verticalAlign:"middle",MozAppearance:"none",WebkitAppearance:"none","&::-moz-focus-inner":{borderStyle:"none"},[`&.${linkClasses.focusVisible}`]:{outline:"auto"}}}]}))),Link=reactExports.forwardRef(function(u,T){const S=useDefaultProps({props:u,name:"MuiLink"}),E=useTheme(),{className:C,color:_="primary",component:P="a",onBlur:R,onFocus:I,TypographyClasses:L,underline:j="always",variant:M="inherit",sx:D,...F}=S,[N,G]=reactExports.useState(!1),B=U=>
198{isFocusVisible(U.target)||G(!1),R&&R(U)},H=U=>{isFocusVisible(U.target)&&G(!0),I&&I(U)},O={...S,color:_,component:P,focusVisible:N,underline:j,variant:M},V=useUtilityClasses$o(O);return jsxRuntimeExports.jsx(LinkRoot,{color:_,className:clsx(V.root,C),classes:L,component:P,onBlur:B,onFocus:H,ref:T,ownerState:O,variant:M,...F,sx:[...v6Colors[_]===void 0?[{color:_}]:[],...Array.isArray(D)?D:[D]],style:{...F.style,...j==="always"&&_!=="inherit"&&!v6Colors[_]&&{"--Link-underlineColor":getTextDecoration({theme:E,ownerState:O})}}})}),ListContext=reactExports.createContext({});function getListUtilityClass(o){return generateUtilityClass("MuiList",o)}generateUtilityClasses("MuiList",["root","padding","dense","subheader"]);const useUtilityClasses$n=o=>{const{classes:u,disablePadding:T,dense:S,subheader:E}=o;return composeClasses({root:["root",!T&&"padding",S&&"dense",E&&"subheader"]},getListUtilityClass,u)},ListRoot=styled("ul",{name:"MuiList",slot:"Root",overridesResolver:(o,u)=>{const{ownerState:T}=o;return[u.root,!T.disablePadding&&u.padding,T.dense&&u.dense,T.subheader&&u.subheader]}})({listStyle:"none",margin:0,padding:0,position:"relative",variants:[{props:({ownerState:o})=>!o.disablePadding,style:{paddingTop:8,paddingBottom:8}},{props:({ownerState:o})=>o.subheader,style:{paddingTop:0}}]}),List=reactExports.forwardRef(function(u,T){const S=useDefaultProps({props:u,name:"MuiList"}),{children:E,className:C,component:_="ul",dense:P=!1,disablePadding:R=!1,subheader:I,...L}=S,j=reactExports.useMemo(()=>({dense:P}),[P]),M={...S,component:_,dense:P,disablePadding:R},D=useUtilityClasses$n(M);return jsxRuntimeExports.jsx(ListContext.Provider,{value:j,children:jsxRuntimeExports.jsxs(ListRoot,{as:_,className:clsx(D.root,C),ref:T,ownerState:M,...L,children:[I,E]})})});function getListItemUtilityClass(o){return generateUtilityClass("MuiListItem",o)}generateUtilityClasses("MuiListItem",["root","container","dense","alignItemsFlexStart","divider","gutters","padding","secondaryAction"]);function getListItemButtonUtilityClass(o){return generateUtilityClass("MuiListItemButton",o)}const listItemButtonClasses=generateUtilityClasses("MuiListItemButton",["root","focusVisible","dense","alignItemsFlexStart","disabled","divider","gutters","selected"]),overridesResolver$2=(o,u)=>{const{ownerState:T}=o;return[u.root,T.dense&&u.dense,T.alignItems==="flex-start"&&u.alignItemsFlexStart,T.divider&&u.divider,!T.disableGutters&&u.gutters]},useUtilityClasses$m=o=>{const{alignItems:u,classes:T,dense:S,disabled:E,disableGutters:C,divider:_,selected:P}=o,I=composeClasses({root:["root",S&&"dense",!C&&"gutters",_&&"divider",E&&"disabled",u==="flex-start"&&"alignItemsFlexStart",P&&"selected"]},getListItemButtonUtilityClass,T);return{...T,...I}},ListItemButtonRoot=styled(ButtonBase,{shouldForwardProp:o=>rootShouldForwardProp(o)||o==="classes",name:"MuiListItemButton",slot:"Root",overridesResolver:overridesResolver$2})(memoTheme(({theme:o})=>({display:"flex",flexGrow:1,justifyContent:"flex-start",alignItems:"center",position:"relative",textDecoration:"none",minWidth:0,boxSizing:"border-box",textAlign:"left",paddingTop:8,paddingBottom:8,transition:o.transitions.create("background-color",{duration:o.transitions.duration.shortest}),"&:hover":{textDecoration:"none",backgroundColor:(o.vars||o).palette.action.hover,"@media (hover: none)":{backgroundColor:"transparent"}},[`&.${listItemButtonClasses.selected}`]:{backgroundColor:o.alpha((o.vars||o).palette.primary.main,(o.vars||o).palette.action.selectedOpacity),[`&.${listItemButtonClasses.focusVisible}`]:{backgroundColor:o.alpha((o.vars||o).palette.primary.main,`${(o.vars||o).palette.action.selectedOpacity} + ${(o.vars||o).palette.action.focusOpacity}`)}},[`&.${listItemButtonClasses.selected}:hover`]:{backgroundColor:o.alpha((o.vars||o).palette.primary.main,`${(o.vars||o).palette.action.selectedOpacity} + ${(o.vars||o).palette.action.hoverOpacity}`),"@media (hover: none)":{backgroundColor:o.alpha((o.vars||o).palette.primary.main,(o.vars||o).palette.action.selectedOpacity)}},[`&.${listItemButtonClasses.focusVisible}`]:{backgroundColor:(o.vars||o).palette.action.focus}
198,[`&.${listItemButtonClasses.disabled}`]:{opacity:(o.vars||o).palette.action.disabledOpacity},variants:[{props:({ownerState:u})=>u.divider,style:{borderBottom:`1px solid ${(o.vars||o).palette.divider}`,backgroundClip:"padding-box"}},{props:{alignItems:"flex-start"},style:{alignItems:"flex-start"}},{props:({ownerState:u})=>!u.disableGutters,style:{paddingLeft:16,paddingRight:16}},{props:({ownerState:u})=>u.dense,style:{paddingTop:4,paddingBottom:4}}]}))),ListItemButton=reactExports.forwardRef(function(u,T){const S=useDefaultProps({props:u,name:"MuiListItemButton"}),{alignItems:E="center",autoFocus:C=!1,component:_="div",children:P,dense:R=!1,disableGutters:I=!1,divider:L=!1,focusVisibleClassName:j,selected:M=!1,className:D,...F}=S,N=reactExports.useContext(ListContext),G=reactExports.useMemo(()=>({dense:R||N.dense||!1,alignItems:E,disableGutters:I}),[E,N.dense,R,I]),B=reactExports.useRef(null);useEnhancedEffect(()=>{C&&B.current&&B.current.focus()},[C]);const H={...S,alignItems:E,dense:G.dense,disableGutters:I,divider:L,selected:M},O=useUtilityClasses$m(H),V=useForkRef(B,T);return jsxRuntimeExports.jsx(ListContext.Provider,{value:G,children:jsxRuntimeExports.jsx(ListItemButtonRoot,{ref:V,href:F.href||F.to,component:(F.href||F.to)&&_==="div"?"button":_,focusVisibleClassName:clsx(O.focusVisible,j),ownerState:H,className:clsx(O.root,D),...F,classes:O,children:P})})});function getListItemSecondaryActionClassesUtilityClass(o){return generateUtilityClass("MuiListItemSecondaryAction",o)}generateUtilityClasses("MuiListItemSecondaryAction",["root","disableGutters"]);const useUtilityClasses$l=o=>{const{disableGutters:u,classes:T}=o;return composeClasses({root:["root",u&&"disableGutters"]},getListItemSecondaryActionClassesUtilityClass,T)},ListItemSecondaryActionRoot=styled("div",{name:"MuiListItemSecondaryAction",slot:"Root",overridesResolver:(o,u)=>{const{ownerState:T}=o;return[u.root,T.disableGutters&&u.disableGutters]}})({position:"absolute",right:16,top:"50%",transform:"translateY(-50%)",variants:[{props:({ownerState:o})=>o.disableGutters,style:{right:0}}]}),ListItemSecondaryAction=reactExports.forwardRef(function(u,T){const S=useDefaultProps({props:u,name:"MuiListItemSecondaryAction"}),{className:E,...C}=S,_=reactExports.useContext(ListContext),P={...S,disableGutters:_.disableGutters},R=useUtilityClasses$l(P);return jsxRuntimeExports.jsx(ListItemSecondaryActionRoot,{className:clsx(R.root,E),ownerState:P,ref:T,...C})});ListItemSecondaryAction.muiName="ListItemSecondaryAction";const overridesResolver$1=(o,u)=>{const{ownerState:T}=o;return[u.root,T.dense&&u.dense,T.alignItems==="flex-start"&&u.alignItemsFlexStart,T.divider&&u.divider,!T.disableGutters&&u.gutters,!T.disablePadding&&u.padding,T.hasSecondaryAction&&u.secondaryAction]},useUtilityClasses$k=o=>{const{alignItems:u,classes:T,dense:S,disableGutters:E,disablePadding:C,divider:_,hasSecondaryAction:P}=o;return composeClasses({root:["root",S&&"dense",!E&&"gutters",!C&&"padding",_&&"divider",u==="flex-start"&&"alignItemsFlexStart",P&&"secondaryAction"],container:["container"]},getListItemUtilityClass,T)},ListItemRoot=styled("div",{name:"MuiListItem",slot:"Root",overridesResolver:overridesResolver$1})(memoTheme(({theme:o})=>({display:"flex",justifyContent:"flex-start",alignItems:"center",position:"relative",textDecoration:"none",width:"100%",boxSizing:"border-box",textAlign:"left",variants:[{props:({ownerState:u})=>!u.disablePadding,style:{paddingTop:8,paddingBottom:8}},{props:({ownerState:u})=>!u.disablePadding&&u.dense,style:{paddingTop:4,paddingBottom:4}},{props:({ownerState:u})=>!u.disablePadding&&!u.disableGutters,style:{paddingLeft:16,paddingRight:16}},{props:({ownerState:u})=>!u.disablePadding&&!!u.secondaryAction,style:{paddingRight:48}},{props:({ownerState:u})=>!!u.secondaryAction,style:{[`& > .${listItemButtonClasses.root}`]:{paddingRight:48}}},{props:{alignItems:"flex-start"},style:{alignItems:"flex-start"}},{props:({ownerState:u})=>u.divider,style:{borderBottom:`1px solid ${(o.vars||o).palette.divider}`,backgroundClip:"padding-box"}},{props:({ownerState:u})=>u.button,style:{transition:o.transitions.create("background-color",{duration:o.transitions.duration.shortest}),"&:hover":{textDecoration:"none",backgroundColor:(o.vars||o).palette.action.hover,"@media (hover: none)":{backgroundColor:"transparent"}}}},{props:({ownerState:u})=>u.hasSecondaryAction,style:{paddingRight:48}}]}))),ListItemContainer=styled("li",{name:"MuiListItem",slot:"Container"})({position:"relative"}),ListItem=reactExports.forwardRef(function(u,T){const S=useDefaultProps({props:u,name:"MuiListItem"}),{alignItems:E="center",children:C,className:_,component:P,components:R={},componentsProps:I={},ContainerComponent:L="li",ContainerProps:{className:j,...M}={},dense:D=!1,disableGutters:F=!1,disablePadding:N=!1,divider:G=!1,secondaryAction:B,slotProps:H={},slots:O={},...V}=S,U=reactExports.useContext(ListContext),W=reactExports.useMemo(()=>({dense:D||U.dense||!1,alignItems:E,disableGutters:F}),[E,U.dense,D,F]),K=reactExports.useRef(null),Y=reactExports.Children.toArray(C),ee=Y.length&&isMuiElement(Y[Y.length-1],["ListItemSecondaryAction"]),oe={...S,alignItems:E,dense:W.dense,disableGutters:F,disablePadding:N,divider:G,hasSecondaryAction:ee},se=useUtilityClasses$k(oe),Q=useForkRef(K,T),ie=O.root||R.Root||ListItemRoot,ae
198=H.root||I.root||{},re={className:clsx(se.root,ae.className,_),...V};let J=P||"li";return ee?(J=!re.component&&!P?"div":J,L==="li"&&(J==="li"?J="div":re.component==="li"&&(re.component="div")),jsxRuntimeExports.jsx(ListContext.Provider,{value:W,children:jsxRuntimeExports.jsxs(ListItemContainer,{as:L,className:clsx(se.container,j),ref:Q,ownerState:oe,...M,children:[jsxRuntimeExports.jsx(ie,{...ae,...!isHostComponent(ie)&&{as:J,ownerState:{...oe,...ae.ownerState}},...re,children:Y}),Y.pop()]})})):jsxRuntimeExports.jsx(ListContext.Provider,{value:W,children:jsxRuntimeExports.jsxs(ie,{...ae,as:J,ref:Q,...!isHostComponent(ie)&&{ownerState:{...oe,...ae.ownerState}},...re,children:[Y,B&&jsxRuntimeExports.jsx(ListItemSecondaryAction,{children:B})]})})});function getListItemIconUtilityClass(o){return generateUtilityClass("MuiListItemIcon",o)}const listItemIconClasses=generateUtilityClasses("MuiListItemIcon",["root","alignItemsFlexStart"]),useUtilityClasses$j=o=>{const{alignItems:u,classes:T}=o;return composeClasses({root:["root",u==="flex-start"&&"alignItemsFlexStart"]},getListItemIconUtilityClass,T)},ListItemIconRoot=styled("div",{name:"MuiListItemIcon",slot:"Root",overridesResolver:(o,u)=>{const{ownerState:T}=o;return[u.root,T.alignItems==="flex-start"&&u.alignItemsFlexStart]}})(memoTheme(({theme:o})=>({minWidth:56,color:(o.vars||o).palette.action.active,flexShrink:0,display:"inline-flex",variants:[{props:{alignItems:"flex-start"},style:{marginTop:8}}]}))),ListItemIcon=reactExports.forwardRef(function(u,T){const S=useDefaultProps({props:u,name:"MuiListItemIcon"}),{className:E,...C}=S,_=reactExports.useContext(ListContext),P={...S,alignItems:_.alignItems},R=useUtilityClasses$j(P);return jsxRuntimeExports.jsx(ListItemIconRoot,{className:clsx(R.root,E),ownerState:P,ref:T,...C})});function getListItemTextUtilityClass(o){return generateUtilityClass("MuiListItemText",o)}const listItemTextClasses=generateUtilityClasses("MuiListItemText",["root","multiline","dense","inset","primary","secondary"]),useUtilityClasses$i=o=>{const{classes:u,inset:T,primary:S,secondary:E,dense:C}=o;return composeClasses({root:["root",T&&"inset",C&&"dense",S&&E&&"multiline"],primary:["primary"],secondary:["secondary"]},getListItemTextUtilityClass,u)},ListItemTextRoot=styled("div",{name:"MuiListItemText",slot:"Root",overridesResolver:(o,u)=>{const{ownerState:T}=o;return[{[`& .${listItemTextClasses.primary}`]:u.primary},{[`& .${listItemTextClasses.secondary}`]:u.secondary},u.root,T.inset&&u.inset,T.primary&&T.secondary&&u.multiline,T.dense&&u.dense]}})({flex:"1 1 auto",minWidth:0,marginTop:4,marginBottom:4,[`.${typographyClasses.root}:where(& .${listItemTextClasses.primary})`]:{display:"block"},[`.${typographyClasses.root}:where(& .${listItemTextClasses.secondary})`]:{display:"block"},variants:[{props:({ownerState:o})=>o.primary&&o.secondary,style:{marginTop:6,marginBottom:6}},{props:({ownerState:o})=>o.inset,style:{paddingLeft:56}}]}),ListItemText=reactExports.forwardRef(function(u,T){const S=useDefaultProps({props:u,name:"MuiListItemText"}),{children:E,className:C,disableTypography:_=!1,inset:P=!1,primary:R,primaryTypographyProps:I,secondary:L,secondaryTypographyProps:j,slots:M={},slotProps:D={},...F}=S,{dense:N}=reactExports.useContext(ListContext);let G=R??E,B=L;const H={...S,disableTypography:_,inset:P,primary:!!G,secondary:!!B,dense:N},O=useUtilityClasses$i(H),V={slots:M,slotProps:{primary:I,secondary:j,...D}},[U,W]=useSlot("root",{className:clsx(O.root,C),elementType:ListItemTextRoot,externalForwardedProps:{...V,...F},ownerState:H,ref:T}),[K,Y]=useSlot("primary",{className:O.primary,elementType:Typography,externalForwardedProps:V,ownerState:H}),[ee,oe]=useSlot("secondary",{className:O.secondary,elementType:Typography,externalForwardedProps:V,ownerState:H});return G!=null&&G.type!==Typography&&!_&&(G=jsxRuntimeExports.jsx(K,{variant:N?"body2":"body1",component:Y!=null&&Y.variant?void 0:"span",...Y,children:G})),B!=null&&B.type!==Typography&&!_&&(B=jsxRuntimeExports.jsx(ee,{variant:"body2",color:"textSecondary",...oe,children:B})),jsxRuntimeExports.jsxs(U,{...W,children:[G,B]})});function nextItem(o,u,T){return o===u?o.firstChild:u&&u.nextElementSibling?u.nextElementSibling:T?null:o.firstChild}function previousItem(o,u,T){return o===u?T?o.firstChild:o.lastChild:u&&u.previousElementSibling?u.previousElementSibling:T?null:o.lastChild}function textCriteriaMatches(o,u){if(u===void 0)return!0;let T=o.innerText;return T===void 0&&(T=o.textContent),T=T.trim().toLowerCase(),T.length===0?!1:u.repeating?T[0]===u.keys[0]:T.startsWith(u.ke
198ys.join(""))}function moveFocus(o,u,T,S,E,C){let _=!1,P=E(o,u,u?T:!1);for(;P;){if(P===o.firstChild){if(_)return!1;_=!0}const R=S?!1:P.disabled||P.getAttribute("aria-disabled")==="true";if(!P.hasAttribute("tabindex")||!textCriteriaMatches(P,C)||R)P=E(o,P,T);else return P.focus(),!0}return!1}const MenuList=reactExports.forwardRef(function(u,T){const{actions:S,autoFocus:E=!1,autoFocusItem:C=!1,children:_,className:P,disabledItemsFocusable:R=!1,disableListWrap:I=!1,onKeyDown:L,variant:j="selectedMenu",...M}=u,D=reactExports.useRef(null),F=reactExports.useRef({keys:[],repeating:!0,previousKeyMatched:!0,lastTime:null});useEnhancedEffect(()=>{E&&D.current.focus()},[E]),reactExports.useImperativeHandle(S,()=>({adjustStyleForScrollbar:(O,{direction:V})=>{const U=!D.current.style.width;if(O.clientHeight<D.current.clientHeight&&U){const W=`${getScrollbarSize(ownerWindow(O))}px`;D.current.style[V==="rtl"?"paddingLeft":"paddingRight"]=W,D.current.style.width=`calc(100% + ${W})`}return D.current}}),[]);const N=O=>{const V=D.current,U=O.key;if(O.ctrlKey||O.metaKey||O.altKey){L&&L(O);return}const K=ownerDocument(V).activeElement;if(U==="ArrowDown")O.preventDefault(),moveFocus(V,K,I,R,nextItem);else if(U==="ArrowUp")O.preventDefault(),moveFocus(V,K,I,R,previousItem);else if(U==="Home")O.preventDefault(),moveFocus(V,null,I,R,nextItem);else if(U==="End")O.preventDefault(),moveFocus(V,null,I,R,previousItem);else if(U.length===1){const Y=F.current,ee=U.toLowerCase(),oe=performance.now();Y.keys.length>0&&(oe-Y.lastTime>500?(Y.keys=[],Y.repeating=!0,Y.previousKeyMatched=!0):Y.repeating&&ee!==Y.keys[0]&&(Y.repeating=!1)),Y.lastTime=oe,Y.keys.push(ee);const se=K&&!Y.repeating&&textCriteriaMatches(K,Y);Y.previousKeyMatched&&(se||moveFocus(V,K,!1,R,nextItem,Y))?O.preventDefault():Y.previousKeyMatched=!1}L&&L(O)},G=useForkRef(D,T);let B=-1;reactExports.Children.forEach(_,(O,V)=>{if(!reactExports.isValidElement(O)){B===V&&(B+=1,B>=_.length&&(B=-1));return}O.props.disabled||(j==="selectedMenu"&&O.props.selected||B===-1)&&(B=V),B===V&&(O.props.disabled||O.props.muiSkipListHighlight||O.type.muiSkipListHighlight)&&(B+=1,B>=_.length&&(B=-1))});const H=reactExports.Children.map(_,(O,V)=>{if(V===B){const U={};return C&&(U.autoFocus=!0),O.props.tabIndex===void 0&&j==="selectedMenu"&&(U.tabIndex=0),reactExports.cloneElement(O,U)}return O});return jsxRuntimeExports.jsx(List,{role:"menu",ref:G,className:P,onKeyDown:N,tabIndex:E?0:-1,...M,children:H})});function getPopoverUtilityClass(o){return generateUtilityClass("MuiPopover",o)}generateUtilityClasses("MuiPopover",["root","paper"]);function getOffsetTop(o,u){let T=0;return typeof u=="number"?T=u:u==="center"?T=o.height/2:u==="bottom"&&(T=o.height),T}function getOffsetLeft(o,u){let T=0;return typeof u=="number"?T=u:u==="center"?T=o.width/2:u==="right"&&(T=o.width),T}function getTransformOriginValue(o){return[o.horizontal,o.vertical].map(u=>typeof u=="number"?`${u}px`:u).join(" ")}function resolveAnchorEl(o){return typeof o=="function"?o():o}const useUtilityClasses$h=o=>{const{classes:u}=o;return composeClasses({root:["root"],paper:["paper"]},getPopoverUtilityClass,u)},PopoverRoot=styled(Modal,{name:"MuiPopover",slot:"Root"})({}),PopoverPaper=styled(Paper,{name:"MuiPopover",slot:"Paper"})({position:"absolute",overflowY:"auto",overflowX:"hidden",minWidth:16,minHeight:16,maxWidth:"calc(100% - 32px)",maxHeight:"calc(100% - 32px)",outline:0}),Popover=reactExports.forwardRef(function(u,T){const S=useDefaultProps({props:u,name:"MuiPopover"}),{action:E,anchorEl:C,anchorOrigin:_={vertical:"top",horizontal:"left"},anchorPosition:P,anchorReference:R="anchorEl",children:I,className:L,container:j,elevation:M=8,marginThreshold:D=16,open:F,PaperProps:N={},slots:G={},slotProps:B={},transformOrigin:H={vertical:"top",horizontal:"left"},TransitionComponent:O,transitionDuration:V="auto",TransitionProps:U={},disableScrollLock:W=!1,...K}=S,Y=reactExports.useRef(),ee={...S,anchorOrigin:_,anchorReference:R,elevation:M,marginThreshold:D,transformOrigin:H,TransitionComponent:O,transitionDuration:V,TransitionProps:U},oe=useUtilityClasses$h(ee),se=reactExports.useCallback(()=>
198{if(R==="anchorPosition")return P;const we=resolveAnchorEl(C),pe=(we&&we.nodeType===1?we:ownerDocument(Y.current).body).getBoundingClientRect();return{top:pe.top+getOffsetTop(pe,_.vertical),left:pe.left+getOffsetLeft(pe,_.horizontal)}},[C,_.horizontal,_.vertical,P,R]),Q=reactExports.useCallback(we=>({vertical:getOffsetTop(we,H.vertical),horizontal:getOffsetLeft(we,H.horizontal)}),[H.horizontal,H.vertical]),ie=reactExports.useCallback(we=>{const Le={width:we.offsetWidth,height:we.offsetHeight},pe=Q(Le);if(R==="none")return{top:null,left:null,transformOrigin:getTransformOriginValue(pe)};const Me=se();let Pe=Me.top-pe.vertical,Ue=Me.left-pe.horizontal;const qe=Pe+Le.height,Ie=Ue+Le.width,Xe=ownerWindow(resolveAnchorEl(C)),et=Xe.innerHeight-D,tt=Xe.innerWidth-D;if(D!==null&&Pe<D){const Ye=Pe-D;Pe-=Ye,pe.vertical+=Ye}else if(D!==null&&qe>et){const Ye=qe-et;Pe-=Ye,pe.vertical+=Ye}if(D!==null&&Ue<D){const Ye=Ue-D;Ue-=Ye,pe.horizontal+=Ye}else if(Ie>tt){const Ye=Ie-tt;Ue-=Ye,pe.horizontal+=Ye}return{top:`${Math.round(Pe)}px`,left:`${Math.round(Ue)}px`,transformOrigin:getTransformOriginValue(pe)}},[C,R,se,Q,D]),[ae,re]=reactExports.useState(F),J=reactExports.useCallback(()=>{const we=Y.current;if(!we)return;const Le=ie(we);Le.top!==null&&we.style.setProperty("top",Le.top),Le.left!==null&&(we.style.left=Le.left),we.style.transformOrigin=Le.transformOrigin,re(!0)},[ie]);reactExports.useEffect(()=>(W&&window.addEventListener("scroll",J),()=>window.removeEventListener("scroll",J)),[C,W,J]);const te=()=>{J()},Z=()=>{re(!1)};reactExports.useEffect(()=>{F&&J()}),reactExports.useImperativeHandle(E,()=>F?{updatePosition:()=>{J()}}:null,[F,J]),reactExports.useEffect(()=>{if(!F)return;const we=debounce(()=>{J()}),Le=ownerWindow(resolveAnchorEl(C));return Le.addEventListener("resize",we),()=>{we.clear(),Le.removeEventListener("resize",we)}},[C,F,J]);let X=V;const de={slots:{transition:O,...G},slotProps:{transition:U,paper:N,...B}},[he,ne]=useSlot("transition",{elementType:Grow,externalForwardedProps:de,ownerState:ee,getSlotProps:we=>({...we,onEntering:(Le,pe)=>{var Me;(Me=we.onEntering)==null||Me.call(we,Le,pe),te()},onExited:Le=>{var pe;(pe=we.onExited)==null||pe.call(we,Le),Z()}}),additionalProps:{appear:!0,in:F}});V==="auto"&&!he.muiSupportAuto&&(X=void 0);const ue=j||(C?ownerDocument(resolveAnchorEl(C)).body:void 0),[ce,{slots:fe,slotProps:ve,...Te}]=useSlot("root",{ref:T,elementType:PopoverRoot,externalForwardedProps:{...de,...K},shouldForwardComponentProp:!0,additionalProps:{slots:{backdrop:G.backdrop},slotProps:{backdrop:mergeSlotProps$1(typeof B.backdrop=="function"?B.backdrop(ee):B.backdrop,{invisible:!0})},container:ue,open:F},ownerState:ee,className:clsx(oe.root,L)}),[Se,ke]=useSlot("paper",{ref:Y,className:oe.paper,elementType:PopoverPaper,externalForwardedProps:de,shouldForwardComponentProp:!0,additionalProps:{elevation:M,style:ae?void 0:{opacity:0}},ownerState:ee});return jsxRuntimeExports.jsx(ce,{...Te,...!isHostComponent(ce)&&{slots:fe,slotProps:ve,disableScrollLock:W},children:jsxRuntimeExports.jsx(he,{...ne,timeout:X,children:jsxRuntimeExports.jsx(Se,{...ke,children:I})})})});function getMenuUtilityClass(o){return generateUtilityClass("MuiMenu",o)}generateUtilityClasses("MuiMenu",["root","paper","list"]);const RTL_ORIGIN={vertical:"top",horizontal:"right"},LTR_ORIGIN={vertical:"top",horizontal:"left"},useUtilityClasses$g=o=>{const{classes:u}=o;return composeClasses({root:["root"],paper:["paper"],list:["list"]},getMenuUtilityClass,u)},MenuRoot=styled(Popover,{shouldForwardProp:o=>rootShouldForwardProp(o)||o==="classes",name:"MuiMenu",slot:"Root"})({}),MenuPaper=styled(PopoverPaper,{name:"MuiMenu",slot:"Paper"})({maxHeight:"calc(100% - 96px)",WebkitOverflowScrolling:"touch"}),MenuMenuList=styled(MenuList,{name:"MuiMenu",slot:"List"})({outline:0}),Menu=reactExports.forwardRef(function(u,T){const S=useDefaultProps({props:u,name:"MuiMenu"}),{autoFocus:E=!0,children:C,className:_,disableAutoFocusItem:P=!1,MenuListProps:R={},onClose:I,open:L,PaperProps:j={},PopoverClasses:M,transitionDuration:D="auto",TransitionProps:{onEntering:F,...N}={},variant:G="selectedMenu",slots:B={},slotProps:H={},...O}
198=S,V=useRtl(),U={...S,autoFocus:E,disableAutoFocusItem:P,MenuListProps:R,onEntering:F,PaperProps:j,transitionDuration:D,TransitionProps:N,variant:G},W=useUtilityClasses$g(U),K=E&&!P&&L,Y=reactExports.useRef(null),ee=(X,de)=>{Y.current&&Y.current.adjustStyleForScrollbar(X,{direction:V?"rtl":"ltr"}),F&&F(X,de)},oe=X=>{X.key==="Tab"&&(X.preventDefault(),I&&I(X,"tabKeyDown"))};let se=-1;reactExports.Children.map(C,(X,de)=>{reactExports.isValidElement(X)&&(X.props.disabled||(G==="selectedMenu"&&X.props.selected||se===-1)&&(se=de))});const Q={slots:B,slotProps:{list:R,transition:N,paper:j,...H}},ie=useSlotProps({elementType:B.root,externalSlotProps:H.root,ownerState:U,className:[W.root,_]}),[ae,re]=useSlot("paper",{className:W.paper,elementType:MenuPaper,externalForwardedProps:Q,shouldForwardComponentProp:!0,ownerState:U}),[J,te]=useSlot("list",{className:clsx(W.list,R.className),elementType:MenuMenuList,shouldForwardComponentProp:!0,externalForwardedProps:Q,getSlotProps:X=>({...X,onKeyDown:de=>{var he;oe(de),(he=X.onKeyDown)==null||he.call(X,de)}}),ownerState:U}),Z=typeof Q.slotProps.transition=="function"?Q.slotProps.transition(U):Q.slotProps.transition;return jsxRuntimeExports.jsx(MenuRoot,{onClose:I,anchorOrigin:{vertical:"bottom",horizontal:V?"right":"left"},transformOrigin:V?RTL_ORIGIN:LTR_ORIGIN,slots:{root:B.root,paper:ae,backdrop:B.backdrop,...B.transition&&{transition:B.transition}},slotProps:{root:ie,paper:re,backdrop:typeof H.backdrop=="function"?H.backdrop(U):H.backdrop,transition:{...Z,onEntering:(...X)=>{var de;ee(...X),(de=Z==null?void 0:Z.onEntering)==null||de.call(Z,...X)}}},open:L,ref:T,transitionDuration:D,ownerState:U,...O,classes:M,children:jsxRuntimeExports.jsx(J,{actions:Y,autoFocus:E&&(se===-1||P),autoFocusItem:K,variant:G,...te,children:C})})});function getMenuItemUtilityClass(o){return generateUtilityClass("MuiMenuItem",o)}const menuItemClasses=generateUtilityClasses("MuiMenuItem",["root","focusVisible","dense","disabled","divider","gutters","selected"]),overridesResolver=(o,u)=>{const{ownerState:T}=o;return[u.root,T.dense&&u.dense,T.divider&&u.divider,!T.disableGutters&&u.gutters]},useUtilityClasses$f=o=>{const{disabled:u,dense:T,divider:S,disableGutters:E,selected:C,classes:_}=o,R=composeClasses({root:["root",T&&"dense",u&&"disabled",!E&&"gutters",S&&"divider",C&&"selected"]},getMenuItemUtilityClass,_);return{..._,...R}},MenuItemRoot=styled(ButtonBase,{shouldForwardProp:o=>rootShouldForwardProp(o)||o==="classes",name:"MuiMenuItem",slot:"Root",overridesResolver})(memoTheme(({theme:o})=>({...o.typography.body1,display:"flex",justifyContent:"flex-start",alignItems:"center",position:"relative",textDecoration:"none",minHeight:48,paddingTop:6,paddingBottom:6,boxSizing:"border-box",whiteSpace:"nowrap","&:hover":{textDecoration:"none",backgroundColor:(o.vars||o).palette.action.hover,"@media (hover: none)":{backgroundColor:"transparent"}},[`&.${menuItemClasses.selected}`]:{backgroundColor:o.alpha((o.vars||o).palette.primary.main,(o.vars||o).palette.action.selectedOpacity),[`&.${menuItemClasses.focusVisible}`]:{backgroundColor:o.alpha((o.vars||o).palette.primary.main,`${(o.vars||o).palette.action.selectedOpacity} + ${(o.vars||o).palette.action.focusOpacity}`)}},[`&.${menuItemClasses.selected}:hover`]:{backgroundColor:o.alpha((o.vars||o).palette.primary.main,`${(o.vars||o).palette.action.selectedOpacity} + ${(o.vars||o).palette.action.hoverOpacity}`),"@media (hover: none)":{backgroundColor:o.alpha((o.vars||o).palette.primary.main,(o.vars||o).palette.action.selectedOpacity)}},[`&.${menuItemClasses.focusVisible}`]:{backgroundColor:(o.vars||o).palette.action.focus},[`&.${menuItemClasses.disabled}`]:{opacity:(o.vars||o).palette.action.disabledOpacity},[`& + .${dividerClasses.root}`]:{marginTop:o.spacing(1),marginBottom:o.spacing(1)},[`& + .${dividerClasses.inset}`]:{marginLeft:52},[`& .${listItemTextClasses.root}`]:{marginTop:0,marginBottom:0},[`& .${listItemTextClasses.inset}`]:{paddingLeft:36},[`& .${listItemIconClasses.root}`]:{minWidth:36},variants:[{props:({ownerState:u})=>!u.disableGutters,style:{paddingLeft:16,paddingRight:16}},{props:({ownerState:u})=>u.divider,style:{borderBottom:`1px solid ${(o.vars||o).palette.divider}`,backgroundClip:"padding-box"}},{props:({ownerState:u})=>!u.dense,style:{[o.breakpoints.up("sm")]:{minHeight:"auto"}}},{props:({ownerState:u})=>u.dense,style:{minHeight:32,paddingTop:4,paddingBottom:4,...o.typography.body2,[`& .${listItemIconClasses.root} svg`]:{fontSize:"1.25rem"}}}]}))),MenuItem=reactExports.forwardRef(function(u,T){const S=useDefaultProps({props:u,name:"MuiMenuItem"}),{autoFocus:E=!1,component:C="li",dense:_=!1,divider:P=!1,disableGutters:R=!1,focusVisibleClassName:I,role:L="menuitem",tabIndex:j,className:M,...D}=S,F=reactExports.useContext(ListContext),N=reactExports.useMemo(()=>({dense:_||F.dense||!1,disableGutters:R}),[F.dense,_,R]),G=reactExports.useRef(null);useEnhancedEffect(()=>{E&&G.current&&G.current.focus()},[E]);const B={...S,dense:N.dense,divider:P,disableGutters:R},H=useUtilityClasses$f(S),O=useForkRef(G,T);let V;return S.disabled||(V=j!==void 0?j:-1),jsxRuntimeExports.jsx(ListContext.Provider,{value:N,children:jsxRuntimeExports.jsx(MenuItemRoot,{ref:O,role:L,tabIndex:V,component:C,focusVisibleClassName:clsx(H.focusVisible,I),className:clsx(H.root,M),...D,ownerState:B,classes:H})})});function getNativeSelectUtilityClasses(o){return generateUtilityClass("MuiNativeSelect",o)}const nativeSelectClasses=generateUtilityClasses("MuiNativeSelect",["root","select","multiple","filled","outlined","standard","disabled","icon","iconOpen","iconFilled","iconOutlined","iconStandard","nativeInput","error"]),useUtilityClasses$e=o=>{const{classes:u,variant:T,disabled:S,multiple:E,open:C,error:_}=o,P={select:["select",T,S&&"disabled",E&&"multiple",_&&"error"],icon:["icon",`icon${capitalize(T)}`,C&&"iconOpen",S&&"disabled"]};return composeClasses(P,getNativeSelectUtilityClasses,u)},StyledSelectSelect=styled("select",{name:"MuiNativeSelect"})(({theme:o})=>({MozAppearance:"none",WebkitAppearance:"none",userSelect:"none",borderRadius:0,cursor:"pointer","&:focus":{borderRadius:0},[`&.${nativeSelectClasses.disabled}`]:{cursor:"default"},"&[multiple]":{height:"auto"},"&:not([multiple]) option, &:not([multiple]) optgroup":{backgroundColor:(o.vars||o).palette.background.paper},variants:[{props:({ownerState:u})=>u.variant!=="filled"&&u.variant!=="outlined",style:{"&&&":{paddingRight:24,minWidth:16}}},{props:{variant:"filled"},style:{"&&&":{paddingRight:32}}},{props:{variant:"outlined"},style:{borderRadius:(o.vars||o).shape.borderRadius,"&:focus":{borderRadius:(o.vars||o).shape.borderRadius},"&&&":{paddingRight:32}}}]})),NativeSelectSelect=styled(StyledSelectSelect,{name:"MuiNativeSelect",slot:"Select",shouldForwardProp:rootShouldForwardProp,overridesResolver:(o,u)=>{const{ownerState:T}=o;return[u.select,u[T.variant],T.error&&u.error,{[`&.${nativeSelectClasses.multiple}`]:u.multiple}]}})({}),StyledSelectIcon=styled("svg",{name:"MuiNativeSelect"})(({theme:o})=>({position:"absolute",right:0,top:"calc(50% - .5em)",pointerEvents:"none",color:(o.vars||o).palette.action.active,[`&.${nativeSelectClasses.disabled}`]:{color:(o.vars||o).palette.action.disabled},variants:[{props:({ownerState:u})=>u.open,style:{transform:"rotate(180deg)"}},{props:{variant:"filled"},style:{right:7}},{props:{variant:"outlined"},style:{right:7}}]})),NativeSelectIcon=styled(StyledSelectIcon,{name:"MuiNativeSelect",slot:"Icon",overridesResolver:(o,u)=>{const{ownerState:T}=o;return[u.icon,T.variant&&u[`icon${capitalize(T.variant)}
198`],T.open&&u.iconOpen]}})({}),NativeSelectInput=reactExports.forwardRef(function(u,T){const{className:S,disabled:E,error:C,IconComponent:_,inputRef:P,variant:R="standard",...I}=u,L={...u,disabled:E,variant:R,error:C},j=useUtilityClasses$e(L);return jsxRuntimeExports.jsxs(reactExports.Fragment,{children:[jsxRuntimeExports.jsx(NativeSelectSelect,{ownerState:L,className:clsx(j.select,S),disabled:E,ref:P||T,...I}),u.multiple?null:jsxRuntimeExports.jsx(NativeSelectIcon,{as:_,ownerState:L,className:j.icon})]})});var _span$1;const NotchedOutlineRoot$1=styled("fieldset",{name:"MuiNotchedOutlined",shouldForwardProp:rootShouldForwardProp})({textAlign:"left",position:"absolute",bottom:0,right:0,top:-5,left:0,margin:0,padding:"0 8px",pointerEvents:"none",borderRadius:"inherit",borderStyle:"solid",borderWidth:1,overflow:"hidden",minWidth:"0%"}),NotchedOutlineLegend=styled("legend",{name:"MuiNotchedOutlined",shouldForwardProp:rootShouldForwardProp})(memoTheme(({theme:o})=>({float:"unset",width:"auto",overflow:"hidden",variants:[{props:({ownerState:u})=>!u.withLabel,style:{padding:0,lineHeight:"11px",transition:o.transitions.create("width",{duration:150,easing:o.transitions.easing.easeOut})}},{props:({ownerState:u})=>u.withLabel,style:{display:"block",padding:0,height:11,fontSize:"0.75em",visibility:"hidden",maxWidth:.01,transition:o.transitions.create("max-width",{duration:50,easing:o.transitions.easing.easeOut}),whiteSpace:"nowrap","& > span":{paddingLeft:5,paddingRight:5,display:"inline-block",opacity:0,visibility:"visible"}}},{props:({ownerState:u})=>u.withLabel&&u.notched,style:{maxWidth:"100%",transition:o.transitions.create("max-width",{duration:100,easing:o.transitions.easing.easeOut,delay:50})}}]})));function NotchedOutline(o){const{children:u,classes:T,className:S,label:E,notched:C,..._}=o,P=E!=null&&E!=="",R={...o,notched:C,withLabel:P};return jsxRuntimeExports.jsx(NotchedOutlineRoot$1,{"aria-hidden":!0,className:S,ownerState:R,..._,children:jsxRuntimeExports.jsx(NotchedOutlineLegend,{ownerState:R,children:P?jsxRuntimeExports.jsx("span",{children:E}):_span$1||(_span$1=jsxRuntimeExports.jsx("span",{className:"notranslate","aria-hidden":!0,children:"​"}))})})}const useUtilityClasses$d=o=>{const{classes:u}=o,S=composeClasses({root:["root"],notchedOutline:["notchedOutline"],input:["input"]},getOutlinedInputUtilityClass,u);return{...u,...S}},OutlinedInputRoot=styled(InputBaseRoot,{shouldForwardProp:o=>rootShouldForwardProp(o)||o==="classes",name:"MuiOutlinedInput",slot:"Root",overridesResolver:rootOverridesResolver})(memoTheme(({theme:o})=>{const u=o.palette.mode==="light"?"rgba(0, 0, 0, 0.23)":"rgba(255, 255, 255, 0.23)";return{position:"relative",borderRadius:(o.vars||o).shape.borderRadius,[`&:hover .${outlinedInputClasses.notchedOutline}`]:{borderColor:(o.vars||o).palette.text.primary},"@media (hover: none)":{[`&:hover .${outlinedInputClasses.notchedOutline}`]:{borderColor:o.vars?o.alpha(o.vars.palette.common.onBackground,.23):u}},[`&.${outlinedInputClasses.focused} .${outlinedInputClasses.notchedOutline}`]:{borderWidth:2},variants:[...Object.entries(o.palette).filter(createSimplePaletteValueFilter()).map(([T])=>({props:{color:T},style:{[`&.${outlinedInputClasses.focused} .${outlinedInputClasses.notchedOutline}`]:{borderColor:(o.vars||o).palette[T].main}}})),{props:{},style:{[`&.${outlinedInputClasses.error} .${outlinedInputClasses.notchedOutline}`]:{borderColor:(o.vars||o).palette.error.main},[`&.${outlinedInputClasses.disabled} .${outlinedInputClasses.notchedOutline}`]:{borderColor:(o.vars||o).palette.action.disabled}}},{props:({ownerState:T})=>T.startAdornment,style:{paddingLeft:14}},{props:({ownerState:T})=>T.endAdornment,style:{paddingRight:14}},{props:({ownerState:T})=>T.multiline,style:{padding:"16.5px 14px"}},{props:({ownerState:T,size:S})=>T.multiline&&S==="small",style:{padding:"8.5px 14px"}}]}})),NotchedOutlineRoot=styled(NotchedOutline,{name:"MuiOutlinedInput",slot:"NotchedOutline"})(memoTheme(({theme:o})=>{const u=o.palette.mode==="light"?"rgba(0, 0, 0, 0.23)":"rgba(255, 255, 255, 0.23)";return{borderColor:o.vars?o.alpha(o.vars.palette.common.onBackgroun
198d,.23):u}})),OutlinedInputInput=styled(InputBaseInput,{name:"MuiOutlinedInput",slot:"Input",overridesResolver:inputOverridesResolver})(memoTheme(({theme:o})=>({padding:"16.5px 14px",...!o.vars&&{"&:-webkit-autofill":{WebkitBoxShadow:o.palette.mode==="light"?null:"0 0 0 100px #266798 inset",WebkitTextFillColor:o.palette.mode==="light"?null:"#fff",caretColor:o.palette.mode==="light"?null:"#fff",borderRadius:"inherit"}},...o.vars&&{"&:-webkit-autofill":{borderRadius:"inherit"},[o.getColorSchemeSelector("dark")]:{"&:-webkit-autofill":{WebkitBoxShadow:"0 0 0 100px #266798 inset",WebkitTextFillColor:"#fff",caretColor:"#fff"}}},variants:[{props:{size:"small"},style:{padding:"8.5px 14px"}},{props:({ownerState:u})=>u.multiline,style:{padding:0}},{props:({ownerState:u})=>u.startAdornment,style:{paddingLeft:0}},{props:({ownerState:u})=>u.endAdornment,style:{paddingRight:0}}]}))),OutlinedInput=reactExports.forwardRef(function(u,T){const S=useDefaultProps({props:u,name:"MuiOutlinedInput"}),{components:E={},fullWidth:C=!1,inputComponent:_="input",label:P,multiline:R=!1,notched:I,slots:L={},slotProps:j={},type:M="text",...D}=S,F=useUtilityClasses$d(S),N=useFormControl(),G=formControlState({props:S,muiFormControl:N,states:["color","disabled","error","focused","hiddenLabel","size","required"]}),B={...S,color:G.color||"primary",disabled:G.disabled,error:G.error,focused:G.focused,formControl:N,fullWidth:C,hiddenLabel:G.hiddenLabel,multiline:R,size:G.size,type:M},H=L.root??E.Root??OutlinedInputRoot,O=L.input??E.Input??OutlinedInputInput,[V,U]=useSlot("notchedOutline",{elementType:NotchedOutlineRoot,className:F.notchedOutline,shouldForwardComponentProp:!0,ownerState:B,externalForwardedProps:{slots:L,slotProps:j},additionalProps:{label:P!=null&&P!==""&&G.required?jsxRuntimeExports.jsxs(reactExports.Fragment,{children:[P," ","*"]}):P}});return jsxRuntimeExports.jsx(InputBase,{slots:{root:H,input:O},slotProps:j,renderSuffix:W=>jsxRuntimeExports.jsx(V,{...U,notched:typeof I<"u"?I:!!(W.startAdornment||W.filled||W.focused)}),fullWidth:C,inputComponent:_,multiline:R,ref:T,type:M,...D,classes:{...F,notchedOutline:null}})});OutlinedInput.muiName="Input";function getSelectUtilityClasses(o){return generateUtilityClass("MuiSelect",o)}const selectClasses=generateUtilityClasses("MuiSelect",["root","select","multiple","filled","outlined","standard","disabled","focused","icon","iconOpen","iconFilled","iconOutlined","iconStandard","nativeInput","error"]);var _span;const SelectSelect=styled(StyledSelectSelect,{name:"MuiSelect",slot:"Select",overridesResolver:(o,u)=>{const{ownerState:T}=o;return[{[`&.${selectClasses.select}`]:u.select},{[`&.${selectClasses.select}`]:u[T.variant]},{[`&.${selectClasses.error}`]:u.error},{[`&.${selectClasses.multiple}`]:u.multiple}]}})({[`&.${selectClasses.select}`]:{height:"auto",minHeight:"1.4375em",textOverflow:"ellipsis",whiteSpace:"nowrap",overflow:"hidden"}}),SelectIcon=styled(StyledSelectIcon,{name:"MuiSelect",slot:"Icon",overridesResolver:(o,u)=>{const{ownerState:T}=o;return[u.icon,T.variant&&u[`icon${capitalize(T.variant)}`],T.open&&u.iconOpen]}})({}),SelectNativeInput=styled("input",{shouldForwardProp:o=>slotShouldForwardProp(o)&&o!=="classes",name:"MuiSelect",slot:"NativeInput"})({bottom:0,left:0,position:"absolute",opacity:0,pointerEvents:"none",width:"100%",boxSizing:"border-box"});function areEqualValues(o,u){return typeof u=="object"&&u!==null?o===u:String(o)===String(u)}function isEmpty(o){return o==null||typeof o=="string"&&!o.trim()}const useUtilityClasses$c=o=>{const{classes:u,variant:T,disabled:S,multiple:E,open:C,error:_}=o,P={select:["select",T,S&&"disabled",E&&"multiple",_&&"error"],icon:["icon",`icon${capitalize(T)}`,C&&"iconOpen",S&&"disabled"],nativeInput:["nativeInput"]};return composeClasses(P,getSelectUtilityClasses,u)},SelectInput=reactExports.forwardRef(function(u,T){var mt,xt,vt,yt;const{"aria-describedby":S,"aria-label":E,autoFocus:C,autoWidth:_,children:P,className:R,defaultOpen:I,defaultValue:L,disabled:j,displayEmpty:M,error:D=!1,IconComponent:F,inputRef:N,labelId:G,MenuProps:B={}
198,multiple:H,name:O,onBlur:V,onChange:U,onClose:W,onFocus:K,onOpen:Y,open:ee,readOnly:oe,renderValue:se,required:Q,SelectDisplayProps:ie={},tabIndex:ae,type:re,value:J,variant:te="standard",...Z}=u,[X,de]=useControlled({controlled:J,default:L,name:"Select"}),[he,ne]=useControlled({controlled:ee,default:I,name:"Select"}),ue=reactExports.useRef(null),ce=reactExports.useRef(null),[fe,ve]=reactExports.useState(null),{current:Te}=reactExports.useRef(ee!=null),[Se,ke]=reactExports.useState(),we=useForkRef(T,N),Le=reactExports.useCallback(Je=>{ce.current=Je,Je&&ve(Je)},[]),pe=fe==null?void 0:fe.parentNode;reactExports.useImperativeHandle(we,()=>({focus:()=>{ce.current.focus()},node:ue.current,value:X}),[X]),reactExports.useEffect(()=>{I&&he&&fe&&!Te&&(ke(_?null:pe.clientWidth),ce.current.focus())},[fe,_]),reactExports.useEffect(()=>{C&&ce.current.focus()},[C]),reactExports.useEffect(()=>{if(!G)return;const Je=ownerDocument(ce.current).getElementById(G);if(Je){const De=()=>{getSelection().isCollapsed&&ce.current.focus()};return Je.addEventListener("click",De),()=>{Je.removeEventListener("click",De)}}},[G]);const Me=(Je,De)=>{Je?Y&&Y(De):W&&W(De),Te||(ke(_?null:pe.clientWidth),ne(Je))},Pe=Je=>{Je.button===0&&(Je.preventDefault(),ce.current.focus(),Me(!0,Je))},Ue=Je=>{Me(!1,Je)},qe=reactExports.Children.toArray(P),Ie=Je=>{const De=qe.find($e=>$e.props.value===Je.target.value);De!==void 0&&(de(De.props.value),U&&U(Je,De))},Xe=Je=>De=>{let $e;if(De.currentTarget.hasAttribute("tabindex")){if(H){$e=Array.isArray(X)?X.slice():[];const ht=X.indexOf(Je.props.value);ht===-1?$e.push(Je.props.value):$e.splice(ht,1)}else $e=Je.props.value;if(Je.props.onClick&&Je.props.onClick(De),X!==$e&&(de($e),U)){const ht=De.nativeEvent||De,ut=new ht.constructor(ht.type,ht);Object.defineProperty(ut,"target",{writable:!0,value:{value:$e,name:O}}),U(ut,Je)}H||Me(!1,De)}},et=Je=>{oe||[" ","ArrowUp","ArrowDown","Enter"].includes(Je.key)&&(Je.preventDefault(),Me(!0,Je))},tt=fe!==null&&he,Ye=Je=>{!tt&&V&&(Object.defineProperty(Je,"target",{writable:!0,value:{value:X,name:O}}),V(Je))};delete Z["aria-invalid"];let ze,Ze;const He=[];let rt=!1;(isFilled({value:X})||M)&&(se?ze=se(X):rt=!0);const it=qe.map(Je=>{if(!reactExports.isValidElement(Je))return null;let De;if(H){if(!Array.isArray(X))throw new Error(formatMuiErrorMessage(2));De=X.some($e=>areEqualValues($e,Je.props.value)),De&&rt&&He.push(Je.props.children)}else De=areEqualValues(X,Je.props.value),De&&rt&&(Ze=Je.props.children);return reactExports.cloneElement(Je,{"aria-selected":De?"true":"false",onClick:Xe(Je),onKeyUp:$e=>{$e.key===" "&&$e.preventDefault(),Je.props.onKeyUp&&Je.props.onKeyUp($e)},role:"option",selected:De,value:void 0,"data-value":Je.props.value})});rt&&(H?He.length===0?ze=null:ze=He.reduce((Je,De,$e)=>(Je.push(De),$e<He.length-1&&Je.push(", "),Je),[]):ze=Ze);let st=Se;!_&&Te&&fe&&(st=pe.clientWidth);let at;typeof ae<"u"?at=ae:at=j?null:0;const ot=ie.id||(O?`mui-component-select-${O}`:void 0),je={...u,variant:te,value:X,open:tt,error:D},Be=useUtilityClasses$c(je),Qe={...B.PaperProps,...typeof((mt=B.slotProps)==null?void 0:mt.paper)=="function"?B.slotProps.paper(je):(xt=B.slotProps)==null?void 0:xt.paper},Ge={...B.MenuListProps,...typeof((vt=B.slotProps)==null?void 0:vt.list)=="function"?B.slotProps.list(je):(yt=B.slotProps)==null?void 0:yt.list},We=useId();return jsxRuntimeExports.jsxs(reactExports.Fragment,{children:[jsxRuntimeExports.jsx(SelectSelect,{as:"div",ref:Le,tabIndex:at,role:"combobox","aria-controls":tt?We:void 0,"aria-disabled":j?"true":void 0,"aria-expanded":tt?"true":"false","aria-haspopup":"listbox","aria-label":E,"aria-labelledby":[G,ot].filter(Boolean).join(" ")||void 0,"aria-describedby":S,"aria-required":Q?"true":void 0,"aria-invalid":D?"true":void 0,onKeyDown:et,onMouseDown:j||oe?null:Pe,onBlur:Ye,onFocus:K,...ie,ownerState:je,className:clsx(ie.className,Be.select,R),id:ot,children:isEmpty(ze)?_span||(_span=jsxRuntimeExports.jsx("span",{className:"notranslate","aria-hidden":!0,children:"​"})):ze}),jsxRuntimeExports.jsx(SelectNativeInput,{"aria-invalid":D,value:Array.isArray(X)?X.join(","):X,name:O,ref:ue,"aria-hidden":!0,onChange:Ie,tabIndex:-1,disabled:j,className:Be.nativeInput,autoFocus:C,required:Q,...Z,ownerState:je}),jsxRuntimeExports.jsx(SelectIcon,{as:F,className:Be.icon,ownerState:je}),jsxRuntimeExports.jsx(Menu,{id:`menu-${O||""}`,anchorEl:pe,open:tt,onClose:Ue,anchorOrigin:{vertical:"bottom",horizontal:"center"},transformOrigin:{vertical:"top",horizontal:"center"},...B,slotProps:{...B.slotProps,list:{"aria-labelledby":G,role:"listbox","aria-multiselectable":H?"true":void 0,disableListWrap:!0,id:We,...Ge},paper:{...Qe,style:{minWidth:st,...Qe!=null?Qe.style:null}}},children:it})]})}),useUtilityClasses$b=o=>{const{classes:u}=o,S=composeClasses({root:["root"]},getSelectUtilityClasses,u);return{...u,...S}},styledRootConfig={name:"MuiSelect",slot:"Root",shouldForwardProp:o=>rootShouldForwardProp(o)&&o!=="variant"},StyledInput=styled(Input,styledRootConfig)(""),StyledOutlinedInput=styled(OutlinedInput,styledRootConfig)(""),StyledFilledInput=styled(
198FilledInput,styledRootConfig)(""),Select=reactExports.forwardRef(function(u,T){const S=useDefaultProps({name:"MuiSelect",props:u}),{autoWidth:E=!1,children:C,classes:_={},className:P,defaultOpen:R=!1,displayEmpty:I=!1,IconComponent:L=ArrowDropDownIcon,id:j,input:M,inputProps:D,label:F,labelId:N,MenuProps:G,multiple:B=!1,native:H=!1,onClose:O,onOpen:V,open:U,renderValue:W,SelectDisplayProps:K,variant:Y="outlined",...ee}=S,oe=H?NativeSelectInput:SelectInput,se=useFormControl(),Q=formControlState({props:S,muiFormControl:se,states:["variant","error"]}),ie=Q.variant||Y,ae={...S,variant:ie,classes:_},re=useUtilityClasses$b(ae),{root:J,...te}=re,Z=M||{standard:jsxRuntimeExports.jsx(StyledInput,{ownerState:ae}),outlined:jsxRuntimeExports.jsx(StyledOutlinedInput,{label:F,ownerState:ae}),filled:jsxRuntimeExports.jsx(StyledFilledInput,{ownerState:ae})}[ie],X=useForkRef(T,getReactElementRef(Z));return jsxRuntimeExports.jsx(reactExports.Fragment,{children:reactExports.cloneElement(Z,{inputComponent:oe,inputProps:{children:C,error:Q.error,IconComponent:L,variant:ie,type:void 0,multiple:B,...H?{id:j}:{autoWidth:E,defaultOpen:R,displayEmpty:I,labelId:N,MenuProps:G,onClose:O,onOpen:V,open:U,renderValue:W,SelectDisplayProps:{id:j,...K}},...D,classes:D?deepmerge(te,D.classes):te,...M?M.props.inputProps:{}},...(B&&H||I)&&ie==="outlined"?{notched:!0}:{},ref:X,className:clsx(Z.props.className,P,re.root),...!M&&{variant:ie},...ee})})});Select.muiName="Select";const styles={entering:{transform:"none"},entered:{transform:"none"}},Zoom=reactExports.forwardRef(function(u,T){const S=useTheme(),E={enter:S.transitions.duration.enteringScreen,exit:S.transitions.duration.leavingScreen},{addEndListener:C,appear:_=!0,children:P,easing:R,in:I,onEnter:L,onEntered:j,onEntering:M,onExit:D,onExited:F,onExiting:N,style:G,timeout:B=E,TransitionComponent:H=Transition,...O}=u,V=reactExports.useRef(null),U=useForkRef(V,getReactElementRef(P),T),W=ae=>re=>{if(ae){const J=V.current;re===void 0?ae(J):ae(J,re)}},K=W(M),Y=W((ae,re)=>{reflow(ae);const J=getTransitionProps({style:G,timeout:B,easing:R},{mode:"enter"});ae.style.webkitTransition=S.transitions.create("transform",J),ae.style.transition=S.transitions.create("transform",J),L&&L(ae,re)}),ee=W(j),oe=W(N),se=W(ae=>{const re=getTransitionProps({style:G,timeout:B,easing:R},{mode:"exit"});ae.style.webkitTransition=S.transitions.create("transform",re),ae.style.transition=S.transitions.create("transform",re),D&&D(ae)}),Q=W(F),ie=ae=>{C&&C(V.current,ae)};return jsxRuntimeExports.jsx(H,{appear:_,in:I,nodeRef:V,onEnter:Y,onEntered:ee,onEntering:K,onExit:se,onExited:Q,onExiting:oe,addEndListener:ie,timeout:B,...O,children:(ae,{ownerState:re,...J})=>reactExports.cloneElement(P,{style:{transform:"scale(0)",visibility:ae==="exited"&&!I?"hidden":void 0,...styles[ae],...G,...P.props.style},ref:U,...J})})}),StepperContext=reactExports.createContext({}),StepContext=reactExports.createContext({});function getStepUtilityClass(o){return generateUtilityClass("MuiStep",o)}generateUtilityClasses("MuiStep",["root","horizontal","vertical","alternativeLabel","completed"]);const useUtilityClasses$a=o=>{const{classes:u,orientation:T,alternativeLabel:S,completed:E}=o;return composeClasses({root:["root",T,S&&"alternativeLabel",E&&"completed"]},getStepUtilityClass,u)},StepRoot=styled("div",{name:"MuiStep",slot:"Root",overridesResolver:(o,u)=>{const{ownerState:T}=o;return[u.root,u[T.orientation],T.alternativeLabel&&u.alternativeLabel,T.completed&&u.completed]}})({variants:[{props:{orientation:"horizontal"},style:{paddingLeft:8,paddingRight:8}},{props:{alternativeLabel:!0},style:{flex:1,position:"relative"}}]}),Step=reactExports.forwardRef(function(u,T){const S=useDefaultProps({props:u,name:"MuiStep"}),{active:E,children:C,className:_,component:P="div",completed:R,disabled:I,expanded:L=!1,index:j,last:M,...D}=S,{activeStep:F,connector:N,alternativeLabel:G,orientation:B,nonLinear:H}=reactExports.useContext(StepperContext);let[O=!1,V=!1,U=!1]=[E,R,I];F===j?O=E!==void 0?E:!0:!H&&F>j?V=R!==void 0?R:!0:!H&&F<j&&(U=I!==void 0?I:!0);const W=reactExports.useMemo(()=>({index:j,last:M,expanded:L,icon:j+1,active:O,completed:V,disabled:U}),[j,M,L,O,V,U]),K={...S,active:O,orientation:B,alternativeLabel:G,completed:V,disabled:U,expanded:L,component:P},Y=useUtilityClasses$a(K),ee=jsxRuntimeExports.jsxs(StepRoot,{as:P,className:clsx(Y.root,_),ref:T,ownerState:K,...D,children:[N&&G&&j!==0?N:null,C]});return jsxRuntimeExports.jsx(StepContext.Provider,{value:W,children:N&&!G&&j!==0?jsxRuntimeExports.jsxs(reactExports.Fragment,{children:[N,ee]}):ee})}),CheckCircle$1=createSvgIcon(jsxRuntimeExports.jsx("path",{d:"M12 0a12 12 0 1 0 0 24 12 12 0 0 0 0-24zm-2 17l-5-5 1.4-1.4 3.6 3.6 7.6-7.6L19 8l-9 9z"})),Warning=createSvgIcon(jsxRuntimeExports.jsx("path",{d:"M1 21h22L12 2 
1981 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z"}));function getStepIconUtilityClass(o){return generateUtilityClass("MuiStepIcon",o)}const stepIconClasses=generateUtilityClasses("MuiStepIcon",["root","active","completed","error","text"]);var _circle;const useUtilityClasses$9=o=>{const{classes:u,active:T,completed:S,error:E}=o;return composeClasses({root:["root",T&&"active",S&&"completed",E&&"error"],text:["text"]},getStepIconUtilityClass,u)},StepIconRoot=styled(SvgIcon,{name:"MuiStepIcon",slot:"Root"})(memoTheme(({theme:o})=>({display:"block",transition:o.transitions.create("color",{duration:o.transitions.duration.shortest}),color:(o.vars||o).palette.text.disabled,[`&.${stepIconClasses.completed}`]:{color:(o.vars||o).palette.primary.main},[`&.${stepIconClasses.active}`]:{color:(o.vars||o).palette.primary.main},[`&.${stepIconClasses.error}`]:{color:(o.vars||o).palette.error.main}}))),StepIconText=styled("text",{name:"MuiStepIcon",slot:"Text"})(memoTheme(({theme:o})=>({fill:(o.vars||o).palette.primary.contrastText,fontSize:o.typography.caption.fontSize,fontFamily:o.typography.fontFamily}))),StepIcon=reactExports.forwardRef(function(u,T){const S=useDefaultProps({props:u,name:"MuiStepIcon"}),{active:E=!1,className:C,completed:_=!1,error:P=!1,icon:R,...I}=S,L={...S,active:E,completed:_,error:P},j=useUtilityClasses$9(L);if(typeof R=="number"||typeof R=="string"){const M=clsx(C,j.root);return P?jsxRuntimeExports.jsx(StepIconRoot,{as:Warning,className:M,ref:T,ownerState:L,...I}):_?jsxRuntimeExports.jsx(StepIconRoot,{as:CheckCircle$1,className:M,ref:T,ownerState:L,...I}):jsxRuntimeExports.jsxs(StepIconRoot,{className:M,ref:T,ownerState:L,...I,children:[_circle||(_circle=jsxRuntimeExports.jsx("circle",{cx:"12",cy:"12",r:"12"})),jsxRuntimeExports.jsx(StepIconText,{className:j.text,x:"12",y:"12",textAnchor:"middle",dominantBaseline:"central",ownerState:L,children:R})]})}return R});function getStepLabelUtilityClass(o){return generateUtilityClass("MuiStepLabel",o)}const stepLabelClasses=generateUtilityClasses("MuiStepLabel",["root","horizontal","vertical","label","active","completed","error","disabled","iconContainer","alternativeLabel","labelContainer"]),useUtilityClasses$8=o=>{const{classes:u,orientation:T,active:S,completed:E,error:C,disabled:_,alternativeLabel:P}=o;return composeClasses({root:["root",T,C&&"error",_&&"disabled",P&&"alternativeLabel"],label:["label",S&&"active",E&&"completed",C&&"error",_&&"disabled",P&&"alternativeLabel"],iconContainer:["iconContainer",S&&"active",E&&"completed",C&&"error",_&&"disabled",P&&"alternativeLabel"],labelContainer:["labelContainer",P&&"alternativeLabel"]},getStepLabelUtilityClass,u)},StepLabelRoot=styled("span",{name:"MuiStepLabel",slot:"Root",overridesResolver:(o,u)=>{const{ownerState:T}=o;return[u.root,u[T.orientation]]}})({display:"flex",alignItems:"center",[`&.${stepLabelClasses.alternativeLabel}`]:{flexDirection:"column"},[`&.${stepLabelClasses.disabled}`]:{cursor:"default"},variants:[{props:{orientation:"vertical"},style:{textAlign:"left",padding:"8px 0"}}]}),StepLabelLabel=styled("span",{name:"MuiStepLabel",slot:"Label"})(memoTheme(({theme:o})=>({...o.typography.body2,display:"block",transition:o.transitions.create("color",{duration:o.transitions.duration.shortest}),[`&.${stepLabelClasses.active}`]:{color:(o.vars||o).palette.text.primary,fontWeight:500},[`&.${stepLabelClasses.completed}`]:{color:(o.vars||o).palette.text.primary,fontWeight:500},[`&.${stepLabelClasses.alternativeLabel}`]:{marginTop:16},[`&.${stepLabelClasses.error}`]:{color:(o.vars||o).palette.error.main}}))),StepLabelIconContainer=styled("span",{name:"MuiStepLabel",slot:"IconContainer"})({flexShrink:0,display:"flex",paddingRight:8,[`&.${stepLabelClasses.alternativeLabel}`]:{paddingRight:0}}),StepLabelLabelContainer=styled("span",{name:"MuiStepLabel",slot:"LabelContainer"})(memoTheme(({theme:o})=>({width:"100%",color:(o.vars||o).palette.text.secondary,[`&.${stepLabelClasses.alternativeLabel}`]:{textAlign:"center"}}))),StepLabel=reactExports.forwardRef(function(u,T){const S=useDefaultProps({props:u,name:"MuiStepLabel"}),{children:E,className:C,componentsProps:_={},error:P=!1,icon:R,optional:I,slots:L={},slotProps:j={},StepIconComponent:M,StepIconProps:D,...F}=S,{alternativeLabel:N,orientation:G}=reactExports.useContext(StepperContext),{active:B,disabled:H,completed:O,icon:V}=reactExports.useContext(StepContext),U=R||V;let W=M;U&&!W&&(W=StepIcon);const K={...S,active:B,alternativeLabel:N,completed:O,disabled:H,error:P,orientation:G},Y=useUtilityClasses$8(K),ee={slots:L,slotProps:{stepIcon:D,..._,...j}},[oe,se]=useSlot("root",{elementType:StepLabelRoot,externalForwardedProps:{...ee,...F},ownerState:K,ref:T,className:clsx(Y.root,C)}),[Q,ie]=useSlot("label",{elementType:StepLabelLabel,externalForwardedProps:ee,ownerState:K}),[ae,re]=useSlot("stepIcon",{elementType:W,externalForwardedProps:ee,ownerState:K});return jsxRuntimeExports.jsxs(oe,{...se,children:[U||ae?jsxRuntimeExports.jsx(StepLabelIconContainer,{className:Y.iconContainer,ownerState:K,children:jsxRuntimeExports.jsx(ae,{completed:O,active:B,error:P,icon:U,...re})}):null,jsxRuntimeExports.jsxs(StepLabelLabelContainer,{className:Y.labelContainer,ownerState:K,children:[E?jsxRuntimeExports.jsx(Q,{...ie,className:clsx(Y.label,ie==null?void 0:ie.className),children:E}):null,I]})]})});StepLabel.muiName="StepLabel";function getStepConnectorUtilityClass(o){return generateUtilityClass("MuiStepConnector",o)}generateUtilityClasses("MuiStepConnector",["root","horizontal","vertical","alternativeLabel","active","completed","disabled","line","lineHorizontal","lineVertical"]);const useUtilityClasses$7=o=>{const{classes:u,orientation:T,alternativeLabel:S,active:E,completed:C,disabled:_}=o,P={root:["root",T,S&&"alternativeLabel",E&&"active",C&&"completed",_&&"disabled"],line:["line",`line${capitalize(T)}`]};return composeClasses(P,getStepConnectorUtilityClass,u)},StepConnectorRoot=styled("div",{name:"MuiStepConnector",slot:"Root",overridesResolver:(o,u)=>{const{ownerState:T}=o;return[u.root,u[T.orientation],T.alternativeLabel&&u.alternativeLabel,T.completed&&u.completed]}})({flex:"1 1 auto",variants:[{props:{orientation:"vertical"},style:{marginLeft:12}},{props:{alternativeLabel:!0},style:{position:"absolute",top:12,left:"calc(-50% + 20px)",right:"calc(50% + 20px)"}}]}),StepConnectorLine=styled("span",{name:"MuiStepConnector",slot:"Line",overridesResolver:(o,u)=>{const{ownerState:T}=o;return[u.line,u[`line${capitalize(T.orientation)}`]]}})(memoTheme(({theme:o})=>{const u=o.palette.mode==="light"?o.palette.grey[400]:o.palette.grey[600];return{display:"block",borderColor:o.vars?o.vars.palette.StepConnector.border:u,variants:[{props:{orientation:"horizontal"},style:{borderTopStyle:"solid",borderTopWidth:1}},{props:{orientation:"vertical"},style:{borderLeftStyle:"solid",borderLeftWidth:1,minHeight:24}}]}})),StepConnector=reactExports.forwardRef(function(u,T){const S=useDefaultProps({props:u,name:"MuiStepConnector"}),{className:E,...C}=S,{alternativeLabel:_,orientation:P="horizontal"}=reactExports.useContext(StepperContext),{active:R,disabled:I,completed:L}=reactExports.useContext(StepContext),j={...S,alternativeLabel:_,orientation:P,active:R,completed:L,disabled:I},M=useUtilityClasses$7(j);return jsxRuntimeExports.jsx(StepConnectorRoot,{className:clsx(M.root,E),ref:T,ownerState:j,...C,children:jsxRuntimeExports.jsx(StepConnectorLine,{className:M.line,ownerState:j})})});function getStepperUtilityClass(o){return generateUtilityClass("MuiStepper",o)}generateUtilityClasses("MuiStepper",["root","horizontal","vertical","nonLinear","alternativeLabel"]);const useUtilityClasses$6=o=>{const{orientation:u,nonLinear:T,alternativeLabel:S,classes:E}=o;return composeClasses({root:["root",u,T&&"nonLinear",S&&"alternativeLabel"]},getStepperUtilityClass,E)},StepperRoot=styled("div",{name:"MuiStepper",slot:"Root",overridesResolver:(o,u)=>{const{ownerState:T}=o;return[u.root,u[T.orientation],T.alternativeLabel&&u.alternativeLabel,T.nonLinear&&u.nonLinear]}})({display:"flex",variants:[{props:{orientation:"horizontal"},style:{flexDirection:"row",alignItems:"center"}},{props:{orientation:"vertical"},style:{flexDirection:"column"}},{props:{alternativeLabel:!0},style:{alignItems:"flex-start"}}]}),defaultConnector=jsxRuntimeExports.jsx(StepConnector,{}),Stepper=reactExports.forwardRef(function(u,T){const S=useDefaultProps({props:u,name:"MuiStepper"}),{activeStep:E=0,alternativeLabel:C=!1,children:_,className:P,component:R="div",connector:I=defaultConnector,nonLinear:L=!1,orientation:j="horizontal",...M}=S,D={...S,nonLinear:L,alternativeLabel:C,orientation:j,component:R},F=useUtilityClasses$6(D),N=reactExports.Children.toArray(_).filter(
198Boolean),G=N.map((H,O)=>reactExports.cloneElement(H,{index:O,last:O+1===N.length,...H.props})),B=reactExports.useMemo(()=>({activeStep:E,alternativeLabel:C,connector:I,nonLinear:L,orientation:j}),[E,C,I,L,j]);return jsxRuntimeExports.jsx(StepperContext.Provider,{value:B,children:jsxRuntimeExports.jsx(StepperRoot,{as:R,ownerState:D,className:clsx(F.root,P),ref:T,...M,children:G})})}),TableContext=reactExports.createContext();function getTableUtilityClass(o){return generateUtilityClass("MuiTable",o)}generateUtilityClasses("MuiTable",["root","stickyHeader"]);const useUtilityClasses$5=o=>{const{classes:u,stickyHeader:T}=o;return composeClasses({root:["root",T&&"stickyHeader"]},getTableUtilityClass,u)},TableRoot=styled("table",{name:"MuiTable",slot:"Root",overridesResolver:(o,u)=>{const{ownerState:T}=o;return[u.root,T.stickyHeader&&u.stickyHeader]}})(memoTheme(({theme:o})=>({display:"table",width:"100%",borderCollapse:"collapse",borderSpacing:0,"& caption":{...o.typography.body2,padding:o.spacing(2),color:(o.vars||o).palette.text.secondary,textAlign:"left",captionSide:"bottom"},variants:[{props:({ownerState:u})=>u.stickyHeader,style:{borderCollapse:"separate"}}]}))),defaultComponent$3="table",Table=reactExports.forwardRef(function(u,T){const S=useDefaultProps({props:u,name:"MuiTable"}),{className:E,component:C=defaultComponent$3,padding:_="normal",size:P="medium",stickyHeader:R=!1,...I}=S,L={...S,component:C,padding:_,size:P,stickyHeader:R},j=useUtilityClasses$5(L),M=reactExports.useMemo(()=>({padding:_,size:P,stickyHeader:R}),[_,P,R]);return jsxRuntimeExports.jsx(TableContext.Provider,{value:M,children:jsxRuntimeExports.jsx(TableRoot,{as:C,role:C===defaultComponent$3?null:"table",ref:T,className:clsx(j.root,E),ownerState:L,...I})})}),Tablelvl2Context=reactExports.createContext();function getTableBodyUtilityClass(o){return generateUtilityClass("MuiTableBody",o)}generateUtilityClasses("MuiTableBody",["root"]);const useUtilityClasses$4=o=>{const{classes:u}=o;return composeClasses({root:["root"]},getTableBodyUtilityClass,u)},TableBodyRoot=styled("tbody",{name:"MuiTableBody",slot:"Root"})({display:"table-row-group"}),tablelvl2$1={variant:"body"},defaultComponent$2="tbody",TableBody=reactExports.forwardRef(function(u,T){const S=useDefaultProps({props:u,name:"MuiTableBody"}),{className:E,component:C=defaultComponent$2,..._}=S,P={...S,component:C},R=useUtilityClasses$4(P);return jsxRuntimeExports.jsx(Tablelvl2Context.Provider,{value:tablelvl2$1,children:jsxRuntimeExports.jsx(TableBodyRoot,{className:clsx(R.root,E),as:C,ref:T,role:C===defaultComponent$2?null:"rowgroup",ownerState:P,..._})})});function getTableCellUtilityClass(o){return generateUtilityClass("MuiTableCell",o)}const tableCellClasses=generateUtilityClasses("MuiTableCell",["root","head","body","footer","sizeSmall","sizeMedium","paddingCheckbox","paddingNone","alignLeft","alignCenter","alignRight","alignJustify","stickyHeader"]),useUtilityClasses$3=o=>{const{classes:u,variant:T,align:S,padding:E,size:C,stickyHeader:_}=o,P={root:["root",T,_&&"stickyHeader",S!=="inherit"&&`align${capitalize(S)}`,E!=="normal"&&`padding${capitalize(E)}`,`size${capitalize(C)}`]};return composeClasses(P,getTableCellUtilityClass,u)},TableCellRoot=styled("td",{name:"MuiTableCell",slot:"Root",overridesResolver:(o,u)=>{const{ownerState:T}=o;return[u.root,u[T.variant],u[`size${capitalize(T.size)}`],T.padding!=="normal"&&u[`padding${capitalize(T.padding)}`],T.align!=="inherit"&&u[`align${capitalize(T.align)}`],T.stickyHeader&&u.stickyHeader]}})(memoTheme(({theme:o})=>({...o.typography.body2,display:"table-cell",verticalAlign:"inherit",borderBottom:o.vars?`1px solid ${o.vars.palette.TableCell.border}`:`1px solid
199    ${o.palette.mode==="light"?o.lighten(o.alpha(o.palette.divider,1),.88):o.darken(o.alpha(o.palette.divider,1),.68)}`,textAlign:"left",padding:16,variants:[{props:{variant:"head"},style:{color:(o.vars||o).palette.text.primary,lineHeight:o.typography.pxToRem(24),fontWeight:o.typography.fontWeightMedium}},{props:{variant:"body"},style:{color:(o.vars||o).palette.text.primary}},{props:{variant:"footer"},style:{color:(o.vars||o).palette.text.secondary,lineHeight:o.typography.pxToRem(21),fontSize:o.typography.pxToRem(12)}},{props:{size:"small"},style:{padding:"6px 16px",[`&.${tableCellClasses.paddingCheckbox}`]:{width:24,padding:"0 12px 0 16px","& > *":{padding:0}}}},{props:{padding:"checkbox"},style:{width:48,padding:"0 0 0 4px"}},{props:{padding:"none"},style:{padding:0}},{props:{align:"left"},style:{textAlign:"left"}},{props:{align:"center"},style:{textAlign:"center"}},{props:{align:"right"},style:{textAlign:"right",flexDirection:"row-reverse"}},{props:{align:"justify"},style:{textAlign:"justify"}},{props:({ownerState:u})=>u.stickyHeader,style:{position:"sticky",top:0,zIndex:2,backgroundColor:(o.vars||o).palette.background.default}}]}))),TableCell=reactExports.forwardRef(function(u,T){const S=useDefaultProps({props:u,name:"MuiTableCell"}),{align:E="inherit",className:C,component:_,padding:P,scope:R,size:I,sortDirection:L,variant:j,...M}=S,D=reactExports.useContext(TableContext),F=reactExports.useContext(Tablelvl2Context),N=F&&F.variant==="head";let G;_?G=_:G=N?"th":"td";let B=R;G==="td"?B=void 0:!B&&N&&(B="col");const H=j||F&&F.variant,O={...S,align:E,component:G,padding:P||(D&&D.padding?D.padding:"normal"),size:I||(D&&D.size?D.size:"medium"),sortDirection:L,stickyHeader:H==="head"&&D&&D.stickyHeader,variant:H},V=useUtilityClasses$3(O);let U=null;return L&&(U=L==="asc"?"ascending":"descending"),jsxRuntimeExports.jsx(TableCellRoot,{as:G,ref:T,className:clsx(V.root,C),"aria-sort":U,scope:B,ownerState:O,...M})});function getTableHeadUtilityClass(o){return generateUtilityClass("MuiTableHead",o)}generateUtilityClasses("MuiTableHead",["root"]);const useUtilityClasses$2=o=>{const{classes:u}=o;return composeClasses({root:["root"]},getTableHeadUtilityClass,u)},TableHeadRoot=styled("thead",{name:"MuiTableHead",slot:"Root"})({display:"table-header-group"}),tablelvl2={variant:"head"},defaultComponent$1="thead",TableHead=reactExports.forwardRef(function(u,T){const S=useDefaultProps({props:u,name:"MuiTableHead"}
199),{className:E,component:C=defaultComponent$1,..._}=S,P={...S,component:C},R=useUtilityClasses$2(P);return jsxRuntimeExports.jsx(Tablelvl2Context.Provider,{value:tablelvl2,children:jsxRuntimeExports.jsx(TableHeadRoot,{as:C,className:clsx(R.root,E),ref:T,role:C===defaultComponent$1?null:"rowgroup",ownerState:P,..._})})});function getTableRowUtilityClass(o){return generateUtilityClass("MuiTableRow",o)}const tableRowClasses=generateUtilityClasses("MuiTableRow",["root","selected","hover","head","footer"]),useUtilityClasses$1=o=>{const{classes:u,selected:T,hover:S,head:E,footer:C}=o;return composeClasses({root:["root",T&&"selected",S&&"hover",E&&"head",C&&"footer"]},getTableRowUtilityClass,u)},TableRowRoot=styled("tr",{name:"MuiTableRow",slot:"Root",overridesResolver:(o,u)=>{const{ownerState:T}=o;return[u.root,T.head&&u.head,T.footer&&u.footer]}})(memoTheme(({theme:o})=>({color:"inherit",display:"table-row",verticalAlign:"middle",outline:0,[`&.${tableRowClasses.hover}:hover`]:{backgroundColor:(o.vars||o).palette.action.hover},[`&.${tableRowClasses.selected}`]:{backgroundColor:o.alpha((o.vars||o).palette.primary.main,(o.vars||o).palette.action.selectedOpacity),"&:hover":{backgroundColor:o.alpha((o.vars||o).palette.primary.main,`${(o.vars||o).palette.action.selectedOpacity} + ${(o.vars||o).palette.action.hoverOpacity}`)}}}))),defaultComponent="tr",TableRow=reactExports.forwardRef(function(u,T){const S=useDefaultProps({props:u,name:"MuiTableRow"}),{className:E,component:C=defaultComponent,hover:_=!1,selected:P=!1,...R}=S,I=reactExports.useContext(Tablelvl2Context),L={...S,component:C,hover:_,selected:P,head:I&&I.variant==="head",footer:I&&I.variant==="footer"},j=useUtilityClasses$1(L);return jsxRuntimeExports.jsx(TableRowRoot,{as:C,ref:T,className:clsx(j.root,E),role:C===defaultComponent?null:"row",ownerState:L,...R})});function getTextFieldUtilityClass(o){return generateUtilityClass("MuiTextField",o)}generateUtilityClasses("MuiTextField",["root"]);const variantComponent={standard:Input,filled:FilledInput,outlined:OutlinedInput},useUtilityClasses=o=>{const{classes:u}=o;return composeClasses({root:["root"]},getTextFieldUtilityClass,u)},TextFieldRoot=styled(FormControl,{name:"MuiTextField",slot:"Root"})({}),TextField=reactExports.forwardRef(function(u,T){const S=useDefaultProps({props:u,name:"MuiTextField"}),{autoComplete:E,autoFocus:C=!1,children:_,className:P,color:R="primary",defaultValue:I,disabled:L=!1,error:j=!1,FormHelperTextProps:M,fullWidth:D=!1,helperText:F,id:N,InputLabelProps:G,inputProps:B,InputProps:H,inputRef:O,label:V,maxRows:U,minRows:W,multiline:K=!1,name:Y,onBlur:ee,onChange:oe,onFocus:se,placeholder:Q,required:ie=!1,rows:ae,select:re=!1,SelectProps:J,slots:te={},slotProps:Z={},type:X,value:de,variant:he="outlined",...ne}=S,ue={...S,autoFocus:C,color:R,disabled:L,error:j,fullWidth:D,multiline:K,required:ie,select:re,variant:he},ce=useUtilityClasses(ue),fe=useId(N),ve=F&&fe?`${fe}-helper-text`:void 0,Te=V&&fe?`${fe}-label`:void 0,Se=variantComponent[he],ke={slots:te,slotProps:{input:H,inputLabel:G,htmlInput:B,formHelperText:M,select:J,...Z}},we={},Le=ke.slotProps.inputLabel;he==="outlined"&&(Le&&typeof Le.shrink<"u"&&(we.notched=Le.shrink),we.label=V),re&&((!J||!J.native)&&(we.id=void 0),we["aria-describedby"]=void 0);const[pe,Me]=useSlot("root",{elementType:TextFieldRoot,shouldForwardComponentProp:!0,externalForwardedProps:{...ke,...ne},ownerState:ue,className:clsx(ce.root,P),ref:T,additionalProps:{disabled:L,error:j,fullWidth:D,required:ie,color:R,variant:he}}),[Pe,Ue]=useSlot("input",{elementType:Se,externalForwardedProps:ke,additionalProps:we,ownerState:ue}),[qe,Ie]=useSlot("inputLabel",{elementType:InputLabel,externalForwardedProps:ke,ownerState:ue}),[Xe,et]=useSlot("htmlInput",{elementType:"input",externalForwardedProps:ke,ownerState:ue}),[tt,Ye]=useSlot("formHelperText",{elementType:FormHelperText,externalForwardedProps:ke,ownerState:ue}),[ze,Ze]=useSlot("select",{elementType:Select,externalForwardedProps:ke,ownerState:ue}),He=jsxRuntimeExports.jsx(Pe,{"aria-describedby":ve,autoComplete:E,autoFocus:C,defaultValue:I,fullWidth:D,multiline:K,name:Y,rows:ae,maxRows:U,minRows:W,type:X,value:de,id:fe,inputRef:O,onBlur:ee,onChange:oe,onFocus:se,placeholder:Q,inputProps:et,slots:{input:te.htmlInput?Xe:void 0},...Ue});return jsxRuntimeExports.jsxs(pe,{...Me,children:[V!=null&&V!==""&&jsxRuntimeExports.jsx(qe,{htmlFor:fe,id:Te,...Ie,children:V}),re?jsxRuntimeExports.jsx(ze,{"aria-describedby":ve,id:fe,labelId:Te,value:de,input:He,...Ze,children:_}):He,F&&jsxRuntimeExports.jsx(tt,{id:ve,...Ye,children:F})]})}),useMediaQuery=unstable_createUseMediaQuery({themeId:THEME_ID}),ADMIN_UID="7SrJShp1ImNVM6ZCVrXkl01XwKA3";function AdminRoute({children:o}){const{currentUser:u,loading:T}=useAuth();return T?jsxRuntimeExports.jsx(Box,{sx:{display:"flex",justifyContent:"center",alignItems:"center",minHeight:"100vh"},children:jsxRuntimeExports.jsx(CircularProgress,{})}):u?u.uid!==ADMIN_UID?jsxRuntimeExports.jsx(Navigate,{to:"/dashboard",replace:!0}):jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:o}):jsxRuntimeExports.jsx(Navigate,{to:"/login",replace:!0})}const LayoutGroupContext=reactExports.createContext({});function useConstant(o){const u=reactExports.useRef(null);return u.current===null&&(u.current=o()),u.current}const PresenceContext=reactExports.createContext(null),MotionConfigContext=reactExports.createContext({transformPagePoint:o=>o,isStatic:!1,reducedMotion:"never"});class PopChildMeasure extends reactExports.Component{getSnapshotBeforeUpdate(u){const T=this.props.childRef.current;if(T&&u.isPresent&&!this.props.isPresent){const S=this.props.sizeRef.current;S.height=T.offsetHeight||0,S.width=T.offsetWidth||0,S.top=T.offsetTop,S.left=T.offsetLeft}return null}componentDidUpdate(){}render(){return this.props.children}}function PopChild({children:o,isPresent:u}){const T=reactExports.useId(),S=reactExports.useRef(null),E=reactExports.useRef({width:0,height:0,top:0,left:0}),{nonce:C}=reactExports.useContext(MotionConfigContext);return reactExports.useInsertionEffect(()=>{const{width:_,height:P,top:R,left:I}=E.current;if(u||!S.current||!_||!P)return;S.current.dataset.motionPopId=T;const L=document.createElement("style");return C&&(L.nonce=C),document.head.appendChild(L),L.sheet&&L.sheet.insertRule(`
200          [data-motion-pop-id="${T}"] {
201            position: absolute !important;
202            width: ${_}px !important;
203            height: ${P}px !important;
204            top: ${R}px !important;
205            left: ${I}px !important;
206          }
207        `),()=>{document.head.removeChild(L)}},[u]),jsxRuntimeExports.jsx(PopChildMeasure,{isPresent:u,childRef:S,sizeRef:E,children:reactExports.cloneElement(o,{ref:S})})}const PresenceChild=({children:o,initial:u,isPresent:T,onExitComplete:S,custom:E,presenceAffectsLayout:C,mode:_})=>{const P=useConstant(newChildrenMap),R=reactExports.useId(),I=reactExports.useCallback(j=>{P.set(j,!0);for(const M of P.values())if(!M)return;S&&S()},[P,S]),L=reactExports.useMemo(()=>({id:R,initial:u,isPresent:T,custom:E,onExitComplete:I,register:j=>(P.set(j,!1),()=>P.delete(j))}),C?[Math.random(),I]:[T,I]);return reactExports.useMemo(()=>{P.forEach((j,M)=>P.set(M,!1))},[T]),reactExports.useEffect(()=>{!T&&!P.size&&S&&S()},[T]),_==="popLayout"&&(o=jsxRuntimeExports.jsx(PopChild,{isPresent:T,children:o})),jsxRuntimeExports.jsx(PresenceContext.Provider,{value:L,children:o})};function newChildrenMap(){return new Map}function usePresence(o=!0){const u=reactExports.useContext(PresenceContext);if(u===null)return[!0,null];const{isPresent:T,onExitComplete:S,register:E}=u,C=reactExports.useId();reactExports.useEffect(()=>{o&&E(C)},[o]);const _=reactExports.useCallback(()=>o&&S&&S(C),[C,S,o]);return!T&&S?[!1,_]:[!0]}const getChildKey=o=>o.key||"";function onlyElements(o){const u=[];
vendor: 45,758 bytes, line 207
207return reactExports.Children.forEach(o,T=>{reactExports.isValidElement(T)&&u.push(T)}),u}const isBrowser=typeof window<"u",useIsomorphicLayoutEffect=isBrowser?reactExports.useLayoutEffect:reactExports.useEffect,AnimatePresence=({children:o,custom:u,initial:T=!0,onExitComplete:S,presenceAffectsLayout:E=!0,mode:C="sync",propagate:_=!1})=>{const[P,R]=usePresence(_),I=reactExports.useMemo(()=>onlyElements(o),[o]),L=_&&!P?[]:I.map(getChildKey),j=reactExports.useRef(!0),M=reactExports.useRef(I),D=useConstant(()=>new Map),[F,N]=reactExports.useState(I),[G,B]=reactExports.useState(I);useIsomorphicLayoutEffect(()=>{j.current=!1,M.current=I;for(let V=0;V<G.length;V++){const U=getChildKey(G[V]);L.includes(U)?D.delete(U):D.get(U)!==!0&&D.set(U,!1)}},[G,L.length,L.join("-")]);const H=[];if(I!==F){let V=[...I];for(let U=0;U<G.length;U++){const W=G[U],K=getChildKey(W);L.includes(K)||(V.splice(U,0,W),H.push(W))}C==="wait"&&H.length&&(V=H),B(onlyElements(V)),N(I);return}const{forceRender:O}=reactExports.useContext(LayoutGroupContext);return jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:G.map(V=>{const U=getChildKey(V),W=_&&!P?!1:I===G||L.includes(U),K=()=>{if(D.has(U))D.set(U,!0);else return;let Y=!0;D.forEach(ee=>{ee||(Y=!1)}),Y&&(O==null||O(),B(M.current),_&&(R==null||R()),S&&S())};return jsxRuntimeExports.jsx(PresenceChild,{isPresent:W,initial:!j.current||T?void 0:!1,custom:W?void 0:u,presenceAffectsLayout:E,mode:C,onExitComplete:W?void 0:K,children:V},U)})})},noop$1=o=>o;let invariant=noop$1;function memo(o){let u;return()=>(u===void 0&&(u=o()),u)}const progress=(o,u,T)=>{const S=u-o;return S===0?1:(T-o)/S},secondsToMilliseconds=o=>o*1e3,millisecondsToSeconds=o=>o/1e3,MotionGlobalConfig={useManualTiming:!1};function createRenderStep(o){let u=new Set,T=new Set,S=!1,E=!1;const C=new WeakSet;let _={delta:0,timestamp:0,isProcessing:!1};function P(I){C.has(I)&&(R.schedule(I),o()),I(_)}const R={schedule:(I,L=!1,j=!1)=>{const D=j&&S?u:T;return L&&C.add(I),D.has(I)||D.add(I),I},cancel:I=>{T.delete(I),C.delete(I)},process:I=>{if(_=I,S){E=!0;return}S=!0,[u,T]=[T,u],u.forEach(P),u.clear(),S=!1,E&&(E=!1,R.process(I))}};return R}const stepsOrder=["read","resolveKeyframes","update","preRender","render","postRender"],maxElapsed=40;function createRenderBatcher(o,u){let T=!1,S=!0;const E={delta:0,timestamp:0,isProcessing:!1},C=()=>T=!0,_=stepsOrder.reduce((B,H)=>(B[H]=createRenderStep(C),B),{}),{read:P,resolveKeyframes:R,update:I,preRender:L,render:j,postRender:M}=_,D=()=>{const B=performance.now();T=!1,E.delta=S?1e3/60:Math.max(Math.min(B-E.timestamp,maxElapsed),1),E.timestamp=B,E.isProcessing=!0,P.process(E),R.process(E),I.process(E),L.process(E),j.process(E),M.process(E),E.isProcessing=!1,T&&u&&(S=!1,o(D))},F=()=>{T=!0,S=!0,E.isProcessing||o(D)};return{schedule:stepsOrder.reduce((B,H)=>{const O=_[H];return B[H]=(V,U=!1,W=!1)=>(T||F(),O.schedule(V,U,W)),B},{}),cancel:B=>{for(let H=0;H<stepsOrder.length;H++)_[stepsOrder[H]].cancel(B)},state:E,steps:_}}const{schedule:frame,cancel:cancelFrame,state:frameData,steps:frameSteps}=createRenderBatcher(typeof requestAnimationFrame<"u"?requestAnimationFrame:noop$1,!0),LazyContext=reactExports.createContext({strict:!1}),featureProps={animation:["animate","variants","whileHover","whileTap","exit","whileInView","whileFocus","whileDrag"],exit:["exit"],drag:["drag","dragControls"],focus:["whileFocus"],hover:["whileHover","onHoverStart","onHoverEnd"],tap:["whileTap","onTap","onTapStart","onTapCancel"],pan:["onPan","onPanStart","onPanSessionStart","onPanEnd"],inView:["whileInView","onViewportEnter","onViewportLeave"],layout:["layout","layoutId"]},featureDefinitions={};for(const o in featureProps)featureDefinitions[o]={isEnabled:u=>featureProps[o].some(T=>!!u[T])};function loadFeatures(o){for(const u in o)featureDefinitions[u]={...featureDefinitions[u],...o[u]}}const validMotionProps=new Set(["animate","exit","variants","initial","style","values","variants","transition","transformTemplate","custom","inherit","onBeforeLayoutMeasure","onAnimationStart","onAnimationComplete","onUpdate","onDragStart","onDrag","onDragEnd","onMeasureDragConstraints","onDirectionLock","onDragTransitionEnd","_dragX","_dragY","onHoverStart","onHoverEnd","onViewportEnter","onViewportLeave","globalTapTarget","ignoreStrict","viewport"]);function isValidMotionProp(o){return o.startsWith("while")||o.startsWith("drag")&&o!=="draggable"||o.startsWith("layout")||o.startsWith("onTap")||o.startsWith("onPan")||o.startsWith("onLayout")||validMotionProps.has(o)}let shouldForward=o=>!isValidMotionProp(o);function loadExternalIsValidProp(o){o&&(shouldForward=u=>u.startsWith("on")?!isValidMotionProp(u):o(u))}try{loadExternalIsValidProp(require("@emotion/is-prop-valid").default)}catch{}function filterProps(o,u,T){const S={};for(const E in o)E==="values"&&typeof o.values=="object"||(shouldForward(E)||T===!0&&isValidMotionProp(E)||!u&&!isValidMotionProp(E)||o.draggable&&E.startsWith("onDrag"))&&(S[E]=o[E]);return S}function createDOMMotionComponentProxy(o){if(typeof Proxy>"u")return o;const u=new Map,T=(...S)=>o(...S);return new Proxy(T,{get:(S,E)=>E==="create"?o:(u.has(E)||u.set(E,o(E)),u.get(E))})}const MotionContext=reactExports.createContext({});function isVariantLabel(o){return typeof o=="string"||Array.isArray(o)}function isAnimationControls(o){return o!==null&&typeof o=="object"&&typeof o.start=="function"}const variantPriorityOrder=["animate","whileInView","whileFocus","whileHover","whileTap","whileDrag","exit"],variantProps=["initial",...variantPriorityOrder];function isControllingVariants(o){return isAnimationControls(o.animate)||variantProps.some(u=>isVariantLabel(o[u]))}function isVariantNode(o){return!!(isControllingVariants(o)||o.variants)}function getCurrentTreeVariants(o,u){if(isControllingVariants(o)){const{initial:T,animate:S}=o;return{initial:T===!1||isVariantLabel(T)?T:void 0,animate:isVariantLabel(S)?S:void 0}}return o.inherit!==!1?u:{}}function useCreateMotionContext(o){const{initial:u,animate:T}=getCurrentTreeVariants(o,reactExports.useContext(MotionContext));return reactExports.useMemo(()=>({initial:u,animate:T}),[variantLabelsAsDependency(u),variantLabelsAsDependency(T)])}function variantLabelsAsDependency(o){return Array.isArray(o)?o.join(" "):o}const motionComponentSymbol=Symbol.for("motionComponentSymbol");function isRefObject(o){return o&&typeof o=="object"&&Object.prototype.hasOwnProperty.call(o,"current")}function useMotionRef(o,u,T){return reactExports.useCallback(S=>{S&&o.onMount&&o.onMount(S),u&&(S?u.mount(S):u.unmount()),T&&(typeof T=="function"?T(S):isRefObject(T)&&(T.current=S))},[u])}const camelToDash=o=>o.replace(/([a-z])([A-Z])/gu,"$1-$2").toLowerCase(),optimizedAppearDataId="framerAppearId",optimizedAppearDataAttribute="data-"+camelToDash(optimizedAppearDataId),{schedule:microtask}=createRenderBatcher(queueMicrotask,!1),SwitchLayoutGroupContext=reactExports.createContext({});function useVisualElement(o,u,T,S,E){var C,_;const{visualElement:P}=reactExports.useContext(MotionContext),R=reactExports.useContext(LazyContext),I=reactExports.useContext(PresenceContext),L=reactExports.useContext(MotionConfigContext).reducedMotion,j=reactExports.useRef(null);S=S||R.renderer,!j.current&&S&&(j.current=S(o,{visualState:u,parent:P,props:T,presenceContext:I,blockInitialAnimation:I?I.initial===!1:!1,reducedMotionConfig:L}));const M=j.current,D=reactExports.useContext(SwitchLayoutGroupContext);M&&!M.projection&&E&&(M.type==="html"||M.type==="svg")&&createProjectionNode$1(j.current,T,E,D);const F=reactExports.useRef(!1);reactExports.useInsertionEffect(()=>{M&&F.current&&M.update(T,I)});const N=T[optimizedAppearDataAttribute],G=reactExports.useRef(!!N&&!(!((C=window.MotionHandoffIsComplete)===null||C===void 0)&&C.call(window,N))&&((_=window.MotionHasOptimisedAnimation)===null||_===void 0?void 0:_.call(window,N)));return useIsomorphicLayoutEffect(()=>{M&&(F.current=!0,window.MotionIsMounted=!0,M.updateFeatures(),microtask.render(M.render),G.current&&M.animationState&&M.animationState.animateChanges())}),reactExports.useEffect(()=>{M&&(!G.current&&M.animationState&&M.animationState.animateChanges(),G.current&&(queueMicrotask(()=>{var B;(B=window.MotionHandoffMarkAsComplete)===null||B===void 0||B.call(window,N)}),G.current=!1))}),M}function createProjectionNode$1(o,u,T,S){const{layoutId:E,layout:C,drag:_,dragConstraints:P,layoutScroll:R,layoutRoot:I}=u;o.projection=new T(o.latestValues,u["data-framer-portal-id"]?void 0:getClosestProjectingNode(o.parent)),o.projection.setOptions({layoutId:E,layout:C,alwaysMeasureLayout:!!_||P&&isRefObject(P),visualElement:o,animationType:typeof C=="string"?C:"both",initialPromotionConfig:S,layoutScroll:R,layoutRoot:I})}function getClosestProjectingNode(o){if(o)return o.options.allowProjection!==!1?o.projection:getClosestProjectingNode(o.parent)}function createRendererMotionComponent({preloadedFeatures:o,createVisualElement:u,useRender:T,useVisualState:S,Component:E}){var C,_;o&&loadFeatures(o);function P(I,L){let j;const M={...reactExports.useContext(MotionConfigContext),...I,layoutId:useLayoutId(I)},{isStatic:D}=M,F=useCreateMotionContext(I),N=S(I,D);if(!D&&isBrowser){useStrictMode();const G=getProjectionFunctionality(M);j=G.MeasureLayout,F.visualElement=useVisualElement(E,N,M,u,G.ProjectionNode)}return jsxRuntimeExports.jsxs(MotionContext.Provider,{value:F,children:[j&&F.visualElement?jsxRuntimeExports.jsx(j,{visualElement:F.visualElement,...M}):null,T(E,I,useMotionRef(N,F.visualElement,L),N,D,F.visualElement)]})}P.displayName=`motion.${typeof E=="string"?E:`create(${(_=(C=E.displayName)!==null&&C!==void 0?C:E.name)!==null&&_!==void 0?_:""})`}`;const R=reactExports.forwardRef(P);return R[motionComponentSymbol]=E,R}function useLayoutId({layoutId:o}){const u=reactExports.useContext(LayoutGroupContext).id;return u&&o!==void 0?u+"-"+o:o}function useStrictMode(o,u){reactExports.useContext(LazyContext).strict}function getProjectionFunctionality(o){const{drag:u,layout:T}=featureDefinitions;if(!u&&!T)return{};const S={...u,...T};return{MeasureLayout:u!=null&&u.isEnabled(o)||T!=null&&T.isEnabled(o)?S.MeasureLayout:void 0,ProjectionNode:S.ProjectionNode}}const lowercaseSVGElements=["animate","circle","defs","desc","ellipse","g","image","line","filter","marker","mask","metadata","path","pattern","polygon","polyline","rect","stop","switch","symbol","svg","text","tspan","use","view"];function isSVGComponent(o){return typeof o!="string"||o.includes("-")?!1:!!(lowercaseSVGElements.indexOf(o)>-1||/[A-Z]/u.test(o))}function getValueState(o){const u=[{},{}];return o==null||o.values.forEach((T,S)=>{u[0][S]=T.get(),u[1][S]=T.getVelocity()}),u}function resolveVariantFromProps(o,u,T,S){if(typeof u=="function"){const[E,C]=getValueState(S);u=u(T!==void 0?T:o.custom,E,C)}if(typeof u=="string"&&(u=o.variants&&o.variants[u]),typeof u=="function"){const[E,C]=getValueState(S);u=u(T!==void 0?T:o.custom,E,C)}return u}const isKeyframesTarget=o=>Array.isArray(o),isCustomValue=o=>!!(o&&typeof o=="object"&&o.mix&&o.toValue),resolveFinalValueInKeyframes=o=>isKeyframesTarget(o)?o[o.length-1]||0:o,isMotionValue=o=>!!(o&&o.getVelocity);function resolveMotionValue(o){const u=isMotionValue(o)?o.get():o;return isCustomValue(u)?u.toValue():u}function makeState({scrapeMotionValuesFromProps:o,createRenderState:u,onUpdate:T},S,E,C){const _={latestValues:makeLatestValues(S,E,C,o),renderState:u()};return T&&(_.onMount=P=>T({props:S,current:P,..._}),_.onUpdate=P=>T(P)),_}const makeUseVisualState=o=>(u,T)=>{const S=reactExports.useContext(MotionContext),E=reactExports.useContext(PresenceContext),C=()=>makeState(o,u,S,E);return T?C():useConstant(C)};function makeLatestValues(o,u,T,S){const E={},C=S(o,{});for(const M in C)E[M]=resolveMotionValue(C[M]);let{initial:_,animate:P}=o;const R=isControllingVariants(o),I=isVariantNode(o);u&&I&&!R&&o.inherit!==!1&&(_===void 0&&(_=u.initial),P===void 0&&(P=u.animate));let L=T?T.initial===!1:!1;L=L||_===!1;const j=L?P:_;if(j&&typeof j!="boolean"&&!isAnimationControls(j)){const M=Array.isArray(j)?j:[j];for(let D=0;D<M.length;D++){const F=resolveVariantFromProps(o,M[D]);if(F){const{transitionEnd:N,transition:G,...B}=F;for(const H in B){let O=B[H];if(Array.isArray(O)){const V=L?O.length-1:0;O=O[V]}O!==null&&(E[H]=O)}for(const H in N)E[H]=N[H]}}}return E}const transformPropOrder=["transformPerspective","x","y","z","translateX","translateY","translateZ","scale","scaleX","scaleY","rotate","rotateX","rotateY","rotateZ","skew","skewX","skewY"],transformProps=new Set(transformPropOrder),checkStringStartsWith=o=>u=>typeof u=="string"&&u.startsWith(o),isCSSVariableName=checkStringStartsWith("--"),startsAsVariableToken=checkStringStartsWith("var(--"),isCSSVariableToken=o=>startsAsVariableToken(o)?singleCssVariableRegex.test(o.split("/*")[0].trim()):!1,singleCssVariableRegex=/var\(--(?:[\w-]+\s*|[\w-]+\s*,(?:\s*[^)(\s]|\s*\((?:[^)(]|\([^)(]*\))*\))+\s*)\)$/iu,getValueAsType=(o,u)=>u&&typeof o=="number"?u.transform(o):o,clamp=(o,u,T)=>T>u?u:T<o?o:T,number={test:o=>typeof o=="number",parse:parseFloat,transform:o=>o},alpha={...number,transform:o=>clamp(0,1,o)},scale={...number,default:1},createUnitType=o=>({test:u=>typeof u=="string"&&u.endsWith(o)&&u.split(" ").length===1,parse:parseFloat,transform:u=>`${u}${o}`}),degrees=createUnitType("deg"),percent=createUnitType("%"),px=createUnitType("px"),vh=createUnitType("vh"),vw=createUnitType("vw"),progressPercentage={...percent,parse:o=>percent.parse(o)/100,transform:o=>percent.transform(o*100)},browserNumberValueTypes={borderWidth:px,borderTopWidth:px,borderRightWidth:px,borderBottomWidth:px,borderLeftWidth:px,borderRadius:px,radius:px,borderTopLeftRadius:px,borderTopRightRadius:px,borderBottomRightRadius:px,borderBottomLeftRadius:px,width:px,maxWidth:px,height:px,maxHeight:px,top:px,right:px,bottom:px,left:px,padding:px,paddingTop:px,paddingRight:px,paddingBottom:px,paddingLeft:px,margin:px,marginTop:px,marginRight:px,marginBottom:px,marginLeft:px,backgroundPositionX:px,backgroundPositionY:px},transformValueTypes={rotate:degrees,rotateX:degrees,rotateY:degrees,rotateZ:degrees,scale,scaleX:scale,scaleY:scale,scaleZ:scale,skew:degrees,skewX:degrees,skewY:degrees,distance:px,translateX:px,translateY:px,translateZ:px,x:px,y:px,z:px,perspective:px,transformPerspective:px,opacity:alpha,originX:progressPercentage,originY:progressPercentage,originZ:px},int={...number,transform:Math.round},numberValueTypes={...browserNumberValueTypes,...transformValueTypes,zIndex:int,size:px,fillOpacity:alpha,strokeOpacity:alpha,numOctaves:int},translateAlias={x:"translateX",y:"translateY",z:"translateZ",transformPerspective:"perspective"},numTransforms=transformPropOrder.length;function buildTransform(o,u,T){let S="",E=!0;for(let C=0;C<numTransforms;C++){const _=transformPropOrder[C],P=o[_];if(P===void 0)continue;let R=!0;if(typeof P=="number"?R=P===(_.startsWith("scale")?1:0):R=parseFloat(P)===0,!R||T){const I=getValueAsType(P,numberValueTypes[_]);if(!R){E=!1;const L=translateAlias[_]||_;S+=`${L}(${I}) `}T&&(u[_]=I)}}return S=S.trim(),T?S=T(u,E?"":S):E&&(S="none"),S}function buildHTMLStyles(o,u,T){const{style:S,vars:E,transformOrigin:C}=o;let _=!1,P=!1;for(const R in u){const I=u[R];if(transformProps.has(R)){_=!0;continue}else if(isCSSVariableName(R)){E[R]=I;continue}else{const L=getValueAsType(I,numberValueTypes[R]);R.startsWith("origin")?(P=!0,C[R]=L):S[R]=L}}if(u.transform||(_||T?S.transform=buildTransform(u,o.transform,T):S.transform&&(S.transform="none")),P){const{originX:R="50%",originY:I="50%",originZ:L=0}=C;S.transformOrigin=`${R} ${I} ${L}`}}const dashKeys={offset:"stroke-dashoffset",array:"stroke-dasharray"},camelKeys={offset:"strokeDashoffset",array:"strokeDasharray"};function buildSVGPath(o,u,T=1,S=0,E=!0){o.pathLength=1;const C=E?dashKeys:camelKeys;o[C.offset]=px.transform(-S);const _=px.transform(u),P=px.transform(T);o[C.array]=`${_} ${P}`}function calcOrigin$1(o,u,T){return typeof o=="string"?o:px.transform(u+T*o)}function calcSVGTransformOrigin(o,u,T){const S=calcOrigin$1(u,o.x,o.width),E=calcOrigin$1(T,o.y,o.height);return`${S} ${E}`}function buildSVGAttrs(o,{attrX:u,attrY:T,attrScale:S,originX:E,originY:C,pathLength:_,pathSpacing:P=1,pathOffset:R=0,...I},L,j){if(buildHTMLStyles(o,I,j),L){o.style.viewBox&&(o.attrs.viewBox=o.style.viewBox);return}o.attrs=o.style,o.style={};const{attrs:M,style:D,dimensions:F}=o;M.transform&&(F&&(D.transform=M.transform),delete M.transform),F&&(E!==void 0||C!==void 0||D.transform)&&(D.transformOrigin=calcSVGTransformOrigin(F,E!==void 0?E:.5,C!==void 0?C:.5)),u!==void 0&&(M.x=u),T!==void 0&&(M.y=T),S!==void 0&&(M.scale=S),_!==void 0&&buildSVGPath(M,_,P,R,!1)}const createHtmlRenderState=()=>({style:{},transform:{},transformOrigin:{},vars:{}}),createSvgRenderState=()=>({...createHtmlRenderState(),attrs:{}}),isSVGTag=o=>typeof o=="string"&&o.toLowerCase()==="svg";function renderHTML(o,{style:u,vars:T},S,E){Object.assign(o.style,u,E&&E.getProjectionStyles(S));for(const C in T)o.style.setProperty(C,T[C])}const camelCaseAttributes=new Set(["baseFrequency","diffuseConstant","kernelMatrix","kernelUnitLength","keySplines","keyTimes","limitingConeAngle","markerHeight","markerWidth","numOctaves","targetX","targetY","surfaceScale","specularConstant","specularExponent","stdDeviation","tableValues","viewBox","gradientTransform","pathLength","startOffset","textLength","lengthAdjust"]);function renderSVG(o,u,T,S){renderHTML(o,u,void 0,S);for(const E in u.attrs)o.setAttribute(camelCaseAttributes.has(E)?E:camelToDash(E),u.attrs[E])}const scaleCorrectors={};function addScaleCorrector(o){Object.assign(scaleCorrectors,o)}function isForcedMotionValue(o,{layout:u,layoutId:T}){return transformProps.has(o)||o.startsWith("origin")||(u||T!==void 0)&&(!!scaleCorrectors[o]||o==="opacity")}function scrapeMotionValuesFromProps$1(o,u,T){var S;const{style:E}=o,C={};for(const _ in E)(isMotionValue(E[_])||u.style&&isMotionValue(u.style[_])||isForcedMotionValue(_,o)||((S=T==null?void 0:T.getValue(_))===null||S===void 0?void 0:S.liveStyle)!==void 0)&&(C[_]=E[_]);return C}function scrapeMotionValuesFromProps(o,u,T){const S=scrapeMotionValuesFromProps$1(o,u,T);for(const E in o)if(isMotionValue(o[E])||isMotionValue(u[E])){const C=transformPropOrder.indexOf(E)!==-1?"attr"+E.charAt(0).toUpperCase()+E.substring(1):E;S[C]=o[E]}return S}function updateSVGDimensions(o,u){try{u.dimensions=typeof o.getBBox=="function"?o.getBBox():o.getBoundingClientRect()}catch{u.dimensions={x:0,y:0,width:0,height:0}}}const layoutProps=["x","y","width","height","cx","cy","r"],svgMotionConfig={useVisualState:makeUseVisualState({scrapeMotionValuesFromProps,createRenderState:createSvgRenderState,onUpdate:({props:o,prevProps:u,current:T,renderState:S,latestValues:E})=>{if(!T)return;let C=!!o.drag;if(!C){for(const P in E)if(transformProps.has(P)){C=!0;break}}if(!C)return;let _=!u;if(u)for(let P=0;P<layoutProps.length;P++){const R=layoutProps[P];o[R]!==u[R]&&(_=!0)}_&&frame.read(()=>{updateSVGDimensions(T,S),frame.render(()=>{buildSVGAttrs(S,E,isSVGTag(T.tagName),o.transformTemplate),renderSVG(T,S)})})}})},htmlMotionConfig={useVisualState:makeUseVisualState({scrapeMotionValuesFromProps:scrapeMotionValuesFromProps$1,createRenderState:createHtmlRenderState})};function copyRawValuesOnly(o,u,T){for(const S in u)!isMotionValue(u[S])&&!isForcedMotionValue(S,T)&&(o[S]=u[S])}function useInitialMotionValues({transformTemplate:o},u){return reactExports.useMemo(()=>{const T=createHtmlRenderState();return buildHTMLStyles(T,u,o),Object.assign({},T.vars,T.style)},[u])}function useStyle(o,u){const T=o.style||{},S={};return copyRawValuesOnly(S,T,o),Object.assign(S,useInitialMotionValues(o,u)),S}function useHTMLProps(o,u){const T={},S=useStyle(o,u);return o.drag&&o.dragListener!==!1&&(T.draggable=!1,S.userSelect=S.WebkitUserSelect=S.WebkitTouchCallout="none",S.touchAction=o.drag===!0?"none":`pan-${o.drag==="x"?"y":"x"}`),o.tabIndex===void 0&&(o.onTap||o.onTapStart||o.whileTap)&&(T.tabIndex=0),T.style=S,T}function useSVGProps(o,u,T,S){const E=reactExports.useMemo(()=>{const C=createSvgRenderState();return buildSVGAttrs(C,u,isSVGTag(S),o.transformTemplate),{...C.attrs,style:{...C.style}}},[u]);if(o.style){const C={};copyRawValuesOnly(C,o.style,o),E.style={...C,...E.style}}return E}function createUseRender(o=!1){return(T,S,E,{latestValues:C},_)=>{const R=(isSVGComponent(T)?useSVGProps:useHTMLProps)(S,C,_,T),I=filterProps(S,typeof T=="string",o),L=T!==reactExports.Fragment?{...I,...R,ref:E}:{},{children:j}=S,M=reactExports.useMemo(()=>isMotionValue(j)?j.get():j,[j]);return reactExports.createElement(T,{...L,children:M})}}function createMotionComponentFactory(o,u){return function(S,{forwardMotionProps:E}={forwardMotionProps:!1}){const _={...isSVGComponent(S)?svgMotionConfig:htmlMotionConfig,preloadedFeatures:o,useRender:createUseRender(E),createVisualElement:u,Component:S};return createRendererMotionComponent(_)}}function shallowCompare(o,u){if(!Array.isArray(u))return!1;const T=u.length;if(T!==o.length)return!1;for(let S=0;S<T;S++)if(u[S]!==o[S])return!1;return!0}function resolveVariant(o,u,T){const S=o.getProps();return resolveVariantFromProps(S,u,T!==void 0?T:S.custom,o)}const supportsScrollTimeline=memo(()=>window.ScrollTimeline!==void 0);class BaseGroupPlaybackControls{constructor(u){this.stop=()=>this.runAll("stop"),this.animations=u.filter(Boolean)}get finished(){return Promise.all(this.animations.map(u=>"finished"in u?u.finished:u))}getAll(u){return this.animations[0][u]}setAll(u,T){for(let S=0;S<this.animations.length;S++)this.animations[S][u]=T}attachTimeline(u,T){const S=this.animations.map(E=>{if(supportsScrollTimeline()&&E.attachTimeline)return E.attachTimeline(u);if(typeof T=="function")return T(E)});return()=>{S.forEach((E,C)=>{E&&E(),this.animations[C].stop()})}}get time(){return this.getAll("time")}set time(u){this.setAll("time",u)}get speed(){return this.getAll("speed")}set speed(u){this.setAll("speed",u)}get startTime(){return this.getAll("startTime")}get duration(){let u=0;for(let T=0;T<this.animations.length;T++)u=Math.max(u,this.animations[T].duration);return u}runAll(u){this.animations.forEach(T=>T[u]())}flatten(){this.runAll("flatten")}play(){this.runAll("play")}pause(){this.runAll("pause")}cancel(){this.runAll("cancel")}complete(){this.runAll("complete")}}class GroupPlaybackControls extends BaseGroupPlaybackControls{then(u,T){return Promise.all(this.animations).then(u).catch(T)}}function getValueTransition(o,u){return o?o[u]||o.default||o:void 0}const maxGeneratorDuration=2e4;function calcGeneratorDuration(o){let u=0;const T=50;let S=o.next(u);for(;!S.done&&u<maxGeneratorDuration;)u+=T,S=o.next(u);return u>=maxGeneratorDuration?1/0:u}function isGenerator(o){return typeof o=="function"}function attachTimeline(o,u){o.timeline=u,o.onfinish=null}const isBezierDefinition=o=>Array.isArray(o)&&typeof o[0]=="number",supportsFlags={linearEasing:void 0};function memoSupports(o,u){const T=memo(o);return()=>{var S;return(S=supportsFlags[u])!==null&&S!==void 0?S:T()}}const supportsLinearEasing=memoSupports(()=>{try{document.createElement("div").animate({opacity:0},{easing:"linear(0, 1)"})}catch{return!1}return!0},"linearEasing"),generateLinearEasing=(o,u,T=10)=>{let S="";const E=Math.max(Math.round(u/T),2);for(let C=0;C<E;C++)S+=o(progress(0,E-1,C))+", ";return`linear(${S.substring(0,S.length-2)})`};function isWaapiSupportedEasing(o){return!!(typeof o=="function"&&supportsLinearEasing()||!o||typeof o=="string"&&(o in supportedWaapiEasing||supportsLinearEasing())||isBezierDefinition(o)||Array.isArray(o)&&o.every(isWaapiSupportedEasing))}const cubicBezierAsString=([o,u,T,S])=>`cubic-bezier(${o}, ${u}, ${T}, ${S})`,supportedWaapiEasing={linear:"linear",ease:"ease",easeIn:"ease-in",easeOut:"ease-out",easeInOut:"ease-in-out",circIn:cubicBezierAsString([0,.65,.55,1]),circOut:cubicBezierAsString([.55,0,1,.45]),backIn:cubicBezierAsString([.31,.01,.66,-.59]),backOut:cubicBezierAsString([.33,1.53,.69,.99])};function mapEasingToNativeEasing(o,u){if(o)return typeof o=="function"&&supportsLinearEasing()?generateLinearEasing(o,u):isBezierDefinition(o)?cubicBezierAsString(o):Array.isArray(o)?o.map(T=>mapEasingToNativeEasing(T,u)||supportedWaapiEasing.easeOut):supportedWaapiEasing[o]}const isDragging={x:!1,y:!1};function isDragActive(){return isDragging.x||isDragging.y}function resolveElements(o,u,T){var S;if(o instanceof Element)return[o];if(typeof o=="string"){let E=document;const C=(S=void 0)!==null&&S!==void 0?S:E.querySelectorAll(o);return C?Array.from(C):[]}return Array.from(o)}function setupGesture(o,u){const T=resolveElements(o),S=new AbortController,E={passive:!0,...u,signal:S.signal};return[T,E,()=>S.abort()]}function filterEvents$1(o){return u=>{u.pointerType==="touch"||isDragActive()||o(u)}}function hover(o,u,T={}){const[S,E,C]=setupGesture(o,T),_=filterEvents$1(P=>{const{target:R}=P,I=u(P);if(typeof I!="function"||!R)return;const L=filterEvents$1(j=>{I(j),R.removeEventListener("pointerleave",L)});R.addEventListener("pointerleave",L,E)});return S.forEach(P=>{P.addEventListener("pointerenter",_,E)}),C}const isNodeOrChild=(o,u)=>u?o===u?!0:isNodeOrChild(o,u.parentElement):!1,isPrimaryPointer=o=>o.pointerType==="mouse"?typeof o.button!="number"||o.button<=0:o.isPrimary!==!1,focusableElements=new Set(["BUTTON","INPUT","SELECT","TEXTAREA","A"]);function isElementKeyboardAccessible(o){return focusableElements.has(o.tagName)||o.tabIndex!==-1}const isPressing=new WeakSet;function filterEvents(o){return u=>{u.key==="Enter"&&o(u)}}function firePointerEvent(o,u){o.dispatchEvent(new PointerEvent("pointer"+u,{isPrimary:!0,bubbles:!0}))}const enableKeyboardPress=(o,u)=>{const T=o.currentTarget;if(!T)return;const S=filterEvents(()=>{if(isPressing.has(T))return;firePointerEvent(T,"down");const E=filterEvents(()=>{firePointerEvent(T,"up")}),C=()=>firePointerEvent(T,"cancel");T.addEventListener("keyup",E,u),T.addEventListener("blur",C,u)});T.addEventListener("keydown",S,u),T.addEventListener("blur",()=>T.removeEventListener("keydown",S),u)};function isValidPressEvent(o){return isPrimaryPointer(o)&&!isDragActive()}function press(o,u,T={}){const[S,E,C]=setupGesture(o,T),_=P=>{const R=P.currentTarget;if(!isValidPressEvent(P)||isPressing.has(R))return;isPressing.add(R);const I=u(P),L=(D,F)=>{window.removeEventListener("pointerup",j),window.removeEventListener("pointercancel",M),!(!isValidPressEvent(D)||!isPressing.has(R))&&(isPressing.delete(R),typeof I=="function"&&I(D,{success:F}))},j=D=>{L(D,T.useGlobalTarget||isNodeOrChild(R,D.target))},M=D=>{L(D,!1)};window.addEventListener("pointerup",j,E),window.addEventListener("pointercancel",M,E)};return S.forEach(P=>{!isElementKeyboardAccessible(P)&&P.getAttribute("tabindex")===null&&(P.tabIndex=0),(T.useGlobalTarget?window:P).addEventListener("pointerdown",_,E),P.addEventListener("focus",I=>enableKeyboardPress(I,E),E)}),C}function setDragLock(o){return o==="x"||o==="y"?isDragging[o]?null:(isDragging[o]=!0,()=>{isDragging[o]=!1}):isDragging.x||isDragging.y?null:(isDragging.x=isDragging.y=!0,()=>{isDragging.x=isDragging.y=!1})}const positionalKeys=new Set(["width","height","top","left","right","bottom",...transformPropOrder]);let now;function clearTime(){now=void 0}const time={now:()=>(now===void 0&&time.set(frameData.isProcessing||MotionGlobalConfig.useManualTiming?frameData.timestamp:performance.now()),now),set:o=>{now=o,queueMicrotask(clearTime)}};function addUniqueItem(o,u){o.indexOf(u)===-1&&o.push(u)}function removeItem(o,u){const T=o.indexOf(u);T>-1&&o.splice(T,1)}function moveItem([...o],u,T){const S=u<0?o.length+u:u;if(S>=0&&S<o.length){const E=T<0?o.length+T:T,[C]=o.splice(u,1);o.splice(E,0,C)}return o}class SubscriptionManager{constructor(){this.subscriptions=[]}add(u){return addUniqueItem(this.subscriptions,u),()=>removeItem(this.subscriptions,u)}notify(u,T,S){const E=this.subscriptions.length;if(E)if(E===1)this.subscriptions[0](u,T,S);else for(let C=0;C<E;C++){const _=this.subscriptions[C];_&&_(u,T,S)}}getSize(){return this.subscriptions.length}clear(){this.subscriptions.length=0}}function velocityPerSecond(o,u){return u?o*(1e3/u):0}const MAX_VELOCITY_DELTA=30,isFloat=o=>!isNaN(parseFloat(o)),collectMotionValues={current:void 0};class MotionValue{constructor(u,T={}){this.version="11.18.2",this.canTrackVelocity=null,this.events={},this.updateAndNotify=(S,E=!0)=>{const C=time.now();this.updatedAt!==C&&this.setPrevFrameValue(),this.prev=this.current,this.setCurrent(S),this.current!==this.prev&&this.events.change&&this.events.change.notify(this.current),E&&this.events.renderRequest&&this.events.renderRequest.notify(this.current)},this.hasAnimated=!1,this.setCurrent(u),this.owner=T.owner}setCurrent(u){this.current=u,this.updatedAt=time.now(),this.canTrackVelocity===null&&u!==void 0&&(this.canTrackVelocity=isFloat(this.current))}setPrevFrameValue(u=this.current){this.prevFrameValue=u,this.prevUpdatedAt=this.updatedAt}onChange(u){return this.on("change",u)}on(u,T){this.events[u]||(this.events[u]=new SubscriptionManager);const S=this.events[u].add(T);return u==="change"?()=>{S(),frame.read(()=>{this.events.change.getSize()||this.stop()})}:S}clearListeners(){for(const u in this.events)this.events[u].clear()}attach(u,T){this.passiveEffect=u,this.stopPassiveEffect=T}set(u,T=!0){!T||!this.passiveEffect?this.updateAndNotify(u,T):this.passiveEffect(u,this.updateAndNotify)}setWithVelocity(u,T,S){this.set(T),this.prev=void 0,this.prevFrameValue=u,this.prevUpdatedAt=this.updatedAt-S}jump(u,T=!0){this.updateAndNotify(u),this.prev=u,this.prevUpdatedAt=this.prevFrameValue=void 0,T&&this.stop(),this.stopPassiveEffect&&this.stopPassiveEffect()}get(){return collectMotionValues.current&&collectMotionValues.current.push(this),this.current}getPrevious(){return this.prev}getVelocity(){const u=time.now();if(!this.canTrackVelocity||this.prevFrameValue===void 0||u-this.updatedAt>MAX_VELOCITY_DELTA)return 0;const T=Math.min(this.updatedAt-this.prevUpdatedAt,MAX_VELOCITY_DELTA);return velocityPerSecond(parseFloat(this.current)-parseFloat(this.prevFrameValue),T)}start(u){return this.stop(),new Promise(T=>{this.hasAnimated=!0,this.animation=u(T),this.events.animationStart&&this.events.animationStart.notify()}).then(()=>{this.events.animationComplete&&this.events.animationComplete.notify(),this.clearAnimation()})}stop(){this.animation&&(this.animation.stop(),this.events.animationCancel&&this.events.animationCancel.notify()),this.clearAnimation()}isAnimating(){return!!this.animation}clearAnimation(){delete this.animation}destroy(){this.clearListeners(),this.stop(),this.stopPassiveEffect&&this.stopPassiveEffect()}}function motionValue(o,u){return new MotionValue(o,u)}function setMotionValue(o,u,T){o.hasValue(u)?o.getValue(u).set(T):o.addValue(u,motionValue(T))}function setTarget(o,u){const T=resolveVariant(o,u);let{transitionEnd:S={},transition:E={},...C}=T||{};C={...C,...S};for(const _ in C){const P=resolveFinalValueInKeyframes(C[_]);setMotionValue(o,_,P)}}function isWillChangeMotionValue(o){return!!(isMotionValue(o)&&o.add)}function addValueToWillChange(o,u){const T=o.getValue("willChange");if(isWillChangeMotionValue(T))return T.add(u)}function getOptimisedAppearId(o){return o.props[optimizedAppearDataAttribute]}const calcBezier=(o,u,T)=>(((1-3*T+3*u)*o+(3*T-6*u))*o+3*u)*o,subdivisionPrecision=1e-7,subdivisionMaxIterations=12;function binarySubdivide(o,u,T,S,E){let C,_,P=0;do _=u+(T-u)/2,C=calcBezier(_,S,E)-o,C>0?T=_:u=_;while(Math.abs(C)>subdivisionPrecision&&++P<subdivisionMaxIterations);return _}function cubicBezier(o,u,T,S){if(o===u&&T===S)return noop$1;const E=C=>binarySubdivide(C,0,1,o,T);return C=>C===0||C===1?C:calcBezier(E(C),u,S)}const mirrorEasing=o=>u=>u<=.5?o(2*u)/2:(2-o(2*(1-u)))/2,reverseEasing=o=>u=>1-o(1-u),backOut=cubicBezier(.33,1.53,.69,.99),backIn=reverseEasing(backOut),backInOut=mirrorEasing(backIn),anticipate=o=>(o*=2)<1?.5*backIn(o):.5*(2-Math.pow(2,-10*(o-1))),circIn=o=>1-Math.sin(Math.acos(o)),circOut=reverseEasing(circIn),circInOut=mirrorEasing(circIn),isZeroValueString=o=>/^0[^.\s]+$/u.test(o);function isNone(o){return typeof o=="number"?o===0:o!==null?o==="none"||o==="0"||isZeroValueString(o):!0}const sanitize=o=>Math.round(o*1e5)/1e5,floatRegex=/-?(?:\d+(?:\.\d+)?|\.\d+)/gu;function isNullish(o){return o==null}const singleColorRegex=/^(?:#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\))$/iu,isColorString=(o,u)=>T=>!!(typeof T=="string"&&singleColorRegex.test(T)&&T.startsWith(o)||u&&!isNullish(T)&&Object.prototype.hasOwnProperty.call(T,u)),splitColor=(o,u,T)=>S=>{if(typeof S!="string")return S;const[E,C,_,P]=S.match(floatRegex);return{[o]:parseFloat(E),[u]:parseFloat(C),[T]:parseFloat(_),alpha:P!==void 0?parseFloat(P):1}},clampRgbUnit=o=>clamp(0,255,o),rgbUnit={...number,transform:o=>Math.round(clampRgbUnit(o))},rgba={test:isColorString("rgb","red"),parse:splitColor("red","green","blue"),transform:({red:o,green:u,blue:T,alpha:S=1})=>"rgba("+rgbUnit.transform(o)+", "+rgbUnit.transform(u)+", "+rgbUnit.transform(T)+", "+sanitize(alpha.transform(S))+")"};function parseHex(o){let u="",T="",S="",E="";return o.length>5?(u=o.substring(1,3),T=o.substring(3,5),S=o.substring(5,7),E=o.substring(7,9)):(u=o.substring(1,2),T=o.substring(2,3),S=o.substring(3,4),E=o.substring(4,5),u+=u,T+=T,S+=S,E+=E),{red:parseInt(u,16),green:parseInt(T,16),blue:parseInt(S,16),alpha:E?parseInt(E,16)/255:1}}const hex={test:isColorString("#"),parse:parseHex,transform:rgba.transform},hsla={test:isColorString("hsl","hue"),parse:splitColor("hue","saturation","lightness"),transform:({hue:o,saturation:u,lightness:T,alpha:S=1})=>"hsla("+Math.round(o)+", "+percent.transform(sanitize(u))+", "+percent.transform(sanitize(T))+", "+sanitize(alpha.transform(S))+")"},color={test:o=>rgba.test(o)||hex.test(o)||hsla.test(o),parse:o=>rgba.test(o)?rgba.parse(o):hsla.test(o)?hsla.parse(o):hex.parse(o),transform:o=>typeof o=="string"?o:o.hasOwnProperty("red")?rgba.transform(o):hsla.transform(o)},colorRegex=/(?:#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\))/giu;function test(o){var u,T;return isNaN(o)&&typeof o=="string"&&(((u=o.match(floatRegex))===null||u===void 0?void 0:u.length)||0)+(((T=o.match(colorRegex))===null||T===void 0?void 0:T.length)||0)>0}const NUMBER_TOKEN="number",COLOR_TOKEN="color",VAR_TOKEN="var",VAR_FUNCTION_TOKEN="var(",SPLIT_TOKEN="${}",complexRegex=/var\s*\(\s*--(?:[\w-]+\s*|[\w-]+\s*,(?:\s*[^)(\s]|\s*\((?:[^)(]|\([^)(]*\))*\))+\s*)\)|#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\)|-?(?:\d+(?:\.\d+)?|\.\d+)/giu;function analyseComplexValue(o){const u=o.toString(),T=[],S={color:[],number:[],var:[]},E=[];let C=0;const P=u.replace(complexRegex,R=>(color.test(R)?(S.color.push(C),E.push(COLOR_TOKEN),T.push(color.parse(R))):R.startsWith(VAR_FUNCTION_TOKEN)?(S.var.push(C),E.push(VAR_TOKEN),T.push(R)):(S.number.push(C),E.push(NUMBER_TOKEN),T.push(parseFloat(R))),++C,SPLIT_TOKEN)).split(SPLIT_TOKEN);return{values:T,split:P,indexes:S,types:E}}function parseComplexValue(o){return analyseComplexValue(o).values}function createTransformer(o){const{split:u,types:T}=analyseComplexValue(o),S=u.length;return E=>{let C="";for(let _=0;_<S;_++)if(C+=u[_],E[_]!==void 0){const P=T[_];P===NUMBER_TOKEN?C+=sanitize(E[_]):P===COLOR_TOKEN?C+=color.transform(E[_]):C+=E[_]}return C}}const convertNumbersToZero=o=>typeof o=="number"?0:o;function getAnimatableNone$1(o){const u=parseComplexValue(o);return createTransformer(o)(u.map(convertNumbersToZero))}const complex={test,parse:parseComplexValue,createTransformer,getAnimatableNone:getAnimatableNone$1},maxDefaults=new Set(["brightness","contrast","saturate","opacity"]);function applyDefaultFilter(o){const[u,T]=o.slice(0,-1).split("(");if(u==="drop-shadow")return o;const[S]=T.match(floatRegex)||[];if(!S)return o;const E=T.replace(S,"");let C=maxDefaults.has(u)?1:0;return S!==T&&(C*=100),u+"("+C+E+")"}const functionRegex=/\b([a-z-]*)\(.*?\)/gu,filter={...complex,getAnimatableNone:o=>{const u=o.match(functionRegex);return u?u.map(applyDefaultFilter).join(" "):o}},defaultValueTypes={...numberValueTypes,color,backgroundColor:color,outlineColor:color,fill:color,stroke:color,borderColor:color,borderTopColor:color,borderRightColor:color,borderBottomColor:color,borderLeftColor:color,filter,WebkitFilter:filter},getDefaultValueType=o=>defaultValueTypes[o];function getAnimatableNone(o,u){let T=getDefaultValueType(o);return T!==filter&&(T=complex),T.getAnimatableNone?T.getAnimatableNone(u):void 0}const invalidTemplates=new Set(["auto","none","0"]);function makeNoneKeyframesAnimatable(o,u,T){let S=0,E;for(;S<o.length&&!E;){const C=o[S];typeof C=="string"&&!invalidTemplates.has(C)&&analyseComplexValue(C).values.length&&(E=o[S]),S++}if(E&&T)for(const C of u)o[C]=getAnimatableNone(T,E)}const isNumOrPxType=o=>o===number||o===px,getPosFromMatrix=(o,u)=>parseFloat(o.split(", ")[u]),getTranslateFromMatrix=(o,u)=>(T,{transform:S})=>{if(S==="none"||!S)return 0;const E=S.match(/^matrix3d\((.+)\)$/u);if(E)return getPosFromMatrix(E[1],u);{const C=S.match(/^matrix\((.+)\)$/u);return C?getPosFromMatrix(C[1],o):0}},transformKeys=new Set(["x","y","z"]),nonTranslationalTransformKeys=transformPropOrder.filter(o=>!transformKeys.has(o));function removeNonTranslationalTransform(o){const u=[];return nonTranslationalTransformKeys.forEach(T=>{const S=o.getValue(T);S!==void 0&&(u.push([T,S.get()]),S.set(T.startsWith("scale")?1:0))}),u}const positionalValues={width:({x:o},{paddingLeft:u="0",paddingRight:T="0"})=>o.max-o.min-parseFloat(u)-parseFloat(T),height:({y:o},{paddingTop:u="0",paddingBottom:T="0"})=>o.max-o.min-parseFloat(u)-parseFloat(T),top:(o,{top:u})=>parseFloat(u),left:(o,{left:u})=>parseFloat(u),bottom:({y:o},{top:u})=>parseFloat(u)+(o.max-o.min),right:({x:o},{left:u})=>parseFloat(u)+(o.max-o.min),x:getTranslateFromMatrix(4,13),y:getTranslateFromMatrix(5,14)};positionalValues.translateX=positionalValues.x;positionalValues.translateY=positionalValues.y;const toResolve=new Set;let isScheduled=!1,anyNeedsMeasurement=!1;function measureAllKeyframes(){if(anyNeedsMeasurement){const o=Array.from(toResolve).filter(S=>S.needsMeasurement),u=new Set(o.map(S=>S.element)),T=new Map;u.forEach(S=>{const E=removeNonTranslationalTransform(S);E.length&&(T.set(S,E),S.render())}),o.forEach(S=>S.measureInitialState()),u.forEach(S=>{S.render();const E=T.get(S);E&&E.forEach(([C,_])=>{var P;(P=S.getValue(C))===null||P===void 0||P.set(_)})}),o.forEach(S=>S.measureEndState()),o.forEach(S=>{S.suspendedScrollY!==void 0&&window.scrollTo(0,S.suspendedScrollY)})}anyNeedsMeasurement=!1,isScheduled=!1,toResolve.forEach(o=>o.complete()),toResolve.clear()}function readAllKeyframes(){toResolve.forEach(o=>{o.readKeyframes(),o.needsMeasurement&&(anyNeedsMeasurement=!0)})}function flushKeyframeResolvers(){readAllKeyframes(),measureAllKeyframes()}class KeyframeResolver{constructor(u,T,S,E,C,_=!1){this.isComplete=!1,this.isAsync=!1,this.needsMeasurement=!1,this.isScheduled=!1,this.unresolvedKeyframes=[...u],this.onComplete=T,this.name=S,this.motionValue=E,this.element=C,this.isAsync=_}scheduleResolve(){this.isScheduled=!0,this.isAsync?(toResolve.add(this),isScheduled||(isScheduled=!0,frame.read(readAllKeyframes),frame.resolveKeyframes(measureAllKeyframes))):(this.readKeyframes(),this.complete())}readKeyframes(){const{unresolvedKeyframes:u,name:T,element:S,motionValue:E}=this;for(let C=0;C<u.length;C++)if(u[C]===null)if(C===0){const _=E==null?void 0:E.get(),P=u[u.length-1];if(_!==void 0)u[0]=_;else if(S&&T){const R=S.readValue(T,P);R!=null&&(u[0]=R)}u[0]===void 0&&(u[0]=P),E&&_===void 0&&E.set(u[0])}else u[C]=u[C-1]}setFinalKeyframe(){}measureInitialState(){}renderEndStyles(){}measureEndState(){}complete(){this.isComplete=!0,this.onComplete(this.unresolvedKeyframes,this.finalKeyframe),toResolve.delete(this)}cancel(){this.isComplete||(this.isScheduled=!1,toResolve.delete(this))}resume(){this.isComplete||this.scheduleResolve()}}const isNumericalString=o=>/^-?(?:\d+(?:\.\d+)?|\.\d+)$/u.test(o),splitCSSVariableRegex=/^var\(--(?:([\w-]+)|([\w-]+), ?([a-zA-Z\d ()%#.,-]+))\)/u;function parseCSSVariable(o){const u=splitCSSVariableRegex.exec(o);if(!u)return[,];const[,T,S,E]=u;return[`--${T??S}`,E]}function getVariableValue(o,u,T=1){const[S,E]=parseCSSVariable(o);if(!S)return;const C=window.getComputedStyle(u).getPropertyValue(S);if(C){const _=C.trim();return isNumericalString(_)?parseFloat(_):_}return isCSSVariableToken(E)?getVariableValue(E,u,T+1):E}const testValueType=o=>u=>u.test(o),auto={test:o=>o==="auto",parse:o=>o},dimensionValueTypes=[number,px,percent,degrees,vw,vh,auto],findDimensionValueType=o=>dimensionValueTypes.find(testValueType(o));class DOMKeyframesResolver extends KeyframeResolver{constructor(u,T,S,E,C){super(u,T,S,E,C,!0)}readKeyframes(){const{unresolvedKeyframes:u,element:T,name:S}=this;if(!T||!T.current)return;super.readKeyframes();for(let R=0;R<u.length;R++){let I=u[R];if(typeof I=="string"&&(I=I.trim(),isCSSVariableToken(I))){const L=getVariableValue(I,T.current);L!==void 0&&(u[R]=L),R===u.length-1&&(this.finalKeyframe=I)}}if(this.resolveNoneKeyframes(),!positionalKeys.has(S)||u.length!==2)return;const[E,C]=u,_=findDimensionValueType(E),P=findDimensionValueType(C);if(_!==P)if(isNumOrPxType(_)&&isNumOrPxType(P))for(let R=0;R<u.length;R++){const I=u[R];typeof I=="string"&&(u[R]=parseFloat(I))}else this.needsMeasurement=!0}resolveNoneKeyframes(){const{unresolvedKeyframes:u,name:T}=this,S=[];for(let E=0;E<u.length;E++)isNone(u[E])&&S.push(E);S.length&&makeNoneKeyframesAnimatable(u,S,T)}measureInitialState(){const{element:u,unresolvedKeyframes:T,name:S}=this;if(!u||!u.current)return;S==="height"&&(this.suspendedScrollY=window.pageYOffset),this.measuredOrigin=positionalValues[S](u.measureViewportBox(),window.getComputedStyle(u.current)),T[0]=this.measuredOrigin;const E=T[T.length-1];E!==void 0&&u.getValue(S,E).jump(E,!1)}measureEndState(){var u;const{element:T,name:S,unresolvedKeyframes:E}=this;if(!T||!T.current)return;const C=T.getValue(S);C&&C.jump(this.measuredOrigin,!1);const _=E.length-1,P=E[_];E[_]=positionalValues[S](T.measureViewportBox(),window.getComputedStyle(T.current)),P!==null&&this.finalKeyframe===void 0&&(this.finalKeyframe=P),!((u=this.removedTransforms)===null||u===void 0)&&u.length&&this.removedTransforms.forEach(([R,I])=>{T.getValue(R).set(I)}),this.resolveNoneKeyframes()}}const isAnimatable=(o,u)=>u==="zIndex"?!1:!!(typeof o=="number"||Array.isArray(o)||typeof o=="string"&&(complex.test(o)||o==="0")&&!o.startsWith("url("));function hasKeyframesChanged(o){const u=o[0];if(o.length===1)return!0;for(let T=0;T<o.length;T++)if(o[T]!==u)return!0}function canAnimate(o,u,T,S){const E=o[0];if(E===null)return!1;if(u==="display"||u==="visibility")return!0;const C=o[o.length-1],_=isAnimatable(E,u),P=isAnimatable(C,u);return!_||!P?!1:hasKeyframesChanged(o)||(T==="spring"||isGenerator(T))&&S}const isNotNull=o=>o!==null;function getFinalKeyframe(o,{repeat:u,repeatType:T="loop"},S){const E=o.filter(isNotNull),C=u&&T!=="loop"&&u%2===1?0:E.length-1;return!C||S===void 0?E[C]:S}const MAX_RESOLVE_DELAY=40;class BaseAnimation{constructor({autoplay:u=!0,delay:T=0,type:S="keyframes",repeat:E=0,repeatDelay:C=0,repeatType:_="loop",...P}){this.isStopped=!1,this.hasAttemptedResolve=!1,this.createdAt=time.now(),this.options={autoplay:u,delay:T,type:S,repeat:E,repeatDelay:C,repeatType:_,...P},this.updateFinishedPromise()}calcStartTime(){return this.resolvedAt?this.resolvedAt-this.createdAt>MAX_RESOLVE_DELAY?this.resolvedAt:this.createdAt:this.createdAt}get resolved(){return!this._resolved&&!this.hasAttemptedResolve&&flushKeyframeResolvers(),this._resolved}onKeyframesResolved(u,T){this.resolvedAt=time.now(),this.hasAttemptedResolve=!0;const{name:S,type:E,velocity:C,delay:_,onComplete:P,onUpdate:R,isGenerator:I}=this.options;if(!I&&!canAnimate(u,S,E,C))if(_)this.options.duration=0;else{R&&R(getFinalKeyframe(u,this.options,T)),P&&P(),this.resolveFinishedPromise();return}const L=this.initPlayback(u,T);L!==!1&&(this._resolved={keyframes:u,finalKeyframe:T,...L},this.onPostResolved())}onPostResolved(){}then(u,T){return this.currentFinishedPromise.then(u,T)}flatten(){this.options.type="keyframes",this.options.ease="linear"}updateFinishedPromise(){this.currentFinishedPromise=new Promise(u=>{this.resolveFinishedPromise=u})}}const mixNumber$1=(o,u,T)=>o+(u-o)*T;function hueToRgb(o,u,T){return T<0&&(T+=1),T>1&&(T-=1),T<1/6?o+(u-o)*6*T:T<1/2?u:T<2/3?o+(u-o)*(2/3-T)*6:o}function hslaToRgba({hue:o,saturation:u,lightness:T,alpha:S}){o/=360,u/=100,T/=100;let E=0,C=0,_=0;if(!u)E=C=_=T;else{const P=T<.5?T*(1+u):T+u-T*u,R=2*T-P;E=hueToRgb(R,P,o+1/3),C=hueToRgb(R,P,o),_=hueToRgb(R,P,o-1/3)}return{red:Math.round(E*255),green:Math.round(C*255),blue:Math.round(_*255),alpha:S}}function mixImmediate(o,u){return T=>T>0?u:o}const mixLinearColor=(o,u,T)=>{const S=o*o,E=T*(u*u-S)+S;return E<0?0:Math.sqrt(E)},colorTypes=[hex,rgba,hsla],getColorType=o=>colorTypes.find(u=>u.test(o));function asRGBA(o){const u=getColorType(o);if(!u)return!1;let T=u.parse(o);return u===hsla&&(T=hslaToRgba(T)),T}const mixColor=(o,u)=>{const T=asRGBA(o),S=asRGBA(u);if(!T||!S)return mixImmediate(o,u);const E={...T};return C=>(E.red=mixLinearColor(T.red,S.red,C),E.green=mixLinearColor(T.green,S.green,C),E.blue=mixLinearColor(T.blue,S.blue,C),E.alpha=mixNumber$1(T.alpha,S.alpha,C),rgba.transform(E))},combineFunctions=(o,u)=>T=>u(o(T)),pipe=(...o)=>o.reduce(combineFunctions),invisibleValues=new Set(["none","hidden"]);function mixVisibility(o,u){return invisibleValues.has(o)?T=>T<=0?o:u:T=>T>=1?u:o}function mixNumber(o,u){return T=>mixNumber$1(o,u,T)}function getMixer(o){return typeof o=="number"?mixNumber:typeof o=="str
207ing"?isCSSVariableToken(o)?mixImmediate:color.test(o)?mixColor:mixComplex:Array.isArray(o)?mixArray:typeof o=="object"?color.test(o)?mixColor:mixObject:mixImmediate}function mixArray(o,u){const T=[...o],S=T.length,E=o.map((C,_)=>getMixer(C)(C,u[_]));return C=>{for(let _=0;_<S;_++)T[_]=E[_](C);return T}}function mixObject(o,u){const T={...o,...u},S={};for(const E in T)o[E]!==void 0&&u[E]!==void 0&&(S[E]=getMixer(o[E])(o[E],u[E]));return E=>{for(const C in S)T[C]=S[C](E);return T}}function matchOrder(o,u){var T;const S=[],E={color:0,var:0,number:0};for(let C=0;C<u.values.length;C++){const _=u.types[C],P=o.indexes[_][E[_]],R=(T=o.values[P])!==null&&T!==void 0?T:0;S[C]=R,E[_]++}return S}const mixComplex=(o,u)=>{const T=complex.createTransformer(u),S=analyseComplexValue(o),E=analyseComplexValue(u);return S.indexes.var.length===E.indexes.var.length&&S.indexes.color.length===E.indexes.color.length&&S.indexes.number.length>=E.indexes.number.length?invisibleValues.has(o)&&!E.values.length||invisibleValues.has(u)&&!S.values.length?mixVisibility(o,u):pipe(mixArray(matchOrder(S,E),E.values),T):mixImmediate(o,u)};function mix(o,u,T){return typeof o=="number"&&typeof u=="number"&&typeof T=="number"?mixNumber$1(o,u,T):getMixer(o)(o,u)}const velocitySampleDuration=5;function calcGeneratorVelocity(o,u,T){const S=Math.max(u-velocitySampleDuration,0);return velocityPerSecond(T-o(S),u-S)}const springDefaults={stiffness:100,damping:10,mass:1,velocity:0,duration:800,bounce:.3,visualDuration:.3,restSpeed:{granular:.01,default:2},restDelta:{granular:.005,default:.5},minDuration:.01,maxDuration:10,minDamping:.05,maxDamping:1},safeMin=.001;function findSpring({duration:o=springDefaults.duration,bounce:u=springDefaults.bounce,velocity:T=springDefaults.velocity,mass:S=springDefaults.mass}){let E,C,_=1-u;_=clamp(springDefaults.minDamping,springDefaults.maxDamping,_),o=clamp(springDefaults.minDuration,springDefaults.maxDuration,millisecondsToSeconds(o)),_<1?(E=I=>{const L=I*_,j=L*o,M=L-T,D=calcAngularFreq(I,_),F=Math.exp(-j);return safeMin-M/D*F},C=I=>{const j=I*_*o,M=j*T+T,D=Math.pow(_,2)*Math.pow(I,2)*o,F=Math.exp(-j),N=calcAngularFreq(Math.pow(I,2),_);return(-E(I)+safeMin>0?-1:1)*((M-D)*F)/N}):(E=I=>{const L=Math.exp(-I*o),j=(I-T)*o+1;return-safeMin+L*j},C=I=>{const L=Math.exp(-I*o),j=(T-I)*(o*o);return L*j});const P=5/o,R=approximateRoot(E,C,P);if(o=secondsToMilliseconds(o),isNaN(R))return{stiffness:springDefaults.stiffness,damping:springDefaults.damping,duration:o};{const I=Math.pow(R,2)*S;return{stiffness:I,damping:_*2*Math.sqrt(S*I),duration:o}}}const rootIterations=12;function approximateRoot(o,u,T){let S=T;for(let E=1;E<rootIterations;E++)S=S-o(S)/u(S);return S}function calcAngularFreq(o,u){return o*Math.sqrt(1-u*u)}const durationKeys=["duration","bounce"],physicsKeys=["stiffness","damping","mass"];function isSpringType(o,u){return u.some(T=>o[T]!==void 0)}function getSpringOptions(o){let u={velocity:springDefaults.velocity,stiffness:springDefaults.stiffness,damping:springDefaults.damping,mass:springDefaults.mass,isResolvedFromDuration:!1,...o};if(!isSpringType(o,physicsKeys)&&isSpringType(o,durationKeys))if(o.visualDuration){const T=o.visualDuration,S=2*Math.PI/(T*1.2),E=S*S,C=2*clamp(.05,1,1-(o.bounce||0))*Math.sqrt(E);u={...u,mass:springDefaults.mass,stiffness:E,damping:C}}else{const T=findSpring(o);u={...u,...T,mass:springDefaults.mass},u.isResolvedFromDuration=!0}return u}function spring(o=springDefaults.visualDuration,u=springDefaults.bounce){const T=typeof o!="object"?{visualDuration:o,keyframes:[0,1],bounce:u}:o;let{restSpeed:S,restDelta:E}=T;const C=T.keyframes[0],_=T.keyframes[T.keyframes.length-1],P={done:!1,value:C},{stiffness:R,damping:I,mass:L,duration:j,velocity:M,isResolvedFromDuration:D}=getSpringOptions({...T,velocity:-millisecondsToSeconds(T.velocity||0)}),F=M||0,N=I/(2*Math.sqrt(R*L)),G=_-C,B=millisecondsToSeconds(Math.sqrt(R/L)),H=Math.abs(G)<5;S||(S=H?springDefaults.restSpeed.granular:springDefaults.restSpeed.default),E||(E=H?springDefaults.restDelta.granular:springDefaults.restDelta.default);let O;if(N<1){const U=calcAngularFreq(B,N);O=W=>{const K=Math.exp(-N*B*W);return _-K*((F+N*B*G)/U*Math.sin(U*W)+G*Math.cos(U*W))}}else if(N===1)O=U=>_-Math.exp(-B*U)*(G+(F+B*G)*U);else{const U=B*Math.sqrt(N*N-1);O=W=>{const K=Math.exp(-N*B*W),Y=Math.min(U*W,300);return _-K*((F+N*B*G)*Math.sinh(Y)+U*G*Math.cosh(Y))/U}}const V={calculatedDuration:D&&j||null,next:U=>{const W=O(U);if(D)P.done=U>=j;else{let K=0;N<1&&(K=U===0?secondsToMilliseconds(F):calcGeneratorVelocity(O,U,W));const Y=Math.abs(K)<=S,ee=Math.abs(_-W)<=E;P.done=Y&&ee}return P.value=P.done?_:W,P},toString:()=>{const U=Math.min(calcGeneratorDuration(V),maxGeneratorDuration),W=generateLinearEasing(K=>V.next(U*K).value,U,30);return U+"ms "+W}};return V}
vendor: 82,934 bytes, line 207
207function inertia({keyframes:o,velocity:u=0,power:T=.8,timeConstant:S=325,bounceDamping:E=10,bounceStiffness:C=500,modifyTarget:_,min:P,max:R,restDelta:I=.5,restSpeed:L}){const j=o[0],M={done:!1,value:j},D=Y=>P!==void 0&&Y<P||R!==void 0&&Y>R,F=Y=>P===void 0?R:R===void 0||Math.abs(P-Y)<Math.abs(R-Y)?P:R;let N=T*u;const G=j+N,B=_===void 0?G:_(G);B!==G&&(N=B-j);const H=Y=>-N*Math.exp(-Y/S),O=Y=>B+H(Y),V=Y=>{const ee=H(Y),oe=O(Y);M.done=Math.abs(ee)<=I,M.value=M.done?B:oe};let U,W;const K=Y=>{D(M.value)&&(U=Y,W=spring({keyframes:[M.value,F(M.value)],velocity:calcGeneratorVelocity(O,Y,M.value),damping:E,stiffness:C,restDelta:I,restSpeed:L}))};return K(0),{calculatedDuration:null,next:Y=>{let ee=!1;return!W&&U===void 0&&(ee=!0,V(Y),K(Y)),U!==void 0&&Y>=U?W.next(Y-U):(!ee&&V(Y),M)}}}const easeIn=cubicBezier(.42,0,1,1),easeOut=cubicBezier(0,0,.58,1),easeInOut=cubicBezier(.42,0,.58,1),isEasingArray=o=>Array.isArray(o)&&typeof o[0]!="number",easingLookup={linear:noop$1,easeIn,easeInOut,easeOut,circIn,circInOut,circOut,backIn,backInOut,backOut,anticipate},easingDefinitionToFunction=o=>{if(isBezierDefinition(o)){invariant(o.length===4);const[u,T,S,E]=o;return cubicBezier(u,T,S,E)}else if(typeof o=="string")return easingLookup[o];return o};function createMixers(o,u,T){const S=[],E=T||mix,C=o.length-1;for(let _=0;_<C;_++){let P=E(o[_],o[_+1]);if(u){const R=Array.isArray(u)?u[_]||noop$1:u;P=pipe(R,P)}S.push(P)}return S}function interpolate(o,u,{clamp:T=!0,ease:S,mixer:E}={}){const C=o.length;if(invariant(C===u.length),C===1)return()=>u[0];if(C===2&&u[0]===u[1])return()=>u[1];const _=o[0]===o[1];o[0]>o[C-1]&&(o=[...o].reverse(),u=[...u].reverse());const P=createMixers(u,S,E),R=P.length,I=L=>{if(_&&L<o[0])return u[0];let j=0;if(R>1)for(;j<o.length-2&&!(L<o[j+1]);j++);const M=progress(o[j],o[j+1],L);return P[j](M)};return T?L=>I(clamp(o[0],o[C-1],L)):I}function fillOffset(o,u){const T=o[o.length-1];for(let S=1;S<=u;S++){const E=progress(0,u,S);o.push(mixNumber$1(T,1,E))}}function defaultOffset(o){const u=[0];return fillOffset(u,o.length-1),u}function convertOffsetToTimes(o,u){return o.map(T=>T*u)}function defaultEasing(o,u){return o.map(()=>u||easeInOut).splice(0,o.length-1)}function keyframes({duration:o=300,keyframes:u,times:T,ease:S="easeInOut"}){const E=isEasingArray(S)?S.map(easingDefinitionToFunction):easingDefinitionToFunction(S),C={done:!1,value:u[0]},_=convertOffsetToTimes(T&&T.length===u.length?T:defaultOffset(u),o),P=interpolate(_,u,{ease:Array.isArray(E)?E:defaultEasing(u,E)});return{calculatedDuration:o,next:R=>(C.value=P(R),C.done=R>=o,C)}}const frameloopDriver=o=>{const u=({timestamp:T})=>o(T);return{start:()=>frame.update(u,!0),stop:()=>cancelFrame(u),now:()=>frameData.isProcessing?frameData.timestamp:time.now()}},generators={decay:inertia,inertia,tween:keyframes,keyframes,spring},percentToProgress=o=>o/100;class MainThreadAnimation extends BaseAnimation{constructor(u){super(u),this.holdTime=null,this.cancelTime=null,this.currentTime=0,this.playbackSpeed=1,this.pendingPlayState="running",this.startTime=null,this.state="idle",this.stop=()=>{if(this.resolver.cancel(),this.isStopped=!0,this.state==="idle")return;this.teardown();const{onStop:R}=this.options;R&&R()};const{name:T,motionValue:S,element:E,keyframes:C}=this.options,_=(E==null?void 0:E.KeyframeResolver)||KeyframeResolver,P=(R,I)=>this.onKeyframesResolved(R,I);this.resolver=new _(C,P,T,S,E),this.resolver.scheduleResolve()}flatten(){super.flatten(),this._resolved&&Object.assign(this._resolved,this.initPlayback(this._resolved.keyframes))}initPlayback(u){const{type:T="keyframes",repeat:S=0,repeatDelay:E=0,repeatType:C,velocity:_=0}=this.options,P=isGenerator(T)?T:generators[T]||keyframes;let R,I;P!==keyframes&&typeof u[0]!="number"&&(R=pipe(percentToProgress,mix(u[0],u[1])),u=[0,100]);const L=P({...this.options,keyframes:u});C==="mirror"&&(I=P({...this.options,keyframes:[...u].reverse(),velocity:-_})),L.calculatedDuration===null&&(L.calculatedDuration=calcGeneratorDuration(L));const{calculatedDuration:j}=L,M=j+E,D=M*(S+1)-E;return{generator:L,mirroredGenerator:I,mapPercentToKeyframes:R,calculatedDuration:j,resolvedDuration:M,totalDuration:D}}onPostResolved(){const{autoplay:u=!0}=this.options;this.play(),this.pendingPlayState==="paused"||!u?this.pause():this.state=this.pendingPlayState}tick(u,T=!1){const{resolved:S}=this;if(!S){const{keyframes:Y}=this.options;return{done:!0,value:Y[Y.length-1]}}const{finalKeyframe:E,generator:C,mirroredGenerator:_,mapPercentToKeyframes:P,keyframes:R,calculatedDuration:I,totalDuration:L,resolvedDuration:j}=S;if(this.startTime===null)return C.next(0);const{delay:M,repeat:D,repeatType:F,repeatDelay:N,onUpdate:G}=this.options;this.speed>0?this.startTime=Math.min(this.startTime,u):this.speed<0&&(this.startTime=Math.min(u-L/this.speed,this.startTime)),T?this.currentTime=u:this.holdTime!==null?this.currentTime=this.holdTime:this.currentTime=Math.round(u-this.startTime)*this.speed;const B=this.currentTime-M*(this.speed>=0?1:-1),H=this.speed>=0?B<0:B>L;this.currentTime=Math.max(B,0),this.state==="finished"&&this.holdTime===null&&(this.currentTime=L);let O=this.currentTime,V=C;if(D){const Y=Math.min(this.currentTime,L)/j;let ee=Math.floor(Y),oe=Y%1;!oe&&Y>=1&&(oe=1),oe===1&&ee--,ee=Math.min(ee,D+1),!!(ee%2)&&(F==="reverse"?(oe=1-oe,N&&(oe-=N/j)):F==="mirror"&&(V=_)),O=clamp(0,1,oe)*j}const U=H?{done:!1,value:R[0]}:V.next(O);P&&(U.value=P(U.value));let{done:W}=U;!H&&I!==null&&(W=this.speed>=0?this.currentTime>=L:this.currentTime<=0);const K=this.holdTime===null&&(this.state==="finished"||this.state==="running"&&W);return K&&E!==void 0&&(U.value=getFinalKeyframe(R,this.options,E)),G&&G(U.value),K&&this.finish(),U}get duration(){const{resolved:u}=this;return u?millisecondsToSeconds(u.calculatedDuration):0}get time(){return millisecondsToSeconds(this.currentTime)}set time(u){u=secondsToMilliseconds(u),this.currentTime=u,this.holdTime!==null||this.speed===0?this.holdTime=u:this.driver&&(this.startTime=this.driver.now()-u/this.speed)}get speed(){return this.playbackSpeed}set speed(u){const T=this.playbackSpeed!==u;this.playbackSpeed=u,T&&(this.time=millisecondsToSeconds(this.currentTime))}play(){if(this.resolver.isScheduled||this.resolver.resume(),!this._resolved){this.pendingPlayState="running";return}if(this.isStopped)return;const{driver:u=frameloopDriver,onPlay:T,startTime:S}=this.options;this.driver||(this.driver=u(C=>this.tick(C))),T&&T();const E=this.driver.now();this.holdTime!==null?this.startTime=E-this.holdTime:this.startTime?this.state==="finished"&&(this.startTime=E):this.startTime=S??this.calcStartTime(),this.state==="finished"&&this.updateFinishedPromise(),this.cancelTime=this.startTime,this.holdTime=null,this.state="running",this.driver.start()}pause(){var u;if(!this._resolved){this.pendingPlayState="paused";return}this.state="paused",this.holdTime=(u=this.currentTime)!==null&&u!==void 0?u:0}complete(){this.state!=="running"&&this.play(),this.pendingPlayState=this.state="finished",this.holdTime=null}finish(){this.teardown(),this.state="finished";const{onComplete:u}=this.options;u&&u()}cancel(){this.cancelTime!==null&&this.tick(this.cancelTime),this.teardown(),this.updateFinishedPromise()}teardown(){this.state="idle",this.stopDriver(),this.resolveFinishedPromise(),this.updateFinishedPromise(),this.startTime=this.cancelTime=null,this.resolver.cancel()}stopDriver(){this.driver&&(this.driver.stop(),this.driver=void 0)}sample(u){return this.startTime=0,this.tick(u,!0)}}const acceleratedValues=new Set(["opacity","clipPath","filter","transform"]);function startWaapiAnimation(o,u,T,{delay:S=0,duration:E=300,repeat:C=0,repeatType:_="loop",ease:P="easeInOut",times:R}={}){const I={[u]:T};R&&(I.offset=R);const L=mapEasingToNativeEasing(P,E);return Array.isArray(L)&&(I.easing=L),o.animate(I,{delay:S,duration:E,easing:Array.isArray(L)?"linear":L,fill:"both",iterations:C+1,direction:_==="reverse"?"alternate":"normal"})}const supportsWaapi=memo(()=>Object.hasOwnProperty.call(Element.prototype,"animate")),sampleDelta=10,maxDuration=2e4;function requiresPregeneratedKeyframes(o){return isGenerator(o.type)||o.type==="spring"||!isWaapiSupportedEasing(o.ease)}function pregenerateKeyframes(o,u){const T=new MainThreadAnimation({...u,keyframes:o,repeat:0,delay:0,isGenerator:!0});let S={done:!1,value:o[0]};const E=[];let C=0;for(;!S.done&&C<maxDuration;)S=T.sample(C),E.push(S.value),C+=sampleDelta;return{times:void 0,keyframes:E,duration:C-sampleDelta,ease:"linear"}}const unsupportedEasingFunctions={anticipate,backInOut,circInOut};function isUnsupportedEase(o){return o in unsupportedEasingFunctions}class AcceleratedAnimation extends BaseAnimation{constructor(u){super(u);const{name:T,motionValue:S,element:E,keyframes:C}=this.options;this.resolver=new DOMKeyframesResolver(C,(_,P)=>this.onKeyframesResolved(_,P),T,S,E),this.resolver.scheduleResolve()}initPlayback(u,T){let{duration:S=300,times:E,ease:C,type:_,motionValue:P,name:R,startTime:I}=this.options;if(!P.owner||!P.owner.current)return!1;if(typeof C=="string"&&supportsLinearEasing()&&isUnsupportedEase(C)&&(C=unsupportedEasingFunctions[C]),requiresPregeneratedKeyframes(this.options)){const{onComplete:j,onUpdate:M,motionValue:D,element:F,...N}=this.options,G=pregenerateKeyframes(u,N);u=G.keyframes,u.length===1&&(u[1]=u[0]),S=G.duration,E=G.times,C=G.ease,_="keyframes"}const L=startWaapiAnimation(P.owner.current,R,u,{...this.options,duration:S,times:E,ease:C});return L.startTime=I??this.calcStartTime(),this.pendingTimeline?(attachTimeline(L,this.pendingTimeline),this.pendingTimeline=void 0):L.onfinish=()=>{const{onComplete:j}=this.options;P.set(getFinalKeyframe(u,this.options,T)),j&&j(),this.cancel(),this.resolveFinishedPromise()},{animation:L,duration:S,times:E,type:_,ease:C,keyframes:u}}get duration(){const{resolved:u}=this;if(!u)return 0;const{duration:T}=u;return millisecondsToSeconds(T)}get time(){const{resolved:u}=this;if(!u)return 0;const{animation:T}=u;return millisecondsToSeconds(T.currentTime||0)}set time(u){const{resolved:T}=this;if(!T)return;const{animation:S}=T;S.currentTime=secondsToMilliseconds(u)}get speed(){const{resolved:u}=this;if(!u)return 1;const{animation:T}=u;return T.playbackRate}set speed(u){const{resolved:T}=this;if(!T)return;const{animation:S}=T;S.playbackRate=u}get state(){const{resolved:u}=this;if(!u)return"idle";const{animation:T}=u;return T.playState}get startTime(){const{resolved:u}=this;if(!u)return null;const{animation:T}=u;return T.startTime}attachTimeline(u){if(!this._resolved)this.pendingTimeline=u;else{const{resolved:T}=this;if(!T)return noop$1;const{animation:S}=T;attachTimeline(S,u)}return noop$1}play(){if(this.isStopped)return;const{resolved:u}=this;if(!u)return;const{animation:T}=u;T.playState==="finished"&&this.updateFinishedPromise(),T.play()}pause(){const{resolved:u}=this;if(!u)return;const{animation:T}=u;T.pause()}stop(){if(this.resolver.cancel(),this.isStopped=!0,this.state==="idle")return;this.resolveFinishedPromise(),this.updateFinishedPromise();const{resolved:u}=this;if(!u)return;const{animation:T,keyframes:S,duration:E,type:C,ease:_,times:P}=u;if(T.playState==="idle"||T.playState==="finished")return;if(this.time){const{motionValue:I,onUpdate:L,onComplete:j,element:M,...D}=this.options,F=new MainThreadAnimation({...D,keyframes:S,duration:E,type:C,ease:_,times:P,isGenerator:!0}),N=secondsToMilliseconds(this.time);I.setWithVelocity(F.sample(N-sampleDelta).value,F.sample(N).value,sampleDelta)}const{onStop:R}=this.options;R&&R(),this.cancel()}complete(){const{resolved:u}=this;u&&u.animation.finish()}cancel(){const{resolved:u}=this;u&&u.animation.cancel()}static supports(u){const{motionValue:T,name:S,repeatDelay:E,repeatType:C,damping:_,type:P}=u;if(!T||!T.owner||!(T.owner.current instanceof HTMLElement))return!1;const{onUpdate:R,transformTemplate:I}=T.owner.getProps();return supportsWaapi()&&S&&acceleratedValues.has(S)&&!R&&!I&&!E&&C!=="mirror"&&_!==0&&P!=="inertia"}}const underDampedSpring={type:"spring",stiffness:500,damping:25,restSpeed:10},criticallyDampedSpring=o=>({type:"spring",stiffness:550,damping:o===0?2*Math.sqrt(550):30,restSpeed:10}),keyframesTransition={type:"keyframes",duration:.8},ease={type:"keyframes",ease:[.25,.1,.35,1],duration:.3},getDefaultTransition=(o,{keyframes:u})=>u.length>2?keyframesTransition:transformProps.has(o)?o.startsWith("scale")?criticallyDampedSpring(u[1]):underDampedSpring:ease;function isTransitionDefined({when:o,delay:u,delayChildren:T,staggerChildren:S,staggerDirection:E,repeat:C,repeatType:_,repeatDelay:P,from:R,elapsed:I,...L}){return!!Object.keys(L).length}const animateMotionValue=(o,u,T,S={},E,C)=>_=>{const P=getValueTransition(S,o)||{},R=P.delay||S.delay||0;let{elapsed:I=0}=S;I=I-secondsToMilliseconds(R);let L={keyframes:Array.isArray(T)?T:[null,T],ease:"easeOut",velocity:u.getVelocity(),...P,delay:-I,onUpdate:M=>{u.set(M),P.onUpdate&&P.onUpdate(M)},onComplete:()=>{_(),P.onComplete&&P.onComplete()},name:o,motionValue:u,element:C?void 0:E};isTransitionDefined(P)||(L={...L,...getDefaultTransition(o,L)}),L.duration&&(L.duration=secondsToMilliseconds(L.duration)),L.repeatDelay&&(L.repeatDelay=secondsToMilliseconds(L.repeatDelay)),L.from!==void 0&&(L.keyframes[0]=L.from);let j=!1;if((L.type===!1||L.duration===0&&!L.repeatDelay)&&(L.duration=0,L.delay===0&&(j=!0)),j&&!C&&u.get()!==void 0){const M=getFinalKeyframe(L.keyframes,P);if(M!==void 0)return frame.update(()=>{L.onUpdate(M),L.onComplete()}),new GroupPlaybackControls([])}return!C&&AcceleratedAnimation.supports(L)?new AcceleratedAnimation(L):new MainThreadAnimation(L)};function shouldBlockAnimation({protectedKeys:o,needsAnimating:u},T){const S=o.hasOwnProperty(T)&&u[T]!==!0;return u[T]=!1,S}function animateTarget(o,u,{delay:T=0,transitionOverride:S,type:E}={}){var C;let{transition:_=o.getDefaultTransition(),transitionEnd:P,...R}=u;S&&(_=S);const I=[],L=E&&o.animationState&&o.animationState.getState()[E];for(const j in R){const M=o.getValue(j,(C=o.latestValues[j])!==null&&C!==void 0?C:null),D=R[j];if(D===void 0||L&&shouldBlockAnimation(L,j))continue;const F={delay:T,...getValueTransition(_||{},j)};let N=!1;if(window.MotionHandoffAnimation){const B=getOptimisedAppearId(o);if(B){const H=window.MotionHandoffAnimation(B,j,frame);H!==null&&(F.startTime=H,N=!0)}}addValueToWillChange(o,j),M.start(animateMotionValue(j,M,D,o.shouldReduceMotion&&positionalKeys.has(j)?{type:!1}:F,o,N));const G=M.animation;G&&I.push(G)}return P&&Promise.all(I).then(()=>{frame.update(()=>{P&&setTarget(o,P)})}),I}function animateVariant(o,u,T={}){var S;const E=resolveVariant(o,u,T.type==="exit"?(S=o.presenceContext)===null||S===void 0?void 0:S.custom:void 0);let{transition:C=o.getDefaultTransition()||{}}=E||{};T.transitionOverride&&(C=T.transitionOverride);const _=E?()=>Promise.all(animateTarget(o,E,T)):()=>Promise.resolve(),P=o.variantChildren&&o.variantChildren.size?(I=0)=>{const{delayChildren:L=0,staggerChildren:j,staggerDirection:M}=C;return animateChildren(o,u,L+I,j,M,T)}:()=>Promise.resolve(),{when:R}=C;if(R){const[I,L]=R==="beforeChildren"?[_,P]:[P,_];return I().then(()=>L())}else return Promise.all([_(),P(T.delay)])}function animateChildren(o,u,T=0,S=0,E=1,C){const _=[],P=(o.variantChildren.size-1)*S,R=E===1?(I=0)=>I*S:(I=0)=>P-I*S;return Array.from(o.variantChildren).sort(sortByTreeOrder).forEach((I,L)=>{I.notify("AnimationStart",u),_.push(animateVariant(I,u,{...C,delay:T+R(L)}).then(()=>I.notify("AnimationComplete",u)))}),Promise.all(_)}function sortByTreeOrder(o,u){return o.sortNodePosition(u)}function animateVisualElement(o,u,T={}){o.notify("AnimationStart",u);let S;if(Array.isArray(u)){const E=u.map(C=>animateVariant(o,C,T));S=Promise.all(E)}else if(typeof u=="string")S=animateVariant(o,u,T);else{const E=typeof u=="function"?resolveVariant(o,u,T.custom):u;S=Promise.all(animateTarget(o,E,T))}return S.then(()=>{o.notify("AnimationComplete",u)})}const numVariantProps=variantProps.length;function getVariantContext(o){if(!o)return;if(!o.isControllingVariants){const T=o.parent?getVariantContext(o.parent)||{}:{};return o.props.initial!==void 0&&(T.initial=o.props.initial),T}const u={};for(let T=0;T<numVariantProps;T++){const S=variantProps[T],E=o.props[S];(isVariantLabel(E)||E===!1)&&(u[S]=E)}return u}const reversePriorityOrder=[...variantPriorityOrder].reverse(),numAnimationTypes=variantPriorityOrder.length;function animateList(o){return u=>Promise.all(u.map(({animation:T,options:S})=>animateVisualElement(o,T,S)))}function createAnimationState(o){let u=animateList(o),T=createState(),S=!0;const E=R=>(I,L)=>{var j;const M=resolveVariant(o,L,R==="exit"?(j=o.presenceContext)===null||j===void 0?void 0:j.custom:void 0);if(M){const{transition:D,transitionEnd:F,...N}=M;I={...I,...N,...F}}return I};function C(R){u=R(o)}function _(R){const{props:I}=o,L=getVariantContext(o.parent)||{},j=[],M=new Set;let D={},F=1/0;for(let G=0;G<numAnimationTypes;G++){const B=reversePriorityOrder[G],H=T[B],O=I[B]!==void 0?I[B]:L[B],V=isVariantLabel(O),U=B===R?H.isActive:null;U===!1&&(F=G);let W=O===L[B]&&O!==I[B]&&V;if(W&&S&&o.manuallyAnimateOnMount&&(W=!1),H.protectedKeys={...D},!H.isActive&&U===null||!O&&!H.prevProp||isAnimationControls(O)||typeof O=="boolean")continue;const K=checkVariantsDidChange(H.prevProp,O);let Y=K||B===R&&H.isActive&&!W&&V||G>F&&V,ee=!1;const oe=Array.isArray(O)?O:[O];let se=oe.reduce(E(B),{});U===!1&&(se={});const{prevResolvedValues:Q={}}=H,ie={...Q,...se},ae=te=>{Y=!0,M.has(te)&&(ee=!0,M.delete(te)),H.needsAnimating[te]=!0;const Z=o.getValue(te);Z&&(Z.liveStyle=!1)};for(const te in ie){const Z=se[te],X=Q[te];if(D.hasOwnProperty(te))continue;let de=!1;isKeyframesTarget(Z)&&isKeyframesTarget(X)?de=!shallowCompare(Z,X):de=Z!==X,de?Z!=null?ae(te):M.add(te):Z!==void 0&&M.has(te)?ae(te):H.protectedKeys[te]=!0}H.prevProp=O,H.prevResolvedValues=se,H.isActive&&(D={...D,...se}),S&&o.blockInitialAnimation&&(Y=!1),Y&&(!(W&&K)||ee)&&j.push(...oe.map(te=>({animation:te,options:{type:B}})))}if(M.size){const G={};M.forEach(B=>{const H=o.getBaseTarget(B),O=o.getValue(B);O&&(O.liveStyle=!0),G[B]=H??null}),j.push({animation:G})}let N=!!j.length;return S&&(I.initial===!1||I.initial===I.animate)&&!o.manuallyAnimateOnMount&&(N=!1),S=!1,N?u(j):Promise.resolve()}function P(R,I){var L;if(T[R].isActive===I)return Promise.resolve();(L=o.variantChildren)===null||L===void 0||L.forEach(M=>{var D;return(D=M.animationState)===null||D===void 0?void 0:D.setActive(R,I)}),T[R].isActive=I;const j=_(R);for(const M in T)T[M].protectedKeys={};return j}return{animateChanges:_,setActive:P,setAnimateFunction:C,getState:()=>T,reset:()=>{T=createState(),S=!0}}}function checkVariantsDidChange(o,u){return typeof u=="string"?u!==o:Array.isArray(u)?!shallowCompare(u,o):!1}function createTypeState(o=!1){return{isActive:o,protectedKeys:{},needsAnimating:{},prevResolvedValues:{}}}function createState(){return{animate:createTypeState(!0),whileInView:createTypeState(),whileHover:createTypeState(),whileTap:createTypeState(),whileDrag:createTypeState(),whileFocus:createTypeState(),exit:createTypeState()}}class Feature{constructor(u){this.isMounted=!1,this.node=u}update(){}}class AnimationFeature extends Feature{constructor(u){super(u),u.animationState||(u.animationState=createAnimationState(u))}updateAnimationControlsSubscription(){const{animate:u}=this.node.getProps();isAnimationControls(u)&&(this.unmountControls=u.subscribe(this.node))}mount(){this.updateAnimationControlsSubscription()}update(){const{animate:u}=this.node.getProps(),{animate:T}=this.node.prevProps||{};u!==T&&this.updateAnimationControlsSubscription()}unmount(){var u;this.node.animationState.reset(),(u=this.unmountControls)===null||u===void 0||u.call(this)}}let id$1=0;class ExitAnimationFeature extends Feature{constructor(){super(...arguments),this.id=id$1++}update(){if(!this.node.presenceContext)return;const{isPresent:u,onExitComplete:T}=this.node.presenceContext,{isPresent:S}=this.node.prevPresenceContext||{};if(!this.node.animationState||u===S)return;const E=this.node.animationState.setActive("exit",!u);T&&!u&&E.then(()=>T(this.id))}mount(){const{register:u}=this.node.presenceContext||{};u&&(this.unmount=u(this.id))}unmount(){}}const animations={animation:{Feature:AnimationFeature},exit:{Feature:ExitAnimationFeature}};function addDomEvent(o,u,T,S={passive:!0}){return o.addEventListener(u,T,S),()=>o.removeEventListener(u,T)}function extractEventInfo(o){return{point:{x:o.pageX,y:o.pageY}}}const addPointerInfo=o=>u=>isPrimaryPointer(u)&&o(u,extractEventInfo(u));function addPointerEvent(o,u,T,S){return addDomEvent(o,u,addPointerInfo(T),S)}const distance=(o,u)=>Math.abs(o-u);function distance2D(o,u){const T=distance(o.x,u.x),S=distance(o.y,u.y);return Math.sqrt(T**2+S**2)}class PanSession{constructor(u,T,{transformPagePoint:S,contextWindow:E,dragSnapToOrigin:C=!1}={}){if(this.startEvent=null,this.lastMoveEvent=null,this.lastMoveEventInfo=null,this.handlers={},this.contextWindow=window,this.updatePoint=()=>{if(!(this.lastMoveEvent&&this.lastMoveEventInfo))return;const j=getPanInfo(this.lastMoveEventInfo,this.history),M=this.startEvent!==null,D=distance2D(j.offset,{x:0,y:0})>=3;if(!M&&!D)return;const{point:F}=j,{timestamp:N}=frameData;this.history.push({...F,timestamp:N});const{onStart:G,onMove:B}=this.handlers;M||(G&&G(this.lastMoveEvent,j),this.startEvent=this.lastMoveEvent),B&&B(this.lastMoveEvent,j)},this.handlePointerMove=(j,M)=>{this.lastMoveEvent=j,this.lastMoveEventInfo=transformPoint(M,this.transformPagePoint),frame.update(this.updatePoint,!0)},this.handlePointerUp=(j,M)=>{this.end();const{onEnd:D,onSessionEnd:F,resumeAnimation:N}=this.handlers;if(this.dragSnapToOrigin&&N&&N(),!(this.lastMoveEvent&&this.lastMoveEventInfo))return;const G=getPanInfo(j.type==="pointercancel"?this.lastMoveEventInfo:transformPoint(M,this.transformPagePoint),this.history);this.startEvent&&D&&D(j,G),F&&F(j,G)},!isPrimaryPointer(u))return;this.dragSnapToOrigin=C,this.handlers=T,this.transformPagePoint=S,this.contextWindow=E||window;const _=extractEventInfo(u),P=transformPoint(_,this.transformPagePoint),{point:R}=P,{timestamp:I}=frameData;this.history=[{...R,timestamp:I}];const{onSessionStart:L}=T;L&&L(u,getPanInfo(P,this.history)),this.removeListeners=pipe(addPointerEvent(this.contextWindow,"pointermove",this.handlePointerMove),addPointerEvent(this.contextWindow,"pointerup",this.handlePointerUp),addPointerEvent(this.contextWindow,"pointercancel",this.handlePointerUp))}updateHandlers(u){this.handlers=u}end(){this.removeListeners&&this.removeListeners(),cancelFrame(this.updatePoint)}}function transformPoint(o,u){return u?{point:u(o.point)}:o}function subtractPoint(o,u){return{x:o.x-u.x,y:o.y-u.y}}function getPanInfo({point:o},u){return{point:o,delta:subtractPoint(o,lastDevicePoint(u)),offset:subtractPoint(o,startDevicePoint(u)),velocity:getVelocity(u,.1)}}function startDevicePoint(o){return o[0]}function lastDevicePoint(o){return o[o.length-1]}function getVelocity(o,u){if(o.length<2)return{x:0,y:0};let T=o.length-1,S=null;const E=lastDevicePoint(o);for(;T>=0&&(S=o[T],!(E.timestamp-S.timestamp>secondsToMilliseconds(u)));)T--;if(!S)return{x:0,y:0};const C=millisecondsToSeconds(E.timestamp-S.timestamp);if(C===0)return{x:0,y:0};const _={x:(E.x-S.x)/C,y:(E.y-S.y)/C};return _.x===1/0&&(_.x=0),_.y===1/0&&(_.y=0),_}const SCALE_PRECISION=1e-4,SCALE_MIN=1-SCALE_PRECISION,SCALE_MAX=1+SCALE_PRECISION,TRANSLATE_PRECISION=.01,TRANSLATE_MIN=0-TRANSLATE_PRECISION,TRANSLATE_MAX=0+TRANSLATE_PRECISION;function calcLength(o){return o.max-o.min}function isNear(o,u,T){return Math.abs(o-u)<=T}function calcAxisDelta(o,u,T,S=.5){o.origin=S,o.originPoint=mixNumber$1(u.min,u.max,o.origin),o.scale=calcLength(T)/calcLength(u),o.translate=mixNumber$1(T.min,T.max,o.origin)-o.originPoint,(o.scale>=SCALE_MIN&&o.scale<=SCALE_MAX||isNaN(o.scale))&&(o.scale=1),(o.translate>=TRANSLATE_MIN&&o.translate<=TRANSLATE_MAX||isNaN(o.translate))&&(o.translate=0)}function calcBoxDelta(o,u,T,S){calcAxisDelta(o.x,u.x,T.x,S?S.originX:void 0),calcAxisDelta(o.y,u.y,T.y,S?S.originY:void 0)}function calcRelativeAxis(o,u,T){o.min=T.min+u.min,o.max=o.min+calcLength(u)}function calcRelativeBox(o,u,T){calcRelativeAxis(o.x,u.x,T.x),calcRelativeAxis(o.y,u.y,T.y)}function calcRelativeAxisPosition(o,u,T){o.min=u.min-T.min,o.max=o.min+calcLength(u)}function calcRelativePosition(o,u,T){calcRelativeAxisPosition(o.x,u.x,T.x),calcRelativeAxisPosition(o.y,u.y,T.y)}function applyConstraints(o,{min:u,max:T},S){return u!==void 0&&o<u?o=S?mixNumber$1(u,o,S.min):Math.max(o,u):T!==void 0&&o>T&&(o=S?mixNumber$1(T,o,S.max):Math.min(o,T)),o}function calcRelativeAxisConstraints(o,u,T){return{min:u!==void 0?o.min+u:void 0,max:T!==void 0?o.max+T-(o.max-o.min):void 0}}function calcRelativeConstraints(o,{top:u,left:T,bottom:S,right:E}){return{x:calcRelativeAxisConstraints(o.x,T,E),y:calcRelativeAxisConstraints(o.y,u,S)}}function calcViewportAxisConstraints(o,u){let T=u.min-o.min,S=u.max-o.max;return u.max-u.min<o.max-o.min&&([T,S]=[S,T]),{min:T,max:S}}function calcViewportConstraints(o,u){return{x:calcViewportAxisConstraints(o.x,u.x),y:calcViewportAxisConstraints(o.y,u.y)}}function calcOrigin(o,u){let T=.5;const S=calcLength(o),E=calcLength(u);return E>S?T=progress(u.min,u.max-S,o.min):S>E&&(T=progress(o.min,o.max-E,u.min)),clamp(0,1,T)}function rebaseAxisConstraints(o,u){const T={};return u.min!==void 0&&(T.min=u.min-o.min),u.max!==void 0&&(T.max=u.max-o.min),T}const defaultElastic=.35;function resolveDragElastic(o=defaultElastic){return o===!1?o=0:o===!0&&(o=defaultElastic),{x:resolveAxisElastic(o,"left","right"),y:resolveAxisElastic(o,"top","bottom")}}function resolveAxisElastic(o,u,T){return{min:resolvePointElastic(o,u),max:resolvePointElastic(o,T)}}function resolvePointElastic(o,u){return typeof o=="number"?o:o[u]||0}const createAxisDelta=()=>({translate:0,scale:1,origin:0,originPoint:0}),createDelta=()=>({x:createAxisDelta(),y:createAxisDelta()}),createAxis=()=>({min:0,max:0}),createBox=()=>({x:createAxis(),y:createAxis()});function eachAxis(o){return[o("x"),o("y")]}function convertBoundingBoxToBox({top:o,left:u,right:T,bottom:S}){return{x:{min:u,max:T},y:{min:o,max:S}}}function convertBoxToBoundingBox({x:o,y:u}){return{top:u.min,right:o.max,bottom:u.max,left:o.min}}function transformBoxPoints(o,u){if(!u)return o;const T=u({x:o.left,y:o.top}),S=u({x:o.right,y:o.bottom});return{top:T.y,left:T.x,bottom:S.y,right:S.x}}function isIdentityScale(o){return o===void 0||o===1}function hasScale({scale:o,scaleX:u,scaleY:T}){return!isIdentityScale(o)||!isIdentityScale(u)||!isIdentityScale(T)}function hasTransform(o){return hasScale(o)||has2DTranslate(o)||o.z||o.rotate||o.rotateX||o.rotateY||o.skewX||o.skewY}function has2DTranslate(o){return is2DTranslate(o.x)||is2DTranslate(o.y)}function is2DTranslate(o){return o&&o!=="0%"}function scalePoint(o,u,T){const S=o-T,E=u*S;return T+E}function applyPointDelta(o,u,T,S,E){return E!==void 0&&(o=scalePoint(o,E,S)),scalePoint(o,T,S)+u}function applyAxisDelta(o,u=0,T=1,S,E){o.min=applyPointDelta(o.min,u,T,S,E),o.max=applyPointDelta(o.max,u,T,S,E)}function applyBoxDelta(o,{x:u,y:T}){applyAxisDelta(o.x,u.translate,u.scale,u.originPoint),applyAxisDelta(o.y,T.translate,T.scale,T.originPoint)}const TREE_SCALE_SNAP_MIN=.999999999999,TREE_SCALE_SNAP_MAX=1.0000000000001;function applyTreeDeltas(o,u,T,S=!1){const E=T.length;if(!E)return;u.x=u.y=1;let C,_;for(let P=0;P<E;P++){C=T[P],_=C.projectionDelta;const{visualElement:R}=C.options;R&&R.props.style&&R.props.style.display==="contents"||(S&&C.options.layoutScroll&&C.scroll&&C!==C.root&&transformBox(o,{x:-C.scroll.offset.x,y:-C.scroll.offset.y}),_&&(u.x*=_.x.scale,u.y*=_.y.scale,applyBoxDelta(o,_)),S&&hasTransform(C.latestValues)&&transformBox(o,C.latestValues))}u.x<TREE_SCALE_SNAP_MAX&&u.x>TREE_SCALE_SNAP_MIN&&(u.x=1),u.y<TREE_SCALE_SNAP_MAX&&u.y>TREE_SCALE_SNAP_MIN&&(u.y=1)}function translateAxis(o,u){o.min=o.min+u,o.max=o.max+u}function transformAxis(o,u,T,S,E=.5){const C=mixNumber$1(o.min,o.max,E);applyAxisDelta(o,u,T,C,S)}function transformBox(o,u){transformAxis(o.x,u.x,u.scaleX,u.scale,u.originX),transformAxis(o.y,u.y,u.scaleY,u.scale,u.originY)}function measureViewportBox(o,u){return convertBoundingBoxToBox(transformBoxPoints(o.getBoundingClientRect(),u))}function measurePageBox(o,u,T){const S=measureViewportBox(o,T),{scroll:E}=u;return E&&(translateAxis(S.x,E.offset.x),translateAxis(S.y,E.offset.y)),S}const getContextWindow=({current:o})=>o?o.ownerDocument.defaultView:null,elementDragControls=new WeakMap;class VisualElementDragControls{constructor(u){this.openDragLock=null,this.isDragging=!1,this.currentDirection=null,this.originPoint={x:0,y:0},this.constraints=!1,this.hasMutatedConstraints=!1,this.elastic=createBox(),this.visualElement=u}start(u,{snapToCursor:T=!1}={}){const{presenceContext:S}=this.visualElement;if(S&&S.isPresent===!1)return;const E=L=>{const{dragSnapToOrigin:j}=this.getProps();j?this.pauseAnimation():this.stopAnimation(),T&&this.snapToCursor(extractEventInfo(L).point)},C=(L,j)=>{const{drag:M,dragPropagation:D,onDragStart:F}=this.getProps();if(M&&!D&&(this.openDragLock&&this.openDragLock(),this.openDragLock=setDragLock(M),!this.openDragLock))return;this.isDragging=!0,this.currentDirection=null,this.resolveConstraints(),this.visualElement.projection&&(this.visualElement.projection.isAnimationBlocked=!0,this.visualElement.projection.target=void 0),eachAxis(G=>{let B=this.getAxisMotionValue(G).get()||0;if(percent.test(B)){const{projection:H}=this.visualElement;if(H&&H.layout){const O=H.layout.layoutBox[G];O&&(B=calcLength(O)*(parseFloat(B)/100))}}this.originPoint[G]=B}),F&&frame.postRender(()=>F(L,j)),addValueToWillChange(this.visualElement,"transform");const{animationState:N}=this.visualElement;N&&N.setActive("whileDrag",!0)},_=(L,j)=>{const{dragPropagation:M,dragDirectionLock:D,onDirectionLock:F,onDrag:N}=this.getProps();if(!M&&!this.openDragLock)return;const{offset:G}=j;if(D&&this.currentDirection===null){this.currentDirection=getCurrentDirection(G),this.currentDirection!==null&&F&&F(this.currentDirection);return}this.updateAxis("x",j.point,G),this.updateAxis("y",j.point,G),this.visualElement.render(),N&&N(L,j)},P=(L,j)=>this.stop(L,j),R=()=>eachAxis(L=>{var j;return this.getAnimationState(L)==="paused"&&((j=this.getAxisMotionValue(L).animation)===null||j===void 0?void 0:j.play())}),{dragSnapToOrigin:I}=this.getProps();this.panSession=new PanSession(u,{onSessionStart:E,onStart:C,onMove:_,onSessionEnd:P,resumeAnimation:R},{transformPagePoint:this.visualElement.getTransformPagePoint(),dragSnapToOrigin:I,contextWindow:getContextWindow(this.visualElement)})}stop(u,T){const S=this.isDragging;if(this.cancel(),!S)return;const{velocity:E}=T;this.startAnimation(E);const{onDragEnd:C}=this.getProps();C&&frame.postRender(()=>C(u,T))}cancel(){this.isDragging=!1;const{projection:u,animationState:T}=this.visualElement;u&&(u.isAnimationBlocked=!1),this.panSession&&this.panSession.end(),this.panSession=void 0;const{dragPropagation:S}=this.getProps();!S&&this.openDragLock&&(this.openDragLock(),this.openDragLock=null),T&&T.setActive("whileDrag",!1)}updateAxis(u,T,S){const{drag:E}=this.getProps();if(!S||!shouldDrag(u,E,this.currentDirection))return;const C=this.getAxisMotionValue(u);let _=this.originPoint[u]+S[u];this.constraints&&this.constraints[u]&&(_=applyConstraints(_,this.constraints[u],this.elastic[u])),C.set(_)}resolveConstraints(){var u;const{dragConstraints:T,dragElastic:S}=this.getProps(),E=this.visualElement.projection&&!this.visualElement.projection.layout?this.visualElement.projection.measure(!1):(u=this.visualElement.projection)===null||u===void 0?void 0:u.layout,C=this.constraints;T&&isRefObject(T)?this.constraints||(this.constraints=this.resolveRefConstraints()):T&&E?this.constraints=calcRelativeConstraints(E.layoutBox,T):this.constraints=!1,this.elastic=resolveDragElastic(S),C!==this.constraints&&E&&this.constraints&&!this.hasMutatedConstraints&&eachAxis(_=>{this.constraints!==!1&&this.getAxisMotionValue(_)&&(this.constraints[_]=rebaseAxisConstraints(E.layoutBox[_],this.constraints[_]))})}resolveRefConstraints(){const{dragConstraints:u,onMeasureDragConstraints:T}=this.getProps();if(!u||!isRefObject(u))return!1;const S=u.current,{projection:E}=this.visualElement;if(!E||!E.layout)return!1;const C=measurePageBox(S,E.root,this.visualElement.getTransformPagePoint());let _=calcViewportConstraints(E.layout.layoutBox,C);if(T){const P=T(convertBoxToBoundingBox(_));this.hasMutatedConstraints=!!P,P&&(_=convertBoundingBoxToBox(P))}return _}startAnimation(u){const{drag:T,dragMomentum:S,dragElastic:E,dragTransition:C,dragSnapToOrigin:_,onDragTransitionEnd:P}=this.getProps(),R=this.constraints||{},I=eachAxis(L=>{if(!shouldDrag(L,T,this.currentDirection))return;let j=R&&R[L]||{};_&&(j={min:0,max:0});const M=E?200:1e6,D=E?40:1e7,F={type:"inertia",velocity:S?u[L]:0,bounceStiffness:M,bounceDamping:D,timeConstant:750,restDelta:1,restSpeed:10,...C,...j};return this.startAxisValueAnimation(L,F)});return Promise.all(I).then(P)}startAxisValueAnimation(u,T){const S=this.getAxisMotionValue(u);return addValueToWillChange(this.visualElement,u),S.start(animateMotionValue(u,S,0,T,this.visualElement,!1))}stopAnimation(){eachAxis(u=>this.getAxisMotionValue(u).stop())}pauseAnimation(){eachAxis(u=>{var T;return(T=this.getAxisMotionValue(u).animation)===null||T===void 0?void 0:T.pause()})}getAnimationState(u){var T;return(T=this.getAxisMotionValue(u).animation)===null||T===void 0?void 0:T.state}getAxisMotionValue(u){const T=`_drag${u.toUpperCase()}`,S=this.visualElement.getProps(),E=S[T];return E||this.visualElement.getValue(u,(S.initial?S.initial[u]:void 0)||0)}snapToCursor(u){eachAxis(T=>{const{drag:S}=this.getProps();if(!shouldDrag(T,S,this.currentDirection))return;const{projection:E}=this.visualElement,C=this.getAxisMotionValue(T);if(E&&E.layout){const{min:_,max:P}=E.layout.layoutBox[T];C.set(u[T]-mixNumber$1(_,P,.5))}})}scalePositionWithinConstraints(){if(!this.visualElement.current)return;const{drag:u,dragConstraints:T}=this.getProps(),{projection:S}=this.visualElement;if(!isRefObject(T)||!S||!this.constraints)return;this.stopAnimation();const E={x:0,y:0};eachAxis(_=>{const P=this.getAxisMotionValue(_);if(P&&this.constraints!==!1){const R=P.get();E[_]=calcOrigin({min:R,max:R},this.constraints[_])}});const{transformTemplate:C}=this.visualElement.getProps();this.visualElement.current.style.transform=C?C({},""):"none",S.root&&S.root.updateScroll(),S.updateLayout(),this.resolveConstraints(),eachAxis(_=>{if(!shouldDrag(_,u,null))return;const P=this.getAxisMotionValue(_),{min:R,max:I}=this.constraints[_];P.set(mixNumber$1(R,I,E[_]))})}addListeners(){if(!this.visualElement.current)return;elementDragControls.set(this.visualElement,this);const u=this.visualElement.current,T=addPointerEvent(u,"pointerdown",R=>{const{drag:I,dragListener:L=!0}=this.getProps();I&&L&&this.start(R)}),S=()=>{const{dragConstraints:R}=this.getProps();isRefObject(R)&&R.current&&(this.constraints=this.resolveRefConstraints())},{projection:E}=this.visualElement,C=E.addEventListener("measure",S);E&&!E.layout&&(E.root&&E.root.updateScroll(),E.updateLayout()),frame.read(S);const _=addDomEvent(window,"resize",()=>this.scalePositionWithinConstraints()),P=E.addEventListener("didUpdate",({delta:R,hasLayoutChanged:I})=>{this.isDragging&&I&&(eachAxis(L=>{const j=this.getAxisMotionValue(L);j&&(this.originPoint[L]+=R[L].translate,j.set(j.get()+R[L].translate))}),this.visualElement.render())});return()=>{_(),T(),C(),P&&P()}}getProps(){const u=this.visualElement.getProps(),{drag:T=!1,dragDirectionLock:S=!1,dragPropagation:E=!1,dragConstraints:C=!1,dragElastic:_=defaultElastic,dragMomentum:P=!0}=u;return{...u,drag:T,dragDirectionLock:S,dragPropagation:E,dragConstraints:C,dragElastic:_,dragMomentum:P}}}function shouldDrag(o,u,T){return(u===!0||u===o)&&(T===null||T===o)}function getCurrentDirection(o,u=10){let T=null;return Math.abs(o.y)>u?T="y":Math.abs(o.x)>u&&(T="x"),T}class DragGesture extends Feature{constructor(u){super(u),this.removeGroupControls=noop$1,this.removeListeners=noop$1,this.controls=new VisualElementDragControls(u)}mount(){const{dragControls:u}=this.node.getProps();u&&(this.removeGroupControls=u.subscribe(this.controls)),this.removeListeners=this.controls.addListeners()||noop$1}unmount(){this.removeGroupControls(),this.removeListeners()}}const asyncHandler=o=>(u,T)=>{o&&frame.postRender(()=>o(u,T))};class PanGesture extends Feature{constructor(){super(...arguments),this.removePointerDownListener=noop$1}onPointerDown(u){this.session=new PanSession(u,this.createPanHandlers(),{transformPagePoint:this.node.getTransformPagePoint(),contextWindow:getContextWindow(this.node)})}createPanHandlers(){const{onPanSessionStart:u,onPanStart:T,onPan:S,onPanEnd:E}=this.node.getProps();return{onSessionStart:asyncHandler(u),onStart:asyncHandler(T),onMove:S,onEnd:(C,_)=>{delete this.session,E&&frame.postRender(()=>E(C,_))}}}mount(){this.removePointerDownListener=addPointerEvent(this.node.current,"pointerdown",u=>this.onPointerDown(u))}update(){this.session&&this.session.updateHandlers(this.createPanHandlers())}unmount(){this.removePointerDownListener(),this.session&&this.session.end()}}const globalProjectionState={hasAnimatedSinceResize:!0,hasEverUpdated:!1};function pixelsToPercent(o,u){return u.max===u.min?0:o/(u.max-u.min)*100}const correctBorderRadius={correct:(o,u)=>{if(!u.target)return o;if(typeof o=="string")if(px.test(o))o=parseFloat(o);else return o;const T=pixelsToPercent(o,u.target.x),S=pixelsToPercent(o,u.target.y);return`${T}% ${S}%`}},correctBoxShadow={correct:(o,{treeScale:u,projectionDelta:T})=>{const S=o,E=complex.parse(o);if(E.length>5)return S;const C=complex.createTransformer(o),_=typeof E[0]!="number"?1:0,P=T.x.scale*u.x,R=T.y.scale*u.y;E[0+_]/=P,E[1+_]/=R;const I=mixNumber$1(P,R,.5);return typeof E[2+_]=="number"&&(E[2+_]/=I),typeof E[3+_]=="number"&&(E[3+_]/=I),C(E)}};class MeasureLayoutWithContext extends reactExports.Component{componentDidMount(){const{visualElement:u,layoutGroup:T,switchLayoutGroup:S,layoutId:E}=this.props,{projection:C}=u;addScaleCorrector(defaultScaleCorrectors),C&&(T.group&&T.group.add(C),S&&S.register&&E&&S.register(C),C.root.didUpdate(),C.addEventListener("animationComplete",()=>{this.safeToRemove()}),C.setOptions({...C.options,onExitComplete:()=>this.safeToRemove()})),globalProjectionState.hasEverUpdated=!0}getSnapshotBeforeUpdate(u){const{layoutDependency:T,visualElement:S,drag:E,isPresent:C}=this.props,_=S.projection;return _&&(_.isPresent=C,E||u.layoutDependency!==T||T===void 0?_.willUpdate():this.safeToRemove(),u.isPresent!==C&&(C?_.promote():_.relegate()||frame.postRender(()=>{const P=_.getStack();(!P||!P.members.length)&&this.safeToRemove()}))),null}componentDidUpdate(){const{projection:u}=this.props.visualElement;u&&(u.root.didUpdate(),microtask.postRender(()=>{!u.currentAnimation&&u.isLead()&&this.safeToRemove()}))}componentWillUnmount(){const{visualElement:u,layoutGroup:T,switchLayoutGroup:S}=this.props,{projection:E}=u;E&&(E.scheduleCheckAfterUnmount(),T&&T.group&&T.group.remove(E),S&&S.deregister&&S.deregister(E))}safeToRemove(){const{safeToRemove:u}=this.props;u&&u()}render(){return null}}function MeasureLayout(o){const[u,T]=usePresence(),S=reactExports.useContext(LayoutGroupContext);return jsxRuntimeExports.jsx(MeasureLayoutWithContext,{...o,layoutGroup:S,switchLayoutGroup:reactExports.useContext(SwitchLayoutGroupContext),isPresent:u,safeToRemove:T})}const defaultScaleCorrectors={borderRadius:{...correctBorderRadius,applyTo:["borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius"]},borderTopLeftRadius:correctBorderRadius,borderTopRightRadius:correctBorderRadius,borderBottomLeftRadius:correctBorderRadius,borderBottomRightRadius:correctBorderRadius,boxShadow:correctBoxShadow};function animateSingleValue(o,u,T){const S=isMotionValue(o)?o:motionValue(o);return S.start(animateMotionValue("",S,u,T)),S.animation}function isSVGElement(o){return o instanceof SVGElement&&o.tagName!=="svg"}const compareByDepth=(o,u)=>o.depth-u.depth;class FlatTree{constructor(){this.children=[],this.isDirty=!1}add(u){addUniqueItem(this.children,u),this.isDirty=!0}remove(u){removeItem(this.children,u),this.isDirty=!0}forEach(u){this.isDirty&&this.children.sort(compareByDepth),this.isDirty=!1,this.children.forEach(u)}}function delay(o,u){const T=time.now(),S=({timestamp:E})=>{const C=E-T;C>=u&&(cancelFrame(S),o(C-u))};return frame.read(S,!0),()=>cancelFrame(S)}const borders=["TopLeft","TopRight","BottomLeft","BottomRight"],numBorders=borders.length,asNumber=o=>typeof o=="string"?parseFloat(o):o,isPx=o=>typeof o=="number"||px.test(o);function mixValues(o,u,T,S,E,C){E?(o.opacity=mixNumber$1(0,T.opacity!==void 0?T.opacity:1,easeCrossfadeIn(S)),o.opacityExit=mixNumber$1(u.opacity!==void 0?u.opacity:1,0,easeCrossfadeOut(S))):C&&(o.opacity=mixNumber$1(u.opacity!==void 0?u.opacity:1,T.opacity!==void 0?T.opacity:1,S));for(let _=0;_<numBorders;_++){const P=`border${borders[_]}Radius`;let R=getRadius(u,P),I=getRadius(T,P);if(R===void 0&&I===void 0)continue;R||(R=0),I||(I=0),R===0||I===0||isPx(R)===isPx(I)?(o[P]=Math.max(mixNumber$1(asNumber(R),asNumber(I),S),0),(percent.test(I)||percent.test(R))&&(o[P]+="%")):o[P]=I}(u.rotate||T.rotate)&&(o.rotate=mixNumber$1(u.rotate||0,T.rotate||0,S))}function getRadius(o,u){return o[u]!==void 0?o[u]:o.borderRadius}const easeCrossfadeIn=compress(0,.5,circOut),easeCrossfadeOut=compress(.5,.95,noop$1);function compress(o,u,T){return S=>S<o?0:S>u?1:T(progress(o,u,S))}function copyAxisInto(o,u){o.min=u.min,o.max=u.max}function copyBoxInto(o,u){copyAxisInto(o.x,u.x),copyAxisInto(o.y,u.y)}function copyAxisDeltaInto(o,u){o.translate=u.translate,o.scale=u.scale,o.originPoint=u.originPoint,o.origin=u.origin}function removePointDelta(o,u,T,S,E){return o-=u,o=scalePoint(o,1/T,S),E!==void 0&&(o=scalePoint(o,1/E,S)),o}function removeAxisDelta(o,u=0,T=1,S=.5,E,C=o,_=o){if(percent.test(u)&&(u=parseFloat(u),u=mixNumber$1(_.min,_.max,u/100)-_.min),typeof u!="number")return;let P=mixNumber$1(C.min,C.max,S);o===C&&(P-=u),o.min=removePointDelta(o.min,u,T,P,E),o.max=removePointDelta(o.max,u,T,P,E)}function removeAxisTransforms(o,u,[T,S,E],C,_){removeAxisDelta(o,u[T],u[S],u[E],u.scale,C,_)}const xKeys=["x","scaleX","originX"],yKeys=["y","scaleY","originY"];function removeBoxTransforms(o,u,T,S){removeAxisTransforms(o.x,u,xKeys,T?T.x:void 0,S?S.x:void 0),removeAxisTransforms(o.y,u,yKeys,T?T.y:void 0,S?S.y:void 0)}function isAxisDeltaZero(o){return o.translate===0&&o.scale===1}function isDeltaZero(o){return isAxisDeltaZero(o.x)&&isAxisDeltaZero(o.y)}function axisEquals(o,u){return o.min===u.min&&o.max===u.max}function boxEquals(o,u){return axisEquals(o.x,u.x)&&axisEquals(o.y,u.y)}function axisEqualsRounded(o,u){return Math.round(o.min)===Math.round(u.min)&&Math.round(o.max)===Math.round(u.max)}function boxEqualsRounded(o,u){return axisEqualsRounded(o.x,u.x)&&axisEqualsRounded(o.y,u.y)}function aspectRatio(o){return calcLength(o.x)/calcLength(o.y)}function axisDeltaEquals(o,u){return o.translate===u.translate&&o.scale===u.scale&&o.originPoint===u.originPoint}class NodeStack{constructor(){this.members=[]}add(u){addUniqueItem(this.members,u),u.scheduleRender()}remove(u){if(removeItem(this.members,u),u===this.prevLead&&(this.prevLead=void 0),u===this.lead){const T=this.members[this.members.length-1];T&&this.promote(T)}}relegate(u){const T=this.members.findIndex(E=>u===E);if(T===0)return!1;let S;for(let E=T;E>=0;E--){const C=this.members[E];if(C.isPresent!==!1){S=C;break}}return S?(this.promote(S),!0):!1}promote(u,T){const S=this.lead;if(u!==S&&(this.prevLead=S,this.lead=u,u.show(),S)){S.instance&&S.scheduleRender(),u.scheduleRender(),u.resumeFrom=S,T&&(u.resumeFrom.preserveOpacity=!0),S.snapshot&&(u.snapshot=S.snapshot,u.snapshot.latestValues=S.animationValues||S.latestValues),u.root&&u.root.isUpdating&&(u.isLayoutDirty=!0);const{crossfade:E}=u.options;E===!1&&S.hide()}}exitAnimationComplete(){this.members.forEach(u=>{const{options:T,resumingFrom:S}=u;T.onExitComplete&&T.onExitComplete(),S&&S.options.onExitComplete&&S.options.onExitComplete()})}scheduleRender(){this.members.forEach(u=>{u.instance&&u.scheduleRender(!1)})}removeLeadSnapshot(){this.lead&&this.lead.snapshot&&(this.lead.snapshot=void 0)}}function buildProjectionTransform(o,u,T){let S="";const E=o.x.translate/u.x,C=o.y.translate/u.y,_=(T==null?void 0:T.z)||0;if((E||C||_)&&(S=`translate3d(${E}px, ${C}px, ${_}px) `),(u.x!==1||u.y!==1)&&(S+=`scale(${1/u.x}, ${1/u.y}) `),T){const{transformPerspective:I,rotate:L,rotateX:j,rotateY:M,skewX:D,skewY:F}=T;I&&(S=`perspective(${I}px) ${S}`),L&&(S+=`rotate(${L}deg) `),j&&(S+=`rotateX(${j}deg) `),M&&(S+=`rotateY(${M}deg) `),D&&(S+=`skewX(${D}deg) `),F&&(S+=`skewY(${F}deg) `)}const P=o.x.scale*u.x,R=o.y.scale*u.y;return(P!==1||R!==1)&&(S+=`scale(${P}, ${R})`),S||"none"}const metrics={type:"projectionFrame",totalNodes:0,resolvedTargetDeltas:0,recalculatedProjection:0},isDebug=typeof window<"u"&&window.MotionDebug!==void 0,transformAxes=["","X","Y","Z"],hiddenVisibility={visibility:"hidden"},animationTarget=1e3;let id=0;function resetDistortingTransform(o,u,T,S){const{latestValues:E}=u;E[o]&&(T[o]=E[o],u.setStaticValue(o,0),S&&(S[o]=0))}function cancelTreeOptimisedTransformAnimations(o){if(o.hasCheckedOptimisedAppear=!0,o.root===o)return;const{visualElement:u}=o.options;if(!u)return;const T=getOptimisedAppearId(u);if(window.MotionHasOptimisedAnimation(T,"transform")){const{layout:E,layoutId:C}=o.options;window.MotionCancelOptimisedAnimation(T,"transform",frame,!(E||C))}const{parent:S}=o;S&&!S.hasCheckedOptimisedAppear&&cancelTreeOptimisedTransformAnimations(S)}function createProjectionNode({attachResizeListener:o,defaultParent:u,measureScroll:T,checkIsScrollRoot:S,resetTransform:E}){return class{constructor(_={},P=u==null?void 0:u()){this.id=id++,this.animationId=0,this.children=new Set,this.options={},this.isTreeAnimating=!1,this.isAnimationBlocked=!1,this.isLayoutDirty=!1,this.isProjectionDirty=!1,this.isSharedProjectionDirty=!1,this.isTransformDirty=!1,this.updateManuallyBlocked=!1,this.updateBlockedByResize=!1,this.isUpdating=!1,this.isSVG=!1,this.needsReset=!1,this.shouldResetTransform=!1,this.hasCheckedOptimisedAppear=!1,this.treeScale={x:1,y:1},this.eventHandlers=new Map,this.hasTreeAnimated=!1,this.updateScheduled=!1,this.scheduleUpdate=()=>this.update(),this.projectionUpdateScheduled=!1,this.checkUpdateFailed=()=>{this.isUpdating&&(this.isUpdating=!1,this.clearAllSnapshots())},this.updateProjection=()=>{this.projectionUpdateScheduled=!1,isDebug&&(metrics.totalNodes=metrics.resolvedTargetDeltas=metrics.recalculatedProjection=0),this.nodes.forEach(propagateDirtyNodes),this.nodes.forEach(resolveTargetDelta),this.nodes.forEach(calcProjection),this.nodes.forEach(cleanDirtyNodes),isDebug&&window.MotionDebug.record(metrics)},this.resolvedRelativeTargetAt=0,this.hasProjected=!1,this.isVisible=!0,this.animationProgress=0,this.sharedNodes=new Map,this.latestValues=_,this.root=P?P.root||P:this,this.path=P?[...P.path,P]:[],this.parent=P,this.depth=P?P.depth+1:0;for(let R=0;R<this.path.length;R++)this.path[R].shouldResetTransform=!0;this.root===this&&(this.nodes=new FlatTree)}addEventListener(_,P){return this.eventHandlers.has(_)||this.eventHandlers.set(_,new SubscriptionManager),this.eventHandlers.get(_).add(P)}notifyListeners(_,...P){const R=this.eventHandlers.get(_);R&&R.notify(...P)}hasListeners(_){return this.eventHandlers.has(_)}mount(_,P=this.root.hasTreeAnimated){if(this.instance)return;this.isSVG=isSVGElement(_),this.instance=_;const{layoutId:R,layout:I,visualElement:L}=this.options;if(L&&!L.current&&L.mount(_),this.root.nodes.add(this),this.parent&&this.parent.children.add(this),P&&(I||R)&&(this.isLayoutDirty=!0),o){let j;const M=()=>this.root.updateBlockedByResize=!1;o(_,()=>{this.root.updateBlockedByResize=!0,j&&j(),j=delay(M,250),globalProjectionState.hasAnimatedSinceResize&&(globalProjectionState.hasAnimatedSinceResize=!1,this.nodes.forEach(finishAnimation))})}R&&this.root.registerSharedNode(R,this),this.options.animate!==!1&&L&&(R||I)&&this.addEventListener("didUpdate",({delta:j,hasLayoutChanged:M,hasRelativeTargetChanged:D,layout:F})=>{if(this.isTreeAnimationBlocked()){this.target=void 0,this.relativeTarget=void 0;return}const N=this.options.transition||L.getDefaultTransition()||defaultLayoutTransition,{onLayoutAnimationStart:G,onLayoutAnimationComplete:B}=L.getProps(),H=!this.targetLayout||!boxEqualsRounded(this.targetLayout,F)||D,O=!M&&D;if(this.options.layoutRoot||this.resumeFrom&&this.resumeFrom.instance||O||M&&(H||!this.currentAnimation)){this.resumeFrom&&(this.resumingFrom=this.resumeFrom,this.resumingFrom.resumingFrom=void 0),this.setAnimationOrigin(j,O);const V={...getValueTransition(N,"layout"),onPlay:G,onComplete:B};(L.shouldReduceMotion||this.options.layoutRoot)&&(V.delay=0,V.type=!1),this.startAnimation(V)}else M||finishAnimation(this),this.isLead()&&this.options.onExitComplete&&this.options.onExitComplete();this.targetLayout=F})}unmount(){this.options.layoutId&&this.willUpdate(),this.root.nodes.remove(this);const _=this.getStack();_&&_.remove(this),this.parent&&this.parent.children.delete(this),this.instance=void 0,cancelFrame(this.updateProjection)}blockUpdate(){this.updateManuallyBlocked=!0}unblockUpdate(){this.updateManuallyBlocked=!1}isUpdateBlocked(){return this.updateManuallyBlocked||this.updateBlockedByResize}isTreeAnimationBlocked(){return this.isAnimationBlocked||this.parent&&this.parent.isTreeAnimationBlocked()||!1}startUpdate(){this.isUpdateBlocked()||(this.isUpdating=!0,this.nodes&&this.nodes.forEach(resetSkewAndRotation),this.animationId++)}getTransformTemplate(){const{visualElement:_}=this.options;return _&&_.getProps().transformTemplate}willUpdate(_=!0){if(this.root.hasTreeAnimated=!0,this.root.isUpdateBlocked()){this.options.onExitComplete&&this.options.onExitComplete();return}if(window.MotionCancelOptimisedAnimation&&!this.hasCheckedOptimisedAppear&&cancelTreeOptimisedTransformAnimations(this),!this.root.isUpdating&&this.root.startUpdate(),this.isLayoutDirty)return;this.isLayoutDirty=!0;for(let L=0;L<this.path.length;L++){const j=this.path[L];j.shouldResetTransform=!0,j.updateScroll("snapshot"),j.options.layoutRoot&&j.willUpdate(!1)}const{layoutId:P,layout:R}=this.options;if(P===void 0&&!R)return;const I=this.getTransformTemplate();this.prevTransformTemplateValue=I?I(this.latestValues,""):void 0,this.updateSnapshot(),_&&this.notifyListeners("willUpdate")}update(){if(this.updateScheduled=!1,this.isUpdateBlocked()){this.unblockUpdate(),this.clearAllSnapshots(),this.nodes.forEach(clearMeasurements);return}this.isUpdating||this.nodes.forEach(clearIsLayoutDirty),this.isUpdating=!1,this.nodes.forEach(resetTransformStyle),this.nodes.forEach(updateLayout),this.nodes.forEach(notifyLayoutUpdate),this.clearAllSnapshots();const P=time.now();frameData.delta=clamp(0,1e3/60,P-frameData.timestamp),frameData.timestamp=P,frameData.isProcessing=!0,frameSteps.update.process(frameData),frameSteps.preRender.process(frameData),frameSteps.render.process(frameData),frameData.isProcessing=!1}didUpdate(){this.updateScheduled||(this.updateScheduled=!0,microtask.read(this.scheduleUpdate))}clearAllSnapshots(){this.nodes.forEach(clearSnapshot),this.sharedNodes.forEach(removeLeadSnapshots)}scheduleUpdateProjection(){this.projectionUpdateScheduled||(this.projectionUpdateScheduled=!0,frame.preRender(this.updateProjection,!1,!0))}scheduleCheckAfterUnmount(){frame.postRender(()=>{this.isLayoutDirty?this.root.didUpdate():this.root.checkUpdateFailed()})}updateSnapshot(){this.snapshot||!this.instance||(this.snapshot=this.measure())}updateLayout(){if(!this.instance||(this.updateScroll(),!(this.options.alwaysMeasureLayout&&this.isLead())&&!this.isLayoutDirty))return;if(this.resumeFrom&&!this.resumeFrom.instance)for(let R=0;R<this.path.length;R++)this.path[R].updateScroll();const _=this.layout;this.layout=this.measure(!1),this.layoutCorrected=createBox(),this.isLayoutDirty=!1,this.projectionDelta=void 0,this.notifyListeners("measure",this.layout.layoutBox);const{visualElement:P}=this.options;P&&P.notify("LayoutMeasure",this.layout.layoutBox,_?_.layoutBox:void 0)}updateScroll(_="measure"){let P=!!(this.options.layoutScroll&&this.instance);if(this.scroll&&this.scroll.animationId===this.root.animationId&&this.scroll.phase===_&&(P=!1),P){const R=S(this.instance);this.scroll={animationId:this.root.animationId,phase:_,isRoot:R,offset:T(this.instance),wasRoot:this.scroll?this.scroll.isRoot:R}}}resetTransform(){if(!E)return;const _=this.isLayoutDirty||this.shouldResetTransform||this.options.alwaysMeasureLayout,P=this.projectionDelta&&!isDeltaZero(this.projectionDelta),R=this.getTransformTemplate(),I=R?R(this.latestValues,""):void 0,L=I!==this.prevTransformTemplateValue;_&&(P||hasTransform(this.latestValues)||L)&&(E(this.instance,I),this.shouldResetTransform=!1,this.scheduleRender())}measure(_=!0){const P=this.measurePageBox();let R=this.removeElementScroll(P);return _&&(R=this.removeTransform(R)),roundBox(R),{animationId:this.root.animationId,measuredBox:P,layoutBox:R,latestValues:{},source:this.id}}measurePageBox(){var _;const{visualElement:P}=this.options;if(!P)return createBox();const R=P.measureViewportBox();if(!(((_=this.scroll)===null||_===void 0?void 0:_.wasRoot)||this.path.some(checkNodeWasScrollRoot))){const{scroll:L}=this.root;L&&(translateAxis(R.x,L.offset.x),translateAxis(R.y,L.offset.y))}return R}removeElementScroll(_){var P;const R=createBox();if(copyBoxInto(R,_),!((P=this.scroll)===null||P===void 0)&&P.wasRoot)return R;for(let I=0;I<this.path.length;I++){const L=this.path[I],{scroll:j,options:M}=L;L!==this.root&&j&&M.layoutScroll&&(j.wasRoot&&copyBoxInto(R,_),translateAxis(R.x,j.offset.x),translateAxis(R.y,j.offset.y))}return R}applyTransform(_,P=!1){const R=createBox();copyBoxInto(R,_);for(let I=0;I<this.path.length;I++){const L=this.path[I];!P&&L.options.layoutScroll&&L.scroll&&L!==L.root&&transformBox(R,{x:-L.scroll.offset.x,y:-L.scroll.offset.y}),hasTransform(L.latestValues)&&transformBox(R,L.latestValues)}return hasTransform(this.latestValues)&&transformBox(R,this.latestValues),R}removeTransform(_){const P=createBox();copyBoxInto(P,_);for(let R=0;R<this.path.length;R++){const I=this.path[R];if(!I.instance||!hasTransform(I.latestValues))continue;hasScale(I.latestValues)&&I.updateSnapshot();const L=createBox(),j=I.measurePageBox();copyBoxInto(L,j),removeBoxTransforms(P,I.latestValues,I.snapshot?I.snapshot.layoutBox:void 0,L)}return hasTransform(this.latestValues)&&removeBoxTransforms(P,this.latestValues),P}setTargetDelta(_){this.targetDelta=_,this.root.scheduleUpdateProjection(),this.isProjectionDirty=!0}setOptions(_){this.options={...this.options,..._,crossfade:_.crossfade!==void 0?_.crossfade:!0}}clearMeasurements(){this.scroll=void 0,this.layout=void 0,this.snapshot=void 0,this.prevTransformTemplateValue=void 0,this.targetDelta=void 0,this.target=void 0,this.isLayoutDirty=!1}forceRelativeParentToResolveTarget(){this.relativeParent&&this.relativeParent.resolvedRelativeTargetAt!==frameData.timestamp&&this.relativeParent.resolveTargetDelta(!0)}resolveTargetDelta(_=!1){var P;const R=this.getLead();this.isProjectionDirty||(this.isProjectionDirty=R.isProjectionDirty),this.isTransformDirty||(this.isTransformDirty=R.isTransformDirty),this.isSharedProjectionDirty||(this.isSharedProjectionDirty=R.isSharedProjectionDirty);const I=!!this.resumingFrom||this!==R;if(!(_||I&&this.isSharedProjectionDirty||this.isProjectionDirty||!((P=this.parent)===null||P===void 0)&&P.isProjectionDirty||this.attemptToResolveRelativeTarget||this.root.updateBlockedByResize))return;const{layout:j,layoutId:M}=this.options;if(!(!this.layout||!(j||M))){if(this.resolvedRelativeTargetAt=frameData.timestamp,!this.targetDelta&&!this.relativeTarget){const D=this.getClosestProjectingParent();D&&D.layout&&this.animationProgress!==1?(this.relativeParent=D,this.forceRelativeParentToResolveTarget(),this.relativeTarget=createBox(),this.relativeTargetOrigin=createBox(),calcRelativePosition(this.relativeTargetOrigin,this.layout.layoutBox,D.layout.layoutBox),copyBoxInto(this.relativeTarget,this.relativeTargetOrigin)):this.relativeParent=this.relativeTarget=void 0}if(!(!this.relativeTarget&&!this.targetDelta)){if(this.target||(this.target=createBox(),this.targetWithTransforms=createBox()),this.relativeTarget&&this.relativeTargetOrigin&&this.relativeParent&&this.relativeParent.target?(this.forceRelativeParentToResolveTarget(),calcRelativeBox(this.target,this.relativeTarget,this.relativeParent.target)):this.targetDelta?(this.resumingFrom?this.target=this.applyTransform(this.layout.layoutBox):copyBoxInto(this.target,this.layout.layoutBox),applyBoxDelta(this.target,this.targetDelta)):copyBoxInto(this.target,this.layout.layoutBox),this.attemptToResolveRelativeTarget){this.attemptToResolveRelativeTarget=!1;const D=this.getClosestProjectingParent();D&&!!D.resumingFrom==!!this.resumingFrom&&!D.options.layoutScroll&&D.target&&this.animationProgress!==1?(this.relativeParent=D,this.forceRelativeParentToResolveTarget(),this.relativeTarget=createBox(),this.relativeTargetOrigin=createBox(),calcRelativePosition(this.relativeTargetOrigin,this.target,D.target),copyBoxInto(this.relativeTarget,this.relativeTargetOrigin)):this.relativeParent=this.relativeTarget=void 0}isDebug&&metrics.resolvedTargetDeltas++}}}getClosestProjectingParent(){if(!(!this.parent||hasScale(this.parent.latestValues)||has2DTranslate(this.parent.latestValues)))return this.parent.isProjecting()?this.parent:this.parent.getClosestProjectingParent()}isProjecting(){return!!((this.relativeTarget||this.targetDelta||this.options.layoutRoot)&&this.layout)}calcProjection(){var _;const P=this.getLead(),R=!!this.resumingFrom||this!==P;let I=!0;if((this.isProjectionDirty||!((_=this.parent)===null||_===void 0)&&_.isProjectionDirty)&&(I=!1),R&&(this.isSharedProjectionDirty||this.isTransformDirty)&&(I=!1),this.resolvedRelativeTargetAt===frameData.timestamp&&(I=!1),I)return;const{layout:L,layoutId:j}=this.options;if(this.isTreeAnimating=!!(this.parent&&this.parent.isTreeAnimating||this.currentAnimation||this.pendingAnimation),this.isTreeAnimating||(this.targetDelta=this.relativeTarget=void 0),!this.layout||!(L||j))return;copyBoxInto(this.layoutCorrected,this.layout.layoutBox);const M=this.treeScale.x,D=this.treeScale.y;applyTreeDeltas(this.layoutCorrected,this.treeScale,this.path,R),P.layout&&!P.target&&(this.treeScale.x!==1||this.treeScale.y!==1)&&(P.target=P.layout.layoutBox,P.targetWithTransforms=createBox());const{target:F}=P;if(!F){this.prevProjectionDelta&&(this.createProjectionDeltas(),this.scheduleRender());return}!this.projectionDelta||!this.prevProjectionDelta?this.createProjectionDeltas():(copyAxisDeltaInto(this.prevProjectionDelta.x,this.projectionDelta.x),copyAxisDeltaInto(this.prevProjectionDelta.y,this.projectionDelta.y)),calcBoxDelta(this.projectionDelta,this.layoutCorrected,F,this.latestValues),(this.treeScale.x!==M||this.treeScale.y!==D||!axisDeltaEquals(this.projectionDelta.x,this.prevProjectionDelta.x)||!axisDeltaEquals(this.projectionDelta.y,this.prevProjectionDelta.y))&&(this.hasProjected=!0,this.scheduleRender(),this.notifyListeners("projectionUpdate",F)),isDebug&&metrics.recalculatedProjection++}hide(){this.isVisible=!1}show(){this.isVisible=!0}scheduleRender(_=!0){var P;if((P=this.options.visualElement)===null||P===void 0||P.scheduleRender(),_){const R=this.getStack();R&&R.scheduleRender()}this.resumingFrom&&!this.resumingFrom.instance&&(this.resumingFrom=void 0)}createProjectionDeltas(){this.prevProjectionDelta=createDelta(),this.projectionDelta=createDelta(),this.projectionDeltaWithTransform=createDelta()}setAnimationOrigin(_,P=!1){const R=this.snapshot,I=R?R.latestValues:{},L={...this.latestValues},j=createDelta();(!this.relativeParent||!this.relativeParent.options.layoutRoot)&&(this.relativeTarget=this.relativeTargetOrigin=void 0),this.attemptToResolveRelativeTarget=!P;const M=createBox(),D=R?R.source:void 0,F=this.layout?this.layout.source:void 0,N=D!==F,G=this.getStack(),B=!G||G.members.length<=1,H=!!(N&&!B&&this.options.crossfade===!0&&!this.path.some(hasOpacityCrossfade));this.animationProgress=0;let O;this.mixTargetDelta=V=>{const U=V/1e3;mixAxisDelta(j.x,_.x,U),mixAxisDelta(j.y,_.y,U),this.setTargetDelta(j),this.relativeTarget&&this.relativeTargetOrigin&&this.layout&&this.relativeParent&&this.relativeParent.layout&&(calcRelativePosition(M,this.layout.layoutBox,this.relativeParent.layout.layoutBox),mixBox(this.relativeTarget,this.relativeTargetOrigin,M,U),O&&boxEquals(this.relativeTarget,O)&&(this.isProjectionDirty=!1),O||(O=createBox()),copyBoxInto(O,this.relativeTarget)),N&&(this.animationValues=L,mixValues(L,I,this.latestValues,U,H,B)),this.root.scheduleUpdateProjection(),this.scheduleRender(),this.animationProgress=U},this.mixTargetDelta(this.options.layoutRoot?1e3:0)}startAnimation(_){this.notifyListeners("animationStart"),this.currentAnimation&&this.currentAnimation.stop(),this.resumingFrom&&this.resumingFrom.currentAnimation&&this.resumingFrom.currentAnimation.stop(),this.pendingAnimation&&(cancelFrame(this.pendingAnimation),this.pendingAnimation=void 0),this.pendingAnimation=frame.update(()=>{globalProjectionState.hasAnimatedSinceResize=!0,this.currentAnimation=animateSingleValue(0,animationTarget,{..._,onUpdate:P=>{this.mixTargetDelta(P),_.onUpdate&&_.onUpdate(P)},onComplete:()=>{_.onComplete&&_.onComplete(),this.completeAnimation()}}),this.resumingFrom&&(this.resumingFrom.currentAnimation=this.currentAnimation),this.pendingAnimation=void 0})}completeAnimation(){this.resumingFrom&&(this.resumingFrom.currentAnimation=void 0,this.resumingFrom.preserveOpacity=void 0);const _=this.getStack();_&&_.exitAnimationComplete(),this.resumingFrom=this.currentAnimation=this.animationValues=void 0,this.notifyListeners("animationComplete")}finishAnimation(){this.currentAnimation&&(this.mixTargetDelta&&this.mixTargetDelta(animationTarget),this.currentAnimation.stop()),this.completeAnimation()}applyTransformsToTarget(){const _=this.getLead();let{targetWithTransforms:P,target:R,layout:I,latestValues:L}=_;if(!(!P||!R||!I)){if(this!==_&&this.layout&&I&&shouldAnimatePositionOnly(this.options.animationType,this.layout.layoutBox,I.layoutBox)){R=this.target||createBox();const j=calcLength(this.layout.layoutBox.x);R.x.min=_.target.x.min,R.x.max=R.x.min+j;const M=calcLength(this.layout.layoutBox.y);R.y.min=_.target.y.min,R.y.max=R.y.min+M}copyBoxInto(P,R),transformBox(P,L),calcBoxDelta(this.projectionDeltaWithTransform,this.layoutCorrected,P,L)}}registerSharedNode(_,P){this.sharedNodes.has(_)||this.sharedNodes.set(_,new NodeStack),this.sharedNodes.get(_).add(P);const I=P.options.initialPromotionConfig;P.promote({transition:I?I.transition:void 0,preserveFollowOpacity:I&&I.shouldPreserveFollowOpacity?I.shouldPreserveFollowOpacity(P):void 0})}isLead(){const _=this.getStack();return _?_.lead===this:!0}getLead(){var _;const{layoutId:P}=this.options;return P?((_=this.getStack())===null||_===void 0?void 0:_.lead)||this:this}getPrevLead(){var _;const{layoutId:P}=this.options;return P?(_=this.getStack())===null||_===void 0?void 0:_.prevLead:void 0}getStack(){const{layoutId:_}=this.options;if(_)return this.root.sharedNodes.get(_)}promote({needsReset:_,transition:P,preserveFollowOpacity:R}={}){const I=this.getStack();I&&I.promote(this,R),_&&(this.projectionDelta=void 0,this.needsReset=!0),P&&this.setOptions({transition:P})}relegate(){const _=this.getStack();return _?_.relegate(this):!1}resetSkewAndRotation(){const{visualElement:_}=this.options;if(!_)return;let P=!1;const{latestValues:R}=_;if((R.z||R.rotate||R.rotateX||R.rotateY||R.rotateZ||R.skewX||R.skewY)&&(P=!0),!P)return;const I={};R.z&&resetDistortingTransform("z",_,I,this.animationValues);for(let L=0;L<transformAxes.length;L++)resetDistortingTransform(`rotate${transformAxes[L]}`,_,I,this.animationValues),resetDistortingTransform(`skew${transformAxes[L]}`,_,I,this.animationValues);_.render();for(const L in I)_.setStaticValue(L,I[L]),this.animationValues&&(this.animationValues[L]=I[L]);_.scheduleRender()}getProjectionStyles(_){var P,R;if(!this.instance||this.isSVG)return;if(!this.isVisible)return hiddenVisibility;const I={visibility:""},L=this.getTransformTemplate();if(this.needsReset)return this.needsReset=!1,I.opacity="",I.pointerEvents=resolveMotionValue(_==null?void 0:_.pointerEvents)||"",I.transform=L?L(this.latestValues,""):"none",I;const j=this.getLead();if(!this.projectionDelta||!this.layout||!j.target){const N={};return this.options.layoutId&&(N.opacity=this.latestValues.opacity!==void 0?this.latestValues.opacity:1,N.pointerEvents=resolveMotionValue(_==null?void 0:_.pointerEvents)||""),this.hasProjected&&!hasTransform(this.latestValues)&&(N.transform=L?L({},""):"none",this.hasProjected=!1),N}const M=j.animationValues||j.latestValues;this.applyTransformsToTarget(),I.transform=buildProjectionTransform(this.projectionDeltaWithTransform,this.treeScale,M),L&&(I.transform=L(M,I.transform));const{x:D,y:F}=this.projectionDelta;I.transformOrigin=`${D.origin*100}% ${F.origin*100}% 0`,j.animationValues?I.opacity=j===this?(R=(P=M.opacity)!==null&&P!==void 0?P:this.latestValues.opacity)!==null&&R!==void 0?R:1:this.preserveOpacity?this.latestValues.opacity:M.opacityExit:I.opacity=j===this?M.opacity!==void 0?M.opacity:"":M.opacityExit!==void 0?M.opacityExit:0;for(const N in scaleCorrectors){if(M[N]===void 0)continue;const{correct:G,applyTo:B}=scaleCorrectors[N],H=I.transform==="none"?M[N]:G(M[N],j);if(B){const O=B.length;for(let V=0;V<O;V++)I[B[V]]=H}else I[N]=H}return this.options.layoutId&&(I.pointerEvents=j===this?resolveMotionValue(_==null?void 0:_.pointerEvents)||"":"none"),I}clearSnapshot(){this.resumeFrom=this.snapshot=void 0}resetTree(){this.root.nodes.forEach(_=>{var P;return(P=_.currentAnimation)===null||P===void 0?void 0:P.stop()}),this.root.nodes.forEach(clearMeasurements),this.root.sharedNodes.clear()}}}function updateLayout(o){o.updateLayout()}function notifyLayoutUpdate(o){var u;const T=((u=o.resumeFrom)===null||u===void 0?void 0:u.snapshot)||o.snapshot;if(o.isLead()&&o.layout&&T&&o.hasListeners("didUpdate")){const{layoutBox:S,measuredBox:E}=o.layout,{animationType:C}=o.options,_=T.source!==o.layout.source;C==="size"?eachAxis(j=>{const M=_?T.measuredBox[j]:T.layoutBox[j],D=calcLength(M);M.min=S[j].min,M.max=M.min+D}):shouldAnimatePositionOnly(C,T.layoutBox,S)&&eachAxis(j=>{const M=_?T.measuredBox[j]:T.layoutBox[j],D=calcLength(S[j]);M.max=M.min+D,o.relativeTarget&&!o.currentAnimation&&(o.isProjectionDirty=!0,o.relativeTarget[j].max=o.relativeTarget[j].min+D)});const P=createDelta();calcBoxDelta(P,S,T.layoutBox);const R=createDelta();_?calcBoxDelta(R,o.applyTransform(E,!0),T.measuredBox):calcBoxDelta(R,S,T.layoutBox);const I=!isDeltaZero(P);let L=!1;if(!o.resumeFrom){const j=o.getClosestProjectingParent();if(j&&!j.resumeFrom){const{snapshot:M,layout:D}=j;if(M&&D){const F=createBox();calcRelativePosition(F,T.layoutBox,M.layoutBox);const N=createBox();calcRelativePosition(N,S,D.layoutBox),boxEqualsRounded(F,N)||(L=!0),j.options.layoutRoot&&(o.relativeTarget=N,o.relativeTargetOrigin=F,o.relativeParent=j)}}}o.notifyListeners("didUpdate",{layout:S,snapshot:T,delta:R,layoutDelta:P,hasLayoutChanged:I,hasRelativeTargetChanged:L})}else if(o.isLead()){const{onExitComplete:S}=o.options;S&&S()}o.options.transition=void 0}function propagateDirtyNodes(o){isDebug&&metrics.totalNodes++,o.parent&&(o.isProjecting()||(o.isProjectionDirty=o.parent.isProjectionDirty),o.isSharedProjectionDirty||(o.isSharedProjectionDirty=!!(o.isProjectionDirty||o.parent.isProjectionDirty||o.parent.isSharedProjectionDirty)),o.isTransformDirty||(o.isTransformDirty=o.parent.isTransformDirty))}function cleanDirtyNodes(o){o.isProjectionDirty=o.isSharedProjectionDirty=o.isTransformDirty=!1}function clearSnapshot(o){o.clearSnapshot()}function clearMeasurements(o){o.clearMeasurements()}function clearIsLayoutDirty(o){o.isLayoutDirty=!1}function resetTransformStyle(o){const{visualElement:u}=o.options;u&&u.getProps().onBeforeLayoutMeasure&&u.notify("BeforeLayoutMeasure"),o.resetTransform()}function finishAnimation(o){o.finishAnimation(),o.targetDelta=o.relativeTarget=o.target=void 0,o.isProjectionDirty=!0}function resolveTargetDelta(o){o.resolveTargetDelta()}function calcProjection(o){o.calcProjection()}function resetSkewAndRotation(o){o.resetSkewAndRotation()}function removeLeadSnapshots(o){o.removeLeadSnapshot()}function mixAxisDelta(o,u,T){o.translate=mixNumber$1(u.translate,0,T),o.scale=mixNumber$1(u.scale,1,T),o.origin=u.origin,o.originPoint=u.originPoint}function mixAxis(o,u,T,S){o.min=mixNumber$1(u.min,T.min,S),o.max=mixNumber$1(u.max,T.max,S)}function mixBox(o,u,T,S){mixAxis(o.x,u.x,T.x,S),mixAxis(o.y,u.y,T.y,S)}function hasOpacityCrossfade(o){return o.animationValues&&o.animationValues.opacityExit!==void 0}const defaultLayoutTransition={duration:.45,ease:[.4,0,.1,1]},userAgentContains=o=>typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().includes(o),roundPoint=userAgentContains("applewebkit/")&&!userAgentContains("chrome/")?Math.round:noop$1;function roundAxis(o){o.min=roundPoint(o.min),o.max=roundPoint(o.max)}function roundBox(o){roundAxis(o.x),roundAxis(o.y)}function shouldAnimatePositionOnly(o,u,T){return o==="position"||o==="preserve-aspect"&&!isNear(aspectRatio(u),aspectRatio(T),.2)}function checkNodeWasScrollRoot(o){var u;return o!==o.root&&((u=o.scroll)===null||u===void 0?void 0:u.wasRoot)}const DocumentProjectionNode=createProjectionNode({attachResizeListener:(o,u)=>addDomEvent(o,"resize",u),measureScroll:()=>({x:document.documentElement.scrollLeft||document.body.scrollLeft,y:document.documentElement.scrollTop||document.body.scrollTop}),checkIsScrollRoot:()=>!0}),rootProjectionNode={current:void 0},HTMLProjectionNode=createProjectionNode({measureScroll:o=>({x:o.scrollLeft,y:o.scrollTop}),defaultParent:()=>{if(!rootProjectionNode.current){const o=new DocumentProjectionNode({});o.mount(window),o.setOptions({layoutScroll:!0}),rootProjectionNode.current=o}return rootProjectionNode.current},resetTransform:(o,u)=>{o.style.transform=u!==void 0?u:"none"},checkIsScrollRoot:o=>window.getComputedStyle(o).position==="fixed"}),drag={pan:{Feature:PanGesture},drag:{Feature:DragGesture,ProjectionNode:HTMLProjectionNode,MeasureLayout}};function handleHoverEvent(o,u,T){const{props:S}=o;o.animationState&&S.whileHover&&o.animationState.setActive("whileHover",T==="Start");const E="onHover"+T,C=S[E];C&&frame.postRender(()=>C(u,extractEventInfo(u)))}class HoverGesture extends Feature{mount(){const{current:u}=this.node;u&&(this.unmount=hover(u,T=>(handleHoverEvent(this.node,T,"Start"),S=>handleHoverEvent(this.node,S,"End"))))}unmount(){}}class FocusGesture extends Feature{constructor(){super(...arguments),this.isActive=!1}onFocus(){let u=!1;try{u=this.node.current.matches(":focus-visible")}catch{u=!0}!u||!this.node.animationState||(this.node.animationState.setActive("whileFocus",!0),this.isActive=!0)}onBlur(){!this.isActive||!this.node.animationState||(this.node.animationState.setActive("whileFocus",!1),this.isActive=!1)}mount(){this.unmount=pipe(addDomEvent(this.node.current,"focus",()=>this.onFocus()),addDomEvent(this.node.current,"blur",()=>this.onBlur()))}unmount(){}}function handlePressEvent(o,u,T){const{props:S}=o;o.animationState&&S.whileTap&&o.animationState.setActive("whileTap",T==="Start");const E="onTap"+(T==="End"?"":T),C=S[E];C&&frame.postRender(()=>C(u,extractEventInfo(u)))}class PressGesture extends Feature{mount(){const{current:u}=this.node;u&&(this.unmount=press(u,T=>(handlePressEvent(this.node,T,"Start"),(S,{success:E})=>handlePressEvent(this.node,S,E?"End":"Cancel")),{useGlobalTarget:this.node.props.globalTapTarget}))}unmount(){}}const observerCallbacks=new WeakMap,observers=new WeakMap,fireObserverCallback=o=>{const u=observerCallbacks.get(o.target);u&&u(o)},fireAllObserverCallbacks=o=>{o.forEach(fireObserverCallback)};function initIntersectionObserver({root:o,...u}){const T=o||document;observers.has(T)||observers.set(T,{});const S=observers.get(T),E=JSON.stringify(u);return S[E]||(S[E]=new IntersectionObserver(fireAllObserverCallbacks,{root:o,...u})),S[E]}function observeIntersection(o,u,T){const S=initIntersectionObserver(u);return observerCallbacks.set(o,T),S.observe(o),()=>{observerCallbacks.delete(o),S.unobserve(o)}}const thresholdNames={some:0,all:1};class InViewFeature extends Feature{constructor(){super(...arguments),this.hasEnteredView=!1,this.isInView=!1}startObserver(){this.unmount();const{viewport:u={}}=this.node.getProps(),{root:T,margin:S,amount:E="some",once:C}=u,_={root:T?T.current:void 0,rootMargin:S,threshold:typeof E=="number"?E:thresholdNames[E]},P=R=>{const{isIntersecting:I}=R;if(this.isInView===I||(this.isInView=I,C&&!I&&this.hasEnteredView))return;I&&(this.hasEnteredView=!0),this.node.animationState&&this.node.animationState.setActive("whileInView",I);const{onViewportEnter:L,onViewportLeave:j}=this.node.getProps(),M=I?L:j;M&&M(R)};return observeIntersection(this.node.current,_,P)}mount(){this.startObserver()}update(){if(typeof IntersectionObserver>"u")return;const{props:u,prevProps:T}=this.node;["amount","margin","root"].some(hasViewportOptionChanged(u,T))&&this.startObserver()}unmount(){}}function hasViewportOptionChanged({viewport:o={}},{viewport:u={}}={}){return T=>o[T]!==u[T]}const gestureAnimations={inView:{Feature:InViewFeature},tap:{Feature:PressGesture},focus:{Feature:FocusGesture},hover:{Feature:HoverGesture}},layout={layout:{ProjectionNode:HTMLProjectionNode,MeasureLayout}},prefersReducedMotion={current:null},hasReducedMotionListener={current:!1};function initPrefersReducedMotion(){if(hasReducedMotionListener.current=!0,!!isBrowser)if(window.matchMedia){const o=window.matchMedia("(prefers-reduced-motion)"),u=()=>prefersReducedMotion.current=o.matches;o.addListener(u),u()}else prefersReducedMotion.current=!1}const valueTypes=[...dimensionValueTypes,color,complex],findValueType=o=>valueTypes.find(testValueType(o)),visualElementStore=new WeakMap;function updateMotionValuesFromProps(o,u,T){for(const S in u){const E=u[S],C=T[S];if(isMotionValue(E))o.addValue(S,E);else if(isMotionValue(C))o.addValue(S,motionValue(E,{owner:o}));else if(C!==E)if(o.hasValue(S)){const _=o.getValue(S);_.liveStyle===!0?_.jump(E):_.hasAnimated||_.set(E)}else{const _=o.getStaticValue(S);o.addValue(S,motionValue(_!==void 0?_:E,{owner:o}))}}for(const S in T)u[S]===void 0&&o.removeValue(S);return u}const propEventHandlers=["AnimationStart","AnimationComplete","Update","BeforeLayoutMeasure","LayoutMeasure","LayoutAnimationStart","LayoutAnimationComplete"];class VisualElement{scrapeMotionValuesFromProps(u,T,S){return{}}constructor({parent:u,props:T,presenceContext:S,reducedMotionConfig:E,blockInitialAnimation:C,visualState:_},P={}){this.current=null,this.children=new Set,this.isVariantNode=!1,this.isControllingVariants=!1,this.shouldReduceMotion=null,this.values=new Map,this.KeyframeResolver=KeyframeResolver,this.features={},this.valueSubscriptions=new Map,this.prevMotionValues={},this.events={},this.propEventSubscriptions={},this.notifyUpdate=()=>this.notify("Update",this.latestValues),this.render=()=>{this.current&&(this.triggerBuild(),this.renderInstance(this.current,this.renderState,this.props.style,this.projection))},this.renderScheduledAt=0,this.scheduleRender=()=>{const D=time.now();this.renderScheduledAt<D&&(this.renderScheduledAt=D,frame.render(this.render,!1,!0))};const{latestValues:R,renderState:I,onUpdate:L}=_;this.onUpdate=L,this.latestValues=R,this.baseTarget={...R},this.initialValues=T.initial?{...R}:{},this.renderState=I,this.parent=u,this.props=T,this.presenceContext=S,this.depth=u?u.depth+1:0,this.reducedMotionConfig=E,this.options=P,this.blockInitialAnimation=!!C,this.isControllingVariants=isControllingVariants(T),this.isVariantNode=isVariantNode(T),this.isVariantNode&&(this.variantChildren=new Set),this.manuallyAnimateOnMount=!!(u&&u.current);const{willChange:j,...M}=this.scrapeMotionValuesFromProps(T,{},this);for(const D in M){const F=M[D];R[D]!==void 0&&isMotionValue(F)&&F.set(R[D],!1)}}mount(u){this.current=u,visualElementStore.set(u,this),this.projection&&!this.projection.instance&&this.projection.mount(u),this.parent&&this.isVariantNode&&!this.isControllingVariants&&(this.removeFromVariantTree=this.parent.addVariantChild(this)),this.values.forEach((T,S)=>this.bindToMotionValue(S,T)),hasReducedMotionListener.current||initPrefersReducedMotion(),this.shouldReduceMotion=this.reducedMotionConfig==="never"?!1:this.reducedMotionConfig==="always"?!0:prefersReducedMotion.current,this.parent&&this.parent.children.add(this),this.update(this.props,this.presenceContext)}unmount(){visualElementStore.delete(this.current),this.projection&&this.projection.unmount(),cancelFrame(this.notifyUpdate),cancelFrame(this.render),this.valueSubscriptions.forEach(u=>u()),this.valueSubscriptions.clear(),this.removeFromVariantTree&&this.removeFromVariantTree(),this.parent&&this.parent.children.delete(this);for(const u in this.events)this.events[u].clear();for(const u in this.features){const T=this.features[u];T&&(T.unmount(),T.isMounted=!1)}this.current=null}bindToMotionValue(u,T){this.valueSubscriptions.has(u)&&this.valueSubscriptions.get(u)();const S=transformProps.has(u),E=T.on("change",P=>{this.latestValues[u]=P,this.props.onUpdate&&frame.preRender(this.notifyUpdate),S&&this.projection&&(this.projection.isTransformDirty=!0)}),C=T.on("renderRequest",this.scheduleRender);let _;window.MotionCheckAppearSync&&(_=window.MotionCheckAppearSync(this,u,T)),this.valueSubscriptions.set(u,()=>{E(),C(),_&&_(),T.owner&&T.stop()})}sortNodePosition(u){return!this.current||!this.sortInstanceNodePosition||this.type!==u.type?0:this.sortInstanceNodePosition(this.current,u.current)}updateFeatures(){let u="animation";for(u in featureDefinitions){const T=featureDefinitions[u];if(!T)continue;const{isEnabled:S,Feature:E}=T;if(!this.features[u]&&E&&S(this.props)&&(this.features[u]=new E(this)),this.features[u]){const C=this.features[u];C.isMounted?C.update():(C.mount(),C.isMounted=!0)}}}triggerBuild(){this.build(this.renderState,this.latestValues,this.props)}measureViewportBox(){return this.current?this.measureInstanceViewportBox(this.current,this.props):createBox()}getStaticValue(u){return this.latestValues[u]}setStaticValue(u,T){this.latestValues[u]=T}update(u,T){(u.transformTemplate||this.props.transformTemplate)&&this.scheduleRender(),this.prevProps=this.props,this.props=u,this.prevPresenceContext=this.presenceContext,this.presenceContext=T;for(let S=0;S<propEventHandlers.length;S++){const E=propEventHandlers[S];this.propEventSubscriptions[E]&&(this.propEventSubscriptions[E](),delete this.propEventSubscriptions[E]);const C="on"+E,_=u[C];_&&(this.propEventSubscriptions[E]=this.on(E,_))}this.prevMotionValues=updateMotionValuesFromProps(this,this.scrapeMotionValuesFromProps(u,this.prevProps,this),this.prevMotionValues),this.handleChildMotionValue&&this.handleChildMotionValue(),this.onUpdate&&this.onUpdate(this)}getProps(){return this.props}getVariant(u){return this.props.variants?this.props.variants[u]:void 0}getDefaultTransition(){return this.props.transition}getTransformPagePoint(){return this.props.transformPagePoint}getClosestVariantNode(){return this.isVariantNode?this:this.parent?this.parent.getClosestVariantNode():void 0}addVariantChild(u){const T=this.getClosestVariantNode();if(T)return T.variantChildren&&T.variantChildren.add(u),()=>T.variantChildren.delete(u)}addValue(u,T){const S=this.values.get(u);T!==S&&(S&&this.removeValue(u),this.bindToMotionValue(u,T),this.values.set(u,T),this.latestValues[u]=T.get())}removeValue(u){this.values.delete(u);const T=this.valueSubscriptions.get(u);T&&(T(),this.valueSubscriptions.delete(u)),delete this.latestValues[u],this.removeValueFromRenderState(u,this.renderState)}hasValue(u){return this.values.has(u)}getValue(u,T){if(this.props.values&&this.props.values[u])return this.props.values[u];let S=this.values.get(u);return S===void 0&&T!==void 0&&(S=motionValue(T===null?void 0:T,{owner:this}),this.addValue(u,S)),S}readValue(u,T){var S;let E=this.latestValues[u]!==void 0||!this.current?this.latestValues[u]:(S=this.getBaseTargetFromProps(this.props,u))!==null&&S!==void 0?S:this.readValueFromInstance(this.current,u,this.options);return E!=null&&(typeof E=="string"&&(isNumericalString(E)||isZeroValueString(E))?E=parseFloat(E):!findValueType(E)&&complex.test(T)&&(E=getAnimatableNone(u,T)),this.setBaseTarget(u,isMotionValue(E)?E.get():E)),isMotionValue(E)?E.get():E}setBaseTarget(u,T){this.baseTarget[u]=T}getBaseTarget(u){var T;const{initial:S}=this.props;let E;if(typeof S=="string"||typeof S=="object"){const _=resolveVariantFromProps(this.props,S,(T=this.presenceContext)===null||T===void 0?void 0:T.custom);_&&(E=_[u])}if(S&&E!==void 0)return E;const C=this.getBaseTargetFromProps(this.props,u);return C!==void 0&&!isMotionValue(C)?C:this.initialValues[u]!==void 0&&E===void 0?void 0:this.baseTarget[u]}on(u,T){return this.events[u]||(this.events[u]=new SubscriptionManager),this.events[u].add(T)}notify(u,...T){this.events[u]&&this.events[u].notify(...T)}}class DOMVisualElement extends VisualElement{constructor(){super(...arguments),this.KeyframeResolver=DOMKeyframesResolver}sortInstanceNodePosition(u,T){return u.compareDocumentPosition(T)&2?1:-1}getBaseTargetFromProps(u,T){return u.style?u.style[T]:void 0}removeValueFromRenderState(u,{vars:T,style:S}){delete T[u],delete S[u]}handleChildMotionValue(){this.childSubscription&&(this.childSubscription(),delete this.childSubscription);const{children:u}=this.props;isMotionValue(u)&&(this.childSubscription=u.on("change",T=>{this.current&&(this.current.textContent=`${T}`)}))}}function getComputedStyle$1(o){return window.getComputedStyle(o)}class HTMLVisualElement extends DOMVisualElement{constructor(){super(...arguments),this.type="html",this.renderInstance=renderHTML}readValueFromInstance(u,T){if(transformProps.has(T)){const S=getDefaultValueType(T);return S&&S.default||0}else{const S=getComputedStyle$1(u),E=(isCSSVariableName(T)?S.getPropertyValue(T):S[T])||0;return typeof E=="string"?E.trim():E}}measureInstanceViewportBox(u,{transformPagePoint:T}){return measureViewportBox(u,T)}build(u,T,S){buildHTMLStyles(u,T,S.transformTemplate)}scrapeMotionValuesFromProps(u,T,S){return scrapeMotionValuesFromProps$1(u,T,S)}}class SVGVisualElement extends DOMVisualElement{constructor(){super(...arguments),this.type="svg",this.isSVGTag=!1,this.measureInstanceViewportBox=createBox}getBaseTargetFromProps(u,T){return u[T]}readValueFromInstance(u,T){if(transformProps.has(T)){const S=getDefaultValueType(T);return S&&S.default||0}return T=camelCaseAttributes.has(T)?T:camelToDash(T),u.getAttribute(T)}scrapeMotionValuesFromProps(u,T,S){return scrapeMotionValuesFromProps(u,T,S)}build(u,T,S){buildSVGAttrs(u,T,this.isSVGTag,S.transformTemplate)}
207renderInstance(u,T,S,E){renderSVG(u,T,S,E)}mount(u){this.isSVGTag=isSVGTag(u.tagName),super.mount(u)}}const createDomVisualElement=(o,u)=>isSVGComponent(o)?new SVGVisualElement(u):new HTMLVisualElement(u,{allowProjection:o!==reactExports.Fragment}),createMotionComponent=createMotionComponentFactory({...animations,...gestureAnimations,...drag,...layout},createDomVisualElement),motion=createDOMMotionComponentProxy(createMotionComponent),isString$1=o=>typeof o=="string",defer=()=>{let o,u;const T=new Promise((S,E)=>{o=S,u=E});return T.resolve=o,T.reject=u,T},makeString=o=>o==null?"":""+o,copy=(o,u,T)=>{o.forEach(S=>{u[S]&&(T[S]=u[S])})},lastOfPathSeparatorRegExp=/###/g,cleanKey=o=>o&&o.indexOf("###")>-1?o.replace(lastOfPathSeparatorRegExp,"."):o,canNotTraverseDeeper=o=>!o||isString$1(o),getLastOfPath=(o,u,T)=>{const S=isString$1(u)?u.split("."):u;let E=0;for(;E<S.length-1;){if(canNotTraverseDeeper(o))return{};const C=cleanKey(S[E]);!o[C]&&T&&(o[C]=new T),Object.prototype.hasOwnProperty.call(o,C)?o=o[C]:o={},++E}return canNotTraverseDeeper(o)?{}:{obj:o,k:cleanKey(S[E])}},setPath=(o,u,T)=>{const{obj:S,k:E}=getLastOfPath(o,u,Object);if(S!==void 0||u.length===1){S[E]=T;return}let C=u[u.length-1],_=u.slice(0,u.length-1),P=getLastOfPath(o,_,Object);for(;P.obj===void 0&&_.length;)C=`${_[_.length-1]}.${C}`,_=_.slice(0,_.length-1),P=getLastOfPath(o,_,Object),P!=null&&P.obj&&typeof P.obj[`${P.k}.${C}`]<"u"&&(P.obj=void 0);P.obj[`${P.k}.${C}`]=T},pushPath=(o,u,T,S)=>{const{obj:E,k:C}=getLastOfPath(o,u,Object);E[C]=E[C]||[],E[C].push(T)},getPath=(o,u)=>{const{obj:T,k:S}=getLastOfPath(o,u);if(T&&Object.prototype.hasOwnProperty.call(T,S))return T[S]},getPathWithDefaults=(o,u,T)=>{const S=getPath(o,T);return S!==void 0?S:getPath(u,T)},deepExtend=(o,u,T)=>{for(const S in u)S!=="__proto__"&&S!=="constructor"&&(S in o?isString$1(o[S])||o[S]instanceof String||isString$1(u[S])||u[S]instanceof String?T&&(o[S]=u[S]):deepExtend(o[S],u[S],T):o[S]=u[S]);return o},regexEscape=o=>o.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&");var _entityMap={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#x2F;"};const escape=o=>isString$1(o)?o.replace(/[&<>"'\/]/g,u=>_entityMap[u]):o;class RegExpCache{constructor(u){this.capacity=u,this.regExpMap=new Map,this.regExpQueue=[]}getRegExp(u){const T=this.regExpMap.get(u);if(T!==void 0)return T;const S=new RegExp(u);return this.regExpQueue.length===this.capacity&&this.regExpMap.delete(this.regExpQueue.shift()),this.regExpMap.set(u,S),this.regExpQueue.push(u),S}}const chars=[" ",",","?","!",";"],looksLikeObjectPathRegExpCache=new RegExpCache(20),looksLikeObjectPath=(o,u,T)=>{u=u||"",T=T||"";const S=chars.filter(_=>u.indexOf(_)<0&&T.indexOf(_)<0);if(S.length===0)return!0;const E=looksLikeObjectPathRegExpCache.getRegExp(`(${S.map(_=>_==="?"?"\\?":_).join("|")})`);let C=!E.test(o);if(!C){const _=o.indexOf(T);_>0&&!E.test(o.substring(0,_))&&(C=!0)}return C},deepFind=(o,u,T=".")=>{if(!o)return;if(o[u])return Object.prototype.hasOwnProperty.call(o,u)?o[u]:void 0;const S=u.split(T);let E=o;for(let C=0;C<S.length;){if(!E||typeof E!="object")return;let _,P="";for(let R=C;R<S.length;++R)if(R!==C&&(P+=T),P+=S[R],_=E[P],_!==void 0){if(["string","number","boolean"].indexOf(typeof _)>-1&&R<S.length-1)continue;C+=R-C+1;break}E=_}return E},getCleanedCode=o=>o==null?void 0:o.replace(/_/g,"-"),consoleLogger={type:"logger",log(o){this.output("log",o)},warn(o){this.output("warn",o)},error(o){this.output("error",o)},output(o,u){var T,S;(S=(T=console==null?void 0:console[o])==null?void 0:T.apply)==null||S.call(T,console,u)}};class Logger{constructor(u,T={}){this.init(u,T)}init(u,T={}){this.prefix=T.prefix||"i18next:",this.logger=u||consoleLogger,this.options=T,this.debug=T.debug}log(...u){return this.forward(u,"log","",!0)}warn(...u){return this.forward(u,"warn","",!0)}error(...u){return this.forward(u,"error","")}deprecate(...u){return this.forward(u,"warn","WARNING DEPRECATED: ",!0)}forward(u,T,S,E){return E&&!this.debug?null:(isString$1(u[0])&&(u[0]=`${S}${this.prefix} ${u[0]}`),this.logger[T](u))}create(u){return new Logger(this.logger,{prefix:`${this.prefix}:${u}:`,...this.options})}clone(u){return u=u||this.options,u.prefix=u.prefix||this.prefix,new Logger(this.logger,u)}}var baseLogger=new Logger;class EventEmitter{constructor(){this.observers={}}on(u,T){return u.split(" ").forEach(S=>{this.observers[S]||(this.observers[S]=new Map);const E=this.observers[S].get(T)||0;this.observers[S].set(T,E+1)}),this}off(u,T){if(this.observers[u]){if(!T){delete this.observers[u];return}this.observers[u].delete(T)}}emit(u,...T){this.observers[u]&&Array.from(this.observers[u].entries()).forEac
207h(([E,C])=>{for(let _=0;_<C;_++)E(...T)}),this.observers["*"]&&Array.from(this.observers["*"].entries()).forEach(([E,C])=>{for(let _=0;_<C;_++)E.apply(E,[u,...T])})}}class ResourceStore extends EventEmitter{constructor(u,T={ns:["translation"],defaultNS:"translation"}){super(),this.data=u||{},this.options=T,this.options.keySeparator===void 0&&(this.options.keySeparator="."),this.options.ignoreJSONStructure===void 0&&(this.options.ignoreJSONStructure=!0)}addNamespaces(u){this.options.ns.indexOf(u)<0&&this.options.ns.push(u)}removeNamespaces(u){const T=this.options.ns.indexOf(u);T>-1&&this.options.ns.splice(T,1)}getResource(u,T,S,E={}){var I,L;const C=E.keySeparator!==void 0?E.keySeparator:this.options.keySeparator,_=E.ignoreJSONStructure!==void 0?E.ignoreJSONStructure:this.options.ignoreJSONStructure;let P;u.indexOf(".")>-1?P=u.split("."):(P=[u,T],S&&(Array.isArray(S)?P.push(...S):isString$1(S)&&C?P.push(...S.split(C)):P.push(S)));const R=getPath(this.data,P);return!R&&!T&&!S&&u.indexOf(".")>-1&&(u=P[0],T=P[1],S=P.slice(2).join(".")),R||!_||!isString$1(S)?R:deepFind((L=(I=this.data)==null?void 0:I[u])==null?void 0:L[T],S,C)}addResource(u,T,S,E,C={silent:!1}){const _=C.keySeparator!==void 0?C.keySeparator:this.options.keySeparator;let P=[u,T];S&&(P=P.concat(_?S.split(_):S)),u.indexOf(".")>-1&&(P=u.split("."),E=T,T=P[1]),this.addNamespaces(T),setPath(this.data,P,E),C.silent||this.emit("added",u,T,S,E)}addResources(u,T,S,E={silent:!1}){for(const C in S)(isString$1(S[C])||Array.isArray(S[C]))&&this.addResource(u,T,C,S[C],{silent:!0});E.silent||this.emit("added",u,T,S)}addResourceBundle(u,T,S,E,C,_={silent:!1,skipCopy:!1}){let P=[u,T];u.indexOf(".")>-1&&(P=u.split("."),E=S,S=T,T=P[1]),this.addNamespaces(T);let R=getPath(this.data,P)||{};_.skipCopy||(S=JSON.parse(JSON.stringify(S))),E?deepExtend(R,S,C):R={...R,...S},setPath(this.data,P,R),_.silent||this.emit("added",u,T,S)}removeResourceBundle(u,T){this.hasResourceBundle(u,T)&&delete this.data[u][T],this.removeNamespaces(T),this.emit("removed",u,T)}hasResourceBundle(u,T){return this.getResource(u,T)!==void 0}getResourceBundle(u,T){return T||(T=this.options.defaultNS),this.getResource(u,T)}getDataByLanguage(u){return this.data[u]}hasLanguageSomeTranslations(u){const T=this.getDataByLanguage(u);return!!(T&&Object.keys(T)||[]).find(E=>T[E]&&Object.keys(T[E]).length>0)}toJSON(){return this.data}}var postProcessor={processors:{},addPostProcessor(o){this.processors[o.name]=o},handle(o,u,T,S,E){return o.forEach(C=>{var _;u=((_=this.processors[C])==null?void 0:_.process(u,T,S,E))??u}),u}};const PATH_KEY=Symbol("i18next/PATH_KEY");function createProxy(){const o=[],u=Object.create(null);let T;return u.get=(S,E)=>{var C;return(C=T==null?void 0:T.revoke)==null||C.call(T),E===PATH_KEY?o:(o.push(E),T=Proxy.revocable(S,u),T.proxy)},Proxy.revocable(Object.create(null),u).proxy}function keysFromSelector(o,u){const{[PATH_KEY]:T}=o(createProxy());return T.join((u==null?void 0:u.keySeparator)??".")}const checkedLoadedFor={},shouldHandleAsObject=o=>!isString$1(o)&&typeof o!="boolean"&&typeof o!="number";class Translator extends EventEmitter{constructor(u,T={}){super(),copy(["resourceStore","languageUtils","pluralResolver","interpolator","backendConnector","
207i18nFormat","utils"],u,this),this.options=T,this.options.keySeparator===void 0&&(this.options.keySeparator="."),this.logger=baseLogger.create("translator")}changeLanguage(u){u&&(this.language=u)}exists(u,T={interpolation:{}}){const S={...T};if(u==null)return!1;const E=this.resolve(u,S);if((E==null?void 0:E.res)===void 0)return!1;const C=shouldHandleAsObject(E.res);return!(S.returnObjects===!1&&C)}extractFromKey(u,T){let S=T.nsSeparator!==void 0?T.nsSeparator:this.options.nsSeparator;S===void 0&&(S=":");const E=T.keySeparator!==void 0?T.keySeparator:this.options.keySeparator;let C=T.ns||this.options.defaultNS||[];const _=S&&u.indexOf(S)>-1,P=!this.options.userDefinedKeySeparator&&!T.keySeparator&&!this.options.userDefinedNsSeparator&&!T.nsSeparator&&!looksLikeObjectPath(u,S,E);if(_&&!P){const R=u.match(this.interpolator.nestingRegexp);if(R&&R.length>0)return{key:u,namespaces:isString$1(C)?[C]:C};const I=u.split(S);(S!==E||S===E&&this.options.ns.indexOf(I[0])>-1)&&(C=I.shift()),u=I.join(E)}return{key:u,namespaces:isString$1(C)?[C]:C}}translate(u,T,S){let E=typeof T=="object"?{...T}:T;if(typeof E!="object"&&this.options.overloadTranslationOptionHandler&&(E=this.options.overloadTranslationOptionHandler(arguments)),typeof E=="object"&&(E={...E}),E||(E={}),u==null)return"";typeof u=="function"&&(u=keysFromSelector(u,{...this.options,...E})),Array.isArray(u)||(u=[String(u)]);const C=E.returnDetails!==void 0?E.returnDetails:this.options.returnDetails,_=E.keySeparator!==void 0?E.keySeparator:this.options.keySeparator,{key:P,namespaces:R}=this.extractFromKey(u[u.length-1],E),I=R[R.length-1];let L=E.nsSeparator!==void 0?E.nsSeparator:this.options.nsSeparator;L===void 0&&(L=":");const j=E.lng||this.language,M=E.appendNamespaceToCIMode||this.options.appendNamespaceToCIMode;if((j==null?void 0:j.toLowerCase())==="cimode")return M?C?{res:`${I}${L}${P}`,usedKey:P,exactUsedKey:P,usedLng:j,usedNS:I,usedParams:this.getUsedParamsDetails(E)}:`${I}${L}${P}`:C?{res:P,usedKey:P,exactUsedKey:P,usedLng:j,usedNS:I,usedParams:this.getUsedParamsDetails(E)}:P;const D=this.resolve(u,E);let F=D==null?void 0:D.res;const N=(D==null?void 0:D.usedKey)||P,G=(D==null?void 0:D.exactUsedKey)||P,B=["[object Number]","[object Function]","[object RegExp]"],H=E.joinArrays!==void 0?E.joinArrays:this.options.joinArrays,O=!this.i18nFormat||this.i18nFormat.handleAsObject,V=E.count!==void 0&&!isString$1(E.count),U=Translator.hasDefaultValue(E),W=V?this.pluralResolver.getSuffix(j,E.count,E):"",K=E.ordinal&&V?this.pluralResolver.getSuffix(j,E.count,{ordinal:!1}):"",Y=V&&!E.ordinal&&E.count===0,ee=Y&&E[`defaultValue${this.options.pluralSeparator}zero`]||E[`defaultValue${W}`]||E[`defaultValue${K}`]||E.defaultValue;let oe=F;O&&!F&&U&&(oe=ee);const se=shouldHandleAsObject(oe),Q=Object.prototype.toString.apply(oe);if(O&&oe&&se&&B.indexOf(Q)<0&&!(isString$1(H)&&Array.isArray(oe))){if(!E.returnObjects&&!this.options.returnObjects){this.options.returnedObjectHandler||this.logger.warn("accessing an object - but returnObjects options is not enabled!");const ie=this.options.returnedObjectHandler?this.options.returnedObjectHandler(N,oe,{...E,ns:R}):`key '${P} (${this.language})' returned an object instead of string.`;return C?(D.res=ie,D.usedParams=this.getUsedParamsDetails(E),D):ie}if(_){const ie=Array.isArray(oe),ae=ie?[]:{},re=ie?G:N;for(const J in oe)if(Object.prototype.hasOwnProperty.call(oe,J)){const te=`${re}${_}${J}`;U&&!F?ae[J]=this.translate(te,{...E,defaultValue:shouldHandleAsObject(ee)?ee[J]:void 0,joinArrays:!1,ns:R}):ae[J]=this.translate(te,{...E,joinArrays:!1,ns:R}),ae[J]===te&&(ae[J]=oe[J])}F=ae}}else if(O&&isString$1(H)&&Array.isArray(F))F=F.join(H),F&&(F=this.extendTranslation(F,u,E,S));else{let ie=!1,ae=!1;!this.isValidLookup(F)&&U&&(ie=!0,F=ee),this.isValidLookup(F)||(ae=!0,F=P);const J=(E.missingKeyNoValueFallbackToKey||this.options.missingKeyNoValueFallbackToKey)&&ae?void 0:F,te=U&&ee!==F&&this.options.updateMissing;if(ae||ie||te){if(this.logger.log(te?"updateKey":"missingKey",j,I,P,te?ee:F),_){const he=this.resolve(P,{...E,keySeparator:!1});he&&he.res&&this.logger.warn("Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.")}let Z=[];const X=this.languageUtils.getFallbackCodes(this.options.fallbackLng,E.lng||this.language);
207if(this.options.saveMissingTo==="fallback"&&X&&X[0])for(let he=0;he<X.length;he++)Z.push(X[he]);else this.options.saveMissingTo==="all"?Z=this.languageUtils.toResolveHierarchy(E.lng||this.language):Z.push(E.lng||this.language);const de=(he,ne,ue)=>{var fe;const ce=U&&ue!==F?ue:J;this.options.missingKeyHandler?this.options.missingKeyHandler(he,I,ne,ce,te,E):(fe=this.backendConnector)!=null&&fe.saveMissing&&this.backendConnector.saveMissing(he,I,ne,ce,te,E),this.emit("missingKey",he,I,ne,F)};this.options.saveMissing&&(this.options.saveMissingPlurals&&V?Z.forEach(he=>{const ne=this.pluralResolver.getSuffixes(he,E);Y&&E[`defaultValue${this.options.pluralSeparator}zero`]&&ne.indexOf(`${this.options.pluralSeparator}zero`)<0&&ne.push(`${this.options.pluralSeparator}zero`),ne.forEach(ue=>{de([he],P+ue,E[`defaultValue${ue}`]||ee)})}):de(Z,P,ee))}F=this.extendTranslation(F,u,E,D,S),ae&&F===P&&this.options.appendNamespaceToMissingKey&&(F=`${I}${L}${P}`),(ae||ie)&&this.options.parseMissingKeyHandler&&(F=this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey?`${I}${L}${P}`:P,ie?F:void 0,E))}return C?(D.res=F,D.usedParams=this.getUsedParamsDetails(E),D):F}extendTranslation(u,T,S,E,C){var R,I;if((R=this.i18nFormat)!=null&&R.parse)u=this.i18nFormat.parse(u,{...this.options.interpolation.defaultVariables,...S},S.lng||this.language||E.usedLng,E.usedNS,E.usedKey,{resolved:E});else if(!S.skipInterpolation){S.interpolation&&this.interpolator.init({...S,interpolation:{...this.options.interpolation,...S.interpolation}});const L=isString$1(u)&&(((I=S==null?void 0:S.interpolation)==null?void 0:I.skipOnVariables)!==void 0?S.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables);let j;if(L){const D=u.match(this.interpolator.nestingRegexp);j=D&&D.length}let M=S.replace&&!isString$1(S.replace)?S.replace:S;if(this.options.interpolation.defaultVariables&&(M={...this.options.interpolation.defaultVariables,...M}),u=this.interpolator.interpolate(u,M,S.lng||this.language||E.usedLng,S),L){const D=u.match(this.interpolator.nestingRegexp),F=D&&D.length;j<F&&(S.nest=!1)}!S.lng&&E&&E.res&&(S.lng=this.language||E.usedLng),S.nest!==!1&&(u=this.interpolator.nest(u,(...D)=>(C==null?void 0:C[0])===D[0]&&!S.context?(this.logger.warn(`It seems you are nesting recursively key: ${D[0]} in key: ${T[0]}`),null):this.translate(...D,T),S)),S.interpolation&&this.interpolator.reset()}const _=S.postProcess||this.options.postProcess,P=isString$1(_)?[_]:_;return u!=null&&(P!=null&&P.length)&&S.applyPostProcessor!==!1&&(u=postProcessor.handle(P,u,T,this.options&&this.options.postProcessPassResolved?{i18nResolved:{...E,usedParams:this.getUsedParamsDetails(S)},...S}:S,this)),u}resolve(u,T={}){let S,E,C,_,P;return isString$1(u)&&(u=[u]),u.forEach(R=>{if(this.isValidLookup(S))return;const I=this.extractFromKey(R,T),L=I.key;E=L;let j=I.namespaces;this.options.fallbackNS&&(j=j.concat(this.options.fallbackNS));const M=T.count!==void 0&&!isString$1(T.count),D=M&&!T.ordinal&&T.count===0,F=T.context!==void 0&&(isString$1(T.context)||typeof T.context=="number")&&T.context!=="",N=T.lngs?T.lngs:this.languageUtils.toResolveHierarchy(T.lng||this.language,T.fallbackLng);j.forEach(G=>{var B,H;this.isValidLookup(S)||(P=G,!checkedLoadedFor[`${N[0]}-${G}`]&&((B=this.utils)!=null&&B.hasLoadedNamespace)&&!((H=this.utils)!=null&&H.hasLoadedNamespace(P))&&(checkedLoadedFor[`${N[0]}-${G}`]=!0,this.logger.warn(`key "${E}" for languages "${N.join(", ")}" won't get resolved as namespace "${P}" was not yet loaded`,"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!")),N.forEach(O=>{var W;if(this.isValidLookup(S))return;_=O;const V=[L];if((W=this.i18nFormat)!=null&&W.addLookupKeys)this.i18nFormat.addLookupKeys(V,L,O,G,T);else{let K;M&&(K=this.pluralResolver.getSuffix(O,T.count,T));const Y=`${this.options.pluralSeparator}zero`,ee=`${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`;if(M&&(T.ordinal&&K.indexOf(ee)===0&&V.push(L+K.replace(ee,this.options.pluralSeparator)),V.push(L+K),D&&V.push(L+Y)),F){const oe=`${L}${this.options.contextSeparator||"_"}${T.context}`;V.push(oe),M&&(T.ordinal&&K.indexOf(ee)===0&&V.push(oe+K.replace(ee,this.options.pluralSeparator)),V.push(oe+K),D&&V.push(oe+Y))}}let U;for(;U=V.pop();)this.isValidLookup(S)||(C=U,S=this.getResource(O,G,U,T))}))})}),{res:S,usedKey:E,exactUsedKey:C,usedLng:_,usedNS:P}}isValidLookup(u){return u!==void 0&&!(!this.options.returnNull&&u===null)&&!(!this.options.returnEmptyString&&u==="")}getResource(u,T,S,E={}){var C;return(C=this.i18nFormat)!=null&&C.getResource?this.i18nFormat.getResource(u,T,S,E):this.resourceStore.getResource(u,T,S,E)}getUsedParamsDetails(u={}){const T=["defaultValue","ordinal","context","replace","lng","lngs","fallbackLng","ns","keySeparator","nsSeparator","returnObjects","returnDetails","joinArrays","postProcess","interpolation"],S=u.replace&&!isString$1(u.replace);let E=S?u.replace:u;if(S&&typeof u.count<"u"&&(E.count=u.count),this.options.interpolation.defaultVariables&&(E={...this.options.interpolation.defaultVariables,...E}),!S){E={...E};for(const C of T)delete E[C]}return E}static hasDefaultValue(u){const T="defaultValue";for(const S in u)if(Object.prototype.hasOwnProperty.call(u,S)&&T===S.substring(0,T.length)&&u[S]!==void 0)return!0;return!1}}class LanguageUtil{constructor(u){this.options=u,this.supportedLngs=this.options.supportedLngs||!1,this.logger=baseLogger.create("languageUtils")}getScriptPartFromCode(u){if(u=getCleanedCode(u),!u||u.indexOf("-")<0)return null;const T=u.split("-");return T.length===2||(T.pop(),T[T.length-1].toLowerCase()==="x")?null:this.formatLanguageCode(T.join("-"))}getLanguagePartFromCode(u){if(u=getCleanedCode(u),!u||u.indexOf("-")<0)return u;const T=u.split("-");return this.formatLanguageCode(T[0])}formatLanguageCode(u){if(isString$1(u)&&u.indexOf("-")>-1){let T;
207try{T=Intl.getCanonicalLocales(u)[0]}catch{}return T&&this.options.lowerCaseLng&&(T=T.toLowerCase()),T||(this.options.lowerCaseLng?u.toLowerCase():u)}return this.options.cleanCode||this.options.lowerCaseLng?u.toLowerCase():u}isSupportedCode(u){return(this.options.load==="languageOnly"||this.options.nonExplicitSupportedLngs)&&(u=this.getLanguagePartFromCode(u)),!this.supportedLngs||!this.supportedLngs.length||this.supportedLngs.indexOf(u)>-1}getBestMatchFromCodes(u){if(!u)return null;let T;return u.forEach(S=>{if(T)return;const E=this.formatLanguageCode(S);(!this.options.supportedLngs||this.isSupportedCode(E))&&(T=E)}),!T&&this.options.supportedLngs&&u.forEach(S=>{if(T)return;const E=this.getScriptPartFromCode(S);if(this.isSupportedCode(E))return T=E;const C=this.getLanguagePartFromCode(S);if(this.isSupportedCode(C))return T=C;T=this.options.supportedLngs.find(_=>{if(_===C)return _;if(!(_.indexOf("-")<0&&C.indexOf("-")<0)&&(_.indexOf("-")>0&&C.indexOf("-")<0&&_.substring(0,_.indexOf("-"))===C||_.indexOf(C)===0&&C.length>1))return _})}),T||(T=this.getFallbackCodes(this.options.fallbackLng)[0]),T}getFallbackCodes(u,T){if(!u)return[];if(typeof u=="function"&&(u=u(T)),isString$1(u)&&(u=[u]),Array.isArray(u))return u;if(!T)return u.default||[];let S=u[T];return S||(S=u[this.getScriptPartFromCode(T)]),S||(S=u[this.formatLanguageCode(T)]),S||(S=u[this.getLanguagePartFromCode(T)]),S||(S=u.default),S||[]}toResolveHierarchy(u,T){const S=this.getFallbackCodes((T===!1?[]:T)||this.options.fallbackLng||[],u),E=[],C=_=>{_&&(this.isSupportedCode(_)?E.push(_):this.logger.warn(`rejecting language code not found in supportedLngs: ${_}`))};return isString$1(u)&&(u.indexOf("-")>-1||u.indexOf("_")>-1)?(this.options.load!=="languageOnly"&&C(this.formatLanguageCode(u)),this.options.load!=="languageOnly"&&this.options.load!=="currentOnly"&&C(this.getScriptPartFromCode(u)),this.options.load!=="currentOnly"&&C(this.getLanguagePartFromCode(u))):isString$1(u)&&C(this.formatLanguageCode(u)),S.forEach(_=>{E.indexOf(_)<0&&C(this.formatLanguageCode(_))}),E}}const suffixesOrder={zero:0,one:1,two:2,few:3,many:4,other:5},dummyRule={select:o=>o===1?"one":"other",resolvedOptions:()=>({pluralCategories:["one","other"]})};class PluralResolver{constructor(u,T={}){this.languageUtils=u,this.options=T,this.logger=baseLogger.create("pluralResolver"),this.pluralRulesCache={}}clearCache(){this.pluralRulesCache={}}getRule(u,T={}){const S=getCleanedCode(u==="dev"?"en":u),E=T.ordinal?"ordinal":"cardinal",C=JSON.stringify({cleanedCode:S,type:E});if(C in this.pluralRulesCache)return this.pluralRulesCache[C];let _;try{_=new Intl.PluralRules(S,{type:E})}catch{if(typeof Intl>"u")return this.logger.error("No Intl support, please use an Intl polyfill!"),dummyRule;if(!u.match(/-|_/))return dummyRule;const R=this.languageUtils.getLanguagePartFromCode(u);_=this.getRule(R,T)}return this.pluralRulesCache[C]=_,_}needsPlural(u,T={}){let S=this.getRule(u,T);return S||(S=this.getRule("dev",T)),(S==null?void 0:S.resolvedOptions().pluralCategories.length)>1}getPluralFormsOfKey(u,T,S={}){return this.getSuffixes(u,S).map(E=>`${T}${E}`)}getSuffixes(u,T={}){let S=this.getRule(u,T);return S||(S=this.getRule("dev",T)),S?S.resolvedOptions().pluralCategories.sort((E,C)=>suffixesOrder[E]-suffixesOrder[C]).map(E=>`${this.options.prepend}${T.ordinal?`ordinal${this.options.prepend}`:""}${E}`):[]}getSuffix(u,T,S={}){const E=this.getRule(u,S);return E?`${this.options.prepend}${S.ordinal?`ordinal${this.options.prepend}`:""}${E.select(T)}`:(this.logger.warn(`no plural rule found for: ${u}`),this.getSuffix("dev",T,S))}}const deepFindWithDefaults=(o,u,T,S=".",E=!0)=>{let C=getPathWithDefaults(o,u,T);return!C&&E&&isString$1(T)&&(C=deepFind(o,T,S),C===void 0&&(C=deepFind(u,T,S))),C},regexSafe=o=>o.replace(/\$/g,"$$$$");class Interpolator{constructor(u={}){var T;this.logger=baseLogger.create("interpolator"),this.options=u,this.format=((T=u==null?void 0:u.interpolation)==null?void 0:T.format)||(S=>S),this.init(u)}init(u={}){u.interpolation||(u.interpolation={escapeValue:!0});const{escape:T,escapeValue:S,useRawValueToEscape:E,prefix:C,prefixEscaped:_,suffix:P,suffixEscaped:R,formatSeparator:I,unescapeSuffix:L,unescapePrefix:j,nestingPrefix:M,nestingPrefixEscaped:D,nestingSuffix:F,nestingSuffixEscaped:N,nestingOptionsSeparator:G,maxReplaces:B,alwaysFormat:H}=u.interpolation;this.escape=T!==void 0?T:escape,this.escapeValue=S!==void 0?S:!0,this.useRawValueToEscape=E!==void 0?E:!1,this.prefix=C?regexEscape(C):_||"{{",this.suffix=P?regexEscape(P):R||"}}
207",this.formatSeparator=I||",",this.unescapePrefix=L?"":j||"-",this.unescapeSuffix=this.unescapePrefix?"":L||"",this.nestingPrefix=M?regexEscape(M):D||regexEscape("$t("),this.nestingSuffix=F?regexEscape(F):N||regexEscape(")"),this.nestingOptionsSeparator=G||",",this.maxReplaces=B||1e3,this.alwaysFormat=H!==void 0?H:!1,this.resetRegExp()}reset(){this.options&&this.init(this.options)}resetRegExp(){const u=(T,S)=>(T==null?void 0:T.source)===S?(T.lastIndex=0,T):new RegExp(S,"g");this.regexp=u(this.regexp,`${this.prefix}(.+?)${this.suffix}`),this.regexpUnescape=u(this.regexpUnescape,`${this.prefix}${this.unescapePrefix}(.+?)${this.unescapeSuffix}${this.suffix}`),this.nestingRegexp=u(this.nestingRegexp,`${this.nestingPrefix}((?:[^()"']+|"[^"]*"|'[^']*'|\\((?:[^()]|"[^"]*"|'[^']*')*\\))*?)${this.nestingSuffix}`)}interpolate(u,T,S,E){var D;let C,_,P;const R=this.options&&this.options.interpolation&&this.options.interpolation.defaultVariables||{},I=F=>{if(F.indexOf(this.formatSeparator)<0){const H=deepFindWithDefaults(T,R,F,this.options.keySeparator,this.options.ignoreJSONStructure);return this.alwaysFormat?this.format(H,void 0,S,{...E,...T,interpolationkey:F}):H}const N=F.split(this.formatSeparator),G=N.shift().trim(),B=N.join(this.formatSeparator).trim();return this.format(deepFindWithDefaults(T,R,G,this.options.keySeparator,this.options.ignoreJSONStructure),B,S,{...E,...T,interpolationkey:G})};this.resetRegExp();const L=(E==null?void 0:E.missingInterpolationHandler)||this.options.missingInterpolationHandler,j=((D=E==null?void 0:E.interpolation)==null?void 0:D.skipOnVariables)!==void 0?E.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables;return[{regex:this.regexpUnescape,safeValue:F=>regexSafe(F)},{regex:this.regexp,safeValue:F=>this.escapeValue?regexSafe(this.escape(F)):regexSafe(F)}].forEach(F=>{for(P=0;C=F.regex.exec(u);){const N=C[1].trim();if(_=I(N),_===void 0)if(typeof L=="function"){const B=L(u,C,E);_=isString$1(B)?B:""}else if(E&&Object.prototype.hasOwnProperty.call(E,N))_="";else if(j){_=C[0];continue}else this.logger.warn(`missed to pass in variable ${N} for interpolating ${u}`),_="";else!isString$1(_)&&!this.useRawValueToEscape&&(_=makeString(_));const G=F.safeValue(_);if(u=u.replace(C[0],G),j?(F.regex.lastIndex+=_.length,F.regex.lastIndex-=C[0].length):F.regex.lastIndex=0,P++,P>=this.maxReplaces)break}}),u}nest(u,T,S={}){let E,C,_;const P=(R,I)=>{const L=this.nestingOptionsSeparator;if(R.indexOf(L)<0)return R;const j=R.split(new RegExp(`${regexEscape(L)}[ ]*{`));let M=`{${j[1]}`;R=j[0],M=this.interpolate(M,_);const D=M.match(/'/g),F=M.match(/"/g);(((D==null?void 0:D.length)??0)%2===0&&!F||((F==null?void 0:F.length)??0)%2!==0)&&(M=M.replace(/'/g,'"'));try{_=JSON.parse(M),I&&(_={...I,..._})}catch(N){return this.logger.warn(`failed parsing options string in nesting for key ${R}`,N),`${R}${L}${M}`}return _.defaultValue&&_.defaultValue.indexOf(this.prefix)>-1&&delete _.defaultValue,R};for(;E=this.nestingRegexp.exec(u);){let R=[];_={...S},_=_.replace&&!isString$1(_.replace)?_.replace:_,_.applyPostProcessor=!1,delete _.defaultValue;const I=/{.*}/.test(E[1])?E[1].lastIndexOf("}")+1:E[1].indexOf(this.formatSeparator);if(I!==-1&&(R=E[1].slice(I).split(this.formatSeparator).map(L=>L.trim()).filter(Boolean),E[1]=E[1].slice(0,I)),C=T(P.call(this,E[1].trim(),_),_),C&&E[0]===u&&!isString$1(C))return C;isString$1(C)||(C=makeString(C)),C||(this.logger.warn(`missed to resolve ${E[1]} for nesting ${u}`),C=""),R.length&&(C=R.reduce((L,j)=>this.format(L,j,S.lng,{...S,interpolationkey:E[1].trim()}),C.trim())),u=u.replace(E[0],C),this.regexp.lastIndex=0}return u}}const parseFormatStr=o=>{let u=o.toLowerCase().trim();const T={};if(o.indexOf("(")>-1){const S=o.split("(");u=S[0].toLowerCase().trim();const E=S[1].substring(0,S[1].length-1);u==="currency"&&E.indexOf(":")<0?T.currency||(T.currency=E.trim()):u==="relativetime"&&E.indexOf(":")<0?T.range||(T.range=E.trim()):E.split(";").forEach(_=>{if(_){const[P,...R]=_.split(":"),I=R.join(":").trim().replace(/^'+|'+$/g,""),L=P.trim();T[L]||(T[L]=I),I==="false"&&(T[L]=!1),I==="true"&&(T[L]=!0),isNaN(I)||(T[L]=parseInt(I,10))}})}return{formatName:u,formatOptions:T}},createCachedFormatter=o=>{const u={};return(T,S,E)=>{let C=E;E&&E.interpolationkey&&E.formatParams&&E.formatParams[E.interpolationkey]&&E[E.interpolationkey]&&(C={...C,[E.interpolationkey]:void 0});const _=S+JSON.stringify(C);let P=u[_];return P||(P=o(getCleanedCode(S),E),u[_]=P),P(T)}},createNonCachedFormatter=o=>(u,T,S)=>o(getCleanedCode(T),S)(u);class Formatter{constructor(u={}){this.logger=baseLogger.create("formatter"),this.options=u,this.init(u)}init(u,T={interpolation:{}}){this.formatSeparator=T.interpolation.formatSeparator||",";const S=T.cacheInBuiltFormats?createCachedFormatter:createNonCachedFormatter;this.formats={number:S((E,C)=>{const _=new Intl.NumberFormat(E,{...C});return P=>_.format(P)}),currency:S((E,C)=>{const _=new Intl.NumberFormat(E,{...C,style:"currency"});return P=>_.format(P)}),datetime:S((E,C)=>{const _=new Intl.DateTimeFormat(E,{...C});return P=>_.format(P)}),relativetime:S((E,C)=>{const _=new Intl.RelativeTimeFormat(E,{...C});return P=>_.format(P,C.range||"day")}),list:S((E,C)=>{const _=new Intl.ListFormat(E,{...C});return P=>_.format(P)})}}add(u,T){this.formats[u.toLowerCase().trim()]=T}addCached(u,T){this.formats[u.toLowerCase().trim()]=createCachedFormatter(T)}format(u,T,S,E={}){const C=T.split(this.formatSeparator);if(C.length>1&&C[0].indexOf("(")>1&&C[0].indexOf(")")<0&&C.find(P=>P.indexOf(")")>-1)){const P=C.findIndex(R=>R.indexOf(")")>-1);C[0]=[C[0],...C.splice(1,P)].join(this.formatSeparator)}return C.reduce((P,R)=>{var j;const{formatName:I,formatOptions:L}=parseFormatStr(R);if(this.formats[I]){let M=P;try{const D=((j=E==null?void 0:E.formatParams)==null?void 0:j[E.interpolationkey])||{},F=D.locale||D.lng||E.locale||E.lng||S;M=this.formats[I](P,F,{...L,...E,...D})}catch(D){this.logger.warn(D)}return M}else this.logger.warn(`there was no format function for ${I}`);return P},u)}}const removePending=(o,u)=>{o.pending[u]!==void 0&&(delete o.pending[u],o.pendingCount--)};
207class Connector extends EventEmitter{constructor(u,T,S,E={}){var C,_;super(),this.backend=u,this.store=T,this.services=S,this.languageUtils=S.languageUtils,this.options=E,this.logger=baseLogger.create("backendConnector"),this.waitingReads=[],this.maxParallelReads=E.maxParallelReads||10,this.readingCalls=0,this.maxRetries=E.maxRetries>=0?E.maxRetries:5,this.retryTimeout=E.retryTimeout>=1?E.retryTimeout:350,this.state={},this.queue=[],(_=(C=this.backend)==null?void 0:C.init)==null||_.call(C,S,E.backend,E)}queueLoad(u,T,S,E){const C={},_={},P={},R={};return u.forEach(I=>{let L=!0;T.forEach(j=>{const M=`${I}|${j}`;!S.reload&&this.store.hasResourceBundle(I,j)?this.state[M]=2:this.state[M]<0||(this.state[M]===1?_[M]===void 0&&(_[M]=!0):(this.state[M]=1,L=!1,_[M]===void 0&&(_[M]=!0),C[M]===void 0&&(C[M]=!0),R[j]===void 0&&(R[j]=!0)))}),L||(P[I]=!0)}),(Object.keys(C).length||Object.keys(_).length)&&this.queue.push({pending:_,pendingCount:Object.keys(_).length,loaded:{},errors:[],callback:E}),{toLoad:Object.keys(C),pending:Object.keys(_),toLoadLanguages:Object.keys(P),toLoadNamespaces:Object.keys(R)}}loaded(u,T,S){const E=u.split("|"),C=E[0],_=E[1];T&&this.emit("failedLoading",C,_,T),!T&&S&&this.store.addResourceBundle(C,_,S,void 0,void 0,{skipCopy:!0}),this.state[u]=T?-1:2,T&&S&&(this.state[u]=0);const P={};this.queue.forEach(R=>{pushPath(R.loaded,[C],_),removePending(R,u),T&&R.errors.push(T),R.pendingCount===0&&!R.done&&(Object.keys(R.loaded).forEach(I=>{P[I]||(P[I]={});const L=R.loaded[I];L.length&&L.forEach(j=>{P[I][j]===void 0&&(P[I][j]=!0)})}),R.done=!0,R.errors.length?R.callback(R.errors):R.callback())}),this.emit("loaded",P),this.queue=this.queue.filter(R=>!R.done)}read(u,T,S,E=0,C=this.retryTimeout,_){if(!u.length)return _(null,{});if(this.readingCalls>=this.maxParallelReads){this.waitingReads.push({lng:u,ns:T,fcName:S,tried:E,wait:C,callback:_});return}this.readingCalls++;const P=(I,L)=>{if(this.readingCalls--,this.waitingReads.length>0){const j=this.waitingReads.shift();this.read(j.lng,j.ns,j.fcName,j.tried,j.wait,j.callback)}if(I&&L&&E<this.maxRetries){setTimeout(()=>{this.read.call(this,u,T,S,E+1,C*2,_)},C);return}_(I,L)},R=this.backend[S].bind(this.backend);if(R.length===2){try{const I=R(u,T);I&&typeof I.then=="function"?I.then(L=>P(null,L)).catch(P):P(null,I)}catch(I){P(I)}return}return R(u,T,P)}prepareLoading(u,T,S={},E){if(!this.backend)return this.logger.warn("No backend was added via i18next.use. Will not load resources."),E&&E();isString$1(u)&&(u=this.languageUtils.toResolveHierarchy(u)),isString$1(T)&&(T=[T]);const C=this.queueLoad(u,T,S,E);if(!C.toLoad.length)return C.pending.length||E(),null;C.toLoad.forEach(_=>{this.loadOne(_)})}load(u,T,S){this.prepareLoading(u,T,{},S)}reload(u,T,S){this.prepareLoading(u,T,{reload:!0},S)}loadOne(u,T=""){const S=u.split("|"),E=S[0],C=S[1];this.read(E,C,"read",void 0,void 0,(_,P)=>{_&&this.logger.warn(`${T}loading namespace ${C} for language ${E} failed`,_),!_&&P&&this.logger.log(`${T}loaded namespace ${C} for language ${E}`,P),this.loaded(u,_,P)})}saveMissing(u,T,S,E,C,_={},P=()=>{}){var R,I,L,j,M;if((I=(R=this.services)==null?void 0:R.utils)!=null&&I.hasLoadedNamespace&&!((j=(L=this.services)==null?void 0:L.utils)!=null&&j.hasLoadedNamespace(T))){this.logger.warn(`did not save key "${S}" as the namespace "${T}" was not yet loaded`,"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!");return}if(!(S==null||S==="")){if((M=this.backend)!=null&&M.create){const D={..._,isUpdate:C},F=this.backend.create.bind(this.backend);if(F.length<6)try{let N;F.length===5?N=F(u,T,S,E,D):N=F(u,T,S,E),N&&typeof N.then=="function"?N.then(G=>P(null,G)).catch(P):P(null,N)}catch(N){P(N)}else F(u,T,S,E,P,D)}!u||!u[0]||this.store.addResource(u[0],T,S,E)}}}const get=()=>({debug:!1,initAsync:!0,ns:["translation"],defaultNS:["translation"],fallbackLng:["dev"],fallbackNS:!1,supportedLngs:!1,nonExplicitSupportedLngs:!1,load:"all",preload:!1,simplifyPluralSuffix:!0,keySeparator:".",nsSeparator:":",pluralSeparator:"_",contextSeparator:"_",partialBundledLanguages:!1,saveMissing:!1,updateMissing:!1,saveMissingTo:"fallback",saveMissingPlurals:!0,missingKeyHandler:!1,missingInterpolationHandler:!1,postProcess:!1,postProcessPassResolved:!1,returnNull:!1,returnEmptyString:!0,returnObjects:!1,joinArrays:!1,returnedObjectHandler:!1,parseMissingKeyHandler:!1,appendNamespaceToMissingKey:!1,appendNamespaceToCIMode:!1,overloadTranslationOptionHandler:o=>{let u={};if(typeof o[1]=="object"&&(u=o[1]),isString$1(o[1])&&(u.defaultValue=o[1]),isString$1(o[2])&&(u.tDescription=o[2]),typeof o[2]=="object"||typeof o[3]=="object"){const T=o[3]||o[2];Object.keys(T).forEach(S=>{u[S]=T[S]})}return u},interpolation:{escapeValue:!0,format:o=>o,prefix:"{{",suffix:"}}",formatSeparator:",",unescapePrefix:"-",nestingPrefix:"$t(",nestingSuffix:")",nestingOptionsSeparator:",",maxReplaces:1e3,skipOnVariables:!0},cacheInBuiltFormats:!0}),transformOptions=o=>{var u,T;return isString$1(o.ns)&&(o.ns=[o.ns]),isString$1(o.fallbackLng)&&(o.fallbackLng=[o.fallbackLng]),isString$1(o.fallbackNS)&&(o.fallbackNS=[o.fallbackNS]),((T=(u=o.supportedLngs)==null?void 0:u.indexOf)==null?void 0:T.call(u,"cimode"))<0&&(o.supportedLngs=o.supportedLngs.concat(["cimode"])),typeof o.initImmediate=="boolean"&&(o.initAsync=o.initImmediate),o},noop=()=>{},bindMemberFunctions=o=>
207{Object.getOwnPropertyNames(Object.getPrototypeOf(o)).forEach(T=>{typeof o[T]=="function"&&(o[T]=o[T].bind(o))})},SUPPORT_NOTICE_KEY="__i18next_supportNoticeShown",getSupportNoticeShown=()=>typeof globalThis<"u"&&!!globalThis[SUPPORT_NOTICE_KEY],setSupportNoticeShown=()=>{typeof globalThis<"u"&&(globalThis[SUPPORT_NOTICE_KEY]=!0)},usesLocize=o=>{var u,T,S,E,C,_,P,R,I,L,j,M,D;return!!(((S=(T=(u=o==null?void 0:o.modules)==null?void 0:u.backend)==null?void 0:T.name)==null?void 0:S.indexOf("Locize"))>0||((P=(_=(C=(E=o==null?void 0:o.modules)==null?void 0:E.backend)==null?void 0:C.constructor)==null?void 0:_.name)==null?void 0:P.indexOf("Locize"))>0||(I=(R=o==null?void 0:o.options)==null?void 0:R.backend)!=null&&I.backends&&o.options.backend.backends.some(F=>{var N,G,B;return((N=F==null?void 0:F.name)==null?void 0:N.indexOf("Locize"))>0||((B=(G=F==null?void 0:F.constructor)==null?void 0:G.name)==null?void 0:B.indexOf("Locize"))>0})||(j=(L=o==null?void 0:o.options)==null?void 0:L.backend)!=null&&j.projectId||(D=(M=o==null?void 0:o.options)==null?void 0:M.backend)!=null&&D.backendOptions&&o.options.backend.backendOptions.some(F=>F==null?void 0:F.projectId))};class I18n extends EventEmitter{constructor(u={},T){if(super(),this.options=transformOptions(u),this.services={},this.logger=baseLogger,this.modules={external:[]},bindMemberFunctions(this),T&&!this.isInitialized&&!u.isClone){if(!this.options.initAsync)return this.init(u,T),this;setTimeout(()=>{this.init(u,T)},0)}}init(u={},T){this.isInitializing=!0,typeof u=="function"&&(T=u,u={}),u.defaultNS==null&&u.ns&&(isString$1(u.ns)?u.defaultNS=u.ns:u.ns.indexOf("translation")<0&&(u.defaultNS=u.ns[0]));const S=get();this.options={...S,...this.options,...transformOptions(u)},this.options.interpolation={...S.interpolation,...this.options.interpolation},u.keySeparator!==void 0&&(this.options.userDefinedKeySeparator=u.keySeparator),u.nsSeparator!==void 0&&(this.options.userDefinedNsSeparator=u.nsSeparator),typeof this.options.overloadTranslationOptionHandler!="function"&&(this.options.overloadTranslationOptionHandler=S.overloadTranslationOptionHandler),this.options.showSupportNotice!==!1&&!usesLocize(this)&&!getSupportNoticeShown()&&(typeof console<"u"&&typeof console.info<"u"&&console.info("🌐 i18next is maintained with support from Locize — consider powering your project with managed localization (AI, CDN, integrations): https://locize.com 💙"),setSupportNoticeShown());const E=I=>I?typeof I=="function"?new I:I:null;if(!this.options.isClone){this.modules.logger?baseLogger.init(E(this.modules.logger),this.options):baseLogger.init(null,this.options);let I;this.modules.formatter?I=this.modules.formatter:I=Formatter;const L=new LanguageUtil(this.options);this.store=new ResourceStore(this.options.resources,this.options);const j=this.services;j.logger=baseLogger,j.resourceStore=this.store,j.languageUtils=L,j.pluralResolver=new PluralResolver(L,{prepend:this.options.pluralSeparator,simplifyPluralSuffix:this.options.simplifyPluralSuffix}),this.options.interpolation.format&&this.options.interpolation.format!==S.interpolation.format&&this.logger.deprecate("init: you are still using the legacy format function, please use the new approach: https://www.i18next.com/translation-function/formatting"),I&&(!this.options.interpolation.format||this.options.interpolation.format===S.interpolation.format)&&(j.formatter=E(I),j.formatter.init&&j.formatter.init(j,this.options),this.options.interpolation.format=j.formatter.format.bind(j.formatter)),j.interpolator=new Interpolator(this.options),j.utils={hasLoadedNamespace:this.hasLoadedNamespace.bind(this)},j.backendConnector=new Connector(E(this.modules.backend),j.resourceStore,j,this.options),j.backendConnector.on("*",(D,...F)=>{this.emit(D,...F)}),this.modules.languageDetector&&(j.languageDetector=E(this.modules.languageDetector),j.languageDetector.init&&j.languageDetector.init(j,this.options.detection,this.options)),this.modules.i18nFormat&&(j.i18nFormat=E(this.modules.i18nFormat),j.i18nFormat.init&&j.i18nFormat.init(this)),this.translator=new Translator(this.services,this.options),this.translator.on("*",(D,...F)=>
207{this.emit(D,...F)}),this.modules.external.forEach(D=>{D.init&&D.init(this)})}if(this.format=this.options.interpolation.format,T||(T=noop),this.options.fallbackLng&&!this.services.languageDetector&&!this.options.lng){const I=this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);I.length>0&&I[0]!=="dev"&&(this.options.lng=I[0])}!this.services.languageDetector&&!this.options.lng&&this.logger.warn("init: no languageDetector is used and no lng is defined"),["getResource","hasResourceBundle","getResourceBundle","getDataByLanguage"].forEach(I=>{this[I]=(...L)=>this.store[I](...L)}),["addResource","addResources","addResourceBundle","removeResourceBundle"].forEach(I=>{this[I]=(...L)=>(this.store[I](...L),this)});const P=defer(),R=()=>{const I=(L,j)=>{this.isInitializing=!1,this.isInitialized&&!this.initializedStoreOnce&&this.logger.warn("init: i18next is already initialized. You should call init just once!"),this.isInitialized=!0,this.options.isClone||this.logger.log("initialized",this.options),this.emit("initialized",this.options),P.resolve(j),T(L,j)};if(this.languages&&!this.isInitialized)return I(null,this.t.bind(this));this.changeLanguage(this.options.lng,I)};return this.options.resources||!this.options.initAsync?R():setTimeout(R,0),P}loadResources(u,T=noop){var C,_;let S=T;const E=isString$1(u)?u:this.language;if(typeof u=="function"&&(S=u),!this.options.resources||this.options.partialBundledLanguages){if((E==null?void 0:E.toLowerCase())==="cimode"&&(!this.options.preload||this.options.preload.length===0))return S();const P=[],R=I=>{if(!I||I==="cimode")return;this.services.languageUtils.toResolveHierarchy(I).forEach(j=>{j!=="cimode"&&P.indexOf(j)<0&&P.push(j)})};E?R(E):this.services.languageUtils.getFallbackCodes(this.options.fallbackLng).forEach(L=>R(L)),(_=(C=this.options.preload)==null?void 0:C.forEach)==null||_.call(C,I=>R(I)),this.services.backendConnector.load(P,this.options.ns,I=>{!I&&!this.resolvedLanguage&&this.language&&this.setResolvedLanguage(this.language),S(I)})}else S(null)}reloadResources(u,T,S){const E=defer();return typeof u=="function"&&(S=u,u=void 0),typeof T=="function"&&(S=T,T=void 0),u||(u=this.languages),T||(T=this.options.ns),S||(S=noop),this.services.backendConnector.reload(u,T,C=>{E.resolve(),S(C)}),E}use(u){if(!u)throw new Error("You are passing an undefined module! Please check the object you are passing to i18next.use()");if(!u.type)throw new Error("You are passing a wrong module! Please check the object you are passing to i18next.use()");return u.type==="backend"&&(this.modules.backend=u),(u.type==="logger"||u.log&&u.warn&&u.error)&&(this.modules.logger=u),u.type==="languageDetector"&&(this.modules.languageDetector=u),u.type==="i18nFormat"&&(this.modules.i18nFormat=u),u.type==="postProcessor"&&postProcessor.addPostProcessor(u),u.type==="formatter"&&(this.modules.formatter=u),u.type==="3rdParty"&&this.modules.external.push(u),this}setResolvedLanguage(u){if(!(!u||!this.languages)&&!(["cimode","dev"].indexOf(u)>-1)){for(let T=0;T<this.languages.length;T++){const S=this.languages[T];if(!(["cimode","dev"].indexOf(S)>-1)&&this.store.hasLanguageSomeTranslations(S)){this.resolvedLanguage=S;break}}!this.resolvedLanguage&&this.languages.indexOf(u)<0&&this.store.hasLanguageSomeTranslations(u)&&(this.resolvedLanguage=u,this.languages.unshift(u))}}changeLanguage(u,T){this.isLanguageChangingTo=u;const S=defer();this.emit("languageChanging",u);const E=P=>{this.language=P,this.languages=this.services.languageUtils.toResolveHierarchy(P),this.resolvedLanguage=void 0,this.setResolvedLanguage(P)},C=(P,R)=>{R?this.isLanguageChangingTo===u&&(E(R),this.translator.changeLanguage(R),this.isLanguageChangingTo=void 0,this.emit("languageChanged",R),this.logger.log("languageChanged",R)):this.isLanguageChangingTo=void 0,S.resolve((...I)=>this.t(...I)),T&&T(P,(...I)=>this.t(...I))},_=P=>{var L,j;!u&&!P&&this.services.languageDetector&&(P=[]);const R=isString$1(P)?P:P&&P[0],I=this.store.hasLanguageSomeTranslations(R)?R:this.services.languageUtils.getBestMatchFromCodes(isString$1(P)?[P]:P);I&&(this.language||E(I),this.translator.language||this.translator.changeLanguage(I),(j=(L=this.services.languageDetector)==null?void 0:L.cacheUserLanguage)==null||j.call(L,I)),this.loadResources(I,M=>{C(M,I)})};return!u&&this.services.languageDetector&&!this.services.languageDetector.async?_(this.services.languageDetector.detect()):!u&&this.services.languageDetector&&this.services.languageDetector.async?this.services.languageDetector.detect.length===0?this.services.languageDetector.detect().then(_):this.services.languageDetector.detect(_):_(u),S}getFixedT(u,T,S){const E=(C,_,...P)=>{let R;typeof _!="object"?R=this.options.overloadTranslationOptionHandler([C,_].concat(P)):R={..._},R.lng=R.lng||E.lng,R.lngs=R.lngs||E.lngs,R.ns=R.ns||E.ns,R.keyPrefix!==""&&(R.keyPrefix=R.keyPrefix||S||E.keyPrefix);const I=this.options.keySeparator||".";let L;return R.keyPrefix&&Array.isArray(C)?L=C.map(j=>(typeof j=="function"&&(j=keysFromSelector(j,{...this.options,..._})),`${R.keyPrefix}${I}${j}`)):(typeof C=="function"&&(C=keysFromSelector(C,{...this.options,..._})),L=R.keyPrefix?`${R.keyPrefix}${I}${C}`:C),this.t(L,R)};return isString$1(u)?E.lng=u:E.lngs=u,E.ns=T,E.keyPrefix=S,E}t(...u){var T;return(T=this.translator)==null?void 0:T.translate(...u)}exists(...u){var T;return(T=this.translator)==null?void 0:T.exists(...u)}setDefaultNamespace(u){this.options.defaultNS=u}hasLoadedNamespace(u,T={}){if(!this.isInitialized)return this.logger.warn("hasLoadedNamespace: i18next was not initialized",this.languages),!1;
207if(!this.languages||!this.languages.length)return this.logger.warn("hasLoadedNamespace: i18n.languages were undefined or empty",this.languages),!1;const S=T.lng||this.resolvedLanguage||this.languages[0],E=this.options?this.options.fallbackLng:!1,C=this.languages[this.languages.length-1];if(S.toLowerCase()==="cimode")return!0;const _=(P,R)=>{const I=this.services.backendConnector.state[`${P}|${R}`];return I===-1||I===0||I===2};if(T.precheck){const P=T.precheck(this,_);if(P!==void 0)return P}return!!(this.hasResourceBundle(S,u)||!this.services.backendConnector.backend||this.options.resources&&!this.options.partialBundledLanguages||_(S,u)&&(!E||_(C,u)))}loadNamespaces(u,T){const S=defer();return this.options.ns?(isString$1(u)&&(u=[u]),u.forEach(E=>{this.options.ns.indexOf(E)<0&&this.options.ns.push(E)}),this.loadResources(E=>{S.resolve(),T&&T(E)}),S):(T&&T(),Promise.resolve())}loadLanguages(u,T){const S=defer();isString$1(u)&&(u=[u]);const E=this.options.preload||[],C=u.filter(_=>E.indexOf(_)<0&&this.services.languageUtils.isSupportedCode(_));return C.length?(this.options.preload=E.concat(C),this.loadResources(_=>{S.resolve(),T&&T(_)}),S):(T&&T(),Promise.resolve())}dir(u){var E,C;if(u||(u=this.resolvedLanguage||(((E=this.languages)==null?void 0:E.length)>0?this.languages[0]:this.language)),!u)return"rtl";try{const _=new Intl.Locale(u);if(_&&_.getTextInfo){const P=_.getTextInfo();if(P&&P.direction)return P.direction}}catch{}const T=["ar","shu","sqr","ssh","xaa","yhd","yud","aao","abh","abv","acm","acq","acw","acx","acy","adf","ads","aeb","aec","afb","ajp","apc","apd","arb","arq","ars","ary","arz","auz","avl","ayh","ayl","ayn","ayp","bbz","pga","he","iw","ps","pbt","pbu","pst","prp","prd","ug","ur","ydd","yds","yih","ji","yi","hbo","men","xmn","fa","jpr","peo","pes","prs","dv","sam","ckb"],S=((C=this.services)==null?void 0:C.languageUtils)||new LanguageUtil(get());return u.toLowerCase().indexOf("-latn")>1?"ltr":T.indexOf(S.getLanguagePartFromCode(u))>-1||u.toLowerCase().indexOf("-arab")>1?"rtl":"ltr"}static createInstance(u={},T){const S=new I18n(u,T);return S.createInstance=I18n.createInstance,S}cloneInstance(u={},T=noop){const S=u.forkResourceStore;S&&delete u.forkResourceStore;const E={...this.options,...u,isClone:!0},C=new I18n(E);if((u.debug!==void 0||u.prefix!==void 0)&&(C.logger=C.logger.clone(u)),["store","services","language"].forEach(P=>{C[P]=this[P]}),C.services={...this.services},C.services.utils={hasLoadedNamespace:C.hasLoadedNamespace.bind(C)},S){const P=Object.keys(this.store.data).reduce((R,I)=>(R[I]={...this.store.data[I]},R[I]=Object.keys(R[I]).reduce((L,j)=>(L[j]={...R[I][j]},L),R[I]),R),{});C.store=new ResourceStore(P,E),C.services.resourceStore=C.store}if(u.interpolation){const R={...get().interpolation,...this.options.interpolation,...u.interpolation},I={...E,interpolation:R};C.services.interpolator=new Interpolator(I)}return C.translator=new Translator(C.services,E),C.translator.on("*",(P,...R)=>{C.emit(P,...R)}),C.init(E,T),C.translator.options=E,C.translator.backendConnector.services.utils={hasLoadedNamespace:C.hasLoadedNamespace.bind(C)},C}toJSON(){return{options:this.options,store:this.store,language:this.language,languages:this.languages,resolvedLanguage:this.resolvedLanguage}}}const instance=I18n.createInstance();instance.createInstance;instance.dir;instance.init;instance.loadResources;instance.reloadResources;instance.use;instance.changeLanguage;instance.getFixedT;instance.t;instance.exists;instance.setDefaultNamespace;instance.hasLoadedNamespace;instance.loadNamespaces;instance.loadLanguages;var voidElements={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0};const e=getDefaultExportFromCjs(voidElements);var t=/\s([^'"/\s><]+?)[\s/>]|([^\s=]+)=\s?(".*?"|'.*?')/g;function n(o){var u={type:"tag",name:"",voidElement:!1,attrs:{},children:[]},T=o.match(/<\/?([^\s]+?)[/\s>]/);if(T&&(u.name=T[1],(e[T[1]]||o.charAt(o.length-2)==="/")&&(u.voidElement=!0),u.name.startsWith("!--"))){var S=o.indexOf("-->");return{type:"comment",comment:S!==-1?o.slice(4,S):""}}for(var E=new RegExp(t),C=null;(C=E.exec(o))!==null;)if(C[0].trim())if(C[1]){var _=C[1].trim(),P=[_,""];_.indexOf("=")>-1&&(P=_.split("=")),u.attrs[P[0]]=P[1],E.lastIndex--}else C[2]&&(u.attrs[C[2]]=C[3].trim().substring(1,C[3].length-1));return u}var r=/<[a-zA-Z0-9\-\!\/](?:"[^"]*"|'[^']*'|[^'">])*>/g,i=/^\s*$/,s=Object.create(null);function a(o,u){switch(u.type){case"text":return o+u.content;case"tag":return o+="<"+u.name+(u.attrs?function(T){var S=[];for(var E in T)S.push(E+'="'+T[E]+'"');return S.length?" "+S.join(" "):""}(u.attrs):"")+(u.voidElement?"/>":">"),u.voidElement?o:o+u.children.reduce(a,"")+"</"+u.name+">";
207case"comment":return o+"<!--"+u.comment+"-->"}}var c={parse:function(o,u){u||(u={}),u.components||(u.components=s);var T,S=[],E=[],C=-1,_=!1;if(o.indexOf("<")!==0){var P=o.indexOf("<");S.push({type:"text",content:P===-1?o:o.substring(0,P)})}return o.replace(r,function(R,I){if(_){if(R!=="</"+T.name+">")return;_=!1}var L,j=R.charAt(1)!=="/",M=R.startsWith("<!--"),D=I+R.length,F=o.charAt(D);if(M){var N=n(R);return C<0?(S.push(N),S):((L=E[C]).children.push(N),S)}if(j&&(C++,(T=n(R)).type==="tag"&&u.components[T.name]&&(T.type="component",_=!0),T.voidElement||_||!F||F==="<"||T.children.push({type:"text",content:o.slice(D,o.indexOf("<",D))}),C===0&&S.push(T),(L=E[C-1])&&L.children.push(T),E[C]=T),(!j||T.voidElement)&&(C>-1&&(T.voidElement||T.name===R.slice(2,-1))&&(C--,T=C===-1?S:E[C]),!_&&F!=="<"&&F)){L=C===-1?S:E[C].children;var G=o.indexOf("<",D),B=o.slice(D,G===-1?void 0:G);i.test(B)&&(B=" "),(G>-1&&C+L.length>=0||B!==" ")&&L.push({type:"text",content:B})}}),S},stringify:function(o){return o.reduce(function(u,T){return u+a("",T)},"")}};const warn=(o,u,T,S)=>{var C,_,P,R;const E=[T,{code:u,...S||{}}];if((_=(C=o==null?void 0:o.services)==null?void 0:C.logger)!=null&&_.forward)return o.services.logger.forward(E,"warn","react-i18next::",!0);isString(E[0])&&(E[0]=`react-i18next:: ${E[0]}`),(R=(P=o==null?void 0:o.services)==null?void 0:P.logger)!=null&&R.warn?o.services.logger.warn(...E):console!=null&&console.warn&&console.warn(...E)},alreadyWarned={},warnOnce=(o,u,T,S)=>{isString(T)&&alreadyWarned[T]||(isString(T)&&(alreadyWarned[T]=new Date),warn(o,u,T,S))},loadedClb=(o,u)=>()=>{if(o.isInitialized)u();else{const T=()=>{setTimeout(()=>{o.off("initialized",T)},0),u()};o.on("initialized",T)}},loadNamespaces=(o,u,T)=>{o.loadNamespaces(u,loadedClb(o,T))},loadLanguages=(o,u,T,S)=>{if(isString(T)&&(T=[T]),o.options.preload&&o.options.preload.indexOf(u)>-1)return loadNamespaces(o,T,S);T.forEach(E=>{o.options.ns.indexOf(E)<0&&o.options.ns.push(E)}),o.loadLanguages(u,loadedClb(o,S))},hasLoadedNamespace=(o,u,T={})=>!u.languages||!u.languages.length?(warnOnce(u,"NO_LANGUAGES","i18n.languages were undefined or empty",{languages:u.languages}),!0):u.hasLoadedNamespace(o,{lng:T.lng,precheck:(S,E)=>{if(T.bindI18n&&T.bindI18n.indexOf("languageChanging")>-1&&S.services.backendConnector.backend&&S.isLanguageChangingTo&&!E(S.isLanguageChangingTo,o))return!1}}),isString=o=>typeof o=="string",isObject=o=>typeof o=="object"&&o!==null,matchHtmlEntity=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g,htmlEntities={"&amp;":"&","&#38;":"&","&lt;":"<","&#60;":"<","&gt;":">","&#62;":">","&apos;":"'","&#39;":"'","&quot;":'"',"&#34;":'"',"&nbsp;":" ","&#160;":" ","&copy;":"©","&#169;":"©","&reg;":"®","&#174;":"®","&hellip;":"…","&#8230;":"…","&#x2F;":"/","&#47;":"/"},unescapeHtmlEntity=o=>htmlEntities[o],unescape=o=>o.replace(matchHtmlEntity,unescapeHtmlEntity);let defaultOptions={bindI18n:"languageChanged",bindI18nStore:"",transEmptyNodeValue:"",transSupportBasicHtmlNodes:!0,transWrapTextNodes:"",transKeepBasicHtmlNodesFor:["br","strong","i","p"],useSuspense:!0,unescape,transDefaultProps:void 0};const setDefaults=(o={})=>{defaultOptions={...defaultOptions,...o}},getDefaults=()=>defaultOptions;let i18nInstance;const setI18n=o=>{i18nInstance=o},getI18n=()=>i18nInstance,hasChildren=(o,u)=>{var S;if(!o)return!1;const T=((S=o.props)==null?void 0:S.children)??o.children;return u?T.length>0:!!T},getChildren=o=>{var T,S;if(!o)return[];const u=((T=o.props)==null?void 0:T.children)??o.children;return(S=o.props)!=null&&S.i18nIsDynamicList?getAsArray(u):u},hasValidReactChildren=o=>Array.isArray(o)&&o.every(reactExports.isValidElement),getAsArray=o=>Array.isArray(o)?o:[o],mergeProps=(o,u)=>{const T={...u};return T.props={...u.props,...o.props},T},getValuesFromChildren=o=>{const u={};if(!o)return u;const T=S=>{getAsArray(S).forEach(C=>{isString(C)||(hasChildren(C)?T(getChildren(C)):isObject(C)&&!reactExports.isValidElement(C)&&Object.assign(u,C))})};return T(o),u},nodesToString=(o,u,T,S)=>{if(!o)return"";let E="";const C=getAsArray(o),_=u!=null&&u.transSupportBasicHtmlNodes?u.transKeepBasicHtmlNodesFor??[]:[];
207return C.forEach((P,R)=>{if(isString(P)){E+=`${P}`;return}if(reactExports.isValidElement(P)){const{props:I,type:L}=P,j=Object.keys(I).length,M=_.indexOf(L)>-1,D=I.children;if(!D&&M&&!j){E+=`<${L}/>`;return}if(!D&&(!M||j)||I.i18nIsDynamicList){E+=`<${R}></${R}>`;return}if(M&&j===1&&isString(D)){E+=`<${L}>${D}</${L}>`;return}const F=nodesToString(D,u,T,S);E+=`<${R}>${F}</${R}>`;return}if(P===null){warn(T,"TRANS_NULL_VALUE","Passed in a null value as child",{i18nKey:S});return}if(isObject(P)){const{format:I,...L}=P,j=Object.keys(L);if(j.length===1){const M=I?`${j[0]}, ${I}`:j[0];E+=`{{${M}}}`;return}warn(T,"TRANS_INVALID_OBJ","Invalid child - Object should only have keys {{ value, format }} (format is optional).",{i18nKey:S,child:P});return}warn(T,"TRANS_INVALID_VAR","Passed in a variable like {number} - pass variables for interpolation as full objects like {{number}}.",{i18nKey:S,child:P})}),E},escapeLiteralLessThan=(o,u=[],T={})=>{if(!o)return o;const S=Object.keys(T),E=[...u,...S];let C="",_=0;for(;_<o.length;)if(o[_]==="<"){let P=!1;const R=o.slice(_).match(/^<\/(\d+|[a-zA-Z][a-zA-Z0-9_-]*)>/);if(R){const I=R[1];(/^\d+$/.test(I)||E.includes(I))&&(P=!0,C+=R[0],_+=R[0].length)}if(!P){const I=o.slice(_).match(/^<(\d+|[a-zA-Z][a-zA-Z0-9_-]*)(\s+[\w-]+(?:=(?:"[^"]*"|'[^']*'|[^\s>]+))?)*\s*(\/)?>/);if(I){const L=I[1];(/^\d+$/.test(L)||E.includes(L))&&(P=!0,C+=I[0],_+=I[0].length)}}P||(C+="&lt;",_+=1)}else C+=o[_],_+=1;return C},renderNodes=(o,u,T,S,E,C,_)=>{if(T==="")return[];const P=E.transKeepBasicHtmlNodesFor||[],R=T&&new RegExp(P.map(H=>`<${H}`).join("|")).test(T);if(!o&&!u&&!R&&!_)return[T];const I=u??{},L=H=>{getAsArray(H).forEach(V=>{isString(V)||(hasChildren(V)?L(getChildren(V)):isObject(V)&&!reactExports.isValidElement(V)&&Object.assign(I,V))})};L(o);const j=escapeLiteralLessThan(T,P,I),M=c.parse(`<0>${j}</0>`),D={...I,...C},F=(H,O,V)=>{var K;const U=getChildren(H),W=G(U,O.children,V);return hasValidReactChildren(U)&&W.length===0||(K=H.props)!=null&&K.i18nIsDynamicList?U:W},N=(H,O,V,U,W)=>{H.dummy?(H.children=O,V.push(reactExports.cloneElement(H,{key:U},W?void 0:O))):V.push(...reactExports.Children.map([H],K=>{const Y="data-i18n-is-dynamic-list",ee={key:U,[Y]:void 0};return K&&K.props&&Object.keys(K.props).forEach(oe=>{oe==="ref"||oe==="children"||oe==="i18nIsDynamicList"||oe===Y||(ee[oe]=K.props[oe])}),reactExports.cloneElement(K,ee,W?null:O)}))},G=(H,O,V)=>{const U=getAsArray(H);return getAsArray(O).reduce((K,Y,ee)=>{var se,Q;const oe=((Q=(se=Y.children)==null?void 0:se[0])==null?void 0:Q.content)&&S.services.interpolator.interpolate(Y.children[0].content,D,S.language);if(Y.type==="tag"){let ie=U[parseInt(Y.name,10)];!ie&&u&&(ie=u[Y.name]),V.length===1&&!ie&&(ie=V[0][Y.name]),ie||(ie={});const ae={...Y.attrs};_&&Object.keys(ae).forEach(de=>{const he=ae[de];isString(he)&&(ae[de]=unescape(he))});const re=Object.keys(ae).length!==0?mergeProps({props:ae},ie):ie,J=reactExports.isValidElement(re),te=J&&hasChildren(Y,!0)&&!Y.voidElement,Z=R&&isObject(re)&&re.dummy&&!J,X=isObject(u)&&Object.hasOwnProperty.call(u,Y.name);if(isString(re)){const de=S.services.interpolator.interpolate(re,D,S.language);K.push(de)}else if(hasChildren(re)||te){const de=F(re,Y,V);N(re,de,K,ee)}else if(Z){const de=G(U,Y.children,V);N(re,de,K,ee)}else if(Number.isNaN(parseFloat(Y.name)))if(X){const de=F(re,Y,V);N(re,de,K,ee,Y.voidElement)}else if(E.transSupportBasicHtmlNodes&&P.indexOf(Y.name)>-1)if(Y.voidElement)K.push(reactExports.createElement(Y.name,{key:`${Y.name}-${ee}`}));else{const de=G(U,Y.children,V);K.push(reactExports.createElement(Y.name,{key:`${Y.name}-${ee}`},de))}else if(Y.voidElement)K.push(`<${Y.name} />`);else{const de=G(U,Y.children,V);K.push(`<${Y.name}>${de}</${Y.name}>`)}else if(isObject(re)&&!J){const de=Y.children[0]?oe:null;de&&K.push(de)}else N(re,oe,K,ee,Y.children.length!==1||!oe)}else if(Y.type==="text"){const ie=E.transWrapTextNodes,ae=typeof E.unescape=="function"?E.unescape:getDefaults().unescape,re=_?ae(S.services.interpolator.interpolate(Y.content,D,S.language)):S.services.interpolator.interpolate(Y.content,D,S.language);ie?K.push(reactExports.createElement(ie,{key:`${Y.name}-${ee}`},re)):K.push(re)}return K},[])},B=G([{dummy:!0,children:o||[]}],M,getAsArray(o||[]));return getChildren(B[0])},fixComponentProps=(o,u,T)=>{const S=o.key||u,E=reactExports.cloneElement(o,{key:S});if(!E.props||!E.props.children||T.indexOf(`${u}/>`)<0&&T.indexOf(`${u} />`)<0)return E;function C(){return reactExports.createElement(reactExports.Fragment,null,E)}return reactExports.createElement(C,{key:S})},generateArrayComponents=(o,u)=>o.map((T,S)=>fixComponentProps(T,S,u)),generateObjectComponents=(o,u)=>{const T={};
207return Object.keys(o).forEach(S=>{Object.assign(T,{[S]:fixComponentProps(o[S],S,u)})}),T},generateComponents=(o,u,T,S)=>o?Array.isArray(o)?generateArrayComponents(o,u):isObject(o)?generateObjectComponents(o,u):(warnOnce(T,"TRANS_INVALID_COMPONENTS",'<Trans /> "components" prop expects an object or array',{i18nKey:S}),null):null,isComponentsMap=o=>!isObject(o)||Array.isArray(o)?!1:Object.keys(o).reduce((u,T)=>u&&Number.isNaN(Number.parseFloat(T)),!0);function Trans$1({children:o,count:u,parent:T,i18nKey:S,context:E,tOptions:C={},values:_,defaults:P,components:R,ns:I,i18n:L,t:j,shouldUnescape:M,...D}){var de,he,ne,ue,ce,fe;const F=L||getI18n();if(!F)return warnOnce(F,"NO_I18NEXT_INSTANCE","Trans: You need to pass in an i18next instance using i18nextReactModule",{i18nKey:S}),o;const N=j||F.t.bind(F)||(ve=>ve),G={...getDefaults(),...(de=F.options)==null?void 0:de.react};let B=I||N.ns||((he=F.options)==null?void 0:he.defaultNS);B=isString(B)?[B]:B||["translation"];const{transDefaultProps:H}=G,O=H!=null&&H.tOptions?{...H.tOptions,...C}:C,V=M??(H==null?void 0:H.shouldUnescape),U=H!=null&&H.values?{...H.values,..._}:_,W=H!=null&&H.components?{...H.components,...R}:R,K=nodesToString(o,G,F,S),Y=P||(O==null?void 0:O.defaultValue)||K||G.transEmptyNodeValue||(typeof S=="function"?keysFromSelector(S):S),{hashTransKey:ee}=G,oe=S||(ee?ee(K||Y):K||Y);(ue=(ne=F.options)==null?void 0:ne.interpolation)!=null&&ue.defaultVariables?_=U&&Object.keys(U).length>0?{...U,...F.options.interpolation.defaultVariables}:{...F.options.interpolation.defaultVariables}:_=U;const se=getValuesFromChildren(o);se&&typeof se.count=="number"&&u===void 0&&(u=se.count);const Q=_||u!==void 0&&!((fe=(ce=F.options)==null?void 0:ce.interpolation)!=null&&fe.alwaysFormat)||!o?O.interpolation:{interpolation:{...O.interpolation,prefix:"#$?",suffix:"?$#"}},ie={...O,context:E||O.context,count:u,..._,...Q,defaultValue:Y,ns:B};let ae=oe?N(oe,ie):Y;ae===oe&&Y&&(ae=Y);const re=generateComponents(W,ae,F,S);let J=re||o,te=null;isComponentsMap(re)&&(te=re,J=o);const Z=renderNodes(J,te,ae,F,G,ie,V),X=T??G.defaultTransParent;return X?reactExports.createElement(X,D,Z):Z}const initReactI18next={type:"3rdParty",init(o){setDefaults(o.options.react),setI18n(o)}},I18nContext=reactExports.createContext();class ReportNamespaces{constructor(){this.usedNamespaces={}}addUsedNamespaces(u){u.forEach(T=>{this.usedNamespaces[T]||(this.usedNamespaces[T]=!0)})}getUsedNamespaces(){return Object.keys(this.usedNamespaces)}}function Trans({children:o,count:u,parent:T,i18nKey:S,context:E,tOptions:C={},values:_,defaults:P,components:R,ns:I,i18n:L,t:j,shouldUnescape:M,...D}){var H;const{i18n:F,defaultNS:N}=reactExports.useContext(I18nContext)||{},G=L||F||getI18n(),B=j||(G==null?void 0:G.t.bind(G));return Trans$1({children:o,count:u,parent:T,i18nKey:S,context:E,tOptions:C,values:_,defaults:P,components:R,ns:I||(B==null?void 0:B.ns)||N||((H=G==null?void 0:G.options)==null?void 0:H.defaultNS),i18n:G,t:j,shouldUnescape:M,...D})}const notReadyT=(o,u)=>isString(u)?u:isObject(u)&&isString(u.defaultValue)?u.defaultValue:Array.isArray(o)?o[o.length-1]:o,notReadySnapshot={t:notReadyT,ready:!1},dummySubscribe=()=>()=>{},useTranslation=(o,u={})=>{var ee,oe,se;const{i18n:T}=u,{i18n:S,defaultNS:E}=reactExports.useContext(I18nContext)||{},C=T||S||getI18n();C&&!C.reportNamespaces&&(C.reportNamespaces=new ReportNamespaces),C||warnOnce(C,"NO_I18NEXT_INSTANCE","useTranslation: You will need to pass in an i18next instance by using initReactI18next");const _=reactExports.useMemo(()=>{var Q;return{...getDefaults(),...(Q=C==null?void 0:C.options)==null?void 0:Q.react,...u}},[C,u]),{useSuspense:P,keyPrefix:R}=_,I=o||E||((ee=C==null?void 0:C.options)==null?void 0:ee.defaultNS),L=isString(I)?[I]:I||["translation"],j=reactExports.useMemo(()=>L,L);(se=(oe=C==null?void 0:C.reportNamespaces)==null?void 0:oe.addUsedNamespaces)==null||se.call(oe,j);const M=reactExports.useRef(0),D=reactExports.useCallback(Q=>{if(!C)return dummySubscribe;const{bindI18n:ie,bindI18nStore:ae}=_,re=()=>{M.current+=1,Q()};return ie&&C.on(ie,re),ae&&C.store.on(ae,re),()=>{ie&&ie.split(" ").forEach(J=>C.off(J,re)),ae&&ae.split(" ").forEach(J=>C.store.off(J,re))}},[C,_]),F=reactExports.useRef(),N=reactExports.useCallback(()=>
207{if(!C)return notReadySnapshot;const Q=!!(C.isInitialized||C.initializedStoreOnce)&&j.every(Z=>hasLoadedNamespace(Z,C,_)),ie=u.lng||C.language,ae=M.current,re=F.current;if(re&&re.ready===Q&&re.lng===ie&&re.keyPrefix===R&&re.revision===ae)return re;const te={t:C.getFixedT(ie,_.nsMode==="fallback"?j:j[0],R),ready:Q,lng:ie,keyPrefix:R,revision:ae};return F.current=te,te},[C,j,R,_,u.lng]),[G,B]=reactExports.useState(0),{t:H,ready:O}=shimExports.useSyncExternalStore(D,N,N);reactExports.useEffect(()=>{if(C&&!O&&!P){const Q=()=>B(ie=>ie+1);u.lng?loadLanguages(C,u.lng,j,Q):loadNamespaces(C,j,Q)}},[C,u.lng,j,O,P,G]);const V=C||{},U=reactExports.useRef(null),W=reactExports.useRef(),K=Q=>{const ie=Object.getOwnPropertyDescriptors(Q);ie.__original&&delete ie.__original;const ae=Object.create(Object.getPrototypeOf(Q),ie);if(!Object.prototype.hasOwnProperty.call(ae,"__original"))try{Object.defineProperty(ae,"__original",{value:Q,writable:!1,enumerable:!1,configurable:!1})}catch{}return ae},Y=reactExports.useMemo(()=>{const Q=V,ie=Q==null?void 0:Q.language;let ae=Q;Q&&(U.current&&U.current.__original===Q?W.current!==ie?(ae=K(Q),U.current=ae,W.current=ie):ae=U.current:(ae=K(Q),U.current=ae,W.current=ie));const re=[H,ae,O];return re.t=H,re.i18n=ae,re.ready=O,re},[H,V,O,V.resolvedLanguage,V.language,V.languages]);if(C&&P&&!O)throw new Promise(Q=>{const ie=()=>Q();u.lng?loadLanguages(C,u.lng,j,ie):loadNamespaces(C,j,ie)});return Y},viFlag="/assets/vi-D9H5Bxu_.png",enFlag="/assets/en-D2-lxbMb.png",AssignIcon=createSvgIcon(jsxRuntimeExports.jsx("path",{d:"M19 3h-4.18C14.4 1.84 13.3 1 12 1s-2.4.84-2.82 2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2m-7 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1m2 14H7v-2h7zm3-4H7v-2h10zm0-4H7V7h10z"})),CheckIcon=createSvgIcon(jsxRuntimeExports.jsx("path",{d:"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"})),CheckCircle=createSvgIcon(jsxRuntimeExports.jsx("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m-2 15-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8z"})),CloseIcon=createSvgIcon(jsxRuntimeExports.jsx("path",{d:"M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"})),ContentCopyIcon=createSvgIcon(jsxRuntimeExports.jsx("path",{d:"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2m0 16H8V7h11z"})),EmailIcon=createSvgIcon(jsxRuntimeExports.jsx("path",{d:"M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2m0 4-8 5-8-5V6l8 5 8-5z"})),ExpandLessIcon=createSvgIcon(jsxRuntimeExports.jsx("path",{d:"m12 8-6 6 1.41 1.41L12 10.83l4.59 4.58L18 14z"})),ExpandMoreIcon=createSvgIcon(jsxRuntimeExports.jsx("path",{d:"M16.59 8.59 12 13.17 7.41 8.59 6 10l6 6 6-6z"})),FolderOpenIcon=createSvgIcon(jsxRuntimeExports.jsx("path",{d:"M20 6h-8l-2-2H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2m0 12H4V8h16z"})),GroupsIcon=createSvgIcon(jsxRuntimeExports.jsx("path",{d:"M12 12.75c1.63 0 3.07.39 4.24.9 1.08.48 1.76 1.56 1.76 2.73V18H6v-1.61c0-1.18.68-2.26 1.76-2.73 1.17-.52 2.61-.91 4.24-.91M4 13c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2m1.13 1.1c-.37-.06-.74-.1-1.13-.1-.99 0-1.93.21-2.78.58C.48 14.9 0 15.62 0 16.43V18h4.5v-1.61c0-.83.23-1.61.63-2.29M20 13c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2m4 3.43c0-.81-.48-1.53-1.22-1.85-.85-.37-1.79-.58-2.78-.58-.39 0-.76.04-1.13.1.4.68.63 1.46.63 2.29V18H24zM12 6c1.66 0 3 1.34 3 3s-1.34 3-3 3-3-1.34-3-3 1.34-3 3-3"})),HomeIcon=createSvgIcon(jsxRuntimeExports.jsx("path",{d:"M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"})),LibraryBooksIcon=createSvgIcon(jsxRuntimeExports.jsx("path",{d:"M4 6H2v14c0 1.1.9 2 2 2h14v-2H4zm16-4H8c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2m-1 9H9V9h10zm-4 4H9v-2h6zm4-8H9V5h10z"})),JoinIcon=createSvgIcon(jsxRuntimeExports.jsx("path",{d:"M11 7 9.6 8.4l2.6 2.6H2v2h10.2l-2.6 2.6L11 17l5-5zm9 12h-8v2h8c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2h-8v2h8z"})),LogoutIcon=createSvgIcon(jsxRuntimeExports.jsx("path",{d:"m17 7-1.41 1.41L18.17 11H8v2h10.17l-2.58 2.58L17 17l5-5zM4 5h8V3H4c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h8v-2H4z"})),MenuIcon=createSvgIcon(jsxRuntimeExports.jsx("path",{d:"M3 18h18v-2H3zm0-5h18v-2H3zm0-7v2h18V6z"})),NotificationsActiveIcon=createSvgIcon(jsxRuntimeExports.jsx("path",{d:"M7.58 4.08 6.15 2.65C3.75 4.48 2.17 7.3 2.03 10.5h2c.15-2.65 1.51-4.97 3.55-6.42m12.39 6.42h2c-.15-3.2-1.73-6.02-4.12-7.85l-1.42 1.43c2.02 1.45 3.39 3.77 3.54 6.42M18 11c0-3.07-1.64-5.64-4.5-6.32V4c0-.83-.67-1.5-1.5-1.5s-1.5.67-1.5 1.5v.68C7.63 5.36 6 7.92 6 11v5l-2 2v1h16v-1l-2-2zm-6 11c.14 0 .27-.01.4-.04.65-.14 1.18-.58 1.44-1.18q.15-.36.15-.78h-4c.01 1.1.9 2 2.01 2"})),QuestionIcon=createSvgIcon(jsxRuntimeExports.jsx("path",{d:"M21 6h-2v9H6v2c0 .55.45 1 1 1h11l4 4V7c0-.55-.45-1-1-1m-4 6V3c0-.55-.45-1-1-1H3c-.55 0-1 .45-1 1v14l4-4h10c.55 0 1-.45 1-1"})),Star=createSvgIcon(jsxRuntimeExports.jsx("path",{d:"M12 17.27 18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z"})),PROMO=15,TUYLC=10,TTHON=10,SAMDO=10,KLIEN=20,HDUYN=10,NGPHG=10,TNGVY=10,TNHAT=10,THINH=5,OANHK=10,CAOTH=5,HMACH=10,BRNOT=10,THANH=10,CHITH=10,AIKHA=10,HGIANG=10,YENPHI=10,LANLAN=10,MANH=10,TUANBOX=10,MRGIANG=10,HAHIEN=10,HAMILY=10,HAOHAO=10,MIDORI=10,THUYAI=10,EDUTECH=10,CLBETP=10,NGOCANH=10,HGTINH=10,HANHPH=10,TIEUHOC=10,PHAMVAN=10,MSDUYEN=10,LUUHOA=10,MSHUONG=10,MYKHUE=10,SELENA=10,VANANH=10,MSVUVU=10,LETAM=10,MYTRANG=10,DOPI=10,NGHIEP=10,THANHKR=10,HOTHAM=10,TANTUNG=10,LONGQN=10,promoCodes={PROMO,TUYLC,TTHON,SAMDO,KLIEN,HDUYN,NGPHG,TNGVY,TNHAT,THINH,OANHK,CAOTH,HMACH,BRNOT,THANH,CHITH,AIKHA,HGIANG,YENPHI,LANLAN,MANH,TUANBOX,MRGIANG,HAHIEN,HAMILY,HAOHAO,MIDORI,THUYAI,EDUTECH,CLBETP,NGOCANH,HGTINH,HANHPH,TIEUHOC,PHAMVAN,MSDUYEN,LUUHOA,MSHUONG,MYKHUE,SELENA,VANANH,MSVUVU,LETAM,MYTRANG,DOPI,NGHIEP,THANHKR,HOTHAM,TANTUNG,LONGQN},PAYMENT_CONFIG={BANK_ID:"BIDV",ACCOUNT_NO:"96247150790",ACCOUNT_NAME:"HO KINH DOANH BAN VAN THINH",PLANS:{PRO:2e5,FULL_AI_PLAN:25e4,FULL_TIEN_ICH:1e5,AI_TOOLS_GROUP1:1e5,AI_TOOLS_GROUP2:1e5,AI_SPEC:5e4,AI_TOOL_SINGLE:3e4,OTHER_TOOLS:3e4,OFFLINE:69e3,EXTLINK:5e4,EXTLINK_TIER:{1:5e4,2:7e4,3:1e5,5:2e5}},PROMO_CODES:promoCodes,MULTI_YEAR_DISCOUNTS:{1:0,2:5,3:10,5:20}},PROMO_BONUS_MONTHS=4,PROMO_BONUS_START=new Date("2026-05-04T00:00:00+07:00"),PROMO_BONUS_END=new Date("2026-05-31T23:59:59+07:00"),PROMO_BONUS_EXCLUDED=["aiToolsGroup1","aiToolsGroup2","aiToolsGroup3","aiToolsGroup4","offline","extendedLink","nhanxetExtension","chuanNgheNghiep"];function getBonusMonths(o){if(o&&PROMO_BONUS_EXCLUDED.includes(o))return 0;const u=new Date;return u>=PROMO_BONUS_START&&u<=PROMO_BONUS_END?PROMO_BONUS_MONTHS:0}function getPromoEndLabel(){const o=PROMO_BONUS_END;return`${String(o.getDate()).padStart(2,"0")}/${String(o.getMonth()+1).padStart(2,"0")}/${o.getFullYear()}`}const GROUP_BASE_DISCOUNT=10,GROUP_TIER1_RATE=1,GROUP_TIER2_RATE=.5,GROUP_TIER1_MAX=20,GROUP_MAX_MEMBERS=100,GROUP_MAX_DISCOUNT=35;function getGroupDiscount(o){if(o<2)return 0;const u=(Math.min(o,GROUP_TIER1_MAX)-2)*GROUP_TIER1_RATE,T=Math.max(o-GROUP_TIER1_MAX,0)*GROUP_TIER2_RATE;return Math.min(GROUP_BASE_DISCOUNT+u+T,GROUP_MAX_DISCOUNT)}function useToast(){const[o,u]=reactExports.useState([]),T=reactExports.useCallback((C,_="info",P=3e3)=>{const R=Date.now()+Math.random();return u(I=>[...I,{id:R,message:C,type:_,duration:P}]),R},[]),S=reactExports.useCallback(C=>{u(_=>_.filter(P=>P.id!==C))},[]),E=reactExports.useMemo(()=>({success:(C,_)=>T(C,"success",_),error:(C,_)=>T(C,"error",_),warning:(C,_)=>T(C,"warning",_),info:(C,_)=>T(C,"info",_)}),[T]);return{toasts:o,toast:E,removeToast:S}}const SFX_POOL_SIZE=3;class AudioManager{constructor(){this._questionAudio=null,this._questionPlayPromise=null,this._sfxPool=[],this._sfxIndex=0,this._unlocked=!1,this._initialized=!1,this._managedElements=[],this._unlockHandler=this._unlock.bind(this)}init(){if(this._initialized)return;this._initialized=!0,["touchstart","touchend","click","keydown"].forEach(T=>{document.addEventListener(T,this._unlockHandler,{once:!1,passive:!0})})}_createAudioElement(){const u=new Audio;return u.preload="auto",u.setAttribute("playsinline",""),u.setAttribute("webkit-playsinline",""),u}_ensureQuestionAudio(){return this._questionAudio||(this._questionAudio=this._createAudioElement()),this._questionAudio}
207_ensureSfxPool(){if(this._sfxPool.length===0)for(let u=0;u<SFX_POOL_SIZE;u++)this._sfxPool.push(this._createAudioElement());return this._sfxPool}_unlock(){if(this._unlocked)return;this._unlocked=!0,["touchstart","touchend","click","keydown"].forEach(T=>{document.removeEventListener(T,this._unlockHandler)}),setTimeout(()=>{const T="data:audio/mp3;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU4Ljc2LjEwMAAAAAAAAAAAAAAA//tQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWGluZwAAAA8AAAACAAABhgC7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7//////////////////////////////////////////////////////////////////8AAAAATGF2YzU4LjEzAAAAAAAAAAAAAAAAJAAAAAAAAAAAAYYoRwi3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//tQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWGluZwAAAA8AAAACAAABhgC7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7//////////////////////////////////////////////////////////////////8AAAAATGF2YzU4LjEzAAAAAAAAAAAAAAAAJAAAAAAAAAAAAYYoRwi3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",S=E=>{if(!E)return;const C=E.volume,_=E.src;E.volume=0,E.src=T;const P=E.play();P&&P.then(()=>{E.pause(),E.volume=C,E.src=_}).catch(()=>{E.volume=C,E.src=_})};this._questionAudio&&S(this._questionAudio),this._sfxPool.forEach(E=>S(E)),this._managedElements.forEach(E=>{E.paused&&S(E)})},100)}playQuestion(u,{volume:T=.8}={}){if(!u)return Promise.resolve();this.init();const S=this._ensureQuestionAudio(),E=(this._questionPlayPromise??Promise.resolve()).catch(()=>{});return this._questionPlayPromise=E.then(()=>(S.pause(),S.volume=T,S.src=u,S.currentTime=0,S.play())).catch(C=>{(C==null?void 0:C.name)!=="AbortError"&&console.warn("[AudioManager] Question play failed:",C.message)}),this._questionPlayPromise}stopQuestion(){if(!this._questionAudio)return;const u=this._questionAudio;(this._questionPlayPromise??Promise.resolve()).catch(()=>{}).then(()=>{u.pause(),u.currentTime=0}),this._questionPlayPromise=null}get isQuestionPlaying(){return this._questionAudio?!this._questionAudio.paused&&!this._questionAudio.ended:!1}get questionAudioElement(){return this._ensureQuestionAudio()}createManagedAudio(u="",{loop:T=!1,volume:S=1}={}){this.init();const E=this._createAudioElement();return u&&(E.src=u),E.loop=T,E.volume=S,this._managedElements.push(E),E}disposeManagedAudio(u){u&&(u.pause(),u.src="",this._managedElements=this._managedElements.filter(T=>T!==u))}playSFX(u,{volume:T=.7}={}){if(!u)return Promise.resolve();this.init();const E=this._ensureSfxPool()[this._sfxIndex%SFX_POOL_SIZE];return this._sfxIndex++,E.pause(),E.volume=T,E.src=u,E.currentTime=0,E.play().catch(C=>{console.warn("[AudioManager] SFX play failed:",C.message)})}duckBGM(u=.15){this._managedElements.forEach(T=>{T.paused||(T._originalVolume=T.volume,T.volume=u)})}unduckBGM(){this._managedElements.forEach(u=>{u._originalVolume!==void 0&&(u.volume=u._originalVolume,delete u._originalVolume)})}destroy(){this._questionAudio&&(this._questionAudio.pause(),this._questionAudio.src=""),this._sfxPool.forEach(T=>{T.pause(),T.src=""}),["touchstart","touchend","click","keydown"].forEach(T=>{document.removeEventListener(T,this._unlockHandler)})}}const audioManager=new AudioManager;function usePaymentQr({featureCode:o,basePrice:u,uid:T,appliedPromo:S=null,years:E=1,multiYear:C=!1,priceOverride:_,transferCodeOverride:P}){const R=PAYMENT_CONFIG.MULTI_YEAR_DISCOUNTS||{},I=S?Math.round(u-u*S.discount/100):u,L=C&&R[E]||0,j=C?I*E:I,M=_!==void 0?_:Math.round(j*(1-L/100)),D=(T||"UNKNOWN_UID").substring(0,8),F=P||o.toUpperCase(),N=S?`SEVQR ${F} ${D} ${S.code}`:`SEVQR ${F} ${D}`,G=`https://img.vietqr.io/image/${PAYMENT_CONFIG.BANK_ID}-${PAYMENT_CONFIG.ACCOUNT_NO}-compact2.png?amount=${M}&addInfo=${encodeURIComponent(N)}&accountName=${encodeURIComponent(PAYMENT_CONFIG.ACCOUNT_NAME)}`;return{price:M,priceAfterPromo:I,multiYearDiscountPct:L,transferContent:N,qrUrl:G}}/*! xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */var XLSX={};XLSX.version="0.18.5";var current_codepage=1200,current_ansi=1252,VALID_ANSI=[874,932,936,949,950,1250,1251,1252,1253,1254,1255,1256,1257,1258,1e4],CS2CP={0:1252,1:65001,2:65001,77:1e4,128:932,129:949,130:1361,134:936,136:950,161:1253,162:1254,163:1258,177:1255,178:1256,186:1257,204:1251,222:874,238:1250,255:1252,69:6969},set_ansi=function(o){VALID_ANSI.indexOf(o)!=-1&&(current_ansi=CS2CP[0]=o)};function reset_ansi(){set_ansi(1252)}var set_cp=function(o){current_codepage=o,set_ansi(o)};function reset_cp(){set_cp(1200),reset_ansi()}function char_codes(o){for(var u=[],T=0,S=o.length;T<S;
207++T)u[T]=o.charCodeAt(T);return u}function utf16leread(o){for(var u=[],T=0;T<o.length>>1;++T)u[T]=String.fromCharCode(o.charCodeAt(2*T)+(o.charCodeAt(2*T+1)<<8));return u.join("")}function utf16beread(o){for(var u=[],T=0;T<o.length>>1;++T)u[T]=String.fromCharCode(o.charCodeAt(2*T+1)+(o.charCodeAt(2*T)<<8));return u.join("")}var debom=function(o){var u=o.charCodeAt(0),T=o.charCodeAt(1);return u==255&&T==254?utf16leread(o.slice(2)):u==254&&T==255?utf16beread(o.slice(2)):u==65279?o.slice(1):o},_getchar=function(u){return String.fromCharCode(u)},_getansi=function(u){return String.fromCharCode(u)},$cptable;function set_cptable(o){$cptable=o,set_cp=function(u){current_codepage=u,set_ansi(u)},debom=function(u){return u.charCodeAt(0)===255&&u.charCodeAt(1)===254?$cptable.utils.decode(1200,char_codes(u.slice(2))):u},_getchar=function(T){return current_codepage===1200?String.fromCharCode(T):$cptable.utils.decode(current_codepage,[T&255,T>>8])[0]},_getansi=function(T){return $cptable.utils.decode(current_ansi,[T])[0]},cpdoit()}var Base64_map="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";function Base64_encode(o){for(var u="",T=0,S=0,E=0,C=0,_=0,P=0,R=0,I=0;I<o.length;)T=o.charCodeAt(I++),C=T>>2,S=o.charCodeAt(I++),_=(T&3)<<4|S>>4,E=o.charCodeAt(I++),P=(S&15)<<2|E>>6,R=E&63,isNaN(S)?P=R=64:isNaN(E)&&(R=64),u+=Base64_map.charAt(C)+Base64_map.charAt(_)+Base64_map.charAt(P)+Base64_map.charAt(R);return u}function Base64_decode(o){var u="",T=0,S=0,E=0,C=0,_=0,P=0,R=0;o=o.replace(/[^\w\+\/\=]/g,"");for(var I=0;I<o.length;)C=Base64_map.indexOf(o.charAt(I++)),_=Base64_map.indexOf(o.charAt(I++)),T=C<<2|_>>4,u+=String.fromCharCode(T),P=Base64_map.indexOf(o.charAt(I++)),S=(_&15)<<4|P>>2,P!==64&&(u+=String.fromCharCode(S)),R=Base64_map.indexOf(o.charAt(I++)),E=(P&3)<<6|R,R!==64&&(u+=String.fromCharCode(E));return u}var has_buf=function(){return typeof Buffer<"u"&&typeof process<"u"&&typeof process.versions<"u"&&!!process.versions.node}(),Buffer_from=function(){if(typeof Buffer<"u"){var o=!Buffer.from;if(!o)try{Buffer.from("foo","utf8")}catch{o=!0}return o?function(u,T){return T?new Buffer(u,T):new Buffer(u)}:Buffer.from.bind(Buffer)}return function(){}}();function new_raw_buf(o){return has_buf?Buffer.alloc?Buffer.alloc(o):new Buffer(o):typeof Uint8Array<"u"?new Uint8Array(o):new Array(o)}function new_unsafe_buf(o){return has_buf?Buffer.allocUnsafe?Buffer.allocUnsafe(o):new Buffer(o):typeof Uint8Array<"u"?new Uint8Array(o):new Array(o)}var s2a=function(u){return has_buf?Buffer_from(u,"binary"):u.split("").map(function(T){return T.charCodeAt(0)&255})};function s2ab(o){if(typeof ArrayBuffer>"u")return s2a(o);for(var u=new ArrayBuffer(o.length),T=new Uint8Array(u),S=0;S!=o.length;++S)T[S]=o.charCodeAt(S)&255;return u}function a2s(o){if(Array.isArray(o))return o.map(function(S){return String.fromCharCode(S)}).join("");for(var u=[],T=0;T<o.length;++T)u[T]=String.fromCharCode(o[T]);return u.join("")}function a2u(o){if(typeof Uint8Array>"u")throw new Error("Unsupported");return new Uint8Array(o)}function ab2a(o){if(typeof ArrayBuffer>"u")throw new Error("Unsupported");if(o instanceof ArrayBuffer)return ab2a(new Uint8Array(o));for(var u=new Array(o.length),T=0;T<o.length;++T)u[T]=o[T];return u}var bconcat=has_buf?function(o){return Buffer.concat(o.map(function(u){return Buffer.isBuffer(u)?u:Buffer_from(u)}))}:function(o){if(typeof Uint8Array<"u"){var u=0,T=0;for(u=0;u<o.length;++u)T+=o[u].length;var S=new Uint8Array(T),E=0;for(u=0,T=0;u<o.length;T+=E,++u)if(E=o[u].length,o[u]instanceof Uint8Array)S.set(o[u],T);else{if(typeof o[u]=="string")throw"wtf";S.set(new Uint8Array(o[u]),T)}return S}return[].concat.apply([],o.map(function(C){return Array.isArray(C)?C:[].slice.call(C)}))};function utf8decode(o){for(var u=[],T=0,S=o.length+250,E=new_raw_buf(o.length+255),C=0;C<o.length;++C){var _=o.charCodeAt(C);if(_<128)E[T++]=_;else if(_<2048)E[T++]=192|_>>6&31,E[T++]=128|_&63;else if(_>=55296&&_<57344){_=(_&1023)+64;var P=o.charCodeAt(++C)&1023;E[T++]=240|_>>8&7,E[T++]=128|_>>2&63,E[T++]=128|P>>6&15|(_&3)<<4,E[T++]=128|P&63}else E[T++]=224|_>>12&15,E[T++]=128|_>>6&63,E[T++]=128|_&63;T>
vendor: 64,103 bytes, lines 207-217
207S&&(u.push(E.slice(0,T)),T=0,E=new_raw_buf(65535),S=65530)}return u.push(E.slice(0,T)),bconcat(u)}var chr0=/\u0000/g,chr1=/[\u0001-\u0006]/g;function _strrev(o){for(var u="",T=o.length-1;T>=0;)u+=o.charAt(T--);return u}function pad0(o,u){var T=""+o;return T.length>=u?T:fill("0",u-T.length)+T}function pad_(o,u){var T=""+o;return T.length>=u?T:fill(" ",u-T.length)+T}function rpad_(o,u){var T=""+o;return T.length>=u?T:T+fill(" ",u-T.length)}function pad0r1(o,u){var T=""+Math.round(o);return T.length>=u?T:fill("0",u-T.length)+T}function pad0r2(o,u){var T=""+o;return T.length>=u?T:fill("0",u-T.length)+T}var p2_32=Math.pow(2,32);function pad0r(o,u){if(o>p2_32||o<-p2_32)return pad0r1(o,u);var T=Math.round(o);return pad0r2(T,u)}function SSF_isgeneral(o,u){return u=u||0,o.length>=7+u&&(o.charCodeAt(u)|32)===103&&(o.charCodeAt(u+1)|32)===101&&(o.charCodeAt(u+2)|32)===110&&(o.charCodeAt(u+3)|32)===101&&(o.charCodeAt(u+4)|32)===114&&(o.charCodeAt(u+5)|32)===97&&(o.charCodeAt(u+6)|32)===108}var days=[["Sun","Sunday"],["Mon","Monday"],["Tue","Tuesday"],["Wed","Wednesday"],["Thu","Thursday"],["Fri","Friday"],["Sat","Saturday"]],months=[["J","Jan","January"],["F","Feb","February"],["M","Mar","March"],["A","Apr","April"],["M","May","May"],["J","Jun","June"],["J","Jul","July"],["A","Aug","August"],["S","Sep","September"],["O","Oct","October"],["N","Nov","November"],["D","Dec","December"]];function SSF_init_table(o){return o||(o={}),o[0]="General",o[1]="0",o[2]="0.00",o[3]="#,##0",o[4]="#,##0.00",o[9]="0%",o[10]="0.00%",o[11]="0.00E+00",o[12]="# ?/?",o[13]="# ??/??",o[14]="m/d/yy",o[15]="d-mmm-yy",o[16]="d-mmm",o[17]="mmm-yy",o[18]="h:mm AM/PM",o[19]="h:mm:ss AM/PM",o[20]="h:mm",o[21]="h:mm:ss",o[22]="m/d/yy h:mm",o[37]="#,##0 ;(#,##0)",o[38]="#,##0 ;[Red](#,##0)",o[39]="#,##0.00;(#,##0.00)",o[40]="#,##0.00;[Red](#,##0.00)",o[45]="mm:ss",o[46]="[h]:mm:ss",o[47]="mmss.0",o[48]="##0.0E+0",o[49]="@",o[56]='"上午/下午 "hh"時"mm"分"ss"秒 "',o}var table_fmt={0:"General",1:"0",2:"0.00",3:"#,##0",4:"#,##0.00",9:"0%",10:"0.00%",11:"0.00E+00",12:"# ?/?",13:"# ??/??",14:"m/d/yy",15:"d-mmm-yy",16:"d-mmm",17:"mmm-yy",18:"h:mm AM/PM",19:"h:mm:ss AM/PM",20:"h:mm",21:"h:mm:ss",22:"m/d/yy h:mm",37:"#,##0 ;(#,##0)",38:"#,##0 ;[Red](#,##0)",39:"#,##0.00;(#,##0.00)",40:"#,##0.00;[Red](#,##0.00)",45:"mm:ss",46:"[h]:mm:ss",47:"mmss.0",48:"##0.0E+0",49:"@",56:'"上午/下午 "hh"時"mm"分"ss"秒 "'},SSF_default_map={5:37,6:38,7:39,8:40,23:0,24:0,25:0,26:0,27:14,28:14,29:14,30:14,31:14,50:14,51:14,52:14,53:14,54:14,55:14,56:14,57:14,58:14,59:1,60:2,61:3,62:4,67:9,68:10,69:12,70:13,71:14,72:14,73:15,74:16,75:17,76:20,77:21,78:22,79:45,80:46,81:47,82:0},SSF_default_str={5:'"$"#,##0_);\\("$"#,##0\\)',63:'"$"#,##0_);\\("$"#,##0\\)',6:'"$"#,##0_);[Red]\\("$"#,##0\\)',64:'"$"#,##0_);[Red]\\("$"#,##0\\)',7:'"$"#,##0.00_);\\("$"#,##0.00\\)',65:'"$"#,##0.00_);\\("$"#,##0.00\\)',8:'"$"#,##0.00_);[Red]\\("$"#,##0.00\\)',66:'"$"#,##0.00_);[Red]\\("$"#,##0.00\\)',41:'_(* #,##0_);_(* \\(#,##0\\);_(* "-"_);_(@_)',42:'_("$"* #,##0_);_("$"* \\(#,##0\\);_("$"* "-"_);_(@_)',43:'_(* #,##0.00_);_(* \\(#,##0.00\\);_(* "-"??_);_(@_)',44:'_("$"* #,##0.00_);_("$"* \\(#,##0.00\\);_("$"* "-"??_);_(@_)'};function SSF_frac(o,u,T){for(var S=o<0?-1:1,E=o*S,C=0,_=1,P=0,R=1,I=0,L=0,j=Math.floor(E);I<u&&(j=Math.floor(E),P=j*_+C,L=j*I+R,!(E-j<5e-8));)E=1/(E-j),C=_,_=P,R=I,I=L;if(L>u&&(I>u?(L=R,P=C):(L=I,P=_)),!T)return[0,S*P,L];var M=Math.floor(S*P/L);return[M,S*P-M*L,L]}function SSF_parse_date_code(o,u,T){if(o>2958465||o<0)return null;var S=o|0,E=Math.floor(86400*(o-S)),C=0,_=[],P={D:S,T:E,u:86400*(o-S)-E,y:0,m:0,d:0,H:0,M:0,S:0,q:0};if(Math.abs(P.u)<1e-6&&(P.u=0),u&&u.date1904&&(S+=1462),P.u>.9999&&(P.u=0,++E==86400&&(P.T=E=0,++S,++P.D)),S===60)_=T?[1317,10,29]:[1900,2,29],C=3;else if(S===0)_=T?[1317,8,29]:[1900,1,0],C=6;else{S>60&&--S;var R=new Date(1900,0,1);R.setDate(R.getDate()+S-1),_=[R.getFullYear(),R.getMonth()+1,R.getDate()],C=R.getDay(),S<60&&(C=(C+6)%7),T&&(C=SSF_fix_hijri(R,_))}return P.y=_[0],P.m=_[1],P.d=_[2],P.S=E%60,E=Math.floor(E/60),P.M=E%60,E=Math.floor(E/60),P.H=E,P.q=C,P}var SSFbasedate=new Date(1899,11,31,0,0,0),SSFdnthresh=SSFbasedate.getTime(),SSFbase1904=new Date(1900,2,1,0,0,0);function datenum_local(o,u){var T=o.getTime();return u?T-=1461*24*60*60*1e3:o>=SSFbase1904&&(T+=24*60*60*1e3),(T-(SSFdnthresh+(o.getTimezoneOffset()-SSFbasedate.getTimezoneOffset())*6e4))/(24*60*60*1e3)}function SSF_strip_decimal(o){return o.indexOf(".")==-1?o:o.replace(/(?:\.0*|(\.\d*[1-9])0+)$/,"$1")}function SSF_normalize_exp(o){return o.indexOf("E")==-1?o:o.replace(/(?:\.0*|(\.\d*[1-9])0+)[Ee]/,"$1E").replace(/(E[+-])(\d)$/,"$10$2")}function SSF_small_exp(o){var u=o<0?12:11,T=SSF_strip_decimal(o.toFixed(12));return T.length<=u||(T=o.toPrecision(10),T.length<=u)?T:o.toExponential(5)}function SSF_large_exp(o){var u=SSF_strip_decimal(o.toFixed(11));return u.length>(o<0?12:11)||u==="0"||u==="-0"?o.toPrecision(6):u}function SSF_general_num(o){var u=Math.floor(Math.log(Math.abs(o))*Math.LOG10E),T;return u>=-4&&u<=-1?T=o.toPrecision(10+u):Math.abs(u)<=9?T=SSF_small_exp(o):u===10?T=o.toFixed(10).substr(0,12):T=SSF_large_exp(o),SSF_strip_decimal(SSF_normalize_exp(T.toUpperCase()))}function SSF_general(o,u){switch(typeof o){case"string":return o;case"boolean":return o?"TRUE":"FALSE";case"number":return(o|0)===o?o.toString(10):SSF_general_num(o);case"undefined":return"";case"object":if(o==null)return"";if(o instanceof Date)return SSF_format(14,datenum_local(o,u&&u.date1904),u)}throw new Error("unsupported value in General format: "+o)}function SSF_fix_hijri(o,u){u[0]-=581;var T=o.getDay();return o<60&&(T=(T+6)%7),T}function SSF_write_date(o,u,T,S){var E="",C=0,_=0,P=T.y,R,I=0;switch(o){case 98:P=T.y+543;case 121:switch(u.length){case 1:case 2:R=P%100,I=2;break;default:R=P%1e4,I=4;break}break;case 109:switch(u.length){case 1:case 2:R=T.m,I=u.length;break;case 3:return months[T.m-1][1];case 5:return months[T.m-1][0];default:return months[T.m-1][2]}break;case 100:switch(u.length){case 1:case 2:R=T.d,I=u.length;break;case 3:return days[T.q][0];default:return days[T.q][1]}break;case 104:switch(u.length){case 1:case 2:R=1+(T.H+11)%12,I=u.length;break;default:throw"bad hour format: "+u}break;case 72:switch(u.length){case 1:case 2:R=T.H,I=u.length;break;default:throw"bad hour format: "+u}break;case 77:switch(u.length){case 1:case 2:R=T.M,I=u.length;break;default:throw"bad minute format: "+u}break;case 115:if(u!="s"&&u!="ss"&&u!=".0"&&u!=".00"&&u!=".000")throw"bad second format: "+u;return T.u===0&&(u=="s"||u=="ss")?pad0(T.S,u.length):(S>=2?_=S===3?1e3:100:_=S===1?10:1,C=Math.round(_*(T.S+T.u)),C>=60*_&&(C=0),u==="s"?C===0?"0":""+C/_:(E=pad0(C,2+S),u==="ss"?E.substr(0,2):"."+E.substr(2,u.length-1)));case 90:switch(u){case"[h]":case"[hh]":R=T.D*24+T.H;break;case"[m]":case"[mm]":R=(T.D*24+T.H)*60+T.M;break;case"[s]":case"[ss]":R=((T.D*24+T.H)*60+T.M)*60+Math.round(T.S+T.u);break;default:throw"bad abstime format: "+u}I=u.length===3?1:2;break;case 101:R=P,I=1;break}var L=I>0?pad0(R,I):"";return L}function commaify(o){var u=3;if(o.length<=u)return o;for(var T=o.length%u,S=o.substr(0,T);T!=o.length;T+=u)S+=(S.length>0?",":"")+o.substr(T,u);return S}var pct1=/%/g;function write_num_pct(o,u,T){var S=u.replace(pct1,""),E=u.length-S.length;return write_num(o,S,T*Math.pow(10,2*E))+fill("%",E)}function write_num_cm(o,u,T){for(var S=u.length-1;u.charCodeAt(S-1)===44;)--S;return write_num(o,u.substr(0,S),T/Math.pow(10,3*(u.length-S)))}function write_num_exp(o,u){var T,S=o.indexOf("E")-o.indexOf(".")-1;if(o.match(/^#+0.0E\+0$/)){if(u==0)return"0.0E+0";if(u<0)return"-"+write_num_exp(o,-u);var E=o.indexOf(".");E===-1&&(E=o.indexOf("E"));var C=Math.floor(Math.log(u)*Math.LOG10E)%E;if(C<0&&(C+=E),T=(u/Math.pow(10,C)).toPrecision(S+1+(E+C)%E),T.indexOf("e")===-1){var _=Math.floor(Math.log(u)*Math.LOG10E);for(T.indexOf(".")===-1?T=T.charAt(0)+"."+T.substr(1)+"E+"+(_-T.length+C):T+="E+"+(_-C);T.substr(0,2)==="0.";)T=T.charAt(0)+T.substr(2,E)+"."+T.substr(2+E),T=T.replace(/^0+([1-9])/,"$1").replace(/^0+\./,"0.");T=T.replace(/\+-/,"-")}T=T.replace(/^([+-]?)(\d*)\.(\d*)[Ee]/,function(P,R,I,L){return R+I+L.substr(0,(E+C)%E)+"."+L.substr(C)+"E"})}else T=u.toExponential(S);return o.match(/E\+00$/)&&T.match(/e[+-]\d$/)&&(T=T.substr(0,T.length-1)+"0"+T.charAt(T.length-1)),o.match(/E\-/)&&T.match(/e\+/)&&(T=T.replace(/e\+/,"e")),T.replace("e","E")}var frac1=/# (\?+)( ?)\/( ?)(\d+)/;function write_num_f1(o,u,T){var S=parseInt(o[4],10),E=Math.round(u*S),C=Math.floor(E/S),_=E-C*S,P=S;return T+(C===0?"":""+C)+" "+(_===0?fill(" ",o[1].length+1+o[4].length):pad_(_,o[1].length)+o[2]+"/"+o[3]+pad0(P,o[4].length))}function write_num_f2(o,u,T){return T+(u===0?"":""+u)+fill(" ",o[1].length+2+o[4].length)}var dec1=/^#*0*\.([0#]+)/,closeparen=/\).*[0#]/,phone=/\(###\) ###\\?-####/;function hashq(o){for(var u="",T,S=0;S!=o.length;++S)switch(T=o.charCodeAt(S)){case 35:break;case 63:u+=" ";break;case 48:u+="0";break;default:u+=String.fromCharCode(T)}return u}function rnd(o,u){var T=Math.pow(10,u);return""+Math.round(o*T)/T}function dec(o,u){var T=o-Math.floor(o),S=Math.pow(10,u);return u<(""+Math.round(T*S)).length?0:Math.round(T*S)}function carry(o,u){return u<(""+Math.round((o-Math.floor(o))*Math.pow(10,u))).length?1:0}function flr(o){return o<2147483647&&o>-2147483648?""+(o>=0?o|0:o-1|0):""+Math.floor(o)}function write_num_flt(o,u,T){if(o.charCodeAt(0)===40&&!u.match(closeparen)){var S=u.replace(/\( */,"").replace(/ \)/,"").replace(/\)/,"");return T>=0?write_num_flt("n",S,T):"("+write_num_flt("n",S,-T)+")"}if(u.charCodeAt(u.length-1)===44)return write_num_cm(o,u,T);if(u.indexOf("%")!==-1)return write_num_pct(o,u,T);if(u.indexOf("E")!==-1)return write_num_exp(u,T);if(u.charCodeAt(0)===36)return"$"+write_num_flt(o,u.substr(u.charAt(1)==" "?2:1),T);var E,C,_,P,R=Math.abs(T),I=T<0?"-":"";if(u.match(/^00+$/))return I+pad0r(R,u.length);if(u.match(/^[#?]+$/))return E=pad0r(T,0),E==="0"&&(E=""),E.length>u.length?E:hashq(u.substr(0,u.length-E.length))+E;if(C=u.match(frac1))return write_num_f1(C,R,I);if(u.match(/^#+0+$/))return I+pad0r(R,u.length-u.indexOf("0"));if(C=u.match(dec1))return E=rnd(T,C[1].length).replace(/^([^\.]+)$/,"$1."+hashq(C[1])).replace(/\.$/,"."+hashq(C[1])).replace(/\.(\d*)$/,function(F,N){return"."+N+fill("0",hashq(C[1]).length-N.length)}),u.indexOf("0.")!==-1?E:E.replace(/^0\./,".");if(u=u.replace(/^#+([0.])/,"$1"),C=u.match(/^(0*)\.(#*)$/))return I+rnd(R,C[2].length).replace(/\.(\d*[1-9])0*$/,".$1").replace(/^(-?\d*)$/,"$1.").replace(/^0\./,C[1].length?"0.":".");if(C=u.match(/^#{1,3},##0(\.?)$/))return I+commaify(pad0r(R,0));if(C=u.match(/^#,##0\.([#0]*0)$/))return T<0?"-"+write_num_flt(o,u,-T):commaify(""+(Math.floor(T)+carry(T,C[1].length)))+"."+pad0(dec(T,C[1].length),C[1].length);if(C=u.match(/^#,#*,#0/))return write_num_flt(o,u.replace(/^#,#*,/,""),T);if(C=u.match(/^([0#]+)(\\?-([0#]+))+$/))return E=_strrev(write_num_flt(o,u.replace(/[\\-]/g,""),T)),_=0,_strrev(_strrev(u.replace(/\\/g,"")).replace(/[0#]/g,function(F){return _<E.length?E.charAt(_++):F==="0"?"0":""}));if(u.match(phone))return E=write_num_flt(o,"##########",T),"("+E.substr(0,3)+") "+E.substr(3,3)+"-"+E.substr(6);var L="";if(C=u.match(/^([#0?]+)( ?)\/( ?)([#0?]+)/))return _=Math.min(C[4].length,7),P=SSF_frac(R,Math.pow(10,_)-1,!1),E=""+I,L=write_num("n",C[1],P[1]),L.charAt(L.length-1)==" "&&(L=L.substr(0,L.length-1)+"0"),E+=L+C[2]+"/"+C[3],L=rpad_(P[2],_),L.length<C[4].length&&(L=hashq(C[4].substr(C[4].length-L.length))+L),E+=L,E;if(C=u.match(/^# ([#0?]+)( ?)\/( ?)([#0?]+)/))return _=Math.min(Math.max(C[1].length,C[4].length),7),P=SSF_frac(R,Math.pow(10,_)-1,!0),I+(P[0]||(P[1]?"":"0"))+" "+(P[1]?pad_(P[1],_)+C[2]+"/"+C[3]+rpad_(P[2],_):fill(" ",2*_+1+C[2].length+C[3].length));if(C=u.match(/^[#0?]+$/))return E=pad0r(T,0),u.length<=E.length?E:hashq(u.substr(0,u.length-E.length))+E;if(C=u.match(/^([#0?]+)\.([#0]+)$/)){E=""+T.toFixed(Math.min(C[2].length,10)).replace(/([^0])0+$/,"$1"),_=E.indexOf(".");var j=u.indexOf(".")-_,M=u.length-E.length-j;return hashq(u.substr(0,j)+E+u.substr(u.length-M))}if(C=u.match(/^00,000\.([#0]*0)$/))return _=dec(T,C[1].length),T<0?"-"+write_num_flt(o,u,-T):commaify(flr(T)).replace(/^\d,\d{3}$/,"0$&").replace(/^\d*$/,function(F){return"00,"+(F.length<3?pad0(0,3-F.length):"")+F})+"."+pad0(_,C[1].length);switch(u){case"###,##0.00":return write_num_flt(o,"#,##0.00",T);case"###,###":case"##,###":case"#,###":var D=commaify(pad0r(R,0));return D!=="0"?I+D:"";case"###,###.00":return write_num_flt(o,"###,##0.00",T).replace(/^0\./,".");case"#,###.00":return write_num_flt(o,"#,##0.00",T).replace(/^0\./,".")}throw new Error("unsupported format |"+u+"|")}function write_num_cm2(o,u,T){for(var S=u.length-1;u.charCodeAt(S-1)===44;)--S;return write_num(o,u.substr(0,S),T/Math.pow(10,3*(u.length-S)))}function write_num_pct2(o,u,T){var S=u.replace(pct1,""),E=u.length-S.length;return write_num(o,S,T*Math.pow(10,2*E))+fill("%",E)}function write_num_exp2(o,u){var T,S=o.indexOf("E")-o.indexOf(".")-1;if(o.match(/^#+0.0E\+0$/)){if(u==0)return"0.0E+0";if(u<0)return"-"+write_num_exp2(o,-u);var E=o.indexOf(".");E===-1&&(E=o.indexOf("E"));var C=Math.floor(Math.log(u)*Math.LOG10E)%E;if(C<0&&(C+=E),T=(u/Math.pow(10,C)).toPrecision(S+1+(E+C)%E),!T.match(/[Ee]/)){var _=Math.floor(Math.log(u)*Math.LOG10E);T.indexOf(".")===-1?T=T.charAt(0)+"."+T.substr(1)+"E+"+(_-T.length+C):T+="E+"+(_-C),T=T.replace(/\+-/,"-")}T=T.replace(/^([+-]?)(\d*)\.(\d*)[Ee]/,function(P,R,I,L){return R+I+L.substr(0,(E+C)%E)+"."+L.substr(C)+"E"})}else T=u.toExponential(S);return o.match(/E\+00$/)&&T.match(/e[+-]\d$/)&&(T=T.substr(0,T.length-1)+"0"+T.charAt(T.length-1)),o.match(/E\-/)&&T.match(/e\+/)&&(T=T.replace(/e\+/,"e")),T.replace("e","E")}function write_num_int(o,u,T){if(o.charCodeAt(0)===40&&!u.match(closeparen)){var S=u.replace(/\( */,"").replace(/ \)/,"").replace(/\)/,"");return T>=0?write_num_int("n",S,T):"("+write_num_int("n",S,-T)+")"}if(u.charCodeAt(u.length-1)===44)return write_num_cm2(o,u,T);if(u.indexOf("%")!==-1)return write_num_pct2(o,u,T);if(u.indexOf("E")!==-1)return write_num_exp2(u,T);if(u.charCodeAt(0)===36)return"$"+write_num_int(o,u.substr(u.charAt(1)==" "?2:1),T);var E,C,_,P,R=Math.abs(T),I=T<0?"-":"";if(u.match(/^00+$/))return I+pad0(R,u.length);if(u.match(/^[#?]+$/))return E=""+T,T===0&&(E=""),E.length>u.length?E:hashq(u.substr(0,u.length-E.length))+E;if(C=u.match(frac1))return write_num_f2(C,R,I);if(u.match(/^#+0+$/))return I+pad0(R,u.length-u.indexOf("0"));if(C=u.match(dec1))return E=(""+T).replace(/^([^\.]+)$/,"$1."+hashq(C[1])).replace(/\.$/,"."+hashq(C[1])),E=E.replace(/\.(\d*)$/,function(F,N){return"."+N+fill("0",hashq(C[1]).length-N.length)}),u.indexOf("0.")!==-1?E:E.replace(/^0\./,".");if(u=u.replace(/^#+([0.])/,"$1"),C=u.match(/^(0*)\.(#*)$/))return I+(""+R).replace(/\.(\d*[1-9])0*$/,".$1").replace(/^(-?\d*)$/,"$1.").replace(/^0\./,C[1].length?"0.":".");if(C=u.match(/^#{1,3},##0(\.?)$/))return I+commaify(""+R);if(C=u.match(/^#,##0\.([#0]*0)$/))return T<0?"-"+write_num_int(o,u,-T):commaify(""+T)+"."+fill("0",C[1].length);if(C=u.match(/^#,#*,#0/))return write_num_int(o,u.replace(/^#,#*,/,""),T);if(C=u.match(/^([0#]+)(\\?-([0#]+))+$/))return E=_strrev(write_num_int(o,u.replace(/[\\-]/g,""),T)),_=0,_strrev(_strrev(u.replace(/\\/g,"")).replace(/[0#]/g,function(F){return _<E.length?E.charAt(_++):F==="0"?"0":""}));if(u.match(phone))return E=write_num_int(o,"##########",T),"("+E.substr(0,3)+") "+E.substr(3,3)+"-"+E.substr(6);var L="";if(C=u.match(/^([#0?]+)( ?)\/( ?)([#0?]+)/))return _=Math.min(C[4].length,7),P=SSF_frac(R,Math.pow(10,_)-1,!1),E=""+I,L=write_num("n",C[1],P[1]),L.charAt(L.length-1)==" "&&(L=L.substr(0,L.length-1)+"0"),E+=L+C[2]+"/"+C[3],L=rpad_(P[2],_),L.length<C[4].length&&(L=hashq(C[4].substr(C[4].length-L.length))+L),E+=L,E;if(C=u.match(/^# ([#0?]+)( ?)\/( ?)([#0?]+)/))return _=Math.min(Math.max(C[1].length,C[4].length),7),P=SSF_frac(R,Math.pow(10,_)-1,!0),I+(P[0]||(P[1]?"":"0"))+" "+(P[1]?pad_(P[1],_)+C[2]+"/"+C[3]+rpad_(P[2],_):fill(" ",2*_+1+C[2].length+C[3].length));if(C=u.match(/^[#0?]+$/))return E=""+T,u.length<=E.length?E:hashq(u.substr(0,u.length-E.length))+E;if(C=u.match(/^([#0]+)\.([#0]+)$/)){E=""+T.toFixed(Math.min(C[2].length,10)).replace(/([^0])0+$/,"$1"),_=E.indexOf(".");var j=u.indexOf(".")-_,M=u.length-E.length-j;return hashq(u.substr(0,j)+E+u.substr(u.length-M))}if(C=u.match(/^00,000\.([#0]*0)$/))return T<0?"-"+write_num_int(o,u,-T):commaify(""+T).replace(/^\d,\d{3}$/,"0$&").replace(/^\d*$/,function(F){return"00,"+(F.length<3?pad0(0,3-F.length):"")+F})+"."+pad0(0,C[1].length);switch(u){case"###,###":case"##,###":case"#,###":var D=commaify(""+R);return D!=="0"?I+D:"";default:if(u.match(/\.[0#?]*$/))return write_num_int(o,u.slice(0,u.lastIndexOf(".")),T)+hashq(u.slice(u.lastIndexOf(".")))}throw new Error("unsupported format |"+u+"|")}function write_num(o,u,T){return(T|0)===T?write_num_int(o,u,T):write_num_flt(o,u,T)}function SSF_split_fmt(o){for(var u=[],T=!1,S=0,E=0;S<o.length;++S)switch(o.charCodeAt(S)){case 34:T=!T;break;case 95:case 42:case 92:++S;break;case 59:u[u.length]=o.substr(E,S-E),E=S+1}if(u[u.length]=o.substr(E),T===!0)throw new Error("Format |"+o+"| unterminated string ");return u}var SSF_abstime=/\[[HhMmSs\u0E0A\u0E19\u0E17]*\]/;function fmt_is_date(o){for(var u=0,T="",S="";u<o.length;)switch(T=o.charAt(u)){case"G":SSF_isgeneral(o,u)&&(u+=6),u++;break;case'"':for(;o.charCodeAt(++u)!==34&&u<o.length;);++u;break;case"\\":u+=2;break;case"_":u+=2;break;case"@":++u;break;case"B":case"b":if(o.charAt(u+1)==="1"||o.charAt(u+1)==="2")return!0;case"M":case"D":case"Y":case"H":case"S":case"E":case"m":case"d":case"y":case"h":case"s":case"e":case"g":return!0;case"A":case"a":case"上":if(o.substr(u,3).toUpperCase()==="A/P"||o.substr(u,5).toUpperCase()==="AM/PM"||o.substr(u,5).toUpperCase()==="上午/下午")return!0;++u;break;case"[":for(S=T;o.charAt(u++)!=="]"&&u<o.length;)S+=o.charAt(u);if(S.match(SSF_abstime))return!0;break;case".":case"0":case"#":for(;u<o.length&&("0#?.,E+-%".indexOf(T=o.charAt(++u))>-1||T=="\\"&&o.charAt(u+1)=="-"&&"0#".indexOf(o.charAt(u+2))>-1););break;case"?":for(;o.charAt(++u)===T;);break;case"*":++u,(o.charAt(u)==" "||o.charAt(u)=="*")&&++u;break;case"(":case")":++u;break;case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":for(;u<o.length&&"0123456789".indexOf(o.charAt(++u))>-1;);break;case" ":++u;break;default:++u;break}return!1}function eval_fmt(o,u,T,S){for(var E=[],C="",_=0,P="",R="t",I,L,j,M="H";_<o.length;)switch(P=o.charAt(_)){case"G":if(!SSF_isgeneral(o,_))throw new Error("unrecognized character "+P+" in "+o);E[E.length]={t:"G",v:"General"},_+=7;break;case'"':for(C="";(j=o.charCodeAt(++_))!==34&&_<o.length;)C+=String.fromCharCode(j);E[E.length]={t:"t",v:C},++_;break;case"\\":var D=o.charAt(++_),F=D==="("||D===")"?D:"t";E[E.length]={t:F,v:D},++_;break;case"_":E[E.length]={t:"t",v:" "},_+=2;break;case"@":E[E.length]={t:"T",v:u},++_;break;case"B":case"b":if(o.charAt(_+1)==="1"||o.charAt(_+1)==="2"){if(I==null&&(I=SSF_parse_date_code(u,T,o.charAt(_+1)==="2"),I==null))return"";E[E.length]={t:"X",v:o.substr(_,2)},R=P,_+=2;break}case"M":case"D":case"Y":case"H":case"S":case"E":P=P.toLowerCase();case"m":case"d":case"y":case"h":case"s":case"e":case"g":if(u<0||I==null&&(I=SSF_parse_date_code(u,T),I==null))return"";for(C=P;++_<o.length&&o.charAt(_).toLowerCase()===P;)C+=P;P==="m"&&R.toLowerCase()==="h"&&(P="M"),P==="h"&&(P=M),E[E.length]={t:P,v:C},R=P;break;case"A":case"a":case"上":var N={t:P,v:P};if(I==null&&(I=SSF_parse_date_code(u,T)),o.substr(_,3).toUpperCase()==="A/P"?(I!=null&&(N.v=I.H>=12?"P":"A"),N.t="T",M="h",_+=3):o.substr(_,5).toUpperCase()==="AM/PM"?(I!=null&&(N.v=I.H>=12?"PM":"AM"),N.t="T",_+=5,M="h"):o.substr(_,5).toUpperCase()==="上午/下午"?(I!=null&&(N.v=I.H>=12?"下午":"上午"),N.t="T",_+=5,M="h"):(N.t="t",++_),I==null&&N.t==="T")return"";E[E.length]=N,R=P;break;case"[":for(C=P;o.charAt(_++)!=="]"&&_<o.length;)C+=o.charAt(_);if(C.slice(-1)!=="]")throw'unterminated "[" block: |'+C+"|";if(C.match(SSF_abstime)){if(I==null&&(I=SSF_parse_date_code(u,T),I==null))return"";E[E.length]={t:"Z",v:C.toLowerCase()},R=C.charAt(1)}else C.indexOf("$")>-1&&(C=(C.match(/\$([^-\[\]]*)/)||[])[1]||"$",fmt_is_date(o)||(E[E.length]={t:"t",v:C}));break;case".":if(I!=null){for(C=P;++_<o.length&&(P=o.charAt(_))==="0";)C+=P;E[E.length]={t:"s",v:C};break}case"0":case"#":for(C=P;++_<o.length&&"0#?.,E+-%".indexOf(P=o.charAt(_))>-1;)C+=P;E[E.length]={t:"n",v:C};break;case"?":for(C=P;o.charAt(++_)===P;)C+=P;E[E.length]={t:P,v:C},R=P;break;case"*":++_,(o.charAt(_)==" "||o.charAt(_)=="*")&&++_;break;case"(":case")":E[E.length]={t:S===1?"t":P,v:P},++_;break;case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":for(C=P;_<o.length&&"0123456789".indexOf(o.charAt(++_))>-1;)C+=o.charAt(_);E[E.length]={t:"D",v:C};break;case" ":E[E.length]={t:P,v:P},++_;break;case"$":E[E.length]={t:"t",v:"$"},++_;break;default:if(",$-+/():!^&'~{}<>=€acfijklopqrtuvwxzP".indexOf(P)===-1)throw new Error("unrecognized character "+P+" in "+o);E[E.length]={t:"t",v:P},++_;break}var G=0,B=0,H;for(_=E.length-1,R="t";_>=0;--_)switch(E[_].t){case"h":case"H":E[_].t=M,R="h",G<1&&(G=1);break;case"s":(H=E[_].v.match(/\.0+$/))&&(B=Math.max(B,H[0].length-1)),G<3&&(G=3);case"d":case"y":case"M":case"e":R=E[_].t;break;case"m":R==="s"&&(E[_].t="M",G<2&&(G=2));break;case"X":break;case"Z":G<1&&E[_].v.match(/[Hh]/)&&(G=1),G<2&&E[_].v.match(/[Mm]/)&&(G=2),G<3&&E[_].v.match(/[Ss]/)&&(G=3)}switch(G){case 0:break;case 1:I.u>=.5&&(I.u=0,++I.S),I.S>=60&&(I.S=0,++I.M),I.M>=60&&(I.M=0,++I.H);break;case 2:I.u>=.5&&(I.u=0,++I.S),I.S>=60&&(I.S=0,++I.M);break}var O="",V;for(_=0;_<E.length;++_)switch(E[_].t){case"t":case"T":case" ":case"D":break;case"X":E[_].v="",E[_].t=";";break;case"d":case"m":case"y":case"h":case"H":case"M":case"s":case"e":case"b":case"Z":E[_].v=SSF_write_date(E[_].t.charCodeAt(0),E[_].v,I,B),E[_].t="t";break;case"n":case"?":for(V=_+1;E[V]!=null&&((P=E[V].t)==="?"||P==="D"||(P===" "||P==="t")&&E[V+1]!=null&&(E[V+1].t==="?"||E[V+1].t==="t"&&E[V+1].v==="/")||E[_].t==="("&&(P===" "||P==="n"||P===")")||P==="t"&&(E[V].v==="/"||E[V].v===" "&&E[V+1]!=null&&E[V+1].t=="?"));)E[_].v+=E[V].v,E[V]={v:"",t:";"},++V;O+=E[_].v,_=V-1;break;case"G":E[_].t="t",E[_].v=SSF_general(u,T);break}var U="",W,K;if(O.length>0){O.charCodeAt(0)==40?(W=u<0&&O.charCodeAt(0)===45?-u:u,K=write_num("n",O,W)):(W=u<0&&S>1?-u:u,K=write_num("n",O,W),W<0&&E[0]&&E[0].t=="t"&&(K=K.substr(1),E[0].v="-"+E[0].v)),V=K.length-1;var Y=E.length;for(_=0;_<E.length;++_)if(E[_]!=null&&E[_].t!="t"&&E[_].v.indexOf(".")>-1){Y=_;break}var ee=E.length;if(Y===E.length&&K.indexOf("E")===-1){for(_=E.length-1;_>=0;--_)E[_]==null||"n?".indexOf(E[_].t)===-1||(V>=E[_].v.length-1?(V-=E[_].v.length,E[_].v=K.substr(V+1,E[_].v.length)):V<0?E[_].v="":(E[_].v=K.substr(0,V+1),V=-1),E[_].t="t",ee=_);V>=0&&ee<E.length&&(E[ee].v=K.substr(0,V+1)+E[ee].v)}else if(Y!==E.length&&K.indexOf("E")===-1){for(V=K.indexOf(".")-1,_=Y;_>=0;--_)if(!(E[_]==null||"n?".indexOf(E[_].t)===-1)){for(L=E[_].v.indexOf(".")>-1&&_===Y?E[_].v.indexOf(".")-1:E[_].v.length-1,U=E[_].v.substr(L+1);L>=0;--L)V>=0&&(E[_].v.charAt(L)==="0"||E[_].v.charAt(L)==="#")&&(U=K.charAt(V--)+U);E[_].v=U,E[_].t="t",ee=_}for(V>=0&&ee<E.length&&(E[ee].v=K.substr(0,V+1)+E[ee].v),V=K.indexOf(".")+1,_=Y;_<E.length;++_)if(!(E[_]==null||"n?(".indexOf(E[_].t)===-1&&_!==Y)){for(L=E[_].v.indexOf(".")>-1&&_===Y?E[_].v.indexOf(".")+1:0,U=E[_].v.substr(0,L);L<E[_].v.length;++L)V<K.length&&(U+=K.charAt(V++));E[_].v=U,E[_].t="t",ee=_}}}for(_=0;_<E.length;++_)E[_]!=null&&"n?".indexOf(E[_].t)>-1&&(W=S>1&&u<0&&_>0&&E[_-1].v==="-"?-u:u,E[_].v=write_num(E[_].t,E[_].v,W),E[_].t="t");var oe="";for(_=0;_!==E.length;++_)E[_]!=null&&(oe+=E[_].v);return oe}var cfregex2=/\[(=|>[=]?|<[>=]?)(-?\d+(?:\.\d*)?)\]/;function chkcond(o,u){if(u==null)return!1;var T=parseFloat(u[2]);switch(u[1]){case"=":if(o==T)return!0;break;case">":if(o>T)return!0;break;case"<":if(o<T)return!0;break;case"<>":if(o!=T)return!0;break;case">=":if(o>=T)return!0;break;case"<=":if(o<=T)return!0;break}return!1}function choose_fmt(o,u){var T=SSF_split_fmt(o),S=T.length,E=T[S-1].indexOf("@");if(S<4&&E>-1&&--S,T.length>4)throw new Error("cannot find right format for |"+T.join("|")+"|");if(typeof u!="number")return[4,T.length===4||E>-1?T[T.length-1]:"@"];switch(T.length){case 1:T=E>-1?["General","General","General",T[0]]:[T[0],T[0],T[0],"@"];break;case 2:T=E>-1?[T[0],T[0],T[0],T[1]]:[T[0],T[1],T[0],"@"];break;case 3:T=E>-1?[T[0],T[1],T[0],T[2]]:[T[0],T[1],T[2],"@"];break}var C=u>0?T[0]:u<0?T[1]:T[2];if(T[0].indexOf("[")===-1&&T[1].indexOf("[")===-1)return[S,C];if(T[0].match(/\[[=<>]/)!=null||T[1].match(/\[[=<>]/)!=null){var _=T[0].match(cfregex2),P=T[1].match(cfregex2);return chkcond(u,_)?[S,T[0]]:chkcond(u,P)?[S,T[1]]:[S,T[_!=null&&P!=null?2:1]]}return[S,C]}function SSF_format(o,u,T){T==null&&(T={});var S="";switch(typeof o){case"string":o=="m/d/yy"&&T.dateNF?S=T.dateNF:S=o;break;case"number":o==14&&T.dateNF?S=T.dateNF:S=(T.table!=null?T.table:table_fmt)[o],S==null&&(S=T.table&&T.table[SSF_default_map[o]]||table_fmt[SSF_default_map[o]]),S==null&&(S=SSF_default_str[o]||"General");break}if(SSF_isgeneral(S,0))return SSF_general(u,T);u instanceof Date&&(u=datenum_local(u,T.date1904));var E=choose_fmt(S,u);if(SSF_isgeneral(E[1]))return SSF_general(u,T);if(u===!0)u="TRUE";else if(u===!1)u="FALSE";else if(u===""||u==null)return"";return eval_fmt(E[1],u,T,E[0])}function SSF_load(o,u){if(typeof u!="number"){u=+u||-1;for(var T=0;T<392;++T){if(table_fmt[T]==null){u<0&&(u=T);continue}if(table_fmt[T]==o){u=T;break}}u<0&&(u=391)}return table_fmt[u]=o,u}function SSF_load_table(o){for(var u=0;u!=392;++u)o[u]!==void 0&&SSF_load(o[u],u)}function make_ssf(){table_fmt=SSF_init_table()}var SSF={format:SSF_format,load:SSF_load,_table:table_fmt,load_table:SSF_load_table,parse_date_code:SSF_parse_date_code,is_date:fmt_is_date,get_table:function(){return SSF._table=table_fmt}},SSFImplicit={5:'"$"#,##0_);\\("$"#,##0\\)',6:'"$"#,##0_);[Red]\\("$"#,##0\\)',7:'"$"#,##0.00_);\\("$"#,##0.00\\)',8:'"$"#,##0.00_);[Red]\\("$"#,##0.00\\)',23:"General",24:"General",25:"General",26:"General",27:"m/d/yy",28:"m/d/yy",29:"m/d/yy",30:"m/d/yy",31:"m/d/yy",32:"h:mm:ss",33:"h:mm:ss",34:"h:mm:ss",35:"h:mm:ss",36:"m/d/yy",41:'_(* #,##0_);_(* (#,##0);_(* "-"_);_(@_)',42:'_("$"* #,##0_);_("$"* (#,##0);_("$"* "-"_);_(@_)',43:'_(* #,##0.00_);_(* (#,##0.00);_(* "-"??_);_(@_)',44:'_("$"* #,##0.00_);_("$"* (#,##0.00);_("$"* "-"??_);_(@_)',50:"m/d/yy",51:"m/d/yy",52:"m/d/yy",53:"m/d/yy",54:"m/d/yy",55:"m/d/yy",56:"m/d/yy",57:"m/d/yy",58:"m/d/yy",59:"0",60:"0.00",61:"#,##0",62:"#,##0.00",63:'"$"#,##0_);\\("$"#,##0\\)',64:'"$"#,##0_);[Red]\\("$"#,##0\\)',65:'"$"#,##0.00_);\\("$"#,##0.00\\)',66:'"$"#,##0.00_);[Red]\\("$"#,##0.00\\)',67:"0%",68:"0.00%",69:"# ?/?",70:"# ??/??",71:"m/d/yy",72:"m/d/yy",73:"d-mmm-yy",74:"d-mmm",75:"mmm-yy",76:"h:mm",77:"h:mm:ss",78:"m/d/yy h:mm",79:"mm:ss",80:"[h]:mm:ss",81:"mmss.0"},dateNFregex=/[dD]+|[mM]+|[yYeE]+|[Hh]+|[Ss]+/g;function dateNF_regex(o){var u=typeof o=="number"?table_fmt[o]:o;return u=u.replace(dateNFregex,"(\\d+)"),new RegExp("^"+u+"$")}function dateNF_fix(o,u,T){var S=-1,E=-1,C=-1,_=-1,P=-1,R=-1;(u.match(dateNFregex)||[]).forEach(function(j,M){var D=parseInt(T[M+1],10);switch(j.toLowerCase().charAt(0)){case"y":S=D;break;case"d":C=D;break;case"h":_=D;break;case"s":R=D;break;case"m":_>=0?P=D:E=D;break}}),R>=0&&P==-1&&E>=0&&(P=E,E=-1);var I=(""+(S>=0?S:new Date().getFullYear())).slice(-4)+"-"+("00"+(E>=1?E:1)).slice(-2)+"-"+("00"+(C>=1?C:1)).slice(-2);I.length==7&&(I="0"+I),I.length==8&&(I="20"+I);var L=("00"+(_>=0?_:0)).slice(-2)+":"+("00"+(P>=0?P:0)).slice(-2)+":"+("00"+(R>=0?R:0)).slice(-2);return _==-1&&P==-1&&R==-1?I:S==-1&&E==-1&&C==-1?L:I+"T"+L}var CRC32=function(){var o={};o.version="1.2.0";function u(){for(var K=0,Y=new Array(256),ee=0;ee!=256;++ee)K=ee,K=K&1?-306674912^K>>>1:K>>>1,K=K&1?-306674912^K>>>1:K>>>1,K=K&1?-306674912^K>>>1:K>>>1,K=K&1?-306674912^K>>>1:K>>>1,K=K&1?-306674912^K>>>1:K>>>1,K=K&1?-306674912^K>>>1:K>>>1,K=K&1?-306674912^K>>>1:K>>>1,K=K&1?-306674912^K>>>1:K>>>1,Y[ee]=K;return typeof Int32Array<"u"?new Int32Array(Y):Y}var T=u();function S(K){var Y=0,ee=0,oe=0,se=typeof Int32Array<"u"?new Int32Array(4096):new Array(4096);for(oe=0;oe!=256;++oe)se[oe]=K[oe];for(oe=0;oe!=256;++oe)for(ee=K[oe],Y=256+oe;Y<4096;Y+=256)ee=se[Y]=ee>>>8^K[ee&255];var Q=[];for(oe=1;oe!=16;++oe)Q[oe-1]=typeof Int32Array<"u"?se.subarray(oe*256,oe*256+256):se.slice(oe*256,oe*256+256);return Q}var E=S(T),C=E[0],_=E[1],P=E[2],R=E[3],I=E[4],L=E[5],j=E[6],M=E[7],D=E[8],F=E[9],N=E[10],G=E[11],B=E[12],H=E[13],O=E[14];function V(K,Y){for(var ee=Y^-1,oe=0,se=K.length;oe<se;)ee=ee>>>8^T[(ee^K.charCodeAt(oe++))&255];return~ee}function U(K,Y){for(var ee=Y^-1,oe=K.length-15,se=0;se<oe;)ee=O[K[se++]^ee&255]^H[K[se++]^ee>>8&255]^B[K[se++]^ee>>16&255]^G[K[se++]^ee>>>24]^N[K[se++]]^F[K[se++]]^D[K[se++]]^M[K[se++]]^j[K[se++]]^L[K[se++]]^I[K[se++]]^R[K[se++]]^P[K[se++]]^_[K[se++]]^C[K[se++]]^T[K[se++]];for(oe+=15;se<oe;)ee=ee>>>8^T[(ee^K[se++])&255];return~ee}function W(K,Y){for(var ee=Y^-1,oe=0,se=K.length,Q=0,ie=0;oe<se;)Q=K.charCodeAt(oe++),Q<128?ee=ee>>>8^T[(ee^Q)&255]:Q<2048?(ee=ee>>>8^T[(ee^(192|Q>>6&31))&255],ee=ee>>>8^T[(ee^(128|Q&63))&255]):Q>=55296&&Q<57344?(Q=(Q&1023)+64,ie=K.charCodeAt(oe++)&1023,ee=ee>>>8^T[(ee^(240|Q>>8&7))&255],ee=ee>>>8^T[(ee^(128|Q>>2&63))&255],ee=ee>>>8^T[(ee^(128|ie>>6&15|(Q&3)<<4))&255],ee=ee>>>8^T[(ee^(128|ie&63))&255]):(ee=ee>>>8^T[(ee^(224|Q>>12&15))&255],ee=ee>>>8^T[(ee^(128|Q>>6&63))&255],ee=ee>>>8^T[(ee^(128|Q&63))&255]);return~ee}return o.table=T,o.bstr=V,o.buf=U,o.str=W,o}(),CFB=function(){var u={};u.version="1.2.1";function T(le,ye){for(var me=le.split("/"),ge=ye.split("/"),xe=0,be=0,Ce=Math.min(me.length,ge.length);xe<Ce;++xe){if(be=me[xe].length-ge[xe].length)return be;if(me[xe]!=ge[xe])return me[xe]<ge[xe]?-1:1}return me.length-ge.length}function S(le){if(le.charAt(le.length-1)=="/")return le.slice(0,-1).indexOf("/")===-1?le:S(le.slice(0,-1));var ye=le.lastIndexOf("/");return ye===-1?le:le.slice(0,ye+1)}function E(le){if(le.charAt(le.length-1)=="/")return E(le.slice(0,-1));var ye=le.lastIndexOf("/");return ye===-1?le:le.slice(ye+1)}function C(le,ye){typeof ye=="string"&&(ye=new Date(ye));var me=ye.getHours();me=me<<6|ye.getMinutes(),me=me<<5|ye.getSeconds()>>>1,le.write_shift(2,me);var ge=ye.getFullYear()-1980;ge=ge<<4|ye.getMonth()+1,ge=ge<<5|ye.getDate(),le.write_shift(2,ge)}function _(le){var ye=le.read_shift(2)&65535,me=le.read_shift(2)&65535,ge=new Date,xe=me&31;me>>>=5;var be=me&15;me>>>=4,ge.setMilliseconds(0),ge.setFullYear(me+1980),ge.setMonth(be-1),ge.setDate(xe);var Ce=ye&31;ye>>>=5;var Re=ye&63;return ye>>>=6,ge.setHours(ye),ge.setMinutes(Re),ge.setSeconds(Ce<<1),ge}function P(le){prep_blob(le,0);for(var ye={},me=0;le.l<=le.length-4;){var ge=le.read_shift(2),xe=le.read_shift(2),be=le.l+xe,Ce={};switch(ge){case 21589:me=le.read_shift(1),me&1&&(Ce.mtime=le.read_shift(4)),xe>5&&(me&2&&(Ce.atime=le.read_shift(4)),me&4&&(Ce.ctime=le.read_shift(4))),Ce.mtime&&(Ce.mt=new Date(Ce.mtime*1e3));break}le.l=be,ye[ge]=Ce}return ye}var R;function I(){return R||(R={})}function L(le,ye){if(le[0]==80&&le[1]==75)return De(le,ye);if((le[0]|32)==109&&(le[1]|32)==105)return It(le,ye);if(le.length<512)throw new Error("CFB file size "+le.length+" < 512");var me=3,ge=512,xe=0,be=0,Ce=0,Re=0,Ee=0,_e=[],Ae=le.slice(0,512);prep_blob(Ae,0);var Fe=j(Ae);switch(me=Fe[0],me){case 3:ge=512;break;case 4:ge=4096;break;case 0:if(Fe[1]==0)return De(le,ye);default:throw new Error("Major Version: Expected 3 or 4 saw "+me)}ge!==512&&(Ae=le.slice(0,ge),prep_blob(Ae,28));var Oe=le.slice(0,ge);M(Ae,me);var Ke=Ae.read_shift(4,"i");if(me===3&&Ke!==0)throw new Error("# Directory Sectors: Expected 0 saw "+Ke);Ae.l+=4,Ce=Ae.read_shift(4,"i"),Ae.l+=4,Ae.chk("00100000","Mini Stream Cutoff Size: "),Re=Ae.read_shift(4,"i"),xe=Ae.read_shift(4,"i"),Ee=Ae.read_shift(4,"i"),be=Ae.read_shift(4,"i");for(var Ne=-1,Ve=0;Ve<109&&(Ne=Ae.read_shift(4,"i"),!(Ne<0));++Ve)_e[Ve]=Ne;var nt=D(le,ge);G(Ee,be,nt,ge,_e);var lt=H(nt,Ce,_e,ge);lt[Ce].name="!Directory",xe>0&&Re!==ie&&(lt[Re].name="!MiniFAT"),lt[_e[0]].name="!FAT",lt.fat_addrs=_e,lt.ssz=ge;var ct={},dt=[],Tt=[],kt=[];O(Ce,lt,nt,dt,xe,ct,Tt,Re),F(Tt,kt,dt),dt.shift();var St={FileIndex:Tt,FullPaths:kt};return ye&&ye.raw&&(St.raw={header:Oe,sectors:nt}),St}function j(le){if(le[le.l]==80&&le[le.l+1]==75)return[0,0];le.chk(ae,"Header Signature: "),le.l+=16;var ye=le.read_shift(2,"u");return[le.read_shift(2,"u"),ye]}function M(le,ye){var me=9;switch(le.l+=2,me=le.read_shift(2)){case 9:if(ye!=3)throw new Error("Sector Shift: Expected 9 saw "+me);break;case 12:if(ye!=4)throw new Error("Sector Shift: Expected 12 saw "+me);break;default:throw new Error("Sector Shift: Expected 9 or 12 saw "+me)}le.chk("0600","Mini Sector Shift: "),le.chk("000000000000","Reserved: ")}function D(le,ye){for(var me=Math.ceil(le.length/ye)-1,ge=[],xe=1;xe<me;++xe)ge[xe-1]=le.slice(xe*ye,(xe+1)*ye);return ge[me-1]=le.slice(me*ye),ge}function F(le,ye,me){for(var ge=0,xe=0,be=0,Ce=0,Re=0,Ee=me.length,_e=[],Ae=[];ge<Ee;++ge)_e[ge]=Ae[ge]=ge,ye[ge]=me[ge];for(;Re<Ae.length;++Re)ge=Ae[Re],xe=le[ge].L,be=le[ge].R,Ce=le[ge].C,_e[ge]===ge&&(xe!==-1&&_e[xe]!==xe&&(_e[ge]=_e[xe]),be!==-1&&_e[be]!==be&&(_e[ge]=_e[be])),Ce!==-1&&(_e[Ce]=ge),xe!==-1&&ge!=_e[ge]&&(_e[xe]=_e[ge],Ae.lastIndexOf(xe)<Re&&Ae.push(xe)),be!==-1&&ge!=_e[ge]&&(_e[be]=_e[ge],Ae.lastIndexOf(be)<Re&&Ae.push(be));for(ge=1;ge<Ee;++ge)_e[ge]===ge&&(be!==-1&&_e[be]!==be?_e[ge]=_e[be]:xe!==-1&&_e[xe]!==xe&&(_e[ge]=_e[xe]));for(ge=1;ge<Ee;++ge)if(le[ge].type!==0){if(Re=ge,Re!=_e[Re])do Re=_e[Re],ye[ge]=ye[Re]+"/"+ye[ge];while(Re!==0&&_e[Re]!==-1&&Re!=_e[Re]);_e[ge]=-1}for(ye[0]+="/",ge=1;ge<Ee;++ge)le[ge].type!==2&&(ye[ge]+="/")}function N(le,ye,me){for(var ge=le.start,xe=le.size,be=[],Ce=ge;me&&xe>0&&Ce>=0;)be.push(ye.slice(Ce*Q,Ce*Q+Q)),xe-=Q,Ce=__readInt32LE(me,Ce*4);return be.length===0?new_buf(0):bconcat(be).slice(0,le.size)}function G(le,ye,me,ge,xe){var be=ie;if(le===ie){if(ye!==0)throw new Error("DIFAT chain shorter than expected")}else if(le!==-1){var Ce=me[le],Re=(ge>>>2)-1;if(!Ce)return;for(var Ee=0;Ee<Re&&(be=__readInt32LE(Ce,Ee*4))!==ie;++Ee)xe.push(be);G(__readInt32LE(Ce,ge-4),ye-1,me,ge,xe)}}function B(le,ye,me,ge,xe){var be=[],Ce=[];xe||(xe=[]);var Re=ge-1,Ee=0,_e=0;for(Ee=ye;Ee>=0;){xe[Ee]=!0,be[be.length]=Ee,Ce.push(le[Ee]);var Ae=me[Math.floor(Ee*4/ge)];if(_e=Ee*4&Re,ge<4+_e)throw new Error("FAT boundary crossed: "+Ee+" 4 "+ge);if(!le[Ae])break;Ee=__readInt32LE(le[Ae],_e)}return{nodes:be,data:__toBuffer([Ce])}}function H(le,ye,me,ge){var xe=le.length,be=[],Ce=[],Re=[],Ee=[],_e=ge-1,Ae=0,Fe=0,Oe=0,Ke=0;for(Ae=0;Ae<xe;++Ae)if(Re=[],Oe=Ae+ye,Oe>=xe&&(Oe-=xe),!Ce[Oe]){Ee=[];var Ne=[];for(Fe=Oe;Fe>=0;){Ne[Fe]=!0,Ce[Fe]=!0,Re[Re.length]=Fe,Ee.push(le[Fe]);var Ve=me[Math.floor(Fe*4/ge)];if(Ke=Fe*4&_e,ge<4+Ke)throw new Error("FAT boundary crossed: "+Fe+" 4 "+ge);if(!le[Ve]||(Fe=__readInt32LE(le[Ve],Ke),Ne[Fe]))break}be[Oe]={nodes:Re,data:__toBuffer([Ee])}}return be}function O(le,ye,me,ge,xe,be,Ce,Re){for(var Ee=0,_e=ge.length?2:0,Ae=ye[le].data,Fe=0,Oe=0,Ke;Fe<Ae.length;Fe+=128){var Ne=Ae.slice(Fe,Fe+128);prep_blob(Ne,64),Oe=Ne.read_shift(2),Ke=__utf16le(Ne,0,Oe-_e),ge.push(Ke);var Ve={name:Ke,type:Ne.read_shift(1),color:Ne.read_shift(1),L:Ne.read_shift(4,"i"),R:Ne.read_shift(4,"i"),C:Ne.read_shift(4,"i"),clsid:Ne.read_shift(16),state:Ne.read_shift(4,"i"),start:0,size:0},nt=Ne.read_shift(2)+Ne.read_shift(2)+Ne.read_shift(2)+Ne.read_shift(2);nt!==0&&(Ve.ct=V(Ne,Ne.l-8));var lt=Ne.read_shift(2)+Ne.read_shift(2)+Ne.read_shift(2)+Ne.read_shift(2);lt!==0&&(Ve.mt=V(Ne,Ne.l-8)),Ve.start=Ne.read_shift(4,"i"),Ve.size=Ne.read_shift(4,"i"),Ve.size<0&&Ve.start<0&&(Ve.size=Ve.type=0,Ve.start=ie,Ve.name=""),Ve.type===5?(Ee=Ve.start,xe>0&&Ee!==ie&&(ye[Ee].name="!StreamData")):Ve.size>=4096?(Ve.storage="fat",ye[Ve.start]===void 0&&(ye[Ve.start]=B(me,Ve.start,ye.fat_addrs,ye.ssz)),ye[Ve.start].name=Ve.name,Ve.content=ye[Ve.start].data.slice(0,Ve.size)):(Ve.storage="minifat",Ve.size<0?Ve.size=0:Ee!==ie&&Ve.start!==ie&&ye[Ee]&&(Ve.content=N(Ve,ye[Ee].data,(ye[Re]||{}).data))),Ve.content&&prep_blob(Ve.content,0),be[Ke]=Ve,Ce.push(Ve)}}function V(le,ye){return new Date((__readUInt32LE(le,ye+4)/1e7*Math.pow(2,32)+__readUInt32LE(le,ye)/1e7-11644473600)*1e3)}function U(le,ye){return I(),L(R.readFileSync(le),ye)}function W(le,ye){var me=ye&&ye.type;switch(me||has_buf&&Buffer.isBuffer(le)&&(me="buffer"),me||"base64"){case"file":return U(le,ye);case"base64":return L(s2a(Base64_decode(le)),ye);case"binary":return L(s2a(le),ye)}return L(le,ye)}function K(le,ye){var me=ye||{},ge=me.root||"Root Entry";if(le.FullPaths||(le.FullPaths=[]),le.FileIndex||(le.FileIndex=[]),le.FullPaths.length!==le.FileIndex.length)throw new Error("inconsistent CFB structure");le.FullPaths.length===0&&(le.FullPaths[0]=ge+"/",le.FileIndex[0]={name:ge,type:5}),me.CLSID&&(le.FileIndex[0].clsid=me.CLSID),Y(le)}function Y(le){var ye="�Sh33tJ5";if(!CFB.find(le,"/"+ye)){var me=new_buf(4);me[0]=55,me[1]=me[3]=50,me[2]=54,le.FileIndex.push({name:ye,type:2,content:me,size:4,L:69,R:69,C:69}),le.FullPaths.push(le.FullPaths[0]+ye),ee(le)}}function ee(le,ye){K(le);for(var me=!1,ge=!1,xe=le.FullPaths.length-1;xe>=0;--xe){var be=le.FileIndex[xe];switch(be.type){case 0:ge?me=!0:(le.FileIndex.pop(),le.FullPaths.pop());break;case 1:case 2:case 5:ge=!0,isNaN(be.R*be.L*be.C)&&(me=!0),be.R>-1&&be.L>-1&&be.R==be.L&&(me=!0);break;default:me=!0;break}}if(!(!me&&!ye)){var Ce=new Date(1987,1,19),Re=0,Ee=Object.create?Object.create(null):{},_e=[];for(xe=0;xe<le.FullPaths.length;++xe)Ee[le.FullPaths[xe]]=!0,le.FileIndex[xe].type!==0&&_e.push([le.FullPaths[xe],le.FileIndex[xe]]);for(xe=0;xe<_e.length;++xe){var Ae=S(_e[xe][0]);ge=Ee[Ae],ge||(_e.push([Ae,{name:E(Ae).replace("/",""),type:1,clsid:J,ct:Ce,mt:Ce,content:null}]),Ee[Ae]=!0)}for(_e.sort(function(Ke,Ne){return T(Ke[0],Ne[0])}),le.FullPaths=[],le.FileIndex=[],xe=0;xe<_e.length;++xe)le.FullPaths[xe]=_e[xe][0],le.FileIndex[xe]=_e[xe][1];for(xe=0;xe<_e.length;++xe){var Fe=le.FileIndex[xe],Oe=le.FullPaths[xe];if(Fe.name=E(Oe).replace("/",""),Fe.L=Fe.R=Fe.C=-(Fe.color=1),Fe.size=Fe.content?Fe.content.length:0,Fe.start=0,Fe.clsid=Fe.clsid||J,xe===0)Fe.C=_e.length>1?1:-1,Fe.size=0,Fe.type=5;else if(Oe.slice(-1)=="/"){for(Re=xe+1;Re<_e.length&&S(le.FullPaths[Re])!=Oe;++Re);for(Fe.C=Re>=_e.length?-1:Re,Re=xe+1;Re<_e.length&&S(le.FullPaths[Re])!=S(Oe);++Re);Fe.R=Re>=_e.length?-1:Re,Fe.type=1}else S(le.FullPaths[xe+1]||"")==S(Oe)&&(Fe.R=xe+1),Fe.type=2}}}function oe(le,ye){var me=ye||{};if(me.fileType=="mad")return Lt(le,me);switch(ee(le),me.fileType){case"zip":return ht(le,me)}var ge=function(Ke){for(var Ne=0,Ve=0,nt=0;nt<Ke.FileIndex.length;++nt){var lt=Ke.FileIndex[nt];if(lt.content){var ct=lt.content.length;ct>0&&(ct<4096?Ne+=ct+63>>6:Ve+=ct+511>>9)}}for(var dt=Ke.FullPaths.length+3>>2,Tt=Ne+7>>3,kt=Ne+127>>7,St=Tt+Ve+dt+kt,bt=St+127>>7,Rt=bt<=109?0:Math.ceil((bt-109)/127);St+bt+Rt+127>>7>bt;)Rt=++bt<=109?0:Math.ceil((bt-109)/127);var gt=[1,Rt,bt,kt,dt,Ve,Ne,0];return Ke.FileIndex[0].size=Ne<<6,gt[7]=(Ke.FileIndex[0].start=gt[0]+gt[1]+gt[2]+gt[3]+gt[4]+gt[5])+(gt[6]+7>>3),gt}(le),xe=new_buf(ge[7]<<9),be=0,Ce=0;{for(be=0;be<8;++be)xe.write_shift(1,re[be]);for(be=0;be<8;++be)xe.write_shift(2,0);for(xe.write_shift(2,62),xe.write_shift(2,3),xe.write_shift(2,65534),xe.write_shift(2,9),xe.write_shift(2,6),be=0;be<3;++be)xe.write_shift(2,0);for(xe.write_shift(4,0),xe.write_shift(4,ge[2]),xe.write_shift(4,ge[0]+ge[1]+ge[2]+ge[3]-1),xe.write_shift(4,0),xe.write_shift(4,4096),xe.write_shift(4,ge[3]?ge[0]+ge[1]+ge[2]-1:ie),xe.write_shift(4,ge[3]),xe.write_shift(-4,ge[1]?ge[0]-1:ie),xe.write_shift(4,ge[1]),be=0;be<109;++be)xe.write_shift(-4,be<ge[2]?ge[1]+be:-1)}if(ge[1])for(Ce=0;Ce<ge[1];++Ce){for(;be<236+Ce*127;++be)xe.write_shift(-4,be<ge[2]?ge[1]+be:-1);xe.write_shift(-4,Ce===ge[1]-1?ie:Ce+1)}var Re=function(Ke){for(Ce+=Ke;be<Ce-1;++be)xe.write_shift(-4,be+1);Ke&&(++be,xe.write_shift(-4,ie))};for(Ce=be=0,Ce+=ge[1];be<Ce;++be)xe.write_shift(-4,te.DIFSECT);for(Ce+=ge[2];be<Ce;++be)xe.write_shift(-4,te.FATSECT);Re(ge[3]),Re(ge[4]);for(var Ee=0,_e=0,Ae=le.FileIndex[0];Ee<le.FileIndex.length;++Ee)Ae=le.FileIndex[Ee],Ae.content&&(_e=Ae.content.length,!(_e<4096)&&(Ae.start=Ce,Re(_e+511>>9)));for(Re(ge[6]+7>>3);xe.l&511;)xe.write_shift(-4,te.ENDOFCHAIN);for(Ce=be=0,Ee=0;Ee<le.FileIndex.length;++Ee)Ae=le.FileIndex[Ee],Ae.content&&(_e=Ae.content.length,!(!_e||_e>=4096)&&(Ae.start=Ce,Re(_e+63>>6)));for(;xe.l&511;)xe.write_shift(-4,te.ENDOFCHAIN);for(be=0;be<ge[4]<<2;++be){var Fe=le.FullPaths[be];if(!Fe||Fe.length===0){for(Ee=0;Ee<17;++Ee)xe.write_shift(4,0);for(Ee=0;Ee<3;++Ee)xe.write_shift(4,-1);for(Ee=0;Ee<12;++Ee)xe.write_shift(4,0);continue}Ae=le.FileIndex[be],be===0&&(Ae.start=Ae.size?Ae.start-1:ie);var Oe=be===0&&me.root||Ae.name;if(_e=2*(Oe.length+1),xe.write_shift(64,Oe,"utf16le"),xe.write_shift(2,_e),xe.write_shift(1,Ae.type),xe.write_shift(1,Ae.color),xe.write_shift(-4,Ae.L),xe.write_shift(-4,Ae.R),xe.write_shift(-4,Ae.C),Ae.clsid)xe.write_shift(16,Ae.clsid,"hex");else for(Ee=0;Ee<4;++Ee)xe.write_shift(4,0);xe.write_shift(4,Ae.state||0),xe.write_shift(4,0),xe.write_shift(4,0),xe.write_shift(4,0),xe.write_shift(4,0),xe.write_shift(4,Ae.start),xe.write_shift(4,Ae.size),xe.write_shift(4,0)}for(be=1;be<le.FileIndex.length;++be)if(Ae=le.FileIndex[be],Ae.size>=4096)if(xe.l=Ae.start+1<<9,has_buf&&Buffer.isBuffer(Ae.content))Ae.content.copy(xe,xe.l,0,Ae.size),xe.l+=Ae.size+511&-512;else{for(Ee=0;Ee<Ae.size;++Ee)xe.write_shift(1,Ae.content[Ee]);for(;Ee&511;++Ee)xe.write_shift(1,0)}for(be=1;be<le.FileIndex.length;++be)if(Ae=le.FileIndex[be],Ae.size>0&&Ae.size<4096)if(has_buf&&Buffer.isBuffer(Ae.content))Ae.content.copy(xe,xe.l,0,Ae.size),xe.l+=Ae.size+63&-64;else{for(Ee=0;Ee<Ae.size;++Ee)xe.write_shift(1,Ae.content[Ee]);for(;Ee&63;++Ee)xe.write_shift(1,0)}if(has_buf)xe.l=xe.length;else for(;xe.l<xe.length;)xe.write_shift(1,0);return xe}function se(le,ye){var me=le.FullPaths.map(function(Ee){return Ee.toUpperCase()}),ge=me.map(function(Ee){var _e=Ee.split("/");return _e[_e.length-(Ee.slice(-1)=="/"?2:1)]}),xe=!1;ye.charCodeAt(0)===47?(xe=!0,ye=me[0].slice(0,-1)+ye):xe=ye.indexOf("/")!==-1;var be=ye.toUpperCase(),Ce=xe===!0?me.indexOf(be):ge.indexOf(be);if(Ce!==-1)return le.FileIndex[Ce];var Re=!be.match(chr1);for(be=be.replace(chr0,""),Re&&(be=be.replace(chr1,"!")),Ce=0;Ce<me.length;++Ce)if((Re?me[Ce].replace(chr1,"!"):me[Ce]).replace(chr0,"")==be||(Re?ge[Ce].replace(chr1,"!"):ge[Ce]).replace(chr0,"")==be)return le.FileIndex[Ce];return null}var Q=64,ie=-2,ae="d0cf11e0a1b11ae1",re=[208,207,17,224,161,177,26,225],J="00000000000000000000000000000000",te={MAXREGSECT:-6,DIFSECT:-4,FATSECT:-3,ENDOFCHAIN:ie,FREESECT:-1,HEADER_SIGNATURE:ae,HEADER_MINOR_VERSION:"3e00",MAXREGSID:-6,NOSTREAM:-1,HEADER_CLSID:J,EntryTypes:["unknown","storage","stream","lockbytes","property","root"]};function Z(le,ye,me){I();var ge=oe(le,me);R.writeFileSync(ye,ge)}function X(le){for(var ye=new Array(le.length),me=0;me<le.length;++me)ye[me]=String.fromCharCode(le[me]);return ye.join("")}function de(le,ye){var me=oe(le,ye);switch(ye&&ye.type||"buffer"){case"file":return I(),R.writeFileSync(ye.filename,me),me;case"binary":return typeof me=="string"?me:X(me);case"base64":return Base64_encode(typeof me=="string"?me:X(me));case"buffer":if(has_buf)return Buffer.isBuffer(me)?me:Buffer_from(me);case"array":return typeof me=="string"?s2a(me):me}return me}var he;function ne(le){try{var ye=le.InflateRaw,me=new ye;if(me._processChunk(new Uint8Array([3,0]),me._finishFlushFlag),me.bytesRead)he=le;else throw new Error("zlib does not expose bytesRead")}catch(ge){console.error("cannot use native zlib: "+(ge.message||ge))}}function ue(le,ye){if(!he)return yt(le,ye);var me=he.InflateRaw,ge=new me,xe=ge._processChunk(le.slice(le.l),ge._finishFlushFlag);return le.l+=ge.bytesRead,xe}function ce(le){return he?he.deflateRawSync(le):je(le)}var fe=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],ve=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258],Te=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577];function Se(le){var ye=(le<<1|le<<11)&139536|(le<<5|le<<15)&558144;return(ye>>16|ye>>8|ye)&255}for(var ke=typeof Uint8Array<"u",we=ke?new Uint8Array(256):[],Le=0;Le<256;++Le)we[Le]=Se(Le);function pe(le,ye){var me=we[le&255];return ye<=8?me>>>8-ye:(me=me<<8|we[le>>8&255],ye<=16?me>>>16-ye:(me=me<<8|we[le>>16&255],me>>>24-ye))}function Me(le,ye){var me=ye&7,ge=ye>>>3;return(le[ge]|(me<=6?0:le[ge+1]<<8))>>>me&3}function Pe(le,ye){var me=ye&7,ge=ye>>>3;return(le[ge]|(me<=5?0:le[ge+1]<<8))>>>me&7}function Ue(le,ye){var me=ye&7,ge=ye>>>3;return(le[ge]|(me<=4?0:le[ge+1]<<8))>>>me&15}function qe(le,ye){var me=ye&7,ge=ye>>>3;return(le[ge]|(me<=3?0:le[ge+1]<<8))>>>me&31}function Ie(le,ye){var me=ye&7,ge=ye>>>3;return(le[ge]|(me<=1?0:le[ge+1]<<8))>>>me&127}function Xe(le,ye,me){var ge=ye&7,xe=ye>>>3,be=(1<<me)-1,Ce=le[xe]>>>ge;return me<8-ge||(Ce|=le[xe+1]<<8-ge,me<16-ge)||(Ce|=le[xe+2]<<16-ge,me<24-ge)||(Ce|=le[xe+3]<<24-ge),Ce&be}function et(le,ye,me){var ge=ye&7,xe=ye>>>3;return ge<=5?le[xe]|=(me&7)<<ge:(le[xe]|=me<<ge&255,le[xe+1]=(me&7)>>8-ge),ye+3}function tt(le,ye,me){var ge=ye&7,xe=ye>>>3;return me=(me&1)<<ge,le[xe]|=me,ye+1}function Ye(le,ye,me){var ge=ye&7,xe=ye>>>3;return me<<=ge,le[xe]|=me&255,me>>>=8,le[xe+1]=me,ye+8}function ze(le,ye,me){var ge=ye&7,xe=ye>>>3;return me<<=ge,le[xe]|=me&255,me>>>=8,le[xe+1]=me&255,le[xe+2]=me>>>8,ye+16}function Ze(le,ye){var me=le.length,ge=2*me>ye?2*me:ye+5,xe=0;if(me>=ye)return le;if(has_buf){var be=new_unsafe_buf(ge);if(le.copy)le.copy(be);else for(;xe<le.length;++xe)be[xe]=le[xe];return be}else if(ke){var Ce=new Uint8Array(ge);if(Ce.set)Ce.set(le);else for(;xe<me;++xe)Ce[xe]=le[xe];return Ce}return le.length=ge,le}function He(le){for(var ye=new Array(le),me=0;me<le;++me)ye[me]=0;return ye}function rt(le,ye,me){var ge=1,xe=0,be=0,Ce=0,Re=0,Ee=le.length,_e=ke?new Uint16Array(32):He(32);for(be=0;be<32;++be)_e[be]=0;for(be=Ee;be<me;++be)le[be]=0;Ee=le.length;var Ae=ke?new Uint16Array(Ee):He(Ee);for(be=0;be<Ee;++be)_e[xe=le[be]]++,ge<xe&&(ge=xe),Ae[be]=0;for(_e[0]=0,be=1;be<=ge;++be)_e[be+16]=Re=Re+_e[be-1]<<1;for(be=0;be<Ee;++be)Re=le[be],Re!=0&&(Ae[be]=_e[Re+16]++);var Fe=0;for(be=0;be<Ee;++be)if(Fe=le[be],Fe!=0)for(Re=pe(Ae[be],ge)>>ge-Fe,Ce=(1<<ge+4-Fe)-1;Ce>=0;--Ce)ye[Re|Ce<<Fe]=Fe&15|be<<4;return ge}var it=ke?new Uint16Array(512):He(512),st=ke?new Uint16Array(32):He(32);if(!ke){for(var at=0;at<512;++at)it[at]=0;for(at=0;at<32;++at)st[at]=0}(function(){for(var le=[],ye=0;ye<32;ye++)le.push(5);rt(le,st,32);var me=[];for(ye=0;ye<=143;ye++)me.push(8);for(;ye<=255;ye++)me.push(9);for(;ye<=279;ye++)me.push(7);for(;ye<=287;ye++)me.push(8);rt(me,it,288)})();var ot=function(){for(var ye=ke?new Uint8Array(32768):[],me=0,ge=0;me<Te.length-1;++me)for(;ge<Te[me+1];++ge)ye[ge]=me;for(;ge<32768;++ge)ye[ge]=29;var xe=ke?new Uint8Array(259):[];for(me=0,ge=0;me<ve.length-1;++me)for(;ge<ve[me+1];++ge)xe[ge]=me;function be(Re,Ee){for(var _e=0;_e<Re.length;){var Ae=Math.min(65535,Re.length-_e),Fe=_e+Ae==Re.length;for(Ee.write_shift(1,+Fe),Ee.write_shift(2,Ae),Ee.write_shift(2,~Ae&65535);Ae-- >0;)Ee[Ee.l++]=Re[_e++]}return Ee.l}function Ce(Re,Ee){for(var _e=0,Ae=0,Fe=ke?new Uint16Array(32768):[];Ae<Re.length;){var Oe=Math.min(65535,Re.length-Ae);if(Oe<10){for(_e=et(Ee,_e,+(Ae+Oe==Re.length)),_e&7&&(_e+=8-(_e&7)),Ee.l=_e/8|0,Ee.write_shift(2,Oe),Ee.write_shift(2,~Oe&65535);Oe-- >0;)Ee[Ee.l++]=Re[Ae++];_e=Ee.l*8;continue}_e=et(Ee,_e,+(Ae+Oe==Re.length)+2);for(var Ke=0;Oe-- >0;){var Ne=Re[Ae];Ke=(Ke<<5^Ne)&32767;var Ve=-1,nt=0;if((Ve=Fe[Ke])&&(Ve|=Ae&-32768,Ve>Ae&&(Ve-=32768),Ve<Ae))for(;Re[Ve+nt]==Re[Ae+nt]&&nt<250;)++nt;if(nt>2){Ne=xe[nt],Ne<=22?_e=Ye(Ee,_e,we[Ne+1]>>1)-1:(Ye(Ee,_e,3),_e+=5,Ye(Ee,_e,we[Ne-23]>>5),_e+=3);var lt=Ne<8?0:Ne-4>>2;lt>0&&(ze(Ee,_e,nt-ve[Ne]),_e+=lt),Ne=ye[Ae-Ve],_e=Ye(Ee,_e,we[Ne]>>3),_e-=3;var ct=Ne<4?0:Ne-2>>1;ct>0&&(ze(Ee,_e,Ae-Ve-Te[Ne]),_e+=ct);for(var dt=0;dt<nt;++dt)Fe[Ke]=Ae&32767,Ke=(Ke<<5^Re[Ae])&32767,++Ae;Oe-=nt-1}else Ne<=143?Ne=Ne+48:_e=tt(Ee,_e,1),_e=Ye(Ee,_e,we[Ne]),Fe[Ke]=Ae&32767,++Ae}_e=Ye(Ee,_e,0)-1}return Ee.l=(_e+7)/8|0,Ee.l}return function(Ee,_e){return Ee.length<8?be(Ee,_e):Ce(Ee,_e)}}();function je(le){var ye=new_buf(50+Math.floor(le.length*1.1)),me=ot(le,ye);return ye.slice(0,me)}var Be=ke?new Uint16Array(32768):He(32768),Qe=ke?new Uint16Array(32768):He(32768),Ge=ke?new Uint16Array(128):He(128),We=1,mt=1;function xt(le,ye){var me=qe(le,ye)+257;ye+=5;var ge=qe(le,ye)+1;ye+=5;var xe=Ue(le,ye)+4;ye+=4;for(var be=0,Ce=ke?new Uint8Array(19):He(19),Re=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],Ee=1,_e=ke?new Uint8Array(8):He(8),Ae=ke?new Uint8Array(8):He(8),Fe=Ce.length,Oe=0;Oe<xe;++Oe)Ce[fe[Oe]]=be=Pe(le,ye),Ee<be&&(Ee=be),_e[be]++,ye+=3;var Ke=0;for(_e[0]=0,Oe=1;Oe<=Ee;++Oe)Ae[Oe]=Ke=Ke+_e[Oe-1]<<1;for(Oe=0;Oe<Fe;++Oe)(Ke=Ce[Oe])!=0&&(Re[Oe]=Ae[Ke]++);var Ne=0;for(Oe=0;Oe<Fe;++Oe)if(Ne=Ce[Oe],Ne!=0){Ke=we[Re[Oe]]>>8-Ne;for(var Ve=(1<<7-Ne)-1;Ve>=0;--Ve)Ge[Ke|Ve<<Ne]=Ne&7|Oe<<3}var nt=[];for(Ee=1;nt.length<me+ge;)switch(Ke=Ge[Ie(le,ye)],ye+=Ke&7,Ke>>>=3){case 16:for(be=3+Me(le,ye),ye+=2,Ke=nt[nt.length-1];be-- >0;)nt.push(Ke);break;case 17:for(be=3+Pe(le,ye),ye+=3;be-- >0;)nt.push(0);break;case 18:for(be=11+Ie(le,ye),ye+=7;be-- >0;)nt.push(0);break;default:nt.push(Ke),Ee<Ke&&(Ee=Ke);break}var lt=nt.slice(0,me),ct=nt.slice(me);for(Oe=me;Oe<286;++Oe)lt[Oe]=0;for(Oe=ge;Oe<30;++Oe)ct[Oe]=0;return We=rt(lt,Be,286),mt=rt(ct,Qe,30),ye}function vt(le,ye){if(le[0]==3&&!(le[1]&3))return[new_raw_buf(ye),2];for(var me=0,ge=0,xe=new_unsafe_buf(ye||1<<18),be=0,Ce=xe.length>>>0,Re=0,Ee=0;!(ge&1);){if(ge=Pe(le,me),me+=3,ge>>>1)ge>>1==1?(Re=9,Ee=5):(me=xt(le,me),Re=We,Ee=mt);else{me&7&&(me+=8-(me&7));var _e=le[me>>>3]|le[(me>>>3)+1]<<8;if(me+=32,_e>0)for(!ye&&Ce<be+_e&&(xe=Ze(xe,be+_e),Ce=xe.length);_e-- >0;)xe[be++]=le[me>>>3],me+=8;continue}for(;;){!ye&&Ce<be+32767&&(xe=Ze(xe,be+32767),Ce=xe.length);var Ae=Xe(le,me,Re),Fe=ge>>>1==1?it[Ae]:Be[Ae];if(me+=Fe&15,Fe>>>=4,!(Fe>>>8&255))xe[be++]=Fe;else{if(Fe==256)break;Fe-=257;var Oe=Fe<8?0:Fe-4>>2;Oe>5&&(Oe=0);var Ke=be+ve[Fe];Oe>0&&(Ke+=Xe(le,me,Oe),me+=Oe),Ae=Xe(le,me,Ee),Fe=ge>>>1==1?st[Ae]:Qe[Ae],me+=Fe&15,Fe>>>=4;var Ne=Fe<4?0:Fe-2>>1,Ve=Te[Fe];for(Ne>0&&(Ve+=Xe(le,me,Ne),me+=Ne),!ye&&Ce<Ke&&(xe=Ze(xe,Ke+100),Ce=xe.length);be<Ke;)xe[be]=xe[be-Ve],++be}}}return ye?[xe,me+7>>>3]:[xe.slice(0,be),me+7>>>3]}function yt(le,ye){var me=le.slice(le.l||0),ge=vt(me,ye);return le.l+=ge[1],ge[0]}function Je(le,ye){if(le)typeof console<"u"&&console.error(ye);else throw new Error(ye)}function De(le,ye){var me=le;prep_blob(me,0);var ge=[],xe=[],be={FileIndex:ge,FullPaths:xe};K(be,{root:ye.root});for(var Ce=me.length-4;(me[Ce]!=80||me[Ce+1]!=75||me[Ce+2]!=5||me[Ce+3]!=6)&&Ce>=0;)--Ce;me.l=Ce+4,me.l+=4;var Re=me.read_shift(2);me.l+=6;var Ee=me.read_shift(4);for(me.l=Ee,Ce=0;Ce<Re;++Ce){me.l+=20;var _e=me.read_shift(4),Ae=me.read_shift(4),Fe=me.read_shift(2),Oe=me.read_shift(2),Ke=me.read_shift(2);me.l+=8;var Ne=me.read_shift(4),Ve=P(me.slice(me.l+Fe,me.l+Fe+Oe));me.l+=Fe+Oe+Ke;var nt=me.l;me.l=Ne+4,$e(me,_e,Ae,be,Ve),me.l=nt}return be}function $e(le,ye,me,ge,xe){le.l+=2;var be=le.read_shift(2),Ce=le.read_shift(2),Re=_(le);if(be&8257)throw new Error("Unsupported ZIP encryption");for(var Ee=le.read_shift(4),_e=le.read_shift(4),Ae=le.read_shift(4),Fe=le.read_shift(2),Oe=le.read_shift(2),Ke="",Ne=0;Ne<Fe;++Ne)Ke+=String.fromCharCode(le[le.l++]);if(Oe){var Ve=P(le.slice(le.l,le.l+Oe));(Ve[21589]||{}).mt&&(Re=Ve[21589].mt),((xe||{})[21589]||{}).mt&&(Re=xe[21589].mt)}le.l+=Oe;var nt=le.slice(le.l,le.l+_e);switch(Ce){case 8:nt=ue(le,Ae);break;case 0:break;default:throw new Error("Unsupported ZIP Compression method "+Ce)}var lt=!1;be&8&&(Ee=le.read_shift(4),Ee==134695760&&(Ee=le.read_shift(4),lt=!0),_e=le.read_shift(4),Ae=le.read_shift(4)),_e!=ye&&Je(lt,"Bad compressed size: "+ye+" != "+_e),Ae!=me&&Je(lt,"Bad uncompressed size: "+me+" != "+Ae),Pt(ge,Ke,nt,{unsafe:!0,mt:Re})}function ht(le,ye){var me=ye||{},ge=[],xe=[],be=new_buf(1),Ce=me.compression?8:0,Re=0,Ee=0,_e=0,Ae=0,Fe=0,Oe=le.FullPaths[0],Ke=Oe,Ne=le.FileIndex[0],Ve=[],nt=0;for(Ee=1;Ee<le.FullPaths.length;++Ee)if(Ke=le.FullPaths[Ee].slice(Oe.length),Ne=le.FileIndex[Ee],!(!Ne.size||!Ne.content||Ke=="�Sh33tJ5")){var lt=Ae,ct=new_buf(Ke.length);for(_e=0;_e<Ke.length;++_e)ct.write_shift(1,Ke.charCodeAt(_e)&127);ct=ct.slice(0,ct.l),Ve[Fe]=CRC32.buf(Ne.content,0);var dt=Ne.content;Ce==8&&(dt=ce(dt)),be=new_buf(30),be.write_shift(4,67324752),be.write_shift(2,20),be.write_shift(2,Re),be.write_shift(2,Ce),Ne.mt?C(be,Ne.mt):be.write_shift(4,0),be.write_shift(-4,Ve[Fe]),be.write_shift(4,dt.length),be.write_shift(4,Ne.content.length),be.write_shift(2,ct.length),be.write_shift(2,0),Ae+=be.length,ge.push(be),Ae+=ct.length,ge.push(ct),Ae+=dt.length,ge.push(dt),be=new_buf(46),be.write_shift(4,33639248),be.write_shift(2,0),be.write_shift(2,20),be.write_shift(2,Re),be.write_shift(2,Ce),be.write_shift(4,0),be.write_shift(-4,Ve[Fe]),be.write_shift(4,dt.length),be.write_shift(4,Ne.content.length),be.write_shift(2,ct.length),be.write_shift(2,0),be.write_shift(2,0),be.write_shift(2,0),be.write_shift(2,0),be.write_shift(4,0),be.write_shift(4,lt),nt+=be.l,xe.push(be),nt+=ct.length,xe.push(ct),++Fe}return be=new_buf(22),be.write_shift(4,101010256),be.write_shift(2,0),be.write_shift(2,0),be.write_shift(2,Fe),be.write_shift(2,Fe),be.write_shift(4,nt),be.write_shift(4,Ae),be.write_shift(2,0),bconcat([bconcat(ge),bconcat(xe),be])}var ut={htm:"text/html",xml:"text/xml",gif:"image/gif",jpg:"image/jpeg",png:"image/png",mso:"application/x-mso",thmx:"application/vnd.ms-officetheme",sh33tj5:"application/octet-stream"};function ft(le,ye){if(le.ctype)return le.ctype;var me=le.name||"",ge=me.match(/\.([^\.]+)$/);return ge&&ut[ge[1]]||ye&&(ge=(me=ye).match(/[\.\\]([^\.\\])+$/),ge&&ut[ge[1]])?ut[ge[1]]:"application/octet-stream"}function Ct(le){for(var ye=Base64_encode(le),me=[],ge=0;ge<ye.length;ge+=76)me.push(ye.slice(ge,ge+76));return me.join(`\r
208`)+`\r
209`}function Et(le){var ye=le.replace(/[\x00-\x08\x0B\x0C\x0E-\x1F\x7E-\xFF=]/g,function(_e){var Ae=_e.charCodeAt(0).toString(16).toUpperCase();return"="+(Ae.length==1?"0"+Ae:Ae)});ye=ye.replace(/ $/mg,"=20").replace(/\t$/mg,"=09"),ye.charAt(0)==`
210`&&(ye="=0D"+ye.slice(1)),ye=ye.replace(/\r(?!\n)/mg,"=0D").replace(/\n\n/mg,`
211=0A`).replace(/([^\r\n])\n/mg,"$1=0A");for(var me=[],ge=ye.split(`\r
212`),xe=0;xe<ge.length;++xe){var be=ge[xe];if(be.length==0){me.push("");continue}for(var Ce=0;Ce<be.length;){var Re=76,Ee=be.slice(Ce,Ce+Re);Ee.charAt(Re-1)=="="?Re--:Ee.charAt(Re-2)=="="?Re-=2:Ee.charAt(Re-3)=="="&&(Re-=3),Ee=be.slice(Ce,Ce+Re),Ce+=Re,Ce<be.length&&(Ee+="="),me.push(Ee)}}return me.join(`\r
213`)}function _t(le){for(var ye=[],me=0;me<le.length;++me){for(var ge=le[me];me<=le.length&&ge.charAt(ge.length-1)=="=";)ge=ge.slice(0,ge.length-1)+le[++me];ye.push(ge)}for(var xe=0;xe<ye.length;++xe)ye[xe]=ye[xe].replace(/[=][0-9A-Fa-f]{2}/g,function(be){return String.fromCharCode(parseInt(be.slice(1),16))});return s2a(ye.join(`\r
214`))}function At(le,ye,me){for(var ge="",xe="",be="",Ce,Re=0;Re<10;++Re){var Ee=ye[Re];if(!Ee||Ee.match(/^\s*$/))break;var _e=Ee.match(/^(.*?):\s*([^\s].*)$/);if(_e)switch(_e[1].toLowerCase()){case"content-location":ge=_e[2].trim();break;case"content-type":be=_e[2].trim();break;case"content-transfer-encoding":xe=_e[2].trim();break}}switch(++Re,xe.toLowerCase()){case"base64":Ce=s2a(Base64_decode(ye.slice(Re).join("")));break;case"quoted-printable":Ce=_t(ye.slice(Re));break;default:throw new Error("Unsupported Content-Transfer-Encoding "+xe)}var Ae=Pt(le,ge.slice(me.length),Ce,{unsafe:!0});be&&(Ae.ctype=be)}function It(le,ye){if(X(le.slice(0,13)).toLowerCase()!="mime-version:")throw new Error("Unsupported MAD header");var me=ye&&ye.root||"",ge=(has_buf&&Buffer.isBuffer(le)?le.toString("binary"):X(le)).split(`\r
215`),xe=0,be="";for(xe=0;xe<ge.length;++xe)if(be=ge[xe],!!/^Content-Location:/i.test(be)&&(be=be.slice(be.indexOf("file")),me||(me=be.slice(0,be.lastIndexOf("/")+1)),be.slice(0,me.length)!=me))for(;me.length>0&&(me=me.slice(0,me.length-1),me=me.slice(0,me.lastIndexOf("/")+1),be.slice(0,me.length)!=me););var Ce=(ge[1]||"").match(/boundary="(.*?)"/);if(!Ce)throw new Error("MAD cannot find boundary");var Re="--"+(Ce[1]||""),Ee=[],_e=[],Ae={FileIndex:Ee,FullPaths:_e};K(Ae);var Fe,Oe=0;for(xe=0;xe<ge.length;++xe){var Ke=ge[xe];Ke!==Re&&Ke!==Re+"--"||(Oe++&&At(Ae,ge.slice(Fe,xe),me),Fe=xe)}return Ae}function Lt(le,ye){var me=ye||{},ge=me.boundary||"SheetJS";ge="------="+ge;for(var xe=["MIME-Version: 1.0",'Content-Type: multipart/related; boundary="'+ge.slice(2)+'"',"","",""],be=le.FullPaths[0],Ce=be,Re=le.FileIndex[0],Ee=1;Ee<le.FullPaths.length;++Ee)if(Ce=le.FullPaths[Ee].slice(be.length),Re=le.FileIndex[Ee],!(!Re.size||!Re.content||Ce=="�Sh33tJ5")){Ce=Ce.replace(/[\x00-\x08\x0B\x0C\x0E-\x1F\x7E-\xFF]/g,function(nt){return"_x"+nt.charCodeAt(0).toString(16)+"_"}).replace(/[\u0080-\uFFFF]/g,function(nt){return"_u"+nt.charCodeAt(0).toString(16)+"_"});for(var _e=Re.content,Ae=has_buf&&Buffer.isBuffer(_e)?_e.toString("binary"):X(_e),Fe=0,Oe=Math.min(1024,Ae.length),Ke=0,Ne=0;Ne<=Oe;++Ne)(Ke=Ae.charCodeAt(Ne))>=32&&Ke<128&&++Fe;var Ve=Fe>=Oe*4/5;xe.push(ge),xe.push("Content-Location: "+(me.root||"file:///C:/SheetJS/")+Ce),xe.push("Content-Transfer-Encoding: "+(Ve?"quoted-printable":"base64")),xe.push("Content-Type: "+ft(Re,Ce)),xe.push(""),xe.push(Ve?Et(Ae):Ct(Ae))}return xe.push(ge+`--\r
216`),xe.join(`\r
217`)}function jt(le){var ye={};return K(ye,le),ye}function Pt(le,ye,me,ge){var xe=ge&&ge.unsafe;xe||K(le);var be=!xe&&CFB.find(le,ye);if(!be){var Ce=le.FullPaths[0];ye.slice(0,Ce.length)==Ce?Ce=ye:(Ce.slice(-1)!="/"&&(Ce+="/"),Ce=(Ce+ye).replace("//","/")),be={name:E(ye),type:2},le.FileIndex.push(be),le.FullPaths.push(Ce),xe||CFB.utils.cfb_gc(le)}return be.content=me,be.size=me?me.length:0,ge&&(ge.CLSID&&(be.clsid=ge.CLSID),ge.mt&&(be.mt=ge.mt),ge.ct&&(be.ct=ge.ct)),be}function Mt(le,ye){K(le);var me=CFB.find(le,ye);if(me){for(var ge=0;ge<le.FileIndex.length;++ge)if(le.FileIndex[ge]==me)return le.FileIndex.splice(ge,1),le.FullPaths.splice(ge,1),!0}return!1}function Ft(le,ye,me){K(le);var ge=CFB.find(le,ye);if(ge){for(var xe=0;xe<le.FileIndex.length;++xe)if(le.FileIndex[xe]==ge)return le.FileIndex[xe].name=E(me),le.FullPaths[xe]=me,!0}return!1}function Dt(le){ee(le,!0)}return u.find=se,u.read=W,u.parse=L,u.write=de,u.writeFile=Z,u.utils={cfb_new:jt,cfb_add:Pt,cfb_del:Mt,cfb_mov:Ft,cfb_gc:Dt,ReadShift,CheckField,prep_blob,bconcat,use_zlib:ne,_deflateRaw:je,_inflateRaw:yt,consts:te},u}();let _fs;function set_fs(o){_fs=o}function blobify(o){return typeof o=="string"?s2ab(o):Array.isArray(o)?a2u(o):o}function write_dl(o,u,T){if(typeof _fs<"u"&&_fs.writeFileSync)return T?_fs.writeFileSync(o,u,T):_fs.writeFileSync(o,u);if(typeof Deno<"u"){if(T&&typeof u=="string")switch(T){case"utf8":u=new TextEncoder(T).encode(u);break;case"binary":u=s2ab(u);break;default:throw new Error("Unsupported encoding "+T)}return Deno.writeFileSync(o,u)}var S=T=="utf8"?utf8write(u):u;if(typeof IE_SaveFile<"u")return IE_SaveFile(S,o);if(typeof Blob<"u"){var E=new Blob([blobify(S)],{type:"application/octet-stream"});if(typeof navigator<"u"&&navigator.msSaveBlob)return navigator.msSaveBlob(E,o);if(typeof saveAs<"u")return saveAs(E,o);if(typeof URL<"u"&&typeof document<"u"&&document.createElement&&URL.createObjectURL){var C=URL.createObjectURL(E);if(typeof chrome=="object"&&typeof(chrome.downloads||{}).download=="function")return URL.revokeObjectURL&&typeof setTimeout<"u"&&setTimeout(function(){URL.revokeObjectURL(C)},6e4),chrome.downloads.download({url:C,filename:o,saveAs:!0});var _=document.createElement("a");if(_.download!=null)return _.download=o,_.href=C,document.body.appendChild(_),_.click(),document.body.removeChild(_),URL.revokeObjectURL&&typeof setTimeout<"u"&&setTimeout(function(){URL.revokeObjectURL(C)},6e4),C}}if(typeof $<"u"&&typeof File<"u"&&typeof Folder<"u")try{var P=File(o);return P.open("w"),P.encoding="binary",Array.isArray(u)&&(u=a2s(u)),P.write(u),P.close(),u}catch(R){if(!R.message||!R.message.match(/onstruct/))throw R}throw new Error("cannot save file "+o)}function read_binary(o){if(typeof _fs<"u")return _fs.readFileSync(o);if(typeof Deno<"u")return Deno.readFileSync(o);if(typeof $<"u"&&typeof File<"u"&&typeof Folder<"u")try{var u=File(o);u.open("r"),u.encoding="binary";var T=u.read();return u.close(),T}catch(S){if(!S.message||!S.message.match(/onstruct/))throw S}throw new Error("Cannot access file "+o)}function keys(o){for(var u=Object.keys(o),T=[],S=0;S<u.length;++S)Object.prototype.hasOwnProperty.call(o,u[S])&&T.push(u[S]);return T}function evert_key(o,u){for(var T=[],S=keys(o),E=0;E!==S.length;++E)T[o[S[E]][u]]==null&&(T[o[S[E]][u]]=S[E]);return T}function evert(o){for(var u=[],T=keys(o),S=0;S!==T.length;++S)u[o[T[S]]]=T[S];return u}function evert_num(o){for(var u=[],T=keys(o),S=0;S!==T.length;++S)u[o[T[S]]]=parseInt(T[S],10);return u}function evert_arr(o){for(var u=[],T=keys(o),S=0;S!==T.length;++S)u[o[T[S]]]==null&&(u[o[T[S]]]=[]),u[o[T[S]]].push(T[S]);return u}var basedate=new Date(1899,11,30,0,0,0);function datenum(o,u){var T=o.getTime(),S=basedate.getTime()+(o.getTimezoneOffset()-basedate.getTimezoneOffset())*6e4;return(T-S)/(24*60*60*1e3)}var refdate=new Date,dnthresh=basedate.getTime()+(refdate.getTimezoneOffset()-basedate.getTimezoneOffset())*6e4,refoffset=refdate.getTimezoneOffset();function numdate(o){var u=new Date;return u.setTime(o*24*60*60*1e3+dnthresh),u.getTimezoneOffset()!==refoffset&&u.setTime(u.getTime()+(u.getTimezoneOffset()-refoffset)*6e4),u}function parse_isodur(o){var u=0,T=0,S=!1,E=o.match(/P([0-9\.]+Y)?([0-9\.]+M)?([0-9\.]+D)?T([0-9\.]+H)?([0-9\.]+M)?([0-9\.]+S)?/);if(!E)throw new Error("|"+o+"| is not an ISO8601 Duration");for(var C=1;C!=E.length;++C)if(E[C]){switch(T=1,C>3&&(S=!0),E[C].slice(E[C].length-1)){case"Y":throw new Error("Unsupported ISO Duration Field: "+E[C].slice(E[C].length-1));case"D":T*=24;case"H":T*=60;case"M":if(S)T*=60;else throw new Error("Unsupported ISO Duration Field: M")}u+=T*parseInt(E[C],10)}return u}var good_pd_date_1=new Date("2017-02-19T19:06:09.000Z"),good_pd_date=isNaN(good_pd_date_1.getFullYear())?new Date("2/19/17"):good_pd_date_1,good_pd=good_pd_date.getFullYear()==2017;function parseDate(o,u){var T=new Date(o);if(good_pd)return u>0?T.setTime(T.getTime()+T.getTimezoneOffset()*60*1e3):u<0&&T.setTime(T.getTime()-T.getTimezoneOffset()*60*1e3),T;if(o instanceof Date)return o;if(good_pd_date.getFullYear()==1917&&!isNaN(T.getFullYear())){var S=T.getFullYear();return o.indexOf(""+S)>-1||T.setFullYear(T.getFullYear()+100),T}var E=o.match(/\d+/g)||["2017","2","19","0","0","0"],C=new Date(+E[0],+E[1]-1,+E[2],+E[3]||0,+E[4]||0,+E[5]||0);return o.indexOf("Z")>-1&&(C=new Date(C.getTime()-C.getTimezoneOffset()*60*1e3)),C}function cc2str(o,u){if(has_buf&&Buffer.isBuffer(o)){if(u){if(o[0]==255&&o[1]==254)return utf8write(o.slice(2).toString("utf16le"));if(o[1]==254&&o[2]==255)return utf8write(utf16beread(o.slice(2).toString("binary")))}return o.toString("binary")}if(typeof TextDecoder<"u")try{if(u){if(o[0]==255&&o[1]==254)return utf8write(new TextDecoder("utf-16le").decode(o.slice(2)));if(o[0]==254&&o[1]==255)return utf8write(new TextDecoder("utf-16be").decode(o.slice(2)))}var T={"€":"€","‚":"‚",ƒ:"ƒ","„":"„","…":"…","†":"†","‡":"‡","ˆ":"ˆ","‰":"‰",Š:"Š","‹":"‹",Œ:"Œ",Ž:"Ž","‘":"‘","’":"’","“":"“","”":"”","•":"•","–":"–","—":"—","˜":"˜","™":"™",š:"š","›":"›",œ:"œ",ž:"ž",Ÿ:"Ÿ"};return Array.isArray(o)&&(o=new Uint8Array(o)),new TextDecoder("latin1").decode(o).replace(/[€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ]/g,function(C){return T[C]||C})}catch{}for(var S=[],E=0;E!=o.length;++E)S.push(String.fromCharCode(o[E]));return S.join("")}
217function dup(o){if(typeof JSON<"u"&&!Array.isArray(o))return JSON.parse(JSON.stringify(o));if(typeof o!="object"||o==null)return o;if(o instanceof Date)return new Date(o.getTime());var u={};for(var T in o)Object.prototype.hasOwnProperty.call(o,T)&&(u[T]=dup(o[T]));return u}function fill(o,u){for(var T="";T.length<u;)T+=o;return T}function fuzzynum(o){var u=Number(o);if(!isNaN(u))return isFinite(u)?u:NaN;if(!/\d/.test(o))return u;var T=1,S=o.replace(/([\d]),([\d])/g,"$1$2").replace(/[$]/g,"").replace(/[%]/g,function(){return T*=100,""});return!isNaN(u=Number(S))||(S=S.replace(/[(](.*)[)]/,function(E,C){return T=-T,C}),!isNaN(u=Number(S)))?u/T:u}var lower_months=["january","february","march","april","may","june","july","august","september","october","november","december"];function fuzzydate(o){var u=new Date(o),T=new Date(NaN),S=u.getYear(),E=u.getMonth(),C=u.getDate();if(isNaN(C))return T;var _=o.toLowerCase();if(_.match(/jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec/)){if(_=_.replace(/[^a-z]/g,"").replace(/([^a-z]|^)[ap]m?([^a-z]|$)/,""),_.length>3&&lower_months.indexOf(_)==-1)return T}else if(_.match(/[a-z]/))return T;return S<0||S>8099?T:(E>0||C>1)&&S!=101?u:o.match(/[^-0-9:,\/\\]/)?T:u}var split_regex=function(){var o="abacaba".split(/(:?b)/i).length==5;return function(T,S,E){if(o||typeof S=="string")return T.split(S);for(var C=T.split(S),_=[C[0]],P=1;P<C.length;++P)_.push(E),_.push(C[P]);return _}}();function getdatastr(o){return o?o.content&&o.type?cc2str(o.content,!0):o.data?debom(o.data):o.asNodeBuffer&&has_buf?debom(o.asNodeBuffer().toString("binary")):o.asBinary?debom(o.asBinary()):o._data&&o._data.getContent?debom(cc2str(Array.prototype.slice.call(o._data.getContent(),0))):null:null}function getdatabin(o){if(!o)return null;if(o.data)return char_codes(o.data);if(o.asNodeBuffer&&has_buf)return o.asNodeBuffer();if(o._data&&o._data.getContent){var u=o._data.getContent();return typeof u=="string"?char_codes(u):Array.prototype.slice.call(u)}return o.content&&o.type?o.content:null}function getdata(o){return o&&o.name.slice(-4)===".bin"?getdatabin(o):getdatastr(o)}function safegetzipfile(o,u){for(var T=o.FullPaths||keys(o.files),S=u.toLowerCase().replace(/[\/]/g,"\\"),E=S.replace(/\\/g,"/"),C=0;C<T.length;++C){var _=T[C].replace(/^Root Entry[\/]/,"").toLowerCase();if(S==_||E==_)return o.files?o.files[T[C]]:o.FileIndex[C]}return null}function getzipfile(o,u){var T=safegetzipfile(o,u);if(T==null)throw new Error("Cannot find file "+u+" in zip");return T}function getzipdata(o,u,T){if(!T)return getdata(getzipfile(o,u));if(!u)return null;try{return getzipdata(o,u)}catch{return null}}function getzipstr(o,u,T){if(!T)return getdatastr(getzipfile(o,u));if(!u)return null;try{return getzipstr(o,u)}catch{return null}}function getzipbin(o,u,T){return getdatabin(getzipfile(o,u))}function zipentries(o){for(var u=o.FullPaths||keys(o.files),T=[],S=0;S<u.length;++S)u[S].slice(-1)!="/"&&T.push(u[S].replace(/^Root Entry[\/]/,""));return T.sort()}function zip_add_file(o,u,T){if(o.FullPaths){if(typeof T=="string"){var S;return has_buf?S=Buffer_from(T):S=utf8decode(T),CFB.utils.cfb_add(o,u,S)}CFB.utils.cfb_add(o,u,T)}else o.file(u,T)}function zip_new(){return CFB.utils.cfb_new()}function zip_read(o,u){switch(u.type){case"base64":return CFB.read(o,{type:"base64"});case"binary":return CFB.read(o,{type:"binary"});case"buffer":case"array":return CFB.read(o,{type:"buffer"})}throw new Error("Unrecognized type "+u.type)}function resolve_path(o,u){if(o.charAt(0)=="/")return o.slice(1);var T=u.split("/");u.slice(-1)!="/"&&T.pop();for(var S=o.split("/");S.length!==0;){var E=S.shift();E===".."?T.pop():E!=="."&&T.push(E)}return T.join("/")}var XML_HEADER=`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\r
218`,attregexg=/([^"\s?>\/]+)\s*=\s*((?:")([^"]*)(?:")|(?:')([^']*)(?:')|([^'">\s]+))/g,tagregex1=/<[\/\?]?[a-zA-Z0-9:_-]+(?:\s+[^"\s?>\/]+\s*=\s*(?:"[^"]*"|'[^']*'|[^'">\s=]+))*\s*[\/\?]?>/mg,tagregex2=/<[^>]*>/g,tagregex=XML_HEADER.match(tagregex1)?tagregex1:tagregex2,nsregex=/<\w*:/,nsregex2=/<(\/?)\w+:/;function parsexmltag(o,u,T){for(var S={},E=0,C=0;
218E!==o.length&&!((C=o.charCodeAt(E))===32||C===10||C===13);++E);if(u||(S[0]=o.slice(0,E)),E===o.length)return S;var _=o.match(attregexg),P=0,R="",I=0,L="",j="",M=1;if(_)for(I=0;I!=_.length;++I){for(j=_[I],C=0;C!=j.length&&j.charCodeAt(C)!==61;++C);for(L=j.slice(0,C).trim();j.charCodeAt(C+1)==32;)++C;for(M=(E=j.charCodeAt(C+1))==34||E==39?1:0,R=j.slice(C+1+M,j.length-M),P=0;P!=L.length&&L.charCodeAt(P)!==58;++P);if(P===L.length)L.indexOf("_")>0&&(L=L.slice(0,L.indexOf("_"))),S[L]=R,S[L.toLowerCase()]=R;else{var D=(P===5&&L.slice(0,5)==="xmlns"?"xmlns":"")+L.slice(P+1);if(S[D]&&L.slice(P-3,P)=="ext")continue;S[D]=R,S[D.toLowerCase()]=R}}return S}function strip_ns(o){return o.replace(nsregex2,"<$1")}var encodings={"&quot;":'"',"&apos;":"'","&gt;":">","&lt;":"<","&amp;":"&"},rencoding=evert(encodings),unescapexml=function(){var o=/&(?:quot|apos|gt|lt|amp|#x?([\da-fA-F]+));/ig,u=/_x([\da-fA-F]{4})_/ig;return function T(S){var E=S+"",C=E.indexOf("<![CDATA[");if(C==-1)return E.replace(o,function(P,R){return encodings[P]||String.fromCharCode(parseInt(R,P.indexOf("x")>-1?16:10))||P}).replace(u,function(P,R){return String.fromCharCode(parseInt(R,16))});var _=E.indexOf("]]>");return T(E.slice(0,C))+E.slice(C+9,_)+T(E.slice(_+3))}}(),decregex=/[&<>'"]/g,charegex=/[\u0000-\u0008\u000b-\u001f]/g;function escapexml(o){var u=o+"";return u.replace(decregex,function(T){return rencoding[T]}).replace(charegex,function(T){return"_x"+("000"+T.charCodeAt(0).toString(16)).slice(-4)+"_"})}function escapexmltag(o){return escapexml(o).replace(/ /g,"_x0020_")}var htmlcharegex=/[\u0000-\u001f]/g;function escapehtml(o){var u=o+"";return u.replace(decregex,function(T){return rencoding[T]}).replace(/\n/g,"<br/>").replace(htmlcharegex,function(T){return"&#x"+("000"+T.charCodeAt(0).toString(16)).slice(-4)+";"})}function escapexlml(o){var u=o+"";return u.replace(decregex,function(T){return rencoding[T]}).replace(htmlcharegex,function(T){return"&#x"+T.charCodeAt(0).toString(16).toUpperCase()+";"})}var xlml_fixstr=function(){var o=/&#(\d+);/g;function u(T,S){return String.fromCharCode(parseInt(S,10))}return function(S){return S.replace(o,u)}}();function xlml_unfixstr(o){return o.replace(/(\r\n|[\r\n])/g,"&#10;")}function parsexmlbool(o){switch(o){case 1:case!0:case"1":case"true":case"TRUE":return!0;default:return!1}}function utf8reada(o){for(var u="",T=0,S=0,E=0,C=0,_=0,P=0;T<o.length;){if(S=o.charCodeAt(T++),S<128){u+=String.fromCharCode(S);continue}if(E=o.charCodeAt(T++),S>191&&S<224){_=(S&31)<<6,_|=E&63,u+=String.fromCharCode(_);continue}if(C=o.charCodeAt(T++),S<240){u+=String.fromCharCode((S&15)<<12|(E&63)<<6|C&63);continue}
218_=o.charCodeAt(T++),P=((S&7)<<18|(E&63)<<12|(C&63)<<6|_&63)-65536,u+=String.fromCharCode(55296+(P>>>10&1023)),u+=String.fromCharCode(56320+(P&1023))}return u}function utf8readb(o){var u=new_raw_buf(2*o.length),T,S,E=1,C=0,_=0,P;for(S=0;S<o.length;S+=E)E=1,(P=o.charCodeAt(S))<128?T=P:P<224?(T=(P&31)*64+(o.charCodeAt(S+1)&63),E=2):P<240?(T=(P&15)*4096+(o.charCodeAt(S+1)&63)*64+(o.charCodeAt(S+2)&63),E=3):(E=4,T=(P&7)*262144+(o.charCodeAt(S+1)&63)*4096+(o.charCodeAt(S+2)&63)*64+(o.charCodeAt(S+3)&63),T-=65536,_=55296+(T>>>10&1023),T=56320+(T&1023)),_!==0&&(u[C++]=_&255,u[C++]=_>>>8,_=0),u[C++]=T%256,u[C++]=T>>>8;return u.slice(0,C).toString("ucs2")}function utf8readc(o){return Buffer_from(o,"binary").toString("utf8")}var utf8corpus="foo bar baz☃🍣",utf8read=has_buf&&(utf8readc(utf8corpus)==utf8reada(utf8corpus)&&utf8readc||utf8readb(utf8corpus)==utf8reada(utf8corpus)&&utf8readb)||utf8reada,utf8write=has_buf?function(o){return Buffer_from(o,"utf8").toString("binary")}:function(o){for(var u=[],T=0,S=0,E=0;T<o.length;)switch(S=o.charCodeAt(T++),!0){case S<128:u.push(String.fromCharCode(S));break;case S<2048:u.push(String.fromCharCode(192+(S>>6))),u.push(String.fromCharCode(128+(S&63)));break;case(S>=55296&&S<57344):S-=55296,E=o.charCodeAt(T++)-56320+(S<<10),u.push(String.fromCharCode(240+(E>>18&7))),u.push(String.fromCharCode(144+(E>>12&63))),u.push(String.fromCharCode(128+(E>>6&63))),u.push(String.fromCharCode(128+(E&63)));break;default:u.push(String.fromCharCode(224+(S>>12))),u.push(String.fromCharCode(128+(S>>6&63))),u.push(String.fromCharCode(128+(S&63)))}return u.join("")},matchtag=function(){var o={};return function(T,S){var E=T+"|"+(S||"");return o[E]?o[E]:o[E]=new RegExp("<(?:\\w+:)?"+T+'(?: xml:space="preserve")?(?:[^>]*)>([\\s\\S]*?)</(?:\\w+:)?'+T+">",S||"")}}(),htmldecode=function(){var o=[["nbsp"," "],["middot","·"],["quot",'"'],["apos","'"],["gt",">"],["lt","<"],["amp","&"]].map(function(u){return[new RegExp("&"+u[0]+";","ig"),u[1]]});return function(T){for(var S=T.replace(/^[\t\n\r ]+/,"").replace(/[\t\n\r ]+$/,"").replace(/>\s+/g,">").replace(/\s+</g,"<").replace(/[\t\n\r ]+/g," ").replace(/<\s*[bB][rR]\s*\/?>/g,`
219`).replace(/<[^>]*>/g,""),E=0;E<o.length;++E)S=S.replace(o[E][0],o[E][1]);return S}}(),vtregex=function(){var o={};return function(T){return o[T]!==void 0?o[T]:o[T]=new RegExp("<(?:vt:)?"+T+">([\\s\\S]*?)</(?:vt:)?"+T+">","g")}}(),vtvregex=/<\/?(?:vt:)?variant>/g,vtmregex=/<(?:vt:)([^>]*)>([\s\S]*)</;function parseVector(o,u){var T=parsexmltag(o),S=o.match(vtregex(T.baseType))||[],E=[];if(S.length!=T.size){if(u.WTF)throw new Error("unexpected vector length "+S.length+" != "+T.size);return E}return S.forEach(function(C){var _=C.replace(vtvregex,"").match(vtmregex);_&&E.push({v:utf8read(_[2]),t:_[1]})}),E}var wtregex=/(^\s|\s$|\n)/;function writetag(o,u){return"<"+o+(u.match(wtregex)?' xml:space="preserve"':"")+">"+u+"</"+o+">"}function wxt_helper(o){return keys(o).map(function(u){return" "+u+'="'+o[u]+'"'}).join("")}function writextag(o,u,T){return"<"+o+(T!=null?wxt_helper(T):"")+(u!=null?(u.match(wtregex)?' xml:space="preserve"':"")+">"+u+"</"+o:"/")+">"}function write_w3cdtf(o,u){try{return o.toISOString().replace(/\.\d*/,"")}catch(T){if(u)throw T}return""}function write_vt(o,u){switch(typeof o){case"string":var T=writextag("vt:lpwstr",escapexml(o));return T=T.replace(/&quot;/g,"_x0022_"),T;case"number":return writextag((o|0)==o?"vt:i4":"vt:r8",escapexml(String(o)));case"boolean":return writextag("vt:bool",o?"true":"false")}if(o instanceof Date)return writextag("vt:filetime",write_w3cdtf(o));throw new Error("Unable to serialize "+o)}function xlml_normalize(o){if(has_buf&&Buffer.isBuffer(o))return o.toString("utf8");if(typeof o=="string")return o;if(typeof Uint8Array<"u"&&o instanceof Uint8Array)return utf8read(a2s(ab2a(o)));throw new Error("Bad input format: expected Buffer or string")}var xlmlregex=/<(\/?)([^\s?><!\/:]*:|)([^\s?<>:\/]+)(?:[\s?:\/][^>]*)?>/mg,XMLNS={CORE_PROPS:"http://schemas.openxmlformats.org/package/2006/metadata/core-properties",CUST_PROPS:"http://schemas.openxmlformats.org/officeDocument/2006/custom-properties",EXT_PROPS:"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties",CT:"http://schemas.openxmlformats.org/package/2006/content-types",RELS:"http://schemas.openxmlformats.org/package/2006/relationships",TCMNT
219:"http://schemas.microsoft.com/office/spreadsheetml/2018/threadedcomments",dc:"http://purl.org/dc/elements/1.1/",dcterms:"http://purl.org/dc/terms/",dcmitype:"http://purl.org/dc/dcmitype/",r:"http://schemas.openxmlformats.org/officeDocument/2006/relationships",vt:"http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes",xsi:"http://www.w3.org/2001/XMLSchema-instance",xsd:"http://www.w3.org/2001/XMLSchema"},XMLNS_main=["http://schemas.openxmlformats.org/spreadsheetml/2006/main","http://purl.oclc.org/ooxml/spreadsheetml/main","http://schemas.microsoft.com/office/excel/2006/main","http://schemas.microsoft.com/office/excel/2006/2"],XLMLNS={o:"urn:schemas-microsoft-com:office:office",x:"urn:schemas-microsoft-com:office:excel",ss:"urn:schemas-microsoft-com:office:spreadsheet",dt:"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882",mv:"http://macVmlSchemaUri",v:"urn:schemas-microsoft-com:vml",html:"http://www.w3.org/TR/REC-html40"};function read_double_le(o,u){for(var T=1-2*(o[u+7]>>>7),S=((o[u+7]&127)<<4)+(o[u+6]>>>4&15),E=o[u+6]&15,C=5;C>=0;--C)E=E*256+o[u+C];return S==2047?E==0?T*(1/0):NaN:(S==0?S=-1022:(S-=1023,E+=Math.pow(2,52)),T*Math.pow(2,S-52)*E)}function write_double_le(o,u,T){var S=(u<0||1/u==-1/0?1:0)<<7,E=0,C=0,_=S?-u:u;isFinite(_)?_==0?E=C=0:(E=Math.floor(Math.log(_)/Math.LN2),C=_*Math.pow(2,52-E),E<=-1023&&(!isFinite(C)||C<Math.pow(2,52))?E=-1022:(C-=Math.pow(2,52),E+=1023)):(E=2047,C=isNaN(u)?26985:0);for(var P=0;P<=5;++P,C/=256)o[T+P]=C&255;o[T+6]=(E&15)<<4|C&15,o[T+7]=E>>4|S}var ___toBuffer=function(o){for(var u=[],T=10240,S=0;S<o[0].length;++S)if(o[0][S])for(var E=0,C=o[0][S].length;E<C;E+=T)u.push.apply(u,o[0][S].slice(E,E+T));return u},__toBuffer=has_buf?function(o){return o[0].length>0&&Buffer.isBuffer(o[0][0])?Buffer.concat(o[0].map(function(u){return Buffer.isBuffer(u)?u:Buffer_from(u)})):___toBuffer(o)}:___toBuffer,___utf16le=function(o,u,T){for(var S=[],E=u;E<T;E+=2)S.push(String.fromCharCode(__readUInt16LE(o,E)));return S.join("").replace(chr0,"")},__utf16le=has_buf?function(o,u,T){return Buffer.isBuffer(o)?o.toString("utf16le",u,T).replace(chr0,""):___utf16le(o,u,T)}:___utf16le,___hexlify=function(o,u,T){for(var S=[],E=u;E<u+T;++E)S.push(("0"+o[E].toString(16)).slice(-2));return S.join("")},__hexlify=has_buf?function(o,u,T){return Buffer.isBuffer(o)?o.toString("hex",u,u+T):___hexlify(o,u,T)}:___hexlify,___utf8=function(o,u,T){for(var S=[],E=u;E<T;E++)S.push(String.fromCharCode(__readUInt8(o,E)));return S.join("")},__utf8=has_buf?function(u,T,S){return Buffer.isBuffer(u)?u.toString("utf8",T,S):___utf8(u,T,S)}:___utf8,___lpstr=function(o,u){var T=__readUInt32LE(o,u);return T>0?__utf8(o,u+4,u+4+T-1):""},__lpstr=___lpstr,___cpstr=function(o,u){var T=__readUInt32LE(o,u);return T>0?__utf8(o,u+4,u+4+T-1):""},__cpstr=___cpstr,___lpwstr=function(o,u){var T=2*__readUInt32LE(o,u);return T>0?__utf8(o,u+4,u+4+T-1):""},__lpwstr=___lpwstr,___lpp4=function(u,T){var S=__readUInt32LE(u,T);return S>0?__utf16le(u,T+4,T+4+S):""},__lpp4=___lpp4,___8lpp4=function(o,u){var T=__readUInt32LE(o,u);return T>0?__utf8(o,u+4,u+4+T):""},__8lpp4=___8lpp4,___double=function(o,u){return read_double_le(o,u)},__double=___double,is_buf=function(u){return Array.isArray(u)||typeof Uint8Array<"u"&&u instanceof Uint8Array};has_buf&&(__lpstr=function(u,T){if(!Buffer.isBuffer(u))return ___lpstr(u,T);var S=u.readUInt32LE(T);return S>0?u.toString("utf8",T+4,T+4+S-1):""},__cpstr=function(u,T){if(!Buffer.isBuffer(u))return ___cpstr(u,T);var S=u.readUInt32LE(T);return S>0?u.toString("utf8",T+4,T+4+S-1):""},__lpwstr=function(u,T){if(!Buffer.isBuffer(u))return ___lpwstr(u,T);var S=2*u.readUInt32LE(T);return u.toString("utf16le",T+4,T+4+S-1)},__lpp4=function(u,T){if(!Buffer.isBuffer(u))return ___lpp4(u,T);var S=u.readUInt32LE(T);return u.toString("utf16le",T+4,T+4+S)},__8lpp4=function(u,T){if(!Buffer.isBuffer(u))return ___8lpp4(u,T);var S=u.readUInt32LE(T);return u.toString("utf8",T+4,T+4+S)},__double=function(u,T){return Buffer.isBuffer(u)?u.readDoubleLE(T):___double(u,T)},is_buf=function(u){return Buffer.isBuffer(u)||Array.isArray(u)||typeof Uint8Array<"u"&&u instanceof Uint8Array});function cpdoit(){__utf16le=function(o,u,T){return $cptable.utils.decode(1200,o.slice(u,T)).replace(chr0,"")},__utf8=function(o,u,T){return $cptable.utils.decode(65001,o.slice(u,T))},__lpstr=function(o,u){var T=__readUInt32LE(o,u);return T>
2190?$cptable.utils.decode(current_ansi,o.slice(u+4,u+4+T-1)):""},__cpstr=function(o,u){var T=__readUInt32LE(o,u);return T>0?$cptable.utils.decode(current_codepage,o.slice(u+4,u+4+T-1)):""},__lpwstr=function(o,u){var T=2*__readUInt32LE(o,u);return T>0?$cptable.utils.decode(1200,o.slice(u+4,u+4+T-1)):""},__lpp4=function(o,u){var T=__readUInt32LE(o,u);return T>0?$cptable.utils.decode(1200,o.slice(u+4,u+4+T)):""},__8lpp4=function(o,u){var T=__readUInt32LE(o,u);return T>0?$cptable.utils.decode(65001,o.slice(u+4,u+4+T)):""}}typeof $cptable<"u"&&cpdoit();var __readUInt8=function(o,u){return o[u]},__readUInt16LE=function(o,u){return o[u+1]*256+o[u]},__readInt16LE=function(o,u){var T=o[u+1]*256+o[u];return T<32768?T:(65535-T+1)*-1},__readUInt32LE=function(o,u){return o[u+3]*(1<<24)+(o[u+2]<<16)+(o[u+1]<<8)+o[u]},__readInt32LE=function(o,u){return o[u+3]<<24|o[u+2]<<16|o[u+1]<<8|o[u]},__readInt32BE=function(o,u){return o[u]<<24|o[u+1]<<16|o[u+2]<<8|o[u+3]};function ReadShift(o,u){var T="",S,E,C=[],_,P,R,I;switch(u){case"dbcs":if(I=this.l,has_buf&&Buffer.isBuffer(this))T=this.slice(this.l,this.l+2*o).toString("utf16le");else for(R=0;R<o;++R)T+=String.fromCharCode(__readUInt16LE(this,I)),I+=2;o*=2;break;case"utf8":T=__utf8(this,this.l,this.l+o);break;case"utf16le":o*=2,T=__utf16le(this,this.l,this.l+o);break;case"wstr":if(typeof $cptable<"u")T=$cptable.utils.decode(current_codepage,this.slice(this.l,this.l+2*o));else return ReadShift.call(this,o,"dbcs");o=2*o;break;case"lpstr-ansi":T=__lpstr(this,this.l),o=4+__readUInt32LE(this,this.l);break;case"lpstr-cp":T=__cpstr(this,this.l),o=4+__readUInt32LE(this,this.l);break;case"lpwstr":T=__lpwstr(this,this.l),o=4+2*__readUInt32LE(this,this.l);break;case"lpp4":o=4+__readUInt32LE(this,this.l),T=__lpp4(this,this.l),o&2&&(o+=2);break;case"8lpp4":o=4+__readUInt32LE(this,this.l),T=__8lpp4(this,this.l),o&3&&(o+=4-(o&3));break;case"cstr":for(o=0,T="";(_=__readUInt8(this,this.l+o++))!==0;)C.push(_getchar(_));T=C.join("");break;case"_wstr":for(o=0,T="";(_=__readUInt16LE(this,this.l+o))!==0;)C.push(_getchar(_)),o+=2;o+=2,T=C.join("");break;case"dbcs-cont":for(T="",I=this.l,R=0;R<o;++R){if(this.lens&&this.lens.indexOf(I)!==-1)return _=__readUInt8(this,I),this.l=I+1,P=ReadShift.call(this,o-R,_?"dbcs-cont":"sbcs-cont"),C.join("")+P;C.push(_getchar(__readUInt16LE(this,I))),I+=2}T=C.join(""),o*=2;break;case"cpstr":if(typeof $cptable<"u"){T=$cptable.utils.decode(current_codepage,this.slice(this.l,this.l+o));break}case"sbcs-cont":for(T="",I=this.l,R=0;R!=o;++R){if(this.lens&&this.lens.indexOf(I)!==-1)return _=__readUInt8(this,I),this.l=I+1,P=ReadShift.call(this,o-R,_?"dbcs-cont":"sbcs-cont"),C.join("")+P;C.push(_getchar(__readUInt8(this,I))),I+=1}T=C.join("");break;default:switch(o){case 1:return S=__readUInt8(this,this.l),this.l++,S;case 2:return S=(u==="i"?__readInt16LE:__readUInt16LE)(this,this.l),this.l+=2,S;case 4:case-4:return u==="i"||!(this[this.l+3]&128)?(S=(o>0?__readInt32LE:__readInt32BE)(this,this.l),this.l+=4,S):(E=__readUInt32LE(this,this.l),this.l+=4,E);case 8:case-8:if(u==="f")return o==8?E=__double(this,this.l):E=__double([this[this.l+7],this[this.l+6],this[this.l+5],this[this.l+4],this[this.l+3],this[this.l+2],this[this.l+1],this[this.l+0]],0),this.l+=8,E;o=8;case 16:T=__hexlify(this,this.l,o);break}}return this.l+=o,T}var __writeUInt32LE=function(o,u,T){o[T]=u&255,o[T+1]=u>>>8&255,o[T+2]=u>>>16&255,o[T+3]=u>>>24&255},__writeInt32LE=function(o,u,T){o[T]=u&255,o[T+1]=u>>8&255,o[T+2]=u>>16&255,o[T+3]=u>>24&255},__writeUInt16LE=function(o,u,T){o[T]=u&255,o[T+1]=u>>>8&255};function WriteShift(o,u,T){var S=0,E=0;if(T==="dbcs"){for(E=0;E!=u.length;++E)__writeUInt16LE(this,u.charCodeAt(E),this.l+2*E);S=2*u.length}else if(T==="sbcs"){if(typeof $cptable<"u"&&current_ansi==874)for(E=0;E!=u.length;++E){var C=$cptable.utils.encode(current_ansi,u.charAt(E));this[this.l+E]=C[0]}else for(u=u.replace(/[^\x00-\x7F]/g,"_"),E=0;E!=u.length;++E)this[this.l+E]=u.charCodeAt(E)&255;S=u.length}else if(T==="hex"){for(;E<o;++E)this[this.l++]=parseInt(u.slice(2*E,2*E+2),16)||0;return this}else if(T==="utf16le"){var _=Math.min(this.l+o,this.length);for(E=0;E<Math.min(u.length,o);++E){var P=u.charCodeAt(E);this[this.l++]=P&255,this[this.l++]=P>>8}for(;this.l<_;)this[this.l++]=0;return this}else switch(o){case 1:S=1,this[this.l]=u&255;break;case 2:S=2,this[this.l]=u&255,u>>>=8,this[this.l+1]=u&255;break;case 3:S=3,this[this.l]=u&255,u>>>=8,this[this.l+1]=u&255,u>>>=8,this[this.l+2]=u&255;break;case 4:S=4,__writeUInt32LE(this,u,this.l);break;case 8:if(S=8,T==="f"){write_double_le(this,u,this.l);break}case 16:break;case-4:S=4,__writeInt32LE(this,u,this.l);break}return this.l+=S,this}function CheckField(o,u){var T=__hexlify(this,this.l,o.length>>1);if(T!==o)throw new Error(u+"Expected "+o+" saw "+T);this.l+=o.length>>1}function prep_blob(o,u){o.l=u,o.read_shift=ReadShift,o.chk=CheckField,o.write_shift=WriteShift}
219function parsenoop(o,u){o.l+=u}function new_buf(o){var u=new_raw_buf(o);return prep_blob(u,0),u}function recordhopper(o,u,T){if(o){var S,E,C;prep_blob(o,o.l||0);for(var _=o.length,P=0,R=0;o.l<_;){P=o.read_shift(1),P&128&&(P=(P&127)+((o.read_shift(1)&127)<<7));var I=XLSBRecordEnum[P]||XLSBRecordEnum[65535];for(S=o.read_shift(1),C=S&127,E=1;E<4&&S&128;++E)C+=((S=o.read_shift(1))&127)<<7*E;R=o.l+C;var L=I.f&&I.f(o,C,T);if(o.l=R,u(L,I,P))return}}}function buf_array(){var o=[],u=has_buf?256:2048,T=function(I){var L=new_buf(I);return prep_blob(L,0),L},S=T(u),E=function(){S&&(S.length>S.l&&(S=S.slice(0,S.l),S.l=S.length),S.length>0&&o.push(S),S=null)},C=function(I){return S&&I<S.length-S.l?S:(E(),S=T(Math.max(I+1,u)))},_=function(){return E(),bconcat(o)},P=function(I){E(),S=I,S.l==null&&(S.l=S.length),C(u)};return{next:C,push:P,end:_,_bufs:o}}function write_record(o,u,T,S){var E=+u,C;if(!isNaN(E)){S||(S=XLSBRecordEnum[E].p||(T||[]).length||0),C=1+(E>=128?1:0)+1,S>=128&&++C,S>=16384&&++C,S>=2097152&&++C;var _=o.next(C);E<=127?_.write_shift(1,E):(_.write_shift(1,(E&127)+128),_.write_shift(1,E>>7));for(var P=0;P!=4;++P)if(S>=128)_.write_shift(1,(S&127)+128),S>>=7;else{_.write_shift(1,S);break}S>0&&is_buf(T)&&o.push(T)}}function shift_cell_xls(o,u,T){var S=dup(o);if(u.s?(S.cRel&&(S.c+=u.s.c),S.rRel&&(S.r+=u.s.r)):(S.cRel&&(S.c+=u.c),S.rRel&&(S.r+=u.r)),!T||T.biff<12){for(;S.c>=256;)S.c-=256;for(;S.r>=65536;)S.r-=65536}return S}function shift_range_xls(o,u,T){var S=dup(o);return S.s=shift_cell_xls(S.s,u.s,T),S.e=shift_cell_xls(S.e,u.s,T),S}function encode_cell_xls(o,u){if(o.cRel&&o.c<0)for(o=dup(o);o.c<0;)o.c+=u>8?16384:256;if(o.rRel&&o.r<0)for(o=dup(o);o.r<0;)o.r+=u>8?1048576:u>5?65536:16384;var T=encode_cell(o);return!o.cRel&&o.cRel!=null&&(T=fix_col(T)),!o.rRel&&o.rRel!=null&&(T=fix_row(T)),T}function encode_range_xls(o,u){return o.s.r==0&&!o.s.rRel&&o.e.r==(u.biff>=12?1048575:u.biff>=8?65536:16384)&&!o.e.rRel?(o.s.cRel?"":"$")+encode_col(o.s.c)+":"+(o.e.cRel?"":"$")+encode_col(o.e.c):o.s.c==0&&!o.s.cRel&&o.e.c==(u.biff>=12?16383:255)&&!o.e.cRel?(o.s.rRel?"":"$")+encode_row(o.s.r)+":"+(o.e.rRel?"":"$")+encode_row(o.e.r):encode_cell_xls(o.s,u.biff)+":"+encode_cell_xls(o.e,u.biff)}function decode_row(o){return parseInt(unfix_row(o),10)-1}function encode_row(o){return""+(o+1)}function fix_row(o){return o.replace(/([A-Z]|^)(\d+)$/,"$1$$$2")}function unfix_row(o){return o.replace(/\$(\d+)$/,"$1")}function decode_col(o){for(var u=unfix_col(o),T=0,S=0;S!==u.length;++S)T=26*T+u.charCodeAt(S)-64;return T-1}function encode_col(o){if(o<0)throw new Error("invalid column "+o);var u="";for(++o;o;o=Math.floor((o-1)/26))u=String.fromCharCode((o-1)%26+65)+u;return u}function fix_col(o){return o.replace(/^([A-Z])/,"$$$1")}function unfix_col(o){return o.replace(/^\$([A-Z])/,"$1")}function split_cell(o){return o.replace(/(\$?[A-Z]*)(\$?\d*)/,"$1,$2").split(",")}function decode_cell(o){for(var u=0,T=0,S=0;S<o.length;++S){var E=o.charCodeAt(S);E>=48&&E<=57?u=10*u+(E-48):E>=65&&E<=90&&(T=26*T+(E-64))}return{c:T-1,r:u-1}}function encode_cell(o){for(var u=o.c+1,T="";u;u=(u-1)/26|0)T=String.fromCharCode((u-1)%26+65)+T;return T+(o.r+1)}function decode_range(o){var u=o.indexOf(":");return u==-1?{s:decode_cell(o),e:decode_cell(o)}:{s:decode_cell(o.slice(0,u)),e:decode_cell(o.slice(u+1))}}function encode_range(o,u){return typeof u>"u"||typeof u=="number"?encode_range(o.s,o.e):(typeof o!="string"&&(o=encode_cell(o)),typeof u!="string"&&(u=encode_cell(u)),o==u?o:o+":"+u)}function safe_decode_range(o){var u={s:{c:0,r:0},e:{c:0,r:0}},T=0,S=0,E=0,C=o.length;for(T=0;S<C&&!((E=o.charCodeAt(S)-64)<1||E>26);++S)T=26*T+E;for(u.s.c=--T,T=0;S<C&&!((E=o.charCodeAt(S)-48)<0||E>9);++S)T=10*T+E;if(u.s.r=--T,S===C||E!=10)return u.e.c=u.s.c,u.e.r=u.s.r,u;for(++S,T=0;S!=C&&!((E=o.charCodeAt(S)-64)<1||E>26);++S)T=26*T+E;for(u.e.c=--T,T=0;S!=C&&!((E=o.charCodeAt(S)-48)<0||E>9);++S)T=10*T+E;return u.e.r=--T,u}function safe_format_cell(o,u){var T=o.t=="d"&&u instanceof Date;if(o.z!=null)try{return o.w=SSF_format(o.z,T?datenum(u):u)}catch{}try{return o.w=SSF_format((o.XF||{}).numFmtId||(T?14:0),T?datenum(u):u)}catch{return""+u}}function format_cell(o,u,T){return o==null||o.t==null||o.t=="z"?"":o.w!==void 0?o.w:(o.t=="d"&&!o.z&&T&&T.dateNF&&(o.z=T.dateNF),o.t=="e"?BErr[o.v]||o.v:u==null?safe_format_cell(o,o.v):safe_format_cell(o,u))}function sheet_to_workbook(o,u){var T=u&&u.sheet?u.sheet:"Sheet1",S={};return S[T]=o,{SheetNames:[T],Sheets:S}}function sheet_add_aoa(o,u,T){var S=T||{},E=o?Array.isArray(o):S.dense,C=o||(E?[]:{}),_=0,P=0;if(C&&S.origin!=null){if(typeof S.origin=="number")_=S.origin;
vendor: 8,577 bytes, line 219
219else{var R=typeof S.origin=="string"?decode_cell(S.origin):S.origin;_=R.r,P=R.c}C["!ref"]||(C["!ref"]="A1:A1")}var I={s:{c:1e7,r:1e7},e:{c:0,r:0}};if(C["!ref"]){var L=safe_decode_range(C["!ref"]);I.s.c=L.s.c,I.s.r=L.s.r,I.e.c=Math.max(I.e.c,L.e.c),I.e.r=Math.max(I.e.r,L.e.r),_==-1&&(I.e.r=_=L.e.r+1)}for(var j=0;j!=u.length;++j)if(u[j]){if(!Array.isArray(u[j]))throw new Error("aoa_to_sheet expects an array of arrays");for(var M=0;M!=u[j].length;++M)if(!(typeof u[j][M]>"u")){var D={v:u[j][M]},F=_+j,N=P+M;if(I.s.r>F&&(I.s.r=F),I.s.c>N&&(I.s.c=N),I.e.r<F&&(I.e.r=F),I.e.c<N&&(I.e.c=N),u[j][M]&&typeof u[j][M]=="object"&&!Array.isArray(u[j][M])&&!(u[j][M]instanceof Date))D=u[j][M];else if(Array.isArray(D.v)&&(D.f=u[j][M][1],D.v=D.v[0]),D.v===null)if(D.f)D.t="n";else if(S.nullError)D.t="e",D.v=0;else if(S.sheetStubs)D.t="z";else continue;else typeof D.v=="number"?D.t="n":typeof D.v=="boolean"?D.t="b":D.v instanceof Date?(D.z=S.dateNF||table_fmt[14],S.cellDates?(D.t="d",D.w=SSF_format(D.z,datenum(D.v))):(D.t="n",D.v=datenum(D.v),D.w=SSF_format(D.z,D.v))):D.t="s";if(E)C[F]||(C[F]=[]),C[F][N]&&C[F][N].z&&(D.z=C[F][N].z),C[F][N]=D;else{var G=encode_cell({c:N,r:F});C[G]&&C[G].z&&(D.z=C[G].z),C[G]=D}}}return I.s.c<1e7&&(C["!ref"]=encode_range(I)),C}function aoa_to_sheet(o,u){return sheet_add_aoa(null,o,u)}function parse_Int32LE(o){return o.read_shift(4,"i")}function write_UInt32LE(o,u){return u||(u=new_buf(4)),u.write_shift(4,o),u}function parse_XLWideString(o){var u=o.read_shift(4);return u===0?"":o.read_shift(u,"dbcs")}function write_XLWideString(o,u){var T=!1;return u==null&&(T=!0,u=new_buf(4+2*o.length)),u.write_shift(4,o.length),o.length>0&&u.write_shift(0,o,"dbcs"),T?u.slice(0,u.l):u}function parse_StrRun(o){return{ich:o.read_shift(2),ifnt:o.read_shift(2)}}function write_StrRun(o,u){return u||(u=new_buf(4)),u.write_shift(2,0),u.write_shift(2,0),u}function parse_RichStr(o,u){var T=o.l,S=o.read_shift(1),E=parse_XLWideString(o),C=[],_={t:E,h:E};if(S&1){for(var P=o.read_shift(4),R=0;R!=P;++R)C.push(parse_StrRun(o));_.r=C}else _.r=[{ich:0,ifnt:0}];return o.l=T+u,_}function write_RichStr(o,u){var T=!1;return u==null&&(T=!0,u=new_buf(15+4*o.t.length)),u.write_shift(1,0),write_XLWideString(o.t,u),T?u.slice(0,u.l):u}var parse_BrtCommentText=parse_RichStr;function write_BrtCommentText(o,u){var T=!1;return u==null&&(T=!0,u=new_buf(23+4*o.t.length)),u.write_shift(1,1),write_XLWideString(o.t,u),u.write_shift(4,1),write_StrRun({},u),T?u.slice(0,u.l):u}function parse_XLSBCell(o){var u=o.read_shift(4),T=o.read_shift(2);return T+=o.read_shift(1)<<16,o.l++,{c:u,iStyleRef:T}}function write_XLSBCell(o,u){return u==null&&(u=new_buf(8)),u.write_shift(-4,o.c),u.write_shift(3,o.iStyleRef||o.s),u.write_shift(1,0),u}function parse_XLSBShortCell(o){var u=o.read_shift(2);return u+=o.read_shift(1)<<16,o.l++,{c:-1,iStyleRef:u}}function write_XLSBShortCell(o,u){return u==null&&(u=new_buf(4)),u.write_shift(3,o.iStyleRef||o.s),u.write_shift(1,0),u}var parse_XLSBCodeName=parse_XLWideString,write_XLSBCodeName=write_XLWideString;function parse_XLNullableWideString(o){var u=o.read_shift(4);return u===0||u===4294967295?"":o.read_shift(u,"dbcs")}function write_XLNullableWideString(o,u){var T=!1;return u==null&&(T=!0,u=new_buf(127)),u.write_shift(4,o.length>0?o.length:4294967295),o.length>0&&u.write_shift(0,o,"dbcs"),T?u.slice(0,u.l):u}var parse_XLNameWideString=parse_XLWideString,parse_RelID=parse_XLNullableWideString,write_RelID=write_XLNullableWideString;function parse_RkNumber(o){var u=o.slice(o.l,o.l+4),T=u[0]&1,S=u[0]&2;o.l+=4;var E=S===0?__double([0,0,0,0,u[0]&252,u[1],u[2],u[3]],0):__readInt32LE(u,0)>>2;return T?E/100:E}function write_RkNumber(o,u){u==null&&(u=new_buf(4));var T=0,S=0,E=o*100;if(o==(o|0)&&o>=-536870912&&o<1<<29?S=1:E==(E|0)&&E>=-536870912&&E<1<<29&&(S=1,T=1),S)u.write_shift(-4,((T?E:o)<<2)+(T+2));else throw new Error("unsupported RkNumber "+o)}function parse_RfX(o){var u={s:{},e:{}};return u.s.r=o.read_shift(4),u.e.r=o.read_shift(4),u.s.c=o.read_shift(4),u.e.c=o.read_shift(4),u}function write_RfX(o,u){return u||(u=new_buf(16)),u.write_shift(4,o.s.r),u.write_shift(4,o.e.r),u.write_shift(4,o.s.c),u.write_shift(4,o.e.c),u}var parse_UncheckedRfX=parse_RfX,write_UncheckedRfX=write_RfX;function parse_Xnum(o){if(o.length-o.l<8)throw"XLS Xnum Buffer underflow";return o.read_shift(8,"f")}function write_Xnum(o,u){return(u||new_buf(8)).write_shift(8,o,"f")}function parse_BrtColor(o){var u={},T=o.read_shift(1),S=T>>>1,E=o.read_shift(1),C=o.read_shift(2,"i"),_=o.read_shift(1),P=o.read_shift(1),R=o.read_shift(1);switch(o.l++,S){case 0:u.auto=1;break;case 1:u.index=E;var I=XLSIcv[E];I&&(u.rgb=rgb2Hex(I));break;case 2:u.rgb=rgb2Hex([_,P,R]);break;case 3:u.theme=E;break}return C!=0&&(u.tint=C>0?C/32767:C/32768),u}function write_BrtColor(o,u){if(u||(u=new_buf(8)),!o||o.auto)return u.write_shift(4,0),u.write_shift(4,0),u;o.index!=null?(u.write_shift(1,2),u.write_shift(1,o.index)):o.theme!=null?(u.write_shift(1,6),u.write_shift(1,o.theme)):(u.write_shift(1,5),u.write_shift(1,0));var T=o.tint||0;if(T>0?T*=32767:T<0&&(T*=32768),u.write_shift(2,T),!o.rgb||o.theme!=null)u.write_shift(2,0),u.write_shift(1,0),u.write_shift(1,0);else{var S=o.rgb||"FFFFFF";typeof S=="number"&&(S=("000000"+S.toString(16)).slice(-6)),u.write_shift(1,parseInt(S.slice(0,2),16)),u.write_shift(1,parseInt(S.slice(2,4),16)),u.write_shift(1,parseInt(S.slice(4,6),16)),u.write_shift(1,255)}return u}function parse_FontFlags(o){var u=o.read_shift(1);o.l++;var T={fBold:u&1,fItalic:u&2,fUnderline:u&4,fStrikeout:u&8,fOutline:u&16,fShadow:u&32,fCondense:u&64,fExtend:u&128};return T}function write_FontFlags(o,u){u||(u=new_buf(2));var T=(o.italic?2:0)|(o.strike?8:0)|(o.outline?16:0)|(o.shadow?32:0)|(o.condense?64:0)|(o.extend?128:0);return u.write_shift(1,T),u.write_shift(1,0),u}function parse_ClipboardFormatOrString(o,u){var T={2:"BITMAP",3:"METAFILEPICT",8:"DIB",14:"ENHMETAFILE"},S=o.read_shift(4);switch(S){case 0:return"";case 4294967295:case 4294967294:return T[o.read_shift(4)]||""}if(S>400)throw new Error("Unsupported Clipboard: "+S.toString(16));return o.l-=4,o.read_shift(0,u==1?"lpstr":"lpwstr")}function parse_ClipboardFormatOrAnsiString(o){return parse_ClipboardFormatOrString(o,1)}function parse_ClipboardFormatOrUnicodeString(o){return parse_ClipboardFormatOrString(o,2)}var VT_I2=2,VT_I4=3,VT_BOOL=11,VT_VARIANT=12,VT_UI4=19,VT_FILETIME=64,VT_BLOB=65,VT_CF=71,VT_VECTOR_VARIANT=4108,VT_VECTOR_LPSTR=4126,VT_STRING=80,VT_USTR=81,VT_CUSTOM=[VT_STRING,VT_USTR],DocSummaryPIDDSI={1:{n:"CodePage",t:VT_I2},2:{n:"Category",t:VT_STRING},3:{n:"PresentationFormat",t:VT_STRING},4:{n:"ByteCount",t:VT_I4},5:{n:"LineCount",t:VT_I4},6:{n:"ParagraphCount",t:VT_I4},7:{n:"SlideCount",t:VT_I4},8:{n:"NoteCount",t:VT_I4},9:{n:"HiddenCount",t:VT_I4},10:{n:"MultimediaClipCount",t:VT_I4},11:{n:"ScaleCrop",t:VT_BOOL},12:{n:"HeadingPairs",t:VT_VECTOR_VARIANT},13:{n:"TitlesOfParts",t:VT_VECTOR_LPSTR},14:{n:"Manager",t:VT_STRING},15:{n:"Company",t:VT_STRING},16:{n:"LinksUpToDate",t:VT_BOOL},17:{n:"CharacterCount",t:VT_I4},19:{n:"SharedDoc",t:VT_BOOL},22:{n:"HyperlinksChanged",t:VT_BOOL},23:{n:"AppVersion",t:VT_I4,p:"version"},24:{n:"DigSig",t:VT_BLOB},26:{n:"ContentType",t:VT_STRING},27:{n:"ContentStatus",t:VT_STRING},28:{n:"Language",t:VT_STRING},29:{n:"Version",t:VT_STRING},255:{},2147483648:{n:"Locale",t:VT_UI4},2147483651:{n:"Behavior",t:VT_UI4},1919054434:{}},SummaryPIDSI={1:{n:"CodePage",t:VT_I2},2:{n:"Title",t:VT_STRING},3:{n:"Subject",t:VT_STRING},4:{n:"Author",t:VT_STRING},5:{n:"Keywords",t:VT_STRING},6:{n:"Comments",t:VT_STRING},7:{n:"Template",t:VT_STRING},8:{n:"LastAuthor",t:VT_STRING},9:{n:"RevNumber",t:VT_STRING},10:{n:"EditTime",t:VT_FILETIME},11:{n:"LastPrinted",t:VT_FILETIME},12:{n:"CreatedDate",t:VT_FILETIME},13:{n:"ModifiedDate",t:VT_FILETIME},14:{n:"PageCount",t:VT_I4},15:{n:"WordCount",t:VT_I4},16:{n:"CharCount",t:VT_I4},17:{n:"Thumbnail",t:VT_CF},18:{n:"Application",t:VT_STRING},19:{n:"DocSecurity",t:VT_I4},255:{},2147483648:{n:"Locale",t:VT_UI4},2147483651:{n:"Behavior",t:VT_UI4},1919054434:{}},CountryEnum={1:"US",2:"CA",3:"",7:"RU",20:"EG",30:"GR",31:"NL",32:"BE",33:"FR",34:"ES",36:"HU",39:"IT",41:"CH",43:"AT",44:"GB",45:"DK",46:"SE",47:"NO",48:"PL",49:"DE",52:"MX",55:"BR",61:"AU",64:"NZ",66:"TH",81:"JP",82:"KR",84:"VN",86:"CN",90:"TR",105:"JS",213:"DZ",216:"MA",218:"LY",351:"PT",354:"IS",358:"FI",420:"CZ",886:"TW",961:"LB",962:"JO",963:"SY",964:"IQ",965:"KW",966:"SA",971:"AE",972:"IL",974:"QA",981:"IR",65535:"US"},XLSFillPattern=[null,"solid","mediumGray","darkGray","lightGray","darkHorizontal","dar
219kVertical","darkDown","darkUp","darkGrid","darkTrellis","lightHorizontal","lightVertical","lightDown","lightUp","lightGrid","lightTrellis","gray125","gray0625"];function rgbify(o){return o.map(function(u){return[u>>16&255,u>>8&255,u&255]})}var _XLSIcv=rgbify([0,16777215,16711680,65280,255,16776960,16711935,65535,0,16777215,16711680,65280,255,16776960,16711935,65535,8388608,32768,128,8421376,8388736,32896,12632256,8421504,10066431,10040166,16777164,13434879,6684774,16744576,26316,13421823,128,16711935,16776960,65535,8388736,8388608,32896,255,52479,13434879,13434828,16777113,10079487,16751052,13408767,16764057,3368703,3394764,10079232,16763904,16750848,16737792,6710937,9868950,13158,3381606,13056,3355392,10040064,10040166,3355545,3355443,16777215,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),XLSIcv=dup(_XLSIcv),BErr={0:"#NULL!",7:"#DIV/0!",15:"#VALUE!",23:"#REF!",29:"#NAME?",36:"#NUM!",42:"#N/A",43:"#GETTING_DATA",255:"#WTF?"},RBErr={"#NULL!":0,"#DIV/0!":7,"#VALUE!":15,"#REF!":23,"#NAME?":29,"#NUM!":36,"#N/A":42,"#GETTING_DATA":43,"#WTF?":255},ct2type={"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml":"workbooks","application/vnd.ms-excel.sheet.macroEnabled.main+xml":"workbooks","application/vnd.ms-excel.sheet.binary.macroEnabled.main":"workbooks","application/vnd.ms-excel.addin.macroEnabled.main+xml":"workbooks","application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml":"workbooks","application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml":"sheets","application/vnd.ms-excel.worksheet":"sheets","application/vnd.ms-excel.binIndexWs":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml":"charts","application/vnd.ms-excel.chartsheet":"charts","application/vnd.ms-excel.macrosheet+xml":"macros","application/vnd.ms-excel.macrosheet":"macros","application/vnd.ms-excel.intlmacrosheet":"TODO","application/vnd.ms-excel.binIndexMs":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml":"dialogs","application/vnd.ms-excel.dialogsheet":"dialogs","application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml":"strs","application/vnd.ms-excel.sharedStrings":"strs","application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml":"styles","application/vnd.ms-excel.styles":"styles","application/vnd.openxmlformats-package.core-properties+xml":"coreprops","application/vnd.openxmlformats-officedocument.custom-properties+xml":"custprops","application/vnd.openxmlformats-officedocument.extended-properties+xml":"extprops","application/vnd.openxmlformats-officedocument.customXmlProperties+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.customProperty":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml":"comments","application/vnd.ms-excel.comments":"comments","application/vnd.ms-excel.threadedcomments+xml":"threadedcomments","application/vnd.ms-excel.person+xml":"people","application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml":"metadata","application/vnd.ms-excel.sheetMetadata":"metadata","application/vnd.ms-excel.pivotTable":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.chart+xml":"TODO","application/vnd.ms-office.chartcolorstyle+xml":"TODO","application/vnd.ms-office.chartstyle+xml":"TODO","application/vnd.ms-office.chartex+xml":"TODO","application/vnd.ms-excel.calcChain":"calcchains","application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml":"calcchains","application/vnd.openxmlformats-officedocument.spreadsheetml.printerSettings":"TODO","application/vnd.ms-office.activeX":"TODO","application/vnd.ms-office.activeX+xml":"TODO","application/vnd.ms-excel.attachedToolbars":"TODO","application/vnd.ms-excel.connections":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml":"TODO","application/vnd.ms-excel.externalLink":"links","application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml":"links","application/vnd.ms-excel.pivotCacheDefinition":"TODO","application/vnd.ms-excel.pivotCacheRecords":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml":"TODO","application/vnd.ms-excel.queryTable":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml":"TODO","application/vnd.ms-excel.userNames":"TODO","application/vnd.ms-excel.revisionHeaders":"TODO","application/vnd.ms-excel.revisionLog":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.userNames+xml":"TODO","application/vnd.ms-excel.tableSingleCells":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.tableSingleCells+xml":"TODO","application/vnd.ms-excel.slicer":"TODO","application/vnd.ms-excel.slicerCache":"TODO","application/vnd.ms-excel.slicer+xml":"TODO","application/vnd.ms-excel.slicerCache+xml":"TODO","application/vnd.ms-excel.wsSortMap":"TODO","application/vnd.ms-excel.table":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml":"TODO","application/vnd.openxmlformats-officedocument.theme+xml":"themes","application/vnd.openxmlformats-officedocument.themeOverride+xml":"TODO","application/vnd.ms-excel.Timeline+xml":"TODO","application/vnd.ms-excel.TimelineCache+xml":"TODO","application/vnd.ms-office.vbaProject":"vba","application/vnd.ms-office.vbaProjectSignature":"TODO","application/vnd.ms-office.volatileDependencies":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.volatileDependencies+xml":"TODO","application/vnd.ms-excel.controlproperties+xml":"TODO","application/vnd.openxmlformats-officedocument.model+data":"TODO","application/vnd.ms-excel.Survey+xml":"TODO","application/vnd.openxmlformats-officedocument.drawing+xml":"drawings","application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml":"TODO","application/vnd.openxmlformats-officedocument.vmlDrawing":"TODO","application/vnd.openxmlformats-package.relationships+xml":"rels","application/vnd.openxmlformats-officedocument.oleObject":"TODO","image/png":"TODO",sheet:"js"},CT_LIST={workbooks:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml",xlsm:"application/vnd.ms-excel.sheet.macroEnabled.main+xml",xlsb:"application/vnd.ms-excel.sheet.binary.macroEnabled.main",xlam:"application/vnd.ms-excel.addin.macroEnabled.main+xml",xltx:"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml"},strs:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml",xlsb:"application/vnd.ms-excel.sharedStrings"}
vendor: 2,390 bytes, line 219
219,comments:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml",xlsb:"application/vnd.ms-excel.comments"},sheets:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml",xlsb:"application/vnd.ms-excel.worksheet"},charts:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml",xlsb:"application/vnd.ms-excel.chartsheet"},dialogs:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml",xlsb:"application/vnd.ms-excel.dialogsheet"},macros:{xlsx:"application/vnd.ms-excel.macrosheet+xml",xlsb:"application/vnd.ms-excel.macrosheet"},metadata:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml",xlsb:"application/vnd.ms-excel.sheetMetadata"},styles:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml",xlsb:"application/vnd.ms-excel.styles"}};function new_ct(){return{workbooks:[],sheets:[],charts:[],dialogs:[],macros:[],rels:[],strs:[],comments:[],threadedcomments:[],links:[],coreprops:[],extprops:[],custprops:[],themes:[],styles:[],calcchains:[],vba:[],drawings:[],metadata:[],people:[],TODO:[],xmlns:""}}function parse_ct(o){var u=new_ct();if(!o||!o.match)return u;var T={};if((o.match(tagregex)||[]).forEach(function(S){var E=parsexmltag(S);switch(E[0].replace(nsregex,"<")){case"<?xml":break;case"<Types":u.xmlns=E["xmlns"+(E[0].match(/<(\w+):/)||["",""])[1]];break;case"<Default":T[E.Extension]=E.ContentType;break;case"<Override":u[ct2type[E.ContentType]]!==void 0&&u[ct2type[E.ContentType]].push(E.PartName);break}}),u.xmlns!==XMLNS.CT)throw new Error("Unknown Namespace: "+u.xmlns);return u.calcchain=u.calcchains.length>0?u.calcchains[0]:"",u.sst=u.strs.length>0?u.strs[0]:"",u.style=u.styles.length>0?u.styles[0]:"",u.defaults=T,delete u.calcchains,u}function write_ct(o,u){var T=evert_arr(ct2type),S=[],E;S[S.length]=XML_HEADER,S[S.length]=writextag("Types",null,{xmlns:XMLNS.CT,"xmlns:xsd":XMLNS.xsd,"xmlns:xsi":XMLNS.xsi}),S=S.concat([["xml","application/xml"],["bin","application/vnd.ms-excel.sheet.binary.macroEnabled.main"],["vml","application/vnd.openxmlformats-officedocument.vmlDrawing"],["data","application/vnd.openxmlformats-officedocument.model+data"],["bmp","image/bmp"],["png","image/png"],["gif","image/gif"],["emf","image/x-emf"],["wmf","image/x-wmf"],["jpg","image/jpeg"],["jpeg","image/jpeg"],["t
219if","image/tiff"],["tiff","image/tiff"],["pdf","application/pdf"],["rels","application/vnd.openxmlformats-package.relationships+xml"]].map(function(R){return writextag("Default",null,{Extension:R[0],ContentType:R[1]})}));var C=function(R){o[R]&&o[R].length>0&&(E=o[R][0],S[S.length]=writextag("Override",null,{PartName:(E[0]=="/"?"":"/")+E,ContentType:CT_LIST[R][u.bookType]||CT_LIST[R].xlsx}))},_=function(R){(o[R]||[]).forEach(function(I){S[S.length]=writextag("Override",null,{PartName:(I[0]=="/"?"":"/")+I,ContentType:CT_LIST[R][u.bookType]||CT_LIST[R].xlsx})})},P=function(R){(o[R]||[]).forEach(function(I){S[S.length]=writextag("Override",null,{PartName:(I[0]=="/"?"":"/")+I,ContentType:T[R][0]})})};return C("workbooks"),_("sheets"),_("charts"),P("themes"),["strs","styles"].forEach(C),["coreprops","extprops","custprops"].forEach(P),P("vba"),P("comments"),P("threadedcomments"),P("drawings"),_("metadata"),P("people"),S.length>2&&(S[S.length]="</Types>",S[1]=S[1].replace("/>",">")),S.join("")}var RELS
vendor: 2,399 bytes, line 219
219={WB:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",SHEET:"http://sheetjs.openxmlformats.org/officeDocument/2006/relationships/officeDocument",HLINK:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink",VML:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing",XPATH:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLinkPath",XMISS:"http://schemas.microsoft.com/office/2006/relationships/xlExternalLinkPath/xlPathMissing",XLINK:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLink",CXML:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml",CXMLP:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXmlProps",CMNT:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments",CORE_PROPS:"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties",EXT_PROPS:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties",CUST_PROPS:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties",SST:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings",STY:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles",THEME:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme",CHART:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart",CHARTEX:"http://schemas.microsoft.com/office/2014/relationships/chartEx",CS:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chartsheet",WS:["http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet","http://purl.oclc.org/ooxml/officeDocument/relationships/worksheet"],DS:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/dialogsheet",MS:"http://schemas.microsoft.com/office/2006/relationships/xlMacrosheet",IMG:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",DRAW:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing",XLMETA:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sheetMetadata",TCMNT:"http://schemas.microsoft.com/office/2017/10/relationships/threadedComment",PEOPLE:"http://schemas.microsoft.com/office/2017/10/relationships/person",
vendor: 17,696 bytes, lines 219-229
219VBA:"http://schemas.microsoft.com/office/2006/relationships/vbaProject"};function get_rels_path(o){var u=o.lastIndexOf("/");return o.slice(0,u+1)+"_rels/"+o.slice(u+1)+".rels"}function parse_rels(o,u){var T={"!id":{}};if(!o)return T;u.charAt(0)!=="/"&&(u="/"+u);var S={};return(o.match(tagregex)||[]).forEach(function(E){var C=parsexmltag(E);if(C[0]==="<Relationship"){var _={};_.Type=C.Type,_.Target=C.Target,_.Id=C.Id,C.TargetMode&&(_.TargetMode=C.TargetMode);var P=C.TargetMode==="External"?C.Target:resolve_path(C.Target,u);T[P]=_,S[C.Id]=_}}),T["!id"]=S,T}function write_rels(o){var u=[XML_HEADER,writextag("Relationships",null,{xmlns:XMLNS.RELS})];return keys(o["!id"]).forEach(function(T){u[u.length]=writextag("Relationship",null,o["!id"][T])}),u.length>2&&(u[u.length]="</Relationships>",u[1]=u[1].replace("/>",">")),u.join("")}function add_rels(o,u,T,S,E,C){if(E||(E={}),o["!id"]||(o["!id"]={}),o["!idx"]||(o["!idx"]=1),u<0)for(u=o["!idx"];o["!id"]["rId"+u];++u);if(o["!idx"]=u+1,E.Id="rId"+u,E.Type=S,E.Target=T,[RELS.HLINK,RELS.XPATH,RELS.XMISS].indexOf(E.Type)>-1&&(E.TargetMode="External"),o["!id"][E.Id])throw new Error("Cannot rewrite rId "+u);return o["!id"][E.Id]=E,o[("/"+E.Target).replace("//","/")]=E,u}var CT_ODS="application/vnd.oasis.opendocument.spreadsheet";function parse_manifest(o,u){for(var T=xlml_normalize(o),S,E;S=xlmlregex.exec(T);)switch(S[3]){case"manifest":break;case"file-entry":if(E=parsexmltag(S[0],!1),E.path=="/"&&E.type!==CT_ODS)throw new Error("This OpenDocument is not a spreadsheet");break;case"encryption-data":case"algorithm":case"start-key-generation":case"key-derivation":throw new Error("Unsupported ODS Encryption");default:if(u&&u.WTF)throw S}}function write_manifest(o){var u=[XML_HEADER];u.push(`<manifest:manifest xmlns:manifest="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0" manifest:version="1.2">
220`),u.push(`  <manifest:file-entry manifest:full-path="/" manifest:version="1.2" manifest:media-type="application/vnd.oasis.opendocument.spreadsheet"/>
221`);for(var T=0;T<o.length;++T)u.push('  <manifest:file-entry manifest:full-path="'+o[T][0]+'" manifest:media-type="'+o[T][1]+`"/>
222`);return u.push("</manifest:manifest>"),u.join("")}function write_rdf_type(o,u,T){return['  <rdf:Description rdf:about="'+o+`">
223`,'    <rdf:type rdf:resource="http://docs.oasis-open.org/ns/office/1.2/meta/'+(T||"odf")+"#"+u+`"/>
224`,`  </rdf:Description>
225`].join("")}function write_rdf_has(o,u){return['  <rdf:Description rdf:about="'+o+`">
226`,'    <ns0:hasPart xmlns:ns0="http://docs.oasis-open.org/ns/office/1.2/meta/pkg#" rdf:resource="'+u+`"/>
227`,`  </rdf:Description>
228`].join("")}function write_rdf(o){var u=[XML_HEADER];u.push(`<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
229`);for(var T=0;T!=o.length;++T)u.push(write_rdf_type(o[T][0],o[T][1])),u.push(write_rdf_has("",o[T][0]));return u.push(write_rdf_type("","Document","pkg")),u.push("</rdf:RDF>"),u.join("")}function write_meta_ods(){return'<office:document-meta xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xlink="http://www.w3.org/1999/xlink" office:version="1.2"><office:meta><meta:generator>SheetJS '+XLSX.version+"</meta:generator></office:meta></office:document-meta>"}var CORE_PROPS=[["cp:category","Category"],["cp:contentStatus","ContentStatus"],["cp:keywords","Keywords"],["cp:lastModifiedBy","LastAuthor"],["cp:lastPrinted","LastPrinted"],["cp:revision","RevNumber"],["cp:version","Version"],["dc:creator","Author"],["dc:description","Comments"],["dc:identifier","Identifier"],["dc:language","Language"],["dc:subject","Subject"],["dc:title","Title"],["dcterms:created","CreatedDate","date"],["dcterms:modified","ModifiedDate","date"]],CORE_PROPS_REGEX=function(){for(var o=new Array(CORE_PROPS.length),u=0;u<CORE_PROPS.length;++u){var T=CORE_PROPS[u],S="(?:"+T[0].slice(0,T[0].indexOf(":"))+":)"+T[0].slice(T[0].indexOf(":")+1);o[u]=new RegExp("<"+S+"[^>]*>([\\s\\S]*?)</"+S+">")}return o}();function parse_core_props(o){var u={};o=utf8read(o);for(var T=0;T<CORE_PROPS.length;++T){var S=CORE_PROPS[T],E=o.match(CORE_PROPS_REGEX[T]);E!=null&&E.length>0&&(u[S[1]]=unescapexml(E[1])),S[2]==="date"&&u[S[1]]&&(u[S[1]]=parseDate(u[S[1]]))}return u}function cp_doit(o,u,T,S,E){E[o]!=null||u==null||u===""||(E[o]=u,u=escapexml(u),S[S.length]=T?writextag(o,u,T):writetag(o,u))}function write_core_props(o,u){var T=u||{},S=[XML_HEADER,writextag("cp:coreProperties",null,{"xmlns:cp":XMLNS.CORE_PROPS,"xmlns:dc":XMLNS.dc,"xmlns:dcterms":XMLNS.dcterms,"xmlns:dcmitype":XMLNS.dcmitype,"xmlns:xsi":XMLNS.xsi})],E={};if(!o&&!T.Props)return S.join("");o&&(o.CreatedDate!=null&&cp_doit("dcterms:created",typeof o.CreatedDate=="string"?o.CreatedDate:write_w3cdtf(o.CreatedDate,T.WTF),{"xsi:type":"dcterms:W3CDTF"},S,E),o.ModifiedDate!=null&&cp_doit("dcterms:modified",typeof o.ModifiedDate=="string"?o.ModifiedDate:write_w3cdtf(o.ModifiedDate,T.WTF),{"xsi:type":"dcterms:W3CDTF"},S,E));for(var C=0;C!=CORE_PROPS.length;++C){var _=CORE_PROPS[C],P=T.Props&&T.Props[_[1]]!=null?T.Props[_[1]]:o?o[_[1]]:null;P===!0?P="1":P===!1?P="0":typeof P=="number"&&(P=String(P)),P!=null&&cp_doit(_[0],P,null,S,E)}return S.length>2&&(S[S.length]="</cp:coreProperties>",S[1]=S[1].replace("/>",">")),S.join("")}var EXT_PROPS=[["Application","Application","string"],["AppVersion","AppVersion","string"],["Company","Company","string"],["DocSecurity","DocSecurity","string"],["Manager","Manager","string"],["HyperlinksChanged","HyperlinksChanged","bool"],["SharedDoc","SharedDoc","bool"],["LinksUpToDate","LinksUpToDate","bool"],["ScaleCrop","ScaleCrop","bool"],["HeadingPairs","HeadingPairs","raw"],["TitlesOfParts","TitlesOfParts","raw"]],PseudoPropsPairs=["Worksheets","SheetNames","NamedRanges","DefinedNames","Chartsheets","ChartNames"];function load_props_pairs(o,u,T,S){var E=[];if(typeof o=="string")E=parseVector(o,S);else for(var C=0;C<o.length;++C)E=E.concat(o[C].map(function(L){return{v:L}}));var _=typeof u=="string"?parseVector(u,S).map(function(L){return L.v}):u,P=0,R=0;if(_.length>0)for(var I=0;I!==E.length;I+=2){switch(R=+E[I+1].v,E[I].v){case"Worksheets":case"工作表":case"Листы":case"أوراق العمل":case"ワークシート":case"גליונות עבודה":case"Arbeitsblätter":case"Çalışma Sayfaları":case"Feuilles de calcul":case"Fogli di lavoro":case"Folhas de cálculo":case"Planilhas":case"Regneark":case"Hojas de cálculo":case"Werkbladen":T.Worksheets=R,T.SheetNames=_.slice(P,P+R);break;case"Named Ranges":case"Rangos con nombre":case"名前付き一覧":case"Benannte Bereiche":case"Navngivne områder":T.NamedRanges=R,T.DefinedNames=_.slice(P,P+R);break;case"Charts":case"Diagramme":T.Chartsheets=R,T.ChartNames=_.slice(P,P+R);break}P+=R}}function parse_ext_props(o,u,T){var S={};return u||(u={}),o=utf8read(o),EXT_PROPS.forEach(function(E){var C=(o.match(matchtag(E[0]))||[])[1];switch(E[2]){case"string":C&&(u[E[1]]=unescapexml(C));break;case"bool":u[E[1]]=C==="true";break;case"raw":var _=o.match(new RegExp("<"+E[0]+"[^>]*>([\\s\\S]*?)</"+E[0]+">"));_&&_.length>0&&(S[E[1]]=_[1]);break}}),S.HeadingPairs&&S.TitlesOfParts&&load_props_pairs(S.HeadingPairs,S.TitlesOfParts,u,T),u}function write_ext_props(o){var u=[],T=writextag;return o||(o={}),o.Application="SheetJS",u[u.length]=XML_HEADER,u[u.length]=writextag("Properties",null,{xmlns:XMLNS.EXT_PROPS,"xmlns:vt":XMLNS.vt}),EXT_PROPS.forEach(function(S){if(o[S[1]]!==void 0){var E;switch(S[2]){case"string":E=escapexml(String(o[S[1]]));break;case"bool":E=o[S[1]]?"true":"false";break}E!==void 0&&(u[u.length]=T(S[0],E))}}),u[u.length]=T("HeadingPairs",T("vt:vector",T("vt:variant","<vt:lpstr>Worksheets</vt:lpstr>")+T("vt:variant",T("vt:i4",String(o.Worksheets))),{size:2,baseType:"variant"})),u[u.length]=T("TitlesOfParts",T("vt:vector",o.SheetNames.map(function(S){return"<vt:lpstr>"+escapexml(S)+"</vt:lpstr>"}).join(""),{size:o.Worksheets,baseType:"lpstr"})),u.length>2&&(u[u.length]="</Properties>",u[1]=u[1].replace("/>",">")),u.join("")}var custregex=/<[^>]+>[^<]*/g;function parse_cust_props(o,u){var T={},S="",E=o.match(custregex);if(E)for(var C=0;C!=E.length;++C){var _=E[C],P=parsexmltag(_);switch(P[0]){case"<?xml":break;case"<Properties":break;case"<property":S=unescapexml(P.name);break;case"</property>":S=null;break;default:if(_.indexOf("<vt:")===0){var R=_.split(">"),I=R[0].slice(4),L=R[1];switch(I){case"lpstr":case"bstr":case"lpwstr":T[S]=unescapexml(L);break;case"bool":T[S]=parsexmlbool(L);break;case"i1":case"i2":case"i4":case"i8":case"int":case"uint":T[S]=parseInt(L,10);break;case"r4":case"r8":case"decimal":T[S]=parseFloat(L);break;case"filetime":case"date":T[S]=parseDate(L);break;case"cy":case"error":T[S]=unescapexml(L);break;default:if(I.slice(-1)=="/")break;u.WTF&&typeof console<"u"&&console.warn("Unexpected",_,I,R)}}else if(_.slice(0,2)!=="</"){if(u.WTF)throw new Error(_)}}}return T}function write_cust_props(o){var u=[XML_HEADER,writextag("Properties",null,{xmlns:XMLNS.CUST_PROPS,"xmlns:vt":XMLNS.vt})];if(!o)return u.join("");var T=1;return keys(o).forEach(function(E){++T,u[u.length]=writextag("property",write_vt(o[E]),{fmtid:"{D5CDD505-2E9C-101B-9397-08002B2CF9AE}",pid:T,name:escapexml(E)})}),u.length>2&&(u[u.length]="</Properties>",u[1]=u[1].replace("/>",">")),u.join("")}var XLMLDocPropsMap={Title:"Title",Subject:"Subject",Author:"Author",Keywords:"Keywords",Comments:"Description",LastAuthor:"LastAuthor",RevNumber:"Revision",Application:"AppName",LastPrinted:"LastPrinted",CreatedDate:"Created",ModifiedDate:"LastSaved",Category:"Category",Manager:"Manager",Company:"Company",AppVersion:"Version",ContentStatus:"ContentStatus",Identifier:"Identifier",Language:"Language"},evert_XLMLDPM;function xlml_set_prop(o,u,T){evert_XLMLDPM||(evert_XLMLDPM=evert(XLMLDocPropsMap)),u=evert_XLMLDPM[u]||u,o[u]=T}function xlml_write_docprops(o,u){var T=[];return keys(XLMLDocPropsMap).map(function(S){for(var E=0;E<CORE_PROPS.length;++E)if(CORE_PROPS[E][1]==S)return CORE_PROPS[E];for(E=0;E<EXT_PROPS.length;++E)if(EXT_PROPS[E][1]==S)return EXT_PROPS[E];throw S}).forEach(function(S){if(o[S[1]]!=null){var E=u&&u.Props&&u.Props[S[1]]!=null?u.Props[S[1]]:o[S[1]];switch(S[2]){case"date":E=new Date(E).toISOString().replace(/\.\d*Z/,"Z");break}typeof E=="number"?E=String(E):E===!0||E===!1?E=E?"1":"0":E instanceof Date&&(E=new Date(E).toISOString().replace(/\.\d*Z/,"")),T.push(writetag(XLMLDocPropsMap[S[1]]||S[1],E))}}),writextag("DocumentProperties",T.join(""),{xmlns:XLMLNS.o})}function xlml_write_custprops(o,u){var T=["Worksheets","SheetNames"],S="CustomDocumentProperties",E=[];return o&&keys(o).forEach(function(C){if(Object.prototype.hasOwnProperty.call(o,C)){for(var _=0;_<CORE_PROPS.length;++_)if(C==CORE_PROPS[_][1])return;for(_=0;_<EXT_PROPS.length;++_)if(C==EXT_PROPS[_][1])return;for(_=0;_<T.length;++_)if(C==T[_])return;var P=o[C],R="string";typeof P=="number"?(R="float",P=String(P)):P===!0||P===!1?(R="boolean",P=P?"1":"0"):P=String(P),E.push(writextag(escapexmltag(C),P,{"dt:dt":R}))}}),u&&keys(u).forEach(function(C){if(Object.prototype.hasOwnProperty.call(u,C)&&!(o&&Object.prototype.hasOwnProperty.call(o,C))){var _=u[C],P="string";typeof _=="number"?(P="float",_=String(_)):_===!0||_===!1?(P="boolean",_=_?"1":"0"):_ instanceof Date?(P="dateTime.tz",_=_.toISOString()):_=String(_),E.push(writextag(escapexmltag(C),_,{"dt:dt":P}))}}),"<"+S+' xmlns="'+XLMLNS.o+'">'+E.join("")+"</"+S+">"}function parse_FILETIME(o){var u=o.read_shift(4),T=o.read_shift(4);return new Date((T/1e7*Math.pow(2,32)+u/1e7-11644473600)*1e3).toISOString().replace(/\.000/,"")}function write_FILETIME(o){var u=typeof o=="string"?new Date(Date.parse(o)):o,T=u.getTime()/1e3+11644473600,S=T%Math.pow(2,32),E=(T-S)/Math.pow(2,32);S*=1e7,E*=1e7;var C=S/Math.pow(2,32)|0;C>0&&(S=S%Math.pow(2,32),E+=C);var _=new_buf(8);return _.write_shift(4,S),_.write_shift(4,E),_}function parse_lpstr(o,u,T){var S=o.l,E=o.read_shift(0,"lpstr-cp");if(T)for(;o.l-S&3;)++o.l;return E}function parse_lpwstr(o,u,T){var S=o.read_shift(0,"lpwstr");return S}function parse_VtStringBase(o,u,T){return u===31?parse_lpwstr(o):parse_lpstr(o,u,T)}function parse_VtString(o,u,T){return parse_VtStringBase(o,u,T===!1?0:4)}function parse_VtUnalignedString(o,u){if(!u)throw new Error("VtUnalignedString must have positive length");return parse_VtStringBase(o,u,0)}function parse_VtVecLpwstrValue(o){for(var u=o.read_shift(4),T=[],S=0;S!=u;++S){var E=o.l;T[S]=o.read_shift(0,"lpwstr").replace(chr0,""),o.l-E&2&&(o.l+=2)}return T}function parse_VtVecUnalignedLpstrValue(o){for(var u=o.read_shift(4),T=[],S=0;S!=u;++S)T[S]=o.read_shift(0,"lpstr-cp").replace(chr0,"");return T}function parse_VtHeadingPair(o){var u=o.l,T=parse_TypedPropertyValue(o,VT_USTR);o[o.l]==0&&o[o.l+1]==0&&o.l-u&2&&(o.l+=2);var S=parse_TypedPropertyValue(o,VT_I4);return[T,S]}function parse_VtVecHeadingPairValue(o){for(var u=o.read_shift(4),T=[],S=0;S<u/2;++S)T.push(parse_VtHeadingPair(o));return T}function parse_dictionary(o,u){for(var T=o.read_shift(4),S={},E=0;E!=T;++E){var C=o.read_shift(4),_=o.read_shift(4);S[C]=o.read_shift(_,u===1200?"utf16le":"utf8").replace(chr0,"").replace(chr1,"!"),u===1200&&_%2&&(o.l+=2)}return o.l&3&&(o.l=o.l>>3<<2),S}function parse_BLOB(o){var u=o.read_shift(4),T=o.slice(o.l,o.l+u);return o.l+=u,(u&3)>0&&(o.l+=4-(u&3)&3),T}function parse_ClipboardData(o){var u={};return u.Size=o.read_shift(4),o.l+=u.Size+3-(u.Size-1)%4,u}function parse_TypedPropertyValue(o,u,T){var S=o.read_shift(2),E,C=T||{};if(o.l+=2,u!==VT_VARIANT&&S!==u&&VT_CUSTOM.indexOf(u)===-1&&!((u&65534)==4126&&(S&65534)==4126))throw new Error("Expected type "+u+" saw "+S);switch(u===VT_VARIANT?S:u){case 2:return E=o.read_shift(2,"i"),C.raw||(o.l+=2),E;case 3:return E=o.read_shift(4,"i"),E;case 11:return o.read_shift(4)!==0;case 19:return E=o.read_shift(4),E;case 30:return parse_lpstr(o,S,4).replace(chr0,"");case 31:return parse_lpwstr(o);case 64:return parse_FILETIME(o);case 65:return parse_BLOB(o);case 71:return parse_ClipboardData(o);case 80:return parse_VtString(o,S,!C.raw).replace(chr0,"");case 81:return parse_VtUnalignedString(o,S).replace(chr0,"");case 4108:return parse_VtVecHeadingPairValue(o);case 4126:case 4127:return S==4127?parse_VtVecLpwstrValue(o):parse_VtVecUnalignedLpstrValue(o);default:throw new Error("TypedPropertyValue unrecognized type "+u+" "+S)}}function write_TypedPropertyValue(o,u){var T=new_buf(4),S=new_buf(4);switch(T.write_shift(4,o==80?31:o),o){case 3:S.write_shift(-4,u);break;case 5:S=new_buf(8),S.write_shift(8,u,"f");break;case 11:S.write_shift(4,u?1:0);break;case 64:S=write_FILETIME(u);break;case 31:case 80:for(S=new_buf(4+2*(u.length+1)+(u.length%2?0:2)),S.write_shift(4,u.length+1),S.write_shift(0,u,"dbcs");S.l!=S.length;)S.write_shift(1,0);break;default:throw new Error("TypedPropertyValue unrecognized type "+o+" "+u)}return bconcat([T,S])}function parse_PropertySet(o,u){var T=o.l,S=o.read_shift(4),E=o.read_shift(4),C=[],_=0,P=0,R=-1,I={};for(_=0;_!=E;++_){var L=o.read_shift(4),j=o.read_shift(4);C[_]=[L,j+T]}C.sort(function(H,O){return H[1]-O[1]});var M={};for(_=0;_!=E;++_){if(o.l!==C[_][1]){var D=!0;if(_>0&&u)switch(u[C[_-1][0]].t){case 2:o.l+2===C[_][1]&&(o.l+=2,D=!1);break;case 80:o.l<=C[_][1]&&(o.l=C[_][1],D=!1);break;case 4108:o.l<=C[_][1]&&(o.l=C[_][1],D=!1);break}if((!u||_==0)&&o.l<=C[_][1]&&(D=!1,o.l=C[_][1]),D)throw new Error("Read Error: Expected address "+C[_][1]+" at "+o.l+" :"+_)}if(u){var F=u[C[_][0]];if(M[F.n]=parse_TypedPropertyValue(o,F.t,{raw:!0}),F.p==="version"&&(M[F.n]=String(M[F.n]>>16)+"."+("0000"+String(M[F.n]&65535)).slice(-4)),F.n=="CodePage")switch(M[F.n]){case 0:M[F.n]=1252;case 874:case 932:case 936:case 949:case 950:case 1250:case 1251:case 1253:case 1254:case 1255:case 1256:case 1257:case 1258:case 1e4:case 1200:case 1201:case 1252:case 65e3:case-536:case 65001:case-535:set_cp(P=M[F.n]>>>0&65535);break;default:throw new Error("Unsupported CodePage: "+M[F.n])}}else if(C[_][0]===1){if(P=M.CodePage=parse_TypedPropertyValue(o,VT_I2),set_cp(P),R!==-1){var N=o.l;o.l=C[R][1],I=parse_dictionary(o,P),o.l=N}}else if(C[_][0]===0){if(P===0){R=_,o.l=C[_+1][1];continue}I=parse_dictionary(o,P)}else{var G=I[C[_][0]],B;switch(o[o.l]){case 65:o.l+=4,B=parse_BLOB(o);break;case 30:o.l+=4,B=parse_VtString(o,o[o.l-4]).replace(/\u0000+$/,"");break;case 31:o.l+=4,B=parse_VtString(o,o[o.l-4]).replace(/\u0000+$/,"");break;case 3:o.l+=4,B=o.read_shift(4,"i");break;case 19:o.l+=4,B=o.read_shift(4);break;case 5:o.l+=4,B=o.read_shift(8,"f");break;case 11:o.l+=4,B=parsebool(o,4);break;case 64:o.l+=4,B=parseDate(parse_FILETIME(o));break;default:throw new Error("unparsed value: "+o[o.l])}M[G]=B}}return o.l=T+S,M}var XLSPSSkip=["CodePage","Thumbnail","_PID_LINKBASE","_PID_HLINKS","SystemIdentifier","FMTID"];function guess_property_type(o){switch(typeof o){case"boolean":return 11;case"number":return(o|0)==o?3:5;case"string":return 31;case"object":if(o instanceof Date)return 64;break}return-1}function write_PropertySet(o,u,T){var S=new_buf(8),E=[],C=[],_=8,P=0,R=new_buf(8),I=new_buf(8);if(R.write_shift(4,2),R.write_shift(4,1200),I.write_shift(4,1),C.push(R),E.push(I),_+=8+R.length,!u){I=new_buf(8),I.write_shift(4,0),E.unshift(I);var L=[new_buf(4)];for(L[0].write_shift(4,o.length),P=0;P<o.length;++P){var j=o[P][0];for(R=new_buf(8+2*(j.length+1)+(j.length%2?0:2)),R.write_shift(4,P+2),R.write_shift(4,j.length+1),R.write_shift(0,j,"dbcs");R.l!=R.length;)R.write_shift(1,0);L.push(R)}R=bconcat(L),C.unshift(R),_+=8+R.length}for(P=0;P<o.length;++P)if(!(u&&!u[o[P][0]])&&!(XLSPSSkip.indexOf(o[P][0])>-1||PseudoPropsPairs.indexOf(o[P][0])>-1)&&o[P][1]!=null){var M=o[P][1],D=0;if(u){D=+u[o[P][0]];var F=T[D];
229if(F.p=="version"&&typeof M=="string"){var N=M.split(".");M=(+N[0]<<16)+(+N[1]||0)}R=write_TypedPropertyValue(F.t,M)}else{var G=guess_property_type(M);G==-1&&(G=31,M=String(M)),R=write_TypedPropertyValue(G,M)}C.push(R),I=new_buf(8),I.write_shift(4,u?D:2+P),E.push(I),_+=8+R.length}var B=8*(C.length+1);for(P=0;P<C.length;++P)E[P].write_shift(4,B),B+=C[P].length;return S.write_shift(4,_),S.write_shift(4,C.length),bconcat([S].concat(E).concat(C))}function parse_PropertySetStream(o,u,T){var S=o.content;if(!S)return{};prep_blob(S,0);var E,C,_,P,R=0;S.chk("feff","Byte Order: "),S.read_shift(2);var I=S.read_shift(4),L=S.read_shift(16);if(L!==CFB.utils.consts.HEADER_CLSID&&L!==T)throw new Error("Bad PropertySet CLSID "+L);if(E=S.read_shift(4),E!==1&&E!==2)throw new Error("Unrecognized #Sets: "+E);if(C=S.read_shift(16),P=S.read_shift(4),E===1&&P!==S.l)throw new Error("Length mismatch: "+P+" !== "+S.l);E===2&&(_=S.read_shift(16),R=S.read_shift(4));var j=parse_PropertySet(S,u),M={SystemIdentifier:I};for(var D in j)M[D]=j[D];if(M.FMTID=C,E===1)return M;if(R-S.l==2&&(S.l+=2),S.l!==R)throw new Error("Length mismatch 2: "+S.l+" !== "+R
vendor: 5,789 bytes, line 229
229);var F;try{F=parse_PropertySet(S,null)}catch{}for(D in F)M[D]=F[D];return M.FMTID=[C,_],M}function write_PropertySetStream(o,u,T,S,E,C){var _=new_buf(E?68:48),P=[_];_.write_shift(2,65534),_.write_shift(2,0),_.write_shift(4,842412599),_.write_shift(16,CFB.utils.consts.HEADER_CLSID,"hex"),_.write_shift(4,E?2:1),_.write_shift(16,u,"hex"),_.write_shift(4,E?68:48);var R=write_PropertySet(o,T,S);if(P.push(R),E){var I=write_PropertySet(E,null,null);_.write_shift(16,C,"hex"),_.write_shift(4,68+R.length),P.push(I)}return bconcat(P)}function parsenoop2(o,u){return o.read_shift(u),null}function writezeroes(o,u){u||(u=new_buf(o));for(var T=0;T<o;++T)u.write_shift(1,0);return u}function parslurp(o,u,T){for(var S=[],E=o.l+u;o.l<E;)S.push(T(o,E-o.l));if(E!==o.l)throw new Error("Slurp error");return S}function parsebool(o,u){return o.read_shift(u)===1}function writebool(o,u){return u||(u=new_buf(2)),u.write_shift(2,+!!o),u}function parseuint16(o){return o.read_shift(2,"u")}function writeuint16(o,u){return u||(u=new_buf(2)),u.write_shift(2,o),u}function parseuint16a(o,u){return parslurp(o,u,parseuint16)}function parse_Bes(o){var u=o.read_shift(1),T=o.read_shift(1);return T===1?u:u===1}function write_Bes(o,u,T){return T||(T=new_buf(2)),T.write_shift(1,u=="e"?+o:+!!o),T.write_shift(1,u=="e"?1:0),T}function parse_ShortXLUnicodeString(o,u,T){var S=o.read_shift(T&&T.biff>=12?2:1),E="sbcs-cont",C=current_codepage;if(T&&T.biff>=8&&(current_codepage=1200),!T||T.biff==8){var _=o.read_shift(1);_&&(E="dbcs-cont")}else T.biff==12&&(E="wstr");T.biff>=2&&T.biff<=5&&(E="cpstr");var P=S?o.read_shift(S,E):"";return current_codepage=C,P}function parse_XLUnicodeRichExtendedString(o){var u=current_codepage;current_codepage=1200;var T=o.read_shift(2),S=o.read_shift(1),E=S&4,C=S&8,_=1+(S&1),P=0,R,I={};C&&(P=o.read_shift(2)),E&&(R=o.read_shift(4));var L=_==2?"dbcs-cont":"sbcs-cont",j=T===0?"":o.read_shift(T,L);return C&&(o.l+=4*P),E&&(o.l+=R),I.t=j,C||(I.raw="<t>"+I.t+"</t>",I.r=I.t),current_codepage=u,I}function write_XLUnicodeRichExtendedString(o){var u=o.t||"",T=new_buf(3);T.write_shift(2,u.length),T.write_shift(1,1);var S=new_buf(2*u.length);S.write_shift(2*u.length,u,"utf16le");var E=[T,S];return bconcat(E)}function parse_XLUnicodeStringNoCch(o,u,T){var S;if(T){if(T.biff>=2&&T.biff<=5)return o.read_shift(u,"cpstr");if(T.biff>=12)return o.read_shift(u,"dbcs-cont")}var E=o.read_shift(1);return E===0?S=o.read_shift(u,"sbcs-cont"):S=o.read_shift(u,"dbcs-cont"),S}function parse_XLUnicodeString(o,u,T){var S=o.read_shift(T&&T.biff==2?1:2);return S===0?(o.l++,""):parse_XLUnicodeStringNoCch(o,S,T)}function parse_XLUnicodeString2(o,u,T){if(T.biff>5)return parse_XLUnicodeString(o,u,T);var S=o.read_shift(1);return S===0?(o.l++,""):o.read_shift(S,T.biff<=4||!o.lens?"cpstr":"sbcs-cont")}function write_XLUnicodeString(o,u,T){return T||(T=new_buf(3+2*o.length)),T.write_shift(2,o.length),T.write_shift(1,1),T.write_shift(31,o,"utf16le"),T}function parse_ControlInfo(o){var u=o.read_shift(1);o.l++;var T=o.read_shift(2);return o.l+=2,[u,T]}function parse_URLMoniker(o){var u=o.read_shift(4),T=o.l,S=!1;u>24&&(o.l+=u-24,o.read_shift(16)==="795881f43b1d7f48af2c825dc4852763"&&(S=!0),o.l=T);var E=o.read_shift((S?u-24:u)>>1,"utf16le").replace(chr0,"");return S&&(o.l+=24),E}function parse_FileMoniker(o){for(var u=o.read_shift(2),T="";u-- >0;)T+="../";var S=o.read_shift(0,"lpstr-ansi");if(o.l+=2,o.read_shift(2)!=57005)throw new Error("Bad FileMoniker");var E=o.read_shift(4);if(E===0)return T+S.replace(/\\/g,"/");var C=o.read_shift(4);if(o.read_shift(2)!=3)throw new Error("Bad FileMoniker");var _=o.read_shift(C>>1,"utf16le").replace(chr0,"");return T+_}function parse_HyperlinkMoniker(o,u){var T=o.read_shift(16);switch(T){case"e0c9ea79f9bace118c8200aa004ba90b":return parse_URLMoniker(o);case"0303000000000000c000000000000046":return parse_FileMoniker(o);default:throw new Error("Unsupported Moniker "+T)}}function parse_HyperlinkString(o){var u=o.read_shift(4),T=u>0?o.read_shift(u,"utf16le").replace(chr0,""):"";return T}function write_HyperlinkString(o,u){u||(u=new_buf(6+o.length*2)),u.write_shift(4,1+o.length);for(var T=0;T<o.length;++T)u.write_shift(2,o.charCodeAt(T));return u.write_shift(2,0),u}function parse_Hyperlink(o,u){var T=o.l+u,S=o.read_shift(4);if(S!==2)throw new Error("Unrecognized streamVersion: "+S);var E=o.read_shift(2);o.l+=2;var C,_,P,R,I="",L,j;E&16&&(C=parse_HyperlinkString(o,T-o.l)),E&128&&(_=parse_HyperlinkString(o,T-o.l)),(E&257)===257&&(P=parse_HyperlinkString(o,T-o.l)),(E&257)===1&&(R=parse_HyperlinkMoniker(o,T-o.l)),E&8&&(I=parse_HyperlinkString(o,T-o.l)),E&32&&(L=o.read_shift(16)),E&64&&(j=parse_FILETIME(o)),o.l=T;var M=_||P||R||"";M&&I&&(M+="#"+I),M||(M="#"+I),E&2&&M.charAt(0)=="/"&&M.charAt(1)!="/"&&(M="file://"+M);var D={Target:M};return L&&(D.guid=L),j&&(D.time=j),C&&(D.Tooltip=C),D}function write_Hyperlink(o){var u=new_buf(512),T=0,S=o.Target;S.slice(0,7)=="file://"&&(S=S.slice(7));var E=S.indexOf("#"),C=E>-1?31:23;switch(S.charAt(0)){case"#":C=28;break;case".":C&=-3;break}u.write_shift(4,2),u.write_shift(4,C);var _=[8,6815827,6619237,4849780,83];for(T=0;T<_.length;++T)u.write_shift(4,_[T]);if(C==28)S=S.slice(1),write_HyperlinkString(S,u);else if(C&2){for(_="e0 c9 ea 79 f9 ba ce 11 8c 82 00 aa 00 4b a9 0b".split(" "),T=0;T<_.length;++T)u.write_shift(1,parseInt(_[T],16));var P=E>-1?S.slice(0,E):S;for(u.write_shift(4,2*(P.length+1)),T=0;T<P.length;++T)u.write_shift(2,P.charCodeAt(T));u.write_shift(2,0),C&8&&write_HyperlinkString(E>-1?S.slice(E+1):"",u)}else{for(_="03 03 00 00 00 00 00 00 c0 00 00 00 00 00 00 46".split(" "),T=0;T<_.length;++T)u.write_shift(1,parseInt(_[T],16));for(var R=0;S.slice(R*3,R*3+3)=="../"||S.slice(R*3,R*3+3)=="..\\";)++R;for(u.write_shift(2,R),u.write_shift(4,S.length-3*R+1),T=0;T<S.length-3*R;
229++T)u.write_shift(1,S.charCodeAt(T+3*R)&255);for(u.write_shift(1,0),u.write_shift(2,65535),u.write_shift(2,57005),T=0;T<6;++T)u.write_shift(4,0)}return u.slice(0,u.l)}function parse_LongRGBA(o){var u=o.read_shift(1),T=o.read_shift(1),S=o.read_shift(1),E=o.read_shift(1);return[u,T,S,E]}function parse_LongRGB(o,u){var T=parse_LongRGBA(o);return T[3]=0,T}function parse_XLSCell(o){var u=o.read_shift(2),T=o.read_shift(2),S=o.read_shift(2);return{r:u,c:T,ixfe:S}}function write_XLSCell(o,u,T,S){return S||(S=new_buf(6)),S.write_shift(2,o),S.write_shift(2,u),S.write_shift(2,T||0),S}function parse_frtHeader(o){var u=o.read_shift(2),T=o.read_shift(2);return o.l+=8,{type:u,flags:T}}function parse_OptXLUnicodeString(o,u,T){return u===0?"":parse_XLUnicodeString2(o,u,T)}function parse_XTI(o,u,T){var S=T.biff>8?4:2,E=o.read_shift(S),C=o.read_shift(S,"i"),_=o.read_shift(S,"i");return[E,C,_]}function parse_RkRec(o){var u=o.read_shift(2),T=parse_RkNumber(o);return[u,T]}function parse_AddinUdf(o,u,T){o.l+=4,u-=4;var S=o.l+u,E=parse_ShortXLUnicodeString(o,u,T),C=o.read_shift(2);if(S-=o.l,C!==S)throw new Error("Malformed AddinUdf: padding = "+S+" != "+C);return o.l+=C,E}function parse_Ref8U(o){var u=o.read_shift(2),T=o.read_shift(2),S=o.read_shift(2),E=o.read_shift(2);return{s:{c:S,r:u},e:{c:E,r:T}}}function write_Ref8U(o,u){return u||(u=new_buf(8)),u.write_shift(2,o.s.r),u.write_shift(2,o.e.r),u.write_shift(2,o.s.c),u.write_shift(2,o.e.c),u}function parse_RefU(o){var u=o.read_shift(2),T=o.read_shift(2),S=o.read_shift(1),E=o.read_shift(1);return{s:{c:S,r:u},e:{c:E,r:T}}}var parse_Ref=parse_RefU;function parse_FtCmo(o){o.l+=4;var u=o.read_shift(2),T=o.read_shift(2),S=o.read_shift(2);return o.l+=12,[T,u,S]}function parse_FtNts(o){var u={};return o.l+=4,o.l+=16,u.fSharedNote=o.read_shift(2),o.l+=4,u}function parse_FtCf(o){var u={};return o.l+=4,o.cf=o.read_shift(2),u}function parse_FtSkip(o){o.l+=2,o.l+=o.read_shift(2)}var FtTab={0:parse_FtSkip,4:parse_FtSkip,5:parse_FtSkip,6:parse_FtSkip,7:parse_FtCf,8:parse_FtSkip,9:parse_FtSkip,10:parse_FtSkip,11:parse_FtSkip,12:parse_FtSkip,13:parse_FtNts,14:parse_FtSkip,15:parse_FtSkip,16:parse_FtSkip,17:parse_FtSkip,18:parse_FtSkip,19:parse_FtSkip,20:parse_FtSkip,21:parse_FtCmo};function parse_FtArray(o,u){for(var T=o.l+u,S=[];o.l<T;){var E=o.read_shift(2);o.l-=2;try{S.push(FtTab[E](o,T-o.l))}catch{return o.l=T,S}}return o.l!=T&&(o.l=T),S}function parse_BOF(o,u){var T={BIFFVer:0,dt:0};switch(T.BIFFVer=o.read_shift(2),u-=2,u>=2&&(T.dt=o.read_shift(2),o.l-=2),T.BIFFVer){case 1536:case 1280:case 1024:case 768:case 512:case 2:case 7:break;default:if(u>6)throw new Error("Unexpected BIFF Ver "+T.BIFFVer)}return o.read_shift(u),T}function write_BOF(o,u,T){var S=1536,E=16;switch(T.bookType){case"biff8":break;case"biff5":S=1280,E=8;break;case"biff4":S=4,E=6;break;case"biff3":S=3,E=6;break;case"biff2":S=2,E=4;break;case"xla":break;default:throw new Error("unsupported BIFF version")}var C=new_buf(E);return C.write_shift(2,S),C.write_shift(2,u),E>4&&C.write_shift(2,29282),E>6&&C.write_shift(2,1997),E>8&&(C.write_shift(2,49161),C.write_shift(2,1),C.write_shift(2,1798),C.write_shift(2,0)),C}function parse_InterfaceHdr(o,u){return u===0||o.read_shift(2),1200}function parse_WriteAccess(o,u,T){if(T.enc)return o.l+=u,"";var S=o.l,E=parse_XLUnicodeString2(o,0,T);return o.read_shift(u+S-o.l),E}function write_WriteAccess(o,u){var T=!u||u.biff==8,S=new_buf(T?112:54);for(S.write_shift(u.biff==8?2:1,7),T&&S.write_shift(1,0),S.write_shift(4,859007059),S.write_shift(4,5458548|(T?0:536870912));S.l<S.length;)S.write_shift(1,T?0:32);return S}function parse_WsBool(o,u,T){var S=T&&T.biff==8||u==2?o.read_shift(2):(o.l+=u,0);return{fDialog:S&16,fBelow:S&64,fRight:S&128}}function parse_BoundSheet8(o,u,T){var S=o.read_shift(4),E=o.read_shift(1)&3,C=o.read_shift(1);switch(C){case 0:C="Worksheet";break;case 1:C="Macrosheet";break;case 2:C="Chartsheet";break;case 6:C="VBAModule";break}var _=parse_ShortXLUnicodeString(o,0,T);return _.length===0&&(_="Sheet1"),{pos:S,hs:E,dt:C,name:_}}function write_BoundSheet8(o,u){var T=!u||u.biff>=8?2:1,S=new_buf(8+T*o.name.length);S.write_shift(4,o.pos),S.write_shift(1,o.hs||0),S.write_shift(1,o.dt),S.write_shift(1,o.name.length),u.biff>=8&&S.write_shift(1,1),S.write_shift(T*o.name.length,o.name,u.biff<8?"sbcs":"utf16le");var E=S.slice(0,S.l);return E.l=S.l,E}function parse_SST(o,u){for(var T=o.l+u,S=o.read_shift(4),E=o.read_shift(4),C=[],_=0;_!=E&&o.l<T;++_)C.push(parse_XLUnicodeRichExtendedString(o));return C.Count=S,C.Unique=E,C}function write_SST(o,u){var T=new_buf(8);T.write_shift(4,o.Count),T.write_shift(4,o.Unique);for(var S=[],E=0;E<o.length;++E)S[E]=write_XLUnicodeRichExtendedString(o[E]);var C=bconcat([T].concat(S));return C.parts=[T.length].concat(S.map(function(_){return _.length})),C}function parse_ExtSST(o,u){var T={};return T.dsst=o.read_shift(2),o.l+=u-2,T}function parse_Row(o){var u={};u.r=o.read_shift(2),u.c=o.read_shift(2),u.cnt=o.read_shift(2)-u.c;var T=o.read_shift(2);o.l+=4;var S=o.read_shift(1);return o.l+=3,S&7&&(u.level=S&7),S&32&&(u.hidden=!0),S&64&&(u.hpt=T/20),u}function parse_ForceFullCalculation(o){var u=parse_frtHeader(o);if(u.type!=2211)throw new Error("Invalid Future Record "+u.type);var T=o.read_shift(4);return T!==0}function parse_RecalcId(o){return o.read_shift(2),o.read_shift(4)}function parse_DefaultRowHeight(o,u,T){var S=0;T&&T.biff==2||(S=o.read_shift(2));var E=o.read_shift(2);T&&T.biff==2&&(S=1-(E>>15),E&=32767);var C={Unsynced:S&1,DyZero:(S&2)>>1,ExAsc:(S&4)>>2,ExDsc:(S&8)>>3};return[C,E]}function parse_Window1(o){var u=o.read_shift(2),T=o.read_shift(2),S=o.read_shift(2),E=o.read_shift(2),C=o.read_shift(2),_=o.read_shift(2),P=o.read_shift(2),R=o.read_shift(2),I=o.read_shift(2);return{Pos:[u,T],Dim:[S,E],Flags:C,CurTab:_,FirstTab:P,Selected:R,TabRatio:I}}function write_Window1(){var o=new_buf(18);return o.write_shift(2,0),o.write_shift(2,0),o.write_shift(2,29280),o.write_shift(2,17600),o.write_shift(2,56),o.write_shift(2,0),o.write_shift(2,0),o.write_shift(2,1),o.write_shift(2,500),o}
vendor: 6,504 bytes, line 229
229function parse_Window2(o,u,T){if(T&&T.biff>=2&&T.biff<5)return{};var S=o.read_shift(2);return{RTL:S&64}}function write_Window2(o){var u=new_buf(18),T=1718;return o&&o.RTL&&(T|=64),u.write_shift(2,T),u.write_shift(4,0),u.write_shift(4,64),u.write_shift(4,0),u.write_shift(4,0),u}function parse_Pane(){}function parse_Font(o,u,T){var S={dyHeight:o.read_shift(2),fl:o.read_shift(2)};switch(T&&T.biff||8){case 2:break;case 3:case 4:o.l+=2;break;default:o.l+=10;break}return S.name=parse_ShortXLUnicodeString(o,0,T),S}function write_Font(o,u){var T=o.name||"Arial",S=u&&u.biff==5,E=S?15+T.length:16+2*T.length,C=new_buf(E);return C.write_shift(2,o.sz*20),C.write_shift(4,0),C.write_shift(2,400),C.write_shift(4,0),C.write_shift(2,0),C.write_shift(1,T.length),S||C.write_shift(1,1),C.write_shift((S?1:2)*T.length,T,S?"sbcs":"utf16le"),C}function parse_LabelSst(o){var u=parse_XLSCell(o);return u.isst=o.read_shift(4),u}function write_LabelSst(o,u,T,S){var E=new_buf(10);return write_XLSCell(o,u,S,E),E.write_shift(4,T),E}function parse_Label(o,u,T){T.biffguess&&T.biff==2&&(T.biff=5);var S=o.l+u,E=parse_XLSCell(o);T.biff==2&&o.l++;var C=parse_XLUnicodeString(o,S-o.l,T);return E.val=C,E}function write_Label(o,u,T,S,E){var C=!E||E.biff==8,_=new_buf(8+ +C+(1+C)*T.length);return write_XLSCell(o,u,S,_),_.write_shift(2,T.length),C&&_.write_shift(1,1),_.write_shift((1+C)*T.length,T,C?"utf16le":"sbcs"),_}function parse_Format(o,u,T){var S=o.read_shift(2),E=parse_XLUnicodeString2(o,0,T);return[S,E]}function write_Format(o,u,T,S){var E=T&&T.biff==5;S||(S=new_buf(E?3+u.length:5+2*u.length)),S.write_shift(2,o),S.write_shift(E?1:2,u.length),E||S.write_shift(1,1),S.write_shift((E?1:2)*u.length,u,E?"sbcs":"utf16le");var C=S.length>S.l?S.slice(0,S.l):S;return C.l==null&&(C.l=C.length),C}var parse_BIFF2Format=parse_XLUnicodeString2;function parse_Dimensions(o,u,T){var S=o.l+u,E=T.biff==8||!T.biff?4:2,C=o.read_shift(E),_=o.read_shift(E),P=o.read_shift(2),R=o.read_shift(2);return o.l=S,{s:{r:C,c:P},e:{r:_,c:R}}}function write_Dimensions(o,u){var T=u.biff==8||!u.biff?4:2,S=new_buf(2*T+6);return S.write_shift(T,o.s.r),S.write_shift(T,o.e.r+1),S.write_shift(2,o.s.c),S.write_shift(2,o.e.c+1),S.write_shift(2,0),S}function parse_RK(o){var u=o.read_shift(2),T=o.read_shift(2),S=parse_RkRec(o);return{r:u,c:T,ixfe:S[0],rknum:S[1]}}function parse_MulRk(o,u){for(var T=o.l+u-2,S=o.read_shift(2),E=o.read_shift(2),C=[];o.l<T;)C.push(parse_RkRec(o));if(o.l!==T)throw new Error("MulRK read error");var _=o.read_shift(2);if(C.length!=_-E+1)throw new Error("MulRK length mismatch");return{r:S,c:E,C:_,rkrec:C}}function parse_MulBlank(o,u){for(var T=o.l+u-2,S=o.read_shift(2),E=o.read_shift(2),C=[];o.l<T;)C.push(o.read_shift(2));if(o.l!==T)throw new Error("MulBlank read error");var _=o.read_shift(2);if(C.length!=_-E+1)throw new Error("MulBlank length mismatch");return{r:S,c:E,C:_,ixfe:C}}function parse_CellStyleXF(o,u,T,S){var E={},C=o.read_shift(4),_=o.read_shift(4),P=o.read_shift(4),R=o.read_shift(2);return E.patternType=XLSFillPattern[P>>26],S.cellStyles&&(E.alc=C&7,E.fWrap=C>>3&1,E.alcV=C>>4&7,E.fJustLast=C>>7&1,E.trot=C>>8&255,E.cIndent=C>>16&15,E.fShrinkToFit=C>>20&1,E.iReadOrder=C>>22&2,E.fAtrNum=C>>26&1,E.fAtrFnt=C>>27&1,E.fAtrAlc=C>>28&1,E.fAtrBdr=C>>29&1,E.fAtrPat=C>>30&1,E.fAtrProt=C>>31&1,E.dgLeft=_&15,E.dgRight=_>>4&15,E.dgTop=_>>8&15,E.dgBottom=_>>12&15,E.icvLeft=_>>16&127,E.icvRight=_>>23&127,E.grbitDiag=_>>30&3,E.icvTop=P&127,E.icvBottom=P>>7&127,E.icvDiag=P>>14&127,E.dgDiag=P>>21&15,E.icvFore=R&127,E.icvBack=R>>7&127,E.fsxButton=R>>14&1),E}function parse_XF(o,u,T){var S={};return S.ifnt=o.read_shift(2),S.numFmtId=o.read_shift(2),S.flags=o.read_shift(2),S.fStyle=S.flags>>2&1,u-=6,S.data=parse_CellStyleXF(o,u,S.fStyle,T),S}function write_XF(o,u,T,S){var E=T&&T.biff==5;S||(S=new_buf(E?16:20)),S.write_shift(2,0),o.style?(S.write_shift(2,o.numFmtId||0),S.write_shift(2,65524)):(S.write_shift(2,o.numFmtId||0),S.write_shift(2,u<<4));var C=0;return o.numFmtId>0&&E&&(C|=1024),S.write_shift(4,C),S.write_shift(4,0),E||S.write_shift(4,0),S.write_shift(2,0),S}function parse_Guts(o){o.l+=4;var u=[o.read_shift(2),o.read_shift(2)];if(u[0]!==0&&u[0]--,u[1]!==0&&u[1]--,u[0]>7||u[1]>7)throw new Error("Bad Gutters: "+u.join("|"));return u}function write_Guts(o){var u=new_buf(8);return u.write_shift(4,0),u.write_shift(2,0),u.write_shift(2,0),u}function parse_BoolErr(o,u,T){var S=parse_XLSCell(o);(T.biff==2||u==9)&&++o.l;var E=parse_Bes(o);return S.val=E,S.t=E===!0||E===!1?"b":"e",S}function write_BoolErr(o,u,T,S,E,C){var _=new_buf(8);return write_XLSCell(o,u,S,_),write_Bes(T,C,_),_}function parse_Number(o,u,T){T.biffguess&&T.biff==2&&(T.biff=5);var S=parse_XLSCell(o),E=parse_Xnum(o);return S.val=E,S}function write_Number(o,u,T,S){var E=new_buf(14);return write_XLSCell(o,u,S,E),write_Xnum(T,E),E}var parse_XLHeaderFooter=parse_OptXLUnicodeString;function parse_SupBook(o,u,T){var S=o.l+u,E=o.read_shift(2),C=o.read_shift(2);if(T.sbcch=C,C==1025||C==14849)return[C,E];if(C<1||C>255)throw new Error("Unexpected SupBook type: "+C);for(var _=parse_XLUnicodeStringNoCch(o,C),P=[];S>o.l;)P.push(parse_XLUnicodeString(o));return[C,E,_,P]}function parse_ExternName(o,u,T){var S=o.read_shift(2),E,C={fBuiltIn:S&1,fWantAdvise:S>>>1&1,fWantPict:S>>>2&1,fOle:S>>>3&1,fOleLink:S>>>4&1,cf:S>>>5&1023,fIcon:S>>>15&1};return T.sbcch===14849&&(E=parse_AddinUdf(o,u-2,T)),C.body=E||o.read_shift(u-2),typeof E=="string"&&(C.Name=E),C}var XLSLblBuiltIn=["_xlnm.Consolidate_Area","_xlnm.Auto_Open","_xlnm.Auto_Close","_xlnm.Extract","_xlnm.Database","_xlnm.Criteria","_xlnm.Print_Area","_xlnm.Print_Titles","_xlnm.Recorder","_xlnm.Data_Form","_xlnm.Auto_Activate","_xlnm.Auto_Deactivate","_xlnm.Sheet_Title","_xlnm._FilterDatabase"];function parse_Lbl(o,u,T){var S=o.l+u,E=o.read_shift(2),C=o.read_shift(1),_=o.read_shift(1),P=o.read_shift(T&&T.biff==2?1:2),R=0;(!T||T.biff>=5)&&(T.biff!=5&&(o.l+=2),R=o.read_shift(2),T.biff==5&&(o.l+=2),o.l+=4);var I=parse_XLUnicodeStringNoCch(o,_,T);E&32&&(I=XLSLblBuiltIn[I.charCodeAt(0)]);var L=S-o.l;T&&T.biff==2&&--L;var j=S==o.l||P===0||!(L>0)?[]:parse_NameParsedFormula(o,L,T,P);return{chKey:C,Name:I,itab:R,rgce:j}}function parse_ExternSheet(o,u,T){if(T.biff<8)return parse_BIFF5ExternSheet(o,u,T);for(var S=[],E=o.l+u,C=o.read_shift(T.biff>8?4:2);C--!==0;)S.push(parse_XTI(o,T.biff>8?12:6,T));if(o.l!=E)throw new Error("Bad ExternSheet: "+o.l+" != "+E);return S}function parse_BIFF5ExternSheet(o,u,T){o[o.l+1]==3&&o[o.l]++;var S=parse_ShortXLUnicodeString(o,u,T);
229return S.charCodeAt(0)==3?S.slice(1):S}function parse_NameCmt(o,u,T){if(T.biff<8){o.l+=u;return}var S=o.read_shift(2),E=o.read_shift(2),C=parse_XLUnicodeStringNoCch(o,S,T),_=parse_XLUnicodeStringNoCch(o,E,T);return[C,_]}function parse_ShrFmla(o,u,T){var S=parse_RefU(o);o.l++;var E=o.read_shift(1);return u-=8,[parse_SharedParsedFormula(o,u,T),E,S]}function parse_Array(o,u,T){var S=parse_Ref(o);switch(T.biff){case 2:o.l++,u-=7;break;case 3:case 4:o.l+=2,u-=8;break;default:o.l+=6,u-=12}return[S,parse_ArrayParsedFormula(o,u,T)]}function parse_MTRSettings(o){var u=o.read_shift(4)!==0,T=o.read_shift(4)!==0,S=o.read_shift(4);return[u,T,S]}function parse_NoteSh(o,u,T){if(!(T.biff<8)){var S=o.read_shift(2),E=o.read_shift(2),C=o.read_shift(2),_=o.read_shift(2),P=parse_XLUnicodeString2(o,0,T);return T.biff<8&&o.read_shift(1),[{r:S,c:E},P,_,C]}}function parse_Note(o,u,T){return parse_NoteSh(o,u,T)}function parse_MergeCells(o,u){for(var T=[],S=o.read_shift(2);S--;)T.push(parse_Ref8U(o));return T}function write_MergeCells(o){var u=new_buf(2+o.length*8);u.write_shift(2,o.length);for(var T=0;T<o.length;++T)write_Ref8U(o[T],u);return u}function parse_Obj(o,u,T){if(T&&T.biff<8)return parse_BIFF5Obj(o,u,T);var S=parse_FtCmo(o),E=parse_FtArray(o,u-22,S[1]);return{cmo:S,ft:E}}var parse_BIFF5OT={8:function(o,u){var T=o.l+u;o.l+=10;var S=o.read_shift(2);o.l+=4,o.l+=2,o.l+=2,o.l+=2,o.l+=4;var E=o.read_shift(1);return o.l+=E,o.l=T,{fmt:S}}};function parse_BIFF5Obj(o,u,T){o.l+=4;var S=o.read_shift(2),E=o.read_shift(2),C=o.read_shift(2);o.l+=2,o.l+=2,o.l+=2,o.l+=2,o.l+=2,o.l+=2,o.l+=2,o.l+=2,o.l+=2,o.l+=6,u-=36;var _=[];return _.push((parse_BIFF5OT[S]||parsenoop)(o,u,T)),{cmo:[E,S,C],ft:_}}function parse_TxO(o,u,T){var S=o.l,E="";try{o.l+=4;var C=(T.lastobj||{cmo:[0,0]}).cmo[1],_;[0,5,7,11,12,14].indexOf(C)==-1?o.l+=6:_=parse_ControlInfo(o,6,T);var P=o.read_shift(2);o.read_shift(2),parseuint16(o,2);var R=o.read_shift(2);o.l+=R;for(var I=1;I<o.lens.length-1;++I){if(o.l-S!=o.lens[I])throw new Error("TxO: bad continue record");var L=o[o.l],j=parse_XLUnicodeStringNoCch(o,o.lens[I+1]-o.lens[I]-1);if(E+=j,E.length>=(L?P:2*P))break}if(E.length!==P&&E.length!==P*2)throw new Error("cchText: "+P+" != "+E.length);return o.l=S+u,{t:E}}catch{return o.l=S+u,{t:E}}}function parse_HLink(o,u){var T=parse_Ref8U(o);o.l+=16;var S=parse_Hyperlink(o,u-24);return[T,S]}function write_HLink(o){var u=new_buf(24),T=decode_cell(o[0]);u.write_shift(2,T.r),u.write_shift(2,T.r),u.write_shift(2,T.c),u.write_shift(2,T.c);for(var S="d0 c9 ea 79 f9 ba ce 11 8c 82 00 aa 00 4b a9 0b".split(" "),E=0;E<16;++E)u.write_shift(1,parseInt(S[E],16));return bconcat([u,write_Hyperlink(o[1])])}function parse_HLinkTooltip(o,u){o.read_shift(2);var T=parse_Ref8U(o),S=o.read_shift((u-10)/2,"dbcs-cont");return S=S.replace(chr0,""),[T,S]}function write_HLinkTooltip(o){var u=o[1].Tooltip,T=new_buf(10+2*(u.length+1));T.write_shift(2,2048);var S=decode_cell(o[0]);T.write_shift(2,S.r),T.write_shift(2,S.r),T.write_shift(2,S.c),T.write_shift(2,S.c);for(var E=0;E<u.length;++E)T.write_shift(2,u.charCodeAt(E));return T.write_shift(2,0),T}function parse_Country(o){var u=[0,0],T;return T=o.read_shift(2),u[0]=CountryEnum[T]||T,T=o.read_shift(2),u[1]=CountryEnum[T]||T,u}function write_Country(o){return o||(o=new_buf(4)),o.write_shift(2,1),o.write_shift(2,1),o}function parse_ClrtClient(o){for(var u=o.read_shift(2),T=[];u-- >0;)T.push(parse_LongRGB(o));return T}function parse_Palette(o){for(var u=o.read_shift(2),T=[];u-- >0;)T.push(parse_LongRGB(o));return T}function parse_XFCRC(o){o.l+=2;var u={cxfs:0,crc:0};return u.cxfs=o.read_shift(2),u.crc=o.read_shift(4),u}function parse_ColInfo(o,u,T){if(!T.cellStyles)return parsenoop(o,u);var S=T&&T.biff>=12?4:2,E=o.read_shift(S),C=o.read_shift(S),_=o.read_shift(S),P=o.read_shift(S),R=o.read_shift(2);S==2&&(o.l+=2);var I={s:E,e:C,w:_,ixfe:P,flags:R};return(T.biff>=5||!T.biff)&&(I.level=R>>8&7),I}function write_ColInfo(o,u){var T=new_buf(12);T.write_shift(2,u),T.write_shift(2,u),T.write_shift(2,o.width*256),T.write_shift(2,0);var S=0;return o.hidden&&(S|=1),T.write_shift(1,S),S=o.level||0,T.write_shift(1,S),T.write_shift(2,0),T}function parse_Setup(o,u){var T={};return u<32||(o.l+=16,T.header=parse_Xnum(o),T.footer=parse_Xnum(o),o.l+=2),T}function parse_ShtProps(o,u,T){var S={area:!1};if(T.biff!=5)return o.l+=u,S;var E=o.read_shift(1);return o.l+=3,E&16&&(S.area=!0),S}function write_RRTabId(o){for(var u=new_buf(2*o),T=0;T<o;++T)u.write_shift(2,T+1);return u}
vendor: 40,623 bytes, lines 229-243
229var parse_Blank=parse_XLSCell,parse_Scl=parseuint16a,parse_String=parse_XLUnicodeString;function parse_ImData(o){var u=o.read_shift(2),T=o.read_shift(2),S=o.read_shift(4),E={fmt:u,env:T,len:S,data:o.slice(o.l,o.l+S)};return o.l+=S,E}function parse_BIFF2STR(o,u,T){T.biffguess&&T.biff==5&&(T.biff=2);var S=parse_XLSCell(o);++o.l;var E=parse_XLUnicodeString2(o,u-7,T);return S.t="str",S.val=E,S}function parse_BIFF2NUM(o){var u=parse_XLSCell(o);++o.l;var T=parse_Xnum(o);return u.t="n",u.val=T,u}function write_BIFF2NUM(o,u,T){var S=new_buf(15);return write_BIFF2Cell(S,o,u),S.write_shift(8,T,"f"),S}function parse_BIFF2INT(o){var u=parse_XLSCell(o);++o.l;var T=o.read_shift(2);return u.t="n",u.val=T,u}function write_BIFF2INT(o,u,T){var S=new_buf(9);return write_BIFF2Cell(S,o,u),S.write_shift(2,T),S}function parse_BIFF2STRING(o){var u=o.read_shift(1);return u===0?(o.l++,""):o.read_shift(u,"sbcs-cont")}function parse_BIFF2FONTXTRA(o,u){o.l+=6,o.l+=2,o.l+=1,o.l+=3,o.l+=1,o.l+=u-13}function parse_RString(o,u,T){var S=o.l+u,E=parse_XLSCell(o),C=o.read_shift(2),_=parse_XLUnicodeStringNoCch(o,C,T);return o.l=S,E.t="str",E.val=_,E}var DBF_SUPPORTED_VERSIONS=[2,3,48,49,131,139,140,245],DBF=function(){var o={1:437,2:850,3:1252,4:1e4,100:852,101:866,102:865,103:861,104:895,105:620,106:737,107:857,120:950,121:949,122:936,123:932,124:874,125:1255,126:1256,150:10007,151:10029,152:10006,200:1250,201:1251,202:1254,203:1253,0:20127,8:865,9:437,10:850,11:437,13:437,14:850,15:437,16:850,17:437,18:850,19:932,20:850,21:437,22:850,23:865,24:437,25:437,26:850,27:437,28:863,29:850,31:852,34:852,35:852,36:860,37:850,38:866,55:850,64:852,77:936,78:949,79:950,80:874,87:1252,88:1252,89:1252,108:863,134:737,135:852,136:857,204:1257,255:16969},u=evert({1:437,2:850,3:1252,4:1e4,100:852,101:866,102:865,103:861,104:895,105:620,106:737,107:857,120:950,121:949,122:936,123:932,124:874,125:1255,126:1256,150:10007,151:10029,152:10006,200:1250,201:1251,202:1254,203:1253,0:20127});function T(P,R){var I=[],L=new_raw_buf(1);switch(R.type){case"base64":L=s2a(Base64_decode(P));break;case"binary":L=s2a(P);break;case"buffer":case"array":L=P;break}prep_blob(L,0);var j=L.read_shift(1),M=!!(j&136),D=!1,F=!1;switch(j){case 2:break;case 3:break;case 48:D=!0,M=!0;break;case 49:D=!0,M=!0;break;case 131:break;case 139:break;case 140:F=!0;break;case 245:break;default:throw new Error("DBF Unsupported Version: "+j.toString(16))}var N=0,G=521;j==2&&(N=L.read_shift(2)),L.l+=3,j!=2&&(N=L.read_shift(4)),N>1048576&&(N=1e6),j!=2&&(G=L.read_shift(2));var B=L.read_shift(2),H=R.codepage||1252;j!=2&&(L.l+=16,L.read_shift(1),L[L.l]!==0&&(H=o[L[L.l]]),L.l+=1,L.l+=2),F&&(L.l+=36);for(var O=[],V={},U=Math.min(L.length,j==2?521:G-10-(D?264:0)),W=F?32:11;L.l<U&&L[L.l]!=13;)switch(V={},V.name=$cptable.utils.decode(H,L.slice(L.l,L.l+W)).replace(/[\u0000\r\n].*$/g,""),L.l+=W,V.type=String.fromCharCode(L.read_shift(1)),j!=2&&!F&&(V.offset=L.read_shift(4)),V.len=L.read_shift(1),j==2&&(V.offset=L.read_shift(2)),V.dec=L.read_shift(1),V.name.length&&O.push(V),j!=2&&(L.l+=F?13:14),V.type){case"B":(!D||V.len!=8)&&R.WTF&&console.log("Skipping "+V.name+":"+V.type);break;case"G":case"P":R.WTF&&console.log("Skipping "+V.name+":"+V.type);break;case"+":case"0":case"@":case"C":case"D":case"F":case"I":case"L":case"M":case"N":case"O":case"T":case"Y":break;default:throw new Error("Unknown Field Type: "+V.type)}if(L[L.l]!==13&&(L.l=G-1),L.read_shift(1)!==13)throw new Error("DBF Terminator not found "+L.l+" "+L[L.l]);L.l=G;var K=0,Y=0;for(I[0]=[],Y=0;Y!=O.length;++Y)I[0][Y]=O[Y].name;for(;N-- >0;){if(L[L.l]===42){L.l+=B;continue}for(++L.l,I[++K]=[],Y=0,Y=0;Y!=O.length;++Y){var ee=L.slice(L.l,L.l+O[Y].len);L.l+=O[Y].len,prep_blob(ee,0);var oe=$cptable.utils.decode(H,ee);switch(O[Y].type){case"C":oe.trim().length&&(I[K][Y]=oe.replace(/\s+$/,""));break;case"D":oe.length===8?I[K][Y]=new Date(+oe.slice(0,4),+oe.slice(4,6)-1,+oe.slice(6,8)):I[K][Y]=oe;break;case"F":I[K][Y]=parseFloat(oe.trim());break;case"+":case"I":I[K][Y]=F?ee.read_shift(-4,"i")^2147483648:ee.read_shift(4,"i");break;case"L":switch(oe.trim().toUpperCase()){case"Y":case"T":I[K][Y]=!0;break;case"N":case"F":I[K][Y]=!1;break;case"":case"?":break;default:throw new Error("DBF Unrecognized L:|"+oe+"|")}break;case"M":if(!M)throw new Error("DBF Unexpected MEMO for type "+j.toString(16));I[K][Y]="##MEMO##"+(F?parseInt(oe.trim(),10):ee.read_shift(4));break;case"N":oe=oe.replace(/\u0000/g,"").trim(),oe&&oe!="."&&(I[K][Y]=+oe||0);break;case"@":I[K][Y]=new Date(ee.read_shift(-8,"f")-621356832e5);break;case"T":I[K][Y]=new Date((ee.read_shift(4)-2440588)*864e5+ee.read_shift(4));break;case"Y":I[K][Y]=ee.read_shift(4,"i")/1e4+ee.read_shift(4,"i")/1e4*Math.pow(2,32);break;case"O":I[K][Y]=-ee.read_shift(-8,"f");break;case"B":if(D&&O[Y].len==8){I[K][Y]=ee.read_shift(8,"f");break}case"G":case"P":ee.l+=O[Y].len;break;case"0":if(O[Y].name==="_NullFlags")break;default:throw new Error("DBF Unsupported data type "+O[Y].type)}}}if(j!=2&&L.l<L.length&&L[L.l++]!=26)throw new Error("DBF EOF Marker missing "+(L.l-1)+" of "+L.length+" "+L[L.l-1].toString(16));return R&&R.sheetRows&&(I=I.slice(0,R.sheetRows)),R.DBF=O,I}function S(P,R){var I=R||{};I.dateNF||(I.dateNF="yyyymmdd");var L=aoa_to_sheet(T(P,I),I);return L["!cols"]=I.DBF.map(function(j){return{wch:j.len,DBF:j}}),delete I.DBF,L}function E(P,R){try{return sheet_to_workbook(S(P,R),R)}catch(I){if(R&&R.WTF)throw I}return{SheetNames:[],Sheets:{}}}var C={B:8,C:250,L:1,D:8,"?":0,"":0};function _(P,R){var I=R||{};if(+I.codepage>=0&&set_cp(+I.codepage),I.type=="string")throw new Error("Cannot write DBF to JS string");var L=buf_array(),j=sheet_to_json(P,{header:1,raw:!0,cellDates:!0}),M=j[0],D=j.slice(1),F=P["!cols"]||[],N=0,G=0,B=0,H=1;for(N=0;N<M.length;++N){if(((F[N]||{}).DBF||{}).name){M[N]=F[N].DBF.name,++B;continue}if(M[N]!=null){if(++B,typeof M[N]=="number"&&(M[N]=M[N].toString(10)),typeof M[N]!="string")throw new Error("DBF Invalid column name "+M[N]+" |"+typeof M[N]+"|");if(M.indexOf(M[N])!==N){for(G=0;G<1024;++G)if(M.indexOf(M[N]+"_"+G)==-1){M[N]+="_"+G;break}}}}var O=safe_decode_range(P["!ref"]),V=[],U=[],W=[];for(N=0;N<=O.e.c-O.s.c;++N){var K="",Y="",ee=0,oe=[];for(G=0;G<D.length;++G)D[G][N]!=null&&oe.push(D[G][N]);if(oe.length==0||M[N]==null){V[N]="?";continue}for(G=0;G<oe.length;++G){switch(typeof oe[G]){case"number":Y="B";break;case"string":Y="C";break;case"boolean":Y="L";break;case"object":Y=oe[G]instanceof Date?"D":"C";break;default:Y="C"}ee=Math.max(ee,String(oe[G]).length),K=K&&K!=Y?"C":Y}ee>250&&(ee=250),Y=((F[N]||{}).DBF||{}).type,Y=="C"&&F[N].DBF.len>ee&&(ee=F[N].DBF.len),K=="B"&&Y=="N"&&(K="N",W[N]=F[N].DBF.dec,ee=F[N].DBF.len),U[N]=K=="C"||Y=="N"?ee:C[K]||0,H+=U[N],V[N]=K}var se=L.next(32);for(se.write_shift(4,318902576),se.write_shift(4,D.length),se.write_shift(2,296+32*B),se.write_shift(2,H),N=0;N<4;++N)se.write_shift(4,0);for(se.write_shift(4,0|(+u[current_ansi]||3)<<8),N=0,G=0;N<M.length;++N)if(M[N]!=null){var Q=L.next(32),ie=(M[N].slice(-10)+"\0\0\0\0\0\0\0\0\0\0\0").slice(0,11);Q.write_shift(1,ie,"sbcs"),Q.write_shift(1,V[N]=="?"?"C":V[N],"sbcs"),Q.write_shift(4,G),Q.write_shift(1,U[N]||C[V[N]]||0),Q.write_shift(1,W[N]||0),Q.write_shift(1,2),Q.write_shift(4,0),Q.write_shift(1,0),Q.write_shift(4,0),Q.write_shift(4,0),G+=U[N]||C[V[N]]||0}var ae=L.next(264);for(ae.write_shift(4,13),N=0;N<65;++N)ae.write_shift(4,0);for(N=0;N<D.length;++N){var re=L.next(H);for(re.write_shift(1,0),G=0;G<M.length;++G)if(M[G]!=null)switch(V[G]){case"L":re.write_shift(1,D[N][G]==null?63:D[N][G]?84:70);break;case"B":re.write_shift(8,D[N][G]||0,"f");break;case"N":var J="0";for(typeof D[N][G]=="number"&&(J=D[N][G].toFixed(W[G]||0)),B=0;B<U[G]-J.length;++B)re.write_shift(1,32);re.write_shift(1,J,"sbcs");break;case"D":D[N][G]?(re.write_shift(4,("0000"+D[N][G].getFullYear()).slice(-4),"sbcs"),re.write_shift(2,("00"+(D[N][G].getMonth()+1)).slice(-2),"sbcs"),re.write_shift(2,("00"+D[N][G].getDate()).slice(-2),"sbcs")):re.write_shift(8,"00000000","sbcs");break;case"C":var te=String(D[N][G]!=null?D[N][G]:"").slice(0,U[G]);for(re.write_shift(1,te,"sbcs"),B=0;B<U[G]-te.length;++B)re.write_shift(1,32);break}}return L.next(1).write_shift(1,26),L.end()}return{to_workbook:E,to_sheet:S,from_sheet:_}}(),SYLK=function(){var o={AA:"À",BA:"Á",CA:"Â",DA:195,HA:"Ä",JA:197,AE:"È",BE:"É",CE:"Ê",HE:"Ë",AI:"Ì",BI:"Í",CI:"Î",HI:"Ï",AO:"Ò",BO:"Ó",CO:"Ô",DO:213,HO:"Ö",AU:"Ù",BU:"Ú",CU:"Û",HU:"Ü",Aa:"à",Ba:"á",Ca:"â",Da:227,Ha:"ä",Ja:229,Ae:"è",Be:"é",Ce:"ê",He:"ë",Ai:"ì",Bi:"í",Ci:"î",Hi:"ï",Ao:"ò",Bo:"ó",Co:"ô",Do:245,Ho:"ö",Au:"ù",Bu:"ú",Cu:"û",Hu:"ü",KC:"Ç",Kc:"ç",q:"æ",z:"œ",a:"Æ",j:"Œ",DN:209,Dn:241,Hy:255,S:169,c:170,R:174,"B ":180,0:176,1:177,2:178,3:179,5:181,6:182,7:183,Q:185,k:186,b:208,i:216,l:222,s:240,y:248,"!":161,'"':162,"#":163,"(":164,"%":165,"'":167,"H ":168,"+":171,";":187,"<":188,"=":189,">":190,"?":191,"{":223},u=new RegExp("\x1BN("+keys(o).join("|").replace(/\|\|\|/,"|\\||").replace(/([?()+])/g,"\\$1")+"|\\|)","gm"),T=function(M,D){var F=o[D];return typeof F=="number"?_getansi(F):F},S=function(M,D,F){var N=D.charCodeAt(0)-32<<4|F.charCodeAt(0)-48;return N==59?M:_getansi(N)};o["|"]=254;function E(M,D){switch(D.type){case"base64":return C(Base64_decode(M),D);case"binary":return C(M,D);case"buffer":return C(has_buf&&Buffer.isBuffer(M)?M.toString("binary"):a2s(M),D);case"array":return C(cc2str(M),D)}throw new Error("Unrecognized type "+D.type)}function C(M,D){var F=M.split(/[\n\r]+/),N=-1,G=-1,B=0,H=0,O=[],V=[],U=null,W={},K=[],Y=[],ee=[],oe=0,se;for(+D.codepage>=0&&set_cp(+D.codepage);B!==F.length;++B){oe=0;var Q=F[B].trim().replace(/\x1B([\x20-\x2F])([\x30-\x3F])/g,S).replace(u,T),ie=Q.replace(/;;/g,"\0").split(";").map(function(fe){return fe.replace(/\u0000/g,";")}),ae=ie[0],re;if(Q.length>0)switch(ae){case"ID":break;case"E":break;case"B":break;case"O":break;case"W":break;case"P":ie[1].charAt(0)=="P"&&V.push(Q.slice(3).replace(/;;/g,";"));break;case"C":var J=!1,te=!1,Z=!1,X=!1,de=-1,he=-1;for(H=1;H<ie.length;++H)switch(ie[H].charAt(0)){case"A":break;case"X":G=parseInt(ie[H].slice(1))-1,te=!0;break;case"Y":for(N=parseInt(ie[H].slice(1))-1,te||(G=0),se=O.length;se<=N;++se)O[se]=[];break;case"K":re=ie[H].slice(1),re.charAt(0)==='"'?re=re.slice(1,re.length-1):re==="TRUE"?re=!0:re==="FALSE"?re=!1:isNaN(fuzzynum(re))?isNaN(fuzzydate(re).getDate())||(re=parseDate(re)):(re=fuzzynum(re),U!==null&&fmt_is_date(U)&&(re=numdate(re))),typeof $cptable<"u"&&typeof re=="string"&&(D||{}).type!="string"&&(D||{}).codepage&&(re=$cptable.utils.decode(D.codepage,re)),J=!0;break;case"E":X=!0;var ne=rc_to_a1(ie[H].slice(1),{r:N,c:G});O[N][G]=[O[N][G],ne];break;case"S":Z=!0,O[N][G]=[O[N][G],"S5S"];break;case"G":break;case"R":de=parseInt(ie[H].slice(1))-1;break;case"C":he=parseInt(ie[H].slice(1))-1;break;default:if(D&&D.WTF)throw new Error("SYLK bad record "+Q)}if(J&&(O[N][G]&&O[N][G].length==2?O[N][G][0]=re:O[N][G]=re,U=null),Z){if(X)throw new Error("SYLK shared formula cannot have own formula");var ue=de>-1&&O[de][he];if(!ue||!ue[1])throw new Error("SYLK shared formula cannot find base");O[N][G][1]=shift_formula_str(ue[1],{r:N-de,c:G-he})}break;case"F":var ce=0;for(H=1;H<ie.length;++H)switch(ie[H].charAt(0)){case"X":G=parseInt(ie[H].slice(1))-1,++ce;break;case"Y":for(N=parseInt(ie[H].slice(1))-1,se=O.length;se<=N;++se)O[se]=[];break;case"M":oe=parseInt(ie[H].slice(1))/20;break;case"F":break;case"G":break;case"P":U=V[parseInt(ie[H].slice(1))];break;case"S":break;case"D":break;case"N":break;case"W":for(ee=ie[H].slice(1).split(" "),se=parseInt(ee[0],10);se<=parseInt(ee[1],10);++se)oe=parseInt(ee[2],10),Y[se-1]=oe===0?{hidden:!0}:{wch:oe},process_col(Y[se-1]);break;case"C":G=parseInt(ie[H].slice(1))-1,Y[G]||(Y[G]={});break;case"R":N=parseInt(ie[H].slice(1))-1,K[N]||(K[N]={}),oe>0?(K[N].hpt=oe,K[N].hpx=pt2px(oe)):oe===0&&(K[N].hidden=!0);break;default:if(D&&D.WTF)throw new Error("SYLK bad record "+Q)}ce<1&&(U=null);break;default:if(D&&D.WTF)throw new Error("SYLK bad record "+Q)}}return K.length>0&&(W["!rows"]=K),Y.length>0&&(W["!cols"]=Y),D&&D.sheetRows&&(O=O.slice(0,D.sheetRows)),[O,W]}function _(M,D){var F=E(M,D),N=F[0],G=F[1],B=aoa_to_sheet(N,D);return keys(G).forEach(function(H){B[H]=G[H]}),B}function P(M,D){return sheet_to_workbook(_(M,D),D)}function R(M,D,F,N){var G="C;Y"+(F+1)+";X"+(N+1)+";K";switch(M.t){case"n":G+=M.v||0,M.f&&!M.F&&(G+=";E"+a1_to_rc(M.f,{r:F,c:N}));break;case"b":G+=M.v?"TRUE":"FALSE";break;case"e":G+=M.w||M.v;break;case"d":G+='"'+(M.w||M.v)+'"';break;case"s":G+='"'+M.v.replace(/"/g,"").replace(/;/g,";;")+'"';break}return G}function I(M,D){D.forEach(function(F,N){var G="F;W"+(N+1)+" "+(N+1)+" ";F.hidden?G+="0":(typeof F.width=="number"&&!F.wpx&&(F.wpx=width2px(F.width)),typeof F.wpx=="number"&&!F.wch&&(F.wch=px2char(F.wpx)),typeof F.wch=="number"&&(G+=Math.round(F.wch))),G.charAt(G.length-1)!=" "&&M.push(G)})}function L(M,D){D.forEach(function(F,N){var G="F;";F.hidden?G+="M0;":F.hpt?G+="M"+20*F.hpt+";":F.hpx&&(G+="M"+20*px2pt(F.hpx)+";"),G.length>2&&M.push(G+"R"+(N+1))})}function j(M,D){var F=["ID;PWXL;N;E"],N=[],G=safe_decode_range(M["!ref"]),B,H=Array.isArray(M),O=`\r
230`;F.push("P;PGeneral"),F.push("F;P0;DG0G8;M255"),M["!cols"]&&I(F,M["!cols"]),M["!rows"]&&L(F,M["!rows"]),F.push("B;Y"+(G.e.r-G.s.r+1)+";X"+(G.e.c-G.s.c+1)+";D"+[G.s.c,G.s.r,G.e.c,G.e.r].join(" "));for(var V=G.s.r;V<=G.e.r;++V)for(var U=G.s.c;U<=G.e.c;++U){var W=encode_cell({r:V,c:U});B=H?(M[V]||[])[U]:M[W],!(!B||B.v==null&&(!B.f||B.F))&&N.push(R(B,M,V,U))}return F.join(O)+O+N.join(O)+O+"E"+O}return{to_workbook:P,to_sheet:_,from_sheet:j}}(),DIF=function(){function o(C,_){switch(_.type){case"base64":return u(Base64_decode(C),_);case"binary":return u(C,_);case"buffer":return u(has_buf&&Buffer.isBuffer(C)?C.toString("binary"):a2s(C),_);case"array":return u(cc2str(C),_)}throw new Error("Unrecognized type "+_.type)}function u(C,_){for(var P=C.split(`
231`),R=-1,I=-1,L=0,j=[];L!==P.length;++L){if(P[L].trim()==="BOT"){j[++R]=[],I=0;continue}if(!(R<0)){var M=P[L].trim().split(","),D=M[0],F=M[1];++L;for(var N=P[L]||"";(N.match(/["]/g)||[]).length&1&&L<P.length-1;)N+=`
232`+P[++L];switch(N=N.trim(),+D){case-1:if(N==="BOT"){j[++R]=[],I=0;continue}else if(N!=="EOD")throw new Error("Unrecognized DIF special command "+N);break;case 0:N==="TRUE"?j[R][I]=!0:N==="FALSE"?j[R][I]=!1:isNaN(fuzzynum(F))?isNaN(fuzzydate(F).getDate())?j[R][I]=F:j[R][I]=parseDate(F):j[R][I]=fuzzynum(F),++I;break;case 1:N=N.slice(1,N.length-1),N=N.replace(/""/g,'"'),N&&N.match(/^=".*"$/)&&(N=N.slice(2,-1)),j[R][I++]=N!==""?N:null;break}if(N==="EOD")break}}return _&&_.sheetRows&&(j=j.slice(0,_.sheetRows)),j}function T(C,_){return aoa_to_sheet(o(C,_),_)}function S(C,_){return sheet_to_workbook(T(C,_),_)}var E=function(){var C=function(R,I,L,j,M){R.push(I),R.push(L+","+j),R.push('"'+M.replace(/"/g,'""')+'"')},_=function(R,I,L,j){R.push(I+","+L),R.push(I==1?'"'+j.replace(/"/g,'""')+'"':j)};return function(R){var I=[],L=safe_decode_range(R["!ref"]),j,M=Array.isArray(R);C(I,"TABLE",0,1,"sheetjs"),C(I,"VECTORS",0,L.e.r-L.s.r+1,""),C(I,"TUPLES",0,L.e.c-L.s.c+1,""),C(I,"DATA",0,0,"");for(var D=L.s.r;D<=L.e.r;++D){_(I,-1,0,"BOT");for(var F=L.s.c;F<=L.e.c;++F){var N=encode_cell({r:D,c:F});if(j=M?(R[D]||[])[F]:R[N],!j){_(I,1,0,"");continue}switch(j.t){case"n":var G=j.w;!G&&j.v!=null&&(G=j.v),G==null?j.f&&!j.F?_(I,1,0,"="+j.f):_(I,1,0,""):_(I,0,G,"V");break;case"b":_(I,0,j.v?1:0,j.v?"TRUE":"FALSE");break;case"s":_(I,1,0,isNaN(j.v)?j.v:'="'+j.v+'"');break;case"d":j.w||(j.w=SSF_format(j.z||table_fmt[14],datenum(parseDate(j.v)))),_(I,0,j.w,"V");break;default:_(I,1,0,"")}}}_(I,-1,0,"EOD");var B=`\r
233`,H=I.join(B);return H}}();return{to_workbook:S,to_sheet:T,from_sheet:E}}(),ETH=function(){function o(j){return j.replace(/\\b/g,"\\").replace(/\\c/g,":").replace(/\\n/g,`
234`)}function u(j){return j.replace(/\\/g,"\\b").replace(/:/g,"\\c").replace(/\n/g,"\\n")}function T(j,M){for(var D=j.split(`
235`),F=-1,N=-1,G=0,B=[];G!==D.length;++G){var H=D[G].trim().split(":");if(H[0]==="cell"){var O=decode_cell(H[1]);if(B.length<=O.r)for(F=B.length;F<=O.r;++F)B[F]||(B[F]=[]);switch(F=O.r,N=O.c,H[2]){case"t":B[F][N]=o(H[3]);break;case"v":B[F][N]=+H[3];break;case"vtf":var V=H[H.length-1];case"vtc":switch(H[3]){case"nl":B[F][N]=!!+H[4];break;default:B[F][N]=+H[4];break}H[2]=="vtf"&&(B[F][N]=[B[F][N],V])}}}return M&&M.sheetRows&&(B=B.slice(0,M.sheetRows)),B}function S(j,M){return aoa_to_sheet(T(j,M),M)}function E(j,M){return sheet_to_workbook(S(j,M),M)}var C=["socialcalc:version:1.5","MIME-Version: 1.0","Content-Type: multipart/mixed; boundary=SocialCalcSpreadsheetControlSave"].join(`
236`),_=["--SocialCalcSpreadsheetControlSave","Content-type: text/plain; charset=UTF-8"].join(`
237`)+`
238`,P=["# SocialCalc Spreadsheet Control Save","part:sheet"].join(`
239`),R="--SocialCalcSpreadsheetControlSave--";function I(j){if(!j||!j["!ref"])return"";for(var M=[],D=[],F,N="",G=decode_range(j["!ref"]),B=Array.isArray(j),H=G.s.r;H<=G.e.r;++H)for(var O=G.s.c;O<=G.e.c;++O)if(N=encode_cell({r:H,c:O}),F=B?(j[H]||[])[O]:j[N],!(!F||F.v==null||F.t==="z")){switch(D=["cell",N,"t"],F.t){case"s":case"str":D.push(u(F.v));break;case"n":F.f?(D[2]="vtf",D[3]="n",D[4]=F.v,D[5]=u(F.f)):(D[2]="v",D[3]=F.v);break;case"b":D[2]="vt"+(F.f?"f":"c"),D[3]="nl",D[4]=F.v?"1":"0",D[5]=u(F.f||(F.v?"TRUE":"FALSE"));break;case"d":var V=datenum(parseDate(F.v));D[2]="vtc",D[3]="nd",D[4]=""+V,D[5]=F.w||SSF_format(F.z||table_fmt[14],V);break;case"e":continue}M.push(D.join(":"))}return M.push("sheet:c:"+(G.e.c-G.s.c+1)+":r:"+(G.e.r-G.s.r+1)+":tvf:1"),M.push("valueformat:1:text-wiki"),M.join(`
240`)}function L(j){return[C,_,P,_,I(j),R].join(`
241`)}return{to_workbook:E,to_sheet:S,from_sheet:L}}(),PRN=function(){function o(L,j,M,D,F){F.raw?j[M][D]=L:L===""||(L==="TRUE"?j[M][D]=!0:L==="FALSE"?j[M][D]=!1:isNaN(fuzzynum(L))?isNaN(fuzzydate(L).getDate())?j[M][D]=L:j[M][D]=parseDate(L):j[M][D]=fuzzynum(L))}function u(L,j){var M=j||{},D=[];if(!L||L.length===0)return D;for(var F=L.split(/[\r\n]/),N=F.length-1;N>=0&&F[N].length===0;)--N;for(var G=10,B=0,H=0;H<=N;++H)B=F[H].indexOf(" "),B==-1?B=F[H].length:B++,G=Math.max(G,B);for(H=0;H<=N;++H){D[H]=[];var O=0;for(o(F[H].slice(0,G).trim(),D,H,O,M),O=1;O<=(F[H].length-G)/10+1;++O)o(F[H].slice(G+(O-1)*10,G+O*10).trim(),D,H,O,M)}return M.sheetRows&&(D=D.slice(0,M.sheetRows)),D}var T={44:",",9:"	",59:";",124:"|"},S={44:3,9:2,59:1,124:0};function E(L){for(var j={},M=!1,D=0,F=0;D<L.length;++D)(F=L.charCodeAt(D))==34?M=!M:!M&&F in T&&(j[F]=(j[F]||0)+1);F=[];for(D in j)Object.prototype.hasOwnProperty.call(j,D)&&F.push([j[D],D]);if(!F.length){j=S;for(D in j)Object.prototype.hasOwnProperty.call(j,D)&&F.push([j[D],D])}return F.sort(function(N,G){return N[0]-G[0]||S[N[1]]-S[G[1]]}),T[F.pop()[1]]||44}function C(L,j){var M=j||{},D="",F=M.dense?[]:{},N={s:{c:0,r:0},e:{c:0,r:0}};L.slice(0,4)=="sep="?L.charCodeAt(5)==13&&L.charCodeAt(6)==10?(D=L.charAt(4),L=L.slice(7)):L.charCodeAt(5)==13||L.charCodeAt(5)==10?(D=L.charAt(4),L=L.slice(6)):D=E(L.slice(0,1024)):M&&M.FS?D=M.FS:D=E(L.slice(0,1024));var G=0,B=0,H=0,O=0,V=0,U=D.charCodeAt(0),W=!1,K=0,Y=L.charCodeAt(0);L=L.replace(/\r\n/mg,`
242`);var ee=M.dateNF!=null?dateNF_regex(M.dateNF):null;function oe(){var se=L.slice(O,V),Q={};if(se.charAt(0)=='"'&&se.charAt(se.length-1)=='"'&&(se=se.slice(1,-1).replace(/""/g,'"')),se.length===0)Q.t="z";else if(M.raw)Q.t="s",Q.v=se;else if(se.trim().length===0)Q.t="s",Q.v=se;else if(se.charCodeAt(0)==61)se.charCodeAt(1)==34&&se.charCodeAt(se.length-1)==34?(Q.t="s",Q.v=se.slice(2,-1).replace(/""/g,'"')):fuzzyfmla(se)?(Q.t="n",Q.f=se.slice(1)):(Q.t="s",Q.v=se);else if(se=="TRUE")Q.t="b",Q.v=!0;else if(se=="FALSE")Q.t="b",Q.v=!1;else if(!isNaN(H=fuzzynum(se)))Q.t="n",M.cellText!==!1&&(Q.w=se),Q.v=H;else if(!isNaN(fuzzydate(se).getDate())||ee&&se.match(ee)){Q.z=M.dateNF||table_fmt[14];var ie=0;ee&&se.match(ee)&&(se=dateNF_fix(se,M.dateNF,se.match(ee)||[]),ie=1),M.cellDates?(Q.t="d",Q.v=parseDate(se,ie)):(Q.t="n",Q.v=datenum(parseDate(se,ie))),M.cellText!==!1&&(Q.w=SSF_format(Q.z,Q.v instanceof Date?datenum(Q.v):Q.v)),M.cellNF||delete Q.z}else Q.t="s",Q.v=se;if(Q.t=="z"||(M.dense?(F[G]||(F[G]=[]),F[G][B]=Q):F[encode_cell({c:B,r:G})]=Q),O=V+1,Y=L.charCodeAt(O),N.e.c<B&&(N.e.c=B),N.e.r<G&&(N.e.r=G),K==U)++B;else if(B=0,++G,M.sheetRows&&M.sheetRows<=G)return!0}e:for(;V<L.length;++V)switch(K=L.charCodeAt(V)){case 34:Y===34&&(W=!W);break;case U:case 10:case 13:if(!W&&oe())break e;break}return V-O>0&&oe(),F["!ref"]=encode_range(N),F}function _(L,j){return!(j&&j.PRN)||j.FS||L.slice(0,4)=="sep="||L.indexOf("	")>=0||L.indexOf(",")>=0||L.indexOf(";")>=0?C(L,j):aoa_to_sheet(u(L,j),j)}function P(L,j){var M="",D=j.type=="string"?[0,0,0,0]:firstbyte(L,j);switch(j.type){case"base64":M=Base64_decode(L);break;case"binary":M=L;break;case"buffer":j.codepage==65001?M=L.toString("utf8"):j.codepage&&typeof $cptable<"u"?M=$cptable.utils.decode(j.codepage,L):M=has_buf&&Buffer.isBuffer(L)?L.toString("binary"):a2s(L);break;case"array":M=cc2str(L);break;case"string":M=L;break;default:throw new Error("Unrecognized type "+j.type)}return D[0]==239&&D[1]==187&&D[2]==191?M=utf8read(M.slice(3)):j.type!="string"&&j.type!="buffer"&&j.codepage==65001?M=utf8read(M):j.type=="binary"&&typeof $cptable<"u"&&j.codepage&&(M=$cptable.utils.decode(j.codepage,$cptable.utils.encode(28591,M))),M.slice(0,19)=="socialcalc:version:"?ETH.to_sheet(j.type=="string"?M:utf8read(M),j):_(M,j)}function R(L,j){return sheet_to_workbook(P(L,j),j)}function I(L){for(var j=[],M=safe_decode_range(L["!ref"]),D,F=Array.isArray(L),N=M.s.r;N<=M.e.r;++N){for(var G=[],B=M.s.c;B<=M.e.c;++B){var H=encode_cell({r:N,c:B});if(D=F?(L[N]||[])[B]:L[H],!D||D.v==null){G.push("          ");continue}for(var O=(D.w||(format_cell(D),D.w)||"").slice(0,10);O.length<10;)O+=" ";G.push(O+(B===0?" ":""))}j.push(G.join(""))}return j.join(`
243`)}return{to_workbook:R,to_sheet:P,from_sheet:I}}();function read_wb_ID(o,u){var T=u||{},S=!!T.WTF;T.WTF=!0;try{var E=SYLK.to_workbook(o,T);return T.WTF=S,E}catch(C){if(T.WTF=S,!C.message.match(/SYLK bad record ID/)&&S)throw C;return PRN.to_workbook(o,u)}}var WK_=function(){function o(ne,ue,ce){if(ne){prep_blob(ne,ne.l||0);for(var fe=ce.Enum||de;ne.l<ne.length;){var ve=ne.read_shift(2),Te=fe[ve]||fe[65535],Se=ne.read_shift(2),ke=ne.l+Se,we=Te.f&&Te.f(ne,Se,ce);if(ne.l=ke,ue(we,Te,ve))return}}}function u(ne,ue){switch(ue.type){case"base64":return T(s2a(Base64_decode(ne)),ue);case"binary":return T(s2a(ne),ue);case"buffer":case"array":return T(ne,ue)}throw"Unsupported type "+ue.type}function T(ne,ue){if(!ne)return ne;var ce=ue||{},fe=ce.dense?[]:{},ve="Sheet1",Te="",Se=0,ke={},we=[],Le=[],pe={s:{r:0,c:0},e:{r:0,c:0}},Me=ce.sheetRows||0;if(ne[2]==0&&(ne[3]==8||ne[3]==9)&&ne.length>=16&&ne[14]==5&&ne[15]===108)throw new Error("Unsupported Works 3 for Mac file");if(ne[2]==2)ce.Enum=de,o(ne,function(Ie,Xe,et){switch(et){case 0:ce.vers=Ie,Ie>=4096&&(ce.qpro=!0);break;case 6:pe=Ie;break;case 204:Ie&&(Te=Ie);break;case 222:Te=Ie;break;case 15:case 51:ce.qpro||(Ie[1].v=Ie[1].v.slice(1));case 13:case 14:case 16:et==14&&(Ie[2]&112)==112&&(Ie[2]&15)>1&&(Ie[2]&15)<15&&(Ie[1].z=ce.dateNF||table_fmt[14],ce.cellDates&&(Ie[1].t="d",Ie[1].v=numdate(Ie[1].v))),ce.qpro&&Ie[3]>Se&&(fe["!ref"]=encode_range(pe),ke[ve]=fe,we.push(ve),fe=ce.dense?[]:{},pe={s:{r:0,c:0},e:{r:0,c:0}},Se=Ie[3],ve=Te||"Sheet"+(Se+1),Te="");var tt=ce.dense?(fe[Ie[0].r]||[])[Ie[0].c]:fe[encode_cell(Ie[0])];if(tt){tt.t=Ie[1].t,tt.v=Ie[1].v,Ie[1].z!=null&&(tt.z=Ie[1].z),Ie[1].f!=null&&(tt.f=Ie[1].f);break}ce.dense?(fe[Ie[0].r]||(fe[Ie[0].r]=[]),fe[Ie[0].r][Ie[0].c]=Ie[1]):fe[encode_cell(Ie[0])]=Ie[1];break}},ce);else if(ne[2]==26||ne[2]==14)ce.Enum=he,ne[2]==14&&(ce.qpro=!0,ne.l=0),o(ne,function(Ie,Xe,et){switch(et){case 204:ve=Ie;break;case 22:Ie[1].v=Ie[1].v.slice(1);case 23:case 24:case 25:case 37:case 39:case 40:if(Ie[3]>Se&&(fe["!ref"]=encode_range(pe),ke[ve]=fe,we.push(ve),fe=ce.dense?[]:{},pe={s:{r:0,c:0},e:{r:0,c:0}},Se=Ie[3],ve="Sheet"+(Se+1)),Me>0&&Ie[0].r>=Me)break;ce.dense?(fe[Ie[0].r]||(fe[Ie[0].r]=[]),fe[Ie[0].r][Ie[0].c]=Ie[1]):fe[encode_cell(Ie[0])]=Ie[1],pe.e.c<Ie[0].c&&(pe.e.c=Ie[0].c),pe.e.r<Ie[0].r&&(pe.e.r=Ie[0].r);break;case 27:Ie[14e3]&&(Le[Ie[14e3][0]]=Ie[14e3][1]);break;case 1537:Le[Ie[0]]=Ie[1],Ie[0]==Se&&(ve=Ie[1]);break}},ce);else throw new Error("Unrecognized LOTUS BOF "+ne[2]);if(fe["!ref"]=encode_range(pe),ke[Te||ve]=fe,we.push(Te||ve),!Le.length)return{SheetNames:we,Sheets:ke};for(var Pe={},Ue=[],qe=0;qe<Le.length;++qe)ke[we[qe]]?(Ue.push(Le[qe]||we[qe]),Pe[Le[qe]]=ke[Le[qe]]||ke[we[qe]]):(Ue.push(Le[qe]),Pe[Le[qe]]={"!ref":"A1"});return{SheetNames:Ue,Sheets:Pe}}function S(ne,ue){var ce=ue||{};if(+ce.codepage>=0&&set_cp(+ce.codepage),ce.type=="string")throw new Error("Cannot write WK1 to JS string");var fe=buf_array(),ve=safe_decode_range(ne["!ref"]),Te=Array.isArray(ne),Se=[];write_biff_rec(fe,0,C(1030)),write_biff_rec(fe,6,R(ve));for(var ke=Math.min(ve.e.r,8191),we=ve.s.r;we<=ke;++we)for(var Le=encode_row(we),pe=ve.s.c;pe<=ve.e.c;++pe){we===ve.s.r&&(Se[pe]=encode_col(pe));var Me=Se[pe]+Le,Pe=Te?(ne[we]||[])[pe]:ne[Me];if(!(!Pe||Pe.t=="z"))if(Pe.t=="n")(Pe.v|0)==Pe.v&&Pe.v>=-32768&&Pe.v<=32767?write_biff_rec(fe,13,D(we,pe,Pe.v)):write_biff_rec(fe,14,N(we,pe,Pe.v));else{var Ue=format_cell(Pe);write_biff_rec(fe,15,j(we,pe,Ue.slice(0,239)))}}return write_biff_rec(fe,1),fe.end()}function E(ne,ue){var ce=ue||{};if(+ce.codepage>=0&&set_cp(+ce.codepage),ce.type=="string")throw new Error("Cannot write WK3 to JS string");var fe=buf_array();write_biff_rec(fe,0,_(ne));for(var ve=0,Te=0;ve<ne.SheetNames.length;++ve)(ne.Sheets[ne.SheetNames[ve]]||{})["!ref"]&&write_biff_rec(fe,27,X(ne.SheetNames[ve],Te++));var Se=0;for(ve=0;ve<ne.SheetNames.length;++ve){var ke=ne.Sheets[ne.SheetNames[ve]];if(!(!ke||!ke["!ref"])){for(var we=safe_decode_range(ke["!ref"]),Le=Array.isArray(ke),pe=[],Me=Math.min(we.e.r,8191),Pe=we.s.r;Pe<=Me;++Pe)for(var Ue=encode_row(Pe),qe=we.s.c;qe<=we.e.c;++qe){Pe===we.s.r&&(pe[qe]=encode_col(qe));var Ie=pe[qe]+Ue,Xe=Le?(ke[Pe]||[])[qe]:ke[Ie];if(!(!Xe||Xe.t=="z"))if(Xe.t=="n")write_biff_rec(fe,23,oe(Pe,qe,Se,Xe.v));else{var et=format_cell(Xe);write_biff_rec(fe,22,K(Pe,qe,Se,et.slice(0,239)))}}++Se}}return write_biff_rec(fe,1),fe.end()}function C(ne){var ue=new_buf(2);return ue.write_shift(2,ne),ue}function _(ne){var ue=new_buf(26);ue.write_shift(2,4096),ue.write_shift(2,4),ue.write_shift(4,0);for(var ce=0,fe=0,ve=0,Te=0;Te<ne.SheetNames.length;++Te){var Se=ne.SheetNames[Te],ke=ne.Sheets[Se];if(!(!ke||!ke["!ref"])){++ve;var we=decode_range(ke["!ref"]);ce<we.e.r&&(ce=we.e.r),fe<we.e.c&&(fe=we.e.c)}}return ce>8191&&(ce=8191),ue.write_shift(2,ce),ue.write_shift(1,ve),ue.write_shift(1,fe),ue.write_shift(2,0),ue.write_shift(2,0),ue.write_shift(1,1),ue.write_shift(1,2),ue.write_shift(4,0),ue.write_shift(4,0),ue}function P(ne,ue,ce){var fe={s:{c:0,r:0},e:{c:0,r:0}};return ue==8&&ce.qpro?(fe.s.c=ne.read_shift(1),ne.l++,fe.s.r=ne.read_shift(2),fe.e.c=ne.read_shift(1),ne.l++,fe.e.r=ne.read_shift(2),fe):(fe.s.c=ne.read_shift(2),fe.s.r=ne.read_shift(2),ue==12&&ce.qpro&&(ne.l+=2),fe.e.c=ne.read_shift(2),fe.e.r=ne.read_shift(2),ue==12&&ce.qpro&&(ne.l+=2),fe.s.c==65535&&(fe.s.c=fe.e.c=fe.s.r=fe.e.r=0),fe)}function R(ne){var ue=new_buf(8);return ue.write_shift(2,ne.s.c),ue.write_shift(2,ne.s.r),ue.write_shift(2,ne.e.c),ue.write_shift(2,ne.e.r),ue}function I(ne,ue,ce){var fe=[{c:0,r:0},{t:"n",v:0},0,0];return ce.qpro&&ce.vers!=20768?(fe[0].c=ne.read_shift(1),fe[3]=ne.read_shift(1),fe[0].r=ne.read_shift(2),ne.l+=2):(fe[2]=ne.read_shift(1),fe[0].c=ne.read_shift(2),fe[0].r=ne.read_shift(2)),fe}function L(ne,ue,ce){var fe=ne.l+ue,ve=I(ne,ue,ce);if(ve[1].t="s",ce.vers==20768){ne.l++;var Te=ne.read_shift(1);return ve[1].v=ne.read_shift(Te,"utf8"),ve}return ce.qpro&&ne.l++,ve[1].v=ne.read_shift(fe-ne.l,"cstr"),ve}function j(ne,ue,ce){var fe=new_buf(7+ce.length);fe.write_shift(1,255),fe.write_shift(2,ue),fe.write_shift(2,ne),fe.write_shift(1,39);for(var ve=0;ve<fe.length;++ve){var Te=ce.charCodeAt(ve);fe.write_shift(1,Te>=128?95:Te)}return fe.write_shift(1,0),fe}function M(ne,ue,ce){var fe=I(ne,ue,ce);return fe[1].v=ne.read_shift(2,"i"),fe}function D(ne,ue,ce){var fe=new_buf(7);return fe.write_shift(1,255),fe.write_shift(2,ue),fe.write_shift(2,ne),fe.write_shift(2,ce,"i"),fe}function F(ne,ue,ce){var fe=I(ne,ue,ce);return fe[1].v=ne.read_shift(8,"f"),fe}function N(ne,ue,ce){var fe=new_buf(13);return fe.write_shift(1,255),fe.write_shift(2,ue),fe.write_shift(2,ne),fe.write_shift(8,ce,"f"),fe}function G(ne,ue,ce){var fe=ne.l+ue,ve=I(ne,ue,ce);if(ve[1].v=ne.read_shift(8,"f"),ce.qpro)ne.l=fe;else{var Te=ne.read_shift(2);V(ne.slice(ne.l,ne.l+Te),ve),ne.l+=Te}return ve}function B(ne,ue,ce){var fe=ue&32768;return ue&=-32769,ue=(fe?ne:0)+(ue>=8192?ue-16384:ue),(fe?"":"$")+(ce?encode_col(ue):encode_row(ue))}var H={51:["FALSE",0],52:["TRUE",0],70:["LEN",1],80:["SUM",69],81:["AVERAGEA",69],82:["COUNTA",69],83:["MINA",69],84:["MAXA",69],111:["T",1]},O=["","","","","","","","","","+","-","*","/","^","=","<>","<=",">=","<",">","","","","","&","","","","","","",""];function V(ne,ue){prep_blob(ne,0);for(var ce=[],fe=0,ve="",Te="",Se="",ke="";ne.l<ne.length;){var we=ne[ne.l++];switch(we){case 0:ce.push(ne.read_shift(8,"f"));break;case 1:Te=B(ue[0].c,ne.read_shift(2),!0),ve=B(ue[0].r,ne.read_shift(2),!1),ce.push(Te+ve);break;case 2:{var Le=B(ue[0].c,ne.read_shift(2),!0),pe=B(ue[0].r,ne.read_shift(2),!1);Te=B(ue[0].c,ne.read_shift(2),!0),ve=B(ue[0].r,ne.read_shift(2),!1),ce.push(Le+pe+":"+Te+ve)}break;case 3:if(ne.l<ne.length){console.error("WK1 premature formula end");return}break;case 4:ce.push("("+ce.pop()+")");break;case 5:ce.push(ne.read_shift(2));break;case 6:{for(var Me="";we=ne[ne.l++];)Me+=String.fromCharCode(we);ce.push('"'+Me.replace(/"/g,'""')+'"')}break;case 8:ce.push("-"+ce.pop());break;case 23:ce.push("+"+ce.pop());break;case 22:ce.push("NOT("+ce.pop()+")");break;case 20:case 21:ke=ce.pop(),Se=ce.pop(),ce.push(["AND","OR"][we-20]+"("+Se+","+ke+")");break;default:if(we<32&&O[we])ke=ce.pop(),Se=ce.pop(),ce.push(Se+O[we]+ke);else if(H[we]){if(fe=H[we][1],fe==69&&(fe=ne[ne.l++]),fe>ce.length){console.error("WK1 bad formula parse 0x"+we.toString(16)+":|"+ce.join("|")+"|");return}var Pe=ce.slice(-fe);ce.length-=fe,ce.push(H[we][0]+"("+Pe.join(",")+")")}else return we<=7?console.error("WK1 invalid opcode "+we.toString(16)):we<=24?console.error("WK1 unsupported op "+we.toString(16)):we<=30?console.error("WK1 invalid opcode "+we.toString(16)):we<=115?console.error("WK1 unsupported function opcode "+we.toString(16)):console.error("WK1 unrecognized opcode "+we.toString(16))}}ce.length==1?ue[1].f=""+ce[0]:console.error("WK1 bad formula parse |"+ce.join("|")+"|")}function U(ne){var ue=[{c:0,r:0},{t:"n",v:0},0];return ue[0].r=ne.read_shift(2),ue[3]=ne[ne.l++],ue[0].c=ne[ne.l++],ue}function W(ne,ue){var ce=U(ne);return ce[1].t="s",ce[1].v=ne.read_shift(ue-4,"cstr"),ce}function K(ne,ue,ce,fe){var ve=new_buf(6+fe.length);ve.write_shift(2,ne),ve.write_shift(1,ce),ve.write_shift(1,ue),ve.write_shift(1,39);for(var Te=0;Te<fe.length;++Te){var Se=fe.charCodeAt(Te);ve.write_shift(1,Se>=128?95:Se)}return ve.write_shift(1,0),ve}function Y(ne,ue){var ce=U(ne);ce[1].v=ne.read_shift(2);var fe=ce[1].v>>1;if(ce[1].v&1)switch(fe&7){case 0:fe=(fe>>3)*5e3;break;case 1:fe=(fe>>3)*500;break;case 2:fe=(fe>>3)/20;break;case 3:fe=(fe>>3)/200;break;case 4:fe=(fe>>3)/2e3;break;case 5:fe=(fe>>3)/2e4;break;case 6:fe=(fe>>3)/16;break;case 7:fe=(fe>>3)/64;break}return ce[1].v=fe,ce}function ee(ne,ue){var ce=U(ne),fe=ne.read_shift(4),ve=ne.read_shift(4),Te=ne.read_shift(2);if(Te==65535)return fe===0&&ve===3221225472?(ce[1].t="e",ce[1].v=15):fe===0&&ve===3489660928?(ce[1].t="e",ce[1].v=42):ce[1].v=0,ce;var Se=Te&32768;return Te=(Te&32767)-16446,ce[1].v=(1-Se*2)*(ve*Math.pow(2,Te+32)+fe*Math.pow(2,Te)),ce}function oe(ne,ue,ce,fe){var ve=new_buf(14);if(ve.write_shift(2,ne),ve.write_shift(1,ce),ve.write_shift(1,ue),fe==0)return ve.write_shift(4,0),ve.write_shift(4,0),ve.write_shift(2,65535),ve;var Te=0,Se=0,ke=0,we=0;return fe<0&&(Te=1,fe=-fe),Se=Math.log2(fe)|0,fe/=Math.pow(2,Se-31),we=fe>>>0,we&2147483648||(fe/=2,++Se,we=fe>>>0),fe-=we,we|=2147483648,we>>>=0,fe*=Math.pow(2,32),ke=fe>>>0,ve.write_shift(4,ke),ve.write_shift(4,we),Se+=16383+(Te?32768:0),ve.write_shift(2,Se),ve}function se(ne,ue){var ce=ee(ne);return ne.l+=ue-14,ce}function Q(ne,ue){var ce=U(ne),fe=ne.read_shift(4);return ce[1].v=fe>>6,ce}function ie(ne,ue){var ce=U(ne),fe=ne.read_shift(8,"f");return ce[1].v=fe,ce}function ae(ne,ue){var ce=ie(ne);return ne.l+=ue-10,ce}function re(ne,ue){return ne[ne.l+ue-1]==0?ne.read_shift(ue,"cstr"):""}function J(ne,ue){var ce=ne[ne.l++];ce>ue-1&&(ce=ue-1);for(var fe="";fe.length<ce;)fe+=String.fromCharCode(ne[ne.l++]);return fe}function te(ne,ue,ce){if(!(!ce.qpro||ue<21)){var fe=ne.read_shift(1);ne.l+=17,ne.l+=1,ne.l+=2;var ve=ne.read_shift(ue-21,"cstr");return[fe,ve]}}function Z(ne,ue){for(var ce={},fe=ne.l+ue;ne.l<fe;){var ve=ne.read_shift(2);if(ve==14e3){for(ce[ve]=[0,""],ce[ve][0]=ne.read_shift(2);ne[ne.l];)ce[ve][1]+=String.fromCharCode(ne[ne.l]),ne.l++;ne.l++}}return ce}function X(ne,ue){var ce=new_buf(5+ne.length);ce.write_shift(2,14e3),ce.write_shift(2,ue);for(var fe=0;fe<ne.length;++fe){var ve=ne.charCodeAt(fe);ce[ce.l++]=ve>127?95:ve}return ce[ce.l++]=0,ce}var de={0:{n:"BOF",f:parseuint16},1:{n:"EOF"},2:{n:"CALCMODE"},3:{n:"CALCORDER"},4:{n:"SPLIT"},5:{n:"SYNC"},6:{n:"RANGE",f:P},7:{n:"WINDOW1"},8:{n:"COLW1"},9:{n:"WINTWO"},10:{n:"COLW2"},11:{n:"NAME"},12:{n:"BLANK"},13:{n:"INTEGER",f:M},14:{n:"NUMBER",f:F},15:{n:"LABEL",f:L},16:{n:"FORMULA",f:G},24:{n:"TABLE"},25:{n:"ORANGE"},26:{n:"PRANGE"},27:{n:"SRANGE"},28:{n:"FRANGE"},29:{n:"KRANGE1"},32:{n:"HRANGE"},35:{n:"KRANGE2"},36:{n:"PROTEC"},37:{n:"FOOTER"},38:{n:"HEADER"},39:{n:"SETUP"},40:{n:"MARGINS"},41:{n:"LABELFMT"},42:{n:"TITLES"},43:{n:"SHEETJS"},45:{n:"GRAPH"},46:{n:"NGRAPH"},47:{n:"CALCCOUNT"},48:{n:"UNFORMATTED"},49:{n:"CURSORW12"},50:{n:"WINDOW"},51:{n:"STRING",f:L},55:{n:"PASSWORD"},56:{n:"LOCKED"},60:{n:"QUERY"},61:{n:"QUERYNAME"},62:{n:"PRINT"},63:{n:"PRINTNAME"},64:{n:"GRAPH2"},65:{n:"GRAPHNAME"},66:{n:"ZOOM"},67:{n:"SYMSPLIT"},68:{n:"NSROWS"},69:{n:"NSCOLS"},70:{n:"RULER"},71:{n:"NNAME"},72:{n:"ACOMM"},73:{n:"AMACRO"},74:{n:"PARSE"},102:{n:"PRANGES??"},103:{n:"RRANGES??"},104:{n:"FNAME??"},105:{n:"MRANGES??"},204:{n:"SHEETNAMECS",f:re},222:{n:"SHEETNAMELP",f:J},65535:{n:""}},he={0:{n:"BOF"},1:{n:"EOF"},2:{n:"PASSWORD"},3:{n:"CALCSET"},4:{n:"WINDOWSET"},5:{n:"SHEETCELLPTR"},6:{n:"SHEETLAYOUT"},7:{n:"COLUMNWIDTH"},8:{n:"HIDDENCOLUMN"},9:{n:"USERRANGE"},10:{n:"SYSTEMRANGE"},11:{n:"ZEROFORCE"},12:{n:"SORTKEYDIR"},13:{n:"FILESEAL"},14:{n:"DATAFILLNUMS"},15:{n:"PRINTMAIN"},16:{n:"PRINTSTRING"},17:{n:"GRAPHMAIN"},18:{n:"GRAPHSTRING"},19:{n:"??"},20:{n:"ERRCELL"},21:{n:"NACELL"},22:{n:"LABEL16",f:W},23:{n:"NUMBER17",f:ee},24:{n:"NUMBER18",f:Y},25:{n:"FORMULA19",f:se},26:{n:"FORMULA1A"},27:{n:"XFORMAT",f:Z},28:{n:"DTLABELMISC"},29:{n:"DTLABELCELL"},30:{n:"GRAPHWINDOW"},31:{n:"CPA"},32:{n:"LPLAUTO"},33:{n:"QUERY"},34:{n:"HIDDENSHEET"},35:{n:"??"},37:{n:"NUMBER25",f:Q},38:{n:"??"},39:{n:"NUMBER27",f:ie},40:{n:"FORMULA28",f:ae},142:{n:"??"},147:{n:"??"},150:{n:"??"},151:{n:"??"},152:{n:"??"},153:{n:"??"},154:{n:"??"},155:{n:"??"},156:{n:"??"},163:{n:"??"},174:{n:"??"},175:{n:"??"},176:{n:"??"},177:{n:"??"},184:{n:"??"},185:{n:"??"},186:{n:"??"},187:{n:"??"},188:{n:"??"},195:{n:"??"},201:{n:"??"},204:{n:"SHEETNAMECS",f:re},205:{n:"??"},206:{n:"??"},207:{n:"??"},208:{n:"??"},256:{n:"??"},259:{n:"??"},260:{n:"??"},261:{n:"??"},262:{n:"??"},263:{n:"??"},265:{n:"??"},266:{n:"??"},267:{n:"??"},268:{n:"??"},270:{n:"??"},271:{n:"??"},384:{n:"??"},389:{n:"??"},390:{n:"??"},393:{n:"??"},396:{n:"??"},512:{n:"??"},514:{n:"??"},513:{n:"??"},516:{n:"??"},517:{n:"??"},640:{n:"??"},641:{n:"??"},642:{n:"??"},643:{n:"??"},644:{n:"??"},645:{n:"??"},646:{n:"??"},647:{n:"??"},648:{n:"??"},658:{n:"??"},659:{n:"??"},660:{n:"??"},661:{n:"??"},662:{n:"??"},665:{n:"??"},666:{n:"??"},768:{n:"??"},772:{n:"??"},1537:{n:"SHEETINFOQP",f:te},1600:{n:"??"},1602:{n:"??"},1793:{n:"??"},1794:{n:"??"},1795:{n:"??"},1796:{n:"??"},1920:{n:"??"},2048:{n:"??"},2049:{n:"??"},2052:{n:"??"},2688:{n:"??"},10998:{n:"??"},12849:{n:"??"},28233:{n:"??"},28484:{n:"??"},65535:{n:""}};return{sheet_to_wk1:S,book_to_wk3:E,to_workbook:u}}();function parse_rpr(o){var u={},T=o.match(tagregex),S=0,E=!1;if(T)for(;S!=T.length;++S){var C=parsexmltag(T[S]);switch(C[0].replace(/\w*:/g,"")){case"<condense":break;case"<extend":break;case"<shadow":if(!C.val)break;case"<shadow>":case"<shadow/>":u.shadow=1;break;case"</shadow>":break;case"<charset":if(C.val=="1")break;u.cp=CS2CP[parseInt(C.val,10)];break;case"<outline":if(!C.val)break;case"<outline>":case"<outline/>":u.outline=1;break;case"</outline>":break;case"<rFont":u.name=C.val;break;case"<sz":u.sz=C.val;break;case"<strike":if(!C.val)break;case"<strike>":case"<strike/>":u.strike=1;break;case"</strike>":break;case"<u":if(!C.val)break;switch(C.val){case"double":u.uval="double";break;case"singleAccounting":u.uval="single-accounting";break;case"doubleAccounting":u.uval="double-accounting";break}case"<u>":case"<u/>":u.u=1;break;case"</u>":break;case"<b":if(C.val=="0")break;case"<b>":case"<b/>":u.b=1;break;case"</b>":break;case"<i":if(C.val=="0")break;case"<i>":case"<i/>":u.i=1;break;case"</i>":break;case"<color":C.rgb&&(u.color=C.rgb.slice(2,8));break;case"<color>":case"<color/>":case"</color>":break;case"<family":u.family=C.val;break;case"<family>":case"<family/>":case"</family>":break;case"<vertAlign":u.valign=C.val;break;case"<vertAlign>":case"<vertAlign/>":case"</vertAlign>":break;case"<scheme":break;case"<scheme>":case"<scheme/>":case"</scheme>":break;case"<extLst":case"<extLst>":case"</extLst>":break;case"<ext":E=!0;break;case"</ext>":E=!1;break;default:if(C[0].charCodeAt(1)!==47&&!E)throw new Error("Unrecognized rich format "+C[0])}}return u}var parse_rs=function(){var o=matchtag("t"),u=matchtag("rPr");function T(C){var _=C.match(o);if(!_)return{t:"s",v:""};var P={t:"s",v:unescapexml(_[1])},R=C.match(u);return R&&(P.s=parse_rpr(R[1])),P}var S=/<(?:\w+:)?r>/g,E=/<\/(?:\w+:)?r>/;return function(_){return _.replace(S,"").split(E).map(T).filter(function(P){return P.v})}}(),rs_to_html=function(){var u=/(\r\n|\n)/g;function T(E,C,_){var P=[];E.u&&P.push("text-decoration: underline;"),E.uval&&P.push("text-underline-style:"+E.uval+";"),E.sz&&P.push("font-size:"+E.sz+"pt;"),E.outline&&P.push("text-effect: outline;"),E.shadow&&P.push("text-shadow: auto;"),C.push('<span style="'+P.join("")+'">'),E.b&&(C.push("<b>"),_.push("</b>")),E.i&&(C.push("<i>"),_.push("</i>")),E.strike&&(C.push("<s>"),_.push("</s>"));var R=E.valign||"";return R=="superscript"||R=="super"?R="sup":R=="subscript"&&(R="sub"),R!=""&&(C.push("<"+R+">"),_.push("</"+R+">")),_.push("</span>"),E}function S(E){var C=[[],E.v,[]];return E.v?(E.s&&T(E.s,C[0],C[2]),C[0].join("")+C[1].replace(u,"<br/>")+C[2].join("")):""}return function(C){return C.map(S).join("")}}(),sitregex=/<(?:\w+:)?t[^>]*>([^<]*)<\/(?:\w+:)?t>/g,sirregex=/<(?:\w+:)?r>/,sirphregex=/<(?:\w+:)?rPh.*?>([\s\S]*?)<\/(?:\w+:)?rPh>/g;function parse_si(o,u){var T=u?u.cellHTML:!0,S={};return o?(o.match(/^\s*<(?:\w+:)?t[^>]*>/)?(S.t=unescapexml(utf8read(o.slice(o.indexOf(">")+1).split(/<\/(?:\w+:)?t>/)[0]||"")),S.r=utf8read(o),T&&(S.h=escapehtml(S.t))):o.match(sirregex)&&(S.r=utf8read(o),S.t=unescapexml(utf8read((o.replace(sirphregex,"").match(sitregex)||[]).join("").replace(tagregex,""))),T&&(S.h=rs_to_html(parse_rs(S.r)))),S):{t:""}}var sstr0=/<(?:\w+:)?sst([^>]*)>([\s\S]*)<\/(?:\w+:)?sst>/,sstr1=/<(?:\w+:)?(?:si|sstItem)>/g,sstr2=/<\/(?:\w+:)?(?:si|sstItem)>/;function parse_sst_xml(o,u){var T=[],S="";if(!o)return T;var E=o.match(sstr0);if(E){S=E[2].replace(sstr1,"").split(sstr2);for(var C=0;C!=S.length;++C){var _=parse_si(S[C].trim(),u);_!=null&&(T[T.length]=_)}E=parsexmltag(E[1]),T.Count=E.count,T.Unique=E.uniqueCount}return T}var straywsregex=/^\s|\s$|[\t\n\r]/;function write_sst_xml(o,u){if(!u.bookSST)return"";var T=[XML_HEADER];T[T.length]=writextag("sst",null,{xmlns:XMLNS_main[0],count:o.Count,uniqueCount:o.Unique});for(var S=0;S!=o.length;++S)if(o[S]!=null){var E=o[S],C="<si>";E.r?C+=E.r:(C+="<t",E.t||(E.t=""),E.t.match(straywsregex)&&(C+=' xml:space="preserve"'),C+=">"+escapexml(E.t)+"</t>"),C+="</si>",T[T.length]=C}return T.length>2&&(T[T.length]="</sst>",T[1]=T[1].replace("/>",">")),T.join("")}function parse_BrtBeginSst(o){return[o.read_shift(4),o.read_shift(4)]}function parse_sst_bin(o,u){var T=[],S=!1;return recordhopper(o,function(C,_,P){switch(P){case 159:T.Count=C[0],T.Unique=C[1];break;
243case 19:T.push(C);break;case 160:return!0;case 35:S=!0;break;case 36:S=!1;break;default:if(_.T,!S||u.WTF)throw new Error("Unexpected record 0x"+P.toString(16))}}),T}function write_BrtBeginSst(o,u){return u||(u=new_buf(8)),u.write_shift(4,o.Count),u.write_shift(4,o.Unique),u}var write_BrtSSTItem=write_RichStr;function write_sst_bin(o){var u=buf_array();write_record(u,159,write_BrtBeginSst(o));for(var T=0;T<o.length;++T)write_record(u,19,write_BrtSSTItem(o[T]));return write_record(u,160),u.end()}function _JS2ANSI(o){if(typeof $cptable<"u")return $cptable.utils.encode(current_ansi,o);for(var u=[],T=o.split(""),S=0;S<T.length;++S)u[S]=T[S].charCodeAt(0);return u}function parse_CRYPTOVersion(o,u){var T={};return T.Major=o.read_shift(2),T.Minor=o.read_shift(2),u>=4&&(o.l+=u-4),T}function parse_DataSpaceVersionInfo(o){var u={};return u.id=o.read_shift(0,"lpp4"),u.R=parse_CRYPTOVersion(o,4),u.U=parse_CRYPTOVersion(o,4),u.W=parse_CRYPTOVersion(o,4),u}function parse_DataSpaceMapEntry(o){for(var u=o.read_shift(4),T=o.l+u-4,S={},E=o.read_shift(4),C=[];E-- >0;)C.push({t:o.read_shift(4),v:o.read_shift(0,"lpp4")});if(S.name=o.read_shift(0,"lpp4"),S.comps=C,o.l!=T)throw new Error("Bad DataSpaceMapEntry: "+o.l+" != "+T);return S}function parse_DataSpaceMap(o){var u=[];o.l+=4;for(var T=o.read_shift(4);T-- >0;)u.push(parse_DataSpaceMapEntry(o));return u}function parse_DataSpaceDefinition(o){var u=[];o.l+=4;for(var T=o.read_shift(4);T-- >0;)u.push(o.read_shift(0,"lpp4"));return u}function parse_TransformInfoHeader(o){var u={};return o.read_shift(4),o.l+=4,u.id=o.read_shift(0,"lpp4"),u.name=o.read_shift(0,"lpp4"),u.R=parse_CRYPTOVersion(o,4),u.U=parse_CRYPTOVersion(o,4),u.W=parse_CRYPTOVersion(o,4),u}function parse_Primary(o){var u=parse_TransformInfoHeader(o);if(u.ename=o.read_shift(0,"8lpp4"),u.blksz=o.read_shift(4),u.cmode=
vendor: 4,538 bytes, line 243
243o.read_shift(4),o.read_shift(4)!=4)throw new Error("Bad !Primary record");return u}function parse_EncryptionHeader(o,u){var T=o.l+u,S={};S.Flags=o.read_shift(4)&63,o.l+=4,S.AlgID=o.read_shift(4);var E=!1;switch(S.AlgID){case 26126:case 26127:case 26128:E=S.Flags==36;break;case 26625:E=S.Flags==4;break;case 0:E=S.Flags==16||S.Flags==4||S.Flags==36;break;default:throw"Unrecognized encryption algorithm: "+S.AlgID}if(!E)throw new Error("Encryption Flags/AlgID mismatch");return S.AlgIDHash=o.read_shift(4),S.KeySize=o.read_shift(4),S.ProviderType=o.read_shift(4),o.l+=8,S.CSPName=o.read_shift(T-o.l>>1,"utf16le"),o.l=T,S}function parse_EncryptionVerifier(o,u){var T={},S=o.l+u;return o.l+=4,T.Salt=o.slice(o.l,o.l+16),o.l+=16,T.Verifier=o.slice(o.l,o.l+16),o.l+=16,o.read_shift(4),T.VerifierHash=o.slice(o.l,S),o.l=S,T}function parse_EncryptionInfo(o){var u=parse_CRYPTOVersion(o);switch(u.Minor){case 2:return[u.Minor,parse_EncInfoStd(o)];case 3:return[u.Minor,parse_EncInfoExt()];case 4:return[u.Minor,parse_EncInfoAgl(o)]}throw new Error("ECMA-376 Encrypted file unrecognized Version: "+u.Minor)}function parse_EncInfoStd(o){var u=o.read_shift(4);if((u&63)!=36)throw new Error("EncryptionInfo mismatch");var T=o.read_shift(4),S=parse_EncryptionHeader(o,T),E=parse_EncryptionVerifier(o,o.length-o.l);return{t:"Std",h:S,v:E}}function parse_EncInfoExt(){throw new Error("File is password-protected: ECMA-376 Extensible")}function parse_EncInfoAgl(o){var u=["saltSize","blockSize","keyBits","hashSize","cipherAlgorithm","cipherChaining","hashAlgorithm","saltValue"];o.l+=4;var T=o.read_shift(o.length-o.l,"utf8"),S={};return T.replace(tagregex,function(C){var _=parsexmltag(C);switch(strip_ns(_[0])){case"<?xml":break;case"<encryption":case"</encryption>":break;case"<keyData":u.forEach(function(P){S[P]=_[P]});break;case"<dataIntegrity":S.encryptedHmacKey=_.encryptedHmacKey,S.encryptedHmacValue=_.encryptedHmacValue;break;case"<keyEncryptors>":case"<keyEncryptors":S.encs=[];break;case"</keyEncryptors>":break;case"<keyEncryptor":S.uri=_.uri;break;case"</keyEncryptor>":break;case"<encryptedKey":S.encs.push(_);break;default:throw _[0]}}),S}function parse_RC4CryptoHeader(o,u){var T={},S=T.EncryptionVersionInfo=parse_CRYPTOVersion(o,4);if(u-=4,S.Minor!=2)throw new Error("unrecognized minor version code: "+S.Minor);if(S.Major>4||S.Major<2)throw new Error("unrecognized major version code: "+S.Major);T.Flags=o.read_shift(4),u-=4;var E=o.read_shift(4);return u-=4,T.EncryptionHeader=parse_EncryptionHeader(o,E),u-=E,T.EncryptionVerifier=parse_EncryptionVerifier(o,u),T}function parse_RC4Header(o){var u={},T=u.EncryptionVersionInfo=parse_CRYPTOVersion(o,4);if(T.Major!=1||T.Minor!=1)throw"unrecognized version code "+T.Major+" : "+T.Minor;return u.Salt=o.read_shift(16),u.EncryptedVerifier=o.read_shift(16),u.EncryptedVerifierHash=o.read_shift(16),u}function crypto_CreatePasswordVerifier_Method1(o){var u=0,T,S=_JS2ANSI(o),E=S.length+1,C,_,P,R,I;for(T=new_raw_buf(E),T[0]=S.length,C=1;C!=E;++C)T[C]=S[C-1];for(C=E-1;C>=0;--C)_=T[C],P=u&16384?1:0,R=u<<1&32767,I=P|R,u=I^_;return u^52811}var crypto_CreateXorArray_Method1=function(){var o=[187,255,255,186,255,255,185,128,0,190,15,0,191,15,0],u=[57840,7439,52380,33984,4364,3600,61902,12606,6258,57657,54287,34041,10252,43370,20163],T=[44796,19929,39858,10053,20106,40212,10761,31585,63170,64933,60267,50935,40399,11199,17763,35526,1453,2906,5812,11624,23248,885,1770,3540,7080,14160,28320,56640,55369,41139,20807,41614,21821,43642,17621,28485,56970,44341,19019,38038,14605,29210,60195,50791,40175,10751,21502,43004,24537,18387,36774,3949,7898,15796,31592,63184,47201,24803,49606,37805,14203,28406,56812,17824,35648,1697,3394,6788,13576,27152,43601,17539,35078,557,1114,2228,4456,30388,60776,51953,34243,7079,14158,28316,14128,28256,56512,43425,17251,34502,7597,13105,26210,52420,35241,883,1766,3532,4129,8258,16516,33032,4657,9314,18628],S=function(_){return(_/2|_*128)&255},E=function(_,P){return S(_^P)},C=function(_){for(var P=u[_.length-1],R=104,I=_.length-1;I>=0;--I)for(var L=_[I],j=0;j!=7;++j)L&64&&(P^=T[R]),L*=2,--R;return P};return function(_){for(var P=_JS2ANSI(_),R=C(P),I=P.length,L=new_raw_buf(16),j=0;j!=16;++j)L[j]=0;var M,D,F;for((I&1)===1&&(M=R>>8,L[I]=E(o[0],M),--I,M=R&255,D=P[P.length-1],L[I]=E(D,M));I>0;)--I,M=R>>8,L[I]=E(P[I],M),--I,M=R&255,L[I]=E(P[I],M);for(I=15,F=15-P.length;F>0;)M=R>>8,L[I]=E(o[F],M),--I,--F,M=R&255,L[I]=E(P[I],M),--I,--F;return L}}(),crypto_DecryptData_Method1=function(o,u,T,S,E){E||(E=u),S||(S=crypto_CreateXorArray_Method1(o));var C,_;
243for(C=0;C!=u.length;++C)_=u[C],_^=S[T],_=(_>>5|_<<3)&255,E[C]=_,++T;return[E,T,S]},crypto_MakeXorDecryptor=function(o){var u=0,T=crypto_CreateXorArray_Method1(o);return function(S){var E=crypto_DecryptData_Method1("",S,u,T);return u=E[1],E[0]}};function parse_XORObfuscation(o,u,T,S){var E={key:parseuint16(o),verificationBytes:parseuint16(o)};return T.password&&(E.verifier=crypto_CreatePasswordVerifier_Method1(T.password)),S.valid=E.verificationBytes===E.verifier,S.valid&&(S.insitu=crypto_MakeXorDecryptor(T.password)),E}function parse_FilePassHeader(o,u,T){var S=T||{};return S.Info=o.read_shift(2),o.l-=2,S.Info===1?S.Data=parse_RC4Header(o):S.Data=parse_RC4CryptoHeader(o,u),S}function parse_FilePass(o,u,T){var S={Type:T.biff>=8?o.read_shift(2):0};return S.Type?parse_FilePassHeader(o,u-2,S):parse_XORObfuscation(o,T.biff>=8?u:u-2,T,S),S}var RTF=function(){function o(E,C){switch(C.type){case"base64":return u(Base64_decode(E),C);case"binary":return u(E,C);case"buffer":return u(has_buf&&Buffer.isBuffer(E)?E.toString("binary"):a2s(E),C);case"array":return u(cc2str(E),C)}throw new Error("Unrecognized type "+C.type)}function u(E,C){var _=C||{},P=_.dense?[]:{},R=E.match(/\\trowd.*?\\row\b/g);if(!R.length)throw new Error("RTF missing table");var I={s:{c:0,r:0},e:{c:0,r:R.length-1}};return R.forEach(function(L,j){Array.isArray(P)&&(P[j]=[]);for(var M=/\\\w+\b/g,D=0,F,N=-1;F=M.exec(L);){switch(F[0]){case"\\cell":var G=L.slice(D,M.lastIndex-F[0].length);if(G[0]==" "&&(G=G.slice(1)),++N,G.length){var B={v:G,t:"s"};Array.isArray(P)?P[j][N]=B:P[encode_cell({r:j,c:N})]=B}break}D=M.lastIndex}N>I.e.c&&(I.e.c=N)}),P["!ref"]=encode_range(I),P}function T(E,C){return sheet_to_workbook(o(E,C),C)}function S(E){for(var C=["{\\rtf1\\ansi"],_=safe_decode_range(E["!ref"]),P,R=Array.isArray(E),I=_.s.r;I<=_.e.r;++I){C.push("\\trowd\\trautofit1");for(var L=_.s.c;L<=_.e.c;++L)C.push("\\cellx"+(L+1));for(C.push("\\pard\\intbl"),L=_.s.c;L<=_.e.c;++L){var j=encode_cell({r:I,c:L});P=R?(E[I]||[])[L]:E[j],!(!P||P.v==null&&(!P.f||P.F))&&(C.push(" "+(P.w||(format_cell(P),P.w))),C.push("\\cell"))}C.push("\\pard\\intbl\\row")}return C.join("")+"}"}return{to_workbook:T,to_sheet:o,from_sheet:S}}();function hex2RGB(o){var u=o.slice(o[0]==="#"?1:0).slice(0,6);return[parseInt(u.slice(0,2),16),parseInt(u.slice(2,4),16),parseInt(u.slice(4,6),16)]}function rgb2Hex(o){for(var u=0,T=1;u!=3;++u)T=T*256+(o[u]>255?255:o[u]<0?0:o[u]);return T.toString(16).toUpperCase().slice(1)}function rgb2HSL(o){var u=o[0]/255,T=o[1]/255,S=o[2]/255,E=Math.max(u,T,S),C=Math.min(u,T,S),_=E-C;if(_===0)return[0,0,u];var P=0,R=0,I=E+C;switch(R=_/(I>1?2-I:I),E){case u:P=((T-S)/_+6)%6;break;case T:P=(S-u)/_+2;break;case S:P=(u-T)/_+4;break}return[P/6,R,I/2]}function hsl2RGB(o){var u=o[0],T=o[1],S=o[2],E=T*2*(S<.5?S:1-S),C=S-E/2,_=[C,C,C],P=6*u,R;if(T!==0)switch(P|0){case 0:case 6:R=E*P,_[0]+=E,_[1]+=R;break;case 1:R=E*(2-P),_[0]+=R,_[1]+=E;break;case 2:R=E*(P-2),_[1]+=E,_[2]+=R;break;case 3:R=E*(4-P),_[1]+=R,_[2]+=E;break;case 4:R=E*(P-4),_[2]+=E,_[0]+=R;break;case 5:R=E*(6-P),_[2]+=R,_[0]+=E;break}for(var I=0;I!=3;++I)_[I]=Math.round(_[I]*255);return _}function rgb_tint(o,u){if(u===0)return o;var T=rgb2HSL(hex2RGB(o));return u<0?T[2]=T[2]*(1+u):T[2]=1-(1-T[2])*(1-u),rgb2Hex(hsl2RGB(T))}var DEF_MDW=6,MAX_MDW=15,MIN_MDW=1,MDW=DEF_MDW;function width2px(o){return Math.floor((o+Math.round(128/MDW)/256)*MDW)}function px2char(o){return Math.floor((o-5)/MDW*100+.5)/100}function char2width(o){return Math.round((o*MDW+5)/MDW*256)/256}function cycle_width(o){return char2width(px2char(width2px(o)))}function find_mdw_colw(o){var u=Math.abs(o-cycle_width(o)),T=MDW;if(u>.005)for(MDW=MIN_MDW;MDW<MAX_MDW;++MDW)Math.abs(o-cycle_width(o))<=u&&(u=Math.abs(o-cycle_width(o)),T=MDW);MDW=T}function process_col(o){o.width?(o.wpx=width2px(o.width),o.wch=px2char(o.wpx),o.MDW=MDW):o.wpx?(o.wch=px2char(o.wpx),o.width=char2width(o.wch),o.MDW=MDW):typeof o.wch=="number"&&(o.width=char2width(o.wch),o.wpx=width2px(o.width),o.MDW=MDW),o.customWidth&&delete o.customWidth}var DEF_PPI=96,PPI=DEF_PPI;function px2pt(o){return o*96/PPI}function pt2px(o){return o*PPI/96}var XLMLPatternTypeMap={None:"none",Solid:"solid",Gray50:"mediumGray",Gray75:"darkGray",Gray25:"lightGray",HorzStripe:"darkHorizontal",VertStripe:"darkVertical",ReverseDiagStripe:"darkDown",DiagStripe:"darkUp",DiagCross:"darkGrid",ThickDiagCross:"darkTrellis",ThinHorzStripe:"lightHorizontal",ThinVertStripe:"lightVertical",ThinReverseDiagStripe:"lightDown",ThinHorzCross:"lightGrid"};function parse_borders(o,u,T,S){u.Borders=[];var E={},C=!1;
vendor: 17,971 bytes, line 243
243(o[0].match(tagregex)||[]).forEach(function(_){var P=parsexmltag(_);switch(strip_ns(P[0])){case"<borders":case"<borders>":case"</borders>":break;case"<border":case"<border>":case"<border/>":E={},P.diagonalUp&&(E.diagonalUp=parsexmlbool(P.diagonalUp)),P.diagonalDown&&(E.diagonalDown=parsexmlbool(P.diagonalDown)),u.Borders.push(E);break;case"</border>":break;case"<left/>":break;case"<left":case"<left>":break;case"</left>":break;case"<right/>":break;case"<right":case"<right>":break;case"</right>":break;case"<top/>":break;case"<top":case"<top>":break;case"</top>":break;case"<bottom/>":break;case"<bottom":case"<bottom>":break;case"</bottom>":break;case"<diagonal":case"<diagonal>":case"<diagonal/>":break;case"</diagonal>":break;case"<horizontal":case"<horizontal>":case"<horizontal/>":break;case"</horizontal>":break;case"<vertical":case"<vertical>":case"<vertical/>":break;case"</vertical>":break;case"<start":case"<start>":case"<start/>":break;case"</start>":break;case"<end":case"<end>":case"<end/>":break;case"</end>":break;case"<color":case"<color>":break;case"<color/>":case"</color>":break;case"<extLst":case"<extLst>":case"</extLst>":break;case"<ext":C=!0;break;case"</ext>":C=!1;break;default:if(S&&S.WTF&&!C)throw new Error("unrecognized "+P[0]+" in borders")}})}function parse_fills(o,u,T,S){u.Fills=[];var E={},C=!1;(o[0].match(tagregex)||[]).forEach(function(_){var P=parsexmltag(_);switch(strip_ns(P[0])){case"<fills":case"<fills>":case"</fills>":break;case"<fill>":case"<fill":case"<fill/>":E={},u.Fills.push(E);break;case"</fill>":break;case"<gradientFill>":break;case"<gradientFill":case"</gradientFill>":u.Fills.push(E),E={};break;case"<patternFill":case"<patternFill>":P.patternType&&(E.patternType=P.patternType);break;case"<patternFill/>":case"</patternFill>":break;case"<bgColor":E.bgColor||(E.bgColor={}),P.indexed&&(E.bgColor.indexed=parseInt(P.indexed,10)),P.theme&&(E.bgColor.theme=parseInt(P.theme,10)),P.tint&&(E.bgColor.tint=parseFloat(P.tint)),P.rgb&&(E.bgColor.rgb=P.rgb.slice(-6));break;case"<bgColor/>":case"</bgColor>":break;case"<fgColor":E.fgColor||(E.fgColor={}),P.theme&&(E.fgColor.theme=parseInt(P.theme,10)),P.tint&&(E.fgColor.tint=parseFloat(P.tint)),P.rgb!=null&&(E.fgColor.rgb=P.rgb.slice(-6));break;case"<fgColor/>":case"</fgColor>":break;case"<stop":case"<stop/>":break;case"</stop>":break;case"<color":case"<color/>":break;case"</color>":break;case"<extLst":case"<extLst>":case"</extLst>":break;case"<ext":C=!0;break;case"</ext>":C=!1;break;default:if(S&&S.WTF&&!C)throw new Error("unrecognized "+P[0]+" in fills")}})}function parse_fonts(o,u,T,S){u.Fonts=[];var E={},C=!1;(o[0].match(tagregex)||[]).forEach(function(_){var P=parsexmltag(_);switch(strip_ns(P[0])){case"<fonts":case"<fonts>":case"</fonts>":break;case"<font":case"<font>":break;case"</font>":case"<font/>":u.Fonts.push(E),E={};break;case"<name":P.val&&(E.name=utf8read(P.val));break;case"<name/>":case"</name>":break;case"<b":E.bold=P.val?parsexmlbool(P.val):1;break;case"<b/>":E.bold=1;break;case"<i":E.italic=P.val?parsexmlbool(P.val):1;break;case"<i/>":E.italic=1;break;case"<u":switch(P.val){case"none":E.underline=0;break;case"single":E.underline=1;break;case"double":E.underline=2;break;case"singleAccounting":E.underline=33;break;case"doubleAccounting":E.underline=34;break}break;case"<u/>":E.underline=1;break;case"<strike":E.strike=P.val?parsexmlbool(P.val):1;break;case"<strike/>":E.strike=1;break;case"<outline":E.outline=P.val?parsexmlbool(P.val):1;break;case"<outline/>":E.outline=1;break;case"<shadow":E.shadow=P.val?parsexmlbool(P.val):1;break;case"<shadow/>":E.shadow=1;break;case"<condense":E.condense=P.val?parsexmlbool(P.val):1;break;case"<condense/>":E.condense=1;break;case"<extend":E.extend=P.val?parsexmlbool(P.val):1;break;case"<extend/>":E.extend=1;break;case"<sz":P.val&&(E.sz=+P.val);break;case"<sz/>":case"</sz>":break;case"<vertAlign":P.val&&(E.vertAlign=P.val);break;case"<vertAlign/>":case"</vertAlign>":break;case"<family":P.val&&(E.family=parseInt(P.val,10));break;case"<family/>":case"</family>":break;case"<scheme":P.val&&(E.scheme=P.val);break;case"<scheme/>":case"</scheme>":break;case"<charset":if(P.val=="1")break;P.codepage=CS2CP[parseInt(P.val,10)];break;case"<color":if(E.color||(E.color={}),P.auto&&(E.color.auto=parsexmlbool(P.auto)),P.rgb)E.color.rgb=P.rgb.slice(-6);else if(P.indexed){E.color.index=parseInt(P.indexed,10);var R=XLSIcv[E.color.index];E.color.index==81&&(R=XLSIcv[1]),R||(R=XLSIcv[1]),E.color.rgb=R[0].toString(16)+R[1].toString(16)+R[2].toString(16)}else P.theme&&(E.color.theme=parseInt(P.theme,10),P.tint&&(E.color.tint=parseFloat(P.tint)),P.theme&&T.themeElements&&T.themeElements.clrScheme&&(E.color.rgb=rgb_tint(T.themeElements.clrScheme[E.color.theme].rgb,E.color.tint||0)));break;case"<color/>":case"</color>":break;case"<AlternateContent":C=!0;break;case"</AlternateContent>":C=!1;break;case"<extLst":case"<extLst>":case"</extLst>":break;case"<ext":C=!0;break;case"</ext>":C=!1;break;default:if(S&&S.WTF&&!C)throw new Error("unrecognized "+P[0]+" in fonts")}})}function parse_numFmts(o,u,T){u.NumberFmt=[];for(var S=keys(table_fmt),E=0;E<S.length;++E)u.NumberFmt[S[E]]=table_fmt[S[E]];var C=o[0].match(tagregex);if(C)for(E=0;E<C.length;++E){var _=parsexmltag(C[E]);switch(strip_ns(_[0])){case"<numFmts":case"</numFmts>":case"<numFmts/>":case"<numFmts>":break;case"<numFmt":{var P=unescapexml(utf8read(_.formatCode)),R=parseInt(_.numFmtId,10);if(u.NumberFmt[R]=P,R>0){if(R>392){for(R=392;R>60&&u.NumberFmt[R]!=null;--R);u.NumberFmt[R]=P}SSF_load(P,R)}}break;case"</numFmt>":break;default:if(T.WTF)throw new Error("unrecognized "+_[0]+" in numFmts")}}}function write_numFmts(o){var u=["<numFmts>"];return[[5,8],[23,26],[41,44],[50,392]].forEach(function(T){for(var S=T[0];S<=T[1];++S)o[S]!=null&&(u[u.length]=writextag("numFmt",null,{numFmtId:S,formatCode:escapexml(o[S])}))}),u.length===1?"":(u[u.length]="</numFmts>",u[0]=writextag("numFmts",null,{count:u.length-2}).replace("/>",">"),u.join(""))}var cellXF_uint=["numFmtId","fillId","fontId","borderId","xfId"],cellXF_bool=["applyAlignment","applyBorder","applyFill","applyFont","applyNumberFormat","applyProtection","pivotButton","quotePrefix"];function parse_cellXfs(o,u,T){u.CellXf=[];var S,E=!1;(o[0].match(tagregex)||[]).forEach(function(C){var _=parsexmltag(C),P=0;switch(strip_ns(_[0])){case"<cellXfs":case"<cellXfs>":case"<cellXfs/>":case"</cellXfs>":break;case"<xf":case"<xf/>":for(S=_,delete S[0],P=0;P<cellXF_uint.length;++P)S[cellXF_uint[P]]&&(S[cellXF_uint[P]]=parseInt(S[cellXF_uint[P]],10));for(P=0;P<cellXF_bool.length;++P)S[cellXF_bool[P]]&&(S[cellXF_bool[P]]=parsexmlbool(S[cellXF_bool[P]]));if(u.NumberFmt&&S.numFmtId>392){for(P=392;P>60;--P)if(u.NumberFmt[S.numFmtId]==u.NumberFmt[P]){S.numFmtId=P;break}}u.CellXf.push(S);break;case"</xf>":break;case"<alignment":case"<alignment/>":var R={};_.vertical&&(R.vertical=_.vertical),_.horizontal&&(R.horizontal=_.horizontal),_.textRotation!=null&&(R.textRotation=_.textRotation),_.indent&&(R.indent=_.indent),_.wrapText&&(R.wrapText=parsexmlbool(_.wrapText)),S.alignment=R;break;case"</alignment>":break;case"<protection":break;case"</protection>":case"<protection/>":break;case"<AlternateContent":E=!0;break;case"</AlternateContent>":E=!1;break;case"<extLst":case"<extLst>":case"</extLst>":break;case"<ext":E=!0;break;case"</ext>":E=!1;break;default:if(T&&T.WTF&&!E)throw new Error("unrecognized "+_[0]+" in cellXfs")}})}function write_cellXfs(o){var u=[];return u[u.length]=writextag("cellXfs",null),o.forEach(function(T){u[u.length]=writextag("xf",null,T)}),u[u.length]="</cellXfs>",u.length===2?"":(u[0]=writextag("cellXfs",null,{count:u.length-2}).replace("/>",">"),u.join(""))}var parse_sty_xml=function(){var u=/<(?:\w+:)?numFmts([^>]*)>[\S\s]*?<\/(?:\w+:)?numFmts>/,T=/<(?:\w+:)?cellXfs([^>]*)>[\S\s]*?<\/(?:\w+:)?cellXfs>/,S=/<(?:\w+:)?fills([^>]*)>[\S\s]*?<\/(?:\w+:)?fills>/,E=/<(?:\w+:)?fonts([^>]*)>[\S\s]*?<\/(?:\w+:)?fonts>/,C=/<(?:\w+:)?borders([^>]*)>[\S\s]*?<\/(?:\w+:)?borders>/;return function(P,R,I){var L={};if(!P)return L;P=P.replace(/<!--([\s\S]*?)-->/mg,"").replace(/<!DOCTYPE[^\[]*\[[^\]]*\]>/gm,"");var j;return(j=P.match(u))&&parse_numFmts(j,L,I),(j=P.match(E))&&parse_fonts(j,L,R,I),(j=P.match(S))&&parse_fills(j,L,R,I),(j=P.match(C))&&parse_borders(j,L,R,I),(j=P.match(T))&&parse_cellXfs(j,L,I),L}}();function write_sty_xml(o,u){var T=[XML_HEADER,writextag("styleSheet",null,{xmlns:XMLNS_main[0],"xmlns:vt":XMLNS.vt})],S;return o.SSF&&(S=write_numFmts(o.SSF))!=null&&(T[T.length]=S),T[T.length]='<fonts count="1"><font><sz val="12"/><color theme="1"/><name val="Calibri"/><family val="2"/><scheme val="minor"/></font></fonts>',T[T.length]='<fills count="2"><fill><patternFill patternType="none"/></fill><fill><patternFill patternType="gray125"/></fill></fills>',T[T.length]='<borders count="1"><border><left/><right/><top/><bottom/><diagonal/></border></borders>',T[T.length]='<cellStyleXfs count="1"><xf numFmtId="0" fontId="0" fillId="0" borderId="0"/></cellStyleXfs>',(S=write_cellXfs(u.cellXfs))&&(T[T.length]=S),T[T.length]='<cellStyles count="1"><cellStyle name="Normal" xfId="0" builtinId="0"/></cellStyles>',T[T.length]='<dxfs count="0"/>',T[T.length]='<tableStyles count="0" defaultTableStyle="TableStyleMedium9" defaultPivotStyle="PivotStyleMedium4"/>',T.length>2&&(T[T.length]="</styleSheet>",T[1]=T[1].replace("/>",">")),T.join("")}function parse_BrtFmt(o,u){var T=o.read_shift(2),S=parse_XLWideString(o);return[T,S]}function write_BrtFmt(o,u,T){T||(T=new_buf(6+4*u.length)),T.write_shift(2,o),write_XLWideString(u,T);var S=T.length>T.l?T.slice(0,T.l):T;return T.l==null&&(T.l=T.length),S}function parse_BrtFont(o,u,T){var S={};S.sz=o.read_shift(2)/20;var E=parse_FontFlags(o);E.fItalic&&(S.italic=1),E.fCondense&&(S.condense=1),E.fExtend&&(S.extend=1),E.fShadow&&(S.shadow=1),E.fOutline&&(S.outline=1),E.fStrikeout&&(S.strike=1);var C=o.read_shift(2);switch(C===700&&(S.bold=1),o.read_shift(2)){case 1:S.vertAlign="superscript";break;case 2:S.vertAlign="subscript";break}var _=o.read_shift(1);_!=0&&(S.underline=_);var P=o.read_shift(1);P>0&&(S.family=P);var R=o.read_shift(1);switch(R>0&&(S.charset=R),o.l++,S.color=parse_BrtColor(o),o.read_shift(1)){case 1:S.scheme="major";break;case 2:S.scheme="minor";break}return S.name=parse_XLWideString(o),S}function write_BrtFont(o,u){u||(u=new_buf(25+4*32)),u.write_shift(2,o.sz*20),write_FontFlags(o,u),u.write_shift(2,o.bold?700:400);var T=0;o.vertAlign=="superscript"?T=1:o.vertAlign=="subscript"&&(T=2),u.write_shift(2,T),u.write_shift(1,o.underline||0),u.write_shift(1,o.family||0),u.write_shift(1,o.charset||0),u.write_shift(1,0),write_BrtColor(o.color,u);var S=0;return S=2,u.write_shift(1,S),write_XLWideString(o.name,u),u.length>u.l?u.slice(0,u.l):u}var XLSBFillPTNames=["none","solid","mediumGray","darkGray","lightGray","darkHorizontal","darkVertical","darkDown","darkUp","darkGrid","darkTrellis","lightHorizontal","lightVertical","lightDown","lightUp","lightGrid","lightTrellis","gray125","gray0625"],rev_XLSBFillPTNames,parse_BrtFill=parsenoop;function write_BrtFill(o,u){u||(u=new_buf(4*3+8*7+16*1)),rev_XLSBFillPTNames||(rev_XLSBFillPTNames=evert(XLSBFillPTNames));var T=rev_XLSBFillPTNames[o.patternType];T==null&&(T=40),u.write_shift(4,T);var S=0;if(T!=40)for(write_BrtColor({auto:1},u),write_BrtColor({auto:1},u);S<12;++S)u.write_shift(4,0);else{for(;S<4;++S)u.write_shift(4,0);for(;S<12;++S)u.write_shift(4,0)}return u.length>u.l?u.slice(0,u.l):u}function parse_BrtXF(o,u){var T=o.l+u,S=o.read_shift(2),E=o.read_shift(2);return o.l=T,{ixfe:S,numFmtId:E}}function write_BrtXF(o,u,T){T||(T=new_buf(16)),T.write_shift(2,u||0),T.write_shift(2,o.numFmtId||0),T.write_shift(2,0),T.write_shift(2,0),T.write_shift(2,0),T.write_shift(1,0),T.write_shift(1,0);var S=0;return T.write_shift(1,S),T.write_shift(1,0),T.write_shift(1,0),T.write_shift(1,0),T}function write_Blxf(o,u){return u||(u=new_buf(10)),u.write_shift(1,0),u.write_shift(1,0),u.write_shift(4,0),u.write_shift(4,0),u}var parse_BrtBorder=parsenoop;function write_BrtBorder(o,u){return u||(u=new_buf(51)),u.write_shift(1,0),write_Blxf(null,u),write_Blxf(null,u),write_Blxf(null,u),write_Blxf(null,u),write_Blxf(null,u),u.length>u.l?u.slice(0,u.l):u}function write_BrtStyle(o,u){return u||(u=new_buf(12+4*10)),u.write_shift(4,o.xfId),u.write_shift(2,1),u.write_shift(1,0),u.write_shift(1,0),write_XLNullableWideString(o.name||"",u),u.length>u.l?u.slice(0,u.l):u}function write_BrtBeginTableStyles(o,u,T){var S=new_buf(2052);return S.write_shift(4,o),write_XLNullableWideString(u,S),write_XLNullableWideString(T,S),S.length>S.l?S.slice(0,S.l):S}function parse_sty_bin(o,u,T){var S={};S.NumberFmt=[];for(var E in table_fmt)S.NumberFmt[E]=table_fmt[E];S.CellXf=[],S.Fonts=[];var C=[],_=!1;return recordhopper(o,function(R,I,L){switch(L){case 44:S.NumberFmt[R[0]]=R[1],SSF_load(R[1],R[0]);break;case 43:S.Fonts.push(R),R.color.theme!=null&&u&&u.themeElements&&u.themeElements.clrScheme&&(R.color.rgb=rgb_tint(u.themeElements.clrScheme[R.color.theme].rgb,R.color.tint||0));break;case 1025:break;case 45:break;case 46:break;case 47:C[C.length-1]==617&&S.CellXf.push(R);break;case 48:case 507:case 572:case 475:break;case 1171:case 2102:case 1130:case 512:case 2095:case 3072:break;case 35:_=!0;break;case 36:_=!1;break;case 37:C.push(L),_=!0;break;case 38:C.pop(),_=!1;break;default:if(I.T>0)C.push(L);else if(I.T<0)C.pop();else if(!_||T.WTF&&C[C.length-1]!=37)throw new Error("Unexpected record 0x"+L.toString(16))}}),S}function write_FMTS_bin(o,u){if(u){var T=0;[[5,8],[23,26],[41,44],[50,392]].forEach(function(S){for(var E=S[0];E<=S[1];++E)u[E]!=null&&++T}),T!=0&&(write_record(o,615,write_UInt32LE(T)),[[5,8],[23,26],[41,44],[50,392]].forEach(function(S){for(var E=S[0];E<=S[1];++E)u[E]!=null&&write_record(o,44,write_BrtFmt(E,u[E]))}),write_record(o,616))}}function write_FONTS_bin(o){var u=1;write_record(o,611,write_UInt32LE(u)),write_record(o,43,write_BrtFont({sz:12,color:{theme:1},name:"Calibri",family:2})),write_record(o,612)}function write_FILLS_bin(o){var u=2;write_record(o,603,write_UInt32LE(u)),write_record(o,45,write_BrtFill({patternType:"none"})),write_record(o,45,write_BrtFill({patternType:"gray125"})),write_record(o,604)}function write_BORDERS_bin(o){var u=1;write_record(o,613,write_UInt32LE(u)),write_record(o,46,write_BrtBorder()),write_record(o,614)}function write_CELLSTYLEXFS_bin(o){var u=1;write_record(o,626,write_UInt32LE(u)),write_record(o,47,write_BrtXF({numFmtId:0},65535)),write_record(o,627)}function write_CELLXFS_bin(o,u){write_record(o,617,write_UInt32LE(u.length)),u.forEach(function(T){write_record(o,47,write_BrtXF(T,0))}),write_record(o,618)}function write_STYLES_bin(o){var u=1;write_record(o,619,write_UInt32LE(u)),write_record(o,48,write_BrtStyle({xfId:0,name:"Normal"})),write_record(o,620)}function write_DXFS_bin(o){var u=0;write_record(o,505,write_UInt32LE(u)),write_record(o,506)}function write_TABLESTYLES_bin(o){var u=0;write_record(o,508,write_BrtBeginTableStyles(u,"TableStyleMedium9","PivotStyleMedium4")),write_record(o,509)}function write_sty_bin(o,u){var T=buf_array();return write_record(T,278),write_FMTS_bin(T,o.SSF),write_FONTS_bin(T),write_FILLS_bin(T),write_BORDERS_bin(T),write_CELLSTYLEXFS_bin(T),write_CELLXFS_bin(T,u.cellXfs),write_STYLES_bin(T),write_DXFS_bin(T),write_TABLESTYLES_bin(T),write_record(T,279),T.end()}var XLSXThemeClrScheme=["</a:lt1>","</a:dk1>","</a:lt2>","</a:dk2>","</a:accent1>","</a:accent2>","</a:accent3>","</a:accent4>","</a:accent5>","</a:accent6>","</a:hlink>","</a:folHlink>"];function parse_clrScheme(o,u,T){u.themeElements.clrScheme=[];var S={};(o[0].match(tagregex)||[]).forEach(function(E){var C=parsexmltag(E);switch(C[0]){case"<a:clrScheme":case"</a:clrScheme>":break;case"<a:srgbClr":S.rgb=C.val;break;case"<a:sysClr":S.rgb=C.lastClr;break;case"<a:dk1>":case"</a:dk1>":case"<a:lt1>":case"</a:lt1>":case"<a:dk2>":case"</a:dk2>":case"<a:lt2>":case"</a:lt2>":case"<a:accent1>":case"</a:accent1>":case"<a:accent2>":case"</a:accent2>":case"<a:accent3>":case"</a:accent3>":case"<a:accent4>":case"</a:accent4>":case"<a:accent5>":case"</a:accent5>":case"<a:accent6>":case"</a:accent6>":case"<a:hlink>":case"</a:hlink>":case"<a:folHlink>":case"</a:folHlink>":C[0].charAt(1)==="/"?(u.themeElements.clrScheme[XLSXThemeClrScheme.indexOf(C[0])]=S,S={}):S.name=C[0].slice(3,C[0].length-1);break;default:if(T&&T.WTF)throw new Error("Unrecognized "+C[0]+" in clrScheme")}})}function parse_fontScheme(){}function parse_fmtScheme(){}var clrsregex=/<a:clrScheme([^>]*)>[\s\S]*<\/a:clrScheme>/,fntsregex=/<a:fontScheme([^>]*)>[\s\S]*<\/a:fontScheme>/,fmtsregex=/<a:fmtScheme([^>]*)>[\s\S]*<\/a:fmtScheme>/;function parse_themeElements(o,u,T){u.themeElements={};var S;[["clrScheme",clrsregex,parse_clrScheme],["fontScheme",fntsregex,parse_fontScheme],["fmtScheme",fmtsregex,parse_fmtScheme]].forEach(function(E){if(!(S=o.match(E[1])))throw new Error(E[0]+" not found in themeElements");E[2](S,u,T)})}var themeltregex=/<a:themeElements([^>]*)>[\s\S]*<\/a:themeElements>/;function parse_theme_xml(o,u){(!o||o.length===0)&&(o=write_theme());var T,S={};if(!(T=o.match(themeltregex)))throw new Error("themeElements not found in theme");return parse_themeElements(T[0],S,u),S.raw=o,S}function write_theme(o,u){if(u&&u.themeXLSX)return u.themeXLSX;if(o&&typeof o.raw=="string")return o.raw;var T=[XML_HEADER];return T[T.length]='<a:theme xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" name="Office Theme">',T[T.length]="<a:themeElements>",T[T.length]='<a:clrScheme name="Office">',T[T.length]='<a:dk1><a:sysClr val="windowText" lastClr="000000"/></a:dk1>',T[T.length]='<a:lt1><a:sysClr val="window" lastClr="FFFFFF"/></a:lt1>',T[T.length]='<a:dk2><a:srgbClr val="1F497D"/></a:dk2>',T[T.length]='<a:lt2><a:srgbClr val="EEECE1"/></a:lt2>',T[T.length]='<a:accent1><a:srgbClr val="4F81BD"/></a:accent1>',T[T.length]='<a:accent2><a:srgbClr val="C0504D"/></a:accent2>',T[T.length]='<a:accent3><a:srgbClr val="9BBB59"/></a:accent3>
243',T[T.length]='<a:accent4><a:srgbClr val="8064A2"/></a:accent4>',T[T.length]='<a:accent5><a:srgbClr val="4BACC6"/></a:accent5>',T[T.length]='<a:accent6><a:srgbClr val="F79646"/></a:accent6>',T[T.length]='<a:hlink><a:srgbClr val="0000FF"/></a:hlink>',T[T.length]='<a:folHlink><a:srgbClr val="800080"/></a:folHlink>',T[T.length]="</a:clrScheme>",T[T.length]='<a:fontScheme name="Office">',T[T.length]="<a:majorFont>",T[T.length]='<a:latin typeface="Cambria"/>',T[T.length]='<a:ea typeface=""/>',T[T.length]='<a:cs typeface=""/>',T[T.length]='<a:font script="Jpan" typeface="MS Pゴシック"/>',T[T.length]='<a:font script="Hang" typeface="맑은 고딕"/>',T[T.length]='<a:font script="Hans" typeface="宋体"/>',T[T.length]='<a:font script="Hant" typeface="新細明體"/>',T[T.length]='<a:font script="Arab" typeface="Times New Roman"/>',T[T.length]='<a:font script="Hebr" typeface="Times New Roman"/>',T[T.length]='<a:font script="Thai" typeface="Tahoma"/>',T[T.length]='<a:font script="Ethi" typeface="Nyala"/>',T[T.length]='<a:font script="Beng" typeface="Vrinda"/>',T[T.length]='<a:font script="Gujr" typeface="Shruti"/>',T[T.length]='<a:font script="Khmr" typeface="MoolBoran"/>',T[T.length]='<a:font script="Knda" typeface="Tunga"/>',T[T.length]='<a:font script="Guru" typeface="Raavi"/>',T[T.length]='<a:font script="Cans" typeface="Euphemia"/>',T[T.length]='<a:font script="Cher" typeface="Plantagenet Cherokee"/>',T[T.length]='<a:font script="Yiii" typeface="Microsoft Yi Baiti"/>',T[T.length]='<a:font script="Tibt" typeface="Microsoft Himalaya"/>',T[T.length]='<a:font script="Thaa" typeface="MV Boli"/>',T[T.length]='<a:font script="Deva" typeface="Mangal"/>',T[T.length]='<a:font script="Telu" typeface="Gautami"/>',T[T.length]='<a:font script="Taml" typeface="Latha"/>',T[T.length]='<a:font script="Syrc" typeface="Estrangelo Edessa"/>',T[T.length]='<a:font script="Orya" typeface="Kalinga"/>',T[T.length]='<a:font script="Mlym" typeface="Kartika"/>',T[T.length]='<a:font script="Laoo" typeface="DokChampa"/>',T[T.length]='<a:font script="Sinh" typeface="Iskoola Pota"/>',T[T.length]='<a:font script="Mong" typeface="Mongolian Baiti"/>',T[T.length]='<a:font script="Viet" typeface="Times New Roman"/>',T[T.length]='<a:font script="Uigh" typeface="Microsoft Uighur"/>',T[T.length]='<a:font script="Geor" typeface="Sylfaen"/>',T[T.length]="</a:majorFont>",T[T.length]="<a:minorFont>",T[T.length]='<a:latin typeface="Calibri"/>',T[T.length]='<a:ea typeface=""/>',T[T.length]='<a:cs typeface=""/>',T[T.length]='<a:font script="Jpan" typeface="MS Pゴシック"/>',T[T.length]='<a:font script="Hang" typeface="맑은 고딕"/>',T[T.length]='<a:font script="Hans" typeface="宋体"/>',T[T.length]='<a:font script="Hant" typeface="新細明體"/>',T[T.length]='<a:font script="Arab" typeface="Arial"/>',T[T.length]='<a:font script="Hebr" typeface="Arial"/>',T[T.length]='<a:font script="Thai" typeface="Tahoma"/>',T[T.length]='<a:font script="Ethi" typeface="Nyala"/>',T[T.length]='<a:font script="Beng" typeface="Vrinda"/>',T[T.length]='<a:font script="Gujr" typeface="Shruti"/>',T[T.length]='<a:font script="Khmr" typeface="DaunPenh"/>',T[T.length]='<a:font script="Knda" typeface="Tunga"/>',T[T.length]='<a:font script="Guru" typeface="Raavi"/>',T[T.length]='<a:font script="Cans" typeface="Euphemia"/>',T[T.length]='<a:font script="Cher" typeface="Plantagenet Cherokee"/>',T[T.length]='<a:font script="Yiii" typeface="Microsoft Yi Baiti"/>',T[T.length]='<a:font script="Tibt" typeface="Microsoft Himalaya"/>',T[T.length]='<a:font script="Thaa" typeface="MV Boli"/>',T[T.length]='<a:font script="Deva" typeface="Mangal"/>',T[T.length]='<a:font script="Telu" typeface="Gautami"/>',T[T.length]='<a:font script="Taml" typeface="Latha"/>',T[T.length]='<a:font script="Syrc" typeface="Estrangelo Edessa"/>',T[T.length]='<a:font script="Orya" typeface="Kalinga"/>',T[T.length]='<a:font script="Mlym" typeface="Kartika"/>',T[T.length]='<a:font script="Laoo" typeface="DokChampa"/>',T[T.length]='<a:font script="Sinh" typeface="Iskoola Pota"/>',T[T.length]='<a:font script="Mong" typeface="Mongolian Baiti"/>
243',T[T.length]='<a:font script="Viet" typeface="Arial"/>',T[T.length]='<a:font script="Uigh" typeface="Microsoft Uighur"/>',T[T.length]='<a:font script="Geor" typeface="Sylfaen"/>',T[T.length]="</a:minorFont>",T[T.length]="</a:fontScheme>",T[T.length]='<a:fmtScheme name="Office">',T[T.length]="<a:fillStyleLst>",T[T.length]='<a:solidFill><a:schemeClr val="phClr"/></a:solidFill>',T[T.length]='<a:gradFill rotWithShape="1">',T[T.length]="<a:gsLst>",T[T.length]='<a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="50000"/><a:satMod val="300000"/></a:schemeClr></a:gs>',T[T.length]='<a:gs pos="35000"><a:schemeClr val="phClr"><a:tint val="37000"/><a:satMod val="300000"/></a:schemeClr></a:gs>',T[T.length]='<a:gs pos="100000"><a:schemeClr val="phClr"><a:tint val="15000"/><a:satMod val="350000"/></a:schemeClr></a:gs>',T[T.length]="</a:gsLst>",T[T.length]='<a:lin ang="16200000" scaled="1"/>',T[T.length]="</a:gradFill>",T[T.length]='<a:gradFill rotWithShape="1">',T[T.length]="<a:gsLst>",T[T.length]='<a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="100000"/><a:shade val="100000"/><a:satMod val="130000"/></a:schemeClr></a:gs>',T[T.length]='<a:gs pos="100000"><a:schemeClr val="phClr"><a:tint val="50000"/><a:shade val="100000"/><a:satMod val="350000"/></a:schemeClr></a:gs>',T[T.length]="</a:gsLst>",T[T.length]='<a:lin ang="16200000" scaled="0"/>',T[T.length]="</a:gradFill>",T[T.length]="</a:fillStyleLst>",T[T.length]="<a:lnStyleLst>",T[T.length]='<a:ln w="9525" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"><a:shade val="95000"/><a:satMod val="105000"/></a:schemeClr></a:solidFill><a:prstDash val="solid"/></a:ln>',T[T.length]='<a:ln w="25400" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/></a:ln>',T[T.length]='<a:ln w="38100" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/></a:ln>',T[T.length]="</a:lnStyleLst>",T[T.length]="<a:effectStyleLst>",T[T.length]="<a:effectStyle>",T[T.length]="<a:effectLst>",T[T.length]='<a:outerShdw blurRad="40000" dist="20000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="38000"/></a:srgbClr></a:outerShdw>',T[T.length]="</a:effectLst>",T[T.length]="</a:effectStyle>",T[T.length]="<a:effectStyle>",T[T.length]="<a:effectLst>",T[T.length]='<a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="35000"/></a:srgbClr></a:outerShdw>',T[T.length]="</a:effectLst>",T[T.length]="</a:effectStyle>",T[T.length]="<a:effectStyle>",T[T.length]="<a:effectLst>",T[T.length]='<a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="35000"/></a:srgbClr></a:outerShdw>',T[T.length]="</a:effectLst>",T[T.length]='<a:scene3d><a:camera prst="orthographicFront"><a:rot lat="0" lon="0" rev="0"/></a:camera><a:lightRig rig="threePt" dir="t"><a:rot lat="0" lon="0" rev="1200000"/></a:lightRig></a:scene3d>',T[T.length]='<a:sp3d><a:bevelT w="63500" h="25400"/></a:sp3d>',T[T.length]="</a:effectStyle>",T[T.length]="</a:effectStyleLst>",T[T.length]="<a:bgFillStyleLst>",T[T.length]='<a:solidFill><a:schemeClr val="phClr"/></a:solidFill>',T[T.length]='<a:gradFill rotWithShape="1">',T[T.length]="<a:gsLst>",T[T.length]='<a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="40000"/><a:satMod val="350000"/></a:schemeClr></a:gs>',T[T.length]='<a:gs pos="40000"><a:schemeClr val="phClr"><a:tint val="45000"/><a:shade val="99000"/><a:satMod val="350000"/></a:schemeClr></a:gs>',T[T.length]='<a:gs pos="100000"><a:schemeClr val="phClr"><a:shade val="20000"/><a:satMod val="255000"/></a:schemeClr></a:gs>',T[T.length]="</a:gsLst>",T[T.length]='<a:path path="circle"><a:fillToRect l="50000" t="-80000" r="50000" b="180000"/></a:path>',T[T.length]="</a:gradFill>",T[T.length]='<a:gradFill rotWithShape="1">',T[T.length]="<a:gsLst>",T[T.length]='<a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="80000"/><a:satMod val="300000"/></a:schemeClr></a:gs>',T[T.length]='<a:gs pos="100000"><a:schemeClr val="phClr"><a:shade val="30000"/><a:satMod val="200000"/></a:schemeClr></a:gs>',T[T.length]="</a:gsLst>
243",T[T.length]='<a:path path="circle"><a:fillToRect l="50000" t="50000" r="50000" b="50000"/></a:path>',T[T.length]="</a:gradFill>",T[T.length]="</a:bgFillStyleLst>",T[T.length]="</a:fmtScheme>",T[T.length]="</a:themeElements>",T[T.length]="<a:objectDefaults>",T[T.length]="<a:spDef>",T[T.length]='<a:spPr/><a:bodyPr/><a:lstStyle/><a:style><a:lnRef idx="1"><a:schemeClr val="accent1"/></a:lnRef><a:fillRef idx="3"><a:schemeClr val="accent1"/></a:fillRef><a:effectRef idx="2"><a:schemeClr val="accent1"/></a:effectRef><a:fontRef idx="minor"><a:schemeClr val="lt1"/></a:fontRef></a:style>',T[T.length]="</a:spDef>",T[T.length]="<a:lnDef>",T[T.length]='<a:spPr/><a:bodyPr/><a:lstStyle/><a:style><a:lnRef idx="2"><a:schemeClr val="accent1"/></a:lnRef><a:fillRef idx="0"><a:schemeClr val="accent1"/></a:fillRef><a:effectRef idx="1"><a:schemeClr val="accent1"/></a:effectRef><a:fontRef idx="minor"><a:schemeClr val="tx1"/></a:fontRef></a:style>',T[T.length]="</a:lnDef>",T[T.length]="</a:objectDefaults>",T[T.length]="<a:extraClrSchemeLst/>",T[T.length]="</a:theme>",T.join("")}function parse_Theme(o,u,T){var S=o.l+u,E=o.read_shift(4);if(E!==124226){if(!T.cellStyles){o.l=S;return}var C=o.slice(o.l);o.l=S;var _;try{_=zip_read(C,{type:"array"})}catch{return}var P=getzipstr(_,"theme/theme/theme1.xml",!0);if(P)return parse_theme_xml(P,T)}}function parse_ColorTheme(o){return o.read_shift(4)}function parse_FullColorExt(o){var u={};switch(u.xclrType=o.read_shift(2),u.nTintShade=o.read_shift(2),u.xclrType){case 0:o.l+=4;break;case 1:u.xclrValue=parse_IcvXF(o,4);break;case 2:u.xclrValue=parse_LongRGBA(o);break;case 3:u.xclrValue=parse_ColorTheme(o);break;case 4:o.l+=4;break}return o.l+=8,u}function parse_IcvXF(o,u){return parsenoop(o,u)}function parse_XFExtGradient(o,u){return parsenoop(o,u)}function parse_ExtProp(o){var u=o.read_shift(2),T=o.read_shift(2)-4,S=[u];switch(u){case 4:case 5:case 7:case 8:case 9:case 10:case 11:case 13:S[1]=parse_FullColorExt(o);break;case 6:S[1]=parse_XFExtGradient(o,T);break;case 14:case 15:S[1]=o.read_shift(T===1?1:2);break;default:throw new Error("Unrecognized ExtProp type: "+u+" "+T)}return S}function parse_XFExt(o,u){var T=o.l+u;o.l+=2;var S=o.read_shift(2);o.l+=2;for(var E=o.read_shift(2),C=[];E-- >0;)C.push(parse_ExtProp(o,T-o.l));return{ixfe:S,ext:C}}function update_xfext(o,u){u.forEach(function(T){switch(T[0]){}})}function parse_BrtMdtinfo(o,u){return{flags:o.read_shift(4),version:o.read_shift(4),name:parse_XLWideString(o)}}function write_BrtMdtinfo(o){var u=new_buf(12+2*o.name.length);return u.write_shift(4,o.flags),u.write_shift(4,o.version),write_XLWideString(o.name,u),u.slice(0,u.l)}function parse_BrtMdb(o){for(var u=[],T=o.read_shift(4);T-- >0;)u.push([o.read_shift(4),o.read_shift(4)]);return u}function write_BrtMdb(o){var u=new_buf(4+8*o.length);u.write_shift(4,o.length);for(var T=0;T<o.length;++T)u.write_shift(4,o[T][0]),u.write_shift(4,o[T][1]);return u}function write_BrtBeginEsfmd(o,u){var T=new_buf(8+2*u.length);return T.write_shift(4,o),write_XLWideString(u,T),T.slice(0,T.l)}function parse_BrtBeginEsmdb(o){return o.l+=4,o.read_shift(4)!=0}function write_BrtBeginEsmdb(o,u){var T=new_buf(8);return T.write_shift(4,o),T.write_shift(4,1),T}function parse_xlmeta_bin(o,u,T){var S={Types:[],Cell:[],Value:[]},E=T||{},C=[],_=!1,P=2;return recordhopper(o,function(R,I,L){switch(L){case 335:S.Types.push({name:R.name});break;case 51:R.forEach(function(j){P==1?S.Cell.push({type:S.Types[j[0]-1].name,index:j[1]}):P==0&&S.Value.push({type:S.Types[j[0]-1].name,index:j[1]})});break;case 337:P=R?1:0;break;case 338:P=2;break;case 35:C.push(L),_=!0;break;case 36:C.pop(),_=!1;break;default:if(!I.T){if(!_||E.WTF&&C[C.length-1]!=35)throw new Error("Unexpected record 0x"+L.toString(16))}}}),S}function write_xlmeta_bin(){var o=buf_array();return write_record(o,332),write_record(o,334,write_UInt32LE(1)),write_record(o,335,write_BrtMdtinfo({name:"XLDAPR",version:12e4,flags:3496657072})),write_record(o,336),write_record(o,339,write_BrtBeginEsfmd(1,"XLDAPR")),write_record(o,52),write_record(o,35,write_UInt32LE(514)),write_record(o,4096,write_UInt32LE(0)),write_record(o,4097,writeuint16(1)),write_record(o,36),write_record(o,53),write_record(o,340),write_record(o,337,write_BrtBeginEsmdb(1)),write_record(o,51,write_BrtMdb([[1,0]])
vendor: 6,589 bytes, lines 243-263
243),write_record(o,338),write_record(o,333),o.end()}function parse_xlmeta_xml(o,u,T){var S={Types:[],Cell:[],Value:[]};if(!o)return S;var E=!1,C=2,_;return o.replace(tagregex,function(P){var R=parsexmltag(P);switch(strip_ns(R[0])){case"<?xml":break;case"<metadata":case"</metadata>":break;case"<metadataTypes":case"</metadataTypes>":break;case"<metadataType":S.Types.push({name:R.name});break;case"</metadataType>":break;case"<futureMetadata":for(var I=0;I<S.Types.length;++I)S.Types[I].name==R.name&&(_=S.Types[I]);break;case"</futureMetadata>":break;case"<bk>":break;case"</bk>":break;case"<rc":C==1?S.Cell.push({type:S.Types[R.t-1].name,index:+R.v}):C==0&&S.Value.push({type:S.Types[R.t-1].name,index:+R.v});break;case"</rc>":break;case"<cellMetadata":C=1;break;case"</cellMetadata>":C=2;break;case"<valueMetadata":C=0;break;case"</valueMetadata>":C=2;break;case"<extLst":case"<extLst>":case"</extLst>":case"<extLst/>":break;case"<ext":E=!0;break;case"</ext>":E=!1;break;case"<rvb":if(!_)break;_.offsets||(_.offsets=[]),_.offsets.push(+R.i);break;default:if(!E&&T.WTF)throw new Error("unrecognized "+R[0]+" in metadata")}return P}),S}function write_xlmeta_xml(){var o=[XML_HEADER];return o.push(`<metadata xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:xlrd="http://schemas.microsoft.com/office/spreadsheetml/2017/richdata" xmlns:xda="http://schemas.microsoft.com/office/spreadsheetml/2017/dynamicarray">
244  <metadataTypes count="1">
245    <metadataType name="XLDAPR" minSupportedVersion="120000" copy="1" pasteAll="1" pasteValues="1" merge="1" splitFirst="1" rowColShift="1" clearFormats="1" clearComments="1" assign="1" coerce="1" cellMeta="1"/>
246  </metadataTypes>
247  <futureMetadata name="XLDAPR" count="1">
248    <bk>
249      <extLst>
250        <ext uri="{bdbb8cdc-fa1e-496e-a857-3c3f30c029c3}">
251          <xda:dynamicArrayProperties fDynamic="1" fCollapsed="0"/>
252        </ext>
253      </extLst>
254    </bk>
255  </futureMetadata>
256  <cellMetadata count="1">
257    <bk>
258      <rc t="1" v="0"/>
259    </bk>
260  </cellMetadata>
261</metadata>`),o.join("")}function parse_cc_xml(o){var u=[];if(!o)return u;var T=1;return(o.match(tagregex)||[]).forEach(function(S){var E=parsexmltag(S);switch(E[0]){case"<?xml":break;case"<calcChain":case"<calcChain>":case"</calcChain>":break;case"<c":delete E[0],E.i?T=E.i:E.i=T,u.push(E);break}}),u}function parse_BrtCalcChainItem$(o){var u={};u.i=o.read_shift(4);var T={};T.r=o.read_shift(4),T.c=o.read_shift(4),u.r=encode_cell(T);var S=o.read_shift(1);return S&2&&(u.l="1"),S&8&&(u.a="1"),u}function parse_cc_bin(o,u,T){var S=[];return recordhopper(o,function(C,_,P){switch(P){case 63:S.push(C);break;default:if(!_.T)throw new Error("Unexpected record 0x"+P.toString(16))}}),S}function parse_xlink_xml(){}function parse_xlink_bin(o,u,T,S){if(!o)return o;var E=S||{},C=!1;recordhopper(o,function(P,R,I){switch(I){case 359:case 363:case 364:case 366:case 367:case 368:case 369:case 370:case 371:case 472:case 577:case 578:case 579:case 580:case 581:case 582:case 583:case 584:case 585:case 586:case 587:break;case 35:C=!0;break;case 36:C=!1;break;default:if(!R.T){if(!C||E.WTF)throw new Error("Unexpected record 0x"+I.toString(16))}}},E)}function parse_drawing(o,u){if(!o)return"??";var T=(o.match(/<c:chart [^>]*r:id="([^"]*)"/)||["",""])[1];return u["!id"][T].Target}var _shapeid=1024;function write_comments_vml(o,u){for(var T=[21600,21600],S=["m0,0l0",T[1],T[0],T[1],T[0],"0xe"].join(","),E=[writextag("xml",null,{"xmlns:v":XLMLNS.v,"xmlns:o":XLMLNS.o,"xmlns:x":XLMLNS.x,"xmlns:mv":XLMLNS.mv}).replace(/\/>/,">"),writextag("o:shapelayout",writextag("o:idmap",null,{"v:ext":"edit",data:o}),{"v:ext":"edit"}),writextag("v:shapetype",[writextag("v:stroke",null,{joinstyle:"miter"}),writextag("v:path",null,{gradientshapeok:"t","o:connecttype":"rect"})].join(""),{id:"_x0000_t202","o:spt":202,coordsize:T.join(","),path:S})];_shapeid<o*1e3;)_shapeid+=1e3;return u.forEach(function(C){var _=decode_cell(C[0]),P={color2:"#BEFF82",type:"gradient"};P.type=="gradient"&&(P.angle="-180");var R=P.type=="gradient"?writextag("o:fill",null,{type:"gradientUnscaled","v:ext":"view"}):null,I=writextag("v:fill",R,P),L={on:"t",obscured:"t"};++_shapeid,E=E.concat(["<v:shape"+wxt_helper({id:"_x0000_s"+_shapeid,type:"#_x0000_t202",style:"position:absolute; margin-left:80pt;margin-top:5pt;width:104pt;height:64pt;z-index:10"+(C[1].hidden?";visibility:hidden":""),fillcolor:"#ECFAD4",strokecolor:"#edeaa1"})+">",I,writextag("v:shadow",null,L),writextag("v:path",null,{"o:connecttype":"none"}),'<v:textbox><div style="text-align:left"></div></v:textbox>','<x:ClientData ObjectType="Note">',"<x:MoveWithCells/>","<x:SizeWithCells/>",writetag("x:Anchor",[_.c+1,0,_.r+1,0,_.c+3,20,_.r+5,20].join(",")),writetag("x:AutoFill","False"),writetag("x:Row",String(_.r)),writetag("x:Column",String(_.c)),C[1].hidden?"":"<x:Visible/>","</x:ClientData>","</v:shape>"])}),E.push("</xml>"),E.join("")}function sheet_insert_comments(o,u,T,S){var E=Array.isArray(o),C;u.forEach(function(_){var P=decode_cell(_.ref);if(E?(o[P.r]||(o[P.r]=[]),C=o[P.r][P.c]):C=o[_.ref],!C){C={t:"z"},E?o[P.r][P.c]=C:o[_.ref]=C;var R=safe_decode_range(o["!ref"]||"BDWGO1000001:A1");R.s.r>P.r&&(R.s.r=P.r),R.e.r<P.r&&(R.e.r=P.r),R.s.c>P.c&&(R.s.c=P.c),R.e.c<P.c&&(R.e.c=P.c);var I=encode_range(R);I!==o["!ref"]&&(o["!ref"]=I)}C.c||(C.c=[]);var L={a:_.author,t:_.t,r:_.r,T};_.h&&(L.h=_.h);for(var j=C.c.length-1;j>=0;--j){if(!T&&C.c[j].T)return;T&&!C.c[j].T&&C.c.splice(j,1)}if(T&&S){for(j=0;j<S.length;++j)if(L.a==S[j].id){L.a=S[j].name||L.a;break}}C.c.push(L)})}function parse_comments_xml(o,u){if(o.match(/<(?:\w+:)?comments *\/>/))return[];var T=[],S=[],E=o.match(/<(?:\w+:)?authors>([\s\S]*)<\/(?:\w+:)?authors>/);E&&E[1]&&E[1].split(/<\/\w*:?author>/).forEach(function(_){if(!(_===""||_.trim()==="")){var P=_.match(/<(?:\w+:)?author[^>]*>(.*)/);P&&T.push(P[1])}});var C=o.match(/<(?:\w+:)?commentList>([\s\S]*)<\/(?:\w+:)?commentList>/);return C&&C[1]&&C[1].split(/<\/\w*:?comment>/).forEach(function(_){if(!(_===""||_.trim()==="")){var P=_.match(/<(?:\w+:)?comment[^>]*>/);if(P){var R=parsexmltag(P[0]),I={author:R.authorId&&T[R.authorId]||"sheetjsghost",ref:R.ref,guid:R.guid},L=decode_cell(R.ref);if(!(u.sheetRows&&u.sheetRows<=L.r)){var j=_.match(/<(?:\w+:)?text>([\s\S]*)<\/(?:\w+:)?text>/),M=!!j&&!!j[1]&&parse_si(j[1])||{r:"",t:"",h:""};I.r=M.r,M.r=="<t></t>"&&(M.t=M.h=""),I.t=(M.t||"").replace(/\r\n/g,`
262`).replace(/\r/g,`
263`),u.cellHTML&&(I.h=M.h),S.push(I)}}}}),S}function write_comments_xml(o){var u=[XML_HEADER,writextag("comments",null,{xmlns:XMLNS_main[0]})],T=[];return u.push("<authors>
263"),o.forEach(function(S){S[1].forEach(function(E){var C=escapexml(E.a);T.indexOf(C)==-1&&(T.push(C),u.push("<author>"+C+"</author>")),E.T&&E.ID&&T.indexOf("tc="+E.ID)==-1&&(T.push("tc="+E.ID),u.push("<author>tc="+E.ID+"</author>"))})}),T.length==0&&(T.push("SheetJ5"),u.push("<author>SheetJ5</author>")),u.push("</authors>"),u.push("<commentList>"),o.forEach(function(S){var E=0,C=[];if(S[1][0]&&S[1][0].T&&S[1][0].ID?E=T.indexOf("tc="+S[1][0].ID):S[1].forEach(function(R){R.a&&(E=T.indexOf(escapexml(R.a))),C.push(R.t||"")}),u.push('<comment ref="'+S[0]+'" authorId="'+E+'"><text>'),C.length<=1)u.push(writetag("t",escapexml(C[0]||"")));else{for(var _=`Comment:
264    `+C[0]+`
265`,P=1;P<C.length;++P)_+=`Reply:
266    `+C[P]+`
267`;u.push(writetag("t",escapexml(_)))}u.push("</text></comment>")}),u.push("</commentList>"),u.length>2&&(u[u.length]="</comments>",u[1]=u[1].replace("/>",">")),u.join("")}function parse_tcmnt_xml(o,u){var T=[],S=!1,E={},C=0;return o.replace(tagregex,function(P,R){var I=parsexmltag(P);switch(strip_ns(I[0])){case"<?xml":break;case"<ThreadedComments":break;case"</ThreadedComments>":break;case"<threadedComment":E={author:I.personId,guid:I.id,ref:I.ref,T:1};break;case"</threadedComment>":E.t!=null&&T.push(E);break;case"<text>":case"<text":C=R+P.length;break;case"</text>":E.t=o.slice(C,R).replace(/\r\n/g,`
268`).replace(/\r/g,`
269`);break;case"<mentions":case"<mentions>":S=!0;break;case"</mentions>":S=!1;break;case"<extLst":case"<extLst>":case"</extLst>":case"<extLst/>":break;case"<ext":S=!0;break;case"</ext>":S=!1;break;default:if(!S&&u.WTF)throw new Error("unrecognized "+I[0]+" in threaded comments")}return P}),T}function write_tcmnt_xml(o,u,T){var S=[XML_HEADER,writextag("ThreadedComments",null,{xmlns:XMLNS.TCMNT}).replace(/[\/]>/,">")];return o.forEach(function(E){var C="";(E[1]||[]).forEach(function(_,P){if(!_.T){delete _.ID;return}_.a&&u.indexOf(_.a)==-1&&u.push(_.a);var R={ref:E[0],id:"{54EE7951-7262-4200-6969-"+("000000000000"+T.tcid++).slice(-12)+"}"};P==0?C=R.id:R.parentId=C,_.ID=R.id,_.a&&(R.personId="{54EE7950-7262-4200-6969-"+("000000000000"+u.indexOf(_.a)).slice(-12)+"}"),S.push(writextag("threadedComment",writetag("text",_.t||""),R))})}),S.push("</ThreadedComments>"),S.join("")}function parse_people_xml(o,u){var T=[],S=!1;return o.replace(tagregex,function(C){var _=parsexmltag(C);switch(strip_ns(_[0])){case"<?xml":break;case"<personList":break;case"</personList>":break;case"<person":T.push({name:_.displayname,id:_.id});break;case"</person>":break;case"<extLst":case"<extLst>":case"</extLst>":case"<extLst/>":break;case"<ext":S=!0;break;case"</ext>":S=!1;break;default:if(!S&&u.WTF)throw new Error("unrecognized "+_[0]+" in threaded comments")}return C}),T}function write_people_xml(o){var u=[XML_HEADER,writextag("personList",null,{xmlns:XMLNS.TCMNT,"xmlns:x":XMLNS_main[0]}).replace(/[\/]>/,">")];return o.forEach(function(T,S){u.push(writextag("person",null,{displayName:T,id:"{54EE7950-7262-4200-6969-"+("000000000000"+S).slice(-12)+"}",userId:T,providerId:"None"}))}),u.push("</personList>"),u.join("")}function parse_BrtBeginComment(o){var u={};u.iauthor=o.read_shift(4);var T=parse_UncheckedRfX(o);return u.rfx=T.s,u.ref=encode_cell(T.s),o.l+=16,u}function write_BrtBeginComment(o,u){return u==null&&(u=new_buf(36)),u.write_shift(4,o[1].iauthor),write_UncheckedRfX(o[0],u),u.write_shift(4,0),u.write_shift(4,0),u.write_shift(4,0),u.write_shift(4,0),u}var parse_BrtCommentAuthor=parse_XLWideString;function write_BrtCommentAuthor(o){return write_XLWideString(o.slice(0,54))}function parse_comments_bin(o,u){var T=[],S=[],E={},C=!1;return recordhopper(o,function(P,R,I){switch(I){case 632:S.push(P);break;case 635:E=P;break;case 637:E.t=P.t,E.h=P.h,E.r=P.r;break;case 636:if(E.author=S[E.iauthor],delete E.iauthor,u.sheetRows&&E.rfx&&u.sheetRows<=E.rfx.r)break;E.t||(E.t=""),delete E.rfx,T.push(E);break;case 3072:break;case 35:C=!0;break;case 36:C=!1;break;case 37:break;case 38:break;default:if(!R.T){if(!C||u.WTF)throw new Error("Unexpected record 0x"+I.toString(16))}}}),T}function write_comments_bin(o){var u=buf_array(),T=[];return write_record(u,628),write_record(u,630),o.forEach(function(S){S[1].forEac
269h(function(E){T.indexOf(E.a)>-1||(T.push(E.a.slice(0,54)),write_record(u,632,write_BrtCommentAuthor(E.a)))})}),write_record(u,631),write_record(u,633),o.forEach(function(S){S[1].forEach(function(E){E.iauthor=T.indexOf(E.a);var C={s:decode_cell(S[0]),e:decode_cell(S[0])};write_record(u,635,write_BrtBeginComment([C,E])),E.t&&E.t.length>0&&write_record(u,637,write_BrtCommentText(E)),write_record(u,636),delete E.iauthor})}),write_record(u,634),write_record(u,629),u.end()}var CT_VBA="application/vnd.ms-office.vbaProject";function make_vba_xls(o){var u=CFB.utils.cfb_new({root:"R"});return o.FullPaths.forEach(function(T,S){if(!(T.slice(-1)==="/"||!T.match(/_VBA_PROJECT_CUR/))){var E=T.replace(/^[^\/]*/,"R").replace(/\/_VBA_PROJECT_CUR\u0000*/,"");CFB.utils.cfb_add(u,E,o.FileIndex[S].content)}}),CFB.write(u)}function fill_vba_xls(o,u){u.FullPaths.forEach(function(T,S){if(S!=0){var E=T.replace(/[^\/]*[\/]/,"/_VBA_PROJECT_CUR/");E.slice(-1)!=="/"&&CFB.utils.cfb_add(o,E,u.FileIndex[S].content)}})}var VBAFMTS=["xlsb","xlsm","xlam","biff8","xla"];function parse_ds_bin(){return{"!type":"dialog"}}function parse_ds_xml(){return{"!type":"dialog"}}function parse_ms_bin(){return{"!type":"macro"}}function parse_ms_xml(){return{"!type":"macro"}}var rc_to_a1=function(){var o=/(^|[^A-Za-z_])R(\[?-?\d+\]|[1-9]\d*|)C(\[?-?\d+\]|[1-9]\d*|)(?![A-Za-z0-9_])/g,u={r:0,c:0};function T(S,E,C,_){var P=!1,R=!1;C.length==0?R=!0:C.charAt(0)=="["&&(R=!0,C=C.slice(1,-1)),_.length==0?P=!0:_.charAt(0)=="["&&(P=!0,_=_.slice(1,-1));var I=C.length>0?parseInt(C,10)|0:0,L=_.length>0?parseInt(_,10)|0:0;return P?L+=u.c:--L,R?I+=u.r:--I,E+(P?"":"$")+encode_col(L)+(R?"":"$")+encode_row(I)}return function(E,C){return u=C,E.replace(o,T)}}(),crefregex=/(^|[^._A-Z0-9])([$]?)([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])([$]?)(10[0-3]\d{4}|104[0-7]\d{3}|1048[0-4]\d{2}|10485[0-6]\d|104857[0-6]|[1-9]\d{0,5})(?![_.\(A-Za-z0-9])/g,a1_to_rc=function(){return function(u,T){return u.replace(crefregex,function(S,E,C,_,P,R){var I=decode_col(_)-(C?0:T.c),L=decode_row(R)-(P?0:T.r),j=L==0?"":P?L+1:"["+L+"]",M=I==0?"":C?I+1:"["+I+"]";return E+"R"+j+"C"+M})}}();function shift_formula_str(o,u){return o.replace(crefregex,function(T,S,E,C,_,P){return S+(E=="$"?E+C:encode_col(decode_col(C)+u.c))+(_=="$"?_+P:encode_row(decode_row(P)+u.r))})}function shift_formula_xlsx(o,u,T){var S=decode_range(u),E=S.s,C=decode_cell(T),_={r:C.r-E.r,c:C.c-E.c};return shift_formula_str(o,_)}function fuzzyfmla(o){return o.length!=1}function _xlfn(o){return o.replace(/_xlfn\./g,"")}function parseread1(o){o.l+=1}function parse_ColRelU(o,u){var T=o.read_shift(2);return[T&16383,T>>14&1,T>>15&1]}function parse_RgceArea(o,u,T){var S=2;if(T){if(T.biff>=2&&T.biff<=5)return parse_RgceArea_BIFF2(o);T.biff==12&&(S=4)}var E=o.read_shift(S),C=o.read_shift(S),_=parse_ColRelU(o),P=parse_ColRelU(o);return{s:{r:E,c:_[0],cRel:_[1],rRel:_[2]},e:{r:C,c:P[0],cRel:P[1],rRel:P[2]}}}function parse_RgceArea_BIFF2(o){var u=parse_ColRelU(o),T=parse_ColRelU(o),S=o.read_shift(1),E=o.read_shift(1);return{s:{r:u[0],c:S,cRel:u[1],rRel:u[2]},e:{r:T[0],c:E,cRel:T[1],rRel:T[2]}}}function parse_RgceAreaRel(o,u,T){if(T.biff<8)return parse_RgceArea_BIFF2(o);var S=o.read_shift(T.biff==12?4:2),E=o.read_shift(T.biff==12?4:2),C=parse_ColRelU(o),_=parse_ColRelU(o);return{s:{r:S,c:C[0],cRel:C[1],rRel:C[2]},e:{r:E,c:_[0],cRel:_[1],rRel:_[2]}}}function parse_RgceLoc(o,u,T){if(T&&T.biff>=2&&T.biff<=5)return parse_RgceLoc_BIFF2(o);var S=o.read_shift(T&&T.biff==12?4:2),E=parse_ColRelU(o);return{r:S,c:E[0],cRel:E[1],rRel:E[2]}}function parse_RgceLoc_BIFF2(o){var u=parse_ColRelU(o),T=o.read_shift(1);return{r:u[0],c:T,cRel:u[1],rRel:u[2]}}function parse_RgceElfLoc(o){var u=o.read_shift(2),T=o.read_shift(2);return{r:u,c:T&255,fQuoted:!!(T&16384),cRel:T>>15,rRel:T>>15}}function parse_RgceLocRel(o,u,T){var S=T&&T.biff?T.biff:8;if(S>=2&&S<=5)return parse_RgceLocRel_BIFF2(o);var E=o.read_shift(S>=12?4:2),C=o.read_shift(2),_=(C&16384)>>14,P=(C&32768)>>15;if(C&=16383,P==1)for(;E>524287;)E-=1048576;if(_==1)for(;C>8191;)C=C-16384;return{r:E,c:C,cRel:_,rRel:P}}function parse_RgceLocRel_BIFF2(o){var u=o.read_shift(2),T=o.read_shift(1),S=(u&32768)>>15,E=(u&16384)>>14;return u&=16383,S==1&&u>=8192&&(u=u-16384),E==1&&T>=128&&(T=T-256),{r:u,c:T,cRel:E,rRel:S}}function parse_PtgArea(o,u,T){var S=(o[o.l++]&96)>>5,E=parse_RgceArea(o,T.biff>=2&&T.biff<=5?6:8,T);return[S,E]}function parse_PtgArea3d(o,u,T){var S=(o[o.l++]&96)>>5,E=o.read_shift(2,"i"),C=8;if(T)switch(T.biff){case 5:o.l+=12,C=6;break;case 12:C=12;break}var _=parse_RgceArea(o,C,T);return[S,E,_]}function parse_PtgAreaErr(o,u,T){var S=(o[o.l++]&96)>>5;return o.l+=T&&T.biff>8?12:T.biff<8?6:8,[S]}function parse_PtgAreaErr3d(o,u,T){var S=(o[o.l++]&96)>>5,E=o.read_shift(2),C=8;if(T)switch(T.biff){case 5:o.l+=12,C=6;break;case 12:C=12;break}return o.l+=C,[S,E]}function parse_PtgAreaN(o,u,T){var S=(o[o.l++]&96)>>5,E=parse_RgceAreaRel(o,u-1,T);return[S,E]}function parse_PtgArray(o,u,T){var S=(o[o.l++]&96)>>5;return o.l+=T.biff==2?6:T.biff==12?14:7,[S]}function parse_PtgAttrBaxcel(o){var u=o[o.l+1]&1,T=1;return o.l+=4,[u,T]}function parse_PtgAttrChoose(o,u,T){o.l+=2;for(var S=o.read_shift(T&&T.biff==2?1:2),E=[],C=0;C<=S;++C)E.push(o.read_shift(T&&T.biff==2?1:2));return E}function parse_PtgAttrGoto(o,u,T){var S=o[o.l+1]&255?1:0;return o.l+=2,[S,o.read_shift(T&&T.biff==2?1:2)]}function parse_PtgAttrIf(o,u,T){var S=o[o.l+1]&255?1:0;return o.l+=2,[S,o.read_shift(T&&T.biff==2?1:2)]}function parse_PtgAttrIfError(o){var u=o[o.l+1]&255?1:0;return o.l+=2,[u,o.read_shift(2)]}function parse_PtgAttrSemi(o,u,T){var S=o[o.l+1]&255?1:0;return o.l+=T&&T.biff==2?3:4,[S]}function parse_PtgAttrSpaceType(o){var u=o.read_shift(1),T=o.read_shift(1);return[u,T]}function parse_PtgAttrSpace(o){return o.read_shift(2),parse_PtgAttrSpaceType(o)}function parse_PtgAttrSpaceSemi(o){return o.read_shift(2),parse_PtgAttrSpaceType(o)}function parse_PtgRef(o,u,T){var S=(o[o.l]&96)>>5;o.l+=1;var E=parse_RgceLoc(o,0,T);return[S,E]}function parse_PtgRefN(o,u,T){var S=(o[o.l]&96)>>5;o.l+=1;var E=parse_RgceLocRel(o,0,T);return[S,E]}function parse_PtgRef3d(o,u,T){var S=(o[o.l]&96)>>5;o.l+=1;var E=o.read_shift(2);
269T&&T.biff==5&&(o.l+=12);var C=parse_RgceLoc(o,0,T);return[S,E,C]}function parse_PtgFunc(o,u,T){var S=(o[o.l]&96)>>5;o.l+=1;var E=o.read_shift(T&&T.biff<=3?1:2);return[FtabArgc[E],Ftab[E],S]}function parse_PtgFuncVar(o,u,T){var S=o[o.l++],E=o.read_shift(1),C=T&&T.biff<=3?[S==88?-1:0,o.read_shift(1)]:parsetab(o);return[E,(C[0]===0?Ftab:Cetab)[C[1]]]}function parsetab(o){return[o[o.l+1]>>7,o.read_shift(2)&32767]}function parse_PtgAttrSum(o,u,T){o.l+=T&&T.biff==2?3:4}function parse_PtgExp(o,u,T){if(o.l++,T&&T.biff==12)return[o.read_shift(4,"i"),0];var S=o.read_shift(2),E=o.read_shift(T&&T.biff==2?1:2);return[S,E]}function parse_PtgErr(o){return o.l++,BErr[o.read_shift(1)]}function parse_PtgInt(o){return o.l++,o.read_shift(2)}function parse_PtgBool(o){return o.l++,o.read_shift(1)!==0}function parse_PtgNum(o){return o.l++,parse_Xnum(o)}function parse_PtgStr(o,u,T){return o.l++,parse_ShortXLUnicodeString(o,u-1,T)}function parse_SerAr(o,u){var T=[o.read_shift(1)];if(u==12)switch(T[0]){case 2:T[0]=4;break;case 4:T[0]=16;break;case 0:T[0]=1;break;case 1:T[0]=2;break}switch(T[0]){case 4:T[1]=parsebool(o,1)?"TRUE":"FALSE",u!=12&&(o.l+=7);break;case 37:case 16:T[1]=BErr[o[o.l]],o.l+=u==12?4:8;break;case 0:o.l+=8;break;case 1:T[1]=parse_Xnum(o);break;case 2:T[1]=parse_XLUnicodeString2(o,0,{biff:u>0&&u<8?2:u});break;default:throw new Error("Bad SerAr: "+T[0])}return T}function parse_PtgExtraMem(o,u,T){for(var S=o.read_shift(T.biff==12?4:2),E=[],C=0;C!=S;++C)E.push((T.biff==12?parse_UncheckedRfX:parse_Ref8U)(o));return E}function parse_PtgExtraArray(o,u,T){var S=0,E=0;T.biff==12?(S=o.read_shift(4),E=o.read_shift(4)):(E=1+o.read_shift(1),S=1+o.read_shift(2)),T.biff>=2&&T.biff<8&&(--S,--E==0&&(E=256));for(var C=0,_=[];C!=S&&(_[C]=[]);++C)for(var P=0;P!=E;++P)_[C][P]=parse_SerAr(o,T.biff);return _}function parse_PtgName(o,u,T){var S=o.read_shift(1)>>>5&3,E=!T||T.biff>=8?4:2,C=o.read_shift(E);switch(T.biff){case 2:o.l+=5;break;case 3:case 4:o.l+=8;break;case 5:o.l+=12;break}return[S,0,C]}function parse_PtgNameX(o,u,T){if(T.biff==5)return parse_PtgNameX_BIFF5(o);var S=o.read_shift(1)>>>5&3,E=o.read_shift(2),C=o.read_shift(4);return[S,E,C]}function parse_PtgNameX_BIFF5(o){var u=o.read_shift(1)>>>5&3,T=o.read_shift(2,"i");o.l+=8;var S=o.read_shift(2);return o.l+=12,[u,T,S]}function parse_PtgMemArea(o,u,T){var S=o.read_shift(1)>>>5&3;o.l+=T&&T.biff==2?3:4;var E=o.read_shift(T&&T.biff==2?1:2);return[S,E]}function parse_PtgMemFunc(o,u,T){var S=o.read_shift(1)>>>5&3,E=o.read_shift(T&&T.biff==2?1:2);return[S,E]}function parse_PtgRefErr(o,u,T){var S=o.read_shift(1)>>>5&3;return o.l+=4,T.biff<8&&o.l--,T.biff==12&&(o.l+=2),[S]}function parse_PtgRefErr3d(o,u,T){var S=(o[o.l++]&96)>>5,E=o.read_shift(2),C=4;if(T)switch(T.biff){case 5:C=15;break;case 12:C=6;break}return o.l+=C,[S,E]}var parse_PtgMemErr=parsenoop,parse_PtgMemNoMem=parsenoop,parse_PtgTbl=parsenoop;function parse_PtgElfLoc(o,u,T){return o.l+=2,[parse_RgceElfLoc(o)]}function parse_PtgElfNoop(o){return o.l+=6,[]}var parse_PtgElfCol=parse_PtgElfLoc,parse_PtgElfColS=parse_PtgElfNoop,parse_PtgElfColSV=parse_PtgElfNoop,parse_PtgElfColV=parse_PtgElfLoc;function parse_PtgElfLel(o){return o.l+=2,[parseuint16(o),o.read_shift(2)&1]}var parse_PtgElfRadical=parse_PtgElfLoc,parse_PtgElfRadicalLel=parse_PtgElfLel,parse_PtgElfRadicalS=parse_PtgElfNoop,parse_PtgElfRw=parse_PtgElfLoc,parse_PtgElfRwV=parse_PtgElfLoc,PtgListRT=["Data","All","Headers","??","?Data2","??","?DataHeaders","??","Totals","??","??","??","?DataTotals","??","??","??","?Current"];function parse_PtgList(o){o.l+=2;var u=o.read_shift(2),T=o.read_shift(2),S=o.read_shift(4),E=o.read_shift(2),C=o.read_shift(2),_=PtgListRT[T>>2&31];return{ixti:u,coltype:T&3,rt:_,idx:S,c:E,C}}function parse_PtgSxName(o){return o.l+=2,[o.read_shift(4)]}function parse_PtgSheet(o,u,T){return o.l+=5,o.l+=2,o.l+=T.biff==2?1:4,["PTGSHEET"]}function parse_PtgEndSheet(o,u,T){return o.l+=T.biff==2?4:5,["PTGENDSHEET"]}function parse_PtgMemAreaN(o){var u=o.read_shift(1)>>>5&3,T=o.read_shift(2);return[u,T]}function parse_PtgMemNoMemN(o){var u=o.read_shift(1)>>>5&3,T=o.read_shift(2);return[u,T]}function parse_PtgAttrNoop(o){return o.l+=4,[0,0]}var PtgTypes={1:{n:"PtgExp",f:parse_PtgExp},2:{n:"PtgTbl",f:parse_PtgTbl},3:{n:"PtgAdd",f:parseread1},4:{n:"PtgSub",f:parseread1},5:{n:"PtgMul",f:parseread1},6:{n:"PtgDiv",f:parseread1},7:{n:"PtgPower",f:parseread1},8:{n:"PtgConcat",f:parseread1},9:{n:"PtgLt",f:parseread1},10:{n:"PtgLe",f:parseread1},11:{n:"PtgEq",f:parseread1},12:{n:"PtgGe",f:parseread1},13:{n:"PtgGt",f:parseread1},14:{n:"PtgNe",f:parseread1},15:{n:"PtgIsect",f:parseread1},16:{n:"PtgUnion",f:parseread1},17:{n:"PtgRange",f:parseread1},18:{n:"PtgUplus",f:parseread1},19:{n:"PtgUminus",f:parseread1},20:{n:"PtgPercent",f:parseread1},21:{n:"PtgParen",f:parseread1}
vendor: 10,790 bytes, line 269
269,22:{n:"PtgMissArg",f:parseread1},23:{n:"PtgStr",f:parse_PtgStr},26:{n:"PtgSheet",f:parse_PtgSheet},27:{n:"PtgEndSheet",f:parse_PtgEndSheet},28:{n:"PtgErr",f:parse_PtgErr},29:{n:"PtgBool",f:parse_PtgBool},30:{n:"PtgInt",f:parse_PtgInt},31:{n:"PtgNum",f:parse_PtgNum},32:{n:"PtgArray",f:parse_PtgArray},33:{n:"PtgFunc",f:parse_PtgFunc},34:{n:"PtgFuncVar",f:parse_PtgFuncVar},35:{n:"PtgName",f:parse_PtgName},36:{n:"PtgRef",f:parse_PtgRef},37:{n:"PtgArea",f:parse_PtgArea},38:{n:"PtgMemArea",f:parse_PtgMemArea},39:{n:"PtgMemErr",f:parse_PtgMemErr},40:{n:"PtgMemNoMem",f:parse_PtgMemNoMem},41:{n:"PtgMemFunc",f:parse_PtgMemFunc},42:{n:"PtgRefErr",f:parse_PtgRefErr},43:{n:"PtgAreaErr",f:parse_PtgAreaErr},44:{n:"PtgRefN",f:parse_PtgRefN},45:{n:"PtgAreaN",f:parse_PtgAreaN},46:{n:"PtgMemAreaN",f:parse_PtgMemAreaN},47:{n:"PtgMemNoMemN",f:parse_PtgMemNoMemN},57:{n:"PtgNameX",f:parse_PtgNameX},58:{n:"PtgRef3d",f:parse_PtgRef3d},59:{n:"PtgArea3d",f:parse_PtgArea3d},60:{n:"PtgRefErr3d",f:parse_PtgRefErr3d},61:{n:"PtgAreaErr3d",f:parse_PtgAreaErr3d},255:{}},PtgDupes={64:32,96:32,65:33,97:33,66:34,98:34,67:35,99:35,68:36,100:36,69:37,101:37,70:38,102:38,71:39,103:39,72:40,104:40,73:41,105:41,74:42,106:42,75:43,107:43,76:44,108:44,77:45,109:45,78:46,110:46,79:47,111:47,88:34,120:34,89:57,121:57,90:58,122:58,91:59,123:59,92:60,124:60,93:61,125:61},Ptg18={1:{n:"PtgElfLel",f:parse_PtgElfLel},2:{n:"PtgElfRw",f:parse_PtgElfRw},3:{n:"PtgElfCol",f:parse_PtgElfCol},6:{n:"PtgElfRwV",f:parse_PtgElfRwV},7:{n:"PtgElfColV",f:parse_PtgElfColV},10:{n:"PtgElfRadical",f:parse_PtgElfRadical},11:{n:"PtgElfRadicalS",f:parse_PtgElfRadicalS},13:{n:"PtgElfColS",f:parse_PtgElfColS},15:{n:"PtgElfColSV",f:parse_PtgElfColSV},16:{n:"PtgElfRadicalLel",f:parse_PtgElfRadicalLel},25:{n:"PtgList",f:parse_PtgList},29:{n:"PtgSxName",f:parse_PtgSxName},255:{}},Ptg19={0:{n:"PtgAttrNoop",f:parse_PtgAttrNoop},1:{n:"PtgAttrSemi",f:parse_PtgAttrSemi},2:{n:"PtgAttrIf",f:parse_PtgAttrIf},4:{n:"PtgAttrChoose",f:parse_PtgAttrChoose},8:{n:"PtgAttrGoto",f:parse_PtgAttrGoto},16:{n:"PtgAttrSum",f:parse_PtgAttrSum},32:{n:"PtgAttrBaxcel",f:parse_PtgAttrBaxcel},33:{n:"PtgAttrBaxcel",f:parse_PtgAttrBaxcel},64:{n:"PtgAttrSpace",f:parse_PtgAttrSpace},65:{n:"PtgAttrSpaceSemi",f:parse_PtgAttrSpaceSemi},128:{n:"PtgAttrIfError",f:parse_PtgAttrIfError},255:{}};function parse_RgbExtra(o,u,T,S){if(S.biff<8)return parsenoop(o,u);for(var E=o.l+u,C=[],_=0;_!==T.length;++_)switch(T[_][0]){case"PtgArray":T[_][1]=parse_PtgExtraArray(o,0,S),C.push(T[_][1]);break;case"PtgMemArea":T[_][2]=parse_PtgExtraMem(o,T[_][1],S),C.push(T[_][2]);break;case"PtgExp":S&&S.biff==12&&(T[_][1][1]=o.read_shift(4),C.push(T[_][1]));break;case"PtgList":case"PtgElfRadicalS":case"PtgElfColS":case"PtgElfColSV":throw"Unsupported "+T[_][0]}return u=E-o.l,u!==0&&C.push(parsenoop(o,u)),C}function parse_Rgce(o,u,T){for(var S=o.l+u,E,C,_=[];S!=o.l;)u=S-o.l,C=o[o.l],E=PtgTypes[C]||PtgTypes[PtgDupes[C]],(C===24||C===25)&&(E=(C===24?Ptg18:Ptg19)[o[o.l+1]]),!E||!E.f?parsenoop(o,u):_.push([E.n,E.f(o,u,T)]);return _}function stringify_array(o){for(var u=[],T=0;T<o.length;++T){for(var S=o[T],E=[],C=0;C<S.length;++C){var _=S[C];if(_)switch(_[0]){case 2:E.push('"'+_[1].replace(/"/g,'""')+'"');break;default:E.push(_[1])}else E.push("")}u.push(E.join(","))}return u.join(";")}var PtgBinOp={PtgAdd:"+",PtgConcat:"&",PtgDiv:"/",PtgEq:"=",PtgGe:">=",PtgGt:">",PtgLe:"<=",PtgLt:"<",PtgMul:"*",PtgNe:"<>",PtgPower:"^",PtgSub:"-"};function formula_quote_sheet_name(o,u){if(!o&&!(u&&u.biff<=5&&u.biff>=2))throw new Error("empty sheet name");return/[^\w\u4E00-\u9FFF\u3040-\u30FF]/.test(o)?"'"+o+"'":o}function get_ixti_raw(o,u,T){if(!o)return"SH33TJSERR0";if(T.biff>8&&(!o.XTI||!o.XTI[u]))return o.SheetNames[u];if(!o.XTI)return"SH33TJSERR6";var S=o.XTI[u];if(T.biff<8)return u>1e4&&(u-=65536),u<0&&(u=-u),u==0?"":o.XTI[u-1];if(!S)return"SH33TJSERR1";var E="";if(T.biff>8)switch(o[S[0]][0]){case 357:return E=S[1]==-1?"#REF":o.SheetNames[S[1]],S[1]==S[2]?E:E+":"+o.SheetNames[S[2]];case 358:return T.SID!=null?o.SheetNames[T.SID]:"SH33TJSSAME"+o[S[0]][0];case 355:default:return"SH33TJSSRC"+o[S[0]][0]}switch(o[S[0]][0][0]){case 1025:return E=S[1]==-1?"#REF":o.SheetNames[S[1]]||"SH33TJSERR3",S[1]==S[2]?E:E+":"+o.SheetNames[S[2]];case 14849:return o[S[0]].slice(1).map(function(C){return C.Name}).join(";;");default:return o[S[0]][0][3]?(E=S[1]==-1?"#REF":o[S[0]][0][3][S[1]]||"SH33TJSERR4",S[1]==S[2]?E:E+":"+o[S[0]][0][3][S[2]]):"SH33TJSERR2"}}function get_ixti(o,u,T){var S=get_ixti_raw(o,u,T);return S=="#REF"?S:formula_quote_sheet_name(S,T)}function stringify_formula(o,u,T,S,E){var C=E&&E.biff||8,_={s:{c:0,r:0}},P=[],R,I,L,j=0,M=0,D,F="";if(!o[0]||!o[0][0])return"";for(var N=-1,G="",B=0,H=o[0].length;B<H;++B){var O=o[0][B];switch(O[0]){case"PtgUminus":P.push("-"+P.pop());break;case"PtgUplus":P.push("+"+P.pop());break;case"PtgPercent":P.push(P.pop()+"%");break;case"PtgAdd":case"PtgConcat":case"PtgDiv":case"PtgEq":case"PtgGe":case"PtgGt":case"PtgLe":case"PtgLt":case"PtgMul":case"PtgNe":case"PtgPower":case"PtgSub":if(R=P.pop(),I=P.pop(),N>=0){switch(o[0][N][1][0]){case 0:G=fill(" ",o[0][N][1][1]);break;case 1:G=fill("\r",o[0][N][1][1]);break;default:if(G="",E.WTF)throw new Error("Unexpected PtgAttrSpaceType "+o[0][N][1][0])}I=I+G,N=-1}P.push(I+PtgBinOp[O[0]]+R);break;case"PtgIsect":R=P.pop(),I=P.pop(),P.push(I+" "+R);break;case"PtgUnion":R=P.pop(),I=P.pop(),P.push(I+","+R);break;case"PtgRange":R=P.pop(),I=P.pop(),P.push(I+":"+R);break;case"PtgAttrChoose":break;case"PtgAttrGoto":break;case"PtgAttrIf":break;case"PtgAttrIfError":break;case"PtgRef":L=shift_cell_xls(O[1][1],_,E),P.push(encode_cell_xls(L,C));break;case"PtgRefN":L=T?shift_cell_xls(O[1][1],T,E):O[1][1],P.push(encode_cell_xls(L,C));break;case"PtgRef3d":j=O[1][1],L=shift_cell_xls(O[1][2],_,E),F=get_ixti(S,j,E),P.push(F+"!"+encode_cell_xls(L,C));break;case"PtgFunc":case"PtgFuncVar":var V=O[1][0],U=O[1][1];V||(V=0),V&=127;var W=V==0?[]:P.slice(-V);P.length-=V,U==="User"&&(U=W.shift()),P.push(U+"("+W.join(",")+")");break;case"PtgBool":P.push(O[1]?"TRUE":"FALSE");break;case"PtgInt":P.push(O[1]);break;case"PtgNum":P.push(String(O[1]));break;case"PtgStr":P.push('"'+O[1].replace(/"/g,'""')+'"');break;case"PtgErr":P.push(O[1]);break;case"PtgAreaN":D=shift_range_xls(O[1][1],T?{s:T}:_,E),P.push(encode_range_xls(D,E));break;case"PtgArea":D=shift_range_xls(O[1][1],_,E),P.push(encode_range_xls(D,E));break;case"PtgArea3d":j=O[1][1],D=O[1][2],F=get_ixti(S,j,E),P.push(F+"!"+encode_range_xls(D,E));break;case"PtgAttrSum":P.push("SUM("+P.pop()+")");break;case"PtgAttrBaxcel":case"PtgAttrSemi":break;case"PtgName":M=O[1][2];var K=(S.names||[])[M-1]||(S[0]||[])[M],Y=K?K.Name:"SH33TJSNAME"+String(M);Y&&Y.slice(0,6)=="_xlfn."&&!E.xlfn&&(Y=Y.slice(6)),P.push(Y);break;case"PtgNameX":var ee=O[1][1];M=O[1][2];var oe;if(E.biff<=5)ee<0&&(ee=-ee),S[ee]&&(oe=S[ee][M]);else{var se="";if(((S[ee]||[])[0]||[])[0]==14849||(((S[ee]||[])[0]||[])[0]==1025?S[ee][M]&&S[ee][M].itab>0&&(se=S.SheetNames[S[ee][M].itab-1]+"!"):se=S.SheetNames[M-1]+"!"),S[ee]&&S[ee][M])se+=S[ee][M].Name;else if(S[0]&&S[0][M])se+=S[0][M].Name;else{var Q=(get_ixti_raw(S,ee,E)||"").split(";;");Q[M-1]?se=Q[M-1]:se+="SH33TJSERRX"}P.push(se);break}oe||(oe={Name:"SH33TJSERRY"}),P.push(oe.Name);break;case"PtgParen":var ie="(",ae=")";if(N>=0){switch(G="",o[0][N][1][0]){case 2:ie=fill(" ",o[0][N][1][1])+ie;break;case 3:ie=fill("\r",o[0][N][1][1])+ie;break;case 4:ae=fill(" ",o[0][N][1][1])+ae;break;case 5:ae=fill("\r",o[0][N][1][1])+ae;break;default:if(E.WTF)throw new Error("Unexpected PtgAttrSpaceType "+o[0][N][1][0])}N=-1}P.push(ie+P.pop()+ae);break;case"PtgRefErr":P.push("#REF!");break;case"PtgRefErr3d":P.push("#REF!");break;case"PtgExp":L={c:O[1][1],r:O[1][0]};var re={c:T.c,r:T.r};if(S.sharedf[encode_cell(L)]){var J=S.sharedf[encode_cell(L)];P.push(stringify_formula(J,_,re,S,E))}else{var te=!1;for(R=0;R!=S.arrayf.length;++R)if(I=S.arrayf[R],!(L.c<I[0].s.c||L.c>I[0].e.c)&&!(L.r<I[0].s.r||L.r>I[0].e.r)){P.push(stringify_formula(I[1],_,re,S,E)),te=!0;break}te||P.push(O[1])}break;case"PtgArray":P.push("{"+stringify_array(O[1])+"}");break;case"PtgMemArea":break;case"PtgAttrSpace":case"PtgAttrSpaceSemi":N=B;break;case"PtgTbl":break;case"PtgMemErr":break;case"PtgMissArg":P.push("");break;case"PtgAreaErr":P.push("#REF!");break;case"PtgAreaErr3d":P.push("#REF!");break;case"PtgList":P.push("Table"+O[1].idx+"[#"+O[1].rt+"]");break;case"PtgMemAreaN":case"PtgMemNoMemN":case"PtgAttrNoop":case"PtgSheet":case"PtgEndSheet":break;case"PtgMemFunc":break;case"PtgMemNoMem":break;case"PtgElfCol":case"PtgElfColS":case"PtgElfColSV":case"PtgElfColV":case"PtgElfLel":case"PtgElfRadical":case"PtgElfRadicalLel":case"PtgElfRadicalS":case"PtgElfRw":case"PtgElfRwV":throw new Error("Unsupported ELFs");case"PtgSxName":throw new Error("Unrecognized Formula Token: "+String(O));default:throw new Error("Unrecognized Formula Token: "+String(O))}var Z=["PtgAttrSpace","PtgAttrSpaceSemi","PtgAttrGoto"];if(E.biff!=3&&N>=0&&Z.indexOf(o[0][B][0])==-1){O=o[0][N];var X=!0;switch(O[1][0]){case 4:X=!1;case 0:G=fill(" ",O[1][1]);break;case 5:X=!1;case 1:G=fill("\r",O[1][1]);break;default:if(G="",E.WTF)throw new Error("Unexpected PtgAttrSpaceType "+O[1][0])}P.push((X?G:"")+P.pop()+(X?"":G)),N=-1}}if(P.length>1&&E.WTF)throw new Error("bad formula stack");return P[0]}function parse_ArrayParsedFormula(o,u,T){var S=o.l+u,E=T.biff==2?1:2,C,_=o.read_shift(E);if(_==65535)return[[],parsenoop(o,u-2)];var P=parse_Rgce(o,_,T);return u!==_+E&&(C=parse_RgbExtra(o,u-_-E,P,T)),o.l=S,[P,C]}function parse_XLSCellParsedFormula(o,u,T){var S=o.l+u,E=T.biff==2?1:2,C,_=o.read_shift(E);if(_==65535)return[[],parsenoop(o,u-2)];var P=parse_Rgce(o,_,T);return u!==_+E&&(C=parse_RgbExtra(o,u-_-E,P,T)),o.l=S,[P,C]}function parse_NameParsedFormula(o,u,T,S){var E=o.l+u,C=parse_Rgce(o,S,T),_;return E!==o.l&&(_=parse_RgbExtra(o,E-o.l,C,T)),[C,_]}function parse_SharedParsedFormula(o,u,T){var S=o.l+u,E,C=o.read_shift(2),_=parse_Rgce(o,C,T);return C==65535?[[],parsenoop(o,u-2)]:(u!==C+2&&(E=parse_RgbExtra(o,S-C-2,_,T)),[_,E])}function parse_FormulaValue(o){var u;if(__readUInt16LE(o,o.l+6)!==65535)return[parse_Xnum(o),"n"];switch(o[o.l]){case 0:return o.l+=8,["String","s"];case 1:return u=o[o.l+2]===1,o.l+=8,[u,"b"];case 2:return u=o[o.l+2],o.l+=8,[u,"e"];case 3:return o.l+=8,["","s"]}return[]}function write_FormulaValue(o){if(o==null){var u=new_buf(8);return u.write_shift(1,3),u.write_shift(1,0),u.write_shift(2,0),u.write_shift(2,0),u.write_shift(2,65535),u}else if(typeof o=="number")return write_Xnum(o);return write_Xnum(0)}function parse_Formula(o,u,T){var S=o.l+u,E=parse_XLSCell(o);T.biff==2&&++o.l;var C=parse_FormulaValue(o),_=o.read_shift(1);T.biff!=2&&(o.read_shift(1),T.biff>=5&&o.read_shift(4));var P=parse_XLSCellParsedFormula(o,S-o.l,T);
269return{cell:E,val:C[0],formula:P,shared:_>>3&1,tt:C[1]}}function write_Formula(o,u,T,S,E){var C=write_XLSCell(u,T,E),_=write_FormulaValue(o.v),P=new_buf(6),R=33;P.write_shift(2,R),P.write_shift(4,0);for(var I=new_buf(o.bf.length),L=0;L<o.bf.length;++L)I[L]=o.bf[L];var j=bconcat([C,_,P,I]);return j}function parse_XLSBParsedFormula(o,u,T){var S=o.read_shift(4),E=parse_Rgce(o,S,T),C=o.read_shift(4),_=C>0?parse_RgbExtra(o,C,E,T):null;return[E,_]}var parse_XLSBArrayParsedFormula=parse_XLSBParsedFormula,parse_XLSBCellParsedFormula=parse_XLSBParsedFormula,parse_XLSBNameParsedFormula=parse_XLSBParsedFormula,parse_XLSBSharedParsedFormula=parse_XLSBParsedFormula,Cetab={0:"BEEP",1:"OPEN",2:"OPEN.LINKS",3:"CLOSE.ALL",4:"SAVE",5:"SAVE.AS",6:"FILE.DELETE",7:"PAGE.SETUP",8:"PRINT",9:"PRINTER.SETUP",10:"QUIT",11:"NEW.WINDOW",12:"ARRANGE.ALL",13:"WINDOW.SIZE",14:"WINDOW.MOVE",15:"FULL",16:"CLOSE",17:"RUN",22:"SET.PRINT.AREA",23:"SET.PRINT.TITLES",24:"SET.PAGE.BREAK",25:"REMOVE.PAGE.BREAK",26:"FONT",27:"DISPLAY",28:"PROTECT.DOCUMENT",29:"PRECISION",30:"A1.R1C1",31:"CALCULATE.NOW",32:"CALCULATION",34:"DATA.FIND",35:"EXTRACT",36:"DATA.DELETE",37:"SET.DATABASE",38:"SET.CRITERIA",39:"SORT",40:"DATA.SERIES",41:"TABLE",42:"FORMAT.NUMBER",43:"ALIGNMENT",44:"STYLE",45:"BORDER",46:"CELL.PROTECTION",47:"COLUMN.WIDTH",48:"UNDO",49:"CUT",50:"COPY",51:"PASTE",52:"CLEAR",53:"PASTE.SPECIAL",54:"EDIT.DELETE",55:"INSERT",56:"FILL.RIGHT",57:"FILL.DOWN",61:"DEFINE.NAME",62:"CREATE.NAMES",63:"FORMULA.GOTO",64:"FORMULA.FIND",65:"SELECT.LAST.CELL",66:"SHOW.ACTIVE.CELL",67:"GALLERY.AREA",68:"GALLERY.BAR",69:"GALLERY.COLUMN",70:"GALLERY.LINE",71:"GALLERY.PIE",72:"GALLERY.SCATTER",73:"COMBINATION",74:"PREFERRED",75:"ADD.OVERLAY",76:"GRIDLINES",77:"SET.PREFERRED",78:"AXES",79:"LEGEND",80:"ATTACH.TEXT",81:"ADD.ARROW",82:"SELECT.CHART",83:"SELECT.PLOT.AREA",84:"PATTERNS",85:"MAIN.CHART",86:"OVERLAY",87:"SCALE",88:"FORMAT.LEGEND",89:"FORMAT.TEXT",90:"EDIT.REPEAT",91:"PARSE",92:"JUSTIFY",93:"HIDE",94:"UNHIDE",95:"WORKSPACE",96:"FORMULA",97:"FORMULA.FILL",98:"FORMULA.ARRAY",99:"DATA.FIND.NEXT",100:"DATA.FIND.PREV",101:"FORMULA.FIND.NEXT",102:"FORMULA.FIND.PREV",103:"ACTIVATE",104:"ACTIVATE.NEXT",105:"ACTIVATE.PREV",106:"UNLOCKED.NEXT",107:"UNLOCKED.PREV",108:"COPY.PICTURE",109:"SELECT",110:"DELETE.NAME",111:"DELETE.FORMAT",112:"VLINE",113:"HLINE",114:"VPAGE",115:"HPAGE",116:"VSCROLL",117:"HSCROLL",118:"ALERT",119:"NEW",120:"CANCEL.COPY",121:"SHOW.CLIPBOARD",122:"MESSAGE",124:"PASTE.LINK",125:"APP.ACTIVATE",126:"DELETE.ARROW",127:"ROW.HEIGHT",128:"FORMAT.MOVE",129:"FORMAT.SIZE",130:"FORMULA.REPLACE",131:"SEND.KEYS",132:"SELECT.SPECIAL",133:"APPLY.NAMES",134:"REPLACE.FONT",135:"FREEZE.PANES",136:"SHOW.INFO",137:"SPLIT",138:"ON.WINDOW",139:"ON.DATA",140:"DISABLE.INPUT",142:"OUTLINE",143:"LIST.NAMES",144:"FILE.CLOSE",145:"SAVE.WORKBOOK",146:"DATA.FORM",147:"COPY.CHART",148:"ON.TIME",149:"WAIT",150:"FORMAT.FONT",151:"FILL.UP",152:"FILL.LEFT",153:"DELETE.OVERLAY",155:"SHORT.MENUS",159:"SET.UPDATE.STATUS",161:"COLOR.PALETTE",162:"DELETE.STYLE",163:"WINDOW.RESTORE",164:"WINDOW.MAXIMIZE",166:"CHANGE.LINK",167:"CALCULATE.DOCUMENT",168:"ON.KEY",169:"APP.RESTORE",170:"APP.MOVE",171:"APP.SIZE",172:"APP.MINIMIZE",173:"APP.MAXIMIZE",174:"BRING.TO.FRONT",175:"SEND.TO.BACK",185:"MAIN.CHART.TYPE",186:"OVERLAY.CHART.TYPE",187:"SELECT.END",188:"OPEN.MAIL",189:"SEND.MAIL",190:"STANDARD.FONT",191:"CONSOLIDATE",192:"SORT.SPECIAL",193:"GALLERY.3D.AREA",194:"GALLERY.3D.COLUMN",195:"GALLERY.3D.LINE",196:"GALLERY.3D.PIE",197:"VIEW.3D",198:"GOAL.SEEK",199:"WORKGROUP",200:"FILL.GROUP",201:"UPDATE.LINK",202:"PROMOTE",203:"DEMOTE",204:"SHOW.DETAIL",206:"UNGROUP",207:"OBJECT.PROPERTIES",208:"SAVE.NEW.OBJECT",209:"SHARE",210:"SHARE.NAME",211:"DUPLICATE",212:"APPLY.STYLE",213:"ASSIGN.TO.OBJECT",214:"OBJECT.PROTECTION",215:"HIDE.OBJECT",216:"SET.EXTRACT",217:"CREATE.PUBLISHER",218:"SUBSCRIBE.TO",219:"ATTRIBUTES",220:"SHOW.TOOLBAR",222:"PRINT.PREVIEW",223:"EDIT.COLOR",224:"SHOW.LEVELS",225:"FORMAT.MAIN",226:"FORMAT.OVERLAY",227:"ON.RECALC",228:"EDIT.SERIES",229:"DEFINE.STYLE",240:"LINE.PRINT",243:"ENTER.DATA",249:"GALLERY.RADAR",250:"MERGE.STYLES",251:"EDITION.OPTIONS",252:"PASTE.PICTURE",253:"PASTE.PICTURE.LINK",254:"SPELLING",256:"ZOOM",259:"INSERT.OBJECT",260:"WINDOW.MINIMIZE",265:"SOUND.NOTE",266:"SOUND.PLAY",267:"FORMAT.SHAPE",268:"EXTEND.POLYGON",269:"FORMAT.AUTO",272:"GALLERY.3D.BAR",273:"GALLERY.3D.SURFACE",274:"FILL.AUTO",276:"CUSTOMIZE.TOOLBAR",277:"ADD.TOOL",278:"EDIT.OBJECT",279:"ON.DOUBLECLICK",280:"ON.ENTRY",281:"WORKBOOK.ADD",282:"WORKBOOK.MOVE",283:"WORKBOOK.COPY",284:"WORKBOOK.OPTIONS",285:"SAVE.WORKSPACE",288:"CHART.WIZARD",289:"DELETE.TOOL",290:"MOVE.TOOL",291:"WORKBOOK.SELECT",292:"WORKBOOK.ACTIVATE",293:"ASSIGN.TO.TOOL",295:"COPY.TOOL",296:"RESET.TOOL",297:"CONSTRAIN.NUMERIC",298:"PASTE.TOOL",302:"WORKBOOK.NEW",305:"SCENARIO.CELLS",306:"SCENARIO.DELETE",307:"SCENARIO.ADD",308:"SCENARIO.EDIT",309:"SCENARIO.SHOW",310:"SCENARIO.SHOW.
269NEXT",311:"SCENARIO.SUMMARY",312:"PIVOT.TABLE.WIZARD",313:"PIVOT.FIELD.PROPERTIES",314:"PIVOT.FIELD",315:"PIVOT.ITEM",316:"PIVOT.ADD.FIELDS",318:"OPTIONS.CALCULATION",319:"OPTIONS.EDIT",320:"OPTIONS.VIEW",321:"ADDIN.MANAGER",322:"MENU.EDITOR",323:"ATTACH.TOOLBARS",324:"VBAActivate",325:"OPTIONS.CHART",328:"VBA.INSERT.FILE",330:"VBA.PROCEDURE.DEFINITION",336:"ROUTING.SLIP",338:"ROUTE.DOCUMENT",339:"MAIL.LOGON",342:"INSERT.PICTURE",343:"EDIT.TOOL",344:"GALLERY.DOUGHNUT",350:"CHART.TREND",352:"PIVOT.ITEM.PROPERTIES",354:"WORKBOOK.INSERT",355:"OPTIONS.TRANSITION",356:"OPTIONS.GENERAL",370:"FILTER.ADVANCED",373:"MAIL.ADD.MAILER",374:"MAIL.DELETE.MAILER",375:"MAIL.REPLY",376:"MAIL.REPLY.ALL",377:"MAIL.FORWARD",378:"MAIL.NEXT.LETTER",379:"DATA.LABEL",380:"INSERT.TITLE",381:"FONT.PROPERTIES",382:"MACRO.OPTIONS",383:"WORKBOOK.HIDE",384:"WORKBOOK.UNHIDE",385:"WORKBOOK.DELETE",386:"WORKBOOK.NAME",388:"GALLERY.CUSTOM",390:"ADD.CHART.AUTOFORMAT",391:"DELETE.CHART.AUTOFORMAT",392:"CHART.ADD.DATA",393:"AUTO.OUTLINE",394:"TAB.ORDER",395:"SHOW.DIALOG",396:"SELECT.ALL",397:"UNGROUP.SHEETS",398:"SUBTOTAL.CREATE",399:"SUBTOTAL.REMOVE",400:"RENAME.OBJECT",412:"WORKBOOK.SCROLL",413:"WORKBOOK.NEXT",414:"WORKBOOK.PREV",415:"WORKBOOK.TAB.SPLIT",416:"FULL.SCREEN",417:"WORKBOOK.PROTECT",420:"SCROLLBAR.PROPERTIES",421:"PIVOT.SHOW.PAGES",422:"TEXT.TO.COLUMNS",423:"FORMAT.CHARTTYPE",424:"LINK.FORMAT",425:"TRACER.DISPLAY",430:"TRACER.NAVIGATE",431:"TRACER.CLEAR",432:"TRACER.ERROR",433:"PIVOT.FIELD.GROUP",434:"PIVOT.FIELD.UNGROUP",435:"CHECKBOX.PROPERTIES",436:"LABEL.PROPERTIES",437:"LISTBOX.PROPERTIES",438:"EDITBOX.PROPERTIES",439:"PIVOT.REFRESH",440:"LINK.COMBO",441:"OPEN.TEXT",442:"HIDE.DIALOG",443:"SET.DIALOG.FOCUS",444:"ENABLE.OBJECT",445:"PUSHBUTTON.PROPERTIES",446:"SET.DIALOG.DEFAULT",447:"FILTER",448:"FILTER.SHOW.ALL",449:"CLEAR.OUTLINE",450:"FUNCTION.WIZARD",451:"ADD.LIST.ITEM",452:"SET.LIST.ITEM",453:"REMOVE.LIST.ITEM",454:"SELECT.LIST.ITEM",455:"SET.CONTROL.VALUE",456:"SAVE.COPY.AS",458:"OPTIONS.LISTS.ADD",459:"OPTIONS.LISTS.DELETE",460:"SERIES.AXES",461:"SERIES.X",462:"SERIES.Y",463:"ERRORBAR.X",464:"ERRORBAR.Y",465:"FORMAT.CHART",466:"SERIES.ORDER",467:"MAIL.LOGOFF",468:"CLEAR.ROUTING.SLIP",469:"APP.ACTIVATE.MICROSOFT",470:"MAIL.EDIT.MAILER",471:"ON.SHEET",472:"STANDARD.WIDTH",473:"SCENARIO.MERGE",474:"SUMMARY.INFO",475:"FIND.FILE",476:"ACTIVE.CELL.FONT",477:"ENABLE.TIPWIZARD",478:"VBA.MAKE.ADDIN",480:"INSERTDATATABLE",481:"WORKGROUP.OPTIONS",482:"MAIL.SEND.MAILER",485:"AUTOCORRECT",489:"POST.DOCUMENT",491:"PICKLIST",493:"VIEW.SHOW",494:"VIEW.DEFINE",495:"VIEW.DELETE",509:"SHEET.BACKGROUND",510:"INSERT.MAP.OBJECT",511:"OPTIONS.MENONO",517:"MSOCHECKS",518:"NORMAL",519:"LAYOUT",520:"RM.PRINT.AREA",521:"CLEAR.PRINT.AREA",522:"ADD.PRINT.AREA",523:"MOVE.BRK",545:"HIDECURR.NOTE",546:"HIDEALL.NOTES",547:"DELETE.NOTE",548:"TRAVERSE.NOTES",549:"ACTIVATE.NOTES",620:"PROTECT.REVISIONS",621:"UNPROTECT.REVISIONS",647:"OPTIONS.ME",653:"WEB.PUBLISH",667:"NEWWEBQUERY",673:"PIVOT.TABLE.CHART",753:"OPTIONS.SAVE",755:"OPTIONS.SPELL",808:"HIDEALL.INKANNOTS"},Ftab={0:"COUNT",1:"IF",2:"ISNA",3:"ISERROR",4:"SUM",5:"AVERAGE",6:"MIN",7:"MAX",8:"ROW",9:"COLUMN",10:"NA",11:"NPV",12:"STDEV",13:"DOLLAR",14:"FIXED",15:"SIN",16:"COS",17:"TAN",18:"ATAN",19:"PI",20:"SQRT",21:"EXP",22:"LN",23:"LOG10",24:"ABS",25:"INT",26:"SIGN",27:"ROUND",28:"LOOKUP",29:"INDEX",30:"REPT",31:"MID",32:"LEN",33:"VALUE",34:"TRUE",35:"FALSE",36:"AND",37:"OR",38:"NOT",39:"MOD",40:"DCOUNT",41:"DSUM",42:"DAVERAGE",43:"DMIN",44:"DMAX",45:"DSTDEV",46:"VAR",47:"DVAR",48:"TEXT",49:"LINEST",50:"TREND",51:"LOGEST",52:"GROWTH",53:"GOTO",54:"HALT",55:"RETURN",56:"PV",57:"FV",58:"NPER",59:"PMT",60:"RATE",61:"MIRR",62:"IRR",63:"RAND",64:"MATCH",65:"DATE",66:"TIME",67:"DAY",68:"MONTH",69:"YEAR",70:"WEEKDAY",71:"HOUR",72:"MINUTE",73:"SECOND",74:"NOW",75:"AREAS",76:"ROWS",77:"COLUMNS",78:"OFFSET",79:"ABSREF",80:"RELREF",81:"ARGUMENT",82:"SEARCH",83:"TRANSPOSE",84:"ERROR",85:"STEP",86:"TYPE",87:"ECHO",88:"SET.NAME",89:"CALLER",90:"DEREF",91:"WINDOWS",92:"SERIES",93:"DOCUMENTS",94:"ACTIVE.CELL",95:"SELECTION",96:"RESULT",97:"ATAN2",98:"ASIN",99:"ACOS",100:"CHOOSE",101:"HLOOKUP",102:"VLOOKUP",103:"LINKS",104:"INPUT",105:"ISREF",106:"GET.FORMULA",107:"GET.NAME",108:"SET.VALUE",109:"LOG",110:"EXEC",111:"CHAR",112:"LOWER",113:"UPPER",114:"PROPER",115:"LEFT",116:"RIGHT",117:"EXACT",118:"TRIM",119:"REPLACE",120:"SUBSTITUTE",121:"CODE",122:"NAMES",123:"DIRECTORY",124:"FIND",125:"CELL",126:"ISERR",127:"ISTEXT",128:"ISNUMBER",129:"ISBLANK",130:"T",131:"N",132:"FOPEN",133:"FCLOSE",134:"FSIZE",135:"FREADLN",136:"FREAD",137:"FWRITELN",138:"FWRITE",139:"FPOS",140:"DATEVALUE",141:"TIMEVALUE",142:"SLN",143:"SYD",144:"DDB",145:"GET.DEF",146:"REFTEXT",147:"TEXTREF",148:"INDI
269RECT",149:"REGISTER",150:"CALL",151:"ADD.BAR",152:"ADD.MENU",153:"ADD.COMMAND",154:"ENABLE.COMMAND",155:"CHECK.COMMAND",156:"RENAME.COMMAND",157:"SHOW.BAR",158:"DELETE.MENU",159:"DELETE.COMMAND",160:"GET.CHART.ITEM",161:"DIALOG.BOX",162:"CLEAN",163:"MDETERM",164:"MINVERSE",165:"MMULT",166:"FILES",167:"IPMT",168:"PPMT",169:"COUNTA",170:"CANCEL.KEY",171:"FOR",172:"WHILE",173:"BREAK",174:"NEXT",175:"INITIATE",176:"REQUEST",177:"POKE",178:"EXECUTE",179:"TERMINATE",180:"RESTART",181:"HELP",182:"GET.BAR",183:"PRODUCT",184:"FACT",185:"GET.CELL",186:"GET.WORKSPACE",187:"GET.WINDOW",188:"GET.DOCUMENT",189:"DPRODUCT",190:"ISNONTEXT",191:"GET.NOTE",192:"NOTE",193:"STDEVP",194:"VARP",195:"DSTDEVP",196:"DVARP",197:"TRUNC",198:"ISLOGICAL",199:"DCOUNTA",200:"DELETE.BAR",201:"UNREGISTER",204:"USDOLLAR",205:"FINDB",206:"SEARCHB",207:"REPLACEB",208:"LEFTB",209:"RIGHTB",210:"MIDB",211:"LENB",212:"ROUNDUP",213:"ROUNDDOWN",214:"ASC",215:"DBCS",216:"RANK",219:"ADDRESS",220:"DAYS360",221:"TODAY",222:"VDB",223:"ELSE",224:"ELSE.IF",225:"END.IF",226:"FOR.CELL",227:"MEDIAN",228:"SUMPRODUCT",229:"SINH",230:"COSH",231:"TANH",232:"ASINH",233:"ACOSH",234:"ATANH",235:"DGET",236:"CREATE.OBJECT",237:"VOLATILE",238:"LAST.ERROR",239:"CUSTOM.UNDO",240:"CUSTOM.REPEAT",241:"FORMULA.CONVERT",242:"GET.LINK.INFO",243:"TEXT.BOX",244:"INFO",245:"GROUP",246:"GET.OBJECT",247:"DB",248:"PAUSE",251:"RESUME",252:"FREQUENCY",253:"ADD.TOOLBAR",254:"DELETE.TOOLBAR",255:"User",256:"RESET.TOOLBAR",257:"EVALUATE",258:"GET.TOOLBAR",259:"GET.TOOL",260:"SPELLING.CHECK",261:"ERROR.TYPE",262:"APP.TITLE",263:"WINDOW.TITLE",264:"SAVE.TOOLBAR",265:"ENABLE.TOOL",266:"PRESS.TOOL",267:"REGISTER.ID",268:"GET.WORKBOOK",269:"AVEDEV",270:"BETADIST",271:"GAMMALN",272:"BETAINV",273:"BINOMDIST",274:"CHIDIST",275:"CHIINV",276:"COMBIN",277:"CONFIDENCE",278:"CRITBINOM",279:"EVEN",280:"EXPONDIST",281:"FDIST",282:"FINV",283:"FISHER",284:"FISHERINV",285:"FLOOR",286:"GAMMADIST",287:"GAMMAINV",288:"CEILING",289:"HYPGEOMDIST",290:"LOGNORMDIST",291:"LOGINV",292:"NEGBINOMDIST",293:"NORMDIST",294:"NORMSDIST",295:"NORMINV",296:"NORMSINV",297:"STANDARDIZE",298:"ODD",299:"PERMUT",300:"POISSON",301:"TDIST",302:"WEIBULL",303:"SUMXMY2",304:"SUMX2MY2",305:"SUMX2PY2",306:"CHITEST",307:"CORREL",308:"COVAR",309:"FORECAST",310:"FTEST",311:"INTERCEPT",312:"PEARSON",313:"RSQ",314:"STEYX",315:"SLOPE",316:"TTEST",317:"PROB",318:"DEVSQ",319:"GEOMEAN",320:"HARMEAN",321:"SUMSQ",322:"KURT",323:"SKEW",324:"ZTEST",325:"LARGE",326:"SMALL",327:"QUARTILE",328:"PERCENTILE",329:"PERCENTRANK",330:"MODE",331:"TRIMMEAN",332:"TINV",334:"MOVIE.COMMAND",335:"GET.MOVIE",336:"CONCATENATE",337:"POWER",338:"PIVOT.ADD.DATA",339:"GET.PIVOT.TABLE",340:"GET.PIVOT.FIELD",341:"GET.PIVOT.ITEM",342:"RADIANS",343:"DEGREES",344:"SUBTOTAL",345:"SUMIF",346:"COUNTIF",347:"COUNTBLANK",348:"SCENARIO.GET",349:"OPTIONS.LISTS.GET",350:"ISPMT",351:"DATEDIF",352:"DATESTRING",353:"NUMBERSTRING",354:"ROMAN",355:"OPEN.DIALOG",356:"SAVE.DIALOG",357:"VIEW.GET",358:"GETPIVOTDATA",359:"HYPERLINK",360:"PHONETIC",361:"AVERAGEA",362:"MAXA",363:"MINA",364:"STDEVPA",365:"VARPA",366:"STDEVA",367:"VARA",368:"BAHTTEXT",369:"THAIDAYOFWEEK",370:"THAIDIGIT",371:"THAIMONTHOFYEAR",372:"THAINUMSOUND",373:"THAINUMSTRING",374:"THAISTRINGLENGTH",375:"ISTHAIDIGIT",376:"ROUNDBAHTDOWN",377:"ROUNDBAHTUP",378:"THAIYEAR",379:"RTD",380:"CUBEVALUE",381:"CUBEMEMBER",382:"CUBEMEMBERPROPERTY",383:"CUBERANKEDMEMBER",384:"HEX2BIN",385:"HEX2DEC",386:"HEX2OCT",387:"DEC2BIN",388:"DEC2HEX",389:"DEC2OCT",390:"OCT2BIN",391:"OCT2HEX",392:"OCT2DEC",393:"BIN2DEC",394:"BIN2OCT",395:"BIN2HEX",396:"IMSUB",397:"IMDIV",398:"IMPOWER",399:"IMABS",400:"IMSQRT",401:"IMLN",402:"IMLOG2",403:"IMLOG10",404:"IMSIN",405:"IMCOS",406:"IMEXP",407:"IMARGUMENT",408:"IMCONJUGATE",409:"IMAGINARY",410:"IMREAL",411:"COMPLEX",412:"IMSUM",413:"IMPRODUCT",414:"SERIESSUM",415:"FACTDOUBLE",416:"SQRTPI",417:"QUOTIENT",418:"DELTA",419:"GESTEP",420:"ISEVEN",421:"ISODD",422:"MROUND",423:"ERF",424:"ERFC",425:"BESSELJ",426:"BESSELK",427:"BESSELY",428:"BESSELI",429:"XIRR",430:"XNPV",431:"PRICEMAT",432:"YIELDMAT",433:"INTRATE",434:"RECEIVED",435:"DISC",436:"PRICEDISC",437:"YIELDDISC",438:"TBILLEQ",439:"TBILLPRICE",440:"TBILLYIELD",441:"PRICE",442:"YIELD",443:"DOLLARDE",444:"DOLLARFR",445:"NOMINAL",446:"EFFECT",447:"CUMPRINC",448:"CUMIPMT",449:"EDATE",450:"EOMONTH",451:"YEARFRAC",452:"COUPDAYBS",453:"COUPDAYS",454:"COUPDAYSNC",455:"COUPNCD",456:"COUPNUM",457:"COUPPCD",458:"DURATION",459:"MDURATION",460:"ODDLPRICE",461:"ODDLYIELD",462:"ODDFPRICE",463:"ODDFYIELD",464:"RANDBETWEEN",465:"WEEKNUM",466:"AMORDEGRC",467:"AMORLINC",468:"CONVERT",724:"SHEETJS",469:"ACCRINT",470:"ACCRINTM",471:"WORKDAY",472:"NETWORKDAYS",473:"GCD",474:"MULTINOMIAL",475:"LCM",476:"FVSCHEDULE",477:"CUBEKPIMEMBER",478:"CUBESET",479:"CUBESETCOUNT",480:"IFERROR",481:"COUNTIFS",482:"SUMIFS",483:"AVERAGEIF",484:"AVERAGEIFS"}
vendor: 19,994 bytes, lines 269-270
269,FtabArgc={2:1,3:1,10:0,15:1,16:1,17:1,18:1,19:0,20:1,21:1,22:1,23:1,24:1,25:1,26:1,27:2,30:2,31:3,32:1,33:1,34:0,35:0,38:1,39:2,40:3,41:3,42:3,43:3,44:3,45:3,47:3,48:2,53:1,61:3,63:0,65:3,66:3,67:1,68:1,69:1,70:1,71:1,72:1,73:1,74:0,75:1,76:1,77:1,79:2,80:2,83:1,85:0,86:1,89:0,90:1,94:0,95:0,97:2,98:1,99:1,101:3,102:3,105:1,106:1,108:2,111:1,112:1,113:1,114:1,117:2,118:1,119:4,121:1,126:1,127:1,128:1,129:1,130:1,131:1,133:1,134:1,135:1,136:2,137:2,138:2,140:1,141:1,142:3,143:4,144:4,161:1,162:1,163:1,164:1,165:2,172:1,175:2,176:2,177:3,178:2,179:1,184:1,186:1,189:3,190:1,195:3,196:3,197:1,198:1,199:3,201:1,207:4,210:3,211:1,212:2,213:2,214:1,215:1,225:0,229:1,230:1,231:1,232:1,233:1,234:1,235:3,244:1,247:4,252:2,257:1,261:1,271:1,273:4,274:2,275:2,276:2,277:3,278:3,279:1,280:3,281:3,282:3,283:1,284:1,285:2,286:4,287:3,288:2,289:4,290:3,291:3,292:3,293:4,294:1,295:3,296:1,297:3,298:1,299:2,300:3,301:3,302:4,303:2,304:2,305:2,306:2,307:2,308:2,309:3,310:2,311:2,312:2,313:2,314:2,315:2,316:4,325:2,326:2,327:2,328:2,331:2,332:2,337:2,342:1,343:1,346:2,347:1,350:4,351:3,352:1,353:2,360:1,368:1,369:1,370:1,371:1,372:1,373:1,374:1,375:1,376:1,377:1,378:1,382:3,385:1,392:1,393:1,396:2,397:2,398:2,399:1,400:1,401:1,402:1,403:1,404:1,405:1,406:1,407:1,408:1,409:1,410:1,414:4,415:1,416:1,417:2,420:1,421:1,422:2,424:1,425:2,426:2,427:2,428:2,430:3,438:3,439:3,440:3,443:2,444:2,445:2,446:2,447:6,448:6,449:2,450:2,464:2,468:3,476:2,479:1,480:2,65535:0};function ods_to_csf_formula(o){return o.slice(0,3)=="of:"&&(o=o.slice(3)),o.charCodeAt(0)==61&&(o=o.slice(1),o.charCodeAt(0)==61&&(o=o.slice(1))),o=o.replace(/COM\.MICROSOFT\./g,""),o=o.replace(/\[((?:\.[A-Z]+[0-9]+)(?::\.[A-Z]+[0-9]+)?)\]/g,function(u,T){return T.replace(/\./g,"")}),o=o.replace(/\[.(#[A-Z]*[?!])\]/g,"$1"),o.replace(/[;~]/g,",").replace(/\|/g,";")}function csf_to_ods_formula(o){var u="of:="+o.replace(crefregex,"$1[.$2$3$4$5]").replace(/\]:\[/g,":");return u.replace(/;/g,"|").replace(/,/g,";")}function ods_to_csf_3D(o){var u=o.split(":"),T=u[0].split(".")[0];return[T,u[0].split(".")[1]+(u.length>1?":"+(u[1].split(".")[1]||u[1].split(".")[0]):"")]}function csf_to_ods_3D(o){return o.replace(/\./,"!")}var strs={},_ssfopts={},browser_has_Map=typeof Map<"u";function get_sst_id(o,u,T){var S=0,E=o.length;if(T){if(browser_has_Map?T.has(u):Object.prototype.hasOwnProperty.call(T,u)){for(var C=browser_has_Map?T.get(u):T[u];S<C.length;++S)if(o[C[S]].t===u)return o.Count++,C[S]}}else for(;S<E;++S)if(o[S].t===u)return o.Count++,S;return o[E]={t:u},o.Count++,o.Unique++,T&&(browser_has_Map?(T.has(u)||T.set(u,[]),T.get(u).push(E)):(Object.prototype.hasOwnProperty.call(T,u)||(T[u]=[]),T[u].push(E))),E}function col_obj_w(o,u){var T={min:o+1,max:o+1},S=-1;return u.MDW&&(MDW=u.MDW),u.width!=null?T.customWidth=1:u.wpx!=null?S=px2char(u.wpx):u.wch!=null&&(S=u.wch),S>-1?(T.width=char2width(S),T.customWidth=1):u.width!=null&&(T.width=u.width),u.hidden&&(T.hidden=!0),u.level!=null&&(T.outlineLevel=T.level=u.level),T}function default_margins(o,u){if(o){var T=[.7,.7,.75,.75,.3,.3];u=="xlml"&&(T=[1,1,1,1,.5,.5]),o.left==null&&(o.left=T[0]),o.right==null&&(o.right=T[1]),o.top==null&&(o.top=T[2]),o.bottom==null&&(o.bottom=T[3]),o.header==null&&(o.header=T[4]),o.footer==null&&(o.footer=T[5])}}function get_cell_style(o,u,T){var S=T.revssf[u.z!=null?u.z:"General"],E=60,C=o.length;if(S==null&&T.ssf){for(;E<392;++E)if(T.ssf[E]==null){SSF_load(u.z,E),T.ssf[E]=u.z,T.revssf[u.z]=S=E;break}}for(E=0;E!=C;++E)if(o[E].numFmtId===S)return E;return o[C]={numFmtId:S,fontId:0,fillId:0,borderId:0,xfId:0,applyNumberFormat:1},C}function safe_format(o,u,T,S,E,C){try{S.cellNF&&(o.z=table_fmt[u])}catch(P){if(S.WTF)throw P}if(!(o.t==="z"&&!S.cellStyles)){if(o.t==="d"&&typeof o.v=="string"&&(o.v=parseDate(o.v)),(!S||S.cellText!==!1)&&o.t!=="z")try{if(table_fmt[u]==null&&SSF_load(SSFImplicit[u]||"General",u),o.t==="e")o.w=o.w||BErr[o.v];else if(u===0)if(o.t==="n")(o.v|0)===o.v?o.w=o.v.toString(10):o.w=SSF_general_num(o.v);else if(o.t==="d"){var _=datenum(o.v);(_|0)===_?o.w=_.toString(10):o.w=SSF_general_num(_)}else{if(o.v===void 0)return"";o.w=SSF_general(o.v,_ssfopts)}else o.t==="d"?o.w=SSF_format(u,datenum(o.v),_ssfopts):o.w=SSF_format(u,o.v,_ssfopts)}catch(P){if(S.WTF)throw P}if(S.cellStyles&&T!=null)try{o.s=C.Fills[T],o.s.fgColor&&o.s.fgColor.theme&&!o.s.fgColor.rgb&&(o.s.fgColor.rgb=rgb_tint(E.themeElements.clrScheme[o.s.fgColor.theme].rgb,o.s.fgColor.tint||0),S.WTF&&(o.s.fgColor.raw_rgb=E.themeElements.clrScheme[o.s.fgColor.theme].rgb)),o.s.bgColor&&o.s.bgColor.theme&&(o.s.bgColor.rgb=rgb_tint(E.themeElements.clrScheme[o.s.bgColor.theme].rgb,o.s.bgColor.tint||0),S.WTF&&(o.s.bgColor.raw_rgb=E.themeElements.clrScheme[o.s.bgColor.theme].rgb))}catch(P){if(S.WTF&&C.Fills)throw P}}}function check_ws(o,u,T){if(o&&o["!ref"]){var S=safe_decode_range(o["!ref"]);if(S.e.c<S.s.c||S.e.r<S.s.r)throw new Error("Bad range ("+T+"): "+o["!ref"])}}function parse_ws_xml_dim(o,u){var T=safe_decode_range(u);T.s.r<=T.e.r&&T.s.c<=T.e.c&&T.s.r>=0&&T.s.c>=0&&(o["!ref"]=encode_range(T))}var mergecregex=/<(?:\w:)?mergeCell ref="[A-Z0-9:]+"\s*[\/]?>/g,sheetdataregex=/<(?:\w+:)?sheetData[^>]*>([\s\S]*)<\/(?:\w+:)?sheetData>/,hlinkregex=/<(?:\w:)?hyperlink [^>]*>/mg,dimregex=/"(\w*:\w*)"/,colregex=/<(?:\w:)?col\b[^>]*[\/]?>/g,afregex=/<(?:\w:)?autoFilter[^>]*([\/]|>([\s\S]*)<\/(?:\w:)?autoFilter)>/g,marginregex=/<(?:\w:)?pageMargins[^>]*\/>/g,sheetprregex=/<(?:\w:)?sheetPr\b(?:[^>a-z][^>]*)?\/>/,sheetprregex2=/<(?:\w:)?sheetPr[^>]*(?:[\/]|>([\s\S]*)<\/(?:\w:)?sheetPr)>/,svsregex=/<(?:\w:)?sheetViews[^>]*(?:[\/]|>([\s\S]*)<\/(?:\w:)?sheetViews)>/;function parse_ws_xml(o,u,T,S,E,C,_){if(!o)return o;S||(S={"!id":{}});var P=u.dense?[]:{},R={s:{r:2e6,c:2e6},e:{r:0,c:0}},I="",L="",j=o.match(sheetdataregex);j?(I=o.slice(0,j.index),L=o.slice(j.index+j[0].length)):I=L=o;var M=I.match(sheetprregex);M?parse_ws_xml_sheetpr(M[0],P,E,T):(M=I.match(sheetprregex2))&&parse_ws_xml_sheetpr2(M[0],M[1]||"",P,E,T);var D=(I.match(/<(?:\w*:)?dimension/)||{index:-1}).index;if(D>0){var F=I.slice(D,D+50).match(dimregex);F&&parse_ws_xml_dim(P,F[1])}var N=I.match(svsregex);N&&N[1]&&parse_ws_xml_sheetviews(N[1],E);var G=[];if(u.cellStyles){var B=I.match(colregex);B&&parse_ws_xml_cols(G,B)}j&&parse_ws_xml_data(j[1],P,u,R,C,_);var H=L.match(afregex);H&&(P["!autofilter"]=parse_ws_xml_autofilter(H[0]));var O=[],V=L.match(mergecregex);if(V)for(D=0;D!=V.length;++D)O[D]=safe_decode_range(V[D].slice(V[D].indexOf('"')+1));var U=L.match(hlinkregex);U&&parse_ws_xml_hlinks(P,U,S);var W=L.match(marginregex);if(W&&(P["!margins"]=parse_ws_xml_margins(parsexmltag(W[0]))),!P["!ref"]&&R.e.c>=R.s.c&&R.e.r>=R.s.r&&(P["!ref"]=encode_range(R)),u.sheetRows>0&&P["!ref"]){var K=safe_decode_range(P["!ref"]);u.sheetRows<=+K.e.r&&(K.e.r=u.sheetRows-1,K.e.r>R.e.r&&(K.e.r=R.e.r),K.e.r<K.s.r&&(K.s.r=K.e.r),K.e.c>R.e.c&&(K.e.c=R.e.c),K.e.c<K.s.c&&(K.s.c=K.e.c),P["!fullref"]=P["!ref"],P["!ref"]=encode_range(K))}return G.length>0&&(P["!cols"]=G),O.length>0&&(P["!merges"]=O),P}function write_ws_xml_merges(o){if(o.length===0)return"";for(var u='<mergeCells count="'+o.length+'">',T=0;T!=o.length;++T)u+='<mergeCell ref="'+encode_range(o[T])+'"/>';return u+"</mergeCells>"}function parse_ws_xml_sheetpr(o,u,T,S){var E=parsexmltag(o);T.Sheets[S]||(T.Sheets[S]={}),E.codeName&&(T.Sheets[S].CodeName=unescapexml(utf8read(E.codeName)))}function parse_ws_xml_sheetpr2(o,u,T,S,E){parse_ws_xml_sheetpr(o.slice(0,o.indexOf(">")),T,S,E)}function write_ws_xml_sheetpr(o,u,T,S,E){var C=!1,_={},P=null;if(S.bookType!=="xlsx"&&u.vbaraw){var R=u.SheetNames[T];try{u.Workbook&&(R=u.Workbook.Sheets[T].CodeName||R)}catch{}C=!0,_.codeName=utf8write(escapexml(R))}if(o&&o["!outline"]){var I={summaryBelow:1,summaryRight:1};o["!outline"].above&&(I.summaryBelow=0),o["!outline"].left&&(I.summaryRight=0),P=(P||"")+writextag("outlinePr",null,I)}!C&&!P||(E[E.length]=writextag("sheetPr",P,_))}var sheetprot_deffalse=["objects","scenarios","selectLockedCells","selectUnlockedCells"],sheetprot_deftrue=["formatColumns","formatRows","formatCells","insertColumns","insertRows","insertHyperlinks","deleteColumns","deleteRows","sort","autoFilter","pivotTables"];function write_ws_xml_protection(o){var u={sheet:1};return sheetprot_deffalse.forEach(function(T){o[T]!=null&&o[T]&&(u[T]="1")}),sheetprot_deftrue.forEach(function(T){o[T]!=null&&!o[T]&&(u[T]="0")}),o.password&&(u.password=crypto_CreatePasswordVerifier_Method1(o.password).toString(16).toUpperCase()),writextag("sheetProtection",null,u)}function parse_ws_xml_hlinks(o,u,T){for(var S=Array.isArray(o),E=0;E!=u.length;++E){var C=parsexmltag(utf8read(u[E]),!0);if(!C.ref)return;var _=((T||{})["!id"]||[])[C.id];_?(C.Target=_.Target,C.location&&(C.Target+="#"+unescapexml(C.location))):(C.Target="#"+unescapexml(C.location),_={Target:C.Target,TargetMode:"Internal"}),C.Rel=_,C.tooltip&&(C.Tooltip=C.tooltip,delete C.tooltip);for(var P=safe_decode_range(C.ref),R=P.s.r;R<=P.e.r;++R)for(var I=P.s.c;I<=P.e.c;++I){var L=encode_cell({c:I,r:R});S?(o[R]||(o[R]=[]),o[R][I]||(o[R][I]={t:"z",v:void 0}),o[R][I].l=C):(o[L]||(o[L]={t:"z",v:void 0}),o[L].l=C)}}}function parse_ws_xml_margins(o){var u={};return["left","right","top","bottom","header","footer"].forEach(function(T){o[T]&&(u[T]=parseFloat(o[T]))}),u}function write_ws_xml_margins(o){return default_margins(o),writextag("pageMargins",null,o)}function parse_ws_xml_cols(o,u){for(var T=!1,S=0;S!=u.length;++S){var E=parsexmltag(u[S],!0);E.hidden&&(E.hidden=parsexmlbool(E.hidden));var C=parseInt(E.min,10)-1,_=parseInt(E.max,10)-1;for(E.outlineLevel&&(E.level=+E.outlineLevel||0),delete E.min,delete E.max,E.width=+E.width,!T&&E.width&&(T=!0,find_mdw_colw(E.width)),process_col(E);C<=_;)o[C++]=dup(E)}}function write_ws_xml_cols(o,u){for(var T=["<cols>"],S,E=0;E!=u.length;++E)(S=u[E])&&(T[T.length]=writextag("col",null,col_obj_w(E,S)));return T[T.length]="</cols>",T.join("")}function parse_ws_xml_autofilter(o){var u={ref:(o.match(/ref="([^"]*)"/)||[])[1]};return u}function write_ws_xml_autofilter(o,u,T,S){var E=typeof o.ref=="string"?o.ref:encode_range(o.ref);T.Workbook||(T.Workbook={Sheets:[]}),T.Workbook.Names||(T.Workbook.Names=[]);var C=T.Workbook.Names,_=decode_range(E);_.s.r==_.e.r&&(_.e.r=decode_range(u["!ref"]).e.r,E=encode_range(_));for(var P=0;P<C.length;++P){var R=C[P];if(R.Name=="_xlnm._FilterDatabase"&&R.Sheet==S){R.Ref="'"+T.SheetNames[S]+"'!"+E;break}}return P==C.length&&C.push({Name:"_xlnm._FilterDatabase",Sheet:S,Ref:"'"+T.SheetNames[S]+"'!"+E}),writextag("autoFilter",null,{ref:E})}var sviewregex=/<(?:\w:)?sheetView(?:[^>a-z][^>]*)?\/?>/;function parse_ws_xml_sheetviews(o,u){u.Views||(u.Views=[{}]),(o.match(sviewregex)||[]).forEach(function(T,S){var E=parsexmltag(T);u.Views[S]||(u.Views[S]={}),+E.zoomScale&&(u.Views[S].zoom=+E.zoomScale),parsexmlbool(E.rightToLeft)&&(u.Views[S].RTL=!0)})}function write_ws_xml_sheetviews(o,u,T,S){var E={workbookViewId:"0"};return(((S||{}).Workbook||{}).Views||[])[0]&&(E.rightToLeft=S.Workbook.Views[0].RTL?"1":"0"),writextag("sheetViews",writextag("sheetView",null,E),{})}function write_ws_xml_cell(o,u,T,S){if(o.c&&T["!comments"].push([u,o.c]),o.v===void 0&&typeof o.f!="string"||o.t==="z"&&!o.f)return"";var E="",C=o.t,_=o.v;if(o.t!=="z")switch(o.t){case"b":E=o.v?"1":"0";break;case"n":E=""+o.v;break;case"e":E=BErr[o.v];break;case"d":S&&S.cellDates?E=parseDate(o.v,-1).toISOString():(o=dup(o),o.t="n",E=""+(o.v=datenum(parseDate(o.v)))),typeof o.z>"u"&&(o.z=table_fmt[14]);break;default:E=o.v;break}var P=writetag("v",escapexml(E)),R={r:u},I=get_cell_style(S.cellXfs,o,S);switch(I!==0&&(R.s=I),o.t){case"n":break;case"d":R.t="d";break;case"b":R.t="b";break;case"e":R.t="e";break;case"z":break;default:if(o.v==null){delete o.t;break}if(o.v.length>32767)throw new Error("Text length must not exceed 32767 characters");if(S&&S.bookSST){P=writetag("v",""+get_sst_id(S.Strings,o.v,S.revStrings)),R.t="s";break}R.t="str";break}if(o.t!=C&&(o.t=C,o.v=_),typeof o.f=="string"&&o.f){var L=o.F&&o.F.slice(0,u.length)==u?{t:"array",ref:o.F}:null;P=writextag("f",escapexml(o.f),L)+(o.v!=null?P:"")}return o.l&&T["!links"].push([u,o.l]),o.D&&(R.cm=1),writextag("c",P,R)}var parse_ws_xml_data=function(){var o=/<(?:\w+:)?c[ \/>]/,u=/<\/(?:\w+:)?row>/,T=/r=["']([^"']*)["']/,S=/<(?:\w+:)?is>([\S\s]*?)<\/(?:\w+:)?is>/,E=/ref=["']([^"']*)["']/,C=matchtag("v"),_=matchtag("f");return function(R,I,L,j,M,D){for(var F=0,N="",G=[],B=[],H=0,O=0,V=0,U="",W,K,Y=0,ee=0,oe,se,Q=0,ie=0,ae=Array.isArray(D.CellXf),re,J=[],te=[],Z=Array.isArray(I),X=[],de={},he=!1,ne=!!L.sheetStubs,ue=R.split(u),ce=0,fe=ue.length;ce!=fe;++ce){N=ue[ce].trim();var ve=N.length;if(ve!==0){var Te=0;e:for(F=0;F<ve;++F)switch(N[F]){case">":if(N[F-1]!="/"){++F;break e}if(L&&L.cellStyles){if(K=parsexmltag(N.slice(Te,F),!0),Y=K.r!=null?parseInt(K.r,10):Y+1,ee=-1,L.sheetRows&&L.sheetRows<Y)continue;de={},he=!1,K.ht&&(he=!0,de.hpt=parseFloat(K.ht),de.hpx=pt2px(de.hpt)),K.hidden=="1"&&(he=!0,de.hidden=!0),K.outlineLevel!=null&&(he=!0,de.level=+K.outlineLevel),he&&(X[Y-1]=de)}break;case"<":Te=F;break}if(Te>=F)break;if(K=parsexmltag(N.slice(Te,F),!0),Y=K.r!=null?parseInt(K.r,10):Y+1,ee=-1,!(L.sheetRows&&L.sheetRows<Y)){j.s.r>Y-1&&(j.s.r=Y-1),j.e.r<Y-1&&(j.e.r=Y-1),L&&L.cellStyles&&(de={},he=!1,K.ht&&(he=!0,de.hpt=parseFloat(K.ht),de.hpx=pt2px(de.hpt)),K.hidden=="1"&&(he=!0,de.hidden=!0),K.outlineLevel!=null&&(he=!0,de.level=+K.outlineLevel),he&&(X[Y-1]=de)),G=N.slice(F).split(o);for(var Se=0;Se!=G.length&&G[Se].trim().charAt(0)=="<";++Se);for(G=G.slice(Se),F=0;F!=G.length;++F)if(N=G[F].trim(),N.length!==0){if(B=N.match(T),H=F,O=0,V=0,N="<c "+(N.slice(0,1)=="<"?">":"")+N,B!=null&&B.length===2){for(H=0,U=B[1],O=0;O!=U.length&&!((V=U.charCodeAt(O)-64)<1||V>26);++O)H=26*H+V;--H,ee=H}else++ee;for(O=0;O!=N.length&&N.charCodeAt(O)!==62;++O);if(++O,K=parsexmltag(N.slice(0,O),!0),K.r||(K.r=encode_cell({r:Y-1,c:ee})),U=N.slice(O),W={t:""},(B=U.match(C))!=null&&B[1]!==""&&(W.v=unescapexml(B[1])),L.cellFormula){if((B=U.match(_))!=null&&B[1]!==""){if(W.f=unescapexml(utf8read(B[1])).replace(/\r\n/g,`
270`),L.xlfn||(W.f=_xlfn(W.f)),B[0].indexOf('t="array"')>-1)W.F=(U.match(E)||[])[1],W.F.indexOf(":")>-1&&J.push([safe_decode_range(W.F),W.F]);else if(B[0].indexOf('t="shared"')>-1){se=parsexmltag(B[0]);var ke=unescapexml(utf8read(B[1]));L.xlfn||(ke=_xlfn(ke)),te[parseInt(se.si,10)]=[se,ke,K.r]}}else(B=U.match(/<f[^>]*\/>/))&&(se=parsexmltag(B[0]),te[se.si]&&(W.f=shift_formula_xlsx(te[se.si][1],te[se.si][2],K.r)));var we=decode_cell(K.r);for(O=0;O<J.length;++O)we.r>=J[O][0].s.r&&we.r<=J[O][0].e.r&&we.c>=J[O][0].s.c&&we.c<=J[O][0].e.c&&(W.F=J[O][1])}if(K.t==null&&W.v===void 0)if(W.f||W.F)W.v=0,W.t="n";else if(ne)W.t="z";else continue;else W.t=K.t||"n";switch(j.s.c>ee&&(j.s.c=ee),j.e.c<ee&&(j.e.c=ee),W.t){case"n":if(W.v==""||W.v==null){if(!ne)continue;W.t="z"}else W.v=parseFloat(W.v);break;case"s":if(typeof W.v>"u"){if(!ne)continue;W.t="z"}else oe=strs[parseInt(W.v,10)],W.v=oe.t,W.r=oe.r,L.cellHTML&&(W.h=oe.h);break;case"str":W.t="s",W.v=W.v!=null?utf8read(W.v):"",L.cellHTML&&(W.h=escapehtml(W.v));break;case"inlineStr":B=U.match(S),W.t="s",B!=null&&(oe=parse_si(B[1]))?(W.v=oe.t,L.cellHTML&&(W.h=oe.h)):W.v="";break;case"b":W.v=parsexmlbool(W.v);break;case"d":L.cellDates?W.v=parseDate(W.v,1):(W.v=datenum(parseDate(W.v,1)),W.t="n");break;case"e":(!L||L.cellText!==!1)&&(W.w=W.v),W.v=RBErr[W.v];break}if(Q=ie=0,re=null,ae&&K.s!==void 0&&(re=D.CellXf[K.s],re!=null&&(re.numFmtId!=null&&(Q=re.numFmtId),L.cellStyles&&re.fillId!=null&&(ie=re.fillId))),safe_format(W,Q,ie,L,M,D),L.cellDates&&ae&&W.t=="n"&&fmt_is_date(table_fmt[Q])&&(W.t="d",W.v=numdate(W.v)),K.cm&&L.xlmeta){var Le=(L.xlmeta.Cell||[])[+K.cm-1];Le&&Le.type=="XLDAPR"&&(W.D=!0)}if(Z){var pe=decode_cell(K.r);I[pe.r]||(I[pe.r]=[]),I[pe.r][pe.c]=W}else I[K.r]=W}}}}X.length>0&&(I["!rows"]=X)}}();function write_ws_xml_data(o,u,T,S){var E=[],C=[],_=safe_decode_range(o["!ref"]),P="",R,I="",L=[],j=0,M=0,D=o["!rows"],F=Array.isArray(o),N={r:I},G,B=-1;for(M=_.s.c;M<=_.e.c;++M)L[M]=encode_col(M);for(j=_.s.r;j<=_.e.r;++j){for(C=[],I=encode_row(j),M=_.s.c;M<=_.e.c;++M){R=L[M]+I;var H=F?(o[j]||[])[M]:o[R];H!==void 0&&(P=write_ws_xml_cell(H,R,o,u))!=null&&C.push(P)}(C.length>0||D&&D[j])&&(N={r:I},D&&D[j]&&(G=D[j],G.hidden&&(N.hidden=1),B=-1,G.hpx?B=px2pt(G.hpx):G.hpt&&(B=G.hpt),B>-1&&(N.ht=B,N.customHeight=1),G.level&&(N.outlineLevel=G.level)),E[E.length]=writextag("row",C.join(""),N))}if(D)for(;j<D.length;++j)D&&D[j]&&(N={r:j+1},G=D[j],G.hidden&&(N.hidden=1),B=-1,G.hpx?B=px2pt(G.hpx):G.hpt&&(B=G.hpt),B>-1&&(N.ht=B,N.customHeight=1),G.level&&(N.outlineLevel=G.level),E[E.length]=writextag("row","",N));return E.join("")}function write_ws_xml(o,u,T,S){var E=[XML_HEADER,writextag("worksheet",null,{xmlns:XMLNS_main[0],"xmlns:r":XMLNS.r})],C=T.SheetNames[o],_=0,P="",R=T.Sheets[C];R==null&&(R={});var I=R["!ref"]||"A1",L=safe_decode_range(I);if(L.e.c>16383||L.e.r>1048575){if(u.WTF)throw new Error("Range "+I+" exceeds format limit A1:XFD1048576");L.e.c=Math.min(L.e.c,16383),L.e.r=Math.min(L.e.c,1048575),I=encode_range(L)}S||(S={}),R["!comments"]=[];var j=[];write_ws_xml_sheetpr(R,T,o,u,E),E[E.length]=writextag("dimension",null,{ref:I}),E[E.length]=write_ws_xml_sheetviews(R,u,o,T),u.sheetFormat&&(E[E.length]=writextag("sheetFormatPr",null,{defaultRowHeight:u.sheetFormat.defaultRowHeight||"16",baseColWidth:u.sheetFormat.baseColWidth||"10",outlineLevelRow:u.sheetFormat.outlineLevelRow||"7"})),R["!cols"]!=null&&R["!cols"].length>0&&(E[E.length]=write_ws_xml_cols(R,R["!cols"])),E[_=E.length]="<sheetData/>",R["!links"]=[],R["!ref"]!=null&&(P=write_ws_xml_data(R,u),P.length>0&&(E[E.length]=P)),E.length>_+1&&(E[E.length]="</sheetData>",E[_]=E[_].replace("/>",">")),R["!protect"]&&(E[E.length]=write_ws_xml_protection(R["!protect"])),R["!autofilter"]!=null&&(E[E.length]=write_ws_xml_autofilter(R["!autofilter"],R,T,o)),R["!merges"]!=null&&R["!merges"].length>0&&(E[E.length]=write_ws_xml_merges(R["!merges"]));var M=-1,D,F=-1;return R["!links"].length>0&&(E[E.length]="<hyperlinks>",R["!links"].forEach(function(N){N[1].Target&&(D={ref:N[0]},N[1].Target.charAt(0)!="#"&&(F=add_rels(S,-1,escapexml(N[1].Target).replace(/#.*$/,""),RELS.HLINK),D["r:id"]="rId"+F),(M=N[1].Target.indexOf("#"))>-1&&(D.location=escapexml(N[1].Target.slice(M+1))),N[1].Tooltip&&(D.tooltip=escapexml(N[1].Tooltip)),E[E.length]=writextag("hyperlink",null,D))}),E[E.length]="</hyperlinks>"),delete R["!links"],R["!margins"]!=null&&(E[E.length]=write_ws_xml_margins(R["!margins"])),(!u||u.ignoreEC||u.ignoreEC==null)&&(E[E.length]=writetag("ignoredErrors",writextag("ignoredError",null,{numberStoredAsText:1,sqref:I}))),j.length>0&&(F=add_rels(S,-1,"../drawings/drawing"+(o+1)+".xml",RELS.DRAW),E[E.length]=writextag("drawing",null,{"r:id":"rId"+F}),R["!drawing"]=j),R["!comments"].length>0&&(F=add_rels(S,-1,"../drawings/vmlDrawing"+(o+1)+".vml",RELS.VML),E[E.length]=writextag("legacyDrawing",null,{"r:id":"rId"+F}),R["!legacy"]=F),E.length>1&&(E[E.length]="</worksheet>",E[1]=E[1].replace("/>",">")),E.join("")}function parse_BrtRowHdr(o,u){var T={},S=o.l+u;T.r=o.read_shift(4),o.l+=4;var E=o.read_shift(2);o.l+=1;var C=o.read_shift(1);return o.l=S,C&7&&(T.level=C&7),C&16&&(T.hidden=!0),C&32&&(T.hpt=E/20),T}function write_BrtRowHdr(o,u,T){var S=new_buf(145),E=(T["!rows"]||[])[o]||{};S.write_shift(4,o),S.write_shift(4,0);var C=320;E.hpx?C=px2pt(E.hpx)*20:E.hpt&&(C=E.hpt*20),S.write_shift(2,C),S.write_shift(1,0);var _=0;E.level&&(_|=E.level),E.hidden&&(_|=16),(E.hpx||E.hpt)&&(_|=32),S.write_shift(1,_),S.write_shift(1,0);var P=0,R=S.l;S.l+=4;for(var I={r:o,c:0},L=0;L<16;++L)if(!(u.s.c>L+1<<10||u.e.c<L<<10)){for(var j=-1,M=-1,D=L<<10;D<L+1<<10;++D){I.c=D;var F=Array.isArray(T)?(T[I.r]||[])[I.c]:T[encode_cell(I)];F&&(j<0&&(j=D),M=D)}j<0||(++P,S.write_shift(4,j),S.write_shift(4,M))}var N=S.l;return S.l=R,S.write_shift(4,P),S.l=N,S.length>S.l?S.slice(0,S.l):S}function write_row_header(o,u,T,S){var E=write_BrtRowHdr(S,T,u);(E.length>17||(u["!rows"]||[])[S])&&write_record(o,0,E)}
270var parse_BrtWsDim=parse_UncheckedRfX,write_BrtWsDim=write_UncheckedRfX;function parse_BrtWsFmtInfo(){}function parse_BrtWsProp(o,u){var T={},S=o[o.l];return++o.l,T.above=!(S&64),T.left=!(S&128),o.l+=18,T.name=parse_XLSBCodeName(o),T}function write_BrtWsProp(o,u,T){T==null&&(T=new_buf(84+4*o.length));var S=192;u&&(u.above&&(S&=-65),u.left&&(S&=-129)),T.write_shift(1,S);for(var E=1;E<3;++E)T.write_shift(1,0);return write_BrtColor({auto:1},T),T.write_shift(-4,-1),T.write_shift(-4,-1),write_XLSBCodeName(o,T),T.slice(0,T.l)}function parse_BrtCellBlank(o){var u=parse_XLSBCell(o);return[u]}function write_BrtCellBlank(o,u,T){return T==null&&(T=new_buf(8)),write_XLSBCell(u,T)}function parse_BrtShortBlank(o){var u=parse_XLSBShortCell(o);return[u]}function write_BrtShortBlank(o,u,T){return T==null&&(T=new_buf(4)),write_XLSBShortCell(u,T)}function parse_BrtCellBool(o){var u=parse_XLSBCell(o),T=o.read_shift(1);return[u,T,"b"]}function write_BrtCellBool(o,u,T){return T==null&&(T=new_buf(9)),write_XLSBCell(u,T),T.write_shift(1,o.v?1:0),T}function parse_BrtShortBool(o){var u=parse_XLSBShortCell(o),T=o.read_shift(1);return[u,T,"b"]}function write_BrtShortBool(o,u,T){return T==null&&(T=new_buf(5)),write_XLSBShortCell(u,T),T.write_shift(1,o.v?1:0),T}function parse_BrtCellError(o){var u=parse_XLSBCell(o),T=o.read_shift(1);return[u,T,"e"]}function write_BrtCellError(o,u,T){return T==null&&(T=new_buf(9)),write_XLSBCell(u,T),T.write_shift(1,o.v),T}function parse_BrtShortError(o){var u=parse_XLSBShortCell(o),T=o.read_shift(1);return[u,T,"e"]}function write_BrtShortError(o,u,T){return T==null&&(T=new_buf(8)),write_XLSBShortCell(u,T),T.write_shift(1,o.v),T.write_shift(2,0),T.write_shift(1,0),T}function parse_BrtCellIsst(o){var u=parse_XLSBCell(o),T=o.read_shift(4);return[u,T,"s"]}function write_BrtCellIsst(o,u,T){return T==null&&(T=new_buf(12)),write_XLSBCell(u,T),T.write_shift(4,u.v),T}function parse_BrtShortIsst(o){var u=parse_XLSBShortCell(o),T=o.read_shift(4);return[u,T,"s"]}function write_BrtShortIsst(o,u,T){return T==null&&(T=new_buf(8)),write_XLSBShortCell(u,T),T.write_shift(4,u.v),T}function parse_BrtCellReal(o){var u=parse_XLSBCell(o),T=parse_Xnum(o);return[u,T,"n"]}function write_BrtCellReal(o,u,T){return T==null&&(T=new_buf(16)),write_XLSBCell(u,T),write_Xnum(o.v,T),T}function parse_BrtShortReal(o){var u=parse_XLSBShortCell(o),T=parse_Xnum(o);return[u,T,"n"]}function write_BrtShortReal(o,u,T){return T==null&&(T=new_buf(12)),write_XLSBShortCell(u,T),write_Xnum(o.v,T),T}function parse_BrtCellRk(o){var u=parse_XLSBCell(o),T=parse_RkNumber(o);return[u,T,"n"]}function write_BrtCellRk(o,u,T){return T==null&&(T=new_buf(12)),write_XLSBCell(u,T),write_RkNumber(o.v,T),T}function parse_BrtShortRk(o){var u=parse_XLSBShortCell(o),T=parse_RkNumber(o);return[u,T,"n"]}function write_BrtShortRk(o,u,T){return T==null&&(T=new_buf(8)),write_XLSBShortCell(u,T),write_RkNumber(o.v,T),T}function parse_BrtCellRString(o){var u=parse_XLSBCell(o),T=parse_RichStr(o);return[u,T,"is"]}function parse_BrtCellSt(o){var u=parse_XLSBCell(o),T=parse_XLWideString(o);return[u,T,"str"]}function write_BrtCellSt(o,u,T){return T==null&&(T=new_buf(12+4*o.v.length)),write_XLSBCell(u,T),write_XLWideString(o.v,T),T.length>T.l?T.slice(0,T.l):T}function parse_BrtShortSt(o){var u=parse_XLSBShortCell(o),T=parse_XLWideString(o);return[u,T,"str"]}function write_BrtShortSt(o,u,T){return T==null&&(T=new_buf(8+4*o.v.length)),write_XLSBShortCell(u,T),write_XLWideString(o.v,T),T.length>T.l?T.slice(0,T.l):T}function parse_BrtFmlaBool(o,u,T){var S=o.l+u,E=parse_XLSBCell(o);E.r=T["!row"];var C=o.read_shift(1),_=[E,C,"b"];if(T.cellFormula){o.l+=2;var P=parse_XLSBCellParsedFormula(o,S-o.l,T);_[3]=stringify_formula(P,null,E,T.supbooks,T)}else o.l=S;return _}function parse_BrtFmlaError(o,u,T){var S=o.l+u,E=parse_XLSBCell(o);E.r=T["!row"];var C=o.read_shift(1),_=[E,C,"e"];if(T.cellFormula){o.l+=2;var P=parse_XLSBCellParsedFormula(o,S-o.l,T);_[3]=stringify_formula(P,null,E,T.supbooks,T)}else o.l=S;return _}function parse_BrtFmlaNum(o,u,T){var S=o.l+u,E=parse_XLSBCell(o);E.r=T["!row"];var C=parse_Xnum(o),_=[E,C,"n"];
vendor: 12,492 bytes, line 270
270if(T.cellFormula){o.l+=2;var P=parse_XLSBCellParsedFormula(o,S-o.l,T);_[3]=stringify_formula(P,null,E,T.supbooks,T)}else o.l=S;return _}function parse_BrtFmlaString(o,u,T){var S=o.l+u,E=parse_XLSBCell(o);E.r=T["!row"];var C=parse_XLWideString(o),_=[E,C,"str"];if(T.cellFormula){o.l+=2;var P=parse_XLSBCellParsedFormula(o,S-o.l,T);_[3]=stringify_formula(P,null,E,T.supbooks,T)}else o.l=S;return _}var parse_BrtMergeCell=parse_UncheckedRfX,write_BrtMergeCell=write_UncheckedRfX;function write_BrtBeginMergeCells(o,u){return u==null&&(u=new_buf(4)),u.write_shift(4,o),u}function parse_BrtHLink(o,u){var T=o.l+u,S=parse_UncheckedRfX(o),E=parse_XLNullableWideString(o),C=parse_XLWideString(o),_=parse_XLWideString(o),P=parse_XLWideString(o);o.l=T;var R={rfx:S,relId:E,loc:C,display:P};return _&&(R.Tooltip=_),R}function write_BrtHLink(o,u){var T=new_buf(50+4*(o[1].Target.length+(o[1].Tooltip||"").length));write_UncheckedRfX({s:decode_cell(o[0]),e:decode_cell(o[0])},T),write_RelID("rId"+u,T);var S=o[1].Target.indexOf("#"),E=S==-1?"":o[1].Target.slice(S+1);return write_XLWideString(E||"",T),write_XLWideString(o[1].Tooltip||"",T),write_XLWideString("",T),T.slice(0,T.l)}function parse_BrtPane(){}function parse_BrtArrFmla(o,u,T){var S=o.l+u,E=parse_RfX(o),C=o.read_shift(1),_=[E];if(_[2]=C,T.cellFormula){var P=parse_XLSBArrayParsedFormula(o,S-o.l,T);_[1]=P}else o.l=S;return _}function parse_BrtShrFmla(o,u,T){var S=o.l+u,E=parse_UncheckedRfX(o),C=[E];if(T.cellFormula){var _=parse_XLSBSharedParsedFormula(o,S-o.l,T);C[1]=_,o.l=S}else o.l=S;return C}function write_BrtColInfo(o,u,T){T==null&&(T=new_buf(18));var S=col_obj_w(o,u);T.write_shift(-4,o),T.write_shift(-4,o),T.write_shift(4,(S.width||10)*256),T.write_shift(4,0);var E=0;return u.hidden&&(E|=1),typeof S.width=="number"&&(E|=2),u.level&&(E|=u.level<<8),T.write_shift(2,E),T}var BrtMarginKeys=["left","right","top","bottom","header","footer"];function parse_BrtMargins(o){var u={};return BrtMarginKeys.forEach(function(T){u[T]=parse_Xnum(o)}),u}function write_BrtMargins(o,u){return u==null&&(u=new_buf(6*8)),default_margins(o),BrtMarginKeys.forEach(function(T){write_Xnum(o[T],u)}),u}function parse_BrtBeginWsView(o){var u=o.read_shift(2);return o.l+=28,{RTL:u&32}}function write_BrtBeginWsView(o,u,T){T==null&&(T=new_buf(30));var S=924;return(((u||{}).Views||[])[0]||{}).RTL&&(S|=32),T.write_shift(2,S),T.write_shift(4,0),T.write_shift(4,0),T.write_shift(4,0),T.write_shift(1,0),T.write_shift(1,0),T.write_shift(2,0),T.write_shift(2,100),T.write_shift(2,0),T.write_shift(2,0),T.write_shift(2,0),T.write_shift(4,0),T}function write_BrtCellIgnoreEC(o){var u=new_buf(24);return u.write_shift(4,4),u.write_shift(4,1),write_UncheckedRfX(o,u),u}function write_BrtSheetProtection(o,u){return u==null&&(u=new_buf(16*4+2)),u.write_shift(2,o.password?crypto_CreatePasswordVerifier_Method1(o.password):0),u.write_shift(4,1),[["objects",!1],["scenarios",!1],["formatCells",!0],["formatColumns",!0],["formatRows",!0],["insertColumns",!0],["insertRows",!0],["insertHyperlinks",!0],["deleteColumns",!0],["deleteRows",!0],["selectLockedCells",!1],["sort",!0],["autoFilter",!0],["pivotTables",!0],["selectUnlockedCells",!1]].forEach(function(T){T[1]?u.write_shift(4,o[T[0]]!=null&&!o[T[0]]?1:0):u.write_shift(4,o[T[0]]!=null&&o[T[0]]?0:1)}),u}function parse_BrtDVal(){}function parse_BrtDVal14(){}function parse_ws_bin(o,u,T,S,E,C,_){if(!o)return o;var P=u||{};S||(S={"!id":{}});var R=P.dense?[]:{},I,L={s:{r:2e6,c:2e6},e:{r:0,c:0}},j=!1,M=!1,D,F,N,G,B,H,O,V,U,W=[];P.biff=12,P["!row"]=0;var K=0,Y=!1,ee=[],oe={},se=P.supbooks||E.supbooks||[[]];if(se.sharedf=oe,se.arrayf=ee,se.SheetNames=E.SheetNames||E.Sheets.map(function(Z){return Z.name}),!P.supbooks&&(P.supbooks=se,E.Names))for(var Q=0;Q<E.Names.length;++Q)se[0][Q+1]=E.Names[Q];var ie=[],ae=[],re=!1;XLSBRecordEnum[16]={n:"BrtShortReal",f:parse_BrtShortReal};var J;if(recordhopper(o,function(X,de,he){if(!M)switch(he){case 148:I=X;break;case 0:D=X,P.sheetRows&&P.sheetRows<=D.r&&(M=!0),V=encode_row(G=D.r),P["!row"]=D.r,(X.hidden||X.hpt||X.level!=null)&&(X.hpt&&(X.hpx=pt2px(X.hpt)),ae[X.r]=X);break;case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:case 10:case 11:case 13:case 14:case 15:case 16:case 17:case 18:case 62:switch(F={t:X[2]},X[2]){case"n":F.v=X[1];break;case"s":O=strs[X[1]],F.v=O.t,F.r=O.r;break;case"b":F.v=!!X[1];break;case"e":F.v=X[1],P.cellText!==!1&&(F.w=BErr[F.v]);break;case"str":F.t="s",F.v=X[1];break;case"is":F.t="s",F.v=X[1].t;break}if((N=_.CellXf[X[0].iStyleRef])&&safe_format(F,N.numFmtId,null,P,C,_),B=X[0].c==-1?B+1:X[0].c,P.dense?(R[G]||(R[G]=[]),R[G][B]=F):R[encode_col(B)+V]=F,P.cellFormula){for(Y=!1,K=0;K<ee.length;++K){var ne=ee[K];D.r>=ne[0].s.r&&D.r<=ne[0].e.r&&B>=ne[0].s.c&&B<=ne[0].e.c&&(F.F=encode_range(ne[0]),Y=!0)}!Y&&X.length>3&&(F.f=X[3])}if(L.s.r>D.r&&(L.s.r=D.r),L.s.c>B&&(L.s.c=B),L.e.r<D.r&&(L.e.r=D.r),L.e.c<B&&(L.e.c=B),P.cellDates&&N&&F.t=="n"&&fmt_is_date(table_fmt[N.numFmtId])){var ue=SSF_parse_date_code(F.v);ue&&(F.t="d",F.v=new Date(ue.y,ue.m-1,ue.d,ue.H,ue.M,ue.S,ue.u))}J&&(J.type=="XLDAPR"&&(F.D=!0),J=void 0);break;case 1:case 12:if(!P.sheetStubs||j)break;F={t:"z",v:void 0},B=X[0].c==-1?B+1:X[0].c,P.dense?(R[G]||(R[G]=[]),R[G][B]=F):R[encode_col(B)+V]=F,L.s.r>D.r&&(L.s.r=D.r),L.s.c>B&&(L.s.c=B),L.e.r<D.r&&(L.e.r=D.r),L.e.c<B&&(L.e.c=B),J&&(J.type=="XLDAPR"&&(F.D=!0),J=void 0);break;case 176:W.push(X);break;case 49:J=((P.xlmeta||{}).Cell||[])[X-1];break;case 494:var ce=S["!id"][X.relId];for(ce?(X.Target=ce.Target,X.loc&&(X.Target+="#"+X.loc),X.Rel=ce):X.relId==""&&(X.Target="#"+X.loc),G=X.rfx.s.r;G<=X.rfx.e.r;++G)for(B=X.rfx.s.c;B<=X.rfx.e.c;++B)P.dense?(R[G]||(R[G]=[]),R[G][B]||(R[G][B]={t:"z",v:void 0}),R[G][B].l=X):(H=encode_cell({c:B,r:G}),R[H]||(R[H]={t:"z",v:void 0}),R[H].l=X);break;case 426:if(!P.cellFormula)break;ee.push(X),U=P.dense?R[G][B]:R[encode_col(B)+V],U.f=stringify_formula(X[1],L,{r:D.r,c:B},se,P),U.F=encode_range(X[0]);break;case 427:if(!P.cellFormula)break;oe[encode_cell(X[0].s)]=X[1],U=P.dense?R[G][B]:R[encode_col(B)+V],U.f=stringify_formula(X[1],L,{r:D.r,c:B},se,P);break;case 60:if(!P.cellStyles)break;for(;X.e>=X.s;)ie[X.e--]={width:X.w/256,hidden:!!(X.flags&1),level:X.level},re||(re=!0,find_mdw_colw(X.w/256)),process_col(ie[X.e+1]);break;case 161:R["!autofilter"]={ref:encode_range(X)};break;case 476:R["!margins"]=X;break;case 147:E.Sheets[T]||(E.Sheets[T]={}),X.name&&(E.Sheets[T].CodeName=X.name),(X.above||X.left)&&(R["!outline"]={above:X.above,left:X.left});break;case 137:E.Views||(E.Views=[{}]),E.Views[0]||(E.Views[0]={}),X.RTL&&(E.Views[0].RTL=!0);break;case 485:break;case 64:case 1053:break;case 151:break;case 152:case 175:case 644:case 625:case 562:case 396:case 1112:case 1146:case 471:case 1050:case 649:case 1105:case 589:case 607:case 564:case 1055:case 168:case 174:case 1180:case 499:case 507:case 550:case 171:case 167:case 1177:case 169:case 1181:case 551:case 552:case 661:case 639:case 478:case 537:case 477:case 536:case 1103:case 680:case 1104:case 1024:case 663:case 535:case 678:case 504:case 1043:case 428:case 170:case 3072:case 50:case 2070:case 1045:break;case 35:j=!0;break;case 36:j=!1;break;case 37:j=!0;break;case 38:j=!1;break;default:if(!de.T){if(!j||P.WTF)throw new Error("Unexpected record 0x"+he.toString(16))}}},P),delete P.supbooks,delete P["!row"],!R["!ref"]&&(L.s.r<2e6||I&&(I.e.r>0||I.e.c>0||I.s.r>0||I.s.c>0))&&(R["!ref"]=encode_range(I||L)),P.sheetRows&&R["!ref"]){var te=safe_decode_range(R["!ref"]);P.sheetRows<=+te.e.r&&(te.e.r=P.sheetRows-1,te.e.r>L.e.r&&(te.e.r=L.e.r),te.e.r<te.s.r&&(te.s.r=te.e.r),te.e.c>L.e.c&&(te.e.c=L.e.c),te.e.c<te.s.c&&(te.s.c=te.e.c),R["!fullref"]=R["!ref"],R["!ref"]=encode_range(te))}return W.length>0&&(R["!merges"]=W),ie.length>0&&(R["!cols"]=ie),ae.length>0&&(R["!rows"]=ae),R}function write_ws_bin_cell(o,u,T,S,E,C,_){if(u.v===void 0)return!1;var P="";switch(u.t){case"b":P=u.v?"1":"0";break;case"d":u=dup(u),u.z=u.z||table_fmt[14],u.v=datenum(parseDate(u.v)),u.t="n";break;case"n":case"e":P=""+u.v;break;default:P=u.v;break}var R={r:T,c:S};switch(R.s=get_cell_style(E.cellXfs,u,E),u.l&&C["!links"].push([encode_cell(R),u.l]),u.c&&C["!comments"].push([encode_cell(R),u.c]),u.t){case"s":case"str":return E.bookSST?(P=get_sst_id(E.Strings,u.v,E.revStrings),R.t="s",R.v=P,_?write_record(o,18,write_BrtShortIsst(u,R)):write_record(o,7,write_BrtCellIsst(u,R))):(R.t="str",_?write_record(o,17,write_BrtShortSt(u,R)):write_record(o,6,write_BrtCellSt(u,R))),!0;case"n":return u.v==(u.v|0)&&u.v>-1e3&&u.v<1e3?_?write_record(o,13,write_BrtShortRk(u,R)):write_record(o,2,write_BrtCellRk(u,R)):_?write_record(o,16,write_BrtShortReal(u,R)):write_record(o,5,write_BrtCellReal(u,R)),!0;case"b":return R.t="b",_?write_record(o,15,write_BrtShortBool(u,R)):write_record(o,4,write_BrtCellBool(u,R)),!0;case"e":return R.t="e",_?write_record(o,14,write_BrtShortError(u,R)):write_record(o,3,write_BrtCellError(u,R)),!0}return _?write_record(o,12,write_BrtShortBlank(u,R)):write_record(o,1,write_BrtCellBlank(u,R)),!0}function write_CELLTABLE(o,u,T,S){var E=safe_decode_range(u["!ref"]||"A1"),C,_="",P=[];write_record(o,145);var R=Array.isArray(u),I=E.e.r;u["!rows"]&&(I=Math.max(E.e.r,u["!rows"].length-1));for(var L=E.s.r;L<=I;++L){_=encode_row(L),write_row_header(o,u,E,L);var j=!1;if(L<=E.e.r)for(var M=E.s.c;M<=E.e.c;++M){L===E.s.r&&(P[M]=encode_col(M)),C=P[M]+_;var D=R?(u[L]||[])[M]:u[C];if(!D){j=!1;continue}j=write_ws_bin_cell(o,D,L,M,S,u,j)}}write_record(o,146)}function write_MERGECELLS(o,u){!u||!u["!merges"]||(write_record(o,177,write_BrtBeginMergeCells(u["!merges"].length)),u["!merges"].forEach(function(T){write_record(o,176,write_BrtMergeCell(T))}),write_record(o,178))}function write_COLINFOS(o,u){!u||!u["!cols"]||(write_record(o,390),u["!cols"].forEach(function(T,S){T&&write_record(o,60,write_BrtColInfo(S,T))}),write_record(o,391))}function write_IGNOREECS(o,u){!u||!u["!ref"]||(write_record(o,648),write_record(o,649,write_BrtCellIgnoreEC(safe_decode_range(u["!ref"]))),write_record(o,650))}function write_HLINKS(o,u,T){u["!links"].forEach(function(S){if(S[1].Target){var E=add_rels(T,-1,S[1].Target.replace(/#.*$/,""),RELS.HLINK);write_record(o,494,write_BrtHLink(S,E))}}),delete u["!links"]}function write_LEGACYDRAWING(o,u,T,S){if(u["!comments"].length>0){var E=add_rels(S,-1,"../drawings/vmlDrawing"+(T+1)+".vml",RELS.VML);write_record(o,551,write_RelID("rId"+E)),u["!legacy"]=E}}function write_AUTOFILTER(o,u,T,S){if(u["!autofilter"]){var E=u["!autofilter"],C=typeof E.ref=="string"?E.ref:encode_range(E.ref);T.Workbook||(T.Workbook={Sheets:[]}),T.Workbook.Names||(T.Workbook.Names=[]);var _=T.Workbook.Names,P=decode_range(C);P.s.r==P.e.r&&(P.e.r=decode_range(u["!ref"]).e.r,C=encode_range(P));for(var R=0;R<_.length;++R){var I=_[R];if(I.Name=="_xlnm._FilterDatabase"&&I.Sheet==S){I.Ref="'"+T.SheetNames[S]+"'!"+C;break}}R==_.length&&_.push({Name:"_xlnm._FilterDatabase",Sheet:S,Ref:"'"+T.SheetNames[S]+"'!"+C}),write_record(o,161,write_UncheckedRfX(safe_decode_range(C))),write_record(o,162)}}function write_WSVIEWS2(o,u,T){write_record(o,133),write_record(o,137,write_BrtBeginWsView(u,T)),write_record(o,138),write_record(o,134)}function write_SHEETPROTECT(o,u){u["!protect"]&&write_record(o,535,write_BrtSheetProtection(u["!protect"]))}function write_ws_bin(o,u,T,S){var E=buf_array(),C=T.SheetNames[o],_=T.Sheets[C]||{},P=C;try{T&&T.Workbook&&(P=T.Workbook.Sheets[o].CodeName||P)}catch{}var R=safe_decode_range(_["!ref"]||"A1");if(R.e.c>16383||R.e.r>1048575){if(u.WTF)throw new Error("Range "+(_["!ref"]||"A1")+" exceeds format limit A1:XFD1048576");R.e.c=Math.min(R.e.c,16383),R.e.r=Math.min(R.e.c,1048575)}return _["!links"]=[],_["!comments"]=[],write_record(E,129),(T.vbaraw||_["!outline"])&&write_record(E,147,write_BrtWsProp(P,_["!outline"])),write_record(E,148,write_BrtWsDim(R)),write_WSVIEWS2(E,_,T.Workbook),write_COLINFOS(E,_),write_CELLTABLE(E,_,o,u),write_SHEETPROTECT(E,_),write_AUTOFILTER(E,_,T,o),write_MERGECELLS(E,_),write_HLINKS(E,_,S),_["!margins"]&&write_record(E,476,write_BrtMargins(_["!margins"])),(!u||u.ignoreEC||u.ignoreEC==null)&&write_IGNOREECS(E,_),write_LEGACYDRAWING(E,_,o,S),write_record(E,130),E.end()}function parse_Cache(o){var u=[],T=o.match(/^<c:numCache>/),S;(o.match(/<c:pt idx="(\d*)">(.*?)<\/c:pt>/mg)||[]).forEach(function(C){var _=C.match(/<c:pt idx="(\d*?)"><c:v>(.*)<\/c:v><\/c:pt>/);_&&(u[+_[1]]=T?+_[2]:_[2])});var E=unescapexml((o.match(/<c:formatCode>([\s\S]*?)<\/c:formatCode>/)||["","General"])[1]);return(o.match(/<c:f>(.*?)<\/c:f>
270/mg)||[]).forEach(function(C){S=C.replace(/<.*?>/g,"")}),[u,E,S]}function parse_chart(o,u,T,S,E,C){var _=C||{"!type":"chart"};if(!o)return C;var P=0,R=0,I="A",L={s:{r:2e6,c:2e6},e:{r:0,c:0}};return(o.match(/<c:numCache>[\s\S]*?<\/c:numCache>/gm)||[]).forEach(function(j){var M=parse_Cache(j);L.s.r=L.s.c=0,L.e.c=P,I=encode_col(P),M[0].forEach(function(D,F){_[I+encode_row(F)]={t:"n",v:D,z:M[1]},R=F}),L.e.r<R&&(L.e.r=R),++P}),P>0&&(_["!ref"]=encode_range(L)),_}function parse_cs_xml(o,u,T,S,E){if(!o)return o;S||(S={"!id":{}});var C={"!type":"chart","!drawel":null,"!rel":""},_,P=o.match(sheetprregex);return P&&parse_ws_xml_sheetpr(P[0],C,E,T),(_=o.match(/drawing r:id="(.*?)"/))&&(C["!rel"]=_[1]),S["!id"][C["!rel"]]&&(C["!drawel"]=S["!id"][C["!rel"]]),C}function parse_BrtCsProp(o,u){o.l+=10;var T=parse_XLWideString(o);return{name:T}}function parse_cs_bin(o,u,T,S,E){if(!o)return o;S||(S={"!id":{}});var C={"!type":"chart","!drawel":null,"!rel":""},_=!1;return recordhopper(o,function(R,I,L){switch(L){case 550:C["!rel"]=R;break;case 651:E.Sheets[T]||(E.Sheets[T]={}),R.name&&(E.Sheets[T].CodeName=R.name);break;case 562:case 652:case 669:case 679:case 551:case 552:case 476:case 3072:break;case 35:_=!0;break;case 36:_=!1;break;case 37:break;case 38:break;default:if(!(I.T>0)){if(!(I.T<0)){if(!_||u.WTF)throw new Error("Unexpected record 0x"+L.toString(16))}}}},u),S["!id"][C["!rel"]]&&(C["!drawel"]=S["!id"][C["!rel"]]),C}var WBPropsDef=[["allowRefreshQuery",!1,"bool"],["autoCompressPictures",!0,"bool"],["backupFile",!1,"bool"],["checkCompatibility",!1,"bool"],["CodeName",""],["date1904",!1,"bool"],["defaultThemeVersion",0,"int"],["filterPrivacy",!1,"bool"],["hidePivotFieldList",!1,"bool"],["promptedSolutions",!1,"bool"],["publishItems",!1,"bool"],["refreshAllConnections",!1,"bool"],["saveExternalLinkValues",!0,"bool"],["showBorderUnselectedTables",!0,"bool"],["showInkAnnotation",!0,"bool"],["showObjects","all"],["showPivotChartFilter",!1,"bool"],["updateLinks","userSet"]],WBViewDef=[["activeTab",0,"int"],["autoFilterDateGrouping",!0,"bool"],["firstSheet",0,"int"],["minimized",!1,"bool"],["showHorizontalScroll",!0,"bool"],["showSheetTabs",!0,"bool"],["showVerticalScroll",!0,"bool"],["tabRatio",600,"int"],["visibility","visible"]],SheetDef=[],CalcPrDef
vendor: 6,321 bytes, line 270
270=[["calcCompleted","true"],["calcMode","auto"],["calcOnSave","true"],["concurrentCalc","true"],["fullCalcOnLoad","false"],["fullPrecision","true"],["iterate","false"],["iterateCount","100"],["iterateDelta","0.001"],["refMode","A1"]];function push_defaults_array(o,u){for(var T=0;T!=o.length;++T)for(var S=o[T],E=0;E!=u.length;++E){var C=u[E];if(S[C[0]]==null)S[C[0]]=C[1];else switch(C[2]){case"bool":typeof S[C[0]]=="string"&&(S[C[0]]=parsexmlbool(S[C[0]]));break;case"int":typeof S[C[0]]=="string"&&(S[C[0]]=parseInt(S[C[0]],10));break}}}function push_defaults(o,u){for(var T=0;T!=u.length;++T){var S=u[T];if(o[S[0]]==null)o[S[0]]=S[1];else switch(S[2]){case"bool":typeof o[S[0]]=="string"&&(o[S[0]]=parsexmlbool(o[S[0]]));break;case"int":typeof o[S[0]]=="string"&&(o[S[0]]=parseInt(o[S[0]],10));break}}}function parse_wb_defaults(o){push_defaults(o.WBProps,WBPropsDef),push_defaults(o.CalcPr,CalcPrDef),push_defaults_array(o.WBView,WBViewDef),push_defaults_array(o.Sheets,SheetDef),_ssfopts.date1904=parsexmlbool(o.WBProps.date1904)}function safe1904(o){return!o.Workbook||!o.Workbook.WBProps?"false":parsexmlbool(o.Workbook.WBProps.date1904)?"true":"false"}var badchars="][*?/\\".split("");function check_ws_name(o,u){if(o.length>31)throw new Error("Sheet names cannot exceed 31 chars");var T=!0;return badchars.forEach(function(S){if(o.indexOf(S)!=-1)throw new Error("Sheet name cannot contain : \\ / ? * [ ]")}),T}function check_wb_names(o,u,T){o.forEach(function(S,E){check_ws_name(S);for(var C=0;C<E;++C)if(S==o[C])throw new Error("Duplicate Sheet Name: "+S);if(T){var _=u&&u[E]&&u[E].CodeName||S;if(_.charCodeAt(0)==95&&_.length>22)throw new Error("Bad Code Name: Worksheet"+_)}})}function check_wb(o){if(!o||!o.SheetNames||!o.Sheets)throw new Error("Invalid Workbook");if(!o.SheetNames.length)throw new Error("Workbook is empty");var u=o.Workbook&&o.Workbook.Sheets||[];check_wb_names(o.SheetNames,u,!!o.vbaraw);for(var T=0;T<o.SheetNames.length;++T)check_ws(o.Sheets[o.SheetNames[T]],o.SheetNames[T],T)}var wbnsregex=/<\w+:workbook/;function parse_wb_xml(o,u){if(!o)throw new Error("Could not find file");var T={AppVersion:{},WBProps:{},WBView:[],Sheets:[],CalcPr:{},Names:[],xmlns:""},S=!1,E="xmlns",C={},_=0;if(o.replace(tagregex,function(R,I){var L=parsexmltag(R);switch(strip_ns(L[0])){case"<?xml":break;case"<workbook":R.match(wbnsregex)&&(E="xmlns"+R.match(/<(\w+):/)[1]),T.xmlns=L[E];break;case"</workbook>":break;case"<fileVersion":delete L[0],T.AppVersion=L;break;case"<fileVersion/>":case"</fileVersion>":break;case"<fileSharing":break;case"<fileSharing/>":break;case"<workbookPr":case"<workbookPr/>":WBPropsDef.forEach(function(j){if(L[j[0]]!=null)switch(j[2]){case"bool":T.WBProps[j[0]]=parsexmlbool(L[j[0]]);break;case"int":T.WBProps[j[0]]=parseInt(L[j[0]],10);break;default:T.WBProps[j[0]]=L[j[0]]}}),L.codeName&&(T.WBProps.CodeName=utf8read(L.codeName));break;case"</workbookPr>":break;case"<workbookProtection":break;case"<workbookProtection/>":break;case"<bookViews":case"<bookViews>":case"</bookViews>":break;case"<workbookView":case"<workbookView/>":delete L[0],T.WBView.push(L);break;case"</workbookView>":break;case"<sheets":case"<sheets>":case"</sheets>":break;case"<sheet":switch(L.state){case"hidden":L.Hidden=1;break;case"veryHidden":L.Hidden=2;break;default:L.Hidden=0}delete L.state,L.name=unescapexml(utf8read(L.name)),delete L[0],T.Sheets.push(L);break;case"</sheet>":break;case"<functionGroups":case"<functionGroups/>":break;case"<functionGroup":break;case"<externalReferences":case"</externalReferences>":case"<externalReferences>":break;case"<externalReference":break;case"<definedNames/>":break;case"<definedNames>":case"<definedNames":S=!0;break;case"</definedNames>":S=!1;break;case"<definedName":C={},C.Name=utf8read(L.name),L.comment&&(C.Comment=L.comment),L.localSheetId&&(C.Sheet=+L.localSheetId),parsexmlbool(L.hidden||"0")&&(C.Hidden=!0),_=I+R.length;break;case"</definedName>":C.Ref=unescapexml(utf8read(o.slice(_,I))),T.Names.push(C);break;case"<definedName/>":break;case"<calcPr":delete L[0],T.CalcPr=L;break;case"<calcPr/>":delete L[0],T.CalcPr=L;break;case"</calcPr>":break;case"<oleSize":break;case"<customWorkbookViews>":case"</customWorkbookViews>":case"<customWorkbookViews":break;case"<customWorkbookView":case"</customWorkbookView>":break;case"<pivotCaches>":case"</pivotCaches>":case"<pivotCaches":break;case"<pivotCache":break;case"<smartTagPr":case"<smartTagPr/>":break;case"<smartTagTypes":case"<smartTagTypes>":case"</smartTagTypes>":break;case"<smartTagType":break;case"<webPublishing":case"<webPublishing/>":break;case"<fileRecoveryPr":case"<fileRecoveryPr/>":break;case"<webPublishObjects>":case"<webPublishObjects":case"</webPublishObjects>":break;case"<webPublishObject":break;case"<extLst":case"<extLst>":case"</extLst>":case"<extLst/>":break;case"<ext":S=!0;break;case"</ext>":S=!1;break;case"<ArchID":break;case"<AlternateContent":case"<AlternateContent>":S=!0;break;case"</AlternateContent>":S=!1;break;case"<revisionPtr":break;default:if(!S&&u.WTF)throw new Error("unrecognized "+L[0]+" in workbook")}return R}),XMLNS_main.indexOf(T.xmlns)===-1)throw new Error("Unknown Namespace: "+T.xmlns);return parse_wb_defaults(T),T}function write_wb_xml(o){var u=[XML_HEADER];u[u.length]=writextag("workbook",null,{xmlns:XMLNS_main[0],"xmlns:r":XMLNS.r});var T=o.Workbook&&(o.Workbook.Names||[]).length>0,S={codeName:"ThisWorkbook"};o.Workbook&&o.Workbook.WBProps&&(WBPropsDef.forEach(function(P){o.Workbook.WBProps[P[0]]!=null&&o.Workbook.WBProps[P[0]]!=P[1]&&(S[P[0]]=o.Workbook.WBProps[P[0]])}),o.Workbook.WBProps.CodeName&&(S.codeName=o.Workbook.WBProps.CodeName,delete S.CodeName)),u[u.length]=writextag("workbookPr",null,S);var E=o.Workbook&&o.Workbook.Sheets||[],C=0;if(E&&E[0]&&E[0].Hidden){for(u[u.length]="<bookViews>",C=0;C!=o.SheetNames.length&&!(!E[C]||!E[C].Hidden);++C);C==o.SheetNames.length&&(C=0),u[u.length]='<workbookView firstSheet="'+C+'" activeTab="'+C+'"/>',u[u.length]="</bookViews>"}for(u[u.length]="<sheets>",C=0;C!=o.SheetNames.length;++C){var _={name:escapexml(o.SheetNames[C].slice(0,31))};if(_.sheetId=""+(C+1),_["r:id"]="rId"+(C+1),E[C])switch(E[C].Hidden){case 1:_.state="hidden";break;case 2:_.state="veryHidden";break}u[u.length]=writextag("sheet",null,_)}return u[u.length]="</sheets>",T&&(u[u.length]="<definedNames>
270",o.Workbook&&o.Workbook.Names&&o.Workbook.Names.forEach(function(P){var R={name:P.Name};P.Comment&&(R.comment=P.Comment),P.Sheet!=null&&(R.localSheetId=""+P.Sheet),P.Hidden&&(R.hidden="1"),P.Ref&&(u[u.length]=writextag("definedName",escapexml(P.Ref),R))}),u[u.length]="</definedNames>"),u.length>2&&(u[u.length]="</workbook>",u[1]=u[1].replace("/>",">")),u.join("")}function parse_BrtBundleSh(o,u){var T={};return T.Hidden=o.read_shift(4),T.iTabID=o.read_shift(4),T.strRelID=parse_RelID(o),T.name=parse_XLWideString(o),T}function write_BrtBundleSh(o,u){return u||(u=new_buf(127)),u.write_shift(4,o.Hidden),u.write_shift(4,o.iTabID),write_RelID(o.strRelID,u),write_XLWideString(o.name.slice(0,31),u),u.length>u.l?u.slice(0,u.l):u}function parse_BrtWbProp(o,u){var T={},S=o.read_shift(4);T.defaultThemeVersion=o.read_shift(4);var E=u>8?parse_XLWideString(o):"";return E.length>0&&(T.CodeName=E),T.autoCompressPictures=!!(S&65536),T.backupFile=!!(S&64),T.checkCompatibility=!!(S&4096),T.date1904=!!(S&1),T.filterPrivacy=!!(S&8),T.hidePivotFieldList=!!(S&1024),T.promptedSolutions=!!(S&16),T.publishItems=!!(S&2048),T.refreshAllConnections=!!(S&262144),T.saveExternalLinkValues=!!(S&128),T.showBorderUnselectedTables=!!(S&4),T.showInkAnnotation=!!(S&32),T.showObjects=["all","placeholders","none"][S>>13&3],T.showPivotChartFilter=!!(S&32768),T.updateLinks=["userSet","never","always"][S>>8&3],T}function write_BrtWbProp(o,u){u||(u=new_buf(72));var T=0;return o&&o.filterPrivacy&&(T|=8),u.write_shift(4,T),u.write_shift(4,0),write_XLSBCodeName(o&&o.CodeName||"ThisWorkbook",u),u.slice(0,u.l)}function parse_BrtFRTArchID$(o,u){var T={};return o.read_shift(4),T.ArchID=o.read_shift(4),o.l+=u-8,T}function parse_BrtName(o,u,T){var S=o.l+u;o.l+=4,o.l+=1;var E=o.read_shift(4),C=parse_XLNameWideString(o),_=parse_XLSBNameParsedFormula(o,0,T),P=parse_XLNullableWideString(o);o.l=S;var R={Name:C,Ptg:_};return E<268435455&&(R.Sheet=E),P&&(R.Comment=P),R}function parse_wb_bin(o,u){var T={AppVersion:{},WBProps:{},WBView:[],Sheets:[],CalcPr:{},xmlns:""},S=[],E=!1;u||(u={}),u.biff=12;var C=[],_=[[]];return _.SheetNames=[],_.XTI=[],XLSBRecordEnum[16]={n:"BrtFRTArchID$",f:parse_BrtFRTArchID$},recordhopper(o,function(R,I,L){switch(L){case 156:_.SheetNames.push(R.name),T.Sheets.push(R);break;case 153:T.WBProps=R;break;case 39:R.Sheet!=null&&(u.SID=R.Sheet),R.Ref=stringify_formula(R.Ptg,null,null,_,u),delete u.SID,delete R.Ptg,C.push(R);break;case 1036:break;case 357:case 358:case 355:case 667:_[0].length?_.push([L,R]):_[0]=[L,R],_[_.length-1].XTI=[];break;case 362:_.length===0&&(_[0]=[],_[0].XTI=[]),_[_.length-1].XTI=_[_.length-1].XTI.concat(R),_.XTI=_.XTI.concat(R);break;case 361:break;case 2071:case 158:case 143:case 664:case 353:break;case 3072:case 3073:case 534:case 677:case 157:case 610:case 2050:case 155:case 548:case 676:case 128:case 665:case 2128:case 2125:case 549:case 2053:case 596:case 2076:case 2075:case 2082:case 397:case 154:case 1117:case 553:case 2091:break;case 35:S.push(L),E=!0;break;case 36:S.pop(),E=!1;break;case 37:S.push(L),E=!0;break;case 38:S.pop(),E=!1;break;case 16:break;default:if(!I.T){if(!E||u.WTF&&S[S.length-1]!=37&&S[S.length-1]!=35)throw new Error("Unexpected record 0x"+L.toString(16))}}},u),parse_wb_defaults(T),T.Names=C,T.supbooks=_,T}function write_BUNDLESHS(o,u){write_record(o,143);for(var T=0;T!=u.SheetNames.length;++T){var S=u.Workbook&&u.Workbook.Sheets&&u.Workbook.Sheets[T]&&u.Workbook.Sheets[T].Hidden||0,E={Hidden:S,iTabID:T+1,strRelID:"rId"+(T+1),name:u.SheetNames[T]};write_record(o,156,write_BrtBundleSh(E))}write_record(o,144)}function write_BrtFileVersion(o,u){u||(u=new_buf(127));for(var T=0;T!=4;++T)u.write_shift(4,0);return write_XLWideString("SheetJS",u),write_XLWideString(XLSX.version,u),write_XLWideString(XLSX.version,u),write_XLWideString("7262",u),u.length>u.l?u.slice(0,u.l):u}function write_BrtBookView(o,u){u||(u=new_buf(29)),u.write_shift(-4,0),u.write_shift(-4,460),u.write_shift(4,28800),u.write_shift(4,17600),u.write_shift(4,500),u.write_shift(4,o),u.write_shift(4,o);var T=120;return u.write_shift(1,T),u.length>u.l?u.slice(0,u.l):u}function write_BOOKVIEWS(o,u){if(!(!u.Workbook||!u.Workbook.Sheets)){for(var T=u.Workbook.Sheets,S=0,E=-1,C=-1;S<T.length;++S)!T[S]||!T[S].Hidden&&E==-1?E=S:T[S].Hidden==1&&C==-1&&(C=S);C>E||(write_record(o,135),write_record(o,158,write_BrtBookView(E)),write_record(o,136))}}function write_wb_bin(o,u){var T=buf_array();return write_record(T,131),write_record(T,128,write_BrtFileVersion()),write_record(T,153,write_BrtWbProp(o.Workbook&&o.Workbook.WBProps||null)),write_BOOKVIEWS(T,o),write_BUNDLESHS(T,o),write_record(T,132),T.end()}function parse_wb(o,u,T){return u.slice(-4)===".bin"?parse_wb_bin(o,T):parse_wb_xml(o,T)}function parse_ws(o,u,T,S,E,C,_,P){return u.slice(-4)===".bin"?parse_ws_bin(o,S,T,E,C,_,P):
vendor: 16,277 bytes, lines 270-272
270parse_ws_xml(o,S,T,E,C,_,P)}function parse_cs(o,u,T,S,E,C,_,P){return u.slice(-4)===".bin"?parse_cs_bin(o,S,T,E,C):parse_cs_xml(o,S,T,E,C)}function parse_ms(o,u,T,S,E,C,_,P){return u.slice(-4)===".bin"?parse_ms_bin():parse_ms_xml()}function parse_ds(o,u,T,S,E,C,_,P){return u.slice(-4)===".bin"?parse_ds_bin():parse_ds_xml()}function parse_sty(o,u,T,S){return u.slice(-4)===".bin"?parse_sty_bin(o,T,S):parse_sty_xml(o,T,S)}function parse_theme(o,u,T){return parse_theme_xml(o,T)}function parse_sst(o,u,T){return u.slice(-4)===".bin"?parse_sst_bin(o,T):parse_sst_xml(o,T)}function parse_cmnt(o,u,T){return u.slice(-4)===".bin"?parse_comments_bin(o,T):parse_comments_xml(o,T)}function parse_cc(o,u,T){return u.slice(-4)===".bin"?parse_cc_bin(o):parse_cc_xml(o)}function parse_xlink(o,u,T,S){return T.slice(-4)===".bin"?parse_xlink_bin(o,u,T,S):void 0}function parse_xlmeta(o,u,T){return u.slice(-4)===".bin"?parse_xlmeta_bin(o,u,T):parse_xlmeta_xml(o,u,T)}function write_wb(o,u,T){return(u.slice(-4)===".bin"?write_wb_bin:write_wb_xml)(o)}function write_ws(o,u,T,S,E){return(u.slice(-4)===".bin"?write_ws_bin:write_ws_xml)(o,T,S,E)}function write_sty(o,u,T){return(u.slice(-4)===".bin"?write_sty_bin:write_sty_xml)(o,T)}function write_sst(o,u,T){return(u.slice(-4)===".bin"?write_sst_bin:write_sst_xml)(o,T)}function write_cmnt(o,u,T){return(u.slice(-4)===".bin"?write_comments_bin:write_comments_xml)(o)}function write_xlmeta(o){return(o.slice(-4)===".bin"?write_xlmeta_bin:write_xlmeta_xml)()}var attregexg2=/([\w:]+)=((?:")([^"]*)(?:")|(?:')([^']*)(?:'))/g,attregex2=/([\w:]+)=((?:")(?:[^"]*)(?:")|(?:')(?:[^']*)(?:'))/;function xlml_parsexmltag(o,u){var T=o.split(/\s+/),S=[];if(S[0]=T[0],T.length===1)return S;var E=o.match(attregexg2),C,_,P,R;if(E)for(R=0;R!=E.length;++R)C=E[R].match(attregex2),(_=C[1].indexOf(":"))===-1?S[C[1]]=C[2].slice(1,C[2].length-1):(C[1].slice(0,6)==="xmlns:"?P="xmlns"+C[1].slice(6):P=C[1].slice(_+1),S[P]=C[2].slice(1,C[2].length-1));return S}function xlml_parsexmltagobj(o){var u=o.split(/\s+/),T={};if(u.length===1)return T;var S=o.match(attregexg2),E,C,_,P;if(S)for(P=0;P!=S.length;++P)E=S[P].match(attregex2),(C=E[1].indexOf(":"))===-1?T[E[1]]=E[2].slice(1,E[2].length-1):(E[1].slice(0,6)==="xmlns:"?_="xmlns"+E[1].slice(6):_=E[1].slice(C+1),T[_]=E[2].slice(1,E[2].length-1));return T}var XLMLFormatMap;function xlml_format(o,u){var T=XLMLFormatMap[o]||unescapexml(o);return T==="General"?SSF_general(u):SSF_format(T,u)}function xlml_set_custprop(o,u,T,S){var E=S;switch((T[0].match(/dt:dt="([\w.]+)"/)||["",""])[1]){case"boolean":E=parsexmlbool(S);break;case"i2":case"int":E=parseInt(S,10);break;case"r4":case"float":E=parseFloat(S);break;case"date":case"dateTime.tz":E=parseDate(S);break;case"i8":case"string":case"fixed":case"uuid":case"bin.base64":break;default:throw new Error("bad custprop:"+T[0])}o[unescapexml(u)]=E}function safe_format_xlml(o,u,T){if(o.t!=="z"){if(!T||T.cellText!==!1)try{o.t==="e"?o.w=o.w||BErr[o.v]:u==="General"?o.t==="n"?(o.v|0)===o.v?o.w=o.v.toString(10):o.w=SSF_general_num(o.v):o.w=SSF_general(o.v):o.w=xlml_format(u||"General",o.v)}catch(C){if(T.WTF)throw C}try{var S=XLMLFormatMap[u]||u||"General";if(T.cellNF&&(o.z=S),T.cellDates&&o.t=="n"&&fmt_is_date(S)){var E=SSF_parse_date_code(o.v);E&&(o.t="d",o.v=new Date(E.y,E.m-1,E.d,E.H,E.M,E.S,E.u))}}catch(C){if(T.WTF)throw C}}}function process_style_xlml(o,u,T){if(T.cellStyles&&u.Interior){var S=u.Interior;S.Pattern&&(S.patternType=XLMLPatternTypeMap[S.Pattern]||S.Pattern)}o[u.ID]=u}function parse_xlml_data(o,u,T,S,E,C,_,P,R,I){var L="General",j=S.StyleID,M={};I=I||{};var D=[],F=0;for(j===void 0&&P&&(j=P.StyleID),j===void 0&&_&&(j=_.StyleID);C[j]!==void 0&&(C[j].nf&&(L=C[j].nf),C[j].Interior&&D.push(C[j].Interior),!!C[j].Parent);)j=C[j].Parent;switch(T.Type){case"Boolean":S.t="b",S.v=parsexmlbool(o);break;case"String":S.t="s",S.r=xlml_fixstr(unescapexml(o)),S.v=o.indexOf("<")>-1?unescapexml(u||o).replace(/<.*?>/g,""):S.r;break;case"DateTime":o.slice(-1)!="Z"&&(o+="Z"),S.v=(parseDate(o)-new Date(Date.UTC(1899,11,30)))/(24*60*60*1e3),S.v!==S.v?S.v=unescapexml(o):S.v<60&&(S.v=S.v-1),(!L||L=="General")&&(L="yyyy-mm-dd");case"Number":S.v===void 0&&(S.v=+o),S.t||(S.t="n");break;case"Error":S.t="e",S.v=RBErr[o],I.cellText!==!1&&(S.w=o);break;default:o==""&&u==""?S.t="z":(S.t="s",S.v=xlml_fixstr(u||o));break}if(safe_format_xlml(S,L,I),I.cellFormula!==!1)if(S.Formula){var N=unescapexml(S.Formula);N.charCodeAt(0)==61&&(N=N.slice(1)),S.f=rc_to_a1(N,E),delete S.Formula,S.ArrayRange=="RC"?S.F=rc_to_a1("RC:RC",E):S.ArrayRange&&(S.F=rc_to_a1(S.ArrayRange,E),R.push([safe_decode_range(S.F),S.F]))}else for(F=0;F<R.length;++F)E.r>=R[F][0].s.r&&E.r<=R[F][0].e.r&&E.c>=R[F][0].s.c&&E.c<=R[F][0].e.c&&(S.F=R[F][1]);I.cellStyles&&(D.forEach(function(G){!M.patternType&&G.patternType&&(M.patternType=G.patternType)}),S.s=M),S.StyleID!==void 0&&(S.ixfe=S.StyleID)}function xlml_clean_comment(o){o.t=o.v||"",o.t=o.t.replace(/\r\n/g,`
271`).replace(/\r/g,`
272`),o.v=o.w=o.ixfe=void 0}function parse_xlml_xml(o,u){var T=u||{};make_ssf();var S=debom(xlml_normalize(o));(T.type=="binary"||T.type=="array"||T.type=="base64")&&(typeof $cptable<"u"?S=$cptable.utils.decode(65001,char_codes(S)):S=utf8read(S));var E=S.slice(0,1024).toLowerCase(),C=!1;if(E=E.replace(/".*?"/g,""),(E.indexOf(">")&1023)>Math.min(E.indexOf(",")&1023,E.indexOf(";")&1023)){var _=dup(T);return _.type="string",PRN.to_workbook(S,_)}if(E.indexOf("<?xml")==-1&&["html","table","head","meta","script","style","div"].forEach(function(Xe){E.indexOf("<"+Xe)>=0&&(C=!0)}),C)return html_to_workbook(S,T);XLMLFormatMap={"General Number":"General","General Date":table_fmt[22],"Long Date":"dddd, mmmm dd, yyyy","Medium Date":table_fmt[15],"Short Date":table_fmt[14],"Long Time":table_fmt[19],"Medium Time":table_fmt[18],"Short Time":table_fmt[20],Currency:'"$"#,##0.00_);[Red]\\("$"#,##0.00\\)',Fixed:table_fmt[2],Standard:table_fmt[4],Percent:table_fmt[10],Scientific:table_fmt[11],"Yes/No":'"Yes";"Yes";"No";@',"True/False":'"True";"True";"False";@',"On/Off":'"Yes";"Yes";"No";@'};var P,R=[],I,L={},j=[],M=T.dense?[]:{},D="",F={},N={},G=xlml_parsexmltag('<Data ss:Type="String">'),B=0,H=0,O=0,V={s:{r:2e6,c:2e6},e:{r:0,c:0}},U={},W={},K="",Y=0,ee=[],oe={},se={},Q=0,ie=[],ae=[],re={},J=[],te,Z=!1,X=[],de=[],he={},ne=0,ue=0,ce={Sheets:[],WBProps:{date1904:!1}},fe={};xlmlregex.lastIndex=0,S=S.replace(/<!--([\s\S]*?)-->/mg,"");for(var ve="";P=xlmlregex.exec(S);)switch(P[3]=(ve=P[3]).toLowerCase()){case"data":if(ve=="data"){if(P[1]==="/"){if((I=R.pop())[0]!==P[3])throw new Error("Bad state: "+I.join("|"))}else P[0].charAt(P[0].length-2)!=="/"&&R.push([P[3],!0]);break}if(R[R.length-1][1])break;P[1]==="/"?parse_xlml_data(S.slice(B,P.index),K,G,R[R.length-1][0]=="comment"?re:F,{c:H,r:O},U,J[H],N,X,T):(K="",G=xlml_parsexmltag(P[0]),B=P.index+P[0].length);break;case"cell":if(P[1]==="/")if(ae.length>0&&(F.c=ae),(!T.sheetRows||T.sheetRows>O)&&F.v!==void 0&&(T.dense?(M[O]||(M[O]=[]),M[O][H]=F):M[encode_col(H)+encode_row(O)]=F),F.HRef&&(F.l={Target:unescapexml(F.HRef)},F.HRefScreenTip&&(F.l.Tooltip=F.HRefScreenTip),delete F.HRef,delete F.HRefScreenTip),(F.MergeAcross||F.MergeDown)&&(ne=H+(parseInt(F.MergeAcross,10)|0),ue=O+(parseInt(F.MergeDown,10)|0),ee.push({s:{c:H,r:O},e:{c:ne,r:ue}})),!T.sheetStubs)F.MergeAcross?H=ne+1:++H;else if(F.MergeAcross||F.MergeDown){for(var Te=H;Te<=ne;++Te)for(var Se=O;Se<=ue;++Se)(Te>H||Se>O)&&(T.dense?(M[Se]||(M[Se]=[]),M[Se][Te]={t:"z"}):M[encode_col(Te)+encode_row(Se)]={t:"z"});H=ne+1}else++H;else F=xlml_parsexmltagobj(P[0]),F.Index&&(H=+F.Index-1),H<V.s.c&&(V.s.c=H),H>V.e.c&&(V.e.c=H),P[0].slice(-2)==="/>"&&++H,ae=[];break;case"row":P[1]==="/"||P[0].slice(-2)==="/>"?(O<V.s.r&&(V.s.r=O),O>V.e.r&&(V.e.r=O),P[0].slice(-2)==="/>"&&(N=xlml_parsexmltag(P[0]),N.Index&&(O=+N.Index-1)),H=0,++O):(N=xlml_parsexmltag(P[0]),N.Index&&(O=+N.Index-1),he={},(N.AutoFitHeight=="0"||N.Height)&&(he.hpx=parseInt(N.Height,10),he.hpt=px2pt(he.hpx),de[O]=he),N.Hidden=="1"&&(he.hidden=!0,de[O]=he));break;case"worksheet":if(P[1]==="/"){if((I=R.pop())[0]!==P[3])throw new Error("Bad state: "+I.join("|"));j.push(D),V.s.r<=V.e.r&&V.s.c<=V.e.c&&(M["!ref"]=encode_range(V),T.sheetRows&&T.sheetRows<=V.e.r&&(M["!fullref"]=M["!ref"],V.e.r=T.sheetRows-1,M["!ref"]=encode_range(V))),ee.length&&(M["!merges"]=ee),J.length>0&&(M["!cols"]=J),de.length>0&&(M["!rows"]=de),L[D]=M}else V={s:{r:2e6,c:2e6},e:{r:0,c:0}},O=H=0,R.push([P[3],!1]),I=xlml_parsexmltag(P[0]),D=unescapexml(I.Name),M=T.dense?[]:{},ee=[],X=[],de=[],fe={name:D,Hidden:0},ce.Sheets.push(fe);break;case"table":if(P[1]==="/"){if((I=R.pop())[0]!==P[3])throw new Error("Bad state: "+I.join("|"))}else{if(P[0].slice(-2)=="/>")break;R.push([P[3],!1]),J=[],Z=!1}break;case"style":P[1]==="/"?process_style_xlml(U,W,T):W=xlml_parsexmltag(P[0]);break;case"numberformat":W.nf=unescapexml(xlml_parsexmltag(P[0]).Format||"General"),XLMLFormatMap[W.nf]&&(W.nf=XLMLFormatMap[W.nf]);for(var ke=0;ke!=392&&table_fmt[ke]!=W.nf;++ke);if(ke==392){for(ke=57;ke!=392;++ke)if(table_fmt[ke]==null){SSF_load(W.nf,ke);break}}break;case"column":if(R[R.length-1][0]!=="table")break;if(te=xlml_parsexmltag(P[0]),te.Hidden&&(te.hidden=!0,delete te.Hidden),te.Width&&(te.wpx=parseInt(te.Width,10)),!Z&&te.wpx>10){Z=!0,MDW=DEF_MDW;for(var we=0;we<J.length;++we)J[we]&&process_col(J[we])}Z&&process_col(te),J[te.Index-1||J.length]=te;for(var Le=0;Le<+te.Span;++Le)J[J.length]=dup(te);break;case"namedrange":if(P[1]==="/")break;ce.Names||(ce.Names=[]);var pe=parsexmltag(P[0]),Me={Name:pe.Name,Ref:rc_to_a1(pe.RefersTo.slice(1),{r:0,c:0})};ce.Sheets.length>0&&(Me.Sheet=ce.Sheets.length-1),ce.Names.push(Me);break;case"namedcell":break;case"b":break;case"i":break;case"u":break;case"s":break;case"em":break;case"h2":break;case"h3":break;case"sub":break;case"sup":break;case"span":break;case"alignment":break;case"borders":break;case"border":break;case"font":if(P[0].slice(-2)==="/>")break;P[1]==="/"?K+=S.slice(Y,P.index):Y=P.index+P[0].length;break;case"interior":if(!T.cellStyles)break;W.Interior=xlml_parsexmltag(P[0]);break;case"protection":break;case"author":case"title":case"description":case"created":case"keywords":case"subject":case"category":case"company":case"lastauthor":case"lastsaved":case"lastprinted":case"version":case"revision":case"totaltime":case"hyperlinkbase":case"manager":case"contentstatus":case"identifier":case"language":case"appname":if(P[0].slice(-2)==="/>")break;P[1]==="/"?xlml_set_prop(oe,ve,S.slice(Q,P.index)):Q=P.index+P[0].length;break;case"paragraphs":break;case"styles":case"workbook":if(P[1]==="/"){if((I=R.pop())[0]!==P[3])throw new Error("Bad state: "+I.join("|"))}else R.push([P[3],!1]);break;case"comment":if(P[1]==="/"){if((I=R.pop())[0]!==P[3])throw new Error("Bad state: "+I.join("|"));xlml_clean_comment(re),ae.push(re)}else R.push([P[3],!1]),I=xlml_parsexmltag(P[0]),re={a:I.Author};break;case"autofilter":if(P[1]==="/"){if((I=R.pop())[0]!==P[3])throw new Error("Bad state: "+I.join("|"))}else if(P[0].charAt(P[0].length-2)!=="/"){var Pe=xlml_parsexmltag(P[0]);M["!autofilter"]={ref:rc_to_a1(Pe.Range).replace(/\$/g,"")},R.push([P[3],!0])}break;case"name":break;case"datavalidation":if(P[1]==="/"){if((I=R.pop())[0]!==P[3])throw new Error("Bad state: "+I.join("|"))}else P[0].charAt(P[0].length-2)!=="/"&&R.push([P[3],!0]);break;case"pixelsperinch":break;case"componentoptions":case"documentproperties":case"customdocumentproperties":case"officedocumentsettings":case"pivottable":case"pivotcache":case"names":case"mapinfo":case"pagebreaks":case"querytable":case"sorting":case"schema":case"conditionalformatting":case"smarttagtype":case"smarttags":case"excelworkbook":case"workbookoptions":case"worksheetoptions":if(P[1]==="/"){if((I=R.pop())[0]!==P[3])throw new Error("Bad state: "+I.join("|"))}else P[0].charAt(P[0].length-2)!=="/"&&R.push([P[3],!0]);break;case"null":break;default:if(R.length==0&&P[3]=="document"||R.length==0&&P[3]=="uof")return parse_fods(S,T);var Ue=!0;switch(R[R.length-1][0]){case"officedocumentsettings":switch(P[3]){case"allowpng":break;case"removepersonalinformation":break;case"downloadcomponents":break;case"locationofcomponents":break;case"colors":break;case"color":break;case"index":break;case"rgb":break;case"targetscreensize":break;case"readonlyrecommended":break;default:Ue=!1}break;case"componentoptions":switch(P[3]){case"toolbar":break;case"hideofficelogo":break;case"spreadsheetautofit":break;case"label":break;case"caption":break;case"maxheight":break;case"maxwidth":break;case"nextsheetnumber":break;default:Ue=!1}break;case"excelworkbook":switch(P[3]){case"date1904":ce.WBProps.date1904=!0;break;case"windowheight":break;case"windowwidth":break;case"windowtopx":break;case"windowtopy":break;case"tabratio":break;case"protectstructure":break;case"protectwindow":break;case"protectwindows":break;case"activesheet":break;case"displayinknotes":break;case"firstvisiblesheet":break;case"supbook":break;case"sheetname":break;case"sheetindex":break;case"sheetindexfirst":break;case"sheetindexlast":break;case"dll":break;case"acceptlabelsinformulas":break;case"donotsavelinkvalues":break;case"iteration":break;case"maxiterations":break;case"maxchange":break;case"path":break;case"xct":break;case"count":break;case"selectedsheets":break;case"calculation":break;case"uncalced":break;case"startupprompt":break;case"crn":break;case"externname":break;case"formula":break;case"colfirst":break;case"collast":break;case"wantadvise":break;case"boolean":break;case"error":break;case"text":break;case"ole":break;case"noautorecover":break;case"publishobjects":break;case"donotcalculatebeforesave":break;case"number":break;case"refmoder1c1":break;case"embedsavesmarttags":break;default:Ue=!1}break;case"workbookoptions":switch(P[3]){case"owcversion":break;case"height":break;case"width":break;default:Ue=!1}break;case"worksheetoptions":switch(P[3]){case"visible":if(P[0].slice(-2)!=="/>")if(P[1]==="/")switch(S.slice(Q,P.index)){case"SheetHidden":fe.Hidden=1;break;case"SheetVeryHidden":fe.Hidden=2;break}else Q=P.index+P[0].length;break;case"header":M["!margins"]||default_margins(M["!margins"]={},"xlml"),isNaN(+parsexmltag(P[0]).Margin)||(M["!margins"].header=+parsexmltag(P[0]).Margin);break;case"footer":M["!margins"]||default_margins(M["!margins"]={},"xlml"),isNaN(+parsexmltag(P[0]).Margin)||(M["!margins"].footer=+parsexmltag(P[0]).Margin);break;case"pagemargins":var qe=parsexmltag(P[0]);M["!margins"]||default_margins(M["!margins"]={},"xlml"),isNaN(+qe.Top)||(M["!margins"].top=+qe.Top),isNaN(+qe.Left)||(M["!margins"].left=+qe.Left),isNaN(+qe.Right)||(M["!margins"].right=+qe.Right),isNaN(+qe.Bottom)||(M["!margins"].bottom=+qe.Bottom);break;case"displayrighttoleft":ce.Views||(ce.Views=[]),ce.Views[0]||(ce.Views[0]={}),ce.Views[0].RTL=!0;break;case"freezepanes":break;case"frozennosplit":break;case"splithorizontal":case"splitvertical":break;case"donotdisplaygridlines":break;case"activerow":break;case"activecol":break;case"toprowbottompane":break;case"leftcolumnrightpane":break;case"unsynced":break;case"print":break;case"printerrors":break;case"panes":break;case"scale":break;case"pane":break;case"number":break;case"layout":break;case"pagesetup":break;case"selected":break;case"protectobjects":break;case"enableselection":break;case"protectscenarios":break;case"validprinterinfo":break;case"horizontalresolution":break;case"verticalresolution":break;case"numberofcopies":break;case"activepane":break;case"toprowvisible":break;case"leftcolumnvisible":break;case"fittopage":break;case"rangeselection":break;case"papersizeindex":break;case"pagelayoutzoom":break;case"pagebreakzoom":break;case"filteron":break;case"fitwidth":break;case"fitheight":break;case"commentslayout":break;case"zoom":break;case"lefttoright":break;case"gridlines":break;case"allowsort":break;case"allowfilter":break;case"allowinsertrows":break;case"allowdeleterows":break;case"allowinsertcols":break;case"allowdeletecols":break;case"allowinserthyperlinks":break;case"allowformatcells":break;case"allowsizecols":break;case"allowsizerows":break;case"nosummaryrowsbelowdetail":M["!outline"]||(M["!outline"]={}),M["!outline"].above=!0;break;case"tabcolorindex":break;case"donotdisplayheadings":break;case"showpagelayoutzoom":break;case"nosummarycolumnsrightdetail":M["!outline"]||(M["!outline"]={}
272),M["!outline"].left=!0;break;case"blackandwhite":break;case"donotdisplayzeros":break;case"displaypagebreak":break;case"rowcolheadings":break;case"donotdisplayoutline":break;case"noorientation":break;case"allowusepivottables":break;case"zeroheight":break;case"viewablerange":break;case"selection":break;case"protectcontents":break;default:Ue=!1}break;case"pivottable":case"pivotcache":switch(P[3]){case"immediateitemsondrop":break;case"showpagemultipleitemlabel":break;case"compactrowindent":break;case"location":break;case"pivotfield":break;case"orientation":break;case"layoutform":break;case"layoutsubtotallocation":break;case"layoutcompactrow":break;case"position":break;case"pivotitem":break;case"datatype":break;case"datafield":break;case"sourcename":break;case"parentfield":break;case"ptlineitems":break;case"ptlineitem":break;case"countofsameitems":break;case"item":break;case"itemtype":break;case"ptsource":break;case"cacheindex":break;case"consolidationreference":break;case"filename":break;case"reference":break;case"nocolumngrand":break;case"norowgrand":break;case"blanklineafteritems":break;case"hidden":break;case"subtotal":break;case"basefield":break;case"mapchilditems":break;case"function":break;case"refreshonfileopen":break;case"printsettitles":break;case"mergelabels":break;case"defaultversion":break;case"refreshname":break;case"refreshdate":break;case"refreshdatecopy":break;case"versionlastrefresh":break;case"versionlastupdate":break;case"versionupdateablemin":break;case"versionrefreshablemin":break;case"calculation":break;default:Ue=!1}break;case"pagebreaks":switch(P[3]){case"colbreaks":break;case"colbreak":break;case"rowbreaks":break;case"rowbreak":break;case"colstart":break;case"colend":break;case"rowend":break;default:Ue=!1}break;case"autofilter":switch(P[3]){case"autofiltercolumn":break;case"autofiltercondition":break;case"autofilterand":break;case"autofilteror":break;default:Ue=!1}break;case"querytable":switch(P[3]){case"id":break;case"autoformatfont":break;case"autoformatpattern":break;case"querysource":break;case"querytype":break;case"enableredirections":break;case"refreshedinxl9":break;case"urlstring":break;case"htmltables":break;case"connection":break;case"commandtext":break;case"refreshinfo":break;case"notitles":break;case"nextid":break;case"columninfo":break;case"overwritecells":break;case"donotpromptforfile":break;case"textwizardsettings":break;case"source":break;case"number":break;case"decimal":break;case"thousandseparator":break;case"trailingminusnumbers":break;case"formatsettings":break;case"fieldtype":break;case"delimiters":break;case"tab":break;case"comma":break;case"autoformatname":break;case"versionlastedit":break;case"versionlastrefresh":break;default:Ue=!1}break;case"datavalidation":switch(P[3]){case"range":break;case"type":break;case"min":break;case"max":break;case"sort":break;case"descending":break;case"order":break;case"casesensitive":break;case"value":break;case"errorstyle":break;case"errormessage":break;case"errortitle":break;case"inputmessage":break;case"inputtitle":break;case"combohide":break;case"inputhide":break;case"condition":break;case"qualifier":break;case"useblank":break;case"value1":break;case"value2":break;case"format":break;case"cellrangelist":break;default:Ue=!1}break;case"sorting":case"conditionalformatting":switch(P[3]){case"range":break;case"type":break;case"min":break;case"max":break;case"sort":break;case"descending":break;case"order":break;case"casesensitive":break;case"value":break;case"errorstyle":break;case"errormessage":break;case"errortitle":break;case"cellrangelist":break;case"inputmessage":break;case"inputtitle":break;case"combohide":break;case"inputhide":break;case"condition":break;case"qualifier":break;case"useblank":break;case"value1":break;case"value2":break;case"format":break;default:Ue=!1}break;case"mapinfo":case"schema":case"data":switch(P[3]){case"map":break;case"entry":break;case"range":break;case"xpath":break;case"field":break;case"xsdtype":break;case"filteron":break;case"aggregate":break;case"elementtype":break;case"attributetype":break;case"schema":case"element":case"complextype":case"datatype":case"all":case"attribute":case"extends":break;case"row":break;default:Ue=!1}break;case"smarttags":break;default:Ue=!1;break}if(Ue||P[3].match(/!\[CDATA/))break;if(!R[R.length-1][1])throw"Unrecognized tag: "+P[3]+"|"+R.join("|");if(R[R.length-1][0]==="customdocumentproperties"){if(P[0].slice(-2)==="/>")break;P[1]==="/"?xlml_set_custprop(se,ve,ie,S.slice(Q,P.index)):(ie=P,Q=P.index+P[0].length);break}if(T.WTF)throw"Unrecognized tag: "+P[3]+"|"+R.join("|")}var Ie={};return!T.bookSheets&&!T.bookProps&&(Ie.Sheets=L),Ie.SheetNames=j,Ie.Workbook=ce,Ie.SSF=dup(table_fmt),Ie.Props=oe,Ie.Custprops=se,Ie}function parse_xlml(o,u){switch(fix_read_opts(u=u||{}),u.type||"base64"){case"base64":return parse_xlml_xml(Base64_decode(o),u);case"binary":case"buffer":case"file":return parse_xlml_xml(o,u);case"array":return parse_xlml_xml(a2s(o),u)}}function write_props_xlml(o,u){var T=[];return o.Props&&T.push(xlml_write_docprops(o.Props,u)),o.Custprops&&T.push(xlml_write_custprops(o.Props,o.Custprops)),T.join("")}function write_wb_xlml(){return""}function write_sty_xlml(o,u){var T=['<Style ss:ID="Default" ss:Name="Normal"><NumberFormat/></Style>'];
vendor: 30,831 bytes, line 272
272return u.cellXfs.forEach(function(S,E){var C=[];C.push(writextag("NumberFormat",null,{"ss:Format":escapexml(table_fmt[S.numFmtId])}));var _={"ss:ID":"s"+(21+E)};T.push(writextag("Style",C.join(""),_))}),writextag("Styles",T.join(""))}function write_name_xlml(o){return writextag("NamedRange",null,{"ss:Name":o.Name,"ss:RefersTo":"="+a1_to_rc(o.Ref,{r:0,c:0})})}function write_names_xlml(o){if(!((o||{}).Workbook||{}).Names)return"";for(var u=o.Workbook.Names,T=[],S=0;S<u.length;++S){var E=u[S];E.Sheet==null&&(E.Name.match(/^_xlfn\./)||T.push(write_name_xlml(E)))}return writextag("Names",T.join(""))}function write_ws_xlml_names(o,u,T,S){if(!o||!((S||{}).Workbook||{}).Names)return"";for(var E=S.Workbook.Names,C=[],_=0;_<E.length;++_){var P=E[_];P.Sheet==T&&(P.Name.match(/^_xlfn\./)||C.push(write_name_xlml(P)))}return C.join("")}function write_ws_xlml_wsopts(o,u,T,S){if(!o)return"";var E=[];if(o["!margins"]&&(E.push("<PageSetup>"),o["!margins"].header&&E.push(writextag("Header",null,{"x:Margin":o["!margins"].header})),o["!margins"].footer&&E.push(writextag("Footer",null,{"x:Margin":o["!margins"].footer})),E.push(writextag("PageMargins",null,{"x:Bottom":o["!margins"].bottom||"0.75","x:Left":o["!margins"].left||"0.7","x:Right":o["!margins"].right||"0.7","x:Top":o["!margins"].top||"0.75"})),E.push("</PageSetup>")),S&&S.Workbook&&S.Workbook.Sheets&&S.Workbook.Sheets[T])if(S.Workbook.Sheets[T].Hidden)E.push(writextag("Visible",S.Workbook.Sheets[T].Hidden==1?"SheetHidden":"SheetVeryHidden",{}));else{for(var C=0;C<T&&!(S.Workbook.Sheets[C]&&!S.Workbook.Sheets[C].Hidden);++C);C==T&&E.push("<Selected/>")}return((((S||{}).Workbook||{}).Views||[])[0]||{}).RTL&&E.push("<DisplayRightToLeft/>"),o["!protect"]&&(E.push(writetag("ProtectContents","True")),o["!protect"].objects&&E.push(writetag("ProtectObjects","True")),o["!protect"].scenarios&&E.push(writetag("ProtectScenarios","True")),o["!protect"].selectLockedCells!=null&&!o["!protect"].selectLockedCells?E.push(writetag("EnableSelection","NoSelection")):o["!protect"].selectUnlockedCells!=null&&!o["!protect"].selectUnlockedCells&&E.push(writetag("EnableSelection","UnlockedCells")),[["formatCells","AllowFormatCells"],["formatColumns","AllowSizeCols"],["formatRows","AllowSizeRows"],["insertColumns","AllowInsertCols"],["insertRows","AllowInsertRows"],["insertHyperlinks","AllowInsertHyperlinks"],["deleteColumns","AllowDeleteCols"],["deleteRows","AllowDeleteRows"],["sort","AllowSort"],["autoFilter","AllowFilter"],["pivotTables","AllowUsePivotTables"]].forEach(function(_){o["!protect"][_[0]]&&E.push("<"+_[1]+"/>")})),E.length==0?"":writextag("WorksheetOptions",E.join(""),{xmlns:XLMLNS.x})}function write_ws_xlml_comment(o){return o.map(function(u){var T=xlml_unfixstr(u.t||""),S=writextag("ss:Data",T,{xmlns:"http://www.w3.org/TR/REC-html40"});return writextag("Comment",S,{"ss:Author":u.a})}).join("")}function write_ws_xlml_cell(o,u,T,S,E,C,_){if(!o||o.v==null&&o.f==null)return"";var P={};if(o.f&&(P["ss:Formula"]="="+escapexml(a1_to_rc(o.f,_))),o.F&&o.F.slice(0,u.length)==u){var R=decode_cell(o.F.slice(u.length+1));P["ss:ArrayRange"]="RC:R"+(R.r==_.r?"":"["+(R.r-_.r)+"]")+"C"+(R.c==_.c?"":"["+(R.c-_.c)+"]")}if(o.l&&o.l.Target&&(P["ss:HRef"]=escapexml(o.l.Target),o.l.Tooltip&&(P["x:HRefScreenTip"]=escapexml(o.l.Tooltip))),T["!merges"])for(var I=T["!merges"],L=0;L!=I.length;++L)I[L].s.c!=_.c||I[L].s.r!=_.r||(I[L].e.c>I[L].s.c&&(P["ss:MergeAcross"]=I[L].e.c-I[L].s.c),I[L].e.r>I[L].s.r&&(P["ss:MergeDown"]=I[L].e.r-I[L].s.r));var j="",M="";switch(o.t){case"z":if(!S.sheetStubs)return"";break;case"n":j="Number",M=String(o.v);break;case"b":j="Boolean",M=o.v?"1":"0";break;case"e":j="Error",M=BErr[o.v];break;case"d":j="DateTime",M=new Date(o.v).toISOString(),o.z==null&&(o.z=o.z||table_fmt[14]);break;case"s":j="String",M=escapexlml(o.v||"");break}var D=get_cell_style(S.cellXfs,o,S);P["ss:StyleID"]="s"+(21+D),P["ss:Index"]=_.c+1;var F=o.v!=null?M:"",N=o.t=="z"?"":'<Data ss:Type="'+j+'">'+F+"</Data>";return(o.c||[]).length>0&&(N+=write_ws_xlml_comment(o.c)),writextag("Cell",N,P)}function write_ws_xlml_row(o,u){var T='<Row ss:Index="'+(o+1)+'"';return u&&(u.hpt&&!u.hpx&&(u.hpx=pt2px(u.hpt)),u.hpx&&(T+=' ss:AutoFitHeight="0" ss:Height="'+u.hpx+'"'),u.hidden&&(T+=' ss:Hidden="1"')),T+">"}function write_ws_xlml_table(o,u,T,S){if(!o["!ref"])return"";var E=safe_decode_range(o["!ref"]),C=o["!merges"]||[],_=0,P=[];o["!cols"]&&o["!cols"].forEach(function(G,B){process_col(G);var H=!!G.width,O=col_obj_w(B,G),V={"ss:Index":B+1};H&&(V["ss:Width"]=width2px(O.width)),G.hidden&&(V["ss:Hidden"]="1"),P.push(writextag("Column",null,V))});for(var R=Array.isArray(o),I=E.s.r;I<=E.e.r;++I){for(var L=[write_ws_xlml_row(I,(o["!rows"]||[])[I])],j=E.s.c;j<=E.e.c;++j){var M=!1;for(_=0;_!=C.length;++_)if(!(C[_].s.c>j)&&!(C[_].s.r>I)&&!(C[_].e.c<j)&&!(C[_].e.r<I)){(C[_].s.c!=j||C[_].s.r!=I)&&(M=!0);break}if(!M){var D={r:I,c:j},F=encode_cell(D),N=R?(o[I]||[])[j]:o[F];L.push(write_ws_xlml_cell(N,F,o,u,T,S,D))}}L.push("</Row>"),L.length>2&&P.push(L.join(""))}return P.join("")}function write_ws_xlml(o,u,T){var S=[],E=T.SheetNames[o],C=T.Sheets[E],_=C?write_ws_xlml_names(C,u,o,T):"";return _.length>0&&S.push("<Names>"+_+"</Names>"),_=C?write_ws_xlml_table(C,u,o,T):"",_.length>0&&S.push("<Table>"+_+"</Table>"),S.push(write_ws_xlml_wsopts(C,u,o,T)),S.join("")}function write_xlml(o,u){u||(u={}),o.SSF||(o.SSF=dup(table_fmt)),o.SSF&&(make_ssf(),SSF_load_table(o.SSF),u.revssf=evert_num(o.SSF),u.revssf[o.SSF[65535]]=0,u.ssf=o.SSF,u.cellXfs=[],get_cell_style(u.cellXfs,{},{revssf:{General:0}}));var T=[];T.push(write_props_xlml(o,u)),T.push(write_wb_xlml()),T.push(""),T.push("");for(var S=0;S<o.SheetNames.length;++S)T.push(writextag("Worksheet",write_ws_xlml(S,u,o),{"ss:Name":escapexml(o.SheetNames[S])}));return T[2]=write_sty_xlml(o,u),T[3]=write_names_xlml(o),XML_HEADER+writextag("Workbook",T.join(""),{xmlns:XLMLNS.ss,"xmlns:o":XLMLNS.o,"xmlns:x":XLMLNS.x,"xmlns:ss":XLMLNS.ss,"xmlns:dt":XLMLNS.dt,"xmlns:html":XLMLNS.html})}function parse_compobj(o){var u={},T=o.content;if(T.l=28,u.AnsiUserType=T.read_shift(0,"lpstr-ansi"),u.AnsiClipboardFormat=parse_ClipboardFormatOrAnsiString(T),T.length-T.l<=4)return u;var S=T.read_shift(4);if(S==0||S>40||(T.l-=4,u.Reserved1=T.read_shift(0,"lpstr-ansi"),T.length-T.l<=4)||(S=T.read_shift(4),S!==1907505652)||(u.UnicodeClipboardFormat=parse_ClipboardFormatOrUnicodeString(T),S=T.read_shift(4),S==0||S>40))return u;T.l-=4,u.Reserved2=T.read_shift(0,"lpwstr")}var CONTINUE_RT=[60,1084,2066,2165,2175];function slurp(o,u,T,S,E){var C=S,_=[],P=T.slice(T.l,T.l+C);if(E&&E.enc&&E.enc.insitu&&P.length>0)switch(o){case 9:case 521:case 1033:case 2057:case 47:case 405:case 225:case 406:case 312:case 404:case 10:break;case 133:break;default:E.enc.insitu(P)}_.push(P),T.l+=C;for(var R=__readUInt16LE(T,T.l),I=XLSRecordEnum[R],L=0;I!=null&&CONTINUE_RT.indexOf(R)>-1;)C=__readUInt16LE(T,T.l+2),L=T.l+4,R==2066?L+=4:(R==2165||R==2175)&&(L+=12),P=T.slice(L,T.l+4+C),_.push(P),T.l+=4+C,I=XLSRecordEnum[R=__readUInt16LE(T,T.l)];var j=bconcat(_);prep_blob(j,0);var M=0;j.lens=[];for(var D=0;D<_.length;++D)j.lens.push(M),M+=_[D].length;if(j.length<S)throw"XLS Record 0x"+o.toString(16)+" Truncated: "+j.length+" < "+S;return u.f(j,j.length,E)}function safe_format_xf(o,u,T){if(o.t!=="z"&&o.XF){var S=0;try{S=o.z||o.XF.numFmtId||0,u.cellNF&&(o.z=table_fmt[S])}catch(C){if(u.WTF)throw C}if(!u||u.cellText!==!1)try{o.t==="e"?o.w=o.w||BErr[o.v]:S===0||S=="General"?o.t==="n"?(o.v|0)===o.v?o.w=o.v.toString(10):o.w=SSF_general_num(o.v):o.w=SSF_general(o.v):o.w=SSF_format(S,o.v,{date1904:!!T,dateNF:u&&u.dateNF})}catch(C){if(u.WTF)throw C}if(u.cellDates&&S&&o.t=="n"&&fmt_is_date(table_fmt[S]||String(S))){var E=SSF_parse_date_code(o.v);E&&(o.t="d",o.v=new Date(E.y,E.m-1,E.d,E.H,E.M,E.S,E.u))}}}function make_cell(o,u,T){return{v:o,ixfe:u,t:T}}function parse_workbook(o,u){var T={opts:{}},S={},E=u.dense?[]:{},C={},_={},P=null,R=[],I="",L={},j,M="",D,F,N,G,B={},H=[],O,V,U=[],W=[],K={Sheets:[],WBProps:{date1904:!1},Views:[{}]},Y={},ee=function(je){return je<8?XLSIcv[je]:je<64&&W[je-8]||XLSIcv[je]},oe=function(je,Be,Qe){var Ge=Be.XF.data;if(!(!Ge||!Ge.patternType||!Qe||!Qe.cellStyles)){Be.s={},Be.s.patternType=Ge.patternType;var We;(We=rgb2Hex(ee(Ge.icvFore)))&&(Be.s.fgColor={rgb:We}),(We=rgb2Hex(ee(Ge.icvBack)))&&(Be.s.bgColor={rgb:We})}},se=function(je,Be,Qe){if(!(he>1)&&!(Qe.sheetRows&&je.r>=Qe.sheetRows)){if(Qe.cellStyles&&Be.XF&&Be.XF.data&&oe(je,Be,Qe),delete Be.ixfe,delete Be.XF,j=je,M=encode_cell(je),(!_||!_.s||!_.e)&&(_={s:{r:0,c:0},e:{r:0,c:0}}),je.r<_.s.r&&(_.s.r=je.r),je.c<_.s.c&&(_.s.c=je.c),je.r+1>_.e.r&&(_.e.r=je.r+1),je.c+1>_.e.c&&(_.e.c=je.c+1),Qe.cellFormula&&Be.f){for(var Ge=0;Ge<H.length;++Ge)if(!(H[Ge][0].s.c>je.c||H[Ge][0].s.r>je.r)&&!(H[Ge][0].e.c<je.c||H[Ge][0].e.r<je.r)){Be.F=encode_range(H[Ge][0]),(H[Ge][0].s.c!=je.c||H[Ge][0].s.r!=je.r)&&delete Be.f,Be.f&&(Be.f=""+stringify_formula(H[Ge][1],_,je,X,Q));break}}Qe.dense?(E[je.r]||(E[je.r]=[]),E[je.r][je.c]=Be):E[M]=Be}},Q={enc:!1,sbcch:0,snames:[],sharedf:B,arrayf:H,rrtabid:[],lastuser:"",biff:8,codepage:0,winlocked:0,cellStyles:!!u&&!!u.cellStyles,WTF:!!u&&!!u.wtf};u.password&&(Q.password=u.password);var ie,ae=[],re=[],J=[],te=[],Z=!1,X=[];X.SheetNames=Q.snames,X.sharedf=Q.sharedf,X.arrayf=Q.arrayf,X.names=[],X.XTI=[];var de=0,he=0,ne=0,ue=[],ce=[],fe;Q.codepage=1200,set_cp(1200);for(var ve=!1;o.l<o.length-1;){var Te=o.l,Se=o.read_shift(2);if(Se===0&&de===10)break;var ke=o.l===o.length?0:o.read_shift(2),we=XLSRecordEnum[Se];if(we&&we.f){if(u.bookSheets&&de===133&&Se!==133)break;if(de=Se,we.r===2||we.r==12){var Le=o.read_shift(2);if(ke-=2,!Q.enc&&Le!==Se&&((Le&255)<<8|Le>>8)!==Se)throw new Error("rt mismatch: "+Le+"!="+Se);we.r==12&&(o.l+=10,ke-=10)}var pe={};if(Se===10?pe=we.f(o,ke,Q):pe=slurp(Se,we,o,ke,Q),he==0&&[9,521,1033,2057].indexOf(de)===-1)continue;switch(Se){case 34:T.opts.Date1904=K.WBProps.date1904=pe;break;case 134:T.opts.WriteProtect=!0;break;case 47:if(Q.enc||(o.l=0),Q.enc=pe,!u.password)throw new Error("File is password-protected");if(pe.valid==null)throw new Error("Encryption scheme unsupported");if(!pe.valid)throw new Error("Password is incorrect");break;case 92:Q.lastuser=pe;break;case 66:var Me=Number(pe);switch(Me){case 21010:Me=1200;break;case 32768:Me=1e4;break;case 32769:Me=1252;break}set_cp(Q.codepage=Me),ve=!0;break;case 317:Q.rrtabid=pe;break;case 25:Q.winlocked=pe;break;case 439:T.opts.RefreshAll=pe;break;case 12:T.opts.CalcCount=pe;break;case 16:T.opts.CalcDelta=pe;break;case 17:T.opts.CalcIter=pe;break;case 13:T.opts.CalcMode=pe;break;case 14:T.opts.CalcPrecision=pe;break;case 95:T.opts.CalcSaveRecalc=pe;break;case 15:Q.CalcRefMode=pe;break;case 2211:T.opts.FullCalc=pe;break;case 129:pe.fDialog&&(E["!type"]="dialog"),pe.fBelow||((E["!outline"]||(E["!outline"]={})).above=!0),pe.fRight||((E["!outline"]||(E["!outline"]={})).left=!0);break;case 224:U.push(pe);break;case 430:X.push([pe]),X[X.length-1].XTI=[];break;case 35:case 547:X[X.length-1].push(pe);break;case 24:case 536:fe={Name:pe.Name,Ref:stringify_formula(pe.rgce,_,null,X,Q)},pe.itab>0&&(fe.Sheet=pe.itab-1),X.names.push(fe),X[0]||(X[0]=[],X[0].XTI=[]),X[X.length-1].push(pe),pe.Name=="_xlnm._FilterDatabase"&&pe.itab>0&&pe.rgce&&pe.rgce[0]&&pe.rgce[0][0]&&pe.rgce[0][0][0]=="PtgArea3d"&&(ce[pe.itab-1]={ref:encode_range(pe.rgce[0][0][1][2])});break;case 22:Q.ExternCount=pe;break;case 23:X.length==0&&(X[0]=[],X[0].XTI=[]),X[X.length-1].XTI=X[X.length-1].XTI.concat(pe),X.XTI=X.XTI.concat(pe);break;case 2196:if(Q.biff<8)break;fe!=null&&(fe.Comment=pe[1]);break;case 18:E["!protect"]=pe;break;case 19:pe!==0&&Q.WTF&&console.error("Password verifier: "+pe);break;case 133:C[pe.pos]=pe,Q.snames.push(pe.name);break;case 10:{if(--he)break;if(_.e){if(_.e.r>0&&_.e.c>0){if(_.e.r--,_.e.c--,E["!ref"]=encode_range(_),u.sheetRows&&u.sheetRows<=_.e.r){var Pe=_.e.r;_.e.r=u.sheetRows-1,E["!fullref"]=E["!ref"],E["!ref"]=encode_range(_),_.e.r=Pe}_.e.r++,_.e.c++}ae.length>0&&(E["!merges"]=ae),re.length>0&&(E["!objects"]=re),J.length>0&&(E["!cols"]=J),te.length>0&&(E["!rows"]=te),K.Sheets.push(Y)}I===""?L=E:S[I]=E,E=u.dense?[]:{}}break;case 9:case 521:case 1033:case 2057:{if(Q.biff===8&&(Q.biff={9:2,521:3,1033:4}[Se]||{512:2,768:3,1024:4,1280:5,1536:8,2:2,7:2}[pe.BIFFVer]||8),Q.biffguess=pe.BIFFVer==0,pe.BIFFVer==0&&pe.dt==4096&&(Q.biff=5,ve=!0,set_cp(Q.codepage=28591)),Q.biff==8&&pe.BIFFVer==0&&pe.dt==16&&(Q.biff=2),he++)break;if(E=u.dense?[]:{},Q.biff<8&&!ve&&(ve=!0,set_cp(Q.codepage=u.codepage||1252)),Q.biff<5||pe.BIFFVer==0&&pe.dt==4096){I===""&&(I="Sheet1"),_={s:{r:0,c:0},e:{r:0,c:0}};var Ue={pos:o.l-ke,name:I};C[Ue.pos]=Ue,Q.snames.push(I)}else I=(C[Te]||{name:""}).name;pe.dt==32&&(E["!type"]="chart"),pe.dt==64&&(E["!type"]="macro"),ae=[],re=[],Q.arrayf=H=[],J=[],te=[],Z=!1,Y={Hidden:(C[Te]||{hs:0}).hs,name:I}}break;case 515:case 3:case 2:E["!type"]=="chart"&&(u.dense?(E[pe.r]||[])[pe.c]:E[encode_cell({c:pe.c,r:pe.r})])&&++pe.c,O={ixfe:pe.ixfe,XF:U[pe.ixfe]||{},v:pe.val,t:"n"},ne>0&&(O.z=ue[O.ixfe>>8&63]),safe_format_xf(O,u,T.opts.Date1904),se({c:pe.c,r:pe.r},O,u);break;case 5:case 517:O={ixfe:pe.ixfe,XF:U[pe.ixfe],v:pe.val,t:pe.t},ne>0&&(O.z=ue[O.ixfe>>8&63]),safe_format_xf(O,u,T.opts.Date1904),se({c:pe.c,r:pe.r},O,u);break;case 638:O={ixfe:pe.ixfe,XF:U[pe.ixfe],v:pe.rknum,t:"n"},ne>0&&(O.z=ue[O.ixfe>>8&63]),safe_format_xf(O,u,T.opts.Date1904),se({c:pe.c,r:pe.r},O,u);break;case 189:for(var qe=pe.c;qe<=pe.C;++qe){var Ie=pe.rkrec[qe-pe.c][0];O={ixfe:Ie,XF:U[Ie],v:pe.rkrec[qe-pe.c][1],t:"n"},ne>0&&(O.z=ue[O.ixfe>>8&63]),safe_format_xf(O,u,T.opts.Date1904),se({c:qe,r:pe.r},O,u)}break;case 6:case 518:case 1030:{if(pe.val=="String"){P=pe;break}if(O=make_cell(pe.val,pe.cell.ixfe,pe.tt),O.XF=U[O.ixfe],u.cellFormula){var Xe=pe.formula;if(Xe&&Xe[0]&&Xe[0][0]&&Xe[0][0][0]=="PtgExp"){var et=Xe[0][0][1][0],tt=Xe[0][0][1][1],Ye=encode_cell({r:et,c:tt});B[Ye]?O.f=""+stringify_formula(pe.formula,_,pe.cell,X,Q):O.F=((u.dense?(E[et]||[])[tt]:E[Ye])||{}).F}else O.f=""+stringify_formula(pe.formula,_,pe.cell,X,Q)}ne>0&&(O.z=ue[O.ixfe>>8&63]),safe_format_xf(O,u,T.opts.Date1904),se(pe.cell,O,u),P=pe}break;case 7:case 519:if(P)P.val=pe,O=make_cell(pe,P.cell.ixfe,"s"),O.XF=U[O.ixfe],u.cellFormula&&(O.f=""+stringify_formula(P.formula,_,P.cell,X,Q)),ne>0&&(O.z=ue[O.ixfe>>8&63]),safe_format_xf(O,u,T.opts.Date1904),se(P.cell,O,u),P=null;else throw new Error("String record expects Formula");break;case 33:case 545:{H.push(pe);var ze=encode_cell(pe[0].s);if(D=u.dense?(E[pe[0].s.r]||[])[pe[0].s.c]:E[ze],u.cellFormula&&D){if(!P||!ze||!D)break;D.f=""+stringify_formula(pe[1],_,pe[0],X,Q),D.F=encode_range(pe[0])}}break;case 1212:{if(!u.cellFormula)break;if(M){if(!P)break;B[encode_cell(P.cell)]=pe[0],D=u.dense?(E[P.cell.r]||[])[P.cell.c]:E[encode_cell(P.cell)],(D||{}).f=""+stringify_formula(pe[0],_,j,X,Q)}}break;case 253:O=make_cell(R[pe.isst].t,pe.ixfe,"s"),R[pe.isst].h&&(O.h=R[pe.isst].h),O.XF=U[O.ixfe],ne>0&&(O.z=ue[O.ixfe>>8&63]),safe_format_xf(O,u,T.opts.Date1904),se({c:pe.c,r:pe.r},O,u);break;case 513:u.sheetStubs&&(O={ixfe:pe.ixfe,XF:U[pe.ixfe],t:"z"},ne>0&&(O.z=ue[O.ixfe>>8&63]),safe_format_xf(O,u,T.opts.Date1904),se({c:pe.c,r:pe.r},O,u));break;case 190:if(u.sheetStubs)for(var Ze=pe.c;Ze<=pe.C;++Ze){var He=pe.ixfe[Ze-pe.c];O={ixfe:He,XF:U[He],t:"z"},ne>0&&(O.z=ue[O.ixfe>>8&63]),safe_format_xf(O,u,T.opts.Date1904),se({c:Ze,r:pe.r},O,u)}break;case 214:case 516:case 4:O=make_cell(pe.val,pe.ixfe,"s"),O.XF=U[O.ixfe],ne>0&&(O.z=ue[O.ixfe>>8&63]),safe_format_xf(O,u,T.opts.Date1904),se({c:pe.c,r:pe.r},O,u);break;case 0:case 512:he===1&&(_=pe);break;case 252:R=pe;break;case 1054:if(Q.biff==4){ue[ne++]=pe[1];for(var rt=0;rt<ne+163&&table_fmt[rt]!=pe[1];++rt);rt>=163&&SSF_load(pe[1],ne+163)}else SSF_load(pe[1],pe[0]);break;case 30:{ue[ne++]=pe;for(var it=0;it<ne+163&&table_fmt[it]!=pe;++it);it>=163&&SSF_load(pe,ne+163)}break;case 229:ae=ae.concat(pe);break;case 93:re[pe.cmo[0]]=Q.lastobj=pe;break;case 438:Q.lastobj.TxO=pe;break;case 127:Q.lastobj.ImData=pe;break;case 440:for(G=pe[0].s.r;G<=pe[0].e.r;++G)for(N=pe[0].s.c;N<=pe[0].e.c;++N)D=u.dense?(E[G]||[])[N]:E[encode_cell({c:N,r:G})],D&&(D.l=pe[1]);break;case 2048:for(G=pe[0].s.r;G<=pe[0].e.r;++G)for(N=pe[0].s.c;N<=pe[0].e.c;++N)D=u.dense?(E[G]||[])[N]:E[encode_cell({c:N,r:G})],D&&D.l&&(D.l.Tooltip=pe[1]);break;case 28:{if(Q.biff<=5&&Q.biff>=2)break;D=u.dense?(E[pe[0].r]||[])[pe[0].c]:E[encode_cell(pe[0])];var st=re[pe[2]];D||(u.dense?(E[pe[0].r]||(E[pe[0].r]=[]),D=E[pe[0].r][pe[0].c]={t:"z"}):D=E[encode_cell(pe[0])]={t:"z"},_.e.r=Math.max(_.e.r,pe[0].r),_.s.r=Math.min(_.s.r,pe[0].r),_.e.c=Math.max(_.e.c,pe[0].c),_.s.c=Math.min(_.s.c,pe[0].c)),D.c||(D.c=[]),F={a:pe[1],t:st.TxO.t},D.c.push(F)}break;case 2173:update_xfext(U[pe.ixfe],pe.ext);break;case 125:{if(!Q.cellStyles)break;for(;pe.e>=pe.s;)J[pe.e--]={width:pe.w/256,level:pe.level||0,hidden:!!(pe.flags&1)},Z||(Z=!0,find_mdw_colw(pe.w/256)),process_col(J[pe.e+1])}break;case 520:{var at={};pe.level!=null&&(te[pe.r]=at,at.level=pe.level),pe.hidden&&(te[pe.r]=at,at.hidden=!0),pe.hpt&&(te[pe.r]=at,at.hpt=pe.hpt,at.hpx=pt2px(pe.hpt))}break;case 38:case 39:case 40:case 41:E["!margins"]||default_margins(E["!margins"]={}),E["!margins"][{38:"left",39:"right",40:"top",41:"bottom"}[Se]]=pe;break;case 161:E["!margins"]||default_margins(E["!margins"]={}),E["!margins"].header=pe.header,E["!margins"].footer=pe.footer;break;case 574:pe.RTL&&(K.Views[0].RTL=!0);break;case 146:W=pe;break;case 2198:ie=pe;break;case 140:V=pe;break;case 442:I?Y.CodeName=pe||Y.name:K.WBProps.CodeName=pe||"ThisWorkbook";break}}else we||console.error("Missing Info for XLS Record 0x"+Se.toString(16)),o.l+=ke}return T.SheetNames=keys(C).sort(function(ot,je){return Number(ot)-Number(je)}).map(function(ot){return C[ot].name}),u.bookSheets||(T.Sheets=S),!T.SheetNames.length&&L["!ref"]?(T.SheetNames.push("Sheet1"),T.Sheets&&(T.Sheets.Sheet1=L)):T.Preamble=L,T.Sheets&&ce.forEach(function(ot,je){T.Sheets[T.SheetNames[je]]["!autofilter"]=ot}),T.Strings=R,T.SSF=dup(table_fmt),Q.enc&&(T.Encryption=Q.enc),ie&&(T.Themes=ie),T.Metadata={},V!==void 0&&(T.Metadata.Country=V),X.names.length>0&&(K.Names=X.names),T.Workbook=K,T}var PSCLSID={SI:"e0859ff2f94f6810ab9108002b27b3d9",DSI:"02d5cdd59c2e1b10939708002b2cf9ae",UDI:"05d5cdd59c2e1b10939708002b2cf9ae"};function parse_xls_props(o,u,T){var S=CFB.find(o,"/!DocumentSummaryInformation");if(S&&S.size>0)try{var E=parse_PropertySetStream(S,DocSummaryPIDDSI,PSCLSID.DSI);for(var C in E)u[C]=E[C]}catch(I){if(T.WTF)throw I}var _=CFB.find(o,"/!SummaryInformation");if(_&&_.size>0)try{var P=parse_PropertySetStream(_,SummaryPIDSI,PSCLSID.SI);for(var R in P)u[R]==null&&(u[R]=P[R])}catch(I){if(T.WTF)throw I}u.HeadingPairs&&u.TitlesOfParts&&(load_props_pairs(u.HeadingPairs,u.TitlesOfParts,u,T),delete u.HeadingPairs,delete u.TitlesOfParts)}function write_xls_props(o,u){var T=[],S=[],E=[],C=0,_,P=evert_key(DocSummaryPIDDSI,"n"),R=evert_key(SummaryPIDSI,"n");if(o.Props)for(_=keys(o.Props),C=0;C<_.length;++C)(Object.prototype.hasOwnProperty.call(P,_[C])?T:Object.prototype.hasOwnProperty.call(R,_[C])?S:E).push([_[C],o.Props[_[C]]]);if(o.Custprops)for(_=keys(o.Custprops),C=0;C<_.length;++C)Object.prototype.hasOwnProperty.call(o.Props||{},_[C])||(Object.prototype.hasOwnProperty.call(P,_[C])?T:Object.prototype.hasOwnProperty.call(R,_[C])?S:E).push([_[C],o.Custprops[_[C]]]);var I=[];for(C=0;C<E.length;++C)XLSPSSkip.indexOf(E[C][0])>-1||PseudoPropsPairs.indexOf(E[C][0])>-1||E[C][1]!=null&&I.push(E[C]);S.length&&CFB.utils.cfb_add(u,"/�SummaryInformation",write_PropertySetStream(S,PSCLSID.SI,R,SummaryPIDSI)),(T.length||I.length)&&CFB.utils.cfb_add(u,"/�DocumentSummaryInformation",write_PropertySetStream(T,PSCLSID.DSI,P,DocSummaryPIDDSI,I.length?I:null,PSCLSID.UDI))}function parse_xlscfb(o,u){u||(u={}),fix_read_opts(u),reset_cp(),u.codepage&&set_ansi(u.codepage);var T,S;if(o.FullPaths){if(CFB.find(o,"/encryption"))throw new Error("File is password-protected");T=CFB.find(o,"!CompObj"),S=CFB.find(o,"/Workbook")||CFB.find(o,"/Book")}else{switch(u.type){case"base64":o=s2a(Base64_decode(o));break;case"binary":o=s2a(o);break;case"buffer":break;case"array":Array.isArray(o)||(o=Array.prototype.slice.call(o));break}prep_blob(o,0),S={content:o}}var E,C;if(T&&parse_compobj(T),u.bookProps&&!u.bookSheets)E={};else{var _=has_buf?"buffer":"array";if(S&&S.content)E=parse_workbook(S.content,u);else if((C=CFB.find(o,"PerfectOffice_MAIN"))&&C.content)E=WK_.to_workbook(C.content,(u.type=_,u));else if((C=CFB.find(o,"NativeContent_MAIN"))&&C.content)E=WK_.to_workbook(C.content,(u.type=_,u));else throw(C=CFB.find(o,"MN0"))&&C.content?new Error("Unsupported Works 4 for Mac file"):new Error("Cannot find Workbook stream");u.bookVBA&&o.FullPaths&&CFB.find(o,"/_VBA_PROJECT_CUR/VBA/dir")&&(E.vbaraw=make_vba_xls(o))}var P={};return o.FullPaths&&parse_xls_props(o,P,u),E.Props=E.Custprops=P,u.bookFiles&&(E.cfb=o),E}function write_xlscfb(o,u){var T=u||{},S=CFB.utils.cfb_new({root:"R"}),E="/Workbook";switch(T.bookType||"xls"){case"xls":T.bookType="biff8";case"xla":T.bookType||(T.bookType="xla");case"biff8":E="/Workbook",T.biff=8;break;case"biff5":E="/Book",T.biff=5;break;default:throw new Error("invalid type "+T.bookType+" for XLS CFB")}return CFB.utils.cfb_add(S,E,write_biff_buf(o,T)),T.biff==8&&(o.Props||o.Custprops)&&write_xls_props(o,S),T.biff==8&&o.vbaraw&&fill_vba_xls(S,CFB.read(o.vbaraw,{type:typeof o.vbaraw=="string"?"binary":"buffer"})),S}var XLSBRecordEnum={0:{f:parse_BrtRowHdr},1:{f:parse_BrtCellBlank},2:{f:parse_BrtCellRk},3:{f:parse_BrtCellError},4:{f:parse_BrtCellBool},5:{f:parse_BrtCellReal},6:{f:parse_BrtCellSt},7:{f:parse_BrtCellIsst},8:{f:parse_BrtFmlaString},9:{f:parse_BrtFmlaNum},10:{f:parse_BrtFmlaBool},11:{f:parse_BrtFmlaError},12:{f:parse_BrtShortBlank},13:{f:parse_BrtShortRk},14:{f:parse_BrtShortError},15:{f:parse_BrtShortBool},16:{f:parse_BrtShortReal},17:{f:parse_BrtShortSt},18:{f:parse_BrtShortIsst},19:{f:parse_RichStr},20:{},21:{},22:{},23:{},24:{},25:{},26:{},27:{},28:{},29:{},30:{},31:{},32:{},33:{},34:{},35:{T:1},36:{T:-1},37:{T:1},38:{T:-1},39:{f:parse_BrtName},40:{},42:{},43:{f:parse_BrtFont},44:{f:parse_BrtFmt},45:{f:parse_BrtFill},46:{f:parse_BrtBorder},47:{f:parse_BrtXF},48:{},49:{f:parse_Int32LE},50:{},51:{f:parse_BrtMdb},52:{T:1},53:{T:-1},54:{T:1},55:{T:-1},56:{T:1},57:{T:-1},58:{},59:{},60:{f:parse_ColInfo},62:{f:parse_BrtCellRString},63:{f:parse_BrtCalcChainItem$},64:{f:parse_BrtDVal},65:{},66:{},67:{},68:{},69:{},70:{},128:{},129:{T:1},130:{T:-1},131:{T:1,f:parsenoop,p:0},132:{T:-1},133:{T:1},134:{T:-1},135:{T:1},136:{T:-1},137:{T:1,f:parse_BrtBeginWsView},138:{T:-1},139:{T:1},140:{T:-1},141:{T:1},142:{T:-1},143:{T:1},144:{T:-1},145:{T:1},146:{T:-1},147:{f:parse_BrtWsProp},148:{f:parse_BrtWsDim,p:16},151:{f:parse_BrtPane},152:{},153:{f:parse_BrtWbProp},154:{},155:{},156:{f:parse_BrtBundleSh},157:{},158:{},159:{T:1,f:parse_BrtBeginSst},160:{T:-1},161:{T:1,f:parse_UncheckedRfX},162:{T:-1},163:{T:1},164:{T:-1},165:{T:1},166:{T:-1},167:{},168:{},169:{},170:{},171:{},172:{T:1},173:{T:-1},174:{},175:{},176:{f:parse_BrtMergeCell},177:{T:1},178:{T:-1},179:{T:1},180:{T:-1},181:{T:1},182:{T:-1},183:{T:1},184:{T:-1},185:{T:1},186:{T:-1},187:{T:1},188:{T:-1},189:{T:1},190:{T:-1},191:{T:1},192:{T:-1},193:{T:1},194:{T:-1},195:{T:1},196:{T:-1},197:{T:1},198:{T:-1},199:{T:1},200:{T:-1},201:{T:1},202:{T:-1},203:{T:1},204:{T:-1},205:{T:1},206:{T:-1},207:{T:1},208:{T:-1},209:{T:1},210:{T:-1},211:{T:1},212:{T:-1},213:{T:1},214:{T:-1},215:{T:1},216:{T:-1},217:{T:1},218:{T:-1},219:{T:1},220:{T:-1},221:{T:1},222:{T:-1},223:{T:1},224:{T:-1},225:{T:1},226:{T:-1},227:{T:1},228:{T:-1},229:{T:1},230:{T:-1},231:{T:1},232:{T:-1},233:{T:1},234:{T:-1},235:{T:1},236:{T:-1},237:{T:1},238:{T:-1},239:{T:1},240:{T:-1},241:{T:1},242:{T:-1},243:{T:1},244:{T:-1},245:{T:1},246:{T:-1},247:{T:1},248:{T:-1},249:{T:1},250:{T:-1},251:{T:1},252:{T:-1},253:{T:1},254:{T:-1},255:{T:1},256:{T:-1},257:{T:1},258:{T:-1},259:{T:1},260:{T:-1},261:{T:1},262:{T:-1},263:{T:1},264:{T:-1},265:{T:1},266:{T:-1},267:{T:1},268:{T:-1},269:{T:1},270:{T:-1},271:{T:1},272:{T:-1},273:{T:1},274:{T:-1},275:{T:1},276:{T:-1},277:{},278:{T:1},279:{T:-1},280:{T:1},281:{T:-1},282:{T:1},283:{T:1},284:{T:-1},285:{T:1},286:{T:-1},287:{T:1},288:{T:-1},289:{T:1},290:{T:-1},291:{T:1},292:{T:-1},293:{T:1},294:{T:-1},295:{T:1},296:{T:-1},297:{T:1},298:{T:-1},299:{T:1},300:{T:-1},301:{T:1},302:{T:-1},303:{T:1},304:{T:-1},305:{T:1},306:{T:-1},307:{T:1},308:{T:-1},309:{T:1},310:{T:-1},311:{T:1},312:{T:-1},313:{T:-1},314:{T:1},315:{T:-1},316:{T:1},317:{T:-1},318:{T:1},319:{T:-1},320:{T:1},321:{T:-1},322:{T:1},323:{T:-1},324:{T:1},325:{T:-1},326:{T:1},327:{T:-1},328:{T:1},329:{T:-1},330:{T:1},331:{T:-1},332:{T:1},333:{T:-1},334:{T:1},335:{f:parse_BrtMdtinfo},336:{T:-1},337:{f:parse_BrtBeginEsmdb,T:1},338:{T:-1},339:{T:1},340:{T:-1},341:{T:1},342:{T:-1},343:{T:1},344:{T:-1},345:{T:1},346:{T:-1},347:{T:1},348:{T:-1},349:{T:1},350:{T:-1},351:{},352:{},353:{T:1},354:{T:-1},355:{f:parse_RelID},357:{},358:{},359:{},360:{T:1},361:{},362:{f:parse_ExternSheet},363:{},364:{},366:{},367:{},368:{},369:{},370:{},371:{},372:{T:1},373:{T:-1},374:{T:1},375:{T:-1},376:{T:1},377:{T:-1},378:{T:1},379:{T:-1},380:{T:1},381:{T:-1},382:{T:1},383:{T:-1},384:{T:1},385:{T:-1},386:{T:1},387:{T:-1},388:{T:1},389:{T:-1},390:{T:1},391:{T:-1},392:{T:1},393:{T:-1},394:{T:1},395:{T:-1},396:{},397:{},398:{},399:{},400:{},401:{T:1},403:{},404:{},405:{},406:{},407:{},408:{},409:{},410:{},411:{},412:{},413:{},414:{},415:{},416:{},417:{},418:{},419:{},420:{},421:{},422:{T:1},423:{T:1},424:{T:-1},425:{T:-1},426:{f:parse_BrtArrFmla},427:{f:parse_BrtShrFmla},428:{},429:{T:1},430:{T:-1},431:{T:1},432:{T:-1},433:{T:1},434:{T:-1},435:{T:1},436:{T:-1},437:{T:1},438:{T:-1},439:{T:1},440:{T:-1},441:{T:1},442:{T:-1},443:{T:1},444:{T:-1},445:{T:1},446:{T:-1},447:{T:1},448:{T:-1},449:{T:1},450:{T:-1},451:{T:1},452:{T:-1},453:{T:1},454:{T:-1},455:{T:1},456:{T:-1},457:{T:1},458:{T:-1},459:{T:1},460:{T:-1},461:{T:1},462:{T:-1},463:{T:1},464:{T:-1},465:{T:1},466:{T:-1},467:{T:1},468:{T:-1},469:{T:1},470:{T:-1},471:{},472:{},473:{T:1},474:{T:-1},475:{},476:{f:parse_BrtMargins},477:{},478:{},479:{T:1},480:{T:-1},481:{T:1},482:{T:-1},483:{T:1},484:{T:-1},485:{f:parse_BrtWsFmtInfo},486:{T:1},487:{T:-1},488:{T:1},489:{T:-1},490:{T:1},491:{T:-1},492:{T:1},493:{T:-1},494:{f:parse_BrtHLink},495:{T:1},496:{T:-1},497:{T:1},498:{T:-1},499:{},500:{T:1},501:{T:-1},502:{T:1},503:{T:-1},504:{},505:{T:1},506:{T:-1},507:{},508:{T:1},509:{T:-1},510:{T:1},511:{T:-1},512:{},513:{},514:{T:1},515:{T:-1},516:{T:1},517:{T:-1},518:{T:1},519:{T:-1},520:{T:1},521:{T:-1},522:{},523:{},524:{},525:{},526:{},527:{},528:{T:1},529:{T:-1},530:{T:1},531:{T:-1},532:{T:1},533:{T:-1},534:{},535:{},536:{},537:{},538:{T:1},539:{T:-1},540:{T:1},541:{T:-1},542:{T:1},548:{},549:{},550:{f:parse_RelID},551:{},552:{},553:{},554:{T:1},555:{T:-1},556:{T:1},557:{T:-1},558:{T:1},559:{T:-1},560:{T:1},561:{T:-1},562:{},564:{},565:{T:1},566:{T:-1},569:{T:1},570:{T:-1},572:{},573:{T:1},574:{T:-1},577:{},578:{},579:{},580:{},581:{},582:{},583:{},584:{},585:{},586:{},587:{},588:{T:-1},589:{},590:{T:1},591:{T:-1},592:{T:1},593:{T:-1},594:{T:1},595:{T:-1},596:{},597:{T:1},598:{T:-1},599:{T:1},600:{T:-1},601:{T:1},602:{T:-1},603:{T:1},604:{T:-1},605:{T:1},606:{T:-1},607:{},608:{T:1},609:{T:-1},610:{},611:{T:1},612:{T:-1},613:{T:1},614:{T:-1},615:{T:1},616:{T:-1},617:{T:1},618:{T:-1},619:{T:1},620:{T:-1},625:{},626:{T:1},627:{T:-1},628:{T:1},629:{T:-1},630:{T:1},631:{T:-1},632:{f:parse_BrtCommentAuthor},633:{T:1},634:{T:-1},635:{T:1,f:parse_BrtBeginComment},636:{T:-1},637:{f:parse_BrtCommentText},638:{T:1},639:{},640:{T:-1},641:{T:1},642:{T:-1},643:{T:1},644:{},645:{T:-1},646:{T:1},648:{T:1},649:{},650:{T:-1},651:{f:parse_BrtCsProp},652:{},653:{T:1},654:{T:-1},655:{T:1},656:{T:-1},657:{T:1},658:{T:-1},659:{},660:{T:1},661:{},662:{T:-1},663:{},664:{T:1},665:{},666:{T:-1},667:{},668:{},669:{},671:{T:1},672:{T:-1},673:{T:1},674:{T:-1},675:{},676:{},677:{},678:{},679:{},680:{},681:{},1024:{},1025:{},1026:{T:1},1027:{T:-1},1028:{T:1},1029:{T:-1},1030:{},1031:{T:1},1032:{T:-1},1033:{T:1},1034:{T:-1},1035:{},1036:{},1037:{},1038:{T:1},1039:{T:-1},1040:{},1041:{T:1},1042:{T:-1},1043:{},1044:{},1045:{},1046:{T:1},1047:{T:-1},1048:{T:1},1049:{T:-1},1050:{},1051:{T:1},1052:{T:1},1053:{f:parse_BrtDVal14},1054:{T:1},1055:{},1056:{T:1},1057:{T:-1},1058:{T:1},1059:{T:-1},1061:{},1062:{T:1},1063:{T:-1},1064:{T:1},1065:{T:-1},1066:{T:1},1067:{T:-1},1068:{T:1},1069:{T:-1},1070:{T:1},1071:{T:-1},1072:{T:1},1073:{T:-1},1075:{T:1},1076:{T:-1},1077:{T:1},1078:{T:-1},1079:{T:1},1080:{T:-1},1081:{T:1},1082:{T:-1},1083:{T:1},1084:{T:-1},1085:{},1086:{T:1},1087:{T:-1},1088:{T:1},1089:{T:-1},1090:{T:1},1091:{T:-1},1092:{T:1},1093:{T:-1},1094:{T:1},1095:{T:-1},1096:{},1097:{T:1},1098:{},1099:{T:-1},1100:{T:1},1101:{T:-1},1102:{},1103:{},1104:{},1105:{},1111:{},1112:{},1113:{T:1},1114:{T:-1},1115:{T:1},1116:{T:-1},1117:{},1118:{T:1},1119:{T:-1},1120:{T:1},1121:{T:-1},1122:{T:1},1123:{T:-1},1124:{T:1},1125:{T:-1},1126:{},1128:{T:1},1129:{T:-1},1130:{},1131:{T:1},1132:{T:-1},1133:{T:1},1134:{T:-1},1135:{T:1},1136:{T:-1},1137:{T:1},1138:{T:-1},1139:{T:1},1140:{T:-1},1141:{},1142:{T:1},1143:{T:-1},1144:{T:1},1145:{T:-1},1146:{},1147:{T:1},1148:{T:-1},1149:{T:1},1150:{T:-1},1152:{T:1},1153:{T:-1},1154:{T:-1},1155:{T:-1},1156:{T:-1},1157:{T:1},1158:{T:-1},1159:{T:1},1160:{T:-1},1161:{T:1},1162:{T:-1},1163:{T:1},1164:{T:-1},1165:{T:1},1166:{T:-1},1167:{T:1},1168:{T:-1},1169:{T:1},1170:{T:-1},1171:{},1172:{T:1},1173:{T:-1},1177:{},1178:{T:1},1180:{},1181:{},1182:{},2048:{T:1},2049:{T:-1},2050:{},2051:{T:1},2052:{T:-1},2053:{},2054:{},2055:{T:1},2056:{T:-1},2057:{T:1},2058:{T:-1},2060:{},2067:{},2068:{T:1},2069:{T:-1},2070:{},2071:{},2072:{T:1},2073:{T:-1},2075:{},2076:{},2077:{T:1},2078:{T:-1},2079:{},2080:{T:1},2081:{T:-1},2082:{},2083:{T:1},2084:{T:-1},2085:{T:1},2086:{T:-1},2087:{T:1},2088:{T:-1},2089:{T:1},2090:{T:-1},2091:{},2092:{},2093:{T:1},2094:{T:-1},2095:{},2096:{T:1},2097:{T:-1},2098:{T:1},2099:{T:-1},2100:{T:1},2101:{T:-1},2102:{},2103:{T:1},2104:{T:-1},2105:{},2106:{T:1},2107:{T:-1},2108:{},2109:{T:1},2110:{T:-1},2111:{T:1},2112:{T:-1},2113:{T:1},2114:{T:-1},2115:{},2116:{},2117:{},2118:{T:1},2119:{T:-1},2120:{},2121:{T:1},2122:{T:-1},2123:{T:1},2124:{T:-1},2125:{},2126:{T:1},2127:{T:-1},2128:{},2129:{T:1},2130:{T:-1},2131:{T:1},2132:{T:-1},2133:{T:1},2134:{},2135:{},2136:{},2137:{T:1},2138:{T:-1},2139:{T:1},2140:{T:-1},2141:{},3072:{},3073:{},4096:{T:1},4097:{T:-1},5002:{T:1},5003:{T:-1},5081:{T:1},5082:{T:-1},5083:{},5084:{T:1},5085:{T:-1},5086:{T:1},5087:{T:-1},5088:{},5089:{},5090:{},5092:{T:1},5093:{T:-1},5094:{},5095:{T:1},5096:{T:-1},5097:{},5099:{},65535:{n:""}},XLSRecordEnum={6:{f:parse_Formula},10:{f:parsenoop2},12:{f:parseuint16}
272,13:{f:parseuint16},14:{f:parsebool},15:{f:parsebool},16:{f:parse_Xnum},17:{f:parsebool},18:{f:parsebool},19:{f:parseuint16},20:{f:parse_XLHeaderFooter},21:{f:parse_XLHeaderFooter},23:{f:parse_ExternSheet},24:{f:parse_Lbl},25:{f:parsebool},26:{},27:{},28:{f:parse_Note},29:{},34:{f:parsebool},35:{f:parse_ExternName},38:{f:parse_Xnum},39:{f:parse_Xnum},40:{f:parse_Xnum},41:{f:parse_Xnum},42:{f:parsebool},43:{f:parsebool},47:{f:parse_FilePass},49:{f:parse_Font},51:{f:parseuint16},60:{},61:{f:parse_Window1},64:{f:parsebool},65:{f:parse_Pane},66:{f:parseuint16},77:{},80:{},81:{},82:{},85:{f:parseuint16},89:{},90:{},91:{},92:{f:parse_WriteAccess},93:{f:parse_Obj},94:{},95:{f:parsebool},96:{},97:{},99:{f:parsebool},125:{f:parse_ColInfo},128:{f:parse_Guts},129:{f:parse_WsBool},130:{f:parseuint16},131:{f:parsebool},132:{f:parsebool},133:{f:parse_BoundSheet8},134:{},140:{f:parse_Country},141:{f:parseuint16},144:{},146:{f:parse_Palette},151:{},152:{},153:{},154:{},155:{},156:{f:parseuint16},157:{},158:{},160:{f:parse_Scl},161:{f:parse_Setup},174:{},175:{},176:{},177:{},178:{},180:{},181:{},182:{},184:{},185:{},189:{f:parse_MulRk},190:{f:parse_MulBlank},193:{f:parsenoop2},197:{},198:{},199:{},200:{},201:{},202:{f:parsebool},203:{},204:{},205:{},206:{},207:{},208:{},209:{},210:{},211:{},213:{},215:{},216:{},217:{},218:{f:parseuint16},220:{},221:{f:parsebool},222:{},224:{f:parse_XF},225:{f:parse_InterfaceHdr},226:{f:parsenoop2},227:{},229:{f:parse_MergeCells},233:{},235:{},236:{},237:{},239:{},240:{},241:{},242:{},244:{},245:{},246:{},247:{},248:{},249:{},251:{},252:{f:parse_SST},253:{f:parse_LabelSst},255:{f:parse_ExtSST},256:{},259:{},290:{},311:{},312:{},315:{},317:{f:parseuint16a},318:{},319:{},320:{},330:{},331:{},333:{},334:{},335:{},336:{},337:{},338:{},339:{},340:{},351:{},352:{f:parsebool},353:{f:parsenoop2},401:{},402:{},403:{},404:{},405:{},406:{},407:{},408:{},425:{},426:{},427:{},428:{},429:{},430:{f:parse_SupBook},431:{f:parsebool},432:{},433:{},434:{},437:{},438:{f:parse_TxO},439:{f:parsebool},440:{f:parse_HLink},441:{},442:{f:parse_XLUnicodeString},443:{},444:{f:parseuint16},445:{},446:{},448:{f:parsenoop2},449:{f:parse_RecalcId,r:2},450:{f:parsenoop2},512:{f:parse_Dimensions},513:{f:parse_Blank},515:{f:parse_Number},516:{f:parse_Label},517:{f:parse_BoolErr},519:{f:parse_String},520:{f:parse_Row},523:{},545:{f:parse_Array},549:{f:parse_DefaultRowHeight},566:{},574:{f:parse_Window2},638:{f:parse_RK},659:{},1048:{},1054:{f:parse_Format},1084:{},1212:{f:parse_ShrFmla},2048:{f:parse_HLinkTooltip},2049:{},2050:{},2051:{},2052:{},2053:{},2054:{},2055:{},2056:{},2057:{f:parse_BOF},2058:{},2059:{},2060:{},2061:{},2062:{},2063:{},2064:{},2066:{},2067:{},2128:{},2129:{},2130:{},2131:{},2132:{},2133:{},2134:{},2135:{},2136:{},2137:{},2138:{},2146:{},2147:{r:12},2148:{},2149:{},2150:{},2151:{f:parsenoop2},2152:{},2154:{},2155:{},2156:{},2161:{},2162:{},2164:{},2165:{},2166:{},2167:{},2168:{},2169:{},2170:{},2171:{},2172:{f:parse_XFCRC,r:12},2173:{f:parse_XFExt,r:12},2174:{},2175:{},2180:{},2181:{},2182:{},2183:{},2184:{},2185:{},2186:{},2187:{},2188:{f:parsebool,r:12},2189:{},2190:{r:12},2191:{},2192:{},2194:{},2195:{},2196:{f:parse_NameCmt,r:12},2197:{},2198:{f:parse_Theme,r:12},2199:{},2200:{},2201:{},2202:{f:parse_MTRSettings,r:12},2203:{f:parsenoop2},2204:{},2205:{},2206:{},2207:{},2211:{f:parse_ForceFullCalculation},2212:{},2213:{},2214:{},2215:{},4097:{},4098:{},4099:{},4102:{},4103:{},4105:{},4106:{},4107:{},4108:{},4109:{},4116:{},4117:{},4118:{},4119:{},4120:{},4121:{},4122:{},4123:{},4124:{},4125:{},4126:{},4127:{},4128:{},4129:{},4130:{},4132:{},4133:{},4134:{f:parseuint16},4135:{},4146:{},4147:{},4148:{},4149:{},4154:{},4156:{},4157:{},4158:{},4159:{},4160:{},4161:{},4163:{},4164:{f:parse_ShtProps},4165:{},4166:{},4168:{},4170:{},4171:{},4174:{},4175:{},4176:{},4177:{},4187:{},4188:{f:parse_ClrtClient},4189:{},4191:{},4192:{},4193:{},4194:{},4195:{},4196:{},4197:{},4198:{},4199:{},4200:{},0:{f:parse_Dimensions},1:{},2:{f:parse_BIFF2INT},3:{f:parse_BIFF2NUM},4:{f:parse_BIFF2STR},5:{f:parse_BoolErr},7:{f:parse_BIFF2STRING},8:{},9:{f:parse_BOF},11:{},22:{f:parseuint16},30:{f:parse_BIFF2Format},31:{},32:{},33:{f:parse_Array},36:{},37:{f:parse_DefaultRowHeight},50:{f:parse_BIFF2FONTXTRA},62:{},52:{},67:{},68:{f:parseuint16},69:{},86:{},126:{},127:{f:parse_ImData},135:{},136:{},137:{},145:{},148:{},149:{},150:{},169:{},171:{},188:{}
vendor: 46,539 bytes, lines 272-308
272,191:{},192:{},194:{},195:{},214:{f:parse_RString},223:{},234:{},354:{},421:{},518:{f:parse_Formula},521:{f:parse_BOF},536:{f:parse_Lbl},547:{f:parse_ExternName},561:{},579:{},1030:{f:parse_Formula},1033:{f:parse_BOF},1091:{},2157:{},2163:{},2177:{},2240:{},2241:{},2242:{},2243:{},2244:{},2245:{},2246:{},2247:{},2248:{},2249:{},2250:{},2251:{},2262:{r:12},29282:{}};function write_biff_rec(o,u,T,S){var E=u;if(!isNaN(E)){var C=S||(T||[]).length||0,_=o.next(4);_.write_shift(2,E),_.write_shift(2,C),C>0&&is_buf(T)&&o.push(T)}}function write_biff_continue(o,u,T,S){var E=(T||[]).length||0;if(E<=8224)return write_biff_rec(o,u,T,E);var C=u;if(!isNaN(C)){for(var _=T.parts||[],P=0,R=0,I=0;I+(_[P]||8224)<=8224;)I+=_[P]||8224,P++;var L=o.next(4);for(L.write_shift(2,C),L.write_shift(2,I),o.push(T.slice(R,R+I)),R+=I;R<E;){for(L=o.next(4),L.write_shift(2,60),I=0;I+(_[P]||8224)<=8224;)I+=_[P]||8224,P++;L.write_shift(2,I),o.push(T.slice(R,R+I)),R+=I}}}function write_BIFF2Cell(o,u,T){return o||(o=new_buf(7)),o.write_shift(2,u),o.write_shift(2,T),o.write_shift(2,0),o.write_shift(1,0),o}function write_BIFF2BERR(o,u,T,S){var E=new_buf(9);return write_BIFF2Cell(E,o,u),write_Bes(T,S||"b",E),E}function write_BIFF2LABEL(o,u,T){var S=new_buf(8+2*T.length);return write_BIFF2Cell(S,o,u),S.write_shift(1,T.length),S.write_shift(T.length,T,"sbcs"),S.l<S.length?S.slice(0,S.l):S}function write_ws_biff2_cell(o,u,T,S){if(u.v!=null)switch(u.t){case"d":case"n":var E=u.t=="d"?datenum(parseDate(u.v)):u.v;E==(E|0)&&E>=0&&E<65536?write_biff_rec(o,2,write_BIFF2INT(T,S,E)):write_biff_rec(o,3,write_BIFF2NUM(T,S,E));return;case"b":case"e":write_biff_rec(o,5,write_BIFF2BERR(T,S,u.v,u.t));return;case"s":case"str":write_biff_rec(o,4,write_BIFF2LABEL(T,S,(u.v||"").slice(0,255)));return}write_biff_rec(o,1,write_BIFF2Cell(null,T,S))}function write_ws_biff2(o,u,T,S){var E=Array.isArray(u),C=safe_decode_range(u["!ref"]||"A1"),_,P="",R=[];if(C.e.c>255||C.e.r>16383){if(S.WTF)throw new Error("Range "+(u["!ref"]||"A1")+" exceeds format limit A1:IV16384");C.e.c=Math.min(C.e.c,255),C.e.r=Math.min(C.e.c,16383),_=encode_range(C)}for(var I=C.s.r;I<=C.e.r;++I){P=encode_row(I);for(var L=C.s.c;L<=C.e.c;++L){I===C.s.r&&(R[L]=encode_col(L)),_=R[L]+P;var j=E?(u[I]||[])[L]:u[_];j&&write_ws_biff2_cell(o,j,I,L)}}}function write_biff2_buf(o,u){for(var T=u||{},S=buf_array(),E=0,C=0;C<o.SheetNames.length;++C)o.SheetNames[C]==T.sheet&&(E=C);if(E==0&&T.sheet&&o.SheetNames[0]!=T.sheet)throw new Error("Sheet not found: "+T.sheet);return write_biff_rec(S,T.biff==4?1033:T.biff==3?521:9,write_BOF(o,16,T)),write_ws_biff2(S,o.Sheets[o.SheetNames[E]],E,T),write_biff_rec(S,10),S.end()}function write_FONTS_biff8(o,u,T){write_biff_rec(o,49,write_Font({sz:12,name:"Arial"},T))}function write_FMTS_biff8(o,u,T){u&&[[5,8],[23,26],[41,44],[50,392]].forEach(function(S){for(var E=S[0];E<=S[1];++E)u[E]!=null&&write_biff_rec(o,1054,write_Format(E,u[E],T))})}function write_FEAT(o,u){var T=new_buf(19);T.write_shift(4,2151),T.write_shift(4,0),T.write_shift(4,0),T.write_shift(2,3),T.write_shift(1,1),T.write_shift(4,0),write_biff_rec(o,2151,T),T=new_buf(39),T.write_shift(4,2152),T.write_shift(4,0),T.write_shift(4,0),T.write_shift(2,3),T.write_shift(1,0),T.write_shift(4,0),T.write_shift(2,1),T.write_shift(4,4),T.write_shift(2,0),write_Ref8U(safe_decode_range(u["!ref"]||"A1"),T),T.write_shift(4,4),write_biff_rec(o,2152,T)}function write_CELLXFS_biff8(o,u){for(var T=0;T<16;++T)write_biff_rec(o,224,write_XF({numFmtId:0,style:!0},0,u));u.cellXfs.forEach(function(S){write_biff_rec(o,224,write_XF(S,0,u))})}function write_ws_biff8_hlinks(o,u){for(var T=0;T<u["!links"].length;++T){var S=u["!links"][T];write_biff_rec(o,440,write_HLink(S)),S[1].Tooltip&&write_biff_rec(o,2048,write_HLinkTooltip(S))}delete u["!links"]}function write_ws_cols_biff8(o,u){if(u){var T=0;u.forEach(function(S,E){++T<=256&&S&&write_biff_rec(o,125,write_ColInfo(col_obj_w(E,S),E))})}}function write_ws_biff8_cell(o,u,T,S,E){var C=16+get_cell_style(E.cellXfs,u,E);if(u.v==null&&!u.bf){write_biff_rec(o,513,write_XLSCell(T,S,C));return}if(u.bf)write_biff_rec(o,6,write_Formula(u,T,S,E,C));else switch(u.t){case"d":case"n":var _=u.t=="d"?datenum(parseDate(u.v)):u.v;write_biff_rec(o,515,write_Number(T,S,_,C));break;case"b":case"e":write_biff_rec(o,517,write_BoolErr(T,S,u.v,C,E,u.t));break;case"s":case"str":if(E.bookSST){var P=get_sst_id(E.Strings,u.v,E.revStrings);write_biff_rec(o,253,write_LabelSst(T,S,P,C))}else write_biff_rec(o,516,write_Label(T,S,(u.v||"").slice(0,255),C,E));break;default:write_biff_rec(o,513,write_XLSCell(T,S,C))}}function write_ws_biff8(o,u,T){var S=buf_array(),E=T.SheetNames[o],C=T.Sheets[E]||{},_=(T||{}).Workbook||{},P=(_.Sheets||[])[o]||{},R=Array.isArray(C),I=u.biff==8,L,j="",M=[],D=safe_decode_range(C["!ref"]||"A1"),F=I?65536:16384;if(D.e.c>255||D.e.r>=F){if(u.WTF)throw new Error("Range "+(C["!ref"]||"A1")+" exceeds format limit A1:IV16384");D.e.c=Math.min(D.e.c,255),D.e.r=Math.min(D.e.c,F-1)}write_biff_rec(S,2057,write_BOF(T,16,u)),write_biff_rec(S,13,writeuint16(1)),write_biff_rec(S,12,writeuint16(100)),write_biff_rec(S,15,writebool(!0)),write_biff_rec(S,17,writebool(!1)),write_biff_rec(S,16,write_Xnum(.001)),write_biff_rec(S,95,writebool(!0)),write_biff_rec(S,42,writebool(!1)),write_biff_rec(S,43,writebool(!1)),write_biff_rec(S,130,writeuint16(1)),write_biff_rec(S,128,write_Guts()),write_biff_rec(S,131,writebool(!1)),write_biff_rec(S,132,writebool(!1)),I&&write_ws_cols_biff8(S,C["!cols"]),write_biff_rec(S,512,write_Dimensions(D,u)),I&&(C["!links"]=[]);for(var N=D.s.r;N<=D.e.r;++N){j=encode_row(N);for(var G=D.s.c;G<=D.e.c;++G){N===D.s.r&&(M[G]=encode_col(G)),L=M[G]+j;var B=R?(C[N]||[])[G]:C[L];B&&(write_ws_biff8_cell(S,B,N,G,u),I&&B.l&&C["!links"].push([L,B.l]))}}var H=P.CodeName||P.name||E;return I&&write_biff_rec(S,574,write_Window2((_.Views||[])[0])),I&&(C["!merges"]||[]).length&&write_biff_rec(S,229,write_MergeCells(C["!merges"])),I&&write_ws_biff8_hlinks(S,C),write_biff_rec(S,442,write_XLUnicodeString(H)),I&&write_FEAT(S,C),write_biff_rec(S,10),S.end()}function write_biff8_global(o,u,T){var S=buf_array(),E=(o||{}).Workbook||{},C=E.Sheets||[],_=E.WBProps||{},P=T.biff==8,R=T.biff==5;if(write_biff_rec(S,2057,write_BOF(o,5,T)),T.bookType=="xla"&&write_biff_rec(S,135),write_biff_rec(S,225,P?writeuint16(1200):null),write_biff_rec(S,193,writezeroes(2)),R&&write_biff_rec(S,191),R&&write_biff_rec(S,192),write_biff_rec(S,226),write_biff_rec(S,92,write_WriteAccess("SheetJS",T)),write_biff_rec(S,66,writeuint16(P?1200:1252)),P&&write_biff_rec(S,353,writeuint16(0)),P&&write_biff_rec(S,448),write_biff_rec(S,317,write_RRTabId(o.SheetNames.length)),P&&o.vbaraw&&write_biff_rec(S,211),P&&o.vbaraw){var I=_.CodeName||"ThisWorkbook";write_biff_rec(S,442,write_XLUnicodeString(I))}write_biff_rec(S,156,writeuint16(17)),write_biff_rec(S,25,writebool(!1)),write_biff_rec(S,18,writebool(!1)),write_biff_rec(S,19,writeuint16(0)),P&&write_biff_rec(S,431,writebool(!1)),P&&write_biff_rec(S,444,writeuint16(0)),write_biff_rec(S,61,write_Window1()),write_biff_rec(S,64,writebool(!1)),write_biff_rec(S,141,writeuint16(0)),write_biff_rec(S,34,writebool(safe1904(o)=="true")),write_biff_rec(S,14,writebool(!0)),P&&write_biff_rec(S,439,writebool(!1)),write_biff_rec(S,218,writeuint16(0)),write_FONTS_biff8(S,o,T),write_FMTS_biff8(S,o.SSF,T),write_CELLXFS_biff8(S,T),P&&write_biff_rec(S,352,writebool(!1));var L=S.end(),j=buf_array();P&&write_biff_rec(j,140,write_Country()),P&&T.Strings&&write_biff_continue(j,252,write_SST(T.Strings)),write_biff_rec(j,10);var M=j.end(),D=buf_array(),F=0,N=0;for(N=0;N<o.SheetNames.length;++N)F+=(P?12:11)+(P?2:1)*o.SheetNames[N].length;var G=L.length+F+M.length;for(N=0;N<o.SheetNames.length;++N){var B=C[N]||{};write_biff_rec(D,133,write_BoundSheet8({pos:G,hs:B.Hidden||0,dt:0,name:o.SheetNames[N]},T)),G+=u[N].length}var H=D.end();if(F!=H.length)throw new Error("BS8 "+F+" != "+H.length);var O=[];return L.length&&O.push(L),H.length&&O.push(H),M.length&&O.push(M),bconcat(O)}function write_biff8_buf(o,u){var T=u||{},S=[];o&&!o.SSF&&(o.SSF=dup(table_fmt)),o&&o.SSF&&(make_ssf(),SSF_load_table(o.SSF),T.revssf=evert_num(o.SSF),T.revssf[o.SSF[65535]]=0,T.ssf=o.SSF),T.Strings=[],T.Strings.Count=0,T.Strings.Unique=0,fix_write_opts(T),T.cellXfs=[],get_cell_style(T.cellXfs,{},{revssf:{General:0}}),o.Props||(o.Props={});for(var E=0;E<o.SheetNames.length;++E)S[S.length]=write_ws_biff8(E,T,o);return S.unshift(write_biff8_global(o,S,T)),bconcat(S)}function write_biff_buf(o,u){for(var T=0;T<=o.SheetNames.length;++T){var S=o.Sheets[o.SheetNames[T]];if(!(!S||!S["!ref"])){var E=decode_range(S["!ref"]);E.e.c>255&&typeof console<"u"&&console.error&&console.error("Worksheet '"+o.SheetNames[T]+"' extends beyond column IV (255).  Data may be lost.")}}var C=u||{};switch(C.biff||2){case 8:case 5:return write_biff8_buf(o,u);case 4:case 3:case 2:return write_biff2_buf(o,u)}throw new Error("invalid type "+C.bookType+" for BIFF")}function html_to_sheet(o,u){var T=u||{},S=T.dense?[]:{};o=o.replace(/<!--.*?-->/g,"");var E=o.match(/<table/i);if(!E)throw new Error("Invalid HTML: could not find <table>");var C=o.match(/<\/table/i),_=E.index,P=C&&C.index||o.length,R=split_regex(o.slice(_,P),/(:?<tr[^>]*>)/i,"<tr>"),I=-1,L=0,j=0,M=0,D={s:{r:1e7,c:1e7},e:{r:0,c:0}},F=[];for(_=0;_<R.length;++_){var N=R[_].trim(),G=N.slice(0,3).toLowerCase();if(G=="<tr"){if(++I,T.sheetRows&&T.sheetRows<=I){--I;break}L=0;continue}if(!(G!="<td"&&G!="<th")){var B=N.split(/<\/t[dh]>/i);for(P=0;P<B.length;++P){var H=B[P].trim();if(H.match(/<t[dh]/i)){for(var O=H,V=0;O.charAt(0)=="<"&&(V=O.indexOf(">"))>-1;)O=O.slice(V+1);for(var U=0;U<F.length;++U){var W=F[U];W.s.c==L&&W.s.r<I&&I<=W.e.r&&(L=W.e.c+1,U=-1)}var K=parsexmltag(H.slice(0,H.indexOf(">")));M=K.colspan?+K.colspan:1,((j=+K.rowspan)>1||M>1)&&F.push({s:{r:I,c:L},e:{r:I+(j||1)-1,c:L+M-1}});var Y=K.t||K["data-t"]||"";if(!O.length){L+=M;continue}if(O=htmldecode(O),D.s.r>I&&(D.s.r=I),D.e.r<I&&(D.e.r=I),D.s.c>L&&(D.s.c=L),D.e.c<L&&(D.e.c=L),!O.length){L+=M;continue}var ee={t:"s",v:O};T.raw||!O.trim().length||Y=="s"||(O==="TRUE"?ee={t:"b",v:!0}:O==="FALSE"?ee={t:"b",v:!1}:isNaN(fuzzynum(O))?isNaN(fuzzydate(O).getDate())||(ee={t:"d",v:parseDate(O)},T.cellDates||(ee={t:"n",v:datenum(ee.v)}),ee.z=T.dateNF||table_fmt[14]):ee={t:"n",v:fuzzynum(O)}),T.dense?(S[I]||(S[I]=[]),S[I][L]=ee):S[encode_cell({r:I,c:L})]=ee,L+=M}}}}return S["!ref"]=encode_range(D),F.length&&(S["!merges"]=F),S}function make_html_row(o,u,T,S){for(var E=o["!merges"]||[],C=[],_=u.s.c;_<=u.e.c;++_){for(var P=0,R=0,I=0;I<E.length;++I)if(!(E[I].s.r>T||E[I].s.c>_)&&!(E[I].e.r<T||E[I].e.c<_)){if(E[I].s.r<T||E[I].s.c<_){P=-1;break}P=E[I].e.r-E[I].s.r+1,R=E[I].e.c-E[I].s.c+1;break}if(!(P<0)){var L=encode_cell({r:T,c:_}),j=S.dense?(o[T]||[])[_]:o[L],M=j&&j.v!=null&&(j.h||escapehtml(j.w||(format_cell(j),j.w)||""))||"",D={};P>1&&(D.rowspan=P),R>1&&(D.colspan=R),S.editable?M='<span contenteditable="true">'+M+"</span>":j&&(D["data-t"]=j&&j.t||"z",j.v!=null&&(D["data-v"]=j.v),j.z!=null&&(D["data-z"]=j.z),j.l&&(j.l.Target||"#").charAt(0)!="#"&&(M='<a href="'+j.l.Target+'">'+M+"</a>")),D.id=(S.id||"sjs")+"-"+L,C.push(writextag("td",M,D))}}var F="<tr>";return F+C.join("")+"</tr>"}var HTML_BEGIN='<html><head><meta charset="utf-8"/><title>SheetJS Table Export</title></head><body>',HTML_END="</body></html>";function html_to_workbook(o,u){var T=o.match(/<table[\s\S]*?>[\s\S]*?<\/table>/gi);if(!T||T.length==0)throw new Error("Invalid HTML: could not find <table>");if(T.length==1)return sheet_to_workbook(html_to_sheet(T[0],u),u);var S=book_new();return T.forEach(function(E,C){book_append_sheet(S,html_to_sheet(E,u),"Sheet"+(C+1))}),S}function make_html_preamble(o,u,T){var S=[];return S.join("")+"<table"+(T&&T.id?' id="'+T.id+'"':"")+">"}function sheet_to_html(o,u){var T=u||{},S=T.header!=null?T.header:HTML_BEGIN,E=T.footer!=null?T.footer:HTML_END,C=[S],_=decode_range(o["!ref"]);T.dense=Array.isArray(o),C.push(make_html_preamble(o,_,T));for(var P=_.s.r;P<=_.e.r;++P)C.push(make_html_row(o,_,P,T));return C.push("</table>"+E),C.join("")}function sheet_add_dom(o,u,T){var S=T||{},E=0,C=0;if(S.origin!=null)if(typeof S.origin=="number")E=S.origin;else{var _=typeof S.origin=="string"?decode_cell(S.origin):S.origin;E=_.r,C=_.c}var P=u.getElementsByTagName("tr"),R=Math.min(S.sheetRows||1e7,P.length),I={s:{r:0,c:0},e:{r:E,c:C}};if(o["!ref"]){var L=decode_range(o["!ref"]);I.s.r=Math.min(I.s.r,L.s.r),I.s.c=Math.min(I.s.c,L.s.c),I.e.r=Math.max(I.e.r,L.e.r),I.e.c=Math.max(I.e.c,L.e.c),E==-1&&(I.e.r=E=L.e.r+1)}var j=[],M=0,D=o["!rows"]||(o["!rows"]=[]),F=0,N=0,G=0,B=0,H=0,O=0;for(o["!cols"]||(o["!cols"]=[]);F<P.length&&N<R;++F){var V=P[F];if(is_dom_element_hidden(V)){if(S.display)continue;D[N]={hidden:!0}}var U=V.children;for(G=B=0;G<U.length;++G){var W=U[G];if(!(S.display&&is_dom_element_hidden(W))){var K=W.hasAttribute("data-v")?W.getAttribute("data-v"):W.hasAttribute("v")?W.getAttribute("v"):htmldecode(W.innerHTML),Y=W.getAttribute("data-z")||W.getAttribute("z");for(M=0;M<j.length;++M){var ee=j[M];ee.s.c==B+C&&ee.s.r<N+E&&N+E<=ee.e.r&&(B=ee.e.c+1-C,M=-1)}O=+W.getAttribute("colspan")||1,((H=+W.getAttribute("rowspan")||1)>1||O>1)&&j.push({s:{r:N+E,c:B+C},e:{r:N+E+(H||1)-1,c:B+C+(O||1)-1}});var oe={t:"s",v:K},se=W.getAttribute("data-t")||W.getAttribute("t")||"";K!=null&&(K.length==0?oe.t=se||"z":S.raw||K.trim().length==0||se=="s"||(K==="TRUE"?oe={t:"b",v:!0}:K==="FALSE"?oe={t:"b",v:!1}:isNaN(fuzzynum(K))?isNaN(fuzzydate(K).getDate())||(oe={t:"d",v:parseDate(K)},S.cellDates||(oe={t:"n",v:datenum(oe.v)}),oe.z=S.dateNF||table_fmt[14]):oe={t:"n",v:fuzzynum(K)})),oe.z===void 0&&Y!=null&&(oe.z=Y);var Q="",ie=W.getElementsByTagName("A");if(ie&&ie.length)for(var ae=0;ae<ie.length&&!(ie[ae].hasAttribute("href")&&(Q=ie[ae].getAttribute("href"),Q.charAt(0)!="#"));++ae);Q&&Q.charAt(0)!="#"&&(oe.l={Target:Q}),S.dense?(o[N+E]||(o[N+E]=[]),o[N+E][B+C]=oe):o[encode_cell({c:B+C,r:N+E})]=oe,I.e.c<B+C&&(I.e.c=B+C),B+=O}}++N}return j.length&&(o["!merges"]=(o["!merges"]||[]).concat(j)),I.e.r=Math.max(I.e.r,N-1+E),o["!ref"]=encode_range(I),N>=R&&(o["!fullref"]=encode_range((I.e.r=P.length-F+N-1+E,I))),o}function parse_dom_table(o,u){var T=u||{},S=T.dense?[]:{};return sheet_add_dom(S,o,u)}function table_to_book(o,u){return sheet_to_workbook(parse_dom_table(o,u),u)}function is_dom_element_hidden(o){var u="",T=get_get_computed_style_function(o);return T&&(u=T(o).getPropertyValue("display")),u||(u=o.style&&o.style.display),u==="none"}function get_get_computed_style_function(o){return o.ownerDocument.defaultView&&typeof o.ownerDocument.defaultView.getComputedStyle=="function"?o.ownerDocument.defaultView.getComputedStyle:typeof getComputedStyle=="function"?getComputedStyle:null}function parse_text_p(o){var u=o.replace(/[\t\r\n]/g," ").trim().replace(/ +/g," ").replace(/<text:s\/>/g," ").replace(/<text:s text:c="(\d+)"\/>/g,function(S,E){return Array(parseInt(E,10)+1).join(" ")}).replace(/<text:tab[^>]*\/>/g,"	").replace(/<text:line-break\/>/g,`
273`),T=unescapexml(u.replace(/<[^>]*>/g,""));return[T]}var number_formats_ods={day:["d","dd"],month:["m","mm"],year:["y","yy"],hours:["h","hh"],minutes:["m","mm"],seconds:["s","ss"],"am-pm":["A/P","AM/PM"],"day-of-week":["ddd","dddd"],era:["e","ee"],quarter:["\\Qm",'m\\"th quarter"']};function parse_content_xml(o,u){var T=u||{},S=xlml_normalize(o),E=[],C,_,P={name:""},R="",I=0,L,j,M={},D=[],F=T.dense?[]:{},N,G,B={value:""},H="",O=0,V=[],U=-1,W=-1,K={s:{r:1e6,c:1e7},e:{r:0,c:0}},Y=0,ee={},oe=[],se={},Q=0,ie=0,ae=[],re=1,J=1,te=[],Z={Names:[]},X={},de=["",""],he=[],ne={},ue="",ce=0,fe=!1,ve=!1,Te=0;for(xlmlregex.lastIndex=0,S=S.replace(/<!--([\s\S]*?)-->/mg,"").replace(/<!DOCTYPE[^\[]*\[[^\]]*\]>/gm,"");N=xlmlregex.exec(S);)switch(N[3]=N[3].replace(/_.*$/,"")){case"table":case"工作表":N[1]==="/"?(K.e.c>=K.s.c&&K.e.r>=K.s.r?F["!ref"]=encode_range(K):F["!ref"]="A1:A1",T.sheetRows>0&&T.sheetRows<=K.e.r&&(F["!fullref"]=F["!ref"],K.e.r=T.sheetRows-1,F["!ref"]=encode_range(K)),oe.length&&(F["!merges"]=oe),ae.length&&(F["!rows"]=ae),L.name=L.名称||L.name,typeof JSON<"u"&&JSON.stringify(L),D.push(L.name),M[L.name]=F,ve=!1):N[0].charAt(N[0].length-2)!=="/"&&(L=parsexmltag(N[0],!1),U=W=-1,K.s.r=K.s.c=1e7,K.e.r=K.e.c=0,F=T.dense?[]:{},oe=[],ae=[],ve=!0);break;case"table-row-group":N[1]==="/"?--Y:++Y;break;case"table-row":case"行":if(N[1]==="/"){U+=re,re=1;break}if(j=parsexmltag(N[0],!1),j.行号?U=j.行号-1:U==-1&&(U=0),re=+j["number-rows-repeated"]||1,re<10)for(Te=0;Te<re;++Te)Y>0&&(ae[U+Te]={level:Y});W=-1;break;case"covered-table-cell":N[1]!=="/"&&++W,T.sheetStubs&&(T.dense?(F[U]||(F[U]=[]),F[U][W]={t:"z"}):F[encode_cell({r:U,c:W})]={t:"z"}),H="",V=[];break;case"table-cell":case"数据":if(N[0].charAt(N[0].length-2)==="/")++W,B=parsexmltag(N[0],!1),J=parseInt(B["number-columns-repeated"]||"1",10),G={t:"z",v:null},B.formula&&T.cellFormula!=!1&&(G.f=ods_to_csf_formula(unescapexml(B.formula))),(B.数据类型||B["value-type"])=="string"&&(G.t="s",G.v=unescapexml(B["string-value"]||""),T.dense?(F[U]||(F[U]=[]),F[U][W]=G):F[encode_cell({r:U,c:W})]=G),W+=J-1;else if(N[1]!=="/"){++W,H="",O=0,V=[],J=1;var Se=re?U+re-1:U;if(W>K.e.c&&(K.e.c=W),W<K.s.c&&(K.s.c=W),U<K.s.r&&(K.s.r=U),Se>K.e.r&&(K.e.r=Se),B=parsexmltag(N[0],!1),he=[],ne={},G={t:B.数据类型||B["value-type"],v:null},T.cellFormula)if(B.formula&&(B.formula=unescapexml(B.formula)),B["number-matrix-columns-spanned"]&&B["number-matrix-rows-spanned"]&&(Q=parseInt(B["number-matrix-rows-spanned"],10)||0,ie=parseInt(B["number-matrix-columns-spanned"],10)||0,se={s:{r:U,c:W},e:{r:U+Q-1,c:W+ie-1}},G.F=encode_range(se),te.push([se,G.F])),B.formula)G.f=ods_to_csf_formula(B.formula);else for(Te=0;Te<te.length;++Te)U>=te[Te][0].s.r&&U<=te[Te][0].e.r&&W>=te[Te][0].s.c&&W<=te[Te][0].e.c&&(G.F=te[Te][1]);switch((B["number-columns-spanned"]||B["number-rows-spanned"])&&(Q=parseInt(B["number-rows-spanned"],10)||0,ie=parseInt(B["number-columns-spanned"],10)||0,se={s:{r:U,c:W},e:{r:U+Q-1,c:W+ie-1}},oe.push(se)),B["number-columns-repeated"]&&(J=parseInt(B["number-columns-repeated"],10)),G.t){case"boolean":G.t="b",G.v=parsexmlbool(B["boolean-value"]);break;case"float":G.t="n",G.v=parseFloat(B.value);break;case"percentage":G.t="n",G.v=parseFloat(B.value);break;case"currency":G.t="n",G.v=parseFloat(B.value);break;case"date":G.t="d",G.v=parseDate(B["date-value"]),T.cellDates||(G.t="n",G.v=datenum(G.v)),G.z="m/d/yy";break;case"time":G.t="n",G.v=parse_isodur(B["time-value"])/86400,T.cellDates&&(G.t="d",G.v=numdate(G.v)),G.z="HH:MM:SS";break;case"number":G.t="n",G.v=parseFloat(B.数据数值);break;default:if(G.t==="string"||G.t==="text"||!G.t)G.t="s",B["string-value"]!=null&&(H=unescapexml(B["string-value"]),V=[]);else throw new Error("Unsupported value type "+G.t)}}else{if(fe=!1,G.t==="s"&&(G.v=H||"",V.length&&(G.R=V),fe=O==0),X.Target&&(G.l=X),he.length>0&&(G.c=he,he=[]),H&&T.cellText!==!1&&(G.w=H),fe&&(G.t="z",delete G.v),(!fe||T.sheetStubs)&&!(T.sheetRows&&T.sheetRows<=U))for(var ke=0;ke<re;++ke){if(J=parseInt(B["number-columns-repeated"]||"1",10),T.dense)for(F[U+ke]||(F[U+ke]=[]),F[U+ke][W]=ke==0?G:dup(G);--J>0;)F[U+ke][W+J]=dup(G);else for(F[encode_cell({r:U+ke,c:W})]=G;--J>0;)F[encode_cell({r:U+ke,c:W+J})]=dup(G);K.e.c<=W&&(K.e.c=W)}J=parseInt(B["number-columns-repeated"]||"1",10),W+=J-1,J=0,G={},H="",V=[]}X={};break;case"document":case"document-content":case"电子表格文档":case"spreadsheet":case"主体":case"scripts":case"styles":case"font-face-decls":case"master-styles":if(N[1]==="/"){if((C=E.pop())[0]!==N[3])throw"Bad state: "+C}else N[0].charAt(N[0].length-2)!=="/"&&E.push([N[3],!0]);break;case"annotation":if(N[1]==="/"){if((C=E.pop())[0]!==N[3])throw"Bad state: "+C;ne.t=H,V.length&&(ne.R=V),ne.a=ue,he.push(ne)}else N[0].charAt(N[0].length-2)!=="/"&&E.push([N[3],!1]);ue="",ce=0,H="",O=0,V=[];break;case"creator":N[1]==="/"?ue=S.slice(ce,N.index):ce=N.index+N[0].length;break;case"meta":case"元数据":case"settings":case"config-item-set":case"config-item-map-indexed":case"config-item-map-entry":case"config-item-map-named":case"shapes":case"frame":case"text-box":case"image":case"data-pilot-tables":case"list-style":case"form":case"dde-links":case"event-listeners":case"chart":if(N[1]==="/"){if((C=E.pop())[0]!==N[3])throw"Bad state: "+C}else N[0].charAt(N[0].length-2)!=="/"&&E.push([N[3],!1]);H="",O=0,V=[];break;case"scientific-number":break;case"currency-symbol":break;case"currency-style":break;case"number-style":case"percentage-style":case"date-style":case"time-style":if(N[1]==="/"){if(ee[P.name]=R,(C=E.pop())[0]!==N[3])throw"Bad state: "+C}else N[0].charAt(N[0].length-2)!=="/"&&(R="",P=parsexmltag(N[0],!1),E.push([N[3],!0]));break;case"script":break;case"libraries":break;case"automatic-styles":break;case"default-style":case"page-layout":break;case"style":break;case"map":break;case"font-face":break;case"paragraph-properties":break;case"table-properties":break;case"table-column-properties":break;case"table-row-properties":break;case"table-cell-properties":break;case"number":switch(E[E.length-1][0]){case"time-style":case"date-style":_=parsexmltag(N[0],!1),R+=number_formats_ods[N[3]][_.style==="long"?1:0];break}break;case"fraction":break;case"day":case"month":case"year":case"era":case"day-of-week":case"week-of-year":case"quarter":case"hours":case"minutes":case"seconds":case"am-pm":switch(E[E.length-1][0]){case"time-style":case"date-style":_=parsexmltag(N[0],!1),R+=number_formats_ods[N[3]][_.style==="long"?1:0];break}break;case"boolean-style":break;case"boolean":break;case"text-style":break;case"text":if(N[0].slice(-2)==="/>")break;if(N[1]==="/")switch(E[E.length-1][0]){case"number-style":case"date-style":case"time-style":R+=S.slice(I,N.index);break}else I=N.index+N[0].length;break;case"named-range":_=parsexmltag(N[0],!1),de=ods_to_csf_3D(_["cell-range-address"]);var we={Name:_.name,Ref:de[0]+"!"+de[1]};ve&&(we.Sheet=D.length),Z.Names.push(we);break;case"text-content":break;case"text-properties":break;case"embedded-text":break;case"body":case"电子表格":break;case"forms":break;case"table-column":break;case"table-header-rows":break;case"table-rows":break;case"table-column-group":break;case"table-header-columns":break;case"table-columns":break;case"null-date":break;case"graphic-properties":break;case"calculation-settings":break;case"named-expressions":break;case"label-range":break;case"label-ranges":break;case"named-expression":break;case"sort":break;case"sort-by":break;case"sort-groups":break;case"tab":break;case"line-break":break;case"span":break;case"p":case"文本串":if(["master-styles"].indexOf(E[E.length-1][0])>-1)break;if(N[1]==="/"&&(!B||!B["string-value"])){var Le=parse_text_p(S.slice(O,N.index));H=(H.length>0?H+`
274`:"")+Le[0]}else parsexmltag(N[0],!1),O=N.index+N[0].length;break;case"s":break;case"database-range":if(N[1]==="/")break;try{de=ods_to_csf_3D(parsexmltag(N[0])["target-range-address"]),M[de[0]]["!autofilter"]={ref:de[1]}}catch{}break;case"date":break;case"object":break;case"title":case"标题":break;case"desc":break;case"binary-data":break;case"table-source":break;case"scenario":break;case"iteration":break;case"content-validations":break;case"content-validation":break;case"help-message":break;case"error-message":break;case"database-ranges":break;case"filter":break;case"filter-and":break;case"filter-or":break;case"filter-condition":break;case"list-level-style-bullet":break;case"list-level-style-number":break;case"list-level-properties":break;case"sender-firstname":case"sender-lastname":case"sender-initials":case"sender-title":case"sender-position":case"sender-email":case"sender-phone-private":case"sender-fax":case"sender-company":case"sender-phone-work":case"sender-street":case"sender-city":case"sender-postal-code":case"sender-country":case"sender-state-or-province":case"author-name":case"author-initials":case"chapter":case"file-name":case"template-name":case"sheet-name":break;case"event-listener":break;case"initial-creator":case"creation-date":case"print-date":case"generator":case"document-statistic":case"user-defined":case"editing-duration":case"editing-cycles":break;case"config-item":break;case"page-number":break;case"page-count":break;case"time":break;case"cell-range-source":break;case"detective":break;case"operation":break;case"highlighted-range":break;case"data-pilot-table":case"source-cell-range":case"source-service":case"data-pilot-field":case"data-pilot-level":case"data-pilot-subtotals":case"data-pilot-subtotal":case"data-pilot-members":case"data-pilot-member":case"data-pilot-display-info":case"data-pilot-sort-info":case"data-pilot-layout-info":case"data-pilot-field-reference":case"data-pilot-groups":case"data-pilot-group":case"data-pilot-group-member":break;case"rect":break;case"dde-connection-decls":case"dde-connection-decl":case"dde-link":case"dde-source":break;case"properties":break;case"property":break;case"a":if(N[1]!=="/"){if(X=parsexmltag(N[0],!1),!X.href)break;X.Target=unescapexml(X.href),delete X.href,X.Target.charAt(0)=="#"&&X.Target.indexOf(".")>-1?(de=ods_to_csf_3D(X.Target.slice(1)),X.Target="#"+de[0]+"!"+de[1]):X.Target.match(/^\.\.[\\\/]/)&&(X.Target=X.Target.slice(3))}break;case"table-protection":break;case"data-pilot-grand-total":break;case"office-document-common-attrs":break;default:switch(N[2]){case"dc:":case"calcext:":case"loext:":case"ooo:":case"chartooo:":case"draw:":case"style:":case"chart:":case"form:":case"uof:":case"表:":case"字:":break;default:if(T.WTF)throw new Error(N)}}var pe={Sheets:M,SheetNames:D,Workbook:Z};return T.bookSheets&&delete pe.Sheets,pe}function parse_ods(o,u){u=u||{},safegetzipfile(o,"META-INF/manifest.xml")&&parse_manifest(getzipdata(o,"META-INF/manifest.xml"),u);var T=getzipstr(o,"content.xml");if(!T)throw new Error("Missing content.xml in ODS / UOF file");var S=parse_content_xml(utf8read(T),u);return safegetzipfile(o,"meta.xml")&&(S.Props=parse_core_props(getzipdata(o,"meta.xml"))),S}function parse_fods(o,u){return parse_content_xml(o,u)}var write_styles_ods=function(){var o=["<office:master-styles>",'<style:master-page style:name="mp1" style:page-layout-name="mp1">',"<style:header/>",'<style:header-left style:display="false"/>',"<style:footer/>",'<style:footer-left style:display="false"/>',"</style:master-page>","</office:master-styles>"].join(""),u="<office:document-styles "+wxt_helper({"xmlns:office":"urn:oasis:names:tc:opendocument:xmlns:office:1.0","xmlns:table":"urn:oasis:names:tc:opendocument:xmlns:table:1.0","xmlns:style":"urn:oasis:names:tc:opendocument:xmlns:style:1.0","xmlns:text":"urn:oasis:names:tc:opendocument:xmlns:text:1.0","xmlns:draw":"urn:oasis:names:tc:opendocument:xmlns:drawing:1.0","xmlns:fo":"urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0","xmlns:xlink":"http://www.w3.org/1999/xlink","xmlns:dc":"http://purl.org/dc/elements/1.1/","xmlns:number":"urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0","xmlns:svg":"urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0","xmlns:of":"urn:oasis:names:tc:opendocument:xmlns:of:1.2","office:version":"1.2"})+">"+o+"</office:document-styles>";return function(){return XML_HEADER+u}}(),write_content_ods=function(){var o=function(C){return escapexml(C).replace(/  +/g,function(_){return'<text:s text:c="'+_.length+'"/>'}).replace(/\t/g,"<text:tab/>").replace(/\n/g,"</text:p><text:p>").replace(/^ /,"<text:s/>").replace(/ $/,"<text:s/>")},u=`          <table:table-cell />
275`,T=`          <table:covered-table-cell/>
276`,S=function(C,_,P){var R=[];R.push('      <table:table table:name="'+escapexml(_.SheetNames[P])+`" table:style-name="ta1">
277`);var I=0,L=0,j=decode_range(C["!ref"]||"A1"),M=C["!merges"]||[],D=0,F=Array.isArray(C);if(C["!cols"])for(L=0;L<=j.e.c;++L)R.push("        <table:table-column"+(C["!cols"][L]?' table:style-name="co'+C["!cols"][L].ods+'"':"")+`></table:table-column>
278`);var N="",G=C["!rows"]||[];for(I=0;I<j.s.r;++I)N=G[I]?' table:style-name="ro'+G[I].ods+'"':"",R.push("        <table:table-row"+N+`></table:table-row>
279`);for(;I<=j.e.r;++I){for(N=G[I]?' table:style-name="ro'+G[I].ods+'"':"",R.push("        <table:table-row"+N+`>
280`),L=0;L<j.s.c;++L)R.push(u);for(;L<=j.e.c;++L){var B=!1,H={},O="";for(D=0;D!=M.length;++D)if(!(M[D].s.c>L)&&!(M[D].s.r>I)&&!(M[D].e.c<L)&&!(M[D].e.r<I)){(M[D].s.c!=L||M[D].s.r!=I)&&(B=!0),H["table:number-columns-spanned"]=M[D].e.c-M[D].s.c+1,H["table:number-rows-spanned"]=M[D].e.r-M[D].s.r+1;break}if(B){R.push(T);continue}var V=encode_cell({r:I,c:L}),U=F?(C[I]||[])[L]:C[V];if(U&&U.f&&(H["table:formula"]=escapexml(csf_to_ods_formula(U.f)),U.F&&U.F.slice(0,V.length)==V)){var W=decode_range(U.F);H["table:number-matrix-columns-spanned"]=W.e.c-W.s.c+1,H["table:number-matrix-rows-spanned"]=W.e.r-W.s.r+1}if(!U){R.push(u);continue}switch(U.t){case"b":O=U.v?"TRUE":"FALSE",H["office:value-type"]="boolean",H["office:boolean-value"]=U.v?"true":"false";break;case"n":O=U.w||String(U.v||0),H["office:value-type"]="float",H["office:value"]=U.v||0;break;case"s":case"str":O=U.v==null?"":U.v,H["office:value-type"]="string";break;case"d":O=U.w||parseDate(U.v).toISOString(),H["office:value-type"]="date",H["office:date-value"]=parseDate(U.v).toISOString(),H["table:style-name"]="ce1";break;default:R.push(u);continue}var K=o(O);if(U.l&&U.l.Target){var Y=U.l.Target;Y=Y.charAt(0)=="#"?"#"+csf_to_ods_3D(Y.slice(1)):Y,Y.charAt(0)!="#"&&!Y.match(/^\w+:/)&&(Y="../"+Y),K=writextag("text:a",K,{"xlink:href":Y.replace(/&/g,"&amp;")})}R.push("          "+writextag("table:table-cell",writextag("text:p",K,{}),H)+`
281`)}R.push(`        </table:table-row>
282`)}return R.push(`      </table:table>
283`),R.join("")},E=function(C,_){C.push(` <office:automatic-styles>
284`),C.push(`  <number:date-style style:name="N37" number:automatic-order="true">
285`),C.push(`   <number:month number:style="long"/>
286`),C.push(`   <number:text>/</number:text>
287`),C.push(`   <number:day number:style="long"/>
288`),C.push(`   <number:text>/</number:text>
289`),C.push(`   <number:year/>
290`),C.push(`  </number:date-style>
291`);var P=0;_.SheetNames.map(function(I){return _.Sheets[I]}).forEach(function(I){if(I&&I["!cols"]){for(var L=0;L<I["!cols"].length;++L)if(I["!cols"][L]){var j=I["!cols"][L];if(j.width==null&&j.wpx==null&&j.wch==null)continue;process_col(j),j.ods=P;var M=I["!cols"][L].wpx+"px";C.push('  <style:style style:name="co'+P+`" style:family="table-column">
292`),C.push('   <style:table-column-properties fo:break-before="auto" style:column-width="'+M+`"/>
293`),C.push(`  </style:style>
294`),++P}}});var R=0;_.SheetNames.map(function(I){return _.Sheets[I]}).forEach(function(I){if(I&&I["!rows"]){for(var L=0;L<I["!rows"].length;++L)if(I["!rows"][L]){I["!rows"][L].ods=R;var j=I["!rows"][L].hpx+"px";C.push('  <style:style style:name="ro'+R+`" style:family="table-row">
295`),C.push('   <style:table-row-properties fo:break-before="auto" style:row-height="'+j+`"/>
296`),C.push(`  </style:style>
297`),++R}}}),C.push(`  <style:style style:name="ta1" style:family="table" style:master-page-name="mp1">
298`),C.push(`   <style:table-properties table:display="true" style:writing-mode="lr-tb"/>
299`),C.push(`  </style:style>
300`),C.push(`  <style:style style:name="ce1" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N37"/>
301`),C.push(` </office:automatic-styles>
302`)};return function(_,P){var R=[XML_HEADER],I=wxt_helper({"xmlns:office":"urn:oasis:names:tc:opendocument:xmlns:office:1.0","xmlns:table":"urn:oasis:names:tc:opendocument:xmlns:table:1.0","xmlns:style":"urn:oasis:names:tc:opendocument:xmlns:style:1.0","xmlns:text":"urn:oasis:names:tc:opendocument:xmlns:text:1.0","xmlns:draw":"urn:oasis:names:tc:opendocument:xmlns:drawing:1.0","xmlns:fo":"urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0","xmlns:xlink":"http://www.w3.org/1999/xlink","xmlns:dc":"http://purl.org/dc/elements/1.1/","xmlns:meta":"urn:oasis:names:tc:opendocument:xmlns:meta:1.0","xmlns:number":"urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0","xmlns:presentation":"urn:oasis:names:tc:opendocument:xmlns:presentation:1.0","xmlns:svg":"urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0","xmlns:chart":"urn:oasis:names:tc:opendocument:xmlns:chart:1.0","xmlns:dr3d":"urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0","xmlns:math":"http://www.w3.org/1998/Math/MathML","xmlns:form":"urn:oasis:names:tc:opendocument:xmlns:form:1.0","xmlns:script":"urn:oasis:names:tc:opendocument:xmlns:script:1.0","xmlns:ooo":"http://openoffice.org/2004/office","xmlns:ooow":"http://openoffice.org/2004/writer","xmlns:oooc":"http://openoffice.org/2004/calc","xmlns:dom":"http://www.w3.org/2001/xml-events","xmlns:xforms":"http://www.w3.org/2002/xforms","xmlns:xsd":"http://www.w3.org/2001/XMLSchema","xmlns:xsi":"http://www.w3.org/2001/XMLSchema-instance","xmlns:sheet":"urn:oasis:names:tc:opendocument:sh33tjs:1.0","xmlns:rpt":"http://openoffice.org/2005/report","xmlns:of":"urn:oasis:names:tc:opendocument:xmlns:of:1.2","xmlns:xhtml":"http://www.w3.org/1999/xhtml","xmlns:grddl":"http://www.w3.org/2003/g/data-view#","xmlns:tableooo":"http://openoffice.org/2009/table","xmlns:drawooo":"http://openoffice.org/2010/draw","xmlns:calcext":"urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0","xmlns:loext":"urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0","xmlns:field":"urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0","xmlns:formx":"urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0","xmlns:css3t":"http://www.w3.org/TR/css3-text/","office:version":"1.2"}),L=wxt_helper({"xmlns:config":"urn:oasis:names:tc:opendocument:xmlns:config:1.0","office:mimetype":"application/vnd.oasis.opendocument.spreadsheet"});P.bookType=="fods"?(R.push("<office:document"+I+L+`>
303`),R.push(write_meta_ods().replace(/office:document-meta/g,"office:meta"))):R.push("<office:document-content"+I+`>
304`),E(R,_),R.push(`  <office:body>
305`),R.push(`    <office:spreadsheet>
306`);for(var j=0;j!=_.SheetNames.length;++j)R.push(S(_.Sheets[_.SheetNames[j]],_,j));return R.push(`    </office:spreadsheet>
307`),R.push(`  </office:body>
308`),P.bookType=="fods"?R.push("</office:document>"):R.push("</office:document-content>"),R.join("")}}();function write_ods(o,u){if(u.bookType=="fods")return write_content_ods(o,u);var T=zip_new(),S="",E=[],C=[];return S="mimetype",zip_add_file(T,S,"application/vnd.oasis.opendocument.spreadsheet"),S="content.xml",zip_add_file(T,S,write_content_ods(o,u)),E.push([S,"text/xml"]),C.push([S,"ContentFile"]),S="styles.xml",zip_add_file(T,S,write_styles_ods(o,u)),E.push([S,"text/xml"]),C.push([S,"StylesFile"]),S="meta.xml",zip_add_file(T,S,XML_HEADER+write_meta_ods()),E.push([S,"text/xml"]),C.push([S,"MetadataFile"]),S="manifest.rdf",zip_add_file(T,S,write_rdf(C)),E.push([S,"application/rdf+xml"]),S="META-INF/manifest.xml",zip_add_file(T,S,write_manifest(E)),T}/*! sheetjs (C) 2013-present SheetJS -- http://sheetjs.com */function u8_to_dataview(o){return new DataView(o.buffer,o.byteOffset,o.byteLength)}function u8str(o){return typeof TextDecoder<"u"?new TextDecoder().decode(o):utf8read(a2s(o))}function stru8(o){return typeof TextEncoder<"u"?new TextEncoder().encode(o):s2a(utf8write(o))}function u8contains(o,u){e:for(var T=0;T<=o.length-u.length;++T){for(var S=0;S<u.length;++S)if(o[T+S]!=u[S])continue e;return!0}return!1}function u8concat(o){var u=o.reduce(function(E,C){return E+C.length},0),T=new Uint8Array(u),S=0;return o.forEach(function(E){T.set(E,S),S+=E.length}),T}function popcnt(o){return o-=o>>1&1431655765,o=(o&858993459)+(o>>2&858993459),(o+(o>>4)&252645135)*16843009>>>24}function readDecimal128LE(o,u){for(var T=(o[u+15]&127)<<7|o[u+14]>>1,S=o[u+14]&1,E=u+13;E>=u;--E)S=S*256+o[E];return(o[u+15]&128?-S:S)*Math.pow(10,T-6176)}function writeDecimal128LE(o,u,T){var S=Math.floor(T==0?0:Math.LOG10E*Math.log(Math.abs(T)))+6176-20,E=T/Math.pow(10,S-6176);o[u+15]|=S>>7,o[u+14]|=(S&127)<<1;for(var C=0;E>=1;++C,E/=256)o[u+C]=E&255;o[u+15]|=T>=0?0:128}function parse_varint49(o,u){var T=u?u[0]:0,S=o[T]&127;e:if(o[T++]>=128&&(S|=(o[T]&127)<<7,o[T++]<128||(S|=(o[T]&127)<<14,o[T++]<128)||(S|=(o[T]&127)<<21,o[T++]<128)||(S+=(o[T]&127)*Math.pow(2,28),++T,o[T++]<128)||(S+=(o[T]&127)*Math.pow(2,35),++T,o[T++]<128)||(S+=(o[T]&127)*Math.pow(2,42),++T,o[T++]<128)))break e;return u&&(u[0]=T),S}function write_varint49(o){var u=new Uint8Array(7);u[0]=o&127;var T=1;e:if(o>127){if(u[T-1]|=128,u[T]=o>>7&127,++T,o<=16383||(u[T-1]|=128,u[T]=o>>14&127,++T,o<=2097151)||(u[T-1]|=128,u[T]=o>>21&127,++T,o<=268435455)||(u[T-1]|=128,u[T]=o/256>>>21&127,++T,o<=34359738367)||(u[T-1]|=128,u[T]=o/65536>>>21&127,++T,o<=4398046511103))break e;u[T-1]|=128,u[T]=o/16777216>>>21&127,++T}return u.slice(0,T)}function varint_to_i32(o){var u=0,T=o[u]&127;e:if(o[u++]>=128){if(T|=(o[u]&127)<<7,o[u++]<128||(T|=(o[u]&127)<<14,o[u++]<128)||(T|=(o[u]&127)<<21,o[u++]<128))break e;T|=(o[u]&127)<<28}return T}function parse_shallow(o){for(var u=[],T=[0];T[0]<o.length;){var S=T[0],E=parse_varint49(o,T),C=E&7;E=Math.floor(E/8);var _=0,P;if(E==0)break;switch(C){case 0:{for(var R=T[0];o[T[0]++]>=128;);P=o.slice(R,T[0])}break;case 5:_=4,P=o.slice(T[0],T[0]+_),T[0]+=_;break;case 1:_=8,P=o.slice(T[0],T[0]+_),T[0]+=_;break;case 2:_=parse_varint49(o,T),P=o.slice(T[0],T[0]+_),T[0]+=_;break;case 3:case 4:default:throw new Error("PB Type ".concat(C," for Field ").concat(E," at offset ").concat(S))}var I={data:P,type:C};u[E]==null?u[E]=[I]:u[E].push(I)}return u}function write_shallow(o){var u=[];return o.forEach(function(T,S){T.forEach(function(E){E.data&&(u.push(write_varint49(S*8+E.type)),E.type==2&&u.push(write_varint49(E.data.length)),u.push(E.data))})}),u8concat(u)}function mappa(o,u){return(o==null?void 0:o.map(function(T){return u(T.data)}))||[]}function parse_iwa_file(o){for(var u,T=[],S=[0];S[0]<o.length;){var E=parse_varint49(o,S),C=parse_shallow(o.slice(S[0],S[0]+E));S[0]+=E;var _={id:varint_to_i32(C[1][0].data),messages:[]};C[2].forEach(function(P){var R=parse_shallow(P.data),I=varint_to_i32(R[3][0].data);_.messages.push({meta:R,data:o.slice(S[0],S[0]+I)}),S[0]+=I}),(u=C[3])!=null&&u[0]&&(_.merge=varint_to_i32(C[3][0].data)>>>0>0),T.push(_)}return T}function write_iwa_file(o){var u=[];return o.forEach(function(T){var S=[];S[1]=[{data:write_varint49(T.id),type:0}],S[2]=[],T.merge!=null&&(S[3]=[{data:write_varint49(+!!T.merge),type:0}]);var E=[];T.messages.forEach(function(_){E.push(_.data),_.meta[3]=[{type:0,data:write_varint49(_.data.length)}],S[2].push({data:write_shallow(_.meta),type:2})});var C=write_shallow(S);u.push(write_varint49(C.length)),u.push(C),E.forEach(function(_){return u.push(_)})}),u8concat(u)}function parse_snappy_chunk(o,u){if(o!=0)throw new Error("Unexpected Snappy chunk type ".concat(o));for(var T=[0],S=parse_varint49(u,T),E=[];T[0]<u.length;){var C=u[T[0]]&3;if(C==0){var _=u[T[0]++]>>2;if(_<60)++_;else{var P=_-59;_=u[T[0]],P>1&&(_|=u[T[0]+1]<<8),P>2&&(_|=u[T[0]+2]<<16),P>3&&(_|=u[T[0]+3]<<24),_>>>=0,_++,T[0]+=P}E.push(u.slice(T[0],T[0]+_)),T[0]+=_;continue}else{var R=0,I=0;if(C==1?(I=(u[T[0]]>>2&7)+4,R=(u[T[0]++]&224)<<3,R|=u[T[0]++]):(I=(u[T[0]++]>>2)+1,C==2?(R=u[T[0]]|u[T[0]+1]<<8,T[0]+=2):(R=(u[T[0]]|u[T[0]+1]<<8|u[T[0]+2]<<16|u[T[0]+3]<<24)>>>0,T[0]+=4)),E=[u8concat(E)],R==0)throw new Error("Invalid offset 0");if(R>E[0].length)throw new Error("Invalid offset beyond length");if(I>=R)for(E.push(E[0].slice(-R)),I-=R;I>=E[E.length-1].length;)E.push(E[E.length-1]),I-=E[E.length-1].length;E.push(E[0].slice(-R,-R+I))}}var L=u8concat(E);if(L.length!=S)throw new Error("Unexpected length: ".concat(L.length," != ").concat(S));return L}function decompress_iwa_file(o){for(var u=[],T=0;T<o.length;){var S=o[T++],E=o[T]|o[T+1]<<8|o[T+2]<<16;T+=3,u.push(parse_snappy_chunk(S,o.slice(T,T+E))),T+=E}if(T!==o.length)throw new Error("data is not a valid framed stream!");return u8concat(u)}function compress_iwa_file(o){for(var u=[],T=0;T<o.length;){var S=Math.min(o.length-T,268435455),E=new Uint8Array(4);u.push(E);var C=write_varint49(S),_=C.length;u.push(C),S<=60?(_++,u.push(new Uint8Array([S-1<<2]))):S<=256?(_+=2,u.push(new Uint8Array([240,S-1&255]))):S<=65536?(_+=3,u.push(new Uint8Array([244,S-1&255,S-1>>8&255]))):S<=16777216?(_+=4,u.push(new Uint8Array([248,S-1&255,S-1>>8&255,S-1>>16&255]))):S<=4294967296&&(_+=5,u.push(new Uint8Array([252,S-1&255,S-1>>8&255,S-1>>16&255,S-1>>>24&255]))),u.push(o.slice(T,T+S)),_+=S,E[0]=0,E[1]=_&255,E[2]=_>>8&255,E[3]=_>>16&255,T+=S}return u8concat(u)}function parse_old_storage(o,u,T,S){var E=u8_to_dataview(o),C=E.getUint32(4,!0),_=(S>1?12:8)+popcnt(C&(S>1?3470:398))*4,P=-1,R=-1,I=NaN,L=new Date(2001,0,1);C&512&&(P=E.getUint32(_,!0),_+=4),_+=popcnt(C&(S>1?12288:4096))*4,C&16&&(R=E.getUint32(_,!0),_+=4),C&32&&(I=E.getFloat64(_,!0),_+=8),C&64&&(L.setTime(L.getTime()+E.getFloat64(_,!0)*1e3),_+=8);var j;switch(o[2]){case 0:break;case 2:j={t:"n",v:I};break;case 3:j={t:"s",v:u[R]};break;case 5:j={t:"d",v:L};break;case 6:j={t:"b",v:I>0};break;case 7:j={t:"n",v:I/86400};break;case 8:j={t:"e",v:0};break;case 9:if(P>-1)j={t:"s",v:T[P]};else if(R>-1)j={t:"s",v:u[R]};else if(!isNaN(I))j={t:"n",v:I};else throw new Error("Unsupported cell type ".concat(o.slice(0,4)));break;default:throw new Error("Unsupported cell type ".concat(o.slice(0,4)))}return j}function parse_new_storage(o,u,T){var S=u8_to_dataview(o),E=S.getUint32(8,!0),C=12,_=-1,P=-1,R=NaN,I=NaN,L=new Date(2001,0,1);E&1&&(R=readDecimal128LE(o,C),C+=16),E&2&&(I=S.getFloat64(C,!0),C+=8),E&4&&(L.setTime(L.getTime()+S.getFloat64(C,!0)*1e3),C+=8),E&8&&(P=S.getUint32(C,!0),C+=4),E&16&&(_=S.getUint32(C,!0),C+=4);var j;switch(o[1]){case 0:break;case 2:j={t:"n",v:R};break;case 3:j={t:"s",v:u[P]};break;case 5:j={t:"d",v:L};break;case 6:j={t:"b",v:I>0};break;case 7:j={t:"n",v:I/86400};break;case 8:j={t:"e",v:0};break;case 9:if(_>-1)j={t:"s",v:T[_]};else throw new Error("Unsupported cell type ".concat(o[1]," : ").concat(E&31," : ").concat(o.slice(0,4)));break;case 10:j={t:"n",v:R};break;default:throw new Error("Unsupported cell type ".concat(o[1]," : ").concat(E&31," : ").concat(o.slice(0,4)))}return j}function write_new_storage(o,u){var T=new Uint8Array(32),S=u8_to_dataview(T),E=12,C=0;switch(T[0]=5,o.t){case"n":T[1]=2,writeDecimal128LE(T,E,o.v),C|=1,E+=16;break;case"b":T[1]=6,S.setFloat64(E,o.v?1:0,!0),C|=2,E+=8;break;case"s":if(u.indexOf(o.v)==-1)throw new Error("Value ".concat(o.v," missing from SST!"));T[1]=3,S.setUint32(E,u.indexOf(o.v),!0),C|=8,E+=4;break;default:throw"unsupported cell type "+o.t}return S.setUint32(8,C,!0),T.slice(0,E)}function write_old_storage(o,u){var T=new Uint8Array(32),S=u8_to_dataview(T),E=12,C=0;switch(T[0]=3,o.t){case"n":T[2]=2,S.setFloat64(E,o.v,!0),C|=32,E+=8;break;case"b":T[2]=6,S.setFloat64(E,o.v?1:0,!0),C|=32,E+=8;break;case"s":if(u.indexOf(o.v)==-1)throw new Error("Value ".concat(o.v," missing from SST!"));T[2]=3,S.setUint32(E,u.indexOf(o.v),!0),C|=16,E+=4;break;default:throw"unsupported cell type "+o.t}return S.setUint32(4,C,!0),T.slice(0,E)}function parse_cell_storage(o,u,T){switch(o[0]){case 0:case 1:case 2:case 3:return parse_old_storage(o,u,T,o[0]);case 5:return parse_new_storage(o,u,T);default:throw new Error("Unsupported payload version ".concat(o[0]))}}function parse_TSP_Reference(o){var u=parse_shallow(o);return parse_varint49(u[1][0].data)}function parse_TST_TableDataList(o,u){var T=parse_shallow(u.data),S=varint_to_i32(T[1][0].data),E=T[3],C=[];return(E||[]).forEach(function(_){var P=parse_shallow(_.data),R=varint_to_i32(P[1][0].data)>>>0;switch(S){case 1:C[R]=u8str(P[3][0].data);break;case 8:{var I=o[parse_TSP_Reference(P[9][0].data)][0],L=parse_shallow(I.data),j=o[parse_TSP_Reference(L[1][0].data)][0],M=varint_to_i32(j.meta[1][0].data);if(M!=2001)throw new Error("2000 unexpected reference to ".concat(M));var D=parse_shallow(j.data);C[R]=D[3].map(function(F){return u8str(F.data)}).join("")}break}}),C}function parse_TST_TileRowInfo(o,u){var T,S,E,C,_,P,R,I,L,j,M,D,F,N,G=parse_shallow(o),B=varint_to_i32(G[1][0].data)>>>0,H=varint_to_i32(G[2][0].data)>>>0,O=((S=(T=G[8])==null?void 0:T[0])==null?void 0:S.data)&&varint_to_i32(G[8][0].data)>0||!1,V,U;if((C=(E=G[7])==null?void 0:E[0])!=null&&C.data&&u!=0)V=(P=(_=G[7])==null?void 0:_[0])==null?void 0:P.data,U=(I=(R=G[6])==null?void 0:R[0])==null?void 0:I.data;else if((j=(L=G[4])==null?void 0:L[0])!=null&&j.data&&u!=1)V=(D=(M=G[4])==null?void 0:M[0])==null?void 0:D.data,U=(N=(F=G[3])==null?void 0:F[0])==null?void 0:N.data;else throw"NUMBERS Tile missing ".concat(u," cell storage");for(var W=O?4:1,K=u8_to_dataview(V),Y=[],ee=0;ee<V.length/2;++ee){var oe=K.getUint16(ee*2,!0);oe<65535&&Y.push([ee,oe])}if(Y.length!=H)throw"Expected ".concat(H," cells, found ").concat(Y.length);var se=[];for(ee=0;ee<Y.length-1;++ee)se[Y[ee][0]]=U.subarray(Y[ee][1]*W,Y[ee+1][1]*W);return Y.length>=1&&(se[Y[Y.length-1][0]]=U.subarray(Y[Y.length-1][1]*W)),{R:B,cells:se}}function parse_TST_Tile(o,u){var T,S=parse_shallow(u.data),E=(T=S==null?void 0:S[7])!=null&&T[0]?varint_to_i32(S[7][0].data)>>>0>0?1:0:-1,C=mappa(S[5],function(_){return parse_TST_TileRowInfo(_,E)});return{nrows:varint_to_i32(S[4][0].data)>>>0,data:C.reduce(function(_,P){return _[P.R]||(_[P.R]=[]),P.cells.forEach(function(R,I){if(_[P.R][I])throw new Error("Duplicate cell r=".concat(P.R," c=").concat(I));_[P.R][I]=R}),_},[])}}function parse_TST_TableModelArchive(o,u,T){var S,E=parse_shallow(u.data),C={s:{r:0,c:0},e:{r:0,c:0}};if(C.e.r=(varint_to_i32(E[6][0].data)>>>0)-1,C.e.r<0)throw new Error("Invalid row varint ".concat(E[6][0].data));if(C.e.c=(varint_to_i32(E[7][0].data)>>>0)-1,C.e.c<0)throw new Error("Invalid col varint ".concat(E[7][0].data));T["!ref"]=encode_range(C);var _=parse_shallow(E[4][0].data),P=parse_TST_TableDataList(o,o[parse_TSP_Reference(_[4][0].data)][0]),R=(S=_[17])!=null&&S[0]?parse_TST_TableDataList(o,o[parse_TSP_Reference(_[17][0].data)][0]):[],I=parse_shallow(_[3][0].data),L=0;I[1].forEach(function(j){var M=parse_shallow(j.data),D=o[parse_TSP_Reference(M[2][0].data)][0],F=varint_to_i32(D.meta[1][0].data);if(F!=6002)throw new Error("6001 unexpected reference to ".concat(F));var N=parse_TST_Tile(o,D);N.data.forEach(function(G,B){G.forEach(function(H,O){var V=encode_cell({r:L+B,c:O}),U=parse_cell_storage(H,P,R);U&&(T[V]=U)})}),L+=N.nrows})}function parse_TST_TableInfoArchive(o,u){var T=parse_shallow(u.data),S={"!ref":"A1"},E=o[parse_TSP_Reference(T[2][0].data)],C=varint_to_i32(E[0].meta[1][0].data);if(C!=6001)throw new Error("6000 unexpected reference to ".concat(C));return parse_TST_TableModelArchive(o,E[0],S),S}function parse_TN_SheetArchive(o,u){var T,S=parse_shallow(u.data),E={name:(T=S[1])!=null&&T[0]?u8str(S[1][0].data):"",sheets:[]},C=mappa(S[2],parse_TSP_Reference);
308return C.forEach(function(_){o[_].forEach(function(P){var R=varint_to_i32(P.meta[1][0].data);R==6e3&&E.sheets.push(parse_TST_TableInfoArchive(o,P))})}),E}function parse_TN_DocumentArchive(o,u){var T=book_new(),S=parse_shallow(u.data),E=mappa(S[1],parse_TSP_Reference);if(E.forEach(function(C){o[C].forEach(function(_){var P=varint_to_i32(_.meta[1][0].data);if(P==2){var R=parse_TN_SheetArchive(o,_);R.sheets.forEach(function(I,L){book_append_sheet(T,I,L==0?R.name:R.name+"_"+L,!0)})}})}),T.SheetNames.length==0)throw new Error("Empty NUMBERS file");return T}function parse_numbers_iwa(o){var u,T,S,E,C={},_=[];if(o.FullPaths.forEach(function(R){if(R.match(/\.iwpv2/))throw new Error("Unsupported password protection")}),o.FileIndex.forEach(function(R){if(R.name.match(/\.iwa$/)){var I;try{I=decompress_iwa_file(R.content)}catch(j){return console.log("?? "+R.content.length+" "+(j.message||j))}var L;try{L=parse_iwa_file(I)}catch(j){return console.log("## "+(j.message||j))}L.forEach(function(j){C[j.id]=j.messages,_.push(j.id)})}}),!_.length)throw new Error("File has no messages");var P=((E=(S=(T=(u=C==null?void 0:C[1])==null?void 0:u[0])==null?void 0:T.meta)==null?void 0:S[1])==null?void 0:E[0].data)&&varint_to_i32(C[1][0].meta[1][0].data)==1&&C[1][0];if(P||_.forEach(function(R){C[R].forEach(function(I){var L=varint_to_i32(I.meta[1][0].data)>>>0;if(L==1)if(!P)P=I;else throw new Error("Document has multiple roots")})}),!P)throw new Error("Cannot find Document root");return parse_TN_DocumentArchive(C,P)}function write_tile_row(o,u,T){var S,E,C,_;if(!((S=o[6])!=null&&S[0])||!((E=o[7])!=null&&E[0]))throw"Mutation only works on post-BNC storages!";var P=((_=(C=o[8])==null?void 0:C[0])==null?void 0:_.data)&&varint_to_i32(o[8][0].data)>0||!1;if(P)throw"Math only works with normal offsets";for(var R=0,I=u8_to_dataview(o[7][0].data),L=0,j=[],M=u8_to_dataview(o[4][0].data),D=0,F=[],N=0;N<u.length;++N){if(u[N]==null){I.setUint16(N*2,65535,!0),M.setUint16(N*2,65535);continue}I.setUint16(N*2,L,!0),M.setUint16(N*2,D,!0);var G,B;switch(typeof u[N]){case"string":G=write_new_storage({t:"s",v:u[N]},T),B=write_old_storage({t:"s",v:u[N]},T);break;case"number":G=write_new_storage({t:"n",v:u[N]},T),B=write_old_storage({t:"n",v:u[N]},T);break;case"boolean":G=write_new_storage({t:"b",v:u[N]},T),B=write_old_storage({t:"b",v:u[N]},T);break;default:throw new Error("Unsupported value "+u[N])}j.push(G),L+=G.length,F.push(B),D+=B.length,++R}for(o[2][0].data=write_varint49(R);N<o[7][0].data.length/2;++N)I.setUint16(N*2,65535,!0),M.setUint16(N*2,65535,!0);return o[6][0].data=u8concat(j),o[3][0].data=u8concat(F),R}function write_numbers_iwa(o,u){if(!u||!u.numbers)throw new Error("Mu
308st pass a `numbers` option -- check the README");var T=o.Sheets[o.SheetNames[0]];o.SheetNames.length>1&&console.error("The Numbers writer currently writes only the first table");var S=decode_range(T["!ref"]);S.s.r=S.s.c=0;var E=!1;S.e.c>9&&(E=!0,S.e.c=9),S.e.r>49&&(E=!0,S.e.r=49),E&&console.error("The Numbers writer is currently limited to ".concat(encode_range(S)));var C=sheet_to_json(T,{range:S,header:1}),_=["~Sh33tJ5~"];C.forEach(function(ue){return ue.forEach(function(ce){typeof ce=="string"&&_.push(ce)})});var P={},R=[],I=CFB.read(u.numbers,{type:"base64"});I.FileIndex.map(function(ue,ce){return[ue,I.FullPaths[ce]]}).forEach(function(ue){var ce=ue[0],fe=ue[1];if(ce.type==2&&ce.name.match(/\.iwa/)){var ve=ce.content,Te=decompress_iwa_file(ve),Se=parse_iwa_file(Te);Se.forEach(function(ke){R.push(ke.id),P[ke.id]={deps:[],location:fe,type:varint_to_i32(ke.messages[0].meta[1][0].data)}})}}),R.sort(function(ue,ce){return ue-ce});var L=R.filter(function(ue){return ue>1}).map(function(ue){return[ue,write_varint49(ue)]});I.FileIndex.map(function(ue,ce){return[ue,I.FullPaths[ce]]}).forEach(function(ue){var ce=ue[0];if(ue[1],!!ce.name.match(/\.iwa/)){var fe=parse_iwa_file(decompress_iwa_file(ce.content));fe.forEach(function(ve){ve.messages.forEach(function(Te){L.forEach(function(Se){ve.messages.some(function(ke){return varint_to_i32(ke.meta[1][0].data)!=11006&&u8contains(ke.data,Se[1])})&&P[Se[0]].deps.push(ve.id)})})})}});for(var j=CFB.find(I,P[1].location),M=parse_iwa_file(decompress_iwa_file(j.content)),D,F=0;F<M.length;++F){var N=M[F];N.id==1&&(D=N)}var G=parse_TSP_Reference(parse_shallow(D.messages[0].data)[1][0].data);for(j=CFB.find(I,P[G].location),M=parse_iwa_file(decompress_iwa_file(j.content)),F=0;F<M.length;++F)N=M[F],N.id==G&&(D=N);for(G=parse_TSP_Reference(parse_shallow(D.messages[0].data)[2][0].data),j=CFB.find(I,P[G].location),M=parse_iwa_file(decompress_iwa_file(j.content)),F=0;F<M.length;++F)N=M[F],N.id==G&&(D=N);for(G=parse_TSP_Reference(parse_shallow(D.messages[0].data)[2][0].data),j=CFB.find(I,P[G].location),M=parse_iwa_file(decompress_iwa_file(j.content)),F=0;F<M.length;++F)N=M[F],N.id==G&&(D=N);var B=parse_shallow(D.messages[0].data);{B[6][0].data=write_varint49(S.e.r+1),B[7][0].data=write_varint49(S.e.c+1);var H=parse_TSP_Reference(B[46][0].data),O=CFB.find(I,P[H].location),V=parse_iwa_file(decompress_iwa_file(O.content));{for(var U=0;U<V.length&&V[U].id!=H;++U);if(V[U].id!=H)throw"Bad ColumnRowUIDMapArchive";var W=parse_shallow(V[U].messages[0].data);W[1]=[],W[2]=[],W[3]=[];for(var K=0;K<=S.e.c;++K){var Y=[];Y[1]=Y[2]=[{type:0,data:write_varint49(K+420690)}],W[1].push({type:2,data:write_shallow(Y)}),W[2].push({type:0,data:write_varint49(K)}),W[3].push({type:0,data:write_varint49(K)})}W[4]=[],W[5]=[],W[6]=[];for(var ee=0;ee<=S.e.r;++ee)Y=[],Y[1]=Y[2]=[{type:0,data:write_varint49(ee+726270)}],W[4].push({type:2,data:write_shallow(Y)}),W[5].push({type:0,data:write_varint49(ee)}),W[6].push({type:0,data:write_varint49(ee)});V[U].messages[0].data=write_shallow(W)}O.content=compress_iwa_file(write_iwa_file(V)),O.size=O.content.length,delete B[46];var oe=parse_shallow(B[4][0].data);{oe[7][0].data=write_varint49(S.e.r+1);var se=parse_shallow(oe[1][0].data),Q=parse_TSP_Reference(se[2][0].data);O=CFB.find(I,P[Q].location),V=parse_iwa_file(decompress_iwa_file(O.content));{if(V[0].id!=Q)throw"Bad HeaderStorageBucket";var ie=parse_shallow(V[0].messages[0].data);for(ee=0;ee<C.length;++ee){var ae=parse_shallow(ie[2][0].data);ae[1][0].data=write_varint49(ee),ae[4][0].data=write_varint49(C[ee].length),ie[2][ee]={type:ie[2][0].type,data:write_shallow(ae)}}V[0].messages[0].data=write_shallow(ie)}O.content=compress_iwa_file(write_iwa_file(V)),O.size=O.content.length;var re=parse_TSP_Reference(oe[2][0].data);O=CFB.find(I,P[re].location),V=parse_iwa_file(decompress_iwa_file(O.content));{if(V[0].id!=re)throw"Bad HeaderStorageBucket";for(ie=parse_shallow(V[0].messages[0].data),K=0;K<=S.e.c;++K)ae=parse_shallow(ie[2][0].data),ae[1][0].data=write_varint49(K),ae[4][0].data=write_varint49(S.e.r+1),ie[2][K]={type:ie[2][0].type,data:write_shallow(ae)};V[0].messages[0].data=write_shallow(ie)}O.content=compress_iwa_file(write_iwa_file(V)),O.size=O.content.length;var J=parse_TSP_Reference(oe[4][0].data);(function(){for(var ue=CFB.find(I,P[J].location),ce=parse_iwa_file(decompress_iwa_file(ue.content)),fe,ve=0;ve<ce.length;++ve){var Te=ce[ve];Te.id==J&&(fe=Te)}var Se=parse_shallow(fe.messages[0].data);{Se[3]=[];var ke=[];_.forEach(function(pe,Me){ke[1]=[{type:0,data:write_varint49(Me)}],ke[2]=[{type:0,data:write_varint49(1)}],ke[3]=[{type:2,data:stru8(pe)}],Se[3].push({type:2,data:write_shallow(ke)})})}fe.messages[0].data=write_shallow(Se);var we=write_iwa_file(ce),Le=compress_iwa_file(we);ue.content=Le,ue.size=ue.content.length})();var te=parse_shallow(oe[3][0].data);{var Z=te[1][0];delete te[2];var X=parse_shallow(Z.data);{var de=parse_TSP_Reference(X[2][0].data);(function(){for(var ue=CFB.find(I,P[de].location),ce=parse_iwa_file(decompress_iwa_file(ue.content)),fe,ve=0;ve<ce.length;++ve){var Te=ce[ve];Te.id==de&&(fe=Te)}var Se=parse_shallow(fe.messages[0].data);{delete Se[6],delete te[7];var ke=new Uint8Array(Se[5][0].data);Se[5]=[];for(var we=0,Le=0;Le<=S.e.r;++Le){var pe=parse_shallow(ke);we+=write_tile_row(pe,C[Le],_),pe[1][0].data=write_varint49(Le),Se[5].push({data:write_shallow(pe),type:2})}Se[1]=[{type:0,data:write_varint49(S.e.c+1)}],Se[2]=[{type:0,data:write_varint49(S.e.r+1)}],Se[3]=[{type:0,data:write_varint49(we)}],Se[4]=[{type:0,data:write_varint49(S.e.r+1)}]}fe.messages[0].data=write_shallow(Se);var Me=write_iwa_file(ce),Pe=compress_iwa_file(Me);ue.content=Pe,ue.size=ue.content.length})()}Z.data=write_shallow(X)}oe[3][0].data=write_shallow(te)}B[4][0].data=write_shallow(oe)}D.messages[0].data=write_shallow(B);var he=write_iwa_file(M),ne=compress_iwa_file(he);return j.content=ne,j.size=j.content.length,I}function fix_opts_func(o){return function(T){for(var S=0;S!=o.length;++S){var E=o[S];T[E[0]]===void 0&&(T[E[0]]=E[1]),E[2]==="n"&&(T[E[0]]=Number(T[E[0]]))}}}function fix_read_opts(o){fix_opts_func([["cellNF",!1],["cellHTML",!0],["cellFormula",!0],["cellStyles",!1],["cellText",!0
308],["cellDates",!1],["sheetStubs",!1],["sheetRows",0,"n"],["bookDeps",!1],["bookSheets",!1],["bookProps",!1],["bookFiles",!1],["bookVBA",!1],["password",""],["WTF",!1]])(o)}function fix_write_opts(o){fix_opts_func([["cellDates",!1],["bookSST",!1],["bookType","xlsx"],["compression",!1],["WTF",!1]])(o)}function get_sheet_type(o){return RELS.WS.indexOf(o)>-1?"sheet":o==RELS.CS?"chart":o==RELS.DS?"dialog":o==RELS.MS?"macro":o&&o.length?o:"sheet"}function safe_parse_wbrels(o,u){if(!o)return 0;try{o=u.map(function(S){return S.id||(S.id=S.strRelID),[S.name,o["!id"][S.id].Target,get_sheet_type(o["!id"][S.id].Type)]})}catch{return null}return!o||o.length===0?null:o}function safe_parse_sheet(o,u,T,S,E,C,_,P,R,I,L,j){try{C[S]=parse_rels(getzipstr(o,T,!0),u);var M=getzipdata(o,u),D;switch(P){case"sheet":D=parse_ws(M,u,E,R,C[S],I,L,j);break;case"chart":if(D=parse_cs(M,u,E,R,C[S],I,L,j),!D||!D["!drawel"])break;var F=resolve_path(D["!drawel"].Target,u),N=get_rels_path(F),G=parse_drawing(getzipstr(o,F,!0),parse_rels(getzipstr(o,N,!0),F)),B=resolve_path(G,F),H=get_rels_path(B);D=parse_chart(getzipstr(o,B,!0),B,R,parse_rels(getzipstr(o,H,!0),B),I,D);break;case"macro":D=parse_ms(M,u,E,R,C[S],I,L,j);break;case"dialog":D=parse_ds(M,u,E,R,C[S],I,L,j);break;default:throw new Error("Unrecognized sheet type "+P)}_[S]=D;var O=[];C&&C[S]&&keys(C[S]).forEach(function(V){var U="";if(C[S][V].Type==RELS.CMNT){U=resolve_path(C[S][V].Target,u);var W=parse_cmnt(getzipdata(o,U,!0),U,R);if(!W||!W.length)return;sheet_insert_comments(D,W,!1)}C[S][V].Type==RELS.TCMNT&&(U=resolve_path(C[S][V].Target,u),O=O.concat(parse_tcmnt_xml(getzipdata(o,U,!0),R)))}),O&&O.length&&sheet_insert_comments(D,O,!0,R.people||[])}catch(V){if(R.WTF)throw V}}function strip_front_slash(o){return o.charAt(0)=="/"?o.slice(1):o}function parse_zip(o,u){if(make_ssf(),u=u||{},fix_read_opts(u),safegetzipfile(o,"META-INF/manifest.xml")||safegetzipfile(o,"objectdata.xml"))return parse_ods(o,u);if(safegetzipfile(o,"Index/Document.iwa")){if(typeof Uint8Array>"u")throw new Error("NUMBERS file parsing requires Uint8Array support");if(typeof parse_numbers_iwa<"u"){if(o.FileIndex)return parse_numbers_iwa(o);var T=CFB.utils.cfb_new();return zipentries(o).forEach(function(ae){zip_add_file(T,ae,getzipbin(o,ae))}),parse_numbers_iwa(T)}throw new Error("Unsupported NUMBERS file")}if(!safegetzipfile(o,"[Content_Types].xml"))throw safegetzipfile(o,"index.xml.gz")?new Error("Unsupported NUMBERS 08 file"):safegetzipfile(o,"index.xml")?new Error("Unsupported NUMBERS 09 file"):new Error("Unsupported ZIP file");var S=zipentries(o),E=parse_ct(getzipstr(o,"[Content_Types].xml")),C=!1,_,P;
vendor: 24,211 bytes, lines 308-310
308if(E.workbooks.length===0&&(P="xl/workbook.xml",getzipdata(o,P,!0)&&E.workbooks.push(P)),E.workbooks.length===0){if(P="xl/workbook.bin",!getzipdata(o,P,!0))throw new Error("Could not find workbook");E.workbooks.push(P),C=!0}E.workbooks[0].slice(-3)=="bin"&&(C=!0);var R={},I={};if(!u.bookSheets&&!u.bookProps){if(strs=[],E.sst)try{strs=parse_sst(getzipdata(o,strip_front_slash(E.sst)),E.sst,u)}catch(ae){if(u.WTF)throw ae}u.cellStyles&&E.themes.length&&(R=parse_theme(getzipstr(o,E.themes[0].replace(/^\//,""),!0)||"",E.themes[0],u)),E.style&&(I=parse_sty(getzipdata(o,strip_front_slash(E.style)),E.style,R,u))}E.links.map(function(ae){try{var re=parse_rels(getzipstr(o,get_rels_path(strip_front_slash(ae))),ae);return parse_xlink(getzipdata(o,strip_front_slash(ae)),re,ae,u)}catch{}});var L=parse_wb(getzipdata(o,strip_front_slash(E.workbooks[0])),E.workbooks[0],u),j={},M="";E.coreprops.length&&(M=getzipdata(o,strip_front_slash(E.coreprops[0]),!0),M&&(j=parse_core_props(M)),E.extprops.length!==0&&(M=getzipdata(o,strip_front_slash(E.extprops[0]),!0),M&&parse_ext_props(M,j,u)));var D={};(!u.bookSheets||u.bookProps)&&E.custprops.length!==0&&(M=getzipstr(o,strip_front_slash(E.custprops[0]),!0),M&&(D=parse_cust_props(M,u)));var F={};if((u.bookSheets||u.bookProps)&&(L.Sheets?_=L.Sheets.map(function(re){return re.name}):j.Worksheets&&j.SheetNames.length>0&&(_=j.SheetNames),u.bookProps&&(F.Props=j,F.Custprops=D),u.bookSheets&&typeof _<"u"&&(F.SheetNames=_),u.bookSheets?F.SheetNames:u.bookProps))return F;_={};var N={};u.bookDeps&&E.calcchain&&(N=parse_cc(getzipdata(o,strip_front_slash(E.calcchain)),E.calcchain));var G=0,B={},H,O;{var V=L.Sheets;j.Worksheets=V.length,j.SheetNames=[];for(var U=0;U!=V.length;++U)j.SheetNames[U]=V[U].name}var W=C?"bin":"xml",K=E.workbooks[0].lastIndexOf("/"),Y=(E.workbooks[0].slice(0,K+1)+"_rels/"+E.workbooks[0].slice(K+1)+".rels").replace(/^\//,"");safegetzipfile(o,Y)||(Y="xl/_rels/workbook."+W+".rels");var ee=parse_rels(getzipstr(o,Y,!0),Y.replace(/_rels.*/,"s5s"));(E.metadata||[]).length>=1&&(u.xlmeta=parse_xlmeta(getzipdata(o,strip_front_slash(E.metadata[0])),E.metadata[0],u)),(E.people||[]).length>=1&&(u.people=parse_people_xml(getzipdata(o,strip_front_slash(E.people[0])),u)),ee&&(ee=safe_parse_wbrels(ee,L.Sheets));var oe=getzipdata(o,"xl/worksheets/sheet.xml",!0)?1:0;e:for(G=0;G!=j.Worksheets;++G){var se="sheet";if(ee&&ee[G]?(H="xl/"+ee[G][1].replace(/[\/]?xl\//,""),safegetzipfile(o,H)||(H=ee[G][1]),safegetzipfile(o,H)||(H=Y.replace(/_rels\/.*$/,"")+ee[G][1]),se=ee[G][2]):(H="xl/worksheets/sheet"+(G+1-oe)+"."+W,H=H.replace(/sheet0\./,"sheet.")),O=H.replace(/^(.*)(\/)([^\/]*)$/,"$1/_rels/$3.rels"),u&&u.sheets!=null)switch(typeof u.sheets){case"number":if(G!=u.sheets)continue e;break;case"string":if(j.SheetNames[G].toLowerCase()!=u.sheets.toLowerCase())continue e;break;default:if(Array.isArray&&Array.isArray(u.sheets)){for(var Q=!1,ie=0;ie!=u.sheets.length;++ie)typeof u.sheets[ie]=="number"&&u.sheets[ie]==G&&(Q=1),typeof u.sheets[ie]=="string"&&u.sheets[ie].toLowerCase()==j.SheetNames[G].toLowerCase()&&(Q=1);if(!Q)continue e}}safe_parse_sheet(o,H,O,j.SheetNames[G],G,B,_,se,u,L,R,I)}return F={Directory:E,Workbook:L,Props:j,Custprops:D,Deps:N,Sheets:_,SheetNames:j.SheetNames,Strings:strs,Styles:I,Themes:R,SSF:dup(table_fmt)},u&&u.bookFiles&&(o.files?(F.keys=S,F.files=o.files):(F.keys=[],F.files={},o.FullPaths.forEach(function(ae,re){ae=ae.replace(/^Root Entry[\/]/,""),F.keys.push(ae),F.files[ae]=o.FileIndex[re]}))),u&&u.bookVBA&&(E.vba.length>0?F.vbaraw=getzipdata(o,strip_front_slash(E.vba[0]),!0):E.defaults&&E.defaults.bin===CT_VBA&&(F.vbaraw=getzipdata(o,"xl/vbaProject.bin",!0))),F}function parse_xlsxcfb(o,u){var T=u||{},S="Workbook",E=CFB.find(o,S);try{if(S="/!DataSpaces/Version",E=CFB.find(o,S),!E||!E.content)throw new Error("ECMA-376 Encrypted file missing "+S);if(parse_DataSpaceVersionInfo(E.content),S="/!DataSpaces/DataSpaceMap",E=CFB.find(o,S),!E||!E.content)throw new Error("ECMA-376 Encrypted file missing "+S);var C=parse_DataSpaceMap(E.content);if(C.length!==1||C[0].comps.length!==1||C[0].comps[0].t!==0||C[0].name!=="StrongEncryptionDataSpace"||C[0].comps[0].v!=="EncryptedPackage")throw new Error("ECMA-376 Encrypted file bad "+S);if(S="/!DataSpaces/DataSpaceInfo/StrongEncryptionDataSpace",E=CFB.find(o,S),!E||!E.content)throw new Error("ECMA-376 Encrypted file missing "+S);var _=parse_DataSpaceDefinition(E.content);if(_.length!=1||_[0]!="StrongEncryptionTransform")throw new Error("ECMA-376 Encrypted file bad "+S);if(S="/!DataSpaces/TransformInfo/StrongEncryptionTransform/!Primary",E=CFB.find(o,S),!E||!E.content)throw new Error("ECMA-376 Encrypted file missing "+S);parse_Primary(E.content)}catch{}if(S="/EncryptionInfo",E=CFB.find(o,S),!E||!E.content)throw new Error("ECMA-376 Encrypted file missing "+S);var P=parse_EncryptionInfo(E.content);if(S="/EncryptedPackage",E=CFB.find(o,S),!E||!E.content)throw new Error("ECMA-376 Encrypted file missing "+S);if(P[0]==4&&typeof decrypt_agile<"u")return decrypt_agile(P[1],E.content,T.password||"",T);if(P[0]==2&&typeof decrypt_std76<"u")return decrypt_std76(P[1],E.content,T.password||"",T);throw new Error("File is password-protected")}function write_zip(o,u){return u.bookType=="ods"?write_ods(o,u):u.bookType=="numbers"?write_numbers_iwa(o,u):u.bookType=="xlsb"?write_zip_xlsxb(o,u):write_zip_xlsx(o,u)}function write_zip_xlsxb(o,u){_shapeid=1024,o&&!o.SSF&&(o.SSF=dup(table_fmt)),o&&o.SSF&&(make_ssf(),SSF_load_table(o.SSF),u.revssf=evert_num(o.SSF),u.revssf[o.SSF[65535]]=0,u.ssf=o.SSF),u.rels={},u.wbrels={},u.Strings=[],u.Strings.Count=0,u.Strings.Unique=0,browser_has_Map?u.revStrings=new Map:(u.revStrings={},u.revStrings.foo=[],delete u.revStrings.foo);var T=u.bookType=="xlsb"?"bin":"xml",S=VBAFMTS.indexOf(u.bookType)>-1,E=new_ct();fix_write_opts(u=u||{});var C=zip_new(),_="",P=0;if(u.cellXfs=[],get_cell_style(u.cellXfs,{},{revssf:{General:0}}),o.Props||(o.Props={}),_="docProps/core.xml",zip_add_file(C,_,write_core_props(o.Props,u)),E.coreprops.push(_),add_rels(u.rels,2,_,RELS.CORE_PROPS),_="docProps/app.xml",!(o.Props&&o.Props.SheetNames))if(!o.Workbook||!o.Workbook.Sheets)o.Props.SheetNames=o.SheetNames;else{for(var R=[],I=0;I<o.SheetNames.length;++I)(o.Workbook.Sheets[I]||{}).Hidden!=2&&R.push(o.SheetNames[I]);o.Props.SheetNames=R}for(o.Props.Worksheets=o.Props.SheetNames.length,zip_add_file(C,_,write_ext_props(o.Props)),E.extprops.push(_),add_rels(u.rels,3,_,RELS.EXT_PROPS),o.Custprops!==o.Props&&keys(o.Custprops||{}).length>0&&(_="docProps/custom.xml",zip_add_file(C,_,write_cust_props(o.Custprops)),E.custprops.push(_),add_rels(u.rels,4,_,RELS.CUST_PROPS)),P=1;P<=o.SheetNames.length;++P){var L={"!id":{}},j=o.Sheets[o.SheetNames[P-1]],M=(j||{})["!type"]||"sheet";switch(M){case"chart":default:_="xl/worksheets/sheet"+P+"."+T,zip_add_file(C,_,write_ws(P-1,_,u,o,L)),E.sheets.push(_),add_rels(u.wbrels,-1,"worksheets/sheet"+P+"."+T,RELS.WS[0])}if(j){var D=j["!comments"],F=!1,N="";D&&D.length>0&&(N="xl/comments"+P+"."+T,zip_add_file(C,N,write_cmnt(D,N)),E.comments.push(N),add_rels(L,-1,"../comments"+P+"."+T,RELS.CMNT),F=!0),j["!legacy"]&&F&&zip_add_file(C,"xl/drawings/vmlDrawing"+P+".vml",write_comments_vml(P,j["!comments"])),delete j["!comments"],delete j["!legacy"]}L["!id"].rId1&&zip_add_file(C,get_rels_path(_),write_rels(L))}return u.Strings!=null&&u.Strings.length>0&&(_="xl/sharedStrings."+T,zip_add_file(C,_,write_sst(u.Strings,_,u)),E.strs.push(_),add_rels(u.wbrels,-1,"sharedStrings."+T,RELS.SST)),_="xl/workbook."+T,zip_add_file(C,_,write_wb(o,_)),E.workbooks.push(_),add_rels(u.rels,1,_,RELS.WB),_="xl/theme/theme1.xml",zip_add_file(C,_,write_theme(o.Themes,u)),E.themes.push(_),add_rels(u.wbrels,-1,"theme/theme1.xml",RELS.THEME),_="xl/styles."+T,zip_add_file(C,_,write_sty(o,_,u)),E.styles.push(_),add_rels(u.wbrels,-1,"styles."+T,RELS.STY),o.vbaraw&&S&&(_="xl/vbaProject.bin",zip_add_file(C,_,o.vbaraw),E.vba.push(_),add_rels(u.wbrels,-1,"vbaProject.bin",RELS.VBA)),_="xl/metadata."+T,zip_add_file(C,_,write_xlmeta(_)),E.metadata.push(_),add_rels(u.wbrels,-1,"metadata."+T,RELS.XLMETA),zip_add_file(C,"[Content_Types].xml",write_ct(E,u)),zip_add_file(C,"_rels/.rels",write_rels(u.rels)),zip_add_file(C,"xl/_rels/workbook."+T+".rels",write_rels(u.wbrels)),delete u.revssf,delete u.ssf,C}function write_zip_xlsx(o,u){_shapeid=1024,o&&!o.SSF&&(o.SSF=dup(table_fmt)),o&&o.SSF&&(make_ssf(),SSF_load_table(o.SSF),u.revssf=evert_num(o.SSF),u.revssf[o.SSF[65535]]=0,u.ssf=o.SSF),u.rels={},u.wbrels={},u.Strings=[],u.Strings.Count=0,u.Strings.Unique=0,browser_has_Map?u.revStrings=new Map:(u.revStrings={},u.revStrings.foo=[],delete u.revStrings.foo);var T="xml",S=VBAFMTS.indexOf(u.bookType)>-1,E=new_ct();fix_write_opts(u=u||{});var C=zip_new(),_="",P=0;if(u.cellXfs=[],get_cell_style(u.cellXfs,{},{revssf:{General:0}}),o.Props||(o.Props={}),_="docProps/core.xml",zip_add_file(C,_,write_core_props(o.Props,u)),E.coreprops.push(_),add_rels(u.rels,2,_,RELS.CORE_PROPS),_="docProps/app.xml",!(o.Props&&o.Props.SheetNames))if(!o.Workbook||!o.Workbook.Sheets)o.Props.SheetNames=o.SheetNames;else{for(var R=[],I=0;I<o.SheetNames.length;++I)(o.Workbook.Sheets[I]||{}).Hidden!=2&&R.push(o.SheetNames[I]);o.Props.SheetNames=R}o.Props.Worksheets=o.Props.SheetNames.length,zip_add_file(C,_,write_ext_props(o.Props)),E.extprops.push(_),add_rels(u.rels,3,_,RELS.EXT_PROPS),o.Custprops!==o.Props&&keys(o.Custprops||{}).length>0&&(_="docProps/custom.xml",zip_add_file(C,_,write_cust_props(o.Custprops)),E.custprops.push(_),add_rels(u.rels,4,_,RELS.CUST_PROPS));var L=["SheetJ5"];for(u.tcid=0,P=1;P<=o.SheetNames.length;++P){var j={"!id":{}},M=o.Sheets[o.SheetNames[P-1]],D=(M||{})["!type"]||"sheet";switch(D){case"chart":default:_="xl/worksheets/sheet"+P+"."+T,zip_add_file(C,_,write_ws_xml(P-1,u,o,j)),E.sheets.push(_),add_rels(u.wbrels,-1,"worksheets/sheet"+P+"."+T,RELS.WS[0])}if(M){var F=M["!comments"],N=!1,G="";if(F&&F.length>0){var B=!1;F.forEach(function(H){H[1].forEach(function(O){O.T==!0&&(B=!0)})}),B&&(G="xl/threadedComments/threadedComment"+P+"."+T,zip_add_file(C,G,write_tcmnt_xml(F,L,u)),E.threadedcomments.push(G),add_rels(j,-1,"../threadedComments/threadedComment"+P+"."+T,RELS.TCMNT)),G="xl/comments"+P+"."+T,zip_add_file(C,G,write_comments_xml(F)),E.comments.push(G),add_rels(j,-1,"../comments"+P+"."+T,RELS.CMNT),N=!0}M["!legacy"]&&N&&zip_add_file(C,"xl/drawings/vmlDrawing"+P+".vml",write_comments_vml(P,M["!comments"])),delete M["!comments"],delete M["!legacy"]}j["!id"].rId1&&zip_add_file(C,get_rels_path(_),write_rels(j))}return u.Strings!=null&&u.Strings.length>0&&(_="xl/sharedStrings."+T,zip_add_file(C,_,write_sst_xml(u.Strings,u)),E.strs.push(_),add_rels(u.wbrels,-1,"sharedStrings."+T,RELS.SST)),_="xl/workbook."+T,zip_add_file(C,_,write_wb_xml(o)),E.workbooks.push(_),add_rels(u.rels,1,_,RELS.WB),_="xl/theme/theme1.xml",zip_add_file(C,_,write_theme(o.Themes,u)),E.themes.push(_),add_rels(u.wbrels,-1,"theme/theme1.xml",RELS.THEME),_="xl/styles."+T,zip_add_file(C,_,write_sty_xml(o,u)),E.styles.push(_),add_rels(u.wbrels,-1,"styles."+T,RELS.STY),o.vbaraw&&S&&(_="xl/vbaProject.bin",zip_add_file(C,_,o.vbaraw),E.vba.push(_),add_rels(u.wbrels,-1,"vbaProject.bin",RELS.VBA)),_="xl/metadata."+T,zip_add_file(C,_,write_xlmeta_xml()),E.metadata.push(_),add_rels(u.wbrels,-1,"metadata."+T,RELS.XLMETA),L.length>1&&(_="xl/persons/person.xml",zip_add_file(C,_,write_people_xml(L)),E.people.push(_),add_rels(u.wbrels,-1,"persons/person.xml",RELS.PEOPLE)),zip_add_file(C,"[Content_Types].xml",write_ct(E,u)),zip_add_file(C,"_rels/.rels",write_rels(u.rels)),zip_add_file(C,"xl/_rels/workbook."+T+".rels",write_rels(u.wbrels)),delete u.revssf,delete u.ssf,C}function firstbyte(o,u){var T="";switch((u||{}).type||"base64"){case"buffer":return[o[0],o[1],o[2],o[3],o[4],o[5],o[6],o[7]];case"base64":T=Base64_decode(o.slice(0,12));break;case"binary":T=o;break;case"array":return[o[0],o[1],o[2],o[3],o[4],o[5],o[6],o[7]];default:throw new Error("Unrecognized type "+(u&&u.type||"undefined"))}return[T.charCodeAt(0),T.charCodeAt(1),T.charCodeAt(2),T.charCodeAt(3),T.charCodeAt(4),T.charCodeAt(5),T.charCodeAt(6),T.charCodeAt(7)]}function read_cfb(o,u){return CFB.find(o,"EncryptedPackage")?parse_xlsxcfb(o,u):parse_xlscfb(o,u)}function read_zip(o,u){var T,S=o,E=u||{};return E.type||(E.type=has_buf&&Buffer.isBuffer(o)?"buffer":"base64"),T=zip_read(S,E),parse_zip(T,E)}function read_plaintext(o,u){var T=0;e:for(;T<o.length;)switch(o.charCodeAt(T)){case 10:case 13:case 32:++T;break;case 60:return parse_xlml(o.slice(T),u);default:break e}return PRN.to_workbook(o,u)}function read_plaintext_raw(o,u){var T="",S=firstbyte(o,u);switch(u.type){case"base64":T=Base64_decode(o);break;case"binary":T=o;break;case"buffer":T=o.toString("binary");break;case"array":T=cc2str(o);break;default:throw new Error("Unrecognized type "+u.type)}return S[0]==239&&S[1]==187&&S[2]==191&&(T=utf8read(T)),u.type="binary",read_plaintext(T,u)}function read_utf16(o,u){var T=o;return u.type=="base64"&&(T=Base64_decode(T)),T=$cptable.utils.decode(1200,T.slice(2),"str"),u.type="binary",read_plaintext(T,u)}function bstrify(o){return o.match(/[^\x00-\x7F]/)?utf8write(o):o}function read_prn(o,u,T,S){return S?(T.type="string",PRN.to_workbook(o,T)):PRN.to_workbook(u,T)}function readSync(o,u){reset_cp();var T=u||{};if(typeof ArrayBuffer<"u"&&o instanceof ArrayBuffer)return readSync(new Uint8Array(o),(T=dup(T),T.type="array",T));typeof Uint8Array<"u"&&o instanceof Uint8Array&&!T.type&&(T.type=typeof Deno<"u"?"buffer":"array");var S=o,E=[0,0,0,0],C=!1;if(T.cellStyles&&(T.cellNF=!0,T.sheetStubs=!0),_ssfopts={},T.dateNF&&(_ssfopts.dateNF=T.dateNF),T.type||(T.type=has_buf&&Buffer.isBuffer(o)?"buffer":"base64"),T.type=="file"&&(T.type=has_buf?"buffer":"binary",S=read_binary(o),typeof Uint8Array<"u"&&!has_buf&&(T.type="array")),T.type=="string"&&(C=!0,T.type="binary",T.codepage=65001,S=bstrify(o)),T.type=="array"&&typeof Uint8Array<"u"&&o instanceof Uint8Array&&typeof ArrayBuffer<"u"){var _=new ArrayBuffer(3),P=new Uint8Array(_);if(P.foo="bar",!P.foo)return T=dup(T),T.type="array",readSync(ab2a(S),T)}switch((E=firstbyte(S,T))[0]){case 208:if(E[1]===207&&E[2]===17&&E[3]===224&&E[4]===161&&E[5]===177&&E[6]===26&&E[7]===225)return read_cfb(CFB.read(S,T),T);break;case 9:if(E[1]<=8)return parse_xlscfb(S,T);break;case 60:return parse_xlml(S,T);case 73:if(E[1]===73&&E[2]===42&&E[3]===0)throw new Error("TIFF Image File is not a spreadsheet");if(E[1]===68)return read_wb_ID(S,T);break;case 84:if(E[1]===65&&E[2]===66&&E[3]===76)return DIF.to_workbook(S,T);break;case 80:return E[1]===75&&E[2]<9&&E[3]<9?read_zip(S,T):read_prn(o,S,T,C);case 239:return E[3]===60?parse_xlml(S,T):read_prn(o,S,T,C);case 255:if(E[1]===254)return read_utf16(S,T);if(E[1]===0&&E[2]===2&&E[3]===0)return WK_.to_workbook(S,T);break;case 0:if(E[1]===0&&(E[2]>=2&&E[3]===0||E[2]===0&&(E[3]===8||E[3]===9)))return WK_.to_workbook(S,T);break;case 3:case 131:case 139:case 140:return DBF.to_workbook(S,T);case 123:if(E[1]===92&&E[2]===114&&E[3]===116)return RTF.to_workbook(S,T);break;case 10:case 13:case 32:return read_plaintext_raw(S,T);case 137:if(E[1]===80&&E[2]===78&&E[3]===71)throw new Error("PNG Image File is not a spreadsheet");break}return DBF_SUPPORTED_VERSIONS.indexOf(E[0])>-1&&E[2]<=12&&E[3]<=31?DBF.to_workbook(S,T):read_prn(o,S,T,C)}function readFileSync(o,u){var T=u||{};return T.type="file",readSync(o,T)}function write_cfb_ctr(o,u){switch(u.type){case"base64":case"binary":break;case"buffer":case"array":u.type="";break;case"file":return write_dl(u.file,CFB.write(o,{type:has_buf?"buffer":""}));case"string":throw new Error("'string' output type invalid for '"+u.bookType+"' files");default:throw new Error("Unrecognized type "+u.type)}return CFB.write(o,u)}function write_zip_type(o,u){var T=dup(u||{}),S=write_zip(o,T);return write_zip_denouement(S,T)}function write_zip_typeXLSX(o,u){var T=dup(u||{}),S=write_zip_xlsx(o,T);return write_zip_denouement(S,T)}function write_zip_denouement(o,u){var T={},S=has_buf?"nodebuffer":typeof Uint8Array<"u"?"array":"string";if(u.compression&&(T.compression="DEFLATE"),u.password)T.type=S;else switch(u.type){case"base64":T.type="base64";break;case"binary":T.type="string";break;case"string":throw new Error("'string' output type invalid for '"+u.bookType+"' files");case"buffer":case"file":T.type=S;break;default:throw new Error("Unrecognized type "+u.type)}var E=o.FullPaths?CFB.write(o,{fileType:"zip",type:{nodebuffer:"buffer",string:"binary"}[T.type]||T.type,compression:!!u.compression}):o.generate(T);if(typeof Deno<"u"&&typeof E=="string"){if(u.type=="binary"||u.type=="base64")return E;E=new Uint8Array(s2ab(E))}return u.password&&typeof encrypt_agile<"u"?write_cfb_ctr(encrypt_agile(E,u.password),u):u.type==="file"?write_dl(u.file,E):u.type=="string"?utf8read(E):E}function write_cfb_type(o,u){var T=u||{},S=write_xlscfb(o,T);return write_cfb_ctr(S,T)}function write_string_type(o,u,T){T||(T="");var S=T+o;switch(u.type){case"base64":return Base64_encode(utf8write(S));case"binary":return utf8write(S);case"string":return o;case"file":return write_dl(u.file,S,"utf8");case"buffer":return has_buf?Buffer_from(S,"utf8"):typeof TextEncoder<"u"?new TextEncoder().encode(S):write_string_type(S,{type:"binary"}).split("").map(function(E){return E.charCodeAt(0)})}throw new Error("Unrecognized type "+u.type)}function write_stxt_type(o,u){switch(u.type){case"base64":return Base64_encode(o);case"binary":return o;case"string":return o;case"file":return write_dl(u.file,o,"binary");case"buffer":return has_buf?Buffer_from(o,"binary"):o.split("").map(function(T){return T.charCodeAt(0)})}throw new Error("Unrecognized type "+u.type)}function write_binary_type(o,u){switch(u.type){case"string":case"base64":case"binary":for(var T="",S=0;S<o.length;++S)T+=String.fromCharCode(o[S]);return u.type=="base64"?Base64_encode(T):u.type=="string"?utf8read(T):T;case"file":return write_dl(u.file,o);case"buffer":return o;default:throw new Error("Unrecognized type "+u.type)}}function writeSyncXLSX(o,u){reset_cp(),check_wb(o);var T=dup(u||{});if(T.cellStyles&&(T.cellNF=!0,T.sheetStubs=!0),T.type=="array"){T.type="binary";var S=writeSyncXLSX(o,T);return T.type="array",s2ab(S)}return write_zip_typeXLSX(o,T)}function writeSync(o,u){reset_cp(),check_wb(o);var T=dup(u||{});if(T.cellStyles&&(T.cellNF=!0,T.sheetStubs=!0),T.type=="array"){T.type="binary";var S=writeSync(o,T);return T.type="array",s2ab(S)}var E=0;if(T.sheet&&(typeof T.sheet=="number"?E=T.sheet:E=o.SheetNames.indexOf(T.sheet),!o.SheetNames[E]))throw new Error("Sheet not found: "+T.sheet+" : "+typeof T.sheet);switch(T.bookType||"xlsb"){case"xml":case"xlml":return write_string_type(write_xlml(o,T),T);case"slk":case"sylk":return write_string_type(SYLK.from_sheet(o.Sheets[o.SheetNames[E]],T),T);case"htm":case"html":return write_string_type(sheet_to_html(o.Sheets[o.SheetNames[E]],T),T);case"txt":return write_stxt_type(sheet_to_txt(o.Sheets[o.SheetNames[E]],T),T);case"csv":return write_string_type(sheet_to_csv(o.Sheets[o.SheetNames[E]],T),T,"\uFEFF");case"dif":return write_string_type(DIF.from_sheet(o.Sheets[o.SheetNames[E]],T),T);case"dbf":return write_binary_type(DBF.from_sheet(o.Sheets[o.SheetNames[E]],T),T);case"prn":return write_string_type(PRN.from_sheet(o.Sheets[o.SheetNames[E]],T),T);case"rtf":return write_string_type(RTF.from_sheet(o.Sheets[o.SheetNames[E]],T),T);case"eth":return write_string_type(ETH.from_sheet(o.Sheets[o.SheetNames[E]],T),T);case"fods":return write_string_type(write_ods(o,T),T);case"wk1":return write_binary_type(WK_.sheet_to_wk1(o.Sheets[o.SheetNames[E]],T),T);case"wk3":return write_binary_type(WK_.book_to_wk3(o,T),T);case"biff2":T.biff||(T.biff=2);case"biff3":T.biff||(T.biff=3);case"biff4":return T.biff||(T.biff=4),write_binary_type(write_biff_buf(o,T),T);case"biff5":T.biff||(T.biff=5);case"biff8":case"xla":case"xls":return T.biff||(T.biff=8),write_cfb_type(o,T);case"xlsx":case"xlsm":case"xlam":case"xlsb":case"numbers":case"ods":return write_zip_type(o,T);default:throw new Error("Unrecognized bookType |"+T.bookType+"|")}}function resolve_book_type(o){if(!o.bookType){var u={xls:"biff8",htm:"html",slk:"sylk",socialcalc:"eth",Sh33tJS:"WTF"},T=o.file.slice(o.file.lastIndexOf(".")).toLowerCase();T.match(/^\.[a-z]+$/)&&(o.bookType=T.slice(1)),o.bookType=u[o.bookType]||o.bookType}}function writeFileSync(o,u,T){var S=T||{};return S.type="file",S.file=u,resolve_book_type(S),writeSync(o,S)}function writeFileSyncXLSX(o,u,T){var S=T||{};return S.type="file",S.file=u,resolve_book_type(S),writeSyncXLSX(o,S)}function writeFileAsync(o,u,T,S){var E=T||{};E.type="file",E.file=o,resolve_book_type(E),E.type="buffer";var C=S;return C instanceof Function||(C=T),_fs.writeFile(o,writeSync(u,E),C)}function make_json_row(o,u,T,S,E,C,_,P){var R=encode_row(T),I=P.defval,L=P.raw||!Object.prototype.hasOwnProperty.call(P,"raw"),j=!0,M=E===1?[]:{};if(E!==1)if(Object.defineProperty)try{Object.defineProperty(M,"__rowNum__",{value:T,enumerable:!1})}catch{M.__rowNum__=T}else M.__rowNum__=T;if(!_||o[T])for(var D=u.s.c;D<=u.e.c;++D){var F=_?o[T][D]:o[S[D]+R];if(F===void 0||F.t===void 0){if(I===void 0)continue;C[D]!=null&&(M[C[D]]=I);continue}var N=F.v;switch(F.t){case"z":if(N==null)break;continue;case"e":N=N==0?null:void 0;break;case"s":case"d":case"b":case"n":break;default:throw new Error("unrecognized type "+F.t)}if(C[D]!=null){if(N==null)if(F.t=="e"&&N===null)M[C[D]]=null;else if(I!==void 0)M[C[D]]=I;else if(L&&N===null)M[C[D]]=null;else continue;else M[C[D]]=L&&(F.t!=="n"||F.t==="n"&&P.rawNumbers!==!1)?N:format_cell(F,N,P);N!=null&&(j=!1)}}return{row:M,isempty:j}}function sheet_to_json(o,u){if(o==null||o["!ref"]==null)return[];var T={t:"n",v:0},S=0,E=1,C=[],_=0,P="",R={s:{r:0,c:0},e:{r:0,c:0}},I=u||{},L=I.range!=null?I.range:o["!ref"];switch(I.header===1?S=1:I.header==="A"?S=2:Array.isArray(I.header)?S=3:I.header==null&&(S=0),typeof L){case"string":R=safe_decode_range(L);break;case"number":R=safe_decode_range(o["!ref"]),R.s.r=L;break;default:R=L}S>0&&(E=0);var j=encode_row(R.s.r),M=[],D=[],F=0,N=0,G=Array.isArray(o),B=R.s.r,H=0,O={};G&&!o[B]&&(o[B]=[]);var V=I.skipHidden&&o["!cols"]||[],U=I.skipHidden&&o["!rows"]||[];for(H=R.s.c;H<=R.e.c;++H)if(!(V[H]||{}).hidden)switch(M[H]=encode_col(H),T=G?o[B][H]:o[M[H]+j],S){case 1:C[H]=H-R.s.c;break;case 2:C[H]=M[H];break;case 3:C[H]=I.header[H-R.s.c];break;default:if(T==null&&(T={w:"__EMPTY",t:"s"}),P=_=format_cell(T,null,I),N=O[_]||0,!N)O[_]=1;else{do P=_+"_"+N++;while(O[P]);O[_]=N,O[P]=1}C[H]=P}for(B=R.s.r+E;B<=R.e.r;++B)if(!(U[B]||{}).hidden){var W=make_json_row(o,R,B,M,S,C,G,I);(W.isempty===!1||(S===1?I.blankrows!==!1:I.blankrows))&&(D[F++]=W.row)}return D.length=F,D}var qreg=/"/g;function make_csv_row(o,u,T,S,E,C,_,P){for(var R=!0,I=[],L="",j=encode_row(T),M=u.s.c;M<=u.e.c;++M)if(S[M]){var D=P.dense?(o[T]||[])[M]:o[S[M]+j];if(D==null)L="";else if(D.v!=null){R=!1,L=""+(P.rawNumbers&&D.t=="n"?D.v:format_cell(D,null,P));for(var F=0,N=0;F!==L.length;++F)if((N=L.charCodeAt(F))===E||N===C||N===34||P.forceQuotes){L='"'+L.replace(qreg,'""')+'"';break}L=="ID"&&(L='"ID"')}else D.f!=null&&!D.F?(R=!1,L="="+D.f,L.indexOf(",")>=0&&(L='"'+L.replace(qreg,'""')+'"')):L="";I.push(L)}return P.blankrows===!1&&R?null:I.join(_)}function sheet_to_csv(o,u){var T=[],S=u??{};if(o==null||o["!ref"]==null)return"";var E=safe_decode_range(o["!ref"]),C=S.FS!==void 0?S.FS:",",_=C.charCodeAt(0),P=S.RS!==void 0?S.RS:`
309`,R=P.charCodeAt(0),I=new RegExp((C=="|"?"\\|":C)+"+$"),L="",j=[];S.dense=Array.isArray(o);for(var M=S.skipHidden&&o["!cols"]||[],D=S.skipHidden&&o["!rows"]||[],F=E.s.c;F<=E.e.c;++F)(M[F]||{}).hidden||(j[F]=encode_col(F));for(var N=0,G=E.s.r;G<=E.e.r;++G)(D[G]||{}).hidden||(L=make_csv_row(o,E,G,j,_,R,C,S),L!=null&&(S.strip&&(L=L.replace(I,"")),(L||S.blankrows!==!1)&&T.push((N++?P:"")+L)));return delete S.dense,T.join("")}function sheet_to_txt(o,u){u||(u={}),u.FS="	",u.RS=`
310`;var T=sheet_to_csv(o,u);if(typeof $cptable>"u"||u.type=="string")return T;var S=$cptable.utils.encode(1200,T,"str");return"ÿþ"+S}function sheet_to_formulae(o){var u="",T,S="";if(o==null||o["!ref"]==null)return[];var E=safe_decode_range(o["!ref"]),C="",_=[],P,R=[],I=Array.isArray(o);for(P=E.s.c;P<=E.e.c;++P)_[P]=encode_col(P);for(var L=E.s.r;L<=E.e.r;
310++L)for(C=encode_row(L),P=E.s.c;P<=E.e.c;++P)if(u=_[P]+C,T=I?(o[L]||[])[P]:o[u],S="",T!==void 0){if(T.F!=null){if(u=T.F,!T.f)continue;S=T.f,u.indexOf(":")==-1&&(u=u+":"+u)}if(T.f!=null)S=T.f;else{if(T.t=="z")continue;if(T.t=="n"&&T.v!=null)S=""+T.v;else if(T.t=="b")S=T.v?"TRUE":"FALSE";else if(T.w!==void 0)S="'"+T.w;else{if(T.v===void 0)continue;T.t=="s"?S="'"+T.v:S=""+T.v}}R[R.length]=u+"="+S}return R}function sheet_add_json(o,u,T){var S=T||{},E=+!S.skipHeader,C=o||{},_=0,P=0;if(C&&S.origin!=null)if(typeof S.origin=="number")_=S.origin;else{var R=typeof S.origin=="string"?decode_cell(S.origin):S.origin;_=R.r,P=R.c}var I,L={s:{c:0,r:0},e:{c:P,r:_+u.length-1+E}};if(C["!ref"]){var j=safe_decode_range(C["!ref"]);L.e.c=Math.max(L.e.c,j.e.c),L.e.r=Math.max(L.e.r,j.e.r),_==-1&&(_=j.e.r+1,L.e.r=_+u.length-1+E)}else _==-1&&(_=0,L.e.r=u.length-1+E);var M=S.header||[],D=0;u.forEach(function(N,G){keys(N).forEach(function(B){(D=M.indexOf(B))==-1&&(M[D=M.length]=B);var H=N[B],O="z",V="",U=encode_cell({c:P+D,r:_+G+E});I=ws_get_cell_stub(C,U),H&&typeof H=="object"&&!(H instanceof Date)?C[U]=H:(typeof H=="number"?O="n":typeof H=="boolean"?O="b":typeof H=="string"?O="s":H instanceof Date?(O="d",S.cellDates||(O="n",H=datenum(H)),V=S.dateNF||table_fmt[14]):H===null&&S.nullError&&(O="e",H=0),I?(I.t=O,I.v=H,delete I.w,delete I.R,V&&(I.z=V)):C[U]=I={t:O,v:H},V&&(I.z=V))})}),L.e.c=Math.max(L.e.c,P+M.length-1);var F=encode_row(_);if(E)for(D=0;D<M.length;++D)C[encode_col(D+P)+F]={t:"s",v:M[D]};return C["!ref"]=encode_range(L),C}function json_to_sheet(o,u){return sheet_add_json(null,o,u)}function ws_get_cell_stub(o,u,T){if(typeof u=="string"){if(Array.isArray(o)){var S=decode_cell(u);return o[S.r]||(o[S.r]=[]),o[S.r][S.c]||(o[S.r][S.c]={t:"z"})}return o[u]||(o[u]={t:"z"})}return typeof u!="number"?ws_get_cell_stub(o,encode_cell(u)):ws_get_cell_stub(o,encode_cell({r:u,c:T||0}))}function wb_sheet_idx(o,u){if(typeof u=="number"){if(u>=0&&o.SheetNames.length>u)return u;throw new Error("Cannot find sheet # "+u)}else if(typeof u=="string"){var T=o.SheetNames.indexOf(u);if(T>-1)return T;throw new Error("Cannot find sheet name |"+u+"|")}else throw new Error("Cannot find sheet |"+u+"|")}function book_new(){return{SheetNames:[],Sheets:{}}}function book_append_sheet(o,u,T,S){var E=1;if(!T)for(;E<=65535&&o.SheetNames.indexOf(T="Sheet"+E)!=-1;++E,T=void 0);if(!T||o.SheetNames.length>=65535)throw new Error("Too many worksheets");if(S&&o.SheetNames.indexOf(T)>=0){var C=T.match(/(^.*?)(\d+)$/);E=C&&+C[2]||0;var _=C&&C[1]||T;for(++E;E<=65535&&o.SheetNames.indexOf(T=_+E)!=-1;++E);}if(check_ws_name(T),o.SheetNames.indexOf(T)>=0)throw new Error("Worksheet with name |"+T+"| already exists!");return o.SheetNames.push(T),o.Sheets[T]=u,T}function book_set_sheet_visibility(o,u,T){o.Workbook||(o.Workbook={}),o.Workbook.Sheets||(o.Workbook.Sheets=[]);var S=wb_sheet_idx(o,u);switch(o.Workbook.Sheets[S]||(o.Workbook.Sheets[S]={}),T){case 0:case 1:case 2:break;default:throw new Error("Bad sheet visibility setting "+T)}o.Workbook.Sheets[S].Hidden=T}function cell_set_number_format(o,u){return o.z=u,o}function cell_set_hyperlink(o,u,T){return u?(o.l={Target:u},T&&(o.l.Tooltip=T)):delete o.l,o}function cell_set_internal_link(o,u,T){return cell_set_hyperlink(o,"#"+u,T)}function cell_add_comment(o,u,T){o.c||(o.c=[]),o.c.push({t:u,a:T||"SheetJS"})}function sheet_set_array_formula(o,u,T,S){for(var E=typeof u!="string"?u:safe_decode_range(u),C=typeof u=="string"?u:encode_range(u),_=E.s.r;_<=E.e.r;++_)for(var P=E.s.c;P<=E.e.c;++P){var R=ws_get_cell_stub(o,_,P);R.t="n",R.F=C,delete R.v,_==E.s.r&&P==E.s.c&&(R.f=T,S&&(R.D=!0))}return o}var utils={encode_col,encode_row,encode_cell,encode_range,decode_col,decode_row,split_cell,decode_cell,decode_range,format_cell,sheet_add_aoa,sheet_add_json,sheet_add_dom,aoa_to_sheet,json_to_sheet,table_to_sheet:parse_dom_table,table_to_book,sheet_to_csv,sheet_to_txt,sheet_to_json,sheet_to_html,sheet_to_formulae,sheet_to_row_object_array:sheet_to_json,sheet_get_cell:ws_get_cell_stub,book_new,book_append_sheet,book_set_sheet_visibility,cell_set_number_format,cell_set_hyperlink,cell_set_internal_link,cell_add_comment,sheet_set_array_formula,consts:{SHEET_VISIBLE:0,SHEET_HIDDEN:1,SHEET_VERY_HIDDEN:2}},_Readable;function set_readable(o){_Readable=o}function write_csv_stream(o,u){var T=_Readable(),S=u??{};if(o==null||o["!ref"]==null)return T.push(null),T;var E=safe_decode_range(o["!ref"]),C=S.FS!==void 0?S.FS:",",_=C.charCodeAt(0),P=S.RS!==void 0?S.RS:`
311`,R=P.charCodeAt(0),I=new RegExp((C=="|"?"\\|":C)+"+$"),L="",j=[];S.dense=Array.isArray(o);for(var M=S.skipHidden&&o["!cols"]||[],D=S.skipHidden&&o["!rows"]||[],F=E.s.c;F<=E.e.c;++F)(M[F]||{}).hidden||(j[F]=encode_col(F));var N=E.s.r,G=!1,B=0;return T._read=function(){if(!G)return G=!0,T.push("\uFEFF");for(;N<=E.e.r;)if(++N,!(D[N-1]||{}).hidden&&(L=make_csv_row(o,E,N-1,j,_,R,C,S),L!=null&&(S.strip&&(L=L.replace(I,"")),L||S.blankrows!==!1)))return T.push((B++?P:"")+L);return T.push(null)},T}function write_html_stream(o,u){var T=_Readable(),S=u||{},E=S.header!=null?S.header:HTML_BEGIN,C=S.footer!=null?S.footer:HTML_END;T.push(E);var _=decode_range(o["!ref"]);
311S.dense=Array.isArray(o),T.push(make_html_preamble(o,_,S));var P=_.s.r,R=!1;return T._read=function(){if(P>_.e.r)return R||(R=!0,T.push("</table>"+C)),T.push(null);for(;P<=_.e.r;){T.push(make_html_row(o,_,P,S)),++P;break}},T}function write_json_stream(o,u){var T=_Readable({objectMode:!0});if(o==null||o["!ref"]==null)return T.push(null),T;var S={t:"n",v:0},E=0,C=1,_=[],P=0,R="",I={s:{r:0,c:0},e:{r:0,c:0}},L=u||{},j=L.range!=null?L.range:o["!ref"];switch(L.header===1?E=1:L.header==="A"?E=2:Array.isArray(L.header)&&(E=3),typeof j){case"string":I=safe_decode_range(j);break;case"number":I=safe_decode_range(o["!ref"]),I.s.r=j;break;default:I=j}E>0&&(C=0);var M=encode_row(I.s.r),D=[],F=0,N=Array.isArray(o),G=I.s.r,B=0,H={};N&&!o[G]&&(o[G]=[]);var O=L.skipHidden&&o["!cols"]||[],V=L.skipHidden&&o["!rows"]||[];for(B=I.s.c;B<=I.e.c;++B)if(!(O[B]||{}).hidden)switch(D[B]=encode_col(B),S=N?o[G][B]:o[D[B]+M],E){case 1:_[B]=B-I.s.c;break;case 2:_[B]=D[B];break;case 3:_[B]=L.header[B-I.s.c];break;default:if(S==null&&(S={w:"__EMPTY",t:"s"}),R=P=format_cell(S,null,L),F=H[P]||0,!F)H[P]=1;else{do R=P+"_"+F++;while(H[R]);H[P]=F,H[R]=1}_[B]=R}return G=I.s.r+C,T._read=function(){for(;G<=I.e.r;)if(!(V[G-1]||{}).hidden){var U=make_json_row(o,I,G,D,E,_,N,L);if(++G,U.isempty===!1||(E===1?L.blankrows!==!1:L.blankrows)){T.push(U.row);return}}return T.push(null)},T}var __stream={to_json:write_json_stream,to_html:write_html_stream,to_csv:write_csv_stream,set_readable};const version=XLSX.version,xlsx=Object.freeze(Object.defineProperty({__proto__:null,CFB,SSF,parse_xlscfb,parse_zip,read:readSync,readFile:readFileSync,readFileSync,set_cptable,set_fs,stream:__stream,utils,version,write:writeSync,writeFile:writeFileSync,writeFileAsync,writeFileSync,writeFileXLSX:writeFileSyncXLSX,writeXLSX:writeSyncXLSX},Symbol.toStringTag,{value:"Module"}));function CopyTransferButton({text:o,sx:u}){const[T,S]=React$1.useState(!1),E=React$1.useRef(void 0);React$1.useEffect(()=>()=>clearTimeout(E.current),[]);const C=async()=>{try{await navigator.clipboard.writeText(o)}catch{const _=document.createElement("textarea");_.value=o,_.style.position="fixed",_.style.opacity="0",document.body.appendChild(_),_.select(),document.execCommand("copy"),document.body.removeChild(_)}S(!0),clearTimeout(E.current),E.current=setTimeout(()=>S(!1),2e3)};return jsxRuntimeExports.jsx(Button,{onClick:C,size:"small",variant:T?"contained":"outlined",color:T?"success":"error",startIcon:T?jsxRuntimeExports.jsx(CheckIcon,{}):jsxRuntimeExports.jsx(ContentCopyIcon,{}),sx:{fontWeight:700,px:1.5,py:.25,fontSize:"0.8rem",textTransform:"none",...u},children:T?"Đã copy!":"Copy nội dung"})}function ManualTransferAccordion({transferContent:o,amount:u,sx:T}){const{t:S}=useTranslation("common"),[E,C]=React$1.useState(!1);return jsxRuntimeExports.jsxs(Box,{sx:{width:"100%",border:"1px solid #cbd5e1",borderRadius:2,bgcolor:"#f8fafc",overflow:"hidden",...T},children:[jsxRuntimeExports.jsxs(Box,{onClick:()=>C(_=>!_),role:"button",tabIndex:0,onKeyDown:_=>{(_.key==="Enter"||_.key===" ")&&(_.preventDefault(),C(P=>!P))},sx:{display:"flex",alignItems:"center",gap:.75,px:1.25,py:.85,cursor:"pointer",userSelect:"none","&:hover":{bgcolor:"#eef2f7"}},children:[jsxRuntimeExports.jsx(ExpandMoreIcon,{sx:{fontSize:"1.1rem",color:"#64748b",transition:"transform .2s",transform:E?"rotate(180deg)":"none"}}),jsxRuntimeExports.jsx(Typography,{sx:{fontSize:"0.82rem",fontWeight:700,color:"#475569",lineHeight:1.3},children:S("manualTransfer.toggle","Không quét được mã QR? Chuyển khoản thủ công")})]}),jsxRuntimeExports.jsx(Collapse,{in:E,unmountOnExit:!0,children:jsxRuntimeExports.jsxs(Box,{sx:{px:1.25,pb:1.25,pt:.25,borderTop:"1px dashed #cbd5e1"},children:[jsxRuntimeExports.jsxs(Typography,{variant:"body2",sx:{color:"#334155",lineHeight:1.7,fontSize:"0.82rem"},children:[jsxRuntimeExports.jsx("strong",{children:S("proModal.bankLabel")})," ",PAYMENT_CONFIG.BANK_ID,jsxRuntimeExports.jsx("br",{}),jsxRuntimeExports.jsx("strong",{children:S("proModal.accountLabel")})," ",PAYMENT_CONFIG.ACCOUNT_NO,jsxRuntimeExports.jsx("br",{}),jsxRuntimeExports.jsx("strong",{children:S("proModal.ownerLabel")})," ",PAYMENT_CONFIG.ACCOUNT_NAME,u!==void 0&&jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsx("br",{}),jsxRuntimeExports.jsx("strong",{children:S("manualTransfer.amountLabel","💰 Số tiền:")}
311)," ",u.toLocaleString("vi-VN")," VNĐ"]})]}),jsxRuntimeExports.jsx(Typography,{sx:{mt:.85,fontSize:"0.78rem",fontWeight:700,color:"#b45309"},children:S("manualTransfer.contentLabel","Nội dung chuyển khoản — copy rồi dán, đừng gõ tay:")}),jsxRuntimeExports.jsx(Typography,{sx:{mt:.4,p:.75,bgcolor:"#fff",border:"1px solid #f59e0b",borderRadius:1,fontFamily:"monospace",fontWeight:900,color:"#b45309",fontSize:"0.92rem",wordBreak:"break-all",textAlign:"center"},children:o}),jsxRuntimeExports.jsx(Box,{sx:{mt:.75,textAlign:"center"},children:jsxRuntimeExports.jsx(CopyTransferButton,{text:o})})]})})]})}const MULTI_YEAR_DISCOUNTS=PAYMENT_CONFIG.MULTI_YEAR_DISCOUNTS||{};function parseEmails(o,u){const T=o.split(/[\s,;\n]+/).map(P=>P.trim().toLowerCase()).filter(Boolean),S=[],E=[],C=new Set([u]),_=/^[a-z0-9._%+\-]+@[a-z0-9.\-]+\.[a-z]{2,}$/;for(const P of T){if(!_.test(P)){E.push(P);continue}C.has(P)||(C.add(P),S.push(P))}return{valid:S,invalid:E}}function GroupPurchaseModal({open:o,onClose:u,feature:T,featureCode:S,basePrice:E,selectedYears:C,featureName:_}){const{t:P}=useTranslation("common"),{currentUser:R}=useAuth(),{toast:I}=useToast(),L=((R==null?void 0:R.email)||"").toLowerCase(),j=(R==null?void 0:R.uid)||"",[M,D]=React$1.useState(0),[F,N]=React$1.useState(C),[G,B]=React$1.useState(""),[H,O]=React$1.useState([]),[V,U]=React$1.useState([]),[W,K]=React$1.useState(""),[Y,ee]=React$1.useState(!1),[oe,se]=React$1.useState("waiting"),Q=React$1.useRef(null),[ie,ae]=React$1.useState(0),[re,J]=React$1.useState([]),[te,Z]=React$1.useState(""),[X,de]=React$1.useState(null),[he,ne]=React$1.useState("");React$1.useEffect(()=>{o||(Q.current&&(deleteDoc(Q.current).catch(()=>{}),Q.current=null),D(0),B(""),O([]),U([]),K(""),ee(!1),se("waiting"),ae(0),J([]),Z(""),de(null),ne(""),N(C))},[o,C]),React$1.useEffect(()=>{const{valid:ze,invalid:Ze}=parseEmails(G,L);O(ze),U(Ze)},[G,L]);const ue=L?[L,...H]:H,ce=ue.length,fe=getGroupDiscount(ce),ve=MULTI_YEAR_DISCOUNTS[F]||0,Te=(X==null?void 0:X.discount)||0,Se=Math.round(E*(1-Te/100)),ke=Math.round(ce*Se*F*(1-ve/100)),we=Math.round(ke*(1-fe/100)),Le=ce>0?Math.round(we/ce):E,pe=+(100-we/(ce*E*F)*100).toFixed(1),Me=getBonusMonths(T),Pe=H.length>=GROUP_MAX_MEMBERS,Ue=ce>=2,qe=()=>{const ze=utils.aoa_to_sheet([["email"],["[email protected]"],...Array(8).fill([""])]);ze["!cols"]=[{wch:35}];const Ze=utils.book_new();utils.book_append_sheet(Ze,ze,P("groupPurchaseModal.sheetName")),writeFileSync(Ze,P("groupPurchaseModal.templateFileName"))},Ie=ze=>{var rt;const Ze=(rt=ze.target.files)==null?void 0:rt[0];if(!Ze)return;const He=new FileReader;He.onload=it=>{var Qe;const st=new Uint8Array((Qe=it.target)==null?void 0:Qe.result),at=readSync(st,{type:"array"}),ot=at.Sheets[at.SheetNames[0]],Be=utils.sheet_to_json(ot,{header:1,defval:""}).map(Ge=>String(Ge[0]||"").trim().toLowerCase()).filter(Ge=>Ge&&Ge!=="email").join(`
312`);B(Ge=>Ge?Ge+`
313`+Be:Be)},He.readAsArrayBuffer(Ze),ze.target.value=""},Xe=async()=>{if(!(!j||ce<2)){ee(!0);try{const ze=Math.random().toString(36).substring(2,8).toUpperCase(),Ze=doc(db,"groupPurchaseRequests",`${j}_${ze}`),He=Timestamp.fromDate(new Date(Date.now()+24*60*60*1e3));await setDoc(Ze,{buyerUid:j,buyerEmail:L,groupId:ze,featureKey:T,featureCode:S,durationYears:F,recipientEmails:ue,recipientCount:ce,unitPricePerYear:E,groupDiscountPct:fe,multiYearDiscountPct:ve,promoCode:(X==null?void 0:X.code)||null,promoDiscountPct:Te,totalPrice:we,status:"pending",processedCount:0,failedEmails:[],createdAt:new Date().toISOString(),processedAt:null,expireAt:He}),Q.current=Ze,K(ze),D(2)}catch(ze){console.error("[GroupPurchase] setDoc failed:",ze),I.error(P("groupPurchaseModal.errorPrefix",{message:(ze==null?void 0:ze.message)||ze}))}finally{ee(!1)}}};React$1.useEffect(()=>{if(M!==2||!W||!j)return;const ze=onSnapshot(doc(db,"groupPurchaseRequests",`${j}_${W}`),Ze=>{if(!Ze.exists())return;const He=Ze.data();(He.status==="completed"||He.status==="completed_with_errors")&&(Q.current=null,se("completed"),ae(He.processedCount||0),J(He.failedEmails||[]),He.status==="completed"&&(I.success(P("groupPurchaseModal.unlockSuccessToast",{processed:He.processedCount,total:ce})),setTimeout(()=>{u(),window.location.reload()},2500)))});return()=>ze()},[M,W,j,ce,u,I,P]);const{transferContent:et,qrUrl:tt}=usePaymentQr({featureCode:S,basePrice:E,uid:j,appliedPromo:X,priceOverride:we,transferCodeOverride:`GRP${W}`}),Ye=W?tt:"";return jsxRuntimeExports.jsxs(Dialog,{open:o,onClose:u,maxWidth:"md",fullWidth:!0,PaperProps:{sx:{borderRadius:3}},children:[jsxRuntimeExports.jsxs(DialogTitle,{sx:{background:"linear-gradient(135deg, #16a34a, #15803d)",color:"#fff",fontWeight:"bold",py:1.5,display:"flex",alignItems:"center",gap:1},children:[jsxRuntimeExports.jsx(GroupsIcon,{}),P("groupPurchaseModal.title")]}),jsxRuntimeExports.jsxs(DialogContent,{sx:{pt:2,pb:1},children:[jsxRuntimeExports.jsx(Stepper,{activeStep:M,sx:{mb:2},children:[P("groupPurchaseModal.stepEmail"),P("groupPurchaseModal.stepConfirm"),P("groupPurchaseModal.stepPayment")].map(ze=>jsxRuntimeExports.jsx(Step,{children:jsxRuntimeExports.jsx(StepLabel,{children:ze})},ze))}),M===0&&jsxRuntimeExports.jsxs(Box,{sx:{display:"flex",gap:2},children:[jsxRuntimeExports.jsxs(Box,{sx:{flex:1,minWidth:0},children:[jsxRuntimeExports.jsx(Alert,{severity:"info",sx:{mb:1.5,py:.5},children:jsxRuntimeExports.jsx(Typography,{variant:"body2",children:jsxRuntimeExports.jsxs(Trans,{i18nKey:"groupPurchaseModal.infoAlert",values:{featureName:_},children:["Mua ",jsxRuntimeExports.jsx("strong",{children:_})," cho nhiều người — email của bạn tự động thêm vào."]})})}),jsxRuntimeExports.jsxs(Box,{sx:{mb:1.5,display:"flex",alignItems:"center",gap:1,flexWrap:"wrap"},children:[jsxRuntimeExports.jsx(Chip,{icon:jsxRuntimeExports.jsx(EmailIcon,{}),label:P("groupPurchaseModal.buyerLabel",{email:L}),color:"success",size:"small",sx:{fontWeight:700}}),jsxRuntimeExports.jsx(Typography,{variant:"caption",sx:{color:"#555"},children:jsxRuntimeExports.jsxs(Trans,{i18nKey:"groupPurchaseModal.memberCount",values:{count:H.length,total:ce},children:["+ ",H.length," email khác = ",jsxRuntimeExports.jsxs("strong",{children:[ce," người"]})]})})]}),jsxRuntimeExports.jsx(TextField,{multiline:!0,minRows:4,maxRows:10,fullWidth:!0,placeholder:P("groupPurchaseModal.placeholder"),value:G,onChange:ze=>B(ze.target.value),sx:{mb:1},size:"small"}),jsxRuntimeExports.jsxs(Box,{sx:{display:"flex",alignItems:"center",gap:1,mb:1.5,flexWrap:"wrap"},children:[jsxRuntimeExports.jsxs(Button,{component:"label",variant:"outlined",size:"small",sx:{fontSize:"0.78rem"},children:[P("groupPurchaseModal.uploadBtn"),jsxRuntimeExports.jsx("input",{type:"file",accept:".csv,.txt,.xlsx",hidden:!0,onChange:Ie})]}),jsxRuntimeExports.jsx(Button,{variant:"outlined",size:"small",onClick:qe,sx:{fontSize:"0.78rem",borderColor:"#0ea5e9",color:"#0369a1","&:hover":{bgcolor:"#f0f9ff",borderColor:"#0ea5e9"}},children:P("groupPurchaseModal.exportTemplateBtn")})]}),V.length>0&&jsxRuntimeExports.jsx(Alert,{severity:"warning",sx:{mb:1,py:.5},children:jsxRuntimeExports.jsx(Typography,{variant:"caption",children:P("groupPurchaseModal.invalidEmail
313s",{count:V.length,emails:V.slice(0,3).join(", ")+(V.length>3?"...":"")})})}),Pe&&jsxRuntimeExports.jsx(Alert,{severity:"error",sx:{mb:1,py:.5},children:jsxRuntimeExports.jsx(Typography,{variant:"caption",children:P("groupPurchaseModal.overLimit",{max:GROUP_MAX_MEMBERS})})}),jsxRuntimeExports.jsxs(Box,{sx:{display:"flex",gap:1,mb:1.5},children:[jsxRuntimeExports.jsx(TextField,{size:"small",placeholder:P("groupPurchaseModal.promoPlaceholder"),value:te,onChange:ze=>{Z(ze.target.value.toUpperCase()),ne("")},disabled:!!X,error:!!he,helperText:he,sx:{flex:1,bgcolor:"#fff",borderRadius:1},InputProps:{sx:{height:"36px"}}}),X?jsxRuntimeExports.jsx(Button,{variant:"outlined",color:"error",size:"small",onClick:()=>{de(null),Z(""),ne("")},sx:{height:"36px",minWidth:"60px"},children:P("groupPurchaseModal.promoDelete")}):jsxRuntimeExports.jsx(Button,{variant:"contained",color:"primary",size:"small",onClick:()=>{var He;const ze=te.trim().toUpperCase();if(!ze){ne(P("groupPurchaseModal.promoRequired"));return}const Ze=(He=PAYMENT_CONFIG.PROMO_CODES)==null?void 0:He[ze];Ze?(de({code:ze,discount:Ze}),ne("")):ne(P("groupPurchaseModal.promoInvalid"))},sx:{height:"36px",minWidth:"70px",flexShrink:0},children:P("groupPurchaseModal.promoApply")})]}),X&&jsxRuntimeExports.jsx(Chip,{label:P("groupPurchaseModal.promoApplied",{code:X.code,discount:X.discount}),color:"success",size:"small",sx:{mb:1.5}}),Ue&&jsxRuntimeExports.jsxs(Box,{sx:{p:1.5,bgcolor:"#f0fdf4",border:"1.5px solid #86efac",borderRadius:2},children:[jsxRuntimeExports.jsx(Typography,{variant:"body2",sx:{fontWeight:700,color:"#15803d",mb:.5},children:P("groupPurchaseModal.summaryTitle")}),jsxRuntimeExports.jsx(Typography,{variant:"body2",sx:{color:"#555",textDecoration:"line-through"},children:P("groupPurchaseModal.originalPrice",{price:(ce*E*F).toLocaleString("vi-VN")})}),Te>0&&jsxRuntimeExports.jsx(Typography,{variant:"body2",sx:{color:"#555"},children:P("groupPurchaseModal.promoDiscount",{discount:Te})}),ve>0&&jsxRuntimeExports.jsx(Typography,{variant:"body2",sx:{color:"#555"},children:P("groupPurchaseModal.multiYearDiscount",{years:F,discount:ve})}),jsxRuntimeExports.jsx(Typography,{variant:"body2",sx:{color:"#555"},children:P("groupPurchaseModal.groupDiscount",{count:ce,discount:fe.toFixed(1)})}),Me>0&&jsxRuntimeExports.jsx(Typography,{variant:"body2",sx:{color:"#16a34a",fontWeight:700},children:P("groupPurchaseModal.bonusMonths",{month:new Date().getMonth()+1,count:Me})}),jsxRuntimeExports.jsx(Typography,{variant:"body2",sx:{color:"#15803d",fontWeight:700},children:jsxRuntimeExports.jsx(Trans,{i18nKey:"groupPurchaseModal.totalDiscount",values:{discount:pe,price:Le.toLocaleString("vi-VN"),period:F>1?P("groupPurchaseModal.multiYearPeriod",{years:F}):P("groupPurchaseModal.yearPeriod"),bonus:Me>0?P("groupPurchaseModal.bonusSuffix",{count:Me}):""},components:{strong:jsxRuntimeExports.jsx("strong",{})}})}),jsxRuntimeExports.jsx(Typography,{variant:"h6",sx:{fontWeight:900,color:"#f44336",mt:.5},children:P("groupPurchaseModal.totalPayment",{price:we.toLocaleString("vi-VN")})})]})]}),jsxRuntimeExports.jsxs(Box,{sx:{width:200,flexShrink:0,display:"flex",flexDirection:"column",gap:1.5},children:[jsxRuntimeExports.jsxs(Box,{sx:{p:1.5,bgcolor:"#f8fafc",border:"1px solid #e2e8f0",borderRadius:2},children:[jsxRuntimeExports.jsx(Typography,{variant:"body2",sx:{fontWeight:700,color:"#1e293b",mb:1},children:P("groupPurchaseModal.yearsTitle")}),jsxRuntimeExports.jsx(Box,{sx:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:.75},children:[1,2,3,5].map(ze=>{const Ze=MULTI_YEAR_DISCOUNTS[ze],He=F===ze;return jsxRuntimeExports.jsxs(Button,{variant:He?"contained":"outlined",size:"small",onClick:()=>N(ze),sx:{flexDirection:"column",py:.75,px:.5,minWidth:0,lineHeight:1.2,fontWeight:700,fontSize:"0.82rem",color:He?"#fff":"#374151",bgcolor:He?"#16a34a":"transparent",borderColor:He?"#16a34a":"#d1d5db","&:hover":{bgcolor:He?"#15803d":"#f0fdf4",borderColor:"#16a34a"}},children:[P("groupPurchaseModal.yearsButton",{years:ze}),Ze>0&&jsxRuntimeExports.jsx(Typography,{component:"span",sx:{fontSize:"0.65rem",fontWeight:800,color:He?"#bbf7d0":"#16a34a",lineHeight:1},children:P("groupPurchaseModal.yearsDiscountBadge",{discount:Ze})})]},ze)})})]}),jsxRuntimeExports.jsxs(Box,{sx:{p:1.5,bgcolor:"#fefce8",border:"1px solid #fde68a",borderRadius:2},children:[jsxRuntimeExports.jsx(Typography,{variant:"body2",sx:{fontWeight:700,color:"#92400e",mb:.75},children:P("groupPurchaseModal.groupTableTitle")}),[{n:2},{n:5},{n:10},{n:20},{n:30},{n:50},{n:100}].map(({n:ze})=>jsxRuntimeExports.jsxs(Box,{sx:{display:"flex",justifyContent:"space-between",py:.2},children:[jsxRuntimeExports.jsx(Typography,{variant:"caption",sx:{color:"#555"},children:P("groupPurchaseModal.groupPeople",{count:ze})}),jsxRuntimeExports.jsxs(Typography,{variant:"caption",sx:{fontWeight:700,color:"#b45309"},children:["-",getGroupDiscount(ze).toFixed(0),"%"]})]},ze))]})]})]}),M===1&&jsxRuntimeExports.jsxs(Box,{children:[jsxRuntimeExports.jsx(Typography,{variant:"body2",sx:{fontWeight:700,mb:1},children:jsxRuntimeExports.jsxs(Trans,{i18nKey:"groupPurchaseModal.confirmListTitle",values:{total:ce,featureName:_,years:F},children:["Danh sách ",ce," người sẽ được mở khóa ",jsxRuntimeExports.jsx("strong",{children:_})," (",F," năm):"]})}),jsxRuntimeExports.jsx(Box,{sx:{maxHeight:200,overflowY:"auto",border:"1px solid #e0e0e0",borderRadius:1,p:1,mb:2,bgcolor:"#fafafa"},children:ue.map((ze,Ze)=>jsxRuntimeExports.jsxs(Typography,{variant:"body2",sx:{py:.3,color:Ze===0?"#15803d":"#333"},children:[Ze+1,". ",ze,Ze===0?P("groupPurchaseModal.youSuffix"):""]},ze))}),jsxRuntimeExports.jsxs(Box,{sx:{p:1.5,bgcolor:"#fff3cd",border:"2px s
313olid #ffc107",borderRadius:2},children:[jsxRuntimeExports.jsx(Typography,{variant:"body2",sx:{color:"#555",textDecoration:"line-through"},children:P("groupPurchaseModal.originalPrice",{price:(ce*E*F).toLocaleString("vi-VN")})}),Te>0&&jsxRuntimeExports.jsx(Typography,{variant:"body2",sx:{color:"#555"},children:P("groupPurchaseModal.promoDiscount",{discount:Te})}),ve>0&&jsxRuntimeExports.jsx(Typography,{variant:"body2",sx:{color:"#555"},children:P("groupPurchaseModal.multiYearDiscount",{years:F,discount:ve})}),jsxRuntimeExports.jsx(Typography,{variant:"body2",sx:{color:"#555"},children:P("groupPurchaseModal.groupDiscount",{count:ce,discount:fe.toFixed(1)})}),Me>0&&jsxRuntimeExports.jsx(Typography,{variant:"body2",sx:{color:"#16a34a",fontWeight:700},children:P("groupPurchaseModal.bonusMonths",{month:new Date().getMonth()+1,count:Me})}),jsxRuntimeExports.jsx(Typography,{variant:"body2",sx:{color:"#15803d",fontWeight:700},children:P("groupPurchaseModal.totalDiscountPct",{discount:pe})}),jsxRuntimeExports.jsx(Typography,{variant:"h6",sx:{fontWeight:900,color:"#f44336",mt:.5},children:P("groupPurchaseModal.confirmTotal",{price:we.toLocaleString("vi-VN")})}),jsxRuntimeExports.jsx(Typography,{variant:"caption",sx:{color:"#777"},children:P("groupPurchaseModal.perPersonSummary",{price:Le.toLocaleString("vi-VN"),years:F,bonus:Me>0?P("groupPurchaseModal.bonusMonthsSuffix",{count:Me}):""})})]}),jsxRuntimeExports.jsx(Alert,{severity:"info",sx:{mt:1.5,py:.5},children:jsxRuntimeExports.jsx(Typography,{variant:"caption",children:P("groupPurchaseModal.unregisteredHint")})})]}),M===2&&jsxRuntimeExports.jsx(Box,{children:oe==="waiting"?jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsxs(Box,{sx:{display:"flex",alignItems:"flex-start",gap:1.5,flexWrap:{xs:"wrap",sm:"nowrap"}},children:[jsxRuntimeExports.jsxs(Box,{sx:{flex:"1 1 230px",minWidth:0,display:"flex",flexDirection:"column",gap:1},children:[jsxRuntimeExports.jsx(ManualTransferAccordion,{transferContent:et,amount:we}),jsxRuntimeExports.jsxs(Box,{sx:{display:"flex",alignItems:"center",gap:1,color:"#555"},children:[jsxRuntimeExports.jsx(CircularProgress,{size:16}),jsxRuntimeExports.jsx(Typography,{variant:"caption",children:P("groupPurchaseModal.waitingText")})]})]}),Ye&&jsxRuntimeExports.jsxs(Box,{sx:{flex:"0 0 auto",display:"flex",flexDirection:"column",alignItems:"center",width:200},children:[jsxRuntimeExports.jsx("img",{src:Ye,alt:"QR Thanh Toán",style:{width:200,height:200,borderRadius:8}}),jsxRuntimeExports.jsxs(Box,{sx:{mt:1,p:1.25,bgcolor:"#fff3cd",border:"2px solid #ffc107",borderRadius:2,textAlign:"center",width:"100%"},children:[jsxRuntimeExports.jsxs(Typography,{variant:"h6",sx:{fontWeight:900,color:"#f44336"},children:["💳 ",we.toLocaleString("vi-VN"),"đ"]}),jsxRuntimeExports.jsx(Typography,{variant:"caption",sx:{color:"#555"},children:P("groupPurchaseModal.paymentSummary",{count:ce,years:F,discount:pe})})]})]})]}),jsxRuntimeExports.jsx(Box,{sx:{mt:1.25,mb:1.5,py:.75,px:1.5,bgcolor:"#e8f5e9",border:"1px solid #a5d6a7",borderRadius:2},children:jsxRuntimeExports.jsxs(Typography,{sx:{fontSize:"0.82rem",fontWeight:700,color:"#2e7d32",lineHeight:1.4,textAlign:"center"},children:["✅ ",P("upgradeModal.qrAutoFillNote")]})})]}):jsxRuntimeExports.jsxs(Box,{sx:{textAlign:"center",py:3},children:[jsxRuntimeExports.jsx(CheckCircle,{sx:{fontSize:56,color:"#16a34a",mb:1}}),jsxRuntimeExports.jsx(Typography,{variant:"h6",sx:{fontWeight:700,color:"#15803d",mb:1},children:P("groupPurchaseModal.successTitle",{processed:ie,total:ce})}),re.length>0&&jsxRuntimeExports.jsx(Alert,{severity:"warning",sx:{textAlign:"left",mb:1},children:jsxRuntimeExports.jsx(Typography,{variant:"body2",children:P("groupPurchaseModal.failedEmails",{count:re.length,emails:re.join(", ")})})}),jsxRuntimeExports.jsx(Typography,{variant:"body2",sx:{color:"#555"},children:P("groupPurchaseModal.reloadHint")})]})})]}),jsxRuntimeExports.jsxs(DialogActions,{sx:{p:2,gap:1},children:[M===0&&jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsx(Button,{onClick:u,variant:"outlined",size:"small",children:P("groupPurchaseModal.close")}),jsxRuntimeExports.jsx(Button,{variant:"contained",color:"success",size:"small",disabled:!Ue||Pe,onClick:()=>D(1),children:P("groupPurchaseModal.previewNext")})]}),M===1&&jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsx(Button,{onClick:()=>D(0),variant:"outlined",size:"small",children:P("groupPurchaseModal.back")}),jsxRuntimeExports.jsx(Button,{variant:"contained",color:"success",size:"small",disabled:Y,onClick:Xe,startIcon:Y?jsxRuntimeExports.jsx(CircularProgress,{size:16,color:"inherit"}):void 0,children:P(Y?"groupPurchaseModal.confirmCreating":"groupPurchaseModal.confirmCreateQR")})]}),M===2&&jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsx(Button,{onClick:u,variant:"outlined",size:"small",children:P("groupPurchaseModal.close")}),jsxRuntimeExports.jsx(Button,{variant:"contained",color:"success",size:"small",onClick:()=>window.location.reload(),children:P("groupPurchaseModal.paidReload")})]})]})]})}function FeatureComparisonTable({buttonLabel:o,paidColumnLabel:u,rows:T}
313){const[S,E]=React$1.useState(!1);return jsxRuntimeExports.jsxs(Box,{sx:{mt:1},children:[jsxRuntimeExports.jsxs(Button,{variant:"text",size:"small",fullWidth:!0,onClick:()=>E(C=>!C),endIcon:S?jsxRuntimeExports.jsx(ExpandLessIcon,{}):jsxRuntimeExports.jsx(ExpandMoreIcon,{}),sx:{color:"#1976d2",fontWeight:700,fontSize:"0.8rem",textTransform:"none"},children:["⚖️ ",o]}),jsxRuntimeExports.jsx(Collapse,{in:S,children:jsxRuntimeExports.jsx(Box,{sx:{mt:1,border:"1px solid #e0e0e0",borderRadius:1.5,overflow:"hidden"},children:jsxRuntimeExports.jsxs(Table,{size:"small",children:[jsxRuntimeExports.jsx(TableHead,{children:jsxRuntimeExports.jsxs(TableRow,{sx:{bgcolor:"#f5f5f5"},children:[jsxRuntimeExports.jsx(TableCell,{sx:{fontWeight:700,fontSize:"0.8rem"},children:"Tính năng"}),jsxRuntimeExports.jsx(TableCell,{sx:{fontWeight:700,fontSize:"0.8rem"},children:"Miễn phí"}),jsxRuntimeExports.jsx(TableCell,{sx:{fontWeight:700,fontSize:"0.8rem",color:"#2e7d32"},children:u})]})}),jsxRuntimeExports.jsx(TableBody,{children:T.map(C=>jsxRuntimeExports.jsxs(TableRow,{children:[jsxRuntimeExports.jsx(TableCell,{sx:{fontSize:"0.8rem"},children:C.label}),jsxRuntimeExports.jsx(TableCell,{sx:{fontSize:"0.8rem",color:"#757575"},children:C.free}),jsxRuntimeExports.jsx(TableCell,{sx:{fontSize:"0.8rem",color:"#2e7d32",fontWeight:600},children:C.paid})]},C.label))})]})})})]})}const BMAC_URL="https://buymeacoffee.com/giaoviendoimoi",getProComparisonRows=o=>[{label:o("proModal.detailedReportRow"),free:o("proModal.scoreOnlyReport"),paid:o("proModal.perQuestionReport")},{label:o("proModal.audioRecordRow"),free:o("proModal.noAudio"),paid:o("proModal.hasAudio")},...Object.entries(PRO_FEATURE_LABELS).map(([u,{name:T,unit:S}])=>({label:T,free:TRIAL_LIMITS[u]>0?`${TRIAL_LIMITS[u]}${S?" "+S:""}`:o("proModal.cannotUse"),paid:o("proModal.unlimited")}))],FEATURE_ONLINE_URL={interactiveVideo:"giaoviendoimoi.com/interactive-video",quizGame:"giaoviendoimoi.com/quiz-game",panorama:"giaoviendoimoi.com/panorama-museum",wheelQuiz:"giaoviendoimoi.com/wheel-quiz",pacedQuiz:"giaoviendoimoi.com/paced-quiz",flipPuzzle:"giaoviendoimoi.com/flip-puzzle-game",crosswordPuzzle:"giaoviendoimoi.com/crossword-puzzle",handSlashQuiz:"giaoviendoimoi.com/hand-slash-quiz",tugOfWar:"giaoviendoimoi.com/tug-of-war-game",interactiveImage:"giaoviendoimoi.com/interactive-image",headTiltQuiz:"giaoviendoimoi.com/head-tilt-quiz",noiseTracker:"giaoviendoimoi.com/noise-tracker",poseQuiz:"giaoviendoimoi.com/pose-quiz",journey:"giaoviendoimoi.com/journey",versusGame:"giaoviendoimoi.com/versus-game",faceRandom:"giaoviendoimoi.com/face-random",starBagGame:"giaoviendoimoi.com/star-bag-game",htmlEmbedGame:"giaoviendoimoi.com/html-embed-game",flashcard:"giaoviendoimoi.com/flashcard",mindMap:"giaoviendoimoi.com/mind-map",knowledgeTrain:"giaoviendoimoi.com/knowledge-train-game",flyingWordsGame:"giaoviendoimoi.com/flying-words-game",paperMode:"giaoviendoimoi.com/paper-mode"};function UpgradeModal({feature:o,open:u,onClose:T,bundleFeatureCode:S,bundlePrice:E,bundleToolNames:C,extendedLinkTier:_=1}){var ot;const{t:P,i18n:R}=useTranslation("common"),I=typeof o=="string"&&o.startsWith("offline_"),[L,j]=React$1.useState(!1),{currentUser:M}=useAuth(),{toast:D}=useToast(),[F,N]=React$1.useState(!1),[G,B]=React$1.useState(!1),[H,O]=React$1.useState(!1),[V,U]=React$1.useState(!1),[W,K]=React$1.useState(""),[Y,ee]=React$1.useState(null),[oe,se]=React$1.useState(""),[Q,ie]=React$1.useState(0),[ae,re]=React$1.useState(1),[J,te]=React$1.useState(null),[Z,X]=React$1.useState(!1),de=R.language!=="vi";React$1.useEffect(()=>{u||j(!1)},[u,o]);const he={interactiveVideo:{name:"Video tương tác",nameEn:"Interactive Video",limit:`${TRIAL_LIMITS.interactiveVideo||5} video`,limitEn:`${TRIAL_LIMITS.interactiveVideo||5} videos`,icon:"🎬",bankContentName:"VIDEO"},quizGame:{name:"Kéo Thả - Nối Ý",nameEn:"Drag & Drop - Matching",limit:`${TRIAL_LIMITS.quizGame||10} bài`,limitEn:`${TRIAL_LIMITS.quizGame||10} lessons`,icon:"🎮",bankContentName:"QUIZ"},panorama:{name:"Phòng ảo 360°",nameEn:"360° Virtual Room",limit:`${TRIAL_LIMITS.panorama||3} phòng`,limitEn:`${TRIAL_LIMITS.panorama||3} rooms`,icon:"🏛️",bankContentName:"3D"},conductEvaluation:{name:"Hạnh kiểm",nameEn:"Conduct Evaluation",limit:"1 năm",limitEn:"1 year",icon:"📊",bankContentName:"HANHKIEM"},wheelQuiz:{name:"Vòng quay - Lượt chơi",nameEn:"Wheel Quiz - Play Sessions",limit:`${TRIAL_LIMITS.wheelQuizPlay||15} lượt chơi`,limitEn:`${TRIAL_LIMITS.wheelQuizPlay||15} play sessions`,icon:"🎡",bankContentName:"WHEEL"},pacedQuiz:{name:"Paced Quiz",nameEn:"Paced Quiz",limit:`${TRIAL_LIMITS.pacedQuiz||5} bài`,limitEn:`${TRIAL_LIMITS.pacedQuiz||5} lessons`,icon:"⏱️",bankContentName:"PACED"},flipPuzzle:{name:"Lật mảnh ghép",nameEn:"Flip Puzzle",limit:`${TRIAL_LIMITS.flipPuzzle||5} bài`,limitEn:`${TRIAL_LIMITS.flipPuzzle||5} lessons`,icon:"🧩",bankContentName:"PUZZLE"}
313,crosswordPuzzle:{name:"Giải ô chữ",nameEn:"Crossword Puzzle",limit:`${TRIAL_LIMITS.crosswordPuzzle||5} bài`,limitEn:`${TRIAL_LIMITS.crosswordPuzzle||5} lessons`,icon:"📝",bankContentName:"CROSSWORD"},handSlashQuiz:{name:"Game chém tay",nameEn:"Hand Slash Quiz",limit:`${TRIAL_LIMITS.handSlashQuiz||10} bài`,limitEn:`${TRIAL_LIMITS.handSlashQuiz||10} lessons`,icon:"✋",bankContentName:"HANDSLASH"},headTiltQuiz:{name:"Trắc nghiệm nghiêng đầu",nameEn:"Head Tilt Quiz",limit:`${TRIAL_LIMITS.headTiltQuiz||5} bài`,limitEn:`${TRIAL_LIMITS.headTiltQuiz||5} lessons`,icon:"🙆",bankContentName:"TILTQUIZ"},interactiveImage:{name:"Ảnh tương tác",nameEn:"Interactive Image",limit:`${TRIAL_LIMITS.interactiveImage||5} ảnh`,limitEn:`${TRIAL_LIMITS.interactiveImage||5} images`,icon:"🖼️",bankContentName:"IMAGE"},tugOfWar:{name:"Kéo co",nameEn:"Tug of War",limit:`${TRIAL_LIMITS.tugOfWar||5} trò chơi`,limitEn:`${TRIAL_LIMITS.tugOfWar||5} games`,icon:"🪢",bankContentName:"TUGOFWAR"},turnBasedGame:{name:"Game Theo Lượt",nameEn:"Turn-Based Game",limit:`${TRIAL_LIMITS.turnBasedGame||5} bài`,limitEn:`${TRIAL_LIMITS.turnBasedGame||5} games`,icon:"🎲",bankContentName:"TURN"},noiseTracker:{name:"Quản lý tiếng ồn",nameEn:"Noise Tracker",limit:`${TRIAL_LIMITS.noiseTracker||1} lượt`,limitEn:`${TRIAL_LIMITS.noiseTracker||1} turn`,icon:"🐉",bankContentName:"NOISE"},poseQuiz:{name:"Thể dục ABC",nameEn:"Pose Slideshow Quiz",limit:`${TRIAL_LIMITS.poseQuiz||5} bài`,limitEn:`${TRIAL_LIMITS.poseQuiz||5} lessons`,icon:"🧘",bankContentName:"POSEQUIZ"},journey:{name:"Hành Trình Học Tập",nameEn:"Learning Journey",limit:`${TRIAL_LIMITS.journey||3} hành trình`,limitEn:`${TRIAL_LIMITS.journey||3} journeys`,icon:"🗺️",bankContentName:"JOURNEY"},versusGame:{name:"Game Đối Kháng",nameEn:"Versus Battle Game",limit:`${TRIAL_LIMITS.versusGame||5} bài`,limitEn:`${TRIAL_LIMITS.versusGame||5} games`,icon:"⚔️",bankContentName:"VERSUS"},faceRandom:{name:"Gọi Học Sinh Bằng Camera",nameEn:"Random Student Camera Picker",limit:`${TRIAL_LIMITS.faceRandom||10} lượt gọi`,limitEn:`${TRIAL_LIMITS.faceRandom||10} sessions`,icon:"📷",bankContentName:"FACERAND"},starBagGame:{name:"Cuộc đua ngôi sao",nameEn:"Star Bag Game",limit:`${TRIAL_LIMITS.starBagGame||5} bài`,limitEn:`${TRIAL_LIMITS.starBagGame||5} games`,icon:"⭐",bankContentName:"STAR"},flashcard:{name:"Thẻ lật (Flashcard)",nameEn:"Flip Cards (Flashcard)",limit:`${TRIAL_LIMITS.flashcard||5} bộ thẻ`,limitEn:`${TRIAL_LIMITS.flashcard||5} decks`,icon:"🃏",bankContentName:"FLASHCARD"},htmlEmbedGame:{name:"Game tự tạo",nameEn:"Custom Game",limit:"Chỉ Pro",limitEn:"Pro only",icon:"</>",bankContentName:"HTMLGAME"},ttsVoiceTool:{name:"AI Tạo giọng đọc",nameEn:"AI Voice Generator",limit:"Chỉ Pro",limitEn:"Pro only",icon:"🎙️",bankContentName:"TTSVOICE"},minesweeper:{name:"Dò Mìn",nameEn:"Minesweeper",limit:`${TRIAL_LIMITS.minesweeper||5} bài`,limitEn:`${TRIAL_LIMITS.minesweeper||5} lessons`,icon:"🧨",bankContentName:"MINE"},mindMap:{name:"Sơ Đồ Tư Duy",nameEn:"Mind Map Builder",limit:`${TRIAL_LIMITS.mindMap||5} sơ đồ`,limitEn:`${TRIAL_LIMITS.mindMap||5} maps`,icon:"🗺️",bankContentName:"MINDMAP"},knowledgeTrain:{name:"Đoàn tàu tri thức",nameEn:"Knowledge Train",limit:`${TRIAL_LIMITS.knowledgeTrain||5} bài`,limitEn:`${TRIAL_LIMITS.knowledgeTrain||5} lessons`,icon:"🚂",bankContentName:"TRAIN"},flyingWordsGame:{name:"Từ ngữ biết bay",nameEn:"Flying Words",limit:`${TRIAL_LIMITS.flyingWordsGame||5} bài`,limitEn:`${TRIAL_LIMITS.flyingWordsGame||5} lessons`,icon:"🦋",bankContentName:"FLY"},paperMode:{name:"Chế độ giấy (Quét thẻ)",nameEn:"Paper Mode (Card Scan)",limit:`${TRIAL_LIMITS.paperMode||5} lượt quét`,limitEn:`${TRIAL_LIMITS.paperMode||5} scan sessions`,icon:"📇",bankContentName:"PAPER"},scavengerHunt:{name:"Săn Kho Báu",nameEn:"Scavenger Hunt",limit:`${TRIAL_LIMITS.scavengerHunt||1} cuộc săn`,limitEn:`${TRIAL_LIMITS.scavengerHunt||1} hunt`,icon:"💎",bankContentName:"HUNT"}
313,aiTool1:{name:"Viết sáng kiến kinh nghiệm",nameEn:"Write SKKN",limit:"vĩnh viễn",limitEn:"forever",icon:"📝",bankContentName:"aiT1",price:3e4},aiTool2:{name:"Biện pháp giáo viên giỏi",nameEn:"Teaching Methods",limit:"vĩnh viễn",limitEn:"forever",icon:"📝",bankContentName:"aiT2",price:3e4},aiTool4:{name:"AI Phân tích hạnh kiểm",nameEn:"Conduct Analysis",limit:"vĩnh viễn",limitEn:"forever",icon:"📊",bankContentName:"aiT4",price:3e4},aiTool5:{name:"Tạo đề thi CV 7991",nameEn:"Exam CV7991",limit:"vĩnh viễn",limitEn:"forever",icon:"📝",bankContentName:"aiT5",price:3e4},aiTool6:{name:"Tạo đề thi CV 7991 Tiếng Anh",nameEn:"English Exam CV7991",limit:"vĩnh viễn",limitEn:"forever",icon:"🇬🇧",bankContentName:"aiT6",price:3e4},aiTool7:{name:"Tạo đề thi chuẩn Ngữ văn",nameEn:"Literature Exam",limit:"vĩnh viễn",limitEn:"forever",icon:"🖋️",bankContentName:"aiT7",price:3e4},aiTool8:{name:"Tạo đề thi chuyên biệt",nameEn:"Specialized Exam",limit:"vĩnh viễn",limitEn:"forever",icon:"🔍",bankContentName:"aiT8",price:3e4},aiTool9:{name:"Soạn Giáo án MẦM NON tích hợp",nameEn:"Preschool Lesson Plan",limit:"vĩnh viễn",limitEn:"forever",icon:"🧩",bankContentName:"aiT9",price:5e4},aiTool10:{name:"AI tạo sản phẩm phần mềm",nameEn:"AI Software Product",limit:"vĩnh viễn",limitEn:"forever",icon:"💻",bankContentName:"aiT10",price:3e4},aiTool11:{name:"Tạo bảng tích hợp NL AI vào KHGD",nameEn:"AI Integration Table",limit:"vĩnh viễn",limitEn:"forever",icon:"🤖",bankContentName:"aiT11",price:3e4},aiTool13:{name:"Soạn Giáo án Chuyên đề AI",nameEn:"AI Specialized Plan",limit:"vĩnh viễn",limitEn:"forever",icon:"📝",bankContentName:"aiT13",price:3e4},aiTool14:{name:"Tạo KHGD tích hợp NL AI",nameEn:"AI Education Plan",limit:"vĩnh viễn",limitEn:"forever",icon:"📋",bankContentName:"aiT14",price:3e4},aiTool16:{name:"Tích hợp tổng hợp vào giáo án",nameEn:"Combined AI Integration",limit:"vĩnh viễn",limitEn:"forever",icon:"🧩",bankContentName:"aiT16",price:5e4},bundle:{name:"Gói nhiều công cụ AI",nameEn:"AI Tools Bundle",limit:"vĩnh viễn",limitEn:"forever",icon:"🎁",bankContentName:"",price:0},aiTools:{name:"Nhóm 1 (Công cụ AI cơ bản)",nameEn:"AI Tools Group 1",limit:"không giới hạn",limitEn:"unlimited",icon:"🤖",bankContentName:"AITOOLS1",price:1e5},aiToolsGroup2:{name:"Nhóm 2 (Đề thi & Phân tích)",nameEn:"AI Tools Group 2",limit:"không giới hạn",limitEn:"unlimited",icon:"🔥",bankContentName:"AITOOLS2",price:1e5},aiSpecialist:{name:"Nhóm 3: AI Chuyên Dụng",nameEn:"AI Tools Group 3",limit:"không giới hạn",limitEn:"unlimited",icon:"🤖",bankContentName:"AITOOLS3",price:5e4},aiToolsGroup3:{name:"Nhóm 3: AI Chuyên Dụng (Nghiên cứu & Phần mềm)",nameEn:"AI Tools Group 3",limit:"không giới hạn",limitEn:"unlimited",icon:"🤖",bankContentName:"AITOOLS3",price:5e4},aiToolsGroup4:{name:"Nhóm 4: Tích hợp Khung Năng lực AI theo QĐ 3439",nameEn:"AI Tools Group 4",limit:"không giới hạn",limitEn:"unlimited",icon:"🤖",bankContentName:"AITOOLS4",price:1e5},extendedLink:{name:"Duy trì Link Bài Tập Dài Hạn",nameEn:"Extended Assignment Duration",limit:"1 năm",limitEn:"1 year",icon:"⏰",bankContentName:"EXTLINK",price:5e4},nhanxetExtension:{name:"Extension Nhận xét môn học, học bạ VnEdu, CSDL ngành GD",nameEn:"School DB Comment Chrome Extension",limit:"1 năm",limitEn:"1 year",icon:"📋",bankContentName:"NHANXET",price:3e4},formatiW:{name:"Căn chỉnh Nghị định 30",nameEn:"Decree 30 Document Formatter",limit:"1 năm",limitEn:"1 year",icon:"📄",bankContentName:"FORMATW",price:3e4},pasteAi:{name:"Chuyển đổi AI sang DOCX",nameEn:"AI Text to DOCX Converter",limit:"1 năm",limitEn:"1 year",icon:"📋",bankContentName:"PASTEAI",price:3e4},chuanNgheNghiep:{name:"Extension Đánh giá chuẩn nghề nghiệp giáo viên",nameEn:"Teacher Professional Standards Extension",limit:"1 năm",limitEn:"1 year",icon:"🏅",bankContentName:"CHUANNN",price:3e4},addInWord:{name:"Add-in Word GVDM",nameEn:"GVDM Word Add-in",limit:"1 năm",limitEn:"1 year",icon:"📝",bankContentName:"ADDINW",price:5e4},mathAssistant:{name:"Trợ lý cho GV Toán (Add-in Word)",nameEn:"Math Teacher Assistant (Word Add-in)",limit:"1 năm",limitEn:"1 year",icon:"📐",bankContentName:"TLGVT",price:5e4},fullAiPlan:{name:"FullAI PLAN — Trọn bộ Công cụ AI",nameEn:"FullAI PLAN — All AI Tools",limit:"tất cả công cụ AI (kể cả tương lai)",limitEn:"all AI tools (incl. future tools)",icon:"🤖",bankContentName:"FULLAI",price:25e4}
313,fullTienIch:{name:"FullTienIch — Trọn bộ Tiện ích Edutech",nameEn:"FullTienIch — All Edutech Extensions",limit:"tất cả tiện ích Edutech Extensions",limitEn:"all Edutech Extensions",icon:"🧩",bankContentName:"FULLTIENICH",price:1e5},proPlan:{name:"FullGame",nameEn:"FullGame",limit:"5 game/tool tương tác",limitEn:"all interactive games/tools",icon:"👑",bankContentName:"PROPLAN"}},ne=o||"",ue=typeof ne=="string"&&ne.startsWith("offline_"),ce=ue?ne.replace("offline_",""):ne,fe=typeof ne=="string"&&(ne.startsWith("aiTools")||ne.startsWith("aiTool")),ve=ne==="bundle",Te=/^aiTool\d+$/.test(ne),Se=he[ce]||he.interactiveVideo;let ke=5e4,we=Se.bankContentName;ve?(ke=E||0,we=S||""):Te?(ke=Se.price??PAYMENT_CONFIG.PLANS.AI_TOOL_SINGLE,we=Se.bankContentName):ue?(ke=PAYMENT_CONFIG.PLANS.OFFLINE,we=`O${Se.bankContentName}`):o==="aiTools"?(ke=PAYMENT_CONFIG.PLANS.AI_TOOLS_GROUP1,we="AITOOLS1"):o==="aiToolsGroup2"?(ke=PAYMENT_CONFIG.PLANS.AI_TOOLS_GROUP2,we="AITOOLS2"):o==="aiToolsGroup3"||o==="aiSpecialist"?(ke=PAYMENT_CONFIG.PLANS.AI_SPEC,we="AITOOLS3"):o==="aiToolsGroup4"?(ke=PAYMENT_CONFIG.PLANS.AI_TOOLS_GROUP2,we="AITOOLS4"):o==="proPlan"?(ke=PAYMENT_CONFIG.PLANS.PRO,we="PROPLAN"):o==="fullAiPlan"?(ke=PAYMENT_CONFIG.PLANS.FULL_AI_PLAN,we="FULLAI"):o==="fullTienIch"?(ke=PAYMENT_CONFIG.PLANS.FULL_TIEN_ICH,we="FULLTIENICH"):o==="extendedLink"?(ke=((ot=PAYMENT_CONFIG.PLANS.EXTLINK_TIER)==null?void 0:ot[_])??PAYMENT_CONFIG.PLANS.EXTLINK??5e4,we=`EXTLINK${_}Y`):o==="nhanxetExtension"?(ke=3e4,we="NHANXET"):o==="formatiW"?(ke=3e4,we="FORMATW"):o==="pasteAi"?(ke=3e4,we="PASTEAI"):o==="chuanNgheNghiep"?(ke=3e4,we="CHUANNN"):o==="addInWord"?(ke=5e4,we="ADDINW"):o==="mathAssistant"?(ke=5e4,we="TLGVT"):ke=PAYMENT_CONFIG.PLANS.OTHER_TOOLS;const Le=PAYMENT_CONFIG.MULTI_YEAR_DISCOUNTS||{},pe=!ue&&o!=="aiTools"&&o!=="aiToolsGroup2"&&o!=="aiToolsGroup3"&&o!=="aiSpecialist"&&o!=="aiToolsGroup4"&&o!=="extendedLink",Me=pe&&!ve?getBonusMonths(o):0,Pe=(M==null?void 0:M.uid)||"UNKNOWN_UID",{price:Ue,multiYearDiscountPct:qe,transferContent:Ie,qrUrl:Xe}=usePaymentQr({featureCode:we,basePrice:ke,uid:Pe,appliedPromo:Y,years:ae,multiYear:pe}),et=Ue,tt=de?Se.nameEn:Se.name,Ye=o==="extendedLink"?P("upgradeModal.maxYearsDuration",{tier:_}):pe?P("upgradeModal.yearsDuration",{years:ae}):P("upgradeModal.foreverDuration"),ze=TRIAL_LIMITS[ce]!==void 0,Ze=ve?(C||[]).map(je=>({label:je,free:P("upgradeModal.notUnlocked"),paid:P("upgradeModal.unlockForever")})):o==="proPlan"?getProComparisonRows(P):o==="extendedLink"?[{label:tt,free:P("upgradeModal.assignment15DaysComparison"),paid:P("upgradeModal.assignmentMaxTierComparison",{tier:_})}]:[{label:tt,free:ze?de?Se.limitEn:Se.limit:P("upgradeModal.notUnlocked"),paid:ze?P("upgradeModal.unlimitedDuration",{duration:Ye}):P("upgradeModal.unlockDuration",{duration:Ye})}],He=React$1.useRef(null),rt=React$1.useRef(T),it=React$1.useRef(D);React$1.useEffect(()=>{rt.current=T},[T]),React$1.useEffect(()=>{it.current=D},[D]),React$1.useEffect(()=>{u||(K(""),ee(null),se(""),ie(0),re(1),O(!1),B(!1),X(!1))},[u]),React$1.useEffect(()=>{if(!u||!(M!=null&&M.uid))return;N(!0);const je=onSnapshot(doc(db,"subscriptions",M.uid),Be=>{var mt,xt,vt,yt,Je;if(!Be.exists())return;const Qe=Be.data();if(te(Qe),!He.current){He.current=Qe;return}const Ge=He.current;let We=!1;if(we.startsWith("O")&&we.length>1){const $e={OVIDEO:"interactivevideo",OQUIZ:"quizgame",O3D:"panorama",OROBOT:"companionrobot",OWHEEL:"wheelquiz",OPACED:"pacedquiz",OPUZZLE:"flippuzzle",OCROSSWORD:"crosswordpuzzle",OHANDSLASH:"handslashquiz",OTUGOFWAR:"tugofwar",OIMAGE:"interactiveimage",OTILTQUIZ:"headtiltquiz",ONOISE:"noisetracker"}[we.toUpperCase()];$e&&(We=((mt=Qe.offlineDownloads)==null?void 0:mt[$e])===!0)}else{if(we.toUpperCase().startsWith("BDL"))for(let De=1;De<=16;De++){const $e=`aiTool${De}`,ht=`aiTool${De}ExpiresAt`;if(!Ge[$e]&&Qe[$e]||!Ge[ht]&&Qe[ht]&&new Date(Qe[ht])>new Date){We=!0;break}}if(!We){const De=we.match(/aiT\d+/gi);if(De){const $e={ait1:"aiTool1",ait2:"aiTool2",ait4:"aiTool4",ait5:"aiTool5",ait6:"aiTool6",ait7:"aiTool7",ait8:"aiTool8",ait9:"aiTool9",ait10:"aiTool10",ait11:"aiTool11",ait13:"aiTool13",ait14:"aiTool14",ait16:"aiTool16"};We=De.some(ht=>{const ut=$e[ht.toLowerCase()];return ut&&!Ge[ut]&&Qe[ut]}),We||(We=De.some(ht=>{const ut=$e[ht.toLowerCase()];if(!ut)return!1;
313const ft=ut+"ExpiresAt";return!Ge[ft]&&Qe[ft]&&new Date(Qe[ft])>new Date}))}}if(!We)switch(we.toUpperCase()){case"PROPLAN":if(We=!((xt=Ge.proPlan)!=null&&xt.isPurchased)&&((vt=Qe.proPlan)==null?void 0:vt.isPurchased),!We){const De=Ge.proPlanExpiresAt,$e=Qe.proPlanExpiresAt;We=(!De||new Date(De)<=new Date)&&$e&&new Date($e)>new Date}break;case"FULLAI":{const De=Ge.fullAiPlanExpiresAt,$e=Qe.fullAiPlanExpiresAt;We=(!De||new Date(De)<=new Date)&&$e&&new Date($e)>new Date,!We&&De&&$e&&$e!==De&&new Date($e)>new Date(De)&&(We=!0);break}case"FULLTIENICH":{const De=Ge.fullTienIchExpiresAt,$e=Qe.fullTienIchExpiresAt;We=(!De||new Date(De)<=new Date)&&$e&&new Date($e)>new Date,!We&&De&&$e&&$e!==De&&new Date($e)>new Date(De)&&(We=!0);break}case"AITOOLS1":We=!Ge.aiToolsUnlocked&&Qe.aiToolsUnlocked;break;case"AITOOLS2":We=!Ge.aiToolsGroup2Unlocked&&Qe.aiToolsGroup2Unlocked;break;case"AITOOLS3":case"AISPEC":We=!Ge.aiSpecialistUnlocked&&Qe.aiSpecialistUnlocked;break;case"AITOOLS4":We=!Ge.aiToolsGroup4Unlocked&&Qe.aiToolsGroup4Unlocked;break;case"HANHKIEM":We=((yt=Ge.conductEvaluation)==null?void 0:yt.status)!=="pro"&&((Je=Qe.conductEvaluation)==null?void 0:Je.status)==="pro";break;case"NHANXET":{const De=Ge.nhanxetExtensionExpiresAt,$e=Qe.nhanxetExtensionExpiresAt;We=(!De||new Date(De)<=new Date)&&$e&&new Date($e)>new Date,!We&&De&&$e&&$e!==De&&new Date($e)>new Date(De)&&(We=!0);break}case"FORMATW":{const De=Ge.formatiWExpiresAt,$e=Qe.formatiWExpiresAt;We=(!De||new Date(De)<=new Date)&&$e&&new Date($e)>new Date,!We&&De&&$e&&$e!==De&&new Date($e)>new Date(De)&&(We=!0);break}case"PASTEAI":{const De=Ge.pasteAiExpiresAt,$e=Qe.pasteAiExpiresAt;We=(!De||new Date(De)<=new Date)&&$e&&new Date($e)>new Date,!We&&De&&$e&&$e!==De&&new Date($e)>new Date(De)&&(We=!0);break}case"CHUANNN":{const De=Ge.chuanNgheNghiepExtensionExpiresAt,$e=Qe.chuanNgheNghiepExtensionExpiresAt;We=(!De||new Date(De)<=new Date)&&$e&&new Date($e)>new Date,!We&&De&&$e&&$e!==De&&new Date($e)>new Date(De)&&(We=!0);break}case"ADDINW":{const De=Ge.addInWordExpiresAt,$e=Qe.addInWordExpiresAt;We=(!De||new Date(De)<=new Date)&&$e&&new Date($e)>new Date,!We&&De&&$e&&$e!==De&&new Date($e)>new Date(De)&&(We=!0);break}case"TLGVT":{const De=Ge.mathAssistantExpiresAt,$e=Qe.mathAssistantExpiresAt;We=(!De||new Date(De)<=new Date)&&$e&&new Date($e)>new Date,!We&&De&&$e&&$e!==De&&new Date($e)>new Date(De)&&(We=!0);break}default:{const $e={VIDEO:"interactiveVideo",QUIZ:"quizGame","3D":"panorama",ROBOT:"companionRobot",WHEEL:"wheelQuiz",PACED:"pacedQuiz",PUZZLE:"flipPuzzle",CROSSWORD:"crosswordPuzzle",HANDSLASH:"handSlashQuiz",TUGOFWAR:"tugOfWar",IMAGE:"interactiveImage",TILTQUIZ:"headTiltQuiz",NOISE:"noiseTracker",POSEQUIZ:"poseQuiz",STAR:"starBagGame",HTMLGAME:"htmlEmbedGame",TTSVOICE:"ttsVoiceTool",FLASHCARD:"flashcard",MINDMAP:"mindMap",FLY:"flyingWordsGame",PAPER:"paperMode",HUNT:"scavengerHunt"}[we.toUpperCase()];if($e){const ht=$e+"ExpiresAt",ut=Ge[ht],ft=Qe[ht],Ct=(!ut||new Date(ut)<=new Date)&&ft&&new Date(ft)>new Date,Et=$e+"Count",_t=(Ge[Et]||0)<999999&&(Qe[Et]||0)>=999999,At=ut&&ft&&ft!==ut&&new Date(ft)>new Date(ut||0);We=Ct||_t||At}}}}We&&(N(!1),it.current.success(P("upgradeModal.paymentSuccess")),setTimeout(()=>{rt.current(),o!=="nhanxetExtension"&&window.location.reload()},2e3)),He.current=Qe});return()=>{je(),N(!1),He.current=null,te(null)}},[u,M==null?void 0:M.uid,we]);const st=React$1.useMemo(()=>{var Qe;let je=new Date;if(J){let Ge=null;if(o==="conductEvaluation")Ge=(Qe=J.conductEvaluation)==null?void 0:Qe.proExpiresAt;else if(o==="proPlan")Ge=J.proPlanExpiresAt;else if(o==="fullAiPlan")Ge=J.fullAiPlanExpiresAt;else if(o==="fullTienIch")Ge=J.fullTienIchExpiresAt;else if(o==="extendedLink")Ge=J.extendedAssignmentExpiresAt;else{const mt={interactiveVideo:"interactiveVideo",quizGame:"quizGame",panorama:"panorama",companionRobot:"companionRobot",wheelQuiz:"wheelQuiz",pacedQuiz:"pacedQuiz",flipPuzzle:"flipPuzzle",crosswordPuzzle:"crosswordPuzzle",handSlashQuiz:"handSlashQuiz",tugOfWar:"tugOfWar",interactiveImage:"interactiveImage",headTiltQuiz:"headTiltQuiz",noiseTracker:"noiseTracker",poseQuiz:"poseQuiz"}[ce]||ce;Ge=J[mt+"ExpiresAt"]}if(Ge){const We=Ge.toDate?Ge.toDate():new Date(Ge);We>je&&(je=We)}}const Be=new Date(je);return Be.setFullYear(je.getFullYear()+ae),Be.toLocaleDateString("vi-VN")},[J,o,ce,ae]);if(I&&u&&!L){const je=o.replace("offline_","");return jsxRuntimeExports.jsx(OfflineWarningDialog,{open:!0,onClose:T,featureName:je,onConfirm:()=>j(!0)})}return G||de&&!H?jsxRuntimeExports.jsxs(Dialog,{open:u,onClose:()=>{T(),B(!1)},maxWidth:"sm",fullWidth:!0,PaperProps:{sx:{backgroundImage:"linear-gradient(135deg, #667eea 0%, #764ba2 100%)"}},children:[jsxRuntimeExports.jsx(DialogTitle,{sx:{background:"linear-gradient(135deg, #1a1a2e, #16213e)",color:"white",fontWeight:"bold",fontSize:"1.3rem",textAlign:"center",paddingBottom:2},children:P("internationalModal.title")}),jsxRuntimeExports.jsxs(DialogContent,{sx:{background:"rgba(255, 255, 255, 0.95)",py:3},children:[jsxRuntimeExports.jsx(Typography,{variant:"body1",sx:{mb:2,color:"#444",textAlign:"center"},children:P("internationalModal.description")}),jsxRuntimeExports.jsxs(Box,{sx:{my:2,p:2,bgcolor:"#eff6ff",border:"2px s
313olid #2563eb",borderRadius:2},children:[jsxRuntimeExports.jsx(Typography,{variant:"h6",sx:{fontWeight:"bold",mb:1,color:"#1e40af"},children:P("internationalModal.pricingTitle")}),jsxRuntimeExports.jsx("ul",{style:{margin:"0 0 0 12px",paddingLeft:0,lineHeight:1.8},children:Array.isArray(P("internationalModal.features",{returnObjects:!0}))&&P("internationalModal.features",{returnObjects:!0}).map(je=>jsxRuntimeExports.jsxs("li",{style:{fontSize:"0.9rem",color:"#374151",marginBottom:6},children:["✅ ",je]},je))})]}),jsxRuntimeExports.jsxs(Box,{sx:{my:2,p:2,bgcolor:"#fff3e0",border:"2px solid #ff9800",borderRadius:2},children:[jsxRuntimeExports.jsx(Typography,{variant:"h6",sx:{fontWeight:"bold",mb:1,color:"#e65100"},children:P("internationalModal.howToTitle")}),jsxRuntimeExports.jsxs(Typography,{variant:"body2",sx:{mb:1},children:["1. ",P("internationalModal.step1")]}),jsxRuntimeExports.jsxs(Typography,{variant:"body2",sx:{mb:1},children:["2. ",P("internationalModal.step2")]}),jsxRuntimeExports.jsxs(Typography,{variant:"body2",sx:{mt:1,p:1,bgcolor:"#ffebee",borderRadius:1,border:"1px dashed #d32f2f",color:"#d32f2f",fontWeight:"bold"},children:["3. ",P("internationalModal.step3")]})]}),jsxRuntimeExports.jsx(Alert,{severity:"info",sx:{textAlign:"left",mb:2},children:jsxRuntimeExports.jsx(Typography,{variant:"body2",children:P("internationalModal.note")})}),jsxRuntimeExports.jsx(Box,{sx:{display:"flex",flexDirection:"column",alignItems:"center",gap:1.5,mt:2},children:jsxRuntimeExports.jsx(Button,{variant:"contained",size:"large",fullWidth:!0,onClick:()=>window.open(BMAC_URL,"_blank"),sx:{py:1.2,fontSize:"1rem",fontWeight:"bold",background:"linear-gradient(135deg, #FFDD00, #FBB034)",color:"#000","&:hover":{background:"linear-gradient(135deg, #FBB034, #FFDD00)"}},children:P("internationalModal.payBtn")})})]}),jsxRuntimeExports.jsxs(DialogActions,{sx:{p:2,background:"rgba(255, 255, 255, 0.9)",gap:1},children:[jsxRuntimeExports.jsxs(Button,{onClick:()=>{B(!1),O(!0)},variant:"outlined",color:"success",size:"small",sx:{mr:"auto"},children:["🇻🇳 ",P("internationalModal.hasVnAccount")]}),jsxRuntimeExports.jsx(Button,{onClick:()=>{T(),B(!1),O(!1)},variant:"outlined",children:P("internationalModal.closeBtn")})]})]}):jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsxs(Dialog,{open:u,onClose:T,maxWidth:"md",fullWidth:!0,PaperProps:{sx:{borderRadius:3}},children:[jsxRuntimeExports.jsxs(DialogTitle,{sx:{background:ue?"#b71c1c":o==="nhanxetExtension"||o==="chuanNgheNghiep"?"linear-gradient(135deg, #667eea, #764ba2)":"#f44336",color:"white",fontWeight:"bold",py:1,fontSize:"1.05rem",textAlign:"center"},children:[Se.icon," ",ue?P("upgradeModal.offlineTitle"):o==="nhanxetExtension"||o==="chuanNgheNghiep"?"Mua Extension":P("upgradeModal.title")," — ",de?Se.nameEn:Se.name]}),jsxRuntimeExports.jsxs(DialogContent,{sx:{py:1.5,px:2.5},children:[ve&&C&&C.length>0&&jsxRuntimeExports.jsxs(Box,{sx:{mb:1.5,p:1,bgcolor:"#f0fdf4",border:"1.5px solid #86efac",borderRadius:2},children:[jsxRuntimeExports.jsxs(Typography,{variant:"body2",sx:{fontWeight:700,color:"#166534",mb:.25},children:["🎁 ",P("upgradeModal.bundleSelectedCount",{count:C.length})]}),C.map((je,Be)=>jsxRuntimeExports.jsxs(Typography,{variant:"body2",sx:{color:"#15803d",ml:1,lineHeight:1.5},children:["✓ ",je]},Be))]}),jsxRuntimeExports.jsx(Alert,{severity:"info",sx:{mb:1.5,py:.5},children:jsxRuntimeExports.jsxs(Typography,{variant:"body2",children:[ve?P("upgradeModal.bundleSelectedHint"):ue?P("upgradeModal.offlineBenefitTitle"):o==="aiSpecialist"?P("upgradeModal.unlockRequired"):Te?P("upgradeModal.singleAiToolHint"):fe?P("upgradeModal.aiToolsGroupHint"):o==="journey"?P("upgradeModal.journeyHint"):o==="versusGame"?P("upgradeModal.versus1v1Hint"):o==="extendedLink"?P("upgradeModal.assignment15DaysHint"):o==="htmlEmbedGame"||o==="ttsVoiceTool"?P("upgradeModal.genericUnlockRequired"):o==="nhanxetExtension"?P("upgradeModal.extCommentsDesc"):o==="addInWord"?P("upgradeModal.extWordAddinDesc"):o==="mathAssistant"?P("upgradeModal.extMathAddinDesc"):o==="formatiW"?P("upgradeModal.extAlignDocxDesc"):o==="pasteAi"?P("upgradeModal.extAiToDocxDesc"):o==="chuanNgheNghiep"?P("upgradeModal.extTeacherStandardDesc"):o==="fullAiPlan"?P("upgradeModal.aiBundleDesc",{price:ke.toLocaleStr
313ing("vi-VN")}):o==="fullTienIch"?P("upgradeModal.edutechBundleDesc",{price:ke.toLocaleString("vi-VN")}):jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[P("upgradeModal.freeLimit")," ",jsxRuntimeExports.jsx("strong",{children:de?Se.limitEn:Se.limit})," ",P("upgradeModal.differentClasses")]}),ue&&jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[" ",P("upgradeModal.offlineGuide")," ",jsxRuntimeExports.jsx("a",{href:"https://youtu.be/oIOQ4BJkDc0",target:"_blank",rel:"noopener noreferrer",children:P("upgradeModal.here")})]}),o==="conductEvaluation"&&jsxRuntimeExports.jsx(Box,{component:"span",sx:{display:"block",color:"#1565c0",mt:.5},children:P("upgradeModal.evaluationYear",{date:st,selectedYears:ae})}),o==="fullAiPlan"&&jsxRuntimeExports.jsxs(Box,{component:"span",sx:{display:"block",mt:.75,p:1,bgcolor:"#fff3e0",border:"2px solid #e65100",borderRadius:1,textAlign:"left"},children:[jsxRuntimeExports.jsx(Typography,{component:"span",variant:"body2",sx:{fontWeight:700,color:"#bf360c",mb:.25,display:"block",lineHeight:1.4},children:P("upgradeModal.aiBundleHeader")}),jsxRuntimeExports.jsx(Typography,{component:"span",variant:"body2",sx:{color:"#bf360c",ml:1,lineHeight:1.45,display:"block"},children:jsxRuntimeExports.jsxs(Trans,{i18nKey:"upgradeModal.aiBundleFeatures",children:["• Toàn bộ công cụ AI trả phí hiện có + mọi tool mới ra mắt sau này",jsxRuntimeExports.jsx("br",{}),"• Hiệu lực theo năm, có thể gia hạn cộng dồn"]})}),jsxRuntimeExports.jsx(Typography,{component:"span",variant:"body2",sx:{color:"#b71c1c",fontWeight:700,mt:.5,display:"block",lineHeight:1.4},children:P("upgradeModal.aiBundleExcludes")})]}),o==="fullTienIch"&&jsxRuntimeExports.jsxs(Box,{component:"span",sx:{display:"block",mt:.75,p:1,bgcolor:"#fff3e0",border:"2px solid #e65100",borderRadius:1,textAlign:"left"},children:[jsxRuntimeExports.jsx(Typography,{component:"span",variant:"body2",sx:{fontWeight:700,color:"#bf360c",mb:.25,display:"block",lineHeight:1.4},children:P("upgradeModal.edutechBundleHeader")}),jsxRuntimeExports.jsx(Typography,{component:"span",variant:"body2",sx:{color:"#bf360c",ml:1,lineHeight:1.45,display:"block"},children:jsxRuntimeExports.jsxs(Trans,{i18nKey:"upgradeModal.edutechBundleFeatures",children:["• Nhận xét CSDL, Chuẩn nghề nghiệp, Chuyển AI→DOCX (30.000đ/năm mỗi tiện ích)",jsxRuntimeExports.jsx("br",{}),"• Add-in Word GVDM (50.000đ/năm) · Hiệu lực theo năm, gia hạn cộng dồn"]})}),jsxRuntimeExports.jsx(Typography,{component:"span",variant:"body2",sx:{color:"#b71c1c",fontWeight:700,mt:.5,display:"block",lineHeight:1.4},children:P("upgradeModal.edutechBundleExcludes")})]}),o==="extendedLink"&&jsxRuntimeExports.jsx(Box,{component:"span",sx:{display:"block",color:"#7c3aed",mt:.5,fontWeight:600},children:P("upgradeModal.extendedLinkBenefit",{tier:_})}),(o==="tugOfWar"||o==="minesweeper"||o==="flipPuzzle"||o==="knowledgeTrain"||o==="turnBasedGame")&&jsxRuntimeExports.jsx(Box,{component:"span",sx:{display:"block",color:"#16a34a",mt:.5,fontWeight:600},children:P("upgradeModal.downloadOfflineBenefit")}),(fe||ne==="aiSpecialist")&&!Te&&!ve&&jsxRuntimeExports.jsxs(Box,{component:"span",sx:{display:"block",mt:.75,p:1,bgcolor:"#fff3e0",border:"2px solid #e65100",borderRadius:1,textAlign:"left"},children:[jsxRuntimeExports.jsx(Typography,{component:"span",variant:"body2",sx:{fontWeight:700,color:"#bf360c",mb:.25,display:"block",lineHeight:1.4},children:jsxRuntimeExports.jsxs(Trans,{i18nKey:"upgradeModal.legacyAiUnlockHeader",children:["⚠️ Khi mở khóa, bạn sở hữu ",jsxRuntimeExports.jsx("u",{children:"VĨNH VIỄN TẤT CẢ"})," các công cụ sau:"]})}),jsxRuntimeExports.jsx(Typography,{component:"span",variant:"body2",sx:{color:"#bf360c",ml:1,lineHeight:1.45,display:"block"},children:o==="aiToolsGroup4"?jsxRuntimeExports.jsxs(Trans,{i18nKey:"upgradeModal.aiGroup4Features",children:["• Tạo bảng tích hợp NL AI vào KHGD",jsxRuntimeExports.jsx("br",{}),"• Soạn Giáo án Tích hợp AI",jsxRuntimeExports.jsx("br",{}
313),"• Soạn Giáo án Chuyên đề AI",jsxRuntimeExports.jsx("br",{}),"• Tài liệu tập huấn Năng lực AI (miễn phí)"]}):o==="aiSpecialist"||o==="aiToolsGroup3"?jsxRuntimeExports.jsxs(Trans,{i18nKey:"upgradeModal.aiGroup3Features",children:["• Viết báo cáo kỹ thuật (NCKH)",jsxRuntimeExports.jsx("br",{}),"• Tạo sản phẩm phần mềm (AI App)"]}):o==="aiTools"?jsxRuntimeExports.jsxs(Trans,{i18nKey:"upgradeModal.aiGroup1Features",children:["• Viết sáng kiến kinh nghiệm",jsxRuntimeExports.jsx("br",{}),"• Biện pháp giáo viên giỏi",jsxRuntimeExports.jsx("br",{}),"• Giáo án tích hợp NLS",jsxRuntimeExports.jsx("br",{}),"• Phân tích học bạ (Sổ theo dõi)"]}):jsxRuntimeExports.jsxs(Trans,{i18nKey:"upgradeModal.aiGroup2Features",children:["• Tạo đề thi theo CV 7991",jsxRuntimeExports.jsx("br",{}),"• Tạo đề thi CV 7991 Tiếng Anh",jsxRuntimeExports.jsx("br",{}),"• Tạo đề thi chuẩn Ngữ văn",jsxRuntimeExports.jsx("br",{}),"• Công cụ Phân tích Đề thi"]})})]}),!ue&&!fe&&!ve&&!Te&&ne!=="aiSpecialist"&&ne!=="conductEvaluation"&&ne!=="proPlan"&&ne!=="extendedLink"&&ne!=="aiToolsGroup4"&&ne!=="nhanxetExtension"&&ne!=="formatiW"&&ne!=="pasteAi"&&ne!=="chuanNgheNghiep"&&ne!=="addInWord"&&ne!=="mathAssistant"&&ne!=="fullAiPlan"&&ne!=="fullTienIch"&&jsxRuntimeExports.jsxs(Box,{component:"span",sx:{display:"block",color:"#1565c0",mt:.5},children:["🎁 ",P("upgradeModal.expiryDateInfo",{date:st})]}),!ue&&ce==="interactiveVideo"&&!fe&&!ve&&!Te&&jsxRuntimeExports.jsx(Box,{component:"span",sx:{display:"block",color:"#1565c0",mt:.5},children:P("upgradeModal.interactiveVideoDownload")}),!ue&&!fe&&!ve&&!Te&&ne!=="aiSpecialist"&&ne!=="conductEvaluation"&&ne!=="journey"&&ne!=="versusGame"&&ne!=="extendedLink"&&ne!=="aiToolsGroup4"&&ne!=="nhanxetExtension"&&ne!=="formatiW"&&ne!=="pasteAi"&&ne!=="chuanNgheNghiep"&&ne!=="addInWord"&&ne!=="mathAssistant"&&ne!=="fullAiPlan"&&ne!=="fullTienIch"&&jsxRuntimeExports.jsx(Box,{component:"span",sx:{display:"block",color:"#e65100",mt:.5},children:o==="htmlEmbedGame"||o==="ttsVoiceTool"?P("upgradeModal.postExpiryWarning"):P("upgradeModal.expiryWarning",{count:TRIAL_LIMITS[ce]||5})}),!ue&&!fe&&!ve&&!Te&&ne!=="aiSpecialist"&&ne!=="conductEvaluation"&&ne!=="proPlan"&&ne!=="journey"&&ne!=="versusGame"&&ne!=="extendedLink"&&ne!=="aiToolsGroup4"&&ne!=="nhanxetExtension"&&ne!=="formatiW"&&ne!=="pasteAi"&&ne!=="chuanNgheNghiep"&&ne!=="addInWord"&&ne!=="mathAssistant"&&ne!=="fullAiPlan"&&ne!=="fullTienIch"&&jsxRuntimeExports.jsx(Box,{sx:{display:"block",mt:1,p:1,bgcolor:"#ffebee",border:"2px dashed #d32f2f",borderRadius:1,textAlign:"center",animation:"pulseWarning 2s ease-in-out infinite","@keyframes pulseWarning":{"0%, 100%":{borderColor:"#d32f2f",bgcolor:"#ffebee"},"50%":{borderColor:"#f44336",bgcolor:"#ffcdd2"}}},children:jsxRuntimeExports.jsx(Typography,{component:"span",variant:"body2",sx:{color:"#b71c1c",fontWeight:"bold",fontSize:"0.85rem",letterSpacing:"0.02em"},children:P("upgradeModal.expiryWarningNoAudio")})})]})}),o==="proPlan"&&jsxRuntimeExports.jsxs(Box,{sx:{display:"flex",gap:1.5,mb:1.5,flexWrap:{xs:"wrap",sm:"nowrap"}},children:[jsxRuntimeExports.jsxs(Box,{sx:{flex:1,p:1,bgcolor:"#f0fdf4",border:"1px solid #86efac",borderRadius:1.5},children:[jsxRuntimeExports.jsx(Typography,{variant:"body2",sx:{fontWeight:900,color:"#1565c0",mb:.5,fontSize:"0.82rem"},children:P("proModal.unlockBenefits")}),jsxRuntimeExports.jsxs(Box,{component:"ul",sx:{m:0,pl:2,fontSize:"0.85rem",lineHeight:1.7,color:"#1a3a1a"},children:[jsxRuntimeExports.jsxs("li",{children:["♾️ ",jsxRuntimeExports.jsxs(Trans,{i18nKey:"proModal.unlimitedGames",ns:"common",children:["Tạo ",jsxRuntimeExports.jsx("strong",{children:"không giới hạn"})," game giảng dạy, trò chơi, video,..."]})]}),jsxRuntimeExports.jsxs("li",{children:["🎙️ ",jsxRuntimeExports.jsxs(Trans,{i18nKey:"proModal.audioAndReport",ns:"common",children:[jsxRuntimeExports.jsx("strong",{children:"Có thể tải/thu âm"})," vào câu hỏi/đáp án. ",jsxRuntimeExports.jsx("strong",{children:"Nhận Báo cáo chi tiết khi giao bài cho học sinh"})]})]})]})]}),jsxRuntimeExports.jsxs(Box,{sx:{flex:1,display:"flex",alignItems:"center",gap:.8,p:1,bgcolor:"#ffebee",border:"2px s
313olid #f44336",borderRadius:1.5,animation:"warnPulse 2s ease-in-out infinite","@keyframes warnPulse":{"0%, 100%":{borderColor:"#f44336"},"50%":{borderColor:"#b71c1c"}}},children:[jsxRuntimeExports.jsx("span",{style:{fontSize:"1.4rem",flexShrink:0},children:"🚫"}),jsxRuntimeExports.jsxs(Typography,{variant:"body2",sx:{color:"#b71c1c",fontWeight:900,fontSize:"0.78rem",lineHeight:1.5},children:[P("proModal.notIncluded"),jsxRuntimeExports.jsx("br",{}),jsxRuntimeExports.jsxs(Trans,{i18nKey:"proModal.excludedServices",ns:"common",children:[jsxRuntimeExports.jsx("span",{style:{fontWeight:700},children:"Các Công cụ AI, các Tiện ích GD"})," & ",jsxRuntimeExports.jsx("span",{style:{fontWeight:700},children:"Mô phỏng bài dạy, Khóa học, Giáo viên chủ nhiệm"})]}),jsxRuntimeExports.jsxs(Box,{component:"span",sx:{display:"block",fontSize:"0.72rem",mt:.3},children:["(",jsxRuntimeExports.jsx("a",{href:"https://giaoviendoimoi.com/ai-tools",target:"_blank",rel:"noopener noreferrer",style:{color:"#1565c0",fontWeight:700},children:P("proModal.buyAiTools")})," · ",jsxRuntimeExports.jsx("a",{href:"https://giaoviendoimoi.com/tien-ich-giao-duc",target:"_blank",rel:"noopener noreferrer",style:{color:"#1565c0",fontWeight:700},children:P("proModal.buyEdutech")}),")"]})]})]})]}),jsxRuntimeExports.jsx(FeatureComparisonTable,{buttonLabel:o==="proPlan"?P("proModal.compareProFree"):ve?P("upgradeModal.compareAiBundle"):fe||Te?P("upgradeModal.compareFeature",{name:tt}):P("upgradeModal.compareUpgradeFeature",{name:tt}),paidColumnLabel:o==="proPlan"?"FullGame":P("upgradeModal.paidColumnLabel"),rows:Ze}),jsxRuntimeExports.jsxs(Box,{sx:{display:"flex",gap:1.5,alignItems:"flex-start",flexWrap:{xs:"wrap",md:"nowrap"}},children:[jsxRuntimeExports.jsxs(Box,{sx:{flex:"1 1 170px",minWidth:0,display:"flex",flexDirection:"column",alignItems:"stretch"},children:[Me>0&&jsxRuntimeExports.jsxs(Box,{sx:{mb:1,px:1.25,py:.6,width:"100%",bgcolor:"#fff8e1",border:"2px solid #f57f17",borderRadius:2,textAlign:"center",animation:"promoPulse 1.8s ease-in-out infinite","@keyframes promoPulse":{"0%, 100%":{borderColor:"#f57f17",bgcolor:"#fff8e1"},"50%":{borderColor:"#ff6f00",bgcolor:"#fff3cd"}}},children:[jsxRuntimeExports.jsx(Typography,{variant:"body2",sx:{fontWeight:900,color:"#e65100",fontSize:"0.88rem"},children:P("upgradeModal.promoMayTitle")}),jsxRuntimeExports.jsx(Typography,{variant:"body2",sx:{fontWeight:700,color:"#bf360c",fontSize:"0.82rem"},children:jsxRuntimeExports.jsx(Trans,{i18nKey:"upgradeModal.promoBonusDesc",values:{bonus:Me},components:{strong:jsxRuntimeExports.jsx("strong",{})}})}),jsxRuntimeExports.jsx(Typography,{variant:"caption",sx:{color:"#e65100"},children:P("upgradeModal.promoValidUntil",{date:getPromoEndLabel()})})]}),pe&&jsxRuntimeExports.jsx(Typography,{sx:{fontSize:"0.82rem",fontWeight:700,color:"#333",mb:.5,textAlign:"center"},children:P("upgradeModal.selectYearsLabel")}),pe&&jsxRuntimeExports.jsx(Box,{sx:{display:"flex",gap:.5,flexWrap:"wrap",justifyContent:"center"},children:(ne==="mathAssistant"?[1,2,3]:[1,2,3,5]).map(je=>{const Be=Le[je]||0;return jsxRuntimeExports.jsxs(Box,{sx:{position:"relative"},children:[jsxRuntimeExports.jsxs(Button,{variant:ae===je?"contained":"outlined",color:"success",size:"small",onClick:()=>re(je),sx:{minWidth:"44px",px:.5,py:.3,fontSize:"0.74rem"},children:[je," ",P("upgradeModal.years")||"năm"]}),Be>0&&jsxRuntimeExports.jsxs(Box,{sx:{position:"absolute",top:-7,right:-7,bgcolor:"#f44336",color:"#fff",fontSize:"0.55rem",fontWeight:"bold",borderRadius:"8px",px:"3px",py:"1px",lineHeight:1.4,pointerEvents:"none"},children:["-",Be,"%"]})]},je)})}),pe&&!ve&&!(fe&&!Te)&&!ue&&jsxRuntimeExports.jsx(Button,{variant:"contained",fullWidth:!0,size:"small",onClick:()=>X(!0),sx:{mt:1,background:"linear-gradient(135deg, #22c55e, #16a34a)",color:"#fff",fontWeight:900,fontSize:"0.82rem",letterSpacing:"0.02em",border:"2px solid #15803d","&:hover":{background:"linear-gradient(135deg, #16a34a, #15803d)"}},children:P("upgradeModal.groupBuyBtn")}),jsxRuntimeExports.jsxs(Box,{sx:{display:"flex",flexDirection:"column",gap:.75,mt:1,alignItems:"center"},children:[jsxRuntimeExports.jsx(TextField,{size:"small",placeholder:P("upgradeModal.promoPlaceholder")||"Mã giảm giá (nếu có)...",value:W,onChange:je=>K(je.target.value),disabled:!!Y,error:!!oe,helperText:oe,fullWidth:!0,sx:{bgcolor:"#fff",borderRadius:1},InputProps:{sx:{height:"36px"}}}),Y?jsxRuntimeExports.jsx(Button,{variant:"outlined",color:"error",size:"small",onClick:()=>{ee(null),K(""),se("")},sx:{height:"36px",minWidth:"90px"},children:P("upgradeModal.deleteBtn")||"Xóa"}):jsxRuntimeExports.jsx(Button,{variant:"contained",color:"primary",size:"small",onClick:()=>{const je=W.trim().toUpperCase();if(!je){se(P("upgradeModal.promoCodeRequired"));return}const Be=PAYMENT_CONFIG.PROMO_CODES?PAYMENT_CONFIG.PROMO_CODES[je]:void 0;if(Be)ee({code:je,discount:Be}),se(""),ie(0);else{const Qe=Q+1;ie(Qe),Qe>=3?(D.error(P("upgradeModal.promoCodeInvalidToast")),T()):se(P("upgradeModal.promoCodeInvalid"))}},sx:{height:"36px",minWidth:"90px",flexShrink:0},children:P("upgradeModal.applyBtn")||"Áp dụng"})]}),jsxRuntimeExports.jsxs(Typography,{sx:{mt:1,fontSize:"0.86rem",fontWeight:900,color:"#d32f2f",textAlign:"center",lineHeight:1.3},children:[P("upgradeModal.scanQrPrompt")," ➡️"]})]}),jsxRuntimeExports.jsxs(Box,{sx:{flex:"0 0 auto",display:"flex",flexDirection:"column",alignItems:"center",width:230},children:[jsxRuntimeExports.jsx("img",{src:Xe,alt:P("upgradeModal.qrAlt"),style:{width:"200px",height:"200px",borderRadius:8}}),jsxRuntimeExports.jsxs(Box,{sx:{mt:1,p:1.25,bgcolor:"#fff3cd",border:"2px s
313olid #ffc107",borderRadius:2,textAlign:"center",width:"100%"},children:[(Y||qe>0)&&jsxRuntimeExports.jsxs(Typography,{variant:"body2",sx:{textDecoration:"line-through",color:"#777"},children:[(pe?ke*ae:ke).toLocaleString("vi-VN")," VNĐ"]}),jsxRuntimeExports.jsxs(Box,{sx:{display:"flex",alignItems:"baseline",justifyContent:"center",gap:.5,flexWrap:"nowrap"},children:[jsxRuntimeExports.jsxs(Typography,{variant:"h6",sx:{fontWeight:"bold",color:"#f44336",lineHeight:1.2,whiteSpace:"nowrap"},children:["💳 ",et.toLocaleString("vi-VN")," VNĐ"]}),jsxRuntimeExports.jsx(Typography,{variant:"caption",sx:{color:"#555",whiteSpace:"nowrap"},children:o==="extendedLink"?P("upgradeModal.perExtendedLink",{tier:_}):pe?P("upgradeModal.perYears",{years:ae}):P("upgradeModal.forever")})]}),(Y||qe>0)&&(()=>{const je=[];return Y&&je.push(P("upgradeModal.promoCodeFormat",{discount:Y.discount})),qe>0&&je.push(P("upgradeModal.multiYearDiscountFormat",{years:ae,discount:qe})),jsxRuntimeExports.jsxs(Typography,{variant:"caption",sx:{color:"#2e7d32",fontWeight:"bold",display:"block"},children:["(",je.join(" + "),")"]})})()]})]}),jsxRuntimeExports.jsxs(Box,{sx:{flex:"1 1 190px",minWidth:0,display:"flex",flexDirection:"column",gap:1},children:[jsxRuntimeExports.jsx(Box,{sx:{py:.75,px:1.25,bgcolor:"#e8f5e9",border:"1px solid #a5d6a7",borderRadius:2},children:jsxRuntimeExports.jsxs(Typography,{sx:{fontSize:"0.8rem",fontWeight:700,color:"#2e7d32",lineHeight:1.4},children:["✅ ",P("upgradeModal.qrAutoFillNote")]})}),jsxRuntimeExports.jsx(ManualTransferAccordion,{transferContent:Ie,amount:et}),ue&&jsxRuntimeExports.jsx(Alert,{severity:"warning",sx:{py:.5},children:jsxRuntimeExports.jsxs(Typography,{variant:"body2",sx:{fontSize:"0.8rem"},children:[P("upgradeModal.offlineWarning")," ",jsxRuntimeExports.jsx(Box,{component:"span",onClick:()=>U(!0),sx:{color:"#1976d2",cursor:"pointer",textDecoration:"underline",fontWeight:"bold"},children:P("upgradeModal.clickToView")})]})}),jsxRuntimeExports.jsx(Alert,{severity:"warning",sx:{py:.5},children:jsxRuntimeExports.jsxs(Typography,{variant:"body2",sx:{fontSize:"0.8rem"},children:[P("upgradeModal.contactTitle")," ","📞 ",jsxRuntimeExports.jsx("strong",{children:"0363.357.745"})," |"," ","💬 ",jsxRuntimeExports.jsx("a",{href:"https://zalo.me/0363357745",target:"_blank",rel:"noopener noreferrer",children:"Zalo"})," |"," ","📧 ",jsxRuntimeExports.jsx("a",{href:"mailto:[email protected]",children:"Email"})]})})]})]})]}),jsxRuntimeExports.jsxs(DialogActions,{sx:{px:2,py:1,gap:1},children:[jsxRuntimeExports.jsxs(Link,{component:"button",variant:"body2",onClick:()=>{B(!0),O(!1)},sx:{color:"#1976d2",cursor:"pointer",textDecoration:"underline",fontSize:"0.8rem",mr:"auto"},children:["🌍 ",P("upgradeModal.internationalBtn")]}),jsxRuntimeExports.jsx(Button,{onClick:T,variant:"outlined",size:"small",children:P("upgradeModal.closeBtn")}),jsxRuntimeExports.jsx(Button,{onClick:()=>window.open("https://zalo.me/0363357745","_blank"),variant:"outlined",color:"primary",size:"small",children:P("upgradeModal.contactBtn")}),jsxRuntimeExports.jsx(Button,{onClick:()=>window.location.reload(),variant:"contained",color:"success",size:"small",children:P("upgradeModal.reloadBtn")})]})]}),jsxRuntimeExports.jsx(OfflineWarningDialog,{open:V,onClose:()=>U(!1),featureName:ce}),jsxRuntimeExports.jsx(GroupPurchaseModal,{open:Z,onClose:()=>X(!1),feature:o,featureCode:we,basePrice:ke,selectedYears:ae,featureName:de?Se.nameEn:Se.name})]})}function OfflineWarningDialog({open:o,onClose:u,featureName:T,onConfirm:S}){const{t:E}=useTranslation("common"),C=FEATURE_ONLINE_URL[T]||"giaoviendoimoi.com",_=()=>{S?S():u()};return jsxRuntimeExports.jsxs(Dialog,{open:o,onClose:u,maxWidth:"sm",fullWidth:!0,children:[jsxRuntimeExports.jsx(DialogTitle,{sx:{background:"#b71c1c",color:"white",fontWeight:"bold",fontSize:"1rem"},children:E("upgradeModal.offlineWarningDialog.title")}),jsxRuntimeExports.jsxs(DialogContent,{sx:{pt:2},children:[jsxRuntimeExports.jsx(Box,{sx:{mb:2,p:2,bgcolor:"#ffebee",border:"2px solid #ef5350",borderRadius:1},children:jsxRuntimeExports.jsxs(Typography,{variant:"body1",sx:{fontWeight:"bold",color:"#c62828",textAlign:"center"},children:["🚀 ",E("upgradeModal.offlineWarningDialog.pptWarning")]})}),jsxRuntimeExports.jsx(Box,{sx:{mb:2,p:1.5,bgcolor:"#fff3e0",border:"1px solid #ff9800",borderRadius:1},children:jsxRuntimeExports.jsx(Typography,{variant:"body2",sx:{fontWeight:"bold",mb:.5},children:E("upgradeModal.offlineWarningDialog.usageNote")})}),jsxRuntimeExports.jsx(Typography,{variant:"body2",sx:{fontWeight:"bold",color:"#b71c1c",mb:1},children:E("upgradeModal.offlineWarningDialog.dataNoteTitle")}),jsxRuntimeExports.jsxs(Box,{component:"ul",sx:{pl:2,mb:2,"& li":{mb:.75}},children:[jsxRuntimeExports.jsx(Typography,{component:"li",variant:"body2",children:E("upgradeModal.offlineWarningDialog.dataNote1")}),jsxRuntimeExports.jsx(Typography,{component:"li",variant:"body2",children:E("upgradeModal.offlineWarningDialog.dataNote2")}),jsxRuntimeExports.jsx(Typography,{component:"li",variant:"body2",children:E("upgradeModal.offlineWarningDialog.dataNote3")}),jsxRuntimeExports.jsx(Typography,{component:"li",variant:"body2",children:E("upgradeModal.offlineWarningDialog.dataNote4")})]}),jsxRuntimeExports.jsx(Typography,{variant:"body2",sx:{fontWeight:"bold",color:"#b71c1c",mb:1},children:E("upgradeModal.offlineWarningDialog.limitationsTitle")}),jsxRuntimeExports.jsx(Typography,{variant:"body2",sx:{mb:1},children:E("upgradeModal.offlineWarningDialog.limitationsDesc",{url:C})}),jsxRuntimeExports.jsxs(Box,{component:"ul",sx:{pl:2,mb:1,"& li":{mb:.75}},children:[jsxRuntimeExports.jsx(Typography,{component:"li",variant:"body2",children:E("upgradeModal.offlineWarningDialog.limit1")}),jsxRuntimeExports.jsx(Typography,{component:"li",variant:"body2",children:E("upgradeModal.offlineWarningDialog.limit2")}),jsxRuntimeExports.jsx(Typography,{component:"li",variant:"body2",children:E("upgradeModal.offlineWarningDialog.limit3")}),jsxRuntimeExports.jsx(Typography,{component:"li",variant:"body2",children:E("upgradeModal.offlineWarningDialog.limit4")}),jsxRuntimeExports.jsx(Typography,{component:"li",variant:"body2",children:E("upgradeModal.offlineWarningDialog.limit5")})]})]}),jsxRuntimeExports.jsxs(DialogActions,{children:[jsxRuntimeExports.jsx(Button,{onClick:u,variant:"outlined",children:E("upgradeModal.closeBtn")}),jsxRuntimeExports.jsx(Button,{onClick:_,variant:"contained",color:"error",children:E("upgradeModal.offlineWarningDialog.gotIt")})]})]})}function Header(){var re,J;const o=useNavigate(),{currentUser:u,logout:T}=useAuth(),{pathname:S}=useLocation(),E=useTheme(),C=useMediaQuery(E.breakpoints.down("md")),{t:_,i18n:P}
313=useTranslation("common"),R=P.language==="pl",{subscription:I,subLoading:L,proModalOpen:j,setProModalOpen:M}=useSubscription(),[D,F]=reactExports.useState(!1),[N,G]=reactExports.useState(!1),B="header_intro_played",H=reactExports.useRef(sessionStorage.getItem(B)==="1");reactExports.useEffect(()=>{H.current||sessionStorage.setItem(B,"1")},[]),reactExports.useEffect(()=>{const te=()=>G(!!document.fullscreenElement);return document.addEventListener("fullscreenchange",te),()=>document.removeEventListener("fullscreenchange",te)},[]);const[O,V]=reactExports.useState(!1),U=reactExports.useRef(null),[W,K]=reactExports.useState(null),Y="join_sticker_dismissed_at",[ee,oe]=reactExports.useState(()=>{const te=localStorage.getItem("join_sticker_dismissed_at");return te?Date.now()-Number(te)<=24*60*60*1e3:!1}),se=async()=>{try{await T()}catch(te){console.error("Logout error:",te)}},Q=te=>Z=>{Z.type==="keydown"&&(Z.key==="Tab"||Z.key==="Shift")||F(te)},ie=(te,Z=!1,X=null)=>{if(F(!1),X==="logout"){se();return}Z?window.open(te,"_blank"):o(te)},ae=[{label:_("nav.home"),path:"/dashboard",icon:jsxRuntimeExports.jsx(HomeIcon,{}),external:!1},{label:_("nav.aiTools"),path:"/ai-tools",icon:jsxRuntimeExports.jsx(Star,{}),external:!1},{label:_("nav.edutech"),path:"/tien-ich-giao-duc",icon:jsxRuntimeExports.jsx(CheckCircle,{}),external:!1,showBadge:!0},{label:_("nav.lessonSimulation"),path:"/mo-phong-bai-day",icon:jsxRuntimeExports.jsx(Star,{}),external:!1},{label:_("nav.courses"),path:"/teaching-materials",icon:jsxRuntimeExports.jsx(FolderOpenIcon,{}),external:!1},{label:_("nav.questionBank"),path:"/question-bank",icon:jsxRuntimeExports.jsx(QuestionIcon,{}),external:!1},{label:_("nav.assignments"),path:"/assignments",icon:jsxRuntimeExports.jsx(AssignIcon,{}),external:!1},{label:_("nav.join"),path:"/thamgia",icon:jsxRuntimeExports.jsx(JoinIcon,{}),external:!0},{label:_("nav.community"),path:"/community-library",icon:jsxRuntimeExports.jsx(LibraryBooksIcon,{}),external:!1},{label:_("nav.logout"),path:"logout",icon:jsxRuntimeExports.jsx(LogoutIcon,{}),external:!1,action:"logout"}];return jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsx(motion.header,{className:"app-header",style:{display:N?"none":void 0},initial:H.current?!1:{y:-100},animate:{y:0},transition:{duration:.5},children:jsxRuntimeExports.jsxs("div",{className:"header-content",children:[jsxRuntimeExports.jsxs("div",{className:"header-left",children:[C&&jsxRuntimeExports.jsx(IconButton,{"aria-label":"open drawer",edge:"start",onClick:Q(!0),sx:{display:{xs:"flex",md:"none"},color:"#333333",backgroundColor:"rgba(0, 0, 0, 0.04)",marginRight:1,"&:hover":{backgroundColor:"rgba(0, 0, 0, 0.08)"}},children:jsxRuntimeExports.jsx(MenuIcon,{sx:{color:"#333333",fontSize:32}})}),jsxRuntimeExports.jsx("div",{className:"header-logo",onClick:()=>o("/dashboard"),style:{cursor:"pointer"},children:!C&&jsxRuntimeExports.jsx("h1",{className:"logo-text",style:{fontSize:R?"1.15rem":"1.4rem"},children:_("nav.logoName")})}),!C&&jsxRuntimeExports.jsxs("div",{className:"header-slogan-section",style:{gap:R?"8px":"15px"},children:[jsxRuntimeExports.jsxs(motion.button,{className:S==="/dashboard"?"home-ai-btn":"home-nav-btn",onClick:()=>o("/dashboard"),whileHover:{scale:1.05},whileTap:{scale:.95},title:_("nav.home"),style:{fontSize:R?"0.82rem":"0.9rem",padding:R?"6px 10px":"8px 14px"},children:[jsxRuntimeExports.jsx("span",{className:"home-nav-icon",children:"🏠"}),jsxRuntimeExports.jsx("span",{children:R?_("nav.home").replace("Strona Główna","Start"):_("nav.home")})]}),jsxRuntimeExports.jsxs(motion.button,{className:S==="/ai-tools"?"home-ai-btn":"home-nav-btn",onClick:()=>o("/ai-tools"),whileHover:{scale:1.05},whileTap:{scale:.95},title:_("nav.aiTools"),style:{fontSize:R?"0.82rem":"0.9rem",padding:R?"6px 10px":"8px 14px"},children:[jsxRuntimeExports.jsx("span",{className:"home-nav-icon",children:"✨"}),jsxRuntimeExports.jsx("span",{children:_("nav.aiTools")})]}),jsxRuntimeExports.jsxs(motion.button,{className:S==="/tien-ich-giao-duc"?"home-ai-btn":"home-nav-btn",onClick:()=>o("/tien-ich-giao-duc"),whileHover:{scale:1.05},whileTap:{scale:.95},title:_("nav.edutech"),style:{fontSize:R?"0.82rem":"0.9rem",padding:R?"6px 10px":"8px 14px",position:"relative"},children:[jsxRuntimeExports.jsx("span",{className:"home-nav-icon",children:"🧩"}),jsxRuntimeExports.jsx("span",{children:_("nav.edutech")})]}),jsxRuntimeExports.jsxs(motion.button,{className:S==="/mo-phong-bai-day"?"home-ai-btn":"home-nav-btn",onClick:()=>o("/mo-phong-bai-day"),whileHover:{scale:1.05},whileTap:{scale:.95},title:_("nav.lessonSimulation"),style:{fontSize:R?"0.82rem":"0.9rem",padding:R?"6px 10px":"8px 14px",position:"relative"},children:[jsxRuntimeExports.jsx("span",{className:"home-nav-icon",children:"🧪"}),jsxRuntimeExports.jsx("span",{children:_("nav.lessonSimulation")}),jsxRuntimeExports.jsx("span",{className:"home-nav-badge-new",children:"NEW"})]}),jsxRuntimeExports.jsxs(motion.button,{className:S==="/teaching-materials"?"home-ai-btn":"home-nav-btn",onClick:()=>o("/teaching-materials"),whileHover:{scale:1.05},whileTap:{scale:.95},title:_("nav.courses"),style:{fontSize:R?"0.82rem":"0.9rem",padding:R?"6px 10px":"8px 14px"},children:[jsxRuntimeExports.jsx("span",{className:"home-nav-icon",children:"📂"}),jsxRuntimeExports.jsx("span",{children:_("nav.courses")})]}),jsxRuntimeExports.jsxs(motion.button,{className:"home-nav-btn",onClick:()=>window.open("https://giaovienchunhiem.com","_blank"),whileHover:{scale:1.05},whileTap:{scale:.95},title:_("nav.homeroom"),style:{fontSize:R?"0.82rem":"0.9rem",padding:R?"6px 10px":"8px 14px",position:"relative"},children:[jsxRuntimeExports.jsx("span",{className:"home-nav-icon",children:"🧑‍🏫"}),jsxRuntimeExports.jsx("span",{children:_("nav.homeroom")}),jsxRuntimeExports.jsx("span",{style:{position:"absolute",top:-6,right:-6,background:"#f44336",color:"#fff",fontSize:"0.5rem",fontWeight:800,borderRadius:"6px",padding:"1px 4px",lineHeight:1.4,pointerEvents:"none",letterSpacing:"0.02em",whiteSpace:"nowrap"},children:"NEW"})]})]})]}),jsxRuntimeExports.jsxs("div",{className:"header-user",children:[jsxRuntimeExports.jsx(motion.button,{onClick:te=>K(te.currentTarget),whileHover:{scale:1.08},whileTap:{scale:.92},title:_("language.switchTo"),style:{background:"transparent",color:"inherit",border:"1px solid rgba(0,0,0,0.12)",borderRadius:"6px",padding:"4px 8px",fontSize:"1.3rem",cursor:"pointer",lineHeight:1,flexShrink:0},children:jsxRuntimeExports.jsx("img",{src:"/images/languages.png",alt:"Language",style:{width:"24px",height:"24px",objectFit:"cover",borderRadius:"3px",display:"block"}})}
313),jsxRuntimeExports.jsxs(Menu,{anchorEl:W,open:!!W,onClose:()=>K(null),transformOrigin:{horizontal:"right",vertical:"top"},anchorOrigin:{horizontal:"right",vertical:"bottom"},PaperProps:{elevation:0,sx:{overflow:"visible",filter:"drop-shadow(0px 2px 8px rgba(0,0,0,0.32))",mt:1.5,"&:before":{content:'""',display:"block",position:"absolute",top:0,right:14,width:10,height:10,bgcolor:"background.paper",transform:"translateY(-50%) rotate(45deg)",zIndex:0}}},children:[jsxRuntimeExports.jsxs(MenuItem,{selected:P.language==="vi",onClick:()=>{P.changeLanguage("vi"),K(null)},children:[jsxRuntimeExports.jsx("img",{src:viFlag,alt:"Tiếng Việt",style:{width:24,height:24,marginRight:12,borderRadius:3,objectFit:"cover"}}),"Tiếng Việt"]}),jsxRuntimeExports.jsxs(MenuItem,{selected:P.language==="en",onClick:()=>{P.changeLanguage("en"),K(null)},children:[jsxRuntimeExports.jsx("img",{src:enFlag,alt:"English",style:{width:24,height:24,marginRight:12,borderRadius:3,objectFit:"cover"}}),"English"]}),jsxRuntimeExports.jsxs(MenuItem,{selected:P.language==="pl",onClick:()=>{P.changeLanguage("pl"),K(null)},children:[jsxRuntimeExports.jsx("span",{style:{fontSize:"20px",width:24,height:24,marginRight:12,display:"flex",alignItems:"center",justifyContent:"center"},children:"🇵🇱"}),"Polski"]})]}),u&&!L&&jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:jsxRuntimeExports.jsxs("div",{className:"user-info",ref:U,style:{position:"relative"},children:[u.photoURL?jsxRuntimeExports.jsx("img",{src:u.photoURL,alt:u.displayName||"",className:"user-avatar",onClick:()=>V(te=>!te),title:u.displayName||"",style:{cursor:"pointer"}}):jsxRuntimeExports.jsx("div",{className:"user-avatar",onClick:()=>V(te=>!te),title:u.displayName||"",style:{cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",background:"linear-gradient(135deg, #667eea, #764ba2)",color:"#fff",fontWeight:700,fontSize:"1.1rem"},children:((J=(re=u.displayName)==null?void 0:re[0])==null?void 0:J.toUpperCase())||"?"}),O&&(()=>{var Z;const te=(Z=U.current)==null?void 0:Z.getBoundingClientRect();return jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsx("div",{style:{position:"fixed",inset:0,zIndex:2e3},onClick:()=>V(!1)}),jsxRuntimeExports.jsxs("div",{style:{position:"fixed",top:te?te.bottom+10:60,right:te?window.innerWidth-te.right:0,zIndex:2001,background:"#fff",borderRadius:"10px",boxShadow:"0 8px 30px rgba(0,0,0,0.15)",minWidth:"170px",padding:"8px",border:"1px solid rgba(0,0,0,0.08)"},children:[jsxRuntimeExports.jsx("div",{style:{padding:"6px 10px 10px",fontSize:"0.85rem",fontWeight:600,color:"#444",borderBottom:"1px solid #f0f0f0",marginBottom:"6px",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",maxWidth:"180px"},children:u.displayName}),jsxRuntimeExports.jsxs(motion.button,{onClick:()=>{V(!1),o("/lich-su-thanh-toan")},whileHover:{backgroundColor:"#f0f4ff"},style:{display:"flex",alignItems:"center",gap:"8px",width:"100%",padding:"8px 10px",background:"transparent",border:"none",borderRadius:"6px",cursor:"pointer",color:"#333",fontWeight:600,fontSize:"0.9rem",textAlign:"left"},children:[jsxRuntimeExports.jsx("span",{style:{fontSize:"1rem",lineHeight:1},children:"🧾"}),_("nav.paymentHistory")]}),jsxRuntimeExports.jsxs(motion.button,{onClick:()=>{V(!1),se()},whileHover:{backgroundColor:"#fef2f2"},style:{display:"flex",alignItems:"center",gap:"8px",width:"100%",padding:"8px 10px",background:"transparent",border:"none",borderRadius:"6px",cursor:"pointer",color:"#e53e3e",fontWeight:600,fontSize:"0.9rem",textAlign:"left"},children:[jsxRuntimeExports.jsx(LogoutIcon,{style:{fontSize:"1rem"}}),_("header.logoutBtn")]})]})]})})()]})})]})]})}),reactDomExports.createPortal((S==="/"||S==="/dashboard")&&(ee?jsxRuntimeExports.jsx("div",{style:{position:"fixed",bottom:110,left:20,zIndex:9e3,width:48,height:48,borderRadius:"50%",background:"linear-gradient(135deg, #11998e, #38ef7d)",boxShadow:"0 4px 16px rgba(17,153,142,0.45)",display:"flex",alignItems:"center",justifyContent:"center",cursor:"pointer",userSelect:"none"},onClick:()=>window.open("/thamgia","_blank"),title:_("nav.joinForStudents"),children:jsxRuntimeExports.jsx("span",{style:{fontSize:"1.4rem",lineHeight:1},children:"🎓"})}):jsxRuntimeExports.jsxs("div",{style:{position:"fixed",bottom:110,left:20,zIndex:9e3,width:80,height:80,borderRadius:16,background:"linear-gradient(135deg, #11998e, #38ef7d)",boxShadow:"0 4px 16px rgba(17,153,142,0.45)",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",cursor:"pointer",padding:"6px 4px",textAlign:"center",userSelect:"none"},onClick:()=>window.open("/thamgia","_blank"),children:[jsxRuntimeExports.jsx("button",{onClick:te=>{te.stopPropagation(),localStorage.setItem(Y,String(Date.now())),oe(!0)},style:{position:"absolute",top:-6,left:-6,width:20,height:20,borderRadius:"50%",background:"rgba(0,0,0,0.55)",border:"none",color:"#fff",fontSize:"0.65rem",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",lineHeight:1,padding:0},children:"✕"}),jsxRuntimeExports.jsx("span",{style:{fontSize:"1.3rem",lineHeight:1},children:"🎓"}),jsxRuntimeExports.jsx("span",{style:{fontSize:"0.55rem",fontWeight:800,color:"#fff",lineHeight:1.3,marginTop:4,whiteSpace:"pre-line"},children:_("nav.joinForStudents").replace(" (",`
314(`)})]})),document.body),jsxRuntimeExports.jsx(Drawer,{anchor:"left",open:D,onClose:Q(!1),children:jsxRuntimeExports.jsxs(Box,{sx:{width:280,pt:2,pb:2,bgcolor:"background.paper",height:"100%"},role:"presentation",children:[jsxRuntimeExports.jsx(Box,{sx:{px:2,mb:2},children:jsxRuntimeExports.jsx(Typography,{variant:"h6",sx:{fontWeight:"bold",color:"primary.main"},children:_("nav.logoTitle")})}),jsxRuntimeExports.jsx(List,{children:ae.map(te=>jsxRuntimeExports.jsx(ListItem,{disablePadding:!0,children:jsxRuntimeExports.jsxs(ListItemButton,{onClick:()=>ie(te.path,te.external,te.action||null),sx:{py:1.5,"&:hover":{bgcolor:te.action==="logout"?"error.light":"primary.light","& .MuiListItemIcon-root":{color:te.action==="logout"?"error.main":"primary.main"},"& .MuiListItemText-primary":{color:te.action==="logout"?"error.main":"primary.main",fontWeight:"bold"}}},children:[jsxRuntimeExports.jsx(ListItemIcon,{sx:{minWidth:40,color:te.action==="logout"?"error.main":"text.secondary"},children:te.icon}),jsxRuntimeExports.jsx(ListItemText,{primary:jsxRuntimeExports.jsxs(Box,{sx:{display:"flex",alignItems:"center",gap:1},children:[te.label,te.showBadge&&jsxRuntimeExports.jsx(Chip,{label:"NEW",size:"small",color:"error",sx:{height:18,fontSize:"0.6rem",fontWeight:"bold","& .MuiChip-label":{px:.8}}})]}),primaryTypographyProps:{fontSize:"1rem",fontWeight:te.action==="logout"?600:500,color:te.action==="logout"?"error.main":"inherit"}})]})},te.label))})]})}),jsxRuntimeExports.jsx(UpgradeModal,{feature:"proPlan",open:j,onClose:()=>M(!1)})]})}const EFFECT_TYPES={LOTTIE:"lottie",VIDEO:"video"},EFFECTS={CORRECT:{type:EFFECT_TYPES.LOTTIE,src:"/assets/effects/correct.json",duration:2e3},INCORRECT:{type:EFFECT_TYPES.LOTTIE,src:"/assets/effects/incorrect.json",duration:2500}
314,COUNTDOWN:{type:EFFECT_TYPES.LOTTIE,src:"/assets/effects/countdown.json",duration:4e3},VICTORY:{type:EFFECT_TYPES.LOTTIE,src:"/assets/effects/victory.json",duration:3e3},FIREWORKS:{type:EFFECT_TYPES.LOTTIE,src:"/assets/effects/fireworks.json",duration:3e3},CONFETTI:{type:EFFECT_TYPES.LOTTIE,src:"/assets/effects/confetti.json",duration:2500},OPEN_CHEST:{type:EFFECT_TYPES.LOTTIE,src:"/assets/effects/open-chest.json",duration:3e3},STAR:{type:EFFECT_TYPES.LOTTIE,src:"/assets/effects/star.json",duration:1500},POINTS:{type:EFFECT_TYPES.LOTTIE,src:"/assets/effects/points.json",duration:1500}};function getEffectConfig(o){return EFFECTS[o]||null}function hasEffect(o){return o in EFFECTS}const EffectContext=reactExports.createContext(null);function EffectProvider({children:o}){const[u,T]=reactExports.useState(null),S=reactExports.useCallback((P,R={})=>{if(!hasEffect(P)){console.warn(`[EffectSystem] Effect "${P}" not found in config`);return}const I=getEffectConfig(P),L=R.duration||I.duration;T({name:P,config:I,options:R,startTime:Date.now()}),setTimeout(()=>{T(j=>{var M;return(j==null?void 0:j.name)===P&&(j!=null&&j.startTime)?((M=R.onComplete)==null||M.call(R),null):j})},L)},[]),E=reactExports.useCallback(()=>{T(null)},[]),_={currentEffect:u,playEffect:S,stopEffect:E,isPlaying:u!==null};return jsxRuntimeExports.jsx(EffectContext.Provider,{value:_,children:o})}function useEffectSystem(){const o=reactExports.useContext(EffectContext);if(!o)throw new Error("useEffectSystem must be used within an EffectProvider");return o}var lottie$1={exports:{}};(function(module,exports){typeof document<"u"&&typeof navigator<"u"&&function(o,u){module.exports=u()}(commonjsGlobal,function(){var svgNS="http://www.w3.org/2000/svg",locationHref="",_useWebWorker=!1,initialDefaultFrame=-999999,setWebWorker=function(u){_useWebWorker=!!u},getWebWorker=function(){return _useWebWorker},setLocationHref=function(u){locationHref=u},getLocationHref=function(){return locationHref};function createTag(o){return document.createElement(o)}function extendPrototype(o,u){var T,S=o.length,E;for(T=0;T<S;T+=1){E=o[T].prototype;for(var C in E)Object.prototype.hasOwnProperty.call(E,C)&&(u.prototype[C]=E[C])}}function getDescriptor(o,u){return Object.getOwnPropertyDescriptor(o,u)}function createProxyFunction(o){function u(){}return u.prototype=o,u}var audioControllerFactory=function(){function o(u){this.audios=[],this.audioFactory=u,this._volume=1,this._isMuted=!1}return o.prototype={addAudio:function(T){this.audios.push(T)},pause:function(){var T,S=this.audios.length;for(T=0;T<S;T+=1)this.audios[T].pause()},resume:function(){var T,S=this.audios.length;for(T=0;T<S;T+=1)this.audios[T].resume()},setRate:function(T){var S,E=this.audios.length;for(S=0;S<E;S+=1)this.audios[S].setRate(T)},createAudio:function(T){return this.audioFactory?this.audioFactory(T):window.Howl?new window.Howl({src:[T]}):{isPlaying:!1,play:function(){this.isPlaying=!0},seek:function(){this.isPlaying=!1},playing:function(){},rate:function(){},setVolume:function(){}}},setAudioFactory:function(T){this.audioFactory=T},setVolume:function(T){this._volume=T,this._updateVolume()},mute:function(){this._isMuted=!0,this._updateVolume()},unmute:function(){this._isMuted=!1,this._updateVolume()},getVolume:function(){return this._volume},_updateVolume:function(){var T,S=this.audios.length;for(T=0;T<S;T+=1)this.audios[T].volume(this._volume*(this._isMuted?0:1))}},function(){return new o}}(),createTypedArray=function(){function o(T,S){var E=0,C=[],_;switch(T){case"int16":case"uint8c":_=1;break;default:_=1.1;break}for(E=0;E<S;E+=1)C.push(_);return C}function u(T,S){return T==="float32"?new Float32Array(S):T==="int16"?new Int16Array(S):T==="uint8c"?new Uint8ClampedArray(S):o(T,S)}return typeof Uint8ClampedArray=="function"&&typeof Float32Array=="function"?u:o}();function createSizedArray(o){return Array.apply(null,{length:o})}function _typeof$6(o){"@babel/helpers - typeof";return _typeof$6=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(u){return typeof u}:function(u){return u&&typeof Symbol=="function"&&u.constructor===Symbol&&u!==Symbol.prototype?"symbol":typeof u},_typeof$6(o)}var subframeEnabled=!0,expressionsPlugin=null,expressionsInterfaces=null,idPrefix$1="",isSafari=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),bmPow=Math.pow,bmSqrt=Math.sqrt,bmFloor=Math.floor,bmMax=Math.max,bmMin=Math.min,BMMath={};(function(){var o=["abs","acos","acosh","asin","asinh","atan","atanh","atan2","ceil","cbrt","expm1","clz32","cos","cosh","exp","floor","fround","hypot","imul","log","log1p","log2","log10","max","min","pow","random","round","sign","sin","sinh","sqrt","tan","tanh","trunc","E","LN10","LN2","LOG10E","LOG2E","PI","SQRT1_2","SQRT2"],u,T=o.length;for(u=0;
vendor: 128,627 bytes, lines 314-322
314u<T;u+=1)BMMath[o[u]]=Math[o[u]]})(),BMMath.random=Math.random,BMMath.abs=function(o){var u=_typeof$6(o);if(u==="object"&&o.length){var T=createSizedArray(o.length),S,E=o.length;for(S=0;S<E;S+=1)T[S]=Math.abs(o[S]);return T}return Math.abs(o)};var defaultCurveSegments=150,degToRads=Math.PI/180,roundCorner=.5519;function styleDiv(o){o.style.position="absolute",o.style.top=0,o.style.left=0,o.style.display="block",o.style.transformOrigin="0 0",o.style.webkitTransformOrigin="0 0",o.style.backfaceVisibility="visible",o.style.webkitBackfaceVisibility="visible",o.style.transformStyle="preserve-3d",o.style.webkitTransformStyle="preserve-3d",o.style.mozTransformStyle="preserve-3d"}function BMEnterFrameEvent(o,u,T,S){this.type=o,this.currentTime=u,this.totalTime=T,this.direction=S<0?-1:1}function BMCompleteEvent(o,u){this.type=o,this.direction=u<0?-1:1}function BMCompleteLoopEvent(o,u,T,S){this.type=o,this.currentLoop=T,this.totalLoops=u,this.direction=S<0?-1:1}function BMSegmentStartEvent(o,u,T){this.type=o,this.firstFrame=u,this.totalFrames=T}function BMDestroyEvent(o,u){this.type=o,this.target=u}function BMRenderFrameErrorEvent(o,u){this.type="renderFrameError",this.nativeError=o,this.currentTime=u}function BMConfigErrorEvent(o){this.type="configError",this.nativeError=o}var createElementID=function(){var o=0;return function(){return o+=1,idPrefix$1+"__lottie_element_"+o}}();function HSVtoRGB(o,u,T){var S,E,C,_,P,R,I,L;switch(_=Math.floor(o*6),P=o*6-_,R=T*(1-u),I=T*(1-P*u),L=T*(1-(1-P)*u),_%6){case 0:S=T,E=L,C=R;break;case 1:S=I,E=T,C=R;break;case 2:S=R,E=T,C=L;break;case 3:S=R,E=I,C=T;break;case 4:S=L,E=R,C=T;break;case 5:S=T,E=R,C=I;break}return[S,E,C]}function RGBtoHSV(o,u,T){var S=Math.max(o,u,T),E=Math.min(o,u,T),C=S-E,_,P=S===0?0:C/S,R=S/255;switch(S){case E:_=0;break;case o:_=u-T+C*(u<T?6:0),_/=6*C;break;case u:_=T-o+C*2,_/=6*C;break;case T:_=o-u+C*4,_/=6*C;break}return[_,P,R]}function addSaturationToRGB(o,u){var T=RGBtoHSV(o[0]*255,o[1]*255,o[2]*255);return T[1]+=u,T[1]>1?T[1]=1:T[1]<=0&&(T[1]=0),HSVtoRGB(T[0],T[1],T[2])}function addBrightnessToRGB(o,u){var T=RGBtoHSV(o[0]*255,o[1]*255,o[2]*255);return T[2]+=u,T[2]>1?T[2]=1:T[2]<0&&(T[2]=0),HSVtoRGB(T[0],T[1],T[2])}function addHueToRGB(o,u){var T=RGBtoHSV(o[0]*255,o[1]*255,o[2]*255);return T[0]+=u/360,T[0]>1?T[0]-=1:T[0]<0&&(T[0]+=1),HSVtoRGB(T[0],T[1],T[2])}var rgbToHex=function(){var o=[],u,T;for(u=0;u<256;u+=1)T=u.toString(16),o[u]=T.length===1?"0"+T:T;return function(S,E,C){return S<0&&(S=0),E<0&&(E=0),C<0&&(C=0),"#"+o[S]+o[E]+o[C]}}(),setSubframeEnabled=function(u){subframeEnabled=!!u},getSubframeEnabled=function(){return subframeEnabled},setExpressionsPlugin=function(u){expressionsPlugin=u},getExpressionsPlugin=function(){return expressionsPlugin},setExpressionInterfaces=function(u){expressionsInterfaces=u},getExpressionInterfaces=function(){return expressionsInterfaces},setDefaultCurveSegments=function(u){defaultCurveSegments=u},getDefaultCurveSegments=function(){return defaultCurveSegments},setIdPrefix=function(u){idPrefix$1=u};function createNS(o){return document.createElementNS(svgNS,o)}function _typeof$5(o){"@babel/helpers - typeof";return _typeof$5=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(u){return typeof u}:function(u){return u&&typeof Symbol=="function"&&u.constructor===Symbol&&u!==Symbol.prototype?"symbol":typeof u},_typeof$5(o)}var dataManager=function(){var o=1,u=[],T,S,E={onmessage:function(){},postMessage:function(D){T({data:D})}},C={postMessage:function(D){E.onmessage({data:D})}};function _(M){if(window.Worker&&window.Blob&&getWebWorker()){var D=new Blob(["var _workerSelf = self; self.onmessage = ",M.toString()],{type:"text/javascript"}),F=URL.createObjectURL(D);return new Worker(F)}return T=M,E}function P(){S||(S=_(function(D){function F(){function G(re,J){var te,Z,X=re.length,de,he,ne,ue;for(Z=0;Z<X;Z+=1)if(te=re[Z],"ks"in te&&!te.completed){if(te.completed=!0,te.hasMask){var ce=te.masksProperties;for(he=ce.length,de=0;de<he;de+=1)if(ce[de].pt.k.i)U(ce[de].pt.k);else for(ue=ce[de].pt.k.length,ne=0;ne<ue;ne+=1)ce[de].pt.k[ne].s&&U(ce[de].pt.k[ne].s[0]),ce[de].pt.k[ne].e&&U(ce[de].pt.k[ne].e[0])}te.ty===0?(te.layers=O(te.refId,J),G(te.layers,J)):te.ty===4?V(te.shapes):te.ty===5&&ie(te)}}function B(re,J){if(re){var te=0,Z=re.length;for(te=0;te<Z;te+=1)re[te].t===1&&(re[te].data.layers=O(re[te].data.refId,J),G(re[te].data.layers,J))}}function H(re,J){for(var te=0,Z=J.length;te<Z;){if(J[te].id===re)return J[te];te+=1}return null}function O(re,J){var te=H(re,J);return te?te.layers.__used?JSON.parse(JSON.stringify(te.layers)):(te.layers.__used=!0,te.layers):null}function V(re){var J,te=re.length,Z,X;for(J=te-1;J>=0;J-=1)if(re[J].ty==="sh")if(re[J].ks.k.i)U(re[J].ks.k);else for(X=re[J].ks.k.length,Z=0;Z<X;Z+=1)re[J].ks.k[Z].s&&U(re[J].ks.k[Z].s[0]),re[J].ks.k[Z].e&&U(re[J].ks.k[Z].e[0]);else re[J].ty==="gr"&&V(re[J].it)}function U(re){var J,te=re.i.length;for(J=0;J<te;J+=1)re.i[J][0]+=re.v[J][0],re.i[J][1]+=re.v[J][1],re.o[J][0]+=re.v[J][0],re.o[J][1]+=re.v[J][1]}function W(re,J){var te=J?J.split("."):[100,100,100];return re[0]>te[0]?!0:te[0]>re[0]?!1:re[1]>te[1]?!0:te[1]>re[1]?!1:re[2]>te[2]?!0:te[2]>re[2]?!1:null}var K=function(){var re=[4,4,14];function J(Z){var X=Z.t.d;Z.t.d={k:[{s:X,t:0}]}}function te(Z){var X,de=Z.length;for(X=0;X<de;X+=1)Z[X].ty===5&&J(Z[X])}return function(Z){if(W(re,Z.v)&&(te(Z.layers),Z.assets)){var X,de=Z.assets.length;for(X=0;X<de;X+=1)Z.assets[X].layers&&te(Z.assets[X].layers)}}}(),Y=function(){var re=[4,7,99];return function(J){if(J.chars&&!W(re,J.v)){var te,Z=J.chars.length;for(te=0;te<Z;te+=1){var X=J.chars[te];X.data&&X.data.shapes&&(V(X.data.shapes),X.data.ip=0,X.data.op=99999,X.data.st=0,X.data.sr=1,X.data.ks={p:{k:[0,0],a:0},s:{k:[100,100],a:0},a:{k:[0,0],a:0},r:{k:0,a:0},o:{k:100,a:0}},J.chars[te].t||(X.data.shapes.push({ty:"no"}),X.data.shapes[0].it.push({p:{k:[0,0],a:0},s:{k:[100,100],a:0},a:{k:[0,0],a:0},r:{k:0,a:0},o:{k:100,a:0},sk:{k:0,a:0},sa:{k:0,a:0},ty:"tr"})))}}}}(),ee=function(){var re=[5,7,15];function J(Z){var X=Z.t.p;typeof X.a=="number"&&(X.a={a:0,k:X.a}),typeof X.p=="number"&&(X.p={a:0,k:X.p}),typeof X.r=="number"&&(X.r={a:0,k:X.r})}function te(Z){var X,de=Z.length;for(X=0;X<de;X+=1)Z[X].ty===5&&J(Z[X])}return function(Z){if(W(re,Z.v)&&(te(Z.layers),Z.assets)){var X,de=Z.assets.length;for(X=0;X<de;X+=1)Z.assets[X].layers&&te(Z.assets[X].layers)}}}(),oe=function(){var re=[4,1,9];function J(Z){var X,de=Z.length,he,ne;for(X=0;X<de;X+=1)if(Z[X].ty==="gr")J(Z[X].it);else if(Z[X].ty==="fl"||Z[X].ty==="st")if(Z[X].c.k&&Z[X].c.k[0].i)for(ne=Z[X].c.k.length,he=0;he<ne;he+=1)Z[X].c.k[he].s&&(Z[X].c.k[he].s[0]/=255,Z[X].c.k[he].s[1]/=255,Z[X].c.k[he].s[2]/=255,Z[X].c.k[he].s[3]/=255),Z[X].c.k[he].e&&(Z[X].c.k[he].e[0]/=255,Z[X].c.k[he].e[1]/=255,Z[X].c.k[he].e[2]/=255,Z[X].c.k[he].e[3]/=255);else Z[X].c.k[0]/=255,Z[X].c.k[1]/=255,Z[X].c.k[2]/=255,Z[X].c.k[3]/=255}function te(Z){var X,de=Z.length;for(X=0;X<de;X+=1)Z[X].ty===4&&J(Z[X].shapes)}return function(Z){if(W(re,Z.v)&&(te(Z.layers),Z.assets)){var X,de=Z.assets.length;for(X=0;X<de;X+=1)Z.assets[X].layers&&te(Z.assets[X].layers)}}}(),se=function(){var re=[4,4,18];function J(Z){var X,de=Z.length,he,ne;for(X=de-1;X>=0;X-=1)if(Z[X].ty==="sh")if(Z[X].ks.k.i)Z[X].ks.k.c=Z[X].closed;else for(ne=Z[X].ks.k.length,he=0;he<ne;he+=1)Z[X].ks.k[he].s&&(Z[X].ks.k[he].s[0].c=Z[X].closed),Z[X].ks.k[he].e&&(Z[X].ks.k[he].e[0].c=Z[X].closed);else Z[X].ty==="gr"&&J(Z[X].it)}function te(Z){var X,de,he=Z.length,ne,ue,ce,fe;for(de=0;de<he;de+=1){if(X=Z[de],X.hasMask){var ve=X.masksProperties;for(ue=ve.length,ne=0;ne<ue;ne+=1)if(ve[ne].pt.k.i)ve[ne].pt.k.c=ve[ne].cl;else for(fe=ve[ne].pt.k.length,ce=0;ce<fe;ce+=1)ve[ne].pt.k[ce].s&&(ve[ne].pt.k[ce].s[0].c=ve[ne].cl),ve[ne].pt.k[ce].e&&(ve[ne].pt.k[ce].e[0].c=ve[ne].cl)}X.ty===4&&J(X.shapes)}}return function(Z){if(W(re,Z.v)&&(te(Z.layers),Z.assets)){var X,de=Z.assets.length;for(X=0;X<de;X+=1)Z.assets[X].layers&&te(Z.assets[X].layers)}}}();function Q(re){re.__complete||(oe(re),K(re),Y(re),ee(re),se(re),G(re.layers,re.assets),B(re.chars,re.assets),re.__complete=!0)}function ie(re){re.t.a.length===0&&"m"in re.t.p}var ae={};return ae.completeData=Q,ae.checkColors=oe,ae.checkChars=Y,ae.checkPathProperties=ee,ae.checkShapes=se,ae.completeLayers=G,ae}if(C.dataManager||(C.dataManager=F()),C.assetLoader||(C.assetLoader=function(){function G(H){var O=H.getResponseHeader("content-type");return O&&H.responseType==="json"&&O.indexOf("json")!==-1||H.response&&_typeof$5(H.response)==="object"?H.response:H.response&&typeof H.response=="string"?JSON.parse(H.response):H.responseText?JSON.parse(H.responseText):null}function B(H,O,V,U){var W,K=new XMLHttpRequest;try{K.responseType="json"}catch{}K.onreadystatechange=function(){if(K.readyState===4)if(K.status===200)W=G(K),V(W);else try{W=G(K),V(W)}catch(Y){U&&U(Y)}};try{K.open(["G","E","T"].join(""),H,!0)}catch{K.open(["G","E","T"].join(""),O+"/"+H,!0)}K.send()}return{load:B}}()),D.data.type==="loadAnimation")C.assetLoader.load(D.data.path,D.data.fullPath,function(G){C.dataManager.completeData(G),C.postMessage({id:D.data.id,payload:G,status:"success"})},function(){C.postMessage({id:D.data.id,status:"error"})});else if(D.data.type==="complete"){var N=D.data.animation;C.dataManager.completeData(N),C.postMessage({id:D.data.id,payload:N,status:"success"})}else D.data.type==="loadData"&&C.assetLoader.load(D.data.path,D.data.fullPath,function(G){C.postMessage({id:D.data.id,payload:G,status:"success"})},function(){C.postMessage({id:D.data.id,status:"error"})})}),S.onmessage=function(M){var D=M.data,F=D.id,N=u[F];u[F]=null,D.status==="success"?N.onComplete(D.payload):N.onError&&N.onError()})}function R(M,D){o+=1;var F="processId_"+o;return u[F]={onComplete:M,onError:D},F}function I(M,D,F){P();var N=R(D,F);S.postMessage({type:"loadAnimation",path:M,fullPath:window.location.origin+window.location.pathname,id:N})}function L(M,D,F){P();var N=R(D,F);S.postMessage({type:"loadData",path:M,fullPath:window.location.origin+window.location.pathname,id:N})}function j(M,D,F){P();var N=R(D,F);S.postMessage({type:"complete",animation:M,id:N})}return{loadAnimation:I,loadData:L,completeAnimation:j}}(),ImagePreloader=function(){var o=function(){var B=createTag("canvas");B.width=1,B.height=1;var H=B.getContext("2d");return H.fillStyle="rgba(0,0,0,0)",H.fillRect(0,0,1,1),B}();function u(){this.loadedAssets+=1,this.loadedAssets===this.totalImages&&this.loadedFootagesCount===this.totalFootages&&this.imagesLoadedCb&&this.imagesLoadedCb(null)}function T(){this.loadedFootagesCount+=1,this.loadedAssets===this.totalImages&&this.loadedFootagesCount===this.totalFootages&&this.imagesLoadedCb&&this.imagesLoadedCb(null)}function S(B,H,O){var V="";if(B.e)V=B.p;else if(H){var U=B.p;U.indexOf("images/")!==-1&&(U=U.split("/")[1]),V=H+U}else V=O,V+=B.u?B.u:"",V+=B.p;return V}function E(B){var H=0,O=setInterval((function(){var V=B.getBBox();(V.width||H>500)&&(this._imageLoaded(),clearInterval(O)),H+=1}).bind(this),50)}function C(B){var H=S(B,this.assetsPath,this.path),O=createNS("image");isSafari?this.testImageLoaded(O):O.addEventListener("load",this._imageLoaded,!1),O.addEventListener("error",(function(){V.img=o,this._imageLoaded()}).bind(this),!1),O.setAttributeNS("http://www.w3.org/1999/xlink","href",H),this._elementHelper.append?this._elementHelper.append(O):this._elementHelper.appendChild(O);var V={img:O,assetData:B};return V}function _(B){var H=S(B,this.assetsPath,this.path),O=createTag("img");O.crossOrigin="anonymous",O.addEventListener("load",this._imageLoaded,!1),O.addEventListener("error",(function(){V.img=o,this._imageLoaded()}).bind(this),!1),O.src=H;var V={img:O,assetData:B};return V}function P(B){var H={assetData:B},O=S(B,this.assetsPath,this.path);return dataManager.loadData(O,(function(V){H.img=V,this._footageLoaded()}).bind(this),(function(){H.img={},this._footageLoaded()}).bind(this)),H}function R(B,H){this.imagesLoadedCb=H;var O,V=B.length;for(O=0;O<V;O+=1)B[O].layers||(!B[O].t||B[O].t==="seq"?(this.totalImages+=1,this.images.push(this._createImageData(B[O]))):B[O].t===3&&(this.totalFootages+=1,this.images.push(this.createFootageData(B[O]))))}function I(B){this.path=B||""}function L(B){this.assetsPath=B||""}function j(B){for(var H=0,O=this.images.length;H<O;){if(this.images[H].assetData===B)return this.images[H].img;H+=1}return null}function M(){this.imagesLoadedCb=null,this.images.length=0}function D(){return this.totalImages===this.loadedAssets}function F(){return this.totalFootages===this.loadedFootagesCount}function N(B,H){B==="svg"?(this._elementHelper=H,this._createImageData=this.createImageData.bind(this)):this._createImageData=this.createImgData.bind(this)}function G(){this._imageLoaded=u.bind(this),this._footageLoaded=T.bind(this),this.testImageLoaded=E.bind(this),this.createFootageData=P.bind(this),this.assetsPath="",this.path="",this.totalImages=0,this.totalFootages=0,this.loadedAssets=0,this.loadedFootagesCount=0,this.imagesLoadedCb=null,this.images=[]}return G.prototype={loadAssets:R,setAssetsPath:L,setPath:I,loadedImages:D,loadedFootages:F,destroy:M,getAsset:j,createImgData:_,createImageData:C,imageLoaded:u,footageLoaded:T,setCacheType:N},G}();function BaseEvent(){}BaseEvent.prototype={triggerEvent:function(u,T){if(this._cbs[u])for(var S=this._cbs[u],E=0;E<S.length;E+=1)S[E](T)},addEventListener:function(u,T){return this._cbs[u]||(this._cbs[u]=[]),this._cbs[u].push(T),(function(){this.removeEventListener(u,T)}).bind(this)},removeEventListener:function(u,T){if(!T)this._cbs[u]=null;else if(this._cbs[u]){for(var S=0,E=this._cbs[u].length;S<E;)this._cbs[u][S]===T&&(this._cbs[u].splice(S,1),S-=1,E-=1),S+=1;this._cbs[u].length||(this._cbs[u]=null)}}};var markerParser=function(){function o(u){for(var T=u.split(`\r
315`),S={},E,C=0,_=0;_<T.length;_+=1)E=T[_].split(":"),E.length===2&&(S[E[0]]=E[1].trim(),C+=1);if(C===0)throw new Error;return S}return function(u){for(var T=[],S=0;S<u.length;S+=1){var E=u[S],C={time:E.tm,duration:E.dr};try{C.payload=JSON.parse(u[S].cm)}catch{try{C.payload=o(u[S].cm)}catch{C.payload={name:u[S].cm}}}T.push(C)}return T}}(),ProjectInterface=function(){function o(u){this.compositions.push(u)}return function(){function u(T){for(var S=0,E=this.compositions.length;S<E;){if(this.compositions[S].data&&this.compositions[S].data.nm===T)return this.compositions[S].prepareFrame&&this.compositions[S].data.xt&&this.compositions[S].prepareFrame(this.currentFrame),this.compositions[S].compInterface;S+=1}return null}return u.compositions=[],u.currentFrame=0,u.registerComposition=o,u}}(),renderers={},registerRenderer=function(u,T){renderers[u]=T};function getRenderer(o){return renderers[o]}function getRegisteredRenderer(){if(renderers.canvas)return"canvas";for(var o in renderers)if(renderers[o])return o;return""}function _typeof$4(o){"@babel/helpers - typeof";return _typeof$4=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(u){return typeof u}:function(u){return u&&typeof Symbol=="function"&&u.constructor===Symbol&&u!==Symbol.prototype?"symbol":typeof u},_typeof$4(o)}var AnimationItem=function(){this._cbs=[],this.name="",this.path="",this.isLoaded=!1,this.currentFrame=0,this.currentRawFrame=0,this.firstFrame=0,this.totalFrames=0,this.frameRate=0,this.frameMult=0,this.playSpeed=1,this.playDirection=1,this.playCount=0,this.animationData={},this.assets=[],this.isPaused=!0,this.autoplay=!1,this.loop=!0,this.renderer=null,this.animationID=createElementID(),this.assetsPath="",this.timeCompleted=0,this.segmentPos=0,this.isSubframeEnabled=getSubframeEnabled(),this.segments=[],this._idle=!0,this._completedLoop=!1,this.projectInterface=ProjectInterface(),this.imagePreloader=new ImagePreloader,this.audioController=audioControllerFactory(),this.markers=[],this.configAnimation=this.configAnimation.bind(this),this.onSetupError=this.onSetupError.bind(this),this.onSegmentComplete=this.onSegmentComplete.bind(this),this.drawnFrameEvent=new BMEnterFrameEvent("drawnFrame",0,0,0),this.expressionsPlugin=getExpressionsPlugin()};extendPrototype([BaseEvent],AnimationItem),AnimationItem.prototype.setParams=function(o){(o.wrapper||o.container)&&(this.wrapper=o.wrapper||o.container);var u="svg";o.animType?u=o.animType:o.renderer&&(u=o.renderer);var T=getRenderer(u);this.renderer=new T(this,o.rendererSettings),this.imagePreloader.setCacheType(u,this.renderer.globalData.defs),this.renderer.setProjectInterface(this.projectInterface),this.animType=u,o.loop===""||o.loop===null||o.loop===void 0||o.loop===!0?this.loop=!0:o.loop===!1?this.loop=!1:this.loop=parseInt(o.loop,10),this.autoplay="autoplay"in o?o.autoplay:!0,this.name=o.name?o.name:"",this.autoloadSegments=Object.prototype.hasOwnProperty.call(o,"autoloadSegments")?o.autoloadSegments:!0,this.assetsPath=o.assetsPath,this.initialSegment=o.initialSegment,o.audioFactory&&this.audioController.setAudioFactory(o.audioFactory),o.animationData?this.setupAnimation(o.animationData):o.path&&(o.path.lastIndexOf("\\")!==-1?this.path=o.path.substr(0,o.path.lastIndexOf("\\")+1):this.path=o.path.substr(0,o.path.lastIndexOf("/")+1),this.fileName=o.path.substr(o.path.lastIndexOf("/")+1),this.fileName=this.fileName.substr(0,this.fileName.lastIndexOf(".json")),dataManager.loadAnimation(o.path,this.configAnimation,this.onSetupError))},AnimationItem.prototype.onSetupError=function(){this.trigger("data_failed")},AnimationItem.prototype.setupAnimation=function(o){dataManager.completeAnimation(o,this.configAnimation)},AnimationItem.prototype.setData=function(o,u){u&&_typeof$4(u)!=="object"&&(u=JSON.parse(u));var T={wrapper:o,animationData:u},S=o.attributes;T.path=S.getNamedItem("data-animation-path")?S.getNamedItem("data-animation-path").value:S.getNamedItem("data-bm-path")?S.getNamedItem("data-bm-path").value:S.getNamedItem("bm-path")?S.getNamedItem("bm-path").value:"",T.animType=S.getNamedItem("data-anim-type")?S.getNamedItem("data-anim-type").value:S.getNamedItem("data-bm-type")?S.getNamedItem("data-bm-type").value:S.getNamedItem("bm-type")?S.getNamedItem("bm-type").value:S.getNamedItem("data-bm-renderer")?S.getNamedItem("data-bm-renderer").value:S.getNamedItem("bm-renderer")?S.getNamedItem("bm-renderer").value:getRegisteredRenderer()||"canvas";var E=S.getNamedItem("data-anim-loop")?S.getNamedItem("data-anim-loop").value:S.getNamedItem("data-bm-loop")?S.getNamedItem("data-bm-loop").value:S.getNamedItem("bm-loop")?S.getNamedItem("bm-loop").value:"";E==="false"?T.loop=!1:E==="true"?T.loop=!0:E!==""&&(T.loop=parseInt(E,10));var C=S.getNamedItem("data-anim-autoplay")?S.getNamedItem("data-anim-autoplay").value:S.getNamedItem("data-bm-autoplay")?S.getNamedItem("data-bm-autoplay").value:S.getNamedItem("bm-autoplay")?S.getNamedItem("bm-autoplay").value:!0;T.autoplay=C!=="false",T.name=S.getNamedItem("data-name")?S.getNamedItem("data-name").value:S.getNamedItem("data-bm-name")?S.getNamedItem("data-bm-name").value:S.getNamedItem("bm-name")?S.getNamedItem("bm-name").value:"";var _=S.getNamedItem("data-anim-prerender")?S.getNamedItem("data-anim-prerender").value:S.getNamedItem("data-bm-prerender")?S.getNamedItem("data-bm-prerender").value:S.getNamedItem("bm-prerender")?S.getNamedItem("bm-prerender").value:"";_==="false"&&(T.prerender=!1),T.path?this.setParams(T):this.trigger("destroy")},AnimationItem.prototype.includeLayers=function(o){o.op>this.animationData.op&&(this.animationData.op=o.op,this.totalFrames=Math.floor(o.op-this.animationData.ip));var u=this.animationData.layers,T,S=u.length,E=o.layers,C,_=E.length;for(C=0;C<_;C+=1)for(T=0;T<S;){if(u[T].id===E[C].id){u[T]=E[C];break}T+=1}if((o.chars||o.fonts)&&(this.renderer.globalData.fontManager.addChars(o.chars),this.renderer.globalData.fontManager.addFonts(o.fonts,this.renderer.globalData.defs)),o.assets)for(S=o.assets.length,T=0;T<S;T+=1)this.animationData.assets.push(o.assets[T]);this.animationData.__complete=!1,dataManager.completeAnimation(this.animationData,this.onSegmentComplete)},AnimationItem.prototype.onSegmentComplete=function(o){this.animationData=o;var u=getExpressionsPlugin();u&&u.initExpressions(this),this.loadNextSegment()},AnimationItem.prototype.loadNextSegment=function(){var o=this.animationData.segments;if(!o||o.length===0||!this.autoloadSegments){this.trigger("data_ready"),this.timeCompleted=this.totalFrames;return}var u=o.shift();this.timeCompleted=u.time*this.frameRate;var T=this.path+this.fileName+"_"+this.segmentPos+".json";this.segmentPos+=1,dataManager.loadData(T,this.includeLayers.bind(this),(function(){this.trigger("data_failed")}).bind(this))},AnimationItem.prototype.loadSegments=function(){var o=this.animationData.segments;o||(this.timeCompleted=this.totalFrames),this.loadNextSegment()},AnimationItem.prototype.imagesLoaded=function(){this.trigger("loaded_images"),this.checkLoaded()},AnimationItem.prototype.preloadImages=function(){this.imagePreloader.setAssetsPath(this.assetsPath),this.imagePreloader.setPath(this.path),this.imagePreloader.loadAssets(this.animationData.assets,this.imagesLoaded.bind(this))},AnimationItem.prototype.configAnimation=function(o){if(this.renderer)try{this.animationData=o,this.initialSegment?(this.totalFrames=Math.floor(this.initialSegment[1]-this.initialSegment[0]),this.firstFrame=Math.round(this.initialSegment[0])):(this.totalFrames=Math.floor(this.animationData.op-this.animationData.ip),this.firstFrame=Math.round(this.animationData.ip)),this.renderer.configAnimation(o),o.assets||(o.assets=[]),this.assets=this.animationData.assets,this.frameRate=this.animationData.fr,this.frameMult=this.animationData.fr/1e3,this.renderer.searchExtraCompositions(o.assets),this.markers=markerParser(o.markers||[]),this.trigger("config_ready"),this.preloadImages(),this.loadSegments(),this.updaFrameModifier(),this.waitForFontsLoaded(),this.isPaused&&this.audioController.pause()}catch(u){this.triggerConfigError(u)}},AnimationItem.prototype.waitForFontsLoaded=function(){this.renderer&&(this.renderer.globalData.fontManager.isLoaded?this.checkLoaded():setTimeout(this.waitForFontsLoaded.bind(this),20))},AnimationItem.prototype.checkLoaded=function(){if(!this.isLoaded&&this.renderer.globalData.fontManager.isLoaded&&(this.imagePreloader.loadedImages()||this.renderer.rendererType!=="canvas")&&this.imagePreloader.loadedFootages()){this.isLoaded=!0;var o=getExpressionsPlugin();o&&o.initExpressions(this),this.renderer.initItems(),setTimeout((function(){this.trigger("DOMLoaded")}).bind(this),0),this.gotoFrame(),this.autoplay&&this.play()}},AnimationItem.prototype.resize=function(o,u){var T=typeof o=="number"?o:void 0,S=typeof u=="number"?u:void 0;this.renderer.updateContainerSize(T,S)},AnimationItem.prototype.setSubframe=function(o){this.isSubframeEnabled=!!o},AnimationItem.prototype.gotoFrame=function(){this.currentFrame=this.isSubframeEnabled?this.currentRawFrame:~~this.currentRawFrame,this.timeCompleted!==this.totalFrames&&this.currentFrame>this.timeCompleted&&(this.currentFrame=this.timeCompleted),this.trigger("enterFrame"),this.renderFrame(),this.trigger("drawnFrame")},AnimationItem.prototype.renderFrame=function(){if(!(this.isLoaded===!1||!this.renderer))try{this.expressionsPlugin&&this.expressionsPlugin.resetFrame(),this.renderer.renderFrame(this.currentFrame+this.firstFrame)}catch(o){this.triggerRenderFrameError(o)}},AnimationItem.prototype.play=function(o){o&&this.name!==o||this.isPaused===!0&&(this.isPaused=!1,this.trigger("_play"),this.audioController.resume(),this._idle&&(this._idle=!1,this.trigger("_active")))},AnimationItem.prototype.pause=function(o){o&&this.name!==o||this.isPaused===!1&&(this.isPaused=!0,this.trigger("_pause"),this._idle=!0,this.trigger("_idle"),this.audioController.pause())},AnimationItem.prototype.togglePause=function(o){o&&this.name!==o||(this.isPaused===!0?this.play():this.pause())},AnimationItem.prototype.stop=function(o){o&&this.name!==o||(this.pause(),this.playCount=0,this._completedLoop=!1,this.setCurrentRawFrameValue(0))},AnimationItem.prototype.getMarkerData=function(o){for(var u,T=0;T<this.markers.length;T+=1)if(u=this.markers[T],u.payload&&u.payload.name===o)return u;return null},AnimationItem.prototype.goToAndStop=function(o,u,T){if(!(T&&this.name!==T)){var S=Number(o);if(isNaN(S)){var E=this.getMarkerData(o);E&&this.goToAndStop(E.time,!0)}else u?this.setCurrentRawFrameValue(o):this.setCurrentRawFrameValue(o*this.frameModifier);this.pause()}},AnimationItem.prototype.goToAndPlay=function(o,u,T){if(!(T&&this.name!==T)){var S=Number(o);if(isNaN(S)){var E=this.getMarkerData(o);E&&(E.duration?this.playSegments([E.time,E.time+E.duration],!0):this.goToAndStop(E.time,!0))}else this.goToAndStop(S,u,T);this.play()}},AnimationItem.prototype.advanceTime=function(o){if(!(this.isPaused===!0||this.isLoaded===!1)){var u=this.currentRawFrame+o*this.frameModifier,T=!1;u>=this.totalFrames-1&&this.frameModifier>0?!this.loop||this.playCount===this.loop?this.checkSegments(u>this.totalFrames?u%this.totalFrames:0)||(T=!0,u=this.totalFrames-1):u>=this.totalFrames?(this.playCount+=1,this.checkSegments(u%this.totalFrames)||(this.setCurrentRawFrameValue(u%this.totalFrames),this._completedLoop=!0,this.trigger("loopComplete"))):this.setCurrentRawFrameValue(u):u<0?this.checkSegments(u%this.totalFrames)||(this.loop&&!(this.playCount--<=0&&this.loop!==!0)?(this.setCurrentRawFrameValue(this.totalFrames+u%this.totalFrames),this._completedLoop?this.trigger("loopComplete"):this._completedLoop=!0):(T=!0,u=0)):this.setCurrentRawFrameValue(u),T&&(this.setCurrentRawFrameValue(u),this.pause(),this.trigger("complete"))}},AnimationItem.prototype.adjustSegment=function(o,u){this.playCount=0,o[1]<o[0]?(this.frameModifier>0&&(this.playSpeed<0?this.setSpeed(-this.playSpeed):this.setDirection(-1)),this.totalFrames=o[0]-o[1],this.timeCompleted=this.totalFrames,this.firstFrame=o[1],this.setCurrentRawFrameValue(this.totalFrames-.001-u)):o[1]>o[0]&&(this.frameModifier<0&&(this.playSpeed<0?this.setSpeed(-this.playSpeed):this.setDirection(1)),this.totalFrames=o[1]-o[0],this.timeCompleted=this.totalFrames,this.firstFrame=o[0],this.setCurrentRawFrameValue(.001+u)),this.trigger("segmentStart")},AnimationItem.prototype.setSegment=function(o,u){var T=-1;this.isPaused&&(this.currentRawFrame+this.firstFrame<o?T=o:this.currentRawFrame+this.firstFrame>u&&(T=u-o)),this.firstFrame=o,this.totalFrames=u-o,this.timeCompleted=this.totalFrames,T!==-1&&this.goToAndStop(T,!0)},AnimationItem.prototype.playSegments=function(o,u){if(u&&(this.segments.length=0),_typeof$4(o[0])==="object"){var T,S=o.length;for(T=0;T<S;T+=1)this.segments.push(o[T])}else this.segments.push(o);this.segments.length&&u&&this.adjustSegment(this.segments.shift(),0),this.isPaused&&this.play()},AnimationItem.prototype.resetSegments=function(o){this.segments.length=0,this.segments.push([this.animationData.ip,this.animationData.op]),o&&this.checkSegments(0)},AnimationItem.prototype.checkSegments=function(o){return this.segments.length?(this.adjustSegment(this.segments.shift(),o),!0):!1},AnimationItem.prototype.destroy=function(o){o&&this.name!==o||!this.renderer||(this.renderer.destroy(),this.imagePreloader.destroy(),this.trigger("destroy"),this._cbs=null,this.onEnterFrame=null,this.onLoopComplete=null,this.onComplete=null,this.onSegmentStart=null,this.onDestroy=null,this.renderer=null,this.expressionsPlugin=null,this.imagePreloader=null,this.projectInterface=null)},AnimationItem.prototype.setCurrentRawFrameValue=function(o){this.currentRawFrame=o,this.gotoFrame()},AnimationItem.prototype.setSpeed=function(o){this.playSpeed=o,this.updaFrameModifier()},AnimationItem.prototype.setDirection=function(o){this.playDirection=o<0?-1:1,this.updaFrameModifier()},AnimationItem.prototype.setLoop=function(o){this.loop=o},AnimationItem.prototype.setVolume=function(o,u){u&&this.name!==u||this.audioController.setVolume(o)},AnimationItem.prototype.getVolume=function(){return this.audioController.getVolume()},AnimationItem.prototype.mute=function(o){o&&this.name!==o||this.audioController.mute()},AnimationItem.prototype.unmute=function(o){o&&this.name!==o||this.audioController.unmute()},AnimationItem.prototype.updaFrameModifier=function(){this.frameModifier=this.frameMult*this.playSpeed*this.playDirection,this.audioController.setRate(this.playSpeed*this.playDirection)},AnimationItem.prototype.getPath=function(){return this.path},AnimationItem.prototype.getAssetsPath=function(o){var u="";if(o.e)u=o.p;else if(this.assetsPath){var T=o.p;T.indexOf("images/")!==-1&&(T=T.split("/")[1]),u=this.assetsPath+T}else u=this.path,u+=o.u?o.u:"",u+=o.p;return u},AnimationItem.prototype.getAssetData=function(o){for(var u=0,T=this.assets.length;u<T;){if(o===this.assets[u].id)return this.assets[u];u+=1}return null},AnimationItem.prototype.hide=function(){this.renderer.hide()},AnimationItem.prototype.show=function(){this.renderer.show()},AnimationItem.prototype.getDuration=function(o){return o?this.totalFrames:this.totalFrames/this.frameRate},AnimationItem.prototype.updateDocumentData=function(o,u,T){try{var S=this.renderer.getElementByPath(o);S.updateDocumentData(u,T)}catch{}},AnimationItem.prototype.trigger=function(o){if(this._cbs&&this._cbs[o])switch(o){case"enterFrame":this.triggerEvent(o,new BMEnterFrameEvent(o,this.currentFrame,this.totalFrames,this.frameModifier));break;case"drawnFrame":this.drawnFrameEvent.currentTime=this.currentFrame,this.drawnFrameEvent.totalTime=this.totalFrames,this.drawnFrameEvent.direction=this.frameModifier,this.triggerEvent(o,this.drawnFrameEvent);break;case"loopComplete":this.triggerEvent(o,new BMCompleteLoopEvent(o,this.loop,this.playCount,this.frameMult));break;case"complete":this.triggerEvent(o,new BMCompleteEvent(o,this.frameMult));break;case"segmentStart":this.triggerEvent(o,new BMSegmentStartEvent(o,this.firstFrame,this.totalFrames));break;case"destroy":this.triggerEvent(o,new BMDestroyEvent(o,this));break;default:this.triggerEvent(o)}o==="enterFrame"&&this.onEnterFrame&&this.onEnterFrame.call(this,new BMEnterFrameEvent(o,this.currentFrame,this.totalFrames,this.frameMult)),o==="loopComplete"&&this.onLoopComplete&&this.onLoopComplete.call(this,new BMCompleteLoopEvent(o,this.loop,this.playCount,this.frameMult)),o==="complete"&&this.onComplete&&this.onComplete.call(this,new BMCompleteEvent(o,this.frameMult)),o==="segmentStart"&&this.onSegmentStart&&this.onSegmentStart.call(this,new BMSegmentStartEvent(o,this.firstFrame,this.totalFrames)),o==="destroy"&&this.onDestroy&&this.onDestroy.call(this,new BMDestroyEvent(o,this))},AnimationItem.prototype.triggerRenderFrameError=function(o){var u=new BMRenderFrameErrorEvent(o,this.currentFrame);this.triggerEvent("error",u),this.onError&&this.onError.call(this,u)},AnimationItem.prototype.triggerConfigError=function(o){var u=new BMConfigErrorEvent(o,this.currentFrame);this.triggerEvent("error",u),this.onError&&this.onError.call(this,u)};var animationManager=function(){var o={},u=[],T=0,S=0,E=0,C=!0,_=!1;function P(J){for(var te=0,Z=J.target;te<S;)u[te].animation===Z&&(u.splice(te,1),te-=1,S-=1,Z.isPaused||j()),te+=1}function R(J,te){if(!J)return null;for(var Z=0;Z<S;){if(u[Z].elem===J&&u[Z].elem!==null)return u[Z].animation;Z+=1}var X=new AnimationItem;return M(X,J),X.setData(J,te),X}function I(){var J,te=u.length,Z=[];for(J=0;J<te;J+=1)Z.push(u[J].animation);return Z}function L(){E+=1,oe()}function j(){E-=1}function M(J,te){J.addEventListener("destroy",P),J.addEventListener("_active",L),J.addEventListener("_idle",j),u.push({elem:te,animation:J}),S+=1}function D(J){var te=new AnimationItem;return M(te,null),te.setParams(J),te}function F(J,te){var Z;for(Z=0;Z<S;Z+=1)u[Z].animation.setSpeed(J,te)}function N(J,te){var Z;for(Z=0;Z<S;Z+=1)u[Z].animation.setDirection(J,te)}function G(J){var te;for(te=0;te<S;te+=1)u[te].animation.play(J)}function B(J){var te=J-T,Z;for(Z=0;Z<S;Z+=1)u[Z].animation.advanceTime(te);T=J,E&&!_?window.requestAnimationFrame(B):C=!0}function H(J){T=J,window.requestAnimationFrame(B)}function O(J){var te;for(te=0;te<S;te+=1)u[te].animation.pause(J)}function V(J,te,Z){var X;for(X=0;X<S;X+=1)u[X].animation.goToAndStop(J,te,Z)}function U(J){var te;for(te=0;te<S;te+=1)u[te].animation.stop(J)}function W(J){var te;for(te=0;te<S;te+=1)u[te].animation.togglePause(J)}function K(J){var te;for(te=S-1;te>=0;te-=1)u[te].animation.destroy(J)}function Y(J,te,Z){var X=[].concat([].slice.call(document.getElementsByClassName("lottie")),[].slice.call(document.getElementsByClassName("bodymovin"))),de,he=X.length;for(de=0;de<he;de+=1)Z&&X[de].setAttribute("data-bm-type",Z),R(X[de],J);if(te&&he===0){Z||(Z="svg");var ne=document.getElementsByTagName("body")[0];ne.innerText="";var ue=createTag("div");ue.style.width="100%",ue.style.height="100%",ue.setAttribute("data-bm-type",Z),ne.appendChild(ue),R(ue,J)}}function ee(){var J;for(J=0;J<S;J+=1)u[J].animation.resize()}function oe(){!_&&E&&C&&(window.requestAnimationFrame(H),C=!1)}function se(){_=!0}function Q(){_=!1,oe()}function ie(J,te){var Z;for(Z=0;Z<S;Z+=1)u[Z].animation.setVolume(J,te)}function ae(J){var te;for(te=0;te<S;te+=1)u[te].animation.mute(J)}function re(J){var te;for(te=0;te<S;te+=1)u[te].animation.unmute(J)}return o.registerAnimation=R,o.loadAnimation=D,o.setSpeed=F,o.setDirection=N,o.play=G,o.pause=O,o.stop=U,o.togglePause=W,o.searchAnimations=Y,o.resize=ee,o.goToAndStop=V,o.destroy=K,o.freeze=se,o.unfreeze=Q,o.setVolume=ie,o.mute=ae,o.unmute=re,o.getRegisteredAnimations=I,o}(),BezierFactory=function(){var o={};o.getBezierEasing=T;var u={};function T(H,O,V,U,W){var K=W||("bez_"+H+"_"+O+"_"+V+"_"+U).replace(/\./g,"p");if(u[K])return u[K];var Y=new B([H,O,V,U]);return u[K]=Y,Y}var S=4,E=.001,C=1e-7,_=10,P=11,R=1/(P-1),I=typeof Float32Array=="function";function L(H,O){return 1-3*O+3*H}function j(H,O){return 3*O-6*H}function M(H){return 3*H}function D(H,O,V){return((L(O,V)*H+j(O,V))*H+M(O))*H}function F(H,O,V){return 3*L(O,V)*H*H+2*j(O,V)*H+M(O)}function N(H,O,V,U,W){var K,Y,ee=0;do Y=O+(V-O)/2,K=D(Y,U,W)-H,K>0?V=Y:O=Y;while(Math.abs(K)>C&&++ee<_);return Y}function G(H,O,V,U){for(var W=0;W<S;++W){var K=F(O,V,U);if(K===0)return O;var Y=D(O,V,U)-H;O-=Y/K}return O}function B(H){this._p=H,this._mSampleValues=I?new Float32Array(P):new Array(P),this._precomputed=!1,this.get=this.get.bind(this)}return B.prototype={get:function(O){var V=this._p[0],U=this._p[1],W=this._p[2],K=this._p[3];return this._precomputed||this._precompute(),V===U&&W===K?O:O===0?0:O===1?1:D(this._getTForX(O),U,K)},_precompute:function(){var O=this._p[0],V=this._p[1],U=this._p[2],W=this._p[3];this._precomputed=!0,(O!==V||U!==W)&&this._calcSampleValues()},_calcSampleValues:function(){for(var O=this._p[0],V=this._p[2],U=0;U<P;++U)this._mSampleValues[U]=D(U*R,O,V)},_getTForX:function(O){for(var V=this._p[0],U=this._p[2],W=this._mSampleValues,K=0,Y=1,ee=P-1;Y!==ee&&W[Y]<=O;++Y)K+=R;--Y;var oe=(O-W[Y])/(W[Y+1]-W[Y]),se=K+oe*R,Q=F(se,V,U);return Q>=E?G(O,se,V,U):Q===0?se:N(O,K,K+R,V,U)}},o}(),pooling=function(){function o(u){return u.concat(createSizedArray(u.length))}return{double:o}}(),poolFactory=function(){return function(o,u,T){var S=0,E=o,C=createSizedArray(E),_={newElement:P,release:R};function P(){var I;return S?(S-=1,I=C[S]):I=u(),I}function R(I){S===E&&(C=pooling.double(C),E*=2),T&&T(I),C[S]=I,S+=1}return _}}(),bezierLengthPool=function(){function o(){return{addedLength:0,percents:createTypedArray("float32",getDefaultCurveSegments()),lengths:createTypedArray("float32",getDefaultCurveSegments())}}return poolFactory(8,o)}(),segmentsLengthPool=function(){function o(){return{lengths:[],totalLength:0}}function u(T){var S,E=T.lengths.length;for(S=0;S<E;S+=1)bezierLengthPool.release(T.lengths[S]);T.lengths.length=0}return poolFactory(8,o,u)}();function bezFunction(){var o=Math;function u(M,D,F,N,G,B){var H=M*N+D*G+F*B-G*N-B*M-F*D;return H>-.001&&H<.001}function T(M,D,F,N,G,B,H,O,V){if(F===0&&B===0&&V===0)return u(M,D,N,G,H,O);var U=o.sqrt(o.pow(N-M,2)+o.pow(G-D,2)+o.pow(B-F,2)),W=o.sqrt(o.pow(H-M,2)+o.pow(O-D,2)+o.pow(V-F,2)),K=o.sqrt(o.pow(H-N,2)+o.pow(O-G,2)+o.pow(V-B,2)),Y;return U>W?U>K?Y=U-W-K:Y=K-W-U:K>W?Y=K-W-U:Y=W-U-K,Y>-1e-4&&Y<1e-4}var S=function(){return function(M,D,F,N){var G=getDefaultCurveSegments(),B,H,O,V,U,W=0,K,Y=[],ee=[],oe=bezierLengthPool.newElement();for(O=F.length,B=0;B<G;B+=1){for(U=B/(G-1),K=0,H=0;H<O;H+=1)V=bmPow(1-U,3)*M[H]+3*bmPow(1-U,2)*U*F[H]+3*(1-U)*bmPow(U,2)*N[H]+bmPow(U,3)*D[H],Y[H]=V,ee[H]!==null&&(K+=bmPow(Y[H]-ee[H],2)),ee[H]=Y[H];K&&(K=bmSqrt(K),W+=K),oe.percents[B]=U,oe.lengths[B]=W}return oe.addedLength=W,oe}}();function E(M){var D=segmentsLengthPool.newElement(),F=M.c,N=M.v,G=M.o,B=M.i,H,O=M._length,V=D.lengths,U=0;for(H=0;H<O-1;H+=1)V[H]=S(N[H],N[H+1],G[H],B[H+1]),U+=V[H].addedLength;return F&&O&&(V[H]=S(N[H],N[0],G[H],B[0]),U+=V[H].addedLength),D.totalLength=U,D}function C(M){this.segmentLength=0,this.points=new Array(M)}function _(M,D){this.partialLength=M,this.point=D}var P=function(){var M={};return function(D,F,N,G){var B=(D[0]+"_"+D[1]+"_"+F[0]+"_"+F[1]+"_"+N[0]+"_"+N[1]+"_"+G[0]+"_"+G[1]).replace(/\./g,"p");if(!M[B]){var H=getDefaultCurveSegments(),O,V,U,W,K,Y=0,ee,oe,se=null;D.length===2&&(D[0]!==F[0]||D[1]!==F[1])&&u(D[0],D[1],F[0],F[1],D[0]+N[0],D[1]+N[1])&&u(D[0],D[1],F[0],F[1],F[0]+G[0],F[1]+G[1])&&(H=2);var Q=new C(H);for(U=N.length,O=0;O<H;O+=1){for(oe=createSizedArray(U),K=O/(H-1),ee=0,V=0;V<U;V+=1)W=bmPow(1-K,3)*D[V]+3*bmPow(1-K,2)*K*(D[V]+N[V])+3*(1-K)*bmPow(K,2)*(F[V]+G[V])+bmPow(K,3)*F[V],oe[V]=W,se!==null&&(ee+=bmPow(oe[V]-se[V],2));ee=bmSqrt(ee),Y+=ee,Q.points[O]=new _(ee,oe),se=oe}Q.segmentLength=Y,M[B]=Q}return M[B]}}();function R(M,D){var F=D.percents,N=D.lengths,G=F.length,B=bmFloor((G-1)*M),H=M*D.addedLength,O=0;if(B===G-1||B===0||H===N[B])return F[B];for(var V=N[B]>H?-1:1,U=!0;U;)if(N[B]<=H&&N[B+1]>H?(O=(H-N[B])/(N[B+1]-N[B]),U=!1):B+=V,B<0||B>=G-1){if(B===G-1)return F[B];U=!1}return F[B]+(F[B+1]-F[B])*O}function I(M,D,F,N,G,B){var H=R(G,B),O=1-H,V=o.round((O*O*O*M[0]+(H*O*O+O*H*O+O*O*H)*F[0]+(H*H*O+O*H*H+H*O*H)*N[0]+H*H*H*D[0])*1e3)/1e3,U=o.round((O*O*O*M[1]+(H*O*O+O*H*O+O*O*H)*F[1]+(H*H*O+O*H*H+H*O*H)*N[1]+H*H*H*D[1])*1e3)/1e3;return[V,U]}var L=createTypedArray("float32",8);function j(M,D,F,N,G,B,H){G<0?G=0:G>1&&(G=1);var O=R(G,H);B=B>1?1:B;var V=R(B,H),U,W=M.length,K=1-O,Y=1-V,ee=K*K*K,oe=O*K*K*3,se=O*O*K*3,Q=O*O*O,ie=K*K*Y,ae=O*K*Y+K*O*Y+K*K*V,re=O*O*Y+K*O*V+O*K*V,J=O*O*V,te=K*Y*Y,Z=O*Y*Y+K*V*Y+K*Y*V,X=O*V*Y+K*V*V+O*Y*V,de=O*V*V,he=Y*Y*Y,ne=V*Y*Y+Y*V*Y+Y*Y*V,ue=V*V*Y+Y*V*V+V*Y*V,ce=V*V*V;for(U=0;U<W;U+=1)L[U*4]=o.round((ee*M[U]+oe*F[U]+se*N[U]+Q*D[U])*1e3)/1e3,L[U*4+1]=o.round((ie*M[U]+ae*F[U]+re*N[U]+J*D[U])*1e3)/1e3,L[U*4+2]=o.round((te*M[U]+Z*F[U]+X*N[U]+de*D[U])*1e3)/1e3,L[U*4+3]=o.round((he*M[U]+ne*F[U]+ue*N[U]+ce*D[U])*1e3)/1e3;return L}return{getSegmentsLength:E,getNewSegment:j,getPointInSegment:I,buildBezierData:P,pointOnLine2D:u,pointOnLine3D:T}}var bez=bezFunction(),initFrame=initialDefaultFrame,mathAbs=Math.abs;function interpolateValue(o,u){var T=this.offsetTime,S;this.propType==="multidimensional"&&(S=createTypedArray("float32",this.pv.length));for(var E=u.lastIndex,C=E,_=this.keyframes.length-1,P=!0,R,I,L;P;){if(R=this.keyframes[C],I=this.keyframes[C+1],C===_-1&&o>=I.t-T){R.h&&(R=I),E=0;break}if(I.t-T>o){E=C;break}C<_-1?C+=1:(E=0,P=!1)}L=this.keyframesMetadata[C]||{};var j,M,D,F,N,G,B=I.t-T,H=R.t-T,O;if(R.to){L.bezierData||(L.bezierData=bez.buildBezierData(R.s,I.s||R.e,R.to,R.ti));var V=L.bezierData;if(o>=B||o<H){var U=o>=B?V.points.length-1:0;for(M=V.points[U].point.length,j=0;j<M;j+=1)S[j]=V.points[U].point[j]}else{L.__fnct?G=L.__fnct:(G=BezierFactory.getBezierEasing(R.o.x,R.o.y,R.i.x,R.i.y,R.n).get,L.__fnct=G),D=G((o-H)/(B-H));var W=V.segmentLength*D,K,Y=u.lastFrame<o&&u._lastKeyframeIndex===C?u._lastAddedLength:0;for(N=u.lastFrame<o&&u._lastKeyframeIndex===C?u._lastPoint:0,P=!0,F=V.points.length;P;){if(Y+=V.points[N].partialLength,W===0||D===0||N===V.points.length-1){for(M=V.points[N].point.length,j=0;j<M;j+=1)S[j]=V.points[N].point[j];break}else if(W>=Y&&W<Y+V.points[N+1].partialLength){for(K=(W-Y)/V.points[N+1].partialLength,M=V.points[N].point.length,j=0;j<M;j+=1)S[j]=V.points[N].point[j]+(V.points[N+1].point[j]-V.points[N].point[j])*K;break}N<F-1?N+=1:P=!1}u._lastPoint=N,u._lastAddedLength=Y-V.points[N].partialLength,u._lastKeyframeIndex=C}}else{var ee,oe,se,Q,ie;if(_=R.s.length,O=I.s||R.e,this.sh&&R.h!==1)if(o>=B)S[0]=O[0],S[1]=O[1],S[2]=O[2];else if(o<=H)S[0]=R.s[0],S[1]=R.s[1],S[2]=R.s[2];else{var ae=createQuaternion(R.s),re=createQuaternion(O),J=(o-H)/(B-H);quaternionToEuler(S,slerp(ae,re,J))}else for(C=0;C<_;C+=1)R.h!==1&&(o>=B?D=1:o<H?D=0:(R.o.x.constructor===Array?(L.__fnct||(L.__fnct=[]),L.__fnct[C]?G=L.__fnct[C]:(ee=R.o.x[C]===void 0?R.o.x[0]:R.o.x[C],oe=R.o.y[C]===void 0?R.o.y[0]:R.o.y[C],se=R.i.x[C]===void 0?R.i.x[0]:R.i.x[C],Q=R.i.y[C]===void 0?R.i.y[0]:R.i.y[C],G=BezierFactory.getBezierEasing(ee,oe,se,Q).get,L.__fnct[C]=G)):L.__fnct?G=L.__fnct:(ee=R.o.x,oe=R.o.y,se=R.i.x,Q=R.i.y,G=BezierFactory.getBezierEasing(ee,oe,se,Q).get,R.keyframeMetadata=G),D=G((o-H)/(B-H)))),O=I.s||R.e,ie=R.h===1?R.s[C]:R.s[C]+(O[C]-R.s[C])*D,this.propType==="multidimensional"?S[C]=ie:S=ie}return u.lastIndex=E,S}function slerp(o,u,T){var S=[],E=o[0],C=o[1],_=o[2],P=o[3],R=u[0],I=u[1],L=u[2],j=u[3],M,D,F,N,G;return D=E*R+C*I+_*L+P*j,D<0&&(D=-D,R=-R,I=-I,L=-L,j=-j),1-D>1e-6?(M=Math.acos(D),F=Math.sin(M),N=Math.sin((1-T)*M)/F,G=Math.sin(T*M)/F):(N=1-T,G=T),S[0]=N*E+G*R,S[1]=N*C+G*I,S[2]=N*_+G*L,S[3]=N*P+G*j,S}function quaternionToEuler(o,u){var T=u[0],S=u[1],E=u[2],C=u[3],_=Math.atan2(2*S*C-2*T*E,1-2*S*S-2*E*E),P=Math.asin(2*T*S+2*E*C),R=Math.atan2(2*T*C-2*S*E,1-2*T*T-2*E*E);o[0]=_/degToRads,o[1]=P/degToRads,o[2]=R/degToRads}function createQuaternion(o){var u=o[0]*degToRads,T=o[1]*degToRads,S=o[2]*degToRads,E=Math.cos(u/2),C=Math.cos(T/2),_=Math.cos(S/2),P=Math.sin(u/2),R=Math.sin(T/2),I=Math.sin(S/2),L=E*C*_-P*R*I,j=P*R*_+E*C*I,M=P*C*_+E*R*I,D=E*R*_-P*C*I;return[j,M,D,L]}function getValueAtCurrentTime(){var o=this.comp.renderedFrame-this.offsetTime,u=this.keyframes[0].t-this.offsetTime,T=this.keyframes[this.keyframes.length-1].t-this.offsetTime;if(!(o===this._caching.lastFrame||this._caching.lastFrame!==initFrame&&(this._caching.lastFrame>=T&&o>=T||this._caching.lastFrame<u&&o<u))){this._caching.lastFrame>=o&&(this._caching._lastKeyframeIndex=-1,this._caching.lastIndex=0);var S=this.interpolateValue(o,this._caching);this.pv=S}return this._caching.lastFrame=o,this.pv}function setVValue(o){var u;if(this.propType==="unidimensional")u=o*this.mult,mathAbs(this.v-u)>1e-5&&(this.v=u,this._mdf=!0);else for(var T=0,S=this.v.length;T<S;)u=o[T]*this.mult,mathAbs(this.v[T]-u)>1e-5&&(this.v[T]=u,this._mdf=!0),T+=1}function processEffectsSequence(){if(!(this.elem.globalData.frameId===this.frameId||!this.effectsSequence.length)){if(this.lock){this.setVValue(this.pv);return}this.lock=!0,this._mdf=this._isFirstFrame;var o,u=this.effectsSequence.length,T=this.kf?this.pv:this.data.k;for(o=0;o<u;o+=1)T=this.effectsSequence[o](T);this.setVValue(T),this._isFirstFrame=!1,this.lock=!1,this.frameId=this.elem.globalData.frameId}}function addEffect(o){this.effectsSequence.push(o),this.container.addDynamicProperty(this)}function ValueProperty(o,u,T,S){this.propType="unidimensional",this.mult=T||1,this.data=u,this.v=T?u.k*T:u.k,this.pv=u.k,this._mdf=!1,this.elem=o,this.container=S,this.comp=o.comp,this.k=!1,this.kf=!1,this.vel=0,this.effectsSequence=[],this._isFirstFrame=!0,this.getValue=processEffectsSequence,this.setVValue=setVValue,this.addEffect=addEffect}function MultiDimensionalProperty(o,u,T,S){this.propType="multidimensional",this.mult=T||1,this.data=u,this._mdf=!1,this.elem=o,this.container=S,this.comp=o.comp,this.k=!1,this.kf=!1,this.frameId=-1;var E,C=u.k.length;for(this.v=createTypedArray("float32",C),this.pv=createTypedArray("float32",C),this.vel=createTypedArray("float32",C),E=0;E<C;E+=1)this.v[E]=u.k[E]*this.mult,this.pv[E]=u.k[E];this._isFirstFrame=!0,this.effectsSequence=[],this.getValue=processEffectsSequence,this.setVValue=setVValue,this.addEffect=addEffect}function KeyframedValueProperty(o,u,T,S){this.propType="unidimensional",this.keyframes=u.k,this.keyframesMetadata=[],this.offsetTime=o.data.st,this.frameId=-1,this._caching={lastFrame:initFrame,lastIndex:0,value:0,_lastKeyframeIndex:-1},this.k=!0,this.kf=!0,this.data=u,this.mult=T||1,this.elem=o,this.container=S,this.comp=o.comp,this.v=initFrame,this.pv=initFrame,this._isFirstFrame=!0,this.getValue=processEffectsSequence,this.setVValue=setVValue,this.interpolateValue=interpolateValue,this.effectsSequence=[getValueAtCurrentTime.bind(this)],this.addEffect=addEffect}function KeyframedMultidimensionalProperty(o,u,T,S){this.propType="multidimensional";var E,C=u.k.length,_,P,R,I;for(E=0;E<C-1;E+=1)u.k[E].to&&u.k[E].s&&u.k[E+1]&&u.k[E+1].s&&(_=u.k[E].s,P=u.k[E+1].s,R=u.k[E].to,I=u.k[E].ti,(_.length===2&&!(_[0]===P[0]&&_[1]===P[1])&&bez.pointOnLine2D(_[0],_[1],P[0],P[1],_[0]+R[0],_[1]+R[1])&&bez.pointOnLine2D(_[0],_[1],P[0],P[1],P[0]+I[0],P[1]+I[1])||_.length===3&&!(_[0]===P[0]&&_[1]===P[1]&&_[2]===P[2])&&bez.pointOnLine3D(_[0],_[1],_[2],P[0],P[1],P[2],_[0]+R[0],_[1]+R[1],_[2]+R[2])&&bez.pointOnLine3D(_[0],_[1],_[2],P[0],P[1],P[2],P[0]+I[0],P[1]+I[1],P[2]+I[2]))&&(u.k[E].to=null,u.k[E].ti=null),_[0]===P[0]&&_[1]===P[1]&&R[0]===0&&R[1]===0&&I[0]===0&&I[1]===0&&(_.length===2||_[2]===P[2]&&R[2]===0&&I[2]===0)&&(u.k[E].to=null,u.k[E].ti=null));this.effectsSequence=[getValueAtCurrentTime.bind(this)],this.data=u,this.keyframes=u.k,this.keyframesMetadata=[],this.offsetTime=o.data.st,this.k=!0,this.kf=!0,this._isFirstFrame=!0,this.mult=T||1,this.elem=o,this.container=S,this.comp=o.comp,this.getValue=processEffectsSequence,this.setVValue=setVValue,this.interpolateValue=interpolateValue,this.frameId=-1;var L=u.k[0].s.length;for(this.v=createTypedArray("float32",L),this.pv=createTypedArray("float32",L),E=0;E<L;E+=1)this.v[E]=initFrame,this.pv[E]=initFrame;this._caching={lastFrame:initFrame,lastIndex:0,value:createTypedArray("float32",L)},this.addEffect=addEffect}var PropertyFactory=function(){function o(T,S,E,C,_){S.sid&&(S=T.globalData.slotManager.getProp(S));var P;if(!S.k.length)P=new ValueProperty(T,S,C,_);else if(typeof S.k[0]=="number")P=new MultiDimensionalProperty(T,S,C,_);else switch(E){case 0:P=new KeyframedValueProperty(T,S,C,_);break;case 1:P=new KeyframedMultidimensionalProperty(T,S,C,_);break}return P.effectsSequence.length&&_.addDynamicProperty(P),P}var u={getProp:o};return u}();function DynamicPropertyContainer(){}DynamicPropertyContainer.prototype={addDynamicProperty:function(u){this.dynamicProperties.indexOf(u)===-1&&(this.dynamicProperties.push(u),this.container.addDynamicProperty(this),this._isAnimated=!0)},iterateDynamicProperties:function(){this._mdf=!1;var u,T=this.dynamicProperties.length;for(u=0;u<T;u+=1)this.dynamicProperties[u].getValue(),this.dynamicProperties[u]._mdf&&(this._mdf=!0)},initDynamicPropertyContainer:function(u){this.container=u,this.dynamicProperties=[],this._mdf=!1,this._isAnimated=!1}};var pointPool=function(){function o(){return createTypedArray("float32",2)}return poolFactory(8,o)}();function ShapePath(){this.c=!1,this._length=0,this._maxLength=8,this.v=createSizedArray(this._maxLength),this.o=createSizedArray(this._maxLength),this.i=createSizedArray(this._maxLength)}ShapePath.prototype.setPathData=function(o,u){this.c=o,this.setLength(u);for(var T=0;T<u;)this.v[T]=pointPool.newElement(),this.o[T]=pointPool.newElement(),this.i[T]=pointPool.newElement(),T+=1},ShapePath.prototype.setLength=function(o){for(;this._maxLength<o;)this.doubleArrayLength();this._length=o},ShapePath.prototype.doubleArrayLength=function(){this.v=this.v.concat(createSizedArray(this._maxLength)),this.i=this.i.concat(createSizedArray(this._maxLength)),this.o=this.o.concat(createSizedArray(this._maxLength)),this._maxLength*=2},ShapePath.prototype.setXYAt=function(o,u,T,S,E){var C;switch(this._length=Math.max(this._length,S+1),this._length>=this._maxLength&&this.doubleArrayLength(),T){case"v":C=this.v;break;case"i":C=this.i;break;case"o":C=this.o;break;default:C=[];break}(!C[S]||C[S]&&!E)&&(C[S]=pointPool.newElement()),C[S][0]=o,C[S][1]=u},ShapePath.prototype.setTripleAt=function(o,u,T,S,E,C,_,P){this.setXYAt(o,u,"v",_,P),this.setXYAt(T,S,"o",_,P),this.setXYAt(E,C,"i",_,P)},ShapePath.prototype.reverse=function(){var o=new ShapePath;o.setPathData(this.c,this._length);var u=this.v,T=this.o,S=this.i,E=0;this.c&&(o.setTripleAt(u[0][0],u[0][1],S[0][0],S[0][1],T[0][0],T[0][1],0,!1),E=1);var C=this._length-1,_=this._length,P;for(P=E;P<_;P+=1)o.setTripleAt(u[C][0],u[C][1],S[C][0],S[C][1],T[C][0],T[C][1],P,!1),C-=1;return o},ShapePath.prototype.length=function(){return this._length};var shapePool=function(){function o(){return new ShapePath}function u(E){var C=E._length,_;for(_=0;_<C;_+=1)pointPool.release(E.v[_]),pointPool.release(E.i[_]),pointPool.release(E.o[_]),E.v[_]=null,E.i[_]=null,E.o[_]=null;E._length=0,E.c=!1}function T(E){var C=S.newElement(),_,P=E._length===void 0?E.v.length:E._length;for(C.setLength(P),C.c=E.c,_=0;_<P;_+=1)C.setTripleAt(E.v[_][0],E.v[_][1],E.o[_][0],E.o[_][1],E.i[_][0],E.i[_][1],_);return C}var S=poolFactory(4,o,u);return S.clone=T,S}();function ShapeCollection(){this._length=0,this._maxLength=4,this.shapes=createSizedArray(this._maxLength)}ShapeCollection.prototype.addShape=function(o){this._length===this._maxLength&&(this.shapes=this.shapes.concat(createSizedArray(this._maxLength)),this._maxLength*=2),this.shapes[this._length]=o,this._length+=1},ShapeCollection.prototype.releaseShapes=function(){var o;for(o=0;o<this._length;o+=1)shapePool.release(this.shapes[o]);this._length=0};var shapeCollectionPool=function(){var o={newShapeCollection:E,release:C},u=0,T=4,S=createSizedArray(T);function E(){var _;return u?(u-=1,_=S[u]):_=new ShapeCollection,_}function C(_){var P,R=_._length;for(P=0;P<R;P+=1)shapePool.release(_.shapes[P]);_._length=0,u===T&&(S=pooling.double(S),T*=2),S[u]=_,u+=1}return o}(),ShapePropertyFactory=function(){var o=-999999;function u(B,H,O){var V=O.lastIndex,U,W,K,Y,ee,oe,se,Q,ie,ae=this.keyframes;if(B<ae[0].t-this.offsetTime)U=ae[0].s[0],K=!0,V=0;else if(B>=ae[ae.length-1].t-this.offsetTime)U=ae[ae.length-1].s?ae[ae.length-1].s[0]:ae[ae.length-2].e[0],K=!0;else{for(var re=V,J=ae.length-1,te=!0,Z,X,de;te&&(Z=ae[re],X=ae[re+1],!(X.t-this.offsetTime>B));)re<J-1?re+=1:te=!1;if(de=this.keyframesMetadata[re]||{},K=Z.h===1,V=re,!K){if(B>=X.t-this.offsetTime)Q=1;else if(B<Z.t-this.offsetTime)Q=0;else{var he;de.__fnct?he=de.__fnct:(he=BezierFactory.getBezierEasing(Z.o.x,Z.o.y,Z.i.x,Z.i.y).get,de.__fnct=he),Q=he((B-(Z.t-this.offsetTime))/(X.t-this.offsetTime-(Z.t-this.offsetTime)))}W=X.s?X.s[0]:Z.e[0]}U=Z.s[0]}for(oe=H._length,se=U.i[0].length,O.lastIndex=V,Y=0;Y<oe;Y+=1)for(ee=0;ee<se;ee+=1)ie=K?U.i[Y][ee]:U.i[Y][ee]+(W.i[Y][ee]-U.i[Y][ee])*Q,H.i[Y][ee]=ie,ie=K?U.o[Y][ee]:U.o[Y][ee]+(W.o[Y][ee]-U.o[Y][ee])*Q,H.o[Y][ee]=ie,ie=K?U.v[Y][ee]:U.v[Y][ee]+(W.v[Y][ee]-U.v[Y][ee])*Q,H.v[Y][ee]=ie}function T(){var B=this.comp.renderedFrame-this.offsetTime,H=this.keyframes[0].t-this.offsetTime,O=this.keyframes[this.keyframes.length-1].t-this.offsetTime,V=this._caching.lastFrame;return V!==o&&(V<H&&B<H||V>O&&B>O)||(this._caching.lastIndex=V<B?this._caching.lastIndex:0,this.interpolateShape(B,this.pv,this._caching)),this._caching.lastFrame=B,this.pv}function S(){this.paths=this.localShapeCollection}function E(B,H){if(B._length!==H._length||B.c!==H.c)return!1;var O,V=B._length;for(O=0;O<V;O+=1)if(B.v[O][0]!==H.v[O][0]||B.v[O][1]!==H.v[O][1]||B.o[O][0]!==H.o[O][0]||B.o[O][1]!==H.o[O][1]||B.i[O][0]!==H.i[O][0]||B.i[O][1]!==H.i[O][1])return!1;return!0}function C(B){E(this.v,B)||(this.v=shapePool.clone(B),this.localShapeCollection.releaseShapes(),this.localShapeCollection.addShape(this.v),this._mdf=!0,this.paths=this.localShapeCollection)}function _(){if(this.elem.globalData.frameId!==this.frameId){if(!this.effectsSequence.length){this._mdf=!1;return}if(this.lock){this.setVValue(this.pv);return}this.lock=!0,this._mdf=!1;var B;this.kf?B=this.pv:this.data.ks?B=this.data.ks.k:B=this.data.pt.k;var H,O=this.effectsSequence.length;for(H=0;H<O;H+=1)B=this.effectsSequence[H](B);this.setVValue(B),this.lock=!1,this.frameId=this.elem.globalData.frameId}}function P(B,H,O){this.propType="shape",this.comp=B.comp,this.container=B,this.elem=B,this.data=H,this.k=!1,this.kf=!1,this._mdf=!1;var V=O===3?H.pt.k:H.ks.k;this.v=shapePool.clone(V),this.pv=shapePool.clone(this.v),this.localShapeCollection=shapeCollectionPool.newShapeCollection(),this.paths=this.localShapeCollection,this.paths.addShape(this.v),this.reset=S,this.effectsSequence=[]}function R(B){this.effectsSequence.push(B),this.container.addDynamicProperty(this)}P.prototype.interpolateShape=u,P.prototype.getValue=_,P.prototype.setVValue=C,P.prototype.addEffect=R;function I(B,H,O){this.propType="shape",this.comp=B.comp,this.elem=B,this.container=B,this.offsetTime=B.data.st,this.keyframes=O===3?H.pt.k:H.ks.k,this.keyframesMetadata=[],this.k=!0,this.kf=!0;var V=this.keyframes[0].s[0].i.length;this.v=shapePool.newElement(),this.v.setPathData(this.keyframes[0].s[0].c,V),this.pv=shapePool.clone(this.v),this.localShapeCollection=shapeCollectionPool.newShapeCollection(),this.paths=this.localShapeCollection,this.paths.addShape(this.v),this.lastFrame=o,this.reset=S,this._caching={lastFrame:o,lastIndex:0},this.effectsSequence=[T.bind(this)]}I.prototype.getValue=_,I.prototype.interpolateShape=u,I.prototype.setVValue=C,I.prototype.addEffect=R;var L=function(){var B=roundCorner;function H(O,V){this.v=shapePool.newElement(),this.v.setPathData(!0,4),this.localShapeCollection=shapeCollectionPool.newShapeCollection(),this.paths=this.localShapeCollection,this.localShapeCollection.addShape(this.v),this.d=V.d,this.elem=O,this.comp=O.comp,this.frameId=-1,this.initDynamicPropertyContainer(O),this.p=PropertyFactory.getProp(O,V.p,1,0,this),this.s=PropertyFactory.getProp(O,V.s,1,0,this),this.dynamicProperties.length?this.k=!0:(this.k=!1,this.convertEllToPath())}return H.prototype={reset:S,getValue:function(){this.elem.globalData.frameId!==this.frameId&&(this.frameId=this.elem.globalData.frameId,this.iterateDynamicProperties(),this._mdf&&this.convertEllToPath())},convertEllToPath:function(){var V=this.p.v[0],U=this.p.v[1],W=this.s.v[0]/2,K=this.s.v[1]/2,Y=this.d!==3,ee=this.v;ee.v[0][0]=V,ee.v[0][1]=U-K,ee.v[1][0]=Y?V+W:V-W,ee.v[1][1]=U,ee.v[2][0]=V,ee.v[2][1]=U+K,ee.v[3][0]=Y?V-W:V+W,ee.v[3][1]=U,ee.i[0][0]=Y?V-W*B:V+W*B,ee.i[0][1]=U-K,ee.i[1][0]=Y?V+W:V-W,ee.i[1][1]=U-K*B,ee.i[2][0]=Y?V+W*B:V-W*B,ee.i[2][1]=U+K,ee.i[3][0]=Y?V-W:V+W,ee.i[3][1]=U+K*B,ee.o[0][0]=Y?V+W*B:V-W*B,ee.o[0][1]=U-K,ee.o[1][0]=Y?V+W:V-W,ee.o[1][1]=U+K*B,ee.o[2][0]=Y?V-W*B:V+W*B,ee.o[2][1]=U+K,ee.o[3][0]=Y?V-W:V+W,ee.o[3][1]=U-K*B}},extendPrototype([DynamicPropertyContainer],H),H}(),j=function(){function B(H,O){this.v=shapePool.newElement(),this.v.setPathData(!0,0),this.elem=H,this.comp=H.comp,this.data=O,this.frameId=-1,this.d=O.d,this.initDynamicPropertyContainer(H),O.sy===1?(this.ir=PropertyFactory.getProp(H,O.ir,0,0,this),this.is=PropertyFactory.getProp(H,O.is,0,.01,this),this.convertToPath=this.convertStarToPath):this.convertToPath=this.convertPolygonToPath,this.pt=PropertyFactory.getProp(H,O.pt,0,0,this),this.p=PropertyFactory.getProp(H,O.p,1,0,this),this.r=PropertyFactory.getProp(H,O.r,0,degToRads,this),this.or=PropertyFactory.getProp(H,O.or,0,0,this),this.os=PropertyFactory.getProp(H,O.os,0,.01,this),this.localShapeCollection=shapeCollectionPool.newShapeCollection(),this.localShapeCollection.addShape(this.v),this.paths=this.localShapeCollection,this.dynamicProperties.length?this.k=!0:(this.k=!1,this.convertToPath())}return B.prototype={reset:S,getValue:function(){this.elem.globalData.frameId!==this.frameId&&(this.frameId=this.elem.globalData.frameId,this.iterateDynamicProperties(),this._mdf&&this.convertToPath())},convertStarToPath:function(){var O=Math.floor(this.pt.v)*2,V=Math.PI*2/O,U=!0,W=this.or.v,K=this.ir.v,Y=this.os.v,ee=this.is.v,oe=2*Math.PI*W/(O*2),se=2*Math.PI*K/(O*2),Q,ie,ae,re,J=-Math.PI/2;J+=this.r.v;var te=this.data.d===3?-1:1;for(this.v._length=0,Q=0;Q<O;Q+=1){ie=U?W:K,ae=U?Y:ee,re=U?oe:se;var Z=ie*Math.cos(J),X=ie*Math.sin(J),de=Z===0&&X===0?0:X/Math.sqrt(Z*Z+X*X),he=Z===0&&X===0?0:-Z/Math.sqrt(Z*Z+X*X);Z+=+this.p.v[0],X+=+this.p.v[1],this.v.setTripleAt(Z,X,Z-de*re*ae*te,X-he*re*ae*te,Z+de*re*ae*te,X+he*re*ae*te,Q,!0),U=!U,J+=V*te}},convertPolygonToPath:function(){var O=Math.floor(this.pt.v),V=Math.PI*2/O,U=this.or.v,W=this.os.v,K=2*Math.PI*U/(O*4),Y,ee=-Math.PI*.5,oe=this.data.d===3?-1:1;for(ee+=this.r.v,this.v._length=0,Y=0;Y<O;Y+=1){var se=U*Math.cos(ee),Q=U*Math.sin(ee),ie=se===0&&Q===0?0:Q/Math.sqrt(se*se+Q*Q),ae=se===0&&Q===0?0:-se/Math.sqrt(se*se+Q*Q);se+=+this.p.v[0],Q+=+this.p.v[1],this.v.setTripleAt(se,Q,se-ie*K*W*oe,Q-ae*K*W*oe,se+ie*K*W*oe,Q+ae*K*W*oe,Y,!0),ee+=V*oe}this.paths.length=0,this.paths[0]=this.v}},extendPrototype([DynamicPropertyContainer],B),B}(),M=function(){function B(H,O){this.v=shapePool.newElement(),this.v.c=!0,this.localShapeCollection=shapeCollectionPool.newShapeCollection(),this.localShapeCollection.addShape(this.v),this.paths=this.localShapeCollection,this.elem=H,this.comp=H.comp,this.frameId=-1,this.d=O.d,this.initDynamicPropertyContainer(H),this.p=PropertyFactory.getProp(H,O.p,1,0,this),this.s=PropertyFactory.getProp(H,O.s,1,0,this),this.r=PropertyFactory.getProp(H,O.r,0,0,this),this.dynamicProperties.length?this.k=!0:(this.k=!1,this.convertRectToPath())}return B.prototype={convertRectToPath:function(){var O=this.p.v[0],V=this.p.v[1],U=this.s.v[0]/2,W=this.s.v[1]/2,K=bmMin(U,W,this.r.v),Y=K*(1-roundCorner);this.v._length=0,this.d===2||this.d===1?(this.v.setTripleAt(O+U,V-W+K,O+U,V-W+K,O+U,V-W+Y,0,!0),this.v.setTripleAt(O+U,V+W-K,O+U,V+W-Y,O+U,V+W-K,1,!0),K!==0?(this.v.setTripleAt(O+U-K,V+W,O+U-K,V+W,O+U-Y,V+W,2,!0),this.v.setTripleAt(O-U+K,V+W,O-U+Y,V+W,O-U+K,V+W,3,!0),this.v.setTripleAt(O-U,V+W-K,O-U,V+W-K,O-U,V+W-Y,4,!0),this.v.setTripleAt(O-U,V-W+K,O-U,V-W+Y,O-U,V-W+K,5,!0),this.v.setTripleAt(O-U+K,V-W,O-U+K,V-W,O-U+Y,V-W,6,!0),this.v.setTripleAt(O+U-K,V-W,O+U-Y,V-W,O+U-K,V-W,7,!0)):(this.v.setTripleAt(O-U,V+W,O-U+Y,V+W,O-U,V+W,2),this.v.setTripleAt(O-U,V-W,O-U,V-W+Y,O-U,V-W,3))):(this.v.setTripleAt(O+U,V-W+K,O+U,V-W+Y,O+U,V-W+K,0,!0),K!==0?(this.v.setTripleAt(O+U-K,V-W,O+U-K,V-W,O+U-Y,V-W,1,!0),this.v.setTripleAt(O-U+K,V-W,O-U+Y,V-W,O-U+K,V-W,2,!0),this.v.setTripleAt(O-U,V-W+K,O-U,V-W+K,O-U,V-W+Y,3,!0),this.v.setTripleAt(O-U,V+W-K,O-U,V+W-Y,O-U,V+W-K,4,!0),this.v.setTripleAt(O-U+K,V+W,O-U+K,V+W,O-U+Y,V+W,5,!0),this.v.setTripleAt(O+U-K,V+W,O+U-Y,V+W,O+U-K,V+W,6,!0),this.v.setTripleAt(O+U,V+W-K,O+U,V+W-K,O+U,V+W-Y,7,!0)):(this.v.setTripleAt(O-U,V-W,O-U+Y,V-W,O-U,V-W,1,!0),this.v.setTripleAt(O-U,V+W,O-U,V+W-Y,O-U,V+W,2,!0),this.v.setTripleAt(O+U,V+W,O+U-Y,V+W,O+U,V+W,3,!0)))},getValue:function(){this.elem.globalData.frameId!==this.frameId&&(this.frameId=this.elem.globalData.frameId,this.iterateDynamicProperties(),this._mdf&&this.convertRectToPath())},reset:S},extendPrototype([DynamicPropertyContainer],B),B}();function D(B,H,O){var V;if(O===3||O===4){var U=O===3?H.pt:H.ks,W=U.k;W.length?V=new I(B,H,O):V=new P(B,H,O)}else O===5?V=new M(B,H):O===6?V=new L(B,H):O===7&&(V=new j(B,H));return V.k&&B.addDynamicProperty(V),V}function F(){return P}function N(){return I}var G={};return G.getShapeProp=D,G.getConstructorFunction=F,G.getKeyframedConstructorFunction=N,G}();/*!
316 Transformation Matrix v2.0
317 (c) Epistemex 2014-2015
318 www.epistemex.com
319 By Ken Fyrstenberg
320 Contributions by leeoniya.
321 License: MIT, header required.
322 */var Matrix=function(){var o=Math.cos,u=Math.sin,T=Math.tan,S=Math.round;function E(){return this.props[0]=1,this.props[1]=0,this.props[2]=0,this.props[3]=0,this.props[4]=0,this.props[5]=1,this.props[6]=0,this.props[7]=0,this.props[8]=0,this.props[9]=0,this.props[10]=1,this.props[11]=0,this.props[12]=0,this.props[13]=0,this.props[14]=0,this.props[15]=1,this}function C(Z){if(Z===0)return this;var X=o(Z),de=u(Z);return this._t(X,-de,0,0,de,X,0,0,0,0,1,0,0,0,0,1)}function _(Z){if(Z===0)return this;var X=o(Z),de=u(Z);return this._t(1,0,0,0,0,X,-de,0,0,de,X,0,0,0,0,1)}function P(Z){if(Z===0)return this;var X=o(Z),de=u(Z);return this._t(X,0,de,0,0,1,0,0,-de,0,X,0,0,0,0,1)}function R(Z){if(Z===0)return this;var X=o(Z),de=u(Z);return this._t(X,-de,0,0,de,X,0,0,0,0,1,0,0,0,0,1)}function I(Z,X){return this._t(1,X,Z,1,0,0)}function L(Z,X){return this.shear(T(Z),T(X))}function j(Z,X){var de=o(X),he=u(X);return this._t(de,he,0,0,-he,de,0,0,0,0,1,0,0,0,0,1)._t(1,0,0,0,T(Z),1,0,0,0,0,1,0,0,0,0,1)._t(de,-he,0,0,he,de,0,0,0,0,1,0,0,0,0,1)}function M(Z,X,de){return!de&&de!==0&&(de=1),Z===1&&X===1&&de===1?this:this._t(Z,0,0,0,0,X,0,0,0,0,de,0,0,0,0,1)}function D(Z,X,de,he,ne,ue,ce,fe,ve,Te,Se,ke,we,Le,pe,Me){return this.props[0]=Z,this.props[1]=X,this.props[2]=de,this.props[3]=he,this.props[4]=ne,this.props[5]=ue,this.props[6]=ce,this.props[7]=fe,this.props[8]=ve,this.props[9]=Te,this.props[10]=Se,this.props[11]=ke,this.props[12]=we,this.props[13]=Le,this.props[14]=pe,this.props[15]=Me,this}function F(Z,X,de){return de=de||0,Z!==0||X!==0||de!==0?this._t(1,0,0,0,0,1,0,0,0,0,1,0,Z,X,de,1):this}function N(Z,X,de,he,ne,ue,ce,fe,ve,Te,Se,ke,we,Le,pe,Me){var Pe=this.props;if(Z===1&&X===0&&de===0&&he===0&&ne===0&&ue===1&&ce===0&&fe===0&&ve===0&&Te===0&&Se===1&&ke===0)return Pe[12]=Pe[12]*Z+Pe[15]*we,Pe[13]=Pe[13]*ue+Pe[15]*Le,Pe[14]=Pe[14]*Se+Pe[15]*pe,Pe[15]*=Me,this._identityCalculated=!1,this;var Ue=Pe[0],qe=Pe[1],Ie=Pe[2],Xe=Pe[3],et=Pe[4],tt=Pe[5],Ye=Pe[6],ze=Pe[7],Ze=Pe[8],He=Pe[9],rt=Pe[10],it=Pe[11],st=Pe[12],at=Pe[13],ot=Pe[14],je=Pe[15];return Pe[0]=Ue*Z+qe*ne+Ie*ve+Xe*we,Pe[1]=Ue*X+qe*ue+Ie*Te+Xe*Le,Pe[2]=Ue*de+qe*ce+Ie*Se+Xe*pe,Pe[3]=Ue*he+qe*fe+Ie*ke+Xe*Me,Pe[4]=et*Z+tt*ne+Ye*ve+ze*we,Pe[5]=et*X+tt*ue+Ye*Te+ze*Le,Pe[6]=et*de+tt*ce+Ye*Se+ze*pe,Pe[7]=et*he+tt*fe+Ye*ke+ze*Me,Pe[8]=Ze*Z+He*ne+rt*ve+it*we,Pe[9]=Ze*X+He*ue+rt*Te+it*Le,Pe[10]=Ze*de+He*ce+rt*Se+it*pe,Pe[11]=Ze*he+He*fe+rt*ke+it*Me,Pe[12]=st*Z+at*ne+ot*ve+je*we,Pe[13]=st*X+at*ue+ot*Te+je*Le,Pe[14]=st*de+at*ce+ot*Se+je*pe,Pe[15]=st*he+at*fe+ot*ke+je*Me,this._identityCalculated=!1,this}function G(Z){var X=Z.props;return this.transform(X[0],X[1],X[2],X[3],X[4],X[5],X[6],X[7],X[8],X[9],X[10],X[11],X[12],X[13],X[14],X[15])}function B(){return this._identityCalculated||(this._identity=!(this.props[0]!==1||this.props[1]!==0||this.props[2]!==0||this.props[3]!==0||this.props[4]!==0||this.props[5]!==1||this.props[6]!==0||this.props[7]!==0||this.props[8]!==0||this.props[9]!==0||this.props[10]!==1||this.props[11]!==0||this.props[12]!==0||this.props[13]!==0||this.props[14]!==0||this.props[15]!==1),this._identityCalculated=!0),this._identity}function H(Z){for(var X=0;X<16;){if(Z.props[X]!==this.props[X])return!1;X+=1}return!0}function O(Z){var X;for(X=0;X<16;X+=1)Z.props[X]=this.props[X];return Z}function V(Z){var X;for(X=0;X<16;X+=1)this.props[X]=Z[X]}function U(Z,X,de){return{x:Z*this.props[0]+X*this.props[4]+de*this.props[8]+this.props[12],y:Z*this.props[1]+X*this.props[5]+de*this.props[9]+this.props[13],z:Z*this.props[2]+X*this.props[6]+de*this.props[10]+this.props[14]}}function W(Z,X,de){return Z*this.props[0]+X*this.props[4]+de*this.props[8]+this.props[12]}function K(Z,X,de){return Z*this.props[1]+X*this.props[5]+de*this.props[9]+this.props[13]}function Y(Z,X,de){return Z*this.props[2]+X*this.props[6]+de*this.props[10]+this.props[14]}function ee(){var Z=this.props[0]*this.props[5]-this.props[1]*this.props[4],X=this.props[5]/Z,de=-this.props[1]/Z,he=-this.props[4]/Z,ne=this.props[0]/Z,ue=(this.props[4]*this.props[13]-this.props[5]*this.props[12])/Z,ce=-(this.props[0]*this.props[13]-this.props[1]*this.props[12])/Z,fe=new Matrix;return fe.props[0]=X,fe.props[1]=de,fe.props[4]=he,fe.props[5]=ne,fe.props[12]=ue,fe.props[13]=ce,fe}function oe(Z){var X=this.getInverseMatrix();return X.applyToPointArray(Z[0],Z[1],Z[2]||0)}function se(Z){var X,de=Z.length,he=[];for(X=0;X<de;X+=1)he[X]=oe(Z[X]);return he}function Q(Z,X,de){var he=createTypedArray("float32",6);if(this.isIdentity())he[0]=Z[0],he[1]=Z[1],he[2]=X[0],he[3]=X[1],he[4]=de[0],he[5]=de[1];else{var ne=this.props[0],ue=this.props[1],ce=this.props[4],fe=this.props[5],ve=this.props[12],Te=this.props[13];he[0]=Z[0]*ne+Z[1]*ce+ve,he[1]=Z[0]*ue+Z[1]*fe+Te,he[2]=X[0]*ne+X[1]*ce+ve,he[3]=X[0]*ue+X[1]*fe+Te,he[4]=de[0]*ne+de[1]*ce+ve,he[5]=de[0]*ue+de[1]*fe+Te}return he}function ie(Z,X,de){var he;return this.isIdentity()?he=[Z,X,de]:he=[Z*this.props[0]+X*this.props[4]+de*this.props[8]+this.props[12],Z*this.props[1]+X*this.props[5]+de*this.props[9]+this.props[13],Z*this.props[2]+X*this.props[6]+de*this.props[10]+this.props[14]],he}function ae(Z,X){if(this.isIdentity())return Z+","+X;var de=this.props;return Math.round((Z*de[0]+X*de[4]+de[12])*100)/100+","+Math.round((Z*de[1]+X*de[5]+de[13])*100)/100}function re(){for(var Z=0,X=this.props,de="matrix3d(",he=1e4;Z<16;)de+=S(X[Z]*he)/he,de+=Z===15?")":",",Z+=1;return de}function J(Z){var X=1e4;return Z<1e-6&&Z>0||Z>-1e-6&&Z<0?S(Z*X)/X:Z}function te(){var Z=this.props,X=J(Z[0]),de=J(Z[1]),he=J(Z[4]),ne=J(Z[5]),ue=J(Z[12]),ce=J(Z[13]);return"matrix("+X+","+de+","+he+","+ne+","+ue+","+ce+")"}return function(){this.reset=E,this.rotate=C,this.rotateX=_,this.rotateY=P,this.rotateZ=R,this.skew=L,this.skewFromAxis=j,this.shear=I,this.scale=M,this.setTransform=D,this.translate=F,this.transform=N,this.multiply=G,this.applyToPoint=U,this.applyToX=W,this.applyToY=K,this.applyToZ=Y,this.applyToPointArray=ie,this.applyToTriplePoints=Q,this.applyToPointStringified=ae,this.toCSS=re,this.to2dCSS=te,this.clone=O,this.cloneFromProps=V,this.equals=H,this.inversePoints=se,this.inversePoint=oe,this.getInverseMatrix=ee,this._t=this.transform,this.isIdentity=B,this._identity=!0,this._identityCalculated=!1,this.props=createTypedArray("float32",16),this.reset()}}();function _typeof$3(o){"@babel/helpers - typeof";return _typeof$3=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(u){return typeof u}:function(u){return u&&typeof Symbol=="function"&&u.constructor===Symbol&&u!==Symbol.prototype?"symbol":typeof u},_typeof$3(o)}var lottie={};function setLocation(o){setLocationHref(o)}function searchAnimations(){animationManager.searchAnimations()}function setSubframeRendering(o){setSubframeEnabled(o)}function setPrefix(o){setIdPrefix(o)}function loadAnimation(o){return animationManager.loadAnimation(o)}function setQuality(o){if(typeof o=="string")switch(o){case"high":setDefaultCurveSegments(200);break;default:case"medium":setDefaultCurveSegments(50);break;case"low":setDefaultCurveSegments(10);break}else!isNaN(o)&&o>1&&setDefaultCurveSegments(o)}function inBrowser(){return typeof navigator<"u"}function installPlugin(o,u){o==="expressions"&&setExpressionsPlugin(u)}function getFactory(o){switch(o){case"propertyFactory":return PropertyFactory;case"shapePropertyFactory":return ShapePropertyFactory;case"matrix":return Matrix;default:return null}}lottie.play=animationManager.play,lottie.pause=animationManager.pause,lottie.setLocationHref=setLocation,lottie.togglePause=animationManager.togglePause,lottie.setSpeed=animationManager.setSpeed,lottie.setDirection=animationManager.setDirection,lottie.stop=animationManager.stop,lottie.searchAnimations=searchAnimations,lottie.registerAnimation=animationManager.registerAnimation,lottie.loadAnimation=loadAnimation,lottie.setSubframeRendering=setSubframeRendering,lottie.resize=animationManager.resize,lottie.goToAndStop=animationManager.goToAndStop,lottie.destroy=animationManager.destroy,lottie.setQuality=setQuality,lottie.inBrowser=inBrowser,lottie.installPlugin=installPlugin,lottie.freeze=animationManager.freeze,lottie.unfreeze=animationManager.unfreeze,lottie.setVolume=animationManager.setVolume,lottie.mute=animationManager.mute,lottie.unmute=animationManager.unmute,lottie.getRegisteredAnimations=animationManager.getRegisteredAnimations,lottie.useWebWorker=setWebWorker,lottie.setIDPrefix=setPrefix,lottie.__getFactory=getFactory,lottie.version="5.13.0";function checkReady(){document.readyState==="complete"&&(clearInterval(readyStateCheckInterval),searchAnimations())}function getQueryVariable(o){for(var u=queryString.split("&"),T=0;T<u.length;T+=1){var S=u[T].split("=");if(decodeURIComponent(S[0])==o)return decodeURIComponent(S[1])}return null}var queryString="";{var scripts=document.getElementsByTagName("script"),index=scripts.length-1,myScript=scripts[index]||{src:""};queryString=myScript.src?myScript.src.replace(/^[^\?]+\??/,""):"",getQueryVariable("renderer")}var readyStateCheckInterval=setInterval(checkReady,100);try{_typeof$3(exports)!=="object"&&(window.bodymovin=lottie)}catch(o){}var ShapeModifiers=function(){var o={},u={};o.registerModifier=T,o.getModifier=S;function T(E,C){u[E]||(u[E]=C)}function S(E,C,_){return new u[E](C,_)}return o}();function ShapeModifier(){}ShapeModifier.prototype.initModifierProperties=function(){},ShapeModifier.prototype.addShapeToModifier=function(){},ShapeModifier.prototype.addShape=function(o){if(!this.closed){o.sh.container.addDynamicProperty(o.sh);var u={shape:o.sh,data:o,localShapeCollection:shapeCollectionPool.newShapeCollection()};this.shapes.push(u),this.addShapeToModifier(u),this._isAnimated&&o.setAsAnimated()}},ShapeModifier.prototype.init=function(o,u){this.shapes=[],this.elem=o,this.initDynamicPropertyContainer(o),this.initModifierProperties(o,u),this.frameId=initialDefaultFrame,this.closed=!1,this.k=!1,this.dynamicProperties.length?this.k=!0:this.getValue(!0)},ShapeModifier.prototype.processKeys=function(){this.elem.globalData.frameId!==this.frameId&&(this.frameId=this.elem.globalData.frameId,this.iterateDynamicProperties())},extendPrototype([DynamicPropertyContainer],ShapeModifier);function TrimModifier(){}extendPrototype([ShapeModifier],TrimModifier),TrimModifier.prototype.initModifierProperties=function(o,u){this.s=PropertyFactory.getProp(o,u.s,0,.01,this),this.e=PropertyFactory.getProp(o,u.e,0,.01,this),this.o=PropertyFactory.getProp(o,u.o,0,0,this),this.sValue=0,this.eValue=0,this.getValue=this.processKeys,this.m=u.m,this._isAnimated=!!this.s.effectsSequence.length||!!this.e.effectsSequence.length||!!this.o.effectsSequence.length},TrimModifier.prototype.addShapeToModifier=function(o){o.pathsData=[]},TrimModifier.prototype.calculateShapeEdges=function(o,u,T,S,E){var C=[];u<=1?C.push({s:o,e:u}):o>=1?C.push({s:o-1,e:u-1}):(C.push({s:o,e:1}),C.push({s:0,e:u-1}));var _=[],P,R=C.length,I;for(P=0;P<R;P+=1)if(I=C[P],!(I.e*E<S||I.s*E>S+T)){var L,j;I.s*E<=S?L=0:L=(I.s*E-S)/T,I.e*E>=S+T?j=1:j=(I.e*E-S)/T,_.push([L,j])}return _.length||_.push([0,0]),_},TrimModifier.prototype.releasePathsData=function(o){var u,T=o.length;for(u=0;u<T;u+=1)segmentsLengthPool.release(o[u]);return o.length=0,o},TrimModifier.prototype.processShapes=function(o){var u,T;if(this._mdf||o){var S=this.o.v%360/360;if(S<0&&(S+=1),this.s.v>1?u=1+S:this.s.v<0?u=0+S:u=this.s.v+S,this.e.v>1?T=1+S:this.e.v<0?T=0+S:T=this.e.v+S,u>T){var E=u;u=T,T=E}u=Math.round(u*1e4)*1e-4,T=Math.round(T*1e4)*1e-4,this.sValue=u,this.eValue=T}else u=this.sValue,T=this.eValue;var C,_,P=this.shapes.length,R,I,L,j,M,D=0;if(T===u)for(_=0;_<P;_+=1)this.shapes[_].localShapeCollection.releaseShapes(),this.shapes[_].shape._mdf=!0,this.shapes[_].shape.paths=this.shapes[_].localShapeCollection,this._mdf&&(this.shapes[_].pathsData.length=0);else if(T===1&&u===0||T===0&&u===1){if(this._mdf)for(_=0;_<P;_+=1)this.shapes[_].pathsData.length=0,this.shapes[_].shape._mdf=!0}else{var F=[],N,G;for(_=0;_<P;_+=1)if(N=this.shapes[_],!N.shape._mdf&&!this._mdf&&!o&&this.m!==2)N.shape.paths=N.localShapeCollection;else{if(C=N.shape.paths,I=C._length,M=0,!N.shape._mdf&&N.pathsData.length)M=N.totalShapeLength;else{for(L=this.releasePathsData(N.pathsData),R=0;R<I;R+=1)j=bez.getSegmentsLength(C.shapes[R]),L.push(j),M+=j.totalLength;N.totalShapeLength=M,N.pathsData=L}D+=M,N.shape._mdf=!0}var B=u,H=T,O=0,V;for(_=P-1;_>=0;_-=1)if(N=this.shapes[_],N.shape._mdf){for(G=N.localShapeCollection,G.releaseShapes(),this.m===2&&P>1?(V=this.calculateShapeEdges(u,T,N.totalShapeLength,O,D),O+=N.totalShapeLength):V=[[B,H]],I=V.length,R=0;R<I;R+=1){B=V[R][0],H=V[R][1],F.length=0,H<=1?F.push({s:N.totalShapeLength*B,e:N.totalShapeLength*H}):B>=1?F.push({s:N.totalShapeLength*(B-1),e:N.totalShapeLength*(H-1)}):(F.push({s:N.totalShapeLength*B,e:N.totalShapeLength}),F.push({s:0,e:N.totalShapeLength*(H-1)}));var U=this.addShapes(N,F[0]);if(F[0].s!==F[0].e){if(F.length>1){var W=N.shape.paths.shapes[N.shape.paths._length-1];if(W.c){var K=U.pop();this.addPaths(U,G),U=this.addShapes(N,F[1],K)}else this.addPaths(U,G),U=this.addShapes(N,F[1])}this.addPaths(U,G)}}N.shape.paths=G}}},TrimModifier.prototype.addPaths=function(o,u){var T,S=o.length;for(T=0;T<S;T+=1)u.addShape(o[T])},TrimModifier.prototype.addSegment=function(o,u,T,S,E,C,_){E.setXYAt(u[0],u[1],"o",C),E.setXYAt(T[0],T[1],"i",C+1),_&&E.setXYAt(o[0],o[1],"v",C),E.setXYAt(S[0],S[1],"v",C+1)},TrimModifier.prototype.addSegmentFromArray=function(o,u,T,S){u.setXYAt(o[1],o[5],"o",T),u.setXYAt(o[2],o[6],"i",T+1),S&&u.setXYAt(o[0],o[4],"v",T),u.setXYAt(o[3],o[7],"v",T+1)},TrimModifier.prototype.addShapes=function(o,u,T){var S=o.pathsData,E=o.shape.paths.shapes,C,_=o.shape.paths._length,P,R,I=0,L,j,M,D,F=[],N,G=!0;for(T?(j=T._length,N=T._length):(T=shapePool.newElement(),j=0,N=0),F.push(T),C=0;C<_;C+=1){for(M=S[C].lengths,T.c=E[C].c,R=E[C].c?M.length:M.length+1,P=1;P<R;P+=1)if(L=M[P-1],I+L.addedLength<u.s)I+=L.addedLength,T.c=!1;else if(I>u.e){T.c=!1;break}else u.s<=I&&u.e>=I+L.addedLength?(this.addSegment(E[C].v[P-1],E[C].o[P-1],E[C].i[P],E[C].v[P],T,j,G),G=!1):(D=bez.getNewSegment(E[C].v[P-1],E[C].v[P],E[C].o[P-1],E[C].i[P],(u.s-I)/L.addedLength,(u.e-I)/L.addedLength,M[P-1]),this.addSegmentFromArray(D,T,j,G),G=!1,T.c=!1),I+=L.addedLength,j+=1;if(E[C].c&&M.length){if(L=M[P-1],I<=u.e){var B=M[P-1].addedLength;u.s<=I&&u.e>=I+B?(this.addSegment(E[C].v[P-1],E[C].o[P-1],E[C].i[0],E[C].v[0],T,j,G),G=!1):(D=bez.getNewSegment(E[C].v[P-1],E[C].v[0],E[C].o[P-1],E[C].i[0],(u.s-I)/B,(u.e-I)/B,M[P-1]),this.addSegmentFromArray(D,T,j,G),G=!1,T.c=!1)}else T.c=!1;I+=L.addedLength,j+=1}if(T._length&&(T.setXYAt(T.v[N][0],T.v[N][1],"i",N),T.setXYAt(T.v[T._length-1][0],T.v[T._length-1][1],"o",T._length-1)),I>u.e)break;C<_-1&&(T=shapePool.newElement(),G=!0,F.push(T),j=0)}return F};function PuckerAndBloatModifier(){}extendPrototype([ShapeModifier],PuckerAndBloatModifier),PuckerAndBloatModifier.prototype.initModifierProperties=function(o,u){this.getValue=this.processKeys,this.amount=PropertyFactory.getProp(o,u.a,0,null,this),this._isAnimated=!!this.amount.effectsSequence.length},PuckerAndBloatModifier.prototype.processPath=function(o,u){var T=u/100,S=[0,0],E=o._length,C=0;for(C=0;C<E;C+=1)S[0]+=o.v[C][0],S[1]+=o.v[C][1];S[0]/=E,S[1]/=E;var _=shapePool.newElement();_.c=o.c;var P,R,I,L,j,M;for(C=0;C<E;C+=1)P=o.v[C][0]+(S[0]-o.v[C][0])*T,R=o.v[C][1]+(S[1]-o.v[C][1])*T,I=o.o[C][0]+(S[0]-o.o[C][0])*-T,L=o.o[C][1]+(S[1]-o.o[C][1])*-T,j=o.i[C][0]+(S[0]-o.i[C][0])*-T,M=o.i[C][1]+(S[1]-o.i[C][1])*-T,_.setTripleAt(P,R,I,L,j,M,C);return _},PuckerAndBloatModifier.prototype.processShapes=function(o){var u,T,S=this.shapes.length,E,C,_=this.amount.v;if(_!==0){var P,R;for(T=0;T<S;T+=1){if(P=this.shapes[T],R=P.localShapeCollection,!(!P.shape._mdf&&!this._mdf&&!o))for(R.releaseShapes(),P.shape._mdf=!0,u=P.shape.paths.shapes,C=P.shape.paths._length,E=0;E<C;E+=1)R.addShape(this.processPath(u[E],_));P.shape.paths=P.localShapeCollection}}this.dynamicProperties.length||(this._mdf=!1)};var TransformPropertyFactory=function(){var o=[0,0];function u(R){var I=this._mdf;this.iterateDynamicProperties(),this._mdf=this._mdf||I,this.a&&R.translate(-this.a.v[0],-this.a.v[1],this.a.v[2]),this.s&&R.scale(this.s.v[0],this.s.v[1],this.s.v[2]),this.sk&&R.skewFromAxis(-this.sk.v,this.sa.v),this.r?R.rotate(-this.r.v):R.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]),this.data.p.s?this.data.p.z?R.translate(this.px.v,this.py.v,-this.pz.v):R.translate(this.px.v,this.py.v,0):R.translate(this.p.v[0],this.p.v[1],-this.p.v[2])}function T(R){if(this.elem.globalData.frameId!==this.frameId){if(this._isDirty&&(this.precalculateMatrix(),this._isDirty=!1),this.iterateDynamicProperties(),this._mdf||R){var I;if(this.v.cloneFromProps(this.pre.props),this.appliedTransformations<1&&this.v.translate(-this.a.v[0],-this.a.v[1],this.a.v[2]),this.appliedTransformations<2&&this.v.scale(this.s.v[0],this.s.v[1],this.s.v[2]),this.sk&&this.appliedTransformations<3&&this.v.skewFromAxis(-this.sk.v,this.sa.v),this.r&&this.appliedTransformations<4?this.v.rotate(-this.r.v):!this.r&&this.appliedTransformations<4&&this.v.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]),this.autoOriented){var L,j;if(I=this.elem.globalData.frameRate,this.p&&this.p.keyframes&&this.p.getValueAtTime)this.p._caching.lastFrame+this.p.offsetTime<=this.p.keyframes[0].t?(L=this.p.getValueAtTime((this.p.keyframes[0].t+.01)/I,0),j=this.p.getValueAtTime(this.p.keyframes[0].t/I,0)):this.p._caching.lastFrame+this.p.offsetTime>=this.p.keyframes[this.p.keyframes.length-1].t?(L=this.p.getValueAtTime(this.p.keyframes[this.p.keyframes.length-1].t/I,0),j=this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length-1].t-.05)/I,0)):(L=this.p.pv,j=this.p.getValueAtTime((this.p._caching.lastFrame+this.p.offsetTime-.01)/I,this.p.offsetTime));else if(this.px&&this.px.keyframes&&this.py.keyframes&&this.px.getValueAtTime&&this.py.getValueAtTime){L=[],j=[];var M=this.px,D=this.py;M._caching.lastFrame+M.offsetTime<=M.keyframes[0].t?(L[0]=M.getValueAtTime((M.keyframes[0].t+.01)/I,0),L[1]=D.getValueAtTime((D.keyframes[0].t+.01)/I,0),j[0]=M.getValueAtTime(M.keyframes[0].t/I,0),j[1]=D.getValueAtTime(D.keyframes[0].t/I,0)):M._caching.lastFrame+M.offsetTime>=M.keyframes[M.keyframes.length-1].t?(L[0]=M.getValueAtTime(M.keyframes[M.keyframes.length-1].t/I,0),L[1]=D.getValueAtTime(D.keyframes[D.keyframes.length-1].t/I,0),j[0]=M.getValueAtTime((M.keyframes[M.keyframes.length-1].t-.01)/I,0),j[1]=D.getValueAtTime((D.keyframes[D.keyframes.length-1].t-.01)/I,0)):(L=[M.pv,D.pv],j[0]=M.getValueAtTime((M._caching.lastFrame+M.offsetTime-.01)/I,M.offsetTime),j[1]=D.getValueAtTime((D._caching.lastFrame+D.offsetTime-.01)/I,D.offsetTime))}else j=o,L=j;this.v.rotate(-Math.atan2(L[1]-j[1],L[0]-j[0]))}this.data.p&&this.data.p.s?this.data.p.z?this.v.translate(this.px.v,this.py.v,-this.pz.v):this.v.translate(this.px.v,this.py.v,0):this.v.translate(this.p.v[0],this.p.v[1],-this.p.v[2])}this.frameId=this.elem.globalData.frameId}}function S(){if(this.appliedTransformations=0,this.pre.reset(),!this.a.effectsSequence.length)this.pre.translate(-this.a.v[0],-this.a.v[1],this.a.v[2]),this.appliedTransformations=1;else return;if(!this.s.effectsSequence.length)this.pre.scale(this.s.v[0],this.s.v[1],this.s.v[2]),this.appliedTransformations=2;else return;if(this.sk)if(!this.sk.effectsSequence.length&&!this.sa.effectsSequence.length)this.pre.skewFromAxis(-this.sk.v,this.sa.v),this.appliedTransformations=3;else return;this.r?this.r.effectsSequence.length||(this.pre.rotate(-this.r.v),this.appliedTransformations=4):!this.rz.effectsSequence.length&&!this.ry.effectsSequence.length&&!this.rx.effectsSequence.length&&!this.or.effectsSequence.length&&(this.pre.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]),this.appliedTransformations=4)}function E(){}function C(R){this._addDynamicProperty(R),this.elem.addDynamicProperty(R),this._isDirty=!0}function _(R,I,L){if(this.elem=R,this.frameId=-1,this.propType="transform",this.data=I,this.v=new Matrix,this.pre=new Matrix,this.appliedTransformations=0,this.initDynamicPropertyContainer(L||R),I.p&&I.p.s?(this.px=PropertyFactory.getProp(R,I.p.x,0,0,this),this.py=PropertyFactory.getProp(R,I.p.y,0,0,this),I.p.z&&(this.pz=PropertyFactory.getProp(R,I.p.z,0,0,this))):this.p=PropertyFactory.getProp(R,I.p||{k:[0,0,0]},1,0,this),I.rx){if(this.rx=PropertyFactory.getProp(R,I.rx,0,degToRads,this),this.ry=PropertyFactory.getProp(R,I.ry,0,degToRads,this),this.rz=PropertyFactory.getProp(R,I.rz,0,degToRads,this),I.or.k[0].ti){var j,M=I.or.k.length;for(j=0;j<M;j+=1)I.or.k[j].to=null,I.or.k[j].ti=null}this.or=PropertyFactory.getProp(R,I.or,1,degToRads,this),this.or.sh=!0}else this.r=PropertyFactory.getProp(R,I.r||{k:0},0,degToRads,this);I.sk&&(this.sk=PropertyFactory.getProp(R,I.sk,0,degToRads,this),this.sa=PropertyFactory.getProp(R,I.sa,0,degToRads,this)),this.a=PropertyFactory.getProp(R,I.a||{k:[0,0,0]},1,0,this),this.s=PropertyFactory.getProp(R,I.s||{k:[100,100,100]},1,.01,this),I.o?this.o=PropertyFactory.getProp(R,I.o,0,.01,R):this.o={_mdf:!1,v:1},this._isDirty=!0,this.dynamicProperties.length||this.getValue(!0)}_.prototype={applyToMatrix:u,getValue:T,precalculateMatrix:S,autoOrient:E},extendPrototype([DynamicPropertyContainer],_),_.prototype.addDynamicProperty=C,_.prototype._addDynamicProperty=DynamicPropertyContainer.prototype.addDynamicProperty;function P(R,I,L){return new _(R,I,L)}return{getTransformProperty:P}}();function RepeaterModifier(){}extendPrototype([ShapeModifier],RepeaterModifier),RepeaterModifier.prototype.initModifierProperties=function(o,u){this.getValue=this.processKeys,this.c=PropertyFactory.getProp(o,u.c,0,null,this),this.o=PropertyFactory.getProp(o,u.o,0,null,this),this.tr=TransformPropertyFactory.getTransformProperty(o,u.tr,this),this.so=PropertyFactory.getProp(o,u.tr.so,0,.01,this),this.eo=PropertyFactory.getProp(o,u.tr.eo,0,.01,this),this.data=u,this.dynamicProperties.length||this.getValue(!0),this._isAnimated=!!this.dynamicProperties.length,this.pMatrix=new Matrix,this.rMatrix=new Matrix,this.sMatrix=new Matrix,this.tMatrix=new Matrix,this.matrix=new Matrix},RepeaterModifier.prototype.applyTransforms=function(o,u,T,S,E,C){var _=C?-1:1,P=S.s.v[0]+(1-S.s.v[0])*(1-E),R=S.s.v[1]+(1-S.s.v[1])*(1-E);o.translate(S.p.v[0]*_*E,S.p.v[1]*_*E,S.p.v[2]),u.translate(-S.a.v[0],-S.a.v[1],S.a.v[2]),u.rotate(-S.r.v*_*E),u.translate(S.a.v[0],S.a.v[1],S.a.v[2]),T.translate(-S.a.v[0],-S.a.v[1],S.a.v[2]),T.scale(C?1/P:P,C?1/R:R),T.translate(S.a.v[0],S.a.v[1],S.a.v[2])},RepeaterModifier.prototype.init=function(o,u,T,S){for(this.elem=o,this.arr=u,this.pos=T,this.elemsData=S,this._currentCopies=0,this._elements=[],this._groups=[],this.frameId=-1,this.initDynamicPropertyContainer(o),this.initModifierProperties(o,u[T]);T>0;)T-=1,this._elements.unshift(u[T]);this.dynamicProperties.length?this.k=!0:this.getValue(!0)},RepeaterModifier.prototype.resetElements=function(o){var u,T=o.length;for(u=0;u<T;u+=1)o[u]._processed=!1,o[u].ty==="gr"&&this.resetElements(o[u].it)},RepeaterModifier.prototype.cloneElements=function(o){var u=JSON.parse(JSON.stringify(o));return this.resetElements(u),u},RepeaterModifier.prototype.changeGroupRender=function(o,u){var T,S=o.length;for(T=0;T<S;T+=1)o[T]._render=u,o[T].ty==="gr"&&this.changeGroupRender(o[T].it,u)},RepeaterModifier.prototype.processShapes=function(o){var u,T,S,E,C,_=!1;if(this._mdf||o){var P=Math.ceil(this.c.v);if(this._groups.length<P){for(;this._groups.length<P;){var R={it:this.cloneElements(this._elements),ty:"gr"};R.it.push({a:{a:0,ix:1,k:[0,0]},nm:"Transform",o:{a:0,ix:7,k:100},p:{a:0,ix:2,k:[0,0]},r:{a:1,ix:6,k:[{s:0,e:0,t:0},{s:0,e:0,t:1}]},s:{a:0,ix:3,k:[100,100]},sa:{a:0,ix:5,k:0},sk:{a:0,ix:4,k:0},ty:"tr"}),this.arr.splice(0,0,R),this._groups.splice(0,0,R),this._currentCopies+=1}this.elem.reloadShapes(),_=!0}C=0;var I;for(S=0;S<=this._groups.length-1;S+=1){if(I=C<P,this._groups[S]._render=I,this.changeGroupRender(this._groups[S].it,I),!I){var L=this.elemsData[S].it,j=L[L.length-1];j.transform.op.v!==0?(j.transform.op._mdf=!0,j.transform.op.v=0):j.transform.op._mdf=!1}C+=1}this._currentCopies=P;var M=this.o.v,D=M%1,F=M>0?Math.floor(M):Math.ceil(M),N=this.pMatrix.props,G=this.rMatrix.props,B=this.sMatrix.props;this.pMatrix.reset(),this.rMatrix.reset(),this.sMatrix.reset(),this.tMatrix.reset(),this.matrix.reset();var H=0;if(M>0){for(;H<F;)this.applyTransforms(this.pMatrix,this.rMatrix,this.sMatrix,this.tr,1,!1),H+=1;D&&(this.applyTransforms(this.pMatrix,this.rMatrix,this.sMatrix,this.tr,D,!1),H+=D)}else if(M<0){for(;H>F;)this.applyTransforms(this.pMatrix,this.rMatrix,this.sMatrix,this.tr,1,!0),H-=1;D&&(this.applyTransforms(this.pMatrix,this.rMatrix,this.sMatrix,this.tr,-D,!0),H-=D)}S=this.data.m===1?0:this._currentCopies-1,E=this.data.m===1?1:-1,C=this._currentCopies;for(var O,V;C;){if(u=this.elemsData[S].it,T=u[u.length-1].transform.mProps.v.props,V=T.length,u[u.length-1].transform.mProps._mdf=!0,u[u.length-1].transform.op._mdf=!0,u[u.length-1].transform.op.v=this._currentCopies===1?this.so.v:this.so.v+(this.eo.v-this.so.v)*(S/(this._currentCopies-1)),H!==0){for((S!==0&&E===1||S!==this._currentCopies-1&&E===-1)&&this.applyTransforms(this.pMatrix,this.rMatrix,this.sMatrix,this.tr,1,!1),this.matrix.transform(G[0],G[1],G[2],G[3],G[4],G[5],G[6],G[7],G[8],G[9],G[10],G[11],G[12],G[13],G[14],G[15]),this.matrix.transform(B[0],B[1],B[2],B[3],B[4],B[5],B[6],B[7],B[8],B[9],B[10],B[11],B[12],B[13],B[14],B[15]),this.matrix.transform(N[0],N[1],N[2],N[3],N[4],N[5],N[6],N[7],N[8],N[9],N[10],N[11],N[12],N[13],N[14],N[15]),O=0;O<V;O+=1)T[O]=this.matrix.props[O];this.matrix.reset()}else for(this.matrix.reset(),O=0;O<V;O+=1)T[O]=this.matrix.props[O];H+=1,C-=1,S+=E}}else for(C=this._currentCopies,S=0,E=1;C;)u=this.elemsData[S].it,T=u[u.length-1].transform.mProps.v.props,u[u.length-1].transform.mProps._mdf=!1,u[u.length-1].transform.op._mdf=!1,C-=1,S+=E;return _},RepeaterModifier.prototype.addShape=function(){};function RoundCornersModifier(){}extendPrototype([ShapeModifier],RoundCornersModifier),RoundCornersModifier.prototype.initModifierProperties=function(o,u){this.getValue=this.processKeys,this.rd=PropertyFactory.getProp(o,u.r,0,null,this),this._isAnimated=!!this.rd.effectsSequence.length},RoundCornersModifier.prototype.processPath=function(o,u){var T=shapePool.newElement();T.c=o.c;var S,E=o._length,C,_,P,R,I,L,j=0,M,D,F,N,G,B;for(S=0;S<E;S+=1)C=o.v[S],P=o.o[S],_=o.i[S],C[0]===P[0]&&C[1]===P[1]&&C[0]===_[0]&&C[1]===_[1]?(S===0||S===E-1)&&!o.c?(T.setTripleAt(C[0],C[1],P[0],P[1],_[0],_[1],j),j+=1):(S===0?R=o.v[E-1]:R=o.v[S-1],I=Math.sqrt(Math.pow(C[0]-R[0],2)+Math.pow(C[1]-R[1],2)),L=I?Math.min(I/2,u)/I:0,G=C[0]+(R[0]-C[0])*L,M=G,B=C[1]-(C[1]-R[1])*L,D=B,F=M-(M-C[0])*roundCorner,N=D-(D-C[1])*roundCorner,T.setTripleAt(M,D,F,N,G,B,j),j+=1,S===E-1?R=o.v[0]:R=o.v[S+1],I=Math.sqrt(Math.pow(C[0]-R[0],2)+Math.pow(C[1]-R[1],2)),L=I?Math.min(I/2,u)/I:0,F=C[0]+(R[0]-C[0])*L,M=F,N=C[1]+(R[1]-C[1])*L,D=N,G=M-(M-C[0])*roundCorner,B=D-(D-C[1])*roundCorner,T.setTripleAt(M,D,F,N,G,B,j),j+=1):(T.setTripleAt(o.v[S][0],o.v[S][1],o.o[S][0],o.o[S][1],o.i[S][0],o.i[S][1],j),j+=1);return T},RoundCornersModifier.prototype.processShapes=function(o){var u,T,S=this.shapes.length,E,C,_=this.rd.v;if(_!==0){var P,R;for(T=0;T<S;T+=1){if(P=this.shapes[T],R=P.localShapeCollection,!(!P.shape._mdf&&!this._mdf&&!o))for(R.releaseShapes(),P.shape._mdf=!0,u=P.shape.paths.shapes,C=P.shape.paths._length,E=0;E<C;E+=1)R.addShape(this.processPath(u[E],_));P.shape.paths=P.localShapeCollection}}this.dynamicProperties.length||(this._mdf=!1)};function floatEqual(o,u){return Math.abs(o-u)*1e5<=Math.min(Math.abs(o),Math.abs(u))}function floatZero(o){return Math.abs(o)<=1e-5}function lerp(o,u,T){return o*(1-T)+u*T}function lerpPoint(o,u,T){return[lerp(o[0],u[0],T),lerp(o[1],u[1],T)]}function quadRoots(o,u,T){if(o===0)return[];var S=u*u-4*o*T;if(S<0)return[];var E=-u/(2*o);if(S===0)return[E];var C=Math.sqrt(S)/(2*o);return[E-C,E+C]}function polynomialCoefficients(o,u,T,S){return[-o+3*u-3*T+S,3*o-6*u+3*T,-3*o+3*u,o]}function singlePoint(o){return new PolynomialBezier(o,o,o,o,!1)}function PolynomialBezier(o,u,T,S,E){E&&pointEqual(o,u)&&(u=lerpPoint(o,S,1/3)),E&&pointEqual(T,S)&&(T=lerpPoint(o,S,2/3));var C=polynomialCoefficients(o[0],u[0],T[0],S[0]),_=polynomialCoefficients(o[1],u[1],T[1],S[1]);this.a=[C[0],_[0]],this.b=[C[1],_[1]],this.c=[C[2],_[2]],this.d=[C[3],_[3]],this.points=[o,u,T,S]}PolynomialBezier.prototype.point=function(o){return[((this.a[0]*o+this.b[0])*o+this.c[0])*o+this.d[0],((this.a[1]*o+this.b[1])*o+this.c[1])*o+this.d[1]]},PolynomialBezier.prototype.derivative=function(o){return[(3*o*this.a[0]+2*this.b[0])*o+this.c[0],(3*o*this.a[1]+2*this.b[1])*o+this.c[1]]},PolynomialBezier.prototype.tangentAngle=function(o){var u=this.derivative(o);return Math.atan2(u[1],u[0])},PolynomialBezier.prototype.normalAngle=function(o){var u=this.derivative(o);return Math.atan2(u[0],u[1])},PolynomialBezier.prototype.inflectionPoints=function(){var o=this.a[1]*this.b[0]-this.a[0]*this.b[1];if(floatZero(o))return[];var u=-.5*(this.a[1]*this.c[0]-this.a[0]*this.c[1])/o,T=u*u-1/3*(this.b[1]*this.c[0]-this.b[0]*this.c[1])/o;if(T<0)return[];var S=Math.sqrt(T);return floatZero(S)?S>0&&S<1?[u]:[]:[u-S,u+S].filter(function(E){return E>0&&E<1})},PolynomialBezier.prototype.split=function(o){if(o<=0)return[singlePoint(this.points[0]),this];if(o>=1)return[this,singlePoint(this.points[this.points.length-1])];var u=lerpPoint(this.points[0],this.points[1],o),T=lerpPoint(this.points[1],this.points[2],o),S=lerpPoint(this.points[2],this.points[3],o),E=lerpPoint(u,T,o),C=lerpPoint(T,S,o),_=lerpPoint(E,C,o);return[new PolynomialBezier(this.points[0],u,E,_,!0),new PolynomialBezier(_,C,S,this.points[3],!0)]};function extrema(o,u){var T=o.points[0][u],S=o.points[o.points.length-1][u];if(T>S){var E=S;S=T,T=E}for(var C=quadRoots(3*o.a[u],2*o.b[u],o.c[u]),_=0;_<C.length;_+=1)if(C[_]>0&&C[_]<1){var P=o.point(C[_])[u];P<T?T=P:P>S&&(S=P)}return{min:T,max:S}}PolynomialBezier.prototype.bounds=function(){return{x:extrema(this,0),y:extrema(this,1)}},PolynomialBezier.prototype.boundingBox=function(){var o=this.bounds();return{left:o.x.min,right:o.x.max,top:o.y.min,bottom:o.y.max,width:o.x.max-o.x.min,height:o.y.max-o.y.min,cx:(o.x.max+o.x.min)/2,cy:(o.y.max+o.y.min)/2}};function intersectData(o,u,T){var S=o.boundingBox();return{cx:S.cx,cy:S.cy,width:S.width,height:S.height,bez:o,t:(u+T)/2,t1:u,t2:T}}function splitData(o){var u=o.bez.split(.5);return[intersectData(u[0],o.t1,o.t),intersectData(u[1],o.t,o.t2)]}function boxIntersect(o,u){return Math.abs(o.cx-u.cx)*2<o.width+u.width&&Math.abs(o.cy-u.cy)*2<o.height+u.height}function intersectsImpl(o,u,T,S,E,C){if(boxIntersect(o,u)){if(T>=C||o.width<=S&&o.height<=S&&u.width<=S&&u.height<=S){E.push([o.t,u.t]);return}var _=splitData(o),P=splitData(u);intersectsImpl(_[0],P[0],T+1,S,E,C),intersectsImpl(_[0],P[1],T+1,S,E,C),intersectsImpl(_[1],P[0],T+1,S,E,C),intersectsImpl(_[1],P[1],T+1,S,E,C)}}PolynomialBezier.prototype.intersections=function(o,u,T){u===void 0&&(u=2),T===void 0&&(T=7);var S=[];return intersectsImpl(intersectData(this,0,1),intersectData(o,0,1),0,u,S,T),S},PolynomialBezier.shapeSegment=function(o,u){var T=(u+1)%o.length();return new PolynomialBezier(o.v[u],o.o[u],o.i[T],o.v[T],!0)},PolynomialBezier.shapeSegmentInverted=function(o,u){var T=(u+1)%o.length();return new PolynomialBezier(o.v[T],o.i[T],o.o[u],o.v[u],!0)};function crossProduct(o,u){return[o[1]*u[2]-o[2]*u[1],o[2]*u[0]-o[0]*u[2],o[0]*u[1]-o[1]*u[0]]}function lineIntersection(o,u,T,S){var E=[o[0],o[1],1],C=[u[0],u[1],1],_=[T[0],T[1],1],P=[S[0],S[1],1],R=crossProduct(crossProduct(E,C),crossProduct(_,P));return floatZero(R[2])?null:[R[0]/R[2],R[1]/R[2]]}function polarOffset(o,u,T){return[o[0]+Math.cos(u)*T,o[1]-Math.sin(u)*T]}function pointDistance(o,u){return Math.hypot(o[0]-u[0],o[1]-u[1])}function pointEqual(o,u){return floatEqual(o[0],u[0])&&floatEqual(o[1],u[1])}function ZigZagModifier(){}extendPrototype([ShapeModifier],ZigZagModifier),ZigZagModifier.prototype.initModifierProperties=function(o,u){this.getValue=this.processKeys,this.amplitude=PropertyFactory.getProp(o,u.s,0,null,this),this.frequency=PropertyFactory.getProp(o,u.r,0,null,this),this.pointsType=PropertyFactory.getProp(o,u.pt,0,null,this),this._isAnimated=this.amplitude.effectsSequence.length!==0||this.frequency.effectsSequence.length!==0||this.pointsType.effectsSequence.length!==0};function setPoint(o,u,T,S,E,C,_){var P=T-Math.PI/2,R=T+Math.PI/2,I=u[0]+Math.cos(T)*S*E,L=u[1]-Math.sin(T)*S*E;o.setTripleAt(I,L,I+Math.cos(P)*C,L-Math.sin(P)*C,I+Math.cos(R)*_,L-Math.sin(R)*_,o.length())}function getPerpendicularVector(o,u){var T=[u[0]-o[0],u[1]-o[1]],S=-Math.PI*.5,E=[Math.cos(S)*T[0]-Math.sin(S)*T[1],Math.sin(S)*T[0]+Math.cos(S)*T[1]];return E}function getProjectingAngle(o,u){var T=u===0?o.length()-1:u-1,S=(u+1)%o.length(),E=o.v[T],C=o.v[S],_=getPerpendicularVector(E,C);return Math.atan2(0,1)-Math.atan2(_[1],_[0])}function zigZagCorner(o,u,T,S,E,C,_){var P=getProjectingAngle(u,T),R=u.v[T%u._length],I=u.v[T===0?u._length-1:T-1],L=u.v[(T+1)%u._length],j=C===2?Math.sqrt(Math.pow(R[0]-I[0],2)+Math.pow(R[1]-I[1],2)):0,M=C===2?Math.sqrt(Math.pow(R[0]-L[0],2)+Math.pow(R[1]-L[1],2)):0;setPoint(o,u.v[T%u._length],P,_,S,M/((E+1)*2),j/((E+1)*2))}function zigZagSegment(o,u,T,S,E,C){for(var _=0;_<S;_+=1){var P=(_+1)/(S+1),R=E===2?Math.sqrt(Math.pow(u.points[3][0]-u.points[0][0],2)+Math.pow(u.points[3][1]-u.points[0][1],2)):0,I=u.normalAngle(P),L=u.point(P);setPoint(o,L,I,C,T,R/((S+1)*2),R/((S+1)*2)),C=-C}return C}ZigZagModifier.prototype.processPath=function(o,u,T,S){var E=o._length,C=shapePool.newElement();if(C.c=o.c,o.c||(E-=1),E===0)return C;var _=-1,P=PolynomialBezier.shapeSegment(o,0);zigZagCorner(C,o,0,u,T,S,_);for(var R=0;R<E;R+=1)_=zigZagSegment(C,P,u,T,S,-_),R===E-1&&!o.c?P=null:P=PolynomialBezier.shapeSegment(o,(R+1)%E),zigZagCorner(C,o,R+1,u,T,S,_);return C},ZigZagModifier.prototype.processShapes=function(o){var u,T,S=this.shapes.length,E,C,_=this.amplitude.v,P=Math.max(0,Math.round(this.frequency.v)),R=this.pointsType.v;if(_!==0){var I,L;for(T=0;T<S;T+=1){if(I=this.shapes[T],L=I.localShapeCollection,!(!I.shape._mdf&&!this._mdf&&!o))for(L.releaseShapes(),I.shape._mdf=!0,u=I.shape.paths.shapes,C=I.shape.paths._length,E=0;E<C;E+=1)L.addShape(this.processPath(u[E],_,P,R));I.shape.paths=I.localShapeCollection}}this.dynamicProperties.length||(this._mdf=!1)};function linearOffset(o,u,T){var S=Math.atan2(u[0]-o[0],u[1]-o[1]);return[polarOffset(o,S,T),polarOffset(u,S,T)]}function offsetSegment(o,u){var T,S,E,C,_,P,R;R=linearOffset(o.points[0],o.points[1],u),T=R[0],S=R[1],R=linearOffset(o.points[1],o.points[2],u),E=R[0],C=R[1],R=linearOffset(o.points[2],o.points[3],u),_=R[0],P=R[1];var I=lineIntersection(T,S,E,C);I===null&&(I=S);var L=lineIntersection(_,P,E,C);return L===null&&(L=_),new PolynomialBezier(T,I,L,P)}function joinLines(o,u,T,S,E){var C=u.points[3],_=T.points[0];if(S===3||pointEqual(C,_))return C;if(S===2){var P=-u.tangentAngle(1),R=-T.tangentAngle(0)+Math.PI,I=lineIntersection(C,polarOffset(C,P+Math.PI/2,100),_,polarOffset(_,P+Math.PI/2,100)),L=I?pointDistance(I,C):pointDistance(C,_)/2,j=polarOffset(C,P,2*L*roundCorner);return o.setXYAt(j[0],j[1],"o",o.length()-1),j=polarOffset(_,R,2*L*roundCorner),o.setTripleAt(_[0],_[1],_[0],_[1],j[0],j[1],o.length()),_}var M=pointEqual(C,u.points[2])?u.points[0]:u.points[2],D=pointEqual(_,T.points[1])?T.points[3]:T.points[1],F=lineIntersection(M,C,_,D);return F&&pointDistance(F,C)<E?(o.setTripleAt(F[0],F[1],F[0],F[1],F[0],F[1],o.length()),F):C}function getIntersection(o,u){var T=o.intersections(u);return T.length&&floatEqual(T[0][0],1)&&T.shift(),T.length?T[0]:null}function pruneSegmentIntersection(o,u){var T=o.slice(),S=u.slice(),E=getIntersection(o[o.length-1],u[0]);return E&&(T[o.length-1]=o[o.length-1].split(E[0])[0],S[0]=u[0].split(E[1])[1]),o.length>1&&u.length>1&&(E=getIntersection(o[0],u[u.length-1]),E)?[[o[0].split(E[0])[0]],[u[u.length-1].split(E[1])[1]]]:[T,S]}function pruneIntersections(o){for(var u,T=1;T<o.length;T+=1)u=pruneSegmentIntersection(o[T-1],o[T]),o[T-1]=u[0],o[T]=u[1];return o.length>1&&(u=pruneSegmentIntersection(o[o.length-1],o[0]),o[o.length-1]=u[0],o[0]=u[1]),o}function offsetSegmentSplit(o,u){var T=o.inflectionPoints(),S,E,C,_;if(T.length===0)return[offsetSegment(o,u)];if(T.length===1||floatEqual(T[1],1))return C=o.split(T[0]),S=C[0],E=C[1],[offsetSegment(S,u),offsetSegment(E,u)];C=o.split(T[0]),S=C[0];var P=(T[1]-T[0])/(1-T[0]);return C=C[1].split(P),_=C[0],E=C[1],[offsetSegment(S,u),offsetSegment(_,u),offsetSegment(E,u)]}function OffsetPathModifier(){}extendPrototype([ShapeModifier],OffsetPathModifier),OffsetPathModifier.prototype.initModifierProperties=function(o,u){this.getValue=this.processKeys,this.amount=PropertyFactory.getProp(o,u.a,0,null,this),this.miterLimit=PropertyFactory.getProp(o,u.ml,0,null,this),this.lineJoin=u.lj,this._isAnimated=this.amount.effectsSequence.length!==0},OffsetPathModifier.prototype.processPath=function(o,u,T,S){var E=shapePool.newElement();E.c=o.c;var C=o.length();o.c||(C-=1);var _,P,R,I=[];for(_=0;_<C;_+=1)R=PolynomialBezier.shapeSegment(o,_),I.push(offsetSegmentSplit(R,u));if(!o.c)for(_=C-1;_>=0;_-=1)R=PolynomialBezier.shapeSegmentInverted(o,_),I.push(offsetSegmentSplit(R,u));I=pruneIntersections(I);var L=null,j=null;for(_=0;_<I.length;_+=1){var M=I[_];for(j&&(L=joinLines(E,j,M[0],T,S)),j=M[M.length-1],P=0;P<M.length;P+=1)R=M[P],L&&pointEqual(R.points[0],L)?E.setXYAt(R.points[1][0],R.points[1][1],"o",E.length()-1):E.setTripleAt(R.points[0][0],R.points[0][1],R.points[1][0],R.points[1][1],R.points[0][0],R.points[0][1],E.length()),E.setTripleAt(R.points[3][0],R.points[3][1],R.points[3][0],R.points[3][1],R.points[2][0],R.points[2][1],E.length()),L=R.points[3]}return I.length&&joinLines(E,j,I[0][0],T,S),E},OffsetPathModifier.prototype.processShapes=function(o){var u,T,S=this.shapes.length,E,C,_=this.amount.v,P=this.miterLimit.v,R=this.lineJoin;if(_!==0){var I,L;for(T=0;T<S;T+=1){if(I=this.shapes[T],L=I.localShapeCollection,!(!I.shape._mdf&&!this._mdf&&!o))for(L.releaseShapes(),I.shape._mdf=!0,u=I.shape.paths.shapes,C=I.shape.paths._length,E=0;E<C;E+=1)L.addShape(this.processPath(u[E],_,R,P));I.shape.paths=I.localShapeCollection}}this.dynamicProperties.length||(this._mdf=!1)};function getFontProperties(o){for(var u=o.fStyle?o.fStyle.split(" "):[],T="normal",S="normal",E=u.length,C,_=0;_<E;_+=1)switch(C=u[_].toLowerCase(),C){case"italic":S="italic";break;case"bold":T="700";break;case"black":T="900";break;case"medium":T="500";break;case"regular":case"normal":T="400";break;case"light":case"thin":T="200";break}return{style:S,weight:o.fWeight||T}}var FontManager=function(){var o=5e3,u={w:0,size:0,shapes:[],data:{shapes:[]}},T=[];T=T.concat([2304,2305,2306,2307,2362,2363,2364,2364,2366,2367,2368,2369,2370,2371,2372,2373,2374,2375,2376,2377,2378,2379,2380,2381,2382,2383,2387,2388,2389,2390,2391,2402,2403]);var S=127988,E=917631,C=917601,_=917626,P=65039,R=8205,I=127462,L=127487,j=["d83cdffb","d83cdffc","d83cdffd","d83cdffe","d83cdfff"];function M(J){var te=J.split(","),Z,X=te.length,de=[];for(Z=0;Z<X;Z+=1)te[Z]!=="sans-serif"&&te[Z]!=="monospace"&&de.push(te[Z]);return de.join(",")}function D(J,te){var Z=createTag("span");Z.setAttribute("aria-hidden",!0),Z.style.fontFamily=te;var X=createTag("span");X.innerText="giItT1WQy@!-/#",Z.style.position="absolute",Z.style.left="-10000px",Z.style.top="-10000px",Z.style.fontSize="300px",Z.style.fontVariant="normal",Z.style.fontStyle="normal",Z.style.fontWeight="normal",Z.style.letterSpacing="0",Z.appendChild(X),document.body.appendChild(Z);var de=X.offsetWidth;return X.style.fontFamily=M(J)+", "+te,{node:X,w:de,parent:Z}}function F(){var J,te=this.fonts.length,Z,X,de=te;for(J=0;J<te;J+=1)this.fonts[J].loaded?de-=1:this.fonts[J].fOrigin==="n"||this.fonts[J].origin===0?this.fonts[J].loaded=!0:(Z=this.fonts[J].monoCase.node,X=this.fonts[J].monoCase.w,Z.offsetWidth!==X?(de-=1,this.fonts[J].loaded=!0):(Z=this.fonts[J].sansCase.node,X=this.fonts[J].sansCase.w,Z.offsetWidth!==X&&(de-=1,this.fonts[J].loaded=!0)),this.fonts[J].loaded&&(this.fonts[J].sansCase.parent.parentNode.removeChild(this.fonts[J].sansCase.parent),this.fonts[J].monoCase.parent.parentNode.removeChild(this.fonts[J].monoCase.parent)));de!==0&&Date.now()-this.initTime<o?setTimeout(this.checkLoadedFontsBinded,20):setTimeout(this.setIsLoadedBinded,10)}function N(J,te){var Z=document.body&&te?"svg":"canvas",X,de=getFontProperties(J);if(Z==="svg"){var he=createNS("text");he.style.fontSize="100px",he.setAttribute("font-family",J.fFamily),he.setAttribute("font-style",de.style),he.setAttribute("font-weight",de.weight),he.textContent="1",J.fClass?(he.style.fontFamily="inherit",he.setAttribute("class",J.fClass)):he.style.fontFamily=J.fFamily,te.appendChild(he),X=he}else{var ne=new OffscreenCanvas(500,500).getContext("2d");ne.font=de.style+" "+de.weight+" 100px "+J.fFamily,X=ne}function ue(ce){return Z==="svg"?(X.textContent=ce,X.getComputedTextLength()):X.measureText(ce).width}return{measureText:ue}}function G(J,te){if(!J){this.isLoaded=!0;return}if(this.chars){this.isLoaded=!0,this.fonts=J.list;return}if(!document.body){this.isLoaded=!0,J.list.forEach(function(Se){Se.helper=N(Se),Se.cache={}}),this.fonts=J.list;return}var Z=J.list,X,de=Z.length,he=de;for(X=0;X<de;X+=1){var ne=!0,ue,ce;if(Z[X].loaded=!1,Z[X].monoCase=D(Z[X].fFamily,"monospace"),Z[X].sansCase=D(Z[X].fFamily,"sans-serif"),!Z[X].fPath)Z[X].loaded=!0,he-=1;else if(Z[X].fOrigin==="p"||Z[X].origin===3){if(ue=document.querySelectorAll('style[f-forigin="p"][f-family="'+Z[X].fFamily+'"], style[f-origin="3"][f-family="'+Z[X].fFamily+'"]'),ue.length>0&&(ne=!1),ne){var fe=createTag("style");fe.setAttribute("f-forigin",Z[X].fOrigin),fe.setAttribute("f-origin",Z[X].origin),fe.setAttribute("f-family",Z[X].fFamily),fe.type="text/css",fe.innerText="@font-face {font-family: "+Z[X].fFamily+"; font-style: normal; src: url('"+Z[X].fPath+"');}",te.appendChild(fe)}}else if(Z[X].fOrigin==="g"||Z[X].origin===1){for(ue=document.querySelectorAll('link[f-forigin="g"], link[f-origin="1"]'),ce=0;ce<ue.length;ce+=1)ue[ce].href.indexOf(Z[X].fPath)!==-1&&(ne=!1);if(ne){var ve=createTag("link");ve.setAttribute("f-forigin",Z[X].fOrigin),ve.setAttribute("f-origin",Z[X].origin),ve.type="text/css",ve.rel="stylesheet",ve.href=Z[X].fPath,document.body.appendChild(ve)}}else if(Z[X].fOrigin==="t"||Z[X].origin===2){for(ue=document.querySelectorAll('script[f-forigin="t"], script[f-origin="2"]'),ce=0;ce<ue.length;ce+=1)Z[X].fPath===ue[ce].src&&(ne=!1);if(ne){var Te=createTag("link");Te.setAttribute("f-forigin",Z[X].fOrigin),Te.setAttribute("f-origin",Z[X].origin),Te.setAttribute("rel","stylesheet"),Te.setAttribute("href",Z[X].fPath),te.appendChild(Te)}}Z[X].helper=N(Z[X],te),Z[X].cache={},this.fonts.push(Z[X])}he===0?this.isLoaded=!0:setTimeout(this.checkLoadedFonts.bind(this),100)}function B(J){if(J){this.chars||(this.chars=[]);var te,Z=J.length,X,de=this.chars.length,he;for(te=0;te<Z;te+=1){for(X=0,he=!1;X<de;)this.chars[X].style===J[te].style&&this.chars[X].fFamily===J[te].fFamily&&this.chars[X].ch===J[te].ch&&(he=!0),X+=1;he||(this.chars.push(J[te]),de+=1)}}}function H(J,te,Z){for(var X=0,de=this.chars.length;X<de;){if(this.chars[X].ch===J&&this.chars[X].style===te&&this.chars[X].fFamily===Z)return this.chars[X];X+=1}return(typeof J=="string"&&J.charCodeAt(0)!==13||!J)&&console&&console.warn&&!this._warned&&(this._warned=!0,console.warn("Missing character from exported characters list: ",J,te,Z)),u}function O(J,te,Z){var X=this.getFontByName(te),de=J;if(!X.cache[de]){var he=X.helper;if(J===" "){var ne=he.measureText("|"+J+"|"),ue=he.measureText("||");X.cache[de]=(ne-ue)/100}else X.cache[de]=he.measureText(J)/100}return X.cache[de]*Z}function V(J){for(var te=0,Z=this.fonts.length;te<Z;){if(this.fonts[te].fName===J)return this.fonts[te];te+=1}return this.fonts[0]}function U(J){var te=0,Z=J.charCodeAt(0);if(Z>=55296&&Z<=56319){var X=J.charCodeAt(1);X>=56320&&X<=57343&&(te=(Z-55296)*1024+X-56320+65536)}return te}function W(J,te){var Z=J.toString(16)+te.toString(16);return j.indexOf(Z)!==-1}function K(J){return J===R}function Y(J){return J===P}function ee(J){var te=U(J);return te>=I&&te<=L}function oe(J){return ee(J.substr(0,2))&&ee(J.substr(2,2))}function se(J){return T.indexOf(J)!==-1}function Q(J,te){var Z=U(J.substr(te,2));if(Z!==S)return!1;var X=0;for(te+=2;X<5;){if(Z=U(J.substr(te,2)),Z<C||Z>_)return!1;X+=1,te+=2}return U(J.substr(te,2))===E}function ie(){this.isLoaded=!0}var ae=function(){this.fonts=[],this.chars=null,this.typekitLoaded=0,this.isLoaded=!1,this._warned=!1,this.initTime=Date.now(),this.setIsLoadedBinded=this.setIsLoaded.bind(this),this.checkLoadedFontsBinded=this.checkLoadedFonts.bind(this)};ae.isModifier=W,ae.isZeroWidthJoiner=K,ae.isFlagEmoji=oe,ae.isRegionalCode=ee,ae.isCombinedCharacter=se,ae.isRegionalFlag=Q,ae.isVariationSelector=Y,ae.BLACK_FLAG_CODE_POINT=S;var re={addChars:B,addFonts:G,getCharData:H,getFontByName:V,measureText:O,checkLoadedFonts:F,setIsLoaded:ie};return ae.prototype=re,ae}();function SlotManager(o){this.animationData=o}SlotManager.prototype.getProp=function(o){return this.animationData.slots&&this.animationData.slots[o.sid]?Object.assign(o,this.animationData.slots[o.sid].p):o};function slotFactory(o){return new SlotManager(o)}function RenderableElement(){}RenderableElement.prototype={initRenderable:function(){this.isInRange=!1,this.hidden=!1,this.isTransparent=!1,this.renderableComponents=[]},addRenderableComponent:function(u){this.renderableComponents.indexOf(u)===-1&&this.renderableComponents.push(u)},removeRenderableComponent:function(u){this.renderableComponents.indexOf(u)!==-1&&this.renderableComponents.splice(this.renderableComponents.indexOf(u),1)},prepareRenderableFrame:function(u){this.checkLayerLimits(u)},checkTransparency:function(){this.finalTransform.mProp.o.v<=0?!this.isTransparent&&this.globalData.renderConfig.hideOnTransparent&&(this.isTransparent=!0,this.hide()):this.isTransparent&&(this.isTransparent=!1,this.show())},checkLayerLimits:function(u){this.data.ip-this.data.st<=u&&this.data.op-this.data.st>u?this.isInRange!==!0&&(this.globalData._mdf=!0,this._mdf=!0,this.isInRange=!0,this.show()):this.isInRange!==!1&&(this.globalData._mdf=!0,this.isInRange=!1,this.hide())},renderRenderable:function(){var u,T=this.renderableComponents.length;for(u=0;u<T;u+=1)this.renderableComponents[u].renderFrame(this._isFirstFrame)},sourceRectAtTime:function(){return{top:0,left:0,width:100,height:100}},getLayerSize:function(){return this.data.ty===5?{w:this.data.textData.width,h:this.data.textData.height}:{w:this.data.width,h:this.data.height}}};var getBlendMode=function(){var o={0:"source-over",1:"multiply",2:"screen",3:"overlay",4:"darken",5:"lighten",6:"color-dodge",7:"color-burn",8:"hard-light",9:"soft-light",10:"difference",11:"exclusion",12:"hue",13:"saturation",14:"color",15:"luminosity"};return function(u){return o[u]||""}}();function SliderEffect(o,u,T){this.p=PropertyFactory.getProp(u,o.v,0,0,T)}function AngleEffect(o,u,T){this.p=PropertyFactory.getProp(u,o.v,0,0,T)}function ColorEffect(o,u,T){this.p=PropertyFactory.getProp(u,o.v,1,0,T)}function PointEffect(o,u,T){this.p=PropertyFactory.getProp(u,o.v,1,0,T)}function LayerIndexEffect(o,u,T){this.p=PropertyFactory.getProp(u,o.v,0,0,T)}function MaskIndexEffect(o,u,T){this.p=PropertyFactory.getProp(u,o.v,0,0,T)}function CheckboxEffect(o,u,T){this.p=PropertyFactory.getProp(u,o.v,0,0,T)}function NoValueEffect(){this.p={}}function EffectsManager(o,u){var T=o.ef||[];this.effectElements=[];var S,E=T.length,C;for(S=0;S<E;S+=1)C=new GroupEffect(T[S],u),this.effectElements.push(C)}function GroupEffect(o,u){this.init(o,u)}extendPrototype([DynamicPropertyContainer],GroupEffect),GroupEffect.prototype.getValue=GroupEffect.prototype.iterateDynamicProperties,GroupEffect.prototype.init=function(o,u){this.data=o,this.effectElements=[],this.initDynamicPropertyContainer(u);var T,S=this.data.ef.length,E,C=this.data.ef;for(T=0;T<S;T+=1){switch(E=null,C[T].ty){case 0:E=new SliderEffect(C[T],u,this);break;case 1:E=new AngleEffect(C[T],u,this);break;case 2:E=new ColorEffect(C[T],u,this);break;case 3:E=new PointEffect(C[T],u,this);break;case 4:case 7:E=new CheckboxEffect(C[T],u,this);break;case 10:E=new LayerIndexEffect(C[T],u,this);break;case 11:E=new MaskIndexEffect(C[T],u,this);break;case 5:E=new EffectsManager(C[T],u);break;default:E=new NoValueEffect(C[T]);break}E&&this.effectElements.push(E)}};function BaseElement(){}BaseElement.prototype={checkMasks:function(){if(!this.data.hasMask)return!1;for(var u=0,T=this.data.masksProperties.length;u<T;){if(this.data.masksProperties[u].mode!=="n"&&this.data.masksProperties[u].cl!==!1)return!0;u+=1}return!1},initExpressions:function(){var u=getExpressionInterfaces();if(u){var T=u("layer"),S=u("effects"),E=u("shape"),C=u("text"),_=u("comp");this.layerInterface=T(this),this.data.hasMask&&this.maskManager&&this.layerInterface.registerMaskInterface(this.maskManager);var P=S.createEffectsInterface(this,this.layerInterface);this.layerInterface.registerEffectsInterface(P),this.data.ty===0||this.data.xt?this.compInterface=_(this):this.data.ty===4?(this.layerInterface.shapeInterface=E(this.shapesData,this.itemsData,this.layerInterface),this.layerInterface.content=this.layerInterface.shapeInterface):this.data.ty===5&&(this.layerInterface.textInterface=C(this),this.layerInterface.text=this.layerInterface.textInterface)}},setBlendMode:function(){var u=getBlendMode(this.data.bm),T=this.baseElement||this.layerElement;T.style["mix-blend-mode"]=u},initBaseData:function(u,T,S){this.globalData=T,this.comp=S,this.data=u,this.layerId=createElementID(),this.data.sr||(this.data.sr=1),this.effectsManager=new EffectsManager(this.data,this,this.dynamicProperties)},getType:function(){return this.type},sourceRectAtTime:function(){}};function FrameElement(){}FrameElement.prototype={initFrame:function(){this._isFirstFrame=!1,this.dynamicProperties=[],this._mdf=!1},prepareProperties:function(u,T){var S,E=this.dynamicProperties.length;for(S=0;S<E;S+=1)(T||this._isParent&&this.dynamicProperties[S].propType==="transform")&&(this.dynamicProperties[S].getValue(),this.dynamicProperties[S]._mdf&&(this.globalData._mdf=!0,this._mdf=!0))},addDynamicProperty:function(u){this.dynamicProperties.indexOf(u)===-1&&this.dynamicProperties.push(u)}};function FootageElement(o,u,T){this.initFrame(),this.initRenderable(),this.assetData=u.getAssetData(o.refId),this.footageData=u.imageLoader.getAsset(this.assetData),this.initBaseData(o,u,T)}FootageElement.prototype.prepareFrame=function(){},extendPrototype([RenderableElement,BaseElement,FrameElement],FootageElement),FootageElement.prototype.getBaseElement=function(){return null},FootageElement.prototype.renderFrame=function(){},FootageElement.prototype.destroy=function(){},FootageElement.prototype.initExpressions=function(){var o=getExpressionInterfaces();if(o){var u=o("footage");this.layerInterface=u(this)}},FootageElement.prototype.getFootageData=function(){return this.footageData};function AudioElement(o,u,T){this.initFrame(),this.initRenderable(),this.assetData=u.getAssetData(o.refId),this.initBaseData(o,u,T),this._isPlaying=!1,this._canPlay=!1;var S=this.globalData.getAssetsPath(this.assetData);this.audio=this.globalData.audioController.createAudio(S),this._currentTime=0,this.globalData.audioController.addAudio(this),this._volumeMultiplier=1,this._volume=1,this._previousVolume=null,this.tm=o.tm?PropertyFactory.getProp(this,o.tm,0,u.frameRate,this):{_placeholder:!0},this.lv=PropertyFactory.getProp(this,o.au&&o.au.lv?o.au.lv:{k:[100]},1,.01,this)}AudioElement.prototype.prepareFrame=function(o){if(this.prepareRenderableFrame(o,!0),this.prepareProperties(o,!0),this.tm._placeholder)this._currentTime=o/this.data.sr;else{var u=this.tm.v;this._currentTime=u}this._volume=this.lv.v[0];var T=this._volume*this._volumeMultiplier;this._previousVolume!==T&&(this._previousVolume=T,this.audio.volume(T))},extendPrototype([RenderableElement,BaseElement,FrameElement],AudioElement),AudioElement.prototype.renderFrame=function(){this.isInRange&&this._canPlay&&(this._isPlaying?(!this.audio.playing()||Math.abs(this._currentTime/this.globalData.frameRate-this.audio.seek())>.1)&&this.audio.seek(this._currentTime/this.globalData.frameRate):(this.audio.play(),this.audio.seek(this._currentTime/this.globalData.frameRate),this._isPlaying=!0))},AudioElement.prototype.show=function(){},AudioElement.prototype.hide=function(){this.audio.pause(),this._isPlaying=!1},AudioElement.prototype.pause=function(){this.audio.pause(),this._isPlaying=!1,this._canPlay=!1},AudioElement.prototype.resume=function(){this._canPlay=!0},AudioElement.prototype.setRate=function(o){this.audio.rate(o)},AudioElement.prototype.volume=function(o){this._volumeMultiplier=o,this._previousVolume=o*this._volume,this.audio.volume(this._previousVolume)},AudioElement.prototype.getBaseElement=function(){return null},AudioElement.prototype.destroy=function(){},AudioElement.prototype.sourceRectAtTime=function(){},AudioElement.prototype.initExpressions=function(){};function BaseRenderer(){}BaseRenderer.prototype.checkLayers=function(o){var u,T=this.layers.length,S;for(this.completeLayers=!0,u=T-1;u>=0;u-=1)this.elements[u]||(S=this.layers[u],S.ip-S.st<=o-this.layers[u].st&&S.op-S.st>o-this.layers[u].st&&this.buildItem(u)),this.completeLayers=this.elements[u]?this.completeLayers:!1;this.checkPendingElements()},BaseRenderer.prototype.createItem=function(o){switch(o.ty){case 2:return this.createImage(o);case 0:return this.createComp(o);case 1:return this.createSolid(o);case 3:return this.createNull(o);case 4:return this.createShape(o);case 5:return this.createText(o);case 6:return this.createAudio(o);case 13:return this.createCamera(o);case 15:return this.createFootage(o);default:return this.createNull(o)}},BaseRenderer.prototype.createCamera=function(){throw new Error("You're using a 3d camera. Try the html renderer.")},BaseRenderer.prototype.createAudio=function(o){return new AudioElement(o,this.globalData,this)},BaseRenderer.prototype.createFootage=function(o){return new FootageElement(o,this.globalData,this)},BaseRenderer.prototype.buildAllItems=function(){var o,u=this.layers.length;for(o=0;o<u;o+=1)this.buildItem(o);this.checkPendingElements()},BaseRenderer.prototype.includeLayers=function(o){this.completeLayers=!1;var u,T=o.length,S,E=this.layers.length;for(u=0;u<T;u+=1)for(S=0;S<E;){if(this.layers[S].id===o[u].id){this.layers[S]=o[u];break}S+=1}},BaseRenderer.prototype.setProjectInterface=function(o){this.globalData.projectInterface=o},BaseRenderer.prototype.initItems=function(){this.globalData.progressiveLoad||this.buildAllItems()},BaseRenderer.prototype.buildElementParenting=function(o,u,T){for(var S=this.elements,E=this.layers,C=0,_=E.length;C<_;)E[C].ind==u&&(!S[C]||S[C]===!0?(this.buildItem(C),this.addPendingElement(o)):(T.push(S[C]),S[C].setAsParent(),E[C].parent!==void 0?this.buildElementParenting(o,E[C].parent,T):o.setHierarchy(T))),C+=1},BaseRenderer.prototype.addPendingElement=function(o){this.pendingElements.push(o)},BaseRenderer.prototype.searchExtraCompositions=function(o){var u,T=o.length;for(u=0;u<T;u+=1)if(o[u].xt){var S=this.createComp(o[u]);S.initExpressions(),this.globalData.projectInterface.registerComposition(S)}},BaseRenderer.prototype.getElementById=function(o){var u,T=this.elements.length;for(u=0;u<T;u+=1)if(this.elements[u].data.ind===o)return this.elements[u];return null},BaseRenderer.prototype.getElementByPath=function(o){var u=o.shift(),T;if(typeof u=="number")T=this.elements[u];else{var S,E=this.elements.length;for(S=0;S<E;S+=1)if(this.elements[S].data.nm===u){T=this.elements[S];break}}return o.length===0?T:T.getElementByPath(o)},BaseRenderer.prototype.setupGlobalData=function(o,u){this.globalData.fontManager=new FontManager,this.globalData.slotManager=slotFactory(o),this.globalData.fontManager.addChars(o.chars),this.globalData.fontManager.addFonts(o.fonts,u),this.globalData.getAssetData=this.animationItem.getAssetData.bind(this.animationItem),this.globalData.getAssetsPath=this.animationItem.getAssetsPath.bind(this.animationItem),this.globalData.imageLoader=this.animationItem.imagePreloader,this.globalData.audioController=this.animationItem.audioController,this.globalData.frameId=0,this.globalData.frameRate=o.fr,this.globalData.nm=o.nm,this.globalData.compSize={w:o.w,h:o.h}};var effectTypes={TRANSFORM_EFFECT:"transformEFfect"};function TransformElement(){}TransformElement.prototype={initTransform:function(){var u=new Matrix;this.finalTransform={mProp:this.data.ks?TransformPropertyFactory.getTransformProperty(this,this.data.ks,this):{o:0},_matMdf:!1,_localMatMdf:!1,_opMdf:!1,mat:u,localMat:u,localOpacity:1},this.data.ao&&(this.finalTransform.mProp.autoOriented=!0),this.data.ty},renderTransform:function(){if(this.finalTransform._opMdf=this.finalTransform.mProp.o._mdf||this._isFirstFrame,this.finalTransform._matMdf=this.finalTransform.mProp._mdf||this._isFirstFrame,this.hierarchy){var u,T=this.finalTransform.mat,S=0,E=this.hierarchy.length;if(!this.finalTransform._matMdf)for(;S<E;){if(this.hierarchy[S].finalTransform.mProp._mdf){this.finalTransform._matMdf=!0;break}S+=1}if(this.finalTransform._matMdf)for(u=this.finalTransform.mProp.v.props,T.cloneFromProps(u),S=0;S<E;S+=1)T.multiply(this.hierarchy[S].finalTransform.mProp.v)}(!this.localTransforms||this.finalTransform._matMdf)&&(this.finalTransform._localMatMdf=this.finalTransform._matMdf),this.finalTransform._opMdf&&(this.finalTransform.localOpacity=this.finalTransform.mProp.o.v)},renderLocalTransform:function(){if(this.localTransforms){var u=0,T=this.localTransforms.length;if(this.finalTransform._localMatMdf=this.finalTransform._matMdf,!this.finalTransform._localMatMdf||!this.finalTransform._opMdf)for(;u<T;)this.localTransforms[u]._mdf&&(this.finalTransform._localMatMdf=!0),this.localTransforms[u]._opMdf&&!this.finalTransform._opMdf&&(this.finalTransform.localOpacity=this.finalTransform.mProp.o.v,this.finalTransform._opMdf=!0),u+=1;if(this.finalTransform._localMatMdf){var S=this.finalTransform.localMat;for(this.localTransforms[0].matrix.clone(S),u=1;u<T;u+=1){var E=this.localTransforms[u].matrix;S.multiply(E)}S.multiply(this.finalTransform.mat)}if(this.finalTransform._opMdf){var C=this.finalTransform.localOpacity;for(u=0;u<T;u+=1)C*=this.localTransforms[u].opacity*.01;this.finalTransform.localOpacity=C}}},searchEffectTransforms:function(){if(this.renderableEffectsManager){var u=this.renderableEffectsManager.getEffects(effectTypes.TRANSFORM_EFFECT);if(u.length){this.localTransforms=[],this.finalTransform.localMat=new Matrix;var T=0,S=u.length;for(T=0;T<S;T+=1)this.localTransforms.push(u[T])}}},globalToLocal:function(u){var T=[];T.push(this.finalTransform);for(var S=!0,E=this.comp;S;)E.finalTransform?(E.data.hasMask&&T.splice(0,0,E.finalTransform),E=E.comp):S=!1;var C,_=T.length,P;for(C=0;C<_;C+=1)P=T[C].mat.applyToPointArray(0,0,0),u=[u[0]-P[0],u[1]-P[1],0];return u},mHelper:new Matrix};function MaskElement(o,u,T){this.data=o,this.element=u,this.globalData=T,this.storedData=[],this.masksProperties=this.data.masksProperties||[],this.maskElement=null;var S=this.globalData.defs,E,C=this.masksProperties?this.masksProperties.length:0;this.viewData=createSizedArray(C),this.solidPath="";var _,P=this.masksProperties,R=0,I=[],L,j,M=createElementID(),D,F,N,G,B="clipPath",H="clip-path";for(E=0;E<C;E+=1)if((P[E].mode!=="a"&&P[E].mode!=="n"||P[E].inv||P[E].o.k!==100||P[E].o.x)&&(B="mask",H="mask"),(P[E].mode==="s"||P[E].mode==="i")&&R===0?(D=createNS("rect"),D.setAttribute("fill","#ffffff"),D.setAttribute("width",this.element.comp.data.w||0),D.setAttribute("height",this.element.comp.data.h||0),I.push(D)):D=null,_=createNS("path"),P[E].mode==="n")this.viewData[E]={op:PropertyFactory.getProp(this.element,P[E].o,0,.01,this.element),prop:ShapePropertyFactory.getShapeProp(this.element,P[E],3),elem:_,lastPath:""},S.appendChild(_);else{R+=1,_.setAttribute("fill",P[E].mode==="s"?"#000000":"#ffffff"),_.setAttribute("clip-rule","nonzero");var O;if(P[E].x.k!==0?(B="mask",H="mask",G=PropertyFactory.getProp(this.element,P[E].x,0,null,this.element),O=createElementID(),F=createNS("filter"),F.setAttribute("id",O),N=createNS("feMorphology"),N.setAttribute("operator","erode"),N.setAttribute("in","SourceGraphic"),N.setAttribute("radius","0"),F.appendChild(N),S.appendChild(F),_.setAttribute("stroke",P[E].mode==="s"?"#000000":"#ffffff")):(N=null,G=null),this.storedData[E]={elem:_,x:G,expan:N,lastPath:"",lastOperator:"",filterId:O,lastRadius:0},P[E].mode==="i"){j=I.length;var V=createNS("g");for(L=0;L<j;L+=1)V.appendChild(I[L]);var U=createNS("mask");U.setAttribute("mask-type","alpha"),U.setAttribute("id",M+"_"+R),U.appendChild(_),S.appendChild(U),V.setAttribute("mask","url("+getLocationHref()+"#"+M+"_"+R+")"),I.length=0,I.push(V)}else I.push(_);P[E].inv&&!this.solidPath&&(this.solidPath=this.createLayerSolidPath()),this.viewData[E]={elem:_,lastPath:"",op:PropertyFactory.getProp(this.element,P[E].o,0,.01,this.element),prop:ShapePropertyFactory.getShapeProp(this.element,P[E],3),invRect:D},this.viewData[E].prop.k||this.drawPath(P[E],this.viewData[E].prop.v,this.viewData[E])}for(this.maskElement=createNS(B),C=I.length,E=0;E<C;E+=1)this.maskElement.appendChild(I[E]);R>0&&(this.maskElement.setAttribute("id",M),this.element.maskedElement.setAttribute(H,"url("+getLocationHref()+"#"+M+")"),S.appendChild(this.maskElement)),this.viewData.length&&this.element.addRenderableComponent(this)}MaskElement.prototype.getMaskProperty=function(o){return this.viewData[o].prop},MaskElement.prototype.renderFrame=function(o){var u=this.element.finalTransform.mat,T,S=this.masksProperties.length;for(T=0;T<S;T+=1)if((this.viewData[T].prop._mdf||o)&&this.drawPath(this.masksProperties[T],this.viewData[T].prop.v,this.viewData[T]),(this.viewData[T].op._mdf||o)&&this.viewData[T].elem.setAttribute("fill-opacity",this.viewData[T].op.v),this.masksProperties[T].mode!=="n"&&(this.viewData[T].invRect&&(this.element.finalTransform.mProp._mdf||o)&&this.viewData[T].invRect.setAttribute("transform",u.getInverseMatrix().to2dCSS()),this.storedData[T].x&&(this.storedData[T].x._mdf||o))){var E=this.storedData[T].expan;this.storedData[T].x.v<0?(this.storedData[T].lastOperator!=="erode"&&(this.storedData[T].lastOperator="erode",this.storedData[T].elem.setAttribute("filter","url("+getLocationHref()+"#"+this.storedData[T].filterId+")")),E.setAttribute("radius",-this.storedData[T].x.v)):(this.storedData[T].lastOperator!=="dilate"&&(this.storedData[T].lastOperator="dilate",this.storedData[T].elem.setAttribute("filter",null)),this.storedData[T].elem.setAttribute("stroke-width",this.storedData[T].x.v*2))}},MaskElement.prototype.getMaskelement=function(){return this.maskElement},MaskElement.prototype.createLayerSolidPath=function(){var o="M0,0 ";return o+=" h"+this.globalData.compSize.w,o+=" v"+this.globalData.compSize.h,o+=" h-"+this.globalData.compSize.w,o+=" v-"+this.globalData.compSize.h+" ",o},MaskElement.prototype.drawPath=function(o,u,T){var S=" M"+u.v[0][0]+","+u.v[0][1],E,C;for(C=u._length,E=1;E<C;E+=1)S+=" C"+u.o[E-1][0]+","+u.o[E-1][1]+" "+u.i[E][0]+","+u.i[E][1]+" "+u.v[E][0]+","+u.v[E][1];if(u.c&&C>1&&(S+=" C"+u.o[E-1][0]+","+u.o[E-1][1]+" "+u.i[0][0]+","+u.i[0][1]+" "+u.v[0][0]+","+u.v[0][1]),T.lastPath!==S){var _="";T.elem&&(u.c&&(_=o.inv?this.solidPath+S:S),T.elem.setAttribute("d",_)),T.lastPath=S}},MaskElement.prototype.destroy=function(){this.element=null,this.globalData=null,this.maskElement=null,this.data=null,this.masksProperties=null};var filtersFactory=function(){var o={};o.createFilter=u,o.createAlphaToLuminanceFilter=T;function u(S,E){var C=createNS("filter");return C.setAttribute("id",S),E!==!0&&(C.setAttribute("filterUnits","objectBoundingBox"),C.setAttribute("x","0%"),C.setAttribute("y","0%"),C.setAttribute("width","100%"),C.setAttribute("height","100%")),C}function T(){var S=createNS("feColorMatrix");return S.setAttribute("type","matrix"),S.setAttribute("color-interpolation-filters","sRGB"),S.setAttribute("values","0 0 0 1 0  0 0 0 1 0  0 0 0 1 0  0 0 0 1 1"),S}return o}(),featureSupport=function(){var o={maskType:!0,svgLumaHidden:!0,offscreenCanvas:typeof OffscreenCanvas<"u"};return(/MSIE 10/i.test(navigator.userAgent)||/MSIE 9/i.test(navigator.userAgent)||/rv:11.0/i.test(navigator.userAgent)||/Edge\/\d./i.test(navigator.userAgent))&&(o.maskType=!1),/firefox/i.test(navigator.userAgent)&&(o.svgLumaHidden=!1),o}(),registeredEffects$1={},idPrefix="filter_result_";function SVGEffects(o){var u,T="SourceGraphic",S=o.data.ef?o.data.ef.length:0,E=createElementID(),C=filtersFactory.createFilter(E,!0),_=0;this.filters=[];var P;for(u=0;u<S;u+=1){P=null;var R=o.data.ef[u].ty;if(registeredEffects$1[R]){var I=registeredEffects$1[R].effect;P=new I(C,o.effectsManager.effectElements[u],o,idPrefix+_,T),T=idPrefix+_,registeredEffects$1[R].countsAsEffect&&(_+=1)}P&&this.filters.push(P)}_&&(o.globalData.defs.appendChild(C),o.layerElement.setAttribute("filter","url("+getLocationHref()+"#"+E+")")),this.filters.length&&o.addRenderableComponent(this)}SVGEffects.prototype.renderFrame=function(o){var u,T=this.filters.length;for(u=0;u<T;u+=1)this.filters[u].renderFrame(o)},SVGEffects.prototype.getEffects=function(o){var u,T=this.filters.length,S=[];for(u=0;u<T;u+=1)this.filters[u].type===o&&S.push(this.filters[u]);return S};function registerEffect$1(o,u,T){registeredEffects$1[o]={effect:u,countsAsEffect:T}}function SVGBaseElement(){}SVGBaseElement.prototype={initRendererElement:function(){this.layerElement=createNS("g")},createContainerElements:function(){this.matteElement=createNS("g"),this.transformedElement=this.layerElement,this.maskedElement=this.layerElement,this._sizeChanged=!1;var u=null;if(this.data.td){this.matteMasks={};var T=createNS("g");T.setAttribute("id",this.layerId),T.appendChild(this.layerElement),u=T,this.globalData.defs.appendChild(T)}else this.data.tt?(this.matteElement.appendChild(this.layerElement),u=this.matteElement,this.baseElement=this.matteElement):this.baseElement=this.layerElement;if(this.data.ln&&this.layerElement.setAttribute("id",this.data.ln),this.data.cl&&this.layerElement.setAttribute("class",this.data.cl),this.data.ty===0&&!this.data.hd){var S=createNS("clipPath"),E=createNS("path");E.setAttribute("d","M0,0 L"+this.data.w+",0 L"+this.data.w+","+this.data.h+" L0,"+this.data.h+"z");var C=createElementID();if(S.setAttribute("id",C),S.appendChild(E),this.globalData.defs.appendChild(S),this.checkMasks()){var _=createNS("g");_.setAttribute("clip-path","url("+getLocationHref()+"#"+C+")"),_.appendChild(this.layerElement),this.transformedElement=_,u?u.appendChild(this.transformedElement):this.baseElement=this.transformedElement}else this.layerElement.setAttribute("clip-path","url("+getLocationHref()+"#"+C+")")}this.data.bm!==0&&this.setBlendMode()},renderElement:function(){this.finalTransform._localMatMdf&&this.transformedElement.setAttribute("transform",this.finalTransform.localMat.to2dCSS()),this.finalTransform._opMdf&&this.transformedElement.setAttribute("opacity",this.finalTransform.localOpacity)},destroyBaseElement:function(){this.layerElement=null,this.matteElement=null,this.maskManager.destroy()},getBaseElement:function(){return this.data.hd?null:this.baseElement},createRenderableComponents:function(){this.maskManager=new MaskElement(this.data,this,this.globalData),this.renderableEffectsManager=new SVGEffects(this),this.searchEffectTransforms()},getMatte:function(u){if(this.matteMasks||(this.matteMasks={}),!this.matteMasks[u]){var T=this.layerId+"_"+u,S,E,C,_;if(u===1||u===3){var P=createNS("mask");P.setAttribute("id",T),P.setAttribute("mask-type",u===3?"luminance":"alpha"),C=createNS("use"),C.setAttributeNS("http://www.w3.org/1999/xlink","href","#"+this.layerId),P.appendChild(C),this.globalData.defs.appendChild(P),!featureSupport.maskType&&u===1&&(P.setAttribute("mask-type","luminance"),S=createElementID(),E=filtersFactory.createFilter(S),this.globalData.defs.appendChild(E),E.appendChild(filtersFactory.createAlphaToLuminanceFilter()),_=createNS("g"),_.appendChild(C),P.appendChild(_),_.setAttribute("filter","url("+getLocationHref()+"#"+S+")"))}else if(u===2){var R=createNS("mask");R.setAttribute("id",T),R.setAttribute("mask-type","alpha");var I=createNS("g");R.appendChild(I),S=createElementID(),E=filtersFactory.createFilter(S);var L=createNS("feComponentTransfer");L.setAttribute("in","SourceGraphic"),E.appendChild(L);var j=createNS("feFuncA");j.setAttribute("type","table"),j.setAttribute("tableValues","1.0 0.0"),L.appendChild(j),this.globalData.defs.appendChild(E);var M=createNS("rect");M.setAttribute("width",this.comp.data.w),M.setAttribute("height",this.comp.data.h),M.setAttribute("x","0"),M.setAttribute("y","0"),M.setAttribute("fill","#ffffff"),M.setAttribute("op
322acity","0"),I.setAttribute("filter","url("+getLocationHref()+"#"+S+")"),I.appendChild(M),C=createNS("use"),C.setAttributeNS("http://www.w3.org/1999/xlink","href","#"+this.layerId),I.appendChild(C),featureSupport.maskType||(R.setAttribute("mask-type","luminance"),E.appendChild(filtersFactory.createAlphaToLuminanceFilter()),_=createNS("g"),I.appendChild(M),_.appendChild(this.layerElement),I.appendChild(_)),this.globalData.defs.appendChild(R)}this.matteMasks[u]=T}return this.matteMasks[u]},setMatte:function(u){this.matteElement&&this.matteElement.setAttribute("mask","url("+getLocationHref()+"#"+u+")")}};function HierarchyElement(){}HierarchyElement.prototype={initHierarchy:function(){this.hierarchy=[],this._isParent=!1,this.checkParenting()},setHierarchy:function(u){this.hierarchy=u},setAsParent:function(){this._isParent=!0},checkParenting:function(){this.data.parent!==void 0&&this.comp.buildElementParenting(this,this.data.parent,[])}};function RenderableDOMElement(){}(function(){var o={initElement:function(T,S,E){this.initFrame(),this.initBaseData(T,S,E),this.initTransform(T,S,E),this.initHierarchy(),this.initRenderable(),this.initRendererElement(),this.createContainerElements(),this.createRenderableComponents(),this.createContent(),this.hide()},hide:function(){if(!this.hidden&&(!this.isInRange||this.isTransparent)){var T=this.baseElement||this.layerElement;T.style.display="none",this.hidden=!0}},show:function(){if(this.isInRange&&!this.isTransparent){if(!this.data.hd){var T=this.baseElement||this.layerElement;T.style.display="block"}this.hidden=!1,this._isFirstFrame=!0}},renderFrame:function(){this.data.hd||this.hidden||(this.renderTransform(),this.renderRenderable(),this.renderLocalTransform(),this.renderElement(),this.renderInnerContent(),this._isFirstFrame&&(this._isFirstFrame=!1))},renderInnerContent:function(){},prepareFrame:function(T){this._mdf=!1,this.prepareRenderableFrame(T),this.prepareProperties(T,this.isInRange),this.checkTransparency()},destroy:function(){this.innerElem=null,this.destroyBaseElement()}};extendPrototype([RenderableElement,createProxyFunction(o)],RenderableDOMElement)})();function IImageElement(o,u,T){this.assetData=u.getAssetData(o.refId),this.assetData&&this.assetData.sid&&(this.assetData=u.slotManager.getProp(this.assetData)),this.initElement(o,u,T),this.sourceRect={top:0,left:0,width:this.assetData.w,height:this.assetData.h}}extendPrototype([BaseElement,TransformElement,SVGBaseElement,HierarchyElement,FrameElement,RenderableDOMElement],IImageElement),IImageElement.prototype.createContent=function(){var o=this.globalData.getAssetsPath(this.assetData);this.innerElem=createNS("image"),this.innerElem.setAttribute("width",this.assetData.w+"px"),this.innerElem.setAttribute("height",this.assetData.h+"px"),this.innerElem.setAttribute("preserveAspectRatio",this.assetData.pr||this.globalData.renderConfig.imagePreserveAspectRatio),this.innerElem.setAttributeNS("http://www.w3.org/1999/xlink","href",o),this.layerElement.appendChild(this.innerElem)},IImageElement.prototype.sourceRectAtTime=function(){return this.sourceRect};function ProcessedElement(o,u){this.elem=o,this.pos=u}function IShapeElement(){}IShapeElement.prototype={addShapeToModifiers:function(u){var T,S=this.shapeModifiers.length;for(T=0;T<S;T+=1)this.shapeModifiers[T].addShape(u)},isShapeInAnimatedModifiers:function(u){for(var T=0,S=this.shapeModifiers.length;T<S;)if(this.shapeModifiers[T].isAnimatedWithShape(u))return!0;return!1},renderModifiers:function(){if(this.shapeModifiers.length){var u,T=this.shapes.length;for(u=0;u<T;u+=1)this.shapes[u].sh.reset();T=this.shapeModifiers.length;var S;for(u=T-1;u>=0&&(S=this.shapeModifiers[u].processShapes(this._isFirstFrame),!S);u-=1);}},searchProcessedElement:function(u){for(var T=this.processedElements,S=0,E=T.length;S<E;){if(T[S].elem===u)return T[S].pos;S+=1}return 0},addProcessedElement:function(u,T){for(var S=this.processedElements,E=S.length;E;)if(E-=1,S[E].elem===u){S[E].pos=T;return}S.push(new ProcessedElement(u,T))},prepareFrame:function(u){this.prepareRenderableFrame(u),this.prepareProperties(u,this.isInRange)}};var lineCapEnum={1:"butt",2:"round",3:"square"},lineJoinEnum={1:"miter",2:"round",3:"bevel"};function SVGShapeData(o,u,T){this.caches=[],this.styles=[],this.transformers=o,this.lStr="",this.sh=T,this.lvl=u,this._isAnimated=!!T.k;for(var S=0,E=o.length;S<E;){if(o[S].mProps.dynamicProperties.length){this._isAnimated=!0;break}S+=1}}SVGShapeData.prototype.setAsAnimated=function(){this._isAnimated=!0};function SVGStyleData(o,u){this.data=o,this.type=o.ty,this.d="",this.lvl=u,this._mdf=!1,this.closed=o.hd===!0,this.pElem=createNS("path"),this.msElem=null}SVGStyleData.prototype.reset=function(){this.d="",this._mdf=!1};function DashProperty(o,u,T,S){this.elem=o,this.frameId=-1,this.dataProps=createSizedArray(u.length),this.renderer=T,this.k=!1,this.dashStr="",this.dashArray=createTypedArray("float32",u.length?u.length-1:0),this.dashoffset=createTypedArray("float32",1),this.initDynamicPropertyContainer(S);var E,C=u.length||0,_;
vendor: 6,569 bytes, line 322
322for(E=0;E<C;E+=1)_=PropertyFactory.getProp(o,u[E].v,0,0,this),this.k=_.k||this.k,this.dataProps[E]={n:u[E].n,p:_};this.k||this.getValue(!0),this._isAnimated=this.k}DashProperty.prototype.getValue=function(o){if(!(this.elem.globalData.frameId===this.frameId&&!o)&&(this.frameId=this.elem.globalData.frameId,this.iterateDynamicProperties(),this._mdf=this._mdf||o,this._mdf)){var u=0,T=this.dataProps.length;for(this.renderer==="svg"&&(this.dashStr=""),u=0;u<T;u+=1)this.dataProps[u].n!=="o"?this.renderer==="svg"?this.dashStr+=" "+this.dataProps[u].p.v:this.dashArray[u]=this.dataProps[u].p.v:this.dashoffset[0]=this.dataProps[u].p.v}},extendPrototype([DynamicPropertyContainer],DashProperty);function SVGStrokeStyleData(o,u,T){this.initDynamicPropertyContainer(o),this.getValue=this.iterateDynamicProperties,this.o=PropertyFactory.getProp(o,u.o,0,.01,this),this.w=PropertyFactory.getProp(o,u.w,0,null,this),this.d=new DashProperty(o,u.d||{},"svg",this),this.c=PropertyFactory.getProp(o,u.c,1,255,this),this.style=T,this._isAnimated=!!this._isAnimated}extendPrototype([DynamicPropertyContainer],SVGStrokeStyleData);function SVGFillStyleData(o,u,T){this.initDynamicPropertyContainer(o),this.getValue=this.iterateDynamicProperties,this.o=PropertyFactory.getProp(o,u.o,0,.01,this),this.c=PropertyFactory.getProp(o,u.c,1,255,this),this.style=T}extendPrototype([DynamicPropertyContainer],SVGFillStyleData);function SVGNoStyleData(o,u,T){this.initDynamicPropertyContainer(o),this.getValue=this.iterateDynamicProperties,this.style=T}extendPrototype([DynamicPropertyContainer],SVGNoStyleData);function GradientProperty(o,u,T){this.data=u,this.c=createTypedArray("uint8c",u.p*4);var S=u.k.k[0].s?u.k.k[0].s.length-u.p*4:u.k.k.length-u.p*4;this.o=createTypedArray("float32",S),this._cmdf=!1,this._omdf=!1,this._collapsable=this.checkCollapsable(),this._hasOpacity=S,this.initDynamicPropertyContainer(T),this.prop=PropertyFactory.getProp(o,u.k,1,null,this),this.k=this.prop.k,this.getValue(!0)}GradientProperty.prototype.comparePoints=function(o,u){for(var T=0,S=this.o.length/2,E;T<S;){if(E=Math.abs(o[T*4]-o[u*4+T*2]),E>.01)return!1;T+=1}return!0},GradientProperty.prototype.checkCollapsable=function(){if(this.o.length/2!==this.c.length/4)return!1;if(this.data.k.k[0].s)for(var o=0,u=this.data.k.k.length;o<u;){if(!this.comparePoints(this.data.k.k[o].s,this.data.p))return!1;o+=1}else if(!this.comparePoints(this.data.k.k,this.data.p))return!1;return!0},GradientProperty.prototype.getValue=function(o){if(this.prop.getValue(),this._mdf=!1,this._cmdf=!1,this._omdf=!1,this.prop._mdf||o){var u,T=this.data.p*4,S,E;for(u=0;u<T;u+=1)S=u%4===0?100:255,E=Math.round(this.prop.v[u]*S),this.c[u]!==E&&(this.c[u]=E,this._cmdf=!o);if(this.o.length)for(T=this.prop.v.length,u=this.data.p*4;u<T;u+=1)S=u%2===0?100:1,E=u%2===0?Math.round(this.prop.v[u]*100):this.prop.v[u],this.o[u-this.data.p*4]!==E&&(this.o[u-this.data.p*4]=E,this._omdf=!o);this._mdf=!o}},extendPrototype([DynamicPropertyContainer],GradientProperty);function SVGGradientFillStyleData(o,u,T){this.initDynamicPropertyContainer(o),this.getValue=this.iterateDynamicProperties,this.initGradientData(o,u,T)}SVGGradientFillStyleData.prototype.initGradientData=function(o,u,T){this.o=PropertyFactory.getProp(o,u.o,0,.01,this),this.s=PropertyFactory.getProp(o,u.s,1,null,this),this.e=PropertyFactory.getProp(o,u.e,1,null,this),this.h=PropertyFactory.getProp(o,u.h||{k:0},0,.01,this),this.a=PropertyFactory.getProp(o,u.a||{k:0},0,degToRads,this),this.g=new GradientProperty(o,u.g,this),this.style=T,this.stops=[],this.setGradientData(T.pElem,u),this.setGradientOpacity(u,T),this._isAnimated=!!this._isAnimated},SVGGradientFillStyleData.prototype.setGradientData=function(o,u){var T=createElementID(),S=createNS(u.t===1?"linearGradient":"radialGradient");S.setAttribute("id",T),S.setAttribute("spreadMethod","pad"),S.setAttribute("gradientUnits","userSpaceOnUse");var E=[],C,_,P;for(P=u.g.p*4,_=0;_<P;_+=4)C=createNS("stop"),S.appendChild(C),E.push(C);o.setAttribute(u.ty==="gf"?"fill":"stroke","url("+getLocationHref()+"#"+T+")"),this.gf=S,this.cst=E},SVGGradientFillStyleData.prototype.setGradientOpacity=function(o,u){if(this.g._hasOpacity&&!this.g._collapsable){var T,S,E,C=createNS("mask"),_=createNS("path");C.appendChild(_);var P=createElementID(),R=createElementID();C.setAttribute("id",R);var I=createNS(o.t===1?"linearGradient":"radialGradient");I.setAttribute("id",P),I.setAttribute("spreadMethod","pad"),I.setAttribute("gradientUnits","userSpaceOnUse"),E=o.g.k.k[0].s?o.g.k.k[0].s.length:o.g.k.k.length;var L=this.stops;for(S=o.g.p*4;S<E;S+=2)T=createNS("stop"),T.setAttribute("stop-color","rgb(255,255,255)"),I.appendChild(T),L.push(T);_.setAttribute(o.ty==="gf"?"fill":"stroke","url("+getLocationHref()+"#"+P+")"),o.ty==="gs"&&(_.setAttribute("stroke-linecap",lineCapEnum[o.lc||2]),_.setAttribute("stroke-linejoin",lineJoinEnum[o.lj||2]),o.lj===1&&_.setAttribute("stroke-miterlimit",o.ml)),this.of=I,this.ms=C,this.ost=L,this.maskId=R,u.msElem=_}},extendPrototype([DynamicPropertyContainer],SVGGradientFillStyleData);function SVGGradientStrokeStyleData(o,u,T){this.initDynamicPropertyContainer(o),this.getValue=this.iterateDynamicProperties,this.w=PropertyFactory.getProp(o,u.w,0,null,this),this.d=new DashProperty(o,u.d||{},"svg",this),this.initGradientData(o,u,T),this._isAnimated=!!this._isAnimated}extendPrototype([SVGGradientFillStyleData,DynamicPropertyContainer],SVGGradientStrokeStyleData);function ShapeGroupData(){this.it=[],this.prevViewData=[],this.gr=createNS("g")}function SVGTransformData(o,u,T){this.transform={mProps:o,op:u,container:T},this.elements=[],this._isAnimated=this.transform.mProps.dynamicProperties.length||this.transform.op.effectsSequence.length}var buildShapeString=function(u,T,S,E){if(T===0)return"";var C=u.o,_=u.i,P=u.v,R,I=" M"+E.applyToPointStringified(P[0][0],P[0][1]);for(R=1;R<T;R+=1)I+=" C"+E.applyToPointStringified(C[R-1][0],C[R-1][1])+" "+E.applyToPointStringified(_[R][0],_[R][1])+" "+E.applyToPointStringified(P[R][0],P[R][1]);return S&&T&&(I+=" C"+E.applyToPointStringified(C[R-1][0],C[R-1][1])+" "+E.applyToPointStringified(_[0][0],_[0][1])+" "+E.applyToPointStringified(P[0][0],P[0][1]),I+="z"),I},SVGElementsRenderer=function(){var o=new Matrix,u=new Matrix,T={createRenderFunction:S};function S(j){switch(j.ty){case"fl":return P;case"gf":return I;case"gs":return R;case"st":return L;case"sh":case"el":case"rc":case"sr":return _;case"tr":return E;case"no":return C;default:return null}}function E(j,M,D){(D||M.transform.op._mdf)&&M.transform.container.setAttribute("op
322acity",M.transform.op.v),(D||M.transform.mProps._mdf)&&M.transform.container.setAttribute("transform",M.transform.mProps.v.to2dCSS())}function C(){}function _(j,M,D){var F,N,G,B,H,O,V=M.styles.length,U=M.lvl,W,K,Y,ee;for(O=0;O<V;O+=1){if(B=M.sh._mdf||D,M.styles[O].lvl<U){for(K=u.reset(),Y=U-M.styles[O].lvl,ee=M.transformers.length-1;!B&&Y>0;)B=M.transformers[ee].mProps._mdf||B,Y-=1,ee-=1;if(B)for(Y=U-M.styles[O].lvl,ee=M.transformers.length-1;Y>0;)K.multiply(M.transformers[ee].mProps.v),Y-=1,ee-=1}else K=o;if(W=M.sh.paths,N=W._length,B){for(G="",F=0;F<N;F+=1)H=W.shapes[F],H&&H._length&&(G+=buildShapeString(H,H._length,H.c,K));M.caches[O]=G}else G=M.caches[O];M.styles[O].d+=j.hd===!0?"":G,M.styles[O]._mdf=B||M.styles[O]._mdf}}function P(j,M,D){var F=M.style;(M.c._mdf||D)&&F.pElem.setAttribute("fill","rgb("+bmFloor(M.c.v[0])+","+bmFloor(M.c.v[1])+","+bmFloor(M.c.v[2])+")"),(M.o._mdf||D)&&F.pElem.setAttribute("fill-opacity",M.o.v)}function R(j,M,D){I(j,M,D),L(j,M,D)}function I(j,M,D){var F=M.gf,N=M.g._hasOpacity,G=M.s.v,B=M.e.v;if(M.o._mdf||D){var H=j.ty==="gf"?"fill-opacity":"stroke-opacity";M.style.pElem.setAttribute(H,M.o.v)}if(M.s._mdf||D){var O=j.t===1?"x1":"cx",V=O==="x1"?"y1":"cy";F.setAttribute(O,G[0]),F.setAttribute(V,G[1]),N&&!M.g._collapsable&&(M.of.setAttribute(O,G[0]),M.of.setAttribute(V,G[1]))}var U,W,K,Y;if(M.g._cmdf||D){U=M.cst;var ee=M.g.c;for(K=U.length,W=0;W<K;W+=1)Y=U[W],Y.setAttribute("offset",ee[W*4]+"%"),Y.setAttribute("stop-color","rgb("+ee[W*4+1]+","+ee[W*4+2]+","+ee[W*4+3]+")")}if(N&&(M.g._omdf||D)){var oe=M.g.o;for(M.g._collapsable?U=M.cst:U=M.ost,K=U.length,W=0;W<K;W+=1)Y=U[W],M.g._collapsable||Y.setAttribute("offset",oe[W*2]+"%"),Y.setAttribute("stop-opacity",oe[W*2+1])}if(j.t===1)(M.e._mdf||D)&&(F.setAttribute("x2",B[0]),F.setAttribute("y2",B[1]),N&&!M.g._collapsable&&(M.of.setAttribute("x2",B[0]),M.of.setAttribute("y2",B[1])));else{var se;if((M.s._mdf||M.e._mdf||D)&&(se=Math.sqrt(Math.pow(G[0]-B[0],2)+Math.pow(G[1]-B[1],2)),F.setAttribute("r",se),N&&!M.g._collapsable&&M.of.setAttribute("r",se)),M.s._mdf||M.e._mdf||M.h._mdf||M.a._mdf||D){se||(se=Math.sqrt(Math.pow(G[0]-B[0],2)+Math.pow(G[1]-B[1],2)));var Q=Math.atan2(B[1]-G[1],B[0]-G[0]),ie=M.h.v;ie>=1?ie=.99:ie<=-1&&(ie=-.99);var ae=se*ie,re=Math.cos(Q+M.a.v)*ae+G[0],J=Math.sin(Q+M.a.v)*ae+G[1];F.setAttribute("fx",re),F.setAttribute("fy",J),N&&!M.g._collapsable&&(M.of.setAttribute("fx",re),M.of.setAttribute("fy",J))}}}function L(j,M,D){var F=M.style,N=M.d;N&&(N._mdf||D)&&N.dashStr&&(F.pElem.setAttribute("stroke-dasharray",N.dashStr),F.pElem.setAttribute("stroke-dashoffset",N.dashoffset[0])),M.c&&(M.c._mdf||D)&&F.pElem.setAttribute("stroke","rgb("+bmFloor(M.c.v[0])+","+bmFloor(M.c.v[1])+","+bmFloor(M.c.v[2])+")"),(M.o._mdf||D)&&F.pElem.setAttribute("stroke-opacity",M.o.v),(M.w._mdf||D)&&(F.pElem.setAttribute("stroke-width",M.w.v),F.msElem&&F.msElem.setAttribute("stroke-width",M.w.v))}return T}();function SVGShapeElement(o,u,T){this.shapes=[],this.shapesData=o.shapes,this.stylesList=[],this.shapeModifiers=[],this.itemsData=[],this.processedElements=[],this.animatedContents=[],this.initElement(o,u,T),this.prevViewData=[]}extendPrototype([BaseElement,TransformElement,SVGBaseElement,IShapeElement,HierarchyElement,FrameElement,RenderableDOMElement],SVGShapeElement),SVGShapeElement.prototype.initSecondaryElement=function(){},SVGShapeElement.prototype.identityMatrix=new Matrix,SVGShapeElement.prototype.buildExpressionInterface=function(){},SVGShapeElement.prototype.createContent=function(){this.searchShapes(this.shapesData,this.itemsData,this.prevViewData,this.layerElement,0,[],!0),this.filterUniqueShapes()},SVGShapeElement.prototype.filterUniqueShapes=function(){var o,u=this.shapes.length,T,S,E=this.stylesList.length,C,_=[],P=!1;for(S=0;S<E;S+=1){for(C=this.stylesList[S],P=!1,_.length=0,o=0;o<u;o+=1)T=this.shapes[o],T.styles.indexOf(C)!==-1&&(_.push(T),P=T._isAnimated||P);_.length>1&&P&&this.setShapesAsAnimated(_)}},SVGShapeElement.prototype.setShapesAsAnimated=function(o){var u,T=o.length;for(u=0;u<T;u+=1)o[u].setAsAnimated()},SVGShapeElement.prototype.createStyleElement=function(o,u){var T,S=new SVGStyleData(o,u),E=S.pElem;if(o.ty==="st")T=new SVGStrokeStyleData(this,o,S);else if(o.ty==="fl")T=new SVGFillStyleData(this,o,S);else if(o.ty==="gf"||o.ty==="gs"){var C=o.ty==="gf"?SVGGradientFillStyleData:SVGGradientStrokeStyleData;T=new C(this,o,S),this.globalData.defs.appendChild(T.gf),T.maskId&&(this.globalData.defs.appendChild(T.ms),this.globalData.defs.appendChild(T.of),E.setAttribute("mask","url("+getLocationHref()+"#"+T.maskId+")"))}else o.ty==="no"&&(T=new SVGNoStyleData(this,o,S));return(o.ty==="st"||o.ty==="gs")&&(E.setAttribute("stroke-linecap",lineCapEnum[o.lc||2]),E.setAttribute("stroke-linejoin",lineJoinEnum[o.lj||2]),E.setAttribute("fill-opacity","0"),o.lj===1&&E.setAttribute("stroke-miterlimit",o.ml)),o.r===2&&E.setAttribute("fill-rule","evenodd"),o.ln&&E.setAttribute("id",o.ln),o.cl&&E.setAttribute("class",o.cl),o.bm&&(E.style["mix-blend-mode"]=getBlendM
vendor: 31,045 bytes, line 322
322ode(o.bm)),this.stylesList.push(S),this.addToAnimatedContents(o,T),T},SVGShapeElement.prototype.createGroupElement=function(o){var u=new ShapeGroupData;return o.ln&&u.gr.setAttribute("id",o.ln),o.cl&&u.gr.setAttribute("class",o.cl),o.bm&&(u.gr.style["mix-blend-mode"]=getBlendMode(o.bm)),u},SVGShapeElement.prototype.createTransformElement=function(o,u){var T=TransformPropertyFactory.getTransformProperty(this,o,this),S=new SVGTransformData(T,T.o,u);return this.addToAnimatedContents(o,S),S},SVGShapeElement.prototype.createShapeElement=function(o,u,T){var S=4;o.ty==="rc"?S=5:o.ty==="el"?S=6:o.ty==="sr"&&(S=7);var E=ShapePropertyFactory.getShapeProp(this,o,S,this),C=new SVGShapeData(u,T,E);return this.shapes.push(C),this.addShapeToModifiers(C),this.addToAnimatedContents(o,C),C},SVGShapeElement.prototype.addToAnimatedContents=function(o,u){for(var T=0,S=this.animatedContents.length;T<S;){if(this.animatedContents[T].element===u)return;T+=1}this.animatedContents.push({fn:SVGElementsRenderer.createRenderFunction(o),element:u,data:o})},SVGShapeElement.prototype.setElementStyles=function(o){var u=o.styles,T,S=this.stylesList.length;for(T=0;T<S;T+=1)u.indexOf(this.stylesList[T])===-1&&!this.stylesList[T].closed&&u.push(this.stylesList[T])},SVGShapeElement.prototype.reloadShapes=function(){this._isFirstFrame=!0;var o,u=this.itemsData.length;for(o=0;o<u;o+=1)this.prevViewData[o]=this.itemsData[o];for(this.searchShapes(this.shapesData,this.itemsData,this.prevViewData,this.layerElement,0,[],!0),this.filterUniqueShapes(),u=this.dynamicProperties.length,o=0;o<u;o+=1)this.dynamicProperties[o].getValue();this.renderModifiers()},SVGShapeElement.prototype.searchShapes=function(o,u,T,S,E,C,_){var P=[].concat(C),R,I=o.length-1,L,j,M=[],D=[],F,N,G;for(R=I;R>=0;R-=1){if(G=this.searchProcessedElement(o[R]),G?u[R]=T[G-1]:o[R]._render=_,o[R].ty==="fl"||o[R].ty==="st"||o[R].ty==="gf"||o[R].ty==="gs"||o[R].ty==="no")G?u[R].style.closed=o[R].hd:u[R]=this.createStyleElement(o[R],E),o[R]._render&&u[R].style.pElem.parentNode!==S&&S.appendChild(u[R].style.pElem),M.push(u[R].style);else if(o[R].ty==="gr"){if(!G)u[R]=this.createGroupElement(o[R]);else for(j=u[R].it.length,L=0;L<j;L+=1)u[R].prevViewData[L]=u[R].it[L];this.searchShapes(o[R].it,u[R].it,u[R].prevViewData,u[R].gr,E+1,P,_),o[R]._render&&u[R].gr.parentNode!==S&&S.appendChild(u[R].gr)}else o[R].ty==="tr"?(G||(u[R]=this.createTransformElement(o[R],S)),F=u[R].transform,P.push(F)):o[R].ty==="sh"||o[R].ty==="rc"||o[R].ty==="el"||o[R].ty==="sr"?(G||(u[R]=this.createShapeElement(o[R],P,E)),this.setElementStyles(u[R])):o[R].ty==="tm"||o[R].ty==="rd"||o[R].ty==="ms"||o[R].ty==="pb"||o[R].ty==="zz"||o[R].ty==="op"?(G?(N=u[R],N.closed=!1):(N=ShapeModifiers.getModifier(o[R].ty),N.init(this,o[R]),u[R]=N,this.shapeModifiers.push(N)),D.push(N)):o[R].ty==="rp"&&(G?(N=u[R],N.closed=!0):(N=ShapeModifiers.getModifier(o[R].ty),u[R]=N,N.init(this,o,R,u),this.shapeModifiers.push(N),_=!1),D.push(N));this.addProcessedElement(o[R],R+1)}for(I=M.length,R=0;R<I;R+=1)M[R].closed=!0;for(I=D.length,R=0;R<I;R+=1)D[R].closed=!0},SVGShapeElement.prototype.renderInnerContent=function(){this.renderModifiers();var o,u=this.stylesList.length;for(o=0;o<u;o+=1)this.stylesList[o].reset();for(this.renderShape(),o=0;o<u;o+=1)(this.stylesList[o]._mdf||this._isFirstFrame)&&(this.stylesList[o].msElem&&(this.stylesList[o].msElem.setAttribute("d",this.stylesList[o].d),this.stylesList[o].d="M0 0"+this.stylesList[o].d),this.stylesList[o].pElem.setAttribute("d",this.stylesList[o].d||"M0 0"))},SVGShapeElement.prototype.renderShape=function(){var o,u=this.animatedContents.length,T;for(o=0;o<u;o+=1)T=this.animatedContents[o],(this._isFirstFrame||T.element._isAnimated)&&T.data!==!0&&T.fn(T.data,T.element,this._isFirstFrame)},SVGShapeElement.prototype.destroy=function(){this.destroyBaseElement(),this.shapesData=null,this.itemsData=null};function LetterProps(o,u,T,S,E,C){this.o=o,this.sw=u,this.sc=T,this.fc=S,this.m=E,this.p=C,this._mdf={o:!0,sw:!!u,sc:!!T,fc:!!S,m:!0,p:!0}}LetterProps.prototype.update=function(o,u,T,S,E,C){this._mdf.o=!1,this._mdf.sw=!1,this._mdf.sc=!1,this._mdf.fc=!1,this._mdf.m=!1,this._mdf.p=!1;var _=!1;return this.o!==o&&(this.o=o,this._mdf.o=!0,_=!0),this.sw!==u&&(this.sw=u,this._mdf.sw=!0,_=!0),this.sc!==T&&(this.sc=T,this._mdf.sc=!0,_=!0),this.fc!==S&&(this.fc=S,this._mdf.fc=!0,_=!0),this.m!==E&&(this.m=E,this._mdf.m=!0,_=!0),C.length&&(this.p[0]!==C[0]||this.p[1]!==C[1]||this.p[4]!==C[4]||this.p[5]!==C[5]||this.p[12]!==C[12]||this.p[13]!==C[13])&&(this.p=C,this._mdf.p=!0,_=!0),_};function TextProperty(o,u){this._frameId=initialDefaultFrame,this.pv="",this.v="",this.kf=!1,this._isFirstFrame=!0,this._mdf=!1,u.d&&u.d.sid&&(u.d=o.globalData.slotManager.getProp(u.d)),this.data=u,this.elem=o,this.comp=this.elem.comp,this.keysIndex=0,this.canResize=!1,this.minimumFontSize=1,this.effectsSequence=[],this.currentData={ascent:0,boxWidth:this.defaultBoxWidth,f:"",fStyle:"",fWeight:"",fc:"",j:"",justifyOffset:"",l:[],lh:0,lineWidths:[],ls:"",of:"",s:"",sc:"",sw:0,t:0,tr:0,sz:0,ps:null,fillColorAnim:!1,strokeColorAnim:!1,strokeWidthAnim:!1,yOffset:0,finalSize:0,finalText:[],finalLineHeight:0,__complete:!1},this.copyData(this.currentData,this.data.d.k[0].s),this.searchProperty()||this.completeTextData(this.currentData)}TextProperty.prototype.defaultBoxWidth=[0,0],TextProperty.prototype.copyData=function(o,u){for(var T in u)Object.prototype.hasOwnProperty.call(u,T)&&(o[T]=u[T]);return o},TextProperty.prototype.setCurrentData=function(o){o.__complete||this.completeTextData(o),this.currentData=o,this.currentData.boxWidth=this.currentData.boxWidth||this.defaultBoxWidth,this._mdf=!0},TextProperty.prototype.searchProperty=function(){return this.searchKeyframes()},TextProperty.prototype.searchKeyframes=function(){return this.kf=this.data.d.k.length>1,this.kf&&this.addEffect(this.getKeyframeValue.bind(this)),this.kf},TextProperty.prototype.addEffect=function(o){this.effectsSequence.push(o),this.elem.addDynamicProperty(this)},TextProperty.prototype.getValue=function(o){if(!((this.elem.globalData.frameId===this.frameId||!this.effectsSequence.length)&&!o)){this.currentData.t=this.data.d.k[this.keysIndex].s.t;var u=this.currentData,T=this.keysIndex;if(this.lock){this.setCurrentData(this.currentData);return}this.lock=!0,this._mdf=!1;var S,E=this.effectsSequence.length,C=o||this.data.d.k[this.keysIndex].s;for(S=0;S<E;S+=1)T!==this.keysIndex?C=this.effectsSequence[S](C,C.t):C=this.effectsSequence[S](this.currentData,C.t);u!==C&&this.setCurrentData(C),this.v=this.currentData,this.pv=this.v,this.lock=!1,this.frameId=this.elem.globalData.frameId}},TextProperty.prototype.getKeyframeValue=function(){for(var o=this.data.d.k,u=this.elem.comp.renderedFrame,T=0,S=o.length;T<=S-1&&!(T===S-1||o[T+1].t>u);)T+=1;return this.keysIndex!==T&&(this.keysIndex=T),this.data.d.k[this.keysIndex].s},TextProperty.prototype.buildFinalText=function(o){for(var u=[],T=0,S=o.length,E,C,_=!1,P=!1,R="";T<S;)_=P,P=!1,E=o.charCodeAt(T),R=o.charAt(T),FontManager.isCombinedCharacter(E)?_=!0:E>=55296&&E<=56319?FontManager.isRegionalFlag(o,T)?R=o.substr(T,14):(C=o.charCodeAt(T+1),C>=56320&&C<=57343&&(FontManager.isModifier(E,C)?(R=o.substr(T,2),_=!0):FontManager.isFlagEmoji(o.substr(T,4))?R=o.substr(T,4):R=o.substr(T,2))):E>56319?(C=o.charCodeAt(T+1),FontManager.isVariationSelector(E)&&(_=!0)):FontManager.isZeroWidthJoiner(E)&&(_=!0,P=!0),_?(u[u.length-1]+=R,_=!1):u.push(R),T+=R.length;return u},TextProperty.prototype.completeTextData=function(o){o.__complete=!0;var u=this.elem.globalData.fontManager,T=this.data,S=[],E,C,_,P=0,R,I=T.m.g,L=0,j=0,M=0,D=[],F=0,N=0,G,B,H=u.getFontByName(o.f),O,V=0,U=getFontProperties(H);o.fWeight=U.weight,o.fStyle=U.style,o.finalSize=o.s,o.finalText=this.buildFinalText(o.t),C=o.finalText.length,o.finalLineHeight=o.lh;var W=o.tr/1e3*o.finalSize,K;if(o.sz)for(var Y=!0,ee=o.sz[0],oe=o.sz[1],se,Q;Y;){Q=this.buildFinalText(o.t),se=0,F=0,C=Q.length,W=o.tr/1e3*o.finalSize;var ie=-1;for(E=0;E<C;E+=1)K=Q[E].charCodeAt(0),_=!1,Q[E]===" "?ie=E:(K===13||K===3)&&(F=0,_=!0,se+=o.finalLineHeight||o.finalSize*1.2),u.chars?(O=u.getCharData(Q[E],H.fStyle,H.fFamily),V=_?0:O.w*o.finalSize/100):V=u.measureText(Q[E],o.f,o.finalSize),F+V>ee&&Q[E]!==" "?(ie===-1?C+=1:E=ie,se+=o.finalLineHeight||o.finalSize*1.2,Q.splice(E,ie===E?1:0,"\r"),ie=-1,F=0):(F+=V,F+=W);se+=H.ascent*o.finalSize/100,this.canResize&&o.finalSize>this.minimumFontSize&&oe<se?(o.finalSize-=1,o.finalLineHeight=o.finalSize*o.lh/o.s):(o.finalText=Q,C=o.finalText.length,Y=!1)}F=-W,V=0;var ae=0,re;for(E=0;E<C;E+=1)if(_=!1,re=o.finalText[E],K=re.charCodeAt(0),K===13||K===3?(ae=0,D.push(F),N=F>N?F:N,F=-2*W,R="",_=!0,M+=1):R=re,u.chars?(O=u.getCharData(re,H.fStyle,u.getFontByName(o.f).fFamily),V=_?0:O.w*o.finalSize/100):V=u.measureText(R,o.f,o.finalSize),re===" "?ae+=V+W:(F+=V+W+ae,ae=0),S.push({l:V,an:V,add:L,n:_,anIndexes:[],val:R,line:M,animatorJustifyOffset:0}),I==2){if(L+=V,R===""||R===" "||E===C-1){for((R===""||R===" ")&&(L-=V);j<=E;)S[j].an=L,S[j].ind=P,S[j].extra=V,j+=1;P+=1,L=0}}else if(I==3){if(L+=V,R===""||E===C-1){for(R===""&&(L-=V);j<=E;)S[j].an=L,S[j].ind=P,S[j].extra=V,j+=1;L=0,P+=1}}else S[P].ind=P,S[P].extra=0,P+=1;if(o.l=S,N=F>N?F:N,D.push(F),o.sz)o.boxWidth=o.sz[0],o.justifyOffset=0;else switch(o.boxWidth=N,o.j){case 1:o.justifyOffset=-o.boxWidth;break;case 2:o.justifyOffset=-o.boxWidth/2;break;default:o.justifyOffset=0}o.lineWidths=D;var J=T.a,te,Z;B=J.length;var X,de,he=[];for(G=0;G<B;G+=1){for(te=J[G],te.a.sc&&(o.strokeColorAnim=!0),te.a.sw&&(o.strokeWidthAnim=!0),(te.a.fc||te.a.fh||te.a.fs||te.a.fb)&&(o.fillColorAnim=!0),de=0,X=te.s.b,E=0;E<C;E+=1)Z=S[E],Z.anIndexes[G]=de,(X==1&&Z.val!==""||X==2&&Z.val!==""&&Z.val!==" "||X==3&&(Z.n||Z.val==" "||E==C-1)||X==4&&(Z.n||E==C-1))&&(te.s.rn===1&&he.push(de),de+=1);T.a[G].s.totalChars=de;var ne=-1,ue;if(te.s.rn===1)for(E=0;E<C;E+=1)Z=S[E],ne!=Z.anIndexes[G]&&(ne=Z.anIndexes[G],ue=he.splice(Math.floor(Math.random()*he.length),1)[0]),Z.anIndexes[G]=ue}o.yOffset=o.finalLineHeight||o.finalSize*1.2,o.ls=o.ls||0,o.ascent=H.ascent*o.finalSize/100},TextProperty.prototype.updateDocumentData=function(o,u){u=u===void 0?this.keysIndex:u;var T=this.copyData({},this.data.d.k[u].s);T=this.copyData(T,o),this.data.d.k[u].s=T,this.recalculate(u),this.setCurrentData(T),this.elem.addDynamicProperty(this)},TextProperty.prototype.recalculate=function(o){var u=this.data.d.k[o].s;u.__complete=!1,this.keysIndex=0,this._isFirstFrame=!0,this.getValue(u)},TextProperty.prototype.canResizeFont=function(o){this.canResize=o,this.recalculate(this.keysIndex),this.elem.addDynamicProperty(this)},TextProperty.prototype.setMinimumFontSize=function(o){this.minimumFontSize=Math.floor(o)||1,this.recalculate(this.keysIndex),this.elem.addDynamicProperty(this)};var TextSelectorProp=function(){var o=Math.max,u=Math.min,T=Math.floor;function S(C,_){this._currentTextLength=-1,this.k=!1,this.data=_,this.elem=C,this.comp=C.comp,this.finalS=0,this.finalE=0,this.initDynamicPropertyContainer(C),this.s=PropertyFactory.getProp(C,_.s||{k:0},0,0,this),"e"in _?this.e=PropertyFactory.getProp(C,_.e,0,0,this):this.e={v:100},this.o=PropertyFactory.getProp(C,_.o||{k:0},0,0,this),this.xe=PropertyFactory.getProp(C,_.xe||{k:0},0,0,this),this.ne=PropertyFactory.getProp(C,_.ne||{k:0},0,0,this),this.sm=PropertyFactory.getProp(C,_.sm||{k:100},0,0,this),this.a=PropertyFactory.getProp(C,_.a,0,.01,this),this.dynamicProperties.length||this.getValue()}S.prototype={getMult:function(_){this._currentTextLength!==this.elem.textProperty.currentData.l.length&&this.getValue();var P=0,R=0,I=1,L=1;this.ne.v>0?P=this.ne.v/100:R=-this.ne.v/100,this.xe.v>0?I=1-this.xe.v/100:L=1+this.xe.v/100;var j=BezierFactory.getBezierEasing(P,R,I,L).get,M=0,D=this.finalS,F=this.finalE,N=this.data.sh;if(N===2)F===D?M=_>=F?1:0:M=o(0,u(.5/(F-D)+(_-D)/(F-D),1)),M=j(M);else if(N===3)F===D?M=_>=F?0:1:M=1-o(0,u(.5/(F-D)+(_-D)/(F-D),1)),M=j(M);else if(N===4)F===D?M=0:(M=o(0,u(.5/(F-D)+(_-D)/(F-D),1)),M<.5?M*=2:M=1-2*(M-.5)),M=j(M);else if(N===5){if(F===D)M=0;else{var G=F-D;_=u(o(0,_+.5-D),F-D);var B=-G/2+_,H=G/2;M=Math.sqrt(1-B*B/(H*H))}M=j(M)}else N===6?(F===D?M=0:(_=u(o(0,_+.5-D),F-D),M=(1+Math.cos(Math.PI+Math.PI*2*_/(F-D)))/2),M=j(M)):(_>=T(D)&&(_-D<0?M=o(0,u(u(F,1)-(D-_),1)):M=o(0,u(F-_,1))),M=j(M));if(this.sm.v!==100){var O=this.sm.v*.01;O===0&&(O=1e-8);var V=.5-O*.5;M<V?M=0:(M=(M-V)/O,M>1&&(M=1))}return M*this.a.v},getValue:function(_){this.iterateDynamicProperties(),this._mdf=_||this._mdf,this._currentTextLength=this.elem.textProperty.currentData.l.length||0,_&&this.data.r===2&&(this.e.v=this._currentTextLength);var P=this.data.r===2?1:100/this.data.totalChars,R=this.o.v/P,I=this.s.v/P+R,L=this.e.v/P+R;if(I>L){var j=I;I=L,L=j}this.finalS=I,this.finalE=L}},extendPrototype([DynamicPropertyContainer],S);function E(C,_,P){return new S(C,_)}return{getTextSelectorProp:E}}();function TextAnimatorDataProperty(o,u,T){var S={propType:!1},E=PropertyFactory.getProp,C=u.a;this.a={r:C.r?E(o,C.r,0,degToRads,T):S,rx:C.rx?E(o,C.rx,0,degToRads,T):S,ry:C.ry?E(o,C.ry,0,degToRads,T):S,sk:C.sk?E(o,C.sk,0,degToRads,T):S,sa:C.sa?E(o,C.sa,0,degToRads,T):S,s:C.s?E(o,C.s,1,.01,T):S,a:C.a?E(o,C.a,1,0,T):S,o:C.o?E(o,C.o,0,.01,T):S,p:C.p?E(o,C.p,1,0,T):S,sw:C.sw?E(o,C.sw,0,0,T):S,sc:C.sc?E(o,C.sc,1,0,T):S,fc:C.fc?E(o,C.fc,1,0,T):S,fh:C.fh?E(o,C.fh,0,0,T):S,fs:C.fs?E(o,C.fs,0,.01,T):S,fb:C.fb?E(o,C.fb,0,.01,T):S,t:C.t?E(o,C.t,0,0,T):S},this.s=TextSelectorProp.getTextSelectorProp(o,u.s,T),this.s.t=u.s.t}function TextAnimatorProperty(o,u,T){this._isFirstFrame=!0,this._hasMaskedPath=!1,this._frameId=-1,this._textData=o,this._renderType=u,this._elem=T,this._animatorsData=createSizedArray(this._textData.a.length),this._pathData={},this._moreOptions={alignment:{}},this.renderedLetters=[],this.lettersChangedFlag=!1,this.initDynamicPropertyContainer(T)}TextAnimatorProperty.prototype.searchProperties=function(){var o,u=this._textData.a.length,T,S=PropertyFactory.getProp;for(o=0;o<u;o+=1)T=this._textData.a[o],this._animatorsData[o]=new TextAnimatorDataProperty(this._elem,T,this);this._textData.p&&"m"in this._textData.p?(this._pathData={a:S(this._elem,this._textData.p.a,0,0,this),f:S(this._elem,this._textData.p.f,0,0,this),l:S(this._elem,this._textData.p.l,0,0,this),r:S(this._elem,this._textData.p.r,0,0,this),p:S(this._elem,this._textData.p.p,0,0,this),m:this._elem.maskManager.getMaskProperty(this._textData.p.m)},this._hasMaskedPath=!0):this._hasMaskedPath=!1,this._moreOptions.alignment=S(this._elem,this._textData.m.a,1,0,this)},TextAnimatorProperty.prototype.getMeasures=function(o,u){if(this.lettersChangedFlag=u,!(!this._mdf&&!this._isFirstFrame&&!u&&(!this._hasMaskedPath||!this._pathData.m._mdf))){this._isFirstFrame=!1;var T=this._moreOptions.alignment.v,S=this._animatorsData,E=this._textData,C=this.mHelper,_=this._renderType,P=this.renderedLetters.length,R,I,L,j,M=o.l,D,F,N,G,B,H,O,V,U,W,K,Y,ee,oe,se;if(this._hasMaskedPath){if(se=this._pathData.m,!this._pathData.n||this._pathData._mdf){var Q=se.v;this._pathData.r.v&&(Q=Q.reverse()),D={tLength:0,segments:[]},j=Q._length-1;var ie;for(Y=0,L=0;L<j;L+=1)ie=bez.buildBezierData(Q.v[L],Q.v[L+1],[Q.o[L][0]-Q.v[L][0],Q.o[L][1]-Q.v[L][1]],[Q.i[L+1][0]-Q.v[L+1][0],Q.i[L+1][1]-Q.v[L+1][1]]),D.tLength+=ie.segmentLength,D.segments.push(ie),Y+=ie.segmentLength;L=j,se.v.c&&(ie=bez.buildBezierData(Q.v[L],Q.v[0],[Q.o[L][0]-Q.v[L][0],Q.o[L][1]-Q.v[L][1]],[Q.i[0][0]-Q.v[0][0],Q.i[0][1]-Q.v[0][1]]),D.tLength+=ie.segmentLength,D.segments.push(ie),Y+=ie.segmentLength),this._pathData.pi=D}if(D=this._pathData.pi,F=this._pathData.f.v,O=0,H=1,G=0,B=!0,W=D.segments,F<0&&se.v.c)for(D.tLength<Math.abs(F)&&(F=-Math.abs(F)%D.tLength),O=W.length-1,U=W[O].points,H=U.length-1;F<0;)F+=U[H].partialLength,H-=1,H<0&&(O-=1,U=W[O].points,H=U.length-1);U=W[O].points,V=U[H-1],N=U[H],K=N.partialLength}j=M.length,R=0,I=0;var ae=o.finalSize*1.2*.714,re=!0,J,te,Z,X,de;X=S.length;var he,ne=-1,ue,ce,fe,ve=F,Te=O,Se=H,ke=-1,we,Le,pe,Me,Pe,Ue,qe,Ie,Xe="",et=this.defaultPropsArray,tt;if(o.j===2||o.j===1){var Ye=0,ze=0,Ze=o.j===2?-.5:-1,He=0,rt=!0;for(L=0;L<j;L+=1)if(M[L].n){for(Ye&&(Ye+=ze);He<L;)M[He].animatorJustifyOffset=Ye,He+=1;Ye=0,rt=!0}else{for(Z=0;Z<X;Z+=1)J=S[Z].a,J.t.propType&&(rt&&o.j===2&&(ze+=J.t.v*Ze),te=S[Z].s,he=te.getMult(M[L].anIndexes[Z],E.a[Z].s.totalChars),he.length?Ye+=J.t.v*he[0]*Ze:Ye+=J.t.v*he*Ze);rt=!1}for(Ye&&(Ye+=ze);He<L;)M[He].animatorJustifyOffset=Ye,He+=1}for(L=0;L<j;L+=1){if(C.reset(),we=1,M[L].n)R=0,I+=o.yOffset,I+=re?1:0,F=ve,re=!1,this._hasMaskedPath&&(O=Te,H=Se,U=W[O].points,V=U[H-1],N=U[H],K=N.partialLength,G=0),Xe="",Ie="",Ue="",tt="",et=this.defaultPropsArray;else{if(this._hasMaskedPath){if(ke!==M[L].line){switch(o.j){case 1:F+=Y-o.lineWidths[M[L].line];break;case 2:F+=(Y-o.lineWidths[M[L].line])/2;break}ke=M[L].line}ne!==M[L].ind&&(M[ne]&&(F+=M[ne].extra),F+=M[L].an/2,ne=M[L].ind),F+=T[0]*M[L].an*.005;var it=0;for(Z=0;Z<X;Z+=1)J=S[Z].a,J.p.propType&&(te=S[Z].s,he=te.getMult(M[L].anIndexes[Z],E.a[Z].s.totalChars),he.length?it+=J.p.v[0]*he[0]:it+=J.p.v[0]*he),J.a.propType&&(te=S[Z].s,he=te.getMult(M[L].anIndexes[Z],E.a[Z].s.totalChars),he.length?it+=J.a.v[0]*he[0]:it+=J.a.v[0]*he);for(B=!0,this._pathData.a.v&&(F=M[0].an*.5+(Y-this._pathData.f.v-M[0].an*.5-M[M.length-1].an*.5)*ne/(j-1),F+=this._pathData.f.v);B;)G+K>=F+it||!U?(ee=(F+it-G)/N.partialLength,ce=V.point[0]+(N.point[0]-V.point[0])*ee,fe=V.point[1]+(N.point[1]-V.point[1])*ee,C.translate(-T[0]*M[L].an*.005,-(T[1]*ae)*.01),B=!1):U&&(G+=N.partialLength,H+=1,H>=U.length&&(H=0,O+=1,W[O]?U=W[O].points:se.v.c?(H=0,O=0,U=W[O].points):(G-=N.partialLength,U=null)),U&&(V=N,N=U[H],K=N.partialLength));ue=M[L].an/2-M[L].add,C.translate(-ue,0,0)}else ue=M[L].an/2-M[L].add,C.translate(-ue,0,0),C.translate(-T[0]*M[L].an*.005,-T[1]*ae*.01,0);for(Z=0;Z<X;Z+=1)J=S[Z].a,J.t.propType&&(te=S[Z].s,he=te.getMult(M[L].anIndexes[Z],E.a[Z].s.totalChars),(R!==0||o.j!==0)&&(this._hasMaskedPath?he.length?F+=J.t.v*he[0]:F+=J.t.v*he:he.length?R+=J.t.v*he[0]:R+=J.t.v*he));for(o.strokeWidthAnim&&(pe=o.sw||0),o.strokeColorAnim&&(o.sc?Le=[o.sc[0],o.sc[1],o.sc[2]]:Le=[0,0,0]),o.fillColorAnim&&o.fc&&(Me=[o.fc[0],o.fc[1],o.fc[2]]),Z=0;Z<X;Z+=1)J=S[Z].a,J.a.propType&&(te=S[Z].s,he=te.getMult(M[L].anIndexes[Z],E.a[Z].s.totalChars),he.length?C.translate(-J.a.v[0]*he[0],-J.a.v[1]*he[1],J.a.v[2]*he[2]):C.translate(-J.a.v[0]*he,-J.a.v[1]*he,J.a.v[2]*he));for(Z=0;Z<X;Z+=1)J=S[Z].a,J.s.propType&&(te=S[Z].s,he=te.getMult(M[L].anIndexes[Z],E.a[Z].s.totalChars),he.length?C.scale(1+(J.s.v[0]-1)*he[0],1+(J.s.v[1]-1)*he[1],1):C.scale(1+(J.s.v[0]-1)*he,1+(J.s.v[1]-1)*he,1));for(Z=0;Z<X;Z+=1){if(J=S[Z].a,te=S[Z].s,he=te.getMult(M[L].anIndexes[Z],E.a[Z].s.totalChars),J.sk.propType&&(he.length?C.skewFromAxis(-J.sk.v*he[0],J.sa.v*he[1]):C.skewFromAxis(-J.sk.v*he,J.sa.v*he)),J.r.propType&&(he.length?C.rotateZ(-J.r.v*he[2]):C.rotateZ(-J.r.v*he)),J.ry.propType&&(he.length?C.rotateY(J.ry.v*he[1]):C.rotateY(J.ry.v*he)),J.rx.propType&&(he.length?C.rotateX(J.rx.v*he[0]):C.rotateX(J.rx.v*he)),J.o.propType&&(he.length?we+=(J.o.v*he[0]-we)*he[0]:we+=(J.o.v*he-we)*he),o.strokeWidthAnim&&J.sw.propType&&(he.length?pe+=J.sw.v*he[0]:pe+=J.sw.v*he),o.strokeColorAnim&&J.sc.propType)for(Pe=0;Pe<3;Pe+=1)he.length?Le[Pe]+=(J.sc.v[Pe]-Le[Pe])*he[0]:Le[Pe]+=(J.sc.v[Pe]-Le[Pe])*he;if(o.fillColorAnim&&o.fc){if(J.fc.propType)for(Pe=0;Pe<3;Pe+=1)he.length?Me[Pe]+=(J.fc.v[Pe]-Me[Pe])*he[0]:Me[Pe]+=(J.fc.v[Pe]-Me[Pe])*he;J.fh.propType&&(he.length?Me=addHueToRGB(Me,J.fh.v*he[0]):Me=addHueToRGB(Me,J.fh.v*he)),J.fs.propType&&(he.length?Me=addSaturationToRGB(Me,J.fs.v*he[0]):Me=addSaturationToRGB(Me,J.fs.v*he)),J.fb.propType&&(he.length?Me=addBrightnessToRGB(Me,J.fb.v*he[0]):Me=addBrightnessToRGB(Me,J.fb.v*he))}}for(Z=0;Z<X;Z+=1)J=S[Z].a,J.p.propType&&(te=S[Z].s,he=te.getMult(M[L].anIndexes[Z],E.a[Z].s.totalChars),this._hasMaskedPath?he.length?C.translate(0,J.p.v[1]*he[0],-J.p.v[2]*he[1]):C.translate(0,J.p.v[1]*he,-J.p.v[2]*he):he.length?C.translate(J.p.v[0]*he[0],J.p.v[1]*he[1],-J.p.v[2]*he[2]):C.translate(J.p.v[0]*he,J.p.v[1]*he,-J.p.v[2]*he));if(o.strokeWidthAnim&&(Ue=pe<0?0:pe),o.strokeColorAnim&&(qe="rgb("+Math.round(Le[0]*255)+","+Math.round(Le[1]*255)+","+Math.round(Le[2]*255)+")"),o.fillColorAnim&&o.fc&&(Ie="rgb("+Math.round(Me[0]*255)+","+Math.round(Me[1]*255)+","+Math.round(Me[2]*255)+")"),this._hasMaskedPath){if(C.translate(0,-o.ls),C.translate(0,T[1]*ae*.01+I,0),this._pathData.p.v){oe=(N.point[1]-V.point[1])/(N.point[0]-V.point[0]);var st=Math.atan(oe)*180/Math.PI;N.point[0]<V.point[0]&&(st+=180),C.rotate(-st*Math.PI/180)}C.translate(ce,fe,0),F-=T[0]*M[L].an*.005,M[L+1]&&ne!==M[L+1].ind&&(F+=M[L].an/2,F+=o.tr*.001*o.finalSize)}else{switch(C.translate(R,I,0),o.ps&&C.translate(o.ps[0],o.ps[1]+o.ascent,0),o.j){case 1:C.translate(M[L].animatorJustifyOffset+o.justifyOffset+(o.boxWidth-o.lineWidths[M[L].line]),0,0);break;case 2:C.translate(M[L].animatorJustifyOffset+o.justifyOffset+(o.boxWidth-o.lineWidths[M[L].line])/2,0,0);break}C.translate(0,-o.ls),C.translate(ue,0,0),C.translate(T[0]*M[L].an*.005,T[1]*ae*.01,0),R+=M[L].l+o.tr*.001*o.finalSize}_==="html"?Xe=C.toCSS():_==="svg"?Xe=C.to2dCSS():et=[C.props[0],C.props[1],C.props[2],C.props[3],C.props[4],C.props[5],C.props[6],C.props[7],C.props[8],C.props[9],C.props[10],C.props[11],C.props[12],C.props[13],C.props[14],C.props[15]],tt=we}P<=L?(de=new LetterProps(tt,Ue,qe,Ie,Xe,et),this.renderedLetters.push(de),P+=1,this.lettersChangedFlag=!0):(de=this.renderedLetters[L],this.lettersChangedFlag=de.update(tt,Ue,qe,Ie,Xe,et)||this.lettersChangedFlag)}}},TextAnimatorProperty.prototype.getValue=function(){this._elem.globalData.frameId!==this._frameId&&(this._frameId=this._elem.globalData.frameId,this.iterateDynamicProperties())},TextAnimatorProperty.prototype.mHelper=new Matrix,TextAnimatorProperty.prototype.defaultPropsArray=[],extendPrototype([DynamicPropertyContainer],TextAnimatorProperty);function ITextElement(){}ITextElement.prototype.initElement=function(o,u,T){this.lettersChangedFlag=!0,this.initFrame(),this.initBaseData(o,u,T),this.textProperty=new TextProperty(this,o.t,this.dynamicProperties),this.textAnimator=new TextAnimatorProperty(o.t,this.renderType,this),this.initTransform(o,u,T),this.initHierarchy(),this.initRenderable(),this.initRendererElement(),this.createContainerElements(),this.createRenderableComponents(),this.createContent(),this.hide(),this.textAnimator.searchProperties(this.dynamicProperties)},ITextElement.prototype.prepareFrame=function(o){this._mdf=!1,this.prepareRenderableFrame(o),this.prepareProperties(o,this.isInRange)},ITextElement.prototype.createPathShape=function(o,u){var T,S=u.length,E,C="";for(T=0;T<S;T+=1)u[T].ty==="sh"&&(E=u[T].ks.k,C+=buildShapeString(E,E.i.length,!0,o));return C},ITextElement.prototype.updateDocumentData=function(o,u){this.textProperty.updateDocumentData(o,u)},ITextElement.prototype.canResizeFont=function(o){this.textProperty.canResizeFont(o)},ITextElement.prototype.setMinimumFontSize=function(o){this.textProperty.setMinimumFontSize(o)},ITextElement.prototype.applyTextPropertiesToMatrix=function(o,u,T,S,E){switch(o.ps&&u.translate(o.ps[0],o.ps[1]+o.ascent,0),u.translate(0,-o.ls,0),o.j){case 1:u.translate(o.justifyOffset+(o.boxWidth-o.lineWidths[T]),0,0);break;case 2:u.translate(o.justifyOffset+(o.boxWidth-o.lineWidths[T])/2,0,0);break}u.translate(S,E,0)},ITextElement.prototype.buildColor=function(o){return"rgb("+Math.round(o[0]*255)+","+Math.round(o[1]*255)+","+Math.round(o[2]*255)+")"},ITextElement.prototype.emptyProp=new LetterProps,ITextElement.prototype.destroy=function(){},ITextElement.prototype.validateText=function(){(this.textProperty._mdf||this.textProperty._isFirstFrame)&&(this.buildNewText(),this.textProperty._isFirstFrame=!1,this.textProperty._mdf=!1)};var emptyShapeData={shapes:[]};function SVGTextLottieElement(o,u,T){this.textSpans=[],this.renderType="svg",this.initElement(o,u,T)}extendPrototype([BaseElement,TransformElement,SVGBaseElement,HierarchyElement,FrameElement,RenderableDOMElement,ITextElement],SVGTextLottieElement),SVGTextLottieElement.prototype.createContent=function(){this.data.singleShape&&!this.globalData.fontManager.chars&&(this.textContainer=createNS("text"))},SVGTextLottieElement.prototype.buildTextContents=function(o){for(var u=0,T=o.length,S=[],E="";u<T;)o[u]==="\r"||o[u]==="�"?(S.push(E),E=""):E+=o[u],u+=1;return S.push(E),S},SVGTextLottieElement.prototype.buildShapeData=function(o,u){if(o.shapes&&o.shapes.length){var T=o.shapes[0];if(T.it){var S=T.it[T.it.length-1];S.s&&(S.s.k[0]=u,S.s.k[1]=u)}}return o},SVGTextLottieElement.prototype.buildNewText=function(){this.addDynamicProperty(this);var o,u,T=this.textProperty.currentData;this.renderedLetters=createSizedArray(T?T.l.length:0),T.fc?this.layerElement.setAttribute("fill",this.buildColor(T.fc)):this.layerElement.setAttribute("fill","rgba(0,0,0,0)"),T.sc&&(this.layerElement.setAttribute("stroke",this.buildColor(T.sc)),this.layerElement.setAttribute("stroke-width",T.sw)),this.layerElement.setAttribute("font-size",T.finalSize);var S=this.globalData.fontManager.getFontByName(T.f);if(S.fClass)this.layerElement.setAttribute("class",S.fClass);else{this.layerElement.setAttribute("font-family",S.fFamily);var E=T.fWeight,C=T.fStyle;this.layerElement.setAttribute("font-style",C),this.layerElement.setAttribute("font-weight",E)}this.layerElement.setAttribute("aria-label",T.t);var _=T.l||[],P=!!this.globalData.fontManager.chars;u=_.length;var R,I=this.mHelper,L="",j=this.data.singleShape,M=0,D=0,F=!0,N=T.tr*.001*T.finalSize;if(j&&!P&&!T.sz){var G=this.textContainer,B="start";switch(T.j){case 1:B="end";break;case 2:B="middle";break;default:B="start";break}G.setAttribute("text-anchor",B),G.setAttribute("letter-spacing",N);var H=this.buildTextContents(T.finalText);for(u=H.length,D=T.ps?T.ps[1]+T.ascent:0,o=0;o<u;o+=1)R=this.textSpans[o].span||createNS("tspan"),R.textContent=H[o],R.setAttribute("x",0),R.setAttribute("y",D),R.style.display="inherit",G.appendChild(R),this.textSpans[o]||(this.textSpans[o]={span:null,glyph:null}),this.textSpans[o].span=R,D+=T.finalLineHeight;this.layerElement.appendChild(G)}else{var O=this.textSpans.length,V;for(o=0;o<u;o+=1){if(this.textSpans[o]||(this.textSpans[o]={span:null,childSpan:null,glyph:null}),!P||!j||o===0){if(R=O>o?this.textSpans[o].span:createNS(P?"g":"text"),O<=o){if(R.setAttribute("stroke-linecap","butt"),R.setAttribute("stroke-linejoin","round"),R.setAttribute("stroke-miterlimit","4"),this.textSpans[o].span=R,P){var U=createNS("g");R.appendChild(U),this.textSpans[o].childSpan=U}this.textSpans[o].span=R,this.layerElement.appendChild(R)}R.style.display="inherit"}if(I.reset(),j&&(_[o].n&&(M=-N,D+=T.yOffset,D+=F?1:0,F=!1),this.applyTextPropertiesToMatrix(T,I,_[o].line,M,D),M+=_[o].l||0,M+=N),P){V=this.globalData.fontManager.getCharData(T.finalText[o],S.fStyle,this.globalData.fontManager.getFontByName(T.f).fFamily);var W;if(V.t===1)W=new SVGCompElement(V.data,this.globalData,this);else{var K=emptyShapeData;V.data&&V.data.shapes&&(K=this.buildShapeData(V.data,T.finalSize)),W=new SVGShapeElement(K,this.globalData,this)}if(this.textSpans[o].glyph){var Y=this.textSpans[o].glyph;this.textSpans[o].childSpan.removeChild(Y.layerElement),Y.destroy()}this.textSpans[o].glyph=W,W._debug=!0,W.prepareFrame(0),W.renderFrame(),this.textSpans[o].childSpan.appendChild(W.layerElement),V.t===1&&this.textSpans[o].childSpan.setAttribute("transform","scale("+T.finalSize/100+","+T.finalSize/100+")")}else j&&R.setAttribute("transform","translate("+I.props[12]+","+I.props[13]+")"),R.textContent=_[o].val,R.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve")}j&&R&&R.setAttribute("d",L)}for(;o<this.textSpans.length;)this.textSpans[o].span.style.display="none",o+=1;this._sizeChanged=!0},SVGTextLottieElement.prototype.sourceRectAtTime=function(){if(this.prepareFrame(this.comp.renderedFrame-this.data.st),this.renderInnerContent(),this._sizeChanged){this._sizeChanged=!1;var o=this.layerElement.getBBox();this.bbox={top:o.y,left:o.x,width:o.width,height:o.height}}return this.bbox},SVGTextLottieElement.prototype.getValue=function(){var o,u=this.textSpans.length,T;for(this.renderedFrame=this.comp.renderedFrame,o=0;o<u;o+=1)T=this.textSpans[o].glyph,T&&(T.prepareFrame(this.comp.renderedFrame-this.data.st),T._mdf&&(this._mdf=!0))},SVGTextLottieElement.prototype.renderInnerContent=function(){if(this.validateText(),(!this.data.singleShape||this._mdf)&&(this.textAnimator.getMeasures(this.textProperty.currentData,this.lettersChangedFlag),this.lettersChangedFlag||this.textAnimator.lettersChangedFlag)){this._sizeChanged=!0;var o,u,T=this.textAnimator.renderedLetters,S=this.textProperty.currentData.l;u=S.length;var E,C,_;for(o=0;o<u;o+=1)S[o].n||(E=T[o],C=this.textSpans[o].span,_=this.textSpans[o].glyph,_&&_.renderFrame(),E._mdf.m&&C.setAttribute("transform",E.m),E._mdf.o&&C.setAttribute("opacity",E.o),E._mdf.sw&&C.setAttribute("stroke-width",E.sw),E._mdf.sc&&C.setAttribute("stroke",E.sc),E._mdf.fc&&C.setAttribute("fill",E.fc))}};function ISolidElement(o,u,T){this.initElement(o,u,T)}extendPrototype([IImageElement],ISolidElement),ISolidElement.prototype.createContent=function(){var o=createNS("rect");o.setAttribute("width",this.data.sw),o.setAttribute("height",this.data.sh),o.setAttribute("fill",this.data.sc),this.layerElement.appendChild(o)};function NullElement(o,u,T){this.initFrame(),this.initBaseData(o,u,T),this.initFrame(),this.initTransform(o,u,T),this.initHierarchy()}NullElement.prototype.prepareFrame=function(o){this.prepareProperties(o,!0)},NullElement.prototype.renderFrame=function(){},NullElement.prototype.getBaseElement=function(){return null},NullElement.prototype.destroy=function(){},NullElement.prototype.sourceRectAtTime=function(){},NullElement.prototype.hide=function(){},extendPrototype([BaseElement,TransformElement,HierarchyElement,FrameElement],NullElement);function SVGRendererBase(){}extendPrototype([BaseRenderer],SVGRendererBase),SVGRendererBase.prototype.createNull=function(o){return new NullElement(o,this.globalData,this)},SVGRendererBase.prototype.createShape=function(o){return new SVGShapeElement(o,this.globalData,this)},SVGRendererBase.prototype.createText=function(o){return new SVGTextLottieElement(o,this.globalData,this)},SVGRendererBase.prototype.createImage=function(o){return new IImageElement(o,this.globalData,this)},SVGRendererBase.prototype.createSolid=function(o){return new ISolidElement(o,this.globalData,this)},SVGRendererBase.prototype.configAnimation=function(o){this.svgElement.setAttribute("xmlns","http://www.w3.org/2000/svg"),this.svgElement.setAttribute("xmlns:xlink","http://www.w3.org/1999/xlink"),this.renderConfig.viewBoxSize?this.svgElement.setAttribute("viewBox",this.renderConfig.viewBoxSize):this.svgElement.setAttribute("viewBox","0 0 "+o.w+" "+o.h),this.renderConfig.viewBoxOnly||(this.svgElement.setAttribute("width",o.w),this.svgElement.setAttribute("height",o.h),this.svgElement.style.width="100%",this.svgElement.style.height="100%",this.svgElement.style.transform="translate3d(0,
3220,0)",this.svgElement.style.contentVisibility=this.renderConfig.contentVisibility),this.renderConfig.width&&this.svgElement.setAttribute("width",this.renderConfig.width),this.renderConfig.height&&this.svgElement.setAttribute("height",this.renderConfig.height),this.renderConfig.className&&this.svgElement.setAttribute("class",this.renderConfig.className),this.renderConfig.id&&this.svgElement.setAttribute("id",this.renderConfig.id),this.renderConfig.focusable!==void 0&&this.svgElement.setAttribute("focusable",this.renderConfig.focusable),this.svgElement.setAttribute("preserveAspectRatio",this.renderConfig.preserveAspectRatio),this.animationItem.wrapper.appendChild(this.svgElement);var u=this.globalData.defs;this.setupGlobalData(o,u),this.globalData.progressiveLoad=this.renderConfig.progressiveLoad,this.data=o;var T=createNS("clipPath"),S=createNS("rect");S.setAttribute("width",o.w),S.setAttribute("height",o.h),S.setAttribute("x",0),S.setAttribute("y",0);var E=createElementID();T.setAttribute("id",E),T.appendChild(S),this.layerElement.setAttribute("clip-path","url("+getLocationHref()+"#"+E+")"),u.appendChild(T),this.layers=o.layers,this.elements=createSizedArray(o.layers.length)},SVGRendererBase.prototype.destroy=function(){this.animationItem.wrapper&&(this.animationItem.wrapper.innerText=""),this.layerElement=null,this.globalData.defs=null;var o,u=this.layers?this.layers.length:0;for(o=0;o<u;o+=1)this.elements[o]&&this.elements[o].destroy&&this.elements[o].destroy();this.elements.length=0,this.destroyed=!0,this.animationItem=null},SVGRendererBase.prototype.updateContainerSize=function(){},SVGRendererBase.prototype.findIndexByInd=function(o){var u=0,T=this.layers.length;for(u=0;u<T;u+=1)if(this.layers[u].ind===o)return u;return-1},SVGRendererBase.prototype.buildItem=function(o){var u=this.elements;if(!(u[o]||this.layers[o].ty===99)){u[o]=!0;var T=this.createItem(this.layers[o]);if(u[o]=T,getExpressionsPlugin()&&(this.layers[o].ty===0&&this.globalData.projectInterface.registerComposition(T),T.initExpressions()),this.appendElementInPos(T,o),this.layers[o].tt){var S="tp"in this.layers[o]?this.findIndexByInd(this.layers[o].tp):o-1;if(S===-1)return;if(!this.elements[S]||this.elements[S]===!0)this.buildItem(S),this.addPendingElement(T);else{var E=u[S],C=E.getMatte(this.layers[o].tt);T.setMatte(C)}}}},SVGRendererBase.prototype.checkPendingElements=function(){for(;this.pendingElements.length;){var o=this.pendingElements.pop();if(o.checkParenting(),o.data.tt)for(var u=0,T=this.elements.length;u<T;){if(this.elements[u]===o){var S="tp"in o.data?this.findIndexByInd(o.data.tp):u-1,E=this.elements[S],C=E.getMatte(this.layers[u].tt);o.setMatte(C);break}u+=1}}},SVGRendererBase.prototype.renderFrame=function(o){if(!(this.renderedFrame===o||this.destroyed)){o===null?o=this.renderedFrame:this.renderedFrame=o,this.globalData.frameNum=o,this.globalData.frameId+=1,this.globalData.projectInterface.currentFrame=o,this.globalData._mdf=!1;var u,T=this.layers.length;for(this.completeLayers||this.checkLayers(o),u=T-1;u>=0;u-=1)(this.completeLayers||this.elements[u])&&this.elements[u].prepareFrame(o-this.layers[u].st);if(this.globalData._mdf)for(u=0;u<T;u+=1)(this.completeLayers||this.elements[u])&&this.elements[u].renderFrame()}},SVGRendererBase.prototype.appendElementInPos=function(o,u){var T=o.getBaseElement();if(T){for(var S=0,E;S<u;)this.elements[S]&&this.elements[S]!==!0&&this.elements[S].getBaseElement()&&(E=this.elements[S].getBaseElement()),S+=1;E?this.layerElement.insertBefore(T,E):this.layerElement.appendChild(T)}},SVGRendererBase.prototype.hide=function(){this.layerElement.style.display="none"},SVGRendererBase.prototype.show=function(){this.layerElement.style.display="block"};function ICompElement(){}extendPrototype([BaseElement,TransformElement,HierarchyElement,FrameElement,RenderableDOMElement],ICompElement),ICompElement.prototype.initElement=function(o,u,T){this.initFrame(),this.initBaseData(o,u,T),this.initTransform(o,u,T),this.initRenderable(),this.initHierarchy(),this.initRendererElement(),this.createContainerElements(),this.createRenderableComponents(),(this.data.xt||!u.progressiveLoad)&&this.buildAllItems(),this.hide()}
vendor: 4,669 bytes, line 322
322,ICompElement.prototype.prepareFrame=function(o){if(this._mdf=!1,this.prepareRenderableFrame(o),this.prepareProperties(o,this.isInRange),!(!this.isInRange&&!this.data.xt)){if(this.tm._placeholder)this.renderedFrame=o/this.data.sr;else{var u=this.tm.v;u===this.data.op&&(u=this.data.op-1),this.renderedFrame=u}var T,S=this.elements.length;for(this.completeLayers||this.checkLayers(this.renderedFrame),T=S-1;T>=0;T-=1)(this.completeLayers||this.elements[T])&&(this.elements[T].prepareFrame(this.renderedFrame-this.layers[T].st),this.elements[T]._mdf&&(this._mdf=!0))}},ICompElement.prototype.renderInnerContent=function(){var o,u=this.layers.length;for(o=0;o<u;o+=1)(this.completeLayers||this.elements[o])&&this.elements[o].renderFrame()},ICompElement.prototype.setElements=function(o){this.elements=o},ICompElement.prototype.getElements=function(){return this.elements},ICompElement.prototype.destroyElements=function(){var o,u=this.layers.length;for(o=0;o<u;o+=1)this.elements[o]&&this.elements[o].destroy()},ICompElement.prototype.destroy=function(){this.destroyElements(),this.destroyBaseElement()};function SVGCompElement(o,u,T){this.layers=o.layers,this.supports3d=!0,this.completeLayers=!1,this.pendingElements=[],this.elements=this.layers?createSizedArray(this.layers.length):[],this.initElement(o,u,T),this.tm=o.tm?PropertyFactory.getProp(this,o.tm,0,u.frameRate,this):{_placeholder:!0}}extendPrototype([SVGRendererBase,ICompElement,SVGBaseElement],SVGCompElement),SVGCompElement.prototype.createComp=function(o){return new SVGCompElement(o,this.globalData,this)};function SVGRenderer(o,u){this.animationItem=o,this.layers=null,this.renderedFrame=-1,this.svgElement=createNS("svg");var T="";if(u&&u.title){var S=createNS("title"),E=createElementID();S.setAttribute("id",E),S.textContent=u.title,this.svgElement.appendChild(S),T+=E}if(u&&u.description){var C=createNS("desc"),_=createElementID();C.setAttribute("id",_),C.textContent=u.description,this.svgElement.appendChild(C),T+=" "+_}T&&this.svgElement.setAttribute("aria-labelledby",T);var P=createNS("defs");this.svgElement.appendChild(P);var R=createNS("g");this.svgElement.appendChild(R),this.layerElement=R,this.renderConfig={preserveAspectRatio:u&&u.preserveAspectRatio||"xMidYMid meet",imagePreserveAspectRatio:u&&u.imagePreserveAspectRatio||"xMidYMid slice",contentVisibility:u&&u.contentVisibility||"visible",progressiveLoad:u&&u.progressiveLoad||!1,hideOnTransparent:!(u&&u.hideOnTransparent===!1),viewBoxOnly:u&&u.viewBoxOnly||!1,viewBoxSize:u&&u.viewBoxSize||!1,className:u&&u.className||"",id:u&&u.id||"",focusable:u&&u.focusable,filterSize:{width:u&&u.filterSize&&u.filterSize.width||"100%",height:u&&u.filterSize&&u.filterSize.height||"100%",x:u&&u.filterSize&&u.filterSize.x||"0%",y:u&&u.filterSize&&u.filterSize.y||"0%"},width:u&&u.width,height:u&&u.height,runExpressions:!u||u.runExpressions===void 0||u.runExpressions},this.globalData={_mdf:!1,frameNum:-1,defs:P,renderConfig:this.renderConfig},this.elements=[],this.pendingElements=[],this.destroyed=!1,this.rendererType="svg"}extendPrototype([SVGRendererBase],SVGRenderer),SVGRenderer.prototype.createComp=function(o){return new SVGCompElement(o,this.globalData,this)};function ShapeTransformManager(){this.sequences={},this.sequenceList=[],this.transform_key_count=0}ShapeTransformManager.prototype={addTransformSequence:function(u){var T,S=u.length,E="_";for(T=0;T<S;T+=1)E+=u[T].transform.key+"_";var C=this.sequences[E];return C||(C={transforms:[].concat(u),finalTransform:new Matrix,_mdf:!1},this.sequences[E]=C,this.sequenceList.push(C)),C},processSequence:function(u,T){for(var S=0,E=u.transforms.length,C=T;S<E&&!T;){if(u.transforms[S].transform.mProps._mdf){C=!0;break}S+=1}if(C)for(u.finalTransform.reset(),S=E-1;S>=0;S-=1)u.finalTransform.multiply(u.transforms[S].transform.mProps.v);u._mdf=C},processSequences:function(u){var T,S=this.sequenceList.length;for(T=0;T<S;T+=1)this.processSequence(this.sequenceList[T],u)},getNewKey:function(){return this.transform_key_count+=1,"_"+this.transform_key_count}};var lumaLoader=function(){var u="__lottie_element_luma_buffer",T=null,S=null,E=null;function C(){var R=createNS("svg"),I=createNS("filter"),L=createNS("feColorMatrix");return I.setAttribute("id",u),L.setAttribute("type","matrix"),L.setAttribute("color-interpolation-filters","sRGB"),L.setAttribute("values","0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0"),I.appendChild(L),R.appendChild(I),R.setAttribute("id",u+"_svg"),featureSupport.svgLumaHidden&&(R.style.display="none"),R}function _(){T||(E=C(),document.body.appendChild(E),T=createTag("canvas"),S=T.getContext("2d"),S.filter="url
322(#"+u+")",S.fillStyle="rgba(0,0,0,0)",S.fillRect(0,0,1,1))}function P(R){return T||_(),T.width=R.width,T.height=R.height,S.filter="url(#"+u+")",T}return{load:_,get:P}};function createCanvas(o,u){if(featureSupport.offscreenCanvas)return new OffscreenCanvas(o,u);var T=createTag("canvas");return T.width=o,T.height=u,T}var assetLoader=function(){return{loadLumaCanvas:lumaLoader.load,getLumaCanvas:lumaLoader.get,createCanvas}}(),registeredEffects={};function CVEffects(o){var u,T=o.data.ef?o.data.ef.length:0;this.filters=[];var S;for(u=0;u<T;u+=1){S=null;var E=o.data.ef[u].ty;if(registeredEffects[E]){var C=registeredEffects[E].effect;S=new C(o.effectsManager.effectElements[u],o)}S&&this.filters.push(S)}this.filters.length&&o.addRenderableComponent(this)}CVEffects.prototype.renderFrame=function(o){var u,T=this.filters.length;for(u=0;u<T;u+=1)this.filters[u].renderFrame(o)},CVEffects.prototype.getEffects=function(o){var u,T=this.filters.length,S=[];for(u=0;u<T;u+=1)this.filters[u].type===o&&S.push(this.filters[u]);return S};function registerEffect(o,u){registeredEffects[o]={effect:u}}function CVMaskElement(o,u){this.data=o,this.element=u,this.masksProperties=this.data.masksProperties||[],this.viewData=createSizedArray(this.masksProperties.length);var T,S=this.masksProperties.length,E=!1;for(T=0;T<S;T+=1)this.masksProperties[T].mode!=="n"&&(E=!0),this.viewData[T]=ShapePropertyFactory.getShapeProp(this.element,this.masksProperties[T],3);this.hasMasks=E,E&&this.element.addRenderableComponent(this)}CVMaskElement.prototype.renderFrame=function(){if(this.hasMasks){var o=this.element.finalTransform.mat,u=this.element.canvasContext,T,S=this.masksProperties.length,E,C,_;for(u.beginPath(),T=0;T<S;T+=1)if(this.masksProperties[T].mode!=="n"){this.masksProperties[T].inv&&(u.moveTo(0,0),u.lineTo(this.element.globalData.compSize.w,0),u.lineTo(this.element.globalData.compSize.w,this.element.globalData.compSize.h),u.lineTo(0,this.element.globalData.compSize.h),u.lineTo(0,0)),_=this.viewData[T].v,E=o.applyToPointArray(_.v[0][0],_.v[0][1],0),u.moveTo(E[0],E[1]);var P,R=_._length;for(P=1;P<R;P+=1)C=o.applyToTriplePoints(_.o[P-1],_.i[P],_.v[P]),u.bezierCurveTo(C[0],C[1],C[2],C[3],C[4],C[5]);C=o.applyToTriplePoints(_.o[P-1],_.i[0],_.v[0]),u.bezierCurveTo(C[0],C[1],C[2],C[3],C[4],C[5])}this.element.globalData.renderer.save(!0),u.clip()}},CVMaskElement.prototype.getMaskProperty=MaskElement.prototype.getMaskProperty,CVMaskElement.prototype.destroy=function(){this.element=null};function CVBaseElement(){}var operationsMap={1:"source-in",2:"source-out",3:"source-in",4:"source-out"};CVBaseElement.prototype={createElements:function(){},initRendererElement:function(){},createContainerElements:function(){if(this.data.tt>=1){this.buffers=[];var u=this.globalData.canvasContext,T=assetLoader.createCanvas(u.canvas.width,u.canvas.height);this.buffers.push(T);var S=assetLoader.createCanvas(u.canvas.width,u.canvas.height);this.buffers.push(S),this.data.tt>=3&&!document._isProxy&&assetLoader.loadLumaCanvas()}this.canvasContext=this.globalData.canvasContext,this.transformCanvas=this.globalData.transformCanvas,this.renderableEffectsManager=new CVEffects(this),this.searchEffectTransforms()},createContent:function(){},setBlendMode:function(){var u=this.globalData;if(u.blendMode!==this.data.bm){u.blendMode=this.data.bm;var T=getBlendMode(this.data.bm);u.canvasContext.globalCompositeOperation=T}},createRenderableComponents:function(){this.maskManager=new CVMaskElement(this.data,this),this.transformEffects=this.renderableEffectsManager.getEffects(effectTypes.TRANSFORM_EFFECT)},hideElement:function(){!this.hidden&&(!this.isInRange||this.isTransparent)&&(this.hidden=!0)},showElement:function(){this.isInRange&&!this.isTransparent&&(this.hidden=!1,this._isFirstFrame=!0,this.maskManager._isFirstFrame=!0)},clearCanvas:function(u){u.clearRect(this.transformCanvas.tx,this.transformCanvas.ty,this.transformCanvas.w*this.transformCanvas.sx,this.transformCanvas.h*this.transformCanvas.sy)},prepareLayer:function(){if(this.data.tt>=1){var u=this.buffers[0],T=u.getContext("2d");this.clearCanvas(T),T.drawImage(this.canvasContext.canvas,0,0),this.currentTransform=this.canvasContext.getTransform(),this.canvasContext.setTransform(1,0,0,1,0,0),this.clearCanvas(this.canvasContext),this.canvasContext.setTransform(this.currentTransform)}},exitLayer:function(){if(this.data.tt>=1){var u=this.buffers[1],T=u.getContext("2d");this.clearCanvas(T),T.drawImage(this.canvasContext.canvas,0,0),this.canvasContext.setTransform(1,0,0,1,0,0),this.clearCanvas(this.canvasContext),this.canvasContext.setTransform(this.currentTransform);var S=this.comp.getElementById("tp"in this.data?this.data.tp:this.data.ind-1);if(S.renderFrame(!0),this.canvasContext.setTransform(1,0,0,1,0,0),this.data.tt>=3&&!document._isProxy){var E=assetLoader.getLumaCanvas(this.canvasContext.canvas),C=E.getContext("2d");C.drawImage(this.canvasContext.canvas,0,0),this.clearCanvas(this.canvasContext),this.canvasContext.drawImage(E,0,0)}this.canvasContext.globalCompositeOperation=operationsMap[this.data.tt],this.canvasContext.drawImage(u,0,0),this.canvasContext.globalCompositeOperation="destination-over",this.canvasContext.drawImage(this.buffers[0],0,0),this.canvasContext.setTransform(this.currentTransform),this.canvasContext.globalCompositeOperation="source-over"}},renderFrame:function(u){if(!(this.hidden||this.data.hd)&&!(this.data.td===1&&!u)){this.renderTransform(),this.renderRenderable(),this.renderLocalTransform(),this.setBlendMode();var T=this.data.ty===0;this.prepareLayer(),this.globalData.renderer.save(T),this.globalData.renderer.ctxTransform(this.finalTransform.localMat.props),this.globalData.renderer.ctxOpacity(this.finalTransform.localOpacity),this.renderInnerContent(),this.globalData.renderer.restore(T),this.exitLayer(),this.maskManager.hasMasks&&this.globalData.renderer.restore(!0),this._isFirstFrame&&(this._isFirstFrame=!1)}},destroy:function(){this.canvasContext=null,this.data=null,this.globalData=null,this.maskManager.destroy()},mHelper:new Matrix},CVBaseElement.prototype.hide=CVBaseElement.prototype.hideElement,CVBaseElement.prototype.show=CVBaseElement.prototype.showElement;function CVShapeData(o,u,T,S){this.styledShapes=[],this.tr=[0,0,0,0,0,0];var E=4;u.ty==="rc"?E=5:u.ty==="el"?E=6:u.ty==="sr"&&(E=7),this.sh=ShapePropertyFactory.getShapeProp(o,u,E,o);var C,_=T.length,P;for(C=0;C<_;C+=1)T[C].closed||(P={transforms:S.addTransformSequence(T[C].transforms),trNodes:[]},this.styledShapes.push(P),T[C].elements.push(P))}CVShapeData.prototype.setAsAnimated=SVGShapeData.prototype.setAsAnimated;function CVShapeElement(o,u,T){this.shapes=[],this.shapesData=o.shapes,this.stylesList=[],this.itemsData=[],this.prevViewData=[],this.shapeModifiers=[],this.processedElements=[],this.transformsManager=new ShapeTransformManager,this.initElement(o,u,T)}extendPrototype([BaseElement,TransformElement,CVBaseElement,IShapeElement,HierarchyElement,FrameElement,RenderableElement],CVShapeElement),CVShapeElement.prototype.initElement=RenderableDOMElement.prototype.initElement,CVShapeElement.prototype.transformHelper={opacity:1,_opMdf:!1},CVShapeElement.prototype.dashResetter=[],CVShapeElement.prototype.createContent=function(){this.searchShapes(this.shapesData,this.itemsData,this.prevViewData,!0,[])},CVShapeElement.prototype.createStyleElement=function(o,u){var T={data:o,type:o.ty,preTransforms:this.transformsManager.addTransformSequence(u),transforms:[],elements:[],closed:o.hd===!0},S={};if(o.ty==="fl"||o.ty==="st"?(S.c=PropertyFactory.getProp(this,o.c,1,255,this),S.c.k||(T.co="rgb("+bmFloor(S.c.v[0])+","+bmFloor(S.c.v[1])+","+bmFloor(S.c.v[2])+")")):(o.ty==="gf"||o.ty==="gs")&&(S.s=PropertyFactory.getProp(this,o.s,1,null,this),S.e=PropertyFactory.getProp(this,o.e,1,null,this),S.h=PropertyFactory.getProp(this,o.h||{k:0},0,.01,this),S.a=PropertyFactory.getProp(this,o.a||{k:0},0,degToRads,this),S.g=new GradientProperty(this,o.g,this)),S.o=PropertyFactory.getProp(this,o.o,0,.01,this),o.ty==="st"||o.ty==="gs"){if(T.lc=lineCapEnum[o.lc||2],T.lj=l
vendor: 112,243 bytes, line 322
322ineJoinEnum[o.lj||2],o.lj==1&&(T.ml=o.ml),S.w=PropertyFactory.getProp(this,o.w,0,null,this),S.w.k||(T.wi=S.w.v),o.d){var E=new DashProperty(this,o.d,"canvas",this);S.d=E,S.d.k||(T.da=S.d.dashArray,T.do=S.d.dashoffset[0])}}else T.r=o.r===2?"evenodd":"nonzero";return this.stylesList.push(T),S.style=T,S},CVShapeElement.prototype.createGroupElement=function(){var o={it:[],prevViewData:[]};return o},CVShapeElement.prototype.createTransformElement=function(o){var u={transform:{opacity:1,_opMdf:!1,key:this.transformsManager.getNewKey(),op:PropertyFactory.getProp(this,o.o,0,.01,this),mProps:TransformPropertyFactory.getTransformProperty(this,o,this)}};return u},CVShapeElement.prototype.createShapeElement=function(o){var u=new CVShapeData(this,o,this.stylesList,this.transformsManager);return this.shapes.push(u),this.addShapeToModifiers(u),u},CVShapeElement.prototype.reloadShapes=function(){this._isFirstFrame=!0;var o,u=this.itemsData.length;for(o=0;o<u;o+=1)this.prevViewData[o]=this.itemsData[o];for(this.searchShapes(this.shapesData,this.itemsData,this.prevViewData,!0,[]),u=this.dynamicProperties.length,o=0;o<u;o+=1)this.dynamicProperties[o].getValue();this.renderModifiers(),this.transformsManager.processSequences(this._isFirstFrame)},CVShapeElement.prototype.addTransformToStyleList=function(o){var u,T=this.stylesList.length;for(u=0;u<T;u+=1)this.stylesList[u].closed||this.stylesList[u].transforms.push(o)},CVShapeElement.prototype.removeTransformFromStyleList=function(){var o,u=this.stylesList.length;for(o=0;o<u;o+=1)this.stylesList[o].closed||this.stylesList[o].transforms.pop()},CVShapeElement.prototype.closeStyles=function(o){var u,T=o.length;for(u=0;u<T;u+=1)o[u].closed=!0},CVShapeElement.prototype.searchShapes=function(o,u,T,S,E){var C,_=o.length-1,P,R,I=[],L=[],j,M,D,F=[].concat(E);for(C=_;C>=0;C-=1){if(j=this.searchProcessedElement(o[C]),j?u[C]=T[j-1]:o[C]._shouldRender=S,o[C].ty==="fl"||o[C].ty==="st"||o[C].ty==="gf"||o[C].ty==="gs")j?u[C].style.closed=!1:u[C]=this.createStyleElement(o[C],F),I.push(u[C].style);else if(o[C].ty==="gr"){if(!j)u[C]=this.createGroupElement(o[C]);else for(R=u[C].it.length,P=0;P<R;P+=1)u[C].prevViewData[P]=u[C].it[P];this.searchShapes(o[C].it,u[C].it,u[C].prevViewData,S,F)}else o[C].ty==="tr"?(j||(D=this.createTransformElement(o[C]),u[C]=D),F.push(u[C]),this.addTransformToStyleList(u[C])):o[C].ty==="sh"||o[C].ty==="rc"||o[C].ty==="el"||o[C].ty==="sr"?j||(u[C]=this.createShapeElement(o[C])):o[C].ty==="tm"||o[C].ty==="rd"||o[C].ty==="pb"||o[C].ty==="zz"||o[C].ty==="op"?(j?(M=u[C],M.closed=!1):(M=ShapeModifiers.getModifier(o[C].ty),M.init(this,o[C]),u[C]=M,this.shapeModifiers.push(M)),L.push(M)):o[C].ty==="rp"&&(j?(M=u[C],M.closed=!0):(M=ShapeModifiers.getModifier(o[C].ty),u[C]=M,M.init(this,o,C,u),this.shapeModifiers.push(M),S=!1),L.push(M));this.addProcessedElement(o[C],C+1)}for(this.removeTransformFromStyleList(),this.closeStyles(I),_=L.length,C=0;C<_;C+=1)L[C].closed=!0},CVShapeElement.prototype.renderInnerContent=function(){this.transformHelper.opacity=1,this.transformHelper._opMdf=!1,this.renderModifiers(),this.transformsManager.processSequences(this._isFirstFrame),this.renderShape(this.transformHelper,this.shapesData,this.itemsData,!0)},CVShapeElement.prototype.renderShapeTransform=function(o,u){(o._opMdf||u.op._mdf||this._isFirstFrame)&&(u.opacity=o.opacity,u.opacity*=u.op.v,u._opMdf=!0)},CVShapeElement.prototype.drawLayer=function(){var o,u=this.stylesList.length,T,S,E,C,_,P,R=this.globalData.renderer,I=this.globalData.canvasContext,L,j;for(o=0;o<u;o+=1)if(j=this.stylesList[o],L=j.type,!((L==="st"||L==="gs")&&j.wi===0||!j.data._shouldRender||j.coOp===0||this.globalData.currentGlobalAlpha===0)){for(R.save(),_=j.elements,L==="st"||L==="gs"?(R.ctxStrokeStyle(L==="st"?j.co:j.grd),R.ctxLineWidth(j.wi),R.ctxLineCap(j.lc),R.ctxLineJoin(j.lj),R.ctxMiterLimit(j.ml||0)):R.ctxFillStyle(L==="fl"?j.co:j.grd),R.ctxOpacity(j.coOp),L!=="st"&&L!=="gs"&&I.beginPath(),R.ctxTransform(j.preTransforms.finalTransform.props),S=_.length,T=0;T<S;T+=1){for((L==="st"||L==="gs")&&(I.beginPath(),j.da&&(I.setLineDash(j.da),I.lineDashOffset=j.do)),P=_[T].trNodes,C=P.length,E=0;E<C;E+=1)P[E].t==="m"?I.moveTo(P[E].p[0],P[E].p[1]):P[E].t==="c"?I.bezierCurveTo(P[E].pts[0],P[E].pts[1],P[E].pts[2],P[E].pts[3],P[E].pts[4],P[E].pts[5]):I.closePath();(L==="st"||L==="gs")&&(R.ctxStroke(),j.da&&I.setLineDash(this.dashResetter))}L!=="st"&&L!=="gs"&&this.globalData.renderer.ctxFill(j.r),R.restore()}},CVShapeElement.prototype.renderShape=function(o,u,T,S){var E,C=u.length-1,_;for(_=o,E=C;E>=0;E-=1)u[E].ty==="tr"?(_=T[E].transform,this.renderShapeTransform(o,_)):u[E].ty==="sh"||u[E].ty==="el"||u[E].ty==="rc"||u[E].ty==="sr"?this.renderPath(u[E],T[E]):u[E].ty==="fl"?this.renderFill(u[E],T[E],_):u[E].ty==="st"?this.renderStroke(u[E],T[E],_):u[E].ty==="gf"||u[E].ty==="gs"?this.renderGradientFill(u[E],T[E],_):u[E].ty==="gr"?this.renderShape(_,u[E].it,T[E].it):u[E].ty;S&&this.drawLayer()},CVShapeElement.prototype.renderStyledShape=function(o,u){if(this._isFirstFrame||u._mdf||o.transforms._mdf){var T=o.trNodes,S=u.paths,E,C,_,P=S._length;T.length=0;var R=o.transforms.finalTransform;for(_=0;_<P;_+=1){var I=S.shapes[_];if(I&&I.v){for(C=I._length,E=1;E<C;E+=1)E===1&&T.push({t:"m",p:R.applyToPointArray(I.v[0][0],I.v[0][1],0)}),T.push({t:"c",pts:R.applyToTriplePoints(I.o[E-1],I.i[E],I.v[E])});C===1&&T.push({t:"m",p:R.applyToPointArray(I.v[0][0],I.v[0][1],0)}),I.c&&C&&(T.push({t:"c",pts:R.applyToTriplePoints(I.o[E-1],I.i[0],I.v[0])}),T.push({t:"z"}))}}o.trNodes=T}},CVShapeElement.prototype.renderPath=function(o,u){if(o.hd!==!0&&o._shouldRender){var T,S=u.styledShapes.length;for(T=0;T<S;T+=1)this.renderStyledShape(u.styledShapes[T],u.sh)}},CVShapeElement.prototype.renderFill=function(o,u,T){var S=u.style;(u.c._mdf||this._isFirstFrame)&&(S.co="rgb("+bmFloor(u.c.v[0])+","+bmFloor(u.c.v[1])+","+bmFloor(u.c.v[2])+")"),(u.o._mdf||T._opMdf||this._isFirstFrame)&&(S.coOp=u.o.v*T.opacity)},CVShapeElement.prototype.renderGradientFill=function(o,u,T){var S=u.style,E;if(!S.grd||u.g._mdf||u.s._mdf||u.e._mdf||o.t!==1&&(u.h._mdf||u.a._mdf)){var C=this.globalData.canvasContext,_=u.s.v,P=u.e.v;if(o.t===1)E=C.createLinearGradient(_[0],_[1],P[0],P[1]);else{var R=Math.sqrt(Math.pow(_[0]-P[0],2)+Math.pow(_[1]-P[1],2)),I=Math.atan2(P[1]-_[1],P[0]-_[0]),L=u.h.v;L>=1?L=.99:L<=-1&&(L=-.99);var j=R*L,M=Math.cos(I+u.a.v)*j+_[0],D=Math.sin(I+u.a.v)*j+_[1];E=C.createRadialGradient(M,D,0,_[0],_[1],R)}var F,N=o.g.p,G=u.g.c,B=1;for(F=0;F<N;F+=1)u.g._hasOpacity&&u.g._collapsable&&(B=u.g.o[F*2+1]),E.addColorStop(G[F*4]/100,"rgba("+G[F*4+1]+","+G[F*4+2]+","+G[F*4+3]+","+B+")");S.grd=E}S.coOp=u.o.v*T.opacity},CVShapeElement.prototype.renderStroke=function(o,u,T){var S=u.style,E=u.d;E&&(E._mdf||this._isFirstFrame)&&(S.da=E.dashArray,S.do=E.dashoffset[0]),(u.c._mdf||this._isFirstFrame)&&(S.co="rgb("+bmFloor(u.c.v[0])+","+bmFloor(u.c.v[1])+","+bmFloor(u.c.v[2])+")"),(u.o._mdf||T._opMdf||this._isFirstFrame)&&(S.coOp=u.o.v*T.opacity),(u.w._mdf||this._isFirstFrame)&&(S.wi=u.w.v)},CVShapeElement.prototype.destroy=function(){this.shapesData=null,this.globalData=null,this.canvasContext=null,this.stylesList.length=0,this.itemsData.length=0};function CVTextElement(o,u,T){this.textSpans=[],this.yOffset=0,this.fillColorAnim=!1,this.strokeColorAnim=!1,this.strokeWidthAnim=!1,this.stroke=!1,this.fill=!1,this.justifyOffset=0,this.currentRender=null,this.renderType="canvas",this.values={fill:"rgba(0,0,0,0)",stroke:"rgba(0,0,0,0)",sWidth:0,fValue:""},this.initElement(o,u,T)}extendPrototype([BaseElement,TransformElement,CVBaseElement,HierarchyElement,FrameElement,RenderableElement,ITextElement],CVTextElement),CVTextElement.prototype.tHelper=createTag("canvas").getContext("2d"),CVTextElement.prototype.buildNewText=function(){var o=this.textProperty.currentData;this.renderedLetters=createSizedArray(o.l?o.l.length:0);var u=!1;o.fc?(u=!0,this.values.fill=this.buildColor(o.fc)):this.values.fill="rgba(0,0,0,0)",this.fill=u;var T=!1;o.sc&&(T=!0,this.values.stroke=this.buildColor(o.sc),this.values.sWidth=o.sw);var S=this.globalData.fontManager.getFontByName(o.f),E,C,_=o.l,P=this.mHelper;this.stroke=T,this.values.fValue=o.finalSize+"px "+this.globalData.fontManager.getFontByName(o.f).fFamily,C=o.finalText.length;var R,I,L,j,M,D,F,N,G,B,H=this.data.singleShape,O=o.tr*.001*o.finalSize,V=0,U=0,W=!0,K=0;for(E=0;E<C;E+=1){R=this.globalData.fontManager.getCharData(o.finalText[E],S.fStyle,this.globalData.fontManager.getFontByName(o.f).fFamily),I=R&&R.data||{},P.reset(),H&&_[E].n&&(V=-O,U+=o.yOffset,U+=W?1:0,W=!1),M=I.shapes?I.shapes[0].it:[],F=M.length,P.scale(o.finalSize/100,o.finalSize/100),H&&this.applyTextPropertiesToMatrix(o,P,_[E].line,V,U),G=createSizedArray(F-1);var Y=0;for(D=0;D<F;D+=1)if(M[D].ty==="sh"){for(j=M[D].ks.k.i.length,N=M[D].ks.k,B=[],L=1;L<j;L+=1)L===1&&B.push(P.applyToX(N.v[0][0],N.v[0][1],0),P.applyToY(N.v[0][0],N.v[0][1],0)),B.push(P.applyToX(N.o[L-1][0],N.o[L-1][1],0),P.applyToY(N.o[L-1][0],N.o[L-1][1],0),P.applyToX(N.i[L][0],N.i[L][1],0),P.applyToY(N.i[L][0],N.i[L][1],0),P.applyToX(N.v[L][0],N.v[L][1],0),P.applyToY(N.v[L][0],N.v[L][1],0));B.push(P.applyToX(N.o[L-1][0],N.o[L-1][1],0),P.applyToY(N.o[L-1][0],N.o[L-1][1],0),P.applyToX(N.i[0][0],N.i[0][1],0),P.applyToY(N.i[0][0],N.i[0][1],0),P.applyToX(N.v[0][0],N.v[0][1],0),P.applyToY(N.v[0][0],N.v[0][1],0)),G[Y]=B,Y+=1}H&&(V+=_[E].l,V+=O),this.textSpans[K]?this.textSpans[K].elem=G:this.textSpans[K]={elem:G},K+=1}},CVTextElement.prototype.renderInnerContent=function(){this.validateText();var o=this.canvasContext;o.font=this.values.fValue,this.globalData.renderer.ctxLineCap("butt"),this.globalData.renderer.ctxLineJoin("miter"),this.globalData.renderer.ctxMiterLimit(4),this.data.singleShape||this.textAnimator.getMeasures(this.textProperty.currentData,this.lettersChangedFlag);var u,T,S,E,C,_,P=this.textAnimator.renderedLetters,R=this.textProperty.currentData.l;T=R.length;var I,L=null,j=null,M=null,D,F,N=this.globalData.renderer;for(u=0;u<T;u+=1)if(!R[u].n){if(I=P[u],I&&(N.save(),N.ctxTransform(I.p),N.ctxOpacity(I.o)),this.fill){for(I&&I.fc?L!==I.fc&&(N.ctxFillStyle(I.fc),L=I.fc):L!==this.values.fill&&(L=this.values.fill,N.ctxFillStyle(this.values.fill)),D=this.textSpans[u].elem,E=D.length,this.globalData.canvasContext.beginPath(),S=0;S<E;S+=1)for(F=D[S],_=F.length,this.globalData.canvasContext.moveTo(F[0],F[1]),C=2;C<_;C+=6)this.globalData.canvasContext.bezierCurveTo(F[C],F[C+1],F[C+2],F[C+3],F[C+4],F[C+5]);this.globalData.canvasContext.closePath(),N.ctxFill()}if(this.stroke){for(I&&I.sw?M!==I.sw&&(M=I.sw,N.ctxLineWidth(I.sw)):M!==this.values.sWidth&&(M=this.values.sWidth,N.ctxLineWidth(this.values.sWidth)),I&&I.sc?j!==I.sc&&(j=I.sc,N.ctxStrokeStyle(I.sc)):j!==this.values.stroke&&(j=this.values.stroke,N.ctxStrokeStyle(this.values.stroke)),D=this.textSpans[u].elem,E=D.length,this.globalData.canvasContext.beginPath(),S=0;S<E;S+=1)for(F=D[S],_=F.length,this.globalData.canvasContext.moveTo(F[0],F[1]),C=2;C<_;C+=6)this.globalData.canvasContext.bezierCurveTo(F[C],F[C+1],F[C+2],F[C+3],F[C+4],F[C+5]);this.globalData.canvasContext.closePath(),N.ctxStroke()}I&&this.globalData.renderer.restore()}};function CVImageElement(o,u,T){this.assetData=u.getAssetData(o.refId),this.img=u.imageLoader.getAsset(this.assetData),this.initElement(o,u,T)}extendPrototype([BaseElement,TransformElement,CVBaseElement,HierarchyElement,FrameElement,RenderableElement],CVImageElement),CVImageElement.prototype.initElement=SVGShapeElement.prototype.initElement,CVImageElement.prototype.prepareFrame=IImageElement.prototype.prepareFrame,CVImageElement.prototype.createContent=function(){if(this.img.width&&(this.assetData.w!==this.img.width||this.assetData.h!==this.img.height)){var o=createTag("canvas");o.width=this.assetData.w,o.height=this.assetData.h;var u=o.getContext("2d"),T=this.img.width,S=this.img.height,E=T/S,C=this.assetData.w/this.assetData.h,_,P,R=this.assetData.pr||this.globalData.renderConfig.imagePreserveAspectRatio;E>C&&R==="xMidYMid slice"||E<C&&R!=="xMidYMid slice"?(P=S,_=P*C):(_=T,P=_/C),u.drawImage(this.img,(T-_)/2,(S-P)/2,_,P,0,0,this.assetData.w,this.assetData.h),this.img=o}},CVImageElement.prototype.renderInnerContent=function(){this.canvasContext.drawImage(this.img,0,0)},CVImageElement.prototype.destroy=function(){this.img=null};function CVSolidElement(o,u,T){this.initElement(o,u,T)}extendPrototype([BaseElement,TransformElement,CVBaseElement,HierarchyElement,FrameElement,RenderableElement],CVSolidElement),CVSolidElement.prototype.initElement=SVGShapeElement.prototype.initElement,CVSolidElement.prototype.prepareFrame=IImageElement.prototype.prepareFrame,CVSolidElement.prototype.renderInnerContent=function(){this.globalData.renderer.ctxFillStyle(this.data.sc),this.globalData.renderer.ctxFillRect(0,0,this.data.sw,this.data.sh)};function CanvasRendererBase(){}extendPrototype([BaseRenderer],CanvasRendererBase),CanvasRendererBase.prototype.createShape=function(o){return new CVShapeElement(o,this.globalData,this)},CanvasRendererBase.prototype.createText=function(o){return new CVTextElement(o,this.globalData,this)},CanvasRendererBase.prototype.createImage=function(o){return new CVImageElement(o,this.globalData,this)},CanvasRendererBase.prototype.createSolid=function(o){return new CVSolidElement(o,this.globalData,this)},CanvasRendererBase.prototype.createNull=SVGRenderer.prototype.createNull,CanvasRendererBase.prototype.ctxTransform=function(o){o[0]===1&&o[1]===0&&o[4]===0&&o[5]===1&&o[12]===0&&o[13]===0||this.canvasContext.transform(o[0],o[1],o[4],o[5],o[12],o[13])},CanvasRendererBase.prototype.ctxOpacity=function(o){this.canvasContext.globalAlpha*=o<0?0:o},CanvasRendererBase.prototype.ctxFillStyle=function(o){this.canvasContext.fillStyle=o},CanvasRendererBase.prototype.ctxStrokeStyle=function(o){this.canvasContext.strokeStyle=o},CanvasRendererBase.prototype.ctxLineWidth=function(o){this.canvasContext.lineWidth=o},CanvasRendererBase.prototype.ctxLineCap=function(o){this.canvasContext.lineCap=o},CanvasRendererBase.prototype.ctxLineJoin=function(o){this.canvasContext.lineJoin=o},CanvasRendererBase.prototype.ctxMiterLimit=function(o){this.canvasContext.miterLimit=o},CanvasRendererBase.prototype.ctxFill=function(o){this.canvasContext.fill(o)},CanvasRendererBase.prototype.ctxFillRect=function(o,u,T,S){this.canvasContext.fillRect(o,u,T,S)},CanvasRendererBase.prototype.ctxStroke=function(){this.canvasContext.stroke()},CanvasRendererBase.prototype.reset=function(){if(!this.renderConfig.clearCanvas){this.canvasContext.restore();return}this.contextData.reset()},CanvasRendererBase.prototype.save=function(){this.canvasContext.save()},CanvasRendererBase.prototype.restore=function(o){if(!this.renderConfig.clearCanvas){this.canvasContext.restore();return}o&&(this.globalData.blendMode="source-over"),this.contextData.restore(o)},CanvasRendererBase.prototype.configAnimation=function(o){if(this.animationItem.wrapper){this.animationItem.container=createTag("canvas");var u=this.animationItem.container.style;u.width="100%",u.height="100%";var T="0px 0px 0px";u.transformOrigin=T,u.mozTransformOrigin=T,u.webkitTransformOrigin=T,u["-webkit-transform"]=T,u.contentVisibility=this.renderConfig.contentVisibility,this.animationItem.wrapper.appendChild(this.animationItem.container),this.canvasContext=this.animationItem.container.getContext("2d"),this.renderConfig.className&&this.animationItem.container.setAttribute("class",this.renderConfig.className),this.renderConfig.id&&this.animationItem.container.setAttribute("id",this.renderConfig.id)}else this.canvasContext=this.renderConfig.context;this.contextData.setContext(this.canvasContext),this.data=o,this.layers=o.layers,this.transformCanvas={w:o.w,h:o.h,sx:0,sy:0,tx:0,ty:0},this.setupGlobalData(o,document.body),this.globalData.canvasContext=this.canvasContext,this.globalData.renderer=this,this.globalData.isDashed=!1,this.globalData.progressiveLoad=this.renderConfig.progressiveLoad,this.globalData.transformCanvas=this.transformCanvas,this.elements=createSizedArray(o.layers.length),this.updateContainerSize()},CanvasRendererBase.prototype.updateContainerSize=function(o,u){this.reset();var T,S;o?(T=o,S=u,this.canvasContext.canvas.width=T,this.canvasContext.canvas.height=S):(this.animationItem.wrapper&&this.animationItem.container?(T=this.animationItem.wrapper.offsetWidth,S=this.animationItem.wrapper.offsetHeight):(T=this.canvasContext.canvas.width,S=this.canvasContext.canvas.height),this.canvasContext.canvas.width=T*this.renderConfig.dpr,this.canvasContext.canvas.height=S*this.renderConfig.dpr);var E,C;if(this.renderConfig.preserveAspectRatio.indexOf("meet")!==-1||this.renderConfig.preserveAspectRatio.indexOf("slice")!==-1){var _=this.renderConfig.preserveAspectRatio.split(" "),P=_[1]||"meet",R=_[0]||"xMidYMid",I=R.substr(0,4),L=R.substr(4);E=T/S,C=this.transformCanvas.w/this.transformCanvas.h,C>E&&P==="meet"||C<E&&P==="slice"?(this.transformCanvas.sx=T/(this.transformCanvas.w/this.renderConfig.dpr),this.transformCanvas.sy=T/(this.transformCanvas.w/this.renderConfig.dpr)):(this.transformCanvas.sx=S/(this.transformCanvas.h/this.renderConfig.dpr),this.transformCanvas.sy=S/(this.transformCanvas.h/this.renderConfig.dpr)),I==="xMid"&&(C<E&&P==="meet"||C>E&&P==="slice")?this.transformCanvas.tx=(T-this.transformCanvas.w*(S/this.transformCanvas.h))/2*this.renderConfig.dpr:I==="xMax"&&(C<E&&P==="meet"||C>E&&P==="slice")?this.transformCanvas.tx=(T-this.transformCanvas.w*(S/this.transformCanvas.h))*this.renderConfig.dpr:this.transformCanvas.tx=0,L==="YMid"&&(C>E&&P==="meet"||C<E&&P==="slice")?this.transformCanvas.ty=(S-this.transformCanvas.h*(T/this.transformCanvas.w))/2*this.renderConfig.dpr:L==="YMax"&&(C>E&&P==="meet"||C<E&&P==="slice")?this.transformCanvas.ty=(S-this.transformCanvas.h*(T/this.transformCanvas.w))*this.renderConfig.dpr:this.transformCanvas.ty=0}else this.renderConfig.preserveAspectRatio==="none"?(this.transformCanvas.sx=T/(this.transformCanvas.w/this.renderConfig.dpr),this.transformCanvas.sy=S/(this.transformCanvas.h/this.renderConfig.dpr),this.transformCanvas.tx=0,this.transformCanvas.ty=0):(this.transformCanvas.sx=this.renderConfig.dpr,this.transformCanvas.sy=this.renderConfig.dpr,this.transformCanvas.tx=0,this.transformCanvas.ty=0);this.transformCanvas.props=[this.transformCanvas.sx,0,0,0,0,this.transformCanvas.sy,0,0,0,0,1,0,this.transformCanvas.tx,this.transformCanvas.ty,0,1],this.ctxTransform(this.transformCanvas.props),this.canvasContext.beginPath(),this.canvasContext.rect(0,0,this.transformCanvas.w,this.transformCanvas.h),this.canvasContext.closePath(),this.canvasContext.clip(),this.renderFrame(this.renderedFrame,!0)},CanvasRendererBase.prototype.destroy=function(){this.renderConfig.clearCanvas&&this.animationItem.wrapper&&(this.animationItem.wrapper.innerText="");var o,u=this.layers?this.layers.length:0;for(o=u-1;o>=0;o-=1)this.elements[o]&&this.elements[o].destroy&&this.elements[o].destroy();this.elements.length=0,this.globalData.canvasContext=null,this.animationItem.container=null,this.destroyed=!0},CanvasRendererBase.prototype.renderFrame=function(o,u){if(!(this.renderedFrame===o&&this.renderConfig.clearCanvas===!0&&!u||this.destroyed||o===-1)){this.renderedFrame=o,this.globalData.frameNum=o-this.animationItem._isFirstFrame,this.globalData.frameId+=1,this.globalData._mdf=!this.renderConfig.clearCanvas||u,this.globalData.projectInterface.currentFrame=o;var T,S=this.layers.length;for(this.completeLayers||this.checkLayers(o),T=S-1;T>=0;T-=1)(this.completeLayers||this.elements[T])&&this.elements[T].prepareFrame(o-this.layers[T].st);if(this.globalData._mdf){for(this.renderConfig.clearCanvas===!0?this.canvasContext.clearRect(0,0,this.transformCanvas.w,this.transformCanvas.h):this.save(),T=S-1;T>=0;T-=1)(this.completeLayers||this.elements[T])&&this.elements[T].renderFrame();this.renderConfig.clearCanvas!==!0&&this.restore()}}},CanvasRendererBase.prototype.buildItem=function(o){var u=this.elements;if(!(u[o]||this.layers[o].ty===99)){var T=this.createItem(this.layers[o],this,this.globalData);u[o]=T,T.initExpressions()}},CanvasRendererBase.prototype.checkPendingElements=function(){for(;this.pendingElements.length;){var o=this.pendingElements.pop();o.checkParenting()}},CanvasRendererBase.prototype.hide=function(){this.animationItem.container.style.display="none"},CanvasRendererBase.prototype.show=function(){this.animationItem.container.style.display="block"};function CanvasContext(){this.opacity=-1,this.transform=createTypedArray("float32",16),this.fillStyle="",this.strokeStyle="",this.lineWidth="",this.lineCap="",this.lineJoin="",this.miterLimit="",this.id=Math.random()}function CVContextData(){this.stack=[],this.cArrPos=0,this.cTr=new Matrix;var o,u=15;for(o=0;o<u;o+=1){var T=new CanvasContext;this.stack[o]=T}this._length=u,this.nativeContext=null,this.transformMat=new Matrix,this.currentOpacity=1,this.currentFillStyle="",this.appliedFillStyle="",this.currentStrokeStyle="",this.appliedStrokeStyle="",this.currentLineWidth="",this.appliedLineWidth="",this.currentLineCap="",this.appliedLineCap="",this.currentLineJoin="",this.appliedLineJoin="",this.appliedMiterLimit="",this.currentMiterLimit=""}CVContextData.prototype.duplicate=function(){var o=this._length*2,u=0;for(u=this._length;u<o;u+=1)this.stack[u]=new CanvasContext;this._length=o},CVContextData.prototype.reset=function(){this.cArrPos=0,this.cTr.reset(),this.stack[this.cArrPos].opacity=1},CVContextData.prototype.restore=function(o){this.cArrPos-=1;var u=this.stack[this.cArrPos],T=u.transform,S,E=this.cTr.props;for(S=0;S<16;S+=1)E[S]=T[S];if(o){this.nativeContext.restore();var C=this.stack[this.cArrPos+1];this.appliedFillStyle=C.fillStyle,this.appliedStrokeStyle=C.strokeStyle,this.appliedLineWidth=C.lineWidth,this.appliedLineCap=C.lineCap,this.appliedLineJoin=C.lineJoin,this.appliedMiterLimit=C.miterLimit}this.nativeContext.setTransform(T[0],T[1],T[4],T[5],T[12],T[13]),(o||u.opacity!==-1&&this.currentOpacity!==u.opacity)&&(this.nativeContext.globalAlpha=u.opacity,this.currentOpacity=u.opacity),this.currentFillStyle=u.fillStyle,this.currentStrokeStyle=u.strokeStyle,this.currentLineWidth=u.lineWidth,this.currentLineCap=u.lineCap,this.currentLineJoin=u.lineJoin,this.currentMiterLimit=u.miterLimit},CVContextData.prototype.save=function(o){o&&this.nativeContext.save();var u=this.cTr.props;this._length<=this.cArrPos&&this.duplicate();var T=this.stack[this.cArrPos],S;for(S=0;S<16;S+=1)T.transform[S]=u[S];this.cArrPos+=1;var E=this.stack[this.cArrPos];E.opacity=T.opacity,E.fillStyle=T.fillStyle,E.strokeStyle=T.strokeStyle,E.lineWidth=T.lineWidth,E.lineCap=T.lineCap,E.lineJoin=T.lineJoin,E.miterLimit=T.miterLimit},CVContextData.prototype.setOpacity=function(o){this.stack[this.cArrPos].opacity=o},CVContextData.prototype.setContext=function(o){this.nativeContext=o},CVContextData.prototype.fillStyle=function(o){this.stack[this.cArrPos].fillStyle!==o&&(this.currentFillStyle=o,this.stack[this.cArrPos].fillStyle=o)},CVContextData.prototype.strokeStyle=function(o){this.stack[this.cArrPos].strokeStyle!==o&&(this.currentStrokeStyle=o,this.stack[this.cArrPos].strokeStyle=o)},CVContextData.prototype.lineWidth=function(o){this.stack[this.cArrPos].lineWidth!==o&&(this.currentLineWidth=o,this.stack[this.cArrPos].lineWidth=o)},CVContextData.prototype.lineCap=function(o){this.stack[this.cArrPos].lineCap!==o&&(this.currentLineCap=o,this.stack[this.cArrPos].lineCap=o)},CVContextData.prototype.lineJoin=function(o){this.stack[this.cArrPos].lineJoin!==o&&(this.currentLineJoin=o,this.stack[this.cArrPos].lineJoin=o)},CVContextData.prototype.miterLimit=function(o){this.stack[this.cArrPos].miterLimit!==o&&(this.currentMiterLimit=o,this.stack[this.cArrPos].miterLimit=o)},CVContextData.prototype.transform=function(o){this.transformMat.cloneFromProps(o);var u=this.cTr;this.transformMat.multiply(u),u.cloneFromProps(this.transformMat.props);var T=u.props;this.nativeContext.setTransform(T[0],T[1],T[4],T[5],T[12],T[13])},CVContextData.prototype.opacity=function(o){var u=this.stack[this.cArrPos].opacity;u*=o<0?0:o,this.stack[this.cArrPos].opacity!==u&&(this.currentOpacity!==o&&(this.nativeContext.globalAlpha=o,this.currentOpacity=o),this.stack[this.cArrPos].opacity=u)},CVContextData.prototype.fill=function(o){this.appliedFillStyle!==this.currentFillStyle&&(this.appliedFillStyle=this.currentFillStyle,this.nativeContext.fillStyle=this.appliedFillStyle),this.nativeContext.fill(o)},CVContextData.prototype.fillRect=function(o,u,T,S){this.appliedFillStyle!==this.currentFillStyle&&(this.appliedFillStyle=this.currentFillStyle,this.nativeContext.fillStyle=this.appliedFillStyle),this.nativeContext.fillRect(o,u,T,S)},CVContextData.prototype.stroke=function(){this.appliedStrokeStyle!==this.currentStrokeStyle&&(this.appliedStrokeStyle=this.currentStrokeStyle,this.nativeContext.strokeStyle=this.appliedStrokeStyle),this.appliedLineWidth!==this.currentLineWidth&&(this.appliedLineWidth=this.currentLineWidth,this.nativeContext.lineWidth=this.appliedLineWidth),this.appliedLineCap!==this.currentLineCap&&(this.appliedLineCap=this.currentLineCap,this.nativeContext.lineCap=this.appliedLineCap),this.appliedLineJoin!==this.currentLineJoin&&(this.appliedLineJoin=this.currentLineJoin,this.nativeContext.lineJoin=this.appliedLineJoin),this.appliedMiterLimit!==this.currentMiterLimit&&(this.appliedMiterLimit=this.currentMiterLimit,this.nativeContext.miterLimit=this.appliedMiterLimit),this.nativeContext.stroke()};function CVCompElement(o,u,T){this.completeLayers=!1,this.layers=o.layers,this.pendingElements=[],this.elements=createSizedArray(this.layers.length),this.initElement(o,u,T),this.tm=o.tm?PropertyFactory.getProp(this,o.tm,0,u.frameRate,this):{_placeholder:!0}}extendPrototype([CanvasRendererBase,ICompElement,CVBaseElement],CVCompElement),CVCompElement.prototype.renderInnerContent=function(){var o=this.canvasContext;o.beginPath(),o.moveTo(0,0),o.lineTo(this.data.w,0),o.lineTo(this.data.w,this.data.h),o.lineTo(0,this.data.h),o.lineTo(0,0),o.clip();var u,T=this.layers.length;for(u=T-1;u>=0;u-=1)(this.completeLayers||this.elements[u])&&this.elements[u].renderFrame()},CVCompElement.prototype.destroy=function(){var o,u=this.layers.length;for(o=u-1;o>=0;o-=1)this.elements[o]&&this.elements[o].destroy();this.layers=null,this.elements=null},CVCompElement.prototype.createComp=function(o){return new CVCompElement(o,this.globalData,this)};function CanvasRenderer(o,u){this.animationItem=o,this.renderConfig={clearCanvas:u&&u.clearCanvas!==void 0?u.clearCanvas:!0,context:u&&u.context||null,progressiveLoad:u&&u.progressiveLoad||!1,preserveAspectRatio:u&&u.preserveAspectRatio||"xMidYMid meet",imagePreserveAspectRatio:u&&u.imagePreserveAspectRatio||"xMidYMid slice",contentVisibility:u&&u.contentVisibility||"visible",className:u&&u.className||"",id:u&&u.id||"",runExpressions:!u||u.runExpressions===void 0||u.runExpressions},this.renderConfig.dpr=u&&u.dpr||1,this.animationItem.wrapper&&(this.renderConfig.dpr=u&&u.dpr||window.devicePixelRatio||1),this.renderedFrame=-1,this.globalData={frameNum:-1,_mdf:!1,renderConfig:this.renderConfig,currentGlobalAlpha:-1},this.contextData=new CVContextData,this.elements=[],this.pendingElements=[],this.transformMat=new Matrix,this.completeLayers=!1,this.rendererType="canvas",this.renderConfig.clearCanvas&&(this.ctxTransform=this.contextData.transform.bind(this.contextData),this.ctxOpacity=this.contextData.opacity.bind(this.contextData),this.ctxFillStyle=this.contextData.fillStyle.bind(this.contextData),this.ctxStrokeStyle=this.contextData.strokeStyle.bind(this.contextData),this.ctxLineWidth=this.contextData.lineWidth.bind(this.contextData),this.ctxLineCap=this.contextData.lineCap.bind(this.contextData),this.ctxLineJoin=this.contextData.lineJoin.bind(this.contextData),this.ctxMiterLimit=this.contextData.miterLimit.bind(this.contextData),this.ctxFill=this.contextData.fill.bind(this.contextData),this.ctxFillRect=this.contextData.fillRect.bind(this.contextData),this.ctxStroke=this.contextData.stroke.bind(this.contextData),this.save=this.contextData.save.bind(this.contextData))}extendPrototype([CanvasRendererBase],CanvasRenderer),CanvasRenderer.prototype.createComp=function(o){return new CVCompElement(o,this.globalData,this)};function HBaseElement(){}HBaseElement.prototype={checkBlendMode:function(){},initRendererElement:function(){this.baseElement=createTag(this.data.tg||"div"),this.data.hasMask?(this.svgElement=createNS("svg"),this.layerElement=createNS("g"),this.maskedElement=this.layerElement,this.svgElement.appendChild(this.layerElement),this.baseElement.appendChild(this.svgElement)):this.layerElement=this.baseElement,styleDiv(this.baseElement)},createContainerElements:function(){this.renderableEffectsManager=new CVEffects(this),this.transformedElement=this.baseElement,this.maskedElement=this.layerElement,this.data.ln&&this.layerElement.setAttribute("id",this.data.ln),this.data.cl&&this.layerElement.setAttribute("class",this.data.cl),this.data.bm!==0&&this.setBlendMode()},renderElement:function(){var u=this.transformedElement?this.transformedElement.style:{};if(this.finalTransform._matMdf){var T=this.finalTransform.mat.toCSS();u.transform=T,u.webkitTransform=T}this.finalTransform._opMdf&&(u.opacity=this.finalTransform.mProp.o.v)},renderFrame:function(){this.data.hd||this.hidden||(this.renderTransform(),this.renderRenderable(),this.renderElement(),this.renderInnerContent(),this._isFirstFrame&&(this._isFirstFrame=!1))},destroy:function(){this.layerElement=null,this.transformedElement=null,this.matteElement&&(this.matteElement=null),this.maskManager&&(this.maskManager.destroy(),this.maskManager=null)},createRenderableComponents:function(){this.maskManager=new MaskElement(this.data,this,this.globalData)},addEffects:function(){},setMatte:function(){}},HBaseElement.prototype.getBaseElement=SVGBaseElement.prototype.getBaseElement,HBaseElement.prototype.destroyBaseElement=HBaseElement.prototype.destroy,HBaseElement.prototype.buildElementParenting=BaseRenderer.prototype.buildElementParenting;function HSolidElement(o,u,T){this.initElement(o,u,T)}extendPrototype([BaseElement,TransformElement,HBaseElement,HierarchyElement,FrameElement,RenderableDOMElement],HSolidElement),HSolidElement.prototype.createContent=function(){var o;this.data.hasMask?(o=createNS("rect"),o.setAttribute("width",this.data.sw),o.setAttribute("height",this.data.sh),o.setAttribute("fill",this.data.sc),this.svgElement.setAttribute("width",this.data.sw),this.svgElement.setAttribute("height",this.data.sh)):(o=createTag("div"),o.style.width=this.data.sw+"px",o.style.height=this.data.sh+"px",o.style.backgroundColor=this.data.sc),this.layerElement.appendChild(o)};function HShapeElement(o,u,T){this.shapes=[],this.shapesData=o.shapes,this.stylesList=[],this.shapeModifiers=[],this.itemsData=[],this.processedElements=[],this.animatedContents=[],this.shapesContainer=createNS("g"),this.initElement(o,u,T),this.prevViewData=[],this.currentBBox={x:999999,y:-999999,h:0,w:0}}extendPrototype([BaseElement,TransformElement,HSolidElement,SVGShapeElement,HBaseElement,HierarchyElement,FrameElement,RenderableElement],HShapeElement),HShapeElement.prototype._renderShapeFrame=HShapeElement.prototype.renderInnerContent,HShapeElement.prototype.createContent=function(){var o;if(this.baseElement.style.fontSize=0,this.data.hasMask)this.layerElement.appendChild(this.shapesContainer),o=this.svgElement;else{o=createNS("svg");var u=this.comp.data?this.comp.data:this.globalData.compSize;o.setAttribute("width",u.w),o.setAttribute("height",u.h),o.appendChild(this.shapesContainer),this.layerElement.appendChild(o)}this.searchShapes(this.shapesData,this.itemsData,this.prevViewData,this.shapesContainer,0,[],!0),this.filterUniqueShapes(),this.shapeCont=o},HShapeElement.prototype.getTransformedPoint=function(o,u){var T,S=o.length;for(T=0;T<S;T+=1)u=o[T].mProps.v.applyToPointArray(u[0],u[1],0);return u},HShapeElement.prototype.calculateShapeBoundingBox=function(o,u){var T=o.sh.v,S=o.transformers,E,C=T._length,_,P,R,I;if(!(C<=1)){for(E=0;E<C-1;E+=1)_=this.getTransformedPoint(S,T.v[E]),P=this.getTransformedPoint(S,T.o[E]),R=this.getTransformedPoint(S,T.i[E+1]),I=this.getTransformedPoint(S,T.v[E+1]),this.checkBounds(_,P,R,I,u);T.c&&(_=this.getTransformedPoint(S,T.v[E]),P=this.getTransformedPoint(S,T.o[E]),R=this.getTransformedPoint(S,T.i[0]),I=this.getTransformedPoint(S,T.v[0]),this.checkBounds(_,P,R,I,u))}},HShapeElement.prototype.checkBounds=function(o,u,T,S,E){this.getBoundsOfCurve(o,u,T,S);var C=this.shapeBoundingBox;E.x=bmMin(C.left,E.x),E.xMax=bmMax(C.right,E.xMax),E.y=bmMin(C.top,E.y),E.yMax=bmMax(C.bottom,E.yMax)},HShapeElement.prototype.shapeBoundingBox={left:0,right:0,top:0,bottom:0},HShapeElement.prototype.tempBoundingBox={x:0,xMax:0,y:0,yMax:0,width:0,height:0},HShapeElement.prototype.getBoundsOfCurve=function(o,u,T,S){for(var E=[[o[0],S[0]],[o[1],S[1]]],C,_,P,R,I,L,j,M=0;M<2;++M)_=6*o[M]-12*u[M]+6*T[M],C=-3*o[M]+9*u[M]-9*T[M]+3*S[M],P=3*u[M]-3*o[M],_|=0,C|=0,P|=0,C===0&&_===0||(C===0?(R=-P/_,R>0&&R<1&&E[M].push(this.calculateF(R,o,u,T,S,M))):(I=_*_-4*P*C,I>=0&&(L=(-_+bmSqrt(I))/(2*C),L>0&&L<1&&E[M].push(this.calculateF(L,o,u,T,S,M)),j=(-_-bmSqrt(I))/(2*C),j>0&&j<1&&E[M].push(this.calculateF(j,o,u,T,S,M)))));this.shapeBoundingBox.left=bmMin.apply(null,E[0]),this.shapeBoundingBox.top=bmMin.apply(null,E[1]),this.shapeBoundingBox.right=bmMax.apply(null,E[0]),this.shapeBoundingBox.bottom=bmMax.apply(null,E[1])},HShapeElement.prototype.calculateF=function(o,u,T,S,E,C){return bmPow(1-o,3)*u[C]+3*bmPow(1-o,2)*o*T[C]+3*(1-o)*bmPow(o,2)*S[C]+bmPow(o,3)*E[C]},HShapeElement.prototype.calculateBoundingBox=function(o,u){var T,S=o.length;for(T=0;T<S;T+=1)o[T]&&o[T].sh?this.calculateShapeBoundingBox(o[T],u):o[T]&&o[T].it?this.calculateBoundingBox(o[T].it,u):o[T]&&o[T].style&&o[T].w&&this.expandStrokeBoundingBox(o[T].w,u)},HShapeElement.prototype.expandStrokeBoundingBox=function(o,u){var T=0;if(o.keyframes){for(var S=0;S<o.keyframes.length;S+=1){var E=o.keyframes[S].s;E>T&&(T=E)}T*=o.mult}else T=o.v*o.mult;u.x-=T,u.xMax+=T,u.y-=T,u.yMax+=T},HShapeElement.prototype.currentBoxContains=function(o){return this.currentBBox.x<=o.x&&this.currentBBox.y<=o.y&&this.currentBBox.width+this.currentBBox.x>=o.x+o.width&&this.currentBBox.height+this.currentBBox.y>=o.y+o.height},HShapeElement.prototype.renderInnerContent=function(){if(this._renderShapeFrame(),!this.hidden&&(this._isFirstFrame||this._mdf)){var o=this.tempBoundingBox,u=999999;if(o.x=u,o.xMax=-u,o.y=u,o.yMax=-u,this.calculateBoundingBox(this.itemsData,o),o.width=o.xMax<o.x?0:o.xMax-o.x,o.height=o.yMax<o.y?0:o.yMax-o.y,this.currentBoxContains(o))return;var T=!1;if(this.currentBBox.w!==o.width&&(this.currentBBox.w=o.width,this.shapeCont.setAttribute("width",o.width),T=!0),this.currentBBox.h!==o.height&&(this.currentBBox.h=o.height,this.shapeCont.setAttribute("height",o.height),T=!0),T||this.currentBBox.x!==o.x||this.currentBBox.y!==o.y){this.currentBBox.w=o.width,this.currentBBox.h=o.height,this.currentBBox.x=o.x,this.currentBBox.y=o.y,this.shapeCont.setAttribute("viewBox",this.currentBBox.x+" "+this.currentBBox.y+" "+this.currentBBox.w+" "+this.currentBBox.h);var S=this.shapeCont.style,E="translate("+this.currentBBox.x+"px,"+this.currentBBox.y+"px)";S.transform=E,S.webkitTransform=E}}};function HTextElement(o,u,T){this.textSpans=[],this.textPaths=[],this.currentBBox={x:999999,y:-999999,h:0,w:0},this.renderType="svg",this.isMasked=!1,this.initElement(o,u,T)}extendPrototype([BaseElement,TransformElement,HBaseElement,HierarchyElement,FrameElement,RenderableDOMElement,ITextElement],HTextElement),HTextElement.prototype.createContent=function(){if(this.isMasked=this.checkMasks(),this.isMasked){this.renderType="svg",this.compW=this.comp.data.w,this.compH=this.comp.data.h,this.svgElement.setAttribute("width",this.compW),this.svgElement.setAttribute("height",this.compH);var o=createNS("g");this.maskedElement.appendChild(o),this.innerElem=o}else this.renderType="html",this.innerElem=this.layerElement;this.checkParenting()},HTextElement.prototype.buildNewText=function(){var o=this.textProperty.currentData;this.renderedLetters=createSizedArray(o.l?o.l.length:0);var u=this.innerElem.style,T=o.fc?this.buildColor(o.fc):"rgba(0,0,0,0)";u.fill=T,u.color=T,o.sc&&(u.stroke=this.buildColor(o.sc),u.strokeWidth=o.sw+"px");var S=this.globalData.fontManager.getFontByName(o.f);if(!this.globalData.fontManager.chars)if(u.fontSize=o.finalSize+"px",u.lineHeight=o.finalSize+"px",S.fClass)this.innerElem.className=S.fClass;else{u.fontFamily=S.fFamily;var E=o.fWeight,C=o.fStyle;u.fontStyle=C,u.fontWeight=E}var _,P,R=o.l;P=R.length;var I,L,j,M=this.mHelper,D,F="",N=0;for(_=0;_<P;_+=1){if(this.globalData.fontManager.chars?(this.textPaths[N]?I=this.textPaths[N]:(I=createNS("path"),I.setAttribute("stroke-linecap",lineCapEnum[1]),I.setAttribute("stroke-linejoin",lineJoinEnum[2]),I.setAttribute("stroke-miterlimit","4")),this.isMasked||(this.textSpans[N]?(L=this.textSpans[N],j=L.children[0]):(L=createTag("div"),L.style.lineHeight=0,j=createNS("svg"),j.appendChild(I),styleDiv(L)))):this.isMasked?I=this.textPaths[N]?this.textPaths[N]:createNS("text"):this.textSpans[N]?(L=this.textSpans[N],I=this.textPaths[N]):(L=createTag("span"),styleDiv(L),I=createTag("span"),styleDiv(I),L.appendChild(I)),this.globalData.fontManager.chars){var G=this.globalData.fontManager.getCharData(o.finalText[_],S.fStyle,this.globalData.fontManager.getFontByName(o.f).fFamily),B;if(G?B=G.data:B=null,M.reset(),B&&B.shapes&&B.shapes.length&&(D=B.shapes[0].it,M.scale(o.finalSize/100,o.finalSize/100),F=this.createPathShape(M,D),I.setAttribute("d",F)),this.isMasked)this.innerElem.appendChild(I);else{if(this.innerElem.appendChild(L),B&&B.shapes){document.body.appendChild(j);var H=j.getBBox();j.setAttribute("width",H.width+2),j.setAttribute("height",H.height+2),j.setAttribute("viewBox",H.x-1+" "+(H.y-1)+" "+(H.width+2)+" "+(H.height+2));var O=j.style,V="translate("+(H.x-1)+"px,"+(H.y-1)+"px)";O.transform=V,O.webkitTransform=V,R[_].yOffset=H.y-1}else j.setAttribute("width",1),j.setAttribute("height",1);L.appendChild(j)}}else if(I.textContent=R[_].val,I.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),this.isMasked)this.innerElem.appendChild(I);else{this.innerElem.appendChild(L);var U=I.style,W="translate3d(0,"+-o.finalSize/1.2+"px,0)";U.transform=W,U.webkitTransform=W}this.isMasked?this.textSpans[N]=I:this.textSpans[N]=L,this.textSpans[N].style.display="block",this.textPaths[N]=I,N+=1}for(;N<this.textSpans.length;)this.textSpans[N].style.display="none",N+=1},HTextElement.prototype.renderInnerContent=function(){this.validateText();var o;if(this.data.singleShape){if(!this._isFirstFrame&&!this.lettersChangedFlag)return;if(this.isMasked&&this.finalTransform._matMdf){this.svgElement.setAttribute("viewBox",-this.finalTransform.mProp.p.v[0]+" "+-this.finalTransform.mProp.p.v[1]+" "+this.compW+" "+this.compH),o=this.svgElement.style;var u="translate("+-this.finalTransform.mProp.p.v[0]+"px,"+-this.finalTransform.mProp.p.v[1]+"px)";o.transform=u,o.webkitTransform=u}}if(this.textAnimator.getMeasures(this.textProperty.currentData,this.lettersChangedFlag),!(!this.lettersChangedFlag&&!this.textAnimator.lettersChangedFlag)){var T,S,E=0,C=this.textAnimator.renderedLetters,_=this.textProperty.currentData.l;S=_.length;var P,R,I;for(T=0;T<S;T+=1)_[T].n?E+=1:(R=this.textSpans[T],I=this.textPaths[T],P=C[E],E+=1,P._mdf.m&&(this.isMasked?R.setAttribute("transform",P.m):(R.style.webkitTransform=P.m,R.style.transform=P.m)),R.style.opacity=P.o,P.sw&&P._mdf.sw&&I.setAttribute("stroke-width",P.sw),P.sc&&P._mdf.sc&&I.setAttribute("stroke",P.sc),P.fc&&P._mdf.fc&&(I.setAttribute("fill",P.fc),I.style.color=P.fc));if(this.innerElem.getBBox&&!this.hidden&&(this._isFirstFrame||this._mdf)){var L=this.innerElem.getBBox();this.currentBBox.w!==L.width&&(this.currentBBox.w=L.width,this.svgElement.setAttribute("width",L.width)),this.currentBBox.h!==L.height&&(this.currentBBox.h=L.height,this.svgElement.setAttribute("height",L.height));var j=1;if(this.currentBBox.w!==L.width+j*2||this.currentBBox.h!==L.height+j*2||this.currentBBox.x!==L.x-j||this.currentBBox.y!==L.y-j){this.currentBBox.w=L.width+j*2,this.currentBBox.h=L.height+j*2,this.currentBBox.x=L.x-j,this.currentBBox.y=L.y-j,this.svgElement.setAttribute("viewBox",this.currentBBox.x+" "+this.currentBBox.y+" "+this.currentBBox.w+" "+this.currentBBox.h),o=this.svgElement.style;var M="translate("+this.currentBBox.x+"px,"+this.currentBBox.y+"px)";o.transform=M,o.webkitTransform=M}}}};function HCameraElement(o,u,T){this.initFrame(),this.initBaseData(o,u,T),this.initHierarchy();var S=PropertyFactory.getProp;if(this.pe=S(this,o.pe,0,0,this),o.ks.p.s?(this.px=S(this,o.ks.p.x,1,0,this),this.py=S(this,o.ks.p.y,1,0,this),this.pz=S(this,o.ks.p.z,1,0,this)):this.p=S(this,o.ks.p,1,0,this),o.ks.a&&(this.a=S(this,o.ks.a,1,0,this)),o.ks.or.k.length&&o.ks.or.k[0].to){var E,C=o.ks.or.k.length;for(E=0;E<C;E+=1)o.ks.or.k[E].to=null,o.ks.or.k[E].ti=null}this.or=S(this,o.ks.or,1,degToRads,this),this.or.sh=!0,this.rx=S(this,o.ks.rx,0,degToRads,this),this.ry=S(this,o.ks.ry,0,degToRads,this),this.rz=S(this,o.ks.rz,0,degToRads,this),this.mat=new Matrix,this._prevMat=new Matrix,this._isFirstFrame=!0,this.finalTransform={mProp:this}}extendPrototype([BaseElement,FrameElement,HierarchyElement],HCameraElement),HCameraElement.prototype.setup=function(){var o,u=this.comp.threeDElements.length,T,S,E;for(o=0;o<u;o+=1)if(T=this.comp.threeDElements[o],T.type==="3d"){S=T.perspectiveElem.style,E=T.container.style;var C=this.pe.v+"px",_="0px 0px 0px",P="matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)";S.perspective=C,S.webkitPerspective=C,E.transformOrigin=_,E.mozTransformOrigin=_,E.webkitTransformOrigin=_,S.transform=P,S.webkitTransform=P}},HCameraElement.prototype.createElements=function(){},HCameraElement.prototype.hide=function(){},HCameraElement.prototype.renderFrame=function(){var o=this._isFirstFrame,u,T;if(this.hierarchy)for(T=this.hierarchy.length,u=0;u<T;u+=1)o=this.hierarchy[u].finalTransform.mProp._mdf||o;if(o||this.pe._mdf||this.p&&this.p._mdf||this.px&&(this.px._mdf||this.py._mdf||this.pz._mdf)||this.rx._mdf||this.ry._mdf||this.rz._mdf||this.or._mdf||this.a&&this.a._mdf){if(this.mat.reset(),this.hierarchy)for(T=this.hierarchy.length-1,u=T;u>=0;u-=1){var S=this.hierarchy[u].finalTransform.mProp;this.mat.translate(-S.p.v[0],-S.p.v[1],S.p.v[2]),this.mat.rotateX(-S.or.v[0]).rotateY(-S.or.v[1]).rotateZ(S.or.v[2]),this.mat.rotateX(-S.rx.v).rotateY(-S.ry.v).rotateZ(S.rz.v),this.mat.scale(1/S.s.v[0],1/S.s.v[1],1/S.s.v[2]),this.mat.translate(S.a.v[0],S.a.v[1],S.a.v[2])}if(this.p?this.mat.translate(-this.p.v[0],-this.p.v[1],this.p.v[2]):this.mat.translate(-this.px.v,-this.py.v,this.pz.v),this.a){var E;this.p?E=[this.p.v[0]-this.a.v[0],this.p.v[1]-this.a.v[1],this.p.v[2]-this.a.v[2]]:E=[this.px.v-this.a.v[0],this.py.v-this.a.v[1],this.pz.v-this.a.v[2]];var C=Math.sqrt(Math.pow(E[0],2)+Math.pow(E[1],2)+Math.pow(E[2],2)),_=[E[0]/C,E[1]/C,E[2]/C],P=Math.sqrt(_[2]*_[2]+_[0]*_[0]),R=Math.atan2(_[1],P),I=Math.atan2(_[0],-_[2]);this.mat.rotateY(I).rotateX(-R)}this.mat.rotateX(-this.rx.v).rotateY(-this.ry.v).rotateZ(this.rz.v),this.mat.rotateX(-this.or.v[0]).rotateY(-this.or.v[1]).rotateZ(this.or.v[2]),this.mat.translate(this.globalData.compSize.w/2,this.globalData.compSize.h/2,0),this.mat.translate(0,0,this.pe.v);var L=!this._prevMat.equals(this.mat);if((L||this.pe._mdf)&&this.comp.threeDElements){T=this.comp.threeDElements.length;var j,M,D;for(u=0;u<T;u+=1)if(j=this.comp.threeDElements[u],j.type==="3d"){if(L){var F=this.mat.toCSS();D=j.container.style,D.transform=F,D.webkitTransform=F}this.pe._mdf&&(M=j.perspectiveElem.style,M.perspective=this.pe.v+"px",M.webkitPerspective=this.pe.v+"px")}this.mat.clone(this._prevMat)}}this._isFirstFrame=!1},HCameraElement.prototype.prepareFrame=function(o){this.prepareProperties(o,!0)},HCameraElement.prototype.destroy=function(){},HCameraElement.prototype.getBaseElement=function(){return null};function HImageElement(o,u,T){this.assetData=u.getAssetData(o.refId),this.initElement(o,u,T)}extendPrototype([BaseElement,TransformElement,HBaseElement,HSolidElement,HierarchyElement,FrameElement,RenderableElement],HImageElement),HImageElement.prototype.createContent=function(){var o=this.globalData.getAssetsPath(this.assetData),u=new Image;this.data.hasMask?(this.imageElem=createNS("image"),this.imageElem.setAttribute("width",this.assetData.w+"px"),this.imageElem.setAttribute("height",this.assetData.h+"px"),this.imageElem.setAttributeNS("http://www.w3.org/1999/xlink","href",o),this.layerElement.appendChild(this.imageElem),this.baseElement.setAttribute("width",this.assetData.w),this.baseElement.setAttribute("height",this.assetData.h)):this.layerElement.appendChild(u),u.crossOrigin="anonymous",u.src=o,this.data.ln&&this.baseElement.setAttribute("id",this.data.ln)};function HybridRendererBase(o,u){this.animationItem=o,this.layers=null,this.renderedFrame=-1,this.renderConfig={className:u&&u.className||"",imagePreserveAspectRatio:u&&u.imagePreserveAspectRatio||"xMidYMid slice",hideOnTransparent:!(u&&u.hideOnTransparent===!1),filterSize:{width:u&&u.filterSize&&u.filterSize.width||"400%",height:u&&u.filterSize&&u.filterSize.height||"400%",x:u&&u.filterSize&&u.filterSize.x||"-100%",y:u&&u.filterSize&&u.filterSize.y||"-100%"}},this.globalData={_mdf:!1,frameNum:-1,renderConfig:this.renderConfig},this.pendingElements=[],this.elements=[],this.threeDElements=[],this.destroyed=!1,this.camera=null,this.supports3d=!0,this.rendererType="html"}extendPrototype([BaseRenderer],HybridRendererBase),HybridRendererBase.prototype.buildItem=SVGRenderer.prototype.buildItem,HybridRendererBase.prototype.checkPendingElements=function(){for(;this.pendingElements.length;){var o=this.pendingElements.pop();o.checkParenting()}},HybridRendererBase.prototype.appendElementInPos=function(o,u){var T=o.getBaseElement();if(T){var S=this.layers[u];if(!S.ddd||!this.supports3d)if(this.threeDElements)this.addTo3dContainer(T,u);else{for(var E=0,C,_,P;E<u;)this.elements[E]&&this.elements[E]!==!0&&this.elements[E].getBaseElement&&(_=this.elements[E],P=this.layers[E].ddd?this.getThreeDContainerByPos(E):_.getBaseElement(),C=P||C),E+=1;C?(!S.ddd||!this.supports3d)&&this.layerElement.insertBefore(T,C):(!S.ddd||!this.supports3d)&&this.layerElement.appendChild(T)}else this.addTo3dContainer(T,u)}},HybridRendererBase.prototype.createShape=function(o){return this.supports3d?new HShapeElement(o,this.globalData,this):new SVGShapeElement(o,this.globalData,this)},HybridRendererBase.prototype.createText=function(o){return this.supports3d?new HTextElement(o,this.globalData,this):new SVGTextLottieElement(o,this.globalData,this)},HybridRendererBase.prototype.createCamera=function(o){return this.camera=new HCameraElement(o,this.globalData,this),this.camera},HybridRendererBase.prototype.createImage=function(o){return this.supports3d?new HImageElement(o,this.globalData,this):new IImageElement(o,this.globalData,this)},HybridRendererBase.prototype.createSolid=function(o){return this.supports3d?new HSolidElement(o,this.globalData,this):new ISolidElement(o,this.globalData,this)},HybridRendererBase.prototype.createNull=SVGRenderer.prototype.createNull,HybridRendererBase.prototype.getThreeDContainerByPos=function(o){for(var u=0,T=this.threeDElements.length;u<T;){if(this.threeDElements[u].startPos<=o&&this.threeDElements[u].endPos>=o)return this.threeDElements[u].perspectiveElem;u+=1}return null},HybridRendererBase.prototype.createThreeDContainer=function(o,u){var T=createTag("div"),S,E;styleDiv(T);var C=createTag("div");if(styleDiv(C),u==="3d"){S=T.style,S.width=this.globalData.compSize.w+"px",S.height=this.globalData.compSize.h+"px";var _="50% 50%";S.webkitTransformOrigin=_,S.mozTransformOrigin=_,S.transformOrigin=_,E=C.style;var P="matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)";E.transform=P,E.webkitTransform=P}T.appendChild(C);var R={container:C,perspectiveElem:T,startPos:o,endPos:o,type:u};return this.threeDElements.push(R),R},HybridRendererBase.prototype.build3dContainers=function(){var o,u=this.layers.length,T,S="";for(o=0;o<u;o+=1)this.layers[o].ddd&&this.layers[o].ty!==3?(S!=="3d"&&(S="3d",T=this.createThreeDContainer(o,"3d")),T.endPos=Math.max(T.endPos,o)):(S!=="2d"&&(S="2d",T=this.createThreeDContainer(o,"2d")),T.endPos=Math.max(T.endPos,o));for(u=this.threeDElements.length,o=u-1;o>=0;o-=1)this.resizerElem.appendChild(this.threeDElements[o].perspectiveElem)},HybridRendererBase.prototype.addTo3dContainer=function(o,u){for(var T=0,S=this.threeDElements.length;T<S;){if(u<=this.threeDElements[T].endPos){for(var E=this.threeDElements[T].startPos,C;E<u;)this.elements[E]&&this.elements[E].getBaseElement&&(C=this.elements[E].getBaseElement()),E+=1;C?this.threeDElements[T].container.insertBefore(o,C):this.threeDElements[T].container.appendChild(o);break}T+=1}},HybridRendererBase.prototype.configAnimation=function(o){var u=createTag("div"),T=this.animationItem.wrapper,S=u.style;S.width=o.w+"px",S.height=o.h+"px",this.resizerElem=u,styleDiv(u),S.transformStyle="flat",S.mozTransformStyle="flat",S.webkitTransformStyle="flat",this.renderConfig.className&&u.setAttribute("class",this.renderConfig.className),T.appendChild(u),S.overflow="hidden";var E=createNS("svg");E.setAttribute("width","1"),E.setAttribute("height","1"),styleDiv(E),this.resizerElem.appendChild(E);var C=createNS("defs");E.appendChild(C),this.data=o,this.setupGlobalData(o,E),this.globalData.defs=C,this.layers=o.layers,this.layerElement=this.resizerElem,this.build3dContainers(),this.updateContainerSize()},HybridRendererBase.prototype.destroy=function(){this.animationItem.wrapper&&(this.animationItem.wrapper.innerText=""),this.animationItem.container=null,this.globalData.defs=null;var o,u=this.layers?this.layers.length:0;for(o=0;o<u;o+=1)this.elements[o]&&this.elements[o].destroy&&this.elements[o].destroy();this.elements.length=0,this.destroyed=!0,this.animationItem=null},HybridRendererBase.prototype.updateContainerSize=function(){var o=this.animationItem.wrapper.offsetWidth,u=this.animationItem.wrapper.offsetHeight,T=o/u,S=this.globalData.compSize.w/this.globalData.compSize.h,E,C,_,P;S>T?(E=o/this.globalData.compSize.w,C=o/this.globalData.compSize.w,_=0,P=(u-this.globalData.compSize.h*(o/this.globalData.compSize.w))/2):(E=u/this.globalData.compSize.h,C=u/this.globalData.compSize.h,_=(o-this.globalData.compSize.w*(u/this.globalData.compSize.h))/2,P=0);var R=this.resizerElem.style;R.webkitTransform="matrix3d("+E+",0,0,0,0,"+C+",0,0,0,0,1,0,"+_+","+P+",0,1)",R.transform=R.webkitTransform},HybridRendererBase.prototype.renderFrame=SVGRenderer.prototype.renderFrame,HybridRendererBase.prototype.hide=function(){this.resizerElem.style.display="none"},HybridRendererBase.prototype.show=function(){this.resizerElem.style.display="block"},HybridRendererBase.prototype.initItems=function(){if(this.buildAllItems(),this.camera)this.camera.setup();else{var o=this.globalData.compSize.w,u=this.globalData.compSize.h,T,S=this.threeDElements.length;for(T=0;T<S;T+=1){var E=this.threeDElements[T].perspectiveElem.style;E.webkitPerspective=Math.sqrt(Math.pow(o,2)+Math.pow(u,2))+"px",E.perspective=E.webkitPerspective}}},HybridRendererBase.prototype.searchExtraCompositions=function(o){var u,T=o.length,S=createTag("div");for(u=0;u<T;u+=1)if(o[u].xt){var E=this.createComp(o[u],S,this.globalData.comp,null);E.initExpressions(),this.globalData.projectInterface.registerComposition(E)}};function HCompElement(o,u,T){this.layers=o.layers,this.supports3d=!o.hasMask,this.completeLayers=!1,this.pendingElements=[],this.elements=this.layers?createSizedArray(this.layers.length):[],this.initElement(o,u,T),this.tm=o.tm?PropertyFactory.getProp(this,o.tm,0,u.frameRate,this):{_placeholder:!0}}extendPrototype([HybridRendererBase,ICompElement,HBaseElement],HCompElement),HCompElement.prototype._createBaseContainerElements=HCompElement.prototype.createContainerElements,HCompElement.prototype.createContainerElements=function(){this._createBaseContainerElements(),this.data.hasMask?(this.svgElement.setAttribute("width",this.data.w),this.svgElement.setAttribute("height",this.data.h),this.transformedElement=this.baseElement):this.transformedElement=this.layerElement},HCompElement.prototype.addTo3dContainer=function(o,u){for(var T=0,S;T<u;)this.elements[T]&&this.elements[T].getBaseElement&&(S=this.elements[T].getBaseElement()),T+=1;S?this.layerElement.insertBefore(o,S):this.layerElement.appendChild(o)},HCompElement.prototype.createComp=function(o){return this.supports3d?new HCompElement(o,this.globalData,this):new SVGCompElement(o,this.globalData,this)};function HybridRenderer(o,u){this.animationItem=o,this.layers=null,this.renderedFrame=-1,this.renderConfig={className:u&&u.className||"",imagePreserveAspectRatio:u&&u.imagePreserveAspectRatio||"xMidYMid slice",hideOnTransparent:!(u&&u.hideOnTransparent===!1),filterSize:{width:u&&u.filterSize&&u.filterSize.width||"400%",height:u&&u.filterSize&&u.filterSize.height||"400%",x:u&&u.filterSize&&u.filterSize.x||"-100%",y:u&&u.filterSize&&u.filterSize.y||"-100%"},runExpressions:!u||u.runExpressions===void 0||u.runExpressions},this.globalData={_mdf:!1,frameNum:-1,renderConfig:this.renderConfig},this.pendingElements=[],this.elements=[],this.threeDElements=[],this.destroyed=!1,this.camera=null,this.supports3d=!0,this.rendererType="html"}extendPrototype([HybridRendererBase],HybridRenderer),HybridRenderer.prototype.createComp=function(o){return this.supports3d?new HCompElement(o,this.globalData,this):new SVGCompElement(o,this.globalData,this)};var CompExpressionInterface=function(){return function(o){function u(T){for(var S=0,E=o.layers.length;S<E;){if(o.layers[S].nm===T||o.layers[S].ind===T)return o.elements[S].layerInterface;S+=1}return null}return Object.defineProperty(u,"_name",{value:o.data.nm}),u.layer=u,u.pixelAspect=1,u.height=o.data.h||o.globalData.compSize.h,u.width=o.data.w||o.globalData.compSize.w,u.pixelAspect=1,u.frameDuration=1/o.globalData.frameRate,u.displayStartTime=0,u.numLayers=o.layers.length,u}}();function _typeof$2(o){"@babel/helpers - typeof";return _typeof$2=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(u){return typeof u}:function(u){return u&&typeof Symbol=="function"&&u.constructor===Symbol&&u!==Symbol.prototype?"symbol":typeof u},_typeof$2(o)}function seedRandom(o,u){var T=this,S=256,E=6,C=52,_="random",P=u.pow(S,E),R=u.pow(2,C),I=R*2,L=S-1,j;function M(O,V,U){var W=[];V=V===!0?{entropy:!0}:V||{};var K=G(N(V.entropy?[O,H(o)]:O===null?B():O,3),W),Y=new D(W),ee=function(){for(var se=Y.g(E),Q=P,ie=0;se<R;)se=(se+ie)*S,Q*=S,ie=Y.g(1);for(;se>=I;)se/=2,Q/=2,ie>>>=1;return(se+ie)/Q};return ee.int32=function(){return Y.g(4)|0},ee.quick=function(){return Y.g(4)/4294967296},ee.double=ee,G(H(Y.S),o),(V.pass||U||function(oe,se,Q,ie){return ie&&(ie.S&&F(ie,Y),oe.state=function(){return F(Y,{})}),Q?(u[_]=oe,se):oe})(ee,K,"global"in V?V.global:this==u,V.state)}u["seed"+_]=M;function D(O){var V,U=O.length,W=this,K=0,Y=W.i=W.j=0,ee=W.S=[];for(U||(O=[U++]);K<S;)ee[K]=K++;for(K=0;K<S;K++)ee[K]=ee[Y=L&Y+O[K%U]+(V=ee[K])],ee[Y]=V;W.g=function(oe){for(var se,Q=0,ie=W.i,ae=W.j,re=W.S;oe--;)se=re[ie=L&ie+1],Q=Q*S+re[L&(re[ie]=re[ae=L&ae+se])+(re[ae]=se)];return W.i=ie,W.j=ae,Q}}function F(O,V){return V.i=O.i,V.j=O.j,V.S=O.S.slice(),V}function N(O,V){var U=[],W=_typeof$2(O),K;if(V&&W=="object")for(K in O)try{U.push(N(O[K],V-1))}catch{}return U.length?U:W=="string"?O:O+"\0"}function G(O,V){for(var U=O+"",W,K=0;K<U.length;)V[L&K]=L&(W^=V[L&K]*19)+U.charCodeAt(K++);return H(V)}function B(){try{var O=new Uint8Array(S);return(T.crypto||T.msCrypto).getRandomValues(O),H(O)}catch{var V=T.navigator,U=V&&V.plugins;return[+new Date,T,U,T.screen,H(o)]}}function H(O){return String.fromCharCode.apply(0,O)}G(u.random(),o)}function initialize$2(o){seedRandom([],o)}var propTypes={SHAPE:"shape"};function _typeof$1(o){"@babel/helpers - typeof";return _typeof$1=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(u){return typeof u}:function(u){return u&&typeof Symbol=="function"&&u.constructor===Symbol&&u!==Symbol.prototype?"symbol":typeof u},_typeof$1(o)}var ExpressionManager=function(){var ob={},Math=BMMath,window=null,document=null,XMLHttpRequest=null,fetch=null,frames=null,_lottieGlobal={};initialize$2(BMMath);function resetFrame(){_lottieGlobal={}}function $bm_isInstanceOfArray(o){return o.constructor===Array||o.constructor===Float32Array}function isNumerable(o,u){return o==="number"||u instanceof Number||o==="boolean"||o==="string"}function $bm_neg(o){var u=_typeof$1(o);if(u==="number"||o instanceof Number||u==="boolean")return-o;if($bm_isInstanceOfArray(o)){var T,S=o.length,E=[];for(T=0;T<S;T+=1)E[T]=-o[T];return E}return o.propType?o.v:-o}var easeInBez=BezierFactory.getBezierEasing(.333,0,.833,.833,"easeIn").get,easeOutBez=BezierFactory.getBezierEasing(.167,.167,.667,1,"easeOut").get,easeInOutBez=BezierFactory.getBezierEasing(.33,0,.667,1,"easeInOut").get;function sum(o,u){var T=_typeof$1(o),S=_typeof$1(u);if(isNumerable(T,o)&&isNumerable(S,u)||T==="string"||S==="string")return o+u;if($bm_isInstanceOfArray(o)&&isNumerable(S,u))return o=o.slice(0),o[0]+=u,o;if(isNumerable(T,o)&&$bm_isInstanceOfArray(u))return u=u.slice(0),u[0]=o+u[0],u;if($bm_isInstanceOfArray(o)&&$bm_isInstanceOfArray(u)){for(var E=0,C=o.length,_=u.length,P=[];E<C||E<_;)(typeof o[E]=="number"||o[E]instanceof Number)&&(typeof u[E]=="number"||u[E]instanceof Number)?P[E]=o[E]+u[E]:P[E]=u[E]===void 0?o[E]:o[E]||u[E],E+=1;return P}return 0}var add=sum;function sub(o,u){var T=_typeof$1(o),S=_typeof$1(u);if(isNumerable(T,o)&&isNumerable(S,u))return T==="string"&&(o=parseInt(o,10)),S==="string"&&(u=parseInt(u,10)),o-u;if($bm_isInstanceOfArray(o)&&isNumerable(S,u))return o=o.slice(0),o[0]-=u,o;if(isNumerable(T,o)&&$bm_isInstanceOfArray(u))return u=u.slice(0),u[0]=o-u[0],u;if($bm_isInstanceOfArray(o)&&$bm_isInstanceOfArray(u)){for(var E=0,C=o.length,_=u.length,P=[];E<C||E<_;)(typeof o[E]=="number"||o[E]instanceof Number)&&(typeof u[E]=="number"||u[E]instanceof Number)?P[E]=o[E]-u[E]:P[E]=u[E]===void 0?o[E]:o[E]||u[E],E+=1;return P}return 0}function mul(o,u){var T=_typeof$1(o),S=_typeof$1(u),E;if(isNumerable(T,o)&&isNumerable(S,u))return o*u;var C,_;if($bm_isInstanceOfArray(o)&&isNumerable(S,u)){for(_=o.length,E=createTypedArray("float32",_),C=0;C<_;C+=1)E[C]=o[C]*u;return E}if(isNumerable(T,o)&&$bm_isInstanceOfArray(u)){for(_=u.length,E=createTypedArray("float32",_),C=0;C<_;C+=1)E[C]=o*u[C];return E}return 0}function div(o,u){var T=_typeof$1(o),S=_typeof$1(u),E;if(isNumerable(T,o)&&isNumerable(S,u))return o/u;var C,_;if($bm_isInstanceOfArray(o)&&isNumerable(S,u)){for(_=o.length,E=createTypedArray("float32",_),C=0;C<_;C+=1)E[C]=o[C]/u;return E}if(isNumerable(T,o)&&$bm_isInstanceOfArray(u)){for(_=u.length,E=createTypedArray("float32",_),C=0;C<_;C+=1)E[C]=o/u[C];return E}return 0}function mod(o,u){return typeof o=="string"&&(o=parseInt(o,10)),typeof u=="string"&&(u=parseInt(u,10)),o%u}var $bm_sum=sum,$bm_sub=sub,$bm_mul=mul,$bm_div=div,$bm_mod=mod;function clamp(o,u,T){if(u>T){var S=T;T=u,u=S}return Math.min(Math.max(o,u),T)}function radiansToDegrees(o){return o/degToRads}var radians_to_degrees=radiansToDegrees;function degreesToRadians(o){return o*degToRads}var degrees_to_radians=radiansToDegrees,helperLengthArray=[0,0,0,0,0,0];function length(o,u){if(typeof o=="number"||o instanceof Number)return u=u||0,Math.abs(o-u);u||(u=helperLengthArray);var T,S=Math.min(o.length,u.length),E=0;for(T=0;T<S;T+=1)E+=Math.pow(u[T]-o[T],2);return Math.sqrt(E)}function normalize(o){return div(o,length(o))}function rgbToHsl(o){var u=o[0],T=o[1],S=o[2],E=Math.max(u,T,S),C=Math.min(u,T,S),_,P,R=(E+C)/2;if(E===C)_=0,P=0;else{var I=E-C;switch(P=R>.5?I/(2-E-C):I/(E+C),E){case u:_=(T-S)/I+(T<S?6:0);break;case T:_=(S-u)/I+2;break;case S:_=(u-T)/I+4;break}_/=6}return[_,P,R,o[3]]}function hue2rgb(o,u,T){return T<0&&(T+=1),T>1&&(T-=1),T<1/6?o+(u-o)*6*T:T<1/2?u:T<2/3?o+(u-o)*(2/3-T)*6:o}function hslToRgb(o){var u=o[0],T=o[1],S=o[2],E,C,_;if(T===0)E=S,_=S,C=S;else{var P=S<.5?S*(1+T):S+T-S*T,R=2*S-P;E=hue2rgb(R,P,u+1/3),C=hue2rgb(R,P,u),_=hue2rgb(R,P,u-1/3)}return[E,C,_,o[3]]}function linear(o,u,T,S,E){if((S===void 0||E===void 0)&&(S=u,E=T,u=0,T=1),T<u){var C=T;T=u,u=C}if(o<=u)return S;if(o>=T)return E;var _=T===u?0:(o-u)/(T-u);if(!S.length)return S+(E-S)*_;var P,R=S.length,I=createTypedArray("float32",R);for(P=0;P<R;P+=1)I[P]=S[P]+(E[P]-S[P])*_;return I}function random(o,u){if(u===void 0&&(o===void 0?(o=0,u=1):(u=o,o=void 0)),u.length){var T,S=u.length;o||(o=createTypedArray("float32",S));var E=createTypedArray("float32",S),C=BMMath.random();for(T=0;T<S;T+=1)E[T]=o[T]+C*(u[T]-o[T]);return E}o===void 0&&(o=0);var _=BMMath.random();return o+_*(u-o)}function createPath(o,u,T,S){var E,C=o.length,_=shapePool.newElement();_.setPathData(!!S,C);var P=[0,0],R,I;for(E=0;E<C;E+=1)R=u&&u[E]?u[E]:P,I=T&&T[E]?T[E]:P,_.setTripleAt(o[E][0],o[E][1],I[0]+o[E][0],I[1]+o[E][1],R[0]+o[E][0],R[1]+o[E][1],E,!0);return _}function initiateExpression(elem,data,property){function noOp(o){return o}if(!elem.globalData.renderConfig.runExpressions)return noOp;var val=data.x,needsVelocity=/velocity(?![\w\d])/.test(val),_needsRandom=val.indexOf("random")!==-1,elemType=elem.data.ty,transform,$bm_transform,content,effect,thisProperty=property;thisProperty._name=elem.data.nm,thisProperty.valueAtTime=thisProperty.getValueAtTime,Object.defineProperty(thisProperty,"value",{get:function(){return thisProperty.v}}),elem.comp.frameDuration=1/elem.comp.globalData.frameRate,elem.comp.displayStartTime=0;var inPoint=elem.data.ip/elem.comp.globalData.frameRate,outPoint=elem.data.op/elem.comp.globalData.frameRate,width=elem.data.sw?elem.data.sw:0,height=elem.data.sh?elem.data.sh:0,name=elem.data.nm,loopIn,loop_in,loopOut,loop_out,smooth,toWorld,fromWorld,fromComp,toComp,fromCompToSurface,position,rotation,anchorPoint,scale,thisLayer,thisComp,mask,valueAtTime,velocityAtTime,scoped_bm_rt,expression_function=eval("[function _expression_function(){"+val+";scoped_bm_rt=$bm_rt}]")[0],numKeys=property.kf?data.k.length:0,active=!this.data||this.data.hd!==!0,wiggle=(function o(u,T){var S,E,C=this.pv.length?this.pv.length:1,_=createTypedArray("float32",C);u=5;var P=Math.floor(time*u);for(S=0,E=0;S<P;){for(E=0;E<C;E+=1)_[E]+=-T+T*2*BMMath.random();S+=1}var R=time*u,I=R-Math.floor(R),L=createTypedArray("float32",C);if(C>1){for(E=0;E<C;E+=1)L[E]=this.pv[E]+_[E]+(-T+T*2*BMMath.random())*I;return L}return this.pv+_[0]+(-T+T*2*BMMath.random())*I}).bind(this);thisProperty.loopIn&&(loopIn=thisProperty.loopIn.bind(thisProperty),loop_in=loopIn),thisProperty.loopOut&&(loopOut=thisProperty.loopOut.bind(thisProperty),loop_out=loopOut),thisProperty.smooth&&(smooth=thisProperty.smooth.bind(thisProperty));function loopInDuration(o,u){return loopIn(o,u,!0)}function loopOutDuration(o,u){return loopOut(o,u,!0)}this.getValueAtTime&&(valueAtTime=this.getValueAtTime.bind(this)),this.getVelocityAtTime&&(velocityAtTime=this.getVelocityAtTime.bind(this));var comp=elem.comp.globalData.projectInterface.bind(elem.comp.globalData.projectInterface);function lookAt(o,u){var T=[u[0]-o[0],u[1]-o[1],u[2]-o[2]],S=Math.atan2(T[0],Math.sqrt(T[1]*T[1]+T[2]*T[2]))/degToRads,E=-Math.atan2(T[1],T[2])/degToRads;return[E,S,0]}function easeOut(o,u,T,S,E){return applyEase(easeOutBez,o,u,T,S,E)}function easeIn(o,u,T,S,E){return applyEase(easeInBez,o,u,T,S,E)}function ease(o,u,T,S,E){return applyEase(easeInOutBez,o,u,T,S,E)}function applyEase(o,u,T,S,E,C){E===void 0?(E=T,C=S):u=(u-T)/(S-T),u>1?u=1:u<0&&(u=0);var _=o(u);if($bm_isInstanceOfArray(E)){var P,R=E.length,I=createTypedArray("float32",R);for(P=0;P<R;P+=1)I[P]=(C[P]-E[P])*_+E[P];return I}return(C-E)*_+E}function nearestKey(o){var u,T=data.k.length,S,E;if(!data.k.length||typeof data.k[0]=="number")S=0,E=0;else if(S=-1,o*=elem.comp.globalData.frameRate,o<data.k[0].t)S=1,E=data.k[0].t;else{for(u=0;u<T-1;u+=1)if(o===data.k[u].t){S=u+1,E=data.k[u].t;break}else if(o>data.k[u].t&&o<data.k[u+1].t){o-data.k[u].t>data.k[u+1].t-o?(S=u+2,E=data.k[u+1].t):(S=u+1,E=data.k[u].t);break}S===-1&&(S=u+1,E=data.k[u].t)}var C={};return C.index=S,C.time=E/elem.comp.globalData.frameRate,C}function key(o){var u,T,S;if(!data.k.length||typeof data.k[0]=="number")throw new Error("The property has no keyframe at index "+o);o-=1,u={time:data.k[o].t/elem.comp.globalData.frameRate,value:[]};var E=Object.prototype.hasOwnProperty.call(data.k[o],"s")?data.k[o].s:data.k[o-1].e;for(S=E.length,T=0;T<S;T+=1)u[T]=E[T],u.value[T]=E[T];return u}function framesToTime(o,u){return u||(u=elem.comp.globalData.frameRate),o/u}function timeToFrames(o,u){return!o&&o!==0&&(o=time),u||(u=elem.comp.globalData.frameRate),o*u}function seedRandom(o){BMMath.seedrandom(randSeed+o)}function sourceRectAtTime(){return elem.sourceRectAtTime()}function substring(o,u){return typeof value=="string"?u===void 0?value.substring(o):value.substring(o,u):""}function substr(o,u){return typeof value=="string"?u===void 0?value.substr(o):value.substr(o,u):""}function posterizeTime(o){time=o===0?0:Math.floor(time*o)/o,value=valueAtTime(time)}var time,velocity,value,text,textIndex,textTotal,selectorValue,index=elem.data.ind,hasParent=!!(elem.hierarchy&&elem.hierarchy.length),parent,randSeed=Math.floor(Math.random()*1e6),globalData=elem.globalData;function executeExpression(o){return value=o,this.frameExpressionId===elem.globalData.frameId&&this.propType!=="textSelector"?value:(this.propType==="textSelector"&&(textIndex=this.textIndex,textTotal=this.textTotal,selectorValue=this.selectorValue),thisLayer||(text=elem.layerInterface.text,thisLayer=elem.layerInterface,thisComp=elem.comp.compInterface,toWorld=thisLayer.toWorld.bind(thisLayer),fromWorld=thisLayer.fromWorld.bind(thisLayer),fromComp=thisLayer.fromComp.bind(thisLayer),toComp=thisLayer.toComp.bind(thisLayer),mask=thisLayer.mask?thisLayer.mask.bind(thisLayer):null,fromCompToSurface=fromComp),transform||(transform=elem.layerInterface("ADBE Transform Group"),$bm_transform=transform,transform&&(anchorPoint=transform.anchorPoint)),elemType===4&&!content&&(content=thisLayer("ADBE Root Vectors Group")),effect||(effect=thisLayer(4)),hasParent=!!(elem.hierarchy&&elem.hierarchy.length),hasParent&&!parent&&(parent=elem.hierarchy[0].layerInterface),time=this.comp.renderedFrame/this.comp.globalData.frameRate,_needsRandom&&seedRandom(randSeed+time),needsVelocity&&(velocity=velocityAtTime(time)),expression_function(),this.frameExpressionId=elem.globalData.frameId,scoped_bm_rt=scoped_bm_rt.propType===propTypes.SHAPE?scoped_bm_rt.v:scoped_bm_rt,scoped_bm_rt)}return executeExpression.__preventDeadCodeRemoval=[$bm_transform,anchorPoint,time,velocity,inPoint,outPoint,width,height,name,loop_in,loop_out,smooth,toComp,fromCompToSurface,toWorld,fromWorld,mask,position,rotation,scale,thisComp,numKeys,active,wiggle,loopInDuration,loopOutDuration,comp,lookAt,easeOut,easeIn,ease,nearestKey,key,text,textIndex,textTotal,selectorValue,framesToTime,timeToFrames,sourceRectAtTime,substring,substr,posterizeTime,index,globalData],executeExpression}return ob.initiateExpression=initiateExpression,ob.__preventDeadCodeRemoval=[window,document,XMLHttpRequest,fetch,frames,$bm_neg,add,$bm_sum,$bm_sub,$bm_mul,$bm_div,$bm_mod,clamp,radians_to_degrees,degreesToRadians,degrees_to_radians,normalize,rgbToHsl,hslToRgb,linear,random,createPath,_lottieGlobal],ob.resetFrame=resetFrame,ob}(),Expressions=function(){var o={};o.initExpressions=u,o.resetFrame=ExpressionManager.resetFrame;function u(T){var S=0,E=[];function C(){S+=1}function _(){S-=1,S===0&&R()}function P(I){E.indexOf(I)===-1&&E.push(I)}function R(){var I,L=E.length;for(I=0;I<L;I+=1)E[I].release();E.length=0}T.renderer.compInterface=CompExpressionInterface(T.renderer),T.renderer.globalData.projectInterface.registerComposition(T.renderer),T.renderer.globalData.pushExpression=C,T.renderer.globalData.popExpression=_,T.renderer.globalData.registerExpressionProperty=P}return o}(),MaskManagerInterface=function(){function o(T,S){this._mask=T,this._data=S}Object.defineProperty(o.prototype,"maskPath",{get:function(){return this._mask.prop.k&&this._mask.prop.getValue(),this._mask.prop}}),Object.defineProperty(o.prototype,"maskOpacity",{get:function(){return this._mask.op.k&&this._mask.op.getValue(),this._mask.op.v*100}});var u=function(S){var E=createSizedArray(S.viewData.length),C,_=S.viewData.length;for(C=0;C<_;C+=1)E[C]=new o(S.viewData[C],S.masksProperties[C]);var P=function(I){for(C=0;C<_;){if(S.masksProperties[C].nm===I)return E[C];C+=1}return null};return P};return u}(),ExpressionPropertyInterface=function(){var o={pv:0,v:0,mult:1},u={pv:[0,0,0],v:[0,0,0],mult:1};function T(_,P,R){Object.defineProperty(_,"velocity",{get:function(){return P.getVelocityAtTime(P.comp.currentFrame)}}),_.numKeys=P.keyframes?P.keyframes.length:0,_.key=function(I){if(!_.numKeys)return 0;var L="";"s"in P.keyframes[I-1]?L=P.keyframes[I-1].s:"e"in P.keyframes[I-2]?L=P.keyframes[I-2].e:L=P.keyframes[I-2].s;var j=R==="unidimensional"?new Number(L):Object.assign({},L);return j.time=P.keyframes[I-1].t/P.elem.comp.globalData.frameRate,j.value=R==="unidimensional"?L[0]:L,j},_.valueAtTime=P.getValueAtTime,_.speedAtTime=P.getSpeedAtTime,_.velocityAtTime=P.getVelocityAtTime,_.propertyGroup=P.propertyGroup}function S(_){(!_||!("pv"in _))&&(_=o);var P=1/_.mult,R=_.pv*P,I=new Number(R);return I.value=R,T(I,_,"unidimensional"),function(){return _.k&&_.getValue(),R=_.v*P,I.value!==R&&(I=new Number(R),I.value=R,I[0]=R,T(I,_,"unidimensional")),I}}function E(_){(!_||!("pv"in _))&&(_=u);var P=1/_.mult,R=_.data&&_.data.l||_.pv.length,I=createTypedArray("float32",R),L=createTypedArray("float32",R);return I.value=L,T(I,_,"multidimensional"),function(){_.k&&_.getValue();for(var j=0;j<R;j+=1)L[j]=_.v[j]*P,I[j]=L[j];return I}}function C(){return o}return function(_){return _?_.propType==="unidimensional"?S(_):E(_):C}}(),TransformExpressionInterface=function(){return function(o){function u(_){switch(_){case"scale":case"Scale":case"ADBE Scale":case 6:return u.scale;case"rotation":case"Rotation":case"ADBE Rotation":case"ADBE Rotate Z":case 10:return u.rotation;case"ADBE Rotate X":return u.xRotation;case"ADBE Rotate Y":return u.yRotation;case"position":case"Position":case"ADBE Position":case 2:return u.position;case"ADBE Position_0":return u.xPosition;case"ADBE Position_1":return u.yPosition;case"ADBE Position_2":return u.zPosition;case"anchorPoint":case"AnchorPoint":case"Anchor Point":case"ADBE AnchorPoint":case 1:return u.anchorPoint;case"opacity":case"Opacity":case 11:return u.opacity;default:return null}}Object.defineProperty(u,"rotation",{get:ExpressionPropertyInterface(o.r||o.rz)}),Object.defineProperty(u,"zRotation",{get:ExpressionPropertyInterface(o.rz||o.r)}),Object.defineProperty(u,"xRotation",{get:ExpressionPropertyInterface(o.rx)}),Object.defineProperty(u,"yRotation",{get:ExpressionPropertyInterface(o.ry)}),Object.defineProperty(u,"scale",{get:ExpressionPropertyInterface(o.s)});var T,S,E,C;return o.p?C=ExpressionPropertyInterface(o.p):(T=ExpressionPropertyInterface(o.px),S=ExpressionPropertyInterface(o.py),o.pz&&(E=ExpressionPropertyInterface(o.pz))),Object.defineProperty(u,"position",{get:function(){return o.p?C():[T(),S(),E?E():0]}}),Object.defineProperty(u,"xPosition",{get:ExpressionPropertyInterface(o.px)}),Object.defineProperty(u,"yPosition",{get:ExpressionPropertyInterface(o.py)}),Object.defineProperty(u,"zPosition",{get:ExpressionPropertyInterface(o.pz)}),Object.defineProperty(u,"anchorPoint",{get:ExpressionPropertyInterface(o.a)}),Object.defineProperty(u,"opacity",{get:ExpressionPropertyInterface(o.o)}),Object.defineProperty(u,"skew",{get:ExpressionPropertyInterface(o.sk)}),Object.defineProperty(u,"skewAxis",{get:ExpressionPropertyInterface(o.sa)}),Object.defineProperty(u,"orientation",{get:ExpressionPropertyInterface(o.or)}),u}}(),LayerExpressionInterface=function(){function o(I){var L=new Matrix;if(I!==void 0){var j=this._elem.finalTransform.mProp.getValueAtTime(I);j.clone(L)}else{var M=this._elem.finalTransform.mProp;M.applyToMatrix(L)}return L}function u(I,L){var j=this.getMatrix(L);return j.props[12]=0,j.props[13]=0,j.props[14]=0,this.applyPoint(j,I)}function T(I,L){var j=this.getMatrix(L);return this.applyPoint(j,I)}function S(I,L){var j=this.getMatrix(L);return j.props[12]=0,j.props[13]=0,j.props[14]=0,this.invertPoint(j,I)}function E(I,L){var j=this.getMatrix(L);return this.invertPoint(j,I)}function C(I,L){if(this._elem.hierarchy&&this._elem.hierarchy.length){var j,M=this._elem.hierarchy.length;for(j=0;j<M;j+=1)this._elem.hierarchy[j].finalTransform.mProp.applyToMatrix(I)}return I.applyToPointArray(L[0],L[1],L[2]||0)}function _(I,L){if(this._elem.hierarchy&&this._elem.hierarchy.length){var j,M=this._elem.hierarchy.length;for(j=0;j<M;j+=1)this._elem.hierarchy[j].finalTransform.mProp.applyToMatrix(I)}return I.inversePoint(L)}function P(I){var L=new Matrix;if(L.reset(),this._elem.finalTransform.mProp.applyToMatrix(L),this._elem.hierarchy&&this._elem.hierarchy.length){var j,M=this._elem.hierarchy.length;for(j=0;j<M;j+=1)this._elem.hierarchy[j].finalTransform.mProp.applyToMatrix(L);return L.inversePoint(I)}return L.inversePoint(I)}function R(){return[1,1,1,1]}return function(I){var L;function j(N){D.mask=new MaskManagerInterface(N,I)}function M(N){D.effect=N}function D(N){switch(N){case"ADBE Root Vectors Group":case"Contents":case 2:return D.shapeInterface;case 1:case 6:case"Transform":case"transform":case"ADBE Transform Group":return L;case 4:case"ADBE Effect Parade":case"effects":case"Effects":return D.effect;case"ADBE Text Properties":return D.textInterface;default:return null}}D.getMatrix=o,D.invertPoint=_,D.applyPoint=C,D.toWorld=T,D.toWorldVec=u,D.fromWorld=E,D.fromWorldVec=S,D.toComp=T,D.fromComp=P,D.sampleImage=R,D.sourceRectAtTime=I.sourceRectAtTime.bind(I),D._elem=I,L=TransformExpressionInterface(I.finalTransform.mProp);var F=getDescriptor(L,"anchorPoint");return Object.defineProperties(D,{hasParent:{get:function(){return I.hierarchy.length}},parent:{get:function(){return I.hierarchy[0].layerInterface}},rotation:getDescriptor(L,"rotation"),scale:getDescriptor(L,"scale"),position:getDescriptor(L,"position"),opacity:getDescriptor(L,"opacity"),anchorPoint:F,anchor_point:F,transform:{get:function(){return L}},active:{get:function(){return I.isInRange}}}),D.startTime=I.data.st,D.index=I.data.ind,D.source=I.data.refId,D.height=I.data.ty===0?I.data.h:100,D.width=I.data.ty===0?I.data.w:100,D.inPoint=I.data.ip/I.comp.globalData.frameRate,D.outPoint=I.data.op/I.comp.globalData.frameRate,D._name=I.data.nm,D.registerMaskInterface=j,D.registerEffectsInterface=M,D}}(),propertyGroupFactory=function(){return function(o,u){return function(T){return T=T===void 0?1:T,T<=0?o:u(T-1)}}}(),PropertyInterface=function(){return function(o,u){var T={_name:o};function S(E){return E=E===void 0?1:E,E<=0?T:u(E-1)}return S}}(),EffectsExpressionInterface=function(){var o={createEffectsInterface:u};function u(E,C){if(E.effectsManager){var _=[],P=E.data.ef,R,I=E.effectsManager.effectElements.length;for(R=0;R<I;R+=1)_.push(T(P[R],E.effectsManager.effectElements[R],C,E));var L=E.data.ef||[],j=function(D){for(R=0,I=L.length;R<I;){if(D===L[R].nm||D===L[R].mn||D===L[R].ix)return _[R];R+=1}return null};return Object.defineProperty(j,"numProperties",{get:function(){return L.length}}),j}return null}function T(E,C,_,P){function R(D){for(var F=E.ef,N=0,G=F.length;N<G;){if(D===F[N].nm||D===F[N].mn||D===F[N].ix)return F[N].ty===5?L[N]:L[N]();N+=1}throw new Error}var I=propertyGroupFactory(R,_),L=[],j,M=E.ef.length;for(j=0;j<M;j+=1)E.ef[j].ty===5?L.push(T(E.ef[j],C.effectElements[j],C.effectElements[j].propertyGroup,P)):L.push(S(C.effectElements[j],E.ef[j].ty,P,I));return E.mn==="ADBE Color Control"&&Object.defineProperty(R,"color",{get:function(){return L[0]()}}),Object.defineProperties(R,{numProperties:{get:function(){return E.np}},_name:{value:E.nm},propertyGroup:{value:I}}),R.enabled=E.en!==0,R.active=R.enabled,R}function S(E,C,_,P){var R=ExpressionPropertyInterface(E.p);function I(){return C===10?_.comp.compInterface(E.p.v):R()}return E.p.setGroupProperty&&E.p.setGroupProperty(PropertyInterface("",P)),I}return o}(),ShapePathInterface=function(){return function(u,T,S){var E=T.sh;function C(P){return P==="Shape"||P==="shape"||P==="Path"||P==="path"||P==="ADBE Vector Shape"||P===2?C.path:null}var _=propertyGroupFactory(C,S);return E.setGroupProperty(PropertyInterface("Path",_)),Object.defineProperties(C,{path:{get:function(){return E.k&&E.getValue(),E}},shape:{get:function(){return E.k&&E.getValue(),E}},_name:{value:u.nm},ix:{value:u.ix},propertyIndex:{value:u.ix},mn:{value:u.mn},propertyGroup:{value:S}}),C}}(),ShapeExpressionInterface=function(){function o(F,N,G){var B=[],H,O=F?F.length:0;for(H=0;H<O;H+=1)F[H].ty==="gr"?B.push(T(F[H],N[H],G)):F[H].ty==="fl"?B.push(S(F[H],N[H],G)):F[H].ty==="st"?B.push(_(F[H],N[H],G)):F[H].ty==="tm"?B.push(P(F[H],N[H],G)):F[H].ty==="tr"||(F[H].ty==="el"?B.push(I(F[H],N[H],G)):F[H].ty==="sr"?B.push(L(F[H],N[H],G)):F[H].ty==="sh"?B.push(ShapePathInterface(F[H],N[H],G)):F[H].ty==="rc"?B.push(j(F[H],N[H],G)):F[H].ty==="rd"?B.push(M(F[H],N[H],G)):F[H].ty==="rp"?B.push(D(F[H],N[H],G)):F[H].ty==="gf"?B.push(E(F[H],N[H],G)):B.push(C(F[H],N[H])));return B}function u(F,N,G){var B,H=function(U){for(var W=0,K=B.length;W<K;){if(B[W]._name===U||B[W].mn===U||B[W].propertyIndex===U||B[W].ix===U||B[W].ind===U)return B[W];W+=1}return typeof U=="number"?B[U-1]:null};H.propertyGroup=propertyGroupFactory(H,G),B=o(F.it,N.it,H.propertyGroup),H.numProperties=B.length;var O=R(F.it[F.it.length-1],N.it[N.it.length-1],H.propertyGroup);return H.transform=O,H.propertyIndex=F.cix,H._name=F.nm,H}function T(F,N,G){var B=function(U){switch(U){case"ADBE Vectors Group":case"Contents":case 2:return B.content;default:return B.transform}};B.propertyGroup=propertyGroupFactory(B,G);var H=u(F,N,B.propertyGroup),O=R(F.it[F.it.length-1],N.it[N.it.length-1],B.propertyGroup);return B.content=H,B.transform=O,Object.defineProperty(B,"_name",{get:function(){return F.nm}}),B.numProperties=F.np,B.propertyIndex=F.ix,B.nm=F.nm,B.mn=F.mn,B}function S(F,N,G){function B(H){return H==="Color"||H==="color"?B.color:H==="Opacity"||H==="opacity"?B.opacity:null}return Object.defineProperties(B,{color:{get:ExpressionPropertyInterface(N.c)},opacity:{get:ExpressionPropertyInterface(N.o)},_name:{value:F.nm},mn:{value:F.mn}}),N.c.setGroupProperty(PropertyInterface("Color",G)),N.o.setGroupProperty(PropertyInterface("Opacity",G)),B}function E(F,N,G){function B(H){return H==="Start Point"||H==="start point"?B.startPoint:H==="End Point"||H==="end point"?B.endPoint:H==="Opacity"||H==="opacity"?B.opacity:null}return Object.defineProperties(B,{startPoint:{get:ExpressionPropertyInterface(N.s)},endPoint:{get:ExpressionPropertyInterface(N.e)},opacity:{get:ExpressionPropertyInterface(N.o)},type:{get:function(){return"a"}},_name:{value:F.nm},mn:{value:F.mn}}),N.s.setGroupProperty(PropertyInterface("Start Point",G)),N.e.setGroupProperty(PropertyInterface("End Point",G)),N.o.setGroupProperty(PropertyInterface("Opacity",G)),B}function C(){function F(){return null}return F}function _(F,N,G){var B=propertyGroupFactory(K,G),H=propertyGroupFactory(W,B);function O(Y){Object.defineProperty(W,F.d[Y].nm,{get:ExpressionPropertyInterface(N.d.dataProps[Y].p)})}var V,U=F.d?F.d.length:0,W={};for(V=0;V<U;V+=1)O(V),N.d.dataProps[V].p.setGroupProperty(H);function K(Y){return Y==="Color"||Y==="color"?K.color:Y==="Opacity"||Y==="opacity"?K.opacity:Y==="Stroke Width"||Y==="stroke width"?K.strokeWidth:null}return Object.defineProperties(K,{color:{get:ExpressionPropertyInterface(N.c)},opacity:{get:ExpressionPropertyInterface(N.o)},strokeWidth:{get:ExpressionPropertyInterface(N.w)},dash:{get:function(){return W}},_name:{value:F.nm},mn:{value:F.mn}}),N.c.setGroupProperty(PropertyInterface("Color",B)),N.o.setGroupProperty(PropertyInterface("Opacity",B)),N.w.setGroupProperty(PropertyInterface("Stroke Width",B)),K}function P(F,N,G){function B(O){return O===F.e.ix||O==="End"||O==="end"?B.end:O===F.s.ix?B.start:O===F.o.ix?B.offset:null}var H=propertyGroupFactory(B,G);return B.propertyIndex=F.ix,N.s.setGroupProperty(PropertyInterface("Start",H)),N.e.setGroupProperty(PropertyInterface("End",H)),N.o.setGroupProperty(PropertyInterface("Offset",H)),B.propertyIndex=F.ix,B.propertyGroup=G,Object.defineProperties(B,{start:{get:ExpressionPropertyInterface(N.s)},end:{get:ExpressionPropertyInterface(N.e)},offset:{get:ExpressionPropertyInterface(N.o)},_name:{value:F.nm}}),B.mn=F.mn,B}function R(F,N,G){function B(O){return F.a.ix===O||O==="Anchor Point"?B.anchorPoint:F.o.ix===O||O==="Opacity"?B.opacity:F.p.ix===O||O==="Position"?B.position:F.r.ix===O||O==="Rotation"||O==="ADBE Vector Rotation"?B.rotation:F.s.ix===O||O==="Scale"?B.scale:F.sk&&F.sk.ix===O||O==="Skew"?B.skew:F.sa&&F.sa.ix===O||O==="Skew Axis"?B.skewAxis:null}var H=propertyGroupFactory(B,G);return N.transform.mProps.o.setGroupProperty(PropertyInterface("Opacity",H)),N.transform.mProps.p.setGroupProperty(PropertyInterface("Position",H)),N.transform.mProps.a.setGroupProperty(PropertyInterface("Anchor Point",H)),N.transform.mProps.s.setGroupProperty(PropertyInterface("Scale",H)),N.transform.mProps.r.setGroupProperty(PropertyInterface("Rotation",H)),N.transform.mProps.sk&&(N.transform.mProps.sk.setGroupProperty(PropertyInterface("Skew",H)),N.transform.mProps.sa.setGroupProperty(PropertyInterface("Skew Angle",H))),N.transform.op.setGroupProperty(PropertyInterface("Opacity",H)),Object.defineProperties(B,{opacity:{get:ExpressionPropertyInterface(N.transform.mProps.o)},position:{get:ExpressionPropertyInterface(N.transform.mProps.p)},anchorPoint:{get:ExpressionPropertyInterface(N.transform.mProps.a)},scale:{get:ExpressionPropertyInterface(N.transform.mProps.s)},rotation:{get:ExpressionPropertyInterface(N.transform.mProps.r)},skew:{get:ExpressionPropertyInterface(N.transform.mProps.sk)},skewAxis:{get:ExpressionPropertyInterface(N.transform.mProps.sa)},_name:{value:F.nm}}),B.ty="tr",B.mn=F.mn,B.propertyGroup=G,B}function I(F,N,G){function B(V){return F.p.ix===V?B.position:F.s.ix===V?B.size:null}var H=propertyGroupFactory(B,G);B.propertyIndex=F.ix;var O=N.sh.ty==="tm"?N.sh.prop:N.sh;return O.s.setGroupProperty(PropertyInterface("Size",H)),O.p.setGroupProperty(PropertyInterface("Position",H)),Object.defineProperties(B,{size:{get:ExpressionPropertyInterface(O.s)},position:{get:ExpressionPropertyInterface(O.p)},_name:{value:F.nm}}),B.mn=F.mn,B}function L(F,N,G){function B(V){return F.p.ix===V?B.position:F.r.ix===V?B.rotation:F.pt.ix===V?B.points:F.or.ix===V||V==="ADBE Vector Star Outer Radius"?B.outerRadius:F.os.ix===V?B.outerRoundness:F.ir&&(F.ir.ix===V||V==="ADBE Vector Star Inner Radius")?B.innerRadius:F.is&&F.is.ix===V?B.innerRoundness:null}var H=propertyGroupFactory(B,G),O=N.sh.ty==="tm"?N.sh.prop:N.sh;return B.propertyIndex=F.ix,O.or.setGroupProperty(PropertyInterface("Outer Radius",H)),O.os.setGroupProperty(PropertyInterface("Outer Roundness",H)),O.pt.setGroupProperty(PropertyInterface("Points",H)),O.p.setGroupProperty(PropertyInterface("Position",H)),O.r.setGroupProperty(PropertyInterface("Rotation",H)),F.ir&&(O.ir.setGroupProperty(PropertyInterface("Inner Radius",H)),O.is.setGroupProperty(PropertyInterface("Inner Roundness",H))),Object.defineProperties(B,{position:{get:ExpressionPropertyInterface(O.p)},rotation:{get:ExpressionPropertyInterface(O.r)},points:{get:ExpressionPropertyInterface(O.pt)},outerRadius:{get:ExpressionPropertyInterface(O.or)},outerRoundness:{get:ExpressionPropertyInterface(O.os)},innerRadius:{get:ExpressionPropertyInterface(O.ir)},innerRoundness:{get:ExpressionPropertyInterface(O.is)},_name:{value:F.nm}}),B.mn=F.mn,B}function j(F,N,G){function B(V){return F.p.ix===V?B.position:F.r.ix===V?B.roundness:F.s.ix===V||V==="Size"||V==="ADBE Vector Rect Size"?B.size:null}var H=propertyGroupFactory(B,G),O=N.sh.ty==="tm"?N.sh.prop:N.sh;return B.propertyIndex=F.ix,O.p.setGroupProperty(PropertyInterface("Position",H)),O.s.setGroupProperty(PropertyInterface("Size",H)),O.r.setGroupProperty(PropertyInterface("Rotation",H)),Object.defineProperties(B,{position:{get:ExpressionPropertyInterface(O.p)},roundness:{get:ExpressionPropertyInterface(O.r)},size:{get:ExpressionPropertyInterface(O.s)},_name:{value:F.nm}}),B.mn=F.mn,B}function M(F,N,G){function B(V){return F.r.ix===V||V==="Round Corners 1"?B.radius:null}var H=propertyGroupFactory(B,G),O=N;return B.propertyIndex=F.ix,O.rd.setGroupProperty(PropertyInterface("Radius",H)),Object.defineProperties(B,{radius:{get:ExpressionPropertyInterface(O.rd)},_name:{value:F.nm}}),B.mn=F.mn,B}function D(F,N,G){function B(V){return F.c.ix===V||V==="Copies"?B.copies:F.o.ix===V||V==="Offset"?B.offset:null}var H=propertyGroupFactory(B,G),O=N;return B.propertyIndex=F.ix,O.c.setGroupProperty(PropertyInterface("Copies",H)),O.o.setGroupProperty(PropertyInterface("Offset",H)),Object.defineProperties(B,{copies:{get:ExpressionPropertyInterface(O.c)},offset:{get:ExpressionPropertyInterface(O.o)},_name:{value:F.nm}}),B.mn=F.mn,B}return function(F,N,G){var B;function H(V){if(typeof V=="number")return V=V===void 0?1:V,V===0?G:B[V-1];for(var U=0,W=B.length;U<W;){if(B[U]._name===V)return B[U];U+=1}return null}function O(){return G}return H.propertyGroup=propertyGroupFactory(H,O),B=o(F,N,H.propertyGroup),H.numProperties=B.length,H._name="Contents",H}}(),TextExpressionInterface=function(){return function(o){var u;function T(S){switch(S){case"ADBE Text Document":return T.sourceText;default:return null}}return Object.defineProperty(T,"sourceText",{get:function(){o.textProperty.getValue();var E=o.textProperty.currentData.t;return(!u||E!==u.value)&&(u=new String(E),u.value=E||new String(E),Object.defineProperty(u,"style",{get:function(){return{fillColor:o.textProperty.currentData.fc}}})),u}}),T}}();function _typeof(o){"@babel/helpers - typeof";return _typeof=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(u){return typeof u}:function(u){return u&&typeof Symbol=="function"&&u.constructor===Symbol&&u!==Symbol.prototype?"symbol":typeof u},_typeof(o)}var FootageInterface=function(){var o=function(S){var E="",C=S.getFootageData();function _(){return E="",C=S.getFootageData(),P}function P(R){if(C[R])return E=R,C=C[R],_typeof(C)==="object"?P:C;var I=R.indexOf(E);if(I!==-1){var L=parseInt(R.substr(I+E.length),10);return C=C[L],_typeof(C)==="object"?P:C}return""}return _},u=function(S){function E(C){return C==="Outline"?E.outlineInterface():null}return E._name="Outline",E.outlineInterface=o(S),E};return function(T){function S(E){return E==="Data"?S.dataInterface:null}return S._name="Data",S.dataInterface=u(T),S}}(),interfaces={layer:LayerExpressionInterface,effects:EffectsExpressionInterface,comp:CompExpressionInterface,shape:ShapeExpressionInterface,text:TextExpressionInterface,footage:FootageInterface};function getInterface(o){return interfaces[o]||null}var expressionHelpers=function(){function o(_,P,R){P.x&&(R.k=!0,R.x=!0,R.initiateExpression=ExpressionManager.initiateExpression,R.effectsSequence.push(R.initiateExpression(_,P,R).bind(R)))}function u(_){return _*=this.elem.globalData.frameRate,_-=this.offsetTime,_!==this._cachingAtTime.lastFrame&&(this._cachingAtTime.lastIndex=this._cachingAtTime.lastFrame<_?this._cachingAtTime.lastIndex:0,this._cachingAtTime.value=this.interpolateValue(_,this._cachingAtTime),this._cachingAtTime.lastFrame=_),this._cachingAtTime.value}function T(_){var P=-.01,R=this.getValueAtTime(_),I=this.getValueAtTime(_+P),L=0;if(R.length){var j;for(j=0;j<R.length;j+=1)L+=Math.pow(I[j]-R[j],2);L=Math.sqrt(L)*100}else L=0;return L}function S(_){if(this.vel!==void 0)return this.vel;var P=-.001,R=this.getValueAtTime(_),I=this.getValueAtTime(_+P),L;if(R.length){L=createTypedArray("float32",R.length);var j;for(j=0;j<R.length;j+=1)L[j]=(I[j]-R[j])/P}else L=(I-R)/P;return L}function E(){return this.pv}function C(_){this.propertyGroup=_}return{searchExpressions:o,getSpeedAtTime:T,getVelocityAtTime:S,getValueAtTime:u,getStaticValueAtTime:E,setGroupProperty:C}}();function addPropertyDecorator(){function o(M,D,F){if(!this.k||!this.keyframes)return this.pv;M=M?M.toLowerCase():"";var N=this.comp.renderedFrame,G=this.keyframes,B=G[G.length-1].t;if(N<=B)return this.pv;var H,O;F?(D?H=Math.abs(B-this.elem.comp.globalData.frameRate*D):H=Math.max(0,B-this.elem.data.ip),O=B-H):((!D||D>G.length-1)&&(D=G.length-1),O=G[G.length-1-D].t,H=B-O);var V,U,W;if(M==="pingpong"){var K=Math.floor((N-O)/H);if(K%2!==0)return this.getValueAtTime((H-(N-O)%H+O)/this.comp.globalData.frameRate,0)}else if(M==="offset"){var Y=this.getValueAtTime(O/this.comp.globalData.frameRate,0),ee=this.getValueAtTime(B/this.comp.globalData.frameRate,0),oe=this.getValueAtTime(((N-O)%H+O)/this.comp.globalData.frameRate,0),se=Math.floor((N-O)/H);if(this.pv.length){for(W=new Array(Y.length),U=W.length,V=0;V<U;V+=1)W[V]=(ee[V]-Y[V])*se+oe[V];return W}return(ee-Y)*se+oe}else if(M==="continue"){var Q=this.getValueAtTime(B/this.comp.globalData.frameRate,0),ie=this.getValueAtTime((B-.001)/this.comp.globalData.frameRate,0);if(this.pv.length){for(W=new Array(Q.length),U=W.length,V=0;V<U;V+=1)W[V]=Q[V]+(Q[V]-ie[V])*((N-B)/this.comp.globalData.frameRate)/5e-4;return W}return Q+(Q-ie)*((N-B)/.001)}return this.getValueAtTime(((N-O)%H+O)/this.comp.globalData.frameRate,0)}function u(M,D,F){if(!this.k)return this.pv;M=M?M.toLowerCase():"";var N=this.comp.renderedFrame,G=this.keyframes,B=G[0].t;if(N>=B)return this.pv;var H,O;F?(D?H=Math.abs(this.elem.comp.globalData.frameRate*D):H=Math.max(0,this.elem.data.op-B),O=B+H):((!D||D>G.length-1)&&(D=G.length-1),O=G[D].t,H=O-B);var V,U,W;if(M==="pingpong"){var K=Math.floor((B-N)/H);if(K%2===0)return this.getValueAtTime(((B-N)%H+B)/this.comp.globalData.frameRate,0)}else if(M==="offset"){var Y=this.getValueAtTime(B/this.comp.globalData.frameRate,0),ee=this.getValueAtTime(O/this.comp.globalData.frameRate,0),oe=this.getValueAtTime((H-(B-N)%H+B)/this.comp.globalData.frameRate,0),se=Math.floor((B-N)/H)+1;if(this.pv.length){for(W=new Array(Y.length),U=W.length,V=0;V<U;V+=1)W[V]=oe[V]-(ee[V]-Y[V])*se;return W}return oe-(ee-Y)*se}else if(M==="continue"){var Q=this.getValueAtTime(B/this.comp.globalData.frameRate,0),ie=this.getValueAtTime((B+.001)/this.comp.globalData.frameRate,0);if(this.pv.length){for(W=new Array(Q.length),U=W.length,V=0;V<U;V+=1)W[V]=Q[V]+(Q[V]-ie[V])*(B-N)/.001;return W}return Q+(Q-ie)*(B-N)/.001}return this.getValueAtTime((H-((B-N)%H+B))/this.comp.globalData.frameRate,0)}function T(M,D){if(!this.k)return this.pv;if(M=(M||.4)*.5,D=Math.floor(D||5),D<=1)return this.pv;var F=this.comp.renderedFrame/this.comp.globalData.frameRate,N=F-M,G=F+M,B=D>1?(G-N)/(D-1):1,H=0,O=0,V;this.pv.length?V=createTypedArray("float32",this.pv.length):V=0;for(var U;H<D;){if(U=this.getValueAtTime(N+H*B),this.pv.length)for(O=0;O<this.pv.length;O+=1)V[O]+=U[O];else V+=U;H+=1}if(this.pv.length)for(O=0;O<this.pv.length;O+=1)V[O]/=D;else V/=D;return V}function S(M){this._transformCachingAtTime||(this._transformCachingAtTime={v:new Matrix});var D=this._transformCachingAtTime.v;if(D.cloneFromProps(this.pre.props),this.appliedTransformations<1){var F=this.a.getValueAtTime(M);D.translate(-F[0]*this.a.mult,-F[1]*this.a.mult,F[2]*this.a.mult)}if(this.appliedTransformations<2){var N=this.s.getValueAtTime(M);D.scale(N[0]*this.s.mult,N[1]*this.s.mult,N[2]*this.s.mult)}if(this.sk&&this.appliedTransformations<3){var G=this.sk.getValueAtTime(M),B=this.sa.getValueAtTime(M);D.skewFromAxis(-G*this.sk.mult,B*this.sa.mult)}if(this.r&&this.appliedTransformations<4){var H=this.r.getValueAtTime(M);D.rotate(-H*this.r.mult)}else if(!this.r&&this.appliedTransformations<4){var O=this.rz.getValueAtTime(M),V=this.ry.getValueAtTime(M),U=this.rx.getValueAtTime(M),W=this.or.getValueAtTime(M);D.rotateZ(-O*this.rz.mult).rotateY(V*this.ry.mult).rotateX(U*this.rx.mult).rotateZ(-W[2]*this.or.mult).rotateY(W[1]*this.or.mult).rotateX(W[0]*this.or.mult)}if(this.data.p&&this.data.p.s){var K=this.px.getValueAtTime(M),Y=this.py.getValueAtTime(M);if(this.data.p.z){var ee=this.pz.getValueAtTime(M);D.translate(K*this.px.mult,Y*this.py.mult,-ee*this.pz.mult)}else D.translate(K*this.px.mult,Y*this.py.mult,0)}else{var oe=this.p.getValueAtTime(M);D.translate(oe[0]*this.p.mult,oe[1]*this.p.mult,-oe[2]*this.p.mult)}return D}function E(){return this.v.clone(new Matrix)}var C=TransformPropertyFactory.getTransformProperty;TransformPropertyFactory.getTransformProperty=function(M,D,F){var N=C(M,D,F);return N.dynamicProperties.length?N.getValueAtTime=S.bind(N):N.getValueAtTime=E.bind(N),N.setGroupProperty=expressionHelpers.setGroupProperty,N};var _=PropertyFactory.getProp;PropertyFactory.getProp=function(M,D,F,N,G){var B=_(M,D,F,N,G);B.kf?B.getValueAtTime=expressionHelpers.getValueAtTime.bind(B):B.getValueAtTime=expressionHelpers.getStaticValueAtTime.bind(B),B.setGroupProperty=expressionHelpers.setGroupProperty,B.loopOut=o,B.loopIn=u,B.smooth=T,B.getVelocityAtTime=expressionHelpers.getVelocityAtTime.bind(B),B.getSpeedAtTime=expressionHelpers.getSpeedAtTime.bind(B),B.numKeys=D.a===1?D.k.length:0,B.propertyIndex=D.ix;var H=0;return F!==0&&(H=createTypedArray("float32",D.a===1?D.k[0].s.length:D.k.length)),B._cachingAtTime={lastFrame:initialDefaultFrame,lastIndex:0,value:H},expressionHelpers.searchExpressions(M,D,B),B.k&&G.addDynamicProperty(B),B};function P(M){return this._cachingAtTime||(this._cachingAtTime={shapeValue:shapePool.clone(this.pv),lastIndex:0,lastTime:initialDefaultFrame}),M*=this.elem.globalData.frameRate,M-=this.offsetTime,M!==this._cachingAtTime.lastTime&&(this._cachingAtTime.lastIndex=this._cachingAtTime.lastTime<M?this._caching.lastIndex:0,this._cachingAtTime.lastTime=M,this.interpolateShape(M,this._cachingAtTime.shapeValue,this._cachingAtTime)),this._cachingAtTime.shapeValue}var R=ShapePropertyFactory.getConstructorFunction(),I=ShapePropertyFactory.getKeyframedConstructorFunction();function L(){}L.prototype={vertices:function(D,F){this.k&&this.getValue();var N=this.v;F!==void 0&&(N=this.getValueAtTime(F,0));var G,B=N._length,H=N[D],O=N.v,V=createSizedArray(B);for(G=0;G<B;G+=1)D==="i"||D==="o"?V[G]=[H[G][0]-O[G][0],H[G][1]-O[G][1]]:V[G]=[H[G][0],H[G][1]];return V},points:function(D){return this.vertices("v",D)},inTangents:function(D){return this.vertices("i",D)},outTangents:function(D){return this.vertices("o",D)},isClosed:function(){return this.v.c},pointOnPath:function(D,F){var N=this.v;F!==void 0&&(N=this.getValueAtTime(F,0)),this._segmentsLength||(this._segmentsLength=bez.getSegmentsLength(N));for(var G=this._segmentsLength,B=G.lengths,H=G.totalLength*D,O=0,V=B.length,U=0,W;O<V;){if(U+B[O].addedLength>H){var K=O,Y=N.c&&O===V-1?0:O+1,ee=(H-U)/B[O].addedLength;W=bez.getPointInSegment(N.v[K],N.v[Y],N.o[K],N.i[Y],ee,B[O]);break}else U+=B[O].addedLength;O+=1}return W||(W=N.c?[N.v[0][0],N.v[0][1]]:[N.v[N._length-1][0],N.v[N._length-1][1]]),W},vectorOnPath:function(D,F,N){D==1?D=this.v.c:D==0&&(D=.999);var G=this.pointOnPath(D,F),B=this.pointOnPath(D+.001,F),H=B[0]-G[0],O=B[1]-G[1],V=Math.sqrt(Math.pow(H,2)+Math.pow(O,2));if(V===0)return[0,0];var U=N==="tangent"?[H/V,O/V]:[-O/V,H/V];return U},tangentOnPath:function(D,F){return this.vectorOnPath(D,F,"tangent")},normalOnPath:function(D,F){return this.vectorOnPath(D,F,"normal")},setGroupProperty:expressionHelpers.setGroupProperty,getValueAtTime:expressionHelpers.getStaticValueAtTime},extendPrototype([L],R),extendPrototype([L],I),I.prototype.getValueAtTime=P,I.prototype.initiateExpression=ExpressionManager.initiateExpression;var j=ShapePropertyFactory.getShapeProp;ShapePropertyFactory.getShapeProp=function(M,D,F,N,G){var B=j(M,D,F,N,G);return B.propertyIndex=D.ix,B.lock=!1,F===3?expressionHelpers.searchExpressions(M,D.pt,B):F===4&&expressionHelpers.searchExpressions(M,D.ks,B),B.k&&M.addDynamicProperty(B),B}}function initialize$1(){addPropertyDecorator()}function addDecorator(){function o(){return this.data.d.x?(this.calculateExpression=ExpressionManager.initiateExpression.bind(this)(this.elem,this.data.d,this),this.addEffect(this.getExpressionValue.bind(this)),!0):null}TextProperty.prototype.getExpressionValue=function(u,T){var S=this.calculateExpression(T);if(u.t!==S){var E={};return this.copyData(E,u),E.t=S.toString(),E.__complete=!1,E}return u},TextProperty.prototype.searchProperty=function(){var u=this.searchKeyframes(),T=this.searchExpressions();return this.kf=u||T,this.kf},TextProperty.prototype.searchExpressions=o}function initialize(){addDecorator()}function SVGComposableEffect(){}SVGComposableEffect.prototype={createMergeNode:function o(u,T){var S=createNS("feMerge");S.setAttribute("result",u);var E,C;for(C=0;C<T.length;C+=1)E=createNS("feMergeNode"),E.setAttribute("in",T[C]),S.appendChild(E),S.appendChild(E);return S}};var linearFilterValue="0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0";function SVGTintFilter(o,u,T,S,E){this.filterManager=u;var C=createNS("feColorMatrix");C.setAttribute("type","matrix"),C.setAttribute("color-interpolation-filters","linearRGB"),C.setAttribute("values",linearFilterValue+" 1 0"),this.linearFilter=C,C.setAttribute("result",S+"_tint_1"),o.appendChild(C),C=createNS("feColorMatrix"),C.setAttribute("type","matrix"),C.setAttribute("color-interpolation-filters","sRGB"),C.setAttribute("values","1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0"),C.setAttribute("result",S+"_tint_2"),o.appendChild(C),this.matrixFilter=C;var _=this.createMergeNode(S,[E,S+"_tint_1",S+"_tint_2"]);o.appendChild(_)}extendPrototype([SVGComposableEffect],SVGTintFilter),SVGTintFilter.prototype.renderFrame=function(o){if(o||this.filterManager._mdf){var u=this.filterManager.effectElements[0].p.v,T=this.filterManager.effectElements[1].p.v,S=this.filterManager.effectElements[2].p.v/100;this.linearFilter.setAttribute("values",linearFilterValue+" "+S+" 0"),this.matrixFilter.setAttribute("values",T[0]-u[0]+" 0 0 0 "+u[0]+" "+(T[1]-u[1])+" 0 0 0 "+u[1]+" "+(T[2]-u[2])+" 0 0 0 "+u[2]+" 0 0 0 1 0")}};function SVGFillFilter(o,u,T,S){this.filterManager=u;var E=createNS("feColorMatrix");E.setAttribute("type","matrix"),E.setAttribute("color-interpolation-filters","sRGB"),E.setAttribute("values","1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0"),E.setAttribute("result",S),o.appendChild(E),this.matrixFilter=E}SVGFillFilter.prototype.renderFrame=function(o){if(o||this.filterManager._mdf){var u=this.filterManager.effectElements[2].p.v,T=this.filterManager.effectElements[6].p.v;this.matrixFilter.setAttribute("values","0 0 0 0 "+u[0]+" 0 0 0 0 "+u[1]+" 0 0 0 0 "+u[2]+" 0 0 0 "+T+" 0")}};function SVGStrokeEffect(o,u,T){this.initialized=!1,this.filterManager=u,this.elem=T,this.paths=[]}SVGStrokeEffect.prototype.initialize=function(){var o=this.elem.layerElement.children||this.elem.layerElement.childNodes,u,T,S,E;for(this.filterManager.effectElements[1].p.v===1?(E=this.elem.maskManager.masksProperties.length,S=0):(S=this.filterManager.effectElements[0].p.v-1,E=S+1),T=createNS("g"),T.setAttribute("fill","none"),T.setAttribute("stroke-linecap","round"),T.setAttribute("stroke-dashoffset",1),S;S<E;S+=1)u=createNS("path"),T.appendChild(u),this.paths.push({p:u,m:S});if(this.filterManager.effectElements[10].p.v===3){var C=createNS("mask"),_=createElementID();C.setAttribute("id",_),C.setAttribute("mask-type","alpha"),C.appendChild(T),this.elem.globalData.defs.appendChild(C);var P=createNS("g");for(P.setAttribute("mask","url("+getLocationHref()+"#"+_+")");o[0];)P.appendChild(o[0]);this.elem.layerElement.appendChild(P),this.masker=C,T.setAttribute("stroke","#fff")}else if(this.filterManager.effectElements[10].p.v===1||this.filterManager.effectElements[10].p.v===2){if(this.filterManager.effectElements[10].p.v===2)for(o=this.elem.layerElement.children||this.elem.layerElement.childNodes;o.length;)this.elem.layerElement.removeChild(o[0]);this.elem.layerElement.appendChild(T),this.elem.layerElement.removeAttribute("mask"),T.setAttribute("stroke","#fff")}this.initialized=!0,this.pathMasker=T},SVGStrokeEffect.prototype.renderFrame=function(o){this.initialized||this.initialize();var u,T=this.paths.length,S,E;for(u=0;u<T;u+=1)if(this.paths[u].m!==-1&&(S=this.elem.maskManager.viewData[this.paths[u].m],E=this.paths[u].p,(o||this.filterManager._mdf||S.prop._mdf)&&E.setAttribute("d",S.lastPath),o||this.filterManager.effectElements[9].p._mdf||this.filterManager.effectElements[4].p._mdf||this.filterManager.effectElements[7].p._mdf||this.filterManager.effectElements[8].p._mdf||S.prop._mdf)){var C;if(this.filterManager.effectElements[7].p.v!==0||this.filterManager.effectElements[8].p.v!==100){var _=Math.min(this.filterManager.effectElements[7].p.v,this.filterManager.effectElements[8].p.v)*.01,P=Math.max(this.filterManager.effectElements[7].p.v,this.filterManager.effectElements[8].p.v)*.01,R=E.getTotalLength();C="0 0 0 "+R*_+" ";var I=R*(P-_),L=1+this.filterManager.effectElements[4].p.v*2*this.filterManager.effectElements[9].p.v*.01,j=Math.floor(I/L),M;for(M=0;M<j;M+=1)C+="1 "+this.filterManager.effectElements[4].p.v*2*this.filterManager.effectElements[9].p.v*.01+" ";C+="0 "+R*10+" 0 0"}else C="1 "+this.filterManager.effectElements[4].p.v*2*this.filterManager.effectElements[9].p.v*.01;E.setAttribute("stroke-dasharray",C)}if((o||this.filterManager.effectElements[4].p._mdf)&&this.pathMasker.setAttribute("stroke-width",this.filterManager.effectElements[4].p.v*2),(o||this.filterManager.effectElements[6].p._mdf)&&this.pathMasker.setAttribute("opacity",this.filterManager.effectElements[6].p.v),(this.filterManager.effectElements[10].p.v===1||this.filterManager.effectElements[10].p.v===2)&&(o||this.filterManager.effectElements[3].p._mdf)){var D=this.filterManager.effectElements[3].p.v;this.pathMasker.setAttribute("stroke","rgb("+bmFloor(D[0]*255)+","+bmFloor(D[1]*255)+","+bmFloor(D[2]*255)+")")}};function SVGTritoneFilter(o,u,T,S){this.filterManager=u;var E=createNS("feColorMatrix");E.setAttribute("type","matrix"),E.setAttribute("color-interpolation-filters","linearRGB"),E.setAttribute("values","0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0"),o.appendChild(E);var C=createNS("feComponentTransfer");C.setAttribute("color-interpolation-filters","sRGB"),C.setAttribute("result",S),this.matrixFilter=C;var _=createNS("feFuncR");_.setAttribute("type","table"),C.appendChild(_),this.feFuncR=_;var P=createNS("feFuncG");P.setAttribute("type","table"),C.appendChild(P),this.feFuncG=P;var R=createNS("feFuncB");R.setAttribute("type","table"),C.appendChild(R),this.feFuncB=R,o.appendChild(C)}SVGTritoneFilter.prototype.renderFrame=function(o){if(o||this.filterManager._mdf){var u=this.filterManager.effectElements[0].p.v,T=this.filterManager.effectElements[1].p.v,S=this.filterManager.effectElements[2].p.v,E=S[0]+" "+T[0]+" "+u[0],C=S[1]+" "+T[1]+" "+u[1],_=S[2]+" "+T[2]+" "+u[2];this.feFuncR.setAttribute("tableValues",E),this.feFuncG.setAttribute("tableValues",C),this.feFuncB.setAttribute("tableValues",_)}};function SVGProLevelsFilter(o,u,T,S){this.filterManager=u;var E=this.filterManager.effectElements,C=createNS("feComponentTransfer");(E[10].p.k||E[10].p.v!==0||E[11].p.k||E[11].p.v!==1||E[12].p.k||E[12].p.v!==1||E[13].p.k||E[13].p.v!==0||E[14].p.k||E[14].p.v!==1)&&(this.feFuncR=this.createFeFunc("feFuncR",C)),(E[17].p.k||E[17].p.v!==0||E[18].p.k||E[18].p.v!==1||E[19].p.k||E[19].p.v!==1||E[20].p.k||E[20].p.v!==0||E[21].p.k||E[21].p.v!==1)&&(this.feFuncG=this.createFeFunc("feFuncG",C)),(E[24].p.k||E[24].p.v!==0||E[25].p.k||E[25].p.v!==1||E[26].p.k||E[26].p.v!==1||E[27].p.k||E[27].p.v!==0||E[28].p.k||E[28].p.v!==1)&&(this.feFuncB=this.createFeFunc("feFuncB",C)),(E[31].p.k||E[31].p.v!==0||E[32].p.k||E[32].p.v!==1||E[33].p.k||E[33].p.v!==1||E[34].p.k||E[34].p.v!==0||E[35].p.k||E[35].p.v!==1)&&(this.feFuncA=this.createFeFunc("feFuncA",C)),(this.feFuncR||this.feFuncG||this.feFuncB||this.feFuncA)&&(C.setAttribute("color-interpolation-filters","sRGB"),o.appendChild(C)),(E[3].p.k||E[3].p.v!==0||E[4].p.k||E[4].p.v!==1||E[5].p.k||E[5].p.v!==1||E[6].p.k||E[6].p.v!==0||E[7].p.k||E[7].p.v!==1)&&(C=createNS("feComponentTransfer"),C.setAttribute("color-interpolation-filters","sRGB"),C.setAttribute("result",S),o.appendChild(C),this.feFuncRComposed=this.createFeFunc("feFuncR",C),this.feFuncGComposed=this.createFeFunc("feFuncG",C),this.feFuncBComposed=this.createFeFunc("feFuncB",C))}SVGProLevelsFilter.prototype.createFeFunc=function(o,u){var T=createNS(o);return T.setAttribute("type","table"),u.appendChild(T),T},SVGProLevelsFilter.prototype.getTableValue=function(o,u,T,S,E){for(var C=0,_=256,P,R=Math.min(o,u),I=Math.max(o,u),L=Array.call(null,{length:_}),j,M=0,D=E-S,F=u-o;C<=256;)P=C/256,P<=R?j=F<0?E:S:P>=I?j=F<0?S:E:j=S+D*Math.pow((P-o)/F,1/T),L[M]=j,M+=1,C+=256/(_-1);return L.join(" ")},SVGProLevelsFilter.prototype.renderFrame=function(o){if(o||this.filterManager._mdf){var u,T=this.filterManager.effectElements;this.feFuncRComposed&&(o||T[3].p._mdf||T[4].p._mdf||T[5].p._mdf||T[6].p._mdf||T[7].p._mdf)&&(u=this.getTableValue(T[3].p.v,T[4].p.v,T[5].p.v,T[6].p.v,T[7].p.v),this.feFuncRComposed.setAttribute("tableValues",u),this.feFuncGComposed.setAttribute("tableValues",u),this.feFuncBComposed.setAttribute("tableValues",u)),this.feFuncR&&(o||T[10].p._mdf||T[11].p._mdf||T[12].p._mdf||T[13].p._mdf||T[14].p._mdf)&&(u=this.getTableValue(T[10].p.v,T[11].p.v,T[12].p.v,T[13].p.v,T[14].p.v),this.feFuncR.setAttribute("tableValues",u)),this.feFuncG&&(o||T[17].p._mdf||T[18].p._mdf||T[19].p._mdf||T[20].p._mdf||T[21].p._mdf)&&(u=this.getTableValue(T[17].p.v,T[18].p.v,T[19].p.v,T[20].p.v,T[21].p.v),this.feFuncG.setAttribute("tableValues",u)),this.feFuncB&&(o||T[24].p._mdf||T[25].p._mdf||T[26].p._mdf||T[27].p._mdf||T[28].p._mdf)&&(u=this.getTableValue(T[24].p.v,T[25].p.v,T[26].p.v,T[27].p.v,T[28].p.v),this.feFuncB.setAttribute("tableValues",u)),this.feFuncA&&(o||T[31].p._mdf||T[32].p._mdf||T[33].p._mdf||T[34].p._mdf||T[35].p._mdf)&&(u=this.getTableValue(T[31].p.v,T[32].p.v,T[33].p.v,T[34].p.v,T[35].p.v),this.feFuncA.setAttribute("tableValues",u))}};function SVGDropShadowEffect(o,u,T,S,E){var C=u.container.globalData.renderConfig.filterSize,_=u.data.fs||C;o.setAttribute("x",_.x||C.x),o.setAttribute("y",_.y||C.y),o.setAttribute("width",_.width||C.width),o.setAttribute("height",_.height||C.height),this.filterManager=u;var P=createNS("feGaussianBlur");P.setAttribute("in","SourceAlpha"),P.setAttribute("result",S+"_drop_shadow_1"),P.setAttribute("stdDeviation","0"),this.feGaussianBlur=P,o.appendChild(P);var R=createNS("feOffset");R.setAttribute("dx","25"),R.setAttribute("dy","0"),R.setAttribute("in",S+"_drop_shadow_1"),R.setAttribute("result",S+"_drop_shadow_2"),this.feOffset=R,o.appendChild(R);var I=createNS("feFlood");I.setAttribute("flood-color","#00ff00"),I.setAttribute("flood-opacity","1"),I.setAttribute("result",S+"_drop_shadow_3"),this.feFlood=I,o.appendChild(I);var L=createNS("feComposite");L.setAttribute("in",S+"_drop_shadow_3"),L.setAttribute("in2",S+"_drop_shadow_2"),L.setAttribute("operator","in"),L.setAttribute("result",S+"_drop_shadow_4"),o.appendChild(L);var j=this.createMergeNode(S,[S+"_drop_shadow_4",E]);o.appendChild(j)}extendPrototype([SVGComposableEffect],SVGDropShadowEffect),SVGDropShadowEffect.prototype.renderFrame=function(o){if(o||this.filterManager._mdf){if((o||this.filterManager.effectElements[4].p._mdf)&&this.feGaussianBlur.setAttribute("stdDeviation",this.filterManager.effectElements[4].p.v/4),o||this.filterManager.effectElements[0].p._mdf){var u=this.filterManager.effectElements[0].p.v;this.feFlood.setAttribute("flood-color",rgbToHex(Math.round(u[0]*255),Math.round(u[1]*255),Math.round(u[2]*255)))}if((o||this.filterManager.effectElements[1].p._mdf)&&this.feFlood.setAttribute("flood-opacity",this.filterManager.effectElements[1].p.v/255),o||this.filterManager.effectElements[2].p._mdf||this.filterManager.effectElements[3].p._mdf){var T=this.filterManager.effectElements[3].p.v,S=(this.filterManager.effectElements[2].p.v-90)*degToRads,E=T*Math.cos(S),C=T*Math.sin(S);this.feOffset.setAttribute("dx",E),this.feOffset.setAttribute("dy",C)}}};var _svgMatteSymbols=[];function SVGMatte3Effect(o,u,T){this.initialized=!1,this.filterManager=u,this.filterElem=o,this.elem=T,T.matteElement=createNS("g"),T.matteElement.appendChild(T.layerElement),T.matteElement.appendChild(T.transformedElement),T.baseElement=T.matteElement}SVGMatte3Effect.prototype.findSymbol=function(o){for(var u=0,T=_svgMatteSymbols.length;u<T;){if(_svgMatteSymbols[u]===o)return _svgMatteSymbols[u];u+=1}return null},SVGMatte3Effect.prototype.replaceInParent=function(o,u){var T=o.layerElement.parentNode;if(T){for(var S=T.children,E=0,C=S.length;E<C&&S[E]!==o.layerElement;)E+=1;var _;E<=C-2&&(_=S[E+1]);var P=createNS("use");P.setAttribute("href","#"+u),_?T.insertBefore(P,_):T.appendChild(P)}},SVGMatte3Effect.prototype.setElementAsMask=function(o,u){if(!this.findSymbol(u)){var T=createElementID(),S=createNS("mask");S.setAttribute("id",u.layerId),S.setAttribute("mask-type","alpha"),_svgMatteSymbols.push(u);var E=o.globalData.defs;E.appendChild(S);var C=createNS("symbol");C.setAttribute("id",T),this.replaceInParent(u,T),C.appendChild(u.layerElement),E.appendChild(C);var _=createNS("use");_.setAttribute("href","#"+T),S.appendChild(_),u.data.hd=!1,u.show()}o.setMatte(u.layerId)},SVGMatte3Effect.prototype.initialize=function(){for(var o=this.filterManager.effectElements[0].p.v,u=this.elem.comp.elements,T=0,S=u.length;T<S;)u[T]&&u[T].data.ind===o&&this.setElementAsMask(this.elem,u[T]),T+=1;this.initialized=!0},SVGMatte3Effect.prototype.renderFrame=function(){this.initialized||this.initialize()};function SVGGaussianBlurEffect(o,u,T,S){o.setAttribute("x","-100%"),o.setAttribute("y","-100%"),o.setAttribute("width","300%"),o.setAttribute("height","300%"),this.filterManager=u;var E=createNS("feGaussianBlur");E.setAttribute("result",S),o.appendChild(E),this.feGaussianBlur=E}SVGGaussianBlurEffect.prototype.renderFrame=function(o){if(o||this.filterManager._mdf){var u=.3,T=this.filterManager.effectElements[0].p.v*u,S=this.filterManager.effectElements[1].p.v,E=S==3?0:T,C=S==2?0:T;this.feGaussianBlur.setAttribute("stdDeviation",E+" "+C);var _=this.filterManager.effectElements[2].p.v==1?"wrap":"duplicate";this.feGaussianBlur.setAttribute("edgeMode",_)}};function TransformEffect(){}TransformEffect.prototype.init=function(o){this.effectsManager=o,this.type=effectTypes.TRANSFORM_EFFECT,this.matrix=new Matrix,this.opacity=-1,this._mdf=!1,this._opMdf=!1},TransformEffect.prototype.renderFrame=function(o){if(this._opMdf=!1,this._mdf=!1,o||this.effectsManager._mdf){var u=this.effectsManager.effectElements,T=u[0].p.v,S=u[1].p.v,E=u[2].p.v===1,C=u[3].p.v,_=E?C:u[4].p.v,P=u[5].p.v,R=u[6].p.v,I=u[7].p.v;this.matrix.reset(),this.matrix.translate(-T[0],-T[1],T[2]),this.matrix.scale(_*.01,C*.01,1),this.matrix.rotate(-I*degToRads),this.matrix.skewFromAxis(-P*degToRads,(R+90)*degToRads),this.matrix.translate(S[0],S[1],0),this._mdf=!0,this.opacity!==u[8].p.v&&(this.opacity=u[8].p.v,this._opMdf=!0)}};function SVGTransformEffect(o,u){this.init(u)}extendPrototype([TransformEffect],SVGTransformEffect);function CVTransformEffect(o){this.init(o)}return extendPrototype([TransformEffect],CVTransformEffect),registerRenderer("canvas",CanvasRenderer),registerRenderer("html",HybridRenderer),registerRenderer("svg",SVGRenderer),ShapeModifiers.registerModifier("tm",TrimModifier),ShapeModifiers.registerModifier("pb",PuckerAndBloatModifier),ShapeModifiers.registerModifier("rp",RepeaterModifier),ShapeModifiers.registerModifier("rd",RoundCornersModifier),ShapeModifiers.registerModifier("zz",ZigZagModifier),ShapeModifiers.registerModifier("op",OffsetPathModifier),setExpressionsPlugin(Expressions),setExpressionInterfaces(getInterface),initialize$1(),initialize(),registerEffect$1(20,SVGTintFilter,!0),registerEffect$1(21,SVGFillFilter,!0),registerEffect$1(22,SVGStrokeEffect,!1),registerEffect$1(23,SVGTritoneFilter,!0),registerEffect$1(24,SVGProLevelsFilter,!0),registerEffect$1(25,SVGDropShadowEffect,!0),registerEffect$1(28,SVGMatte3Effect,!1),registerEffect$1(29,SVGGaussianBlurEffect,!0),registerEffect$1(35,SVGTransformEffect,!1),registerEffect(35,CVTransformEffect),lottie})}
322)(lottie$1,lottie$1.exports);var lottieExports=lottie$1.exports;const lottie=getDefaultExportFromCjs(lottieExports);function _arrayLikeToArray(o,u){(u==null||u>o.length)&&(u=o.length);for(var T=0,S=Array(u);T<u;T++)S[T]=o[T];return S}function _arrayWithHoles(o){if(Array.isArray(o))return o}function _defineProperty(o,u,T){return(u=_toPropertyKey(u))in o?Object.defineProperty(o,u,{value:T,enumerable:!0,configurable:!0,writable:!0}):o[u]=T,o}function _iterableToArrayLimit(o,u){var T=o==null?null:typeof Symbol<"u"&&o[Symbol.iterator]||o["@@iterator"];if(T!=null){var S,E,C,_,P=[],R=!0,I=!1;try{if(C=(T=T.call(o)).next,u!==0)for(;!(R=(S=C.call(T)).done)&&(P.push(S.value),P.length!==u);R=!0);}catch(L){I=!0,E=L}finally{try{if(!R&&T.return!=null&&(_=T.return(),Object(_)!==_))return}finally{if(I)throw E}}return P}}function _nonIterableRest(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
323In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function ownKeys(o,u){var T=Object.keys(o);if(Object.getOwnPropertySymbols){var S=Object.getOwnPropertySymbols(o);u&&(S=S.filter(function(E){return Object.getOwnPropertyDescriptor(o,E).enumerable})),T.push.apply(T,S)}return T}function _objectSpread2(o){for(var u=1;u<arguments.length;u++){var T=arguments[u]!=null?arguments[u]:{};u%2?ownKeys(Object(T),!0).forEach(function(S){_defineProperty(o,S,T[S])}):Object.getOwnPropertyDescriptors?Object.defineProperties(o,Object.getOwnPropertyDescriptors(T)):ownKeys(Object(T)).forEach(function(S){Object.defineProperty(o,S,Object.getOwnPropertyDescriptor(T,S))})}return o}function _objectWithoutProperties(o,u){if(o==null)return{};var T,S,E=_objectWithoutPropertiesLoose(o,u);if(Object.getOwnPropertySymbols){var C=Object.getOwnPropertySymbols(o);for(S=0;S<C.length;S++)T=C[S],u.includes(T)||{}.propertyIsEnumerable.call(o,T)&&(E[T]=o[T])}return E}function _objectWithoutPropertiesLoose(o,u){if(o==null)return{};var T={};for(var S in o)if({}.hasOwnProperty.call(o,S)){if(u.includes(S))continue;T[S]=o[S]}return T}function _slicedToArray(o,u){return _arrayWithHoles(o)||_iterableToArrayLimit(o,u)||_unsupportedIterableToArray(o,u)||_nonIterableRest()}function _toPrimitive(o,u){if(typeof o!="object"||!o)return o;var T=o[Symbol.toPrimitive];if(T!==void 0){var S=T.call(o,u);if(typeof S!="object")return S;throw new TypeError("@@toPrimitive must return a primitive value.")}return(u==="string"?String:Number)(o)}function _toPropertyKey(o){var u=_toPrimitive(o,"string");return typeof u=="symbol"?u:u+""}function _unsupportedIterableToArray(o,u){if(o){if(typeof o=="string")return _arrayLikeToArray(o,u);var T={}.toString.call(o).slice(8,-1);return T==="Object"&&o.constructor&&(T=o.constructor.name),T==="Map"||T==="Set"?Array.from(o):T==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(T)?_arrayLikeToArray(o,u):void 0}}var _excluded$1=["animationData","loop","autoplay","initialSegment","onComplete","onLoopComplete","onEnterFrame","onSegmentStart","onConfigReady","onDataReady","onDataFailed","onLoadedImages","onDOMLoaded","onDestroy","lottieRef","renderer","name","assetsPath","rendererSettings"],useLottie=function o(u,T){var S=u.animationData,E=u.loop,C=u.autoplay,_=u.initialSegment,P=u.onComplete,R=u.onLoopComplete,I=u.onEnterFrame,L=u.onSegmentStart,j=u.onConfigReady,M=u.onDataReady,D=u.onDataFailed,F=u.onLoadedImages,N=u.onDOMLoaded,G=u.onDestroy;u.lottieRef,u.renderer,u.name,u.assetsPath,u.rendererSettings;var B=_objectWithoutProperties(u,_excluded$1),H=reactExports.useState(!1),O=_slicedToArray(H,2),V=O[0],U=O[1],W=reactExports.useRef(),K=reactExports.useRef(null),Y=function(){var ne;(ne=W.current)===null||ne===void 0||ne.play()},ee=function(){var ne;(ne=W.current)===null||ne===void 0||ne.stop()},oe=function(){var ne;(ne=W.current)===null||ne===void 0||ne.pause()},se=function(ne){var ue;(ue=W.current)===null||ue===void 0||ue.setSpeed(ne)},Q=function(ne,ue){var ce;(ce=W.current)===null||ce===void 0||ce.goToAndPlay(ne,ue)},ie=function(ne,ue){var ce;(ce=W.current)===null||ce===void 0||ce.goToAndStop(ne,ue)},ae=function(ne){var ue;(ue=W.current)===null||ue===void 0||ue.setDirection(ne)},re=function(ne,ue){var ce;(ce=W.current)===null||ce===void 0||ce.playSegments(ne,ue)},J=function(ne){var ue;(ue=W.current)===null||ue===void 0||ue.setSubframe(ne)},te=function(ne){var ue;return(ue=W.current)===null||ue===void 0?void 0:ue.getDuration(ne)},Z=function(){var ne;(ne=W.current)===null||ne===void 0||ne.destroy(),W.current=void 0},X=function(){var ne=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},ue;if(K.current){(ue=W.current)===null||ue===void 0||ue.destroy();
vendor: 4,509 bytes, lines 323-324
323var ce=_objectSpread2(_objectSpread2(_objectSpread2({},u),ne),{},{container:K.current});return W.current=lottie.loadAnimation(ce),U(!!W.current),function(){var fe;(fe=W.current)===null||fe===void 0||fe.destroy(),W.current=void 0}}};reactExports.useEffect(function(){var he=X();return function(){return he==null?void 0:he()}},[S,E]),reactExports.useEffect(function(){W.current&&(W.current.autoplay=!!C)},[C]),reactExports.useEffect(function(){if(W.current){if(!_){W.current.resetSegments(!0);return}!Array.isArray(_)||!_.length||((W.current.currentRawFrame<_[0]||W.current.currentRawFrame>_[1])&&(W.current.currentRawFrame=_[0]),W.current.setSegment(_[0],_[1]))}},[_]),reactExports.useEffect(function(){var he=[{name:"complete",handler:P},{name:"loopComplete",handler:R},{name:"enterFrame",handler:I},{name:"segmentStart",handler:L},{name:"config_ready",handler:j},{name:"data_ready",handler:M},{name:"data_failed",handler:D},{name:"loaded_images",handler:F},{name:"DOMLoaded",handler:N},{name:"destroy",handler:G}],ne=he.filter(function(ce){return ce.handler!=null});if(ne.length){var ue=ne.map(function(ce){var fe;return(fe=W.current)===null||fe===void 0||fe.addEventListener(ce.name,ce.handler),function(){var ve;(ve=W.current)===null||ve===void 0||ve.removeEventListener(ce.name,ce.handler)}});return function(){ue.forEach(function(ce){return ce()})}}},[P,R,I,L,j,M,D,F,N,G]);var de=React$1.createElement("div",_objectSpread2({style:T,ref:K},B));return{View:de,play:Y,stop:ee,pause:oe,setSpeed:se,goToAndStop:ie,goToAndPlay:Q,setDirection:ae,playSegments:re,setSubframe:J,getDuration:te,destroy:Z,animationContainerRef:K,animationLoaded:V,animationItem:W.current}};function getContainerVisibility(o){var u=o.getBoundingClientRect(),T=u.top,S=u.height,E=window.innerHeight-T,C=window.innerHeight+S;return E/C}function getContainerCursorPosition(o,u,T){var S=o.getBoundingClientRect(),E=S.top,C=S.left,_=S.width,P=S.height,R=(u-C)/_,I=(T-E)/P;return{x:R,y:I}}var useInitInteractivity=function o(u){var T=u.wrapperRef,S=u.animationItem,E=u.mode,C=u.actions;reactExports.useEffect(function(){var _=T.current;if(!(!_||!S||!C.length)){S.stop();var P=function(){var L=null,j=function(){var D=getContainerVisibility(_),F=C.find(function(G){var B=G.visibility;return B&&D>=B[0]&&D<=B[1]});if(F){if(F.type==="seek"&&F.visibility&&F.frames.length===2){var N=F.frames[0]+Math.ceil((D-F.visibility[0])/(F.visibility[1]-F.visibility[0])*F.frames[1]);//! goToAndStop must be relative to the start of the current segment
324S.goToAndStop(N-S.firstFrame-1,!0)}F.type==="loop"&&(L===null||L!==F.frames||S.isPaused)&&(S.playSegments(F.frames,!0),L=F.frames),F.type==="play"&&S.isPaused&&(S.resetSegments(!0),S.play()),F.type==="stop"&&S.goToAndStop(F.frames[0]-S.firstFrame-1,!0)}};return document.addEventListener("scroll",j),function(){document.removeEventListener("scroll",j)}},R=function(){var L=function(F,N){var G=F,B=N;if(G!==-1&&B!==-1){var H=getContainerCursorPosition(_,G,B);G=H.x,B=H.y}var O=C.find(function(W){var K=W.position;return K&&Array.isArray(K.x)&&Array.isArray(K.y)?G>=K.x[0]&&G<=K.x[1]&&B>=K.y[0]&&B<=K.y[1]:K&&!Number.isNaN(K.x)&&!Number.isNaN(K.y)?G===K.x&&B===K.y:!1});if(O){if(O.type==="seek"&&O.position&&Array.isArray(O.position.x)&&Array.isArray(O.position.y)&&O.frames.length===2){var V=(G-O.position.x[0])/(O.position.x[1]-O.position.x[0]),U=(B-O.position.y[0])/(O.position.y[1]-O.position.y[0]);S.playSegments(O.frames,!0),S.goToAndStop(Math.ceil((V+U)/2*(O.frames[1]-O.frames[0])),!0)}O.type==="loop"&&S.playSegments(O.frames,!0),O.type==="play"&&(S.isPaused&&S.resetSegments(!1),S.playSegments(O.frames)),O.type==="stop"&&S.goToAndStop(O.frames[0],!0)}},j=function(F){L(F.clientX,F.clientY)},M=function(){L(-1,-1)};return _.addEventListener("mousemove",j),_.addEventListener("mouseout",M),function(){_.removeEventListener("mousemove",j),_.removeEventListener("mouseout",M)}};switch(E){case"scroll":return P();case"cursor":return R()}}},[E,S])},useLottieInteractivity=function o(u){var T=u.actions,S=u.mode,E=u.lottieObj,C=E.animationItem,_=E.View,P=E.animationContainerRef;return useInitInteractivity({actions:T,animationItem:C,mode:S,wrapperRef:P}),_},_excluded=["style","interactivity"],Lottie=function o(u){var T,S,E,C=u.style,_=u.interactivity,P=_objectWithoutProperties(u,_excluded),R=useLottie(P,C),I=R.View,L=R.play,j=R.stop,M=R.pause,D=R.setSpeed,F=R.goToAndStop,N=R.goToAndPlay,G=R.setDirection,B=R.playSegments,H=R.setSubframe,O=R.getDuration,V=R.destroy,U=R.animationContainerRef,W=
324R.animationLoaded,K=R.animationItem;return reactExports.useEffect(function(){u.lottieRef&&(u.lottieRef.current={play:L,stop:j,pause:M,setSpeed:D,goToAndPlay:N,goToAndStop:F,setDirection:G,playSegments:B,setSubframe:H,getDuration:O,destroy:V,animationContainerRef:U,animationLoaded:W,animationItem:K})},[(T=u.lottieRef)===null||T===void 0?void 0:T.current]),useLottieInteractivity({lottieObj:{View:I,play:L,stop:j,pause:M,setSpeed:D,goToAndStop:F,goToAndPlay:N,setDirection:G,playSegments:B,setSubframe:H,getDuration:O,destroy:V,animationContainerRef:U,animationLoaded:W,animationItem:K},actions:(S=_==null?void 0:_.actions)!==null&&S!==void 0?S:[],mode:(E=_==null?void 0:_.mode)!==null&&E!==void 0?E:"scroll"})};function GlobalEffectOverlay(){const{currentEffect:o,stopEffect:u}=useEffectSystem(),[T,S]=reactExports.useState(null),[E,C]=reactExports.useState(!1),[_,P]=reactExports.useState(null);if(reactExports.useEffect(()=>{if(!o){S(null),P(null);return}const{config:j}=o;j.type===EFFECT_TYPES.LOTTIE&&(C(!0),P(null),fetch(j.src).then(M=>{if(!M.ok)throw new Error(`Failed to load: ${j.src}`);return M.json()}).then(M=>{S(M),C(!1)}).catch(M=>{console.error("[GlobalEffectOverlay] Error loading animation:",M),P(M.message),C(!1)}))},[o]),!o)return null;const{config:R,name:I}=o,L=I==="COUNTDOWN";return jsxRuntimeExports.jsxs("div",{style:{position:"fixed",top:0,left:0,right:0,bottom:0,zIndex:9999,backdropFilter:L?"blur(10px)":"none",backgroundColor:L?"rgba(0, 0, 0, 0.6)":"transparent",pointerEvents:L?"auto":"none",transition:"all 0.3s ease",display:"flex",alignItems:"center",justifyContent:"center"},children:[R.type===EFFECT_TYPES.LOTTIE&&T&&jsxRuntimeExports.jsx(Lottie,{animationData:T,loop:!1,autoplay:!0,onComplete:u,style:{width:"100%",height:"100%",maxWidth:"600px",maxHeight:"600px",filter:L?"drop-shadow(0 0 20px rgba(255,255,255,0.5))":"none"}}),R.type===EFFECT_TYPES.VIDEO&&jsxRuntimeExports.jsx("video",{src:R.src,autoPlay:!0,muted:!0,onEnded:u,style:{maxWidth:"100%",maxHeight:"100%",objectFit:"contain"}}),E&&jsxRuntimeExports.jsx("div",{style:{color:"#fff",fontSize:"1.5rem",textShadow:"0 2px 4px rgba(0,0,0,0.5)",display:L?"block":"none"},children:"Loading..."})]})}const SEEN_KEY_PREFIX="admin_data_refresh_seen_";function AdminCopyRefreshBanner(){const{currentUser:o}=useAuth(),{subscription:u}=useSubscription(),[T,S]=reactExports.useState(!1),E=u==null?void 0:u.dataRefreshSignal;reactExports.useEffect(()=>{if(!(o!=null&&o.uid)||!E){S(!1);return}let P=null;try{P=localStorage.getItem(SEEN_KEY_PREFIX+o.uid)}catch{}S(!P||E>P)},[o==null?void 0:o.uid,E]);const C=()=>{if(o!=null&&o.uid&&E)try{localStorage.setItem(SEEN_KEY_PREFIX+o.uid,E)}catch{}S(!1)},_=()=>{C();try{sessionStorage.clear()}catch{}window.location.reload()};return T?jsxRuntimeExports.jsxs("div",{style:{position:"fixed",top:0,left:0,right:0,zIndex:1e4,background:"linear-gradient(90deg, #4f46e5, #7c3aed)",color:"#fff",padding:"10px 16px",display:"flex",alignItems:"center",justifyContent:"center",gap:12,flexWrap:"wrap",boxShadow:"0 2px 8px rgba(0,0,0,0.25)",fontSize:15},role:"status",children:[jsxRuntimeExports.jsx("span",{style:{fontWeight:600},children:"🔄 Quản trị viên vừa chuyển dữ liệu học tập vào tài khoản của bạn."}),jsxRuntimeExports.jsx("button",{onClick:_,style:{background:"#fff",color:"#4f46e5",border:"none",borderRadius:8,padding:"6px 16px",fontWeight:700,cursor:"pointer",fontSize:14},children:"Tải dữ liệu mới"}),jsxRuntimeExports.jsx("button",{onClick:C,"aria-label":"Đóng",style:{background:"transparent",color:"#fff",border:"none",fontSize:20,lineHeight:1,cursor:"pointer",padding:"0 4px"},children:"✕"})]}):null}const RELOAD_FLAG="chunk_reload";function lazyRetry(o){return reactExports.lazy(()=>retryImport(o))}async function retryImport(o,u=3){try{const T=await o();try{sessionStorage.removeItem(RELOAD_FLAG)}catch{}return T}catch(T){if(T instanceof Error&&T.message==="CHUNK_LOAD_FAILED")throw T;if(u>0)return await new Promise(E=>setTimeout(E,1e3)),retryImport(o,u-1);let S=!0;try{S=sessionStorage.getItem(RELOAD_FLAG)==="1",S||sessionStorage.setItem(RELOAD_FLAG,"1")}catch{S=!0}throw S||window.location.reload(),new Error("CHUNK_LOAD_FAILED")}}const UpdateNotification=()=>{const o=useTheme(),u=useMediaQuery(o.breakpoints.down("sm")),[T,S]=reactExports.useState(null),[E,C]=reactExports.useState("HIDDEN");reactExports.useEffect(()=>{(async()=>
324{try{const M=Timestamp.now(),D=query(collection(db,"system_notifications"),where("isActive","==",!0),orderBy("createdAt","desc"),limit(5)),N=(await getDocs(D)).docs.map(G=>({id:G.id,...G.data()})).find(G=>{var V,U;const B=((V=G.startTime)==null?void 0:V.toMillis())||0,H=((U=G.endTime)==null?void 0:U.toMillis())||0,O=Date.now();return O>=B&&O<=H});if(N){const G=`notif_closed_${N.versionId||N.id}`;if(!localStorage.getItem(G)){if(N.mediaUrl&&N.mediaType!=="video"){const H=new Image;H.src=N.mediaUrl}S(N),C("MODAL")}}}catch(M){console.error("Lỗi check thông báo:",M)}})()},[]);const _=()=>{C("STICKER")},P=()=>{C("MODAL")},R=j=>{if(j.stopPropagation(),T){const M=`notif_closed_${T.versionId||T.id}`;localStorage.setItem(M,"true")}C("HIDDEN")},I=async()=>{if(T){const j=`notif_closed_${T.versionId||T.id}`;localStorage.setItem(j,"true")}window.location.reload()},L=()=>{if(T){const j=`notif_closed_${T.versionId||T.id}`;localStorage.setItem(j,"true")}T!=null&&T.actionUrl&&(window.location.href=T.actionUrl)};return!T||E==="HIDDEN"?null:jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsxs(Dialog,{open:E==="MODAL",onClose:_,maxWidth:"sm",fullWidth:!0,fullScreen:u,scroll:"paper",sx:{"& .MuiDialog-paper":u?{m:0,borderRadius:0}:{borderRadius:2}},children:[jsxRuntimeExports.jsxs(DialogTitle,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",bgcolor:"#e3f2fd",py:{xs:1.5,sm:2},px:{xs:2,sm:3}},children:[jsxRuntimeExports.jsxs(Box,{sx:{display:"flex",alignItems:"center",gap:1,minWidth:0},children:[jsxRuntimeExports.jsx(NotificationsActiveIcon,{color:"primary",sx:{flexShrink:0}}),jsxRuntimeExports.jsx(Typography,{variant:"h6",fontWeight:"bold",color:"primary",sx:{fontSize:{xs:"1.05rem",sm:"1.25rem"},overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:T.title})]}),jsxRuntimeExports.jsx(IconButton,{onClick:_,size:"small",sx:{flexShrink:0,ml:1},children:jsxRuntimeExports.jsx(CloseIcon,{})})]}),jsxRuntimeExports.jsxs(DialogContent,{dividers:!0,sx:{py:{xs:2,sm:3},px:{xs:2,sm:3}},children:[jsxRuntimeExports.jsx(Typography,{variant:"body1",sx:{mb:2,whiteSpace:"pre-line",fontSize:{xs:"0.9rem",sm:"1rem"}},children:T.description}),T.mediaUrl&&jsxRuntimeExports.jsx(Box,{sx:{mt:2,borderRadius:2,overflow:"hidden",border:"1px solid #eee"},children:T.mediaType==="video"?jsxRuntimeExports.jsxs("video",{controls:!0,width:"100%",autoPlay:!0,muted:!0,playsInline:!0,preload:"metadata",style:{display:"block"},children:[jsxRuntimeExports.jsx("source",{src:T.mediaUrl,type:"video/mp4"}),"Trình duyệt không hỗ trợ video."]}):jsxRuntimeExports.jsx(Box,{sx:{position:"relative",aspectRatio:"16 / 9",bgcolor:"#f0f0f0"},children:jsxRuntimeExports.jsx(Box,{component:"img",src:T.mediaUrl,alt:"Update preview",loading:"eager",decoding:"async",fetchPriority:"high",onLoad:j=>{j.currentTarget.style.opacity="1"},sx:{position:"absolute",inset:0,width:"100%",height:"100%",objectFit:"cover",display:"block",opacity:0,transition:"opacity .25s ease"}})})})]}),jsxRuntimeExports.jsxs(DialogActions,{sx:{p:2,pb:{xs:"max(16px, env(safe-area-inset-bottom))",sm:2},bgcolor:"#f5f5f5",flexDirection:{xs:"column-reverse",sm:"row"},gap:{xs:1,sm:0},"& > button":{width:{xs:"100%",sm:"auto"},m:{xs:0,sm:void 0}}},children:[T.actionUrl&&jsxRuntimeExports.jsx(Button,{onClick:L,variant:"outlined",color:"primary",fullWidth:u,children:"Thử ngay"}),jsxRuntimeExports.jsx(Button,{onClick:I,variant:"contained",color:"primary",fullWidth:u,children:"Đã hiểu (OK)"})]})]}),jsxRuntimeExports.jsx(Zoom,{in:E==="STICKER",children:jsxRuntimeExports.jsxs(Paper,{elevation:4,sx:{position:"fixed",bottom:{xs:"max(16px, env(safe-area-inset-bottom))",sm:24},left:{xs:12,sm:24},right:{xs:12,sm:"auto"},maxWidth:{xs:"calc(100% - 24px)",sm:320},zIndex:9999,borderRadius:"28px",bgcolor:"white",display:"flex",alignItems:"center",pr:1,cursor:"pointer",border:"2px solid #2196f3"},onClick:P,children:[jsxRuntimeExports.jsx(Fab,{color:"primary",size:"medium",sx:{boxShadow:"none",flexShrink:0},children:jsxRuntimeExports.jsx(NotificationsActiveIcon,{})}),jsxRuntimeExports.jsxs(Box,{sx:{ml:1.5,mr:1,minWidth:0,flex:1},children:[jsxRuntimeExports.jsx(Typography,{variant:"caption",fontWeight:"bold",color:"primary",display:"block",noWrap:!0,children:"Cập nhật mới!"}),jsxRuntimeExports.jsx(Typography,{variant:"caption",color:"text.secondary",noWrap:!0,sx:{display:"block"},children:"Xem chi tiết"})]}),jsxRuntimeExports.jsx(IconButton,{size:"small",onClick:R,sx:{bgcolor:"#eee",width:20,height:20,flexShrink:0,"&:hover":{bgcolor:"#ffcdd2",color:"#d32f2f"}},children:jsxRuntimeExports.jsx(CloseIcon,{sx:{fontSize:14}})})]})})]})},externalTools$3=[{category:"Phần mềm giảng dạy/quản lý",tools:[{name:"VnEdu",icon:"https://play-lh.googleusercontent.com/mwA7_AKSRV39zR1CbfCGkiMb3PxSQ_Ab5FINQeZs5Cfo20CyxJBwbc1Q7XzlReCqi8s",url:"https://vnedu.vn",altText:"VnEdu - Mạng giáo dục Việt Nam"},{name:"SMAS",icon:"https://play-lh.googleusercontent.com/5Vs6Mie-_t1zVJ3q__KwQWQUPx9MqQT5z23N337VmaUc5RLJ0UtwHfy6fJypbALYNAuY",url:"https://vtsmas.vn/auth/login",altText:"SMAS - Hệ thống quản lý nhà trường"}
324,{name:"CSDL Ngành GD",icon:"https://t2.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=https://csdl.moet.gov.vn&size=128",url:"https://csdl.moet.gov.vn",altText:"Cơ sở dữ liệu ngành Giáo dục"},{name:"Khan Academy",icon:"https://t2.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=https://vi.khanacademy.org&size=128",url:"https://vi.khanacademy.org",altText:"Khan Academy - Học miễn phí"},{name:"PhET Colorado",icon:"https://t2.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=https://phet.colorado.edu&size=128",url:"https://phet.colorado.edu/vi",altText:"PhET - Mô phỏng Toán & Khoa học"},{name:"Wordwall",icon:"https://t2.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=https://wordwall.net&size=128",url:"https://wordwall.net/vi",altText:"Wordwall - Trò chơi tương tác"},{name:"Quizizz",icon:"https://t2.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=https://quizizz.com&size=128",url:"https://quizizz.com",altText:"Quizizz - Đánh giá gamification"},{name:"Kahoot",icon:"https://t2.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=https://kahoot.com&size=128",url:"https://kahoot.com",altText:"Kahoot - Game học tập"},{name:"Padlet",icon:"https://t2.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=https://padlet.com&size=128",url:"https://padlet.com",altText:"Padlet - Bảng cộng tác"},{name:"Plickers",icon:"https://t2.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=https://get.plickers.com&size=128",url:"https://get.plickers.com",altText:"Plickers - Trắc nghiệm thẻ bài"}]},{category:"Phần mềm AI",subcategories:[{name:"AI tổng hợp",tools:[{name:"Gemini",icon:"https://t2.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=https://gemini.google.com&size=128",url:"https://gemini.google.com",altText:"Google Gemini"},{name:"ChatGPT",icon:"https://t2.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=https://chatgpt.com&size=128",url:"https://chatgpt.com",altText:"ChatGPT - OpenAI"},{name:"Claude",icon:"https://t2.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=https://claude.ai&size=128",url:"https://claude.ai",altText:"Claude AI - Anthropic"},{name:"NotebookLM",icon:"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRmzKJvJxVdzoN9z5ZNStYBBLFvGUcQHRxjuw&s",url:"https://notebooklm.google.com",altText:"NotebookLM - Ghi chú thông minh"},{name:"Grok",icon:"https://img.icons8.com/color/1200/grok--v2.jpg",url:"https://x.ai",altText:"Grok - X.AI"},{name:"Deepseek",icon:"https://t2.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=https://chat.deepseek.com&size=128",url:"https://chat.deepseek.com",altText:"Deepseek Chat"},{name:"Meta AI",icon:"https://t2.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=https://www.meta.ai&size=128",url:"https://www.meta.ai",altText:"Meta AI"}]},{name:"AI tạo ảnh",tools:[{name:"Gemini (Image)",icon:"https://t2.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=https://gemini.google.com&size=128",url:"https://gemini.google.com",altText:"Gemini Image Generation"},{name:"Canva Edu",icon:"https://t2.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=https://www.canva.com&size=128",url:"https://www.canva.com/dream-lab",altText:"Canva Education"},{name:"DreamFace",icon:"https://t2.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=https://dreamfaceapp.com&size=128",url:"https://dreamfaceapp.com",altText:"DreamFace - Photo Animator"},{name:"Dreamina",icon:"https://t2.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=https://www.dreamina.com&size=128",url:"https://dreamina.capcut.com/ai-tool/generate?type=image",altText:"Dreamina Art"}
324,{name:"Leonardo.ai",icon:"https://t2.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=https://leonardo.ai&size=128",url:"https://leonardo.ai",altText:"Leonardo AI"},{name:"Flux (BFL)",icon:"https://t2.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=https://blackforestlabs.ai&size=128",url:"https://blackforestlabs.ai",altText:"Flux - Black Forest Labs"},{name:"MS Designer",icon:"https://t2.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=https://designer.microsoft.com&size=128",url:"https://designer.microsoft.com",altText:"Microsoft Designer"},{name:"Runway",icon:"https://t2.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=https://runwayml.com&size=128",url:"https://runwayml.com",altText:"RunwayML"},{name:"Kling AI",icon:"https://t2.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=https://klingai.com&size=128",url:"https://klingai.com",altText:"Kling AI"}]},{name:"AI tạo video",tools:[{name:"Google Veo (Flow)",icon:"https://t2.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=https://deepmind.google&size=128",url:"https://labs.google/fx/vi/tools/flow",altText:"Google Veo (DeepMind)"},{name:"Pixverse",icon:"https://t2.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=https://pixverse.ai&size=128",url:"https://pixverse.ai",altText:"Pixverse AI"},{name:"Vidu",icon:"https://t2.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=https://www.vidu.studio&size=128",url:"https://www.vidu.studio",altText:"Vidu Studio"},{name:"Digen",icon:"https://t2.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=https://www.digen.ai&size=128",url:"https://www.digen.ai",altText:"Digen AI"}]},{name:"AI tạo nhạc/âm thanh",tools:[{name:"Suno",icon:"https://t2.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=https://suno.com&size=128",url:"https://suno.com",altText:"Suno AI Music"},{name:"Google AI Studio",icon:"https://t2.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=https://aistudio.google.com&size=128",url:"https://aistudio.google.com",altText:"Google AI Studio"},{name:"Turboscribe",icon:"https://t2.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=https://turboscribe.ai&size=128",url:"https://turboscribe.ai",altText:"Turboscribe - AI Transcribe"},{name:"Vbee",icon:"https://t2.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=https://vbee.vn&size=128",url:"https://vbee.vn",altText:"Vbee Text to Speech"},{name:"TTSFree",icon:"https://t2.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=https://ttsfree.com&size=128",url:"https://ttsfree.com",altText:"TTS Free"},{name:"Narakeet",icon:"https://t2.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=https://www.narakeet.com&size=128",url:"https://www.narakeet.com",altText:"Narakeet"},{name:"DupDub",icon:"https://t2.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=https://www.dupdub.com&size=128",url:"https://www.dupdub.com",altText:"DupDub"}]}]},{category:"Trang thông tin giáo dục",tools:[{name:"Giáo Dục VN",icon:"https://t2.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=https://giaoduc.net.vn&size=128",url:"https://giaoduc.net.vn",altText:"Tạp chí Giáo dục Việt Nam"},{name:"Bộ GD&ĐT",icon:"https://t2.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=https://moet.gov.vn&size=128",url:"https://moet.gov.vn",altText:"Bộ Giáo dục & Đào tạo"},{name:"Tuổi Trẻ",icon:"https://play-lh.googleusercontent.com/ABk3SvZrHnJSexMRGqZUXl5ua0UIFVBUbh738j66zAilUt8Xfy-wUlKnO6gdre_e5Bsk",url:"https://tuoitre.vn/giao-duc.htm",altText:"Báo Tuổi Trẻ - Giáo Dục"},{name:"Tạp chí GD",icon:"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQghQXrNUWFRJ-Fw1pyhb2c4XCBWMYlS0ZA9w&s",url:"https://tapchigiaoduc.edu.vn",altText:"Tạp chí Giáo dục"}]}];function ExternalToolsSection({showTitle:o=!0,containerClassName:u="",collapsible:T=!1}){const{t:S}
324=useTranslation("common"),E=reactExports.useMemo(()=>window.matchMedia("(max-width: 768px)").matches,[]),[C,_]=reactExports.useState(!1),P={"Phần mềm giảng dạy/quản lý":"teaching","Phần mềm AI":"ai","AI tổng hợp":"aiGeneral","AI tạo ảnh":"aiImage","AI tạo video":"aiVideo","AI tạo nhạc/âm thanh":"aiAudio","Trang thông tin giáo dục":"education"},R=jsxRuntimeExports.jsxs("div",{className:"tools-container",children:[o&&!T&&jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsx(motion.h2,{className:"tools-title",initial:E?!1:{opacity:0,y:20},whileInView:E?void 0:{opacity:1,y:0},transition:E?void 0:{duration:.6},viewport:{once:!0},children:S("externalTools.title")}),jsxRuntimeExports.jsx(motion.p,{className:"tools-warning",initial:E?!1:{opacity:0,y:20},whileInView:E?void 0:{opacity:1,y:0},transition:E?void 0:{duration:.6,delay:.1},viewport:{once:!0},style:{color:"#fde68a",textAlign:"center",marginTop:"10px",marginBottom:"20px",fontWeight:600},children:S("externalTools.warning")})]}),externalTools$3.map((I,L)=>jsxRuntimeExports.jsxs(motion.div,{className:"tools-category",initial:E?!1:{opacity:0,y:20},whileInView:E?void 0:{opacity:1,y:0},transition:E?void 0:{delay:L*.1,duration:.6},viewport:{once:!0},children:[jsxRuntimeExports.jsx("h3",{children:P[I.category]?S(`externalTools.categories.${P[I.category]}`):I.category}),I.subcategories?I.subcategories.map(j=>jsxRuntimeExports.jsxs("div",{className:"tools-subcategory",children:[jsxRuntimeExports.jsx("h4",{children:P[j.name]?S(`externalTools.categories.${P[j.name]}`):j.name}),jsxRuntimeExports.jsx("div",{className:"tools-grid",children:j.tools.map(M=>jsxRuntimeExports.jsxs("a",{href:M.url,target:"_blank",rel:"noopener noreferrer",className:"tool-card",title:S("externalTools.accessTooltip",{name:M.name}),children:[jsxRuntimeExports.jsx("img",{src:M.icon,alt:M.altText,loading:"lazy"}),jsxRuntimeExports.jsx("span",{children:M.name})]},M.name))})]},j.name)):jsxRuntimeExports.jsx("div",{className:"tools-grid",children:I.tools.map(j=>jsxRuntimeExports.jsxs("a",{href:j.url,target:"_blank",rel:"noopener noreferrer",className:"tool-card",title:S("externalTools.accessTooltip",{name:j.name}),children:[jsxRuntimeExports.jsx("img",{src:j.icon,alt:j.altText,loading:"lazy"}),jsxRuntimeExports.jsx("span",{children:j.name})]},j.name))})]},I.category))]});return T?jsxRuntimeExports.jsxs("section",{className:`external-tools-section external-tools-section--collapsible ${u}`,children:[jsxRuntimeExports.jsxs("button",{className:"external-tools-toggle",onClick:()=>_(I=>!I),"aria-expanded":C,children:[jsxRuntimeExports.jsx("span",{className:"external-tools-toggle__icon",children:"🔗"}),jsxRuntimeExports.jsx("span",{className:"external-tools-toggle__label",children:S("externalTools.title")}),jsxRuntimeExports.jsx("span",{className:`external-tools-toggle__arrow ${C?"external-tools-toggle__arrow--open":""}`,children:"▼"})]}),jsxRuntimeExports.jsx(AnimatePresence,{initial:!1,children:C&&jsxRuntimeExports.jsx(motion.div,{initial:{height:0,opacity:0},animate:{height:"auto",opacity:1},exit:{height:0,opacity:0},transition:{duration:.3,ease:"easeInOut"},style:{overflow:"hidden"},children:jsxRuntimeExports.jsxs("div",{style:{padding:"0 0 8px"},children:[jsxRuntimeExports.jsx("p",{className:"tools-warning",style:{color:"#fde68a",textAlign:"center",margin:"16px 0",fontWeight:600},children:S("externalTools.warning")}),R]})},"tools-body")})]}):jsxRuntimeExports.jsx(motion.section,{className:`external-tools-section ${u}`,initial:E?!1:{opacity:0},whileInView:E?void 0:{opacity:1},transition:E?void 0:{duration:.8},viewport:{once:!0},children:R})}function BaseModal({open:o=!1,onClose:u,title:T,size:S="md",showCloseButton:E=!0,closeOnOverlayClick:C=!0,className:_="",children:P,footer:R}){const I=reactExports.useCallback(M=>{M.key==="Escape"&&u&&u()},[u]);if(reactExports.useEffect(()=>(o&&(document.addEventListener("keydown",I),document.body.style.overflow="hidden"),()=>{document.removeEventListener("keydown",I),document.body.style.overflow=""}),[o,I]),!o)return null;const L=M=>{M.target===M.currentTarget&&C&&u&&u()},j=jsxRuntimeExports.jsx("div",{className:"base-modal-overlay",onClick:L,children:jsxRuntimeExports.jsxs("div",{className:`base-modal base-modal--${S} ${_}`,children:[(T||E)&&jsxRuntimeExports.jsxs("div",{className:"base-modal__header",children:[T&&jsxRuntimeExports.jsx("h2",{className:"base-modal__title",children:T}),E&&jsxRuntimeExports.jsx("button",{type:"button",className:"base-modal__close",onClick:u,"aria-label":"Đóng",children:"×"})]}),jsxRuntimeExports.jsx("div",{className:"base-modal__body",children:P}),R&&jsxRuntimeExports.jsx("div",{className:"base-modal__footer",children:R})]})});return reactDomExports.createPortal(j,document.body)}const MODULE_CATALOG=[{id:"tug-of-war-game",i18nKey:"tug-of-war-game",landingI18
324nKey:"tugOfWarGame",icon:"🪢",color:"linear-gradient(135deg, #10b981, #3b82f6)",available:!0,path:"/tug-of-war-game"},{id:"head-tilt-quiz",i18nKey:"head-tilt-quiz",landingI18nKey:"headTiltQuiz",icon:"🤔",iconStyle:{display:"inline-block",transform:"rotate(45deg)"},color:"linear-gradient(135deg, #a18cd1, #fbc2eb)",available:!0,path:"/head-tilt-quiz"},{id:"hand-slash-quiz",i18nKey:"hand-slash-quiz",landingI18nKey:"handSlashQuiz",icon:"✋",color:"linear-gradient(135deg, #f59e0b, #fbbf24)",available:!0,path:"/hand-slash-quiz"},{id:"star-bag-game",i18nKey:"star-bag-game",landingI18nKey:"starBagGame",icon:"⭐",color:"linear-gradient(135deg, #11998e, #38ef7d)",available:!0,path:"/star-bag-game"},{id:"minesweeper",i18nKey:"minesweeper",landingI18nKey:"minesweeper",landingUsesHomeNamespace:!0,icon:"🧨",color:"linear-gradient(135deg, #8b5e3c, #b88a5a)",available:!0,path:"/minesweeper"},{id:"pose-quiz",i18nKey:"pose-quiz",landingI18nKey:"poseQuiz",icon:"🤸",color:"linear-gradient(135deg, #a8e0b8, #e3f7e9)",available:!0,path:"/pose-quiz"},{id:"flip-puzzle-game",i18nKey:"flip-puzzle-game",landingI18nKey:"flipPuzzleGame",icon:"🧩",color:"linear-gradient(135deg, #ff6b6b, #ee5a6f)",available:!0,path:"/flip-puzzle-game"},{id:"knowledge-train-game",i18nKey:"knowledge-train-game",landingI18nKey:"knowledgeTrainGame",icon:"🚂",color:"linear-gradient(135deg, #0ea5e9, #2563eb)",available:!0,path:"/knowledge-train-game"},{id:"turn-based-game",i18nKey:"turn-based-game",landingI18nKey:"turnBasedGame",icon:"🎲",color:"linear-gradient(135deg, #11998e, #38ef7d)",available:!0,path:"/turn-based-game"},{id:"versus-game",i18nKey:"versus-game",landingI18nKey:"versusGame",icon:"⚔️",color:"linear-gradient(135deg, #e74c3c, #ff6b6b)",available:!0,isPremiumFeature:!0,path:"/versus-game"},{id:"paper-mode",i18nKey:"paper-mode",landingI18nKey:"paperMode",icon:null,color:"linear-gradient(135deg, #1a1a2e, #0f3460)",available:!0,isNew:!0,path:"/paper-mode"},{id:"wheel-quiz",i18nKey:"wheel-quiz",landingI18nKey:"wheelQuiz",icon:"🎡",color:"linear-gradient(135deg, #e8dcc8, #f5ead8)",available:!0,path:"/wheel-quiz"},{id:"face-random",i18nKey:"face-random",landingI18nKey:"faceRandom",icon:"📷",color:"linear-gradient(135deg, #10b981, #3b82f6)",available:!0,isNew:!0,path:"/face-random"},{id:"paced-quiz",i18nKey:"paced-quiz",landingI18nKey:"pacedQuiz",icon:"⏱️",color:"linear-gradient(135deg, #667eea, #764ba2)",available:!0,path:"/paced-quiz"},{id:"flying-words-game",i18nKey:"flying-words-game",landingI18nKey:"flyingWordsGame",icon:"🦋",color:"linear-gradient(135deg, #a78bfa, #7c3aed)",available:!0,path:"/flying-words-game"},{id:"quiz-game",i18nKey:"quiz-game",landingI18nKey:"quizGame",icon:"🤏",color:"linear-gradient(135deg, #f093fb, #f5576c)",available:!0,path:"/quiz-game"},{id:"crossword-puzzle",i18nKey:"crossword-puzzle",landingI18nKey:"crosswordPuzzle",icon:"🔤",color:"linear-gradient(135deg, #667eea, #764ba2)",available:!0,path:"/crossword-puzzle"},{id:"flashcard",i18nKey:"flashcard",landingI18nKey:"flashcard",landingUsesHomeNamespace:!0,icon:"🃏",color:"linear-gradient(135deg, #1976d2, #42a5f5)",available:!0,path:"/flashcard"},{id:"mind-map",i18nKey:"mind-map",landingI18nKey:"mind-map",landingUsesHomeNamespace:!0,icon:"🔀",color:"linear-gradient(135deg, #667eea, #764ba2)",available:!0,path:"/mind-map"},{id:"panorama-museum",i18nKey:"panorama-museum",landingI18nKey:"panoramaMuseum",icon:"🧊",color:"linear-gradient(135deg, #a8edea, #fed6e3)",available:!0,path:"/panorama-museum"},{id:"interactive-video",i18nKey:"interactive-video",landingI18nKey:"interactiveVideo",icon:"🎬",color:"linear-gradient(135deg, #667eea, #764ba2)",available:!0,path:"/interactive-video"},{id:"interactive-image",i18nKey:"interactive-image",landingI18nKey:"interactiveImage",icon:"🖼️",color:"linear-gradient(135deg, #f59e0b, #ef4444)",available:!0,path:"/interactive-image"},{id:"journey",i18nKey:"journey",landingI18nKey:"journey",icon:"🗺️",color:"linear-gradient(135deg, #ec4899, #f472b6)",available:!0,isPremiumFeature:!0,path:"/journey"}
324,{id:"scavenger-hunt",i18nKey:"scavenger-hunt",landingI18nKey:"scavenger-hunt",icon:"💎",color:"linear-gradient(135deg, #7c3aed, #a855f7)",available:!0,path:"/scavenger-hunt"},{id:"html-embed-game",i18nKey:"html-embed-game",landingI18nKey:"htmlEmbedGame",icon:"🕹️",color:"linear-gradient(135deg, #1a1a2e, #16213e)",available:!0,isPremiumFeature:!0,path:"/html-embed-game"},{id:"noise-tracker",i18nKey:"noise-tracker",landingI18nKey:"noiseTracker",icon:"🐉",color:"linear-gradient(135deg, #1a1a2e, #4a1942)",available:!0,path:"/noise-tracker"}],PROJECT_SEARCH_SOURCES=[{featureId:"tug-of-war-game",label:"Kéo co",icon:"🪢",path:"/tug-of-war-game",loadAll:o=>__vitePreload(()=>import("./tugOfWarService-C5KzKzgB.js"),__vite__mapDeps([0,1,2,3,4,5])).then(u=>u.getAllUserGames(o))},{featureId:"head-tilt-quiz",label:"Nghiêng đầu",icon:"🤔",path:"/head-tilt-quiz",loadAll:o=>__vitePreload(()=>import("./headTiltService-PeTe-xIm.js").then(u=>u.h),__vite__mapDeps([6,1,7])).then(u=>u.getAllLessons(o))},{featureId:"hand-slash-quiz",label:"Chém tay",icon:"✋",path:"/hand-slash-quiz",loadAll:o=>__vitePreload(()=>import("./handSlashService-CklEk98N.js").then(u=>u.h),__vite__mapDeps([8,1,7])).then(u=>u.getAllLessons(o))},{featureId:"star-bag-game",label:"Túi sao",icon:"⭐",path:"/star-bag-game",loadAll:o=>__vitePreload(()=>import("./starBagService-CaNJAfWC.js").then(u=>u.s),__vite__mapDeps([9,1,7])).then(u=>u.getAllUserGames(o))},{featureId:"minesweeper",label:"Dò mìn",icon:"🧨",path:"/minesweeper",loadAll:o=>__vitePreload(()=>import("./minesweeperService-D0RsD1b6.js").then(u=>u.m),__vite__mapDeps([10,1,7])).then(u=>u.getAllUserGames(o))},{featureId:"pose-quiz",label:"Tạo dáng",icon:"🤸",path:"/pose-quiz",loadAll:o=>__vitePreload(()=>import("./poseQuizService-CBtK-gBK.js").then(u=>u.p),__vite__mapDeps([11,1,7])).then(u=>u.getUserQuizzes(o))},{featureId:"flip-puzzle-game",label:"Lật hình",icon:"🧩",path:"/flip-puzzle-game",loadAll:o=>__vitePreload(()=>import("./flipPuzzleService-4wqpcbkQ.js").then(u=>u.f),__vite__mapDeps([12,1,7])).then(u=>u.getUserPuzzles(o))},{featureId:"knowledge-train-game",label:"Đoàn tàu",icon:"🚂",path:"/knowledge-train-game",loadAll:o=>__vitePreload(()=>import("./knowledgeTrainService-y7fRG4Qi.js").then(u=>u.k),__vite__mapDeps([13,1,7])).then(u=>u.getUserTrains(o))},{featureId:"turn-based-game",label:"Cờ lượt",icon:"🎲",path:"/turn-based-game",loadAll:o=>__vitePreload(()=>import("./turnBasedGameService-BU3KxH3n.js").then(u=>u.t),__vite__mapDeps([14,1,7])).then(u=>u.getAllGames(o))},{featureId:"wheel-quiz",label:"Vòng quay",icon:"🎡",path:"/wheel-quiz",loadAll:o=>__vitePreload(()=>import("./wheelQuizCloudService-Bqz9YCCY.js").then(u=>u.y),__vite__mapDeps([15,7,1,16])).then(u=>u.getAllQuestionSets(o))},{featureId:"paced-quiz",label:"Quiz nhịp độ",icon:"⏱️",path:"/paced-quiz",loadAll:o=>__vitePreload(()=>import("./pacedQuizService-BtL7Bkox.js").then(u=>u.p),__vite__mapDeps([17,1,18,19,20,7])).then(u=>u.getUserQuizzes(o))},{featureId:"flying-words-game",label:"Từ ngữ bay",icon:"🦋",path:"/flying-words-game",loadAll:o=>__vitePreload(()=>import("./flyingWordsService-ECtyZAS2.js"),__vite__mapDeps([21,1,2,3,4,5])).then(u=>u.getAllLessons(o))},{featureId:"quiz-game",label:"Quiz",icon:"🤏",path:"/quiz-game",loadAll:o=>__vitePreload(()=>import("./quizGameService-COfox1GO.js").then(u=>u.q),__vite__mapDeps([22,1,7])).then(u=>u.getUserQuizzes(o))},{featureId:"crossword-puzzle",label:"Ô chữ",icon:"🔤",path:"/crossword-puzzle",loadAll:o=>__vitePreload(()=>import("./crosswordService-BGQeoqHM.js").then(u=>u.a),__vite__mapDeps([23,1,7,24])).then(u=>u.getUserCrosswords(o))},{featureId:"flashcard",label:"Flashcard",icon:"🃏",path:"/flashcard",loadAll:o=>__vitePreload(()=>import("./flashcardService-CMQq3J1A.js").then(u=>u.f),__vite__mapDeps([25,1,7])).then(u=>u.getDecks(o))},{featureId:"mind-map",label:"Sơ đồ tư duy",icon:"🔀",path:"/mind-map",loadAll:o=>__vitePreload(()=>import("./mindMapService-B5fPv6E3.js").then(u=>u.m),__vite__mapDeps([26,1,7])).then(u=>u.getMindMaps(o))},{featureId:"interactive-video",label:"Video tương tác",icon:"🎬",path:"/interactive-video",loadAll:o=>__vitePreload(()=>import("./lessonService-KFFZxx1P.js"),__vite__mapDeps([27,1,2,3,4,5])).then(u=>u.getUserLessons(o))},{featureId:"interactive-image",label:"Ảnh tương tác",icon:"🖼️",path:"/interactive-image",loadAll:o=>__vitePreload(()=>import("./interactiveImageService-DLsLSujm.js").then(u=>u.i),__vite__mapDeps([28,1,7])).then(u=>u.getUserInteractiveImages(o))}],TTL_MS=24*60*60*1e3,dataKey=o=>`project_search_index_${o}`,dirtyKey="project_search_dirty";function readProjectSearchCache(o){try{if(localStorage.getItem(dirt
324yKey))return null;const u=localStorage.getItem(dataKey(o));if(!u)return null;const T=JSON.parse(u);return!(T!=null&&T.ts)||Date.now()-T.ts>TTL_MS?null:T.items||null}catch{return null}}function writeProjectSearchCache(o,u){try{localStorage.setItem(dataKey(o),JSON.stringify({ts:Date.now(),items:u})),localStorage.removeItem(dirtyKey)}catch{}}function markProjectSearchDirty(){try{localStorage.setItem(dirtyKey,"1")}catch{}}function normalize(o){return(o||"").normalize("NFD").replace(/[̀-ͯ]/g,"").replace(/[đ]/g,"d").replace(/[Đ]/g,"D").toLowerCase().trim()}function ProjectSearchModal({open:o,onClose:u}){const{t:T}=useTranslation("common"),{t:S}=useTranslation("home"),{currentUser:E}=useAuth(),C=useNavigate(),[_,P]=reactExports.useState(""),[R,I]=reactExports.useState(null),[L,j]=reactExports.useState(!1),M=reactExports.useMemo(()=>MODULE_CATALOG.filter(H=>H.available&&!H.isExtension&&!H.path.startsWith("http")).map(H=>({id:H.id,title:S(`modules.${H.i18nKey}.title`),description:S(`modules.${H.i18nKey}.description`),icon:typeof H.icon=="string"?H.icon:"🧩",path:H.path})),[S]);reactExports.useEffect(()=>{if(!o||!(E!=null&&E.uid))return;const H=E.uid,O=readProjectSearchCache(H);if(O){I(O);return}j(!0),Promise.allSettled(PROJECT_SEARCH_SOURCES.map(V=>V.loadAll(H).then(U=>(U||[]).map(W=>({id:W.id,title:W.title||"",featureId:V.featureId,label:V.label,icon:V.icon,path:V.path}))))).then(V=>{const U=[];for(const W of V)W.status==="fulfilled"&&U.push(...W.value);I(U),writeProjectSearchCache(H,U)}).finally(()=>j(!1))},[o,E]);const D=normalize(_),F=reactExports.useMemo(()=>R?D?R.filter(H=>normalize(H.title).includes(D)):R:[],[R,D]),N=reactExports.useMemo(()=>D?M.filter(H=>normalize(H.title).includes(D)||normalize(H.description).includes(D)):M,[M,D]),G=H=>{u(),C(`${H.path}?q=${encodeURIComponent(H.title)}`)},B=H=>{u(),C(H.path)};return jsxRuntimeExports.jsx(BaseModal,{open:o,onClose:u,size:"md",title:T("search.title"),children:jsxRuntimeExports.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:12,minHeight:200}
324,children:[jsxRuntimeExports.jsx("input",{autoFocus:!0,type:"text",value:_,onChange:H=>P(H.target.value),placeholder:T("search.placeholder"),style:{width:"100%",padding:"10px 14px",borderRadius:10,border:"1.5px solid #d1d5db",fontSize:"0.95rem",outline:"none",boxSizing:"border-box"}}),jsxRuntimeExports.jsxs("div",{style:{maxHeight:400,overflowY:"auto",display:"flex",flexDirection:"column",gap:4},children:[L&&jsxRuntimeExports.jsx("div",{style:{textAlign:"center",padding:"20px 0",color:"#78909c"},children:T("search.loading")}),!L&&F.length>0&&jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsx("div",{style:{fontSize:"0.75rem",fontWeight:700,color:"#9ca3af",textTransform:"uppercase",letterSpacing:"0.05em",padding:"6px 4px 2px"},children:T("search.groupLessons")}),F.map(H=>jsxRuntimeExports.jsxs("button",{onClick:()=>G(H),style:{display:"flex",alignItems:"center",gap:10,width:"100%",padding:"10px 12px",borderRadius:8,border:"1px solid #eef2f7",background:"#fff",cursor:"pointer",textAlign:"left",transition:"background 0.12s, border-color 0.12s"},onMouseEnter:O=>{O.currentTarget.style.background="#f5f3ff",O.currentTarget.style.borderColor="#d8c7ea"},onMouseLeave:O=>{O.currentTarget.style.background="#fff",O.currentTarget.style.borderColor="#eef2f7"},children:[jsxRuntimeExports.jsx("span",{style:{fontSize:"1.3rem",flexShrink:0},children:H.icon}),jsxRuntimeExports.jsx("span",{style:{flex:1,minWidth:0,fontWeight:600,color:"#374151",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:H.title||T("search.untitled")}),jsxRuntimeExports.jsx("span",{style:{flexShrink:0,fontSize:"0.78rem",color:"#8b7aa8",background:"#f3e8ff",padding:"2px 8px",borderRadius:12},children:H.label})]},`${H.featureId}_${H.id}`))]}),N.length>0&&jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsx("div",{style:{fontSize:"0.75rem",fontWeight:700,color:"#9ca3af",textTransform:"uppercase",letterSpacing:"0.05em",padding:"10px 4px 2px"},children:T("search.groupFeatures")}),N.map(H=>jsxRuntimeExports.jsxs("button",{onClick:()=>B(H),style:{display:"flex",alignItems:"center",gap:10,width:"100%",padding:"10px 12px",borderRadius:8,border:"1px solid #eef2f7",background:"#fff",cursor:"pointer",textAlign:"left",transition:"background 0.12s, border-color 0.12s"},onMouseEnter:O=>{O.currentTarget.style.background="#eff6ff",O.currentTarget.style.borderColor="#bfdbfe"},onMouseLeave:O=>{O.currentTarget.style.background="#fff",O.currentTarget.style.borderColor="#eef2f7"},children:[jsxRuntimeExports.jsx("span",{style:{fontSize:"1.3rem",flexShrink:0},children:H.icon}),jsxRuntimeExports.jsxs("span",{style:{flex:1,minWidth:0},children:[jsxRuntimeExports.jsx("span",{style:{display:"block",fontWeight:600,color:"#374151",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:H.title}),jsxRuntimeExports.jsx("span",{style:{display:"block",fontSize:"0.78rem",color:"#9ca3af",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:H.description})]}),jsxRuntimeExports.jsx("span",{style:{flexShrink:0,fontSize:"0.78rem",color:"#2563eb",background:"#dbeafe",padding:"2px 8px",borderRadius:12},children:T("search.labelFeature")})]},`feat_${H.id}`))]}),!L&&N.length===0&&F.length===0&&jsxRuntimeExports.jsx("div",{style:{textAlign:"center",padding:"24px 0",color:"#9ca3af"},children:T("search.noResults")})]})]})})}const TABS=[{key:"home",path:"/dashboard",icon:"🧰",label:"Công cụ dạy học"},{key:"question-bank",path:"/question-bank",icon:"📚",i18nKey:"nav.questionBank"},{key:"assignments",path:"/assignments",icon:"📤",i18nKey:"nav.assignments"},{key:"community",path:"/community-library",icon:"🏛️",i18nKey:"nav.community"}];function HomeTabsNav({active:o}){var G;const u=useNavigate(),{t:T}=useTranslation("common"),{subscription:S,setProModalOpen:E}=useSubscription(),[C,_]=reactExports.useState(!1),[P,R]=reactExports.useState(!1),I=B=>{o!==B.key&&u(B.path)},L=((G=S==null?void 0:S.proPlan)==null?void 0:G.isPurchased)===!0,j=S==null?void 0:S.proPlanExpiresAt,M=j!=null&&j.toDate?j.toDate():j?new Date(j):null,D=L||!!(M&&M>new Date),F=M&&!isNaN(M.getTime())?Math.ceil((M.getTime()-Date.now())/(1e3*60*60*24)):null;let N;return L?N=T("header.forever"):F!==null?N=T("header.daysPro",{days:F}):N=T("header.proAccount"),jsxRuntimeExports.jsxs("div",{className:"home-tabs-nav",children:[TABS.map(B=>{const H=o===B.key;return jsxRuntimeExports.jsx("div",{style:{position:"relative"},children:jsxRuntimeExports.jsx(motion.button,{className:`home-tab-btn${H?" home-tab-btn--active":""}`,onClick:()=>I(B),whileHover:{scale:H?1:1.05},whileTap:{scale:.96},children:jsxRuntimeExports.jsx("span",{children:B.label??T(B.i18nKey)})})},B.key)}),jsxRuntimeExports.jsxs(motion.button,{className:"home-tab-btn",onClick:()=>R(!0),whileHover:{scale:1.05},whileTap:{scale:.96},title:T("search.title"),"aria-label":T("search.title"),children:[jsxRuntimeExports.jsx("span",{className:"home-tab-icon",children:"🔍"}),jsxRuntimeExports.jsx("span",{children:T("search.tab")})]}),D?jsxRuntimeExports.jsxs(motion.button,{className:"home-tab-btn home-tab-btn--pro-active",onClick:()=>_(!0),whileHover:{scale:1.05},whileTap:{scale:.96},title:N,children:[jsxRuntimeExports.jsx("span",{className:"home-tab-icon",children:"💎"}),jsxRuntimeExports.jsx("span",{children:N})]}):jsxRuntimeExports.jsxs(motion.button,{className:"home-tab-btn home-tab-btn--pro",onClick:()=>E(!0),whileHover:{scale:1.05},whileTap:{scale:.96},title:T("header.upgradePro"),children:[jsxRuntimeExports.jsx("span",{className:"home-tab-icon",children:"⭐"}),jsxRuntimeExports.jsx("span",{children:T("header.upgradePro")})]}),jsxRuntimeExports.jsx(ProjectSearchModal,{open:P,onClose:()=>R(!1)}),jsxRuntimeExports.jsxs(Dialog,{open:C,onClose:()=>_(!1),children:[jsxRuntimeExports.jsx(DialogTitle,{children:N}),jsxRuntimeExports.jsx(DialogContent,{children:F!==null?`Bạn còn ${F} ngày PRO. Nếu thanh toán thêm sẽ được cộng dồn số ngày.`:"Nếu thanh toán thêm sẽ được cộng dồn số ngày."}),jsxRuntimeExports.jsx(DialogActions,{children:jsxRuntimeExports.jsx(Button,{onClick:()=>{_(!1),E(!0)},children:"OK"})})]})]})}const zaloGuide1="/assets/zalo1-Djj0-qal.png",zaloGuide2="/assets/zalo2-IvenB_3V.png",LandingHeader=()=>{const o=useNavigate(),{t:u,i18n:T}=useTranslation("landing"),[S,E]=reactExports.useState(!1),[C,_]=reactExports.useState(null),P=(()=>{const I=navigator.userAgent||"";return!!(/FBAN|FBAV|FB_IAB|FBIOS/i.test(I)||/ZaloApp|zalo/i.test(I)||/wv\)/i.test(I)||typeof window.ReactNativeWebView<"u"||/Instagram|BytedanceWebview|musical_ly|MicroMessenger|Line\//i.test(I))})(),R=I=>{T.changeLanguage(I),_(null)};return jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsx(motion.nav,{className:"landing-nav",initial:{opacity:0,y:-20}
324,animate:{opacity:1,y:0},transition:{duration:.5},children:jsxRuntimeExports.jsxs("div",{className:"nav-container",children:[jsxRuntimeExports.jsx("h1",{className:"nav-logo",onClick:()=>o("/"),style:{cursor:"pointer"},children:u("nav.logo")}),jsxRuntimeExports.jsxs("div",{className:"nav-actions",children:[jsxRuntimeExports.jsx("a",{href:"/ai-tools",className:"nav-aitools-btn",onClick:I=>{I.preventDefault(),o("/ai-tools")},title:u("nav.aiTools"),children:jsxRuntimeExports.jsx("span",{children:u("nav.aiTools")})}),jsxRuntimeExports.jsx("a",{href:"/tien-ich-giao-duc",className:"nav-aitools-btn",onClick:I=>{I.preventDefault(),o("/tien-ich-giao-duc")},title:"Tiện ích GD",children:jsxRuntimeExports.jsx("span",{children:"Tiện ích GD"})}),jsxRuntimeExports.jsx("a",{href:"/mo-phong-bai-day",className:"nav-aitools-btn",onClick:I=>{I.preventDefault(),o("/mo-phong-bai-day")},title:"Mô phỏng bài dạy",children:jsxRuntimeExports.jsx("span",{children:"Mô phỏng bài dạy"})}),jsxRuntimeExports.jsx("a",{href:"/join",className:"nav-join-btn nav-join-btn--desktop",onClick:I=>{I.preventDefault(),o("/join")},children:u("nav.joinBtn")}),jsxRuntimeExports.jsx("button",{onClick:I=>_(I.currentTarget),title:"Thay đổi ngôn ngữ / Change Language",className:"lang-toggle-btn",style:{padding:"6px",cursor:"pointer",background:"transparent",border:"1px solid rgba(255,255,255,0.2)",borderRadius:"6px"},children:jsxRuntimeExports.jsx("img",{src:"/images/languages.png",alt:"Language",style:{width:"24px",height:"24px",objectFit:"cover",borderRadius:"3px",display:"block"}})}),jsxRuntimeExports.jsxs(Menu,{anchorEl:C,open:!!C,onClose:()=>_(null),transformOrigin:{horizontal:"right",vertical:"top"},anchorOrigin:{horizontal:"right",vertical:"bottom"},PaperProps:{elevation:0,sx:{overflow:"visible",filter:"drop-shadow(0px 2px 8px rgba(0,0,0,0.32))",mt:1.5,"&:before":{content:'""',display:"block",position:"absolute",top:0,right:14,width:10,height:10,bgcolor:"background.paper",transform:"translateY(-50%) rotate(45deg)",zIndex:0}}},children:[jsxRuntimeExports.jsxs(MenuItem,{selected:T.language==="vi",onClick:()=>R("vi"),children:[jsxRuntimeExports.jsx("img",{src:viFlag,alt:"Tiếng Việt",style:{width:24,height:24,marginRight:12,borderRadius:3,objectFit:"cover"}}),"Tiếng Việt"]}),jsxRuntimeExports.jsxs(MenuItem,{selected:T.language==="en",onClick:()=>R("en"),children:[jsxRuntimeExports.jsx("img",{src:enFlag,alt:"English",style:{width:24,height:24,marginRight:12,borderRadius:3,objectFit:"cover"}}),"English"]}),jsxRuntimeExports.jsxs(MenuItem,{selected:T.language==="pl",onClick:()=>R("pl"),children:[jsxRuntimeExports.jsx("span",{style:{fontSize:"20px",width:24,height:24,marginRight:12,display:"flex",alignItems:"center",justifyContent:"center"},children:"🇵🇱"}),"Polski"]})]}),jsxRuntimeExports.jsx("a",{href:"/login",className:"nav-login-btn",onClick:I=>{I.preventDefault(),P?E(!0):o("/login")},children:u("nav.loginBtn")})]})]})}),S&&jsxRuntimeExports.jsx("div",{className:"webview-modal-overlay",onClick:()=>E(!1),children:jsxRuntimeExports.jsxs("div",{className:"webview-modal-content",onClick:I=>I.stopPropagation(),children:[jsxRuntimeExports.jsx("h2",{className:"webview-modal-title",children:u("webviewModal.title")}),jsxRuntimeExports.jsx("p",{className:"webview-modal-intro",children:u("webviewModal.intro")}),jsxRuntimeExports.jsxs("div",{className:"webview-modal-steps",children:[jsxRuntimeExports.jsxs("div",{className:"webview-modal-step",children:[jsxRuntimeExports.jsx("p",{className:"step-text",children:u("webviewModal.step1")}),jsxRuntimeExports.jsx("img",{src:zaloGuide1,alt:u("webviewModal.step1"),className:"step-img"})]}),jsxRuntimeExports.jsxs("div",{className:"webview-modal-step",children:[jsxRuntimeExports.jsx("p",{className:"step-text",children:u("webviewModal.step2")}),jsxRuntimeExports.jsx("img",{src:zaloGuide2,alt:u("webviewModal.step2"),className:"step-img"})]})]}),jsxRuntimeExports.jsx("button",{onClick:()=>E(!1),className:"webview-modal-close-btn",children:u("webviewModal.btnClose")})]})})]})},SeoHelmet=({title:o,description:u,keywords:T,canonicalUrl:S,ogType:E="website",ogImage:C,ogTitle:_,ogDescription:P,twitterCard:R="summary_large_image",twitterImage:I,structuredData:L})=>{const j="https://giaoviendoimoi.com",M=S||(typeof window<"u"?window.location.href:j),D=C||`${j}/og-image.jpg`,F=L?Array.isArray(L)?L:[L]:[];return jsxRuntimeExports.jsxs(Helmet,{children:[jsxRuntimeExports.jsx("title",{children:o}),jsxRuntimeExports.jsx("meta",{name:"description",content:u}),T&&jsxRuntimeExports.jsx("meta",{name:"keywords",content:T}),jsxRuntimeExports.jsx("meta",{name:"robots",content:"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1"}),jsxRuntimeExports.jsx("link",{rel:"canonical",href:M}),jsxRuntimeExports.jsx("meta",{property:"og:type",content:E}),jsxRuntimeExports.jsx("meta",{property:"og:url",content:M}),jsxRuntimeExports.jsx("meta",{property:"og:title",content:_||o}),jsxRuntimeExports.jsx("meta",{property:"og:description",content:P||u}),jsxRuntimeExports.jsx("meta",{property:"og:image",content:D}),jsxRuntimeExports.jsx("meta",{property:"og:site_name",content:"Giáo Viên Đổi Mới"}),jsxRuntimeExports.jsx("meta",{property:"og:locale",content:"vi_VN"}),jsxRuntimeExports.jsx("meta",{name:"twitter:card",content:R}),jsxRuntimeExports.jsx("meta",{name:"twitter:title",content:_||o}),jsxRuntimeExports.jsx("meta",{name:"twitter:description",content:P||u}),I&&jsxRuntimeExports.jsx("meta",{name:"twitter:image",content:I}),F.map((N,G)=>jsxRuntimeExports.jsx("script",{type:"application/ld+json",children:JSON.stringify(N)},G))]})},seoConfig={landing:{title:"Giáo Viên Đổi Mới - Công Cụ Dạy Học Hiện Đại, Trò Chơi & AI Cho Giáo Viên",description:"Nền tảng dạy học hiện đại cho giáo viên sáng tạo: 20+ trò chơi dạy học (kéo co kiến thức, quiz online), AI soạn SKKN, biện pháp giáo viên giỏi, video tương tác, lớp học tích cực. Game hóa bài g
324iảng, tích hợp năng lực số.",keywords:"giáo viên đổi mới, giáo viên sáng tạo, giáo viên giỏi, giáo viên hiện đại, thầy giáo Tín, AI soạn SKKN, sáng kiến kinh nghiệm, biện pháp giáo viên giỏi, AI giáo dục, ứng dụng AI trong dạy học, trò chơi dạy học, game dạy học, trò chơi học tập, kéo co kiến thức, lớp học tích cực, dạy học tích cực, game hóa, gamification, quiz online, vòng quay may mắn, flashcard, sơ đồ tư duy, giáo án dạy học, giáo án tích hợp, tích hợp năng lực số, thi giáo viên giỏi, giáo án giáo viên giỏi, beeclass, kahoot tiếng việt, quizizz tiếng việt, công cụ dạy học miễn phí, elearning",ogImage:"/og-landing.jpg"},login:{title:"Đăng Nhập | Giáo Viên Đổi Mới",description:"Đăng nhập tài khoản Giáo Viên Đổi Mới để truy cập 20+ công cụ dạy học tương tác, AI soạn SKKN và trò chơi học tập.",keywords:"đăng nhập, giáo viên đổi mới, giáo viên sáng tạo, công cụ dạy học, AI giáo dục, elearning"},join:{title:"Tham Gia Lớp Học - Nhập Mã Bài Tập | Giáo Viên Đổi Mới",description:"Học sinh nhập mã code để tham gia bài tập, trò chơi học tập trên nền tảng Giáo Viên Đổi Mới. Lớp học tích cực, game hóa bài giảng.",keywords:"tham gia lớp, nhập mã bài tập, trò chơi học tập, game dạy học, lớp học tích cực, giao bài tập online, beeclass, kahoot tiếng việt, quizizz tiếng việt",ogImage:"/og-hoc-sinh.jpg"},privacyPolicy:{title:"Chính Sách Bảo Mật | Giáo Viên Đổi Mới",description:"Chính sách bảo mật dữ liệu cá nhân của người dùng trên nền tảng Giáo Viên Đổi Mới.",keywords:"chính sách bảo mật, bảo vệ dữ liệu, quyền riêng tư, giáo viên đổi mới"},termsOfService:{title:"Điều Khoản Sử Dụng | Giáo Viên Đổi Mới",description:"Điều khoản sử dụng nền tảng Giáo Viên Đổi Mới - quy định về quyền và trách nhiệm của người dùng.",keywords:"điều khoản, điều kiện sử dụng, quy tắc, quyền, giáo viên đổi mới"},about:{title:"Giới Thiệu | Giáo Viên Đổi Mới",description:"Giáo Viên Đổi Mới là nền tảng dạy học tương tác giúp giáo viên sáng tạo nâng cao hiệu quả giảng dạy: AI soạn SKKN, biện pháp giáo viên giỏi, trò chơi dạy học, tự động nhận xét học sinh, tích hợp năng lực số.",keywords:"giới thiệu, giáo viên đổi mới, giáo viên sáng tạo, giáo viên giỏi, nền tảng dạy học, AI giáo dục, ứng dụng AI trong dạy học, AI soạn SKKN, sáng kiến kinh nghiệm, biện pháp giáo viên giỏi, thi giáo viên giỏi, giáo án giáo viên giỏi, nhận xét học sinh, nhận xét học bạ, tích hợp năng lực số, elearning"},shippingPolicy:{title:"Chính Sách Giao Nhận | Giáo Viên Đổi Mới",description:"Chính sách giao nhận và hỗ trợ khách hàng của Giáo Viên Đổi Mới.",keywords:"giao nhận, hỗ trợ, chính sách, giáo viên đổi mới"},pricing:{title:"Bảng Giá | Giáo Viên Đổi Mới",description:"Bảng giá các gói dịch vụ Giáo Viên Đổi Mới: FullGame, công cụ AI soạn SKKN, biện pháp giáo viên giỏi, tạo đề thi. Từ miễn phí đến Premium, có dùng thử.",keywords:"bảng giá, gói dịch vụ, công cụ dạy học, AI soạn SKKN, sáng kiến kinh nghiệm, biện pháp giáo viên giỏi, tạo đề thi, công văn 7991, soạn giáo án, giáo án tích hợp, AI giáo dục, mua công cụ dạy học",ogType:"product"},miniAppsBrowse:{title:"Mô Phỏng Bài Dạy Tương Tác | Giáo Viên Đổi Mới",description:"Kho mô phỏng bài dạy tương tác cho tất cả các khối từ Nhà trẻ đến Lớp 12. ",keywords:"mô phỏng bài dạy, mô phỏng tương tác, bài giảng tương tác, giáo án điện tử, công cụ dạy học, mô phỏng thí nghiệm, giáo viên đổi mới",ogImage:"/og-mo-phong-bai-day.jpg"}},getStructuredData=(o,u)=>{const T="https://giaoviendoimoi.com",S={"@context":"https://schema.org","@type":"Organization",name:"Giáo Viên Đổi Mới",url:T,logo:`${T}
324/logo.png`,description:"Nền tảng dạy học tương tác với 20+ games học tập",telephone:"0363357745",sameAs:["https://www.facebook.com/thaygiaotin90","https://www.youtube.com/channel/UC66UEWfsar0kRJZmTMAg97A","https://www.tiktok.com/@thaygiao.tin"]},E={landing:{"@context":"https://schema.org","@graph":[S,{"@type":"WebApplication",name:"Giáo Viên Đổi Mới",url:T,applicationCategory:"EducationalApplication",offers:{"@type":"Offer",price:"0",priceCurrency:"VND"},aggregateRating:{"@type":"AggregateRating",ratingValue:"4.8",ratingCount:"1200"}}]},about:{"@context":"https://schema.org","@graph":[S,{"@type":"Article",headline:"Giới Thiệu Giáo Viên Đổi Mới",description:"Nền tảng dạy học tương tác giúp giáo viên nâng cao hiệu quả giảng dạy",url:`${T}/gioi-thieu`,author:S}]},pricing:{"@context":"https://schema.org","@graph":[S,{"@type":"WebPage",name:"Bảng Giá",url:`${T}/bang-gia`,description:"Xem bảng giá các gói dịch vụ"}]}};return E[o]||E.landing},getBreadcrumb=o=>{const u="https://giaoviendoimoi.com";return{"@context":"https://schema.org","@type":"BreadcrumbList",itemListElement:o.map((T,S)=>({"@type":"ListItem",position:S+1,name:T.name,item:`${u}${T.path==="/"?"/":T.path}`}))}},combineSchemas=(...o)=>o.filter(Boolean),ICON_PROPS={width:"1.8em",height:"1.8em",viewBox:"0 0 48 48",fill:"none",stroke:"#fff",strokeWidth:4.5,strokeLinecap:"round",strokeLinejoin:"round"};function TugOfWarIcon(){return jsxRuntimeExports.jsxs("svg",{...ICON_PROPS,children:[jsxRuntimeExports.jsx("path",{d:"M16 23h16",stroke:"#a9682f",strokeWidth:2.5}),jsxRuntimeExports.jsx("circle",{cx:"9",cy:"16",r:"3.2",fill:"#fff"}),jsxRuntimeExports.jsx("path",{d:"M9 19.5v9M9 21l7 2M9 21l-3 5M9 28.5l-5 7M9 28.5l4 7"}),jsxRuntimeExports.jsx("circle",{cx:"39",cy:"16",r:"3.2",fill:"#fff"}),jsxRuntimeExports.jsx("path",{d:"M39 19.5v9M39 21l-7 2M39 21l3 5M39 28.5l5 7M39 28.5l-4 7"})]})}function FlipPuzzleIcon(){return jsxRuntimeExports.jsxs("svg",{...ICON_PROPS,children:[jsxRuntimeExports.jsx("rect",{x:"6",y:"10",width:"36",height:"30",rx:"3",fill:"#fff",stroke:"none"}),jsxRuntimeExports.jsx("circle",{cx:"15",cy:"19",r:"3.5",fill:"#fbbf24",stroke:"none"}),jsxRuntimeExports.jsx("path",{d:"M8 35l9-10 6 6 7-9 10 13z",fill:"#60a5fa",stroke:"none"}),jsxRuntimeExports.jsx("rect",{x:"24",y:"10",width:"18",height:"15",rx:"2",fill:"#0009",stroke:"none"}),jsxRuntimeExports.jsx("path",{d:"M24 10v30M6 25h36",strokeWidth:2,strokeOpacity:.6}),jsxRuntimeExports.jsx("g",{transform:"rotate(16 38 8)",children:jsxRuntimeExports.jsx("rect",{x:"29",y:"1.5",width:"18",height:"14",rx:"2",fill:"#60a5fa",stroke:"#fff",strokeWidth:3})})]})}function KnowledgeTrainIcon(){return jsxRuntimeExports.jsxs("svg",{...ICON_PROPS,children:[jsxRuntimeExports.jsx("clipPath",{id:"train-car-1",children:jsxRuntimeExports.jsx("rect",{x:"4",y:"14",width:"16",height:"16",rx:"3"})}),jsxRuntimeExports.jsxs("g",{clipPath:"url(#train-car-1)",children:[jsxRuntimeExports.jsx("rect",{x:"4",y:"14",width:"16",height:"16",fill:"#d1d5db",stroke:"none"}),jsxRuntimeExports.jsx("rect",{x:"4",y:"14",width:"4.8",height:"16",fill:"#ef4444",stroke:"none"})]}),jsxRuntimeExports.jsx("rect",{x:"4",y:"14",width:"16",height:"16",rx:"3",stroke:"#fff",strokeWidth:2.5}),jsxRuntimeExports.jsx("text",{x:"14.4",y:"25",textAnchor:"middle",fontSize:"9",fontWeight:"bold",fill:"#ffe600",stroke:"none",children:"Q"}),jsxRuntimeExports.jsx("circle",{cx:"6.5",cy:"11",r:"1.2",fill:"#000",stroke:"none"}),jsxRuntimeExports.jsx("circle",{cx:"7.5",cy:"7.5",r:"1.6",fill:"#000",stroke:"none"}),jsxRuntimeExports.jsx("circle",{cx:"8.5",cy:"3.5",r:"2.1",fill:"#000",stroke:"none"}),jsxRuntimeExports.jsx("clipPath",{id:"train-car-2",children:jsxRuntimeExports.jsx("rect",{x:"28",y:"14",width:"16",height:"16",rx:"3"})}),jsxRuntimeExports.jsxs("g",{clipPath:"url(#train-car-2)",children:[jsxRuntimeExports.jsx("rect",{x:"28",y:"14",width:"16",height:"16",fill:"#d1d5db",stroke:"none"}),jsxRuntimeExports.jsx("rect",{x:"39.2",y:"14",width:"4.8",height:"16",fill:"#e3d3b8",stroke:"none"})]}),jsxRuntimeExports.jsx("rect",{x:"28",y:"14",width:"16",height:"16",rx:"3",stroke:"#fff",strokeWidth:2.5}),jsxRuntimeExports.jsx("text",{x:"33.6",y:"25",textAnchor:"middle",fontSize:"9",fontWeight:"bold",fill:"#ffe600",stroke:"none",children:"A"}),jsxRuntimeExports.jsx("path",{d:"M20 26.8h8M44 26.8h3",strokeWidth:2.5}),jsxRuntimeExports.jsx("path",{d:"M2 33.5h44",strokeWidth:2}),jsxRuntimeExports.jsx("path",{d:"M6 33.5v3M14 33.5v3M22 33.5v3M30 33.5v3M38 33.5v3M46 33.5v3",strokeWidth:1.5})]})}function QuizGameIcon(){return jsxRuntimeExports.jsxs("svg",{...ICON_PROPS,children:[jsxRuntimeExports.jsx("rect",{x:"4",y:"6",width:"15",height:"10",rx:"2.5",fill:"#fff",stroke:"none"}),jsxRuntimeExports.jsx("rect",{x:"4",y:"19",width:"15",height:"10",rx:"2.5",fill:"#fff",stroke:"none"}),jsxRuntimeExports.jsx("rect",{x:"4",y:"32",width:"15",height:"10",rx:"2.5",fill:"#fff",stroke:"none"}),jsxRuntimeExports.jsx("rect",{x:"29",y:"6",width:"15",height:"10",rx:"2.5",fill:"#fbbf24",stroke:"none"}),jsxRuntimeExports.jsx("rect",{x:"29",y:"32",width:"15",height:"10",rx:"2.5",fill:"#60a5fa",stroke:"none"}),jsxRuntimeExports.jsx("path",{d:"M19 37h10",strokeWidth:1.5,strokeOpacity:.7}),jsxRuntimeExports.jsx("path",{d:"M19 11c4 0 6 8 10 8",strokeWidth:1.5,strokeDasharray:"3 3"}),jsxRuntimeExports.jsx("g",{transform:"rotate(-12 38 19)",children:jsxRuntimeExports.jsx("rect",{x:"30.5",y:"14",width:"15",height:"10",rx:"2.5",fill:"#34d399",stroke:"#fff",strokeWidth:3})})]})}function HeadTiltQuizIcon(){return jsxRuntimeExports.jsxs("svg",{...ICON_PROPS,children:[jsxRuntimeExports.jsx("circle",{cx:"24",cy:"24",r:"18"}),jsxRuntimeExports.jsx("text",{x:"24",y:"30",textAnchor:"middle",fontSize:"20",fill:"#000",stroke:"none",transform:"rotate(-16 24 24)",children:"🙂"})]})}function HandSlashQuizIcon(){return jsxRuntimeExports.jsx("img",{src:"/images/icon-home/icon-hand-slash.webp",alt:"",style:{width:"1.8em",he
324ight:"1.8em",objectFit:"contain"}})}function starPoints(o,u,T){const S=[];for(let E=0;E<5;E++){const C=-Math.PI/2+E*2*Math.PI/5;S.push(`${o+T*Math.cos(C)},${u+T*Math.sin(C)}`);const _=C+Math.PI/5;S.push(`${o+T*.42*Math.cos(_)},${u+T*.42*Math.sin(_)}`)}return S.join(" ")}function StarBagGameIcon(){return jsxRuntimeExports.jsx("svg",{...ICON_PROPS,children:jsxRuntimeExports.jsxs("g",{transform:"translate(0, 3.5)",children:[jsxRuntimeExports.jsx("rect",{x:"3",y:"4",width:"18",height:"13",rx:"2",fill:"#fff",stroke:"none"}),jsxRuntimeExports.jsx("rect",{x:"27",y:"4",width:"18",height:"13",rx:"2",fill:"#fff",stroke:"none"}),jsxRuntimeExports.jsx("polygon",{points:starPoints(14,3,6),fill:"#ffe600",stroke:"none"}),jsxRuntimeExports.jsx("polygon",{points:starPoints(34,3,6),fill:"#ffe600",stroke:"none"}),jsxRuntimeExports.jsx("polygon",{points:starPoints(24,19,5.5),fill:"#ffe600",stroke:"none"}),jsxRuntimeExports.jsx("text",{x:"6",y:"40",textAnchor:"middle",fontSize:"13",fontWeight:"bold",fill:"#ff3b30",stroke:"none",children:"A"}),jsxRuntimeExports.jsx("text",{x:"18",y:"40",textAnchor:"middle",fontSize:"13",fontWeight:"bold",fill:"#fff",stroke:"none",children:"B"}),jsxRuntimeExports.jsx("text",{x:"30",y:"40",textAnchor:"middle",fontSize:"13",fontWeight:"bold",fill:"#fff",stroke:"none",children:"A"}),jsxRuntimeExports.jsx("text",{x:"42",y:"40",textAnchor:"middle",fontSize:"13",fontWeight:"bold",fill:"#ff3b30",stroke:"none",children:"B"})]})})}function MinesweeperIcon(){return jsxRuntimeExports.jsxs("svg",{...ICON_PROPS,children:[jsxRuntimeExports.jsx("circle",{cx:"24",cy:"29",r:"2.6",fill:"#fff"}),jsxRuntimeExports.jsx("path",{d:"M24 32v6M24 35l-4 3M24 35l4 3M24 38l-3 4M24 38l3 4",strokeWidth:3}),jsxRuntimeExports.jsx("circle",{cx:"12",cy:"15",r:"6.5",strokeWidth:2}),jsxRuntimeExports.jsx("text",{x:"12",y:"18.5",textAnchor:"middle",fontSize:"9",fontWeight:"bold",fill:"#fff",stroke:"none",children:"A"}),jsxRuntimeExports.jsx("circle",{cx:"24",cy:"8",r:"6.5",strokeWidth:2}),jsxRuntimeExports.jsx("text",{x:"24",y:"11.5",textAnchor:"middle",fontSize:"9",fontWeight:"bold",fill:"#fff",stroke:"none",children:"B"}),jsxRuntimeExports.jsx("text",{x:"36",y:"20",textAnchor:"middle",fontSize:"14",fill:"#000",stroke:"none",children:"💥"})]})}function PoseQuizIcon(){const o=[{x:8,emoji:"🙆",letter:"A"},{x:24,emoji:"🙋",letter:"B"},{x:40,emoji:"🏃",letter:"C"}];return jsxRuntimeExports.jsx("svg",{...ICON_PROPS,children:o.map(({x:u,emoji:T,letter:S})=>jsxRuntimeExports.jsxs("g",{children:[jsxRuntimeExports.jsx("text",{x:u,y:"18",textAnchor:"middle",fontSize:"13",fill:"#000",stroke:"none",children:T}),jsxRuntimeExports.jsx("rect",{x:u-6.5,y:"26",width:"13",height:"13",rx:"2",stroke:"#2563eb",strokeWidth:2}),jsxRuntimeExports.jsx("text",{x:u,y:"35.5",textAnchor:"middle",fontSize:"9",fontWeight:"bold",fill:"#2563eb",stroke:"none",children:S})]},S))})}function WheelQuizIcon(){const o=[{color:"#f87171",from:-90,to:-18},{color:"#fbbf24",from:-18,to:54},{color:"#34d399",from:54,to:126},{color:"#60a5fa",from:126,to:198},{color:"#c084fc",from:198,to:270}],u=16,T=16,S=14,E=C=>{const _=C*Math.PI/180;return[u+S*Math.cos(_),T+S*Math.sin(_)]};return jsxRuntimeExports.jsxs("svg",{...ICON_PROPS,children:[jsxRuntimeExports.jsx("path",{d:"M0 36q6-3 12 0t12 0 12 0 12 0v12h-48z",fill:"#1d8fd1",stroke:"none"}),jsxRuntimeExports.jsx("path",{d:"M2 38.5q5-2.5 10 0t10 0 10 0 10 0",stroke:"#bfe6ff",strokeWidth:.8,strokeOpacity:.8}),jsxRuntimeExports.jsx("path",{d:"M2 43.5q5-2.5 10 0t10 0 10 0 10 0",stroke:"#bfe6ff",strokeWidth:.8,strokeOpacity:.6}),o.map(({color:C,from:_,to:P})=>{const[R,I]=E(_),[L,j]=E(P);return jsxRuntimeExports.jsx("path",{d:`M${u} ${T}L${R} ${I}A${S} ${S} 0 0 1 ${L} ${j}z`,fill:C,stroke:"none"},C)}),jsxRuntimeExports.jsx("circle",{cx:u,cy:T,r:S,fill:"none",strokeWidth:1.6}),jsxRuntimeExports.jsx("circle",{cx:u,cy:T,r:"3",fill:"#fff",stroke:"none"}),jsxRuntimeExports.jsx("path",{d:`M${u} ${T-S+6}l-3-5h6z`,fill:"#fff",stroke:"none"}),jsxRuntimeExports.jsx("image",{href:"/images/duck.svg",x:"23",y:"20",width:"24",height:"19",preserveAspectRatio:"xMidYMid meet"})]})}function FaceRandomIcon(){return jsxRuntimeExports.jsxs("svg",{...ICON_PROPS,children:[jsxRuntimeExports.jsx("circle",{cx:"10",cy:"20",r:"7",fill:"#fff",stroke:"none"}),jsxRuntimeExports.jsx("path",{d:"M3.5 19a6.5 6.5 0 0 1 13 0c-2-1.5-4.3-2.2-6.5-2.2s-4.5 0.7-6.5 2.2z",fill:"#4b3621",stroke:"none"}),jsxRuntimeExports.jsx("text",{x:"10",y:"23.5",textAnchor:"middle",fontSize:"9",fontWeight:"bold",fill:"#667eea",stroke:"none",children:"?"}),jsxRuntimeExports.jsx("circle",{cx:"24",cy:"15",r:"7",fill:"#fff",stroke:"none"}),jsxRuntimeExports.jsx("path",{d:"M17.5 14a6.5 6.5 0 0 1 13 0c-2-1.5-4.3-2.2-6.5-2.2s-4.5 0.7-6.5 2.2z",fill:"#4b3621",stroke:"none"}),jsxRuntimeExports.jsx("text",{x:"24",y:"18.5",textAnchor:"middle",fontSize:"9",fontWeight:"bold",fill:"#667eea",stroke:"none",children:"?"}),jsxRuntimeExports.jsx("circle",{cx:"38",cy:"20",r:"7",fill:"#fff",stroke:"none"}),jsxRuntimeExports.jsx("path",{d:"M31.5 19a6.5 6.5 0 0 1 13 0c-2-1.5-4.3-2.2-6.5-2.2s-4.5 0.7-6.5 2.2z",fill:"#4b3621",stroke:"none"}),jsxRuntimeExports.jsx("text",{x:"38",y:"23.5",textAnchor:"middle",fontSize:"9",fontWeight:"bold",fill:"#667eea",stroke:"none",children:"?"}),jsxRuntimeExports.jsx("text",{x:"24",y:"36",textAnchor:"middle",fontSize:"26",fill:"#000",stroke:"none",children:"📷"})]})}function PacedQuizIcon(){const o=[{x:8.5,y:13,letter:"A",borderColor:"#fff"},{x:39.5,y:13,letter:"B",borderColor:"#22c55e"},{x:8.5,y:39,letter:"C",borderColor:"#fff"},{x:39.5,y:39,letter:"D",borderColor:"#fff"}];return jsxRuntimeExports.jsxs("svg",{...ICON_PROPS,children:[o.map(({x:u,y:T,letter:S,borderColor:E})=>jsxRuntimeExports.jsxs("g",{children:[jsxRuntimeExports.jsx("rect",{x:u-6.5,y:T-6.5,width:"13",height:"13",rx:"2",stroke:E,strokeWidth:2}),jsxRuntimeExports.jsx("text",{x:u,y:T+3.7,textAnchor:"middle",fontSize:"11",fontWeight:"bold",fill:"#fff",stroke:"none",children:S})]},S)),jsxRuntimeExports.jsx("text",{x:"24",y:"32",textAnchor:"middle",fontSize:"22",fill:"#000",stroke:"none",children:"⏱️"})]})}function CrosswordPuzzleIcon(){const o=new Set(["0-2","1-1","1-2","1-3","2-2","2-3","3-3","3-4"]);return jsxRuntimeExports.jsxs("svg",{...ICON_PROPS,children:[jsxRuntimeExports.jsx("g",{children:[0,1,2,3].map(u=>[0,1,2,3,4].map(T=>{const S=4+T*8,E=6+u*8,C=T===2,_=o.has(`${u}-${T}`),P=C?"#ef4444":_?"#60a5fa":"#fff";return jsxRuntimeExports.jsx("rect",{x:S,y:E,width:"7.4",height:"7.4",fill:P,stroke:"none"},`${u}-${T}`)}))}),jsxRuntimeExports.jsx("path",{d:"M4 6h36.6M4 14h36.6M4 22h36.6M4 30h36.6M4 38h36.6M4 6v32M12 6v32M20 6v32M28 6v32M36 6v32M40.6 6v32",strokeWidth:1,strokeOpacity:.5})]})}function FlashcardIcon(){return jsxRuntimeExports.jsxs("svg",{...ICON_PROPS,children:[jsxRuntimeExports.jsx("clipPath",{id:"flashcard-deck",children:jsxRuntimeExports.jsx("rect",{x:"13",y:"7",width:"20",height:"28",rx:"3"})}),jsxRuntimeExports.jsxs("g",{clipPath:"url(#flashcard-deck)",children:[jsxRuntimeExports.jsx("rect",{x:"13",y:"7",width:"20",height:"28",fill:"#7c4a2d",stroke:"none"}),jsxRuntimeExports.jsx("path",{d:"M13 11h20M13 15.5h20M13 20h20M13 24.5h20M13 29h20M17.5 7v28M22 7v28M26.5 7v28",stroke:"#a9682f",strokeWidth:1.4,strokeOpacity:.9})]}),jsxRuntimeExports.jsx("rect",{x:"13",y:"7",width:"20",height:"28",rx:"3",stroke:"#fff",strokeWidth:2.5}),jsxRuntimeExports.jsx("rect",{x:"9",y:"11",width:"20",height:"28",rx:"3",fill:"#7c4a2d",stroke:"#fff",strokeWidth:2.5}),jsxRuntimeExports.jsx("rect",{x:"5",y:"15",width:"20",height:"28",rx:"3",fill:"#fff",stroke:"#fff",strokeWidth:2.5}),jsxRuntimeExports.jsx("text",{x:"15",y:"34",textAnchor:"middle",fontSize:"17",fontWeight:"bold",fill:"#1976d2",stroke:"none",children:"A"})]})}function MindMapIcon(){const o=[{path:"M16 18c-4-3-9-4-13-3",cx:4,cy:14,color:"#fbbf24"},{path:"M18 14c-2-5-6-8-10-9",cx:8,cy:4,color:"#f87171"},{path:"M30 14c2-5 6-8 10-9",cx:40,cy:4,color:"#60a5fa"}
324,{path:"M32 18c4-3 9-4 13-3",cx:44,cy:14,color:"#34d399"},{path:"M18 27c-3 4-8 6-12 6",cx:5,cy:35,color:"#38bdf8"},{path:"M30 27c3 4 8 6 12 6",cx:43,cy:35,color:"#fb923c"},{path:"M24 30v9",cx:24,cy:42,color:"#c084fc"}];return jsxRuntimeExports.jsxs("svg",{...ICON_PROPS,children:[o.map(({path:u,cx:T,cy:S,color:E})=>jsxRuntimeExports.jsxs("g",{children:[jsxRuntimeExports.jsx("path",{d:u,stroke:E,strokeWidth:1.5}),jsxRuntimeExports.jsx("circle",{cx:T,cy:S,r:"3.6",fill:E,stroke:"none"})]},T+"-"+S)),jsxRuntimeExports.jsx("ellipse",{cx:"24",cy:"22",rx:"10",ry:"7",fill:"#fff",stroke:"none"})]})}function PanoramaMuseumIcon(){return jsxRuntimeExports.jsxs("svg",{...ICON_PROPS,children:[jsxRuntimeExports.jsx("path",{d:"M2 4h44l-14 8h-16z",fill:"#fff",fillOpacity:.55,stroke:"none"}),jsxRuntimeExports.jsx("path",{d:"M2 44h44l-14-16h-16z",fill:"#fff",fillOpacity:.25,stroke:"none"}),jsxRuntimeExports.jsx("path",{d:"M2 4v40l14-16v-16z",fill:"#fff",fillOpacity:.45,stroke:"none"}),jsxRuntimeExports.jsx("path",{d:"M46 4v40l-14-16v-16z",fill:"#fff",fillOpacity:.65,stroke:"none"}),jsxRuntimeExports.jsx("rect",{x:"16",y:"12",width:"16",height:"16",fill:"#fff",fillOpacity:.8,stroke:"none"}),jsxRuntimeExports.jsx("path",{d:"M5 12.5l7 2v11l-7 2.5z",fill:"#60a5fa",stroke:"#fff",strokeWidth:1.2}),jsxRuntimeExports.jsx("path",{d:"M43 12.5l-7 2v11l7 2.5z",fill:"#fbbf24",stroke:"#fff",strokeWidth:1.2}),jsxRuntimeExports.jsx("rect",{x:"20",y:"16",width:"8",height:"8",rx:"0.6",fill:"#f87171",stroke:"#fff",strokeWidth:1.2}),jsxRuntimeExports.jsx("path",{d:"M2 4l14 8M46 4l-14 8M2 44l14-8M46 44l-14-8M16 12h16v16h-16z",strokeWidth:1.3,strokeOpacity:.7}),jsxRuntimeExports.jsx("text",{x:"24",y:"40",textAnchor:"middle",fontSize:"6.5",fontWeight:"bold",fill:"#fff",stroke:"none",children:"3D"})]})}function InteractiveVideoIcon(){return jsxRuntimeExports.jsxs("svg",{...ICON_PROPS,children:[jsxRuntimeExports.jsx("rect",{x:"3",y:"7",width:"38",height:"24",rx:"3",fill:"#fff",fillOpacity:.9,stroke:"none"}),jsxRuntimeExports.jsx("path",{d:"M18.5 13.5v11l10-5.5z",fill:"#667eea",stroke:"none"}),jsxRuntimeExports.jsx("rect",{x:"20",y:"22",width:"25",height:"20",rx:"3",fill:"#f87171",stroke:"#fff",strokeWidth:3}),jsxRuntimeExports.jsx("rect",{x:"23",y:"32",width:"8.5",height:"7",rx:"1.5",fill:"#fff",stroke:"none"}),jsxRuntimeExports.jsx("rect",{x:"33.5",y:"32",width:"8.5",height:"7",rx:"1.5",fill:"#fff",stroke:"none"}),jsxRuntimeExports.jsx("text",{x:"27.3",y:"37.7",textAnchor:"middle",fontSize:"6.5",fontWeight:"bold",fill:"#f87171",stroke:"none",children:"A"}),jsxRuntimeExports.jsx("text",{x:"37.8",y:"37.7",textAnchor:"middle",fontSize:"6.5",fontWeight:"bold",fill:"#f87171",stroke:"none",children:"B"}),jsxRuntimeExports.jsx("text",{x:"32.5",y:"28.5",textAnchor:"middle",fontSize:"7",fontWeight:"bold",fill:"#fff",stroke:"none",children:"?"})]})}function InteractiveImageIcon(){return jsxRuntimeExports.jsxs("svg",{...ICON_PROPS,children:[jsxRuntimeExports.jsx("rect",{x:"4",y:"8",width:"40",height:"30",rx:"3",fill:"#fff",stroke:"none"}),jsxRuntimeExports.jsx("circle",{cx:"14",cy:"17",r:"3.5",fill:"#fbbf24",stroke:"none"}),jsxRuntimeExports.jsx("path",{d:"M6 33l9-10 6 6 8-10 12 14z",fill:"#60a5fa",stroke:"none"}),jsxRuntimeExports.jsx("circle",{cx:"14",cy:"17",r:"3",fill:"#667eea",stroke:"#fff",strokeWidth:2}),jsxRuntimeExports.jsx("circle",{cx:"33",cy:"28",r:"3",fill:"#667eea",stroke:"#fff",strokeWidth:2}),jsxRuntimeExports.jsx("circle",{cx:"24",cy:"24",r:"5.5",fill:"none",stroke:"#f87171",strokeWidth:1.5,strokeOpacity:.6}),jsxRuntimeExports.jsx("circle",{cx:"24",cy:"24",r:"3",fill:"#f87171",stroke:"#fff",strokeWidth:2}),jsxRuntimeExports.jsx("rect",{x:"18",y:"4",width:"12",height:"7",rx:"2",fill:"#f87171",stroke:"#fff",strokeWidth:1.5}),jsxRuntimeExports.jsx("text",{x:"24",y:"9.7",textAnchor:"middle",fontSize:"6",fontWeight:"bold",fill:"#fff",stroke:"none",children:"?"}),jsxRuntimeExports.jsx("path",{d:"M22 11l2 3 2-3z",fill:"#f87171",stroke:"none"})]})}function FlyingWordsIcon(){return jsxRuntimeExports.jsxs("svg",{...ICON_PROPS,children:[jsxRuntimeExports.jsx("path",{d:"M9 13l3 3",strokeWidth:2.5,strokeOpacity:.45}),jsxRuntimeExports.jsx("rect",{x:"3",y:"5",width:"13",height:"9",rx:"2.5",fill:"#fff",stroke:"none"}),jsxRuntimeExports.jsx("text",{x:"9.5",y:"11.8",textAnchor:"middle",fontSize:"7",fontWeight:"bold",fill:"#667eea",stroke:"none",children:"AB"}),jsxRuntimeExports.jsx("path",{d:"M39 33l-3 -3",strokeWidth:2.5,strokeOpacity:.45}),jsxRuntimeExports.jsx("rect",{x:"32",y:"34",width:"13",height:"9",rx:"2.5",fill:"#fff",stroke:"none"}),jsxRuntimeExports.jsx("text",{x:"38.5",y:"40.8",textAnchor:"middle",fontSize:"7",fontWeight:"bold",fill:"#667eea",stroke:"none",children:"CD"}),jsxRuntimeExports.jsx("rect",{x:"17",y:"19",width:"15",height:"10",rx:"2.5",fill:"#fbbf24",stroke:"#fff",strokeWidth:2.5}),jsxRuntimeExports.jsx("text",{x:"24.5",y:"26.3",textAnchor:"middle",fontSize:"7.5",fontWeight:"bold",fill:"#fff",stroke:"none",children:"GO"}),jsxRuntimeExports.jsx("path",{d:"M9 41c0-4 2-7 5-7s4 2 4 5",strokeWidth:3}),jsxRuntimeExports.jsx("circle",{cx:"13",cy:"33",r:"1.6",fill:"#fff"})]})}function ScavengerHuntIcon(){return jsxRuntimeExports.jsxs("span",{style:{position:"relative",display:"inline-block",lineHeight:1},children:["💎",jsxRuntimeExports.jsx("span",{style:{position:"absolute",top:"-0.15em",left:"-0.15em",fontSize:"0.45em"},children:"✨"}),jsxRuntimeExports.jsx("span",{style:{position:"absolute",top:"-0.1em",right:"-0.2em",fontSize:"0.35em"},children:"✨"}),jsxRuntimeExports.jsx("span",{style:{position:"absolute",bottom:"-0.05em",right:"-0.05em",fontSize:"0.4em"},children:"✨"})]})}const MODULE_ICON_MAP={"tug-of-war-game":jsxRuntimeExports.jsx(TugOfWarIcon,{}),"flip-puzzle-game":jsxRuntimeExports.jsx(FlipPuzzleIcon,{}),"knowledge-train-game":jsxRuntimeExports.jsx(KnowledgeTrainIcon,{}),"quiz-game":jsxRuntimeExports.jsx(QuizGameIcon,{}),"head-tilt-quiz":jsxRuntimeExports.jsx(HeadTiltQuizIcon,{}),"hand-slash-quiz":jsxRuntimeExports.jsx(HandSlashQuizIcon,{}),"star-bag-game":jsxRuntimeExports.jsx(StarBagGameIcon,{}),minesweeper:jsxRuntimeExports.jsx(MinesweeperIcon,{}),"pose-quiz":jsxRuntimeExports.jsx(PoseQuizIcon,{}),"wheel-quiz":jsxRuntimeExports.jsx(WheelQuizIcon,{}),"face-random":jsxRuntimeExports.jsx(FaceRandomIcon,{}),"paced-quiz":jsxRuntimeExports.jsx(PacedQuizIcon,{}),"crossword-puzzle":jsxRuntimeExports.jsx(CrosswordPuzzleIcon,{}),"flying-words-game":jsxRuntimeExports.jsx(FlyingWordsIcon,{}),flashcard:jsxRuntimeExports.jsx(FlashcardIcon,{}),"mind-map":jsxRuntimeExports.jsx(MindMapIcon,{}),"panorama-museum":jsxRuntimeExports.jsx(PanoramaMuseumIcon,{}),"interactive-video":jsxRuntimeExports.jsx(InteractiveVideoIcon,{}),"interactive-image":jsxRuntimeExports.jsx(InteractiveImageIcon,{}),"scavenger-hunt":jsxRuntimeExports.jsx(ScavengerHuntIcon,{})};function splitCombinedTitle(o){const u=o.split(/\s+[-/]\s+/);return u.length===2?u:[o]}function generateDefaultLessonTitle(){const o=new Date,u=E=>String(E).padStart(2,"0"),T=`${u(o.getMonth()+1)}${u(o.getDate())}`,S=`${u(o.getHours())}${u(o.getMinutes())}`;return`Bài học ${T}-${S}`}const QrScanButton=reactExports.lazy(()=>__vitePreload(()=>import("./QrScanButton-B3H0Mbxd.js"),__vite__mapDeps([29,3,2,1,4,5]))),LandingPage=()=>{const o=useNavigate(),{currentUser:u}=useAuth(),{t:T}=useTranslation("landing"),{t:S}=useTranslation("home"),[E,C]=reactExports.useState(!1),_="earn_sticker_dismissed_at",[P,R]=reactExports.useState(()=>{const B=localStorage.getItem(_);return B?Date.now()-Number(B)>7*24*60*60*1e3:!0}),[I,L]=reactExports.useState(!1),j="hot_feature_dismissed_at",[M,D]=reactExports.useState(null);reactExports.useEffect(()=>{getDoc(doc(db,"appConfig","hotFeature")).then(B=>
324{if(B.exists()){const H=B.data();if(H.name&&H.url){const O=localStorage.getItem(j);O&&Date.now()-Number(O)<24*60*60*1e3||D({name:H.name,url:H.url})}}})},[]);const F={"knowledge-train-game":{title:T("features.tools.knowledgeTrainGame.title",{defaultValue:"Đoàn tàu tri thức"}),description:T("features.tools.knowledgeTrainGame.description",{defaultValue:"Kéo thả xếp các toa thành đoàn tàu đúng thứ tự — nối đáp án câu trước với câu hỏi tiếp theo."})},"paper-mode":{description:T("paperModeBeta"),icon:jsxRuntimeExports.jsx("img",{src:"/images/qr.png",style:{width:"2rem",height:"2rem",objectFit:"contain",filter:"drop-shadow(0 0 2px rgba(255,255,255,0.3))"},alt:"Quét mã QR chấm điểm bài giấy - Paper Mode"})}},N=MODULE_CATALOG.map(B=>{const H=F[B.id],O=B.landingUsesHomeNamespace?S:T,V=B.landingUsesHomeNamespace?`modules.${B.landingI18nKey}`:`features.tools.${B.landingI18nKey}`;return{...B,title:(H==null?void 0:H.title)??O(`${V}.title`),description:(H==null?void 0:H.description)??O(`${V}.description`),icon:(H==null?void 0:H.icon)??B.icon}}),G=B=>{o(u?B.path:"/login")};return jsxRuntimeExports.jsxs("div",{className:"landing-page",children:[jsxRuntimeExports.jsx(SeoHelmet,{title:seoConfig.landing.title,description:seoConfig.landing.description,keywords:seoConfig.landing.keywords,canonicalUrl:"https://giaoviendoimoi.com/",ogImage:seoConfig.landing.ogImage,structuredData:getStructuredData("landing")}),jsxRuntimeExports.jsx(LandingHeader,{}),jsxRuntimeExports.jsx(motion.section,{className:"landing-hero",initial:{opacity:0}
324,animate:{opacity:1},transition:{duration:.8},children:jsxRuntimeExports.jsxs("div",{className:"hero-content",children:[jsxRuntimeExports.jsx(motion.h1,{className:"hero-title",initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{delay:.1,duration:.5},children:T("hero.title")}),jsxRuntimeExports.jsx(motion.p,{className:"hero-subtitle",initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{delay:.2,duration:.5},children:T("hero.subtitle")}),jsxRuntimeExports.jsx(motion.p,{className:"hero-description",initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{delay:.3,duration:.5},children:T("hero.description")}),jsxRuntimeExports.jsxs("div",{className:"hero-cta-group",children:[jsxRuntimeExports.jsx(motion.a,{href:"/login",className:"hero-cta-btn",initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{delay:.4,duration:.5},whileHover:{scale:1.05},whileTap:{scale:.95},onClick:B=>{B.preventDefault(),o("/login")},children:T("hero.loginCta")}),jsxRuntimeExports.jsx(motion.a,{href:"/join",className:"hero-join-btn",initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{delay:.5,duration:.5},whileHover:{scale:1.05},whileTap:{scale:.95},onClick:B=>{B.preventDefault(),o("/join")},children:T("hero.joinCta")}),jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:null,children:jsxRuntimeExports.jsx(QrScanButton,{label:T("hero.qrScanCta",{defaultValue:"Quét mã QR"})})})]})]})}),jsxRuntimeExports.jsx(motion.section,{className:"landing-features",initial:{opacity:0}
324,whileInView:{opacity:1},transition:{duration:.8},viewport:{once:!0},children:jsxRuntimeExports.jsxs("div",{className:"features-container",children:[jsxRuntimeExports.jsx(motion.h2,{className:"features-title",initial:{opacity:0,y:20},whileInView:{opacity:1,y:0},transition:{duration:.6},viewport:{once:!0},children:T("features.sectionTitle")}),jsxRuntimeExports.jsx("p",{className:"features-subtitle",children:T("features.sectionSubtitle")}),jsxRuntimeExports.jsx("div",{className:"features-grid",children:N.map((B,H)=>jsxRuntimeExports.jsxs(motion.a,{className:"feature-card",href:B.available===!1?void 0:B.path,onClick:O=>{O.preventDefault(),B.available!==!1&&G(B)},initial:{opacity:0,y:20},whileInView:{opacity:1,y:0},transition:{delay:Math.min(H*.03,.3),duration:.4},viewport:{once:!0},whileHover:B.available===!1?{}:{y:-5,scale:1.02},style:{cursor:B.available===!1?"not-allowed":"pointer",position:"relative",opacity:B.available===!1?.7:1,textDecoration:"none",color:"inherit"},children:[B.isBeta&&jsxRuntimeExports.jsx("span",{style:{position:"absolute",bottom:8,left:8,background:"rgba(0,0,0,0.65)",color:"#ffd700",fontSize:"0.6rem",fontWeight:700,padding:"2px 8px",borderRadius:6,letterSpacing:"0.03em",zIndex:2,backdropFilter:"blur(4px)"},children:T("betaBadge")}),jsxRuntimeExports.jsx("h3",{className:"feature-title",children:splitCombinedTitle(B.title).map((O,V)=>jsxRuntimeExports.jsx("span",{children:O},V))}),jsxRuntimeExports.jsxs("div",{className:"feature-card-body",children:[jsxRuntimeExports.jsxs("div",{className:"feature-card-left",children:[jsxRuntimeExports.jsx("div",{className:"feature-icon-wrapper",style:{background:B.color},children:jsxRuntimeExports.jsx("span",{className:"feature-icon",style:B.iconStyle,children:MODULE_ICON_MAP[B.id]??B.icon})}),B.available!==!1&&jsxRuntimeExports.jsx(motion.span,{className:"feature-start-btn",whileHover:{scale:1.05},whileTap:{scale:.95},children:S("startBtn")})]}),jsxRuntimeExports.jsx("div",{className:"feature-content",children:jsxRuntimeExports.jsx("p",{className:"feature-description",children:B.description})})]})]},B.id))})]})}),jsxRuntimeExports.jsx("footer",{className:"landing-footer",children:jsxRuntimeExports.jsxs("div",{className:"footer-content",children:[jsxRuntimeExports.jsx("div",{style:{marginBottom:"28px",display:"flex",flexDirection:"column",gap:"10px"},children:jsxRuntimeExports.jsx(ExternalToolsSection,{containerClassName:"landing-tools",showTitle:!0,collapsible:!0})}),jsxRuntimeExports.jsxs("div",{className:"footer-links-grid footer-links-grid--2col",style:{marginBottom:"20px",textAlign:"left"},children:[jsxRuntimeExports.jsxs("div",{children:[jsxRuntimeExports.jsx("p",{style:{margin:"0 0 8px",fontSize:"0.72rem",fontWeight:700,textTransform:"uppercase",letterSpacing:"0.08em",color:"rgba(255,255,255,0.6)"},children:T("footer.connectLabel")}),jsxRuntimeExports.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"6px"},children:[[{href:"https://www.facebook.com/thaygiaotin90",label:T("footer.facebook")},{href:"https://www.tiktok.com/@thaygiao.tin",label:T("footer.tiktok")},{href:"https://www.youtube.com/channel/UC66UEWfsar0kRJZmTMAg97A",label:T("footer.youtube")},{href:"https://zalo.me/0363357745",label:T("footer.zalo")},{href:"https://zalo.me/g/vpilgszizuofkrefetq3",label:T("footer.zaloCommunity")}].map(B=>jsxRuntimeExports.jsx("a",{href:B.href,target:"_blank",rel:"noopener noreferrer",style:{color:"rgba(255,255,255,0.85)",fontSize:"0.85rem",textDecoration:"none"},onMouseEnter:H=>H.currentTarget.style.color="#fff",onMouseLeave:H=>H.currentTarget.style.color="rgba(255,255,255,0.85)",children:B.label},B.href)),jsxRuntimeExports.jsx("button",{type:"button",onClick:()=>C(!0),style:{color:"rgba(255,255,255,0.85)",fontSize:"0.85rem",textDecoration:"none",background:"none",border:"none",padding:0,cursor:"pointer",textAlign:"left",font:"inherit"},onMouseEnter:B=>B.currentTarget.style.color="#fff",onMouseLeave:B=>B.currentTarget.style.color="rgba(255,255,255,0.85)",children:T("footer.email")})]})]}),jsxRuntimeExports.jsxs("div",{children:[jsxRuntimeExports.jsx("p",{style:{margin:"0 0 8px",fontSize:"0.72rem",fontWeight:700,textTransform:"uppercase",letterSpacing:"0.08em",color:"rgba(255,255,255,0.6)"},children:T("footer.legalLabel")}),jsxRuntimeExports.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"6px"},children:[jsxRuntimeExports.jsx("a",{href:"/blog/",style:{color:"rgba(255,255,255,0.85)",fontSize:"0.85rem",textDecoration:"none"},onMouseEnter:B=>B.currentTarget.style.color="#fff",onMouseLeave:B=>B.currentTarget.style.color="rgba(255,255,255,0.85)",children:"Blog"}),[{to:"/bang-gia",label:T("footer.policy1")},{to:"/chinh-sach-bao-mat",label:T("footer.policy2")},{to:"/dieu-khoan-su-dung",label:T("footer.policy3")},{to:"/chinh-sach-giao-nhan",label:T("footer.policy4")},{to:"/gioi-thieu",label:T("footer.policy5")}].map(B=>jsxRuntimeExports.jsx(Link$1,{to:B.to,style:{color:"rgba(255,255,255,0.85)",fontSize:"0.85rem",textDecoration:"none"},onMouseEnter:H=>H.currentTarget.style.color="#fff",onMouseLeave:H=>H.currentTarget.style.color="rgba(255,255,255,0.85)",children:B.label},B.to))]})]}),jsxRuntimeExports.jsx("div",{style:{display:"flex",flexDirection:"column",alignItems:"flex-start",justifyContent:"flex-start",ga
324p:"10px"},children:jsxRuntimeExports.jsxs(motion.button,{onClick:()=>window.open("https://www.youtube.com/playlist?list=PLxgUnJXYXs7Lr3c_2gr4EmIMcRcGRFq1o","_blank","noopener,noreferrer"),style:{padding:"7px 14px",fontSize:"0.83rem",background:"rgba(255,255,255,0.08)",border:"1px solid rgba(255,255,255,0.18)",borderRadius:"6px",color:"rgba(255,255,255,0.85)",cursor:"pointer",fontWeight:500,display:"flex",alignItems:"center",gap:"6px",width:"fit-content"},title:T("footer.guideTooltip"),whileHover:{scale:1.03},whileTap:{scale:.97},children:[jsxRuntimeExports.jsx("span",{children:"❓"}),jsxRuntimeExports.jsx("span",{children:T("footer.guide")})]})})]}),jsxRuntimeExports.jsxs("div",{style:{borderTop:"1px solid rgba(255,255,255,0.1)",paddingTop:"14px",display:"flex",alignItems:"center",justifyContent:"space-between",flexWrap:"wrap",gap:"8px"},children:[jsxRuntimeExports.jsx("p",{style:{margin:0,fontSize:"0.82rem",color:"rgba(255,255,255,0.7)"},children:T("footer.copyright")}),jsxRuntimeExports.jsx("p",{style:{margin:0,fontSize:"0.75rem",color:"rgba(255,255,255,0.4)"},children:(()=>{const B="2026-09-18T01:16:01.286Z",H=new Date(B);if(isNaN(H.getTime()))return null;const O=V=>String(V).padStart(2,"0");return T("footer.buildTime",{time:`${O(H.getHours())}:${O(H.getMinutes())}`,date:`${O(H.getDate())}/${O(H.getMonth()+1)}/${H.getFullYear()}`})})()})]})]})}),E&&jsxRuntimeExports.jsx("div",{style:{position:"fixed",inset:0,zIndex:9999,display:"flex",alignItems:"center",justifyContent:"center",background:"rgba(0,0,0,0.5)"},onClick:()=>C(!1),children:jsxRuntimeExports.jsxs("div",{style:{background:"#fff",borderRadius:12,padding:"24px 32px",maxWidth:400,textAlign:"center",boxShadow:"0 8px 30px rgba(0,0,0,0.2)"},onClick:B=>B.stopPropagation(),children:[jsxRuntimeExports.jsx("p",{style:{margin:"0 0 8px",fontWeight:600,fontSize:"1rem"},children:T("emailModal.title")}),jsxRuntimeExports.jsx("p",{style:{margin:0,fontSize:"1.1rem",color:"#1976d2",wordBreak:"break-all"},children:"[email protected]"}),jsxRuntimeExports.jsx("button",{onClick:()=>C(!1),style:{marginTop:16,padding:"6px 20px",border:"1px solid #ccc",borderRadius:6,background:"#f5f5f5",cursor:"pointer"},children:T("emailModal.btnClose")})]})}),jsxRuntimeExports.jsx(UpdateNotification,{}),reactDomExports.createPortal(jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[P&&jsxRuntimeExports.jsxs("div",{className:"earn-sticker",style:{position:"fixed",zIndex:9e3,width:80,height:80,borderRadius:16,background:"linear-gradient(135deg, #f59e0b, #ef4444)",boxShadow:"0 4px 16px rgba(239,68,68,0.45)",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",cursor:"pointer",padding:"6px 4px",textAlign:"center",userSelect:"none"},onClick:()=>L(!0),children:[jsxRuntimeExports.jsx("button",{onClick:B=>{B.stopPropagation(),localStorage.setItem(_,String(Date.now())),R(!1)},style:{position:"absolute",top:-6,left:-6,width:20,height:20,borderRadius:"50%",background:"rgba(0,0,0,0.55)",border:"none",color:"#fff",fontSize:"0.65rem",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",lineHeight:1,padding:0},children:"✕"}),jsxRuntimeExports.jsx("span",{style:{fontSize:"1.3rem",lineHeight:1},children:"💰"}),jsxRuntimeExports.jsxs("span",{style:{fontSize:"0.55rem",fontWeight:800,color:"#fff",lineHeight:1.3,marginTop:4},children:["Kiếm tiền",`
325`,"từ GVĐM"]})]}),I&&jsxRuntimeExports.jsx("div",{style:{position:"fixed",inset:0,zIndex:9999,display:"flex",alignItems:"center",justifyContent:"center",background:"rgba(0,0,0,0.55)",padding:16},onClick:()=>L(!1),children:jsxRuntimeExports.jsxs("div",{style:{background:"#fff",borderRadius:20,maxWidth:480,width:"100%",boxShadow:"0 12px 40px rgba(0,0,0,0.25)",overflow:"hidden"},onClick:B=>B.stopPropagation(),children:[jsxRuntimeExports.jsxs("div",{style:{background:"linear-gradient(135deg, #f59e0b, #ef4444)",padding:"18px 24px",color:"#fff",position:"relative"},children:[jsxRuntimeExports.jsx("button",{onClick:()=>L(!1),style:{position:"absolute",top:12,right:14,background:"rgba(255,255,255,0.2)",border:"none",color:"#fff",fontSize:"1rem",width:28,height:28,borderRadius:"50%",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center"},children:"✕"}),jsxRuntimeExports.jsx("div",{style:{fontSize:"2rem",marginBottom:6},children:"💰"}),jsxRuntimeExports.jsx("h2",{style:{margin:0,fontSize:"1.15rem",fontWeight:800},children:"Kiếm tiền từ Giáo viên đổi mới"})]}),jsxRuntimeExports.jsxs("div",{style:{padding:"20px 24px",fontSize:"0.92rem",color:"#333",lineHeight:1.8},children:[jsxRuntimeExports.jsx("p",{style:{margin:"0 0 12px",fontWeight:600}
325,children:"Chào mừng bạn đến với Giáo viên đổi mới!"}),jsxRuntimeExports.jsx("p",{style:{margin:"0 0 14px"},children:"Bạn có thể kiếm thêm thu nhập từ việc đăng ký làm cộng tác viên ở trang chúng tôi theo những cách sau:"}),jsxRuntimeExports.jsx("div",{style:{background:"#fff8f0",borderRadius:12,padding:"12px 16px",marginBottom:10,borderLeft:"4px solid #f59e0b"},children:jsxRuntimeExports.jsxs("p",{style:{margin:0},children:[jsxRuntimeExports.jsx("strong",{children:"1."})," Đăng ký ",jsxRuntimeExports.jsx("strong",{children:"mã giảm giá"})," và giới thiệu tới bạn bè, người quen của mình. Chiết khấu ",jsxRuntimeExports.jsx("strong",{style:{color:"#ef4444"},children:"30%"})]})}),jsxRuntimeExports.jsx("div",{style:{textAlign:"center",margin:"6px 0",fontWeight:700,color:"#888"},children:"HOẶC"}),jsxRuntimeExports.jsx("div",{style:{background:"#f0f4ff",borderRadius:12,padding:"12px 16px",marginBottom:16,borderLeft:"4px solid #6366f1"},children:jsxRuntimeExports.jsxs("p",{style:{margin:0},children:[jsxRuntimeExports.jsx("strong",{children:"2."})," Đăng ký ",jsxRuntimeExports.jsx("strong",{children:"xây dựng các mini app, phần mềm AI"})," hữu ích. Chiết khấu ",jsxRuntimeExports.jsx("strong",{style:{color:"#6366f1"},children:"70%"})]})}),jsxRuntimeExports.jsxs("p",{style:{margin:0,textAlign:"center",fontWeight:600,color:"#ef4444"},children:["Liên hệ admin theo SĐT: ",jsxRuntimeExports.jsx("a",{href:"https://zalo.me/0363357745",target:"_blank",rel:"noopener noreferrer",style:{color:"#ef4444"},children:"0363.357.745"})," để biết thêm chi tiết!"]})]})]})}),jsxRuntimeExports.jsx(AnimatePresence,{children:M&&jsxRuntimeExports.jsxs(motion.div,{className:"hot-feature-sticker",initial:{scale:0,opacity:0},animate:{scale:1,opacity:1},exit:{scale:0,opacity:0},transition:{type:"spring",stiffness:280,damping:20,delay:.7},onClick:()=>{M.url.startsWith("http")?window.open(M.url,"_blank","noopener,noreferrer"):o(M.url)},whileHover:{scale:1.08},whileTap:{scale:.94},style:{position:"fixed",top:210,left:60,zIndex:998,cursor:"pointer",userSelect:"none",width:150,height:150},children:[jsxRuntimeExports.jsx("button",{onClick:B=>{B.stopPropagation(),localStorage.setItem(j,String(Date.now())),D(null)},style:{position:"absolute",top:2,right:2,zIndex:1,width:22,height:22,borderRadius:"50%",background:"rgba(0,0,0,0.55)",border:"none",color:"#fff",fontSize:"0.7rem",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",lineHeight:1,padding:0},children:"✕"}),jsxRuntimeExports.jsx(motion.div,{animate:{scale:[1,1.22,1],opacity:[.6,.15,.6]},transition:{duration:2,repeat:1/0,ease:"easeInOut"},style:{position:"absolute",inset:-10,borderRadius:"50%",background:"radial-gradient(circle, rgba(251,191,36,0.55) 0%, transparent 70%)",pointerEvents:"none"}}),jsxRuntimeExports.jsxs(motion.div,{animate:{rotate:[0,4,-4,0]},transition:{duration:4,repeat:1/0,ease:"easeInOut"},style:{width:150,height:150,borderRadius:"50%",background:"linear-gradient(145deg, #fde047 0%, #f59e0b 45%, #ef4444 100%)",boxShadow:"0 8px 36px rgba(245,158,11,0.7), 0 3px 14px rgba(0,0,0,0.35)",border:"4px solid rgba(255,255,255,0.4)",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:3,textAlign:"center",padding:"0 14px",boxSizing:"border-box"},children:[jsxRuntimeExports.jsx(motion.span,{animate:{scale:[1,1.35,1]},transition:{duration:1.1,repeat:1/0,ease:"easeInOut"},style:{fontSize:"1.9rem",lineHeight:1},children:"🔥"}),jsxRuntimeExports.jsx("span",{style:{fontSize:"0.65rem",fontWeight:900,color:"#fff",letterSpacing:"0.12em",textTransform:"uppercase",textShadow:"0 1px 4px rgba(0,0,0,0.4)",lineHeight:1},children:"ĐANG HOT"}),jsxRuntimeExports.jsx("span",{style:{fontSize:"0.88rem",fontWeight:800,color:"#fff",lineHeight:1.3,textShadow:"0 1px 4px rgba(0,0,0,0.5)",wordBreak:"break-word"},children:M.name})]})]},"hot-feature-sticker")})]}),document.body)]})},LANGUAGES=[{code:"vi",label:"Tiếng Việt",flag:viFlag},{code:"en",label:"English",flag:enFlag},{code:"pl",label:"Polski",flag:null}],HIGHLIGHTS=[{key:"highlightTools",icon:"🧰",fallback:"Kho công cụ dạy học tương tác"},{key:"highlightAI",icon:"✨",fallback:"Trợ lý AI soạn bài, tích hợp, viết SKKN, ..."},{key:"highlightSimulation",icon:"🔬",fallback:"Mô phỏng trực quan (3D, 2D, chuyển động, ...) các bài dạy"},{key:"highlightClassroom",icon:"🎓",fallback:"Quản lý lớp chủ nhiệm"},{key:"highlightFree",icon:"🎁",fallback:"Dùng ngay, không cần cài đặt"}],TERMS_CONSENT_VERSION="2.0";async function logTermsConsent(o,u){try{await setDoc(doc(db,"termsConsentLogs",`${o}_${TERMS_CONSENT_VERSION}`),{uid:o,email:u,version:TERMS_CONSENT_VERSION,consentedAt:new Date().toISOString()},{merge:!0})}catch(T){console.warn("[LoginPage] logTermsConsent failed:",T)}}function LoginPage(){const[o,u]=reactExports.useState(""),[T,S]=reactExports.useState(!1),[E,C]=reactExports.useState(!1),[_,P]=reactExports.useState(!1),[R,I]=reactExports.useState(!1),L=reactExports.useRef(null),{loginWithGoogle:j,currentUser:M,authError:D,loading:F}=useAuth(),N=useNavigate(),{t:G,i18n:B}=useTranslation("login");reactExports.useEffect(()=>{function U(W){L.current&&!L.current.contains(W.target)&&C(!1)}
325return document.addEventListener("mousedown",U),()=>document.removeEventListener("mousedown",U)},[]),reactExports.useEffect(()=>{if(!R)return;const U=K=>{K.key==="Escape"&&I(!1)};document.addEventListener("keydown",U);const W=document.body.style.overflow;return document.body.style.overflow="hidden",()=>{document.removeEventListener("keydown",U),document.body.style.overflow=W}},[R]);const H=T||F;reactExports.useEffect(()=>{M&&N("/dashboard")},[M,N]);const O=async()=>{if(!_){u(G("consentRequired"));return}try{u(""),S(!0);const U=await j();U&&(await logTermsConsent(U.uid,U.email),N("/dashboard"))}catch(U){console.error("[LoginPage] Login error:",U==null?void 0:U.code,U==null?void 0:U.message,U),u(mapAuthError(U,G)),S(!1)}},V=LANGUAGES.find(U=>U.code===B.language)??LANGUAGES[0];return jsxRuntimeExports.jsxs("div",{className:"login-page",children:[jsxRuntimeExports.jsx(SeoHelmet,{title:seoConfig.login.title,description:seoConfig.login.description,keywords:seoConfig.login.keywords,canonicalUrl:"https://giaoviendoimoi.com/login",structuredData:getStructuredData("landing")}),jsxRuntimeExports.jsxs("div",{className:"login-lang-switcher",ref:L,children:[jsxRuntimeExports.jsxs("button",{className:"login-lang-btn",onClick:()=>C(U=>!U),children:[V.flag?jsxRuntimeExports.jsx("img",{src:V.flag,alt:V.label,className:"login-lang-flag"}):jsxRuntimeExports.jsx("span",{className:"login-lang-emoji",children:"🇵🇱"}),jsxRuntimeExports.jsx("span",{children:V.label}),jsxRuntimeExports.jsx("span",{className:"login-lang-arrow",children:E?"▲":"▼"})]}),E&&jsxRuntimeExports.jsx("div",{className:"login-lang-menu",children:LANGUAGES.map(U=>jsxRuntimeExports.jsxs("button",{className:`login-lang-item${B.language===U.code?" active":""}`,onClick:()=>{B.changeLanguage(U.code),C(!1)},children:[U.flag?jsxRuntimeExports.jsx("img",{src:U.flag,alt:U.label,className:"login-lang-flag"}):jsxRuntimeExports.jsx("span",{className:"login-lang-emoji",children:"🇵🇱"}),jsxRuntimeExports.jsx("span",{children:U.label})]},U.code))})]}),jsxRuntimeExports.jsxs("div",{className:"login-container",children:[jsxRuntimeExports.jsxs("div",{className:"login-brand",children:[jsxRuntimeExports.jsxs("div",{className:"login-logo",children:[jsxRuntimeExports.jsx("div",{className:"login-logo-badge",children:jsxRuntimeExports.jsx("img",{src:"/logo-176.png",srcSet:"/logo-176.png 1x, /logo-264.png 2x",alt:G("logoText"),className:"login-logo-img",width:176,height:172,decoding:"async"})}),jsxRuntimeExports.jsx("h1",{className:"logo-text",children:G("logoText")}),jsxRuntimeExports.jsx("p",{className:"logo-subtitle",children:G("logoSubtitle")})]}),jsxRuntimeExports.jsx("ul",{className:"login-highlights",children:HIGHLIGHTS.map(U=>jsxRuntimeExports.jsxs("li",{className:"login-highlight-item",children:[jsxRuntimeExports.jsx("span",{className:"login-highlight-icon","aria-hidden":"true",children:U.icon}),jsxRuntimeExports.jsx("span",{className:"login-highlight-text",children:G(U.key,U.fallback)})]},U.key))})]}),jsxRuntimeExports.jsxs("div",{className:"login-card",children:[jsxRuntimeExports.jsx("h2",{className:"login-title",children:G("loginTitle")}),jsxRuntimeExports.jsx("p",{className:"login-description",children:G("loginDescription")}),(o||D)&&jsxRuntimeExports.jsxs("div",{className:"error-message",children:[jsxRuntimeExports.jsx("strong",{children:o||D}),jsxRuntimeExports.jsx("button",{type:"button",className:"login-cookie-help-btn",onClick:()=>I(!0),children:G("cookieHelpBtn")})]}),jsxRuntimeExports.jsxs("div",{className:"login-disclaimer",children:[jsxRuntimeExports.jsx("p",{children:G("disclaimerCopyright")}),jsxRuntimeExports.jsx("p",{children:G("disclaimerStudentPhoto")}),jsxRuntimeExports.jsx("p",{children:G("disclaimerConsent")})]}),jsxRuntimeExports.jsxs("label",{className:"login-consent-checkbox",children:[jsxRuntimeExports.jsx("input",{type:"checkbox",checked:_,onChange:U=>{P(U.target.checked),U.target.checked&&u("")}}),jsxRuntimeExports.jsx("span",{children:G("consentCheckboxLabel")})]}),jsxRuntimeExports.jsxs("button",{className:"google-login-btn",onClick:O,disabled:H||!_,children:[jsxRuntimeExports.jsxs("svg",{className:"google-icon",viewBox:"0 0 24 24",children:[jsxRuntimeExports.jsx("path",{fill:"#4285F4",d:"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z"}),jsxRuntimeExports.jsx("path",{fill:"#34A853",d:"M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z"}),jsxRuntimeExports.jsx("path",{fill:"#FBBC05",d:"M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z"}),jsxRuntimeExports.jsx("path",{fill:"#EA4335",d:"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z"})]}),G(H?"loggingInBtn":"loginGoogleBtn")]}),H&&jsxRuntimeExports.jsxs("p",{className:"login-popup-hint",children:[jsxRuntimeExports.jsx("span",{children:G("popupHint","Nếu chưa thấy cửa sổ đăng nhập, hãy tìm ở thanh tác vụ phía dưới màn hình")}),jsxRuntimeExports.jsx("span",{className:"login-popup-hint-arrow","aria-hidden":"true",children:"↓"})]}),jsxRuntimeExports.jsxs("p",{className:"login-note",children:[G("loginNotePrefix")," ",jsxRuntimeExports.jsx(Link$1,{to:"/dieu-khoan-su-dung",children:G("loginNoteTerms")})," ",G("loginNoteAnd")," ",jsxRuntimeExports.jsx(Link$1,{to:"/chinh-sach-bao-mat",children:G("loginNotePrivacy")}),G("loginNoteSuffix")]})]}),jsxRuntimeExports.jsx("div",{className:"login-footer",children:jsxRuntimeExports.jsx("p",{children:G("loginFooterText")})})]}),R&&jsxRuntimeExports.jsx("div",{className:"login-cookie-modal-overlay",onClick:()=>I(!1),role:"presentation",children:jsxRuntimeExports.jsxs("div",{className:"login-cookie-modal",onClick:U=>U.stopPropagation(),role:"dialog","aria-modal":"true","aria-labelledby":"
325cookie-help-title",children:[jsxRuntimeExports.jsx("button",{type:"button",className:"login-cookie-modal-close",onClick:()=>I(!1),"aria-label":G("cookieHelpClose"),children:"×"}),jsxRuntimeExports.jsx("h3",{className:"login-cookie-modal-title",id:"cookie-help-title",children:G("cookieHelpTitle")}),jsxRuntimeExports.jsx("ol",{className:"login-cookie-steps",children:["cookieHelpStep1","cookieHelpStep2","cookieHelpStep3","cookieHelpStep4","cookieHelpStep5"].map(U=>jsxRuntimeExports.jsx("li",{dangerouslySetInnerHTML:{__html:G(U)}},U))}),jsxRuntimeExports.jsx("img",{src:"/images/delete-cookies.png",alt:G("cookieHelpImgAlt"),className:"login-cookie-modal-img",loading:"lazy"}),jsxRuntimeExports.jsx("button",{type:"button",className:"login-cookie-modal-ok",onClick:()=>I(!1),children:G("cookieHelpClose")})]})})]})}function HelpVideoModal({isOpen:o,onClose:u,videoId:T,title:S="Hướng Dẫn",description:E=""}){return o?jsxRuntimeExports.jsx(motion.div,{className:"help-video-modal-overlay",initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},onClick:u,children:jsxRuntimeExports.jsxs(motion.div,{className:"help-video-modal-content",initial:{scale:.9,opacity:0},animate:{scale:1,opacity:1},exit:{scale:.9,opacity:0},transition:{duration:.3},onClick:C=>C.stopPropagation(),children:[jsxRuntimeExports.jsx("button",{className:"help-video-modal-close",onClick:u,"aria-label":"Đóng modal",children:"✕"}),jsxRuntimeExports.jsxs("div",{className:"help-video-modal-header",children:[jsxRuntimeExports.jsx("h2",{children:S}),E&&jsxRuntimeExports.jsx("p",{className:"help-video-modal-description",children:E})]}),T?jsxRuntimeExports.jsx("div",{className:"help-video-modal-video-container",children:jsxRuntimeExports.jsx("iframe",{width:"100%",height:"100%",src:`https://www.youtube.com/embed/${T}
325?autoplay=1`,title:S,frameBorder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowFullScreen:!0})}):jsxRuntimeExports.jsxs("div",{className:"help-video-modal-coming-soon",children:[jsxRuntimeExports.jsx("span",{className:"help-video-modal-coming-soon-icon",children:"🎬"}),jsxRuntimeExports.jsx("p",{children:"Video hướng dẫn sắp được cập nhật"})]})]})}):null}const PLATFORM_CATALOG=`
326## TÍNH NĂNG
327
328Mọi hoạt động dưới đây đều dùng trực tiếp trên lớp VÀ giao bài về nhà được.
329
330**Nhóm A — GV trình chiếu, học sinh KHÔNG cần thiết bị riêng:**
331- 🪢 Kéo Co - Đua thuyền kiến thức (/tug-of-war-game) — 2 đội thi đấu kéo co theo số câu trả lời đúng. Không khí cạnh tranh cao, hợp ôn tập/củng cố cuối bài.
332- 🎡 Vòng Quay - Đua Vịt (/wheel-quiz) — quay vòng hoặc đua vịt để chọn ngẫu nhiên học sinh/câu hỏi, kết hợp trả lời trắc nghiệm. Hợp khởi động, kiểm tra bài cũ, gọi HS lên bảng.
333- 🧩 Lật Mảnh Ghép (/flip-puzzle-game) — trả lời đúng để lật từng mảnh, lộ dần ảnh ẩn phía sau, HS đoán tên bức ảnh. Hợp dẫn dắt vào bài mới (đặt ảnh ẩn là chủ đề bài học).
334- 🚂 Đoàn Tàu Tri Thức (/knowledge-train-game) — kéo thả xếp các toa tàu thành đúng thứ tự, đáp án toa trước nối vào câu hỏi toa sau. Hợp nội dung CÓ TRÌNH TỰ: quy trình, các bước, mốc thời gian, chuỗi sự kiện, chuỗi phản ứng.
335- 🔤 Ô Chữ - Khóa Bí Mật (/crossword-puzzle) — 2 chế độ: (1) ô chữ điền hàng ngang rồi ghép ra từ khóa; (2) tìm từ ẩn trong bảng chữ cái (word search). Cả 2 đều hợp từ vựng, thuật ngữ, tên riêng, khái niệm ngắn — nội dung là TỪ/CỤM TỪ chứ không phải câu dài.
336- 🧨 Dò Mìn (/minesweeper) — chọn ô chứa đáp án đúng để đi qua bãi mìn, chọn nhầm là nổ, có 3 mạng. Kết hợp kiến thức với tư duy logic và yếu tố hồi hộp.
337- 🎲 Game Theo Lượt (/turn-based-game) — tung xúc xắc, di chuyển nhân vật, vượt chướng ngại vật bằng câu hỏi. Hợp nhóm 2–4 HS chơi chung MỘT thiết bị (góc học tập, lớp ít máy).
338- 🤏 Kéo Thả - Nối Ý (/quiz-game) — 3 dạng bài kéo thả: (1) kéo nhãn thả đúng vị trí TRÊN ẢNH — hợp chú thích sơ đồ, bản đồ, cấu tạo, hình vẽ; (2) nối ý hai cột tương ứng — hợp cặp khái niệm–định nghĩa, sự kiện–năm, từ–nghĩa; (3) sắp xếp thứ tự. Đây là feature hợp nhất khi nội dung có QUAN HỆ TƯƠNG ỨNG hoặc cần chỉ vị trí trên hình.
339- 🖼️ Ảnh Tương Tác (/interactive-image) — đặt điểm chạm lên ảnh, HS click vào điểm để trả lời quiz hoặc làm phiếu học tập. Hợp bản đồ, sơ đồ, cấu tạo máy móc, cơ thể người, tranh minh họa.
340- 🎬 Video Tương Tác (/interactive-video) — chèn câu hỏi trắc nghiệm vào các mốc thời gian giữa video YouTube. Hợp giao bài về nhà và lớp học đảo ngược.
341- 🧊 Bảo Tàng Panorama (/panorama-museum) — 2 chế độ. (1) Ảnh 360°: hợp giới thiệu di tích, địa danh, hiện tượng tự nhiên, không gian khó đến tận nơi. (2) Phòng triển lãm 3D đi bộ (tối đa 45 khung tranh): GV treo ảnh tư liệu, hoặc phát mã 4 số cho HS tự nộp sản phẩm lên tường, mỗi khung có tên tác phẩm + mô tả + tên tác giả, có chế độ tự động tham quan. RẤT HỢP Lịch sử, Địa lí, Giáo dục địa phương: trưng bày ảnh tư liệu lịch sử, bản đồ, di sản - làng nghề - nhân vật địa phương, báo cáo dự án/sản phẩm học tập của HS.
342- 🔀 Sơ Đồ Tư Duy (/mind-map) — GV dựng sẵn các nhánh, trong giờ cả lớp cùng chọn phương án, cuối giờ tự sinh sơ đồ hoàn chỉnh và xuất ảnh. Hợp tổng kết bài/c
342hương, hệ thống hóa kiến thức.
343- 🃏 Thẻ Lật - Flashcard (/flashcard) — thẻ ghi nhớ 2 mặt kèm hình ảnh và âm thanh, có tự đánh giá "Đã hiểu / Chưa chắc". Hợp ôn từ vựng, công thức, định nghĩa; đặc biệt hợp HS tự học lại ở nhà.
344- 🦋 Từ Ngữ Biết Bay (/flying-words-game) — các từ bay ngẫu nhiên, HS bắt từ (bằng tay qua camera HOẶC bằng chuột — không bắt buộc camera) rồi ghép thành câu đúng. Hợp luyện đặt câu, trật tự từ, ngoại ngữ.
345- 💎 Truy Tìm Kho Báu (/scavenger-hunt) — gộp NHIỀU bài học đã tạo thành một cuộc săn nhiều trạm, giải xong trạm này mới mở trạm sau, HS thu chữ cái để giải từ khóa cuối. Hợp hoạt động trải nghiệm, ngoại khóa, ôn tập cả chủ đề lớn. ⚠️ Cần có sẵn vài bài học khác trước mới tạo được.
346- 🗺️ Hành Trình Học Tập (/journey) — lộ trình nhiều chặng, mỗi chặng một bộ đề, HS đi hết hành trình, theo dõi kết quả từng em. Hợp ôn tập cả chương hoặc giao bài dài ngày. Nhận 4 dạng câu: ABCD, nhiều đáp án, đúng/sai, điền từ. [Cần gói FullGame]
347
348**Nhóm B — Bắt buộc có camera (webcam của GV):**
349- ✋ Chém Hoa Quả / Bắt Bong Bóng (/hand-slash-quiz) — vung tay chém hoa quả hoặc chụm ngón tay bắt bong bóng để chọn đáp án. Sôi động, hợp khởi động và đổi không khí giữa giờ.
350- 🤔 Quiz Nghiêng Đầu (/head-tilt-quiz) — nghiêng đầu sang trái/phải để chọn A hoặc B. ⚠️ CHỈ nhận câu hỏi có ĐÚNG 2 đáp án — hợp câu đúng/sai, có/không, so sánh 2 phương án. Câu 4 đáp án KHÔNG dùng được.
351- ⭐ Cuộc Đua Ngôi Sao (/star-bag-game) — 2 HS lên bảng giơ số ngón tay tương ứng 4 đáp án, ai đúng thì giành sao. Hợp thi đấu tay đôi trước lớp.
352- 🤸 Thể Dục ABC (/pose-quiz) — làm tư thế thể dục tương ứng đáp án theo hình minh họa. Hợp giải lao giữa giờ, lớp nhỏ tuổi, kết hợp vận động.
353- 📷 Ống Kính May Mắn (/face-random) — camera quét lớp và chọn ngẫu nhiên một HS để gọi trả lời (cũng gọi được bằng danh sách ảnh), kết hợp kèm câu hỏi.
354
355**Nhóm C — Học sinh có thiết bị riêng (điện thoại/máy tính):**
356- ⏱️ Trắc Nghiệm Theo Nhịp Độ (/paced-quiz) — GV điều khiển nhịp từng câu trên màn chiếu, HS trả lời trên máy mình, có bảng xếp hạng. Nhận được cả câu Sắp xếp và Nối ý (dạng "rich"), nên đây là nơi dùng bộ câu hỏi phong phú nhất khi nhập từ JSON.
357- ⚔️ Game Đối Kháng (/versus-game) — đấu 1v1 realtime trên thiết bị riêng, trả lời đúng đẩy đối thủ lùi, GV mở phòng và theo dõi trực tiếp. [Cần gói FullGame]
358- 🕹️ Game Tự Tạo (/html-embed-game) — dán code HTML game tự làm hoặc do AI sinh, HS chơi ngay trên hệ thống; hỗ trợ SCORM/iSpring/Articulate. [Cần gói FullGame]
359
360**Nhóm D — Lớp KHÔNG có thiết bị nào:**
361- 📇 Chế Độ Giấy - Quét Thẻ (/paper-mode) — kiểu Plickers: mỗi HS cầm một thẻ giấy in sẵn có 4 mặt A/B/C/D, xoay thẻ để chọn đáp án, GV quét cả lớp bằng camera điện thoại và chấm xong trong vài giây. Có bảng xếp hạng và phân tích từng câu. Thẻ in một lần dùng cả năm. Đây là lựa chọn TỐT NHẤT khi lớp cấm điện thoại hoặc HS không có máy.
362
363**Công cụ hỗ trợ:**
364- 🐉 Rồng Ngủ - Quản Lý Lớp (/noise-tracker) — rồng ngủ khi lớp yên tĩnh, thức giấc khi ồn; giám sát tiếng ồn bằng micro. Dùng để giữ trật tự, không phải hoạt động kiến thức.
365- 📚 Thư viện cộng đồng (/community-library) — tải bài của giáo viên khác về dùng, miễn phí.
366- 🗃️ Ngân hàng câu hỏi (/question-bank) — lưu, tái sử dụng và nhập câu hỏi từ JSON/Excel/Word.
367- 🤖 Công cụ AI (/ai-tools) — AI viết SKKN, biện pháp GVG, tích hợp nội dung liên môn... (cần đăng nhập).
368
369## ⚠️ SOẠN NỘI DUNG CHO TỪNG LOẠI — ĐỌC KỸ TRƯỚC KHI GỢI Ý
370
371Đa số feature (Kéo Co, Nhịp Độ, Vòng Quay, Dò Mìn, Đối Kháng, Theo Lượt, Kho Báu,
372Hành Trình, và toàn bộ nhóm camera) ăn **trắc nghiệm thường**: 4 dạng ABCD / nhiều đáp
373án / đúng-sai / điền từ ngắn. Với các feature đó cứ soạn câu hỏi trắc nghiệm bình
374thường là chạy được (nhớ kiểm tra giới hạn SỐ ĐÁP ÁN ở phần JSON bên dưới).
375
376NHƯNG các feature dưới đây **KHÔNG chạy bằng trắc nghiệm thường**. Nếu chỉ đưa cho GV
377một xấp câu ABCD rồi bảo "bỏ vào game này" thì GV sẽ không tạo được bài. Phải tư vấn
378đúng dạng dữ liệu của nó:
379
380**🔤 Ô Chữ (/crossword-puzzle) — chế độ Ô chữ + khóa bí mật.** Đây là feature khó nhất
381và dễ tư vấn sai nhất. GV KHÔNG gõ câu hỏi trước, mà **vẽ lưới chữ trước**:
382- Mỗi HÀNG ngang là MỘT TỪ (đáp án), gõ sẵn từng chữ cái vào ô. Mỗi hàng gắn đúng 1
383  câu hỏi, và đáp án đúng của câu đó CHÍNH LÀ từ của hàng — đúng từng chữ cái.
384- Một CỘT dọc được chọn làm **từ khóa**: mỗi hàng góp đúng 1 chữ cái tại cột đó, đọc
385  dọc từ trên xuống ra từ khóa. Số hàng = số chữ cái cá»
385§a từ khóa.
386
387**QUY TRÌNH BẮT BUỘC — làm đủ 2 bước, đừng dừng ở bước 1:**
388
389*Bước 1 — chốt TỪ KHÓA (hàng dọc).* Thường là chủ đề bài học, viết HOA không dấu.
390Ví dụ từ khóa "SINHVAT" có 7 chữ → ô chữ sẽ có 7 hàng ngang.
391
392*Bước 2 — với TỪNG chữ cái của từ khóa, tìm MỘT từ ngang CHỨA chữ cái đó.* Đây mới là
393phần khó và là phần hay bị bỏ sót. Không được chỉ đưa từ khóa rồi bảo GV "tự nghĩ các
394từ hàng ngang" — phải gợi ý đủ cả 7 từ.
395
396**BẮT BUỘC trả lời theo đúng danh sách này — liệt kê từ khóa rồi ĐỦ từng hàng, không
397được rút gọn hay bỏ lửng bằng "tương tự...", "v.v.":**
398
399Từ khóa: SINHVAT (7 chữ → 7 hàng ngang)
400Hàng 1: THUCVAT — chữ S (vị trí 4) — Câu hỏi: Nhóm sinh vật tự tổng hợp chất hữu cơ nhờ ánh sáng?
401Hàng 2: VISINHVAT — chữ I (vị trí 2) — Câu hỏi: ...
402Hàng 3: ... — chữ N (vị trí ...) — Câu hỏi: ...
403Hàng 4: ... — chữ H ...
404Hàng 5: ... — chữ V ...
405Hàng 6: ... — chữ A ...
406Hàng 7: ... — chữ T ...
407
408Mỗi dòng gồm đủ: từ hàng ngang (đáp án, viết liền không dấu) — chữ cái ở cột khóa +
409vị trí của nó trong từ — câu hỏi gợi ý. Số dòng "Hàng N" phải bằng đúng số chữ cái của
410từ khóa; thiếu một hàng là GV không dựng được ô chữ.
411
412**Cách căn chỉnh trong lưới (giải thích cho GV):** lưới cho phép đặt từ bắt đầu ở bất kỳ
413cột nào, ô trống để trắng. GV đẩy từ sang trái/phải sao cho chữ cái cần rơi trúng cột
414khóa. Quy tắc: *cột bắt đầu của từ = cột khóa − (vị trí chữ trong từ − 1)*. Nên nếu chữ
415cần nằm ở vị trí thứ 4 của từ, cột khóa nên chọn đủ xa bên phải (≥ 4) để từ không bị
416tràn ra ngoài lưới. Khi gợi ý, ưu tiên các từ có chữ cần nằm ở vị trí gần nhau giữa các
417hàng — lưới sẽ gọn và cân đối hơn.
418
419**Ràng buộc khi chọn từ ngang:**
420- Bắt buộc chứa chữ cái tương ứng của từ khóa. Nếu không nghĩ ra từ nào chứa chữ đó
421  trong phạm vi bài học, hãy ĐỔI TỪ KHÓA khác — đừng ép một từ ngang lạc chủ đề.
422- Là TỪ/CỤM TỪ ngắn (nên ≤ 12 chữ cái để lưới không quá rộng), KHÔNG dùng câu dài,
423  KHÔNG dùng số/công thức. Vì vậy ít hợp với môn cần tính toán.
424- Chữ cái được gõ dạng HOA. Cụm từ nhiều tiếng vẫn dùng được, GV gõ liền các ô.
425- Câu hỏi nhận 4 dạng ABCD/đúng-sai/nhiều đáp án/điền từ, nhưng dù dạng nào thì đáp án
426  đúng vẫn phải khớp đúng số ô của hàng.
427
428**🔤 Ô Chữ — chế độ Tìm từ (word search).** Chỉ cần DANH SÁCH TỪ cần tìm (hệ thống tự
429giấu vào bảng chữ cái và tự chèn chữ nhiễu). Không cần câu hỏi. Từ khóa tối đa 30 ký tự.
430Đây là chế độ nhẹ hơn nhiều — hợp khi GV chỉ muốn ôn từ vựng nhanh.
431
432**🧩 Lật Mảnh Ghép (/flip-puzzle-game).** Số câu hỏi phải **BẰNG ĐÚNG số ô của lưới** —
433thiếu hay thừa đều KHÔNG lưu được bài (hệ thống chặn, báo lỗi). Vì vậy phải **chọn kích
434thước lưới TRƯỚC**, rồi mới sinh JSON đúng bằng số ô đó.
435- Các lưới có sẵn (chọn 1 trong các mốc này, không tự đặt số khác):
436  2×2 = 4 câu · 2×3 = 6 · 3×3 = 9 · 3×4 = 12 · 4×4 = 16 · 4×5 = 20 · 4×6 = 24 ·
437  5×5 = 25 · 5×6 = 30 · 6×6 = 36.
438- Gợi ý thực dụng: 9 hoặc 12 câu là vừa một hoạt động; từ 20 câu trở lên khá dài.
439- Khi tư vấn phải nói rõ: "chọn lưới 3×3 → cần đúng 9 câu", rồi sinh đúng 9 câu.
440  Đừng sinh một số lẻ như 7 hay 10 câu — GV sẽ kẹt ở bước lưu.
441- Còn cần **một ẢNH** làm nền (ảnh bị che, HS lật dần để đoán) và **tên/đáp án của ảnh**.
442  Không có ảnh thì không tạo được bài.
443- Đổi lưới sau khi đã nhập câu: câu thừa bị cắt bớt, nên chốt lưới ngay từ đầu.
444
445**🚂 Đoàn Tàu Tri Thức (/knowledge-train-game).** KHÔNG dùng đáp án nhiễu. Mỗi toa là
446một cặp **Câu hỏi → Đáp án đúng** (nhập câu ABCD vào thì hệ thống chỉ giữ đáp án đúng,
447bỏ hết phương án sai). Tối đa 30 toa. Soạn theo dạng danh sách cặp hỏi–đáp ngắn, và
448nội dung nên có TRÌNH TỰ tự nhiên để việc xếp toa có ý nghĩa.
449
450**🃏 Thẻ Lật (/flashcard).** KHÔNG phải quiz, không có đáp án đúng/sai. Mỗi thẻ là 2 mặt
451**Mặt trước / Mặt sau** (kèm ảnh, âm thanh tùy chọn). Soạn theo dạng cặp: thuật ngữ –
452định nghĩa, từ – nghĩa, ký hiệu – tên gọi. Đừng soạn câu hỏi ABCD cho feature này.
453
454**🤏 Kéo Thả - Nối Ý (/quiz-game).** Tùy dạng: (1) kéo nhãn lên ảnh — cần MỘT ẢNH + danh
455sách nhãn kèm vị trí cần chú thích; (2) nối ý — cần các CẶP tương ứng trái–phải;
456(3) sắp xếp — cần danh sách mục theo đúng thứ tự. Không phải câu ABCD.
457
458**🖼️ Ảnh Tương Tác / 🎬 Video Tương Tác / 🧊 Bảo Tàng.** Cần TƯ LIỆU trước (ảnh, link
459YouTube, ảnh 360°/ảnh trưng bày), câu hỏi chỉ là phần gắn thêm. Không có tư liệu thì
460không tạo được bài — khi tư vấn phải nhắc GV chuẩn bị ảnh/video trước.
461
462**🤔 Quiz Nghiêng Đầu (/head-tilt-quiz).** Chỉ ĐÚNG 2 đáp án. Soạn dạng đúng/sai,
463có/không, chọn giữa 2 phương án. Câu 4 đáp án phải viết lại mới dùng được.
464
465**🕹️ Game Tự Tạo (/html-embed-game).** Không soạn câu hỏi — cần MÃ HTML của game.`,PLATFORM_ASSIGNMENT=`
466## GIAO BÀI & CÔNG CỤ
467
468**Giao bài:** GV tạo bài → hệ thống sinh mã 4 số → HS vào giaoviendoimoi.com/join → nhập mã → làm trên điện thoại. Link mặc định sống 15 ngày (bản miễn phí); gói Extended Link kéo dài 1–5 năm.
469**Thư viện cộng đồng:** GV đăng bài → GV khác lọc theo môn/lớp/loại game → clone về tài khoản mình. Xem miễn phí, tốn quota khi clone.
470**Ngân hàng câu hỏi:** Câu hỏi tự lưu khi tạo bài. Nhập lại vào bài mới để khỏi gõ lại. Nhận JSON dán trực tiếp (tối đa 50 câu mỗi lần).`,CHATBOT_PROXY_URL="https://chatbotproxy-6evfxw332a-uc.a.run.app";async function callGemini(o,u,T){var P;const S=[...u.map(R=>({role:R.role==="user"?"user":"model",parts:[{text:R.text}]})),{role:"user",parts:[{text:o}]}],E=await((P=getAuth().currentUser)==null?void 0:P.getIdToken());if(!E)throw new Error("Cần đăng nhập để dùng trợ lý AI.");const C=await fetch(CHATBOT_PROXY_URL,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${E}`},body:JSON.stringify({contents:S,systemPrompt:T})});if(!C.ok){const R=await C.json().catch(()=>({}));throw new Error(R.error||"Tất cả model đều bận, vui lòng thử lại sau.")}const _=await C.json();if(!_.text)throw new Error("Tất cả model đều bận, vui lòng thử lại sau.");return _.text}const PROMPT_BASE=`Bạn là trợ lý của "Giáo viên đổi mới" (giaoviendoimoi.com) — nền tảng tạo game dạy học tương tác.
471Trả lời thân thiện, ngắn gọn, bằng tiếng Việt.
472Khi muốn điều hướng đến tính năng, thêm vào CUỐI message: %%ACTIONS:[{"label":"Tên nút","route":"/route"}]%%
473Không nhắc đến ACTIONS trong lời nói.`,PROMPT_FEATURES=PLATFORM_CATALOG,PROMPT_ASSIGNMENT=PLATFORM_ASSIGNMENT,PROMPT_UPGRADE=`
474## GÓI NÂNG CẤP
475
476- **Miễn phí:** Dùng được tất cả, có giới hạn số bài
477- **PRO:** Không giới hạn, mở Game Đối Kháng + Game tự tạo + upload audio
478- Nâng cấp: /upgrade hoặc nút "Nâng cấp" trên dashboard`,PROMPT_TROUBLESHOOT=`
479## LỖI THƯỜNG GẶP
480
481**Camera không hoạt động:**
482- Cấp quyền camera cho trình duyệt (biểu tượng camera trên thanh địa chỉ)
483- Chỉ chạy trên HTTPS, dùng Chrome/Edge mới nhất
484- Màn hình đen: tải lại trang, kiểm tra app khác không chiếm camera
485- Hướng dẫn chi tiết: https://docs.google.com/document/d/18pZYh3r19ndHbBSDMtZ5qa7ldQYGykc95pr0P2VCpu4/edit?tab=t.0
486
487**HS không vào được bài:** Kiểm tra link/mã chưa hết hạn (15 ngày). Vào giaoviendoimoi.com/join nhập mã 4 số.
488
489**Trang trắng/đơ:** Xóa cache (Ctrl+Shift+Delete) hoặc Ctrl+F5.
490
491**Hết quota:** Nâng cấp PRO hoặc xóa bài cũ.
492
493**Công thức toán không hiển thị:** Dùng LaTeX trong cặp $...$ — vd: $\\frac{3}{4}$
494
495**Chế độ giấy - quét thẻ không nhận / kết quả sai:**
496- Quy trình đúng: /paper-mode → "In bộ thẻ" tải PDF → cắt, phát đúng số thẻ cho đúng HS theo thứ tự danh sách lớp → tạo Bộ câu hỏi → vào "Lớp học" bấm "Quét"
497- Số thẻ phải khớp thứ tự HS trong danh sách lớp, nếu lệch thì điểm gán nhầm người
498- Quét không nhận: đảm bảo đủ sáng, không chói/ngược sáng, thẻ phẳng không cong, giơ cao khỏi che nhau, đưa camera bao quát cả lớp và giữ vài giây
499- Tỉ lệ đúng thấp bất thường: kiểm tra đáp án đúng trong Bộ câu hỏi, và mở tên HS ở trang kết quả xem có nhiều câu "không quét được" không (nếu có thì lỗi khâu quét, không phải bài làm)`,TOPIC_PATTERNS={troubleshoot:/camera|đen|lỗi|không (chạy|hoạt động|vào|mở|load|nhận|quét)|trắng|đơ|chậm|hỏng|fix|sửa|quota|hết lượt|công thức|katex|latex|in thẻ|
499in bộ thẻ|quét (thẻ|không|sai|lỗi)|số thẻ/i,upgrade:/pro|nâng cấp|mua|giá|gói|phí|trả phí|trial|miễn phí|bản trả phí|upgrade|thanh toán/i,assignment:/giao bài|về nhà|mã|join|link bài|thời hạn|kết quả|nộp bài|học sinh làm|assignment/i,features:/tính năng|game|tool|công cụ|dùng gì|nên chọn|phù hợp|ôn tập|khởi động|cạnh tranh|giao bài|trình chiếu|lớp học|môn|lớp \d|tiểu học|thcs|thpt|flashcard|thẻ lật|dò mìn|minesweeper|sơ đồ tư duy|mind.?map|từ ngữ biết bay|flying.?words|sắp xếp câu|chế độ giấy|quét thẻ|thẻ giấy|plickers|không có (thiết bị|điện thoại|máy)|không cần (thiết bị|điện thoại|máy)|chấm trắc nghiệm|kiểm tra nhanh/i};function buildSystemPrompt(o,u){const T=[...u.slice(-2).map(C=>C.text),o].join(" "),S=[PROMPT_BASE];return(u.length===0||TOPIC_PATTERNS.features.test(T))&&S.push(PROMPT_FEATURES),TOPIC_PATTERNS.assignment.test(T)&&S.push(PROMPT_ASSIGNMENT),TOPIC_PATTERNS.upgrade.test(T)&&S.push(PROMPT_UPGRADE),TOPIC_PATTERNS.troubleshoot.test(T)&&S.push(PROMPT_TROU
499BLESHOOT),S.length===1&&(S.push(PROMPT_FEATURES),S.push(PROMPT_TROUBLESHOOT)),S.join(`
500`)}function parseActions(o){const u=o.match(/%%ACTIONS:(\[.*?\])%%/s);if(!u)return{text:o.trim()};try{const T=JSON.parse(u[1]);return{text:o.replace(/%%ACTIONS:\[.*?\]%%/s,"").trim(),actions:T}}catch{return{text:o.trim()}}}async function sendChatMessage(o,u){const S=u.map(R=>({role:R.role,text:R.text})).slice(-6),E=buildSystemPrompt(o,S),C=await callGemini(o,S,E),{text:_,actions:P}=parseActions(C);return{role:"assistant",text:_,actions:P}}function renderMarkdown(o){const u=o.split(`
501`),T=[];let S=[];function E(){S.length!==0&&(T.push(jsxRuntimeExports.jsx("ul",{className:"chatbot-md-list",children:S},`ul-${T.length}`)),S=[])}return u.forEach((C,_)=>{const P=C.match(/^#{1,3}\s+(.+)/);if(P){E(),T.push(jsxRuntimeExports.jsx("p",{className:"chatbot-md-heading",dangerouslySetInnerHTML:{__html:inlineMd(P[1])}},_));return}const R=C.match(/^[\*\-]\s+(.+)/);if(R){S.push(jsxRuntimeExports.jsx("li",{dangerouslySetInnerHTML:{__html:inlineMd(R[1])}},_));return}const I=C.match(/^\d+\.\s+(.+)/);if(I){S.push(jsxRuntimeExports.jsx("li",{dangerouslySetInnerHTML:{__html:inlineMd(I[1])}},_));return}if(C.trim()===""){E(),_<u.length-1&&T.push(jsxRuntimeExports.jsx("div",{className:"chatbot-line-gap"},_));return}E(),T.push(jsxRuntimeExports.jsx("p",{dangerouslySetInnerHTML:{__html:inlineMd(C)}},_))}),E(),T}function inlineMd(o){return o.replace(/\*\*\*(.+?)\*\*\*/g,"<strong><em>$1</em></strong>").replace(/\*\*(.+?)\*\*/g,"<strong>$1</strong>").replace(/\*(.+?)\*/g,"<em>$1</em>").replace(/`(.+?)`/g,"<code>$1</code>")}const WELCOME={role:"assistant",text:`Xin chào thầy/cô! 👋
502Tôi có thể giúp gợi ý tính năng game phù hợp cho bài học, hoặc giải đáp thắc mắc về các công cụ trên nền tảng.
503
504Thầy/cô đang cần tạo hoạt động gì cho lớp học hôm nay?`},SUGGESTIONS=["Gợi ý game ôn tập cuối tiết học","Tôi muốn khởi động đầu giờ cho vui","Tôi muốn dạy 1 kiến thức mới","Giao bài về nhà tương tác, không dùng giấy","HS không có điện thoại, dùng game gì?"];function ChatbotWidget(){const[o,u]=reactExports.useState(!1),[T,S]=reactExports.useState([WELCOME]),[E,C]=reactExports.useState(""),[_,P]=reactExports.useState(!1),[R,I]=reactExports.useState(null),L=reactExports.useRef(null),j=reactExports.useRef(null),M=useNavigate();reactExports.useEffect(()=>{var B;o&&((B=L.current)==null||B.scrollIntoView({behavior:"smooth"}),setTimeout(()=>{var H;return(H=j.current)==null?void 0:H.focus()},100))},[o,T]);function D(B){C(B.target.value);const H=B.target;H.style.height="auto",H.style.height=Math.min(H.scrollHeight,140)+"px"}async function F(B){const H=(B??E).trim();if(!H||_)return;C(""),j.current&&(j.current.style.height="auto"),I(null);const O={role:"user",text:H},V=[...T,O];S(V),P(!0);try{const U=await sendChatMessage(H,T);S([...V,U])}catch(U){I((U==null?void 0:U.message)??"Có lỗi xảy ra, vui lòng thử lại.")}finally{P(!1)}}function N(B){B.key==="Enter"&&!B.shiftKey&&(B.preventDefault(),F())}function G(B){u(!1),M(B)}return reactDomExports.createPortal(jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsx("button",{className:`chatbot-fab${o?" chatbot-fab--open":""}`,onClick:()=>u(B=>!B),"aria-label":"Trợ lý tư vấn",title:"Trợ lý tư vấn tính năng",children:o?jsxRuntimeExports.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",children:[jsxRuntimeExports.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),jsxRuntimeExports.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]}):jsxRuntimeExports.jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:jsxRuntimeExports.jsx("path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"})})}),o&&jsxRuntimeExports.jsxs("div",{className:"chatbot-panel",children:[jsxRuntimeExports.jsxs("div",{className:"chatbot-header",children:[jsxRuntimeExports.jsx("span",{className:"chatbot-header__icon",children:"✨"}),jsxRuntimeExports.jsxs("div",{children:[jsxRuntimeExports.jsx("div",{className:"chatbot-header__title",children:"Trợ lý Giáo viên đổi mới"}),jsxRuntimeExports.jsx("div",{className:"chatbot-header__sub",children:"Tư vấn tính năng game dạy học"})]}),jsxRuntimeExports.jsx("button",{className:"chatbot-header__close",onClick:()=>u(!1),children:"✕"})]}),jsxRuntimeExports.jsxs("div",{className:"chatbot-messages",children:[T.map((B,H)=>jsxRuntimeExports.jsxs("div",{className:`chatbot-msg chatbot-msg--${B.role}`,children:[jsxRuntimeExports.jsx("div",{className:"chatbot-msg__bubble",children:B.role==="assistant"?renderMarkdown(B.text):B.text.split(`
505`).map((O,V)=>jsxRuntimeExports.jsxs("span",{children:[O,V<B.text.split(`
506`).length-1&&jsxRuntimeExports.jsx("br",{})]},V))}),B.actions&&B.actions.length>0&&jsxRuntimeExports.jsx("div",{className:"chatbot-msg__actions",children:B.actions.map((O,V)=>jsxRuntimeExports.jsxs("button",{className:"chatbot-action-btn",onClick:()=>G(O.route),children:[O.label," →"]},V))})]},H)),_&&jsxRuntimeExports.jsx("div",{className:"chatbot-msg chatbot-msg--assistant",children:jsxRuntimeExports.jsxs("div",{className:"chatbot-msg__bubble chatbot-msg__bubble--loading",children:[jsxRuntimeExports.jsx("span",{}),jsxRuntimeExports.jsx("span",{}),jsxRuntimeExports.jsx("span",{})]})}),R&&jsxRuntimeExports.jsx("div",{className:"chatbot-error",children:R}),T.length===1&&!_&&jsxRuntimeExports.jsx("div",{className:"chatbot-suggestions",children:SUGGESTIONS.map((B,H)=>jsxRuntimeExports.jsx("button",{className:"chatbot-suggestion-btn",onClick:()=>F(B),children:B},H))}),jsxRuntimeExports.jsx("div",{ref:L})]}),jsxRuntimeExports.jsxs("div",{className:"chatbot-input-row",children:[jsxRuntimeExports.jsx("textarea",{ref:j,className:"chatbot-input",placeholder:"Nhập câu hỏi... (Enter để gửi)",value:E,onChange:D,onKeyDown:N,rows:1,disabled:_}),jsxRuntimeExports.jsx("button",{className:"chatbot-send-btn",onClick:()=>F(),disabled:_||!E.trim(),"aria-label":"Gửi",children:jsxRuntimeExports.jsx("svg",{viewBox:"0 0 24 24",fill:"
506currentColor",children:jsxRuntimeExports.jsx("path",{d:"M2.01 21L23 12 2.01 3 2 10l15 2-15 2z"})})})]})]})]}),document.body)}function HomePage(){const[o,u]=reactExports.useState(!1),[T,S]=reactExports.useState(!1),[E,C]=reactExports.useState(!1),[_]=reactExports.useState("journey"),P="earn_sticker_dismissed_at",[R,I]=reactExports.useState(()=>{const W=localStorage.getItem(P);return W?Date.now()-Number(W)>7*24*60*60*1e3:!0}),[L,j]=reactExports.useState(!1),M=useNavigate(),{t:D,i18n:F}=useTranslation("home"),{currentUser:N}=useAuth(),{subscription:G}=useSubscription(),B=reactExports.useMemo(()=>window.matchMedia("(max-width: 768px)").matches,[]),H={"paper-mode":{description:D("paperModeBeta"),icon:jsxRuntimeExports.jsx("img",{src:"/images/qr.png",style:{width:"2rem",height:"2rem",objectFit:"contain",filter:"drop-shadow(0 0 2px rgba(255,255,255,0.3))"},alt:"QR"})}},O=MODULE_CATALOG.map(W=>{const K=H[W.id];return{...W,title:(K==null?void 0:K.title)??D(`modules.${W.i18nKey}.title`),description:(K==null?void 0:K.description)??D(`modules.${W.i18nKey}.description`),icon:(K==null?void 0:K.icon)??W.icon}}),V=!!(G!=null&&G.nhanxetExtensionExpiresAt&&new Date(G.nhanxetExtensionExpiresAt)>new Date),U=W=>{if(W.isExtension){M("/tien-ich-giao-duc");return}W.available&&(W.path.startsWith("http")?window.open(W.path,"_blank","noopener,noreferrer"):M(W.path))};return jsxRuntimeExports.jsxs("div",{className:"home-page",children:[jsxRuntimeExports.jsx(Header,{}),jsxRuntimeExports.jsxs("div",{className:"home-content",children:[jsxRuntimeExports.jsx("div",{className:"home-hero",children:jsxRuntimeExports.jsx("h1",{className:"hero-title",children:D("heroTitle")})}),jsxRuntimeExports.jsx(HomeTabsNav,{active:"home"}),jsxRuntimeExports.jsx("div",{className:"modules-grid",children:O.map((W,K)=>jsxRuntimeExports.jsxs(motion.div,{className:`module-card ${W.available?"":"disabled"}`,initial:B?!1:{opacity:0,y:20},animate:B?!1:{opacity:1,y:0},transition:B?void 0:{delay:Math.min(K*.03,.3),duration:.35},whileHover:!B&&W.available?{y:-5,scale:1.02}:{},onClick:()=>U(W),style:{position:"relative",...W.isExtension?{background:"linear-gradient(135deg, #fef9c3, #fde68a)",outline:"2px solid #0ea5e9",boxShadow:"0 0 0 4px rgba(14,165,233,0.15)"}:{}},children:[W.isExtension&&jsxRuntimeExports.jsx("span",{style:{position:"absolute",top:6,left:6,background:"linear-gradient(135deg, #0ea5e9, #0369a1)",color:"#fff",fontSize:"0.6rem",fontWeight:800,padding:"2px 8px",borderRadius:6,letterSpacing:"0.08em",textTransform:"uppercase",zIndex:2,boxShadow:"0 2px 6px rgba(14,165,233,0.4)"},children:"EXT"}),W.isExtension&&!V&&jsxRuntimeExports.jsxs("span",{style:{position:"absolute",top:-6,right:-6,width:52,height:52,background:"linear-gradient(135deg, #0ea5e9, #0369a1)",clipPath:"polygon(50% 0%,61% 15%,79% 9%,73% 27%,93% 28%,81% 43%,97% 54%,81% 60%,88% 79%,69% 77%,65% 97%,50% 84%,35% 97%,31% 77%,12% 79%,19% 60%,3% 54%,19% 43%,7% 28%,27% 27%,21% 9%,39% 15%)",display:"flex",alignItems:"center",justifyContent:"center",color:"#fff",fontSize:"0.58rem",fontWeight:800,letterSpacing:"0.03em",textTransform:"uppercase",zIndex:2,boxShadow:"0 3px 10px rgba(14,165,233,0.5)",textAlign:"center",lineHeight:1.2},children:["MUA",jsxRuntimeExports.jsx("br",{}),"RIÊNG"]}),W.isBeta&&jsxRuntimeExports.jsx("span",{style:{position:"absolute",bottom:8,left:8,background:"rgba(0,0,0,0.65)",color:"#ffd700",fontSize:"0.6rem",fontWeight:700,padding:"2px 8px",borderRadius:6,letterSpacing:"0.03em",zIndex:2,backdropFilter:"blur(4px)"},children:D("betaBadge")}),jsxRuntimeExports.jsx("h3",{className:"module-title",children:splitCombinedTitle(W.title).map((Y,ee)=>jsxRuntimeExports.jsx("span",{children:Y},ee))}),jsxRuntimeExports.jsxs("div",{className:"module-card-body",children:[jsxRuntimeExports.jsxs("div",{className:"module-card-left",children:[jsxRuntimeExports.jsx("div",{className:"module-icon-wrapper",style:{background:W.color},children:jsxRuntimeExports.jsx("span",{className:"module-icon",style:W.iconStyle,children:MODULE_ICON_MAP[W.id]??W.icon})}),!W.available&&jsxRuntimeExports.jsx("span",{className:"coming-soon-badge",children:D("comingSoon")}),W.available&&jsxRuntimeExports.jsx(motion.button,{className:"module-button",whileHover:B?void 0:{scale:1.05},whileTap:B?void 0:{scale:.95},style:W.isExtension?{background:"linear-gradient(135deg, #0ea5e9, #0369a1)"}:void 0,children:W.isExtension?"⬇️ Tải về sử dụng":D("startBtn")})]}),jsxRuntimeExports.jsx("div",{className:"module-card-right",children:jsxRuntimeExports.jsx("p",{className:"module-description",children:W.description})})]})]},W.id))})]}),jsxRuntimeExports.jsxs("footer",{className:"home-footer",children:[jsxRuntimeExports.jsx("div",{style:{marginBottom:"28px",display:"flex",flexDirection:"column",gap:"10px"},children:jsxRuntimeExports.jsx(ExternalToolsSection,{showTitle:!0,collapsible:!0})}),jsxRuntimeExports.jsxs("div",{className:"footer-links-grid",style:{marginBottom:"20px",textAlign:"left"},children:[jsxRuntimeExports.jsxs("div",{children:[jsxRuntimeExports.jsx("p",{style:{margin:"0 0 8px",fontSize:"0.72rem",fontWeight:700,textTransform:"uppercase",letterSpacing:"0.08em",color:"rgba(255,255,255,0.6)"},children:D("footer.connectLabel")}),jsxRuntimeExports.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"6px"},children:[[{href:"https://www.facebook.com/thaygiaotin90",label:"Facebook"},{href:"https://www.tiktok.com/@thaygiao.tin",label:"TikTok"},{href:"https://www.youtube.com/channel/UC66UEWfsar0kRJZmTMAg97A",label:"YouTube"},{href:"https://zalo.me/0363357745",label:"Zalo"},{href:"https://zalo.me/g/e5deskioajurvq6hbzkp",label:"Cộng đồ
506ng Zalo"}].map(W=>jsxRuntimeExports.jsx("a",{href:W.href,target:"_blank",rel:"noopener noreferrer",style:{color:"rgba(255,255,255,0.85)",fontSize:"0.85rem",textDecoration:"none"},onMouseEnter:K=>K.currentTarget.style.color="#fff",onMouseLeave:K=>K.currentTarget.style.color="rgba(255,255,255,0.85)",children:W.label},W.href)),jsxRuntimeExports.jsx("a",{href:"#",onClick:W=>{W.preventDefault(),S(!0)},style:{color:"rgba(255,255,255,0.85)",fontSize:"0.85rem",textDecoration:"none"},onMouseEnter:W=>W.currentTarget.style.color="#fff",onMouseLeave:W=>W.currentTarget.style.color="rgba(255,255,255,0.85)",children:"Email"})]})]}),jsxRuntimeExports.jsxs("div",{children:[jsxRuntimeExports.jsx("p",{style:{margin:"0 0 8px",fontSize:"0.72rem",fontWeight:700,textTransform:"uppercase",letterSpacing:"0.08em",color:"rgba(255,255,255,0.6)"},children:D("footer.legalLabel")}),jsxRuntimeExports.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"6px"},children:[jsxRuntimeExports.jsx("a",{href:"/blog/",style:{color:"rgba(255,255,255,0.85)",fontSize:"0.85rem",textDecoration:"none"},onMouseEnter:W=>W.currentTarget.style.color="#fff",onMouseLeave:W=>W.currentTarget.style.color="rgba(255,255,255,0.85)",children:"Blog"}),[{to:"/bang-gia",label:D("footer.policy1")},{to:"/chinh-sach-bao-mat",label:D("footer.policy2")},{to:"/dieu-khoan-su-dung",label:D("footer.policy3")},{to:"/chinh-sach-giao-nhan",label:D("footer.policy4")},{to:"/gioi-thieu",label:D("footer.policy5")}].map(W=>jsxRuntimeExports.jsx(Link$1,{to:W.to,style:{color:"rgba(255,255,255,0.85)",fontSize:"0.85rem",textDecoration:"none"},onMouseEnter:K=>K.currentTarget.style.color="#fff",onMouseLeave:K=>K.currentTarget.style.color="rgba(255,255,255,0.85)",children:W.label},W.to))]})]}),jsxRuntimeExports.jsx("div",{children:jsxRuntimeExports.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"10px"},children:jsxRuntimeExports.jsxs(motion.button,{onClick:()=>window.open("https://www.youtube.com/playlist?list=PLxgUnJXYXs7Lr3c_2gr4EmIMcRcGRFq1o","_blank","noopener,noreferrer"),style:{padding:"7px 14px",fontSize:"0.83rem",background:"rgba(255,255,255,0.08)",border:"1px solid rgba(255,255,255,0.18)",borderRadius:"6px",color:"rgba(255,255,255,0.85)",cursor:"pointer",fontWeight:500,display:"flex",alignItems:"center",gap:"6px",width:"fit-content"},title:D("footer.guideTooltip"),whileHover:{scale:1.03},whileTap:{scale:.97},children:[jsxRuntimeExports.jsx("span",{children:"❓"}),jsxRuntimeExports.jsx("span",{children:D("footer.guide")})]})})})]}),jsxRuntimeExports.jsxs("div",{style:{borderTop:"1px solid rgba(255,255,255,0.2)",paddingTop:"14px",display:"flex",alignItems:"center",justifyContent:"space-between",flexWrap:"wrap",gap:"8px"},children:[jsxRuntimeExports.jsx("p",{style:{margin:0,fontSize:"0.82rem",color:"rgba(255,255,255,0.8)"},children:D("footer.copyright")}),jsxRuntimeExports.jsx("p",{style:{margin:0,fontSize:"0.75rem",color:"rgba(255,255,255,0.5)"},children:(()=>{const W="2026-09-18T01:16:01.286Z",K=new Date(W);if(isNaN(K.getTime()))return null;const Y=ee=>String(ee).padStart(2,"0");return D("footer.buildTime",{time:`${Y(K.getHours())}:${Y(K.getMinutes())}`,date:`${Y(K.getDate())}/${Y(K.getMonth()+1)}/${K.getFullYear()}`})})()})]})]}),T&&jsxRuntimeExports.jsx("div",{style:{position:"fixed",inset:0,zIndex:9999,display:"flex",alignItems:"center",justifyContent:"center",background:"rgba(0,0,0,0.5)"},onClick:()=>S(!1),children:jsxRuntimeExports.jsxs("div",{style:{background:"#fff",borderRadius:12,padding:"24px 32px",maxWidth:400,textAlign:"center",boxShadow:"0 8px 30px rgba(0,0,0,0.2)"},onClick:W=>W.stopPropagation(),children:[jsxRuntimeExports.jsx("p",{style:{margin:"0 0 8px",fontWeight:600,fontSize:"1rem"},children:D("emailModal.title")}),jsxRuntimeExports.jsx("p",{style:{margin:0,fontSize:"1.1rem",color:"#1976d2",wordBreak:"break-all"},children:"[email protected]"}),jsxRuntimeExports.jsx("button",{onClick:()=>S(!1),style:{marginTop:16,padding:"6px 20px",border:"1px solid #ccc",borderRadius:6,background:"#f5f5f5",cursor:"pointer"},children:D("emailModal.btnClose")})]})}),jsxRuntimeExports.jsx(HelpVideoModal,{isOpen:o,onClose:()=>u(!1),videoId:"HgngfPh9esA",title:D("helpModal.title"),description:D("helpModal.description")}),jsxRuntimeExports.jsx(UpgradeModal,{feature:_,open:E,onClose:()=>C(!1)}
506),jsxRuntimeExports.jsx(UpdateNotification,{}),reactDomExports.createPortal(jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[R&&jsxRuntimeExports.jsxs("div",{className:"earn-sticker",style:{position:"fixed",zIndex:9e3,width:80,height:80,borderRadius:16,background:"linear-gradient(135deg, #f59e0b, #ef4444)",boxShadow:"0 4px 16px rgba(239,68,68,0.45)",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",cursor:"pointer",padding:"6px 4px",textAlign:"center",userSelect:"none"},onClick:()=>j(!0),children:[jsxRuntimeExports.jsx("button",{onClick:W=>{W.stopPropagation(),localStorage.setItem(P,String(Date.now())),I(!1)},style:{position:"absolute",top:-6,left:-6,width:20,height:20,borderRadius:"50%",background:"rgba(0,0,0,0.55)",border:"none",color:"#fff",fontSize:"0.65rem",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",lineHeight:1,padding:0},children:"✕"}),jsxRuntimeExports.jsx("span",{style:{fontSize:"1.3rem",lineHeight:1},children:"💰"}),jsxRuntimeExports.jsxs("span",{style:{fontSize:"0.55rem",fontWeight:800,color:"#fff",lineHeight:1.3,marginTop:4},children:["Kiếm tiền",`
507`,"từ GVĐM"]})]}),L&&jsxRuntimeExports.jsx("div",{style:{position:"fixed",inset:0,zIndex:9999,display:"flex",alignItems:"center",justifyContent:"center",background:"rgba(0,0,0,0.55)",padding:16},onClick:()=>j(!1),children:jsxRuntimeExports.jsxs("div",{style:{background:"#fff",borderRadius:20,maxWidth:480,width:"100%",boxShadow:"0 12px 40px rgba(0,0,0,0.25)",overflow:"hidden"},onClick:W=>W.stopPropagation(),children:[jsxRuntimeExports.jsxs("div",{style:{background:"linear-gradient(135deg, #f59e0b, #ef4444)",padding:"18px 24px",color:"#fff",position:"relative"},children:[jsxRuntimeExports.jsx("button",{onClick:()=>j(!1),style:{position:"absolute",top:12,right:14,background:"rgba(255,255,255,0.2)",border:"none",color:"#fff",fontSize:"1rem",width:28,height:28,borderRadius:"50%",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center"},children:"✕"}),jsxRuntimeExports.jsx("div",{style:{fontSize:"2rem",marginBottom:6},children:"💰"}),jsxRuntimeExports.jsx("h2",{style:{margin:0,fontSize:"1.15rem",fontWeight:800},children:"Kiếm tiền từ Giáo viên đổi mới"})]}),jsxRuntimeExports.jsxs("div",{style:{padding:"20px 24px",fontSize:"0.92rem",color:"#333",lineHeight:1.8},children:[jsxRuntimeExports.jsx("p",{style:{margin:"0 0 12px",fontWeight:600},children:"Chào mừng bạn đến với Giáo viên đổi mới!"}),jsxRuntimeExports.jsx("p",{style:{margin:"0 0 14px"},children:"Bạn có thể kiếm thêm thu nhập từ việc đăng ký làm cộng tác viên ở trang chúng tôi theo những cách sau:"}),jsxRuntimeExports.jsx("div",{style:{background:"#fff8f0",borderRadius:12,padding:"12px 16px",marginBottom:10,borderLeft:"4px solid #f59e0b"},children:jsxRuntimeExports.jsxs("p",{style:{margin:0},children:[jsxRuntimeExports.jsx("strong",{children:"1."})," Đăng ký ",jsxRuntimeExports.jsx("strong",{children:"mã giảm giá"})," và giới thiệu tới bạn bè, người quen của mình. Chiết khấu ",jsxRuntimeExports.jsx("strong",{style:{color:"#ef4444"},children:"30%"})]})}),jsxRuntimeExports.jsx("div",{style:{textAlign:"center",margin:"6px 0",fontWeight:700,color:"#888"},children:"HOẶC"}),jsxRuntimeExports.jsx("div",{style:{background:"#f0f4ff",borderRadius:12,padding:"12px 16px",marginBottom:16,borderLeft:"4px solid #6366f1"},children:jsxRuntimeExports.jsxs("p",{style:{margin:0},children:[jsxRuntimeExports.jsx("strong",{children:"2."})," Đăng ký ",jsxRuntimeExports.jsx("strong",{children:"xây dựng các mini app, phần mềm AI"})," hữu ích. Chiết khấu ",jsxRuntimeExports.jsx("strong",{style:{color:"#6366f1"},children:"70%"})]})}),jsxRuntimeExports.jsxs("p",{style:{margin:0,textAlign:"center",fontWeight:600,color:"#ef4444"},children:["Liên hệ admin theo SĐT: ",jsxRuntimeExports.jsx("a",{href:"https://zalo.me/0363357745",target:"_blank",rel:"noopener noreferrer",style:{color:"#ef4444"},children:"0363.357.745"}
507)," để biết thêm chi tiết!"]})]})]})})]}),document.body),jsxRuntimeExports.jsx(ChatbotWidget,{})]})}const StudentPlayerPage=lazyRetry(()=>__vitePreload(()=>import("./StudentPlayerPage-d0XVZTtR.js"),__vite__mapDeps([30,2,31,32,33,4,5,34,35,27,1,3,36]))),AIToolsPage=lazyRetry(()=>__vitePreload(()=>import("./AIToolsPage-CaRdKCmu.js"),__vite__mapDeps([37,2,1,3,4,5,38]))),EdutechExtensionsPage=lazyRetry(()=>__vitePreload(()=>import("./EdutechExtensionsPage-DdhVz3WL.js"),__vite__mapDeps([39,2,3,1,4,5,40]))),PaymentHistoryPage=lazyRetry(()=>__vitePreload(()=>import("./PaymentHistoryPage-Bd6WbMDq.js"),__vite__mapDeps([41,2,1,42,43,3,4,5]))),TeachingMaterialsPage=lazyRetry(()=>__vitePreload(()=>import("./TeachingMaterialsPage-BxUzp-E9.js"),__vite__mapDeps([44,2,1,3,4,5,45]))),JoinPage=lazyRetry(()=>__vitePreload(()=>import("./JoinPage-DtxsIBmd.js"),__vite__mapDeps([46,3,2,47,1,48,4,5,49,16,50,51,52,53,54,55,56,57,58,59,60,61]))),PlayAssignmentPage=lazyRetry(()=>__vitePreload(()=>import("./PlayAssignmentPage-CXOeOaN8.js"),__vite__mapDeps([62,2,47,1,48,3,4,5,50,51,52,53,54,55,56,33,63,64,65,57,58,61,66]))),AssignmentHistoryPage=lazyRetry(()=>__vitePreload(()=>import("./AssignmentHistoryPage-Dc2vrjVg.js"),__vite__mapDeps([67,2,68,47,1,48,3,4,5,50,51,52,53,54,55,56,69,70,71,60,59,72,73,65,74,75,76,77,34,78,57,58,79,80,81]))),ImageAssignmentReportPage=lazyRetry(()=>__vitePreload(()=>import("./ImageAssignmentReportPage-eQR0ufIM.js"),__vite__mapDeps([82,2,47,1,48,3,4,5,57,58,61,83,78,64,71,84,54,55]))),QuizAssignmentReportPage=lazyRetry(()=>__vitePreload(()=>import("./QuizAssignmentReportPage-RRuzzM14.js"),__vite__mapDeps([85,2,47,1,48,3,4,5,86,57,58,61,52,53,83,87,88,55,54,71]))),PrivacyPolicyPage=lazyRetry(()=>__vitePreload(()=>import("./PrivacyPolicyPage-DGo7-MXi.js"),__vite__mapDeps([89,2,1,3,4,5]))),TermsOfServicePage=lazyRetry(()=>__vitePreload(()=>import("./TermsOfServicePage-BIUu_1pn.js"),__vite__mapDeps([90,2,1,3,4,5]))),AboutPage=lazyRetry(()=>__vitePreload(()=>import("./AboutPage-D1kbsdmP.js"),__vite__mapDeps([91,2,1,3,4,5]))),ShippingPolicyPage=lazyRetry(()=>__vitePreload(()=>import("./ShippingPolicyPage-Bt_Dsimp.js"),__vite__mapDeps([92,2,1,3,4,5]))),PricingPage=lazyRetry(()=>__vitePreload(()=>import("./PricingPage-BxjXoplB.js"),__vite__mapDeps([93,2,1,3,4,5]))),WheelQuizPage=lazyRetry(()=>__vitePreload(()=>import("./WheelQuizPage-K6AfDMNW.js"),__vite__mapDeps([94,2,1,95,96,97,98,99,71,100,81,101,102,103,104,15,7,16,105,106,107,108,64,109,110,111,20,4,5,34,112,3,70,113,114,115,52,53,116,117,118,119,120,121,79,122,123,63,124,125,80,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,74,142,143,51,144,78,145,146,147,148,149]))),ClassManagerPage=lazyRetry(()=>__vitePreload(()=>import("./ClassManagerPage-Dy0VQzJa.js"),__vite__mapDeps([150,2,151,152,71,153,128,52,53,103,104,97,98,99,100,81,101,15,7,1,16,120,105,154,61,155,79,156,3,4,5,157]))),InteractiveVideoPage=lazyRetry(()=>__vitePreload(()=>import("./InteractiveVideoPage-B5Pz3dYc.js"),__vite__mapDeps([158,2,27,1,3,4,5,135,129,34,133,16,71,81,128,134,122,123,63,124,125,80,111,103,20,112,70,113,114,115,52,53,64,116,117,31,32,33,35,159,69,47,48,50,51,54,55,56,160,161,59,72,162,131,132,109,110,143,104,97,98,99,100,101,106,96,95,163]))),PanoramaMuseum=lazyRetry(()=>__vitePreload(()=>import("./PanoramaMuseum-DIFKAPUo.js"),__vite__mapDeps([164,2,103,96,104,98,69,71,131,132,52,1,16,165,3,166,167,48,4,5,143,168]))),PanoramaViewer=lazyRetry(()=>__vitePreload(()=>import("./PanoramaViewer-CWMlWebd.js"),__vite__mapDeps([169,2,167,1,48,3,4,5,165,166,170,171]))),PanoramaEditor=lazyRetry(()=>__vitePreload(()=>import("./PanoramaEditor-lO_XMXn8.js"),__vite__mapDeps([172,2,103,167,1,48,3,4,5,173,16,170,174]))),WalkableGalleryEditor=lazyRetry(()=>__vitePreload(()=>import("./WalkableGalleryEditor-B28wEmqZ.js"),__vite__mapDeps([175,2,103,167,1,48,3,4,5,173,16,170,174,69,49,176,71,64,59,72,131,132,52,53,166,177]))),StudentGalleryUploadPage=lazyRetry(()=>__vitePreload(()=>import("./StudentGalleryUploadPage-DkQvqWud.js"),__vite__mapDeps([178,2,49,1,16,48,3,4,5]))),SharePanoramaViewer=lazyRetry(()=>__vitePreload(()=>import("./SharePanoramaViewer-DOW88Gmy.js"),__vite__mapDeps([179,2,167,1,48,3,4,5,165,166,170,171]))),ExhibitionViewer=lazyRetry(()=>__vitePreload(()=>import("./ExhibitionViewer-3Do72Ic-.js"),__vite__mapDeps([180,2,167,1,48,3,4,5,165,166,171]))),QuizGamePage=lazyRetry(()=>__vitePreload(()=>import("./QuizGamePage-AEHN4TiS.js"),__vite__mapDeps([181,2,96,1,95,72,100,84,120,140,34,4,5,81,182,183,86,126,127,128,129,71,130,103,16,122,123,63,124,125,80,133,3,134,119,121,79,131,132,52,53,153,184,58,22,7,141,74,142,110,51,115,104,97,98,99,101,106,107,108,64,159,69,47,48,50,54,55,56,160,
507161,59,162,109,143,113,70,105,185]))),QuizPreviewPage=lazyRetry(()=>__vitePreload(()=>import("./QuizPreviewPage-Ccg9_QpN.js"),__vite__mapDeps([186,2,51,52,53,61,187,188,56,127,126,81,128,129,4,5,34,71,130,189,152,151,22,1,7,190,183,64,33,86,19,121,3]))),HandSlashQuiz=lazyRetry(()=>__vitePreload(()=>import("./HandSlashQuiz-BPykzyxT.js"),__vite__mapDeps([191,2,51,52,53,192,193,4,5,34,146,194,195,196,64,148,3,1,8,7,197,198,152,101]))),HandSlashQuizPage=lazyRetry(()=>__vitePreload(()=>import("./HandSlashQuizPage-CpzoDyc8.js"),__vite__mapDeps([199,2,96,104,97,98,99,71,100,81,101,106,107,108,64,8,1,7,197,159,69,47,48,3,4,5,50,51,52,53,54,55,56,160,161,59,72,162,131,132,109,110,143,105,138,139,112,70,113,114,115,140,34,200,123,136,63,103,135,129,111,20,116,117,133,16,128,134,141,74,142,195,196,194,144,201]))),ShareHandSlashQuiz=lazyRetry(()=>__vitePreload(()=>import("./ShareHandSlashQuiz-T-INMuQD.js"),__vite__mapDeps([202,2,51,52,53,192,193,4,5,34,146,194,195,196,64,148,3,1,8,7,198,152,101]))),FlyingWordsGamePage=lazyRetry(()=>__vitePreload(()=>import("./FlyingWordsGamePage-0W_jU3LF.js"),__vite__mapDeps([203,2,96,115,104,97,98,99,71,100,81,101,106,21,1,3,4,5,204,159,69,47,48,50,51,52,53,54,55,56,160,161,59,72,162,131,132,109,110,143,113,70,105,135,129,34,103,122,123,63,124,125,80,141,74,142,144,205,121,120,206]))),PlayFlyingWordsPage=lazyRetry(()=>__vitePreload(()=>import("./PlayFlyingWordsPage-CGQau0Ru.js"),__vite__mapDeps([207,2,51,52,53,208,193,4,5,34,147,148,209,125,3,1,21,204,210,152,101]))),ShareFlyingWordsPage=lazyRetry(()=>__vitePreload(()=>import("./ShareFlyingWordsPage-DdxVJfat.js"),__vite__mapDeps([211,2,51,52,53,208,193,4,5,34,147,148,209,125,3,1,21,210,152,101]))),HeadTiltQuizPage=lazyRetry(()=>__vitePreload(()=>import("./HeadTiltQuizPage-Bnyos8AO.js"),__vite__mapDeps([212,2,103,104,97,98,99,71,100,81,101,106,107,108,64,6,1,7,213,159,69,47,48,3,4,5,50,51,52,53,54,55,56,160,161,59,72,162,131,132,109,110,143,105,111,20,34,112,70,113,114,115,116,117,118,119,120,121,79,122,123,63,124,125,80,126,127,128,129,130,16,133,134,135,136,137,138,139,140,200,195,196,194,141,74,142,153,95,96,214]))),HeadTiltQuiz=lazyRetry(()=>__vitePreload(()=>import("./HeadTiltQuiz-BpSRv1g5.js"),__vite__mapDeps([215,3,2,6,1,7,51,52,53,213,152,101,4,5]))),FlashcardPage=lazyRetry(()=>__vitePreload(()=>import("./FlashcardPage-C0jP2FXb.js"),__vite__mapDeps([216,2,96,1,95,104,97,98,99,71,100,81,101,106,107,108,64,25,7,43,3,4,5,159,69,47,48,50,51,52,53,54,55,56,160,161,59,72,162,131,132,109,110,143,70,16,133,128,134,122,123,63,124,125,80,135,129,34,141,74,142,103,217,194,146,218,219]))),MindMapPage=lazyRetry(()=>__vitePreload(()=>import("./MindMapPage-BA4qxQNT.js"),__vite__mapDeps([220,2,96,1,95,104,97,98,99,71,100,81,101,106,107,108,64,26,7,109,110,143,103,135,129,4,5,34,141,74,142,131,132,52,3,221]))),TurnBasedGamePage=lazyRetry(()=>__vitePreload(()=>import("./TurnBasedGamePage-DLKBzuwm.js"),__vite__mapDeps([222,2,115,103,104,97,98,99,71,100,81,101,106,107,108,64,14,1,7,143,159,69,47,48,3,4,5,50,51,52,53,54,55,56,160,161,59,72,162,131,132,109,110,113,70,105,141,74,142,111,20,34,112,114,116,117,118,119,120,121,79,122,123,63,124,125,80,126,127,128,129,130,16,133,134,135,136,137,138,139,140,200,153,223,147,148,95,96,224]))),VersusGamePage=lazyRetry(()=>__vitePreload(()=>import("./VersusGamePage-c3pGMFW-.js"),__vite__mapDeps([225,2,103,1,47,48,3,4,5,143,109,110,104,97,98,99,71,100,81,101,105,51,52,53,111,20,34,112,70,113,114,115,64,116,117,118,119,120,121,79,122,123,63,124,125,80,126,127,128,129,130,131,132,16,133,134,135,136,137,138,139,140,200,141,74,142,153,61,160,159,69,50,54,55,56,161,59,72,162,95,96,226]))),VersusLobbyPage=lazyRetry(()=>__vitePreload(()=>import("./VersusLobbyPage-B1PdT1ZK.js"),__vite__mapDeps([227,2,160,1,3,4,5]))),VersusMatchRoom=lazyRetry(()=>__vitePreload(()=>import("./VersusMatchRoom-CBFiXDss.js"),__vite__mapDeps([228,2,34,4,5,160,1,47,48,3,147,63]))),QuestionBankPage=lazyRetry(()=>__vitePreload(()=>import("./QuestionBankPage-UhIyA4gK.js"),__vite__mapDeps([229,3,2,103,68,20,1,4,5,34,53,52,81,112,70,113,114,115,64,124,57,58,116,71,78,75]))),FlipPuzzleGamePage=lazyRetry(()=>__vitePreload(()=>import("./FlipPuzzleGamePage-C15xlmzI.js"),__vite__mapDeps([230,2,103,96,1,95,139,112,3,70,113,114,115,52,53,64,16,195,196,194,111,20,4,5,34,116,81,118,119,120,121,79,122,71,123,63,124,125,80,126,127,128,129,130,131,132,133,134,135,136,11
5077,12,7,140,141,74,142,110,159,69,47,48,50,51,54,55,56,160,161,59,72,162,109,143,104,97,98,99,100,101,106,107,108,231,232,146,147,148,233]))),ShareFlipPuzzlePage=lazyRetry(()=>__vitePreload(()=>import("./ShareFlipPuzzlePage-Dr9PRrmb.js"),__vite__mapDeps([234,2,231,232,34,4,5,146,194,195,196,64,147,148,1,103,12,7,3,233]))),KnowledgeTrainGamePage=lazyRetry(()=>__vitePreload(()=>import("./KnowledgeTrainGamePage-XOOqX8Kj.js"),__vite__mapDeps([235,2,103,96,1,95,139,112,3,70,113,114,115,52,53,64,111,20,4,5,34,116,81,135,129,133,16,71,128,134,122,123,63,124,125,80,205,117,141,74,142,110,131,132,13,7,236,148,237,159,69,47,48,50,51,54,55,56,160,161,59,72,162,109,143,104,97,98,99,100,101,106,107,108,238]))),ShareKnowledgeTrainPage=lazyRetry(()=>__vitePreload(()=>import("./ShareKnowledgeTrainPage-DByuwsz8.js"),__vite__mapDeps([239,2,236,148,34,4,5,237,1,103,13,7,3]))),PacedQuizPage=lazyRetry(()=>__vitePreload(()=>import("./PacedQuizPage-C3rpMnBb.js"),__vite__mapDeps([240,2,96,1,95,17,18,19,20,7,77,111,103,4,5,34,112,3,70,113,114,115,52,53,64,116,81,117,118,119,120,121,79,122,71,123,63,124,125,80,126,127,128,129,130,131,132,16,133,134,135,136,138,139,140,141,74,142,110,104,97,98,99,100,101,106,107,108,143,241,48,159,69,47,50,51,54,55,56,160,161,59,72,162,109,57,58,242]))),TeacherControlScreen=lazyRetry(()=>__vitePreload(()=>import("./TeacherControlScreen-PMJdIVMc.js"),__vite__mapDeps([243,2,147,69,241,1,48,3,4,5,77,18,19,187,188,56,127,126,81,128,129,34,71,130,189,244,146,245,57,58,209,101,80,88,246,151,152,54]))),StudentAnswerPage=lazyRetry(()=>__vitePreload(()=>import("./StudentAnswerPage-HGOG3fl-.js"),__vite__mapDeps([247,2,147,241,1,48,3,4,5,77,18,19,248,187,188,56,127,126,81,128,129,34,71,130,189,146,245,194,57,58,74,209,80,101,63,124,54]))),TeamSelectionPage=lazyRetry(()=>__vitePreload(()=>import("./TeamSelectionPage-vmY0fYhr.js"),__vite__mapDeps([249,2,241,1,48,3,4,5,57,58]))),LeaderboardPage=lazyRetry(()=>__vitePreload(()=>import("./LeaderboardPage-CXw1E2r_.js"),__vite__mapDeps([250,2,241,1,48,3,4,5,76,77,34,78,54,73,71,148,57,58,56]))),CrosswordPuzzlePage=lazyRetry(()=>__vitePreload(()=>import("./CrosswordPuzzlePage-B_We3CDP.js"),__vite__mapDeps([251,2,1,95,103,96,139,112,3,70,113,114,115,52,53,64,154,252,24,118,119,120,121,79,122,71,123,63,124,125,81,80,126,127,128,129,4,5,34,130,131,132,16,133,134,135,20,136,111,116,117,23,7,141,74,142,110,104,97,98,99,100,101,106,107,108,159,69,47,48,50,51,54,55,56,160,161,59,72,162,109,143,253,146,194,61,254,195,196,147,148,188,255,256,65,152,151,257]))),ShareCrosswordPage=lazyRetry(()=>__vitePreload(()=>import("./ShareCrosswordPage-CfbU2o24.js"),__vite__mapDeps([258,2,1,103,253,146,194,61,254,127,124,80,252,24,34,4,5,195,196,64,147,148,23,7,3,257]))),TugOfWarGamePage=lazyRetry(()=>__vitePreload(()=>import("./TugOfWarGamePage-CUlAf2XM.js"),__vite__mapDeps([259,2,103,96,1,95,111,20,4,5,34,112,3,70,113,114,115,52,53,64,116,81,117,0,118,119,120,121,79,122,71,123,63,124,125,80,126,127,128,129,130,131,132,16,133,134,135,136,138,139,140,137,200,141,74,142,110,159,69,47,48,50,51,54,55,56,160,161,59,72,162,109,143,100,108,104,97,98,99,101,260,244,146,147,148,261,262]))),ShareTugOfWarPage=lazyRetry(()=>__vitePreload(()=>import("./ShareTugOfWarPage-BPAZfbZf.js"),__vite__mapDeps([263,2,0,1,3,4,5,260,34,244,146,147,148,261,103,262]))),StarBagGamePage=lazyRetry(()=>__vitePreload(()=>import("./StarBagGamePage-l8wVgVNh.js"),__vite__mapDeps([264,2,103,96,1,95,111,20,4,5,34,112,3,70,113,114,115,52,53,64,116,81,117,9,7,118,119,120,121,79,122,71,123,63,124,125,80,126,127,128,129,130,131,132,16,133,134,135,136,138,139,140,137,200,51,141,74,142,110,159,69,47,48,50,54,55,56,160,161,59,72,162,109,143,104,97,98,99,100,101,106,107,108,265,244,147,148,266,267]))),ShareStarBagPage=lazyRetry(()=>__vitePreload(()=>import("./ShareStarBagPage-DIn2kGpM.js"),__vite__mapDeps([268,2,9,1,7,265,51,52,53,34,4,5,244,147,148,266,103,3,267]))),MinesweeperPage=lazyRetry(()=>__vitePreload(()=>import("./MinesweeperPage-DLqk8gnO.js"),__vite__mapDeps([269,2,103,96,1,95,111,20,4,5,34,112,3,70,113,114,115,52,53,64,116,81,117,118,119,120,121,79,122,71,123,63,124,125,80,126,127,128,129,130,131,132,16,133,134,135,136,138,139,140,137,200,141,74,142,110,10,7,159,69,47,48,50,51,54,55,56,160,
507161,59,72,162,109,143,104,97,98,99,100,101,106,107,108,270,146,148,271,272,273]))),ShareMinesweeperPage=lazyRetry(()=>__vitePreload(()=>import("./ShareMinesweeperPage-D5QOLlCb.js"),__vite__mapDeps([274,2,10,1,7,270,4,5,34,146,148,271,272,103,3]))),ClaimSharedGamePage=lazyRetry(()=>__vitePreload(()=>import("./ClaimSharedGamePage-3zaDU92r.js"),__vite__mapDeps([275,2,276,110,1,50,3,51,52,53,54,55,56,4,5]))),InteractiveImagePage=lazyRetry(()=>__vitePreload(()=>import("./InteractiveImagePage-dkl1lDni.js"),__vite__mapDeps([277,2,1,95,103,96,28,7,111,20,4,5,34,112,3,70,113,114,115,52,53,64,116,81,135,129,122,71,123,63,124,125,80,133,16,128,134,278,279,141,74,142,110,131,132,159,69,47,48,50,51,54,55,56,160,161,59,72,162,109,143,104,97,98,99,100,101,106,107,108,280]))),ShareInteractiveImagePage=lazyRetry(()=>__vitePreload(()=>import("./ShareInteractiveImagePage-BdrohYVq.js"),__vite__mapDeps([281,2,28,1,7,278,4,5,34,279,3]))),NoiseTrackerPage=lazyRetry(()=>__vitePreload(()=>import("./NoiseTrackerPage-CrlrlnvS.js"),__vite__mapDeps([282,2,1,64,3,4,5,283]))),PoseQuizPage=lazyRetry(()=>__vitePreload(()=>import("./PoseQuizPage-DoHnm3-L.js"),__vite__mapDeps([284,2,103,96,1,95,11,7,143,104,97,98,99,71,100,81,101,106,107,108,64,159,69,47,48,3,4,5,50,51,52,53,54,55,56,160,161,59,72,162,131,132,109,110,184,58,195,196,194,138,139,112,70,113,114,115,140,34,137,200,123,136,63,111,20,116,117,118,119,120,121,79,122,124,125,80,126,127,128,129,130,16,133,134,135,141,74,142,146,285,147,61,209,286,151,152,287,148,233]))),JourneyDashboardPage=lazyRetry(()=>__vitePreload(()=>import("./JourneyDashboardPage-DdbltMRO.js"),__vite__mapDeps([288,2,69,103,104,289,1,100,81,276,290,3,4,5,291,148,116,292,254,74,63,71,135,129,34,111,20,112,70,113,114,115,52,53,64,117,154,176,120,132,57,58,80,72]))),JourneyCreatorPage=lazyRetry(()=>__vitePreload(()=>import("./JourneyCreatorPage-GAbD0MFa.js"),__vite__mapDeps([293,2,289,1,290,3,4,5,57,58,61,71,81,120,154]))),JourneyPlayerPage=lazyRetry(()=>__vitePreload(()=>import("./JourneyPlayerPage-Cr7IehJ8.js"),__vite__mapDeps([294,3,2,103,290,1,4,5,291,289,276,59,60,64,116,115,34,63,125,54,101]))),CommunityLibraryPage=lazyRetry(()=>__vitePreload(()=>import("./CommunityLibraryPage-DRyGqQc8.js"),__vite__mapDeps([295,2,296,68,142,1,110,131,132,52,99,71,114,105,3,4,5]))),AdminApp=lazyRetry(()=>__vitePreload(()=>import("./AdminApp-B8J0DjiI.js"),__vite__mapDeps([297,2,292,64,298,116,115,1,162,42,43,3,114,246,71,99,120,81,136,75,52,53,156,54,182,254,299,63,4,5]))),PaperModePage=lazyRetry(()=>__vitePreload(()=>import("./PaperModePage-C84AUVoC.js"),__vite__mapDeps([300,2,96,104,1,95,301,15,7,16,43,3,302,303,304,305,200,123,71,81,136,63,114,131,132,52,53,102,103,97,98,99,100,101,105,106,107,108,64,109,110,111,20,4,5,34,112,70,113,115,116,117,118,119,120,121,79,122,124,125,80,126,127,128,129,130,133,134,135,137,138,139,140,141,74,142,296,306]))),SessionControlPage=lazyRetry(()=>__vitePreload(()=>import("./SessionControlPage-AgxsmEc_.js"),__vite__mapDeps([307,2,308,1,15,7,16,301,43,3,302,303,304,309,310,146,69,4,5,34,57,58,311,71,123,127,255,87,88,80,151,152,63]))),ResultsPage=lazyRetry(()=>__vitePreload(()=>import("./ResultsPage-BIanAjg3.js"),__vite__mapDeps([312,2,304,1,303,309,148,63,61,73,189,71,3,4,5,313]))),ScanPage=lazyRetry(()=>__vitePreload(()=>import("./ScanPage-B2vEd0Qv.js"),__vite__mapDeps([314,3,2,302,309,308,1,310,146,303,315,4,5]))),FaceRandomPage=lazyRetry(()=>__vitePreload(()=>import("./FaceRandomPage-Cibh3n4d.js"),__vite__mapDeps([316,2,69,96,104,102,103,1,97,98,99,71,100,81,101,15,7,16,105,106,107,108,64,109,110,111,20,4,5,34,112,3,70,113,114,115,52,53,116,117,118,119,120,121,79,122,123,63,124,125,80,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,74,142,194,196,311,78,153,61,155,305,144,145,317,95,318]))),FaceRandomScanPage=lazyRetry(()=>__vitePreload(()=>import("./FaceRandomScanPage-BjFpgOGC.js"),__vite__mapDeps([319,2,317,1,310,3,4,5]))),ScavengerHuntPage=lazyRetry(()=>__vitePreload(()=>import("./ScavengerHuntPage-B_pUbEn3.js"),__vite__mapDeps([320,2,96,104,97,98,99,71,100,81,101,1,95,321,48,3,4,5,50,51,52,53,54,55,56,118,119,120,121,79,103,122,123,63,124,125,80,126,127,128,129,34,130,131,132,16,133,134,135,20,136,111,112,70,113,114,115,64,116,117,138,139,140,137,144,188,59,73,69,72,109,110,322,323]))),PlayHuntPage=lazyRetry(()=>__vitePreload(()=>import("./PlayHuntPage-9W2OYNL-.js"),__vite__mapDeps([324,2,1,321,48,3,4,5,50,51,52,53,54,55,56,271,71,103,34,123,322,114,59,60,57,58,325]))),HtmlEmbedGamePage=lazyRetry(()=>__vitePreload(()=>import("./HtmlEmbedGamePage-ZcPcnsLf.js"),__vite__mapDeps([326,2,154,79,124,298,103,96,1,95,115,101,143,104,97,98,99,71,100,81,159,69,47,48,3,4,5,50,51,52,53,54,55,56,160,
507161,59,72,162,131,132,109,110,233,262]))),PasteAiPage=lazyRetry(()=>__vitePreload(()=>import("./PasteAiPage-CBU4Y29n.js"),__vite__mapDeps([327,2,3,1,4,5,328]))),CtvMiniAppsPage=lazyRetry(()=>__vitePreload(()=>import("./CtvMiniAppsPage-DFz_9Awe.js"),__vite__mapDeps([329,2,330,1,299,133,3,16,71,81,128,134,4,5,331]))),MiniAppsBrowsePage=lazyRetry(()=>__vitePreload(()=>import("./MiniAppsBrowsePage-Bt4_hkl7.js"),__vite__mapDeps([332,2,1,330,299,3,4,5,333]))),ToolLoader=()=>jsxRuntimeExports.jsxs("div",{style:{minHeight:"100vh",display:"flex",flexDirection:"column",paddingTop:"80px",boxSizing:"border-box"},children:[jsxRuntimeExports.jsx(Header,{}),jsxRuntimeExports.jsxs("div",{style:{flex:1,display:"flex",alignItems:"center",justifyContent:"center",flexDirection:"column",gap:"1rem"},children:[jsxRuntimeExports.jsx("div",{style:{width:"50px",height:"50px",border:"4px solid #e5e7eb",borderTopColor:"#10b981",borderRadius:"50%",animation:"spin 1s linear infinite"}}),jsxRuntimeExports.jsx("p",{style:{fontSize:"1.125rem",color:"#4b5563"},children:"Đang tải công cụ..."})]})]}),theme=createTheme({typography:{fontFamily:"'Segoe UI', 'Noto Sans', 'Noto Sans JP', -apple-system, BlinkMacSystemFont, sans-serif"}});function App(){return reactExports.useEffect(()=>{audioManager.init()},[]),jsxRuntimeExports.jsx(ThemeProvider,{theme,children:jsxRuntimeExports.jsx(HelmetProvider,{children:jsxRuntimeExports.jsx(AuthProvider,{children:jsxRuntimeExports.jsx(SubscriptionProvider,{children:jsxRuntimeExports.jsx(AIProvider,{children:jsxRuntimeExports.jsx(ConsoleProvider,{children:jsxRuntimeExports.jsx(EffectProvider,{children:jsxRuntimeExports.jsx(MindMapSessionProvider,{children:jsxRuntimeExports.jsxs(BrowserRouter,{children:[jsxRuntimeExports.jsx(GlobalEffectOverlay,{}),jsxRuntimeExports.jsx(AdminCopyRefreshBanner,{}),jsxRuntimeExports.jsx(MindMapFloatingSticker,{}),jsxRuntimeExports.jsxs(Routes,{children:[jsxRuntimeExports.jsx(Route,{path:"/",element:jsxRuntimeExports.jsx(LandingPage,{})}),jsxRuntimeExports.jsx(Route,{path:"/login",element:jsxRuntimeExports.jsx(LoginPage,{})}),jsxRuntimeExports.jsx(Route,{path:"/dashboard",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(HomePage,{})})}),jsxRuntimeExports.jsx(Route,{path:"/interactive-video",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(InteractiveVideoPage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/ai-tools",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(AIToolsPage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/tien-ich-giao-duc",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(EdutechExtensionsPage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/lich-su-thanh-toan",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(PaymentHistoryPage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/paste-ai",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(PasteAiPage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/question-bank",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(QuestionBankPage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/panorama-museum",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(PanoramaMuseum,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/panorama-museum/:roomId",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(PanoramaViewer,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/panorama-museum/:roomId/edit",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(PanoramaEditor,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/panorama-museum/:roomId/walkable-edit",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(WalkableGalleryEditor,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/exhibition/:exId",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(ExhibitionViewer,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/gallery-upload/:sessionId",element:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(StudentGalleryUploadPage,{})})}),jsxRuntimeExports.jsx(Route,{path:"/play/:lessonId",element:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(StudentPlayerPage,{})})}),jsxRuntimeExports.jsx(Route,{path:"/join",element:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(JoinPage,{})})}),jsxRuntimeExports.jsx(Route,{path:"/thamgia",element:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(JoinPage,{})})}),jsxRuntimeExports.jsx(Route,{path:"/assignment/:assignmentId",element:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(PlayAssignmentPage,{})})}),jsxRuntimeExports.jsx(Route,{path:"/assignments",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(AssignmentHistoryPage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/assignments/:assignmentId/image-report",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(ImageAssignmentReportPage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/assignments/:assignmentId/quiz-report",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(QuizAssignmentReportPage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/teaching-materials",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(TeachingMaterialsPage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/wheel-quiz",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(WheelQuizPage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/wheel-quiz/new/edit",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(WheelQuizPage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/wheel-quiz/:setId/edit",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(WheelQuizPage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/wheel-quiz/my-games",element:jsxRuntimeExports.jsx(Navigate,{to:"/wheel-quiz",replace:!0})}
507),jsxRuntimeExports.jsx(Route,{path:"/lop-hoc",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(ClassManagerPage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/lop-hoc/:classId",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(ClassManagerPage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/face-random",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(FaceRandomPage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/scavenger-hunt",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(ScavengerHuntPage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/html-embed-game",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(HtmlEmbedGamePage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/hunt/:sessionId",element:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(PlayHuntPage,{})})}),jsxRuntimeExports.jsx(Route,{path:"/hunt-preview/:huntId",element:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(PlayHuntPage,{})})}),jsxRuntimeExports.jsx(Route,{path:"/share/panorama/:roomId",element:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(SharePanoramaViewer,{})})}),jsxRuntimeExports.jsx(Route,{path:"/share/exhibition/:exId",element:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(ExhibitionViewer,{shared:!0})})}),jsxRuntimeExports.jsx(Route,{path:"/quiz-game",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(QuizGamePage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/quiz-game/:quizId/preview",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsxs("div",{style:{display:"flex",flexDirection:"column",height:"100vh",overflow:"hidden",paddingTop:"64px",boxSizing:"border-box"},children:[jsxRuntimeExports.jsx(Header,{}),jsxRuntimeExports.jsx("div",{style:{flex:1,minHeight:0,overflow:"hidden"},children:jsxRuntimeExports.jsx(QuizPreviewPage,{})})]})})})}),jsxRuntimeExports.jsx(Route,{path:"/hand-slash-quiz",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(HandSlashQuizPage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/hand-slash-quiz/:lessonId/edit",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(HandSlashQuizPage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/hand-slash-quiz/play/:lessonId",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(HandSlashQuiz,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/share/hand-slash-quiz/:shareId",element:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(ShareHandSlashQuiz,{})})}),jsxRuntimeExports.jsx(Route,{path:"/flying-words-game",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(FlyingWordsGamePage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/flying-words-game/:lessonId/edit",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(FlyingWordsGamePage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/flying-words-game/play/:lessonId",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(PlayFlyingWordsPage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/share/flying-words/:shareToken",element:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(ShareFlyingWordsPage,{})})}),jsxRuntimeExports.jsx(Route,{path:"/flashcard",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(FlashcardPage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/flashcard/:deckId/edit",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(FlashcardPage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/mind-map",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(MindMapPage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/mind-map/:mapId/edit",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(MindMapPage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/head-tilt-quiz",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(HeadTiltQuizPage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/head-tilt-quiz/:lessonId/edit",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(HeadTiltQuizPage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/head-tilt-quiz/play/:lessonId",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(HeadTiltQuiz,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/turn-based-game",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(TurnBasedGamePage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/turn-based-game/:gameId/edit",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(TurnBasedGamePage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/turn-based-game/play/:gameId",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(TurnBasedGamePage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/versus-game",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(VersusGamePage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/versus-game/new/edit",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(VersusGamePage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/versus-game/:gameId/edit",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(VersusGamePage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/versus/:assignmentId/lobby",element:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(VersusLobbyPage,{})})}),jsxRuntimeExports.jsx(Route,{path:"/versus/:assignmentId/match/:sessionId",element:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(VersusMatchRoom,{})})}),jsxRuntimeExports.jsx(Route,{path:"/flip-puzzle-game",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(FlipPuzzleGamePage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/share/flip-puzzle/:shareToken",element:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(ShareFlipPuzzlePage,{})})}),jsxRuntimeExports.jsx(Route,{path:"/knowledge-train-game",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(KnowledgeTrainGamePage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/share/knowledge-train/:shareToken",element:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(ShareKnowledgeTrainPage,{})})}),jsxRuntimeExports.jsx(Route,{path:"/paced-quiz",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(PacedQuizPage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/paced-quiz/session/:sessionId/control",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(TeacherControlScreen,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/paced-quiz/session/:sessionId/play",element:jsxRuntimeExports.jsx(StudentAnswerPage,{})}),jsxRuntimeExports.jsx(Route,{path:"/paced-quiz/session/:sessionId/teams",element:jsxRuntimeExports.jsx(TeamSelectionPage,{})}),jsxRuntimeExports.jsx(Route,{path:"/paced-quiz/session/:sessionId/leaderboard",element:jsxRuntimeExports.jsx(LeaderboardPage,{})}),jsxRuntimeExports.jsx(Route,{path:"/crossword-puzzle",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(CrosswordPuzzlePage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/share/crossword/:shareToken",element:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(ShareCrosswordPage,{})})}),jsxRuntimeExports.jsx(Route,{path:"/tug-of-war-game",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(TugOfWarGamePage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/share/tug-of-war/:shareToken",element:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(ShareTugOfWarPage,{})})}),jsxRuntimeExports.jsx(Route,{path:"/star-bag-game",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(StarBagGamePage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/share/star-bag/:shareToken",element:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(ShareStarBagPage,{})})}),jsxRuntimeExports.jsx(Route,{path:"/minesweeper",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(MinesweeperPage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/share/minesweeper/:shareToken",element:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(ShareMinesweeperPage,{})})}),jsxRuntimeExports.jsx(Route,{path:"/teacher-share/:token",element:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(ClaimSharedGamePage,{})})}),jsxRuntimeExports.jsx(Route,{path:"/interactive-image",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(InteractiveImagePage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/share/interactive-image/:shareToken",element:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(ShareInteractiveImagePage,{})})}),jsxRuntimeExports.jsx(Route,{path:"/noise-tracker",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(NoiseTrackerPage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/pose-quiz",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(PoseQuizPage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/community-library",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(CommunityLibraryPage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/admin/*",element:jsxRuntimeExports.jsx(Adm
507inRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(AdminApp,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/journey",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(JourneyDashboardPage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/journey/create",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(JourneyCreatorPage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/journey/create/:journeyId",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(JourneyCreatorPage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/journey/:sessionId",element:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(JourneyPlayerPage,{})})}),jsxRuntimeExports.jsx(Route,{path:"/paper-mode",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(PaperModePage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/paper-mode/session/:id/control",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(SessionControlPage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/paper-mode/session/:id/results",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(ResultsPage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/scan",element:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(ScanPage,{})})}),jsxRuntimeExports.jsx(Route,{path:"/scan-face",element:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(FaceRandomScanPage,{})})}),jsxRuntimeExports.jsx(Route,{path:"/ctv/mini-apps",element:jsxRuntimeExports.jsx(ProtectedRoute,{children:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(CtvMiniAppsPage,{})})})}),jsxRuntimeExports.jsx(Route,{path:"/mo-phong-bai-day",element:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(MiniAppsBrowsePage,{})})}),jsxRuntimeExports.jsx(Route,{path:"/chinh-sach-bao-mat",element:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(PrivacyPolicyPage,{})})}),jsxRuntimeExports.jsx(Route,{path:"/dieu-khoan-su-dung",element:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(TermsOfServicePage,{})})}),jsxRuntimeExports.jsx(Route,{path:"/gioi-thieu",element:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(AboutPage,{})})}),jsxRuntimeExports.jsx(Route,{path:"/chinh-sach-giao-nhan",element:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(ShippingPolicyPage,{})})}),jsxRuntimeExports.jsx(Route,{path:"/bang-gia",element:jsxRuntimeExports.jsx(reactExports.Suspense,{fallback:jsxRuntimeExports.jsx(ToolLoader,{}),children:jsxRuntimeExports.jsx(PricingPage,{})})}),jsxRuntimeExports.jsx(Route,{path:"*",element:jsxRuntimeExports.jsx(Navigate,{to:"/dashboard"})})]})]})})})})})})})})})}class ChunkErrorBoundary extends reactExports.Component{constructor(){super(...arguments),this.state={hasError:!1},this.handleReload=()=>{sessionStorage.removeItem("chunk_reload"),window.location.reload()}}static getDerivedStateFromError(){return{hasError:!0}}render(){return this.state.hasError?jsxRuntimeExports.jsxs("div",{style:{minHeight:"100vh",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:"1rem",fontFamily:"system-ui, sans-serif",color:"#374151",padding:"2rem",textAlign:"center"},children:[jsxRuntimeExports.jsx("p",{style:{fontSize:"3rem",margin:0},children:"⚠️"}),jsxRuntimeExports.jsx("h2",{style:{margin:0,fontSize:"1.25rem"},children:"Đã xảy ra lỗi"}),jsxRuntimeExports.jsx("p",{style:{margin:0,color:"#6b7280",maxWidth:400},children:"Trang web gặp sự cố không mong muốn. Điều này có thể do phiên bản mới đang được cập nhật. Hãy nhấn tổ hợp Ctrl + Shift + R. Sau đó bấm nút bên dưới nếu chưa được."}),jsxRuntimeExports.jsxs("div",{style:{display:"flex",gap:"1rem",marginTop:"1rem"},children:[jsxRuntimeExports.jsx("button",{onClick:()=>window.location.href="/",style:{padding:"0.75rem 1.5rem",fontSize:"1rem",fontWeight:600,color:"#374151",backgroundColor:"#f3f4f6",border:"none",borderRadius:"8px",cursor:"pointer"},children:"Về trang chủ"}),jsxRuntimeExports.jsx("button",{onClick:this.handleReload,style:{padding:"0.75rem 1.5rem",fontSize:"1rem",fontWeight:600,color:"#fff",backgroundColor:"#4f46e5",border:"none",borderRadius:"8px",cursor:"pointer"},children:"Tải lại trang"})]})]}):this.props.children}}const cancel$7="Hủy",save$2="Lưu",nav$5={home:"Trang chủ",aiTools:"Bộ công cụ AI",questionBank:"Kho câu hỏi",activities:"Hoạt động",assignments:"Đã gi
507ao",community:"Cộng đồng",join:"Tham gia",bugReport:"Sá»­a lỗi",logout:"Đăng xuất",logoName:"Giáo viên đổi mới",logoTitle:"📚 Giáo viên đổi mới",edutech:"Tiện ích GD",lessonSimulation:"Mô phỏng bài dạy",courses:"Khóa học",homeroom:"GV Chá»§ nhiệm",paymentHistory:"Lịch sá»­ thanh toán",joinForStudents:"Tham gia (dành cho HS)"},header$2={upgradePro:"Mua FullGame",upgradePro_short:"FullGame",proAccount:"Gói FullGame",proAccount_short:"FullGame",forever:"FullGame VÄ©nh viễn",forever_short:"VÄ©nh viễn",daysPro:"Còn {{days}} ngày FullGame",daysPro_short:"{{days}}d FullGame",logoutBtn:"Đăng xuất"},manualTransfer={toggle:"Không quét được mã QR? Chuyển khoản thá»§ công",amountLabel:"💰 Số tiền:",contentLabel:"Nội dung chuyển khoản — copy rồi dán, đừng gõ tay:"},proModal$2={title:"⭐ NÂNG CẤP FullGame ⭐",description:"Bạn không nhất thiết phải nâng cấp FullGame. Có thể mua riêng từng công cụ AI chỉ 30.000đ/công cụ!",descriptionNote:"FullGame mở khóa toàn bộ tính năng bài giảng tương tác (không bao gồm công cụ AI):",price:"💰 200.000 VNĐ",bankLabel:"🏦 Ngân hàng:",accountLabel:"📱 Tài khoản:",ownerLabel:"👤 Tên:",contentLabel:"📝 Nội dung:",alertTitle:"⚠️ Sau khi chuyển khoản, tải lại trang, nếu chưa được kích hoạt, hãy liên hệ Admin:",contactInfo:"📞 0363.357.745 | 💬",zaloLink:"Zalo",benefitsTitle:"✅ Lợi ích khi mua FullGame:",offlineWarning:"Thanh toán này KHÔNG bao gồm các bản tải về Offline và các công cụ AI (mua riêng 30.000đ/công cụ tại trang Bộ công cụ AI).",benefit1:"Tạo không giới hạn bài giảng, bài học, video,... ở TẤT CẢ mọi công cụ tương tác",benefit2:"Mở khóa sá»­ dụng các công cụ có nhãn FullGame (nếu không mở sẽ không dùng được)",benefit3:"Có khả năng tải/thu âm vào câu hỏi và lập Báo cáo chi tiết khi sá»­ dụng các tính năng đánh giá học sinh",closeBtn:"Đóng",contactAdmin:"Liên hệ Admin",unlockBenefits:"✅ FullGame mở khóa:",unlimitedGames:"Tạo <strong>không giới hạn</strong> game giảng dạy, trò chÆ¡i, video,...",audioAndReport:"<strong>Có thể tải/thu âm</strong> vào câu hỏi/đáp án. <strong>Nhận Báo cáo chi tiết khi giao bài cho học sinh</strong>",notIncluded:"KHÔNG bao gồm",excludedServices:"<1>Các Công cụ AI, các Tiện ích GD</1> & <3>Mô phỏng bài dạy, Khóa học, Giáo viên chá»§ nhiệm</3>",buyAiTools:"Mua Công cụ AI",buyEdutech:"Mua Tiện ích GD",compareProFree:"So sánh FullGame với Miễn phí",mayPromo:"🎁 KHUYẾN MẠI THÁNG 5",promoBonusNote:"Mua ngay — được cộng thêm <strong>+{{bonus}} tháng</strong> miễn phí!",promoUntil:"Áp dụng đến hết {{date}}",groupPurchaseBtn:"👥 MUA CHUNG — GIẢM THÊM GIÁ",enterPromoCode:"Vui lòng nhập mã",promoCodeInvalid:"Mã không tồn tại hoặc sai",promoCodeSpamError:"Mã không tồn tại hoặc sai! Để tránh Spam, xin vui lòng thá»­ lại sau.",promoDiscount:"mã -{{discount}}%",multiYearDiscount:"{{year}} năm -{{discount}}%",yearsUnit:"{{year}} năm",detailedReportRow:"Báo cáo chi tiết khi giao bài",scoreOnlyReport:"Chỉ báo cáo điểm số",perQuestionReport:"Báo cáo từng câu",audioRecordRow:"Tải/thu âm câu hỏi & đáp án",noAudio:"Không có",hasAudio:"Có",cannotUse:"Không dùng được",unlimited:"Không giới hạn"},upgradeModal$2={qrAutoFillNote:"Quét mã là xong — nội dung chuyển khoản đã tá»± điền sẵn, bạn không cần gõ gì thêm.",title:"Nâng cấp lên KHÔNG GIỚI HẠN",offlineTitle:"Tải về sá»­ dụng offline",freeLimit:"Bản miễn phí chỉ cho phép lưu",differentClasses:"khác nhau",unlockRequired:"Mở khóa TOÀN BỘ CÔNG CỤ AI để sá»­ dụng vÄ©nh viễn không giới hạn",upgradeHint:"💡 Để tiếp tục sá»­ dụng {{name}} không giới hạn, bạn có thể nâng cấp:",aiUnlockHint:"💡 Mở khóa để sá»­ dụng tất cả Công cụ AI mãi mãi:",transferLabel:"Nội dung chuyển khoản (Giữ nguyên):",waitingPayment:"Hệ thống đang chờ thanh toán cá»
507§a bạn...",contactTitle:"⚠️ Sau khi chuyển khoản, tải lại trang, nếu chưa được kích hoạt, hãy liên hệ Admin:",closeBtn:"Đóng",contactBtn:"Liên hệ Zalo",reloadBtn:"✅ Đã thanh toán - Tải lại",internationalBtn:"For international users",offlineBenefitTitle:"Tải bản tá»± chạy Offline vÄ©nh viễn (không cần internet)",offlineGuide:"Xem hướng dẫn sá»­ dụng bản offline",here:"tại đây",offlineWarning:"Lưu ý: Bản offline này có thể thiếu một số tính năng so với bản gốc.",clickToView:"Bấm vào đây để xem",evaluationYear:"⏳ Sá»­ dụng được {{selectedYears}} năm (đến ngày {{date}})",expiryDateInfo:"Gia hạn thêm: Bạn sẽ được sá»­ dụng không giới hạn đến ngày {{date}}",proPlanBenefit:"♾️ FullGame: {{price}}đ/năm — chuyển {{price2x}}đ = 2 năm",expiryWarning:"⚠️ Sau khi hết hạn, chỉ {{count}} bài đã ghim (📌) còn dùng được — các bài khác sẽ bị khóa.",expiryWarningNoAudio:"🚫 Nâng cấp này KHÔNG bao gồm khả năng Tải âm thanh, nhận Báo cáo chi tiết và Tải về Offline",promoPlaceholder:"Nhập mã giảm giá (nếu có)...",deleteBtn:"Xóa",applyBtn:"Áp dụng",selectYears:"💡 Chọn số năm gia hạn:",selectYearsLabel:"Thầy cô mua bao nhiêu năm:",scanQrPrompt:"Hãy quét mã QR để thanh toán",years:"năm",tempAccess:{aiTitle:"🤖 Nâng cấp AI",offlineTitle:"💾 Tải bản Offline",aiContact:"Để đăng ký Công cụ AI, vui lòng liên hệ:",offlineContact:"Để tải bản Offline, vui lòng liên hệ:",zaloLabel:"📞 Zalo: 0363.357.745",zaloName:"(Thịnh Tin Học)",openZalo:"Mở Zalo ngay",close:"Đóng"},offlineWarningDialog:{title:"⚠️ CẢNH BÁO QUAN TRỌNG VỀ Dá»® LIỆU & HẠN CHẾ BẢN OFFLINE",pptWarning:"Bản tải xuống này không phải là Powerpoint, chỉ có thể chèn link chứ không dán trá»±c tiếp vào Slide được",usageNote:"* Bản Offline tuy có thể sá»­ dụng khi KHÔNG CÓ MẠNG INTERNET nhưng có một số vấn đề sau",dataNoteTitle:"LƯU Ý Cá»°C KỲ QUAN TRỌNG:",dataNote1:"Dữ liệu KHÔNG được đồng bộ giữa các thiết bị khác nhau.",dataNote2:"Nếu bạn xóa dữ liệu trình duyệt, dữ liệu bài học có thể bị mất.",dataNote3:'Nếu bạn sao chép thư mục sản phẩm sang máy tính (hoặc thư mục) khác, dữ liệu sẽ KHÔNG đi theo. Bạn cần sá»­ dụng "Xuất dữ liệu (.json)" để sao lưu và "Nhập tệp (.json)" để khôi phục bài học ở vị trí mới.',dataNote4:"Vui lòng đặt thư mục sản phẩm ở một vị trí cố định trên máy tính cá»§a bạn.",limitationsTitle:"CÁC HẠN CHẾ SO VỚI BẢN ONLINE MÀ BẠN ĐANG XEM:",limitationsDesc:"Sản phẩm offline này bị hạn chế một số tính năng so với bản gốc tại {{url}}:",limit1:"Không thể chia sẻ link chÆ¡i online cho học sinh.",limit2:"Không có tính năng đồng bộ hóa đám mây.",limit3:"Không thể giao bài tập và nhận báo cáo kết quả trá»±c tuyến từ học sinh.",limit4:"Phải gõ tay từng công thức toán theo mã Katex, không ada hỗ trợ nhập.",limit5:"Không định dạng được văn bản: màu chữ, in đậm, in nghiêng,...",gotIt:"Đã hiểu"},keepTransferNote:"GIá»® NGUYÊN NỘI DUNG CHUYỂN KHOẢN NHƯ TRÊN (TUYỆT ĐỐI KHÔNG SỬA)",singleAiToolHint:"Chọn số năm bên dưới, thanh toán 1 lần và dùng ngay!",aiToolsGroupHint:"Thanh toán 1 lần duy nhất, mở khóa trọn bộ tiện ích trong Nhóm!",journeyHint:"Tính năng này chỉ dành cho người dùng đã nâng cấp. Nâng cấp để tạo hành trình học tập không giới hạn.",versus1v1Hint:"Tính năng này chỉ dành cho người dùng đã nâng cấp. Nâng cấp để học sinh thi đấu 1v1 trên thiết bị riêng — không giới hạn số bài và số trận.",assignment15DaysHint:"Bản miễn phí chỉ cho phép giao bài tối đa 15 ngày.",genericUnlockRequired:"Tính năng này cần mở khóa mới sá»­ dụng được!",extCommentsDesc:"Tiện ích tá»± động điền nhận xét học sinh vào phần mềm — 30.000đ/năm. Sau khi thanh toán, đăng nhập Google trong extension bằng tài khoản GVĐM là dùng được ngay — không cần nhập key.",extWordAddinDesc:"Add-in cài vào Microsoft Word — tích hợp AI Gemini hỗ trợ soạn thảo và căn chỉnh tài liệu. Đăng nhập Google bằng tài khoản GVĐM là kích hoạt ngay — 50.000đ/năm.",extMathAddinDesc:"Add-in cài vào Microsoft Word — hỗ trợ giáo viên Toán vẽ hình, dùng kho hình mẫu và tùy chỉnh hình vẽ Toán học. Sau khi thanh toán, bạn nhận được một mã kích hoạt (key) để nhập vào add-in — 50.000đ/năm.",extAlignDocxDesc:"Tá»± động căn chỉnh font, lề, giãn dòng file Word .docx theo Nghị định 30. Dùng thá»­ miễn phí 3 lần, sau đó 30.000đ/năm.",extAiToDocxDesc:"Dán văn bản từ AI chatbot (ChatGPT, Gemini, Claude…) — nhận file Word có bảng và công thức toán. Dùng thá»­ miễn phí 3 lần, sau đó 30.000đ/năm.",extTeacherStandardDesc:"Tiện ích tá»± động điền phiếu đánh giá chuẩn nghề nghiệp và xuất phiếu tá»± đánh giá (.docx) — 30.000đ/năm. Sau khi thanh toán, đăng nhập Google trong extension bằng tài khoản GVĐM là dùng được ngay — không cần nhập key.",aiBundleDesc:"Mở khóa TẤT CẢ công cụ AI trả phí hiện có — VÀ CẢ các công cụ AI mới ra mắt trong tương lai, không cần mua thêm! Chỉ {{price}}đ/năm.",edutechBundleDesc:"Mở khóa TẤT CẢ tiện ích Edutech Extensions (tá
507»•ng giá trị 140.000đ/năm) — chỉ với {{price}}đ/năm.",aiBundleHeader:"🚀 Mở khóa TOÀN BỘ Công cụ AI trả phí — KỂ CẢ TOOL TƯƠNG LAI!",aiBundleFeatures:"• Toàn bộ công cụ AI trả phí hiện có + mọi tool mới ra mắt sau này<br />• Hiệu lá»±c theo năm, có thể gia hạn cộng dồn",aiBundleExcludes:"🚫 KHÔNG bao gồm: FullGame (game/video tương tác), Tiện ích Edutech, bản Offline",edutechBundleHeader:"🚀 Mở khóa TOÀN BỘ Tiện ích Edutech Extensions!",edutechBundleFeatures:"• Nhận xét CSDL, Chuẩn nghề nghiệp, Chuyển AI→DOCX (30.000đ/năm mỗi tiện ích)<br />• Add-in Word GVDM (50.000đ/năm) · Hiệu lá»±c theo năm, gia hạn cộng dồn",edutechBundleExcludes:"🚫 KHÔNG bao gồm: FullGame (game/video tương tác), Công cụ AI, bản Offline",extendedLinkBenefit:"⏰ Gói này cho phép tạo link bài tập có thời hạn tối đa {{tier}} năm. Dùng cho TOÀN BỘ các game có chức năng Giao bài.",downloadOfflineBenefit:'⬇️ Đồng thời mở khóa nút "Tải xuống" — xuất bài học ra file chÆ¡i offline không cần Internet hoặc nhúng vào Elearning.',legacyAiUnlockHeader:"⚠️ Khi mở khóa, bạn sở hữu <u>VĨNH VIỄN TẤT CẢ</u> các công cụ sau:",aiGroup4Features:"• Tạo bảng tích hợp NL AI vào KHGD<br />• Soạn Giáo án Tích hợp AI<br />• Soạn Giáo án Chuyên đề AI<br />• Tài liệu tập huấn Năng lá»±c AI (miễn phí)",aiGroup3Features:"• Viết báo cáo kỹ thuật (NCKH)<br />• Tạo sản phẩm phần mềm (AI App)",aiGroup1Features:"• Viết sáng kiến kinh nghiệm<br />• Biện pháp giáo viên giỏi<br />• Giáo án tích hợp NLS<br />• Phân tích học bạ (Sổ theo dõi)",aiGroup2Features:"• Tạo đề thi theo CV 7991<br />• Tạo đề thi CV 7991 Tiếng Anh<br />• Tạo đề thi chuẩn Ngữ văn<br />• Công cụ Phân tích Đề thi",interactiveVideoDownload:"Ngoài ra, bạn cÅ©ng có thể TẢI XUỐNG các video tương tác",postExpiryWarning:"Sau khi hết hạn, bạn sẽ tạm thời không dùng được tính năng cho tới khi mở khóa",compareAiBundle:"So sánh Gói công cụ AI với Miễn phí",compareFeature:"So sánh {{name}} với Miễn phí",compareUpgradeFeature:"So sánh Nâng cấp {{name}} với Miễn phí",paidColumnLabel:"Đã mua",qrAlt:"Mã QR Thanh Toán",promoMayTitle:"🎁 KHUYẾN MẠI THÁNG 5",promoBonusDesc:"Mua ngay — được cộng thêm <strong>+{{bonus}} tháng</strong> miễn phí!",promoValidUntil:"Áp dụng đến hết {{date}}",promoCodeFormat:"mã -{{discount}}%",multiYearDiscountFormat:"{{years}} năm -{{discount}}%",groupBuyBtn:"👥 MUA CHUNG — GIẢM THÊM GIÁ",promoCodeRequired:"Vui lòng nhập mã",promoCodeInvalidToast:"Mã không tồn tại hoặc sai! Để tránh Spam, xin vui lòng thá»­ lại sau.",promoCodeInvalid:"Mã không tồn tại hoặc sai",forever:"/ vÄ©nh viễn",perExtendedLink:"/ mọi link tồn tại tối đa {{tier}} năm",perYears:"/ {{years}} năm",paymentSuccess:"Thanh toán thành công! Tính năng đã được mở khóa.",bundleSelectedCount:"Gói {{count}} công cụ đã chọn:",bundleSelectedHint:"Chọn số năm bên dưới, thanh toán 1 lần, mở khóa tất cả công cụ đã chọn!",notUnlocked:"Chưa mở khóa",unlockForever:"Mở khóa vÄ©nh viễn",assignment15DaysComparison:"Link giao bài duy trì tối đa 15 ngày",assignmentMaxTierComparison:"Link giao bài duy trì tối đa {{tier}} năm",unlimitedDuration:"Không giới hạn — {{duration}}",unlockDuration:"Mở khóa — {{duration}}",maxYearsDuration:"tối đa {{tier}} năm",yearsDuration:"{{years}} năm",foreverDuration:"vÄ©nh viễn"},internationalModal$2={title:"✨ FullGame - $12/Năm",description:"Mở khóa toàn bộ công cụ dạy học tương tác dành cho giáo viên quốc tế.",pricingTitle:"Quyền lợi bao gồm:",features:["Tạo không giới hạn bài học với TẤT CẢ công cụ tương tác","Tải lên & thu âm vào nội dung bài giảng","Báo cáo chi tiết quá trình học cá»§a học sinh","AI Tools Nhóm 1 vÄ©nh viễn (Soạn giáo án, Biện pháp GVG, Sáng kiến KN, AI trợ giảng)","Lưu trữ bài học mãi mãi trên đám mây"],howToTitle:"Cách đăng ký:",step1:"Bấm vào nút thanh toán bên dưới.",step2:"Chọn số tiền $12.",step3:'⚠️ BẮT BUỘC: Trong ô "Say something nice..." (BMAC), ghi rõ email đã đăng ký trên website.',note:"Tài khoản sẽ được nâng cấp thá»§ công trong vòng 24 giờ sau khi thanh toán.",payBtn:"Thanh toán qua Buy Me a Coffee ☕",closeBtn:"Đóng",hasVnAccount:"Bạn có tài khoản ngân hàng Việt Nam?"},language$2={switchTo:"EN",current:"VI",dateLocale:"vi-VN"},externalTools$2={title:"Liên kết tới các công cụ ngoài website",warning:"Đây chỉ là liên kết để truy cập nhanh các trang khác, việc thanh toán trên Giáo viên đổi mới sẽ KHÔNG được áp dụng ở các trang này",accessTooltip:"Truy cập {{name}}",categories:{teaching:"Phần mềm giảng dạy/quản lý",ai:"Phần mềm AI",aiGeneral:"AI tổng hợp",aiImage:"AI tạo ảnh",aiVideo:"AI tạo video",aiAudio:"AI tạo nhạc/âm thanh",education:"Trang thông tin giáo dục"}},usage$2={unlimited:"✅ Không giới hạn",used:"Đã sá»­ dụng {{current}}/{{limit}} bài học",expired:"⚠️ Gói đã hết hạn",noiseTrackerTrial:"Dùng thá»­: tối đa 10 phút/tiết",proForever:"Ko giới hạn vÄ©nh viễn",proDaysRemaining:"Còn {{days}} ngày FullGame"},sidebar$f={upgradeBtn:"Nâng Cấp Lẻ",upgradeTooltip:"Nâng cấp để mở khóa giới hạn",helpBtn:"Hướng dẫn sá»­ dụng",helpTooltip:"Xem hướng dẫn sá»­ dụng",n
507oticeTitle:"Lưu ý:",poseQuizNotice:"Trò chơi này chỉ có mục đích là trình chiếu để học sinh cả lớp <strong>THỰC HIỆN ĐỘNG TÁC</strong>, chứ <strong>KHÔNG PHẢI</strong> là sử dụng camera để kiểm tra đáp án. Việc trình chiếu do giáo viên bấm hoặc tự động đặt thời gian.",upgradeLabel:"Nâng cấp",helpLabel:"Hướng dẫn",bugReportLabel:"Báo lỗi"},offline$2={downloadBtn:"Tải bản Offline",linkBtn:"Link Bản Offline",buyTooltip:"Mua bản Offline vĩnh viễn",viewLinkTooltip:"Bấm để xem link tải bản Offline"},pin$2={note:"📌 Hãy ghim {{item}} yêu thích — bạn sẽ luôn được dùng miễn phí những bài đó dù hết hạn nâng cấp",room:"phòng",wheel:"vòng quay",lesson:"bài",image:"ảnh",crossword:"ô chữ",robot:"robot",pinned:"📌 Đã ghim!",unpinned:"📍 Đã bỏ ghim",limitReached:"📌 Chỉ được ghim tối đa {{limit}} {{item}}",pinnedLabel:"đã ghim"},form$y={answer:"Đáp án",question:"Câu hỏi",questionContent:"Nội dung câu hỏi",timeLimit:"Thời gian mỗi câu (giây)",timeLimitHelper:"Tối thiểu 7 giây. Gợi ý: 15-25 giây.",errorMinTimeLimit:"Thời gian mỗi câu tối thiểu phải là 7 giây."},library$4={errorMetadataRequired:"Vui lòng chọn Cấp học, Môn học và Khối lớp để đưa lên Thư viện cộng đồng."},status$2={notEntered:"Trống",notFound:"Không tìm thấy"},error$a={occurred:"Có lỗi xảy ra"},tts$1={listenBtn:"Nghe",stopBtn:"Dừng",notSupportedTooltip:"Trình duyệt của bạn không hỗ trợ đọc tiếng Việt. Hãy thử dùng Chrome hoặc Edge.",deviceNote:"Tính năng đọc câu hỏi phụ thuộc vào trình duyệt và thiết bị của bạn",notAvailable:"Thiết bị của bạn chưa hỗ trợ giọng đọc tiếng Việt. Đây là do trình duyệt, không phải do website. Hãy thử dùng Google Chrome."},actions$8={assign:"Giao bài",teacherShare:"Chia sẻ GV",renew:"Gia hạn",prevPage:"← Trang trước",nextPage:"Trang sau →",pageInfo:"Trang {{page}}",edit:"Sửa",delete:"Xóa",play:"Chơi",view:"Xem",share:"Chia sẻ"},listTools$2={searchPlaceholder:"Tìm bài...",clear:"Xóa tìm kiếm",sortLabel:"Sắp xếp",sortNewest:"Mới nhất",sortOldest:"Cũ nhất",sortNameAsc:"Tên A→Z",sortNameDesc:"Tên Z→A",sortMostQuestions:"Nhiều câu hỏi nhất",noResults:"Không tìm thấy bài nào khớp"},shuffleQuestions$2={label:"Xáo trộn thứ tự câu hỏi",desc:"Mỗi lần chơi, các câu hiện theo thứ tự khác nhau"},groups$4={createButton:"+ Tạo nhóm bài",createTitle:"Tạo nhóm bài mới",renameTitle:"Đổi tên nhóm",namePlaceholder:"Tên nhóm (ví dụ: Môn Tin 6)",save:"Lưu",cancel:"Hủy",createSuccess:"Đã tạo nhóm",createError:"Không tạo được nhóm",renameSuccess:"Đã đổi tên nhóm",deleteConfirm:"Xóa nhóm này? Các bài bên trong sẽ được đưa ra ngoài, không bị xóa.",deleteSuccess:"Đã xóa nhóm",deleteError:"Không xóa được nhóm",countLabel:"{{count}} bài",back:"← Quay lại",moveToGroup:"Chuyển vào nhóm",moveSuccess:"Đã chuyển bài",moveError:"Không chuyển được bài",removeFromGroup:"Đưa ra ngoài",noGroup:"Ngoài nhóm",rename:"Đổi tên",delete:"Xóa nhóm",emptyGroup:"Nhóm này chưa có bài nào. Chuyển bài vào từ menu trên mỗi thẻ bài.",inGroupLabel:"📁 {{name}}"},search$2={tab:"Tìm bài",title:"Tìm bài học của bạn",placeholder:"Gõ tên bài (mọi công cụ)...",loading:"Đang tải danh sách bài...",noResults:"Không tìm thấy kết quả nào khớp",empty:"Bạn chưa có bài học nào",untitled:"(Chưa đặt tên)",groupFeatures:"Tính năng",groupLessons:"Bài học của tôi",labelFeature:"Mở"},ttsModal$2={title:"✨ Yêu cầu để dùng tính năng AI Đọc bài",langModeTitle:"AI sẽ đọc nội dung bằng ngôn ngữ nào?",langVi:"AI đọc tiếng Việt",langViDesc:"Câu hỏi chứa tiếng Việt có dấu",langEn:"AI đọc tiếng Anh",langEnDesc:"Câu hỏi bằng tiếng Anh (môn Anh văn...)",skipForEn:"✅ Bỏ qua khi đọc tiếng Anh",step1SkippedDesc:"Không cần giọng tiếng Việt khi AI đọc tiếng Anh.",checking:"Đang kiểm tra...",step1Title:"1. Gói giọng nói tiếng Việt trong hệ thống",step1TitleEn:"1. Gói giọng nói tiếng Anh trong hệ thống",step1Success:"✅ Hệ thống đã có giọng tiếng Việt",step1SuccessEn:"✅ Hệ thống đã có giọng tiếng Anh",step1Needed:"Bạn cần cài gói tiếng Việt trong Windows để trình duyệt có thể đọc.",step1NeededEn:"Trình duyệt của bạn chưa có giọng tiếng Anh. Hãy thử dùng Microsoft Edge.",step1GuideBtn:"Thêm giọng AI (Hướng dẫn video)",step2Title:"2. Trình duyệt Microsoft Edge",recommended:"Khuyến nghị",step2Using:"✅ Bạn đang dùng {{name}}",step2Warning:"Bạn đang dùng {{name}}",step2EdgeOk:"Edge có giọng đọc AI tự nhiên nhất, không tốn băng thông.",step2EdgeHint:"Nếu giọng đọc bị robot hoặc thiếu tự nhiên, hãy thử 
507chuyển sang Microsoft Edge — giọng AI trên Edge tốt hơn nhiều và không tốn băng thông.",step3Title:"3. Gói FullGame",step3Success:"Bạn đang dùng FullGame",step3Needed:"Tính năng này yêu cầu gói FullGame.",step3UpgradeBtn:"Mua FullGame ngay",toolTitle:"Hoặc dùng công cụ tạo giọng AI của chúng tôi",toolDesc:"Bạn cũng có thể tạo giọng đọc bằng công cụ AI, tải file .mp3 về và tải lên thủ công cho từng câu hỏi.",toolBtn:"Công cụ chuyển văn bản thành giọng nói AI",proRequired:"Yêu cầu gói FullGame",closeBtn:"Đóng",gotItBtn:"Đã hiểu, bật AI Đọc bài"},classManager$2={title:"Quản lý lớp học",subtitle:"Danh sách lớp dùng chung cho mọi tính năng cần lớp học. Bấm vào một lớp để sửa chi tiết, gắn ảnh học sinh.",detailTitle:"Chi tiết lớp",emptyDesc:'Bạn chưa có lớp nào. Bấm "Tạo lớp" để thêm lớp đầu tiên — lớp tạo ở đây dùng được cho mọi tính năng cần lớp học.',btnCreateClass:"Tạo lớp",btnCreateFirstClass:"Tạo lớp đầu tiên",createTitle:"Tạo lớp mới",createStudentsLabel:"Danh sách học sinh (mỗi dòng một em)",createStudentsPlaceholder:`Nguyễn Văn An
508Trần Thị Bình
509Lê Minh Cường`,createStudentsHint:"Dán thẳng cột tên từ Excel cũng được. Tối đa {{max}} học sinh mỗi lớp.",createCountHint:"Đã nhập {{count}} học sinh.",btnCreate:"Tạo lớp",btnCreating:"Đang tạo...",errorClassName:"Vui lòng nhập tên lớp",errorNoStudent:"Vui lòng nhập ít nhất một học sinh",errorOverLimit:"Vượt quá {{max}} học sinh mỗi lớp",successCreateClass:"Đã tạo lớp",errorCreateClass:"Không tạo được lớp. Vui lòng thử lại.",studentCount:"{{count}} học sinh",labelClassName:"Tên lớp",labelClassPhoto:"Ảnh tập thể lớp",labelStudents:"Danh sách học sinh",hintShared:"Sửa ở đây thì mọi tính năng dùng lớp này đều thấy ngay.",warnTooManyClasses:"Bạn đang có trên {{max}} lớp học, điều này có thể khiến việc sử dụng các tính năng bị hạn chế, hãy cân nhắc xoá bớt lớp không dùng đến nữa.",hintUnsaved:"Có thay đổi chưa lưu. Rời trang bây giờ sẽ mất các thay đổi này (kể cả ảnh vừa chọn).",placeholderName:"Họ và tên",emptyRows:'Chưa có học sinh nào. Bấm "Thêm học sinh" hoặc "Dán từ Excel".',btnSave:"Lưu",btnSaving:"Đang lưu...",btnCancel:"Huỷ",btnOpen:"Mở lớp",btnPlayGame:"Tổ chức trò chơi",playGameHint:"Chọn tính năng để mở, rồi chọn lại lớp này ở đó",playGameWheel:"Vòng quay / Đua vịt",playGameFaceRandom:"Gọi tên bằng ảnh",playGamePaperMode:"Chấm bài trên giấy",btnDeleteClass:"Xoá lớp",confirmDeleteTitle:"Xoá lớp này?",confirmDeleteMsg:'Lớp "{{name}}" sẽ bị xoá vĩnh viễn, cùng toàn bộ danh sách học sinh và ảnh đã gắn. Không khôi phục lại được.',successDeleteClass:"Đã xoá lớp",errorDeleteClass:"Không xoá được lớp. Vui lòng thử lại.",btnAddStudent:"Thêm học sinh",btnAdd:"Thêm",btnClose:"Đóng",addTitle:"Thêm học sinh",addHint:"Đã có {{current}}/{{max}} học sinh. Nhấn Enter để thêm liên tiếp.",labelStudentName:"Họ và tên học sinh",tooltipMoveUp:"Di chuyển lên",tooltipMoveDown:"Di chuyển xuống",btnShowPhotos:"Hiện ảnh",btnHidePhotos:"Ẩn ảnh",chipHasPhoto:"Đã có ảnh",chipPhotoPending:"Ảnh chờ lưu",notePhotoOptional:"Ảnh học sinh chỉ cần thiết với một số tính năng đặc trưng, thầy/cô không bắt buộc phải có ảnh.",btnSplitPhoto:"Lấy ảnh từng HS từ ảnh tập thể",splitTitle:"Lấy ảnh từng học sinh từ ảnh tập thể",splitHint:"Kéo thanh trượt để chỉnh cỡ vòng chọn, rồi bấm vào mặt từng em để chọn tên. Ảnh nhỏ khó nhìn thì lăn chuột trên ảnh để phóng to, rồi giữ chuột kéo để xem chỗ khác. Ảnh cắt xong sẽ chờ bạn bấm Lưu.",splitSize:"Cỡ vòng chọn",splitZoomIn:"Phóng to (hoặc lăn chuột lên)",splitZoomOut:"Thu nhỏ (hoặc lăn chuột xuống)",
509splitZoomReset:"Về cỡ vừa khung",splitPxHint:"Cỡ thật của vùng cắt. Từ {{out}}px trở lên là nét; thấp hơn thì ảnh phải phóng to nên sẽ hơi mờ.",splitBigExtra:"Ảnh vừa thêm khá nặng nên máy có thể hơi chậm khi kéo/phóng to. Đây là chuyện bình thường — ảnh càng gốc thì mặt cắt ra càng nét.",infoBigPhoto:"Ảnh {{mb}}MB khá lớn, máy cần xử lý một lát. Thầy/cô chờ chút nhé — ảnh gốc lớn sẽ cho ảnh cắt nét hơn.",splitLowRes:'Vùng chọn chỉ có {{px}}px nên ảnh cắt ra sẽ hơi mờ. Cách khắc phục: kéo thanh trượt cho vòng to hơn, hoặc bấm "Thêm ảnh để cắt" rồi chọn file ảnh GỐC từ máy — ảnh gốc còn nguyên độ nét, cắt ra đẹp hơn hẳn ảnh lớp đã lưu.',splitNoStudent:"Lớp chưa có học sinh nào",splitErrorLoad:"Không đọc được ảnh tập thể để cắt. Thầy/cô thử tải lại ảnh lớp rồi cắt ngay sau đó.",btnFullscreen:"Toàn màn hình",btnExitFullscreen:"Thoát toàn màn hình",splitAddSource:"Thêm ảnh để cắt",splitSourceMain:"Ảnh lớp",splitSourceExtra:"Ảnh thêm",splitExtraNote:"Ảnh thêm chỉ dùng để cắt, không được lưu lại.",splitDoneHint:"Đã cắt {{n}} ảnh — nhớ bấm Lưu ở ngoài trang để giữ lại.",btnDone:"Xong",tooltipPhotoPending:"Ảnh mới chọn — bấm Lưu để tải lên",confirmLeave:"Bạn có thay đổi chưa lưu (kể cả ảnh vừa chọn). Rời trang thì các thay đổi này sẽ mất. Vẫn rời trang?",errorEmptyName:"Vui lòng nhập tên học sinh",btnPaste:"Dán từ Excel",btnApplyPaste:"Áp dụng",btnAddClassPhoto:"Thêm ảnh lớp",btnPrune:"Dọn {{count}} ảnh thừa",tooltipPrune:"Có {{count}} ảnh của học sinh đã bị xoá khỏi danh sách. Bấm để xoá hẳn các ảnh đó.",tooltipPhoto:"Bấm để chọn ảnh cho học sinh này",tooltipRemovePhoto:"Xoá ảnh học sinh",tooltipRevealPhoto:"Bấm để xem ảnh của riêng em này",tooltipHidePhoto:"Bấm để thu ảnh lại",tooltipRemoveRow:"Xoá học sinh khỏi lớp",uploading:"Đang tải...",pasteTitle:"Dán danh sách từ Excel",pasteWarning:"Danh sách dán vào sẽ THAY THẾ toàn bộ danh sách hiện tại. Học sinh trùng tên được giữ nguyên ảnh.",pastePlaceholder:"Dán cột họ tên vào đây, mỗi học sinh một dòng...",successSave:"Đã lưu lớp",successPrune:"Đã dọn {{count}} ảnh thừa",prunedNone:"Không có ảnh thừa nào",errorLoad:"Không tải được danh sách lớp",errorNotFound:"Không tìm thấy lớp này",errorSave:"Lưu lớp thất bại",errorName:"Vui lòng nhập tên lớp",errorMinStudent:"Lớp phải có ít nhất 1 học sinh",errorPhoto:"Thao tác với ảnh thất bại",errorPasteEmpty:"Chưa có tên nào trong nội dung dán",errorConsent:"Không lưu được cam kết. Vui lòng thử lại.",btnPurge:"Xoá toàn bộ ảnh",tooltipPurge:"Xoá sạch ảnh chân dung và ảnh tập thể của lớp này",confirmPurgeTitle:"Xoá toàn bộ ảnh của lớp?",confirmPurgeMsg:"Toàn bộ ảnh chân dung học sinh và ảnh tập thể của lớp này sẽ bị xoá vĩnh viễn khỏi hệ thống. Danh sách học sinh và tên lớp vẫn giữ nguyên. Không thể hoàn tác.",successPurge:"Đã xoá toàn bộ ảnh của lớp."},photoConsent$2={title:"Cam kết khi sử dụng ảnh học sinh",forClass:"Lớp: {{name}}",warning:"Ảnh chân dung học sinh là dữ liệu cá nhân nhạy cảm. Với học sinh dưới 16 tuổi, pháp luật yêu cầu phải có sự đồng ý của cha, mẹ hoặc người giám hộ hợp pháp.",intro:"Khi tiếp tục, bạn xác nhận:",item1:"Bạn đã được cha, mẹ hoặc người giám hộ của học sinh đồng ý cho sử dụng ảnh trong hoạt động dạy học.",item2:"Ảnh chỉ dùng cho hoạt động dạy học của chính lớp này, không đăng công khai, không dùng cho mục đích thương mại.",item3:"Bạn sẽ xoá ảnh khi phụ huynh rút lại sự đồng ý, hoặc khi không còn cần cho việc dạy học.",item4:"Ảnh chỉ tài khoản của bạn xem được — nền tảng không chia sẻ cho người dùng khác.",checkbox:"Tôi xác nhận đã được phụ huynh/người giám hộ đồng ý và chịu trách nhiệm về nội dung cam kết trên.",btnCancel:"Huỷ",btnAgree:"Tôi cam kết & tiếp tục",btnSaving:"Đang lưu..."},mathKeyboard$1={title:"Chèn công thức",tabs:{symbols:"Ký hiệu",expression:"🧩 Biểu thức",latex:"LaTeX"},groups:{basic:"Cơ bản",geometry:"Hình học",sets:"Tập hợp",logic:"Mũi tên & Logic",greek:"Hy Lạp"},symbols:{plusMinus:"Cộng trừ",times:"Nhân",divide:"Chia",notEqual:"Khác",approx:"Xấp xỉ",lessEqual:"Nhỏ hơn hoặc bằng",greaterEqual:"Lớn hơn hoặc bằng",infinity:"Vô cực",pi:"Pi",degree:"Độ",angle:"Góc",triangle:"Tam giác",perp:"Vuông góc",parallel:"Song song",circle:"Đường tròn",vector:"Vectơ",in:"Thuộc",notIn:"Không thuộc",subset:"Tập con",cup:"Hợp",cap:"Giao",emptySet:"Tập rỗng",reals:"Tập số thực",integers:"Tập số nguyên",naturals:"Tập số tự nhiên",implies:"Suy ra",leadsTo:"Kéo theo",equiv:"Tương đương",forAll:"Với mọi",exists:"Tồn tại"},templates:{frac:{name:"Phân số",num:"Tử",den:"Mẫu"},pow:{name:"Lũy thừa",base:"Cơ số",exp:"Mũ"}
509,sub:{name:"Chỉ số dưới",base:"Biểu thức",sub:"Chỉ số"},subsup:{name:"Chỉ số trên+dưới",base:"Biểu thức",sub:"Chỉ số dưới",sup:"Chỉ số trên"},sqrt:{name:"Căn bậc hai",inner:"Biểu thức"},nrt:{name:"Căn bậc n",n:"Bậc",inner:"Biểu thức"},lim:{name:"Giới hạn",var:"Biến→giá trị",expr:"Biểu thức"},sum:{name:"Tổng",from:"Từ",to:"Đến",expr:"BT"},int:{name:"Tích phân",from:"Dưới",to:"Trên",expr:"BT"}},textSegment:"Văn bản",textPlaceholder:"VD: + , = , ...",emptyPreview:"Bấm nút bên dưới để bắt đầu xây biểu thức...",quickInsert:"Chèn nhanh:",selectElementToAdd:"Chọn loại phần tử để thêm:",addElement:"+ Thêm phần tử",hint:"Tab để chuyển ô · Ctrl+Enter để chèn · Hỗ trợ LaTeX trong ô (ví dụ: x+1, \\alpha)",clearAll:"Xóa hết",insertFormula:"Chèn công thức",latexPlaceholder:"Nhập LaTeX trực tiếp, ví dụ: \\frac{a}{b} + \\sqrt{c}",ctrlEnterHint:"Ctrl+Enter để chèn",deleteTitle:"Xóa",addTitle:"Thêm phần tử",cancel:"Hủy"},groupPurchaseModal$1={title:"Mua Chung — Giảm Thêm Giá",stepEmail:"Nhập email",stepConfirm:"Xác nhận",stepPayment:"Thanh toán",infoAlert:"Mua <strong>{{featureName}}</strong> cho nhiều người — email của bạn tự động thêm vào.",buyerLabel:"{{email}} (bạn)",memberCount:"+ {{count}} email khác = <strong>{{total}} người</strong>",placeholder:`Nhập email đồng nghiệp, cách nhau bởi dấu phẩy hoặc xuống dòng...
510Ví dụ:
511[email protected]
512[email protected], [email protected]`,uploadBtn:"📎 Upload Excel/CSV",exportTemplateBtn:"📥 Xuất mẫu",invalidEmail
512s:"Bỏ qua {{count}} email không hợp lệ: {{emails}}",overLimit:"Tối đa {{max}} người (chưa tính bạn). Vui lòng bớt email.",promoPlaceholder:"Mã giảm giá (nếu có)...",promoDelete:"Xóa",promoApply:"Áp dụng",promoRequired:"Vui lòng nhập mã",promoInvalid:"Mã không tồn tại hoặc sai!",promoApplied:"✅ Mã {{code}}: -{{discount}}%",summaryTitle:"💰 Tổng kết giảm giá",originalPrice:"Giá gốc: {{price}}đ",promoDiscount:"Mã giảm giá: -{{discount}}%",multiYearDiscount:"{{years}} năm: -{{discount}}%",groupDiscount:"Nhóm {{count}} người: -{{discount}}%",bonusMonths:"🎁 Khuyến mãi tháng {{month}}: +{{count}} tháng/người",totalDiscount:"Tổng giảm: <strong>-{{discount}}%</strong> → Mỗi người: <strong>{{price}}đ/{{period}}{{bonus}}</strong>",totalDiscountPct:"Tổng giảm: -{{discount}}%",yearPeriod:"năm",multiYearPeriod:"{{years}} năm",bonusSuffix:" +{{count}}th",totalPayment:"Tổng thanh toán: {{price}}đ",yearsTitle:"Số năm đăng ký",yearsButton:"{{years}} năm",yearsDiscountBadge:"-{{discount}}%",groupTableTitle:"Giảm thêm theo nhóm",groupPeople:"{{count}} người",confirmListTitle:"Danh sách {{total}} người sẽ được mở khóa <strong>{{featureName}}</strong> ({{years}} năm):",youSuffix:" (bạn)",confirmTotal:"💳 Tổng: {{price}}đ",perPersonSummary:"Mỗi người: {{price}}đ / {{years}} năm{{bonus}}",bonusMonthsSuffix:" +{{count}} tháng",unregisteredHint:"Email chưa đăng ký sẽ được tự động mở khóa khi họ đăng nhập lần đầu.",transferLabel:"⚠️ Nội dung chuyển khoản (KHÔNG được sửa):",paymentSummary:"{{count}} người × {{years}} năm — giảm tổng {{discount}}%",bankLabel:"Ngân hàng:",accountNoLabel:"Số TK:",accountNameLabel:"Chủ TK:",waitingText:"Đang chờ thanh toán — hệ thống tự động xử lý...",successTitle:"Đã mở khóa cho {{processed}}/{{total}} người!",failedEmails:"{{count}} email thất bại: {{emails}}",reloadHint:"Trang sẽ tự tải lại sau 2 giây...",close:"Đóng",previewNext:"Xem trước & Xác nhận →",back:"← Quay lại",confirmCreating:"Đang tạo...",confirmCreateQR:"Xác nhận — Tạo QR thanh toán",paidReload:"ĐÃ THANH TOÁN (TẢI LẠI)",errorPrefix:"Lỗi: {{message}}",unlockSuccessToast:"Đã mở khóa cho {{processed}}/{{total}} người!",templateFileName:"danh-sach-email-mua-chung.xlsx",sheetName:"Danh sách email"},btn$1={cancel:"Hủy",upgrade:"Nâng cấp",backToList:"Quay lại danh sách"},confirmDeleteAll$4="Bạn có chắc muốn xóa tất cả câu hỏi?",expiredBanner$1={title:"⚠️ Gói đã hết hạn!",upgrade:"Gia hạn"},questionPicker$1={title:"Chọn câu hỏi cho {{feature}}"},viCommon={cancel:cancel$7,save:save$2,nav:nav$5,header:header$2,manualTransfer,proModal:proModal$2,upgradeModal:upgradeModal$2,internationalModal:internationalModal$2,language:language$2,externalTools:externalTools$2,usage:usage$2,sidebar:sidebar$f,offline:offline$2,pin:pin$2,form:form$y,library:library$4,status:status$2,error:error$a,tts:tts$1,actions:actions$8,listTools:listTools$2,shuffleQuestions:shuffleQuestions$2,groups:groups$4,search:search$2,ttsModal:ttsModal$2,classManager:classManager$2,photoConsent:photoConsent$2,mathKeyboard:mathKeyboard$1,groupPurchaseModal:groupPurchaseModal$1,btn:btn$1,confirmDeleteAll:confirmDeleteAll$4,expiredBanner:expiredBanner$1,questionPicker:questionPicker$1},nav$4={logo:"Giáo viên Đổi mới",aiTools:"Công cụ AI",joinBtn:"🎮 Tham gia (dành cho học sinh)",loginBtn:"Đăng nhập",bugReportBtn:"Sửa lỗi"},hero$8={title:"Giáo viên Đổi mới",subtitle:"Trò chơi dạy học, công cụ AI và hơn thế nữa",description:"Nền tảng dành cho giáo viên các cấp, cung cấp các công cụ dạy học thông minh để tối ưu hóa việc giảng dạy",loginCta:"Đăng nhập ngay - Không cần đăng ký!",joinCta:"🎮 Tham gia (dành cho học sinh)",qrScanCta:"Quét mã QR"},features$5={sectionTitle:"Các Công Cụ Dạy Học",sectionSubtitle:"Khám phá các công cụ giáo dục hiện đại để nâng cao chất lượng giảng dạy",tools:{aiTools:{title:"Công cụ AI",description:"Công cụ AI viết SKKN, Biện pháp GVG, tích hợp NLS,...và nhiều AI khác"},aiSpecialist:{title:"AI Chuyên Dụng",description:"AI dành cho công việc nâng cao"}
512,interactiveVideo:{title:"Video Tương Tác",description:"Tạo video học tập với câu hỏi trắc nghiệm sẽ xuất hiện ở các thời điểm quy định trước"},interactiveImage:{title:"Ảnh Tương Tác",description:"Đặt điểm chạm lên ảnh với câu hỏi Quiz hoặc phiếu học tập — học sinh tương tác ngay trên ảnh"},panoramaMuseum:{title:"Bảo Tàng Panorama - Phòng tranh 3D",description:"Xem trưng bày 3D với ảnh panorama 360 độ tương tác"},quizGame:{title:"Kéo Thả - Nối Ý",description:"Tạo bài trắc nghiệm kéo thả nhãn lên ảnh hoặc kéo thả để nối các ý tương ứng"},companionRobot:{title:"Robot Đồng Hành",description:"Robot AI thông minh đồng hành cùng học sinh trong tiết học"},wheelQuiz:{title:"Vòng Quay - Đua Vịt",description:"Quay vòng quay hoặc đua vịt để chọn học sinh ngẫu nhiên, kết hợp trả lời trắc nghiệm vui nhộn"},handSlashQuiz:{title:"Chém Hoa Quả / Bắt Bong Bóng",description:"Trắc nghiệm tương tác bằng cử chỉ tay — chém hoa quả bay hoặc chọc bóng nổ để chọn đáp án đúng"},flipPuzzleGame:{title:"Trò Chơi Lật Mảnh Ghép",description:"Học sinh trả lời câu hỏi để mở từng mảnh ghép, đoán tên bức ảnh để chiến thắng"},turnBasedGame:{title:"Game Theo Lượt",description:"Tung xúc xắc, di chuyển nhân vật, vượt chướng ngại vật bằng câu hỏi. Phù hợp chơi nhóm 2–4 người trên cùng một thiết bị."},versusGame:{title:"Game Đối Kháng",description:"Học sinh thi đấu 1v1 trên thiết bị riêng — trả lời đúng để đẩy đối thủ về phía sau. Giáo viên mở phòng và theo dõi trực tiếp."},tugOfWarGame:{title:"Kéo Co - Đua thuyền kiến thức",description:"Hai đội thi đấu trả lời câu hỏi để giành chiến thắng trong trò chơi dân gian đầy sôi động"},pacedQuiz:{title:"Trắc nghiệm theo nhịp độ",description:"GV tạo quiz trắc nghiệm, điều khiển nhịp độ trên màn chiếu"},crosswordPuzzle:{title:"Ô Chữ - Khóa Bí Mật",description:"Tạo ô chữ hoặc trò chơi tìm từ khóa ẩn trong bảng chữ cái — học sinh tương tác trực tiếp để giải mã"},flyingWordsGame:{title:"Từ Ngữ Biết Bay",description:"Bắt các từ đang bay (tay hoặc chuột) để sắp xếp/tìm đúng từ ghép thành câu hoàn chỉnh"},headTiltQuiz:{title:"Quiz Nghiêng Đầu",description:"Học sinh nghiêng đầu sang trái hoặc phải để chọn đáp án, nhận diện qua camera"},starBagGame:{title:"Cuộc đua ngôi sao",description:"Hai học sinh giơ ngón tay lần lượt tương ứng với 4 đáp án — trả lời đúng để lấy các ngôi sao và giành chiến thắng"},poseQuiz:{title:"Thể dục ABC",description:"Học sinh thực hiện động tác thể dục theo hình ảnh minh họa kết hợp trả lời câu hỏi trắc nghiệm"},noiseTracker:{title:"Rồng Ngủ - Quản Lý Lớp",description:"Con rồng ngủ trong lớp yên tĩnh, thức giấc khi ồn ào — trò chơi quản lý lớp học thú vị bằng microphone"},journey:{title:"Hành Trình Học Tập",description:"Tạo hành trình học tập với các chặng, bộ đề trắc nghiệm — học sinh thi đấu theo lộ trình"},paperMode:{title:"Chế độ giấy",description:"Quét thẻ giấy để điểm danh, kiểm tra nhanh — phong cách Plickers"},faceRandom:{title:"Ống Kính May Mắn",description:"Gọi tên học sinh bằng ảnh hoặc bằng camera, có thể kết hợp với câu hỏi"},htmlEmbedGame:{title:"Game tự tạo",description:"Dán code HTML game, giao cho học sinh chơi ngay — không cần lập trình"},"scavenger-hunt":{title:"Săn Kho Báu",description:"Gộp nhiều bài học thành 1 cuộc săn tìm – học sinh thu chữ cái và giải từ khóa bí mật"}}},paperModeBeta$5="Quét thẻ giấy A/B/C/D bằng camera — chấm trắc nghiệm cả lớp trong vài giây, không cần thiết bị cho học sinh",betaBadge$5="🧪 Chế độ thử nghiệm",footer$8={ownerLabel:"Chủ sở hữu",ownerName:"Bàn Văn Thịnh",ownerAddress:"Xã Vĩnh Tuy, tỉnh Tuyên Quang",ownerTax:"MST: 002090004198",connectLabel:"Kết nối",legalLabel:"Pháp lý",policy1:"💰 Bảng giá",policy2:"🔒 Chính sách bảo mật",policy3:"📜 Điều khoản sử dụng",policy4:"🚚 Chính sách giao nhận",policy5:"👤 Thông tin người sở hữu",copyright:"© 2025 Phát triển bởi Thầy Giáo Tin.",buildTime:"Cập nhật lúc {{time}} ngày {{date}}",facebook:"Facebook",tiktok:"TikTok",youtube:"Youtube",zalo:"Zalo",zaloCommunity:"Cộng đồ
512ng Zalo",email:"Email",guide:"Hướng dẫn",guideTooltip:"Xem hướng dẫn sử dụng"},webviewModal$2={title:"⚠️ Không thể đăng nhập trong ứng dụng này",intro:"Bạn đang mở trang qua Zalo / Messenger. Để đăng nhập được, hãy mở bằng trình duyệt theo hướng dẫn bên dưới:",step1:"Bước 1: Nhấn menu ⋮ góc trên phải",step2:'Bước 2: Chọn "Mở bằng trình duyệt"',btnClose:"Đóng"},emailModal$5={title:"Địa chỉ email",btnClose:"Đóng"},loading$2="Đang tải công cụ...",viLanding={nav:nav$4,hero:hero$8,features:features$5,paperModeBeta:paperModeBeta$5,betaBadge:betaBadge$5,footer:footer$8,webviewModal:webviewModal$2,emailModal:emailModal$5,loading:loading$2},heroTitle$6="Cùng đổi mới phương pháp giảng dạy và làm việc",modules$2={"ai-tools":{title:"Công cụ AI",description:"Công cụ AI viết SKKN, Biện pháp GVG, tích hợp NLS,...và nhiều AI khác"},"ai-specialist":{title:"AI Chuyên Dụng",description:"AI viết báo cáo nghiên cứu KHKT, mô tả sản phẩm AI và hỗ trợ tạo ra các sản phẩm trong giáo dục"},"interactive-video":{title:"Video Tương Tác",description:"Tạo video học tập với câu hỏi trắc nghiệm sẽ xuất hiện ở các thời điểm quy định trước"},"interactive-image":{title:"Ảnh Tương Tác",description:"Đặt điểm chạm lên ảnh với câu hỏi Quiz hoặc phiếu học tập — học sinh tương tác ngay trên ảnh"},"panorama-museum":{title:"Bảo Tàng Panorama - Phòng tranh 3D",description:"Xem trưng bày 3D với ảnh panorama 360 độ tương tác"},"quiz-game":{title:"Kéo Thả - Nối Ý",description:"Tạo bài trắc nghiệm kéo thả nhãn lên ảnh hoặc kéo thả để nối các ý tương ứng"},"wheel-quiz":{title:"Vòng Quay - Đua Vịt",description:"Quay vòng quay hoặc đua vịt để chọn học sinh ngẫu nhiên, kết hợp trả lời trắc nghiệm vui nhộn"},"hand-slash-quiz":{title:"Chém Hoa Quả / Bắt Bong Bóng",description:"Trắc nghiệm tương tác bằng cử chỉ tay — chém hoa quả bay hoặc chọc bóng nổ để chọn đáp án đúng"},"flip-puzzle-game":{title:"Trò Chơi Lật Mảnh Ghép",description:"Học sinh trả lời câu hỏi để mở từng mảnh ghép, đoán tên bức ảnh để chiến thắng"},"knowledge-train-game":{title:"Đoàn Tàu Tri Thức",description:"Kéo thả xếp các toa thành đoàn tàu đúng thứ tự — nối đáp án câu trước với câu hỏi tiếp theo"},"turn-based-game":{title:"Game Theo Lượt",description:"Tung xúc xắc, di chuyển nhân vật, vượt chướng ngại vật bằng câu hỏi. Phù hợp chơi nhóm 2–4 người trên cùng một thiết bị."},"versus-game":{title:"Game Đối Kháng",description:"Học sinh thi đấu 1v1 trên thiết bị riêng — trả lời đúng để đẩy đối thủ về phía sau. Giáo viên mở phòng và theo dõi trực tiếp."},"tug-of-war-game":{title:"Kéo Co - Đua thuyền kiến thức",description:"Hai đội thi đấu trả lời câu hỏi để giành chiến thắng trong trò chơi dân gian đầy sôi động"},"paced-quiz":{title:"Trắc nghiệm theo nhịp độ",description:"GV tạo quiz trắc nghiệm, điều khiển nhịp độ trên màn chiếu"},"crossword-puzzle":{title:"Ô Chữ - Khóa Bí Mật",description:"Tạo ô chữ hoặc trò chơi tìm từ khóa ẩn trong bảng chữ cái — học sinh tương tác trực tiếp để giải mã"},"head-tilt-quiz":{title:"Quiz Nghiêng Đầu",description:"Học sinh nghiêng đầu sang trái hoặc phải để chọn đáp án, nhận diện qua camera"},"star-bag-game":{title:"Cuộc đua ngôi sao",description:"Hai học sinh giơ ngón tay lần lượt tương ứng với 4 đáp án — trả lời đúng để lấy các ngôi sao và giành chiến thắng"},minesweeper:{title:"Dò Mìn",description:"Học sinh chọn ô chứa đáp án đúng để vượt qua bãi mìn — trắc nghiệm phiêu lưu với 3 mạng, bước nhầm ô có mìn là nổ tung"},flashcard:{title:"Thẻ lật - Thẻ học nhóm",description:"Tạo bộ thẻ ghi nhớ với âm thanh & hình ảnh — lật thẻ, tự đánh giá, học đến khi thuộc"},"mind-map":{title:"Sơ Đồ Tư Duy",description:"GV tạo trước sơ đồ. Trong giờ học, HS sẽ tham gia xây dựng sơ đồ tư duy hoàn chỉnh"},"pose-quiz":{title:"Thể dục ABC",description:"Học sinh thực hiện động tác thể dục theo hình ảnh minh họa kết hợp trả lời câu hỏi trắc nghiệm"},"teaching-materials":{title:"Khóa học của Thầy Giáo Tin",description:"Kho tài liệu giáo án, slide, tài liệu tham khảo dành cho giáo viên"},"noise-tracker":{title:"Rồng Ngủ - Quản Lý Lớp",description:"Con rồng ngủ trong lớp yên tĩnh, thức giấc khi ồn ào — trò chơi quản lý lớp học thú vị bằng microphone"},"flying-words-game":{title:"Từ Ngữ Biết Bay",description:"Bắt các từ đang bay (tay hoặc chuột) để sắp xếp/tìm đúng từ ghép thành câu hoàn chỉnh"},journey:{title:"Hành Trình Học Tập",description:"Tạo hành trình học tập với các chặng, bộ đề trắc nghiệm — học sinh thi đấu theo lộ trình"},"paper-mode":{title:"Chế độ giấy",description:"Quét thẻ giấy để điểm danh, kiểm tra nhanh — phong cách Plickers"},"face-random":{title:"Ống Kính May Mắn",description:"Gọi tên học sinh bằng ảnh hoặc bằng camera, có thể kết hợp với câu hỏi"},"html-embed-game":{title:"Game tự tạo",description:"Dán code HTML game, giao cho học sinh chơi ngay — không cần lập trình"},"scavenger-hunt":{title:"Săn Kho Báu",description:"Gộp nhiều bài học thành 1 cuộc săn tìm – học sinh thu chữ cái và giải từ khóa bí mật"}},comingSoon$2="Sắp ra mắt",startBtn$2="Bắt đầu",lockedBtn$2="Cần mở khóa",trialBtn$2="🎁 Dùng thử",updatingBadge$2="🔧 Tính năng đang cập nhật",journeyModal$2={title:"Hành Trình Học Tập",lockLabel:"🔒 Tính năng không cho phép dùng thử",intro:"Hành Trình Học Tập cho phép giáo viên tạo các lộ trình tương tác với nhiều chặng, mỗi chặng chứa bộ đề trắc nghiệm. Học sinh thi đấu qua từng chặng để hoàn thành hành trình.",featuresTitle:"✨ Tính năng nổi bật:",feature1:"Tạo hành trình với nhiều chặng (stages)",feature2:"4 dạng câu hỏi: ABCD, Nhiều đáp án, Đúng/Sai, Điền từ",feature3:"Giao bài bằng mã phòng",feature4:"Theo dõi kết quả chi tiết từng học sinh",feature5:"Tự động lưu vào Kho câu hỏi",videoTitle:"
512🎬 Video hướng dẫn:",upgradeBtn:"🔓 Nâng cấp ngay — 30.000đ/năm"},versusModal$2={title:"Game Đối Kháng",lockLabel:"🔒 Tính năng không cho phép dùng thá»­",intro:"Game Đối Kháng cho phép học sinh thi đấu 1v1 trá»±c tiếp trên thiết bị riêng. Trả lời đúng để đẩy đối thá»§ về phía sau — ai đạt mốc trước thì thắng!",featuresTitle:"✨ Tính năng nổi bật:",feature1:"Học sinh dùng thiết bị riêng — không cần chia màn hình",feature2:"GV mở phòng, chia sẻ mã, theo dõi trá»±c tiếp",feature3:"Hiệu ứng đẩy gậy real-time theo điểm số",feature4:"GV xem câu hỏi 2 bên cùng lúc trong chế độ xem",feature5:"Kết quả lưu tá»± động vào danh sách nộp bài",videoTitle:"🎬 Video hướng dẫn:",upgradeBtn:"🔓 Nâng cấp ngay — 30.000đ/năm"},htmlEmbedModal$1={title:"Game Tá»± Tạo",lockLabel:"🔒 Tính năng không cho phép dùng thá»­",intro:"Tính năng Game Tá»± Tạo cho phép bạn tạo ra rồi nhúng trá»±c tiếp mã HTML cá»§a các game khácđể học sinh chÆ¡i trá»±c tiếp trên hệ thống. Bạn cÅ©ng được sở hữu mã nguồn cá»§a các game đó",featuresTitle:"✨ Tính năng nổi bật:",feature1:"Nhúng nhanh code HTML game từ các nguồn khác",feature2:"Hỗ trợ chuẩn SCORM, iSpring, Articulate",feature3:"Học sinh chÆ¡i trá»±c tiếp trên giao diện cá»§a GVĐM",feature4:"Phóng to toàn màn hình chuẩn xác linh hoạt",feature5:"Giao bài cho học sinh trải nghiệm ngay trên hệ thống",videoTitle:"🎬 Video hướng dẫn:",upgradeBtn:"🔓 Nâng cấp ngay — 30.000đ/năm"},footer$7={ownerLabel:"Chá»§ sở hữu",ownerName:"Bàn Văn Thịnh",ownerAddress:"Xã VÄ©nh Tuy, tỉnh Tuyên Quang",ownerTax:"MST: 002090004198",connectLabel:"Kết nối",legalLabel:"Hỗ trợ & Pháp lý",utilsLabel:"Tiện ích",policy1:"💰 Bảng giá",policy2:"🔒 Chính sách bảo mật",policy3:"📜 Điều khoản sá»­ dụng",policy4:"🚚 Chính sách giao nhận",policy5:"👤 Thông tin người sở hữu",guide:"Hướng dẫn",guideTooltip:"Xem hướng dẫn sá»­ dụng",fixError:"Khắc phục lỗi",fixErrorTooltip:"Dùng khi bị tải ngược phiên bản cÅ© hoặc bị lỗi không vào được game",confirmReset:"Thao tác này sẽ xóa dữ liệu cÅ© và tải lại trang mới nhất để sá»­a các lỗi hiển thị (bạn sẽ cần đăng nhập lại). Bạn có chắc chắn không?",copyright:"© 2025 Phát triển bởi Thầy Giáo Tin",buildTime:"Cập nhật lúc {{time}} ngày {{date}}"},emailModal$4={title:"Địa chỉ email",btnClose:"Đóng"},helpModal$4={title:"Hướng Dẫn Trang Chá»§",description:"Tìm hiểu về các tính năng và công cụ có sẵn trong nền tảng"},paperModeBeta$4="Quét thẻ giấy A/B/C/D bằng camera — chấm trắc nghiệm cả lớp trong vài giây, không cần thiết bị cho học sinh",betaBadge$4="🧪 Chế độ thá»­ nghiệm",viHome={heroTitle:heroTitle$6,modules:modules$2,comingSoon:comingSoon$2,startBtn:startBtn$2,lockedBtn:lockedBtn$2,trialBtn:trialBtn$2,updatingBadge:updatingBadge$2,journeyModal:journeyModal$2,versusModal:versusModal$2,htmlEmbedModal:htmlEmbedModal$1,footer:footer$7,emailModal:emailModal$4,helpModal:helpModal$4,paperModeBeta:paperModeBeta$4,betaBadge:betaBadge$4},logoText$2="Giáo viên đổi mới",logoSubtitle$2="Công cụ dạy học, AI và hÆ¡n thế nữa",loginTitle$2="Đăng nhập",loginDescription$2="Đăng nhập để bắt đầu. Nếu bạn đang dùng Zalo, Messenger, hãy bấm vào dấu ba chấm bên góc phải, chọn Mở bằng trình duyệt",loggingInBtn$2="Đang đăng nhập...",loginGoogleBtn$2="Đăng nhập bằng Google",loginNote$2="Bằng việc đăng nhập, bạn chấp nhận Điều khoản sá»­ dụng và Chính sách bảo mật cá»§a chúng tôi.",loginFooterText$2="Dành cho giáo viên và học sinh",highlightTools$2="Kho công cụ dạy học tương tác",highlightAI$2="Trợ lý AI soạn bài, tích hợp, viết SKKN, ...",highlightSimulation$2="Mô phỏng trá»±c quan (3D, 2D, chuyển động, ...) các bài dạy",highlightClassroom$2="Quản lý lớp chá»§ nhiệm",highlightFree$2="Dùng ngay, không cần cài đặt",loginFailed$2="Đăng nhập thất bại: {{error}}",pleaseTryAgain$2="Vui lòng thá»­ lại.",loginNotePrefix$2="Bằng việc đăng nhập, bạn chấp nhận",loginNoteTerms$2="Điều khoản sá»­ dụng",loginNoteAnd$2="và",loginNotePrivacy$2="Chính sách bảo mật",loginNoteSuffix$2=" cá»§a chúng tôi.",disclaimerCopyright$2="Bằng việc tải lên (upload) bất kỳ hình ảnh, âm thanh, hoặc dữ liệu nào, bạn cam kết sở hữu hợp pháp hoặc được sá»± cho phép cá»
512§a chá»§ sở hữu bản quyền. Hệ thống có toàn quyền gỡ bỏ ngay lập tức và không cần thông báo trước đối với các nội dung bị khiếu nại, có dấu hiệu vi phạm pháp luật hoặc bản quyền. Nền tảng miễn trừ toàn bộ trách nhiệm liên quan đến các vi phạm do người dùng gây ra.",disclaimerConsent$2="Khi bạn đăng nhập là bạn đồng ý với các điều khoản trên.",consentCheckboxLabel$2="Tôi đã đọc và đồng ý với Điều khoản sá»­ dụng, Chính sách bảo mật, các cam kết về bản quyền nội dung và trách nhiệm khi sá»­ dụng ảnh, thông tin học sinh nêu trên.",consentRequired$2="Vui lòng tích chọn đồng ý với điều khoản trước khi đăng nhập.",disclaimerStudentPhoto$2="Nếu bạn tải lên ảnh hoặc họ tên học sinh, bạn cam kết đã được cha, mẹ hoặc người giám hộ hợp pháp đồng ý (bắt buộc với học sinh dưới 16 tuổi), chỉ dùng cho hoạt động dạy học cá»§a chính lớp mình và sẽ xóa khi không còn cần thiết.",popupHint$2="Nếu chưa thấy cá»­a sổ chọn Email, hãy tìm ở thanh tác vụ phía dưới màn hình",errInvalidCredential$2="Phiên đăng nhập Google trên trình duyệt này đã hết hạn nên không vào được. Hãy xoá cookie rồi đăng nhập lại.",errPopupBlocked$2="Trình duyệt đã chặn cá»­a sổ đăng nhập Google. Hãy bấm vào biểu tượng chặn pop-up ở góc phải thanh địa chỉ, chọn Luôn cho phép, rồi thá»­ lại.",errPopupClosed$2="Bạn đã đóng cá»­a sổ đăng nhập Google trước khi chọn xong tài khoản. Hãy bấm Đăng nhập bằng Google lần nữa.",errCookiesBlocked$2="Trình duyệt đang chặn cookie nên không đăng nhập Google được. Hãy xoá cookie rồi thá»­ lại.",errNetwork$2="Mất kết nối mạng khi đang đăng nhập. Hãy kiểm tra lại Wi-Fi hoặc 4G rồi thá»­ lại.",errTooManyRequests$2="Bạn đã thá»­ đăng nhập quá nhiều lần. Vui lòng đợi vài phút rồi thá»­ lại.",errUserDisabled$2="Tài khoản này đã bị khoá. Vui lòng liên hệ quản trị viên để được hỗ trợ.",errWebView$2="Bạn đang mở trang trong ứng dụng Zalo/Facebook nên không đăng nhập Google được. Hãy bấm dấu ba chấm ở góc trên bên phải, chọn Mở bằng trình duyệt, rồi đăng nhập lại.",errUnknown$2="Không đăng nhập được. Nguyên nhân thường gặp nhất là cookie cÅ© cá»§a trình duyệt. Hãy thá»­ xoá cookie rồi đăng nhập lại.",errCodeHint$2="Mã lỗi: {{code}}",cookieHelpBtn$2="📋 Xem cách xoá cookie",cookieHelpTitle$2="CÁCH XOÁ COOKIES",cookieHelpStep1$2="Vào trang bị lỗi.",cookieHelpStep2$2="Nhấn <b>Ctrl + Shift + Del</b> (nút Delete).",cookieHelpStep3$2="Bảng <b>Xoá dữ liệu duyệt web</b> hiện ra (như ảnh dưới), bỏ tích hết, <b>chỉ để lại dòng thứ 2</b>.",cookieHelpStep4$2="Góc trên bên phải cá»§a bảng này, chọn <b>Xem thêm</b> (hoặc <b>More</b>), chọn <b>Từ trước đến nay</b> (hoặc <b>All time</b>). Sau đó nhấn <b>Xoá dữ liệu</b> ở góc dưới bên phải.",cookieHelpStep5$2="Làm xong <b>tắt Chrome/Cốc Cốc</b>. Vào lại là được.",cookieHelpImgAlt$2="Ảnh minh hoạ bảng Xoá dữ liệu duyệt web cá»§a Chrome",cookieHelpClose$2="Đã hiểu",viLogin={logoText:logoText$2,logoSubtitle:logoSubtitle$2,loginTitle:loginTitle$2,loginDescription:loginDescription$2,loggingInBtn:loggingInBtn$2,loginGoogleBtn:loginGoogleBtn$2,loginNote:loginNote$2,loginFooterText:loginFooterText$2,highlightTools:highlightTools$2,highlightAI:highlightAI$2,highlightSimulation:highlightSimulation$2,highlightClassroom:highlightClassroom$2,highlightFree:highlightFree$2,loginFailed:loginFailed$2,pleaseTryAgain:pleaseTryAgain$2,loginNotePrefix:loginNotePrefix$2,loginNoteTerms:loginNoteTerms$2,loginNoteAnd:loginNoteAnd$2,loginNotePrivacy:loginNotePrivacy$2,loginNoteSuffix:loginNoteSuffix$2,disclaimerCopyright:disclaimerCopyright$2,disclaimerConsent:disclaimerConsent$2,consentCheckboxLabel:consentCheckboxLabel$2,consentRequired:consentRequired$2,disclaimerStudentPhoto:disclaimerStudentPhoto$2,popupHint:popupHint$2,errInvalidCredential:errInvalidCredential$2,errPopupBlocked:errPopupBlocked$2,errPopupClosed:errPopupClosed$2,errCookiesBlocked:errCookiesBlocked$2,errNetwork:errNetwork$2,errTooManyRequests:errTooManyRequests$2,errUserDisabled:errUserDisabled$2,errWebView:errWebView$2,errUnknown:errUnknown$2,errCodeHint:errCodeHint$2,cookieHelpBtn:cookieHelpBtn$2,cookieHelpTitle:cookieHelpTitle$2,cookieHelpStep1:cookieHelpStep1$2,cookieHelpStep2:cookieHelpStep2$2,cookieHelpStep3
512:cookieHelpStep3$2,cookieHelpStep4:cookieHelpStep4$2,cookieHelpStep5:cookieHelpStep5$2,cookieHelpImgAlt:cookieHelpImgAlt$2,cookieHelpClose:cookieHelpClose$2},page$q={sidebarTitle:"🪢 Kéo Co Kiến Thức",newGame:"Tạo Trò chơi mới",myGames:"Kéo co của tôi",viewGuideTooltip:"Xem hướng dẫn sử dụng",guideLabel:"Hướng dẫn sử dụng",guideLabelShort:"Hướng dẫn",guideTitle:"Hướng Dẫn Kéo Co Kiến Thức",guideDesc:"Tìm hiểu cách tạo trò chơi Kéo Co Kiến Thức để học sinh thi đấu"},share$b={loadingGame:"Đang tải trò chơi Kéo Co...",loadError:"Không thể tải trò chơi. Link có thể đã hết hạn hoặc bị xóa.",notFound:"Không tìm thấy trò chơi",backHome:"Về Trang Chủ"},myGames$f={loadListError:"❌ Lỗi khi tải danh sách trò chơi",deleteConfirm:"Bạn có chắc muốn xóa trò chơi này?",deleteSuccess:"✅ Đã xóa trò chơi",deleteError:"❌ Lỗi khi xóa trò chơi",loadingList:"⏳ Đang tải danh sách trò chơi...",myGamesCount:"🪢 Kéo co của tôi ({{count}})",noGames:"📭 Chưa có trò chơi nào",createFirstGame:"➕ Tạo Trò chơi đầu tiên",questionCount:"{{count}} câu hỏi",playTest:"Chơi",assign:"Giao nhiệm vụ",edit:"Chỉnh sửa",delete:"Xóa",lockedTip:"Gia hạn để mở bài này",extendSubscription:"Gia hạn 30k/năm",expiredLabel:"Gói đã hết hạn!",downloadOffline:"Tải xuống",downloadOfflineUpgrade:"Nâng cấp để tải xuống",downloading:"Đang tải...",downloadOfflineError:"❌ Không tạo được file tải xuống, vui lòng thử lại",demo:{title:"Kéo Co - Bản Chạy Thử",badge:"Bản chạy thử",hint:"Chơi thử để trải nghiệm tính năng trước khi tạo bài của bạn"}},teamPlay$2={loading:"Loading...",teamBlue:"Đội Xanh",teamRed:"Đội Đỏ",freeze:"Đóng Băng!",punishment:"Phạt trả lời sai"},form$x={addQuestionSuccess:"✅ Đã thêm {{count}} câu hỏi (Tổng cộng: {{total}})",updateQuestionSuccess:"✅ Đã cập nhật câu hỏi",removeQuestionMsg:"🗑️ Đã xóa câu hỏi {{index}}",clearAllConfirm:"Xóa tất cả câu hỏi?",clearAllSuccess:"🗑️ Đã xóa tất cả câu hỏi",titleRequired:"❌ Vui lòng nhập tiêu đề trò chơi",minQuestionsRequired:"❌ Vui lòng thêm ít nhất 5 câu hỏi (hiện tại: {{count}})",updateGameSuccess:"✅ Đã cập nhật trò chơi!",createGameSuccess:"✅ Đã tạo trò chơi Kéo Co mới!",limitReached:"⚠️ Bạn đã dùng hết lượt tạo Kéo Co miễn phí. Vui lòng nâng cấp để tiếp tục.",saveError:"❌ Lỗi khi lưu trò chơi: {{error}}",testRequireQuestions:"⚠️ Vui lòng thêm câu hỏi trước khi test",untitledGame:"Kéo Co chưa có tên",editGameTitle:"Chỉnh sửa Kéo Co",createGameTitle:"Tạo Kéo Co mới",trialCount:"📌 Đã dùng {{current}}/{{limit}} lượt tạo Kéo Co",premiumStatus:"✅ Bạn đang dùng chế độ Premium - Không giới hạn",proStatus:"✅ Bạn đang dùng chế độ Pro - Không giới hạn",formTitleLabel:"Tiêu đề Trò chơi:",formTitlePlaceholder:"Nhập tiêu đề...",configSectionTitle:"⚙️ Cấu hình trò chơi",team1NameLabel:"Tên Đội 1:",team2NameLabel:"Tên Đội 2:",timeLimitLabel:"Thời gian thi đấu (giây):",time30s:"30 giây",time60s:"60 giây (Tiêu chuẩn)",time90s:"90 giây",time120s:"120 giây",time180s:"3 phút",time300s:"5 phút",time600s:"10 phút",time900s:"15 phút",time1200s:"20 phút",winDiffLabel:"Số điểm chênh lệch để thắng:",wrongFreezeTimeLabel:"Thời gian đóng băng khi sai (giây):",gameModeLabel:"Chế độ chơi",modeDefault:"Mặc định",modeDefaultDesc:"Mỗi đội có bộ câu hỏi riêng, trả lời độc lập. Đội nào vượt chênh lệch điểm sẽ thắng.",modeSame:"Chế độ cùng câu hỏi",modeSameDesc:"2 đội trả lời chung 1 câu hỏi. Đội nào đúng sẽ kéo được dây và cả 2 chuyển câu mới. Đội sai bị đóng băng. Vượt chênh lệch điểm thì thắng.",modeTarget:"Chạm mốc thì thắng",modeTargetDesc:"Câu hỏi lặp lại vô hạn. Đội nào đạt đủ số câu đúng trước sẽ thắng ngay lập tức.",targetScoreLabel:"Số câu đúng để thắng:",noShuffleA:"Không đảo thứ tự đáp án",noShuffleADesc:"Các đáp án sẽ hiển thị theo đúng thứ tự đã nhập, không bị xáo trộn",questionOrderLabel:"Thứ tự câu hỏi",shuffleQDefault:"Đảo ngẫu nhiên (mặc định)",shuffleQDefaultDesc:"Câu hỏi sẽ được xáo trộn ngẫu nhiên mỗi lần chơi",noShuffleQ:"Giữ nguyên thứ tự",noShuffleQDesc:"Câu hỏi khi chơi sẽ xuất hiện đúng theo thứ tự trong danh sách đã nhập",endOnLast:"Hết câu thì hết game",endOnLastDesc:"Khi một đội trả lời hết bộ câu hỏi, trò chơi kết thúc ngay — đội có điểm cao hơn thắng",controlModeLabel:"Phương thức điều khiển",controlTouch:"Sử dụng màn tương tác",controlKeyboard:"Sử dụng bàn phím (Đội Xanh: Q W A S - Đội Đỏ: O P K L)",questionsSectionTitle:"❓ Bộ câu hỏi ({{count}} câu)",clearAllBtn:"🗑️ Xóa tất cả",pickFromBankBtn:"🗃️ Chọn từ Kho hoặc AI",manualInputBtn:"✏️ Nhập thủ công",questionsNote:"* Cần ít nhất 5 câu hỏi. Câu hỏi sẽ xuất hiện lại nếu trả lời hết.",questionListHeader:"Danh sách câu hỏi",answersCountLbl:"{{count}} đáp án",editQuestionTooltip:"Sửa câu hỏi này",deleteQuestionTooltip:"Xóa câu hỏi này",noQuestionsLbl:"📝 Chưa có câu hỏi nào",noQuestionsDesc:"Chọn từ Kho hoặc AI, hoặc Nhập thủ công để bắt đầu",playTestBtn:"▶️ Test chơi thử",savingBtn:"💾 Đang lưu...",saveBtn:"💾 Lưu Trò chơi",selectQuestionsTitle:"Chọn câu hỏi (Bạn có thể chọn bao nhiêu tùy thích)",pickFromLessonBtn:"Từ bài có sẵn",lessonPickerTitle:"Chọn bài để lấy câu hỏi",aiAudioHint:"👉 Âm thanh câu hỏi được hỗ trợ ở chế độ 'Cùng câu hỏi'",noAiAudioHint:"👉 Âm thanh câu hỏi không được hỗ trợ ở chế độ này",bgmLabel:"
512🎵 Nhạc nền mặc định",bgmDefault:"Mặc định (Bài 4)",bgmTrack:"Bài {{n}}",bgmUploadHint:"Học sinh vẫn có thể đổi nhạc trong lúc chơi.",bgmPrivateLabel:"Hoặc tải nhạc riêng (FullGame):",competitionLabel:"🎮 Môn thi đấu",tugOfWarOption:"🪢 Kéo co",dragonBoatOption:"🚣 Đua thuyền rồng",defaultHint:"Mặc định",newHint:"Mới",missingLibraryFields:"Vui lòng chọn Cấp học, Môn học và Khối lớp để đăng lên thư viện.",aiAudioWarning:"Chọn chế độ 'Cùng câu hỏi' trong cài đặt để bật âm thanh câu hỏi",lessonPickerNoMatch:"Không tìm thấy câu hỏi phù hợp (đã bỏ qua {{count}} câu).",lessonPickerAdded:'Đã thêm {{added}} câu từ "{{title}}". Bỏ qua {{skipped}} câu không hợp lệ.',lessonPickerAddedOnly:'Đã thêm {{added}} câu từ "{{title}}".'},player$j={unmute:"🔇 Bật Âm",mute:"🔊 Tắt Âm",fullscreen:"⛶ Toàn Màn Hình",exit:"Thoát",gameOver:"Kết thúc!",draw:"Hòa Nhau!",winnerLbl:"Đội chiến thắng:",finalScoreLbl:"Tỉ số: {{score1}} - {{score2}}",playAgainBtn:"🔄 Chơi Lại",viewReportBtn:"📋 Xem Báo Cáo",exitBtn:"❌ Thoát",reportTitle:"📋 Báo Cáo Kết Quả",reportDraw:"Hòa Nhau",reportWinnerBlue:"🏆 Đội Xanh thắng",reportWinnerRed:"🏆 Đội Đỏ thắng",reportWinnerSuffix:"thắng",reportScoreSuffix:"điểm",closeBtn:"✕ Đóng",reportTeamBlue:"🔵 Đội Xanh ({{score}} điểm)",reportTeamRed:"🔴 Đội Đỏ ({{score}} điểm)",reportEmpty:"Chưa có câu trả lời nào.",reportQuestionNum:"Câu {{index}}",reportChosen:"Đã chọn:",reportImage:"(hình ảnh)",reportCorrectHint:"Đáp án đúng:",audioStop:"⏹️ Dừng",audioReplay:"🔊 Nghe lại",assignmentIntro:"Nhập tên thành viên của 2 đội trước khi bắt đầu",exampleNames:"Ví dụ: Linh, Thịnh, Khang,...",startTugCta:"🚩 Bắt đầu kéo co!",introStartBtn:"Bắt đầu",introRuleTime:"Thời gian thi đấu: {{seconds}} giây",introRuleDiff:"Đội nào hơn {{diff}} điểm sẽ thắng ngay lập tức",introRuleTarget:"Đội nào đạt {{score}} điểm trước sẽ thắng",introRuleShared:"Hai đội cùng trả lời 1 câu hỏi — đội đúng trước được điểm và cả 2 chuyển câu mới",introRuleIndep:"Mỗi đội có {{count}} câu hỏi riêng, trả lời độc lập",introRuleFreeze:"Trả lời sai bị đóng băng {{seconds}} giây",introRuleKeyboard:"Điều khiển bàn phím: Đội Xanh Q W A S — Đội Đỏ O P K L",introRuleTouch:"Chạm/bấm vào đáp án để trả lời"},viTugOfWar={page:page$q,share:share$b,myGames:myGames$f,teamPlay:teamPlay$2,form:form$x,player:player$j},sidebar$e={title:"Video Tương Tác",upgradePro:"Nâng Cấp Lẻ",upgradeProTitle:"Nâng cấp để mở khóa giới hạn",createNew:"Tạo video mới",myLessons:"Bài giảng của tôi",allowSeeking:"Cho phép tua video",saving:"Đang lưu...",update:"Cập nhật",saveLesson:"Lưu bài giảng",preview:"Xem thử",guide:"Hướng dẫn",guideTitle:"Xem hướng dẫn sử dụng",guideUsage:"Hướng dẫn sử dụng",trialUsed:"Đã dùng",trialLimit:"lượt",unlimited:"Không giới hạn"},helpModal$3={title:"Hướng Dẫn Video Tương Tác",description:"Tìm hiểu cách tạo và quản lý video tương tác với câu hỏi trắc nghiệm"},myLessons$4={title:"Video của tôi",subtitle:"Quản lý các video tương tác của bạn",emptyTitle:"Chưa có video nào",emptyHint:'Bấm "Tạo video mới" từ menu bên trái để bắt đầu!',questionCount:"câu hỏi",updatedAt:"Cập nhật:",startFrom:"Bắt đầu từ:",viewOriginal:"Xem video gốc",confirmDelete:"Bạn có chắc chắn muốn xóa video này?",deleteSuccess:"Đã xóa video thành công",deleteFail:"Không thể xóa video",loadFail:"Không thể tải danh sách video",localVideoWarning:"Video tải lên chỉ có thể xem ở máy tính ban đầu, không thể giao bài",btnView:"Xem video",btnEdit:"Chỉnh sửa",btnAssign:"Giao bài",btnDelete:"Xóa",defaultTitle:"Video tương tác",demo:{title:"Video Tương Tác - Bản Chạy Thử",badge:"Bản chạy thử",hint:"Xem thử video tương tác để trải nghiệm tính năng trước khi tạo bài của bạn"},localVideoShareWarning:"Chỉ có thể chia sẻ bài dùng YouTube. Bài dùng video local không thể chia sẻ.",createFirstBtn:"Tạo video đầu tiên"},quizForm$1={titlePlaceholder:"Nhập tên video...",noTitle:"Chưa đặt tên – click để đổi",youtubeHint:"Dùng link YouTube",localHint:"Tải video từ máy",youtubeUrlPlaceholder:"Dán link YouTube vào đây…",localModeHint:"Đang ở chế độ tải video từ máy",localReady:"Video đã tải lên",localChangeFile:"Đổi file",localMissing:`Video không còn trong bộ nhớ đệm,
513hãy tải lên lại`,localPrompt:"Click để chọn file video",localPromptSub:"MP4, WebM, MOV… − chỉ lưu trên máy này",localInfoBanner:"Video tải lên chỉ dùng được trên máy tính này. Không thể giao bài cho học sinh.",ytPlaceholder:"Nhập link YouTube để xem video",localPlaceholder:"Chọn file video để xem trước",playerLoading:"Đang tải…",addAtTime:"Thêm tại",panelTitle:"Sự kiện dòng thời gian",noQuestions:"Chưa có câu hỏi",noQuestionsHint:"Play video → click thanh tiến độ → nhấn nút thêm",errorNoUrl:"Vui lòng nhập link YouTube",errorNoFile:"Vui lòng chọn file video",errorIncomplete:"Vui lòng điền đầy đủ thông tin cho tất cả câu hỏi",saveSuccess:"Đã lưu video thành công!",updateSuccess:"Đã cập nhật video thành công!",saveFail:"Không thể lưu video. Vui lòng thử lại.",copiedLink:"Đã sao chép link!",saveLinkFirst:"Vui lòng lưu video trước!",indexedDbFail:"Không thể lưu video vào bộ nhớ đệm. Trình duyệt có thể không hỗ trợ.",minLessons:"Phải có ít nhất một câu hỏi!",modalAddTitle:"+ Thêm câu hỏi mới",modalEditTitle:"Chỉnh sửa câu hỏi",modalManual:"Nhập thủ công",modalBank:"Chọn từ Kho hoặc AI",modalAI:"Tạo bằng AI",modalBankHint:"Chọn một câu hỏi từ Kho câu hỏi hoặc sinh bằng AI, sau đó xem lại và lưu.",modalOpenBank:"Mở Kho câu hỏi / AI",modalCancel:"Hủy",modalSave:"Lưu câu hỏi",importedFromBank:"Đã nhập câu hỏi từ Kho. Xem lại rồi nhấn Lưu.",questionPickerTitle:"Chọn câu hỏi cho Video Tương Tác",modalOpenLesson:"Từ bài có sẵn",lessonPickerTitle:"Chọn bài để lấy câu hỏi",lessonPickerNoMatch:"Không có câu nào phù hợp."},quizOverlay$1={question:"Câu",rewind:"Xem lại video",correct:"Chính xác! Tuyệt vời!",incorrect:"Hãy thử lại nhé!"},videoPlayer$1={back:"Quay lại",backEditor:"Quay lại trang soạn thảo",notFoundTitle:"Không tìm thấy video",notFoundMsg:"Video tải lên chỉ có thể xem ở máy tính ban đầu. Bộ nhớ đệm (IndexedDB) đã bị xóa hoặc bạn đang dùng thiết bị khác.",notFoundHint:"Quay lại để tải lên lại video trên máy này.",loading:"Đang tải video từ bộ nhớ đệm…"},quizEntry$1={question:"Câu",answer:"Đáp án",timeClick:"Click để chỉnh thời gian",noContent:"Chưa có nội dung",questionPlaceholder:"Nhập câu hỏi... (hỗ trợ công thức toán)"},lockedTip$7="Gia hạn để mở bài này",viInteractiveVideo={sidebar:sidebar$e,helpModal:helpModal$3,myLessons:myLessons$4,quizForm:quizForm$1,quizOverlay:quizOverlay$1,videoPlayer:videoPlayer$1,quizEntry:quizEntry$1,lockedTip:lockedTip$7}
513,hero$7={title:"💰 Bảng giá dịch vụ",sub:"Sử dụng thử miễn phí — chỉ trả tiền khi cần thêm. Không thu phí ẩn."},proPlan$2={title:"Gói FullGame — Trọn bộ công cụ bài giảng tương tác",badge:"Được ưa chuộng nhất",price:"200.000₫",unit:"/ năm",description:"Mở khóa toàn bộ game và công cụ soạn bài giảng tương tác. KHÔNG bao gồm Công cụ AI và Tiện ích GD (bán riêng).",features:["Cho phép tải âm thanh và thu âm vào nội dung bài giảng","Nhận báo cáo chi tiết quá trình làm bài của từng học sinh","Sử dụng không giới hạn tất cả công cụ dạy học tương tác","Lưu trữ bài học mãi mãi","Công cụ AI mua riêng 30.000đ/công cụ — không bao gồm trong FullGame"]},singularFeatures$2={title:"Mua lẻ từng tính năng",price:"30.000₫",unit:"/ năm / tính năng",line1:"Mỗi tính năng tương tác mua riêng lẻ với giá 30.000₫/năm.",line2:"Chuyển khoản 60.000₫ = 2 năm, 90.000₫ = 3 năm — hệ thống tự động kích hoạt.",list:["Các tính năng tương tác (Video, Ô chữ, Kéo co, v.v.)"]},extendedLink$2={title:"Gói Lưu Trữ Dài Hạn (Extended Link)",price:"50.000₫",unit:"/ 1 năm",description:"Dành cho GV cần lưu link bài học dài hạn để nghiên cứu khoa học, viết sáng kiến kinh nghiệm (SKKN).",features:["Giao bài với thời hạn hiệu lực lên đến 1 năm thay vì tối đa 30 ngày mặc định","Sử dụng cho toàn bộ các trò chơi có tính năng Giao bài"]},aiTools$2={title:"Bộ Công cụ AI Chuyên sâu",group1Title:"Mua lẻ từng công cụ",group1Price:"30.000₫",group1Unit:"/ công cụ / vĩnh viễn",group2Title:"Mua gộp nhiều công cụ",group2Price:"Giảm đến 20%",group2Unit:"",group3Title:"Tặng kèm FullGame",group3Price:"2 công cụ",group3Unit:"miễn phí",line1:"Trả một lần, dùng mãi mãi.",noteLabel:"Lưu ý:",line2:"Mua gộp càng nhiều công cụ, giảm giá càng cao (mỗi công cụ thêm giảm thêm 2%, tối đa 20%). FullGame tặng kèm 2 công cụ đầu tiên.",features:["14 công cụ AI chuyên sâu cho giáo viên — từ soạn giáo án đến tạo đề thi","Mua lẻ 30.000đ/công cụ hoặc mua gộp để được giảm giá","Mở khóa vĩnh viễn — Không giới hạn số lần sử dụng"]},freeTrial$2={title:"Gói Miễn phí & Dùng thử",intro:"Website cho phép sử dụng <0>miễn phí</0> nhiều tính năng cơ bản. Với các tính năng tương tác chuyên sâu, bạn được tạo tối đa 05 sản phẩm để dùng thử. Riêng mảng AI: Có các công cụ miễn phí hoàn toàn (Chat, Ảnh hướng nghiệp...), còn các Nhóm chuyên sâu cần mở khóa để sử dụng vĩnh viễn.",table:{feature:"Tính năng",limit:"Giới hạn thử"},note:"Các bài đã tạo trong thời gian dùng thử được giữ lại và vẫn truy cập được sau khi hết hạn."},multiYear$2={title:"Giảm giá khi đăng ký nhiều năm",intro:"Áp dụng cho <0>FullGame</0> và <2>tính năng lẻ</2> khi đăng ký từ 2 năm trở lên:",table:{years:"Số năm",discount:"Giảm giá"},yearUnit:"{{count}} năm",noDiscount:"Không giảm",discountValue:"Giảm {{percent}}%",note:"Giảm giá áp dụng trước, sau đó mới tính thêm mã giảm giá (nếu có)."},notes$2={title:"📌 Lưu ý:",item1:"Thanh toán qua <0>chuyển khoản ngân hàng</0> (quét mã QR tự động tạo trong ứng dụng).",item2:"Hệ thống nâng cấp tự động sau khi xác nhận thanh toán — thường trong vòng vài phút.",item3:"Nếu cần hỗ trợ, liên hệ Zalo <0>{{phone}}</0>."},cta$2={title:"Bắt đầu ngay hôm nay",sub:"Dùng thử miễn phí — nâng cấp bất kỳ lúc nào ngay trong ứng dụng.",btn:"Liên hệ Zalo để được tư vấn"},viPricing={hero:hero$7,proPlan:proPlan$2,singularFeatures:singularFeatures$2,extendedLink:extendedLink$2,aiTools:aiTools$2,freeTrial:freeTrial$2,multiYear:multiYear$2,notes:notes$2,cta:cta$2},shipping$2={hero:{title:"Chính Sách Vận Chuyển & Giao Nhận",sub:"Hướng dẫn quy trình kích hoạt dịch vụ số trên <1>{{url}}</1>",lastUpdated:"Cập nhật lần cuối: {{date}}"}
513,digitalNote:{title:"📦 Lưu ý quan trọng:",content:"<1>{{name}}</1> là nền tảng cung cấp <1>dịch vụ phần mềm kỹ thuật số (SaaS)</1>. Chúng tôi <1>không giao hàng hóa vật lý</1>. Tất cả sản phẩm/dịch vụ được cung cấp hoàn toàn trực tuyến thông qua tài khoản người dùng."},ordering:{title:"1. Quy Trình Đặt Hàng & Xác Nhận Giao Dịch",intro:"Để nâng cấp tài khoản, người dùng thực hiện theo các bước sau:",steps:[{title:"Đăng nhập",desc:"Đăng nhập vào tài khoản tại giaoviendoimoi.com bằng Google"},{title:"Chọn gói dịch vụ",desc:"Chọn gói nâng cấp phù hợp (Pro, AI Tools, tính năng lẻ...)"},{title:"Thanh toán",desc:"Chuyển khoản ngân hàng theo mã QR được cung cấp trên trang nâng cấp"},{title:"Kích hoạt",desc:"Hệ thống tự động xác nhận và kích hoạt dịch vụ"}]},activation:{title:"2. Thời Gian Kích Hoạt Dịch Vụ",intro:"Sau khi thanh toán thành công, dịch vụ sẽ được kích hoạt theo các mốc thời gian sau:",timeline:[{title:"Kích hoạt tự động — Dưới 5 phút",desc:"Khi thanh toán qua <1>VietQR (BIDV)</1> với nội dung chuyển khoản đúng cú pháp. Hệ thống SePay tự động xác nhận và cập nhật tài khoản ngay lập tức, không cần chờ duyệt thủ công."},{title:"Trong 2–4 giờ làm việc",desc:"Trường hợp hệ thống chưa tự động xác nhận, chúng tôi sẽ kiểm tra và kích hoạt thủ công trong giờ hành chính (8:00–22:00 hằng ngày)."},{title:"Tối đa 24 giờ",desc:"Trong trường hợp thanh toán ngoài giờ hành chính hoặc cần xác minh thêm thông tin. Nếu quá 24 giờ chưa được kích hoạt, vui lòng liên hệ hỗ trợ qua Zalo hoặc email."}]},scope:{title:"3. Phạm Vi Cung Cấp Dịch Vụ",items:["Dịch vụ được cung cấp trực tuyến, không giới hạn địa lý — người dùng ở bất kỳ đâu đều có thể sử dụng","Chỉ cần thiết bị có kết nối internet và trình duyệt web (Chrome, Edge, Firefox, Safari)","Không yêu cầu cài đặt phần mềm (trừ gói Offline)","Tương thích máy tính, máy tính bảng và điện thoại thông minh"]},confirmation:{title:"4. Xác Nhận Giao Dịch",intro:"Sau khi giao dịch được hoàn tất và kích hoạt thành công:",items:["Trạng thái tài khoản sẽ cập nhật ngay trên giao diện website (góc trên bên phải)","Tất cả tính năng đã mua sẽ được mở khóa và sử dụng được ngay","Thông tin gói dịch vụ và ngày hết hạn hiển thị trong phần quản lý tài khoản","Người dùng có thể liên hệ qua email hoặc Zalo để yêu cầu xác nhận bằng văn bản nếu cần"]},refund:{title:"5. Chính Sách Hoàn Trả Dịch Vụ",intro:"Do tính chất của <1>dịch vụ kỹ thuật số</1> (kích hoạt ngay sau thanh toán), chính sách hoàn trả được quy định như sau:",validCases:{title:"✅ Trường hợp được hoàn tiền:",items:["Dịch vụ không hoạt động như mô tả trong vòng 7 ngày sau khi kích hoạt","Thanh toán bị trùng lặp (nạp 2 lần cho cùng một gói)","Kích hoạt sai gói do lỗi hệ thống"]},warning:"<1>⚠️ Lưu ý:</1> Chúng tôi <1>không hoàn tiền</1> trong trường hợp người dùng đổi ý sau khi đã sử dụng dịch vụ, hoặc tài khoản bị chấm dứt do vi phạm Điều khoản Sử dụng. Vui lòng đọc kỹ mô tả gói dịch vụ trước khi thanh toán.",requestInfo:"Để yêu cầu hoàn tiền, vui lòng liên hệ qua email <1>{{email}}</1> trong vòng <1>7 ngày</1> kể từ ngày thanh toán, kèm theo bằng chứng giao dịch."}
513,technicalSupport:{title:"6. Hỗ Trợ Kỹ Thuật Sau Kích Hoạt",items:["Hỗ trợ qua Zalo: 0363 357 745 — phản hồi trong giờ hành chính (8:00–22:00)","Hỗ trợ qua Email: [email protected] — phản hồi trong 2–3 ngày làm việc","Hướng dẫn sá»­ dụng qua kênh YouTube và TikTok chính thức","Nhóm hỗ trợ Facebook và Zalo cộng đồng giáo viên"]},relatedLinks:{label:"📋 Tài liệu liên quan:",privacy:"🔒 Chính sách Bảo mật",terms:"📜 Điều khoản Sá»­ dụng",about:"👤 Thông tin Người sở hữu"},contact:{title:"Liên Hệ Hỗ Trợ",sub:"Nếu bạn chưa nhận được dịch vụ sau thời gian quy định, hoặc cần hỗ trợ về giao dịch, vui lòng liên hệ ngay:",note:"Hoặc liên hệ Zalo: <1>{{phone}}</1> để được hỗ trợ nhanh hÆ¡n."},footer:{copyright:"© {{year}} {{name}}. Bảo lưu mọi quyền.",privacy:"Chính sách bảo mật",terms:"Điều khoản"}},privacy$2={hero:{title:"Chính Sách Bảo Mật",sub:"Cam kết cá»§a <1>{{name}}</1> về việc bảo vệ quyền riêng tư và dữ liệu cá nhân cá»§a bạn.",lastUpdated:"Ngày cập nhật: {{date}}"},intro:{p1:"Chào mừng bạn đến với <1>{{name}}</1> (giaoviendoimoi.com) — nền tảng hỗ trợ giáo viên tạo bài giảng tương tác, trò chÆ¡i học tập và quản lý lớp học hiệu quả. Chúng tôi hiểu rằng quyền riêng tư cá»§a bạn là vô cùng quan trọng. Chính sách này giải thích rõ cách chúng tôi thu thập, sá»­ dụng, lưu trữ và bảo vệ thông tin cá»§a bạn.",summary:{title:"📌 Tóm tắt nhanh:",content:"Chúng tôi chỉ thu thập thông tin tối thiểu cần thiết để vận hành dịch vụ. Chúng tôi <1>không bán</1>, không chia sẻ trái phép, và không dùng dữ liệu cá»§a bạn cho mục đích quảng cáo cá»§a bên thứ ba. Riêng ảnh và tên học sinh do giáo viên nhập, xem <1>Mục 10</1> để biết cách chúng tôi bảo vệ."}},section1:{title:"1. Thông Tin Chúng Tôi Thu Thập",sub1:"1.1. Đăng nhập bằng Google (Google Sign-In)",p1:"Khi bạn đăng nhập bằng tài khoản Google thông qua Firebase Authentication, chúng tôi chỉ nhận được các thông tin sau:",items1:["Địa chỉ Email — dùng để định danh tài khoản và liên lạc khi cần","Tên hiển thị — dùng để cá nhân hóa giao diện","Ảnh đại diện — URL ảnh công khai từ tài khoản Google cá»§a bạn"],scopes:{title:"Phạm vi quyền (Scopes):",pre:"Chúng tôi chỉ yêu cầu phạm vi cÆ¡ bản (",mid:"). Chúng tôi",not:"KHÔNG",post:"yêu cầu quyền truy cập Gmail, Google Drive, Contacts hay bất kỳ dữ liệu nhạy cảm nào khác."},sub2:"1.2. Dữ liệu học sinh",p2:"Học sinh <1>không có tài khoản</1> và không tá»± đăng ký trên nền tảng. Có hai luồng dữ liệu khác nhau: (a) học sinh tham gia qua mã PIN — xá»­ lý <1>ẩn danh</1>, chỉ lưu biệt danh do học sinh tá»± đặt và điểm cá»§a hoạt động; (b) danh sách lớp do <1>giáo viên chá»§ động nhập</1> — có thể gồm họ tên và ảnh chân dung học sinh. Luồng (b) là dữ liệu cá nhân, được quy định riêng tại Mục 10.",sub3:"1.3. Dữ liệu sá»­ dụng dịch vụ",p3:"Chúng tôi có thể ghi lại các thông tin kỹ thuật như: loại trình duyệt, địa chỉ IP, thời gian truy cập nhằm mục đích phân tích hiệu suất và cải thiện dịch vụ. Dữ liệu này không được dùng để nhận dạng cá nhân."},section2:{title:"2. Cách Chúng Tôi Sá»­ Dụng Thông Tin",items:["Xác thá»±c danh tính và cấp quyền truy cập tài khoản","Lưu trữ bài trắc nghiệm, vòng quay, trò chÆ¡i và nội dung giảng dạy bạn tạo ra","Theo dõi lịch sá»­ game và tiến trình học tập (dữ liệu ẩn danh)","Quản lý gói dịch vụ và lịch sá»­ thanh toán cá»§a tài khoản","Gá»­i thông báo kỹ thuật quan trọng liên quan đến tài khoản","Cải thiện và phát triển tính năng mới cá»§a nền tảng"]},section3:{title:"3. Lưu Trữ & Bảo Mật Dữ Liệu",sub1:"3.1. NÆ¡i lưu trữ dữ liệu",p1:"Toàn bộ dữ liệu người dùng được lưu trữ an toàn trên hạ tầng <1>Google Firebase</1> (Firestore, Authentication, Storage) — tuân thá»§ tiêu chuẩn ISO 27001 và SOC 2/3.",items1:["Bài trắc nghiệm và nội dung giảng dạy bạn tạo ra","Lịch sá»­ game và kết quả hoạt động cá»§a lớp học","Tiến trình học tập (dữ liệu ẩn danh cá»§a học sinh tham gia bằng mã PIN)","Danh sách lớp do giáo viên nhập: họ tên và ảnh chân dung học sinh (nếu giáo viên có sá»­ dụng)","Thông tin gói dịch vụ và ngày hết hạn"],sub2:"3.2. Biện pháp bảo mật",items2:["Mã hóa dữ liệu khi truyền tải bằng HTTPS/TLS","Kiểm soát truy cập theo vai trò (giáo viên chỉ xem dữ liệu cá»§a chính mình)","Ảnh học sinh lưu trong vùng riêng cá»§a từng tài khoản, quy tắc bảo mật chặn mọi truy cập từ tài khoản khác","Xác thá»±c đa lớp thông qua Firebase Authentication","Sao lưu dữ liệu định kỳ theo chính sách cá»§a Google Firebase"],warning:"<1>⚠️ Lưu ý:</1> Mặc dù áp dụng các biện pháp bảo mật tốt nhất, không có hệ thống nào đảm bảo an toàn tuyệt đối 100%. Hãy bảo mật tài khoản Google cá»§a bạn."},section4:{title:"4. Thanh Toán & Nâng Cấp Tài Khoản",p1:"Mua gói FullGame được xá»­ lý qua chuyển khoản ngân hàng (<1>VietQR</1>) hoặc Buy Me a Coffee đối với người dùng quốc tế.",commitment:{title:"
513🔐 Cam kết thanh toán:",content:"Hệ thống của chúng tôi <1>KHÔNG</1> lưu trữ bất kỳ thông tin thẻ tín dụng, thẻ ghi nợ hay tài khoản ngân hàng nào. Giao dịch chuyển khoản được thực hiện trực tiếp qua ứng dụng ngân hàng của bạn, hoặc qua Buy Me a Coffee."},items:["Chỉ lưu trạng thái gói dịch vụ (Free/Pro) và ngày gia hạn","Nội dung chuyển khoản (mã đối soát) để xác nhận thanh toán","Lịch sử thanh toán phục vụ hỗ trợ khách hàng khi cần"]},section5:{title:'5. Ba Cam Kết "KHÔNG" Của Chúng Tôi',commits:[{title:"KHÔNG bán dữ liệu",desc:"Không bán, cho thuê hay trao đổi thông tin cá nhân của bạn cho bất kỳ bên thứ ba nào vì mục đích thương mại."},{title:"KHÔNG spam email",desc:"Email chỉ dùng để xác thực và thông báo kỹ thuật quan trọng. Không gửi email quảng cáo rác."},{title:"KHÔNG dùng ảnh học sinh",desc:"Không dùng ảnh, tên học sinh để quảng cáo, huấn luyện AI hay bất kỳ mục đích nào ngoài việc hiển thị lại cho chính giáo viên đó."}]},section6:{title:"6. Chia Sẻ Thông Tin Với Bên Thứ Ba",p1:"Chúng tôi chỉ chia sẻ thông tin với các đối tác sau để vận hành dịch vụ. Ảnh và tên học sinh <1>không được chia sẻ</1> với bất kỳ đối tác nào ngoài hạ tầng lưu trữ Google Firebase.",table:{partner:"Đối tác",purpose:"Mục đích",data:"Dữ liệu chia sẻ",rows:[["Google Firebase","Lưu trữ & xác thực","Email, tên, ảnh đại diện giáo viên; ảnh/tên học sinh (chỉ lưu trữ, không dùng vào việc khác)"],["Ngân hàng / Buy Me a Coffee","Xử lý thanh toán","Tên, email (cho hóa đơn)"],["Google Analytics","Phân tích hiệu suất ẩn danh","Dữ liệu ẩn danh (không gồm ảnh/tên học sinh)"]]}},section7:{title:"7. Quyền Của Bạn",items:["Quyền truy cập: Xem thông tin cá nhân chúng tôi đang lưu trữ về bạn","Quyền chỉnh sửa: Cập nhật thông tin cá nhân không chính xác","Quyền xóa: Yêu cầu xóa toàn bộ dữ liệu tài khoản của bạn","Quyền rút lại đồng ý: Thu hồi quyền truy cập Google OAuth bất kỳ lúc nào","Quyền di chuyển dữ liệu: Nhận bản sao dữ liệu ở định dạng có thể đọc được","Quyền của phụ huynh/học sinh: Yêu cầu xem, sửa, xóa ảnh và thông tin học sinh (xem Mục 10)"],requestInfo:"Để thực hiện bất kỳ quyền nào, vui lòng liên hệ qua email <1>{{email}}</1>. Chúng tôi sẽ xử lý trong vòng <1>7 ngày làm việc</1>."},section8:{title:"8. Cookie & Công Nghệ Theo Dõi",items:["Cookie bắt buộc: Duy trì phiên đăng nhập (cần thiết để dịch vụ hoạt động)","Cookie tùy chọn: Lưu cài đặt giao diện như ngôn ngữ, chủ đề","Analytics: Phân tích lưu lượng truy cập ẩn danh để cải thiện hiệu suất"],p1:"Bạn có thể xóa cookie bất kỳ lúc nào trong cài đặt trình duyệt. Tuy nhiên, vô hiệu hóa cookie bắt buộc có thể ảnh hưởng đến chức năng đăng nhập."},section9:{title:"9. Bảo Vệ Trẻ Em",p1:"Dịch vụ hướng đến đối tượng sử dụng là <1>giáo viên</1>. Học sinh không có tài khoản riêng và không tự đăng ký trên nền tảng.",sub1:"Học sinh tham gia bằng mã PIN",p2:"Không cần đăng ký, không cần email, không cần thông tin cá nhân. Học sinh chỉ nhập một biệt danh do các em tự đặt để hiển thị trên bảng xếp hạng. Chúng tôi khuyến nghị giáo viên hướng dẫn học sinh không dùng họ tên đầy đủ làm biệt danh.",sub2:"Danh sách lớp do giáo viên nhập",p3:"Một số tính năng (điểm danh, gọi tên ngẫu nhiên, chia nhóm) cần giáo viên nhập danh sách lớp, có thể kèm ảnh chân dung học sinh. Đây là dữ liệu cá nhân của trẻ em và được quy định chi tiết tại Mục 10."},section10:{title:"11. Thay Đổi Chính Sách",p1:"Mọi thay đổi quan trọng sẽ được thông báo qua:",items:["Thông báo nổi bật trên trang web tối thiểu 30 ngày trước khi có hiệu lực","Email thông báo gửi đến địa chỉ đã đăng ký (với thay đổi trọng yếu)",'Cập nhật ngày "Cập nhật lần cuối" ở đầu trang này'],p2:"Việc t
513iếp tục sá»­ dụng dịch vụ sau khi chính sách có hiệu lá»±c được xem là bạn đã đồng ý với các thay đổi đó."},sectionExt:{title:"12. Tiện Ích Chrome (Nhận xét môn học/CSDL & Đánh giá chuẩn nghề nghiệp)",p1:'Các tiện ích Chrome do Giáo viên đổi mới phát triển — bao gồm "Nhận xét môn học, học bạ VnEdu, CSDL ngành GD" và "Đánh giá chuẩn nghề nghiệp giáo viên" — thu thập và xá»­ lý các thông tin sau:',items:["Tên và địa chỉ email Google cá»§a bạn — dùng để xác minh tài khoản và kiểm tra trạng thái đăng ký","Trạng thái đăng ký (còn hạn / hết hạn) — lưu tạm trong bộ nhớ cục bộ cá»§a trình duyệt tối đa 12 giờ","Tiện ích KHÔNG thu thập, KHÔNG lưu trữ và KHÔNG gá»­i bất kỳ dữ liệu nào về học sinh hay nội dung trang lên máy chá»§","Tiện ích chỉ chạy trên trang phần mềm khi bạn chá»§ động bấm nút — không chạy ngầm"],note:"Dữ liệu xác thá»±c được gá»­i qua kết nối HTTPS tới Google OAuth 2.0 và Cloud Function bảo mật cá»§a chúng tôi để xác minh đăng ký. Không có dữ liệu nào được chia sẻ với bên thứ ba."},section11:{title:"13. Liên Hệ & Yêu Cầu Xóa Dữ Liệu",sub:"Nếu bạn có câu hỏi về chính sách bảo mật, hoặc muốn yêu cầu xóa toàn bộ dữ liệu tài khoản, vui lòng liên hệ chúng tôi:",note:'Ghi rõ tiêu đề: "Yêu cầu xóa dữ liệu" và email đã đăng ký. Chúng tôi sẽ xá»­ lý trong vòng <1>7 ngày làm việc</1>.'},footer:{copyright:"© {{year}} {{name}}. Bảo lưu mọi quyền.",login:"Đăng nhập"},sectionPhotos:{title:"10. Ảnh & Thông Tin Học Sinh Do Giáo Viên Nhập",p1:"Một số tính năng cho phép giáo viên tạo danh sách lớp gồm họ tên và ảnh chân dung học sinh, nhằm phục vụ các hoạt động như điểm danh, gọi tên ngẫu nhiên, chia nhóm. Đây là tính năng tùy chọn — giáo viên hoàn toàn có thể sá»­ dụng nền tảng mà không cần tải lên ảnh nào.",warning:"<1>⚠️ Ảnh chân dung học sinh là dữ liệu cá nhân nhạy cảm.</1> Với học sinh dưới 16 tuổi, việc xá»­ lý bắt buộc phải có sá»± đồng ý cá»§a cha, mẹ hoặc người giám hộ hợp pháp theo quy định pháp luật về bảo vệ dữ liệu cá nhân.",sub1:"10.1. Vai trò cá»§a mỗi bên & cÆ¡ sở pháp lý",p2:"Giáo viên (hoặc nhà trường) là bên quyết định việc thu thập và sá»­ dụng ảnh học sinh, đồng thời là bên có trách nhiệm xin sá»± đồng ý cá»§a phụ huynh/người giám hộ. Nền tảng chỉ đóng vai trò lưu trữ và hiển thị lại theo yêu cầu cá»§a giáo viên đó. Trước lần đầu tải ảnh lên cho một lớp, hệ thống yêu cầu giáo viên xác nhận đã có sá»± đồng ý này; xác nhận được ghi nhận theo từng lớp kèm thời điểm.",sub2:"10.2. Ai xem được ảnh",items2:["Chỉ tài khoản giáo viên đã tải ảnh lên mới xem được — quy tắc bảo mật cá»§a hệ thống chặn mọi tài khoản khác","Ảnh không xuất hiện trong hoạt động học sinh tham gia bằng mã PIN","Ảnh không được đăng công khai, không lập chỉ mục trên công cụ tìm kiếm","Nhân sá»± vận hành chỉ truy cập khi được yêu cầu hỗ trợ kỹ thuật hoặc khi pháp luật yêu cầu"],sub3:"10.3. Chúng tôi KHÔNG làm gì với ảnh học sinh",items3:["Không dùng cho quảng cáo, tiếp thị dưới bất kỳ hình thức nào","Không dùng để huấn luyện mô hình trí tuệ nhân tạo","Không bán, cho thuê, trao đổi hay chia sẻ với bên thứ ba","Không dùng nhận dạng khuôn mặt để định danh học sinh ngoài phạm vi lớp học cá»§a chính giáo viên đó"],sub4:"10.4. Thời hạn lưu trữ & quyền xóa",p4:"Ảnh được lưu cho đến khi giáo viên xóa, hoặc khi tài khoản bị xóa. Trong trang quản lý lớp, giáo viên có thể xóa từng ảnh hoặc xóa toàn bộ ảnh cá»§a lớp bất kỳ lúc nào — thao tác xóa là vÄ©nh viễn. Chúng tôi khuyến nghị giáo viên xóa ảnh khi kết thúc năm học hoặc khi không còn cần cho việc dạy học. Khi tài khoản bị xóa theo yêu cầu, toàn bộ ảnh và danh sách lớp bị xóa cùng.",parentRights:"Phụ huynh, người giám hộ hoặc chính học sinh có quyền yêu cầu xem, sá»­a hoặc xóa ảnh và thông tin liên quan. Hãy liên hệ trá»±c tiếp giáo viên phụ trách lớp — người có thể xóa ngay trong ứng dụng. Nếu không liên hệ được, gá»­i email tới <1>{{email}}</1>, chúng tôi xá»­ lý trong vòng <1>7 ngày làm việc</1>."}},terms$2={hero:{title:"Điều Khoản Sá»­ Dụng",sub:"Vui lòng đọc kỹ trước khi sá»­ dụng dịch vụ cá»§a <1>{{name}}</1> ({{url}}).",lastUpdated:"Ngày cập nhật: {{date}}"},intro:{p1:'Điều khoản Sá»­ dụng này ("Điều khoản") là thỏa thuận pháp lý giữa bạn ("Người dùng") và <1>{{name}}</1> ("chúng tôi") điều chỉnh quyền truy cập và sá»­ dụng nền tảng tại địa chỉ <3>{{url}}</3>. Bằng việc đăng ký, đăng nhập hoặc sá»­ dụng bất kỳ tính năng nào cá»
513§a dịch vụ, bạn xác nhận đã đọc, hiểu và <5>đồng ý</5> bị ràng buộc bởi các Điều khoản này.',summary:{title:"📌 Đối tượng áp dụng:",content:"Điều khoản này áp dụng cho tất cả người dùng đăng ký tài khoản, bao gồm giáo viên, nhà giáo dục và bất kỳ ai sá»­ dụng dịch vụ. Học sinh tham gia bằng mã PIN (ẩn danh) không bị ràng buộc bởi điều khoản này."}},section1:{title:"1. Độ Tuổi & Chấp Nhận Điều Khoản",teacher:{title:"Đối với Giáo viên (Người tạo tài khoản và quản lý lớp học)",content:"Bạn phải <1>đủ 18 tuổi trở lên</1> để đăng ký tài khoản, sá»­ dụng các dịch vụ và thá»±c hiện nâng cấp tài khoản (nếu có). Khi đăng nhập bằng Google Sign-In, bạn xác nhận đã đọc, hiểu và <3>đồng ý toàn bộ</3> với các Điều khoản Sá»­ dụng và <5>Chính sách Bảo mật</5> cá»§a chúng tôi."},student:{title:"Đối với Học sinh (Người tham gia)",content:"<b>Không có giới hạn độ tuổi tối thiểu</b> khi học sinh tham gia các trò chÆ¡i, bài kiểm tra (như Kéo Co, Trắc nghiệm Nghiêng Đầu, v.v.) thông qua <b>mã phòng (PIN)</b> hoặc <b>link chia sẻ</b>. Tuy nhiên, học sinh sá»­ dụng nền tảng phải dưới sá»± <b>hướng dẫn, giám sát và đồng ý</b> cá»§a Giáo viên quản lý lớp hoặc Phụ huynh/Người giám hộ hợp pháp."},note:"💡 Lưu ý: Điều khoản này có thể được cập nhật. Việc tiếp tục sá»­ dụng dịch vụ sau khi có thay đổi đồng nghÄ©a với việc bạn chấp nhận phiên bản mới nhất. Nếu không đồng ý, vui lòng dừng sá»­ dụng dịch vụ và liên hệ để xóa tài khoản."},section2:{title:"2. Quyền Sá»­ Dụng Dịch Vụ",intro:"Chúng tôi cung cấp hai loại tài khoản với quyền hạn khác nhau:",plans:[{title:"Tài khoản Dùng thá»­ (Trial)",items:["Truy cập các tính năng cÆ¡ bản có giới hạn","Tạo số lượng nội dung giới hạn mỗi tháng","Hỗ trợ qua tài liệu hướng dẫn","Có thể nâng cấp lên Pro bất kỳ lúc nào"]},{badge:"⭐ FullGame",title:"Tài khoản Pro / Premium",items:["Truy cập toàn bộ tính năng không giới hạn","Tạo và lưu trữ nội dung không giới hạn","Ưu tiên hỗ trợ kỹ thuật","Nhận tính năng mới sớm nhất"]}],sub1:"2.1. Sở hữu trí tuệ & Giới hạn sá»­ dụng",p1:"Toàn bộ mã nguồn (source code), thiết kế giao diện, thuật toán game và nội dung cá»§a nền tảng là tài sản trí tuệ thuộc về <1>{{name}}</1>, được bảo hộ theo pháp luật Việt Nam và các công ước quốc tế về quyền tác giả.",ipWarning:{title:"🚫 Bản quyền và Tài sản Trí tuệ",content:"Toàn bộ thiết kế giao diện (UI/UX), đồ họa, hiệu ứng và mã nguồn (source code) cá»§a các công cụ trên nền tảng (bao gồm <1>Kéo Co, Quiz Nghiêng Đầu, Ô Chữ</1>...) thuộc sở hữu cá»§a <3>giaoviendoimoi.com</3>. Người dùng <5>không được phép</5> sá»­ dụng các công cụ phần mềm để trích xuất, dịch ngược (reverse engineering), sao chép trá»±c tiếp mã nguồn hoặc ăn cắp tài nguyên đồ họa cá»§a nền tảng nhằm mục đích thương mại.",exception:"Ngoại lệ được phép: Việc bạn tá»± lấy cảm hứng để lập trình ra các cÆ¡ chế trò chÆ¡i tương tá»± <1>không bị coi là vi phạm</1> điều khoản này."},sub2:"2.2. Nội dung bạn tạo ra",p2:"Bạn giữ quyền sở hữu đối với <1>nội dung câu hỏi, bài tập và tài liệu giảng dạy</1> mà bạn tạo ra trên nền tảng. Bằng cách tải lên hoặc tạo nội dung, bạn cấp cho chúng tôi quyền lưu trữ và hiển thị nội dung đó để cung cấp dịch vụ cho bạn."},section3:{title:"3. Trách Nhiệm Người Dùng",sub1:"3.1. Trách nhiệm về nội dung",p1:"Giáo viên và người dùng <1>tá»± chịu hoàn toàn trách nhiệm</1> về tính chính xác, đúng đắn và hợp pháp cá»§a mọi nội dung câu hỏi, bài tập, tài liệu giảng dạy được tạo ra hoặc chia sẻ trên nền tảng.",items1:["Đảm bảo nội dung phù hợp với chương trình giáo dục và lứa tuổi học sinh","Chịu trách nhiệm bản quyền đối với hình ảnh, âm thanh, văn bản được sá»­ dụng","Không sá»­ dụng dịch vụ để thá»±c hiện mục đích thương mại trái phép"],sub2:"3.2. Nội dung bị nghiêm cấm",prohibits:[{title:"Vi phạm pháp luật",desc:"Nội dung vi phạm pháp luật Việt Nam và các điều ước quốc tế."},{title:"Nội dung 18+",desc:"Nội dung khiêu dâm, bạo lá»±c, không phù hợp lứa tuổi học sinh."}
513,{title:"Ngôn từ thù hận",desc:"Kỳ thị, phân biệt đối xá»­ dân tộc, tôn giáo, giới tính."},{title:"Spam & quảng cáo",desc:"Sá»­ dụng nền tảng để phát tán quảng cáo, tin rác trái phép."}],sub3:"3.3. Bảo mật tài khoản",items3:["Bạn có trách nhiệm bảo mật thông tin đăng nhập và tài khoản Google cá»§a mình.","Không chia sẻ tài khoản với người khác hoặc cho phép nhiều người cùng sá»­ dụng một tài khoản.","Thông báo ngay cho chúng tôi nếu phát hiện hành vi truy cập trái phép vào tài khoản."],sub4:"3.4. Bản Quyền Nội Dung Tải Lên & CÆ¡ Chế Safe Harbor",p4:"Người dùng <1>tá»± chịu trách nhiệm hoàn toàn</1> về bản quyền đối với mọi hình ảnh, âm thanh, video và file dữ liệu tải lên hệ thống. Nền tảng đóng vai trò là <3>đơn vị trung gian lưu trữ</3> (hosting intermediary) và không kiểm duyệt nội dung trước khi đăng tải.",safeHarbor:{title:"🛡️ CÆ¡ chế Tiếp nhận Khiếu nại Bản quyền (Safe Harbor)",intro:"Theo Luật Sở hữu Trí tuệ Việt Nam (Điều 198b) vá
513» trách nhiệm cá»§a đơn vị trung gian lưu trữ, nền tảng áp dụng quy trình tiếp nhận và xá»­ lý khiếu nại bản quyền theo 5 bước như sau:",steps:["Bước 1 — Tiếp nhận báo cáo vi phạm: Chá»§ thể quyền (hoặc đại diện hợp pháp) gá»­i khiếu nại tới email bản quyền bên dưới, kèm: (a) thông tin định danh nội dung bị vi phạm và đường dẫn (link) cụ thể trên nền tảng, (b) bằng chứng chứng minh quyền sở hữu hợp pháp, (c) thông tin liên hệ cá»§a người khiếu nại, (d) cam kết về tính trung thá»±c cá»§a khiếu nại. Nền tảng xác nhận đã nhận khiếu nại trong vòng 24 giờ làm việc","Bước 2 — Ẩn nội dung tạm thời (provisional takedown): Nếu hồ sÆ¡ khiếu nại có đủ thông tin hợp lệ ban đầu, nền tảng sẽ chá»§ động ẩn (gỡ hiển thị công khai) nội dung bị khiếu nại trong vòng 48 giờ làm việc kể từ khi xác nhận, nhằm ngăn chặn thiệt hại tiếp diễn trong thời gian xác minh","Bước 3 — Xác minh: Nền tảng đối chiếu bằng chứng từ cả hai phía — thông báo cho người dùng đã tải lên nội dung về khiếu nại, đồng thời cho phép người này gá»­i phản hồi/phản đối (counter-notice) kèm bằng chứng trong vòng 7 ngày làm việc kể từ ngày nhận thông báo","Bước 4 — Ra quyết định: Căn cứ kết quả xác minh, nền tảng đưa ra một trong hai quyết định: (a) nếu khiếu nại được xác nhận hợp lệ hoặc người dùng không phản hồi hợp lệ trong thời hạn — nội dung bị gỡ bỏ vÄ©nh viễn; (b) nếu người dùng chứng minh được quyền sở hữu/sá»­ dụng hợp pháp — nội dung được khôi phục hiển thị và khiếu nại bị bác bỏ","Bước 5 — Gỡ bỏ vÄ©nh viễn & xá»­ lý tài khoản: Với nội dung bị xác định vi phạm, nền tảng xoá vÄ©nh viễn khỏi hệ thống (kể cả bản sao lưu trong phạm vi kỹ thuật cho phép) và có thể áp dụng các biện pháp xá»­ lý tài khoản vi phạm (cảnh cáo, tạm khoá, hoặc chấm dứt) theo mức độ và số lần vi phạm quy định tại Điều khoản này"],contactLabel:"Kênh tiếp nhận khiếu nại bản quyền:",contactNote:'Tiêu đề email: "Khiếu nại bản quyền" + tên nội dung vi phạm. Vui lòng đính kèm bằng chứng quyền sở hữu hợp lệ.',legalNote:"⚖️ Căn cứ pháp lý: CÆ¡ chế này được xây dá»±ng theo quy định tại Điều 198b Luật Sở hữu Trí tuệ Việt Nam (sá»­a đổi 2022) về trách nhiệm cá»§a đơn vị trung gian lưu trữ. Khi xá»­ lý kịp thời các khiếu nại hợp lệ, nền tảng được miễn trừ trách nhiệm bồi thường thiệt hại liên quan đến nội dung do người dùng tải lên."},sub5:"3.5. Ảnh & Thông Tin Học Sinh",p5:"Khi tải lên ảnh chân dung hoặc nhập họ tên học sinh, bạn xác nhận mình là bên <1>quyết định việc thu thập và sá»­ dụng</1> dữ liệu đó, và <1>đã có sá»± đồng ý</1> cá»§a cha, mẹ hoặc người giám hộ hợp pháp đối với học sinh dưới 16 tuổi. Nền tảng chỉ đóng vai trò lưu trữ và hiển thị lại theo yêu cầu cá»§a bạn.",items5:["Bạn tá»± chịu trách nhiệm xin và lưu giữ sá»± đồng ý cá»§a phụ huynh/người giám hộ, theo đúng quy định cá»§a nhà trường và pháp luật hiện hành","Chỉ dùng ảnh cho hoạt động dạy học cá»§a chính lớp đó — không đăng công khai, không chia sẻ ngoài phạm vi lớp, không dùng cho mục đích thương mại","Xóa ảnh ngay khi phụ huynh rút lại sá»± đồng ý, khi học sinh chuyển lớp/trường, hoặc khi không còn cần cho việc dạy học","Không tải lên ảnh cá»§a người không thuộc lớp mình phụ trách","Chuyển tiếp cho chúng tôi mọi yêu cầu cá»§a phụ huynh mà bạn không tá»± xá»­ lý được trong ứng dụng"],photoNote:"⚠️ Ảnh chân dung cá»§a trẻ em là dữ liệu cÃ
513¡ nhân nhạy cảm. Vi phạm cam kết trên có thể dẫn tới việc tài khoản bị tạm ngừng và bạn phải tá»± chịu trách nhiệm pháp lý phát sinh. Cách chúng tôi lưu trữ và bảo vệ dữ liệu này được nêu tại Mục 10 cá»§a Chính sách Bảo mật."},section4:{title:"4. Giới Hạn Trách Nhiệm",p1:" <1>{{name}}</1> cam kết nỗ lá»±c tối đa để đảm bảo nền tảng hoạt động ổn định, an toàn và liên tục. Tuy nhiên, chúng tôi <3>không thể bảo đảm</3> dịch vụ sẽ luôn khả dụng 100% và không chịu trách nhiệm pháp lý trong các trường hợp sau:",items:["Gián đoạn dịch vụ do sá»± cố kỹ thuật từ phía Google Firebase (máy chá»§ lưu trữ)","Gián đoạn do vấn đề kết nối mạng internet từ phía người dùng hoặc nhà cung cấp dịch vụ","Mất hoặc hỏng dữ liệu do thiên tai, tấn công mạng hoặc sá»± kiện bất khả kháng","Thiệt hại gián tiếp phát sinh trong quá trình sá»­ dụng hoặc không thể sá»­ dụng dịch vụ"],recommendation:"⚠️ Khuyến nghị: Với các nội dung giảng dạy quan trọng, bạn nên sao lưu định kỳ bằng cách xuất dữ liệu ra file cục bộ. Chúng tôi thá»±c hiện sao lưu hệ thống định kỳ nhưng không cam kết khôi phục hoàn toàn trong mọi trường hợp.",sub1:"4.1. Dịch vụ bên thứ ba",p2:"Nền tảng tích hợp các dịch vụ bên thứ ba (Google Firebase, Google AI, Buy Me a Coffee, v.v.). Chúng tôi không chịu trách nhiệm về sá»± gián đoạn, thay đổi chính sách hay sá»± cố từ phía các nhà cung cấp dịch vụ bên thứ ba này.",sub2:"4.2. Giới hạn bồi thường",p3:"Trong phạm vi tối đa được pháp luật cho phép, trách nhiệm bồi thường cá»§a chúng tôi đối với bất kỳ khiếu nại nào không vượt quá số tiền bạn đã thanh toán cho dịch vụ trong <1>3 tháng gần nhất</1>."},section5:{title:"5. Thanh Toán & Hoàn Tiền",items:["Phí dịch vụ Pro được tính theo chu kỳ (tháng/năm) và tá»± động gia hạn trừ khi bạn há»§y.","Giá dịch vụ có thể thay đổi và sẽ được thông báo trước ít nhất 30 ngày.","Hoàn tiền: Chúng tôi hỗ trợ hoàn tiền trong vòng 7 ngày kể từ ngày thanh toán nếu dịch vụ không hoạt động như cam kết.","Việc vi phạm Điều khoản dẫn đến chấm dứt tài khoản sẽ không được hoàn tiền."]},section6:{title:"6. Chấm Dứt Tài Khoản",p1:"Chúng tôi có quyền <1>tạm ngừng hoặc chấm dứt</1> tài khoản cá»§a bạn mà không cần báo trước trong các trường hợp:",items:["Vi phạm một hoặc nhiều điều khoản trong thỏa thuận này","Hoạt động gian lận, lạm dụng dịch vụ hoặc gây hại cho người dùng khác","Tài khoản không hoạt động trong thời gian dài (hÆ¡n 24 tháng)","Yêu cầu cá»§a cÆ¡ quan pháp luật có thẩm quyền"],p2:"Bạn có thể yêu cầu xóa tài khoản bất kỳ lúc nào bằng cách liên hệ qua email. Sau khi xóa, dữ liệu sẽ được gỡ khỏi hệ thống trong vòng <1>30 ngày làm việc</1>."},section7:{title:"7. Sá»­a Đổi Điều Khoản",p1:"<1>{{name}}</1> có quyền cập nhật, sá»­a đổi Điều khoản Sá»­ dụng này bất kỳ lúc nào để phản ánh những thay đổi về dịch vụ, yêu cầu pháp lý hoặc chính sách vận hành. Thông báo sẽ được thá»±c hiện qua:",items:["Thông báo nổi bật trên trang web ít nhất 30 ngày trước khi điều khoản mới có hiệu lá»±c","Email thông báo gá»­i đến tài khoản đã đăng ký (với những thay đổi quan trọng)",'Cập nhật ngày "Cập nhật lần cuối" ở đầu trang này'],note:"Sau thời hạn thông báo, nếu bạn tiếp tục sá»­ dụng dịch vụ, điều đó được xem là bạn đã <1> chấp nhận phiên bản Điều khoản mới nhất</1>
513. Nếu không đồng ý, bạn có quyền yêu cầu xóa tài khoản trước khi điều khoản mới có hiệu lực."},section8:{title:"8. Luật Áp Dụng & Giải Quyết Tranh Chấp",p1:"Điều khoản này được điều chỉnh bởi <1>pháp luật Cộng hòa Xã hội Chủ nghĩa Việt Nam</1>. Mọi tranh chấp phát sinh từ hoặc liên quan đến Điều khoản này sẽ được giải quyết theo quy trình sau:",items:["Ưu tiên: Thương lượng trực tiếp giữa các bên trong vòng 30 ngày","Nếu không đạt thỏa thuận: Hòa giải hoặc trọng tài theo quy định pháp luật","Phương án cuối: Khởi kiện tại Tòa án nhân dân có thẩm quyền tại Việt Nam"]},relatedLinks:{label:"📋 Tài liệu liên quan — Xem thêm Chính sách Bảo mật của chúng tôi:",privacy:"🔒 Chính sách Bảo mật →"},contact:{title:"Liên Hệ & Hỗ Trợ",sub:"Nếu bạn có câu hỏi về Điều khoản Sử dụng, muốn báo cáo vi phạm hoặc cần hỗ trợ xóa tài khoản, vui lòng liên hệ chúng tôi:",note:"Chúng tôi sẽ phản hồi trong vòng <1>2–3 ngày làm việc</1>."},footer:{copyright:"© {{year}} {{name}}. Bảo lưu mọi quyền.",privacy:"Chính sách bảo mật",login:"Đăng nhập"}},viLegal={shipping:shipping$2,privacy:privacy$2,terms:terms$2},hero$6={title:"Thông Tin Người Sở Hữu",sub:"Thông tin về chủ sở hữu và người vận hành website <1>{{url}}</1>",lastUpdated:"Ngày cập nhật: {{date}}"},ownerInfo$2={title:"Thông Tin Chủ Sở Hữu",labelName:"Họ và tên chủ sở hữu",labelDob:"Năm sinh",labelNationality:"Quốc tịch",nationalityValue:"Việt Nam",labelAddress:"Địa chỉ",labelEmail:"Email liên hệ",labelPhone:"Số điện thoại / Zalo",labelTax:"Mã số thuế (MST)",labelType:"Loại hình",typeValue:"Cá nhân kinh doanh trực tuyến (không thành lập pháp nhân)"},websiteInfo$2={title:"Thông Tin Website",labelName:"Tên website",labelDomain:"Địa chỉ tên miền",labelField:"Lĩnh vực hoạt động",fieldValue:"Cung cấp phần mềm/công cụ hỗ trợ giáo dục trực tuyến (EdTech)",labelAudience:"Đối tượng phục vụ",audienceValue:"Giáo viên, nhà giáo dục tại Việt Nam và quốc tế",labelLang:"Ngôn ngữ chính",langValue:"Tiếng Việt",labelServer:"Máy chủ lưu trữ",serverValue:"Google Firebase (Google LLC, Hoa Kỳ)"},mission$2={title:"Sứ Mệnh & Giới Thiệu",p1:"<1>{{name}}</1> là nền tảng công nghệ giáo dục (EdTech) được xây dựng bởi một giáo viên với mong muốn mang đến những công cụ dạy học sáng tạo, hiện đại và dễ sử dụng cho cộng đồng giáo viên Việt Nam.",p2:"Chúng tôi tin rằng công nghệ có thể giúp việc học trở nên thú vị hơn, và mỗi giáo viên đều xứng đáng có những công cụ chuyên nghiệp để tạo ra những tiết học đáng nhớ.",cards:[{title:"Trí tuệ nhân tạo",desc:"Tích hợp AI để hỗ trợ soạn bài, tạo câu hỏi và cá nhân hóa học tập"},{title:"Gamification",desc:"Biến các bài học thành trò chơi tương tác kích thích hứng thú học sinh"},{title:"Theo dõi tiến độ",desc:"Công cụ đánh giá và theo dõi sự tiến bộ của học sinh theo thời gian thực"},{title:"Tiếp cận dễ dàng",desc:"Học sinh tham gia không cần tài khoản, chỉ cần mã PIN hoặc link chia sẻ"}]},channels$2={title:"Kênh Liên Lạc Chính Thức",intro:"Các kênh mạng xã hội chính thức của <1>{{name}}</1>:"},relatedLinks$2={label:"📋 Tài liệu liên quan:",privacy:"🔒 Chính sách Bảo mật",terms:"📜 Điều khoản Sử dụng",shipping:"🚚 Chính sách Giao nhận"},contact$2={title:"Liên Hệ Trực Tiếp",sub:"Mọi thắc mắc, khiếu nại hoặc đề nghị hợp tác, vui lòng liên hệ:",note:"Phản hồi trong vòng <1>2–3 ngày làm việc</1>. Hoặc liên hệ Zalo: <1>{{phone}}</1>"},footer$6={copyright:"© {{year}} {{name}}. Bảo lưu mọi quyền.",privacy:"Chính sách bảo mật",terms:"Điều khoản"},viAbout={hero:hero$6,ownerInfo:ownerInfo$2,websiteInfo:websiteInfo$2,mission:mission$2,channels:channels$2,relatedLinks:relatedLinks$2,contact:contact$2,footer:footer$6},page$p={alert:{onlyImage:"Chỉ chấp nhận file ảnh (jpg, png, webp, gif...)",imageTooLarge:"Ảnh quá lớn. Vui lòng chọn ảnh dưới 10MB."},error:{uploadFailed:"Lỗi tải ảnh lên: ",emptyTitle:"Vui lòng nhập tiêu đề",emptyImage:"Vui lòng tải lên ảnh nền",limitReached:"Bạn đã hết lượt tạo miễn phí. Vui lòng nâng cấp tài khoản.",saveFailed:"Lỗi khi lưu: ",loadFailed:"Không thể tải danh sách ảnh. Vui lòng thử lại.",deleteFailed:"Lỗi khi xóa: ",shareFailed:"Lỗi khi tạo link chia sẻ: ",unshareFailed:"Lỗi: ",lockedTip:"Gia hạn để mở ảnh này",notFound:"Không tìm thấy ảnh tương tác",invali
513dLink:"Link chia sẻ không hợp lệ hoặc đã bị xóa.",libraryCategoryRequired:"Vui lòng chọn Cấp học, Môn học và Khối lớp để đưa lên Thư viện cộng đồng."},confirm:{delete:'Xóa "{{title}}"?'},sidebar:{title:"🖼️ Ảnh Tương Tác",upgrade:"Nâng Cấp Lẻ",upgradeHint:"Nâng cấp để mở khóa giới hạn",create:"Tạo ảnh tương tác",createBinocular:"Tạo ảnh ống nhòm",myImages:"Ảnh cá»§a tôi"},create:{title:"➕ Tạo Ảnh Tương Tác mới",section1:{title:"📋 Thông tin cÆ¡ bản"},titleLabel:"Tiêu đề",titlePlaceholder:"VD: Cấu tạo tế bào thá»±c vật",modeLabel:"🎮 Chế độ bài học",modeQuiz:"Quiz",modeQuizDesc:"Trắc nghiệm, trả lời ngắn",modeWorksheet:"Phiếu học tập",modeWorksheetDesc:"Học sinh điền vào phiếu",maxScoreLabel:"🏆 Điểm tối đa",scoreUnit:"điểm",scoreHintEmpty:"Chia đều cho số điểm chạm",scoreHintFilled:"≈ {{points}} điểm/câu ({{count}} câu)",section2:{title:"🖼️ Ảnh nền"},uploading:"Đang tải ảnh lên...",clickToUpload:"Click để chọn ảnh",uploadHint:"Hỗ trợ JPG, PNG, WebP, GIF (tối đa 10MB)",replaceImage:"🔄 Thay ảnh",section3:{title:"📍 Điểm chạm"},cancel:"Há»§y",saving:"⏳ Đang lưu...",saveButton:"💾 Lưu Ảnh Tương Tác"},edit:{back:"← Quay lại",title:"✏️ Chỉnh sá»­a: {{title}}",titleLabel:"Tiêu đề",modeLabel:"🎮 Chế độ bài học",modeWarning:"⚠️ Đổi chế độ sẽ xóa toàn bộ điểm chạm hiện tại.",imageLabel:"Ảnh nền",uploading:"⏳ Đang tải...",replaceBtn:"🔄 Thay ảnh khác",replaceWarning:"Thay ảnh sẽ xóa tọa độ % markers cÅ© trên ảnh mới",markersLabel:"📍 Điểm chạm",cancel:"Há»§y",saving:"⏳ Đang lưu...",saveBtn:"💾 Lưu thay đổi"},preview:{back:"← Quay lại",title:"🎬 Trình chiếu: {{title}}",maxScore:"🏆 Điểm tối đa",scoreUnit:"điểm",exitFullscreen:"Thoát toàn màn hình",enterFullscreen:"Xem toàn màn hình",exitFullscreenBtn:"⊠ Thoát toàn màn hình",enterFullscreenBtn:"Fullscreen ⛶"},list:{subBannerTrial:"📌 Đã dùng {{current}}/{{limit}} lượt tạo Ảnh Tương Tác",subBannerPro:"✅ Chế độ {{mode}} — Không giới hạn",title:"🖼️ Ảnh cá»§a tôi ({{count}})",createBtn:"+ Tạo mới",loading:"Đang tải...",emptyTitle:"Chưa có ảnh tương tác nào",emptySubtitle:"Tạo ảnh đầu tiên để bắt đầu!",emptyCreateBtn:"+ Tạo Ảnh Tương Tác",demo:{title:"Ảnh Tương Tác - Bản Chạy Thá»­",badge:"Bản chạy thá»­",hint:"Xem thá»­ ảnh tương tác để trải nghiệm 4 loại điểm chạm trước khi tạo bài cá»§a bạn"}},card:{modeWorksheet:"Phiếu học tập",modeQuiz:"Quiz",markersCount:"{{count}} điểm chạm",isShared:"Đang chia sẻ",viewBtn:"Xem",editBtn:"Sá»­a",unshareBtn:"🔒 Dừng chia sẻ",shareBtn:"🔗 Chia sẻ",deleteBtn:"Xóa"},share:{loading:"Đang tải ảnh tương tác...",btnHome:"Về Trang Chá»§",playerSubtitle:"Ảnh Tương Tác — Click vào các điểm chạm để khám phá",legendTitle:"📖 Chú giải điểm chạm:",legendInfo:"Thông tin",legendQuiz:"Trắc nghiệm",legendFill:"Trả lời ngắn",legendWorksheet:"Phiếu học tập"}},editor$6={instruction:"Click vào bất kỳ vị trí nào trên ảnh để thêm Điểm chạm. Đang có ",count:" điểm chạm.",markerTooltip:"Click để sá»­a: {{title}}",markerDeleteTooltip:"Xóa điểm chạm",empty:"Chưa có điểm chạm nào. Hãy click vào ảnh để bắt đầu!",confirmDelete:"Xóa điểm chạm này?"},player$i={empty:"Chưa có ảnh",score:{label:"🏆 Điểm",sub:"({{correct}}/{{total}} câu đúng · {{remaining}})",remaining:"còn {{count}} câu",completed:"hoàn thành!"},markerViewAgain:"Nhấn để xem lại",canvasEmptyMarker:"(Ảnh chưa có điểm chạm)"},markerModal$1={type:{info:"Thông tin",quiz_mc:"Trắc nghiệm",quiz_fill:"Trả lời ngắn",open_input:"Phiếu học tập"},frozen:{locked:"🔒 Đã trả lời",correctTitle:"Bạn đã trả lời đúng!",wrongTitle:"Bạn đã trả lời sai.",lockedSub:"Câu này đã bị khóa — không thể trá
513º£ lời lại."},info:{empty:"(Không có nội dung)",content:"Nội dung thông tin",placeholder:"Mô tả, giải thích về vị trí này trên ảnh..."},btn:{checkMC:"Kiểm tra đáp án",checkFill:"Kiểm tra",doneOpen:"📋 Hoàn thành",close:"Đóng",pickBank:"🗃️ Chọn từ Kho / AI",removeAnswer:"Xóa",addAnswer:"+ Thêm đáp án",cancel:"Há»§y",update:"💾 Cập nhật",add:"📍 Thêm Điểm chạm"},feedback:{correct:"🎉 Chính xác!",wrongMC:"❌ Sai! Đáp án đúng:",wrongFill:"❌ Sai! Đáp án đúng:",doneOpen:"✅ Đã ghi nhận câu trả lời!"},input:{placeholder:"Nhập câu trả lời...",hintLabel:"💡 Gợi ý:"},error:{infoContent:"Vui lòng nhập nội dung thông tin",quizMCQuestion:"Vui lòng nhập câu hỏi",quizMCAnswers:"Cần ít nhất 2 đáp án có nội dung",quizMCCorrect:"Vui lòng chọn đáp án đúng",quizFillQuestion:"Vui lòng nhập câu hỏi",quizFillAnswer:"Vui lòng nhập đáp án đúng",openPrompt:"Vui lòng nhập câu lệnh/hướng dẫn"},defaultTitle:"Điểm chạm",field:{question:"Câu hỏi",answers:"Đáp án (chọn đáp án đúng ở bên trái)",correctAnswer:"Đáp án đúng",hint:"Gợi ý (tuỳ chọn)",prompt:"Câu lệnh / Hướng dẫn cho học sinh",placeholder:"Placeholder trong ô nhập (tuỳ chọn)",type:"Loại điểm chạm"},placeholder:{questionMC:"Nhập câu hỏi...",answerX:"Đáp án {{num}}",questionFill:"Ví dụ: Thá»§ đô cá»§a Việt Nam là ___?",correctAnswer:"Nhập đáp án đúng...",hint:"Gợi ý cho học sinh nếu cần...",prompt:"VD: Quan sát và mô tả những gì bạn thấy tại vị trí này...",placeholder:"VD: Nhập câu trả lời cá»§a bạn..."},tooltip:{correctAnswer:"Đáp án đúng"},note:{openInput:"📋 Học sinh sẽ điền vào ô này. Nội dung không bị chấm điểm — chỉ dùng để chiếu lên thảo luận."},title:{edit:"✏️ Sá»­a Điểm chạm",add:"📍 Thêm Điểm chạm"},bank:{title:"Chọn 1 câu hỏi từ Kho"}},binocular$1={createTitle:"🔭 Tạo game ống nhòm",infoTitle:"Thông tin",titlePlaceholder:"Nhập tiêu đề bài học…",uploading:"Đang tải lên…",dropOrClick:"Nhấn để thêm ảnh (có thể chọn nhiều)",settingsTitle:"Cài đặt ống nhòm",shapeLabel:"Hình dạng lỗ",shapes:{binocular:"Ống nhòm",circle:"Tròn",square:"Vuông",hexagon:"Lục giác"},sizeLabel:"Kích cỡ lỗ ({{size}}px)",sizes:{small:"Nhỏ",medium:"Vừa",large:"Lớn"},overlayColorLabel:"Màu nền che",colors:{black:"Đen",darkGreen:"Xanh lá đậm",darkBlue:"Xanh dương đậm",darkPurple:"Tím đậm",darkBrown:"Nâu đậm",custom:"Tùy chỉnh"},opacityLabel:"Độ che phá»§ ({{percent}}%)",bgmLabel:"Nhạc nền",bgmHint:"Nhạc phát khi đang ở chế độ ống nhòm, tá»± tắt khi mở ảnh.",bgmOptions:{none:"Không có",bgm1:"Nhạc 1",bgm2:"Nhạc 2",bgm3:"Nhạc 3",bgm4:"Nhạc 4",bgm5:"Nhạc 5"},revealAudioLabel:"Âm thanh khi mở ảnh",revealAudioHint:"Phát khi GV nhấn Enter/Space để mở toàn bộ ảnh.",autoRevealLabel:"Tá»± động mở ảnh sau",secondsUnit:"giây",autoRevealHint:"Mặc định tắt. Bật để ảnh tá»± reveal sau đếm ngược.",photosCount:"Danh sách ảnh ({{count}} ảnh)",slidesTitle:"Danh sách ảnh",slidesUnit:"ảnh",slideNamePlaceholder:"Tên ảnh",removeSlide:"Xóa ảnh này",photoNamePlaceholder:"Tên ảnh {{num}}…",deletePhotoTooltip:"Xóa ảnh này",minOnePhotoWarning:"Vui lòng thêm ít nhất 1 ảnh.",uploadAudioError:"Tải tệp âm thanh lên thất bại. Kiểm tra kết nối rồi bấm Lưu lại."},formatting$1={title:"🔠 Cỡ chữ & hình ảnh khi trình chiếu",questionFontSize:"Cỡ chữ câu hỏi",answerFontSize:"Cỡ chữ đáp án",imageSize:"Cỡ ảnh minh họa",sizes:{small:"Bé",standard:"Chuẩn",large:"Lớn",extraLarge:"Rất lớn",maximum:"Cá»±c đại"}},myImages$1={downloadFailed:"❌ Không tạo được file tải xuống, vui lòng thá»­ lại",downloadTooltip:"Tải xuống",downloadTooltipUpgrade:"Nâng cấp để tải xuống",downloading:"Đang tải...",downloadBtn:"Tải xuống",expiredWarning:"⚠️ Gói hết hạn! ",binocularBadge:"🔭 Ống nhòm",scoreRemaining:"· còn {{count}}",scoreDone:"· xong"},viInteractiveImage={page:page$p,editor:editor$6,player:player$i,markerModal:markerModal$1,binocular:binocular$1,formatting:formatting$1,myImages:myImages$1}
513,page$o={title:"🧊 Bảo tàng Panorama 3D",upgradeTooltip:"Mua FullGame để mở giới hạn",upgradeBtn:"Nâng cấp lẻ",helpTooltip:"Xem video hướng dẫn",helpBtn:"Hướng dẫn",quotaTrial:"📌 Đã dùng <1>{{currentCount}}/{{limit}}</1> lượt tạo phòng",quotaUnlimited:"✅ Không giới hạn"},sidebar$d={create:"Tạo phòng Triển lãm",createRoom:"Tạo phòng 360",createWalkable:"Tạo Triển lãm 3D",myRooms:"Phòng của tôi"},content$1={title:"🧊 Phòng của tôi",subtitle:"Quản lý danh sách các phòng triển lãm của bạn",loading:"Đang tải danh sách phòng..."},empty$7={title:"Chưa có phòng triển lãm nào",subtitle:"Bắt đầu bằng cách tạo phòng triển lãm 3D đầu tiên của bạn",createFirstBtn:"✨ Tạo phòng đầu tiên"},demo$e={title:"Triển lãm 3D - Bản Chạy Thử",badge:"Bản chạy thử",hint:"Căn phòng 3D demo để hiểu cách sử dụng. Dùng phím mũi tên để di chuyển, kéo chuột để nhìn xung quanh.",btnPlay:"Chơi thử"},error$9={delete:"Lỗi khi xóa phòng. Vui lòng thử lại.",save:"Lỗi khi lưu dữ liệu. Vui lòng thử lại.",share:"Lỗi khi chia sẻ",shareSuccess:"Link đã sao chép",loadStatus:"Lỗi khi tải trạng thái",hotspotUpload:"Có lỗi xảy ra: "},card$5={dateUnknown:"Ngày không xác định",confirmDelete:'Bạn chắc chắn muốn xóa phòng "{{title}}"?',createdAt:"Ngày tạo:",framesCount:"Khung ảnh:",btnView:"Vào xem",btnShare:"Tạo link gửi HS",btnShareCopied:"Đã copy link",btnEdit:"Sửa",btnDelete:"Xóa",btnDeleting:"Xoá...",renewToOpen:"🔒 Gia hạn để mở phòng này"},modal$4={error:{emptyName:"Vui lòng nhập tên phòng",shortName:"Tên phòng phải có ít nhất 2 ký tự"},title:{create:"✨ Tạo phòng Mới",createWalkable:"✨ Tạo Triển Lãm 3D",edit:"✏️ Sửa Thông Tin phòng"},field:{name:"Tên phòng *",type:"Loại phòng *"},placeholder:{name:"Ví dụ: Phòng Công Nghệ, phòng Lịch Sử..."},btnCancel:"Hủy",btnCreating:"Đang tạo...",btnUpdating:"Đang cập nhật...",btnCreate:"✨ Tạo phòng",btnUpdate:"✏️ Cập Nhật",walkableWarning:"⚠️ Không thể thay đổi sang loại phòng khác khi đã chọn chế độ này! Chế độ này cũng yêu cầu cấu hình máy tương đối tốt!"},hotspotModal$1={title:"Chỉnh sửa Khung {{index}}",uploadError:"Lỗi upload ảnh: ",validationError:"Vui lòng nhập link ảnh, tải ảnh lên hoặc nhập link video YouTube",previewLabel:"✅ Ảnh sẽ hiển thị trên tường:",uploadLabel:"📸 Chọn ảnh từ máy tính:",uploading:"⏳ Đang xử lý ảnh và đưa lên kho...",orLink:"Hoặc nhập link ngoài",urlLabel:"Đường dẫn ảnh (URL):",whatIsExternalLink:"Link ngoài là gì?",urlPlaceholder:"https://...",secureLink:"🛡️ Link bảo mật từ kho lưu trữ của bạn (Hệ thống tự điền)",videoUrlLabel:"Đường dẫn youtube (Nếu muốn xem video trên tường):",titleLabel:"Tên tác phẩm:",titlePlaceholder:"VD: Núi rừng Tây Bắc (để trống sẽ lấy phần Mô tả)",authorLabel:"Tác giả:",authorPlaceholder:"VD: Nguyễn Văn A (tuỳ chọn)",descLabel:"Mô tả tranh:",descPlaceholder:"Nhập mô tả cho ảnh...",btnDelete:"🗑️ Xóa khung",btnCancel:"Hủy",btnSaving:"Đang lưu...",btnUploading:"Đang tải...",btnSave:"💾 Lưu lại",fontSizeLabel:"Cỡ chữ:",hour:"{{count}} giờ"},pinBanner$1={count:"{{pinned}}/{{limit}} đã ghim",expired:"⚠️ Gói hết hạn!",renew:"Gia hạn"},editor$5={typeChanged:"✓ Đã thay đổi loại ảnh",nameChanged:"✓ Đã đổi tên phòng",nameEmpty:"Tên phòng không được để trống",confirmDeleteFrame:"Bạn chắc chắn muốn xóa khung ảnh này?",showNumbers:"Hiển thị STT tranh",btnBackAndSave:"← Lưu phòng & Quay lại",toolsBtn:"Công cụ",title:"Chỉnh sửa: {{name}}",changeTypeTooltip:"Thay đổi loại ảnh panorama",frameIndex:"Khung {{index}}",hotspotsList:"Hotspots",hasImage:"✓ Đã có ảnh",btnEditFrame:"Sửa khung",btnAddFrame:"Thêm ảnh/video",prev:"← Trước",next:"Sau →",pageOf:"Trang {{current}} / {{total}}"},viewer$1={rotateHint:"Vui lòng xoay ngang điện thoại để xem tốt nhất",loading:"Đang tải phòng...",notFound:"Không tìm thấy phòng",btnBackList:"Quay lại danh sách",btnBack:"← Quay lại",btnFullscreen:"⛶ Toàn màn hình",btnShare:"
513🔗 Chia sẻ",btnExitFullscreen:"← Thoát",frameInfoTitle:"Thông tin chi tiết",frameNoDesc:"Không có mô tả cho khung ảnh này",shareSuccess:"✓ Link đã sao chép",shareError:"✗ Lỗi khi chia sẻ",mobileHint:"Phòng tranh 3D • Xem trên mobile",mobile3DHelp:"Trên điện thoại bạn không thể bước vào không gian ảo 3D",tooltipShare:"Chia sẻ",emptyGallery:"Phòng tranh chưa có tác phẩm nào."},share$a={embedExpiredTitle:"Nội dung này hiện không khả dụng",embedExpiredHint:"Liên hệ người chia sẻ để được cấp lại quyền xem.",notFound:"Phòng không tồn tại hoặc đã được xóa",btnBackList:"Quay lại"},roomType$1={tech:"🖥️ Công Nghệ",normal:"🌿 Tá»± nhiên",history:"📚 Lịch Sá»­",edu:"🏫 Lớp Học",walkable:"✨ Triển lãm 3D nhập vai"},walkable$1={restoring:"Tác phẩm đang được phục chế...",desktopOnly:"Chế độ 3D di chuyển tá»± do",desktopOnlyDesc:"Hiện tại tính năng này chỉ hỗ trợ trên Máy tính để đảm bảo trải nghiệm tốt nhất.",btnBack:"Quay lại",title:"Triển lãm 3D Kỹ thuật số",controls:"Sá»­ dụng <1>Phím mÅ©i tên</1> để di chuyển • <3>Chuột</3> để nhìn xung quanh",controlsMobile:"<0>Vuốt</0> để nhìn xung quanh • Giữ nút <2>👣</2> để đi tới",walkButton:"Đi tới",walkBackButton:"Đi lùi",shareTooltip:"Chia sẻ triển lãm",hideHint:"Ẩn hướng dẫn",showHint:"Hiện hướng dẫn",closeDetail:"Click ra ngoài để đóng xem chi tiết",externalLinkBtn:"Xem trang liên quan",emptyArtwork:"Chưa có tác phẩm",noDescription:"Chưa có mô tả...",frameIndex:"Khung {{index}}",doorEnter:"Chạm để sang phòng",doorEnterNext:"THAM QUAN PHÒNG TIẾP",showMap:"Hiện bản đồ",hideMap:"Ẩn bản đồ",muteBgm:"Tắt nhạc nền",unmuteBgm:"Bật nhạc nền",autoTour:"Tá»± động tham quan",autoTourStop:"Dừng tham quan",autoTourShort:"Tá»± động",autoTourStopShort:"Dừng",tourSpeed:"Tốc độ tham quan",tourModeWalk:"Đang nhìn theo hướng đi — bấm để vừa đi vừa xem",tourModeGaze:"Đang vừa đi vừa xem tranh — bấm để nhìn theo hướng đi",tourModeWalkShort:"Hướng đi",tourModeGazeShort:"Vừa xem",portalVisit:"THAM QUAN",portalNext:"PHÒNG TIẾP",clickToOpenLink:"🔗 Bấm để mở link"},bgm$4={title:"Nhạc nền phòng tranh",desc:"Nhạc sẽ tá»± phát khi người xem bước vào phòng 3D (lặp lại liên tục). Tối đa 5MB, định dạng mp3/wav/ogg/m4a.",menuItem:"Nhạc nền",uploadBtn:"Tải nhạc lên",uploadBtnPro:"Tải nhạc lên (cần FullGame)",replaceBtn:"Đổi nhạc khác",deleteBtn:"Xóa nhạc",useBtn:"Dùng nhạc này",uploading:"Đang tải lên...",saved:"Đã lưu nhạc nền!",deleted:"Đã xóa nhạc nền.",proOnly:"Tính năng tải nhạc nền chỉ dành cho gói FullGame.",errorType:"Định dạng không hỗ trợ. Dùng mp3/wav/ogg/m4a.",errorSize:"File quá lớn ({{size}}MB). Tối đa 5MB.",errorGeneric:"Tải lên thất bại, thá»­ lại sau."},banner$1={menuItem:"Khẩu hiệu theo tường",title:"Băng rôn khẩu hiệu theo tường",hint:"Nhập nội dung khẩu hiệu cho từng bức tường (chữ luôn IN HOA khi hiển thị). Băng rôn treo phía trên hàng tranh trong phòng 3D, tá»± co dài theo độ dài chữ. Để trống nếu không dùng.",empty:"Chưa có khẩu hiệu",upload:"Tải ảnh",change:"Đổi ảnh",textPlaceholder:"VD: CỘNG HÒA Xà HỘI CHỦ NGHĨA VIỆT NAM",textColor:"Màu chữ",bgColor:"Màu nền",previewEmpty:"(xem trước khẩu hiệu)",saveOne:"💾 Lưu tường này",saved:"Đã lưu khẩu hiệu!",removed:"Đã xóa khẩu hiệu.",error:"Có lỗi, thá»­ lại sau."},cover$1={enterTour:"VÀO THAM QUAN",switchLabel:"Tạo trang bìa cho Phòng chung",switchHint:"Bật để thêm trang bìa giới thiệu cho Phòng chung. Khi mở Phòng chung, người xem thấy trang bìa trước, bấm VÀO THAM QUAN mới vào phòng đá
513º§u tiên.",titleFromName:"Tiêu đề trên trang bìa chính là tên Phòng chung ở trên.",titleLabel:"Tiêu đề triển lãm",titlePlaceholder:"Ví dụ: Triển lãm tranh 3D - Không gian văn hóa..."},coverEditor$1={slotMain:"Khung lớn (giữa)",slotLeft:"Khung nhỏ (trái)",slotRight:"Khung nhỏ (phải)"},exhibition$1={createBtn:"Tạo Phòng chung",badge:"🏛️ Phòng chung",createTitle:"Tạo Phòng chung",editTitle:"Sá»­a Phòng chung",nameLabel:"Tên Phòng chung",namePlaceholder:"Ví dụ: Triển lãm ảnh 3D - Không gian văn hóa...",roomsLabel:"Chọn các phòng trưng bày (phòng 3D)",roomsHint:"Tick chọn các phòng 3D thuộc Phòng chung này. Kéo thứ tá»± bằng nút ▲▼ — phòng số 1 là phòng vào đầu tiên. Trong lúc tham quan, cá»­a trong mỗi phòng dẫn sang các phòng thành viên khác.",entryRoom:"Vào đầu",moveUp:"Lên trên",moveDown:"Xuống dưới",remove:"Bỏ khỏi Phòng chung",noWalkable:"Chưa có phòng Triển lãm 3D nào. Hãy tạo phòng Triển lãm 3D trước.",needName:"Vui lòng nhập tên Phòng chung.",needRoom:"Cần ít nhất 1 phòng Triển lãm 3D để tạo Phòng chung.",save:"Lưu Phòng chung",saved:"Đã lưu Phòng chung!",roomChip:"{{total}} phòng",confirmDelete:'Xóa Phòng chung "{{name}}"? (các phòng 3D thành viên KHÔNG bị xóa)',notFound:"Không tìm thấy Phòng chung hoặc chưa có phòng nào."},roomLinks$1={btn:"Thông phòng tranh",title:"Cài đặt liên kết phòng tranh",hint:"Chọn phòng vào từng ô, sau đó kéo từ nút 🔗 cá»§a phòng này thả vào phòng kia để nối (hoặc bấm 🔗 rồi bấm phòng đích). Liên kết là 2 chiều — mỗi phòng tối đa 3 cá»­a, cá»­a sẽ hiện ngay trong phòng 3D. Phòng ở Vị trí 1 là phòng vào đầu tiên — có thể bật trang bìa cho phòng này ở dưới.",slotLabel:"Vị trí {{index}}",slotEmpty:"— Chọn phòng —",linkingHint:'Đang nối từ "{{name}}" — bấm vào phòng đích để tạo liên kết',dragToLink:"Kéo thả vào phòng khác để nối",removeLink:"Gỡ liên kết",save:"Lưu liên kết",cancel:"Há»§y",saved:"Đã lưu liên kết phòng! Cá»­a thông phòng sẽ hiện trong phòng 3D.",saveError:"Không lưu được liên kết, thá»­ lại sau.",needTwoRooms:"Cần ít nhất 2 phòng tranh 3D để thông phòng.",needRoomFirst:"Chọn phòng cho ô này trước đã!",maxLinks:"Mỗi phòng chỉ nối tối đa 3 phòng!",maxLinksRoom:'Phòng "{{name}}" vượt quá 3 liên kết (tính cả liên kết với phòng ngoài sÆ¡ đồ).',thumbBtn:"Ảnh đại diện",thumbTooltip:"Tải ảnh đại diện — ảnh sẽ hiện trên cá»­a thông phòng trong 3D",thumbSaved:"Đã lưu ảnh đại diện phòng!",thumbError:"Không tải được ảnh, thá»­ lại sau.",chip:"Có thông phòng ({{total}})"},session$3={btnCollect:"🎨 Giao HS treo tranh",btnStop:"⏹️ Ngừng thu",btnDismiss:"✖ Xóa phiên",expiredLabel:"Hết hạn",btnReload:"🔄 Thu bài",btnReloadLoading:"⏳...",codeLabel:"Mã Code:",qrTooltip:"Học sinh quét mã QR hoặc truy cập link trên để nộp tranh",stopConfirm:"Bạn có chắc chắn muốn ngừng nhận tranh? (Mã code sẽ bị xóa, học sinh không thể nộp thêm tranh vào phòng này nữa)",stopError:"Có lỗi xảy ra khi ngừng thu tranh.",bulkUpload:"📤 Tải ảnh (GV)",bulkLimit:"Phòng đã đầy tranh (45/45). Vui lòng xóa bớt để tải thêm.",bulkSuccess:"Đã tải lên thành công {{count}} ảnh!",bulkError:"Có lỗi xảy ra khi tải ảnh đồng loạt. Vui lòng thá»­ lại.",reloadNoSession:'Chưa có phiên "Giao cho HS" đang hoạt động.',reloadNoUploads:"Học sinh chưa tải ảnh lên trong phiên này.",reloadNoNew:"Tất cả ảnh HS đã được thêm vào gallery rồi.",reloadFull:"Phòng đã đầy (45/45) tranh. Xóa bớt để nhận thêm tranh HS.",reloadSuccess:"Đã tải lại {{count}} tranh HS vào phòng!{{skipped}}",reloadSkipped:" (Bỏ qua {{count}} ảnh do hết slot)",reloadError:"Có lỗi khi tải lại ảnh. Vui lòng thá»­ lại.",studentArtwork:"Tác phẩm cá»§a {{name}}",modalTitle:"Giao cho HS treo tranh",modalInfo:"Hệ thống sẽ tạo mã code 5 số để học sinh tải ảnh lên phòng triển lãm này. <1>Tổng tối đa 45 tranh</1>
513 cho cả phòng.",maxPerStudent:"Số tranh mỗi HS được tải lên:",unitTranh:"tranh / học sinh",duration:"Thời hạn hiệu lực của mã:",durationUnit:"{{count}} giờ",createLoading:"Đang tạo...",btnCreate:"Tạo phiên & lấy code",readyTitle:"Phiên treo tranh đã sẵn sàng!",readySubtitle:"Học sinh tải tối đa <1>{{max}}</1> ảnh · Hết hạn sau <3>{{hours}} giờ</3>",codeInstruction:"MÃ CODE (Click để sao chép)",copied:"Đã sao chép!",copyCode:"Sao chép mã",qrInstruction:"HS quét QR hoặc nhập code",shareLabel:"Hoặc gửi đường dẫn:",btnCopy:"Sao chép",btnCopied:"Đã chép",btnCloseKeep:"Đóng (giữ phiên hoạt động)",creating:"Đang tạo...",createError:"Có lỗi xảy ra khi tạo phiên nộp tranh.",artworkUnit:"tranh / học sinh",codeHint:"MÃ CODE (Bấm để sao chép)",qrHelp:"Học sinh quét mã QR hoặc truy cập link bên dưới để nộp tranh",shareOrPaste:"Hoặc gửi đường dẫn/nhập vào trình duyệt:",copyBtn:"Sao chép",successTitle:"Phiên treo tranh đã sẵn sàng!",successSubtitle:"Học sinh nộp tối đa {{count}} tranh · Hết hạn sau {{hours}} giờ",modalAlert:"Hệ thống sẽ tạo mã code 5 số để học sinh tải ảnh lên phòng triển lãm này. <strong>Tổng tối đa 45 tranh</strong> cho cả phòng.",maxPerStudentLabel:"Số tranh mỗi HS được tải lên (trong 1 lần nộp):",expirationLabel:"Thời hạn hiệu lực của mã:",allowMultipleLabel:"Cho phép HS nộp nhiều lần trên cùng 1 máy (không tick: mỗi máy chỉ nộp được ĐÚNG 1 lần, nộp thiếu sẽ không bổ sung được)"},map$1={title:"Sơ đồ phòng triển lãm",btnShow:"Sơ đồ phòng",btnHide:"Ẩn sơ đồ",lockedDuringSession:"Không thể sắp xếp sơ đồ khi đang thu bài HS",hint:"Bấm vào ô có tranh để di chuyển",north:"Tường Bắc",south:"Tường Nam",west:"Tường Tây",east:"Tường Đông",p1w:"Vách 1 (Trái)",p1e:"Vách 1 (Phải)",p2w:"Vách 2 (Trái)",p2e:"Vách 2 (Phải)",shortNorth:"BẮC",shortSouth:"NAM",shortWest:"TÂY",shortEast:"ĐÔNG",moveTitle:"Di chuyển tranh",labelFrom
513:"Từ slot",labelTo:"Sang slot",placeholderTo:"1–45",btnMove:"Chuyển",btnCancel:"Hủy",legendFilled:"Có tranh",legendEmpty:"Trống",legendSelected:"Đang chọn",guideTitle:"📌 Cách đổi vị trí tranh:",guideStep1:"Bấm vào ô <1>tím</1> muốn di chuyển",guideStep2:"Nhập số slot đích (1–45) → nhấn <1>Chuyển</1> hoặc <3>Enter</3>",guideStep3:"Slot đích phải <1>trống</1>",btnSave:"Lưu sơ đồ",btnSaving:"⏳ Đang lưu...",btnSaved:"✓ Đã lưu",errorRange:"Vị trí phải từ 1 đến 45",errorSame:"Đó là vị trí hiện tại",errorOccupied:"Slot {{index}} đã có tranh",errorSave:"Có lỗi khi lưu sơ đồ. Vui lòng thử lại."},student$3={sessionNotFound:"Phiên triển lãm không tồn tại hoặc đã kết thúc.",sessionExpired:"Phiên triển lãm đã hết hạn.",loadError:"Không thể tải thông tin phiên. Vui lòng thử lại.",noFileError:"Vui lòng chọn ít nhất 1 ảnh.",uploadError:"Có lỗi xảy ra khi tải ảnh. Vui lòng thử lại.",loading:"Đang tải thông tin phiên...",notAvailableTitle:"Phiên không khả dụng",notAvailableDesc:"Vui lòng liên hệ giáo viên để nhận mã mới.",thanks:"🎨 Cảm ơn bạn đã tham gia triển lãm!",alreadySubmittedTitle:"Bạn đã gửi tranh rồi!",alreadySubmittedDesc:"Thiết bị này đã nộp tranh cho phiên triển lãm này. Tranh của bạn đang chờ giáo viên duyệt vào phòng.",successTitle:"Treo tranh thành công!",successDesc:"<bold>{{count}}</bold> bức tranh của bạn đã được gửi đến phòng triển lãm 3D.<br/>Giáo viên sẽ xem xét và đưa tranh vào phòng.",successBadge:"🖼️ Chúc mừng bạn đã có tác phẩm trong triển lãm!",title:"Triển Lãm 3D",subtitle:"Tải lên tối đa <1>{{max}}</1> bức tranh của bạn",nameLabel:"Họ và tên của bạn (để ghi chú tác giả)",namePlaceholder:"VD: Nguyễn Văn A (tùy chọn)",imageTitleLabel:"Tên tác phẩm ảnh {{index}}",imageTitlePlaceholder:"VD: Núi rừng Tây Bắc (tùy chọn)",imageAuthorLabel:"Tác giả ảnh {{index}}",imageAuthorPlaceholder:"VD: Nguyễn Văn A (tùy chọn)",imageDescLabel:"Mô tả ảnh {{index}}",imageDescPlaceholder:"VD: Vẽ bằng màu nước, lấy cảm hứng từ quê em (tùy chọn)",btnSelect:"Nhấn để chọn ảnh",uploadHint:"Tối đa {{max}} ảnh · JPG, PNG, WEBP",compressionHint:"Ảnh sẽ được tự động nén để tiết kiệm dung lượng",selectedCount:"Đã chọn: {{current}}/{{max}} ảnh",btnAddMore:"+ Thêm ảnh",uploading:"Đang tải ảnh...",btnUploading:"⏳ Đang gửi ({{current}}/{{total}})...",btnConfirm:"🖼️ Xác nhận treo {{count}} tranh vào triển lãm",footerNote:"Ảnh được nén tự động · Mỗi thiết bị chỉ được gửi 1 lần",pageForCode:"Trang web này phục vụ nộp tranh cho mã: <bold>{{code}}</bold>",errorNoFiles:"Vui lòng chọn ít nhất 1 ảnh để gửi.",loadingInfo:"Đang tải thông tin phiên...",unavailableTitle:"Phiên không khả dụng",contactTeacher:"Vui lòng liên hệ với giáo viên để nhận mã mới.",thanksParticipating:"Cảm ơn bạn đã tham gia triển lãm!",congratsTask:"Chúc mừng bạn đã hoàn thành nhiệm vụ treo tranh!",uploadLimit:"Tải lên tối đa {{count}} bức tranh",clickToSelect:"Nhấn để chọn ảnh",fileFormatHint:"Tối đa {{max}} ảnh · JPG, PNG, WEBP",uploadingStatus:"Đang gửi ảnh lên hệ thống...",btnUploadingProgress:"⏳ Đang gửi ({{current}}/{{total}})...",btnSubmit:"🖼️ Xác nhận treo {{count}} tranh",maxSubmissionsReached:"Bạn đã nộp đủ số lần tối đa trên thiết bị này. Hãy báo thầy/cô để được mở thêm.",errorTooManyFiles:"Đã bỏ bớt {{dropped}} ảnh vì em chỉ còn được nộp tối đa {{max}} ảnh.",imageLimitExceeded:"Em chỉ còn được nộp {{remaining}} ảnh (tối đa {{limit}} ảnh cho cả phiên này).",quotaUsedUpDesc:"Em đã nộp đủ {{count}} tranh cho phiên triển lãm này. Tranh của em đang chờ giáo viên duyệt vào phòng."},viPanorama={page:page$o,sidebar:sidebar$d,content:content$1,empty:empty$7,demo:demo$e,error:error$9,card:card$5,modal:modal$4,hotspotModal:hotspotModal$1,pinBanner:pinBanner$1,editor:editor$5,viewer:viewer$1,share:share$a,roomType:roomType$1,walkable:walkable$1,bgm:bgm$4,banner:banner$1,cover:cover$1,coverEditor:coverEditor$1,exhibition:exhibition$1,roomLinks:roomLinks$1,session:session$3,map:map$1,student:student$3}
513,page$n={title:"🤏 Kéo Thả - Nối Ý",upgradeBtn:"Nâng Cấp Lẻ",upgradeTooltip:"Nâng cấp để mở khóa giới hạn",helpBtn:"Hướng dẫn sử dụng",helpTitle:"Hướng Dẫn Kéo Thả - Nối Ý",helpDesc:"Tìm hiểu cách tạo bài trắc nghiệm kéo thả nhãn lên ảnh hoặc kéo thả nối ý"},sidebar$c={createDragDrop:"Tạo bài mới",createMatching:"Tạo bài nối ý",createSorting:"Tạo bài sắp xếp",myQuizzes:"Bài học của tôi"},myQuizzes$6={title:"📚 Bài Học Của Tôi",subtitle:"Quản lý các bài trắc nghiệm kéo thả và nối ý của bạn",matchingLabel:"Trò chơi Nối Ý",dragDropLabel:"Kéo Thả Nhãn",loadingError:"Không thể tải danh sách bài học",deleteSuccess:"Xóa bài học thành công",deleteError:"Không thể xóa bài học",noQuizMsg:"Bạn chưa có bài học nào. Hãy <1>tạo bài học mới</1> để bắt đầu.",questionCount:"Câu hỏi",updated:"Cập nhật",btnView:"Xem",btnViewTooltip:"Xem trước / Chiếu",btnEdit:"Sửa",btnEditTooltip:"Chỉnh sửa bài",btnAssign:"Giao",btnAssignTooltip:"Giao bài cho học sinh",btnDeleteTooltip:"Xóa bài",lockedTip:"Gia hạn để mở bài này",demo:{title:"Kéo Thả - Nối Ý - Sắp Xếp - Bản Chạy Thử",badge:"Bản chạy thử",typesLabel:"3 dạng câu hỏi",hint:"Chơi thử cả 3 dạng: Kéo thả nhãn, Nối ý, và Sắp xếp thứ tự"},expiredPackage:"Gói đã hết hạn!"},createQuiz$1={updateQuestionSuccess:"Cập nhật câu hỏi thành công",addQuestionSuccess:"Thêm câu hỏi thành công",deleteQuestionSuccess:"Xóa câu hỏi thành công",titleErrorEmpty:"Vui lòng nhập tiêu đề bài học",warningNoQuestions:"Vui lòng thêm ít nhất 1 câu hỏi",warningMaxQuestions:"Tối đa 10 câu hỏi cho mỗi bài",updateQuizSuccess:"Cập nhật bài học thành công",createQuizSuccess:"Tạo bài học thành công",limitReachedMsg:"Bạn đã dùng hết 10 lượt Quiz miễn phí. Vui lòng nâng cấp để tiếp tục.",saveError:"Không thể lưu bài học: ",quotaTrial:"Đã dùng <1>{{currentCount}}/{{limit}}</1> lượt tạo Quiz",quotaUnlimited:"✅ Bạn đang dùng FullGame - Không giới hạn",placeholderEdit:"📝 Chỉnh Sửa Bài Học",placeholderCreate:"➕ Tạo Bài Học Mới",titleLabel:"Tên bài học",titleInputPlaceholder:"VD: Ôn tập chương 1, Từ vựng Unit 5...",btnEditTitleTooltip:"Sửa tiêu đề",createQuestionTitle:"❓ Tạo Câu Hỏi",questionListTitle:"📋 Danh Sách Câu Hỏi",questionNumber:"📌 Câu {{num}}",blankSpace:"Khoảng trống",answers:"Đáp án",btnEditQuestion:"Sửa",btnDeleteQuestion:"Xóa",warningNoTitle:"Hãy nhập tên bài học trước để thêm câu hỏi",btnAddQuestion:"Thêm Câu Hỏi Mới",maxQuestionsReached:"✅ Đã đạt tối đa 10 câu hỏi",btnCancel:"✕ Hủy",btnSaving:"⏳ Đang lưu...",btnSave:"💾 Lưu Bài Học",editTitleDialog:"✏️ Sửa Tiêu Đề Bài Học",editTitleLabel:"Tiêu đề bài học",btnDialogCancel:"Hủy",btnDialogSave:"Lưu",confirmCancelTitle:"⚠️ Xác Nhận Hủy",confirmCancelMsg:"Bạn có chắc chắn muốn hủy? Tất cả thay đổi sẽ bị mất.",btnConfirmNo:"Không, Quay Lại",btnConfirmYes:"Có, Xác Nhận Hủy"},deleteDialog$3={title:"🗑️ Xác Nhận Xóa",message:"Bạn có chắc chắn muốn xóa bài học này? Hành động này không thể hoàn tác.",btnCancel:"Hủy",btnDelete:"Xóa"},preview$3={errorLoad:"Không thể tải bài quiz",errorNotFound:"Không tìm thấy bài quiz",btnGoBack:"Quay Lại",btnFullscreen:"Toàn Màn Hình",btnExitFullscreen:"Thoát Toàn Màn Hình",defaultTitle:"Bài Quiz",btnPrev:"Câu Trước",btnNext:"Câu Sau",questionStatus:"Câu {{current}} / {{total}}",instructionDragDrop:"🎯 Kéo đáp án hoặc nhãn vào đúng vị trí (hoặc nhấp ô trống để chọn)",instructionFillIn:"✏️ Gõ đáp án vào các ô trống trên hình",instructionMatching:"🔗 Kéo nối các ý tương ứng ở hai cột",instructionSorting:"↕️ Kéo thả các khối để sắp xếp đúng thứ tự",instructionGrouping:"🗂️ Kéo mỗi thẻ vào đúng nhóm của nó"}
513,customInstruction$1={label:"Sửa câu yêu cầu",helper:"Để trống sẽ dùng lại câu mặc định"},share$9={errorLoad:"Không thể tải bài quiz. Vui lòng kiểm tra lại link.",loading:"Đang tải bài học...",errorNotFound:"Không tìm thấy bài học. Vui lòng kiểm tra lại link chia sẻ."},blankSpaceCanvas$1={uploadError:"Có lỗi xảy ra khi tải ảnh lên: ",requireImageWarning:"Vui lòng tải ảnh trước",requireAnswerWarning:"Vui lòng nhập đáp án",requireImageLinkWarning:"Vui lòng nhập link ảnh hoặc tải ảnh lên",requireMinBlanksWarning:"Vui lòng tạo ít nhất 1 đáp án",requireAllAnswersWarning:"Vui lòng nhập đáp án cho tất cả khoảng trống",title:"✏️ Tạo Câu Hỏi Kéo Thả Vào Hình",uploadingText:"⏳ Đang nén và tải ảnh lên kho...",method2:"Dán Link ảnh trực tiếp",guideLinkText:"📹 Hướng dẫn lấy link ảnh",placeholderUrl:"https://example.com/image.jpg",imageLoadedText:"Ảnh đã tải thành công",borderEnabled:"Thêm viền/thanh bên cho ảnh",borderDesc:"Hiển thị viền trắng hoặc thanh bên khi bật",borderTypeSimple:"Viền: viền trắng bo quanh ảnh",borderTypeSidebar:"Thanh bên: thanh trắng bên phải ảnh",sidebarWidthLabel:"Độ rộng thanh bên",fillInMode:"✍️ Chế độ điền từ",fillInDesc:"Người dùng điền chữ thay vì kéo thả",fillInTextColor:"Màu chữ:",btnAddBlank:"➕ Thêm đáp án kéo thả",btnClearConnectors:"❌ Xóa đường nối",tooltipClickToEdit:"Nháy để nhập đáp án · Kéo để di chuyển ô",tooltipUndo:"Hoàn tác (Ctrl+Z)",tooltipRedo:"Làm lại (Ctrl+Y)",nothingToUndo:"Không còn thao tác nào để hoàn tác",tooltipDragConnector:"Kéo để tạo đường nối",tooltipResize:"Kéo để thay đổi kích thước",clickToUpload:"Nhấn để tải ảnh lên",uploadHint:"Hoặc kéo ảnh thả vào đây, hoặc bấm Ctrl+V để dán ảnh đã Copy",dropImageHere:"Thả ảnh vào đây",dropToReplace:"Thả để thay ảnh nền",requireLoginToUpload:"Bạn cần đăng nhập để tải ảnh lên.",notAnImage:"Nội dung vừa chọn không phải ảnh.",pasteImageHint:"Mẹo: Ctrl+V để dán thẳng ảnh đã Copy (không cần link).",replaceImage:"Đổi ảnh",orUseLink:"Hoặc dán link ảnh có sẵn",pickImageFirst:"Chọn ảnh nền ở trên để bắt đầu đặt các đáp án.",emptyBlankHint:"Chưa có đáp án",tooltipEditAnswer:"Sửa đáp án",tooltipDelete:"Xóa",editDialogTitle:"📝 Nhập Đáp Án {{id}}",editDialogInputLabel:"Đáp án đúng",btnCancel:"Hủy",btnSave:"Lưu",btnActionCancel:"Hủy",btnActionSaving:"⏳ Đang lưu...",btnActionUploading:"⏳ Đang tải ảnh...",btnActionSave:"✅ Lưu Câu Hỏi",btnActionSaveDragDrop:"✅ Lưu câu hỏi Kéo thả này",btnActionSaveSorting:"✅ Lưu câu hỏi Sắp xếp thứ tự này",btnActionSaveMatching:"✅ Lưu câu hỏi Nối ý này",btnActionSaveGrouping:"✅ Lưu câu hỏi Phân loại nhóm này"},sortingEditor$1={title:"🔢 Tạo Câu Hỏi Sắp Xếp Thứ Tự",layoutText:"Chiều hiển thị:",layoutHorizontal:"Ngang",layoutVertical:"Dọc",guideText:"Thêm các thẻ và sắp xếp theo đúng thứ tự (chiều hiện tại: {{layout}}). Học sinh sẽ phải sắp xếp lại đúng thứ tự này.",btnAddItem:"➕ Thêm Thẻ",itemLabel:"Thẻ thứ {{index}}",placeholderItem:"Nhập văn bản cho thẻ này",uploadingImage:"Đang tải ảnh lên...",deleteItem:"Xoá thẻ"},groupingEditor$1={title:"🗂️ Tạo Câu Hỏi Phân Loại Vào Nhóm",guideText:"Đặt tên cho từng nhóm rồi thêm các thẻ THUỘC nhóm đó. Lúc chơi, thẻ của mọi nhóm sẽ được trộn chung vào một kho — học sinh kéo từng thẻ về đúng rổ.",placeholderGroupName:"Tên nhóm (vd: Động vật)",placeholderItem:"Nhập nội dung thẻ",btnAddItem:"Thêm thẻ",btnAddGroup:"➕ Thêm nhóm"},quizPreviewComponent$1={noQuestions:"Không có câu hỏi",questionAlt:"Câu {{index}}",teacherView:"Chế độ xem của giáo viên",btnBackList:"Quay lại danh sách",btnCheck:"✓ Kiểm tra",btnRetry:"🔄 Làm lại",btnPrev:"← Trước",btnNext:"Sau →",btnFinish:"🏁 Hoàn thành",loadingImage:"Đang tải ảnh..."},answerSidebar$1={fontSmaller:"Thu nhỏ chữ đáp án",fontBigger:"Phóng to chữ đáp án",title:"
513📋 Các Đáp Án",btnFinish:"Hoàn thành",btnCheck:"Kiểm Tra",btnRetry:"Làm Lại",btnPrev:"Câu Trước",btnNext:"Câu Sau",questionStatus:"Câu {{current}}/{{total}}",lockedStatus:"(Đã khóa - xem kết quả)",allAnswersUsed:"Tất cả đáp án đã được sử dụng"},studentPlayer$1={submitSuccess:"Bài làm của bạn đã được lưu thành công!",submitError:"Không thể lưu bài làm. Vui lòng thử lại.",instruction:"Hãy kéo/chọn các nhãn vào đúng vị trí trên ảnh",lockedWarning:"⚠️ Bạn đã nộp bài làm này. Không thể làm lại trên cùng thiết bị.",completionTitle:"Hoàn Thành Bài Học!",completionMessage:"Chúc mừng bạn đã hoàn thành bài học.",btnExit:"Thoát",nameDialogTitle:"📝 Nhập Tên Của Bạn",nameDialogDesc:"Vui lòng nhập tên của bạn để nộp bài làm này. Tên này sẽ được ghi lại cùng với kết quả bài làm của bạn.",nameInputLabel:"Tên của bạn",nameInputPlaceholder:"VD: Nguyễn Văn A",nameError:"Vui lòng nhập tên",scoreDisplay:"📊 Điểm của bạn: {{score}} / {{max}}",btnSubmitting:"⏳ Đang lưu...",btnSubmit:"✅ Nộp Bài"},clickableMenu$1={inBlank:"Trong khoảng trống {{ids}}",noAnswers:"Không có đáp án nào"},teacherSidebar$1={errorLoad:"Không thể tải bài nộp",successDelete:"Đã xóa tất cả bài nộp",errorDelete:"Không thể xóa bài nộp",successUnshare:"Đã dừng chia sẻ - HS không thể vào link nữa",errorUnshare:"Không thể dừng chia sẻ",successReshare:"Đã bật lại chia sẻ - HS có thể vào link lại",errorReshare:"Không thể bật lại chia sẻ",title:"📊 Bài Nộp",colIndex:"STT",colName:"Tên",colScore:"Điểm",noSubmissions:"Chưa có bài nộp",totalLabel:"Tổng",unit:"bài",avgLabel:"TB",btnRefresh:"Làm mới",btnUnshare:"Dừng Chia Sẻ",btnReshare:"Bật Lại Chia Sẻ",btnDeleteAll:"Xóa Tất Cả",confirmDeleteTitle:"⚠️ Xác Nhận Xóa",confirmActionTitle:"ℹ️ Xác Nhận",confirmUnshare:"🔒 Dừng chia sẻ sẽ vô hiệu hóa link. HS không thể vào làm bài nữa. Bạn có chắc chắn?",confirmReshare:"🔓 Bật lại chia sẻ sẽ tạo lại link. HS có thể vào làm bài lại. Tiếp tục?",confirmDelete:"🗑️ Bạn sẽ xóa tất cả bài nộp ({{count}} bài). Hành động này không thể hoàn tác. Tiếp tục?"},viQuizGame={page:page$n,sidebar:sidebar$c,myQuizzes:myQuizzes$6,createQuiz:createQuiz$1,deleteDialog:deleteDialog$3,preview:preview$3,customInstruction:customInstruction$1,share:share$9,blankSpaceCanvas:blankSpaceCanvas$1,sortingEditor:sortingEditor$1,groupingEditor:groupingEditor$1,quizPreviewComponent:quizPreviewComponent$1,answerSidebar:answerSidebar$1,studentPlayer:studentPlayer$1,clickableMenu:clickableMenu$1,teacherSidebar:teacherSidebar$1},title$8="📋 Hoạt động của tôi",subtitle$2="{{count}} nội dung đã tạo",searchHint$2="Tìm kiếm theo tên...",tabs$6={all:"Tất cả"},error$8="Không thể tải dữ liệu. Vui lòng thử lại.",empty$6={noResults:"Không tìm thấy kết quả",noContent:"Chưa có nội dung nào",tryAnother:"Thử từ khóa khác",startCreating:"Bắt đầu tạo nội dung từ các công cụ trên Dashboard",backToDashboard:"Về Dashboard"},actions$7={view:"Xem",edit:"Sửa",assign:"Giao",assignTitle:"Giao bài tập",teacherShare:"Chia sẻ GV"},features$4={"interactive-video":"Video Tương Tác","panorama-museum":"Bảo Tàng Panorama","quiz-game":"Kéo Thả - Nối Ý","hand-slash-quiz":"Quiz Chém Hoa Quả","flip-puzzle-game":"Trò Chơi Lật Mảnh Ghép","crossword-puzzle":"Ô Chữ","tug-of-war-game":"Kéo Co Kiến Thức","paced-quiz":"Trắc Nghiệm Theo Nhịp Độ","interactive-image":"Ảnh Tương Tác","head-tilt-quiz":"Quiz Nghiêng Đầu","pose-quiz":"Thể dục ABC","versus-game":"Game Đối Kháng","wheel-quiz":"Vòng Quay - Đua Vịt","turn-based-game":"Game Theo Lượt",flashcard:"Thẻ Lật (Flashcard)","mind-map":"Sơ Đồ Tư Duy",minesweeper:"Dò Mìn","flying-words-game":"Từ Ngữ Biết Bay"},itemDefaults$2={"interactive-video":"Bài học không tên","panorama-museum":"Phòng không tên","quiz-game":"Quiz không tên","hand-slash-quiz":"Bài học không tên","flip-puzzle-game":"Game không tên","crossword-puzzle":"Ô chữ không tên","tug-of-war-game":"Trò chơi không tên","paced-quiz":"Quiz không tên","interactive-image":"Ảnh không tên","head-tilt-quiz":"Bài học không tên","pose-quiz":"Bài học không tên","versus-game":"Game không tên","wheel-quiz":"Vòng quay không tên","turn-based-game":"Game không tên"}
513,publish$2={title:"Thư viện cộng đồng",submitToLibrary:"Đưa lên Thư viện cộng đồng",saveForMeOnly:"Chỉ lưu cho tôi",schoolLevel:"Cấp học *",subject:"Môn học *",grade:"Khối lớp *",uploadLimitReached:"Bạn đã đạt giới hạn đóng góp. Nâng cấp Pro để chia sẻ thêm.",upgradeProTooltip:"Nâng cấp Pro để đóng góp thêm cho cộng đồng",copyrightLabel:"Tôi xác nhận nội dung này do tôi tự soạn hoặc tôi có quyền chia sẻ, không vi phạm bản quyền của bên thứ ba.",copyrightRequiredError:"Vui lòng xác nhận bản quyền nội dung trước khi đăng lên thư viện",levels:{"mam-non":"Mầm non","tieu-hoc":"Tiểu học",thcs:"THCS",thpt:"THPT",khac:"Khác"},subjects:{"phat-trien-the-chat":"Phát triển thể chất","phat-trien-nhan-thuc":"Phát triển nhận thức","phat-trien-ngon-ngu":"Phát triển ngôn ngữ","phat-trien-tinh-cam":"Phát triển tình cảm & xã hội","phat-trien-tham-my":"Phát triển thẩm mỹ","tieng-viet":"Tiếng Việt",toan:"Toán","ngoai-ngu-1":"Ngoại ngữ 1","ngoai-ngu-2":"Ngoại ngữ 2","giao-duc-loi-song":"Giáo dục lối sống","dao-duc":"Đạo đức","tu-nhien-xa-hoi":"Tự nhiên và Xã hội","lich-su-dia-ly":"Lịch sử và Địa lý","khoa-hoc":"Khoa học","tin-
513hoc-cong-nghe":"Tin học và Công nghệ","giao-duc-the-chat":"Giáo dục thể chất","nghe-thuat":"Nghệ thuật","tieng-dan-toc":"Tiếng dân tộc thiểu số","ngu-van":"Ngữ văn",gdcd:"Giáo dục công dân","khoa-hoc-tu-nhien":"Khoa học tự nhiên","cong-nghe":"Công nghệ","tin-hoc":"Tin học","gdqp-an":"Giáo dục quốc phòng và an ninh","gd-kinh-te-phap-luat":"Giáo dục kinh tế và pháp luật","lich-su":"Lịch sử","dia-ly":"Địa lý","vat-ly":"Vật lý","hoa-hoc":"Hóa học","sinh-hoc":"Sinh học",khac:"Khác"},grades:{1:"Lớp 1",2:"Lớp 2",3:"Lớp 3",4:"Lớp 4",5:"Lớp 5",6:"Lớp 6",7:"Lớp 7",8:"Lớp 8",9:"Lớp 9",10:"Lớp 10",11:"Lớp 11",12:"Lớp 12","nha-tre":"Nhà trẻ","mau-giao-3-4":"Mẫu giáo 3-4 tuổi","mau-giao-4-5":"Mẫu giáo 4-5 tuổi","mau-giao-5-6":"Mẫu giáo 5-6 tuổi",khac:"Khác"}},community$2={title:"Thư viện cộng đồng",description:"Khám phá và lưu bài học từ cộng đồng giáo viên",tabs:{explore:"Khám phá",mine:"Bài của tôi"},filters:{level:"Cấp học",subject:"Môn học",grade:"Khối lớp",gameType:"Loại game",allSubjects:"Tất cả môn",allGrades:"Tất cả lớp",allTypes:"Tất cả loại",searchPlaceholder:"Tìm theo tên bài...",searchBtn:"Tìm kiếm",searchHint:"Nhấn Tìm kiếm để xem kết quả",clearFilters:"Xoá lọc ({{count}})"},explore:{selectBase:"Chọn cấp học và môn học để tìm bài",selectBaseDesc:"Lọc theo Mầm non, Tiểu học, THCS hoặc THPT",selectSubject:"Tiếp theo, chọn môn học",selectSubjectDesc:"Sau đó nhấn Tìm kiếm để xem kết quả",noResults:"Chưa có bài học nào",noResultsDesc:"Hãy thử thay đổi bộ lọc"},mine:{empty:"Bạn chưa đăng bài nào",emptyDesc:'Khi tạo bài, chọn "Đưa lên Thư viện cộng đồng" để đóng góp',removeConfirm:'Gỡ bài "{{title}}" khỏi Thư viện cộng đồng?',removeTooltip:"Gỡ khỏi Thư viện cộng đồng"},card:{questions:"{{count}} câu",by:"Bởi {{author}}",anonymous:"Ẩn danh",reportTooltip:"Báo cáo bài học không phù hợp",viewAndSaveTooltip:"Xem trước và lưu về tài khoản",btnSave:"Xem & Lưu về"},detail:{questions:"câu hỏi",postedBy:"Được đăng bởi",loadError:"Không thể tải chi tiết bài học.",saveSuccess:"Đã lưu về tài khoản!",saveSuccessDesc:"Bài học đã được thêm vào danh sách của bạn.",previewTitle:"Xem trước câu hỏi:",moreQuestions:"... và {{count}} câu hỏi khác",alreadyClonedHint:"Bạn đã từng lấy bài này về rồi. Vẫn muốn lấy thêm?",btnCancel:"Thôi",btnCloneAgain:"Vẫn lấy",btnClone:"Lưu về tài khoản",btnGoToTool:"Đến trang {{name}}",generalError:"Có lỗi xảy ra. Vui lòng thử lại."}},report$5={title:"Báo cáo bài học",desc:"Vui lòng cho chúng tôi biết lý do báo cáo bài học này.",success:"✅ Cảm ơn! Báo cáo của bạn đã được ghi nhận.",alreadyReported:"Bạn đã báo cáo bài học này trước đó.",submitError:"Có lỗi xảy ra. Vui lòng thử lại.",noteLabel:"Ghi chú thêm (tuỳ chọn)",btnSubmit:"Gửi báo cáo",reasons:{inappropriate:"Nội dung không phù hợp",spam:"Spam / trùng lặp",copyright:"Vi phạm bản quyền",other:"Khác"}},viLibrary={title:title$8,subtitle:subtitle$2,searchHint:searchHint$2,tabs:tabs$6,error:error$8,empty:empty$6,actions:actions$7,features:features$4,itemDefaults:itemDefaults$2,publish:publish$2,community:community$2,report:report$5},page$m={title:"🤖 Robot Đồng Hành",loginToAccess:"Vui lòng đăng nhập để sử dụng tính năng Robot",sidebar:{myRobots:"Robot của tôi",createNew:"Tạo Robot mới",changeApiKey:"Đổi API Key"},help:{title:"Hướng Dẫn Robot Đồng Hành",description:"Tìm hiểu cách tạo và sử dụng Robot Đồng Hành AI"}},list$7={loading:"Đang tải danh sách robot...",errorLoad:"Lỗi khi tải danh sách robot: ",apiWarning:"Do hạn chế của bên cung cấp API, các Robot của bạn bị giới hạn 20 tin nhắn/ngày. Hãy cân nhắc khi sử dụng",empty:{title:"Chưa có robot nào",subtitle:"Hãy tạo robot đầu tiên của bạn để bắt đầu!",btnCreate:"➕ Tạo robot đầu tiên"},header:"🤖 Robot của tôi ({{count}})",pinBanner:{count:"({{pinned}}/{{limit}} đã ghim)",expired:"⚠️ Gói đã hết hạn!",renew:"Gia hạn"},card:{renewToOpen:"🔒 Gia hạn để mở robot này",public:"Công khai",private:"Riêng tư",tooltipChat:"Chat với robot",tooltipShare:"Chia sẻ link",tooltipEdit:"Chỉnh sửa",tooltipDelete:"Xóa",shareSuccess:"Link chia sẻ đã được sao chép"},delete:{title:"⚠️ Xác Nhận Xóa Robot",confirm:"Bạn chắc chắn muốn xóa robot này? Hành động này không thể hoàn tác.",btnCancel:"Không, Hủy",btnConfirm:"Có, Xóa Robot",success:"Robot đã được xóa thành công",error:"Lỗi khi xóa robot"}},form$w={editTitle:"✏️ Chỉnh sửa Robot",createTitle:"➕ Tạo Robot mới",sectionBasic:"📝 Thông tin cơ bản",nameLabel:"Tên Robot *",namePlaceholder:"ví dụ: Cô Hoa, Thầy Minh",topicLabel:"Chủ đề *",topicPlaceholder:"ví dụ: Học làm thơ, Luyện viết",sectionPersonality:"🎨 Tính cách Robot",speechLabel:"Robot xưng là *",addressLabel:"Gọi học sinh là *",styleLabel:"Phong cách nói chuyện *",voiceLabel:"Giọng nói Tiếng Việt (Cần sử dụng trình duyệt Microsoft Edge và máy tính có bộ giọng Tiếng Việt)",voiceHint:"Thông thường các máy tính không đủ điều kiện giọng nói!",voicePlaceholder:"-- Chọn giọng nói --",voiceError:"Máy tính không có sẵn gói giọng nói Tiếng Việt.",sectionAvatar:"🖼️ Hình đại diện Robot",avatarLabel:"Chọn hình đại diện *",sectionTraining:"📚 Nội dung Training",contentLabel:"Nội dung *",contentHint:'Nhập nội dung để "train" cho robot. Có thể thêm link với định dạng: https://...',contentPlaceholder:`Ví dụ:
514
5151. Tục ngữ: 'Có công mài có ngày nên'
516Ý nghĩa: Những người có công sức sẽ đạt được thành công
517
5182. Thúy Kiều - Truyện Kiều, link: https://example.com/thuy-kieu`,sectionApi:"🔐 Cấu hình API Gemini",apiConfigured:"API key đã được cấu hình",apiNotConfigured:"Chưa cấu hình API key",btnChangeApi:"Thay đổi API",btnConfigApi:"Cấu hình API",btnPreview:"👁️ Xem trước",btnCancel:"Hủy",btnSaving:"⏳ Đang lưu...",btnUpdate:"💾 Cập nhật",btnCreate:"➕ Tạo Robot",errorEmptyName:"Vui lòng nhập tên robot",errorEmptyContent:"Vui lòng nhập nội dung để training robot",errorNoApi:"Vui lòng cấu hình API Gemini",errorLimit:"Lỗi kiểm tra giới hạn",successCreate:"Robot đã được tạo thành công",successU
518pdate:"Robot đã được cập nhật thành công",errorSave:"Lỗi khi lưu robot",avatarNames:{robot:"Robot","teacher-female":"Cô giáo","teacher-male":"Thầy giáo","student-male":"Học sinh nam","student-female":"Học sinh nữ"},styles:{"gần gũi":"😊 Gần gũi","chuyên nghiệp":"💼 Chuyên nghiệp","nghiêm túc":"🎓 Nghiêm túc","hài hước":"😄 Hài hước"},speechOptions:{cô:"Cô",thầy:"Thầy",tôi:"Tôi"},studentTerms:{em:"Em",con:"Con",bạn:"Bạn"}},chat$1={fullscreenError:"Không thể bật chế độ toàn màn hình",exitFullscreenError:"Không thể thoát chế độ toàn màn hình",responseError:"Lỗi khi nhận phản hồi từ robot",noSpeechSupport:"Trình duyệt không hỗ trợ nhập giọng nói",voiceInputError:"Không nhận được giọng nói, vui lòng thử lại",btnFullscreen:"Toàn màn hình",btnExitFullscreen:"Thoát toàn màn hình",btnBack:"Quay lại",btnClose:"Đóng",welcome:"Xin chào, {{term}}!",intro:"Tôi là {{speech}} {{name}}.",startTopic:'Hãy bắt đầu cuộc hội thoại về "{{topic}}"',listening:"🎙 Đang nghe giọng nói...",inputPlaceholder:"Nhập câu hỏi hoặc nhận xét...",tooltipVoice:"Nhập bằng giọng nói",tooltipRecording:"Đang nghe... (nhấn để dừng)",recordingStatus:"🔴 Đang nghe...",friendlyMessages:{API_KEY_MISSING:"🔑 Bạn chưa nhập API key. Hãy vào Đổi API key để thêm key từ Google AI Studio nhé!",API_KEY_INVALID:"🔑 API key không đúng rồi! Có thể bạn nhập sai hoặc key đã bị thu hồi. Hãy kiểm tra lại trong Đổi API key nhé.",API_QUOTA_EXCEEDED:"⏳ API key của bạn đã dùng hết lượt miễn phí trong hôm nay. Bạn hãy thử lại vào ngày mai hoặc dùng key khác nhé!",API_OVERLOAD:"😅 Server AI đang bận quá, chưa trả lời được. Bạn hãy thử gửi lại sau vài giây nhé!",NETWORK_ERROR:"📡 Mất kết nối mạng rồi! Bạn kiểm tra lại wifi/mạng rồi thử lại nhé.",DEFAULT:"😕 Có lỗi xảy ra, mình chưa trả lời được. Bạn thử lại sau nhé!",API_ALL_MODELS_EXHAUSTED:"😴 Tất cả mô hình AI đã dùng hết lượt miễn phí hôm nay rồi. Bạn hãy quay lại vào ngày mai nhé!"}},api$1={title:"Cấu hình API Gemini",label:"API Key Gemini *",placeholder:"Nhập API key của bạn",errorEmpty:"API key không được để trống",getApiKey:"Lấy API key từ Google AI Studio",guideTitle:"Hướng dẫn sử dụng API Gemini",step1:"Truy cập Google AI Studio",step2:"Đăng nhập bằng Google account",step3:'Nhấn "Create API key"',step4:"Sao chép API key và dán vào trường trên",videoGuide:"Video hướng dẫn",freeApiKey:"Lấy API key miễn phí",btnCancel:"Hủy",btnSave:"Lưu"},preview$2={title:"👁️ Xem trước Robot: {{name}}",btnBack:"← Quay lại",labelTopic:"Chủ đề:",labelStyle:"Phong cách:",labelCalling:"Xưng gọi:",labelContent:"Nội dung:",placeholderChat:"Thử chat với robot...",welcomeHint:'Hãy thử hỏi tôi về "{{topic}}" để xem robot hoạt động nhé.'},viCompanion={page:page$m,list:list$7,form:form$w,chat:chat$1,api:api$1,preview:preview$2},page$l={title:"✋ Quiz Chém Hoa Quả",upgradeLabel:"Nâng Cấp Lẻ",helpLabel:"Hướng dẫn sử dụng",helpTitle:"Hướng Dẫn Quiz Chém Hoa Quả",helpDescription:"Tìm hiểu cách tạo bài Quiz Chém Hoa Quả để học sinh chơi và học tập",sidebar:{myLessons:"Bài học của tôi",createNew:"Tạo bài mới"}},list$6={title:"📚 Bài Học Của Tôi",subtitle:"Quản lý các bài Quiz Chém Hoa Quả của bạn",expired:"⚠️ Gói đã hết hạn!",renew:"Gia hạn",empty:"Bạn chưa có bài học nào",createFirst:"➕ Tạo bài đầu tiên",demo:{title:"Chém Hoa Quả - Bản Chạy Thử",badge:"Bản chạy thử",hint:"Chơi thử để trải nghiệm tính năng trước khi tạo bài của bạn"},lockedHint:"🔒 Gia hạn để mở bài này",stats:"{{count}} câu hỏi",updated:"Cập nhật: {{date}}",btnPlay:"Chơi",btnEdit:"Sửa",btnAssign:"Giao",btnDelete:"Xóa",tooltipPlay:"Chơi ngay",tooltipEdit:"Chỉnh sửa bài",tooltipAssign:"Giao bài cho học sinh",tooltipDelete:"Xóa bài",deleteConfirmTitle:"🗑️ Xác Nhận Xóa",deleteConfirmText:"Bạn có chắc chắn muốn xóa bài học này? Hành động này không thể hoàn tác.",deleteSuccess:"Xóa bài học thành công",deleteError:"Không thể xóa bài học",loadError:"Không thể tải danh sách bài học",speeds:{fast:"Nhanh",medium:"Trung bình",slow:"Chậm"},freeLessons:"Bạn còn {{remaining}}/{{limit}} bài học miễn phí",quotaExceeded:"Bạn đã hết lượt tạo miễn phí. Vui lòng nâng cấp tài khoản.",assignSuccess:"Đã tạo bài tập với mã: {{code}}",btnCancel:"Hủy"},form$v={titleCreate:"➕ Tạo bài học mới",titleEdit:"✏️ Chỉnh sửa bài học",lessonName:"Tên bài học",speedTitle:"
518🍎 Tốc độ tung hoa quả/nổi bong bóng",speedFast:"🚀 Nhanh",speedMedium:"⚡ Trung bình",speedSlow:"🐢 Chậm",useBackground:"🖼️ Sử dụng hình nền (ẩn camera)",noCamera:"📷 Dùng camera (chém bằng tay trước camera)",questionsTitle:"Câu hỏi ({{current}}/{{max}})",questionNum:"Câu {{num}}",questionPlaceholder:"Nhập câu hỏi...",answerColors:{green:"Xanh lá",red:"Đỏ",yellow:"Vàng",purple:"Tím"},answerLabel:"Đáp án (tick chọn đáp án đúng):",btnAddQuestion:"Thêm câu hỏi",btnSelectFromBank:"🗃️ Chọn từ Kho",btnCancel:"Hủy",btnSave:"Lưu bài học",saving:"Đang lưu...",errorTitleRequired:"Vui lòng nhập tên bài học",errorMinQuestions:"Phải có ít nhất 1 câu hỏi",errorQuestionEmpty:"Câu hỏi {{num}} không được để trống",errorCorrectRequired:"Câu hỏi {{num}} phải có đáp án đúng",errorAnswerEmpty:"Câu hỏi {{num}} có đáp án bị trống",errorMaxQuestions:"Chỉ được tối đa {{max}} câu hỏi",loadError:"Không thể tải bài học",bankPickerTitle:"Chọn câu hỏi cho Hand Slash Quiz",bankValidation:"{{count}} câu hỏi không phù hợp với Hand Slash Quiz (yêu cầu đúng 4 đáp án):",bankAddSuccess:"✅ Đã thêm {{count}} câu hỏi từ Kho câu hỏi",bankLimitError:"Không thể thêm {{count}} câu. Tối đa {{max}} câu, hiện có {{current}} câu.",addFromLesson:"📂 Từ bài có sẵn",selectFromBankOrAI:"🗃️ Chọn từ Kho hoặc AI",manualEntry:"✏️ Nhập thủ công",bankAddMixedSuccess:"Đã thêm {{count}} câu. Bỏ qua {{skipped}} câu không tương thích.",errorNoQuestionsCompatible:"Không có câu nào phù hợp với Hand Slash (cần ít nhất 2 đáp án)."},game$5={score:"Điểm",time:"Thời gian",gameOver:"KẾT THÚC!",finalScore:"Điểm của bạn",btnAgain:"Chơi lại",btnExit:"Thoát",totalQuestions:"Tổng cộng {{count}} câu",wrongHint:"Chém sai rồi!",correctHint:"CHÍNH XÁC!",correctFeedback:"TUYỆT VỜI!!",loading:"Đang tải camera...",noCameraMode:"Chế độ không camera",paused:"Đang tạm dừng",btnResume:"Tiếp tục",completed:"Hoàn thành!",questionNum:"Câu {{num}}",seconds:"giây",minimize:"Thu nhỏ",fullscreen:"Toàn màn hình",answeredCount:"Bạn đã trả lời {{count}} câu hỏi",lessonBy:"Bài học của {{name}}",linkExpired:"Link chia sẻ có thể đã bị xóa hoặc không còn tồn tại",loadingHandTracking:"Đang khởi động nhận diện bàn tay...",errorWebGL:"Trình duyệt không hỗ trợ WebGL. Vui lòng thử tắt bớt tab hoặc dùng trình duyệt Chrome.",errorGeneric:"Không thể khởi tạo nhận diện bàn tay. Vui lòng thử lại.",errorHint:'Bạn có thể chuyển sang chế độ "Không dùng camera" (chém bằng chuột/cảm ứng) để tiếp tục chơi.',copyPreparing:"Đang chuẩn bị...",copiedSuccess:"✓ Đã copy!",copyAnalysis:"Copy sang công cụ phân tích"},instructions$5={title:"Hướng dẫn chơi",step1Title:"1. Cho phép truy cập camera",step1Desc:'Khi trình duyệt hỏi, hãy bấm "Cho phép" để game nhận diện bàn tay.',step2Title:"2. Giơ tay lên trước màn hình",step2Desc:"Dùng ngón trỏ chém nhanh qua đáp án đúng (chế độ Hoa Quả), hoặc chụm ngón cái + ngón trỏ vào bong bóng đúng (chế độ Bong Bóng).",step3Title:"3. Trả lời nhanh để ghi điểm cao",step3Desc:"Mỗi câu có giới hạn thời gian. Trả lời đúng sớm = điểm cao hơn. Sai bị trừ điểm.",tip:"💡 Mẹo: Đứng cách màn hình khoảng 50–80 cm, đảm bảo ánh sáng đủ để camera nhận diện tốt.",btnFullscreen:"Toàn màn hình",btnReady:"Bắt đầu!"},demo$d={title:"Quiz Chém Hoa Quả Demo",subtitle:"Chơi ngay với {{count}} câu hỏi mẫu!",instructions:"Hướng dẫn chơi:",step1:"1️⃣ Cho phép truy cập camera khi được yêu cầu",step2:'2️⃣ Dùng ngón trỏ để "chém" các đáp án bay lên',step3:"3️⃣ Chọn đáp án đúng để được cộng điểm",step4:"4️⃣ Tránh chạm vào đáp án sai!",note:"⚠️ Lưu ý: Bạn cần có webcam/camera để chơi game này",btnStart:"🎮 Bắt đầu chơi ngay",version:"Phiên bản Demo - {{count}} câu hỏi mẫu"},viHandSlash={page:page$l,list:list$6,form:form$v,game:game$5,instructions:instructions$5,demo:demo$d},pageTitle$a="🧩 Lật Mảnh Ghép",myPuzzles$1="Ảnh đố của tôi",createNew$c="Tạo ảnh đố mới",helpTitle$1="Hướng Dẫn Lật Mảnh Ghép",helpDesc$1="Tìm hiểu cách tạo trò chơi Lật Mảnh Ghép để học sinh chơi và học tập",loadingPuzzles$1="⏳ Đang tải danh sách ảnh đố...",errorLoading$9="❌ Lỗi khi tải danh sách ảnh đố",confirmDelete$4="Bạn có chắc muốn xóa ảnh đố này?",deleteSuccess$7="✅ Đã xóa ảnh đố",deleteError$4="❌ Lỗi khi xóa ảnh đố",emptyPuzzles$1="📭 Chưa có ảnh đố nào",createFirst$4="➕ Tạo Ảnh đố đầu tiên",demo$c={title:"Lật Mảnh Ghép - Bản Chạy Thử",badge:"Bản chạy thử",hint:"Chơi thử để trải nghiệm tính năng trước khi tạo bài của bạn"},cellsCount$1="{{count}} ô",play$6="Chơi thử",edit$4="Chỉnh sửa",assign$9="Giao bài",upgradeToUnlock$4="🔒 Gia hạn để mở bài này",packageExpired$7="⚠️ Gói đã hết hạn!",extendSubscription$7="Gia hạn 30k/năm",editFormTitle$4="Chỉnh sửa Ảnh đố",createFormTitle$4="Tạo Ảnh đố mới",usageCount$4="📌 Đã dùng <strong>{{current}}/{{limit}}</strong> lượt tạo Ảnh đố",unlimitedAccess$1="✅ Bạn đang dùng chế độ {{mode}} - Không giới hạn",puzzleTitleLabel$1="Tiêu đề Ảnh đố:",titlePlaceholder$7="Nhập tiêu đề...",answerNameLabel$1="Tên ảnh (Đáp án học sinh cần đoán):",answerPlaceholder$1="VD: Tháp Eiffel, Mặt trời...",imageSourceTitle$1="📸 Nguồn ảnh",uploadImageRadio$1="Tải ảnh lên",useUrlRadio$1="Dùng link ảnh",compressingAndUploading$1="⏳ Đang nén và tải ảnh lên...",urlPlaceholder$1="Nhập URL ảnh (VD: https://example.com/image.jpg)",useButton$1="Sử dụng",uploadSuccess$1="✅ Ảnh đã được tải lên",pieceColorLabel$1="🎨 Màu mảnh ghép",colorBlue$1="Xanh dương",colorGreen$1="Xanh lá",colorPurple$1="Tím",colorGradient$1="Gradient",colorRandom$1="Ngẫu nhiên",gridConfigTitle$1="🔢 Cấu hình lưới",gridSizeLabel$1="Kích thước lưới:",gridSizeOption$1="{{rows}}x{{cols}} ({{count}} ô)",cellSizeModeLabel$1="Chế độ kích thước ô:",equalSizeMode$1="Bằng nhau",randomSizeMode$1="Ngẫu nhiên (như ảnh đố thật)",timeLimitLabel$1="Giới hạn thời gian mỗi câu (giây, 0 = không giới hạn):",questionsCountTitle$1="❓ Câu hỏi ({{count}}/{{total}})",clearAllButton$1="🗑️ Xóa tất cả",pickFromBankButton$1="🗃️ Chọn từ Kho hoặc AI",pickFromLessonButton$1="Từ bài có sẵn",lessonPickerTitle$4="Chọn bài để lấy câu hỏi",manualInputButton$1="✏️ Nhập thủ công",enoughQuestions$1="✅ Đã đủ {{total}} câu hỏi",questionsListHeader$1="Danh sách câu hỏi ({{count}}/{{total}})",answersCount$4="{{count}} đáp án",editQuestionTitle$1="Sửa câu hỏi này",deleteQuestionTitle$1="Xóa câu hỏi này",noQuestions$1="📝 Chưa có câu hỏi nào",noQuestionsHint$1="Chọn từ Kho hoặc AI, hoặc Nhập thủ công để bắt đầu",saving$7="💾 Đang lưu...",savePuzzle$1="💾 Lưu Ảnh đố",cancelPuzzle$1="Hủy",toastUploadSuccess$1="✅ Tải ảnh lên thành công!",toastUploadError$1="❌ Lỗi khi tải ảnh lên: ",toastUrlWarning$1="⚠️ Vui lòng nhập URL ảnh",toastUrlSuccess$1="✅ Đã sử dụng link ảnh!",toastUrlError$1="❌ URL không hợp lệ",toastRemainingWarning$1="⚠️ Chỉ còn {{remaining}} ô trống. Bạn đang chọn {{selected}} câu hỏi.",toastQuestionsAdded$1="✅ Đã thêm {{count}} câu hỏi ({{current}}/{{total}})",toastQuestionsTrimmed$1="⚠️ Lưới mới chỉ còn {{total}} ô — đã bỏ {{dropped}} câu cuối.",toastQuestionsRoomLeft$1="ℹ️ Lưới mới có {{total}} ô — cần thêm {{remaining}} câu nữa.",toastQuestionUpdated$1="✅ Đã cập nhật câu hỏi",toastQuestionDeleted$1="🗑️ Đã xóa câu hỏi {{index}}",confirmClearAll$1="Xóa tất cả câu hỏi?",toastClearAll$1="🗑️ Đã xóa tất cả câu hỏi",errorTitleRequired$4="❌ Vui lòng nhập tiêu đề ảnh đố",errorImageRequired$1="❌ Vui lòng tải ảnh lên",errorAnswerRequired$1="❌ Vui lòng nhập tên ảnh (đáp án)",errorQuestionsCount$1="❌ Vui lòng chọn {{total}} câu hỏi",toastUpdateSuccess$4="✅ Đã cập nhật ảnh đố!",toastCreateSuccess$4="✅ Đã tạo ảnh đố mới!",toastLimitReached$4="⚠️ Bạn đã dùng hết 8 lượt Ảnh đố miễn phí. Vui lòng nâng cấp để tiếp tục.",toastSaveError$4="❌ Lỗi khi lưu ảnh đố: ",player$h={back:"← Quay lại",revealAnswer:"🔍 Giải mã tên ảnh",exitFullscreen:"🗗 Thu nhỏ",fullscreen:"🖵 Toàn màn hình",progressText:"{{revealed}}/{{total}} ô ({{percentage}}%)",questionHeader:"❓ Câu hỏi - Ô số {{number}}",questionImageAlt:"Hình câu hỏi",answerImageAlt:"Đáp án {{letter}}",cancel:"❌ Hủy",submitAnswer:"✅ Trả lời",confirmRevealTitle:"🔍 Mở ảnh",confirmRevealText:"Bạn có chắc chắn muốn mở ảnh ra không?",no:"❌ Không",yes:"✅ Có, mở ảnh",victoryTitle:"🎉 Tên ảnh:",toastCorrect:"✅ Chính xác! Ô đã được mở",toastIncorrect:"❌ Sai rồi! Hãy thử lại"}
518,decode$1={title:"🔍 Giải mã tên ảnh",readyToGuess:"Bạn đã sẵn sàng đoán tên bức ảnh?",guessPlaceholder:"Nhập tên ảnh...",confirm:"✅ Xác nhận"},share$8={loading:"⏳ Đang tải ảnh đố...",error:"❌ Lỗi",notFound:"Không tìm thấy ảnh đố",backHome:"← Về trang chủ",footerText:"🧩 Tạo ảnh đố của riêng bạn tại",brand:"Giáo Viên Đổi Mới"},victory$1={congrats:"🎉 Chúc mừng!",completedMsg:"Bạn đã hoàn thành!",imageNameLabel:"Tên ảnh:",finishButton:"✨ Hoàn thành"},canvas$1={loadingImage:"⏳ Đang tải ảnh...",puzzleImageAlt:"Ảnh đố"},viFlipPuzzle={pageTitle:pageTitle$a,myPuzzles:myPuzzles$1,createNew:createNew$c,helpTitle:helpTitle$1,helpDesc:helpDesc$1,loadingPuzzles:loadingPuzzles$1,errorLoading:errorLoading$9,confirmDelete:confirmDelete$4,deleteSuccess:deleteSuccess$7,deleteError:deleteError$4,emptyPuzzles:emptyPuzzles$1,createFirst:createFirst$4,demo:demo$c,public:"Công khai",private:"Riêng tư",cellsCount:cellsCount$1,play:play$6,edit:edit$4,assign:assign$9,delete:"Xóa",upgradeToUnlock:upgradeToUnlock$4,packageExpired:packageExpired$7,extendSubscription:extendSubscription$7,editFormTitle:editFormTitle$4,createFormTitle:createFormTitle$4,usageCount:usageCount$4,unlimitedAccess:unlimitedAccess$1,puzzleTitleLabel:puzzleTitleLabel$1,titlePlaceholder:titlePlaceholder$7,answerNameLabel:answerNameLabel$1,answerPlaceholder:answerPlaceholder$1,imageSourceTitle:imageSourceTitle$1,uploadImageRadio:uploadImageRadio$1,useUrlRadio:useUrlRadio$1,compressingAndUploading:compressingAndUploading$1,urlPlaceholder:urlPlaceholder$1,useButton:useButton$1,uploadSuccess:uploadSuccess$1,pieceColorLabel:pieceColorLabel$1,colorBlue:colorBlue$1,colorGreen:colorGreen$1,colorPurple:colorPurple$1,colorGradient:colorGradient$1,colorRandom:colorRandom$1,gridConfigTitle:gridConfigTitle$1,gridSizeLabel:gridSizeLabel$1,gridSizeOption:gridSizeOption$1,cellSizeModeLabel:cellSizeModeLabel$1,equalSizeMode:equalSizeMode$1,randomSizeMode:randomSizeMode$1,timeLimitLabel:timeLimitLabel$1,questionsCountTitle:questionsCountTitle$1,clearAllButton:clearAllButton$1,pickFromBankButton:pickFromBankButton$1,pickFromLessonButton:pickFromLessonButton$1,lessonPickerTitle:lessonPickerTitle$4,manualInputButton:manualInputButton$1,enoughQuestions:enoughQuestions$1,questionsListHeader:questionsListHeader$1,answersCount:answersCount$4,editQuestionTitle:editQuestionTitle$1,deleteQuestionTitle:deleteQuestionTitle$1,noQuestions:noQuestions$1,noQuestionsHint:noQuestionsHint$1,saving:saving$7,savePuzzle:savePuzzle$1,cancelPuzzle:cancelPuzzle$1,toastUploadSuccess:toastUploadSuccess$1,toastUploadError:toastUploadError$1,toastUrlWarning:toastUrlWarning$1,toastUrlSuccess:toastUrlSuccess$1,toastUrlError:toastUrlError$1,toastRemainingWarning:toastRemainingWarning$1,toastQuestionsAdded:toastQuestionsAdded$1,toastQuestionsTrimmed:toastQuestionsTrimmed$1,toastQuestionsRoomLeft:toastQuestionsRoomLeft$1,toastQuestionUpdated:toastQuestionUpdated$1,toastQuestionDeleted:toastQuestionDeleted$1,confirmClearAll:confirmClearAll$1,toastClearAll:toastClearAll$1,errorTitleRequired:errorTitleRequired$4,errorImageRequired:errorImageRequired$1,errorAnswerRequired:errorAnswerRequired$1,errorQuestionsCount:errorQuestionsCount$1,toastUpdateSuccess:toastUpdateSuccess$4,toastCreateSuccess:toastCreateSuccess$4,toastLimitReached:toastLimitReached$4,toastSaveError:toastSaveError$4,player:player$h,decode:decode$1,share:share$8,victory:victory$1,canvas:canvas$1},featureTitle$5="⏱️ Trắc nghiệm theo nhịp độ",myQuizzes$5="Quiz của tôi",createNew$b="Tạo bài mới",help$1={title:"Hướng Dẫn Trắc Nghiệm Theo Nhịp Độ",description:"Tìm hiểu cách tạo bài trắc nghiệm, tổ chức thi đấu đội nhóm và chế độ trình chiếu."},loadingList$1="Đang tải danh sách quiz...",errorLoading$8="Không thể tải danh sách quiz",errorStartSession$1="Không thể bắt đầu phiên. Vui lòng thử lại.",errorDelete$1="Không thể xóa quiz",errorDuplicate$1="Không thể sao chép quiz",emptyState$1={title:"Chưa có quiz nào",description:'Nhấn "Tạo bài mới" để bắt đầu tạo bài trắc nghiệm theo nhịp độ'},demo$b={title:"Trắc Nghiệm Theo Nhịp Độ - Bản Chạy Thử",badge:"Bản chạy thử",hint:"Xem trước cách GV và HS tương tác cùng lúc — thử trước khi tạo bài",previewTitle:"Xem trước tính năng Nhịp độ",teacherScreen:"Màn hình GV",studentScreen:"Màn hình HS",timeLeft:"Thời gian còn lại",revealAnswers:"Hiện đáp án",nextQuestion:"Câu tiếp theo →",finish:"Kết thúc",studentInstruction:"Học sinh bấm chọn đáp án trên thiết bị của mình:",studentsAnswered:"{{count}}/{{total}} học sinh đã trả lời",modeHint:"Chế độ Nhịp độ: GV g
518iữ nhịp, học sinh tự chọn đáp án trên điện thoại — không cần in giấy! Ngoài ra còn có Chế độ trình chiếu, sử dụng để chiếu câu hỏi lên màn hình lớn cho cả lớp cùng xem; và Chế độ tự do, khi đó HS sẽ tự làm bài theo tốc độ riêng và biết ngay kết quả sau mỗi câu.",finishedTitle:"Xem trước hoàn tất!",finishedDesc:"Bạn đã thấy cách tính năng hoạt động. Tạo bài của bạn để bắt đầu dạy thật!",restart:"Xem lại",createOwn:"Tạo bài của tôi →"},card$4={questionsCount:"{{count}} câu",unknownDate:"Không rõ ngày",action:{start:"Bắt đầu",edit:"Sửa",delete:"Xóa"},upgradeToUnlock:"🔒 Gia hạn để mở bài này"},modeDialog$1={title:"Chọn chế độ bắt đầu Quiz",presentation:{label:"Trình chiếu",desc:"GV chiếu màn hình, HS bấm chọn trực tiếp",longDesc:"Chế độ Trình chiếu: Không cần chia sẻ mã. GV trình chiếu câu hỏi lên màn hình lớn, học sinh giơ tay hoặc bấm chọn trực tiếp."},individual:{label:"Nhịp độ",desc:"HS quét mã, chọn nhân vật hoặc nhập tên",longDesc:"Chế độ Nhịp độ: Học sinh quét mã QR, chọn nhân vật (emoji) hoặc nhập tên để tham gia. Các em trả lời câu hỏi nhưng KHÔNG THỂ tự chuyển câu — chỉ GV mới chuyển, đảm bảo nhịp độ đều đặn trong lớp.",joinModeLabel:"Cách học sinh tham gia:",joinModeEmoji:"Chọn nhân vật (emoji)",joinModeName:"Nhập tên"},free:{label:"Tự do",desc:"HS tự làm, tự biết đúng/sai ngay",longDesc:"Chế độ Tự do: Học sinh quét mã, tự làm bài theo tốc độ riêng. Biết ngay kết quả sau mỗi câu, không cần đợi GV. Hết giờ hoặc GV dừng thì xem bảng xếp hạng.",duration:"Thời gian chơi (phút)",durationPlaceholder:"Để trống hoặc 0 = không giới hạn",durationHelper:"Để trống hoặc nhập 0 để không giới hạn thời gian"},cancel:"Hủy",start:"Bắt đầu",shuffleLabel:"Xáo trộn thứ tự câu hỏi",shuffleHelper:"Mỗi lần mở phiên, thứ tự câu hỏi được đảo ngẫu nhiên — hạn chế HS học vẹt theo thứ tự hoặc nhắc bài nhau."},deleteDialog$2={title:"Xác nhận xóa",confirm:'Bạn có chắc muốn xóa quiz "{{title}}"?',deleting:"Đang xóa...",delete:"Xóa",cancel:"Hủy"},form$u={editTitle:"Chỉnh sửa Quiz",createTitle:"Tạo Quiz Mới",basicInfo:"📝 Thông tin cơ bản",titleLabel:"Tiêu đề Quiz:",titlePlaceholder:"Nhập tiêu đề bài quiz...",timeLimitLabel:"Giới hạn thời gian mỗi câu (giây, 0 = không giới hạn):",questionsTitle:"❓ Câu hỏi ({{count}})",clearAll:"🗑️ Xóa tất cả",pickFromBank:"🗃️ Chọn từ Kho hoặc AI",manualInput:"✏️ Nhập thủ công",listHeader:"Danh sách câu hỏi ({{count}})",answersGrid:"{{count}} đáp án • Đúng: {{correct}}",editQuestion:"Sửa câu hỏi này",deleteQuestion:"Xóa câu hỏi này",emptyQuestions:"📝 Chưa có câu hỏi nào",emptyQuestionsHint:"Chọn từ Kho hoặc AI, hoặc Nhập thủ công để bắt đầu",cancel:"Hủy",saving:"💾 Đang lưu...",save:"💾 Lưu Quiz",errorTitle:"Vui lòng nhập tiêu đề bài quiz",errorMinQuestions:"Phải có ít nhất 1 câu hỏi",errorQuestionContent:"Câu {{index}}: Vui lòng nhập nội dung câu hỏi hoặc thêm hình ảnh",errorMinOptions:"Câu {{index}}: Phải có ít nhất {{count}} phương án",errorOptionContent:"Câu {{index}}: Vui lòng nhập nội dung phương án {{key}} hoặc thêm hình ảnh",errorCorrectAnswer:"Câu {{index}}: Vui lòng chọn đáp án đúng",errorSave:"Có lỗi xảy ra khi lưu quiz. Vui lòng thử lại.",pickingTitle:"Chọn câu hỏi cho Paced Quiz",listeningTitle:"Tệp nghe chung (đề bài)",listeningHint:"Tải lên 1 tệp âm thanh dùng cho cả bài — học sinh nghe rồi chọn đáp án ở mọi câu. Bỏ trống nếu bài không có phần nghe.",allowReplayLabel:"Cho phép học sinh nghe lại nhiều lần",allowReplayOn:"Học sinh bấm phát/dừng thoải mái trong suốt bài làm.",allowReplayOff:"⚠️ Học sinh chỉ được phát ĐÚNG 1 LẦN. Phát xong (hoặc bấm dừng giữa chừng) là 
518khoá luôn, không nghe lại được — giống thi thật.",listeningProNote:"Tải lên / ghi âm tệp nghe là tính năng cá»§a gói FullGame. Các phần khác cá»§a bài vẫn soạn bình thường.",listeningProBtn:"Nâng cấp"},control$1={loading:"Đang tải...",sessionNotFound:"Phiên không tồn tại",revealAnswer:"Chốt đáp án",nextQuestion:"Câu tiếp theo",reports:"📊 BÁO CÁO",stop:"Dừng",stopAndResults:"Dừng & Xem kết quả",confirmEnd:"Kết thúc phiên?",confirmEndDesc:"Bạn có chắc muốn kết thúc phiên quiz này? Sẽ hiển thị bảng xếp hạng và xóa dữ liệu phiên.",cancel:"Há»§y",finish:"Kết thúc",code:"Mã:",copy:"Copy",copied:"Đã copy!",ready:"Sẵn sàng bắt đầu?",start:"BẮT ĐẦU",presentationMode:"Chế độ trình chiếu - Học sinh không cần quét mã",freeModeDesc:"Chế độ tá»± do - Học sinh quét mã và tá»± làm bài",freeModeTime:" ({{count}} phút)",unlimitedTimeDesc:" (không giới hạn thời gian)",noParticipants:"Chưa có học sinh tham gia",participantsJoined:"Đã tham gia: {{count}} học sinh",teamsJoined:"Đã tham gia:",startedAt:"THỜI GIAN CÒN LẠI",unlimitedTime:"🎯 Không giới hạn thời gian",studentsPlaying:"👥 {{count}} học sinh đang làm bài",questionCount:"Câu {{current}} / {{total}}",alreadyAnswered:"{{count}} đã trả lời",correctCount:"{{count}} đúng",incorrectCount:"{{count}} sai",errorReveal:"Không thể chốt đáp án",errorNext:"Không thể chuyển câu tiếp theo",errorEnd:"Không thể kết thúc phiên",playListening:"🎧 Phát bài nghe",pauseListening:"Tạm dừng",resumeListening:"Nghe tiếp",stopListening:"Dừng bài nghe"},leaderboard$3={title:"Bảng Xếp Hạng",points:"điểm",rank:"Hạng",student:"Học sinh",team:"Đội",backHome:"Về trang chá»§"},student$2={waiting:"Chờ giáo viên bắt đầu...",starting:"⚡ Sắp bắt đầu!",defaultName:"Học sinh",errorSubmit:"Không thể nộp câu trả lời",next:"Câu tiếp theo →",waitingReveal:"Chờ giáo viên chốt đáp án...",slides:[{caption:"Hãy tập trung và tá»± tin! 💪"},{caption:"Kiến thức là sức mạnh cá»§a bạn! 📚"},{caption:"Nỗ lá»±c hôm nay, thành công ngày mai! 🌟"},{caption:"Bạn có thể làm được! Cố lên nào! 🚀"},{caption:"Học vui – vui học! Sẵn sàng chưa? 🎯"}],leaderboard:"Bảng Xếp Hạng",finishHeader:"🎉 Hoàn thành!",scoreResult:"{{score}}/100 điểm",rankResult:"Hạng {{rank}} / {{total}} {{medal}}",officialRank:"🏆 Xếp hạng chính thức",you:" (Bạn)",backToHome:"Về trang chá»§",waitingTeacher:"Chờ giáo viên bắt đầu...",waitingNext:"Chờ câu tiếp theo...",chooseAnswer:"👆 Chọn đáp án cá»§a bạn",timeUp:"⏰ Hết giờ! Không thể chọn đáp án",freeFinished:"Bạn đã hoàn thành bài tập, hãy đợi xíu nhé... 🎉",correct:"✅ Chính xác!",incorrect:"❌ Chưa đúng rồi!",point:"điểm",selectTeam:{title:"Chọn đội hoặc nhập tên cá»
518§a bạn",titleOnly:"Nhập tên cá»§a bạn để tham gia",titlePickEmoji:"Chọn emoji cá»§a bạn để tham gia",header:"Chọn đội",chosen:"Đã chọn",inputName:"Nhập tên cá»§a bạn",orInputName:"Hoặc nhập tên cá»§a bạn",namePlaceholder:"VD: Nguyễn Văn A",enterPlay:"Vào chÆ¡i",errorNameRequired:"Vui lòng nhập tên",errorNameShort:"Tên phải có ít nhất 2 ký tá»±",errorPresentation:"Quiz này đang ở chế độ trình chiếu, không hỗ trợ tham gia online.",errorClaimEmoji:"Emoji này đã được chọn, hãy chọn emoji khác",errorJoin:"Không thể tham gia phiên",errorGeneric:"Đã có lỗi xảy ra"},listeningPlay:"🎧 Nghe bài",listeningPlayOnce:"🎧 Nghe bài (1 lần duy nhất)",listeningPause:"Tạm dừng",listeningResume:"Nghe tiếp",listeningStop:"Dừng bài nghe",listeningUsedUp:"Đã hết lượt nghe"},viPacedQuiz={featureTitle:featureTitle$5,myQuizzes:myQuizzes$5,createNew:createNew$b,help:help$1,loadingList:loadingList$1,errorLoading:errorLoading$8,errorStartSession:errorStartSession$1,errorDelete:errorDelete$1,errorDuplicate:errorDuplicate$1,emptyState:emptyState$1,demo:demo$b,card:card$4,modeDialog:modeDialog$1,deleteDialog:deleteDialog$2,form:form$u,control:control$1,leaderboard:leaderboard$3,student:student$2},featureTitle$4="🔤 Ô chữ",myCrosswords$1={title:"Ô chữ cá»§a tôi ({{count}})",loadError:"Lỗi khi tải danh sách ô chữ",deleteSuccess:"Đã xóa ô chữ",deleteError:"Lỗi khi xóa ô chữ",shareError:"Lỗi khi chia sẻ",unshareSuccess:"Đã há»§y chia sẻ",unshareError:"Lỗi khi há»§y chia sẻ",duplicateSuccess:"Đã tạo bản sao",duplicateLimit:"Bạn đã hết lượt tạo ô chữ miễn phí!",duplicateError:"Lỗi khi sao chép",copySuccess:"Đã sao chép link!",emptyState:"Bạn chưa có ô chữ nào",createNew:"Tạo mới",createFirst:"Tạo ô chữ đầu tiên",lockedTip:"Gia hạn để mở ô chữ này",demo:{title:"GIAOVIEN - Ô Chữ Bản Thá»­",badge:"Bản chạy thá»­",hint:"ChÆ¡i thá»­ ô chữ với từ khóa ẩn GIAOVIEN gồm 8 hàng ngang"},questionsCount:"{{count}} câu",action:{play:"ChÆ¡i",edit:"Sá»­a",assign:"Giao bài",delete:"Xóa"},deleteDialog:{title:"Xác nhận xóa",confirm:'Bạn có chắc muốn xóa ô chữ "{{title}}"?',cancel:"Há»§y",delete:"Xóa"},assignSuccess:"Đã giao bài tập thành công!",pin:{expiredReminder:"⚠️ Gói đã hết hạn!",renew:"Gia hạn"},downloadOffline:"Tải xuống",downloadOfflineUpgrade:"Nâng cấp để tải xuống",downloading:"Đang tải...",downloadOfflineError:"❌ Không tạo được file tải xuống, vui lòng thá»­ lại"},form$t={saveRowQuestionSuccess:"Đã lưu câu hỏi cho hàng {{index}}",allRowsHaveQuestions:"Tất cả các hàng đã có câu hỏi!",importSuccess:"Đã nhập {{count}} câu hỏi!",error:{noTitle:"Vui lòng nhập tiêu đề",noCells:"Vui lòng nhập nội dung ô chữ",noKeywordColumn:"Vui lòng chọn cột từ khóa (click vào số cột)",rowMissingQuestion:"Hàng {{rows}} chưa có câu hỏi",save:"Lỗi khi lưu: "},updateSuccess:"Đã cập nhật ô chữ!",createSuccess:"Đã tạo ô chữ mới!",limitReached:"Bạn đã hết lượt tạo ô chữ miễn phí!",subscription:{usage:"Bạn đã sá»­ dụng {{current}}/{{limit}} ô chữ",remaining:" (Còn {{count}} lượt)"},titleLabel:"Tiêu đề ô chữ",titlePlaceholder:"Ví dụ: Các thành phố Việt Nam",stats:{size:"Kích thước: {{rows}} x {{cols}}",dataRows:"Hàng có dữ liệu: {{count}}",questions:"Câu hỏi: {{count}}/{{total}}",keyword:"Từ khóa: {{keyword}}",emptyKeyword:"(trống)"},btn:{importQuestionBank:"Lấy từ Kho câu hỏi",importLesson:"📂 Từ bài có sẵn",testPlay:"ChÆ¡i thá»­",saving:"Đang lưu...",update:"Cập nhật",save:"Lưu ô chữ"},questionPicker:{title:"Chọn câu hỏi từ Kho câu hỏi"},lessonPickerTitle:"Chọn bài để lấy câu hỏi",rowEditor:{title:"Câu hỏi cho Hàng {{index}}",error:{noQuestion:"Vui lòng nhập câu hỏi",minAnswers:"Cần ít nhất 2 đáp án",noCorrect:"Cần chọn ít nhất 1 đáp án đúng"},label:{question:"Câu hỏi:",answers:"Đáp án (chọn đáp án đúng):"},placeholder:{question:"Nhập câu hỏi (dùng $...$ cho công thức toán)",answer:"Đáp án {{char}}"},btn:{addAnswer:"Thêm đáp án",cancel:"Há»§y",save:"Lưu câu hỏi"},tip:"💡 Tick vào checkbox để chọn đáp án đúng. Nhấn √ để chèn công thức toán học.",methodPicker:{title:"Thêm câu hỏi bằng cách nào?",fromBank:"Chọn từ Kho câu hỏi",fromBankDesc:"Dùng câu đã lưu hoặc import từ file/AI",manual:"Nhập thá»§ công",manualDesc:"Soạn câu hỏi mới ngay tại đây",currentQuestion:"Câu hỏi hiện tại:",noText:"(Không có nội dung)",delete:"Xóa câu hỏi",deleteDesc:"Gỡ câu hỏi khỏi hàng này, ô chữ vẫn giữ nguyên",deleteConfirm:"Xóa câu hỏi cá»§a hàng {{index}}?",deleteSuccess:"Đã xóa câu hỏi hàng {{index}}"}}},grid$1={controls:{row:"Hàng:",col:"Cột:",addFirst:"+ Đầu",addLast:"+ Cuối",removeFirst:"- Đầu",removeLast:"- Cuối"}
518,title:{addRowFirst:"Thêm hàng đầu",addRowLast:"Thêm hàng cuối",removeRowFirst:"Xóa hàng đầu",removeRowLast:"Xóa hàng cuối",addColFirst:"Thêm cột đầu",addColLast:"Thêm cột cuối",removeColFirst:"Xóa cột đầu",removeColLast:"Xóa cột cuối",toggleKeyword:"Click để chọn/bỏ chọn cột từ khóa",addQuestion:"Thêm câu hỏi",editQuestion:"Sửa câu hỏi"},legend:{keyword:"Cột từ khóa (click số cột để chọn)",hasQuestion:"Đã có câu hỏi"}},player$g={error:{missingQuestion:"Hàng này chưa có câu hỏi",incorrect:"Sai rồi! Hãy thử lại"},success:{correct:"Chính xác! Hàng {{row}} đã được mở"},btn:{back:"Quay lại",revealKeyword:"Mở từ khóa",stop:"Dừng",listen:"Nghe lại",stopTTS:"Dừng đọc",readTTS:"Đọc câu hỏi"},label:{keyword:"Từ khóa:"},modal:{question:{title:"Câu hỏi - Hàng {{row}}",cancel:"Hủy",answer:"Trả lời"},reveal:{title:"Mở từ khóa?",content:"Bạn có chắc muốn mở từ khóa ngay bây giờ không?",no:"Không",yes:"Có, mở từ khóa"}},victory:{title:"🎉 Chúc mừng!",keyword:"Từ khóa: {{keyword}}",stats:"Đúng: {{correct}} | Sai: {{incorrect}}"}},wordSearch$1={title:"🔍 Khóa bí mật",sidebar:{myGames:"Trò chơi của tôi",createCrossword:"Tạo ô chữ",createWordSearch:"Tạo khóa bí mật"},help:{title:"Hướng dẫn sử dụng trò chơi chữ",description:"Tìm hiểu cách tạo và sử dụng Ô Chữ và Khóa Bí Mật"},form:{titleLabel:"Tên trò chơi",titlePlaceholder:"Ví dụ: Chủ đề Gia đình",timeLimitLabel:"Giới hạn thời gian (phút)",noTimeLimit:"Không giới hạn",timeLimitValue:"{{count}} phút",addBoard:"Thêm bảng",keyword:"Từ khóa",keywordPlaceholder:"VD: MOTHER",hint:"Gợi ý",hintPlaceholder:"VD: Từ MẸ trong tiếng Anh là gì?",generateGrid:"Tạo lưới",regenerate:"Tạo lại",preview:"Xem trước",save:"Lưu trò chơi",update:"Cập nhật",testPlay:"Chơi thử",boardTitle:"Bảng {{index}}",hintFontIncrease:"Tăng cỡ chữ gợi ý",hintFontDecrease:"Giảm cỡ chữ gợi ý",boardCount:"{{count}} bảng",keywordDirection:"Từ khóa: {{keyword}} ({{direction}})",direction:{horizontal:"ngang",vertical:"dọc",diagonalRight:"chéo xuống phải",diagonalLeft:"chéo xuống trái"},error:{minBoard:"Cần ít nhất 1 bảng",noKeyword:"Vui lòng nhập từ khóa trước",generateSuccess:"Đã tạo lưới cho bảng {{index}}",saveSuccess:"Đã lưu trò chơi!",updateSuccess:"Đã cập nhật trò chơi!",duplicateLimit:"Bạn đã hết lượt tạo miễn phí!",saveError:"Lỗi khi lưu: "}},player:{hint:"💡 Gợi ý: {{hint}}",boardProgress:"Bảng {{current}}/{{total}}",found:"Đã tìm: {{count}}/{{total}}",timeUp:"⏰ Hết giờ!",foundWord:"🎉 Tìm được rồi!",timeLeft:"⏳ Còn lại: {{time}}",victory:"🎉 Hoàn thành!",back:"Quay lại",submitAssignment:"Gửi kết quả cho giáo viên",fullscreen:"Toàn màn hình",exitFullscreen:"Thoát toàn màn hình"}},viCrossword={featureTitle:featureTitle$4,myCrosswords:myCrosswords$1,form:form$t,grid:grid$1,player:player$g,wordSearch:wordSearch$1},featureTitle$3="🐉 Sleeping Dragon",sidebar$b={upgrade:"Nâng Cấp Lẻ",tracking:"Theo dõi tiếng ồn",tips:{title:"Mẹo:",calibration:"Sau khi bắt đầu, giữ yên lặng 10 giây để xác định âm thanh nền, như vậy sẽ chính xác hơn.",mercy:"Nút Khoan hồng xuất hiện ở góc dưới khi đang theo dõi."}},setup$1={title:"Cài đặt tiết học",subtitle:"Hãy cài đặt để chú Rồng quản lý lớp học của bạn",trialBanner:"Phiên bản dùng thử: thời gian tối đa <strong>{{max}} phút</strong>. Nâng cấp để dùng không giới hạn.",className:{label:"Tên lớp / Tiết học",placeholder:"Ví dụ: 10A1 — Tiết tự quản"},duration:{label:"Thời gian:",unit:"phút",maxTrial:"(tối đa {{max}}p)"},initialScore:{label:"Điểm ban đầu:",unit:"điểm"},threshold:{label:"Ngưỡng báo động:",unit:"Nền + {{offset}} dB",hint:"Giá trị nhỏ hơn = nhạy cảm hơn. Khuyến nghị: 20–30 dB. Có thể chỉnh từ 1 dB.",verySensitive:"Rất nhạy",lessSensitive:"Kém nhạy"},error:{mic:"Trình duyệt không thể truy cập microphone. Vui lòng cấp quyền và thử lại."},btn:{checking:"Đang kiểm tra mic...",start:"Bắt đầu đo nền ({{count}} giây)"}},calibration$1={title:"Rồng đang lắng nghe nền lớp...",instruction:"Hãy giữ trật tự bình thường trong {{count}} giây để hệ thống đo đường cơ sở âm thanh chính xác 
518nhất.",unit:"giây",complete:"Xong! Bắt đầu theo dõi...",skip:"Bỏ qua · dùng ngưỡng mặc định"},monitor$1={scoreLabel:"Điểm số / {{total}}",btn:{end:"Kết thúc sớm",fullscreen:"Toàn màn hình",exitFullscreen:"Thoát toàn màn hình",mercy:"🕊️ Khoan hồng",mercyActive:"🔵 Đang khoan hồng...",mercyTooltip:"Khoan hồng — tắt cảnh báo 10 giây",mercyActiveTooltip:"Đang hoạt động (10 giây)"}},dragon$1={state:{sleeping:"Rồng đang ngủ ngon...",warning:"Rồng đang khó chịu...",angry:"RỒNG THỨC GIẤC!"},mercyStatus:"KHOAN HỒNG (10s)"},summary$1={title:"Tổng kết tiết học",unit:{minutes:"phút",seconds:"giây"},grade:{excellent:"Xuất sắc!",good:"Tốt",average:"Trung bình",needsImprovement:"Cần cải thiện"},stats:{angryCount:"Rồng thức giấc",pointsLost:"Điểm bị trừ",mercyUsed:"Khoan hồng dùng",noiseThreshold:"Ngưỡng ồn",countUnit:"lần",pointsUnit:"điểm"},log:"Nhật ký sự kiện",btn:{close:"Đóng",restart:"Bắt đầu tiết mới"}},events$1={angry:"Rồng thức giấc!",mercy:"Khoan hồng (Giáo viên tắt cảnh báo)"},viNoiseTracker={featureTitle:featureTitle$3,sidebar:sidebar$b,setup:setup$1,calibration:calibration$1,monitor:monitor$1,dragon:dragon$1,summary:summary$1,events:events$1},heroTitle$5="Công cụ AI Giáo dục",warningEmail$1="⚠️ Sử dụng tài khoản email công vụ có thể bị hạn chế Công cụ AI, hãy dùng tài khoản @gmail.com của bạn",warningTrial$1='🔒 Hãy bấm "Dùng thử" và xem kỹ Hướng dẫn trước khi quyết định mở khóa!',tabs$5={paid:"AI trả phí",free:"AI miễn phí",bundle:"Mở nhiều công cụ cùng lúc (giảm giá)",fullAiRemaining:"FullAI · còn {{days}} ngày",upgradeFullAi:"Nâng cấp FullAI",upgradeFullAiTitle:"Nâng cấp FullAI PLAN"},groups$3={report:"Hồ sơ & Báo cáo",lesson:"Giáo án & Soạn giảng",exam:"Đề thi",product:"Sản phẩm & Game"},groupBadge$1="Mỗi công cụ 30,000đ - 50.000đ/năm · Mua nhiều năm, nhiều công cụ được giảm thêm",searchPlaceholder$1="Tìm công cụ...",contactAdmin$1="Liên hệ admin",emptyHint$1="Không tìm thấy công cụ phù hợp.",freeSectionTitle$1="Bộ Công Cụ Miễn Phí",freeSectionBadge$1="✨ Trải nghiệm sử dụng AI hoàn toàn miễn phí",priceYear$1="{{price}}đ/năm",openError$1="Không thể mở công cụ, vui lòng thử lại.",buttons$1={trial:"Dùng thử",viewHelp:"Xem hướng dẫn",helpTitle:"Hướng dẫn: {{title}}",comingSoon:"🕒 Sắp có",opening:"⏳ Đang mở...",freeUseNow:"✨ Miễn phí - Dùng ngay",useNowLifetime:"🚀 Sử dụng ngay · Vĩnh viễn",useNowDays:"🚀 Sử dụng ngay · còn {{days}} ngày",useNowDaysWarning:"🚀 Sử dụng ngay · ⚠️ còn {{days}} ngày",unlockPrice:"🔓 Mở khóa ({{price}}đ/năm)",useNow:"🚀 Sử dụng ngay"},bundle$1={hintSelect:"Tích vào thẻ công cụ muốn mở khóa để thêm vào giỏ",toolsCount:"🛒 {{count}} công cụ",discount:"Giảm {{percent}}%",checkout:"💳 Thanh toán gộp",cancel:"Hủy",selected:"✓ Đã chọn",addToCart:"+ Thêm vào giỏ"},fullAiExtend$1={title:"FullAI PLAN · còn {{days}} ngày",content:"Bạn còn {{days}} ngày FullAI. Nếu thanh toán thêm sẽ được cộng dồn số ngày.",ok:"OK"},mathTypeWarning={title:"⚠️ Lưu ý trước khi mua công cụ tích hợp giáo án",content:"Nếu giáo án gốc của bạn dùng <strong>MathType</strong> để soạn công thức Toán / Hóa, thì sau khi tích hợp <strong>các công thức đó sẽ bị mất</strong> (công cụ chỉ giữ được phần văn bản và ảnh).",note:"Nếu giáo án của bạn có nhiều công thức MathType, hãy cân nhắc trước khi mua.",refund:"Chúng tôi chỉ hỗ trợ hoàn lại 90% nếu đã mua.",cancel:"Để tôi xem lại",ok:"Tôi đã hiểu, tiếp tục"},contactModal$1={title:"Liên hệ Quản trị viên",desc:"Nếu bạn gặp khó khăn trong việc mở khóa hoặc sử dụng công cụ, vui lòng liên hệ Zalo/SĐT admin hỗ trợ:",ok:"Đã hiểu"},tools$1={tool1:{title:"Viết sáng kiến kinh nghiệm",description:"Viết sáng kiến kinh nghiệm tự động bằng AI"},tool2:{title:"Biện pháp giáo viên giỏi",description:"Biện pháp nâng cao chất lượng giảng dạy và chủ nhiệm tự động bằng AI"},tool4:{title:"AI Phân tích hạnh kiểm",description:"Phân tích kết quả rèn luyện để đưa ra nhận xét chuyên sâu bằng AI. Chú ý: Đây KHÔNG PHẢI công cụ nhập CSDL, SMAS, VnEdu"},tool14:{title:"Tích hợp NLS, NL AI vào KHGD, PPCT",description:"Tích hợp đồng thời (hoặc riêng lẻ)năng lực số (NLS) và năng lực AI vào KHGD, phân phối chương trình (PPCT)"},tool16:{title:"Tích hợp tổng hợp (NLS, NL AI,...) vào giáo án",description:"Cho phép tích hợp ĐỒNG THỜI hoặc RIÊNG LẺ các nội dung NLS, trí tuệ nhân tạo (AI), khuyết tật hòa nhập vào giáo án"},tool9:{title:"Soạn Giáo án MẦM NON tích hợp",description:"Cho phép tích hợp ĐỒNG THỜI hoặc RIÊNG LẺ các nội dung NLS, trí tuệ nhân tạo (AI), khuyết tật hòa nhập vào giáo án — dành riêng cho cấp Mầm non"},tool13:{title:"Soạn Giáo án Chuyên đề AI",description:"Xây dựng giáo án chuyên đề về AI theo các hướng dẫn của QĐ 2422"},tool11:{title:"Tạo bảng tích hợp NL AI vào KHGD",description:"Tự động tạo bảng tích hợp năng lực AI vào kế hoạch giáo dục theo QĐ 2422"},tool17:{title:"Soạn giáo án ứng dụng CNTT",description:"Tải lên SGK hoặc giáo án gốc, AI soạn giáo án kèm gợi ý hoạt động số cụ thể trên giaoviendoimoi.com và xuất sẵn JSON câu hỏi để dán vào bài"},tool5:{title:"Tạo đề thi theo CV 7991",description:"Tạo đề thi, đáp án, hướng dẫn chấm chuẩn công văn 7991"},tool6:{title:"Tạo đề thi CV 7991 Tiếng Anh",description:"Tạo đề thi chuẩn CV 7991 dành riêng cho môn Tiếng Anh"},tool7:{title:"Tạo đề thi chuẩn Ngữ văn",description:"Soạn đề thi chuẩn cấu trúc, rubric môn Ngữ văn"},tool8:{title:"Tạo đề thi chuyên biệt",description:"Tạo đề theo các ma trận, cấu trúc sẵn có, dành cho mục đích đặc biệt: Học sinh giỏi, luyện đề,..."},tool10:{title:"AI tạo sản phẩm phần mềm",description:"Công cụ AI hỗ trợ tạo ra các phần mềm giáo dục thông minh"},toolTtsVoice:{title:"AI Tạo giọng đọc",description:"Tạo file giọng đọc AI tự nhiên cho bài g
518iảng: nhập văn bản, chọn giọng rồi tải file âm thanh về, dùng cho tính năng có Giọng đọc AI hoặc chèn vào bài giảng elearning. Mở khóa sẵn nếu bạn đã có FullGame"},toolHtmlGame:{title:"AI Tạo Game nhanh",description:"Tạo game tương tác cá»±c nhanh từ giáo án cá»§a bạn, sá»­ dụng trên lớp hoặc gắn vào bài giảng elearning, scrom, sá»­ dụng làm thiết bị số, cÅ©ng có thể dán code vào tính năng Game tá»± tạo để giao cho học sinh chÆ¡i ngay",unlockBadge:"Mở khóa đồng thời",customGameName:"Game tá»± tạo"},free1:{title:"AI tạo câu hỏi trắc nghiệm",description:"Tá»± động tạo câu hỏi trắc nghiệm từ nội dung giáo án bằng AI"},free2:{title:"Phân tích quá trình học",description:"Phân tích và đánh giá lộ trình học tập cá»§a học sinh bằng AI"},free4:{title:"Robot Dạy Học AI",description:"Robot AI thông minh hỗ trợ giảng dạy — trả lời câu hỏi, giải thích nội dung bài học tương tác với học sinh"},free3:{title:"Tạo ảnh hướng nghiệp cho HS",description:"Sá»­ dụng AI để tạo ảnh hướng nghiệp dá»±a trên sở thích và kỹ năng cá»§a học sinh"},free5:{title:"Soạn giáo án ứng dụng CNTT",description:"Tải lên SGK hoặc giáo án gốc, AI soạn giáo án kèm gợi ý hoạt động số cụ thể trên giaoviendoimoi.com và xuất sẵn JSON câu hỏi để dán vào bài"}},viAiTools={heroTitle:heroTitle$5,warningEmail:warningEmail$1,warningTrial:warningTrial$1,tabs:tabs$5,groups:groups$3,groupBadge:groupBadge$1,searchPlaceholder:searchPlaceholder$1,contactAdmin:contactAdmin$1,emptyHint:emptyHint$1,freeSectionTitle:freeSectionTitle$1,freeSectionBadge:freeSectionBadge$1,priceYear:priceYear$1,openError:openError$1,buttons:buttons$1,bundle:bundle$1,fullAiExtend:fullAiExtend$1,mathTypeWarning,contactModal:contactModal$1,tools:tools$1},page$k={title:"💎 Săn Kho Báu",helpLabel:"Video hướng dẫn",helpTitle:"Hướng dẫn Săn Kho Báu",createHuntBtn:"Tạo cuộc săn mới",loadError:"Không thể tải dữ liệu.",sidebar:{myHunts:"Cuộc săn cá»§a tôi",sessions:"Phiên đã giao",create:"Tạo mới"}},myHunts$1={emptyTitle:"Chưa có cuộc săn nào",emptyDesc:"Tạo cuộc săn đầu tiên để học sinh bắt đầu phiêu lưu — hoặc chÆ¡i thá»­ bản mẫu bên dưới!",demoBadge:"Bản chạy thá»­",monstersCount:"{{count}} quái vật",playTrial:"ChÆ¡i thá»­",assign:"Giao bài",edit:"Sá»­a",delete:"Xóa",teacherShare:"Chia sẻ GV",shareTooltipEnabled:"Chia sẻ cho giáo viên khác qua link",shareTooltipDisabled:"Chỉ chia sẻ được cuộc săn mà mọi quái vật là câu hỏi (không dùng bài học)",deleteDialog:{title:"Xóa cuộc săn?",content:'Xóa bài gốc "{{title}}"? Các phiên đã giao từ bài này vẫn giữ nguyên (có bản chụp riêng) — muốn dừng thì xóa ở tab "Phiên đã giao".',cancel:"Há»§y",confirm:"Xóa"}},sessions$1={emptyTitle:"Chưa giao phiên nào",emptyDesc:"Vào <1>Cuộc săn cá»§a tôi</1> và bấm <3>Giao bài</3> để tạo phiên cho học sinh.",statusEnded:"Đã kết thúc",statusExpired:"Đã hết hạn",statusOpen:"Đang mở",assignedDate:"Giao: {{assigned}} · Hạn: {{expires}}",copyCode:"Sao chép mã",copiedCode:"Đã chép mã",copyLink:"Sao chép link",copiedLink:"Đã chép link",play:"Vào chÆ¡i",results:"Kết quả",end:"Kết thúc",delete:"Xóa",deleteDialog:{title:"Xóa phiên đã giao?",content:'Xóa phiên "{{title}}"{{label}}? Học sinh sẽ không vào được nữa và kết quả cá»§a phiên này cÅ©ng bị gỡ.',cancel:"Há»§y",confirm:"Xóa"}},builder$1={createTitle:"Tạo cuộc săn tìm mới",updateTitle:"Cập nhật cuộc săn tìm",titleLabel:"Tên cuộc săn tìm",titlePlaceholder:"VD: Hè 2026 - Săn Kho Báu Toán Học",winModeLabel:"Kiểu thắng:",winModeAllStages:"Trả lời hết là thắng",winModeKeyword:"Săn từ khóa bí mật",winModeKeywordDesc:"Mỗi quái vật giữ 1 chữ cái cá»
518§a từ khóa. HS hạ đủ quái để ghép ra từ khóa bí mật thì thắng.",winModeAllStagesDesc:"HS cần hạ hết toàn bộ quái vật là thắng — bạn tá»± chọn số lượng quái. Mỗi quái vật là 1 câu hỏi hoặc bài tập",keywordLabel:"Từ khóa bí mật",keywordPlaceholder:"VD: Việt Nam",keywordHelper:"Từ khóa có {{count}} ký tá»± → cần điền đúng {{count}} quái vật (tối thiểu {{min}}, tối đa {{max}})",monsterCountLabel:"Số quái vật (câu hỏi/bài học):",monsterCountRange:"Từ {{min}} đến {{max}} quái vật",dailyLimitLabel:"Mỗi ngày được đánh bao nhiêu quái? (việc hạn chế này để cho học sinh có ý thức làm bài hàng ngày, chứ không phải tập trung vào việc hoàn thành nhanh)",dailyLimitUnlimited:"Bao nhiêu cÅ©ng được",dailyLimitOption:"{{count}} quái / ngày",dailyLimitUnlimitedDesc:"HS đánh thoải mái con nào trước cÅ©ng được, không giới hạn số quái trong ngày.",dailyLimitDesc:"Mỗi ngày HS chỉ hạ được {{count}} quái vật bất kỳ — đánh đủ là phần còn lại khoá tới ná»­a đêm. Không ép thứ tá»±.",monsterTypeLabel:"Quái vật là:",monsterTypeQuestion:"❓ Câu hỏi",monsterTypeGame:"🎮 Bài học",monsterTypeQuestionDesc:"Mỗi quái vật là 1 câu hỏi, HS trả lời ngay trên bản đồ. Nhập câu hỏi ở danh sách bên dưới.",monsterTypeGameDesc:"Mỗi quái vật là 1 bài học / trò chÆ¡i bạn đã tạo. Chọn riêng cho từng quái ở danh sách bên dưới.",shuffleAnswers:"🔀 Xáo trộn đáp án",shuffleAnswersDesc:"Mỗi lần HS gặp lại cùng một quái vật, thứ tá»± đáp án sẽ đảo khác đi — HS phải thá»±c sá»± nắm kiến thức chứ không học vẹt kiểu “đáp án ở vị trí thứ 2”. Áp dụng cho cả câu Đúng/Sai nhiều mệnh đề.",questionOrderKept:"Thứ tá»± câu hỏi luôn giữ nguyên vì mỗi câu gắn cứng với một con quái{{suffix}}.",questionOrderSuffixKeyword:" và một chữ cái cá»§a từ khóa",questionsListTitle:"Danh sách câu hỏi",filledCount:"Đã điền {{current}}/{{total}}",missingKeywordHint:"Nhập từ khóa bí mật ở trên để biết cần bao nhiêu câu hỏi.",missingStageCountHint:"Chọn số quái vật ở trên để biết cần bao nhiêu câu hỏi.",duplicateDisabledReason:"Đã đủ {{targetCount}} câu (bằng số quái vật)",duplicateDecoyDisabledReason:"Đã đạt tối đa {{max}} câu hỏi bổ sung",qfLabels:{clearAll:"Xóa tất cả",pickFromBank:"📚 Chọn từ kho hoặc AI",pickFromLesson:"📂 Từ bài có sẵn",manualInput:"✍️ Nhập thá»§ công",note:"Cần đúng {{targetCount}} câu hỏi (bằng số quái vật).{{suffix}} Hỗ trợ 4 dạng: Trắc nghiệm, Đúng/Sai (nhiều mệnh đề), Nhiều đáp án, Điền từ.",noteKeywordSuffix:" Thứ tá»± câu = thứ tá»± chữ cái từ khóa.",noteAllStagesSuffix:" HS trả lời hết là thắng.",listHeader:"Danh sách câu hỏi ({{count}})",emptyTitle:"Chưa có câu hỏi nào",emptyDesc:"Dùng các nút ở trên để thêm câu hỏi."},excessQuestionsAlert:"Thừa {{count}} câu — hãy xoá bớt cho đúng {{target}} câu, hoặc tăng số quái vật ở trên.",missingQuestionsAlert:"Còn thiếu {{count}} câu.",gamesListTitle:"Danh sách bài học / trò chÆ¡i cho quái vật",missingKeywordGameHint:"Nhập từ khóa bí mật ở trên để tạo các quái vật.",missingStageCountGameHint:"Chọn số quái vật ở trên để bắt đầu.",selectLessonForMonster:"Chọn bài học cho quái vật này",deleteSlotTooltip:"Xoá nội dung ô này",close:"Đóng",decoySwitch:"👻 Thêm quái vật bổ sung",decoyDesc:"Đây là những quái vật KHÔNG giữ chữ cái nào cá»
518§a từ khóa — thêm vào để đánh lạc hướng. HS vẫn hạ được chúng nhưng không nhận thêm chữ, khiến việc ghép từ khóa khó đoán hÆ¡n. (Chỉ dùng cho kiểu thắng “Săn từ khóa bí mật”.) Loại nội dung theo đúng lá»±a chọn “Quái vật là” ở trên: ",decoyModeQuestion:"câu hỏi",decoyModeGame:"bài học",decoyQuestionsCount:"Đã nhập {{count}}/{{max}} câu hỏi bổ sung.",decoyQfLabels:{clearAll:"Xóa tất cả",pickFromBank:"📚 Chọn từ kho hoặc AI",pickFromLesson:"📂 Từ bài có sẵn",manualInput:"✍️ Nhập thá»§ công",note:"Tối đa {{max}} câu hỏi bổ sung. Những câu này KHÔNG giữ chữ cái từ khóa — HS trả lời đúng cÅ©ng không nhận thêm chữ. Hỗ trợ 4 dạng: Trắc nghiệm, Đúng/Sai (nhiều mệnh đề), Nhiều đáp án, Điền từ.",listHeader:"Danh sách câu hỏi bổ sung ({{count}})",emptyTitle:"Chưa có câu hỏi bổ sung nào",emptyDesc:"Dùng các nút ở trên để thêm câu hỏi."},decoyMaxAlert:"Đã đạt tối đa {{max}} câu hỏi bổ sung.",decoyLessonsCount:"Đã chọn {{count}}/{{max}} quái vật bổ sung.",lessonTypeLabel:"Loại bài học",noLessons:"Chưa có bài học nào.",loadMore:"Tải thêm ({{count}} bài còn lại)",cancel:"Há»§y",createBtn:"Tạo cuộc săn tìm",updateBtn:"Cập nhật cuộc săn tìm",confirmDeleteAll:"Xoá tất cả câu hỏi?",confirmDeleteAllDecoy:"Xoá tất cả câu hỏi bổ sung?",bankModalTitle:"Chọn câu hỏi từ Ngân hàng",lessonModalTitle:"Lấy câu hỏi từ bài học đã tạo",decoyBankModalTitle:"Chọn câu hỏi bổ sung từ Ngân hàng",decoyLessonModalTitle:"Lấy câu hỏi bổ sung từ bài học đã tạo",multiTypeHint:"Hỗ trợ 4 dạng câu hỏi: Trắc nghiệm, Đúng/Sai (nhiều mệnh đề), Nhiều đáp án, và Điền từ.",types:{shortAnswer:"Điền khuyết",trueFalse:"Đúng / Sai",trueFalseMulti:"Đúng / Sai • {{count}} mệnh đề",lessonChip:"Bài học",questionChip:"Câu hỏi"},messages:{skippedQuestions:"Đã bỏ {{count}} câu không dùng được (thiếu nội dung hoặc thiếu đáp án đúng).",noMatchingQuestions:"Không có câu nào phù hợp.",noLessonQuestions:'Không lấy được câu nào phù hợp từ "{{title}}".',excelNoMatching:"Không có câu nào phù hợp trong file (chỉ nhận trắc nghiệm 1 đáp án đúng hoặc điền khuyết).",excelSkipped:"Đã bỏ {{count}} câu không dùng được.",generalError:"Đã có lỗi xảy ra. Vui lòng thá»­ lại."}},questionStage$1={close:"Đóng",clickToClose:"Bấm để đóng",decoyTitle:"Quái vật này không chứa từ khóa!",decoyDesc:"Bạn trả lời đúng, nhưng đây là quái vật mồi nhá»­. Hãy tiếp tục tìm kiếm!",correctLetter:"Chính xác! Bạn nhận được chữ:",correctMonster:"Chính xác! Đã hạ quái vật #{{num}}!",incorrect:"Chưa đúng!",monsterNumber:"QUÁI VẬT #{{num}}",typeAnswerPlaceholder:"Gõ câu trả lời...",chooseTrueFalse:"Chọn Đúng hoặc Sai cho từng mệnh đề:",trueLabel:"Đúng",falseLabel:"Sai",multipleChoiceHint:"Có thể có nhiều đáp án đúng — chọn tất cả đáp án đúng:",flee:"Bỏ chạy",attack:"Tấn công!"},play$5={trialStudentName:"ChÆ¡i thá»­",defeatNotification:"💥 Quái vật vẫn đứng đó. Rời đi rồi quay lại để thá»­ lần nữa!",huntNotFound:"Không tìm thấy cuộc săn tìm.",huntEnded:"Cuộc săn tìm này đã kết thúc.",huntExpired:"Cuộc săn tìm này đã hết hạn tham gia.",genericError:"Đã có lỗi xảy ra.",passportNotFound:"Không tìm thấy hộ chiếu này. Kiểm tra lại mã.",stagesChallenges:"{{count}} thá»­ thách",winModeAllStages:"Hạ hết quái vật để thắng",winModeKeyword:"Tìm từ khóa bí mật",firstTimeTab:"Lần đầu chÆ¡i",havePassportTab:"Có mã hộ chiếu",nameLabel:"Tên cá»§a bạn",namePlaceholder:"Nhập tên để bắt đầu...",startAdventure:"⚔️ Bắt đầu phiêu lưu!",passportCodeLabel:"Mã hộ chiếu (2 ký tá»±)",continueJourney:"🧭 Tiếp tục hành trình",exitBtn:"← Thoát",yourPassport:"Hộ chiếu cá»§a bạn",passportSaveHint:"Lưu lại mã này để tiếp tục trên thiết bị khác hoặc lần sau",copied:"Đã sao chép!",readyGreeting:"Xin chào, <1>{{name}}</1>! Sẵn sàng phiêu lưu chưa?",letGoBtn:"🚩 Lên đường!",previewBanner:"🧪 Chế độ chÆ¡i thá»­ — không cần hộ chiếu, không giới hạn số quái/ngày, kết quả KHÔNG lưu vào phiên đã giao.",exitPreview:"← Thoát chÆ¡i thá»­",dailyLimitReached:"🌙 HÔM NAY BẠN Đà LÀM RẤT TỐT — HÃY QUAY LẠI CHIẾN ĐẤU VÀO NGÀY MAI 🌙",moveInstruction:"💡 Dùng <1>W A S D</1> hoặc <3>phím mÅ©i tên</3> để đi — trên điện thoại thì chạm & giữ vào chỗ muốn tới. Bước vào vòng tròn quanh quái vật để vào trận; đi vòng qua vòng tròn nếu chưa muốn đánh.",exitConfirmTitle:"Thoát khỏi cuộc săn?",exit
518ConfirmDesc:"Tiến độ đã được lưu — bạn có thể vào lại bất cứ lúc nào bằng mã hộ chiếu ",stayBtn:"Ở lại",confirmExitBtn:"🚪 Thoát"},treasureModal$1={tryAgain:"Chưa đúng, thử lại!",treasureAlt:"kho báu",congrats:"🎉 Chúc mừng!",completedDesc:"Bạn đã hoàn thành Săn Kho Báu!",attemptsCount:"Số lần thử: {{count}}",awesomeBtn:"Tuyệt vời! 🏆",openSecretChest:"🎁 Mở rương bí mật",arrangeLettersDesc:"Sắp xếp {{count}} chữ cái đã thu thành từ khóa bí mật!",hint:'Gợi ý: Từ khóa có {{count}} chữ cái, bắt đầu bằng "{{first}}"',inputLabel:"Nhập từ khóa ({{count}} chữ cái)",openBtn:"Mở rương!"},stageModal$1={unsupportedType:"Game type này chưa được hỗ trợ trong Hunt.",close:"Đóng",closeAria:"Đóng",decoyTitle:"Quái vật này không chứa từ khóa!",decoyDesc:"Bạn đã chiến thắng nhưng đây là quái vật mồi nhử. Hãy tiếp tục tìm kiếm!",earnedLetterTitle:"Bạn nhận được chữ:",letterStoredDesc:"Chữ cái đã được cất vào túi đồ của bạn"},hud$1={player:"Người chơi:",passport:"Mã hộ chiếu:",muteBgm:"Tắt nhạc nền",unmuteBgm:"Bật nhạc nền",minimize:"Thu nhỏ",fullscreen:"Toàn màn hình",openedChest:"🏆 Đã mở!",openChest:"🎁 Mở rương!",chestLocked:"🔒 Rương",sidebarChestOpened:"🏆 Đã mở rương!",sidebarChestReady:"🎁 Bấm để mở rương!",monstersCount:"quái",keywordsCount:"từ khóa",bgmOn:"Nhạc: Bật",bgmOff:"Nhạc: Tắt",exitGame:"Thoát game",treasureFound:"🏆 Đã tìm ra kho báu!"},assignModal$1={title:"Giao bài cho học sinh",huntFallback:"Cuộc săn",mainStagesCount:"{{count}} ải chính",keywordInfo:" · Từ khóa: {{keyword}}",labelField:"Nhãn đợt giao (tùy chọn)",labelPlaceholder:"VD: Lớp 6A, Đợt 1...",labelHelper:"Giúp phân biệt các đợt giao của cùng một bài trong 'Phiên đã giao'.",expirationTitle:"Thời hạn tham gia",minDaysAlert:"Bài này có {{count}} quái, mỗi ngày HS chỉ hạ được {{perDay}} quái → cần tối thiểu <strong>{{minDays}} ngày</strong> để hoàn thành. Các mốc ngắn hơn đã bị khóa.",minDaysError:"Bài này cần tối thiểu {{minDays}} ngày để HS hoàn thành. Vui lòng chọn thời hạn dài hơn.",extendedPermError:"Không kiểm tra được quyền tạo link dài. Vui lòng thử lại.",assignFailed:"Giao bài thất bại. Vui lòng thử lại.",cancel:"Hủy",assignBtn:"Giao bài",assigningBtn:"Đang giao...",successTitle:"Đã giao bài!",batchLabel:"Đợt: <1>{{label}}</1>",shareInstruction:"Chia sẻ mã hoặc link dưới đây để học sinh vào chơi.",joinCodeLabel:"Mã tham gia",copied:"Đã sao chép!",copyCode:"Sao chép mã",shareLinkLabel:"Link chia sẻ",copiedBtn:"Đã chép",copyBtn:"Sao chép",downloadQr:"Tải mã QR",close:"Đóng",days:{1:"1 ngày",3:"3 ngày",7:"7 ngày",15:"15 ngày",30:"30 ngày",90:"90 ngày",365:"1 năm",730:"2 năm",1095:"3 năm",1825:"5 năm"}},statsModal$1={title:"📊 Kết quả: {{title}}",keywordInfo:"Từ khóa: <1>{{keyword}}</1> · {{count}} ải chính",reloadTooltip:"Tải lại",studentsCount:"Học sinh tham gia",completedCount:"Hoàn thành",avgStages:"Trung bình ải qua",stagePassRateTitle:"Tỷ lệ vượt qua từng ải:",stageNum:"Ải {{num}}",chest:"🎁 Rương",searchPlaceholder:"Tìm theo tên hoặc mã hộ chiếu...",noStudents:"Chưa có học sinh nào tham gia.",notFound:"Không tìm thấy.",colIndex:"#",colName:"Tên",colPassport:"Hộ chiếu",colStages:"Ải qua",colScore:"Điểm",colCompleted:"Hoàn thành",colStarted:"Bắt đầu",colDelete:"Xóa",statusDone:"✅ Xong",statusNotYet:"Chưa",deleteStudentTooltip:"Xóa kết quả học sinh này",deleteConfirm:'Bạn có chắc chắn muốn xóa kết quả của học sinh "{{name}}" ({{code}})?',unplayedTooltip:"Chưa chơi",progressTooltip:"{{percent}}% · {{attempts}} lần thử",footerStudents:"{{count}} học sinh",filteredFrom:" (lọc từ {{total}})",close:"Đóng"},slotPicker$1={lessonType:"Loại bài học",noLessons:"Chưa có bài học nào.",loadMore:"Tải thêm (còn lại {{count}} bài)"},world$1={minutes:"{{count}} phút",days:"{{count}} ngày",hours:"{{count}} giờ",notOpen:"Chưa mở",dailyLimitReachedTooltip:"🛡️ Hôm nay đã đánh đủ {{count}} quái rồi — quay lại sau {{cooldown}}",unlockAfterTooltip:"🛡️ Mở sau {{cooldown}}
518",retryTooltip:"Chưa đạt — bước vào để thử lại!",decoyTooltip:"Quái vật bí ẩn...",monsterTooltip:"Quái vật #{{num}}",introText:"⚔️ HÃY TÌM CÁC QUÁI VẬT ĐỂ CHIẾN ĐẤU ⚔️"},viScavengerHunt={page:page$k,myHunts:myHunts$1,sessions:sessions$1,builder:builder$1,questionStage:questionStage$1,play:play$5,treasureModal:treasureModal$1,stageModal:stageModal$1,hud:hud$1,assignModal:assignModal$1,statsModal:statsModal$1,slotPicker:slotPicker$1,world:world$1},form$s={editTitle:"Sửa bộ Flashcard",createTitle:"Tạo bộ Flashcard mới",addCardAiExcel:"✨ Thêm thẻ bằng AI/Excel",titleLabel:"Tên bộ card",titlePlaceholder:"VD: Từ vựng Unit 5, Lịch sử Thế giới...",shuffleCards:"Xáo trộn thẻ khi học",fontSizeLabel:"Cỡ chữ",fontSizes:{small:"Bé",regular:"Chuẩn",large:"Lớn",xlarge:"Rất lớn"},imageSizeLabel:"Cỡ ảnh",frontColorLabel:"Màu mặt trước",frontColors:{red:"🟥 Đỏ",indigo:"🟣 Tím",blue:"🟦 Xanh dương",teal:"🩵 Xanh mòng két",orange:"🟧 Cam",slate:"⬛ Xám đen",brown:"🟫 Nâu đất"},voiceLabel:"Giọng đọc",languages:{vi:"🇻🇳 Tiếng Việt",en:"🇬🇧 Tiếng Anh"},cardFormatLabel:"Dạng thẻ",twoSides:"2 mặt",singleSide:"1 mặt",questionOnly:"Chỉ có câu hỏi",answerOnly:"Chỉ có đáp án",autoRead:"Tự động đọc khi lật/chuyển thẻ",showAllCards:"👁 Hiện tất cả thẻ",hideAllCards:"🙈 Ẩn tất cả thẻ",cardNum:"Thẻ {{num}}",hasImage:"🖼 Có ảnh",expand:"Mở rộng",collapse:"Thu gọn",deleteCardTitle:"Xóa thẻ này",frontSide:"Mặt trước",backSide:"Mặt sau",frontPlaceholder:"Câu hỏi / từ / khái niệm...",backPlaceholder:"Đáp án / nghĩa / giải thích...",pastingImage:"Đang dán ảnh...",imageLabel:"Ảnh",addCard:"+ Thêm thẻ",cancel:"Hủy",saving:"Đang lưu...",update:"Cập nhật",create:"Tạo bộ card"},aiModal$1={title:"✨ Thêm thẻ bằng AI / Excel",tabJson:"🤖 Paste JSON (AI)",tabExcel:"📊 Upload Excel",openAiTool:"🚀 Mở công cụ tạo Flashcard bằng AI",steps:{step1:'Bấm nút "🚀 Mở công cụ tạo Flashcard bằng AI" ở trên (mở tab mới).',step2:'Trong công cụ, nhập chủ đề (VD: "Từ vựng Unit 5 Tiếng Anh 7") rồi bấm nút Tạo.',step3:"Đợi AI sinh xong, bấm nút Copy sang Giáo viên đổi mới",step4:'Quay lại đây, dán (Ctrl+V) vào ô bên dưới rồi bấm "Thêm vào bộ thẻ".'},jsonPlaceholder:`[
519  {"front": "Quang hợp", "back": "Quá trình cây xanh tạo chất hữu cơ"},
520  {"front": "Hô hấp", "back": "Quá trình phân giải chất hữu cơ"}
521]`,cancel:"Hủy",apply:"Thêm vào bộ thẻ",excelHint:"File Excel cần có 2 cột: Mặt trước và Mặt sau.",dlTemplate:"⬇ Tải file mẫu (.xlsx)",pickExcel:"📂 Chọn file Excel"},messages$3={minOneCard:"Bộ card phải có ít nhất 1 thẻ",uploadImageError:"Không upload được ảnh, thử lại",jsonMustBeArray:"Cần là một mảng JSON có ít nhất 1 phần tử",jsonMissingFields:'Phần tử {{index}} thiếu "front" hoặc "back"',jsonAdded:"Đã thêm {{count}} thẻ từ AI",jsonInvalid:"JSON không hợp lệ",excelEmpty:"File không có dữ liệu",excelRowEmpty:"Dòng {{row}}: cả hai cột đều trống",excelAdded:"Đã thêm {{count}} thẻ từ Excel",excelReadError:"Không đọc được file Excel",emptyContentError:"Vui lòng thêm ít nhất 1 thẻ có nội dung",libraryFieldsRequired:"Vui lòng chọn đủ cấp học, môn học và khối lớp để đăng lên thư viện",audioUploadError:"Tải tệp âm thanh lên thất bại. Kiểm tra kết nối rồi bấm Lưu lại.",updateSuccess:"Đã cập nhật bộ card",createSuccess:"Đã tạo bộ card mới",snapshotTooLarge:"Bộ card quá lớn để đăng lên thư viện",saveFailed:"Lưu thất bại, thử lại sau"},excelTemplate$1={frontHeader:"Mặt trước",backHeader:"Mặt sau",row1Front:"Quang hợp",row1Back:"Quá trình cây xanh tạo chất hữu cơ từ CO₂ và nước",row2Front:"Hô hấp tế bào",row2Back:"Quá trình phân giải chất hữu cơ để giải phóng năng lượng",row3Front:"$\\frac{a}{b}$",row3Back:"Phân số a chia b (hỗ trợ công thức toán)",fileName:"mau-flashcard.xlsx"},viFlashcard={form:form$s,aiModal:aiModal$1,messages:messages$3,excelTemplate:excelTemplate$1},form$r={newTitle:"Tạo bài học mới",editTitle:"Chỉnh sửa bài học",generalInfo:"Thông tin chung",lessonTitle:"Tên bài học",timeLimitPerQuestion:"Thời gian mỗi câu (giây)",gameplay:"Cách chơi",gameMode:"Chế độ chơi",modeArrange:"Sắp xếp câu",modeFind:"Tìm từ đúng",wordSpeed:"Tốc độ bay",speedVerySlow:"Rất chậm",speedSlow:"Chậm",speedMedium:"Vừa",speedFast:"Nhanh",defaultCardFontSize:"Cỡ chữ thẻ từ mặc định",fontSizes:{1:"Nhỏ",2:"
521Vừa",3:"Lớn",4:"Rất lớn",5:"Cực lớn"},bgColor:"Màu nền khung",cameraGesture:"Chơi bằng camera (cử chỉ tay)",scoring:"Chấm điểm (tắt = thuần trình chiếu, không tính điểm)",bgMusic:"Nhạc nền (tắt = không tự phát nhạc nền, có thể bật lại trong game)",questionsList:"Danh sách câu ({{current}}/{{max}})",questionNum:"Câu {{num}}",moveUp:"Lên trên",moveDown:"Xuống dưới",deleteQuestion:"Xóa câu này",completeSentenceAnswer:"Câu hoàn chỉnh (đáp án)",hintFontSize:"Cỡ chữ câu gợi ý",sentencePlaceholder:"Nhập câu hoàn chỉnh, ví dụ: Hà Nội là thủ đô của Việt Nam",mathFormulaHint:"Công thức Toán: mỗi công thức phải nằm gọn trong <1>một từ</1> (câu được tách theo khoảng trắng) — viết <3>$x^2$ $+$ $y^2$</3> (3 thẻ), không viết <5>$x^2 + y^2$</5> (sẽ bị xé thành <7>$x^2$</7>, <9>+</9>, <11>y^2$</11> và hiện sai).",hintLabel:"Gợi ý cho câu này (tùy chọn)",hintPlaceholderArrange:"Mặc định: Sắp xếp các từ dưới đây thành câu hoàn chỉnh",hintPlaceholderFind:"Mặc định: Tìm và bắt các từ đúng dưới đây",findInstruction:"Bấm vào (các) từ đúng cần học sinh tìm:",arrangeInstruction:"Học sinh sẽ phải ghép {{count}} từ thành câu đúng — kiểm tra các thẻ dưới đây đúng như ý:",maxQuestionsReached:"Đã đạt số câu tối đa.",aiSuggest:"Gợi ý bằng AI",addManualQuestion:"Thêm câu thủ công",communityLibrary:"Thư viện cộng đồng",cancel:"Hủy",saving:"Đang lưu...",saveLesson:"Lưu bài học"},messages$2={loadError:"Không thể tải bài học",maxQuestionsError:"Bài học chỉ được tối đa {{max}} câu",minOneQuestionError:"Bài học phải có ít nhất 1 câu",aiImportWarning:"Đã thêm {{total}} câu, nhưng {{unmatched}} câu chưa đánh dấu được từ đúng — bạn bấm chọn từ giúp nhé",aiImportSuccess:"Đã thêm {{total}} câu từ AI",timeLimitError:"Thời gian mỗi câu tối thiểu 7 giây",emptySentenceError:"Câu {{num}} không được để trống",minWordsError:"Câu {{num}} phải có ít nhất 2 từ",targetWordRequiredError:"Câu {{num}} phải đánh dấu ít nhất 1 từ đúng",libraryFieldsRequired:"Vui lòng chọn đầy đủ cấp/môn/lớp để đưa lên thư viện",audioUploadError:"Tải tệp âm thanh lên thất bại. Kiểm tra kết nối rồi bấm Lưu lại.",genericError:"Đã xảy ra lỗi"},viFlyingWords={form:form$r,messages:messages$2},heroTitle$4="Tiện ích Giáo dục",heroSub$1="Các chức năng bổ sung cho giáo viên trên nền tảng web, giúp tiết kiệm thời gian và nâng cao hiệu quả giảng dạy.",fullTienIchRemaining$1="FullTienIch · còn {{days}} ngày",upgradeFullTienIch$1="Nâng cấp FullTienIch",sectionExtensionsTitle$1="Tiện ích",sectionExtensionsBadge$1="Mua riêng · 30.000đ/năm",nhanxetTitle$1="Nhận xét CSDL ngành, VnEdu & SMAS",nhanxetDesc$1="Tự động điền nhận xét học sinh — tiết kiệm hàng giờ mỗi kỳ.",usageGuide$1="📖 Hướng dẫn sử dụng",licenseActive$1="✅ Bản quyền còn hiệu lực · còn {{days}} ngày",licenseInactiveNhanxet$1="⚠️ Chưa kích hoạt · chỉ nhận xét được 5 học sinh",useBtn$1="Sử dụng",downloadBtn$1="Tải về",extendBtn$1="Gia hạn thêm",activateBtn$1="Kích hoạt",chuanNNTitle$1="Đánh giá chuẩn nghề nghiệp trên CSDL",chuanNNDesc$1="Tự động điền phiếu đánh giá chuẩn nghề nghiệp và xuất phiếu tự đánh giá (.docx).",licenseInactiveChuanNN$1="⚠️ Chưa kích hoạt · chỉ điền được 6/15 tiêu chí",downloadSelfAssessmentDocx$1="📄 Tải phiếu tự đánh giá (.docx)",pasteAiTitle$1="Chuyển đổi AI sang DOCX",pasteAiDesc$1="Dán văn bản từ ChatGPT, Gemini, Claude… nhận file Word với bảng và công thức toán.",pasteAiFreeUntil$1="🎁 Miễn phí đến hết ngày 1/7/2026",licenseInactivePasteAi$1="⚠️ Chưa kích hoạt · chỉ dùng được 3 lần",sectionAddInTitle$1="Add-in Microsoft Word",
521sectionAddInBadge$1="Cài vào Word · 50.000đ/năm",addInWordTitle$1="Add-in Word GVDM",addInWordDesc$1="Chuẩn hóa công thức Toán, căn chỉnh NĐ30, trộn đề thi trắc nghiệm và các tính năng khác ngay trong Word.",licenseInactiveAddInWord$1="⚠️ Chưa mua · 50.000đ/năm/máy",gettingToken$1="⏳ Đang lấy...",getActivationCode$1="🔑 Lấy mã kích hoạt",buyAndActivate$1="🛒 Mua & kích hoạt",mathAssistantTitle$1="Trợ lý cho GV Toán",mathAssistantDesc$1="Hỗ trợ giáo viên dạy Toán các thao tác đặc trưng: vẽ hình, chọn kho hình mẫu, tùy chỉnh hình vẽ Toán học…",licenseInactiveMathAssistant$1="⚠️ Chưa mua · dùng thử 3 ngày · 50.000đ/năm",getActivationKey$1="🔑 Lấy key kích hoạt",buyAndGetKey$1="🛒 Mua & lấy key",mathKeyTitle$1="🔑 Key kích hoạt Trợ lý cho GV Toán",mathKeyInstruction$1="Mở Word → tab <1>Trợ lý cho GV Toán</1> → chọn kích hoạt → dán key bên dưới vào ô nhập.",mathKeyDuration$1="Thời hạn: {{years}} năm (tính từ ngày kích hoạt trong add-in)",mathKeyWarning$1='⚠️ Key này gắn với tài khoản của bạn. Hãy lưu lại — vào đây bấm lại nút "Lấy key kích hoạt" sẽ hiện đúng key này, không cấp key mới.',copied$1="✅ Đã copy",copyKey$1="📋 Copy key",close$4="Đóng",mathDownloadTitle$1="📥 Tải Trợ lý cho GV Toán",mathDownloadDesc$1="Tải file .zip → <1>giải nén</1> → chạy file cài đặt bên trong, sau đó mở lại Word.",mathDownloadTrialNote$1="🎁 Add-in cho <1>dùng thử 3 ngày</1> — cài và chạy thử trước, thấy hợp thì quay lại mua key.",windowsDefenderWarning$1='⚠️ Nếu Windows hiện cảnh báo xanh <1>"Windows protected your PC"</1>, bấm <3>More info</3> → <5>Run anyway</5> (file an toàn, chỉ do chưa mua chứng chỉ thương mại).',cancel$6="Hủy",confirmDownload$1="📥 Xác nhận tải về",fullTienIchExtendTitle$1="FullTienIch · còn {{days}} ngày",fullTienIchExtendMsg$1="Bạn còn {{days}} ngày FullTienIch. Nếu thanh toán thêm sẽ được cộng dồn số ngày.",ok$1="OK",trialFirstTitle$1="💡 Hãy dùng thử trước khi mua",trialFirstDesc$1="Mỗi máy tính cài đặt khác nhau (hệ điều hành, phiên bản Word, quyền cài phần mềm…) nên Add-in có thể không cài được trên một số máy. Để tránh mua xong rồi không dùng được, bạn nên bấm nút <1>Tải về</1> bên cạnh và <3>cài thử trước</3> — nếu cài và chạy được trong Word, hãy quay lại mua & kích hoạt.",downloadTrial$1="📥 Tải về dùng thử",stillBuyNow$1="Vẫn muốn mua ngay",addInTokenTitle$1="🔑 Mã kích hoạt Add-in Word",addInTokenInstruction$1='Copy mã bên dưới, mở Word → tab "Giáo viên đổi mới" → nhấn <1>KÍCH HOẠT ĐỂ SỬ DỤNG</1> → dán mã vào ô.',addInTokenExpireWarning$1="⚠️ Mã này chỉ dùng được 1 lần và hết hạn sau 24 giờ.",copyCode$1="📋 Copy mã",addInDownloadTitle$1="📥 Hướng dẫn cài Add-in Word",addInDownloadDesc$1="Tải file .zip → <1>giải nén</1> → bấm chạy file <3>bam-de-cai-add-in.exe</3>.",addInReadmeNote$1="Xem thêm file <1>HUONGDAN.txt</1> trong thư mục giải nén.",activationGuideAlt$1="Hướng dẫn kích hoạt extension",understood$1="Đã hiểu",mathKeyError$1="Không lấy được key. Vui lòng thử lại.",tokenError$1="Không lấy được mã. Vui lòng thử lại.",connectionError$1="Lỗi kết nối. Vui lòng thử lại.",viEdutechExtensions={heroTitle:heroTitle$4,heroSub:heroSub$1,fullTienIchRemaining:fullTienIchRemaining$1,upgradeFullTienIch:upgradeFullTienIch$1,sectionExtensionsTitle:sectionExtensionsTitle$1,sectionExtensionsBadge:sectionExtensionsBadge$1,nhanxetTitle:nhanxetTitle$1,nhanxetDesc:nhanxetDesc$1,usageGuide:usageGuide$1,licenseActive:licenseActive$1,licenseInactiveNhanxet:licenseInactiveNhanxet$1,useBtn:useBtn$1,downloadBtn:downloadBtn$1,extendBtn:extendBtn$1,activateBtn:activateBtn$1,chuanNNTitle:chuanNNTitle$1,chuanNNDesc:chuanNNDesc$1,licenseInactiveChuanNN:licenseInactiveChuanNN$1,downloadSelfAssessmentDocx:downloadSelfAssessmentDocx$1,pasteAiTitle:pasteAiTitle$1,pasteAiDesc:pasteAiDesc$1,pasteAiFreeUntil:pasteAiFreeUntil$1,licenseInactivePasteAi:licenseInactivePasteAi$1,sectionAddInTitle:sectionAddInTitle$1,sectionAddInBadge:sectionAddInBadge$1,addInWordTitle:addInWordTitle$1,addInWordDesc:addInWordDesc$1,licenseInactiveAddInWord:licenseInactiveAddInWord$1,gettingToken:gettingToken$1,getActivationCode:getActivationCode$1,buyAndActivate:buyAndActivate$1,mathAssistantTitle:mathAssistantTitle$1,mathAssistantDesc:mathAssistantDesc$1,licenseInactiveMathAssistant:licenseInactiveMathAssistant$1,getActivationKey:getActivationKey$1,buyAndGetKey:buyAndGetKey$1,mathKeyTitle:mathKeyTitle$1,mathKeyInstruction:mathKeyInstruction$1,mathKeyDuration:mathKeyDuration$1,mathKeyWarning:mathKeyWarning$1,copied:copied$1,copyKey:copyKey$1,close:close$4,mathDownloadTitle:mathDownloadTitle$1,mathDownloadDesc:mathDownloadDesc$1,mathDownloadTrialNote:mathDownloadTrialNote$1,windowsDefenderWarning:windowsDefenderWarning$1,cancel:cancel$6,confirmDownload:confirmDownload$1,fullTienIc
521hExtendTitle:fullTienIchExtendTitle$1,fullTienIchExtendMsg:fullTienIchExtendMsg$1,ok:ok$1,trialFirstTitle:trialFirstTitle$1,trialFirstDesc:trialFirstDesc$1,downloadTrial:downloadTrial$1,stillBuyNow:stillBuyNow$1,addInTokenTitle:addInTokenTitle$1,addInTokenInstruction:addInTokenInstruction$1,addInTokenExpireWarning:addInTokenExpireWarning$1,copyCode:copyCode$1,addInDownloadTitle:addInDownloadTitle$1,addInDownloadDesc:addInDownloadDesc$1,addInReadmeNote:addInReadmeNote$1,activationGuideAlt:activationGuideAlt$1,understood:understood$1,mathKeyError:mathKeyError$1,tokenError:tokenError$1,connectionError:connectionError$1},cancel$5="Cancel",save$1="Save",nav$3={home:"Home",aiTools:"AI Tools",questionBank:"Question Bank",activities:"Activities",assignments:"Assigned",community:"Community",join:"Join",bugReport:"Report a Bug",logout:"Logout",logoName:"Innovative Teacher",logoTitle:"📚 Innovative Teacher",edutech:"Edutech Tools",lessonSimulation:"Lesson Simulation",courses:"Courses",homeroom:"Homeroom",paymentHistory:"Payment History",joinForStudents:"Join (for Students)"},header$1={upgradePro:"Get FullGame",upgradePro_short:"FullGame",proAccount:"FullGame Account",proAccount_short:"FullGame",forever:"FullGame Lifetime",forever_short:"Lifetime",daysPro:"{{days}} days FullGame",daysPro_short:"{{days}}d FullGame",logoutBtn:"Logout"},proModal$1={title:"⭐ UPGRADE TO FullGame PLAN ⭐",description:"You don't have to get FullGame. You can purchase individual AI tools for only 30,000 VND each!",descriptionNote:"FullGame PLAN unlocks all interactive teaching features (excluding AI tools):",price:"💰 200,000 VND",bankLabel:"🏦 Bank:",accountLabel:"📱 Account:",ownerLabel:"👤 Name:",contentLabel:"📝 Transfer note:",alertTitle:"⚠️ After transferring, reload the page. If not activated, please contact Admin:",contactInfo:"📞 0363.357.745 | 💬",zaloLink:"Zalo",benefitsTitle:"✅ Benefits of FullGame:",offlineWarning:"This payment DOES NOT include Offline downloads and AI tools (available separately at 30,000 VND/tool on the AI Tools page).",benefit1:"Create unlimited lessons, games, videos,... across ALL interactive tools",benefit2:"Unlock tools with FullGame badge (cannot be used without FullGame)",benefit3:"Ability to upload/record audio for questions and generate Detailed Reports for student assessment features",closeBtn:"Close",contactAdmin:"Contact Admin",unlockBenefits:"✅ FullGame unlocks:",unlimitedGames:"Create <strong>unlimited</strong> educational games, quizzes, videos,...",audioAndReport:"<strong>Upload/record audio</strong> for questions/answers. <strong>Receive detailed reports when assigning homework to students</strong>",notIncluded:"DOES NOT include",excludedServices:"<1>AI Tools, Edutech Tools</1> & <3>Lesson Simulations, Courses, Homeroom Teacher Tools</3>",buyAiTools:"Buy AI Tools",buyEdutech:"Buy Edutech Tools",compareProFree:"Compare FullGame vs Free",mayPromo:"🎁 SPECIAL PROMOTION",promoBonusNote:"Buy now — get an extra <strong>+{{bonus}} months</strong> free!",promoUntil:"Valid until {{date}}",groupPurchaseBtn:"👥 GROUP PURCHASE — BIGGER DISCOUNT",enterPromoCode:"Please enter a code",promoCodeInvalid:"Code does not exist or is invalid",promoCodeSpamError:"Code does not exist or is invalid! To avoid spam, please try again later.",promoDiscount:"code -{{discount}}%",multiYearDiscount:"{{year}} yrs -{{discount}}%",yearsUnit:"{{year}} year(s)",detailedReportRow:"Detailed Report on Assignment",scoreOnlyReport:"Score report only",perQuestionReport:"Report per question",audioRecordRow:"Upload/Record question & answer audio",noAudio:"No",hasAudio:"Yes",cannotUse:"Unavailable",unlimited:"Unlimited"},upgradeModal$1={title:"🚫 Trial Limit Reached",offlineTitle:"Download for offline use",freeLimit:"Free plan only allows saving",differentClasses:"different classes",unlockRequired:"This feature requires unlocking to use",internationalBtn:"For international users",upgradeHint:"💡 To continue using {{name}}, you can upgrade:",aiUnlockHint:"💡 Unlock to use all AI Tools forever:",transferLabel:"Transfer note (Keep as is):",waitingPayment:"System is waiting for your payment...",contactTitle:"⚠️ After transferring, contact Admin to activate:",closeBtn:"Close",contactBtn:"Contact Zalo",reloadBtn:"✅ Paid - Reload Page",offlineBenefitTitle:"Download self-running Offline version forever (no internet needed)",offlineGuide:"Watch offline version tutorial",here:"here",offlineWarning:"Note: This offline version may lack some features compared to the original.",clickToView:"Click here to view",evaluationYear:"⏳ Can be used for {{selectedYears}} year(s) from payment (until {{date}})",expiryDateInfo:"Extension added: You can use it unlimitedly until {{date}}",proPlanBenefit:"♾️ FullGame PLAN: {{price}} / year — transfer {{price2x}} = 2 years",expiryWarning:"⚠️ After expiry, only {{count}} pinned (📌) lessons will remain usable — others will be locked.",expiryWarningNoAudio:"🚫 This upgrade does NOT include Audio Download and Detailed Reports",promoPlaceholder:"Enter promo code (if any)...",deleteBtn:"Delete",applyBtn:"Apply",selectYears:"💡 Select extension years:",years:"years",tempAccess:{aiTitle:"
521🤖 Upgrade AI",offlineTitle:"💾 Download Offline",aiContact:"To register AI Tools, please contact:",offlineContact:"To download the Offline version, please contact:",zaloLabel:"📞 Zalo: 0363.357.745",zaloName:"(Thinh Tin Hoc)",openZalo:"Open Zalo now",close:"Close"},offlineWarningDialog:{title:"⚠️ IMPORTANT WARNING ABOUT DATA & OFFLINE LIMITATIONS",pptWarning:"This download is NOT a PowerPoint file. You can only insert links, not paste directly into slides.",usageNote:"* The Offline version can be used WITHOUT INTERNET but has the following issues:",dataNoteTitle:"EXTREMELY IMPORTANT NOTES:",dataNote1:"Data is NOT synced between different devices.",dataNote2:"If you clear browsing data, lesson data may be lost.",dataNote3:'If you copy the product folder to another computer (or folder), data will NOT follow. You need to use "Export data (.json)" to backup and "Import file (.json)" to restore lessons in the new location.',dataNote4:"Please place the product folder in a fixed location on your computer.",limitationsTitle:"LIMITATIONS COMPARED TO THE ONLINE VERSION YOU ARE VIEWING:",limitationsDesc:"This offline product is limited in features compared to the original at {{url}}:",limit1:"Cannot share online play links for students.",limit2:"No cloud sync feature.",limit3:"Cannot assign homework and receive online result reports from students.",limit4:"Must manually type math formulas using Katex, no input support.",limit5:"No text formatting: font color, bold, italic, ...",gotIt:"Got it"},keepTransferNote:"KEEP THE TRANSFER CONTENT AS ABOVE (ABSOLUTELY NO EDITS)",singleAiToolHint:"Select the number of years below, pay once, and use immediately!",aiToolsGroupHint:"Pay once only to unlock the entire set of tools in this Group!",journeyHint:"This feature is for upgraded users only. Upgrade to create unlimited learning journeys.",versus1v1Hint:"This feature is for FullGame users only. Upgrade to let students battle 1v1 on their own devices.",assignment15DaysHint:"The free version only allows assignments up to 15 days.",genericUnlockRequired:"This feature requires unlocking to use!",extCommentsDesc:"Extension to auto-fill student comments into management software — 30,000 VND/year. After payment, log in with your Google account in the extension to use immediately.",extWordAddinDesc:"Word Add-in integrated with AI Gemini for lesson planning and document formatting — 50,000 VND/year.",extMathAddinDesc:"Word Add-in for Math teachers to draw geometry and formulas — 50,000 VND/year. Receive an activation key upon payment.",extAlignDocxDesc:"Auto-align fonts, margins, and line spacing for Word .docx documents per standard guidelines. 3 free trials, then 30,000 VND/year.",extAiToDocxDesc:"Paste AI chatbot responses (ChatGPT, Gemini, Claude…) to get clean formatted Word files with tables and math equations. 3 free trials, then 30,000 VND/year.",extTeacherStandardDesc:"Extension to auto-fill teacher professional evaluation forms and export .docx reports — 30,000 VND/year.",aiBundleDesc:"Unlock ALL current paid AI tools — AND FUTURE AI tools without extra charge! Only {{price}} VND/year.",edutechBundleDesc:"Unlock ALL Edutech Extensions (total value 140,000 VND/year) — for only {{price}} VND/year.",aiBundleHeader:"🚀 Unlock ALL Paid AI Tools — INCLUDING FUTURE TOOLS!",aiBundleFeatures:"• All existing paid AI tools + any newly launched tools in the future<br />• Yearly validity, stackable renewals",aiBundleExcludes:"🚫 DOES NOT include: FullGame PLAN (games/interactive video), Edutech Extensions, Offline edition",edutechBundleHeader:"🚀 Unlock ALL Edutech Extensions!",edutechBundleFeatures:"• Student Comments, Teacher Standards, AI→DOCX (30,000 VND/year each)<br />• Word Add-in GVDM (50,000 VND/year) · Yearly validity, stackable renewals",edutechBundleExcludes:"🚫 DOES NOT include: FullGame PLAN (games/interactive video), AI Tools, Offline edition",extendedLinkBenefit:"⏰ This plan lets you create assignment links valid up to {{tier}} years. Valid for all games with assignment feature.",downloadOfflineBenefit:'⬇️ Also unlocks "Download" — export lessons as offline playable files without Internet or embed in LMS.',legacyAiUnlockHeader:"⚠️ Upon unlocking, you own <u>PERMANENT LIFETIME ACCESS TO ALL</u> of the following tools:",aiGroup4Features:"• AI-integrated curriculum planning matrix<br />• AI Lesson Plan Creator<br />• Specialized AI Lesson Planning<br />• AI Competency Training Materials (free)",aiGroup3Features:"• Technical research report writing<br />• AI Software Product builder",aiGroup1Features:"• Pedagogical initiatives writing<br />• Exemplary teacher method reports<br />• Digital-competency integrated lesson plans<br />• Student report card analysis",aiGroup2Features:"• Test generator per standard Circular 7991<br />• English test generator per Circular 7991<br />• Standard Literature test generator<br />• Exam Analysis Tool",interactiveVideoDownload:"Additionally, you can also DOWNLOAD interactive videos",postExpiryWarning:"After expiration, you will temporarily be unable to use this feature until unlocked.",compareAiBundle:"Compare AI Tools Bundle vs Free",compareFeature:"Compare {{name}} vs Free",compareUpgradeFeature:"Compare Upgraded {{name}} vs Free",paidColumnLabel:"Purchased",qrAlt:"Payment QR Code",promoMayTitle:"
521🎁 MAY SPECIAL PROMOTION",promoBonusDesc:"Buy now — get an extra <strong>+{{bonus}} months</strong> free!",promoValidUntil:"Valid until {{date}}",promoCodeFormat:"code -{{discount}}%",multiYearDiscountFormat:"{{years}} years -{{discount}}%",groupBuyBtn:"👥 GROUP PURCHASE — EXTRA DISCOUNT",promoCodeRequired:"Please enter a promo code",promoCodeInvalidToast:"Code does not exist or is invalid! To prevent spam, please try again later.",promoCodeInvalid:"Code does not exist or is invalid",forever:"/ lifetime",perExtendedLink:"/ all links valid up to {{tier}} years",perYears:"/ {{years}} year(s)",paymentSuccess:"Payment successful! Feature has been unlocked.",bundleSelectedCount:"Selected {{count}} tools bundle:",bundleSelectedHint:"Select the number of years below, pay once, and unlock all selected tools!",notUnlocked:"Not unlocked",unlockForever:"Unlocked forever",assignment15DaysComparison:"Assignment links valid up to 15 days",assignmentMaxTierComparison:"Assignment links valid up to {{tier}} years",unlimitedDuration:"Unlimited — {{duration}}",unlockDuration:"Unlocked — {{duration}}",maxYearsDuration:"up to {{tier}} years",yearsDuration:"{{years}} year(s)",foreverDuration:"forever"},internationalModal$1={title:"✨ FullGame PLAN - $12/Year",description:"Unlock all interactive teaching tools for international teachers.",pricingTitle:"What You Get:",features:["Create unlimited lessons with ALL interactive tools","Record & upload audio to your content","Detailed student progress reports","AI Tools Group 1 forever (Lesson planning, Teaching strategies, Research writing, AI Assistant)","Store lessons permanently in the cloud"],howToTitle:"How to Subscribe:",step1:"Click the payment button below.",step2:"Enter the amount: $12.",step3:'⚠️ IMPORTANT: In the "Say something nice..." box (BMAC), write your registered email on this website.',note:"Your account will be manually upgraded within 24 hours after payment.",payBtn:"Pay with Buy Me a Coffee ☕",closeBtn:"Close",hasVnAccount:"Have a Vietnamese bank account?"},language$1={switchTo:"VI",current:"EN",dateLocale:"en-US"},externalTools$1={title:"Links to external tools",warning:"These are external links for quick access. Payments on Innovative Teacher will NOT apply to these websites.",accessTooltip:"Access {{name}}",categories:{teaching:"Teaching/Management Software",ai:"AI Software",aiGeneral:"General AI",aiImage:"Image Generation AI",aiVideo:"Video Generation AI",aiAudio:"Audio/Music Generation AI",education:"Educational Information Sites"}},usage$1={unlimited:"✅ Unlimited",used:"Used {{current}}/{{limit}} lessons",expired:"⚠️ Plan expired",noiseTrackerTrial:"Trial: Max 10 mins/session",proForever:"FullGame Lifetime",proDaysRemaining:"{{days}} FullGame days left"},sidebar$a={upgradeBtn:"Upgrade Individually",upgradeTooltip:"Upgrade to unlock limits",helpBtn:"User Guide",helpTooltip:"View user guide",noticeTitle:"Note:",poseQuizNotice:"This game is intended for whole-class projection for students to <strong>PERFORM MOVEMENTS</strong>, NOT to use the camera for answer verification. The projection is controlled by the teacher or set to automatic timing.",upgradeLabel:"Upgrade",helpLabel:"Help",bugReportLabel:"Report Bug"},offline$1={downloadBtn:"Download Offline",linkBtn:"Offline Link",buyTooltip:"Buy lifetime Offline version",viewLinkTooltip:"Click to view offline download link"},pin$1={note:"📌 Pin your favorite {{item}} — you will always be able to use them for free",room:"rooms",wheel:"wheels",lesson:"lessons",image:"images",crossword:"crosswords",robot:"robots",pinned:"📌 Pinned!",unpinned:"📍 Unpinned",limitReached:"📌 Only a maximum of {{limit}} {{item}} can be pinned",pinnedLabel:"pinned"},form$q={answer:"Answer",question:"Question",questionContent:"Question Content",timeLimit:"Time limit per question (sec)",timeLimitHelper:"Minimum 7 sec. Recommended: 15-25 sec.",errorMinTimeLimit:"Minimum time limit per question is 7 seconds."},library$3={errorMetadataRequired:"Please select School Level, Subject, and Grade to publish to the Community Library."},status$1={notEntered:"Empty",notFound:"Not found"},error$7={occurred:"An error occurred"},tts={listenBtn:"Listen",stopBtn:"Stop",notSupportedTooltip:"Your browser does not support Vietnamese text-to-speech. Try Chrome or Edge.",deviceN
521ote:"The read-aloud feature depends on your browser and device",notAvailable:"Your device does not yet support Vietnamese voice reading. This is a browser limitation, not a website issue. Try using Google Chrome."},actions$6={assign:"Assign",teacherShare:"Share with Teachers",renew:"Renew",prevPage:"← Previous",nextPage:"Next →",pageInfo:"Page {{page}}",edit:"Edit",delete:"Delete",play:"Play",view:"View",share:"Share"},listTools$1={searchPlaceholder:"Search lessons...",clear:"Clear search",sortLabel:"Sort",sortNewest:"Newest",sortOldest:"Oldest",sortNameAsc:"Name A→Z",sortNameDesc:"Name Z→A",sortMostQuestions:"Most questions",noResults:"No matching lessons found"},shuffleQuestions$1={label:"Shuffle question order",desc:"Questions appear in a different order each time you play"},groups$2={createButton:"+ New group",createTitle:"Create new group",renameTitle:"Rename group",namePlaceholder:"Group name (e.g. IT Grade 6)",save:"Save",cancel:"Cancel",createSuccess:"Group created",createError:"Could not create group",renameSuccess:"Group renamed",deleteConfirm:"Delete this group? Lessons inside will be moved out, not deleted.",deleteSuccess:"Group deleted",deleteError:"Could not delete group",countLabel:"{{count}} lessons",back:"← Back",moveToGroup:"Move to group",moveSuccess:"Lesson moved",moveError:"Could not move lesson",removeFromGroup:"Move out",noGroup:"Ungrouped",rename:"Rename",delete:"Delete group",emptyGroup:"This group has no lessons yet. Move lessons in from the menu on each lesson card.",inGroupLabel:"📁 {{name}}"},search$1={tab:"Search",title:"Search your lessons",placeholder:"Type a lesson name (all tools)...",loading:"Loading your lessons...",noResults:"No matching results found",empty:"You have no lessons yet",untitled:"(Untitled)",groupFeatures:"Features",groupLessons:"My lessons",labelFeature:"Open"},ttsModal$1={title:"✨ Requirements for AI Voiceover Feature",langModeTitle:"Which language should AI read the content in?",langVi:"AI reads Vietnamese",langViDesc:"Questions containing accented Vietnamese",langEn:"AI reads English",langEnDesc:"Questions in English (English subject...)",skipForEn:"✅ Skip when reading English",step1SkippedDesc:"No Vietnamese voice needed when AI reads English.",checking:"Checking...",step1Title:"1. Vietnamese language pack installed on your system",step1TitleEn:"1. English voice pack on your system",step1Success:"System has Vietnamese voice installed",step1SuccessEn:"✅ System has an English voice installed",step1Needed:"You need to install the Vietnamese language pack in Windows so the browser can read it.",step1NeededEn:"Your browser doesn't have an English voice yet. Try using Microsoft Edge.",step1GuideBtn:"Add AI Voice (Video Guide)",step2Title:"2. Use Microsoft Edge browser",recommended:"Recommended",step2Using:"✅ You are using {{name}}",step2Warning:"⚠️ You are currently using {{name}}",step2EdgeOk:"Edge has the most natural AI voice and doesn't use data bandwidth.",step2EdgeHint:"Microsoft Edge has more natural voices than Chrome and doesn't use data bandwidth.",step3Title:"3. FullGame account required",step3Success:"You are a FullGame PLAN user",step3Needed:"This feature requires a FullGame PLAN subscription.",step3UpgradeBtn:"Get FullGame now",toolTitle:"Or use our AI voice generator tool",toolDesc:"You can also generate speech using our dedicated AI tool, download the .mp3 file, and upload it manually to each question.",toolBtn:"AI Voice Generator Tool",proRequired:"FullGame account required",closeBtn:"Close",gotItBtn:"Got it"},classManager$1={title:"Class manager",subtitle:"This class list is shared across every feature that uses classes. Click a class to edit details and attach student photos.",detailTitle:"Class details",emptyDesc:"You have no classes yet. Create one from a feature page (Wheel Quiz or Paper Mode), then come back here to manage it in detail.",studentCount:"{{count}} students",labelClassName:"Class name",labelClassPhoto:"Class group photo",labelStudents:"Student list",hintShared:"Edits here show up in every feature that uses this class.",warnTooManyClasse
521s:"You have more than {{max}} classes, which may limit how some features work. Consider deleting classes you no longer use.",hintUnsaved:"You have unsaved changes. Leaving now will discard them (including photos you just picked).",placeholderName:"Full name",emptyRows:'No students yet. Click "Add student" or "Paste from Excel".',btnSave:"Save",btnSaving:"Saving...",btnCancel:"Cancel",btnOpen:"Open class",btnPlayGame:"Run a game",playGameHint:"Pick a feature to open, then select this class there",playGameWheel:"Wheel Quiz / Duck Race",playGameFaceRandom:"Photo Roll Call",playGamePaperMode:"Paper Mode",btnDeleteClass:"Delete class",confirmDeleteTitle:"Delete this class?",confirmDeleteMsg:'Class "{{name}}" will be permanently deleted, along with its student list and all attached photos. This cannot be undone.',successDeleteClass:"Class deleted",errorDeleteClass:"Could not delete the class. Please try again.",btnAddStudent:"Add student",btnAdd:"Add",btnClose:"Close",addTitle:"Add student",addHint:"{{current}}/{{max}} students so far. Press Enter to keep adding.",labelStudentName:"Student full name",tooltipMoveUp:"Move up",tooltipMoveDown:"Move down",btnShowPhotos:"Show photos",btnHidePhotos:"Hide photos",chipHasPhoto:"Has photo",chipPhotoPending:"Pending save",notePhotoOptional:"Student photos are only needed for a few specific features — they are entirely optional.",btnSplitPhoto:"Cut student photos from class photo",splitTitle:"Cut student photos from the class photo",splitHint:"Drag the slider to set the ring size, then click each student's face to pick their name. If faces look too small, scroll on the photo to zoom in, then drag to move around. Cut photos wait for you to press Save.",splitSize:"Ring size",splitZoomIn:"Zoom in (or scroll up)",splitZoomOut:"Zoom out (or scroll down)",splitZoomReset:"Fit to frame",splitPxHint:"Actual size of the crop area. {{out}}px or more stays sharp; below that the photo gets enlarged and looks soft.",splitBigExtra:"That photo is quite large, so panning and zooming may feel slow. That is expected — the closer to the original, the sharper the cut faces.",infoBigPhoto:"That photo is {{mb}}MB, so it takes a moment to process. Please wait — a larger original gives sharper cut photos.",splitLowRes:'The selected area is only {{px}}px, so the cut photo will look soft. To fix: drag the slider for a bigger ring, or click "Add photo to cut" and pick the ORIGINAL file from your device — originals keep full detail and cut far better than the saved class photo.',splitNoStudent:"This class has no students yet",splitErrorLoad:"Could not read the class photo for cutting. Try re-uploading the class photo, then cut right away.",btnFullscreen:"Fullscreen",btnExitFullscreen:"Exit fullscreen",splitAddSource:"Add photo to cut from",splitSourceMain:"Class photo",splitSourceExtra:"Extra",splitExtraNote:"Extra photos are only used for cutting — they are not saved.",splitDoneHint:"{{n}} photo(s) cut — remember to press Save on the page to keep them.",btnDone:"Done",tooltipPhotoPending:"Newly picked photo — press Save to upload",confirmLeave:"You have unsaved changes (including photos you just picked). Leaving will discard them. Leave anyway?",errorEmptyName:"Please enter a student name",btnPaste:"Paste from Excel",btnApplyPaste:"Apply",btnAddClassPhoto:"Add class photo",btnPrune:"Clean up {{count}} unused photos",tooltipPrune:"{{count}} photos belong to students no longer in the list. Click to delete them.",tooltipPhoto:"Click to pick a photo for this student",tooltipRemovePhoto:"Remove student photo",tooltipRevealPhoto:"Click to view this student's photo",tooltipHidePhoto:"Click to hide the photo again",tooltipRemoveRow:"Remove student from class",uploading:"Uploading...",pasteTitle:"Paste list from Excel",pasteWarning:"The pasted list REPLACES the entire current list. Students with matching names keep their photos.",pastePlaceholder:"Paste the name column here, one student per line...",successSave:"Class saved",successPrune:"Cleaned up {{count}} unused photos",prunedNone:"No unused photos",errorLoad:"Could not load classes",errorNotFound:"Class not found",errorSave:"Failed to save class",errorName:"Please enter a class name",errorMinStudent:"A class needs at least 1 student",errorOverLimit:"Exceeds the limit of {{max}} students per class",errorPhoto:"Photo operation failed",errorPasteEmpty:"No names found in the pasted text",errorConsent:"Could not save your commitment. Please try again.",btnPurge:"Delete all photos",tooltipPurge:"Delete every portrait and the group photo of this class",confirmPurgeTitle:"Delete all photos of this class?",confirmPurgeMsg:"Every student portrait and the class group photo will be permanently deleted. The student list and class 
521name stay unchanged. This cannot be undone.",successPurge:"All photos of this class have been deleted."},photoConsent$1={title:"Commitment on using student photos",forClass:"Class: {{name}}",warning:"Student portrait photos are sensitive personal data. For students under 16, the law requires consent from a parent or legal guardian.",intro:"By continuing, you confirm that:",item1:"You have obtained consent from the student’s parent or legal guardian to use their photo for teaching activities.",item2:"The photos are used only for teaching activities in this class — not published publicly, not used for commercial purposes.",item3:"You will delete the photos when a parent withdraws consent, or when they are no longer needed for teaching.",item4:"Only your account can view these photos — the platform does not share them with other users.",checkbox:"I confirm I have parental/guardian consent and take responsibility for the commitments above.",btnCancel:"Cancel",btnAgree:"I commit & continue",btnSaving:"Saving..."},mathKeyboard={title:"Insert Formula",tabs:{symbols:"Symbols",expression:"🧩 Expression",latex:"LaTeX"},groups:{basic:"Basic",geometry:"Geometry",sets:"Sets",logic:"Arrows & Logic",greek:"Greek"},symbols:{plusMinus:"Plus-minus",times:"Multiply",divide:"Divide",notEqual:"Not equal",approx:"Approximately equal",lessEqual:"Less than or equal to",greaterEqual:"Greater than or equal to",infinity:"Infinity",pi:"Pi",degree:"Degree",angle:"Angle",triangle:"Triangle",perp:"Perpendicular",parallel:"Parallel",circle:"Circle",vector:"Vector",in:"Element of",notIn:"Not an element of",subset:"Subset",cup:"Union",cap:"Intersection",emptySet:"Empty set",reals:"Real numbers",integers:"Integers",naturals:"Natural numbers",implies:"Implies",leadsTo:"Yields",equiv:"Equivalent",forAll:"For all",exists:"Exists"},templates:{frac:{name:"Fraction",num:"Numerator",den:"Denominator"},pow:{name:"Exponent",base:"Base",exp:"Power"},sub:{name:"Subscript",base:"Expression",sub:"Index"},subsup:{name:"Sub+Superscript",base:"Expression",sub:"Subscript",sup:"Superscript"},sqrt:{name:"Square root",inner:"Expression"},nrt:{name:"N-th root",n:"Degree",inner:"Expression"},lim:{name:"Limit",var:"Var→Value",expr:"Expression"},sum:{name:"Sum",from:"From",to:"To",expr:"Expr"},int:{name:"Integral",from:"Lower",to:"Upper",expr:"Expr"}},textSegment:"Text",textPlaceholder:"e.g.: + , = , ...",emptyPreview:"Click buttons below to start building expression...",quickInsert:"Quick insert:",selectElementToAdd:"Select element type to add:",addElement:"+ Add element",hint:"Tab to navigate · Ctrl+Enter to insert · Supports LaTeX in slots (e.g., x+1, \\alpha)",clearAll:"Clear all",insertFormula:"Insert formula",latexPlaceholder:"Enter LaTeX directly, e.g.: \\frac{a}{b} + \\sqrt{c}",ctrlEnterHint:"Ctrl+Enter to insert",deleteTitle:"Delete",addTitle:"Add element",cancel:"Cancel"},groupPurchaseModal={title:"Group Purchase — Extra Discounts",stepEmail:"Enter emails",stepConfirm:"Confirm",stepPayment:"Payment",infoAlert:"Purchase <strong>{{featureName}}</strong> for multiple users — your email is automatically included.",buyerLabel:"{{email}} (you)",memberCount:"+ {{count}} other emails = <strong>{{total}} people</strong>",placeholder:`Enter colleague emails separated by commas or new lines...
522Example:
523[email protected]
524[email protected], [email protected]`,uploadBtn:"📎 Upload Excel/CSV",exportTemplateBtn:"📥 Export Template",invalidEmail
524s:"Skipped {{count}} invalid emails: {{emails}}",overLimit:"Maximum {{max}} people (excluding yourself). Please remove some emails.",promoPlaceholder:"Discount code (if any)...",promoDelete:"Delete",promoApply:"Apply",promoRequired:"Please enter a code",promoInvalid:"Invalid or non-existent promo code!",promoApplied:"✅ Code {{code}}: -{{discount}}%",summaryTitle:"💰 Discount Summary",originalPrice:"Original price: {{price}}đ",promoDiscount:"Promo code: -{{discount}}%",multiYearDiscount:"{{years}} years: -{{discount}}%",groupDiscount:"Group of {{count}} people: -{{discount}}%",bonusMonths:"🎁 Month {{month}} special: +{{count}} months/person",totalDiscount:"Total discount: <strong>-{{discount}}%</strong> → Per person: <strong>{{price}}đ/{{period}}{{bonus}}</strong>",yearPeriod:"year",multiYearPeriod:"{{years}} years",bonusSuffix:" +{{count}}mo",totalPayment:"Total payment: {{price}}đ",yearsTitle:"Subscription duration",yearsButton:"{{years}} years",yearsDiscountBadge:"-{{discount}}%",groupTableTitle:"Additional group discounts",groupPeople:"{{count}} people",confirmListTitle:"List of {{total}} people who will be granted access to <strong>{{featureName}}</strong> ({{years}} years):",youSuffix:" (you)",confirmTotal:"💳 Total: {{price}}đ",perPersonSummary:"Per person: {{price}}đ / {{years}} years{{bonus}}",bonusMonthsSuffix:" +{{count}} months",unregisteredHint:"Unregistered emails will automatically be activated when they log in for the first time.",transferLabel:"⚠️ Transfer reference (DO NOT modify):",paymentSummary:"{{count}} people × {{years}} years — total discount {{discount}}%",bankLabel:"Bank:",accountNoLabel:"Account No:",accountNameLabel:"Account Name:",waitingText:"Waiting for payment — system will process automatically...",successTitle:"Unlocked for {{processed}}/{{total}} people!",failedEmails:"{{count}} failed emails: {{emails}}",reloadHint:"Page will reload in 2 seconds...",close:"Close",previewNext:"Preview & Confirm →",back:"← Back",confirmCreating:"Creating...",confirmCreateQR:"Confirm — Generate Payment QR",paidReload:"PAID (RELOAD)",errorPrefix:"Error: {{message}}",unlockSuccessToast:"Unlocked for {{processed}}/{{total}} people!",templateFileName:"group-purchase-email-list.xlsx",sheetName:"Email list"},btn={cancel:"Cancel",upgrade:"Upgrade",backToList:"Back to list"},confirmDeleteAll$3="Are you sure you want to delete all questions?",expiredBanner={title:"⚠️ Your plan has expired!",upgrade:"Renew"},questionPicker={title:"Select questions for {{feature}}"},enCommon={cancel:cancel$5,save:save$1,nav:nav$3,header:header$1,proModal:proModal$1,upgradeModal:upgradeModal$1,internationalModal:internationalModal$1,language:language$1,externalTools:externalTools$1,usage:usage$1,sidebar:sidebar$a,offline:offline$1,pin:pin$1,form:form$q,library:library$3,status:status$1,error:error$7,tts,actions:actions$6,listTools:listTools$1,shuffleQuestions:shuffleQuestions$1,groups:groups$2,search:search$1,ttsModal:ttsModal$1,classManager:classManager$1,photoConsent:photoConsent$1,mathKeyboard,groupPurchaseModal,btn,confirmDeleteAll:confirmDeleteAll$3,expiredBanner,questionPicker},nav$2={logo:"Innovative Teacher",aiTools:"AI Tools",joinBtn:"🎮 Join (for students)",loginBtn:"Login",bugReportBtn:"Report a Bug"},hero$5={title:"Innovative Teacher",subtitle:"Teaching games, AI tools and more",description:"A platform for tech-savvy teachers, providing smart teaching tools to optimize classroom instruction",loginCta:"Login Now - No registration needed!",joinCta:"🎮 Join (for students)",qrScanCta:"Scan QR code"},features$3={sectionTitle:"Teaching Tools",sectionSubtitle:"Explore modern educational tools to enhance your teaching quality",tools:{aiTools:{title:"AI Tools",description:"AI tools for writing reports, lesson plans, integration with NLS, and many other AI features"},aiSpecialist:{title:"Specialized AI",description:"AI designed for advanced educational tasks"},interactiveVideo:{title:"Interactive Video",description:"Create learning videos with interactive multiple-choice questions"},interactiveImage:{title:"Interactive Image",description:"Add touch points on images with Quiz questions or worksheets — students interact directly on the image"},panoramaMuseum:{title:"Panorama Museum - 3D Art Gallery",description:"View 3D exhibitions with interactive 360° panorama images"},quizGame:{title:"Drag & Drop - Matching",description:"Create drag-and-drop label quizzes on images or match items by dragging"},companionRobot:{title:"Companion Robot",description:"Smart AI robot that accompanies students throughout the lesson"},wheelQuiz:{title:"Spin Wheel - Duck Race",description:"Spin the wheel or race ducks to pick random students, combined with fun multiple-choice questions"},handSlashQuiz:{title:"Fruit Ninja Quiz",description:"Interactive multiple-choice game using hand gestures in Fruit Ninja style"},flipPuzzleGame:{title:"Flip Puzzle Game",description:"Students answer questions to reveal puzzle pieces, guess the picture name to win"},turnBasedGame:{title:"Turn-Based Game",description:"Roll the dice, move characters, and overcome obstacles with questions. Suitable for 2-4 players on a 
524single device."},versusGame:{title:"Versus Game",description:"Students compete 1v1 on their own devices — answer correctly to push the opponent back. Teachers open rooms and monitor live."},tugOfWarGame:{title:"Tug of War - Dragon Boat",description:"Two teams compete by answering questions to win in an exciting traditional game"},pacedQuiz:{title:"Paced Quiz",description:"Teacher creates a quiz and controls the pace on the projector screen"},crosswordPuzzle:{title:"Crossword",description:"Create crosswords with multiple-choice questions, students answer to unlock rows and find keywords"},flyingWordsGame:{title:"Flying Words",description:"Catch the flying words (by hand or mouse) to arrange/find the right words to form a complete sentence"},headTiltQuiz:{title:"Head Tilt Quiz",description:"Students tilt their head left or right to choose answers, detected via camera"},starBagGame:{title:"Star Bag",description:"Two teams compete by raising fingers to choose answers — answer correctly to collect stars and win"},poseQuiz:{title:"ABC Exercise",description:"Students perform exercise poses based on illustrations while answering multiple-choice questions"},noiseTracker:{title:"Sleeping Dragon - Class Manager",description:"A dragon sleeps in a quiet class and wakes up when it's noisy — a fun classroom management game using the microphone"},journey:{title:"Learning Journey",description:"Create learning journeys with stages and quizzes — students compete along a path"},paperMode:{title:"Paper Mode",description:"Scan paper cards for quick checks and roll calls — Plickers-style"},faceRandom:{title:"Lucky Lens",description:"Scan student faces to randomly call on them and combine with multiple-choice questions"},htmlEmbedGame:{title:"Custom Game",description:"Paste an HTML game's code and let students play it instantly — no coding needed"},"scavenger-hunt":{title:"Scavenger Hunt",description:"Combine multiple lessons into one scavenger hunt – students collect letters to solve the secret keyword"}}},paperModeBeta$3="Scan A/B/C/D paper cards with your camera — grade the whole class in seconds, no student devices needed",betaBadge$3="🧪 Testing Mode",footer$5={ownerLabel:"Owner",ownerName:"Ban Van Thinh",ownerAddress:"Vinh Tuy, Tuyen Quang province, Vietnam",ownerTax:"Tax ID: 002090004198",connectLabel:"Connect",legalLabel:"Legal",policy1:"💰 Pricing",policy2:"🔒 Privacy Policy",policy3:"📜 Terms of Use",policy4:"🚚 Delivery Policy",policy5:"👤 Owner Info",copyright:"© 2025 Developed by Thầy Giáo Tin",buildTime:"Updated at {{time}} on {{date}}",facebook:"Facebook",tiktok:"TikTok",youtube:"Youtube",zalo:"Zalo",zaloCommunity:"Zalo Community",email:"Email",guide:"Guide",guideTooltip:"View user guide"},webviewModal$1={title:"⚠️ Cannot login in this app",intro:"You are opening the page via Zalo / Messenger. To log in, please open in a external browser as instructed below:",step1:"Step 1: Tap the ⋮ menu in the top right",step2:'Step 2: Choose "Open in browser"',btnClose:"Close"},emailModal$3={title:"Email address",btnClose:"Close"},loading$1="Loading tool...",enLanding={nav:nav$2,hero:hero$5,features:features$3,paperModeBeta:paperModeBeta$3,betaBadge:betaBadge$3,footer:footer$5,webviewModal:webviewModal$1,emailModal:emailModal$3,loading:loading$1},heroTitle$3="Innovate teaching and working methods together",modules$1={"ai-tools":{title:"AI Tools",description:"AI tools for writing action research, teaching measures, integrating NLS,... and many other AIs"},"ai-specialist":{title:"Specialized AI",description:"AI for writing scientific research reports, describing AI products and supporting the creation of educational products"},"interactive-video":{title:"Interactive Video",description:"Create learning videos with interactive multiple-choice questions"},"interactive-image":{title:"Interactive Image",description:"Place touch points on images with Quiz questions or worksheets — students interact directly on the image"},"panorama-museum":{title:"Panorama Museum - 3D Art Gallery",description:"View 3D exhibitions with interactive 360-degree panorama images"},"quiz-game":{title:"Drag & Drop - Matching",description:"Create drag-and-drop label quizzes on images or match items by dragging"},"wheel-quiz":{title:"Spin Wheel - Duck Race",description:"Spin the wheel or race ducks to pick random students, combined with fun multiple-choice questions"},"hand-slash-quiz":{title:"Fruit Ninja Quiz",description:"Interactive multiple-choice game using hand gestures in Fruit Ninja style"},"flip-puzzle-game":{title:"Flip Puzzle Game",description:"Students answer questions to reveal puzzle pieces, guess the picture name to win"},"knowledge-train-game":{title:"Knowledge Train",description:"Drag and drop the wagons into the correct order — match each answer to the next question"},"turn-based-game":{title:"Turn-Based Game",description:"Roll the dice, move characters, and overcome obstacles with questions. Suitable for 2-4 players on a 
524single device."},"versus-game":{title:"Versus Game",description:"Students compete 1v1 on their own devices — answer correctly to push the opponent back. Teachers open rooms and monitor live."},"tug-of-war-game":{title:"Tug of War - Dragon Boat",description:"Two teams compete by answering questions to win in an exciting traditional game"},"paced-quiz":{title:"Paced Quiz",description:"Teachers create multiple-choice quizzes, controlling the pace on the projector"},"crossword-puzzle":{title:"Crossword",description:"Create crosswords with multiple-choice questions, students answer to unlock rows and find keywords"},"head-tilt-quiz":{title:"Head Tilt Quiz",description:"Students tilt their head left or right to choose answers, detected via camera"},"star-bag-game":{title:"Star Bag",description:"Two teams compete by raising fingers to choose answers — answer correctly to collect stars and win"},minesweeper:{title:"Minesweeper",description:"Students choose the tile with the correct answer to cross the minefield — adventure quiz with 3 lives; step on a mine and it blows up"},flashcard:{title:"Flip Cards (Flashcard)",description:"Create flashcard decks with audio & images — flip cards, self-assess, study until mastered"},"mind-map":{title:"Mind Map Builder",description:"Capture knowledge live during class via a floating sticker — auto-generates a complete mind map at the end, zoomable & exportable"},"pose-quiz":{title:"ABC Exercise",description:"Students perform exercise poses based on illustrations while answering multiple-choice questions"},"noise-tracker":{title:"Sleeping Dragon - Class Manager",description:"A dragon sleeps in a quiet class and wakes up when it's noisy — a fun classroom management game using the microphone"},"flying-words-game":{title:"Flying Words",description:"Catch the flying words (by hand or mouse) to arrange/find the right words to form a complete sentence"},"teaching-materials":{title:"Mr. Tin's Courses",description:"Repository of lesson plans, slides, and reference materials for teachers"},journey:{title:"Learning Journey",description:"Create learning journeys with stages and quizzes — students compete along a path"},"paper-mode":{title:"Paper Mode",description:"Scan paper cards for quick checks and roll calls — Plickers-style"},"face-random":{title:"Lucky Lens",description:"Scan student faces to randomly call on them and combine with multiple-choice questions"},"html-embed-game":{title:"Custom Game",description:"Paste HTML game code and assign it to students to play instantly — no coding required"},"scavenger-hunt":{title:"Scavenger Hunt",description:"Combine multiple lessons into one scavenger hunt – students collect letters to solve the secret keyword"}},comingSoon$1="Coming soon",startBtn$1="Start",lockedBtn$1="Locked",trialBtn$1="🎁 Free trial",updatingBadge$1="🔧 Feature updating",journeyModal$1={title:"Learning Journey",lockLabel:"🔒 Premium Feature",intro:"Learning Journey allows teachers to create interactive paths with multiple stages, each containing a set of multiple-choice questions. Students compete through each stage to complete the journey.",featuresTitle:"✨ Key Features:",feature1:"Create journeys with multiple stages",feature2:"4 question types: Multiple Choice, Multiple Answers, True/False, Fill in Blank",feature3:"Assign via room code",feature4:"Detailed results for each student",feature5:"Auto-save to Question Bank",videoTitle:"🎬 Tutorial Video:",upgradeBtn:"🔓 Upgrade Now — 30,000đ/year"},versusModal$1={title:"Versus Game",lockLabel:"🔒 FullGame Feature",intro:"Versus Game allows students to compete 1v1 directly on their own devices. Answer correctly to push the opponent back — first to reach the goal wins!",featuresTitle:"✨ Key Features:",feature1:"Students use separate devices — no screen-sharing needed",feature2:"Teachers open rooms, share codes, and monitor live",feature3:"Real-time stick-pushing effects based on scores",feature4:"Teachers see both sides' questions simultaneously",feature5:"Auto-save results to submission list",videoTitle:"
524🎬 Video Guide:",upgradeBtn:"🔓 Upgrade Now — 30,000đ/year"},htmlEmbedModal={title:"HTML Embed Game",lockLabel:"🔒 FullGame Feature",intro:"The HTML Embed Game feature allows you to directly embed HTML code of games or iSpring, Articulate Storyline files so students can play directly on the system without leaving the classroom.",featuresTitle:"✨ Key Features:",feature1:"Quickly embed HTML game code from other sources",feature2:"Support SCORM, iSpring, Articulate packages",feature3:"Students play directly on the platform interface",feature4:"Flexible and precise full-screen zoom",feature5:"Assign tasks to students to experience right on the system",videoTitle:"🎬 Video Guide:",upgradeBtn:"🔓 Upgrade Now — 30,000đ/year"},footer$4={ownerLabel:"Owner",ownerName:"Ban Van Thinh",ownerAddress:"Vinh Tuy, Tuyen Quang province, Vietnam",ownerTax:"Tax ID: 002090004198",connectLabel:"Connect",legalLabel:"Support & Legal",utilsLabel:"Utilities",policy1:"💰 Pricing",policy2:"🔒 Privacy Policy",policy3:"📜 Terms of Use",policy4:"🚚 Delivery Policy",policy5:"👤 Owner Info",guide:"Guide",guideTooltip:"View user guide",fixError:"Fix error",fixErrorTooltip:"Use when stuck on old version or loading error",confirmReset:"This will clear old data and reload the latest version (login required). Are you sure?",copyright:"© 2025 Developed by Thầy Giáo Tin",buildTime:"Updated at {{time}} on {{date}}"},emailModal$2={title:"Email address",btnClose:"Close"},helpModal$2={title:"Home Page Guide",description:"Learn about the features and tools available on the platform"},paperModeBeta$2="Scan A/B/C/D paper cards with your camera — grade the whole class in seconds, no student devices needed",betaBadge$2="🧪 Testing Mode",enHome={heroTitle:heroTitle$3,modules:modules$1,comingSoon:comingSoon$1,startBtn:startBtn$1,lockedBtn:lockedBtn$1,trialBtn:trialBtn$1,updatingBadge:updatingBadge$1,journeyModal:journeyModal$1,versusModal:versusModal$1,htmlEmbedModal,footer:footer$4,emailModal:emailModal$2,helpModal:helpModal$2,paperModeBeta:paperModeBeta$2,betaBadge:betaBadge$2},logoText$1="Innovative Teacher",logoSubtitle$1="Videos, educational games and more",loginTitle$1="Log in",loginDescription$1="Log in to start creating interactive lessons for your students",loggingInBtn$1="Logging in...",loginGoogleBtn$1="Log in with Google",loginNote$1="By logging in, you agree to our Terms of Service and Privacy Policy.",loginFooterText$1="For teachers and students",highlightTools$1="A library of interactive teaching tools",highlightAI$1="AI assistant for lesson planning, integration, writing reports, ...",highlightSimulation$1="Visual simulations (3D, 2D, motion, ...) for your lessons",highlightClassroom$1="Homeroom class management",highlightFree$1="Ready to use, no installation needed",loginFailed$1="Login failed: {{error}}",pleaseTryAgain$1="Please try again.",loginNotePrefix$1="By logging in, you agree to our",loginNoteTerms$1="Terms of Service",loginNoteAnd$1="and",loginNotePrivacy$1="Privacy Policy",loginNoteSuffix$1=".",disclaimerCopyright$1="By uploading any image, audio, or data file, you confirm that you legally own it or have permission from the copyright holder. The system has full authority to remove, without prior notice, any content that is reported, suspected of infringement, or in violation of the law or copyright. The platform disclaims all liability for violations caused by users.",disclaimerConsent$1="By logging in, you agree to the above terms.",consentCheckboxLabel$1="I have read and agree to the Terms of Service, Privacy Policy, the content copyright commitments, and the responsibilities regarding student photos and information stated above.",consentRequired$1="Please check the consent box before logging in.",disclaimerStudentPhoto$1="If you upload student photos or names, you confirm you have consent from a parent or legal guardian (required for students under 16), that you will use them only for teaching activities in your own class, and that you will delete them once no longer needed.",popupHint$1="If you don't see the sign-in window, check the taskbar at the bottom of your screen",errInvalidCredential$1="Your Google session in this browser has expired. Please clear your cookies and sign in again.",errPopupBlocked$1="Your browser blocked the Google sign-in window. Click the blocked-popup icon at the right of the address bar, choose Always allow, then try again.",errPopupClosed$1="You closed the Google sign-in window before choosing an account. Please click Sign in with Google again.",errCookiesBlocked$1="Your browser is blocking cookies, so Google sign-in cannot complete. Please clear your cookies and try again.",errNetwork$1="The connection dropped during sign-in. Please check your Wi-Fi or mobile data and try again.",errTooManyRequests$1="Too many sign-in attempts. Please wait a few minutes and try again.",errUserDisabled$1="This account has been disabled. Please contact an administrator for help.",errWebView$1="You opened this page inside the Zalo/Facebook app, where Google sign-in is not allowed. Tap the three dots in the top right, choose Open in browser, then sign in again.",errUnknown$1="Sign-in failed. The most common cause is stale browser cookies. Try clearing your cookies and signing in again.",errCodeHint$1="Error code: {{code}}",cookieHelpBtn$1="📋 How to clear cookies",cookieHelpTitle$1="HOW TO CLEAR COOKIES",cookieHelpStep1$1="Open the page that is failing.",co
524okieHelpStep2$1="Press <b>Ctrl + Shift + Del</b> (the Delete key).",cookieHelpStep3$1="The <b>Delete browsing data</b> panel opens (see image below). Uncheck everything and <b>leave only the second row checked</b>.",cookieHelpStep4$1="At the top right of the panel choose <b>More</b>, then <b>All time</b>. Then click <b>Delete data</b> at the bottom right.",cookieHelpStep5$1="When finished, <b>close Chrome/Cốc Cốc completely</b>, then open it again.",cookieHelpImgAlt$1="Screenshot of the Chrome Delete browsing data panel",cookieHelpClose$1="Got it",enLogin={logoText:logoText$1,logoSubtitle:logoSubtitle$1,loginTitle:loginTitle$1,loginDescription:loginDescription$1,loggingInBtn:loggingInBtn$1,loginGoogleBtn:loginGoogleBtn$1,loginNote:loginNote$1,loginFooterText:loginFooterText$1,highlightTools:highlightTools$1,highlightAI:highlightAI$1,highlightSimulation:highlightSimulation$1,highlightClassroom:highlightClassroom$1,highlightFree:highlightFree$1,loginFailed:loginFailed$1,pleaseTryAgain:pleaseTryAgain$1,loginNotePrefix:loginNotePrefix$1,loginNoteTerms:loginNoteTerms$1,loginNoteAnd:loginNoteAnd$1,loginNotePrivacy:loginNotePrivacy$1,loginNoteSuffix:loginNoteSuffix$1,disclaimerCopyright:disclaimerCopyright$1,disclaimerConsent:disclaimerConsent$1,consentCheckboxLabel:consentCheckboxLabel$1,consentRequired:consentRequired$1,disclaimerStudentPhoto:disclaimerStudentPhoto$1,popupHint:popupHint$1,errInvalidCredential:errInvalidCredential$1,errPopupBlocked:errPopupBlocked$1,errPopupClosed:errPopupClosed$1,errCookiesBlocked:errCookiesBlocked$1,errNetwork:errNetwork$1,errTooManyRequests:errTooManyRequests$1,errUserDisabled:errUserDisabled$1,errWebView:errWebView$1,errUnknown:errUnknown$1,errCodeHint:errCodeHint$1,cookieHelpBtn:cookieHelpBtn$1,cookieHelpTitle:cookieHelpTitle$1,cookieHelpStep1:cookieHelpStep1$1,cookieHelpStep2:cookieHelpStep2$1,cookieHelpStep3:cookieHelpStep3$1,cookieHelpStep4:cookieHelpStep4$1,cookieHelpStep5:cookieHelpStep5$1,cookieHelpImgAlt:cookieHelpImgAlt$1,cookieHelpClose:cookieHelpClose$1},page$j={sidebarTitle:"🪢 Knowledge Tug of War",newGame:"Create New Game",myGames:"My Tug of Wars",viewGuideTooltip:"View user guide",guideLabel:"User Guide",guideLabelShort:"Guide",guideTitle:"Tug of War Guide",guideDesc:"Learn how to create Tug of War games for students to compete"},share$7={loadingGame:"Loading Tug of War game...",loadError:"Could not load the game. The link may have expired or been deleted.",notFound:"Game not found",backHome:"Back to Home"},myGames$e={loadListError:"❌ Error loading game list",deleteConfirm:"Are you sure you want to delete this game?",deleteSuccess:"✅ Game deleted",deleteError:"❌ Error deleting game",loadingList:"⏳ Loading game list...",myGamesCount:"🪢 My Games ({{count}})",noGames:"📭 No games yet",createFirstGame:"➕ Create First Game",questionCount:"{{count}} questions",playTest:"Play test",assign:"Assign task",edit:"Edit",delete:"Delete",lockedTip:"Upgrade to unlock this game",extendSubscription:"Renew 30k/year",expiredLabel:"Subscription expired!",downloadOffline:"Download",downloadOfflineUpgrade:"Upgrade to download",downloading:"Downloading...",downloadOfflineError:"❌ Could not create the download file, please try again",demo:{title:"Tug of War - Demo",badge:"Demo",hint:"Try this demo to experience the game before creating your own"}},teamPlay$1={loading:"Loading...",teamBlue:"Blue Team",teamRed:"Red Team",freeze:"Frozen!",punishment:"Penalty for wrong answer"},form$p={addQuestionSuccess:"✅ Added {{count}} questions (Total: {{total}})",updateQuestionSuccess:"✅ Question updated",removeQuestionMsg:"🗑️ Deleted question {{index}}",clearAllConfirm:"Delete all questions?",clearAllSuccess:"🗑️ Deleted all questions",titleRequired:"❌ Please enter a game title",minQuestionsRequired:"❌ Please add at least 5 questions (current: {{count}})",updateGameSuccess:"✅ Game updated!",createGameSuccess:"✅ New Tug of War game created!",limitReached:"⚠️ You have used up your free Tug of War quota. Please upgrade to continue.",saveError:"❌ Error saving game: {{error}}",testRequireQuestions:"⚠️ Please add questions before testing",untitledGame:"Untitled Tug of War",editGameTitle:"Edit Tug of War",createGameTitle:"Create new Tug of War",trialCount:"📌 Used {{current}}/{{limit}} creations",premiumStatus:"✅ You are on Premium mode - Unlimited",proStatus:"✅ You are on FullGame mode - Unlimited",formTitleLabel:"Game Title:",formTitlePlaceholder:"Enter title...",configSectionTitle:"⚙️ Game Configuration",team1NameLabel:"Team 1 Name:",team2NameLabel:"Team 2 Name:",timeLimitLabel:"Time Limit (seconds):",time30s:"30 seconds",time60s:"60 seconds (Standard)",time90s:"90 seconds",time120s:"120 seconds",time180s:"3 minutes",time300s:"5 minutes",time600s:"10 minutes",time900s:"15 minutes",time1200s:"20 minutes",winDiffLabel:"Point difference to win:",wrongFreezeTimeLabel:"Freeze time for error (seconds):",gameModeLabel:"Game Mode",modeDefault:"Default",modeDefaultDesc:"Each team has its own set of questions, answering independently. The team that reaches the score difference wins.",modeSame:"Same Question Mode",modeSameDesc:"Both teams answer the same question. Correct answer pulls the rope and advances the question. Wrong answer freezes. Win by point difference.",modeTarget:"First to target wins",modeTargetDesc:"Questions repeat infinitely. The first team to reach the target number of correct answers wins immediately.",targetScoreLabel:"Correct answers to win:",noShuffleA:"Do not shuffle answers",noShuffleADesc:"Answers will be displayed in the original order without shuffling",questionOrderLabel:"Question Order",shuffleQDefault:"Shuffle randomly (default)",shuffleQDefaultDesc:"Questions will be shuffled randomly each game",noShuffleQ:"Keep original order",noShuffleQDesc:"Questions will appear in the exact order they were entered in the list",endOnLast:"End game on last question",endOnLastDesc:"When a team finishes the question set, the game ends immediately — the team with the higher score wins",controlModeLabel:"Control Method",controlTouch:"Use touch/click",controlKeyboard:"Use keyboard (Blue: Q W A S - Red: O P K L)",questionsSectionTitle:"❓ Question Set ({{count}} questions)",clearAllBtn:"🗑️ Clear all",pickFromBankBtn:"🗃️ Pick from Bank or AI",manualInputBtn:"✏️ Manual input",questionsNote:"* Needs at least 5 questions. Questions will repeat if exhausted.",questionListHeader:"Question List",answersCountLbl:"{{count}} answers",editQuestionTooltip:"Edit this question",deleteQuestionTooltip:"Delete this question",noQuestionsLbl:"📝 No questions yet",noQuestionsDesc:"Pick from Bank or AI, or use Manual input to start",playTestBtn:"▶️ Test Play",savingBtn:"💾 Saving...",saveBtn:"💾 Save Game",selectQuestionsTitle:"Select questions (You can choose as many as you like)",pickFromLessonBtn:"From lesson",lessonPickerTitle:"Select lesson to pick questions",aiAudioHint:"👉 Question audio is supported in 'Same Question' mode",noAiAudioHint:"👉 Question audio is not supported in this mode",bgmLabel:"
524🎵 Default Background Music",bgmDefault:"Default (Track 4)",bgmTrack:"Track {{n}}",bgmUploadHint:"Students can still change music during the game.",bgmPrivateLabel:"Or upload custom (FullGame):",competitionLabel:"🎮 Competition Sport",tugOfWarOption:"🪢 Tug of War",dragonBoatOption:"🚣 Dragon Boat Racing",defaultHint:"Default",newHint:"New",missingLibraryFields:"Please select Grade, Subject and Level to publish to library.",aiAudioWarning:"Select 'Same Question' mode in settings to enable question audio",lessonPickerNoMatch:"No matching questions (skipped {{count}}).",lessonPickerAdded:'Added {{added}} questions from "{{title}}". Skipped {{skipped}} incompatible ones.',lessonPickerAddedOnly:'Added {{added}} questions from "{{title}}".'},player$f={unmute:"🔇 Unmute",mute:"🔊 Mute",fullscreen:"⛶ Fullscreen",exit:"Exit",gameOver:"Game Over!",draw:"It's a Draw!",winnerLbl:"Winning Team:",finalScoreLbl:"Score: {{score1}} - {{score2}}",playAgainBtn:"🔄 Play Again",viewReportBtn:"📋 View Report",exitBtn:"❌ Exit",reportTitle:"📋 Result Report",reportDraw:"Draw",reportWinnerBlue:"🏆 Blue Team Won",reportWinnerRed:"🏆 Red Team Won",reportWinnerSuffix:"won",reportScoreSuffix:"pts",closeBtn:"✕ Close",reportTeamBlue:"🔵 Blue Team ({{score}} points)",reportTeamRed:"🔴 Red Team ({{score}} points)",reportEmpty:"No answers yet.",reportQuestionNum:"Q{{index}}",reportChosen:"Chosen:",reportImage:"(image)",reportCorrectHint:"Correct answer:",audioStop:"⏹️ Stop",audioReplay:"🔊 Replay",assignmentIntro:"Enter team member names before starting",exampleNames:"Example: Alex, Ben, Chris...",startTugCta:"🚩 Start Tug of War!",introStartBtn:"Start",introRuleTime:"Match duration: {{seconds}} seconds",introRuleDiff:"First team to lead by {{diff}} points wins instantly",introRuleTarget:"First team to reach {{score}} points wins",introRuleShared:"Both teams answer the same question — first correct answer scores and both advance",introRuleIndep:"Each team has {{count}} questions, answered independently",introRuleFreeze:"Wrong answer freezes your team for {{seconds}} seconds",introRuleKeyboard:"Keyboard controls: Blue Q W A S — Red O P K L",introRuleTouch:"Tap or click an answer to respond"},enTugOfWar={page:page$j,share:share$7,myGames:myGames$e,teamPlay:teamPlay$1,form:form$p,player:player$f},sidebar$9={title:"Interactive Video",upgradePro:"Get FullGame",upgradeProTitle:"Get FullGame to unlock limits",createNew:"Create new video",myLessons:"My lessons",allowSeeking:"Allow video seeking",saving:"Saving...",update:"Update",saveLesson:"Save lesson",preview:"Preview",guide:"Guide",guideTitle:"View usage guide",guideUsage:"Usage guide",trialUsed:"Used",trialLimit:"times",unlimited:"Unlimited"},helpModal$1={title:"Interactive Video Guide",description:"Learn how to create and manage interactive videos with quiz questions"},myLessons$3={title:"My Videos",subtitle:"Manage your interactive videos",emptyTitle:"No videos yet",emptyHint:'Click "Create new video" from the left menu to get started!',questionCount:"questions",updatedAt:"Updated:",startFrom:"Starts at:",viewOriginal:"View original video",confirmDelete:"Are you sure you want to delete this video?",deleteSuccess:"Video deleted successfully",deleteFail:"Cannot delete video",loadFail:"Cannot load video list",localVideoWarning:"Uploaded videos can only be viewed on the original computer and cannot be assigned",btnView:"View video",btnEdit:"Edit",btnAssign:"Assign to students",btnDelete:"Delete",defaultTitle:"Interactive video",demo:{title:"Interactive Video - Demo",badge:"Demo",hint:"Try the interactive video to see how it works before creating your own"},localVideoShareWarning:"Only lessons using YouTube can be shared. Lessons with local video cannot be shared.",createFirstBtn:"Create your first video"},quizForm={titlePlaceholder:"Enter video name...",noTitle:"Untitled – click to edit",youtubeHint:"Use YouTube link",localHint:"Upload video from device",youtubeUrlPlaceholder:"Paste YouTube link here…",localModeHint:"Currently in local video upload mode",localReady:"Video uploaded",localChangeFile:"Change file",localMissing:`Video is no longer in cache,
525please re-upload`,localPrompt:"Click to select video file",localPromptSub:"MP4, WebM, MOV… − 
525stored on this device only",localInfoBanner:"Uploaded videos can only be used on this computer. Cannot be assigned to students.",ytPlaceholder:"Enter a YouTube link to preview",localPlaceholder:"Select a video file to preview",playerLoading:"Loading…",addAtTime:"Add at",panelTitle:"Timeline events",noQuestions:"No questions yet",noQuestionsHint:"Play video → click on timeline → press the add button",errorNoUrl:"Please enter a YouTube link",errorNoFile:"Please select a video file",errorIncomplete:"Please fill in all information for every question",saveSuccess:"Video saved successfully!",updateSuccess:"Video updated successfully!",limitReached:"You have used all your free Video sessions.",saveFail:"Cannot save video. Please try again.",copiedLink:"Link copied!",saveLinkFirst:"Please save the video first!",indexedDbFail:"Cannot save video to cache. Your browser may not support it.",minLessons:"There must be at least one question!",modalAddTitle:"+ Add new question",modalEditTitle:"Edit question",modalManual:"Enter manually",modalBank:"Choose from Bank or AI",modalAI:"Generate with AI",modalBankHint:"Select a question from the Question Bank or generate with AI, then review and save.",modalOpenBank:"Open Question Bank / AI",modalCancel:"Cancel",modalSave:"Save question",importedFromBank:"Question imported from Bank. Review then click Save.",questionPickerTitle:"Select question for Interactive Video",modalOpenLesson:"From existing lesson",lessonPickerTitle:"Select a lesson to get questions from",lessonPickerNoMatch:"No matching questions.",upgradeTitle:"Upgrade Account",upgradeMsg1:"You have used all 5 free Interactive Video sessions.",upgradeMsg2:"Upgrade to use without limits.",upgradePrice:"50,000 VND – one-time purchase, use forever",upgradeBankInfo:"BIDV: 8611283666 – HO KINH DOANH BAN VAN THINH",upgradeTransferNote:"Note: VIDEO",upgradeWarning:"After transfer:",upgradeUnderstood:"Got it"},quizOverlay={question:"Question",rewind:"Rewatch video",correct:"Correct! Well done!",incorrect:"Try again!"},videoPlayer={back:"Go back",backEditor:"Back to editor",notFoundTitle:"Video not found",notFoundMsg:"Uploaded videos can only be viewed on the original computer. The cache (IndexedDB) was cleared or you are using a different device.",notFoundHint:"Go back to re-upload the video on this device.",loading:"Loading video from cache…"},quizEntry={question:"Question",answer:"Answer",timeClick:"Click to edit time",noContent:"No content yet",questionPlaceholder:"Enter question... (supports math formulas)"},lockedTip$6="Renew to unlock this lesson",enInteractiveVideo={sidebar:sidebar$9,helpModal:helpModal$1,myLessons:myLessons$3,quizForm,quizOverlay,videoPlayer,quizEntry,lockedTip:lockedTip$6},hero$4={title:"💰 Pricing",sub:"Free trial available — pay only when you need more. No hidden fees."},proPlan$1={title:"FullGame PLAN — Unlock All",badge:"Most Popular",price:"200,000₫",unit:"/ year",description:"Unlock all features, including AI Tools & AI Specialist",features:["Upload audio and record voice into lesson content","Receive detailed reports on each student's progress","Unlimited use of all interactive teaching tools","Store lessons forever","AI tools sold separately at 30,000₫ per tool — not included in FullGame PLAN"]},singularFeatures$1={title:"Individual Feature Purchase",price:"30,000₫",unit:"/ year / feature",line1:"Each feature can be bought individually for 30,000₫/year.",line2:"Transfer 60,000₫ = 2 years, 90,000₫ = 3 years — calculated automatically.",list:["Individual features (Crossword, Tug of War, Paced Quiz, etc.)"]},extendedLink$1={title:"Extended Assignment Link (Lifetime Storage)",price:"100,000₫",unit:"/ 1 year",description:"For teachers needing long-term validity for research, certifications, or extended projects.",features:["Assignment links valid for up to 1 year instead of the default 30 days","Applicable to all games that support assignments"]},aiTools$1={title:"In-Depth AI Toolkit",group1Title:"Buy tools individually",group1Price:"30,000₫",group1Unit:"/ tool / lifetime",group2Title:"Bundle multiple tools",group2Price:"Up to 20% off",group2Unit:"",group3Title:"Included with FullGame PLAN",group3Price:"2 tools",group3Unit:"free",line1:"One-time payment, use forever.",noteLabel:"Note:",line2:"The more tools you bundle, the bigger the discount (2% more per extra tool, up to 20%). FullGame PLAN includes the first 2 tools for free.",features:["14 in-depth AI tools for teachers — from lesson planning to test generation","30,000₫/tool individually, or bundle for a discount","Unlocked forever — unlimited use"]},freeTrial$1={title:"Free Trial",intro:"New accounts can try all interactive features for <0>free</0> with a 05 missions/feature limit. AI Specialist and AI Tools are not eligible for trial—please watch the tutorial videos before upgrading.",table:{feature:"Feature",limit:"Trial Limit"},note:"Items created during trial are kept and accessible after expiration."},multiYear$1={title:"Multi-Year Discounts",intro:"Applies to <0>FullGame PLAN</0> and <2>individual features</2> for 2+ year registrations:",table:{years:"Years",discount:"Discount"},yearUnit_one:"1 year",yearUnit_other:"{{count}} years",noDiscount:"No discount",discountValue:"{{percent}}% OFF",note:"Discount applied before manual coupon codes."}
525,notes$1={title:"📌 Notes:",item1:"Payment via <0>bank transfer</0> (via auto-generated QR in-app).",item2:"Automatic upgrade after confirmation — usually within minutes.",item3:"For support, contact Zalo <0>{{phone}}</0>."},cta$1={title:"Start Today",sub:"Try for free — upgrade anytime within the app.",btn:"Contact Zalo for consultation"},enPricing={hero:hero$4,proPlan:proPlan$1,singularFeatures:singularFeatures$1,extendedLink:extendedLink$1,aiTools:aiTools$1,freeTrial:freeTrial$1,multiYear:multiYear$1,notes:notes$1,cta:cta$1},shipping$1={hero:{title:"Shipping & Fulfillment Policy",sub:"Guide for digital service activation process on <1>{{url}}</1>",lastUpdated:"Last updated: {{date}}"},digitalNote:{title:"📦 Important Note:",content:"<1>{{name}}</1> is a platform providing <1>software as a service (SaaS)</1>. We <1>do not ship physical goods</1>. All products/services are provided entirely online via user accounts."},ordering:{title:"1. Ordering & Transaction Confirmation Process",intro:"To upgrade your account, follow these steps:",steps:[{title:"Login",desc:"Login to your account at giaoviendoimoi.com using Google"},{title:"Select Plan",desc:"Select the appropriate upgrade package (FullGame, AI Tools, Individual features...)"},{title:"Payment",desc:"Bank transfer via the QR code provided on the upgrade page"},{title:"Activation",desc:"System automatically confirms and activates the service"}]},activation:{title:"2. Service Activation Time",intro:"After successful payment, the service will be activated according to the following timeframes:",timeline:[{title:"Automatic Activation — Under 5 minutes",desc:"When paying via <1>VietQR (BIDV)</1> with the correct transfer content. The SePay system automatically confirms and updates the account immediately, without manual approval."},{title:"Within 2–4 business hours",desc:"In case the system hasn't automatically confirmed, we will verify and activate manually during business hours (8:00–22:00 daily)."},{title:"Maximum 24 hours",desc:"In case of payment outside business hours or if additional verification is needed. If activation exceeds 24 hours, please contact support via Zalo or email."}]},scope:{title:"3. Service Availability",items:["Services are provided online, no geographical limits — accessible from anywhere","Requires only an internet-connected device and a web browser (Chrome, Edge, Firefox, Safari)","No software installation required (except Offline package)","Compatible with PC, tablets, and smartphones"]},confirmation:{title:"4. Transaction Confirmation",intro:"After the transaction is completed and activated successfully:",items:["Account status will update immediately on the website interface (top right corner)","All purchased features will be unlocked and ready for use","Service package information and expiration date displayed in account management","Users can contact via email or Zalo to request a written confirmation if needed"]},refund:{title:"5. Refund Policy",intro:"Due to the nature of <1>digital services</1> (instant activation after payment), the refund policy is as follows:",validCases:{title:"✅ Cases eligible for refund:",items:["Service does not perform as described within 7 days after activation","Duplicate payments (paying twice for the same package)","Incorrect package activated due to system error"]},warning:"<1>⚠️ Note:</1> We <1>do not offer refunds</1> if the user changes their mind after using the service, or if the account is terminated for violating Terms of Service. Please read service descriptions carefully before paying.",requestInfo:"To request a refund, please contact via email <1>{{email}}</1> within <1>7 days</1> of payment, including proof of transaction."}
525,technicalSupport:{title:"6. Post-Activation Technical Support",items:["Zalo Support: 0363 357 745 — response within business hours (8:00–22:00)","Email Support: [email protected] — response within 2–3 business days","Usage guides via official YouTube and TikTok channels","Facebook and Zalo community support groups for teachers"]},relatedLinks:{label:"📋 Related Documents:",privacy:"🔒 Privacy Policy",terms:"📜 Terms of Service",about:"👤 Owner Information"},contact:{title:"Contact Support",sub:"If you haven't received your service within the specified time, or need transaction support, please contact us immediately:",note:"Or contact Zalo: <1>{{phone}}</1> for faster assistance."},footer:{copyright:"© {{year}} {{name}}. All rights reserved.",privacy:"Privacy Policy",terms:"Terms"}},privacy$1={hero:{title:"Privacy Policy",sub:"Commitment from <1>{{name}}</1> to protecting your privacy and personal data.",lastUpdated:"Last updated: {{date}}"},intro:{p1:"Welcome to <1>{{name}}</1> (giaoviendoimoi.com) — a platform supporting teachers in creating interactive lessons, educational games, and efficient classroom management. We understand that your privacy is extremely important. This policy explains clearly how we 
525collect, use, store, and protect your information.",summary:{title:"📌 Quick Summary:",content:"We collect only the minimum information needed to operate the service. We <1>do not sell</1>, do not share without authorization, and do not use your data for third-party advertising. For student photos and names entered by teachers, see <1>Section 10</1>."}},section1:{title:"1. Information We Collect",sub1:"1.1. Google Sign-In",p1:"When you log in with your Google account via Firebase Authentication, we only receive the following information:",items1:["Email Address — used for identification and communication if needed","Display Name — used to personalize the interface","Profile Picture — public image URL from your Google account"],scopes:{title:"Scopes (Permissions):",pre:"We only request basic scopes (",mid:"). We do",not:"NOT",post:"request access to Gmail, Google Drive, Contacts, or any other sensitive data."},sub2:"1.2. Student data",p2:"Students have <1>no accounts</1> and never register themselves. There are two distinct data flows: (a) students joining via PIN code — processed <1>anonymously</1>, storing only a self-chosen nickname and activity scores; (b) class rosters <1>entered by the teacher</1> — which may include full names and portrait photos. Flow (b) is personal data and is governed separately in Section 10.",sub3:"1.3. Usage Data",p3:"We may record technical information such as: browser type, IP address, access time for performance analysis and service improvement. This data is not used for personal identification."},section2:{title:"2. How We Use Information",items:["Identifying and granting account access","Storing quizzes, wheels, games, and teaching content you create","Tracking game history and learning progress (anonymous data)","Managing service packages and account payment history","Sending important technical notifications related to your account","Improving and developing new platform features"]},section3:{title:"3. Data Storage & Security",sub1:"3.1. Data Storage Location",p1:"All user data is securely stored on <1>Google Firebase</1> infrastructure (Firestore, Authentication, Storage) — complying with ISO 27001 and SOC 2/3 standards.",items1:["Quizzes and teaching content you create","Game history and class activity results","Learning progress (anonymous data of students joining by PIN)","Class rosters entered by the teacher: student names and portrait photos (if the teacher uses them)","Subscription plan and expiry information"],sub2:"3.2. Security Measures",items2:["Data encrypted in transit via HTTPS/TLS","Role-based access control (teachers can only see their own data)","Student photos stored in each account’s private area; security rules block access from any other account","Multi-layer authentication through Firebase Authentication","Regular backups under Google Firebase policy"],warning:"<1>⚠️ Note:</1> Despite implementing best security measures, no system can guarantee 100% absolute safety. Please secure your Google account."},section4:{title:"4. Payments & Account Upgrades",p1:"Upgrading to a FullGame account is processed via bank transfer (<1>VietQR</1>) or Buy Me a Coffee for international users.",commitment:{title:"🔐 Payment Commitment:",content:"Our system <1>DOES NOT</1> store any credit card, debit card, or bank account information. Bank transfers are made directly through your banking app, or via Buy Me a Coffee."},items:["Only store service package status (Free/FullGame) and renewal dates","Transfer reference note (matching code) used to confirm payment","Payment history for customer support when needed"]},section5:{title:'5. Our Three "NO" Commitments',commits:[{title:"NO selling data",desc:"We never sell, rent or trade your personal information to any third party for commercial purposes."},{title:"NO email spam",desc:"Email is used only for authentication and important technical notices. No junk marketing email."},{title:"NO use of student photos",desc:"Student photos and names are never used for advertising, AI training, or any purpose beyond showing them back to that same teacher."}]},section6:{title:"6. Sharing Information with Third Parties",p1:"We share information only with the following partners in order to operate the service. Student photos and names are <1>never shared</1>
525 with any partner beyond the Google Firebase storage infrastructure.",table:{partner:"Partner",purpose:"Purpose",data:"Shared Data",rows:[["Google Firebase","Storage & authentication","Teacher email, name, avatar; student photos/names (storage only, no other use)"],["Bank / Buy Me a Coffee","Payment processing","Name, email (for invoices)"],["Google Analytics","Anonymous performance analytics","Anonymous data (excludes student photos/names)"]]}},section7:{title:"7. Your Rights",items:["Right of access: See the personal information we store about you","Right to rectification: Correct inaccurate personal information","Right to erasure: Request deletion of all your account data","Right to withdraw consent: Revoke Google OAuth access at any time","Right to data portability: Receive a copy of your data in a readable format","Rights of parents/students: Request access to, correction of, or deletion of student photos and information (see Section 10)"],requestInfo:"To exercise any rights, please contact us via email <1>{{email}}</1>. We will process within <1>7 business days</1>."},section8:{title:"8. Cookies & Tracking Technology",items:["Required Cookies: Maintaining login sessions (necessary for service operation)","Optional Cookies: Saving interface settings like language, theme","Analytics: Analyzing anonymous traffic to improve performance"],p1:"You can delete cookies anytime in your browser settings. However, disabling required cookies may affect login functionality."},section9:{title:"9. Protection of Children",p1:"The service is intended to be used by <1>teachers</1>. Students have no accounts of their own and never register on the platform themselves.",sub1:"Students joining by PIN code",p2:"No registration, no email, no personal information required. Students only enter a nickname they choose themselves, shown on the leaderboard. We recommend teachers instruct students not to use their full name as a nickname.",sub2:"Class rosters entered by teachers",p3:"Some features (attendance, random name picking, group splitting) require the teacher to enter a class roster, optionally with student portrait photos. This is children’s personal data and is governed in detail in Section 10."},section10:{title:"11. Policy Changes",p1:"Important changes will be notified via:",items:["Prominent notices on the website at least 30 days before taking effect","Notification emails sent to the registered address (for major changes)",'Updating the "Last updated" date at the top of this page'],p2:"Continued use of the service after policy changes take effect constitutes your agreement to those changes."},sectionExt:{title:"12. Chrome Extensions (School Database Comment Tool & Professional Standards Evaluation)",p1:'The Chrome extensions developed by Giáo viên đổi mới — including "Nhận xét môn học, học bạ VnEdu, CSDL ngành GD" and "Đánh giá chuẩn nghề nghiệp giáo viên" (Teacher Professional Standards Evaluation) — collect and process the following information:',items:["Your Google name and email address — used to verify your account and subscription status","Subscription status (active / expired) — cached locally in the browser for up to 12 hours","The extension does NOT collect, store, or transmit any student data or page content to any server","The extension only runs on the software page when you actively click a button — it does not run in the background"],note:"Authentication data is sent over HTTPS to Google OAuth 2.0 and our secure Cloud Function for subscription verification. No data is shared with third parties."},section11:{title:"13. Contact & Data Deletion Requests",sub:"If you have questions about the privacy policy, or wish to request full account data deletion, please contact us:",note:'Specify subject: "Data Deletion Request" and the registered email. We will process within <1>7 business days</1>.'},footer:{copyright:"© {{year}} {{name}}. All rights reserved.",login:"Login"},sectionPhotos:{title:"10. Student Photos & Information Entered by Teachers",p1:"Some features let a teacher build a class roster with student names and portrait photos, for activities such as attendance, random name picking and group splitting. This is optional — the platform is fully usable without uploading any photo.",warning:"<1>⚠️ Student portrait photos are sensitive personal data.</1> For students under 16, processing requires the consent of a parent or legal guardian under applicable personal data protection law.",sub1:"10.1. Roles of each party & legal basis",p2:"The teacher (or school) decides to collect and use student photos and is responsible for obtaining consent from parents or legal guardians. The platform acts only as storage, displaying the photos back at that teacher’s request. Before the first upload for a class, the system requires the teacher to confirm that such consent exists;
525 that confirmation is recorded per class with a timestamp.",sub2:"10.2. Who can see the photos",items2:["Only the teacher account that uploaded them — security rules block every other account","Photos never appear in activities where students join by PIN code","Photos are not published publicly and are not indexed by search engines","Operations staff access them only for requested technical support or where required by law"],sub3:"10.3. What we do NOT do with student photos",items3:["Never used for advertising or marketing of any kind","Never used to train artificial intelligence models","Never sold, rented, traded or shared with third parties","No facial recognition to identify students beyond that teacher’s own classroom"],sub4:"10.4. Retention period & right to erasure",p4:"Photos are kept until the teacher deletes them, or until the account is deleted. In the class management page a teacher can delete individual photos or all photos of a class at any time — deletion is permanent. We recommend deleting photos at the end of the school year or when they are no longer needed for teaching. When an account is deleted on request, all photos and rosters are deleted with it.",parentRights:"Parents, legal guardians or the students themselves may request access to, correction of, or deletion of photos and related information. Please contact the class teacher first — they can delete them immediately in the app. If that is not possible, email <1>{{email}}</1> and we will respond within <1>7 working days</1>."}},terms$1={hero:{title:"Terms of Service",sub:"Please read carefully before using the services of <1>{{name}}</1> ({{url}}).",lastUpdated:"Last updated: {{date}}"},intro:{p1:'These Terms of Service ("Terms") are a legal agreement between you ("User") and <1>{{name}}</1> ("we", "us", or "our") governing access to and use of the platform at <3>{{url}}</3>. By registering, logging in, or using any features of the service, you acknowledge that you have read, understood, and <5>agree</5> to be bound by these Terms.',summary:{title:"📌 Scope of Application:",content:"These Terms apply to all users who register an account, including teachers, educators, and anyone using the service. Students participating via PIN (anonymously) are not bound by these Terms."}},section1:{title:"1. Age & Acceptance of Terms",teacher:{title:"For Teachers (Account creators and classroom managers)",content:"You must be <1>at least 18 years old</1> to register an account, use the services, and perform account upgrades (if applicable). By logging in with Google Sign-In, you confirm that you have read, understood, and <3>fully agree</3> to all Terms of Service and our <5>Privacy Policy</5>."},student:{title:"For Students (Participants)",content:"There is <b>no minimum age limit</b> when students participate in games, tests (such as Tug of War, Head Tilt Quiz, etc.) via a <b>room PIN</b> or <b>shared link</b>. However, students using the platform must be under the <b>guidance, supervision, and consent</b> of the classroom Teacher or Parent/Legal Guardian."},note:"💡 Note: These Terms may be updated. Continued use of the service after changes constitutes acceptance of the latest version. If you do not agree, please stop using the service and contact us to delete your account."},section2:{title:"2. Right to Use Service",intro:"We provide two types of accounts with different privileges:",plans:[{title:"Trial Account",items:["Access basic features with limitations","Create a limited amount of content per month","Support via documentation","Can upgrade to FullGame anytime"]},{badge:"⭐ FullGame",title:"FullGame / Premium Account",items:["Access all features without limits","Create and store unlimited content","Priority technical support","Receive new features earliest"]}],sub1:"2.1. Intellectual Property & Usage Limits",p1:"All source code, interface design, game algorithms, and platform content are the intellectual property of <1>{{name}}</1>, protected under Vietnamese law and international copyright conventions.",ipWarning:{title:"🚫 Copyright and Intellectual Property",content:"All interface designs (UI/UX), graphics, effects, and source code of tools on the platform (including <1>Tug of War, Head Tilt Quiz, Crossword</1>...) are owned by <3>giaoviendoimoi.com</3>. Users <5>are not permitted</5> to use software tools to extract, reverse engineer, or directly copy source code or steal graphic resources of the platform for commercial purposes.",exception:"Permitted Exception: Being inspired to program similar game mechanics <1>is not considered a violation</1> of this term."},sub2:"2.2. Content You Create",p2:"You retain ownership of the <1>question content, exercises, and teaching materials</1> you create on the platform. By uploading or creating content, you grant us the right to store and display that content to provide the service to you."},section3:{title:"3. User Responsibilities",sub1:"3.1. Content Responsibility",p1:"Teachers and users <1>assume full responsibility</1> for the accuracy, correctness, and legality of all question content, exercises, and teaching materials created or shared on the platform.",items1:["Ensure content is appropriate for the educational program and student age","Responsible for copyright of images, sounds, and texts used","Do not use the service for unauthorized commercial purposes"],sub2:"3.2. Prohibited Content",prohibits:[{title:"Legal Violations",desc:"Content that violates Vietnamese law and international treaties."},{title:"18+ Content",desc:"Pornography, violence, content inappropriate for students."},{title:"Hate Speech",desc:"Discrimination based on ethnicity, religion, gender."},{title:"Spam & Advertising",desc:"Using the platform to spread unauthorized advertising or spam."}],sub3:"3.3. Account Security",items3:["You are responsible for the security of your login information and Google account.","Do not share accounts with others or allow multiple people to use a single account.","Notify us immediately if unauthorized access to your account is detected."],sub4:"3.4. Uploaded Content Copyright & Safe Harbor Mechanism",p4:"Users are <1>solely responsible</1> for the copyright of all images, audio, video, and data files uploaded to the system. The platform acts as a <3>
525hosting intermediary</3> and does not pre-screen content before publication.",safeHarbor:{title:"🛡️ Copyright Complaint & Takedown Mechanism (Safe Harbor)",intro:"In accordance with Vietnamese Intellectual Property Law (Article 198b) on the liability of hosting intermediaries, the platform follows a 5-step process to receive and handle copyright complaints:",steps:["Step 1 — Receive the infringement report: The rights holder (or authorized representative) sends a complaint to the copyright email below, including: (a) identification of the infringing content and its specific link on the platform, (b) evidence of lawful ownership, (c) the complainant's contact information, and (d) a good-faith statement as to the accuracy of the complaint. The platform acknowledges receipt within 24 business hours","Step 2 — Provisional takedown: If the complaint contains sufficient valid initial information, the platform will proactively hide (remove from public view) the reported content within 48 business hours of acknowledgment, to prevent further harm while the matter is being verified","Step 3 — Verification: The platform reviews evidence from both sides — notifying the user who uploaded the content about the complaint, and allowing that user to submit a counter-notice with supporting evidence within 7 business days of being notified","Step 4 — Decision: Based on the verification outcome, the platform issues one of two decisions: (a) if the complaint is confirmed valid, or the user fails to provide a valid response within the deadline — the content is permanently removed; (b) if the user proves lawful ownership or right of use — the content is restored and the complaint is dismissed","Step 5 — Permanent removal & account action: For content confirmed to be infringing, the platform permanently deletes it from the system (including backups, to the extent technically feasible) and may take action against the violating account (warning, suspension, or termination) according to the severity and frequency of violations as set out in these Terms"],contactLabel:"Copyright complaint channel:",contactNote:'Email subject: "Copyright Complaint" + name of infringing content. Please attach valid proof of ownership.',legalNote:"⚖️ Legal basis: This mechanism is established in accordance with Vietnamese Intellectual Property Law (amended 2022) on the liability of hosting intermediaries. By promptly handling valid complaints, the platform is exempt from liability for damages related to user-uploaded content."},sub5:"3.5. Student Photos & Information",p5:"When uploading portrait photos or entering student names, you confirm that you are the party <1>deciding on the collection and use</1> of that data, and that you <1>have obtained consent</1> from a parent or legal guardian for students under 16. The platform acts solely as storage, displaying the data back at your request.",items5:["You are responsible for obtaining and retaining parental/guardian consent, in line with your school’s rules and applicable law","Use photos only for teaching activities in that class — never published publicly, never shared beyond the class, never for commercial purposes","Delete photos as soon as consent is withdrawn, when a student changes class/school, or when no longer needed for teaching","Do not upload photos of anyone outside the class you are responsible for","Forward to us any parent request you cannot handle yourself within the app"],photoNote:"⚠️ Children’s portrait photos are sensitive personal data. Breaching the commitments above may lead to account suspension, and you bear any resulting legal liability. How we store and protect this data is described in Section 10 of the Privacy Policy."},section4:{title:"4. Limitation of Liability",p1:"<1>{{name}}</1> is committed to making every effort to ensure the platform operates stably, safely, and continuously. However, we <3>cannot guarantee</3> that the service will always be 100% available and assume no legal responsibility in the following cases:",items:["Service interruption due to technical issues from Google Firebase (hosting server)","Interruption due to internet connection issues from the user or service provider","Loss or corruption of data due to natural disasters, cyber attacks, or force majeure events","Indirect damages arising from the use or inability to use the service"],recommendation:"⚠️ Recommendation: For important teaching content, you should backup periodically by exp
525orting data to local files. We perform periodic system backups but do not commit to full recovery in all cases.",sub1:"4.1. Third-Party Services",p2:"The platform integrates third-party services (Google Firebase, Google AI, Buy Me a Coffee, etc.). We are not responsible for interruptions, policy changes, or issues from these third-party service providers.",sub2:"4.2. Compensation Limit",p3:"To the maximum extent permitted by law, our liability for any claim shall not exceed the amount you paid for the service in the <1>last 3 months</1>."},section5:{title:"5. Payment & Refunds",items:["FullGame service fees are charged periodically (monthly/annually) and automatically renew unless canceled.","Service prices may change and will be notified at least 30 days in advance.","Refunds: We support refunds within 7 days of payment if the service does not function as committed.","Violation of Terms leading to account termination will not be refunded."]},section6:{title:"6. Account Termination",p1:"We reserve the right to <1>suspend or terminate</1> your account without prior notice in cases of:",items:["Violation of one or more terms in this agreement","Fraudulent activity, service abuse, or harm to other users","Accounts inactive for a long period (more than 24 months)","Requests from competent legal authorities"],p2:"You can request account deletion anytime by contacting us via email. After deletion, data will be removed from the system within <1>30 business days</1>."},section7:{title:"7. Modification of Terms",p1:"<1>{{name}}</1> reserves the right to update or modify these Terms of Service at any time to reflect service changes, legal requirements, or operational policies. Notification will be made via:",items:["Prominent notices on the website at least 30 days before new terms take effect","Notification emails sent to the registered address (for important changes)",'Updating the "Last updated" date at the top of this page'],note:"After the notification period, continued use of the service constitutes <1>acceptance of the latest version of the Terms</1>. If you do not agree, you have the right to request account deletion before the new terms take effect."},section8:{title:"8. Governing Law & Dispute Resolution",p1:"These Terms are governed by <1>the laws of the Socialist Republic of Vietnam</1>. Any disputes arising from or related to these Terms will be resolved through the following process:",items:["Priority: Direct negotiation between parties within 30 days","If no agreement reached: Mediation or arbitration as per legal regulations","Final Option: Lawsuit at a competent People's Court in Vietnam"]},relatedLinks:{label:"📋 Related Documents — See our Privacy Policy for more information:",privacy:"🔒 Privacy Policy →"},contact:{title:"Contact & Support",sub:"If you have questions about the Terms of Service, want to report a violation, or need support with account deletion, please contact us:",note:"We will respond within <1>2–3 business days</1>."},footer:{copyright:"© {{year}} {{name}}. All rights reserved.",privacy:"Privacy Policy",login:"Login"}},enLegal={shipping:shipping$1,privacy:privacy$1,terms:terms$1},hero$3={title:"Owner Information",sub:"Information about the owner and operator of the website <1>{{url}}</1>",lastUpdated:"Last updated: {{date}}"},ownerInfo$1={title:"Owner Information",labelName:"Full name of owner",labelDob:"Year of birth",labelNationality:"Nationality",nationalityValue:"Vietnam",labelAddress:"Address",labelEmail:"Contact Email",labelPhone:"Phone / Zalo",labelTax:"Tax Identification Number",labelType:"Business Type",typeValue:"Online Individual Merchant (no legal entity)"},websiteInfo$1={title:"Website Information",labelName:"Website Name",labelDomain:"Domain Address",labelField:"Field of Activity",fieldValue:"Providing online educational software/tools (EdTech)",labelAudience:"Target Audience",audienceValue:"Teachers, educators in Vietnam and internationally",labelLang:"Primary Language",langValue:"Vietnamese",labelServer:"Hosting Server",serverValue:"Google Firebase (Google LLC, USA)"},mission$1={title:"Mission & Introduction",p1:"<1>{{name}}</1> is an EdTech platform built by a teacher with the desire to bring creative, modern, and user-friendly teaching tools to the Vietnamese teacher community.",p2:"We believe technology can make learning more exciting, and every teacher deserves professional tools to create memorable lessons.",cards:[{title:"Artificial Intelligence",desc:"Integrated AI to assist in lesson planning, question generation, and personalized learning"},{title:"Gamification",desc:"Turning lessons into interactive games that stimulate student engagement"},{title:"Progress Tracking",desc:"Assessment and real-time tracking of student progress"},{title:"Easy Access",desc:"Students participate without needing an account, just a PIN or shareable link"}]},channels$1={title:"Official Channels",intro:"Official social media channels for <1>{{name}}</1>:"},relatedLinks$1={label:"📋 Related Documents:",privacy:"🔒 Privacy Policy",terms:"📜 Terms of Service",shipping:"🚚 Shipping Policy"}
525,contact$1={title:"Direct Contact",sub:"For any inquiries, complaints, or cooperation proposals, please contact:",note:"Responses within <1>2–3 business days</1>. Or contact Zalo: <1>{{phone}}</1>"},footer$3={copyright:"© {{year}} {{name}}. All rights reserved.",privacy:"Privacy Policy",terms:"Terms"},enAbout={hero:hero$3,ownerInfo:ownerInfo$1,websiteInfo:websiteInfo$1,mission:mission$1,channels:channels$1,relatedLinks:relatedLinks$1,contact:contact$1,footer:footer$3},page$i={alert:{onlyImage:"Only image files are allowed (jpg, png, webp, gif...)",imageTooLarge:"Image is too large. Please select an image under 10MB."},error:{uploadFailed:"Error uploading image: ",emptyTitle:"Please enter a title",emptyImage:"Please upload a background image",limitReached:"You have reached your free creation limit. Please upgrade your account.",saveFailed:"Error saving: ",loadFailed:"Could not load image list. Please try again.",deleteFailed:"Error deleting: ",shareFailed:"Error creating share link: ",unshareFailed:"Error: ",lockedTip:"Renew to unlock this image",notFound:"Interactive image not found",invalidLink:"Share link is invalid or has been deleted.",libraryCategoryRequired:"Please select Grade level, Subject, and Class grade before publishing to the Community Library."},confirm:{delete:'Delete "{{title}}"?'},sidebar:{title:"🖼️ Interactive Image",upgrade:"Individual Upgrade",upgradeHint:"Upgrade to unlock limits",create:"Create interactive image",createBinocular:"Create binocular image",myImages:"My images"},create:{title:"➕ Create New Interactive Image",section1:{title:"📋 Basic Information"},titleLabel:"Title",titlePlaceholder:"e.g., Plant Cell Structure",modeLabel:"🎮 Lesson Mode",modeQuiz:"Quiz",modeQuizDesc:"Multiple choice, fill in the blank",modeWorksheet:"Worksheet",modeWorksheetDesc:"Students fill out the worksheet",maxScoreLabel:"
525🏆 Maximum Score",scoreUnit:"points",scoreHintEmpty:"Divided equally among markers",scoreHintFilled:"≈ {{points}} points/question ({{count}} questions)",section2:{title:"🖼️ Background Image"},uploading:"Uploading image...",clickToUpload:"Click to select image",uploadHint:"Supports JPG, PNG, WebP, GIF (max 10MB)",replaceImage:"🔄 Replace image",section3:{title:"📍 Markers"},cancel:"Cancel",saving:"⏳ Saving...",saveButton:"💾 Save Interactive Image"},edit:{back:"← Back",title:"✏️ Edit: {{title}}",titleLabel:"Title",modeLabel:"🎮 Lesson Mode",modeWarning:"⚠️ Changing mode will delete all current markers.",imageLabel:"Background Image",uploading:"⏳ Uploading...",replaceBtn:"🔄 Change image",replaceWarning:"Changing image will reset old markers' coordinates on the new image",markersLabel:"📍 Markers",cancel:"Cancel",saving:"⏳ Saving...",saveBtn:"💾 Save Changes"},preview:{back:"← Back",title:"👁️ Preview: {{title}}",maxScore:"🏆 Maximum Score",scoreUnit:"points",exitFullscreen:"Exit fullscreen",enterFullscreen:"Enter fullscreen",exitFullscreenBtn:"⊠ Exit fullscreen",enterFullscreenBtn:"Fullscreen ⛶"},list:{subBannerTrial:"📌 Used {{current}}/{{limit}} Interactive Image creations",subBannerPro:"✅ {{mode}} Mode — Unlimited",title:"🖼️ My Images ({{count}})",createBtn:"+ Create New",loading:"Loading...",emptyTitle:"No interactive images yet",emptySubtitle:"Create your first image to get started!",emptyCreateBtn:"+ Create Interactive Image",demo:{title:"Interactive Image - Demo",badge:"Demo",hint:"Try the interactive image to see all 4 hotspot types before creating your own"}},card:{modeWorksheet:"Worksheet",modeQuiz:"Quiz",markersCount:"{{count}} markers",isShared:"Sharing",viewBtn:"View",editBtn:"Edit",unshareBtn:"🔒 Stop sharing",shareBtn:"🔗 Share",deleteBtn:"Delete"},share:{loading:"Loading interactive image...",btnHome:"Back to Home",playerSubtitle:"Interactive Image — Click on markers to explore",legendTitle:"📖 Marker Legend:",legendInfo:"Information",legendQuiz:"Multiple Choice",legendFill:"Fill in the Blank",legendWorksheet:"Worksheet"}},editor$4={instruction:"Click anywhere on the image to add a Marker. Currently ",count:" markers.",markerTooltip:"Click to edit: {{title}}",markerDeleteTooltip:"Delete marker",empty:"No markers yet. Click on the image to get started!",confirmDelete:"Delete this marker?"},player$e={empty:"No image",score:{label:"🏆 Score",sub:"({{correct}}/{{total}} correct · {{remaining}})",remaining:"{{count}} remaining",completed:"completed!"},markerViewAgain:"Click to view again",canvasEmptyMarker:"(Image has no markers)"},markerModal={type:{info:"Information",quiz_mc:"Multiple Choice",quiz_fill:"Fill in the Blank",open_input:"Worksheet"},frozen:{locked:"🔒 Answered",correctTitle:"You answered correctly!",wrongTitle:"You answered incorrectly.",lockedSub:"This question is locked — cannot be answered again."},info:{empty:"(No content)",content:"Information content",placeholder:"Describe or explain this location on the image..."},btn:{checkMC:"Check Answer",checkFill:"Check",doneOpen:"📋 Complete",close:"Close",pickBank:"🗃️ Pick from Bank / AI",removeAnswer:"Remove",addAnswer:"+ Add Answer",cancel:"Cancel",update:"💾 Update",add:"📍 Add Marker"},feedback:{correct:"🎉 Correct!",wrongMC:"❌ Incorrect! Correct answer:",wrongFill:"❌ Incorrect! Correct answer:",doneOpen:"✅ Answer recorded!"},input:{placeholder:"Enter your answer...",hintLabel:"💡 Hint:"},error:{infoContent:"Please enter information content",quizMCQuestion:"Please enter a question",quizMCAnswers:"Need at least 2 answers with content",quizMCCorrect:"Please select the correct answer",quizFillQuestion:"Please enter a question",quizFillAnswer:"Please enter the correct answer",openPrompt:"Please enter a prompt/instruction"},defaultTitle:"Marker",field:{question:"Question",answers:"Answers (select the correct answer on the left)",correctAnswer:"Correct Answer",hint:"Hint (optional)",prompt:"Prompt / Instruction for students",placeholder:"Input placeholder (optional)",type:"Marker Type"},placeholder:{questionMC:"Enter your question...",answerX:"Answer {{num}}",questionFill:"Example: The capital of Vietnam is ___?",correctAnswer:"Enter correct answer...",hint:"Hint for students if needed...",prompt:"e.g., Observe and describe what you see at this location...",placeholder:"e.g., Enter your answer..."},tooltip:{correctAnswer:"Correct Answer"},note:{openInput:"📋 Students will type in this box. Content is not graded — used for discussion only."},title:{edit:"✏️ Edit Marker",add:"📍 Add Marker"},bank:{title:"Select 1 question from Bank"}},binocular={createTitle:"🔭 Create Binocular Game",infoTitle:"Information",titlePlaceholder:"Enter lesson title…",uploading:"Uploading…",dropOrClick:"Click to add images (multiple allowed)",settingsTitle:"Binocular Settings",shapeLabel:"Aperture Shape",shapes:{binocular:"Binocular",circle:"Circle",square:"Square",hexagon:"Hexagon"},sizeLabel:"Aperture Size ({{size}}px)",sizes:{small:"Small",medium:"Medium",large:"Large"}
525,overlayColorLabel:"Cover Background Color",colors:{black:"Black",darkGreen:"Dark Green",darkBlue:"Dark Blue",darkPurple:"Dark Purple",darkBrown:"Dark Brown",custom:"Custom"},opacityLabel:"Cover Opacity ({{percent}}%)",bgmLabel:"Background Music",bgmHint:"Music plays in binocular mode, turns off when image is revealed.",bgmOptions:{none:"None",bgm1:"Track 1",bgm2:"Track 2",bgm3:"Track 3",bgm4:"Track 4",bgm5:"Track 5"},revealAudioLabel:"Reveal Sound Effect",revealAudioHint:"Plays when teacher presses Enter/Space to reveal the full image.",autoRevealLabel:"Auto-reveal image after",secondsUnit:"sec",autoRevealHint:"Disabled by default. Enable to reveal automatically after countdown.",photosCount:"Photo List ({{count}} photos)",slidesTitle:"Photo List",slidesUnit:"photo(s)",slideNamePlaceholder:"Photo",removeSlide:"Delete this photo",photoNamePlaceholder:"Photo {{num}} name…",deletePhotoTooltip:"Delete this photo",minOnePhotoWarning:"Please add at least 1 image.",uploadAudioError:"Failed to upload audio file. Check your connection and try saving again."},formatting={title:"🔠 Presentation Font & Image Sizes",questionFontSize:"Question Font Size",answerFontSize:"Answer Font Size",imageSize:"Illustration Image Size",sizes:{small:"Small",standard:"Standard",large:"Large",extraLarge:"Extra Large",maximum:"Maximum"}},myImages={downloadFailed:"❌ Could not create download file, please try again",downloadTooltip:"Download",downloadTooltipUpgrade:"Upgrade to download",downloading:"Downloading...",downloadBtn:"Download",expiredWarning:"⚠️ Plan expired! ",binocularBadge:"🔭 Binocular",scoreRemaining:"· {{count}} left",scoreDone:"· done"}
525,enInteractiveImage={page:page$i,editor:editor$4,player:player$e,markerModal,binocular,formatting,myImages},page$h={title:"🧊 3D Panorama Museum",upgradeTooltip:"Get FullGame to unlock limits",upgradeBtn:"Upgrade Individually",helpTooltip:"View user guide",helpBtn:"User Guide",quotaTrial:"📌 Used <1>{{currentCount}}/{{limit}}</1> room creations",quotaUnlimited:"✅ Unlimited"},sidebar$8={create:"Create Exhibition Room",createRoom:"Create 360 Room",createWalkable:"Create 3D Exhibition",myRooms:"My Rooms"},content={title:"🧊 My Rooms",subtitle:"Manage your 360 gallery rooms",loading:"Loading rooms..."},empty$5={title:"No rooms yet",subtitle:"Start by creating your first 3D gallery",createFirstBtn:"✨ Create First Room"},demo$a={title:"3D Exhibition - Demo",badge:"Demo",hint:"Step into a 3D exhibition with 8 Vietnam landscape paintings. Use arrow keys to move, drag mouse to look around.",btnPlay:"Try Demo"},error$6={delete:"Failed to delete room. Please try again.",save:"Failed to save data. Please try again.",share:"Failed to share",shareSuccess:"Link copied",loadStatus:"Failed to load status",hotspotUpload:"An error occurred: "},card$3={dateUnknown:"Unknown date",confirmDelete:'Are you sure you want to delete room "{{title}}"?',createdAt:"Created:",framesCount:"Frames:",btnView:"View",btnShare:"Create student link",btnShareCopied:"Link copied!",btnEdit:"Edit",btnDelete:"Delete",btnDeleting:"Deleting...",renewToOpen:"🔒 Renew to open this room"},modal$3={error:{emptyName:"Please enter a room name",shortName:"Room name must be at least 2 characters"},title:{create:"✨ Create New Room",createWalkable:"✨ Create 3D Exhibition",edit:"✏️ Edit Room Info"},field:{name:"Room Name *",type:"Room Type *"},placeholder:{name:"E.g: Technology Room, History Room..."},btnCancel:"Cancel",btnCreating:"Creating...",btnUpdating:"Updating...",btnCreate:"✨ Create Room",btnUpdate:"✏️ Update",walkableWarning:"⚠️ Cannot change to another room type once this mode is selected! This mode also requires a relatively good computer configuration!"},hotspotModal={title:"Edit Frame {{index}}",uploadError:"Upload error: ",validationError:"Please enter an image link, upload an image, or enter a YouTube video URL",previewLabel:"✅ Image to display on wall:",uploadLabel:"📸 Choose image from computer:",uploading:"⏳ Processing and uploading image...",orLink:"Or enter an external link",urlLabel:"Image URL:",whatIsExternalLink:"What is an external link?",urlPlaceholder:"https://...",secureLink:"🛡️ Secure link from your storage (Auto-filled)",videoUrlLabel:"YouTube URL (To display video on wall):",titleLabel:"Artwork title:",titlePlaceholder:"e.g. Sunrise over the hills (falls back to Description)",authorLabel:"Author:",authorPlaceholder:"e.g. John Doe (optional)",descLabel:"Artwork description:",descPlaceholder:"Enter image description...",btnDelete:"🗑️ Delete Frame",btnCancel:"Cancel",btnSaving:"Saving...",btnUploading:"Uploading...",btnSave:"💾 Save",fontSizeLabel:"Font size:",hour:"{{count}} hour",hour_plural:"{{count}} hours"},pinBanner={count:"{{pinned}}/{{limit}} pinned",expired:"⚠️ Plan expired!",renew:"Renew"},editor$3={typeChanged:"✓ Panorama type changed",nameChanged:"✓ Room name updated",nameEmpty:"Room name cannot be empty",confirmDeleteFrame:"Are you sure you want to delete this frame?",showNumbers:"Show frame numbers",btnBackAndSave:"← Save & Go Back",toolsBtn:"Tools",title:"Edit: {{name}}",changeTypeTooltip:"Change panorama image type",frameIndex:"Frame {{index}}",hotspotsList:"Hotspots",hasImage:"✓ Image exists",prev:"← Prev",next:"Next →",pageOf:"Page {{current}} / {{total}}",btnEditFrame:"Edit frame",btnAddFrame:"Add image/video"},viewer={rotateHint:"Please rotate your phone to landscape for the best view",loading:"Loading room...",notFound:"Room not found",btnBackList:"Back to list",btnBack:"← Back",btnFullscreen:"⛶ Fullscreen",btnShare:"🔗 Share",btnExitFullscreen:"← Exit",frameInfoTitle:"Details",frameNoDesc:"No description available for this frame",shareSuccess:"✓ Link copied",shareError:"✗ Failed to share",mobileHint:"3D Room • Mobile View",mobile3DHelp:"Virtual 3D space is not supported on mobile devices",tooltipShare:"Share",emptyGallery:"Gallery has no artworks yet."},share$6={embedExpiredTitle:"This content is currently unavailable",embedExpiredHint:"Please contact the person who shared it to regain access.",notFound:"Room does not exist or has been deleted",btnBackList:"Go back"},roomType={tech:"🖥️ Technology",normal:"🌿 Nature",history:"📚 History",edu:"🏫 Classroom",walkable:"✨ Immersive 3D Exhibition"},walkable={restoring:"Artwork is being restored...",desktopOnly:"Free Movement 3D Mode",desktopOnlyDesc:"This feature currently only supports Desktop for the best experience.",btnBack:"Go Back",title:"Digital 3D Exhibition",controls:"Use <1>Arrow Keys</1> to move • <3>Mouse</3> to look around",controlsMobile:"<0>Swipe</0> to look around • Hold the <2>👣</2>
525 button to walk",walkButton:"Walk forward",walkBackButton:"Walk backward",shareTooltip:"Share Exhibition",hideHint:"Hide hint",showHint:"Show hint",closeDetail:"Click outside to close details",externalLinkBtn:"View related page",emptyArtwork:"No Artwork",noDescription:"No description...",frameIndex:"Frame {{index}}",doorEnter:"Tap to enter",muteBgm:"Mute background music",unmuteBgm:"Unmute background music",autoTour:"Auto tour",autoTourStop:"Stop tour",autoTourShort:"Auto",autoTourStopShort:"Stop",tourSpeed:"Tour speed",tourModeWalk:"Looking where you walk — tap to gaze at artworks",tourModeGaze:"Gazing at artworks while walking — tap to look ahead",tourModeWalkShort:"Ahead",tourModeGazeShort:"Gaze",doorEnterNext:"VISIT NEXT ROOM",showMap:"Show map",hideMap:"Hide map",portalVisit:"VISIT",portalNext:"NEXT ROOM",clickToOpenLink:"🔗 Click to open link"},bgm$3={title:"Gallery Background Music",desc:"Music plays automatically (looped) when viewers enter the 3D gallery. Max 5MB, mp3/wav/ogg/m4a.",menuItem:"Background music",uploadBtn:"Upload music",uploadBtnPro:"Upload music (FullGame required)",replaceBtn:"Replace music",deleteBtn:"Remove music",useBtn:"Use this music",uploading:"Uploading...",saved:"Background music saved!",deleted:"Background music removed.",proOnly:"Uploading background music is a FullGame-only feature.",errorType:"Unsupported format. Use mp3/wav/ogg/m4a.",errorSize:"File too large ({{size}}MB). Max 5MB.",errorGeneric:"Upload failed, please try again."},roomLinks={btn:"Connect Galleries",title:"Gallery Link Settings",hint:"Pick a room for each slot, then drag from a room's 🔗 handle onto another room to connect them (or tap 🔗 then tap the target room). Links are two-way — each room can have up to 3 doors, shown right inside the 3D gallery. The room in Slot 1 is the entry room — you can enable a cover page for it below.",slotLabel:"Slot {{index}}",slotEmpty:"— Select room —",linkingHint:'Linking from "{{name}}" — tap the target room to connect',dragToLink:"Drag onto another room to connect",removeLink:"Remove link",save:"Save links",cancel:"Cancel",saved:"Links saved! Doors will appear inside the 3D gallery.",saveError:"Failed to save links, please try again.",needTwoRooms:"You need at least 2 walkable 3D galleries to connect rooms.",needRoomFirst:"Pick a room for this slot first!",maxLinks:"Each room can connect to at most 3 rooms!",maxLinksRoom:'Room "{{name}}" exceeds 3 links (including links to rooms outside this map).',thumbBtn:"Cover photo",thumbTooltip:"Upload a cover photo — shown on the connecting door in 3D",thumbSaved:"Room cover photo saved!",thumbError:"Failed to upload photo, please try again.",chip:"Connected ({{total}})"},session$2={btnCollect:"🎨 Assign Students",btnStop:"⏹️ Stop Collecting",btnDismiss:"✖ Dismiss Session",expiredLabel:"Expired",btnReload:"🔄 Collect Work",btnReloadLoading:"⏳...",codeLabel:"Join Code:",qrTooltip:"Students scan QR code or visit the link above to submit artwork",stopConfirm:"Are you sure you want to stop collecting? (The code will be invalidated, students can no longer submit artwork to this room)",stopError:"An error occurred while stopping collection.",bulkUpload:"📤 Upload Images (Tr.)",bulkLimit:"Room is full (45/45). Please delete some to upload more.",bulkSuccess:"Successfully uploaded {{count}} images!",bulkError:"An error occurred during bulk upload. Please try again.",reloadNoSession:'No active "Assign Students" session found.',reloadNoUploads:"Students haven't uploaded any images in this session.",reloadNoNew:"All student images are already in the gallery.",reloadFull:"Room is full (45/45). Delete some to receive more student work.",reloadSuccess:"Reloaded {{count}} student artworks!{{skipped}}",reloadSkipped:" (Skipped {{count}} images due to no available slots)",reloadError:"Error reloading images. Please try again.",studentArtwork:"Artwork by {{name}}",modalTitle:"Assign Students Artwork",modalInfo:"The system will generate a 5-digit code for students to upload images to this gallery. <1>Maximum 45 images total</1> per room.",maxPerStudent:"Images per student:",unitTranh:"images / student",duration:"Code expiration time:",durationUnit:"{{count}} hours",createLoading:"Creating...",btnCreate:"Create Session & Get Code",readyTitle:"Submission Session Ready!",readySubtitle:"Students upload max <1>{{max}}</1> images · Expires in <3>{{hours}} hours</3>",codeInstruction:"JOIN CODE (Click to copy)",copied:"Copied!",copyCode:"Copy Code",qrInstru
525ction:"Students scan QR or enter code",shareLabel:"Or share via link:",btnCopy:"Copy",btnCopied:"Copied",btnCloseKeep:"Close (keep session active)",creating:"Creating...",createError:"An error occurred while creating the submission session.",artworkUnit:"images / student",codeHint:"JOIN CODE (Click to copy)",qrHelp:"Students scan QR code or visit the link below to submit artwork",shareOrPaste:"Or share via link / Paste in browser:",copyBtn:"Copy",successTitle:"Submission Session Ready!",successSubtitle:"Students upload max {{count}} images · Expires in {{hours}} hours",modalAlert:"The system will generate a 5-digit code for students to upload images to this gallery. <strong>Total max 45 images</strong> per room.",maxPerStudentLabel:"Number of images each student can upload (per submission):",expirationLabel:"Code expiration duration:",allowMultipleLabel:"Allow students to submit multiple times on the same device (unchecked: each device can submit only ONCE — missing images cannot be added later)"},map={title:"Exhibition Map",btnShow:"Room Map",btnHide:"Hide Map",lockedDuringSession:"Cannot rearrange map while collecting student work",hint:"Click on a frame to move it",north:"North Wall",south:"South Wall",west:"West Wall",east:"East Wall",p1w:"Partition 1 (Left)",p1e:"Partition 1 (Right)",p2w:"Partition 2 (Left)",p2e:"Partition 2 (Right)",shortNorth:"NORTH",shortSouth:"SOUTH",shortWest:"WEST",shortEast:"EAST",moveTitle:"Move Artwork",labelFrom
525:"From slot",labelTo:"To slot",placeholderTo:"1–45",btnMove:"Move",btnCancel:"Cancel",legendFilled:"Occupied",legendEmpty:"Empty",legendSelected:"Selected",guideTitle:"📌 How to move artwork:",guideStep1:"Click on a <1>purple</1> dot to move",guideStep2:"Enter target slot (1–45) → press <1>Move</1> or <3>Enter</3>",guideStep3:"Target slot must be <1>empty</1>",btnSave:"Save Map",btnSaving:"⏳ Saving...",btnSaved:"✓ Saved",errorRange:"Position must be between 1 and 45",errorSame:"That is the current position",errorOccupied:"Slot {{index}} is already occupied",errorSave:"Error saving map. Please try again."},student$1={sessionNotFound:"Exhibition session does not exist or has ended.",sessionExpired:"Exhibition session has expired.",loadError:"Failed to load session info. Please try again.",noFileError:"Please select at least 1 image.",uploadError:"An error occurred while uploading. Please try again.",loading:"Loading session information...",notAvailableTitle:"Session Not Available",notAvailableDesc:"Please contact your teacher for a new code.",thanks:"🎨 Thank you for participating!",alreadySubmittedTitle:"You've already submitted!",alreadySubmittedDesc:"This device has already submitted artwork for this session. Your work is waiting for teacher approval.",successTitle:"Artwork Submitted!",successDesc:"<bold>{{count}}</bold> of your images have been sent to the 3D gallery.<br/>The teacher will review and place them in the room.",successBadge:"🖼️ Congratulations on having artwork in the exhibition!",title:"3D Exhibition",subtitle:"Upload up to <1>{{max}}</1> of your artworks",nameLabel:"Your full name (for credit)",namePlaceholder:"E.g: John Doe (optional)",imageTitleLabel:"Image {{index}} title",imageTitlePlaceholder:"E.g: Northwest Mountains (optional)",imageAuthorLabel:"Image {{index}} author",imageAuthorPlaceholder:"E.g: John Doe (optional)",imageDescLabel:"Image {{index}} description",imageDescPlaceholder:"E.g: Watercolour, inspired by my hometown (optional)",btnSelect:"Click to select images",uploadHint:"Max {{max}} images · JPG, PNG, WEBP",compressionHint:"Images will be automatically compressed",selectedCount:"Selected: {{current}}/{{max}} images",btnAddMore:"+ Add More",uploading:"Uploading...",btnUploading:"⏳ Sending ({{current}}/{{total}})...",btnConfirm:"🖼️ Confirm placing {{count}} images in the gallery",footerNote:"Auto-compressed · Only one submission per device",pageForCode:"This page is for submitting artwork for join code: <bold>{{code}}</bold>",errorNoFiles:"Please select at least 1 image to send.",loadingInfo:"Loading session information...",unavailableTitle:"Session Not Available",contactTeacher:"Please contact your teacher for a new code.",thanksParticipating:"Thank you for participating!",congratsTask:"Congratulations on completing the artwork submission!",uploadLimit:"Upload up to {{count}} of your artworks",clickToSelect:"Click to select images",fileFormatHint:"Max {{max}} images · JPG, PNG, WEBP",uploadingStatus:"Sending images to the system...",btnUploadingProgress:"⏳ Sending ({{current}}/{{total}})...",btnSubmit:"🖼️ Confirm placing {{count}} images",maxSubmissionsReached:"You have reached the maximum number of submissions on this device. Please ask your teacher to allow more.",errorTooManyFiles:"Removed {{dropped}} image(s) — you can submit at most {{max}} more.",imageLimitExceeded:"You can submit only {{remaining}} more image(s) (max {{limit}} for this session).",quotaUsedUpDesc:"You have submitted all {{count}} artwork(s) for this session. They are waiting for your teacher to place them in the room."},banner={menuItem:"Wall banners",title:"Slogan banners per wall",hint:"Enter slogan text for each wall (always shown UPPERCASE in 3D). The banner hangs above the row of artworks and auto-sizes to the text length. Leave empty to skip.",empty:"No banner",upload:"Upload",change:"Change",saved:"Banner saved!",removed:"Banner removed.",error:"Something went wrong, try again.",textPlaceholder:"e.g. SOCIALIST REPUBLIC OF VIETNAM",textColor:"Text color",bgColor:"Backgroun
525d",previewEmpty:"(slogan preview)",saveOne:"💾 Save this wall"},cover={enterTour:"ENTER TOUR",switchLabel:"Add a cover page for the exhibition",switchHint:"Enable to add an intro cover page (title + 3 images). When opening the exhibition, visitors see the cover first, then tap ENTER TOUR to enter the first room.",titleLabel:"Exhibition title",titlePlaceholder:"e.g. 3D Art Exhibition - Cultural Space...",titleFromName:"The cover title is the Exhibition name above."},coverEditor={slotMain:"Large frame (center)",slotLeft:"Small frame (left)",slotRight:"Small frame (right)"},exhibition={createBtn:"Create Exhibition",badge:"🏛️ Exhibition",createTitle:"Create Exhibition",editTitle:"Edit Exhibition",nameLabel:"Exhibition name",namePlaceholder:"e.g. 3D Photo Exhibition - Cultural Space...",roomsLabel:"Pick showcase rooms (3D rooms)",roomsHint:"Tick the 3D rooms in this exhibition. Reorder with ▲▼ — room #1 is the entry room. While touring, doors in each room lead to the other member rooms.",entryRoom:"Entry",moveUp:"Move up",moveDown:"Move down",remove:"Remove from exhibition",noWalkable:"No 3D exhibition rooms yet. Create a 3D exhibition room first.",needName:"Please enter an exhibition name.",needRoom:"You need at least one 3D room to create an exhibition.",save:"Save exhibition",saved:"Exhibition saved!",roomChip:"{{total}} rooms",confirmDelete:'Delete exhibition "{{name}}"? (member 3D rooms are NOT deleted)',notFound:"Exhibition not found or has no rooms."},enPanorama={page:page$h,sidebar:sidebar$8,content,empty:empty$5,demo:demo$a,error:error$6,card:card$3,modal:modal$3,hotspotModal,pinBanner,editor:editor$3,viewer,share:share$6,roomType,walkable,bgm:bgm$3,roomLinks,session:session$2,map,student:student$1,banner,cover,coverEditor,exhibition},sidebar$7={title:"Quiz Nghiêng Đầu",upgradePro:"Nâng Cấp Lẻ",create:"Tạo bài mới",myLessons:"Bài học của tôi",tutorial:"Video hướng dẫn"},quota$2={used:"Đã dùng {{count}}/{{limit}} lượt tạo bài",limitReached:"Đã hết lượt miễn phí",proPermanent:"Ko giới hạn vĩnh viễn",proDaysRemaining:"{{days}} ngày ko giới hạn"},form$o={createTitle:"Tạo bài học mới",editTitle:"Chỉnh sửa bài học",titleLabel:"Tên bài học",questionsCount:"Câu hỏi ({{count}}/{{max}})",questionLabel:"Câu {{index}}",questionEmpty:"(Chưa nhập)",questionContent:"Nội dung câu hỏi:",questionPlaceholder:"Nhập câu hỏi...",answerALabel:"Đáp án A (học sinh nghiêng trái):",answerAPlaceholder:"Nhập đáp án A...",answerBLabel:"Đáp án B (học sinh nghiêng phải):",answerBPlaceholder:"Nhập đáp án B...",correctAnswerLabel:"Đáp án đúng:",addQuestion:"Thêm câu hỏi",save:"Lưu bài học",saving:"Đang lưu...",cancel:"Hủy",errorTitle:"Vui lòng nhập tên bài học",errorNoQuestion:"Phải có ít nhất 1 câu hỏi",errorQuestionEmpty:"Câu hỏi {{index}} không được để trống",errorAnswerA:"Câu hỏi {{index}}: Đáp án A không được để trống",errorAnswerB:"Câu hỏi {{index}}: Đáp án B không được để trống",errorCorrect:"Câu hỏi {{index}}: Phải chọn đáp án đúng",errorLoad:"Không thể tải bài học",errorSave:"Có lỗi xảy ra",maxQuestionsAlert:"Chỉ được tối đa {{max}} câu hỏi",minQuestionsAlert:"Phải có ít nhất 1 câu hỏi",questionsSectionTitle:"Câu hỏi ({{count}})",pickFromBankBtn:"🗃️ Chọn từ Kho hoặc AI",manualInputBtn:"✏️ Nhập thủ công",questionsNote:"Mỗi câu hỏi cần có đáp án A (nghiêng trái) và đáp án B (nghiêng phải), chọn đáp án đúng.",questionListHeader:"Danh sách câu hỏi",noQuestionsLbl:"Chưa có câu hỏi nào",noQuestionsDesc:"Chọn từ Kho câu hỏi hoặc nhập thủ công để thêm câu hỏi.",editQuestionTooltip:"Chỉnh sửa câu hỏi",deleteQuestionTooltip:"Xóa câu hỏi",removeQuestionMsg:"Đã xóa câu hỏi số {{index}}",clearAllBtn:"Xóa tất cả",clearAllConfirm:"Bạn có chắc muốn xóa tất cả câu hỏi?",clearAllSuccess:"Đã xóa tất cả câu hỏi",addQuestionSuccess:"Đã thêm {{count}} câu hỏi (tổng: {{total}})",updateQuestionSuccess:"Đã cập nhật câu hỏi",selectQuestionsTitle:"Chọn câu hỏi từ Kho",skippedNot2Answers:"Đã bỏ qua {{count}} câu không có đúng 2 đáp án (không phù hợp với Quiz Nghiêng Đầu)",noValidQuestions:"Không có câu nào phù hợp — Quiz Nghiêng Đầu chỉ dùng câu hỏi có đúng 2 đáp án",importSummary:"Đã thêm {{added}} câu | Bỏ qua {{skipped}} câu (không có đúng 2 đáp án)",allowRetryLabel:"Cho phép làm lại (đối với bài g
525iao về nhà)",allowRetryDesc:"Học sinh có thể chÆ¡i lại nhiều lần trên cùng trình duyệt. Kết quả cuối cùng sẽ được gá»­i về.",sensitivityLabel:"Độ nhạy nghiêng đầu (số độ): {{value}}°",sensitivityDesc:"Góc nghiêng để hệ thống nhận diện việc chọn đáp án. Giá trị càng nhỏ càng nhạy (mặc định 20°).",autoNextDelayLabel:"Thời gian tá»± động chuyển câu: {{value}} giây",autoNextDelayDesc:"Sau khi trả lời, hệ thống tá»± động chuyển sang câu tiếp theo sau thời gian này (mặc định 3 giây).",shuffleAnswers:"🔀 Đảo đáp án khi vào chÆ¡i",shuffleAnswersDesc:"Hoán đổi vị trí A/B ngẫu nhiên mỗi câu — không ảnh hưởng đến đáp án đúng",noCameraMode:"📷 Dùng camera (nghiêng đầu chọn đáp án)",noCameraModeDesc:"Bật: học sinh nghiêng đầu trước camera. Tắt: bấm tay vào đáp án, không cần camera.",ttsLabel:"🔊 Giọng đọc AI",ttsReady:"✅ Sẵn sàng",ttsNeeded:"⚠️ Cần cài đặt",ttsDesc:"Tá»± động đọc câu hỏi bằng AI nếu câu hỏi không có audio upload",bgmDefault:"🎵 Nhạc nền mặc định",bgmNone:"Mặc định (Bài 1)",bgmTrack:"Bài {{n}}",bgmDesc:"Học sinh vẫn có thể chuyển bài nhạc khác trong khi chÆ¡i.",bgmCustom:"Tải nhạc riêng (FullGame):",bgmMyMusic:"Nhạc cá»§a tôi",bgColorLabel:"🎨 Màu nền khung",bgQuestion:"❓ Khung câu hỏi",bgAnswerA:"👈 Khung đáp án A",bgAnswerB:"👉 Khung đáp án B",bgReset:"Mặc định",importLesson:"📂 Từ bài có sẵn",importLessonTitle:"Thêm câu từ bài có sẵn",errorLibrarySelection:"Vui lòng chọn Cấp học, Môn học và Khối lớp để đưa lên Thư viện cộng đồng.",libraryLargeAlert:"Bài quá lớn, không thể đưa lên Thư viện cộng đồng. Bài đã được lưu thành công."},myLessons$2={title:"Bài Học Cá»§a Tôi",subtitle:"Quản lý các bài Quiz Nghiêng Đầu cá»§a bạn",empty:"Bạn chưa có bài học nào. Hãy tạo bài học mới từ menu bên trái để bắt đầu.",questionsCount:"{{count}} câu hỏi",updatedAt:"Cập nhật: {{date}}",sharedBadge:"Đã chia sẻ",play:"ChÆ¡i",edit:"Sá»­a",assign:"Giao bài",share:"Chia sẻ",copyLink:"Copy link",unshare:"Há»§y chia sẻ",deleteTitle:"Xác Nhận Xóa",deleteMessage:"Bạn có chắc chắn muốn xóa bài học này? Hành động này không thể hoàn tác.",deleteCancel:"Há»§y",deleteConfirm:"Xóa",toastDeleteSuccess:"Xóa bài học thành công",toastDeleteError:"Không thể xóa bài học",back:"Quay lại",toastLoadError:"Không thể tải danh sách bài học",toastShareSuccess:"Đã sao chép link chia sẻ!",toastShareError:"Không thể chia sẻ bài học",toastCopySuccess:"Đã sao chép link!",toastUnshareSuccess:"Đã há»§y chia sẻ",toastUnshareError:"Không thể há»§y chia sẻ",lockedTip:"Gia hạn để mở bài này",pinExpired:"⚠️ Gói đã hết hạn!",createNewFirst:"➕ Tạo bài đầu tiên",demo:{title:"Quiz Nghiêng Đầu - Bản Chạy Thá»­",badge:"Bản chạy thá»­",hint:"ChÆ¡i thá»­ để trải nghiệm tính năng trước khi tạo bài cá»§a bạn"}},game$4={questionCounter:"Câu {{current}}/{{total}}",scoreCorrect:"Đúng:",scoreIncorrect:"Sai:",tiltLeft:"Nghiêng trái",tiltRight:"Nghiêng phải",holdNeutral:"Giữ đầu thẳng để tiếp tục...",feedbackCorrect:"Đúng rồi!",feedbackIncorrect:"Sai rồi!",correctAnswerIs:"Đáp án đúng: {{answer}}",nextQuestion:"Câu tiếp theo",finish:"Kết thúc",loadingCamera:"Đang khởi động camera...",calibrating:"Giữ đầu thẳng, đang đo góc chuẩn...",exit:"Thoát",doneTitle:"Hoàn thành!",doneScore:"Trả lời đúng: {{correct}}/{{total}} câu",doneIncorrect:"Sai: {{count}} câu",doneExit:"Thoát",doneRestart:"ChÆ¡i lại",reportBtn:"📋 Xem Báo Cáo",reportTitle:"📋 Báo Cáo",reportStats:"{{correctCount}}/{{questionsCount}} đúng",back:"Quay lại",questionLabel:"Câu {{n}}",chosenLabel:"Chọn:",correctLabel:"Đúng:",tiltContextTip:"👆 Bấm hoặc nghiêng đầu để chọn",emojiContextTip:"😄 Biểu cảm khuôn mặt để chọn",bgmOn:"Nhạc: BẬT",bgmOff:"Nhạc: TẮT",nextShort:"Câu tiếp",errorWebGL:"Trình duyệt không hỗ trợ WebGL. Thá»­ dùng Chrome.",errorDenied:"Camera bị từ chối. Hãy cấp quyền camera trong cài đặt trình duyệt.",errorZaloBlocked:'Mở trong Zalo/Messenger bị chặn Camera. Bấm vào nút 3 chấm góc phải trên cùng và chọn "Mở trong trình duyệt" để chÆ¡i!',faceTheCamera:"Hướng mặt vào camera",noCameraTip:"📷 Không thấy camera, nhấn vào đây",errorCamera:"Không truy cập được camera. Hãy kiểm tra quyền camera cá»§a trình duyệt."},instructions$4={title:"Cách chÆ¡i Quiz Nghiêng Đầu",step1Title:"1. Cho phép truy cập camera",step1Desc:'Trò chÆ¡i cần camera để nhận diện khuôn mặt. Bấm "Cho phép" (Allow) ở góc trên trình duyệt.',step2Title:"2. Nghiêng đầu để chọn đáp án",step2Desc:"Nghiêng sang trái hoặc phải để chọn đáp án. Cần nghiêng hÆ¡n 15° để xác nhận.",step3Title:"3. (Tùy chọn)Mỗi câu có thể cho má
525»™t học sinh khác nhau",step3Desc:'Sau mỗi câu, học sinh tiếp theo lên thay thế. Giáo viên bấm "Câu tiếp theo" để chuyển.',tip:"Gồm {{count}} câu hỏi",fullscreen:"Toàn màn hình",ready:"Sẵn sàng chÆ¡i!",loading:"Đang tải...",startCameraTip:'Nhấn "Bắt đầu" để khởi động camera',modeTilt:"↔️ Nghiêng đầu",modeEmoji:"😄 Biểu cảm mặt",emojiStep1Title:"Camera nhận diện khuôn mặt",emojiStep1Desc:"Đảm bảo ánh sáng tốt và hướng mặt vào camera.",emojiStep2Title:"Hai emoji hiện bên trái và phải",emojiStep2Desc:"Mỗi emoji tương ứng một đáp án. Emoji thay đổi ngẫu nhiên mỗi câu.",emojiStep3Title:"Biểu cảm tương ứng emoji muốn chọn",emojiStep3Desc:"Giữ biểu cảm khoảng 1 giây cho đến khi thanh tiến trình đầy."},share$5={lessonBy:"Bài học cá»§a {{name}}",notFound:"Không tìm thấy bài học",linkInvalid:"Link chia sẻ không hợp lệ hoặc đã bị xóa.",loading:"Đang tải bài học...",goHome:"Trở về trang chá»§"},viHeadTiltQuiz={sidebar:sidebar$7,quota:quota$2,form:form$o,myLessons:myLessons$2,game:game$4,instructions:instructions$4,share:share$5},sidebar$6={title:"Head Tilt Quiz",upgradePro:"Get FullGame",create:"Create new lesson",myLessons:"My Lessons",tutorial:"Tutorial Video"},quota$1={used:"Used {{count}}/{{limit}} lessons",limitReached:"Free limit reached",proPermanent:"FullGame Permanent",proDaysRemaining:"{{days}} FullGame days left"},form$n={createTitle:"Create new lesson",editTitle:"Edit lesson",titleLabel:"Lesson title",questionsCount:"Questions ({{count}}/{{max}})",questionLabel:"Question {{index}}",questionEmpty:"(Not entered)",questionContent:"Question content:",questionPlaceholder:"Enter question...",answerALabel:"Answer A (tilt left):",answerAPlaceholder:"Enter answer A...",answerBLabel:"Answer B (tilt right):",answerBPlaceholder:"Enter answer B...",correctAnswerLabel:"Correct answer:",addQuestion:"Add question",save:"Save lesson",saving:"Saving...",cancel:"Cancel",errorTitle:"Please enter a lesson title",errorNoQuestion:"Must have at least 1 question",errorQuestionEmpty:"Question {{index}} cannot be empty",errorAnswerA:"Question {{index}}: Answer A cannot be empty",errorAnswerB:"Question {{index}}: Answer B cannot be empty",errorCorrect:"Question {{index}}: Must select the correct answer",errorLoad:"Cannot load lesson",errorSave:"An error occurred",maxQuestionsAlert:"Maximum {{max}} questions allowed",minQuestionsAlert:"Must have at least 1 question",questionsSectionTitle:"Questions ({{count}})",pickFromBankBtn:"🗃️ Pick from Bank or AI",manualInputBtn:"✏️ Enter manually",questionsNote:"Each question needs answer A (tilt left) and answer B (tilt right), then select the correct one.",questionListHeader:"Question list",noQuestionsLbl:"No questions yet",noQuestionsDesc:"Pick from Question Bank or enter manually to add questions.",editQuestionTooltip:"Edit question",deleteQuestionTooltip:"Delete question",removeQuestionMsg:"Removed question {{index}}",clearAllBtn:"Clear all",clearAllConfirm:"Are you sure you want to clear all questions?",clearAllSuccess:"All questions cleared",addQuestionSuccess:"Added {{count}} questions (total: {{total}})",updateQuestionSuccess:"Question updated",selectQuestionsTitle:"Select questions from Bank",skippedNot2Answers:"Skipped {{count}} questions that don't have exactly 2 answers (not compatible with Head Tilt Quiz)",noValidQuestions:"No compatible questions found — Head Tilt Quiz only supports questions with exactly 2 answers",importSummary:"Added {{added}} questions | Skipped {{skipped}} (not exactly 2 answers)",allowRetryLabel:"Allow retry (for home assignments)",allowRetryDesc:"Students can play multiple times on the same browser. The final result will be submitted.",sensitivityLabel:"Head tilt sensitivity (degrees): {{value}}°",sensitivityDesc:"The tilt angle to detect answer selection. Smaller values are more sensitive (default 20°).",autoNextDelayLabel:"Auto-advance delay: {{value}} seconds",autoNextDelayDesc:"After answering, the system automatically moves to the next question after this delay (default 3 seconds).",shuffleAnswers:"🔀 Shuffle answers",shuffleAnswersDesc:"Randomly swap A/B positions for each question — doesn't affect the correct answer.",noCameraMode:"📷 Use camera (tilt head to answer)",noCameraModeDesc:"On: students tilt their head in front of the camera. Off: they tap the answer, no camera needed.",ttsLabel:"🔊 AI Voiceover",ttsReady:"✅ Ready",ttsNeeded:"⚠️ Setup required",ttsDesc:"Automatically read questions using AI if no audio is uploaded.",bgmDefault:"🎵 Default background music",bgmNone:"Default (Track 1)",bgmTrack:"Track {{n}}",bgmDesc:"Students can still switch to other music while playing.",bgmCustom:"Upload custom music (FullGame):",bgmMyMusic:"My music",bgColorLabel:"
525🎨 Frame background color",bgQuestion:"❓ Question frame",bgAnswerA:"👈 Answer A frame",bgAnswerB:"👉 Answer B frame",bgReset:"Default",importLesson:"📂 From existing lesson",importLessonTitle:"Add questions from another lesson",errorLibrarySelection:"Please select Level, Subject, and Grade to publish to Community Library.",libraryLargeAlert:"Lesson is too large to publish to Community Library. However, it was saved successfully."},myLessons$1={title:"My Lessons",subtitle:"Manage your Head Tilt Quiz lessons",empty:"No lessons yet. Create a new lesson from the left menu.",questionsCount:"{{count}} questions",updatedAt:"Updated: {{date}}",sharedBadge:"Shared",play:"Play",edit:"Edit",assign:"Assign",share:"Share",copyLink:"Copy link",unshare:"Unshare",deleteTitle:"Confirm Delete",deleteMessage:"Are you sure you want to delete this lesson? This action cannot be undone.",deleteCancel:"Cancel",deleteConfirm:"Delete",toastDeleteSuccess:"Lesson deleted successfully",toastDeleteError:"Cannot delete lesson",back:"Back",toastLoadError:"Cannot load lessons",toastShareSuccess:"Share link copied!",toastShareError:"Cannot share lesson",toastCopySuccess:"Link copied!",toastUnshareSuccess:"Sharing disabled",toastUnshareError:"Cannot disable sharing",lockedTip:"Upgrade to unlock this lesson",pinExpired:"⚠️ Subscription expired!",createNewFirst:"➕ Create your first lesson",demo:{title:"Head Tilt Quiz - Demo",badge:"Demo",hint:"Try this demo to experience the game before creating your own"}},game$3={questionCounter:"Question {{current}}/{{total}}",scoreCorrect:"Correct:",scoreIncorrect:"Wrong:",tiltLeft:"Tilt left",tiltRight:"Tilt right",holdNeutral:"Hold head straight to continue...",feedbackCorrect:"Correct!",feedbackIncorrect:"Wrong!",correctAnswerIs:"Correct answer: {{answer}}",nextQuestion:"Next question",finish:"Finish",loadingCamera:"Starting camera...",calibrating:"Hold head straight, calibrating...",exit:"Exit",doneTitle:"Complete!",doneScore:"Class got {{correct}}/{{total}} correct",doneIncorrect:"Wrong: {{count}}",doneExit:"Exit",doneRestart:"Play again",reportBtn:"📋 View Report",reportTitle:"📋 Report",reportStats:"{{correctCount}}/{{questionsCount}} correct",back:"Back",questionLabel:"Question {{n}}",chosenLabel:"Chosen:",correctLabel:"Correct:",tiltContextTip:"👆 Click or tilt head to choose",emojiContextTip:"😄 Use facial expression to choose",bgmOn:"Music: ON",bgmOff:"Music: OFF",nextShort:"Next",errorWebGL:"Your browser doesn't support WebGL. Try using Chrome.",errorDenied:"Camera access denied. Please grant camera permission in browser settings.",errorZaloBlocked:'Opening in Zalo/Messenger blocks the camera. Click the 3 dots and choose "Open in Browser" to play!',faceTheCamera:"Face the camera",noCameraTip:"📷 Can't see the camera? Click here",errorCamera:"Cannot access the camera. Please check your browser camera permission."},instructions$3={title:"How to play Head Tilt Quiz",step1Title:"1. Allow camera access",step1Desc:'The game needs your camera to detect your face. Click "Allow" in the browser.',step2Title:"2. Tilt your head to choose",step2Desc:"Tilt left for A | Tilt right for B. Must tilt more than 15° to confirm.",step3Title:"3. Different student for each question",step3Desc:'After each question, the next student takes over. Teacher clicks "Next question" to advance.',tip:"{{count}} questions | 1 student per question",fullscreen:"Fullscreen",ready:"Ready to play!",loading:"Loading...",startCameraTip:'Press "Start" to launch camera',modeTilt:"↔️ Head Tilt",modeEmoji:"😄 Facial Expression",emojiStep1Title:"Face recognition by camera",emojiStep1Desc:"Ensure good lighting and face the camera.",emojiStep2Title:"Two emojis on left and right",emojiStep2Desc:"Each emoji corresponds to an answer. Emojis change randomly for each question.",emojiStep3Title:"Show facial expression for the emoji you want",emojiStep3Desc:"Hold the expression for about 1 second until the progress bar is full."},share$4={lessonBy:"Lesson by {{name}}",notFound:"Lesson not found",linkInvalid:"Share link is invalid or has been deleted.",loading:"Loading lesson...",goHome:"Go to home"},enHeadTiltQuiz={sidebar:sidebar$6,quota:quota$1,form:form$n,myLessons:myLessons$1,game:game$3,instructions:instructions$3,share:share$4}
525,page$g={title:"🤏 Drag & Drop - Matching",upgradeBtn:"Upgrade Individually",upgradeTooltip:"Get FullGame to unlock limits",helpBtn:"User Guide",helpTitle:"Drag & Drop - Matching Guide",helpDesc:"Learn how to create drag and drop label quizzes or matching quizzes"},sidebar$5={createDragDrop:"Drag & Drop Image",createMatching:"Matching Quiz",createSorting:"Sorting Quiz",myQuizzes:"My Quizzes"},myQuizzes$4={title:"📚 My Quizzes",subtitle:"Manage your drag & drop and matching quizzes",matchingLabel:"Matching Game",dragDropLabel:"Drag & Drop Labels",loadingError:"Failed to load quizzes",deleteSuccess:"Quiz deleted successfully",deleteError:"Failed to delete quiz",noQuizMsg:"You don't have any quizzes yet. <1>Create a new quiz</1> to get started.",questionCount:"Questions",updated:"Updated",btnView:"View",btnViewTooltip:"Preview / Present",btnEdit:"Edit",btnEditTooltip:"Edit quiz",btnAssign:"Assign",btnAssignTooltip:"Assign to class",btnDeleteTooltip:"Delete quiz",lockedTip:"Upgrade to unlock this quiz",demo:{title:"Drag & Drop - Matching - Sorting - Demo",badge:"Demo",typesLabel:"3 question types",hint:"Try all 3 types: Drag & Drop labels, Matching, and Sorting"},expiredPackage:"Your plan has expired!"},createQuiz={updateQuestionSuccess:"Question updated successfully",addQuestionSuccess:"Question added successfully",deleteQuestionSuccess:"Question deleted successfully",titleErrorEmpty:"Please enter a quiz title",warningNoQuestions:"Please add at least 1 question",warningMaxQuestions:"Maximum 10 questions per quiz",updateQuizSuccess:"Quiz updated successfully",createQuizSuccess:"Quiz created successfully",limitReachedMsg:"You have exhausted your 10 free quiz limits. Please upgrade to continue.",saveError:"Failed to save quiz: ",quotaTrial:"Used <1>{{currentCount}}/{{limit}}</1> times creating a quiz",quotaUnlimited:"✅ You are using FullGame - Unlimited",placeholderEdit:"📝 Edit Quiz",placeholderCreate:"➕ Create New Quiz",titleLabel:"Quiz name",titleInputPlaceholder:"e.g. Chapter 1 Review, Unit 5 Vocabulary...",btnEditTitleTooltip:"Edit Title",createQuestionTitle:"❓ Create Questions",questionListTitle:"📋 Question List",questionNumber:"📌 Q.{{num}}",blankSpace:"Blanks",answers:"Answers",btnEditQuestion:"Edit",btnDeleteQuestion:"Delete",warningNoTitle:"Please enter a title before adding questions",btnAddQuestion:"Add New Question",maxQuestionsReached:"✅ Reached maximum of 10 questions",btnCancel:"✕ Cancel",btnSaving:"⏳ Saving...",btnSave:"💾 Save Quiz",editTitleDialog:"✏️ Edit Quiz Title",editTitleLabel:"Quiz Title",btnDialogCancel:"Cancel",btnDialogSave:"Save",confirmCancelTitle:"⚠️ Confirm Cancel",confirmCancelMsg:"Are you sure you want to cancel? All changes will be lost.",btnConfirmNo:"No, Go Back",btnConfirmYes:"Yes, Cancel"},deleteDialog$1={title:"🗑️ Confirm Deletion",message:"Are you sure you want to delete this quiz? This action cannot be undone.",btnCancel:"Cancel",btnDelete:"Delete"},preview$1={errorLoad:"Failed to load quiz",errorNotFound:"Quiz not found",btnGoBack:"Go Back",btnFullscreen:"Fullscreen",btnExitFullscreen:"Exit Fullscreen",defaultTitle:"Quiz",btnPrev:"Prev",btnNext:"Next",questionStatus:"Q.{{current}} / {{total}}",instructionDragDrop:"🎯 Drag the answers or labels into the right spots (or tap a blank to pick one)",instructionFillIn:"✏️ Type your answer into each blank on the image",instructionMatching:"🔗 Drag to connect the matching items across the two columns",instructionSorting:"↕️ Drag the blocks to put them in the correct order",instructionGrouping:"🗂️ Drag each card into the group it belongs to"},customInstruction={label:"Edit the instruction line",helper:"Leave empty to use the default line"},share$3={errorLoad:"Failed to load quiz. Please check the link.",loading:"Loading quiz...",errorNotFound:"Quiz not found. Please check the shared link."},blankSpaceCanvas={uploadError:"Error uploading image: ",requireImageWarning:"Please upload an image first",requireAnswerWarning:"Please enter an answer",requireImageLinkWarning:"Please provide an image link or upload an image",requireMinBlanksWarning:"Please create at least 1 blank",requireAllAnswersWarning:"Please enter answers for all blanks",title:"✏️ Create Drag & Drop Question",uploadingText:"⏳ Compressing and uploading...",method2:"Paste direct image link",guideLinkText:"📹 How to get image link",placeholderUrl:"https://example.com/image.jpg",imageLoadedText:"✓ Image loaded successfully",borderEnabled:"☑️ Border / Sidebar",borderDesc:"Show a white border or sidebar when enabled",borderTypeSimple:"Border: white border around the image",borderTypeSidebar:"Sidebar: white panel on the right side",sidebarWidthLabel:"Sidebar width",fillInMode:"✍️ Fill-in-the-blank mode",fillInDesc:"Users type answers instead of dragging and dropping",fillInTextColor:"Text color:",btnAddBlank:"➕ Add drag & drop answer",btnClearConnectors:"❌ Clear connectors",tooltipClickToEdit:"Click to enter an answer · Drag to move the blank",tooltipUndo:"Undo (Ctrl+Z)",tooltipRedo:"Redo (Ctrl+Y)",nothingToUndo:"Nothing left to undo",tooltipDragConnector:"Drag to create a connector",tooltipResize:"Drag to resize",clickToUpload:"Click to upload an image",uploadHint:"Or drop an image here, or press Ctrl+V to paste a copied image",dropImageHere:"Drop the image here",dropToReplace:"Drop to replace the background image",requireLoginToUpload:"You need to sign in to upload images.",notAnImage:"What you selected is not an image.",pasteImageHint:"Tip: press Ctrl+V to paste a copied image directly (no link needed).",replaceImage:"Replace image",orUseLink:"Or paste an existing image link",pickImageFirst:"Choose a background image above to start placing blanks.",emptyBlankHint:"No answer yet",tooltipEditAnswer:"Edit answer",tooltipDelete:"Delete",editDialogTitle:"📝 Enter Answer For Blank {{id}}",editDialogInputLabel:"Correct answer",btnCancel:"Cancel",btnSave:"Save",btnActionCancel:"Cancel",btnActionSaving:"⏳ Saving...",btnActionUploading:"⏳ Uploading image...",btnActionSave:"✅ Save Question",btnActionSaveDragDrop:"✅ Save this Drag & Drop question",btnActionSaveSorting:"✅ Save this Ordering question",btnActionSaveMatching:"✅ Save this Matching question",btnActionSaveGrouping:"✅ Save this Grouping question"}
525,sortingEditor={title:"🔢 Create Ordering Question",layoutText:"Display direction:",layoutHorizontal:"Horizontal",layoutVertical:"Vertical",guideText:"Add cards and arrange them in the correct order (current direction: {{layout}}). Students will need to rearrange them into this exact order.",btnAddItem:"➕ Add Card",itemLabel:"Card {{index}}",placeholderItem:"Enter text for this card",uploadingImage:"Uploading image...",deleteItem:"Delete card"},groupingEditor={title:"🗂️ Create Sorting-into-Groups Question",guideText:"Name each group, then add the cards that BELONG to it. During play, cards from every group are shuffled into one pool — students drag each card into the right basket.",placeholderGroupName:"Group name (e.g. Animals)",placeholderItem:"Enter card content",btnAddItem:"Add card",btnAddGroup:"➕ Add group"},quizPreviewComponent={noQuestions:"No questions available",questionAlt:"Question {{index}}",teacherView:"Teacher preview mode",btnBackList:"Back to list",btnCheck:"✓ Check",btnRetry:"🔄 Retry",btnPrev:"← Prev",btnNext:"Next →",btnFinish:"🏁 Finish",loadingImage:"Loading image..."},answerSidebar={fontSmaller:"Decrease answer text size",fontBigger:"Increase answer text size",title:"📋 Available Answers",btnFinish:"Finish",btnCheck:"Check",btnRetry:"Retry",btnPrev:"Prev",btnNext:"Next",questionStatus:"Q.{{current}}/{{total}}",lockedStatus:"(Locked - viewing results)",allAnswersUsed:"All answers have been used"},studentPlayer={submitSuccess:"Your quiz has been submitted successfully!",submitError:"Unable to submit quiz. Please try again.",instruction:"Drag/select the labels to the correct positions on the image",lockedWarning:"⚠️ You have already submitted this quiz. You cannot retake it on this device.",completionTitle:"Quiz Completed!",completionMessage:"Congratulations on completing the quiz.",btnExit:"Exit",nameDialogTitle:"📝 Enter Your Name",nameDialogDesc:"Please enter your name to submit this quiz. This name will be recorded along with your results.",nameInputLabel:"Your Name",nameInputPlaceholder:"e.g., John Doe",nameError:"Please enter your name",scoreDisplay:"📊 Your score: {{score}} / {{max}}",btnSubmitting:"⏳ Submitting...",btnSubmit:"✅ Submit"},clickableMenu={inBlank:"In blank {{ids}}",noAnswers:"No answers available"},teacherSidebar={errorLoad:"Failed to load submissions",successDelete:"Deleted all submissions successfully",errorDelete:"Failed to delete submissions",successUnshare:"Stopped sharing - students cannot access the link anymore",errorUnshare:"Failed to stop sharing",successReshare:"Re-shared - students can access the link again",errorReshare:"Failed to re-share",title:"📊 Submissions",colIndex:"No.",colName:"Name",colScore:"Score",noSubmissions:"No submissions yet",totalLabel:"Total",unit:"sub(s)",avgLabel:"Avg",btnRefresh:"Refresh",btnUnshare:"Stop Sharing",btnReshare:"Re-share",btnDeleteAll:"Delete All",confirmDeleteTitle:"⚠️ Confirm Deletion",confirmActionTitle:"ℹ️ Confirm",confirmUnshare:"🔒 Stopping sharing will invalidate the link. Students will no longer be able to submit. Are you sure?",confirmReshare:"🔓 Re-sharing will recreate the link. Students can submit again. Continue?",confirmDelete:"🗑️ You are about to delete all submissions ({{count}}). This action cannot be undone. Continue?"},enQuizGame={page:page$g,sidebar:sidebar$5,myQuizzes:myQuizzes$4,createQuiz,deleteDialog:deleteDialog$1,preview:preview$1,customInstruction,share:share$3,blankSpaceCanvas,sortingEditor,groupingEditor,quizPreviewComponent,answerSidebar,studentPlayer,clickableMenu,teacherSidebar},myGames$d={successAddStudents:"Đã thêm {{count}} học sinh",errorNotEnoughQuestions:"Không đủ câu hỏi để chọn {{count}} câu khác. Còn lại: {{available}} câu.",errorAddingStudent:"⚠️ Vui lòng thêm học sinh trước!",errorAddingQuestion:"⚠️ Vui lòng thêm câu hỏi trước!",successLoadedGame:'Đã tải Lớp/Nhóm "{{name}}"',errorLoadingGame:"Lỗi khi tải: {{message}}",confirmDeleteGame:'Xóa Lớp/Nhóm "{{name}}"? Hành động này không thể hoàn tác.',successDeletedGame:"Đã xóa Lớp/Nhóm thành công",errorDeletingGame:"Lỗi khi xóa: {{message}}",errorNoScoreBoard:"Chưa có điểm số để xuất",successScoreBoardExported:"Bảng xếp hạng đã được xuất",confirmClearScoreBoard:"Bạn có chắc muốn xóa bảng xếp hạng?",successScoreBoardCleared:"Bảng xếp hạng đã được xóa",confirmClearAll:"Xóa tất cả dữ liệu? Hành động này không thể hoàn tác!",successClearedAll:"Dữ liệu đã được xóa (giữ lại HS đầu tiên)",tooltipFullScreenExit:"Thoát toàn màn hình",btnFullScreenExit:"↙ Thu nhỏ",tooltipSpinning:"Đang quay vòng...",tooltipSpinStart:"Bắt đầu quay vòng chọn học sinh",btnSpinning:"🎡 ĐANG QUAY...",btnSpin:"🎡 QUAY",btnSpinStart:"▶️ BẮT ĐẦU QUAY",btnSpinNext:"▶️ QUAY TIẾP",tooltipTutorial:"Xem hướng dẫn",tooltipBackDashboard:"Quay lại Dashboard",exitConfirmTitle:"Thoát khỏi trò chơi?",exitConfirmDesc:"Bảng xếp hạng sẽ không lưu lại sau khi bạn thoát, hãy đảm bảo bạn đã sử dụng xong. Bạn vẫn muốn thoát?",exitConfirmBtn:"Thoát",tooltipDeleteStudent:"Xóa {{name}}",tooltipImportStudents:"Nhập danh sách học sinh",btnImport:"+ Nhập",tooltipLeaderboard:"Xem bảng xếp hạng",btnLeaderboard:"Xếp hạng 📊",tooltipClearAll:"Xóa tất cả dữ liệu",btnClearAll:"Xóa học sinh 🗑️",tooltipToggleSound:"Bật/tắt âm thanh",btnToggleSound:"Bật/tắt âm thanh 🔊",tooltipFullScreen:"Trình chiếu toàn màn hình",btnFullScreen:"Toàn màn hình ⛶",labelNoRepeatName:"Gọi tên không lặp lại",labelAnswerMode:"Cách trả lời",answerModeAll:"Toàn bộ",answerModeRandom:"Ngẫu nhiên",tooltipManageQuestions:"Quản lý câu hỏi",btnQuestions:"❓ Câu hỏi ({{count}})",tooltipSpinPick:"Quay vòng để chọn học sinh",btnSpinText:"🎲",btnSpinSubText:"Quay",btnUpgradePro:"⭐ Nâng Cấp Lẻ",titleCloud:"☁️ Lớp/Nhóm",tooltipSaveCloud:"Lưu dữ liệu lên đám mây",btnSaveCloud:"💾 Lưu dữ liệu",loading:"⏳ Đang tải...",tooltipLoadGame:"Tải {{name}}",tooltipDeleteGame:"Xóa {{name}}",btnBack:"← Quay lại",tooltipBackSetup:"Quay lại màn hình setup",btnBackSetup:"← Quay lại vòng/đua",tooltipConfirmAnswer:"Xác nhận đáp án đã chọn",btnConfirm:"Xác nhận",btnConfirming:"Đang cập nhật...",tooltipNextQuestion:"Chuyển sang câu hỏi tiếp theo",btnNextQuestion:"➡️ Câu tiếp theo",btnEndQuiz:"✓ Kết thúc lượt của {{name}}
525",titleLeaderboard:"🏆 BXH",titleLeaderboardModal:"Bảng Xếp Hạng",btnCancel:"Hủy",labelSelectionMode:"Chế độ chọn",selectionWheel:"Vòng quay",selectionDuckRace:"Đua vịt (Demo)",labelLiveCheck:"Chế độ chơi trực tiếp",btnEndLiveCheck:"Kết thúc",students:"học sinh",questions:"câu hỏi",tooltipClearLeaderboard:"Xóa bảng xếp hạng"},duckRace$1={btnStart:"🦆 BẮT ĐẦU ĐUA!",btnRacing:"🏁 ĐANG ĐUA..."},manageGamesModal$1={title:"Quản lý Lớp/Nhóm",loading:"Đang tải dữ liệu...",msgLoading:"Đang tải...",empty:"Chưa có Lớp/Nhóm nào được lưu",createdAt:"Ngày tạo",updatedAt:"Cập nhật",btnLoad:"Tải Lớp/Nhóm này",btnLoadText:"Tải",btnDelete:"Xóa Lớp/Nhóm này",btnClose:"Đóng",btnCancel:"Hủy",lockedTip:"Gia hạn để mở vòng quay này",expiredPackage:"Gói hết hạn!",renewText:"Gia hạn 30k/năm"},studentImportModal$1={alertEmpty:"Vui lòng nhập danh sách học sinh",alertInvalid:"Danh sách không hợp lệ",btnAdd:"Thêm danh sách",btnCancel:"Hủy",hint:"Nhập mỗi sinh viên trên một dòng.",label:"Danh sách học sinh (mỗi người 1 dòng - có thể copy từ Excel)",placeholder:`Nguyễn Văn A
526Trần Thị B
527Lê Văn C`,title:"Nhập danh sách học sinh"},cloudSaveModal$1={title:"💾 Lưu Lớp/Nhóm Lên Đám Mây",btnSaveNew:"Lưu Lớp/Nhóm Mới",btnUpdatePrefix:"Cập nhật",classesGroups:"Lớp/Nhóm",errorEmptyName:"Vui lòng nhập tên",labelName:"Tên Lớp/Nhóm:",outOfSlots:"Hết chỗ trống",placeholderName:"Ví dụ: Lớp 10A1",proAccount:"Chế độ Pro (Không giới hạn)",quotaFullDesc:"Bạn không thể tạo thêm Lớp/Nhóm mới ở chế độ Miễn phí.",quotaFullWarning:"Đã đạt giới hạn lưu trữ ({{limit}} game).",saving:"Đang lưu...",slotsRemaining:"Còn {{count}} lượt",labelSelectExisting:"Ghi đè Lớp/Nhóm đã có ({{count}}):"},celebrationModal$1={btnBack:"Quay lại",btnResetQ:"🔄 Nạp lại câu hỏi",btnStartQuiz:"Bắt đầu trả lời",h3Congrats:"Chúc mừng",h3NoMoreQ:"⚠️ Đã hết câu hỏi!",pNo
527MoreQ:"Tất cả câu hỏi trong ngân hàng đều đã được gọi. Hãy nạp lại câu hỏi nếu muốn tiếp tục với học sinh này.",pSelected:"đã được chọn để trả lời câu hỏi"},quizBoard$1={noQuestions:"Không có câu hỏi nào",questionNumber:"Câu {{current}}/{{total}}",correct:"Đúng rồi!",incorrect:"Chưa chính xác. Đáp án đúng là:",submitAnswer:"Xác nhận",trueShort:"Đ",falseShort:"S",placeholderShortAnswer:"Nhập đáp án...",audioReplay:"Nghe lại",audioStop:"Dừng"},leaderboard$2={emptyTitle:"Chưa có điểm số",emptyDesc:"Bắt đầu chơi để cập nhật bảng xếp hạng",colRank:"Hạng",colStudent:"Học sinh",colScore:"Điểm",colTime:"Thời gian",statTotal:"Tổng cộng",statHighest:"Điểm cao nhất",statAverage:"Điểm trung bình"},randomModeModal$1={title:"Cấu Hình Chế Độ Ngẫu Nhiên",description:"Mỗi học sinh sẽ trả lời bao nhiêu câu ngẫu nhiên?",label:"Số câu hỏi:",hintTotal:"Tổng câu hỏi: {{total}}",infoSelect:"Mỗi lần học sinh được quay:",infoRandomCount:"Sẽ được chọn {{count}} câu ngẫu nhiên",infoNextSpin:"Lần quay tiếp theo sẽ là {{count}} câu khác",infoNoRepeat:"Đảm bảo không có câu hỏi lặp lại trong cùng phiên học sinh",alertInvalidCount:"Vui lòng nhập số từ 1 đến {{total}}"},tutorialModal$1={title:"📹 Hướng dẫn sử dụng",tip:"Tip: Nhấn vào video để xem toàn màn hình hoặc điều khiển âm lượng"},questionModal$1={title:"Thêm Câu Hỏi",tooltipAI:"Mở trợ lý AI để tạo câu hỏi",btnAI:"Tạo bằng AI",questionList:"Danh sách câu hỏi ({{count}})",labelQuestion:"Câu hỏi * (Hỗ trợ công thức toán học)",placeholderQuestion:"Nhập câu hỏi hoặc công thức toán học",labelOptions:"Lựa chọn *",placeholderOption:"Lựa chọn {{number}}",btnAddOption:"Thêm lựa chọn",btnAddQuestion:"Thêm Câu",btnSaveClose:"Lưu & Đóng",alertQuestion:"Vui lòng nhập câu hỏi",alertOptions:"Cần ít nhất 2 lựa chọn",alertCorrectAnswer:"Vui lòng chọn đáp án đúng",labelCorrectAnswer:"Đáp án đúng *",placeholderCorrect:"Chọn đáp án đúng"},questionForm$1={btnUpdate:"Cập nhật",errorCorrectInOptions:"Đáp án đúng phải là một trong các đáp án"},mixedInput$1={placeholder:"Nhập câu hỏi hoặc công thức toán học",hint:"Hỗ trợ soạn thảo văn bản nội dòng (\\\\frac, ^, _, \\\\sqrt, v.v.) + bàn phím ảo MathLive"},mathInput$1={placeholder:"Nhập công thức toán học"},mathComponent$1={tooltip:"Công thức toán (Click để chọn/xóa)"},formulaInput$1={title:"Nhập công thức toán học",label:"Công thức (Chọn bàn phím ảo để chèn):",placeholder:"Ví dụ: \\\\frac{1}{2} hoặc x^2 - 4",btnInsert:"Chèn",alertEmpty:"Vui lòng nhập công thức"},quizResult$1={msgPerfect:"Tuyệt vời! Bạn trả lời hoàn hảo!",msgGood:"Rất tốt! Bạn đã nắm vững kiến thức!",msgOkay:"Tốt! Cộng thêm một chút nữa thôi!",msgReview:"Bạn cần ôn tập thêm nhé!",msgTryHarder:"Hãy cố gắng hơn lần sau!",labelScore:"Điểm số",labelCorrect:"Câu đúng",labelAccuracy:"Tỷ lệ đúng",labelTime:"Thời gian",btnPlayAgain:"Trả lời lại",btnNextStudent:"Học sinh tiếp theo"},page$f={sidebarTitle:"🎡 Vòng Quay - Đua Vịt",navClasses:"Lớp học",navQuestionSets:"Bộ câu hỏi",btnUpgradePro:"Nâng Cấp Pro",quotaTrial:"Đã sử dụng {{current}}/{{limit}} bộ câu hỏi",quotaTrialPlays:"Đã dùng {{current}}/{{limit}} lượt chơi"},classes$3={title:"🏫 Lớp học của tôi",description:"Danh sách lớp <strong>dùng chung</strong> cho mọi tính năng cần lớp học — sửa một nơi, các nơi khác thấy ngay. Bấm <strong>Chơi</strong> để chọn bộ câu hỏi và bắt đầu.",btnCreate:"+ Tạo lớp mới",btnAdvanced:"⚙️ Quản lý nâng cao",btnCreateFirst:"+ Tạo lớp đầu tiên",emptyTitle:"Chưa có lớp nào",emptyDesc:"Tạo lớp học và thêm học sinh để bắt đầu chơi Vòng Quay.",demoTitle:"
527🦆 Lớp Demo - Đua Vịt",demoHint:"Chơi thử đua vịt với 20 học sinh mẫu trước khi tạo lớp của bạn",pinBanner:"Ghim lớp yêu thích để vẫn sử dụng được khi hết hạn gói",pinCount:"({{current}}/{{limit}} đã ghim)",expiredWarning:"⚠️ Gói đã hết hạn!",btnRenew:"Gia hạn",labelStudentCount:"{{count}} học sinh",btnPlay:"▶ Chơi",tooltipEdit:"Sửa lớp",tooltipDelete:"Xóa lớp",dialogCreateTitle:"Tạo lớp mới",dialogEditTitle:"Sửa lớp: {{name}}",labelClassName:"Tên lớp",labelStudentList:"Danh sách học sinh (mỗi tên 1 dòng - có thể copy từ Excel)",placeholderStudentList:`Nguyễn Văn A
528Trần Thị B
529Lê Văn C`,studentCount:"{{count}} học sinh",btnCancel:"Hủy",btnSave:"Lưu",btnSaving:"Đang lưu...",dialogDeleteTitle:"Xóa lớp học",dialogDeleteDesc:"Lớp sẽ bị xóa vĩnh viễn. Hành động này không thể hoàn tác.",btnConfirmDelete:"Xóa",errorLoad:"Không tải được danh sách lớp",errorName:"Vui lòng nhập tên lớp",errorMinStudent:"Lớp phải có ít nhất 1 học sinh",successCreate:"Đã tạo lớp mới",successUpdate:"Đã cập nhật lớp",successDelete:"Đã xóa lớp",successPin:"Đã ghim lớp",successUnpin:"Đã bỏ ghim",warningPinLimit:"Đã đạt giới hạn {{limit}} lớp ghim",errorDelete:"Xóa thất bại",errorSave:"Lưu thất bại",hintMaxStudents:"Mỗi tên 1 dòng. Tối đa {{max}} học sinh mỗi lớp.",errorOverLimit:"Danh sách có {{count}} học sinh, vượt quá tối đa {{max}}. Vui lòng bớt bớt."},sets$1={title:"📋 Bộ câu hỏi",description:"Quản lý các bộ câu hỏi để dùng khi bắt đầu chơi.",btnCreate:"+ Tạo bộ mới",btnCreateFirst:"+ Tạo bộ câu hỏi đầu tiên",emptyTitle:"Chưa có bộ câu hỏi nào",emptyDesc:"Tạo bộ câu hỏi để dùng khi chơi Vòng Quay.",labelQuestionCount:"{{count}} câu hỏi",tooltipEdit:"Sửa bộ câu hỏi",tooltipDelete:"Xóa",btnPrev:"Trang trước",btnNext:"Trang sau",labelPage:"Trang {{page}}",dialogDeleteTitle:"Xóa bộ câu hỏi",dialogDeleteDesc:"Bộ câu hỏi sẽ bị xóa vĩnh viễn. Hành động này không thể hoàn tác.",btnConfirmDelete:"Xóa",errorLoad:"Không tải được danh sách bộ câu hỏi",successDelete:"Đã xóa bộ câu hỏi",errorDelete:"Xóa thất bại"},form$m={titleCreate:"Tạo bộ câu hỏi mới",titleEdit:"Chỉnh sửa bộ câu hỏi",labelTitle:"Tên bộ câu hỏi",labelQuestions:"Câu hỏi ({{count}})",btnClearAll:"Xóa tất cả",confirmClearAll:"Xóa tất cả câu hỏi?",btnPicker:"Chọn từ Kho hoặc AI",btnManual:"Nhập thủ công",listHeader:"Danh sách câu hỏi",labelAnswers:"— {{count}} đáp án",emptyQuestions:"Chưa có câu hỏi nào",emptyQuestionsDesc:"Chọn từ ngân hàng câu hỏi hoặc nhập thủ công.",btnCancel:"Hủy",btnSave:"Lưu",btnSaving:"Đang lưu...",errorNoTitle:"Vui lòng nhập tên bộ câu hỏi",errorNoQuestions:"Bộ câu hỏi phải có ít nhất 1 câu hỏi",errorLoad:"Không tải được bộ câu hỏi",successAdd:"Đã thêm {{count}} câu hỏi",successUpdate:"Đã cập nhật câu hỏi",successDelete:"Đã xóa câu hỏi {{index}}",successClear:"Đã xóa tất cả câu hỏi",errorSave:"Lưu thất bại, vui lòng thử lại",warningTooLarge:"Bài quá lớn, không thể đưa lên Thư viện cộng đồng. Bài đã được lưu thành công.",pickerTitle:"Chọn câu hỏi",btnLesson:"Từ bài có sẵn",lessonPickerTitle:"Chọn bài để lấy câu hỏi",lessonPickerNoMatch:"Không có câu nào phù hợp ({{count}} câu bị bỏ qua).",lessonPickerPartial:'Đã thêm {{added}} câu từ "{{title}}". Bỏ qua {{skipped}} câu không tương thích.',lessonPickerSuccess:'Đã thêm {{added}} câu từ "{{title}}".'},playModal$1={title:"🎡 Bắt đầu chơi",labelClass:"Lớp: <strong>{{name}}</strong> — {{count}} học sinh",labelSelectSet:"Chọn bộ câu hỏi:",labelNone:"🎯 Không cần câu hỏi",descNone:"Chỉ quay / đua để chọn tên",noSets:"Chưa có bộ câu hỏi nào.",btnCreateNow:"Tạo ngay",labelQuestionMode:"Số câu học sinh sẽ trả lời sau khi quay trúng:",modeAll:"
529📋 Toàn bộ ({{count}} câu)",modeRandom:"🎲 Ngẫu nhiên",labelRandomCount:"Số câu mỗi lượt:",countSuffix:"/ {{count}} câu",labelGameSettings:"Cài đặt trò chơi:",labelSelectionMode:"Chế độ chọn học sinh:",modeWheel:"🎡 Vòng quay",modeDuckRace:"🦆 Đua vịt",labelDuration:"⏱ Thời gian {{mode}}:",durationModeSpin:"quay",durationModeRace:"đua",durationSuffix:"giây",labelAnswerMode:"Chế độ trả lời:",answerSequential:"📋 Tuần tự",answerRandom:"🎲 Ngẫu nhiên",labelNoRepeat:"Gọi tên không lặp lại",labelUsePhotos:"Dùng ảnh học sinh",hintNoPhotos:"Lớp này chưa có ảnh học sinh nào.",btnManagePhotos:"Tải ảnh lên",hintPartialPhotos:"{{count}}/{{total}} em có ảnh. Em chưa có ảnh vẫn chơi bình thường với tên.",warnDownloadNoPhotos:"Bản tải xuống KHÔNG kèm ảnh học sinh (ảnh nằm trên máy chủ). File offline sẽ hiển thị tên như bình thường.",playsLeft:'Bản dùng thử: còn <strong>{{count}}</strong> lượt chơi. Bấm "Bắt đầu" sẽ trừ 1 lượt.',playsNone:"Bạn đã dùng hết lượt chơi thử. Nâng cấp để chơi không giới hạn.",btnCancel:"Hủy",btnStart:"▶ Bắt đầu",btnStartLive:"📺 Bắt đầu trực tiếp",btnDownload:"⬇ Tải xuống",btnDownloading:"Đang tải...",tooltipDownload:"Tải file chơi offline (mở được cả khi không có Internet)",tooltipDownloadLocked:"Cần gói còn hiệu lực để tải file chơi offline",unitQuestion:"{{count}} câu",labelLiveCheck:"Chế độ chơi trực tiếp",descLiveCheck:"Chia đôi màn hình: vòng quay + câu hỏi. Giáo viên chủ động bấm Câu tiếp theo."},library$2={fillAllFields:"Vui lòng chọn đầy đủ Cấp học, Môn học và Lớp trước khi đưa lên thư viện."},cloudSave$1={msgProQuota:"Chế độ Pro — lưu không giới hạn",msgFreeQuota:"Đã lưu {{current}}/{{limit}} game"},viWheelQuiz={myGames:myGames$d,duckRace:duckRace$1,manageGamesModal:manageGamesModal$1,studentImportModal:studentImportModal$1,cloudSaveModal:cloudSaveModal$1,celebrationModal:celebrationModal$1,quizBoard:quizBoard$1,leaderboard:leaderboard$2,randomModeModal:randomModeModal$1,tutorialModal:tutorialModal$1,questionModal:questionModal$1,questionForm:questionForm$1,mixedInput:mixedInput$1,mathInput:mathInput$1,mathComponent:mathComponent$1,formulaInput:formulaInput$1,quizResult:quizResult$1,page:page$f,classes:classes$3,sets:sets$1,form:form$m,playModal:playModal$1,library:library$2,cloudSave:cloudSave$1},myGames$c={successAddStudents:"Successfully added {{count}} students",errorNotEnoughQuestions:"Not enough questions to choose {{count}} different ones. Remaining: {{available}} questions.",errorAddingStudent:"⚠️ Please add students first!",errorAddingQuestion:"⚠️ Please add questions first!",successLoadedGame:'Loaded Class/Group "{{name}}"',errorLoadingGame:"Error loading: {{message}}",confirmDeleteGame:'Delete Class/Group "{{name}}"? This action cannot be undone.',successDeletedGame:"Successfully deleted Class/Group",errorDeletingGame:"Error deleting: {{message}}",errorNoScoreBoard:"No scores to export yet",successScoreBoardExported:"Leaderboard has been exported",confirmClearScoreBoard:"Are you sure you want to clear the leaderboard?",successScoreBoardCleared:"Leaderboard has been cleared",confirmClearAll:"Clear all data? This action cannot be undone!",successClearedAll:"Data has been cleared (keeping the first student)",tooltipFullScreenExit:"Exit full screen",btnFullScreenExit:"↙ Minimize",tooltipSpinning:"Spinning...",tooltipSpinStart:"Start spinning to choose a student",btnSpinning:"🎡 SPINNING...",btnSpin:"🎡 SPIN",btnSpinStart:"▶️ START SPINNING",btnSpinNext:"▶️ SPIN AGAIN",tooltipTutorial:"View tutorial",tooltipBackDashboard:"Back to Dashboard",exitConfirmTitle:"Exit the game?",exitConfirmDesc:"The leaderboard will not be saved after you exit. Make sure you are done using it. Exit anyway?",exitConfirmBtn:"Exit",tooltipDeleteStudent:"Delete {{name}}",tooltipImportStudents:"Import list of students",btnImport:"+ Import",tooltipLeaderboard:"View leaderboard",btnLeaderboard:"Leaderboard 📊",tooltipClearAll:"Clear all data",btnClearAll:"Clear students 🗑️",tooltipToggleSound:"Toggle sound",btnToggleSound:"Toggle sound 🔊",tooltipFullScreen:"Full screen presentation",btnFullScreen:"Full screen ⛶",labelNoRepeatName:"No repeating names",labelAnswerMode:"Answer mode",answerModeAll:"Sequential",answerModeRandom:"Random",tooltipManageQuestions:"Manage questions",btnQuestions:"❓ Questions ({{count}})",tooltipSpinPick:"Spin to choose a student",btnSpinText:"🎲",btnSpinSubText:"Spin",btnUpgradePro:"⭐ Get FullGame",titleCloud:"☁️ Class/Group",tooltipSaveCloud:"Save data to cloud",btnSaveCloud:"💾 Save data",loading:"⏳ Loading...",tooltipLoadGame:"Load {{name}}",tooltipDeleteGame:"Delete {{name}}",btnBack:"← Back",tooltipBackSetup:"Back to setup screen",btnBackSetup:"← Back to Setup",tooltipConfirmAnswer:"Confirm selected answer",btnConfirm:"Confirm",btnConfirming:"Updating...",tooltipNextQuestion:"Move to the next question",btnNextQuestion:"➡️ Next question",btnEndQuiz:"✓ End {{name}}'s turn",titleLeaderboard:"🏆 Leaderboard",titleLeaderboardModal:"Leaderboard",btnCancel:"Cancel",labelSelectionMode:"Selection mode",selectionWheel:"Wheel",selectionDuckRace:"Duck Race",labelLiveCheck:"Live Play Mode",btnEndLiveCheck:"End",students:"students",questions:"questions",tooltipClearLeaderboard:"Clear leaderboard"}
529,duckRace={btnStart:"🦆 START RACE!",btnRacing:"🏁 RACING..."},manageGamesModal={title:"Manage Class/Group",loading:"Loading data...",msgLoading:"Loading...",empty:"No Class/Group saved yet",createdAt:"Created at",updatedAt:"Updated at",btnLoad:"Load this Class/Group",btnLoadText:"Load",btnDelete:"Delete this Class/Group",btnClose:"Close",btnCancel:"Cancel",lockedTip:"Upgrade to unlock this wheel",expiredPackage:"Package expired!",renewText:"Renew 30k/year"},studentImportModal={alertEmpty:"Please enter a student list",alertInvalid:"List is invalid",btnAdd:"Import data",btnCancel:"Cancel",hint:"Enter each student name on a new line.",label:"Student list (one per line)",placeholder:`John Doe
530Jane Smith
531Bob Johnson`,title:"Import Student List"},cloudSaveModal={title:"💾 Save to Cloud",btnSaveNew:"Save New Class/Group",btnUpdatePrefix:"Update",classesGroups:"Classes/Groups",errorEmptyName:"Please enter a name",labelName:"Class/Group Name:",outOfSlots:"Storage limit reached",placeholderName:"Example: Class 10A1",proAccount:"FullGame mode (Unlimited)",quotaFullDesc:"You cannot create more groups in Free mode.",quotaFullWarning:"You've reached your storage limit ({{limit}} games).",saving:"Saving...",slotsRemaining:"{{count}} slots remaining",labelSelectExisting:"Overwrite existing Class/Group ({{count}}):"},celebrationModal={btnBack:"Back",btnResetQ:"🔄 Reset asked questions",btnStartQuiz:"Start answering",h3Congrats:"Congratulations",h3NoMoreQ:"⚠️ No more questions!",pNoMoreQ:"All questions have been answered. Please reset the questions to continue with this student.",pSelected:"has been selected to answer"},quizBoard={noQuestions:"No questions yet",questionNumber:"Question {{current}}/{{total}}",correct:"Correct!",incorrect:"Incorrect! The correct answer is:",submitAnswer:"Confirm",trueShort:"T",falseShort:"F",placeholderShortAnswer:"Enter answer...",audioReplay:"Play again",audioStop:"Stop"},leaderboard$1={emptyTitle:"No scores yet",emptyDesc:"Start playing to update the leaderboard",colRank:"Rank",colStudent:"Student",colScore:"Score",colTime:"Time",statTotal:"Total",statHighest:"Highest Score",statAverage:"Average Score"},randomModeModal={title:"Configure Random Mode",description:"How many random questions will each student answer?",label:"Number of questions:",hintTotal:"Total questions: {{total}}",infoSelect:"Each time a student is chosen:",infoRandomCount:"{{count}} random questions will be selected",infoNextSpin:"The next spin will yield {{count}} different questions",infoNoRepeat:"Ensures no repeated questions in the same session",alertInvalidCount:"Please enter a number between 1 and {{total}}"},tutorialModal={title:"📹 Tutorial",tip:"Tip: Click the video to view in full screen or control volume"},questionModal={title:"Add Question",tooltipAI:"Open AI Assistant to generate questions",btnAI:"Generate with AI",questionList:"Question List ({{count}})",labelQuestion:"Question * (Supports math formulas)",placeholderQuestion:"Enter question or math formula",labelOptions:"Options *",placeholderOption:"Option {{number}}",btnAddOption:"Add Option",btnAddQuestion:"Add Question",btnSaveClose:"Save & Close",alertQuestion:"Please enter a question",alertOptions:"Need at least 2 options",alertCorrectAnswer:"Please select the correct answer",labelCorrectAnswer:"Correct answer *",placeholderCorrect:"Select correct answer"},questionForm={btnUpdate:"Update",errorCorrectInOptions:"Correct answer must be one of the options"},mixedInput={placeholder:"Enter question or math formula",hint:"Supports inline text editing (\\\\frac, ^, _, \\\\sqrt, etc.) + MathLive virtual keyboard"},mathInput={placeholder:"Enter math formula"},mathComponent={tooltip:"Math formula (Click to select/delete)"},formulaInput={title:"Enter math formula",label:"Formula (Select virtual keyboard to insert):",placeholder:"Example: \\\\frac{1}{2} or x^2 - 4",btnInsert:"Insert",alertEmpty:"Please enter a formula"},quizResult={msgPerfect:"Excellent! You answered perfectly!",msgGood:"Very good! You've mastered the knowledge!",msgOkay:"Good! Just a little bit more!",msgReview:"You need to review more!",msgTryHarder:"Try harder next time!",labelScore:"Score",labelCorrect:"Correct answers",labelAccuracy:"Accuracy",labelTime:"Time",btnPlayAgain:"Play Again",btnNextStudent:"Next student"},page$e={sidebarTitle:"🎡 Wheel - Duck Race",navClasses:"Classes",navQuestionSets:"Question Sets",btnUpgradePro:"Get FullGame",quotaTrial:"Used {{current}}/{{limit}} question sets",quotaTrialPlays:"Used {{current}}/{{limit}} play sessions"}
531,classes$2={title:"🏫 My Classes",description:"This class list is <strong>shared</strong> across every feature that uses classes — edit it once, it updates everywhere. Click <strong>Play</strong> to choose a question set and start.",btnCreate:"+ Create New Class",btnAdvanced:"⚙️ Advanced manager",btnCreateFirst:"+ Create First Class",emptyTitle:"No classes yet",emptyDesc:"Create a class and add students to start playing Wheel Quiz.",demoTitle:"🦆 Demo Class - Duck Race",demoHint:"Try the duck race with 20 sample students before creating your own class",pinBanner:"Pin favorite classes to keep using them when the package expires",pinCount:"({{current}}/{{limit}} pinned)",expiredWarning:"⚠️ Package expired!",btnRenew:"Renew",labelStudentCount:"{{count}} students",btnPlay:"▶ Play",tooltipEdit:"Edit class",tooltipDelete:"Delete class",dialogCreateTitle:"Create New Class",dialogEditTitle:"Edit Class: {{name}}",labelClassName:"Class Name",labelStudentList:"Student List (one name per line)",placeholderStudentList:`John Doe
532Jane Smith
533Bob Johnson`,studentCount:"{{count}} students",btnCancel:"Cancel",btnSave:"Save",btnSaving:"Saving...",dialogDeleteTitle:"Delete Class",dialogDeleteDesc:"The class will be permanently deleted. This action cannot be undone.",btnConfirmDelete:"Delete",errorLoad:"Error loading class list",errorName:"Please enter a class name",errorMinStudent:"Class must have at least 1 student",successCreate:"Successfully created new class",successUpdate:"Successfully updated class",successDelete:"Successfully deleted class",successPin:"Pinned class",successUnpin:"Unpinned class",warningPinLimit:"Reached limit of {{limit}} pinned classes",errorDelete:"Delete failed",errorSave:"Save failed",hintMaxStudents:"One name per line. Up to {{max}} students per class.",errorOverLimit:"The list has {{count}} students, over the {{max}} limit. Please remove some."},sets={title:"📋 Question Sets",description:"Manage question sets to use when starting a game.",btnCreate:"+ Create New Set",btnCreateFirst:"+ Create First Set",emptyTitle:"No question sets yet",emptyDesc:"Create a question set to use when playing Wheel Quiz.",labelQuestionCount:"{{count}} questions",tooltipEdit:"Edit question set",tooltipDelete:"Delete",btnPrev:"Previous",btnNext:"Next",labelPage:"Page {{page}}",dialogDeleteTitle:"Delete Question Set",dialogDeleteDesc:"This question set will be permanently deleted. This action cannot be undone.",btnConfirmDelete:"Delete",errorLoad:"Error loading question set list",successDelete:"Successfully deleted question set",errorDelete:"Delete failed"},form$l={titleCreate:"Create New Question Set",titleEdit:"Edit Question Set",labelTitle:"Question Set Name",labelQuestions:"Questions ({{count}})",btnClearAll:"Clear All",confirmClearAll:"Clear all questions?",btnPicker:"Select from Bank or AI",btnManual:"Manual Input",listHeader:"Question List",labelAnswers:"— {{count}} answers",emptyQuestions:"No questions yet",emptyQuestionsDesc:"Select from the question bank or enter manually.",btnCancel:"Cancel",btnSave:"Save",btnSaving:"Saving...",errorNoTitle:"Please enter a question set name",errorNoQuestions:"Question set must have at least 1 question",errorLoad:"Error loading question set",successAdd:"Successfully added {{count}} questions",successUpdate:"Successfully updated question",successDelete:"Successfully deleted question {{index}}",successClear:"Successfully deleted all questions",errorSave:"Save failed, please try again",warningTooLarge:"Quiz is too large, cannot upload to Community Library. Quiz saved successfully.",pickerTitle:"Select Questions",btnLesson:"From existing lesson",lessonPickerTitle:"Select a lesson to get questions from",lessonPickerNoMatch:"No matching questions ({{count}} questions skipped).",lessonPickerPartial:'Added {{added}} questions from "{{title}}". Skipped {{skipped}} incompatible questions.',lessonPickerSuccess:'Added {{added}} questions from "{{title}}".'},playModal={title:"🎡 Start Playing",labelClass:"Class: <strong>{{name}}</strong> — {{count}} students",labelSelectSet:"Select question set:",labelNone:"🎯 No questions needed",descNone:"Just spin / race to choose a name",noSets:"No question sets yet.",btnCreateNow:"Create now",labelQuestionMode:"Question mode:",modeAll:"
533📋 All ({{count}} questions)",modeRandom:"🎲 Random",labelRandomCount:"Questions per turn:",countSuffix:"/ {{count}} questions",labelGameSettings:"Game settings:",labelSelectionMode:"Student selection mode:",modeWheel:"🎡 Wheel",modeDuckRace:"🦆 Duck Race",labelDuration:"⏱ {{mode}} time:",durationModeSpin:"spin",durationModeRace:"race",durationSuffix:"sec",labelAnswerMode:"Answer mode:",answerSequential:"📋 Sequential",answerRandom:"🎲 Random",labelNoRepeat:"No repeating names",labelUsePhotos:"Use student photos",hintNoPhotos:"This class has no student photos yet.",btnManagePhotos:"Upload photos",hintPartialPhotos:"{{count}}/{{total}} students have photos. Students without a photo still play using their name.",warnDownloadNoPhotos:"The downloaded file does NOT include student photos (photos live on the server). The offline file shows names as usual.",playsLeft:'Trial: <strong>{{count}}</strong> play sessions left. Pressing "Start" uses one.',playsNone:"You have used all trial play sessions. Upgrade for unlimited play.",btnCancel:"Cancel",btnStart:"▶ Start",btnStartLive:"📺 Start Live",btnDownload:"⬇ Download",btnDownloading:"Downloading...",tooltipDownload:"Download an offline copy (works without Internet)",tooltipDownloadLocked:"An active plan is required to download the offline file",unitQuestion:"{{count}} questions",labelLiveCheck:"Live Play Mode",descLiveCheck:"Split screen: wheel/race + questions. Teacher controls Next manually."},library$1={fillAllFields:"Please select School Level, Subject, and Grade before publishing to the library."},cloudSave={msgProQuota:"FullGame mode — unlimited saves",msgFreeQuota:"Saved {{current}}/{{limit}} games"},enWheelQuiz={myGames:myGames$c,duckRace,manageGamesModal,studentImportModal,cloudSaveModal,celebrationModal,quizBoard,leaderboard:leaderboard$1,randomModeModal,tutorialModal,questionModal,questionForm,mixedInput,mathInput,mathComponent,formulaInput,quizResult,page:page$e,classes:classes$2,sets,form:form$l,playModal,library:library$1,cloudSave},title$7="📋 My Activities",subtitle$1="{{count}} items created",searchHint$1="Search by name...",tabs$4={all:"All"},error$5="Failed to load data. Please try again.",empty$4={noResults:"No results found",noContent:"No content yet",tryAnother:"Try another keyword",startCreating:"Start creating content from the Dashboard tools",backToDashboard:"Back to Dashboard"},actions$5={view:"View",edit:"Edit",assign:"Assign",assignTitle:"Assign homework",teacherShare:"Share with Teachers"},features$2={"interactive-video":"Interactive Video","panorama-museum":"Panorama Museum","quiz-game":"Drag & Drop - Matching","hand-slash-quiz":"Fruit Slash Quiz","flip-puzzle-game":"Flip Puzzle Game","crossword-puzzle":"Crossword Puzzle","tug-of-war-game":"Knowledge Tug of War","paced-quiz":"Paced Quiz","interactive-image":"Interactive Image","head-tilt-quiz":"Head Tilt Quiz","pose-quiz":"Pose Quiz (Exercise ABC)","versus-game":"Versus Game","wheel-quiz":"Lucky Wheel - Duck Race","turn-based-game":"Turn-based Game",flashcard:"Flashcards","mind-map":"Mind Map",minesweeper:"Minesweeper","flying-words-game":"Flying Words"},itemDefaults$1={"interactive-video":"Untitled Lesson","panorama-museum":"Untitled Room","quiz-game":"Untitled Quiz","hand-slash-quiz":"Untitled Lesson","flip-puzzle-game":"Untitled Game","crossword-puzzle":"Untitled Crossword","tug-of-war-game":"Untitled Game","paced-quiz":"Untitled Quiz","interactive-image":"Untitled Image","head-tilt-quiz":"Untitled Lesson","pose-quiz":"Untitled Lesson","versus-game":"Untitled Game","wheel-quiz":"Untitled Wheel","turn-based-game":"Untitled Game"},publish$1={title:"Community Library",submitToLibrary:"Public to Community Library",saveForMeOnly:"Save for me only",schoolLevel:"School Level *",subject:"Subject *",grade:"Grade *",uploadLimitReached:"You have reached the upload limit. Get FullGame to share more.",upgradeProTooltip:"Get FullGame to support the community",copyrightLabel:"I confirm that this content was created by me or that I have the right to share it, and it does not infringe any third-party copyright.",copyrightRequiredError:"Please confirm the content copyright before publishing to the library",levels:{"mam-non":"Preschool","tieu-hoc":"Primary School",thcs:"Junior High School",thpt:"High School",khac:"Other"},subjects:{"phat-trien-the-chat":"Physical","phat-trien-nhan-thuc":"Cognitive","ph
533at-trien-ngon-ngu":"Language","phat-trien-tinh-cam":"Social-Emotional","phat-trien-tham-my":"Aesthetic","tieng-viet":"Vietnamese",toan:"Mathematics","ngoai-ngu-1":"Foreign Language 1","ngoai-ngu-2":"Foreign Language 2","giao-duc-loi-song":"Lifestyle Education","dao-duc":"Ethics","tu-nhien-xa-hoi":"Nature & Society","lich-su-dia-ly":"History & Geography","khoa-hoc":"Science","tin-hoc-cong-nghe":"ICT & Tech","giao-duc-the-chat":"PE","nghe-thuat":"Arts","tieng-dan-toc":"Ethnic Language","ngu-van":"Literature",gdcd:"Citizenship","khoa-hoc-tu-nhien":"Natural Science","cong-nghe":"Technology","tin-hoc":"ICT","gdqp-an":"Defense Education","gd-kinh-te-phap-luat":"Eco & Law","lich-su":"History","dia-ly":"Geography","vat-ly":"Physics","hoa-hoc":"Chemistry","sinh-hoc":"Biology",khac:"Others"},grades:{1:"Grade 1",2:"Grade 2",3:"Grade 3",4:"Grade 4",5:"Grade 5",6:"Grade 6",7:"Grade 7",8:"Grade 8",9:"Grade 9",10:"Grade 10",11:"Grade 11",12:"Grade 12","nha-tre":"Nursery","mau-giao-3-4":"KG 3-4","mau-giao-4-5":"KG 4-5","mau-giao-5-6":"KG 5-6",khac:"Other"}},community$1={title:"Community Library",description:"Explore and save lessons from the teacher community",tabs:{explore:"Explore",mine:"My Posts"},filters:{level:"School Level",subject:"Subject",grade:"Grade",gameType:"Game Type",allSubjects:"All Subjects",allGrades:"All Grades",allTypes:"All Types",searchPlaceholder:"Search by title...",searchBtn:"Search",searchHint:"Press Search to see results",clearFilters:"Clear filters ({{count}})"},explore:{selectBase:"Select level and subject to find lessons",selectBaseDesc:"Filter by Preschool, Primary, Junior High, or High School",selectSubject:"Next, select a subject",selectSubjectDesc:"Then press Search to see results",noResults:"No lessons found",noResultsDesc:"Try changing the filters"},mine:{empty:"You haven't posted any lessons",emptyDesc:'When creating a lesson, select "Public to Community Library" to contribute',removeConfirm:'Remove "{{title}}" from the Community Library?',removeTooltip:"Remove from Community Library"},card:{questions:"{{count}} questions",by:"By {{author}}",anonymous:"Anonymous",reportTooltip:"Report inappropriate content",viewAndSaveTooltip:"Preview and save to your account",btnSave:"View & Save"},detail:{questions:"questions",postedBy:"Posted by",loadError:"Failed to load lesson details.",saveSuccess:"Saved to your account!",saveSuccessDesc:"The lesson has been added to your list.",previewTitle:"Preview questions:",moreQuestions:"... and {{count}} more questions",alreadyClonedHint:"You've already saved this lesson. Do you want to save it again?",btnCancel:"Cancel",btnCloneAgain:"Save anyway",btnClone:"Save to account",btnGoToTool:"Go to {{name}}",generalError:"Something went wrong. Please try again."}},report$4={title:"Report Lesson",desc:"Please tell us why you are reporting this lesson.",success:"✅ Thank you! Your report has been received.",alreadyReported:"You have already reported this lesson.",submitError:"Something went wrong. Please try again.",noteLabel:"Additional notes (optional)",btnSubmit:"Submit Report",reasons:{inappropriate:"Inappropriate content",spam:"Spam / duplicate",copyright:"Copyright violation",other:"Other"}},enLibrary={title:title$7,subtitle:subtitle$1,searchHint:searchHint$1,tabs:tabs$4,error:error$5,empty:empty$4,actions:actions$5,features:features$2,itemDefaults:itemDefaults$1,publish:publish$1,community:community$1,report:report$4},page$d={title:"🤖 Companion Robot",loginToAccess:"Please log in to access Robot feature",sidebar:{myRobots:"My Robots",createNew:"Create New Robot",changeApiKey:"Change API Key"},help:{title:"Companion Robot Guide",description:"Learn how to create and use AI Companion Robots"}},list$5={loading:"Loading robot list...",errorLoad:"Error loading robots: ",apiWarning:"Due to API provider limitations, your Robots are limited to 20 messages per day. Please use them considerately",empty:{title:"No robots yet",subtitle:"Create your first robot to get started!",btnCreate:"➕ Create first robot"},header:"🤖 My Robots ({{count}})",pinBanner:{count:"({{pinned}}/{{limit}} pinned)",expired:"⚠️ Plan expired!",renew:"Renew"},card:{renewToOpen:"🔒 Renew to open this robot",public:"Public",private:"Private",tooltipChat:"Chat with robot",tooltipShare:"Share link",tooltipEdit:"Edit",tooltipDelete:"Delete",shareSuccess:"Share link copied"},delete:{title:"⚠️ Confirm Delete Robot",confirm:"Are you sure you want to delete this robot? This action cannot be undone.",btnCancel:"No, Cancel",btnConfirm:"Yes, Delete Robot",success:"Robot deleted successfully",error:"Error deleting robot"}},form$k={editTitle:"✏️ Edit Robot",createTitle:"➕ Create New Robot",sectionBasic:"📝 Basic Information",nameLabel:"Robot Name *",namePlaceholder:"e.g: Ms. Hoa, Mr. Minh",topicLabel:"Topic *",topicPlaceholder:"e.g: Writing poetry, Writing practice",sectionPersonality:"🎨 Robot Personality",speechLabel:"Robot speaks as *",addressLabel:"Call student as *",styleLabel:"Speaking style *",voiceLabel:"Vietnamese Voice (Requires Microsoft Edge and Vietnamese voice pack)",voiceHint:"Most computers might not have sufficient voice support!",voicePlaceholder:"-- Select voice --",voiceError:"Computer does not have Vietnamese voice pack installed.",sectionAvatar:"🖼️ Robot Avatar",avatarLabel:"Select avatar *",sectionTraining:"📚 Training Content",contentLabel:"Content *",contentHint:'Enter content to "train" the robot. You can add links in format: https://...',contentPlaceholder:`Example:
534
5351. Proverb: 'Practice makes perfect'
536Meaning: People who work hard will achieve success
537
5382. Tale of Kieu, link: https://example.com/kieu`,sectionApi:"🔐 Gemini API Configuration",apiConfigured:"API key configured",apiNotConfigured:"API key not configured",btnChangeApi:"Change API",btnConfigApi:"Configure API",btnPreview:"👁️ Preview",btnCancel:"Cancel",btnSaving:"⏳ Saving...",btnUpdate:"💾 Update",btnCreate:"➕ Create Robot",errorEmptyName:"Please enter robot name",errorEmptyContent:"Please enter training content",errorNoApi:"Please configure Gemini API",errorLimit:"Error checking limit",successCreate:"Robot created successfully",successUpdate:"Robot updated successfully",errorSave:"Error saving robot",avatarNames:{robot:"Robot","teacher-female":"Female Teacher","teacher-male":"Male Teacher","student-male":"Male Student","student-female":"Female Student"},styles:{"gần gũi":"😊 Friendly","chuyên nghiệp":"💼 Professional","nghiêm túc":"🎓 Serious","hài hước":"😄 Humorous"},speechOptions:{cô:"Ms.",thầy:"Mr.",tôi:"I"},studentTerms:{em:"Student",con:"Child",bạn:"Friend"}},chat={fullscreenError:"Cannot enter fullscreen mode",exitFullscreenError:"Cannot exit fullscreen mode",responseError:"Error receiving robot response",noSpeechSupport:"Browser does not support voice input",voiceInputError:"Failed to receive voice, please try again",btnFullscreen:"Fullscreen",btnExitFullscreen:"Exit Fullscreen",btnBack:"Back",btnClose:"Close",welcome:"Hello, {{term}}!",intro:"I am {{speech}} {{name}}.",startTopic:`Let's start our conversation about "{{topic}}"`,listening:"🎙 Listening to voice...",inputPlaceholder:"Enter question or comment...",tooltipVoice:"Voice Input",tooltipRecording:"Listening... (click to stop)",recordingStatus:"🔴 Listening...",friendlyMessages:{API_KEY_MISSING:"🔑 You haven't entered an API key. Please go to Change API key to add one from Google AI Studio!",API_KEY_INVALID:"🔑 Invalid API key! It might be wrong or revoked. Please check it in Change API key.",API_QUOTA_EXCEEDED:"⏳ Your API key has exceeded the free daily limit. Please try again tomorrow or use another key!",API_OVERLOAD:"😅 AI server is too busy right now. Please try again in a few seconds!",NETWORK_ERROR:"📡 Network connection lost! Please check your internet and try again.",DEFAULT:"😕 An error occurred, I couldn't respond. Please try again later!",API_ALL_MODELS_EXHAUSTED:"😴 All AI models have used up their free quota for today. Please come back tomorrow!"}},api={title:"Gemini API Configuration",label:"Gemini API Key *",placeholder:"Enter your API key",errorEmpty:"API key cannot be empty",getApiKey:"Get API key from Google AI Studio",guideTitle:"Gemini API Usage Guide",step1:"Go to Google AI Studio",step2:"Sign in with Google account",step3:'Click "Create API key"',step4:"Copy API key and paste it above",videoGuide:"Video Guide",freeApiKey:"Get free API key",btnCancel:"Cancel",btnSave:"Save"}
538,preview={title:"👁️ Robot Preview: {{name}}",btnBack:"← Back",labelTopic:"Topic:",labelStyle:"Style:",labelCalling:"Calling:",labelContent:"Content:",placeholderChat:"Try chatting with robot...",welcomeHint:'Try asking me about "{{topic}}" to see how the robot works.'},enCompanion={page:page$d,list:list$5,form:form$k,chat,api,preview},page$c={title:"✋ Hand Slash Quiz",upgradeLabel:"Unlock Feature",helpLabel:"User Guide",helpTitle:"Hand Slash Quiz Guide",helpDescription:"Learn how to create a Hand Slash Quiz for students to play and learn",sidebar:{myLessons:"My Lessons",createNew:"Create New"}},list$4={title:"📚 My Lessons",subtitle:"Manage your Hand Slash Quizzes",expired:"⚠️ Plan expired!",renew:"Renew",empty:"You have no lessons yet",createFirst:"➕ Create Your First Lesson",demo:{title:"Hand Slash Quiz - Demo",badge:"Demo",hint:"Try this demo to experience the game before creating your own"},lockedHint:"🔒 Renew to unlock this lesson",stats:"{{count}} questions",updated:"Updated: {{date}}",btnPlay:"Play",btnEdit:"Edit",btnAssign:"Assign",btnDelete:"Delete",tooltipPlay:"Play now",tooltipEdit:"Edit lesson",tooltipAssign:"Assign to students",tooltipDelete:"Delete lesson",deleteConfirmTitle:"🗑️ Confirm Delete",deleteConfirmText:"Are you sure you want to delete this lesson? This action cannot be undone.",deleteSuccess:"Lesson deleted successfully",deleteError:"Could not delete lesson",loadError:"Could not load lessons",speeds:{fast:"Fast",medium:"Medium",slow:"Slow"},freeLessons:"You have {{remaining}}/{{limit}} free lessons remaining",quotaExceeded:"You have no free credits left. Please upgrade your account.",assignSuccess:"Assignment created with code: {{code}}",btnCancel:"Cancel"},form$j={titleCreate:"➕ Create New Lesson",titleEdit:"✏️ Edit Lesson",lessonName:"Lesson Title",speedTitle:"🍎 Fruit Speed",speedFast:"🚀 Fast",speedMedium:"⚡ Medium",speedSlow:"🐢 Slow",useBackground:"🖼️ Use Background (hide camera)",noCamera:"📷 Use camera (slash with your hand)",questionsTitle:"Questions ({{current}}/{{max}})",questionNum:"Question {{num}}",questionPlaceholder:"Enter question...",answerColors:{green:"Green",red:"Red",yellow:"Yellow",purple:"Purple"},answerLabel:"Answers (check the correct one):",btnAddQuestion:"Add Question",btnSelectFromBank:"🗃️ Pick from Bank",btnCancel:"Cancel",btnSave:"Save Lesson",saving:"Saving...",errorTitleRequired:"Please enter lesson title",errorMinQuestions:"At least 1 question is required",errorQuestionEmpty:"Question {{num}} cannot be empty",errorCorrectRequired:"Question {{num}} must have a correct answer",errorAnswerEmpty:"Question {{num}} has an empty answer",errorMaxQuestions:"Maximum {{max}} questions allowed",loadError:"Could not load lesson",bankPickerTitle:"Select questions for Hand Slash Quiz",bankValidation:"{{count}} questions are not suitable for Hand Slash Quiz (require exactly 4 answers):",bankAddSuccess:"✅ Added {{count}} questions from Question Bank",bankLimitError:"Cannot add {{count}} questions. Max {{max}}, current {{current}}.",addFromLesson:"📂 From existing lesson",selectFromBankOrAI:"🗃️ Select from Bank or AI",manualEntry:"✏️ Manual entry",bankAddMixedSuccess:"Added {{count}} questions. Skipped {{skipped}} incompatible questions.",errorNoQuestionsCompatible:"No compatible questions for Hand Slash (require at least 2 answers)."},game$2={score:"Score",time:"Time",gameOver:"GAME OVER!",finalScore:"Your Score",btnAgain:"Play Again",btnExit:"Exit",totalQuestions:"Total {{count}} questions",wrongHint:"Wrong Slash!",correctHint:"CORRECT!",correctFeedback:"YES!!",loading:"Loading camera...",noCameraMode:"No Camera Mode",paused:"Paused",btnResume:"Resume",completed:"Completed!",questionNum:"Question {{num}}",seconds:"seconds",minimize:"Minimize",fullscreen:"Full Screen",answeredCount:"You answered {{count}} questions",lessonBy:"Lesson by {{name}}",linkExpired:"Sharing link might have been deleted or no longer exists",errorWebGL:"Your browser does not support WebGL. Please try closing other tabs or use Google Chrome.",errorGeneric:"Could not initialize hand tracking. Please try again.",errorHint:'You can switch to "No Camera" mode (slash with mouse/touch) to continue playing.',copyPreparing:"Preparing...",copiedSuccess:"✓ Copied!",copyAnalysis:"Copy to analysis tool"},instructions$2={title:"How to Play Hand Slash Quiz",step1Title:"1. Allow camera access",
538step1Desc:'The game needs camera access to recognize your hand. Please click "Allow" at the top left of your browser.',step2Title:"2. Slash fruits with your finger",step2Desc:"Move your finger quickly across the screen to slash the correct answer",step3Title:"3. Pick the correct answer",step3Desc:"Slashing wrong answers will deduct points, slash correctly and quickly for high scores!",tip:"💡 Tip: Move your hand quickly and accurately to score high!",btnFullscreen:"Full Screen",btnReady:"Ready to Play!"},demo$9={title:"Hand Slash Quiz Demo",subtitle:"Play now with {{count}} sample questions!",instructions:"Play Instructions:",step1:"1️⃣ Allow camera access when prompted",step2:'2️⃣ Use your index finger to "slash" the answers',step3:"3️⃣ Choose correct answers to get points",step4:"4️⃣ Avoid touching incorrect answers!",note:"⚠️ Note: You need a webcam/camera to play this game",btnStart:"🎮 Start Playing Now",version:"Demo version - {{count}} sample questions"},enHandSlash={page:page$c,list:list$4,form:form$j,game:game$2,instructions:instructions$2,demo:demo$9},pageTitle$9="🧩 Flip Puzzle",myPuzzles="My Puzzles",createNew$a="Create New Puzzle",helpTitle="Flip Puzzle Guide",helpDesc="Learn how to create Flip Puzzles for students to play and learn",loadingPuzzles="⏳ Loading puzzles...",errorLoading$7="❌ Error loading puzzles",confirmDelete$3="Are you sure you want to delete this puzzle?",deleteSuccess$6="✅ Puzzle deleted",deleteError$3="❌ Error deleting puzzle",emptyPuzzles="📭 No puzzles yet",createFirst$3="➕ Create First Puzzle",demo$8={title:"Flip Puzzle - Demo",badge:"Demo",hint:"Try this demo to experience the feature before creating your own"},cellsCount="{{count}} cells",play$4="Play",edit$3="Edit",assign$8="Assign",upgradeToUnlock$3="🔒 Upgrade to unlock",packageExpired$6="⚠️ Package expired!",extendSubscription$6="Extend Subscription",editFormTitle$3="Edit Puzzle",createFormTitle$3="Create New Puzzle",usageCount$3="📌 Used <strong>{{current}}/{{limit}}</strong> puzzles",unlimitedAccess="✅ You are using {{mode}} mode - Unlimited",puzzleTitleLabel="Puzzle Title:",titlePlaceholder$6="Enter title...",answerNameLabel="Image Name (The answer students need to guess):",answerPlaceholder="e.g., Eiffel Tower, Sun...",imageSourceTitle="📸 Image Source",uploadImageRadio="Upload Image",useUrlRadio="Use Image URL",compressingAndUploading="⏳ Compressing and uploading image...",urlPlaceholder="Enter image URL (e.g., https://example.com/image.jpg)",useButton="Use",uploadSuccess="✅ Image uploaded!",pieceColorLabel="🎨 Piece Color",colorBlue="Blue",colorGreen="Green",colorPurple="Purple",colorGradient="Gradient",colorRandom="Random",gridConfigTitle="🔢 Grid Configuration",gridSizeLabel="Grid Size:",gridSizeOption="{{rows}}x{{cols}} ({{count}} cells)",cellSizeModeLabel="Cell Size Mode:",equalSizeMode="Equal",randomSizeMode="Random (like real puzzle)",timeLimitLabel="Time limit per question (seconds, 0 = unlimited):",questionsCountTitle="❓ Questions ({{count}}/{{total}})",clearAllButton="🗑️ Clear All",pickFromBankButton="🗃️ Pick from Bank or AI",pickFromLessonButton="From existing lesson",lessonPickerTitle$3="Select a lesson to get questions from",manualInputButton="✏️ Manual Input",enoughQuestions="✅ All {{total}} questions added",questionsListHeader="Questions List ({{count}}/{{total}})",answersCount$3="{{count}} answers",editQuestionTitle="Edit this question",deleteQuestionTitle="Delete this question",noQuestions="📝 No questions yet",noQuestionsHint="Pick from Bank or AI, or Manual Input to start",saving$6="💾 Saving...",savePuzzle="💾 Save Puzzle",cancelPuzzle="Cancel",toastUploadSuccess="✅ Image uploaded successfully!",toastUploadError="❌ Error uploading image: ",toastUrlWarning="⚠️ Please enter an image URL",toastUrlSuccess="✅ Image URL applied!",toastUrlError="❌ Invalid URL",toastRemainingWarning="⚠️ Only {{remaining}} cells left. You are selecting {{selected}} questions.",toastQuestionsAdded="✅ Added {{count}} questions ({{current}}/{{total}})",toastQuestionsTrimmed="⚠️ The new grid has only {{total}} cells — dropped the last {{dropped}} questions.",toastQuestionsRoomLeft="ℹ️ The new grid has {{total}} cells — {{remaining}} more questions needed.",toastQuestionUpdated="✅ Question updated",toastQuestionDeleted="🗑️ Deleted question {{index}}",confirmClearAll="Delete all questions?",toastClearAll="🗑️ All questions deleted",errorTitleRequired$3="❌ Please enter a puzzle title",errorImageRequired="❌ Please upload an image",errorAnswerRequired="❌ Please enter the image name (
538answer)",errorQuestionsCount="❌ Please select {{total}} questions",toastUpdateSuccess$3="✅ Puzzle updated!",toastCreateSuccess$3="✅ New puzzle created!",toastLimitReached$3="⚠️ You have used all 8 free puzzles. Please upgrade to continue.",toastSaveError$3="❌ Error saving puzzle: ",player$d={back:"← Back",revealAnswer:"🔍 Reveal Image Name",exitFullscreen:"🗗 Exit Fullscreen",fullscreen:"🖵 Fullscreen",progressText:"{{revealed}}/{{total}} cells ({{percentage}}%)",questionHeader:"❓ Question - Cell #{{number}}",questionImageAlt:"Question Image",answerImageAlt:"Answer {{letter}}",cancel:"❌ Cancel",submitAnswer:"✅ Submit",confirmRevealTitle:"🔍 Reveal Image",confirmRevealText:"Are you sure you want to reveal the image?",no:"❌ No",yes:"✅ Yes, reveal image",victoryTitle:"🎉 Image Name:",toastCorrect:"✅ Correct! Cell revealed",toastIncorrect:"❌ Incorrect! Try again"},decode={title:"🔍 Reveal Image Name",readyToGuess:"Are you ready to guess the image name?",guessPlaceholder:"Enter image name...",confirm:"✅ Confirm"},share$2={loading:"⏳ Loading puzzle...",error:"❌ Error",notFound:"Puzzle not found",backHome:"← Back to Home",footerText:"🧩 Create your own puzzle at",brand:"Giáo Viên Đổi Mới"},victory={congrats:"🎉 Congratulations!",completedMsg:"You have completed the puzzle!",imageNameLabel:"Image Name:",finishButton:"✨ Finish"},canvas={loadingImage:"⏳ Loading image...",puzzleImageAlt:"Puzzle Image"},enFlipPuzzle={pageTitle:pageTitle$9,myPuzzles,createNew:createNew$a,helpTitle,helpDesc,loadingPuzzles,errorLoading:errorLoading$7,confirmDelete:confirmDelete$3,deleteSuccess:deleteSuccess$6,deleteError:deleteError$3,emptyPuzzles,createFirst:createFirst$3,demo:demo$8,public:"Public",private:"Private",cellsCount,play:play$4,edit:edit$3,assign:assign$8,delete:"Delete",upgradeToUnlock:upgradeToUnlock$3,packageExpired:packageExpired$6,extendSubscription:extendSubscription$6,editFormTitle:editFormTitle$3,createFormTitle:createFormTitle$3,usageCount:usageCount$3,unlimitedAccess,puzzleTitleLabel,titlePlaceholder:titlePlaceholder$6,answerNameLabel,answerPlaceholder,imageSourceTitle,uploadImageRadio,useUrlRadio,compressingAndUploading,urlPlaceholder,useButton,uploadSuccess,pieceColorLabel,colorBlue,colorGreen,colorPurple,colorGradient,colorRandom,gridConfigTitle,gridSizeLabel,gridSizeOption,cellSizeModeLabel,equalSizeMode,randomSizeMode,timeLimitLabel,questionsCountTitle,clearAllButton,pickFromBankButton,pickFromLessonButton,lessonPickerTitle:lessonPickerTitle$3,manualInputButton,enoughQuestions,questionsListHeader,answersCount:answersCount$3,editQuestionTitle,deleteQuestionTitle,noQuestions,noQuestionsHint,saving:saving$6,savePuzzle,cancelPuzzle,toastUploadSuccess,toastUploadError,toastUrlWarning,toastUrlSuccess,toastUrlError,toastRemainingWarning,toastQuestionsAdded,toastQuestionsTrimmed,toastQuestionsRoomLeft,toastQuestionUpdated,toastQuestionDeleted,confirmClearAll,toastClearAll,errorTitleRequired:errorTitleRequired$3,errorImageRequired,errorAnswerRequired,errorQuestionsCount,toastUpdateSuccess:toastUpdateSuccess$3,toastCreateSuccess:toastCreateSuccess$3,toastLimitReached:toastLimitReached$3,toastSaveError:toastSaveError$3,player:player$d,decode,share:share$2,victory,canvas},featureTitle$2="⏱️ Paced Quiz",myQuizzes$3="My Quizzes",createNew$9="Create New Quiz",help={title:"Paced Quiz Instructions",description:"Learn how to create quizzes, organize team matches, and presentation mode."},loadingList="Loading quiz list...",errorLoading$6="Failed to load quiz list",errorStartSession="Failed to start session. Please try again.",errorDelete="Failed to delete quiz",errorDuplicate="Failed to duplicate quiz",emptyState={title:"No quizzes yet",description:'Click "Create New Quiz" to start creating a paced quiz'},demo$7={title:"Paced Quiz - Demo",badge:"Demo",hint:"Preview how teacher and students interact in real time — try before you create",previewTitle:"Paced Quiz Feature Preview",teacherScreen:"Teacher Screen",studentScreen:"Student Screen",timeLeft:"Time left",revealAnswers:"Reveal Answers",nextQuestion:"Next Question →",finish:"Finish",studentInstruction:"Students tap their answer on their own device:",studentsAnswered:"{{count}}/{{total}} students answered",modeHint:"Paced Mode: Teacher controls the pace, students answer on their phones — no paper needed! There's also Presentation Mode, used to display questions on a big screen for the whole class; and Free Mode, where students work at their own pace and get instant feedback after each question.",finishedTitle:"Preview complete!",finishedDesc:"You've seen how the feature works. Create your own quiz to start teaching for real!",restart:"Watch again",createOwn:"Create my quiz →"},card$2={questionsCount:"{{count}} questions",unknownDate:"Unknown date",action:{start:"Start",edit:"Edit",delete:"Delete"},upgradeToUnlock:"🔒 Upgrade to unlock this quiz"},modeDialog={title:"Select Quiz Mode",presentation:{label:"Presentation",desc:"Teacher presents on screen, students answer directly",longDesc:"Presentation Mode: No need to share code. Teacher presents questions on a big screen, students raise hands or answer directly."},individual:{label:"Paced",desc:"Students scan code, pick a character or enter name",longDesc:"Paced Mode: Students scan QR code, pick an emoji character or enter the
538ir name to join. Students answer questions but CANNOT advance themselves — only the teacher can, ensuring a steady pace in class.",joinModeLabel:"How students join:",joinModeEmoji:"Pick a character (emoji)",joinModeName:"Enter name"},free:{label:"Free Pace",desc:"Students work at their own pace, instant feedback",longDesc:"Free Mode: Students scan the code and work at their own pace. Instant feedback after each question. Leaderboard at the end or when teacher stops.",duration:"Duration (minutes)",durationPlaceholder:"Leave empty or 0 for unlimited",durationHelper:"Leave empty or enter 0 for unlimited time"},cancel:"Cancel",start:"Start",shuffleLabel:"Shuffle question order",shuffleHelper:"Each session gets a random question order — discourages memorising by position or copying between students."},deleteDialog={title:"Confirm Delete",confirm:'Are you sure you want to delete quiz "{{title}}"?',deleting:"Deleting...",delete:"Delete",cancel:"Cancel"},form$i={editTitle:"Edit Quiz",createTitle:"Create New Quiz",basicInfo:"📝 Basic Information",titleLabel:"Quiz Title:",titlePlaceholder:"Enter quiz title...",timeLimitLabel:"Time limit per question (seconds, 0 = unlimited):",questionsTitle:"❓ Questions ({{count}})",clearAll:"🗑️ Clear All",pickFromBank:"🗃️ From Bank or AI",manualInput:"✏️ Manual Input",listHeader:"Question List ({{count}})",answersGrid:"{{count}} answers • Correct: {{correct}}",editQuestion:"Edit this question",deleteQuestion:"Delete this question",emptyQuestions:"📝 No questions yet",emptyQuestionsHint:"Pick from Bank/AI or enter manually to start",cancel:"Cancel",saving:"💾 Saving...",save:"💾 Save Quiz",errorTitle:"Please enter a quiz title",errorMinQuestions:"Must have at least 1 question",errorQuestionContent:"Question {{index}}: Please enter question text or add an image",errorMinOptions:"Question {{index}}: Must have at least {{count}} options",errorOptionContent:"Question {{index}}: Please enter text or image for option {{key}}",errorCorrectAnswer:"Question {{index}}: Please select the correct answer",errorSave:"An error occurred while saving the quiz. Please try again.",pickingTitle:"Select Questions for Paced Quiz",listeningTitle:"Shared listening file",listeningHint:"Upload one audio file for the whole quiz — students listen, then answer every question. Leave empty if there is no listening part.",allowReplayLabel:"Let students replay the audio",allowReplayOn:"Students can play and stop the audio freely during the quiz.",allowReplayOff:"⚠️ Students get EXACTLY ONE play. Once it finishes (or they stop it midway) the button locks — just like a real exam.",listeningProNote:"Uploading or recording a listening file is a FullGame feature. Everything else in the quiz still works normally.",listeningProBtn:"Upgrade"},control={loading:"Loading...",sessionNotFound:"Session not found",revealAnswer:"Reveal Answer",nextQuestion:"Next Question",reports:"📊 REPORTS",stop:"Stop",stopAndResults:"Stop & View Results",confirmEnd:"End Session?",confirmEndDesc:"Are you sure you want to end this session? Leaderboard will be shown and session data will be cleared.",cancel:"Cancel",finish:"Finish",code:"Code:",copy:"Copy",copied:"Copied!",ready:"Ready to start?",start:"START",presentationMode:"Presentation Mode - Students don't need to scan code",freeModeDesc:"Free Mode - Students scan code and work at their own pace",freeModeTime:" ({{count}} mins)",unlimitedTimeDesc:" (no time limit)",noParticipants:"No students joined yet",participantsJoined:"{{count}} students joined",teamsJoined:"Joined:",startedAt:"TIME REMAINING",unlimitedTime:"🎯 Unlimited Time",studentsPlaying:"👥 {{count}} students playing",questionCount:"Question {{current}} / {{total}}",alreadyAnswered:"{{count}} answered",correctCount:"{{count}} correct",incorrectCount:"{{count}} incorrect",errorReveal:"Cannot reveal answer",errorNext:"Cannot advance to next question",errorEnd:"Cannot end session",playListening:"🎧 Play listening audio",pauseListening:"Pause",resumeListening:"Resume",stopListening:"Stop listening audio"},leaderboard={title:"Leaderboard",points:"points",rank:"Rank",student:"Student",team:"Team",backHome:"Back to Home"},student={waiting:"Waiting for teacher to start...",starting:"⚡ Starting soon!",defaultName:"Student",errorSubmit:"Cannot submit answer",next:"Next Question →",waitingReveal:"Waiting for teacher to reveal answer...",slides:[{caption:"Stay focused and confident! 💪"}
538,{caption:"Knowledge is your power! 📚"},{caption:"Effort today, success tomorrow! 🌟"},{caption:"You can do it! Go for it! 🚀"},{caption:"Fun learning! Ready? 🎯"}],leaderboard:"Leaderboard",finishHeader:"🎉 Completed!",scoreResult:"{{score}}/100 points",rankResult:"Rank {{rank}} / {{total}} {{medal}}",officialRank:"🏆 Official Rankings",you:" (You)",backToHome:"Back to Home",waitingTeacher:"Waiting for teacher...",waitingNext:"Waiting for next question...",chooseAnswer:"👆 Choose your answer",timeUp:"⏰ Time's up! Cannot select answer",freeFinished:"You've finished the exercises, please wait a moment... 🎉",correct:"✅ Correct!",incorrect:"❌ Incorrect!",point:"pts",selectTeam:{title:"Select a team or enter your name",titleOnly:"Enter your name to join",titlePickEmoji:"Pick your emoji to join",header:"Select Team",chosen:"Taken",inputName:"Enter your name",orInputName:"Or enter your name",namePlaceholder:"e.g., John Doe",enterPlay:"Join Game",errorNameRequired:"Please enter your name",errorNameShort:"Name must be at least 2 characters",errorPresentation:"This quiz is in presentation mode, online participation is not supported.",errorClaimEmoji:"This emoji is taken, please pick another",errorJoin:"Cannot join session",errorGeneric:"Something went wrong"},listeningPlay:"🎧 Play audio",listeningPlayOnce:"🎧 Play audio (once only)",listeningPause:"Pause",listeningResume:"Resume",listeningStop:"Stop audio",listeningUsedUp:"No plays left"},enPacedQuiz={featureTitle:featureTitle$2,myQuizzes:myQuizzes$3,createNew:createNew$9,help,loadingList,errorLoading:errorLoading$6,errorStartSession,errorDelete,errorDuplicate,emptyState,demo:demo$7,card:card$2,modeDialog,deleteDialog,form:form$i,control,leaderboard,student},featureTitle$1="🔤 Crossword Puzzle",myCrosswords={title:"My Crosswords ({{count}})",loadError:"Error loading crosswords",deleteSuccess:"Crossword deleted",deleteError:"Error deleting crossword",shareError:"Error sharing crossword",unshareSuccess:"Unshared successfully",unshareError:"Error unsharing",duplicateSuccess:"Duplicated successfully",duplicateLimit:"You've reached the free limit for creating crosswords!",duplicateError:"Error duplicating crossword",copySuccess:"Link copied!",emptyState:"You don't have any crosswords yet",createNew:"Create New",createFirst:"Create your first crossword",lockedTip:"Upgrade to unlock this crossword",demo:{title:"GIAOVIEN - Crossword Demo",badge:"Demo",hint:"Try this 8-row crossword with hidden keyword GIAOVIEN"},questionsCount:"{{count}} questions",action:{play:"Play",edit:"Edit",assign:"Assign",delete:"Delete"},deleteDialog:{title:"Confirm Delete",confirm:'Are you sure you want to delete crossword "{{title}}"?',cancel:"Cancel",delete:"Delete"},assignSuccess:"Homework assigned successfully!",pin:{expiredReminder:"⚠️ Plan expired!",renew:"Renew"},downloadOffline:"Download",downloadOfflineUpgrade:"Upgrade to download",downloading:"Downloading...",downloadOfflineError:"❌ Could not create the download file, please try again"},form$h={saveRowQuestionSuccess:"Saved question for row {{index}}",allRowsHaveQuestions:"All rows already have questions!",importSuccess:"Imported {{count}} questions!",error:{noTitle:"Please enter a title",noCells:"Please enter crossword content",noKeywordColumn:"Please select a keyword column (click on column number)",rowMissingQuestion:"Row {{rows}} missing question",save:"Error saving: "},updateSuccess:"Crossword updated!",createSuccess:"New crossword created!",limitReached:"You have reached the free limit for creating crosswords!",subscription:{usage:"Used {{current}}/{{limit}} crosswords",remaining:" ({{count}} left)"},titleLabel:"Crossword Title",titlePlaceholder:"e.g., World Capitals",stats:{size:"Size: {{rows}} x {{cols}}",dataRows:"Rows with data: {{count}}",questions:"Questions: {{count}}/{{total}}",keyword:"Keyword: {{keyword}}",emptyKeyword:"(empty)"},btn:{importQuestionBank:"Import from Question Bank",importLesson:"📂 From existing lesson",testPlay:"Test play",saving:"Saving...",update:"Update",save:"Save Crossword"},questionPicker:{title:"Select questions from Question Bank"},lessonPickerTitle:"Select a lesson to get questions from",rowEditor:{title:"Question for Row {{index}}",error:{noQuestion:"Please enter a question",minAnswers:"Ceed at least 2 answers",noCorrect:"Please select at least 1 correct answer"},label:{question:"Question:",answers:"Answers (select the correct one):"},placeholder:{question:"Enter question (use $...$ for math formulas)",answer:"Answer {{char}}"},btn:{addAnswer:"Add Answer",cancel:"Cancel",save:"Save Question"},tip:"💡 Tick the checkbox to select the correct answer. Click √ to insert math formulas.",methodPicker:{title:"How do you want to add a question?",fromBank:"Choose from Question Bank",fromBankDesc:"Use saved questions or import from file/AI",manual:"Enter manually",manualDesc:"Write a new question right here",currentQuestion:"Current question:",noText:"(No content)",delete:"Delete question",deleteDesc:"Remove the question from this row; the grid stays unchanged",deleteConfirm:"Delete the question of row {{index}}?",deleteSuccess:"Deleted question of row {{index}}"}}},grid={controls:{row:"Rows:",col:"Columns:",addFirst:"+ Start",addLast:"+ End",removeFirst:"- Start",removeLast:"- End"},title:{addRowFirst:"Add row at start",addRowLast:"Add row at end",removeRowFirst:"Remove row from start",removeRowLast:"Remove row from end",addColFirst:"Add column at start",addColLast:"Add column at end",removeColFirst:"Remove c
538olumn from start",removeColLast:"Remove column from end",toggleKeyword:"Click to toggle keyword column",addQuestion:"Add question",editQuestion:"Edit question"},legend:{keyword:"Keyword column (click on column number to select)",hasQuestion:"Has question"}},player$c={error:{missingQuestion:"This row has no question",incorrect:"Incorrect! Try again"},success:{correct:"Correct! Row {{row}} revealed"},btn:{back:"Back",revealKeyword:"Reveal keyword",stop:"Stop",listen:"Listen",stopTTS:"Stop reading",readTTS:"Read question"},label:{keyword:"Keyword:"},modal:{question:{title:"Question - Row {{row}}",cancel:"Cancel",answer:"Answer"},reveal:{title:"Reveal keyword?",content:"Are you sure you want to reveal the keyword now?",no:"No",yes:"Yes, reveal keyword"}},victory:{title:"🎉 Congratulations!",keyword:"Keyword: {{keyword}}",stats:"Correct: {{correct}} | Incorrect: {{incorrect}}"}},wordSearch={title:"🔍 Word Search",sidebar:{myGames:"My Games",createCrossword:"Create Crossword",createWordSearch:"Create Word Search"},help:{title:"Tutorial: Word Games",description:"Learn how to create and play Crossword and Word Search"},form:{titleLabel:"Game Title",titlePlaceholder:"e.g., World Capitals",timeLimitLabel:"Time Limit (minutes)",noTimeLimit:"No limit",timeLimitValue:"{{count}} minutes",addBoard:"Add Board",keyword:"Keyword",keywordPlaceholder:"e.g., MOTHER",hint:"Hint",hintPlaceholder:"e.g., What is mother in English?",generateGrid:"Generate Grid",regenerate:"Regenerate",preview:"Preview",save:"Save Game",update:"Update",testPlay:"Test Play",boardTitle:"Board {{index}}",hintFontIncrease:"Increase hint font size",hintFontDecrease:"Decrease hint font size",boardCount:"{{count}} boards",keywordDirection:"Keyword: {{keyword}} ({{direction}})",direction:{horizontal:"horizontal",vertical:"vertical",diagonalRight:"diagonal down-right",diagonalLeft:"diagonal down-left"},error:{minBoard:"Need at least 1 board",noKeyword:"Please enter a keyword first",generateSuccess:"Grid generated for board {{index}}",saveSuccess:"Game saved successfully!",updateSuccess:"Game updated successfully!",duplicateLimit:"You have reached the free limit!",saveError:"Error saving: "}},player:{hint:"💡 Hint: {{hint}}",boardProgress:"Board {{current}}/{{total}}",found:"Found: {{count}}/{{total}}",timeUp:"⏰ Time's up!",foundWord:"🎉 Found it!",timeLeft:"⏳ Time left: {{time}}",victory:"🎉 Complete!",back:"Back",submitAssignment:"Submit results to teacher",fullscreen:"Fullscreen",exitFullscreen:"Exit fullscreen"}},enCrossword={featureTitle:featureTitle$1,myCrosswords,form:form$h,grid,player:player$c,wordSearch},featureTitle="🐉 Sleeping Dragon",sidebar$4={upgrade:"Get FullGame",tracking:"Noise Tracking",tips:{title:"Tips:",calibration:"After starting, stay quiet for 10 seconds to determine the background sound for better accuracy.",mercy:"The Mercy button appears at the bottom while tracking."}},setup={title:"Session Setup",subtitle:"Set up your session and let the Dragon manage your classroom",trialBanner:"Trial version: maximum time <strong>{{max}} minutes</strong>. Upgrade for unlimited use.",className:{label:"Class Name / Lesson",placeholder:"e.g., Class 10A1 — Self-study"},duration:{label:"Time:",unit:"min",maxTrial:"(max {{max}}m)"},initialScore:{label:"Initial Score:",unit:"points"},threshold:{label:"Alarm Threshold:",unit:"Ambient + {{offset}} dB",hint:"Lower value = more sensitive. Recommended: 20–30 dB. Can go down to 1 dB.",verySensitive:"Very sensitive",lessSensitive:"Less sensitive"},error:{mic:"The browser cannot access the microphone. Please grant permission and try again."},btn:{checking:"Checking mic...",start:"Start Ambient Check ({{count}}s)"}},calibration={title:"Dragon is listening to the room...",instruction:"Please keep normal silence for {{count}} seconds for the system to measure the baseline accurately.",unit:"sec",complete:"Done! Starting monitoring...",skip:"Skip · use default threshold"},monitor={scoreLabel:"Score / {{total}}",btn:{end:"End Session",fullscreen:"Fullscreen",exitFullscreen:"Exit Fullscreen",mercy:"🕊️ Mercy",mercyActive:"🔵 Mercy Active...",mercyTooltip:"Mercy — disable warnings for 10 seconds",mercyActiveTooltip:"Active (10 seconds)"}},dragon={state:{sleeping:"Dragon is sleeping soundly...",warning:"Dragon is getting annoyed...",angry:"DRAGON WOKE UP!"},mercyStatus:"MERCY (10s)"},summary={title:"Session Summary",unit:{minutes:"min",seconds:"sec"},grade:{excellent:"Excellent!",good:"Good",average:"Average",needsImprovement:"Needs Improvement"},stats:{angryCount:"Dragon woke up",pointsLost:"Points lost",mercyUsed:"Mercy used",noiseThreshold:"Noise threshold",countUnit:"times",pointsUnit:"pts"},log:"Event Log",btn:{close:"Close",restart:"Start New Session"}},events={angry:"Dragon woke up!",mercy:"Mercy activated (Teacher disabled 
538warnings)"},enNoiseTracker={featureTitle,sidebar:sidebar$4,setup,calibration,monitor,dragon,summary,events},heroTitle$2="Educational AI Tools",warningEmail="⚠️ Official school email accounts may restrict AI tools, please use your personal @gmail.com account",warningTrial='🔒 Please click "Try demo" and view tutorials carefully before deciding to unlock!',tabs$3={paid:"Paid AI",free:"Free AI",bundle:"Unlock multiple tools at once (discounted)",fullAiRemaining:"FullAI · {{days}} days left",upgradeFullAi:"Upgrade FullAI",upgradeFullAiTitle:"Upgrade to FullAI PLAN"},groups$1={report:"Records & Reports",lesson:"Lesson Plans & Teaching Preparation",exam:"Exams & Tests",product:"Products & Games"},groupBadge="30,000đ - 50,000đ/year per tool · Multi-year & multi-tool discounts available",searchPlaceholder="Search tools...",contactAdmin="Contact Admin",emptyHint="No matching tools found.",freeSectionTitle="Free Tools Collection",freeSectionBadge="✨ Experience AI completely free",priceYear="{{price}}đ/year",openError="Cannot open tool, please try again.",buttons={trial:"Try demo",viewHelp:"View tutorial",helpTitle:"Guide: {{title}}",comingSoon:"🕒 Coming soon",opening:"⏳ Opening...",freeUseNow:"✨ Free - Use now",useNowLifetime:"🚀 Use now · Lifetime",useNowDays:"🚀 Use now · {{days}} days left",useNowDaysWarning:"🚀 Use now · ⚠️ {{days}} days left",unlockPrice:"🔓 Unlock ({{price}}đ/year)",useNow:"🚀 Use now"},bundle={hintSelect:"Select tool cards you want to unlock to add to cart",toolsCount:"🛒 {{count}} tools",discount:"Save {{percent}}%",checkout:"💳 Bundle Checkout",cancel:"Cancel",selected:"✓ Selected",addToCart:"+ Add to cart"},fullAiExtend={title:"FullAI PLAN · {{days}} days left",content:"You have {{days}} days of FullAI remaining. Additional payments will accumulate the remaining days.",ok:"OK"},contactModal={title:"Contact Administrator",desc:"If you encounter difficulties unlocking or using tools, please contact the admin via Zalo/Phone for support:",ok:"Got it"},tools={tool1:{title:"Initiative Experience Writing",description:"Automatically write initiative experience reports using AI"},tool2:{title:"Excellent Teacher Measures",description:"Automated measures to improve teaching and homeroom quality using AI"},tool4:{title:"AI Conduct Analysis",description:"Analyze training results to provide in-depth feedback with AI. Note: This is NOT a data entry tool for SMAS or VnEdu"},tool14:{title:"Integrate Digital & AI Competency into Lesson Plans",description:"Simultaneously (or separately) integrate digital competency and AI competency into educational plans and curriculum distribution"},tool16:{title:"Comprehensive Integration (Digital, AI...) into Lesson Plans",description:"Allows SIMULTANEOUS or INDIVIDUAL integration of digital competency, AI, and inclusive education into lesson plans"},tool9:{title:"Integrated PRESCHOOL Lesson Plan Preparation",description:"Allows SIMULTANEOUS or INDIVIDUAL integration of digital competency, AI, and inclusive education into lesson plans — exclusively for Preschool"},tool13:{title:"AI Thematic Lesson Plan Preparation",description:"Build thematic lesson plans on AI according to Decision 2422 guidelines"},tool11:{title:"Create AI Competency Integration Matrix for Educational Plans",description:"Automatically generate AI competency integration tables into educational plans according to Decision 2422"},tool17:{title:"IT-Integrated Lesson Planner",description:"Upload a textbook or existing lesson plan — AI writes the lesson plan with concrete digital activity suggestions from giaoviendoimoi.com and exports ready-to-paste question JSON"},tool5:{title:"Create Exams following Official Dispatch 7991",description:"Create exams, answer keys, and grading guidelines standardizing Official Dispatch 7991"},tool6:{title:"Create English Exams according to Official Dispatch 7991",description:"Create standard exams according to Official Dispatch 7991 specifically for English"},tool7:{title:"Create Standard Literature Exams",description:"Draft exams following standard structure and rubrics for Literature"},tool8:{title:"Create Specialized Exams",description:"Create exams according to existing matrices and structures for special purposes: gifted students, exam practice..."},tool10:{title:"AI Software Product Generator",description:"AI tool supporting the creation of smart educational software"},toolTtsVoice:{title:"AI Voice Generator",description:"Generate natural AI voice-over files for your lessons: type the text, pick a voice, then download the audio for AI Read-aloud features or embed it in elearning lessons. Already unlocked if you have FullGame"},toolHtmlGame:{title:"AI Quick Game Maker",description:"Create interactive games quickly from your lesson plans, for classroom use or embedding in elearning/SCORM lessons, digital devices, or paste code into Custom Games to assign to students immediately",unlockBadge:"Simultaneously unlocks",customGameName:"Custom Game"},free1:{title:"AI Multiple Choice Question Generator",description:"Automatically generate multiple-choice questions from lesson plan content using AI"},free2:{title:"Learning Process Analysis",description:"Analyze and evaluate student learning pathways using AI"},free4:{title:"AI Teaching Robot",description:"Smart AI robot assisting teaching — answering questions, explaining lesson content interactively to students"},free3:{title:"Career Guidance Image Generator for Students",description:"Use AI to create career guidance photos based on student interests and skills"},free5:{title:"IT-Integrated Lesson Planner",description:"Upload a textbook or existing lesson plan — AI writes the lesson plan with concrete digital activity suggestions from giaoviendoimoi.com and exports ready-to-paste question JSON"}},enAiTools={heroTitle:heroTitle$2,warningEmail,warningTrial,tabs:tabs$3,groups:groups$1,groupBadge,
538searchPlaceholder,contactAdmin,emptyHint,freeSectionTitle,freeSectionBadge,priceYear,openError,buttons,bundle,fullAiExtend,contactModal,tools},page$b={title:"💎 Scavenger Hunt",helpLabel:"Tutorial video",helpTitle:"Scavenger Hunt Tutorial",createHuntBtn:"Create New Hunt",loadError:"Could not load data.",sidebar:{myHunts:"My Hunts",sessions:"Assigned Sessions",create:"Create New"}},myHunts={emptyTitle:"No hunts yet",emptyDesc:"Create your first scavenger hunt for students to start adventuring — or try the demo below!",demoBadge:"Demo",monstersCount:"{{count}} monsters",playTrial:"Play Demo",assign:"Assign",edit:"Edit",delete:"Delete",teacherShare:"Teacher Share",shareTooltipEnabled:"Share with other teachers via link",shareTooltipDisabled:"Can only share hunts where all monsters are questions (no lessons)",deleteDialog:{title:"Delete hunt?",content:'Delete original hunt "{{title}}"? Sessions assigned from this hunt will remain intact (saved independently) — to stop them, delete from the "Assigned Sessions" tab.',cancel:"Cancel",confirm:"Delete"}},sessions={emptyTitle:"No assigned sessions yet",emptyDesc:"Go to <1>My Hunts</1> and click <3>Assign</3> to create a session for your students.",statusEnded:"Ended",statusExpired:"Expired",statusOpen:"Open",assignedDate:"Assigned: {{assigned}} · Due: {{expires}}",copyCode:"Copy code",copiedCode:"Code copied",copyLink:"Copy link",copiedLink:"Link copied",play:"Play",results:"Results",end:"End",delete:"Delete",deleteDialog:{title:"Delete assigned session?",content:'Delete session "{{title}}"{{label}}? Students will no longer be able to join and session results will also be removed.',cancel:"Cancel",confirm:"Delete"}},builder={createTitle:"Create New Scavenger Hunt",updateTitle:"Update Scavenger Hunt",titleLabel:"Hunt Name",titlePlaceholder:"e.g.: Summer 2026 - Math Scavenger Hunt",winModeLabel:"Winning Condition:",winModeAllStages:"Answer all to win",winModeKeyword:"Hunt secret keyword",winModeKeywordDesc:"Each monster holds 1 letter of the keyword. Students defeat enough monsters to assemble the secret keyword to win.",winModeAllStagesDesc:"Students must defeat all monsters to win — you choose the number of monsters. Each monster is a question or lesson.",keywordLabel:"Secret keyword",keywordPlaceholder:"e.g.: VIETNAM",keywordHelper:"Keyword has {{count}} characters → need exactly {{count}} monsters (min {{min}}, max {{max}})",monsterCountLabel:"Number of monsters (questions/lessons):",monsterCountRange:"From {{min}} to {{max}} monsters",dailyLimitLabel:"How many monsters can be challenged daily? (Limiting this encourages daily practice rather than rushing to finish)",dailyLimitUnlimited:"Unlimited",dailyLimitOption:"{{count}} monsters / day",dailyLimitUnlimitedDesc:"Students can defeat any monster in any order without daily limits.",dailyLimitDesc:"Students can defeat up to {{count}} monsters per day — the rest are locked until midnight. No forced order.",monsterTypeLabel:"Monster type:",monsterTypeQuestion:"❓ Questions",monsterTypeGame:"🎮 Lessons",monsterTypeQuestionDesc:"Each monster is a question, answered directly on the map. Enter questions in the list below.",monsterTypeGameDesc:"Each monster is a lesson/game you created. Select individually in the list below.",shuffleAnswers:"🔀 Shuffle answer options",shuffleAnswersDesc:"Each time students encounter the same monster, answer choices are shuffled — ensuring true understanding. Applies to multi-statement True/False questions as well.",questionOrderKept:"Question order is strictly preserved because each question attaches to a specific monster{{suffix}}.",questionOrderSuffixKeyword:" and a keyword letter",questionsListTitle:"Question List",filledCount:"Filled {{current}}/{{total}}",missingKeywordHint:"Enter secret keyword above to see how many questions are required.",missingStageCountHint:"Select monster count above to see how many questions are required.",duplicateDisabledReason:"Reached {{targetCount}} questions (equal to monster count)",duplicateDecoyDisabledReason:"Reached maximum of {{max}} decoy questions",qfLabels:{clearAll:"Clear all",pickFromBank:"📚 Pick from Bank or AI",pickFromLesson:"📂 From existing lessons",manualInput:"✍️ Manual input",note:"Requires exactly {{targetCount}} questions (equal to monster count).{{suffix}}
538 Supports 4 formats: Multiple choice, True/False (multi-statements), Multiple select, Fill in the blank.",noteKeywordSuffix:" Question order = keyword letter order.",noteAllStagesSuffix:" Answer all to win.",listHeader:"Question List ({{count}})",emptyTitle:"No questions added yet",emptyDesc:"Use the buttons above to add questions."},excessQuestionsAlert:"{{count}} extra questions — please delete to match {{target}} questions, or increase monster count above.",missingQuestionsAlert:"{{count}} questions remaining.",gamesListTitle:"Lesson / Game List for Monsters",missingKeywordGameHint:"Enter secret keyword above to generate monsters.",missingStageCountGameHint:"Select monster count above to start.",selectLessonForMonster:"Select lesson for this monster",deleteSlotTooltip:"Clear this slot",close:"Close",decoySwitch:"👻 Add extra decoy monsters",decoyDesc:'These are monsters holding NO keyword letters — added as decoys. Students can defeat them without gaining letters, making keyword deduction harder. (Only for "Secret Keyword" win mode.) Content type matches the "Monster type" selected above: ',decoyModeQuestion:"questions",decoyModeGame:"lessons",decoyQuestionsCount:"Entered {{count}}/{{max}} extra decoy questions.",decoyQfLabels:{clearAll:"Clear all",pickFromBank:"📚 Pick from Bank or AI",pickFromLesson:"📂 From existing lessons",manualInput:"✍️ Manual input",note:"Max {{max}} decoy questions. These do NOT grant keyword letters when answered correctly. Supports 4 formats: Multiple choice, True/False (multi-statements), Multiple select, Fill in the blank.",listHeader:"Decoy Questions List ({{count}})",emptyTitle:"No decoy questions yet",emptyDesc:"Use the buttons above to add questions."},decoyMaxAlert:"Reached maximum of {{max}} decoy questions.",decoyLessonsCount:"Selected {{count}}/{{max}} extra decoy monsters.",lessonTypeLabel:"Lesson type",noLessons:"No lessons available.",loadMore:"Load more ({{count}} remaining)",cancel:"Cancel",createBtn:"Create Scavenger Hunt",updateBtn:"Update Scavenger Hunt",confirmDeleteAll:"Delete all questions?",confirmDeleteAllDecoy:"Delete all decoy questions?",bankModalTitle:"Select Questions from Question Bank",lessonModalTitle:"Get Questions from Created Lessons",decoyBankModalTitle:"Select Decoy Questions from Bank",decoyLessonModalTitle:"Get Decoy Questions from Created Lessons",multiTypeHint:"Supports 4 question formats: Multiple choice, True/False (multi-statements), Multiple select, and Fill in the blank.",types:{shortAnswer:"Fill in the blank",trueFalse:"True / False",trueFalseMulti:"True / False • {{count}} statements",lessonChip:"Lesson",questionChip:"Question"},messages:{skippedQuestions:"Omitted {{count}} unusable questions (missing content or correct answer).",noMatchingQuestions:"No matching questions found.",noLessonQuestions:'No matching questions found in "{{title}}".',excelNoMatching:"No matching questions found in file (only single-answer multiple choice or fill-in-the-blank supported).",excelSkipped:"Omitted {{count}} unusable questions.",generalError:"An error occurred. Please try again."}},questionStage={close:"Close",clickToClose:"Click to close",decoyTitle:"This monster does not contain a keyword letter!",decoyDesc:"You answered correctly, but this is a decoy monster. Keep searching!",correctLetter:"Correct! You received the letter:",correctMonster:"Correct! Defeated monster #{{num}}!",incorrect:"Incorrect!",monsterNumber:"MONSTER #{{num}}",typeAnswerPlaceholder:"Type your answer...",chooseTrueFalse:"Select True or False for each statement:",trueLabel:"True",falseLabel:"False",multipleChoiceHint:"There may be multiple correct answers — select all that apply:",flee:"Flee",attack:"Attack!"},play$3={trialStudentName:"Preview",defeatNotification:"💥 The monster is still there. Leave and come back to try again!",huntNotFound:"Scavenger hunt not found.",huntEnded:"This scavenger hunt has ended.",huntExpired:"This scavenger hunt has expired.",genericError:"An error occurred.",passportNotFound:"Passport not found. Please verify your code.",stagesChallenges:"{{count}} challenges",winModeAllStages:"Defeat all monsters to win",winModeKeyword:"Find the secret keyword",firstTimeTab:"First time playing",havePassportTab:"Have passport code",nameLabel:"Your name",namePlaceholder:"Enter your name to start...",startAdventure:"⚔️ Start adventure!",passportCodeLabel:"Passport code (2 characters)",continueJourney:"🧭 Continue journey",exitBtn:"← Exit",yourPassport:"Your passport",passportSaveHint:"Save this code to continue on another device or later",copied:"Copied!",readyGreeting:"Hello, <1>
538{{name}}</1>! Ready for adventure?",letGoBtn:"🚩 Let's go!",previewBanner:"🧪 Preview mode — no passport needed, no daily monster limits, results NOT saved to assigned session.",exitPreview:"← Exit preview",dailyLimitReached:"🌙 YOU DID GREAT TODAY — COME BACK TO BATTLE TOMORROW 🌙",moveInstruction:"💡 Use <1>W A S D</1> or <3>arrow keys</3> to move — on mobile, touch & hold where you want to go. Enter the circle around a monster to start battle; walk around it if you wish to skip.",exitConfirmTitle:"Exit the hunt?",exitConfirmDesc:"Your progress has been saved — you can re-enter anytime using your passport code ",stayBtn:"Stay",confirmExitBtn:"🚪 Exit"},treasureModal={tryAgain:"Incorrect, try again!",treasureAlt:"treasure",congrats:"🎉 Congratulations!",completedDesc:"You completed the Scavenger Hunt!",attemptsCount:"Attempts: {{count}}",awesomeBtn:"Awesome! 🏆",openSecretChest:"🎁 Open secret chest",arrangeLettersDesc:"Arrange {{count}} collected letters into the secret keyword!",hint:'Hint: Keyword has {{count}} letters, starts with "{{first}}"',inputLabel:"Enter keyword ({{count}} letters)",openBtn:"Open chest!"},stageModal={unsupportedType:"This game type is not supported in Scavenger Hunt yet.",close:"Close",closeAria:"Close",decoyTitle:"This monster does not contain a keyword!",decoyDesc:"You won the battle but this is a decoy monster. Keep exploring!",earnedLetterTitle:"You received a letter:",letterStoredDesc:"Letter has been stored in your inventory"},hud={player:"Player:",passport:"Passport code:",muteBgm:"Mute music",unmuteBgm:"Unmute music",minimize:"Minimize",fullscreen:"Fullscreen",openedChest:"🏆 Opened!",openChest:"🎁 Open chest!",chestLocked:"🔒 Chest",sidebarChestOpened:"🏆 Chest opened!",sidebarChestReady:"🎁 Click to open chest!",monstersCount:"monsters",keywordsCount:"keywords",bgmOn:"Music: On",bgmOff:"Music: Off",exitGame:"Exit game",treasureFound:"🏆 Treasure found!"},assignModal={title:"Assign Hunt to Students",huntFallback:"Scavenger Hunt",mainStagesCount:"{{count}} main stages",keywordInfo:" · Keyword: {{keyword}}",labelField:"Batch / Class label (optional)",labelPlaceholder:"e.g.: Class 6A, Batch 1...",labelHelper:"Helps distinguish different batches of the same hunt in 'Assigned Sessions'.",expirationTitle:"Participation Expiry",minDaysAlert:"This hunt has {{count}} monsters, students can only defeat {{perDay}} monsters/day → minimum <strong>{{minDays}} days</strong> required to complete. Shorter durations are disabled.",minDaysError:"This hunt requires at least {{minDays}} days for students to complete. Please choose a longer duration.",extendedPermError:"Could not verify extended link permission. Please try again.",assignFailed:"Failed to assign hunt. Please try again.",cancel:"Cancel",assignBtn:"Assign",assigningBtn:"Assigning...",successTitle:"Hunt Assigned!",batchLabel:"Batch: <1>{{label}}</1>",shareInstruction:"Share the code or link below for students to join.",joinCodeLabel:"Join code",copied:"Copied!",copyCode:"Copy code",shareLinkLabel:"Share link",copiedBtn:"Copied",copyBtn:"Copy",downloadQr:"Download QR",close:"Close",days:{1:"1 day",3:"3 days",7:"7 days",15:"15 days",30:"30 days",90:"90 days",365:"1 year",730:"2 years",1095:"3 years",1825:"5 years"}},statsModal={title:"📊 Results: {{title}}",keywordInfo:"Keyword: <1>{{keyword}}</1> · {{count}} main stages",reloadTooltip:"Reload",studentsCount:"Participating Students",completedCount:"Completed",avgStages:"Avg Stages Passed",stagePassRateTitle:"Pass rate per stage:",stageNum:"Stage {{num}}",chest:"🎁 Chest",searchPlaceholder:"Search by name or passport code...",noStudents:"No students have participated yet.",notFound:"Not found.",colIndex:"#",colName:"Name",colPassport:"Passport",colStages:"Stages",colScore:"Score",colCompleted:"Status",colStarted:"Started",colDelete:"Delete",statusDone:"✅ Done",statusNotYet:"Not yet",deleteStudentTooltip:"Delete this student's result",deleteConfirm:'Are you sure you want to delete results for student "{{name}}" ({{code}})?',unplayedTooltip:"Not played",progressTooltip:"{{percent}}% · {{attempts}} attempts",footerStudents:"{{count}} students",filteredFrom:" (filtered from {{total}})",close:"Close"},slotPicker={lessonType:"Lesson Type",noLessons:"No lessons yet.",loadMore:"Load more ({{count}} remaining)"},world={minutes:"{{count}} min",days:"{{count}} days",hours:"{{count}} hours",notOpen:"Locked",dailyLimitReachedTooltip:"🛡️ Defeated all {{count}} monsters for today — return in {{cooldown}}",unlockAfterTooltip:"🛡️ Opens in {{cooldown}}",retryTooltip:"Not passed — step in to try again!",decoyTooltip:"Mysterious monster...",monsterTooltip:"Monster #{{num}}",introText:"⚔️ FIND MONSTERS TO BATTLE ⚔️"},enScavengerHunt={page:page$b,myHunts,sessions,builder,questionStage,play:play$3,treasureModal,stageModal,hud,assignModal,statsMo
538dal,slotPicker,world},form$g={editTitle:"Edit Flashcard Deck",createTitle:"Create New Flashcard Deck",addCardAiExcel:"✨ Add Cards with AI/Excel",titleLabel:"Deck Name",titlePlaceholder:"e.g.: Unit 5 Vocabulary, World History...",shuffleCards:"Shuffle cards when studying",fontSizeLabel:"Font Size",fontSizes:{small:"Small",regular:"Standard",large:"Large",xlarge:"Extra Large"},imageSizeLabel:"Image Size",frontColorLabel:"Front Color",frontColors:{red:"🟥 Red",indigo:"🟣 Purple",blue:"🟦 Blue",teal:"🩵 Teal",orange:"🟧 Orange",slate:"⬛ Slate",brown:"🟫 Brown"},voiceLabel:"Reading Voice",languages:{vi:"🇻🇳 Vietnamese",en:"🇬🇧 English"},cardFormatLabel:"Card Format",twoSides:"2 Sides",singleSide:"1 Side",questionOnly:"Question only",answerOnly:"Answer only",autoRead:"Auto read aloud when flipping/switching cards",showAllCards:"👁 Show all cards",hideAllCards:"🙈 Hide all cards",cardNum:"Card {{num}}",hasImage:"🖼 Has image",expand:"Expand",collapse:"Collapse",deleteCardTitle:"Delete this card",frontSide:"Front side",backSide:"Back side",frontPlaceholder:"Question / word / concept...",backPlaceholder:"Answer / meaning / explanation...",pastingImage:"Pasting image...",imageLabel:"Image",addCard:"+ Add Card",cancel:"Cancel",saving:"Saving...",update:"Update",create:"Create Deck"},aiModal={title:"✨ Add Cards with AI / Excel",tabJson:"🤖 Paste JSON (AI)",tabExcel:"📊 Upload Excel",openAiTool:"🚀 Open AI Flashcard Generator",steps:{step1:'Click "🚀 Open AI Flashcard Generator" above (opens in new tab).',step2:'In the tool, enter a topic (e.g. "English 7 Unit 5 Vocabulary") then click Generate.',step3:"Once generated, click Copy to Giao Vien Doi Moi.",step4:'Return here, paste (Ctrl+V) into the box below then click "Add to Deck".'},jsonPlaceholder:`[
539  {"front": "Photosynthesis", "back": "Process by which plants create organic matter"},
540  {"front": "Cellular respiration", "back": "Process of breaking down organic matter"}
541]`,cancel:"Cancel",apply:"Add to Deck",excelHint:"Excel file must have 2 columns: Front side and Back side.",dlTemplate:"⬇ Download sample file (.xlsx)",pickExcel:"📂 Choose Excel file"},messages$1={minOneCard:"A deck must have at least 1 card",uploadImageError:"Could not upload image, please try again",jsonMustBeArray:"Must be a JSON array with at least 1 element",jsonMissingFields:'Item {{index}} is missing "front" or "back"',jsonAdded:"Added {{count}} cards from AI",jsonInvalid:"Invalid JSON",excelEmpty:"File contains no data",excelRowEmpty:"Row {{row}}: both columns are empty",excelAdded:"Added {{count}} cards from Excel",excelReadError:"Could not read Excel file",emptyContentError:"Please add at least 1 card with content",libraryFieldsRequired:"Please select school level, subject, and grade to publish to the library",audioUploadError:"Audio file upload failed. Please check your connection and click Save again.",updateSuccess:"Updated deck successfully",createSuccess:"Created new deck successfully",snapshotTooLarge:"Deck is too large to publish to library",saveFailed:"Failed to save, please try again later"},excelTemplate={frontHeader:"Front side",backHeader:"Back side",row1Front:"Photosynthesis",row1Back:"Process by which green plants synthesize nutrients from CO₂ and water",row2Front:"Cellular respiration",row2Back:"Process of decomposing organic matter to release energy",row3Front:"$\\frac{a}{b}$",row3Back:"Fraction a divided by b (math formula supported)",fileName:"sample-flashcard.xlsx"},enFlashcard={form:form$g,aiModal,messages:messages$1,excelTemplate},form$f={newTitle:"Create New Lesson",editTitle:"Edit Lesson",generalInfo:"General Information",lessonTitle:"Lesson Title",timeLimitPerQuestion:"Time per question (seconds)",gameplay:"Gameplay",gameMode:"Game Mode",modeArrange:"Sentence Arrangement",modeFind:"Find Target Words",wordSpeed:"Flight Speed",speedVerySlow:"Very Slow",speedSlow:"Slow",speedMedium:"Medium",speedFast:"Fast",defaultCardFontSize:"Default Word Card Font Size",fontSizes:{1:"Small",2:"Medium",3:"Large",4:"Extra Large",5:"Huge"}
541,bgColor:"Frame Background Color",cameraGesture:"Play with camera (hand gestures)",scoring:"Scoring (off = presentation mode only, no points)",bgMusic:"Background Music (off = do not autoplay, can toggle in game)",questionsList:"Sentence List ({{current}}/{{max}})",questionNum:"Sentence {{num}}",moveUp:"Move up",moveDown:"Move down",deleteQuestion:"Delete this sentence",completeSentenceAnswer:"Complete Sentence (Answer)",hintFontSize:"Hint Sentence Font Size",sentencePlaceholder:"Enter complete sentence, e.g.: Hanoi is the capital of Vietnam",mathFormulaHint:"Math Formula: each formula must fit within <1>a single word</1> (sentences are split by spaces) — write <3>$x^2$ $+$ $y^2$</3> (3 cards), do not write <5>$x^2 + y^2$</5> (will be split into <7>$x^2$</7>, <9>+</9>, <11>y^2$</11> and display incorrectly).",hintLabel:"Hint for this sentence (optional)",hintPlaceholderArrange:"Default: Arrange the words below into a complete sentence",hintPlaceholderFind:"Default: Find and catch the correct words below",findInstruction:"Click on the correct target word(s) for students to find:",arrangeInstruction:"Students will arrange {{count}} words into the correct sentence — check the word cards below:",maxQuestionsReached:"Maximum number of sentences reached.",aiSuggest:"AI Suggestions",addManualQuestion:"Add Sentence Manually",communityLibrary:"Community Library",cancel:"Cancel",saving:"Saving...",saveLesson:"Save Lesson"},messages={loadError:"Could not load lesson",maxQuestionsError:"A lesson can have at most {{max}} sentences",minOneQuestionError:"A lesson must have at least 1 sentence",aiImportWarning:"Added {{total}} sentences, but {{unmatched}} sentences did not match any target words — please click to select target words",aiImportSuccess:"Added {{total}} sentences from AI",timeLimitError:"Time limit per question must be at least 7 seconds",emptySentenceError:"Sentence {{num}} cannot be empty",minWordsError:"Sentence {{num}} must have at least 2 words",targetWordRequiredError:"Sentence {{num}} must have at least 1 target word marked",libraryFieldsRequired:"Please select school level, subject, and grade to publish to the library",audioUploadError:"Audio file upload failed. Please check your connection and click Save again.",genericError:"An error occurred"},enFlyingWords={form:form$f,messages},heroTitle$1="Educational Utilities",heroSub="Supplemental tools for teachers on the web platform to save time and enhance teaching efficiency.",fullTienIchRemaining="FullTienIch · {{days}} days remaining",upgradeFullTienIch="Upgrade FullTienIch",sectionExtensionsTitle="Utilities",sectionExtensionsBadge="Standalone purchase · 30,000 VND/year",nhanxetTitle="Ministry Database, VnEdu & SMAS Comments",nhanxetDesc="Automatically fill in student evaluation comments — save hours each term.",usageGuide="📖 User Guide",licenseActive="✅ License is active · {{days}} days left",licenseInactiveNhanxet="⚠️ Not activated · evaluate up to 5 students only",useBtn="Use",downloadBtn="Download",extendBtn="Renew / Extend",activateBtn="Activate",chuanNNTitle="Teacher Standards Evaluation on Database",chuanNNDesc="Automatically fill out the professional standards evaluation form and export the self-assessment report (.docx).",licenseInactiveChuanNN="⚠️ Not activated · fills 6/15 criteria only",downloadSelfAssessmentDocx="📄 Download self-assessment form (.docx)",pasteAiTitle="Convert AI Output to DOCX",pasteAiDesc="Paste content from ChatGPT, Gemini, Claude… and receive a formatted Word document with tables and math equations.",pasteAiFreeUntil="🎁 Free until July 1, 2026",licenseInactivePasteAi="⚠️ Not activated · limited to 3 uses",sectionAddInTitle="Microsoft Word Add-in",sectionAddInBadge="Word Add-in · 50,000 VND/year",addInWordTitle="GVDM Word Add-in",addInWordDesc="Standardize math formulas, apply Decree 30 formatting, shuffle multiple-choice tests, and more directly inside Word.",licenseInactiveAddInWord="⚠️ Not purchased · 50,000 VND/year/PC",gettingToken="⏳ Fetching...",getActivationCode="🔑 Get Activation Code",buyAndActivate="
541🛒 Purchase & Activate",mathAssistantTitle="Math Teacher Assistant",mathAssistantDesc="Assists math teachers with specialized tasks: drawing geometric figures, shape templates, customizing mathematical diagrams…",licenseInactiveMathAssistant="⚠️ Not purchased · 3-day trial · 50,000 VND/year",getActivationKey="🔑 Get Activation Key",buyAndGetKey="🛒 Purchase & Get Key",mathKeyTitle="🔑 Math Teacher Assistant Activation Key",mathKeyInstruction="Open Word → go to <1>Trợ lý cho GV Toán</1> tab → select activate → paste the key below into the input box.",mathKeyDuration="Duration: {{years}} year(s) (starting from activation date in the add-in)",mathKeyWarning='⚠️ This key is tied to your account. Please save it — clicking "Get Activation Key" will return this exact key without issuing a new one.',copied="✅ Copied",copyKey="📋 Copy key",close$3="Close",mathDownloadTitle="📥 Download Math Teacher Assistant",mathDownloadDesc="Download the .zip file → <1>extract</1> → run the installer inside, then reopen Word.",mathDownloadTrialNote="🎁 The add-in includes a <1>3-day trial</1> — install and test it first before purchasing a key.",windowsDefenderWarning='⚠️ If Windows displays a blue prompt <1>"Windows protected your PC"</1>, click <3>More info</3> → <5>Run anyway</5> (the file is safe, it simply lacks an expensive commercial signing certificate).',cancel$4="Cancel",confirmDownload="📥 Confirm Download",fullTienIchExtendTitle="FullTienIch · {{days}} days remaining",fullTienIchExtendMsg="You have {{days}} days of FullTienIch remaining. Additional payments will accumulate onto your remaining days.",ok="OK",trialFirstTitle="💡 Please try before purchasing",trialFirstDesc="Every computer environment varies (OS, Word version, installation privileges…) so the Add-in may not run on some setups. To avoid purchasing something you cannot use, please click <1>Download</1> and <3>try installing first</3> — once verified in Word, return to buy and activate.",downloadTrial="📥 Download Free Trial",stillBuyNow="Proceed to Purchase Now",addInTokenTitle="🔑 Word Add-in Activation Code",addInTokenInstruction='Copy the code below, open Word → go to "Giáo viên đổi mới" tab → click <1>KÍCH HOẠT ĐỂ SỬ DỤNG</1> → paste the code.',addInTokenExpireWarning="⚠️ This code is single-use and expires after 24 hours.",copyCode="📋 Copy code",addInDownloadTitle="📥 Word Add-in Installation Guide",addInDownloadDesc="Download the .zip file → <1>extract</1> → run <3>bam-de-cai-add-in.exe</3>.",addInReadmeNote="Please read <1>HUONGDAN.txt</1> in the extracted folder for details.",activationGuideAlt="Extension activation guide",understood="Understood",mathKeyError="Could not retrieve key. Please try again.",tokenError="Could not retrieve code. Please try again.",connectionError="Connection error. Please try again.",enEdutechExtensions={heroTitle:heroTitle$1,heroSub,fullTienIchRemaining,upgradeFullTienIch,sectionExtensionsTitle,sectionExtensionsBadge,nhanxetTitle,nhanxetDesc,usageGuide,licenseActive,licenseInactiveNhanxet,useBtn,downloadBtn,extendBtn,activateBtn,chuanNNTitle,chuanNNDesc,licenseInactiveChuanNN,downloadSelfAssessmentDocx,pasteAiTitle,pasteAiDesc,pasteAiFreeUntil,licenseInactivePasteAi,sectionAddInTitle,sectionAddInBadge,addInWordTitle,addInWordDesc,licenseInactiveAddInWord,gettingToken,getActivationCode,buyAndActivate,mathAssistantTitle,mathAssistantDesc,licenseInactiveMathAssistant,getActivationKey,buyAndGetKey,mathKeyTitle,mathKeyInstruction,mathKeyDuration,mathKeyWarning,copied,copyKey,close:close$3,mathDownloadTitle,mathDownloadDesc,mathDownloadTrialNote,windowsDefenderWarning,cancel:cancel$4,confirmDownload,fullTienIchExtendTitle,fullTienIchExtendMsg,ok,trialFirstTitle,trialFirstDesc,downloadTrial,stillBuyNow,addInTokenTitle,addInTokenInstruction,addInTokenExpireWarning,copyCode,addInDownloadTitle,addInDownloadDesc,addInReadmeNote,activationGuideAlt,understood,mathKeyError,tokenError,connectionError},pageTitle$8="🏃 ABC Exercise",myQuizzes$2="My Quizzes",loadingQuizzes$2="Loading...",errorLoading$5="Error loading quizzes",confirmDelete$2="Are you sure you want to delete this quiz?",deleteSuccess$5="Quiz deleted",emptyQuizzes$2="No quizzes yet",createFirst$2="Create your first quiz",demo$6={title:"Smart Pose Quiz - Demo",badge:"Demo",hint:"Try this demo to experience the game before creating your own"},questionsCount$2="{{count}} questions",play$2="Present",edit$2="Edit",assign$7="Assign",upgradeToUnlock$2="Upgrade to unlock this exercise",lockedTip$5="Upgrade to unlock this exercise",packageExpired$5="Subscription expired! Unpinned quizzes are locked.",extendSubscription$5="Extend 30k/year",pinStatus$2="Pinned {{current}}/{{limit}} quizzes",createNew$8="Create Normal",createCameraNew$2="Create Camera",cameraBadge$2
541="New",createFormTitle$2="Create New ABC Exercise",editFormTitle$2="Edit ABC Exercise",createCameraFormTitle$2="Create ABC Exercise (Camera Mode)",editCameraFormTitle$2="Edit ABC Exercise (Camera Mode)",titleLabel$5="Title",titlePlaceholder$5="Enter quiz title...",slideModeLabel$2="Slide advance mode:",slideModeManual$2="Manual (teacher clicks Next)",slideModeAuto$2="Auto (timed)",autoSecondsLabel$2="Seconds per slide:",addQuestion$2="Add Question",questionLabel$2="Question {{index}}",addAnswer$2="Add Answer (max 3)",saving$5="Saving...",savePoseQuiz$2="Save Quiz",errorTitleRequired$2="Please enter a title",errorNoQuestions$2="Please add at least 1 question",errorEmptyQuestion$2="Question {{index}} cannot be empty",errorAnswerCount$2="Question {{index}} must have 2-3 answers",errorNoCorrectAnswer$2="Question {{index}} has no correct answer marked",errorAutoSeconds$2="Auto timer must be between 5 and 60 seconds",errorMaxAnswers$2="Maximum 3 answers per question",toastCreateSuccess$2="✅ Quiz created successfully",toastUpdateSuccess$2="✅ Quiz updated",toastSaveError$2="Error saving: ",toastLimitReached$2="Quiz limit reached. Please upgrade to create more.",usageCount$2="Created {{current}}/{{limit}} quizzes (Trial)",back$2="Back",stopAudio$2="Stop audio",playAudio$2="Play audio",resume$2="Resume",pause$2="Pause",enableBGM$2="Enable background music",disableBGM$2="Disable background music",exitFullscreen$2="Exit fullscreen",enterFullscreen$2="Fullscreen",finishedTitle$2="Finished!",backToHome$2="Back to main page",restart$2="Restart",questionImageAlt$2="Question image",poseAlt$2="Pose {{char}}",seconds$2="seconds",characterSize$2="🧍 Character size",sizeS$2="Small",sizeM$2="Standard",sizeL$2="Large",sizeXL$2="Extra Large",imageSet$2="🖼️ Image set",setBody$2="🏃 Body",setHand$2="✋ Hand",bgmLabel$2="🎵 Background music",bgmTrack$2="Track {{index}}",questionsReady$2="✅ {{count}} questions ready",questionsNotReady$2="❓ Questions ({{count}})",confirmDeleteAll$2="Delete all questions?",deleteAll$2="🗑️ Delete all",chooseFromBank$2="📚 Select from Bank or AI",manualInput$2="✏️ Manual input",questionsList$2="Questions list ({{count}})",imageOnly$2="(Image only)",answersCount$2="{{count}} answers",hasImage$2=" · 🖼️ has image",hasAudio$2=" · 🔊 has audio",editQuestionTooltip$2="Edit",removeQuestionTooltip$2="Delete",noQuestionsDesc$2="No questions yet",addQuestionsHint$2="Select from Bank or enter manually",pickerModalTitle$2="Select questions for ABC Exercise",cameraModeLabel$2="📷 Camera Mode",cameraModeDesc$2="Students perform body poses to select answers — camera detects automatically",cameraModeNew$2="New",cameraReady$2="Camera ready",cameraStarting$2="Starting camera...",cameraHide$2="Hide camera",cameraShow$2="Show camera",cameraDenied$2="Camera denied",cameraError$2="Cannot open camera",cameraDeniedDesc$2="Please grant camera permission in browser settings and reload.",cameraErrorDesc$2="Check camera connection and try reloading the page.",cooldownHint$2="Return to standing pose to continue...",errorNoCompatibleQuestions$2="No compatible questions found.",toastAddedFromLesson$2="Added {{count}} questions. Skipped {{skipped}} incompatible questions.",toastAddedFromLessonSuccess$2="Added {{count}} questions from existing lesson.",errorLibraryMetadataRequired$2="Please select Level, Subject, and Grade to publish to Community Library.",cameraModeTitle$2="Camera Mode",cameraModeInstruction$2="Students pose with their bodies to select answers — camera detects automatically",questionFontSize$2="Question font size",answerFontSize$2="Answer font size",questionImageSize$2="Question image size",answerImageSize$2="Answer image size",sizeXS$2="Small",sizeStandard$2="Standard",sizeLG$2="Large",sizeXL_text$2="Extra Large",sizeXXL$2="Maximum",customBgmPro$2="Or upload custom track (FullGame):",shuffleMode$2="🔀 Shuffle questions and answers",shuffleModeDesc$2="When enabled, questions and answers are randomly shuffled each time you play",aiVoice$2="🔊 AI Voice",aiVoiceReady$2="✅ Ready",aiVoiceSetup$2="⚠️ Needs setup",aiVoiceDesc$2="Automatically read questions using AI if no audio is uploaded",btnChooseFromBank$2="🗃️ Choose from Bank or AI",btnFromExisting$2="📂 From existing lesson",lessonPickerTitle$2="Add questions from existing lesson",report$3="Report",sessionResults$2="Session Results",questionNumber$2="Question {{number}}",selectedAnswer$2="Selected",close$2="Close",cameraModeIntro$2="Camera Mode — Posing",cameraStep1$2="Body pose detection",cameraStep1Desc$2="Stand ~1m away from camera, ensure good lighting and body visibility.",cameraStep2$2="One pose per answer",cameraStep2Desc$2="See the pose name on each answer card and perform the correct action.",cameraStep3$2="Hold for 1.5s to select",cameraStep3Desc$2="A progress bar will appear when detected. Hold until full.",cameraStartHint$2="{{count}} questions · Camera will start when you click Start",startGame$2="Start",defaultAnswer$2="Answer {{number}}",btnManual$2="✏️ Manual input",manualLabel$2="👆 Manual",secondsShort$2="s",shuffleQuestionsMode$2="🔀 Shuffle question order",shuffleQuestionsModeDesc$2="Questions appear in a different order each time you play",shuffleAnswersMode$2="🔀 Shuffle answer order",shuffleAnswersModeDesc$2="Answer positions within each question change each time you play",enPoseQuiz={pageTitle:pageTitle$8,myQuizzes:myQuizzes$2,loadingQuizzes:loadingQuizzes$2,errorLoading:errorLoading$5,confirmDelete:confirmDelete$2,deleteSuccess:deleteSuccess$5,emptyQuizzes:emptyQuizzes$2,createFirst:createFirst$2,demo:demo$6,questionsCount:questionsCount$2,play:play$2,edit:edit$2,assign:assign$7,delete:"Delete",upgradeToUnlock:upgradeToUnlock$2,lockedTip:lockedTip$5,packageExpired:packageExpired$5,extendSubscription:extendSubscription$5,pinStatus:pinStatus$2,createNew:createNew$8,createCameraNew:createCameraNew$2,cameraBadge:cameraBadge$2,createFormTitle:createFormTitle$2,editFormTitle:editFormTitle$2,createCameraFormTitle:createCameraFormTitle$2,editCameraFormTitle:editCameraFormTitle$2,titleLabel:titleLabel$5,titlePlaceholder:titlePlaceholder$5,slideModeLabel:slideModeLabel$2,slideModeManual:slideModeManual$2,slideModeAuto:slideModeAuto$2,autoSecondsLabel:autoSecondsLabel$2,addQuestion:addQuestion$2,questionLabel:questionLabel$2,addAnswer:addAnswer$2,saving:saving$5,savePoseQuiz:savePoseQuiz$2,errorTitleRequired:errorTitleRequired$2,errorNoQuestions:errorNoQuestions$2,errorEmptyQuestion:errorEmptyQuestion$2,errorAnswerCount:errorAnswerCount$2,errorNoCorrectAnswer:errorNoCorrectAnswer$2,errorAutoSeconds:errorAutoSeconds$2,errorMaxAnswers:errorMaxAnswers$2,toastCreateSuccess:toastCreateSuccess$2,toastUpdateSuccess:toastUpdateSuccess$2,toastSaveError:toastSaveError$2,toastLimitReached:toastLimitReached$2,usageCount:us
541ageCount$2,back:back$2,stopAudio:stopAudio$2,playAudio:playAudio$2,resume:resume$2,pause:pause$2,enableBGM:enableBGM$2,disableBGM:disableBGM$2,exitFullscreen:exitFullscreen$2,enterFullscreen:enterFullscreen$2,finishedTitle:finishedTitle$2,backToHome:backToHome$2,restart:restart$2,questionImageAlt:questionImageAlt$2,poseAlt:poseAlt$2,seconds:seconds$2,characterSize:characterSize$2,sizeS:sizeS$2,sizeM:sizeM$2,sizeL:sizeL$2,sizeXL:sizeXL$2,imageSet:imageSet$2,setBody:setBody$2,setHand:setHand$2,bgmLabel:bgmLabel$2,bgmTrack:bgmTrack$2,questionsReady:questionsReady$2,questionsNotReady:questionsNotReady$2,confirmDeleteAll:confirmDeleteAll$2,deleteAll:deleteAll$2,chooseFromBank:chooseFromBank$2,manualInput:manualInput$2,questionsList:questionsList$2,imageOnly:imageOnly$2,answersCount:answersCount$2,hasImage:hasImage$2,hasAudio:hasAudio$2,editQuestionTooltip:editQuestionTooltip$2,removeQuestionTooltip:removeQuestionTooltip$2,noQuestionsDesc:noQuestionsDesc$2,addQuestionsHint:addQuestionsHint$2,pickerModalTitle:pickerModalTitle$2,cameraModeLabel:cameraModeLabel$2,cameraModeDesc:cameraModeDesc$2,cameraModeNew:cameraModeNew$2,cameraReady:cameraReady$2,cameraStarting:cameraStarting$2,cameraHide:cameraHide$2,cameraShow:cameraShow$2,cameraDenied:cameraDenied$2,cameraError:cameraError$2,cameraDeniedDesc:cameraDeniedDesc$2,cameraErrorDesc:cameraErrorDesc$2,cooldownHint:cooldownHint$2,errorNoCompatibleQuestions:errorNoCompatibleQuestions$2,toastAddedFromLesson:toastAddedFromLesson$2,toastAddedFromLessonSuccess:toastAddedFromLessonSuccess$2,errorLibraryMetadataRequired:errorLibraryMetadataRequired$2,cameraModeTitle:cameraModeTitle$2,cameraModeInstruction:cameraModeInstruction$2,questionFontSize:questionFontSize$2,answerFontSize:answerFontSize$2,questionImageSize:questionImageSize$2,answerImageSize:answerImageSize$2,sizeXS:sizeXS$2,sizeStandard:sizeStandard$2,sizeLG:sizeLG$2,sizeXL_text:sizeXL_text$2,sizeXXL:sizeXXL$2,customBgmPro:customBgmPro$2,shuffleMode:shuffleMode$2,shuffleModeDesc:shuffleModeDesc$2,aiVoice:aiVoice$2,aiVoiceReady:aiVoiceReady$2,aiVoiceSetup:aiVoiceSetup$2,aiVoiceDesc:aiVoiceDesc$2,btnChooseFromBank:btnChooseFromBank$2,btnFromExisting:btnFromExisting$2,lessonPickerTitle:lessonPickerTitle$2,report:report$3,sessionResults:sessionResults$2,questionNumber:questionNumber$2,selectedAnswer:selectedAnswer$2,close:close$2,cameraModeIntro:cameraModeIntro$2,cameraStep1:cameraStep1$2,cameraStep1Desc:cameraStep1Desc$2,cameraStep2:cameraStep2$2,cameraStep2Desc:cameraStep2Desc$2,cameraStep3:cameraStep3$2,cameraStep3Desc:cameraStep3Desc$2,cameraStartHint:cameraStartHint$2,startGame:startGame$2,defaultAnswer:defaultAnswer$2,btnManual:btnManual$2,manualLabel:manualLabel$2,secondsShort:secondsShort$2,shuffleQuestionsMode:shuffleQuestionsMode$2,shuffleQuestionsModeDesc:shuffleQuestionsModeDesc$2,shuffleAnswersMode:shuffleAnswersMode$2,shuffleAnswersModeDesc:shuffleAnswersModeDesc$2},pageTitle$7="🏃 Thể dục ABC",myQuizzes$1="Bài của tôi",loadingQuizzes$1="Đang tải...",errorLoading$4="Lỗi khi tải danh sách bài",confirmDelete$1="Bạn có chắc muốn xóa bài này không?",deleteSuccess$4="Đã xóa bài",emptyQuizzes$1="Chưa có bài nào",createFirst$1="Tạo bài đầu tiên",demo$5={title:"Tạo Dáng Thông Minh - Bản Chạy Thử",badge:"Bản chạy thử",hint:"Chơi thử để trải nghiệm tính năng trước khi tạo bài của bạn"},questionsCount$1="{{count}} câu hỏi",play$1="Chiếu",edit$1="Chỉnh sửa",assign$6="Giao bài",upgradeToUnlock$1="Gia hạn để mở bài này",packageExpired$4="Gói đã hết hạn! Các bài chưa ghim bị khóa.",extendSubscription$4="Gia hạn 30k/năm",pinStatus$1="Đã ghim {{current}}/{{limit}} bài",createNew$7="Tạo bài thường",createCameraNew$1="Tạo bài Camera",cameraBadge$1="Mới",createFormTitle$1="Tạo bài Thể dục ABC mới",editFormTitle$1="Chỉnh sửa bài Thể dục ABC",createCameraFormTitle$1="Tạo bài Thể dục ABC (Chế độ Camera)",editCameraFormTitle$1="Chỉnh sửa bài Thể dục ABC (Chế độ Camera)",titleLabel$4="Tiêu đề",titlePlaceholder$4="Nhập tiêu đề bài...",slideModeLabel$1="Chế độ chuyển slide:",slideModeManual$1="Thủ công (GV nhấn Tiếp theo)",slideModeAuto$1="Tự động (tính giờ)",autoSecondsLabel$1="Thời gian mỗi câu:",addQuestion$1="Thêm câu hỏi",questionLabel$1="Câu {{index}}",addAnswer$1="Thêm đáp án (tối đa 3)",saving$4="Đang lưu...",savePoseQuiz$1="Lưu bài",errorTitleRequired$1="Vui lòng nhập tiêu đề",errorNoQuestions$1="Vui lòng thêm ít nhất 1 câu hỏi",errorEmptyQuestion$1="Câu hỏi {{index}}
541 không được để trống",errorAnswerCount$1="Câu hỏi {{index}} phải có 2-3 đáp án",errorNoCorrectAnswer$1="Câu hỏi {{index}} chưa chọn đáp án đúng",errorAutoSeconds$1="Thời gian tá»± động phải từ 5 đến 60 giây",errorMaxAnswers$1="Mỗi câu tối đa 3 đáp án",toastCreateSuccess$1="✅ Đã tạo bài thành công",toastUpdateSuccess$1="✅ Đã cập nhật bài",toastSaveError$1="Lỗi khi lưu: ",toastLimitReached$1="Đã đạt giới hạn số bài. Vui lòng gia hạn để tạo thêm.",usageCount$1="Đã tạo {{current}}/{{limit}} bài (gói Trial)",back$1="Quay lại",stopAudio$1="Dừng âm thanh",playAudio$1="Phát âm thanh",resume$1="Tiếp tục",pause$1="Tạm dừng",enableBGM$1="Bật nhạc nền",disableBGM$1="Tắt nhạc nền",exitFullscreen$1="Thoát toàn màn hình",enterFullscreen$1="Toàn màn hình",finishedTitle$1="Đã hoàn thành!",backToHome$1="Về trang chính",restart$1="Chiếu lại",questionImageAlt$1="Hình câu hỏi",poseAlt$1="Tư thế {{char}}",seconds$1="giây",characterSize$1="🧍 Cỡ nhân vật",sizeS$1="Bé",sizeM$1="Chuẩn",sizeL$1="Lớn",sizeXL$1="Rất lớn",imageSet$1="🖼️ Bộ ảnh",setBody$1="🏃 CÆ¡ thể",setHand$1="✋ Bàn tay",bgmLabel$1="🎵 Nhạc nền",bgmTrack$1="Bài {{index}}",questionsReady$1="✅ Đã đủ {{count}} câu hỏi",questionsNotReady$1="❓ Câu hỏi ({{count}})",confirmDeleteAll$1="Xóa tất cả câu hỏi?",deleteAll$1="🗑️ Xóa tất cả",chooseFromBank$1="📚 Chọn từ Kho hoặc AI",manualInput$1="✏️ Nhập thá»§ công",questionsList$1="Danh sách câu hỏi ({{count}})",imageOnly$1="(Chỉ ảnh)",answersCount$1="{{count}} đáp án",hasImage$1=" · 🖼️ có ảnh",hasAudio$1=" · 🔊 có âm thanh",editQuestionTooltip$1="Chỉnh sá»­a",removeQuestionTooltip$1="Xóa",noQuestionsDesc$1="Chưa có câu hỏi nào",addQuestionsHint$1="Chọn từ Kho câu hỏi hoặc nhập thá»§ công",pickerModalTitle$1="Chọn câu hỏi cho Thể dục ABC",cameraModeLabel$1="📷 Chế độ camera",cameraModeDesc$1="Học sinh tạo dáng bằng cÆ¡ thể để chọn đáp án — camera tá»± động nhận diện",cameraModeNew$1="Mới",cameraReady$1="Camera sẵn sàng",cameraStarting$1="Đang khởi động camera...",cameraHide$1="Ẩn camera",cameraShow$1="Hiện camera",cameraDenied$1="Camera bị từ chối",cameraError$1="Không thể mở camera",cameraDeniedDesc$1="Hãy cấp quyền camera trong cài đặt trình duyệt rồi tải lại trang.",cameraErrorDesc$1="Kiểm tra lại kết nối camera và thá»­ tải lại trang.",cooldownHint$1="Về tư thế đứng thẳng để tiếp tục...",errorNoCompatibleQuestions$1="Không có câu nào phù hợp.",toastAddedFromLesson$1="Đã thêm {{count}} câu. Bỏ qua {{skipped}} câu không tương thích.",toastAddedFromLessonSuccess$1="Đã thêm {{count}} câu từ bài có sẵn.",errorLibraryMetadataRequired$1="Vui lòng chọn Cấp học, Môn học và Khối lớp để đưa lên Thư viện cộng đồng.",cameraModeTitle$1="Chế độ camera",cameraModeInstruction$1="Học sinh tạo dáng bằng cÆ¡ thể để chọn đáp án — camera tá»± động nhận diện",questionFontSize$1="Cỡ chữ câu hỏi",answerFontSize$1="Cỡ chữ đáp án",questionImageSize$1="Cỡ ảnh câu hỏi",answerImageSize$1="Cỡ ảnh đáp án",sizeXS$1="Bé",sizeStandard$1="Chuẩn",sizeLG$1="Lớn",sizeXL_text$1="Rất lớn",sizeXXL$1="Cá»±c đại",customBgmPro$1="Hoặc tải nhạc riêng (FullGame):",shuffleMode$1="🔀 Đảo lộn thứ tá»± câu và đáp án",shuffleModeDesc$1="Khi bật, thứ tá»± câu hỏi và đáp án sẽ được xáo ngẫu nhiên mỗi lần chÆ¡i",aiVoice$1="🔊 Giọng đọc AI",aiVoiceReady$1="✅ Sẵn sàng",aiVoiceSetup$1="⚠️ Cần cài đặt",aiVoiceDesc$1="Tá»± động đọc câu hỏi bằng AI nếu câu hỏi không có audio upload",btnChooseFromBank$1="🗃️ Chọn từ Kho hoặc AI",btnFromExisting$1="📂 Từ bài có sẵn",lessonPickerTitle$1="Thêm câu từ bài có sẵn",report$2="Báo cáo",sessionResults$1="Kết quả làm bài",questionNumber$1="Câu {{number}}",selectedAnswer$1="Đã chọn",close$1="Đóng",cameraModeIntro$1="Chế độ camera — Tạo dáng",cameraStep1$1="Camera nhận diện tư thế cÆ¡ thể",cameraStep1Desc$1="Đứng cách camera ~1m, đảm bảo ánh sáng tốt và thấy được từ đầu đến hông.",cameraStep2$1="Mỗi đáp án gắn với 1 tư thế",cameraStep2Desc$1="Xem tên tư thế trên mỗi ô đáp án rồi thá»±c hiện đúng động tác.",cameraStep3$1="Giữ dáng 1.5 giây để chọn",cameraStep3Desc$1="Thanh tiến trình sẽ hiện khi camera nhận ra. Giữ cho đến khi đầy.",cameraStartHint$1="{{count}} câu hỏi · Camera sẽ bật ngay khi nhấn Bắt đầu",startGame$1="Bắt đầu",defaultAnswer$1="Đáp án {{number}}",lockedTip$4="Gia hạn để mở bài này",btnManual$1="✏️ Nhập thá»§ công",manualLabel$1="ðŸ‘
541† Thá»§ công",secondsShort$1="s",shuffleQuestionsMode$1="🔀 Đảo lộn thứ tá»± câu hỏi",shuffleQuestionsModeDesc$1="Mỗi lần chÆ¡i, các câu hiện theo thứ tá»± khác nhau",shuffleAnswersMode$1="🔀 Đảo lộn thứ tá»± đáp án",shuffleAnswersModeDesc$1="Mỗi lần chÆ¡i, vị trí các đáp án trong 1 câu đổi chỗ",viPoseQuiz={pageTitle:pageTitle$7,myQuizzes:myQuizzes$1,loadingQuizzes:loadingQuizzes$1,errorLoading:errorLoading$4,confirmDelete:confirmDelete$1,deleteSuccess:deleteSuccess$4,emptyQuizzes:emptyQuizzes$1,createFirst:createFirst$1,demo:demo$5,questionsCount:questionsCount$1,play:play$1,edit:edit$1,assign:assign$6,delete:"Xóa",upgradeToUnlock:upgradeToUnlock$1,packageExpired:packageExpired$4,extendSubscription:extendSubscription$4,pinStatus:pinStatus$1,createNew:createNew$7,createCameraNew:createCameraNew$1,cameraBadge:cameraBadge$1,createFormTitle:createFormTitle$1,editFormTitle:editFormTitle$1,createCameraFormTitle:createCameraFormTitle$1,editCameraFormTitle:editCameraFormTitle$1,titleLabel:titleLabel$4,titlePlaceholder:titlePlaceholder$4,slideModeLabel:slideModeLabel$1,slideModeManual:slideModeManual$1,slideModeAuto:slideModeAuto$1,autoSecondsLabel:autoSecondsLabel$1,addQuestion:addQuestion$1,questionLabel:questionLabel$1,addAnswer:addAnswer$1,saving:saving$4,savePoseQuiz:savePoseQuiz$1,errorTitleRequired:errorTitleRequired$1,errorNoQuestions:errorNoQuestions$1,errorEmptyQuestion:errorEmptyQuestion$1,errorAnswerCount:errorAnswerCount$1,errorNoCorrectAnswer:errorNoCorrectAnswer$1,errorAutoSeconds:errorAutoSeconds$1,errorMaxAnswers:errorMaxAnswers$1,toastCreateSuccess:toastCreateSuccess$1,toastUpdateSuccess:toastUpdateSuccess$1,toastSaveError:toastSaveError$1,toastLimitReached:toastLimitReached$1,usageCount:usageCount$1,back:back$1,stopAudio:stopAudio$1,playAudio:playAudio$1,resume:resume$1,pause:pause$1,enableBGM:enableBGM$1,disableBGM:disableBGM$1,exitFullscreen:exitFullscreen$1,enterFullscreen:enterFullscreen$1,finishedTitle:finishedTitle$1,backToHome:backToHome$1,restart:restart$1,questionImageAlt:questionImageAlt$1,poseAlt:poseAlt$1,seconds:seconds$1,characterSize:characterSize$1,sizeS:sizeS$1,sizeM:sizeM$1,sizeL:sizeL$1,sizeXL:sizeXL$1,imageSet:imageSet$1,setBody:setBody$1,setHand:setHand$1,bgmLabel:bgmLabel$1,bgmTrack:bgmTrack$1,questionsReady:questionsReady$1,questionsNotReady:questionsNotReady$1,confirmDeleteAll:confirmDeleteAll$1,deleteAll:deleteAll$1,chooseFromBank:chooseFromBank$1,manualInput:manualInput$1,questionsList:questionsList$1,imageOnly:imageOnly$1,answersCount:answersCount$1,hasImage:hasImage$1,hasAudio:hasAudio$1,editQuestionTooltip:editQuestionTooltip$1,removeQuestionTooltip:removeQuestionTooltip$1,noQuestionsDesc:noQuestionsDesc$1,addQuestionsHint:addQuestionsHint$1,pickerModalTitle:pickerModalTitle$1,cameraModeLabel:cameraModeLabel$1,cameraModeDesc:cameraModeDesc$1,cameraModeNew:cameraModeNew$1,cameraReady:cameraReady$1,cameraStarting:cameraStarting$1,cameraHide:cameraHide$1,cameraShow:cameraShow$1,cameraDenied:cameraDenied$1,cameraError:cameraError$1,cameraDeniedDesc:cameraDeniedDesc$1,cameraErrorDesc:cameraErrorDesc$1,cooldownHint:cooldownHint$1,errorNoCompatibleQuestions:errorNoCompatibleQuestions$1,toastAddedFromLesson:toastAddedFromLesson$1,toastAddedFromLessonSuccess:toastAddedFromLessonSuccess$1,errorLibraryMetadataRequired:errorLibraryMetadataRequired$1,cameraModeTitle:cameraModeTitle$1,cameraModeInstruction:cameraModeInstruction$1,questionFontSize:questionFontSize$1,answerFontSize:answerFontSize$1,questionImageSize:questionImageSize$1,answerImageSize:answerImageSize$1,sizeXS:sizeXS$1,sizeStandard:sizeStandard$1,sizeLG:sizeLG$1,sizeXL_text:sizeXL_text$1,sizeXXL:sizeXXL$1,customBgmPro:customBgmPro$1,shuffleMode:shuffleMode$1,shuffleModeDesc:shuffleModeDesc$1,aiVoice:aiVoice$1,aiVoiceReady:aiVoiceReady$1,aiVoiceSetup:aiVoiceSetup$1,aiVoiceDesc:aiVoiceDesc$1,btnChooseFromBank:btnChooseFromBank$1,btnFromExisting:btnFromExisting$1,lessonPickerTitle:lessonPickerTitle$1,report:report$2,sessionResults:sessionResults$1,questionNumber:questionNumber$1,selectedAnswer:selectedAnswer$1,close:close$1,cameraModeIntro:cameraModeIntro$1,cameraStep1:cameraStep1$1,cameraStep1Desc:cameraStep1Desc$1,cameraStep2:cameraStep2$1,cameraStep2Desc:cameraStep2Desc$1,cameraStep3:cameraStep3$1,cameraStep3Desc:cameraStep3Desc$1,cameraStartHint:cameraStartHint$1,startGame:startGame$1,defaultAnswer:defaultAnswer$1,lockedTip:lockedTip$4,btnManual
541:btnManual$1,manualLabel:manualLabel$1,secondsShort:secondsShort$1,shuffleQuestionsMode:shuffleQuestionsMode$1,shuffleQuestionsModeDesc:shuffleQuestionsModeDesc$1,shuffleAnswersMode:shuffleAnswersMode$1,shuffleAnswersModeDesc:shuffleAnswersModeDesc$1},title$6="🗃️ Question Bank",stats$2={count:"{{count}} / 1000 questions",unit:"questions"},actions$4={exportAll:"Export all",importExcel:"Import Excel",searchPlaceholder:"Search questions...",importFromFile:"Import from file",prevPage:"← Previous",nextPage:"Next →",addQuestion:"Add Question",duplicateLastQuestion:"Duplicate last question",save:"Save {{count}} questions",saveChanges:"Save changes",cancel:"Cancel",useSelected:"Use {{count}} selected",deleteAudio:"Delete audio"},alerts$a={quotaReached:"Bank reached 1000 questions — oldest questions will be auto-deleted when adding new ones.",quotaWarning:"You have used {{count}}/1000 questions. When full, new ones will replace the oldest.",pastingImage:"Uploading image from clipboard...",saveGuidance:"💾 You should enter less than 10 questions then Save, then add more — to prevent data loss.",noQuestionsPlaceholder:'No questions yet. Click "Add Question" to start.',answerLimit:{multiple:"Accepts questions with 2-{{max}} answers with exactly 1 correct answer.",single:"Only accepts questions with 2 answers with exactly 1 correct answer."},multiTypeHint:"Supports 4 types: Multiple choice, True/False, Multiple answers, Fill in the blank."},empty$3={noResults:"No questions found",noQuestions:"No questions yet",tryDifferentKeyword:"Try a different keyword",autoSaveInfo:"Questions will be auto-saved when you create them in features (Video, Wheel, Hand Slash...)",notEntered:"(Not entered)",drafting:"Drafting..."},error$4={loadFailed:"Could not load questions. Please try again.",loadExportFailed:"Could not load questions for export. Please try again.",deleteFailed:"Error occurred while deleting question",loadMoreFailed:"Error loading more questions",syncFailed:"Sync error question {{index}}: {{message}}",importFailed:"Error importing questions",pasteImageFailed:"Error uploading image from clipboard. Please try again.",validation:{atLeastOne:"Must have at least 1 question",maxReached:"Maximum {{count}} questions allowed (currently {{current}})",maxQuestions:"Maximum {{count}} questions needed",emptyQuestion:"Question {{index}} cannot be empty",atLeastTwoAnswers:"Must have at least 2 answers",maxAnswers:"Question {{index}} can have at most {{count}} answers",maxAnswersPerQuestion:"Maximum {{count}} answers per question",mustHaveCorrect:"Question {{index}} must have a correct answer",emptyAnswer:"Question {{index}} has an empty answer",emptyStatement:"Question {{index}} has an empty statement",mustHaveCorrectAnswer:"Question {{index}} must have a correct answer",mustHaveMultipleCorrect:"Question {{index}} must have at least 1 correct answer",maxQuestionsReached:"You can select at most {{count}} questions"},audioUploadFailed:"Audio upload failed. Check your connection and press Save again.",saveChanges:"Could not save changes. Please try again.",exportFailed:"Export failed. Please try again."},confirm$2={deleteSingle:"Are you sure you want to delete this question?",deleteFromBank:"Are you sure you want to delete this from the bank?",deleteAudio:"Delete audio"},editor$2={title:"Select from Question Bank",maxSelection:"({{count}} max)",loadedCount:"Loaded: {{count}} questions{{hasMore}}",hasMoreSuffix:" (more...)",searchInternal:"Search questions (loaded data only)...",filterBySource:"Filter by source",filterSearch:"Search",filterClear:"Clear filter",sourceAll:"Select question source",sourceManual:"Manual",sourceImport:"Imported",filterResultCount:"{{count}} questions",searchFiltered:"Search questions...",selectAll:"Select all {{count}}",deselectAll:"Deselect all",selectedCount:"Selected: {{count}}",tryLoadMore:'Try clicking "Load more" to search in unloaded part',loadMore:"Load {{count}} more",loading:"Loading...",manualEntry:"✏️ Manual Entry",editQuestion:"✏️ Edit Question",questionNum:"Question {{index}}",questionContent:"Question content:",answersTitle:"Answers (check the correct one):",addAnswer:"Add Answer",questionType:"Type",typeAbcd:"🔤 Multiple Choice",typeTrueFalse:"✅ True/False",typeMultiple:"☑️ Multi-Answer",typeShortAnswer:"✏️ Fill In",typeChangeWarning:"Changing type will clear current answers. Continue?",statementsTitle:"Statements (select True/False):",statementPlaceholder:"Statement {{index}}",trueBtn:"T",falseBtn:"F",answersMultipleTitle:"Answers (check all correct):",correctAnswerLabel:"Correct answer:",altAnswersLabel:"Alternative answers:",markAsAnswer:"Mark as answer",resetAnswer:"Reset answer",shortAnswerGuide:"Select text in question → click 'Mark as answer'",addAltAnswer:"Add",altAnswerPlaceholder:"Alternative answer...",fontSize:{label:"Font size",general:"Use global size",small:"Small",medium:"Standard",large:"Large",xl:"Extra Large",huge:"Huge"},imageSize:{label:"Image size",small:"Small",medium:"Standard",large:"Large",xl:"Extra Large",sizeSmall:"Small",sizeMedium:"Standard",sizeLarge:"Large",sizeXl:"Extra Large"},syncToBank:{tooltip:"Sync to Bank (usage intensive — use only when needed)",confirm:"Tap again to confirm sync",success:"✅ Synced!"}
541,simpleKeyboard:"⌨ Standard Keyboard",mathLive:"⌨ Math Editor",closeTooltip:"Close",deleteQuestionTooltip:"Delete question",duplicateQuestionTooltip:"Duplicate question",deleteTooltip:"Delete",simpleKeyboardTooltip:"Use standard keyboard",mathLiveTooltip:"Use math formula editor",pastedImageTooltip:"Uploading image from clipboard...",restrictedTo:"Only {{type}} questions are accepted.",maxAnswersSuffix:"Up to {{count}} answers."},pagination$1={page:"Page {{page}}"},lessonPicker$2={title:"Pick a lesson to import questions",cancel:"Cancel",loadMore:"Load more",emptyFeature:"No lessons yet in {{feature}}",questionCount:"{{count}} questions",conversionNote:"Questions will be converted to the target format.",noQuestions:"This lesson has no questions.",errorList:"Could not load lessons. Please try again.",errorLesson:"Could not load questions. Please try again.",featureLabels:{wheel_quiz:"Spin Wheel",hand_slash:"Fruit Slash Quiz",head_tilt:"Head Tilt Quiz",paced_quiz:"Paced Quiz",tug_of_war:"Tug of War",pose_quiz:"Pose Quiz",turn_based:"Turn-Based Game",versus_game:"Versus Game",star_bag:"Lucky Star Bag",minesweeper:"Minesweeper",crossword:"Crossword",interactive_image:"Interactive Image",journey:"Journey",interactive_video:"Interactive Video"}},uploader$2={image:{label:"Image",uploadBtn:"Upload from computer",cropUploadBtn:"Crop then upload",cropUploadHint:"Pick an image, crop it first, then upload",errorType:"Please select an image file",errorGeneric:"Error uploading image. Please try again.",uploading:"Uploading...",tooltipUpload:"Upload image from computer",cropTitle:"Crop image",cropHint:"Drag to select the area to keep. Cropping makes the image sharper and lighter.",cropConfirm:"Crop & upload",cropCancel:"Cancel",rotateLeft:"Rotate left 90°",rotateRight:"Rotate right 90°",cropTooltip:"Crop / rotate image",errorCropLoad:"Could not load the image for cropping. Please try again."},audio:{uploadBtn:"Upload Audio",recordBtn:"Record",stopBtn:"Stop",aiVoiceBtn:"AI Voice",uploading:"Uploading...",errorMic:"Could not access microphone. Please grant permission.",proOnly:"🔒 FullGame PLAN only",proDesc:"Get FullGame (200k/year) to upload audio for questions.",upgradeBtn:"Get FullGame",tooltipUpload:"Upload audio (MP3/WAV/OGG, max 5MB)",tooltipUploadPro:"Upload audio — FullGame PLAN only",tooltipRecord:"Record directly",tooltipRecordPro:"Record — FullGame PLAN only",tooltipAi:"Create AI voice",tooltipStop:"Stop recording",tooltipPlay:"Audio file — click to listen",tooltipDelete:"Delete audio",confirmTitle:"🎤 Confirm recording",confirmDesc:"Listen to the recording before using:",btnRetry:"Record again",btnUse:"Use recording",aiModal:{title:"🎙️ Create AI Voice",desc:"You will be redirected to the AI Voice tool. Create your .mp3 file then come back and upload it.",instruction:"After you have the .mp3 file, upload it here:",btnOpen:"I understand, open tool",btnClose:"Close"},pendingHint:"⏳ File not uploaded yet — press Save to finish."}},bgm$2={uploadBtn:"Upload music",uploadTooltip:"Upload custom background music",deleteTooltip:"Delete custom music",customLabel:"Custom music",proOnly:"FullGame PLAN only",proDesc:"Get FullGame to upload your own background music.",upgradeBtn:"Get FullGame",errorType:"Only .mp3, .wav, .ogg files are accepted",errorSize:"File too large ({{size}} MB). Maximum 5 MB.",errorLogin:"You must be logged in to upload music.",errorGeneric:"Upload failed. Please try again.",disclaimer:{title:"⚖️ Copyright Notice",intro:"By uploading music, you confirm that:",point1:"You own or have the right to use this track.",point2:"The music does not infringe any third-party copyright.",point3:"You bear full legal responsibility for any related issues.",cancel:"Cancel",confirm:"I agree, proceed with upload"}},enQuestionBank={title:title$6,stats:stats$2,actions:actions$4,alerts:alerts$a,empty:empty$3,error:error$4,confirm:confirm$2,editor:editor$2,pagination:pagination$1,import:{tabs:{paste:"Paste from AI",upload:"Upload File",export:"Export File"},paste:{title:"📋 How to Paste JSON from AI",instruction:"Go to: <0>AI Question Generator</0><br />Create questions there, then click <1>Copy to giaoviendoimoi</1> and paste below.",placeholder:"Paste JSON content from AI Studio...",label:"Paste JSON here:",shuffle:"Auto-shuffle answer positions",shuffleDesc:"Randomly shuffle A/B/C/D order — correct answer content remains the same",btnImport:"Import JSON",btnImporting:"Importing...",btnConfirm:"Save to Bank ({{count}} questions)",previewTitle:"Preview ({{count}} questions)",previewMeta:"{{count}} answers",previewMore:"... and {{count}} other questions",errorArray:"Data must be an array of questions",errorMissing:"Question {{index}}: Missing required field (question_content or options)",errorMinAnswers:"Question {{index}}: Must have at least 2 answers",errorNoCorrect:"Question {{index}}: No correct answer found",errorEmpty:"Please paste JSON content into the box below",errorLimit:"Maximum 30 questions per import",errorNoQuestions:"No questions foun
541d in data",errorInvalid:"Invalid JSON format. Please check again.",successParsed:"Parsed {{count}} questions from JSON{{shuffle}}.",shuffledSuffix:" (answers shuffled)"},upload:{formatLabel:"Format",templateTitle:"📝 No file yet? Download template",templateDesc:"Excel template with standard format (ID, Question, Answer A/B/C/D, Correct Answer). Includes 2 example questions.",btnDownload:"Download Excel Template",docxGuideTitle:"Word file format guide",docxGuideDesc:"Write questions as shown below. Underline the letter (A-F) of the correct answer. You can underline the entire answer line.",btnDownloadDocx:"Download sample Word file",btnSelect:"Select file to import",btnProcessing:"Processing...",errorFormat:"File format must be {{format}}",successRead:"Read {{count}} questions from file{{shuffle}}.",instructionTitle:"💡 Import Guide",instructionList:{li1:"Use the Excel template to ensure correct formatting (download above)",li2:"AI Generator compatible: Excel files from ✨ Create with AI can be imported directly",li3:"Excel Format: ID, Question, Answer A/B/C/D, Correct Answer",li4:"Word Format (.docx): Câu 1: ..., A. B. C. D. — underline the correct answer label",li5:"LaTeX support: Use $formula$ syntax (e.g., $2 + 2$)",li6:"Correct Answer: Enter A, B, C, or D (multiple: A, C or A C)",li7:"Limit: Maximum 20-30 questions per import"}},export:{title:"📊 Export Info",countInfo:"Questions to be exported: {{count}}",formatExcel:"Excel File (.xlsx) - Best for editing and re-importing",formatJson:"JSON File (.json) - Best for backup and system integration",formatCsv:"CSV File (.csv) - Best for processing with other tools",btnExport:"Export",btnExporting:"Exporting file...",success:"Exported {{count}} questions successfully!",notesTitle:"📝 Notes",notesList:{li1:"The file will be downloaded to your Downloads folder",li2:"Filename will be: cau-hoi-YYYY-MM-DD",li3:"Math formulas will keep $...$ format",li4:"Excel files can be re-imported to restore or share questions"},errorNoQuestions:"There are no questions to export"}},lessonPicker:lessonPicker$2,uploader:uploader$2,bgm:bgm$2},title$5="🗃️ Kho Câu Hỏi",stats$1={count:"{{count}} / 1000 câu",unit:"câu"},actions$3={exportAll:"Xuất toàn bộ kho",importExcel:"Nhập từ Excel/Word",searchPlaceholder:"Tìm kiếm câu hỏi...",importFromFile:"Import từ file",prevPage:"← Trang trước",nextPage:"Trang sau →",addQuestion:"Thêm câu hỏi",duplicateLastQuestion:"Nhân bản câu trên",save:"Lưu {{count}} câu hỏi",saveChanges:"Lưu thay đổi",cancel:"Hủy",useSelected:"Dùng {{count}} câu đã chọn",deleteAudio:"Xóa âm thanh"},alerts$9={quotaReached:"Kho đã đạt 1000 câu — khi thêm câu mới, câu cũ nhất sẽ tự động bị xóa.",quotaWarning:"Bạn đã dùng {{count}}/1000 câu. Khi đầy, câu mới sẽ thay thế câu cũ nhất.",pastingImage:"Đang tải lên hình ảnh từ clipboard...",saveGuidance:"💾 Nên nhập dưới 10 câu rồi Lưu, sau đó nhập thêm — phòng mất dữ liệu.",noQuestionsPlaceholder:'Chưa có câu hỏi nào. Nhấn "Thêm câu hỏi" để bắt đầu.',answerLimit:{multiple:"Chấp nhận các câu có 2-{{max}} đáp án với đúng 1 đáp án đúng.",single:"Chỉ chấp nhận các câu có 2 đáp án với đúng 1 đáp án đúng."},multiTypeHint:"Hỗ trợ 4 dạng: Trắc nghiệm, Đúng/Sai, Nhiều đáp án, Điền từ."},empty$2={noResults:"Không tìm thấy câu hỏi nào",noQuestions:"Chưa có câu hỏi nào",tryDifferentKeyword:"Thử từ khóa khác",autoSaveInfo:"Câu hỏi sẽ tự động lưu khi bạn tạo ở các chức năng (Video, Vòng quay, Hand Slash...)",notEntered:"(Chưa nhập)",drafting:"Đang soạn thảo..."},error$3={loadFailed:"Không thể tải câu hỏi. Vui lòng thử lại.",loadExportFailed:"Không thể tải câu hỏi để xuất. Vui lòng thử lại.",deleteFailed:"Có lỗi xảy ra khi xóa câu hỏi",loadMoreFailed:"Lỗi tải thêm câu hỏi",syncFailed:"Lỗi đồng bộ câu {{index}}: {{message}}",importFailed:"Lỗi khi nhập câu hỏi",pasteImageFailed:"Lỗi khi tải lên hình ảnh từ clipboard. Vui lòng thử lại.",validation:{atLeastOne:"Phải có ít nhất 1 câu hỏi",maxReached:"Chỉ được tối đa {{count}} câu hỏi (hiện có {{current}})",maxQuestions:"Chỉ cần tối đa {{count}} câu hỏi",emptyQuestion:"Câu hỏi {{index}} không được để trống",atLeastTwoAnswers:"Phải có ít nhất 2 đáp án",maxAnswers:"Câu hỏi {{index}} chỉ được có tối đa {{count}} đáp án",maxAnswersPerQuestion:"Tối đa {{count}} đáp án cho mỗi câu hỏi",mustHaveCorrect:"Câu hỏi {{index}} phải có đáp án đúng",emptyAnswer:"Câu hỏi {{index}} có đáp án bị trống",emptyStatement:"Câu hỏi {{index}} có mệnh đề bị trống",mustHaveCorrectAnswer:"Câu hỏi {{index}} phải có đáp án đúng",mustHaveMultipleCorrect:"Câu hỏi {{index}} phải có ít nhất 1 đáp án đúng",maxQuestionsReached:"Chỉ được chọn tối đa {{count}} câu hỏi"},audioUploadFailed:"Tải tệp âm thanh lên thất bại. Kiểm tra kết nối rồi bấm Lưu lại.",saveChanges:"Không lưu được thay đổi. Vui lòng thử lại.",exportFailed:"Xuất file thất bại. Vui lòng thử lại."},confirm$1={deleteSingle:"Bạn có chắc muốn xóa câu hỏi này?",deleteFromBank:"Bạn có chắc muốn xóa câu hỏi này khỏi kho?",deleteAudio:"Xóa âm thanh"},editor$1={title:"Chọn câu hỏi từ Kho câu hỏi",maxSelection:"(Tối đa {{count}} câu)",loadedCount:"Đã tải: {{count}} câu{{hasMore}}",hasMoreSuffix:" (còn thêm)",searchInternal:"Tìm kiếm câu hỏi (tìm trong dữ liệu đã tải)...",filterBySource:"Lọc theo 
541nguồn",filterSearch:"Tìm",filterClear:"Xoá lọc",sourceAll:"Chọn nơi xuất phát của câu hỏi (Tất cả)",sourceManual:"Tạo thủ công",sourceImport:"Nhập file",filterResultCount:"{{count}} câu",searchFiltered:"Tìm kiếm câu hỏi...",selectAll:"Chọn tất cả {{count}}",deselectAll:"Bỏ chọn",selectedCount:"Đã chọn: {{count}}",tryLoadMore:'Thử bấm "Tải thêm" để tìm trong phần chưa tải',loadMore:"Tải thêm {{count}} câu",loading:"Đang tải...",manualEntry:"✏️ Nhập câu hỏi thủ công",editQuestion:"✏️ Sửa câu hỏi",questionNum:"Câu {{index}}",questionContent:"Nội dung câu hỏi:",answersTitle:"Đáp án (tick chọn đáp án đúng):",addAnswer:"Thêm đáp án",questionType:"Dạng câu",typeAbcd:"🔤 Trắc nghiệm",typeTrueFalse:"✅ Đúng/Sai",typeMultiple:"☑️ Nhiều ĐA",typeShortAnswer:"✏️ Điền từ",typeChangeWarning:"Đổi dạng sẽ xóa đáp án hiện tại. Tiếp tục?",statementsTitle:"Các mệnh đề (chọn Đúng/Sai):",statementPlaceholder:"Mệnh đề {{index}}",trueBtn:"Đ",falseBtn:"S",answersMultipleTitle:"Đáp án (tick chọn các đáp án đúng):",correctAnswerLabel:"Đáp án đúng:",altAnswersLabel:"Đáp án thay thế:",markAsAnswer:"Đánh dấu đáp án",resetAnswer:"Hủy đánh dấu",shortAnswerGuide:"Bôi chọn từ/cụm từ trong câu hỏi → bấm 'Đánh dấu đáp án'",addAltAnswer:"Thêm",altAnswerPlaceholder:"Đáp án thay thế...",fontSize:{label:"Cỡ chữ",general:"Theo cỡ chung",small:"Bé",medium:"Chuẩn",large:"Lớn",xl:"Rất lớn",huge:"Cực đại"},imageSize:{label:"Cỡ ảnh",small:"Bé",medium:"Chuẩn",large:"Lớn",xl:"Rất lớn",sizeSmall:"Bé",sizeMedium:"Chuẩn",sizeLarge:"Lớn",sizeXl:"Rất lớn"},syncToBank:{tooltip:"Cập nhật câu này lên Kho (tốn tài nguyên — chỉ dùng khi cần thiết)",confirm:"Nhấn lần nữa để xác nhận đồng bộ",success:"✅ Đã đồng bộ!"},simpleKeyboard:"⌨ Bàn phím chuẩn",mathLive:"⌨ Soạn thảo Toán",closeTooltip:"Đóng",deleteQuestionTooltip:"Xóa câu hỏi",duplicateQuestionTooltip:"Nhân bản câu hỏi",deleteTooltip:"Xóa",simpleKeyboardTooltip:"Sử dụng bàn phím chuẩn",mathLiveTooltip:"Sử dụng soạn thảo công thức Toán",pastedImageTooltip:"Đang tải lên hình ảnh từ clipboard...",restrictedTo:"Chỉ nhận câu hỏi dạng {{type}}.",maxAnswersSuffix:"Tối đa {{count}} đáp án."},pagination={page:"Trang {{page}}"},lessonPicker$1={title:"Chọn bài để lấy câu hỏi",cancel:"Hủy",loadMore:"Tải thêm",emptyFeature:"Chưa có bài nào trong {{feature}}",questionCount:"{{count}} câu hỏi",conversionNote:"Câu hỏi sẽ được chuyển đổi sang định dạng phù hợp.",noQuestions:"Bài này chưa có câu hỏi nào.",errorList:"Không thể tải danh sách bài. Vui lòng thử lại.",errorLesson:"Không thể tải câu hỏi. Vui lòng thử lại.",featureLabels:{wheel_quiz:"Vòng Quay - Đua Vịt",hand_slash:"Quiz Chém Hoa Quả",head_tilt:"Quiz Nghiêng Đầu",paced_quiz:"Trắc nghiệm theo nhịp độ",tug_of_war:"Kéo Co - Đua thuyền kiến thức",pose_quiz:"Thể dục ABC",turn_based:"Game Theo Lượt",versus_game:"Đối Kháng",star_bag:"Túi Sao May Mắn",minesweeper:"Dò Mìn",crossword:"Ô Chữ",interactive_image:"Ảnh Tương Tác",journey:"Hành Trình",interactive_video:"Video Tương Tác"}},uploader$1={image:{label:"Hình ảnh",uploadBtn:"Tải lên từ máy",cropUploadBtn:"Cắt rồi tải lên",cropUploadHint:"Chọn ảnh, cắt trước rồi mới tải lên",errorType:"Vui lòng chọn file hình ảnh",errorGeneric:"Lỗi khi tải lên hình ảnh. Vui lòng thử lại.",uploading:"Đang tải...",tooltipUpload:"Tải lên hình ảnh từ máy",cropTitle:"Cắt ảnh",cropHint:"Kéo để chọn vùng cần giữ lại. Cắt bớt giúp ảnh nét hơn và nhẹ hơn.",cropConfirm:"Cắt & tải lên",cropCancel:"Huỷ",rotateLeft:"Xoay trái 90°",rotateRight:"Xoay phải 90°",cropTooltip:"
541Cắt / xoay ảnh",errorCropLoad:"Không tải được ảnh để cắt. Vui lòng thử lại."},audio:{uploadBtn:"Tải âm thanh",recordBtn:"Thu âm",stopBtn:"Dừng",aiVoiceBtn:"Giọng AI",uploading:"Đang tải lên...",errorMic:"Không thể truy cập microphone. Vui lòng cho phép quyền sử dụng micro.",proOnly:"🔒 Chỉ dành cho FullGame",proDesc:"Mua FullGame (200k/năm) để upload âm thanh cho câu hỏi.",upgradeBtn:"Mua FullGame",tooltipUpload:"Tải lên âm thanh (MP3/WAV/OGG, tối đa 5MB)",tooltipUploadPro:"Upload âm thanh — Chỉ FullGame",tooltipRecord:"Thu âm trực tiếp",tooltipRecordPro:"Thu âm — Chỉ FullGame",tooltipAi:"Tạo giọng AI",tooltipStop:"Dừng thu âm",tooltipPlay:"Có file âm thanh — click để nghe",tooltipDelete:"Xóa âm thanh",confirmTitle:"🎤 Xác nhận bản thu âm",confirmDesc:"Nghe lại bản thu âm trước khi sử dụng:",btnRetry:"Thu lại",btnUse:"Sử dụng",aiModal:{title:"🎙️ Tạo giọng đọc AI",desc:"Bạn sẽ được chuyển sang công cụ Tạo giọng đọc AI, hãy tạo tệp .mp3 của bạn và Tải lên bằng nút Tải lên âm thanh.",instruction:"Sau khi có tệp .mp3, tải lên tại đây:",btnOpen:"Đã hiểu, mở công cụ",btnClose:"Đóng"},pendingHint:"⏳ Tệp chưa được tải lên — bấm Lưu để hoàn tất."}},bgm$1={uploadBtn:"Tải nhạc lên",uploadTooltip:"Tải nhạc nền tùy chỉnh",deleteTooltip:"Xóa nhạc tùy chỉnh",customLabel:"Nhạc tùy chỉnh",proOnly:"Chỉ dành cho FullGame",proDesc:"Mua FullGame để tải nhạc nền riêng của bạn.",upgradeBtn:"Mua FullGame",errorType:"Chỉ chấp nhận file .mp3, .wav, .ogg",errorSize:"File quá lớn ({{size}} MB). Tối đa 5 MB.",errorLogin:"Bạn cần đăng nhập để tải nhạc lên.",errorGeneric:"Tải lên thất bại. Vui lòng thử lại.",disclaimer:{title:"⚖️ Lưu ý bản quyền",intro:"Khi tải nhạc lên, bạn xác nhận rằng:",point1:"Bạn sở hữu hoặc có quyền sử dụng bản nhạc này.",point2:"Nhạc không vi phạm bản quyền của bên thứ ba.",point3:"Bạn chịu toàn bộ trách nhiệm pháp lý liên quan.",cancel:"Hủy",confirm:"Tôi đồng ý, tiếp tục tải lên"}},viQuestionBank={title:title$5,stats:stats$1,actions:actions$3,alerts:alerts$9,empty:empty$2,error:error$3,confirm:confirm$1,editor:editor$1,pagination,import:{tabs:{paste:"Dán từ AI",upload:"Nhập tệp sẵn có",export:"Xuất tệp"},paste:{title:"📋 Hướng dẫn Dán câu hỏi từ AI",instruction:"Truy cập vào: <0>Phần mềm AI tạo câu hỏi</0><br />Tạo câu hỏi trên phần mềm đó, sau đó bấm nút <1>Copy sang giaoviendoimoi</1> và dán vào ô bên dưới.",placeholder:"Dán nội dung (hoặc nhấn Ctrl+V) sau khi bạn đã bấm nút Copy sang Giáo viên đổi mới...",label:"Dán câu hỏi vào đây:",shuffle:"Tự động đảo vị trí đáp án",shuffleDesc:"Xáo trộn thứ tự A/B/C/D ngẫu nhiên — đáp án đúng vẫn giữ nguyên nội dung",btnImport:"Nhập câu hỏi",btnImporting:"Đang nhập...",btnConfirm:"Xác nhận đưa vào Kho ({{count}} câu)",previewTitle:"Xem trước ({{count}} câu hỏi)",previewMeta:"{{count}} đáp án",previewMore:"... và {{count}} câu hỏi khác",errorArray:"Dữ liệu phải là một mảng các câu hỏi",errorMissing:"Câu hỏi {{index}}: Thiếu trường bắt buộc (question_content hoặc options)",errorMinAnswers:"Câu hỏi {{index}}: Phải có ít nhất 2 đáp án",errorNoCorrect:"Câu hỏi {{index}}: Không tìm thấy đáp án đúng",errorEmpty:"Vui lòng dán nội dung JSON vào ô bên dưới",errorLimit:"Tối đa 30 câu hỏi mỗi lần import",errorNoQuestions:"Không tìm thấy câu hỏi nào trong dữ liệu",errorInvalid:"Định dạng JSON không hợp lệ. Vui lòng kiểm tra lại.",successParsed:"Đã phân tích {{count}} câu hỏi từ JSON{{shuffle}}.",shuffledSuffix:" (đã đảo đáp án)"},upload:{formatLabel:"Định dạng",templateTitle:"📝 Chưa có file? Tải template mẫu",templateDesc:"Template Excel với format chuẩn (ID, Câu hỏi, Đáp án A/B/C/D, Đáp án đúng). Bao gồm 2 câu hỏi ví dụ.",btnDownload:"Tải Template Excel",docxGuideTitle:"Hướng dẫn format file Word",docxGuideDesc:"Viết câu hỏi theo mẫu bên dưới. Gạch chân chữ cái (A-F) của đáp án đúng. Có thể gạch chân cả dòng đáp án.",btnDownloadDocx:"Tải file Word mẫu",btnSelect:"Chọn file để import",btnProcessing:"Đang xử lý...",errorFormat:"File không đúng định dạng {{format}}",successRead:"Đã đọc {{count}} câu hỏi từ file{{shuffle}}
541.",instructionTitle:"💡 Hướng dẫn Import",instructionList:{li1:"Sử dụng template Excel để đảm bảo đúng định dạng (tải ở trên)",li2:"Tương thích với AI Generator: File Excel từ ✨ Tạo bằng AI có thể import trực tiếp",li3:"Format Excel: ID, Câu hỏi, Đáp án A/B/C/D, Đáp án đúng",li4:"Format Word (.docx): Câu 1: ..., A. B. C. D. — gạch chân chữ cái đáp án đúng",li5:"LaTeX support: Dùng cú pháp $công thức$ (ví dụ: $2 + 2$)",li6:"Đáp án đúng: Nhập A, B, C, hoặc D (nhiều đáp án: A, C hoặc A C)",li7:"Giới hạn: Tối đa 20-30 câu hỏi mỗi lần import"}},export:{title:"📊 Thông tin Export",countInfo:"Số câu hỏi sẽ được export: {{count}}",formatExcel:"File Excel (.xlsx) - Phù hợp để chỉnh sửa và import lại",formatJson:"File JSON (.json) - Phù hợp để backup và tích hợp hệ thống",formatCsv:"File CSV (.csv) - Phù hợp để xử lý với các công cụ khác",btnExport:"Export",btnExporting:"Đang xuất file...",success:"Đã export {{count}} câu hỏi thành công!",notesTitle:"📝 Lưu ý",notesList:{li1:"File sẽ được tải xuống vào thư mục Downloads của bạn",li2:"Tên file sẽ có dạng: cau-hoi-YYYY-MM-DD",li3:"Công thức toán học sẽ được giữ nguyên định dạng $...$",li4:"File Excel có thể import lại để phục hồi hoặc chia sẻ câu hỏi"},errorNoQuestions:"Chưa có câu hỏi nào để xuất"}},lessonPicker:lessonPicker$1,uploader:uploader$1,bgm:bgm$1},dashboard$3={title:"Hành Trình Xuyên Việt",subtitle:"Tạo hành trình vượt ải cho học sinh",tabs:{questionSets:"Bộ đề ({{count}})",journeys:"Hành trình ({{count}})",sessions:"Các phiên giao bài ({{count}})"},questionSets:{createNew:"Tạo bộ đề mới",empty:"Chưa có bộ đề nào",emptyDesc:"Bạn cần tạo bộ đề (với các câu hỏi) trước khi tạo Hành trình.",questionsCount:"{{count}} câu hỏi",copyIdTooltip:"Sao chép ID",copiedId:"Đã sao chép ID: {{id}}",editTooltip:"Sửa",deleteTooltip:"Xóa",deleteConfirm:'Xóa bộ đề "{{title}}"?',deleteSuccess:"Đã xóa bộ đề"},journeys:{createNew:"Tạo hành trình mới",empty:"Chưa có hành trình nào",emptyDesc:'Bấm "Tạo hành trình mới" để bắt đầu tạo hành trình vượt ải cho học sinh',deleteConfirm:'Xóa hành trình "{{title}}"?',deleteSuccess:"Đã xóa hành trình"},sessions:{empty:"Chưa có session nào active",endSession:"Kết thúc session",endConfirm:'Kết thúc session "{{title}}"? HS sẽ không thể tham gia nữa.',endSuccess:"Đã kết thúc session",copyCodeTooltip:"Sao chép mã",progress:"Ải {{current}}/{{total}}",studentCount:"<strong>{{count}}</strong> HS",studentCountPlain:"{{count}} HS",copyLinkTooltip:"Sao chép link",showQrTooltip:"Hiện mã QR"}},premium$1={title:"Hành Trình Học Tập",badge:"Tính năng Premium",desc:"Hành Trình Học Tập cho phép giáo viên tạo các lộ trình học tập tương tác với nhiều chặng, mỗi chặng chứa bộ đề trắc nghiệm. Học sinh thi đấu qua từng chặng để hoàn thành hành trình.",featuresTitle:"✨ Tính năng nổi bật:",features:["Tạo hành trình với nhiều chặng","Mỗi chặng gắn bộ đề trắc nghiệm với 4 dạng câu hỏi","Giao bài cho học sinh bằng mã phòng","Theo dõi kết quả chi tiết từng học sinh"],upgradeNow:"🔓 Nâng cấp ngay"},assign$5={dialogTitle:"Giao hành trình cho lớp",title:"Giao hành trình cho lớp",successTitle:"Giao hành trình thành công!",joinCode:"MÃ CODE",qrInstruction:"Hoặc chiếu mã QR cho học sinh quét:",linkInstruction:"Hoặc gửi đường dẫn tham gia nhanh:",copy:"Sao chép",noCodeNeeded:"Học sinh truy cập qua link sẽ không cần nhập mã code nữa.",journeyLabel:"Hành trình: ",sessionNameLabel:"Tên session (VD: Lớp 9A - Hè 2026)",durationLabel:"Thời hạn (ngày)",durationHelper:"Mặc định 90 ngày (hè)",cooldownLabel:"Thời gian chờ giữa các ải (ngày)",cooldownHelper:"Đặt 0 để HS chơi liên tục không giới hạn",cooldownGuideTitle:'⏳ Cách hoạt động "Thời gian chờ"',cooldownGuideDesc:"Sau khi HS vượt qua 1 ải, ải tiếp theo sẽ tự động mở sau {{count}} ngày. Trong thời gian chờ, HS vẫn thấy ải kế tiếp nhưng chưa thể chơi.",cooldownReason:"Lý do: Tránh HS chơi liên tục hết các ải trong 1 buổi, đồ
541ng thời giúp GV có thời gian theo dõi tiến trình tự học của các em.",assigning:"Đang giao...",assignBtn:"Giao",defaultSessionTitle:"Lớp ... - {{title}}"},alerts$8={indexError:"Cần tạo Firestore Index. Xem Console (F12) để lấy link tạo index.",loadError:"Lỗi tải dữ liệu: {{message}}",deleteError:"Lỗi xóa",loadHsError:"Lỗi tải danh sách HS",endSessionError:"Lỗi kết thúc session",copiedCode:"Đã sao chép mã {{code}}",copiedLink:"Đã sao chép link!",notFound:"Không tìm thấy hành trình",loadErrorSingle:"Lỗi tải hành trình",saveError:"Lỗi lưu hành trình",limitReached:"Đã đạt giới hạn tạo hành trình. Mua FullGame để tạo thêm!",invalidCode:"Mã hành trình không hợp lệ",codeNotFound:"Mã hành trình không tồn tại hoặc đã hết hạn",codeExpired:"Mã hành trình đã hết hạn",sessionNotFound:"Phiên hành trình không tồn tại",sessionEnded:"Hành trình đã kết thúc",allStagesOpened:"Đã mở hết tất cả các ải"},creator$1={editTitle:"✏️ Sửa Hành Trình",createTitle:"🗺️ Tạo Hành Trình Mới",subtitle:"Thiết kế hành trình vượt ải cho học sinh",journeyNameLabel:"Tên hành trình",journeyNamePlaceholder:"VD: Hành Trình Xuyên Việt Hè 2026",stagesList:"📍 Danh sách ải ({{count}})",provinceLabel:"Tỉnh/Thành",questionSetLabel:"Bộ đề",noQuestionSets:'Chưa có bộ đề — tạo ở tab "Bộ đề"',questionSetItem:"📝 {{title}} ({{count}} câu)",deleteStageTooltip:"Xóa ải này",stageChip:"Ải {{index}}: {{emoji}} {{name}}",addStageBtn:"Thêm ải mới",saving:"Đang lưu...",updateBtn:"Cập nhật",saveBtn:"Lưu hành trình",validation:{titleRequired:"Vui lòng nhập tên hành trình",provinceRequired:"Vui lòng chọn tỉnh thành cho tất cả các ải",questionSetRequired:"Ải {{index}} chưa chọn bộ đề. Vui lòng chọn bộ đề cho tất cả các ải.",updateSuccess:"Đã cập nhật hành trình!",createSuccess:"Đã tạo hành trình! Đang chuyển hướng..."}},player$b={noQuestionSet:"Ải này chưa có bộ đề. Liên hệ thầy/cô nhé!",defaultJourneyTitle:"Hành Trình",passportInfo:"🛂 {{code}} — {{name}}",newPhotos:"📸 Ảnh mới!",cooldownDays:"{{count}} ngày",cooldownHours:"{{count}} giờ",stageTitle:"Ải {{index}}: {{name}}",status:{completed:"✨ Đã vượt qua!",current:"📍 Đang chờ bạn",cooldown:"⏳ Mở sau {{time}}",locked:"🔒 Chưa mở"},playBtn:"Chơi",switchPassport:"Đổi hộ chiếu",journeyCompleteTitle:"Hoàn thành hành trình!",journeyCompleteDesc:"Bạn đã vượt qua tất cả {{count}} ải. Tuyệt vời! 🎉"},quiz$1={loading:"Đang tải câu hỏi...",back:"Quay lại",excellent:"Xuất sắc!",failed:"Chưa đạt rồi...",scoreInfo:"{{score}}/{{total}} câu đúng ({{percent}}%)",passMsg:"Bạn đã vượt qua ải <strong>{{province}}</strong> thành công! 🏆",continueBtn:"✅ Tiếp tục hành trình",failMsg:"Cần đạt ít nhất {{threshold}}% để vượt ải. Thử lại nhé! 💪",retryBtn:"🔄 Làm lại",exitBtn:"Thoát",nextLoading:"Đang tải câu tiếp...",stageInfo:"📍 Ải {{index}}: {{province}}",photoLabel:"📷 {{label}}",types:{abcd:"🔤 Trắc nghiệm",true_false:"✅ Đúng/Sai",multiple:"☑️ Nhiều đáp án",short_answer:"✏️ Điền từ"},multipleInstruction:"Chọn tất cả đáp án đúng",confirmBtn:"Xác nhận",true:"Đúng",false:"Sai",shortAnswerPlaceholder:"Nhập đáp án rồi nhấn Enter...",correctAnswerLabel:"💡 Đáp án đúng: ",emptyQuestions:"Bộ đề chưa có câu hỏi. Liên hệ thầy/cô nhé!",loadQSError:"Lỗi tải bộ đề: {{message}}"},manager$1={advanceConfirm:"Mở ải {{index}}? Học sinh sẽ thấy ải mới.",advanceSuccess:"Đã mở ải {{index}}!",uploadSuccess:"Đã upload ảnh cho ải {{index}}!",deliverConfirm:"Phát ảnh cho học sinh? Các em sẽ thấy ảnh lần sau vào.",deliverSuccess:"Đã phát ảnh thành công!",searchError:"Lỗi tra cứu",searchPlaceholder:"Tra cứu HS theo tên...",searchBtn:"Tìm",studentNotFound:"Không tìm thấy học sinh.",studentResult:"<strong>{{code}}</strong> — {{name}} · Hoàn thành: {{count}} ải",stageTitle:"Ải {{index}}: {{emoji}} {{name}}",completedCount:"{{count}}/{{total}} HS đã vượt",completedLabel:"HS đã vượt:",studentChip:"{{code}} — {{name}}",uploading:"Đang upload...",uploadCommonBtn:"Upload ảnh chung",delivering:"Đang phát...",deliverBtn:"Phát ảnh",advancing:"Đang mở...",advanceBtn:"🔓 Mở ải {{index}}: {{name}}",managePassportsBtn:"Quản lý hộ chiếu ({{count}})",managePassportsHint:"Hộ chiếu trùng tên được gom nhóm và đánh dấu cam. Giữ lại hộ chiếu có tiến độ đúng nhất, xoá các bản dư.",duplicateGroupBadge:"⚠️ {{count}} hộ chiếu trùng tên",passportStagesDone:"Đã vượt {{count}}
541 ải",deleteBtn:"Xoá",deletePassportConfirm:`Xoá hộ chiếu {{code}} — {{name}}?
542
543Hộ chiếu này chưa vượt ải nào. Thao tác KHÔNG khôi phục được.`,deletePassportConfirmWithProgress:`⚠️ Xoá hộ chiếu {{code}} — {{name}}?
544
545Hộ chiếu này ĐÃ VƯỢT {{count}} ải. Xoá là MẤT TOÀN BỘ điểm và tiến độ, KHÔNG khôi phục được.
546
547Chỉ xoá nếu chắc chắn đây là bản trùng dư!`,deletePassportSuccess:"Đã xoá hộ chiếu {{code}}",deletePassportError:"Không xoá được hộ chiếu. Vui lòng thử lại."},passport$1={nameMinLength:"Tên phải có ít nhất 2 ký tự nhé! 😊",createError:"Lỗi tạo hộ chiếu",invalidCodeFormat:"Mã hộ chiếu gồm 2 chữ cái in hoa",codeNotFound:"Mã hộ chiếu không đúng. Hãy kiểm tra lại!",checkError:"Lỗi kiểm tra hộ chiếu",successTitle:"Hộ chiếu của bạn!",writeDownNote:"📝 <strong>Ghi ra giấy</strong> mã <strong>{{code}}</strong> để dùng cho lần sau!",welcomeMsg:"Xin chào <strong>{{name}}</strong>! Mỗi lần vào lại, em chỉ cần nhập mã này.",startJourneyBtn:"🗺️ Bắt đầu hành trình!",defaultJourneyTitle:"Hành Trình",firstTimeBtn:"✨ Lần đầu — Nhận hộ chiếu",havePassportBtn:"🛂 Đã có hộ chiếu — Nhập mã",askNameTitle:"Bạn tên gì nào?",askNameSubtitle:"Để thầy/cô biết bạn là ai nhé",namePlaceholder:"VD: Nguyễn Văn A",backBtn:"Quay lại",getPassportBtn:"🛂 Nhận hộ chiếu",enterCodeTitle:"Nhập mã hộ chiếu",enterCodeSubtitle:"2 chữ cái in hoa (VD: AC, BK)",codePlaceholder:"VD: AC",continueJourneyBtn:"🗺️ Tiếp tục hành trình",duplicateTitle:"Đã có hộ chiếu tên này!",duplicateDesc:"Trong lớp đã có <strong>{{count}}</strong> hộ chiếu mang tên <strong>{{name}}</strong>. Nếu là của em, hãy chọn đúng mã bên dưới để giữ tiến độ cũ — đừng tạo mã mới.",duplicateUseCode:"Đây là hộ chiếu của em",duplicateStagesDone:"Đã vượt {{count}} ải",duplicateCreateAnyway:"Em là người khác — vẫn tạo mã mới",duplicateCheckError:"Không kiểm tra được tên trùng",forgotCodeDivider:"hoặc",findByNameLabel:"😟 Quên mã rồi? Gõ tên em để tìm lại hộ chiếu:",findBtn:"Tìm",findNoResult:'Không tìm thấy hộ chiếu nào với tên này. Em kiểm tra lại chính tả, hoặc quay lại chọn "Lần đầu — Nhận hộ chiếu" nhé!'},completion$1={title:"Chúc mừng!",passedMsg:"Bạn đã vượt ải <strong>{{province}}</strong>! 🏆",photoNote:"📸 Ảnh kỷ niệm sẽ sớm gửi tới em. Hãy kiểm tra lại sau nhé!",continueBtn:"🗺️ Tiếp tục hành trình"},photo$1={readyTitle:"📸 Ảnh kỷ niệm đã sẵn sàng!",filename:"ky-niem-{{index}}.jpg",altText:"Ảnh kỷ niệm",defaultCaption:"Kỷ niệm hành trình",downloadBtn:"Tải xuống",continueBtn:"Tiếp tục"},qsCreator$1={typeAbcd:"Trắc nghiệm ABCD",descAbcd:"4 đáp án, chọn 1 đáp án đúng",typeTrueFalse:"Đúng / Sai",descTrueFalse:"4 mệnh đề, chọn Đúng hoặc Sai",typeMultiple:"Nhiều đáp án đúng",descMultiple:"4 đáp án, chọn nhiều đáp án đúng",typeShortAnswer:"Trả lời ngắn",descShortAnswer:"Điền từ / câu trả lời ngắn",errorTitleRequired:"Vui lòng nhập tên bộ đề",errorQuestionsRequired:"Vui lòng thêm ít nhất 1 câu hỏi",errorQuestionEmpty:"Câu hỏi #{{index}} chưa có nội dung",saveSuccess:"Đã lưu bộ đề!",saveError:"Lỗi lưu",titleField:"Tên bộ đề",titlePlaceholder:"VD: Bộ đề Ải Hà Nội",totalCount:"Tổng: {{count}} câu",chooseTypeHint:"📋 Chọn dạng câu hỏi để thêm / quản lý:",manageCount:"Quản lý {{count}} câu",addQuestion:"Thêm câu",saving:"Đang lưu...",saveBtn:"💾 Lưu bộ đề ({{count}} câu)",questionCount:"<strong>{{count}}</strong> câu hỏi",importBankBtn:"Nhập từ Kho & AI",importLessonBtn:"Từ bài có sẵn",importLessonTitle:"Chọn bài để lấy câu → {{label}}",emptyQuestions:"Chưa có câu hỏi nào",addFirstBtn:"Thêm câu đầu tiên",incompleteWarning:"⚠️ Có <strong>{{count}}</strong> câu chưa nhập đủ nội dung (câu hỏi hoặc đáp án rỗng). Vui lòng hoàn thiện hoặc xóa câu rỗng.",addNewBtn:"Thêm câu mới",doneBtn:"✅ Xong ({{count}} câu)",importTitle:"Nhập câu hỏi → {{label}}",shortAnswerPlaceholder:"VD: Thủ đô của Việt Nam là Hà Nội",questionPlaceholder:"Nhập nội dung câu hỏi...",deleteTooltip:"Xóa câu",answerPlaceholder:"Đáp án {{label}}",statementPlaceholder:"Mệnh đề {{index}}",trueBtn:"Đúng",falseBtn:"Sai",shortAnswerGuideTitle:"📝 Hướng dẫn tạo câu điền từ:",shortAnswerStep1:'<strong>Bước 1:</strong> Gõ câu hỏi đầy đủ kèm đáp án (VD: "Thủ đô của Việt Nam là <u>Hà Nội</u>")',shortAnswerStep2:"<strong>Bước 2:</strong> Dùng chuột <strong>bôi chọn</strong> đoạn cần làm chỗ trống",shortAnswerStep3:'<strong>Bước 3:</strong> Bấm nút <strong>"✂️ Đặt làm đáp án"</strong> → đoạn bôi sẽ thành ___',setAsAnswerBtn:"✂️ Đặt làm đáp án",resetBtn:"🔄 Đặt lại",correctAnswerLabel:"✅ Đáp án đúng:",altAnswerLabel:"🔀 Đáp án thay thế (học sinh nhập hơi khác vẫn tính đúng):",noAltAnswerHint:"Chưa có — Thêm nếu muốn chấp nhận nhiều cách viết",altAnswerPlaceholder:"VD: Ha Noi, HN...",addAltBtn:"+ Thêm"},card$1={info:"{{count}} ải · Tạo {{date}}",assignTooltip:"Giao cho lớp",editTooltip:"Sửa",deleteTooltip:"Xóa",btnAssign:"Giao bài",btnEdit:"Sửa",btnDelete:"Xóa"},common$4={cancel:"Hủy"},viJourney={dashboard:dashboard$3,premium:premium$1,assign:assign$5,alerts:alerts$8,creator:creator$1,player:player$b,quiz:quiz$1,manager:manager$1,passport:passport$1,completion:completion$1,photo:photo$1,qsCreator:qsCreator$1,c
547ard:card$1,common:common$4},dashboard$2={title:"Learning Journey",subtitle:"Create learning paths for your students",tabs:{questionSets:"Question Sets ({{count}})",journeys:"Journeys ({{count}})",sessions:"Sessions ({{count}})"},questionSets:{createNew:"Create new set",empty:"No question sets yet",emptyDesc:"You need to create a question set before creating a Journey.",questionsCount:"{{count}} questions",copyIdTooltip:"Copy ID",copiedId:"Copied ID: {{id}}",editTooltip:"Edit",deleteTooltip:"Delete",deleteConfirm:'Delete question set "{{title}}"?',deleteSuccess:"Question set deleted"},journeys:{createNew:"Create new journey",empty:"No journeys yet",emptyDesc:'Click "Create new journey" to start creating a learning path',deleteConfirm:'Delete journey "{{title}}"?',deleteSuccess:"Deleted journey"},sessions:{empty:"No active sessions",endSession:"End session",endConfirm:'End session "{{title}}"? Students will no longer be able to join.',endSuccess:"Session ended",copyCodeTooltip:"Copy code",progress:"Stage {{current}}/{{total}}",studentCount:"<strong>{{count}}</strong> students",studentCountPlain:"{{count}} students",copyLinkTooltip:"Copy link",showQrTooltip:"Show QR code"}},premium={title:"Learning Journey",badge:"Premium Feature",desc:"Learning Journey allows teachers to create interactive learning paths with multiple stages, each containing quiz sets. Students compete through stages to complete the journey.",featuresTitle:"✨ Key Features:",features:["Create journeys with multiple stages","Each stage linked to a quiz set with 4 question types","Assign to students using a join code","Track detailed results for each student"],upgradeNow:"🔓 Upgrade now"},assign$4={dialogTitle:"Assign journey to class",title:"Assign journey to class",successTitle:"Journey assigned successfully!",joinCode:"JOIN CODE",qrInstruction:"Or show QR code for students to scan:",linkInstruction:"Or send quick access link:",copy:"Copy",noCodeNeeded:"Students accessing via link will not need to enter a code.",journeyLabel:"Journey: ",sessionNameLabel:"Session name (e.g., Class 9A - Summer 2026)",durationLabel:"Duration (days)",durationHelper:"Default 90 days",cooldownLabel:"Wait time between stages (days)",cooldownHelper:"Set 0 for unlimited play",cooldownGuideTitle:'⏳ How "Wait time" works',cooldownGuideDesc:"After a student passes a stage, the next stage will automatically open after {{count}} days. During the wait time, students can see the next stage but cannot play it yet.",cooldownReason:"Reason: Prevents students from playing all stages in one session, while giving the teacher time to prepare content (images, questions) for the next stage.",assigning:"Assigning...",assignBtn:"Assign",defaultSessionTitle:"Class ... - {{title}}"},alerts$7={indexError:"Firestore Index required. Check Console (F12) for the creation link.",loadError:"Data load error: {{message}}",deleteError:"Delete error",loadHsError:"Error loading student list",endSessionError:"Error ending session",copiedCode:"Copied code {{code}}",copiedLink:"Copied link!",notFound:"Journey not found",loadErrorSingle:"Error loading journey",saveError:"Error saving journey",limitReached:"Journey creation limit reached. Get FullGame to create more!",invalidCode:"Invalid journey code",codeNotFound:"Journey code does not exist or has expired",codeExpired:"Journey code has expired",sessionNotFound:"Journey session not found",sessionEnded:"Journey has ended",allStagesOpened:"All stages have been opened"},creator={editTitle:"✏️ Edit Journey",createTitle:"🗺️ Create New Journey",subtitle:"Design a learning path for students",journeyNameLabel:"Journey name",journeyNamePlaceholder:"e.g., Vietnam Explorer Summer 2026",stagesList:"📍 Stage List ({{count}})",provinceLabel:"Province/City",questionSetLabel:"Question Set",noQuestionSets:'No sets yet — create in "Question Sets" tab',questionSetItem:"📝 {{title}} ({{count}} questions)",deleteStageTooltip:"Delete this stage",stageChip:"Stage {{index}}: {{emoji}} {{name}}",addStageBtn:"Add new stage",saving:"Saving...",updateBtn:"Update",saveBtn:"Save Journey",validation:{titleRequired:"Please enter a journey title",provinceRequired:"Please select a province for all stages",questionSetRequired:"Stage {{index}} has no question set selected. Please select for all stages.",updateSuccess:"Journey updated!",createSuccess:"Journey created! Redirecting..."}},player$a={noQuestionSet:"This stage has no question set. Please contact your teacher!",defaultJourneyTitle:"Journey",passportInfo:"🛂 {{code}} — {{name}}",newPhotos:"📸 New photos!",cooldownDays:"{{count}} days",cooldownHours:"{{count}} hours",stageTitle:"Stage {{index}}: {{name}}
547",status:{completed:"✨ Completed!",current:"📍 Waiting for you",cooldown:"⏳ Opens in {{time}}",locked:"🔒 Locked"},playBtn:"Play",switchPassport:"Switch passport",journeyCompleteTitle:"Journey Complete!",journeyCompleteDesc:"You have passed all {{count}} stages. Amazing! 🎉"},quiz={loading:"Loading questions...",back:"Back",excellent:"Excellent!",failed:"Not passed...",scoreInfo:"{{score}}/{{total}} correct ({{percent}}%)",passMsg:"You have successfully passed <strong>{{province}}</strong>! 🏆",continueBtn:"✅ Continue Journey",failMsg:"Need at least {{threshold}}% to pass. Try again! 💪",retryBtn:"🔄 Retry",exitBtn:"Exit",nextLoading:"Loading next...",stageInfo:"📍 Stage {{index}}: {{province}}",photoLabel:"📷 {{label}}",types:{abcd:"🔤 Multiple Choice",true_false:"✅ True/False",multiple:"☑️ Multiple Answers",short_answer:"✏️ Short Answer"},multipleInstruction:"Select all correct answers",confirmBtn:"Confirm",true:"True",false:"False",shortAnswerPlaceholder:"Enter answer and press Enter...",correctAnswerLabel:"💡 Correct answer: ",emptyQuestions:"This set has no questions. Please contact your teacher!",loadQSError:"Error loading set: {{message}}"},manager={advanceConfirm:"Open stage {{index}}? Students will see the new stage.",advanceSuccess:"Stage {{index}} opened!",uploadSuccess:"Photo uploaded for stage {{index}}!",deliverConfirm:"Deliver photos to students? They will see them next time they join.",deliverSuccess:"Photos delivered successfully!",searchError:"Search error",searchPlaceholder:"Search student by name...",searchBtn:"Search",studentNotFound:"Student not found.",studentResult:"<strong>{{code}}</strong> — {{name}} · Completed: {{count}} stages",stageTitle:"Stage {{index}}: {{emoji}} {{name}}",completedCount:"{{count}}/{{total}} students passed",completedLabel:"Students passed:",studentChip:"{{code}} — {{name}}",uploading:"Uploading...",uploadCommonBtn:"Upload shared photo",delivering:"Delivering...",deliverBtn:"Deliver photos",advancing:"Opening...",advanceBtn:"🔓 Open stage {{index}}: {{name}}",managePassportsBtn:"Manage passports ({{count}})",managePassportsHint:"Passports with the same name are grouped and marked orange. Keep the one with correct progress, delete the extras.",duplicateGroupBadge:"⚠️ {{count}} duplicate passports",passportStagesDone:"{{count}} stage(s) completed",deleteBtn:"Delete",deletePassportConfirm:`Delete passport {{code}} — {{name}}?
548
549This passport has not completed any stage. This action CANNOT be undone.`,deletePassportConfirmWithProgress:`⚠️ Delete passport {{code}} — {{name}}?
550
551This passport has COMPLETED {{count}} stage(s). Deleting will PERMANENTLY LOSE all scores and progress.
552
553Only delete if you are sure this is a duplicate!`,deletePassportSuccess:"Deleted passport {{code}}",deletePassportError:"Could not delete passport. Please try again."},passport={nameMinLength:"Name must be at least 2 characters! 😊",createError:"Error creating passport",invalidCodeFormat:"Passport code consists of 2 uppercase letters",codeNotFound:"Invalid passport code. Please check again!",checkError:"Error checking passport",successTitle:"Your Passport!",writeDownNote:"📝 <strong>Write down</strong> the code <strong>{{code}}</strong> for next time!",welcomeMsg:"Hello <strong>{{name}}</strong>! Each time you return, just enter this code.",startJourneyBtn:"🗺️ Start Journey!",defaultJourneyTitle:"Journey",firstTimeBtn:"✨ First time — Get Passport",havePassportBtn:"🛂 Have Passport — Enter Code",askNameTitle:"What's your name?",askNameSubtitle:"So the teacher knows who you are",namePlaceholder:"Ex: John Doe",backBtn:"Back",getPassportBtn:"🛂 Get Passport",enterCodeTitle:"Enter Passport Code",enterCodeSubtitle:"2 uppercase letters (Ex: AC, BK)",codePlaceholder:"Ex: AC",continueJourneyBtn:"🗺️ Continue Journey",duplicateTitle:"A passport with this name already exists!",duplicateDesc:"This class already has <strong>{{count}}</strong> passport(s) named <strong>{{name}}</strong>. If one is yours, pick it below to keep your progress — do not create a new code.",duplicateUseCode:"This is my passport",duplicateStagesDone:"{{count}} stage(s) completed",duplicateCreateAnyway:"I am someone else — create a new code",duplicateCheckError:"Could not check for duplicate names",forgotCodeDivider:"or",findByNameLabel:"
553😟 Forgot your code? Type your name to find your passport:",findBtn:"Find",findNoResult:'No passport found with this name. Please check the spelling, or go back and choose "First time — Get Passport".'},completion={title:"Congratulations!",passedMsg:"You have passed <strong>{{province}}</strong>! 🏆",photoNote:"📸 A commemorative photo will be sent to you soon. Please check back later!",continueBtn:"🗺️ Continue Journey"},photo={readyTitle:"📸 Your memento is ready!",filename:"memento-{{index}}.jpg",altText:"Commemorative photo",defaultCaption:"Journey memento",downloadBtn:"Download",continueBtn:"Continue探索"},qsCreator={typeAbcd:"Multiple Choice ABCD",descAbcd:"4 answers, 1 correct choice",typeTrueFalse:"True / False",descTrueFalse:"4 statements, select True or False each",typeMultiple:"Multiple Answers",descMultiple:"4 answers, multiple correct choices",typeShortAnswer:"Short Answer",descShortAnswer:"Fill in the blanks / Short answer",errorTitleRequired:"Please enter a title for the set",errorQuestionsRequired:"Please add at least 1 question",errorQuestionEmpty:"Question #{{index}} has no content",saveSuccess:"Question set saved!",saveError:"Error saving",titleField:"Question Set Title",titlePlaceholder:"Ex: Hanoi Stage Set",totalCount:"Total: {{count}} questions",chooseTypeHint:"📋 Choose question type to add / manage:",manageCount:"Manage {{count}} questions",addQuestion:"Add question",saving:"Saving...",saveBtn:"💾 Save Set ({{count}} questions)",questionCount:"<strong>{{count}}</strong> questions",importBankBtn:"Import from Bank & AI",importLessonBtn:"From existing lesson",importLessonTitle:"Pick a lesson → {{label}}",emptyQuestions:"No questions yet",addFirstBtn:"Add first question",incompleteWarning:"⚠️ There are <strong>{{count}}</strong> incomplete questions (empty question or answers). Please complete or remove them.",addNewBtn:"Add new question",doneBtn:"✅ Done ({{count}} questions)",importTitle:"Import Questions → {{label}}",shortAnswerPlaceholder:"Ex: The capital of Vietnam is Hanoi",questionPlaceholder:"Enter question content...",deleteTooltip:"Delete question",answerPlaceholder:"Answer {{label}}",statementPlaceholder:"Statement {{index}}",trueBtn:"True",falseBtn:"False",shortAnswerGuideTitle:"📝 Guide for Short Answer:",shortAnswerStep1:'<strong>Step 1:</strong> Type the full question with answer (Ex: "The capital of Vietnam is <u>Hanoi</u>")',shortAnswerStep2:"<strong>Step 2:</strong> <strong>Select/Highlight</strong> the portion to become a blank",shortAnswerStep3:'<strong>Step 3:</strong> Click <strong>"✂️ Set as Answer"</strong> → highlighted text becomes ___',setAsAnswerBtn:"✂️ Set as Answer",resetBtn:"🔄 Reset",correctAnswerLabel:"✅ Correct Answer:",altAnswerLabel:"🔀 Alternative Answers (accepted as correct if slightly different):",noAltAnswerHint:"None — Add if you want to accept multiple spellings/variations",altAnswerPlaceholder:"Ex: Ha Noi, HN...",addAltBtn:"+ Add"},card={info:"{{count}} stages · Created {{date}}",assignTooltip:"Assign to class",editTooltip:"Edit",deleteTooltip:"Delete",btnAssign:"Assign",btnEdit:"Edit",btnDelete:"Delete"},common$3={cancel:"Cancel"},enJourney={dashboard:dashboard$2,premium,assign:assign$4,alerts:alerts$7,creator,player:player$a,quiz,manager,passport,completion,photo,qsCreator,card,common:common$3},page$a={title:"Game Theo Lượt",sidebar:{myGames:"Bài của tôi",createNew:"Tạo bài mới",upgradeLabel:"Nâng Cấp Lẻ"},quota:{proPermanent:"Ko giới hạn vĩnh viễn",proDaysRemaining:"{{days}} ngày ko giới hạn",usedCount:"Đã dùng {{current}}/{{total}} bài",limitReached:"Đã đạt giới hạn dùng thử"}},list$3={title:"🎲 Bài chơi của tôi",subtitle:"Quản lý các bài Game theo Lượt đã tạo",pinHint:"Ghim bài để luôn truy cập được kể cả khi hết hạn",pinnedCount:"({{current}}/{{total}} đã ghim)",subscriptionExpired:"⚠️ Gói đã hết hạn!",renewBtn:"Gia hạn",empty:"Chưa có bài chơi nào",emptyDesc:"Tạo bài đầu tiên để bắt đầu!",createFirstBtn:"➕ Tạo bài đầu tiên",item:{questionsCount:"{{count}} câu hỏi",playersCount:"{{count}} người chơi",cellsCount:"{{count}} ô",renewToUnlock:"🔒 Gia hạn để mở bài này",playTooltip:"
553Chơi",editTooltip:"Chỉnh sửa",assignTooltip:"Giao bài",deleteTooltip:"Xóa",playBtn:"Chơi",editBtn:"Sửa",assignBtn:"Giao"},pagination:{prev:"← Trang trước",current:"Trang {{page}}",next:"Trang sau →"},deleteDialog:{title:"Xóa bài chơi?",content:"Bài chơi sẽ bị xóa vĩnh viễn. Bạn có chắc không?",cancel:"Hủy",delete:"Xóa"}},myGames$b={demo:{title:"Game Theo Lượt - Bản Chạy Thử",badge:"Bản chạy thử",hint:"Chơi thử để trải nghiệm tính năng trước khi tạo bài của bạn"},playTest:"Chơi thử",downloadOffline:"Tải xuống",downloadOfflineUpgrade:"Nâng cấp để tải xuống",downloading:"Đang tải...",downloadOfflineError:"❌ Không tạo được file tải xuống, vui lòng thử lại"},form$e={createTitle:"🎲 Tạo Game Theo Lượt mới",editTitle:"✏️ Chỉnh sửa Game Theo Lượt",titleLabel:"Tiêu đề bài chơi",playersLabel:"Số người chơi",playersOption:"{{count}} người chơi",charactersLabel:"Nhân vật: ",playerNamesLabel:"Tên người chơi",playerNamesHint:"(tùy chọn)",playerNamePlaceholder:"Người {{index}}",obstaclesLabel:"Số chướng ngại vật mỗi đường:",obstaclesDesc:"(tổng {{total}} CNV cho {{players}} người)",reuseQuestionsHint:"Câu hỏi ít hơn tổng CNV sẽ được tái sử dụng.",bgmLabel:"🎵 Nhạc nền mặc định",bgmOption:"Bài {{index}}",bgmHint:"GV có thể đổi bài nhạc trong khi chơi.",questionsTitle:"Câu hỏi ({{count}})",questionsReuseWarn:"— cần ít nhất {{total}} câu hoặc sẽ tái sử dụng",clearAllBtn:"Xóa tất cả",importBankBtn:"📚 Lấy từ Kho câu hỏi",importQuestionPickerBtn:"🗃️ Chọn từ Kho hoặc AI",importLessonBtn:"📂 Từ bài có sẵn",manualInputBtn:"✏️ Nhập thủ công",listHeader:"Danh sách câu hỏi",imageLabel:"[🖼️ Ảnh]",noValidQuestions:"Không có câu nào phù hợp.",addedFromLesson:"Đã thêm {{count}} câu từ bài có sẵn.",lessonsPickerTitle:"Thêm câu từ bài có sẵn",subtitleStatements:"{{count}} mệnh đề",subtitleShortAnswer:"Điền từ: {{answer}}",empty:"Chưa có câu hỏi nào",emptyDesc:"Thêm câu hỏi để gắn vào chướng ngại vật trên map",cancelBtn:"Hủy",saveBtn:"Lưu bài chơi",saving:"Đang lưu...",pickerTitle:"Chọn câu hỏi từ Kho",clearAllConfirm:"Xóa tất cả câu hỏi?"},player$9={loading:"Đang tải bài chơi...",errorLoad:"Không tải được bài chơi",bgm1:"Bài 1",bgm2:"Bài 2",bgm3:"Bài 3",bgm4:"Bài 4",bgm5:"Bài 5",dice:{skip:"Mất lượt",blast:"Bắn nổ CNV",turbo:"Siêu tốc",rolling:"🎲 Đang tung...",rollBtn:"🎲 Tung xúc xắc",skipStatus:"Rất tiếc! Bạn đã tung trúng mất lượt, giờ đến người chơi tiếp theo",blastStatus:"⭐ Bắn nổ chướng ngại vật! Di chuyển {{steps}} bước",turboStatus:"⚡ Siêu tốc! Di chuyển {{steps}} bước",moveStatus:"Di chuyển {{steps}} bước!"},bubbles:{retryQuestion:"🔄 Trả lời lại câu hỏi!",obstacleEncounter:"⚠️ Gặp chướng ngại vật!!",monsterTitle:"GẶP CHƯỚNG NGẠI VẬT",playerTurn:"Lượt của {{emoji}} {{name}}",blastSuccess:"⭐ Bắt nổ CNV! Đi {{steps}} bước!",noObstacles:"⭐ Không có CNV! Đi {{steps}} bước!",noObstaclesStatus:"⭐ Không có CNV phía trước. Di chuyển {{steps}} bước",turboSuccess:"⚡ Siêu tốc! Đi {{steps}} bước!",moveSuccess:"Di chuyển {{steps}} bước!",goalReached:"🏆 Về đích! Thắng rồi!",correctTurnEnd:"✅ Chính xác! Chuyển lượt.",wrongTurnEnd:"❌ Sai rồi! Mất lượt!"},quiz:{title:"❓ Câu hỏi chướng ngại vật",correct:"🎉 Chính xác!",wrong:"❌ Sai rồi! Lượt sau trả lời lại!"},win:{message:"{{emoji}} {{name}} thắng!",desc:"Đã về đích thành công!",exitBtn:"← Thoát",playAgainBtn:"🔄 Chơi lại"},assignment:{nameTitle:"Nhập tên cho từng người chơi",playerLabel:"{{emoji}} Người chơi {{index}}",startBtn:"▶ Bắt đầu chơi",defaultPlayerName:"Người {{index}}"},controls:{playerLabel:"Người {{index}}",currentTurn:"▶ Đến lượt",turnPrompt:"Đến lượt",bgmTitle:"🎵 Nhạc nền:",playBgmBtn:"▶ Phát nhạc nền",muteTooltip:"Tắt nhạc",unmuteTooltip:"Bật nhạc",exitFullscreenTooltip:"Thoát toàn màn hình",enterFullscreenTooltip:"Toàn màn hình",exitFullscreenBtn:"⛶ Thu nhỏ",enterFullscreenBtn:"⛶ Toàn màn hình",exitBtn:"← Thoát"}},alerts$6={loadGamesError:"Lỗi tải danh sách bài",deleteSuccess:"Đã xóa bài chơi",deleteError:"Lỗi khi xóa bài",pinLimitReached:"Chỉ ghim được tối đa {{limit}} bài",pinRemovedSuccess:"Đã bỏ ghim",pinAddedSuccess:"Đã ghim bài",assignSuccess:"Đã tạo bài tập thành công!",saveSuccess:"Đã lưu bài chơi!",saveError:"Lỗi lưu bài chơi",loadDataError:"Lỗi tải dữ liệu bài chơi",invali
553dQuestion:"Không có câu hỏi hợp lệ (cần ít nhất 2 đáp án)",addSuccess:"Đã thêm {{count}} câu, bỏ qua {{skipped}} câu không hợp lệ",updateQuestionSuccess:"Đã cập nhật câu hỏi",addQuestionsSuccess:"Đã thêm {{count}} câu hỏi",removeQuestionSuccess:"Đã xóa câu hỏi {{index}}",clearAllSuccess:"Đã xóa tất cả câu hỏi",titleRequired:"Vui lòng nhập tiêu đề bài chơi",questionRequired:"Vui lòng thêm ít nhất 1 câu hỏi",minQuestionsRequired:"Bài chơi phải có ít nhất 1 câu hỏi",maxQuestionsExceeded:"Bài chơi chỉ được tối đa 200 câu hỏi",notFound:"Không tìm thấy bài chơi"},viTurnBasedGame={page:page$a,list:list$3,myGames:myGames$b,form:form$e,player:player$9,alerts:alerts$6},page$9={title:"Turn-Based Game",sidebar:{myGames:"My Games",createNew:"Create New",upgradeLabel:"Upgrade"},quota:{proPermanent:"FullGame Lifetime",proDaysRemaining:"{{days}} FullGame days left",usedCount:"Used {{current}}/{{total}} games",limitReached:"Trial limit reached"}},list$2={title:"🎲 My Games",subtitle:"Manage your created turn-based games",pinHint:"Pin games to access even after expiration",pinnedCount:"({{current}}/{{total}} pinned)",subscriptionExpired:"⚠️ Plan expired!",renewBtn:"Renew",empty:"No games yet",emptyDesc:"Create your first game to start!",createFirstBtn:"➕ Create First Game",item:{questionsCount:"{{count}} questions",playersCount:"{{count}} players",cellsCount:"{{count}} cells",renewToUnlock:"🔒 Renew to unlock this game",playTooltip:"Play",editTooltip:"Edit",assignTooltip:"Assign",deleteTooltip:"Delete",playBtn:"Play",editBtn:"Edit",assignBtn:"Assign"},pagination:{prev:"← Previous",current:"Page {{page}}",next:"Next →"},deleteDialog:{title:"Delete game?",content:"This game will be permanently deleted. Are you sure?",cancel:"Cancel",delete:"Delete"}},myGames$a={demo:{title:"Turn-Based Game - Demo Version",badge:"Demo",hint:"Try out this demo to experience the feature before creating your own game"},playTest:"Try Demo",downloadOffline:"Download",downloadOfflineUpgrade:"Upgrade to download",downloading:"Downloading...",downloadOfflineError:"❌ Could not create the download file, please try again"},form$d={createTitle:"🎲 Create New Turn-Based Game",editTitle:"✏️ Edit Turn-Based Game",titleLabel:"Game Title",playersLabel:"Number of Players",playersOption:"{{count}} players",charactersLabel:"Characters: ",playerNamesLabel:"Player names",playerNamesHint:"(optional)",playerNamePlaceholder:"Player {{index}}",obstaclesLabel:"Obstacles per lane:",obstaclesDesc:"(total {{total}} obstacles for {{players}} players)",reuseQuestionsHint:"Questions will be reused if fewer than total obstacles.",bgmLabel:"🎵 Default Background Music",bgmOption:"Track {{index}}",bgmHint:"Teacher can change music during gameplay.",questionsTitle:"Questions ({{count}})",questionsReuseWarn:"— at least {{total}} questions needed or they will be reused",clearAllBtn:"Clear All",importBankBtn:"📚 Import from Question Bank",importQuestionPickerBtn:"🗃️ From Question Bank or AI",importLessonBtn:"📂 From Existing Lesson",manualInputBtn:"✏️ Manual Input",listHeader:"Question List",imageLabel:"[🖼️ Image]",noValidQuestions:"No valid questions.",addedFromLesson:"Added {{count}} questions from lesson.",lessonsPickerTitle:"Add questions from lesson",subtitleStatements:"{{count}} statements",subtitleShortAnswer:"Fill in: {{answer}}",empty:"No questions yet",emptyDesc:"Add questions to attach to obstacles on the map",cancelBtn:"Cancel",saveBtn:"Save Game",saving:"Saving...",pickerTitle:"Select Questions from Bank",clearAllConfirm:"Clear all questions?"},player$8={loading:"Loading game...",errorLoad:"Failed to load game",bgm1:"Track 1",bgm2:"Track 2",bgm3:"Track 3",bgm4:"Track 4",bgm5:"Track 5",dice:{skip:"Skip Turn",blast:"Blast Obstacle",turbo:"Turbo",rolling:"🎲 Rolling...",rollBtn:"🎲 Roll Dice",skipStatus:"Too bad! You rolled Skip Turn, moving to next player",blastStatus:"⭐ Obstacle blasted! Move {{steps}} steps",turboStatus:"⚡ Turbo speed! Move {{steps}} steps",moveStatus:"Move {{steps}} steps!"},bubbles:{retryQuestion:"🔄 Answer the question again!",obstacleEncounter:"⚠️ Obstacle encountered!!",monsterTitle:"OBSTACLE ENCOUNTERED",playerTurn:"{{emoji}} Player {{name}}'s turn",blastSuccess:"⭐ Obstacle blasted! Move {{steps}} steps!",noObstacles:"⭐ No obstacles! Move {{steps}} steps!",noObstaclesStatus:"⭐ No obstacles ahead. Moving {{steps}} steps",turboSuccess:"⚡ Turbo speed! Move {{steps}} steps!",moveSuccess:"Move {{steps}} steps!",goalReached:"🏆 Goal reached! You win!",correctTurnEnd:"✅ Correct! Next turn.",wrongTurnEnd:"❌ Wrong! Turn lost!"},quiz:{title:"❓ Obstacle Question",correct:"🎉 Correct!",wrong:"❌ Wrong! Try again next turn!"},win:{message:"{{emoji}} {{name}} wins!",desc:"Reached the goal successfully!",exitBtn:"← Exit",playAgainBtn:"🔄 Play Again"},assignment:{nameTitle:"Enter names for each player",playerLabel:"{{emoji}} Player {{index}}",startBtn:"▶ Start Game",defaultPlayerName:"Player {{index}}"},controls:{playerLabel:"Player {{index}}",currentTurn:"▶ Current Turn",turnPrompt:"Current Turn",bgmTitle:"🎵 Backgroun
553d Music:",playBgmBtn:"▶ Play Background Music",muteTooltip:"Mute",unmuteTooltip:"Unmute",exitFullscreenTooltip:"Exit Fullscreen",enterFullscreenTooltip:"Fullscreen",exitFullscreenBtn:"⛶ Exit Fullscreen",enterFullscreenBtn:"⛶ Fullscreen",exitBtn:"← Exit"}},alerts$5={loadGamesError:"Error loading game list",deleteSuccess:"Game deleted successfully",deleteError:"Error deleting game",pinLimitReached:"You can only pin up to {{limit}} games",pinRemovedSuccess:"Unpinned successfully",pinAddedSuccess:"Pinned successfully",assignSuccess:"Assignment created successfully!",saveSuccess:"Game saved successfully!",saveError:"Error saving game",loadDataError:"Error loading game data",invalidQuestion:"No valid questions (at least 2 answers required)",addSuccess:"Added {{count}} questions, skipped {{skipped}} invalid ones",updateQuestionSuccess:"Question updated successfully",addQuestionsSuccess:"Added {{count}} questions",removeQuestionSuccess:"Removed question {{index}}",clearAllSuccess:"Cleared all questions",titleRequired:"Please enter a game title",questionRequired:"Please add at least 1 question",minQuestionsRequired:"Game must have at least 1 question",maxQuestionsExceeded:"Game can have a maximum of 200 questions",notFound:"Game not found"},enTurnBasedGame={page:page$9,list:list$2,myGames:myGames$a,form:form$d,player:player$8,alerts:alerts$5},title$4="Giao bài tập",success$2={title:"Tạo bài tập thành công!",description:"Bạn có thể gá»­i Mã Code hoặc Link trá»±c tiếp cho học sinh",joinCodeLabel:"Mà CODE",copySuccess:"Đã sao chép!",copyCode:"Sao chép mã",shareLink:"Hoặc gá»­i đường dẫn tham gia nhanh:",copyLink:"Sao chép",copied:"Đã chép",noCodeNeeded:"Học sinh truy cập qua link sẽ <strong>không cần nhập mã code</strong> nữa.",qrScan:"Quét QR để vào chÆ¡i",qrDownload:"⬇ Tải ảnh QR"},form$c={gameInfo:{noName:"Game không tên"},remembranceName:{label:"Tên gợi nhớ",placeholder:"VD: Lớp 9A - Bài về nhà",helperText:"Tên này giúp bạn nhận biết đợt giao bài (học sinh không thấy)"},expiration:{label:"Thời hạn hiệu lá»±c cá»§a mã code:",options:{day_one:"1 ngày",day_three:"3 ngày",day_seven:"7 ngày",day_fifteen:"15 ngày",day_year_one:"⏰ 1 năm (Gói Dài Hạn)",day_year_two:"⏰ 2 năm (Gói Dài Hạn)",day_year_three:"⏰ 3 năm (Gói Dài Hạn)",day_year_five:"⏰ 5 năm (Gói Dài Hạn)"}},createBtn:"Tạo bài tập",allowRetry:"Cho phép học sinh làm lại nhiều lần",creating:"Đang tạo..."},alerts$4={turnBasedNote:'<strong>Lưu ý:</strong> Trò chÆ¡i này dành cho các học sinh chÆ¡i chung trên <strong>một thiết bị duy nhất</strong> (máy tính/máy tính bảng cá»§a nhóm), chứ không phải mỗi em một thiết bị. Nếu muốn mỗi em chÆ¡i riêng trên thiết bị cá»§a mình, hãy chọn tính năng <strong>"Game đối kháng"</strong> ở trang chá»§.',versusNote:"<strong>Game Đối Kháng 1v1:</strong> Mỗi học sinh chÆ¡i trên <strong>thiết bị riêng</strong>. Học sinh vào phòng chờ, tá»± chọn đối thá»§ và bắt đầu trận đấu. Tối đa <strong>20 trận</strong> cho mỗi đợt giao bài.",versusLimit:"Bạn đang mở 3 phòng ở các bài khác, vui lòng đóng bớt trước khi tạo thêm.",headTiltWarning:"📵 <strong>Lưu ý quan trọng:</strong> Camera cá»§a trò chÆ¡i <strong>không thể khởi động</strong> khi mở link bằng <strong>Zalo / Messenger</strong>. Hãy hướng dẫn học sinh cá»§a bạn mở trò chÆ¡i bằng <strong>trình duyệt điện thoại</strong> (Chrome, Safari)."},errors$5={titleRequired:"Vui lòng nhập tên gợi nhớ cho bài tập",unsupportedGame:"Loại game chưa được hỗ trợ",createFailed:"Không thể tạo bài tập. Vui lòng thá»­ lại.",endFailed:"Không thể kết thúc bài tập. Vui lòng thá»­ lại.",extendedLinkRequired:"Bạn cần có Gói Lưu Trữ Dài Hạn để giao bài với thời hạn 1-2 năm.",extendedLinkLimitReached:"Vượt giới hạn 100 liên kết dài hạn đang hoạt động. Vui lòng kết thúc bớt bài giao cÅ©.",invalidCode:"Mã code không hợp lệ. Vui lòng nhập 4-5 chữ số.",codeNotFound:"Mã không tồn tại hoặc đã hết hạn",codeExpired:"Mã đã hết hạn",assignmentNotFound:"Bài tập không tồn tại",journeyNotFound:"Mã hành trình không tồn tại",connectionError:"Không thể kết nối. Vui lòng kiểm tra mạng và thá»­ lại.",generalError:"Có lỗi xảy ra. Vui lòng thá»­ lại.",nameRequired:"Vui lòng nhập tên cá»
553§a bạn nha! 😊",nameTooShort:"Tên phải có ít nhất 2 ký tá»± nhé!",codeTooShort:"Vui lòng nhập đủ mã code (4 hoặc 5 ký tá»±)"},common$2={close:"Đóng",cancel:"Há»§y",back:"Quay lại"},duplicate$2={checking:"Đang kiểm tra...",title:"Bài này đã được giao",description:"Bài học này đã được giao trước đó với tên:",more:"khác",viewHistory:"Xem các lần đã giao",assignNew:"Giao mới"},player$7={loading:"Đang tải trò chÆ¡i...",unsupported:"Loại game không được hỗ trợ: {{type}}",notIntegrated:'Game "{{label}}" chưa được tích hợp với Assignment Manager.',tryAnother:"Vui lòng thá»­ với loại game khác.",scoreUpdated:"Điểm đã được cập nhật!",resultSaved:"Bài làm đã được lưu!",saveFailed:"Không thể lưu kết quả. Vui lòng thá»­ lại.",invalidId:"ID bài tập không hợp lệ",notFound:"Không tìm thấy bài tập",unsupportedType:'Loại game "{{type}}" không được hỗ trợ',loadError:"Có lỗi xảy ra khi tải bài tập",loadingTitle:"Đang tải bài tập...",alreadyPlayedTitle:"Bạn đã làm bài này rồi!",onceOnly:"Mỗi học sinh chỉ được làm bài một lần.",previousResult:"Kết quả lần trước:",playedAtLabel:"Thời gian:",nameLabel:"Họ tên:",contactTeacher:"Nếu bạn cần làm lại, hãy liên hệ giáo viên.",goBack:"Quay lại",defaultTitle:"Bài tập",studentPrefix:"Học sinh:"},result$4={excellent:"Xuất sắc!",good:"Giỏi!",fair:"Khá!",passed:"Đạt",tryHarder:"Cần cố gắng hÆ¡n",draw:"Hòa nhau!",winner:"🏆 {{name}} thắng!",percentageComplete:"{{percentage}}% hoàn thành",timeTaken:"Thời gian làm bài: <strong>{{duration}}</strong>",saving:"Đang lưu kết quả...",goHome:"Về trang chá»§",duration:{seconds:"{{count}} giây",minutes:"{{count}} phút",mins_secs:"{{mins}} phút {{secs}} giây",s_short:"giây",m_short:"phút"}},details$2={joinCode:"Mã code:",status:"Trạng thái:",expired:"Hết hạn",submissionCount:"<strong>{{count}}</strong> học sinh đã nộp",noSubmissions:"Chưa có học sinh nào nộp bài",sharePrompt:"Chia sẻ mã code <strong>{{code}}</strong> cho học sinh để bắt đầu",table:{stt:"STT",members:"Thành viên",players:"Người chÆ¡i",name:"Họ và tên",result:"Kết quả",score:"Điểm",duration:"Thời gian",submittedAt:"Nộp lúc"},viewDetail:"Chi tiết",viewDetailPro:"Chi tiết (FullGame)",downloadExcel:"Tải Excel báo cáo",downloadExcelFreeNote:"Bản free chỉ có sheet Tổng quan. Mua FullGame để có thêm sheet Chi tiết từng câu.",hideDetail
553:"Ẩn chi tiết",proFeature:"Tính năng dành cho gói FullGame",itemDetailTitle:"CHI TIẾT TỪNG CÂU",questionNum:"Câu {{index}}:",noTitle:"(Không có tiêu đề)",noContent:"(Không có nội dung)",imageAnswer:"Ảnh",notDone:"Chưa làm",correct:"✓ Đúng",wrong:"✗ Sai · Đáp án đúng: <strong>{{answer}}</strong>",wrongChosen:"✗ Chọn sai ({{chosen}}) · Đáp án đúng: <strong>{{correct}}</strong>",correctChosen:"✓ Đúng ({{chosen}})",correctPaced:"✓ Đúng · Chọn <strong>{{chosenKey}}</strong>: {{chosenText}}",wrongPaced:"✗ Chọn <strong>{{chosenKey}}</strong>: {{chosenText}} · Đáp án đúng: <strong>{{correctKey}}</strong>: {{correctText}}",reports:{fullImage:"🖼️ Xem báo cáo đầy đủ",fullQuiz:"🎯 Xem báo cáo đầy đủ",proSuffix:" (FullGame)"},wrongAttempts:"❌ Sai {{n}} lần",pointUnit:"đ",attemptNum:"Lần {{n}}:",decodeImage:"Giải mã ảnh:",correctExcl:"Đúng!",wrongExcl:"Sai",matchHistory:"Lịch sử trận đấu",totalQuestions:"Tổng câu hỏi",scoreLabel:"Điểm",handSlashNote:"Chém Hoa Quả không lưu chi tiết từng câu"},join$2={title:"Vào chơi thôi! 🚀",journeyTitle:"🗺️ Hành trình nào!",nameTitle:"Bạn tên gì nào? 👀",codeCaption:"Nhập mã thầy/cô cho nhé (4-5 ký tự)",journeyCaption:"Nhập mã X + 4 số thầy/cô cho nhé",nameCaption:"Để thầy/cô biết bạn là ai",inputLabel:"Mã tham gia",inputPlaceholder:"Nhập mã 4-5 số",typingCode:"⌨️ Đang nhập mã...",clickHere:"👆 Bấm vào đây rồi gõ mã code nhé!",finding:"Đang tìm...",continue:"✅ Tiếp tục!",enterJourney:"🗺️ Vào hành trình!",enterPanorama:"🎨 Vào phòng triển lãm!",enterScanner:"📱 Mở máy quét",enterGame:"🎮 Vào chơi!",back:"Quay lại",nameLabel:"Tên của bạn",namePlaceholder:"VD: Nguyễn Văn A 😄",currentTask:"Bài tập của bạn 🎯",footer:"🔑 Mã code do thầy/cô cung cấp · Bắt đầu bằng X = Hành trình",platformName:"🌟 Nền tảng Giáo Viên Đổi Mới"},history$2={title:"Lịch sử giao bài",stats:"{{count}} bài tập đã tạo",deleteExpiredBtn:"🗑️ Xóa bài hết hạn ({{count}}) — khuyến khích",deleteExpiredTip:"Thực hiện việc này giúp bạn sử dụng trang được mượt mà hơn",endConfirm:`Bạn có chắc muốn kết thúc bài "{{title}}"?
554
555Học sinh sẽ không thể nhập mã code để vào làm bài nữa.`,deleteArchiveConfirm:`Bạn có chắc muốn xóa "{{title}}"?
556
557Bảng kết quả của phiên này sẽ bị xóa vĩnh viễn, không thể khôi phục.`,empty:{title:"Chưa có bài tập nào",description:'Vào trang "Hoạt động của tôi" và bấm nút "Giao" trên một game để tạo bài tập',button:"Đi đến Hoạt động của tôi"},loadError:"Không thể tải danh sách bài tập. Vui lòng thử lại.",deleteError:"Không thể xóa bài hết hạn. Vui lòng thử lại.",table:{stt:"STT",reminderName:"Tên gợi nhớ",lesson:"Bài học",codeLink:"Mã / Link",status:"Trạng thái",statusEnded:"Đã kết thúc",statusExpired:"Hết hạn",submitted:"Nộp",studentCount:"HS",actions:"Thao tác",copyCode:"Sao chép mã",copyLink:"Sao chép link tham gia",viewDetail:"Xem chi tiết",endAssignment:"Kết thúc bài giao",deleteArchive:"Xóa phiên lưu trữ"},deleteModal:{title:"🗑️ Xóa bài hết hạn",successTitle:"✅ Xóa thành công",successMsg:"Đã xóa {{count}} bài tập hết hạn và toàn bộ bài nộp liên quan.",confirmMsg:"Bạn sắp xóa {{count}} bài tập đã hết hạn hoặc đã kết thúc, kèm theo toàn bộ bài nộp của học sinh.",warning:"Hành động này không thể hoàn tác. Dữ liệu điểm của học sinh sẽ bị xóa vĩnh viễn.",deleting:"Đang xóa...",confirmBtn:"Xác nhận xóa"}},gameTypes$2={tug_of_war:{label:"Kéo Co",instruction:"🪢 Nhập tên thành viên 2 đội rồi bắt đầu kéo co! Trả lời đúng để kéo dây về phía mình."},flip_puzzle:{label:"Trò Chơi Lật Mảnh Ghép",instruction:"🧩 Lật mảnh ghép bằng cách trả lời câu hỏi!"},quiz_game:{label:"Kéo Thả - Nối Ý",instruction:'🎯 Làm theo yêu cầu hiện ở mỗi câu. Nhấn "Hoàn thành" khi xong!'},hand_slash_quiz:{label:"Quiz Chém Hoa Quả",instruction:"✋ Sử dụng tay (hoặc chuột) để chém vào đáp án đúng khi hoa quả bay lên. Tránh chạm vào bomb!"},wheel_quiz:{label:"Vòng Quay Quiz",instruction:"🎡 Quay vòng để chọn câu hỏi và trả lời đúng để ghi điểm. Vui lòng làm hết tất cả câu hỏi!"},interactive_video:{label:"Video Tương Tác",instruction:"🎬 Xem video và trả lời các câu hỏi xuất hiện trong lúc xem. Mỗi câu đúng bạn được cộng 1 điểm!"},crossword_puzzle:{label:"Ô Chữ / Khóa Bí Mật",instruction:"Bấm vào tên hàng (1,2,3,...) để mở các hàng ngang và tìm ra từ khóa màu đỏ!"},interactive_image:{label:"Ảnh Tương Tác",instruction:"Click vào các 📍 điểm chạm trên ảnh để xem thông tin hoặc trả lời câu hỏi!"},head_tilt_quiz:{label:"Quiz Nghiêng Đầu",instruction:"🤔 Nghiêng đầu sang trái hoặc phải để chọn đáp án A hoặc B!"},paced_quiz:{label:"Quiz Có Nhịp",instruction:"⏱️ Đọc câu hỏi và chọn đáp án đúng. Hoàn thành tất cả câu hỏi để xem điểm!"},pose_quiz:{label:"Thể dục ABC",instruction:"🧘 Xem câu hỏi, chọn đáp án đúng theo tư thế nhân vật. Hoàn thành tất cả để xem điểm!"},turn_based_game:{label:"Game Theo Lượt",instruction:"🎲 Nhập tên các người chơi, tung xúc xắc và đua đến đích! Trả lời đúng để vượt chướng ngại vật."},versus_game:{label:"Game Đối Kháng",instruction:"⚔️ Trả lời đúng câu hỏi để đẩy gậy về phía đối thủ. Ai đạt mốc trước thì thắng!"}},viAssignment={title:title$4,success:success$2,form:form$c,alerts:alerts$4,errors:errors$5,common:common$2,duplicate:duplicate$2,player:player$7,result:result$4,details:details$2,join:join$2,history:history$2,gameTypes:gameTypes$2},title$3="Assign Task",success$1={title:"Assignment created successfully!",description:"You can send the Join Code or direct Link to students",joinCodeLabel:"JOIN CODE",copySuccess:"Copied!",copyCode:"Copy code",shareLink:"Or send a quick join link:",copyLink:"Copy",copied:"Copied",noCodeNeeded:"Students accessing via link <strong>will not need to enter a code</strong>.",qrScan:"Scan QR to join",qrDownload:"⬇ Download QR"},form$b={gameInfo:{noName:"Unnamed Game"},remembranceName:{label:"Remember name",placeholder:"e.g., Class 9A - Homework",helperText:"This 
557name helps you identify the assignment (students don't see it)"},expiration:{label:"Code expiration duration:",options:{day_one:"1 day",day_three:"3 days",day_seven:"7 days",day_fifteen:"15 days",day_year_one:"⏰ 1 year (Extended Plan)",day_year_two:"⏰ 2 years (Extended Plan)",day_year_three:"⏰ 3 years (Extended Plan)",day_year_five:"⏰ 5 years (Extended Plan)"}},createBtn:"Create Assignment",allowRetry:"Allow students to retake multiple times",creating:"Creating..."},alerts$3={turnBasedNote:'<strong>Note:</strong> This game is for students playing together on <strong>a single device</strong> (group computer/tablet), not individual devices. If you want each student to play on their own device, select <strong>"Versus Game"</strong> on the home page.',versusNote:"<strong>1v1 Versus Game:</strong> Each student plays on their <strong>own device</strong>. Students enter the lobby, choose opponents, and start matches. Maximum of <strong>20 matches</strong> per assignment.",versusLimit:"You have 3 active rooms in other assignments, please close them before creating more.",headTiltWarning:"📵 <strong>Important note:</strong> The game's camera <strong>cannot start</strong> when the link is opened in <strong>Zalo / Messenger</strong>. Please instruct your students to open the game in their <strong>phone's browser</strong> (Chrome, Safari)."},errors$4={titleRequired:"Please enter a remember name for the assignment",unsupportedGame:"Unsupported game type",createFailed:"Could not create assignment. Please try again.",endFailed:"Could not end the assignment. Please try again.",extendedLinkRequired:"You need the Extended Storage Plan to assign with a 1-2 year duration.",extendedLinkLimitReached:"You have reached the 50 active extended links limit. Please end some existing assignments first.",invalidCode:"Invalid code. Please enter 4-5 digits.",codeNotFound:"Code does not exist or has expired.",codeExpired:"Code has expired.",assignmentNotFound:"Assignment does not exist.",journeyNotFound:"Journey session does not exist.",connectionError:"Could not connect. Please check your network and try again.",generalError:"Something went wrong. Please try again.",nameRequired:"Please enter your name! 😊",nameTooShort:"Name must be at least 2 characters!",codeTooShort:"Please enter the full code (4 or 5 characters)"},common$1={close:"Close",cancel:"Cancel",back:"Back"},duplicate$1={checking:"Checking...",title:"This lesson has already been assigned",description:"This lesson has already been assigned with the following names:",more:"more",viewHistory:"View assignment history",assignNew:"Assign again"},player$6={loading:"Loading game...",unsupported:"Unsupported game type: {{type}}",notIntegrated:'Game "{{label}}" is not yet integrated with Assignment Manager.',tryAnother:"Please try another game type.",scoreUpdated:"Score updated!",resultSaved:"Assignment saved!",saveFailed:"Could not save result. Please try again.",invalidId:"Invalid assignment ID",notFound:"Assignment not found",unsupportedType:'Game type "{{type}}" is not supported',loadError:"An error occurred while loading the assignment",loadingTitle:"Loading assignment...",alreadyPlayedTitle:"You have already completed this assignment!",onceOnly:"Each student can only complete this assignment once.",previousResult:"Previous result:",playedAtLabel:"Time:",nameLabel:"Name:",contactTeacher:"If you need to redo it, please contact your teacher.",goBack:"Go back",defaultTitle:"Assignment",studentPrefix:"Student:"},result$3={excellent:"Excellent!",good:"Good!",fair:"Fair!",passed:"Passed",tryHarder:"Try harder",draw:"It's a draw!",winner:"🏆 {{name}} wins!",percentageComplete:"{{percentage}}% complete",timeTaken:"Time taken: <strong>{{duration}}</strong>",saving:"Saving results...",goHome:"Back to Home",duration:{seconds:"{{count}} seconds",minutes:"{{count}} minutes",mins_secs:"{{mins}}m {{secs}}s",s_short:"s",m_short:"m"}},details$1={joinCode:"Join code:",status:"Status:",expired:"Expired",submissionCount:"<strong>{{count}}</strong> students submitted",noSubmissions:"No students have submitted yet",sharePrompt:"Share code <strong>{{code}}</strong> with students to start",table:{stt:"No.",members:"Members",players:"Players",name:"Full Name",result:"Result",score:"Score",duration:"Time",submittedAt:"Submitted at"},viewDetail:"Details",viewDetailPro:"Details (FullGame)",downloadExcel:"Download Excel",downloadExcelFreeNote:"Free plan only includes the Overview sheet. Get FullGame to get the per-question Detail sheet too.",hideDetail
557:"Hide details",proFeature:"Feature available for FullGame accounts",itemDetailTitle:"ITEM DETAILS",questionNum:"Question {{index}}:",noTitle:"(No title)",noContent:"(No content)",imageAnswer:"Image",notDone:"Not done",correct:"✓ Correct",wrong:"✗ Wrong · Correct answer: <strong>{{answer}}</strong>",wrongChosen:"✗ Wrong choice ({{chosen}}) · Correct answer: <strong>{{correct}}</strong>",correctChosen:"✓ Correct ({{chosen}})",correctPaced:"✓ Correct · Chose <strong>{{chosenKey}}</strong>: {{chosenText}}",wrongPaced:"✗ Chose <strong>{{chosenKey}}</strong>: {{chosenText}} · Correct answer: <strong>{{correctKey}}</strong>: {{correctText}}",reports:{fullImage:"🖼️ View full report",fullQuiz:"🎯 View full report",proSuffix:" (FullGame)"},wrongAttempts:"❌ Wrong {{n}} times",pointUnit:"pt",attemptNum:"Attempt {{n}}:",decodeImage:"Decode image:",correctExcl:"Correct!",wrongExcl:"Wrong",matchHistory:"Match history",totalQuestions:"Total questions",scoreLabel:"Score",handSlashNote:"Fruit Slash does not save per-question details"},join$1={title:"Let's play! 🚀",journeyTitle:"🗺️ Let's go on a journey!",nameTitle:"What's your name? 👀",codeCaption:"Enter the code from your teacher (4-5 characters)",journeyCaption:"Enter the X + 4 digit code from your teacher",nameCaption:"So your teacher knows who you are",inputLabel:"Join Code",inputPlaceholder:"Enter 4-5 digit code",typingCode:"⌨️ Entering code...",clickHere:"👆 Click here and type the code!",finding:"Searching...",continue:"✅ Continue!",enterJourney:"🗺️ Enter journey!",enterPanorama:"🎨 Enter gallery room!",enterScanner:"📱 Open scanner",enterGame:"🎮 Join game!",back:"Back",nameLabel:"Your Name",namePlaceholder:"e.g. John Doe 😄",currentTask:"Your assignment 🎯",footer:"🔑 Code provided by teacher · Starts with X = Journey",platformName:"🌟 Innovating Teacher Platform"},history$1={title:"Assignment History",stats:"{{count}} assignments created",deleteExpiredBtn:"🗑️ Delete expired ({{count}}) — recommended",deleteExpiredTip:"Doing this helps keep the page running smoothly",endConfirm:`Are you sure you want to end "{{title}}"?
558
559Students will no longer be able to enter the code to join.`,deleteArchiveConfirm:`Are you sure you want to delete "{{title}}"?
560
561This session's results will be permanently deleted and cannot be recovered.`,empty:{title:"No assignments yet",description:'Go to "My Activities" and click "Assign" on a game to create an assignment',button:"Go to My Activities"},loadError:"Unable to load assignments. Please try again.",deleteError:"Unable to delete expired assignments. Please try again.",table:{stt:"No.",reminderName:"Reminder Name",lesson:"Lesson",codeLink:"Code / Link",status:"Status",statusEnded:"Ended",statusExpired:"Expired",submitted:"Submitted",studentCount:"SS",actions:"Actions",copyCode:"Copy code",copyLink:"Copy join link",viewDetail:"View details",endAssignment:"End assignment",deleteArchive:"Delete archived session"},deleteModal:{title:"🗑️ Delete Expired",successTitle:"✅ Deleted Successfully",successMsg:"Deleted {{count}} expired assignments and all related submissions.",confirmMsg:"You are about to delete {{count}} expired or ended assignments, along with all student submissions.",warning:"This action cannot be undone. Student score data will be permanently deleted.",deleting:"Deleting...",confirmBtn:"Confirm Delete"}},gameTypes$1={tug_of_war:{label:"Tug of War",instruction:"🪢 Enter names of 2 teams and start tug of war! Answer correctly to pull the rope to your side."},flip_puzzle:{label:"Flip Puzzle Game",instruction:"🧩 Flip puzzles by answering questions!"},quiz_game:{label:"Drag & Drop - Matching",instruction:'🎯 Drag labels to correct positions (or click to select), drag matching items in connecting mode. Click "Finish" when done!'},hand_slash_quiz:{label:"Fruit Slash Quiz",instruction:"✋ Use your hand (or mouse) to slash the correct answer as fruits fly up. Avoid touching bombs!"},wheel_quiz:{label:"Wheel Quiz",instruction:"🎡 Spin the wheel to choose a question and answer correctly to score points. Please complete all questions!"},interactive_video:{label:"Interactive Video",instruction:"🎬 Watch the video and answer questions that appear. Each correct answer earns you 1 point!"},crossword_puzzle:{label:"Crossword / Secret Key",instruction:"Click on the row name (1, 2, 3, ...) to open horizontal rows and find the red keyword!"},interactive_image:{label:"Interactive Image",instruction:"Click on the 📍 touch points on the image to view information or answer questions!"},head_tilt_quiz:{label:"Head Tilt Quiz",instruction:"🤔 Tilt your head left or right to choose answer A or B!"},paced_quiz:{label:"Paced Quiz",instruction:"⏱️ Read the question and choose the correct answer. Complete all questions to see your score!"},pose_quiz:{label:"ABC Exercise",instruction:"🧘 Watch the question, choose the correct answer according to the character's pose. Complete all to see your score!"},turn_based_game:{label:"Turn-based Game",instruction:"🎲 Enter player names, roll the dice and race to the finish! Answer correctly to overcome obstacles."},versus_game:{label:"Versus Game",instruction:"⚔️ Answer correctly to push the stick toward your opponent. Whoever reaches the mark first wins!"}},enAssignment={title:title$3,success:success$1,form:form$b,alerts:alerts$3,errors:errors$4,common:common$1,duplicate:duplicate$1,player:player$6,result:result$3,details:details$1,join:join$1,history:history$1,gameTypes:gameTypes$1},modal$2={title:"Chia sẻ cho giáo viên: {{title}}",audienceBadge:"Dành cho giáo viên khác — không phải học sinh",howItWorksTitle:"Cách hoạt động",step1:"Sao chép link bên dưới và gá»­i cho đồng nghiệp giáo viên",step2:"Giáo viên nhận link đăng nhập vào Giáo viên Đổi má
561»›i và mở link",step3:'Họ nhấn "Lưu về tài khoản" — bài sẽ được sao chép riêng vào tài khoản cá»§a họ',generating:"Đang tạo link...",copySuccess:"✓ Đã sao chép!",copyLink:"Sao chép link chia sẻ",revokeLink:"Thu hồi link",revoking:"Đang thu hồi...",note:"Bài chia sẻ luôn theo nội dung mới nhất: bạn chỉnh sá»­a rồi mở lại hộp thoại này là link tá»± cập nhật, không cần tạo link mới.",revokeNote:"Thu hồi sẽ vô hiệu hoá link: giáo viên đã nhận vẫn giữ bài, nhưng không tải lại bản mới được nữa."},claim$2={loading:"Đang tải...",notLoggedIn:{title:"Bạn chưa đăng nhập",description:"Hãy đăng nhập vào <strong>Giáo viên Đổi mới</strong> trước, rồi mới dán hoặc mở lại link này.",button:"Đăng nhập ngay"},notFound:{title:"Link không hợp lệ",description:"Link này không tồn tại hoặc đã bị thu hồi.",backLink:"Về trang chính"},expired:{title:"Link đã hết hạn",description:"Link chia sẻ chỉ có hiệu lá»±c 30 ngày. Hãy nhờ giáo viên tạo link mới.",backLink:"Về trang chính"},alreadyClaimed:{title:"Bạn đã lưu bài này rồi",description:"Bài đã có trong danh sách cá»§a bạn.",button:"Xem danh sách bài",reclaimButton:"Tải lại bản mới nhất",reclaiming:"Đang tải lại...",reclaimNote:"Dùng khi giáo viên chia sẻ đã sá»­a bài, hoặc khi bạn lỡ xoá bài và muốn lấy lại. Bài cÅ© sẽ được ghi đè, không tạo thêm bản trùng và không tốn thêm lượt."},success:{title:"Đã lưu thành công!",description:"Đang chuyển về danh sách bài...",updatedTitle:"Đã cập nhật bài!",updatedDescription:"Bài cá»§a bạn đã được thay bằng bản mới nhất. Đang chuyển về danh sách bài..."},preview:{defaultTitle:"Bài được chia sẻ",sharedBy:"Được chia sẻ bởi: <strong>{{name}}</strong>",defaultName:"Giáo viên",questions_one:"📝 1 câu hỏi",questions_other:"📝 {{count}} câu hỏi",timeLimit:"⏱ {{count}}s/câu",submitButton:"Lưu về tài khoản",submitting:"Đang lưu...",footerNote:"Bài sẽ được sao chép vào tài khoản cá»§a bạn và tính vào quota."}},errors$3={createFailed:"Không thể tạo link. Vui lòng thá»­ lại.",revokeFailed:"Không thể thu hồi link.",generalError:"Đã có lỗi xảy ra. Vui lòng thá»­ lại."},viTeacherShare={modal:modal$2,claim:claim$2,errors:errors$3},modal$1={title:"Share with teacher: {{title}}",audienceBadge:"For other teachers — not for students",howItWorksTitle:"How it works",step1:"Copy the link below and send it to a fellow teacher",step2:"The teacher logs in to Innovating Teacher and opens the link",step3:'They click "Save to Account" — the lesson is copied into their own account',generating:"Creating link...",copySuccess:"✓ Copied!",copyLink:"Copy share link",revokeLink:"Revoke link",revoking:"Revoking...",note:"The shared lesson always reflects your latest version: edit it, reopen this dialog, and the link updates itself — no need to create a new one.",revokeNote:"Revoking disables the link: teachers who already saved the lesson keep it, but can no longer pull your latest version."},claim$1={loading:"Loading...",notLoggedIn:{title:"You are not logged in",description:"Please log in to <strong>Innovating Teacher</strong> first, then paste or reopen this link.",button:"Log in now"},notFound:{title:"Invalid Link",description:"This link does not exist or has been revoked.",backLink:"Back to Home"},expired:{title:"Link Expired",description:"Share links are only valid for 30 days. Please ask the teacher for a new link.",backLink:"Back to Home"},alreadyClaimed:{title:"You already saved this game",description:"This game is already in your list.",button:"View my games",reclaimButton:"Reload the latest version",reclaiming:"Reloading...",reclaimNote:"Use this if the sharing teacher has edited the lesson, or if you deleted it and want it back. Your copy is overwritten — no duplicate is created and no extra quota is used."},success:{title:"Saved successfully!",description:"Redirecting to your game list...",updatedTitle:"Lesson updated!",updatedDescription:"Your copy has been replaced with the latest version. Redirecting to your game list..."},preview:{defaultTitle:"Shared Game",sharedBy:"Shared by: <strong>{{name}}</strong>",defaultName:"Teacher",questions_one:"📝 1 question",questions_other:"📝 {{count}} questions",timeLimit:"⏱ {{count}}s/question",submitButton:"Save to Account",submitting:"Saving...",footerNote:"Game will be copied to your account and count towards your quota."}},errors$2={createFailed:"Could not create link. Please try again.",revokeFailed:"Could not revoke link.",generalError:"Something went wrong. Please try again."},enTeacherShare={modal:modal$1,claim:claim$1,errors:errors$2},page$8={title:"⚔️ Game Đối Kháng",sidebar:{myGames:"Bài cá»§a tôi",createNew:"Tạo bài mới",rooms:"Phòng chÆ¡i",upgradeLabel:"Nâng Cấp Lẻ",helpLabel:"Hướng dẫn sá»­ dụng"},help:{title:"Hướng dẫn Game Đối Kháng",description:"Xem video hướng dẫn cách tạo và sá»­ dụng Game Đối Kháng"},quota:{proPermanent:"Ko giới hạn vÄ©nh viễn",proDaysRemaining:"{{days}} ngày ko giới hạn",usedCount:"Đã dùng {{current}}/{{total}} bài",limitReached:"Đã đạt giới hạn dùng thá»­"}},myGames$9={title:"⚔️ Bài chÆ¡i cá»§a tôi",subtitle:"Quản lý các bài Game Đối Kháng đã tạo",pinNote:"Ghim bài để luôn truy cập được kể cả khi hết hạn",pinnedCount:"({{current}}/{{limit}} đã ghim)",packageExpired:"⚠️ Gói đã hết hạn!",renew:"Gia hạn",empty:"Chưa có bài chÆ¡i nào",emptyDesc:"Tạo bài đầu tiên để học sinh đấu nhau!",createFirst:"➕ Tạo bài đầu tiên",lockedTip:"Gia hạn để mở bài này",questionsCount:"{{count}}
561 câu hỏi",winSteps:"Thắng: {{count}} bước",rooms:"Phòng chơi",roomsTooltip:"Xem danh sách phòng chơi",edit:"Sửa",editTooltip:"Chỉnh sửa",teacherShare:"Chia sẻ GV",shareTooltip:"Chia sẻ cho GV khác",delete:"Xóa",openRoomsBanner:"🟢 Phòng đang mở:",none:"Không có",roomLabel:"Phòng:",lessonLabel:"Bài:",refreshRooms:"🔄 Cập nhật DS phòng",loadDemo:"🎁 Dùng thử bài mẫu",loadingDemo:"Đang nạp...",demoDesc:"Bài mẫu gồm 8 câu hỏi có sẵn — nạp vào tài khoản để mở phòng chơi thử ngay.",pinLimitAlert:"Chỉ ghim được tối đa {{limit}} bài",deleteDialog:{title:"Xóa bài chơi?",content:"Bài chơi sẽ bị xóa vĩnh viễn. Bạn có chắc không?",cancel:"Hủy",confirm:"Xóa"},toast:{loadError:"Lỗi tải danh sách bài",deleteSuccess:"Đã xóa bài chơi",deleteError:"Lỗi khi xóa bài",demoSuccess:"Đã thêm bài mẫu vào tài khoản. Mở phòng để chơi thử ngay!",demoError:"Không thêm được bài mẫu. Vui lòng thử lại."}},matchRoom$1={track:"Bài {{num}}",opponent:"Đối thủ",student:"Học sinh",player1:"Người chơi 1",player2:"Người chơi 2",you:"(bạn)",sessionNotFoundTitle:"Trận đã kết thúc",sessionNotFoundDesc:"Không tìm thấy trận đấu này. Có thể đã kết thúc hoặc hết hạn.",backHome:"Về trang chủ",victoryTitle:"🏆 Chiến thắng!",defeatTitle:"😔 Thất bại",stoppedTitle:"Trận bị dừng",youWon:"Bạn thắng!",youLost:"Bạn thua!",teacherStopped:"Giáo viên đã ngừng trận đấu này.",matchResultTitle:"Kết quả trận đấu",correctAnswers:"câu đúng",surrenderTitle:"Đầu hàng?",surrenderDesc:"Bạn sẽ thua trận này và đối thủ sẽ thắng ngay lập tức.",continue:"Tiếp tục",surrender:"Đầu hàng",cacheHint:"Nếu bị đơ máy Hãy nhấn 2 phím Ctrl và H rồi bấm 🗑️",surrenderBtn:"🏳️ Đầu hàng",pushImageAlt:"2 vận động viên đẩy gậy",oppDisconnected:"⏳ Đối thủ mất kết nối — đang chờ quay lại ({{seconds}}s)",matchPausedHint:"Trận tạm dừng, bạn chưa thể ghi điểm lúc này",frozenTimer:"❄️ Đóng băng {{seconds}}s...",loadingQuestion:"Đang tải câu hỏi...",confirm:"Xác nhận",shortAnswerPlaceholder:"Nhập đáp án...",trueLabel:"Đ",falseLabel:"S",fillInBlank:"Điền từ",loadingSpectator:"Đang tải...",backToRoom:"← Quay lại phòng"},form$a={createTitle:"⚔️ Tạo Game Đối Kháng mới",editTitle:"✏️ Chỉnh sửa Game Đối Kháng",titleLabel:"Tiêu đề bài chơi",winStepsLabel:"Số bước để thắng: {{steps}}",minQuestionsTip:"(khuyến nghị tối thiểu {{min}} câu hỏi)",winStepsDesc:"HS đẩy gậy sang phía đối thủ khi trả lời đúng. Ai đạt {{steps}} bước trước thì thắng.",freezeDurationLabel:"❄️ Thời gian đóng băng khi trả lời sai: {{seconds}}s",freezeDurationDesc:"HS trả lời sai sẽ bị khóa {{seconds}} giây trước khi được trả lời lại.",shuffleOptions:"Đảo thứ tự đáp án",shuffleOptionsDesc:"Mỗi lần hiện câu hỏi, thứ tự A/B/C/D sẽ được xáo ngẫu nhiên — tránh HS nhớ vị trí để gian lận",minQuestionsWarning:"— khuyến nghị ít nhất {{min}} câu",bgmTitle:"🎵 Nhạc nền mặc định",bgmCustom:"Nhạc riêng (FullGame):",bgmDesc:"GV có thể đổi bài nhạc trong khi chơi.",bgmMyMusic:"Nhạc của tôi",bgmTrack:"Bài {{num}}",maxQuestionsWarning:"Tối đa {{max}} câu hỏi",excelSuccess:"Đã thêm {{count}} câu từ Excel",fontSizeQuestion:"Cỡ chữ câu hỏi:",fontSizeAnswer:"Cỡ chữ đáp án:",imgSizeQuestion:"Cỡ ảnh câu hỏi:",imgSizeAnswer:"Cỡ ảnh đáp án:",sizeSmall:"Bé",sizeStandard:"Chuẩn",sizeLarge:"Lớn",sizeXLarge:"Rất lớn",sizeHuge:"Cực đại",statementsCount:"{{count}} mệnh đề",fillInBlankFormat:"Điền từ: {{answer}}",questionsSectionTitle:"Câu hỏi ({{count}})",clearAll:"Xóa tất cả",pickFromBank:"🗃️ Chọn từ Kho hoặc AI",pickFromLesson:"📂 Từ bài có sẵn",manualInput:"✏️ Nhập thủ công",sizeHint:"Áp dụng cho câu chưa chỉnh riêng",listHeader:"Danh sách câu hỏi",emptyTitle:"Chưa có câu hỏi nào",emptyDesc:"Thêm câu hỏi để 2 HS cùng trả lời và đẩy gậy",cancel:"Hủy",save:"Lưu bài chơi",saving:"Đang lưu...",lessonPickerTitle:"Chọn bài để lấy câu hỏi",bankModalTitle:"Chọn câu hỏi từ Kho",toast:{loadError:"Lỗi tải dữ liệu bài chơi",noValidQuestions:"Không có câu hỏi hợp lệ",addedSkippedLimit:"Đã thêm {{valid}} câu, bỏ qua {{skipped}} câu do đạt giới hạn {{max}} câu",addedSkippedInvalid:"Đã thêm {{valid}} câu, bỏ qua {{skipped}} câu không hợp lệ",noMatchingLessonQuestions:"Không có câu nào phù hợp ({{count}} câu bị bỏ qua).",addedFromLessonSkipped:'Đã thêm {{added}} câu từ "{{title}}". Bỏ qua {{skipped}} câu không tương thích.',addedFromLesson:'Đã thêm {{added}} câu từ "{{title}}".',allowedManualLimit:"Chỉ thêm được {{allowed}} câu do đạt giới hạn {{max}} câu",questionUpdated:"Đã cập nhật câu hỏi",questionsAdded:"Đã thêm {{count}} câu hỏi",questionDeleted:"Đã xóa câu hỏi {{num}}",confirmDeleteAll:"Xóa tất cả câu hỏi?",allQuestionsDeleted:"Đã xóa tất cả câu hỏi",minOneQuestionRequired:"Vui lòng thêm ít nhất 1 câu hỏi",libraryCategoryRequired:"Vui lòng chọn Cấp học, Môn học và Khối lớp để đưa lên Thư viện cộng đồ
561ng.",saveError:"Lỗi lưu bài chơi"}},lobby$1={checkingMatch:"Đang kiểm tra trận của bạn...",roomClosedTitle:"Phòng đã đóng",roomClosedByTeacher:"Giáo viên đã đóng phòng chơi này.",roomExpired:"Phòng chơi này đã hết hạn.",askTeacherForCode:"Vui lòng hỏi giáo viên để được cấp mã mới.",gameTitle:"⚔️ Game Đối Kháng",hello:"Xin chào, <1>{{name}}</1>!",chooseAvatar:"Chọn avatar cho mình:",title:"⚔️ Phòng chờ",waitingForOpponent:"⏳ Đang chờ <1>{{name}}</1> trả lời...",cancel:"Hủy",waitingPlayersCount:"Người chơi đang chờ ({{count}})",connecting:"Đang kết nối...",noOneWaiting:"Chưa có ai đang chờ...",waitForClassmate:"Hãy đợi bạn cùng lớp vào nhé!",challengeBtn:"⚔️ Thách đấu",allInRoom:"Tất cả trong phòng ({{count}}):",challengeModalTitle:"⚔️ Thách đấu!",challengeModalDesc:"muốn đấu với bạn. Chấp nhận không?",reject:"Từ chối",accept:"⚔️ Chấp nhận!",errors:{cannotJoin:"Không thể vào phòng chờ. Vui lòng thử lại.",cannotStart:"Không thể bắt đầu trận đấu. Vui lòng thử lại.",acceptError:"Lỗi khi chấp nhận thách đấu."}},spectator$1={title:"⚔️ Phòng chơi: {{title}}",subtitle:"Bài: {{gameTitle}} · {{count}} học sinh trong phòng",unnamed:"Chưa đặt tên",back:"Quay lại",closeRoom:"Đóng phòng",roomClosedBanner:"🔒 Phòng này đã bị đóng. Học sinh không thể vào bằng mã cũ nữa.",roomExpiredBanner:"🔒 Phòng này đã hết hạn. Học sinh không thể vào bằng mã cũ nữa.",joinCode:"MÃ THAM GIA",joinLink:"LINK THAM GIA",copied:"Đã sao chép!",copyCode:"Sao chép mã",copyLink:"Sao chép link",waitingTitle:"Đang chờ ({{count}})",noWaitingStudents:"Chưa có học sinh nào đang chờ...",activeMatchesTitle:"Trận đang diễn ra ({{count}})",clickToSpectate:"· Click để xem trực tiếp",noActiveMatches:"Chưa có trận nào đang diễn ra...",finishedTitle:"Đã xong ({{count}} trận)",matchStatusFinished:"✅ Kết thúc",matchStatusFighting:"⚔️ Đang đấu",stopMatch:"⏹ Ngừng",winnerAnnounce:"🏆 {{name}} thắng",winCondition:"Thắng khi đạt {{steps}} bước",deleteDialog:{title:"⚠️ Đóng phòng và xóa dữ liệu?",intro:"Hành động này sẽ:",step1:"Ngừng tất cả trận đang diễn ra",step2:"Xóa toàn bộ dữ liệu phòng chờ",step3:"Học sinh sẽ không thể vào phòng nữa",note:"Kết quả các trận đã hoàn thành vẫn được lưu lại.",cancel:"Hủy",confirm:"Đóng phòng",closing:"Đang đóng..."}},rooms$1={title:"🏟️ Phòng chơi",refreshRooms:"🔄 Cập nhật DS phòng",createRoom:"Tạo phòng",empty:"Chưa có phòng nào",emptyDesc:'Bấm "Tạo phòng" ở trên để bắt đầu!',statusOpen:"🟢 Đang mở",codeLabel:"Mã: {{code}}",expLabel:"HH: {{date}}",createdLabel:"Tạo: {{date}}",openRoomBtn:"🚀 Mở phòng",openingBtn:"⏳ Đang mở...",enterRoomBtn:"👁️ Vào phòng",closeRoomBtn:"🔒 Đóng phòng",closingBtn:"⏳ Đang đóng...",limit3RoomsError:"Bạn đang mở 3 phòng ở các bài khác, vui lòng đóng bớt trước khi tạo thêm."},viVersusGame={page:page$8,myGames:myGames$9,matchRoom:matchRoom$1,form:form$a,lobby:lobby$1,spectator:spectator$1,rooms:rooms$1},page$7={title:"⚔️ Versus Game",sidebar:{myGames:"My Games",createNew:"Create New",rooms:"Game Rooms",upgradeLabel:"Unlock Feature",helpLabel:"How to use"},help:{title:"Versus Game Guide",description:"Watch the tutorial video on how to create and use Versus Game"},quota:{proPermanent:"FullGame Permanent",proDaysRemaining:"{{days}} FullGame days left",usedCount:"Used {{current}}/{{total}} games",limitReached:"Trial limit reached"}},myGames$8={title:"⚔️ My Games",subtitle:"Manage your Versus Games",pinNote:"Pin games to keep them accessible even after expiry",pinnedCount:"({{current}}/{{limit}} pinned)",packageExpired:"⚠️ Package expired!",renew:"Renew",empty:"No games yet",emptyDesc:"Create your first game for students to compete!",createFirst:"➕ Create First Game",lockedTip:"Upgrade to unlock this game",questionsCount:"{{count}} questions",winSteps:"Win: {{count}} steps",rooms:"Rooms",roomsTooltip:"View game rooms",edit:"Edit",editTooltip:"Edit game",teacherShare:"Teacher Share",shareTooltip:"Share with other teachers",delete:"Delete",openRoomsBanner:"🟢 Open rooms:",none:"None",roomLabel:"Room:",lessonLabel:"Lesson:",refreshRooms:"🔄 Refresh room list",loadDemo:"🎁 Try demo lesson",loadingDemo:"Loading...",demoDesc:"Demo lesson includes 8 pre-made questions — add to your account to test playing immediately.",pinLimitAlert:"Can only pin up to {{limit}} games",deleteDialog:{title:"Delete game?",content:"This game will be permanently deleted. Are you sure?",cancel:"Cancel",confirm:"Delete"},toast:{loadError:"Error loading games",deleteSuccess:"Game deleted successfully",deleteError:"Error deleting game",demoSuccess:"Demo lesson added to account. Open a room to try playing now!",demoError:"Failed to add demo lesson. Please try again."}},matchRoom={track:"Track {{num}}",opponent:"Opponent",student:"Student",player1:"Player 1",player2:"Player 2",you:"(you)",sessionNotFoundTitle:"Match ended",sessionNotFoundDesc:"Match session not found. It may have finished or expired.",backHome:"Back to Home",victoryTitle:"🏆 Victory!",defeatTitle:"😔 Defeat",stoppedTitle:"Match Stopped",youWon:"You Won!",youLost:"You Lost!",teacherStopped:"The teacher has stopped this match.",matchResultTitle:"Match Result",correctAnswers:"correct",surrenderTitle:"Surrender?",surrenderDesc:"You will forfeit this match and your opponent will win immediately.",continue:"Continue",surrender:"Surrender",cac
561heHint:"If your device freezes, press Ctrl + H and click 🗑️",surrenderBtn:"🏳️ Surrender",pushImageAlt:"2 stick pushing athletes",oppDisconnected:"⏳ Opponent disconnected — waiting for reconnection ({{seconds}}s)",matchPausedHint:"Match paused, you cannot score points right now",frozenTimer:"❄️ Frozen for {{seconds}}s...",loadingQuestion:"Loading question...",confirm:"Confirm",shortAnswerPlaceholder:"Type your answer...",trueLabel:"T",falseLabel:"F",fillInBlank:"Fill in the blank",loadingSpectator:"Loading...",backToRoom:"← Back to room"},form$9={createTitle:"⚔️ Create New Versus Game",editTitle:"✏️ Edit Versus Game",titleLabel:"Game title",winStepsLabel:"Steps to win: {{steps}}",minQuestionsTip:"(recommended minimum {{min}} questions)",winStepsDesc:"Students push the stick toward their opponent on correct answers. First to reach {{steps}} steps wins.",freezeDurationLabel:"❄️ Freeze time on wrong answer: {{seconds}}s",freezeDurationDesc:"Students answering incorrectly will be frozen for {{seconds}} seconds before answering again.",shuffleOptions:"Shuffle answer options",shuffleOptionsDesc:"Randomize option order on each question to prevent memorizing positions",minQuestionsWarning:"— recommended at least {{min}} questions",bgmTitle:"🎵 Default background music",bgmCustom:"Custom music (FullGame):",bgmDesc:"Teachers can switch music tracks during the game.",bgmMyMusic:"My music",bgmTrack:"Track {{num}}",maxQuestionsWarning:"Maximum {{max}} questions",excelSuccess:"Added {{count}} questions from Excel",fontSizeQuestion:"Question font size:",fontSizeAnswer:"Answer font size:",imgSizeQuestion:"Question image size:",imgSizeAnswer:"Answer image size:",sizeSmall:"Small",sizeStandard:"Standard",sizeLarge:"Large",sizeXLarge:"Extra large",sizeHuge:"Huge",statementsCount:"{{count}} statements",fillInBlankFormat:"Fill in the blank: {{answer}}",questionsSectionTitle:"Questions ({{count}})",clearAll:"Clear all",pickFromBank:"🗃️ Pick from Bank or AI",pickFromLesson:"📂 From existing lesson",manualInput:"✏️ Manual input",sizeHint:"Applies to questions without custom sizes",listHeader:"Questions list",emptyTitle:"No questions yet",emptyDesc:"Add questions for both students to answer and push the stick",cancel:"Cancel",save:"Save game",saving:"Saving...",lessonPickerTitle:"Select lesson to extract questions",bankModalTitle:"Select questions from Bank",toast:{loadError:"Error loading game data",noValidQuestions:"No valid questions found",addedSkippedLimit:"Added {{valid}} questions, skipped {{skipped}} questions due to {{max}} questions limit",addedSkippedInvalid:"Added {{valid}} questions, skipped {{skipped}} invalid questions",noMatchingLessonQuestions:"No matching questions found ({{count}} questions skipped).",addedFromLessonSkipped:'Added {{added}} questions from "{{title}}". Skipped {{skipped}} incompatible questions.',addedFromLesson:'Added {{added}} questions from "{{title}}".',allowedManualLimit:"Only added {{allowed}} questions due to {{max}} questions limit",questionUpdated:"Question updated",questionsAdded:"Added {{count}} questions",questionDeleted:"Deleted question {{num}}",confirmDeleteAll:"Delete all questions?",allQuestionsDeleted:"Deleted all questions",minOneQuestionRequired:"Please add at least 1 question",libraryCategoryRequired:"Please select Grade level, Subject and Grade to publish to Community Library.",saveError:"Error saving game"}},lobby={checkingMatch:"Checking your match...",roomClosedTitle:"Room Closed",roomClosedByTeacher:"The teacher has closed this room.",roomExpired:"This room has expired.",askTeacherForCode:"Please ask your teacher for a new join code.",gameTitle:"⚔️ Versus Game",hello:"Hello, <1>{{name}}</1>!",chooseAvatar:"Choose your avatar:",title:"⚔️ Waiting Lobby",waitingForOpponent:"⏳ Waiting for <1>{{name}}</1> to respond...",cancel:"Cancel",waitingPlayersCount:"Waiting players ({{count}})",connecting:"Connecting...",noOneWaiting:"No one is waiting...",waitForClassmate:"Wait for your classmates to join!",challengeBtn:"⚔️ Challenge",allInRoom:"All in room ({{count}}):",challengeModalTitle:"⚔️ Challenge!",challengeModalDesc:"wants to battle you. Accept?",reject:"Decline",accept:"⚔️ Accept!",errors:{cannotJoin:"Could not join lobby. Please try again.",cannotStart:"Could not start match. Please try again.",acceptError:"Error accepting challenge."}},spectator={title:"⚔️ Game room: {{title}}",subtitle:"Lesson: {{gameTitle}} · {{count}} students in room",unnamed:"Untitled",back:"Back",closeRoom:"Close room",roomClosedBanner:"🔒 This room has been closed. Students can no longer join using the old code.",roomExpiredBanner:"🔒 This room has expired. Students can no longer join using the old code.",joinCode:"JOIN CODE",joinLink:"JOIN LINK",copied:"Copied!",copyCode:"Copy code",copyLink:"Copy link",waitingTitle:"Waiting ({{count}})",noWaitingStudents:"No students waiting yet...",activeMatchesTitle:"Active matches ({{count}})",clickToSpectate:"· Click to spectate live",noActiveMatches:"No active matches right now...",finishedTitle:"Finished ({{count}}
561 matches)",matchStatusFinished:"✅ Finished",matchStatusFighting:"⚔️ Fighting",stopMatch:"⏹ Stop",winnerAnnounce:"🏆 {{name}} won",winCondition:"Wins upon reaching {{steps}} steps",deleteDialog:{title:"⚠️ Close room and delete data?",intro:"This action will:",step1:"Stop all active matches",step2:"Delete all lobby data",step3:"Students will no longer be able to enter",note:"Completed match results are still preserved.",cancel:"Cancel",confirm:"Close room",closing:"Closing..."}},rooms={title:"🏟️ Game Rooms",refreshRooms:"🔄 Refresh room list",createRoom:"Create room",empty:"No rooms yet",emptyDesc:'Click "Create room" above to get started!',statusOpen:"🟢 Open",codeLabel:"Code: {{code}}",expLabel:"Exp: {{date}}",createdLabel:"Created: {{date}}",openRoomBtn:"🚀 Open room",openingBtn:"⏳ Opening...",enterRoomBtn:"👁️ Enter room",closeRoomBtn:"🔒 Close room",closingBtn:"⏳ Closing...",limit3RoomsError:"You currently have 3 open rooms in other lessons, please close one before creating another."},enVersusGame={page:page$7,myGames:myGames$8,matchRoom,form:form$9,lobby,spectator,rooms},page$6={title:"Paper Mode",subtitle:"Quét thẻ giấy — Plickers Style",description:"Học sinh dùng thẻ giấy in sẵn, giáo viên quét bằng điện thoại từ xa"},dashboard$1={title:"Phiên quét của tôi",newSession:"Tạo phiên mới",manageClasses:"Quản lý lớp",noSessions:"Chưa có phiên quét nào",noSessionsDesc:"Tạo phiên mới để bắt đầu quét thẻ giấy",status:{draft:"Nháp",active:"Đang chạy",completed:"Hoàn thành"},actions:{edit:"Chỉnh sửa",start:"Bắt đầu quét",results:"Xem kết quả",duplicate:"Nhân bản",delete:"Xóa",confirmDelete:"Bạn có chắc muốn xóa phiên này?"}},createSession$1={title:"Tạo phiên quét mới",sessionTitle:"Tên phiên",sessionTitlePlaceholder:"VD: Kiểm tra Toán chương 1",selectClass:"Chọn lớp",selectClassPlaceholder:"Chọn lớp học...",noClasses:"Chưa có lớp nào. Vui lòng tạo lớp trước.",createClass:"Tạo lớp mới",addQuestions:"Thêm câu hỏi",addFromBank:"Thêm từ Ngân hàng câu hỏi",addManual:"Thêm thủ công",questionCount:"{{count}} câu hỏi",save:"Lưu phiên",cancel:"Hủy",errors:{titleRequired:"Vui lòng nhập tên phiên",classRequired:"Vui lòng chọn lớp",questionsRequired:"Cần ít nhất 1 câu hỏi"}},classes$1={title:"🏫 Lớp học của tôi",btnAdvanced:"⚙️ Quản lý nâng cao",createClass:"Tạo lớp mới",className:"Tên lớp",studentCount:"{{count}} học sinh",noClasses:"Chưa có lớp nào",noClassesDesc:"Tạo lớp mới và thêm danh sách học sinh",actions:{scan:"Quét"},defaultRosterName:"Danh sách lớp",statsSummary:"📝 {{questions}} câu · 🧑‍🎓 {{students}} hs",dialogEditTitle:"Sửa lớp: {{name}}",labelStudentList:"Danh sách học sinh (mỗi tên 1 dòng - có thể copy từ Excel)",placeholderStudentList:`Nguyễn Văn A
562Trần Thị B
563Lê Văn C`,cardNo:"Thẻ {{number}}",editHint:"Đổi thứ tự danh sách thì số thẻ đổi theo — chỉ cần chiếu danh sách lên cho học sinh đổi thẻ cho nhau, không phải in lại.",maxStudentsHint:"Tối đa {{max}} học sinh mỗi lớp.",errorOverLimit:"Danh sách có {{count}} học sinh, vượt quá tối đa {{max}}. Hãy bớt bớt rồi lưu lại.",btnCancel:"Hủy",btnSave:"Lưu",btnSaving:"Đang lưu...",successUpdate:"Đã cập nhật lớp",errorSave:"Lưu thất bại",errorName:"Vui lòng nhập tên lớp",description:"Danh sách lớp <strong>dùng chung</strong> cho mọi tính năng cần lớp học — sửa một nơi, các nơi khác thấy ngay. Bấm <strong>Quét</strong> để bắt đầu chấm bài.",btnCreateFirst:"+ Tạo lớp đầu tiên",labelStudentCount:"{{count}} học sinh",labelClassName:"Tên lớp",dialogCreateTitle:"Tạo lớp mới",dialogDeleteTitle:"Xóa lớp học",dialogDeleteDesc:"Lớp sẽ bị xóa vĩnh viễn. Hành động này không thể hoàn tác.",btnConfirmDelete:"Xóa",tooltipEdit:"Sửa lớp",tooltipDelete:"Xóa lớp",errorMinStudent:"Lớp phải có ít nhất 1 học sinh",errorLoad:"Không tải được danh sách lớp",errorDelete:"Xóa thất bại",successCreate:"Đã tạo lớp mới",successDelete:"Đã xóa lớp",hintMaxStudents:"Mỗi tên 1 dòng. Tối đa {{max}} học sinh mỗi lớp.",btnExportRoster:"In danh sách",btnExportingRoster:"Đang xuất...",tooltipExportRoster:"Xuất Excel: STT thẻ + Tên HS",noCardWarning:"Danh sách có {{count}} em, nhưng bộ thẻ PDF chỉ có {{max}} thẻ. Các em từ số {{max}} trở đi chưa có thẻ giấy — in thêm thẻ hoặc bớt bớt danh sách."},roster$1={title:"Danh sách học sinh — {{className}}",addStudent:"Thêm học sinh",bulkImport:"Nhập hàng loạt",cardNumber:"Số thẻ",studentName:"Họ tên",note:"Ghi chú",noStudents:"Chưa có học sinh nào",noStudents
563Desc:"Thêm học sinh hoặc nhập hàng loạt",actions:{edit:"Sửa",delete:"Xóa",confirmDelete:"Xóa học sinh {{name}}?"},bulkImportModal:{title:"Nhập hàng loạt học sinh",description:"Nhập mỗi dòng: Số thẻ, Họ tên (cách nhau bằng dấu phẩy hoặc tab)",placeholder:`1, Nguyễn Văn A
5642, Trần Thị B
5653, Lê Văn C`,import:"Nhập",cancel:"Hủy",result:"Đã nhập {{imported}} học sinh, bỏ qua {{skipped}}"}},print$1={title:"In thẻ — {{className}}",description:"In 2 thẻ A5 trên mỗi trang A4. Thẻ có thể tái sử dụng cả năm.",printButton:"In thẻ",instructions:"Hướng dẫn:",step1:"Xoay thẻ để đáp án hướng LÊN TRÊN",step2:"A = giữ nguyên, B = xoay 90° trái, C = lật ngược, D = xoay 90° phải",step3:"Giáo viên quét bằng camera điện thoại từ 2-4 mét, có thể quét nhiều thẻ cùng lúc",cardLabel:"Thẻ #{{number}} — {{name}}",answerGuide:"A ↑  B →  C ↓  D ←"},session$1={scanning:"Đang quét",results:"Kết quả",question:"Câu {{current}}/{{total}}",scanned:"Đã quét: {{count}}/{{total}}",nextQuestion:"Câu tiếp",prevQuestion:"Câu trước",showResults:"Xem kết quả",endSession:"Kết thúc phiên",confirmEnd:"Kết thúc phiên quét? Kết quả sẽ được lưu lại.",openScanner:"Mở máy quét",scannerHint:"Mở trên điện thoại để quét thẻ",projector:"Chiếu lên màn hình"},results$1={titlePrefix:"Kết quả —",overallRate:"Tỷ lệ đúng tổng thể",studentScores:"Điểm từng học sinh",questionAnalysis:"Phân tích câu hỏi",rank:"Hạng",name:"Họ tên",correct:"Đúng",score:"Điểm",export:"Xuất Excel",noResults:"Chưa có kết quả",answerDistribution:"Phân bổ câu trả lời",correctRate:"Tỷ lệ đúng: {{rate}}%"},scan$1={connecting:"Đang kết nối...",invalidSession:"Phiên không hợp lệ",sessionEnded:"Phiên đã kết thúc",cameraError:"Không thể truy cập camera",cameraPermission:"Vui lòng cho phép truy cập camera",cameraWaitingHint:'Bấm "Cho phép" ở hộp thoại vừa hiện. Camera sẽ tự bật ngay sau đó.',noPreviewMode:"📷 Máy này không hiện được hình xem trước, nhưng vẫn đang quét bình thường. Cứ giơ máy về phía các em như thường lệ.",tapToStart:"Chạm vào màn hình để bắt đầu quét",tapToStartHint:"Camera đã sẵn sàng. Ứng dụng đang mở cần bạn chạm một cái để hiện hình.",cameraPermissionHint:'Nếu bạn đã bấm "Cho phép" mà vẫn thấy màn hình này, hãy bấm "Thử lại". Nếu vẫn không được, mở trang bằng trình duyệt Chrome/Safari thay vì Zalo, hoặc vào Cài đặt điện thoại → Ứng dụng → Zalo → Quyền → bật Camera.',cameraBlockedHint:'Quyền camera đang bị chặn nên bấm "Thử lại" sẽ không có tác dụng. Cách sửa: vào Cài đặt điện thoại → Ứng dụng → Zalo → Quyền → bật Camera, rồi mở lại mã QR. Nhanh hơn: bấm dấu "..." góc trên bên phải → "Mở bằng trình duyệt" và dùng Chrome/Safari.',cameraBusy:"Camera đang được ứng dụng khác sử dụng",cameraBusyHint:'Hãy đóng các ứng dụng đang dùng camera (máy ảnh, cuộc gọi video, ứng dụng quét mã...) rồi bấm "Thử lại".',cameraNotFound:"Không tìm thấy camera trên thiết bị này",openInBrowser:{title:"✅ Cách chắc chắn nhất: mở bằng trình duyệt",ifStuck:'⏳ Chờ lâu hoặc bấm "Cho phép" mà không được?',step1:"Bước 1: Bấm dấu ⋯ (ba chấm) ở góc trên bên phải",step2:'Bước 2: Chọn "Mở bằng trình duyệt"',copyLink:"Hoặc chép link, dán vào Chrome/Safari",copied:"Đã chép link — mở Chrome rồi dán vào"},engineLoading:"Đang chuẩn bị máy quét...",engineLoadingHint:"Tải bộ nhận diện lần đầu (khoảng 13MB). Lần sau sẽ nhanh hơn.",engineInit:"Đang khởi động...",engineError:"Không tải được bộ nhận diện. Kiểm tra kết nối mạng rồi thử lại.",retry:"Thử lại",questionLabel:"Câu {{current}}/{{total}}",viewingResults:"Đang xem kết quả",finish:"Kết thúc phiên",finishConfirm:"Dừng nhận quét cho phiên này. Vào trang điều khiển để lưu và xem kết quả.",cancel:"Hủy",endError:"Không kết thúc được phiên. Thử lại.",ended:"Đã kết thúc phiên quét",endedHint:"Mở trang điều khiển phiên trên máy tính để lưu và xem kết quả chi tiết.",exit:"Thoát",prevQuestion:"Câu trước",commitReveal:"🔒 Chốt câu · Hiện đáp án",commitSurvey:"🔒 Chốt câu · Hiện ý kiến lớp",goNextQuestion:"Sang câu {{next}} ›",cardNum:"Thẻ {{num}}",debugLogAria:"Xem nhật ký chẩn đoán",noLog:"(chưa có log)",copyLogSuccess:"Đã copy log",copyLogFallback:"Đã copy log (fallback)",cameraDetail:"Chi tiết: {{error}}",remindScreenShown:"✅ Đã chiếu tên lên màn hình",remindPendingBtn:"🔔 Nhắc {{count}} em chưa quét",pendingListAria:"Xem danh sách em chưa quét",stats:{title:"Thống kê câu này",answered:"đã trả lời",correctIs:"Đáp án đúng:",surveyMode:"Khảo sát — không có đáp án đúng",showVoters:"Hiển thị người chọn",hideVoters:"Ẩn người chọn"}},sidebar$3={classes:"Lớp học",questionSets:"Bộ câu hỏi",results:"Lịch sử quét",print:"In bộ thẻ"}
565,resultsHistory$1={title:"📊 Lịch sử quét",sortDateDesc:"Ngày quét: mới nhất",sortDateAsc:"Ngày quét: cũ nhất",sortRateDesc:"Tỉ lệ đúng: cao nhất",sortRateAsc:"Tỉ lệ đúng: thấp nhất",sortClassNameAsc:"Tên lớp: A → Z",deleteAllHistory:"Xóa toàn bộ lịch sử (nên làm để tối ưu tốc độ)",loading:"Đang tải...",emptyTitle:"Chưa có lịch sử quét",emptyDesc:"Hãy bắt đầu quét bộ thẻ để xem kết quả tại đây.",surveyBadge:"📊 Khảo sát",viewResults:"Xem kết quả",deleteTooltip:"Xóa",prevPage:"Trang trước",nextPage:"Trang tiếp",confirmDeleteTitle:"Xóa lịch sử quét",confirmDeleteMsg:"Bạn có chắc chắn muốn xóa kết quả phiên quét này? Hành động này không thể hoàn tác.",deleting:"Đang xóa...",confirmDeleteAllTitle:"Xóa toàn bộ lịch sử quét",confirmDeleteAllMsg:"Bạn có chắc chắn muốn xóa TOÀN BỘ lịch sử quét? Hành động này không thể hoàn tác.",deleteAllBtn:"Xóa toàn bộ"},printGuide$1={guideTitle:"🖨️ Hướng dẫn sử dụng In bộ thẻ",guideSubtitle:"Làm theo từng bước dưới đây để tổ chức một buổi kiểm tra bằng thẻ giấy.",step1Title:"Bước 1: In bộ thẻ ({{count}} thẻ)",step1Desc:'Bấm nút "Tải PDF bộ thẻ" bên dưới để tải và in thẻ cho học sinh. Bộ thẻ gồm {{count}} thẻ, đánh số từ 1 đến {{count}} — nên mỗi lớp dùng tối đa {{count}} học sinh. Mỗi thẻ có 4 mặt A/B/C/D — học sinh xoay thẻ để chọn đáp án. Thẻ dùng lại được cả năm, không cần in lại mỗi lần kiểm tra.',step2Title:"Bước 2: Cắt và phát thẻ",step2Desc:"Cắt rời từng thẻ theo số thứ tự, phát đúng thẻ cho đúng học sinh (theo số thẻ đã gán ở Bước 3).",step3Title:"Bước 3: Tạo lớp học & danh sách học sinh",step3Desc:'Vào mục "Lớp học", tạo lớp và nhập danh sách học sinh (mỗi dòng 1 tên, tối đa {{count}} em). Mỗi học sinh sẽ được gán 1 số thẻ tương ứng với thứ tự trong danh sách.',step4Title:"Bước 4: Tạo Bộ câu hỏi",step4Desc:'Vào mục "Bộ câu hỏi" ở thanh bên, tạo bộ câu hỏi trắc nghiệm cho bài kiểm tra. Mỗi câu có thể có 2, 3 hay 4 phương án — vẫn dùng chung bộ thẻ đã in, không phải in lại. Câu 2 phương án chỉ dùng mặt A/B, câu 3 phương án dùng A/B/C; màn chiếu luôn hiện đúng số phương án để học sinh biết xoay mặt nào.',step5Title:"Bước 5: Bắt đầu quét",step5Desc:'Vào mục "Lớp học", bấm nút "Quét" trên lớp cần kiểm tra, chọn Bộ câu hỏi rồi bắt đầu. Dùng camera điện thoại quét thẻ học sinh giơ lên để nhận đáp án tự động.',downloadPdfBtn:"Tải PDF bộ thẻ ({{count}} thẻ)",downloadBackPdfBtn:"Tải PDF mặt sau thẻ (không bắt buộc)",printConfirmTitle:"Xác nhận in bộ thẻ",printConfirmMsg:"Bạn có chắc chắn muốn tải về bộ thẻ dưới dạng PDF không? Bộ thẻ gồm {{count}} thẻ (đánh số 1–{{count}}), in ra {{pages}} trang A4.",backPrintDialogTitle:"🔄 Mặt sau thẻ dùng để làm gì?",backPrintDialogP1:"Đây là phần <b>không bắt buộc</b>. Bộ thẻ vẫn quét bình thường nếu bạn chỉ in mặt trước.",backPrintDialogP2:"Mặt sau <b>không có mã QR</b>, chỉ in 4 chữ A/B/C/D cỡ lớn kèm mũi tên chỉ ra 4 hướng (A ở trên, B bên phải, C bên dưới, D bên trái) — <b>đúng hướng với mã ở mặt trước</b>.",backPrintDialogP3:"Học sinh nhìn mặt sau (mặt quay về phía mình) để biết phải <b>xoay đáp án nào lên trên</b>, không phải đoán mò hay lật thẻ qua lại.",backPrintDialogP4:'Có sẵn dòng nhắc <i>"Nhớ đừng che tay vào mã code"</i> — giảm lỗi quét không nhận.',backPrintDialogP5:"Giáo viên đứng phía sau lớp nhìn mặt này cũng đọc được đáp án học sinh đang chọn.",backPrintDialogP6:"<b>Cách in:</b> file này có cùng {{pages}} trang và cùng vị trí thẻ với mặt trước.",downloadBackBtn:"Tải mặt sau"},tabs$2={questionsTab:"📋 Bộ câu hỏi",surveysTab:"📊 Bộ khảo sát",pageTitle:"Chế độ giấy (Quét thẻ)",quotaTrial:"Đã sử dụng {{current}}/{{limit}} lượt quét",help:"Hướng dẫn",helpVideoTitle:"Hướng dẫn Chế độ giấy (Quét thẻ)",helpVideoDesc:"Video hướng dẫn in bộ thẻ, tạo lớp học và quét đáp án bằng camera.",exportNoStudentError:"Lớp này chưa có học sinh nào để in.",exportError:"Không xuất được danh sách. Vui lòng thử lại."},sessionControl$1={questionSetNotFound:"Không tìm thấy Bộ câu hỏi",classNotFound:"Không tìm thấy Lớp học",cardName:"Thẻ {{num}}",initError:"Lỗi khởi tạo phiên",initializing:"Đang khởi tạo phiên quét...",back:"Quay lại",trialLimitReached:"Đã hết lượt quét dùng thử",trialLimitMsg:"Bản dùng thử cho phép {{limit}} lượt quét. Nâng cấp để tiếp tục sử dụng không giới hạn.",backAndUpgrade:"Quay lại & Nâng cấp",summaryLabel:"{{className}} · {{questions}} câu · {{students}} học sinh",scanInstructionTitle:"Dùng điện thoại để quét thẻ học sinh",scanInstruction1:"1. Quét mã QR bên cạnh, <strong>hoặc</strong> mở trang <strong>giaoviendoimoi.com/thamgia</strong> rồi nhập mã <strong>{{code}}</strong>",scanInstruction2:"2. Cho phép truy cập camera trên thiết bị đó",sendLinkTitle:"Hoặc gửi link này cho thiết bị quét:",copy:"Chép",copied:"Đã chép",connectedDevices:"Đã kết nối <strong>{{count}}</strong> thiết bị quét",waitingDevices:"Đang chờ thiết bị quét kết nối...",openScannerPc:"Mở máy quét bằng chính máy tính này",openScannerPcDesc:"Không cần cài ứng dụng — chạy trực tiếp trên trình duyệt.",reconnectPhone:"Kết nối lại điện thoại",bgmTurnOn:"Bật nhạc nền",bgmTurnOff:"Tắt nhạc nền",audioAutoplayOn:"Tự phát âm thanh khi chuyển câu",audioAutoplayOff:"Tắt tự phát âm thanh câu hỏi",fontDecrease:"Giảm cỡ chữ",fontIncrease:"Tăng cỡ chữ",restartCountdown:"Đếm lại",fullscreenExit:"Thoát toàn màn hình",fullscreenEnter:"Toàn màn hình",scanCodeLabel:"Mã quét",orEnterCode:"Hoặc nhập mã trên vào trang /thamgia · quét mã QR bên cạnh",timeUp:"HẾT GIỜ",questionNum:"Câu {{num}}",surveyOpinions:"📊 Ý kiến cả lớp",correctIs:"✓ Đáp án đúng: {{answer}}",answeredRatio:"{{answered}}/{{total}} đã trả lời",playAudio:"Phát",stopAudio:"Dừng",resizeDragTooltip:"Kéo để chỉnh độ rộng · Nháy đúp để đặt lại",scannedCountRatio:"📊 {{scanned}}/{{total}}
565 đã quét",remindPendingTooltip:"Chiếu tên các em chưa quét lên màn hình để các em tự giơ lại thẻ",remindPendingBtn:"🔔 Nhắc {{count}} em chưa quét",remindSingleTooltip:"#{{card}} {{name}} — bấm để chiếu tên nhắc em này",allScanned:"Cả lớp đã quét xong",remindBanner:"⚠️ Các em sau hãy giơ cao thẻ lên",remindDismissHint:"Tên sẽ tự biến mất khi em đó được quét · Bấm bất kỳ đâu (hoặc Esc) để đóng",processing:"⏳ Đang xử lý..."},viPaperMode={page:page$6,dashboard:dashboard$1,createSession:createSession$1,classes:classes$1,roster:roster$1,print:print$1,session:session$1,results:results$1,scan:scan$1,sidebar:sidebar$3,resultsHistory:resultsHistory$1,printGuide:printGuide$1,tabs:tabs$2,sessionControl:sessionControl$1},page$5={title:"Paper Mode",subtitle:"Paper Card Scanning — Plickers Style",description:"Students use pre-printed paper cards, teachers scan with a mobile camera from a distance"},dashboard={title:"My Scanning Sessions",newSession:"New Session",manageClasses:"Manage Classes",noSessions:"No scanning sessions yet",noSessionsDesc:"Create a new session to start scanning paper cards",status:{draft:"Draft",active:"Active",completed:"Completed"},actions:{edit:"Edit",start:"Start Scanning",results:"View Results",duplicate:"Duplicate",delete:"Delete",confirmDelete:"Are you sure you want to delete this session?"}},createSession={title:"Create New Scanning Session",sessionTitle:"Session Title",sessionTitlePlaceholder:"e.g., Math Test Chapter 1",selectClass:"Select Class",selectClassPlaceholder:"Select a class...",noClasses:"No classes available. Please create a class first.",createClass:"Create New Class",addQuestions:"Add Questions",addFromBank:"Add from Question Bank",addManual:"Add Manually",questionCount:"{{count}} questions",save:"Save Session",cancel:"Cancel",errors:{titleRequired:"Please enter a session title",classRequired:"Please select a class",questionsRequired:"At least 1 question is required"}},classes={title:"🏫 My Classes",btnAdvanced:"⚙️ Advanced Management",createClass:"Create New Class",className:"Class Name",studentCount:"{{count}} students",noClasses:"No classes yet",noClassesDesc:"Create a new class and add students",actions:{scan:"Scan"},defaultRosterName:"Class Roster",statsSummary:"📝 {{questions}} question(s) · 🧑‍🎓 {{students}} student(s)",dialogEditTitle:"Edit Class: {{name}}",labelStudentList:"Student List (one name per line - can copy from Excel)",placeholderStudentList:`John Doe
566Jane Smith
567Alex Brown`,cardNo:"Card {{number}}",editHint:"Reordering the list updates card numbers — simply project the list so students can swap cards, no re-printing needed.",maxStudentsHint:"Maximum {{max}} students per class.",errorOverLimit:"List contains {{count}} students, exceeding the maximum of {{max}}. Please reduce the list and save again.",btnCancel:"Cancel",btnSave:"Save",btnSaving:"Saving...",successUpdate:"Class updated successfully",errorSave:"Failed to save",errorName:"Please enter class name",description:"The class list is <strong>shared</strong> across all features requiring classes. Click <strong>Scan</strong> to start scoring.",btnCreateFirst:"+ Create First Class",labelStudentCount:"{{count}} students",labelClassName:"Class Name",dialogCreateTitle:"Create New Class",dialogDeleteTitle:"Delete Class",dialogDeleteDesc:"This class will be permanently deleted. This action cannot be undone.",btnConfirmDelete:"Delete",tooltipEdit:"Edit Class",tooltipDelete:"Delete Class",errorMinStudent:"Class must have at least 1 student",errorLoad:"Could not load class list",errorDelete:"Failed to delete",successCreate:"Class created successfully",successDelete:"Class deleted successfully",hintMaxStudents:"One name per line. Maximum {{max}} students per class.",btnExportRoster:"Export Roster",btnExportingRoster:"Exporting...",tooltipExportRoster:"Export Excel: Card # + Student Name",noCardWarning:"List contains {{count}} students, but the PDF set only has {{max}} cards. Students from card #{{max}} onwards have no printed cards."},roster={title:"Student Roster — {{className}}",addStudent:"Add Student",bulkImport:"Bulk Import",cardNumber:"Card Number",studentName:"Student Name",note:"Note",noStudents:"No students yet",noStudents
567Desc:"Add students or import in bulk",actions:{edit:"Edit",delete:"Delete",confirmDelete:"Delete student {{name}}?"},bulkImportModal:{title:"Bulk Import Students",description:"Enter each line: Card Number, Full Name (separated by comma or tab)",placeholder:`1, John Doe
5682, Jane Smith
5693, Alex Brown`,import:"Import",cancel:"Cancel",result:"Imported {{imported}} students, skipped {{skipped}}"}},print={title:"Print Cards — {{className}}",description:"Print 2 A5 cards per A4 page. Cards are reusable year-round.",printButton:"Print Cards",instructions:"Instructions:",step1:"Rotate card so chosen answer points UPWARDS",step2:"A = upright, B = 90° left, C = upside down, D = 90° right",step3:"Teacher scans using phone camera from 2-4m, scanning multiple cards at once",cardLabel:"Card #{{number}} — {{name}}",answerGuide:"A ↑  B →  C ↓  D ←"},session={scanning:"Scanning",results:"Results",question:"Question {{current}}/{{total}}",scanned:"Scanned: {{count}}/{{total}}",nextQuestion:"Next Question",prevQuestion:"Previous Question",showResults:"Show Results",endSession:"End Session",confirmEnd:"End this scanning session? Results will be saved.",openScanner:"Open Scanner",scannerHint:"Open on mobile phone to scan cards",projector:"Project on Screen"},results={titlePrefix:"Results —",overallRate:"Overall Correct Rate",studentScores:"Student Scores",questionAnalysis:"Question Analysis",rank:"Rank",name:"Name",correct:"Correct",score:"Score",export:"Export Excel",noResults:"No results yet",answerDistribution:"Answer Distribution",correctRate:"Correct rate: {{rate}}%"},scan={connecting:"Connecting...",invalidSession:"Invalid Session",sessionEnded:"Session Ended",cameraError:"Unable to access camera",cameraPermission:"Please grant camera permission",cameraWaitingHint:'Click "Allow" in the prompt. The camera will turn on immediately.',noPreviewMode:"📷 This device cannot render a preview stream, but is scanning normally. Aim device towards students.",tapToStart:"Tap screen to start scanning",tapToStartHint:"Camera is ready. Tap once to display image stream.",cameraPermissionHint:'If you clicked "Allow" but still see this screen, click "Retry" or open in Chrome/Safari.',cameraBlockedHint:"Camera permission is blocked. Please enable Camera permissions in your device settings or open in Chrome/Safari.",cameraBusy:"Camera is in use by another application",cameraBusyHint:'Close other apps using the camera and click "Retry".',cameraNotFound:"No camera found on this device",openInBrowser:{title:"✅ Recommended: open in browser",ifStuck:"⏳ Stuck or prompt not appearing?",step1:"Step 1: Tap ⋯ (three dots) in top right corner",step2:'Step 2: Select "Open in Browser"',copyLink:"Or copy link and paste into Chrome/Safari",copied:"Link copied — paste into Chrome"},engineLoading:"Preparing scanner...",engineLoadingHint:"Loading recognition engine (approx. 13MB). Subsequent visits will be faster.",engineInit:"Initializing...",engineError:"Could not load recognition engine. Check internet connection and retry.",retry:"Retry",questionLabel:"Question {{current}}/{{total}}",viewingResults:"Viewing Results",finish:"Finish Session",finishConfirm:"Stop scanning for this session. Open control page to save and review results.",cancel:"Cancel",endError:"Could not end session. Please retry.",ended:"Session Ended",endedHint:"Open session control page on computer to review detailed results.",exit:"Exit",prevQuestion:"Previous Question",commitReveal:"🔒 Lock & Reveal Answer",commitSurvey:"🔒 Lock & Show Class Opinions",goNextQuestion:"Next Question {{next}} ›",cardNum:"Card {{num}}",debugLogAria:"View diagnostic log",noLog:"(no logs)",copyLogSuccess:"Copied log",copyLogFallback:"Copied log (fallback)",cameraDetail:"Detail: {{error}}",remindScreenShown:"✅ Displayed names on screen",remindPendingBtn:"🔔 Remind {{count}} unscanned students",pendingListAria:"View list of unscanned students",stats:{title:"Stats for this question",answered:"answered",correctIs:"Correct answer:",surveyMode:"Survey — no correct answer",showVoters:"Show Voters",hideVoters:"Hide Voters"}},sidebar$2={classes:"Classes",questionSets:"Question Sets",results:"Scan History",print:"Print Cards"}
569,resultsHistory={title:"📊 Scan History",sortDateDesc:"Scan Date: Newest",sortDateAsc:"Scan Date: Oldest",sortRateDesc:"Correct Rate: Highest",sortRateAsc:"Correct Rate: Lowest",sortClassNameAsc:"Class Name: A → Z",deleteAllHistory:"Delete all history (recommended for performance)",loading:"Loading...",emptyTitle:"No scan history yet",emptyDesc:"Start scanning paper cards to see results here.",surveyBadge:"📊 Survey",viewResults:"View Results",deleteTooltip:"Delete",prevPage:"Previous Page",nextPage:"Next Page",confirmDeleteTitle:"Delete Scan History",confirmDeleteMsg:"Are you sure you want to delete this scan result? This action cannot be undone.",deleting:"Deleting...",confirmDeleteAllTitle:"Delete All Scan History",confirmDeleteAllMsg:"Are you sure you want to delete ALL scan history? This action cannot be undone.",deleteAllBtn:"Delete All"},printGuide={guideTitle:"🖨️ Card Printing Guide",guideSubtitle:"Follow the steps below to conduct a paper-card assessment.",step1Title:"Step 1: Print Card Set ({{count}} cards)",step1Desc:'Click "Download Card Set PDF" below to print cards for students. The set contains {{count}} numbered cards (1–{{count}}). Each card has 4 sides (A/B/C/D) — students rotate cards to answer. C
569ards are reusable year-round.',step2Title:"Step 2: Cut and Distribute Cards",step2Desc:"Cut out each card by number and distribute to matching students as assigned in Step 3.",step3Title:"Step 3: Create Class & Roster",step3Desc:'Go to "Classes", create a class and enter student names (one per line, up to {{count}} students). Each student is assigned a card number corresponding to their position in the list.',step4Title:"Step 4: Create Question Set",step4Desc:'Go to "Question Sets" in the sidebar and create multiple-choice questions. Questions can have 2, 3, or 4 options using the same printed cards.',step5Title:"Step 5: Start Scanning",step5Desc:`Go to "Classes", click "Scan" on the target class, select Question Set and start. Use your phone camera to scan students' raised cards automatically.`,downloadPdfBtn:"Download Card Set PDF ({{count}} cards)",downloadBackPdfBtn:"Download Card Back PDF (optional)",printConfirmTitle:"Confirm Print Card Set",printConfirmMsg:"Are you sure you want to download the card set as PDF? Set contains {{count}} cards (numbered 1–{{count}}), printing on {{pages}} A4 pages.",backPrintDialogTitle:"🔄 What is the card back used for?",backPrintDialogP1:"This is <b>optional</b>. The card set scans normally even if you only print the front side.",backPrintDialogP2:"The back has <b>no QR code</b>, only large letters A/B/C/D with directional arrows aligned with the front.",backPrintDialogP3:"Students look at the back side to know which <b>letter points upwards</b> without guessing.",backPrintDialogP4:'Includes reminder <i>"Do not cover the code with your fingers"</i> to reduce scan errors.',backPrintDialogP5:"Teachers standing at the back of the classroom can also see the selected answers.",backPrintDialogP6:"<b>Printing:</b> this file has the same {{pages}} pages and card positions as the front side.",downloadBackBtn:"Download Card Backs"},tabs$1={questionsTab:"📋 Question Sets",surveysTab:"📊 Survey Sets",pageTitle:"Paper Mode (Card Scanning)",quotaTrial:"Used {{current}}/{{limit}} scans",help:"Guide",helpVideoTitle:"Paper Mode Guide (Card Scanning)",helpVideoDesc:"Video tutorial on printing cards, creating classes, and scanning answers with camera.",exportNoStudentError:"This class has no students to print.",exportError:"Could not export roster. Please try again."},sessionControl={questionSetNotFound:"Question set not found",classNotFound:"Class not found",cardName:"Card {{num}}",initError:"Session initialization error",initializing:"Initializing scan session...",back:"Back",trialLimitReached:"Trial scan limit reached",trialLimitMsg:"The trial allows {{limit}} scan sessions. Upgrade to continue using without limits.",backAndUpgrade:"Back & Upgrade",summaryLabel:"{{className}} · {{questions}} questions · {{students}} students",scanInstructionTitle:"Use phone to scan student cards",scanInstruction1:"1. Scan the QR code or open <strong>giaoviendoimoi.com/thamgia</strong> and enter code <strong>{{code}}</strong>",scanInstruction2:"2. Allow camera access on that device",sendLinkTitle:"Or send this link to the scanning device:",copy:"Copy",copied:"Copied",connectedDevices:"Connected <strong>{{count}}</strong> scanning device(s)",waitingDevices:"Waiting for scanning device to connect...",openScannerPc:"Open scanner on this computer",openScannerPcDesc:"No installation needed — runs directly in the browser.",reconnectPhone:"Reconnect Phone",bgmTurnOn:"Turn on BGM",bgmTurnOff:"Turn off BGM",audioAutoplayOn:"Autoplay question audio on switch",audioAutoplayOff:"Disable question audio autoplay",fontDecrease:"Decrease font size",fontIncrease:"Increase font size",restartCountdown:"Restart timer",fullscreenExit:"Exit Fullscreen",fullscreenEnter:"Fullscreen",scanCodeLabel:"Scan Code",orEnterCode:"Or enter the code at /thamgia · scan the QR code",timeUp:"TIME UP",questionNum:"Question {{num}}",surveyOpinions:"📊 Class Opinions",correctIs:"✓ Correct Answer: {{answer}}",answeredRatio:"{{answered}}/{{total}} answered",playAudio:"Play",stopAudio:"Stop",resizeDragTooltip:"Drag to resize panel · Double click to reset",scannedCountRatio:"📊 {{scanned}}/{{total}} scanned",remindPendingTooltip:"Project names of unscanned students so they can raise the
569ir cards again",remindPendingBtn:"🔔 Remind {{count}} unscanned students",remindSingleTooltip:"#{{card}} {{name}} — click to remind this student",allScanned:"All students have been scanned",remindBanner:"⚠️ Please raise your cards high",remindDismissHint:"Names will disappear once scanned · Click anywhere (or Esc) to close",processing:"⏳ Processing..."},enPaperMode={page:page$5,dashboard,createSession,classes,roster,print,session,results,scan,sidebar:sidebar$2,resultsHistory,printGuide,tabs:tabs$1,sessionControl},page$4={sidebarTitle:"Sử dụng ống kính",btnStart:"Bắt đầu",btnUpgradePro:"Mua FullGame",instructions:"Quét và chọn học sinh ngẫu nhiên từ camera",quotaTrial:"Đã dùng: {{current}}/{{limit}} lượt",photoCallCardLabel:"Gọi tên bằng ảnh",photoCallCardDesc:"Ảnh học sinh bay trên màn hình rồi dừng lại ở một em ngẫu nhiên",photoCallCardBadge:"Không cần camera"},sessionModal$1={title:"Cấu hình gọi học sinh",labelSelectSet:"Bộ câu hỏi",labelDuration:"Thời gian quét (giây)",noSets:"Không có bộ câu hỏi nào",btnStart:"Bắt đầu quét",btnCancel:"Hủy",noQuestionMode:"Không dùng bộ câu hỏi",labelQuestionTiming:"Hiện câu hỏi",timingAfter:"Sau khi chọn HS",timingAfterDesc:"Quét chọn học sinh trước, câu hỏi hiện ra sau",timingBefore:"Trước khi chọn HS",timingBeforeDesc:"Nêu câu hỏi cho cả lớp cùng nghĩ, rồi mới quét chọn học sinh",labelThinkTime:"Thời gian suy nghĩ (giây)",thinkTimeHint:"Đồng hồ chỉ để cả lớp ước lượng thời gian — hết giờ vẫn chờ giáo viên bấm nút.",lockedToOneHint:'Chế độ "Trước khi chọn HS" chỉ nêu 1 câu mỗi lượt.'},preQuestion$1={banner:"Cả lớp cùng nghĩ câu trả lời",thinking:"Thời gian suy nghĩ",timeUp:"Hết giờ suy nghĩ!",btnSkip:"Câu khác"},camera$1={scanning:"Đang quét...",scanningFaces:"{{count}} khuôn mặt",capturing:"Đang chụp lại...",btnCapture:"Chụp ngay",btnRetry:"Thử lại",guidanceNoFace:"Di chuyển camera để thấy khuôn mặt HS",guidanceFewFaces:"Đang thấy ít khuôn mặt — thử hạ thấp camera",guidanceGood:"Tốt!"},result$2={btnGetQuestion:"Lấy câu hỏi ngẫu nhiên",btnRetry:"Quét lại khuôn mặt",btnClose:"Đóng"},question$1={btnNext:"Câu hỏi tiếp theo",btnClose:"Đóng"},photoCall$1={classes:{title:"Gọi tên bằng ảnh",description:'Chọn lớp rồi bấm "Bắt đầu gọi tên" — ảnh học sinh sẽ bay trên màn hình và dừng lại ở một em ngẫu nhiên.',btnStartCall:"Bắt đầu gọi tên",btnBack:"Quay lại",btnAdvanced:"Quản lý nâng cao",btnCreate:"Tạo lớp mới",btnCreateFirst:"Tạo lớp đầu tiên",emptyTitle:"Chưa có lớp học nào",emptyDesc:"Tạo lớp và thêm danh sách học sinh để bắt đầu gọi tên bằng ảnh.",labelStudentCount:"Sĩ số",labelClassName:"Tên lớp",labelStudentList:"Danh sách học sinh",placeholderStudentList:"Mỗi dòng một tên học sinh...",studentCount:"{{count}} học sinh",dialogCreateTitle:"Tạo lớp mới",dialogEditTitle:"Sửa lớp",dialogDeleteTitle:"Xóa lớp?",dialogDeleteDesc:"Lớp sẽ bị xóa vĩnh viễn cùng toàn bộ ảnh học sinh. Hành động này không thể hoàn tác.",btnCancel:"Hủy",btnSave:"Lưu",btnSaving:"Đang lưu...",btnConfirmDelete:"Xóa",tooltipEdit:"Sửa lớp & ảnh học sinh",tooltipDelete:"Xóa lớp",errorName:"Vui lòng nhập tên lớp",errorMinStudent:"Cần ít nhất 1 học sinh",errorLoad:"Không tải được danh sách lớp",errorSave:"Không lưu được lớp",errorDelete:"Không xóa được lớp",successCreate:"Đã tạo lớp",successUpdate:"Đã cập nhật lớp",successDelete:"Đã xóa lớp",hintMaxStudents:"Tối đa {{max}} học sinh mỗi lớp",errorOverLimit:"Vượt quá {{max}} học sinh"},startModal:{title:"🎯 Bắt đầu gọi tên",titleWithClass:"🎯 Gọi tên lớp {{name}}",classSummary:"Sĩ số {{count}} học sinh",pageIndicator:"Trang {{page}}/{{total}} · {{count}}
569 bộ",loadingPhotos:"Đang kiểm tra ảnh học sinh...",errorNoPhotos:"Lớp này chưa có ảnh học sinh nào nên chưa gọi tên được. Hãy thêm ảnh cho học sinh trước.",btnGoManagePhotos:"Thêm ảnh học sinh",missingPhotosWarning:"Có {{count}} em chưa có ảnh nên sẽ không tham gia. {{playing}} em có ảnh vẫn chơi được.",allPhotosReady:"Cả lớp {{count}} em đều đã có ảnh. Sẵn sàng!",labelSelectSet:"Bộ câu hỏi",unitQuestion:"{{count}} câu",noSets:"Chưa có bộ câu hỏi nào",btnCreateNow:"Tạo ngay",labelNone:"Không dùng câu hỏi",descNone:"Chỉ gọi tên, không hỏi bài",labelQuestionMode:"Cách lấy câu hỏi",modeAll:"Hỏi lần lượt cả bộ ({{count}} câu)",modeRandom:"Lấy ngẫu nhiên một số câu",labelRandomCount:"Số câu mỗi lượt",countSuffix:"/ {{count}} câu",labelDuration:"Thời gian ảnh bay",durationSuffix:"giây",labelNoRepeat:"Không gọi trùng em đã gọi",labelFlyStyle:"Kiểu bay",mixTooShort:"Kết hợp cần ít nhất {{min}} giây để chạy đủ các kiểu — sẽ tự tăng lên khi bắt đầu.",flyStyle:{chaos:"Hỗn loạn",spiral:"Trôn ốc",bonfire:"Đốt lửa",wave:"Sóng",orbit:"Hành tinh",figure8:"Số 8",pendulum:"Con lắc",mix:"Kết hợp"},labelQuestionTiming:"Hiện câu hỏi",timingAfter:"Sau khi gọi tên",timingAfterDesc:"Ảnh bay chọn học sinh trước, câu hỏi hiện ra sau",timingBefore:"Trước khi gọi tên",timingBeforeDesc:"Nêu câu hỏi cho cả lớp cùng nghĩ, rồi mới thả ảnh bay",labelThinkTime:"Thời gian suy nghĩ (giây)",thinkTimeHint:"Đồng hồ chỉ để cả lớp ước lượng thời gian — hết giờ vẫn chờ giáo viên bấm nút.",lockedToOneHint:'Chế độ "Trước khi gọi tên" chỉ nêu 1 câu mỗi lượt.',btnCancel:"Hủy",btnStart:"Bắt đầu gọi tên"},game:{loadingPhotos:"Đang tải ảnh học sinh...",btnExit:"Thoát",noEligibleStudents:"Không tải được ảnh của em nào trong lớp này. Hãy kiểm tra lại ảnh học sinh rồi thử lại.",loadFailedSkipped:"Đã bỏ qua {{count}} em vì không tải được ảnh"},result:{btnCallAgain:"Gọi em khác",allCalled:"Đã gọi hết cả lớp — bắt đầu lại từ đầu"}},viFaceRandom={page:page$4,sessionModal:sessionModal$1,preQuestion:preQuestion$1,camera:camera$1,result:result$2,question:question$1,photoCall:photoCall$1},page$3={sidebarTitle:"Random Picker",btnStart:"Start",btnUpgradePro:"Get FullGame",instructions:"Pick a random student using camera",quotaTrial:"Used: {{current}}/{{limit}} sessions",photoCallCardLabel:"Pick by Photo",photoCallCardDesc:"Student photos fly across the screen, then stop on a random one",photoCallCardBadge:"No camera needed"},sessionModal={title:"Picker Configuration",labelSelectSet:"Question Set",labelDuration:"Scan Duration (seconds)",noSets:"No question sets available",btnStart:"Start Scanning",btnCancel:"Cancel",noQuestionMode:"No Questions (Just scan)",labelQuestionTiming:"Show question",timingAfter:"After picking a student",timingAfterDesc:"Scan and pick a student first, then show the question",timingBefore:"Before picking a student",timingBeforeDesc:"State the question so the whole class thinks, then scan to pick",labelThinkTime:"Thinking time (seconds)",thinkTimeHint:"The timer is only a guide for the class — when it ends, it still waits for you to press the button.",lockedToOneHint:'"Before picking a student" states one question per round.'},preQuestion={banner:"Everyone think of an answer",thinking:"Thinking time",timeUp:"Time's up!",btnSkip:"Another question"},camera={scanning:"Scanning...",scanningFaces:"{{count}} faces",capturing:"Capturing...",btnCapture:"Capture Now",btnRetry:"Retry",guidanceNoFace:"Move camera to see student faces",guidanceFewFaces:"Few faces detected — try lowering camera",guidanceGood:"Good!"},result$1={btnGetQuestion:"Get Random Question",btnRetry:"Scan Again",btnClose:"Close"},question={btnNext:"Next Question",btnClose:"Close"},photoCall={classes:{title:"Pick by Photo",description:'Choose a class and press "Start Picking" — student photos will fly across the screen and stop on a random one.',btnStartCall:"Start Picking",btnBack:"Back",btnAdvanced:"Advanced management",btnCreate:"New class",btnCreateFirst:"Create your first class",emptyTitle:"No classes yet",emptyDesc:"Create a class and add your student list to start picking by photo.",labelStudentCount:"Students",labelClassName:"Class name",labelStudentList:"Student list",placeholderStudentList:"One student name per line...",studentCount:"{{count}} students",dialogCreateTitle:"New class",dialogEditTitle:"Edit class",dialogDeleteTitle:"Delete class?",dialogDeleteDesc:"The class and all its student photos will be permanently deleted. This action cannot be undone.",btnCancel:"Cancel",btnSave:"Save",btnSaving:"Saving...",btnConfirmDelete:"Delete",tooltipEdit:"Edit class & student photos",tooltipDelete:"Delete class",errorName:"Please enter a class name",errorMinStudent:"At least 1 student is required",errorLoad:"Could not load your classes",errorSave:"Could not save the class",errorDelete:"Could not delete the class",successCreate:"Class created",successU
569pdate:"Class updated",successDelete:"Class deleted",hintMaxStudents:"Up to {{max}} students per class",errorOverLimit:"More than {{max}} students"},startModal:{title:"🎯 Start Picking",titleWithClass:"🎯 Pick from {{name}}",classSummary:"{{count}} students",pageIndicator:"Page {{page}}/{{total}} · {{count}} sets",loadingPhotos:"Checking student photos...",errorNoPhotos:"This class has no student photos yet, so picking isn't possible. Please add photos first.",btnGoManagePhotos:"Add student photos",missingPhotosWarning:"{{count}} student(s) have no photo and will sit this one out. The {{playing}} with photos can still play.",allPhotosReady:"All {{count}} students have a photo. Ready to go!",labelSelectSet:"Question set",unitQuestion:"{{count}} questions",noSets:"No question sets yet",btnCreateNow:"Create one",labelNone:"No questions",descNone:"Just pick a student, no quiz",labelQuestionMode:"How to draw questions",modeAll:"Go through the whole set ({{count}} questions)",modeRandom:"Draw a few at random",labelRandomCount:"Questions per turn",countSuffix:"/ {{count}} questions",labelDuration:"Flying time",durationSuffix:"seconds",labelNoRepeat:"Don't pick the same student twice",labelFlyStyle:"Motion style",mixTooShort:"Mixed needs at least {{min}} seconds to fit every style — it will be raised when you start.",flyStyle:{chaos:"Chaos",spiral:"Spiral",bonfire:"Bonfire",wave:"Waves",orbit:"Planets",figure8:"Figure 8",pendulum:"Pendulum",mix:"Mixed"},labelQuestionTiming:"Show question",timingAfter:"After picking a student",timingAfterDesc:"Let the photos fly and pick a student first, then show the question",timingBefore:"Before picking a student",timingBeforeDesc:"State the question so the whole class thinks, then release the photos",labelThinkTime:"Thinking time (seconds)",thinkTimeHint:"The timer is only a guide for the class — when it ends, it still waits for you to press the button.",lockedToOneHint:'"Before picking a student" states one question per round.',btnCancel:"Cancel",btnStart:"Start Picking"},game:{loadingPhotos:"Loading student photos...",btnExit:"Exit",noEligibleStudents:"None of this class's photos could be loaded. Please check the student photos and try again.",loadFailedSkipped:"Skipped {{count}} student(s) whose photo failed to load"},result:{btnCallAgain:"Pick another",allCalled:"Everyone has been picked — starting over"}},enFaceRandom={page:page$3,sessionModal,preQuestion,camera,result:result$1,question,photoCall},pageTitle$6="🎒 Cuộc đua ngôi sao",myGames$7="Game của tôi",createNew$6="Tạo game mới",games$2="Games",create$2="Tạo mới",guide$5="Hướng dẫn",guideDesc$5="Game đối kháng 2 đội dùng hand detection. Giơ 1/2/3/4 ngón tay để chọn đáp án A/B/C/D.",myStarBags$2={title:"Game Cuộc đua ngôi sao ({{count}})",pinBanner:"Ghim bài để truy cập khi hết hạn gói",pinnedCount:"({{pinned}}/{{limit}} đã ghim)",expired:"⚠️ Gói đã hết hạn!",renew:"Gia hạn",demoTitle:"Cuộc Đua Ngôi Sao - Bản Chạy Thử",demoBadge:"Bản chạy thử",demoDesc:"Chơi thử để trải nghiệm tính năng trước khi tạo bài của bạn",playTest:"Chơi thử",createFirst:"Tạo game đầu tiên",questionCount:"{{count}} câu",starCount:"⭐ {{stars}} sao",timeSec:"{{time}}s",pinTip:"Ghim bài để tiếp tục sử dụng",edit:"Sửa",assign:"Giao bài",share:"Chia sẻ GV",delete:"Xóa",prev:"◀ Trước",page:"Trang {{page}}",next:"Tiếp ▶",loading:"Đang tải...",loadError:"Không thể tải danh sách game",deleteConfirm:"Xóa game này?",deleted:"Đã xóa game",deleteError:"Lỗi khi xóa game",pinLimit:"Đã đạt giới hạn ghim ({{limit}} bài)",unpinned:"Đã bỏ ghim",pinned:"Đã ghim bài"},form$8={editTitle:"Chỉnh sửa",createTitle:"Tạo game",gameName:"Tên game",gameNamePlaceholder:"VD: Bài học ngữ pháp",config:"Cấu hình game",timeLimit:"Thời gian",totalStars:"Số sao trong túi (1–50)",freezeTime:"Đóng băng khi sai",sec:"{{time}} giây",min:"{{time}} phút",team1:"Tên Đội A",team1Placeholder:"Người chơi bên trái",team2:"Tên Đội B",team2Placeholder:"Người chơi bên phải",bgm:"Nhạc nền",bgmDefault:"Mặc định",bgmTrack:"Nhạc {{num}}",bgmCustom:"Nhạc riêng:",questions:"Câu hỏi ({{count}})",clearAll:"Xóa tất cả",selectBank:"Chọn từ Kho hoặc AI",selectLesson:"📂 Từ bài đã có",manual:"Nhập thủ công",questionWarning:"Số lượng câu hỏi phải bằng với số ngôi sao ({{count}} câu). Mỗi câu cần đúng 4 đáp án A/B/C/D (giơ 1/2/3/4 ngón tay).",qFontSize:"Cỡ chữ câu hỏi:",aFontSize:"Cỡ chữ đáp án:",fsSmall:"Bé",fsMedium:"Chuẩn",fsLarge:"Lớn",fsXLarge:"Rất lớn",fsXXLarge:"Cực đại",fsNote:"Áp dụng cho câu chưa chỉnh riêng",qList:"Danh sách câu hỏi",aCount:"{{count}} đáp án",noQuestions:"Chưa có câu hỏi nào",addQuestionsHint:"Thêm câu từ ngân hàng hoặc nhập tay",saving:"Đang lưu...",save:"Lưu game",emptyName:"Vui lòng nhập tên game",invalidQuestions:"Số lượng câu hỏi ({{count}}) phải bằng đúng số ngôi sao trong túi ({{totalStars}})",publishError:"Vui lòng chọn cấp bậc, môn học và khối lớp để đưa lên Thư viện cộng đồ
569ng",saveSuccessEdit:"Đã cập nhật game!",saveSuccessCreate:"Đã tạo game!",snapshotLarge:"Bài quá lớn, không thể đưa lên Thư viện cộng đồng. Bài đã được lưu thành công.",limitReached:"Đã đạt giới hạn tạo game",errorPrefix:"Lỗi: {{message}}",deleteConfirmQ:"Xóa toàn bộ câu hỏi?",deletedAllQ:"Đã xóa tất cả câu hỏi",deletedQ:"Đã xóa câu {{num}}",qUpdated:"Đã cập nhật câu hỏi",qAdded:"Đã thêm {{count}} câu (tổng: {{total}})",starLimitReached:"Đã đủ {{totalStars}} câu hỏi. Không thể thêm mới.",starLimitAdded:"Chỉ thêm được {{added}} câu do đã đạt giới hạn {{totalStars}} ngôi sao",noQuestionAdded:"Không thêm được câu nào (đã bỏ qua {{skipped}})",lessonAdded:'Đã thêm {{added}} câu từ "{{title}}" (bỏ {{skipped}})'},player$5={loading:"Đang tải...",finger1:"1 ngón",finger2:"2 ngón",finger3:"3 ngón",finger4:"4 ngón",freezeLabel:"giây đóng băng",end:"🎉 Kết thúc!",draw:"🤝 Hòa!",winnerLabel:"Đội thắng",totalBag:"Tổng túi: {{stars}} sao",viewReport:"📋 Xem báo cáo",exit:"Thoát",reportTitle:"📋 Báo cáo kết quả",winBadge:"🏆 {{name}} thắng",close:"✕ Đóng",teamStats:"⭐ {{name}} ({{stars}} sao)",noAnswers:"Chưa trả lời câu nào",qNum:"Câu {{num}}",chosen:"Đã chọn:",image:"(hình ảnh)",correctHint:"Đáp án đúng: {{answers}}",notFound:"Không tìm thấy game",backHome:"Về trang chủ"},viStarBagGame={pageTitle:pageTitle$6,myGames:myGames$7,createNew:createNew$6,games:games$2,create:create$2,guide:guide$5,guideDesc:guideDesc$5,myStarBags:myStarBags$2,form:form$8,player:player$5},pageTitle$5="🎒 Star Bag Race",myGames$6="My Games",createNew$5="Create Game",games$1="Games",create$1="Create",guide$4="Guide",guideDesc$4="2-team versus game using hand detection. Raise 1/2/3/4 fingers to select answer A/B/C/D.",myStarBags$1={title:"Star Bag Games ({{count}})",pinBanner:"Pin games to access them when subscription expires",pinnedCount:"({{pinned}}/{{limit}} pinned)",expired:"⚠️ Subscription expired!",renew:"Renew",demoTitle:"Star Bag - Demo Run",demoBadge:"Demo",demoDesc:"Try it out before creating your own games",playTest:"Play Demo",createFirst:"Create first game",questionCount:"{{count}} questions",starCount:"⭐ {{stars}} stars",timeSec:"{{time}}s",pinTip:"Pin to keep using",edit:"Edit",assign:"Assign",share:"Share",delete:"Delete",prev:"◀ Prev",page:"Page {{page}}",next:"Next ▶",loading:"Loading...",loadError:"Could not load games list",deleteConfirm:"Delete this game?",deleted:"Game deleted",deleteError:"Error deleting game",pinLimit:"Pin limit reached ({{limit}} games)",unpinned:"Unpinned",pinned:"Pinned game"},form$7={editTitle:"Edit Game",createTitle:"Create Game",gameName:"Game name",gameNamePlaceholder:"E.g: Grammar Lesson",config:"Game Configuration",timeLimit:"Time limit",totalStars:"Total stars in bag (1–50)",freezeTime:"Wrong answer freeze",sec:"{{time}} seconds",min:"{{time}} minutes",team1:"Team A Name",team1Placeholder:"Left player",team2:"Team B Name",team2Placeholder:"Right player",bgm:"Background Music",bgmDefault:"Default",bgmTrack:"Track {{num}}",bgmCustom:"Custom:",questions:"Questions ({{count}})",clearAll:"Clear all",selectBank:"Select from Bank/AI",selectLesson:"📂 From existing lesson",manual:"Manual input",questionWarning:"Number of questions must equal the number of stars ({{count}}). Each question requires exactly 4 answers A/B/C/D (to correspond to 1/2/3/4 fingers).",qFontSize:"Question font size:",aFontSize:"Answer font size:",fsSmall:"Small",fsMedium:"Standard",fsLarge:"Large",fsXLarge:"Extra Large",fsXXLarge:"Huge",fsNote:"Applies to default questions",qList:"Question List",aCount:"{{count}} answers",noQuestions:"No questions yet",addQuestionsHint:"Add questions from bank or manually",saving:"Saving...",save:"Save Game",emptyName:"Please enter game name",invalidQuestions:"Number of questions ({{count}}) must equal the stars in the bag ({{totalStars}})",publishError:"Please select level, subject and grade to publish to Community Library",saveSuccessEdit:"Game updated!",saveSuccessCreate:"Game created!",snapshotLarge:"Game is too large to publish to Community Library. It was saved locally.",limitReached:"Game creation limit reached",errorPrefix:"Error: {{message}}",deleteConfirmQ:"Delete all questions?",deletedAllQ:"All questions deleted",deletedQ:"Deleted question {{num}}",qUpdated:"Question updated",qAdded:"Added {{count}} questions (total: {{total}})",starLimitReached:"Reached limit of {{totalStars}} questions. Cannot add more.",starLimitAdded:"Only added {{added}} questions due to limit of {{totalStars}} stars",noQuestionAdded:"Could not add any questions (skipped {{skipped}})",lessonAdded:'Added {{added}} questions from "{{title}}" (skipped {{skipped}})'},player$4={loading:"Loading...",finger1:"1 finger",finger2:"2 fingers",finger3:"3 fingers",finger4:"4 fingers",freezeLabel:"sec freeze",end:"🎉 Finished!",draw:"🤝 Draw!",winnerLabel:"Winner",totalBag:"Total bag: {{stars}} stars",viewReport:"📋 View Report",exit:"Exit",reportTitle:"📋 Result Report",winBadge:"🏆 {{name}} wins",close:"✕ Close",teamStats:"⭐ {{name}} ({{stars}} stars)",noAnswers:"No answers yet",qNum:"Q{{num}}",chosen:"Chosen:",image:"(image)",correctHint:"Correct answer: {{answers}}",notFound:"Game not found",backHome:"Back to Home"},enStarBagGame={pageTitle:pageTitle$5,myGames:myGames$6,createNew:createNew$5,games:games$1,create:create$1,guide:guide$4,guideDe
569sc:guideDesc$4,myStarBags:myStarBags$1,form:form$7,player:player$4},pageTitle$4="Game tự tạo",myGames$5="Bài của tôi",createNew$4="Tạo mới",editGame$2="Chỉnh sửa game",titleLabel$3="Tên game",titlePlaceholder$3="Nhập tên game...",htmlLabel$2="Mã HTML",htmlPlaceholder$2="Dán mã HTML game của bạn vào đây...",previewBtn$2="Xem trước",previewLabel$2="Xem trước",saveBtn$2="Lưu game",saving$3="Đang lưu...",cancel$3="Hủy",saveSuccess$2="Đã lưu game thành công",saveError$2="Lỗi khi lưu game",deleteConfirm$2="Bạn có chắc muốn xóa game này không?",deleteSuccess$3="Đã xóa game",deleteError$2="Lỗi khi xóa game",errorLoading$3="Lỗi khi tải danh sách game",loadingGames$2="Đang tải...",doneBtn$2="Đã hoàn thành",loadingGame$2="Đang tải game...",gameNotFound$2="Không tìm thấy game hoặc bài tập đã hết hạn.",securityNote$2="🔒 Game chạy trong môi trường cách ly an toàn — không thể truy cập dữ liệu trang web",htmlSizeWarning$2="Mã HTML quá lớn (giới hạn 500KB)",titleRequired$2="Vui lòng nhập tên game",htmlRequired$2="Vui lòng nhập mã HTML",assign$3="Giao bài",playTest$2="Chạy thử",createFirstGame$2="Tạo game đầu tiên",packageExpired$3="Gói Pro đã hết hạn.",extendSubscription$3="Gia hạn",lockedTip$3="Bài này đã bị khóa do gói Pro hết hạn. Ghim bài hoặc gia hạn để mở khóa.",aiCreateBtn$2="Tạo game bằng AI ✨",aiCreateHint$2="Mở AI Studio để tạo mã HTML game tự động — dán kết quả vào ô bên dưới",uploadHtmlBtn$2="Tải lên file HTML",uploadInvalidType$2="Chỉ chấp nhận file .html hoặc .htm",downloadHtml$2="Tải file HTML về máy",guide$3="Hướng dẫn sử dụng",guideDesc$3="Hướng dẫn cách tạo và nhúng game HTML tùy chỉnh vào bài giảng.",demo$4={title:"Game HTML - Bản Chạy Thử",badge:"Bản chạy thử",hint:"Đây chỉ là 1 bản chạy thử, bạn có thể tạo ra những game hoàn toàn khác với giao diện khác nhau"},viHtmlEmbedGame={pageTitle:pageTitle$4,myGames:myGames$5,createNew:createNew$4,editGame:editGame$2,titleLabel:titleLabel$3,titlePlaceholder:titlePlaceholder$3,htmlLabel:htmlLabel$2,htmlPlaceholder:htmlPlaceholder$2,previewBtn:previewBtn$2,previewLabel:previewLabel$2,saveBtn:saveBtn$2,saving:saving$3,cancel:cancel$3,saveSuccess:saveSuccess$2,saveError:saveError$2,deleteConfirm:deleteConfirm$2,deleteSuccess:deleteSuccess$3,deleteError:deleteError$2,errorLoading:errorLoading$3,loadingGames:loadingGames$2,doneBtn:doneBtn$2,loadingGame:loadingGame$2,gameNotFound:gameNotFound$2,securityNote:securityNote$2,htmlSizeWarning:htmlSizeWarning$2,titleRequired:titleRequired$2,htmlRequired:htmlRequired$2,assign:assign$3,playTest:playTest$2,createFirstGame:createFirstGame$2,packageExpired:packageExpired$3,extendSubscription:extendSubscription$3,lockedTip:lockedTip$3,aiCreateBtn:aiCreateBtn$2,aiCreateHint:aiCreateHint$2,uploadHtmlBtn:uploadHtmlBtn$2,uploadInvalidType:uploadInvalidType$2,downloadHtml:downloadHtml$2,guide:guide$3,guideDesc:guideDesc$3,demo:demo$4},pageTitle$3="Custom Game",myGames$4="My Games",createNew$3="Create New",editGame$1="Edit Game",titleLabel$2="Game Title",titlePlaceholder$2="Enter game title...",htmlLabel$1="HTML Code",htmlPlaceholder$1="Paste your game HTML code here...",previewBtn$1="Preview",previewLabel$1="Preview",saveBtn$1="Save Game",saving$2="Saving...",cancel$2="Cancel",saveSuccess$1="Game saved successfully",saveError$1="Error saving game",deleteConfirm$1="Are you sure you want to delete this game?",deleteSuccess$2="Game deleted",deleteError$1="Error deleting game",errorLoading$2="Error loading games",loadingGames$1="Loading...",doneBtn$1="Done",loadingGame$1="Loading game...",gameNotFound$1="Game not found or assignment has expired.",securityNote$1="🔒 Game runs in a secure isolated environment — cannot access website data",htmlSizeWarning$1="HTML code is too large (500KB limit)",titleRequired$1="Please enter a game title",htmlRequired$1="Please enter HTML code",assign$2="Assign",playTest$1="Play Test",createFirstGame$1="Create your first game",packageExpired$2="FullGame subscription has expired.",extendSubscription$2="Renew",lockedTip$2="This game is locked because your FullGame subscription expired. Pin it or renew to unlock.",aiCreateBtn$1="Create game with AI ✨",aiCreateHint$1="Open AI Studio to generate HTML game code automatically — paste the result below",uploadHtmlBtn$1="Upload HTML file",uploadInvalidType$1="Only .html or .htm files are accepted",downloadHtml$1="Download HTML file",guide$2="User Guide",guideDe
569sc$2="Learn how to create and embed custom HTML games into your lessons.",demo$3={title:"HTML Game - Demo",badge:"Demo",hint:"Try it out to experience the feature before creating your own game"},enHtmlEmbedGame={pageTitle:pageTitle$3,myGames:myGames$4,createNew:createNew$3,editGame:editGame$1,titleLabel:titleLabel$2,titlePlaceholder:titlePlaceholder$2,htmlLabel:htmlLabel$1,htmlPlaceholder:htmlPlaceholder$1,previewBtn:previewBtn$1,previewLabel:previewLabel$1,saveBtn:saveBtn$1,saving:saving$2,cancel:cancel$2,saveSuccess:saveSuccess$1,saveError:saveError$1,deleteConfirm:deleteConfirm$1,deleteSuccess:deleteSuccess$2,deleteError:deleteError$1,errorLoading:errorLoading$2,loadingGames:loadingGames$1,doneBtn:doneBtn$1,loadingGame:loadingGame$1,gameNotFound:gameNotFound$1,securityNote:securityNote$1,htmlSizeWarning:htmlSizeWarning$1,titleRequired:titleRequired$1,htmlRequired:htmlRequired$1,assign:assign$2,playTest:playTest$1,createFirstGame:createFirstGame$1,packageExpired:packageExpired$2,extendSubscription:extendSubscription$2,lockedTip:lockedTip$2,aiCreateBtn:aiCreateBtn$1,aiCreateHint:aiCreateHint$1,uploadHtmlBtn:uploadHtmlBtn$1,uploadInvalidType:uploadInvalidType$1,downloadHtml:downloadHtml$1,guide:guide$2,guideDesc:guideDesc$2,demo:demo$3},pageTitle$2="Własna Gra",myGames$3="Moje Gry",createNew$2="Utwórz Nową",editGame="Edytuj Grę",titleLabel$1="Tytuł Gry",titlePlaceholder$1="Wpisz tytuł gry...",htmlLabel="Kod HTML",htmlPlaceholder="Wklej tutaj kod HTML swojej gry...",previewBtn="Podgląd",previewLabel="Podgląd",saveBtn="Zapisz Grę",saving$1="Zapisywanie...",cancel$1="Anuluj",saveSuccess="Gra zapisana pomyślnie",saveError="Błąd podczas zapisywania gry",deleteConfirm="Czy na pewno chcesz usunąć tę grę?",deleteSuccess$1="Gra usunięta",deleteError="Błąd podczas usuwania gry",errorLoading$1="Błąd ładowania gier",loadingGames="Ładowanie...",doneBtn="Gotowe",loadingGame="Ładowanie gry...",gameNotFound="Nie znaleziono gry lub zadanie wygasło.",securityNote="🔒 Gra działa w bezpiecznym izolowanym środowisku — nie ma dostępu do danych strony",htmlSizeWarning="Kod HTML jest zbyt duży (limit 500KB)",titleRequired="Proszę wpisać tytuł gry",htmlRequired="Proszę wpisać kod HTML",assign$1="Przydziel",playTest="Test",createFirstGame="Utwórz swoją pierwszą grę",packageExpired$1="Subskrypcja FullGame wygasła.",extendSubscription$1="Odnów",lockedTip$1="Ta gra jest zablokowana, ponieważ subskrypcja FullGame wygasła. Przypnij lub odnów, aby odblokować.",aiCreateBtn="Utwórz grę z AI ✨",aiCreateHint="Otwórz AI Studio, aby automatycznie wygenerować kod HTML gry — wklej wynik poniżej",uploadHtmlBtn="Prześlij plik HTML",uploadInvalidType="Akceptowane są tylko pliki .html lub .htm",downloadHtml="Pobierz plik HTML",guide$1="Przewodnik użytkownika",guideDesc$1="Dowiedz się, jak tworzyć i osadzać własne gry HTML w lekcjach.",demo$2={title:"Gra HTML - Demo",badge:"Demo",hint:"Wypróbuj, aby poznać funkcję przed stworzeniem własnej gry"},plHtmlEmbedGame={pageTitle:pageTitle$2,myGames:myGames$3,createNew:createNew$2,editGame,titleLabel:titleLabel$1,titlePlaceholder:titlePlaceholder$1,htmlLabel,htmlPlaceholder,previewBtn,previewLabel,saveBtn,saving:saving$1,cancel:cancel$1,saveSuccess,saveError,deleteConfirm,deleteSuccess:deleteSuccess$1,deleteError,errorLoading:errorLoading$1,loadingGames,doneBtn,loadingGame,gameNotFound,securityNote,htmlSizeWarning,titleRequired,htmlRequired,assign:assign$1,playTest,createFirstGame,packageExpired:packageExpired$1,extendSubscription:extendSubscription$1,lockedTip:lockedTip$1,aiCreateBtn,aiCreateHint,uploadHtmlBtn,uploadInvalidType,downloadHtml,guide:guide$1,guideDesc:guideDesc$1,demo:demo$2},cancel="Anuluj",save="Zapisz",nav$1={home:"Strona Główna",aiTools:"Narzędzia AI",questionBank:"Baza Pytań",activities:"Aktywności",assignments:"Zadania",community:"Społeczność",join:"Dołącz",bugReport:"Zgłoś Błąd",logout:"Wyloguj",logoName:"Innowacyjny Nauczyciel",logoTitle:"📚 Innowacyjny Nauczyciel"},header={upgradePro:"Kup FullGame",upgradePro_short:"FullGame",proAccount:"Konto FullGame",proAccount_short:"FullGame",forever:"FullGame Na Zawsze",forever_short:"Zawsze",daysPro:"Pozostało {{days}} dni FullGame",daysPro_short:"{{days}}d FullGame",logoutBtn:"Wyloguj"},proModal={title:"⭐ ODBLOKUJ WSZYSTKIE NARZĘDZIA NA ZAWSZE",description:"Możesz ulepszyć całe konto lub kupić dostęp tylko do wybranych narzędzi!",descriptionNote:"Kupując Pakiet Gold, otrzymujesz dożywotni dostęp (LIFETIME) do wszystkich narzędzi...",price:"💰 Pełny Pakiet",bankLabel:"🏦 Bank:",accountLabel:"
569📱 Numer konta:",ownerLabel:"👤 Odbiorca:",contentLabel:"📝 Tytuł przelewu:",alertTitle:"⚠️ Po dokonaniu płatności wyślij wiadomość do administratorów, aby ręcznie aktywować pakiet:",contactInfo:"📞 0363.357.745 | 💬",zaloLink:"Aplikacja Zalo",benefitsTitle:"✅ Korzyści z konta FullGame:",offlineWarning:"Ta płatność NIE DOTYCZY wersji Offline (na komputer)!",benefit1:"Twórz nielimitowaną liczbę projektów o dowolnej wielkości",benefit2:"Brak limitów na generowanie odpowiedzi przez AI",benefit3:"Możliwość wgrywania własnych plików audio i raportów głosowych",closeBtn:"Zamknij",contactAdmin:"Kontakt z Adminem"},upgradeModal={title:"🚫 Osiągnięto limit wersji darmowej",offlineTitle:"Kup wersję Offline do użytku bez internetu w szkole",freeLimit:"Wersja darmowa pozwala na zapisanie tylko",differentClasses:"elementów w klasie",unlockRequired:"Ta funkcja wymaga konta FullGame. Dziękujemy za wspieranie platformy!",upgradeHint:"💡 Aby kontynuować korzystanie z {{name}}, przejdź na plan FullGame:",aiUnlockHint:"💡 Wykup dostęp dożywotni (LIFETIME) do narzędzi AI:",transferLabel:"W tytule przelewu wpisz poniższy kod:",waitingPayment:"Oczekiwanie na potwierdzenie płatności przez serwer...",contactTitle:"⚠️ Po zapłaceniu poinformuj nas przez Support (Zalo):",closeBtn:"Zamknij",contactBtn:"Konsultant Live",reloadBtn:"✅ Zapłacone - Odśwież system",offlineBenefitTitle:"Pobierz wersję instalacyjną na dysk, która nie wymaga internetu",offlineGuide:"Zobacz przewodnik wideo po wersji Offline",here:"tutaj.",offlineWarning:"UWAGA: Wersja Offline może posiadać pewne ograniczenia funkcjonalne w porównaniu do wersji przeglądarkowej Live.",clickToView:"Kliknij, aby obejrzeć wideo",evaluationYear:"⏳ Subskrypcja na {{selectedYears}} rok/lata (ważna do {{date}})",proPlanBenefit:"♾️ KONTO FullGame: {{price}} / rok — przelej {{price2x}}, aby kupić na 2 lata ze zniżką",expiryWarning:"⚠️ Po wygaśnięciu tylko {{count}} przypiętych (📌) lekcji pozostanie dostępnych — pozostałe zostaną zablokowane.",expiryWarningNoAudio:"🚫 Ten moduł nie obsługuje funkcji audio ani raportów graficznych",promoPlaceholder:"Kod promocyjny...",deleteBtn:"Usuń",applyBtn:"Zastosuj",selectYears:"💡 Wybierz liczbę lat do odnowienia subskrypcji:",years:"lat",tempAccess:{aiTitle:"🤖 Zakup narzędzi AI",offlineTitle:"💾 Pobierz wersję Offline",aiContact:"Skontaktuj się z nami, jeśli masz problem z płatnością",offlineContact:"Zadzwoń, aby zamówić wersję instalacyjną na komputer:",zaloLabel:"📞 Zalo: 0363.357.745",zaloName:"(Kontakt osobisty)",openZalo:"Otwórz Zalo",close:"Zamknij"},offlineWarningDialog:{title:"⚠️ WAŻNE INFORMACJE O WERSJI OFFLINE",pptWarning:"To nie jest prezentacja PowerPoint (.pptx). To samodzielna aplikacja.",usageNote:"* Moduł ten pozwala na pracę bez internetu (WIFI) w szkole, ale ma swoje wymagania:",dataNoteTitle:"BEZPIECZEŃSTWO DANYCH:",dataNote1:"Dane nie są automatycznie synchronizowane z wersją online.",dataNote2:"Formatowanie dysku spowoduje utratę lokalnych projektów.",dataNote3:"Aby przenieść dane, musisz użyć funkcji eksportu/importu plików .json.",dataNote4:"Zalecamy przechowywanie folderu aplikacji na partycji innej niż systemowa.",limitationsTitle:"OGRANICZENIA WERSJI OFFLINE:",limitationsDesc:"Ze względu na brak połączenia z {{url}}, wersja ta nie obsługuje:",limit1:"Gry online z uczniami przez link (brak serwera czasu rzeczywistego).",limit2:"Automatycznej kopii zapasowej w chmurze.",limit3:"Raportów z prac domowych i statystyk klasowych.",limit4:"Wizualnego edytora formuł matematycznych KaTeX (podgląd tylko tekstowy).",limit5:"Niektórych niestandardowych czcionek ze względów wydajnościowych.",gotIt:"Rozumiem"},keepTransferNote:"NIE ZMIENIAJ TYTUŁU PRZELEWU (MUSI BYĆ DOKŁADNIE TAKI JAK POWYŻEJ)"},internationalModal={title:"✨ FullGame PLAN - $12/Rok",description:"Odblokuj wszystkie narzędzia do nauczania interaktywnego.",pricingTitle:"Co otrzymujesz:",features:["Twórz nieograniczoną liczbę lekcji ze WSZYSTKIMI narzędziami","Nagrywaj i przesyłaj audio do treści lekcji","Szczegółowe raporty postępów uczniów","Narzędzia AI Grupy 1 na zawsze (Plany lekcji, Strategie nauczania, Pisanie badań)","Lekcje przechowywane na stałe w chmurze"],howToTitle:"Jak się zapisać:",step1:"Kliknij przycisk płatności poniżej.",step2:"Wprowadź kwotę: $12.",step3:'⚠️ WAŻNE: W polu wiadomości ("Say something nice..." w BMAC) wpisz adres e-mail swojego konta na tej stronie.',note:"Konto zostanie ręcznie zaktualizowane w ciągu 24 godzin od płatności.",payBtn:"Zapłać przez Buy Me a Coffee ☕",closeBtn:"Zamknij",hasVnAccount:"Czy masz wietnamskie konto bankowe?"},language={switchTo:"VI",current:"PL",dateLocale:"pl-PL"},externalTools={title:"Narzędzia zewnętrzne",warning:"Uwaga: Subskrypcje Innowacyjnego Nauczyciela dotyczą tylko tej platformy.",accessTooltip:"Przejdź do: {{name}}",categories:{teaching:"Edukacja i nauczanie",ai:"Narzędzia AI nowej generacji",aiGeneral:"Pomoc ogólna AI",aiImage:"Generatory obrazów",aiVideo:"Tworzenie wideo AI",aiAudio:"Głosy AI i piosenki",education:"Portale edukacyjne"}},usage={unlimited:"✅ Tryb nielimitowany aktywny",used:"Używasz {{current}} z {{limit}} projektów w darmowym planie próbny.",expired:"⚠️ Okres próbny wygasł. Tworzenie zablokowane.",noiseTrackerTrial:"Demo: Sesja zakończy się po 10 minutach.",proForever:"Plan Dożywotni (LIFETIME ACCOUNT)",proDaysRemaining:"Pozostało: {{days}} dni dostępu FullGame"},sidebar$1={upgradeBtn:"Zarządzaj ulepszeniami",upgradeTooltip:"Sprawdź plany i doładuj konto, aby znieść limity",helpBtn:"Instrukcja i POMOC",helpTooltip:"Zobacz wideo i instrukcję, jak tworzyć i grać z uczniami",noticeTitle:"Ważna informacja:",poseQuizNotice:"To nie jest AI śledzące ruchy przez kamerę w czasie rzeczywistym. To tablica dla klasy - uczniowie pokazują pozy, a nauczyciel zaznacza wynik lub używa timera.",upgradeLabel:"Ulepsz konto",helpLabel:"Pomoc",bugReportLabel:"Zgłoś błąd"},offline={downloadBtn:"Pobierz wersję Offline",linkBtn:"Link do pobrania (ZIP)",buyTooltip:"Zakup edycję do pracy bez internetu",viewLinkTooltip:"Pobierz archiwum ZIP z wersją offline. Lifetime dostęp bez limitów i bez rocznych opłat."},pin={note:"📌 Przypinając najczęściej używane {{item}} oszczędzasz miejsce w bazie po restarcie.",room:"pokoje gier",wheel:"koła fortuny",lesson:"lekcje",image:"obrazy",crossword:"krzyżówki",robot:"asystentów AI",pinned:"📌 Przypięto do ulubionych",unpinned:"📍 Odpięto",limitReached:"📌 Limit osiągnięty! Możesz przypiąć maksymalnie {{limit}} {{item}}.",pinnedLabel:"przypięte"},form$6={answer:"Odpowiedź",question:"Pytanie",questionContent:"Treść pytania",timeLimit:"Czas na pytanie (sek.)",timeLimitHelper:"Minimum 7 sek. Sugerowane: 15-25 sek.",errorMinTimeLimit:"Minimalny czas na pytanie to 7 sekund."},library={errorMetadataRequired:"Proszę wybrać Poziom edukacji, Przedmiot i Klasę, aby udostępnić w Bibliotece społeczności."},status={notEntered:"Brak danych"}
569,error$2={occurred:"Wystąpił nieoczekiwany błąd serwera. Spróbuj ponownie później."},actions$2={assign:"Zadaj",teacherShare:"Udostępnij nauczycielom",renew:"Odnów dostęp",prevPage:"← Poprzednia",nextPage:"Następna →",pageInfo:"Strona {{page}}",bugReport:"Zgłoś błąd",edit:"Edytuj",delete:"Usuń",play:"Graj",view:"Zobacz",share:"Udostępnij"},listTools={searchPlaceholder:"Szukaj lekcji...",clear:"Wyczyść wyszukiwanie",sortLabel:"Sortuj",sortNewest:"Najnowsze",sortOldest:"Najstarsze",sortNameAsc:"Nazwa A→Z",sortNameDesc:"Nazwa Z→A",sortMostQuestions:"Najwięcej pytań",noResults:"Nie znaleziono pasujących lekcji"},shuffleQuestions={label:"Losuj kolejność pytań",desc:"Przy każdej grze pytania pojawiają się w innej kolejności"},groups={createButton:"+ Nowa grupa",createTitle:"Utwórz nową grupę",renameTitle:"Zmień nazwę grupy",namePlaceholder:"Nazwa grupy (np. Informatyka kl. 6)",save:"Zapisz",cancel:"Anuluj",createSuccess:"Utworzono grupę",createError:"Nie udało się utworzyć grupy",renameSuccess:"Zmieniono nazwę grupy",deleteConfirm:"Usunąć tę grupę? Lekcje w środku zostaną przeniesione na zewnątrz, nie usunięte.",deleteSuccess:"Usunięto grupę",deleteError:"Nie udało się usunąć grupy",countLabel:"{{count}} lekcji",back:"← Wstecz",moveToGroup:"Przenieś do grupy",moveSuccess:"Przeniesiono lekcję",moveError:"Nie udało się przenieść lekcji",removeFromGroup:"Przenieś na zewnątrz",noGroup:"Bez grupy",rename:"Zmień nazwę",delete:"Usuń grupę",emptyGroup:"Ta grupa nie ma jeszcze lekcji. Przenieś lekcje z menu na każdej karcie lekcji.",inGroupLabel:"📁 {{name}}"},search={tab:"Szukaj",title:"Szukaj swoich lekcji",placeholder:"Wpisz nazwę lekcji (wszystkie narzędzia)...",loading:"Ładowanie lekcji...",noResults:"Nie znaleziono pasujących wyników",empty:"Nie masz jeszcze żadnych lekcji",untitled:"(Bez nazwy)",groupFeatures:"Funkcje",groupLessons:"Moje lekcje",labelFeature:"Otwórz"},ttsModal={title:"✨ Wymagania dotyczące funkcji AI Voiceover",step1Title:"1. Pakiet językowy polski w systemie",step1Success:"System ma zainstalowany głos polski",step1Needed:"Musisz zainstalować polski pakiet językowy w systemie Windows, aby przeglądarka mogła go odczytać.",step1GuideBtn:"Dodaj głos AI (Instrukcja wideo)",step2Title:"2. Używaj przeglądarki Microsoft Edge",step2Using:"✅ Używasz {{name}}",step2Warning:"⚠️ Obecnie używasz {{name}}",step2EdgeHint:"Microsoft Edge posiada bardziej naturalne głosy niż Chrome i nie zużywa limitów transferu danych.",step3Title:"3. Wymagane konto FullGame",step3Success:"Jesteś użytkownikiem FullGame PLAN",step3Needed:"Ta funkcja wymaga subskrypcji FullGame PLAN.",step3UpgradeBtn:"Kup FullGame teraz",toolTitle:"Lub skorzystaj z naszego generatora głosów AI",toolDesc:"Możesz również wygenerować mowę za pomocą naszego dedykowanego narzędzia AI, pobrać plik .mp3 i przesłać go ręcznie do każdego pytania.",toolBtn:"Narzędzie AI Voice Generator",proRequired:"Wymagane konto FullGame",closeBtn:"Zamknij",gotItBtn:"Rozumiem"},classManager={title:"Class manager",subtitle:"This class list is shared across every feature that uses classes. Click a class to edit details and attach student photos.",detailTitle:"Class details",emptyDesc:"You have no classes yet. Create one from a feature page (Wheel Quiz or Paper Mode), then come back here to manage it in detail.",studentCount:"{{count}} students",labelClassName:"Class name",labelClassPhoto:"Class group photo",labelStudents:"Student list",hintShared:"Edits here show up in every feature that uses this class.",warnTooManyClasses:"You have more than {{max}} classes, which may limit how some features work. Consider deleting classes you no longer use.",hintUnsaved:"You have unsaved changes. Leaving now will discard them (including photos you just picked).",placeholderName:"Full name",emptyRows:'No students yet. Click "Add student" or "Paste from Excel".',btnSave:"Save",btnSaving:"Saving...",btnCancel:"Cancel",btnOpen:"Open class",btnPlayGame:"Run a game",playGameHint:"Pick a feature to open, then select this class there",playGameWheel:"Wheel Quiz / Duck Race",playGameFaceRandom:"Photo Roll Call",playGamePaperMode:"Paper Mode",btnDeleteClass:"Delete class",confirmDeleteTitle:"Delete this class?",confirmDeleteMsg:'Class "{{name}}" will be permanently deleted, along with its student list and all attached photos. This cannot be undone.',successDeleteClass:"Class deleted",errorDeleteClass:"Could not delete the class. Please try again.",btnAddStudent:"Add student",btnAdd:"Add",btnClose:"Close",addTitle:"Add student",addHint:"{{current}}/{{max}} students so far. Press Enter to keep adding.",labelStudentName:"Student full name",tooltipMoveUp:"Move up",tooltipMoveDown:"Move down",btnShowPhotos:"Show photos",btnHidePhotos:"Hide photos",chipHasPhoto:"Has photo",chipPhotoPending:"Pending save",notePhotoOptional:"Student photos are only needed for a few specific features — they are entirely optional.",btnSplitPhoto:"Cut student photos from class photo",
569splitTitle:"Cut student photos from the class photo",splitHint:"Drag the slider to set the ring size, then click each student's face to pick their name. If faces look too small, scroll on the photo to zoom in, then drag to move around. Cut photos wait for you to press Save.",splitSize:"Ring size",splitZoomIn:"Zoom in (or scroll up)",splitZoomOut:"Zoom out (or scroll down)",splitZoomReset:"Fit to frame",splitPxHint:"Actual size of the crop area. {{out}}px or more stays sharp; below that the photo gets enlarged and looks soft.",splitBigExtra:"That photo is quite large, so panning and zooming may feel slow. That is expected — the closer to the original, the sharper the cut faces.",infoBigPhoto:"That photo is {{mb}}MB, so it takes a moment to process. Please wait — a larger original gives sharper cut photos.",splitLowRes:'The selected area is only {{px}}px, so the cut photo will look soft. To fix: drag the slider for a bigger ring, or click "Add photo to cut" and pick the ORIGINAL file from your device — originals keep full detail and cut far better than the saved class photo.',splitNoStudent:"This class has no students yet",splitErrorLoad:"Could not read the class photo for cutting. Try re-uploading the class photo, then cut right away.",btnFullscreen:"Fullscreen",btnExitFullscreen:"Exit fullscreen",splitAddSource:"Add photo to cut from",splitSourceMain:"Class photo",splitSourceExtra:"Extra",splitExtraNote:"Extra photos are only used for cutting — they are not saved.",splitDoneHint:"{{n}} photo(s) cut — remember to press Save on the page to keep them.",btnDone:"Done",tooltipPhotoPending:"Newly picked photo — press Save to upload",confirmLeave:"You have unsaved changes (including photos you just picked). Leaving will discard them. Leave anyway?",errorEmptyName:"Please enter a student name",btnPaste:"Paste from Excel",btnApplyPaste:"Apply",btnAddClassPhoto:"Add class photo",btnPrune:"Clean up {{count}} unused photos",tooltipPrune:"{{count}} photos belong to students no longer in the list. Click to delete them.",tooltipPhoto:"Click to pick a photo for this student",tooltipRemovePhoto:"Remove student photo",tooltipRevealPhoto:"Click to view this student's photo",tooltipHidePhoto:"Click to hide the photo again",tooltipRemoveRow:"Remove student from class",uploading:"Uploading...",pasteTitle:"Paste list from Excel",pasteWarning:"The pasted list REPLACES the entire current list. Students with matching names keep their photos.",pastePlaceholder:"Paste the name column here, one student per line...",successSave:"Class saved",successPrune:"Cleaned up {{count}} unused photos",prunedNone:"No unused photos",errorLoad:"Could not load classes",errorNotFound:"Class not found",errorSave:"Failed to save class",errorName:"Please enter a class name",errorMinStudent:"A class needs at least 1 student",errorOverLimit:"Exceeds the limit of {{max}} students per class",errorPhoto:"Photo operation failed",errorPasteEmpty:"No names found in the pasted text",errorConsent:"Nie udało się zapisać zobowiązania. Spróbuj ponownie.",btnPurge:"Usuń wszystkie zdjęcia",tooltipPurge:"Usuń wszystkie portrety i zdjęcie grupowe tej klasy",confirmPurgeTitle:"Usunąć wszystkie zdjęcia tej klasy?",confirmPurgeMsg:"Wszystkie portrety uczniów i zdjęcie grupowe zostaną trwale usunięte. Lista uczniów i nazwa klasy pozostaną bez zmian. Tej operacji nie można cofnąć.",successPurge:"Usunięto wszystkie zdjęcia tej klasy."},photoConsent={title:"Zobowiązanie dotyczące wykorzystania zdjęć uczniów",forClass:"Klasa: {{name}}",warning:"Zdjęcia portretowe uczniów to wrażliwe dane osobowe. W przypadku uczniów poniżej 16 lat prawo wymaga zgody rodzica lub opiekuna prawnego.",intro:"Kontynuując, potwierdzasz, że:",item1:"Uzyskałeś/aś zgodę rodzica lub opiekuna prawnego ucznia na wykorzystanie zdjęcia w działaniach dydaktycznych.",item2:"Zdjęcia służą wyłącznie do zajęć w tej klasie — nie są publikowane publicznie ani wykorzystywane komercyjnie.",item3:"Usuniesz zdjęcia, gdy rodzic wycofa zgodę lub gdy nie będą już potrzebne do nauczania.",item4:"Zdjęcia widzi tylko Twoje konto — platforma nie udostępnia ich innym użytkownikom.",checkbox:"Potwierdzam, że posiadam zgodę rodzica/opiekuna i biorę odpowiedzialność za powyższe zobowiązania.",btnCancel:"Anuluj",btnAgree:"Zobowiązuję się i kontynuuję",btnSaving:"Zapisywanie..."},plCommon={cancel,save,nav:nav$1,header,proModal,upgradeModal,internationalModal,language,externalTools,usage,sidebar:sidebar$1,offline,pin,form:form$6,library,status,error:error$2,actions:actions$2,listTools,shuffleQuestions,groups,search,ttsModal,classManager,photoConsent},nav={logo:"Innowacyjny Nauczyciel",aiTools:"Narzędzia AI",joinBtn:"🎮 Dołącz (dla uczniów)",loginBtn:"Zaloguj się",bugReportBtn:"Zgłoś błąd"},hero$2={title:"Innowacyjny Nauczyciel",subtitle:"Gry edukacyjne, narzędzia AI i nie tylko",description:"Platforma dla nowoczesnych nauczycieli, oferująca inteligentne narzędzia edukacyjne do optymalizacji nauczania.",loginCta:"Zaloguj się teraz - bez rejestracji!",
569joinCta:"🎮 Dołącz (dla uczniów)",qrScanCta:"Skanuj kod QR"},features$1={sectionTitle:"Narzędzia Edukacyjne",sectionSubtitle:"Poznaj nowoczesne narzędzia edukacyjne rozwijające jakość Twojego nauczania",tools:{aiTools:{title:"Narzędzia AI",description:"Narzędzia AI do pisania raportów, scenariuszy lekcji i wiele innych funkcji AI"},aiSpecialist:{title:"Specjalistyczne AI",description:"Sztuczna Inteligencja dedykowana zaawansowanym zadaniom edukacyjnym"},interactiveVideo:{title:"Interaktywne Wideo",description:"Twórz filmy edukacyjne z interaktywnymi pytaniami wielokrotnego wyboru"},interactiveImage:{title:"Interaktywny Obraz",description:"Dodawaj punkty dotykowe na obrazach z pytaniami quizowymi lub kartami pracy"},panoramaMuseum:{title:"Muzeum Panoramy - Galeria 3D",description:"Oglądaj wystawy 3D z interaktywnymi obrazami panoramicznymi 360°"},quizGame:{title:"Przeciągnij i Upuść",description:"Twórz quizy polegające na przeciąganiu etykiet na obrazach lub dopasowywaniu elementów"},companionRobot:{title:"Robot Towarzyszący",description:"Inteligentny robot AI, który towarzyszy uczniom podczas lekcji"},wheelQuiz:{title:"Koło Fortuny",description:"Koło losujące połączone z pytaniami quizu."},handSlashQuiz:{title:"Cięcie Owoców",description:"Odpowiadaj gestami machania rąk (styl Fruit Ninja)."},flipPuzzleGame:{title:"Odkrywanie Puzzli",description:"Uczniowie odpowiadają i odkrywają zakryte puzzle."},turnBasedGame:{title:"Gra Turowa",description:"Rzuty kostką na planszy pełnej pytań (do 4 graczy)."},versusGame:{title:"Pojedynek",description:"Walka 1 na 1 odpowiadając na swoich urządzeniach."},tugOfWarGame:{title:"Przeciąganie Liny",description:"Turniej dla drużyn odpowiadających na stółku do gry."},pacedQuiz:{title:"Quiz Kontrolowany",description:"Wyświetl pytania z rzutnika, Ty dyktujesz tempo."},crosswordPuzzle:{title:"Krzyżówka",description:"Hasła odkrywane za pomocą quizu."},flyingWordsGame:{title:"Latające Słowa",description:"Łap latające słowa (ręką lub myszką), aby ułożyć lub znaleźć właściwe słowa tworzące pełne zdanie"},headTiltQuiz:{title:"Przechylanie Głowy",description:"Wskazuj odpowiedź pochylając głowę przed kamerą."},starBagGame:{title:"Zbieracz Gwiazd",description:"Dwie drużyny rywalizują unosząc palce by wybrać odpowiedź — zbierz gwiazdy i wygraj!"},poseQuiz:{title:"Gimnastyka ABC",description:"Wykonuj wylosowane pozy jako odpowiedzi."},noiseTracker:{title:"Miernik Hałasu",description:"Smok sprawdza czy w klasie jest cicho."},journey:{title:"Ścieżka Nauki",description:"Twórz mapy i śledź przejścia do końca."},paperMode:{title:"Tryb Papierowy",description:"Skanuj szybkie karty uczniów by zdobyć wynik."},faceRandom:{title:"Szczęśliwy Obiektyw",description:"Losowanie twarzy przez skaner na lekcji."}}},paperModeBeta$1="Skanuj papierowe karty A/B/C/D kamerą — oceń całą klasę w kilka sekund, bez urządzeń dla uczniów",betaBadge$1="🧪 Tryb Testowy",footer$2={ownerLabel:"Właściciel",ownerName:"Ban Van Thinh",ownerAddress:"Vinh Tuy, Prowincja Tuyen Quang, Wietnam",ownerTax:"NIP: 002090004198",connectLabel:"Połącz się",legalLabel:"Informacje prawne",policy1:"💰 Cennik",policy2:"🔒 Polityka Prywatności",policy3:"📜 Warunki Użytkowania",policy4:"🚚 Polityka Dostaw",policy5:"👤 Informacje o Właścicielu",copyright:"© 2025 Rozwijane przez Thầy Giáo Tin",buildTime:"Zaktualizowano o {{time}} w dniu {{date}}",facebook:"Facebook",tiktok:"TikTok",youtube:"Youtube",zalo:"Zalo",zaloCommunity:"Społeczność Zalo",email:"Email",guide:"Poradnik",guideTooltip:"Pokaż jak korzystać"},webviewModal={title:"⚠️ Logowanie zablokowane wewnątrz tej aplikacji",intro:"Otwarłeś stronę przez komunikator. Otwórz w przeglądarce zewnętrznej:",step1:"Krok 1: Kliknij menu ⋮ w prawym rogu",step2:'Krok 2: Wybierz "Otwórz w przeglądarce"',btnClose:"Zamknij"},emailModal$1={title:"Adres Email",btnClose:"Zamknij"},loading="Wczytywanie...",plLanding={nav,hero:hero$2,features:features$1,paperModeBeta:paperModeBeta$1,betaBadge:betaBadge$1,footer:footer$2,webviewModal,emailModal:emailModal$1,loading},heroTitle="Zmodernizujmy nauczanie razem",modules={"ai-tools":{title:"Narzędzia AI",description:"Narzędzia AI do badania akcji, integracji i pomocy naukowych."},"ai-specialist":{title:"Specjalistyczne AI",description:"Autorskie AI do tworzenia raportów, generowania produktów..."}
569,"interactive-video":{title:"Interaktywne Wideo",description:"Twórz wideo z interaktywnymi zadaniami."},"interactive-image":{title:"Interaktywny Obraz",description:"Klikane etykiety na obrazach dla uczniów."},"panorama-museum":{title:"Muzeum Panoramy - Galeria 3D",description:"Interaktywna wystawa w formacie 360 stopni."},"quiz-game":{title:"Przeciągnij i Upuść",description:"Przeciąganie etykiet i dopasowywanie odpowiedzi."},"wheel-quiz":{title:"Koło Fortuny",description:"Koło losujące połączone z pytaniami quizu."},"hand-slash-quiz":{title:"Cięcie Owoców",description:"Odpowiadaj gestami machania rąk (styl Fruit Ninja)."},"flip-puzzle-game":{title:"Odkrywanie Puzzli",description:"Uczniowie odpowiadają i odkrywają zakryte puzzle."},"knowledge-train-game":{title:"Pociąg Wiedzy",description:"Przeciągnij i upuść wagony we właściwej kolejności — dopasuj odpowiedź do następnego pytania"},"turn-based-game":{title:"Gra Turowa",description:"Rzuty kostką na planszy pełnej pytań (do 4 graczy)."},"versus-game":{title:"Pojedynek",description:"Walka 1 na 1 odpowiadając na swoich urządzeniach."},"tug-of-war-game":{title:"Przeciąganie Liny",description:"Turniej dla drużyn odpowiadających na stółku do gry."},"paced-quiz":{title:"Quiz Kontrolowany",description:"Wyświetl pytania z rzutnika, Ty dyktujesz tempo."},"crossword-puzzle":{title:"Krzyżówka",description:"Hasła odkrywane za pomocą quizu."},"head-tilt-quiz":{title:"Przechylanie Głowy",description:"Wskazuj odpowiedź pochylając głowę przed kamerą."},"star-bag-game":{title:"Zbieracz Gwiazd",description:"Dwie drużyny rywalizują unosząc palce by wybrać odpowiedź — zbierz gwiazdy i wygraj!"},minesweeper:{title:"Saper",description:"Wybierz pole z poprawną odpowiedzią, aby przejść przez pole minowe — quiz przygodowy z 3 życiami; nadepnięcie na minę wybucha"},flashcard:{title:"Karty do nauki (Flashcard)",description:"Twórz zestawy fiszek z dźwiękiem i obrazem — przewracaj karty, oceń siebie, ucz się do opanowania"},"mind-map":{title:"Mapa myśli",description:"Rejestruj wiedzę na żywo podczas lekcji za pomocą pływającej naklejki — na końcu automatycznie generuje pełną mapę myśli, z możliwością powiększania i eksportu"},"pose-quiz":{title:"Gimnastyka ABC",description:"Wykonuj wylosowane pozy jako odpowiedzi."},"noise-tracker":{title:"Miernik Hałasu",description:"Smok sprawdza czy w klasie jest cicho."},"flying-words-game":{title:"Latające Słowa",description:"Łap latające słowa (ręką lub myszką), aby ułożyć lub znaleźć właściwe słowa tworzące pełne zdanie"},"teaching-materials":{title:"Kursy Pana Tina",description:"Gotowe do użycia plany i pomoce szkolne."},journey:{title:"Ścieżka Nauki",description:"Twórz mapy i śledź przejścia do końca."},"paper-mode":{title:"Tryb Papierowy",description:"Skanuj szybkie karty uczniów by zdobyć wynik."},"face-random":{title:"Szczęśliwy Obiektyw",description:"Losowanie twarzy przez skaner na lekcji."},"html-embed-game":{title:"Własna Gra",description:"Wklej kod HTML gry i przydziel uczniom — mogą grać natychmiast, bez programowania"}},comingSoon="Wkrótce...",startBtn="Start",lockedBtn="Zablokowane",trialBtn="🎁 Wypróbuj",updatingBadge="🔧 Trwa aktualizacja",journeyModal={title:"Ścieżka Nauki",lockLabel:"🔒 Funkcja Premium",intro:"Zaprojektuj interaktywne tory dla uczniów pełne pytań z różnych kategorii do rozwiązania po drodze.",featuresTitle:"✨ Kluczowe Funkcje:",feature1:"Pokaż po drodze dziesiątki zadań rozmaitego typu",feature2:"4 rodzaje pytań (Wielokrotny Wybór, i więcej...)",feature3:"Dostęp z kodu pokoju bez logowania",feature4:"Zapisy do bazy wyników",feature5:"Autozapis prac",videoTitle:"🎬 Wideo Poradnik:",upgradeBtn:"🔓 Kup Dostęp"},versusModal={title:"Pojedynek",lockLabel:"🔒 Funkcja FullGame",intro:"Studenci mierzą siły na urządzeniach bez patrzenia na rzutnik. Pokonaj resztę dobrą odpowiedzią by wygrać rundę.",featuresTitle:"✨ Kluczowe Funkcje:",feature1:"Oddzielne urządzenia – brak ekranu rzutnika podglądu",feature2:"Pokoje hostowane przez panel Nauczyciela",feature3:"Widoczny postęp wygranych walk u zawodnika",feature4:"Widok 360",feature5:"Zapis wyników tabeli gry",upgradeBtn:"🔓 Kup Dostęp"},footer$1={ownerLabel:"Właściciel",ownerName:"Ban Van Thinh",ownerAddress:"Vinh Tuy, Prowincja Tuyen Quang, Wietnam",ownerTax:"NIP: 002090004198",connectLabel:"Połącz się",legalLabel:"Informacje prawne",utilsLabel:"Narzędzia",policy1:"💰 Cennik",policy2:"🔒 Polityka Prywatności",policy3:"📜 Warunki Użytkowania",policy4:"🚚 Polityka Dostaw",policy5:"👤 Informacje o Właścicielu",guide:"Poradnik",guideTooltip:"Pokaż jak korzystać",fixError:"Napraw usterkę",fixErrorTooltip:"Błędy ładowania wersji platformy",confirmReset:"Usuniemy lokalne buforowanie, należy zalogować się ponownie. Na pewo?",copyright:"© 2025 Rozwijane przez Thầy Giáo Tin",buildTime:"Zaktualizowano {{date}} o {{time}}"},emailModal={title:"Adres Email",btnClose:"Zamknij"},helpModal={title:"Przewodnik",description:"Sprawdź o czym mówi każda z unikalnych opcji platformy."}
569,paperModeBeta="Skanuj papierowe karty A/B/C/D kamerą — oceń całą klasę w kilka sekund, bez urządzeń dla uczniów",betaBadge="🧪 Tryb Testowy",plHome={heroTitle,modules,comingSoon,startBtn,lockedBtn,trialBtn,updatingBadge,journeyModal,versusModal,footer:footer$1,emailModal,helpModal,paperModeBeta,betaBadge},hero$1={title:"💰 Cennik i Zakupy",sub:"Dostępne Free-to-Try do sprawdzenia bez karty przed zakupami pełnej licencji. Ukryte koszty? Absolutnie brak!"},proPlan={title:"PAKIET FullGame — Pełna Moc Systemu we Wszystkich Modułach",badge:"Najchętniej Kupywana Oferta (Hit)",price:"200,000₫",unit:"/ roczna przedpłata za pakiet do gier",description:"Odblokowuje dosłownie każdy z kafelków plus dodatkowo AI Narzędzia z platformy specjalistycznej",features:["Wgrawanie Piosenek czy dźwieków pod pytania by np było muzykalnie od gadania z pytan","Generator ze statystyczym exelem i wgladem do oceny by ułatwic tobie wiedze","Bezlimity u wszystkich kafelkow na gry by tworzyć ile podłóg od limitu sztuk do 12 msc. za darmo juz (termin)","Co ciekawe: to u limitow a nawet gdy limit msc gasnie minie pakiet - zachowujesz prawa dosteu do plikow ale z limit - ale bez blokady dostepu po starym","Dzial Ai Narzediza i generaca lekcji ze AI dalo robic by zadanoa - Plan jako LIFTIME (kupuj raz dozywtke)!","Narzędzie ASYSTENTA by AI u Asysy AI Spec - (Tu raz na zycie masz dostep LIFTIME)","Zapisuj tyle plików gier aż dyski spękną w bazie u ciebe w tworzenion"]},singularFeatures={title:"Osobny pojedynczy moduł jak masz pusty portfel co by tylko gry brać po jednej gierce",price:"30,000₫",unit:"/ rok za pojedynczy bąbel z grą w aplikacji",line1:"By tu nie tracic siana kupuj jedną grę by grać, np jakas nowa wysza 30 tyś",line2:"Płac z kasy na zapas to doładuje na konto (2 l to x2 stawki wiec to podbija z automatu dając limit np 2 lata, 3 i tak samo po 10 letnich plan to 30 tys * ilosc u automa bazy kwot)",list:["Do zakupow za 3 dychy podlegaja wylacnie : gry do tablic (Szubienica gry zespołowe krzyz z rzuta na sciane etc by kupowac te bez pro pakkietow)"]},extendedLink={title:"Specyfiaczna Przedłużoa Żywotnośc do Linku Twojej Gracj w Pracy / Badań Pozycyjne do Pracy z zadnai po 1 ROK i Rok",price:"100,000₫",unit:"/ za rok od jednej",description:"Tylko dla tych co biora udział uczniu na boku badan statystyka np pisze magistekre co potrzbuj by jego gra i badana wisil by link nei padl z nudy z automatem po msc.",features:["Twój odnośik wyslany do dziaeciarni trymz do konca kalnedraz roczny bądfz dwuletini do ucelow z badani itd","Dotyk to wszsytkich typow dziela gdzie system wyrzcuia przypisana akjce","Zablkol do do maks 50 linkow aktywnych u Cb od tego do opcji bo po chmuze gania to po sys limitach u nas.","A po dwa laka mozesz miec po 150 ty (znizka w by pakit na taniej by za duzy hajsu z budetu do)"]},aiTools={title:"Ai Pomocniny od Inteligecni po Opcji u Modulow / Ai Narzedza",aiToolsTitle:"Systemy AI Z Tworzeniem",aiToolsPrice:"100,000₫",aiToolsUnit:"/ opłcone Lifetime na dożywociach",aiSpecialistTitle:"Pomocnik Ekspercki od Edukownia",aiSpecialistPrice:"50,000₫",aiSpecialistUnit:"/ bez końca Lifeteim",line1:"Raz podajesz opalte – i od u tworeni ma sie by miec po end do smieci i dost.",noteLabel:"Zwróc bacyznosć uwag u nas u bacznośc:",line2:"Jeśli u FullGame pakiekt tu od nas – masz to zawarte juz bo tak (to pakier calosy!) Od tego co tu NIE MASZ by przetesownao (AI to ksozt dla serera od OpenAI etc , wiec trial NO WAY). Obejrz w Youtube Video film by nie kupc kota worze w zamiane bo bezez darmch nie idzie AI odpalu z koszt.",features:["Stworzy w mig by lekcje scenarj, teesty cwicznej dla ucznia robotem na AI model u narzdzi","Rozmówny czat AI robot do porad edukacj","Pytj limitow masz pelen bagz nic nei limitje sztuk w zapytaniach chat AI"]},freeTrial={title:"Trial by Opcj Testowa By Sie Nie Nabic za w Ciemne (Rozdziały Trybow)",intro:"Bądz user nowonby byś uzywal testy z portlou <0>gratis caly i calkow</0> – z mały gwinck limit 05 od po gier i po test od gry z kafel u portflu bo na opcach u AI spec bązd od Modelow AI tam blokdada (Patrz video).",table:{feature:"Częśći i Opcje u System",limit:"Max Limit Od Gry / Tworznia z Test."},note:"Rzeczy a gry pliki ktore u robisz za trila i tak sa twojc - na u po limcie by zostaja po za limit od gier ale masz plokad do utrwoza bo po u 5/5 gorn lmit."},multiYear={title:"Zniżki Na LATA dla Wielkich Zakupo u Rabatowania Promocyjk z Ilosca z Przedplata Roku z Puli",intro:"Co wchodzi to np <0>OPCJA OD FullGame PLAN All / FullGame</0>
569 z Opcji / z kafelg w pojedncz na wieciej np 2 LATA: i rbat:",table:{years:"Okres Lata",discount:"Zjazd z Cen (%) RABATU"},yearUnit_one:"1 Roczek",yearUnit_other:"{{count}} Letnich z Cykl u lat (lata)",noDiscount:"Puste i Zwykłe (0%) Bez Znioz",discountValue:"{{percent}}% Poniżej i Taniej do Kufia",note:"A u kodoW wpisu i tak odpal piew systemow nizk za multi lata ze spr z przed i by tu wbil bonus dodatkc."},notes={title:"📌 Uwag I Pamiątki Dodatkwowe bys Pamieta ze od Wazne do Informacja System :",item1:"Przlew tylko u Opcji: <0>Przelew i Bank i Bank Appc</0> (z Z U Wyprowadz na po QR by ci app skanero pociagla kask).",item2:"Bot to ksieguje bieznie na sekundy (Opcje Automate SePay Viet) po zaplceni po wpisalnu - tu chwyta w limit ok gora minute z do maks po zaklepayn w uzycia.",item3:"Bo jak nie wbil z opcje co do suppora to zale i po numer do u obługs z kontu Appka Czt i Czt <0>{{phone}}</0>."},cta={title:"Rozpoczynam z Wami z Dniem Dziesej od Portelu",sub:"Lec z nami z opcj Trial / Gratis — A od by sie placalo, wyzyje by gdzies plau u App w upgrade z limtit.",btn:"Mój Zalo Do Po Konsulta czy Potrzbe Po Sprawy Supportu Z Alo/ Pytania z Czat U Pomoc/ Info z Wsp"},plPricing={hero:hero$1,proPlan,singularFeatures,extendedLink,aiTools,freeTrial,multiYear,notes,cta},shipping={hero:{title:"Zasady Płatności i Odblokowywania Konta",sub:"Przewodnik po aktywacji usług cyfrowych na <1>{{url}}</1>",lastUpdated:"Ostatnia aktualizacja: {{date}}"},digitalNote:{title:"📦 Ważne uwagi:",content:"<1>{{name}}</1> jest platformą dostarczającą <1>usługi oprogramowania cyfrowego (SaaS)</1>. <1>Nie dostarczamy towarów fizycznych</1>. Wszystkie produkty/usługi są świadczone całkowicie online za pośrednictwem konta użytkownika."},ordering:{title:"1. Proces Zamawiania i Potwierdzanie Transakcji",intro:"Aby ulepszyć konto, użytkownik wykonuje następujące kroki:",steps:[{title:"Logowanie",desc:"Zaloguj się na konto giaoviendoimoi.com przez Google"},{title:"Wybór pakietu",desc:"Wybierz odpowiedni pakiet ulepszeń (FullGame, AI Tools, pojedyncze funkcje...)"}
569,{title:"Płatność",desc:"Wyślij przelew bankowy zgodnie z kodem QR podanym na stronie ulepszeń"},{title:"Aktywacja",desc:"System automatycznie potwierdza i aktywuje usługę"}]},activation:{title:"2. Czas Aktywacji Usługi",intro:"Po pomyślnym dokonaniu płatności, usługa zostanie aktywowana zgodnie z następującymi ramami czasowymi:",timeline:[{title:"Aktywacja automatyczna — Poniżej 5 minut",desc:"Przy płatności przez <1>VietQR</1> z poprawnym tytułem przelewu. System SePay automatycznie potwierdza i aktualizuje konto bez potrzeby ręcznej weryfikacji."},{title:"W ciągu 2–4 godzin roboczych",desc:"W przypadku braku automatycznego potwierdzenia, sprawdzimy i aktywujemy usługę ręcznie w godzinach pracy (8:00–22:00 codziennie)."},{title:"Maksymalnie 24 godziny",desc:"W przypadku płatności poza godzinami pracy lub potrzeby dodatkowej weryfikacji. Jeśli minęło 24h, prosimy o kontakt przez Zalo lub e-mail."}]},scope:{title:"3. Zakres Świadczonych Usług",items:["Usługi są świadczone online, bez ograniczeń geograficznych","Wymagane jest urządzenie z internetem i przeglądarką (Chrome, Edge, Firefox, Safari)","Nie jest wymagana instalacja oprogramowania (z wyjątkiem pakietu Offline)","Kompatybilność z komputerami, tabletami i smartfonami"]},confirmation:{title:"4. Potwierdzenie Transakcji",intro:"Po pomyślnym zakończeniu transakcji i aktywacji:",items:["Status konta zaktualizuje się na stronie (górny prawy róg)","Wszystkie zakupione funkcje zostaną odblokowane natychmiast","Informacje o pakiecie i dacie wygaśnięcia są widoczne w panelu zarządzania kontem","W razie potrzeby można poprosić o pisemne potwierdzenie e-mailem"]},refund:{title:"5. Zasady Zwrotów",intro:"Ze względu na charakter <1>usług cyfrowych</1> (aktywacja natychmiastowa), zasady zwrotów są następujące:",validCases:{title:"✅ Przypadki kwalifikujące się do zwrotu:",items:["Usługa nie działa zgodnie z opisem w ciągu 7 dni od aktywacji","Zduplikowana płatność (opłacenie dwa razy tego samego pakietu)","Błędna aktywacja pakietu z winy systemu"]},warning:"<1>⚠️ Uwaga:</1> <1>Nie dokonujemy zwrotów</1> w przypadku zmiany zdania po rozpoczęciu korzystania z usługi lub gdy konto zostało zablokowane za naruszenie warunków. Prosimy o uważne czytanie opisów przed zakupem.",requestInfo:"Aby poprosić o zwrot, skontaktuj się pod adresem <1>{{email}}</1> w ciągu <1>7 dni</1> od płatności, dołączając dowód transakcji."}
569,technicalSupport:{title:"6. Wsparcie Techniczne Po Aktywacji",items:["Wsparcie przez Zalo: 0363 357 745 (8:00–22:00)","Wsparcie przez E-mail: [email protected] (odpowiedź w 2-3 dni robocze)","Instrukcje na oficjalnych kanałach YouTube i TikTok","Grupy wsparcia na Facebooku i społeczność nauczycieli na Zalo"]},relatedLinks:{label:"📋 Powiązane dokumenty:",privacy:"🔒 Polityka Prywatności",terms:"📜 Warunki Użytkowania",about:"👤 Informacje o Właścicielu"},contact:{title:"Kontakt ze Wsparciem",sub:"Jeśli usługa nie została aktywowana w terminie lub potrzebujesz pomocy z transakcją, skontaktuj się z nami:",note:"Możesz też napisać na Zalo: <1>{{phone}}</1> dla szybszej pomocy."},footer:{copyright:"© {{year}} {{name}}. Wszelkie prawa zastrzeżone.",privacy:"Polityka prywatności",terms:"Warunki"}},privacy={hero:{title:"Polityka Prywatności",sub:"Zobowiązanie <1>{{name}}</1> do ochrony Twojej prywatności i danych osobowych.",lastUpdated:"Ostatnia aktualizacja: {{date}}"},intro:{p1:"Witamy w <1>{{name}}</1> (giaoviendoimoi.com) — platformie wspierającej nauczycieli w tworzeniu interaktywnych lekcji, gier edukacyjnych i efektywnym zarządzaniu klasą. Rozumiemy, że Twoja prywatność jest niezwykle ważna. Niniejsza polityka wyjaśnia, w jaki sposób zbieramy, wykorzystujemy, przechowujemy i chronimy Twoje informacje.",summary:{title:"📌 Szybkie podsumowanie:",content:"Zbieramy wyłącznie minimum informacji niezbędnych do działania serwisu. <1>Nie sprzedajemy</1> danych, nie udostępniamy ich bez upoważnienia i nie wykorzystujemy do reklam podmiotów trzecich. Zdjęcia i imiona uczniów wprowadzone przez nauczyciela opisuje <1>Sekcja 10</1>."}},section1:{title:"1. Informacje, Które Zbieramy",sub1:"1.1. Logowanie przez Google (Google Sign-In)",p1:"Gdy logujesz się za pomocą konta Google poprzez Firebase Authentication, otrzymujemy jedynie następujące informacje:",items1:["Adres e-mail — służy do identyfikacji konta i kontaktu w razie potrzeby","Nazwa wyświetlana — służy do personalizacji interfejsu","Zdjęcie profilowe — publiczny adres URL zdjęcia z Twojego konta Google"],scopes:{title:"Zakres uprawnień (Scopes):",pre:"Prosimy tylko o podstawowy zakres (",mid:"). ",not:"NIE",post:" prosimy o dostęp do Twojego Gmaila, Dysku Google, Kontaktów ani żadnych innych wrażliwych danych."},sub2:"1.2. Dane uczniów",p2:"Uczniowie <1>nie mają kont</1> i nigdy nie rejestrują się samodzielnie. Istnieją dwa odrębne przepływy danych: (a) uczeń dołącza kodem PIN — dane przetwarzane <1>anonimowo</1>, zapisujemy tylko wybrany przez niego pseudonim i wyniki aktywności; (b) lista klasy <1>wprowadzona przez nauczyciela</1> — może zawierać imiona i nazwiska oraz zdjęcia portretowe. Przepływ (b) to dane osobowe, opisane w Sekcji 10.",sub3:"1.3. Dane o korzystaniu z usługi",p3:"Możemy rejestrować informacje techniczne, takie jak: typ przeglądarki, adres IP, czas dostępu w celu analizy wydajności i ulepszania usługi. Dane te nie są wykorzystywane do identyfikacji osób."},section2:{title:"2. Jak Wykorzystujemy Twoje Informacje",items:["Weryfikacja tożsamości i przyznawanie dostępu do konta","Przechowywanie quizów, kół fortuny, gier i treści edukacyjnych, które tworzysz","Śledzenie historii gier i postępów w nauce (dane anonimowe)","Zarządzanie pakietami usług i historią płatności konta","Wysyłanie ważnych powiadomień technicznych dotyczących konta","Ulepszanie i rozwój nowych funkcji platformy"]},section3:{title:"3. Przechowywanie i Bezpieczeństwo Danych",sub1:"3.1. Miejsce przechowywania danych",p1:"Wszystkie dane użytkowników są bezpiecznie przechowywane na infrastrukturze <1>Google Firebase</1> (Firestore, Authentication, Storage) — zgodnie ze standardami ISO 27001 i SOC 2/3.",items1:["Quizy i materiały dydaktyczne, które tworzysz","Historia gier i wyniki aktywności klasy","Postępy w nauce (anonimowe dane uczniów dołączających kodem PIN)","Lista klasy wprowadzona przez nauczyciela: imiona i zdjęcia portretowe uczniów (jeśli nauczyciel z nich korzysta)","Informacje o pakiecie usług i dacie wygaśnięcia"],sub2:"3.2. Środki bezpieczeństwa",items2:["Szyfrowanie danych w trakcie przesyłania (HTTPS/TLS)","Kontrola dostępu oparta na rolach (nauczyciel widzi wyłącznie własne dane)","Zdjęcia uczniów przechowywane w prywatnym obszarze konta; reguły bezpieczeństwa blokują dostęp z innych kont","Wielowarstwowe uwierzytelnianie przez Firebase Authentication","Regularne kopie zapasowe zgodnie z polityką Google Firebase"],warning:"<1>⚠️ Uwaga:</1> Mimo stosowania najlepszych środków bezpieczeństwa, żaden system nie gwarantuje 100% bezpieczeństwa. Prosimy o dbanie o bezpieczeństwo swojego konta Google."},section3b:{title:"3b. Bezpieczeństwo Kluczy API (Robot Towarzyszący)",p1:"Funkcja <1>Companion Robot</1> pozwala nauczycielom na podłączenie własnej sztucznej inteligencji za pomocą prywatnego klucza API Gemini. Zgodnie z przepisami o ochronie danych, <1>nie przechowujemy kluczy API w formacie tekstowym</1>.",commitment:"<1>🔐 Zobowiązanie do szyfrowania:</1> Twój klucz API jest szyfrowany algorytmem <1>AES-256-GCM</1> (standard wojskowy) bezpośrednio na Twoim urządzeniu przed wysłaniem na serwer. <1>Nie możemy odczytać</1> Twojego klucza API — nawet nasz zespół techniczny.",items:["Szyfrowanie AES-256-GCM odbywa się całkowicie po stronie klienta (przeglądarki), zanim dane opuszczą urządzenie","Klucz szyfrujący jest unikalny dla każdego konta — nikt inny (w tym admin) nie może go odszyfrować","Firebase przechowuje tylko zaszyfrowaną postać (ciphertext), nigdy oryginalny klucz","Po usunięciu konta, wszystkie zaszyfrowane dane są również trwale usuwane"]}
569,section4:{title:"4. Płatności i Ulepszenia Konta",p1:"Ulepszenia do konta FullGame są przetwarzane poprzez przelew bankowy (<1>VietQR</1>) lub Buy Me a Coffee dla użytkowników międzynarodowych.",commitment:{title:"🔐 Zobowiązanie płatnicze:",content:"Nasz system <1>NIE</1> przechowuje żadnych informacji o kartach kredytowych, debetowych ani kontach bankowych. Przelewy bankowe są wykonywane bezpośrednio przez aplikację bankową użytkownika lub za pośrednictwem Buy Me a Coffee."},items:["Przechowujemy jedynie status planu (Free/FullGame) i datę odnowienia","Tytuł przelewu (kod weryfikacyjny) używany do potwierdzenia płatności","Historia płatności służąca do wsparcia klienta w razie potrzeby"]},section5:{title:'5. Nasze Trzy Zobowiązania "NIE"',commits:[{title:"NIE sprzedajemy danych",desc:"Nigdy nie sprzedajemy, nie wynajmujemy ani nie wymieniamy Twoich danych osobowych podmiotom trzecim w celach komercyjnych."},{title:"NIE wysyłamy spamu",desc:"E-mail służy wyłącznie do uwierzytelniania i ważnych powiadomień technicznych. Bez reklamowego spamu."},{title:"NIE wykorzystujemy zdjęć uczniów",desc:"Zdjęcia i imiona uczniów nie są używane do reklamy, trenowania AI ani w żadnym celu poza wyświetleniem ich temu samemu nauczycielowi."}]},section6:{title:"6. Udostępnianie Informacji Stronom Trzecim",p1:"Udostępniamy informacje wyłącznie poniższym partnerom w celu świadczenia usługi. Zdjęcia i imiona uczniów <1>nie są udostępniane</1> żadnemu partnerowi poza infrastrukturą przechowywania Google Firebase.",table:{partner:"Partner",purpose:"Cel",data:"Udostępniane dane",rows:[["Google Firebase","Przechowywanie i uwierzytelnianie","E-mail, imię, awatar nauczyciela; zdjęcia/imiona uczniów (wyłącznie przechowywanie)"],["Bank / Buy Me a Coffee","Obsługa płatności","Imię, e-mail (do faktur)"],["Google Analytics","Anonimowa analityka wydajności","Dane anonimowe (bez zdjęć/imion uczniów)"]]}},section7:{title:"7. Twoje Prawa",items:["Prawo dostępu: wgląd w dane osobowe, które o Tobie przechowujemy","Prawo do sprostowania: poprawienie nieprawidłowych danych osobowych","Prawo do usunięcia: żądanie usunięcia wszystkich danych konta","Prawo do wycofania zgody: odwołanie dostępu Google OAuth w dowolnym momencie","Prawo do przenoszenia danych: otrzymanie kopii danych w czytelnym formacie","Prawa rodziców/uczniów: żądanie wglądu, sprostowania lub usunięcia zdjęć i danych ucznia (zob. Sekcja 10)"],requestInfo:"Aby skorzystać z dowolnego prawa, prosimy o kontakt pod adresem <1>{{email}}</1>. Rozpatrzymy prośbę w ciągu <1>7 dni roboczych</1>."},section8:{title:"8. Ciasteczka i Technologie Śledzące",items:["Niezbędne ciasteczka: Utrzymanie sesji logowania (wymagane do działania usługi)","Opcjonalne ciasteczka: Zapisywanie ustawień interfejsu (język, motyw)","Analityka: Analiza anonimowego ruchu w celu poprawy wydajności"],p1:"Możesz usunąć ciasteczka w dowolnym momencie w ustawieniach przeglądarki. Wyłączenie niezbędnych ciasteczek może jednak wpłynąć na funkcjonalność logowania."},section9:{title:"9. Ochrona dzieci",p1:"Serwis przeznaczony jest do użytku przez <1>nauczycieli</1>. Uczniowie nie mają własnych kont i nigdy nie rejestrują się samodzielnie na platformie.",sub1:"Uczniowie dołączający kodem PIN",p2:"Bez rejestracji, bez e-maila, bez danych osobowych. Uczeń podaje wyłącznie samodzielnie wybrany pseudonim wyświetlany w rankingu. Zalecamy, aby nauczyciele poinstruowali uczniów, by nie używali pełnego imienia i nazwiska jako pseudonimu.",sub2:"Lista klasy wprowadzona przez nauczyciela",p3:"Niektóre funkcje (obecność, losowanie ucznia, podział na grupy) wymagają wprowadzenia listy klasy, opcjonalnie ze zdjęciami portretowymi uczniów. To dane osobowe dzieci, szczegółowo opisane w Sekcji 10."},section10:{title:"11. Zmiany w Polityce",p1:"Wszelkie istotne zmiany będą ogłaszane poprzez:",items:["Widoczne powiadomienie na stronie na co najmniej 30 dni przed wejściem w życie","Powiadomienie e-mail wysłane na zarejestrowany adres (przy ważnych zmianach)",'Aktualizacja daty "Ostatnia aktualizacja" na górze tej strony'],p2:"Dalsze korzystanie z usługi po wejściu zmian w życie oznacza akceptację nowej polityki."},section11:{title:"13. Kontakt i Żądanie Usunięcia Danych",sub:"Jeśli masz pytania dotyczące polityki prywatności lub chcesz poprosić o usunięcie wszystkich danych konta, prosimy o kontakt:",note:'Prosimy o wpisanie w temacie: "Żądanie usunięcia danych" oraz podanie zarejestrowanego adresu e-mail. Rozpatrzymy prośbę w ciągu <1>7 dni roboczych</1>.'},footer:{copyright:"© {{year}} {{name}}. Wszelkie prawa zastrzeżone.",login:"Zaloguj się"},sectionPhotos:{title:"10. Zdjęcia i dane uczniów wprowadzone przez nauczyciela",p1:"Niektóre funkcje pozwalają nauczycielowi utworzyć listę klasy z imionami i zdjęciami portretowymi uczniów, na potrzeby obecności, losowania ucznia czy podziału na grupy. Jest to funkcja opcjonalna — z platformy można w pełni korzystać bez przesyłania jakiegokolwiek zdjęcia.",warning:"<1>⚠️ Zdjęcia portretowe uczniów to wrażliwe dane osobowe.</1> W przypadku uczniów poniżej 16 lat przetwarzanie wymaga zgody rodzica lub opiekuna prawnego zgodnie z obowiązującymi przepisami o ochronie danych osobowych.",sub1:"10.1. Role stron i podstawa prawna",p2:"Nauczyciel (lub szkoła) decyduje o zbieraniu i wykorzystaniu zdjęć uczniów i odpowiada za uzyskanie zgody rodziców lub opiekunów prawnych. Platforma pełni wyłącznie rolę prze
569chowywania i wyświetlania zdjęć na żądanie tego nauczyciela. Przed pierwszym przesłaniem zdjęć dla danej klasy system wymaga od nauczyciela potwierdzenia, że taka zgoda istnieje; potwierdzenie zapisywane jest dla każdej klasy wraz ze znacznikiem czasu.",sub2:"10.2. Kto widzi zdjęcia",items2:["Wyłącznie konto nauczyciela, które je przesłało — reguły bezpieczeństwa blokują każde inne konto","Zdjęcia nigdy nie pojawiają się w aktywnościach, w których uczniowie dołączają kodem PIN","Zdjęcia nie są publikowane publicznie ani indeksowane przez wyszukiwarki","Personel operacyjny uzyskuje do nich dostęp tylko na zgłoszone wsparcie techniczne lub gdy wymaga tego prawo"],sub3:"10.3. Czego NIE robimy ze zdjęciami uczniów",items3:["Nigdy nie wykorzystujemy ich do reklamy ani marketingu","Nigdy nie wykorzystujemy ich do trenowania modeli sztucznej inteligencji","Nigdy nie sprzedajemy, nie wynajmujemy ani nie udostępniamy podmiotom trzecim","Brak rozpoznawania twarzy do identyfikacji uczniów poza klasą danego nauczyciela"],sub4:"10.4. Okres przechowywania i prawo do usunięcia",p4:"Zdjęcia przechowujemy do momentu ich usunięcia przez nauczyciela lub usunięcia konta. Na stronie zarządzania klasą nauczyciel może w dowolnej chwili usunąć pojedyncze zdjęcia lub wszystkie zdjęcia klasy — usunięcie jest trwałe. Zalecamy usuwanie zdjęć po zakończeniu roku szkolnego lub gdy nie są już potrzebne. Przy usunięciu konta na żądanie usuwane są również wszystkie zdjęcia i listy klas.",parentRights:"Rodzice, opiekunowie prawni lub sami uczniowie mogą zażądać wglądu, sprostowania lub usunięcia zdjęć i powiązanych danych. Prosimy najpierw skontaktować się z wychowawcą klasy — może usunąć je natychmiast w aplikacji. Jeśli to niemożliwe, napisz na <1>{{email}}</1>, odpowiemy w ciągu <1>7 dni roboczych</1>."}},terms={hero:{title:"Warunki Użytkowania",sub:"Prosimy o uważne przeczytanie przed rozpoczęciem korzystania z usług <1>{{name}}</1> ({{url}}).",lastUpdated:"Ostatnia aktualizacja: {{date}}"},intro:{p1:'Niniejsze Warunki Użytkowania ("Warunki") stanowią prawną umowę między Tobą ("Użytkownik") a <1>{{name}}</1> ("my"), regulującą dostęp i korzystanie z platformy dostępnej pod adresem <3>{{url}}</3>. Rejestrując się, logując lub korzystając z jakiejkolwiek funkcji usługi, potwierdzasz, że przeczytałeś, zrozumiałeś i <5>zgadzasz się</5> na przestrzeganie niniejszych Warunków.',summary:{title:"📌 Kogo dotyczą Warunki:",content:"Niniejsze Warunki mają zastosowanie do wszystkich użytkowników rejestrujących konto, w tym nauczycieli, edukatorów i każdego, kto korzysta z usługi. Uczniowie uczestniczący za pomocą kodu PIN (anonimowo) nie są związani niniejszymi Warunkami."}},section1:{title:"1. Wiek i Akceptacja Warunków",teacher:{title:"Dla Nauczycieli (Osoby tworzące konta i zarządzające klasą)",content:"Musisz mieć <1>ukończone 18 lat</1>, aby zarejestrować konto, korzystać z usług i dokonywać ulepszeń konta (jeśli dotyczy). Logując się przez Google Sign-In, potwierdzasz, że przeczytałeś, zrozumiałeś i <3>całkowicie zgadzasz się</3> z naszymi Warunkami Użytkowania oraz <5>Polityką Prywatności</5>."},student:{title:"Dla Uczniów (Uczestnicy)",content:"<b>Brak minimalnego limitu wieku</b> dla uczniów biorących udział w grach i quizach (takich jak Przeciąganie Liny, Quiz z Pochylaniem Głowy itp.) za pomocą <b>kodu pokoju (PIN)</b> lub <b>linku udostępniania</b>. Jednakże uczniowie korzystający z platformy muszą robić to pod <b>instruktażem, nadzorem i za zgodą</b> nauczyciela prowadzącego klasę lub rodzica/opiekuna prawnego."},note:"💡 Uwaga: Niniejsze Warunki mogą być aktualizowane. Kontynuowanie korzystania z usługi po wprowadzeniu zmian oznacza akceptację najnowszej wersji. Jeśli się nie zgadzasz, prosimy o zaprzestanie korzystania z usługi i kontakt w celu usunięcia konta."},section2:{title:"2. Prawo do Korzystania z Usług",intro:"Oferujemy dwa rodzaje kont z różnymi uprawnieniami:",plans:[{title:"Konto Próbne (Tri
569al)",items:["Dostęp do ograniczonych funkcji podstawowych","Tworzenie ograniczonej liczby treści miesięcznie","Wsparcie poprzez dokumentację pomocniczą","Możliwość przejścia na FullGame w dowolnym momencie"]},{badge:"⭐ FullGame",title:"Konto FullGame / Premium",items:["Dostęp do wszystkich funkcji bez limitów","Tworzenie i przechowywanie nieograniczonej liczby treści","Priorytetowe wsparcie techniczne","Wczesny dostęp do nowych funkcji"]}],sub1:"2.1. Własność intelektualna i ograniczenia użytkowania",p1:"Cały kod źródłowy, projekt interfejsu, algorytmy gier oraz treści platformy stanowią własność intelektualną <1>{{name}}</1>, chronioną prawem wietnamskim oraz międzynarodowymi konwencjami o prawie autorskim.",ipWarning:{title:"🚫 Prawa Autorskie i Własność Intelektualna",content:"Wszystkie projekty interfejsu (UI/UX), grafiki, efekty i kod źródłowy narzędzi na platformie (w tym <1>Przeciąganie Liny, Quiz z Pochylaniem, Krzyżówki</1>...) należą do <3>giaoviendoimoi.com</3>. Użytkownikom <5>nie wolno</5> używać narzędzi programowych do ekstrakcji, inżynierii wstecznej (reverse engineering), bezpośredniego kopiowania kodu źródłowego ani kradzieży zasobów graficznych platformy w celach komercyjnych.",exception:"Dopuszczalny wyjątek: Samodzielne inspirowanie się do zaprogramowania podobnych mechanizmów gier <1>nie jest uważane za naruszenie</1> niniejszych warunków."},sub2:"2.2. Treści, które tworzysz",p2:"Zachowujesz własność do <1>treści pytań, ćwiczeń i materiałów dydaktycznych</1>, które tworzysz na platformie. Przesyłając lub tworząc treści, udzielasz nam prawa do ich przechowywania i wyświetlania w celu świadczenia Ci usługi."},section3:{title:"3. Obowiązki Użytkownika",sub1:"3.1. Odpowiedzialność za treść",p1:"Nauczyciele i użytkownicy <1>ponoszą wyłączną odpowiedzialność</1> za dokładność, poprawność i legalność wszelkich treści pytań, ćwiczeń i materiałów dydaktycznych tworzonych lub udostępnianych na platformie.",items1:["Zapewnienie, że treści są odpowiednie dla programu edukacyjnego i wieku uczniów","Odpowiedzialność za prawa autorskie do używanych obrazów, dźwięków i tekstów","Zakaz korzystania z usługi w nielegalnych celach komercyjnych"],sub2:"3.2. Treści zabronione",prohibits:[{title:"Naruszenie prawa",desc:"Treści naruszające prawo wietnamskie lub umowy międzynarodowe."},{title:"Treści 18+",desc:"Treści pornograficzne, przemoc, treści nieodpowiednie dla wieku uczniów."},{title:"Mowa nienawiści",desc:"Dyskryminacja ze względu na pochodzenie, religię, płeć."},{title:"Spam i reklamy",desc:"Korzystanie z platformy do rozpowszechniania reklam i spamu."}],sub3:"3.3. Bezpieczeństwo konta",items3:["Jesteś odpowiedzialny za bezpieczeństwo swoich danych logowania i konta Google.","Zakaz udostępniania konta innym osobom lub zezwalania na korzystanie z jednego konta przez wiele osób.","Niezwłoczne powiadomienie nas w przypadku wykrycia nieautoryzowanego dostępu do konta."],sub4:"3.4. Prawa Autorskie do Przesyłanych Treści & Mechanizm Safe Harbor",p4:"Użytkownicy ponoszą <1>wyłączną odpowiedzialność</1> za prawa autorskie do wszystkich obrazów, dźwięków, filmów i plików danych przesyłanych do systemu. Platforma pełni rolę <3>pośrednika hostingowego</3> i nie weryfikuje treści przed publikacją.",safeHarbor:{title:"🛡️ Mechanizm Zgłaszania Naruszeń Praw Autorskich (Safe Harbor)",intro:"Zgodnie z wietnamskim Prawem własności intelektualnej (Artykuł 198b) dotyczącym odpowiedzialności pośredników hostingowych, platforma stosuje 5-etapowy proces przyjmowania i rozpatrywania skarg dotyczących praw autorskich:",steps:["Etap 1 — Przyjęcie zgłoszenia naruszenia: Podmiot uprawniony (lub jego upoważniony przedstawiciel) przesyła skargę na poniższy adres e-mail dotyczący praw autorskich, zawierającą: (a) identyfikację naruszającej treści wraz z konkretnym odnośnikiem na platformie, (b) dowód zgodnego z prawem posiadania praw, (c) dane kontaktowe zgłaszającego oraz (d) oświadczenie w dobrej wierze o prawdziwości skargi. Platforma potwierdza otrzymanie zgłoszenia w ciągu 24 godzin roboczych","Etap 2 — Tymczasowe ukrycie treści: Jeśli skarga zawiera wystarczające, ważne informacje wstępne, platforma proaktywnie ukryje (usunie z publicznego widoku) zgłoszoną treść w ciągu 48 godzin roboczych od potwierdzenia, aby zapobiec dalszym szkodom w trakcie weryfikacji","Etap 3 — Weryfikacja: Platforma analizuje dowody obu stron — powiadamia użytkownika, który przesłał treść, o skardze i umożliwia mu złożenie sprzeciwu (kontr-zgłoszenia) wraz z dowodami w ciągu 7 dni roboczych od otrzymania powiadomienia","Etap 4 — Decyzja: Na podstawie wyników weryfikacji platforma podejmuje jedną z dwóch decyzji: (a
569) jeśli skarga zostanie potwierdzona jako zasadna lub użytkownik nie udzieli ważnej odpowiedzi w terminie — treść zostaje trwale usunięta; (b) jeśli użytkownik udowodni zgodne z prawem posiadanie lub prawo do korzystania — treść zostaje przywrócona, a skarga odrzucona","Etap 5 — Trwałe usunięcie i działania wobec konta: W przypadku treści uznanych za naruszające prawa, platforma trwale usuwa je z systemu (w tym kopie zapasowe, w zakresie technicznie możliwym) i może podjąć działania wobec naruszającego konta (ostrzeżenie, zawieszenie lub zakończenie współpracy) w zależności od wagi i częstotliwości naruszeń określonych w niniejszych Warunkach"],contactLabel:"Kanał zgłaszania naruszeń praw autorskich:",contactNote:'Temat e-maila: "Zgłoszenie naruszenia praw autorskich" + nazwa naruszającej treści. Proszę dołączyć ważny dowód własności.',legalNote:"⚖️ Podstawa prawna: Mechanizm ten został ustanowiony zgodnie z wietnamskim Prawem własności intelektualnej (nowelizacja 2022) dotyczącym odpowiedzialności pośredników hostingowych. Poprzez terminowe rozpatrywanie ważnych skarg platforma jest zwolniona z odpowiedzialności za szkody związane z treściami przesyłanymi przez użytkowników."},sub5:"3.5. Zdjęcia i dane uczniów",p5:"Przesyłając zdjęcia portretowe lub wprowadzając imiona uczniów, potwierdzasz, że to Ty <1>decydujesz o zbieraniu i wykorzystaniu</1> tych danych oraz że <1>uzyskałeś/aś zgodę</1> rodzica lub opiekuna prawnego w przypadku uczniów poniżej 16 lat. Platforma pełni wyłącznie rolę przechowywania i wyświetlania danych na Twoje żądanie.",items5:["Odpowiadasz za uzyskanie i przechowywanie zgody rodzica/opiekuna, zgodnie z zasadami szkoły i obowiązującym prawem","Wykorzystuj zdjęcia wyłącznie do zajęć w danej klasie — nigdy publicznie, nigdy poza klasą, nigdy w celach komercyjnych","Usuń zdjęcia natychmiast po wycofaniu zgody, przy zmianie klasy/szkoły przez ucznia lub gdy nie są już potrzebne","Nie przesyłaj zdjęć osób spoza klasy, za którą odpowiadasz","Przekaż nam każde żądanie rodzica, którego nie możesz obsłużyć samodzielnie w aplikacji"],photoNote:"⚠️ Zdjęcia portretowe dzieci to wrażliwe dane osobowe. Naruszenie powyższych zobowiązań może skutkować zawieszeniem konta, a odpowiedzialność prawna spoczywa na Tobie. Sposób przechowywania i ochrony tych danych opisuje Sekcja 10 Polityki Prywatności."},section4:{title:"4. Ograniczenie Odpowiedzialności",p1:" <1>{{name}}</1> zobowiązuje się do dołożenia wszelkich starań, aby platforma działała stabilnie, bezpiecznie i nieprzerwanie. Jednakże <3>nie możemy zagwarantować</3>, że usługa będzie dostępna w 100% czasu i nie ponosimy odpowiedzialności prawnej w następujących przypadkach:",items:["Przerwy w świadczeniu usług z powodu awarii technicznych po stronie Google Firebase (hosting)","Przerwy spowodowane problemami z połączeniem internetowym po stronie użytkownika lub dostawcy internetu","Utrata lub uszkodzenie danych z powodu klęsk żywiołowych, ataków cybernetycznych lub siły wyższej","Szkody pośrednie powstałe w wyniku korzystania lub braku możliwości korzystania z usługi"],recommendation:"⚠️ Zalecenie: W przypadku ważnych treści dydaktycznych zalecamy regularne tworzenie kopii zapasowych poprzez eksport danych do plików lokalnych. Wykonujemy okresowe kopie zapasowe systemu, ale nie gwarantujemy pełnego przywrócenia danych w każdym przypadku.",sub1:"4.1. Usługi stron trzecich",p2:"Platforma integruje usługi stron trzecich (Google Firebase, Google AI, Buy Me a Coffee itp.). Nie ponosimy odpowiedzialności za przerwy, zmiany polityki lub błędy po stronie tych dostawców.",sub2:"4.2. Limit odszkodowania",p3:"W maksymalnym zakresie dozwolonym przez prawo, nasza odpowiedzialność odszkodowawcza z tytułu jakichkolwiek roszczeń nie przekroczy kwoty zapłaconej przez Ciebie za usługę w ciągu ostatnich <1>3 miesięcy</1>."},section5:{title:"5. Płatności i Zwroty",items:["Opłaty za usługę FullGame są naliczane cyklicznie (miesięcznie/rocznie) i odnawiane automatycznie, chyba że zrezygnujesz.","Ceny usług mogą ulec zmianie, o czym poinformujemy z co najmniej 30-dniowym wyprzedzeniem.","Zwroty: Wspieramy zwroty w ciągu 7 dni od daty płatności, jeśli usługa nie działa zgodnie z obietnicą.","Naruszenie Warunków prowadzące do zamknięcia konta nie uprawnia do z
569wrotu pieniędzy."]},section6:{title:"6. Zakończenie Korzystania z Konta",p1:"Zastrzegamy sobie prawo do <1>tymczasowego zawieszenia lub zamknięcia</1> Twojego konta bez uprzedzenia w przypadku:",items:["Naruszenia jednego lub więcej punktów niniejszej umowy","Działań oszukańczych, nadużywania usługi lub szkodzenia innym użytkownikom","Braku aktywności konta przez dłuższy czas (ponad 24 miesiące)","Żądania ze strony uprawnionych organów ścigania"],p2:"Możesz poprosić o usunięcie konta w dowolnym momencie, kontaktując się z nami e-mailem. Po usunięciu dane zostaną usunięte z systemu w ciągu <1>30 dni roboczych</1>."},section7:{title:"7. Zmiany w Warunkach",p1:"<1>{{name}}</1> zastrzega sobie prawo do aktualizacji i zmiany niniejszych Warunków Użytkowania w dowolnym momencie w celu odzwierciedlenia zmian w usługach, wymogach prawnych lub zasadach operacyjnych. Powiadomienia będą realizowane poprzez:",items:["Widoczne ogłoszenie na stronie na co najmniej 30 dni przed wejściem nowych warunków w życie","Powiadomienie e-mail wysłane na zarejestrowane konto (w przypadku ważnych zmian)",'Aktualizacja daty "Ostatnia aktualizacja" na górze tej strony'],note:"Po okresie powiadomienia, dalsze korzystanie z usługi uznaje się za <1>akceptację najnowszej wersji Warunków</1>. Jeśli się nie zgadzasz, masz prawo zażądać usunięcia konta przed wejściem w życie nowych warunków."},section8:{title:"8. Prawo Właściwe i Rozstrzyganie Sporów",p1:"Niniejsze Warunki podlegają <1>prawu Socjalistycznej Republiki Wietnamu</1>. Wszelkie spory wynikające z niniejszych Warunków lub z nimi związane będą rozstrzyganie zgodnie z poniższą procedurą:",items:["Priorytet: Bezpośrednie negocjacje między stronami w ciągu 30 dni","W przypadku braku porozumienia: Mediacja lub arbitraż zgodnie z przepisami prawa","Ostateczne rozwiązanie: Pozew w sądzie powszechnym właściwym dla Wietnamu"]},relatedLinks:{label:"📋 Powiązane dokumenty — Zobacz także naszą Politykę Prywatności:",privacy:"🔒 Polityka Prywatności →"},contact:{title:"Kontakt i Wsparcie",sub:"Jeśli masz pytania dotyczące Warunków Użytkowania, chcesz zgłosić naruszenie lub potrzebujesz pomocy przy usuwaniu konta, prosimy o kontakt:",note:"Odpowiemy w ciągu <1>2–3 dni roboczych</1>."},footer:{copyright:"© {{year}} {{name}}. Wszelkie prawa zastrzeżone.",privacy:"Polityka prywatności",login:"Zaloguj się"}},plLegal={shipping,privacy,terms},hero={title:"Dane Podmiotu",sub:"Właściciel i operator usług strony internetowej <1>{{url}}</1>",lastUpdated:"Ostatnia aktualizacja: {{date}}"},ownerInfo={title:"Dane Kontaktowe Właściciela",labelName:"Pełne nazwisko",labelDob:"Rok urodzenia",labelNationality:"Narodowość",nationalityValue:"Wietnam",labelAddress:"Adres",labelEmail:"Email Kontaktowy",labelPhone:"Telefon / Zalo",labelTax:"Numer Identyfikacji Podatkowej (NIP)",labelType:"Forma Biznesowa",typeValue:"Osoba fizyczna prowadząca działalność (brak rejestracji firmy celowej)"},websiteInfo={title:"Informacje Ogólne o Stronie",labelName:"Nazwa Usługi",labelDomain:"Domena Publikacji",labelField:"Zasięg działalności",fieldValue:"Narzędzia Edukacji Interaktywnej & Software jako Usługa. (EdTech)",labelAudience:"Grupa docelowa",audienceValue:"Nauczyciele, Edukatorzy i Wychowawcy (Globalni)",labelLang:"Główny Język Frontu",langValue:"Wietnamski, z obsługą dla wszystkich i Polski",labelServer:"Centrum Danych Hostingu",serverValue:"Google Firebase & Google Cloud Server (USA/Singapore location)"},mission={title:"Wizja Aplikacji i Nasza Misja",p1:"<1>{{name}}</1> to platforma stworzona od Nauczyciela, Dla Nauczycieli by wspomóc żmudne i niekończące się procesy zarządzania procesem dydaktycznym i gamifikacji lekcji.",p2:"Wspierana technologią zabiera klasę w świat rozrywki pobudzając entuzjazm, nie zapomiając o walorach i misji edukacyjnej.",cards:[{title:"Sztuczna Inteligencja",desc:"Wypchana do pełna modelami językowymi w celu uproszczenia układania zadań."}
569,{title:"Gamifikacja",desc:"Gry rywalizacyjne oparte na zwinnych frameworkach."},{title:"Stały Wgląd",desc:"Tworzenie ścieżek z weryfikacją realnego zaangażowania każdego z uczniów na lekcji."},{title:"Bezbarierowe",desc:"Brak konieczności instalowania oprogramowania czy logowania ze strony wychowanków."}]},channels={title:"Oficjalne Zasoby",intro:"Obserwuj poczynania twórcy <1>{{name}}</1> w sieci pod adresami:"},relatedLinks={label:"📋 Zobacz Inne Notki Informacyjne Poniżej:",privacy:"🔒 Polityka Prywatności Platformy Firebase",terms:"📜 Warunki Regulaminu Platformy",shipping:"🚚 Jak Dostarczamy Ci Usługę i Płatności"},contact={title:"Kanał Wsparcia Live Direct",sub:"We wszystkich dyskusjach technicznych bądż sugestiach kontaktuj się z nami poprzez media podane poniżej.",note:"Spodziewany czas na email odpowiedź z systemu to około <1>2–3 dni robocze</1>. Możesz odzywać się za pomoca aplikacji Zalo lub messengera na numer telefonu <1>{{phone}}</1>"},footer={copyright:"© {{year}} {{name}}. Wszystkie Prawa Zastrzeżone.",privacy:"Prywatność",terms:"Regulamin"},plAbout={hero,ownerInfo,websiteInfo,mission,channels,relatedLinks,contact,footer},logoText="Giáo Viên Đổi Mới",logoSubtitle="Wideo, gry edukacyjne i wiele więcej",loginTitle="Zaloguj się",loginDescription='Zaloguj się, aby rozpocząć. Jeśli korzystasz z aplikacji Zalo lub Messenger, kliknij ikonę trzech kropek w prawym górnym rogu i wybierz opcję "Otwórz w przeglądarce"',loggingInBtn="Logowanie...",loginGoogleBtn="Zaloguj się przez Google",loginNote="Logując się, akceptujesz nasze Warunki Użytkowania oraz Politykę Prywatności.",loginFooterText="Dla nauczycieli i uczniów",highlightTools="Zbiór interaktywnych narzędzi dydaktycznych",highlightAI="Asystent AI do planowania lekcji, integracji, pisania raportów, ...",highlightSimulation="Wizualne symulacje (3D, 2D, ruch, ...) do lekcji",highlightClassroom="Zarządzanie klasą wychowawczą",highlightFree="Gotowe do użycia, bez instalacji",loginFailed="Logowanie nieudane: {{error}}",pleaseTryAgain="Proszę spróbować ponownie.",loginNotePrefix="Logując się, akceptujesz nasze",loginNoteTerms="Warunki Użytkowania",loginNoteAnd="oraz",loginNotePrivacy="Politykę Prywatności",loginNoteSuffix=".",disclaimerCopyright="Przesyłając jakikolwiek obraz, dźwięk lub plik danych, potwierdzasz, że jesteś jego prawowitym właścicielem lub posiadasz zgodę właściciela praw autorskich. System ma pełne prawo do natychmiastowego usunięcia, bez wcześniejszego powiadomienia, treści zgłoszonych, podejrzanych o naruszenie prawa lub praw autorskich. Platforma zrzeka się wszelkiej odpowiedzialności za naruszenia spowodowane przez użytkowników.",disclaimerConsent="Logując się, wyrażasz zgodę na powyższe warunki.",consentCheckboxLabel="Przeczytałem(-am) i akceptuję Warunki Użytkowania, Politykę Prywatności, zobowiązania dotyczące praw autorskich oraz powyższą odpowiedzialność za zdjęcia i dane uczniów.",consentRequired="Zaznacz zgodę na warunki przed zalogowaniem.",disclaimerStudentPhoto="Jeśli przesyłasz zdjęcia lub imiona uczniów, potwierdzasz, że posiadasz zgodę rodzica lub opiekuna prawnego (wymaganą dla uczniów poniżej 16 lat), że wykorzystasz je wyłącznie do zajęć we własnej klasie i usuniesz, gdy nie będą już potrzebne.",popupHint="Jeśli nie widzisz okna logowania, sprawdź pasek zadań na dole ekranu",errInvalidCredential="Twoja sesja Google w tej przeglądarce wygasła. Wyczyść pliki cookie i zaloguj się ponownie.",errPopupBlocked="Przeglądarka zablokowała okno logowania Google. Kliknij ikonę zablokowanego wyskakującego okienka po prawej stronie paska adresu, wybierz Zawsze zezwalaj i spróbuj ponownie.",errPopupClosed="Okno logowania Google zostało zamknięte przed wybraniem konta. Kliknij ponownie Zaloguj się przez Google.",errCookiesBlocked="Przeglądarka blokuje pliki cookie, więc logowanie Google nie może się zakończyć. Wyczyść pliki cookie i spróbuj ponownie.",errNetwork="Połączenie zostało przerwane podczas logowania. Sprawdź Wi-Fi lub dane mobilne i spróbuj ponownie.",errTooManyRequests="Zbyt wiele prób logowania. Odczekaj kilka minut i spróbuj ponownie.",errUserDisabled="To konto zostało zablokowane. Skontaktuj się z administratorem.",errWebView="Strona została otwarta w aplikacji Zalo/Facebook, gdzie logowanie Google jest niedostępne. Dotknij trzech kropek w prawym górnym rogu, wybierz Otwórz w przeglądarce i zaloguj się ponownie.",errUnknown="Logowanie nie powiodło się. Najczęstszą przyczyną są stare pliki cookie przeglądarki. Spróbuj je wyczyścić i zalogować się ponownie.",errCodeHint="Kod błędu: {{code}}
569",cookieHelpBtn="📋 Jak wyczyścić pliki cookie",cookieHelpTitle="JAK WYCZYŚCIĆ PLIKI COOKIE",cookieHelpStep1="Otwórz stronę, na której występuje błąd.",cookieHelpStep2="Naciśnij <b>Ctrl + Shift + Del</b> (klawisz Delete).",cookieHelpStep3="Otworzy się panel <b>Usuń dane przeglądania</b> (jak na obrazku poniżej). Odznacz wszystko i <b>zostaw zaznaczony tylko drugi wiersz</b>.",cookieHelpStep4="W prawym górnym rogu panelu wybierz <b>Więcej</b> (lub <b>More</b>), a następnie <b>Od początku</b> (lub <b>All time</b>). Potem kliknij <b>Usuń dane</b> w prawym dolnym rogu.",cookieHelpStep5="Na koniec <b>zamknij całkowicie Chrome/Cốc Cốc</b> i otwórz ponownie.",cookieHelpImgAlt="Zrzut ekranu panelu Usuń dane przeglądania w Chrome",cookieHelpClose="Rozumiem",plLogin={logoText,logoSubtitle,loginTitle,loginDescription,loggingInBtn,loginGoogleBtn,loginNote,loginFooterText,highlightTools,highlightAI,highlightSimulation,highlightClassroom,highlightFree,loginFailed,pleaseTryAgain,loginNotePrefix,loginNoteTerms,loginNoteAnd,loginNotePrivacy,loginNoteSuffix,disclaimerCopyright,disclaimerConsent,consentCheckboxLabel,consentRequired,disclaimerStudentPhoto,popupHint,errInvalidCredential,errPopupBlocked,errPopupClosed,errCookiesBlocked,errNetwork,errTooManyRequests,errUserDisabled,errWebView,errUnknown,errCodeHint,cookieHelpBtn,cookieHelpTitle,cookieHelpStep1,cookieHelpStep2,cookieHelpStep3,cookieHelpStep4,cookieHelpStep5,cookieHelpImgAlt,cookieHelpClose},page$2={sidebarTitle:"🪢 Przeciąganie Liny Wiedzy",newGame:"Utwórz nową grę",myGames:"Moje gry",viewGuideTooltip:"Zobacz instrukcję",guideLabel:"Instrukcja obsługi",guideLabelShort:"Instrukcja",guideTitle:"Instrukcja Przeciągania Liny",guideDesc:"Dowiedz się, jak stworzyć grę w Przeciąganie Liny dla uczniów"},share$1={loadingGame:"Wczytywanie gry...",loadError:"Nie udało się wczytać gry. Link mógł wygasnąć lub został usunięty.",notFound:"Nie znaleziono gry",backHome:"Wróć do strony głównej"},myGames$2={loadListError:"❌ Błąd podczas ładowania listy gier",deleteConfirm:"Czy na pewno chcesz usunąć tę grę?",deleteSuccess:"✅ Gra została usunięta",deleteError:"❌ Błąd podczas usuwania gry",loadingList:"⏳ Wczytywanie listy gier...",myGamesCount:"🪢 Moje gry ({{count}})",noGames:"📭 Brak gier w bibliotece",createFirstGame:"➕ Utwórz swoją pierwszą grę",questionCount:"Liczba pytań: {{count}}",playTest:"Graj",assign:"Zadaj jako zadanie",edit:"Edytuj",delete:"Usuń",lockedTip:"Odblokuj subskrypcję, aby otworzyć",extendSubscription:"Przedłuż dostęp",expiredLabel:"Subskrypcja wygasła!",demo:{title:"Przeciąganie Liny - Demo",badge:"Demo",hint:"Wypróbuj demo, aby poznać grę przed stworzeniem własnej"}},teamPlay={loading:"Wczytywanie...",teamBlue:"Drużyna Niebieska",teamRed:"Drużyna Czerwona",freeze:"ZAMROŻENIE!",punishment:"Kara za błędną odpowiedź"},form$5={addQuestionSuccess:"✅ Dodano {{count}} pytań (Razem: {{total}})",updateQuestionSuccess:"✅ Zaktualizowano pytanie",removeQuestionMsg:"🗑️ Usunięto pytanie {{index}}",clearAllConfirm:"Usunąć wszystkie pytania?",clearAllSuccess:"🗑️ Usunięto wszystkie pytania",titleRequired:"❌ Proszę podać tytuł gry",minQuestionsRequired:"❌ Proszę dodać co najmniej 5 pytań (obecnie: {{count}})",updateGameSuccess:"✅ Gra została zaktualizowana!",createGameSuccess:"✅ Utworzono nową grę w Przeciąganie Liny!",limitReached:"⚠️ Wykorz
569ystałeś limit darmowych gier. Ulepsz konto, aby kontynuować.",saveError:"❌ Błąd zapisu gry: {{error}}",testRequireQuestions:"⚠️ Proszę dodać pytania przed testowaniem",untitledGame:"Bez tytułu",editGameTitle:"Edytuj grę",createGameTitle:"Utwórz nową grę",trialCount:"📌 Wykorzystano {{current}}/{{limit}} gier w planie próbny",premiumStatus:"✅ Korzystasz z planu Premium - bez limitów",proStatus:"✅ Korzystasz z planu FullGame - bez limitów",formTitleLabel:"Tytuł gry:",formTitlePlaceholder:"Wpisz tytuł...",configSectionTitle:"⚙️ Konfiguracja gry",team1NameLabel:"Nazwa Drużyny 1:",team2NameLabel:"Nazwa Drużyny 2:",timeLimitLabel:"Czas trwania (sekundy):",time30s:"30 sekund",time60s:"60 sekund (Standard)",time90s:"90 sekund",time120s:"120 sekund",time180s:"3 minuty",time300s:"5 minut",time600s:"10 minut",time900s:"15 minut",time1200s:"20 minut",winDiffLabel:"Przewaga punktowa do zwycięstwa:",wrongFreezeTimeLabel:"Czas zamrożenia za błąd (sekundy):",gameModeLabel:"Tryb gry",modeDefault:"Domyślny",modeDefaultDesc:"Każda drużyna ma własne pytania, odpowiadają niezależnie. Wygrywa ten, kto zyska odpowiednią przewagę.",modeSame:"Wspólne pytania",modeSameDesc:"Obie drużyny odpowiadają na to samo pytanie. Kto pierwszy, ten przesuwa linę. Błędna odpowiedź zamraża drużynę.",modeTarget:"Wyścig do celu",modeTargetDesc:"Pytania zapętlone. Drużyna, która jako pierwsza zdobędzie określoną liczbę punktów, wygrywa natychmiast.",targetScoreLabel:"Liczba punktów do zwycięstwa:",noShuffleA:"Nie mieszaj odpowiedzi",noShuffleADesc:"Odpowiedzi będą wyświetlane w ustalonej kolejności (bez losowania)",questionOrderLabel:"Kolejność pytań",shuffleQDefault:"Losowa (domyślnie)",shuffleQDefaultDesc:"Pytania będą mieszane przy każdym uruchomieniu",noShuffleQ:"Stała kolejność",noShuffleQDesc:"Pytania pojawią się dokładnie w takiej kolejności, w jakiej zostały wpisane",endOnLast:"Koniec po ostatnim pytaniu",endOnLastDesc:"Gra kończy się natychmiast po wyczerpaniu pytań jednej z drużyn — wygrywa ten, kto ma więcej punktów",controlModeLabel:"Sposób sterowania",controlTouch:"Ekran dotykowy / interaktywny",controlKeyboard:"Klawiatura (Niebiescy: Q W A S - Czerwoni: O P K L)",questionsSectionTitle:"❓ Lista pytań ({{count}})",clearAllBtn:"🗑️ Usuń wszystko",pickFromBankBtn:"🗃️ Z bazy pytań lub AI",manualInputBtn:"✏️ Wpisz ręcznie",questionsNote:"* Wymagane co najmniej 5 pytań. Pytania będą się powtarzać w razie potrzeby.",questionListHeader:"Podgląd pytań",answersCountLbl:"Liczba odpowiedzi: {{count}}",editQuestionTooltip:"Edytuj to pytanie",deleteQuestionTooltip:"Usuń to pytanie",noQuestionsLbl:"📝 Brak dodanych pytań",noQuestionsDesc:"Wybierz pytania z bazy, AI lub dodaj je ręcznie powyżej",playTestBtn:"▶️ Graj (Test)",savingBtn:"💾 Zapisywanie...",saveBtn:"💾 Zapisz grę",selectQuestionsTitle:"Wybierz pytania (dowolna liczba)",pickFromLessonBtn:"Z gotowych lekcji",lessonPickerTitle:"Wybierz lekcję, z której chcesz pobrać pytania",aiAudioHint:"👉 Dźwięk w pytaniach działa tylko w trybie 'Wspólne pytania'",noAiAudioHint:"👉 Audio nie jest obsługiwane w tym trybie",bgmLabel:"🎵 Domyślna muzyka w tle",bgmDefault:"Domyślna (Utwór 4)",bgmTrack:"Utwór {{n}}",bgmUploadHint:"Uczniowie mogą zmienić muzykę podczas gry.",bgmPrivateLabel:"Lub wgraj własną (FullGame):",competitionLabel:"🎮 Konkurencja",tugOfWarOption:"🪢 Przeciąganie liny",dragonBoatOption:"🚣 Wyścig smoczych lodzi",defaultHint:"Domyślnie",newHint:"Nowość",missingLibraryFields:"Proszę wybrać Cấp học, Môn học i Khối lớp, aby udostępnić w bibliotece.",aiAudioWarning:"Wybierz tryb 'Wspólne pytania', aby odtwarzać dźwięk w pytaniach",lessonPickerNoMatch:"Brak pasujących pytań (pominięto {{count}}).",lessonPickerAdded:'Dodano {{added}} pytań z "{{title}}". Pominięto {{skipped}} niekompatybilnych.',lessonPickerAddedOnly:'Dodano {{added}} pytań z "{{title}}".'},player$3={unmute:"🔇 Włącz dźwięk",mute:"🔊 Wycisz",fullscreen:"⛶ Pełny ekran",exit:"Wyjdź",gameOver:"Koniec Gry!",draw:"Remis!",winnerLbl:"Zwycięzca:",finalScoreLbl:"Wynik: {{score1}} - {{score2}}",playAgainBtn:"🔄 Graj ponownie",viewReportBtn:"📋 Raport wyników",exitBtn:"❌ Wyjdź",reportTitle:"📋 Raport z rozgrywki",reportDraw:"Mecz zakończony remisem",reportWinnerBlue:"🏆 Drużyna Niebieska zwycięża",reportWinnerRed:"🏆 Drużyna Czerwona zwycięża",reportWinnerSuffix:"wygrywa",reportScoreSuffix:"pkt",closeBtn:"✕ Zamknij",reportTeamBlue:"🔵 Niebiescy ({{score}} pkt)",reportTeamRed:"🔴 Czerwoni ({{score}} pkt)",reportEmpty:"Brak zarejestrowanych odpowiedzi.",reportQuestionNum:"Pytanie {{index}}",reportChosen:"Wybrano:",reportImage:"(zdjęcie)",reportCorrectHint:"Poprawna odpowied
569ź:",audioStop:"⏹️ Zatrzymaj",audioReplay:"🔊 Słuchaj",assignmentIntro:"Wpisz nazwy członków obu drużyn przed rozpoczęciem",exampleNames:"Np: Ania, Tomek, Kasia...",startTugCta:"🚩 Rozpocznij przeciąganie!",introStartBtn:"Rozpocznij",introRuleTime:"Czas gry: {{seconds}} sekund",introRuleDiff:"Drużyna prowadząca o {{diff}} punktów wygrywa natychmiast",introRuleTarget:"Pierwsza drużyna z {{score}} punktami wygrywa",introRuleShared:"Obie drużyny odpowiadają na to samo pytanie — pierwsza poprawna odpowiedź zdobywa punkt",introRuleIndep:"Każda drużyna ma {{count}} pytań, odpowiada niezależnie",introRuleFreeze:"Błędna odpowiedź zamraża drużynę na {{seconds}} sekund",introRuleKeyboard:"Klawiatura: Niebiescy Q W A S — Czerwoni O P K L",introRuleTouch:"Dotknij lub kliknij odpowiedź"},plTugOfWar={page:page$2,share:share$1,myGames:myGames$2,teamPlay,form:form$5,player:player$3},title$2="Zadaj zadanie",success={title:"Zadanie utworzone pomyślnie!",description:"Możesz wysłać kod lub bezpośredni link do uczniów.",joinCodeLabel:"KOD DOŁĄCZENIA",copySuccess:"Skopiowano!",copyCode:"Kopiuj kod",shareLink:"Lub wyślij bezpośredni link:",copyLink:"Kopiuj",copied:"Skopiowano",noCodeNeeded:"Uczniowie korzystający z linku <strong>nie będą musieli wpisywać kodu</strong>.",qrScan:"Zeskanuj QR, aby dołączyć",qrDownload:"⬇ Pobierz obraz QR"},form$4={gameInfo:{noName:"Gra bez nazwy"},remembranceName:{label:"Nazwa przypominająca",placeholder:"np. Klasa 9A - Zadanie domowe",helperText:"Ta nazwa pomaga Ci zidentyfikować zadanie (uczniowie jej nie widzą)"},expiration:{label:"Termin ważności kodu:",options:{day_one:"1 dzień",day_three:"3 dni",day_seven:"7 dni",day_fifteen:"15 dni",day_year_one:"⏰ 1 rok (Plan FullGame)",day_year_two:"⏰ 2 lata (Plan FullGame)",day_year_three:"⏰ 3 lata (Plan FullGame)",day_year_five:"⏰ 5 lat (Plan FullGame)"}},createBtn:"Utwórz zadanie",allowRetry:"Pozwól uczniom na wielokrotne próby",creating:"Tworzenie..."},alerts$2={turnBasedNote:'<strong>Uwaga:</strong> Ta gra jest przeznaczona dla uczniów grających wspólnie na <strong>jednym urządzeniu</strong> (komputerze/tablecie grupy), a nie dla każdego ucznia na osobnym urządzeniu. Jeśli chcesz, aby każdy grał na własnym urządzeniu, wybierz funkcję <strong>"Gra pojedynkowa"</strong> na stronie głównej.',versusNote:"<strong>Gra Pojedynkowa 1v1:</strong> Każdy uczeń gra na <strong>własnym urządzeniu</strong>. Uczniowie wchodzą do poczekalni, wybierają przeciwnika i rozpoczynają mecz. Maksymalnie <strong>20 meczów</strong> na jedno zadanie.",versusLimit:"Masz otwarte 3 pokoje w innych zadaniach, zamknij je przed utworzeniem kolejnego.",headTiltWarning:"📵 <strong>Ważna uwaga:</strong> Kamera gry <strong>nie może zostać uruchomiona</strong>, gdy link jest otwierany przez <strong>Zalo / Messenger</strong>. Poinstruuj uczniów, aby otworzyli grę za pomocą <strong>przeglądarki telefonu</strong> (Chrome, Safari)."},errors$1={titleRequired:"Proszę podać nazwę przypominającą dla zadania",unsupportedGame:"Typ gry nie jest obsługiwany",createFailed:"Nie udało się utworzyć zadania. Spróbuj ponownie.",endFailed:"Nie udało się zakończyć zadania. Spróbuj ponownie.",extendedLinkRequired:"Potrzebujesz Planu Długoterminowego, aby zadawać zadania na 1-2 lata.",extendedLinkLimitReached:"Przekroczono limit 50 aktywnych linków 1/2 letnich. Zakończ stare zadania.",invalidCode:"Nieprawidłowy kod. Wprowadź 4-5 cyfr.",codeNotFound:"Kod nie istnieje lub wygasł",codeExpired:"Kod wygasł",assignmentNotFound:"Zadanie nie istnieje",journeyNotFound:"Kod podróży nie istnieje",connectionError:"Nie można się połączyć. Sprawdź sieć i spróbuj ponownie.",generalError:"Wystąpił błąd. Spróbuj ponownie.",nameRequired:"Proszę podać swoje imię! 😊",nameTooShort:"Imię musi mieć co najmniej 2 znaki!",codeTooShort:"Proszę wprowadzić pełny kod (4 lub 5 znaków)"},common={close:"Zamknij",cancel:"Anuluj",back:"Wstecz"},duplicate={checking:"Sprawdzanie...",title:"Ta gra została już zadana",description:"Ta lekcja została już zadana wcześniej pod n
569azwą:",more:"więcej",viewHistory:"Zobacz historię zadań",assignNew:"Zadaj ponownie"},player$2={loading:"Wczytywanie gry...",unsupported:"Typ gry nieobsługiwany: {{type}}",notIntegrated:'Gra "{{label}}" nie jest zintegrowana z Menedżem Zadań.',tryAnother:"Spróbuj z innym typem gry.",scoreUpdated:"Wynik został zaktualizowany!",resultSaved:"Praca została zapisana!",saveFailed:"Nie udało się zapisać wyniku. Spróbuj ponownie.",invalidId:"Nieprawidłowy identyfikator zadania",notFound:"Nie znaleziono zadania",unsupportedType:'Typ gry "{{type}}" nie jest obsługiwany',loadError:"Wystąpił błąd podczas wczytywania zadania",loadingTitle:"Wczytywanie zadania...",alreadyPlayedTitle:"To zadanie zostało już wykonane!",onceOnly:"Każdy uczeń może wykonać zadanie tylko raz.",previousResult:"Poprzedni wynik:",playedAtLabel:"Czas:",nameLabel:"Imię i nazwisko:",contactTeacher:"Jeśli chcesz spróbować ponownie, skontaktuj się z nauczycielem.",goBack:"Wstecz",defaultTitle:"Zadanie",studentPrefix:"Uczeń:"},result={excellent:"Doskonale!",good:"Dobrze!",fair:"Całkiem nieźle!",passed:"Zaliczone",tryHarder:"Musisz się bardziej postarać",draw:"Remis!",winner:"🏆 {{name}} wygrywa!",percentageComplete:"Ukończono w {{percentage}}%",timeTaken:"Czas pracy: <strong>{{duration}}</strong>",saving:"Zapisywanie wyniku...",goHome:"Strona główna",duration:{seconds:"{{count}} sek.",minutes:"{{count}} min.",mins_secs:"{{mins}} min {{secs}} sek.",s_short:"sek",m_short:"min"}},details={joinCode:"Kod:",status:"Status:",expired:"Wygasło",submissionCount:"<strong>{{count}}</strong> uczniów oddało zadanie",noSubmissions:"Żaden uczeń jeszcze nie oddał zadania",sharePrompt:"Udostępnij kod <strong>{{code}}</strong> uczniom, aby rozpoczęli",table:{stt:"Lp.",members:"Członkowie",players:"Gracze",name:"Imię i nazwisko",result:"Wynik",score:"Punkty",duration:"Czas",submittedAt:"Oddano"},viewDetail:"Szczegóły",viewDetailPro:"Szczegóły (FullGame)",downloadExcel:"Pobierz Excel",downloadExcelFreeNote:"Wersja darmowa zawiera tylko arkusz Podsumowanie. Kup FullGame, aby uzyskać dodatkowo arkusz Szczegóły dla każdego pytania.",hideDetail
569:"Ukryj szczegóły",proFeature:"Funkcja dostępna dla kont FullGame",itemDetailTitle:"SZCZEGÓŁY ODPOWIEDZI",questionNum:"Pytanie {{index}}:",noTitle:"(Brak tytułu)",noContent:"(Brak treści)",imageAnswer:"Obraz",notDone:"Niewykonane",correct:"✓ Poprawnie",wrong:"✗ Błąd · Poprawna odpowiedź: <strong>{{answer}}</strong>",wrongChosen:"✗ Błąd ({{chosen}}) · Poprawna odpowiedź: <strong>{{correct}}</strong>",correctChosen:"✓ Poprawnie ({{chosen}})",correctPaced:"✓ Poprawnie · Wybrano <strong>{{chosenKey}}</strong>: {{chosenText}}",wrongPaced:"✗ Wybrano <strong>{{chosenKey}}</strong>: {{chosenText}} · Poprawna odpowiedź: <strong>{{correctKey}}</strong>: {{correctText}}",reports:{fullImage:"🖼️ Zobacz pełny raport",fullQuiz:"🎯 Zobacz pełny raport",proSuffix:" (FullGame)"},wrongAttempts:"❌ Błędów: {{n}}",pointUnit:"pkt",attemptNum:"Próba {{n}}:",decodeImage:"Dekodowanie obrazu:",correctExcl:"Dobrze!",wrongExcl:"Źle",matchHistory:"Historia meczów",totalQuestions:"Suma pytań",scoreLabel:"Wynik",handSlashNote:"Quiz Fruit Ninja nie zapisuje szczegółów każdego pytania"},join={title:"Dołącz do zabawy! 🚀",journeyTitle:"🗺️ Rozpocznij podróż!",nameTitle:"Jak masz na imię? 👀",codeCaption:"Wpisz kod od nauczyciela (4-5 znaków)",journeyCaption:"Wpisz kod X + 4 cyfry od nauczyciela",nameCaption:"Aby nauczyciel wiedział, kim jesteś",inputLabel:"Kod dołączenia",inputPlaceholder:"Wpisz 4-5 cyfr",typingCode:"⌨️ Wpisywanie kodu...",clickHere:"👆 Kliknij tutaj i wpisz kod!",finding:"Szukanie...",continue:"✅ Kontynuuj!",enterJourney:"🗺️ Wjedź do podróży!",enterPanorama:"🎨 Wejdź na wystawę!",enterScanner:"📱 Otwórz skaner",enterGame:"🎮 Graj!",back:"Wstecz",nameLabel:"Twoje imię",namePlaceholder:"np. Jan Kowalski 😄",currentTask:"Twoje zadanie 🎯",footer:"🔑 Kod otrzymasz od nauczyciela · X = Podróż",platformName:"🌟 Platforma Innowacyjnego Nauczyciela"},history={title:"Historia zadań",stats:"{{count}} utworzonych zadań",deleteExpiredBtn:"🗑️ Usuń wygasłe ({{count}}) – zalecane",deleteExpiredTip:"Pomaga utrzymać wydajność strony",endConfirm:`Czy na pewno chcesz zakończyć zadanie "{{title}}"?
570
571Uczniowie nie będą mogli już dołączyć za pomocą kodu.`,deleteArchiveConfirm:`Czy na pewno chcesz usunąć "{{title}}"?
572
573Wyniki tej sesji zostaną trwale usunięte i nie będzie można ich odzyskać.`,empty:{title:"Brak zadań",description:'Przejdź do "Moje aktywności" i kliknij "Zadaj" przy wybranej grze',button:"Idź do Moich aktywności"},loadError:"Nie udało się wczytać listy zadań. Spróbuj ponownie.",deleteError:"Nie udało się usunąć wygasłych zadań. Spróbuj ponownie.",table:{stt:"Lp.",reminderName:"Nazwa przypominająca",lesson:"Lekcja",codeLink:"Kod / Link",status:"Status",statusEnded:"Zakończone",statusExpired:"Wygasło",submitted:"Oddano",studentCount:"Uczniów",actions:"Operacje",copyCode:"Kopiuj kod",copyLink:"Kopiuj link",viewDetail:"Szczegóły",endAssignment:"Zakończ zadanie",deleteArchive:"Usuń zarchiwizowaną sesję"},deleteModal:{title:"🗑️ Usuń wygasłe zadania",successTitle:"✅ Usunięto pomyślnie",successMsg:"Usunięto {{count}} wygasłych zadań wraz z wynikami.",confirmMsg:"Zamierzasz usunąć {{count}} wygasłych lub zakończonych zadań wraz z pracami uczniów.",warning:"Tej operacji nie można cofnąć. Dane wyników zostaną trwale usunięte.",deleting:"Usuwanie...",confirmBtn:"Potwierdź usunięcie"}},gameTypes={tug_of_war:{label:"Przeciąganie Liny",instruction:"🪢 Wpisz imiona graczy i rozpocznij przeciąganie! Odpowiadaj poprawnie, aby przyciągnąć linę."},flip_puzzle:{label:"Gra w Układankę",instruction:"🧩 Odkrywaj kafelki, odpowiadając na pytania!"},quiz_game:{label:"Przeciąganie i Upuszczanie",instruction:"🎯 Przeciągnij odpowiedź do właściwego miejsca. Kliknij 'Zakończ', gdy skończysz!"},hand_slash_quiz:{label:"Quiz Fruit Ninja",instruction:"✋ Użyj dłoni (lub myszy), aby przeciąć poprawną odpowiedź. Unikaj bomb!"},wheel_quiz:{label:"Koło Quizu",instruction:"🎡 Zakręć kołem i odpowiedz na pytania, aby zdobyć punkty."},interactive_video:{label:"Interaktywne Wideo",instruction:"🎬 Oglądaj wideo i odpowiadaj na pojawiające się pytania."},crossword_puzzle:{label:"Krzyżówka / Hasło Sekretne",instruction:"Kliknij 
573numer rzędu, aby otworzyć pytanie i odgadnąć czerwone hasło!"},interactive_image:{label:"Interaktywny Obraz",instruction:"Kliknij w punkty 📍 na obrazie, aby zobaczyć informacje lub odpowiedzieć na pytania!"},head_tilt_quiz:{label:"Quiz Przechylania Głowy",instruction:"🤔 Przechyl głowę w lewo lub w prawo, aby wybrać odpowiedź A lub B!"},paced_quiz:{label:"Szybki Quiz",instruction:"⏱️ Czytaj pytania i wybieraj odpowiedzi. Rozwiąż wszystkie, aby zobaczyć wynik!"},pose_quiz:{label:"Ćwiczenia ABC",instruction:"🧘 Wybierz poprawną odpowiedź naśladując pozycję postaci. Ukończ wszystkie, aby zobaczyć wynik!"},turn_based_game:{label:"Gra Turowa",instruction:"🎲 Wpisz imiona graczy, rzuć kością i ścigaj się do celu! Odpowiadaj poprawnie, aby pokonać przeszkody."},versus_game:{label:"Gra Pojedynkowa",instruction:"⚔️ Odpowiadaj poprawnie, aby przepchnąć kij w stronę przeciwnika. Wygrywa ten, kto pierwszy osiągnie cel!"}},plAssignment={title:title$2,success,form:form$4,alerts:alerts$2,errors:errors$1,common,duplicate,player:player$2,result,details,join,history,gameTypes},sidebar={title:"Quiz Przechylania Głowy",upgradePro:"Ulepsz Konto",create:"Stwórz nową lekcję",myLessons:"Moje lekcje",tutorial:"Wideo instruktażowe"},quota={used:"Wykorzystano {{count}}/{{limit}} lekcji",limitReached:"Limit darmowych lekcji wyczerpany",proPermanent:"Brak limitu na zawsze",proDaysRemaining:"{{days}} dni bez limitu"},form$3={createTitle:"Stwórz nową lekcję",editTitle:"Edytuj lekcję",titleLabel:"Nazwa lekcji",questionsCount:"Pytania ({{count}}/{{max}})",questionLabel:"Pytanie {{index}}",questionEmpty:"(Nie wpisano)",questionContent:"Treść pytania:",questionPlaceholder:"Wpisz pytanie...",answerALabel:"Odpowiedź A (przechył w lewo):",answerAPlaceholder:"Wpisz odpowiedź A...",answerBLabel:"Odpowiedź B (przechył w prawo):",answerBPlaceholder:"Wpisz odpowiedź B...",correctAnswerLabel:"Poprawna odpowiedź:",addQuestion:"Dodaj pytanie",save:"Zapisz lekcję",saving:"Zapisywanie...",cancel:"Anuluj",errorTitle:"Proszę podać nazwę lekcji",errorNoQuestion:"Wymagane jest co najmniej 1 pytanie",errorQuestionEmpty:"Pytanie {{index}} nie może być puste",errorAnswerA:"Pytanie {{index}}: Odpowiedź A nie może być pusta",errorAnswerB:"Pytanie {{index}}: Odpowiedź B nie może być pusta",errorCorrect:"Pytanie {{index}}: Proszę wybrać poprawną odpowiedź",errorLoad:"Nie udało się wczytać lekcji",errorSave:"Wystąpił błąd podczas zapisywania",maxQuestionsAlert:"Maksymalna liczba pytań to {{max}}",minQuestionsAlert:"Wymagane jest co najmniej 1 pytanie",questionsSectionTitle:"Pytania ({{count}})",pickFromBankBtn:"🗃️ Wybierz z Bazy lub AI",manualInputBtn:"✏️ Wpisz ręcznie",questionsNote:"Każde pytanie musi mieć odpowiedź A (przechył w lewo) i odpowiedź B (przechył w prawo), wybierz poprawną odpowiedź.",questionListHeader:"Lista pytań",noQuestionsLbl:"Brak pytań",noQuestionsDesc:"Wybierz z Bazy pytań lub wpisz ręcznie, aby dodać pytania.",editQuestionTooltip:"Edytuj pytanie",deleteQuestionTooltip:"Usuń pytanie",removeQuestionMsg:"Usunięto pytanie nr {{index}}",clearAllBtn:"Usuń wszystko",clearAllConfirm:"Czy na pewno chcesz usunąć wszystkie pytania?",clearAllSuccess:"Wszystkie pytania zostały usunięte",addQuestionSuccess:"Dodano {{count}} pytań (razem: {{total}})",updateQuestionSuccess:"Zaktualizowano pytanie",selectQuestionsTitle:"Wybierz pytania z Bazy",skippedNot2Answers:"Pominięto {{count}} pytań, które nie mają dokładnie 2 odpowiedzi (nie pasują do Quizu Przechylania Głowy)",noValidQuestions:"Brak pasujących pytań — Quiz Przechylania Głowy wymaga pytań z dokładnie 2 odpowiedziami",importSummary:"Dodano {{added}} pytań | Pominięto {{skipped}} pytań (brak 2 odpowiedzi)",allowRetryLabel:"Pozwól uczeń na wielokrotne próby (dla zadań domowych)",allowRetryDesc:"Uczniowie mogą grać wielokrotnie w tej samej przeglądarce. Zostanie wysłany ostatni wynik.",sensitivityLabel:"Czułość przechyłu (stopnie): {{value}}°",sensitivityDesc:"Kąt nachylenia potrzebny do rozpoznania odpowiedzi. Im mniejsza wartość, tym większa czułość (domyślnie 20°).",autoNextDelayLabel:"Czas do automatycznego przejścia: {{value}} sek.",autoNextDelayDesc:"Po udzieleniu odpowiedzi system automatycznie przejdzie do następnego pytania po tym czasie (dom
573yślnie 3 sek.).",shuffleAnswers:"🔀 Tasuj odpowiedzi",shuffleAnswersDesc:"Zmieniaj pozycje A/B losowo w każdym pytaniu — nie wpływa to na poprawną odpowiedź.",noCameraMode:"📷 Używaj kamery (przechyl głowę, aby odpowiedzieć)",noCameraModeDesc:"Włączone: uczniowie przechylają głowę przed kamerą. Wyłączone: dotykają odpowiedzi, kamera niepotrzebna.",ttsLabel:"🔊 Głos AI",ttsReady:"✅ Gotowy",ttsNeeded:"⚠️ Wymaga konfiguracji",ttsDesc:"Automatyczne czytanie pytań przez AI, jeśli pytanie nie ma wgranego dźwięku.",bgmDefault:"🎵 Domyślna muzyka",bgmNone:"Domyślnie (Utwór 1)",bgmTrack:"Utwór {{n}}",bgmDesc:"Uczniowie mogą zmienić muzykę w trakcie gry.",bgmCustom:"Wgraj własną muzykę (FullGame):",bgmMyMusic:"Moja muzyka",bgColorLabel:"🎨 Kolor tła ramki",bgQuestion:"❓ Ramka pytania",bgAnswerA:"👈 Ramka odpowiedzi A",bgAnswerB:"👉 Ramka odpowiedzi B",bgReset:"Domyślnie",importLesson:"📂 Z istniejącej lekcji",importLessonTitle:"Dodaj pytania z innej lekcji",errorLibrarySelection:"Proszę wybrać Poziom, Przedmiot i Klasę, aby opublikować w Bibliotece społeczności.",libraryLargeAlert:"Lekcja jest za duża, aby opublikować ją w Bibliotece społeczności. Lekcja została jednak zapisana pomyślnie."},myLessons={title:"Moje Lekcje",subtitle:"Zarządzaj swoimi Quizami Przechylania Głowy",empty:"Nie masz jeszcze żadnych lekcji. Stwórz nową z menu po lewej stronie, aby zacząć.",questionsCount:"{{count}} pytań",updatedAt:"Aktualizacja: {{date}}",sharedBadge:"Udostępnione",play:"Graj",edit:"Edytuj",assign:"Zadaj",share:"Udostępnij",copyLink:"Kopiuj link",unshare:"Cofnij udostępnianie",deleteTitle:"Potwierdź usunięcie",deleteMessage:"Czy na pewno chcesz usunąć tę lekcję? Tej operacji nie można cofnąć.",deleteCancel:"Anuluj",deleteConfirm:"Usuń",toastDeleteSuccess:"Lekcja usunięta pomyślnie",toastDeleteError:"Nie udało się usunąć lekcji",back:"Wstecz",toastLoadError:"Nie udało się wczytać listy lekcji",toastShareSuccess:"Link do udostępniania skopiowany!",toastShareError:"Nie udało się udostępnić lekcji",toastCopySuccess:"Link skopiowany!",toastUnshareError:"Nie udało się cofnąć udostępniania",lockedTip:"Odnów subskrypcję, aby odblokować",pinExpired:"⚠️ Gói đã hết hạn!",createNewFirst:"➕ Stwórz pierwszą lekcję",demo:{title:"Quiz Przechylania Głowy - Demo",badge:"Demo",hint:"Wypróbuj demo, aby poznać grę przed stworzeniem własnej lekcji"}},game$1={questionCounter:"Pytanie {{current}}/{{total}}",scoreCorrect:"Dobrze:",scoreIncorrect:"Źle:",tiltLeft:"Przechył w lewo",tiltRight:"Przechył w prawo",holdNeutral:"Trzymaj głowę prosto, aby kontynuować...",feedbackCorrect:"Dobrze!",feedbackIncorrect:"Źle!",correctAnswerIs:"Poprawna odpowiedź: {{answer}}",nextQuestion:"Następne pytanie",finish:"Zakończ",loadingCamera:"Uruchamianie kamery...",calibrating:"Trzymaj głowę prosto, trwa kalibracja...",exit:"Wyjdź",doneTitle:"Gotowe!",doneScore:"Poprawne odpowiedzi: {{correct}}/{{total}}",doneIncorrect:"Błędy: {{count}}",doneExit:"Wyjdź",doneRestart:"Graj ponownie",reportBtn:"📋 Zobacz raport",reportTitle:"📋 Raport",reportStats:"{{correctCount}}/{{questionsCount}} poprawnych",back:"Wstecz",questionLabel:"Pytanie {{n}}",chosenLabel:"Wybrano:",correctLabel:"Poprawnie:",tiltContextTip:"👆 Kliknij lub przechyl głowę, aby wybrać",emojiContextTip:"😄 Pokaż odpowiedni wyraz twarzy, aby wybrać",bgmOn:"Muzyka: WŁ.",bgmOff:"Muzyka: WYŁ.",nextShort:"Dalej",errorWebGL:"Twoja przeglądarka nie hỗ trợ WebGL. Spróbuj użyć Chrome.",errorDenied:"Brak dostępu do kamery. Zezwól na korzystanie z kamery w ustawieniach przeglądarki.",errorZaloBlocked:'Otwarcie w Zalo/
573Messenger blokuje kamerę. Kliknij 3 kropki i wybierz "Otwórz w przeglądarce", aby grać!',faceTheCamera:"Skieruj twarz do kamery",noCameraTip:"📷 Nie widzisz kamery? Kliknij tutaj"},instructions$1={title:"Jak grać w Quiz Przechylania Głowy",step1Title:"1. Zezwól na dostęp do kamery",step1Desc:'Gra potrzebuje kamery do rozpoznawania twarzy. Kliknij "Zezwól" (Allow) w przeglądarce.',step2Title:"2. Przechylaj głowę, aby wybrać odpowiedź",step2Desc:"Przechyl w lewo lub w prawo, aby wybrać opcję. Musisz przechylić o więcej niż 15 stopni.",step3Title:"3. (Opcjonalnie) Każde pytanie może być dla innego ucznia",step3Desc:'Po każdym pytaniu może podejść inny uczeń. Nauczyciel klika "Następne pytanie".',tip:"Zawiera {{count}} pytań",fullscreen:"Pełny ekran",ready:"Gotowy do gry!",loading:"Wczytywanie...",startCameraTip:'Naciśnij "Start", aby uruchomić kamerę',modeTilt:"↔️ Przechyl głowę",modeEmoji:"😄 Wyraz twarzy",emojiStep1Title:"Rozpoznawanie twarzy przez kamerę",emojiStep1Desc:"Upewnij się, że oświetlenie jest dobre i twarz jest skierowana do kamery.",emojiStep2Title:"Dwa emoji po lewej i prawej stronie",emojiStep2Desc:"Każde emoji odpowiada jednej odpowiedzi. Emoji zmieniają się losowo w każdym pytaniu.",emojiStep3Title:"Pokaż wyraz twarzy odpowiadający emoji",emojiStep3Desc:"Utrzymaj wyraz twarzy przez około 1 sekundę, aż pasek postępu się zapełni."},share={lessonBy:"Lekcja przygotowana przez {{name}}",notFound:"Nie znaleziono lekcji",linkInvalid:"Link jest nieprawidłowy lub lekcja została usunięta.",loading:"Wczytywanie lekcji...",goHome:"Powrót do strony głównej",cameraPending:'Naciśnij "Start", aby uruchomić kamerę'},plHeadTiltQuiz={sidebar,quota,form:form$3,myLessons,game:game$1,instructions:instructions$1,share},title$1="🗃️ Bank Pytań",stats={count:"{{count}} / 1000 pytań",unit:"pytań"},editor={manualEntry:"Wprowadzanie ręczne",editQuestion:"Edytuj pytanie",questionNum:"Pytanie {{index}}",questionContent:"Treść pytania:",typeAbcd:"ABCD",typeTrueFalse:"Prawda/Fałsz",typeMultiple:"Wielokrotny wybór",typeShortAnswer:"Krótka odpowiedź",typeChangeWarning:"Zmiana typu pytania spowoduje utratę obecnych treści. Czy kontynuować?",simpleKeyboard:"⌨ Prosta klawiatura",mathLive:"⌨ MathLive",restrictedTo:"Tylko pytania typu: {{type}}",maxAnswersSuffix:"z maksymalnie {{count}} odpowiedziami",answersTitle:"Odpowiedzi (zaznacz poprawną):",answersMultipleTitle:"Odpowiedzi (zaznacz poprawne):",addAnswer:"Dodaj odpowied
573ź",deleteTooltip:"Usuń",shortAnswerGuide:"Zaznacz tekst w pytaniu -> kliknij 'Oznacz jako odpowiedź', aby utworzyć lukę.",markAsAnswer:"Oznacz jako odpowiedź",resetAnswer:"Resetuj odpowiedź",correctAnswerLabel:"Poprawna odpowiedź:",altAnswersLabel:"Alternatywne odpowiedzi:",altAnswerPlaceholder:"Wpisz inną poprawną wersję...",addAltAnswer:"Dodaj",maxSelection:"(Maksymalnie {{count}} pytań)",loadedCount:"Załadowano: {{count}} pytań{{hasMore}}",hasMoreSuffix:" (jeszcze są)",searchInternal:"Szukaj w załadowanych pytaniach...",selectAll:"Wybierz wszystkie {{count}}",deselectAll:"Odznacz wszystko",selectedCount:"Wybrano: {{count}}",tryLoadMore:"Spróbuj kliknąć 'Załaduj więcej', aby przeszukać resztę",loading:"Wczytywanie...",loadMore:"Załaduj kolejne {{count}} pytań",fontSize:{general:"Rozmiar globalny",small:"Małe",medium:"Średnie",large:"Duże",xl:"Bardzo duże",huge:"Ogromne"},imageSize:{small:"Małe",medium:"Średnie",large:"Duże",xl:"Bardzo duże",sizeSmall:"Małe",sizeMedium:"Średnie",sizeLarge:"Duże",sizeXl:"Bardzo duże"},syncToBank:{tooltip:"Zaktualizuj to pytanie w Banku (używa zasobów — używaj tylko w razie potrzeby)",confirm:"Kliknij ponownie, aby potwierdzić synchronizację",success:"✅ Zsynchronizowano!"},closeTooltip:"Zamknij",deleteQuestionTooltip:"Usuń pytanie",duplicateQuestionTooltip:"Duplikuj pytanie",simpleKeyboardTooltip:"Użyj standardowej klawiatury",mathLiveTooltip:"Użyj edytora wzorów matematycznych"},alerts$1={multiTypeHint:"Możesz tworzyć pytania różnych typów w jednej lekcji.",answerLimit:{multiple:"Każde pytanie może mieć od 2 do {{max}} odpowiedzi.",single:"Każde pytanie musi mieć dokładnie 2 odpowiedzi (A i B)."},pastingImage:"Przesyłanie wklejonego obrazu...",saveGuidance:"💾 Zaleca się wpisanie mniej niż 10 pytań i kliknięcie Zapisz, a następnie dodawanie kolejnych — aby uniknąć utraty danych.",noQuestionsPlaceholder:"Brak pytań. Kliknij przycisk poniżej, aby dodać pierwsze pytanie.",quotaReached:"Bank osiągnął 1000 pytań — przy dodawaniu nowych, najstarsze zostaną usunięte.",quotaWarning:"Używasz {{count}}/1000 pytań. Gdy będzie pełny, nowe zastąpią najstarsze."},empty$1={noResults:"Nie znaleziono pytań",noQuestions:"Brak pytań w bazie",tryDifferentKeyword:"Spróbuj innego słowa kluczowego",autoSaveInfo:"Pytania są automatycznie zapisywane, gdy tworzysz je w innych modułach.",notEntered:"(Brak treści)",drafting:"Edytowanie..."},actions$1={searchPlaceholder:"Wpisz treść pytania...",addQuestion:"Dodaj pytanie",duplicateLastQuestion:"Duplikuj ostatnie pytanie",save:"Zapisz {{count}} pytań",saveChanges:"Zapisz zmiany",cancel:"Anuluj",useSelected:"Użyj {{count}} wybranych",exportAll:"Eksportuj wszystko",importExcel:"Importuj z Excel/Word",importFromFile:"Importuj z pliku"},error$1={validation:{maxQuestions:"Maksymalna liczba pytań to {{count}}.",atLeastOne:"Musisz dodać co najmniej jedno pytanie.",maxReached:"Przekroczono limit: {{count}} pytań (obecnie: {{current}}).",maxQuestionsReached:"Osiągnięto maksymalną liczbę wybranych pytań ({{count}}).",emptyQuestion:"Treść pytania {{index}} nie może być pusta.",atLeastTwoAnswers:"Pytanie musi mieć co najmniej 2 odpowiedzi.",maxAnswers:"Pytanie {{index}} może mieć maksymalnie {{count}} odpowiedzi.",mustHaveCorrect:"Pytanie {{index}} musi mieć co najmniej jedną poprawną odpowiedź.",mustHaveMultipleCorrect:"Pytanie {{index}} musi mieć co najmniej jedną poprawną odpowiedź.",emptyAnswer:"Odpowiedź w pytaniu {{index}} nie może być pusta.",emptyStatement:"Twierdzenie w pytaniu {{index}} nie może być puste.",mustHaveCorrectAnswer:"Pytanie {{index}} musi mieć poprawną odpowiedź."},syncFailed:"Synchronizacja pytania {{index}} nie powiodła się: {{message}}",pasteImageFailed:"Nie udało się przesłać obrazu ze schowka.",audioUploadFailed:"Przesyłanie pliku audio nie powiodło się. Sprawdź połączenie i naciśnij Zapisz ponownie."},confirm={deleteAudio:"Usuń nagranie audio"},bgm={uploadBtn:"Prześlij muzykę",uploadTooltip:"Prześlij własną muzykę tła",deleteTooltip:"Usuń własną muzykę",customLabel:"Własna muzyka",proOnly:"Tylko FullGame PLAN",proDesc:"Kup FullGame, aby przesłać własną muzykę tła.",upgradeBtn:"Kup FullGame",errorType:"Akceptowane są tylko pliki .mp3, .wav, .ogg",errorSize:"Plik zbyt duży ({{size}} MB). Maksimum 5 MB.",errorLogin:"Musisz być zalogowany, aby przesłać muzykę.",errorGeneric:"Przesyłanie nie powiodło się. Spróbuj ponownie.",disclaimer:{title:"⚖️ Prawa autorskie",intro:"Przesyłając muzykę, potwierdzasz, że:",point1:"Jesteś właścicielem lub masz prawo do używania tego utworu.",point2:"Muzyka nie narusza praw autorskich osób trzecich.",point3:"Ponosisz pełną odpowiedzialność prawną za wszelkie powiązane kwestie.",cancel:"Anuluj",confirm:"Zgadzam się, kontynuuj przesyłanie"}},lessonPicker={title:"Dodaj pytania z istniejącej lekcji",loadMore:"Załaduj więcej",errorList:"Nie udało się załadować listy lekcji. Spróbuj ponownie.",errorLesson:"Nie udało się załadować lekcji. Spróbuj ponownie.",noQuestions:"Ta lekcja nie ma jeszcze żadnych pytań.",emptyFeature:"Nie masz jeszcze żadnych lekcji w module {{feature}}.",questionCount:"{{count}} pytań",conversionNote:"Pytania zostaną skonwertowane do odpowiedniego formatu. Niektóre pytania mogą zostać pominięte, jeśli są niekompatybilne.",cancel:"Anuluj",featureLabels:{"head-tilt-quiz":"Quiz Przechylania Głowy","tug-of-war-game":"Przeciąganie Liny","flip-puzzle-game":"Układanka","quiz-game":"Quiz Przeciągnij i Upuść","hand-slash-quiz":"Quiz Przecinania Owoców","crossword-puzzle":"Krz
573yżówka","interactive-image":"Interaktywny Obraz","interactive-video":"Interaktywne Wideo","pose-quiz":"Quiz Pozycji","versus-game":"Gra Pojedynkowa","wheel-quiz":"Koło Fortuny","turn-based-game":"Gra Turowa","paced-quiz":"Quiz na Czas",wheel_quiz:"Koło Fortuny",hand_slash:"Quiz Przecinania Owoców",head_tilt:"Quiz Przechylania Głowy",paced_quiz:"Quiz na Czas",tug_of_war:"Przeciąganie Liny",pose_quiz:"Quiz Pozycji",turn_based:"Gra Turowa",versus_game:"Gra Pojedynkowa",star_bag:"Worek Szczęśliwych Gwiazd",minesweeper:"Saper",crossword:"Krzyżówka",interactive_image:"Interaktywny Obraz",journey:"Podróż",interactive_video:"Interaktywne Wideo"}},uploader={image:{label:"Zdjęcie",uploadBtn:"Prześlij z komputera",cropUploadBtn:"Przytnij i prześlij",cropUploadHint:"Wybierz obraz, najpierw przytnij, potem prześlij",errorType:"Proszę wybrać plik graficzny",errorGeneric:"Błąd podczas przesyłania. Spróbuj ponownie.",uploading:"Przesyłanie...",tooltipUpload:"Prześlij zdjęcie z komputera",cropTitle:"Przytnij zdjęcie",cropHint:"Przeciągnij, aby wybrać obszar do zachowania. Przycięcie daje ostrzejszy i lżejszy obraz.",cropConfirm:"Przytnij i prześlij",cropCancel:"Anuluj",rotateLeft:"Obróć w lewo o 90°",rotateRight:"Obróć w prawo o 90°",cropTooltip:"Przytnij / obróć zdjęcie",errorCropLoad:"Nie udało się wczytać zdjęcia do przycięcia. Spróbuj ponownie."},audio:{uploadBtn:"Prześlij dźwięk",recordBtn:"Nagraj",stopBtn:"Zatrzymaj",aiVoiceBtn:"Głos AI",uploading:"Przesyłanie...",errorMic:"Brak dostępu do mikrofonu. Proszę przyznać uprawnienia.",proOnly:"🔒 Tylko dla FullGame PLAN",proDesc:"Kup FullGame (200k/rok), aby móc przesyłać dźwięk do pytań.",upgradeBtn:"Kup FullGame",tooltipUpload:"Prześlij dźwięk (MP3/WAV/OGG, maks. 5MB)",tooltipUploadPro:"Prześlij dźwięk — Tylko FullGame PLAN",tooltipRecord:"Nagraj dźwięk bezpośrednio",tooltipRecordPro:"Nagrywanie — Tylko FullGame PLAN",tooltipAi:"Stwórz głos AI",tooltipStop:"Zatrzymaj nagrywanie",tooltipPlay:"Plik dźwiękowy — kliknij, aby odsłuchać",tooltipDelete:"Usuń dźwięk",confirmTitle:"🎤 Potwierdź nagranie",confirmDesc:"Odsłuchaj nagranie przed użyciem:",btnRetry:"Nagraj ponownie",btnUse:"Użyj nagrania",aiModal:{title:"🎙️ Stwórz głos AI",desc:"Zostaniesz przekierowany do narzędzia AI. Stwórz plik .mp3, a następnie wróć tutaj i prześlij go.",instruction:"Po utworzeniu pliku .mp3, prześlij go tutaj:",btnOpen:"Rozumiem, otwórz narzędzie",btnClose:"Zamknij"},pendingHint:"⏳ Plik jeszcze nie przesłany — naciśnij Zapisz, aby zakończyć."}},plQuestionBank={title:title$1,stats,editor,alerts:alerts$1,empty:empty$1,actions:actions$1,error:error$1,confirm,bgm,lessonPicker,import:{tabs:{paste:"Wklej z AI",upload:"Prześlij plik",export:"Eksportuj"},paste:{title:"📋 Instrukcja wklejania JSON z AI",instruction:"Przejdź do: <0>Oprogramowania AI do tworzenia pytań</0><br />Utwórz pytania w tym programie, a następnie kliknij przycisk <1>Kopiuj do giaoviendoimoi</1> i wklej zawartość poniżej.",placeholder:"Wklej zawartość JSON z AI Studio...",label:"Wklej JSON tutaj:",shuffle:"Automatycznie pomieszaj odpowiedzi",shuffleDesc:"Zmienia kolejność A/B/C/D losowo — poprawna treść odpowiedzi pozostaje ta sama",btnImport:"Importuj JSON",btnImporting:"Importowanie...",btnConfirm:"Zapisz do banku ({{count}} pytań)",previewTitle:"Podgląd ({{count}} pytań)",previewMeta:"{{count}} odpowiedzi",previewMore:"... i {{count}} innych pytań",errorArray:"Dane muszą być tablicą pytań",errorMissing:"Pytanie {{index}}: Brak wymaganych pól (question_content lub options)",errorMinAnswers:"Pytanie {{index}}: Musi mieć co najmniej 2 odpowiedzi",errorNoCorrect:"Pytanie {{index}}: Nie znaleziono poprawnej odpowiedzi",errorEmpty:"Proszę wkleić zawartość JSON w pole poniżej",errorLimit:"Maksymalnie 50 pytań naraz",errorNoQuestions:"Nie znaleziono pytań w danych",errorInvalid:"Nieprawidłowy format JSON. Sprawdź ponownie.",successParsed:"Przeanalizowano {{count}} pytań z JSON{{shuffle}}.",shuffledSuffix:" (odpowiedzi pomieszane)"},upload:{formatLabel:"Format",templateTitle:"📝 Nie masz pliku? Pobierz szablon",templateDesc:"Szablon Excel ze standardowym formatem (ID, Pytanie, Odpowiedzi A/B/C/D, Poprawna odpowied
573ź).",btnDownload:"Pobierz szablon Excel",docxGuideTitle:"Instrukcja formatu Word",docxGuideDesc:"Napisz pytania według poniższego wzoru. Podkreśl literę (A-F) poprawnej odpowiedzi.",btnDownloadDocx:"Pobierz przykładowy plik Word",btnSelect:"Wybierz plik do importu",btnProcessing:"Przetwarzanie...",errorFormat:"Plik ma nieprawidłowy format {{format}}",successRead:"Przeczytano {{count}} pytań z pliku{{shuffle}}.",instructionTitle:"💡 Instrukcja Importu",instructionList:{li1:"Użyj szablonu Excel, aby zapewnić poprawny format (pobierz powyżej)",li2:"Kompatybilność z AI Generator: Pliki Excel z autorskich narzędzi AI można importować bezpośrednio",li3:"Format Excel: ID, Pytanie, Odpowiedzi A/B/C/D, Poprawna odpowiedź",li4:"Format Word (.docx): Pytanie 1: ..., A. B. C. D. — podkreśl literę poprawnej odpowiedzi",li5:"Wsparcie LaTeX: Użyj składni $wzór$ (np. $2 + 2$)",li6:"Poprawna odpowiedź: Wpisz A, B, C lub D (wiele odpowiedzi: A, C lub A C)",li7:"Limit: Maksymalnie 20-30 pytań przy jednym imporcie dla stabilności"}},export:{title:"📊 Informacje o Eksporcie",countInfo:"Liczba pytań do eksportu: {{count}}",formatExcel:"Plik Excel (.xlsx) - Dobry do edycji i ponownego importu",formatJson:"Plik JSON (.json) - Dobry do kopii zapasowej i integracji",formatCsv:"Plik CSV (.csv) - Dobry do przetwarzania w innych narzędziach",btnExport:"Eksportuj",btnExporting:"Eksportowanie...",success:"Pomyślnie wyeksportowano {{count}} pytań!",notesTitle:"📝 Uwagi",notesList:{li1:"Plik zostanie pobrany do folderu Pobrane",li2:"Nazwa pliku będzie w formacie: cau-hoi-RRRR-MM-DD",li3:"Wzory matematyczne zachowają format $...$",li4:"Plik Excel można zaimportować ponownie, aby przywrócić pytania"}}},uploader},title="📋 Moje Aktywności",subtitle="Utworzono {{count}} treści",searchHint="Szukaj po nazwie...",tabs={all:"Wszystkie"},error="Nie udało się załadować danych. Spróbuj ponownie.",empty={noResults:"Nie znaleziono wyników",noContent:"Brak treści",tryAnother:"Spróbuj innego słowa kluczowego",startCreating:"Zacznij tworzyć treści za pomocą narzędzi w Panelu",backToDashboard:"Wróć do Panelu"},actions={view:"Zobacz",edit:"Edytuj",assign:"Zadaj",assignTitle:"Zadaj pracę domową",teacherShare:"Udostępnij Nauczycielom"},features={"interactive-video":"Wideo Interaktywne","panorama-museum":"Muzeum Panoramy","quiz-game":"Przeciągnij i upuść - Dopasowanie","hand-slash-quiz":"Quiz z Owocami (Hand Slash)","flip-puzzle-game":"Gra z puzzlami","crossword-puzzle":"Krzyżówka","tug-of-war-game":"Przeciąganie liny","paced-quiz":"Quiz w odpowiednim tempie","interactive-image":"Interaktywny obraz","head-tilt-quiz":"Quiz z nachyleniem głowy","pose-quiz":"Quiz z pozami (Ćwiczenia ABC)","versus-game":"Gra Versus","wheel-quiz":"Koło fortuny - Wyścig kaczek","turn-based-game":"Gra turowa",flashcard:"Fiszki","mind-map":"Mapa myśli",minesweeper:"Saper","flying-words-game":"Latające słowa"},itemDefaults={"interactive-video":"Lekcja bez tytułu","panorama-museum":"Pokój bez tytułu","quiz-game":"Quiz bez tytułu","hand-slash-quiz":"Lekcja bez tytułu","flip-puzzle-game":"Gra bez tytułu","crossword-puzzle":"Krzyżówka bez tytułu","tug-of-war-game":"Gra bez tytułu","paced-quiz":"Quiz bez tytułu","interactive-image":"Obraz bez tytułu","head-tilt-quiz":"Lekcja bez tytułu","pose-quiz":"Lekcja bez tytułu","versus-game":"Gra bez tytułu","wheel-quiz":"Koło bez tytułu","turn-based-game":"Gra bez tytułu"},publish={title:"Biblioteka społeczności",submitToLibrary:"Udostępnij w Bibliotece społeczności",saveForMeOnly:"Tylko dla mnie",schoolLevel:"Poziom edukacji *",subject:"Przedmiot *",grade:"Klasa *",uploadLimitReached:"Osiągnąłeś limit przesyłania. Przejdź na wersję FullGame, aby dzielić się więcej.",upgradeProTooltip:"Przejdź na FullGame, aby wesprzeć społeczność",copyrightLabel:"Potwierdzam, że ta treść została stworzona przez mnie lub mam prawo ją udostępnić i nie narusza praw autorskich osób trzecich.",copyrightRequiredError:"Potwierdź prawa autorskie do treści przed opublikowaniem w bibliotece",levels:{"mam-non":"Przedszkole","tieu-hoc":"Szkoła podstawowa",thcs:"Gimnazjum / Liceum I",thpt:"Liceum / Technikum",khac:"Inne"},subjects:{"phat-trien-the-chat":"Rozwój fizyczny","phat-trien-nhan-thuc":"Rozwój poznawczy","phat-trien-ngon-ngu":"Rozwój mowy","phat-trien-tinh-cam":"Rozwój emocjonalny","phat-trien-tham-my":"Rozwój estetyczny","tieng-viet":"Język wietnamski",toan:"Matematyka","ngoai-ngu-1":"Język obcy 1","ngoai-ngu-2":"Język obcy 2","giao-duc-loi-song":"Edukacja społeczna","dao-duc":"Etyka","tu-nhien-xa-hoi":"Przyroda i społeczeństwo","lich-su-dia-ly":"Historia i geografia","khoa-hoc":"Nauka / Przyroda","tin-
573hoc-cong-nghe":"Informatyka i technika","giao-duc-the-chat":"W-F","nghe-thuat":"Sztuka","tieng-dan-toc":"Język mniejszości","ngu-van":"Literatura",gdcd:"Wiedza o społeczeństwie","khoa-hoc-tu-nhien":"Nauki przyrodnicze","cong-nghe":"Technika","tin-hoc":"Informatyka","gdqp-an":"Edukacja dla bezpieczeństwa","gd-kinh-te-phap-luat":"Ekonomia i prawo","lich-su":"Historia","dia-ly":"Geografia","vat-ly":"Fizyka","hoa-hoc":"Chemia","sinh-hoc":"Biologia",khac:"Inne"},grades:{1:"Klasa 1",2:"Klasa 2",3:"Klasa 3",4:"Klasa 4",5:"Klasa 5",6:"Klasa 6",7:"Klasa 7",8:"Klasa 8",9:"Klasa 9",10:"Klasa 10",11:"Klasa 11",12:"Klasa 12","nha-tre":"Żłobek","mau-giao-3-4":"Przedszkole 3-4","mau-giao-4-5":"Przedszkole 4-5","mau-giao-5-6":"Przedszkole 5-6",khac:"Inne"}},community={title:"Biblioteka społeczności",description:"Przeglądaj i zapisuj lekcje od społeczności nauczycieli",tabs:{explore:"Eksploruj",mine:"Moje wpisy"},filters:{level:"Poziom",subject:"Przedmiot",grade:"Klasa",gameType:"Typ gry",allSubjects:"Wszystkie przedmioty",allGrades:"Wszystkie klasy",allTypes:"Wszystkie typy",searchPlaceholder:"Szukaj po tytule...",searchBtn:"Szukaj",searchHint:"Naciśnij Szukaj, aby zobaczyć wyniki",clearFilters:"Wyczyść filtry ({{count}})"},explore:{selectBase:"Wybierz poziom i przedmiot, aby znaleźć lekcje",selectBaseDesc:"Filtruj według Przedszkola, Szkoły Podstawowej, Gimnazjum lub Liceum",selectSubject:"Następnie wybierz przedmiot",selectSubjectDesc:"Potem naciśnij Szukaj, aby zobaczyć wyniki",noResults:"Nie znaleziono lekcji",noResultsDesc:"Spróbuj zmienić filtry"},mine:{empty:"Nie opublikowałeś jeszcze żadnych lekcji",emptyDesc:"Podczas tworzenia lekcji wybierz „Udostępnij w Bibliotece społeczności”, aby się dołączyć",removeConfirm:"Usunąć „{{title}}” z Biblioteki społeczności?",removeTooltip:"Usuń z Biblioteki społeczności"},card:{questions:"{{count}} pytań",by:"Przez {{author}}",anonymous:"Anonim",reportTooltip:"Zgłoś nieodpowiednią treść",viewAndSaveTooltip:"Podgląd i zapisz na swoim koncie",btnSave:"Zobacz i zapisz"},detail:{questions:"pytań",postedBy:"Opublikowane przez",loadError:"Nie udało się załadować szczegółów lekcji.",saveSuccess:"Zapisano na Twoim koncie!",saveSuccessDesc:"Lekcja została dodana do Twojej listy.",previewTitle:"Podgląd pytań:",moreQuestions:"... i {{count}} innych pytań",alreadyClonedHint:"Już zapisałeś tę lekcję. Czy chcesz ją zapisać ponownie?",btnCancel:"Anuluj",btnCloneAgain:"Zapisz mimo to",btnClone:"Zapisz na koncie",btnGoToTool:"Idź do {{name}}",generalError:"Coś poszło nie tak. Spróbuj ponownie."}},report$1={title:"Zgłoś lekcję",desc:"Powiedz nam, dlaczego zgłaszasz tę lekcję.",success:"✅ Dziękujemy! Twoje zgłoszenie zostało przyjęte.",alreadyReported:"Już zgłosiłeś tę lekcję wcześniej.",submitError:"Coś poszło nie tak. Spróbuj ponownie.",noteLabel:"Dodatkowe uwagi (opcjonalnie)",btnSubmit:"Wyślij zgłoszenie",reasons:{inappropriate:"Nieodpowiednia treść",spam:"Spam / duplikat",copyright:"Naruszenie praw autorskich",other:"Inne"}},plLibrary={title,subtitle,searchHint,tabs,error,empty,actions,features,itemDefaults,publish,community,report:report$1},page$1={title:"Gra Turowa",sidebar:{myGames:"Moje Gry",createNew:"Utwórz Nową",upgradeLabel:"Uaktualnij"},quota:{proPermanent:"FullGame dożywotnio",proDaysRemaining:"Pozostało {{days}} dni FullGame",usedCount:"Użyto {{current}}/{{total}} gier",limitReached:"Osiągnięty limit wersji próbnej"}},list$1={title:"🎲 Moje Gry",subtitle:"Zarządzaj swoimi utworzonymi grami turami",pinHint:"Przypnij gry, aby mieć dostęp nawet po wygaśnięciu",pinnedCount:"({{current}}/{{total}} przypiętych)",subscriptionExpired:"⚠️ Plan wygasł!",renewBtn:"Odnów",empty:"Brak gier",emptyDesc:"Utwórz swoją pierwszą grę, aby zacząć!",createFirstBtn:"➕ Utwórz Pierwszą Grę",item:{questionsCount:"{{count}} pytań",playersCount:"{{count}} graczy",cellsCount:"{{count}} pól",renewToUnlock:"🔒 Odnów, aby odblokować tę grę",playTooltip:"Graj",editTooltip:"Edytuj",assignTooltip:"Przypisz",deleteTooltip:"Usuń",playBtn:"Graj",editBtn:"Edytuj",assignBtn:"Przypisz"},pagination:{prev:"← Poprzednia",current:"Strona {{page}}",next:"Następna →"}
573,deleteDialog:{title:"Usunąć grę?",content:"Gra będzie trwale usunięta. Czy jesteś pewny?",cancel:"Anuluj",delete:"Usuń"}},myGames$1={demo:{title:"Gra Turowa - Wersja Demo",badge:"Demo",hint:"Wypróbuj demo, aby doświadczyć funkcji przed utworzeniem własnej gry"},playTest:"Wypróbuj Demo"},form$2={createTitle:"🎲 Utwórz Nową Grę Turową",editTitle:"✏️ Edytuj Grę Turową",titleLabel:"Tytuł Gry",playersLabel:"Liczba Graczy",playersOption:"{{count}} graczy",charactersLabel:"Postacie: ",playerNamesLabel:"Imiona Graczy",playerNamesHint:"(opcjonalnie)",playerNamePlaceholder:"Gracz {{index}}",obstaclesLabel:"Przeszkody na torze:",obstaclesDesc:"(razem {{total}} przeszkód dla {{players}} graczy)",reuseQuestionsHint:"Pytania będą ponownie używane, jeśli mniej niż razem przeszkód.",bgmLabel:"🎵 Domyślna Muzyka w Tle",bgmOption:"Utwór {{index}}",bgmHint:"Nauczyciel może zmienić muzykę podczas gry.",questionsTitle:"Pytania ({{count}})",questionsReuseWarn:"— potrzeba co najmniej {{total}} pytań lub będą ponownie używane",clearAllBtn:"Wyczyść Wszystko",importBankBtn:"📚 Importuj z Banku Pytań",importQuestionPickerBtn:"🗃️ Z Banku Pytań lub AI",importLessonBtn:"📂 Z Istniejącej Lekcji",manualInputBtn:"✏️ Wpisz Ręcznie",listHeader:"Lista Pytań",imageLabel:"[🖼️ Obraz]",noValidQuestions:"Brak ważnych pytań.",addedFromLesson:"Dodano {{count}} pytań z lekcji.",lessonsPickerTitle:"Dodaj pytania z lekcji",subtitleStatements:"{{count}} stwierdzeń",subtitleShortAnswer:"Wpisz: {{answer}}",empty:"Brak pytań",emptyDesc:"Dodaj pytania, aby przypisać do przeszkód na mapie",cancelBtn:"Anuluj",saveBtn:"Zapisz Grę",saving:"Zapisywanie...",pickerTitle:"Wybierz Pytania z Banku",clearAllConfirm:"Wyczyścić wszystkie pytania?"},player$1={loading:"Wczytywanie gry...",errorLoad:"Nie udało się wczytać gry",bgm1:"Utwór 1",bgm2:"Utwór 2",bgm3:"Utwór 3",bgm4:"Utwór 4",bgm5:"Utwór 5",dice:{skip:"Pomiń Turę",blast:"Zniszcz Przeszkodę",turbo:"Turbo",rolling:"🎲 Rzucanie...",rollBtn:"🎲 Rzuć Kostką",skipStatus:"Niestety! Trafiłeś na Pomiń Turę, teraz kolej następnego gracza",blastStatus:"⭐ Przeszkoda zniszczona! Przesuń {{steps}} kroków",turboStatus:"⚡ Turbo! Przesuń {{steps}} kroków",moveStatus:"Przesuń {{steps}} kroków!"},bubbles:{retryQuestion:"🔄 Odpowiedz na pytanie ponownie!",obstacleEncounter:"⚠️ Napotkana przeszkoda!!",monsterTitle:"NAPOTKANA PRZESZKODA",playerTurn:"{{emoji}} Tura {{name}}",blastSuccess:"⭐ Przeszkoda zniszczona! Przesuń {{steps}} kroków!",noObstacles:"⭐ Brak przeszkód! Przesuń {{steps}} kroków!",noObstaclesStatus:"⭐ Brak przeszkód przed tobą. Przesuń {{steps}} kroków",turboSuccess:"⚡ Turbo! Przesuń {{steps}} kroków!",moveSuccess:"Przesuń {{steps}} kroków!",goalReached:"🏆 Cel osiągnięty! Wygrałeś!",correctTurnEnd:"✅ Poprawnie! Następna tura.",wrongTurnEnd:"❌ Źle! Tura utracona!"},quiz:{title:"❓ Pytanie o Przeszkodę",correct:"🎉 Poprawnie!",wrong:"❌ Źle! Spróbuj ponownie w następnej turze!"},win:{message:"{{emoji}} {{name}} wygrywa!",desc:"Osiągnął cel z powodzeniem!",exitBtn:"← Wyjdź",playAgainBtn:"🔄 Graj Ponownie"},assignment:{nameTitle:"Wpisz imiona dla każdego gracza",playerLabel:"{{emoji}} Gracz {{index}}",startBtn:"▶ Rozpocznij Grę",defaultPlayerName:"Gracz {{index}}"},controls:{playerLabel:"Gracz {{index}}",currentTurn:"▶ Bieżąca Tura",turnPrompt:"Bieżąca Tura",bgmTitle:"🎵 Muzyka w Tle:",playBgmBtn:"▶ Odtwórz Muzykę",muteTooltip:"Wycisz",unmuteTooltip:"Włącz Dźwięk",exitFullscreenTooltip:"Wyjdź z Pełnego Ekranu",enterFullscreenTooltip:"Pełny Ekran",exitFullscreenBtn:"⛶ Wyjdź z Pełnego Ekranu",enterFullscreenBtn:"⛶ Pełny Ekran",exitBtn:"← Wyjdź"}},alerts={loadGamesError:"Błąd wczytywania listy gier",deleteSuccess:"Gra usunięta pomyślnie",deleteError:"Błąd podczas usuwania gry",pinLimitReached:"Możesz przypiąć tylko maksymalnie {{limit}} gier",pinRemovedSuccess:"Odpięto pomyślnie",pinAddedSuccess:"Przypieto pomyślnie",assignSuccess:"Przypisanie zostało utworzone pomyślnie!",saveSuccess:"Gra zapisana pomyślnie!",saveError:"Błąd podczas zapisywania gry",loadDataError:"Błąd wczytywania danych gry",
573invalidQuestion:"Brak prawidłowych pytań (wymagane co najmniej 2 odpowiedzi)",addSuccess:"Dodano {{count}} pytań, pominięto {{skipped}} nieprawidłowych",updateQuestionSuccess:"Pytanie zaktualizowane pomyślnie",addQuestionsSuccess:"Dodano {{count}} pytań",removeQuestionSuccess:"Usunięto pytanie {{index}}",clearAllSuccess:"Wyczyszczono wszystkie pytania",titleRequired:"Proszę wpisać tytuł gry",questionRequired:"Proszę dodać co najmniej 1 pytanie",minQuestionsRequired:"Gra musi mieć co najmniej 1 pytanie",maxQuestionsExceeded:"Gra może mieć maksymalnie 200 pytań",notFound:"Gra nie znaleziona"},plTurnBasedGame={page:page$1,list:list$1,myGames:myGames$1,form:form$2,player:player$1,alerts},page={title:"✋ Quiz - Przecinanie Owoców",upgradeLabel:"Kup pojedynczo",helpLabel:"Instrukcja obsługi",helpTitle:"Instrukcja Quizu Przecinanie Owoców",helpDescription:"Dowiedz się, jak stworzyć Quiz Przecinanie Owoców dla swoich uczniów",sidebar:{myLessons:"Moje lekcje",createNew:"Stwórz nową"}},list={title:"📚 Moje lekcje",subtitle:"Zarządzaj swoimi Quizami Przecinania Owoców",expired:"⚠️ Pakiet wygasł!",renew:"Odnów",empty:"Nie masz jeszcze żadnych lekcji",createFirst:"➕ Stwórz pierwszą lekcję",demo:{title:"Quiz Przecinania Owoców - Demo",badge:"Demo",hint:"Wypróbuj demo, aby poznać grę przed stworzeniem własnej lekcji"},lockedHint:"🔒 Odnów subskrypcję, aby odblokować",stats:"{{count}} pytań",updated:"Aktualizacja: {{date}}",btnPlay:"Graj",btnEdit:"Edytuj",btnAssign:"Zadaj",btnDelete:"Usuń",tooltipPlay:"Graj teraz",tooltipEdit:"Edytuj lekcję",tooltipAssign:"Zadaj uczniom",tooltipDelete:"Usuń lekcję",deleteConfirmTitle:"🗑️ Potwierdź usunięcie",deleteConfirmText:"Czy na pewno chcesz usunąć tę lekcję? Tej operacji nie można cofnąć.",deleteSuccess:"Lekcja została usunięta",deleteError:"Nie udało się usunąć lekcji",loadError:"Nie udało się załadować listy lekcji",speeds:{fast:"Szybko",medium:"Średnio",slow:"Wolno"},freeLessons:"Pozostało {{remaining}}/{{limit}} darmowych lekcji",quotaExceeded:"Osiągnięto limit darmowych lekcji. Proszę ulepszyć konto.",assignSuccess:"Utworzono zadanie z kodem: {{code}}"},form$1={titleCreate:"➕ Stwórz nową lekcję",titleEdit:"✏️ Edytuj lekcję",lessonName:"Nazwa lekcji",speedTitle:"🍎 Prędkość wyrzucania owoców",speedFast:"🚀 Szybko",speedMedium:"⚡ Średnio",speedSlow:"🐢 Wolno",useBackground:"🖼️ Użyj tła (ukryj kamerę)",noCamera:"📷 Używaj kamery (tnij ręką przed kamerą)",questionsTitle:"Pytania ({{current}}/{{max}})",questionNum:"Pytanie {{num}}",questionPlaceholder:"Wpisz pytanie...",answerColors:{green:"Zielony",red:"Czerwony",yellow:"Żółty",purple:"Fioletowy"},answerLabel:"Odpowiedzi (zaznacz poprawną):",btnAddQuestion:"Dodaj pytanie",btnSelectFromBank:"🗃️ Wybierz z banku",btnCancel:"Anuluj",btnSave:"Zapisz lekcję",saving:"Zapisywanie...",errorTitleRequired:"Proszę podać nazwę lekcji",errorMinQuestions:"Musisz dodać co najmniej jedno pytanie",errorQuestionEmpty:"Pytanie {{num}} nie może być puste",errorCorrectRequired:"Pytanie {{num}} musi mieć poprawną odpowiedź",errorAnswerEmpty:"Pytanie {{num}} ma pustą odpowiedź",errorMaxQuestions:"Maksymalnie {{max}} pytań",loadError:"Nie udało się załadować lekcji",bankPickerTitle:"Wybierz pytania dla Hand Slash Quiz",bankValidation:"{{count}} pytań nie pasuje do Hand Slash Quiz (wymagane dokładnie 4 odpowiedzi):",bankAddSuccess:"✅ Dodano {{count}} pytań z banku",bankLimitError:"Nie można dodać {{count}} pytań. Maksimum {{max}}, obecnie masz {{current}}.",addFromLesson:"📂 Z istniejącej lekcji",selectFromBankOrAI:"🗃️ Z banku lub AI",manualEntry:"✏️ Wpisz ręcznie",bankAddMixedSuccess:"Dodano {{count}} pytań. Pominięto {{skipped}} niekompatybilnych pytań.",errorNoQuestionsCompatible:"Brak pytań pasujących do Hand Slash (wymagane co najmniej 2 odpowiedzi)."},game={score:"Wynik",time:"Czas",gameOver:"KONIEC GRY!",finalScore:"Twój wynik",btnAgain:"Zagraj ponownie",btnExit:"Wyjdź",totalQuestions:"Łącznie {{count}}
573 pytań",wrongHint:"Błędna odpowiedź!",correctHint:"DOSKONALE!",correctFeedback:"TAK!!",loading:"Ładowanie kamery...",noCameraMode:"Tryb bez kamery",paused:"Pauza",btnResume:"Kontynuuj",completed:"Ukończono!",questionNum:"Pytanie {{num}}",seconds:"sek.",minimize:"Zmniejsz",fullscreen:"Pełny ekran",answeredCount:"Odpowiedziałeś na {{count}} pytań",lessonBy:"Lekcja autorstwa {{name}}",linkExpired:"Link do udostępniania mógł zostać usunięty lub już nie istnieje",errorWebGL:"Przeglądarka nie obsługuje WebGL. Spróbuj zamknąć inne karty lub użyj Chrome.",errorGeneric:"Nie udało się zainicjować rozpoznawania dłoni. Spróbuj ponownie.",errorHint:'Możesz przełączyć się na tryb "Bez kamery" (myszka/dotyk), aby kontynuować grę.'},instructions={title:"Jak grać w Quiz Przecinanie Owoców",step1Title:"1. Zezwól na dostęp do kamery",step1Desc:'Gra potrzebuje kamery, aby rozpoznawać ruchy Twoich dłoni. Kliknij "Zezwól" w lewym górnym rogu przeglądarki.',step2Title:"2. Przecinaj owoce palcami",step2Desc:"Szybko przesuwaj palcem po ekranie, aby przeciąć owoce z poprawnymi odpowiedziami.",step3Title:"3. Wybierz poprawną odpowiedź",step3Desc:"Przecięcie złej odpowiedzi odejmuje punkty. Bądź szybki i dokładny, aby zdobyć więcej punktów!",tip:"💡 Wskazówka: Poruszaj się szybko i precyzyjnie, aby uzyskać najwyższy wynik!",btnFullscreen:"Pełny ekran",btnReady:"Gotowy do gry!"},demo$1={title:"Demo Quizu Przecinanie Owoców",subtitle:"Zagraj teraz z {{count}} przykładowymi pytaniami!",instructions:"Jak grać:",step1:"1️⃣ Zezwól na dostęp do kamery, gdy zostaniesz o to poproszony",step2:'2️⃣ Użyj palca wskazującego, aby "przecinać" owoce',step3:"3️⃣ Wybieraj poprawne odpowiedzi, aby zdobywać punkty",step4:"4️⃣ Unikaj dotykania błędnych odpowiedzi!",note:"⚠️ Uwaga: Do tej gry potrzebujesz kamery internetowej / webcam",btnStart:"🎮 Zacznij grać",version:"Wersja Demo - {{count}} przykładowych pytań"},plHandSlash={page,list,form:form$1,game,instructions,demo:demo$1},pageTitle$1="🏃 Ćwiczenia ABC",myQuizzes="Moje quizy",loadingQuizzes="Ładowanie...",errorLoading="Błąd podczas ładowania quizów",confirmDelete="Czy na pewno chcesz usunąć ten quiz?",deleteSuccess="Quiz usunięty",emptyQuizzes="Brak quizów",createFirst="Stwórz swój pierwszy quiz",demo={title:"Quiz Inteligentnych Póz - Demo",badge:"Demo",hint:"Wypróbuj demo, aby poznać grę przed stworzeniem własnej lekcji"},questionsCount="{{count}} pytań",play="Prezentuj",edit="Edytuj",assign="Przypisz",upgradeToUnlock="Uaktualnij, aby odblokować to ćwiczenie",lockedTip="Uaktualnij, aby odblokować to ćwiczenie",packageExpired="Subskrypcja wygasła! Przypięte quizy są zablokowane.",extendSubscription="Przedłuż za 30k/rok",pinStatus="Przypięto {{current}}/{{limit}} quizów",createNew$1="Stwórz zwykły",createCameraNew="Stwórz kamerę",cameraBadge="Nowy",createFormTitle="Stwórz nowe ćwiczenie ABC",editFormTitle="Edytuj ćwiczenie ABC",createCameraFormTitle="Stwórz ćwiczenie ABC (tryb kamery)",editCameraFormTitle="Edytuj ćwiczenie ABC (tryb kamery)",titleLabel="Tytuł",titlePlaceholder="Wpisz tytuł quizu...",slideModeLabel="Tryb zmiany slajdów:",slideModeManual="Ręczny (nauczyciel klika Dalej)",slideModeAuto="Automatyczny (czasowy)",autoSecondsLabel="Sekundy na slajd:",addQuestion="Dodaj pytanie",questionLabel="Pytanie {{index}}
573",addAnswer="Dodaj odpowiedź (maks. 3)",saving="Zapisywanie...",savePoseQuiz="Zapisz quiz",errorTitleRequired="Proszę wpisać tytuł",errorNoQuestions="Proszę dodać przynajmniej 1 pytanie",errorEmptyQuestion="Pytanie {{index}} nie może być puste",errorAnswerCount="Pytanie {{index}} musi mieć 2-3 odpowiedzi",errorNoCorrectAnswer="Pytanie {{index}} nie ma zaznaczonej poprawnej odpowiedzi",errorAutoSeconds="Timer automatyczny musi wynosić od 5 do 60 sekund",errorMaxAnswers="Maksymalnie 3 odpowiedzi na pytanie",toastCreateSuccess="✅ Quiz stworzony pomyślnie",toastUpdateSuccess="✅ Quiz zaktualizowany",toastSaveError="Błąd podczas zapisywania: ",toastLimitReached="Osiągnięto limit quizów. Uaktualnij, aby móc tworzyć więcej.",usageCount="Stworzono {{current}}/{{limit}} quizów (wersja próbna)",back="Wstecz",stopAudio="Zatrzymaj dźwięk",playAudio="Odtwórz dźwięk",resume="Wznów",pause="Wstrzymaj",enableBGM="Włącz muzykę w tle",disableBGM="Wyłącz muzykę w tle",exitFullscreen="Wyjdź z pełnego ekranu",enterFullscreen="Pełny ekran",finishedTitle="Zakończono!",backToHome="Powrót do strony głównej",restart="Zrestartuj",questionImageAlt="Obraz pytania",poseAlt="Poza {{char}}",seconds="sekundy",characterSize="🧍 Rozmiar postaci",sizeS="Małe",sizeM="Średnie",sizeL="Duże",sizeXL="Bardzo duże",imageSet="🖼️ Zestaw obrazów",setBody="🏃 Ciało",setHand="✋ Ręka",bgmLabel="🎵 Muzyka w tle",bgmTrack="Utwór {{index}}",questionsReady="✅ {{count}} pytań gotowych",questionsNotReady="❓ Pytania ({{count}}
573)",confirmDeleteAll="Usunąć wszystkie pytania?",deleteAll="🗑️ Usuń wszystko",chooseFromBank="📚 Wybierz z banku lub AI",manualInput="✏️ Wprowadzanie ręczne",questionsList="Lista pytań ({{count}})",imageOnly="(Tylko obraz)",answersCount="{{count}} odpowiedzi",hasImage=" · 🖼️ ma obraz",hasAudio=" · 🔊 ma dźwięk",editQuestionTooltip="Edytuj",removeQuestionTooltip="Usuń",noQuestionsDesc="Brak pytań",addQuestionsHint="Wybierz z banku lub wprowadź ręcznie",pickerModalTitle="Wybierz pytania do ćwiczenia ABC",cameraModeLabel="📷 Tryb kamery",cameraModeDesc="Uczniowie wykonują pozy ciałem, aby wybrać odpowiedzi — kamera wykrywa automatycznie",cameraModeNew="Nowy",cameraReady="Kamera gotowa",cameraStarting="Uruchamianie kamery...",cameraHide="Ukryj kamerę",cameraShow="Pokaż kamerę",cameraDenied="Odmowa dostępu do kamery",cameraError="Nie można otworzyć kamery",cameraDeniedDesc="Proszę przyznać uprawnienia do kamery w ustawieniach przeglądarki i odświeżyć stronę.",cameraErrorDesc="Sprawdź połączenie kamery i spróbuj odświeżyć stronę.",cooldownHint="Powróć do pozycji stojącej, aby kontynuować...",errorNoCompatibleQuestions="Nie znaleziono kompatybilnych pytań.",toastAddedFromLesson="Dodano {{count}} pytań. Pominięto {{skipped}} niekompatybilnych pytań.",toastAddedFromLessonSuccess="Dodano {{count}} pytań z istniejącej lekcji.",errorLibraryMetadataRequired="Proszę wybrać Poziom, Przedmiot i Klasę, aby opublikować w Bibliotece społeczności.",cameraModeTitle="Tryb kamery",cameraModeInstruction="Uczniowie pozują ciałem, aby wybrać odpowiedzi — kamera wykrywa automatycznie",questionFontSize="Rozmiar czcionki pytania",answerFontSize="Rozmiar czcionki odpowiedzi",questionImageSize="Rozmiar obrazu pytania",answerImageSize="Rozmiar obrazu odpowiedzi",sizeXS="Mały",sizeStandard="Standardowy",sizeLG="Duży",sizeXL_text="Bardzo duży",sizeXXL="Maksymalny",customBgmPro="Lub prześlij własny utwór (FullGame):",shuffleMode="🔀 Losuj kolejność pytań i odpowiedzi",shuffleModeDesc="Po włączeniu pytania i odpowiedzi będą losowo mieszane przy każdej grze",aiVoice="🔊 Głos AI",aiVoiceReady="✅ Gotowy",aiVoiceSetup="⚠️ Wymaga konfiguracji",aiVoiceDesc="Automatycznie czytaj pytania za pomocą AI, jeśli nie przesłano dźwięku",btnChooseFromBank="🗃️ Wybierz z banku lub AI",btnFromExisting="📂 Z istniejącej lekcji",lessonPickerTitle="Dodaj pytania z istniejącej lekcji",report="Raport",sessionResults="Wyniki sesji",questionNumber="Pytanie {{number}}",selectedAnswer="Wybrano",close="Zamknij",cameraModeIntro="Tryb kamery — Pozowanie",cameraStep1="Wykrywanie pozycji ciała",cameraStep1Desc="Stań ok. 1m od kamery, zapewnij dobre oświetlenie i widoczność ciała.",cameraStep2="Jedna poza na odpowiedź",cameraStep2Desc="Zobacz nazwę pozy na każdej karcie odpowiedzi i wykonaj odpowiedni gest.",cameraStep3="Przytrzymaj 1,5 s, aby wybrać",cameraStep3Desc="Pasek postępu pojawi się po wykryciu. Przytrzymaj do pełna.",cameraStartHint="{{count}} pytań · Kamera uruchomi się po kliknięciu Start",startGame="Start",defaultAnswer="Odpowiedź {{number}}",btnManual="✏️ Wprowadzanie ręczne",manualLabel="👆 Ręczny",secondsShort="s",shuffleQuestionsMode="🔀 Losuj kolejność pytań",shuffleQuestionsModeDesc="Przy każdej grze pytania pojawiają się w innej kolejności",shuffleAnswersMode="🔀 Losuj kolejność odpowiedzi",shuffleAnswersModeDesc="Przy każdej grze odpowiedzi w pytaniu zmieniają miejsca",plPoseQuiz={pageTitle:pageTitle$1,myQuizzes,loadingQuizzes,errorLoading,confirmDelete,deleteSuccess,emptyQuizzes,createFirst,demo,questionsCount,play,edit,assign,delete:"Usuń",upgradeToUnlock,lockedTip,packageExpired,extendSubscription,pinStatus,createNew:createNew$1,createCameraNew,cameraBadge,createFormTitle,editFormTitle,createCameraFormTitle,editCameraFormTitle,titleLabel,titlePlaceholder,slideModeLabel,slideModeManual,slideModeAuto,autoSecondsLabel,addQuestion,questionLabel,addAnswer,saving,savePoseQuiz,errorTitleRequired,errorNoQuestions,errorEmptyQuestion,errorAnswerCount,errorNoCorrectAnswer,errorAutoSeconds,errorMaxAnswers,toastCreateSuccess,toastUpdateSuccess,toastSaveError,toastLimitReached,usageCount,back,stopAudio,playAudio,resume,pause,enableBGM,disableBGM,exitFullscreen,enterFullscreen,finishedTitle,backToHome,restart,questionImageAlt,poseAlt,seconds,characterSize,sizeS,sizeM,sizeL,sizeXL,imageSet,setBody,setHand,bgmLabel,bgmTrack,questionsReady,questionsNotReady,confirmDeleteAll,deleteAll,chooseFromBank,manualInput,questionsList,imageOnly,answersCount,hasImage,hasAudio,editQuestionTooltip,removeQuestionTooltip,noQuestionsDesc,addQuestionsHint,pickerModalTitle,cameraModeLabel,cameraModeDesc,cameraModeNew,cameraReady,cameraStarting,cameraHide,cameraShow,cameraDenied,cameraError,cameraDeniedDesc,cameraErrorDesc,cooldownHint,errorNoCompatibleQuestions,toastAddedFromLesson,toastAddedFromLessonSuccess,errorLibraryMetadataRequired,cameraModeTitle,cameraModeInstruction,questionFontSize,answerFontSize,questionImageSize,answerImageSize,sizeXS,sizeStandard,sizeLG,sizeXL_text,sizeXXL,customBgmPro,shuffleMode,shuffleModeDesc,aiVoice,aiVoiceReady,aiVoiceSetup,aiVoiceDesc,btnChooseFromBank,btnFromExisting,lessonPickerTitle,report,sessionResults,questionNumber,selectedAnswer,close,cameraModeIntro,cameraStep1,cameraStep1Desc,cameraStep2,cameraStep2Desc,cameraStep3,cameraStep3Desc,cameraStartHint,startGame,defaultAnswer,btnManual,manualLabel,secondsShort,shuffleQuestionsMode,shuffleQuestionsModeDesc,shuffleAnswersMode,shuffleAnswersModeDesc},modal={title:"Udostępnij nauczycielowi: {{title}}",audienceBadge:"Dla innych nauczycieli — nie dla uczniów",howItWorksTitle:"Jak to działa",step1:"Skopiuj poniższy link i wyślij koledze nauczycielowi",step2:"Nauczyciel odbierający link loguje się do Innowacyjny Nauczyciel i otwiera link",step3:'Klika "Zapisz na koncie" — materiał zostanie skopiowany na jego konto',generating:"Generowanie linku...",copySuccess:"✓ Skopiowano!",copyLink:"Kopiuj link do udostępniania",revokeLink:"Cofnij udostępnianie",revoking:"Cofanie...",note:"Udostępniony materiał zawsze odpowiada najnowszej wersji: po edycji wystarczy ponownie otworzyć to okno, a link zaktualizuje się sam — nie trzeba tworzyć nowego.",revokeNote:"Cofnięcie wyłącza link: nauczyciele, którzy już zapisali materiał, zachowają go, ale nie pobiorą nowszej wersji."},claim={loading:"Ładowanie...",notLoggedIn:{title:"Nie jesteś zalogowany",description:"Zaloguj się najpierw do <strong>Innowacyjny Nauczyciel</strong>, a następnie wklej lub otwórz ten link ponownie.",button:"Zaloguj się teraz"},notFound:{title:"Nieprawidłowy link",description:"Ten link nie istnieje lub został wycofany.",backLink:"Powrót do strony głównej"},expired:{title:"Link wygasł",description:"Link do udostępniania jest ważny tylko przez 30 dni. Poproś nauczyciela o wygenerowanie nowego linku.",backLink:"Powrót do strony głównej"}
573,alreadyClaimed:{title:"Masz już ten materiał",description:"Materiał znajduje się już na Twojej liście.",button:"Zobacz listę materiałów",reclaimButton:"Pobierz najnowszą wersję",reclaiming:"Pobieranie...",reclaimNote:"Użyj, jeśli nauczyciel udostępniający zmienił materiał albo jeśli usunąłeś go i chcesz odzyskać. Twoja kopia zostanie nadpisana — bez duplikatu i bez dodatkowego limitu."},success:{title:"Zapisano pomyślnie!",description:"Powrót do listy materiałów...",updatedTitle:"Materiał zaktualizowany!",updatedDescription:"Twoja kopia została zastąpiona najnowszą wersją. Powrót do listy materiałów..."},preview:{defaultTitle:"Udostępniony materiał",sharedBy:"Udostępnione przez: <strong>{{name}}</strong>",defaultName:"Nauczyciel",questions_one:"📝 1 pytanie",questions_other:"📝 {{count}} pytań",timeLimit:"⏱ {{count}}s/pytanie",submitButton:"Zapisz na koncie",submitting:"Zapisywanie...",footerNote:"Materiał zostanie skopiowany na Twoje konto i doliczony do limitu."}},errors={createFailed:"Nie udało się utworzyć linku. Spróbuj ponownie.",revokeFailed:"Nie udało się wycofać linku.",generalError:"Wystąpił błąd. Spróbuj ponownie."}
573,plTeacherShare={modal,claim,errors},pageTitle="🎒 Zbieracz Gwiazd",myGames="Moje Gry",createNew="Utwórz Grę",games="Gry",create="Nowa",guide="Poradnik",guideDesc="Gra dla 2 drużyn używająca detekcji dłoni. Unieś 1/2/3/4 palce, aby wybrać odpowiedź A/B/C/D.",myStarBags={title:"Gry Zbieracz Gwiazd ({{count}})",pinBanner:"Przypnij gry, aby mieć do nich dostęp po wygaśnięciu subskrypcji",pinnedCount:"({{pinned}}/{{limit}} przypiętych)",expired:"⚠️ Subskrypcja wygasła!",renew:"Odnów",demoTitle:"Zbieracz Gwiazd - Wersja Demo",demoBadge:"Demo",demoDesc:"Wypróbuj zanim stworzysz własną grę",playTest:"Zagraj",createFirst:"Utwórz pierwszą grę",questionCount:"{{count}} pytań",starCount:"⭐ {{stars}} gwiazdek",timeSec:"{{time}}s",pinTip:"Przypnij, aby zachować",edit:"Edytuj",assign:"Zadaj",share:"Udostępnij",delete:"Usuń",prev:"◀ Poprz.",page:"Strona {{page}}",next:"Nast. ▶",loading:"Ładowanie...",loadError:"Nie udało się załadować listy gier",deleteConfirm:"Czy na pewno chcesz usunąć tę grę?",deleted:"Gra została usunięta",deleteError:"Błąd podczas usuwania gry",pinLimit:"Osiągnięto limit przypięć ({{limit}} gier)",unpinned:"Odpięto grę",pinned:"Przypięto grę"},form={editTitle:"Edytuj Grę",createTitle:"Utwórz Grę",gameName:"Nazwa gry",gameNamePlaceholder:"Np: Lekcja gramatyki",config:"Konfiguracja gry",timeLimit:"Limit czasu",totalStars:"Liczba gwiazd w worku (1–50)",freezeTime:"Zamrożenie przy błędzie",sec:"{{time}} sekund",min:"{{time}} minut",team1:"Nazwa Drużyny A",team1Placeholder:"Lewy gracz",team2:"Nazwa Drużyny B",team2Placeholder:"Prawy gracz",bgm:"Muzyka w tle",bgmDefault:"Domyślna",bgmTrack:"Utwór {{num}}",bgmCustom:"Własna:",questions:"Pytania ({{count}})",clearAll:"Wyczyść wszystko",selectBank:"Wybierz z Bazy/AI",selectLesson:"📂 Z istniejącej lekcji",manual:"Wprowadź ręcznie",questionWarning:"Liczba pytań musi być równa liczbie gwiazdek ({{count}}). Każde pytanie wymaga dokładnie 4 odpowiedzi A/B/C/D (odpowiadających 1/2/3/4 palcom).",qFontSize:"Rozmiar czcionki pytań:",aFontSize:"Rozmiar czcionki odpowiedzi:",fsSmall:"Małe",fsMedium:"Średnie",fsLarge:"Duże",fsXLarge:"Bardzo duże",fsXXLarge:"Ogromne",fsNote:"Dotyczy domyślnych pytań",qList:"Lista Pytań",aCount:"{{count}} odpowiedzi",noQuestions:"Brak pytań",addQuestionsHint:"Dodaj pytania z bazy lub wprowadź ręcznie",saving:"Zapisywanie...",save:"Zapisz Grę",emptyName:"Proszę podać nazwę gry",invalidQuestions:"Liczba pytań ({{count}}) musi być równa liczbie gwiazdek w worku ({{totalStars}})",publishError:"Wybierz poziom, przedmiot i klasę, aby opublikować w Bibliotece Społeczności",saveSuccessEdit:"Zaktualizowano grę!",saveSuccessCreate:"Utworzono grę!",snapshotLarge:"Gra jest zbyt duża, aby opublikować w Bibliotece Społeczności. Została zapisana lokalnie.",limitReached:"Osiągnięto limit tworzenia gier",errorPrefix:"Błąd: {{message}}",deleteConfirmQ:"Usunąć wszystkie pytania?",deletedAllQ:"Wszystkie pytania zostały usunięte",deletedQ:"Usunięto pytanie {{num}}",qUpdated:"Zaktualizowano pytanie",qAdded:"Dodano {{count}} pytań (łącznie: {{total}})",starLimitReached:"Osiągnięto limit {{totalStars}} pytań. Nie można dodać więcej.",starLimitAdded:"Dodano tylko {{added}} pytań z powodu limitu {{totalStars}} gwiazdek",noQuestionAdded:"Nie udało się dodać żadnych pytań (pominięto {{skipped}})",lessonAdded:'Dodano {{added}} pytań z "{{title}}" (pominięto {{skipped}})'},player={loading:"Ładowanie...",finger1:"1 palec",finger2:"2 palce",finger3:"3 palce",finger4:"4 palce",freezeLabel:"sekund zamrożenia",end:"🎉 Zakończono!",draw:"🤝 Remis!",winnerLabel:"Zwycięzca",totalBag:"W worku: {{stars}} gwiazdek",viewReport:"📋 Zobacz Raport",exit:"Wyjście",reportTitle:"📋 Raport Wyników",winBadge:"🏆 {{name}} wygrywa",close:"✕ Zamknij",teamStats:"⭐ {{name}} ({{stars}} gwiazdek)",noAnswers:"Brak odpowiedzi",qNum:"Pytanie {{num}}",chosen:"Wybrano:",image:"(obraz)",correctHint:"Prawidłowa odpowiedź: {{answers}}",notFound:"Nie znaleziono gry",backHome:"Wróć do strony głównej"},plStarBagGame={pageTitle,myGames,createNew,games,create,guide,guideDe
573sc,myStarBags,form,player},savedLang=localStorage.getItem("lang")||"vi";instance.use(initReactI18next).init({resources:{vi:{common:viCommon,landing:viLanding,home:viHome,login:viLogin,tugOfWar:viTugOfWar,interactiveVideo:viInteractiveVideo,interactiveImage:viInteractiveImage,panorama:viPanorama,headTiltQuiz:viHeadTiltQuiz,quizGame:viQuizGame,wheelQuiz:viWheelQuiz,library:viLibrary,companion:viCompanion,handSlash:viHandSlash,flipPuzzle:viFlipPuzzle,pacedQuiz:viPacedQuiz,crossword:viCrossword,noiseTracker:viNoiseTracker,poseQuiz:viPoseQuiz,questionBank:viQuestionBank,journey:viJourney,turnBasedGame:viTurnBasedGame,assignment:viAssignment,teacherShare:viTeacherShare,versusGame:viVersusGame,paperMode:viPaperMode,faceRandom:viFaceRandom,pricing:viPricing,legal:viLegal,about:viAbout,starBagGame:viStarBagGame,htmlEmbedGame:viHtmlEmbedGame,aiTools:viAiTools,scavengerHunt:viScavengerHunt,flashcard:viFlashcard,flyingWords:viFlyingWords,edutechExtensions:viEdutechExtensions},en:{common:enCommon,landing:enLanding,home:enHome,login:enLogin,tugOfWar:enTugOfWar,interactiveVideo:enInteractiveVideo,interactiveImage:enInteractiveImage,panorama:enPanorama,headTiltQuiz:enHeadTiltQuiz,quizGame:enQuizGame,wheelQuiz:enWheelQuiz,library:enLibrary,companion:enCompanion,handSlash:enHandSlash,flipPuzzle:enFlipPuzzle,pacedQuiz:enPacedQuiz,crossword:enCrossword,noiseTracker:enNoiseTracker,poseQuiz:enPoseQuiz,questionBank:enQuestionBank,journey:enJourney,turnBasedGame:enTurnBasedGame,assignment:enAssignment,teacherShare:enTeacherShare,versusGame:enVersusGame,paperMode:enPaperMode,faceRandom:enFaceRandom,pricing:enPricing,legal:enLegal,about:enAbout,starBagGame:enStarBagGame,htmlEmbedGame:enHtmlEmbedGame,aiTools:enAiTools,scavengerHunt:enScavengerHunt,flashcard:enFlashcard,flyingWords:enFlyingWords,edutechExtensions:enEdutechExtensions},pl:{common:plCommon,landing:plLanding,home:plHome,pricing:plPricing,legal:plLegal,about:plAbout,login:plLogin,tugOfWar:plTugOfWar,assignment:plAssignment,headTiltQuiz:plHeadTiltQuiz,questionBank:plQuestionBank,library:plLibrary,handSlash:plHandSlash,turnBasedGame:plTurnBasedGame,poseQuiz:plPoseQuiz,teacherShare:plTeacherShare,starBagGame:plStarBagGame,htmlEmbedGame:plHtmlEmbedGame}},lng:savedLang,fallbackLng:"vi",ns:["common","landing","home","login","tugOfWar","interactiveVideo","interactiveImage","panorama","headTiltQuiz","quizGame","wheelQuiz","library","companion","handSlash","flipPuzzle","pacedQuiz","crossword","noiseTracker","poseQuiz","questionBank","journey","turnBasedGame","assignment","teacherShare","versusGame","paperMode","faceRandom","pricing","legal","about","starBagGame","htmlEmbedGame","aiTools","scavengerHunt","flashcard","flyingWords","edutechExtensions"],defaultNS:"common",interpolation:{escapeValue:!1}});instance.on("languageChanged",o=>{localStorage.setItem("lang",o)});window.addEventListener("vite:preloadError",o=>{sessionStorage.getItem("chunk_reload")||(o.preventDefault(),sessionStorage.setItem("chunk_reload","1"),window.location.reload())});sessionStorage.removeItem("chunk_reload");ReactDOM$1.createRoot(document.getElementById("root")).render(jsxRuntimeExports.jsx(React$1.StrictMode,{children:jsxRuntimeExports.jsx(ChunkErrorBoundary,{children:jsxRuntimeExports.jsx(App,{})})}));export{TableHead as $,AnimatePresence as A,Button as B,CircularProgress as C,Dialog as D,instance as E,seoConfig as F,getStructuredData as G,Header as H,IconButton as I,Menu as J,MenuItem as K,List as L,ManualTransferAccordion as M,Chip as N,Link$1 as O,PAYMENT_CONFIG as P,HomeIcon as Q,useToast as R,SeoHelmet as S,Typography as T,UpgradeModal as U,useLocation as V,utils as W,writeSync as X,CloseIcon as Y,ContentCopyIcon as Z,Table as _,useAuth as a,useEventCallback as a$,TableRow as a0,TableCell as a1,TableBody as a2,ExpandLessIcon as a3,ExpandMoreIcon as a4,AssignIcon as a5,createSvgIcon as a6,CheckCircle as a7,generateUtilityClass as a8,generateUtilityClasses as a9,lazyRetry as aA,capitalize as aB,createTheme$1 as aC,useFormControl as aD,FormControlContext as aE,realtimeDb as aF,useControlled as aG,ButtonBase as aH,rootShouldForwardProp as aI,formControlState as aJ,mergeSlotProps$1 as aK,createSimplePaletteValueFilter as aL,createStyled as aM,useTheme$2 as aN,getThemeProps$1 as aO,useRtl as aP,css as aQ,keyframes$1 as aR,getDividerUtilityClass as aS,HomeTabsNav as aT,ownerDocument as aU,Portal as aV,useForkRef as aW,useEnhancedEffect as aX,useSlotProps as aY,useTimeout as aZ,useId as a_,useDefaultProps as aa,useSlot as ab,clsx as ac,composeClasses as ad,styled as ae,memoTheme as af,combineSchemas as ag,getBreadcrumb as ah,LandingHeader as ai,audioManager as aj,deriveFeatureStatus as ak,useSessionGuard as al,BaseModal as am,ListItemIcon as an,storage as ao,checkCanUseExtendedLink as ap,isDesktopDevice as aq,isInAppBrowser as ar,Form
573Control as as,Select as at,InputBase as au,markProjectSearchDirty as av,incrementInteractiveVideoCount as aw,ListItem as ax,katexToHTML as ay,renderWithKaTeX as az,useSubscription as b,incrementPanoramaCount as b$,Timeout as b0,getReactElementRef as b1,Grow as b2,isFocusVisible as b3,resolveProps as b4,generateDefaultLessonTitle as b5,TRIAL_LIMITS as b6,updateFeatureCounter as b7,checkCanUseFeature as b8,getPinnedItems as b9,incrementCrosswordPuzzleCount as bA,checkCanCreateCrosswordPuzzle as bB,incrementQuizGameCount as bC,incrementFlipPuzzleCount as bD,checkCanCreateFlipPuzzle as bE,createChainedFunction as bF,readSync as bG,auth as bH,Popover as bI,Star as bJ,debounce as bK,ownerWindow as bL,useConstant as bM,motionValue as bN,MotionConfigContext as bO,useIsomorphicLayoutEffect as bP,cancelFrame as bQ,frame as bR,interpolate as bS,collectMotionValues as bT,mixNumber$1 as bU,moveItem as bV,isMotionValue as bW,clamp$1 as bX,extractEventHandlers as bY,isHostComponent as bZ,slotShouldForwardProp as b_,autoPinRecentItems as ba,togglePinItem as bb,Collapse as bc,InputLabel as bd,incrementScavengerHuntCount as be,checkCanCreateScavengerHunt as bf,incrementKnowledgeTrainCount as bg,checkCanCreateKnowledgeTrain as bh,incrementMindMapCount as bi,checkCanCreateMindMap as bj,incrementFlashcardCount as bk,checkCanCreateFlashcard as bl,incrementHtmlEmbedGameCount as bm,checkCanCreateHtmlEmbedGame as bn,incrementMinesweeperGameCount as bo,checkCanCreateMinesweeperGame as bp,incrementTugOfWarCount as bq,checkCanCreateTugOfWar as br,incrementPacedQuizCount as bs,checkCanCreatePacedQuiz as bt,incrementPoseQuizCount as bu,checkCanCreatePoseQuiz as bv,incrementHeadTiltQuizCount as bw,checkCanCreateHeadTiltQuiz as bx,incrementInteractiveImageCount as by,checkCanCreateInteractiveImage as bz,useTranslation as c,extendSxProp$1 as c0,isMuiElement as c1,CheckIcon as c2,MenuList as c3,FormLabel as c4,useMindMapSession as c5,Lottie as c6,useEffectSystem as c7,EFFECTS as c8,incrementStarBagGameCount as c9,emphasize as ca,LibraryBooksIcon as cb,checkCanCreateJourney as cc,incrementJourneyCount as cd,setRef as ce,ClearIcon as cf,ArrowDropDownIcon as cg,filledInputClasses as ch,inputBaseClasses as ci,outlinedInputClasses as cj,inputClasses as ck,Drawer as cl,GroupsIcon as cm,writeFileSync as cn,Link as co,Stepper as cp,Step as cq,StepLabel as cr,Routes as cs,Route as ct,Navigate as cu,Slide as cv,config$1 as cw,xlsx as cx,DialogTitle as d,DialogContent as e,DialogActions as f,HelpVideoModal as g,getAIToolsAccess as h,getUserSubscription as i,AI_TOOLS_MAP as j,db as k,app as l,motion as m,useNavigate as n,Trans as o,Box as p,Alert as q,Paper as r,ListItemButton as s,ListItemText as t,useParams as u,TextField as v,usePaymentQr as w,useSearchParams as x,useTheme as y,useMediaQuery as z};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.