diff --git a/Final Report/Final MajorProjectReport.lyx b/Final Report/Final MajorProjectReport.lyx new file mode 100644 index 0000000..de3cf68 --- /dev/null +++ b/Final Report/Final MajorProjectReport.lyx @@ -0,0 +1,1570 @@ +#LyX 2.2 created this file. For more info see http://www.lyx.org/ +\lyxformat 508 +\begin_document +\begin_header +\save_transient_properties true +\origin unavailable +\textclass article +\use_default_options true +\maintain_unincluded_children false +\language english +\language_package default +\inputencoding auto +\fontencoding global +\font_roman "default" "default" +\font_sans "default" "default" +\font_typewriter "default" "default" +\font_math "auto" "auto" +\font_default_family default +\use_non_tex_fonts false +\font_sc false +\font_osf false +\font_sf_scale 100 100 +\font_tt_scale 100 100 +\graphics default +\default_output_format default +\output_sync 0 +\bibtex_command default +\index_command default +\float_placement H +\paperfontsize default +\spacing double +\use_hyperref false +\papersize letterpaper +\use_geometry true +\use_package amsmath 1 +\use_package amssymb 1 +\use_package cancel 1 +\use_package esint 1 +\use_package mathdots 1 +\use_package mathtools 1 +\use_package mhchem 1 +\use_package stackrel 1 +\use_package stmaryrd 1 +\use_package undertilde 1 +\cite_engine basic +\cite_engine_type default +\biblio_style plain +\use_bibtopic false +\use_indices false +\paperorientation portrait +\suppress_date true +\justification true +\use_refstyle 1 +\index Index +\shortcut idx +\color #008000 +\end_index +\leftmargin 3.5cm +\topmargin 2.5cm +\rightmargin 1.25cm +\bottommargin 1.25cm +\secnumdepth 3 +\tocdepth 3 +\paragraph_separation indent +\paragraph_indentation default +\quotes_language english +\papercolumns 1 +\papersides 1 +\paperpagestyle default +\tracking_changes false +\output_changes false +\html_math_output 0 +\html_css_as_file 0 +\html_be_strict false +\end_header + +\begin_body + +\begin_layout Title + +\series bold +PLANT RECOMMENDATION FOR BIO-FUEL +\end_layout + +\begin_layout Author + +\series bold +MAJOR PROJECT REPORT +\end_layout + +\begin_layout Standard +\align center +SUBMITTED IN PARTIAL FULFILMENT OF THE REQUIREMENTS FOR +\end_layout + +\begin_layout Standard +\align center +THE AWARD OF THE DEGREE OF +\end_layout + +\begin_layout Standard +\align center + +\series bold +BACHELOR OF TECHNOLOGY +\end_layout + +\begin_layout Standard +\paragraph_spacing double +\align center +Information Technology +\end_layout + +\begin_layout Standard +\align center +\begin_inset Graphics + filename log.jpeg + lyxscale 30 + scale 20 + +\end_inset + + +\end_layout + +\begin_layout Standard +\align center + +\family typewriter +\shape smallcaps +\uwave on +\color red +note section-A students will type prof. + ranjodh kaur and section-B students will type prof. + harjot kaur +\end_layout + +\begin_layout Standard +\align center +\begin_inset Tabular + + + + + + + + + + + + + + + +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout +Submitted By: +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout +Submitted To: +\end_layout + +\end_inset + + + + +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout +Vijay Pratap Singh (1610776) +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout +Prof. + Ranjodh Kaur +\end_layout + +\end_inset + + + + +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout +Muskan (1507945) +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout +Assistant Professor +\end_layout + +\end_inset + + + + +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout +Major Project Coordinator +\end_layout + +\end_inset + + + + +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout + +\end_layout + +\end_inset + + + + +\end_inset + + +\end_layout + +\begin_layout Standard +\align center + +\series bold +Department of Information Technology +\end_layout + +\begin_layout Standard +\align center + +\series bold +Guru Nanak Dev Engineering College, +\end_layout + +\begin_layout Standard +\align center + +\series bold +Ludhiana-141006 +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +thispagestyle{empty} +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Newpage newpage +\end_inset + + +\end_layout + +\begin_layout Section* + +\size normal +\emph on +\color red +(Sample) +\end_layout + +\begin_layout Abstract +Packet Filtering firewalls can use a database of rules to decide which packets + will be allowed to move in and out and from one network onto another. + However with the increase in size of rule list, it’s very hard to manage + and validate the rules, which can also increase the cost of rule lookup + and that may add significantly to latency. + Packet filtering is the one of the major contemporary firewall design technique +s. + Implementation of such packet filter using Binary Decision Diagram (BDD) + gives more advantages in terms of memory usage and look up time. + In the case of the list-based packet filter firewall where rules are checked + one by one for each incoming packet, the time taken to decide on a packet + is proportional to the number of rules. + The performance is improved with rule promotion but that is a slow and + static kind of firewall implementation. + In this work a BDD-based approach is presented which gives much better + result in terms of number of comparisons or accesses the rule list make. + This work presents the study, design and implementation of a packet filter + firewall using binary decision diagram which provides faster processing + of packets while maintaining the integrity of the original security policy. + Results on large number of packets show that for most-accept packets, and + for most- reject packets there is manifold reduction in such comparisons + when BDD-based approach is used over list-based with promotion approach. +\end_layout + +\begin_layout Abstract +The overall performance of a firewall is crucial in enforcing and administrating + security, especially when the network is under attack. + The continuous growth of the Internet, coupled with the increasing sophisticati +on of the attacks, is placing stringent demands on firewall performance. + In this work, a traffic-aware optimization framework is described to improve + the operational cost of firewalls. + Based on this framework a set of tools are designed that inspect and analyze + both multidimensional firewall rules and traffic logs and construct the + optimal equivalent firewall rules based on the observed traffic characteristics. + The current work is the first to use traffic characteristics in firewall + optimization. + To evaluate the performance of current approach, a large set of firewall + rules and traffic logs from a local LAN or at tens of enterprise networks + managed by a Tier-1 service provider are evaluated. + The evaluated results find these approaches very effective. + In particular, current work has achieved more than 10 fold performance + improvement by using the proposed traffic-aware firewall optimization. +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +pagenumbering{roman} +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Newpage newpage +\end_inset + + +\end_layout + +\begin_layout Standard +\align center + +\series bold +ACKNOWLEDGEMENT +\end_layout + +\begin_layout Paragraph +I/WE are highly grateful to the +\series bold +Dr. + Sehijpal Singh +\series default +, Principal, Guru Nanak Dev Engineering College (GNDEC), Ludhiana, for providing + this opportunity to carry out the major project work at _____. + +\end_layout + +\begin_layout Paragraph +The constant guidance and encouragement received from Dr. + Kiran Jyoti, H.O.D., IT Department, GNDEC Ludhiana has been of great help + in carrying out the project work and is acknowledged with reverential thanks. + +\end_layout + +\begin_layout Paragraph +I/WE would like to express a deep sense of gratitude and thanks profusely + to +\series bold +Project Guide Name +\series default +, without his/her wise counsel and able guidance, it would have been impossible + to complete the project in this manner. + +\end_layout + +\begin_layout Paragraph +I/WE express gratitude to other faculty members of Information Technology + Department of GNDEC for their intellectual support throughout the course + of this work. + +\end_layout + +\begin_layout Paragraph +Finally, I/WE are indebted to all whosoever have contributed in this report + work. + +\end_layout + +\begin_layout Paragraph +\noindent +Kashish +\end_layout + +\begin_layout Paragraph +Gupta Muskan +\end_layout + +\begin_layout Address +\begin_inset Newpage newpage +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset FloatList figure + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Newpage newpage +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset FloatList table + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Newpage newpage +\end_inset + + +\end_layout + +\begin_layout Standard + +\series bold +Title page +\series default + +\end_layout + +\begin_layout Standard +Abstract ..................................................................................................................................................... + i +\end_layout + +\begin_layout Standard +Acknowledgement ..................................................................................................................................... + ii +\end_layout + +\begin_layout Standard +List of Figures ........................................................................................................................................... + iii +\end_layout + +\begin_layout Standard +List of Tables ............................................................................................................................................. + iv +\end_layout + +\begin_layout Standard +Table of Contents ....................................................................................................................................... + v +\end_layout + +\begin_layout Standard +\begin_inset CommandInset toc +LatexCommand tableofcontents + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Newpage newpage +\end_inset + + +\end_layout + +\begin_layout Section +Introduction +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +rule[1ex]{ +\backslash +textwidth}{.15pt} +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Subsection +Introduction to Project Page +\end_layout + +\begin_layout Subsection +Project Category (Internet based, Application or System Development, Research + based, Industry Automation, Network or System Administration) +\end_layout + +\begin_layout Subsection +Objectives +\end_layout + +\begin_layout Standard +Include 3-4 points of Objectives. +\end_layout + +\begin_layout Enumerate +First Objective. +\end_layout + +\begin_layout Enumerate +Second Objective. +\end_layout + +\begin_layout Enumerate +Third Objective. +\end_layout + +\begin_layout Subsection +Problem Formulation +\end_layout + +\begin_layout Subsection +Identification/Reorganization of Need +\end_layout + +\begin_layout Subsection +Existing System +\end_layout + +\begin_layout Subsection +Proposed System +\end_layout + +\begin_layout Subsection +Unique Features of the System +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +setcounter{page}{1} +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +pagenumbering{arabic} +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Newpage newpage +\end_inset + + +\end_layout + +\begin_layout Section +Requirement Analysis and System Specification +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +rule[1ex]{ +\backslash +textwidth}{.15pt} +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Subsection +Feasibility Study (Technical, Economical, Operational) +\end_layout + +\begin_layout Subsection +Software Requirement Specification Document which must include the following: + (Data Requirement, Functional Requirement, Performance Requirement, Dependabili +ty Requirement, Maintainability requirement, Security Requirement, Look + and feel requirement) +\end_layout + +\begin_layout Subsection +Validation +\end_layout + +\begin_layout Subsection +Expected hurdles +\end_layout + +\begin_layout Subsection +SDLC Model to be used +\end_layout + +\begin_layout Standard +\begin_inset Newpage newpage +\end_inset + + +\end_layout + +\begin_layout Section +System Design +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +rule[1ex]{ +\backslash +textwidth}{.15pt} +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Subsection +Design Approach (Function oriented or Object oriented) +\end_layout + +\begin_layout Subsection +Detail Design +\end_layout + +\begin_layout Subsection +System Design using various structured analysis and design tools such as: + DFD’s, Data Dictionary, Structured charts, Flowcharts or UML +\end_layout + +\begin_layout Subsection +User Interface Design +\end_layout + +\begin_layout Subsection +Database Design +\end_layout + +\begin_layout Subsubsection +ER Diagrams +\end_layout + +\begin_layout Subsubsection +Normalization +\end_layout + +\begin_layout Subsubsection +Database Manipulation +\end_layout + +\begin_layout Subsubsection +Database Connection Controls and Strings +\end_layout + +\begin_layout Subsection +Methodology +\end_layout + +\begin_layout Standard +It should not exceed 1 page. + Research type, unit, methods, tools of data collection / analysis. + Methodology will include the steps to be followed to achieve the objective + of the project during the project development. + See Figure +\begin_inset CommandInset ref +LatexCommand ref +reference "fig:Example-of-the" + +\end_inset + + it shows the bitnami installation first step. + +\end_layout + +\begin_layout Standard +\align center +\begin_inset Float figure +wide false +sideways false +status open + +\begin_layout Plain Layout +\align center +\begin_inset Graphics + filename /home/ranjodh/Desktop/Project Format/logo.jpeg + lyxscale 20 + scale 20 + +\end_inset + + +\begin_inset Caption Standard + +\begin_layout Plain Layout +\begin_inset CommandInset label +LatexCommand label +name "fig:Example-of-the" + +\end_inset + +Example of the Image +\end_layout + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Table +\begin_inset CommandInset ref +LatexCommand ref +reference "Table:1" + +\end_inset + + shows the Evaluation results. + +\end_layout + +\begin_layout Standard +\begin_inset Float table +wide false +sideways false +status open + +\begin_layout Plain Layout +\begin_inset Caption Standard + +\begin_layout Plain Layout +\begin_inset Argument 1 +status open + +\begin_layout Plain Layout +Evaluation results +\end_layout + +\end_inset + +Evaluation Results +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Plain Layout +\align center +\begin_inset Tabular + + + + + + + +\begin_inset Text + +\begin_layout Plain Layout +Sr. + No +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout +Data +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout +Value +\end_layout + +\end_inset + + + + +\begin_inset Text + +\begin_layout Plain Layout +2 +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout +Date +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout +20 +\end_layout + +\end_inset + + + + +\begin_inset Text + +\begin_layout Plain Layout +3 +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout +Year +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout +2020 +\end_layout + +\end_inset + + + + +\end_inset + + +\end_layout + +\begin_layout Plain Layout +\begin_inset CommandInset label +LatexCommand label +name "Table:1" + +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Newpage newpage +\end_inset + + +\end_layout + +\begin_layout Section +Implementation, Testing, and Maintenance +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +rule[1ex]{ +\backslash +textwidth}{.15pt} +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Subsection +Introduction to Languages, IDE’s, Tools and Technologies used for Implementation +\end_layout + +\begin_layout Subsection +Coding standards of Language used +\end_layout + +\begin_layout Subsection +Project Scheduling using various tools such as PERT, GANTT charts, Open + PROJ etc. +\end_layout + +\begin_layout Subsection +Testing Techniques and Test Plans +\end_layout + +\begin_layout Standard +\begin_inset Newpage newpage +\end_inset + + +\end_layout + +\begin_layout Section +Results and Discussions +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +rule[1ex]{ +\backslash +textwidth}{.15pt} +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Subsection +User Interface Representation (of Respective Project) +\end_layout + +\begin_layout Subsubsection +Brief Description of Various Modules of the system +\end_layout + +\begin_layout Subsection +Snapshots of system with brief detail of each +\end_layout + +\begin_layout Subsection +Back Ends Representation (Database to be used) +\end_layout + +\begin_layout Subsubsection +Snapshots of Database Tables with brief description +\end_layout + +\begin_layout Standard +\begin_inset Newpage newpage +\end_inset + + +\end_layout + +\begin_layout Section +Conclusion and Future Scope +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +rule[1ex]{ +\backslash +textwidth}{.15pt} +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Newpage newpage +\end_inset + + +\end_layout + +\begin_layout Section* +References/Bibliography +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +rule[1ex]{ +\backslash +textwidth}{.15pt} +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Note: It should be in IEEE Format +\end_layout + +\begin_layout Description +[1] M. + Shell. + (2007) IEEEtran webpage on CTAN. + [Online]. + Available: http://www.ctan.org/tex-archive/macros/latex/contrib/ IEEEtran/ +\end_layout + +\begin_layout Description +[2] Y. + Okada, K. + Dejima, and T. + Ohishi, “Analysis and comparison of PM synchronous motor and induction + motor type magnetic bearings,” IEEE Trans. + Ind. + Appl., vol. + 31, pp. + 1047–1053, Sep./Oct. + 1995. +\end_layout + +\begin_layout Description +[3] S. + Zhang, C. + Zhu, J. + K. + O. + Sin, and P. + K. + T. + Mok, “A novel ultrathin elevated channel low-temperature poly-Si TFT,” + IEEE Electron Device Lett., vol. + 20, pp. + 569–571, Nov. + 1999. +\end_layout + +\begin_layout Standard +\begin_inset Newpage newpage +\end_inset + + +\end_layout + +\end_body +\end_document diff --git a/Final Report/Minor project report (3).pdf b/Final Report/Minor project report (3).pdf new file mode 100644 index 0000000..cf1933e Binary files /dev/null and b/Final Report/Minor project report (3).pdf differ diff --git a/Final Report/absract (1).docx b/Final Report/absract (1).docx new file mode 100644 index 0000000..4437c7f Binary files /dev/null and b/Final Report/absract (1).docx differ diff --git a/Final Report/main (1).tex b/Final Report/main (1).tex new file mode 100644 index 0000000..278586b --- /dev/null +++ b/Final Report/main (1).tex @@ -0,0 +1,32 @@ +\documentclass[a4,18pt]{article} +\usepackage{graphicx} +\title{ Guru Nanak Dev Engineering College,Ludhiana\\ Department Of Information Technology\\Minor Project Synopsis\\Chatbot using , chatterbot python liabrary\\Batch 2018-22 \\\includegraphics[width=6cm]{GNE LOGO.jpg}\\Submitted By:-\\Jaideep Singh(1905422)\\Rohit Tandon(1905428)\\Sujeet Chaurasiya(1805099)\\} +\maketitle +\begin{document} +\pagenumbering{gobble} +\newpage +\begin{center} + \Large{\textbf{\underline{Table Of Contants}}} +\end{center} +\renewcommand{\baselinestretch}{1.9} +\Large\textbf{ +1. Introduction...................................................1\\ +2. Objectives......................................................2\\ +3. Feasibility Study.............................................3\\ +4. Methodology/Planning of work......................3\\ +5. Facilities required for proposed work..............4\\ +6. Reference.......................................................4} +\newpage +\pagenumbering{arabic} +\section{\underline{Introduction:-}}\large ChatterBot is a Python library that makes it easy to generate automated responses to a user’s input. ChatterBot uses a selection of machine learning algorithms to produce different types of responses. This makes it easy for developers to create chat bots and automate conversations with users.\par An important concept in public health research is that from time to time a new technology or approach to obtain the best possible data, or the application of a new service or tool, will make such an impact that it is then used in education and routinely used in practice for decades. Humans have for many centuries sought ways to automate with machines: in fact, the first humanoid-robot was invented by Arab inventor Al-Jazari, of the Turkish dynasty of Artukids, in 1206 AD. +\newpage +\section{\underline{Objective:-}}\textbf{1. }Chatbots are mainly used to provide customer support.\\ +\textbf{2. }It helps in catering a huge amount of target audience at the same time 24/7.\\\textbf{3. }If you are a company that’s functional all around the world, you get hands-on chatbot asap! Because, while you are asleep, your bot can entertain your customers anywhere in the world. +\\\textbf{4. }Chatbots are very intelligent. You train them once and they will communicate with your target audience in their language\\\textbf{5. }Chatbots are very intelligent. You train them once and they will communicate with your target audience in their language. +\newpage +\section{\underline{Feasibility Study:-}}The analysis is carried out by our in-house experts and is completely tailor-made. Through this analysis, for example, you will gain insight into the response times, peak times and opening times of your organisation and you will discover all the wonderful benefits of a chatbot. It’s also possible to utilize the number of webcare messages in order to determine the proportion of messages that a chatbot could pick up. +\section{\underline{Methodology/Planning Of Work:-}}As with any software product or software development tools, there are many avenues one can take to solve a problem or implement a solution. In this section we review several of the larger segment bot tools available that have been in use, but it should be noted that the bot development market is still developing and different toolsets can emerge. During the time of writing of this paper, several new chatbot developer tools began have begun to gain traction, including Oracle, Rulai and Nuance Communications.The authors utilized this analysis to decide on which chatbot development environment and toolset to create a sample chatbot. +\section{\underline{Facilities Required For Proposed Work:-}}chatterbot is a software based project and their is no need of any hardware.for the development of this project we have use python compiler software pycharm. +\section{\underline{Reference:-}}1. https://data-flair.training/blogs/python-chatbot-project/ \\ + 2. https://en.wikipedia.org/wiki/Chatbot \\ 3. https://www.digitaldoughnut.com/articles/2017/october/top-benefits-of-chatbots-for-your-business +\end{document} diff --git a/Final Report/typegoProjectReport.tex b/Final Report/typegoProjectReport.tex new file mode 100644 index 0000000..56e9367 --- /dev/null +++ b/Final Report/typegoProjectReport.tex @@ -0,0 +1,233 @@ +%% LyX 2.3.6.1 created this file. For more info, see http://www.lyx.org/. +%% Do not edit unless you really know what you are doing. +\documentclass[english]{article} +\usepackage[latin9]{inputenc} +\usepackage[letterpaper]{geometry} +\geometry{verbose,tmargin=2.5cm,bmargin=1.25cm,lmargin=3.5cm,rmargin=1.25cm} +\usepackage{float} +\usepackage{booktabs} +\usepackage{graphicx} +\usepackage{setspace} +\graphicspath{ {./images/} } +\doublespacing + +\makeatletter + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% LyX specific LaTeX commands. +%% Because html converters don't know tabularnewline +\providecommand{\tabularnewline}{\\} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Textclass specific LaTeX commands. +\newcommand{\lyxaddress}[1]{ + \par {\raggedright #1 + \vspace{1.4em} + \noindent\par} +} + +\@ifundefined{date}{}{\date{}} +\makeatother + +\usepackage{babel} +\begin{document} +\title{A PROJECT REPORT ON JARVIS: THE PERSONAL ASSISTANT} +\author{\textbf{MINOR PROJECT REPORT}} +\maketitle +\begin{center} +SUBMITTED IN PARTIAL FULFILMENT OF THE REQUIREMENTS FOR +\par\end{center} + +\begin{center} +THE AWARD OF THE DEGREE OF +\par\end{center} + +\begin{center} +\textbf{BACHELOR OF TECHNOLOGY } +\par\end{center} + +\begin{doublespace} +\begin{center} +Information Technology +\par\end{center} +\end{doublespace} + +\begin{center} +\includegraphics[bb=0bp 0bp 490bp 500bp,scale=0.2]{\string"/cygdrive/G/Minor-Project-main/Final Report/logo\string".eps} +\par\end{center} + +\begin{center} +\begin{tabular}{lllllllllll} + & & & Submitted By: & & & & & & & Submitted To:\tabularnewline + & & & Japesh(190) & & & & & & & Prof. Hanit Karwal\tabularnewline + & & & Daman(1805626) & & & & & & & Assistant Professor\tabularnewline + & & & Simple(190) & & & & & & & Minor Project Coordinator\tabularnewline + & & & & & & & & & & \tabularnewline +\end{tabular} +\par\end{center} + +\begin{center} +\textbf{Department of Information Technology} +\par\end{center} + +\begin{center} +\textbf{Guru Nanak Dev Engineering College,} +\par\end{center} + +\begin{center} +\textbf{Ludhiana-141006} +\par\end{center} + +\newpage{} +\begin{abstract} +The project aims to develop a Typing speed game .Type-go helps to improve the typing speed of a person. +It has been designed to provide a better typing experience with your friends . +Users can interact with the help of room. A private room id will be created for the interaction. +Type go help you type with your friend and help in being competitive. as long as you type it will give you Signal where you typed wrong and give you score when you finished. + +\end{abstract} +\newpage{} + +ACKNOWLEDGEMENT + +We had a great experience working on this project and we got to learn +a plethora of new skills through this project. However, it would not +have been possible without the kind support and help of many individuals. +We would like to extend our sincere thanks to all of them. We are +highly indebted to the teachers and especially Prof.Hanit Karwal for +their guidance and constant supervision as well as providing necessary +information regarding the project and also for their support in completing +the project. + +We would like to express our gratitude towards our parents and friends +for their kind cooperation and encouragement which help us in the +completion of the project. + +Gurwinder Singh + +Sehaj Chawla + +Raghav Kapoor + +\lyxaddress{\newpage} + +\textbf{Title page} + +Abstract i + +Acknowledgement ii + +List of Figures iii + +List of Tables iv + +Table of Contents v + +\tableofcontents{} +\newpage +\section{Introduction } + +\subsection{Introduction to Project } + +\paragraph{ +The project aims to develop a Typing speed game .Type-go helps to improve the typing speed of a person +It has been designed to provide a better typing experience with your friends . +Users can interact with the help of room. A private room id will be created for the interaction. +Type go help you type with your friend and help in being competitive. as long as you type it will give you Signal where you typed wrong and give you score when you finished.} +\subsection{Project Category (Internet based, Application or System Development, +Research based, Industry Automation, Network or System Administration) } +\subsection{Objectives} + +\begin{item} +This software aims to achieve these objectives: - + +\end{item} +Help the learners to enhance their learning process by developing their typing skills. +\begin{itemize} +\item Develop typing speed +\end{itemize} +\begin{itemize} +\item Recognize position of the keys to use all fingers +\item Identify the location of different keys and different letters +\item Identify the location of different keys and different letters +\item To practice typing with all fingers + +\end{itemize} +\subsection{Unique Features of the System} +\begin{left} + + +\begin{itemize} +\end{itemize} +\begin{itemize} +\item Provide information and instructions for using the program +\item Display scores +\item Double your typing speed +\item Save valuable work time +\item Focus on your time and ideas +\item be confident with computers +\end{itemize} +\end{left} + + + + +\section{System Design} + +\subsection{Design Approach (Function oriented or Object oriented)} +\begin{left} +\includegraphics[]{} +\end{left} +\subsection{Detail Design} + + +\subsection{User Interface Design} + +\subsection{Database Design} + +\subsection{Methodology} + +\section{Implementation, Testing, and Maintenance} + +\subsection{Introduction to Languages, IDE\textquoteright s, Tools and Technologies +used for Implementation} + +\subsection{Coding standards of Language used} + + +\subsection{Testing Techniques and Test Plans} + +\section{Results and Discussions} + +\subsection{User Interface Representation (of Respective Project)} + + + +\subsection{Snapshots of system with brief detail of each} + +\subsection{Back Ends Representation } + + +\section{Conclusion and Future Scope} + +Through this voice assistant, we have automated various services using +a single line command. It eases most of the tasks of the user like +searching the web, retrieving weather forecast details, vocabulary +help and medical related queries. We aim to make this project a complete +server assistant and make it smart enough to act as a replacement +for a general server administration. The future plans include integrating +Jarvis with mobile using React Native to provide a synchronised experience +between the two connected devices. Further, in the long run, Jarvis +is planned to feature auto deployment supporting elastic beanstalk, +backup files, and all operations which a general Server Administrator +does. The functionality would be seamless enough to replace the Server +Administrator with Jarvis. + +\section*{References/Bibliography } + +(IEEE Format) + +\section*{Appendix A: Development Environment} + +Note: The report of respective project should be as per prescribed +format and in the same order though if some of the points are not +applicable in regard with the concerned project, they might be omitted.\newpage +\end{document} diff --git a/README.md b/README.md index 040dfec..21e0fe7 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,18 @@ +<<<<<<< HEAD +# Minor-Project +Upload your synopsis / Final Report in the corresponding folder. + +## Instructions +1. Synopsis and Final Report should be in LaTex format (Download LyX word processor [https://www.lyx.org/Download](https://www.lyx.org/Download) and LaTex [https://miktex.org/download](https://miktex.org/download), LyX is used in the sample). +1. Guidelines for the Synopsis and Final Report are given in the folders separately. +1. Sample format of the Report both pdf and .lyx format is given. +1. .lyx is in Zip folder download it; and compare both pdf and .Lyx are same. + +Now you can edit the Report. + + + +======= # Minor-Project Upload your synopsis / Final Report in the corresponding folder. @@ -11,3 +26,4 @@ Now you can edit the Report. +>>>>>>> c9c4ac6 (minor project) diff --git a/Synopsis/Section- A/Sample Major_Minor_Synopsis_format.pdf b/Synopsis/Section- A/Sample Major_Minor_Synopsis_format.pdf new file mode 100644 index 0000000..ee40d25 Binary files /dev/null and b/Synopsis/Section- A/Sample Major_Minor_Synopsis_format.pdf differ diff --git a/Type-Go/.gitignore b/Type-Go/.gitignore new file mode 100644 index 0000000..b512c09 --- /dev/null +++ b/Type-Go/.gitignore @@ -0,0 +1 @@ +node_modules \ No newline at end of file diff --git a/Type-Go/Procfile b/Type-Go/Procfile new file mode 100644 index 0000000..207d22f --- /dev/null +++ b/Type-Go/Procfile @@ -0,0 +1 @@ +web: node app.js \ No newline at end of file diff --git a/Type-Go/app.js b/Type-Go/app.js new file mode 100644 index 0000000..c303eb5 --- /dev/null +++ b/Type-Go/app.js @@ -0,0 +1,133 @@ +const express = require('express'); +const app = express(); +const socket = require('socket.io'); +// const mongoose = require('mongoose'); +const path = require('path'); +// const { render } = require('ejs'); +// const Game = require('./models/game'); +// const quotableAPI = require('./quotableAPI'); +const port = process.env.PORT || 4000 ; + +app.use(express.urlencoded()) + +// mongoose.connect('mongodb://localhost:27017/typego',{useNewUrlParser : true, useUnifiedTopology : true}, ()=>{ console.log('successfully connected')}) + +app.use(express.static(path.join(__dirname, 'public'))); + +// set view engine +app.set('view engine', 'ejs') + +// template engin route +app.get('/', (req, res) => { + res.render('home'); +}) + +app.post('/creategame', (req, res) => { + // console.log(req.body); + res.render('creategame'); +}) + +app.post('/joingame', (req, res) => { + // console.log(req.body); + res.render('joingame'); +}) + +app.get('/about', (req, res) => { + res.render('about'); +}) + + +//server setup +const server = app.listen(port, () => { + console.log(`Example app listening at http://localhost:${port}`) +}) + + +//socket io setup +const io = socket(server); + +var rooms = []; +var adminSocketId = []; + +io.on('connection',(socket)=>{ + + socket.on('createRoom',(roomCode)=>{ + let index = rooms.indexOf(roomCode.roomCode); + if (index > -1) { + socket.emit('createRomeError'); + }else{ + rooms.push(roomCode.roomCode); + adminSocketId.push(socket.id); + socket.join(roomCode.roomCode); + // console.log('created',roomCode.roomCode, 'total rooms',rooms); + } + }) + + socket.on('joinRoom',(roomCode)=>{ + if(rooms.includes(roomCode.roomCode)){ + socket.join(roomCode.roomCode); + // console.log('room joined having id:',roomCode.roomCode); + + let joinedUserId = socket.id; + //for admin + io.sockets.in(roomCode.roomCode).emit('joinedRoom',joinedUserId,roomCode); + //for joined user + socket.broadcast.to(roomCode.roomCode).emit('newlyJoinedUser', roomCode, joinedUserId); + // socket.to(joinedUserId).emit('newlyJoinedUser', roomCode, joinedUserId); + } + + else{ + // console.log('Room not exits'); + socket.emit('joinError', roomCode.roomCode); + } + }) + + socket.on('thenIamSendingMyDataToJoinedUser',(recived)=>{ + let createrId = socket.id; + socket.broadcast.to(recived.idOfJoinedUser).emit('okISendedMyDataToJoinedUser',recived,createrId); + }) + + socket.on('sendMyDataToOnlyNewlyJoinedUser',(dataFromJoinUser)=>{ + let joinedUserId = socket.id; + socket.broadcast.to(dataFromJoinUser.toUser).emit('okISendMyDataToNewlyJoinedUser',dataFromJoinUser,joinedUserId); + // socket.to(joinedUserId).emit('okISendMyDataToNewlyJoinedUser',dataFromJoinUser,joinedUserId); + }) + + socket.on('startGame',(startCredentials)=>{ + // console.log(startCredentials.roomCode); + io.sockets.in(startCredentials.roomCode).emit('startGame',startCredentials); + // io.sockets.emit('startGame',startCredentials); + }) + + socket.on('updateProgressBar', (myData)=>{ + socket.broadcast.to(myData.roomCode).emit('updatingBar',myData.calculateWidthOfProgressBar,socket.id); + }) + + socket.on('result',(myData)=>{ + io.sockets.in(myData.roomCode).emit('result',myData); + }) + + socket.on('disconnecting', () => { + // console.log("leaved ",Array.from(socket.rooms)[1]); + socket.broadcast.to(Array.from(socket.rooms)[1]).emit('left',socket.id); + + if(adminSocketId.includes(socket.id)){ + socket.broadcast.to(Array.from(socket.rooms)[1]).emit('Adminleft'); + let roomName = Array.from(socket.rooms)[1]; + let index = rooms.indexOf(roomName); + if (index > -1) { + // console.log('rooms before delete',rooms); + rooms.splice(index, 1); + // console.log('room deleted, rooms after detele',rooms); + } + + let adminIDIndex = adminSocketId.indexOf(socket.id); + if (adminIDIndex > -1) { + // console.log('adimn array before delete',adminSocketId); + adminSocketId.splice(adminIDIndex, 1); + // console.log('adimn array after delete',adminSocketId); + } + } + }); + +}); \ No newline at end of file diff --git a/Type-Go/models/game.js b/Type-Go/models/game.js new file mode 100644 index 0000000..4fb7d6c --- /dev/null +++ b/Type-Go/models/game.js @@ -0,0 +1,20 @@ +const mongoose = require('mongoose'); + +const playerSchema = new mongoose.Schema({ + currentWordIndex : { type : Number, default : 0}, + socketID : {type :String}, + isPartyLeader : {type : Boolean, default : false}, + WPM : {type : Number, default : -1}, + nickName : {type : String} +}); + +const gameSchema = new mongoose.Schema({ + words : [{type : String}], + isOpen : {type : Boolean, default : true}, + isOver : {type : Boolean, default : false}, + players : [playerSchema], + startTime : {type : Number} + +}); + +module.exports = mongoose.model('game',gameSchema); \ No newline at end of file diff --git a/Type-Go/package-lock.json b/Type-Go/package-lock.json new file mode 100644 index 0000000..7db3e99 --- /dev/null +++ b/Type-Go/package-lock.json @@ -0,0 +1,1918 @@ +{ + "name": "typego", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true + }, + "@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, + "requires": { + "defer-to-connect": "^1.0.1" + } + }, + "@types/bson": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/bson/-/bson-4.0.3.tgz", + "integrity": "sha512-mVRvYnTOZJz3ccpxhr3wgxVmSeiYinW+zlzQz3SXWaJmD1DuL05Jeq7nKw3SnbKmbleW5qrLG5vdyWe/A9sXhw==", + "requires": { + "@types/node": "*" + } + }, + "@types/component-emitter": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.10.tgz", + "integrity": "sha512-bsjleuRKWmGqajMerkzox19aGbscQX5rmmvvXl3wlIp5gMG1HgkiwPxsN5p070fBDKTNSPgojVbuY1+HWMbFhg==" + }, + "@types/cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-y7mImlc/rNkvCRmg8gC3/lj87S7pTUIJ6QGjwHR9WQJcFs+ZMTOaoPrkdFA/YdbuqVEmEbb5RdhVxMkAcgOnpg==" + }, + "@types/cors": { + "version": "2.8.10", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.10.tgz", + "integrity": "sha512-C7srjHiVG3Ey1nR6d511dtDkCEjxuN9W1HWAEjGq8kpcwmNM6JJkpC0xvabM7BXTG2wDq8Eu33iH9aQKa7IvLQ==" + }, + "@types/mongodb": { + "version": "3.6.10", + "resolved": "https://registry.npmjs.org/@types/mongodb/-/mongodb-3.6.10.tgz", + "integrity": "sha512-BkwAHFiZSSWdTIqbUVGmgvIsiXXjqAketeK7Izy7oSs6G3N8Bn993tK9eq6QEovQDx6OQ2FGP2KWDDxBzdlJ6Q==", + "requires": { + "@types/bson": "*", + "@types/node": "*" + } + }, + "@types/node": { + "version": "14.14.35", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.35.tgz", + "integrity": "sha512-Lt+wj8NVPx0zUmUwumiVXapmaLUcAk3yPuHCFVXras9k5VT9TdhJqKqGVUQCD60OTMCl0qxJ57OiTL0Mic3Iag==" + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "ansi-align": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", + "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", + "dev": true, + "requires": { + "string-width": "^3.0.0" + }, + "dependencies": { + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + } + } + }, + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=" + }, + "axios": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", + "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", + "requires": { + "follow-redirects": "^1.10.0" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base64-arraybuffer": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", + "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=" + }, + "base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==" + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "bl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", + "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", + "requires": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "boxen": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", + "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", + "dev": true, + "requires": { + "ansi-align": "^3.0.0", + "camelcase": "^5.3.1", + "chalk": "^3.0.0", + "cli-boxes": "^2.2.0", + "string-width": "^4.1.0", + "term-size": "^2.1.0", + "type-fest": "^0.8.1", + "widest-line": "^3.1.0" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "bson": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.6.tgz", + "integrity": "sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg==" + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + }, + "cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true + } + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.3.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + } + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true + }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + } + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true + }, + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true + }, + "defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true + }, + "denque": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.0.tgz", + "integrity": "sha512-CYiCSgIF1p6EUByQPlGkKnP1M9g0ZV3qMIrqMqZqdwazygIA/YP2vrbcyl1h/WppKJTdl1F85cXIle+394iDAQ==" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "ejs": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.6.tgz", + "integrity": "sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw==", + "requires": { + "jake": "^10.6.1" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "engine.io": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-5.0.0.tgz", + "integrity": "sha512-BATIdDV3H1SrE9/u2BAotvsmjJg0t1P4+vGedImSs1lkFAtQdvk4Ev1y4LDiPF7BPWgXWEG+NDY+nLvW3UrMWw==", + "requires": { + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~4.0.0", + "ws": "~7.4.2" + }, + "dependencies": { + "cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "engine.io-parser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-4.0.2.tgz", + "integrity": "sha512-sHfEQv6nmtJrq6TKuIz5kyEKH/qSdK56H/A+7DnAuUPWosnIZAS2NHNcPLmyjtY3cGS/MqJdZbUjW97JU72iYg==", + "requires": { + "base64-arraybuffer": "0.1.4" + } + }, + "escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "filelist": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.2.tgz", + "integrity": "sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ==", + "requires": { + "minimatch": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "follow-redirects": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.3.tgz", + "integrity": "sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA==" + }, + "foreachasync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/foreachasync/-/foreachasync-3.0.0.tgz", + "integrity": "sha1-VQKYfchxS+M5IJfzLgBxyd7gfPY=" + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "global-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", + "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", + "dev": true, + "requires": { + "ini": "1.3.7" + } + }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true + }, + "handlebars": { + "version": "4.7.6", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.6.tgz", + "integrity": "sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA==", + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "dev": true + }, + "hbs": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/hbs/-/hbs-4.1.1.tgz", + "integrity": "sha512-6QsbB4RwbpL4cb4DNyjEEPF+suwp+3yZqFVlhILEn92ScC0U4cDCR+FDX53jkfKJPhutcqhAvs+rOLZw5sQrDA==", + "requires": { + "handlebars": "4.7.6", + "walk": "2.3.14" + } + }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", + "dev": true + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ini": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", + "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", + "dev": true + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-installed-globally": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", + "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", + "dev": true, + "requires": { + "global-dirs": "^2.0.1", + "is-path-inside": "^3.0.1" + } + }, + "is-npm": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", + "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true + }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "jake": { + "version": "10.8.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.2.tgz", + "integrity": "sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A==", + "requires": { + "async": "0.9.x", + "chalk": "^2.4.2", + "filelist": "^1.0.1", + "minimatch": "^3.0.4" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + } + } + }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true + }, + "kareem": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.2.tgz", + "integrity": "sha512-STHz9P7X2L4Kwn72fA4rGyqyXdmrMSdxqHx9IXon/FXluXieaFA6KJ2upcHAHxQPQ0LeM/OjLrhFxifHewOALQ==" + }, + "keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, + "requires": { + "json-buffer": "3.0.0" + } + }, + "latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dev": true, + "requires": { + "package-json": "^6.3.0" + } + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", + "optional": true + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz", + "integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==" + }, + "mime-types": { + "version": "2.1.29", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz", + "integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==", + "requires": { + "mime-db": "1.46.0" + } + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "mongodb": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.5.tgz", + "integrity": "sha512-mQlYKw1iGbvJJejcPuyTaytq0xxlYbIoVDm2FODR+OHxyEiMR021vc32bTvamgBjCswsD54XIRwhg3yBaWqJjg==", + "requires": { + "bl": "^2.2.1", + "bson": "^1.1.4", + "denque": "^1.4.1", + "require_optional": "^1.0.1", + "safe-buffer": "^5.1.2", + "saslprep": "^1.0.0" + } + }, + "mongoose": { + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.12.1.tgz", + "integrity": "sha512-g/oIEvQQrK1XcICS/PfzU1Gu1s6Uw1rgJP7/SfC3Ru6pTLa1dH2Lb+iJipNWqChbrykE78j/wwBVSsbyCZRl5Q==", + "requires": { + "@types/mongodb": "^3.5.27", + "bson": "^1.1.4", + "kareem": "2.3.2", + "mongodb": "3.6.5", + "mongoose-legacy-pluralize": "1.0.2", + "mpath": "0.8.3", + "mquery": "3.2.4", + "ms": "2.1.2", + "regexp-clone": "1.0.0", + "safe-buffer": "5.2.1", + "sift": "7.0.1", + "sliced": "1.0.1" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } + } + }, + "mongoose-legacy-pluralize": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz", + "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==" + }, + "mpath": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.3.tgz", + "integrity": "sha512-eb9rRvhDltXVNL6Fxd2zM9D4vKBxjVVQNLNijlj7uoXUy19zNDsIif5zR+pWmPCWNKwAtqyo4JveQm4nfD5+eA==" + }, + "mquery": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.4.tgz", + "integrity": "sha512-uOLpp7iRX0BV1Uu6YpsqJ5b42LwYnmu0WeF/f8qgD/On3g0XDaQM6pfn0m6UxO6SM8DioZ9Bk6xxbWIGHm2zHg==", + "requires": { + "bluebird": "3.5.1", + "debug": "3.1.0", + "regexp-clone": "^1.0.0", + "safe-buffer": "5.1.2", + "sliced": "1.0.1" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "nodemon": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.7.tgz", + "integrity": "sha512-XHzK69Awgnec9UzHr1kc8EomQh4sjTQ8oRf8TsGrSmHDx9/UmiGG9E/mM3BuTfNeFwdNBvrqQq/RHL0xIeyFOA==", + "dev": true, + "requires": { + "chokidar": "^3.2.2", + "debug": "^3.2.6", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.0.4", + "pstree.remy": "^1.1.7", + "semver": "^5.7.1", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.3", + "update-notifier": "^4.1.0" + } + }, + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-url": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", + "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true + }, + "package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dev": true, + "requires": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + } + }, + "pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "dev": true, + "requires": { + "escape-goat": "^2.0.0" + } + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "regexp-clone": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz", + "integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw==" + }, + "registry-auth-token": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "dev": true, + "requires": { + "rc": "^1.2.8" + } + }, + "registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dev": true, + "requires": { + "rc": "^1.2.8" + } + }, + "require_optional": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", + "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", + "requires": { + "resolve-from": "^2.0.0", + "semver": "^5.1.0" + } + }, + "resolve-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", + "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" + }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "requires": { + "lowercase-keys": "^1.0.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "saslprep": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", + "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", + "optional": true, + "requires": { + "sparse-bitfield": "^3.0.3" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dev": true, + "requires": { + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "sift": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/sift/-/sift-7.0.1.tgz", + "integrity": "sha512-oqD7PMJ+uO6jV9EQCl0LrRw1OwsiPsiFQR5AR30heR+4Dl7jBBbDLnNvWiak20tzZlSE1H7RB30SX/1j/YYT7g==" + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "sliced": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", + "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" + }, + "socket.io": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.0.0.tgz", + "integrity": "sha512-/c1riZMV/4yz7KEpaMhDQbwhJDIoO55whXaRKgyEBQrLU9zUHXo9rzeTMvTOqwL9mbKfHKdrXcMoCeQ/1YtMsg==", + "requires": { + "@types/cookie": "^0.4.0", + "@types/cors": "^2.8.8", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.1", + "engine.io": "~5.0.0", + "socket.io-adapter": "~2.2.0", + "socket.io-parser": "~4.0.3" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "socket.io-adapter": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.2.0.tgz", + "integrity": "sha512-rG49L+FwaVEwuAdeBRq49M97YI3ElVabJPzvHT9S6a2CWhDKnjSFasvwAwSYPRhQzfn4NtDIbCaGYgOCOU/rlg==" + }, + "socket.io-parser": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz", + "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==", + "requires": { + "@types/component-emitter": "^1.2.10", + "component-emitter": "~1.3.0", + "debug": "~4.3.1" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", + "optional": true, + "requires": { + "memory-pager": "^1.0.2" + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "term-size": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", + "dev": true + }, + "to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, + "touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "requires": { + "nopt": "~1.0.10" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "uglify-js": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.13.1.tgz", + "integrity": "sha512-EWhx3fHy3M9JbaeTnO+rEqzCe1wtyQClv6q3YWq0voOj4E+bMZBErVS1GAHPDiRGONYq34M1/d8KuQMgvi6Gjw==", + "optional": true + }, + "undefsafe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz", + "integrity": "sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==", + "dev": true, + "requires": { + "debug": "^2.2.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "requires": { + "crypto-random-string": "^2.0.0" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "update-notifier": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", + "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", + "dev": true, + "requires": { + "boxen": "^4.2.0", + "chalk": "^3.0.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.3.1", + "is-npm": "^4.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.0.0", + "pupa": "^2.0.1", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + } + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "requires": { + "prepend-http": "^2.0.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "walk": { + "version": "2.3.14", + "resolved": "https://registry.npmjs.org/walk/-/walk-2.3.14.tgz", + "integrity": "sha512-5skcWAUmySj6hkBdH6B6+3ddMjVQYH5Qy9QGbPmN8kVmLteXk+yVXg+yfk1nbX30EYakahLrr8iPcCxJQSCBeg==", + "requires": { + "foreachasync": "^3.0.0" + } + }, + "widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "requires": { + "string-width": "^4.0.0" + } + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "ws": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz", + "integrity": "sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw==" + }, + "xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true + } + } +} diff --git a/Type-Go/package.json b/Type-Go/package.json new file mode 100644 index 0000000..fb02254 --- /dev/null +++ b/Type-Go/package.json @@ -0,0 +1,20 @@ +{ + "name": "typego", + "version": "1.0.0", + "description": "", + "main": "app.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "start": "app.js" + }, + "author": "Gurwinder", + "license": "ISC", + "dependencies": { + "axios": "^0.21.1", + "ejs": "^3.1.6", + "express": "^4.17.1", + "hbs": "^4.1.1", + "mongoose": "^5.12.1", + "socket.io": "^4.0.0" + } +} diff --git a/Type-Go/public/css/multi.css b/Type-Go/public/css/multi.css new file mode 100644 index 0000000..88b5cb7 --- /dev/null +++ b/Type-Go/public/css/multi.css @@ -0,0 +1,172 @@ +*{ + /* border:1px solid black 1px!important; */ + box-sizing: border-box; + margin: 0px; + /* padding: 3px; */ +} + +.topMargin{ + margin-top: 10px; +} + +a { + display: flex; + align-items: center; + justify-content: center; +} + +main{ + min-height: 87vh; +} + +.container{ + display: flex; + width: 100%; + flex-direction: row; +} + +.gameDiv{ + height: auto; + margin: 10px; + width: 50%; + padding: 1%; +} + +.typeDiv{ + width: 50%; + padding: 1%; + margin: 10px; + +} + +.game{ + border-top: 1px solid black; + height: inherit + +} + + +.words { + padding: 38px; + margin-top: 21px; + font-size: larger; + user-select : none; +} + +.center{ + text-align: center; +} + +button { + font-weight: 600; + font-size: large; + width: 108px; + height: 35px; + border-radius: 6px; + border: none; + background-color: #484848; + color: wheat; + font-family: 'Trebuchet MS', 'Lucida Sans Unicode', 'Lucida Grande', 'Lucida Sans', Arial, sans-serif; +} + +button:hover{ + background-color: #2b2b2b; + cursor: pointer; +} +button:disabled{ + background-color: #cccccc; + color: #989898; + cursor: not-allowed; +} + +.btnDiv { + margin-top: 30px; +} + + +.shadow{ + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 16%), 0 2px 10px 0 rgb(0 0 0 / 12%); + border-radius: 20px; + background-color: whitesmoke; + +} + + +#timer{ + margin-top: 30px; +} + +.correct{ + color:#00bb00; +} + +.incorrect{ + color: red; + text-decoration: underline; +} + +#myText{ + width: 100%; + margin-top: 30px; + border-radius: 6px; + padding: 10px; + font-size: 1.3em; + resize: none; + height: 180px; + +} + +.red{ + color: red; +} + +.green{ + color: green; +} + +/* ranking div */ +.rankDiv{ + width: 70%; + margin: 30px auto; +} + + + +/* table css */ +#players { + /* font-family: Arial, Helvetica, sans-serif; */ + border-collapse: collapse; + width: 100%; + } + + #players td, #players th { + border: 1px solid #ddd; + padding: 8px; + } + + #players tr:nth-child(even){background-color: #f2f2f2;} + + #players tr:hover {background-color: #ddd;} + + #players th { + padding-top: 12px; + padding-bottom: 12px; + text-align: left; + background-color: #484848; + color: wheat; + } + +/* progress bars */ + + .myProgress { + width: 100%; + background-color: #ddd; + } + + .myBar { + width: 0%; + height: 30px; + background-color: #4CAF50; + transition: width 150ms; + } + diff --git a/Type-Go/public/css/phone.css b/Type-Go/public/css/phone.css new file mode 100644 index 0000000..10a367d --- /dev/null +++ b/Type-Go/public/css/phone.css @@ -0,0 +1,28 @@ + +.gameDiv { + height: auto; + margin: 10px; + width: 100%; + padding: 16px 10px; +} + +.typeDiv { + width: 100%; + padding: 16px 10px; + margin: 10px; +} + +.container { + display: flex; + width: 100%; + flex-direction: column; + padding: 8px; + justify-content: center; + align-items: center; +} + + +.rankDiv { + width: 97%; + margin: 30px auto; +} \ No newline at end of file diff --git a/Type-Go/public/css/temp.css b/Type-Go/public/css/temp.css new file mode 100644 index 0000000..ecd1dfb --- /dev/null +++ b/Type-Go/public/css/temp.css @@ -0,0 +1,16 @@ +nav { + background-color: #484848; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 16%), 0 2px 10px 0 rgb(0 0 0 / 12%); + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; +} + +.menuItem { + display: inline-block; + padding: 8px 17px; + text-decoration: none; + color: wheat; + font-weight: 1000; +} \ No newline at end of file diff --git a/Type-Go/public/css/template.css b/Type-Go/public/css/template.css new file mode 100644 index 0000000..c5033db --- /dev/null +++ b/Type-Go/public/css/template.css @@ -0,0 +1,64 @@ +*{ + font-family: 'Trebuchet MS', 'Lucida Sans Unicode', 'Lucida Grande', 'Lucida Sans', Arial, sans-serif; + margin:0px; + padding:0px; + /* border: 1px solid rgb(70, 66, 66); */ +} + +ul{ + display: flex; + list-style: none; + /* justify-content: center; */ + align-items: center; + +} + +dl, ol, ul { + margin-top: 0; + margin-bottom: 0rem; +} +.menuItem{ + display: flex; + padding: 13px 17px; + text-decoration: none; + color: wheat; + font-weight: 1000; +} + +nav{ + background-color: #484848; + box-shadow: 0 2px 5px 0 rgb(0 0 0 / 16%), 0 2px 10px 0 rgb(0 0 0 / 12%); + display: flex; + align-items: center; + justify-content: center; +} + +.menuItem:hover{ + color: rgb(238, 204, 141); + text-decoration: underline; +} + +.logo{ + margin: 0px; + height:25px; +} + +/* footer css */ +.footer{ + position: relative; + padding: 10px 10px 0px 10px; + bottom: 0; + width: 100%; + /* Height of the footer*/ + height: 40px; + background: grey; + +} +.footer p{ + color: wheat; +} + +a.disabled { + pointer-events: none; + color: #92856c; +} \ No newline at end of file diff --git a/Type-Go/public/images/favicon.ico b/Type-Go/public/images/favicon.ico new file mode 100644 index 0000000..defc975 Binary files /dev/null and b/Type-Go/public/images/favicon.ico differ diff --git a/Type-Go/public/images/logo.png b/Type-Go/public/images/logo.png new file mode 100644 index 0000000..4affaca Binary files /dev/null and b/Type-Go/public/images/logo.png differ diff --git a/Type-Go/public/js/create.js b/Type-Go/public/js/create.js new file mode 100644 index 0000000..7c99c69 --- /dev/null +++ b/Type-Go/public/js/create.js @@ -0,0 +1,292 @@ +// var socket = io.connect('http://localhost:4000'); +var socket = io.connect('https://type-go-multiplayer.herokuapp.com/'); + +const link = "https://api.quotable.io/random"; + +var pera = document.getElementById('pera'); +var myText = document.getElementById('myText'); +var startBtn = document.getElementById('startBtn'); +var timeLeftSpan = document.getElementById('timeLeftSpan'); +var textInSmallTag = document.getElementById('textInSmallTag'); +var timeLeft = 6; +var startInputTime = null; +var endinputTime = null; +var totalWords; +var peraAfterFillingQuote = null; +var hack = document.getElementById('hack'); +var calculateWidthOfProgressBar; + +getNextQuote(); + +document.getElementById('roomName').innerText = localStorage.getItem('roomName'); +document.getElementById('inGame').innerHTML += `

