From 50f751eff3901a19d8a4d350fbe3a98c50742848 Mon Sep 17 00:00:00 2001 From: lee gyu yeol-mac Date: Tue, 3 Sep 2024 15:22:57 +0900 Subject: [PATCH 01/48] =?UTF-8?q?[#136]feat:=20Home=20Visualizatoin?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=20?= =?UTF-8?q?=EC=9D=B4=EB=A6=84=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../renderingCodeFlowUnitTest.test.tsx | 23 +++++++++------- __tests__/pages/home/homeUnitTest.test.tsx | 2 +- src/App.tsx | 4 +-- .../Visualization.module.css} | 0 .../Visualization.tsx} | 6 ++--- .../LeftSection/LeftSection.module.css | 0 .../components/LeftSection/LeftSection.tsx | 0 .../components/CodeEditor.module.css | 0 .../LeftSection/components/CodeEditor.tsx | 2 +- .../LeftSection/components/Console.module.css | 0 .../LeftSection/components/Console.tsx | 0 .../components/RightSection/RightSection.css | 0 .../components/RightSection/RightSection.tsx | 26 +++++++++---------- .../RightSection/components/Arrow/Arrow.tsx | 0 .../CodeFlowListWrapper.module.css | 0 .../CodeFlowListWrapper.tsx | 2 +- .../components/CodeFlowListBlock.tsx | 0 .../CodeFlowVariableBox.module.css | 0 .../CodeFlowVariableBox.tsx | 2 +- .../components/ElifBox/ElifBox.module.css | 0 .../components/ElifBox/ElifBox.tsx | 2 +- .../components/ElseBox/ElseBox.module.css | 0 .../components/ElseBox/ElseBox.tsx | 2 +- .../components/ForBox/ForBox.module.css | 0 .../RightSection/components/ForBox/ForBox.tsx | 2 +- .../components/IfBox/IfBox.module.css | 0 .../RightSection/components/IfBox/IfBox.tsx | 2 +- .../ListWrapper/ListWrapper.module.css | 0 .../components/ListWrapper/ListWrapper.tsx | 2 +- .../ListWrapper/components/ListBlock.tsx | 2 +- .../components/PrintBox/PrintBox.module.css | 0 .../components/PrintBox/PrintBox.tsx | 2 +- .../VariableBox/VariableBox.module.css | 0 .../components/VariableBox/VariableBox.tsx | 0 .../components/WhileBox/WhileBox.tsx | 2 +- .../RightSection/renderingCodeFlow.tsx | 16 ++++++------ .../RightSection/renderingStructure.tsx | 4 +-- .../RightSection/services/addCodeFlow.ts | 2 +- .../services/createObjectToAdd.ts | 22 ++++++++-------- .../RightSection/services/deleteCodeFlow.ts | 2 +- .../RightSection/services/findDeleteUsedId.ts | 2 +- .../RightSection/services/findTargetChild.ts | 2 +- .../services/insertEqualToDepth.ts | 2 +- .../RightSection/services/insertIntoDepth.ts | 2 +- .../RightSection/services/refreshCodeFlow.ts | 2 +- .../RightSection/services/turnLight.ts | 4 +-- .../services/turnOffAllNodeLight.ts | 2 +- .../RightSection/services/updateActivate.ts | 4 +-- .../RightSection/services/updateCodeFlow.ts | 2 +- .../services/updateDataStructure.ts | 2 +- src/pages/{Home => Visualization}/gutter.css | 0 .../types/activateItem.ts | 0 .../types/codeFlow/allObjectItem.ts | 0 .../types/codeFlow/assignVizItem.ts | 0 .../types/codeFlow/codeFlowListItem.ts | 0 .../types/codeFlow/codeFlowVariableItem.ts | 0 .../types/codeFlow/conditionItem.ts | 0 .../types/codeFlow/elseItem.ts | 0 .../types/codeFlow/forItem.ts | 0 .../types/codeFlow/listItem.ts | 0 .../types/codeFlow/printItem.ts | 0 .../types/codeFlow/whileItem.ts | 0 .../allDataStructureItem.ts | 0 .../dataStructureListItem.ts | 0 .../dataStructureVarItem.ts | 0 .../dataToAdd/codeFlowVariableDataToAdd.ts | 0 .../types/dataToAdd/forDataToAdd.ts | 0 .../types/dataToAdd/ifElseChangeDataToAdd.ts | 0 .../types/dataToAdd/ifElseDataToAdd.ts | 0 .../types/dataToAdd/printDataToAdd.ts | 0 .../types/dto/ValidTypeDto.ts | 0 .../types/dto/codeFlowListDto.ts | 0 .../types/dto/codeFlowVariableDto.ts | 0 .../types/dto/forDto.ts | 0 .../types/dto/ifElseChangeDto.ts | 0 .../types/dto/ifElseDto.ts | 0 .../types/dto/printDto.ts | 0 .../types/dto/variableDto.ts | 0 .../types/dto/variablesDto.ts | 0 .../types/dto/whileDto.ts | 0 80 files changed, 79 insertions(+), 74 deletions(-) rename src/pages/{Home/Home.module.css => Visualization/Visualization.module.css} (100%) rename src/pages/{Home/Home.tsx => Visualization/Visualization.tsx} (97%) rename src/pages/{Home => Visualization}/components/LeftSection/LeftSection.module.css (100%) rename src/pages/{Home => Visualization}/components/LeftSection/LeftSection.tsx (100%) rename src/pages/{Home => Visualization}/components/LeftSection/components/CodeEditor.module.css (100%) rename src/pages/{Home => Visualization}/components/LeftSection/components/CodeEditor.tsx (97%) rename src/pages/{Home => Visualization}/components/LeftSection/components/Console.module.css (100%) rename src/pages/{Home => Visualization}/components/LeftSection/components/Console.tsx (100%) rename src/pages/{Home => Visualization}/components/RightSection/RightSection.css (100%) rename src/pages/{Home => Visualization}/components/RightSection/RightSection.tsx (93%) rename src/pages/{Home => Visualization}/components/RightSection/components/Arrow/Arrow.tsx (100%) rename src/pages/{Home => Visualization}/components/RightSection/components/CodeFlowListWrapper/CodeFlowListWrapper.module.css (100%) rename src/pages/{Home => Visualization}/components/RightSection/components/CodeFlowListWrapper/CodeFlowListWrapper.tsx (94%) rename src/pages/{Home => Visualization}/components/RightSection/components/CodeFlowListWrapper/components/CodeFlowListBlock.tsx (100%) rename src/pages/{Home => Visualization}/components/RightSection/components/CodeFlowVariableBox/CodeFlowVariableBox.module.css (100%) rename src/pages/{Home => Visualization}/components/RightSection/components/CodeFlowVariableBox/CodeFlowVariableBox.tsx (94%) rename src/pages/{Home => Visualization}/components/RightSection/components/ElifBox/ElifBox.module.css (100%) rename src/pages/{Home => Visualization}/components/RightSection/components/ElifBox/ElifBox.tsx (94%) rename src/pages/{Home => Visualization}/components/RightSection/components/ElseBox/ElseBox.module.css (100%) rename src/pages/{Home => Visualization}/components/RightSection/components/ElseBox/ElseBox.tsx (94%) rename src/pages/{Home => Visualization}/components/RightSection/components/ForBox/ForBox.module.css (100%) rename src/pages/{Home => Visualization}/components/RightSection/components/ForBox/ForBox.tsx (97%) rename src/pages/{Home => Visualization}/components/RightSection/components/IfBox/IfBox.module.css (100%) rename src/pages/{Home => Visualization}/components/RightSection/components/IfBox/IfBox.tsx (94%) rename src/pages/{Home => Visualization}/components/RightSection/components/ListWrapper/ListWrapper.module.css (100%) rename src/pages/{Home => Visualization}/components/RightSection/components/ListWrapper/ListWrapper.tsx (84%) rename src/pages/{Home => Visualization}/components/RightSection/components/ListWrapper/components/ListBlock.tsx (96%) rename src/pages/{Home => Visualization}/components/RightSection/components/PrintBox/PrintBox.module.css (100%) rename src/pages/{Home => Visualization}/components/RightSection/components/PrintBox/PrintBox.tsx (96%) rename src/pages/{Home => Visualization}/components/RightSection/components/VariableBox/VariableBox.module.css (100%) rename src/pages/{Home => Visualization}/components/RightSection/components/VariableBox/VariableBox.tsx (100%) rename src/pages/{Home => Visualization}/components/RightSection/components/WhileBox/WhileBox.tsx (95%) rename src/pages/{Home => Visualization}/components/RightSection/renderingCodeFlow.tsx (89%) rename src/pages/{Home => Visualization}/components/RightSection/renderingStructure.tsx (93%) rename src/pages/{Home => Visualization}/components/RightSection/services/addCodeFlow.ts (91%) rename src/pages/{Home => Visualization}/components/RightSection/services/createObjectToAdd.ts (76%) rename src/pages/{Home => Visualization}/components/RightSection/services/deleteCodeFlow.ts (86%) rename src/pages/{Home => Visualization}/components/RightSection/services/findDeleteUsedId.ts (80%) rename src/pages/{Home => Visualization}/components/RightSection/services/findTargetChild.ts (85%) rename src/pages/{Home => Visualization}/components/RightSection/services/insertEqualToDepth.ts (85%) rename src/pages/{Home => Visualization}/components/RightSection/services/insertIntoDepth.ts (86%) rename src/pages/{Home => Visualization}/components/RightSection/services/refreshCodeFlow.ts (92%) rename src/pages/{Home => Visualization}/components/RightSection/services/turnLight.ts (83%) rename src/pages/{Home => Visualization}/components/RightSection/services/turnOffAllNodeLight.ts (74%) rename src/pages/{Home => Visualization}/components/RightSection/services/updateActivate.ts (85%) rename src/pages/{Home => Visualization}/components/RightSection/services/updateCodeFlow.ts (93%) rename src/pages/{Home => Visualization}/components/RightSection/services/updateDataStructure.ts (81%) rename src/pages/{Home => Visualization}/gutter.css (100%) rename src/pages/{Home => Visualization}/types/activateItem.ts (100%) rename src/pages/{Home => Visualization}/types/codeFlow/allObjectItem.ts (100%) rename src/pages/{Home => Visualization}/types/codeFlow/assignVizItem.ts (100%) rename src/pages/{Home => Visualization}/types/codeFlow/codeFlowListItem.ts (100%) rename src/pages/{Home => Visualization}/types/codeFlow/codeFlowVariableItem.ts (100%) rename src/pages/{Home => Visualization}/types/codeFlow/conditionItem.ts (100%) rename src/pages/{Home => Visualization}/types/codeFlow/elseItem.ts (100%) rename src/pages/{Home => Visualization}/types/codeFlow/forItem.ts (100%) rename src/pages/{Home => Visualization}/types/codeFlow/listItem.ts (100%) rename src/pages/{Home => Visualization}/types/codeFlow/printItem.ts (100%) rename src/pages/{Home => Visualization}/types/codeFlow/whileItem.ts (100%) rename src/pages/{Home => Visualization}/types/dataStructuresItem/allDataStructureItem.ts (100%) rename src/pages/{Home => Visualization}/types/dataStructuresItem/dataStructureListItem.ts (100%) rename src/pages/{Home => Visualization}/types/dataStructuresItem/dataStructureVarItem.ts (100%) rename src/pages/{Home => Visualization}/types/dataToAdd/codeFlowVariableDataToAdd.ts (100%) rename src/pages/{Home => Visualization}/types/dataToAdd/forDataToAdd.ts (100%) rename src/pages/{Home => Visualization}/types/dataToAdd/ifElseChangeDataToAdd.ts (100%) rename src/pages/{Home => Visualization}/types/dataToAdd/ifElseDataToAdd.ts (100%) rename src/pages/{Home => Visualization}/types/dataToAdd/printDataToAdd.ts (100%) rename src/pages/{Home => Visualization}/types/dto/ValidTypeDto.ts (100%) rename src/pages/{Home => Visualization}/types/dto/codeFlowListDto.ts (100%) rename src/pages/{Home => Visualization}/types/dto/codeFlowVariableDto.ts (100%) rename src/pages/{Home => Visualization}/types/dto/forDto.ts (100%) rename src/pages/{Home => Visualization}/types/dto/ifElseChangeDto.ts (100%) rename src/pages/{Home => Visualization}/types/dto/ifElseDto.ts (100%) rename src/pages/{Home => Visualization}/types/dto/printDto.ts (100%) rename src/pages/{Home => Visualization}/types/dto/variableDto.ts (100%) rename src/pages/{Home => Visualization}/types/dto/variablesDto.ts (100%) rename src/pages/{Home => Visualization}/types/dto/whileDto.ts (100%) diff --git a/__tests__/pages/home/components/RightSection/renderingCodeFlowUnitTest.test.tsx b/__tests__/pages/home/components/RightSection/renderingCodeFlowUnitTest.test.tsx index bc8d4777..f2739732 100644 --- a/__tests__/pages/home/components/RightSection/renderingCodeFlowUnitTest.test.tsx +++ b/__tests__/pages/home/components/RightSection/renderingCodeFlowUnitTest.test.tsx @@ -1,21 +1,26 @@ import { ReactNode } from "react"; import { render, screen } from "@testing-library/react"; import "@testing-library/jest-dom"; -import { renderingCodeFlow } from "@/pages/Home/components/RightSection/renderingCodeFlow.tsx"; -import { ForItem } from "@/pages/Home/types/forItem"; +import { renderingCodeFlow } from "@/pages/Visualization/components/RightSection/renderingCodeFlow"; +import { ForItem } from "@/pages/Visualization/types/codeFlow/forItem"; type Props = { children: ReactNode; forItem: ForItem; }; // ForBox 컴포넌트 모킹 // ForBox의 실제 경로에서 forItem과 children인자만 가지고와서 사용한다 -jest.mock("@/pages/Home/components/RightSection/components/ForBox/ForBox", () => ({ forItem, children }: Props) => ( - // 실제 ForBox의 컴포넌트를 가지고 오는 것이 아닌 가짜로 만들어서 사용 -
- For Box: {forItem.id} -
{children}
-
-)); +jest.mock( + "@/pages/Visualization/components/RightSection/components/ForBox/ForBox", + () => + ({ forItem, children }: Props) => + ( + // 실제 ForBox의 컴포넌트를 가지고 오는 것이 아닌 가짜로 만들어서 사용 +
+ For Box: {forItem.id} +
{children}
+
+ ) +); describe("renderingCodeFlow 함수", () => { it("forBox 컴포넌트 하나만 출력하는 테스트", () => { diff --git a/__tests__/pages/home/homeUnitTest.test.tsx b/__tests__/pages/home/homeUnitTest.test.tsx index 59bb58fe..fed0d3ad 100644 --- a/__tests__/pages/home/homeUnitTest.test.tsx +++ b/__tests__/pages/home/homeUnitTest.test.tsx @@ -3,7 +3,7 @@ import React from "react"; import { render, screen, fireEvent, waitFor } from "@testing-library/react"; import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import forPrintMockData from "./samples/successForAndPrintResponseBody.json"; -import Home from "../../../src/pages/Home/Home"; +import Home from "../../../src/pages/Visualization/Visualization"; // 브라우저API 모킹 (window as any).fetch = jest.fn(); diff --git a/src/App.tsx b/src/App.tsx index 59037d8e..d5dee0c4 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,5 +1,5 @@ import { BrowserRouter as Router, Routes, Route } from "react-router-dom"; -import Home from "./pages/Home/Home"; +import Visualization from "./pages/Visualization/Visualization"; import Signup from "./pages/Signup/Signup"; import Login from "./pages/Login/Login"; import "./App.css"; @@ -16,7 +16,7 @@ function App() { return ( - } /> + } /> } /> } /> diff --git a/src/pages/Home/Home.module.css b/src/pages/Visualization/Visualization.module.css similarity index 100% rename from src/pages/Home/Home.module.css rename to src/pages/Visualization/Visualization.module.css diff --git a/src/pages/Home/Home.tsx b/src/pages/Visualization/Visualization.tsx similarity index 97% rename from src/pages/Home/Home.tsx rename to src/pages/Visualization/Visualization.tsx index 62e727c4..f9fc693a 100644 --- a/src/pages/Home/Home.tsx +++ b/src/pages/Visualization/Visualization.tsx @@ -1,14 +1,14 @@ import { createContext, useState, Dispatch, SetStateAction, useCallback, useEffect, useRef } from "react"; import { useMutation } from "@tanstack/react-query"; -import styles from "./Home.module.css"; +import styles from "./Visualization.module.css"; import "./gutter.css"; import LoggedInHeader from "../components/LoggedInHeader"; import LeftSection from "./components/LeftSection/LeftSection"; import RightSection from "./components/RightSection/RightSection"; import Split from "react-split"; -import { ValidTypeDto, isValidTypeDtoArray } from "@/pages/Home/types/dto/ValidTypeDto"; +import { ValidTypeDto, isValidTypeDtoArray } from "@/pages/Visualization/types/dto/ValidTypeDto"; //zustand store import { useConsoleStore, useCodeFlowLengthStore } from "@/store/console"; @@ -34,7 +34,7 @@ export const PreprocessedCodesContext = createContext {}, }); -export default function Home() { +export default function Visualization() { const [code, setCode] = useState( ["a = 3", "for i in range(a):", " print(' ' * ((a - 1) - i), end = '')", " print('*' * (2 * i + 1))"].join("\n") ); diff --git a/src/pages/Home/components/LeftSection/LeftSection.module.css b/src/pages/Visualization/components/LeftSection/LeftSection.module.css similarity index 100% rename from src/pages/Home/components/LeftSection/LeftSection.module.css rename to src/pages/Visualization/components/LeftSection/LeftSection.module.css diff --git a/src/pages/Home/components/LeftSection/LeftSection.tsx b/src/pages/Visualization/components/LeftSection/LeftSection.tsx similarity index 100% rename from src/pages/Home/components/LeftSection/LeftSection.tsx rename to src/pages/Visualization/components/LeftSection/LeftSection.tsx diff --git a/src/pages/Home/components/LeftSection/components/CodeEditor.module.css b/src/pages/Visualization/components/LeftSection/components/CodeEditor.module.css similarity index 100% rename from src/pages/Home/components/LeftSection/components/CodeEditor.module.css rename to src/pages/Visualization/components/LeftSection/components/CodeEditor.module.css diff --git a/src/pages/Home/components/LeftSection/components/CodeEditor.tsx b/src/pages/Visualization/components/LeftSection/components/CodeEditor.tsx similarity index 97% rename from src/pages/Home/components/LeftSection/components/CodeEditor.tsx rename to src/pages/Visualization/components/LeftSection/components/CodeEditor.tsx index 43932f3b..75623294 100644 --- a/src/pages/Home/components/LeftSection/components/CodeEditor.tsx +++ b/src/pages/Visualization/components/LeftSection/components/CodeEditor.tsx @@ -1,7 +1,7 @@ import { useContext, Fragment, useRef, useEffect, useState } from "react"; import Editor, { OnMount } from "@monaco-editor/react"; import * as monaco from "monaco-editor"; -import { CodeContext } from "../../../Home"; +import { CodeContext } from "../../../Visualization"; // Zustand import { useEditorStore } from "@/store/editor"; diff --git a/src/pages/Home/components/LeftSection/components/Console.module.css b/src/pages/Visualization/components/LeftSection/components/Console.module.css similarity index 100% rename from src/pages/Home/components/LeftSection/components/Console.module.css rename to src/pages/Visualization/components/LeftSection/components/Console.module.css diff --git a/src/pages/Home/components/LeftSection/components/Console.tsx b/src/pages/Visualization/components/LeftSection/components/Console.tsx similarity index 100% rename from src/pages/Home/components/LeftSection/components/Console.tsx rename to src/pages/Visualization/components/LeftSection/components/Console.tsx diff --git a/src/pages/Home/components/RightSection/RightSection.css b/src/pages/Visualization/components/RightSection/RightSection.css similarity index 100% rename from src/pages/Home/components/RightSection/RightSection.css rename to src/pages/Visualization/components/RightSection/RightSection.css diff --git a/src/pages/Home/components/RightSection/RightSection.tsx b/src/pages/Visualization/components/RightSection/RightSection.tsx similarity index 93% rename from src/pages/Home/components/RightSection/RightSection.tsx rename to src/pages/Visualization/components/RightSection/RightSection.tsx index e709d377..f9f2de8e 100644 --- a/src/pages/Home/components/RightSection/RightSection.tsx +++ b/src/pages/Visualization/components/RightSection/RightSection.tsx @@ -1,5 +1,5 @@ import { useState, useContext, useEffect, useRef } from "react"; -import { PreprocessedCodesContext } from "../../Home"; +import { PreprocessedCodesContext } from "../../Visualization"; import "./RightSection.css"; import Split from "react-split"; import _ from "lodash"; @@ -8,17 +8,17 @@ import ResizeObserver from "resize-observer-polyfill"; import Arrow from "./components/Arrow/Arrow"; // 타입 정의 -import { AllObjectItem } from "@/pages/Home/types/codeFlow/allObjectItem"; -import { ActivateItem } from "@/pages/Home/types/activateItem"; -import { VariablesDto } from "@/pages/Home/types/dto/variablesDto"; -import { ForDto } from "@/pages/Home/types/dto/forDto"; -import { PrintDto } from "@/pages/Home/types/dto/printDto"; -import { IfElseDto } from "@/pages/Home/types/dto/ifElseDto"; -import { CodeFlowVariableDto } from "@/pages/Home/types/dto/codeFlowVariableDto"; -import { PrintItem } from "@/pages/Home/types/codeFlow/printItem"; -import { VariableDto } from "@/pages/Home/types/dto/variableDto"; -import { WhileDto } from "@/pages/Home/types/dto/whileDto"; -import { AllDataStructureItem } from "@/pages/Home/types/dataStructuresItem/allDataStructureItem"; +import { AllObjectItem } from "@/pages/Visualization/types/codeFlow/allObjectItem"; +import { ActivateItem } from "@/pages/Visualization/types/activateItem"; +import { VariablesDto } from "@/pages/Visualization/types/dto/variablesDto"; +import { ForDto } from "@/pages/Visualization/types/dto/forDto"; +import { PrintDto } from "@/pages/Visualization/types/dto/printDto"; +import { IfElseDto } from "@/pages/Visualization/types/dto/ifElseDto"; +import { CodeFlowVariableDto } from "@/pages/Visualization/types/dto/codeFlowVariableDto"; +import { PrintItem } from "@/pages/Visualization/types/codeFlow/printItem"; +import { VariableDto } from "@/pages/Visualization/types/dto/variableDto"; +import { WhileDto } from "@/pages/Visualization/types/dto/whileDto"; +import { AllDataStructureItem } from "@/pages/Visualization/types/dataStructuresItem/allDataStructureItem"; // services폴더에서 가져온 함수 import { addCodeFlow } from "./services/addCodeFlow"; import { insertIntoDepth } from "./services/insertIntoDepth"; @@ -35,7 +35,7 @@ import { findDeleteUsedId } from "./services/findDeleteUsedId"; //rendUtils에서 가져온 함수 import { renderingStructure } from "./renderingStructure"; import { renderingCodeFlow } from "./renderingCodeFlow"; -import { IfElseChangeDto } from "@/pages/Home/types/dto/ifElseChangeDto"; +import { IfElseChangeDto } from "@/pages/Visualization/types/dto/ifElseChangeDto"; import { refreshCodeFlow } from "./services/refreshCodeFlow"; import { deleteCodeFlow } from "./services/deleteCodeFlow"; diff --git a/src/pages/Home/components/RightSection/components/Arrow/Arrow.tsx b/src/pages/Visualization/components/RightSection/components/Arrow/Arrow.tsx similarity index 100% rename from src/pages/Home/components/RightSection/components/Arrow/Arrow.tsx rename to src/pages/Visualization/components/RightSection/components/Arrow/Arrow.tsx diff --git a/src/pages/Home/components/RightSection/components/CodeFlowListWrapper/CodeFlowListWrapper.module.css b/src/pages/Visualization/components/RightSection/components/CodeFlowListWrapper/CodeFlowListWrapper.module.css similarity index 100% rename from src/pages/Home/components/RightSection/components/CodeFlowListWrapper/CodeFlowListWrapper.module.css rename to src/pages/Visualization/components/RightSection/components/CodeFlowListWrapper/CodeFlowListWrapper.module.css diff --git a/src/pages/Home/components/RightSection/components/CodeFlowListWrapper/CodeFlowListWrapper.tsx b/src/pages/Visualization/components/RightSection/components/CodeFlowListWrapper/CodeFlowListWrapper.tsx similarity index 94% rename from src/pages/Home/components/RightSection/components/CodeFlowListWrapper/CodeFlowListWrapper.tsx rename to src/pages/Visualization/components/RightSection/components/CodeFlowListWrapper/CodeFlowListWrapper.tsx index 2816b91c..f9816c0d 100644 --- a/src/pages/Home/components/RightSection/components/CodeFlowListWrapper/CodeFlowListWrapper.tsx +++ b/src/pages/Visualization/components/RightSection/components/CodeFlowListWrapper/CodeFlowListWrapper.tsx @@ -4,7 +4,7 @@ import styles from "./CodeFlowListWrapper.module.css"; //components import CodeFlowListBlock from "./components/CodeFlowListBlock"; //type -import { CodeFlowListItem } from "@/pages/Home/types/codeFlow/codeFlowListItem"; +import { CodeFlowListItem } from "@/pages/Visualization/types/codeFlow/codeFlowListItem"; //zustand import { useArrowStore } from "@/store/arrow"; interface CodeFlowWrapperItemProps { diff --git a/src/pages/Home/components/RightSection/components/CodeFlowListWrapper/components/CodeFlowListBlock.tsx b/src/pages/Visualization/components/RightSection/components/CodeFlowListWrapper/components/CodeFlowListBlock.tsx similarity index 100% rename from src/pages/Home/components/RightSection/components/CodeFlowListWrapper/components/CodeFlowListBlock.tsx rename to src/pages/Visualization/components/RightSection/components/CodeFlowListWrapper/components/CodeFlowListBlock.tsx diff --git a/src/pages/Home/components/RightSection/components/CodeFlowVariableBox/CodeFlowVariableBox.module.css b/src/pages/Visualization/components/RightSection/components/CodeFlowVariableBox/CodeFlowVariableBox.module.css similarity index 100% rename from src/pages/Home/components/RightSection/components/CodeFlowVariableBox/CodeFlowVariableBox.module.css rename to src/pages/Visualization/components/RightSection/components/CodeFlowVariableBox/CodeFlowVariableBox.module.css diff --git a/src/pages/Home/components/RightSection/components/CodeFlowVariableBox/CodeFlowVariableBox.tsx b/src/pages/Visualization/components/RightSection/components/CodeFlowVariableBox/CodeFlowVariableBox.tsx similarity index 94% rename from src/pages/Home/components/RightSection/components/CodeFlowVariableBox/CodeFlowVariableBox.tsx rename to src/pages/Visualization/components/RightSection/components/CodeFlowVariableBox/CodeFlowVariableBox.tsx index 2f34840d..859ede97 100644 --- a/src/pages/Home/components/RightSection/components/CodeFlowVariableBox/CodeFlowVariableBox.tsx +++ b/src/pages/Visualization/components/RightSection/components/CodeFlowVariableBox/CodeFlowVariableBox.tsx @@ -3,7 +3,7 @@ import styles from "./CodeFlowVariableBox.module.css"; import cx from "classnames"; //type -import { CodeFlowVariableItem } from "@/pages/Home/types/codeFlow/codeFlowVariableItem"; +import { CodeFlowVariableItem } from "@/pages/Visualization/types/codeFlow/codeFlowVariableItem"; //zustand import { useArrowStore } from "@/store/arrow"; diff --git a/src/pages/Home/components/RightSection/components/ElifBox/ElifBox.module.css b/src/pages/Visualization/components/RightSection/components/ElifBox/ElifBox.module.css similarity index 100% rename from src/pages/Home/components/RightSection/components/ElifBox/ElifBox.module.css rename to src/pages/Visualization/components/RightSection/components/ElifBox/ElifBox.module.css diff --git a/src/pages/Home/components/RightSection/components/ElifBox/ElifBox.tsx b/src/pages/Visualization/components/RightSection/components/ElifBox/ElifBox.tsx similarity index 94% rename from src/pages/Home/components/RightSection/components/ElifBox/ElifBox.tsx rename to src/pages/Visualization/components/RightSection/components/ElifBox/ElifBox.tsx index 97a1baf8..b10bcac0 100644 --- a/src/pages/Home/components/RightSection/components/ElifBox/ElifBox.tsx +++ b/src/pages/Visualization/components/RightSection/components/ElifBox/ElifBox.tsx @@ -2,7 +2,7 @@ import { ReactNode } from "react"; import styles from "./ElifBox.module.css"; import cx from "classnames"; import { AnimatePresence, motion } from "framer-motion"; -import { ConditionItem } from "@/pages/Home/types/conditionItem"; +import { ConditionItem } from "@/pages/Visualization/types/codeFlow/conditionItem"; type Props = { children: ReactNode; diff --git a/src/pages/Home/components/RightSection/components/ElseBox/ElseBox.module.css b/src/pages/Visualization/components/RightSection/components/ElseBox/ElseBox.module.css similarity index 100% rename from src/pages/Home/components/RightSection/components/ElseBox/ElseBox.module.css rename to src/pages/Visualization/components/RightSection/components/ElseBox/ElseBox.module.css diff --git a/src/pages/Home/components/RightSection/components/ElseBox/ElseBox.tsx b/src/pages/Visualization/components/RightSection/components/ElseBox/ElseBox.tsx similarity index 94% rename from src/pages/Home/components/RightSection/components/ElseBox/ElseBox.tsx rename to src/pages/Visualization/components/RightSection/components/ElseBox/ElseBox.tsx index e9e13f41..c5a1648b 100644 --- a/src/pages/Home/components/RightSection/components/ElseBox/ElseBox.tsx +++ b/src/pages/Visualization/components/RightSection/components/ElseBox/ElseBox.tsx @@ -1,7 +1,7 @@ import { ReactNode } from "react"; import cx from "classnames"; import { AnimatePresence, motion } from "framer-motion"; -import { ConditionItem } from "@/pages/Home/types/conditionItem"; +import { ConditionItem } from "@/pages/Visualization/types/codeFlow/conditionItem"; type Props = { children?: ReactNode; isLight: boolean; diff --git a/src/pages/Home/components/RightSection/components/ForBox/ForBox.module.css b/src/pages/Visualization/components/RightSection/components/ForBox/ForBox.module.css similarity index 100% rename from src/pages/Home/components/RightSection/components/ForBox/ForBox.module.css rename to src/pages/Visualization/components/RightSection/components/ForBox/ForBox.module.css diff --git a/src/pages/Home/components/RightSection/components/ForBox/ForBox.tsx b/src/pages/Visualization/components/RightSection/components/ForBox/ForBox.tsx similarity index 97% rename from src/pages/Home/components/RightSection/components/ForBox/ForBox.tsx rename to src/pages/Visualization/components/RightSection/components/ForBox/ForBox.tsx index ae4867c1..fdbd616d 100644 --- a/src/pages/Home/components/RightSection/components/ForBox/ForBox.tsx +++ b/src/pages/Visualization/components/RightSection/components/ForBox/ForBox.tsx @@ -4,7 +4,7 @@ import cx from "classnames"; import { AnimatePresence, motion } from "framer-motion"; //type -import { ForItem } from "@/pages/Home/types/forItem"; +import { ForItem } from "@/pages/Visualization/types/codeFlow/forItem"; //zustand import { useArrowStore } from "@/store/arrow"; interface ForItemProps { diff --git a/src/pages/Home/components/RightSection/components/IfBox/IfBox.module.css b/src/pages/Visualization/components/RightSection/components/IfBox/IfBox.module.css similarity index 100% rename from src/pages/Home/components/RightSection/components/IfBox/IfBox.module.css rename to src/pages/Visualization/components/RightSection/components/IfBox/IfBox.module.css diff --git a/src/pages/Home/components/RightSection/components/IfBox/IfBox.tsx b/src/pages/Visualization/components/RightSection/components/IfBox/IfBox.tsx similarity index 94% rename from src/pages/Home/components/RightSection/components/IfBox/IfBox.tsx rename to src/pages/Visualization/components/RightSection/components/IfBox/IfBox.tsx index cfcb6426..aebbb84a 100644 --- a/src/pages/Home/components/RightSection/components/IfBox/IfBox.tsx +++ b/src/pages/Visualization/components/RightSection/components/IfBox/IfBox.tsx @@ -3,7 +3,7 @@ import { ReactNode } from "react"; import styles from "./IfBox.module.css"; import cx from "classnames"; import { AnimatePresence, motion } from "framer-motion"; -import { ConditionItem } from "@/pages/Home/types/conditionItem"; +import { ConditionItem } from "@/pages/Visualization/types/codeFlow/conditionItem"; type Props = { children?: ReactNode; isLight: boolean; ifItem: ConditionItem }; function IfBox({ children, isLight, ifItem }: Props) { diff --git a/src/pages/Home/components/RightSection/components/ListWrapper/ListWrapper.module.css b/src/pages/Visualization/components/RightSection/components/ListWrapper/ListWrapper.module.css similarity index 100% rename from src/pages/Home/components/RightSection/components/ListWrapper/ListWrapper.module.css rename to src/pages/Visualization/components/RightSection/components/ListWrapper/ListWrapper.module.css diff --git a/src/pages/Home/components/RightSection/components/ListWrapper/ListWrapper.tsx b/src/pages/Visualization/components/RightSection/components/ListWrapper/ListWrapper.tsx similarity index 84% rename from src/pages/Home/components/RightSection/components/ListWrapper/ListWrapper.tsx rename to src/pages/Visualization/components/RightSection/components/ListWrapper/ListWrapper.tsx index b5840106..f1aedbf8 100644 --- a/src/pages/Home/components/RightSection/components/ListWrapper/ListWrapper.tsx +++ b/src/pages/Visualization/components/RightSection/components/ListWrapper/ListWrapper.tsx @@ -1,6 +1,6 @@ import styles from "./ListWrapper.module.css"; import { ListBlock } from "./components/ListBlock"; -import { DataStructureListItem } from "@/pages/Home/types/dataStructureListItem"; +import { DataStructureListItem } from "@/pages/Visualization/types/dataStructuresItem/dataStructureListItem"; type Props = { listItem: DataStructureListItem; }; diff --git a/src/pages/Home/components/RightSection/components/ListWrapper/components/ListBlock.tsx b/src/pages/Visualization/components/RightSection/components/ListWrapper/components/ListBlock.tsx similarity index 96% rename from src/pages/Home/components/RightSection/components/ListWrapper/components/ListBlock.tsx rename to src/pages/Visualization/components/RightSection/components/ListWrapper/components/ListBlock.tsx index cf0fcfbd..739eb17d 100644 --- a/src/pages/Home/components/RightSection/components/ListWrapper/components/ListBlock.tsx +++ b/src/pages/Visualization/components/RightSection/components/ListWrapper/components/ListBlock.tsx @@ -3,7 +3,7 @@ import cx from "classnames"; type Props = { exprItem: string; - isLight: boolean; + isLight?: boolean; index: number; }; export const ListBlock = ({ exprItem, isLight, index }: Props) => { diff --git a/src/pages/Home/components/RightSection/components/PrintBox/PrintBox.module.css b/src/pages/Visualization/components/RightSection/components/PrintBox/PrintBox.module.css similarity index 100% rename from src/pages/Home/components/RightSection/components/PrintBox/PrintBox.module.css rename to src/pages/Visualization/components/RightSection/components/PrintBox/PrintBox.module.css diff --git a/src/pages/Home/components/RightSection/components/PrintBox/PrintBox.tsx b/src/pages/Visualization/components/RightSection/components/PrintBox/PrintBox.tsx similarity index 96% rename from src/pages/Home/components/RightSection/components/PrintBox/PrintBox.tsx rename to src/pages/Visualization/components/RightSection/components/PrintBox/PrintBox.tsx index 6e0ec29c..5184d3d7 100644 --- a/src/pages/Home/components/RightSection/components/PrintBox/PrintBox.tsx +++ b/src/pages/Visualization/components/RightSection/components/PrintBox/PrintBox.tsx @@ -1,6 +1,6 @@ import cx from "classnames"; import styles from "./PrintBox.module.css"; -import { PrintItem } from "@/pages/Home/types/printItem"; +import { PrintItem } from "@/pages/Visualization/types/codeFlow/printItem"; import { AnimatePresence, motion } from "framer-motion"; type Props = { diff --git a/src/pages/Home/components/RightSection/components/VariableBox/VariableBox.module.css b/src/pages/Visualization/components/RightSection/components/VariableBox/VariableBox.module.css similarity index 100% rename from src/pages/Home/components/RightSection/components/VariableBox/VariableBox.module.css rename to src/pages/Visualization/components/RightSection/components/VariableBox/VariableBox.module.css diff --git a/src/pages/Home/components/RightSection/components/VariableBox/VariableBox.tsx b/src/pages/Visualization/components/RightSection/components/VariableBox/VariableBox.tsx similarity index 100% rename from src/pages/Home/components/RightSection/components/VariableBox/VariableBox.tsx rename to src/pages/Visualization/components/RightSection/components/VariableBox/VariableBox.tsx diff --git a/src/pages/Home/components/RightSection/components/WhileBox/WhileBox.tsx b/src/pages/Visualization/components/RightSection/components/WhileBox/WhileBox.tsx similarity index 95% rename from src/pages/Home/components/RightSection/components/WhileBox/WhileBox.tsx rename to src/pages/Visualization/components/RightSection/components/WhileBox/WhileBox.tsx index 922738e4..2ed769eb 100644 --- a/src/pages/Home/components/RightSection/components/WhileBox/WhileBox.tsx +++ b/src/pages/Visualization/components/RightSection/components/WhileBox/WhileBox.tsx @@ -1,7 +1,7 @@ import { ReactNode } from "react"; import cx from "classnames"; -import { WhileItem } from "@/pages/Home/types/codeFlow/whileItem"; +import { WhileItem } from "@/pages/Visualization/types/codeFlow/whileItem"; import { AnimatePresence, motion } from "framer-motion"; type Props = { diff --git a/src/pages/Home/components/RightSection/renderingCodeFlow.tsx b/src/pages/Visualization/components/RightSection/renderingCodeFlow.tsx similarity index 89% rename from src/pages/Home/components/RightSection/renderingCodeFlow.tsx rename to src/pages/Visualization/components/RightSection/renderingCodeFlow.tsx index 0fa1d567..db29eac4 100644 --- a/src/pages/Home/components/RightSection/renderingCodeFlow.tsx +++ b/src/pages/Visualization/components/RightSection/renderingCodeFlow.tsx @@ -1,5 +1,5 @@ import { useRef, useEffect, ReactNode } from "react"; -import { AllObjectItem } from "@/pages/Home/types/codeFlow/allObjectItem"; +import { AllObjectItem } from "@/pages/Visualization/types/codeFlow/allObjectItem"; import { AnimatePresence, motion } from "framer-motion"; import { ReactElement } from "react"; import PrintBox from "./components/PrintBox/PrintBox"; @@ -12,13 +12,13 @@ import CodeFlowListWrapper from "./components/CodeFlowListWrapper/CodeFlowListWr import WhileBox from "./components/WhileBox/WhileBox"; // type import -import { ElseItem } from "@/pages/Home/types/codeFlow/elseItem"; -import { ForItem } from "@/pages/Home/types/codeFlow/forItem"; -import { PrintItem } from "@/pages/Home/types/codeFlow/printItem"; -import { ConditionItem } from "@/pages/Home/types/codeFlow/conditionItem"; -import { CodeFlowVariableItem } from "@/pages/Home/types/codeFlow/codeFlowVariableItem"; -import { CodeFlowListItem } from "@/pages/Home/types/codeFlow/codeFlowListItem"; -import { WhileItem } from "@/pages/Home/types/codeFlow/whileItem"; +import { ElseItem } from "@/pages/Visualization/types/codeFlow/elseItem"; +import { ForItem } from "@/pages/Visualization/types/codeFlow/forItem"; +import { PrintItem } from "@/pages/Visualization/types/codeFlow/printItem"; +import { ConditionItem } from "@/pages/Visualization/types/codeFlow/conditionItem"; +import { CodeFlowVariableItem } from "@/pages/Visualization/types/codeFlow/codeFlowVariableItem"; +import { CodeFlowListItem } from "@/pages/Visualization/types/codeFlow/codeFlowListItem"; +import { WhileItem } from "@/pages/Visualization/types/codeFlow/whileItem"; //zustand import { useArrowStore } from "@/store/arrow"; diff --git a/src/pages/Home/components/RightSection/renderingStructure.tsx b/src/pages/Visualization/components/RightSection/renderingStructure.tsx similarity index 93% rename from src/pages/Home/components/RightSection/renderingStructure.tsx rename to src/pages/Visualization/components/RightSection/renderingStructure.tsx index 9f805552..fec9f5f2 100644 --- a/src/pages/Home/components/RightSection/renderingStructure.tsx +++ b/src/pages/Visualization/components/RightSection/renderingStructure.tsx @@ -6,8 +6,8 @@ import { ReactElement } from "react"; import VariableBox from "./components/VariableBox/VariableBox"; import ListWrapper from "./components/ListWrapper/ListWrapper"; //type -import { DataStructureVarItem } from "@/pages/Home/types/dataStructureVarItem"; -import { DataStructureListItem } from "@/pages/Home/types/dataStructureListItem"; +import { DataStructureVarItem } from "@/pages/Visualization/types/dataStructuresItem/dataStructureVarItem"; +import { DataStructureListItem } from "@/pages/Visualization/types/dataStructuresItem/dataStructureListItem"; //zustand import { useArrowStore } from "@/store/arrow"; diff --git a/src/pages/Home/components/RightSection/services/addCodeFlow.ts b/src/pages/Visualization/components/RightSection/services/addCodeFlow.ts similarity index 91% rename from src/pages/Home/components/RightSection/services/addCodeFlow.ts rename to src/pages/Visualization/components/RightSection/services/addCodeFlow.ts index 5785d53b..00435c87 100644 --- a/src/pages/Home/components/RightSection/services/addCodeFlow.ts +++ b/src/pages/Visualization/components/RightSection/services/addCodeFlow.ts @@ -1,4 +1,4 @@ -import { AllObjectItem } from "@/pages/Home/types/codeFlow/allObjectItem"; +import { AllObjectItem } from "@/pages/Visualization/types/codeFlow/allObjectItem"; // 새로운 객체를 CodeFlow에 추가하는 함수 export const addCodeFlow = ( diff --git a/src/pages/Home/components/RightSection/services/createObjectToAdd.ts b/src/pages/Visualization/components/RightSection/services/createObjectToAdd.ts similarity index 76% rename from src/pages/Home/components/RightSection/services/createObjectToAdd.ts rename to src/pages/Visualization/components/RightSection/services/createObjectToAdd.ts index 894213f6..0b4a9665 100644 --- a/src/pages/Home/components/RightSection/services/createObjectToAdd.ts +++ b/src/pages/Visualization/components/RightSection/services/createObjectToAdd.ts @@ -1,14 +1,14 @@ -import { AllObjectItem } from "@/pages/Home/types/codeFlow/allObjectItem"; -import { ForItem } from "@/pages/Home/types/forItem"; -import { ConditionItem } from "@/pages/Home/types/conditionItem"; -import { PrintItem } from "@/pages/Home/types/printItem"; -import { ForDataToAdd } from "@/pages/Home/types/dataToAdd/forDataToAdd"; -import { PrintDataToAdd } from "@/pages/Home/types/dataToAdd/printDataToAdd"; -import { IfElseDataToAdd } from "@/pages/Home/types/dataToAdd/ifElseDataToAdd"; -import { IfElseChangeDataToAdd } from "@/pages/Home/types/dataToAdd/ifElseChangeDataToAdd"; -import { CodeFlowVariableDtoToAdd } from "@/pages/Home/types/dataToAdd/codeFlowVariableDataToAdd"; -import { WhileDto } from "@/pages/Home/types/dto/whileDto"; -import { CodeFlowListDto } from "@/pages/Home/types/dto/codeFlowListDto"; +import { AllObjectItem } from "@/pages/Visualization/types/codeFlow/allObjectItem"; +import { ForItem } from "@/pages/Visualization/types/codeFlow/forItem"; +import { ConditionItem } from "@/pages/Visualization/types/codeFlow/conditionItem"; +import { PrintItem } from "@/pages/Visualization/types/codeFlow/printItem"; +import { ForDataToAdd } from "@/pages/Visualization/types/dataToAdd/forDataToAdd"; +import { PrintDataToAdd } from "@/pages/Visualization/types/dataToAdd/printDataToAdd"; +import { IfElseDataToAdd } from "@/pages/Visualization/types/dataToAdd/ifElseDataToAdd"; +import { IfElseChangeDataToAdd } from "@/pages/Visualization/types/dataToAdd/ifElseChangeDataToAdd"; +import { CodeFlowVariableDtoToAdd } from "@/pages/Visualization/types/dataToAdd/codeFlowVariableDataToAdd"; +import { WhileDto } from "@/pages/Visualization/types/dto/whileDto"; +import { CodeFlowListDto } from "@/pages/Visualization/types/dto/codeFlowListDto"; // 스택에 넣을 객체를 생성하는 함수 export const createObjectToAdd = ( preprocessedCode: PrintDataToAdd | ForDataToAdd | IfElseDataToAdd | WhileDto diff --git a/src/pages/Home/components/RightSection/services/deleteCodeFlow.ts b/src/pages/Visualization/components/RightSection/services/deleteCodeFlow.ts similarity index 86% rename from src/pages/Home/components/RightSection/services/deleteCodeFlow.ts rename to src/pages/Visualization/components/RightSection/services/deleteCodeFlow.ts index 9926521f..ce5f74f2 100644 --- a/src/pages/Home/components/RightSection/services/deleteCodeFlow.ts +++ b/src/pages/Visualization/components/RightSection/services/deleteCodeFlow.ts @@ -1,4 +1,4 @@ -import { AllObjectItem } from "@/pages/Home/types/codeFlow/allObjectItem"; +import { AllObjectItem } from "@/pages/Visualization/types/codeFlow/allObjectItem"; export const deleteCodeFlow = (codeFlows: AllObjectItem[], toDeleteId: number): AllObjectItem[] => { return codeFlows diff --git a/src/pages/Home/components/RightSection/services/findDeleteUsedId.ts b/src/pages/Visualization/components/RightSection/services/findDeleteUsedId.ts similarity index 80% rename from src/pages/Home/components/RightSection/services/findDeleteUsedId.ts rename to src/pages/Visualization/components/RightSection/services/findDeleteUsedId.ts index d8075808..982c9648 100644 --- a/src/pages/Home/components/RightSection/services/findDeleteUsedId.ts +++ b/src/pages/Visualization/components/RightSection/services/findDeleteUsedId.ts @@ -1,4 +1,4 @@ -import { AllObjectItem } from "@/pages/Home/types/codeFlow/allObjectItem"; +import { AllObjectItem } from "@/pages/Visualization/types/codeFlow/allObjectItem"; export const findDeleteUsedId = (targetChild: AllObjectItem[]): number[] => { let idsToDelete: number[] = []; diff --git a/src/pages/Home/components/RightSection/services/findTargetChild.ts b/src/pages/Visualization/components/RightSection/services/findTargetChild.ts similarity index 85% rename from src/pages/Home/components/RightSection/services/findTargetChild.ts rename to src/pages/Visualization/components/RightSection/services/findTargetChild.ts index bdb3fc21..47306433 100644 --- a/src/pages/Home/components/RightSection/services/findTargetChild.ts +++ b/src/pages/Visualization/components/RightSection/services/findTargetChild.ts @@ -1,4 +1,4 @@ -import { AllObjectItem } from "@/pages/Home/types/codeFlow/allObjectItem"; +import { AllObjectItem } from "@/pages/Visualization/types/codeFlow/allObjectItem"; export const findTargetChild = (codeFlows: AllObjectItem[], toAddObject: AllObjectItem): AllObjectItem[] => { let targetChild: AllObjectItem[] = []; diff --git a/src/pages/Home/components/RightSection/services/insertEqualToDepth.ts b/src/pages/Visualization/components/RightSection/services/insertEqualToDepth.ts similarity index 85% rename from src/pages/Home/components/RightSection/services/insertEqualToDepth.ts rename to src/pages/Visualization/components/RightSection/services/insertEqualToDepth.ts index d43306ec..ab75edce 100644 --- a/src/pages/Home/components/RightSection/services/insertEqualToDepth.ts +++ b/src/pages/Visualization/components/RightSection/services/insertEqualToDepth.ts @@ -1,4 +1,4 @@ -import { AllObjectItem } from "@/pages/Home/types/codeFlow/allObjectItem"; +import { AllObjectItem } from "@/pages/Visualization/types/codeFlow/allObjectItem"; export const insertEqualToDepth = ( codeFlows: AllObjectItem[], diff --git a/src/pages/Home/components/RightSection/services/insertIntoDepth.ts b/src/pages/Visualization/components/RightSection/services/insertIntoDepth.ts similarity index 86% rename from src/pages/Home/components/RightSection/services/insertIntoDepth.ts rename to src/pages/Visualization/components/RightSection/services/insertIntoDepth.ts index 2434eda6..1162f79f 100644 --- a/src/pages/Home/components/RightSection/services/insertIntoDepth.ts +++ b/src/pages/Visualization/components/RightSection/services/insertIntoDepth.ts @@ -1,4 +1,4 @@ -import { AllObjectItem } from "@/pages/Home/types/codeFlow/allObjectItem"; +import { AllObjectItem } from "@/pages/Visualization/types/codeFlow/allObjectItem"; export const insertIntoDepth = ( codeFlows: AllObjectItem[], toAddObject: AllObjectItem, diff --git a/src/pages/Home/components/RightSection/services/refreshCodeFlow.ts b/src/pages/Visualization/components/RightSection/services/refreshCodeFlow.ts similarity index 92% rename from src/pages/Home/components/RightSection/services/refreshCodeFlow.ts rename to src/pages/Visualization/components/RightSection/services/refreshCodeFlow.ts index ab7f7082..99611a29 100644 --- a/src/pages/Home/components/RightSection/services/refreshCodeFlow.ts +++ b/src/pages/Visualization/components/RightSection/services/refreshCodeFlow.ts @@ -1,4 +1,4 @@ -import { AllObjectItem } from "@/pages/Home/types/codeFlow/allObjectItem"; +import { AllObjectItem } from "@/pages/Visualization/types/codeFlow/allObjectItem"; export const refreshCodeFlow = ( codeFlows: AllObjectItem[], //현제 코드흐름 시각화 정보를 담고 있는 리스트 diff --git a/src/pages/Home/components/RightSection/services/turnLight.ts b/src/pages/Visualization/components/RightSection/services/turnLight.ts similarity index 83% rename from src/pages/Home/components/RightSection/services/turnLight.ts rename to src/pages/Visualization/components/RightSection/services/turnLight.ts index 85d73610..117df4cd 100644 --- a/src/pages/Home/components/RightSection/services/turnLight.ts +++ b/src/pages/Visualization/components/RightSection/services/turnLight.ts @@ -1,5 +1,5 @@ -import { ActivateItem } from "@/pages/Home/types/activateItem"; -import { AllObjectItem } from "@/pages/Home/types/codeFlow/allObjectItem"; +import { ActivateItem } from "@/pages/Visualization/types/activateItem"; +import { AllObjectItem } from "@/pages/Visualization/types/codeFlow/allObjectItem"; // 하이라이트 효과를 줘야하는 부분을 표시해주는 함수 export const turnLight = ( diff --git a/src/pages/Home/components/RightSection/services/turnOffAllNodeLight.ts b/src/pages/Visualization/components/RightSection/services/turnOffAllNodeLight.ts similarity index 74% rename from src/pages/Home/components/RightSection/services/turnOffAllNodeLight.ts rename to src/pages/Visualization/components/RightSection/services/turnOffAllNodeLight.ts index 0d222b71..3f3a3865 100644 --- a/src/pages/Home/components/RightSection/services/turnOffAllNodeLight.ts +++ b/src/pages/Visualization/components/RightSection/services/turnOffAllNodeLight.ts @@ -1,4 +1,4 @@ -import { AllObjectItem } from "@/pages/Home/types/codeFlow/allObjectItem"; +import { AllObjectItem } from "@/pages/Visualization/types/codeFlow/allObjectItem"; export const turnOffAllNodeLight = (codeFlows: AllObjectItem[]): AllObjectItem[] => { return codeFlows.map((codeFlow) => { diff --git a/src/pages/Home/components/RightSection/services/updateActivate.ts b/src/pages/Visualization/components/RightSection/services/updateActivate.ts similarity index 85% rename from src/pages/Home/components/RightSection/services/updateActivate.ts rename to src/pages/Visualization/components/RightSection/services/updateActivate.ts index 5e3b9314..31dcca27 100644 --- a/src/pages/Home/components/RightSection/services/updateActivate.ts +++ b/src/pages/Visualization/components/RightSection/services/updateActivate.ts @@ -1,5 +1,5 @@ -import { ActivateItem } from "@/pages/Home/types/activateItem"; -import { AllObjectItem } from "@/pages/Home/types/codeFlow/allObjectItem"; +import { ActivateItem } from "@/pages/Visualization/types/activateItem"; +import { AllObjectItem } from "@/pages/Visualization/types/codeFlow/allObjectItem"; // 현재 불이 켜져야하는 부분을 표시해주는 함수 export const updateActivate = ( diff --git a/src/pages/Home/components/RightSection/services/updateCodeFlow.ts b/src/pages/Visualization/components/RightSection/services/updateCodeFlow.ts similarity index 93% rename from src/pages/Home/components/RightSection/services/updateCodeFlow.ts rename to src/pages/Visualization/components/RightSection/services/updateCodeFlow.ts index 16e6139b..a3481c28 100644 --- a/src/pages/Home/components/RightSection/services/updateCodeFlow.ts +++ b/src/pages/Visualization/components/RightSection/services/updateCodeFlow.ts @@ -1,4 +1,4 @@ -import { AllObjectItem } from "@/pages/Home/types/codeFlow/allObjectItem"; +import { AllObjectItem } from "@/pages/Visualization/types/codeFlow/allObjectItem"; // 객체를 수정해야하는 경우에 실행하는 함수 export const updateCodeFlow = ( diff --git a/src/pages/Home/components/RightSection/services/updateDataStructure.ts b/src/pages/Visualization/components/RightSection/services/updateDataStructure.ts similarity index 81% rename from src/pages/Home/components/RightSection/services/updateDataStructure.ts rename to src/pages/Visualization/components/RightSection/services/updateDataStructure.ts index 65822dc5..0f476839 100644 --- a/src/pages/Home/components/RightSection/services/updateDataStructure.ts +++ b/src/pages/Visualization/components/RightSection/services/updateDataStructure.ts @@ -1,4 +1,4 @@ -import { AllDataStructureItem } from "@/pages/Home/types/dataStructuresItem/allDataStructureItem"; +import { AllDataStructureItem } from "@/pages/Visualization/types/dataStructuresItem/allDataStructureItem"; // 자료구조 부분을 수정할때 실행하는 함수 export const updateDataStructure = ( targetName: string, diff --git a/src/pages/Home/gutter.css b/src/pages/Visualization/gutter.css similarity index 100% rename from src/pages/Home/gutter.css rename to src/pages/Visualization/gutter.css diff --git a/src/pages/Home/types/activateItem.ts b/src/pages/Visualization/types/activateItem.ts similarity index 100% rename from src/pages/Home/types/activateItem.ts rename to src/pages/Visualization/types/activateItem.ts diff --git a/src/pages/Home/types/codeFlow/allObjectItem.ts b/src/pages/Visualization/types/codeFlow/allObjectItem.ts similarity index 100% rename from src/pages/Home/types/codeFlow/allObjectItem.ts rename to src/pages/Visualization/types/codeFlow/allObjectItem.ts diff --git a/src/pages/Home/types/codeFlow/assignVizItem.ts b/src/pages/Visualization/types/codeFlow/assignVizItem.ts similarity index 100% rename from src/pages/Home/types/codeFlow/assignVizItem.ts rename to src/pages/Visualization/types/codeFlow/assignVizItem.ts diff --git a/src/pages/Home/types/codeFlow/codeFlowListItem.ts b/src/pages/Visualization/types/codeFlow/codeFlowListItem.ts similarity index 100% rename from src/pages/Home/types/codeFlow/codeFlowListItem.ts rename to src/pages/Visualization/types/codeFlow/codeFlowListItem.ts diff --git a/src/pages/Home/types/codeFlow/codeFlowVariableItem.ts b/src/pages/Visualization/types/codeFlow/codeFlowVariableItem.ts similarity index 100% rename from src/pages/Home/types/codeFlow/codeFlowVariableItem.ts rename to src/pages/Visualization/types/codeFlow/codeFlowVariableItem.ts diff --git a/src/pages/Home/types/codeFlow/conditionItem.ts b/src/pages/Visualization/types/codeFlow/conditionItem.ts similarity index 100% rename from src/pages/Home/types/codeFlow/conditionItem.ts rename to src/pages/Visualization/types/codeFlow/conditionItem.ts diff --git a/src/pages/Home/types/codeFlow/elseItem.ts b/src/pages/Visualization/types/codeFlow/elseItem.ts similarity index 100% rename from src/pages/Home/types/codeFlow/elseItem.ts rename to src/pages/Visualization/types/codeFlow/elseItem.ts diff --git a/src/pages/Home/types/codeFlow/forItem.ts b/src/pages/Visualization/types/codeFlow/forItem.ts similarity index 100% rename from src/pages/Home/types/codeFlow/forItem.ts rename to src/pages/Visualization/types/codeFlow/forItem.ts diff --git a/src/pages/Home/types/codeFlow/listItem.ts b/src/pages/Visualization/types/codeFlow/listItem.ts similarity index 100% rename from src/pages/Home/types/codeFlow/listItem.ts rename to src/pages/Visualization/types/codeFlow/listItem.ts diff --git a/src/pages/Home/types/codeFlow/printItem.ts b/src/pages/Visualization/types/codeFlow/printItem.ts similarity index 100% rename from src/pages/Home/types/codeFlow/printItem.ts rename to src/pages/Visualization/types/codeFlow/printItem.ts diff --git a/src/pages/Home/types/codeFlow/whileItem.ts b/src/pages/Visualization/types/codeFlow/whileItem.ts similarity index 100% rename from src/pages/Home/types/codeFlow/whileItem.ts rename to src/pages/Visualization/types/codeFlow/whileItem.ts diff --git a/src/pages/Home/types/dataStructuresItem/allDataStructureItem.ts b/src/pages/Visualization/types/dataStructuresItem/allDataStructureItem.ts similarity index 100% rename from src/pages/Home/types/dataStructuresItem/allDataStructureItem.ts rename to src/pages/Visualization/types/dataStructuresItem/allDataStructureItem.ts diff --git a/src/pages/Home/types/dataStructuresItem/dataStructureListItem.ts b/src/pages/Visualization/types/dataStructuresItem/dataStructureListItem.ts similarity index 100% rename from src/pages/Home/types/dataStructuresItem/dataStructureListItem.ts rename to src/pages/Visualization/types/dataStructuresItem/dataStructureListItem.ts diff --git a/src/pages/Home/types/dataStructuresItem/dataStructureVarItem.ts b/src/pages/Visualization/types/dataStructuresItem/dataStructureVarItem.ts similarity index 100% rename from src/pages/Home/types/dataStructuresItem/dataStructureVarItem.ts rename to src/pages/Visualization/types/dataStructuresItem/dataStructureVarItem.ts diff --git a/src/pages/Home/types/dataToAdd/codeFlowVariableDataToAdd.ts b/src/pages/Visualization/types/dataToAdd/codeFlowVariableDataToAdd.ts similarity index 100% rename from src/pages/Home/types/dataToAdd/codeFlowVariableDataToAdd.ts rename to src/pages/Visualization/types/dataToAdd/codeFlowVariableDataToAdd.ts diff --git a/src/pages/Home/types/dataToAdd/forDataToAdd.ts b/src/pages/Visualization/types/dataToAdd/forDataToAdd.ts similarity index 100% rename from src/pages/Home/types/dataToAdd/forDataToAdd.ts rename to src/pages/Visualization/types/dataToAdd/forDataToAdd.ts diff --git a/src/pages/Home/types/dataToAdd/ifElseChangeDataToAdd.ts b/src/pages/Visualization/types/dataToAdd/ifElseChangeDataToAdd.ts similarity index 100% rename from src/pages/Home/types/dataToAdd/ifElseChangeDataToAdd.ts rename to src/pages/Visualization/types/dataToAdd/ifElseChangeDataToAdd.ts diff --git a/src/pages/Home/types/dataToAdd/ifElseDataToAdd.ts b/src/pages/Visualization/types/dataToAdd/ifElseDataToAdd.ts similarity index 100% rename from src/pages/Home/types/dataToAdd/ifElseDataToAdd.ts rename to src/pages/Visualization/types/dataToAdd/ifElseDataToAdd.ts diff --git a/src/pages/Home/types/dataToAdd/printDataToAdd.ts b/src/pages/Visualization/types/dataToAdd/printDataToAdd.ts similarity index 100% rename from src/pages/Home/types/dataToAdd/printDataToAdd.ts rename to src/pages/Visualization/types/dataToAdd/printDataToAdd.ts diff --git a/src/pages/Home/types/dto/ValidTypeDto.ts b/src/pages/Visualization/types/dto/ValidTypeDto.ts similarity index 100% rename from src/pages/Home/types/dto/ValidTypeDto.ts rename to src/pages/Visualization/types/dto/ValidTypeDto.ts diff --git a/src/pages/Home/types/dto/codeFlowListDto.ts b/src/pages/Visualization/types/dto/codeFlowListDto.ts similarity index 100% rename from src/pages/Home/types/dto/codeFlowListDto.ts rename to src/pages/Visualization/types/dto/codeFlowListDto.ts diff --git a/src/pages/Home/types/dto/codeFlowVariableDto.ts b/src/pages/Visualization/types/dto/codeFlowVariableDto.ts similarity index 100% rename from src/pages/Home/types/dto/codeFlowVariableDto.ts rename to src/pages/Visualization/types/dto/codeFlowVariableDto.ts diff --git a/src/pages/Home/types/dto/forDto.ts b/src/pages/Visualization/types/dto/forDto.ts similarity index 100% rename from src/pages/Home/types/dto/forDto.ts rename to src/pages/Visualization/types/dto/forDto.ts diff --git a/src/pages/Home/types/dto/ifElseChangeDto.ts b/src/pages/Visualization/types/dto/ifElseChangeDto.ts similarity index 100% rename from src/pages/Home/types/dto/ifElseChangeDto.ts rename to src/pages/Visualization/types/dto/ifElseChangeDto.ts diff --git a/src/pages/Home/types/dto/ifElseDto.ts b/src/pages/Visualization/types/dto/ifElseDto.ts similarity index 100% rename from src/pages/Home/types/dto/ifElseDto.ts rename to src/pages/Visualization/types/dto/ifElseDto.ts diff --git a/src/pages/Home/types/dto/printDto.ts b/src/pages/Visualization/types/dto/printDto.ts similarity index 100% rename from src/pages/Home/types/dto/printDto.ts rename to src/pages/Visualization/types/dto/printDto.ts diff --git a/src/pages/Home/types/dto/variableDto.ts b/src/pages/Visualization/types/dto/variableDto.ts similarity index 100% rename from src/pages/Home/types/dto/variableDto.ts rename to src/pages/Visualization/types/dto/variableDto.ts diff --git a/src/pages/Home/types/dto/variablesDto.ts b/src/pages/Visualization/types/dto/variablesDto.ts similarity index 100% rename from src/pages/Home/types/dto/variablesDto.ts rename to src/pages/Visualization/types/dto/variablesDto.ts diff --git a/src/pages/Home/types/dto/whileDto.ts b/src/pages/Visualization/types/dto/whileDto.ts similarity index 100% rename from src/pages/Home/types/dto/whileDto.ts rename to src/pages/Visualization/types/dto/whileDto.ts From 2033aa69ae6fc6f6b729d7e566b8de95be663f3d Mon Sep 17 00:00:00 2001 From: lee gyu yeol-mac Date: Tue, 3 Sep 2024 17:06:14 +0900 Subject: [PATCH 02/48] =?UTF-8?q?[#136]feat:=20=EB=A1=9C=EA=B7=B8=EC=9D=B8?= =?UTF-8?q?=20=ED=9A=8C=EC=9B=90=EA=B0=80=EC=9E=85=20api=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/Login/Login.tsx | 4 ++-- src/pages/Signup/Signup.tsx | 18 ++++++++++++++---- src/pages/Visualization/Visualization.tsx | 4 ++-- src/pages/components/LoggedInHeader.tsx | 7 ++++--- src/pages/components/PublicHeader.tsx | 13 ++++++++----- 5 files changed, 30 insertions(+), 16 deletions(-) diff --git a/src/pages/Login/Login.tsx b/src/pages/Login/Login.tsx index 27f6e3ac..d71c5131 100644 --- a/src/pages/Login/Login.tsx +++ b/src/pages/Login/Login.tsx @@ -13,8 +13,8 @@ const Login = () => { const mutation = useMutation({ mutationFn: async ({ userId, userPassword }: { userId: string; userPassword: string }) => { return axios.post( - "http://localhost:8000/login", - { userId, userPassword }, + "http://localhost:8083/login", + { email: userId, password: userPassword }, { headers: { "Content-Type": "application/json" }, withCredentials: true } ); }, diff --git a/src/pages/Signup/Signup.tsx b/src/pages/Signup/Signup.tsx index ae0beff2..b0ca2e4f 100644 --- a/src/pages/Signup/Signup.tsx +++ b/src/pages/Signup/Signup.tsx @@ -56,10 +56,20 @@ const Signup = () => { }; const mutation = useMutation({ mutationFn: async (formData: FormData) => { - return axios.post("http://localhost:8000/signup", formData, { - headers: { "Content-Type": "application/json" }, - withCredentials: true, - }); + const req = { + email: formData.email, + password: formData.password, + name: formData.username, + phoneNumber: formData.phoneNumber, + }; + return axios.post( + "http://localhost:8083/signup", + { req }, + { + headers: { "Content-Type": "application/json" }, + withCredentials: true, + } + ); }, onSuccess() { alert("회원가입이 완료되었습니다."); diff --git a/src/pages/Visualization/Visualization.tsx b/src/pages/Visualization/Visualization.tsx index f9fc693a..d6e78794 100644 --- a/src/pages/Visualization/Visualization.tsx +++ b/src/pages/Visualization/Visualization.tsx @@ -3,7 +3,7 @@ import { createContext, useState, Dispatch, SetStateAction, useCallback, useEffe import { useMutation } from "@tanstack/react-query"; import styles from "./Visualization.module.css"; import "./gutter.css"; -import LoggedInHeader from "../components/LoggedInHeader"; +import PublicHeader from "../components/PublicHeader"; import LeftSection from "./components/LeftSection/LeftSection"; import RightSection from "./components/RightSection/RightSection"; @@ -120,7 +120,7 @@ export default function Visualization() { return ( - +
diff --git a/src/pages/components/LoggedInHeader.tsx b/src/pages/components/LoggedInHeader.tsx index cad6fafd..679ecf1b 100644 --- a/src/pages/components/LoggedInHeader.tsx +++ b/src/pages/components/LoggedInHeader.tsx @@ -1,3 +1,4 @@ +import { Link } from "react-router-dom"; import styles from "./LoggedInHeader.module.css"; const LoggedInHeader = () => { @@ -16,9 +17,9 @@ const LoggedInHeader = () => { 설정
); diff --git a/src/pages/components/PublicHeader.tsx b/src/pages/components/PublicHeader.tsx index bb447001..acc9c294 100644 --- a/src/pages/components/PublicHeader.tsx +++ b/src/pages/components/PublicHeader.tsx @@ -1,3 +1,4 @@ +import { Link } from "react-router-dom"; import styles from "./PublicHeader.module.css"; const PublicHeader = () => { @@ -8,16 +9,18 @@ const PublicHeader = () => { 로고 {/* */} - 시각화 + + 시각화 + 가격 ); From 044c87cb5781b5d95c850eeb6300ba1d52a92114 Mon Sep 17 00:00:00 2001 From: lee gyu yeol-mac Date: Wed, 4 Sep 2024 22:06:22 +0900 Subject: [PATCH 03/48] =?UTF-8?q?[#136]feat:=20set-cookie=20=EB=9D=BC?= =?UTF-8?q?=EC=9D=B4=EB=B8=8C=EB=9F=AC=EB=A6=AC=ED=95=98=EA=B3=A0=20jose?= =?UTF-8?q?=20=EB=9D=BC=EC=9D=B4=EB=B8=8C=EB=9F=AC=EB=A6=AC=20=EC=84=A4?= =?UTF-8?q?=EC=B9=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 80 ++++++++++++++++++++++++++++++++++++++++++----- package.json | 2 ++ 2 files changed, 75 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 819b58fd..5924eb6c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,6 +17,7 @@ "framer-motion": "^11.2.12", "lodash": "^4.17.21", "react": "^18.2.0", + "react-cookie": "^7.2.0", "react-dom": "^18.2.0", "react-router-dom": "^6.23.1", "react-split": "^2.0.14", @@ -47,6 +48,7 @@ "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", "jest-fetch-mock": "^3.0.3", + "jose": "^5.8.0", "msw": "^2.3.1", "ts-jest": "^29.2.4", "ts-node": "^10.9.2", @@ -3925,8 +3927,7 @@ "node_modules/@types/cookie": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", - "dev": true + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==" }, "node_modules/@types/estree": { "version": "1.0.5", @@ -3943,6 +3944,16 @@ "@types/node": "*" } }, + "node_modules/@types/hoist-non-react-statics": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz", + "integrity": "sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==", + "license": "MIT", + "dependencies": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", @@ -4016,14 +4027,12 @@ "node_modules/@types/prop-types": { "version": "15.7.12", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", - "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", - "devOptional": true + "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==" }, "node_modules/@types/react": { "version": "18.3.3", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz", "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==", - "devOptional": true, "dependencies": { "@types/prop-types": "*", "csstype": "^3.0.2" @@ -5047,8 +5056,7 @@ "node_modules/csstype": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "devOptional": true + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, "node_modules/data-urls": { "version": "3.0.2", @@ -6066,6 +6074,21 @@ "integrity": "sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==", "dev": true }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "license": "BSD-3-Clause", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, "node_modules/html-encoding-sniffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", @@ -7034,6 +7057,16 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/jose": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/jose/-/jose-5.8.0.tgz", + "integrity": "sha512-E7CqYpL/t7MMnfGnK/eg416OsFCVUrU/Y3Vwe7QjKhu/BkS1Ms455+2xsqZQVN57/U2MHMBvEb5SrmAZWAIntA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -8009,6 +8042,20 @@ "node": ">=0.10.0" } }, + "node_modules/react-cookie": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/react-cookie/-/react-cookie-7.2.0.tgz", + "integrity": "sha512-mqhPERUyfOljq5yJ4woDFI33bjEtigsl8JDJdPPeNhr0eSVZmBc/2Vdf8mFxOUktQxhxTR1T+uF0/FRTZyBEgw==", + "license": "MIT", + "dependencies": { + "@types/hoist-non-react-statics": "^3.3.5", + "hoist-non-react-statics": "^3.3.2", + "universal-cookie": "^7.0.0" + }, + "peerDependencies": { + "react": ">= 16.3.0" + } + }, "node_modules/react-dom": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", @@ -8883,6 +8930,25 @@ "node": ">=4" } }, + "node_modules/universal-cookie": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/universal-cookie/-/universal-cookie-7.2.0.tgz", + "integrity": "sha512-PvcyflJAYACJKr28HABxkGemML5vafHmiL4ICe3e+BEKXRMt0GaFLZhAwgv637kFFnnfiSJ8e6jknrKkMrU+PQ==", + "license": "MIT", + "dependencies": { + "@types/cookie": "^0.6.0", + "cookie": "^0.6.0" + } + }, + "node_modules/universal-cookie/node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/universalify": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", diff --git a/package.json b/package.json index 5399f412..7e5b3dc2 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "framer-motion": "^11.2.12", "lodash": "^4.17.21", "react": "^18.2.0", + "react-cookie": "^7.2.0", "react-dom": "^18.2.0", "react-router-dom": "^6.23.1", "react-split": "^2.0.14", @@ -50,6 +51,7 @@ "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", "jest-fetch-mock": "^3.0.3", + "jose": "^5.8.0", "msw": "^2.3.1", "ts-jest": "^29.2.4", "ts-node": "^10.9.2", From f23dc004450b665bc1bc4647a75d015d499698af Mon Sep 17 00:00:00 2001 From: lee gyu yeol-mac Date: Wed, 4 Sep 2024 22:07:21 +0900 Subject: [PATCH 04/48] =?UTF-8?q?[#136]feat:=20=EC=83=88=EB=A1=9C=EA=B3=A0?= =?UTF-8?q?=EC=B9=A8=ED=95=98=EB=A9=B4=20=EB=82=A0=EB=9D=BC=EA=B0=80?= =?UTF-8?q?=EB=8A=94=20=EC=A0=95=EB=B3=B4=20=EB=B0=B1=EC=97=94=EB=93=9C?= =?UTF-8?q?=EB=A1=9C=20=EB=B6=80=ED=84=B0=20=EB=B6=88=EB=9F=AC=EC=98=A4?= =?UTF-8?q?=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.tsx | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/src/App.tsx b/src/App.tsx index d5dee0c4..68956b92 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,21 +1,52 @@ +import { useEffect } from "react"; import { BrowserRouter as Router, Routes, Route } from "react-router-dom"; import Visualization from "./pages/Visualization/Visualization"; import Signup from "./pages/Signup/Signup"; import Login from "./pages/Login/Login"; +import Home from "./pages/Home/Home"; +import { useQuery } from "@tanstack/react-query"; import "./App.css"; import { worker } from "./mocks/browser"; - +interface User { + name: string; +} +//zustand +import { useUserStore } from "./store/user"; if (typeof window !== "undefined") { if (import.meta.env.VITE_APP_NODE_ENV === "development") { worker.start(); } } +// msw 버그로 인해 fetchUser는 따로 확인 불가능 백엔드 서버 연결해서 확인해야함 +const fetchUser = async (): Promise => { + const response = await fetch("htttp://localhost:8080/edupi_user/v1/member/load", { + method: "GET", + credentials: "include", + headers: { + "Content-Type": "application/json", + }, + }); + if (!response.ok) { + throw new Error("Network response was not ok"); + } + return await response.json(); +}; function App() { + const loggedInUserName = useUserStore((state) => state.setLoggedInUserName); + const { data } = useQuery({ queryKey: ["user"], queryFn: fetchUser }); + + useEffect(() => { + if (data) { + loggedInUserName(data.name); + } + }, [data]); + return ( + } /> } /> } /> } /> From 37e759f892a8c823e0d3e9a1c64d8a874434ef99 Mon Sep 17 00:00:00 2001 From: lee gyu yeol-mac Date: Wed, 4 Sep 2024 22:08:27 +0900 Subject: [PATCH 05/48] =?UTF-8?q?[#136]feat:=20=EB=A1=9C=EA=B7=B8=EC=9D=B8?= =?UTF-8?q?=EA=B3=BC=20=EC=83=88=EB=A1=9C=EA=B3=A0=EC=B9=A8=ED=95=98?= =?UTF-8?q?=EB=A9=B4=20=EB=B6=88=EB=9F=AC=EC=98=A4=EB=8A=94=20msw=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/mocks/handlers.ts | 98 +++++++++++++++++++++++++++++++++++++------ 1 file changed, 86 insertions(+), 12 deletions(-) diff --git a/src/mocks/handlers.ts b/src/mocks/handlers.ts index 5c7f5137..f63e52eb 100644 --- a/src/mocks/handlers.ts +++ b/src/mocks/handlers.ts @@ -1,9 +1,22 @@ import { http, HttpResponse } from "msw"; +import * as jose from "jose"; import testResponseBody from "./samples/testResponseBody.json"; +const JWT_SECRET = new TextEncoder().encode("your_jwt_secret_key"); + +async function generateToken(userId: string) { + const jwt = await new jose.SignJWT({ userId }) + .setProtectedHeader({ alg: "HS256" }) + .setIssuedAt() + .setExpirationTime("1h") + .sign(JWT_SECRET); + + return jwt; +} + interface User { - userId: string; - userPassword: string; + email: string; + password: string; } interface SignupUser { @@ -12,36 +25,97 @@ interface SignupUser { password: string; confirmPassword: string; } + export const handlers = [ http.post("/edupi_visualize/v1/python", () => { return HttpResponse.json(testResponseBody); }), - http.post("/login", async ({ request }) => { - const { userId, userPassword } = (await request.json()) as User; + http.post("/edupi_user/v1/member/load", async ({ request }) => { + console.log("Intercepted GET request to /edupi_user/v1/member/load"); + + // 쿠키에서 토큰을 확인 + const cookies = request.headers.get("Cookie"); + const hasToken = cookies && cookies.includes("token="); - // 간단한 인증 로직을 구현 - if (userId === "test" && userPassword === "test") { + if (hasToken) { return HttpResponse.json( { success: true, - message: "로그인 성공", - user: { id: userId, name: "테스트 사용자" }, + user: { id: "test@test.com", name: "테스트 사용자" }, }, - { status: 200 } + { + status: 200, + headers: { + "Access-Control-Allow-Origin": "*", + "Access-Control-Allow-Credentials": "true", + }, + } ); } else { return HttpResponse.json( { success: false, - message: "아이디 또는 비밀번호가 잘못되었습니다", + message: "인증되지 않은 사용자", }, - { status: 401 } + { + status: 401, + headers: { + "Access-Control-Allow-Origin": "*", + "Access-Control-Allow-Credentials": "true", + }, + } ); } }), + + http.post("/edupi_user/v1/member/login", async ({ request }) => { + try { + const { email, password } = (await request.json()) as User; + + if (email === "test@test.com" && password === "test") { + // JWT 토큰 생성을 기다립니다. + const token = await generateToken(email); + + const expirationDate = new Date(new Date().getTime() + 60 * 60 * 1000); + console.log("로그인 성공"); + console.log; + return HttpResponse.json( + { + success: true, + message: "로그인 성공", + user: { id: email, name: "테스트 사용자" }, + }, + { + status: 200, + headers: { + "Set-Cookie": `token=${token}; Secure;SameSite=Strict; Expires=${expirationDate.toUTCString()}`, + }, + } + ); + } else { + return HttpResponse.json( + { + success: false, + message: "아이디 또는 비밀번호가 잘못되었습니다", + }, + { status: 401 } + ); + } + } catch (error) { + console.error("Login error:", error); + return HttpResponse.json( + { + success: false, + message: "서버 오류가 발생했습니다.", + }, + { status: 500 } + ); + } + }), + http.post("/signup", async ({ request }) => { const { username } = (await request.json()) as SignupUser; - if (username === "error") return HttpResponse.json({ success: "false", message: "회원가입 실패" }, { status: 500 }); + if (username === "error") return HttpResponse.json({ success: false, message: "회원가입 실패" }, { status: 500 }); return HttpResponse.json( { success: true, From b9bdda8c00d45a49efa1058eddfabc904fa0be57 Mon Sep 17 00:00:00 2001 From: lee gyu yeol-mac Date: Wed, 4 Sep 2024 22:08:46 +0900 Subject: [PATCH 06/48] =?UTF-8?q?[#136]feat:=20logout=20=EB=B2=84=ED=8A=BC?= =?UTF-8?q?=20css=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/components/LoggedInHeader.module.css | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pages/components/LoggedInHeader.module.css b/src/pages/components/LoggedInHeader.module.css index 2d52065b..2a9e029b 100644 --- a/src/pages/components/LoggedInHeader.module.css +++ b/src/pages/components/LoggedInHeader.module.css @@ -35,4 +35,5 @@ header { .logout { color: #5a5a5a; + cursor: pointer; } From ca7861c9b6e28da58e07296bc689d12ce4c9ef6c Mon Sep 17 00:00:00 2001 From: lee gyu yeol-mac Date: Wed, 4 Sep 2024 22:09:21 +0900 Subject: [PATCH 07/48] =?UTF-8?q?[#136]feat:=20=EB=A1=9C=EA=B7=B8=EC=9D=B8?= =?UTF-8?q?=20=ED=95=A0=EB=95=8C=20=EC=82=AC=EC=9A=A9=EC=9E=90=20=EC=9D=B4?= =?UTF-8?q?=EB=A6=84=20=EB=9D=84=EC=96=B4=EC=A3=BC=EA=B3=A0=20=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=EC=95=84=EC=9B=83=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/components/LoggedInHeader.tsx | 26 +++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/src/pages/components/LoggedInHeader.tsx b/src/pages/components/LoggedInHeader.tsx index 679ecf1b..780d53e5 100644 --- a/src/pages/components/LoggedInHeader.tsx +++ b/src/pages/components/LoggedInHeader.tsx @@ -1,25 +1,35 @@ -import { Link } from "react-router-dom"; import styles from "./LoggedInHeader.module.css"; - +import { useUserStore } from "@/store/user"; +import { Cookies } from "react-cookie"; +import { Link } from "react-router-dom"; const LoggedInHeader = () => { + const cookies = new Cookies(); + const loggedInUserName = useUserStore((state) => state.loggedInUserName); + const resetUser = useUserStore((state) => state.resetUser); + const logout = () => { + resetUser(); + cookies.remove("token"); + }; return (
+
- + {loggedInUserName === "" ? null : {loggedInUserName}님} + 로그아웃 - +
); From f800290ce105029578669bf86d8c512c863030e5 Mon Sep 17 00:00:00 2001 From: lee gyu yeol-mac Date: Wed, 4 Sep 2024 22:10:01 +0900 Subject: [PATCH 08/48] =?UTF-8?q?[#136]feat:=20=EB=B2=84=ED=8A=BC=20?= =?UTF-8?q?=EC=9E=91=EB=8F=99=EB=90=98=EA=B2=8C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/components/PublicHeader.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/pages/components/PublicHeader.tsx b/src/pages/components/PublicHeader.tsx index acc9c294..b54ea481 100644 --- a/src/pages/components/PublicHeader.tsx +++ b/src/pages/components/PublicHeader.tsx @@ -5,15 +5,16 @@ const PublicHeader = () => { return (
- + 로고 - + {/* */} 시각화 가격
+
로그인 From c2550555ecb01d3b7ee1042c371bc4926e94dc79 Mon Sep 17 00:00:00 2001 From: lee gyu yeol-mac Date: Wed, 4 Sep 2024 22:10:52 +0900 Subject: [PATCH 09/48] =?UTF-8?q?[#136]feat:=20=EB=A9=94=EC=9D=B8=20?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80=20=EC=9E=84=EC=8B=9C=EB=A1=9C=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/Home/Home.tsx | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 src/pages/Home/Home.tsx diff --git a/src/pages/Home/Home.tsx b/src/pages/Home/Home.tsx new file mode 100644 index 00000000..7211864d --- /dev/null +++ b/src/pages/Home/Home.tsx @@ -0,0 +1,13 @@ +import PublicHeader from "../components/PublicHeader"; +import LoggedInHeader from "../components/LoggedInHeader"; +import { useUserStore } from "@/store/user"; +const Home = () => { + const loggedInUserName = useUserStore((state) => state.loggedInUserName); + return ( + <> + {loggedInUserName === "" ? : } +

메인페이지 입니다

+ + ); +}; +export default Home; From 9d749804a6b56209314d027fe9c591c1529b7564 Mon Sep 17 00:00:00 2001 From: lee gyu yeol-mac Date: Wed, 4 Sep 2024 22:11:27 +0900 Subject: [PATCH 10/48] =?UTF-8?q?[#136]feat:=20login=20=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/Login/Login.tsx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/pages/Login/Login.tsx b/src/pages/Login/Login.tsx index d71c5131..d9b33691 100644 --- a/src/pages/Login/Login.tsx +++ b/src/pages/Login/Login.tsx @@ -3,26 +3,26 @@ import axios from "axios"; import PublicHeader from "../components/PublicHeader"; import { useMutation } from "@tanstack/react-query"; import { useUserStore } from "@/store/user"; - +import { useNavigate } from "react-router-dom"; const Login = () => { const [userId, setUserId] = useState(""); const [userPassword, setUserPassword] = useState(""); const setLoggedInUserId = useUserStore((state) => state.setLoggedInUserId); - const setLoggedInUserPassword = useUserStore((state) => state.setLoggedInUserPassword); - + const setLoggedInUserName = useUserStore((state) => state.setLoggedInUserName); + const navigate = useNavigate(); const mutation = useMutation({ mutationFn: async ({ userId, userPassword }: { userId: string; userPassword: string }) => { return axios.post( - "http://localhost:8083/login", + "http://localhost:8080/edupi_user/v1/member/login", { email: userId, password: userPassword }, { headers: { "Content-Type": "application/json" }, withCredentials: true } ); }, onSuccess(data) { const jsonData = data.data; - setLoggedInUserId(jsonData.user.id); - setLoggedInUserPassword(jsonData.user.name); + setLoggedInUserName(jsonData.user.name); + navigate("/"); }, onError(error) { alert("아이디 또는 비밀번호가 틀렸습니다."); From d8964162ebeada0145cc5279538852187ee97c81 Mon Sep 17 00:00:00 2001 From: lee gyu yeol-mac Date: Wed, 4 Sep 2024 22:15:56 +0900 Subject: [PATCH 11/48] =?UTF-8?q?[#136]feat:=20=EC=A0=90=EA=B2=80=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EA=B0=80=EB=8F=85=EC=84=B1=EC=9E=88?= =?UTF-8?q?=EA=B2=8C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/Signup/Signup.tsx | 41 ++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/src/pages/Signup/Signup.tsx b/src/pages/Signup/Signup.tsx index b0ca2e4f..478de6c4 100644 --- a/src/pages/Signup/Signup.tsx +++ b/src/pages/Signup/Signup.tsx @@ -38,18 +38,29 @@ const Signup = () => { const validateForm = (): boolean => { let newErrors: FormErrors = {}; - if (!formData.username.trim()) newErrors.username = "사용자 이름은 필수입니다."; - if (!formData.email.trim()) newErrors.email = "이메일은 필수입니다."; - else if (!/\S+@\S+\.\S+/.test(formData.email)) newErrors.email = "유효한 이메일 주소를 입력하세요."; - if (!formData.phoneNumber) newErrors.phoneNumber = "핸드폰 번호는 필수입니다."; - else if (!/^010-\d{3,4}-\d{4}$/.test(formData.phoneNumber)) + if (!formData.username.trim()) { + newErrors.username = "사용자 이름은 필수입니다."; + } + if (!formData.email.trim()) { + newErrors.email = "이메일은 필수입니다."; + } else if (!/\S+@\S+\.\S+/.test(formData.email)) { + newErrors.email = "유효한 이메일 주소를 입력하세요."; + } + if (!formData.phoneNumber) { + newErrors.phoneNumber = "핸드폰 번호는 필수입니다."; + } else if (!/^010-\d{3,4}-\d{4}$/.test(formData.phoneNumber)) { newErrors.phoneNumber = "유효한 핸드폰 번호를 입력하세요."; - if (!formData.password) newErrors.password = "비밀번호는 필수입니다."; - else if (formData.password.length < 6 || formData.confirmPassword.length > 20) + } + if (!formData.password) { + newErrors.password = "비밀번호는 필수입니다."; + } else if (formData.password.length < 6 || formData.confirmPassword.length > 20) { newErrors.password = "비밀번호는 최소 8자 이상 20자 이하여야 합니다."; - else if (!/^(?=.*[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>/?]).*$/.test(formData.password)) + } else if (!/^(?=.*[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>/?]).*$/.test(formData.password)) { newErrors.password = "비밀번호는 최소 1개의 특수 문자를 포함해야 합니다"; - if (formData.password !== formData.confirmPassword) newErrors.confirmPassword = "비밀번호가 일치하지 않습니다."; + } + if (formData.password !== formData.confirmPassword) { + newErrors.confirmPassword = "비밀번호가 일치하지 않습니다."; + } setErrors(newErrors); return Object.keys(newErrors).length === 0; @@ -62,14 +73,10 @@ const Signup = () => { name: formData.username, phoneNumber: formData.phoneNumber, }; - return axios.post( - "http://localhost:8083/signup", - { req }, - { - headers: { "Content-Type": "application/json" }, - withCredentials: true, - } - ); + return axios.post("http://localhost:8083/edupi_user/v1/member/signup", req, { + headers: { "Content-Type": "application/json" }, + withCredentials: true, + }); }, onSuccess() { alert("회원가입이 완료되었습니다."); From dbc7d653283a2491bcf3f6235cf83f9af8deba1f Mon Sep 17 00:00:00 2001 From: lee gyu yeol-mac Date: Wed, 4 Sep 2024 22:16:32 +0900 Subject: [PATCH 12/48] =?UTF-8?q?[#136]feat:=20=ED=97=A4=EB=8D=94=20?= =?UTF-8?q?=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EC=83=81=ED=83=9C=EC=97=90=20?= =?UTF-8?q?=EB=94=B0=EB=9D=BC=20=EB=B3=80=EA=B2=BD=EB=90=98=EA=B2=8C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/Visualization/Visualization.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/pages/Visualization/Visualization.tsx b/src/pages/Visualization/Visualization.tsx index d6e78794..f1728b27 100644 --- a/src/pages/Visualization/Visualization.tsx +++ b/src/pages/Visualization/Visualization.tsx @@ -4,6 +4,7 @@ import { useMutation } from "@tanstack/react-query"; import styles from "./Visualization.module.css"; import "./gutter.css"; import PublicHeader from "../components/PublicHeader"; +import LoggedInHeader from "../components/LoggedInHeader"; import LeftSection from "./components/LeftSection/LeftSection"; import RightSection from "./components/RightSection/RightSection"; @@ -13,6 +14,7 @@ import { ValidTypeDto, isValidTypeDtoArray } from "@/pages/Visualization/types/d //zustand store import { useConsoleStore, useCodeFlowLengthStore } from "@/store/console"; import { useArrowStore } from "@/store/arrow"; +import { useUserStore } from "@/store/user"; // 원본 코드 타입 정의 interface CodeContextType { code: string; @@ -46,6 +48,7 @@ export default function Visualization() { const decrementConsoleIdx = useConsoleStore((state) => state.decrementConsoleIdx); const codeFlowLength = useCodeFlowLengthStore((state) => state.codeFlowLength); const setDisplayNone = useArrowStore((state) => state.setDisplayNone); + const loggedInUserName = useUserStore((state) => state.loggedInUserName); const [isPlaying, setIsPlaying] = useState(false); const mutation = useMutation({ @@ -120,7 +123,7 @@ export default function Visualization() { return ( - + {loggedInUserName === "" ? : }
From 40b7536ca0f2b011ffe78aeb88bfa5c3d10a0957 Mon Sep 17 00:00:00 2001 From: lee gyu yeol-mac Date: Wed, 4 Sep 2024 22:17:00 +0900 Subject: [PATCH 13/48] =?UTF-8?q?[#136]feat:=20=EC=82=AC=EC=9A=A9=EC=9E=90?= =?UTF-8?q?=EC=9D=98=20=EC=83=81=ED=83=9C=EB=A5=BC=20=EC=A0=80=EC=9E=A5?= =?UTF-8?q?=ED=95=98=EB=8A=94=20zustand=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/store/user.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/store/user.ts b/src/store/user.ts index 3ca0d418..3daaea60 100644 --- a/src/store/user.ts +++ b/src/store/user.ts @@ -2,15 +2,17 @@ import { create } from "zustand"; import { devtools } from "zustand/middleware"; interface UserState { loggedInUserId: string; - loggedInUserPassword: string; + loggedInUserName: string; setLoggedInUserId: (user: string) => void; - setLoggedInUserPassword: (password: string) => void; + setLoggedInUserName: (username: string) => void; + resetUser: () => void; } export const useUserStore = create( devtools((set) => ({ loggedInUserId: "", - loggedInUserPassword: "", + loggedInUserName: "", setLoggedInUserId: (loggedInUserId) => set({ loggedInUserId }), - setLoggedInUserPassword: (loggedInUserPassword) => set({ loggedInUserPassword }), + setLoggedInUserName: (loggedInUserName) => set({ loggedInUserName }), + resetUser: () => set({ loggedInUserId: "", loggedInUserName: "" }), })) ); From e1079256117c281bc35e4fe2e6119aeee793c5fb Mon Sep 17 00:00:00 2001 From: lee gyu yeol-mac Date: Thu, 5 Sep 2024 13:51:38 +0900 Subject: [PATCH 14/48] =?UTF-8?q?[#136]feat:=20msw=20signup=20=EC=A3=BC?= =?UTF-8?q?=EC=86=8C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/mocks/handlers.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mocks/handlers.ts b/src/mocks/handlers.ts index f63e52eb..86eb3fb6 100644 --- a/src/mocks/handlers.ts +++ b/src/mocks/handlers.ts @@ -113,7 +113,7 @@ export const handlers = [ } }), - http.post("/signup", async ({ request }) => { + http.post("/edupi_user/v1/member/signup", async ({ request }) => { const { username } = (await request.json()) as SignupUser; if (username === "error") return HttpResponse.json({ success: false, message: "회원가입 실패" }, { status: 500 }); return HttpResponse.json( From 90c45bbae9770649f9d1fbb1380b3e4215870629 Mon Sep 17 00:00:00 2001 From: lee gyu yeol-mac Date: Thu, 5 Sep 2024 13:52:12 +0900 Subject: [PATCH 15/48] =?UTF-8?q?[#136]feat:=20=ED=9A=8C=EC=9B=90=EA=B0=80?= =?UTF-8?q?=EC=9E=85=20=EC=84=B1=EA=B3=B5=EC=8B=9C=20=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EC=9D=B8=20=ED=8E=98=EC=9D=B4=EC=A7=80=EB=A1=9C=20=EC=9D=B4?= =?UTF-8?q?=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/Signup/Signup.tsx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/pages/Signup/Signup.tsx b/src/pages/Signup/Signup.tsx index 478de6c4..850370f7 100644 --- a/src/pages/Signup/Signup.tsx +++ b/src/pages/Signup/Signup.tsx @@ -3,6 +3,7 @@ import { useMutation } from "@tanstack/react-query"; import PublicHeader from "../components/PublicHeader"; import styles from "./Signup.module.css"; import axios from "axios"; +import { Link, useNavigate } from "react-router-dom"; interface FormData { username: string; @@ -29,7 +30,7 @@ const Signup = () => { confirmPassword: "", }); const [errors, setErrors] = useState({}); - + const navigate = useNavigate(); const handleChange = (e: ChangeEvent) => { const { name, value } = e.target; const trimmedValue = value.replace(/\s/g, ""); @@ -79,8 +80,7 @@ const Signup = () => { }); }, onSuccess() { - alert("회원가입이 완료되었습니다."); - // 랜딩 페이지로 접근하는 코드가 들어가야 할 곳 + navigate("/login"); }, onError(error) { console.error("회원가입 에러", error); @@ -101,9 +101,9 @@ const Signup = () => { 로고

이미 계정이 있으신가요? - + 로그인 - +

From 07c99d2084bcda84d13f73fe4d67806233176c0d Mon Sep 17 00:00:00 2001 From: lee gyu yeol-mac Date: Thu, 5 Sep 2024 14:26:20 +0900 Subject: [PATCH 16/48] =?UTF-8?q?[#136]feat:=20reactRouter=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EA=B0=80=EB=8A=A5=ED=95=98=EA=B2=8C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- __tests__/pages/home/homeUnitTest.test.tsx | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/__tests__/pages/home/homeUnitTest.test.tsx b/__tests__/pages/home/homeUnitTest.test.tsx index fed0d3ad..8edb5793 100644 --- a/__tests__/pages/home/homeUnitTest.test.tsx +++ b/__tests__/pages/home/homeUnitTest.test.tsx @@ -4,7 +4,7 @@ import { render, screen, fireEvent, waitFor } from "@testing-library/react"; import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import forPrintMockData from "./samples/successForAndPrintResponseBody.json"; import Home from "../../../src/pages/Visualization/Visualization"; - +import { MemoryRouter } from "react-router-dom"; // 브라우저API 모킹 (window as any).fetch = jest.fn(); window.alert = jest.fn(); @@ -12,7 +12,11 @@ window.alert = jest.fn(); // reactQuery를 사용하는 컴포넌트를 테스트하기 위해 컴포넌트를 렌더링 하는 함수 const renderWithQueryClient = (component: React.ReactElement) => { const queryClient = new QueryClient(); - return render({component}); + return render( + + {component} + + ); }; describe("백엔드로 부터 Object 외에 다른 response body(code) 를 받았을 때", () => { From 87d47a33ce191f54fb7980ab9f155069ba578557 Mon Sep 17 00:00:00 2001 From: lee gyu yeol-mac Date: Thu, 5 Sep 2024 14:46:29 +0900 Subject: [PATCH 17/48] =?UTF-8?q?[#136]feat:=20=EB=A1=9C=EC=BB=AC=20?= =?UTF-8?q?=ED=98=B8=EC=8A=A4=ED=8A=B8=208083=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.tsx | 2 +- src/pages/Login/Login.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index 68956b92..1e16626c 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -20,7 +20,7 @@ if (typeof window !== "undefined") { } // msw 버그로 인해 fetchUser는 따로 확인 불가능 백엔드 서버 연결해서 확인해야함 const fetchUser = async (): Promise => { - const response = await fetch("htttp://localhost:8080/edupi_user/v1/member/load", { + const response = await fetch("htttp://localhost:8083/edupi_user/v1/member/load", { method: "GET", credentials: "include", headers: { diff --git a/src/pages/Login/Login.tsx b/src/pages/Login/Login.tsx index d9b33691..3a068a7d 100644 --- a/src/pages/Login/Login.tsx +++ b/src/pages/Login/Login.tsx @@ -13,7 +13,7 @@ const Login = () => { const mutation = useMutation({ mutationFn: async ({ userId, userPassword }: { userId: string; userPassword: string }) => { return axios.post( - "http://localhost:8080/edupi_user/v1/member/login", + "http://localhost:8083/edupi_user/v1/member/login", { email: userId, password: userPassword }, { headers: { "Content-Type": "application/json" }, withCredentials: true } ); From f30509cd43a51e42f74555406f2ef359fa2c971f Mon Sep 17 00:00:00 2001 From: lee gyu yeol-mac Date: Thu, 5 Sep 2024 17:50:20 +0900 Subject: [PATCH 18/48] =?UTF-8?q?[#138]feat:=20=EC=A0=95=EC=A0=81=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=EB=8B=A4=EC=9A=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/image/icon_copy.svg | 3 +++ public/image/icon_delete.svg | 3 +++ public/image/icon_group.svg | 3 +++ public/image/icon_left_arrow.svg | 4 ++++ public/image/icon_link.svg | 3 +++ public/image/icon_right_arrow.svg | 4 ++++ public/image/icon_right_arrow2.svg | 4 ++++ public/image/icon_search.svg | 4 ++++ public/image/img_copywriting.png | Bin 0 -> 38397 bytes public/image/img_data02_nodata.png | Bin 0 -> 1320 bytes public/image/img_data02_test01.png | Bin 0 -> 16658 bytes public/image/img_data02_test02.png | Bin 0 -> 63799 bytes public/image/img_data02_test03.png | Bin 0 -> 18051 bytes public/image/img_logo.png | Bin 3473 -> 89566 bytes public/image/img_logo2.png | Bin 5847 -> 121054 bytes public/image/progress01.svg | 7 +++++++ public/image/progress02.svg | 4 ++++ public/image/progress03.svg | 11 +++++++++++ public/image/progress04.svg | 11 +++++++++++ 19 files changed, 61 insertions(+) create mode 100644 public/image/icon_copy.svg create mode 100644 public/image/icon_delete.svg create mode 100644 public/image/icon_group.svg create mode 100644 public/image/icon_left_arrow.svg create mode 100644 public/image/icon_link.svg create mode 100644 public/image/icon_right_arrow.svg create mode 100644 public/image/icon_right_arrow2.svg create mode 100644 public/image/icon_search.svg create mode 100644 public/image/img_copywriting.png create mode 100644 public/image/img_data02_nodata.png create mode 100644 public/image/img_data02_test01.png create mode 100644 public/image/img_data02_test02.png create mode 100644 public/image/img_data02_test03.png create mode 100644 public/image/progress01.svg create mode 100644 public/image/progress02.svg create mode 100644 public/image/progress03.svg create mode 100644 public/image/progress04.svg diff --git a/public/image/icon_copy.svg b/public/image/icon_copy.svg new file mode 100644 index 00000000..fec0ba88 --- /dev/null +++ b/public/image/icon_copy.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/image/icon_delete.svg b/public/image/icon_delete.svg new file mode 100644 index 00000000..156b05a0 --- /dev/null +++ b/public/image/icon_delete.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/image/icon_group.svg b/public/image/icon_group.svg new file mode 100644 index 00000000..4cd7d3a9 --- /dev/null +++ b/public/image/icon_group.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/image/icon_left_arrow.svg b/public/image/icon_left_arrow.svg new file mode 100644 index 00000000..6b1aa302 --- /dev/null +++ b/public/image/icon_left_arrow.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/image/icon_link.svg b/public/image/icon_link.svg new file mode 100644 index 00000000..1dc26902 --- /dev/null +++ b/public/image/icon_link.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/image/icon_right_arrow.svg b/public/image/icon_right_arrow.svg new file mode 100644 index 00000000..4e03136a --- /dev/null +++ b/public/image/icon_right_arrow.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/image/icon_right_arrow2.svg b/public/image/icon_right_arrow2.svg new file mode 100644 index 00000000..2bbe76ff --- /dev/null +++ b/public/image/icon_right_arrow2.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/image/icon_search.svg b/public/image/icon_search.svg new file mode 100644 index 00000000..5991c197 --- /dev/null +++ b/public/image/icon_search.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/image/img_copywriting.png b/public/image/img_copywriting.png new file mode 100644 index 0000000000000000000000000000000000000000..015f8cc6435b854ab5a501312ac01bfb201af502 GIT binary patch literal 38397 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 literal 0 HcmV?d00001 diff --git a/public/image/img_data02_nodata.png b/public/image/img_data02_nodata.png new file mode 100644 index 0000000000000000000000000000000000000000..54620f0af0f233a0675d8ac6b3b1af3a642ff184 GIT binary patch literal 1320 zcmeAS@N?(olHy`uVBq!ia0y~yU`zwD_j0fS$%Ylz{eTo_fk$L90|U1(2s1Lwnj--e zWGoJHcVbv~PUa<$!;&U>cv7h@-A}f%)*VDx@q=ND7-IHG0(Gm_1gZzyHMdtkY z_gIF}ZBu{Re9QyFLnv|($uh`VL@w@rtxMT8G>3Q72IYpCXHO` zruFsf*Dv3_d-uzS4+aNi{?16~x3RbPH#axW@7LGUTh`p%%=zqyq;YlXN1dM^J_Jme zshXI!UZ?HnaejG@nd(5cjjiq8+W()QpXYq$G2^Coe}8}eeR)|~Ujz3;XW}AbP8A$G z6T@j-o$Qmc2MBD%(w=$EI4NCxGCVvy{@>klHKSv%d#*Pd{okgR>rzsv_w&u0H;4EC z%~DEs`T6bJx3?cpo;=CodTz$asJ>5s|NfN^7C&t_`-H@4na4lZAA4<8yv%EcCs1m} z1`B)p|0S0mZSL&ZxMky?nnIw&$w>86hr@*>>#Jo8mwC+aj5I%Wf9?r^^k)t;PDYrY zI;>Tl(qUYB$mft+pj_BpW#>7X!f9oBmo@lbznNI5a?XX**m`R(koRt);yDo@XY*PO z{@HJUoGTp0)`oiDB6>aWo@KZUkF{voFC)mZO3<7Q|4{<^)pRjOi) z{@$EgD}VD?toO0sdhd@L_T|f{|H(dd=A4YY{C~mcg2zvvK0WpEo|m!S|Gw>eyyMu% zgL**IxAt1(7hM+$1UmcXPT$9S-nq1C1goA=$q{;9s%GRe(jjv_qoX|&mP61ULiy!j2lk8fpIi2lo(47oyo}sI$J|HEiF^JT(@ym z^M8B3eLe=xk9#WD827I~UGCgyDV)|I;VsEvc!)6urYYL L`njxgN@xNAujvNz literal 0 HcmV?d00001 diff --git a/public/image/img_data02_test01.png b/public/image/img_data02_test01.png new file mode 100644 index 0000000000000000000000000000000000000000..0cf724f556105f62b500c4aad0964aa8aa1248de GIT binary patch literal 16658 zcmW+;bs(JoAK#|?#B|qmcTUfAcXOET=Bv%b%y7D`R zewC3$3_SVTLsLQeRn-{z9`FgGt(1z?t5>y&7!MXmuU@?`QIwU^_I-VnjpRFJOVqEH z&t8NSJ0<1jL!!C7vJyS=pHtjA7x6!VKuj{8sNRXh*S#w%u}Zas%$oFOV@A;b814Ts z+J9U9d%jiHw@Ckd-gO*wEIub!h!jSR8nyyLczH0PfwG~7ncK#2VT4i7lhDF|C%vO8 zI?a%gkvIOWw8h}|dbb{JY*+9#&GdhaJZ8Z=P9gQL;ETFQ)d&t!?s%%u{WDRzCGE-q6oHPOUe<)EMlDB7Bdk18O)mXW#+11%dukO5<4H=>O6jc*|2|(pDU-paFLxKGL*C z!(l?Fllw+HG?a?VUZ@|N&rzrHmAYrJ^m?kg*0TT3Hzb&WP9Z^iFeNcDQDneZ+T8PT zqaQ;oRSU*4FFURN{N8kh{HiZ!vd!--fN_1u~0>oj^F6-M7)lawQWt2NPLw zi;4es1{s-L@AZ`7o5iw49#vF#N)LZ$PU0{TVQ^IZMz3MU+}VyLmj;F1L)tJ)^4u8= z>#P;6$8%P8oxCQ0aXj{fr-cQb!&R1By)g8uP5WCscBY?y|D_OiM~udy8u-Sbq`d{h zM}EeM^?Z7`o$&yVWf{n=hCO!Uchbm0kfI}`6+&BG*Wak-O8o59tn|Ir{*O5)j(n;_ zEwRCVidH3q??aAQ%g3qH0Qt<%cno*MD~kvsleV%jrH#JNGsnzzxzM@)o>|qTjbES8 zd%|HPS>ge@K_MG`XpP#%`tOudl~=l4*P%@MHPq+?OnC)P0STpryug-T>D^7jE$r%& zygFKn4oAT$$I!x6M%gt-57lrv-RMtZHxg)U*wKsSq%$@7*kiEvIbyOlH#fI+*L-+$ zvQRN)6>0+7ujmH=iZ-E_585d(iTfD!XC6Hxd?+AQ6@Iy zPOX?0*}ru*Up^{vQNaS)3dM>Eh;PBe-_iWe;d1%Xk=oAua_`Zi zY1}>&X}dJz6c$`rz$?*{F}P{a6kJ_oRFv661?4&HXp0S z2K%9GQNd3$<&lK!hNXN-=48Mo$m|({DD8$kKkBjPrz32`->&}=c9^YX(kjLrPGzqs zutKku?VXkL!P`0*RmznJnl4`dQ>3KBi9lyBKf`uep`l!?S)_58Xb;Pji@xDIvvqpt+w$L@BI# zy4jv}_B-URoc|p=O%}*;n|Hs`Arg1nkgYUq{FwdKV6ta7gO&r=vk$mDSkxrm1YWgKY@c=P1?Lm^=oO{J343}QKOb{qHUY=3+*z!c8Q8Et$~oi{DSuYsYY;-ix094@YosD=ydBYOIWlxa z!~?Fh--Sp?0=4B#H7_5lki3|2K6Yd{mMY{ygP*vjLu+gj9$7hIG2h)1YSh&KW=OIYrS3I! zk0+$Qu7tO9y#hVSxWgvD23-GRmI6OPX5KExtruhBkOprvCQ$2R=pMU1hyA?E7WL8f zvvUS{AI{?f4LWt0@m!67K=Nf2BG6?hvkJ* zsOn@W0!sP74~;^3=FQ+#8xaTl{IcD*@KRz!CVd?2Gi#^4IkS-X*`G!g25tn_sXVnF zU-*mvFtW=cu{Bzw(9nUM(KWx52&w-_|KtIVQ%Rj;g*lRg$f**nNClm3nUIN#}U z@dFhYhhc~hv{9E-%&~A4{vJI0lx91*t#0#zx_1gbYuy=ob+-rbq;mx(X zHxi4UV7ot4kyhTG_X}wxzByS%@{N?Mz&yWD;Eiia05~K3@09u%jRsy?=;8Z`i%5G6 z__uT|urO|>3^Df?qqMa{E`@Q@9iUc}FC5ljduQ%Gkm1OJHi@Q7G%4Qz)W_k|uY=vtNQ`WjV>VL~Z_EmI2rt+gd zDOCQg8RdYbH%nt9c{Pz;|eg*f8ZYHDiyL*F#sr?MGPqe|bX zX9+t+_fiUpHLGL__&(flljGvTnW9WzUC4uXC`W?r1U&brnQaU?HR?QQyjy3Z8Gba- z45jmyWN7{VEtYlh&n|{b0k^VQ$bBp3tadF<+<8|8!X=gRcyo6r?JAMg5kGJGAy=ZK z{CGTrpB1R9aV}ktx>%oG>182>uNK`^bHogaIChZ-MPTekO{FF_#oUNeG354terRkM z7b}y@e1#UXDSTQdv}oc6dXQ#gDo{*yBt3}ITde)*F~ZD+d8~)>1Q3PeGZVfvV0%Si zNzp2)CI309duAf1k(=x z$Q^NruCCNIk6+(Ep@BMlH55NWNy&Azp*6EaWFSy87z?J3I-pqb{rLJ%0vj`xh5w*5gu+?{XFXqMc@YN zbYCJBRoDpwfz7G#FV0A!L_m?LJl6=0hS~!U$Uv zvL4GKIo}!A8{`&6@Ht+MFO`oFek108@nMFJ)1VGfLPDb4JbTKYffNsMFd~H%D0n(L zIv3N;!H*&Zcp7-T!XZy$`*YRR0@w2!ipO)qDXhRP8H}_q29IXs+fNk>`TQflyV%1o zic+A3fn6VN+_cNJ6?IG}RKI2hZ=kD_C)!t4;l5&-3 zCIv^nz5WJST{Fip0(K)}YVV|PO#jY>YY`I;G1q(WDOy-^?`V)Jp`{=v3f)p`r$NNR zD*~I9A0|*uq1ZalGqkYt-u1TxTl9+GN==cBO879*Jv=!dH!`JV0?_$9RE-yF;U#{ z$d^XKwdpB{$*$V`)8b)kv(x6ZBmlrDj9JD-3|_kJ_1@@;C*QF*Rux`_^6>zn&kN`9 z1i-A8ZazSCnp)H38;Ib{TE%N=X2BXsJnW()DXb_`pa{-<7msWauamVNgd&pJN~eS- zC@hdl^v?In!^cOjS1Y{}geWzEGGY^Obyz0wri_A*ubyyH6XI8FB z|IG}PoA2bp?xoZ3wDPice!nJ}r8Y!A2TF%FPi`i+@we$p11(tt5Mr`9C=K9Qjw`Ki zfu)GzkMVx&f2W$IUVL@9YlW{^qM9xH9jOGqw;7<{ee~n}$kh$5{Qj+kee)O+nK3BJM=_7fS6R%W0SMT{Ml_T?{S6cae;<03c z9BhgWcyNGkmo8c}9xEh}e|~{y?VN}u+mH8Y5FX!G!6etLZ*rp}TArqVZ$bpz_|Ax` zV4sYEhALQvH2@&KU1{au_m$_U^c=chO#wPUJm>#Vz^Kf9dFtS4%DyiUlex zn}AR<{52+c_;28Oe8v$&0h|*=kuNm8F-kDz-gB!aUrI>A-&vzro~R27=##(r@iB#E-yJAuupDtR zICPjx#$LMv>gaH+;UN9|<+$@6n@qs*eVJyF_8j);XT+X`-&=Y}034N{)5S{SvuGc$ z^7xF4pR(U1b@|P#BA4GK$Lctz5cPN{m^DaD!8qK@=1U(8X!N=Zps9+*Ig z%_m_s(p2QSuZ^t6RoR-i5Cj0_QvhhvSU@8{5v9;n@78~{mUO1%YT`9Ea&%I^Okg!C|a!Li|J#uOxr7kZMcbgi|lJzAED70 zR(E*DU?NrG3kt&%D&jh?Y;@oLX!G}XRp;N3XOrv&M5&v^L7&H3`$4J8j!aw2@0_V~ zC-IH65&=+i@~%K4wB!}U_+fuKOekW8(MIn3X$;g71XWPkHio} zSlcJWxD>tWxk&23?R`%fP8Pfpau`d76P_dyViUJN#bTH`L;}0vvTZrMg=VVF%;ZM?%)FEJk-s{My3NFny6teNY$oOc(~30OA-bsbCjZ5G zI_9ig^j2=`^d9W)318b|5%^~Y{m%R|T-5t8#w_Gf=jR_fUb<;}Q;S)|Kf5_C+gZXM zmdnj9$Mpr!oD@r$V8RmP*!jU1_jZezL{`X7BlYf zzuep&PEnd~u@T?b<3Ml6=xOPFE>OI5hqQ0yjvqi8$$~u?AHr1b$9qNPbd|}))eCIs z=s$dY^@3cq8V#@rNwPL{Iss+P|N7rgO%n2A!yg}TQNuv!OT{hz(Rp~FPc?fy|x;+=yr!nfs-gzJoK1cR zyvBkR6-cE%|9oE8aQ(A_BggDEKD#O(_O(MoiD|KjM9>-6*MH!it@|LAPL{{Ho& zH5eX&*8F_NZrSQbJ@Jg{e=R}*=Qc%Ni5#QcTMm7;7hIOf)c&aB5I4+lCf}w4U2gFx z^gZ3s?+O-wQL+H-VPefG-o8@GB0+g$QFo#>xpCOjw_K+pHN%=UGbqelBxhA(D3dc< z7xK#?mO3JO(q05Rz9u}!d=%l58%U1D~-u#HbVyd zPbSFnj7dmC{E4MNm!x&fqJn2$w$5`;b7m6IN<{c|{_8jhqlPGa7+OmF8xXWXr`77u zZyad<06|9!j>~St2|e$^FM-8W*B5Cec+IeU=hYA1Ih?@e17zCyMhBvY$H$p#_(ly> zS>auiG>@%3LK2%n9f10A?E1NH{J7dT2Dts}*AxU@;V`7jAWT8dt)cJmO|M2HA3Y)~ zvE~L8d!Dxl^<|M2{D}g=uz{1SD|rB6O@9jR2}2_0vjf5UX#}4sC4(#D$`B9`X6o|Y zw}(N90a2`C2|V?0U1W0B2L-Sut#)O_FlJpg@Au`X2e1#LH=pvKufjiL7qvLe3kde4yqMA(fWW4a=tK<-O{ zT@tO`!aq?*QD6Db?sr*8wZ1d{d`#&^hCkU61+Rn}QjpLc=BoIYu&47?69Jqo4`|6V zL#`qNlU6`)7jN!+f8gA!QLD-d;6K#N=Y`LJSiP|q-4K--P2>)TMV`$#6xw%Wd{|GW zmo6X|v^ShC)x^CvjmY!VaC3bi@P6a&)dc_>L==DFd%IJz_wXEfF8F zhbv2SBa;Ke|B5Os=aH|O$`z&hZ$z<{Wpn?ZShuam-{S3BYvY%h)Da9pcNas+?-EJv zeeN#oZ*FhX1I?lpZMd9j{VzXR4}VvjVHK6mZls>aS}gL?%q94c&QsK?FZ~^9(-pr) zDjfM!6icQGtd*1e)$E%;%wr=X7`$NE`&fcMq%5dmk6LA#3_22ns_#9bjF&pNJi2Lq zUWA2(O;qS{erGel1H6-jSJyptw&PWrHE^M^g$^#Y3_itlHD1YHf+&+wWqd>_uCUC^ z%rh|fzZQ#L6R{-PKvNIqa~r;(16cWuXPb3BS_Q8JdnRvjy?>-I zJw2iZRt1+(e8g(8xc|jVF9zV=n%&lDCee#}ui}P7`CyA@Q`xlOeE#MfKB|>dtZbnU zL6QQI<6<8VrE%t#+Z5L(G0zuqc??4*@?~@+(zO(YNZy0UDS~rs66x=HIJ$w&U3Q#E zDgNnC(BVHVXgh`$ahCf^xejZ601Tzd^-*ys1qMP394x$uxjZ zGAy7LcMRZnPr#liL~hIx^-(>_jEpvEv_8ivHX=X56=sa3_!t)KJKN#8&Sn}J;li+& z%tG;P0B5PB+V2@VjWef53IEC;|MtiG*dL#PtGk_eS7_c7251u8s@Wn%S={j!f>7mr zfEAvs_u8$t3uo{QGBTU3_Nc8s}_updEn4(u$(e!FH zKZyN3#;a=razq{3o+nqZSpDT<)(mwN99&4EQ}|AW?2xiY{f-%PQ!MBVk%loP(_wAD z;MpnomTkg1^PHGl?i&&f&(?UZ*%3FnkSq1FDQ;T~#C}uQd0B`*Jpx~m$5y~6R+?{s zjxs8d^2^rgGS)IRGWuIihYK3xWy`|*ahW9Xlyz;nriXq8L&As;?-2xaA=zSncxnxy zDcpzBkOlV+Kx^H;^DY?`*f(_Kq@(i5Ux+wKJF=xLnslZ`f**XhTeTZM=>Sk1 zAK0Q}=#lAMpBSS&XY;t0pfNeN@nu>iucs!WBCnCm(S9NOeSi_xsF=d?7BC}Ijv~10o0*m#+5ms&MLjJx=FO%l zETH{xA~Vggi880ATFd;$Mk+M$cCtoM##$+tbls+ikEUmLx|Cjv+By7umJx!2` zw9z?Ij6`!ds*+m&mG?7)G6Zye{8z6DKPm>#0&M%Y#-jH-(&}1IxXyi}IipB+AW@iy zt!j|>+cd?@S+?FGT$zcpwpHR&4?+4^hxrl1a{)v>&g?-VoUrW7IRIlM+09px$zvV9 z{`=#UMi#RQBs^>yv)UK?R!N0l*mL*m~_94m<(d1;_-l zi28u?VTl;A)#bkOcIS5N#&BJ{IM6{vUa!1O`Vz~=DKm7Fg*P-e*@S388L<> z;lii*okg_i-+ak6_iATw=;P9p{Ld)%lidY}hcE0)XnKrs|n-xq^RH%-<5c@B@=2se$mRHJZqaJu(&iU^d1 zX`9VB`n8+?LdNrQ*iX!#^wMe&u_r12ANQOiW+pmsG;WnaJ+j}~mIk(anAhh_>erTS zk)8cCoTfB^;S)7|SE_H0aqgpB%sS+UG6g}1G#fQ-!tFU&nP~N6r7^D3itWCq)cR>_ zYkH`DWElZ5nG${x{D%`dOkxSepkur#EG)9=$jpm$ROuh)q;$a#H|4p#>P~H@7TDu`3&sf) zqEUdD51pGM0tkB;NO%@TnSXX6juH=D$G1J9zquT=nXK==*YEP=U`gdnT(Na7U(&NX zL)cFpyI-(6H0HrysJD?$45h2RpKufN$9p*C&OsE1UR{o86a^X_ihEF0ejU?m#U|B( z;YfjKQ69PR-l0*}Y?c)!-gvtq*rUef?MkIgB8mxg zE2%ff&HJruC85nhI~=C=Q`8(B-0D@PM#_}p#5w=G`Drylvbf?li`yf$4Ya!L)y55o^XC9DhIbERI9D_tFS_F;Ju7s zgPk@;?F!WUV7q#e9A81KJ5KmZqkU39v)3l6bMSmj%=&)pe6845ekI0+`%Xba{;JTM zoNvK+h)Pmjm|#YrwO^RJ=vd4O57mxThde*+v(d;>jw4F!^81pDJWs1#E>TI;P)Tu0 zAAGU$^DF#-D``CjdF?C@zwq;A==SM|&g;byciS80&yw`Q^r4JOX#2cPf)gBxL1)s+ zxA?)hoQn-9t;TYe0R)GXC2G*ZE{sf@UGqgm8$QjThi#iDt1jPs{+g0T-h!*KY&9r% zMJ_xeS0l0U=N)M5Nh?5lJZG>VHv@@Q2(6Ran3Tx5z z{Axv~2uKC=n!wj?UX=)F;A837=&L}08(bNe$Es8QgRvKY9H{vI(t4uWlV^IwxqYjG{7|MU}KLK2}RDMZhxG0FnVfw?Tbg-`_9SB#H8uXEROdA?yW| zrc&M>9LWcBSM*A1SwT->IT=4Wt$$RMj)rTh&w%RZ22dM7n?!v{X)sh6OVmrp+EkFE zX8`Ox{0em-!6^GQf#Ev-M!#t}y6*Bk=r*f$F6}r?f{g=KqLw?*8Fa5L`~f(AfKbmw zFaikY0>&c>K{X^&x%y|_V0N|@GPFlKrU8Nw)uFXZGZ9EjOH0}4J9Iviv76?@hpl7D z{;#eYH@A>f&zP;v1)iAt%k#a7j$#=5xeM2KD{p?!otTHoK-xR@^Fx@O!N)DcbxB{b z2SDi=PMkCDY=~+1J|Y!xUM^)E%>~j2XgrAqsTSNUV;TGv8SI0l5J^s>CQKk0p)2{f z-A`*}2M|-Kkf4KuC;&dvAX=5b&brfY^(>1W2zfYF2>M2_z7Mj8N=3b$p?Br4U1Ym$@uKd z)e#_gZazNG`Ucbx95YemZnG*)Pkp|WT8B9fFGdct&UO(|K;9#PT<=@Mq04JgM57#$v`HTBmYV@mWSZWH_{rcYui0z9r zLJC;^t_H%zsbBN{2(jMVAXPF9eFZl*klN$2S(9rz~oyc@skAHVONuw$VKsiM&{Ny~qt=SR$*t#gYQ>iRp)5LbX zffsPL_4`wXIP3deAFI*^ASOb(b^d7GA1A?frb;ClY@Ds(0f(VUN=gFZED6W44SK(S zldjcKnL)g^W7>Y(rT>v>X_ctzWZqUT5_6gVx0T6`7!<(-ixS&s*G%d0|CqC9kU&>h zh}aY8`=B0!f<^j6U=#Aud?u2;VC&tr%X)V$Z{F5`+Bb5fGx+;BoISkM&NJ&CO|cw$ zYjlmR_22PcYizdGR*4d{k5#;S&=uo_Oyw$Dx%i7zO^9`%DH*oEPH!9xx#A)YtX=^acN&>iZZW z*vv~t>Sr8g%3FnxfE>LekA%w`D8-cvWU|T#s0&MhJWC$1O9dno>fq-xYmp|qr!wz6 z@BQ9{{f%HhP|6ajWm&S)ejKC<`A`M;FPn+!$erU+Y)NzsFwDW{+a0RQ;?Er=z;&Jv z12Go8%VC18CZ{D@mZ7gBIFdLwBv$WKq}FZ`PC`z!kB=Z`#U;pv;<)gbUKXP4z3(&^ z=)6ABDxn9;5NW|L9X9~|aHXs^um!m@`-Dke3>PuSji>3EFQ8rbjW` z@YTVb+BS*7k-1pS2822Qq3F{RicRC|i31cpZpSTDHscNwGg~gTEUct1SvfCmqzp>j)@5#{`A92bC=! z!Rqn{AA7`zCwP|L8(9;o5YtMRVG=^7tRs=hc_co9l%r7?-VJ%s#gDlaAC6AjEnwMl z+!p$8|A{H;@JoB$1?4R9tI+;O=H`#y=IJGQK!;F=RC`AXe*tPj1EyF6A zFe*#)T(gO_v;{k}ie}vsGCJ?-Cdkvh<#%==#Nt_LZq6*pkl-K6ghWLD#N>>fL}-IZ zsi+N9n;lG9H@$U@BTx#(Vm*LlVn5NKa`T@&5(0-F`x~$_WE8mD%)O_)frSeqfM#Mp zL7Aqt)$%YmgAg74k+&Twj1px%TX*8GgBCW;qIQ9gw2SPI_m@W_CCx$SO;@!IdzeR? z#%*pmW=*l}SbmTBpXm=DNep<8dafL;woRq=Ap>g%!<{%X-nk;M1c(9oC=QVpv1U9C zYH@E~)Ffl}qB4c`K0E~xK>=%^^z&wo)2(N7`&>7#20A9CW2*&m8%)2TU-MV&_6W5C zT-o>cqy8Bl1xrV9~_n|1=}DF1D~nI(0EMet+%aW`6Hq`S{ng*_TnegsL;# ztNS~``u0^xx<9aGd#^W%L0#xES_ARUYT|92YZVWSXxEixgBksdTz241t<7)+O zQh2%6uJIPF=9AWk0NpLW(idc8aVv-*7IXX|5=GJ?U{}NKdk1}}X-P(= zQQU7JzO>Tn#VKAP7x!`%_4j#3Bl8Z~_b+*UI5ZXx)?v%Yi)1-JU$@{ItmGsGuh5>; zYX`{#A!Z1&T)I7GEPW=Qqhc%pv-W;cJbTvqppB=pQ!F*(>e@tYvROhg`()&J$kI?Is}S?vK1Q>dIkU1gA0{-K8Eoli?cX>7(ZQF2CJTPQ=N7ermq}e-Zui3v4h}|EaK;GB zqsn;N)y*alHtOE7T8yw)Nd3*74dwaexKQ^JE`KpMyg!}SiKKFvly{z8DF;kc#?*_c z0XircZ{M6Vod0LAi<#JG86ue=dSh|CJl7|3SMAwqvue+JAkYbRy31gLRfccDkvgo3 zf(<~ha1(a|G4BT~av@NYwBSV;E{~ic(WPdC{mSq4@{10O8B_!gf&7VKL4cnlCwlnX zLk5gUG9*Xuw#D@wpoh+xh~!)Gj=J6&?=;&QcKqeX7e%A?vOg|;hkSmLj0I*H%XyXji0p?`}LVV;Jrmq}x^=y{? z)$r9}wW}vL8QEf^;JGZ9myjv?x7A(djK8y5&6EqkAwFaZu#@uHz4G8zgtW+vxZ}*O zxyif-A)cG}!8El@7P9E9;=4lb%NKS>=JJIjqCqNo~DTFn0Uffm<$9m?~mt2k!7`9(i@jg_Lf|qJQqAsO(j&C ztCauenP7C=|B*=Gv<9ma2sGmwnn37b7v|f=NI#!|tw|*hTYhD2Qh~|+_@C}~oab{Q zL+{dm0G? zaTD`%r$}jlO)BzwA`3;;D}u?Eo1Y2Ll8d2REf|w|(lkOmm0Gq(JfdPPd$yP+%!Lw` z5k4q6>-MI7HO9X}0Y$)19pdHHV;m~)Qavy5# z`-egzu=y^haerNfnOnZO3^O=}SjuBlZD$iGez&{s@s0rrW6NS~M2!amef|HH#83#n zmLE3^)Abq_X<$lz%c{%NORL)LJUw)Q#(RhQDj%Asq+jaH1j7y#M(WP{JRiZVqFwT{`2D3^yhS~+m@5$`0C~gCUa6LPq)pGa zmdEqbZSQ7rTj~u$>gVSDn~{FV(m{CRXAQRmKD6Zk61PbyrNL1qz#SAe|o&H*ymUE zsny=jm>iXCRdZuQA3ytMMi?>FOEW;Q3wXojBpFH4g+2Y7ZR+{H7M>IrtgB`AQ=}bH zr=h>btzZ|COol&cQh%i5aHDRpbY2>`TcnPXSUw!V77)p zJ~I7r)v+Jk$A&7sl~2So71ru0Z|&=T&sMHm79Y)>Z29yjrPP?IuxE+!LlTLSu1n9N zVnTTE!NF z&;iv($T5r=>qYuGV`iDKn_rKVkK$O1WO6IbgptjM}Zg#bZqZAj> z#Lvdu-oHfW^_s;FSnp>x(Jj{9+3Pf-+-XkRufRx zdl$lfaL=a z=n6br2f)u19?NR+aK|3XLxBpsX&ydzJK@cbu!rM%Oi<)dS)d`uO2cn49MED_GWo$O=ywXysbh>>Wc+z48t1@xj)j9|>tK{mnC$+2^fgs)ZM3NY zrS2$~NGD*Kv1pg(wcgX#FW9p9N2XIzH(4%Cm3jgBZsJ$9MsY2}NEn3X&rgpr1RNHf zw?i%X_pZAQlB*$Z?!KOnd{^W``5j+a(FuREGI->^S3-|H1F{9`fLHxOif@q@-gNv? zvjDRS2tL}uUQEQHZwwfBS4R~v7h?XYk-2G&YXC?Ld<_jh-Q6}i;=aeeA6tI2ifA=I zzLGRFLSef4d!oY3h5o{`w`*jlU~YP*RR1SoxlUQckJX%Jw|`9VCvF_u2bV(g{^C+y zde#Va{leuYCnFnm?Mi*_nf1Y-*O~c~GJt;1|L@s4)%LPl zzQspm6#%I60V6hZ0UbToXskT?y1gP`DNrSf$_y|C^%=myc|fdfD20{iMM?Pg*dEBU zd9vW(d$0O@DD+D|XYs8|sYSq|F++{lF|KjjeqyqM+FJjTkL%@$v_%*6Ly{P?Wkzj! z(WH~y=5L+u6n731S z8K{d|ySqG~(I@g}8P60{(=l<~BFYRFaGd`yj)a$%gKLn(K3Hz47vUZN63equqz;a9KlC8>Rnqj9gosPhTA4r&f35Af zvloD4lR$vrWoj_YX5C>JP8sV~Ap7~d@FWoab`qh!o>HCQoXmU=mP7V1btD4T=1QI3 z`ETdXLk9cG@pvZtt5~r(&1+zEk5MIq$;gUy`J5lj5GS55XbE18gu+H8rGP?QXrVQT z4V*U1b#G} z``IL@#yDl>H6VRKUy`fB6bFt-=jPvGctSbLz#^4sq5?!{5J*H71SXGzkm!=q(1in|BZ1_%j1g+Cu3U_&S)~P5x-G6AUPp_KFM_DawOs@* zILCzeY^t(1^|PxK=pq?lg4_8oss0qIpN5U)KmS2=M^=NQv#T?VgpX+xTflGr`k%MILGPiY@`uSfhrr#j-#4 zg+l-iMD+9HaR^Hn`8!o|p*I#0=`MV9;HGeQPz5#W)oU^}rU4)or}@t|t5nJ*9x#r2 zXXlL+xah3me}S>iD)%#B6hk|-h$9X5S6GwCgV+LW`2Y+fe$s;wNr4Vgkd=T7KOdAw z9m}!0fQ?ESHMuT*89EJttK;}H)Q8FaY8gx>jE}J^*^dd91YUfFOT2{A0fP2X;5zoM4ef(d#qAMyj!Oy4?=rVc%i7bz$Nd8jHUCw15)dSBJ}p}`*aYr zh!^T?>JP}9nIkkzJM$lQ43gG&pR=fiMB{RRlsHaMKGMF0|Fnv}B%KMWp>upT=s@Z?&HzRJSF)`(Bmz-aoR zZ;-Sb#DEz*HnUFS&t8CArLC>VI^z16eT0c!R)nN912)C6qkl+t@wy%`8TWlyJjqj_~0oturre&M}t6o*5 z$h!W{NN{8+W;a9xNS)Mu%36=~vxI*&i0J+RNeTw8Rl5*XoV{R#MIw&t9Es-J000AU zbDpdC^WIN6yo|+sge)wMj!NsYoj?y3_D2oEVM}$fp_2{#5gE^-9#9-gvF?R>Teq_< zMIbHno`eqx5s_(S{rv1!DV43PT-kSH4cXRnnzj(P{s#|Y&*^$C47CLyzAPd({^3a% zz>(Fi5af)@vS-Z@bTQo;N|G^Qn$9YRikQ!;oxAy3WOFr!8cOwSj}z#cGIheRrhId@ z9bp)}ZzMvV+V_VFQS0mVOLz$^NzvSX5SGLMIWQWV;qQ~H*iZn9WV{zKGSJGpoo`ZJ zKEHKLFPMA`X%g#M@TZFyw;hQYAU{x6%EK=lf-WG@THmq(Y@vPcKo{mAn2A=FpG8#~^dmQzi1so}*u0n?2vR>M7mWPfLv{{C|0{|f z{BOA>1=SV^pvnDfjaNh$;Y{tDwKveZ+VPd9X>M5m2F*B8;fHUy z*n8S~8}+2krkWy;Jq61C?QvG|)W~NrrzbHj{}1?6t)%~Q5B)uLDRP}k3pZnKZ(TZr z&dI)e-%gQP zHL3_V_`7l~SeTv8>M3ClIToYK{q6fqbNPArohpXKBPvdgtY_`$Oy|j*v@7^Ah{^}K$iP^xzA^If+HxKGSl$P$cew&@$ znEh4`g!A1`6U7AqS89m>(NHb=D>@7Net;h=tF^85QRnJ%$jv0|x_tM7gym$ZiF0yV zyKuzoAbr=c6fFhxa=gc^5N2Wo4n1a2m!X=P+V4+{VNKcD*{1z!7+`U6@s1xk#5+O2 zK_|&Rga{mpVdg35XlQ6j7(Hx6FTX$%X~y#M1004{8ft8BR<2vGl|^p*RsVS(#W=d< z_OJMy2sd?LI{rSm-4)v9k8kzt#Lr~&8qmz-_(_m#=qmqUKWCNYN8iwTRnCBjI2dG? z_~S5$x}&J|`SIlB@eVvH>`{HYlUC_{Y%mMeSryG%x*hSz^xb}EqJMks(Rz_#?F^p0 zlUMcD@b%r{%=#&G8i*Y|>UTGpl_|6ahpp!|Jlpnk)!%x5EV$py<-6+f2WAuxGc3H} zN9@WT$_o-d8_;caE$O@es_JWgzA)R$^Ynb;f8D%wQfM|Rd>!3e7lY2)!sdO%|IlOd zAk8&obn~yFZTXgxiQMjFu zWPMq)e~ux#!mF3AtM@C{Dvmyjixqdm*gmAk9&PtM!|OrlEGdW8gDhwKlx|1bZTHJ3 zndJUA>u1k@j z#S*mwIV(D;HwP{{zUXE>T^8y-9X+SbS;PrjJ{<;Qi!?Gb5~KB4un@n->hr%yTcr)q zB}zZF28X+(In?XVY_>d{4>GJi?C|P}FhEQhljklPTDCthv_0RqiQXPL1vGD*8J~F1 zMp5#g-0kqTd2Rh@#^L!YKWA_6 zO?1z^7V~2H*u9}YC!CV>xs63a{3j!2ao|AFJN!|;&1gBB_Sx2dbvKi6TXx15sfn|> zni5)UOpJOUU|QRMTa#~4>?7GRm@C3$f`~8NP63meaTzjY6~Uw0l+Wx@Th`(odjI3HE*nX$G9Ws;c2Td?JF0W` z*omSeODmwvIupe$@uj|_J}Y33cL^q0e*fmO3LU3T&S^viw| zhb(#{9vR z62iBWqK}iFo0<1ZyS@Ew)MS>zcomRxJGuamr`ugC@bvQ<_LJ%Pkd+AMlc+`Y^@@*b z{i0*Dc?u`r;qNZObFAJ_|HmPAG0(q&cj`)*K3;3dFxutp3&IBS(+4md7I} zliO=7!9zCwiy_}i^{}~gW2)a%VL#RVU+OCV)6J%?a6m7Km6W7|)x(A8^F`urCG?== z2Hddh9)+H_%nbto>-LjmsBJ~t<6>KkXd2&o2tK`&AM7K;^FOC&o~HR>$NKXJ)quOn zn@P+1{eme?4i0zWoyqNh_UPB4)FO)Vk1OX%utzs zi*af>cOnR{^cuD^-@CaT4e-|(qoTU~E35O^%whtpk1XL^V8IJ8rC^EzT!#Mn6#E(H zPo1pD`S*BDRbhw*8`+qsGcYE#_J)}6{h)@EjI%}9WrPF<>`Y2Xak?!V1o4=-z+^Li zXkxsMH7M!B>#3zSy)+OGecWY|~t)5kylTV%D=!a&@N@No=3hta$gy6!BjBT;}LNg>2QxiYc+ zPlFkvzSO8&ea<6q`P|Dr!bauX4#yrd$Z}I=CH(G|v^uYaCma#$wO22eSt~I2WNqXq zQB!WhDZTeTNd|QlTMmquJ3>ltPL?|QU+%W*OXZWba3p84L|tD-C|u*FJd2Q3S~-jL zP~v%Q=sy3MJ#E8#ws~c1D_-^Zinq5cmKGp1CfzPvnW8rx*z`n3Zt6>K?EdmCs7-8t zLg05xvVjDXExoDGjI@`ffM^McDmZxl61td9FPpvok3hTtUW$JNA)HP4?9`QC49Ad) zv&Vu>p|xQ@UcIKpu}hp!chp|i>_oXx#;=0x2|^yw^4_g4*Rz)g4n zv8G6Ilf2my&e@1ZD>wt<3!GS)@~TL-C)lPqyrF5>VdLUT6&Fmw9ehT2YisN(WZUJd z+{@j|hTidfeDcKd^bE}9yCUS}Fs`OT;Uk-IK{(#Qu5PFEaWXXIREfz_?gFgxkZ(e} zmhOR<{NH6WjIGE?EW+}bbAm0|VQX;I;DQb}Bgsvg2|bgmgS zCwoem;>gikxtKtH8+#jjLAAsxxSjnM(y^yC74R|cGuTg&xUpc9)GQ@5b`ROOC)4Mc zq-PuayL3j-PMmj4yhWtv?UA7d^$t*guH`#yr)~#2cj}QbG_Zt;k>^?3oriv)XO{LZ zefuVODXVRdqUYUJCV`pU@6*N9wvOqPa>rXTkD}EEP%vaH)7EAs(r)wnZjD*Cov;ghe$kR8ir(-IkF zpIY=>9o@do*n!jDookXoTqcSf{y8Pna+s`CE$|Gro4PcJ{#u)|Qcmj<; zD;8$pu6?*<9gDaT(-hLl_76ptpZ0Rj-^||%YMDz>r1~CcW<~x)Jbi(g{x(g&9<{Ar zjnMqQF!;|MOniCfDGdv@rTqZq7OlAO!9sdCPi{-!I(=yvs&hK@`uD10DS88dg&gIU zCaDhNB1n9p3z4EQg;gGqhL>S{)l`_irxDc#KV-YS_N=bb??b_R0=Lb>n$g&$BHvA( z1dzu*KL`|!Xp@HZYVn&oHK&E7!|!I`Tg17YmFQUi&`8AJQH9m+FJ+Q zCI|300Rt;~b%K5}kNG{qC8Ia6{))wzs+B>6rgI3&PpNJ81G*~obfqMWF2 z2%4x}fR|C8lIA_{EKH=#J+h63_#y9_&Kh}S>^s@A8U)UBZ5}Bx%T9jaoKej2{fXqq ziKY>bjQETlPVOo<)o~R312aCHO9kGr4Zx7XRvmw^IOT|t8%xuP0Bu@ zz4dLKMMt1r$Hv;cy4-s`^7C}z8LNcMfd5tFNsM|?AT$EGDLfB5(8M**N|RTiEKPOY})7fxn4wOMfyc6B$fmxi2IDpCJ9459BwN^+69q;VMyh)?g9w zLNe6h!;BW2sQ*nD)kwLzaZz;86%rZrMz!NE`2Vf#{hu7}fA-C6sS)4tT`4%_#Gimd z`}NkBmWTV2oOB_%ZG)gPrR6k~l{{ZH z0MpSQvfcXka&v^Rfr=B??YPx_(f7qJ8>=9`F9V=#o*#;nwC&(56maAIos7LnEQxRC z(eh@FMZLH{WcBR$1WbL!e*wF!YpXRFySJ>2A1VThlb@(AF`kIm(gJTs{ZF&t=E5?rgDT&+YuNfB}Vd-&bFAs z{ZB}FY&swA*2h_NiY~K}g&7Iw%eaAt->C=DE6!)hf`fKQo_`vU4*oDy0-gP=jjJHi z(|*~t!;^(S>vdn`$Xq=hA*oHumeIvx80vnLZHCW-}WeGaUDpJ|Ba z-mquguT+Fe|Eto{mmX_=)dZjz+H?CQoTEbE=@<6q^|08Ak}0-p6(ViC{I9;DTm+ae zS{=bv*z!EtIFJ0{jQnq*QQfYM&zy-0?rwxZ+EjyFhflf z3R>yytzCxtB-lD#9FY4e?f}g~V|jzHp-AN7=ctxsmk&~31u264*86`IU)75+)p~SkGoU+on#V5yq0A95!M>0d9Si*!T^|q3SPJJ^F+jnj2KkdZJcxqShRH$AMGz5p`Bj^-qa035(7roXI3$l`6S5@duYjK6CsOgfMM z{jqa-_U(V1w=e5Ua-Ge*b=vQJ)Ikz#H^b#}{eF)UboUs2#m+W>gGxze!L#46bR9Ma zVu~e`gcXFjx56f^7O zgLlf4P5iyiJyM$sXlXA=KKaa%{p;}a@DDC1t{7>JnkG+?`JDF~;DNdw-yp4)FKSkf z;#`mU92s9}32W~!js+BBKLSEU0xZ!IYPOhxqO+NX);hEmAB_FZ^-Zl*27AV7fSs-o zmqNE4}BWX*0+%`VD=8jLXmMYNEZo#K^w zirweT!aXx)Oiq1EO@GH%Vk7%RB?Iji1`X*V@%69S}Zb{ORAN1Lw?wU;l z8jwz?GOvGw7gGd%QtW`WWLn`%>+X8DU+B>qD;v)9`{MkrGbRNCHPiU`)WslJ>1I66 zAM}TK;3Iz=9upEy5zc&FkfNawdG&1jEaFv}{r^n5|=^mgDUx3neH8 zCVK(sEOg(H+I;6|HX&2_wQu0wRgH&-e8DzSV6dY+thF%1-JoT4FAcy5Ck|Q^*2gUd zQTZpVqdYq|vQDR;w2T;;YtwLC2q)y9H6?3HS1p-y!;=rcth8`v;vuLxO2QMQ<|=?; zi%`$S#g%$nl?V|x;oT}bO%I5vTi2nbUc`DkvpjmO8JwJtMIHp55|4wAxCW%e#Y=;% z6)k;0x&o+HsxzdXpRuWv4sn)v5ZUxWOmkxIL9=$6bToP=8cMjjY==EvQ0%~x(vRp^(Qa#&OdJY)>T0vRO$sS3x0I+Im81~j@QJN zHtKJGvSZdX{k>N@%f`y0yc-Lr@B1sU`#yyiLol|MHGBoxZCKc{0}wvQ+LCL#NP9>5 z46G(7e7!HBs+IN`9At zs`6{(GPDFkL(wSHeLl;~RD8WqDtC8=8}3hljjtkUpHqsHZ~2E+lUvT1%e9OPj_)Q45h0UPw4#3U1nb6F!jvohgu%9xlgx+U2O0B_{Ka6p)U&*mq^jPc z=Lt_x#@9<)R$~xGwM$-6q*i*Uq0zTkm~U6A3+3iQXO35`prj0}#vIgj_@&Q`py;O5 z%yril$tB*=aTo!0R@tA4&5y7g)df(!ojAChn|zMybkhxo?TXtj=Dz)-M^r>9zf<)j z5E}K2_z|=!_*aa28pnH+?mn7kGfT1b<7)|>@U{s8^^b(FT6L^_AdpU%H+0&pkai?2 zjyR$7zuGO;%Iuz@@gl!*2e^&Vixyg@%N@D((S-ovDbjA(?}f{gV_y7QbfNiCg{tFeSfk zYJ;&nKP=E%#=VaiN<>ELS?_v@cqOgUS79f)Q9?_ zu-E(=;6Mko5%KEFk0ksbCk=xExmqSc8U@Sj-yb5Te#%gbf*mRLGN$bab2a5)BsqJm zsv5cGY8DKsda86=n#cB3ZT(2@G5V%h;_1UWuF|I&tP$9*O*sLhJ1&N8*nK3UZO%0a z^s)9`iBR9YV{k)$ZGAamFaGAyHruFPq~lVqWpU}Ayi{Eh-MpE)wCd3Heo!p$ku!zx zxTAzYS4zvvKiUpV%d!>s%^DP^S#3@B;PvlY!!lUPW%qgzt3iF!x?_wu(Gjbf7v$O|_|`2*UE~3dSBI zgM@?};&do?w7mR@w!FJ-5c93$>|C?W!4-I&*T|e#=t|CkSa}R~12nxvlBD=$f4)YC zx;I+CCnn^Qu{8|&!s}w6{Ji~x7Xbo*^(zx?`G#l z`q-gMLTf;kvs zzTy`O4~fl=NlRVFR^1%(lxf10^qf8@y({Ngx%_QMtO?_7Fl&-^XeG^B(N0pvrst03 z@^QUekA{6^$eb(o+7zr8VC%lu3ZQv_m-~F zqtK1EaHcF-T-xFJ)7P`wY?9^(wc+Lh%%a({CEaC*qB@%=ffwpW4PRk=(@CVWjw3W- z48=ccSoNQuoyF9C5zG2qUhG~CM25lxbS`*-bq6P(kKBZADhlc(0!Ob;{4-`XGkizD znel#Y`6s4tX=hLpbkkvu;!6?9F>XYyQea0=ArxuvwR<~_%{f6S0_Bx!6Y zImnpGMLVW^;9D>KjlnvJSgctDA8AWyPvzow${XE?f5x)zKtkOO)%^D1i>|{a;4Atl zeQ$z(rgT}PY!`z)t=}79F#RR(NLz33>=?_#&ZEcuZI;r!@PuMP^5~vyAEtCi(li5V zS?QfW1;61^IU**9{lBWZ;F1$m^e*yb#_hl!`zKJG=Mj!b4>i7!)knzzp? z!``-kQKaDLDC~EJcJLp~f_TFlYPvYT_|L56f6544upsu;aDmC(fe&V?#t+Xk#=?i=bdbn9zSN$&7V=^{=}+e`lh@j;mCbgt6|M=g zweY7{j1W4v8jO5pEC^%~?CXR;@(ZDHc@ALVXTpB%2Bx{2h3d``gRqgnO7>K=A3U@k1&)PMal)mMaM?Lp=H&Y*v9eqK8vaz*Xk; zWjJ*H^(OTY$iEqRf%m5t{~ueK@nTLIbJy#RvV}%^UW?AO`r;{P)1E;aN|9JNaPbG! z0}(uXkH6_rBcGi1Ec(oTqb@c=qvH?{aU#F3dc(>YCbPep&BSEX{Gzra!+H%4kCyE8 zHKSep$+eC_FUVR(g#0g+_V34J^|u1BA2!@8wci)@<@qBVd$Yl1Iqm_<;Bbe%nx>&p zpePDHpgRT-@D<6OUJt8crrQu;tPgZVW<60bhHSx9`L`21+X-5-Y|E)n#w}1@KAj+b z6(KA1>u#!0gaDf%x)}i(nVLVOp9*`n{YH@dM?i+%B*Cwrb4f*hC_HW=jXvAXbRipO z23th~;h4DEb&S2%AGW`66Q|y+ys?^w1FvPoSGED+hYi1e3R_I>OarRWmqzmDDLqXITE=ZrlsJc~;nJlR_h^@3r8^7Y zdFDv0PiZ}|1!V>>hi^uto!1&&*9h0VVe4O0cTFFx7t)MTIW`_ zRz{wAow#m?QsI}jK4$(OMdToyNDif-w*$8O_!vepvQpCWCrpLuctoV^lt)%t{lgma ze5`J)>Tvr4e)Y$1X+hyomFk3-!BqPGc1EI0EHtTPm|EN-SO>8jnZSus;mU7j8g7Az zOEgTWil(Y0&*-*_zj!gMiBo63l}ntU28y`9HyPrk$SJ-3%T^rR$6ea~5yZ?SU%*3$ z|Iju{Dk0h_aIvh7zaaLfutd?Dyu!kI%(<{fyhtH2>uNc~R%Jg$xyV%ru!8Axvr`fL zK8ecHG1Go?V+k}#{HD;#>bs6Ujq`1dWjMC^YRq^I*JNIm9XNV4e|(?9w(^plXsPsfe>uM`Z>ULOrnfCOAxN9aklF**9FECq zy!&Ex+FCOXXe1WBQ*(YZTl|1vH|CLosHl5ug*U%yn#tL| zaD#zL7L~@G$K!%OiBSWy*A-xDrZ^XP@#88qnHr~cK59Dw=3!}0wyQ$F^XUj+Fz@Ar z_a4+qvqzb^mn)RpAYh{=npPBI9@Vlmt_9i3jd|8*0?DkC?j%KruChyhZl^zv3#5md zw|#4zsTP4-@W@4|ADR=ou~D%`m7TmN^#W~aloLNmM$m5d3Zf^e#QijlIc>zuF;byc zuvQuQK@Y|}a0R6o_0{Dhs*vr)SDdc+>@L9XD}6thTfYJ=%@~MR$Q%e1uWY-O^y4F) zh-e_y4VBDJTFbo47vO$PBQ$A+Gic*+P_*u(k-_UGMJ+#1_;Wl6BT@X)wj3&i-o;c^ z>>T_X>&GQ29EF>qUeUXC&J5ecRK^gVF@uou)YFxaBG+}{KuQTirm^P{d2765j+v(4 zlysp2wgD{O7AQHn`X3d)E7LJ7=BcZ>_Ugv3^Dt7>2P*90F-_z!e)bR}gHA#2?GGSs z8>smCV$$Q#0~$>M(2Nu#l{INv2xwh{4eqOxopPSiPoZqb0YC4251# z0*bo>gQ(t`E?|ofZ=#~{NIKk*oIj|WFdXa3Zh_v*SrmVIS^|&8#G{@ZH@nx37Mrna z8cqhY&n~ik{*v0J*b%n>XA$XJHMyRfomq;*2(5aCvR(wwd+>*CHn!;FW*>*m8H8`n z{#kh5Zy&UtxH#E#iZKbD$C|40R5QD{_SLP)J`Z^CnV#oI!80iOPw_`7C)%^@M&?ZhT^7oCSD$2S%pjhdZmNW7Azt^v)9>u0z@@m+Zn@FL#!MVr!Qu1P~de|0Shu?#GSES?$qH!CPHM$w}gu6*KuxIl=w`{xtMl1 zkN@eVlVjlnY>p$~5y6udJ{f9-NHqH$b*v8kh|8$iT%^0P;E>oMlghrIyn@=;G3n5B zuTAf|iSuQn8bbGlXb6PPt4BsVOoG~ z;yTnhO|N+fv+xwUt%MMnS0G<&IB^qL_&K)DELyV`r7?hi_(&IpccQ>(@XC^9r)18qbp>Lf^cU|xkNjMslbSa9O4K6v`PQi-uB5Qw6;BfoR!Frjv>HZN#vy)h6Ir|h zxp*Uudceq{%!Ul^B3@vO-hXdl6Dx-GSj@go+AQ?N z$bFuUGW)dAQ!%xyfTx)md^$Z{G(`-PU}sH5=35ZjZak#!;6LRDER)Lt@Rb>MWjONG zh!G<4#LbvkfD}S_+&Y^Kv{?e8`-R0Q_(5_eDM_`2~`g{lldlYEvEN7N67SLvfiP!$SA-!=m! zQO~dMD3lkRsm}bBTUA-Wb08W9KHAg2!wI?GZYs%Ftx^qGClvzu|Ei3KT&_>*(u z*FSc+Q`?|@TLNbof#iLL7uiQze{E8F*$3Gz5z1mnD<%c1kTm%YigL}dAi|@a>yV+) znIpzfF`Eib%NbwY-Aw84nY zeh3y?lX6G5ho0+k({6=OA#sNXkd=*}_4;ET_~LS&-Mt58QJ>6oTC=oJXA}JBFVjwH zGQ+Lq&G2FmGqap?+ee{39{@WA+%H<-%9jLxMbHV??p+Xai8)?Wn@vIJS~3;{Y}B}F zyD@RsQ=ys@-eI;yH3+df+s?On;---^9;(O{v76m&ru-%8 za5xJOt?}=#+9LZXOB}oa5#S1fM$n9P9?g$c;b)y^QD3DDL8zq0{M$iUVy0sZWj*}@ z)egSrp5hx>?C4I}VPxV8yInYLWl?@VJ4e_H?IjtS^*9+oDoY_536gH0n=z7vcpKz3DQGa zXMd8`urTDvl-Jbg>}^CFIb|vRpjMmO{vUzM|7Z04|K`EJ`C8((qQ|O!413TUtRmx% zlPxZVdKC-V?)MAE(q+i%{2-;E`<=6X9{|`&(ZxOrwc0cl(sc%ycv1h|&p)k^q8u5} zx@g3#{H59?ObUeFAF<)blt)uSvoNoHEe>g|rI?(JZGrqw%=wNy)Z!=*c47lIb=}XP zgPve40Y*!{S~>|5y!|)`KeS14aoa}KXQ4BHo(a{6L>&6XzU8bpK1ZBMUE!08qdRVj zlRfe>-gUpQrow7St?+^SrC2o0BbB#^g&9}ePrb+=w)qvcPW^%$BS>Z#fP2Ox4+J0E z#cba75Km$k+#ggC3KkhIDDy6J#b%{jZAgb?YHUbIeu)irb%YXHv_Ce8lPMyFM%&^O zhD%d>Om|y3@0rEFrNDcgZMZ885Zr#fHQH~He7K8jlbZ>$MdwBBxnI! z`MK(1eul@2*ED!H9juZdOF>%FAtxEDT`a?*UY9aZJ*g@xtW!|8`<+nKz>9nR2?;y@ z;*VAN1305YOxt1|Nc$sxaptdd44KrgKJ)dRqpZQGETz3 zvnzm|TG}f%_h7;O34bSzd4tr+vy04p+6 z`wfK0OO80`JGok@B|jOet1mjW`Dt7yvFH3v;uz{>vq~AKnPkKx`$V?I+zj;^f)AUn zn}#mkm_)HaGD`M|0pq+}smRdF00rh`PwR8sWTmCst*D`?7-;d`?n7wb5XsKc{j^%p zD5?ZxZ)=EJ95DpN!7O#)!8B!<`#LN*s8qEsq9o8VPfkx$a3o7jxVYYuJ3-V=IzKA< z#9mU0uAl^yiPqqGBvr$dNF%YC=~lz8XLo9CEWgBDI2?@x5l~|5f>BXqQ`g1Opda^S zl$E47$JTBkt(hC~GMVdNXr4YITV{a5de8c(sCqmih!I7YBVQ}S-b@hr38vsEc>zd6 zF0F&oheI_0ml(1@O)BXugB%N_Rv7Q^+NFD4K!lQ6Ba~4RMWXU*Bo0$Xo!sCf2`XmE zYm#fHBp7Jsj?BUq%c*|eG9zmpin26CkvJ?XAz|@0pGDRaeOVeMLN1ZziV@r5r{n*GdIv28j|3xcVy^}(`ovqT?8qG>tE`OtQ;S;HL&heIb1o67=P#c z2WWS;TrUtuel<1Pf^00L^-F6nTA;aiozTyPf|uMp|5r$>7~JVX+DfT4QF)4h;TE0X zA-7WuL%Fl?EAZOa8lt9S7N%?oFvx@|gG60x4&xWYYV=qHXUqqw>E6Ap9ZNR6?vs0z zFM6-m$KHko^Q%)lWY4136`~Gs1-1=w|Kb{_JpF=PcF~f+Tv$I`_A2Y$7NGzn)Lari z;J8D~Mm=QFz4N$MAQYOB95YBW+Yxv`w4xg^-!K@AqiHFPCb7`EYzu8a9XuG1wU4N! z1;uzV9@)+~67uj^FkNKZ1?Ebl5Z7r!OJWZxF4QCS(Nd4yNh(>KiHTR-2Xa|x7$t0D z{X)uJ<<2gO{<3HbOi`r{wkSh1DgysO?+BnvF2RQ?U#4I%C<^H;VUh z#JKqq9cbRC8prV8w>%4>;J2U&`uw}*cn4ppBYah?8l(Ik>9so$x#4xi@8@LVIl_t#~HOT_qqHZG9dcwMfo7L@Ft(o0d%BRQoQQYPd~SI(xS6p z_IbgCoQ~YNKNt(-__n){bX&yo7aSmTZn8|#BET;+{vo$Y>?9_yIob3}`>p4I@#1CI zF&2>QtQA+*M06fg68W+aC^DF&#m7=Z`p)z<)+$tD^=Ap9+-ES&Fmim?Xd7ku{J?|h znfaO*(>?46D)q-GT9Uh7yL?6|mMN(H4g9lW8B*)_={4q9A34{>1S+m@GI|r*Dr$c4 zoNh~khju=mCT!k30;xawR(f)g-Y|;clLPO(ckU2G6MS?&zCquiISuj2IGJ$d}3dEyTN+ zi-s%stS5ISr$jR#{g;|D{3D0OORV3l-p*l!Y`y5DjWBhb+qV^m7&H9on@ofi&p+$3 z&*AqK#1aS0j{0E{D%<}hw{cVAcar(PK7pOa@Mr!3nKbAKteoUBFPf0a@(ZaH@<72s zb1b1lQECvEh?V|MlEM^y`hJSjgsPv(Dupad*AVf5FDdiKq8N1yPX9qOf?Djau5|N_ z^1Kbko{-7j+*kqI38IOeFqUOV<5{t)A2X%i-#-usjT>TEMQ^-h$FMGZEP~Es_=)R{ zbx_{gHKB6+ZZ~XQ^h36Yv)V;3Z>vj!LMf?6a$b4eMM=K?#;E3UI2c**!h8WD@E7p( zX>`xhd8C)DOxR?gv2m!qy2oy0(N&jYKo7(2PHHAa-aR@ID1sOskq$aJ`Z8m%-Ol!@ zxXXFuwd3Ml**c}5(8+<}Dw46!UbLqX9fIqT))ENFBU z$0j9tnHZMMuXT`cLVr`6IZll1(GZLg@sp_DwnkZNZiy(OF+37h!=<9tu4iiejz^=v z0)OW?q~CJ}T5g);UVdzi3o%==v*#Q$2Ym|-Q%#uSf|CN3}=|pC4Oto6X@?Vb?mp%$$ z55eCUM^rQlQ0iY$ ztM*7~XS&7B7}HFr?jj>0Ihn|4xv3{s79Z_$umTz;-6dg%#ndW{ z3r4zm0W(Gf9UY@bs;NWRp7WHtthQt}OJN2*GXLwpv|+<^2P%8NaWO7RR^PGG6U@EO z`1hwG;1Sk$zQ+QD26S>OW83tR%3AJ#w6qmBXzD&*pMuOxv$#`6J5=ti`)mrWLUrQZ z5A6(snxs!BwUa8-FMG298P*C2?yVZdpnh)etzbeGvz+op#~L31&zNcsiqCV+PwYUI za^iH5jJ~arYgqvQWuT$&H74jzD9_36o2rvrB*aHJRJA zR#M@qPuz=4ci(bk2ARX3G+7f&a%IyM<%gnDzQfg|P%H|bcSu{IbJE%UuFp)Qnax%Z zFH_^KL}&WpG7~;->e^9s_PA0v*l>Gp6Qv@!2)ZXPZGk3~Vv}J_7+U=)(wmvFIh(76 zq5?l_l>6hW)qt|FF78ff3?9<(PH7P*7~cVIAbMGs?wFf#^=wZYp5^YAF--sNzBm(d zlBUMIatNA`62|ULTCAcQP-Zk$V9QmY8ny=GQ6f!=br-ls@)l3${tp zsh<2@y=->DTQwoqD}vMNxnF1;dIy+5=w&-DBJRze@C?B+b;Ww4!MOzt;UqM0#m81KADYGij=-8NxV@4a!>D> z_HL_ZYJ*$B&gC1A&}OO~QwaVn>u`7dm|+}`!LN|14&n+>06)@uc;keVpji)9hgi2i z`=syD(l|FiUAUH0)5eX64JZ~ul*^X+J6@9CdIk2e6Ce6JJg$vM-bU#sm_LxvQQDEY z)eNsno6)#u=H?)^l_dg&7Fga&M*37AU4(N9el^4i5{ zy2$pXWLv=iAGzHQr6Vwi>x*TcjGwcYD85$E#v%_pT8o(jZgai zhCDt9wo5>Y9<>hmfe@=r^>uR9DDTv>e@{Y^_;G)q3_5!yAkmF#6a;JnpbLAYs82j> z6?;X{s=_dIqu=}UV-Z{T@^0aiV~{rrXQMf9A=2t7Cj)KE2rKi%D7!e{9qlyUOT}m` zJD3`Lnn&&pi4X0ysI{NMf=Nj#N9Kpg{j_}jStJ%QvM5S{1Kaa~hi?Rtp}RwnfG>R2 zV$5hJMR{sx-2GT6T&FBFioE`ponJ#Z5HyePP#+G|_kQAkkk~-ZU4&hAulkkSAcFuS z^~dz5f>Kh6$t{}c$#Y^Sw6YA*B$&Y1kyk1%Al{&`_)TWd z`ROv091D;Zw(+1q8~Buz-qw{o828}n$Z%=Z57VvK`__4Zz;7U_x z+4pk6@VO^kY z*PvtlZN`aqCm(Db=3L00&PYS+EmHDc716b92CPpk~C z@M(!gtu|4#?s0Q2Wh!*?s0{{x*Y78dU%$;3L$r{ON#5uqsAbYiFNOEwqy4*nD-v$o zN(K!t6t!E(T=+uX2BX~Nd$egfc-#Hbo4G!1nclYx5tl0dvkoKa%U>nFHmR_t$`%CK zWYdNO&>OKV;X0DF|BLB?%g5TtK2GE1ayIV1NNWN84RKzpLvi-tN#i+n@>~NEW9PJ; zE(+r~=J2{MrB~Tsd{-F??d1QkUV+de{cS^pq8BA#J8l$R|BWY%o>&on?^wO!rr#{z z{U13}PUBNB|K{f7P#=9LPI{Jgv}^bZ8tG0yffY{3gzJ(f@+3J} zI;%}v9xI0+_8#%g#Bm`~>a|obN4fE8fw`J077JJ=X*{#AXwXmErLHE+Hg5)bj(FVh z#SfhM^!_iEP@3<{K$5TR0k|2*nJrg`GQ$6L$E-Y*u`RUXO^&S^3(ciCi5BCt03ayZ+(&Hlm(L#hpK=X5qTsr#g9xUa2r4Iw=Ytu#oNfWQDEFmyK}NT)QYbPe6z-6h>f zNq0)OfCxxPoOj&kT-V;`eEU1+UoQS&hV{PdSD=_Yl0kwZe6@BO`ODoae3R@O>~@y`ufDP z2Ql|Mn_P`gG*nOF1m-!HR}x(NCQ>WG8D@|?z^V5h?4^6nYymEPk`s!6Q*dnSZ$Pt? za-W)X`FwtST`_2(IYS|SSabY!xw0+NfBP>wp3uV>+W6DdATdbYCW-T~_xt?Ot#n6I zR`1|HI_SM=Jo>xcM}}7|f_QD6F2o|sCFjPP0sgH&wdW|fXXd|;U5j;i9o`j$N(1E- zr9!C`SW5z2;6KEv{S}vCew*)K(xBkTSQYNn9TZuMhD9O~bIUUF<$Zx~jTfS*g)&3_;_O?l}8TVp)L8aH0wIompp9Gebo;cf(|RU_!>AT!d$D zq%r(uhu~jN4d;`Wn9H={;@>X`E=#D1K*7(Bk>-m%RhpZHEEVx#;AilPFxAtwbo4Jb#lvAYwF>vwRHC(w}Iv_}SgtsPH zC!5EAxCAyePA0GJ}P%t@~;V<{ZcyG!fEXr z8ul`4`o%5}o}Wr2Dn>`Am;FQM7Uik-?5erS^%xdM2uq4Ri?GIz6#Hft8RtKURzVd~ zLB-gyN#nL&RhvovUI*8$_ z0g70bp+5%kHvA^e)dXBphyyq*-W>HAz*1QYF`I!(5XTL7);NxE4fKK5C!lx{?9r-0 zIyVh+0}SeHih3w@WaiHOD?(dv9w1)hzJi#OiWIxuw^CqA5m;MdvB1%>>TuLY@D6?` zs!;dZ)Ln@7`w0OtWsVIh>~6xyw9kYr(FsxW%CH+h(l+B+YwwpDQPV`ABsqgfaS^jR z*I3bn>Uc5?{C?7wiT4k$mBhmA2rI?ze)Z0Kh??=`jIvQiw!2lbo)+Ae6Vj=|Nlc<=G#Y9PX$XD5heLR?P zLMjVr`IoStnr%%!2mV-2f&PnY`K^R0eiFMhd)u9FE#GAbe!B16>%^m2 zlBgv=f3J=VGWDMPXqy}b{%sXIK?)!azSFg*fWITyC#W#xtMXPLe}#xBK&hQ-%T1Pkf5 z^|x({@rMs~%q4GvCjI7y0!@Ht>HDVl_k;-wd4qIv-7Kj2Oi(3ul(n31sev6^YfE{9ZrC zw3~fSbXOS>LzjVuCG-I&ICHZ}D8NVkg%34u7SHoECy;H0>iOKQYt$PFK6G<}Ve~`m zV$h+rL08eU`wj$6;wY48M_gHI@6aJHHx+V=nA{9sEj_a{rIj|T_pJk=)snth)?&&M zj|)OJk&uy~->@WAMlw+yz+HRb7%0en;>SoZP^Vd)cNYZ3LCXVU8%W-aVcu1KQcz3u z2ZpLlij0}GB!7uX-k^jO7j6jjGUy$*U;S8|f3_-Nq;lna^2M~@Aay!^sQ<~O%uJ%! zirw6oHC!2H77Qd7|J-HXiyUrv8orS~rfI$qDisNJ8q|S=F5}>`IDzBGs)$>aGSAOo z56M0Z)WFYF;2E-r9GCDVYu5q+b7pV|Wqv?%?-bS!vb{o67sVVyA-1c?52`Bv;FzO) z91)>YR__wpHeB>)lU}lzz1V!tqtp%MI_fhWx19`eZBOP?kL(5U(q-lur*t7XtRd%n zB2TMwI=%Y{-bmq9k#s2eqVd}ok*vNs_yyh<4HsXk50y#j+fw`GL(*)g!(XfHUPDJ` zXvq1*(Xgp1T%3qjB=bes8KvRF@1y~TggJ+#y-LR?Pd#6kf`$ET>C-8t*ey)`diJMsNJg6& z{N%C|(yb@QW6@#uZJ?ILT_*|=^Q)@w)|EW{??0aHjuPl-&=LL+R%(;OP}|WRW)B1M z5#-uNhVJv|f-?R*6&g+Rn6^vCGiS@pA9pISOi2Qxao5;v7586}e0)bh=XR;U6GM(p z`$6js+LlF+oPl-EJDKo&Ve8h{&6qmu(MLnoIancy@^5RIPMnfj`y#%{Ocbd(;qtRk z))csK1zaNAAW7~)cu_gs;A%;NF^>F?ODkp8$#Whef&BA7f^LF7^;q)U!LnPF$;M0$ ztz9zKADxLzjPflKUEiGXkAO@Eb-rUB&i`upa}(An@Y2~d<;ZOR{5DKZNNoyJdN1=9 z(x>ZGIrRz88v9rPP3AJW;jlY&v;Ouc8}4p>T8!HF?Bz3$N#^wu)#LQ-@L@iM9J_o$ zv=!M*Zo`jo#TDCRHX*z&l(|VQsqU@K?qNrmt!o>JfvS69TM9UHt07+u2r~t~v-l+^ zf|$6i@azz)cf=R5mDuY#+Nj~b*=SiMd^y6f_9OjE&V~f)E&VQN>u4EWf{zSDfCcT6 zFEdfx)lDLQ)YrP=NVccLOm{l0p8c!)y0QXIY=+M(lHho=de1kK3P%q&7j(5zoEI5J z5IxE{K&tmf@ScH8=A2s~5h`8GZ<3~K5KRwu*fk@x>5-{2Ib$l`6{n6Q&w}IikX}9Q zC^>m}a@|uYlj|& zNo^K*?ZOr_ts8zoC~NP^Ye_#Lan^Ep!P;i_Yq$)bPRo>bfNN`fr;?xcjaJ+f5RWri zo`2}xPQBG8_O+U2STiqIdTo4zgLc#JbT68U!)$-t(jY0pzVHapEkABxj-YvSr;YeI z+kkKa%f14ApfTL^Dn3;!k^cw+6}G|>^e|oA&S^*Q_%w(sUD>cG-UI116L^L4w#3d9V7T#|W0Fg8Qmv%oc9UVenWj^L0kAFT=-ZhxJ(hUR>mT@ov949XfYp zV0fALn{bfMkBTFZ$Xu!QrG=ZBrD>`O?xYL^S(;%9fEaB5I1^b8d0mks1{+qMziiphwUXtmUeeIvnM-;{cwXhh zIV9oKWNCmBDYBFbFpIvPw?~DLP$PJq~d?1 zbO52|#GeMr6|3B@(JEl|JaBZh*`pKYu-d_j7hE#>Ap&z^yjWB)$a1CKdXIoU_>gAy ziK|6ZrhcP2I$TiQ=bzw_=X?_+V`?qCX{SAkIc9&At-?QY zl1G^0zFJkNQZiuL5*=mg)g{{oGyCs&jZGi8lL#swo|EIeJ$$~FGsDZd;-lAy=bJ8p z;*n<>bx?mAz4f|?+|2l{ki5&IX3(4B_baYMAEC#YWEUY!KCOVu< zz(p+n@r9FFrs`b0nS28Irl$|bJu0((tz=tc><+EN505>wR>{F%*_IP;Qp#TDKPT_i z^?>cn0K+EB+t!xE#a4OTf-+x2xLh`0$J^wUzSd=D9?VTvIn;%;jpS;j`Fm@GN1~x`kYsfN5IGs<5d;&emMI@xDCf5$8Mh9p zO^8zUl2OKOiv?zX^OLFSt;=aY=p8Xnr8|`&AT=PnnIW zO?T`kSJCU+RYL0uDpF`le9ehxYg11h-^{a(1NL8fGyE01-d^xEOoHiVDI9E;-JTIA z>4N|?7DK*7#1pZ!nix2K8X3xq67&2Px$qPI@?ge%=^z^SyKwPtSN-to7jYZ!{%6iZ zj&l#lc_1giOjI>Z_R4|+NHj|~)iGgl_cM+G?>BgL#=z4okLm)4nNujtZw)m1r53K= z@vTQIr{0xnwOh?Pzw{WA*Gvef5YW&rrHt5lP7hk@F9)*H=ew3_>RMk5SXP{rVTI*x zOztleVgP)>;;=Kz!3d^vUQlVTae&r+Ma@YpN1#}3mT+h=h%bYLM~j zZ-h&2-m?$s{dvkV4v}*ie!{EqN~+TLL6$i7*NAlX=qBz~B>0)iEPiSucKhA(2M#Qa z#Az(mjL2_y)Z5Nq>vD9hksh z@nrJ2mt@F~#bKqE?r9EjM;r{o)?0KgxwhZQca5KMGtB&S;!JU-EkL9?ddR>XKE|dF zlFwt#2SKhs`WG!eorI zC{wGntV|k|#*!yOGQnu^RX0g5IjT+}0hX5wPnr0NYn{NF_wE*nbom=Q&jk#%iD93u z2!{uG@hzMO@GTBR3V?4Vv3sWc`YoAk|%O`54>Dy@u4Dtexxc% zmCE1*shcnh94m43$d1jIEl<=?M=+^Cn5NI~#zJ4DpvOHe!I_uQ-(UB~i+ntp?v_eE zvWJ%lDNI(pRD6AZ!QxPvf%P8xMV2@fpM56aWQu4h;IXf2#9!$nhGHMWwk_D}-=tlgaV7 zR9+T}1(6q{wIr$Un5VG%B9$Rk%-(=ySOgM%a6Gfeb4$}T-|dnZ(5XX~_*UH36Wr0z3eaZs`Bo=cseK{_^jmeaE?zI67{){fDqThDO$@{pVV zp0rloMc(E%tj06VzDQ%qaLMddr7-uohDcsyOtg`Q7tD1XBfolCWe%3q1{cVxMd9me z_(XG$&=N(e`oe%eb=l#XuxDy)KANe1`f7Du{QI@*X%oM!^KO5Q{8e)h>Y+HBGIvH5 z#S~{2kU3MqYw}=Pp68tB{#pkKnu{5(hZ=)>n`?eDf+vSzp)D&;q^@lCYr^ ztM|!B8*V>Rl_f&t>)gQmo5ChlsDB1zhB=poJVr)?qXCT7xs!A9Jm-0`2fL7FEbM_yo%CJc8N9SJUhJaTc9~ z4bMeku=3ZcnqrhpSFQ1q;Bo!*yNjhj577BjbO=7k1otG$D+-shu(-f-!lEl(1koaC z2pGQuC>4u0;2=i^7qhbNC=5c_#VGVv9oty9OLMTptKHbHf4C2I^qfJ}$Zapql7%o& z2yT1HQm038hnbs<1V3do3?Q8>izd>g`t7;E0r1+%%cVT*X&fH=#>J4Qg0lR6`Yf3s za?#M9+Bs@O2qz9LwdWPUk{djZM2+D4sAS*6K(kc5mvK%~k_O9$>7N3a(^Q|+0{JBR z*i#gK_s%mEqhVzb<8TRX*GRJ6VpGr@oi!M{2!%fb?rWz3s&#UvIAy3nA& zX*u_$#x`jpUqXL!MR_QU@W+|ZAuB|^arVT4ze{HCXmNT2 zRw5i7qlS?Y2{hXEl~DK%tu;Imms2TaztfHuo`1up_v0{kR>SzIl`QM%ptjtR>btTt zYphT9ld_Lxv@n>icAbO;1M6Djvxv0x;O z@{Gt8S3s>hL1O`+9vKy=Si{(kLB>&nd6^tc$O-C8&lI6WT)-8J<_17qstzYA4k|{+ zz&M$oZSb=hy7&qz-7tW7hE>J-(UmQ%1HQiuL^UYRfvAQysgIsK@ki5`In{Z0muBl) z6$GAIHfQh?$$!CB|DPo&Iw7;F`rM$bTvRi_+7uuMYw0^mtM5BuTz^3qF_wPr%_dus zLz5)W8W+xJC2HC}*oB0`Fwn(;CXm zZ1|A3GMob+MnI8YZ~_s8;DK+}NU?t)rUcVr2r?sexPisl2|!CJ`(#AwI{5wK#_;o` zH0d|Ulr)L|ADxQ~Vqw|+55)?R(~7Tboe*$nZWNB@?bz!d7vAJ%zr%j>zgR5dwb={g zQngqYOIg6l)6{uS;^Rs|@&%%bCLMVh9Zk=As!6M+w&|$C^kc&DTmSA~3i)&1g1@a8 z+w|5E(o1og)#H;U{v>XoG!Gx6g0H&%SP9$jUbdhSYdR>~ImM-wduEkmDoId-#eQ7lvXWAn?v{wm5qME=F%OmaNHPUK0L ze-=Z##ElZ~%5r9tsP;@HN1I>XEmTYp$PMMWqBn33YnR0SMBH|l5tV$I0uz`1%Xq|= z>Pgk%B;%sh~m3xUznX3G|yqf&3bJkz|27rSsZHqZE*|)&=eXWEbRlub8 z*!xjTmwXppXSzmwWTef8g=va4g(0>cqbG=XhjOV$3Be)V)aIYhuC=Yjs8@H=&VTMj z6sZ$P9u;1s1(i-+HSn;;5)Q8~OAayIYq8J=xE+pH_O2Gn{LJsIT^+TFB)#uPxC)h?K*CkY1NuBbqb!orL=6*OSYhnmr+=K=PKnw&ouA6O-#B@CR_T7nD+0&IJ>h~k;`m`cz=0Yqe|282t;8L8r|Oe$s}fd}yHQ+^cH4Z7ag zJT5qTi#Vn$NJav~d|FQ8`sP6Cv*)byeuVyaY6v9b%Z%V5O{V|bHM?f%PFg-j3sMB6 z51u2~yQeSVD7WDD^64*w8L3pfwfdcIG45Cd!#*d1KcS|;E*LksSvP6)aWF6sJ<<$ zGiN|nY>YZ?{DRjSib2aJgNiYVq2uMVeqG8HGi}Q7iyE$q)9KAPZ1n1+$rOjVbwcZp zn!7@uVG?Qm+oZ9o>crw#mqK!e^---?QPw*W z;X}`-eX~U+M1Kmn2YKg8KL_kHQXV=nWdIP0E_#{E`gM`M6Apu=P2SE`udRwBcqC)P zyUhts^y0KhZP!QdPL7FA{>teSYibsH_gakw!93jNlNWtEmQ{P}hHATIFC6#;PYz}M z_{CcRF~E3eeCoU^12ESO2JiP2dRsZvYVM{9iJ$PzPWZ-`pCY{Z=GZ#T3Fe z&3n?4CCnN%0{WMRD4S2p7W-Tb$q0jQx-Dd?R_@+pxZ6)EQsmO562#v?(sM#uil5Iz zW%oyT#^ErJ$-w@vN1QFGP=Nt&XtSzu`Kfgr+QlbsJ=Kr8NlXhpz*1nN;;}VGCl0w3 zTerN{onE57!4-MazF;K?cj!t!A9j((%(47EIhQm_yTi52r-roAreye$beCYb>M|MG ze*Q-I)#vr6ukbSA#7Z(!YQ4VL8`t^*&!`Ih>t+PeO!Z*M_94o*01c^g?DS)&c*t|<PQJz1?lL;3`~MkE)Wv zkPo&X{!>TNUE*Q4HAu9Z1g|+;5#KoH6))H#>>xahvS*Jj9YG>ntQl!&ASC~Nm$m?G zm8KUeccFCVsie=)c-Gf!x_W*;`FVhnK?eo=~} z3NS6}W?eK1rmS79G$0*aQcwD6i7weBdtjNH!5_@>Zqs99Z%A}*ohvjOLUN!h8dU`R zvp{4#QMW$6s&rNDLTIpkeh$XfHm59Ss%nfV#>IH}cHmp~xRd0m6Bn8vGlh2VNIVp& zGXBnPH~JPG7|-8Q2%A-b=2@nOeBBNq7<;Ug$I(#Sw;hqehc<6#CgDr@{8aAizA@(s zlJjUMM!bt?RRZ5&)9S9j*n2F-1khuBgTijNJMz5E)>eg738!AG4LyMx^Y*gsMduLB zwcYK!JiQdy$IZ#=ezwca(CiS*MKsq)E7E=dvroOFAoRiEa*g*rJ*rESfeyA=EDTl` zNvg^8Z$Po&!T!V>jT4CkQm}eP5_kKpedkon^An>JeBxbE@!G}IYyKau?)$&KwcGnE zHnI@}zd8?!`dD%ALx{uE?HWANyvevoLBbR)!KA1r{K4DC!UE3U(jWWvwA`Z^OY6?S z>kjgS-+7muS?A^MuEADS{ncQlkMGBP|6v$p{-4B&H=K=WV%9`wR7~6l;F$I zdRRivSDWOz37PcN8Skwp$@cxD-gQ9$;iYM4I`dDx#{3p1cVjaf9AH=Eaes_+A@f~7 zO;amhONVBrez}_N+`%uT;U%KGeYNV_3xfwcNDhg$_w53`?HPJtYh9?&Hf(^tKzDJX zbNPDG!^_f3W`!E?H5%J)MTN1FCm5f+JeL+Cc@UXyHN9gv^j6wnFq|(DJni{d*_-b1 zCG&R&?6w3iD4Sa~c}|x_3gQ^)VehbBzM6vEL9}vI-Tdt`XEx?kid#L2kxajX_K1XGKNFz>?i0MF+JB z`^r_~h5VDlE8>0lAkQn*E9LbZ()r|QzMlQBCOupWcBMx%pr&!m-@wW#qk{-bXDUcU zh?#P0IxVs^y-LA77Bh!?*~K}(^l>viZq*Z491mujiOJZE7v*CVSz2qvOlup7;TSPZ zX0OGE^#x}673P5L_;Y$2LGwOueN9#XE{SPS^wAW~{2C4jHx#zqb|sYB$v^(=*RX+g z^>>ehUalkQ1D9QT3<*6d!uL5i@}n=)8Z z1oscH%=gIDIRhVpUhjxgV<*^~{{puFwfMh9Xlic%TP@9hs`HKgzbS{gpdOK`N=sTt zOagt#xXB+0ScTBJFLRfLX+L)rE7N)2~SyKB?vqja14&_>=^|N~D-!&Bhy=v%tkrx^A>soK~raq*)zcq?} zrS5PBV0*b4zJETpHVVgFH{kX@_j?kS`*i3gAH8=}@6zkr3ztTWKx&p6B41f4dskyw zfIcwey50}v*$Y5$NY z4`awZ6J)}p5IgKePk$zHuCETZ!jH>Jw{NGhWg=E7in#tUDJH(~lt4 zW}HNMSX6p2RsI$lMZ%FLD8(J6wcZY6tqjrdH$gt}ezZhoa0yNWfcy<$>|LxO_1Nm& zuy^dJa?^dIB)$zU0IJhF!!KL+wvJhG79ByraN@m$St~y;yG&e8E*KuMUd=C5B};aP ze@-$yDOavln3VfVAH=E=JNjkyP_t2Y@0DsnEmI5UC}$du%UcJ~PP;DIsNc$UrqeL9 zqrbJ5pCxu-sgvwAWHuG1{lx&wyF)0}&y=hJhG4k5%*O2c=XLWW|V- z8GGJsskvBOQ+aI1s635QbfFZp?hnsYvs?(0dzoRdBrclbR%*6PlMBTb46Np2D0zJj zV%P5FTbB;Sp5;aIWjIa`kp_Xb_^hp&&qI4w>$2{DChXONc{&<`JV3ch7VMjPu>B<{ z6PCe3=D?TSv&LhOgTJZYVK0XH>m%!e+TT#joQU-2%BpD-=6Gj&n?2iYp-lVooX{~O zesU0*o1>WocCFFh$^Q7EXM4~qOr<$d!C+^{K!%)5i2{ksQ=~4`_muvHF2w+?vC}>q ztVU^Xhp5;oCh0xO1&p49s;!VoFC}%va9pr)BoK*cy6cTgrC z@og(Rt<(ZS$wFJcB_!O2|BI|a!e+SAUm;EOtwSHP-SHjS(z^b(F2y2IT5KF_zg`r? z|2ZvbwEyo6MRVdCoTAHLgKxyRE9pzauP@B0yF4WFvqnmINGTdFw^r!q2{N~t6xVz{ zj$S(|2JkHgIp#nA(3Zv$w3|E5XQbw=Ghk(%4}y5lw>{?z*JI$3Lyf+t-8cH&2%tAK zB+`n#Mwsh=1Pemt{sX;HS`uMtl2A=;i;v5@dDPl+vpG}mXce^HV^53z;J~&$vr|8o zQ)wnEsy_g*jBiR#=YbGPv53`kvPP!E=~-PYI7~1f&f<*-p=?Srf8f(|+88P+ZjMaX z9>=G#;jlTua>V4e4CMv+6yr#~?YaLC@<#E~D`JB{u!ZX~ir+2wcg1DJ}AuH8>=H~7h{^Hc7luYMReXXMUk_<{bRCeTAHxz_LZOSL_s~aYY9aM zL>*p8Q>3K3m#;|Ktz4EiA$OLPArHS|@kL)ht#<>yND#^=f~fD}r!7a7L-Xr5fweuA zkSZhS6>dF#q&m}J2w}+hq}U1G7~gDn{voZV1#%ox$kJhMsKT{6W2%R7`9*5np*BTN z%OsFInrufX(C+j$>N%Iv)8^F1klaoKm;0%G*1=@?I+KdyhkoY-L`h@RICU=Df4@R) z74Z(cQ+4_{i*|z|Xa|z~n>TobxTnGFoIy=KyngDh6$zI>1@S!lB{vx9y)!3Qvk*Qgc)rWWlP#EXDkLyU`5<=KeZ>? z+n!MHINsNBA$qAh_zB0z=67GWv*I_RES~xz+UWMvB=30MA$sn$ZI$CYuyJIxDarK$ zHxC6|x6zCi&`j<+B*eI$uvEo<1|Av-X706d{uUhOjqnr=j)$?etamjnI$_MOjd@j> z;5b3f%ZNa6>~f032c5dK!l z^$A`iKu=?&8xcx0pzy`eQz?!oF1BEZx#p2WVJrE}_n0A-wlB&OI(4NwQG;@&9eyCM zHo~Wgs^6sEn|d_st||bhZMFNt!S>tR=g~4+fC|TCmelkkC)cNL?E!|4FaJRZ>DAgy zu_jYWujlQirG=^MCMkmX$_YiB>&PWJ)nk$>Od^ueg^xd)fCt!4(?J%WJ8m+8jZx%A z!}>YIa6sR}(u!GoZS->6uoxSI$b^r72~y`p#uTNoMr;(dd^&t-)FNVzy&CZ5A`NA9 z0FWg`-%)g0$KGe}cl*j?k1CUhfk5_-yEzu28Se(1c;k4>~> zL2TY@F^-8x0R;td|MKJ6$%`^cCJx?*^sdht$HO(Uz2`jIt*eX4i(6WQH#2C@54$Be z(7UfD?1s{L)*xMcwA9);NytjCN3qAg*K@oEP+a~WC_Pt{f=951Mp9P11v=6>GTg1m z)V}F9`w@7o{ZMNp_Bg5R2J2yKn~r+_MIb{QZ5@K{KDOg(7FC=U{4~y0SGSl&qZ6Ce zncK*y&K?cU6@ZXz4SuD4r!x0Kso4`Z_PM962LyU)jq1&(twre-k*GA9tG_qI_g=sPde$96(Z zn}Th{W_)!^fw0OR6%)#qsJ!!pj;~sU8fC?|m7L^Q^ERh7zNtokOqQ)=0NKi^!h!KBASRJ|+9=h4I z(!W?F$lZC|jHJOf$sV@b`Ug(K-p&n=sC5!86Umh1{6z7N5ZtMr_cTOoxWDnwKY~-g z|FdQi!Gn9a{;NLoKb=$l-)Pa!3Gc1TOQ|V9YkuFdm6k+LJ;niV8_j~9Smfk)JE;F| zJ@|rz4GqSMacBKR1YxmD&FuJT_L4Q+_z7aTLORL#$xKESFp&$0Pw2N1A3~Aop9bta zTbca-h6?--S?B@{s1Bg-U59rvF-stKm7F8eHbcOLq!6<<4!0b92Z7Uh+kGeaXTfyq z_S3_8*6ZfNcPDeITIh($NEku^0z=qV6!-r=0=|!fZCtme-r>`KhZaMxW4{96*u{8ds8*%B0Fk{qMIqxwcILjF#fB?zB;{?$*^mwGO zZ#&yYfM$eGof}(MZEI`MOsN_8a`q<9D~1 zb-x&l%zO) zHL^7*p6Ex_YA{0d!iWxW5a<00DBa2!5GG1SMEqyd8S>>{6>!?`N1y+6(~uM{%R)Atmx%m?_FZ3wAt*EiP@=9~O%YGv~-lLe2xjIGDD$A_yZ z-hKqCTM41jDK|~Vo88Y{02f8xXrBOA(zjN0ILqQiCfP(Pu;aK zm>h`iBD9QWds~1k(7k$(bEiNcgdAT`ppfwhP%XHZ(u5EUoJ)PFEKsDV`&!A10nKG_?Cr8 zL8wP3!@WP9Y=*_VIISm+8sb|HtKvnofog-2%&+TWOBxr znljF7D~#L%A}#$*LDhPLpeTg z^jrPd66@EFRphFY`76LbTQww2YQWoEXj%et9u-X)X;7(DIq$};vf^xM=su9FSZ&Rb zjO12Qx`>f~_51ENGnN<6{R0-IyS3nD%h1yS->b%PvAhQ3JRl^kjNJ>bTw~p910a^0q|iE*I#?-^B2+94E69UGeSpywoTUpOUjRMj(Pb zE_G6AY`{r1v1c6mrU~$T4otKfbKd}mtlJJV1_- zFBgXBidne-8sWQ~3z8FPJFfsX)uAAyEpv{!w3tK}J^OZ-yU#m^xh?$v6j$c@zsl8w z#`+g-?TUB|Bb8*dvXPB-;pkL0-0C*t-~Nk2F#-XHKPb|a#r-}cMt z-eyS9SmB4^nGi_{P#_g_)8w&Rk!i(8?>Dh_diV_RNwW4HbmF5I1$^GjSCeO_V5jP+5m;4x@jTgR#}RZropT6Z9lljjBx~Mn8j?6EwAZ*pmrSmTBOe zzs03UQy2Ik%fg^m>LlbaQpn6O%u{6G6anQ!M>^FG1m+!B5h{gO`2e39RR{)WMFU&Ox6)le-8u9q-9t!hEyW4dFZ7;yPYw9zP?>hy=O8$ErdRcXj1{DYWuJD~2 zrt2VWuuXIiD-=qc>Am3hjmCDkEx%E@noPDQ5pd6q40zyq?{SaFrC6fcFbS2JO4>Q< zIp-L=D&yqusq{NJGTkz5H3=54&qjy=LgFAD+g8tucgdva|KICK&X$lEei6i8_#yEkjrh5Q+A2;^z{xWzVS0<;IucITeoj;! zF6dtDUpDSU#ogclDi4Ge?9Y|;;%IXA{Xc^(_2~B+=1A`N#;M5thJ$}G;`JPSIcKY6jecqK6m;t$3`~0|Iwhd?!HxZsJ}Q z>PK}VZ*)5)$Q22&T!zSiO5+pfO)#L-T==QsKLz7oeC{go^;dro2YD(=JvA^zsq-_Q z>-htq#TE@~e?&N--&-Ke*Gh)yDjo)GbGZ_gX!VFSU~0`}8xH75^(uIc$euZsT5^0x zor8Jd>@(R?9rje5W9DfHNRUzB6ppdC_~ZS%q2{E=ImU|G zZz`p~zcjr?%>KdVfX{NCe7QYMseKiLFdLr<3HhAYuMA0iFz`Ptj5y%>*>*nWSX08$ z3iPvqVlUY=l6-c#)Db9&D$XHQiDx61k!i#Xog{{cRtzJa=Y&54;OzoFgmzOFuu$hb z9so0W1hy_uKurx$we@c@QNCgGq>3Hq`+UKxPlS^QvH-Mm$^XQF;Vb&&;DDXW7GRr0 z*3vEG8eX=kgZ&IF@;ytwM)-O6!pCPUkjM_v0rYB(l|u+dw{~h2Q1MV~H6Wgvahb^Q zFKUdEcK|Gbc%FYer7nB%=wHoN$*=DG<=Xid-76!)w%Eh_)6bu0Nu>&)O|^&3Ku`9= z?29D*SZ^P)!9(EX?L*A);qD6foyS8c^{p}=FQO@-Nn2ipDCRXy*MU0)CqCAH{eA24 zjofe!-Mwan_f`W#6sQpZvz4akCP7p&VtdpwsnMY2t(e2=-YV_Mtt3H>xijVzHX@|U zJp5;p6D=x{tkjXPQbdEcjyc1cvVek8FTIs^sRYqBv9f5I6Tb)WTzpqRom8(&gh)fZ z0`&5q&jmCbT7d5s*caSf0A4l2BZH0lEFk#&T;<6j_+%D=wB9~?jSz_*2_fFMolq%# zAHWt`86=fmmz(@)K|xD&d>27%)c93cCfy~&k)Yi1N17KqKgKswZ;){ zyS~3NAeK$&*CV^S#$}AV`95u(c_){hAcbS2JGttk{@m#)aFwM1M^T$Nu}CbQ@Us4y z>h~9@oI4yc_7cuo(dRTqk4rsyUk_~7rFD%LjnSkNX7{R!;sLV;1G0~^?F?sk50vSC zZx=A;Jnnsfs#kEVPO5+|0dcPKT((7FbfgR$bKe+Hi9bH7?x>&`&8or$B8Qh}l1AR! z^wgpK%4*WV+V19U&ZR?i^tn4t(X!C*|7u3sX`#LJxchV+jcSB;)Xb}72bW20qJ65sec-+J9fO8XD`JMe9I^VJVArHoH&72Uy8s7I8Ijui38~xL3Bsl7O|X~ z18R}xu}+B;RHas|7)|2b`u7-Fz1r$%h?x`(PPQ`wNCpd84T~VpEIwcc3~=^k`Sly2 zn52HZZ(X~u#G){SOs{jkf8>xt)8PD~5yDdHpsf?glLoi~v$<&mtsOIFT!$eh@(VfA zUa}mN2?TcP7ll8KFDs+4+`sGnc;=P0vtFN$zMemiOVLz56pgWBgVUhu;Au#$%5U;! z_P&`sbM^kjEsClmq$~77w|j%Wit?BTwEr}i%L1={D%#RT1T&a{IRI2PpEI-(Oijg1 zxA?;Pso@Udn7-c-+Ltf&w)+{(2AGoNQk8#dwu>*vKeh$bKtmj@Ke@@DwYiwMVik)o z(%WLp8-y1>lSZ{*IiK+?%c8)ZD?&D11HIVD{QK|lK4j6$0FB_Xa=vDC9`ViF_e|Wkw*XeS0X}qP%=W_mj_8Nb2PQU8{q;5{ z4+DIehMW9dH~DTP#WPn!``C&X3N*AfS(xnlSK_wWi9z|;Y!5_H+K+Z%Wv)};aoWn& zW))-8#J(_?6U52x)O{@;mD9zvhvSSZ$a7~vfg7=HQAJD^ zAU=DsRPBC~3u+TQfd{{%mBpq&QXM0S3H&H%Au-r#z#3h;!>3i@Ps^-rV5#j}8P>)v zrpwU^Er&3Q;MvsHc}C*EtehQ;cigN)mzbQ3-H#0#P^J_c7v6=tqxs=A(h5I;U_smG z5x7je`yh_mRLoh(ejEoW?!Y@1^$hdfJ<1b@;AFXYzxV_Pn!4Dr?KSs9#P-f5Z3za9 zc)hgZ+a!(_e7_>xMVT$ab6*a$?PYptn$TT&+6rEmAw>`jj3UodD>m01IKj$M2fP6z zUmaGk)ok>BFV|oFwyHX$Ek7-sO!M?I=5_Ic0#s<*?^AqStpSL$0$}EI9GR2l9GNXC z%53?qpS@qYj-t_BtRDUjJm9^PprzTZqa)NGKw%`&~9*8d%)1{-W z=&Y%;`SdT9$hi9u1w=m_2KjH~bOw7{G`Hbi1^GGh?jE0(!smqsZ?Slj9X`os&yRHS zrwjZeBwrHz9$5pN@gvd$ksR-4NSX6+j_Oo0QR}t`3V**&DsepFw!!s@{+?%$74chJ zmfTF+DB^c6Q*GA&TicS1k97;^LcnW3H9XT;oir&XQC80m35<(Ed6A<2KNvf!ptj<+ z+n3@_aS0T6_h7|cf;+|CT?z$)ySuwP6nA$I?ydz&k=hCGdv(s7Z|2(FhW(chuN1plU1 zm7`F@q$=b$*VH1JY?QM~nwZ{Z%gkY%fKEQyMqGbT6xiN|;3!9=+TxyAe@@5%pq#+e z!XLk?iF#P6p0}L|jR%qc%ijHc!oO=B&{CMQrBkiJlP9n|U##0AnLoHQfcO!hP@}1_ zcuuaGHC2~|cs2H>qFE(hF{KxJMBA4D7fht<{x= z+JE9^yaB?R?EQ@>EL+1mCWp6S@;h40dw-z9ms9%hH-GR<;3TxrV|SsW!j-r5%k3jt zzDPW6s0in_YFD8~TN9sFSuq$hnv-@bT#Eg%ryMV%qRF-PI(#s zI*7PH;A&-z*A4A8^+J^@h>1t#g0fw>KW>CFo8ZK+1VUdt zXKp|KIg?Q_>{8HuDIctg7dq}n%JXWS;oYq9Wxd*2x&5YTO7-)SDx|&ok5Bj z;7SDVYp|42&JJcjEqQdU}RX%C;$b>cO4pX@7JXKq=)#RX%vVj;XSs6#k zR+@GLe$^%||M(LUswC$8os_|*l>{CMGH9w0&^w1kRvvQSgLzkiiv&q9q^W0wy9vIn zLT1feDlFh^(E3>YR|Rjz-&L3)Vdclm+td!K+C-bEEA!=0)8gveIN%eZ;=`PGp$4fJ zV9PYJz+Z+avT{^tfX$vpAKuKlX(eF&7kkG}dVyu(X7YQJUuf)CaqsC+j$f89RSO)} zmGTp_+<55mFHYCOf@u%b8A5^L=A-9-pZdO*kgJosZ2UF29CfRx=3tL9!4OogiMw~^ zV*UcIx|C7AnCqYCwN%_P&Xs6MTQn-Ol|^0c2e%FAfI=rVaXJ=&jC@cBVxoxuh zAyuA}EHyqsmrdsjNXi4PhaXsSL~n<0MFn+b5Cj$(T4Fh8=dDV3B|%1Z0QKk+g`ds! zQCW5+wRU7Le@m3_9?^bL&fiHSD@6qz!F>eGSfTI3BlfRbK`Uj))p6SOa`TJF*RH)S`7u1kWM1rtkGuAV(;gyvg#Rs4 z-wUG*+xNblFm=6YD7=3QH-B%XPf=H`BtK9LQmpRxE<%DLe5~AxGzTN zg(oev#ZVZ;doejrBUF|utj45KYrmlG;qip6m$bf0aO{o1t76N+EFht;gsz`c#n_P? zLV7t^SIGrNo-#+5l#4lYxbtzc-X`ww=V+e2 zQvC$r4Hj}3yf<{tS0m$!FRfOX;U4c51;$Vm^+5$RBeIH5Xaf5}x=#@hb-p?Wa2tQT zIv?Q`>Ik17Mg*?fNQEhOwG{B7&R67g^Ik=DD3aNlgzu9E2v zhdV#WeNXdgt}MfT)Z-)Ys721UFEM@P6%alzNj@MfigZ2vV6Qu!buX;u{O@F@0Ly<| zfI^y@YxuWhPiG%x5eIjJ49B!M?YY=vNCiboS$jzOM5qvcYp9v{Q&0os;DhT4amp%I z-l?9#IxarXbX|03<^*G?jdccE$lqTrX5u8?EQd?q{-koV&7jQ7s7<&UE4E0;6Iq(^ z*PB>!w^F&`&)=*%?5zDb!DIW@o};_xeu;p124BcroWnJ}m$yM5(o%`lg>FStL2brg zJCk;sY{ycXdD9(6mFjmgR0Gvdb{$&`4Qt!k1MgT5K;_Z2ee~(a>OuudICal{mE!MpRx#H{#Y^ zIQ;E!;rLA;zl2MR^$A^##^P=nU1Ur;YH~iK$POI=oaNtVqalrPhD;;@oHzSsG(=0l z#SaoT6xFxhU}SM-Nhs#5u|Y4}Od$KU0qN!a6`+vGTD~bQXgJ&F!6R3AqEjqH=W}UpjJWxv_F6xG6P->r1oaGPL^Os|IxE`>@jzY)G>j&W_eR zDB;{!l^>I+a7`1Va>rJ=9K5q{nxI|pOXPF>yGrt@@Q*WLw!i%o}_1~7%S-*8eCDS1F}@e@}L=oQPo$YXR^j3R>1GtlBxYdO>1Oib@6*;Huf6zpb+65Ey3gcT|iwhl?x6lWecQgI>kVPJcGhXT^7H`LOh#>RQM6nNM z>GjKO!d=$lVIpYBk})D6=V*vg@Yfl7+i7jFNXS)h;b9h(!EU| zV zq7f-kGtrxCwt&0njI7mfF@9R(InD?5&0+2`Pt2wDps#f2R`;JP8(2^t7EY%QH9Hlm z3!TpYG0%@k>vsHLI`;-zbV%*#vG)DG&!|=;0ECd&D;y5^99aJ-$q8ON$Xvv@m99?&ZdD%3oNpGC^N+}h5c#d+t>9UvS z`EZex<^5blw5Bbk5qz`)KiY6UnrnVGLhM^7^#>nU2|V+5D+UvW(d4pFad1AALP(|{ z|C%WRw@;L>vYNs%fxJ5n3$Lp7li7236G3=b$QoRSEMZ^w!tC=$iRFR!EJ5gyXpT_w z)7nYxT38rdt=a2zPRQGGFu8E=SEqJNksnRzvO!}ZW+Zfe`%864Gl)cxl23mh)lZG; z8v-8faa1z?TkDWw?gX8+HvW-kdC{hVc$jH*Lp=f`97?ioNxP@$zX7@3J3yNsd4uRl z*3+V>ePrc1w~kUzgZXgs)uW)2bAb%{Cy&dNS_~Myck+4JW^${E0iy{>qatY-e4oN& z&fTCZ{M4^Y&PYbG%d#L!k#pU)ZJD3Rih+)}O7tqL=vGMWkjaSbr;&e9ykWF4#Eag# zwUqleDii~lbfczE%{kpLx0zZ_QM(>&NwUALyl6F)c*1neD8UQsR~Ed+RhY>pHzT1O zwv`ovvN6$+>gn#VOH}30r@JdpsjMIj1??n5)Y@uZyL9&QPRDn0pSqm50EeY05VeCf zA)KP!nI{6R@8qs~BYq_b>LUlSNR=7_s?&!a8Z5JN7R6Wsw+a_-JMtLUu#`j(oEo@!kedCGtpAl_5?YAHjzT zcBRmpIREOAHw;=ncZwsM4x;S7(U&OCY(v@8^9j%j}0Xku-jS>Wj~ zXv`Fk^N61^EWU=UM_(G9Ch*%L$KYNmzRhNa^~=)Ae!sa06m?AMTS7q9TnL*tdQ>I| z`BOn$=qn5ZUA;o)rPtpV&m=Nwj&yB6T=td} z5aZ4yy{~IWcPj;U#9C}8F+(n_jM%NkO~XF&WA!rmGQub2obkCe^~RTcQa?onKI^-! zdz1!BlujhRKOB3phW)p`x^0{=1GFngCV{t|M3A7{Hn2{Uo{LTaOT|-rkqs6Q`(fH; z_J+-%f88ROtvX9NGOjr@{$>);HOJSrKC}8liXOx3JY%RQctW#53z4$Mf@T;Ir+&a7 zGCiY~TwM^YhI!Eg|(!@BcP7ujcKL(^=3#jV!VIna(Dki`Tt%;R7YXiTbZB zG+B#+oWXrBs4`qB%6OM+Bi`Ef@Dv=Xy1Yzl2z+k%8XI-MssJ^*ZLss2(%AMl7nNs!<); zQhY{d^=%cV=Rqe};Z2X8?C% z2f`MMT?{FDaa}rV{^f9Mc{p|i$?hVz9%R)}ptZY@yH}CNn?9VZ*)T56)z8bV0S8|i z&wKM~cO&)-OVLL2VBHKAQjW>}6ULo)e5K5d(}t|iw29j2lQo(BV)RKOd|lPUAIrOp zcqn9Z7RiUn=(?90q4T3Pn=Yy#dIna0;Mc;AQf%?K1u?+Lmj!*7744kEFWxu-x|SAl zS$PoJ^t5~B1+=}8g}k1^T$}jct5y8^UP=acTrQS!*xz-Xdg)K}{8zJc9%`tu_kC&& z*uIh?<|Kz$>45%|H)4uJL0G^lbk1D~nD{jjWDAfAT*8xj(4>upqJ$+&hy>)DrWa0tutv=fD?{`_gAGOe0*4Ug+ z-~nUHTKr{CieYd3{aTnD>&Q;5X#M3s1n8iy*r{*>$J+b?EB%yiw!XJ;mRRvR#lTI- zLk*+z&I)w6vht#LNGxAc92LhzF(bX|^10B+*E5~UA$N+Cq%2r&^PCtfX$3)m z37*E80>gD&oEytAw1xg8@jpYs4cfi;sZ78#hj{@4Nj;WT7r^-9N)NBU0(Sq?Ua!@ZLFJ=Q{fHvYnvSf#<7?#`MnJ$(=<`jt{qAS7 zatWZ(NdmhkWzm~@-nV^5riyNVKKv_2ihu8&s11Ka=P`?uE_CeVq|j@0E9ZY@oAr)| z&URuuoGM<3bJnCbqNR{C@80~_33J_c((f*8Ch{l0?Rx4ENMrPkl_Z22NB;H`A?w`S<9yg*> zA6r^eYl?)3AaHQ!W^5DmGlL1SwQKXw<#qx=mAkg!FI=HHuG4inr~SgqdlPLkoNi@A z0;RL98k%HR`*`*`4)|$`0Z?A#-Bf8k&p_89&1C~ff)8gWNg}-sawQr?$I7H6iNK@}2XKcoa3_$WSqQ}(g*T06-+r6l#4rA(75EYcQv?KsUN zVLIN@w&SD2EbtU1Hf+9t6mrIY#i=aqKxl6NSMfb`Myfb&iCw(9 zQp^wyM5xG%eI!~e?*3F8DzZ+$-0d1=+T6dU8ly1qWL=(t9;8R?aYh+J+`4R$-X@+8 znMS?6{4;|`OksxKfyRTW*3dRB2bt%gvp}4`BJ}N*Q3jplxrkS-;t=A@)(YFFjU$NYL-2-=YHU-xRmjZp@uXVA(QfTvj23hv6!?Eefe8%8o0bOZ)Y%zbkE< zv@4r%yz*cs*30sQhP|Dszj!_GhmSE+naJ|6F^j?&NGr=EIZ;wtbEKm z;{kOFJMjts@9kQDmF#7r8)#FUH<>%<$Jm#o9Z~n#bGS3rWoP72o8#NleD(w}SLADv zO9v~JG8^47gZ3L(v%-ka=n*j+AO4gRS&EBP-rGIoaf_o+`0B`XPfK$+e4&?4G9v7p z(M6}!qA1dR1OOvXi2wdR{q&Kv&*r_11GAwVZzE=rNQ+*_t2pCEi=jYUXS_9}h`Ajf z8@Wphmz~lxNg{*%?jfZNMS*w6`>;k9yYmo=XDj@TV|A_qdsPj=>_9wP>t*;5wk1*$ z868Gpl$UOD5e>6i+WB{h;G3Z9f#K6LaU2e{r0pAL)gj?GP@t$Fx?!!)t(yWv&k7S@ zhSRQRQFCL4QfbR+wrXz!|Fk4|?D zAI}!mON0~wek_T}pr?LV72)8*+E-I3fuwVM9F)5|Yot!t-D|)XPHXv?fqYrO(JA!C zO;W}g)($bFWz#mx;ZE`(&jh?oeU@HdZTq$YSI@x{*UWub5@a_W62jx2PyjoV%o9Ht zMid&hAu#!74dx%`BS#pnlk9W#;HFB1$?!cwb&O(U#_Qu zyFig?s>7X7=-~K_;;_F(r;09pRf=1sD@Kza6wNpI-ptuW0f;o^;;n>21&|yL6{2;v z37OdB%idoK?FhRS8}lNzv z>o`>Qyc+V$)@4cdjV2;W?K?yKHZ;TgN@#g&@_Qa6qF-)vXihaba1y@*glY;736;14 zM)kw*1fcWoFaJ11Tefv{wO500(*#MJoyr;dSD;$A?IVK2p!v>Nr zMTVU@tlZ%c?#<>7tLJMD(LYJ9Iq0mC>6+iOv;$86u4}weH>s!dB=(x=yg#5lf!b6^ z$6&v}an$>4ExwfQsu&D57R$oyWTQe~sTIAOg>YdudT*iH#9gYAHGnA63QkT!uh!N;3ww@W7w8K`won$dPi z&oA@ikD>+qYscZ}?-A>}jYHW^b*AL zAh3>Un8`k9T`%S4e*Vf!afo=WN;BxBVO*!mY|W_8m&U_~#831uYp_ZTmB?_9IBeX$ zLBxV(`A6{F58>MDI@~ENDMRpco5b#! zV7`wKbd);YmtO5fIo0(&cGF6GJexkiDBA~iwb)H-ts3Jb(V z`n;9uLe7wox*$l4OJWr_E3i0vGo8+%aD`E46str_E_aEm0XbSF{1Er`NMuv7l;mRV zO0fU|Tnj09hz4cI7gxXPlMX4+BFA7a$wjtp)bgMwOGfvC-l5dx{mnD}Z@LBe_sF}#nra9Ue zcgViK)yHdoQAnqe-N1a7{sF+OMZjb=uOugTLS)VtN3b07^eC9G%hpS)_(PZ0FSb*T zs$SrDfM3J@n-U+4u+;!sVuYib-M~(($%^yY8QFJ{V?zPSCM@nYdkKxjos^3$MQF@P z7gJLvACzm@YrMx*9}&fv+90v@A5YSA_um&?`(op#&Rb{zgE{}p^DB>Fs*1yqlViV< zwQp7y;)#VL8R4M_i33R`)aK9DFO(NGHmWwAW1x_eZ)O3&&ns}uFM7PShNZq!Hlv-M ziaWhxkT?O#tDe!G^~;sq>ynqZ9xCjd@yCUVDpfjjS^zmt{)9*6?xowFn=CKBh}i9$ zSbG%y85@T^UfK=r=IQkU<~S2RR_NB z`xqW>6Ym&e1~~jw5L+KJ0~=jQXWW6is`ui}*-3Z2>0JV&%ob!^?3TUV5-@bvhOv?? zqn@0-a{f>mO!-Ch-pnXqmtsF9Es?WwBfd^al-0aBRT;w{y*aePaDjUq$J2QADvMcN zv~d9H7@_?bv=oqS3MpKxF-C)R_|T{C2Oz@qSv77%B;#X+lM*_K8_m7f?Sj@1g73^k z2_e49lhPA-$oz!M#8t>)6f4U-h|=63w3UQ}i4WZm8AN+}F{zZ1&OaOPiFFZ99BjKC zzM~YnLLYy%{zP~fQn6Iw@?~nQ>aurX;O?JdndnnJH>kV%WwQwl%I2Bl>YglDP`|;b z_$+oWKpBb3p@Z-$5iO9}G(+avSZ!wB9*2$j$X3ES!}d!@Z-EnHvIbKzAmkKk7%dzW zEX&ho_>o;25$Di)dee+{+5@V~HI2cbJ>z+(N4I#LaSOA_7%4M=hDCxWDk!C!(TpeQ zhhFVdti(PSqcH^dqcs*kl2*EeJg(Enho-28>BevxsK@*-7?v2@j8oZXdU_qMlo#EG z8Ys#F7NWj>x1v(@?FOn)8fAr%kTa>GT%sxJ=r?z9p9qN&wW=sxjQ~((T4PfqFpd-1I(T`pP-19HJ6 zE7Ly_sGdmrMfKd4(ezw@`ppz#S#pDG^3>vY#o6WJV+P($-{POQ0?*KC93~$Ac#ry{ z(T^g6THn8Ks);wL5MX}|ci0cR_9x=9cQ8zmi@rX&o z=d6O4ZxpPlo)4#ZB2=@ci_Bx6-LYUzj+55>o2j?F!S@Xd* zvHuB&Z87C693y?|gakW=KrHtwA&HO&hE_aT=Iv5?`FU4n?Q zliuAR#hXuIeN0jF=$)>%l2|dZlkZaY0l(fM&uDjfvF2Zg))lQrTyN%zX=I#$7Do~u z>+g$k4rz@D#eh#;taPQMwZ644#58&GftmpxZ~RGBXUgtkKI!{6in)5vMbivi=hEdG z&28VT_=)*u_J$ewqw=@<>bCtD9F&rF_>CbE^z**OPlP&{fPm?HFophOxBLWD&}5za zD5mYb@u*z=TOB$HQ^TqHr7@CtL;C(<7A&>b=?baaaMRLnc5libq%{I*r-$=u^sQj0 z@Prr(EiGfv4)15qss)Rq@pbg-204R0+zGG|z&K zr;2LFd9Lw@JQku%hT?FS-$3OrPWR1rx>vkWCS}=|ri#9u{q4Hak{R=P^gOmo+WXD3 zgZLl*ve9Ykq}%=iP;inF=FXS;(k|P6W2rKMDM52XX)$DITQNypoZ>x2Lu(Hermky0 zh$7rUepG8%n`dbs?p)#l%Ss58CmW~;=yhx`B-*zw9G$_AQhz%q9?CIs9HMk(IjbO+ zf3T}H?;C$n>Y zs@eI#Gm+Xy+{uyWz3qv$GSD3CW!7TOljX1kZdT3Thn&0Bsv3E~#YTxM1e(U~IICNu zYa2{IoON?&XuFoude@ZsEK;mVsr5EJr!ZJX*QHmnmwJ{Th>TEbjs=n6E>{SDXj&Kz z6*t5PVvD|xM~e1#!jv}_ppRMD*Y&RAg5M{}&CT8p98!|6GO|$wD(Tv5F-j0z+T1eK zP-{ud#LA*>6t5>1qVEgc;hTzuWX2TYOA2J8p^NjuIdfm4@3`Xn*@}BT8pj;^OEqF) zQwHM1fKGq?EaY@Q#;;Q2ahnU-$tv>{^W!#?Q&pO!(7A%!7Vh-z7$2G(A9!%x z=S58lS_^7TWdQVeX*h?CS6v${O2wSh1D>#(P#Cw1V{6WXo-)h)3Mu=;1ShRwii$91 z%xC8t%I#yP!53v7?&*Jf*0sO8pr2r}=*3~RMs$4`T#Tg;@>tI*RZlld*!tb}nnWV@ z+Kd{L4>Qj+FFqM0l%EZ`>Q+FH-Jh;(@Ob>4jS!YGZHnYq>|P?L#+28Q=x~EQ%07)o zPsNR%(rs^`aa`7lBLK}mJrs93fc^L^YVZuKoZsUAdH!KvyTyvzXGDMZdoV|}@TU_<=*;tj)u^mxT1D8ND2JV|AK8r@M{1z4-0Z5#g969Noqbk<> z;3A|2*>|uJS@0=X)L3W(@Trm@im(FuU)XJ?=y3EIU%$SpeERix+50p*oqHXeH(#uK z)1{91O>F1FQ3L}gz|eNo45BW35$Z9#5(0>M!Lns=5$7>oF}UXJiMrGtCB$iumM}l> zANe^nLy(O7I^Q(Gzj{#BDTCzV0s)Kb)qss3CDT76(T|vg(rkg10j6UtvYXf>E5A*c zS8CFFD<*;+=Xj7vTV<~%z9ncNvwmxSf8&KJu5M99gao6foz3l(kVF@a2%Fn#i8hju z>xcGX4AqPnb)Wh{BqR&)Y{(m*(VZZTY^KS}_-n z>X+?d)Q6L6Wx}-J4HB`g)q0{CR$`!v3ONQWWdVz7|+OufCeiJ z9Sm-g7aJ1Ov0(89x4Fx+zE~e0(G3t@-Y*5i2Arx;Fn{19H8j!MCLcGmV?Iu(e}8>2 z+~vR+fL)_MS{S>}w9;tQXeo3Pu%8#IY}B4E zE_svxSTvT07E)>0ZMQdiu{fKW#(MH9ZN2VITkCV*| z;U``FlVbaysNIC?Y^(hBP|L9>e)>*bPWLkMiISbtZWE)3?*#|Eozji7IvLK_c5LaJ zm&W1?*!GpcszRYH5S5muv5!S;3NTf{AfI?x02$U|xHMt0r21hi;WKH?K}E@SUxqc& zr|=X?8V!j^$iWs(8PwE93cqWFT?Wh+nk###px}vKEv%^d-rI_iN(PiT-76@f0U1G}zl5v4a)jJQEGi8!c>qDu3LSXk7A?1gJAO;^DUgsh9$UsE8HK zfaz)!h?8x1>>#Zp(T?816bjZfCDGBN_sLV;IMFj=7;OM&;JG&ov~O<*mJMd{AE&4v z5I4})0FP(RfDhQ$N`)-=F9k8GS4qeZ%LnyFh~^3lvJ)E1lV4Viqbm)}-ddKd~mVxTh z0K+0%ry{ID84+h&-@Tl^ORFZjT;#Fxj_9FL{Z$xZuwq=}j?19nx*#0}-{`aj`dSo3 zI*9Ap@#ao~cqXCB_a-0zJPV&v**O4LZ+6?t;M%}CovCK+rXyYnr0s!oBd&R}05O7h zfm%tmEjv#~_d$2)51R&@#odNPf8Tf@|9V7Je<0mp84(dlxwx+P_Z`~Wp4{R;a2`i2 zuQS9#&J&@5T!kxD2*>52{)F_QGeynir5w(;&w38{)uyB)F=OwKO;J-cDv`QZ4@iM0 z8D?o#`Tjre8v^@atXvMTXT@C7e&jvV#R*(g4BX}vWw`L{iA)5wHA=@L4_p|AHH`H_ zoc+7sR4={x00Stp_Nl+RLCN}VIf;T(Pc2~st5u$4FvC>()@N1MiqurTFC(8$v)qSjlVMeTSj_+Km8uBs{%+qt(#`k1+DIv6Zn<%HAoK z89`Ij{1g|rQ(U){@N6!0Ik$|b?rl|!E$oBMt!=o{n^t^Xa!-~oLGh9X>42C8aTJLb z^QM&^I< z!mYzs|GWC0X>=sssfq zcA>$x4oSym->F~+3UtE2?Q6%d5~d*0U*f)Q{q5x5r$BMJ6wI0dlI=6;Muq58iy&Wo z(%>+5OAb^B`Pke*7I#}M2CX>O4NWNR)+LA!`>@94sun6xf6l!Tw4a@#`}8s~1sou0 z&O0MB^cXB7CSrUGzxKa995HEAunWGq;|j?&OLr5c1v$w~lNdG~B~&cyOkw>qesJ9b z3!})z3`MQl@J?X?QJb=dc|#+wpt}$cq1-%i+CCI>i!~3@n3qqBG>Y0y@K_ydE4tat z%neI|vSyEp#~?C^jC$F#cv1(X*ThC;_MMK8_^_z02v4kn!FVb9+I3)V%Lvf`O@4B5 z`H@!}7uQqc0e&QEJ|2W7&HXH9r@8Y?QtSs@9Wj=MB%OiLcI5+s2XDtWow$;I0{x4{!vd+RZN@xr4o zeGx(+U{5$>$1l{{_CdT9Rw=wfh!c{>WEOE8|7pj>Xi~=|A~JA#pTTK8NaT{#%~-jq zO%r-IrL3wkw=Hh8ZiYk(_8(^%LoC)iYPD(@gH}qv>L7RdT(ZkBk%bGleq24)Xb8|@ zqL{}1N^n};nqXQQf=v3mPLtUZ|6{dD#jzHK(Go^%oT&P+Hhyp<(-T?`LZ#DyZ>WZHBzb*2c_q@V{fP7>`sE#7^Uq)?>Twjn{Y zM^ZmAkev6U04156z^KjR|vKgBa^-s8zD*30?TwWdgj@ zRgRbJ$JXA5n=_h{=TuG`gPv7l1$^(?5t5izxT*b@X&Qyh(`ZN*L0#^~J&qNd5Ec85 zckk&mW_T^VWk)QAdwa~e@d#`tZbwC}){Pz=#YS1qu|9SIv788!u5+XU!S(=^S0zHQ z$Z~H5!ep#ydN$fOP{n)a1zWq>(y356dP`PFxZPMPhSt9`Khgsif>2P4SkrSTjjh27 zE+2(tT>etK!1%%IxAF6E->wx=+G#svdCbPIC@?UgW@aA{va8vL5U6X6mu4;cbyQth z_8QX^lvkNSh5W3ZEVt_?2j82z5eT|9pG)3Zq$0dKk^IYEnmEL-Mu{8R5Hzo0%aZutpOfqNKOerW(dsBImL+)n>xJ z%os4a|5@j1K?(B|#)TOm*^!1NiGDKMUJ53sVCLj=@4q6~d1jml!UBI^+Ism$GYJY~ zFM{=QB|p|6>y4Xt_0%s63~2;~S-Au<=9mCljVRfCzCB=@G{^4Or9MKnd>v*}51W*0^D_w<|d)2Qj;8<_8>bxc}nMekPat<@y*-3fn2)JugX;9 zrv1<~#s>{I7@eX$_Lot*pWe^nDKUnwunv^8>58Om)PcbbulfPh$S2U>aj`Vi%|YA| zW=F@kBZptJ&iy!elBm3Y)R5KXPri95i(?ReY~rG?HXh)0yE_db^RW2xbWvSz6!sm$ z=`HW_d-^tIBbZ}Ek%-A4vBwPHAUT_=hqa4o5)bQvGSKYsvk30?iR@4bGbiBnyxHp8 z_`~Yd!mF_?F;mA6Gl*&l4n{EIZgZrmNDBt-6y?q8-M-`=8nYNZ{~&+>8mpZUszAnt!!cWvW$K zh8l=3GFh&fUm2DS%NS$(BY?3fMb;73nlbfr8j4g0!vRjJ3}dAGspwG)11P^OPdz+C z$>qE>owpJ@7vz+@fkmV)cV%XvDp{4GL0g}q^>PCMC6?Q3uN2)%4;CBvvwEj(@E75| zh4~P;iEEbMvec(;w9}BosJ+;r`}WzcupgmP) z^VnsiO>L;g($v*Si~j7sAl10B_COiZ3C;O*+b;eSg38v-?#V4GjD&rw2`JtD2EP(& z0ReXucuU<$XX3JbFe>VS`??}tA)<*^_58Yr_=*2H_Y&*4E9_M0Y0E8rGuT#iu7!nu zV}eN-2lp159{D4R@g3ezG|kk3l=nCzD82go@Z^hPQk9D?*`oiVjIERl2Hq0b5O#|R zM~Rn15o^STg`jHn2ZT?2TE@ZN6I(RFC3bZkwAfMS8BMjyETX66$63j7yqZ|W^vZUc zVhQq-aFU<-y7$qaMwReN-#2jtH|5s+R>$MkK-YM0rl+eU1yjqp(CKWio+yr)@C{dZXHR+oHws z&Zl)lMir&@7#lh&<#Tc9KQ^#q3;-Cd<`VTjqnn(r9XoHkrYF=Y!i#8Z^^FIrB|U*Z z{@!~wj4&_TyNmz&<+mcLPPazHN~eUtPrB_c*TRm_bgoLN>P zBx2lko*FJv&Cbd0Ody?ma8z{IOz2{S73QVG8tpTz_xh^SI)%ev_MS+vX^2{H>=l5- zAeNdm8aIq1H%oVvv0 z?xQ*uFrR~b3@h*OGeB@MA7JghFS#26s!z6pwWQSK&((+tqy&irYVz0amCa@J#qH&u!NuKCJ_L2aU#=* zapwsCS0Xbc2}!B6+*qXB8f;=L6j$0tbZa+UTo-eRu7fBh(=~SbX^V!V!`;|$E{r3w zwI4NNN~Ryi>~4A9jTw-o0=F{no2_*^ffDHZO_7PoxpaWMnx?-b?! z7h@%4rdF)I4@VZ^=f(Mvw|fNlJ3_ms1YkgU#)qp_gHMZhssh1aL=Uz#3oo!uu^Wa6 zhtohOSC434bcdVys8jiu1!^PN#Csr4o^@z{_eVDV4vSj5Q2{)0I~H9P_Vj(xx>vsa z@|-gfMAP42;=Cn{xNaG^`ya3n6zxD2K?c6~d6%7s6MDFu65jO;^_SMv#(yw;6wMXD z$d}?34vd&Qm{PKCH9dqko^~Y&oElwxo$|2gX+q=dF8PB2-JR}AJ1{pEpZ0F^z*e7D ztxZVnr8wLW>4Q1zEE^+ZQ;)WRXlPz-Qe~gP&mYnqV^Z?`wy?v9eIoe@P2Hm4ttdCd*p?qgniIV39(ba0eabRb zCJk2riM*X1hX)gfzs<$G!`|aNCPs~ywybSq0vDOuQ+*~+GOoV;=FYTdqH)I{Clf#gM7%)d&dhvYg&aYpE zj#%1x8Q678KUYns+Zqbz37zF2OrkVKe1mwJ*w;6%poOPj9EcRNV(OO$R6`I;Te|U_ zKU{}s+cCy@(O?n+lvy|{j`Xu&5U)uLcPCe~a?N>SY8&H&^XJhPG{hThz*Riiw3LMW zq>t*^Z!kn((AaI8H^Gu-W#TDyLQdQC40EoMHjH7#(bBQJTcpJW(r+JTre?2n*la{- zP?X^J!hxbK2O*B;eo*D5!p=c?SVCtY!2bK`Wm@Xqp}ixd;se{B`?{`$3buvuz&9`7 zZ}f$l=vzb~srbI;)yNyXnp%{&S#+yad9FH|<0m|>wO_{Nc|$ISOU(rh~!adFH4gfTg- zqn7go<#_aXDSPYe@z#deE8$UkezVV($l`?8KhACCqc=|y&kEwAIk-xFX19sHPpvw;^h68 zDqJnToxb4hAD%T&$v1I6IoZ|!lFDX4MX$EMZ>X<2-fv~*64Vb@o2Q5MDmVr%R-RI7 zzZWTD-A3cvXzjcb!4rA6gfK_yohawIV$2Pz{uPyVhw~yb&5i<(lWjj| z>4o~d{x`qKKF2)Jc}-(z3kQvh3G~|U)bP1~td2#@=gutYb6kKLn-Hrzk!SIZ=)9tm z*he0pHTnm7>WO%4rw*Q_Z!J5G13h}QELe!4vd*Yx@aR7zOUqNV{iK}(xE-%jso zi!s+m5Ua;ZIF#!tNzslj$<7a22BVUc4BVkHJ$8S=K&EVG6`P+WO=m;w8@1nR>WixK zmjJL&tmjjK)yV`cz8@2UBqbJ~Yfaq{B)qcN1`4oz&$p1-CW(Pg6$IcrcBB)&Lk#OSnq0{U%h)9;{K$9sAoRoGJ9dTd$rb z%uZydWKvNzS{DOK!1S>R`$JsFj_w#Tk|?;V%k@b9uB!w$HiGeNtzZ=_Qa(hhzgG-} zr^$ZT@-2>+xY>ogkm&bFB(RY&6rI7xyRO}`qh}iAa z^;cjgzG&|*W{uf7d)g1gdC@+(I+ul$!@6;uRNro zRXC-I6(?uI-0{;6e$$y2_*<>g5X?@GEI=ic*we>jB>nMK1+r-8)&!Sw#7u8SR8s{$ z0{aV$n0{;xFB5V(Y%5K4^7I>o9i`>7 z-JJ_>ba?d5+*fXwFQuT3*Jp=*h&^WEizyv~WQ$TNT||>JtD{hdeViV~jW{>0fjMl! z=bN4F4vrdOIvpr|Ve9E@$P~#Fb1#(bB7?Sd61@`na8B#Vh|PCaGTv%)VV z)s-Cpu{MpN+2qXJR=A4;h|)ELh{zOoQQjQp>>12Uy5)frUzeVgC|Th@297F9LciMu z7_eQpNmQF>=3sbpl?mQQS3<^Vscc7dJPv^zOHOXdwMYW!#=wIB#ss4o)RP*Dx#$l#7h5NrFK?DW+;kBr}k?KYg|cB*TkRN(iC-sREQ&(v3o0E*G6Fvfy8LdD;ja2$LGY zrhG9YPM<-+ib9!GK{9vqKCwZWqLKoB3wZo>_TM{B-nJJ7{#-H2sNkj29uefYbYW=l zqv$oh-qp6y(u}#P%~FTE3BQRrQM=Aud`y9VFR5i^t0zt+ksu5x`#_a|J2beBMTQkY zZ8#kYkI--BKgcagi+wIa3YxM>4sJVi;rPXB%6(*yZAqh$!N6sD0do!c1XC-w zG({(yZ3_LaY*!u@&7<;i1slfmV#L+Czsi9XwfYxC_`Q)mIFwGYaiNL8EzZ@exiZ>y z$YUzq*#&1M+WgsXYN5rum+{!Rp2y;%Ds&*640)$R@$zK3ahM8@|j2&>FX=< zx1MmOU_7oijAGfY$lZYFe-pw8ZL=9MOS^<|h9RcgWJC;pa<7ul3m8R|vLqAan;UuI z5qvUjlHSjTPH$#ACA^uW6LnEjB_UJ1;K;8(GWR`Sqsf^ckp>ia#i6@SV^oy(_){H( zGbTqHW8*FnddK}xf=7;VZ#Xc^fIYCjp>k62X622If!+_k=`z_>vew1uprP z{L90EJaXBM#=xUC-+yqc%~&cU=YPX!TA!2hqUM1I z@!9s7U|d^$(v^sJb9ggxt$Iuw&qp5ibZ+VzHjP=Q?sS33?%I!+qG;#J803zSMONv9 zjIstZu>RW>kpWUDRX&By54&lbSh)EPaV>Srj0=rrT7=M#?je+uY(ht4{O-87hFXwz zESf@HR71HLn?J=~N;{(6Sqqnj-_xLP>Crq^Ydd_n7T&mC2{%-4RcW%;fv6eGR2bm& zZB@r!8!IiK$^wBnPMAFwM|%MkbVOwKUFh+QM|lJ<71779UkLq1{j+-2*Lr<|(=fw^xBi}P5r~lVDYxnu!9 zu5Q$qBE+;=zbv@?YMj$I%d9=Wh^-N%fG1GP`5DJ$LXwx6MX;iNPrlEf>@l*|38yN~ z@-}RH)cYyylNdjbT@u6cT}eYOt53!KUDmc3TS`;5|K(nJ5kuV&)t)jF@uyvTmbZw# z`YDpZWsRb&4q9ei6wyLGzd|++m)WU|H|YyhCr&@V_Gx>(j`7OpfHC^go(e!wL|KMe zSt-*+p@RQ#(5>8+E)zSf4|iA?8_4V_o>5vOE5%>8n-6zS;<8Df&j2H*q zKS`~FlYh6dl3|8x{H#$k{PJ2Pg|cX5FgPKoppsF;IzrZJWNzx!+d@|g0=<$M4laRvui*pnP z3c_R`QQn;haO>rBsFzF+8d7Avt}{MOYcm_wT{*s3-Iudws2^KZ(aLz4mJ#|w=O&%5 zaCrUmwzb<;^_8=n$LDoJEYJhlCblZSZeFt4p|eZ5O;L9}oD#OfW1tOU8?9FOQrcz1 zG&;WinUAGh?ns#O^#Cg>iZx-(O&x$OJdW-+hz5 zb~PD0tUC$J-$Ml|2kM&>2K6z0*iv8d7a|riW6S@JJL_Jkh$S!2Icz&nYYx!?U_JV; zzq>BdMqwn+*PY!?-~1_=oQ%9P7HOx>_>iCb#3>zkf1cpJDmD|PuBt2%)ci`c)%gFk z9sj?nbL4uWj&R(cOLwdoFR8w$@)%tDEXWvZtHF1MwkL|DuMo7wIafrea<{+U#(#&? z-0-u)q07Hs+2tKRn=E9wfX0H=vHFP%4j=s`)kdzPN^u#lr*gSx31_)OMdTBzm4tQ`9la`{&{m%XFA-DfRuEKwv2os#l*IvNuaX(&qDVi}VE4C9D4t|$ye7s=NC zBZ$7N=hrR_!DHN)#i4Ls83knTh|Gka%+aP=GNG|jan_tdkedvAkSKKZ`x4sE6bGuG zNK(znTX8@mOPV25@}-9imh#eb#T_;}y@)GKiibdTFO1EK?Z4W;S~p}REp!|-s^1&n zXI3RO4Lt38t3ZauD#>OgnXQ9gQJpFKy(#3n!aZwnvwqful1&mxZ-IorCgp10Ohmwd ziUrilP9*6gBWwr7ui@+io0UBI*~1nE`~JL@$=hE3|G0a5ew)ePnZoCoTz0{6gnpoK z@yTEjaiy+Fx0Bj=;$V`c;#6?95KA7`b(NA_>Ymb`%8^f&?V&+n24wM)t=Nlo335`4 zUsY-pHfErd8j}@3DAI>~kdT=^?adlvPo33cvXZ><=ftWUSqdbg=m(xW(lg)QHz$wh=E^b;ZZQ;)0VR#A7$zM}ua;WC?Opt0Dnqous+WyAb8 zEd+66h2EF`5?1z-wjv)W_6$krWgAb}#Xzb3^MguUrZLgV&6JPL!(!E}o%&fRVYWTf zi^M>h-^zuvois(LWEhRnF8U`DE`}4b>_&y?n!Qk%?zl@QFTSy2n1o%fMb6 zYHN$@=n2ws#lhC0&0_EtTlMu}Lp2G41H+Pj&u~;g&pY6HE0rL48#?Zm#>6ilqe<9C9jg2c=7~qrGy|xhbY1)nlvc@Wo1JsRPP3 z0)buk@(4|n^a}CB(fpb1A>Y|6p&ymQv3%V<4Qx|=T5~1n9^_?7!h$V>tn^$)=+U22 z0&xXD>tiP9tv;|;owYia$8xCf9W1_FA@&@3zW%*?ZnjU`_uF*gkI;96R*rFwbVNs- z<=D;%p|jqrK{Gbx4E?VNO(yIbo<%_deEA(F@Hu_%BVJ9gO<8R9eainEBx0Q8Hfw0m zBx`87=P!U2@alf7n@qPTC;QFfJlKA~-wxQftJcIw)y9k>jEb>Z*gb2~l%Z_SNJWiu zuChsC$q77L79e!k!PD?CEAH9;+$(NQ*t-WNCG51U69vo;U;ZgNaGzIc5Ul$k?WY)L zNT}bPC>W_HOHQHva-RkzG+>Ewg4untDtPOyj626ZD~38sSmk=i+hg ziT4)0u*QlwFvijkEFc8Q5VbH|&hQ@XfKDXdi6vKm?v>=iB_(v!UEX~`Nm4^dj=SXo z+l(w7cCLrHeQhSk|KQ+y67_u~kIFFy-C5Cw7cOvTjPC7%#$oJw|Fes0d}*zt(8LvA zHeCM*pyqHiL@SE#Yki^v!d5Al9MrZcA$%iKJdIz^56##t?QsR%82m&u9UWTneQCDm z=DrwgP;7D=`uD+8lgh*^i=RFJg7+}qB1n+Ybpfqh)Qv)viD61`zNB`A*u&wpm1Fk} z92zz1G`{R@@+qAY@PvU(Ons)Re5j)=xoF=aRn(~UhO90g zi2UU=FI{`#a6dz*o3ISK81+qhN)wKHH6xIMH`BKDBqRHTCQ_L1lTsVpvb=aL&jJ|h z>QZXLQfDesIGaME@OL2IE~VCMTN6iY;gah|?5y$cK(sE7iip_5s^Wh-3|llk(Ja|y z&Hmj_Q5@+TMLl56Gy4+eB(N`tsIs8{NP2LGEk_b91Xh!0_C9#+CTvA;2bw3f&fc~+ z3dR|-O|KG;w9T|6RTUV%wSD5&5kOwE+|RK+Wy^J0GlGj$^gOHH@I3~qGuu-w&FuHW zrI};V*+=L>!<`t5Yn)#)*RPr0IDcD8yH-Sbqfu;zL+kO8yx&&kt>a%CE9DyDs07h8 zc)5^A*v1!dqQK&4x{z<2{xH8|jbPkS_0|^JS2Ltu=Qv~N-hGpeza8Nk?AF{}fLqL>CI%;* z&1QvrM9(GB_|TQLfhu$&ipOXoG<1Km~(LTHlUqF&jEHrj?g*m;Y=oA|;Ty9DR9~NJ`G!p&U#E)=;MX}=0 zf^mK7!-j9C&lp)xKrC zXqk&k>|CENpSIC9V}>&lH2D26fi}V^_V42akfhW(OWTU9@!zUgxNa83r!nO0yg*HQ z%vbZkE5$Ai$|TnGfgkICSG>VQfy1y{UU7euF^#% z&+e}^AjR8GmlAea6r!dwRSpJM|}Kj-9;++Ly={{nZ3`lbb!t< z1o<|6c_q<)=5)x3Wl0_McM|g%c?P7EwD3~2*PJdvl`lzfK*ao)1#1F2&O(rOOF0MK zF{wtTwp2s3#SyjIL+XF&Yb5^SGoR=B@azGb_E(bO|EqxhzjpII5sQXu2u&C=O%W&P zdC_swW6Q0NFpRlI;)1N?4}dG(wc7wvX>02ql9wK&rTMkPUjHcDm#%+*6XbB`honYa zHHO?a3VU~+Qg%LnG-=I2GH^@?OwJNh4{yQXJ>@r|u1oR3f4{=c$0bAD084jnq=m*6 zwd_?TKq>Y8Ljm|GW+IC0f`po8|8lg(khbs22b{OPdH@inq7tSzjgfgfv^R@fVKmKv zXaE!yEvqxq`EbzLfrN)z{`t@0xtFiUe7Lr|kOMH{-Tllvy+?1rOpWsaxa_m8gJh*> zz%|4VhSUwE#~YrF5?ue8*k9|}`VD1_bvB+;DMala_BMf#ML-mf$l-^3Az{K-^^Tjafm zN#6gGj2${ReY`Ne6ePHm{ldI;u=9Z+(2Qe?Wfw_2-slVtB=EcXDtYr2_44sOCYUbn z6kvBy93NbdhXl8gULhHf2rWfwlC3=-0LQxF2zneg`B#IwBC8>>r6Wk>Lpk&2@$Vb% zing;Md6A+MgOCdYSdxb5_Zw(U6E0mT5{}i@C|wbXM1;kiCqI<0A*p-G7kT45W{^Ka zb9GV*qkqiTHHrDrPv(KknN+EU^j`!?gO_V!^Xw5uX<1?wxON^LbZ|+qF#Tl-Ib*?G_5fg; z+{>v48z@(a+}DYS;^6&aE)&4?_OSMhiu<0*;hDM^52&ZS=tsp+KzX&MHYB3j!tc@rH;_EeNxLVrm7~#aSAb@Z z?C}kV9K82%=2p7&rbVAZHKUMsxRc1CrEABKO0uIraFY^*${xFBZppbYu4mq8PR|4} z#yCTE7t(&304H4($#Z_mS|F#+00J0?7InmIcsQ3Z0D?@~PaAT#j+E&TOH}X`28U5D z(mkj?y?G=J>?V~f9q0`I;0hT4l?_%2cWxPVSf3&vO_)%}Y3ylh`{OT(Kfm%5Z__KU z(-BBdInKlJD}e3--lQjhW&$+{ZmFFBKZx@9769$3-_3493xt{n)z|A;sjsSOZ>#Ni z{ZrmuMZWt;`2r#*$b5;B%wWBley|Qed1Z;gAeD|mMnbiXzLqvXutG!OaGW&t7!}Z(%)p!h4}bA_%Ha&UfA{$B9k&F~dBtDtZHlz*slPK^ zJhTylJ=$U;NtCgVEbjzymdUX$3YtCQ!OuL*@keT7r}GQIN%D3KuH3|U@_hjo*vO$T z?ov+wKb(PNmdgQIi^-LJ{YJz85Qx{2jNElt$1ZFg<9g-se&tl$Dir0hv-0>cNkzc`(rx0&>Wa?p$m&kPN_k)4vx#T&K{S_0ivwYN=)Fz?DoHPD%gOlruMdCDCO9YAfi&f$7PGc(l zfS9OR1vetnmfzUVB`jt{DA^ZHpuGu4K?7AaS5+CWU|4wk^MeVq(XZIUi8yq5Is|c5 z7GzZDP(f6_CbLQ>5lAF1+1S?+KQ)4Yx!(N50^GZmZTczgY!99}Bqkg&LB$lZLAfIQ z%7^l+8}a^`abI>O5-{yX1&@u5<`C<3jqm8EsQU8hU1Z+q)Z*2W&-@fTZ}g?#CJ+E< zjfD5)OH*W-JxS7&gF>w^m>OTQLB&9h5s2Y>q0?ku^rSG#q%yJ)1|?=8sIK>$P{UAn z^{B+}Po+AdlXLQZEFJ)T_wp)08)J{=u#O1}3wIx>r`5F+%v`v2*L3M)czi%pNj)Qh zacyLofw4K)&|#TUEItNpIqp@2Sl;+J5!OI9=J8zEPXwPhR>b;4jeZ9(cfa;W?P0Ok zLfJ~CMO%Qkr^@e>v+-Cahp|`^32>L04<#85rmO8>bVNm1e!5N7v#J(Db$!I%X7@3N zcI|o1F!{#S(feUsT7Km%21>2|tTRi0(0EF2?NzPMX0@z?Vr`~_a-O_7EFi5E>tz>2 z7UG^HrR={QjwFG*QFY(focY;WWoLf!JLreVBr;{J&C%DXt9%@wf)dEmgKE^)n6T^% zVu{ZLvP^s`3yT#iVzclzXM_LD=3D1staK7ncduq=n5}%lWn|A;-8t&K^dJ3EJC`Jt zTqOlD;1HQ%PX%|sR8t}5h_sr#rBdbVPOG-U67#7Wd0n-O6+{!IO6O|qG5bQHMk)NY zyDKG>OppeadH@Lv$j4&yT_Z600?~LYX%`eTMAOjgAD{Ydx1&#B_+BAxp%zt&M!&M8$b}{6RIaqPyPfq5n)XS?PmVr zqAa~oi1^mj<1H9=iwyI$%xfa)2)GHEi8gp(>nvE_zWT|XTRqzz80jzT<^nq-UjB2M z6@UiQHA{dDZnDMrNaT2F)mWb^pN`KiQ#elh++EavT8uXhPO>?-hn|@IaRUeq`HEybW zrme*kpWP5ylV*}8Az5YhUyN$j$+IC7;QVi3<18E+ z96wXSV<*aCMdkmHb2pd+S4ll0GT4?;2VRPBf<0XZp7tv!Pqn&-8oveiW_0!6G?q zjiSHmAT*#1d_&k^t@-S0%^h+mv4{fXLlX=nJhS}^L!?Nw-x5k_hAwa=`E zB!Yr#_7~LiHQ-PpOsa%!-MB*qXx-gMEPH{VmV;86Ifcd9?wJNUadol} zg?-xDlzs2FOe0OVBVC`V{+7-So7FFuR-_gyOta>49d&P%oye-;;3sf!eX=RVQi$;M z9Ko(uaJx}Yz9kD6pd!TiWSqJ-BF$lRvp9909rq}Gd_4=S^nnclMuq>r*8l%`=im`l XIhRx+G*?yj3Gh;u*O04_F$?`4RkQB9 literal 0 HcmV?d00001 diff --git a/public/image/img_data02_test03.png b/public/image/img_data02_test03.png new file mode 100644 index 0000000000000000000000000000000000000000..0b5b315ac510c00063aea69171dfe19ac804c2bc GIT binary patch literal 18051 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 bREXZ>7%&H&SK)s%=8D==O{L-|7J>f{Ev_C8 literal 0 HcmV?d00001 diff --git a/public/image/img_logo.png b/public/image/img_logo.png index ac21590d0a895c9ef5839884ba67aeb28193c021..780e45796909560fdac629f416b92375a2fd5f5c 100644 GIT binary patch literal 89566 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�@##2k2UJkJ`ege!A4T50 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 z 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

=0-!I{MLa=aB@Nm89`T- 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 diff --git a/public/image/progress01.svg b/public/image/progress01.svg new file mode 100644 index 00000000..41d5514b --- /dev/null +++ b/public/image/progress01.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/public/image/progress02.svg b/public/image/progress02.svg new file mode 100644 index 00000000..31ac1c88 --- /dev/null +++ b/public/image/progress02.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/image/progress03.svg b/public/image/progress03.svg new file mode 100644 index 00000000..00993250 --- /dev/null +++ b/public/image/progress03.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/public/image/progress04.svg b/public/image/progress04.svg new file mode 100644 index 00000000..29731b8f --- /dev/null +++ b/public/image/progress04.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + From 351246c1e6eba946b3b2ce9a06739cb041b26310 Mon Sep 17 00:00:00 2001 From: lee gyu yeol-mac Date: Fri, 6 Sep 2024 13:54:02 +0900 Subject: [PATCH 19/48] =?UTF-8?q?[#138]feat:=20=EC=84=A4=EC=A0=95=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=20=EB=A1=9C=EA=B3=A0=20=EB=B6=80=EB=B6=84=20?= =?UTF-8?q?css=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.css | 749 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 746 insertions(+), 3 deletions(-) diff --git a/src/App.css b/src/App.css index d985be09..c9412532 100644 --- a/src/App.css +++ b/src/App.css @@ -1,5 +1,6 @@ .bg-gray { background-color: var(--bg02); + height: auto; } .color-blue { color: var(--blue); @@ -24,16 +25,18 @@ button:hover { display: flex; align-items: center; flex-direction: column; - margin-top: 150px; - height: 100vh; + margin-top: 50px; +} +.login-wrap > img { + height: 200px; } .login-box { - padding: 24px; padding: 24px; border-radius: 16px; background-color: #fff; display: flex; flex-direction: column; + margin-bottom: 100px; } .login-box input, .login-box button { @@ -149,6 +152,229 @@ input[type="checkbox"] { width: auto; text-decoration: underline; } +.view-section2-1 > .gutter.gutter-vertical { + border-top: 1px solid var(--gray01); + border-bottom: none; + background-image: none; + background-color: #fdfdfe; + height: 10px !important; +} +.view-section2-1 .view-data, +.view-section2-2 .view-data { + box-sizing: border-box; /* 패딩과 보더를 포함하여 너비 계산 */ + background-color: #fdfdfe; + padding: 16px; +} + +.view-section-title { + width: 100%; + padding: 13px 24px; + background-color: #fcfcfc; + border-bottom: 1px solid var(--gray01); + font-weight: 600; +} +.data-name { + font-weight: 600; + display: inline-block; + padding: 3px 8px; + border-radius: 4px; + background-color: #fff; + border: 1px solid #f4f4f4; + font-size: 14px; + margin-bottom: 24px; +} +.view-data { + position: relative; + height: 100%; + overflow-y: auto; + height: calc(100% - 51px); +} +.view-section2-2 .view-data { + height: 100%; +} +.split-contatiner { + border-top: 1px solid var(--gray01); + border-bottom: none; + background-image: none; + background-color: #fdfdfe; + height: 10px !important; +} +var-list { + display: flex; + align-items: center; + gap: 24px; + margin-left: 8px; +} +.var-list li { + display: flex; + align-items: center; + flex-direction: column; +} + +.code-flow { + border: 1px solid var(--gray01); + border-radius: 8px; + padding: 24px; + display: inline-block; + position: relative; + margin-top: 40px; + margin-left: 20px; +} +.code-flow + .code-flow { + margin-top: 60px !important; +} +.highlight-border { + border-color: #364fce !important; +} +.highlight-number { + background-color: #364fce !important; +} +.highlight-text { + color: #364fce !important; +} + +.code-flow-var { + display: flex; + align-items: center; +} +.code-flow-var div { + display: flex; + align-items: center; + flex-direction: column; + position: relative; +} +.code-flow-var div span:not(.code-var-title) { + background-color: #565656; + border-radius: 4px; + background-color: #565656; + color: #fff; + padding: 8px 15px; + min-width: 10px; + position: relative; +} +.code-flow-var div span.code-var-title { + margin-bottom: 3px; + font-size: 14px; +} +.code-flow-title-wrap { + display: flex; + align-items: flex-end; + position: absolute; + top: -22px; + left: 12px; +} +.code-flow-title { + font-size: 20px; + font-family: "GmarketSans"; + font-weight: 500; + padding: 0 6px; + min-width: 38px; + text-align: center; + margin-bottom: 6px; + margin-right: 12px; + position: relative; +} +.code-flow { + min-width: 560px; + background-color: #fff; +} +.code-flow .code-flow { + min-width: 480px; + background-color: #fdfdfe; +} +.code-flow .code-flow .code-flow { + min-width: 400px; + background-color: #fbfbfe; +} +.code-flow .code-flow .code-flow .code-flow { + min-width: 320px; + background-color: #f9f9fd; +} +.code-flow .code-flow .code-flow .code-flow .code-flow { + min-width: 240px; + background-color: #f5f5fc; +} +.code-flow-title::before { + position: absolute; + content: ""; + bottom: 0; + width: 100%; + height: 22px; + left: 0; +} +.code-flow-title span { + position: relative; +} +.code-flow .code-flow-title-wrap > .code-flow-title::before { + background-color: #fff; +} +.code-flow .code-flow .code-flow-title-wrap > .code-flow-title::before { + background-color: #fdfdfe; +} +.code-flow .code-flow .code-flow .code-flow-title-wrap > .code-flow-title::before { + background-color: #fbfbfe; +} +.code-flow .code-flow .code-flow .code-flow .code-flow-title-wrap > .code-flow-title::before { + background-color: #f9f9fd; +} +.code-flow .code-flow .code-flow .code-flow .code-flow .code-flow-title-wrap > .code-flow-title::before { + background-color: #f5f5fc; +} + +.code-flow-for.code-flow { + margin-top: 60px; +} +.code-flow-for.code-flow .code-flow-for { + margin-top: 48px; +} +.code-flow-for > .code-flow-title-wrap { + top: -46px; +} +.code-flow-for > .code-flow-title-wrap > .code-flow-var { + gap: 4px; +} +.code-flow-for > .code-flow-title-wrap > .code-flow-var > div:nth-child(1) { + margin-right: 20px; +} +.code-flow { + margin-top: 40px; +} +.code-flow-text > .code-flow-title-wrap { + top: -15px; +} +.code-flow.code-flow-text { + margin-top: 32px; +} +.view-section2-2 .view-data > div { + display: flex; + position: relative; + flex-direction: column; +} +.code-flow > .code-flow-data:nth-child(2) { + margin-top: 12px; +} +.code-flow-text > .code-flow-data:nth-child(2) { + margin-top: 0; +} +.code-flow-for > .code-flow-data:nth-child(2) { + margin-top: 12px; +} +.var-data span.on_active, +.code-flow-var span.on_active { + background-color: #364fce !important; + color: #fff !important; +} +.code-target { + display: flex; + align-items: flex-start; + position: absolute; + transition: all 0.3s; +} +.code-target img { + margin-top: 11px; + margin-right: 8px; +} + /* popup */ @-webkit-keyframes fade { 0% { @@ -336,6 +562,523 @@ input[type="checkbox"] { margin-right: 8px; } /* 코드 흐름 시각화의 자료구조 왼쪽 정렬 */ + +.group-wrap { + padding: 13px 32px; + background: linear-gradient(to top, #4866ff, #607aff); + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 40px; + height: 77px; +} +.group-title { + font-size: 24px; + font-weight: 700; + color: #fff; +} +.group-left { + display: flex; + gap: 12px; + align-items: center; +} +.title-left h3 { + font-size: 24px; + font-weight: 700; +} +.section-title { + display: flex; + align-items: center; + justify-content: space-between; + border-bottom: 1px solid var(--gray01); + padding: 16px 0; + margin-bottom: 24px; +} +.progress-info { + border: 1px solid #f0f0f0; + background-color: #f9fafb; + border-radius: 8px; + padding: 32px; + margin-bottom: 40px; +} +.progress-date-data { + display: flex; + align-items: center; + justify-content: center; + gap: 16px; +} +.progress-date-data input[type="date"] { + border: none; + background: #f9fafb; + font-size: 20px; + width: 118px; + padding-left: 0; + padding-right: 0; +} +.progress-date-data input[type="date"]::-webkit-calendar-picker-indicator { + width: 100%; + opacity: 0; +} +.progress-date { + position: relative; + display: inline-block; +} +.date-label { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + cursor: pointer; + display: inline-flex; + align-items: center; + justify-content: center; + pointer-events: none; + font-size: 20px; + font-weight: 500; +} +.progress-data { + display: flex; + align-items: center; + justify-content: center; + gap: 20px; + margin-top: 20px; +} +.progress-data li { + display: flex; + align-items: center; + justify-content: space-between; + gap: 40px; + padding: 18px; + border-radius: 8px; + background-color: #fff; + filter: drop-shadow(0 4px 16px rgba(0, 70, 155, 0.05)); +} +.progress-data li div { + display: flex; + gap: 24px; + align-items: center; +} +.progress-data li div p:nth-child(1) { + font-size: 14px; + font-weight: 500; +} +.progress-data li div p:nth-child(2) { + font-size: 24px; + font-weight: 700; +} +.section-data { + display: grid; + gap: 20px; + margin-bottom: 40px; +} +.section-data01 { + grid-template-columns: 1fr 1fr 1fr 1fr; +} +.section-data01 li a { + padding: 30px 24px; + border-radius: 8px; + border: 1px solid var(--gray01); + display: flex; + align-items: center; + justify-content: space-between; +} +.section-data01 li div:nth-child(1) p { + font-size: 18px; + font-weight: 600; + margin-bottom: 8px; +} +.section-data01 li div:nth-child(1) span { + font-weight: 400; + color: #c2c2c2; +} +.section-data01 li div:nth-child(2) { + display: flex; + align-items: center; + width: 106px; + border-radius: 12px; +} +.section-data01 li div:nth-child(2)::before { + content: ""; + display: block; + width: 40px; + height: 40px; +} +.section-data01 li div:nth-child(2) p { + font-weight: 600; + font-size: 16px; + flex: 1; + text-align: center; + margin-right: 16px; +} +.progress-success { + background-color: #ebf4ff; +} +.progress-success:before { + background: url(/image/progress03.svg); +} +.progress-success p { + color: #308dff; +} +.progress-fail { + background-color: #ffedeb; +} +.progress-fail:before { + background: url(/image/progress04.svg); +} + +.progress-fail p { + color: #ff5b49; +} + +.progress-not { + background-color: #f3f3f3; +} +.progress-not:before { + background: url(/image/progress02.svg); +} + +.progress-not p { + color: #848484; +} + +/* 과제 */ +.bg { + background: #f9fafb; + height: 100%; +} +.title-right button { + padding: 9.5px 24px; + border-radius: 6px; + background-color: var(--blue); + color: #fff; + font-size: 16px; + border-width: 700px; + margin-left: 4px; +} +.section-data02 { + grid-template-columns: 1fr 1fr 1fr 1fr; +} +.section-data02 > li { + background-color: #fff; + border-radius: 8px; + overflow: hidden; + border: 1px solid var(--gray02); +} +.section-data02-img-wrap { + height: 190px; + overflow: hidden; + position: relative; +} +.section-data02-img-wrap img { + width: 100%; + position: absolute; + transition: all 0.6s; +} +.section-data02 li:hover .section-data02-img-wrap img { + transform: scale(1.05); +} +.data02-name { + padding: 22px 24px 34px 24px; +} +.data02-name > p { + padding-bottom: 22px; + margin-bottom: 22px; + border-bottom: 1px solid var(--gray02); + font-size: 18px; + font-weight: 600; +} +.data02-name div { + display: flex; + align-items: center; + justify-content: space-between; +} +.data02-name div p:nth-child(1) { + font-size: 14px; + font-weight: 400; +} +.data02-name div p:nth-child(2) { + color: var(--blue); + font-size: 18px; + font-weight: 600; +} +.data02-name div + div { + margin-top: 8px; +} +.timeover .section-data02-img-wrap::before { + content: "제출만료"; + display: block; + position: absolute; + left: 12px; + top: 12px; + z-index: 9; + background-color: #f3f3f3; + color: #848484; + border: 1px solid var(--gray01); + border-radius: 4px; + padding: 6px 15px; +} +.timeover .data02-name div p, +.timeover .data02-name > p { + color: #dddee4; +} + +/* 설정 */ +.section-data03 { + grid-template-columns: 1fr 1fr 1fr 1fr; +} +.section-data03 li { + border-radius: 8px; + overflow: hidden; + border: 1px solid var(--gray02); + display: flex; + align-items: center; + justify-content: space-between; + padding: 20px 24px; + background-color: #fff; +} +.section-data03 li div { + display: flex; + flex-direction: column; +} +.data03-name p { + font-size: 20px; + font-weight: 600; + margin-bottom: 8px; +} +.data03-name span { + font-weight: 300; + color: #98a8b8; +} +.data03-btns { + height: 100%; + justify-content: flex-end; + gap: 8px; +} +.data03-btns button { + width: 60px; + height: 37px; + font-weight: 600; + border-radius: 4px; +} +.data03-btns .blue { + color: #308dff; + background-color: #ebf4ff; +} +.data03-btns .red { + color: #ff5b49; + background-color: #ffedeb; +} +.search-wrap { + background-color: #fff; + display: flex; + align-items: center; + border-radius: 4px; + border: 1px solid var(--gray01); + width: 300px; +} +.search-wrap * { + border: none !important; + background-color: initial !important; +} +.search-wrap input { + flex: 1; + height: 41px; + padding: 4px 16px 4px 16px; +} +.search-wrap button { + width: 24px; + height: 24px; + padding: 0; + margin-right: 8px; +} +.right-btns { + display: flex; + justify-content: flex-end; +} +.right-btns button { + height: 43px; + padding: 10px 16px; + border-radius: 4px; + display: flex; + align-items: center; + gap: 8px; +} +.right-btns .red { + background-color: #ff5b49; + color: #fff; + font-weight: 600; +} +.group-link { + display: flex; + align-items: center; + background-color: #fff; + border-radius: 8px; + overflow: hidden; +} +.link-name { + display: flex; + align-items: center; + justify-content: center; + background-color: #ebf4ff; + color: var(--blue); + gap: 6px; + height: 51px; + width: 170px; +} +.link-data { + padding: 0 12px 0 24px; +} +.group-link button { + margin-right: 16px; +} + +/* 그룹 */ +header .group-btn { + border-radius: 4px; + background-color: var(--blue); + color: #fff; + font-weight: 600; + margin-right: 24px; + padding: 8px 16px; +} +.group-copywriting { + position: relative; + display: flex; + flex-direction: column; + padding: 74px 0 83px 0; + background: linear-gradient(to right, #4866ff, #738aff); +} +.group-copywriting img { + position: absolute; + right: 171px; + bottom: -81px; +} +.group-copywriting * { + color: #fff; +} +.group-copywriting p { + font-size: 15px; + font-weight: 800; + margin-bottom: 5px; +} +.group-copywriting h2 { + font-weight: 800; + font-size: 32px; + margin-bottom: 5px; +} +.group-copywriting span { + font-size: 15px; + font-weight: 400; +} +.group-data-wrap { + display: flex; + z-index: 1; + position: relative; +} +.group-data-left { + width: 570px; + border-right: 1px solid var(--gray02); + min-height: calc(100vh - 329px); + background-color: #fff; + padding: 60px 40px; + display: flex; + justify-content: flex-end; +} +.user-info { + width: 320px; +} +.user-info > p { + font-weight: 800; + font-size: 24px; +} +.user-info > span { + display: block; + padding-bottom: 34px; + font-weight: 300; + font-size: 16px; + color: #98a8b8; + border-bottom: 1px solid var(--gray02); +} +.user-group-data { + display: grid; + grid-template-columns: 1fr 1fr; +} +.user-group-data p:nth-child(1) { + margin-top: 24px; + font-weight: 300; + color: #98a8b8; + margin-bottom: 10px; +} +.user-group-data p:nth-child(2) { + font-size: 32px; + font-weight: 700; + padding-bottom: 24px; + border-bottom: 1px solid var(--gray02); + margin-bottom: 32px; +} +.user-info > label { + font-size: 13px; + color: #98a8b8; + display: block; + margin-bottom: 8px; +} + +.user-info > div { + display: flex; + align-items: center; + gap: 8px; +} +.user-info input { + width: 236px; +} +.user-info > div button { + border-radius: 6px; + background-color: var(--blue); + color: #fff; + padding: 12px 24px; + height: 51px; +} +.group-right { + width: 1140px; + padding: 40px 0 0 36px; +} +.section-data04 { + grid-template-columns: 1fr 1fr 1fr; +} +.section-data04 li a { + border-radius: 8px; + overflow: hidden; + border: 1px solid var(--gray02); + display: flex; + align-items: center; + justify-content: space-between; + padding: 20px 24px; + background-color: #fff; + height: 100%; +} +.section-data04 li a div { + display: flex; + flex-direction: column; + width: 274px; +} +.data04-name p { + font-size: 20px; + font-weight: 600; + margin-bottom: 8px; +} +.data04-name span { + font-weight: 300; + color: #98a8b8; +} +.bg2 { + background: #fbfcff; +} +.bg2 .section-title, +.bg .section-title { + border-bottom: 1px solid var(--gray02); +} + .align-left { margin-top: 30px; width: 100%; From 2a7a60d4458c5cdfc48f89e2aa83ffbcaa16c1ad Mon Sep 17 00:00:00 2001 From: lee gyu yeol-mac Date: Fri, 6 Sep 2024 13:54:43 +0900 Subject: [PATCH 20/48] =?UTF-8?q?[#136]feat:=20=EC=83=88=EB=A1=9C=EA=B3=A0?= =?UTF-8?q?=EC=B9=A8=EC=8B=9C=20get=EC=9A=94=EC=B2=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.tsx | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index 1e16626c..d473516f 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,18 +1,23 @@ import { useEffect } from "react"; import { BrowserRouter as Router, Routes, Route } from "react-router-dom"; +import { useQuery } from "@tanstack/react-query"; import Visualization from "./pages/Visualization/Visualization"; import Signup from "./pages/Signup/Signup"; import Login from "./pages/Login/Login"; import Home from "./pages/Home/Home"; -import { useQuery } from "@tanstack/react-query"; +import Modify from "./pages/Modify/Modify"; +import { useUserStore } from "./store/user"; import "./App.css"; import { worker } from "./mocks/browser"; + interface User { + email: string; name: string; + role: string; } //zustand -import { useUserStore } from "./store/user"; + if (typeof window !== "undefined") { if (import.meta.env.VITE_APP_NODE_ENV === "development") { worker.start(); @@ -20,7 +25,7 @@ if (typeof window !== "undefined") { } // msw 버그로 인해 fetchUser는 따로 확인 불가능 백엔드 서버 연결해서 확인해야함 const fetchUser = async (): Promise => { - const response = await fetch("htttp://localhost:8083/edupi_user/v1/member/load", { + const response = await fetch("http://localhost:8080/edupi_user/v1/member/login/info", { method: "GET", credentials: "include", headers: { @@ -30,19 +35,23 @@ const fetchUser = async (): Promise => { if (!response.ok) { throw new Error("Network response was not ok"); } - return await response.json(); + const data = await response.json(); + return data; }; function App() { - const loggedInUserName = useUserStore((state) => state.setLoggedInUserName); - const { data } = useQuery({ queryKey: ["user"], queryFn: fetchUser }); + const { data } = useQuery({ queryKey: ["user"], queryFn: fetchUser }); + const setLoggedInUserEmail = useUserStore((state) => state.setLoggedInUserEmail); + const setLoggedInUserName = useUserStore((state) => state.setLoggedInUserName); + const setLoggedInUserRole = useUserStore((state) => state.setLoggedInUserRole); useEffect(() => { if (data) { - loggedInUserName(data.name); + setLoggedInUserEmail(data.email); + setLoggedInUserName(data.name); + setLoggedInUserRole(data.role); } }, [data]); - return ( @@ -50,6 +59,7 @@ function App() { } /> } /> } /> + } /> ); From 4e8420faaf61d16b6733456668b93b00f98d2413 Mon Sep 17 00:00:00 2001 From: lee gyu yeol-mac Date: Fri, 6 Sep 2024 13:58:14 +0900 Subject: [PATCH 21/48] =?UTF-8?q?[#138]feat:=20div=20root=20body=ED=95=98?= =?UTF-8?q?=EA=B3=A0=20=EC=9D=BC=EC=B9=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/index.css | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/index.css b/src/index.css index 818a7d0a..a8c91dae 100644 --- a/src/index.css +++ b/src/index.css @@ -39,6 +39,9 @@ html, body { margin: 0; /* 기본 마진 제거 */ } +#root { + height: auto; +} section { width: 100%; } @@ -219,13 +222,14 @@ ol { /* 스크롤 */ .s__container { - height: inherit; + height: auto; max-width: 1200px; width: 100%; margin: 0 auto; } .s__row { padding: 0 16px; + min-height: 80vh; } :root { From ab210f06a79a60a10a2403406d9d7640554764a5 Mon Sep 17 00:00:00 2001 From: lee gyu yeol-mac Date: Fri, 6 Sep 2024 13:59:01 +0900 Subject: [PATCH 22/48] =?UTF-8?q?[#138]feat:=20=ED=8C=8C=EC=9D=BC=EC=9D=B4?= =?UTF-8?q?=20=EB=B3=80=ED=95=98=EB=A9=B4=20=EB=B3=80=ED=95=9C=20css?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/Modify/Modify.module.css | 3 + .../components/RightSection/RightSection.css | 222 ------------------ .../components/LoggedInHeader.module.css | 3 + src/pages/components/PublicHeader.module.css | 3 + 4 files changed, 9 insertions(+), 222 deletions(-) create mode 100644 src/pages/Modify/Modify.module.css delete mode 100644 src/pages/Visualization/components/RightSection/RightSection.css diff --git a/src/pages/Modify/Modify.module.css b/src/pages/Modify/Modify.module.css new file mode 100644 index 00000000..83875645 --- /dev/null +++ b/src/pages/Modify/Modify.module.css @@ -0,0 +1,3 @@ +body { + background: #f9fafb; +} diff --git a/src/pages/Visualization/components/RightSection/RightSection.css b/src/pages/Visualization/components/RightSection/RightSection.css deleted file mode 100644 index 8805e82e..00000000 --- a/src/pages/Visualization/components/RightSection/RightSection.css +++ /dev/null @@ -1,222 +0,0 @@ -.view-section2-1 > .gutter.gutter-vertical { - border-top: 1px solid var(--gray01); - border-bottom: none; - background-image: none; - background-color: #fdfdfe; - height: 10px !important; -} -.view-section2-1 .view-data, -.view-section2-2 .view-data { - box-sizing: border-box; /* 패딩과 보더를 포함하여 너비 계산 */ - background-color: #fdfdfe; - padding: 16px; -} - -.view-section-title { - width: 100%; - padding: 13px 24px; - background-color: #fcfcfc; - border-bottom: 1px solid var(--gray01); - font-weight: 600; -} -.data-name { - font-weight: 600; - display: inline-block; - padding: 3px 8px; - border-radius: 4px; - background-color: #fff; - border: 1px solid #f4f4f4; - font-size: 14px; - margin-bottom: 24px; -} -.view-data { - position: relative; - height: 100%; - overflow-y: auto; - height: calc(100% - 51px); -} -.view-section2-2 .view-data { - height: 100%; -} -.split-contatiner { - border-top: 1px solid var(--gray01); - border-bottom: none; - background-image: none; - background-color: #fdfdfe; - height: 10px !important; -} -var-list { - display: flex; - align-items: center; - gap: 24px; - margin-left: 8px; -} -.var-list li { - display: flex; - align-items: center; - flex-direction: column; -} - -.code-flow { - border: 1px solid var(--gray01); - border-radius: 8px; - padding: 24px; - display: inline-block; - position: relative; - margin-top: 40px; - margin-left: 20px; -} -.code-flow + .code-flow { - margin-top: 60px !important; -} -.highlight-border { - border-color: #364fce !important; -} -.highlight-number { - background-color: #364fce !important; -} -.highlight-text { - color: #364fce !important; -} - -.code-flow-var { - display: flex; - align-items: center; -} -.code-flow-var div { - display: flex; - align-items: center; - flex-direction: column; - position: relative; -} -.code-flow-var div span:not(.code-var-title) { - background-color: #565656; - border-radius: 4px; - background-color: #565656; - color: #fff; - padding: 8px 15px; - min-width: 10px; - position: relative; -} -.code-flow-var div span.code-var-title { - margin-bottom: 3px; - font-size: 14px; -} -.code-flow-title-wrap { - display: flex; - align-items: flex-end; - position: absolute; - top: -22px; - left: 12px; -} -.code-flow-title { - font-size: 20px; - font-family: "GmarketSans"; - font-weight: 500; - padding: 0 6px; - min-width: 38px; - text-align: center; - margin-bottom: 6px; - margin-right: 12px; - position: relative; -} -.code-flow { - min-width: 560px; - background-color: #fff; -} -.code-flow .code-flow { - min-width: 480px; - background-color: #fdfdfe; -} -.code-flow .code-flow .code-flow { - min-width: 400px; - background-color: #fbfbfe; -} -.code-flow .code-flow .code-flow .code-flow { - min-width: 320px; - background-color: #f9f9fd; -} -.code-flow .code-flow .code-flow .code-flow .code-flow { - min-width: 240px; - background-color: #f5f5fc; -} -.code-flow-title::before { - position: absolute; - content: ""; - bottom: 0; - width: 100%; - height: 22px; - left: 0; -} -.code-flow-title span { - position: relative; -} -.code-flow .code-flow-title-wrap > .code-flow-title::before { - background-color: #fff; -} -.code-flow .code-flow .code-flow-title-wrap > .code-flow-title::before { - background-color: #fdfdfe; -} -.code-flow .code-flow .code-flow .code-flow-title-wrap > .code-flow-title::before { - background-color: #fbfbfe; -} -.code-flow .code-flow .code-flow .code-flow .code-flow-title-wrap > .code-flow-title::before { - background-color: #f9f9fd; -} -.code-flow .code-flow .code-flow .code-flow .code-flow .code-flow-title-wrap > .code-flow-title::before { - background-color: #f5f5fc; -} - -.code-flow-for.code-flow { - margin-top: 60px; -} -.code-flow-for.code-flow .code-flow-for { - margin-top: 48px; -} -.code-flow-for > .code-flow-title-wrap { - top: -46px; -} -.code-flow-for > .code-flow-title-wrap > .code-flow-var { - gap: 4px; -} -.code-flow-for > .code-flow-title-wrap > .code-flow-var > div:nth-child(1) { - margin-right: 20px; -} -.code-flow { - margin-top: 40px; -} -.code-flow-text > .code-flow-title-wrap { - top: -15px; -} -.code-flow.code-flow-text { - margin-top: 32px; -} -.view-section2-2 .view-data > div { - display: flex; - position: relative; - flex-direction: column; -} -.code-flow > .code-flow-data:nth-child(2) { - margin-top: 12px; -} -.code-flow-text > .code-flow-data:nth-child(2) { - margin-top: 0; -} -.code-flow-for > .code-flow-data:nth-child(2) { - margin-top: 12px; -} -.var-data span.on_active, -.code-flow-var span.on_active { - background-color: #364fce !important; - color: #fff !important; -} -.code-target { - display: flex; - align-items: flex-start; - position: absolute; - transition: all 0.3s; -} -.code-target img { - margin-top: 11px; - margin-right: 8px; -} diff --git a/src/pages/components/LoggedInHeader.module.css b/src/pages/components/LoggedInHeader.module.css index 2a9e029b..ae08e58b 100644 --- a/src/pages/components/LoggedInHeader.module.css +++ b/src/pages/components/LoggedInHeader.module.css @@ -7,6 +7,9 @@ header { border-bottom: 1px solid var(--gray01); background-color: #fff; } +.header-logo img { + height: 32px; +} .bg-blue { background-color: #f8f9ff; } diff --git a/src/pages/components/PublicHeader.module.css b/src/pages/components/PublicHeader.module.css index fc9c984f..9b9152d4 100644 --- a/src/pages/components/PublicHeader.module.css +++ b/src/pages/components/PublicHeader.module.css @@ -7,6 +7,9 @@ header { border-bottom: 1px solid var(--gray01); background-color: #fff; } +.header-logo img { + height: 32px; +} .bg-blue { background-color: #f8f9ff; } From b33ca96f052f5238ce5102880a48a07cf9315571 Mon Sep 17 00:00:00 2001 From: lee gyu yeol-mac Date: Fri, 6 Sep 2024 13:59:24 +0900 Subject: [PATCH 23/48] =?UTF-8?q?[#138]feat:=20a=ED=85=8C=EA=B7=B8=20span?= =?UTF-8?q?=20=ED=85=8C=EA=B7=B8=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/components/LoggedInHeader.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/pages/components/LoggedInHeader.tsx b/src/pages/components/LoggedInHeader.tsx index 780d53e5..8835e380 100644 --- a/src/pages/components/LoggedInHeader.tsx +++ b/src/pages/components/LoggedInHeader.tsx @@ -26,10 +26,10 @@ const LoggedInHeader = () => {

- {loggedInUserName === "" ? null : {loggedInUserName}님} - - 로그아웃 - + {loggedInUserName === "" ? null : {loggedInUserName}님} + + 로그아웃 +
); From b94c204eabfd39050bd32b11db87232d8dbaf447 Mon Sep 17 00:00:00 2001 From: lee gyu yeol-mac Date: Fri, 6 Sep 2024 14:07:02 +0900 Subject: [PATCH 24/48] =?UTF-8?q?[#138]feat:=20=EB=A1=9C=EA=B7=B8=EC=9D=B8?= =?UTF-8?q?=20api=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/Login/Login.tsx | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/src/pages/Login/Login.tsx b/src/pages/Login/Login.tsx index 3a068a7d..996bad6f 100644 --- a/src/pages/Login/Login.tsx +++ b/src/pages/Login/Login.tsx @@ -2,26 +2,20 @@ import { useState, FormEvent, ChangeEvent, Fragment } from "react"; import axios from "axios"; import PublicHeader from "../components/PublicHeader"; import { useMutation } from "@tanstack/react-query"; -import { useUserStore } from "@/store/user"; import { useNavigate } from "react-router-dom"; const Login = () => { const [userId, setUserId] = useState(""); const [userPassword, setUserPassword] = useState(""); - const setLoggedInUserId = useUserStore((state) => state.setLoggedInUserId); - const setLoggedInUserName = useUserStore((state) => state.setLoggedInUserName); const navigate = useNavigate(); const mutation = useMutation({ mutationFn: async ({ userId, userPassword }: { userId: string; userPassword: string }) => { - return axios.post( - "http://localhost:8083/edupi_user/v1/member/login", - { email: userId, password: userPassword }, - { headers: { "Content-Type": "application/json" }, withCredentials: true } - ); + const req = { email: userId, password: userPassword }; + return axios.post("http://localhost:8080/edupi_user/v1/member/login", req, { + headers: { "Content-Type": "application/json" }, + withCredentials: true, + }); }, - onSuccess(data) { - const jsonData = data.data; - setLoggedInUserId(jsonData.user.id); - setLoggedInUserName(jsonData.user.name); + onSuccess() { navigate("/"); }, onError(error) { From d4839bfc95e287b0fad1f3941d19ed3331797540 Mon Sep 17 00:00:00 2001 From: lee gyu yeol-mac Date: Fri, 6 Sep 2024 14:07:23 +0900 Subject: [PATCH 25/48] =?UTF-8?q?[#138]feat:=20=EC=84=A4=EC=A0=95=20?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80=20=EC=9E=91=EC=97=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/Modify/Modify.tsx | 120 ++++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 src/pages/Modify/Modify.tsx diff --git a/src/pages/Modify/Modify.tsx b/src/pages/Modify/Modify.tsx new file mode 100644 index 00000000..1b4a7aef --- /dev/null +++ b/src/pages/Modify/Modify.tsx @@ -0,0 +1,120 @@ +import LoggedInHeader from "../components/LoggedInHeader"; +const Modify = () => { + return ( +
+ +
+
+
+ 그룹 +

파이썬 기초 1반

+
+
+

+ 링크 + 그룹 초대 링크 +

+

https://www.google.com/webhp?hl=ko&sa=

+ +
+
+
+
+
+
+

초대 대기

+
+
+
    +
  • +
    +

    홍길동

    + hong@naver.com + 학번 : 20003204 +
    +
    + + +
    +
  • +
  • +
    +

    홍길동

    + hong@naver.com + 학번 : 20003204 +
    +
    + + +
    +
  • +
+
+
+

가입된 학생

+
+
+
+ + +
+
+
+
    +
  • +
    +

    홍길동

    + hong@naver.com + 학번 : 20003204 +
    +
    + +
    +
  • +
  • +
    +

    홍길동

    + hong@naver.com + 학번 : 20003204 +
    +
    + +
    +
  • +
  • +
    +

    홍길동

    + hong@naver.com + 학번 : 20003204 +
    +
    + +
    +
  • +
  • +
    +

    홍길동

    + hong@naver.com + 학번 : 20003204 +
    +
    + +
    +
  • +
+
+ +
+
+
+
+ ); +}; +export default Modify; From 6db9391649c2454a1059dca009d150c3634a928f Mon Sep 17 00:00:00 2001 From: lee gyu yeol-mac Date: Fri, 6 Sep 2024 14:07:42 +0900 Subject: [PATCH 26/48] =?UTF-8?q?[#138]feat:=20=EC=84=A4=EC=A0=95=20api?= =?UTF-8?q?=EC=A3=BC=EC=86=8C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/Signup/Signup.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/Signup/Signup.tsx b/src/pages/Signup/Signup.tsx index 850370f7..db3b4139 100644 --- a/src/pages/Signup/Signup.tsx +++ b/src/pages/Signup/Signup.tsx @@ -74,7 +74,7 @@ const Signup = () => { name: formData.username, phoneNumber: formData.phoneNumber, }; - return axios.post("http://localhost:8083/edupi_user/v1/member/signup", req, { + return axios.post("http://localhost:8080/edupi_user/v1/member/signup", req, { headers: { "Content-Type": "application/json" }, withCredentials: true, }); From f13824faa5390fdfd069ec4e965ad6e3feb80fd5 Mon Sep 17 00:00:00 2001 From: lee gyu yeol-mac Date: Fri, 6 Sep 2024 14:08:12 +0900 Subject: [PATCH 27/48] =?UTF-8?q?[#138]feat:=20=EC=8B=9C=EA=B0=81=ED=99=94?= =?UTF-8?q?=20api=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/Visualization/Visualization.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/Visualization/Visualization.tsx b/src/pages/Visualization/Visualization.tsx index f1728b27..be90ceda 100644 --- a/src/pages/Visualization/Visualization.tsx +++ b/src/pages/Visualization/Visualization.tsx @@ -53,7 +53,7 @@ export default function Visualization() { const mutation = useMutation({ mutationFn: async (code: string) => { - return fetch("http://localhost:8080/edupi_visualize/v1/python", { + return fetch("http://GW-ALB-1871726514.ap-northeast-2.elb.amazonaws.com/edupi_visualize/v1/python", { method: "POST", headers: { "Content-Type": "application/json", From 24dd32eac2d3a2837772f9a37f35c55acfcd368e Mon Sep 17 00:00:00 2001 From: lee gyu yeol-mac Date: Fri, 6 Sep 2024 14:08:46 +0900 Subject: [PATCH 28/48] =?UTF-8?q?[#138]feat:=20rightSection.css=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Visualization/components/RightSection/RightSection.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/Visualization/components/RightSection/RightSection.tsx b/src/pages/Visualization/components/RightSection/RightSection.tsx index f9f2de8e..0d86b9f7 100644 --- a/src/pages/Visualization/components/RightSection/RightSection.tsx +++ b/src/pages/Visualization/components/RightSection/RightSection.tsx @@ -1,6 +1,6 @@ import { useState, useContext, useEffect, useRef } from "react"; import { PreprocessedCodesContext } from "../../Visualization"; -import "./RightSection.css"; + import Split from "react-split"; import _ from "lodash"; import ResizeObserver from "resize-observer-polyfill"; From 64d32e02cda72ec55da240d5e5bf2dad37fa9e3f Mon Sep 17 00:00:00 2001 From: lee gyu yeol-mac Date: Fri, 6 Sep 2024 14:09:14 +0900 Subject: [PATCH 29/48] =?UTF-8?q?[#138]feat:=20rightSection.css=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/Visualization/components/RightSection/RightSection.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/pages/Visualization/components/RightSection/RightSection.tsx b/src/pages/Visualization/components/RightSection/RightSection.tsx index 0d86b9f7..7e9c6fed 100644 --- a/src/pages/Visualization/components/RightSection/RightSection.tsx +++ b/src/pages/Visualization/components/RightSection/RightSection.tsx @@ -1,6 +1,5 @@ import { useState, useContext, useEffect, useRef } from "react"; import { PreprocessedCodesContext } from "../../Visualization"; - import Split from "react-split"; import _ from "lodash"; import ResizeObserver from "resize-observer-polyfill"; From e96cc3e02714b4ccb857b762105eb3fc6cbabe65 Mon Sep 17 00:00:00 2001 From: lee gyu yeol-mac Date: Fri, 6 Sep 2024 14:09:29 +0900 Subject: [PATCH 30/48] =?UTF-8?q?[#138]feat:=20=ED=9A=8C=EC=9B=90=20?= =?UTF-8?q?=EC=83=81=ED=83=9C=EA=B4=80=EB=A6=AC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/store/user.ts | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/store/user.ts b/src/store/user.ts index 3daaea60..7f8ae4f2 100644 --- a/src/store/user.ts +++ b/src/store/user.ts @@ -1,18 +1,22 @@ import { create } from "zustand"; import { devtools } from "zustand/middleware"; interface UserState { - loggedInUserId: string; + loggedInUserEmail: string; loggedInUserName: string; - setLoggedInUserId: (user: string) => void; + loggedInUserRole: string; + setLoggedInUserEmail: (user: string) => void; setLoggedInUserName: (username: string) => void; + setLoggedInUserRole: (role: string) => void; resetUser: () => void; } export const useUserStore = create( devtools((set) => ({ - loggedInUserId: "", + loggedInUserEmail: "", loggedInUserName: "", - setLoggedInUserId: (loggedInUserId) => set({ loggedInUserId }), + loggedInUserRole: "", + setLoggedInUserEmail: (loggedInUserEmail) => set({ loggedInUserEmail }), setLoggedInUserName: (loggedInUserName) => set({ loggedInUserName }), - resetUser: () => set({ loggedInUserId: "", loggedInUserName: "" }), + setLoggedInUserRole: (loggedInUserRole) => set({ loggedInUserRole }), + resetUser: () => set({ loggedInUserEmail: "", loggedInUserName: "", loggedInUserRole: "" }), })) ); From 25c6d0031f09e9d7d326b47077a41ebc0ddf3fdb Mon Sep 17 00:00:00 2001 From: lee gyu yeol-mac Date: Fri, 6 Sep 2024 14:53:52 +0900 Subject: [PATCH 31/48] =?UTF-8?q?[#138]feat:=20msw=EC=88=98=EC=A0=95=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.tsx | 27 ++++++++++++++++++--------- src/mocks/handlers.ts | 23 +++++++++++++++-------- src/mocks/setup.ts | 14 ++++++++++++++ 3 files changed, 47 insertions(+), 17 deletions(-) create mode 100644 src/mocks/setup.ts diff --git a/src/App.tsx b/src/App.tsx index d473516f..8d686c1c 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,4 +1,4 @@ -import { useEffect } from "react"; +import { useEffect, useState } from "react"; import { BrowserRouter as Router, Routes, Route } from "react-router-dom"; import { useQuery } from "@tanstack/react-query"; import Visualization from "./pages/Visualization/Visualization"; @@ -9,7 +9,7 @@ import Modify from "./pages/Modify/Modify"; import { useUserStore } from "./store/user"; import "./App.css"; -import { worker } from "./mocks/browser"; +import { setupMSW } from "./mocks/setup"; interface User { email: string; @@ -17,12 +17,12 @@ interface User { role: string; } //zustand - -if (typeof window !== "undefined") { - if (import.meta.env.VITE_APP_NODE_ENV === "development") { - worker.start(); - } -} +// 새로고침 이후 get요청을 보내면 msw가 실행되기 전에 보내지는 버그 수정 +// if (typeof window !== "undefined") { +// if (import.meta.env.VITE_APP_NODE_ENV === "development") { +// worker.start(); +// } +// } // msw 버그로 인해 fetchUser는 따로 확인 불가능 백엔드 서버 연결해서 확인해야함 const fetchUser = async (): Promise => { const response = await fetch("http://localhost:8080/edupi_user/v1/member/login/info", { @@ -40,7 +40,16 @@ const fetchUser = async (): Promise => { }; function App() { - const { data } = useQuery({ queryKey: ["user"], queryFn: fetchUser }); + const [isMswReady, setIsMswReady] = useState(false); + + useEffect(() => { + if (import.meta.env.VITE_APP_NODE_ENV === "development") { + setupMSW().then(() => setIsMswReady(true)); + } else { + setIsMswReady(true); + } + }, []); + const { data } = useQuery({ queryKey: ["user"], queryFn: fetchUser, enabled: isMswReady }); const setLoggedInUserEmail = useUserStore((state) => state.setLoggedInUserEmail); const setLoggedInUserName = useUserStore((state) => state.setLoggedInUserName); const setLoggedInUserRole = useUserStore((state) => state.setLoggedInUserRole); diff --git a/src/mocks/handlers.ts b/src/mocks/handlers.ts index 86eb3fb6..273c7557 100644 --- a/src/mocks/handlers.ts +++ b/src/mocks/handlers.ts @@ -30,13 +30,22 @@ export const handlers = [ http.post("/edupi_visualize/v1/python", () => { return HttpResponse.json(testResponseBody); }), - http.post("/edupi_user/v1/member/load", async ({ request }) => { - console.log("Intercepted GET request to /edupi_user/v1/member/load"); + http.get("/edupi_user/v1/member/login/info", async ({ request, cookies }) => { + console.log("응답"); + // Get the token from the cookies + console.log(cookies); + const cookieHeader = request.headers.get("Cookie"); + console.log("cookieHeader", cookieHeader); + const token = cookieHeader + ?.split(";") + .find((cookie) => cookie.trim().startsWith("token=")) + ?.split("=")[1]; + console.log("token", token); // 쿠키에서 토큰을 확인 - const cookies = request.headers.get("Cookie"); - const hasToken = cookies && cookies.includes("token="); - + // const cookies = request.headers.get("Cookie"); + // const hasToken = cookies && cookies.includes("token="); + const hasToken = true; if (hasToken) { return HttpResponse.json( { @@ -71,19 +80,17 @@ export const handlers = [ http.post("/edupi_user/v1/member/login", async ({ request }) => { try { const { email, password } = (await request.json()) as User; - + console.log("login"); if (email === "test@test.com" && password === "test") { // JWT 토큰 생성을 기다립니다. const token = await generateToken(email); const expirationDate = new Date(new Date().getTime() + 60 * 60 * 1000); console.log("로그인 성공"); - console.log; return HttpResponse.json( { success: true, message: "로그인 성공", - user: { id: email, name: "테스트 사용자" }, }, { status: 200, diff --git a/src/mocks/setup.ts b/src/mocks/setup.ts new file mode 100644 index 00000000..eead3370 --- /dev/null +++ b/src/mocks/setup.ts @@ -0,0 +1,14 @@ +// src/mocks/setup.ts +import { worker } from "./browser"; + +export const setupMSW = async () => { + if (import.meta.env.VITE_APP_NODE_ENV === "development") { + return worker.start({ + onUnhandledRequest: "bypass", + serviceWorker: { + url: "/mockServiceWorker.js", + }, + }); + } + return Promise.resolve(); +}; From 2dfb0879cd770b2e4f11c74b455b85d7f6ef4ccf Mon Sep 17 00:00:00 2001 From: lee gyu yeol-mac Date: Fri, 6 Sep 2024 14:56:39 +0900 Subject: [PATCH 32/48] =?UTF-8?q?[#138]feat:=20=EB=A1=9C=EC=BB=AC=20api?= =?UTF-8?q?=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/Visualization/Visualization.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/Visualization/Visualization.tsx b/src/pages/Visualization/Visualization.tsx index be90ceda..f1728b27 100644 --- a/src/pages/Visualization/Visualization.tsx +++ b/src/pages/Visualization/Visualization.tsx @@ -53,7 +53,7 @@ export default function Visualization() { const mutation = useMutation({ mutationFn: async (code: string) => { - return fetch("http://GW-ALB-1871726514.ap-northeast-2.elb.amazonaws.com/edupi_visualize/v1/python", { + return fetch("http://localhost:8080/edupi_visualize/v1/python", { method: "POST", headers: { "Content-Type": "application/json", From a666c7244bfbeac4947fec9765b2a2ba818bebc3 Mon Sep 17 00:00:00 2001 From: lee gyu yeol-mac Date: Fri, 6 Sep 2024 15:17:03 +0900 Subject: [PATCH 33/48] =?UTF-8?q?[#138]feat:=20console.log=20=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/mocks/handlers.ts | 11 +++++------ .../components/RightSection/renderingCodeFlow.tsx | 1 - 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/mocks/handlers.ts b/src/mocks/handlers.ts index 273c7557..dbcd3592 100644 --- a/src/mocks/handlers.ts +++ b/src/mocks/handlers.ts @@ -32,16 +32,15 @@ export const handlers = [ }), http.get("/edupi_user/v1/member/login/info", async ({ request, cookies }) => { - console.log("응답"); // Get the token from the cookies - console.log(cookies); + const cookieHeader = request.headers.get("Cookie"); - console.log("cookieHeader", cookieHeader); + const token = cookieHeader ?.split(";") .find((cookie) => cookie.trim().startsWith("token=")) ?.split("=")[1]; - console.log("token", token); + // 쿠키에서 토큰을 확인 // const cookies = request.headers.get("Cookie"); // const hasToken = cookies && cookies.includes("token="); @@ -80,13 +79,13 @@ export const handlers = [ http.post("/edupi_user/v1/member/login", async ({ request }) => { try { const { email, password } = (await request.json()) as User; - console.log("login"); + if (email === "test@test.com" && password === "test") { // JWT 토큰 생성을 기다립니다. const token = await generateToken(email); const expirationDate = new Date(new Date().getTime() + 60 * 60 * 1000); - console.log("로그인 성공"); + return HttpResponse.json( { success: true, diff --git a/src/pages/Visualization/components/RightSection/renderingCodeFlow.tsx b/src/pages/Visualization/components/RightSection/renderingCodeFlow.tsx index db29eac4..c1b9f4cc 100644 --- a/src/pages/Visualization/components/RightSection/renderingCodeFlow.tsx +++ b/src/pages/Visualization/components/RightSection/renderingCodeFlow.tsx @@ -35,7 +35,6 @@ const CodeFlowItem = ({ codeFlow, width, height, children }: Props) => { const setRight = useArrowStore((state) => state.setRight); useEffect(() => { - console.log("codeFlow", codeFlow); if (ref.current && codeFlow.isLight) { const rect = ref.current.getBoundingClientRect(); setTop(rect.top); From 0783ba635b43b54649494ceb01b9d3327a296094 Mon Sep 17 00:00:00 2001 From: lee gyu yeol-mac Date: Sat, 7 Sep 2024 21:32:54 +0900 Subject: [PATCH 34/48] =?UTF-8?q?[#140]feat:=20=EC=84=A4=EC=A0=95=20?= =?UTF-8?q?=EB=B0=98=EC=9D=91=ED=98=95=20=EB=94=94=EC=9E=90=EC=9D=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.css | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/App.css b/src/App.css index c9412532..178511eb 100644 --- a/src/App.css +++ b/src/App.css @@ -1040,12 +1040,17 @@ header .group-btn { height: 51px; } .group-right { - width: 1140px; padding: 40px 0 0 36px; } .section-data04 { grid-template-columns: 1fr 1fr 1fr; } +@media screen and (max-width: 1740px) { + .section-data04 { + grid-template-columns: 1fr 1fr; + } +} + .section-data04 li a { border-radius: 8px; overflow: hidden; From ea9d5131b32f96962735bf33e99e891677a5c279 Mon Sep 17 00:00:00 2001 From: lee gyu yeol-mac Date: Sat, 7 Sep 2024 21:40:11 +0900 Subject: [PATCH 35/48] =?UTF-8?q?[#140]feat:=20=EA=B7=B8=EB=A3=B9=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=20=EB=9D=BC=EC=9A=B0=ED=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/App.tsx b/src/App.tsx index 8d686c1c..0b05bd68 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -6,6 +6,7 @@ import Signup from "./pages/Signup/Signup"; import Login from "./pages/Login/Login"; import Home from "./pages/Home/Home"; import Modify from "./pages/Modify/Modify"; +import Group from "./pages/Group/Group"; import { useUserStore } from "./store/user"; import "./App.css"; @@ -69,6 +70,7 @@ function App() { } /> } /> } /> + } />
); From c379ff5235de822586bdedaa4c99de942b0fddc8 Mon Sep 17 00:00:00 2001 From: lee gyu yeol-mac Date: Sat, 7 Sep 2024 21:40:37 +0900 Subject: [PATCH 36/48] =?UTF-8?q?[#140]feat:=20=EC=A0=84=EC=97=AD=20css?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/index.css | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/index.css b/src/index.css index a8c91dae..af6dca10 100644 --- a/src/index.css +++ b/src/index.css @@ -229,6 +229,9 @@ ol { } .s__row { padding: 0 16px; +} +.modify-s__row { + padding: 0 16px; min-height: 80vh; } From ca50f5bb6eb76fbc63ffa797f9763b216955a25f Mon Sep 17 00:00:00 2001 From: lee gyu yeol-mac Date: Sat, 7 Sep 2024 21:40:54 +0900 Subject: [PATCH 37/48] =?UTF-8?q?[#140]feat:=20=EA=B7=B8=EB=A3=B9=20?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/Group/Group.tsx | 101 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 src/pages/Group/Group.tsx diff --git a/src/pages/Group/Group.tsx b/src/pages/Group/Group.tsx new file mode 100644 index 00000000..bcaf7309 --- /dev/null +++ b/src/pages/Group/Group.tsx @@ -0,0 +1,101 @@ +import LoggedInHeader from "../components/LoggedInHeader"; +import Room from "./components/Room"; +const Group: React.FC = () => { + return ( +
+ +
+
+
+

GROUP

+

함께 배우고, 더 빨리 성장하세요!

+ 혼자보다 함께할 때 더 많이, 더 빨리 배울 수 있습니다. +
+
+ 그룹이미지 +
+
+
+
+

김철수님

+ kim0000@naver.com +
    +
  • +

    생성된 그룹 수

    +

    8

    +
  • +
  • +

    전체 학생 수

    +

    400

    +
  • +
+ +
+ + +
+
+
+ +
+
+ ); +}; +export default Group; From 8ab9a96ddd0f9473c0eed5e42578f7a5bea82634 Mon Sep 17 00:00:00 2001 From: lee gyu yeol-mac Date: Sat, 7 Sep 2024 21:41:16 +0900 Subject: [PATCH 38/48] =?UTF-8?q?[#140]feat:=20=EB=B0=A9=20=EC=BB=B4?= =?UTF-8?q?=ED=8F=AC=EB=84=8C=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/Group/components/Room.tsx | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 src/pages/Group/components/Room.tsx diff --git a/src/pages/Group/components/Room.tsx b/src/pages/Group/components/Room.tsx new file mode 100644 index 00000000..48d518f4 --- /dev/null +++ b/src/pages/Group/components/Room.tsx @@ -0,0 +1,17 @@ +import { ReactNode } from "react"; + +const Room = (): ReactNode => { + return ( +
  • + +
    +

    파이썬 기초 1반

    + 인원 : 23명 + 초대 대기 : 1명 +
    + +
    +
  • + ); +}; +export default Room; From ee70d4c51186be4813cb8099efccb49e556a6540 Mon Sep 17 00:00:00 2001 From: lee gyu yeol-mac Date: Sat, 7 Sep 2024 21:41:32 +0900 Subject: [PATCH 39/48] =?UTF-8?q?[#140]feat:=20css=20=EC=9D=B4=EB=A6=84=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/Modify/Modify.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/Modify/Modify.tsx b/src/pages/Modify/Modify.tsx index 1b4a7aef..d88e3f00 100644 --- a/src/pages/Modify/Modify.tsx +++ b/src/pages/Modify/Modify.tsx @@ -21,7 +21,7 @@ const Modify = () => {
    -
    +

    초대 대기

    From c364f9c49b2e773c930fa15920e6aeb1af6fe8dc Mon Sep 17 00:00:00 2001 From: lee gyu yeol-mac Date: Sat, 7 Sep 2024 21:56:05 +0900 Subject: [PATCH 40/48] =?UTF-8?q?[#140]feat:=20css=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/index.css | 1 + 1 file changed, 1 insertion(+) diff --git a/src/index.css b/src/index.css index af6dca10..27a06731 100644 --- a/src/index.css +++ b/src/index.css @@ -240,6 +240,7 @@ ol { --white: #fff; --blue: #4866ff; --gray01: #dddee4; + --gray02: #eaeaea; --bg01: #fcfcfc; --bg02: #f7f7f7; } From 44f074419d1082a1561d3aa1538dce3b31427b65 Mon Sep 17 00:00:00 2001 From: lee gyu yeol-mac Date: Mon, 9 Sep 2024 14:32:26 +0900 Subject: [PATCH 41/48] =?UTF-8?q?[#142]feat:=20=EA=B3=BC=EC=A0=9C=20?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80=20=EB=9D=BC=EC=9A=B0=ED=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.css | 6 ++++++ src/App.tsx | 2 ++ 2 files changed, 8 insertions(+) diff --git a/src/App.css b/src/App.css index 178511eb..c73a9115 100644 --- a/src/App.css +++ b/src/App.css @@ -759,11 +759,17 @@ var-list { .section-data02 { grid-template-columns: 1fr 1fr 1fr 1fr; } +@media screen and (max-width: 1212px) { + .section-data02 { + grid-template-columns: 1fr 1fr 1fr; + } +} .section-data02 > li { background-color: #fff; border-radius: 8px; overflow: hidden; border: 1px solid var(--gray02); + min-width: 258px; } .section-data02-img-wrap { height: 190px; diff --git a/src/App.tsx b/src/App.tsx index 0b05bd68..7907cad0 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -7,6 +7,7 @@ import Login from "./pages/Login/Login"; import Home from "./pages/Home/Home"; import Modify from "./pages/Modify/Modify"; import Group from "./pages/Group/Group"; +import Assginment from "./pages/Assignment/Assignment"; import { useUserStore } from "./store/user"; import "./App.css"; @@ -71,6 +72,7 @@ function App() { } /> } /> } /> + } /> ); From 7b391b8517c43a0fb1096f7abd98e54230b415e3 Mon Sep 17 00:00:00 2001 From: lee gyu yeol-mac Date: Mon, 9 Sep 2024 14:32:58 +0900 Subject: [PATCH 42/48] =?UTF-8?q?[#142]feat:=20=EA=B3=BC=EC=A0=9C=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/Assignment/Assignment.tsx | 126 ++++++++++++++++++ .../components/AssignmentSection.tsx | 23 ++++ 2 files changed, 149 insertions(+) create mode 100644 src/pages/Assignment/Assignment.tsx create mode 100644 src/pages/Assignment/components/AssignmentSection.tsx diff --git a/src/pages/Assignment/Assignment.tsx b/src/pages/Assignment/Assignment.tsx new file mode 100644 index 00000000..30a0b7a8 --- /dev/null +++ b/src/pages/Assignment/Assignment.tsx @@ -0,0 +1,126 @@ +import LoggedInHeader from "../components/LoggedInHeader"; +import AssginmentSection from "./components/AssignmentSection"; +const Assignment = () => { + return ( + + ); +}; +export default Assignment; diff --git a/src/pages/Assignment/components/AssignmentSection.tsx b/src/pages/Assignment/components/AssignmentSection.tsx new file mode 100644 index 00000000..beb442ee --- /dev/null +++ b/src/pages/Assignment/components/AssignmentSection.tsx @@ -0,0 +1,23 @@ +const AssginmentSection = () => { + return ( +
  • + +
    + +
    +
    +

    구구단 출력

    +
    +

    제출시작

    +

    2023.01.01 11:59

    +
    +
    +

    제출마감

    +

    2023.01.01 11:59

    +
    +
    +
    +
  • + ); +}; +export default AssginmentSection; From cdaa5cd127ded29d97082b82fd4cf7b1df16bae2 Mon Sep 17 00:00:00 2001 From: lee gyu yeol-mac Date: Mon, 9 Sep 2024 14:59:06 +0900 Subject: [PATCH 43/48] =?UTF-8?q?[#144]feat:=20=EC=A7=84=EC=B2=99=EB=8F=84?= =?UTF-8?q?=20=ED=8E=98=EC=9D=B4=EC=A7=80=20=EB=9D=BC=EC=9A=B0=ED=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/App.tsx b/src/App.tsx index 7907cad0..113dd5e0 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -8,6 +8,7 @@ import Home from "./pages/Home/Home"; import Modify from "./pages/Modify/Modify"; import Group from "./pages/Group/Group"; import Assginment from "./pages/Assignment/Assignment"; +import Progress from "./pages/Progress/Progress"; import { useUserStore } from "./store/user"; import "./App.css"; @@ -73,6 +74,7 @@ function App() { } /> } /> } /> + } /> ); From 17b5e21a28eaf168d1582549de0d3fd2ad61c194 Mon Sep 17 00:00:00 2001 From: lee gyu yeol-mac Date: Mon, 9 Sep 2024 14:59:32 +0900 Subject: [PATCH 44/48] =?UTF-8?q?[#144]feat:=20=EC=A7=84=EC=B2=99=EB=8F=84?= =?UTF-8?q?=20=ED=8E=98=EC=9D=B4=EC=A7=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/Progress/Progress.tsx | 156 ++++++++++++++++++++++++++++++++ 1 file changed, 156 insertions(+) create mode 100644 src/pages/Progress/Progress.tsx diff --git a/src/pages/Progress/Progress.tsx b/src/pages/Progress/Progress.tsx new file mode 100644 index 00000000..d9c0b49f --- /dev/null +++ b/src/pages/Progress/Progress.tsx @@ -0,0 +1,156 @@ +import { useState } from "react"; +import LoggedInHeader from "../components/LoggedInHeader"; +const Progress = () => { + const [date, setDate] = useState("2024-01-01"); + + const handleDateChange = (e: React.ChangeEvent) => { + setDate(e.target.value); + }; + + const formatDate = (dateString: string) => { + return dateString.replace(/-/g, ". "); + }; + return ( +
    + +
    +
    + 그룹 +

    파이썬 기초 1반

    +
    +
    +
    +
    +
    +
    + +
    + + +
    + +
    +
      +
    • + 전체 +
      +

      전체

      +

      23

      +
      +
    • +
    • + 미제출 +
      +

      미제출

      +

      9

      +
      +
    • +
    • + 성공 +
      +

      성공

      +

      8

      +
      +
    • +
    • + 실패 +
      +

      실패

      +

      0

      +
      +
    • +
    +
    +
    +
    +

    제출현황

    +
    +
    + +
    +
    + +
    +
    + +
    + ); +}; +export default Progress; From ccd6af9562f1a4b72570998f7043fc9b9b37fec9 Mon Sep 17 00:00:00 2001 From: lee gyu yeol-mac Date: Mon, 9 Sep 2024 15:09:45 +0900 Subject: [PATCH 45/48] =?UTF-8?q?[#144]feat:=20=ED=97=A4=EB=8D=94=EC=99=80?= =?UTF-8?q?=20=ED=8E=98=EC=9D=B4=EC=A7=80=20=EC=97=B0=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/components/LoggedInHeader.tsx | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/pages/components/LoggedInHeader.tsx b/src/pages/components/LoggedInHeader.tsx index 8835e380..093cf5a5 100644 --- a/src/pages/components/LoggedInHeader.tsx +++ b/src/pages/components/LoggedInHeader.tsx @@ -1,7 +1,7 @@ import styles from "./LoggedInHeader.module.css"; import { useUserStore } from "@/store/user"; import { Cookies } from "react-cookie"; -import { Link } from "react-router-dom"; +import { Link, NavLink } from "react-router-dom"; const LoggedInHeader = () => { const cookies = new Cookies(); const loggedInUserName = useUserStore((state) => state.loggedInUserName); @@ -10,6 +10,7 @@ const LoggedInHeader = () => { resetUser(); cookies.remove("token"); }; + console.log(NavLink); return (
    @@ -17,12 +18,20 @@ const LoggedInHeader = () => { 로고 {/* */} - 학생목록 - + (isActive ? styles["on_active"] : "")}> + 학생목록 + + + (isActive ? styles["on_active"] : "")}> 시각화 - - 과제 - 설정 + + + (isActive ? styles["on_active"] : "")}> + 과제 + + (isActive ? styles["on_active"] : "")}> + 설정 +
    From 97cfa2e77a29d69f703f68d1f4b1f5bc59610124 Mon Sep 17 00:00:00 2001 From: lee gyu yeol-mac Date: Mon, 9 Sep 2024 17:49:15 +0900 Subject: [PATCH 46/48] =?UTF-8?q?[#144]feat:=20build=EA=B0=80=EB=8A=A5?= =?UTF-8?q?=ED=95=98=EA=B2=8C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/mocks/handlers.ts | 9 +-------- src/pages/Home/Home.tsx | 2 +- src/pages/Visualization/types/codeFlow/printItem.ts | 2 +- 3 files changed, 3 insertions(+), 10 deletions(-) diff --git a/src/mocks/handlers.ts b/src/mocks/handlers.ts index dbcd3592..28b43954 100644 --- a/src/mocks/handlers.ts +++ b/src/mocks/handlers.ts @@ -31,16 +31,9 @@ export const handlers = [ return HttpResponse.json(testResponseBody); }), - http.get("/edupi_user/v1/member/login/info", async ({ request, cookies }) => { + http.get("/edupi_user/v1/member/login/info", async () => { // Get the token from the cookies - const cookieHeader = request.headers.get("Cookie"); - - const token = cookieHeader - ?.split(";") - .find((cookie) => cookie.trim().startsWith("token=")) - ?.split("=")[1]; - // 쿠키에서 토큰을 확인 // const cookies = request.headers.get("Cookie"); // const hasToken = cookies && cookies.includes("token="); diff --git a/src/pages/Home/Home.tsx b/src/pages/Home/Home.tsx index 7211864d..a01f5726 100644 --- a/src/pages/Home/Home.tsx +++ b/src/pages/Home/Home.tsx @@ -6,7 +6,7 @@ const Home = () => { return ( <> {loggedInUserName === "" ? : } -

    메인페이지 입니다

    +

    메인페이지버전2 입니다

    ); }; diff --git a/src/pages/Visualization/types/codeFlow/printItem.ts b/src/pages/Visualization/types/codeFlow/printItem.ts index 87284ed8..49d93556 100644 --- a/src/pages/Visualization/types/codeFlow/printItem.ts +++ b/src/pages/Visualization/types/codeFlow/printItem.ts @@ -1,4 +1,4 @@ -import { AllObjectItem } from "./codeFlow/allObjectItem"; +import { AllObjectItem } from "./allObjectItem"; export interface PrintItem { id: number; From c26c995c7fea233ae0510cd47765fbf9dd0d42f9 Mon Sep 17 00:00:00 2001 From: lee gyu yeol-mac Date: Tue, 10 Sep 2024 13:50:14 +0900 Subject: [PATCH 47/48] =?UTF-8?q?[#144]feat:=20=EA=B9=83=ED=97=88=EB=B8=8C?= =?UTF-8?q?=20=EC=95=A1=EC=85=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/action.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/action.yml b/.github/workflows/action.yml index fcbc27b5..fdc15023 100644 --- a/.github/workflows/action.yml +++ b/.github/workflows/action.yml @@ -5,15 +5,15 @@ on: - master jobs: build: - runs-on: ubuntu-latest + runs-on: ubuntu-latest strategy: matrix: - node-version: [ 16.x ] + node-version: [20.x] steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v3 - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v1 + uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} - name: Create env file From 73e6d505c56fefa84cddee3a5aad70af05f13fbb Mon Sep 17 00:00:00 2001 From: lee gyu yeol-mac Date: Tue, 10 Sep 2024 14:45:36 +0900 Subject: [PATCH 48/48] =?UTF-8?q?[#136]feat:=20alert=20=EB=A9=94=EC=8B=9C?= =?UTF-8?q?=EC=A7=80=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/Visualization/Visualization.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/Visualization/Visualization.tsx b/src/pages/Visualization/Visualization.tsx index f1728b27..b8075792 100644 --- a/src/pages/Visualization/Visualization.tsx +++ b/src/pages/Visualization/Visualization.tsx @@ -69,11 +69,11 @@ export default function Visualization() { setPreprocessedCodes(jsonData); setDisplayNone(false); } else { - throw new Error("받은 데이터가 올바르지 않습니다"); + throw new Error("데이터 형식이 올바르지 않습니다"); } } catch (error) { console.error("Data processing error:", error); - alert("받은 데이터의 형식이 올바르지 않습니다."); + alert("데이터의 형식이 올바르지 않습니다."); } }, onError(error) {