22 lines
83 KiB
JavaScript
22 lines
83 KiB
JavaScript
"use strict";
|
|
/*
|
|
* ATTENTION: An "eval-source-map" devtool has been used.
|
|
* This devtool is neither made for production nor for readable output files.
|
|
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
|
|
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
|
|
* or disable the default devtool with "devtool: false".
|
|
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
|
|
*/
|
|
self["webpackHotUpdate_N_E"]("app/flashcards/page",{
|
|
|
|
/***/ "(app-pages-browser)/./app/flashcards/page.tsx":
|
|
/*!*********************************!*\
|
|
!*** ./app/flashcards/page.tsx ***!
|
|
\*********************************/
|
|
/***/ ((module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ FlashcardsPage)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/client/app-dir/link.js\");\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(next_link__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _components_ProtectedRoute__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/ProtectedRoute */ \"(app-pages-browser)/./components/ProtectedRoute.tsx\");\n/* harmony import */ var _lib_services_flashcards__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/lib/services/flashcards */ \"(app-pages-browser)/./lib/services/flashcards.ts\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\nfunction FlashcardsContent() {\n _s();\n const [activeTab, setActiveTab] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('my-cards');\n const [selectedSet, setSelectedSet] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [searchTerm, setSearchTerm] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('');\n // Real data from API\n const [cardSets, setCardSets] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [flashcards, setFlashcards] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(true);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n // Form states\n const [showForm, setShowForm] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [editingCard, setEditingCard] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n // Load data from API\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"FlashcardsContent.useEffect\": ()=>{\n loadCardSets();\n loadFlashcards();\n }\n }[\"FlashcardsContent.useEffect\"], []);\n const loadCardSets = async ()=>{\n try {\n const result = await _lib_services_flashcards__WEBPACK_IMPORTED_MODULE_4__.flashcardsService.getCardSets();\n if (result.success && result.data) {\n setCardSets(result.data.sets);\n } else {\n setError(result.error || 'Failed to load card sets');\n }\n } catch (err) {\n setError('Failed to load card sets');\n }\n };\n const loadFlashcards = async ()=>{\n try {\n setLoading(true);\n const result = await _lib_services_flashcards__WEBPACK_IMPORTED_MODULE_4__.flashcardsService.getFlashcards(selectedSet || undefined);\n if (result.success && result.data) {\n setFlashcards(result.data.flashcards);\n } else {\n setError(result.error || 'Failed to load flashcards');\n }\n } catch (err) {\n setError('Failed to load flashcards');\n } finally{\n setLoading(false);\n }\n };\n // Reload flashcards when selectedSet changes\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"FlashcardsContent.useEffect\": ()=>{\n loadFlashcards();\n }\n }[\"FlashcardsContent.useEffect\"], [\n selectedSet\n ]);\n // Handle form operations\n const handleFormSuccess = ()=>{\n setShowForm(false);\n setEditingCard(null);\n loadFlashcards();\n loadCardSets();\n };\n const handleEdit = (card)=>{\n setEditingCard(card);\n setShowForm(true);\n };\n const handleDelete = async (card)=>{\n if (!confirm(\"確定要刪除詞卡「\".concat(card.word, \"」嗎?\"))) {\n return;\n }\n try {\n const result = await _lib_services_flashcards__WEBPACK_IMPORTED_MODULE_4__.flashcardsService.deleteFlashcard(card.id);\n if (result.success) {\n loadFlashcards();\n loadCardSets();\n } else {\n alert(result.error || '刪除失敗');\n }\n } catch (err) {\n alert('刪除失敗,請重試');\n }\n };\n // Filter data\n const filteredSets = cardSets.filter((set)=>set.name.toLowerCase().includes(searchTerm.toLowerCase()) || set.description.toLowerCase().includes(searchTerm.toLowerCase()));\n const filteredCards = flashcards.filter((card)=>{\n if (searchTerm) {\n var _card_word, _card_translation;\n return ((_card_word = card.word) === null || _card_word === void 0 ? void 0 : _card_word.toLowerCase().includes(searchTerm.toLowerCase())) || ((_card_translation = card.translation) === null || _card_translation === void 0 ? void 0 : _card_translation.toLowerCase().includes(searchTerm.toLowerCase()));\n }\n return true;\n });\n // Add loading and error states\n if (loading) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"min-h-screen bg-gray-50 flex items-center justify-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-lg\",\n children: \"載入中...\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 113,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 112,\n columnNumber: 7\n }, this);\n }\n if (error) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"min-h-screen bg-gray-50 flex items-center justify-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-red-600\",\n children: error\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 121,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 120,\n columnNumber: 7\n }, this);\n }\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"min-h-screen bg-gray-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white border-b border-gray-200\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center py-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"text-3xl font-bold text-gray-900\",\n children: \"詞卡管理\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 133,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-sm text-gray-500\",\n children: \"管理你的詞卡集合\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 134,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 132,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_2___default()), {\n href: \"/generate\",\n className: \"bg-primary text-white px-4 py-2 rounded-lg hover:bg-primary/90 transition-colors\",\n children: \"AI 生成詞卡\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 137,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 136,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 131,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex space-x-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setActiveTab('my-cards'),\n className: \"pb-4 px-1 border-b-2 font-medium text-sm \".concat(activeTab === 'my-cards' ? 'border-primary text-primary' : 'border-transparent text-gray-500 hover:text-gray-700 hover:border-gray-300'),\n children: [\n \"我的卡組 (\",\n filteredSets.length,\n \")\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 148,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setActiveTab('all-cards'),\n className: \"pb-4 px-1 border-b-2 font-medium text-sm \".concat(activeTab === 'all-cards' ? 'border-primary text-primary' : 'border-transparent text-gray-500 hover:text-gray-700 hover:border-gray-300'),\n children: [\n \"所有詞卡 (\",\n filteredCards.length,\n \")\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 158,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 147,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 130,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 129,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n value: searchTerm,\n onChange: (e)=>setSearchTerm(e.target.value),\n placeholder: \"搜尋詞卡或卡組...\",\n className: \"w-full pl-10 pr-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary focus:border-transparent\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 177,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"h-5 w-5 text-gray-400\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 186,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 185,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 184,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 176,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 175,\n columnNumber: 9\n }, this),\n activeTab === 'my-cards' && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center mb-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"text-lg font-semibold\",\n children: [\n \"共 \",\n filteredSets.length,\n \" 個卡組\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 196,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 195,\n columnNumber: 13\n }, this),\n filteredSets.length === 0 ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center py-12\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-gray-500 mb-4\",\n children: \"還沒有詞卡集合\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 201,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_2___default()), {\n href: \"/generate\",\n className: \"bg-primary text-white px-4 py-2 rounded-lg hover:bg-primary/90 transition-colors\",\n children: \"創建第一個卡組\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 202,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 200,\n columnNumber: 15\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4\",\n children: filteredSets.map((set)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border rounded-lg hover:shadow-lg transition-shadow cursor-pointer\",\n onClick: ()=>{\n setSelectedSet(set.id);\n setActiveTab('all-cards');\n },\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"\".concat(set.color, \" text-white p-4 rounded-t-lg\"),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h4\", {\n className: \"font-semibold text-lg\",\n children: set.name\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 221,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm opacity-90\",\n children: set.description\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 222,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 220,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-4 bg-white rounded-b-lg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center text-sm text-gray-600\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: [\n set.cardCount,\n \" 張詞卡\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 226,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: [\n \"進度: \",\n set.progress,\n \"%\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 227,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 225,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 224,\n columnNumber: 21\n }, this)\n ]\n }, set.id, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 212,\n columnNumber: 19\n }, this))\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 210,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 194,\n columnNumber: 11\n }, this),\n activeTab === 'all-cards' && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between items-center mb-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"text-lg font-semibold\",\n children: [\n \"共 \",\n filteredCards.length,\n \" 個詞卡\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 241,\n columnNumber: 15\n }, this),\n selectedSet && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setSelectedSet(null),\n className: \"text-sm text-gray-600 hover:text-gray-900\",\n children: \"顯示所有詞卡\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 243,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 240,\n columnNumber: 13\n }, this),\n filteredCards.length === 0 ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center py-12\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-gray-500 mb-4\",\n children: \"沒有找到詞卡\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 254,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_2___default()), {\n href: \"/generate\",\n className: \"bg-primary text-white px-4 py-2 rounded-lg hover:bg-primary/90 transition-colors\",\n children: \"創建新詞卡\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 255,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 253,\n columnNumber: 15\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-3\",\n children: filteredCards.map((card)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white border rounded-lg p-4 hover:shadow-md transition-shadow\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h4\", {\n className: \"font-semibold text-lg\",\n children: card.word || '未設定'\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 271,\n columnNumber: 31\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm text-gray-500\",\n children: card.partOfSpeech\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 272,\n columnNumber: 31\n }, this),\n card.pronunciation && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm text-blue-600\",\n children: card.pronunciation\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 274,\n columnNumber: 33\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 270,\n columnNumber: 29\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-gray-700 mt-1\",\n children: card.translation || '未設定'\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 277,\n columnNumber: 29\n }, this),\n card.example && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-gray-600 mt-2 italic\",\n children: [\n \"例句: \",\n card.example\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 279,\n columnNumber: 31\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-4 mt-2 text-xs text-gray-500\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: [\n \"卡組: \",\n card.cardSet.name\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 282,\n columnNumber: 31\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: [\n \"熟練度: \",\n card.masteryLevel,\n \"/5\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 283,\n columnNumber: 31\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: [\n \"複習: \",\n card.timesReviewed,\n \" 次\"\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 284,\n columnNumber: 31\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: [\n \"下次複習: \",\n new Date(card.nextReviewDate).toLocaleDateString()\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 285,\n columnNumber: 31\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 281,\n columnNumber: 29\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 269,\n columnNumber: 27\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 268,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 267,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n // TODO: 實作編輯功能\n console.log('編輯詞卡:', card.id);\n },\n className: \"text-blue-600 hover:text-blue-800 text-sm\",\n children: \"編輯\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 291,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>{\n // TODO: 實作刪除功能\n console.log('刪除詞卡:', card.id);\n },\n className: \"text-red-600 hover:text-red-800 text-sm\",\n children: \"刪除\"\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 300,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 290,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 266,\n columnNumber: 21\n }, this)\n }, card.id, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 265,\n columnNumber: 19\n }, this))\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 263,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 239,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 173,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 127,\n columnNumber: 5\n }, this);\n}\n_s(FlashcardsContent, \"oUDLR7NnDUw5gAKYX5V6Mc+Z6Uk=\");\n_c = FlashcardsContent;\nfunction FlashcardsPage() {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ProtectedRoute__WEBPACK_IMPORTED_MODULE_3__.ProtectedRoute, {\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(FlashcardsContent, {}, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 325,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/Users/jettcheng1018/code/dramaling-vocab-learning/frontend/app/flashcards/page.tsx\",\n lineNumber: 324,\n columnNumber: 5\n }, this);\n}\n_c1 = FlashcardsPage;\nvar _c, _c1;\n$RefreshReg$(_c, \"FlashcardsContent\");\n$RefreshReg$(_c1, \"FlashcardsPage\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9mbGFzaGNhcmRzL3BhZ2UudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFFMkM7QUFDZjtBQUNnQztBQUUrQjtBQUUzRixTQUFTSzs7SUFDUCxNQUFNLENBQUNDLFdBQVdDLGFBQWEsR0FBR1AsK0NBQVFBLENBQUM7SUFDM0MsTUFBTSxDQUFDUSxhQUFhQyxlQUFlLEdBQUdULCtDQUFRQSxDQUFnQjtJQUM5RCxNQUFNLENBQUNVLFlBQVlDLGNBQWMsR0FBR1gsK0NBQVFBLENBQUM7SUFFN0MscUJBQXFCO0lBQ3JCLE1BQU0sQ0FBQ1ksVUFBVUMsWUFBWSxHQUFHYiwrQ0FBUUEsQ0FBWSxFQUFFO0lBQ3RELE1BQU0sQ0FBQ2MsWUFBWUMsY0FBYyxHQUFHZiwrQ0FBUUEsQ0FBYyxFQUFFO0lBQzVELE1BQU0sQ0FBQ2dCLFNBQVNDLFdBQVcsR0FBR2pCLCtDQUFRQSxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQ2tCLE9BQU9DLFNBQVMsR0FBR25CLCtDQUFRQSxDQUFnQjtJQUVsRCxjQUFjO0lBQ2QsTUFBTSxDQUFDb0IsVUFBVUMsWUFBWSxHQUFHckIsK0NBQVFBLENBQUM7SUFDekMsTUFBTSxDQUFDc0IsYUFBYUMsZUFBZSxHQUFHdkIsK0NBQVFBLENBQW1CO0lBRWpFLHFCQUFxQjtJQUNyQkMsZ0RBQVNBO3VDQUFDO1lBQ1J1QjtZQUNBQztRQUNGO3NDQUFHLEVBQUU7SUFFTCxNQUFNRCxlQUFlO1FBQ25CLElBQUk7WUFDRixNQUFNRSxTQUFTLE1BQU10Qix1RUFBaUJBLENBQUN1QixXQUFXO1lBQ2xELElBQUlELE9BQU9FLE9BQU8sSUFBSUYsT0FBT0csSUFBSSxFQUFFO2dCQUNqQ2hCLFlBQVlhLE9BQU9HLElBQUksQ0FBQ0MsSUFBSTtZQUM5QixPQUFPO2dCQUNMWCxTQUFTTyxPQUFPUixLQUFLLElBQUk7WUFDM0I7UUFDRixFQUFFLE9BQU9hLEtBQUs7WUFDWlosU0FBUztRQUNYO0lBQ0Y7SUFFQSxNQUFNTSxp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LENBQUMsU0FBU3pELEtBQUtLLEVBQUU7NERBQzlCOzREQUNBWSxXQUFVO3NFQUNYOzs7Ozs7Ozs7Ozs7Ozs7Ozs7dUNBekNHakIsS0FBS0ssRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXVEbkM7R0F2VFNwQztLQUFBQTtBQXlUTSxTQUFTeUY7SUFDdEIscUJBQ0UsOERBQUMzRixzRUFBY0E7a0JBQ2IsNEVBQUNFOzs7Ozs7Ozs7O0FBR1A7TUFOd0J5RiIsInNvdXJjZXMiOlsiL1VzZXJzL2pldHRjaGVuZzEwMTgvY29kZS9kcmFtYWxpbmctdm9jYWItbGVhcm5pbmcvZnJvbnRlbmQvYXBwL2ZsYXNoY2FyZHMvcGFnZS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCdcbmltcG9ydCBMaW5rIGZyb20gJ25leHQvbGluaydcbmltcG9ydCB7IFByb3RlY3RlZFJvdXRlIH0gZnJvbSAnQC9jb21wb25lbnRzL1Byb3RlY3RlZFJvdXRlJ1xuaW1wb3J0IHsgRmxhc2hjYXJkRm9ybSB9IGZyb20gJ0AvY29tcG9uZW50cy9GbGFzaGNhcmRGb3JtJ1xuaW1wb3J0IHsgZmxhc2hjYXJkc1NlcnZpY2UsIHR5cGUgQ2FyZFNldCwgdHlwZSBGbGFzaGNhcmQgfSBmcm9tICdAL2xpYi9zZXJ2aWNlcy9mbGFzaGNhcmRzJ1xuXG5mdW5jdGlvbiBGbGFzaGNhcmRzQ29udGVudCgpIHtcbiAgY29uc3QgW2FjdGl2ZVRhYiwgc2V0QWN0aXZlVGFiXSA9IHVzZVN0YXRlKCdteS1jYXJkcycpXG4gIGNvbnN0IFtzZWxlY3RlZFNldCwgc2V0U2VsZWN0ZWRTZXRdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW3NlYXJjaFRlcm0sIHNldFNlYXJjaFRlcm1dID0gdXNlU3RhdGUoJycpXG5cbiAgLy8gUmVhbCBkYXRhIGZyb20gQVBJXG4gIGNvbnN0IFtjYXJkU2V0cywgc2V0Q2FyZFNldHNdID0gdXNlU3RhdGU8Q2FyZFNldFtdPihbXSlcbiAgY29uc3QgW2ZsYXNoY2FyZHMsIHNldEZsYXNoY2FyZHNdID0gdXNlU3RhdGU8Rmxhc2hjYXJkW10+KFtdKVxuICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZSh0cnVlKVxuICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG5cbiAgLy8gRm9ybSBzdGF0ZXNcbiAgY29uc3QgW3Nob3dGb3JtLCBzZXRTaG93Rm9ybV0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2VkaXRpbmdDYXJkLCBzZXRFZGl0aW5nQ2FyZF0gPSB1c2VTdGF0ZTxGbGFzaGNhcmQgfCBudWxsPihudWxsKVxuXG4gIC8vIExvYWQgZGF0YSBmcm9tIEFQSVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGxvYWRDYXJkU2V0cygpXG4gICAgbG9hZEZsYXNoY2FyZHMoKVxuICB9LCBbXSlcblxuICBjb25zdCBsb2FkQ2FyZFNldHMgPSBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZsYXNoY2FyZHNTZXJ2aWNlLmdldENhcmRTZXRzKClcbiAgICAgIGlmIChyZXN1bHQuc3VjY2VzcyAmJiByZXN1bHQuZGF0YSkge1xuICAgICAgICBzZXRDYXJkU2V0cyhyZXN1bHQuZGF0YS5zZXRzKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0RXJyb3IocmVzdWx0LmVycm9yIHx8ICdGYWlsZWQgdG8gbG9hZCBjYXJkIHNldHMnKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgc2V0RXJyb3IoJ0ZhaWxlZCB0byBsb2FkIGNhcmQgc2V0cycpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgbG9hZEZsYXNoY2FyZHMgPSBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHNldExvYWRpbmcodHJ1ZSlcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZsYXNoY2FyZHNTZXJ2aWNlLmdldEZsYXNoY2FyZHMoc2VsZWN0ZWRTZXQgfHwgdW5kZWZpbmVkKVxuICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzICYmIHJlc3VsdC5kYXRhKSB7XG4gICAgICAgIHNldEZsYXNoY2FyZHMocmVzdWx0LmRhdGEuZmxhc2hjYXJkcylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldEVycm9yKHJlc3VsdC5lcnJvciB8fCAnRmFpbGVkIHRvIGxvYWQgZmxhc2hjYXJkcycpXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBzZXRFcnJvcignRmFpbGVkIHRvIGxvYWQgZmxhc2hjYXJkcycpXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgfVxuICB9XG5cbiAgLy8gUmVsb2FkIGZsYXNoY2FyZHMgd2hlbiBzZWxlY3RlZFNldCBjaGFuZ2VzXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgbG9hZEZsYXNoY2FyZHMoKVxuICB9LCBbc2VsZWN0ZWRTZXRdKVxuXG4gIC8vIEhhbmRsZSBmb3JtIG9wZXJhdGlvbnNcbiAgY29uc3QgaGFuZGxlRm9ybVN1Y2Nlc3MgPSAoKSA9PiB7XG4gICAgc2V0U2hvd0Zvcm0oZmFsc2UpXG4gICAgc2V0RWRpdGluZ0NhcmQobnVsbClcbiAgICBsb2FkRmxhc2hjYXJkcygpXG4gICAgbG9hZENhcmRTZXRzKClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUVkaXQgPSAoY2FyZDogRmxhc2hjYXJkKSA9PiB7XG4gICAgc2V0RWRpdGluZ0NhcmQoY2FyZClcbiAgICBzZXRTaG93Rm9ybSh0cnVlKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRGVsZXRlID0gYXN5bmMgKGNhcmQ6IEZsYXNoY2FyZCkgPT4ge1xuICAgIGlmICghY29uZmlybShg56K65a6a6KaB5Yiq6Zmk6Kme5Y2h44CMJHtjYXJkLndvcmR944CN5ZeO77yfYCkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmbGFzaGNhcmRzU2VydmljZS5kZWxldGVGbGFzaGNhcmQoY2FyZC5pZClcbiAgICAgIGlmIChyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICBsb2FkRmxhc2hjYXJkcygpXG4gICAgICAgIGxvYWRDYXJkU2V0cygpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbGVydChyZXN1bHQuZXJyb3IgfHwgJ+WIqumZpOWkseaVlycpXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBhbGVydCgn5Yiq6Zmk5aSx5pWX77yM6KuL6YeN6KmmJylcbiAgICB9XG4gIH1cblxuICAvLyBGaWx0ZXIgZGF0YVxuICBjb25zdCBmaWx0ZXJlZFNldHMgPSBjYXJkU2V0cy5maWx0ZXIoc2V0ID0+XG4gICAgc2V0Lm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hUZXJtLnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgc2V0LmRlc2NyaXB0aW9uLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVGVybS50b0xvd2VyQ2FzZSgpKVxuICApXG5cbiAgY29uc3QgZmlsdGVyZWRDYXJkcyA9IGZsYXNoY2FyZHMuZmlsdGVyKGNhcmQgPT4ge1xuICAgIGlmIChzZWFyY2hUZXJtKSB7XG4gICAgICByZXR1cm4gY2FyZC53b3JkPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFRlcm0udG9Mb3dlckNhc2UoKSkgfHxcbiAgICAgICAgICAgICBjYXJkLnRyYW5zbGF0aW9uPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFRlcm0udG9Mb3dlckNhc2UoKSlcbiAgICB9XG4gICAgcmV0dXJuIHRydWVcbiAgfSlcblxuICAvLyBBZGQgbG9hZGluZyBhbmQgZXJyb3Igc3RhdGVzXG4gIGlmIChsb2FkaW5nKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWluLWgtc2NyZWVuIGJnLWdyYXktNTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWxnXCI+6LyJ5YWl5LitLi4uPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApXG4gIH1cblxuICBpZiAoZXJyb3IpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtaW4taC1zY3JlZW4gYmctZ3JheS01MCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtcmVkLTYwMFwiPntlcnJvcn08L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJtaW4taC1zY3JlZW4gYmctZ3JheS01MFwiPlxuICAgICAgey8qIEhlYWRlciAqL31cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmctd2hpdGUgYm9yZGVyLWIgYm9yZGVyLWdyYXktMjAwXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWF4LXctN3hsIG14LWF1dG8gcHgtNCBzbTpweC02IGxnOnB4LThcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBweS02XCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwidGV4dC0zeGwgZm9udC1ib2xkIHRleHQtZ3JheS05MDBcIj7oqZ7ljaHnrqHnkIY8L2gxPlxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJtdC0xIHRleHQtc20gdGV4dC1ncmF5LTUwMFwiPueuoeeQhuS9oOeahOipnuWNoembhuWQiDwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTRcIj5cbiAgICAgICAgICAgICAgPExpbmtcbiAgICAgICAgICAgICAgICBocmVmPVwiL2dlbmVyYXRlXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJiZy1wcmltYXJ5IHRleHQtd2hpdGUgcHgtNCBweS0yIHJvdW5kZWQtbGcgaG92ZXI6YmctcHJpbWFyeS85MCB0cmFuc2l0aW9uLWNvbG9yc1wiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBBSSDnlJ/miJDoqZ7ljaFcbiAgICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICB7LyogVGFicyAqL31cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggc3BhY2UteC04XCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldEFjdGl2ZVRhYignbXktY2FyZHMnKX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgcGItNCBweC0xIGJvcmRlci1iLTIgZm9udC1tZWRpdW0gdGV4dC1zbSAke1xuICAgICAgICAgICAgICAgIGFjdGl2ZVRhYiA9PT0gJ215LWNhcmRzJ1xuICAgICAgICAgICAgICAgICAgPyAnYm9yZGVyLXByaW1hcnkgdGV4dC1wcmltYXJ5J1xuICAgICAgICAgICAgICAgICAgOiAnYm9yZGVyLXRyYW5zcGFyZW50IHRleHQtZ3JheS01MDAgaG92ZXI6dGV4dC1ncmF5LTcwMCBob3Zlcjpib3JkZXItZ3JheS0zMDAnXG4gICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICDmiJHnmoTljaHntYQgKHtmaWx0ZXJlZFNldHMubGVuZ3RofSlcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRBY3RpdmVUYWIoJ2FsbC1jYXJkcycpfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2BwYi00IHB4LTEgYm9yZGVyLWItMiBmb250LW1lZGl1bSB0ZXh0LXNtICR7XG4gICAgICAgICAgICAgICAgYWN0aXZlVGFiID09PSAnYWxsLWNhcmRzJ1xuICAgICAgICAgICAgICAgICAgPyAnYm9yZGVyLXByaW1hcnkgdGV4dC1wcmltYXJ5J1xuICAgICAgICAgICAgICAgICAgOiAnYm9yZGVyLXRyYW5zcGFyZW50IHRleHQtZ3JheS01MDAgaG92ZXI6dGV4dC1ncmF5LTcwMCBob3Zlcjpib3JkZXItZ3JheS0zMDAnXG4gICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICDmiYDmnInoqZ7ljaEgKHtmaWx0ZXJlZENhcmRzLmxlbmd0aH0pXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgey8qIENvbnRlbnQgKi99XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1heC13LTd4bCBteC1hdXRvIHB4LTQgc206cHgtNiBsZzpweC04IHB5LThcIj5cbiAgICAgICAgey8qIFNlYXJjaCAqL31cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi02XCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZVwiPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgdmFsdWU9e3NlYXJjaFRlcm19XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0U2VhcmNoVGVybShlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwi5pCc5bCL6Kme5Y2h5oiW5Y2h57WELi4uXCJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIHBsLTEwIHByLTQgcHktMiBib3JkZXIgYm9yZGVyLWdyYXktMzAwIHJvdW5kZWQtbGcgZm9jdXM6cmluZy0yIGZvY3VzOnJpbmctcHJpbWFyeSBmb2N1czpib3JkZXItdHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgaW5zZXQteS0wIGxlZnQtMCBwbC0zIGZsZXggaXRlbXMtY2VudGVyIHBvaW50ZXItZXZlbnRzLW5vbmVcIj5cbiAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJoLTUgdy01IHRleHQtZ3JheS00MDBcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNMjEgMjFsLTYtNm0yLTVhNyA3IDAgMTEtMTQgMCA3IDcgMCAwMTE0IDB6XCIgLz5cbiAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgey8qIENhcmQgU2V0cyBUYWIgKi99XG4gICAgICAgIHthY3RpdmVUYWIgPT09ICdteS1jYXJkcycgJiYgKFxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBtYi00XCI+XG4gICAgICAgICAgICAgIDxoMyBjbGFzc05hbWU9XCJ0ZXh0LWxnIGZvbnQtc2VtaWJvbGRcIj7lhbEge2ZpbHRlcmVkU2V0cy5sZW5ndGh9IOWAi+WNoee1hDwvaDM+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAge2ZpbHRlcmVkU2V0cy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1jZW50ZXIgcHktMTJcIj5cbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LWdyYXktNTAwIG1iLTRcIj7pgoTmspLmnInoqZ7ljaHpm4blkIg8L3A+XG4gICAgICAgICAgICAgICAgPExpbmtcbiAgICAgICAgICAgICAgICAgIGhyZWY9XCIvZ2VuZXJhdGVcIlxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYmctcHJpbWFyeSB0ZXh0LXdoaXRlIHB4LTQgcHktMiByb3VuZGVkLWxnIGhvdmVyOmJnLXByaW1hcnkvOTAgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIOWJteW7uuesrOS4gOWAi+WNoee1hFxuICAgICAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTEgbWQ6Z3JpZC1jb2xzLTIgbGc6Z3JpZC1jb2xzLTMgZ2FwLTRcIj5cbiAgICAgICAgICAgICAgICB7ZmlsdGVyZWRTZXRzLm1hcChzZXQgPT4gKFxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBrZXk9e3NldC5pZH1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYm9yZGVyIHJvdW5kZWQtbGcgaG92ZXI6c2hhZG93LWxnIHRyYW5zaXRpb24tc2hhZG93IGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkU2V0KHNldC5pZClcbiAgICAgICAgICAgICAgICAgICAgICBzZXRBY3RpdmVUYWIoJ2FsbC1jYXJkcycpXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtzZXQuY29sb3J9IHRleHQtd2hpdGUgcC00IHJvdW5kZWQtdC1sZ2B9PlxuICAgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzc05hbWU9XCJmb250LXNlbWlib2xkIHRleHQtbGdcIj57c2V0Lm5hbWV9PC9oND5cbiAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIG9wYWNpdHktOTBcIj57c2V0LmRlc2NyaXB0aW9ufTwvcD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicC00IGJnLXdoaXRlIHJvdW5kZWQtYi1sZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIHRleHQtc20gdGV4dC1ncmF5LTYwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3NldC5jYXJkQ291bnR9IOW8teipnuWNoTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPumAsuW6pjoge3NldC5wcm9ncmVzc30lPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG5cbiAgICAgICAgey8qIEFsbCBDYXJkcyBUYWIgKi99XG4gICAgICAgIHthY3RpdmVUYWIgPT09ICdhbGwtY2FyZHMnICYmIChcbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgbWItNFwiPlxuICAgICAgICAgICAgICA8aDMgY2xhc3NOYW1lPVwidGV4dC1sZyBmb250LXNlbWlib2xkXCI+5YWxIHtmaWx0ZXJlZENhcmRzLmxlbmd0aH0g5YCL6Kme5Y2hPC9oMz5cbiAgICAgICAgICAgICAge3NlbGVjdGVkU2V0ICYmIChcbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRTZWxlY3RlZFNldChudWxsKX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1ncmF5LTYwMCBob3Zlcjp0ZXh0LWdyYXktOTAwXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICDpoa/npLrmiYDmnInoqZ7ljaFcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICB7ZmlsdGVyZWRDYXJkcy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1jZW50ZXIgcHktMTJcIj5cbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LWdyYXktNTAwIG1iLTRcIj7mspLmnInmib7liLDoqZ7ljaE8L3A+XG4gICAgICAgICAgICAgICAgPExpbmtcbiAgICAgICAgICAgICAgICAgIGhyZWY9XCIvZ2VuZXJhdGVcIlxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYmctcHJpbWFyeSB0ZXh0LXdoaXRlIHB4LTQgcHktMiByb3VuZGVkLWxnIGhvdmVyOmJnLXByaW1hcnkvOTAgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIOWJteW7uuaWsOipnuWNoVxuICAgICAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktM1wiPlxuICAgICAgICAgICAgICAgIHtmaWx0ZXJlZENhcmRzLm1hcChjYXJkID0+IChcbiAgICAgICAgICAgICAgICAgIDxkaXYga2V5PXtjYXJkLmlkfSBjbGFzc05hbWU9XCJiZy13aGl0ZSBib3JkZXIgcm91bmRlZC1sZyBwLTQgaG92ZXI6c2hhZG93LW1kIHRyYW5zaXRpb24tc2hhZG93XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzc05hbWU9XCJmb250LXNlbWlib2xkIHRleHQtbGdcIj57Y2FyZC53b3JkIHx8ICfmnKroqK3lrponfTwvaDQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS01MDBcIj57Y2FyZC5wYXJ0T2ZTcGVlY2h9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NhcmQucHJvbnVuY2lhdGlvbiAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1ibHVlLTYwMFwiPntjYXJkLnByb251bmNpYXRpb259PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LWdyYXktNzAwIG10LTFcIj57Y2FyZC50cmFuc2xhdGlvbiB8fCAn5pyq6Kit5a6aJ308L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2NhcmQuZXhhbXBsZSAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS02MDAgbXQtMiBpdGFsaWNcIj7kvovlj6U6IHtjYXJkLmV4YW1wbGV9PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTQgbXQtMiB0ZXh0LXhzIHRleHQtZ3JheS01MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPuWNoee1hDoge2NhcmQuY2FyZFNldC5uYW1lfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPueGn+e3tOW6pjoge2NhcmQubWFzdGVyeUxldmVsfS81PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+6KSH57+SOiB7Y2FyZC50aW1lc1Jldmlld2VkfSDmrKE8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj7kuIvmrKHopIfnv5I6IHtuZXcgRGF0ZShjYXJkLm5leHRSZXZpZXdEYXRlKS50b0xvY2FsZURhdGVTdHJpbmcoKX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IOWvpuS9nOe3qOi8r+WKn+iDvVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCfnt6jovK/oqZ7ljaE6JywgY2FyZC5pZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1ibHVlLTYwMCBob3Zlcjp0ZXh0LWJsdWUtODAwIHRleHQtc21cIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICDnt6jovK9cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzog5a+m5L2c5Yiq6Zmk5Yqf6IO9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ+WIqumZpOipnuWNoTonLCBjYXJkLmlkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXJlZC02MDAgaG92ZXI6dGV4dC1yZWQtODAwIHRleHQtc21cIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICDliKrpmaRcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBGbGFzaGNhcmRzUGFnZSgpIHtcbiAgcmV0dXJuIChcbiAgICA8UHJvdGVjdGVkUm91dGU+XG4gICAgICA8Rmxhc2hjYXJkc0NvbnRlbnQgLz5cbiAgICA8L1Byb3RlY3RlZFJvdXRlPlxuICApXG59Il0sIm5hbWVzIjpbInVzZVN0YXRlIiwidXNlRWZmZWN0IiwiTGluayIsIlByb3RlY3RlZFJvdXRlIiwiZmxhc2hjYXJkc1NlcnZpY2UiLCJGbGFzaGNhcmRzQ29udGVudCIsImFjdGl2ZVRhYiIsInNldEFjdGl2ZVRhYiIsInNlbGVjdGVkU2V0Iiwic2V0U2VsZWN0ZWRTZXQiLCJzZWFyY2hUZXJtIiwic2V0U2VhcmNoVGVybSIsImNhcmRTZXRzIiwic2V0Q2FyZFNldHMiLCJmbGFzaGNhcmRzIiwic2V0Rmxhc2hjYXJkcyIsImxvYWRpbmciLCJzZXRMb2FkaW5nIiwiZXJyb3IiLCJzZXRFcnJvciIsInNob3dGb3JtIiwic2V0U2hvd0Zvcm0iLCJlZGl0aW5nQ2FyZCIsInNldEVkaXRpbmdDYXJkIiwibG9hZENhcmRTZXRzIiwibG9hZEZsYXNoY2FyZHMiLCJyZXN1bHQiLCJnZXRDYXJkU2V0cyIsInN1Y2Nlc3MiLCJkYXRhIiwic2V0cyIsImVyciIsImdldEZsYXNoY2FyZHMiLCJ1bmRlZmluZWQiLCJoYW5kbGVGb3JtU3VjY2VzcyIsImhhbmRsZUVkaXQiLCJjYXJkIiwiaGFuZGxlRGVsZXRlIiwiY29uZmlybSIsIndvcmQiLCJkZWxldGVGbGFzaGNhcmQiLCJpZCIsImFsZXJ0IiwiZmlsdGVyZWRTZXRzIiwiZmlsdGVyIiwic2V0IiwibmFtZSIsInRvTG93ZXJDYXNlIiwiaW5jbHVkZXMiLCJkZXNjcmlwdGlvbiIsImZpbHRlcmVkQ2FyZHMiLCJ0cmFuc2xhdGlvbiIsImRpdiIsImNsYXNzTmFtZSIsImgxIiwicCIsImhyZWYiLCJidXR0b24iLCJvbkNsaWNrIiwibGVuZ3RoIiwiaW5wdXQiLCJ0eXBlIiwidmFsdWUiLCJvbkNoYW5nZSIsImUiLCJ0YXJnZXQiLCJwbGFjZWhvbGRlciIsInN2ZyIsImZpbGwiLCJzdHJva2UiLCJ2aWV3Qm94IiwicGF0aCIsInN0cm9rZUxpbmVjYXAiLCJzdHJva2VMaW5lam9pbiIsInN0cm9rZVdpZHRoIiwiZCIsImgzIiwibWFwIiwiY29sb3IiLCJoNCIsInNwYW4iLCJjYXJkQ291bnQiLCJwcm9ncmVzcyIsInBhcnRPZlNwZWVjaCIsInByb251bmNpYXRpb24iLCJleGFtcGxlIiwiY2FyZFNldCIsIm1hc3RlcnlMZXZlbCIsInRpbWVzUmV2aWV3ZWQiLCJEYXRlIiwibmV4dFJldmlld0RhdGUiLCJ0b0xvY2FsZURhdGVTdHJpbmciLCJjb25zb2xlIiwibG9nIiwiRmxhc2hjYXJkc1BhZ2UiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/flashcards/page.tsx\n"));
|
|
|
|
/***/ })
|
|
|
|
}); |