${JSON.parse(localStorage.getItem('nickName'))} (you)

+
+
+
`; + + +//emit event +socket.emit('createRoom',{ + roomCode : JSON.parse(localStorage.getItem('roomName')), + nickName : JSON.parse(localStorage.getItem('nickName')) +}) + +//lister createRomeError +socket.on('createRomeError',()=>{ + localStorage.setItem('roomCreatingError',JSON.stringify("This Room is choosen by someone else!")) + window.location.href = 'https://type-go-multiplayer.herokuapp.com/'; + // window.location.href = 'http://localhost:4000'; +}) + +startBtn.addEventListener('click', () => { + // console.log('clicked'); + // console.log(peraAfterFillingQuote); + if(peraAfterFillingQuote != undefined){ + socket.emit('startGame',{ + peraAfterFillingQuote : peraAfterFillingQuote, + totalWords : totalWords, + roomCode : JSON.parse(localStorage.getItem('roomName')), + nickName : JSON.parse(localStorage.getItem('nickName')) + }); + } + peraAfterFillingQuote = null; + // textInSmallTag.innerText = ""; + // textInSmallTag.classList.add('green'); + // timeLeftSpan.classList.add('green'); + // startBtn.disabled = true; + // countDown(); + // setTimeout(getNextQuote,2000); +}); + +socket.on('startGame',()=>{ + countDown(); + setTimeout(()=>{hack.style.display = 'block';},4000); + textInSmallTag.innerText = ""; + textInSmallTag.classList.add('green'); + timeLeftSpan.classList.add('green'); + startBtn.disabled = true; + + for (let x = 0; x < document.getElementsByClassName('myBar').length; x++ ){ + document.getElementsByClassName('myBar')[x].style.width = '0%'; + } + + var elems = document.querySelectorAll(".deleteOnStart"); + if(elems != undefined){ + elems.forEach(function(element) { + element.parentNode.removeChild(element); + });} +}) + + +function countDown() { + setTimeout(() => { + timeLeft--; + + if (timeLeft >= 0) { + textInSmallTag.innerText = "starting in: "; + timeLeftSpan.innerText = timeLeft; + // textInSmallTag.classList.add('green'); + // timeLeftSpan.classList.add('green'); + switch (timeLeft) { + case 0: + timeLeftSpan.innerText = ""; + // console.log('im here'); + textInSmallTag.innerText = 'Start Typing...'; + break; + case 1: + myText.disabled = false; + myText.focus(); + if(startInputTime == null){ + startInputTime = new Date().getTime(); + console.log('start time',startInputTime); + } + break; + case 3: + textInSmallTag.classList.add('red'); + textInSmallTag.classList.remove('green'); + timeLeftSpan.classList.add('red'); + timeLeftSpan.classList.remove('green'); + break; + default: + break; + } + // timeLeftSpan.innerText = timeLeft; + countDown(); + } + }, 1000) +} + + + +function getRandomQuote() { + return (fetch(link) + .then(response => response.json()) + .then(myData => myData.content)); +} + +//inserting elements from api to pera +async function getNextQuote() { + const quote = await getRandomQuote(); + totalWords = quote.split(' ').length; + // console.log('total words=',totalWords); + // console.log(quote); + // pera.innerText = ''; + quote.split('').forEach(i => { + var characterSpan = document.createElement('span'); //this element will created every time newly + characterSpan.innerText = i; + characterSpan.classList.add('mySpan'); + pera.appendChild(characterSpan); + // console.log(characterSpan); + + }); + peraAfterFillingQuote = pera.outerHTML; + myText.value = ""; //not neccesary +} + + +//calculating WPM +function wpmFunc(){ + var diff = endinputTime - startInputTime; + var timeTakenToInputInMinutes = diff/60000; + var wpm = Math.round(totalWords/timeTakenToInputInMinutes); + console.log('wpm:', wpm); + //emit events + socket.emit('result',{ + wpm : wpm, + accuracy : 100, + roomCode : JSON.parse(localStorage.getItem('roomName')), + nickName : JSON.parse(localStorage.getItem('nickName')) + }); + + startInputTime = null; + endinputTime = null; +} + +// adding event listener on textarea when stating input + +myText.addEventListener('input', () => { + // if(startInputTime == null){ + // startInputTime = new Date().getTime(); + // console.log('start time',startInputTime); + // } + + var quoteArray = document.getElementsByClassName('mySpan'); + // console.log(quoteArray); + var myTextArray = myText.value.split(''); + var isCorrect = true; + // console.log(myTextArray); + // myTextArray.forEach((element )=> { + + // console.log(element); + // }); + for (let i in quoteArray) { + if (myTextArray[i] == null) { + if(quoteArray[i].classList != undefined){ + // console.log(quoteArray[i].classList); + quoteArray[i].classList.remove('correct'); + quoteArray[i].classList.remove('incorrect'); + isCorrect = false; + } + } + else if (myTextArray[i] === quoteArray[i].innerText) { + quoteArray[i].classList.add('correct'); + quoteArray[i].classList.remove('incorrect'); + } + + else{ + // console.log(quoteArray[i].classList); + if(quoteArray[i].classList != undefined){ + quoteArray[i].classList.remove('correct'); + // if(quoteArray[i].classList.contains("incorrect")) + quoteArray[i].classList.add('incorrect'); + isCorrect = false; + } + } + } + calculateWidthOfProgressBar = (document.getElementsByClassName('correct').length/quoteArray.length)*100; + updateProgressBar(calculateWidthOfProgressBar); + + socket.emit('updateProgressBar',{ + roomCode : JSON.parse(localStorage.getItem('roomName')), + calculateWidthOfProgressBar: calculateWidthOfProgressBar + }); + + if(isCorrect){ + endinputTime = new Date().getTime(); + console.log('end time',endinputTime); + wpmFunc() + timeLeft = 6; + startBtn.disabled = false; + myText.disabled = true; + textInSmallTag.innerText = ""; + timeLeftSpan.innerText = ""; + myText.value = ""; + hack.style.display = "none"; + pera.innerHTML = ""; + getNextQuote(); + // console.log('you typed correct'); + } +}) + + +//listen events +socket.on('result',(myData)=>{ + console.log(myData); + document.getElementById('players').innerHTML += ` + ${myData.nickName} + ${myData.wpm} wpm + ` +}) + +// console.log(socket); + + +// socket.emit('showMyBar',{ +// roomCode : JSON.parse(localStorage.getItem('roomName')), +// nickName : JSON.parse(localStorage.getItem('nickName')) +// }) + +// socket.on('showMyBar',(myData)=>{ +// console.log('user joined') + +// }) + + +//listening who joined room + +socket.on('joinedRoom',(idOfJoinedUser,joinedUserData)=>{ + console.log(joinedUserData); + document.getElementById('inGame').innerHTML += `

