조수연

Merge branch 'test1' into 'master'

Test 수정

test 수정

See merge request !3
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "pwa-chrome",
"request": "launch",
"name": "Launch Chrome against localhost",
"url": "http://localhost:8080",
"webRoot": "${workspaceFolder}"
}
]
}
\ No newline at end of file
[1202/001140.204:ERROR:directory_reader_win.cc(43)] FindFirstFile: 지정된 경로를 찾을 수 없습니다. (0x3)
[1202/005241.162:ERROR:directory_reader_win.cc(43)] FindFirstFile: 지정된 경로를 찾을 수 없습니다. (0x3)
[1202/045149.393:ERROR:directory_reader_win.cc(43)] FindFirstFile: 지정된 경로를 찾을 수 없습니다. (0x3)
[{"C:\\Users\\subin\\Desktop\\khuhub_color\\Find_your_own_personal_color\\front\\src\\App.js":"1","C:\\Users\\subin\\Desktop\\khuhub_color\\Find_your_own_personal_color\\front\\src\\Home.js":"2","C:\\Users\\subin\\Desktop\\khuhub_color\\Find_your_own_personal_color\\front\\src\\test.js":"3","C:\\Users\\subin\\Desktop\\khuhub_color\\Find_your_own_personal_color\\front\\src\\index.js":"4"},{"size":450,"mtime":1606585705558,"results":"5","hashOfConfig":"6"},{"size":493,"mtime":1606590087333,"results":"7","hashOfConfig":"6"},{"size":2628,"mtime":1606613746724,"results":"8","hashOfConfig":"6"},{"size":238,"mtime":1606589880919,"results":"9","hashOfConfig":"6"},{"filePath":"10","messages":"11","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"pqxpq",{"filePath":"12","messages":"13","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"14","messages":"15","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16","messages":"17","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"C:\\Users\\subin\\Desktop\\khuhub_color\\Find_your_own_personal_color\\front\\src\\App.js",[],"C:\\Users\\subin\\Desktop\\khuhub_color\\Find_your_own_personal_color\\front\\src\\Home.js",[],"C:\\Users\\subin\\Desktop\\khuhub_color\\Find_your_own_personal_color\\front\\src\\test.js",[],"C:\\Users\\subin\\Desktop\\khuhub_color\\Find_your_own_personal_color\\front\\src\\index.js",[]]
\ No newline at end of file
[{"C:\\Users\\subin\\Desktop\\khuhub_color\\Find_your_own_personal_color\\front\\src\\App.js":"1","C:\\Users\\subin\\Desktop\\khuhub_color\\Find_your_own_personal_color\\front\\src\\Home.js":"2","C:\\Users\\subin\\Desktop\\khuhub_color\\Find_your_own_personal_color\\front\\src\\test.js":"3","C:\\Users\\subin\\Desktop\\khuhub_color\\Find_your_own_personal_color\\front\\src\\index.js":"4","C:\\Users\\subin\\Desktop\\khuhub_color\\Find_your_own_personal_color\\front\\src\\test2.js":"5","C:\\Users\\subin\\Desktop\\khuhub_color\\Find_your_own_personal_color\\front\\src\\test3.js":"6"},{"size":625,"mtime":1606850624017,"results":"7","hashOfConfig":"8"},{"size":493,"mtime":1606850624022,"results":"9","hashOfConfig":"8"},{"size":3347,"mtime":1606849098689,"results":"10","hashOfConfig":"8"},{"size":238,"mtime":1606589880919,"results":"11","hashOfConfig":"8"},{"size":3249,"mtime":1606848650428,"results":"12","hashOfConfig":"8"},{"size":3313,"mtime":1606851847769,"results":"13","hashOfConfig":"8"},{"filePath":"14","messages":"15","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"pqxpq",{"filePath":"16","messages":"17","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18","messages":"19","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"20","messages":"21","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22","messages":"23","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"24","messages":"25","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"26"},"C:\\Users\\subin\\Desktop\\khuhub_color\\Find_your_own_personal_color\\front\\src\\App.js",[],"C:\\Users\\subin\\Desktop\\khuhub_color\\Find_your_own_personal_color\\front\\src\\Home.js",[],"C:\\Users\\subin\\Desktop\\khuhub_color\\Find_your_own_personal_color\\front\\src\\test.js",["27"],"C:\\Users\\subin\\Desktop\\khuhub_color\\Find_your_own_personal_color\\front\\src\\index.js",[],"C:\\Users\\subin\\Desktop\\khuhub_color\\Find_your_own_personal_color\\front\\src\\test2.js",["28"],"C:\\Users\\subin\\Desktop\\khuhub_color\\Find_your_own_personal_color\\front\\src\\test3.js",["29","30"],"import React, { useState } from 'react'; //리액트 불러오기\r\nimport console from 'react-console'; //리액트 콘솔_크롬으로 실행\r\nimport './test.css';//test.css 불러오기\r\n\r\nconst Test3 = ( { history } ) =>\r\n {\r\n\tconst questions_warm = [\r\n\t\t{\r\n\t\t\tquestionText: '머리카락 색이 검정에 가깝다',\r\n\t\t\tanswerOptions: [\r\n\t\t\t\t{ answerText: '예', isCorrect: true },\r\n\t\t\t\t{ answerText: '아니오', isCorrect: false }\r\n\t\t\t],\r\n\t\t},\r\n\t\t{\r\n\t\t\tquestionText: '피부에 붉은 기가 많다',\r\n\t\t\tanswerOptions: [\r\n\t\t\t\t{ answerText: '예', isCorrect: true },\r\n\t\t\t\t{ answerText: '아니오', isCorrect: false }\r\n\t\t\t],\r\n\t\t},\r\n\t\t{\r\n\t\t\tquestionText: '손목 혈관 색이 초록색이다',\r\n\t\t\tanswerOptions: [\r\n\t\t\t\t{ answerText: '예', isCorrect: false },\r\n\t\t\t\t{ answerText: '아니오', isCorrect: true }\r\n\t\t\t],\r\n\t\t},\r\n\t\t{\r\n\t\t\tquestionText: '햇볕에 장시간 있으면 피부가 붉어진다',\r\n\t\t\tanswerOptions: [\r\n\t\t\t\t{ answerText: '예', isCorrect: true },\r\n\t\t\t\t{ answerText: '아니오', isCorrect: false }\r\n\t\t\t],\r\n\t\t},\r\n\t]; //봄웜톤, 가을웜톤 파악\r\n\r\n\r\n\tconst [currentQuestion_w, setCurrentQuestion] = useState(0); //현재 문제 번호 [변수, 함수]\r\n\tconst [showScore_w, setShowScore] = useState(false); //결과 보여줄까?\r\n\tconst [score_w_s, setScore_warm_spring] = useState(0);\r\n\tconst [score_w_a, setScore_warm_autumn] = useState(0);\r\n\tconst [score, setPersonal] = useState(\"\"); //퍼스널컬러 결과\r\n\t\r\n\r\n\tconst handleAnswerOptionClick = (isCorrect) => { //main 함수 1_웜쿨 검사\r\n\t\tif (isCorrect) {\r\n\t\t\tsetScore_warm_spring(score_w_s+1);\r\n\t\t}\r\n\t\telse{\r\n\t\t\tsetScore_warm_autumn(score_w_a+1);\r\n\t\t} ///웜,쿨 if문으로 점수 올리기\r\n\r\n\t\tconst nextQuestion = currentQuestion_w + 1;\r\n\t\tif (nextQuestion < questions_warm.length) {\r\n\t\t\tsetCurrentQuestion(nextQuestion);\r\n\t\t}\r\n\t\telse{\r\n\t\t\tsetShowScore(true); //questions 끝나면 점수 보여줄까? true -> className='score-section'\r\n\t\t}\r\n \r\n }; //함수1 끝.\r\n\r\nconst handlePersonalScore_warm = (score_w_s,score_w_a) =>{ //함수3_여쿨, 겨쿨 점수로 결과 구하기\r\n\tif(score_w_s>score_w_a){\r\n\t\tsetPersonal('spring warm');\r\n\t}\r\n\telse if(score_w_s<score_w_a){\r\n\t\tsetPersonal('autumn warm');\r\n\t}\r\n\telse{\r\n\t\tsetPersonal('restart');\r\n\t}\r\n}; //함수3 끝.\r\n\r\n\treturn (\r\n\t\t<div className='app'>\r\n\t\t\t{showScore_w ? ( \r\n\t\t\t\t<span className='score-section'>\r\n\t\t\t\t\tYou scored {score} out of {questions_warm.length}\r\n\t\t\t\t\t<button onClick={() => handlePersonalScore_warm(score_w_s,score_w_a)}>result</button>\r\n\t\t\t\t\t{score === \"spring warm\" ? <img id = \"season\" src={require(\"./season/spring.jpg\")}/>\r\n\t\t\t\t\t: <button onClick={ () => {history.push(\"/test3\")}}>next</button>}\r\n\t\t\t\t</span>\r\n\t\t\t) : (\r\n\t\t\t\t<>\r\n\t\t\t\t\t<div className='question-section'>\r\n\t\t\t\t\t\t<div className='question-count'>\r\n\t\t\t\t\t\t\t<span>Question {currentQuestion_w + 1}</span>/{questions_warm.length}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<div className='question-text'>{questions_warm[currentQuestion_w].questionText}</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div className='answer-section'>\r\n\t\t\t\t\t\t{questions_warm[currentQuestion_w].answerOptions.map((answerOption) => (\r\n\t\t\t\t\t\t\t<button onClick={() => handleAnswerOptionClick(answerOption.isCorrect)}>{answerOption.answerText}</button>\r\n\t\t\t\t\t\t))}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</>\r\n\t\t\t)}\r\n\t\t</div>\r\n\t);\r\n}\r\n\r\n\r\nexport default Test3;",{"ruleId":"31","severity":1,"message":"32","line":1,"column":17,"nodeType":"33","messageId":"34","endLine":1,"endColumn":26},{"ruleId":"31","severity":1,"message":"35","line":2,"column":8,"nodeType":"33","messageId":"34","endLine":2,"endColumn":15},{"ruleId":"31","severity":1,"message":"35","line":2,"column":8,"nodeType":"33","messageId":"34","endLine":2,"endColumn":15},{"ruleId":"36","severity":1,"message":"37","line":82,"column":33,"nodeType":"38","endLine":82,"endColumn":90},"no-unused-vars","'useEffect' is defined but never used.","Identifier","unusedVar","'console' is defined but never used.","jsx-a11y/alt-text","img elements must have an alt prop, either with meaningful text, or an empty string for decorative images.","JSXOpeningElement"]
\ No newline at end of file
......
......@@ -21,3 +21,6 @@
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# folder
node_modules/
......
......@@ -12182,6 +12182,15 @@
"whatwg-fetch": "^3.4.1"
}
},
"react-console": {
"version": "1.0.0-rc.2",
"resolved": "https://registry.npmjs.org/react-console/-/react-console-1.0.0-rc.2.tgz",
"integrity": "sha512-3fxT5x07GImC+1DOGtn8FBwwBgdNrp+HWbVBBcVe/iC5ilFEZWQm2lY8jh+2SYWiJ74TrTSQy909ouGzzeTOYg==",
"requires": {
"react-is": "^16.13.1",
"react-reconciler": "^0.25.1"
}
},
"react-dev-utils": {
"version": "11.0.1",
"resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-11.0.1.tgz",
......@@ -12287,6 +12296,28 @@
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
},
"react-reconciler": {
"version": "0.25.1",
"resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.25.1.tgz",
"integrity": "sha512-R5UwsIvRcSs3w8n9k3tBoTtUHdVhu9u84EG7E5M0Jk9F5i6DA1pQzPfUZd6opYWGy56MJOtV3VADzy6DRwYDjw==",
"requires": {
"loose-envify": "^1.1.0",
"object-assign": "^4.1.1",
"prop-types": "^15.6.2",
"scheduler": "^0.19.1"
},
"dependencies": {
"scheduler": {
"version": "0.19.1",
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz",
"integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==",
"requires": {
"loose-envify": "^1.1.0",
"object-assign": "^4.1.1"
}
}
}
},
"react-refresh": {
"version": "0.8.3",
"resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.8.3.tgz",
......
......@@ -7,6 +7,7 @@
"@testing-library/react": "^11.2.2",
"@testing-library/user-event": "^12.2.2",
"react": "^17.0.1",
"react-console": "^1.0.0-rc.2",
"react-dom": "^17.0.1",
"react-router-dom": "^5.2.0",
"react-scripts": "4.0.1",
......
......@@ -2,6 +2,8 @@ import React, { Component } from 'react';
import { BrowserRouter, Route } from 'react-router-dom';
import Home from './Home';
import Test from './test';
import Test2 from './test2';
import Test3 from './test3';
class App extends Component {
......@@ -10,7 +12,9 @@ class App extends Component {
<div>
<BrowserRouter>
<Route path="/" exact component={Home} />
<Route path="/test" exact component={Test} />
<Route path="/test" exact component={Test} />
<Route path="/test2" exact component={Test2} />
<Route path="/test3" exact component={Test3} />
</BrowserRouter>
</div>
)
......
import React, { useState } from 'react';
import './test.css';
import React, { useEffect,useState } from 'react'; //리액트 불러오기
import console from 'react-console'; //리액트 콘솔_크롬으로 실행
import './test.css';//test.css 불러오기
const Test = ( { history } ) =>
{
......@@ -33,52 +33,55 @@ const Test = ( { history } ) =>
{ answerText: '아니오', isCorrect: false }
],
},
];
]; //웜,쿨 파악
const [currentQuestion, setCurrentQuestion] = useState(0);
const [showScore, setShowScore] = useState(false);
const [score_c, setScore_cool] = useState(0);
const [score_w, setScore_warm] = useState(0);
const [score, setPersonal] = useState(0);
var isTrue = 0;
const [currentQuestion, setCurrentQuestion] = useState(0); //현재 문제 번호 [변수, 함수]
const [showScore, setShowScore] = useState(false); //결과 보여줄까?
const [score_c, setScore_cool] = useState(0); //쿨톤 점수 -> 웜,쿨 리스트에서 사용
const [score_w, setScore_warm] = useState(0); //웜톤 점수 -> 웜,쿨 리스트에서 사용
const [score, setPersonal] = useState(""); //퍼스널컬러 결과
const handleAnswerOptionClick = (isCorrect) => {
const handleAnswerOptionClick = (isCorrect) => { //main 함수 1_웜쿨 검사
if (isCorrect) {
setScore_cool(score_c + 1); //c,c,w,w
}
else{
setScore_warm(score_w + 1);
setScore_cool(score_c + 1);
console.log('c' + score_c);
}
else{
setScore_warm(score_w + 1);
console.log('w' + score_w);
} ///웜,쿨 if문으로 점수 올리기
const nextQuestion = currentQuestion + 1;
if (nextQuestion < questions.length) {
setCurrentQuestion(nextQuestion); //0,0 -> 0,1 -> 1,2 -> 2,3
} else if(nextQuestion === questions.length){
if(score_c>score_w){
setPersonal('cool');
}
else if(score_c<score_w){
setPersonal('warm');
}
else{
setPersonal('restart');
}
isTrue = 1;
setCurrentQuestion(nextQuestion);
}
if(isTrue===1)
{
setShowScore(true);
else{
setShowScore(true); //questions 끝나면 점수 보여줄까? true -> className='score-section'
}
};
}; //함수1 끝.
const handlePersonalScore = (score_c,score_w) =>{ //함수2_웜,쿨 점수로 결과 구하기
if(score_c>score_w){
setPersonal('cool');
}
else if(score_c<score_w){
setPersonal('warm');
}
else{
setPersonal('restart');
}
}; //함수2 끝.
return (
<div className='app'>
{showScore ? (
{showScore ? (
<span className='score-section'>
You scored {currentQuestion}{questions.length}{score} out of {questions.length}
You scored {score} out of {questions.length}
<button onClick={() => handlePersonalScore(score_c,score_w)}>result</button>
{score === "cool" ? <button onClick={ () => {history.push("/test2")}}>next</button>
: <button onClick={ () => {history.push("/test3")}}>next</button>}
</span>
) : (
<>
......
import React, { useState } from 'react'; //리액트 불러오기
import console from 'react-console'; //리액트 콘솔_크롬으로 실행
import './test.css';//test.css 불러오기
const Test2 = ( { history } ) =>
{
const questions_cool = [
{
questionText: '머리카락 색이 검정에 가깝다',
answerOptions: [
{ answerText: '예', isCorrect: true },
{ answerText: '아니오', isCorrect: false }
],
},
{
questionText: '피부에 붉은 기가 많다',
answerOptions: [
{ answerText: '예', isCorrect: true },
{ answerText: '아니오', isCorrect: false }
],
},
{
questionText: '손목 혈관 색이 초록색이다',
answerOptions: [
{ answerText: '예', isCorrect: false },
{ answerText: '아니오', isCorrect: true }
],
},
{
questionText: '햇볕에 장시간 있으면 피부가 붉어진다',
answerOptions: [
{ answerText: '예', isCorrect: true },
{ answerText: '아니오', isCorrect: false }
],
},
]; //여름쿨톤, 겨울쿨톤 파악
const [currentQuestion_c, setCurrentQuestion] = useState(0); //현재 문제 번호 [변수, 함수]
const [showScore_c, setShowScore] = useState(false); //결과 보여줄까?
const [score_c_s, setScore_cool_summer] = useState(0);
const [score_c_w, setScore_cool_winter] = useState(0);
const [score, setPersonal] = useState(""); //퍼스널컬러 결과
const handleAnswerOptionClick = (isCorrect) => {
if (isCorrect) {
setScore_cool_summer(score_c_s + 1);
}
else{
setScore_cool_winter(score_c_w + 1);
}
const nextQuestion = currentQuestion_c + 1;
if (nextQuestion < questions_cool.length) {
setCurrentQuestion(nextQuestion);
}
else{
setShowScore(true); //questions 끝나면 점수 보여줄까? true -> className='score-section'
}
}; //함수1 끝.
const handlePersonalScore_cool = (score_c_s,score_c_w) =>{ //함수3_여쿨, 겨쿨 점수로 결과 구하기
if(score_c_s>score_c_w){
setPersonal('summer cool');
}
else if(score_c_s<score_c_w){
setPersonal('winter cool');
}
else{
setPersonal('restart');
}
}; //함수3 끝.
return (
<div className='app'>
{showScore_c ? (
<span className='score-section'>
You scored {score} out of {questions_cool.length}
<button onClick={() => handlePersonalScore_cool(score_c_s,score_c_w)}>result</button>
{score === "cool" ? <button onClick={ () => {history.push("/test2")}}>next</button>
: <button onClick={ () => {history.push("/test3")}}>next</button>}
</span>
) : (
<>
<div className='question-section'>
<div className='question-count'>
<span>Question {currentQuestion_c + 1}</span>/{questions_cool.length}
</div>
<div className='question-text'>{questions_cool[currentQuestion_c].questionText}</div>
</div>
<div className='answer-section'>
{questions_cool[currentQuestion_c].answerOptions.map((answerOption) => (
<button onClick={() => handleAnswerOptionClick(answerOption.isCorrect)}>{answerOption.answerText}</button>
))}
</div>
</>
)}
</div>
);
}
export default Test2;
\ No newline at end of file
import React, { useState } from 'react'; //리액트 불러오기
import console from 'react-console'; //리액트 콘솔_크롬으로 실행
import './test.css';//test.css 불러오기
const Test3 = ( { history } ) =>
{
const questions_warm = [
{
questionText: '머리카락 색이 검정에 가깝다',
answerOptions: [
{ answerText: '예', isCorrect: true },
{ answerText: '아니오', isCorrect: false }
],
},
{
questionText: '피부에 붉은 기가 많다',
answerOptions: [
{ answerText: '예', isCorrect: true },
{ answerText: '아니오', isCorrect: false }
],
},
{
questionText: '손목 혈관 색이 초록색이다',
answerOptions: [
{ answerText: '예', isCorrect: false },
{ answerText: '아니오', isCorrect: true }
],
},
{
questionText: '햇볕에 장시간 있으면 피부가 붉어진다',
answerOptions: [
{ answerText: '예', isCorrect: true },
{ answerText: '아니오', isCorrect: false }
],
},
]; //봄웜톤, 가을웜톤 파악
const [currentQuestion_w, setCurrentQuestion] = useState(0); //현재 문제 번호 [변수, 함수]
const [showScore_w, setShowScore] = useState(false); //결과 보여줄까?
const [score_w_s, setScore_warm_spring] = useState(0);
const [score_w_a, setScore_warm_autumn] = useState(0);
const [score, setPersonal] = useState(""); //퍼스널컬러 결과
const handleAnswerOptionClick = (isCorrect) => { //main 함수 1_웜쿨 검사
if (isCorrect) {
setScore_warm_spring(score_w_s+1);
}
else{
setScore_warm_autumn(score_w_a+1);
} ///웜,쿨 if문으로 점수 올리기
const nextQuestion = currentQuestion_w + 1;
if (nextQuestion < questions_warm.length) {
setCurrentQuestion(nextQuestion);
}
else{
setShowScore(true); //questions 끝나면 점수 보여줄까? true -> className='score-section'
}
}; //함수1 끝.
const handlePersonalScore_warm = (score_w_s,score_w_a) =>{ //함수3_여쿨, 겨쿨 점수로 결과 구하기
if(score_w_s>score_w_a){
setPersonal('spring warm');
}
else if(score_w_s<score_w_a){
setPersonal('autumn warm');
}
else{
setPersonal('restart');
}
}; //함수3 끝.
return (
<div className='app'>
{showScore_w ? (
<span className='score-section'>
You scored {score} out of {questions_warm.length}
<button onClick={() => handlePersonalScore_warm(score_w_s,score_w_a)}>result</button>
{score === "spring warm" ? <ImageBackground source={require("./season/spring.jpg")} style={{width:"100%",height:"100%"}}>
</ImageBackground>
: <button onClick={ () => {history.push("/test3")}}>next</button>}
</span>
) : (
<>
<div className='question-section'>
<div className='question-count'>
<span>Question {currentQuestion_w + 1}</span>/{questions_warm.length}
</div>
<div className='question-text'>{questions_warm[currentQuestion_w].questionText}</div>
</div>
<div className='answer-section'>
{questions_warm[currentQuestion_w].answerOptions.map((answerOption) => (
<button onClick={() => handleAnswerOptionClick(answerOption.isCorrect)}>{answerOption.answerText}</button>
))}
</div>
</>
)}
</div>
);
}
export default Test3;
\ No newline at end of file