${joinedUserData.nickName}

+
+
+
`; + socket.emit('thenIamSendingMyDataToJoinedUser',{ + roomCode : JSON.parse(localStorage.getItem('roomName')), + nickName : JSON.parse(localStorage.getItem('nickName')), + idOfJoinedUser: idOfJoinedUser + }) +}) + +// update progress bar + +function updateProgressBar(divWidth){ + document.getElementById(JSON.parse(localStorage.getItem('nickName'))).style.width = divWidth+'%'; +} + +//listening update progress bar + +socket.on('updatingBar', (width,idOfAdmin)=>{ + document.getElementById(idOfAdmin).style.width = width+'%'; +}) + +//listen someone leave room + +socket.on('left', (idofUser)=>{ + // console.log(idofUser); + let player = document.getElementById(idofUser); + player.innerText = 'Left The Game'; + player.style.display = 'inline'; + player.style.color = 'red'; + player.style.backgroundColor = '#dddddd'; + player.style.fontSize = '25px'; +}) \ No newline at end of file diff --git a/Type-Go/public/js/home.js b/Type-Go/public/js/home.js new file mode 100644 index 0000000..3fb9d70 --- /dev/null +++ b/Type-Go/public/js/home.js @@ -0,0 +1,47 @@ +document.getElementById('nickName').addEventListener('input', ()=>{ + console.log(document.getElementById('nickName').value); + let name = document.getElementById('nickName').value; + localStorage.setItem('nickName', JSON.stringify(name)); +}) + +document.getElementById('roomName').addEventListener('input', ()=>{ + let room = document.getElementById('roomName').value; + localStorage.setItem('roomName', JSON.stringify(room)); +}) + +document.getElementById('nickNameOfJoinUser').addEventListener('input', ()=>{ + let nickNameOfJoinUser = document.getElementById('nickNameOfJoinUser').value; + localStorage.setItem('nickNameOfJoinUser', JSON.stringify(nickNameOfJoinUser)); +}) + +document.getElementById('roomNameOfJoinUser').addEventListener('input', ()=>{ + let roomNameOfJoinUser = document.getElementById('roomNameOfJoinUser').value; + localStorage.setItem('roomNameOfJoinUser', JSON.stringify(roomNameOfJoinUser)); +}) + +if(JSON.parse(localStorage.getItem('joinError')) != null){ + let message = document.getElementById('message'); + message.innerText = `Room ${JSON.parse(localStorage.getItem('joinError'))} not Exist!`; + let JoinAlert = document.getElementById('JoinAlert'); + JoinAlert.classList.remove('d-none'); + localStorage.removeItem('joinError'); +} + +if(JSON.parse(localStorage.getItem('adminLeftGame')) != null){ + let adminLeftGame = document.getElementById('adminLeftGame'); + adminLeftGame.innerText = JSON.parse(localStorage.getItem('adminLeftGame')); + + let AdminAlert = document.getElementById('AdminAlert'); + AdminAlert.classList.remove('d-none'); + localStorage.removeItem('adminLeftGame'); +} + +if(JSON.parse(localStorage.getItem('roomCreatingError')) != null){ + let roomExitAlready = document.getElementById('roomExitAlready'); + roomExitAlready.innerText = JSON.parse(localStorage.getItem('roomCreatingError')); + + let roomCreateError = document.getElementById('roomCreateError'); + roomCreateError.classList.remove('d-none'); + localStorage.removeItem('roomCreatingError'); +} + diff --git a/Type-Go/public/js/join.js b/Type-Go/public/js/join.js new file mode 100644 index 0000000..7010559 --- /dev/null +++ b/Type-Go/public/js/join.js @@ -0,0 +1,290 @@ +// var socket = io.connect('http://localhost:4000'); +var socket = io.connect('https://type-go-multiplayer.herokuapp.com/'); + +const link = "https://api.quotable.io/random"; + +var pera = document.getElementById('pera'); +var myText = document.getElementById('myText'); +var timeLeftSpan = document.getElementById('timeLeftSpan'); +var textInSmallTag = document.getElementById('textInSmallTag'); +var timeLeft = 6; +var startInputTime = null; +var endinputTime = null; +var totalWords; +var hack = document.getElementById('hack'); + +document.getElementById('roomName').innerText = localStorage.getItem('roomNameOfJoinUser'); +document.getElementById('inGame').innerHTML += `

${JSON.parse(localStorage.getItem('nickNameOfJoinUser'))} (You)

+
+
+
`; + + +//emit event +socket.emit('joinRoom',{ + roomCode : JSON.parse(localStorage.getItem('roomNameOfJoinUser')), + nickName : JSON.parse(localStorage.getItem('nickNameOfJoinUser')) +}) + +socket.on('joinError',(message)=>{ + localStorage.setItem('joinError', JSON.stringify(message)); + window.location.href = 'https://type-go-multiplayer.herokuapp.com/'; + // window.location.href = 'http://localhost:4000'; +}) + +//listerm startGame event +socket.on('startGame',(startCredentials)=>{ + countDown(); + totalWords = startCredentials.totalWords; + hack.innerHTML = startCredentials.peraAfterFillingQuote; + // console.log(peraAfterFillingQuote.totalWords) + setTimeout(()=>{hack.style.display = 'block';},4000); + textInSmallTag.innerText = ""; + textInSmallTag.classList.add('green'); + timeLeftSpan.classList.add('green'); + + for (let x = 0; x < document.getElementsByClassName('myBar').length; x++ ){ + document.getElementsByClassName('myBar')[x].style.width = '0%'; + } + + var elems = document.querySelectorAll(".deleteOnStart"); + if(elems != undefined){ + elems.forEach(function(element) { + element.parentNode.removeChild(element); + });} +}) + + +function countDown() { + setTimeout(() => { + timeLeft--; + + if (timeLeft >= 0) { + textInSmallTag.innerText = "starting in: "; + timeLeftSpan.innerText = timeLeft; + // textInSmallTag.classList.add('green'); + // timeLeftSpan.classList.add('green'); + switch (timeLeft) { + case 0: + timeLeftSpan.innerText = ""; + // console.log('im here'); + textInSmallTag.innerText = 'Start Typing...'; + break; + case 1: + myText.disabled = false; + myText.focus(); + if(startInputTime == null){ + startInputTime = new Date().getTime(); + console.log('start time',startInputTime); + } + break; + case 3: + textInSmallTag.classList.add('red'); + textInSmallTag.classList.remove('green'); + timeLeftSpan.classList.add('red'); + timeLeftSpan.classList.remove('green'); + break; + default: + break; + } + // timeLeftSpan.innerText = timeLeft; + countDown(); + } + }, 1000) +} + + + +function getRandomQuote() { + return (fetch(link) + .then(response => response.json()) + .then(myData => myData.content)); +} + +//inserting elements from api to pera +async function getNextQuote() { + const quote = await getRandomQuote(); + totalWords = quote.split(' ').length; + // console.log('total words=',totalWords); + // console.log(quote); + // pera.innerText = ''; + quote.split('').forEach(i => { + var characterSpan = document.createElement('span'); //this element will created every time newly + characterSpan.innerText = i; + characterSpan.classList.add('mySpan'); + pera.appendChild(characterSpan); + // console.log(characterSpan); + + }); + myText.value = ""; //not neccesary +} + + +//calculating WPM +function wpmFunc(){ + var diff = endinputTime - startInputTime; + var timeTakenToInputInMinutes = diff/60000; + var wpm = Math.round(totalWords/timeTakenToInputInMinutes); + console.log('wpm:', wpm); + //emit events + socket.emit('result',{ + wpm : wpm, + accuracy : 100, + roomCode : JSON.parse(localStorage.getItem('roomNameOfJoinUser')), + nickName : JSON.parse(localStorage.getItem('nickNameOfJoinUser')) + }); + + startInputTime = null; + endinputTime = null; +} + +// adding event listener on textarea when stating input + +myText.addEventListener('input', () => { + // if(startInputTime == null){ + // startInputTime = new Date().getTime(); + // console.log('start time',startInputTime); + // } + + var quoteArray = document.getElementsByClassName('mySpan'); + // console.log(quoteArray); + var myTextArray = myText.value.split(''); + var isCorrect = true; + // console.log(myTextArray); + // myTextArray.forEach((element )=> { + + // console.log(element); + // }); + for (let i in quoteArray) { + if (myTextArray[i] == null) { + if(quoteArray[i].classList != undefined){ + // console.log(quoteArray[i].classList); + quoteArray[i].classList.remove('correct'); + quoteArray[i].classList.remove('incorrect'); + isCorrect = false; + } + } + else if (myTextArray[i] === quoteArray[i].innerText) { + quoteArray[i].classList.add('correct'); + quoteArray[i].classList.remove('incorrect'); + } + else{ + // console.log(quoteArray[i].classList); + if(quoteArray[i].classList != undefined){ + quoteArray[i].classList.remove('correct'); + // if(quoteArray[i].classList.contains("incorrect")) + quoteArray[i].classList.add('incorrect'); + isCorrect = false; + } + } + } + + calculateWidthOfProgressBar = (document.getElementsByClassName('correct').length/quoteArray.length)*100; + updateProgressBar(calculateWidthOfProgressBar); + + socket.emit('updateProgressBar',{ + roomCode : JSON.parse(localStorage.getItem('roomNameOfJoinUser')), + calculateWidthOfProgressBar: calculateWidthOfProgressBar + }); + + if(isCorrect){ + endinputTime = new Date().getTime(); + console.log('end time',endinputTime); + wpmFunc() + timeLeft = 6; + myText.disabled = true; + textInSmallTag.innerText = ""; + timeLeftSpan.innerText = ""; + myText.value = ""; + pera.innerHTML = ""; + hack.style.display = "none"; + // console.log('you typed correct'); + } +}) + + +//listen events +socket.on('result',(myData)=>{ + console.log(myData); + document.getElementById('players').innerHTML += ` + ${myData.nickName} + ${myData.wpm} wpm + ` +}) + + +//taking data of Admin user + +socket.on('okISendedMyDataToJoinedUser',(okISendedMyDataToJoinedUser,joinedUserId)=>{ + document.getElementById('inGame').innerHTML += `

${okISendedMyDataToJoinedUser.nickName} (Admin)

+
+
+
`; + localStorage.setItem('adminName',JSON.stringify(okISendedMyDataToJoinedUser.nickName)); +}) + + + +////////////////////////////////////////////////////////////////////////////////////////// + +socket.on('newlyJoinedUser',(newlyJoinedUser, joinedUserId)=>{ + console.log(newlyJoinedUser); + document.getElementById('inGame').innerHTML +=`

${newlyJoinedUser.nickName}

+
+
+
`; + + socket.emit('sendMyDataToOnlyNewlyJoinedUser',{ + roomCode : JSON.parse(localStorage.getItem('roomNameOfJoinUser')), + nickName : JSON.parse(localStorage.getItem('nickNameOfJoinUser')), + toUser: joinedUserId + }) +}) + + +socket.on('okISendMyDataToNewlyJoinedUser',(okISendMyDataToNewlyJoinedUser, joinedUserId)=>{ + document.getElementById('inGame').innerHTML += `

${okISendMyDataToNewlyJoinedUser.nickName}

+
+
+
`; + console.log(okISendMyDataToNewlyJoinedUser); +}) + +//update my Bar + +function updateProgressBar(divWidth){ + document.getElementById(JSON.parse(localStorage.getItem('nickNameOfJoinUser'))).style.width = divWidth+'%'; +} + +//listening width of Bar + +socket.on('updatingBar', (width,idOfAdmin)=>{ + document.getElementById(idOfAdmin).style.width = width+'%'; +}) + +//listen someone leave room + +socket.on('left', (idofUser)=>{ + // console.log(idofUser); + let player = document.getElementById(idofUser); + player.innerText = 'Left The Game'; + player.style.display = 'inline'; + player.style.color = 'red'; + player.style.backgroundColor = '#dddddd'; + player.style.fontSize = '25px'; +}) + +//listen if Admin left the game + +socket.on('Adminleft', ()=>{ + // let getElement = document.getElementById(idOfUser); + // let hasClassName= JSON.parse(localStorage.getItem('adminName')); + + // if(getElement.classList.contains(hasClassName)){ + localStorage.setItem('adminLeftGame',JSON.stringify("Admin left the Game")) + // socket.emit('deleteRoom'); + window.location.href = 'https://type-go-multiplayer.herokuapp.com/'; + // window.location.href = 'http://localhost:4000'; + + // } +}) \ No newline at end of file diff --git a/Type-Go/quotableAPI.js b/Type-Go/quotableAPI.js new file mode 100644 index 0000000..b5322ce --- /dev/null +++ b/Type-Go/quotableAPI.js @@ -0,0 +1,7 @@ +const axios = require('axios'); + +const url = "http://api.quotable.io/random"; + +module.exports = getData = ()=>{ + return axios.get(url).then(response=> response.data.content.split(" ")); +} \ No newline at end of file diff --git a/Type-Go/views/about.ejs b/Type-Go/views/about.ejs new file mode 100644 index 0000000..8a8c8b0 --- /dev/null +++ b/Type-Go/views/about.ejs @@ -0,0 +1,14 @@ + + + + + + + About + + + + <%- include('./template/nav.ejs'); -%> + this is about page + + \ No newline at end of file diff --git a/Type-Go/views/creategame.ejs b/Type-Go/views/creategame.ejs new file mode 100644 index 0000000..d29fb75 --- /dev/null +++ b/Type-Go/views/creategame.ejs @@ -0,0 +1,73 @@ + + + + + + + + Type Go + + + + + + + + + + + + + + + + <%- include('./template/nav.ejs'); -%> +
+
+ +
+ +

+

Players in Game

+
+ + + +
+
+ +
+ + +

TYPE GO

+ + + + +
+ + +
+
+
+ +
+

Result

+ + + + + +
PlayersSpeed
+
+
+ <%- include('./template/footer.ejs'); -%> + + + \ No newline at end of file diff --git a/Type-Go/views/home.ejs b/Type-Go/views/home.ejs new file mode 100644 index 0000000..ff0d8c8 --- /dev/null +++ b/Type-Go/views/home.ejs @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + Type Go + + + + <%- include('./template/nav.ejs'); -%> +
+
+ + + + + + + +
+
+
+ +
+
+ +
+
+
+
+ + +
+
+ + +
+ +
+
+
+
+
+
+
+ +
+
+
+
+ +
+
+ + +
+ +
+ + +
+ +
+ +
+
+
+
+
+ <%- include('./template/footer.ejs'); -%> + + + + + + + + + \ No newline at end of file diff --git a/Type-Go/views/joingame.ejs b/Type-Go/views/joingame.ejs new file mode 100644 index 0000000..6c35e41 --- /dev/null +++ b/Type-Go/views/joingame.ejs @@ -0,0 +1,64 @@ + + + + + + + + Type Go + + + + + + + + + + + + + <%- include('./template/nav.ejs'); -%> +
+
+ +
+ +

+

Players in Game

+
+ +
+
+ +
+ + +

TYPE GO

+ + + + +
+ + +
+
+
+ +
+

Result

+ + + + + +
PlayersSpeed
+
+
+ <%- include('./template/footer.ejs'); -%> + + \ No newline at end of file diff --git a/Type-Go/views/template/footer.ejs b/Type-Go/views/template/footer.ejs new file mode 100644 index 0000000..e03c235 --- /dev/null +++ b/Type-Go/views/template/footer.ejs @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/Type-Go/views/template/nav.ejs b/Type-Go/views/template/nav.ejs new file mode 100644 index 0000000..19619bb --- /dev/null +++ b/Type-Go/views/template/nav.ejs @@ -0,0 +1,8 @@ + \ No newline at end of file