diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 000000000..a746ba876 --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,26 @@ + +version: 2.1 + +orbs: + maven: circleci/maven@1.4.1 + +jobs: + clean_course_manager: + executor: maven/default + steps: + - checkout + - run: CSC480-22S/backend/course-manager-microservice/pom.xml mvn clean + + build_course_manager: + executor: maven/default + steps: + - checkout + - build + +workflows: + clean_and_build: + jobs: + - clean_course_manager + - build_course_manager: + requires: + - clean_course_manager \ No newline at end of file diff --git a/.dockerignore b/.dockerignore old mode 100644 new mode 100755 diff --git a/.gitattributes b/.gitattributes old mode 100644 new mode 100755 diff --git a/.gitignore b/.gitignore index 5b5a0e385..89accb6ad 100644 --- a/.gitignore +++ b/.gitignore @@ -1,51 +1,9 @@ -# Automatically generated files by Maven and IDEs. -**/.DS_Store -**/.idea/ -**/.vscode/ -**/.env -**/target/ -**/pom.xml.tag -**/pom.xml.releaseBackup -**/pom.xml.versionsBackup -**/pom.xml.next -**/release.properties -**/dependency-reduced-pom.xml -**/buildNumber.properties -**/.mvn/ -**/mvnw -**/mvnw.cmd -**/*.iml - -# Frontend React stuff. -**/node_modules/ -**/build/ -**/node/ -**/static/ -**/webapp/ - -# Compiled class file -*.class - -# Log file -*.log - -# BlueJ files -*.ctxt - -# Mobile Tools for Java (J2ME) -.mtj.tmp/ - -# Package Files # -*.jar -*.war -*.nar -*.ear -*.zip -*.tar.gz -*.rar - -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml -hs_err_pid* - -# CSV files -*.csv \ No newline at end of file +/professor-list.txt +.gitignore +/db +/db2 +/db3 +/db4 +/db5 +/assignments +.env diff --git a/.idea/CSC480-22S.iml b/.idea/CSC480-22S.iml new file mode 100644 index 000000000..d6ebd4805 --- /dev/null +++ b/.idea/CSC480-22S.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 000000000..13e9997c9 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 000000000..35eb1ddfb --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 000000000..973385166 --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,257 @@ + + + +<<<<<<< HEAD + + + +======= + + + +>>>>>>> Testing + + + + + + +<<<<<<< HEAD + +======= + + + + + + +>>>>>>> Testing + + +<<<<<<< HEAD + { + "keyToString": { + "RunOnceActivity.OpenProjectViewOnStart": "true", + "RunOnceActivity.ShowReadmeOnStart": "true", + "WebServerToolWindowFactoryState": "false", + "git-widget-placeholder": "Testing", + "last_opened_file_path": "/home/dominic/IdeaProjects/480-Main-Repo/CSC480-22S/frontend", + "node.js.detected.package.eslint": "true", + + "node.js.selected.package.eslint": "(autodetect)", + "node.js.selected.package.tslint": "(autodetect)", + "nodejs_package_manager_path": "npm", + "vue.rearranger.settings.migration": "true" +>>>>>>> Testing + } +} + + + + + + + + + + +<<<<<<< HEAD + + 1682466745301 + +======= + + 1682393365666 + + + + + + + +<<<<<<< HEAD +======= + + + + + + + + + + + + +>>>>>>> Testing + \ No newline at end of file diff --git a/LICENSE b/LICENSE old mode 100644 new mode 100755 diff --git a/README.md b/README.md old mode 100644 new mode 100755 diff --git a/backend/course-manager-microservice/.dockerignore b/backend/course-manager-microservice/.dockerignore old mode 100644 new mode 100755 diff --git a/backend/course-manager-microservice/Dockerfile b/backend/course-manager-microservice/Dockerfile old mode 100644 new mode 100755 diff --git a/backend/course-manager-microservice/course-manager-microservice.iml b/backend/course-manager-microservice/course-manager-microservice.iml new file mode 100644 index 000000000..8c54e3b0b --- /dev/null +++ b/backend/course-manager-microservice/course-manager-microservice.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/backend/course-manager-microservice/pom.xml b/backend/course-manager-microservice/pom.xml old mode 100644 new mode 100755 index 167ca840a..618a7f02d --- a/backend/course-manager-microservice/pom.xml +++ b/backend/course-manager-microservice/pom.xml @@ -75,6 +75,16 @@ com.ibm.websphere.appserver.api.jaxrs20 1.1.54 + + com.google.code.gson + gson + 2.8.9 + + + org.eclipse.microprofile.openapi + microprofile-openapi-api + 3.0 + diff --git a/backend/course-manager-microservice/src/main/java/edu/oswego/cs/application/CourseManagerApplication.java b/backend/course-manager-microservice/src/main/java/edu/oswego/cs/application/CourseManagerApplication.java old mode 100644 new mode 100755 diff --git a/backend/course-manager-microservice/src/main/java/edu/oswego/cs/cors/CorsFilter.java b/backend/course-manager-microservice/src/main/java/edu/oswego/cs/cors/CorsFilter.java old mode 100644 new mode 100755 diff --git a/backend/course-manager-microservice/src/main/java/edu/oswego/cs/daos/CourseDAO.java b/backend/course-manager-microservice/src/main/java/edu/oswego/cs/daos/CourseDAO.java old mode 100644 new mode 100755 index e25974138..6b8379e41 --- a/backend/course-manager-microservice/src/main/java/edu/oswego/cs/daos/CourseDAO.java +++ b/backend/course-manager-microservice/src/main/java/edu/oswego/cs/daos/CourseDAO.java @@ -25,6 +25,7 @@ public class CourseDAO { @JsonbProperty("students") @ElementCollection public List students; @JsonbProperty("year") public String year; @JsonbProperty("team_size") public int teamSize; + @JsonbProperty("blocked_words") @ElementCollection public List blockedWords = new ArrayList<>(); @JsonbCreator public CourseDAO( @@ -46,4 +47,32 @@ public CourseDAO( this.teamSize = 1; this.courseID = this.abbreviation + "-" + this.courseSection + "-" + this.crn + "-" + this.semester + "-" + this.year; } + + public CourseDAO( + // @NonNull @JsonbProperty("abbreviation") + String abbreviation, + // @NonNull @JsonbProperty("course_name") + String courseName, + // @NonNull @JsonbProperty("course_section") + String courseSection, + // @NonNull @JsonbProperty("crn") + String crn, + // @NonNull @JsonbProperty("semester") + String semester, + // @NonNull @JsonbProperty("year") + String year, + // @NonNull @JsonbProperty("professor_id") + String professorID) + { + this.abbreviation = abbreviation; + this.courseName = courseName; + this.courseSection = courseSection; + this.crn = crn; + this.professorID = professorID; + this.semester = semester; + this.students = new ArrayList<>(); + this.year = year; + this.teamSize = 1; + this.courseID = this.abbreviation + "-" + this.courseSection + "-" + this.crn + "-" + this.semester + "-" + this.year; + } } \ No newline at end of file diff --git a/backend/course-manager-microservice/src/main/java/edu/oswego/cs/daos/FileDAO.java b/backend/course-manager-microservice/src/main/java/edu/oswego/cs/daos/FileDAO.java old mode 100644 new mode 100755 diff --git a/backend/course-manager-microservice/src/main/java/edu/oswego/cs/daos/ProfanitySettings.java b/backend/course-manager-microservice/src/main/java/edu/oswego/cs/daos/ProfanitySettings.java new file mode 100644 index 000000000..0ab596026 --- /dev/null +++ b/backend/course-manager-microservice/src/main/java/edu/oswego/cs/daos/ProfanitySettings.java @@ -0,0 +1,26 @@ +package edu.oswego.cs.daos; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.util.ArrayList; +import java.util.List; + +@Getter +@Setter +public class ProfanitySettings { + private ArrayList words; + + public ProfanitySettings(List blockedWords) { + this.words = new ArrayList<>(blockedWords); + } + + public ArrayList getWords() { + return words; + } + + public void setWords(ArrayList words) { + this.words = words; + } +} diff --git a/backend/course-manager-microservice/src/main/java/edu/oswego/cs/daos/StudentDAO.java b/backend/course-manager-microservice/src/main/java/edu/oswego/cs/daos/StudentDAO.java old mode 100644 new mode 100755 diff --git a/backend/course-manager-microservice/src/main/java/edu/oswego/cs/daos/UserDAO.java b/backend/course-manager-microservice/src/main/java/edu/oswego/cs/daos/UserDAO.java new file mode 100644 index 000000000..6ca6ed520 --- /dev/null +++ b/backend/course-manager-microservice/src/main/java/edu/oswego/cs/daos/UserDAO.java @@ -0,0 +1,17 @@ +package edu.oswego.cs.daos; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +public class UserDAO { + String user_id; + String role; + String first_name; + String last_name; +} diff --git a/backend/course-manager-microservice/src/main/java/edu/oswego/cs/database/AdminInterface.java b/backend/course-manager-microservice/src/main/java/edu/oswego/cs/database/AdminInterface.java new file mode 100644 index 000000000..9f924e02e --- /dev/null +++ b/backend/course-manager-microservice/src/main/java/edu/oswego/cs/database/AdminInterface.java @@ -0,0 +1,387 @@ +package edu.oswego.cs.database; + + +import com.mongodb.client.MongoCollection; +import com.mongodb.client.MongoDatabase; +import edu.oswego.cs.daos.CourseDAO; +import edu.oswego.cs.daos.ProfanitySettings; +import edu.oswego.cs.daos.UserDAO; +import edu.oswego.cs.util.CPRException; + +import java.util.List; +import java.util.ArrayList; + +import com.google.gson.Gson; +import edu.oswego.cs.util.CourseUtil; +import org.bson.Document; + +import javax.ws.rs.Produces; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.SecurityContext; + +import com.mongodb.client.model.Filters; + +import static com.mongodb.client.model.Filters.eq; +import static com.mongodb.client.model.Updates.set; + +public class AdminInterface { + + private final MongoCollection professorCollection; + private final MongoCollection studentCollection; + private final MongoCollection courseCollection; + private final MongoCollection profanitySettings; + private final MongoCollection assignmentCollection; + private final MongoCollection submissionCollection; + private final MongoCollection teamCollection; + + + // Make a generic method to receive a mongo collection and check connection + public AdminInterface() { + DatabaseManager databaseManager = new DatabaseManager(); + try { + MongoDatabase studentDB = databaseManager.getStudentDB(); + // Professors and Admins are in the same database, Admins are elevated + MongoDatabase profAdminDb = databaseManager.getProfessorDB(); + MongoDatabase courseDB = databaseManager.getCourseDB(); + MongoDatabase assignmentDB = databaseManager.getAssignmentDB(); + MongoDatabase teamDB = databaseManager.getTeamDB(); + studentCollection = studentDB.getCollection("students"); + professorCollection = profAdminDb.getCollection("professors"); + courseCollection = courseDB.getCollection("courses"); + profanitySettings = profAdminDb.getCollection("profanitySettings"); + assignmentCollection = assignmentDB.getCollection("assignments"); + submissionCollection = assignmentDB.getCollection("submissions"); + teamCollection = teamDB.getCollection("teams"); + } catch (CPRException e) { + throw new CPRException(Response.Status.INTERNAL_SERVER_ERROR, "Failed to retrieve collections."); + } + } + + public AdminInterface(String user_id) { + checkIfUserIdExists(user_id); + DatabaseManager databaseManager = new DatabaseManager(); + try { + MongoDatabase studentDB = databaseManager.getStudentDB(); + // Professors and Admins are in the same database, Admins are elevated + MongoDatabase profAdminDb = databaseManager.getProfessorDB(); + MongoDatabase courseDB = databaseManager.getCourseDB(); + MongoDatabase assignmentDB = databaseManager.getAssignmentDB(); + MongoDatabase teamDB = databaseManager.getTeamDB(); + studentCollection = studentDB.getCollection("students"); + professorCollection = profAdminDb.getCollection("professors"); + courseCollection = courseDB.getCollection("courses"); + profanitySettings = profAdminDb.getCollection("profanitySettings"); + assignmentCollection = assignmentDB.getCollection("assignments"); + submissionCollection = assignmentDB.getCollection("submissions"); + teamCollection = teamDB.getCollection("teams"); + } catch (CPRException e) { + throw new CPRException(Response.Status.INTERNAL_SERVER_ERROR, "Failed to retrieve collections."); + } + } + + public void deleteAdminUser(String user_id) { + if (professorCollection.countDocuments() == 1) { + throw new CPRException(Response.Status.BAD_REQUEST, "Cannot delete last admin user."); + } + + if (!checkAdmin(user_id)) { + throw new CPRException(Response.Status.NOT_FOUND, "Admin user not found."); + } + + professorCollection.deleteOne(eq("professor_id", user_id)); + } + + public void deleteProfessorUser(String user_id) { + + if (!checkProfessor(user_id)) { + throw new CPRException(Response.Status.NOT_FOUND, "Professor user not found."); + } + professorCollection.deleteOne(eq("professor_id", user_id)); + } + + + public void deleteStudentUser(String user_id) { + + if (!checkStudent(user_id)) { + throw new CPRException(Response.Status.NOT_FOUND, "Student user not found."); + } + studentCollection.deleteOne(eq("student_id", user_id)); + } + + public void addAdminUser(String firstName, String lastName, String user_id) { + + if (checkAdmin(user_id)) { + throw new CPRException(Response.Status.BAD_REQUEST, + "User already exists as Admin."); + } + + if (checkProfessor(user_id)) { + throw new CPRException(Response.Status.BAD_REQUEST, + "User exists as professor, use Elevate to admin instead."); + } + + if (checkStudent(user_id)) { + throw new CPRException(Response.Status.BAD_REQUEST, + "User exists as student, use Elevate student to admin instead."); + } + + Document newAdmin = new Document("professor_id", user_id) + .append("first_name", firstName) + .append("last_name", lastName) + .append("admin", true) + .append("courses", new ArrayList()); + professorCollection.insertOne(newAdmin); + } + + public void addProfessorUser(String firstName, String lastName, String user_id) { + if (checkAdmin(user_id)) { + System.out.println("User already exists as Admin."); + throw new CPRException(Response.Status.BAD_REQUEST, + "User already exists as professor."); + } + + if (checkProfessor(user_id)) { + throw new CPRException(Response.Status.BAD_REQUEST, + "User exists as professor, use Elevate to Admin instead."); + } + + if (checkStudent(user_id)) { + throw new CPRException(Response.Status.BAD_REQUEST, + "User exists as student, use Elevate to Admin instead."); + } + + Document newProfessor = new Document("professor_id", user_id) + .append("first_name", firstName) + .append("last_name", lastName) + .append("admin", false) + .append("courses", new ArrayList()); + + professorCollection.insertOne(newProfessor); + } + + public void addStudentUser(String firstName, String lastName, String user_id) { + System.out.println(user_id + " " + firstName + " " + lastName); + if (checkAdmin(user_id)) { + throw new CPRException(Response.Status.BAD_REQUEST, + "User exists as Admin, use Demote to Student instead."); + } + + if (checkProfessor(user_id)) { + throw new CPRException(Response.Status.BAD_REQUEST, + "User exists as Professor, use Demote to Student instead."); + } + + if (checkStudent(user_id)) { + throw new CPRException(Response.Status.BAD_REQUEST, + "User already exists."); + } + + Document newStudent = new Document("student_id", user_id) + .append("first_name", firstName) + .append("last_name", lastName); + studentCollection.insertOne(newStudent); + } + + public void promoteProfessorToAdmin(String user_id) { + if (!checkProfessor(user_id)) { + throw new CPRException(Response.Status.NOT_FOUND, "Professor user not found."); + } + + professorCollection.updateOne(eq("professor_id", user_id), set("admin", true)); + } + + public void promoteStudentToProfessor(String user_id) { + if (!checkStudent(user_id)) { + throw new CPRException(Response.Status.NOT_FOUND, "Student user not found."); + } + + Document studentDocument = studentCollection.find(eq("student_id", user_id)).first(); + String firstName = studentDocument.getString("first_name"); + String lastName = studentDocument.getString("last_name"); + + Document newProfessor = new Document("professor_id", user_id) + .append("first_name", firstName) + .append("last_name", lastName) + .append("admin", false); + professorCollection.insertOne(newProfessor); + studentCollection.deleteOne(eq("student_id", user_id)); + } + + public void promoteStudentToAdmin(String user_id) { + if (!checkStudent(user_id)) { + throw new CPRException(Response.Status.NOT_FOUND, "Student user not found."); + } + + Document studentDocument = studentCollection.find(eq("student_id", user_id)).first(); + String firstName = studentDocument.getString("first_name"); + String lastName = studentDocument.getString("last_name"); + + Document newProfessor = new Document("professor_id", user_id) + .append("first_name", firstName) + .append("last_name", lastName) + .append("admin", true); + professorCollection.insertOne(newProfessor); + studentCollection.deleteOne(eq("student_id", user_id)); + } + + public void demoteProfessorToStudent(String user_id) { + if (!checkProfessor(user_id)) { + throw new CPRException(Response.Status.NOT_FOUND, "Professor user not found."); + } + + Document professorDocument = professorCollection.find(eq("professor_id", user_id)).first(); + String firstName = professorDocument.getString("first_name"); + String lastName = professorDocument.getString("last_name"); + + Document newStudent = new Document("student_id", user_id) + .append("first_name", firstName) + .append("last_name", lastName); + studentCollection.insertOne(newStudent); + professorCollection.deleteOne(eq("professor_id", user_id)); + } + + public void demoteAdminToProfessor(String user_id) { + if (!checkAdmin(user_id)) { + throw new CPRException(Response.Status.NOT_FOUND, "Admin user not found."); + } + professorCollection.updateOne(eq("professor_id", user_id), set("admin", false)); + } + + public void demoteAdminToStudent(String user_id) { + if (!checkAdmin(user_id)) { + throw new CPRException(Response.Status.NOT_FOUND, "Admin user not found."); + } + + Document professorDocument = professorCollection.find(eq("professor_id", user_id)).first(); + String firstName = professorDocument.getString("first_name"); + String lastName = professorDocument.getString("last_name"); + + Document newStudent = new Document("student_id", user_id) + .append("first_name", firstName) + .append("last_name", lastName); + studentCollection.insertOne(newStudent); + professorCollection.deleteOne(eq("professor_id", user_id)); + } + + private Boolean checkAdmin(String user_id) { + Document adminDocument = professorCollection.find( + Filters.and( + eq("professor_id", user_id), + eq("admin", true))) + .first(); + return adminDocument != null; + } + + private Boolean checkStudent(String user_id) { + Document studentDocument = studentCollection.find(eq("student_id", user_id)).first(); + return studentDocument != null; + } + + private Boolean checkProfessor(String user_id) { + Document professorDocument = professorCollection.find(eq("professor_id", user_id)).first(); + return professorDocument != null; + } + + private void checkIfUserIdExists(String user_id) { + if (user_id == null || user_id.isEmpty()) { + throw new CPRException(Response.Status.BAD_REQUEST, "User ID cannot be null."); + } + } + + // TODO: Add constructor paremeters for CourseDAO + public List getCourseView() { + List courses = new ArrayList<>(); + // iterate through MongoDB CourseDAOs and add to list + for (Document course : courseCollection.find()) { + CourseDAO c = new CourseDAO( + course.getString("abbreviation"), + course.getString("course_name"), + course.getString("course_section"), + course.getString("crn"), + course.getString("semester"), + course.getString("year"), + course.getString("professor_id") + ); + courses.add(c); + } + return courses; + } + + + public Object getUsersView() { + List users = new ArrayList(); + // iterate though mongodb users and add to list + for (Document user : studentCollection.find()) { + UserDAO u = new UserDAO(user.getString("student_id"), "student", user.getString("first_name"), user.getString("last_name")); + users.add(u); + } + + for (Document user : professorCollection.find()) { + UserDAO u = new UserDAO(user.getString("professor_id"), "professor", user.getString("first_name"), user.getString("last_name")); + if (user.getBoolean("admin")) { // if is true override role to admin + u.setRole("admin"); + } + users.add(u); + } + + return users; + } + + + public Boolean checkCourse(String crn) { + Document CourseDAODocument = courseCollection.find(eq("crn", crn)).first(); + if (CourseDAODocument == null) { + return false; + } + return true; + } + + public String getBlockedWords() { + // Find the first document in the collection + Document profanitySettingsDocument = profanitySettings.find().first(); + if (profanitySettingsDocument == null) { + ProfanitySettings initProfanitySettings = new ProfanitySettings(new ArrayList()); + Document initialProfanitySettings = new Document("words", initProfanitySettings.getWords()); + profanitySettings.insertOne(initialProfanitySettings); + Gson gson = new Gson(); + return gson.toJson(new ArrayList()); + } + + // Extract the blocked words from the document + List blockedWords = profanitySettingsDocument.getList("words", String.class); + + // Convert the List to a JSON string using Gson + Gson gson = new Gson(); + String jsonBlockedWords = gson.toJson(blockedWords); + + return jsonBlockedWords; + } + + public void updateBlockedWords(String jsonBlockedWords) { + // Convert the JSON string to a List using Gson + System.out.printf("jsonBlockedWords: %s%n", jsonBlockedWords); + Gson gson = new Gson(); + List blockedWords = gson.fromJson(jsonBlockedWords, List.class); + System.out.printf("blockedWords: %s%n", blockedWords); + ProfanitySettings temp = new ProfanitySettings(blockedWords); + + System.out.printf("profanitySettingsCollection: %s%n", profanitySettings); + + profanitySettings.deleteMany(new Document()); + System.out.println("Deleted all documents from collection"); + + Document profanitySettingsDocument = new Document("words", temp.getWords()); + profanitySettings.insertOne(profanitySettingsDocument); + } + + public void removeCourseAsAdmin(SecurityContext securityContext, String courseID) { + Document courseDocument = courseCollection.find(eq("course_id", courseID)).first(); + if (courseDocument == null) throw new CPRException(Response.Status.BAD_REQUEST, "This course does not exist."); + new CourseUtil().updateCoursesArrayInProfessorDb(securityContext, professorCollection, courseID, null, "DELETE"); + new CourseUtil().updateCoursesArrayInStudentDb(studentCollection, courseID, null, "DELETE"); + new CourseUtil().updateCoursesKeyInDBs(assignmentCollection, courseID, null, "DELETE"); + new CourseUtil().updateCoursesKeyInDBs(submissionCollection, courseID, null, "DELETE"); + new CourseUtil().updateCoursesKeyInDBs(teamCollection, courseID, null, "DELETE"); + courseCollection.deleteOne(eq("course_id", courseID)); + } +} \ No newline at end of file diff --git a/backend/course-manager-microservice/src/main/java/edu/oswego/cs/database/CourseInterface.java b/backend/course-manager-microservice/src/main/java/edu/oswego/cs/database/CourseInterface.java old mode 100644 new mode 100755 index e0727711f..0e5319762 --- a/backend/course-manager-microservice/src/main/java/edu/oswego/cs/database/CourseInterface.java +++ b/backend/course-manager-microservice/src/main/java/edu/oswego/cs/database/CourseInterface.java @@ -1,5 +1,6 @@ package edu.oswego.cs.database; +import com.google.gson.Gson; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import com.mongodb.client.model.Updates; @@ -20,6 +21,7 @@ import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; +import java.util.concurrent.ConcurrentHashMap; import static com.mongodb.client.model.Filters.and; import static com.mongodb.client.model.Filters.eq; @@ -35,6 +37,12 @@ public class CourseInterface { private final MongoCollection submissionCollection; private final MongoCollection teamCollection; + /** + * A hashmap of course IDs to a boolean value indicating whether the there is a request + * trying to add a student to the specified course in addStudent(). + */ + private static final ConcurrentHashMap courseLocks = new ConcurrentHashMap<>(); + public CourseInterface() { DatabaseManager databaseManager = new DatabaseManager(); try { @@ -65,10 +73,18 @@ public void addCourse(SecurityContext securityContext, CourseDAO dao) { if (courseDocument != null) throw new CPRException(Response.Status.CONFLICT, "Course already existed."); Document professorDocument = professorCollection.find(eq("professor_id", professorID)).first(); - if (professorDocument == null) throw new CPRException(Response.Status.NOT_FOUND, "This professor does not exist."); + if (professorDocument == null) + throw new CPRException(Response.Status.NOT_FOUND, "This professor does not exist."); List professorDocumentCourses = professorDocument.getList("courses", String.class); - if (professorDocumentCourses == null) throw new CPRException(Response.Status.CONFLICT, "Professor profile is not set up properly."); + if (professorDocumentCourses == null) + throw new CPRException(Response.Status.CONFLICT, "Professor profile is not set up properly."); + + if (dao.courseName == null || dao.abbreviation == null || dao.courseName == null + || dao.courseSection == null || dao.crn == null || dao.semester == null) { + throw new CPRException(Response.Status.NOT_FOUND, "At least one required field is null."); + } + professorDocumentCourses.add(dao.courseID); professorCollection.updateOne(eq("professor_id", professorID), Updates.set("courses", professorDocumentCourses)); @@ -81,7 +97,8 @@ public void addCourse(SecurityContext securityContext, CourseDAO dao) { List students = course.getList("students", String.class); for (String student : students) { Document studentDocument = studentCollection.find(eq("student_id", student)).first(); - if (studentDocument != null) studentCollection.updateOne(eq("student_id", student), push("courses", dao.courseID)); + if (studentDocument != null) + studentCollection.updateOne(eq("student_id", student), push("courses", dao.courseID)); } } @@ -94,6 +111,7 @@ public String updateCourse(SecurityContext securityContext, CourseDAO dao) { String originalCourseID = dao.courseID; String newCourseID = dao.abbreviation + "-" + dao.courseSection + "-" + dao.crn + "-" + dao.semester + "-" + dao.year; int originalTeamSize = courseDocument.getInteger("team_size"); + dao.blockedWords = courseDocument.getList("blocked_words", String.class); int newTeamSize = dao.teamSize; dao.courseID = newCourseID; dao.students = courseDocument.getList("students", String.class); @@ -104,7 +122,8 @@ public String updateCourse(SecurityContext securityContext, CourseDAO dao) { eq("course_id", newCourseID), eq("professor_id", professorID) )).first(); - if (duplicatedCourseDocument != null) throw new CPRException(Response.Status.CONFLICT, "This course_id already exist."); + if (duplicatedCourseDocument != null) + throw new CPRException(Response.Status.CONFLICT, "This course_id already exist."); } if (originalTeamSize != newTeamSize) { @@ -124,36 +143,65 @@ public String updateCourse(SecurityContext securityContext, CourseDAO dao) { return newCourseID; } + /** + * Adds a student to the given course, also adds the course to the + * student's list of enrolled courses. + *

+ * The spin block is to ensure that there is only one request currently working + * to add the student to the course. If the spin block is not present, it is possible + * that two requests will try to add the student to the course (nearly) at the same time, + * which will cause the student to be added twice. + * + * @param securityContext the content of the application (for professor information) + * @param student the student to be added to the course + * @param courseID the course to add the student to + */ public void addStudent(SecurityContext securityContext, StudentDAO student, String courseID) { + while (courseLocks.containsKey(courseID)) ; /* spin block (see explanation above) */ + courseLocks.put(courseID, true); String professorID = securityContext.getUserPrincipal().getName().split("@")[0]; String studentId = student.email.split("@")[0]; String studentLastName = student.fullName.split(", ")[0]; String studentFirstName = student.fullName.split(", ")[1]; Document courseDocument = courseCollection.find(and(eq("course_id", courseID), eq("professor_id", professorID))).first(); - if (courseDocument == null) throw new CPRException(Response.Status.NOT_FOUND, "This course does not exist."); + if (courseDocument == null) { + courseLocks.remove(courseID); + throw new CPRException(Response.Status.NOT_FOUND, "This course does not exist."); + } List students = courseDocument.getList("students", String.class); - if (students.contains(studentId)) throw new CPRException(Response.Status.CONFLICT, "This student is already in the course."); + if (students.contains(studentId)) { + courseLocks.remove(courseID); + throw new CPRException(Response.Status.CONFLICT, "This student is already in the course."); + } courseCollection.updateOne(eq("course_id", courseID), push("students", studentId)); Document studentDocument = studentCollection.find(eq("student_id", studentId)).first(); - if (studentDocument != null) { - List courseList = studentDocument.getList("courses", String.class); - for (String course : courseList) { - if (course.equals(courseID)) throw new CPRException(Response.Status.CONFLICT, "This student is already in the course."); - } - studentCollection.updateOne(eq("student_id", studentId), push("courses", courseID)); - } else { - List courseList = new ArrayList<>(); - courseList.add(courseID); - Document newStudent = new Document() + boolean studentNotFound = false; + if (studentDocument == null) { + studentNotFound = true; + studentDocument = new Document() .append("first_name", studentFirstName) .append("last_name", studentLastName) .append("student_id", studentId) - .append("courses", courseList); - studentCollection.insertOne(newStudent); + .append("courses", new ArrayList()) + .append("team_submissions", new ArrayList()) + .append("peer_reviews", new ArrayList()); + } + + List courseList = studentDocument.getList("courses", String.class); + boolean isAlreadyEnrolled = courseList.contains(courseID); + if (isAlreadyEnrolled) { + courseLocks.remove(courseID); + throw new CPRException(Response.Status.CONFLICT, "This student is already in the course."); + } else { + if (studentNotFound) { + studentDocument.put("courses", new ArrayList<>(List.of(courseID))); + studentCollection.insertOne(studentDocument); + } else studentCollection.updateOne(eq("student_id", studentId), push("courses", courseID)); } + courseLocks.remove(courseID); } public void removeCourse(SecurityContext securityContext, String courseID) { @@ -168,22 +216,50 @@ public void removeCourse(SecurityContext securityContext, String courseID) { courseCollection.deleteOne(eq("course_id", courseID)); } + /** + * Removes a student from the roster of a given course, removes the course from the + * student's list of courses, removes the student from the team they are on + * within the course (if applicable), "randomly" assigns a new team leader if + * the student removed was the leader of a team, and removes the team if the team + * is empty after the removal of the student. + * + * @param securityContext the context of the application (for professor information) + * @param studentID the net ID of the student to be removed + * @param courseID the ID of the course from which the student is to be removed + */ public void removeStudent(SecurityContext securityContext, String studentID, String courseID) { String professorID = securityContext.getUserPrincipal().getName().split("@")[0]; - Document studentDocument = studentCollection.find(and(eq("student_id", studentID), eq("courses", courseID))).first(); if (studentDocument == null) throw new CPRException(Response.Status.NOT_FOUND, "This student does not exist."); - Document courseDocument = courseCollection.find(and(eq("course_id", courseID), eq("professor_id", professorID))).first(); if (courseDocument == null) throw new CPRException(Response.Status.NOT_FOUND, "This course does not exist."); - List courses = studentDocument.getList("courses", String.class); courses.remove(courseID); studentCollection.updateOne(eq("student_id", studentID), set("courses", courses)); - List students = courseDocument.getList("students", String.class); students.remove(studentID); courseCollection.updateOne(eq("course_id", courseID), set("students", students)); + + Document teamDocument = teamCollection.find(and(eq("course_id", courseID), eq("team_members", studentID))).first(); + if (teamDocument == null) return; + int teamSize = teamDocument.getInteger("team_size", -1); + boolean isOnlyMember = teamDocument.getInteger("team_size", -1) == 1; + boolean isTeamLeader = teamDocument.getString("team_lead").equals(studentID); + String teamID = teamDocument.getString("team_id"); + if (teamDocument == null) throw new CPRException(Response.Status.NOT_FOUND, "This team does not exist."); + List teamMembers = teamDocument.getList("team_members", String.class); + if (isOnlyMember) { + teamCollection.deleteOne(eq("course_id", courseID)); + return; + } + teamMembers.remove(studentID); + teamCollection.updateOne(eq("team_id", teamID), set("team_size", teamSize - 1)); + teamCollection.updateOne(eq("team_id", teamID), set("team_members", teamMembers)); + if (isTeamLeader) { + /* "Randomly" select a new team leader (for now) */ + String newTeamLeader = teamMembers.get(0); + teamCollection.updateOne(eq("team_id", teamID), set("team_leader", newTeamLeader)); + } } public void addStudentsFromCSV(SecurityContext securityContext, FileDAO fileDAO) { @@ -220,4 +296,21 @@ public void addStudentsFromCSV(SecurityContext securityContext, FileDAO fileDAO) addStudent(securityContext, student, courseID); } } + + public void updateBlockedWordsForCourse(String course_id, String payload) { + Document courseDocument = courseCollection.find(eq("course_id", course_id)).first(); + if (courseDocument == null) throw new CPRException(Response.Status.NOT_FOUND, "This course does not exist."); + Gson gson = new Gson(); + List blockedWords = gson.fromJson(payload, List.class); + courseDocument.put("blocked_words", blockedWords); + courseCollection.updateOne(eq("course_id", course_id), set("blocked_words", blockedWords)); + } + + public String getBlockedWordsForCourse(String course_id) { + Document courseDocument = courseCollection.find(eq("course_id", course_id)).first(); + if (courseDocument == null) throw new CPRException(Response.Status.NOT_FOUND, "This course does not exist."); + Gson gson = new Gson(); + List blockedWords = courseDocument.getList("blocked_words", String.class); + return gson.toJson(blockedWords); + } } diff --git a/backend/course-manager-microservice/src/main/java/edu/oswego/cs/database/DatabaseManager.java b/backend/course-manager-microservice/src/main/java/edu/oswego/cs/database/DatabaseManager.java old mode 100644 new mode 100755 diff --git a/backend/course-manager-microservice/src/main/java/edu/oswego/cs/resources/AdminController.java b/backend/course-manager-microservice/src/main/java/edu/oswego/cs/resources/AdminController.java new file mode 100644 index 000000000..5d4ac84fc --- /dev/null +++ b/backend/course-manager-microservice/src/main/java/edu/oswego/cs/resources/AdminController.java @@ -0,0 +1,197 @@ +package edu.oswego.cs.resources; + +import edu.oswego.cs.database.AdminInterface; +import org.eclipse.microprofile.openapi.annotations.parameters.RequestBody; + +import javax.annotation.security.DenyAll; +import javax.annotation.security.RolesAllowed; +import javax.ws.rs.*; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.SecurityContext; + +@Path("admin") +@DenyAll +public class AdminController { + + // Delete Admin User by User id and all associated data + @RolesAllowed("admin") + @DELETE + @Produces(MediaType.APPLICATION_JSON) + @Path("/delete/admin/{user_id}") + public Response deleteAdminUser(@Context SecurityContext securityContext, @PathParam("user_id") String userId) + throws Exception { + new AdminInterface(userId).deleteAdminUser(userId); + return Response.status(Response.Status.OK).entity("Admin user deleted.").build(); + } + + // Delete Student User by User id and all associated data. + @RolesAllowed("admin") + @DELETE + @Produces(MediaType.APPLICATION_JSON) + @Path("/delete/student/{user_id}") + public Response deleteStudentUser(@Context SecurityContext securityContext, @PathParam("user_id") String userId) { + new AdminInterface(userId).deleteStudentUser(userId); + return Response.status(Response.Status.OK).entity("Student user deleted.").build(); + } + + // Delete Professor User by User id and all associated data. + @RolesAllowed("admin") + @DELETE + @Produces(MediaType.APPLICATION_JSON) + @Path("/delete/professor/{user_id}") + public Response deleteProfessorUser(@Context SecurityContext securityContext, @PathParam("user_id") String userId) { + new AdminInterface(userId).deleteProfessorUser(userId); + return Response.status(Response.Status.OK).entity("Professor user deleted.").build(); + } + + @RolesAllowed("admin") + @DELETE + @Produces(MediaType.APPLICATION_JSON) + @Path("/delete/course/{course_id}") + public Response deleteCourse(@Context SecurityContext securityContext, @PathParam("course_id") String courseId) { + System.out.printf("Deleting course %s", courseId); + new AdminInterface(securityContext.getUserPrincipal().getName()).removeCourseAsAdmin(securityContext, courseId); + return Response.status(Response.Status.OK).entity("Course deleted.").build(); + } + + // Add Admin User by User Id, First and Last Name + @RolesAllowed("admin") + @POST + @Produces(MediaType.APPLICATION_JSON) + @Path("/add/admin/{user_id}/{first_name}/{last_name}") + public Response addAdminUser(@Context SecurityContext securityContext, @PathParam("user_id") String userId, + @PathParam("first_name") String firstName, @PathParam("last_name") String lastName) { + new AdminInterface(userId).addAdminUser(firstName, lastName, userId); + return Response.status(Response.Status.OK).entity("Admin user added.").build(); + } + + // Add Student User by User Id, First and Last Name + @RolesAllowed("admin") + @POST + @Produces(MediaType.APPLICATION_JSON) + @Path("/add/student/{user_id}/{first_name}/{last_name}") + public Response addStudentUser(@Context SecurityContext securityContext, @PathParam("user_id") String userId, + @PathParam("first_name") String firstName, @PathParam("last_name") String lastName) { + System.out.println("Adding student user"); + new AdminInterface(userId).addStudentUser(firstName, lastName, userId); + return Response.status(Response.Status.OK).entity("Student user added.").build(); + } + + // Add Admin User by User Id, First and Last Name + @RolesAllowed("admin") + @POST + @Produces(MediaType.APPLICATION_JSON) + @Path("/add/professor/{user_id}/{first_name}/{last_name}") + public Response addProfessorUser(@Context SecurityContext securityContext, @PathParam("user_id") String userId, + @PathParam("first_name") String firstName, @PathParam("last_name") String lastName) { + new AdminInterface(userId).addProfessorUser(firstName, lastName, userId); + return Response.status(Response.Status.OK).entity("Professor user added.").build(); + } + + // Promote Professor User to Admin User by User Id + @RolesAllowed("admin") + @POST + @Produces(MediaType.APPLICATION_JSON) + @Path("/roles/promote/professorToAdmin/{user_id}") + public Response promoteProfessorToAdmin(@Context SecurityContext securityContext, + @PathParam("user_id") String userId) { + new AdminInterface(userId).promoteProfessorToAdmin(userId); + return Response.status(Response.Status.OK).entity("Admin role added to professor user.").build(); + } + + // Promote Student User to Professor User by User Id + @RolesAllowed("admin") + @POST + @Produces(MediaType.APPLICATION_JSON) + @Path("/roles/promote/studentToProfessor/{user_id}") + public Response promoteStudentToProfessor(@Context SecurityContext securityContext, + @PathParam("user_id") String userId) { + new AdminInterface(userId).promoteStudentToProfessor(userId); + return Response.status(Response.Status.OK).entity("Student promoted to professor role.").build(); + } + + // Promote Student User to Admin User by User Id + @RolesAllowed("admin") + @POST + @Produces(MediaType.APPLICATION_JSON) + @Path("/roles/promote/studentToAdmin/{user_id}") + public Response promoteStudentToAdmin(@Context SecurityContext securityContext, + @PathParam("user_id") String userId) { + new AdminInterface(userId).promoteStudentToAdmin(userId); + return Response.status(Response.Status.OK).entity("Student promoted to admin role.").build(); + } + + // Demote Professor User to Student User by User Id + @RolesAllowed("admin") + @POST + @Produces(MediaType.APPLICATION_JSON) + @Path("/roles/demote/professorToStudent/{user_id}") + public Response demoteProfessorToStudent(@Context SecurityContext securityContext, + @PathParam("user_id") String userId) { + new AdminInterface(userId).demoteProfessorToStudent(userId); + return Response.status(Response.Status.OK).entity("Admin role removed from professor user.").build(); + } + + // Demote Admin User to Professor User by User Id + @RolesAllowed("admin") + @POST + @Produces(MediaType.APPLICATION_JSON) + @Path("/roles/demote/adminToProfessor/{user_id}") + public Response demoteAdminToProfessor(@Context SecurityContext securityContext, + @PathParam("user_id") String userId) { + new AdminInterface(userId).demoteAdminToProfessor(userId); + return Response.status(Response.Status.OK).entity("Admin role removed from professor user.").build(); + } + + // Demote Admin User to Student User by User Id + @RolesAllowed("admin") + @POST + @Produces(MediaType.APPLICATION_JSON) + @Path("/roles/demote/adminToStudent/{user_id}") + public Response demoteAdminToStudent(@Context SecurityContext securityContext, + @PathParam("user_id") String userId) { + new AdminInterface(userId).demoteAdminToStudent(userId); + return Response.status(Response.Status.OK).entity("Admin role removed from student user.").build(); + } + + // Add Blocked Word + @RolesAllowed("admin") + @POST + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Path("/profanity/update") + public Response updateBlockedWords(@Context SecurityContext securityContext, @RequestBody String payload) { + new AdminInterface().updateBlockedWords(payload); + return Response.status(Response.Status.OK).entity("Profanity settings updated.").build(); + } + + // Get Profanity Settings View + @RolesAllowed({"admin","professor"}) + @GET + @Produces(MediaType.APPLICATION_JSON) + @Path("/views/profanity") + public Response getProfanitySettingsView(@Context SecurityContext securityContext) { + System.out.printf("Getting profanity settings view"); + return Response.status(Response.Status.OK).entity(new AdminInterface().getBlockedWords()).build(); + } + + // Get Users View + @RolesAllowed("admin") + @GET + @Produces(MediaType.APPLICATION_JSON) + @Path("/views/users") + public Response getUsersView(@Context SecurityContext securityContext) { + return Response.status(Response.Status.OK).entity(new AdminInterface().getUsersView()).build(); + } + + // Get Courses view + @RolesAllowed("admin") + @GET + @Produces(MediaType.APPLICATION_JSON) + @Path("/views/courses") + public Response getCoursesView(@Context SecurityContext securityContext) { + return Response.status(Response.Status.OK).entity(new AdminInterface().getCourseView()).build(); + } +} diff --git a/backend/course-manager-microservice/src/main/java/edu/oswego/cs/resources/CourseManagerResource.java b/backend/course-manager-microservice/src/main/java/edu/oswego/cs/resources/CourseManagerResource.java old mode 100644 new mode 100755 index eb5afed0b..295def22d --- a/backend/course-manager-microservice/src/main/java/edu/oswego/cs/resources/CourseManagerResource.java +++ b/backend/course-manager-microservice/src/main/java/edu/oswego/cs/resources/CourseManagerResource.java @@ -15,6 +15,10 @@ import javax.ws.rs.core.Response; import javax.ws.rs.core.SecurityContext; +import org.eclipse.microprofile.openapi.annotations.parameters.RequestBody; + + +//reset @Path("professor") @DenyAll public class CourseManagerResource { @@ -59,7 +63,8 @@ public Response addStudent( @PathParam("courseID") String courseID, @PathParam("studentInfo") String studentInfo) { String[] parsedStudentInfo = studentInfo.split("-"); - if (parsedStudentInfo.length < 3) throw new CPRException(Response.Status.BAD_REQUEST, "Add student field was not filled out properly."); + if (parsedStudentInfo.length < 3) + throw new CPRException(Response.Status.BAD_REQUEST, "Add student field was not filled out properly."); StudentDAO studentDAO = new StudentDAO(parsedStudentInfo[0], parsedStudentInfo[1], parsedStudentInfo[2]); new CourseInterface().addStudent(securityContext, studentDAO, courseID); return Response.status(Response.Status.OK).entity("Student successfully added.").build(); @@ -89,4 +94,21 @@ public Response addStudentByCSVFile(@Context SecurityContext securityContext, IM new CourseInterface().addStudentsFromCSV(securityContext, fileDAO); return Response.status(Response.Status.OK).entity("Student(s) successfully added.").build(); } + + @POST + @Consumes(MediaType.APPLICATION_JSON) + @Path("courses/{course_id}/profanity/update") + @RolesAllowed("professor") + public Response updateBlockedWordsForCourse(@Context SecurityContext securityContext, @PathParam("course_id") String course_id, @RequestBody String payload) { + new CourseInterface().updateBlockedWordsForCourse(course_id, payload); + return Response.status(Response.Status.OK).entity("Profanity settings updated.").build(); + } + + @GET + @Produces(MediaType.APPLICATION_JSON) + @Path("courses/{course_id}/profanity/view") + @RolesAllowed("professor") + public Response getBlockedWordsForCourse(@Context SecurityContext securityContext, @PathParam("course_id") String course_id) { + return Response.status(Response.Status.OK).entity(new CourseInterface().getBlockedWordsForCourse(course_id)).build(); + } } \ No newline at end of file diff --git a/backend/course-manager-microservice/src/main/java/edu/oswego/cs/util/CPRException.java b/backend/course-manager-microservice/src/main/java/edu/oswego/cs/util/CPRException.java old mode 100644 new mode 100755 diff --git a/backend/course-manager-microservice/src/main/java/edu/oswego/cs/util/CSVUtil.java b/backend/course-manager-microservice/src/main/java/edu/oswego/cs/util/CSVUtil.java old mode 100644 new mode 100755 diff --git a/backend/course-manager-microservice/src/main/java/edu/oswego/cs/util/CourseUtil.java b/backend/course-manager-microservice/src/main/java/edu/oswego/cs/util/CourseUtil.java old mode 100644 new mode 100755 diff --git a/backend/course-manager-microservice/src/main/liberty/config/server.xml b/backend/course-manager-microservice/src/main/liberty/config/server.xml old mode 100644 new mode 100755 diff --git a/backend/course-manager-microservice/src/test/java/CourseManagerTests.java b/backend/course-manager-microservice/src/test/java/CourseManagerTests.java old mode 100644 new mode 100755 index 6029f1e86..a68c4ef4f --- a/backend/course-manager-microservice/src/test/java/CourseManagerTests.java +++ b/backend/course-manager-microservice/src/test/java/CourseManagerTests.java @@ -35,8 +35,8 @@ public class CourseManagerTests { @BeforeAll public static void oneTimeSetup() { - port = "13125"; - baseUrl = "http://moxie.cs.oswego.edu:" + port + "/manage/professor/"; + port = "3000"; + baseUrl = "https://localhost:" + port + "/manage/professor/"; String courseName = "JUnit Theory"; String courseSection = "800"; String crn = "54266"; diff --git a/backend/course-viewer-microservice/.dockerignore b/backend/course-viewer-microservice/.dockerignore old mode 100644 new mode 100755 diff --git a/backend/course-viewer-microservice/Dockerfile b/backend/course-viewer-microservice/Dockerfile old mode 100644 new mode 100755 index 35572be80..1c115bd2b --- a/backend/course-viewer-microservice/Dockerfile +++ b/backend/course-viewer-microservice/Dockerfile @@ -11,4 +11,4 @@ FROM icr.io/appcafe/open-liberty:full-java11-openj9-ubi # Copy from the intermediate build container. COPY --from=maven src/main/liberty/config/server.xml /config/ -COPY --from=maven target/*.war /config/apps +COPY --from=maven target/*.war /config/apps \ No newline at end of file diff --git a/backend/course-viewer-microservice/course-viewer-microservice.iml b/backend/course-viewer-microservice/course-viewer-microservice.iml new file mode 100644 index 000000000..8c54e3b0b --- /dev/null +++ b/backend/course-viewer-microservice/course-viewer-microservice.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/backend/course-viewer-microservice/pom.xml b/backend/course-viewer-microservice/pom.xml old mode 100644 new mode 100755 diff --git a/backend/course-viewer-microservice/src/main/java/edu/oswego/cs/application/CourseViewerApplication.java b/backend/course-viewer-microservice/src/main/java/edu/oswego/cs/application/CourseViewerApplication.java old mode 100644 new mode 100755 diff --git a/backend/course-viewer-microservice/src/main/java/edu/oswego/cs/cors/CorsFilter.java b/backend/course-viewer-microservice/src/main/java/edu/oswego/cs/cors/CorsFilter.java old mode 100644 new mode 100755 diff --git a/backend/course-viewer-microservice/src/main/java/edu/oswego/cs/daos/AssignmentDAO.java b/backend/course-viewer-microservice/src/main/java/edu/oswego/cs/daos/AssignmentDAO.java old mode 100644 new mode 100755 diff --git a/backend/course-viewer-microservice/src/main/java/edu/oswego/cs/daos/CourseDAO.java b/backend/course-viewer-microservice/src/main/java/edu/oswego/cs/daos/CourseDAO.java old mode 100644 new mode 100755 diff --git a/backend/course-viewer-microservice/src/main/java/edu/oswego/cs/daos/StudentDAO.java b/backend/course-viewer-microservice/src/main/java/edu/oswego/cs/daos/StudentDAO.java old mode 100644 new mode 100755 diff --git a/backend/course-viewer-microservice/src/main/java/edu/oswego/cs/database/CourseInterface.java b/backend/course-viewer-microservice/src/main/java/edu/oswego/cs/database/CourseInterface.java old mode 100644 new mode 100755 diff --git a/backend/course-viewer-microservice/src/main/java/edu/oswego/cs/database/DatabaseManager.java b/backend/course-viewer-microservice/src/main/java/edu/oswego/cs/database/DatabaseManager.java old mode 100644 new mode 100755 diff --git a/backend/course-viewer-microservice/src/main/java/edu/oswego/cs/database/GradeInterface.java b/backend/course-viewer-microservice/src/main/java/edu/oswego/cs/database/GradeInterface.java old mode 100644 new mode 100755 diff --git a/backend/course-viewer-microservice/src/main/java/edu/oswego/cs/resources/CoursesViewerResources.java b/backend/course-viewer-microservice/src/main/java/edu/oswego/cs/resources/CoursesViewerResources.java old mode 100644 new mode 100755 diff --git a/backend/course-viewer-microservice/src/main/liberty/config/server.xml b/backend/course-viewer-microservice/src/main/liberty/config/server.xml old mode 100644 new mode 100755 diff --git a/backend/course-viewer-microservice/src/test/java/edu/oswego/edu/CoursesViewerTest.java b/backend/course-viewer-microservice/src/test/java/edu/oswego/edu/CoursesViewerTest.java old mode 100644 new mode 100755 index 798e6ccac..a87b697bd --- a/backend/course-viewer-microservice/src/test/java/edu/oswego/edu/CoursesViewerTest.java +++ b/backend/course-viewer-microservice/src/test/java/edu/oswego/edu/CoursesViewerTest.java @@ -34,7 +34,7 @@ public class CoursesViewerTest { @BeforeAll public static void oneTimeSetup() { port = "13125"; - baseUrl = "http://moxie.cs.oswego.edu:" + port + "/view/professor/"; + baseUrl = "https://moxie.cs.oswego.edu:" + port + "/view/professor/"; // variables for inserted courses diff --git a/backend/login-microservice/.dockerignore b/backend/login-microservice/.dockerignore old mode 100644 new mode 100755 diff --git a/backend/login-microservice/Dockerfile b/backend/login-microservice/Dockerfile old mode 100644 new mode 100755 diff --git a/backend/login-microservice/login-microservice.iml b/backend/login-microservice/login-microservice.iml new file mode 100644 index 000000000..8c54e3b0b --- /dev/null +++ b/backend/login-microservice/login-microservice.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/backend/login-microservice/pom.xml b/backend/login-microservice/pom.xml old mode 100644 new mode 100755 diff --git a/backend/login-microservice/src/main/java/edu/oswego/cs/application/RestApplication.java b/backend/login-microservice/src/main/java/edu/oswego/cs/application/RestApplication.java old mode 100644 new mode 100755 diff --git a/backend/login-microservice/src/main/java/edu/oswego/cs/controllers/Controller.java b/backend/login-microservice/src/main/java/edu/oswego/cs/controllers/Controller.java old mode 100644 new mode 100755 index eacde164f..f3dfa2807 --- a/backend/login-microservice/src/main/java/edu/oswego/cs/controllers/Controller.java +++ b/backend/login-microservice/src/main/java/edu/oswego/cs/controllers/Controller.java @@ -31,6 +31,7 @@ public Response generateToken(@Context HttpHeaders request) throws JsonException @Produces(MediaType.APPLICATION_JSON) public Response refreshToken(@Context SecurityContext securityContext) throws IOException { return Response.status(Response.Status.OK).entity(new AuthServices().refreshToken(securityContext)).build(); + } } diff --git a/backend/login-microservice/src/main/java/edu/oswego/cs/cors/CorsFilter.java b/backend/login-microservice/src/main/java/edu/oswego/cs/cors/CorsFilter.java old mode 100644 new mode 100755 diff --git a/backend/login-microservice/src/main/java/edu/oswego/cs/database/DatabaseManager.java b/backend/login-microservice/src/main/java/edu/oswego/cs/database/DatabaseManager.java old mode 100644 new mode 100755 diff --git a/backend/login-microservice/src/main/java/edu/oswego/cs/database/ProfessorCheck.java b/backend/login-microservice/src/main/java/edu/oswego/cs/database/ProfessorCheck.java old mode 100644 new mode 100755 diff --git a/backend/login-microservice/src/main/java/edu/oswego/cs/services/AuthServices.java b/backend/login-microservice/src/main/java/edu/oswego/cs/services/AuthServices.java old mode 100644 new mode 100755 index a0f987560..1399bbe70 --- a/backend/login-microservice/src/main/java/edu/oswego/cs/services/AuthServices.java +++ b/backend/login-microservice/src/main/java/edu/oswego/cs/services/AuthServices.java @@ -8,7 +8,6 @@ import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import edu.oswego.cs.database.DatabaseManager; -import edu.oswego.cs.database.ProfessorCheck; import edu.oswego.cs.util.CPRException; import org.bson.Document; import org.eclipse.microprofile.jwt.JsonWebToken; @@ -19,7 +18,6 @@ import java.io.IOException; import java.security.Principal; import java.util.*; - import static com.mongodb.client.model.Filters.eq; public class AuthServices { @@ -34,17 +32,21 @@ public AuthServices() throws IOException { } catch (WebApplicationException e) { throw new CPRException(Response.Status.BAD_REQUEST, "Failed to retrieve collections."); } - new ProfessorCheck().addProfessors(); } public Map generateNewToken(String token) { Payload payload = googleService.validateToken(token); if (payload == null) - throw new WebApplicationException(Response.status(Response.Status.UNAUTHORIZED).entity("Invalid token.").build()); + throw new WebApplicationException( + Response.status(Response.Status.UNAUTHORIZED).entity("Invalid token.").build()); Map tokens = new HashMap<>(); String lakerID = payload.getEmail().split("@")[0]; + CheckForDefaultAdmin(lakerID, payload.get("given_name").toString(), payload.get("family_name").toString()); + + + System.out.println("lakerID: " + lakerID); Set roles = getRoles(lakerID); try { @@ -66,6 +68,7 @@ public Map generateNewToken(String token) { .claim("aud", "cpr") .claim("iss", "cpr") .buildJwt().compact(); + System.out.println("access token: " + access_token); tokens.put("access_token", access_token); tokens.put("refresh_token", refresh_token); @@ -74,19 +77,24 @@ public Map generateNewToken(String token) { } catch (JwtException | InvalidBuilderException | InvalidClaimException e) { e.printStackTrace(); - throw new WebApplicationException(Response.status(Response.Status.NOT_FOUND).entity("Unable to find token.").build()); + throw new WebApplicationException( + Response.status(Response.Status.NOT_FOUND).entity("Unable to find token.").build()); } } public Map refreshToken(SecurityContext securityContext) { + System.out.println("refreshing token"); Principal user = securityContext.getUserPrincipal(); JsonWebToken payload = (JsonWebToken) user; if (payload == null) - throw new WebApplicationException(Response.status(Response.Status.UNAUTHORIZED).entity("JWT is not available.").build()); + throw new WebApplicationException( + Response.status(Response.Status.UNAUTHORIZED).entity("JWT is not available.").build()); Map tokens = new HashMap<>(); String lakerID = payload.getName().split("@")[0]; + + // CheckForDefaultAdmin(lakerID, payload.getClaim(), payload.getLastname()); Set roles = getRoles(lakerID); try { @@ -102,24 +110,43 @@ public Map refreshToken(SecurityContext securityContext) { tokens.put("access_token", access_token); } catch (JwtException | InvalidBuilderException | InvalidClaimException e) { e.printStackTrace(); - throw new WebApplicationException(Response.status(Response.Status.NOT_FOUND).entity("Unable to find token.").build()); + throw new WebApplicationException( + Response.status(Response.Status.NOT_FOUND).entity("Unable to find token.").build()); } return tokens; } public Set getRoles(String lakerID) { + Set roles = new HashSet<>(); if (professorCollection.find(eq("professor_id", lakerID)).first() != null) { roles.add("professor"); + Document professorDoc = professorCollection.find(eq("professor_id", lakerID)).first(); + if (professorDoc != null && professorDoc.containsKey("admin") && professorDoc.getBoolean("admin")) { + roles.add("admin"); + } } else { roles.add("student"); } - if (roles.size() == 0) - throw new WebApplicationException(Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("Can't connect to database.").build()); return roles; + } + // Checks if professor database is empty + // if so assign admin status to first professor + protected void CheckForDefaultAdmin(String user_id, String first_name, String last_name) { + System.out.println("Checking for default admin"); + if (professorCollection.countDocuments() == 0) { + System.out.println("Adding default admin" + user_id); + Document professor = new Document("professor_id", user_id) + .append("admin", true) + .append("first_name", first_name) + .append("last_name", last_name) + .append("courses", new ArrayList()); + professorCollection.insertOne(professor); + } + } } diff --git a/backend/login-microservice/src/main/java/edu/oswego/cs/services/GoogleService.java b/backend/login-microservice/src/main/java/edu/oswego/cs/services/GoogleService.java old mode 100644 new mode 100755 diff --git a/backend/login-microservice/src/main/java/edu/oswego/cs/util/CPRException.java b/backend/login-microservice/src/main/java/edu/oswego/cs/util/CPRException.java old mode 100644 new mode 100755 diff --git a/backend/login-microservice/src/main/liberty/config/server.xml b/backend/login-microservice/src/main/liberty/config/server.xml old mode 100644 new mode 100755 diff --git a/backend/login-microservice/src/test/java/LoginTests.java b/backend/login-microservice/src/test/java/LoginTests.java old mode 100644 new mode 100755 index 1b0b7366a..6a31fb65c --- a/backend/login-microservice/src/test/java/LoginTests.java +++ b/backend/login-microservice/src/test/java/LoginTests.java @@ -18,7 +18,7 @@ public class LoginTests { @BeforeAll public static void onTimeSetup(){ - baseUrl = "http://moxie.cs.oswego.edu:13125/auth/token/generate/"; + baseUrl = "https://moxie.cs.oswego.edu:13125/auth/token/generate/"; // base jwt token found by intercepting the request in Burp ;D // we can manipulate this to see what else we can do with this request. XD diff --git a/backend/peer-review-teams-microservice/.dockerignore b/backend/peer-review-teams-microservice/.dockerignore old mode 100644 new mode 100755 diff --git a/backend/peer-review-teams-microservice/Dockerfile b/backend/peer-review-teams-microservice/Dockerfile old mode 100644 new mode 100755 diff --git a/backend/peer-review-teams-microservice/pom.xml b/backend/peer-review-teams-microservice/pom.xml old mode 100644 new mode 100755 diff --git a/backend/peer-review-teams-microservice/src/main/java/edu/oswego/cs/application/RestApplication.java b/backend/peer-review-teams-microservice/src/main/java/edu/oswego/cs/application/RestApplication.java old mode 100644 new mode 100755 diff --git a/backend/peer-review-teams-microservice/src/main/java/edu/oswego/cs/cors/CorsFilter.java b/backend/peer-review-teams-microservice/src/main/java/edu/oswego/cs/cors/CorsFilter.java old mode 100644 new mode 100755 diff --git a/backend/peer-review-teams-microservice/src/main/java/edu/oswego/cs/daos/TeamDAO.java b/backend/peer-review-teams-microservice/src/main/java/edu/oswego/cs/daos/TeamDAO.java old mode 100644 new mode 100755 index c1badf11a..bba3ca574 --- a/backend/peer-review-teams-microservice/src/main/java/edu/oswego/cs/daos/TeamDAO.java +++ b/backend/peer-review-teams-microservice/src/main/java/edu/oswego/cs/daos/TeamDAO.java @@ -35,4 +35,12 @@ public TeamDAO( this.teamMembers = new ArrayList<>(); this.teamSize = teamSize; } -} \ No newline at end of file + public TeamDAO(String teamName, String courseID, int teamSize) { + this.teamID = null; + this.courseID = courseID; + this.teamFull = false; + this.teamLead = null; + this.teamMembers = new ArrayList<>(); + this.teamSize = teamSize; + } +} diff --git a/backend/peer-review-teams-microservice/src/main/java/edu/oswego/cs/database/DatabaseManager.java b/backend/peer-review-teams-microservice/src/main/java/edu/oswego/cs/database/DatabaseManager.java old mode 100644 new mode 100755 diff --git a/backend/peer-review-teams-microservice/src/main/java/edu/oswego/cs/database/TeamInterface.java b/backend/peer-review-teams-microservice/src/main/java/edu/oswego/cs/database/TeamInterface.java old mode 100644 new mode 100755 index f85de579c..0ac56a8ed --- a/backend/peer-review-teams-microservice/src/main/java/edu/oswego/cs/database/TeamInterface.java +++ b/backend/peer-review-teams-microservice/src/main/java/edu/oswego/cs/database/TeamInterface.java @@ -25,7 +25,9 @@ import javax.ws.rs.core.SecurityContext; import java.util.ArrayList; import java.util.List; +import java.util.Objects; +import static com.mongodb.client.model.Filters.and; import static com.mongodb.client.model.Filters.eq; public class TeamInterface { @@ -33,27 +35,58 @@ public class TeamInterface { private final MongoCollection studentCollection; private final MongoCollection teamCollection; + private final MongoCollection submissionCollection; + public TeamInterface() { DatabaseManager databaseManager = new DatabaseManager(); try { MongoDatabase studentDB = databaseManager.getStudentDB(); MongoDatabase courseDB = databaseManager.getCourseDB(); MongoDatabase teamDB = databaseManager.getTeamDB(); + MongoDatabase assignmentDB = databaseManager.getAssignmentDB(); studentCollection = studentDB.getCollection("students"); courseCollection = courseDB.getCollection("courses"); teamCollection = teamDB.getCollection("teams"); + submissionCollection = assignmentDB.getCollection("submissions"); } catch (CPRException e) { throw new CPRException(Response.Status.INTERNAL_SERVER_ERROR, "Failed to retrieve collections."); } } - - public void createTeam(@Context SecurityContext securityContext, TeamParam request) { +// public void createTeam(@Context SecurityContext securityContext, TeamParam request) { +// Document courseDocument = courseCollection.find(eq("course_id", request.getCourseID())).first(); +// if (courseDocument == null) throw new CPRException(Response.Status.NOT_FOUND, "Course not found"); +// new IdentifyingService().identifyingStudentService(securityContext, request.getStudentID()); +// new IdentifyingService().identifyingProfessorAsStudentService(securityContext, courseCollection, request.getCourseID()); +// new SecurityService().generateTeamNameSecurity(securityContext, teamCollection, courseDocument, request); +// +// if (request.getTeamName().length() > 25 || request.getTeamName().length() <= 0) { +// throw new CPRException(Response.Status.INTERNAL_SERVER_ERROR, "Team name must be within 1 and 25 characters long."); +// } +// +// int teamSize = new TeamService().getTeamSize(courseDocument); +// TeamDAO newTeam = new TeamDAO(request.getTeamName(), request.getCourseID(), teamSize, request.getStudentID()); +// newTeam.getTeamMembers().add(request.getStudentID()); +// newTeam.setTeamMembers(newTeam.getTeamMembers()); +// +// if (teamSize == 1) newTeam.setTeamFull(true); +// +// Jsonb jsonb = JsonbBuilder.create(); +// Entity courseDAOEntity = Entity.entity(jsonb.toJson(newTeam), MediaType.APPLICATION_JSON_TYPE); +// Document teamDocument = Document.parse(courseDAOEntity.getEntity()); +// teamCollection.insertOne(teamDocument); +// } + + public void createTeam(@Context SecurityContext securityContext, TeamParam request) { Document courseDocument = courseCollection.find(eq("course_id", request.getCourseID())).first(); if (courseDocument == null) throw new CPRException(Response.Status.NOT_FOUND, "Course not found"); new IdentifyingService().identifyingStudentService(securityContext, request.getStudentID()); - new IdentifyingService().identifyingProfessorService(securityContext, courseCollection, request.getCourseID()); + new IdentifyingService().identifyingProfessorAsStudentService(securityContext, courseCollection, request.getCourseID()); new SecurityService().generateTeamNameSecurity(securityContext, teamCollection, courseDocument, request); + if (request.getTeamName().length() > 25 || request.getTeamName().length() <= 0) { + throw new CPRException(Response.Status.INTERNAL_SERVER_ERROR, "Team name must be within 1 and 25 characters long."); + } + int teamSize = new TeamService().getTeamSize(courseDocument); TeamDAO newTeam = new TeamDAO(request.getTeamName(), request.getCourseID(), teamSize, request.getStudentID()); newTeam.getTeamMembers().add(request.getStudentID()); @@ -67,6 +100,36 @@ public void createTeam(@Context SecurityContext securityContext, TeamParam reque teamCollection.insertOne(teamDocument); } + public void createTeamProffessor(@Context SecurityContext securityContext, TeamParam request, String studentID) { + Document courseDocument = courseCollection.find(eq("course_id", request.getCourseID())).first(); + if (courseDocument == null) throw new CPRException(Response.Status.NOT_FOUND, "Course not found"); + new IdentifyingService().identifyingProfessorAsStudentService(securityContext, courseCollection, request.getCourseID()); + new SecurityService().generateTeamNameSecurity(securityContext, teamCollection, courseDocument, request); + + if (request.getTeamName().length() > 25 || request.getTeamName().length() <= 0) { + throw new CPRException(Response.Status.INTERNAL_SERVER_ERROR, "Team name must be within 1 and 25 characters long."); + } + + if (!new SecurityService().isStudentValid(courseDocument, studentID)) { + throw new CPRException(Response.Status.NOT_FOUND, "Student not found in this course."); + } + + int teamSize = new TeamService().getTeamSize(courseDocument); + TeamDAO newTeam = new TeamDAO(request.getTeamName(), request.getCourseID(), teamSize); + + new IdentifyingService().identifyingStudentService(securityContext, studentID); + newTeam.getTeamMembers().add(studentID); + + newTeam.setTeamMembers(newTeam.getTeamMembers()); + + if (teamSize == 1) newTeam.setTeamFull(true); + + Jsonb jsonb = JsonbBuilder.create(); + Entity courseDAOEntity = Entity.entity(jsonb.toJson(newTeam), MediaType.APPLICATION_JSON_TYPE); + Document teamDocument = Document.parse(courseDAOEntity.getEntity()); + teamCollection.insertOne(teamDocument); + } + public List getAllTeams(SecurityContext securityContext, String courseID) { Document courseDocument = courseCollection.find(eq("course_id", courseID)).first(); if (courseDocument == null) throw new CPRException(Response.Status.NOT_FOUND, "Course not found"); @@ -92,7 +155,7 @@ public Document getTeamByStudentID(SecurityContext securityContext, String cours if (!new SecurityService().isStudentValid(courseDocument, studentID)) throw new CPRException(Response.Status.NOT_FOUND, "Student not found in this course."); new IdentifyingService().identifyingStudentService(securityContext, studentID); - new IdentifyingService().identifyingProfessorService(securityContext, courseCollection, courseID); + new IdentifyingService().identifyingProfessorAsStudentService(securityContext, courseCollection, courseID); if (new SecurityService().isStudentAlreadyInATeam(teamCollection, securityContext, studentID, courseID)) { MongoCursor cursor = teamCollection.find(eq("course_id", courseID)).iterator(); @@ -120,7 +183,7 @@ public Document getTeamByTeamID(SecurityContext securityContext, String courseID if (!new SecurityService().isStudentInThisTeam(teamCollection, teamID, userID, courseID)) throw new CPRException(Response.Status.FORBIDDEN, "Principal User is not in this team."); - Bson teamDocumentFilter = Filters.and(eq("team_id", teamID), eq("course_id", courseID)); + Bson teamDocumentFilter = and(eq("team_id", teamID), eq("course_id", courseID)); return teamCollection.find(teamDocumentFilter).first(); } @@ -139,10 +202,10 @@ public void joinTeam(SecurityContext securityContext, TeamParam request) { Document courseDocument = courseCollection.find(eq("course_id", request.getCourseID())).first(); if (courseDocument == null) throw new CPRException(Response.Status.NOT_FOUND, "Course not found."); new IdentifyingService().identifyingStudentService(securityContext, request.getStudentID()); - new IdentifyingService().identifyingProfessorService(securityContext, courseCollection, request.getCourseID()); + new IdentifyingService().identifyingProfessorAsStudentService(securityContext, courseCollection, request.getCourseID()); new SecurityService().joinTeamSecurity(securityContext, teamCollection, courseDocument, request); - Bson teamDocumentFilter = Filters.and(eq("team_id", request.getTeamID()), eq("course_id", request.getCourseID())); + Bson teamDocumentFilter = and(eq("team_id", request.getTeamID()), eq("course_id", request.getCourseID())); Document teamDocument = teamCollection.find(teamDocumentFilter).first(); List teamMembers = teamDocument.getList("team_members", String.class); @@ -152,6 +215,41 @@ public void joinTeam(SecurityContext securityContext, TeamParam request) { teamUpdates = Updates.combine(teamUpdates, Updates.set("team_full", true)); UpdateOptions teamOptions = new UpdateOptions().upsert(true); teamCollection.updateOne(teamDocumentFilter, teamUpdates, teamOptions); + //now add the student's user id to all submissions the new team has made for the current course + + //first get the regular assignments and modify them + for (Document currentSubmission : submissionCollection.find(and(eq("type", "team_submission"), eq("course_id", request.getCourseID()), eq("team_name", request.getTeamID())))) { + //modify currentSubmission's members array to include the new member's ID + List curMembers = currentSubmission.getList("members", String.class); + curMembers.add(request.getStudentID()); + Bson submissionUpdate = Updates.set("members", curMembers); + UpdateOptions submissionOptions = new UpdateOptions().upsert(true); + submissionCollection.updateOne(submissionCollection.find(and(eq("assignment_id", currentSubmission.get("assignment_id")), eq("type", "team_submission"), eq("team_name", currentSubmission.get("team_name")))).first(), submissionUpdate, submissionOptions); + + } + + + //now get and modify peer reviews that the team submitted + for (Document currentSubmission : submissionCollection.find(and(eq("type", "peer_review_submission"), eq("course_id", request.getCourseID()), eq("reviewed_by", request.getTeamID())))) { + //modify currentSubmission's members array to include the new member's ID + List curMembers = currentSubmission.getList("reviewed_by_members", String.class); + curMembers.add(request.getStudentID()); + Bson submissionUpdate = Updates.set("reviewed_by_members", curMembers); + UpdateOptions submissionOptions = new UpdateOptions().upsert(true); + submissionCollection.updateOne(Objects.requireNonNull(submissionCollection.find(and(eq("assignment_id", currentSubmission.get("assignment_id")), eq("type", "peer_review_submission"), eq("reviewed_team", currentSubmission.get("reviewed_team")), eq("reviewed_by", currentSubmission.get("reviewed_by")))).first()), submissionUpdate, submissionOptions); + } + + + //now get and modify peer reviews that the team received + for (Document currentSubmission : submissionCollection.find(and(eq("type", "peer_review_submission"), eq("course_id", request.getCourseID()), eq("reviewed_team", request.getTeamID())))) { + //modify currentSubmission's members array to include the new member's ID + List curMembers = currentSubmission.getList("reviewed_team_members", String.class); + curMembers.add(request.getStudentID()); + Bson submissionUpdate = Updates.set("reviewed_team_members", curMembers); + UpdateOptions submissionOptions = new UpdateOptions().upsert(true); + submissionCollection.updateOne(Objects.requireNonNull(submissionCollection.find(and(eq("assignment_id", currentSubmission.get("assignment_id")), eq("type", "peer_review_submission"), eq("reviewed_team", currentSubmission.get("reviewed_team")), eq("reviewed_by", currentSubmission.get("reviewed_by")))).first()), submissionUpdate, submissionOptions); + } + } /* Deprecated */ @@ -160,7 +258,7 @@ public void switchTeam(SwitchTeamParam request) { if (courseDocument == null) throw new CPRException(Response.Status.NOT_FOUND, "Course not found."); new SecurityService().switchTeamSecurity(teamCollection, courseDocument, request); - Bson currentTeamDocumentFilter = Filters.and(eq("team_id", request.getCurrentTeamID()), eq("course_id", request.getCourseID())); + Bson currentTeamDocumentFilter = and(eq("team_id", request.getCurrentTeamID()), eq("course_id", request.getCourseID())); Document currentTeamDocument = teamCollection.find(currentTeamDocumentFilter).first(); if (currentTeamDocument == null) throw new CPRException(Response.Status.NOT_FOUND, "Team not found."); @@ -183,7 +281,7 @@ public void switchTeam(SwitchTeamParam request) { teamCollection.updateOne(currentTeamDocumentFilter, currentTeamUpdates, currentTeamOptions); } - Bson targetTeamDocumentFilter = Filters.and(eq("team_id", request.getTargetTeamID()), eq("course_id", request.getCourseID())); + Bson targetTeamDocumentFilter = and(eq("team_id", request.getTargetTeamID()), eq("course_id", request.getCourseID())); Document targetTeamDocument = teamCollection.find(targetTeamDocumentFilter).first(); if (targetTeamDocument == null) throw new CPRException(Response.Status.NOT_FOUND, "Team not found."); @@ -203,7 +301,7 @@ public void giveUpTeamLead(TeamParam request) { if (courseDocument == null) throw new CPRException(Response.Status.NOT_FOUND, "Course not found."); new SecurityService().giveUpTeamLeadSecurity(teamCollection, courseDocument, request); - Bson teamDocumentFilter = Filters.and(eq("team_id", request.getTeamID()), eq("course_id", request.getCourseID())); + Bson teamDocumentFilter = and(eq("team_id", request.getTeamID()), eq("course_id", request.getCourseID())); Document teamDocument = teamCollection.find(teamDocumentFilter).first(); if (teamDocument == null) throw new CPRException(Response.Status.NOT_FOUND, "Team not found."); @@ -230,7 +328,7 @@ public void nominateTeamLead(TeamParam request) { if (courseDocument == null) throw new CPRException(Response.Status.NOT_FOUND, "Course not found."); new SecurityService().nominateTeamLeadSecurity(teamCollection, courseDocument, request); - Bson teamDocumentFilter = Filters.and(eq("team_id", request.getTeamID()), eq("course_id", request.getCourseID())); + Bson teamDocumentFilter = and(eq("team_id", request.getTeamID()), eq("course_id", request.getCourseID())); Document teamDocument = teamCollection.find(teamDocumentFilter).first(); if (teamDocument == null) throw new CPRException(Response.Status.NOT_FOUND, "Team not found."); @@ -259,7 +357,7 @@ public void memberConfirmToggle(TeamParam request) { if (courseDocument == null) throw new CPRException(Response.Status.NOT_FOUND, "Course not found."); new SecurityService().memberConfirmToggleSecurity(teamCollection, courseDocument, request); - Bson teamDocumentFilter = Filters.and(eq("team_id", request.getTeamID()), eq("course_id", request.getCourseID())); + Bson teamDocumentFilter = and(eq("team_id", request.getTeamID()), eq("course_id", request.getCourseID())); Document teamDocument = teamCollection.find(teamDocumentFilter).first(); List teamConfirmedMembers = teamDocument.getList("team_confirmed_members", String.class); @@ -277,7 +375,7 @@ public void generateTeamName(SecurityContext securityContext, TeamParam request) if (courseDocument == null) throw new CPRException(Response.Status.NOT_FOUND, "Course not found."); new SecurityService().generateTeamNameSecurity(securityContext, teamCollection, courseDocument, request); - Bson teamDocumentFilter = Filters.and(eq("team_id", request.getTeamID()), eq("course_id", request.getCourseID())); + Bson teamDocumentFilter = and(eq("team_id", request.getTeamID()), eq("course_id", request.getCourseID())); Bson teamNameUpdates = Updates.combine( Updates.set("team_id", request.getTeamName()), Updates.set("team_lock", true)); @@ -291,7 +389,7 @@ public void removeTeamMember(@Context SecurityContext securityContext, TeamParam new IdentifyingService().identifyingProfessorService(securityContext, courseCollection, request.getCourseID()); new SecurityService().removeTeamMemberSecurity(teamCollection, courseDocument, request); - Bson teamDocumentFilter = Filters.and(eq("team_id", request.getTeamID()), eq("course_id", request.getCourseID())); + Bson teamDocumentFilter = and(eq("team_id", request.getTeamID()), eq("course_id", request.getCourseID())); Document teamDocument = teamCollection.find(teamDocumentFilter).first(); if (teamDocument == null) throw new CPRException(Response.Status.NOT_FOUND, "Team not found."); @@ -316,7 +414,7 @@ public void toggleTeamLock(TeamParam request) { if (!new SecurityService().isTeamCreated(teamCollection, request.getTeamID(), request.getCourseID())) throw new CPRException(Response.Status.NOT_FOUND, "Team not found."); - Bson teamDocumentFilter = Filters.and(eq("team_id", request.getTeamID()), eq("course_id", request.getCourseID())); + Bson teamDocumentFilter = and(eq("team_id", request.getTeamID()), eq("course_id", request.getCourseID())); Document teamDocument = teamCollection.find(teamDocumentFilter).first(); if (teamDocument == null) throw new CPRException(Response.Status.NOT_FOUND, "Team not found."); @@ -338,7 +436,7 @@ public void editTeamName(TeamParam request) { if (courseDocument == null) throw new CPRException(Response.Status.NOT_FOUND, "Course not found."); new SecurityService().editTeamNameSecurity(teamCollection, request); - Bson teamDocumentFilter = Filters.and(eq("team_id", request.getTeamID()), eq("course_id", request.getCourseID())); + Bson teamDocumentFilter = and(eq("team_id", request.getTeamID()), eq("course_id", request.getCourseID())); Bson editTeamNameUpdates = Updates.combine( Updates.set("team_id", request.getTeamName()), Updates.set("team_lock", true) @@ -358,7 +456,7 @@ public void editTeamSize(TeamParam request) { Document courseDocument = courseCollection.find(eq("course_id", request.getCourseID())).first(); if (courseDocument == null) throw new CPRException(Response.Status.NOT_FOUND, "Course not found."); new SecurityService().editTeamSizeSecurity(teamCollection, request); - Bson teamDocumentFilter = Filters.and(eq("team_id", request.getTeamID()), eq("course_id", request.getCourseID())); + Bson teamDocumentFilter = and(eq("team_id", request.getTeamID()), eq("course_id", request.getCourseID())); Bson editTeamSizeUpdates = Updates.set("team_size", request.getTeamSize()); teamCollection.updateOne(teamDocumentFilter, editTeamSizeUpdates); } @@ -368,7 +466,7 @@ public void assignTeamLead(TeamParam request) { if (courseDocument == null) throw new CPRException(Response.Status.NOT_FOUND, "Course not found."); new SecurityService().assignTeamLeadSecurity(teamCollection, courseDocument, request); - Bson teamDocumentFilter = Filters.and(eq("team_id", request.getTeamID()), eq("course_id", request.getCourseID())); + Bson teamDocumentFilter = and(eq("team_id", request.getTeamID()), eq("course_id", request.getCourseID())); Document teamDocument = teamCollection.find(teamDocumentFilter).first(); if (teamDocument == null) throw new CPRException(Response.Status.NOT_FOUND, "Team not found."); @@ -397,7 +495,7 @@ public void deleteTeam(SecurityContext securityContext, TeamParam request) { new IdentifyingService().identifyingProfessorService(securityContext, courseCollection, request.getCourseID()); if (!new SecurityService().isTeamCreated(teamCollection, request.getTeamID(), request.getCourseID())) throw new CPRException(Response.Status.NOT_FOUND, "Team not found."); - Bson teamDocumentFilter = Filters.and(eq("team_id", request.getTeamID()), eq("course_id", request.getCourseID())); + Bson teamDocumentFilter = and(eq("team_id", request.getTeamID()), eq("course_id", request.getCourseID())); teamCollection.deleteOne(teamDocumentFilter); } @@ -413,4 +511,4 @@ public List getAllStudentsInThisCourse(String courseID) { } return students; } -} \ No newline at end of file +} diff --git a/backend/peer-review-teams-microservice/src/main/java/edu/oswego/cs/requests/SwitchTeamParam.java b/backend/peer-review-teams-microservice/src/main/java/edu/oswego/cs/requests/SwitchTeamParam.java old mode 100644 new mode 100755 diff --git a/backend/peer-review-teams-microservice/src/main/java/edu/oswego/cs/requests/TeamParam.java b/backend/peer-review-teams-microservice/src/main/java/edu/oswego/cs/requests/TeamParam.java old mode 100644 new mode 100755 diff --git a/backend/peer-review-teams-microservice/src/main/java/edu/oswego/cs/resources/ProfessorTeamResources.java b/backend/peer-review-teams-microservice/src/main/java/edu/oswego/cs/resources/ProfessorTeamResources.java old mode 100644 new mode 100755 index 2d5e557bf..3cd4d6f5f --- a/backend/peer-review-teams-microservice/src/main/java/edu/oswego/cs/resources/ProfessorTeamResources.java +++ b/backend/peer-review-teams-microservice/src/main/java/edu/oswego/cs/resources/ProfessorTeamResources.java @@ -3,6 +3,7 @@ import javax.annotation.security.DenyAll; import javax.annotation.security.RolesAllowed; import javax.ws.rs.Consumes; +import javax.ws.rs.POST; import javax.ws.rs.DELETE; import javax.ws.rs.GET; import javax.ws.rs.PUT; @@ -20,6 +21,18 @@ @Path("teams/professor/team") @DenyAll public class ProfessorTeamResources { + /** + * Endpoint to create course by proffessor + */ + @POST + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + @Path("{student_id}/create") + @RolesAllowed("professor") + public Response createTeamProffessor(@Context SecurityContext securityContext, TeamParam request, @PathParam("student_id") String studentID) { + new TeamInterface().createTeamProffessor(securityContext, request, studentID); + return Response.status(Response.Status.CREATED).entity("Team successfully created.").build(); + } @GET @Produces(MediaType.APPLICATION_JSON) diff --git a/backend/peer-review-teams-microservice/src/main/java/edu/oswego/cs/resources/StudentTeamResources.java b/backend/peer-review-teams-microservice/src/main/java/edu/oswego/cs/resources/StudentTeamResources.java old mode 100644 new mode 100755 diff --git a/backend/peer-review-teams-microservice/src/main/java/edu/oswego/cs/services/IdentifyingService.java b/backend/peer-review-teams-microservice/src/main/java/edu/oswego/cs/services/IdentifyingService.java old mode 100644 new mode 100755 index eb3bc8288..de67ae487 --- a/backend/peer-review-teams-microservice/src/main/java/edu/oswego/cs/services/IdentifyingService.java +++ b/backend/peer-review-teams-microservice/src/main/java/edu/oswego/cs/services/IdentifyingService.java @@ -7,6 +7,7 @@ import javax.ws.rs.core.Response; import javax.ws.rs.core.SecurityContext; +import java.util.ArrayList; public class IdentifyingService { public void identifyingStudentService(SecurityContext securityContext, String studentID) { @@ -17,14 +18,30 @@ public void identifyingStudentService(SecurityContext securityContext, String st } } - public void identifyingProfessorService(SecurityContext securityContext, MongoCollection courseCollection, String courseID) { + public void identifyingProfessorAsStudentService(SecurityContext securityContext, MongoCollection courseCollection, String courseID) { if (securityContext.isUserInRole("professor")) { String userID = securityContext.getUserPrincipal().getName().split("@")[0]; Document courseDocument = courseCollection.find(Filters.eq("course_id", courseID)).first(); if (courseDocument == null) throw new CPRException(Response.Status.NOT_FOUND, "This professor does not exist."); String professorID = courseDocument.getString("professor_id"); - if (!userID.equals(professorID)) + if (!userID.equals(professorID)) { + ArrayList students = (ArrayList) courseDocument.get("students"); + for(String student: students){ + if(student.equals(userID)) + return; + } throw new CPRException(Response.Status.FORBIDDEN, "User principal name doesn't match"); + } + } + } + + public void identifyingProfessorService(SecurityContext securityContext, MongoCollection courseCollection, String courseID) { + if (securityContext.isUserInRole("professor")) { + String userID = securityContext.getUserPrincipal().getName().split("@")[0]; + Document courseDocument = courseCollection.find(Filters.eq("course_id", courseID)).first(); + if (courseDocument == null) throw new CPRException(Response.Status.NOT_FOUND, "This course does not exist."); + String professorID = courseDocument.getString("professor_id"); + if (!userID.equals(professorID)) throw new CPRException(Response.Status.FORBIDDEN, "User principal name doesn't match"); } } } diff --git a/backend/peer-review-teams-microservice/src/main/java/edu/oswego/cs/services/SecurityService.java b/backend/peer-review-teams-microservice/src/main/java/edu/oswego/cs/services/SecurityService.java old mode 100644 new mode 100755 diff --git a/backend/peer-review-teams-microservice/src/main/java/edu/oswego/cs/services/TeamService.java b/backend/peer-review-teams-microservice/src/main/java/edu/oswego/cs/services/TeamService.java old mode 100644 new mode 100755 diff --git a/backend/peer-review-teams-microservice/src/main/java/edu/oswego/cs/util/CPRException.java b/backend/peer-review-teams-microservice/src/main/java/edu/oswego/cs/util/CPRException.java old mode 100644 new mode 100755 diff --git a/backend/peer-review-teams-microservice/src/main/liberty/config/server.xml b/backend/peer-review-teams-microservice/src/main/liberty/config/server.xml old mode 100644 new mode 100755 diff --git a/backend/peer-review-teams-microservice/src/test/java/TeamsTests.java b/backend/peer-review-teams-microservice/src/test/java/TeamsTests.java old mode 100644 new mode 100755 index d10b2ac3f..f863ab79b --- a/backend/peer-review-teams-microservice/src/test/java/TeamsTests.java +++ b/backend/peer-review-teams-microservice/src/test/java/TeamsTests.java @@ -1,2 +1,38 @@ -public class TeamsTests { -} +import edu.oswego.cs.daos.CourseDAO; +import edu.oswego.cs.daos.StudentDAO; +import edu.oswego.cs.daos.TeamDAO; +import edu.oswego.cs.database.CourseInterface; +import edu.oswego.cs.database.TeamInterface; +import edu.oswego.cs.requests.TeamParam; + + public class TeamsTests { + @Test + /** + * Test case for createTeamProffessor + * Creates test parameters by: + * Create a test courese, add student to test course,Create team parameter with studentID and teamName,Create security context + * Calls createTeamProffessor with created test paramaters + * Verify team created and team member inserted + */ + public void testTeamCreation() { + CourseDAO course = new CourseDAO("CSC578", "Software Engineering", "800", "12345", "Fall", "2024"); + CourseInterface courseInterface = new CourseInterface(); + courseInterface.addCourse(null, course); + String email = "timmyTest@oswego.edu"; + StudentDAO studentDAO = new StudentDAO(email, course.abbreviation, course.courseName, course.courseSection, + course.crn, course.semester, course.year); + courseInterface.addStudent(null, studentDAO, course.courseID); + TeamParam teamParam = new TeamParam(); + teamParam.setCourseID(course.courseID); + teamParam.setTeamName("Test Team"); + String studentID = email; + SecurityContext securityContext = mock(SecurityContext.class); + TeamInterface teamInterface = new TeamInterface(); + teamInterface.createTeamProffessor(securityContext, teamParam, studentID); + TeamDAO insertedTeam = teamInterface.getTeamsByCourseID(course.courseID).get(0); + assertEquals(teamParam.getTeamName(), insertedTeam.getTeamName()); + assertEquals(teamParam.getCourseID(), insertedTeam.getCourseID()); + assertEquals(1, insertedTeam.getTeamMembers().size()); + assertTrue(insertedTeam.getTeamMembers().contains(studentID)); + } + } diff --git a/backend/professor-assignment-microservice/.dockerignore b/backend/professor-assignment-microservice/.dockerignore old mode 100644 new mode 100755 diff --git a/backend/professor-assignment-microservice/Dockerfile b/backend/professor-assignment-microservice/Dockerfile old mode 100644 new mode 100755 diff --git a/backend/professor-assignment-microservice/pom.xml b/backend/professor-assignment-microservice/pom.xml old mode 100644 new mode 100755 index 0cf151ba6..a0771fc49 --- a/backend/professor-assignment-microservice/pom.xml +++ b/backend/professor-assignment-microservice/pom.xml @@ -15,7 +15,25 @@ UTF-8 + + + MavenCentralRepo + Maven Central Repository + https://repo1.maven.org/maven2/ + + + AsposeJavaAPI + Aspose Java API + https://repository.aspose.com/repo/ + + + + + com.aspose + aspose-pdf + 20.7 + org.mongodb mongo-java-driver @@ -46,7 +64,7 @@ com.ibm.websphere.appserver.api com.ibm.websphere.appserver.api.jaxrs20 - 1.1.54 + 1.1.74 provided @@ -83,6 +101,11 @@ 1.0.0-RC1 runtime + + com.ibm.websphere.appserver.spi + com.ibm.websphere.appserver.spi.logging + 1.1.74 + jakarta.platform jakarta.jakartaee-api @@ -99,6 +122,11 @@ maven-war-plugin 3.3.2 + + org.apache.maven.plugins + maven-surefire-plugin + 2.22.2 + io.openliberty.tools liberty-maven-plugin diff --git a/backend/professor-assignment-microservice/professor-assignment-microservice.iml b/backend/professor-assignment-microservice/professor-assignment-microservice.iml new file mode 100644 index 000000000..8c54e3b0b --- /dev/null +++ b/backend/professor-assignment-microservice/professor-assignment-microservice.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/backend/professor-assignment-microservice/src/main/java/edu/oswego/cs/rest/application/ProfessorAssignmentApplication.java b/backend/professor-assignment-microservice/src/main/java/edu/oswego/cs/rest/application/ProfessorAssignmentApplication.java old mode 100644 new mode 100755 diff --git a/backend/professor-assignment-microservice/src/main/java/edu/oswego/cs/rest/cors/CorsFilter.java b/backend/professor-assignment-microservice/src/main/java/edu/oswego/cs/rest/cors/CorsFilter.java old mode 100644 new mode 100755 diff --git a/backend/professor-assignment-microservice/src/main/java/edu/oswego/cs/rest/daos/AssignmentDAO.java b/backend/professor-assignment-microservice/src/main/java/edu/oswego/cs/rest/daos/AssignmentDAO.java old mode 100644 new mode 100755 index 54f89413a..6a084b0d4 --- a/backend/professor-assignment-microservice/src/main/java/edu/oswego/cs/rest/daos/AssignmentDAO.java +++ b/backend/professor-assignment-microservice/src/main/java/edu/oswego/cs/rest/daos/AssignmentDAO.java @@ -2,6 +2,10 @@ import lombok.NoArgsConstructor; import lombok.NonNull; +import org.bson.BsonBinary; +import org.bson.codecs.pojo.annotations.BsonId; +import org.bson.conversions.Bson; + import javax.json.bind.annotation.JsonbCreator; import javax.json.bind.annotation.JsonbProperty; import javax.persistence.Entity; @@ -21,10 +25,6 @@ public class AssignmentDAO { @JsonbProperty("peer_review_instructions") public String peerReviewInstructions; @JsonbProperty("peer_review_due_date") public String peerReviewDueDate; @JsonbProperty("peer_review_points") public int peerReviewPoints; - @JsonbProperty("assignment_instructions") public String assignmentInstruction = ""; - @JsonbProperty("peer_review_template") public String peerReviewTemplate = ""; - @JsonbProperty("peer_review_rubric") public String peerReviewRubric = ""; - @JsonbCreator public AssignmentDAO( @NonNull @JsonbProperty("course_id") String courseID, diff --git a/backend/professor-assignment-microservice/src/main/java/edu/oswego/cs/rest/daos/AssignmentNoPeerReviewDAO.java b/backend/professor-assignment-microservice/src/main/java/edu/oswego/cs/rest/daos/AssignmentNoPeerReviewDAO.java new file mode 100755 index 000000000..011fdd45f --- /dev/null +++ b/backend/professor-assignment-microservice/src/main/java/edu/oswego/cs/rest/daos/AssignmentNoPeerReviewDAO.java @@ -0,0 +1,32 @@ +package edu.oswego.cs.rest.daos; + +import lombok.NonNull; + +import javax.json.bind.annotation.JsonbCreator; +import javax.json.bind.annotation.JsonbProperty; +import javax.persistence.Id; + +public class AssignmentNoPeerReviewDAO { + @Id + @JsonbProperty("course_id") public String courseID; + @JsonbProperty("assignment_name") public String assignmentName; + @JsonbProperty("assignment_id") public int assignmentID; + @JsonbProperty("instructions") public String instructions; + @JsonbProperty("due_date") public String dueDate; + @JsonbProperty("points") public int points; + @JsonbCreator + public AssignmentNoPeerReviewDAO( + @NonNull @JsonbProperty("course_id") String courseID, + @NonNull @JsonbProperty("assignment_name") String assignmentName, + @NonNull @JsonbProperty("instructions") String instructions, + @NonNull @JsonbProperty("due_date") String dueDate, + @NonNull @JsonbProperty("points") Integer points + ) + { + this.assignmentName = assignmentName; + this.courseID = courseID; + this.dueDate = dueDate; + this.instructions = instructions; + this.points = points; + } +} diff --git a/backend/professor-assignment-microservice/src/main/java/edu/oswego/cs/rest/daos/FileDAO.java b/backend/professor-assignment-microservice/src/main/java/edu/oswego/cs/rest/daos/FileDAO.java old mode 100644 new mode 100755 index 168c0d4b4..349a128c6 --- a/backend/professor-assignment-microservice/src/main/java/edu/oswego/cs/rest/daos/FileDAO.java +++ b/backend/professor-assignment-microservice/src/main/java/edu/oswego/cs/rest/daos/FileDAO.java @@ -19,16 +19,6 @@ public class FileDAO { @JsonbProperty public String courseID; @JsonbProperty public InputStream file; - @JsonbCreator - public FileDAO( - @NonNull @JsonbProperty("file_name") String fileName, - @NonNull @JsonbProperty("assignment_id") int assignmentID, - @NonNull @JsonbProperty("course_id") String courseID) { - this.fileName = fileName; - this.assignmentID = assignmentID; - this.courseID = courseID; - } - public FileDAO( @NonNull @JsonbProperty("file_name") String fileName, @NonNull @JsonbProperty("assignment_id") int assignmentID, @@ -55,13 +45,4 @@ public static FileDAO fileFactory(String fileName, String courseID, IAttachment InputStream inputStream = attachment.getDataHandler().getInputStream(); return new FileDAO(fileName, assignmentID, courseID, inputStream); } - - /** - * Writes the inputStream to a file. - */ - public void writeFile(String filePath) throws IOException { - OutputStream outputStream = new FileOutputStream(filePath); - outputStream.write(file.readAllBytes()); - outputStream.close(); - } } \ No newline at end of file diff --git a/backend/professor-assignment-microservice/src/main/java/edu/oswego/cs/rest/daos/PeerReviewAddOnDAO.java b/backend/professor-assignment-microservice/src/main/java/edu/oswego/cs/rest/daos/PeerReviewAddOnDAO.java new file mode 100755 index 000000000..aa6e7af18 --- /dev/null +++ b/backend/professor-assignment-microservice/src/main/java/edu/oswego/cs/rest/daos/PeerReviewAddOnDAO.java @@ -0,0 +1,24 @@ +package edu.oswego.cs.rest.daos; + +import lombok.NonNull; + +import javax.json.bind.annotation.JsonbCreator; +import javax.json.bind.annotation.JsonbProperty; + +public class PeerReviewAddOnDAO { + @JsonbProperty("peer_review_instructions") public String peerReviewInstructions; + @JsonbProperty("peer_review_due_date") public String peerReviewDueDate; + @JsonbProperty("peer_review_points") public int peerReviewPoints; + + @JsonbCreator + public PeerReviewAddOnDAO( + @NonNull @JsonbProperty("peer_review_instructions") String peerReviewInstructions, + @NonNull @JsonbProperty("peer_review_due_date") String peerReviewDueDate, + @NonNull @JsonbProperty("peer_review_points") Integer peerReviewPoints + ) + { + this.peerReviewInstructions = peerReviewInstructions; + this.peerReviewDueDate = peerReviewDueDate; + this.peerReviewPoints = peerReviewPoints; + } +} diff --git a/backend/professor-assignment-microservice/src/main/java/edu/oswego/cs/rest/database/AssignmentInterface.java b/backend/professor-assignment-microservice/src/main/java/edu/oswego/cs/rest/database/AssignmentInterface.java old mode 100644 new mode 100755 index d79b3e6ac..8c7eaf25b --- a/backend/professor-assignment-microservice/src/main/java/edu/oswego/cs/rest/database/AssignmentInterface.java +++ b/backend/professor-assignment-microservice/src/main/java/edu/oswego/cs/rest/database/AssignmentInterface.java @@ -4,10 +4,13 @@ import com.mongodb.client.MongoCursor; import com.mongodb.client.MongoDatabase; import edu.oswego.cs.rest.daos.AssignmentDAO; +import edu.oswego.cs.rest.daos.AssignmentNoPeerReviewDAO; import edu.oswego.cs.rest.daos.FileDAO; +import edu.oswego.cs.rest.daos.PeerReviewAddOnDAO; import edu.oswego.cs.rest.util.CPRException; import org.apache.commons.io.FileUtils; import org.bson.Document; +import org.bson.types.Binary; import javax.json.bind.Jsonb; import javax.json.bind.JsonbBuilder; @@ -42,147 +45,280 @@ public AssignmentInterface() { } } + /** - * Retrieves the relative location of the root Directory + * Write file binary data and file name of the assignment instructions to its respective assignment document in the + * database. * - * @return String directory location the hw files should be saved to + * @param fileDAO type FileDAO: Representation of File Data */ - public static String getRelPath() { - String path = (System.getProperty("user.dir").contains("\\")) ? System.getProperty("user.dir").replace("\\", "/") : System.getProperty("user.dir"); - String[] slicedPath = path.split("/"); - String targetDir = "defaultServer"; - StringBuilder relativePathPrefix = new StringBuilder(); - for (int i = slicedPath.length - 1; !slicedPath[i].equals(targetDir); i--) { - relativePathPrefix.append("../"); - } - reg = "\\"; - if (System.getProperty("os.name").toLowerCase().contains("win")||(System.getProperty("os.name").toLowerCase().contains("nux") && System.getProperty("os.version").contains("WSL"))) { - reg = "/"; - relativePathPrefix = new StringBuilder(relativePathPrefix.toString().replace("\\", "/")); - } - return relativePathPrefix.toString(); + + /** + * Write file binary data and file name of the assignment instructions to its respective assignment document in the + * database. + * + * @param fileDAO type FileDAO: Representation of File Data + */ + + public void writeToAssignment(FileDAO fileDAO) throws IOException { + //the line below will get the document we are searching for + Document result = assignmentsCollection.find(and(eq("course_id", fileDAO.courseID), eq("assignment_id", fileDAO.assignmentID))).first(); + //makes sure the result isn't null + if (result == null) throw new CPRException(Response.Status.BAD_REQUEST,"No assignment found"); + + //add the assignment instructions binary data and file name to the database + result.append("assignment_instructions_data", Base64.getDecoder().decode(new String(fileDAO.file.readAllBytes()))); + result.append("assignment_instructions_name", fileDAO.fileName); + assignmentsCollection.replaceOne(and(eq("course_id", fileDAO.courseID), eq("assignment_id", fileDAO.assignmentID)), result); } - public static String findFile(String courseID, int assignmentID, String fileName) { - return getRelPath() + "assignments" + reg + courseID + reg + assignmentID + reg + "assignments" + reg + fileName; + /** + * + * @param fileDAO + * @throws IOException + */ + public void writeRubricToPeerReviews(FileDAO fileDAO) throws IOException { + //the line below will get the document we are searching for + Document result = assignmentsCollection.find(and(eq("course_id", fileDAO.courseID), eq("assignment_id", fileDAO.assignmentID))).first(); + //makes sure the result isn't null + if (result == null) throw new CPRException(Response.Status.BAD_REQUEST,"No assignment found"); + + //add the assignment instructions binary data and file name to the database + result.append("rubric_data", Base64.getDecoder().decode(new String(fileDAO.file.readAllBytes()))); + result.append("rubric_name", fileDAO.fileName); + assignmentsCollection.replaceOne(and(eq("course_id", fileDAO.courseID), eq("assignment_id", fileDAO.assignmentID)), result); } - public static String findPeerReviewFile(String courseID, int assignmentID, String fileName) { - String filePath = getRelPath() + "assignments" + reg + courseID + reg + assignmentID + reg + "peer-reviews" + reg + fileName; - if (!new File(filePath).exists()) - throw new CPRException(Response.Status.BAD_REQUEST,filePath + "does not exist"); - return filePath; + /** + * + * @param fileDAO + * @throws IOException + */ + public void writeTemplateToPeerReviews(FileDAO fileDAO) throws IOException { + //the line below will get the document we are searching for + Document result = assignmentsCollection.find(and(eq("course_id", fileDAO.courseID), eq("assignment_id", fileDAO.assignmentID))).first(); + //makes sure the result isn't null + if (result == null) throw new CPRException(Response.Status.BAD_REQUEST,"No assignment found"); + + //add the assignment instructions binary data and file name to the database + result.append("peer_review_template_data", Base64.getDecoder().decode(new String(fileDAO.file.readAllBytes()))); + result.append("peer_review_template_name", fileDAO.fileName); + assignmentsCollection.replaceOne(and(eq("course_id", fileDAO.courseID), eq("assignment_id", fileDAO.assignmentID)), result); } - public void writeToAssignment(FileDAO fileDAO) throws IOException { - String FileStructure = getRelPath() + "assignments" + reg + fileDAO.courseID + reg + fileDAO.assignmentID + reg + "assignments"; - fileDAO.writeFile(FileStructure + reg + fileDAO.fileName); - assignmentsCollection.updateOne(and( - eq("course_id", fileDAO.courseID), - eq("assignment_id", fileDAO.assignmentID)), - set("assignment_instructions", fileDAO.fileName)); + + /** + * Grabs the binary data of the assignment instructions for the respective assignment + * + * @param courseID type String + * @param assignmentID type Integer + */ + + public byte[] getInstructionFileData(String courseID, Integer assignmentID){ + Document result = assignmentsCollection.find(and(eq("course_id", courseID), eq("assignment_id", assignmentID))).first(); + //makes sure the result isn't null + if (result == null) throw new CPRException(Response.Status.BAD_REQUEST,"No assignment found"); + + //grab the assignment instructions data and return it, ensure the assignment instructions data exists first + if(!result.containsKey("assignment_instructions_data")) throw new CPRException(Response.Status.NOT_FOUND, "No assignment instruction data uploaded"); + + Binary data = (Binary) result.get("assignment_instructions_data"); + return data.getData(); } - public void writeRubricToPeerReviews(FileDAO fileDAO) throws IOException { - String FileStructure = getRelPath() + "assignments" + reg + fileDAO.courseID + reg + fileDAO.assignmentID + reg + "peer-reviews"; - fileDAO.writeFile(FileStructure + reg + fileDAO.fileName); - assignmentsCollection.updateOne(and( - eq("course_id", fileDAO.courseID), - eq("assignment_id", fileDAO.assignmentID)), - set("peer_review_rubric", fileDAO.fileName)); + /** + * Grabs the name of the instructions file + * + * @param courseID type String + * @param assignmentID type Integer + */ + + public String getInstructionFileName(String courseID, Integer assignmentID){ + Document result = assignmentsCollection.find(and(eq("course_id", courseID), eq("assignment_id", assignmentID))).first(); + //makes sure the result isn't null + if (result == null) throw new CPRException(Response.Status.BAD_REQUEST,"No assignment found"); + + //grab the assignment instructions data and return it, ensure the assignment instructions data exists first + if(!result.containsKey("assignment_instructions_name")) throw new CPRException(Response.Status.NOT_FOUND, "No assignment instruction data uploaded"); + + return (String) result.get("assignment_instructions_name"); } - public void writeTemplateToPeerReviews(FileDAO fileDAO) throws IOException { - String FileStructure = getRelPath() + "assignments" + reg + fileDAO.courseID + reg + fileDAO.assignmentID + reg + "peer-reviews"; - fileDAO.writeFile(FileStructure + reg + fileDAO.fileName); - assignmentsCollection.updateOne(and( - eq("course_id", fileDAO.courseID), - eq("assignment_id", fileDAO.assignmentID)), - set("peer_review_template", fileDAO.fileName)); + + /** + * Grabs the name of the rubric file + * + * @param courseID type String + * @param assignmentID type Integer + */ + + public String getRubricFileName(String courseID, Integer assignmentID){ + Document result = assignmentsCollection.find(and(eq("course_id", courseID), eq("assignment_id", assignmentID))).first(); + //makes sure the result isn't null + if (result == null) throw new CPRException(Response.Status.BAD_REQUEST,"No assignment found"); + + //grab the assignment instructions data and return it, ensure the assignment instructions data exists first + if(!result.containsKey("rubric_name")) throw new CPRException(Response.Status.NOT_FOUND, "No assignment instruction data uploaded"); + + return (String) result.get("rubric_name"); } - public void removeFile(String courseID, String fileName, int assignmentID) { - String fileLocation = findFile(courseID, assignmentID, fileName); - File file = new File(fileLocation); - if (!file.delete()) - throw new CPRException(Response.Status.BAD_REQUEST,"Assignment does not exist or could not be deleted."); - assignmentsCollection.updateOne(and(eq("course_id", courseID), - eq("assignment_id", assignmentID)), - set("assignment_instructions", "")); + + /** + * Grab the binary data of the assignment rubric for the respective assignment + * + * @param courseID type String + * @param assignmentID type Integer + */ + + public byte[] getRubricFileData(String courseID, Integer assignmentID){ + Document result = assignmentsCollection.find(and(eq("course_id", courseID), eq("assignment_id", assignmentID))).first(); + //makes sure the result isn't null + if (result == null) throw new CPRException(Response.Status.BAD_REQUEST,"No assignment found"); + + //grab the assignment instructions data and return it, ensure the assignment instructions data exists first + if(!result.containsKey("rubric_data")) throw new CPRException(Response.Status.NOT_FOUND, "No rubric data uploaded"); + + Binary data = (Binary) result.get("rubric_data"); + return data.getData(); } - public void removePeerReviewTemplate(String courseID, String fileName, int assignmentID) { - String fileLocation = findPeerReviewFile(courseID, assignmentID, fileName); - File file = new File(fileLocation); - if (!file.delete()) - throw new CPRException(Response.Status.BAD_REQUEST,"Assignment does not exist or could not be deleted."); - assignmentsCollection.updateOne(and( - eq("course_id", courseID), - eq("assignment_id", assignmentID)), - set("peer_review_template", "")); + + /** + * Grabs the name of the rubric file + * + * @param courseID type String + * @param assignmentID type Integer + */ + + public String getTemplateFileName(String courseID, Integer assignmentID){ + Document result = assignmentsCollection.find(and(eq("course_id", courseID), eq("assignment_id", assignmentID))).first(); + //makes sure the result isn't null + if (result == null) throw new CPRException(Response.Status.BAD_REQUEST,"No assignment found"); + + //grab the assignment instructions data and return it, ensure the assignment instructions data exists first + if(!result.containsKey("peer_review_template_name")) throw new CPRException(Response.Status.NOT_FOUND, "No assignment instruction data uploaded"); + + return (String) result.get("peer_review_template_name"); } - public void removePeerReviewRubric(String courseID, String fileName, int assignmentID) { - String fileLocation = findPeerReviewFile(courseID, assignmentID, fileName); - File file = new File(fileLocation); - if (!file.delete()) - throw new CPRException(Response.Status.BAD_REQUEST,"Assignment does not exist or could not be deleted."); - assignmentsCollection.updateOne(and( - eq("course_id", courseID), - eq("assignment_id", assignmentID)), - set("peer_review_rubric", "")); + /** + * Grabs the binary data of the peer review template for the respective assignment + * + * @param courseID type String + * @param assignmentID type Integer + */ + + public byte[] getPeerReviewTemplateData(String courseID, Integer assignmentID){ + Document result = assignmentsCollection.find(and(eq("course_id", courseID), eq("assignment_id", assignmentID))).first(); + //makes sure the result isn't null + if (result == null) throw new CPRException(Response.Status.BAD_REQUEST,"No assignment found"); + + //grab the assignment instructions data and return it, ensure the assignment instructions data exists first + if(!result.containsKey("peer_review_template_data")) throw new CPRException(Response.Status.NOT_FOUND, "No template data uploaded"); + + Binary data = (Binary) result.get("peer_review_template_data"); + return data.getData(); } - public Document createAssignment(AssignmentDAO assignmentDAO) throws IOException { - Document courseDocument = courseCollection.find(eq("course_id", assignmentDAO.courseID)).first(); - if (courseDocument == null) throw new CPRException(Response.Status.BAD_REQUEST,"Course not found."); - String FileStructure = getRelPath() + "assignments" + reg + assignmentDAO.courseID; + public void removeFile(String courseID, int assignmentID) { + Document result = assignmentsCollection.find(and(eq("course_id", courseID), eq("assignment_id", assignmentID))).first(); + //makes sure the result isn't null + if (result == null) throw new CPRException(Response.Status.BAD_REQUEST,"No assignment found"); + + //grab the assignment instructions data and return it, ensure the assignment instructions data exists first + if(!result.containsKey("assignment_instructions_data")) throw new CPRException(Response.Status.NOT_FOUND, "No template data uploaded"); + //add the assignment instructions binary data and file name to the database + result.remove("assignment_instructions_data"); + result.remove("assignment_instructions_name"); + assignmentsCollection.replaceOne(and(eq("course_id", courseID), eq("assignment_id", assignmentID)), result); + } + + public void removePeerReviewTemplate(String courseID, int assignmentID) { + Document result = assignmentsCollection.find(and(eq("course_id", courseID), eq("assignment_id", assignmentID))).first(); + //makes sure the result isn't null + if (result == null) throw new CPRException(Response.Status.BAD_REQUEST,"No assignment found"); + + //grab the assignment instructions data and return it, ensure the assignment instructions data exists first + if(!result.containsKey("peer_review_template_data")) throw new CPRException(Response.Status.NOT_FOUND, "No template data uploaded"); + //add the assignment instructions binary data and file name to the database + result.remove("peer_review_template_data"); + result.remove("peer_review_template_name"); + assignmentsCollection.replaceOne(and(eq("course_id", courseID), eq("assignment_id", assignmentID)), result); + } - File dir = new File(FileStructure); - if (!dir.mkdirs() && !dir.exists()) throw new CPRException(Response.Status.BAD_REQUEST,"Failed to create directory at" + dir.getAbsolutePath()); + public void removePeerReviewRubric(String courseID, int assignmentID) { + Document result = assignmentsCollection.find(and(eq("course_id", courseID), eq("assignment_id", assignmentID))).first(); + //makes sure the result isn't null + if (result == null) throw new CPRException(Response.Status.BAD_REQUEST,"No assignment found"); + + //grab the assignment instructions data and return it, ensure the assignment instructions data exists first + if(!result.containsKey("rubric_data")) throw new CPRException(Response.Status.NOT_FOUND, "No template data uploaded"); + //add the assignment instructions binary data and file name to the database + result.remove("rubric_data"); + result.remove("rubric_name"); + assignmentsCollection.replaceOne(and(eq("course_id", courseID), eq("assignment_id", assignmentID)), result); + } - String[] dirList = dir.list(); - if (dirList == null) throw new CPRException(Response.Status.BAD_REQUEST,"Directory must exist to make file structure."); + /** + * Creates the assignment data based on the POST request's sent data. Previously, this function would make + * a file structure on the host machine to store the PDFs. Now it just stores the assignment data JSON + * and the writeToAssignment function handles writing the Assignment PDF data in the database. + * + * @param assignmentDAO type AssignmentDAO: Representation of Assignment Data + * @return Document + */ + public Document createAssignment(AssignmentDAO assignmentDAO) throws IOException { + Document courseDocument = courseCollection.find(eq("course_id", assignmentDAO.courseID)).first(); + if (courseDocument == null) throw new CPRException(Response.Status.BAD_REQUEST,"Course not found."); int nextPos = generateAssignmentID(); assignmentDAO.assignmentID = nextPos; - FileStructure += reg + nextPos; - if (!new File(FileStructure + reg + "team-submissions").mkdirs()) throw new CPRException(Response.Status.BAD_REQUEST,"Failed to create team-submission directory."); + Jsonb jsonb = JsonbBuilder.create(); + Entity assignmentDAOEntity = Entity.entity(jsonb.toJson(assignmentDAO), MediaType.APPLICATION_JSON_TYPE); + Document assignmentDocument = Document.parse(assignmentDAOEntity.getEntity()); + assignmentDocument + .append("submission_is_past_due", false) + .append("peer_review_is_past_due", false) + .append("grade_finalized", false) + .append("has_peer_review", true); - if (!new File(FileStructure + reg + "peer-reviews").mkdirs()) { - deleteFile(FileStructure + reg + "team-submissions"); - throw new CPRException(Response.Status.BAD_REQUEST,"Failed to create peer-review directory."); - } + MongoCursor query = assignmentsCollection.find(assignmentDocument).iterator(); + if (query.hasNext()) { + query.close(); - if (!new File(FileStructure + reg + "assignments").mkdirs()) { - deleteFile(FileStructure + reg + "team-submissions"); - deleteFile(FileStructure + reg + "peer-reviews"); - throw new CPRException(Response.Status.BAD_REQUEST,"Failed to create assignments directory"); + throw new CPRException(Response.Status.BAD_REQUEST,"This assignment already exists."); } - if (!new File(FileStructure + reg + "peer-review-submission").mkdirs()) { - deleteFile(FileStructure + reg + "team-submissions"); - deleteFile(FileStructure + reg + "peer-reviews"); - deleteFile(FileStructure + reg + "assignments"); - throw new CPRException(Response.Status.BAD_REQUEST,"Failed to create peer-review-submission directory"); - } + assignmentsCollection.insertOne(assignmentDocument); + return assignmentDocument; + } + + /** + *Creates assignment data for assignments without any peer review data + * + * @param assignmentDAO type AssignmentNoPeerReviewDAO: Representation of Assignment Data + * @return Document + */ + + public Document createAssignmentNoPeerReview(AssignmentNoPeerReviewDAO assignmentDAO) throws IOException { + Document courseDocument = courseCollection.find(eq("course_id", assignmentDAO.courseID)).first(); + if (courseDocument == null) throw new CPRException(Response.Status.BAD_REQUEST,"Course not found."); + int nextPos = generateAssignmentID(); + assignmentDAO.assignmentID = nextPos; Jsonb jsonb = JsonbBuilder.create(); Entity assignmentDAOEntity = Entity.entity(jsonb.toJson(assignmentDAO), MediaType.APPLICATION_JSON_TYPE); Document assignmentDocument = Document.parse(assignmentDAOEntity.getEntity()); assignmentDocument .append("submission_is_past_due", false) - .append("peer_review_is_past_due", false) - .append("grade_finalized", false); + .append("grade_finalized", false) + .append("has_peer_review", false); MongoCursor query = assignmentsCollection.find(assignmentDocument).iterator(); if (query.hasNext()) { query.close(); - deleteFile(FileStructure + reg + "team-submissions"); - deleteFile(FileStructure + reg + "peer-reviews"); - deleteFile(FileStructure + reg + "assignments"); - deleteFile(FileStructure + reg + "peer-review-submission"); throw new CPRException(Response.Status.BAD_REQUEST,"This assignment already exists."); } @@ -191,6 +327,26 @@ public Document createAssignment(AssignmentDAO assignmentDAO) throws IOException return assignmentDocument; } + /** + * Appends peer review data onto an assignment that previously had no peer review data + * + * @param courseID + * @param AssignmentID + * @param peerReviewAddOnDAO + */ + public String addPeerReviewDataToAssignment(String courseID, int AssignmentID, PeerReviewAddOnDAO peerReviewAddOnDAO){ + Document assignmentDocument = assignmentsCollection.find(and(eq("assignment_id", AssignmentID),eq("course_id", courseID))).first(); + if (assignmentDocument == null) throw new CPRException(Response.Status.BAD_REQUEST,"This assignment does not exist."); + assignmentDocument.append("peer_review_due_date", peerReviewAddOnDAO.peerReviewDueDate) + .append("peer_review_instructions", peerReviewAddOnDAO.peerReviewInstructions) + .append("peer_review_points", peerReviewAddOnDAO.peerReviewPoints) + .append("peer_review_is_past_due", false); + assignmentDocument.replace("has_peer_review", true); + + assignmentsCollection.replaceOne(and(eq("assignment_id", AssignmentID),eq("course_id", courseID)), assignmentDocument); + return (String) assignmentDocument.get("assignment_name"); + } + public List getAllAssignments() { MongoCursor query = assignmentsCollection.find().iterator(); List assignments = new ArrayList<>(); @@ -201,6 +357,12 @@ public List getAllAssignments() { return assignments; } + /** + * + * @param courseID + * @return + */ + public List getAssignmentsByCourse(String courseID) { MongoCursor query = assignmentsCollection.find(eq("course_id", courseID)).iterator(); if (!query.hasNext()) return Collections.emptyList(); @@ -213,6 +375,13 @@ public List getAssignmentsByCourse(String courseID) { return assignments; } + /** + * + * @param courseID + * @param AssignmentID + * @return + */ + public Document getSpecifiedAssignment(String courseID, int AssignmentID) { Document assignment = assignmentsCollection.find(and( eq("course_id", courseID), @@ -221,6 +390,13 @@ public Document getSpecifiedAssignment(String courseID, int AssignmentID) { return assignment; } + /** + * + * @param assignmentDAO + * @param courseID + * @param assignmentID + */ + public void updateAssignment(AssignmentDAO assignmentDAO, String courseID, int assignmentID) { Document assignmentDocument = assignmentsCollection.find(and(eq("assignment_id", assignmentID),eq("course_id", courseID))).first(); if (assignmentDocument == null) throw new CPRException(Response.Status.BAD_REQUEST,"This assignment does not exist."); @@ -235,6 +411,31 @@ public void updateAssignment(AssignmentDAO assignmentDAO, String courseID, int a assignmentsCollection.replaceOne(and(eq("assignment_id", assignmentID),eq("course_id", courseID)), assignmentDocument); } + /** + * Update an assignment's data that has no peer review + * + * @param assignmentNoPeerReviewDAO + * @param courseID + * @param assignmentID + */ + public void updateAssignmentWithNoPeerReview(AssignmentNoPeerReviewDAO assignmentNoPeerReviewDAO, String courseID, int assignmentID) { + Document assignmentDocument = assignmentsCollection.find(and(eq("assignment_id", assignmentID),eq("course_id", courseID))).first(); + if (assignmentDocument == null) throw new CPRException(Response.Status.BAD_REQUEST,"This assignment does not exist."); + assignmentDocument.replace("assignment_name", assignmentNoPeerReviewDAO.assignmentName); + assignmentDocument.replace("due_date", assignmentNoPeerReviewDAO.dueDate); + assignmentDocument.replace("instructions", assignmentNoPeerReviewDAO.instructions); + assignmentDocument.replace("points", assignmentNoPeerReviewDAO.points); + + assignmentsCollection.replaceOne(and(eq("assignment_id", assignmentID),eq("course_id", courseID)), assignmentDocument); + } + + /** + * + * @param AssignmentID + * @param courseID + * @throws IOException + */ + public void removeAssignment(int AssignmentID, String courseID) throws IOException { MongoCursor results = assignmentsCollection.find(and( eq("assignment_id", AssignmentID), @@ -243,7 +444,6 @@ public void removeAssignment(int AssignmentID, String courseID) throws IOExcepti while (results.hasNext()) { Document assignment = results.next(); - deleteFile(getRelPath() + "assignments" + reg + courseID + reg + assignment.get("assignment_id")); assignmentsCollection.findOneAndDelete(assignment); } removeSubmissions(AssignmentID, courseID); @@ -254,6 +454,12 @@ public void removeSubmissions(int AssignmentID, String courseID) throws IOExcept submissionCollection.findOneAndDelete(submissionDoc); } + /** + * + * @param courseID + * @throws IOException + */ + public void removeCourse(String courseID) throws IOException { MongoCursor results = assignmentsCollection.find(eq("course_id", courseID)).iterator(); if (!results.hasNext()) throw new CPRException(Response.Status.BAD_REQUEST,"No assignment by this name found."); @@ -262,13 +468,21 @@ public void removeCourse(String courseID) throws IOException { Document assignmentDocument = results.next(); assignmentsCollection.findOneAndDelete(assignmentDocument); } - - deleteFile(getRelPath() + "assignments" + reg + courseID); } - private static void deleteFile(String destination) throws IOException { - FileUtils.deleteDirectory(new File(destination)); - } + + /** + * + * Iterates the assignment id by one based on how many assignments currently exist in the DB + * + **/ + + + /** + * + * Iterates the assignment id by one based on how many assignments currently exist in the DB + * + **/ public int generateAssignmentID() { List assignmentsDocuments = getAllAssignments(); diff --git a/backend/professor-assignment-microservice/src/main/java/edu/oswego/cs/rest/database/DatabaseManager.java b/backend/professor-assignment-microservice/src/main/java/edu/oswego/cs/rest/database/DatabaseManager.java old mode 100644 new mode 100755 diff --git a/backend/professor-assignment-microservice/src/main/java/edu/oswego/cs/rest/resources/ProfessorAssignmentResource.java b/backend/professor-assignment-microservice/src/main/java/edu/oswego/cs/rest/resources/ProfessorAssignmentResource.java old mode 100644 new mode 100755 index e73e418cb..5d65f1f2d --- a/backend/professor-assignment-microservice/src/main/java/edu/oswego/cs/rest/resources/ProfessorAssignmentResource.java +++ b/backend/professor-assignment-microservice/src/main/java/edu/oswego/cs/rest/resources/ProfessorAssignmentResource.java @@ -2,7 +2,9 @@ import com.ibm.websphere.jaxrs20.multipart.IAttachment; import edu.oswego.cs.rest.daos.AssignmentDAO; +import edu.oswego.cs.rest.daos.AssignmentNoPeerReviewDAO; import edu.oswego.cs.rest.daos.FileDAO; +import edu.oswego.cs.rest.daos.PeerReviewAddOnDAO; import edu.oswego.cs.rest.database.AssignmentInterface; import org.bson.Document; @@ -13,12 +15,95 @@ import javax.ws.rs.core.Response; import java.io.File; import java.io.IOException; +import java.util.Base64; import java.util.List; @Path("professor") @DenyAll public class ProfessorAssignmentResource { + @POST + @RolesAllowed("professor") + @Consumes(MediaType.APPLICATION_JSON) + @Path("/courses/create-assignment") + public Response createAssignment(AssignmentDAO assignmentDAO) throws IOException { + Document assignmentDocument = new AssignmentInterface().createAssignment(assignmentDAO); + return Response.status(Response.Status.OK).entity(assignmentDocument).build(); + } + + /** + * Create an assignment with no initial peer review data + * + * @param assignmentNoPeerReviewDAO + * @return + * @throws IOException + */ + + @POST + @RolesAllowed("professor") + @Consumes(MediaType.APPLICATION_JSON) + @Path("/courses/create-assignment-no-peer-review") + public Response createAssignmentNoPeerReview(AssignmentNoPeerReviewDAO assignmentNoPeerReviewDAO) throws IOException { + Document assignmentDocument = new AssignmentInterface().createAssignmentNoPeerReview(assignmentNoPeerReviewDAO); + return Response.status(Response.Status.OK).entity(assignmentDocument).build(); + } + + + @DELETE + @RolesAllowed("professor") + @Path("/courses/{courseID}/assignments/{assignmentID}/remove") + public Response removeAssignment(@PathParam("assignmentID") int assignmentID, @PathParam("courseID") String courseID) throws IOException { + new AssignmentInterface().removeAssignment(assignmentID, courseID); + return Response.status(Response.Status.OK).entity("Assignment successfully deleted.").build(); + } + + @PUT + @RolesAllowed("professor") + @Consumes(MediaType.APPLICATION_JSON) + @Path("/courses/{courseID}/assignments/{assignmentID}/edit") + public Response updateAssignment(AssignmentDAO assignmentDAO, @PathParam("courseID") String courseID, @PathParam("assignmentID") int assignmentID) { + new AssignmentInterface().updateAssignment(assignmentDAO, courseID, assignmentID); + String response = assignmentDAO.courseID + ": " + assignmentDAO.assignmentName + " successfully updated."; + return Response.status(Response.Status.OK).entity(response).build(); + } + + /** + * Edit an assignment with no peer review data + * + * @param assignmentNoPeerReviewDAO + * @param courseID + * @param assignmentID + * @return + */ + + @PUT + @RolesAllowed("professor") + @Consumes(MediaType.APPLICATION_JSON) + @Path("/courses/{courseID}/assignments/{assignmentID}/editNoPeerReview") + public Response updateAssignmentNoPeerReview(AssignmentNoPeerReviewDAO assignmentNoPeerReviewDAO, @PathParam("courseID") String courseID, @PathParam("assignmentID") int assignmentID) { + new AssignmentInterface().updateAssignmentWithNoPeerReview(assignmentNoPeerReviewDAO, courseID, assignmentID); + String response = assignmentNoPeerReviewDAO.courseID + ": " + assignmentNoPeerReviewDAO.assignmentName + " successfully updated."; + return Response.status(Response.Status.OK).entity(response).build(); + } + + + /** + * Add peer review data to an assignment that has none + * + * @param peerReviewAddOnDAO + * @param courseID + * @param assignmentID + * @return + */ + @PUT + @RolesAllowed("professor") + @Consumes(MediaType.APPLICATION_JSON) + @Path("/courses/{courseID}/assignments/{assignmentID}/addPeerReviewData") + public Response addPeerReviewData(PeerReviewAddOnDAO peerReviewAddOnDAO, @PathParam("courseID") String courseID, @PathParam("assignmentID") int assignmentID) { + String assignmentName = new AssignmentInterface().addPeerReviewDataToAssignment(courseID, assignmentID, peerReviewAddOnDAO); + return Response.status(Response.Status.OK).entity("Successfully added peer review data to " + courseID + ":" + assignmentName).build(); + } + @GET @RolesAllowed("professor") @Produces(MediaType.APPLICATION_JSON) @@ -43,26 +128,32 @@ public Response viewSpecifiedAssignment(@PathParam("courseID") String courseID, return Response.status(Response.Status.OK).entity(new AssignmentInterface().getSpecifiedAssignment(courseID, assignmentID)).build(); } + /** - * File is uploaded as form-data and passed back as a List - * The attachment is processed in FileDao.FileFactory, which reads and - * reconstructs the file through inputStream and outputStream respectively + * File's Base64 string is uploaded as form-data and passed back as a List. The file's name and + * extension is saved in the form-data's name + * The attachment is processed and turned back into its binary representation. The binary data and file name is then + * saved with its respective assignment document in the DB. * - * @param attachments type List: file(s) passed back as form-data + * @param attachments type List: file(s) Base64 Strings passed back as form-data * @param courseID type String * @param assignmentID type int * @return Response */ + @POST @RolesAllowed("professor") @Consumes(MediaType.MULTIPART_FORM_DATA) - @Produces({MediaType.MULTIPART_FORM_DATA, "application/pdf"}) + @Produces(MediaType.APPLICATION_JSON) @Path("/courses/{courseID}/assignments/{assignmentID}/upload") - public Response addFileToAssignment(List attachments, @PathParam("courseID") String courseID, @PathParam("assignmentID") int assignmentID) throws Exception { + public Response addFileToAssignment + (List attachments, + @PathParam("courseID") String courseID, + @PathParam("assignmentID") int assignmentID) + throws Exception { for (IAttachment attachment : attachments) { if (attachment == null) continue; String fileName = attachment.getDataHandler().getName(); - if (!fileName.endsWith("pdf") && !fileName.endsWith("zip") && !fileName.endsWith("docx")) return Response.status(Response.Status.UNSUPPORTED_MEDIA_TYPE).build(); new AssignmentInterface().writeToAssignment(FileDAO.fileFactory(fileName, courseID, attachment, assignmentID)); @@ -83,20 +174,20 @@ public Response addFileToAssignment(List attachments, @PathParam("c @POST @RolesAllowed("professor") @Consumes(MediaType.MULTIPART_FORM_DATA) - @Produces({MediaType.MULTIPART_FORM_DATA, "application/pdf"}) + @Produces(MediaType.APPLICATION_JSON) @Path("/courses/{courseID}/assignments/{assignmentID}/peer-review/rubric/upload") public Response addRubricToPeerReview(List attachments, @PathParam("courseID") String courseID, @PathParam("assignmentID") int assignmentID) throws Exception { for (IAttachment attachment : attachments) { if (attachment == null) continue; String fileName = attachment.getDataHandler().getName(); - if (!fileName.endsWith("pdf") && !fileName.endsWith("zip") && !fileName.endsWith("docx")) return Response.status(Response.Status.UNSUPPORTED_MEDIA_TYPE).build(); new AssignmentInterface().writeRubricToPeerReviews(FileDAO.fileFactory(fileName, courseID, attachment, assignmentID)); } - return Response.status(Response.Status.OK).entity("Successfully added file to peer reviews.").build(); + return Response.status(Response.Status.OK).entity("Successfully added file to assignment.").build(); } + /** * File is uploaded as form-data and passed back as a List * The attachment is processed in FileDao.FileFactory, which reads and @@ -110,74 +201,41 @@ public Response addRubricToPeerReview(List attachments, @PathParam( @POST @RolesAllowed("professor") @Consumes(MediaType.MULTIPART_FORM_DATA) - @Produces({MediaType.MULTIPART_FORM_DATA, "application/pdf"}) + @Produces(MediaType.APPLICATION_JSON) @Path("/courses/{courseID}/assignments/{assignmentID}/peer-review/template/upload") public Response addTemplateToPeerReview(List attachments, @PathParam("courseID") String courseID, @PathParam("assignmentID") int assignmentID) throws Exception { for (IAttachment attachment : attachments) { if (attachment == null) continue; String fileName = attachment.getDataHandler().getName(); - if (!fileName.endsWith("pdf") && !fileName.endsWith("zip") && !fileName.endsWith("docx")) return Response.status(Response.Status.UNSUPPORTED_MEDIA_TYPE).build(); new AssignmentInterface().writeTemplateToPeerReviews(FileDAO.fileFactory(fileName, courseID, attachment, assignmentID)); } - return Response.status(Response.Status.OK).entity("Successfully added file to peer reviews.").build(); - } - - @DELETE - @RolesAllowed("professor") - @Consumes(MediaType.APPLICATION_JSON) - @Path("/courses/{course-id}/assignments/{assignment-id}/remove-file/{file-name}") - public Response removeFileFromAssignment(@PathParam("course-id") String courseID, @PathParam("assignment-id") int assignmentID, @PathParam("file-name") String fileName) { - new AssignmentInterface().removeFile(courseID, fileName, assignmentID); - return Response.status(Response.Status.OK).entity("File successfully deleted.").build(); - } - - @DELETE - @RolesAllowed("professor") - @Consumes(MediaType.APPLICATION_JSON) - @Path("/courses/{course-id}/assignments/{assignment-id}/peer-review-template/remove-file/{file-name}") - public Response removeFileFromPeerReviewTemplate(@PathParam("course-id") String courseID, @PathParam("assignment-id") int assignmentID, @PathParam("file-name") String fileName) { - new AssignmentInterface().removePeerReviewTemplate(courseID, fileName, assignmentID); - return Response.status(Response.Status.OK).entity("File successfully deleted.").build(); - } - - @DELETE - @RolesAllowed("professor") - @Consumes(MediaType.APPLICATION_JSON) - @Path("/courses/{course-id}/assignments/{assignment-id}/peer-review-rubric/remove-file/{file-name}") - public Response removeFileFromPeerReviewRubric(@PathParam("course-id") String courseID, @PathParam("assignment-id") int assignmentID, @PathParam("file-name") String fileName) { - new AssignmentInterface().removePeerReviewRubric(courseID, fileName, assignmentID); - return Response.status(Response.Status.OK).entity("File successfully deleted.").build(); + return Response.status(Response.Status.OK).entity("Successfully added file to assignment.").build(); } - @POST - @RolesAllowed("professor") - @Consumes(MediaType.APPLICATION_JSON) - @Path("/courses/create-assignment") - public Response createAssignment(AssignmentDAO assignmentDAO) throws IOException { - Document assignmentDocument = new AssignmentInterface().createAssignment(assignmentDAO); -// DueDateChecker.assignmentDocuments.add(assignmentDocument); - return Response.status(Response.Status.OK).entity(assignmentDocument).build(); - } + /** + * Retrieves the assignment instructions file from the DB and passes its Base64 representation to the front end via + * the request header. + * + * @param courseID String + * @param assignmentID int + * @return response + **/ + @GET + @RolesAllowed({"professor", "student"}) + @Produces(MediaType.MULTIPART_FORM_DATA) + @Path("/courses/{courseID}/assignments/{assignmentID}/download") + public Response downloadAssignment(@PathParam("courseID") String courseID, @PathParam("assignmentID") int assignmentID) { + byte[] fileData = new AssignmentInterface().getInstructionFileData(courseID, assignmentID); + String fileName = new AssignmentInterface().getInstructionFileName(courseID, assignmentID); - @DELETE - @RolesAllowed("professor") - @Path("/courses/{courseID}/assignments/{assignmentID}/remove") - public Response removeAssignment(@PathParam("assignmentID") int assignmentID, @PathParam("courseID") String courseID) throws IOException { - new AssignmentInterface().removeAssignment(assignmentID, courseID); - return Response.status(Response.Status.OK).entity("Assignment successfully deleted.").build(); + Response.ResponseBuilder response = Response.ok(Base64.getEncoder().encode(fileData)); + response.header("Content-Disposition", "attachment; filename=" + fileName); + return response.build(); } - @PUT - @RolesAllowed("professor") - @Consumes(MediaType.APPLICATION_JSON) - @Path("/courses/{courseID}/assignments/{assignmentID}/edit") - public Response updateAssignment(AssignmentDAO assignmentDAO, @PathParam("courseID") String courseID, @PathParam("assignmentID") int assignmentID) { - new AssignmentInterface().updateAssignment(assignmentDAO, courseID, assignmentID); - String response = assignmentDAO.courseID + ": " + assignmentDAO.assignmentName + " successfully updated."; - return Response.status(Response.Status.OK).entity(response).build(); - } + //change /** * Retrieves the assignment from its location on the server and passes it to the front end via the request header @@ -190,15 +248,13 @@ public Response updateAssignment(AssignmentDAO assignmentDAO, @PathParam("course @GET @RolesAllowed({"professor", "student"}) @Produces(MediaType.MULTIPART_FORM_DATA) - @Path("/courses/{courseID}/assignments/{assignmentID}/download/{fileName}") - public Response downloadAssignment(@PathParam("courseID") String courseID, @PathParam("assignmentID") int assignmentID, @PathParam("fileName") String fileName) { - new AssignmentInterface(); - File file = new File(AssignmentInterface.findFile(courseID, assignmentID, fileName)); - if (!file.exists()) - return Response.status(Response.Status.BAD_REQUEST).entity("Assignment does not exist.").build(); - - Response.ResponseBuilder response = Response.ok(file); - response.header("Content-Disposition", "attachment; filename=" + file.getName()); + @Path("/courses/{courseID}/assignments/{assignmentID}/peer-review/template/download") + public Response downloadPeerReviewTemplate(@PathParam("courseID") String courseID, @PathParam("assignmentID") int assignmentID) { + byte[] fileData = new AssignmentInterface().getPeerReviewTemplateData(courseID, assignmentID); + String fileName = new AssignmentInterface().getTemplateFileName(courseID, assignmentID); + + Response.ResponseBuilder response = Response.ok(Base64.getEncoder().encode(fileData)); + response.header("Content-Disposition", "attachment; filename=" + fileName); return response.build(); } @@ -213,11 +269,44 @@ public Response downloadAssignment(@PathParam("courseID") String courseID, @Path @GET @RolesAllowed({"professor", "student"}) @Produces(MediaType.MULTIPART_FORM_DATA) - @Path("/courses/{courseID}/assignments/{assignmentID}/peer-review/download/{fileName}") - public Response downloadPeerReview(@PathParam("courseID") String courseID, @PathParam("assignmentID") int assignmentID, @PathParam("fileName") String fileName) { - File file = new File(AssignmentInterface.findPeerReviewFile(courseID, assignmentID, fileName)); + @Path("/courses/{courseID}/assignments/{assignmentID}/peer-review/rubric/download") + public Response downloadPeerReview(@PathParam("courseID") String courseID, @PathParam("assignmentID") int assignmentID) { + byte[] fileData = new AssignmentInterface().getRubricFileData(courseID, assignmentID); + String fileName = new AssignmentInterface().getRubricFileName(courseID, assignmentID); + + Response.ResponseBuilder response = Response.ok(Base64.getEncoder().encode(fileData)); + response.header("Content-Disposition", "attachment; filename=" + fileName); + return response.build(); + } + - return Response.ok(file).header("Content-Disposition", "attachment; filename=" + file.getName()).build(); + //Change + @DELETE + @RolesAllowed("professor") + @Consumes(MediaType.APPLICATION_JSON) + @Path("/courses/{course-id}/assignments/{assignment-id}/remove-file") + public Response removeFileFromAssignment(@PathParam("course-id") String courseID, @PathParam("assignment-id") int assignmentID) { + new AssignmentInterface().removeFile(courseID, assignmentID); + return Response.status(Response.Status.OK).entity("File successfully deleted.").build(); + } + + + @DELETE + @RolesAllowed("professor") + @Consumes(MediaType.APPLICATION_JSON) + @Path("/courses/{course-id}/assignments/{assignment-id}/peer-review/template/remove-file") + public Response removeFileFromPeerReviewTemplate(@PathParam("course-id") String courseID, @PathParam("assignment-id") int assignmentID) { + new AssignmentInterface().removePeerReviewTemplate(courseID, assignmentID); + return Response.status(Response.Status.OK).entity("File successfully deleted.").build(); + } + + @DELETE + @RolesAllowed("professor") + @Consumes(MediaType.APPLICATION_JSON) + @Path("/courses/{course-id}/assignments/{assignment-id}/peer-review/rubric/remove-file") + public Response removeFileFromPeerReviewRubric(@PathParam("course-id") String courseID, @PathParam("assignment-id") int assignmentID) { + new AssignmentInterface().removePeerReviewRubric(courseID, assignmentID); + return Response.status(Response.Status.OK).entity("File successfully deleted.").build(); } @DELETE @@ -227,4 +316,5 @@ public Response removeCourse(@PathParam("courseID") String courseID) throws IOEx new AssignmentInterface().removeCourse(courseID); return Response.status(Response.Status.OK).entity("Course successfully deleted from assignments database and assignments folder.").build(); } + } diff --git a/backend/professor-assignment-microservice/src/main/java/edu/oswego/cs/rest/util/CPRException.java b/backend/professor-assignment-microservice/src/main/java/edu/oswego/cs/rest/util/CPRException.java old mode 100644 new mode 100755 diff --git a/backend/professor-assignment-microservice/src/main/liberty/config/server.xml b/backend/professor-assignment-microservice/src/main/liberty/config/server.xml old mode 100644 new mode 100755 index f1af77098..65e79858e --- a/backend/professor-assignment-microservice/src/main/liberty/config/server.xml +++ b/backend/professor-assignment-microservice/src/main/liberty/config/server.xml @@ -23,4 +23,5 @@ + diff --git a/backend/professor-assignment-microservice/src/test/java/ProfessorAssignmentTests.java b/backend/professor-assignment-microservice/src/test/java/ProfessorAssignmentTests.java old mode 100644 new mode 100755 index b71256064..99f1ad3b3 --- a/backend/professor-assignment-microservice/src/test/java/ProfessorAssignmentTests.java +++ b/backend/professor-assignment-microservice/src/test/java/ProfessorAssignmentTests.java @@ -1,22 +1,26 @@ -//import edu.oswego.cs.rest.daos.AssignmentDAO; -//import org.junit.jupiter.api.*; -// -//import javax.json.bind.Jsonb; -//import javax.json.bind.JsonbBuilder; -//import javax.ws.rs.client.Client; -//import javax.ws.rs.client.ClientBuilder; -//import javax.ws.rs.client.Entity; -//import javax.ws.rs.client.WebTarget; -//import javax.ws.rs.core.MediaType; -//import javax.ws.rs.core.Response; -//import java.util.ArrayList; -//import java.util.HashMap; -//import java.util.List; +import com.ibm.websphere.jaxrs20.multipart.AttachmentBuilder; +import com.ibm.websphere.jaxrs20.multipart.IAttachment; +import com.mongodb.client.MongoCollection; +import edu.oswego.cs.rest.daos.AssignmentNoPeerReviewDAO; +import edu.oswego.cs.rest.daos.FileDAO; +import edu.oswego.cs.rest.daos.PeerReviewAddOnDAO; +import edu.oswego.cs.rest.database.AssignmentInterface; +import edu.oswego.cs.rest.database.DatabaseManager; +import org.bson.Document; +import org.junit.jupiter.api.*; + +import java.io.IOException; +import java.util.ArrayList; + +import static com.mongodb.client.model.Filters.eq; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + // //// DISCLAIMER: Don't run all the tests at the same time. You'll likely screw up the database and fail the tests in some way. //// Read through the tests to see what they create, update and delete before you run them please. // -//public class ProfessorAssignmentTests { +public class ProfessorAssignmentTests { // // private static final Jsonb jsonb = JsonbBuilder.create(); // private static final ArrayList expectedAssignments = new ArrayList<>(); @@ -30,7 +34,7 @@ // @BeforeAll // public static void oneTimeSetup() { // port = "13125"; -// baseUrl = "http://moxie.cs.oswego.edu:" + port + "/assignments/professor"; +// baseUrl = "https://moxie.cs.oswego.edu:" + port + "/assignments/professor"; // // // // variables for inserted assignments @@ -324,5 +328,116 @@ // targetUrl = "/courses/"+assignment1.getCourseID()+"/assignments/"+assignmentIdCount+"/view-files"; // // (NOT INCLUDED HERE) // } -//} -// +// @Test +// void uploadAssignmentFilesTest() throws IOException { +// //make a dummy assignment in the database +// +// //String fileBase64 = "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"; +// MongoCollection courses = new DatabaseManager().getCourseDB().getCollection("courses"); +// MongoCollection assignments = new DatabaseManager().getAssignmentDB().getCollection("assignments"); +// Document course = new Document(); +// course +// .append("abbreviation", "CSC212") +// .append("course_id", "CSC212-100-Spring-2023") +// .append("course_name", "Intro to CS") +// .append("course_section", "100") +// .append("crn", "12345") +// .append("professor_id", "daltamur") +// .append("semester", "spring") +// .append("students", new ArrayList()) +// .append("team_size", 1) +// .append("year", "2023"); +// courses.insertOne(course); +// +// Document assignment=new Document(); +// assignment +// .append("assignment_id", 5000) +// .append("assignment_name", "Solve the SPainter Problem") +// .append("course_id", "CSC212-100-Spring-2023") +// .append("due_date", "2024-03-24") +// .append("instructions", "Write a program to solve the problem given in the attached instructions") +// .append("peer_review_due_date", "2023-04-15") +// .append("peer_review_instructions", "Rate your classmate's solution out of 15 points") +// .append("peer_review_points", 15) +// .append("points", 15) +// .append("submission_is_past_due", false) +// .append("peer_review_is_past_due", false) +// .append("grade_finalized", false) +// .append("assigned_teams", new ArrayList<>()) +// .append("completed_teams", new ArrayList<>()) +// .append("all_teams", new ArrayList<>()) +// .append("reviews_per_team",1); +// assignments.insertOne(assignment); +// +// assertEquals(assignment.get("points"), 15); +// +// +// //upload instruction, template, and rubric data +// IAttachment instructionsAttachment = AttachmentBuilder.newBuilder("instructions") +// //file stuff will go here +// .build(); +// System.out.println("asdf"); +// FileDAO instructionsDAO = FileDAO.fileFactory("instructions.docx", "CSC212-100-Spring-2023", instructionsAttachment, 5000); +// new AssignmentInterface().writeToAssignment(instructionsDAO); +// +// //get rid of the test assignment and course +// courses.findOneAndDelete(eq("course_id","CSC 101-800-12312-Spring-2023")); +// } + + @Test + public void makeAssignmentNoPeerReview() throws IOException { + // Note that this test runs under the assumption that the assignments database is empty + // Make a dummy assignment + AssignmentNoPeerReviewDAO testDAO = new AssignmentNoPeerReviewDAO("CSC212-800-12313-Spring-2023", "Rate your classmate's submission", "Rate your classmate's java solution on a scale of 1-10", "2023-05-15", 10); + Document madeAssignment = new AssignmentInterface().createAssignmentNoPeerReview(testDAO); + // Find the assignment and make sure it contains no peer review data and that it does, in fact, exist + Document foundAssignment = new AssignmentInterface().getSpecifiedAssignment("CSC212-800-12313-Spring-2023", (Integer) madeAssignment.get("assignment_id")); + //we don't really have to make sure every single value gets copied over, it's fine just to make sure it exists and contains on peer review data + assertNotNull(foundAssignment); + assertEquals(foundAssignment.get("has_peer_review"), false); + new AssignmentInterface().removeAssignment((Integer) foundAssignment.get("assignment_id"), "CSC212-800-12313-Spring-2023"); + } + + + @Test + public void updateAssignmentNoPeerReview() throws IOException { + //make an assignment to go into the DB that we will later edit + AssignmentNoPeerReviewDAO testDAO = new AssignmentNoPeerReviewDAO("CSC212-800-12313-Spring-2023", "Rate your classmate's submission", "Rate your classmate's java solution on a scale of 1-10", "2023-05-15", 10); + Document madeAssignment = new AssignmentInterface().createAssignmentNoPeerReview(testDAO); + AssignmentNoPeerReviewDAO updatedTestDAO = new AssignmentNoPeerReviewDAO("CSC212-800-12313-Spring-2023", "Java Solution Review", "Rate your classmate's java solution on a scale of 1-100", "2023-05-16", 100); + new AssignmentInterface().updateAssignmentWithNoPeerReview(updatedTestDAO, "CSC212-800-12313-Spring-2023", (Integer) madeAssignment.get("assignment_id")); + //find the assignment after updating it, assert the values are equal to the updated ones + Document foundAssignment = new AssignmentInterface().getSpecifiedAssignment("CSC212-800-12313-Spring-2023", (Integer) madeAssignment.get("assignment_id")); + assertNotNull(foundAssignment); + assertEquals(foundAssignment.get("assignment_name"), updatedTestDAO.assignmentName); + assertEquals(foundAssignment.get("due_date"), updatedTestDAO.dueDate); + assertEquals(foundAssignment.get("instructions"), updatedTestDAO.instructions); + assertEquals(foundAssignment.get("points"), updatedTestDAO.points); + assertEquals(foundAssignment.get("has_peer_review"), false); + new AssignmentInterface().removeAssignment((Integer) foundAssignment.get("assignment_id"), "CSC212-800-12313-Spring-2023"); + } + + @Test + public void addPeerReviewInformation() throws IOException { + //make an assignment to go into the DB that we will later edit + AssignmentNoPeerReviewDAO testDAO = new AssignmentNoPeerReviewDAO("CSC212-800-12313-Spring-2023", "Rate your classmate's submission", "Rate your classmate's java solution on a scale of 1-10", "2023-05-15", 10); + Document madeAssignment = new AssignmentInterface().createAssignmentNoPeerReview(testDAO); + PeerReviewAddOnDAO peerReviewAddOnDAO = new PeerReviewAddOnDAO("Rate your classmate's performance out of 15", "2023-05-26", 15); + new AssignmentInterface().addPeerReviewDataToAssignment("CSC212-800-12313-Spring-2023", (int) madeAssignment.get("assignment_id"), peerReviewAddOnDAO); + //find the assignment with the new peer review data now, ensure it contains all the right values + Document foundAssignment = new AssignmentInterface().getSpecifiedAssignment("CSC212-800-12313-Spring-2023", (Integer) madeAssignment.get("assignment_id")); + assertNotNull(foundAssignment); + assertEquals(foundAssignment.get("assignment_name"), testDAO.assignmentName); + assertEquals(foundAssignment.get("due_date"), testDAO.dueDate); + assertEquals(foundAssignment.get("instructions"), testDAO.instructions); + assertEquals(foundAssignment.get("points"), testDAO.points); + assertEquals(foundAssignment.get("has_peer_review"), true); + assertEquals(foundAssignment.get("peer_review_instructions"), peerReviewAddOnDAO.peerReviewInstructions); + assertEquals(foundAssignment.get("peer_review_due_date"), peerReviewAddOnDAO.peerReviewDueDate); + assertEquals(foundAssignment.get("peer_review_points"), peerReviewAddOnDAO.peerReviewPoints); + new AssignmentInterface().removeAssignment((Integer) foundAssignment.get("assignment_id"), "CSC212-800-12313-Spring-2023"); + } + + +} + diff --git a/backend/professor-assignment-microservice/src/test/java/solution.docx b/backend/professor-assignment-microservice/src/test/java/solution.docx new file mode 100755 index 000000000..f94641308 Binary files /dev/null and b/backend/professor-assignment-microservice/src/test/java/solution.docx differ diff --git a/backend/student-assignment-microservice/.dockerignore b/backend/student-assignment-microservice/.dockerignore old mode 100644 new mode 100755 diff --git a/backend/student-assignment-microservice/Dockerfile b/backend/student-assignment-microservice/Dockerfile old mode 100644 new mode 100755 diff --git a/backend/student-assignment-microservice/pom.xml b/backend/student-assignment-microservice/pom.xml old mode 100644 new mode 100755 index 23a6b6384..70b258ce2 --- a/backend/student-assignment-microservice/pom.xml +++ b/backend/student-assignment-microservice/pom.xml @@ -16,6 +16,16 @@ + + org.apache.tika + tika-core + 2.7.0 + + + org.apache.tika + tika-parsers-standard-package + 2.7.0 + jakarta.platform jakarta.jakartaee-api diff --git a/backend/student-assignment-microservice/src/main/java/edu/oswego/cs/rest/application/StudentAssignmentApplication.java b/backend/student-assignment-microservice/src/main/java/edu/oswego/cs/rest/application/StudentAssignmentApplication.java old mode 100644 new mode 100755 diff --git a/backend/student-assignment-microservice/src/main/java/edu/oswego/cs/rest/cors/CorsFilter.java b/backend/student-assignment-microservice/src/main/java/edu/oswego/cs/rest/cors/CorsFilter.java old mode 100644 new mode 100755 index e751de1ba..87dc9431a --- a/backend/student-assignment-microservice/src/main/java/edu/oswego/cs/rest/cors/CorsFilter.java +++ b/backend/student-assignment-microservice/src/main/java/edu/oswego/cs/rest/cors/CorsFilter.java @@ -23,5 +23,7 @@ public void filter(ContainerRequestContext requestContext, responseContext.getHeaders().add( "Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD"); + responseContext.getHeaders().add("Access-Control-Expose-Headers", + "Content-Disposition"); } } \ No newline at end of file diff --git a/backend/student-assignment-microservice/src/main/java/edu/oswego/cs/rest/daos/FileDAO.java b/backend/student-assignment-microservice/src/main/java/edu/oswego/cs/rest/daos/FileDAO.java old mode 100644 new mode 100755 index 8f295a721..029d9ab67 --- a/backend/student-assignment-microservice/src/main/java/edu/oswego/cs/rest/daos/FileDAO.java +++ b/backend/student-assignment-microservice/src/main/java/edu/oswego/cs/rest/daos/FileDAO.java @@ -1,17 +1,33 @@ package edu.oswego.cs.rest.daos; import com.ibm.websphere.jaxrs20.multipart.IAttachment; +import edu.oswego.cs.rest.database.AssignmentInterface; +import edu.oswego.cs.rest.database.DatabaseManager; import lombok.AllArgsConstructor; import lombok.Getter; +import org.apache.poi.xwpf.extractor.XWPFWordExtractor; +import org.apache.poi.xwpf.usermodel.LineSpacingRule; +import org.apache.poi.xwpf.usermodel.XWPFDocument; +import org.apache.tika.exception.TikaException; +import org.apache.tika.metadata.Metadata; +import org.apache.tika.parser.AutoDetectParser; +import org.apache.tika.parser.pdf.PDFParser; +import org.apache.tika.parser.ParseContext; +import org.apache.tika.sax.BodyContentHandler; +import org.xml.sax.SAXException; import java.io.*; +import java.util.Base64; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; @Getter @AllArgsConstructor public class FileDAO { private String filename; private String courseID; - private InputStream file; + private byte[] file; private int assignmentID; private String teamName; @@ -23,19 +39,51 @@ public class FileDAO { * @param courseID String * @param attachment form-data * @return FileDAO Instance - * @throws IOException File Corruption Exception + * @throws IOException File Corruption Exception or contains profanity + * @throws TikaException File Corruption Exception + * @throws SAXException File Corruption Exception */ - public static FileDAO fileFactory(String fileName, String courseID, IAttachment attachment, int assignmentID, String teamName) throws IOException { - InputStream inputStream = attachment.getDataHandler().getInputStream(); - return new FileDAO(fileName, courseID, inputStream, assignmentID, teamName); + public static FileDAO fileFactory(String fileName, String courseID, IAttachment attachment, int assignmentID, String teamName) throws IOException, TikaException, SAXException { + InputStream inputStream = new BufferedInputStream(attachment.getDataHandler().getInputStream()); + byte[] fileData = inputStream.readAllBytes(); + contentFilter(new ByteArrayInputStream(Base64.getDecoder().decode(new String(fileData))), fileName, courseID); + inputStream.mark(inputStream.available()); + return new FileDAO(fileName, courseID, fileData, assignmentID, teamName); } /** - * Writes the inputStream to a file. + * Checks the file for profanity + * + * @param stream InputStream + * @throws IOException File Corruption Exception or contains profanity + * @throws TikaException File Corruption Exception + * @throws SAXException File Corruption Exception */ - public void writeFile(String filePath) throws IOException { - OutputStream outputStream = new FileOutputStream(filePath); - outputStream.write(file.readAllBytes()); - outputStream.close(); + public static void contentFilter(InputStream stream, String fileName, String courseID) throws TikaException, IOException, SAXException { + //get the list of blocked words for the course + List blockedWords = new AssignmentInterface().getCourseProfanityWords(courseID); + String addedWords = ""; + if(blockedWords!=null && blockedWords.size()!=0){ + addedWords+=blockedWords.get(0); + for(int i = 1; i assignmentsCollection; + + static MongoCollection courseCollection; static MongoCollection teamsCollection; static MongoCollection submissionCollection; + static MongoCollection professorCollection; + static MongoCollection studentCollection; + + static ConcurrentHashMap assignmentLock = new ConcurrentHashMap<>(); static String reg = "/"; @@ -34,6 +55,9 @@ public AssignmentInterface() { assignmentsCollection = assignmentDatabase.getCollection("assignments"); submissionCollection = assignmentDatabase.getCollection("submissions"); teamsCollection = teamsDatabase.getCollection("teams"); + professorCollection = manager.getProfessorDB().getCollection("professors"); + courseCollection = manager.getCourseDB().getCollection("courses"); + studentCollection = manager.getStudentDB().getCollection("students"); } catch (WebApplicationException e) { throw new WebApplicationException(Response.status(Response.Status.BAD_REQUEST).entity("Failed to retrieve collections.").build()); @@ -41,16 +65,11 @@ public AssignmentInterface() { } public void writeToAssignment(FileDAO fileDAO) throws IOException { - String path = "assignments" + reg - + fileDAO.getCourseID() + reg - + fileDAO.getAssignmentID() + reg - + "team-submissions"; + makeSubmission(fileDAO.getCourseID(), fileDAO.getAssignmentID(), fileDAO.getFilename(), fileDAO.getTeamName(), fileDAO.getFile()); + } - if (!new File(path).exists()) { - new File(path).mkdirs(); - } - fileDAO.writeFile(path + reg + fileDAO.getFilename()); - makeSubmission(fileDAO.getCourseID(), fileDAO.getAssignmentID(), fileDAO.getFilename(), fileDAO.getTeamName()); + public List getCourseProfanityWords(String courseID) { + return courseCollection.find(eq("course_id", courseID)).first().getList("blocked_words", String.class); } public List getAllUserAssignments(String courseID, String studentID) { @@ -68,6 +87,12 @@ public List getAllUserAssignments(String courseID, String studentID) { return assignments; } + public Document getSpecifiedTeamSubmission(String courseID, int assignmentID, String teamID) { + Document teamSubmission = submissionCollection.find(and(eq("course_id", courseID), eq("assignment_id", assignmentID), eq("team_name", teamID), eq("type", "team_submission"))).first(); + if (teamSubmission == null) throw new WebApplicationException(Response.status(Response.Status.BAD_REQUEST).entity("Assignment does not exist").build()); + return teamSubmission; + } + public List getSpecifiedUserAssignment(String courseID, int assignmentID, String studentID) { MongoCursor query = submissionCollection.find(and(eq("course_id", courseID), eq("members", studentID), @@ -99,7 +124,7 @@ public List getAssignmentSubmissions(String courseID, int assignmentID return assignments; } - public void makeSubmission(String course_id, int assignment_id, String file_name, String teamName) { + public void makeSubmission(String course_id, int assignment_id, String file_name, String teamName, byte[] fileData) throws IOException { Document team = teamsCollection.find(and(eq("team_id", teamName), eq("course_id", course_id))).first(); Document assignment = assignmentsCollection.find(and( eq("course_id", course_id), @@ -108,7 +133,6 @@ public void makeSubmission(String course_id, int assignment_id, String file_name if (assignment == null) throw new WebApplicationException(Response.status(Response.Status.BAD_REQUEST).entity("this assignment was not found in this course").build()); String assignmentName = assignment.getString("assignment_name"); - System.out.println(team); if (team == null) { throw new WebApplicationException(Response.status(Response.Status.BAD_REQUEST).entity("this team was not found in this course").build()); @@ -119,29 +143,42 @@ public void makeSubmission(String course_id, int assignment_id, String file_name if (team.get("team_id", String.class) == null) { throw new WebApplicationException(Response.status(Response.Status.BAD_REQUEST).entity("team_id not defined").build()); } - String path = "assignments" + reg + course_id + reg + assignment_id + reg + "team_submissions"; Document new_submission = new Document() .append("course_id", course_id) .append("assignment_id", assignment_id) .append("assigment_name", assignmentName) .append("submission_name", file_name) + .append("submission_data", Base64.getDecoder().decode(new String(fileData))) .append("team_name", team.getString("team_id")) .append("members", team.getList("team_members", String.class)) .append("type", "team_submission") .append("grade", -1) - .append("path", path + reg + file_name) - .append("peer_review_due_date", assignment.get("peer_review_due_date")); - System.out.println(new_submission); + .append("peer_review_due_date", assignment.get("peer_review_due_date")) + .append("due_date", assignment.get("due_date")); + boolean submissionCheck = submissionCollection.find(and(eq("course_id", course_id), eq("assignment_id", assignment_id), eq("team_name", team.getString("team_id")))).iterator().hasNext(); + // do some sort of spinning lock here so that only one teammate at a time is submitting an assignment at a time + //key is assignment_ID+team_name+type + while(assignmentLock.containsKey(assignment_id+team.getString("team_id")+"team_submission")); + //set the lock + assignmentLock.put(assignment_id+team.getString("team_id")+"team_submission", true); if (submissionCheck) { Document extensionCheck = submissionCollection.find(and(eq("course_id", course_id), eq("assignment_id", assignment_id), eq("team_name", team.getString("team_id")))).first(); if (extensionCheck.getString("submission_name").equals(file_name)) { + //remove the lock + assignmentLock.remove(assignment_id+team.getString("team_id")+"team_submission"); throw new WebApplicationException(Response.status(Response.Status.BAD_REQUEST).entity("submission already exists").build()); } else { submissionCollection.deleteOne(extensionCheck); submissionCollection.insertOne(new_submission); + //remove the lock + assignmentLock.remove(assignment_id+team.getString("team_id")+"team_submission"); } - } else submissionCollection.insertOne(new_submission); + } else { + submissionCollection.insertOne(new_submission); + //remove the lock + assignmentLock.remove(assignment_id+team.getString("team_id")+"team_submission"); + } } public Document allAssignments(String course_id, String student_id) { @@ -240,6 +277,27 @@ public void makeFinalGrades(String courseID, int assignmentID) { throw new WebApplicationException(Response.status(Response.Status.BAD_REQUEST).entity("team: " + review + "'s review has no points.").build()); } else { total_points += team_review.get("grade", Integer.class); + + /* Insert the peer review score into each student in the team in the student collection */ + List teamMembers = team_review.getList("reviewed_team", String.class); + String teamName = team_review.getString("reviewed_team"); + double grade = team_review.getDouble("grade"); + String reviewedBy = team_review.getString("reviewed_by"); + int assignmentId = team_review.getInteger("assignment_id"); + teamMembers.forEach(studentId -> { + Bson studentQuery = eq("student_id", studentId); + Document student = studentCollection.find(studentQuery).first(); + List peerReviewGrades = student.getList("peer_reviews", Document.class); + Document newPeerReview = new Document() + .append("team_name", teamName) + .append("grade", grade) + .append("reviewed_by", reviewedBy) + .append("assignment_id", assignmentId); + peerReviewGrades.add(newPeerReview); + Bson updateRule = Updates.set("peer_reviews", peerReviewGrades); + UpdateOptions options = new UpdateOptions().upsert(true); + studentCollection.updateOne(studentQuery, updateRule, options); + }); } } } @@ -247,6 +305,21 @@ public void makeFinalGrades(String courseID, int assignmentID) { final_grade = ((int) (final_grade * 100) / 100.0); //round to the nearest 10th submissionCollection.findOneAndUpdate(team_submission, set("grade", final_grade)); assignmentsCollection.findOneAndUpdate(and(eq("course_id", courseID), eq("assignment_id", assignmentID)), set("grade_finalized", true)); + + /* Updating student's grade */ + for (String member : team_submission.getList("members", String.class)) { + List grades = new ArrayList<>(); + grades.addAll(studentCollection.find(eq("student_id", member)).first().getList("grades", Document.class)); + Document newAssignmentGrade = new Document() + .append("assignment_id", assignmentID) + .append("grade", final_grade) + .append("team_name", team_submission.getString("team_name")); + grades.add(newAssignmentGrade); + Bson filter = eq("student_id", member); + UpdateOptions options = new UpdateOptions().upsert(true); + Bson update = Updates.set("team_submissions", grades); + studentCollection.updateOne(filter, update, options); + } } } } @@ -270,4 +343,424 @@ public List getToDosByCourse(String courseID, String studentID) { } return assignments; } + + /** + * Ensures that a request carried out by a client that needs to access assignment information is actually + * the professor of the course in context + * @param securityContext + * @param courseID + */ + public void checkProfessor(SecurityContext securityContext, String courseID){ + String professorID = securityContext.getUserPrincipal().getName().split("@")[0]; + Document professorDocument = professorCollection.find(eq("professor_id", professorID)).first(); + if (professorDocument == null) throw new WebApplicationException(Response.status(Response.Status.NOT_FOUND).entity("This professor does not exist.").build()); + Document courseDocument = courseCollection.find(Filters.eq("course_id", courseID)).first(); + if(courseDocument == null) throw new WebApplicationException(Response.status(Response.Status.NOT_FOUND).entity("This course does not exist.").build()); + String professorIDActual = courseDocument.getString("professor_id"); + if (!professorIDActual.equals(professorID)) throw new WebApplicationException(Response.status(Response.Status.FORBIDDEN).entity("User principal name doesn't match").build()); + } + + + /** + * Inserts the file data related to a predefined assignment + * @param submissions + * @param zipFolder + */ + public void insertAssignmentFiles(MongoCursor submissions, String courseID, ZipOutputStream zipFolder) throws IOException { + while(submissions.hasNext()){ + //get the current submission + Document currentSubmission = submissions.next(); + //make the file path to save the submission in + String path; + String assignmentNameNoSpaces = currentSubmission.getString("assigment_name").replace(" ", "_"); + Binary submission_data = (Binary) currentSubmission.get("submission_data"); + if(currentSubmission.getString("type").equals("team_submission")){ + path = courseID+"/"+assignmentNameNoSpaces+"/"+currentSubmission.getString("team_name")+"/submission/"+currentSubmission.getString("submission_name"); + System.out.println(path); + ZipEntry curEntry = new ZipEntry(path); + zipFolder.putNextEntry(curEntry); + zipFolder.write(submission_data.getData(), 0, submission_data.getData().length); + zipFolder.closeEntry(); + }else{ + //if it is a peer review, save the data in the folder in both the to/from teams + String fromTeam = currentSubmission.getString("reviewed_by"); + String toTeam = currentSubmission.getString("reviewed_team"); + //from team first + path = courseID+"/"+assignmentNameNoSpaces+"/"+fromTeam+"/peer-reviews/given/"+currentSubmission.getString("submission_name"); + ZipEntry curEntryFromTeam = new ZipEntry(path); + zipFolder.putNextEntry(curEntryFromTeam); + zipFolder.write(submission_data.getData(), 0, submission_data.getData().length); + zipFolder.closeEntry(); + + + //to team last + path = courseID+"/"+assignmentNameNoSpaces+"/"+toTeam+"/peer-reviews/received/"+currentSubmission.getString("submission_name"); + ZipEntry curEntryToTeam = new ZipEntry(path); + zipFolder.putNextEntry(curEntryToTeam); + zipFolder.write(submission_data.getData(), 0, submission_data.getData().length); + zipFolder.closeEntry(); + } + } + + } + + /** + * Add all assignment files related to a specific student + * @param submissions + * @param courseID + * @param studentID + * @param zipFolder + * @throws IOException + */ + public void insertAssignmentFilesStudent(MongoCursor submissions, String courseID, String studentID, ZipOutputStream zipFolder) throws IOException { + while(submissions.hasNext()){ + //get the current submission + Document currentSubmission = submissions.next(); + //check and make sure the submission has the current studentID attached to the submitter. If it does not, just continue the loop + if(currentSubmission.getString("type").equals("team_submission")){ + List submission_members = currentSubmission.getList("members", String.class); + if (submission_members.stream().noneMatch(s -> s.equals(studentID))) { + continue; + } + }else{ + List submission_members = currentSubmission.getList("reviewed_by_members", String.class); + if (submission_members.stream().noneMatch(s -> s.equals(studentID))) { + continue; + } + } + + //make the file path to save the submission in + String path; + String assignmentNameNoSpaces = currentSubmission.getString("assigment_name").replace(" ", "_"); + Binary submission_data = (Binary) currentSubmission.get("submission_data"); + if(currentSubmission.getString("type").equals("team_submission")){ + path = courseID+"/"+assignmentNameNoSpaces+"/"+currentSubmission.getString("team_name")+"/submission/"+currentSubmission.getString("submission_name"); + System.out.println(path); + ZipEntry curEntry = new ZipEntry(path); + zipFolder.putNextEntry(curEntry); + zipFolder.write(submission_data.getData(), 0, submission_data.getData().length); + zipFolder.closeEntry(); + }else{ + //if it is a peer review, save the data in the folder in both the to/from teams + String fromTeam = currentSubmission.getString("reviewed_by"); + String toTeam = currentSubmission.getString("reviewed_team"); + //from team first + path = courseID+"/"+assignmentNameNoSpaces+"/"+fromTeam+"/peer-reviews/given/"+currentSubmission.getString("submission_name"); + ZipEntry curEntryFromTeam = new ZipEntry(path); + zipFolder.putNextEntry(curEntryFromTeam); + zipFolder.write(submission_data.getData(), 0, submission_data.getData().length); + zipFolder.closeEntry(); + + + //to team last + path = courseID+"/"+assignmentNameNoSpaces+"/"+toTeam+"/peer-reviews/received/"+currentSubmission.getString("submission_name"); + ZipEntry curEntryToTeam = new ZipEntry(path); + zipFolder.putNextEntry(curEntryToTeam); + zipFolder.write(submission_data.getData(), 0, submission_data.getData().length); + zipFolder.closeEntry(); + } + } + + } + + + /** + * Returns a zip file containing all completed assignment submissions + * @param courseID + * @return File + */ + public File aggregateSubmissions(String courseID) throws IOException { + //make the temporary zip folder + File tempFile = Files.createTempFile(courseID, ".zip").toFile(); + String tempPath = tempFile.getAbsolutePath(); + ZipOutputStream zipFolder = new ZipOutputStream(new FileOutputStream(tempPath)); + //get a list of all the assignments + for (Document currentAssignment : assignmentsCollection.find(eq("course_id", courseID))) { + //get the next assignment related to the current course + //get this to get the submissions quicker + Integer assignment_ID = currentAssignment.getInteger("assignment_id"); + //now iterate through the submissions for the assignment and put them in the proper place in the zip folder + insertAssignmentFiles(submissionCollection.find(eq("assignment_id", assignment_ID)).iterator(), courseID, zipFolder); + } + zipFolder.close(); + + //return the file with all the assignment data + return tempFile; + } + + /** + * Returns a zip file containing all completed assignment submissions for a particular assignment + * @param courseID + * @param assignment_ID + * @return File + */ + public File aggregateSubmissions(String courseID, Integer assignment_ID) throws IOException { + //make the temporary zip folder + File tempFile = Files.createTempFile(courseID, ".zip").toFile(); + String tempPath = tempFile.getAbsolutePath(); + ZipOutputStream zipFolder = new ZipOutputStream(new FileOutputStream(tempPath)); + insertAssignmentFiles(submissionCollection.find(eq("assignment_id", assignment_ID)).iterator(), courseID, zipFolder); + zipFolder.close(); + + //return the file with all the assignment data + return tempFile; + } + + + /** + * Returns a zip file containing all submissions related to the student with the given studentID + * @param courseID + * @param studentID + * @return + * @throws IOException + */ + public File aggregateSubmissionsStudent(String courseID, String studentID) throws IOException { + //make the temporary zip folder + File tempFile = Files.createTempFile(courseID+studentID, ".zip").toFile(); + String tempPath = tempFile.getAbsolutePath(); + ZipOutputStream zipFolder = new ZipOutputStream(new FileOutputStream(tempPath)); + //get a list of all the assignments + for (Document currentAssignment : assignmentsCollection.find(eq("course_id", courseID))) { + //get the next assignment related to the current course + //get this to get the submissions quicker + Integer assignment_ID = currentAssignment.getInteger("assignment_id"); + //now iterate through the submissions for the assignment and put them in the proper place in the zip folder + insertAssignmentFilesStudent(submissionCollection.find(eq("assignment_id", assignment_ID)).iterator(), courseID, studentID, zipFolder); + } + zipFolder.close(); + + //return the file with all the assignment data + return tempFile; + } + + /** + * Retrieves all assignments pertaining to a specific course. + * + * @param courseId id of the course + */ + public List getAllCourseAssignmentsAndPeerReviews(String courseId) { + + /* Get all individual grades on assignments for students in the course */ + Document course = courseCollection.find(eq("course_id", courseId)).first(); + if (course == null) { + throw new WebApplicationException(Response.status(Response.Status.BAD_REQUEST).entity("Course does not exist.").toString()); + } + List enrolledStudents = course.getList("students", String.class); + List submissions = new ArrayList<>(); + for (String studentId : enrolledStudents) { + List subs = submissionCollection.find( + and( + eq("course_id", courseId), + (eq("members", studentId)), + (eq("type", "team_submission")) + ) + ).into(new ArrayList<>()); + for (Document sub : subs) { + sub.append("student_id", studentId); + submissions.add(sub); + } + } + + /* Get all peer review scores for each team for assignments done by said team */ + List peerReviews = submissionCollection.find( + and( + eq("course_id", courseId), + (eq("type", "peer_review_submission")) + ) + ).into(new ArrayList<>()); + submissions.addAll(peerReviews); + return submissions; + } + + /** + * Updates an individual's score for an assignment or specific peer review. + * + * @param studentId id of the student whose grade is being updated. + * @param submissionId the id of the student's submission to be edited. + * @param newGrade the new grade for the student on the given assignment. + * @param type indicates if the grade being updated is for an assignment or a peer review. + * @throws WebApplicationException if the student does not exist or the student has no grade + * for the assignment. + */ + public void updateIndividualGrade(String studentId, int submissionId, String reviewingTeam, String newGrade, String type) { + /* Find the correct student */ + System.out.println(studentId); + Bson studentQuery = eq("student_id", studentId); + Document student = studentCollection.find(studentQuery).first(); + + /* Throw an exception if no such student exists. */ + if (student == null) { + throw new WebApplicationException("Student could not be found.", 300); + } + + /* Find the correct assignment to update for the student. */ + List assignmentGrades = student.getList("team_submissions", Document.class); + List peerReviewGrades = student.getList("peer_reviews", Document.class); + Document assignment = null; + + if (type.equalsIgnoreCase("teamSubmission")) { + for (Document studentAssignment : assignmentGrades) { + if (studentAssignment.getInteger("assignment_id") == submissionId) { + assignmentGrades.remove(studentAssignment); + assignment = new Document() + .append("assignment_id", studentAssignment.getInteger("assignment_id")) + .append("grade", Double.valueOf(newGrade)) + .append("team_name", studentAssignment.getString("team_name")); + assignmentGrades.add(assignment); + break; + } + } + + /* Throw an exception if the student does not have a grade for the specified assignment */ + if (assignment == null) { + throw new WebApplicationException("The student does not have a grade for the given assignment.", 402); + } + + /* Update the student's grade */ + Bson replaceStudentQuery = eq("student_id", studentId); + UpdateOptions options = new UpdateOptions().upsert(true); + Bson update = Updates.set("team_submissions", assignmentGrades); + } else if (type.equalsIgnoreCase("peerReview")) { + for (Document studentAssignment : peerReviewGrades) { + if (studentAssignment.getInteger("assignment_id") == submissionId && studentAssignment.getString("reviewed_by").equals(reviewingTeam)) { + peerReviewGrades.remove(studentAssignment); + assignment = new Document() + .append("assignment_id", studentAssignment.getInteger("assignment_id")) + .append("grade", Double.valueOf(newGrade)) + .append("reviewed_by", studentAssignment.getString("reviewed_by")) + .append("reviewed_team", studentAssignment.getString("reviewed_team")); + peerReviewGrades.add(assignment); + break; + } + } + + /* Throw an exception if the student does not have a grade for the specified assignment */ + if (assignment == null) { + throw new WebApplicationException("The student does not have a grade for the given assignment.", 404); + } + + /* Update the student's grade */ + Bson replaceStudentQuery = eq("student_id", studentId); + UpdateOptions options = new UpdateOptions().upsert(true); + Bson update = Updates.set("peer_reviews", peerReviewGrades); + studentCollection.updateOne(replaceStudentQuery, update, options); + } else { + throw new WebApplicationException("Invalid type given.", 400); + } + } + + /** + * Updates a team's grade for either an assignment or an individual peer review. + * + * @param reviewedTeamName the name of the team that was reviewed + * @param reviewingTeamName the name of the team who completed the peer review (if applicable) + * @param assignmentId id of the assignment whose grade is to be edited + * @param newGrade the new grade for the submission + * @param type indicating if it is a team submission or peer review to be edited + */ + public void updateTeamGrade(String reviewedTeamName, String reviewingTeamName, int assignmentId, String newGrade, String type) { + /* Find the correct submission */ + Bson assignmentQuery = null; + if (type.equalsIgnoreCase("teamSubmission")) { + assignmentQuery = and( + eq("team_name", reviewedTeamName), + eq("assignment_id", assignmentId), + eq("type", "team_submission") + ); + } else if (type.equalsIgnoreCase("peerReview")) { + assignmentQuery = and( + eq("reviewed_by", reviewingTeamName), + eq("reviewed_team", reviewedTeamName), + eq("assignment_id", assignmentId), + eq("type", "peer_review_submission") + ); + } else { + throw new WebApplicationException("Invalid type given.", 400); + } + Document assignment = submissionCollection.find(assignmentQuery).first(); + + /* Throw an exception if the given submission does not exist */ + if (assignment == null) { + throw new WebApplicationException("No such assignment exists.", 303); + } + + /* Update the grade in the submissions collection */ + Bson submissionUpdate = Updates.set("grade", newGrade); + submissionCollection.updateOne(assignmentQuery, submissionUpdate, new UpdateOptions().upsert(true)); + + /* Update the grade for each student in the students collection */ + if (type.equalsIgnoreCase("teamSubmission")) { + List teamMembers = assignment.getList("members", String.class); + teamMembers.forEach(teamMemberId -> { + Bson studentQuery = eq("student_id", teamMemberId); + Document student = studentCollection.find(studentQuery).first(); + assert student != null; + List teamSubmissionGrades = student.getList("team_submissions", Document.class); + Document teamSubmissionDocument = null; + for (Document teamSubmission : teamSubmissionGrades) { + if (teamSubmission.getInteger("assignment_id") == assignmentId && teamSubmission.getString("team_name").equals(reviewedTeamName)) { + teamSubmissionGrades.remove(teamSubmission); + teamSubmissionDocument = new Document() + .append("assignment_id", teamSubmission.getInteger("assignment_id")) + .append("grade", Double.valueOf(newGrade)) + .append("team_name", teamSubmission.getString("team_name")); + teamSubmissionGrades.add(teamSubmissionDocument); + break; + } + } + if (teamSubmissionDocument == null) { + throw new WebApplicationException("This student does not have a grade for the specified assignment", 301); + } + Bson update = Updates.set("team_submissions", teamSubmissionGrades); + UpdateOptions options = new UpdateOptions().upsert(true); + studentCollection.updateOne(studentQuery, update, options); + }); + } else { + List teamMembers = assignment.getList("reviewed_team_members", String.class); + teamMembers.forEach(teamMemberId -> { + Bson studentQuery = eq("student_id", teamMemberId); + Document student = studentCollection.find(studentQuery).first(); + assert student != null; + List peerReviewGrades = student.getList("peer_reviews", Document.class); + Document peerReviewDocument = null; + for (Document peerReview : peerReviewGrades) { + System.out.println("new one"); + System.out.println("Student ID: " + teamMemberId); + + System.out.println("Assignment ID"); + System.out.println(peerReview.getInteger("assignment_id") == assignmentId); + System.out.println(assignmentId); + System.out.println(peerReview.getInteger("assignment_id")); + + System.out.println("Reviewed By"); + System.out.println(peerReview.getString("reviewed_by").equalsIgnoreCase(reviewingTeamName)); + System.out.println(reviewingTeamName); + System.out.println(peerReview.getString("reviewed_by")); + + System.out.println("Team name"); + System.out.println(peerReview.getString("reviewed_team").equalsIgnoreCase(reviewedTeamName)); + System.out.println(reviewedTeamName); + System.out.println(peerReview.getString("reviewed_team")); + + if ((peerReview.getInteger("assignment_id") == assignmentId) && (peerReview.getString("reviewed_by").equalsIgnoreCase(reviewingTeamName)) + && (peerReview.getString("reviewed_team").equalsIgnoreCase(reviewedTeamName))) { + peerReviewGrades.remove(peerReview); + peerReviewDocument = new Document() + .append("assignment_id", peerReview.getInteger("assignment_id")) + .append("grade", Double.valueOf(newGrade)) + .append("team_name", peerReview.getString("reviewed_team")) + .append("reviewed_by", reviewingTeamName); + peerReviewGrades.add(peerReviewDocument); + break; + } + } + if (peerReviewDocument == null) { + throw new WebApplicationException("This student does not have a grade for the specified assignment", 300); + } + Bson update = Updates.set("peer_reviews", peerReviewGrades); + UpdateOptions options = new UpdateOptions().upsert(true); + studentCollection.updateOne(studentQuery, update, options); + }); + } + } } \ No newline at end of file diff --git a/backend/student-assignment-microservice/src/main/java/edu/oswego/cs/rest/database/DatabaseManager.java b/backend/student-assignment-microservice/src/main/java/edu/oswego/cs/rest/database/DatabaseManager.java old mode 100644 new mode 100755 diff --git a/backend/student-assignment-microservice/src/main/java/edu/oswego/cs/rest/resources/studentAssignmentResource.java b/backend/student-assignment-microservice/src/main/java/edu/oswego/cs/rest/resources/studentAssignmentResource.java old mode 100644 new mode 100755 index 2e20bf006..fe469391e --- a/backend/student-assignment-microservice/src/main/java/edu/oswego/cs/rest/resources/studentAssignmentResource.java +++ b/backend/student-assignment-microservice/src/main/java/edu/oswego/cs/rest/resources/studentAssignmentResource.java @@ -1,25 +1,34 @@ + package edu.oswego.cs.rest.resources; import com.ibm.websphere.jaxrs20.multipart.IAttachment; import edu.oswego.cs.rest.daos.FileDAO; import edu.oswego.cs.rest.database.AssignmentInterface; +import org.apache.tika.exception.TikaException; import org.bson.Document; +import org.bson.types.Binary; +import org.eclipse.microprofile.openapi.annotations.parameters.RequestBody; +import org.xml.sax.SAXException; import javax.annotation.security.DenyAll; import javax.annotation.security.RolesAllowed; import javax.ws.rs.*; +import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; +import javax.ws.rs.core.SecurityContext; import java.io.File; import java.io.IOException; -import java.util.Arrays; +import java.nio.file.Files; +import java.util.Base64; import java.util.List; -import java.util.Optional; @Path("student") @DenyAll public class studentAssignmentResource { + //change + /** * Retrieves the assignment from its location on the server and passes it to the front end via the request header * as a stream. The request entity passes an InputStream[] with the assignment files in each array. @@ -37,17 +46,18 @@ public Response downloadAssignment( @PathParam("courseID") String courseID, @PathParam("assignmentID") int assignmentID, @PathParam("teamName") String teamName) { - - String path = "assignments" + "/" + courseID + "/" + assignmentID + "/" + "team-submissions" + "/"; - Optional file = Arrays.stream(new File(path).listFiles()).filter(f -> f.getName().contains(teamName)).findFirst(); - if (file.isEmpty()) + Document teamSubmission = new AssignmentInterface().getSpecifiedTeamSubmission(courseID, assignmentID, teamName); + if (teamSubmission == null) return Response.status(Response.Status.BAD_REQUEST).entity("Assignment Does Not Exist").build(); - Response.ResponseBuilder response = Response.ok(file.get()); - response.header("Content-Disposition", "attachment; filename=" + file.get().getName()); + Binary fileData = (Binary) teamSubmission.get("submission_data"); + Response.ResponseBuilder response = Response.ok(Base64.getEncoder().encode(fileData.getData())); + response.header("Content-Disposition", "attachment; filename=" + teamSubmission.get("submission_name")); return response.build(); } + //change + /** * File is uploaded as form-data and passed back as a List * The attachment is processed in FileDao.FileFactory, which reads and @@ -60,21 +70,26 @@ public Response downloadAssignment( */ @POST @RolesAllowed({"professor", "student"}) - @Produces({MediaType.MULTIPART_FORM_DATA, "application/pdf"}) + @Consumes(MediaType.MULTIPART_FORM_DATA) + @Produces(MediaType.MULTIPART_FORM_DATA) @Path("/courses/{courseID}/assignments/{assignmentID}/{teamName}/upload") public Response addFileToAssignment( List attachments, @PathParam("courseID") String courseID, @PathParam("assignmentID") int assignmentID, @PathParam("teamName") String teamName - ) throws IOException { + ) throws TikaException, SAXException { for (IAttachment attachment : attachments) { if (attachment == null) continue; String fileName = attachment.getDataHandler().getName(); String fileExt = fileName.substring(fileName.indexOf(".")); if (!fileName.endsWith("pdf") && !fileName.endsWith("docx")) return Response.status(Response.Status.UNSUPPORTED_MEDIA_TYPE).build(); - new AssignmentInterface().writeToAssignment(FileDAO.fileFactory(teamName.concat(fileExt), courseID, attachment, assignmentID, teamName)); + try { + new AssignmentInterface().writeToAssignment(FileDAO.fileFactory(teamName.concat(fileExt), courseID, attachment, assignmentID, teamName)); + } catch (IOException e) { + return Response.status(Response.Status.BAD_REQUEST).entity(e.getMessage()).build(); + } } return Response.status(Response.Status.OK).entity("Successfully uploaded assignment.").build(); } @@ -128,4 +143,160 @@ public Response viewSubmissions( public Response viewToDos(@PathParam("courseID") String courseID, @PathParam("student_id") String student_id) { return Response.status(Response.Status.OK).entity(new AssignmentInterface().getToDosByCourse(courseID, student_id)).build(); } -} \ No newline at end of file + + /** + * @param courseID + * @return String + *

+ * Returns a Base64 string of the zip file containing all submission/peer review information relative to all the assignments + * in a given course that the frontend can decode and get a zip file from. Note that if no peer reviews are added to the assignment + * the Peer-Reviews folder won't be made. + * Structure of the unzipped file goes: + * + * | + * | + * L-> + * | + * | + * L-> + * | + * | + * L-> ---> + * L-> + * | + * | + * L-> ---> + * L-> ---> + */ + @GET + @RolesAllowed("professor") + @Path("{course_id}/course-assignment-files") + @Produces({MediaType.MULTIPART_FORM_DATA, MediaType.APPLICATION_OCTET_STREAM}) + public Response getAllCourseDocuments(@Context SecurityContext securityContext, @PathParam("course_id") String courseID) throws IOException { + //make sure the user is the professor of the course + new AssignmentInterface().checkProfessor(securityContext, courseID); + //create the zip file + File zipFile = new AssignmentInterface().aggregateSubmissions(courseID); + //create the base64 representation + Response.ResponseBuilder response = Response.ok(Base64.getEncoder().encode(Files.readAllBytes(zipFile.toPath()))); + response.header("Content-Disposition", "attachment; filename=" + courseID + ".zip"); + //delete the temp file + zipFile.delete(); + //send back the zip file Base64 + return response.build(); + } + + /** + * @param courseID + * @return String + *

+ * Returns a Base64 string of the zip file containing all submission/peer review information relative to all the assignments + * in a given course that the frontend can decode and get a zip file from. Note that if no peer reviews are added to the assignment + * the Peer-Reviews folder won't be made. + * Structure of the unzipped file goes: + * + * | + * | + * L-> + * | + * | + * | + * L-> ---> + * L-> + * | + * | + * L-> ---> + * L-> ---> + */ + @GET + @RolesAllowed("professor") + @Path("{course_id}/{student_id}/course-assignment-files-student") + @Produces({MediaType.MULTIPART_FORM_DATA, MediaType.APPLICATION_OCTET_STREAM}) + public Response getAllCourseDocumentsStudent(@Context SecurityContext securityContext, @PathParam("course_id") String courseID, @PathParam("student_id") String studentID) throws IOException { + //make sure the user is the professor of the course + System.out.println("here we are"); + new AssignmentInterface().checkProfessor(securityContext, courseID); + //create the zip file + File zipFile = new AssignmentInterface().aggregateSubmissionsStudent(courseID, studentID); + //create the base64 representation + Response.ResponseBuilder response = Response.ok(Base64.getEncoder().encode(Files.readAllBytes(zipFile.toPath()))); + response.header("Content-Disposition", "attachment; filename=" + courseID + "-" + studentID + "Submissions.zip"); + //delete the temp file + zipFile.delete(); + //send back the zip file Base64 + return response.build(); + } + + /** + * @param courseID + * @param assignmentID + * @return String + *

+ * Returns a Base64 string of the zip file containing all submission/peer review information relative to the given assignment + * that the frontend can decode and get a zip file from. Note that if no peer reviews are added to the assignment + * the Peer-Reviews folder won't be made. + * Structure of unzipped file goes: + *

+ * + * | + * | + * L-> + * | + * | + * L-> + * | + * | + * L-> ---> + * L-> + * | + * | + * L-> ---> + * L-> ---> + */ + @GET + @RolesAllowed("professor") + @Path("{assignment_id}/{course_id}/course-assignment-files") + @Produces({MediaType.MULTIPART_FORM_DATA, MediaType.APPLICATION_OCTET_STREAM}) + public Response getAssignmentDocuments(@Context SecurityContext securityContext, @PathParam("course_id") String courseID, @PathParam("assignment_id") String assignmentID) throws IOException { + //make sure the user is the professor of the course + new AssignmentInterface().checkProfessor(securityContext, courseID); + //create the zip file + File zipFile = new AssignmentInterface().aggregateSubmissions(courseID, Integer.parseInt(assignmentID)); + //create the base64 representation + Response.ResponseBuilder response = Response.ok(Base64.getEncoder().encode(Files.readAllBytes(zipFile.toPath()))); + response.header("Content-Disposition", "attachment; filename=" + courseID + ".zip"); + //delete the temp file + zipFile.delete(); + //send back the zip file Base64 + return response.build(); + } + + @GET + @RolesAllowed("professor") + @Path("{courseID}/all-grades") + @Produces(MediaType.APPLICATION_JSON) + public Response getAllAssignmentsAndPeerReviews(@PathParam("courseID") String courseId) { + List docs = new AssignmentInterface().getAllCourseAssignmentsAndPeerReviews(courseId); + return Response.status(Response.Status.OK).entity(docs).build(); + } + + @POST + @RolesAllowed("professor") + @Path("edit/{assignmentId}/{teamName}/{type}/{reviewedBy}/{newGrade}") + @Produces(MediaType.APPLICATION_JSON) + public Response updateTeamGrade(@PathParam("assignmentId") int assignmentId, @PathParam("teamName") String teamName, @PathParam("type") String type, + @PathParam("reviewedBy") String reviewedBy, @PathParam("newGrade") String newGrade) { + new AssignmentInterface().updateTeamGrade(teamName, reviewedBy, assignmentId, newGrade, type); + return Response.status(201).build(); + } + + @POST + @RolesAllowed("professor") + @Path("edit/{studentId}/{assignmentId}/{reviewedBy}/{type}/{newGrade}") + @Produces(MediaType.APPLICATION_JSON) + public Response updateIndividualGrade(@PathParam("newGrade") String newGrade, @PathParam("studentId") String studentId, @PathParam("assignmentId") int assignmentId, + @PathParam("type") String type, @PathParam("reviewedBy") String reviewedBy) { + new AssignmentInterface().updateIndividualGrade(studentId, assignmentId, reviewedBy,newGrade, type); + return Response.status(201).build(); + } +} diff --git a/backend/student-assignment-microservice/src/main/liberty/config/server.xml b/backend/student-assignment-microservice/src/main/liberty/config/server.xml old mode 100644 new mode 100755 diff --git a/backend/student-assignment-microservice/src/test/java/StudentAssignmentTests.java b/backend/student-assignment-microservice/src/test/java/StudentAssignmentTests.java old mode 100644 new mode 100755 index 3f7aaa432..bdd48061f --- a/backend/student-assignment-microservice/src/test/java/StudentAssignmentTests.java +++ b/backend/student-assignment-microservice/src/test/java/StudentAssignmentTests.java @@ -1,10 +1,351 @@ +import com.mongodb.*; +import com.mongodb.client.MongoCollection; +import com.mongodb.client.MongoCursor; +import com.mongodb.client.model.Filters; +import edu.oswego.cs.rest.database.AssignmentInterface; +import org.bson.Document; import org.junit.jupiter.api.*; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; import javax.json.bind.Jsonb; import javax.json.bind.JsonbBuilder; import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; +import java.util.Arrays; +import static com.mongodb.client.model.Filters.and; +import static com.mongodb.client.model.Filters.eq; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +//please use the default db setup outlined in the "Database Default for Testing" file +//TC|ID 1.1 = TCIDOnePointOne is the naming convention for now +public class StudentAssignmentTests { + + AssignmentInterface assignInter = new AssignmentInterface(); + MongoClient mongoClient, mongoClient2, mongoClient3, mongoClient4, mongoClient5; + MongoCollection teamCollection, assignmentCollection, submissionsCollection; + + +//------------------------------------------------------------------------------------------------------------------------------ + + //To test: + //public void makeSubmission(String course_id, int assignment_id, String file_name, String teamName) + + @Test + public void makeSubmissionTCIDOnePointOne(){//valid course_id + + //gives access to db + //------------------------------------------------------------------------------------------------------------------------------ + //from env file + String username = "root"; + String database = "admin"; + String password = "password"; + //Create credentials + MongoCredential mongoCredential = MongoCredential.createCredential(username, database, password.toCharArray()); + MongoClientOptions options = MongoClientOptions.builder() + .writeConcern(WriteConcern.JOURNALED).build(); + + mongoClient4 = new MongoClient(new ServerAddress("localhost", 27040), Arrays.asList(mongoCredential), options); + submissionsCollection = mongoClient4.getDatabase("cpr").getCollection("submissions"); + //------------------------------------------------------------------------------------------------------------------------------ + + String course_id= "CSC-480-46374-SPR-2023"; + int assignment_id= 1; + String file_name= "file1.pdf";//to add to submissions Collection + String teamName= "Team1";//name of team that submitted the file +// assignInter.makeSubmission(course_id,assignment_id,file_name,teamName);//call method to be tested + + //check if file was added to submissions Collection + + MongoCursor query = submissionsCollection.find(and( + eq("course_id", course_id), + eq("assignment_id", assignment_id), + eq("submission_name", file_name), + eq("team_name", teamName))).iterator(); + Document docFromQuery= query.next();//gets the Document returned by the query + String queriedSubmissionName= docFromQuery.get("submission_name",file_name); + + Document expectedDoc= new Document() + .append("course_id", course_id) + .append("assignment_id", assignment_id) + .append("submission_name", file_name) + .append("team_name", teamName); + String expectedSubmissionName= expectedDoc.get("submission_name",file_name); + + assertEquals(expectedSubmissionName,queriedSubmissionName); + + //remove the change we made to the db (ie. remove the Document we just added) + submissionsCollection.deleteOne(and(Filters. + eq("course_id", course_id), + eq("assignment_id", assignment_id), + eq("submission_name", file_name), + eq("team_name", teamName))); + + + } + + @Test + public void makeSubmissionTCIDOnePointA(){//null course_id + + //gives access to db + //------------------------------------------------------------------------------------------------------------------------------ + //from env file + String username = "root"; + String database = "admin"; + String password = "password"; + //Create credentials + MongoCredential mongoCredential = MongoCredential.createCredential(username, database, password.toCharArray()); + MongoClientOptions options = MongoClientOptions.builder() + .writeConcern(WriteConcern.JOURNALED).build(); + + mongoClient4 = new MongoClient(new ServerAddress("localhost", 27040), Arrays.asList(mongoCredential), options); + submissionsCollection = mongoClient4.getDatabase("cpr").getCollection("submissions"); + //------------------------------------------------------------------------------------------------------------------------------ + + String course_id= null; + int assignment_id= 1; + String file_name= "file1.pdf";//to add to submissions Collection + String teamName= "Team1";//name of team that submitted the file + + //asserts that a javax.ws.rs.WebApplicationException is thrown +// Exception exception = assertThrows( +// javax.ws.rs.WebApplicationException.class, +// () -> assignInter.makeSubmission(course_id,assignment_id,file_name,teamName));//call method to be tested + + } + + @ParameterizedTest + @ValueSource(ints = {-1, 0}) + public void makeSubmissionTCIDTwoPointAB() {//-1,0 assignment_id + + //gives access to db + //------------------------------------------------------------------------------------------------------------------------------ + //from env file + String username = "root"; + String database = "admin"; + String password = "password"; + //Create credentials + MongoCredential mongoCredential = MongoCredential.createCredential(username, database, password.toCharArray()); + MongoClientOptions options = MongoClientOptions.builder() + .writeConcern(WriteConcern.JOURNALED).build(); + + mongoClient4 = new MongoClient(new ServerAddress("localhost", 27040), Arrays.asList(mongoCredential), options); + submissionsCollection = mongoClient4.getDatabase("cpr").getCollection("submissions"); + //------------------------------------------------------------------------------------------------------------------------------ + + String course_id ="CSC-480-46374-SPR-2023"; + int assignment_id = -1; + String file_name = "file1.pdf";//to add to submissions Collection + String teamName = "Team1";//name of team that submitted the file + + //asserts that a javax.ws.rs.WebApplicationException is thrown +// Exception exception = assertThrows( +// javax.ws.rs.WebApplicationException.class, +// () -> assignInter.makeSubmission(course_id,assignment_id,file_name,teamName));//call method to be tested + + } + + //does not pass when run with makeSubmissionTCIDThreePointA(); + //passes after resetting db and not running together with makeSubmissionTCIDThreePointA() + @Test + public void makeSubmissionTCIDThreePointOne(){//valid file_name + + //gives access to db + //------------------------------------------------------------------------------------------------------------------------------ + //from env file + String username = "root"; + String database = "admin"; + String password = "password"; + //Create credentials + MongoCredential mongoCredential = MongoCredential.createCredential(username, database, password.toCharArray()); + MongoClientOptions options = MongoClientOptions.builder() + .writeConcern(WriteConcern.JOURNALED).build(); + + mongoClient4 = new MongoClient(new ServerAddress("localhost", 27040), Arrays.asList(mongoCredential), options); + submissionsCollection = mongoClient4.getDatabase("cpr").getCollection("submissions"); + //------------------------------------------------------------------------------------------------------------------------------ + + String course_id= "CSC-480-46374-SPR-2023"; + int assignment_id= 1; + String file_name= "file1.csv";//to add to submissions Collection + String teamName= "Team1";//name of team that submitted the file +// assignInter.makeSubmission(course_id,assignment_id,file_name,teamName);//call method to be tested + + //check if file was added to submissions Collection + + MongoCursor query = submissionsCollection.find(and( + eq("course_id", course_id), + eq("assignment_id", assignment_id), + eq("submission_name", file_name), + eq("team_name", teamName))).iterator(); + Document docFromQuery= query.next();//gets the Document returned by the query + String queriedSubmissionName= docFromQuery.get("submission_name",file_name); + + Document expectedDoc= new Document() + .append("course_id", course_id) + .append("assignment_id", assignment_id) + .append("submission_name", file_name) + .append("team_name", teamName); + String expectedSubmissionName= expectedDoc.get("submission_name",file_name); + + assertEquals(expectedSubmissionName,queriedSubmissionName); + + //remove the change we made to the db (ie. remove the Document we just added) + submissionsCollection.deleteOne(and(Filters. + eq("course_id", course_id), + eq("assignment_id", assignment_id), + eq("submission_name", file_name), + eq("team_name", teamName))); + + + } + + /* @Test + public void makeSubmissionTCIDThreePointA(){//null file_name + + //gives access to db + //------------------------------------------------------------------------------------------------------------------------------ + //from env file + String username = "root"; + String database = "admin"; + String password = "password"; + //Create credentials + MongoCredential mongoCredential = MongoCredential.createCredential(username, database, password.toCharArray()); + MongoClientOptions options = MongoClientOptions.builder() + .writeConcern(WriteConcern.JOURNALED).build(); + + mongoClient4 = new MongoClient(new ServerAddress("localhost", 27040), Arrays.asList(mongoCredential), options); + submissionsCollection = mongoClient4.getDatabase("cpr").getCollection("submissions"); + //------------------------------------------------------------------------------------------------------------------------------ + + String course_id= "CSC-480-46374-SPR-2023"; + int assignment_id= 1; + String file_name= null;//to add to submissions Collection + String teamName= "Team1";//name of team that submitted the file + + //asserts that a javax.ws.rs.WebApplicationException is thrown + Exception exception = assertThrows( + javax.ws.rs.WebApplicationException.class, + () -> assignInter.makeSubmission(course_id,assignment_id,file_name,teamName));//call method to be tested + + }*/ + + @Test + public void makeSubmissionTCIDFourPointA(){//null teamName + //gives access to db + //------------------------------------------------------------------------------------------------------------------------------ + //from env file + String username = "root"; + String database = "admin"; + String password = "password"; + //Create credentials + MongoCredential mongoCredential = MongoCredential.createCredential(username, database, password.toCharArray()); + MongoClientOptions options = MongoClientOptions.builder() + .writeConcern(WriteConcern.JOURNALED).build(); + + mongoClient4 = new MongoClient(new ServerAddress("localhost", 27040), Arrays.asList(mongoCredential), options); + submissionsCollection = mongoClient4.getDatabase("cpr").getCollection("submissions"); + //------------------------------------------------------------------------------------------------------------------------------ + + String course_id= "CSC-480-46374-SPR-2023"; + int assignment_id= 1; + String file_name= "file1.pdf";//to add to submissions Collection + String teamName= null;//name of team that submitted the file + + //asserts that a javax.ws.rs.WebApplicationException is thrown +// Exception exception = assertThrows( +// javax.ws.rs.WebApplicationException.class, +// () -> assignInter.makeSubmission(course_id,assignment_id,file_name,teamName));//call method to be tested + + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +//The following is code from last year: +/* // DISCLAIMER: Don't run all the tests at the same time. You'll likely screw up the database and fail the tests in some way. // Read through the tests to see what they create, update and delete before you run them please. @@ -60,3 +401,5 @@ public void studentDownloadFileTest() { } } +*/ + diff --git a/backend/student-peer-review-assignment-microservice/.dockerignore b/backend/student-peer-review-assignment-microservice/.dockerignore old mode 100644 new mode 100755 diff --git a/backend/student-peer-review-assignment-microservice/Dockerfile b/backend/student-peer-review-assignment-microservice/Dockerfile old mode 100644 new mode 100755 diff --git a/backend/student-peer-review-assignment-microservice/pom.xml b/backend/student-peer-review-assignment-microservice/pom.xml old mode 100644 new mode 100755 diff --git a/backend/student-peer-review-assignment-microservice/src/main/java/edu/oswego/cs/application/RestApplication.java b/backend/student-peer-review-assignment-microservice/src/main/java/edu/oswego/cs/application/RestApplication.java old mode 100644 new mode 100755 diff --git a/backend/student-peer-review-assignment-microservice/src/main/java/edu/oswego/cs/cors/CorsFilter.java b/backend/student-peer-review-assignment-microservice/src/main/java/edu/oswego/cs/cors/CorsFilter.java old mode 100644 new mode 100755 index ab7d6e54a..a60fb7f86 --- a/backend/student-peer-review-assignment-microservice/src/main/java/edu/oswego/cs/cors/CorsFilter.java +++ b/backend/student-peer-review-assignment-microservice/src/main/java/edu/oswego/cs/cors/CorsFilter.java @@ -11,17 +11,19 @@ public class CorsFilter implements ContainerResponseFilter { @Override - public void filter(ContainerRequestContext requestContext, - ContainerResponseContext responseContext) throws IOException { - responseContext.getHeaders().add( - "Access-Control-Allow-Origin", "*"); - responseContext.getHeaders().add( - "Access-Control-Allow-Credentials", "true"); - responseContext.getHeaders().add( - "Access-Control-Allow-Headers", - "origin, content-type, accept, authorization"); - responseContext.getHeaders().add( - "Access-Control-Allow-Methods", - "GET, POST, PUT, DELETE, OPTIONS, HEAD"); + public void filter(ContainerRequestContext requestContext, + ContainerResponseContext responseContext) throws IOException { + responseContext.getHeaders().add( + "Access-Control-Allow-Origin", "*"); + responseContext.getHeaders().add( + "Access-Control-Allow-Credentials", "true"); + responseContext.getHeaders().add( + "Access-Control-Allow-Headers", + "origin, content-type, accept, authorization"); + responseContext.getHeaders().add( + "Access-Control-Allow-Methods", + "GET, POST, PUT, DELETE, OPTIONS, HEAD"); + responseContext.getHeaders().add("Access-Control-Expose-Headers", + "Content-Disposition"); } } \ No newline at end of file diff --git a/backend/student-peer-review-assignment-microservice/src/main/java/edu/oswego/cs/database/DatabaseManager.java b/backend/student-peer-review-assignment-microservice/src/main/java/edu/oswego/cs/database/DatabaseManager.java old mode 100644 new mode 100755 diff --git a/backend/student-peer-review-assignment-microservice/src/main/java/edu/oswego/cs/database/PeerReviewAssignmentInterface.java b/backend/student-peer-review-assignment-microservice/src/main/java/edu/oswego/cs/database/PeerReviewAssignmentInterface.java old mode 100644 new mode 100755 index a03795bf2..b545252b0 --- a/backend/student-peer-review-assignment-microservice/src/main/java/edu/oswego/cs/database/PeerReviewAssignmentInterface.java +++ b/backend/student-peer-review-assignment-microservice/src/main/java/edu/oswego/cs/database/PeerReviewAssignmentInterface.java @@ -1,28 +1,36 @@ package edu.oswego.cs.database; -import com.ibm.websphere.jaxrs20.multipart.IAttachment; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoCursor; import com.mongodb.client.MongoDatabase; -import edu.oswego.cs.daos.FileDAO; +import com.mongodb.client.model.UpdateOptions; +import com.mongodb.client.model.Updates; +import com.mongodb.util.JSON; import org.bson.Document; +import org.bson.conversions.Bson; +import org.bson.types.Binary; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.Response; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStream; +import javax.ws.rs.core.SecurityContext; +import java.io.*; import java.util.*; +import java.text.DecimalFormat; +import java.util.concurrent.ConcurrentHashMap; import static com.mongodb.client.model.Filters.and; import static com.mongodb.client.model.Filters.eq; import static com.mongodb.client.model.Updates.set; +import com.mongodb.client.FindIterable; public class PeerReviewAssignmentInterface { private final MongoCollection teamCollection; private final MongoCollection assignmentCollection; private final MongoCollection submissionsCollection; + private final MongoCollection studentCollection; + private final MongoCollection professorCollection; + + static ConcurrentHashMap peerReviewLock = new ConcurrentHashMap(); MongoDatabase assignmentDB; public PeerReviewAssignmentInterface() { @@ -33,12 +41,15 @@ public PeerReviewAssignmentInterface() { teamCollection = teamDB.getCollection("teams"); assignmentCollection = assignmentDB.getCollection("assignments"); submissionsCollection = assignmentDB.getCollection("submissions"); + professorCollection = databaseManager.getProfessorDB().getCollection("professors"); + studentCollection = databaseManager.getStudentDB().getCollection("students"); + } catch (WebApplicationException e) { throw new WebApplicationException(Response.status(Response.Status.BAD_REQUEST).entity("Failed to retrieve collections.").build()); } } - public void addPeerReviewSubmission(String course_id, int assignment_id, String srcTeamName, String destinationTeam, String fileName, int grade) { + public void addPeerReviewSubmission(String course_id, int assignment_id, String srcTeamName, String destinationTeam, String fileName, int grade, InputStream fileData) throws IOException { Document reviewedByTeam = teamCollection.find(eq("team_id", srcTeamName)).first(); Document reviewedTeam = teamCollection.find(eq("team_id", destinationTeam)).first(); Document assignment = assignmentCollection.find(and(eq("course_id", course_id), eq("assignment_id", assignment_id))).first(); @@ -64,17 +75,52 @@ public void addPeerReviewSubmission(String course_id, int assignment_id, String .append("assignment_id", assignment_id) .append("assigment_name", assignment.getString("assignment_name")) .append("submission_name", fileName) + .append("submission_data", Base64.getDecoder().decode(new String(fileData.readAllBytes()))) .append("reviewed_by", reviewedByTeam.getString("team_id")) .append("reviewed_by_members", reviewedByTeam.getList("team_members", String.class)) .append("reviewed_team", reviewedTeam.getString("team_id")) .append("reviewed_team_members", reviewedTeam.getList("team_members", String.class)) .append("type", "peer_review_submission") - .append("grade", grade) - .append("path", path + reg + fileName); + .append("peer_review_due_date", assignment.get("peer_review_due_date")) + .append("due_date", assignment.getString("due_date")) + .append("grade", grade); + List teamMembers = reviewedTeam.getList("team_members", String.class); + for (String member : teamMembers) { + Document newStudentSubmission = new Document() + .append("assignment_id", assignment_id) + .append("reviewed_team", reviewedTeam.getString("team_id")) + .append("reviewed_by", reviewedByTeam.getString("team_id")) + .append("grade", grade); + Bson studentQuery = eq("student_id", member); + Document student = studentCollection.find(studentQuery).first(); + List peerReviews = student.getList("peer_reviews", Document.class); + peerReviews.add(newStudentSubmission); + Bson update = Updates.set("peer_reviews", peerReviews); + UpdateOptions options = new UpdateOptions().upsert(true); + studentCollection.updateOne(studentQuery, update, options); + } + //wait for the lock to be dropped. + //key is assignment_id+reviewed_by_team_id+reviewed_team+"peer_review_submission" + while (peerReviewLock.containsKey(assignment_id + reviewedByTeam.getString("team_id") + reviewedTeam.getString("team_id") + "peer_review_submission")) + ; + //lock the submission + peerReviewLock.put(assignment_id + reviewedByTeam.getString("team_id") + reviewedTeam.getString("team_id") + "peer_review_submission", true); if (submissionsCollection.find(new_submission).iterator().hasNext()) { + //let go of the lock + peerReviewLock.remove(assignment_id + reviewedByTeam.getString("team_id") + reviewedTeam.getString("team_id") + "peer_review_submission"); throw new WebApplicationException(Response.status(Response.Status.BAD_REQUEST).entity("submission already exists").build()); } else submissionsCollection.insertOne(new_submission); + //remove the lock + peerReviewLock.remove(assignment_id + reviewedByTeam.getString("team_id") + reviewedTeam.getString("team_id") + "peer_review_submission"); + // Store reviewed_team_members and teams in "teams" collection + teamCollection.updateOne( + eq("team_id", reviewedTeam.getString("team_id")), + new Document("$set", new Document() + .append("reviewed_team", reviewedByTeam.getString("team_id")) + .append("reviewed_members", reviewedByTeam.getList("team_members", String.class)))); + System.out.println(reviewedTeam.getString("team_id")); + System.out.println(reviewedByTeam.getList("team_members", String.class)); addCompletedTeam(course_id, assignment_id, srcTeamName, destinationTeam); } @@ -103,36 +149,37 @@ public void addCompletedTeam(String courseID, int assignmentID, String sourceTea } } if (currentNumOfReviews == (int) assignmentDocument.get("reviews_per_team")) { - makeFinalGrade(courseID, assignmentID, targetTeam); + //makeFinalGrade(courseID, assignmentID, targetTeam); + redoneMakeFinalGrade(courseID, assignmentID, targetTeam); } - if (assignmentDocument.get("completed_teams") == assignmentDocument.get("assigned_teams")) { - assignmentCollection.findOneAndUpdate(and(eq("course_id", courseID), eq("assignment_id", assignmentID)), set("grade_finalized", true)); + + //check if all team grades have been finalized + int num_of_reviews_needed = completedTeams.keySet().size()*assignmentDocument.getInteger("reviews_per_team"); + int total_num_of_reviews = 0; + for (Map.Entry> entry : completedTeams.entrySet()) { + List list = entry.getValue(); + total_num_of_reviews+=list.size(); } - } - public void uploadPeerReview(String courseID, int assignmentID, String srcTeamName, String destTeamName, IAttachment attachment) throws IOException { - FileDAO fileDAO = FileDAO.fileFactory(courseID, srcTeamName, destTeamName, assignmentID, attachment); - String path = "assignments" + "/" + courseID + "/" + assignmentID + "/peer-review-submissions/"; - if (!new File(path).exists()) { - new File(path).mkdirs(); + + if (total_num_of_reviews==num_of_reviews_needed) { + assignmentCollection.findOneAndUpdate(and(eq("course_id", courseID), eq("assignment_id", assignmentID)), set("grade_finalized", true)); } - OutputStream outputStream = new FileOutputStream(path + fileDAO.fileName + ".pdf"); - outputStream.write(fileDAO.inputStream.readAllBytes()); - outputStream.close(); } - public File downloadFinishedPeerReview(String courseID, int assignmentID, String srcTeamName, String destTeamName) { - String path = "assignments/" + courseID + "/" + assignmentID + "/peer-review-submissions/"; - if (!new File(path).exists()) - throw new WebApplicationException("Peer reviews do not exist for this course yet."); + public String downloadFinishedPeerReviewName(String courseID, int assignmentID, String srcTeamName, String destTeamName) { + Document submittedPeerReview = submissionsCollection.find(and(eq("type", "peer_review_submission"), eq("assignment_id", assignmentID), eq("course_id", courseID), eq("reviewed_by", srcTeamName), eq("reviewed_team", destTeamName))).first(); + if (submittedPeerReview == null) + throw new WebApplicationException("No peer review from team " + srcTeamName + " for " + destTeamName); + return (String) submittedPeerReview.get("submission_name"); - Optional file = Arrays.stream(new File(path).listFiles()) - .filter(f -> f.getName().contains(srcTeamName) && f.getName().contains(destTeamName)) - .findFirst(); + } - if (file.isEmpty()) + public Binary downloadFinishedPeerReview(String courseID, int assignmentID, String srcTeamName, String destTeamName) { + Document submittedPeerReview = submissionsCollection.find(and(eq("type", "peer_review_submission"), eq("assignment_id", assignmentID), eq("course_id", courseID), eq("reviewed_by", srcTeamName), eq("reviewed_team", destTeamName))).first(); + if (submittedPeerReview == null) throw new WebApplicationException("No peer review from team " + srcTeamName + " for " + destTeamName); - return file.get(); + return (Binary) submittedPeerReview.get("submission_data"); } @@ -260,6 +307,34 @@ public List getTeams(String courseID, int assignmentID) { return teams; } + + public Document redoneGetTeamGrades(String courseID, int assignmentID, String teamName) { + + List results = new ArrayList<>(); + + FindIterable iterable = submissionsCollection.find(and( + eq("reviewed_team", teamName), + eq("course_id", courseID), + eq("assignment_id", assignmentID), + eq("type", "peer_review_submission") + )); + + iterable.into(results); + System.out.println(results); + //for each grade this team received + List teams = new ArrayList<>(); + for (Document teamGradesReceived : results) { + //grabs the team that assigned this team the grade + Document document = new Document().append("team_name", teamGradesReceived.get("reviewed_by")); + if (results == null) document.append("grade_given", "pending"); + else document.append("grade_given", teamGradesReceived.getInteger("grade")); + teams.add(document); + } + + return new Document().append("teams", teams); + } + + @Deprecated public Document getTeamGrades(String courseID, int assignmentID, String teamName) { Document team = submissionsCollection.find(and( eq("course_id", courseID), @@ -285,7 +360,6 @@ public Document getTeamGrades(String courseID, int assignmentID, String teamName } return new Document().append("teams", teams); } - public Document professorUpdate(String courseID, int assignmentID, String teamName, int grade) { Document team = submissionsCollection.findOneAndUpdate(and( eq("course_id", courseID), @@ -298,6 +372,98 @@ public Document professorUpdate(String courseID, int assignmentID, String teamNa return team; } + //this is a method to test for creating a new makeFinalGrade method functionality, currently in testing + public void redoneMakeFinalGrade(String courseID, int assignmentID, String teamName) { + //need to know what the grade was 'out of' for rounding/final grade purposes + Document assignment = assignmentCollection.find(and(eq("course_id", courseID), eq("assignment_id", assignmentID))).first(); + if (assignment == null) + throw new WebApplicationException(Response.status(Response.Status.BAD_REQUEST).entity("Assignment not found.").build()); + int points = assignment.getInteger("points"); + + //get iterable of teams that have graded this team + List results = new ArrayList<>(); + + FindIterable iterable = submissionsCollection.find(and( + eq("reviewed_team", teamName), + eq("course_id", courseID), + eq("assignment_id", assignmentID), + eq("type", "peer_review_submission") + )); + + iterable.into(results); + System.out.println(results); + + if (iterable == null) + throw new WebApplicationException(Response.status(Response.Status.BAD_REQUEST).entity("Assigned teams not found for: " + teamName + "for assignment: " + assignmentID).build()); + + int count_of_reviews_submitted = results.size(); + int total_points = 0; + //for each grade this team received + for (Document teamGradesReceived : results) { + total_points += teamGradesReceived.get("grade", Integer.class); + } + + DecimalFormat tenth = new DecimalFormat("0.##"); + double final_grade = Double.parseDouble(tenth.format((((double) total_points / count_of_reviews_submitted) / points) * 100));//round + + + Document team_submission = submissionsCollection.find(and( + eq("course_id", courseID), + eq("assignment_id", assignmentID), + eq("team_name", teamName), + eq("type", "team_submission"))).first(); + submissionsCollection.findOneAndUpdate(team_submission, set("grade", final_grade)); + + //set the peer review grades for the student. + List teams_that_graded = team_submission.getList("reviews", String.class); + for (String review : teams_that_graded) { + Document team_review = submissionsCollection.find(and( + eq("course_id", courseID), + eq("assignment_id", assignmentID), + eq("reviewed_by", review), + eq("reviewed_team", teamName), + eq("type", "peer_review_submission"))).first(); + if (team_review == null) { + count_of_reviews_submitted--; + } else { + if (team_review.get("grade", Integer.class) == null) { + throw new WebApplicationException(Response.status(Response.Status.BAD_REQUEST).entity("team: " + review + "'s review has no points.").build()); + } else { + total_points += team_review.get("grade", Integer.class); + for (String teamMember : team_review.getList("reviewed_team_members", String.class)) { + Document newPeerReview = new Document() + .append("course_id", courseID) + .append("grade", team_review.getInteger("grade")) + .append("team_name", teamName); + List peerReviews = studentCollection.find(eq("student_id", teamMember)).first().getList("peer_reviews", Document.class); + peerReviews.add(newPeerReview); + Bson studentQuery = eq("student_id", teamMember); + Bson update = Updates.set("team_submissions", peerReviews); + UpdateOptions options = new UpdateOptions().upsert(true); + studentCollection.updateOne(studentQuery, update, options); + } + } + } + } + + //set the final grade + for (String member : team_submission.getList("members", String.class)) { + List grades = new ArrayList(); + grades.addAll(studentCollection.find(eq("student_id", member)).first().getList("team_submissions", Document.class)); + Document newAssignmentGrade = new Document() + .append("assignment_id", assignmentID) + .append("grade", final_grade) + .append("team_name", team_submission.getString("team_name")); + grades.add(newAssignmentGrade); + Bson filter = eq("student_id", member); + UpdateOptions options = new UpdateOptions().upsert(true); + Bson update = Updates.set("team_submissions", grades); + studentCollection.updateOne(filter, update, options); + } + } + + + @Deprecated public void makeFinalGrade(String courseID, int assignmentID, String teamName) { Document assignment = assignmentCollection.find(and(eq("course_id", courseID), eq("assignment_id", assignmentID))).first(); if (assignment == null) @@ -310,15 +476,27 @@ public void makeFinalGrade(String courseID, int assignmentID, String teamName) { eq("type", "team_submission"))).first(); List teams_that_graded = team_submission.getList("reviews", String.class); + + if (teams_that_graded == null) throw new WebApplicationException(Response.status(Response.Status.BAD_REQUEST).entity("Assigned teams not found for: " + teamName + "for assignment: " + assignmentID).build()); int total_points = 0; int count_of_reviews_submitted = teams_that_graded.size(); + + //my code + String[] temp = new String[count_of_reviews_submitted]; + int counter = 0; + for (String teamsThatGraded : teams_that_graded) { + temp[counter] = teamsThatGraded; + counter++; + } + int currentTeam = 0; for (String review : teams_that_graded) { Document team_review = submissionsCollection.find(and( eq("course_id", courseID), eq("assignment_id", assignmentID), eq("reviewed_by", review), + eq("reviewed_team", teamName), eq("type", "peer_review_submission"))).first(); if (team_review == null) { count_of_reviews_submitted--; @@ -327,12 +505,39 @@ public void makeFinalGrade(String courseID, int assignmentID, String teamName) { throw new WebApplicationException(Response.status(Response.Status.BAD_REQUEST).entity("team: " + review + "'s review has no points.").build()); } else { total_points += team_review.get("grade", Integer.class); + for (String teamMember : team_review.getList("reviewed_team", String.class)) { + Document newPeerReview = new Document() + .append("course_id", courseID) + .append("grade", team_review.getInteger("grade")) + .append("team_name", teamName); + List peerReviews = studentCollection.find(eq("student_id", teamMember)).first().getList("peer_reviews", Document.class); + peerReviews.add(newPeerReview); + Bson studentQuery = eq("student_id", teamMember); + Bson update = Updates.set("team_submissions", peerReviews); + UpdateOptions options = new UpdateOptions().upsert(true); + studentCollection.updateOne(studentQuery, update, options); + } } } + currentTeam++; } - double final_grade = (((double) total_points / count_of_reviews_submitted) / points) * 100; - final_grade = ((int) (final_grade * 100) / 100.0); //round to the nearest 10th + DecimalFormat tenth = new DecimalFormat("0.##"); + double final_grade = Double.parseDouble(tenth.format((((double) total_points / count_of_reviews_submitted) / points) * 100));//round + submissionsCollection.findOneAndUpdate(team_submission, set("grade", final_grade)); + for (String member : team_submission.getList("members", String.class)) { + List grades = new ArrayList(); + grades.addAll(studentCollection.find(eq("student_id", member)).first().getList("team_submissions", Document.class)); + Document newAssignmentGrade = new Document() + .append("assignment_id", assignmentID) + .append("grade", final_grade) + .append("team_name", team_submission.getString("team_name")); + grades.add(newAssignmentGrade); + Bson filter = eq("student_id", member); + UpdateOptions options = new UpdateOptions().upsert(true); + Bson update = Updates.set("team_submissions", grades); + studentCollection.updateOne(filter, update, options); + } } public void makeFinalGrades(String courseID, int assignmentID) { @@ -367,6 +572,7 @@ public void makeFinalGrades(String courseID, int assignmentID) { eq("course_id", courseID), eq("assignment_id", assignmentID), eq("reviewed_by", review), + //eq("reviewed_team", teamName), eq("type", "peer_review_submission"))).first(); if (team_review == null) { count_of_reviews_submitted--; @@ -375,11 +581,13 @@ public void makeFinalGrades(String courseID, int assignmentID) { throw new WebApplicationException(Response.status(Response.Status.BAD_REQUEST).entity("team: " + review + "'s review has no points.").build()); } else { total_points += team_review.get("grade", Integer.class); + } } } - double final_grade = (((double) total_points / count_of_reviews_submitted) / points) * 100; - final_grade = ((int) (final_grade * 100) / 100.0); //round to the nearest 10th + DecimalFormat tenth = new DecimalFormat("0.##"); + double final_grade = Double.parseDouble(tenth.format((((double) total_points / count_of_reviews_submitted) / points) * 100));//round + submissionsCollection.findOneAndUpdate(team_submission, set("grade", final_grade)); assignmentCollection.findOneAndUpdate(and(eq("course_id", courseID), eq("assignment_id", assignmentID)), set("grade_finalized", true)); } @@ -397,4 +605,1054 @@ public Document getGradeForTeam(String courseID, int assignmentID, String teamNa if (result.getInteger("grade") == null) return new Document("grade", -1); else return new Document("grade", result.getInteger("grade")); } -} \ No newline at end of file + /** + * The method gets the team names and their members from teamCollection and gets the final grade from submissionsCollection, + * then it returns a document object containg individual student and their grade. + */ + public Document getGradeForStudent(String courseID, int assignmentID, String teamID, String studentID) { + Document reviewedTeam = teamCollection.find(eq("reviewed_team", teamID)).first(); + //System.out.println(reviewedTeam); + if (reviewedTeam == null) + throw new WebApplicationException(Response.status(Response.Status.BAD_REQUEST).entity("Reviewed Team not found.").build()); + List teamMembers = reviewedTeam.getList("reviewed_members", String.class); + //System.out.println(teamMembers); + if (teamMembers == null) + throw new WebApplicationException(Response.status(Response.Status.BAD_REQUEST).entity("No students found.").build()); + if (!teamMembers.contains(studentID)) + throw new WebApplicationException(Response.status(Response.Status.BAD_REQUEST).entity("Student not found.").build()); + Document result = submissionsCollection.find(and( + eq("course_id", courseID), + eq("assignment_id", assignmentID), + eq("team_name", teamID), + eq("type", "team_submission") + )).first(); + if (result == null) { + throw new WebApplicationException(Response.status(Response.Status.BAD_REQUEST).entity("No submission found.").build()); + } else { + Document gradeDoc = new Document() + .append("studentID", studentID) + .append("grade", result.getDouble("grade")); + // + // System.out.println(gradeDoc); + return gradeDoc; + } + } + + + //redone matrix outlier detection + public Document getMatrixOfOutlierAndGrades(String courseID, int assignmentID) { + + //get all teams that were assigned this assignment in the course(will be the 'iterable') + Document assignment = assignmentCollection.find(and(eq("course_id", courseID), eq("assignment_id", assignmentID))).first(); + if (assignment == null) + throw new WebApplicationException(Response.status(Response.Status.BAD_REQUEST).entity("Assignment not found.").build()); + //grab all teams assigned this + List allTeams = assignment.getList("all_teams", String.class); + + + Document matrixHolder = new Document(); + //for every team assigned this assignment + for (String individialTeam : allTeams) { + + //for each team, we will query the DB for a list of documents where they have received a review + //get iterable of teams that have graded this team + List teamsThatReviewedThisTeam = new ArrayList<>(); + FindIterable iterable = submissionsCollection.find(and( + eq("reviewed_team", individialTeam), + eq("course_id", courseID), + eq("assignment_id", assignmentID), + eq("type", "peer_review_submission") + )); + //put iterable contents into array list + iterable.into(teamsThatReviewedThisTeam); + + //we then iterate through this document, grabbing the grade and then determining if that grade + //is an outlier, if it is append a true flag to that grade, else append false + + //document to hold the team that graded and the grade + Document gradeHolder = new Document(); + int totalGrade = 0; + double averageGradeReceived; + int numTeamsReviewed = 0; //= teamsThatReviewedThisTeam.size(); + for (Document respectiveGradesReceived : teamsThatReviewedThisTeam) { + Document gradeToOutlier = new Document(); + //grab the grade received respectively + int gradeReceived = respectiveGradesReceived.get("grade", Integer.class); + totalGrade += gradeReceived; + numTeamsReviewed++; + + //then find every team that graded them(should be a base function call already made inside this file) + Document matrixOfGrades = new Document(); + + String teamThatGraded = respectiveGradesReceived.get("reviewed_by", String.class); + //if the value is an outlier, mark true, else false + if (isOutlier(courseID, assignmentID, gradeReceived)) { + gradeToOutlier.append(String.valueOf(gradeReceived), true); + } else { + gradeToOutlier.append(String.valueOf(gradeReceived), false); + } + + gradeHolder.append(teamThatGraded, gradeToOutlier); + } + + if (numTeamsReviewed == teamsThatReviewedThisTeam.size()) { + double average = (double) totalGrade / (double) numTeamsReviewed; + gradeHolder.append("Average Grade Received", new Document(String.valueOf(average), isOutlier(courseID, assignmentID, average))); + } + + + matrixHolder.append(individialTeam, gradeHolder); + + } + + + //now that we have the grades and average grades received, we can easily qeury to find the grades + //given using the mistaken query for iterating over the reviews array + + List getEachAssignment = new ArrayList<>(); + FindIterable iterable = submissionsCollection.find(and( + eq("course_id", courseID), + eq("assignment_id", assignmentID), + eq("type", "team_submission") + )); + //put iterable contents into array list + iterable.into(getEachAssignment); + + //document to hold grades given + int numTeamsReviewed = 0; + int sumOfTeamReviewGradesGiven = 0; + Document gradesGivenHolder = new Document(); + //List allTeams = assignment.getList("all_teams", String.class); + for (Document individialTeam : getEachAssignment) { + + //List reviews = individialTeam.getList("reviews", String.class); + List individualReviews = new ArrayList<>(); + FindIterable getReviews = submissionsCollection.find(and( + eq("course_id", courseID), + eq("assignment_id", assignmentID), + eq("type", "peer_review_submission"), + eq("reviewed_by", individialTeam.get("team_name")) + )); + //put iterable contents into array list + getReviews.into(individualReviews); + + int totalGradesGiven = 0; + int counter = 0; + Document indGradesHolder = new Document(); + for (Document review : individualReviews) { + totalGradesGiven += review.get("grade", Integer.class); + counter++; + } + double average = (double) totalGradesGiven / (double) counter; + if (isOutlier(courseID, assignmentID, average)) + indGradesHolder.append(String.valueOf(average), true); + else + indGradesHolder.append(String.valueOf(average), false); + + String teamName = (String) individialTeam.get("team_name"); + //append to overall grades holder + gradesGivenHolder.append(teamName, indGradesHolder); + + } + + matrixHolder.append("Average Grades Given", gradesGivenHolder); + // matrixHolder.append("Average Grade Given", gradeHolder); + + //create document to then append to the matrix doc(for grades given averages) +// for (String key : temp.keySet()) { +// //first calculate average +// double average = (double) teamsToGradesGiven.get(assignmentNumber).get(key) / (double) teamsToCountOfReviews.get(assignmentNumber).get(key); +// } + return matrixHolder; + } + + + //redone outlier detection over time + public Document getAllPotentialOutliersAndGrades(String courseID) { + + //grab all of the assignments currently finished for the course + + //must increment at end of each loop + List allOutliers = new ArrayList<>(); + FindIterable iter = assignmentCollection.find(); + iter.into(allOutliers); + + Document allPotentialOutliers = new Document(); + for (Document eachAssignment : allOutliers) { + Document eachMatrixHolder = new Document(); + + int assignmentID = eachAssignment.get("assignment_id", Integer.class); + + //get all teams that were assigned this assignment in the course(will be the 'iterable') + Document assignment = assignmentCollection.find(and(eq("course_id", courseID), eq("assignment_id", assignmentID))).first(); + if (assignment == null) + throw new WebApplicationException(Response.status(Response.Status.BAD_REQUEST).entity("Assignment not found.").build()); + //grab all teams assigned this + List allTeams = assignment.getList("all_teams", String.class); + + + Document matrixHolder = new Document(); + //for every team assigned this assignment + for (String individialTeam : allTeams) { + + //for each team, we will query the DB for a list of documents where they have received a review + //get iterable of teams that have graded this team + List teamsThatReviewedThisTeam = new ArrayList<>(); + FindIterable iterable = submissionsCollection.find(and( + eq("reviewed_team", individialTeam), + eq("course_id", courseID), + eq("assignment_id", assignmentID), + eq("type", "peer_review_submission") + )); + //put iterable contents into array list + iterable.into(teamsThatReviewedThisTeam); + + //we then iterate through this document, grabbing the grade and then determining if that grade + //is an outlier, if it is append a true flag to that grade, else append false + + //document to hold the team that graded and the grade + Document gradeHolder = new Document(); + int totalGrade = 0; + double averageGradeReceived; + int numTeamsReviewed = 0; //= teamsThatReviewedThisTeam.size(); + for (Document respectiveGradesReceived : teamsThatReviewedThisTeam) { + Document gradeToOutlier = new Document(); + //grab the grade received respectively + int gradeReceived = respectiveGradesReceived.get("grade", Integer.class); + totalGrade += gradeReceived; + numTeamsReviewed++; + + + String teamThatGraded = respectiveGradesReceived.get("reviewed_by", String.class); + //if the value is an outlier, mark true, else false + if (isOutlier(courseID, gradeReceived)) { + gradeToOutlier.append(String.valueOf(gradeReceived), true); + } else { + gradeToOutlier.append(String.valueOf(gradeReceived), false); + } + + gradeHolder.append(teamThatGraded, gradeToOutlier); + } + + if (numTeamsReviewed == teamsThatReviewedThisTeam.size()) { + double average = (double) totalGrade / (double) numTeamsReviewed; + gradeHolder.append("Average Grade Received", new Document(String.valueOf(average), isOutlier(courseID, average))); + } + + + matrixHolder.append(individialTeam, gradeHolder); + + } + + + //now that we have the grades and average grades received, we can easily qeury to find the grades + //given using the mistaken query for iterating over the reviews array + + List getEachAssignment = new ArrayList<>(); + FindIterable iterable = submissionsCollection.find(and( + eq("course_id", courseID), + eq("assignment_id", assignmentID), + eq("type", "team_submission") + )); + //put iterable contents into array list + iterable.into(getEachAssignment); + + //document to hold grades given + int numTeamsReviewed = 0; + int sumOfTeamReviewGradesGiven = 0; + Document gradesGivenHolder = new Document(); + //List allTeams = assignment.getList("all_teams", String.class); + for (Document individialTeam : getEachAssignment) { + + //List reviews = individialTeam.getList("reviews", String.class); + List individualReviews = new ArrayList<>(); + FindIterable getReviews = submissionsCollection.find(and( + eq("course_id", courseID), + eq("assignment_id", assignmentID), + eq("type", "peer_review_submission"), + eq("reviewed_by", individialTeam.get("team_name")) + )); + //put iterable contents into array list + getReviews.into(individualReviews); + + int totalGradesGiven = 0; + int counter = 0; + Document indGradesHolder = new Document(); + for (Document review : individualReviews) { + totalGradesGiven += review.get("grade", Integer.class); + counter++; + } + double average = (double) totalGradesGiven / (double) counter; + if (isOutlier(courseID, average)) + indGradesHolder.append(String.valueOf(average), true); + else + indGradesHolder.append(String.valueOf(average), false); + + String teamName = (String) individialTeam.get("team_name"); + //append to overall grades holder + gradesGivenHolder.append(teamName, indGradesHolder); + + } + // matrixOfGrades.append(teamForThisAssignment, gradesToOutliers); + + } + + // matrixHolder.append("Average Grades Given", gradesGivenHolder); + + //to get the grade document we need to go one step further + // Document gradesAndBoolean = (Document) valuesOfEachKey.get(subKeySet); + + // allPotentialOutliers.append(String.valueOf(assignmentID), matrixHolder); + + return allPotentialOutliers; + } + + // matrixOfGrades.append("Average Grade Given", gradesHolder); + + // return matrixOfGrades; + //} + + /** + * abstraction method that calls calculate IQR, and uses the values calculated from there + * to return a boolean value of whether a number is an outlier or not, based on the current + * grades received for this assignment(this function takes an int to compare) + */ + public boolean isOutlier(String courseID, double numberToCompare) { + HashMap calculatedQuantities = new HashMap(); + calculatedQuantities = calculateIQR(courseID); + int Q1 = calculatedQuantities.get("Q1"); + int Q3 = calculatedQuantities.get("Q3"); + int IQR = calculatedQuantities.get("IQR"); + + //if value is an outlier + if ((numberToCompare < (Q1 - (1.5 * IQR))) || (numberToCompare > (Q3 + (1.5 * IQR)))) { + return true; + } + //if its not an outlier + else { + return false; + } + } + + /** + * abstraction method that calls calculate IQR, and uses the values calculated from there + * to return a boolean value of whether a number is an outlier or not, based on the current + * grades received for this assignment(this function takes an int to compare) + */ + public boolean isOutlier(String courseID, int numberToCompare) { + HashMap calculatedQuantities = new HashMap(); + calculatedQuantities = calculateIQR(courseID); + int Q1 = calculatedQuantities.get("Q1"); + int Q3 = calculatedQuantities.get("Q3"); + int IQR = calculatedQuantities.get("IQR"); + + //if value is an outlier + if ((numberToCompare < (Q1 - (1.5 * IQR))) || (numberToCompare > (Q3 + (1.5 * IQR)))) { + return true; + } + //if its not an outlier + else { + return false; + } + } + + + + /** + * abstraction method that calls calculate IQR, and uses the values calculated from there + * to return a boolean value of whether a number is an outlier or not, based on the current + * grades received for this assignment(this function takes a double to compare) + */ + public boolean isOutlier(String courseID, int assignmentID, double numberToCompare) { + HashMap calculatedQuantities = new HashMap(); + calculatedQuantities = calculateIQR(courseID, assignmentID); + int Q1 = calculatedQuantities.get("Q1"); + int Q3 = calculatedQuantities.get("Q3"); + int IQR = calculatedQuantities.get("IQR"); + + //if value is an outlier + if ((numberToCompare < (Q1 - (1.5 * IQR))) || (numberToCompare > (Q3 + (1.5 * IQR)))) { + return true; + } + //if its not an outlier + else { + return false; + } + } + + /** + * abstraction method that calls calculate IQR, and uses the values calculated from there + * to return a boolean value of whether a number is an outlier or not, based on the current + * grades received for this assignment(this function takes an int to compare) + */ + public boolean isOutlier(String courseID, int assignmentID, int numberToCompare) { + HashMap calculatedQuantities = new HashMap(); + calculatedQuantities = calculateIQR(courseID, assignmentID); + int Q1 = calculatedQuantities.get("Q1"); + int Q3 = calculatedQuantities.get("Q3"); + int IQR = calculatedQuantities.get("IQR"); + + //if value is an outlier + if ((numberToCompare < (Q1 - (1.5 * IQR))) || (numberToCompare > (Q3 + (1.5 * IQR)))) { + return true; + } + //if its not an outlier + else { + return false; + } + } + + /** + * This function is used to calculate the IQR, returning a hashmap of values + * that consist of the q1, q3, and IQR values to allow for computation and + * outlier detection. + * */ + /** + * This function is used to calculate the IQR, returning a hashmap of values + * that consist of the q1, q3, and IQR values to allow for computation and + * outlier detection. + */ + public HashMap calculateIQR(String courseID, int assignmentID) { + + + //for every team in the course, grab the points, and add them to an integer array + List gradesForAssignment = new ArrayList(); + + + //grab each grade that has been given for this respectove assignment + List getEachAssignment = new ArrayList<>(); + FindIterable iterable = submissionsCollection.find(and( + eq("course_id", courseID), + eq("assignment_id", assignmentID), + eq("type", "peer_review_submission") + )); + //put iterable contents into array list + iterable.into(getEachAssignment); + + //for every grade that has been given, add it to the list + for (Document grade : getEachAssignment) { + + if (grade.get("grade", Integer.class) == null) { + throw new WebApplicationException(Response.status(Response.Status.BAD_REQUEST).entity("Error retreiving grade for team").build()); + } else { + + int respectiveGrade = grade.get("grade", Integer.class); + gradesForAssignment.add(respectiveGrade); + } + + } + + int IQR = 0; + //after all of the team grades are obtained, + + //sort the list + Collections.sort(gradesForAssignment); + + HashMap> subsets = getSubsetOfArray(gradesForAssignment); + + //get subsets from hashmap + List q1Subset = subsets.get(1); + List q3Subset = subsets.get(2); + + //get medians from subsets + int q1Median = findMedian(q1Subset); + int q3Median = findMedian(q3Subset); + + //get IQR from subtracting both values + IQR = q3Median - q1Median; + HashMap returnValues = new HashMap(); + returnValues.put("Q1", q1Median); + returnValues.put("Q3", q3Median); + returnValues.put("IQR", IQR); + + return returnValues; + } + + /** + * This fucntion returns a subset of the array to then be able to calculate the + * median for each 'Q' + */ + public HashMap> getSubsetOfArray(List input) { + List firstSubSet = new ArrayList(); + List secondSubSet = new ArrayList(); + + HashMap> subsetOfArrays = new HashMap<>(); + //if true this is odd + if ((input.size() & 1) == 1) { + firstSubSet = input.subList(0, input.size() / 2); + secondSubSet = input.subList(input.size() / 2 + 1, input.size()); + } else { + firstSubSet = input.subList(0, input.size() / 2); + secondSubSet = input.subList(input.size() / 2, input.size()); + } + subsetOfArrays.put(1, firstSubSet); + subsetOfArrays.put(2, secondSubSet); + + return subsetOfArrays; + + } + + /** + * This function returns the median of any dataset that is larger than 2, also + * it assumes that the data is already sorted when passed in + */ + public int findMedian(List dataSet) { + //this fucntion won't accept an array of length less than 2, + if (dataSet.size() < 2 || dataSet == null) + return -1; + //& 1 is a bitwise operator that is much faster than modulo and determines whether a number is odd or even + if ((dataSet.size() & 1) == 1) + //use int division return median + return dataSet.get(dataSet.size() / 2); + else + //must use formula (((dataSet.length/2) + (dataSet.length/2 -1)) / 2) to obtain the proper index of even length dataset ) + return (dataSet.get(dataSet.size() / 2) + dataSet.get(dataSet.size() / 2 - 1)) / 2; + + } + + + /** + * This method will be used to grab all of the averages/assignments given over for a given course + */ + public HashMap calculateIQR(String courseID) { + + //must increment at end of each loop + List results = new ArrayList<>(); + FindIterable iterable = assignmentCollection.find(and(eq("course_id", courseID))); + + iterable.into(results); + + //for every team in the course, grab the points, and add them to an integer array + List gradesForAssignment = new ArrayList(); + int gradeFinalizedCounter = 0; + //for each assignment that is completed + for (Document eachAssignment : results) { + System.out.println("Iterating over new assignment"); + + if (eachAssignment.get("grade_finalized", Boolean.class)) { + //if a grade has been finalized, increment counter + gradeFinalizedCounter++; + //must make a query to the DB to grab all of the grades + //grab each grade that has been given for this respectove assignment + List getEachAssignment = new ArrayList<>(); + FindIterable tempIter = submissionsCollection.find(and( + eq("course_id", courseID), + eq("assignment_id", eachAssignment.get("assignment_id", Integer.class)), + eq("type", "peer_review_submission") + )); + //put iterable contents into array list + tempIter.into(getEachAssignment); + + //for every grade that has been given, add it to the list + for (Document grade : getEachAssignment) { + + if (grade.get("grade", Integer.class) == null) { + throw new WebApplicationException(Response.status(Response.Status.BAD_REQUEST).entity("Error retreiving grade for team").build()); + } else { + int respectiveGrade = grade.get("grade", Integer.class); + System.out.println("Grade gotten: " + respectiveGrade); + gradesForAssignment.add(respectiveGrade); + } + + } + + } + + } + + + if (gradesForAssignment == null || gradeFinalizedCounter == 0) + throw new WebApplicationException(Response.status(Response.Status.BAD_REQUEST).entity("No grades have been finalized, therefore outlier detection over time will not be accurate").build()); + + int IQR = 0; + //after all of the team grades are obtained, + + //we must sort them + Collections.sort(gradesForAssignment); + System.out.println("all grades grabbed and sorted: " + gradesForAssignment); + System.out.println("Size of array: " + gradesForAssignment.size()); + + + HashMap> subsets = getSubsetOfArray(gradesForAssignment); + + //get subsets from hashmap + List q1Subset = subsets.get(1); + List q3Subset = subsets.get(2); + + //get medians from subsets + int q1Median = findMedian(q1Subset); + int q3Median = findMedian(q3Subset); + + //get IQR from subtracting both values + IQR = q3Median - q1Median; + HashMap returnValues = new HashMap(); + returnValues.put("Q1", q1Median); + returnValues.put("Q3", q3Median); + returnValues.put("IQR", IQR); + + return returnValues; + } + + + /** + * This is a method to be used for testing purposes, it will simplify writiing the test cases + * while keeping the same functionality as all other isOutlier methods + */ + public static boolean isOutlier(int numberToCompare, int Q1, int Q3, int IQR) { + + + //if value is an outlier + if ((numberToCompare < (Q1 - (1.5 * IQR))) || (numberToCompare > (Q3 + (1.5 * IQR)))) { + return true; + } + //if its not an outlier + else { + return false; + } + } + + /** + * This method returns a JSON object(Document), that contains all relevant information regarding + * the grades a team ahs received and the average of the grades received, as well as the average grade + * each team has given to other teams. The JSON document it returns also has a boolean value associated + * with the grade stating false if the value is not an outlier, and true if the value is an outlier + *

+ * Notes: + * This method has the assumed functionality that every team in the course has been assigned/performed + * a peer review, as determining if a team was excluded from the assignment/peer-review process was far + * too much work given the data available from querying from the respectove databases. + */ + @Deprecated + public Document getMatrixOfGrades(String courseID, int assignmentID) { + + //get all teams that were assigned this assignment in the course(will be the 'iterable') + Document assignment = assignmentCollection.find(and(eq("course_id", courseID), eq("assignment_id", assignmentID))).first(); + if (assignment == null) + throw new WebApplicationException(Response.status(Response.Status.BAD_REQUEST).entity("Assignment not found.").build()); + //grab all teams assigned this + List allTeams = assignment.getList("all_teams", String.class); + + + //we must sort them based on alphabetical order + Collections.sort(allTeams); + + //then find every team that graded them(should be a base function call already made inside this file) + Document matrixOfGrades = new Document(); + + for (String teamForThisAssignment : allTeams) { + + //get document for each team for this assignment + Document team_submission = submissionsCollection.find(and( + eq("course_id", courseID), + eq("assignment_id", assignmentID), + eq("team_name", teamForThisAssignment), + eq("type", "team_submission"))).first(); + + //grade the teams that 'reviewed'/graded this team + List teams_that_graded = team_submission.getList("reviews", String.class); + int sizeOfTeamsThatGraded = teams_that_graded.size(); + + //sort teams_that_graded + Collections.sort(teams_that_graded); + + //create doc for holding each team that graded and if its an outlier or not + Document gradesToOutliers = new Document(); + + //integer values to keep track of average of scores and number of reviews each team made + int totalSum = 0, counter = 0; + + for (String teamThatGraded : teams_that_graded) { + //for each team in the reviews, we need to find the team that reviewed the current team + Document team_review = submissionsCollection.find(and( + eq("course_id", courseID), + eq("assignment_id", assignmentID), + eq("reviewed_by", teamThatGraded), + eq("reviewed_team", teamForThisAssignment), + eq("type", "peer_review_submission"))).first(); + + //if the grade is an outlier(boolean = true, else boolean = false) + int respectiveGrade = team_review.get("grade", Integer.class); + //sum the total and increase counter + totalSum += respectiveGrade; + counter++; + System.out.println("counter: " + counter); + double average = (double) totalSum / (double) counter; + + + if (isOutlier(courseID, assignmentID, respectiveGrade)) { + //fill in the values if they're an outlier + gradesToOutliers.append(teamThatGraded, new Document(String.valueOf(respectiveGrade), true)); + if (counter == sizeOfTeamsThatGraded) { + gradesToOutliers.append("Average Grade Received", new Document(String.valueOf(average), isOutlier(courseID, assignmentID, average))); + System.out.println("value is an: " + isOutlier(courseID, assignmentID, average)); + } + + + } else { + gradesToOutliers.append(teamThatGraded, new Document(String.valueOf(respectiveGrade), false)); + if (counter == sizeOfTeamsThatGraded) { + gradesToOutliers.append("Average Grade Received", new Document(String.valueOf(average), isOutlier(courseID, assignmentID, average))); + System.out.println("value is an: " + isOutlier(courseID, assignmentID, average)); + } + + } + + + } + matrixOfGrades.append(teamForThisAssignment, gradesToOutliers); + + } + + //hashmaps to keep track of grades each team has given/they're review count + HashMap teamsToGradesGiven = new HashMap<>(); + HashMap teamsToCountOfReviews = new HashMap<>(); + + //create values for each team in a hashmap for their grades + for (String teams : matrixOfGrades.keySet()) { + teamsToGradesGiven.put(teams, 0); + teamsToCountOfReviews.put(teams, 0); + } + + //I know three loops is disgusting, but the way the document we created above is formatted, + //the grade is three levels deep, so we need to go to that depth to get the grade + + //grab the keys of the doc(all the grades in document we just created) + for (String keysInMatrixDoc : matrixOfGrades.keySet()) { + + //this will retrieve the list of teams who have given grades + Object valuesOfKeys = matrixOfGrades.get(keysInMatrixDoc); + + //try casting the object to a document + Document valuesOfEachKey = (Document) valuesOfKeys; + + for (String subKeySet : valuesOfEachKey.keySet()) { + + //to get the grade document we need to go one step further + Document gradesAndBoolean = (Document) valuesOfEachKey.get(subKeySet); + + + for (String grade : gradesAndBoolean.keySet()) { + //if current subKeyString equals the a hashmap key, sum current value and counter) + if (teamsToGradesGiven.containsKey(subKeySet)) { + teamsToGradesGiven.put(subKeySet, teamsToGradesGiven.get(subKeySet) + Integer.parseInt(grade)); + teamsToCountOfReviews.put(subKeySet, teamsToCountOfReviews.get(subKeySet) + 1); + } + + } + + } + + } + + + //document to find/grad the grades, will append this to each section of the documentToAppendGrades + Document gradesHolder = new Document(); + + //create document to then append to the matric doc(for grades given averages) + for (String key : teamsToGradesGiven.keySet()) { + //first calculate average + double average = (double) teamsToGradesGiven.get(key) / (double) teamsToCountOfReviews.get(key); + + if (isOutlier(courseID, assignmentID, average)) { + gradesHolder.append(key, new Document(String.valueOf(average), true)); + } else { + gradesHolder.append(key, new Document(String.valueOf(average), false)); + } + } + + matrixOfGrades.append("Average Grade Given", gradesHolder); + + return matrixOfGrades; + } + + + /** + * This method is very similar to the matrix of grades method but returns every matrix over the course of + * every assignment created, this is necessary as the front end can then decide what information they + * would like to present the user(i.e. only the outliers, etc). This method takes every grade given/received + * and uses that as the outlier detection system, rather than individually for each matrix. This allows for a + * more broad evaluation of the outliers and if a team does grade harsher over the course of the semester + * rather than on a weekly basis. + **/ + @Deprecated + public Document allPotentialOutliers(String courseID) { + + //must increment at end of each loop + List results = new ArrayList<>(); + FindIterable iterable = assignmentCollection.find(); + iterable.into(results); + + + Document allPotentialOutliers = new Document(); + + + //for each assignment that is peer-reviewed? or also just regular assignments + for (Document assignment : results) { + + + //error check to see if the assignment is completed(all grades have been finished for each respective assignment) + if (assignment.get("grade_finalized", Boolean.class)) { + //if the assignment_flag doesnt get set, we have to cast the assignment teams object + //and then compare the length of that to the cast of the completed teams object + + + List allTeams = assignment.getList("all_teams", String.class); + //grab assignment_id + int numberOfAssignments = assignment.get("assignment_id", Integer.class); + + //we must sort them based on alphabetical order + Collections.sort(allTeams); + + //then find every team that graded them(should be a base function call already made inside this file) + Document matrixOfGrades = new Document(); + + for (String teamForThisAssignment : allTeams) { + + //get document for each team for this assignment + Document team_submission = submissionsCollection.find(and( + eq("course_id", courseID), + eq("assignment_id", numberOfAssignments), + eq("team_name", teamForThisAssignment), + eq("type", "team_submission"))).first(); + + //grade the teams that 'reviewed'/graded this team + List teams_that_graded = team_submission.getList("reviews", String.class); + int sizeOfTeamsThatGraded = teams_that_graded.size(); + + //sort teams_that_graded + Collections.sort(teams_that_graded); + + //create doc for holding each team that graded and if its an outlier or not + Document gradesToOutliers = new Document(); + + //integer values to keep track of average of scores and number of reviews each team made + int totalSum = 0, counter = 0; + + for (String teamThatGraded : teams_that_graded) { + //for each team in the reviews, we need to find the team that reviewed the current team + Document team_review = submissionsCollection.find(and( + eq("course_id", courseID), + eq("assignment_id", numberOfAssignments), + eq("reviewed_by", teamThatGraded), + eq("reviewed_team", teamForThisAssignment), + eq("type", "peer_review_submission"))).first(); + + //if the grade is an outlier(boolean = true, else boolean = false) + int respectiveGrade = team_review.get("grade", Integer.class); + //sum the total and increase counter + totalSum += respectiveGrade; + counter++; + double average = (double) totalSum / (double) counter; + + + if (isOutlier(courseID, respectiveGrade)) { + //fill in the values if they're an outlier + gradesToOutliers.append(teamThatGraded, new Document(String.valueOf(respectiveGrade), true)); + if (counter == sizeOfTeamsThatGraded) { + gradesToOutliers.append("Average Grade Received", new Document(String.valueOf(average), isOutlier(courseID, average))); + } + + } else { + gradesToOutliers.append(teamThatGraded, new Document(String.valueOf(respectiveGrade), false)); + if (counter == sizeOfTeamsThatGraded) { + gradesToOutliers.append("Average Grade Received", new Document(String.valueOf(average), isOutlier(courseID, average))); + } + } + + + } + matrixOfGrades.append(teamForThisAssignment, gradesToOutliers); + + + } + allPotentialOutliers.append(assignment.get("assignment_id", Integer.class).toString(), matrixOfGrades); + + } + + } + + + HashMap> teamsToGradesGiven = new HashMap<>(); + HashMap> teamsToCountOfReviews = new HashMap<>(); + + + for (String key : allPotentialOutliers.keySet()) { + Object val = allPotentialOutliers.get(key); + + Document keys = (Document) val; + + HashMap temp = new HashMap<>(); + HashMap otherTemp = new HashMap<>(); + for (String values : keys.keySet()) { + temp.put(values, 0); + otherTemp.put(values, 0); + } + teamsToGradesGiven.put(key, temp); + teamsToCountOfReviews.put(key, otherTemp); + + } + + + //again i know it is ridiculous for this many loops but the way the JSON doc created earlier is formatted + //is is necessary to loop over all the information to grab the right information + for (String keys : allPotentialOutliers.keySet()) { + + Object allMatrices = allPotentialOutliers.get(keys); + + Document matrixOfGrades = (Document) allMatrices; + //grab the keys of the doc(all the grades in document we just created) + for (String keysInMatrixDoc : matrixOfGrades.keySet()) { + + //this will retrieve the list of teams who have given grades + Object valuesOfKeys = matrixOfGrades.get(keysInMatrixDoc); + + //try casting the object to a document + Document valuesOfEachKey = (Document) valuesOfKeys; + + for (String subKeySet : valuesOfEachKey.keySet()) { + + + //to get the grade document we need to go one step further + Document gradesAndBoolean = (Document) valuesOfEachKey.get(subKeySet); + + for (String grade : gradesAndBoolean.keySet()) { + + //if current subKeyString equals the a hashmap key, sum current value and counter) + if (teamsToGradesGiven.get(keys).containsKey(subKeySet)) { + HashMap innerGradesGiven = teamsToGradesGiven.get(keys); + HashMap innerCountReviews = teamsToCountOfReviews.get(keys); + innerGradesGiven.put(subKeySet, innerGradesGiven.get(subKeySet) + Integer.valueOf(grade)); + innerCountReviews.put(subKeySet, innerCountReviews.get(subKeySet) + 1); + teamsToGradesGiven.put(keys, innerGradesGiven); + teamsToCountOfReviews.put(keys, innerCountReviews); + } + + } + + } + + } + } + + + for (String assignmentNumber : teamsToGradesGiven.keySet()) { + //find the location of each respective doc and then add the averages to each respectove assignment + HashMap temp = new HashMap<>(); + temp = teamsToGradesGiven.get(assignmentNumber); + Document gradesHolder = new Document(); + + //create document to then append to the matric doc(for grades given averages) + for (String key : temp.keySet()) { + //first calculate average + double average = (double) teamsToGradesGiven.get(assignmentNumber).get(key) / (double) teamsToCountOfReviews.get(assignmentNumber).get(key); + + if (isOutlier(courseID, average)) { + gradesHolder.append(key, new Document(String.valueOf(average), true)); + } else { + gradesHolder.append(key, new Document(String.valueOf(average), false)); + } + } + + //grab portion related to this assignment number + Object holder = allPotentialOutliers.get(assignmentNumber); + Document holderr = (Document) holder; + + holderr.append("Average Grade Given", gradesHolder); + } + + + /** + * This is a method to be used for testing purposes, it will simplify writiing the test cases + * while keeping the same functionality as all other isOutlier methods + * */ + + /*public boolean isOutlier(int numberToCompare, int Q1, int Q3, int IQR){ + return allPotentialOutliers; + } + */ + + + return allPotentialOutliers; + } + + public List getReviewTeams(String courseID, int assignmentID, String teamName) { + Document assignment = assignmentCollection.find(and(eq("assignment_id", assignmentID), eq("course_id", courseID))).first(); + Document assignedTeams = (Document) assignment.get("assigned_teams"); + List teams = assignment.getList("all_teams", String.class); + if(teams == null){ + return null; + } + ArrayList reviewTeams = new ArrayList<>(); + for(String team : teams){ + List teamList = assignedTeams.getList(team, String.class); + if(teamList == null){ + continue; + } + if(teamList.contains(teamName)){ + reviewTeams.add(team); + } + } + return reviewTeams; + } + + /** + * gets list of submissions to be peer-reviewed by a specified team + * + * @param courseID course in question + * @param assignmentID assignment for which desired submissions are made + * @param teamName aforementioned specified team + * @return list of submissions to be peer-reviewed by a specified team + */ + public List peerReviewsGiven(String courseID, int assignmentID, String teamName) { + List teams = getAssignedTeams(courseID, assignmentID, teamName); + if(teams == null){ + return null; + } + List submissions = new ArrayList<>(); + for(String team : teams){ + Document submission = submissionsCollection.find(and(eq("team_name",team), + eq("course_id", courseID), eq("assignment_id", assignmentID), + eq("type", "team_submission"))).first(); + if(submission != null) { + submissions.add(submission); + } + } + return submissions; + } + + /** + * gets list of submissions to be peer-reviewed by a specified team + * + * @param courseID course in question + * @param assignmentID assignment for which desired submissions are made + * @param teamName aforementioned specified team + * @return list of submissions to be peer-reviewed by a specified team + */ + public List peerReviewsReceived(String courseID, int assignmentID, String teamName) { + List teams = getReviewTeams(courseID, assignmentID, teamName); + if(teams == null){ + return null; + } + List submissions = new ArrayList<>(); + for(String team : teams){ + if(team == null){ + continue; + } + Document submission = submissionsCollection.find(and(eq("reviewed_by",team), + eq("course_id", courseID), eq("assignment_id", assignmentID), + eq("type", "peer_review_submission"), eq("reviewed_team", teamName))) + .first(); + if(submission != null) { + submissions.add(submission); + }else{ + submission = submissionsCollection.find(and(eq("team_name", team), + eq("course_id", courseID), eq("assignment_id", assignmentID), + eq("type", "team_submission"))).first(); + if(submission != null){ + submissions.add(submission); + } + } + } + return submissions; + } +} diff --git a/backend/student-peer-review-assignment-microservice/src/main/java/edu/oswego/cs/daos/FileDAO.java b/backend/student-peer-review-assignment-microservice/src/main/java/edu/oswego/cs/database/daos/FileDAO.java old mode 100644 new mode 100755 similarity index 97% rename from backend/student-peer-review-assignment-microservice/src/main/java/edu/oswego/cs/daos/FileDAO.java rename to backend/student-peer-review-assignment-microservice/src/main/java/edu/oswego/cs/database/daos/FileDAO.java index fafb20d69..078dd2028 --- a/backend/student-peer-review-assignment-microservice/src/main/java/edu/oswego/cs/daos/FileDAO.java +++ b/backend/student-peer-review-assignment-microservice/src/main/java/edu/oswego/cs/database/daos/FileDAO.java @@ -1,4 +1,4 @@ -package edu.oswego.cs.daos; +package edu.oswego.cs.database.daos; import com.ibm.websphere.jaxrs20.multipart.IAttachment; diff --git a/backend/student-peer-review-assignment-microservice/src/main/java/edu/oswego/cs/daos/PeerReviewDAO.java b/backend/student-peer-review-assignment-microservice/src/main/java/edu/oswego/cs/database/daos/PeerReviewDAO.java old mode 100644 new mode 100755 similarity index 81% rename from backend/student-peer-review-assignment-microservice/src/main/java/edu/oswego/cs/daos/PeerReviewDAO.java rename to backend/student-peer-review-assignment-microservice/src/main/java/edu/oswego/cs/database/daos/PeerReviewDAO.java index ae1fd3db8..dd4253d59 --- a/backend/student-peer-review-assignment-microservice/src/main/java/edu/oswego/cs/daos/PeerReviewDAO.java +++ b/backend/student-peer-review-assignment-microservice/src/main/java/edu/oswego/cs/database/daos/PeerReviewDAO.java @@ -1,4 +1,4 @@ -package edu.oswego.cs.daos; +package edu.oswego.cs.database.daos; import javax.json.bind.annotation.JsonbProperty; import javax.persistence.Id; diff --git a/backend/student-peer-review-assignment-microservice/src/main/java/edu/oswego/cs/distribution/AssignmentDistribution.java b/backend/student-peer-review-assignment-microservice/src/main/java/edu/oswego/cs/distribution/AssignmentDistribution.java old mode 100644 new mode 100755 diff --git a/backend/student-peer-review-assignment-microservice/src/main/java/edu/oswego/cs/resources/PeerReviewAssignmentResource.java b/backend/student-peer-review-assignment-microservice/src/main/java/edu/oswego/cs/resources/PeerReviewAssignmentResource.java old mode 100644 new mode 100755 index 4d5dabcbe..5648f7c7b --- a/backend/student-peer-review-assignment-microservice/src/main/java/edu/oswego/cs/resources/PeerReviewAssignmentResource.java +++ b/backend/student-peer-review-assignment-microservice/src/main/java/edu/oswego/cs/resources/PeerReviewAssignmentResource.java @@ -1,10 +1,11 @@ package edu.oswego.cs.resources; import com.ibm.websphere.jaxrs20.multipart.IAttachment; -import edu.oswego.cs.daos.FileDAO; +import edu.oswego.cs.database.daos.FileDAO; import edu.oswego.cs.database.PeerReviewAssignmentInterface; import edu.oswego.cs.distribution.AssignmentDistribution; import org.bson.Document; +import org.bson.types.Binary; import javax.annotation.security.DenyAll; import javax.annotation.security.RolesAllowed; @@ -13,6 +14,7 @@ import javax.ws.rs.core.Response; import java.io.File; import java.io.IOException; +import java.util.Base64; import java.util.List; import java.util.Map; @@ -85,7 +87,7 @@ public Response teamName(@PathParam("courseID") String courseID, @PathParam("assignmentID") int assignmentID, @PathParam("teamName") String team_name) { PeerReviewAssignmentInterface peerReviewAssignmentInterface = new PeerReviewAssignmentInterface(); - return Response.status(Response.Status.OK).entity(peerReviewAssignmentInterface.getTeamGrades(courseID, assignmentID, team_name)).build(); + return Response.status(Response.Status.OK).entity(peerReviewAssignmentInterface.redoneGetTeamGrades(courseID, assignmentID, team_name)).build();//GetTeamGrades(courseID, assignmentID, team_name)).build(); } /** @@ -120,6 +122,74 @@ public Response getTeamGrade(@PathParam("courseID") String courseID, return Response.status(Response.Status.OK).entity(peerReviewAssignmentInterface.getGradeForTeam(courseID, assignmentID, teamID)).build(); } + /** + * Endpoint to get all student grades. + * + * @param courseID The course for the assignment + * @param assignmentID The assignment that is being looked up + * @param studentID The team name for the team looked up + * @return the student that was edited + */ + @GET + @RolesAllowed("professor") + @Path("{courseID}/{assignmentID}/{teamID}/{studentID}/grade") + @Produces(MediaType.APPLICATION_JSON) + public Response getTeamGrade(@PathParam("courseID") String courseID, + @PathParam("assignmentID") int assignmentID, + @PathParam("teamID") String teamID, + @PathParam("studentID") String studentID) { + PeerReviewAssignmentInterface peerReviewAssignmentInterface = new PeerReviewAssignmentInterface(); + return Response.status(Response.Status.OK).entity(peerReviewAssignmentInterface.getGradeForStudent(courseID, assignmentID, teamID, studentID)).build(); + } + /** + * Endpoint to get matrix of grades and outliers + * + * @param courseID The course for the assignment + * @return the matrix of grades with outliers as boolean value + */ + @GET + @RolesAllowed("professor") + @Path("{courseID}/outlierDetectionOverTime") + @Produces(MediaType.APPLICATION_JSON) + public Response getMatrixOfGrades(@PathParam("courseID") String courseID){ + //grab instance of peer review interface + PeerReviewAssignmentInterface peerReviewAssignmentInterface = new PeerReviewAssignmentInterface(); + //the function to grab all of the + Document matrixOfGrades = peerReviewAssignmentInterface.getAllPotentialOutliersAndGrades(courseID);//allPotentialOutliers(courseID); + + if(peerReviewAssignmentInterface == null || matrixOfGrades == null) + return Response.status(Response.Status.BAD_REQUEST).entity("Error getting all the potential outliers").build(); + return Response.status(Response.Status.OK).entity(matrixOfGrades).build(); + } + + + + + /** + * Endpoint to get matrix of grades and outliers + * + * @param courseID The course for the assignment + * @param assignmentID The assignment that is being looked up + * @return the matrix of grades with outliers as boolean value + */ + @GET + @RolesAllowed("professor") + @Path("{courseID}/{assignmentID}/matrix") + @Produces(MediaType.APPLICATION_JSON) + public Response getMatrixOfGrades(@PathParam("courseID") String courseID, + @PathParam("assignmentID") int assignmentID){ + //grab instance of peer review interface + PeerReviewAssignmentInterface peerReviewAssignmentInterface = new PeerReviewAssignmentInterface(); + //the function to grab all of the + Document matrixOfGrades = peerReviewAssignmentInterface.getMatrixOfOutlierAndGrades(courseID, assignmentID);//getMatrixOfGrades(courseID, assignmentID); + + if(peerReviewAssignmentInterface == null || matrixOfGrades == null) + return Response.status(Response.Status.BAD_REQUEST).entity("Error getting matrix of grades").build(); + return Response.status(Response.Status.OK).entity(matrixOfGrades).build(); + } + + + /** * Endpoint to get the teams that a team was assigned to peer review. * @@ -142,6 +212,30 @@ public Response getTeamAssignments(@PathParam("courseID") String courseID, return Response.status(Response.Status.OK).entity(assignedTeams).build(); } + /** + * Endpoint to get the teams that were assigned to as specific target team to peer-review + * + * @param courseID course in which team exists + * @param assignmentID the peer review assignment + * @param teamName the target team + * @return all teams assigned to review the target team for this peer review assignment + */ + @GET + @RolesAllowed({"professor", "student"}) + @Path("{courseID}/{assignmentID}/peer-review-team-reviewers/{teamName}") + @Produces(MediaType.APPLICATION_JSON) + public Response getTeamReviewers(@PathParam("courseID") String courseID, + @PathParam("assignmentID") int assignmentID, + @PathParam("teamName") String teamName) { + PeerReviewAssignmentInterface peerReviewAssignmentInterface = new PeerReviewAssignmentInterface(); + List reviewTeams = peerReviewAssignmentInterface.getReviewTeams(courseID, assignmentID, teamName); + if (reviewTeams == null) + return Response.status(Response.Status.BAD_REQUEST).entity("Team name does not exist.").build(); + return Response.status(Response.Status.OK).entity(reviewTeams).build(); + } + + //deprecated so not even going to bother + /** * An endpoint for a team to download another team's assignment submission to be peer reviewed. * @@ -180,8 +274,8 @@ public Response downloadOtherTeamsAssignment(@PathParam("courseID") String cours @POST @RolesAllowed({"professor", "student"}) @Path("{courseID}/{assignmentID}/{srcTeamName}/{destTeamName}/{grade}/upload") - @Consumes({MediaType.MULTIPART_FORM_DATA, MediaType.APPLICATION_OCTET_STREAM}) - @Produces({MediaType.MULTIPART_FORM_DATA, MediaType.APPLICATION_OCTET_STREAM}) + @Consumes(MediaType.MULTIPART_FORM_DATA) + @Produces(MediaType.APPLICATION_JSON) public Response uploadPeerReview(List attachments, @PathParam("courseID") String courseID, @PathParam("assignmentID") int assignmentID, @@ -193,14 +287,15 @@ public Response uploadPeerReview(List attachments, if (attachment == null) continue; String fileName = attachment.getDataHandler().getName(); if (fileName.endsWith("pdf") || fileName.endsWith("docx")) { - peerReviewAssignmentInterface.uploadPeerReview(courseID, assignmentID, srcTeamName, destTeamName, attachment); fileName = "from-" + srcTeamName + "-to-" + destTeamName + fileName.substring(fileName.indexOf(".")); - peerReviewAssignmentInterface.addPeerReviewSubmission(courseID, assignmentID, srcTeamName, destTeamName, fileName, grade); + peerReviewAssignmentInterface.addPeerReviewSubmission(courseID, assignmentID, srcTeamName, destTeamName, fileName, grade, attachment.getDataHandler().getInputStream()); } else return Response.status(Response.Status.UNSUPPORTED_MEDIA_TYPE).build(); } return Response.status(Response.Status.OK).entity("Successfully uploaded peer review.").build(); } + //change + /** * Endpoint for a team to download the peer reviews that were made for the assignment that the team submitted. * The downloaded file from this endpoint is from another teams submitted peer review @@ -223,10 +318,11 @@ public Response downloadFinishedTeamPeerReview(@PathParam("courseID") String cou PeerReviewAssignmentInterface peerReviewAssignmentInterface = new PeerReviewAssignmentInterface(); // check if the peer review due date is past // if not then return a response saying peer review is not ready - File file = peerReviewAssignmentInterface.downloadFinishedPeerReview(courseID, assignmentID, srcTeamName, destTeamName); + String fileName = peerReviewAssignmentInterface.downloadFinishedPeerReviewName(courseID, assignmentID, srcTeamName, destTeamName); + Binary fileData = peerReviewAssignmentInterface.downloadFinishedPeerReview(courseID, assignmentID, srcTeamName, destTeamName); - Response.ResponseBuilder response = Response.ok(file); - response.header("Content-Disposition", "attachment; filename=" + "peer-review-for-" + destTeamName); + Response.ResponseBuilder response = Response.ok(Base64.getEncoder().encode(fileData.getData())); + response.header("Content-Disposition", "attachment; filename=" + "peer-review-for-" + destTeamName + fileName.substring(fileName.indexOf("."))); return response.build(); } @@ -270,4 +366,48 @@ public Response finalizeGrades(@PathParam("course_id") String courseID, new PeerReviewAssignmentInterface().makeFinalGrades(courseID, assignmentID); return Response.status(Response.Status.OK).entity("Peer reviews have been averaged to make final grades.").build(); } -} \ No newline at end of file + + /** + * Endpoint to get a list of submissions for which a given team has been assigned to peer-review + * + * @param courseID course in which this is happening + * @param assignmentID assignment for which these peer reviews are assigned + * @param teamName team assigned to review these submissions + * @return list of assignment submissions assigned to the given team + */ + @GET + @RolesAllowed({"professor", "student"}) + @Path("{courseID}/{assignmentID}/peer-reviews-given/{teamName}") + public Response peerReviewsGiven(@PathParam("courseID") String courseID, + @PathParam("assignmentID") int assignmentID, + @PathParam("teamName") String teamName){ + List submissions = new PeerReviewAssignmentInterface().peerReviewsGiven(courseID, assignmentID, teamName); + if(submissions == null) { + return Response.status(Response.Status.BAD_REQUEST).entity("That assignment has not been distributed for peer reviews yet!").build(); + } + return Response.status(Response.Status.OK).entity(submissions).build(); + } + + /** + * Endpoint to get a list of peer review submissions made for a specified team's assignment submission + * + * @param courseID course in which this is happening + * @param assignmentID assignment for which these peer reviews are assigned + * @param teamName team for whom these reviews are made + * @return list of peer-review submissions assigned for the specified team's submission + */ + @GET + @RolesAllowed({"professor", "student"}) + @Path("{courseID}/{assignmentID}/peer-reviews-received/{teamName}") + public Response peerReviewsReceived(@PathParam("courseID") String courseID, + @PathParam("assignmentID") int assignmentID, + @PathParam("teamName") String teamName){ + List submissions = new PeerReviewAssignmentInterface() + .peerReviewsReceived(courseID, assignmentID, teamName); + if(submissions == null) { + return Response.status(Response.Status.BAD_REQUEST).entity("That assignment has not been distributed for peer reviews yet!").build(); + } + return Response.status(Response.Status.OK).entity(submissions).build(); + } +} + diff --git a/backend/student-peer-review-assignment-microservice/src/main/liberty/config/server.xml b/backend/student-peer-review-assignment-microservice/src/main/liberty/config/server.xml old mode 100644 new mode 100755 diff --git a/backend/student-peer-review-assignment-microservice/src/test/java/StudentPeerReviewAssignmentTests.java b/backend/student-peer-review-assignment-microservice/src/test/java/StudentPeerReviewAssignmentTests.java old mode 100644 new mode 100755 index 7d80cd5f7..fa3a6f868 --- a/backend/student-peer-review-assignment-microservice/src/test/java/StudentPeerReviewAssignmentTests.java +++ b/backend/student-peer-review-assignment-microservice/src/test/java/StudentPeerReviewAssignmentTests.java @@ -1,2 +1,774 @@ +import com.ibm.websphere.jaxrs20.multipart.IAttachment; +import com.mongodb.*; +import com.mongodb.client.MongoClients; +import com.mongodb.client.MongoCollection; +import com.mongodb.client.MongoCursor; +import com.mongodb.client.MongoDatabase; +import com.mongodb.client.model.Filters; +import edu.oswego.cs.daos.FileDAO; +import edu.oswego.cs.database.DatabaseManager; +import edu.oswego.cs.database.PeerReviewAssignmentInterface; +import edu.oswego.cs.resources.PeerReviewAssignmentResource; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.bson.Document; + +import java.io.*; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import static com.mongodb.client.model.Filters.and; +import static com.mongodb.client.model.Filters.eq; +import static edu.oswego.cs.database.PeerReviewAssignmentInterface.isOutlier; +import static org.junit.jupiter.api.Assertions.*; + +import javax.activation.DataHandler; +import javax.activation.DataSource; +import javax.validation.constraints.AssertTrue; +import javax.ws.rs.WebApplicationException; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.MultivaluedMap; + +/* ********************************************************************************************************************* +ALL CODE THAT IS COMMENTED OUT CAUSES parseInt ERRORS DUE TO +ENVIRONMENT VARIABLE ISSUES OR BECAUSE THERE ARE PARAMETER MISMATCHES OR BECAUSE +THERE ARE METHODS BEING CALLED THAT DO NOT EXIST AND POSSIBLE OTHER ISSUES I DID NOT CATCH. +********************************************************************************************************************* + */ + +//please use the default db setup outlined in the "Database Default for Testing" file +//If a test fails, please ensure db is back to default before testing again public class StudentPeerReviewAssignmentTests { -} + +// PeerReviewAssignmentInterface pr = new PeerReviewAssignmentInterface(); +// MongoClient mongoClient, mongoClient2, mongoClient3, mongoClient4, mongoClient5; +// MongoCollection teamCollection, assignmentCollection, submissionsCollection; + + + + /* //NOT giving access!!! + @BeforeAll + public static void setup(){ + //from env file + String username = "root"; + String database = "admin"; + String password = "password"; + //Create credentials + MongoCredential mongoCredential = MongoCredential.createCredential(username, database, password.toCharArray()); + MongoClientOptions options = MongoClientOptions.builder() + .writeConcern(WriteConcern.JOURNALED).build(); + + //connects to localhost and specified port (ex. 127.0.0.1:27017) (ie. connects Java program to MongoDB server on localhost at given port) + *//* MongoClient mongoClient = new MongoClient(new ServerAddress("localhost", 27037), Arrays.asList(mongoCredential), options);//holds students Collection + MongoClient mongoClient2 = new MongoClient(new ServerAddress("localhost", 27038), Arrays.asList(mongoCredential), options);//holds professors Collection + MongoClient mongoClient3 = new MongoClient(new ServerAddress("localhost", 27039), Arrays.asList(mongoCredential), options);//holds courses Collection + MongoClient mongoClient4 = new MongoClient(new ServerAddress("localhost", 27040), Arrays.asList(mongoCredential), options);//holds assignments, submissions Collections + MongoClient mongoClient5 = new MongoClient(new ServerAddress("localhost", 27041), Arrays.asList(mongoCredential), options);//holds teams Collection*//* + + //gets specified Collections + MongoCollection teamCollection = mongoClient5.getDatabase("cpr").getCollection("teams"); + MongoCollection assignmentCollection = mongoClient4.getDatabase("cpr").getCollection("assignments"); + MongoCollection submissionsCollection = mongoClient4.getDatabase("cpr").getCollection("submissions"); + + }*/ + + + //-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + //TC|ID 1.1 = TCIDOnePointOne is the naming convention for now + + //To test: + //public void addPeerReviewSubmission(String course_id,int assignment_id,String srcTeamName,String destinationTeam,String fileName,int grade) + +// @Test +// public void addPeerReviewSubmissionTCIDOnePointOne() {//valid String ""CSC-234-2342-SPR-2023" +// +// //gives access to db +// //------------------------------------------------------------------------------------------------------------------------------ +// //from env file +// String username = "root"; +// String database = "admin"; +// String password = "password"; +// //Create credentials +// MongoCredential mongoCredential = MongoCredential.createCredential(username, database, password.toCharArray()); +// MongoClientOptions options = MongoClientOptions.builder() +// .writeConcern(WriteConcern.JOURNALED).build(); +// +// mongoClient4 = new MongoClient(new ServerAddress("localhost", 27040), Arrays.asList(mongoCredential), options); +// submissionsCollection = mongoClient4.getDatabase("cpr").getCollection("submissions"); +// //------------------------------------------------------------------------------------------------------------------------------ +// +// String course_id = "CSC-480-46374-SPR-2023"; +// int assignment_id = 1; +// String srcTeamName = "Team1";//aka reviewed_by +// String destinationTeam = "Team2";//aka reviewed_team +// String fileName = "PeerReviewFile1.pdf"; +// int grade = 80; +// pr.addPeerReviewSubmission(course_id, assignment_id, srcTeamName, destinationTeam, fileName, grade);//add a Document with the given values +// +// Document docFromQuery = null; +// MongoCursor query = submissionsCollection.find(and( +// eq("course_id", course_id), +// eq("assignment_id", assignment_id), +// eq("submission_name", fileName), +// eq("grade", grade), +// eq("reviewed_by", srcTeamName), +// eq("reviewed_team", destinationTeam), +// eq("type", "peer_review_submission"))).iterator(); +// docFromQuery = query.next();//gets the Document returned by the query +// +// assertFalse(docFromQuery == null); +// +// //remove the change we made to the db (ie. remove the Document we just added) +// submissionsCollection.deleteOne(and(Filters. +// eq("course_id", course_id), +// eq("assignment_id", assignment_id), +// eq("submission_name", fileName), +// eq("grade", grade), +// eq("reviewed_by", srcTeamName), +// eq("reviewed_team", destinationTeam), +// eq("type", "peer_review_submission"))); +// +// } +// +// @Test +// public void addPeerReviewSubmissionTCIDOnePointA() {//null +// //gives access to db +// //------------------------------------------------------------------------------------------------------------------------------ +// //from env file +// String username = "root"; +// String database = "admin"; +// String password = "password"; +// //Create credentials +// MongoCredential mongoCredential = MongoCredential.createCredential(username, database, password.toCharArray()); +// MongoClientOptions options = MongoClientOptions.builder() +// .writeConcern(WriteConcern.JOURNALED).build(); +// +// mongoClient4 = new MongoClient(new ServerAddress("localhost", 27040), Arrays.asList(mongoCredential), options); +// submissionsCollection = mongoClient4.getDatabase("cpr").getCollection("submissions"); +// //------------------------------------------------------------------------------------------------------------------------------ +// +// String course_id = null; +// int assignment_id = 1; +// String srcTeamName = "Team1"; +// String destinationTeam = "Team2"; +// String fileName = "PeerReviewFile1.pdf"; +// int grade = 80; +// +// //asserts that a javax.ws.rs.WebApplicationException is thrown +// Exception exception = assertThrows( +// javax.ws.rs.WebApplicationException.class, +// () -> pr.addPeerReviewSubmission(course_id, assignment_id, srcTeamName, destinationTeam, fileName, grade)); +// +// } +// +// @Test +// public void addPeerReviewSubmissionTCIDTwoPointA() {//assignment_id is -1 +// +// //gives access to db +// //------------------------------------------------------------------------------------------------------------------------------ +// //from env file +// String username = "root"; +// String database = "admin"; +// String password = "password"; +// //Create credentials +// MongoCredential mongoCredential = MongoCredential.createCredential(username, database, password.toCharArray()); +// MongoClientOptions options = MongoClientOptions.builder() +// .writeConcern(WriteConcern.JOURNALED).build(); +// +// mongoClient4 = new MongoClient(new ServerAddress("localhost", 27040), Arrays.asList(mongoCredential), options); +// submissionsCollection = mongoClient4.getDatabase("cpr").getCollection("submissions"); +// //------------------------------------------------------------------------------------------------------------------------------ +// +// String course_id = "CSC-480-46374-SPR-2023"; +// int assignment_id = -1; +// String srcTeamName = "Team1"; +// String destinationTeam = "Team2"; +// String fileName = "PeerReviewFile1.pdf"; +// int grade = 80; +// +// //asserts that a javax.ws.rs.WebApplicationException is thrown +// Exception exception = assertThrows( +// javax.ws.rs.WebApplicationException.class, +// () -> pr.addPeerReviewSubmission(course_id, assignment_id, srcTeamName, destinationTeam, fileName, grade)); +// +// +// } +// +// @Test +// public void addPeerReviewSubmissionTCIDTwoPointB() {//assignment_id is 0 +// +// //gives access to db +// //------------------------------------------------------------------------------------------------------------------------------ +// //from env file +// String username = "root"; +// String database = "admin"; +// String password = "password"; +// //Create credentials +// MongoCredential mongoCredential = MongoCredential.createCredential(username, database, password.toCharArray()); +// MongoClientOptions options = MongoClientOptions.builder() +// .writeConcern(WriteConcern.JOURNALED).build(); +// +// mongoClient4 = new MongoClient(new ServerAddress("localhost", 27040), Arrays.asList(mongoCredential), options); +// submissionsCollection = mongoClient4.getDatabase("cpr").getCollection("submissions"); +// //------------------------------------------------------------------------------------------------------------------------------ +// +// String course_id = "CSC-480-46374-SPR-2023"; +// int assignment_id = 0; +// String srcTeamName = "Team1"; +// String destinationTeam = "Team2"; +// String fileName = "PeerReviewFile1.pdf"; +// int grade = 80; +// +// //asserts that a javax.ws.rs.WebApplicationException is thrown +// Exception exception = assertThrows( +// javax.ws.rs.WebApplicationException.class, +// () -> pr.addPeerReviewSubmission(course_id, assignment_id, srcTeamName, destinationTeam, fileName, grade)); +// +// +// } +// +// @Test +// public void addPeerReviewSubmissionTCIDThreePointA() {//null srcTeamName +// //gives access to db +// //------------------------------------------------------------------------------------------------------------------------------ +// //from env file +// String username = "root"; +// String database = "admin"; +// String password = "password"; +// //Create credentials +// MongoCredential mongoCredential = MongoCredential.createCredential(username, database, password.toCharArray()); +// MongoClientOptions options = MongoClientOptions.builder() +// .writeConcern(WriteConcern.JOURNALED).build(); +// +// mongoClient4 = new MongoClient(new ServerAddress("localhost", 27040), Arrays.asList(mongoCredential), options); +// submissionsCollection = mongoClient4.getDatabase("cpr").getCollection("submissions"); +// //------------------------------------------------------------------------------------------------------------------------------ +// +// String course_id = "CSC-480-46374-SPR-2023"; +// int assignment_id = 1; +// String srcTeamName = null; +// String destinationTeam = "Team2"; +// String fileName = "PeerReviewFile1.pdf"; +// int grade = 80; +// +// //asserts that a javax.ws.rs.WebApplicationException is thrown +// Exception exception = assertThrows( +// javax.ws.rs.WebApplicationException.class, +// () -> pr.addPeerReviewSubmission(course_id, assignment_id, srcTeamName, destinationTeam, fileName, grade)); +// +// } +// +// @Test +// public void addPeerReviewSubmissionTCIDFourPointA() {//null destinationTeam +// //gives access to db +// //------------------------------------------------------------------------------------------------------------------------------ +// //from env file +// String username = "root"; +// String database = "admin"; +// String password = "password"; +// //Create credentials +// MongoCredential mongoCredential = MongoCredential.createCredential(username, database, password.toCharArray()); +// MongoClientOptions options = MongoClientOptions.builder() +// .writeConcern(WriteConcern.JOURNALED).build(); +// +// mongoClient4 = new MongoClient(new ServerAddress("localhost", 27040), Arrays.asList(mongoCredential), options); +// submissionsCollection = mongoClient4.getDatabase("cpr").getCollection("submissions"); +// //------------------------------------------------------------------------------------------------------------------------------ +// +// String course_id = "CSC-480-46374-SPR-2023"; +// int assignment_id = 1; +// String srcTeamName = "Team1"; +// String destinationTeam = null; +// String fileName = "PeerReviewFile1.pdf"; +// int grade = 80; +// +// //asserts that a javax.ws.rs.WebApplicationException is thrown +// Exception exception = assertThrows( +// javax.ws.rs.WebApplicationException.class, +// () -> pr.addPeerReviewSubmission(course_id, assignment_id, srcTeamName, destinationTeam, fileName, grade)); +// +// } +// +// @Test +// public void addPeerReviewSubmissionTCIDFivePointTwo() {//valid fileName +// +// //gives access to db +// //------------------------------------------------------------------------------------------------------------------------------ +// //from env file +// String username = "root"; +// String database = "admin"; +// String password = "password"; +// //Create credentials +// MongoCredential mongoCredential = MongoCredential.createCredential(username, database, password.toCharArray()); +// MongoClientOptions options = MongoClientOptions.builder() +// .writeConcern(WriteConcern.JOURNALED).build(); +// +// mongoClient4 = new MongoClient(new ServerAddress("localhost", 27040), Arrays.asList(mongoCredential), options); +// submissionsCollection = mongoClient4.getDatabase("cpr").getCollection("submissions"); +// //------------------------------------------------------------------------------------------------------------------------------ +// +// String course_id = "CSC-480-46374-SPR-2023"; +// int assignment_id = 1; +// String srcTeamName = "Team1";//aka reviewed_by +// String destinationTeam = "Team2";//aka reviewed_team +// String fileName = "PeerReviewFile1.csv"; +// int grade = 80; +// +// //asserts that a javax.ws.rs.WebApplicationException is thrown +// Exception exception = assertThrows( +// javax.ws.rs.WebApplicationException.class, +// () -> pr.addPeerReviewSubmission(course_id, assignment_id, srcTeamName, destinationTeam, fileName, grade)); +// +// } +// +// +// @Test +// public void addPeerReviewSubmissionTCIDSixPointOne() {//valid grade 32 +// +// //gives access to db +// //------------------------------------------------------------------------------------------------------------------------------ +// //from env file +// String username = "root"; +// String database = "admin"; +// String password = "password"; +// //Create credentials +// MongoCredential mongoCredential = MongoCredential.createCredential(username, database, password.toCharArray()); +// MongoClientOptions options = MongoClientOptions.builder() +// .writeConcern(WriteConcern.JOURNALED).build(); +// +// mongoClient4 = new MongoClient(new ServerAddress("localhost", 27040), Arrays.asList(mongoCredential), options); +// submissionsCollection = mongoClient4.getDatabase("cpr").getCollection("submissions"); +// //------------------------------------------------------------------------------------------------------------------------------ +// +// String course_id = "CSC-480-46374-SPR-2023"; +// int assignment_id = 1; +// String srcTeamName = "Team1";//aka reviewed_by +// String destinationTeam = "Team2";//aka reviewed_team +// String fileName = "PeerReviewFile1.pdf"; +// int grade = 32; +// pr.addPeerReviewSubmission(course_id, assignment_id, srcTeamName, destinationTeam, fileName, grade);//add a Document with the given values +// +// Document docFromQuery = null; +// MongoCursor query = submissionsCollection.find(and( +// eq("course_id", course_id), +// eq("assignment_id", assignment_id), +// eq("submission_name", fileName), +// eq("grade", grade), +// eq("reviewed_by", srcTeamName), +// eq("reviewed_team", destinationTeam), +// eq("type", "peer_review_submission"))).iterator(); +// docFromQuery = query.next();//gets the Document returned by the query +// +// assertFalse(docFromQuery == null); +// +// //remove the change we made to the db (ie. remove the Document we just added) +// submissionsCollection.deleteOne(and(Filters. +// eq("course_id", course_id), +// eq("assignment_id", assignment_id), +// eq("submission_name", fileName), +// eq("grade", grade), +// eq("reviewed_by", srcTeamName), +// eq("reviewed_team", destinationTeam), +// eq("type", "peer_review_submission"))); +// +// } +// +// @Test +// public void addPeerReviewSubmissionTCIDSixPointTwo() {//valid grade 0 +// +// //gives access to db +// //------------------------------------------------------------------------------------------------------------------------------ +// //from env file +// String username = "root"; +// String database = "admin"; +// String password = "password"; +// //Create credentials +// MongoCredential mongoCredential = MongoCredential.createCredential(username, database, password.toCharArray()); +// MongoClientOptions options = MongoClientOptions.builder() +// .writeConcern(WriteConcern.JOURNALED).build(); +// +// mongoClient4 = new MongoClient(new ServerAddress("localhost", 27040), Arrays.asList(mongoCredential), options); +// submissionsCollection = mongoClient4.getDatabase("cpr").getCollection("submissions"); +// //------------------------------------------------------------------------------------------------------------------------------ +// +// String course_id = "CSC-480-46374-SPR-2023"; +// int assignment_id = 1; +// String srcTeamName = "Team1";//aka reviewed_by +// String destinationTeam = "Team2";//aka reviewed_team +// String fileName = "PeerReviewFile1.pdf"; +// int grade = 0; +// pr.addPeerReviewSubmission(course_id, assignment_id, srcTeamName, destinationTeam, fileName, grade);//add a Document with the given values +// +// Document docFromQuery = null; +// MongoCursor query = submissionsCollection.find(and( +// eq("course_id", course_id), +// eq("assignment_id", assignment_id), +// eq("submission_name", fileName), +// eq("grade", grade), +// eq("reviewed_by", srcTeamName), +// eq("reviewed_team", destinationTeam), +// eq("type", "peer_review_submission"))).iterator(); +// docFromQuery = query.next();//gets the Document returned by the query +// +// assertFalse(docFromQuery == null); +// +// //remove the change we made to the db (ie. remove the Document we just added) +// submissionsCollection.deleteOne(and(Filters. +// eq("course_id", course_id), +// eq("assignment_id", assignment_id), +// eq("submission_name", fileName), +// eq("grade", grade), +// eq("reviewed_by", srcTeamName), +// eq("reviewed_team", destinationTeam), +// eq("type", "peer_review_submission"))); +// +// } +// +// +// @Test +// public void addPeerReviewSubmissionTCIDSixPointA() {//grade -2 +// //gives access to db +// //------------------------------------------------------------------------------------------------------------------------------ +// //from env file +// String username = "root"; +// String database = "admin"; +// String password = "password"; +// //Create credentials +// MongoCredential mongoCredential = MongoCredential.createCredential(username, database, password.toCharArray()); +// MongoClientOptions options = MongoClientOptions.builder() +// .writeConcern(WriteConcern.JOURNALED).build(); +// +// mongoClient4 = new MongoClient(new ServerAddress("localhost", 27040), Arrays.asList(mongoCredential), options); +// submissionsCollection = mongoClient4.getDatabase("cpr").getCollection("submissions"); +// //------------------------------------------------------------------------------------------------------------------------------ +// +// String course_id = "CSC-480-46374-SPR-2023"; +// int assignment_id = 1; +// String srcTeamName = "Team1"; +// String destinationTeam = "Team2"; +// String fileName = "PeerReviewFile1.pdf"; +// int grade = -2; +// +// //asserts that a javax.ws.rs.WebApplicationException is thrown +// Exception exception = assertThrows( +// javax.ws.rs.WebApplicationException.class, +// () -> pr.addPeerReviewSubmission(course_id, assignment_id, srcTeamName, destinationTeam, fileName, grade)); +// +// } +// +// +// @Test +// public void addPeerReviewSubmissionTCIDFivePointA() {//null fileName +// //gives access to db +// //------------------------------------------------------------------------------------------------------------------------------ +// //from env file +// String username = "root"; +// String database = "admin"; +// String password = "password"; +// //Create credentials +// MongoCredential mongoCredential = MongoCredential.createCredential(username, database, password.toCharArray()); +// MongoClientOptions options = MongoClientOptions.builder() +// .writeConcern(WriteConcern.JOURNALED).build(); +// +// mongoClient4 = new MongoClient(new ServerAddress("localhost", 27040), Arrays.asList(mongoCredential), options); +// submissionsCollection = mongoClient4.getDatabase("cpr").getCollection("submissions"); +// //------------------------------------------------------------------------------------------------------------------------------ +// +// String course_id = "CSC-480-46374-SPR-2023"; +// int assignment_id = 1; +// String srcTeamName = "Team1"; +// String destinationTeam = "Team2"; +// String fileName = null; +// int grade = 80; +// +// //asserts that a javax.ws.rs.WebApplicationException is thrown +// Exception exception = assertThrows( +// javax.ws.rs.WebApplicationException.class, +// () -> pr.addPeerReviewSubmission(course_id, assignment_id, srcTeamName, destinationTeam, fileName, grade)); +// +// } +// +// //-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// +// //To test: +// //public void uploadPeerReview(String courseID, int assignmentID, String srcTeamName, String destTeamName, IAttachment attachment) +// +// IAttachment attachment = new IAttachment() { +// @Override +// public String getContentId() { +// return null; +// } +// +// @Override +// public MediaType getContentType() { +// return null; +// } +// +// @Override +// public DataHandler getDataHandler() { +// DataHandler dh = new DataHandler(new DataSource() { +// @Override +// public InputStream getInputStream() throws IOException { +// InputStream in = new FileInputStream(new File("src/main/liberty/config/server.xml"));//random filepath +// return in; +// } +// +// @Override +// public OutputStream getOutputStream() throws IOException { +// return null; +// } +// +// @Override +// public String getContentType() { +// return null; +// } +// +// @Override +// public String getName() { +// return null; +// } +// }); +// +// return dh; +// } +// +// @Override +// public String getHeader(String s) { +// return null; +// } +// +// @Override +// public MultivaluedMap getHeaders() { +// return null; +// } +// }; +// +// @Test +// public void uploadPeerReviewTCIDOnePointOne() throws IOException {//valid courseID +// String courseID = "CSC-480-46374-SPR-2023"; +// int assignmentID = 1; +// String srcTeamName = "Team1"; +// String destTeamName = "Team2"; +// +// pr.uploadPeerReview(courseID, assignmentID, srcTeamName, destTeamName, attachment); +// +// String path = "assignments" + "/" + courseID + "/" + assignmentID + "/peer-review-submissions/";//copied from method being tested +// String DAOfileName = "from-" + srcTeamName + "-to-" + destTeamName; +// path = path + DAOfileName + ".pdf"; +// +// assertTrue(new File(path).exists()); +// +// //delete File created for testing +// new File(path).delete(); +// +// } +// +// @Test +// public void uploadPeerReviewTCIDOnePointA() throws IOException {//null courseID +// String courseID = null; +// int assignmentID = 1; +// String srcTeamName = "Team1"; +// String destTeamName = "Team2"; +// +// pr.uploadPeerReview(courseID, assignmentID, srcTeamName, destTeamName, attachment); +// +// String path = "assignments" + "/" + courseID + "/" + assignmentID + "/peer-review-submissions/";//copied from method being tested +// String DAOfileName = "from-" + srcTeamName + "-to-" + destTeamName; +// path = path + DAOfileName + ".pdf"; +// +// assertFalse(new File(path).exists()); +// +// //delete File created for testing +// new File(path).delete(); +// +// } +// +// @Test +// public void uploadPeerReviewTCIDTwoPointA() throws IOException {//assignmentID -2 +// String courseID = "CSC-480-46374-SPR-2023"; +// int assignmentID = -1; +// String srcTeamName = "Team1"; +// String destTeamName = "Team2"; +// +// pr.uploadPeerReview(courseID, assignmentID, srcTeamName, destTeamName, attachment); +// +// String path = "assignments" + "/" + courseID + "/" + assignmentID + "/peer-review-submissions/";//copied from method being tested +// String DAOfileName = "from-" + srcTeamName + "-to-" + destTeamName; +// path = path + DAOfileName + ".pdf"; +// +// assertFalse(new File(path).exists()); +// +// //delete File created for testing +// new File(path).delete(); +// +// } +// +// @Test +// public void uploadPeerReviewTCIDTwoPointB() throws IOException {//assignmentID 0 +// String courseID = "CSC-480-46374-SPR-2023"; +// int assignmentID = 0; +// String srcTeamName = "Team1"; +// String destTeamName = "Team2"; +// +// pr.uploadPeerReview(courseID, assignmentID, srcTeamName, destTeamName, attachment); +// +// String path = "assignments" + "/" + courseID + "/" + assignmentID + "/peer-review-submissions/";//copied from method being tested +// String DAOfileName = "from-" + srcTeamName + "-to-" + destTeamName; +// path = path + DAOfileName + ".pdf"; +// +// assertFalse(new File(path).exists()); +// +// //delete File created for testing +// new File(path).delete(); +// +// } +// +// @Test +// public void uploadPeerReviewTCIDThreePointA() throws IOException {//srcTeamName null +// String courseID = "CSC-480-46374-SPR-2023"; +// int assignmentID = 1; +// String srcTeamName = null; +// String destTeamName = "Team2"; +// +// pr.uploadPeerReview(courseID, assignmentID, srcTeamName, destTeamName, attachment); +// +// String path = "assignments" + "/" + courseID + "/" + assignmentID + "/peer-review-submissions/";//copied from method being tested +// String DAOfileName = "from-" + srcTeamName + "-to-" + destTeamName; +// path = path + DAOfileName + ".pdf"; +// +// assertFalse(new File(path).exists()); +// +// //delete File created for testing +// new File(path).delete(); +// +// } +// +// @Test +// public void uploadPeerReviewTCIDFourPointA() throws IOException {//destTeamName null +// String courseID = "CSC-480-46374-SPR-2023"; +// int assignmentID = 1; +// String srcTeamName = "Team1"; +// String destTeamName = null; +// +// pr.uploadPeerReview(courseID, assignmentID, srcTeamName, destTeamName, attachment); +// +// String path = "assignments" + "/" + courseID + "/" + assignmentID + "/peer-review-submissions/";//copied from method being tested +// String DAOfileName = "from-" + srcTeamName + "-to-" + destTeamName; +// path = path + DAOfileName + ".pdf"; +// +// assertFalse(new File(path).exists()); +// +// //delete File created for testing +// new File(path).delete(); +// +// } +// +// @Test +// public void uploadPeerReviewTCIDFivePointA() throws IOException {//attachment null +// String courseID = "CSC-480-46374-SPR-2023"; +// int assignmentID = 1; +// String srcTeamName = "Team1"; +// String destTeamName = "Team2"; +// attachment = null; +// +// //asserts that a javax.ws.rs.WebApplicationException is thrown +// Exception exception = assertThrows( +// NullPointerException.class, +// () -> pr.uploadPeerReview(courseID, assignmentID, srcTeamName, destTeamName, attachment)); +// +// } +// +// //-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// +// //To test: +// // public File downloadFinishedPeerReview(String courseID, int assignmentID, String srcTeamName, String destTeamName) +// +// @Test +// public void downloadFinishedPeerReviewTCIDOnePointOne() throws IOException {//valid courseID +// +// //gives access to db +// //------------------------------------------------------------------------------------------------------------------------------ +// //from env file +// String username = "root"; +// String database = "admin"; +// String password = "password"; +// //Create credentials +// MongoCredential mongoCredential = MongoCredential.createCredential(username, database, password.toCharArray()); +// MongoClientOptions options = MongoClientOptions.builder() +// .writeConcern(WriteConcern.JOURNALED).build(); +// +// mongoClient4 = new MongoClient(new ServerAddress("localhost", 27040), Arrays.asList(mongoCredential), options); +// submissionsCollection = mongoClient4.getDatabase("cpr").getCollection("submissions"); +// //------------------------------------------------------------------------------------------------------------------------------ +// +// pr.addPeerReviewSubmission("CSC-480-46374-SPR-2023", 1, "Team1", "Team2", "PeerReviewFile1.pdf", 80); +// pr.uploadPeerReview("CSC-480-46374-SPR-2023", 1, "Team1", "Team2", attachment); +// +// String courseID = "CSC-480-46374-SPR-2023"; +// int assignmentID = 1; +// String srcTeamName = "Team1"; +// String destTeamName = "Team2"; +// +// File actualFile = pr.downloadFinishedPeerReview(courseID, assignmentID, srcTeamName, destTeamName); +// System.out.println("file name= " + actualFile.getName()); +// System.out.println("file path= " + actualFile.getPath()); +// assertTrue(actualFile != null); +// +// +// //delete File uploaded/created for testing +// String path = "assignments" + "/" + "CSC-480-46374-SPR-2023" + "/" + "1" + "/peer-review-submissions/"; +// String DAOfileName = "from-" + "Team1" + "-to-" + "Team2"; +// path = path + DAOfileName + ".pdf"; +// System.out.println("test file just created was deleted after test= " + new File(path).delete()); +// +// //remove the Document we just added to the db +// submissionsCollection.deleteOne(and(Filters. +// eq("course_id", "CSC-480-46374-SPR-2023"), +// eq("assignment_id", 1), +// eq("submission_name", "PeerReviewFile1.pdf"), +// eq("grade", 80), +// eq("reviewed_by", "Team1"), +// eq("reviewed_team", "Team2"), +// eq("type", "peer_review_submission"))); +// +// } + + @Test + public void outlierDetectionTest() { + int[] testOne = {65, 65, 65, 65, 100}; + int[] testTwo = {75, 50, 50, 50, 50}; + int[] testThree = {75, 90, 90, 90, 90}; + int[] testFour = {90, 90, 90, 90, 90}; + + for (int i = 0; i < testOne.length; i++) { + if (i == 4) + assertEquals(true, isOutlier(testOne[i], 65, 65, 0)); + else + assertEquals(false, isOutlier(testOne[i], 65, 65, 0)); + } + + for (int i = 0; i < testTwo.length; i++) { + if (i == 0) + assertEquals(true, isOutlier(testTwo[i], 50, 50, 0)); + else + assertEquals(false, isOutlier(testTwo[i], 50, 50, 0)); + } + + for (int i = 0; i < testThree.length; i++) { + if (i == 0) + assertEquals(true, isOutlier(testThree[i], 90, 90, 0)); + else + assertEquals(false, isOutlier(testThree[i], 90, 90, 0)); + } + + for (int j : testFour) { + assertEquals(false, isOutlier(j, 90, 90, 0)); + } + } +} \ No newline at end of file diff --git a/backend/student-peer-review-assignment-microservice/student-peer-review-assignment-microservice.iml b/backend/student-peer-review-assignment-microservice/student-peer-review-assignment-microservice.iml new file mode 100644 index 000000000..8c54e3b0b --- /dev/null +++ b/backend/student-peer-review-assignment-microservice/student-peer-review-assignment-microservice.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/compass-connections.json b/compass-connections.json new file mode 100755 index 000000000..af7b13a2f --- /dev/null +++ b/compass-connections.json @@ -0,0 +1,83 @@ +{ + "type": "Compass Connections", + "version": { + "$numberInt": "1" + }, + "connections": [ + { + "id": "05f95566-d853-4e5a-adc2-0d76ffe4a8d2", + "connectionOptions": { + "connectionString": "mongodb://root:password@localhost:27041/?authMechanism=DEFAULT" + }, + "favorite": { + "name": "CPR Mongo DB5:27041", + "color": "color3" + }, + "lastUsed": { + "$date": { + "$numberLong": "1676847176176" + } + } + }, + { + "id": "38cd2b41-f1ce-42ea-a217-f53de03c789f", + "connectionOptions": { + "connectionString": "mongodb://root:password@localhost:27040/?authMechanism=DEFAULT" + }, + "favorite": { + "name": "CPR Mongo DB4:27040", + "color": "color3" + }, + "lastUsed": { + "$date": { + "$numberLong": "1676847184298" + } + } + }, + { + "id": "51055064-2259-4187-81d1-3f9e8ebce04b", + "connectionOptions": { + "connectionString": "mongodb://root:password@localhost:27039/?authMechanism=DEFAULT" + }, + "favorite": { + "name": "CPR Mongo DB3:27039", + "color": "color3" + }, + "lastUsed": { + "$date": { + "$numberLong": "1676847199904" + } + } + }, + { + "id": "ef887e9e-07ed-47dd-9d16-9e6e87fee9e1", + "connectionOptions": { + "connectionString": "mongodb://root:password@localhost:27037/?authMechanism=DEFAULT" + }, + "favorite": { + "name": "CPR Mongo DB2:27037", + "color": "color3" + }, + "lastUsed": { + "$date": { + "$numberLong": "1676848503242" + } + } + }, + { + "id": "b46290fe-c229-45e6-a11a-7face539340b", + "connectionOptions": { + "connectionString": "mongodb://root:password@localhost:27038/?authMechanism=DEFAULT" + }, + "favorite": { + "name": "CPR Mongo DB1:27038", + "color": "color3" + }, + "lastUsed": { + "$date": { + "$numberLong": "1676848518197" + } + } + } + ] +} \ No newline at end of file diff --git a/docker-compose-db-and-proxy.yml b/docker-compose-db-and-proxy.yml new file mode 100755 index 000000000..9bd7d57f9 --- /dev/null +++ b/docker-compose-db-and-proxy.yml @@ -0,0 +1,115 @@ +version: "3.8" +services: + mongo: + image: mongo:5.0.6 + command: mongod --port ${MONGO_PORT} + container_name: cpr-mongo + restart: unless-stopped + volumes: + - ./db:/data/db + environment: + MONGO_INITDB_DATABASE: ${MONGO_INITDB_DATABASE} + MONGO_INITDB_ROOT_USERNAME: ${MONGO_INITDB_ROOT_USERNAME} + MONGO_INITDB_ROOT_PASSWORD: ${MONGO_INITDB_ROOT_PASSWORD} + MONGO_PORT: ${MONGO_PORT} + MONGO2_PORT: ${MONGO2_PORT} + MONGO3_PORT: ${MONGO3_PORT} + MONGO4_PORT: ${MONGO4_PORT} + MONGO5_PORT: ${MONGO5_PORT} + MONGO_USERNAME: ${MONGO_USERNAME} + MONGO_PASSWORD: ${MONGO_PASSWORD} + ports: + - "127.0.0.1:${MONGO_PORT}:${MONGO_PORT}" + + mongo2: + image: mongo:5.0.6 + command: mongod --port ${MONGO2_PORT} + container_name: cpr-mongo2 + restart: unless-stopped + volumes: + - ./db2:/data/db + environment: + MONGO_INITDB_DATABASE: ${MONGO_INITDB_DATABASE} + MONGO_INITDB_ROOT_USERNAME: ${MONGO_INITDB_ROOT_USERNAME} + MONGO_INITDB_ROOT_PASSWORD: ${MONGO_INITDB_ROOT_PASSWORD} + MONGO_PORT: ${MONGO_PORT} + MONGO2_PORT: ${MONGO2_PORT} + MONGO3_PORT: ${MONGO3_PORT} + MONGO4_PORT: ${MONGO4_PORT} + MONGO5_PORT: ${MONGO5_PORT} + MONGO_USERNAME: ${MONGO_USERNAME} + MONGO_PASSWORD: ${MONGO_PASSWORD} + ports: + - "127.0.0.1:${MONGO2_PORT}:${MONGO2_PORT}" + + mongo3: + image: mongo:5.0.6 + command: mongod --port ${MONGO3_PORT} + container_name: cpr-mongo3 + restart: unless-stopped + volumes: + - ./db3:/data/db + environment: + MONGO_INITDB_DATABASE: ${MONGO_INITDB_DATABASE} + MONGO_INITDB_ROOT_USERNAME: ${MONGO_INITDB_ROOT_USERNAME} + MONGO_INITDB_ROOT_PASSWORD: ${MONGO_INITDB_ROOT_PASSWORD} + MONGO_PORT: ${MONGO_PORT} + MONGO2_PORT: ${MONGO2_PORT} + MONGO3_PORT: ${MONGO3_PORT} + MONGO4_PORT: ${MONGO4_PORT} + MONGO5_PORT: ${MONGO5_PORT} + MONGO_USERNAME: ${MONGO_USERNAME} + MONGO_PASSWORD: ${MONGO_PASSWORD} + ports: + - "127.0.0.1:${MONGO3_PORT}:${MONGO3_PORT}" + + mongo4: + image: mongo:5.0.6 + command: mongod --port ${MONGO4_PORT} + container_name: cpr-mongo4 + restart: unless-stopped + volumes: + - ./db4:/data/db + environment: + MONGO_INITDB_DATABASE: ${MONGO_INITDB_DATABASE} + MONGO_INITDB_ROOT_USERNAME: ${MONGO_INITDB_ROOT_USERNAME} + MONGO_INITDB_ROOT_PASSWORD: ${MONGO_INITDB_ROOT_PASSWORD} + MONGO_PORT: ${MONGO_PORT} + MONGO2_PORT: ${MONGO2_PORT} + MONGO3_PORT: ${MONGO3_PORT} + MONGO4_PORT: ${MONGO4_PORT} + MONGO5_PORT: ${MONGO5_PORT} + MONGO_USERNAME: ${MONGO_USERNAME} + MONGO_PASSWORD: ${MONGO_PASSWORD} + ports: + - "127.0.0.1:${MONGO4_PORT}:${MONGO4_PORT}" + + mongo5: + image: mongo:5.0.6 + command: mongod --port ${MONGO5_PORT} + container_name: cpr-mongo5 + restart: unless-stopped + volumes: + - ./db5:/data/db + environment: + MONGO_INITDB_DATABASE: ${MONGO_INITDB_DATABASE} + MONGO_INITDB_ROOT_USERNAME: ${MONGO_INITDB_ROOT_USERNAME} + MONGO_INITDB_ROOT_PASSWORD: ${MONGO_INITDB_ROOT_PASSWORD} + MONGO_PORT: ${MONGO_PORT} + MONGO2_PORT: ${MONGO2_PORT} + MONGO3_PORT: ${MONGO3_PORT} + MONGO4_PORT: ${MONGO4_PORT} + MONGO5_PORT: ${MONGO5_PORT} + MONGO_USERNAME: ${MONGO_USERNAME} + MONGO_PASSWORD: ${MONGO_PASSWORD} + ports: + - "127.0.0.1:${MONGO5_PORT}:${MONGO5_PORT}" + + nginx: + image: nginx:1.21.6 + restart: unless-stopped + container_name: cpr-nginx + volumes: + - ./nginxDBandProxy.conf:/etc/nginx/nginx.conf:rw + ports: + - "3000:80" \ No newline at end of file diff --git a/docker-compose-local-frontend-m1.yml b/docker-compose-local-frontend-m1.yml old mode 100644 new mode 100755 diff --git a/docker-compose-local-frontend.yml b/docker-compose-local-frontend.yml old mode 100644 new mode 100755 diff --git a/docker-compose-local-m1.yml b/docker-compose-local-m1.yml old mode 100644 new mode 100755 diff --git a/docker-compose-local.yml b/docker-compose-local.yml old mode 100644 new mode 100755 diff --git a/docker-compose-rebuild.yml b/docker-compose-rebuild.yml new file mode 100755 index 000000000..09fce9721 --- /dev/null +++ b/docker-compose-rebuild.yml @@ -0,0 +1,259 @@ +version: "3.8" +services: + frontend: + build: + context: ./frontend + args: + URL: ${URL} + CLIENT_ID: ${CLIENT_ID} + image: cpr-frontend + container_name: cpr-frontend + restart: unless-stopped + + login: + build: + context: ./backend/login-microservice + image: cpr-login + container_name: cpr-login + restart: unless-stopped + volumes: + - ./professor-list.txt:/opt/ol/wlp/output/defaultServer/professor-list.txt:rw + environment: + JWK_ACCESS_URL: ${JWK_ACCESS_URL} + JWK_REFRESH_URL: ${JWK_REFRESH_URL} + MONGO_HOSTNAME: ${MONGO_HOSTNAME} + MONGO_PORT: ${MONGO_PORT} + MONGO2_PORT: ${MONGO2_PORT} + MONGO3_PORT: ${MONGO3_PORT} + MONGO4_PORT: ${MONGO4_PORT} + MONGO5_PORT: ${MONGO5_PORT} + MONGO_DATABASE: ${MONGO_INITDB_DATABASE} + MONGO_USERNAME: ${MONGO_USERNAME} + MONGO_PASSWORD: ${MONGO_PASSWORD} + CLIENT_ID: ${CLIENT_ID} + CLIENT_SECRET: ${CLIENT_SECRET} + + course-manager: + build: + context: ./backend/course-manager-microservice + image: cpr-course-manager + container_name: cpr-course-manager + restart: unless-stopped + environment: + JWK_ACCESS_URL: ${JWK_ACCESS_URL} + JWK_REFRESH_URL: ${JWK_REFRESH_URL} + MONGO_HOSTNAME: ${MONGO_HOSTNAME} + MONGO_PORT: ${MONGO_PORT} + MONGO2_PORT: ${MONGO2_PORT} + MONGO3_PORT: ${MONGO3_PORT} + MONGO4_PORT: ${MONGO4_PORT} + MONGO5_PORT: ${MONGO5_PORT} + MONGO_DATABASE: ${MONGO_INITDB_DATABASE} + MONGO_USERNAME: ${MONGO_USERNAME} + MONGO_PASSWORD: ${MONGO_PASSWORD} + + course-viewer: + build: + context: ./backend/course-viewer-microservice + image: cpr-course-viewer + container_name: cpr-course-viewer + restart: unless-stopped + environment: + JWK_ACCESS_URL: ${JWK_ACCESS_URL} + JWK_REFRESH_URL: ${JWK_REFRESH_URL} + MONGO_HOSTNAME: ${MONGO_HOSTNAME} + MONGO_PORT: ${MONGO_PORT} + MONGO2_PORT: ${MONGO2_PORT} + MONGO3_PORT: ${MONGO3_PORT} + MONGO4_PORT: ${MONGO4_PORT} + MONGO5_PORT: ${MONGO5_PORT} + MONGO_DATABASE: ${MONGO_INITDB_DATABASE} + MONGO_USERNAME: ${MONGO_USERNAME} + MONGO_PASSWORD: ${MONGO_PASSWORD} + + peer-review-teams: + build: + context: ./backend/peer-review-teams-microservice + image: cpr-peer-review-teams + container_name: cpr-peer-review-teams + restart: unless-stopped + environment: + JWK_ACCESS_URL: ${JWK_ACCESS_URL} + JWK_REFRESH_URL: ${JWK_REFRESH_URL} + MONGO_HOSTNAME: ${MONGO_HOSTNAME} + MONGO_PORT: ${MONGO_PORT} + MONGO2_PORT: ${MONGO2_PORT} + MONGO3_PORT: ${MONGO3_PORT} + MONGO4_PORT: ${MONGO4_PORT} + MONGO5_PORT: ${MONGO5_PORT} + MONGO_DATABASE: ${MONGO_INITDB_DATABASE} + MONGO_USERNAME: ${MONGO_USERNAME} + MONGO_PASSWORD: ${MONGO_PASSWORD} + + professor-assignment: + build: + context: ./backend/professor-assignment-microservice + image: cpr-professor-assignment + container_name: cpr-professor-assignment + restart: unless-stopped + volumes: + - ./assignments:/opt/ol/wlp/output/defaultServer/assignments + environment: + JWK_ACCESS_URL: ${JWK_ACCESS_URL} + JWK_REFRESH_URL: ${JWK_REFRESH_URL} + MONGO_HOSTNAME: ${MONGO_HOSTNAME} + MONGO_PORT: ${MONGO_PORT} + MONGO2_PORT: ${MONGO2_PORT} + MONGO3_PORT: ${MONGO3_PORT} + MONGO4_PORT: ${MONGO4_PORT} + MONGO5_PORT: ${MONGO5_PORT} + MONGO_DATABASE: ${MONGO_INITDB_DATABASE} + MONGO_USERNAME: ${MONGO_USERNAME} + MONGO_PASSWORD: ${MONGO_PASSWORD} + + student-assignment: + build: + context: ./backend/student-assignment-microservice + image: cpr-student-assignment + container_name: cpr-student-assignment + restart: unless-stopped + volumes: + - ./assignments:/opt/ol/wlp/output/defaultServer/assignments + environment: + JWK_ACCESS_URL: ${JWK_ACCESS_URL} + JWK_REFRESH_URL: ${JWK_REFRESH_URL} + MONGO_HOSTNAME: ${MONGO_HOSTNAME} + MONGO_PORT: ${MONGO_PORT} + MONGO2_PORT: ${MONGO2_PORT} + MONGO3_PORT: ${MONGO3_PORT} + MONGO4_PORT: ${MONGO4_PORT} + MONGO5_PORT: ${MONGO5_PORT} + MONGO_DATABASE: ${MONGO_INITDB_DATABASE} + MONGO_USERNAME: ${MONGO_USERNAME} + MONGO_PASSWORD: ${MONGO_PASSWORD} + + student-peer-review-assignment: + build: + context: ./backend/student-peer-review-assignment-microservice + image: cpr-student-peer-review-assignment + container_name: cpr-student-peer-review-assignment + restart: unless-stopped + volumes: + - ./assignments:/opt/ol/wlp/output/defaultServer/assignments + environment: + JWK_ACCESS_URL: ${JWK_ACCESS_URL} + JWK_REFRESH_URL: ${JWK_REFRESH_URL} + MONGO_HOSTNAME: ${MONGO_HOSTNAME} + MONGO_PORT: ${MONGO_PORT} + MONGO2_PORT: ${MONGO2_PORT} + MONGO3_PORT: ${MONGO3_PORT} + MONGO4_PORT: ${MONGO4_PORT} + MONGO5_PORT: ${MONGO5_PORT} + MONGO_DATABASE: ${MONGO_INITDB_DATABASE} + MONGO_USERNAME: ${MONGO_USERNAME} + MONGO_PASSWORD: ${MONGO_PASSWORD} + + mongo: + image: mongo:5.0.6 + command: mongod --port ${MONGO_PORT} + container_name: cpr-mongo + restart: unless-stopped + volumes: + - ./db:/data/db + environment: + MONGO_INITDB_DATABASE: ${MONGO_INITDB_DATABASE} + MONGO_INITDB_ROOT_USERNAME: ${MONGO_INITDB_ROOT_USERNAME} + MONGO_INITDB_ROOT_PASSWORD: ${MONGO_INITDB_ROOT_PASSWORD} + MONGO_PORT: ${MONGO_PORT} + MONGO2_PORT: ${MONGO2_PORT} + MONGO3_PORT: ${MONGO3_PORT} + MONGO4_PORT: ${MONGO4_PORT} + MONGO5_PORT: ${MONGO5_PORT} + MONGO_USERNAME: ${MONGO_USERNAME} + MONGO_PASSWORD: ${MONGO_PASSWORD} + ports: + - "127.0.0.1:${MONGO_PORT}:${MONGO_PORT}" + + mongo2: + image: mongo:5.0.6 + command: mongod --port ${MONGO2_PORT} + container_name: cpr-mongo2 + restart: unless-stopped + volumes: + - ./db2:/data/db + environment: + MONGO_INITDB_DATABASE: ${MONGO_INITDB_DATABASE} + MONGO_INITDB_ROOT_USERNAME: ${MONGO_INITDB_ROOT_USERNAME} + MONGO_INITDB_ROOT_PASSWORD: ${MONGO_INITDB_ROOT_PASSWORD} + MONGO_PORT: ${MONGO_PORT} + MONGO2_PORT: ${MONGO2_PORT} + MONGO3_PORT: ${MONGO3_PORT} + MONGO4_PORT: ${MONGO4_PORT} + MONGO5_PORT: ${MONGO5_PORT} + MONGO_USERNAME: ${MONGO_USERNAME} + MONGO_PASSWORD: ${MONGO_PASSWORD} + ports: + - "127.0.0.1:${MONGO2_PORT}:${MONGO2_PORT}" + + mongo3: + image: mongo:5.0.6 + command: mongod --port ${MONGO3_PORT} + container_name: cpr-mongo3 + restart: unless-stopped + volumes: + - ./db3:/data/db + environment: + MONGO_INITDB_DATABASE: ${MONGO_INITDB_DATABASE} + MONGO_INITDB_ROOT_USERNAME: ${MONGO_INITDB_ROOT_USERNAME} + MONGO_INITDB_ROOT_PASSWORD: ${MONGO_INITDB_ROOT_PASSWORD} + MONGO_PORT: ${MONGO_PORT} + MONGO2_PORT: ${MONGO2_PORT} + MONGO3_PORT: ${MONGO3_PORT} + MONGO4_PORT: ${MONGO4_PORT} + MONGO5_PORT: ${MONGO5_PORT} + MONGO_USERNAME: ${MONGO_USERNAME} + MONGO_PASSWORD: ${MONGO_PASSWORD} + ports: + - "127.0.0.1:${MONGO3_PORT}:${MONGO3_PORT}" + + mongo4: + image: mongo:5.0.6 + command: mongod --port ${MONGO4_PORT} + container_name: cpr-mongo4 + restart: unless-stopped + volumes: + - ./db4:/data/db + environment: + MONGO_INITDB_DATABASE: ${MONGO_INITDB_DATABASE} + MONGO_INITDB_ROOT_USERNAME: ${MONGO_INITDB_ROOT_USERNAME} + MONGO_INITDB_ROOT_PASSWORD: ${MONGO_INITDB_ROOT_PASSWORD} + MONGO_PORT: ${MONGO_PORT} + MONGO2_PORT: ${MONGO2_PORT} + MONGO3_PORT: ${MONGO3_PORT} + MONGO4_PORT: ${MONGO4_PORT} + MONGO5_PORT: ${MONGO5_PORT} + MONGO_USERNAME: ${MONGO_USERNAME} + MONGO_PASSWORD: ${MONGO_PASSWORD} + ports: + - "127.0.0.1:${MONGO4_PORT}:${MONGO4_PORT}" + + mongo5: + image: mongo:5.0.6 + command: mongod --port ${MONGO5_PORT} + container_name: cpr-mongo5 + restart: unless-stopped + volumes: + - ./db5:/data/db + environment: + MONGO_INITDB_DATABASE: ${MONGO_INITDB_DATABASE} + MONGO_INITDB_ROOT_USERNAME: ${MONGO_INITDB_ROOT_USERNAME} + MONGO_INITDB_ROOT_PASSWORD: ${MONGO_INITDB_ROOT_PASSWORD} + MONGO_PORT: ${MONGO_PORT} + MONGO2_PORT: ${MONGO2_PORT} + MONGO3_PORT: ${MONGO3_PORT} + MONGO4_PORT: ${MONGO4_PORT} + MONGO5_PORT: ${MONGO5_PORT} + MONGO_USERNAME: ${MONGO_USERNAME} + MONGO_PASSWORD: ${MONGO_PASSWORD} + ports: + - "127.0.0.1:${MONGO5_PORT}:${MONGO5_PORT}" \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml old mode 100644 new mode 100755 index 2f5ab136a..32051dc02 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -267,4 +267,4 @@ services: - /tmp/privkey1.pem:/tmp/privkey1.pem - /tmp/pems/fullchain1.pem:/tmp/pems/fullchain1.pem ports: - - "13125:80" \ No newline at end of file + - "3000:80" \ No newline at end of file diff --git a/env.example b/env.example old mode 100644 new mode 100755 index fd6c9bf4b..bd7bf1e0b --- a/env.example +++ b/env.example @@ -7,18 +7,18 @@ URL=http://localhost:3000 #Set to the value of URL+/jwt/ibm/api/cpr_access/jwk if running docker build in production environment #Set to http://localhost:13126/jwt/ibm/api/cpr_access/jwk if running each microservice separately -JWK_ACCESS_URL= +JWK_ACCESS_URL=http://172.17.0.1:3000/jwt/ibm/api/cpr_access/jwk #Set to http://172.17.0.1:3000/jwt/ibm/api/cpr_refresh/jwk if running docker build locally #Set to the value of URL+/jwt/ibm/api/cpr_access/jwk if running docker build in production environment #Set to http://localhost:13126/jwt/ibm/api/cpr_refresh/jwk if running each microservice separately -JWK_REFRESH_URL= +JWK_REFRESH_URL=http://172.17.0.1:3000/jwt/ibm/api/cpr_refresh/jwk # Google OAuth2 credentials. Match those with your OAuth2 credentials at https://console.cloud.google.com/apis/ -CLIENT_ID= -CLIENT_SECRET= +CLIENT_ID= 881555619940-tf3a720vc8c3n0i0vltslns5n7h11fqi.apps.googleusercontent.com +CLIENT_SECRET= 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 # Database name, root username, and root password to be initialized in Docker container. MONGO_INITDB_DATABASE=cpr @@ -38,3 +38,4 @@ MONGO_USERNAME=root MONGO_PASSWORD=password # This one should be the same as MONGO_INITDB_DATABASE unless you intend to use a different database. MONGO_DATABASE=cpr + diff --git a/frontend/.dockerignore b/frontend/.dockerignore old mode 100644 new mode 100755 diff --git a/frontend/Dockerfile b/frontend/Dockerfile old mode 100644 new mode 100755 diff --git a/frontend/Frontend.iml b/frontend/Frontend.iml new file mode 100755 index 000000000..8c54e3b0b --- /dev/null +++ b/frontend/Frontend.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/frontend/README.md b/frontend/README.md old mode 100644 new mode 100755 diff --git a/frontend/pom.xml b/frontend/pom.xml old mode 100644 new mode 100755 index a4d7fcc52..6828a4888 --- a/frontend/pom.xml +++ b/frontend/pom.xml @@ -42,7 +42,7 @@ org.seleniumhq.selenium selenium-java - 4.1.2 + 4.8.0 test diff --git a/frontend/src/main/frontend/.env.example b/frontend/src/main/frontend/.env.example deleted file mode 100644 index 53a8095f8..000000000 --- a/frontend/src/main/frontend/.env.example +++ /dev/null @@ -1,2 +0,0 @@ -REACT_APP_URL= -REACT_APP_CLIENT_ID= \ No newline at end of file diff --git a/frontend/src/main/frontend/.gitignore b/frontend/src/main/frontend/.gitignore deleted file mode 100644 index 9699d40f9..000000000 --- a/frontend/src/main/frontend/.gitignore +++ /dev/null @@ -1,23 +0,0 @@ -.env - -# dependencies -/node_modules -/.pnp -.pnp.js - -# testing -/coverage - -# production -/build - -# misc -.DS_Store -.env.local -.env.development.local -.env.test.local -.env.production.local - -npm-debug.log* -yarn-debug.log* -yarn-error.log* diff --git a/frontend/src/main/frontend/README.md b/frontend/src/main/frontend/README.md old mode 100644 new mode 100755 diff --git a/frontend/src/main/frontend/build/asset-manifest.json b/frontend/src/main/frontend/build/asset-manifest.json new file mode 100644 index 000000000..2507122ac --- /dev/null +++ b/frontend/src/main/frontend/build/asset-manifest.json @@ -0,0 +1,32 @@ +{ + "files": { + "main.css": "/static/css/main.f5324125.css", + "main.js": "/static/js/main.88fd373a.js", + "static/media/no-team-no-bg.png": "/static/media/no-team-no-bg.36f1a86caf0cc8c89ae0.png", + "static/media/loading.gif": "/static/media/loading.803f24369a085e35482e.gif", + "static/media/no-course.png": "/static/media/no-course.19f64cc5d34c49ed290f.png", + "static/media/no-student.png": "/static/media/no-student.6f16574f79805afcc04b.png", + "static/media/no-data.png": "/static/media/no-data.67c4f2678d27d329dbc6.png", + "static/media/Courses.svg": "/static/media/Courses.6fda0fcfd145845126b4.svg", + "static/media/CPR logo final-02.svg": "/static/media/CPR logo final-02.e1771c10368e86f15334.svg", + "static/media/Home.svg": "/static/media/Home.35e7d66eca98d5e0f21b.svg", + "static/media/White I Icon.svg": "/static/media/White I Icon.479f2d83ca7f5e8a1f05.svg", + "static/media/Bulk Download.svg": "/static/media/Bulk Download.3eb521e713406be59080.svg", + "static/media/Logout.svg": "/static/media/Logout.dfcf8b594b902195566d.svg", + "static/media/Admin_Header.svg": "/static/media/Admin_Header.ac40a935ef40bc49e4bb.svg", + "static/media/White_Download.svg": "/static/media/White_Download.6831d8a241209b2c94a9f1a8d5053a0c.svg", + "static/media/white_bulk_download.svg": "/static/media/white_bulk_download.aab566bb3002cba7939d.svg", + "index.html": "/index.html", + "static/media/Green_Check.svg": "/static/media/Green_Check.fae579a1adb7ea43ec13.svg", + "static/media/Corner_X.svg": "/static/media/Corner_X.05ec184f39d77de37755.svg", + "static/media/search.svg": "/static/media/search.83bf22fea51e5d789840c7ebeff532fe.svg", + "static/media/Arrow_Default.svg": "/static/media/Arrow_Default.a6b2e888a50521367fd4.svg", + "static/media/Arrow_Active.svg": "/static/media/Arrow_Active.3a543f19aaeb33588a5f.svg", + "main.f5324125.css.map": "/static/css/main.f5324125.css.map", + "main.88fd373a.js.map": "/static/js/main.88fd373a.js.map" + }, + "entrypoints": [ + "static/css/main.f5324125.css", + "static/js/main.88fd373a.js" + ] +} \ No newline at end of file diff --git a/frontend/src/main/frontend/build/index.html b/frontend/src/main/frontend/build/index.html new file mode 100644 index 000000000..a6c85e835 --- /dev/null +++ b/frontend/src/main/frontend/build/index.html @@ -0,0 +1 @@ +CPR Tool

\ No newline at end of file diff --git a/frontend/src/main/frontend/build/manifest.json b/frontend/src/main/frontend/build/manifest.json new file mode 100755 index 000000000..080d6c77a --- /dev/null +++ b/frontend/src/main/frontend/build/manifest.json @@ -0,0 +1,25 @@ +{ + "short_name": "React App", + "name": "Create React App Sample", + "icons": [ + { + "src": "favicon.ico", + "sizes": "64x64 32x32 24x24 16x16", + "type": "image/x-icon" + }, + { + "src": "logo192.png", + "type": "image/png", + "sizes": "192x192" + }, + { + "src": "logo512.png", + "type": "image/png", + "sizes": "512x512" + } + ], + "start_url": ".", + "display": "standalone", + "theme_color": "#000000", + "background_color": "#ffffff" +} diff --git a/frontend/src/main/frontend/build/static/media/Admin_Header.ac40a935ef40bc49e4bb.svg b/frontend/src/main/frontend/build/static/media/Admin_Header.ac40a935ef40bc49e4bb.svg new file mode 100644 index 000000000..7c562d323 --- /dev/null +++ b/frontend/src/main/frontend/build/static/media/Admin_Header.ac40a935ef40bc49e4bb.svg @@ -0,0 +1,4 @@ + + + + diff --git a/frontend/src/main/frontend/build/static/media/Arrow_Active.3a543f19aaeb33588a5f.svg b/frontend/src/main/frontend/build/static/media/Arrow_Active.3a543f19aaeb33588a5f.svg new file mode 100644 index 000000000..d7efd5cbf --- /dev/null +++ b/frontend/src/main/frontend/build/static/media/Arrow_Active.3a543f19aaeb33588a5f.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/src/main/frontend/build/static/media/Arrow_Default.a6b2e888a50521367fd4.svg b/frontend/src/main/frontend/build/static/media/Arrow_Default.a6b2e888a50521367fd4.svg new file mode 100644 index 000000000..495e7dbf7 --- /dev/null +++ b/frontend/src/main/frontend/build/static/media/Arrow_Default.a6b2e888a50521367fd4.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/src/main/frontend/build/static/media/Bulk Download.1bcf388cb05e91847c5e.svg b/frontend/src/main/frontend/build/static/media/Bulk Download.1bcf388cb05e91847c5e.svg new file mode 100644 index 000000000..9017f78e9 --- /dev/null +++ b/frontend/src/main/frontend/build/static/media/Bulk Download.1bcf388cb05e91847c5e.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/frontend/src/main/frontend/build/static/media/Bulk Download.3eb521e713406be59080.svg b/frontend/src/main/frontend/build/static/media/Bulk Download.3eb521e713406be59080.svg new file mode 100644 index 000000000..8c4a61ca6 --- /dev/null +++ b/frontend/src/main/frontend/build/static/media/Bulk Download.3eb521e713406be59080.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/frontend/src/main/frontend/build/static/media/CPR logo final-02.e1771c10368e86f15334.svg b/frontend/src/main/frontend/build/static/media/CPR logo final-02.e1771c10368e86f15334.svg new file mode 100644 index 000000000..d3266d45c --- /dev/null +++ b/frontend/src/main/frontend/build/static/media/CPR logo final-02.e1771c10368e86f15334.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + diff --git a/frontend/src/main/frontend/build/static/media/Courses.10e842de1526296c32fb.svg b/frontend/src/main/frontend/build/static/media/Courses.10e842de1526296c32fb.svg new file mode 100644 index 000000000..571cb3486 --- /dev/null +++ b/frontend/src/main/frontend/build/static/media/Courses.10e842de1526296c32fb.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/frontend/src/main/frontend/build/static/media/Courses.6fda0fcfd145845126b4.svg b/frontend/src/main/frontend/build/static/media/Courses.6fda0fcfd145845126b4.svg new file mode 100644 index 000000000..871625c76 --- /dev/null +++ b/frontend/src/main/frontend/build/static/media/Courses.6fda0fcfd145845126b4.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/frontend/src/main/frontend/build/static/media/Home.2f31cc44e322c58a979f.svg b/frontend/src/main/frontend/build/static/media/Home.2f31cc44e322c58a979f.svg new file mode 100644 index 000000000..a31759802 --- /dev/null +++ b/frontend/src/main/frontend/build/static/media/Home.2f31cc44e322c58a979f.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/src/main/frontend/build/static/media/Home.35e7d66eca98d5e0f21b.svg b/frontend/src/main/frontend/build/static/media/Home.35e7d66eca98d5e0f21b.svg new file mode 100644 index 000000000..72cd2e524 --- /dev/null +++ b/frontend/src/main/frontend/build/static/media/Home.35e7d66eca98d5e0f21b.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/src/main/frontend/build/static/media/Logout.dfcf8b594b902195566d.svg b/frontend/src/main/frontend/build/static/media/Logout.dfcf8b594b902195566d.svg new file mode 100644 index 000000000..59951d2e6 --- /dev/null +++ b/frontend/src/main/frontend/build/static/media/Logout.dfcf8b594b902195566d.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/src/main/frontend/build/static/media/loading.803f24369a085e35482e.gif b/frontend/src/main/frontend/build/static/media/loading.803f24369a085e35482e.gif new file mode 100644 index 000000000..4301102d3 Binary files /dev/null and b/frontend/src/main/frontend/build/static/media/loading.803f24369a085e35482e.gif differ diff --git a/frontend/src/main/frontend/build/static/media/no-course.19f64cc5d34c49ed290f.png b/frontend/src/main/frontend/build/static/media/no-course.19f64cc5d34c49ed290f.png new file mode 100644 index 000000000..9ae591db2 Binary files /dev/null and b/frontend/src/main/frontend/build/static/media/no-course.19f64cc5d34c49ed290f.png differ diff --git a/frontend/src/main/frontend/build/static/media/no-data.67c4f2678d27d329dbc6.png b/frontend/src/main/frontend/build/static/media/no-data.67c4f2678d27d329dbc6.png new file mode 100644 index 000000000..79ec6ff83 Binary files /dev/null and b/frontend/src/main/frontend/build/static/media/no-data.67c4f2678d27d329dbc6.png differ diff --git a/frontend/src/main/frontend/build/static/media/no-student.6f16574f79805afcc04b.png b/frontend/src/main/frontend/build/static/media/no-student.6f16574f79805afcc04b.png new file mode 100644 index 000000000..ea8fa0c05 Binary files /dev/null and b/frontend/src/main/frontend/build/static/media/no-student.6f16574f79805afcc04b.png differ diff --git a/frontend/src/main/frontend/build/static/media/no-team-no-bg.36f1a86caf0cc8c89ae0.png b/frontend/src/main/frontend/build/static/media/no-team-no-bg.36f1a86caf0cc8c89ae0.png new file mode 100644 index 000000000..74fe5f9d3 Binary files /dev/null and b/frontend/src/main/frontend/build/static/media/no-team-no-bg.36f1a86caf0cc8c89ae0.png differ diff --git a/frontend/src/main/frontend/build/static/media/search.83bf22fea51e5d789840c7ebeff532fe.svg b/frontend/src/main/frontend/build/static/media/search.83bf22fea51e5d789840c7ebeff532fe.svg new file mode 100644 index 000000000..0c9648b33 --- /dev/null +++ b/frontend/src/main/frontend/build/static/media/search.83bf22fea51e5d789840c7ebeff532fe.svg @@ -0,0 +1,2 @@ + + diff --git a/frontend/src/main/frontend/build/static/media/white_bulk_download.aab566bb3002cba7939d.svg b/frontend/src/main/frontend/build/static/media/white_bulk_download.aab566bb3002cba7939d.svg new file mode 100644 index 000000000..18dc0d6e5 --- /dev/null +++ b/frontend/src/main/frontend/build/static/media/white_bulk_download.aab566bb3002cba7939d.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/frontend/src/main/frontend/package-lock.json b/frontend/src/main/frontend/package-lock.json new file mode 100755 index 000000000..cf0f06555 --- /dev/null +++ b/frontend/src/main/frontend/package-lock.json @@ -0,0 +1,16813 @@ +{ + "name": "my-app", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "my-app", + "version": "0.1.0", + "dependencies": { + "@react-oauth/google": "^0.6.1", + "@reduxjs/toolkit": "^1.8.0", + "blob-util": "^2.0.2", + "chart.js": "^4.2.1", + "final-form": "^4.20.6", + "jwt-decode": "^3.1.2", + "react": "^17.0.2", + "react-chartjs-2": "^5.2.0", + "react-collapsed": "^3.6.0", + "react-dom": "^17.0.2", + "react-final-form": "^6.5.8", + "react-google-login": "^5.2.2", + "react-icons": "^4.3.1", + "react-pro-sidebar": "^0.7.1", + "react-redux": "^7.2.6", + "react-select": "^5.7.2", + "react-uuid": "^1.0.3", + "timers": "^0.1.1" + }, + "devDependencies": { + "axios": "^0.26.0", + "jest": "^27.5.1", + "react-router-dom": "^6.2.1", + "react-scripts": "^5.0.1" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz", + "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "dependencies": { + "@babel/highlight": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.0.tgz", + "integrity": "sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.17.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.5.tgz", + "integrity": "sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.3", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helpers": "^7.17.2", + "@babel/parser": "^7.17.3", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/eslint-parser": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.17.0.tgz", + "integrity": "sha512-PUEJ7ZBXbRkbq3qqM/jZ2nIuakUBqCYc7Qf52Lj7dlZ6zERnqisdHioL0l4wwQZnmskMeasqUNzLBFKs3nylXA==", + "dev": true, + "dependencies": { + "eslint-scope": "^5.1.1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || >=14.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.11.0", + "eslint": "^7.5.0 || ^8.0.0" + } + }, + "node_modules/@babel/eslint-parser/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@babel/eslint-parser/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@babel/eslint-parser/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@babel/generator": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.3.tgz", + "integrity": "sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.17.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", + "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz", + "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==", + "dev": true, + "dependencies": { + "@babel/helper-explode-assignable-expression": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", + "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.20.5", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.17.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.1.tgz", + "integrity": "sha512-JBdSr/LtyYIno/pNnJ75lBcqc3Z1XXujzPanHqjvvrhOA+DTceTFuJi8XjmWTZh4r3fsdfqaCMN0iZemdkxZHQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz", + "integrity": "sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "regexpu-core": "^5.0.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", + "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", + "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-explode-assignable-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz", + "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", + "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", + "dev": true, + "dependencies": { + "@babel/helper-get-function-arity": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-get-function-arity": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", + "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", + "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz", + "integrity": "sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", + "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", + "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", + "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-wrap-function": "^7.16.8", + "@babel/types": "^7.16.8" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", + "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", + "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", + "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", + "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", + "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.8", + "@babel/types": "^7.16.8" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.17.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.2.tgz", + "integrity": "sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.0", + "@babel/types": "^7.17.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/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==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/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==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.3.tgz", + "integrity": "sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz", + "integrity": "sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz", + "integrity": "sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz", + "integrity": "sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-remap-async-to-generator": "^7.16.8", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz", + "integrity": "sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-static-block": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.7.tgz", + "integrity": "sha512-dgqJJrcZoG/4CkMopzhPJjGxsIe9A8RlkQLnL/Vhhx8AA9ZuaRwGSlscSh42hazc7WSrya/IK7mTeoF0DP9tEw==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.17.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.17.2.tgz", + "integrity": "sha512-WH8Z95CwTq/W8rFbMqb9p3hicpt4RX4f0K659ax2VHxgOyT6qQmUaEVEjIh4WR9Eh9NymkVn5vwsrE68fAQNUw==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.17.1", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/plugin-syntax-decorators": "^7.17.0", + "charcodes": "^0.2.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-dynamic-import": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz", + "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz", + "integrity": "sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-json-strings": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz", + "integrity": "sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz", + "integrity": "sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz", + "integrity": "sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz", + "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.3.tgz", + "integrity": "sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.17.0", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz", + "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz", + "integrity": "sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.16.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz", + "integrity": "sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.16.10", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz", + "integrity": "sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz", + "integrity": "sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-decorators": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.17.0.tgz", + "integrity": "sha512-qWe85yCXsvDEluNP0OyeQjH63DlhAR3W7K9BxxU1MvbDb48tgBG+Ao6IJJ6smPDrrVzSQZrbF6donpkFBMcs3A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-flow": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.16.7.tgz", + "integrity": "sha512-UDo3YGQO0jH6ytzVwgSLv9i/CzMcUjbKenL67dTrAZPPv6GFAtDhe6jqnvmoKzC/7htNTohhos+onPtDMqJwaQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz", + "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz", + "integrity": "sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz", + "integrity": "sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz", + "integrity": "sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-remap-async-to-generator": "^7.16.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz", + "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz", + "integrity": "sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz", + "integrity": "sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz", + "integrity": "sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.3.tgz", + "integrity": "sha512-dDFzegDYKlPqa72xIlbmSkly5MluLoaC1JswABGktyt6NTXSBcUuse/kWE/wvKFWJHPETpi158qJZFS3JmykJg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz", + "integrity": "sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz", + "integrity": "sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz", + "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-flow-strip-types": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.16.7.tgz", + "integrity": "sha512-mzmCq3cNsDpZZu9FADYYyfZJIOrSONmHcop2XEKPdBNMa4PDC4eEvcOvzZaCNcjKu72v0XQlA5y1g58aLRXdYg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-flow": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz", + "integrity": "sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz", + "integrity": "sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz", + "integrity": "sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz", + "integrity": "sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz", + "integrity": "sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz", + "integrity": "sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-simple-access": "^7.16.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz", + "integrity": "sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw==", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz", + "integrity": "sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz", + "integrity": "sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz", + "integrity": "sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", + "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz", + "integrity": "sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz", + "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-constant-elements": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.16.7.tgz", + "integrity": "sha512-lF+cfsyTgwWkcw715J88JhMYJ5GpysYNLhLP1PkvkhTRN7B3e74R/1KsDxFxhRpSn0UUD3IWM4GvdBR2PEbbQQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz", + "integrity": "sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.3.tgz", + "integrity": "sha512-9tjBm4O07f7mzKSIlEmPdiE6ub7kfIe6Cd+w+oQebpATfTQMAgW+YOuWxogbKVTulA+MEO7byMeIUtQ1z+z+ZQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-jsx": "^7.16.7", + "@babel/types": "^7.17.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz", + "integrity": "sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A==", + "dev": true, + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.7.tgz", + "integrity": "sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz", + "integrity": "sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q==", + "dev": true, + "dependencies": { + "regenerator-transform": "^0.14.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz", + "integrity": "sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.0.tgz", + "integrity": "sha512-fr7zPWnKXNc1xoHfrIU9mN/4XKX4VLZ45Q+oMhfsYIaHvg7mHgmhfOy/ckRWqDK7XF3QDigRpkh5DKq6+clE8A==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.5.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", + "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz", + "integrity": "sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz", + "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz", + "integrity": "sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz", + "integrity": "sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.8.tgz", + "integrity": "sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-typescript": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz", + "integrity": "sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz", + "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.16.11", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.11.tgz", + "integrity": "sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.16.8", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.7", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.7", + "@babel/plugin-proposal-async-generator-functions": "^7.16.8", + "@babel/plugin-proposal-class-properties": "^7.16.7", + "@babel/plugin-proposal-class-static-block": "^7.16.7", + "@babel/plugin-proposal-dynamic-import": "^7.16.7", + "@babel/plugin-proposal-export-namespace-from": "^7.16.7", + "@babel/plugin-proposal-json-strings": "^7.16.7", + "@babel/plugin-proposal-logical-assignment-operators": "^7.16.7", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.7", + "@babel/plugin-proposal-numeric-separator": "^7.16.7", + "@babel/plugin-proposal-object-rest-spread": "^7.16.7", + "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", + "@babel/plugin-proposal-optional-chaining": "^7.16.7", + "@babel/plugin-proposal-private-methods": "^7.16.11", + "@babel/plugin-proposal-private-property-in-object": "^7.16.7", + "@babel/plugin-proposal-unicode-property-regex": "^7.16.7", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.16.7", + "@babel/plugin-transform-async-to-generator": "^7.16.8", + "@babel/plugin-transform-block-scoped-functions": "^7.16.7", + "@babel/plugin-transform-block-scoping": "^7.16.7", + "@babel/plugin-transform-classes": "^7.16.7", + "@babel/plugin-transform-computed-properties": "^7.16.7", + "@babel/plugin-transform-destructuring": "^7.16.7", + "@babel/plugin-transform-dotall-regex": "^7.16.7", + "@babel/plugin-transform-duplicate-keys": "^7.16.7", + "@babel/plugin-transform-exponentiation-operator": "^7.16.7", + "@babel/plugin-transform-for-of": "^7.16.7", + "@babel/plugin-transform-function-name": "^7.16.7", + "@babel/plugin-transform-literals": "^7.16.7", + "@babel/plugin-transform-member-expression-literals": "^7.16.7", + "@babel/plugin-transform-modules-amd": "^7.16.7", + "@babel/plugin-transform-modules-commonjs": "^7.16.8", + "@babel/plugin-transform-modules-systemjs": "^7.16.7", + "@babel/plugin-transform-modules-umd": "^7.16.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.8", + "@babel/plugin-transform-new-target": "^7.16.7", + "@babel/plugin-transform-object-super": "^7.16.7", + "@babel/plugin-transform-parameters": "^7.16.7", + "@babel/plugin-transform-property-literals": "^7.16.7", + "@babel/plugin-transform-regenerator": "^7.16.7", + "@babel/plugin-transform-reserved-words": "^7.16.7", + "@babel/plugin-transform-shorthand-properties": "^7.16.7", + "@babel/plugin-transform-spread": "^7.16.7", + "@babel/plugin-transform-sticky-regex": "^7.16.7", + "@babel/plugin-transform-template-literals": "^7.16.7", + "@babel/plugin-transform-typeof-symbol": "^7.16.7", + "@babel/plugin-transform-unicode-escapes": "^7.16.7", + "@babel/plugin-transform-unicode-regex": "^7.16.7", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.16.8", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.5.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "core-js-compat": "^3.20.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-react": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.16.7.tgz", + "integrity": "sha512-fWpyI8UM/HE6DfPBzD8LnhQ/OcH8AgTaqcqP2nGOXEUV+VKBR5JRN9hCk9ai+zQQ57vtm9oWeXguBCPNUjytgA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-transform-react-display-name": "^7.16.7", + "@babel/plugin-transform-react-jsx": "^7.16.7", + "@babel/plugin-transform-react-jsx-development": "^7.16.7", + "@babel/plugin-transform-react-pure-annotations": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.16.7.tgz", + "integrity": "sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-transform-typescript": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, + "node_modules/@babel/runtime": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", + "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", + "dependencies": { + "regenerator-runtime": "^0.13.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", + "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.3", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.17.3", + "@babel/types": "^7.17.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@csstools/normalize.css": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.0.0.tgz", + "integrity": "sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg==", + "dev": true + }, + "node_modules/@csstools/postcss-cascade-layers": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz", + "integrity": "sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==", + "dev": true, + "dependencies": { + "@csstools/selector-specificity": "^2.0.2", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-color-function": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz", + "integrity": "sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==", + "dev": true, + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-font-format-keywords": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz", + "integrity": "sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-hwb-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz", + "integrity": "sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-ic-unit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz", + "integrity": "sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==", + "dev": true, + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-is-pseudo-class": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz", + "integrity": "sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==", + "dev": true, + "dependencies": { + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-nested-calc": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz", + "integrity": "sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-normalize-display-values": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz", + "integrity": "sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-oklab-function": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz", + "integrity": "sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==", + "dev": true, + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-progressive-custom-properties": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz", + "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/@csstools/postcss-stepped-value-functions": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz", + "integrity": "sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-text-decoration-shorthand": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz", + "integrity": "sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-trigonometric-functions": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz", + "integrity": "sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-unset-value": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz", + "integrity": "sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==", + "dev": true, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/selector-specificity": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.1.1.tgz", + "integrity": "sha512-jwx+WCqszn53YHOfvFMJJRd/B2GqkCBt+1MJSG6o5/s8+ytHMvDZXsJgUEWLk12UnLd7HYKac4BYU5i/Ron1Cw==", + "dev": true, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4", + "postcss-selector-parser": "^6.0.10" + } + }, + "node_modules/@emotion/babel-plugin": { + "version": "11.10.6", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.10.6.tgz", + "integrity": "sha512-p2dAqtVrkhSa7xz1u/m9eHYdLi+en8NowrmXeF/dKtJpU8lCWli8RUAati7NcSl0afsBott48pdnANuD0wh9QQ==", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.0", + "@emotion/memoize": "^0.8.0", + "@emotion/serialize": "^1.1.1", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.1.3" + } + }, + "node_modules/@emotion/babel-plugin/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@emotion/cache": { + "version": "11.10.7", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.10.7.tgz", + "integrity": "sha512-VLl1/2D6LOjH57Y8Vem1RoZ9haWF4jesHDGiHtKozDQuBIkJm2gimVo0I02sWCuzZtVACeixTVB4jeE8qvCBoQ==", + "dependencies": { + "@emotion/memoize": "^0.8.0", + "@emotion/sheet": "^1.2.1", + "@emotion/utils": "^1.2.0", + "@emotion/weak-memoize": "^0.3.0", + "stylis": "4.1.3" + } + }, + "node_modules/@emotion/hash": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.0.tgz", + "integrity": "sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==" + }, + "node_modules/@emotion/memoize": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.0.tgz", + "integrity": "sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==" + }, + "node_modules/@emotion/react": { + "version": "11.10.6", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.10.6.tgz", + "integrity": "sha512-6HT8jBmcSkfzO7mc+N1L9uwvOnlcGoix8Zn7srt+9ga0MjREo6lRpuVX0kzo6Jp6oTqDhREOFsygN6Ew4fEQbw==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.10.6", + "@emotion/cache": "^11.10.5", + "@emotion/serialize": "^1.1.1", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", + "@emotion/utils": "^1.2.0", + "@emotion/weak-memoize": "^0.3.0", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/serialize": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.1.tgz", + "integrity": "sha512-Zl/0LFggN7+L1liljxXdsVSVlg6E/Z/olVWpfxUTxOAmi8NU7YoeWeLfi1RmnB2TATHoaWwIBRoL+FvAJiTUQA==", + "dependencies": { + "@emotion/hash": "^0.9.0", + "@emotion/memoize": "^0.8.0", + "@emotion/unitless": "^0.8.0", + "@emotion/utils": "^1.2.0", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/sheet": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.1.tgz", + "integrity": "sha512-zxRBwl93sHMsOj4zs+OslQKg/uhF38MB+OMKoCrVuS0nyTkqnau+BM3WGEoOptg9Oz45T/aIGs1qbVAsEFo3nA==" + }, + "node_modules/@emotion/unitless": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz", + "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz", + "integrity": "sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/utils": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.0.tgz", + "integrity": "sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz", + "integrity": "sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg==" + }, + "node_modules/@eslint/eslintrc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.0.tgz", + "integrity": "sha512-fluIaaV+GyV24CCu/ggiHdV+j4RNh85yQnAYS/G2mZODZgGmmlrgCydjUcV3YvxCm9x8nMAfThsqTni4KiXT4A==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "8.35.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.35.0.tgz", + "integrity": "sha512-JXdzbRiWclLVoD8sNUjR443VVlYqiYmDVT6rGUEIEHU5YJW0gaVZwV2xgM7D4arkvASqD0IlLUVjHiFuxaftRw==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.2.6.tgz", + "integrity": "sha512-EvYTiXet5XqweYGClEmpu3BoxmsQ4hkj3QaYA6qEnigCWffTP3vNRwBReTdrwDwo7OoJ3wM8Uoe9Uk4n+d4hfg==" + }, + "node_modules/@floating-ui/dom": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.2.6.tgz", + "integrity": "sha512-02vxFDuvuVPs22iJICacezYJyf7zwwOCWkPNkWNBr1U0Qt1cKFYzWvxts0AmqcOQGwt/3KJWcWIgtbUU38keyw==", + "dependencies": { + "@floating-ui/core": "^1.2.6" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/core": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", + "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "dev": true, + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/reporters": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^27.5.1", + "jest-config": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-resolve-dependencies": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "jest-watcher": "^27.5.1", + "micromatch": "^4.0.4", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/environment": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", + "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", + "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", + "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-haste-map": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", + "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "dev": true, + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", + "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", + "dev": true, + "dependencies": { + "@jest/test-result": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-runtime": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", + "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@kurkle/color": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.2.tgz", + "integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==" + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", + "dev": true + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pmmmwh/react-refresh-webpack-plugin": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.4.tgz", + "integrity": "sha512-zZbZeHQDnoTlt2AF+diQT0wsSXpvWiaIOZwBRdltNFhG1+I3ozyaw7U/nBiUwyJ0D+zwdXp0E3bWOl38Ag2BMw==", + "dev": true, + "dependencies": { + "ansi-html-community": "^0.0.8", + "common-path-prefix": "^3.0.0", + "core-js-pure": "^3.8.1", + "error-stack-parser": "^2.0.6", + "find-up": "^5.0.0", + "html-entities": "^2.1.0", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">= 10.13" + }, + "peerDependencies": { + "@types/webpack": "4.x || 5.x", + "react-refresh": ">=0.10.0 <1.0.0", + "sockjs-client": "^1.4.0", + "type-fest": ">=0.17.0 <3.0.0", + "webpack": ">=4.43.0 <6.0.0", + "webpack-dev-server": "3.x || 4.x", + "webpack-hot-middleware": "2.x", + "webpack-plugin-serve": "0.x || 1.x" + }, + "peerDependenciesMeta": { + "@types/webpack": { + "optional": true + }, + "sockjs-client": { + "optional": true + }, + "type-fest": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + }, + "webpack-hot-middleware": { + "optional": true + }, + "webpack-plugin-serve": { + "optional": true + } + } + }, + "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@popperjs/core": { + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.2.tgz", + "integrity": "sha512-92FRmppjjqz29VMJ2dn+xdyXZBrMlE42AV6Kq6BwjWV7CNUW1hs2FtxSNLQE+gJhaZ6AAmYuO9y8dshhcBl7vA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@react-oauth/google": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@react-oauth/google/-/google-0.6.1.tgz", + "integrity": "sha512-Nq4OK/NTgnvl2dTgQW5H8O1bhLg4JRQhwkEzpfZNKA1ijByQk6X4XG1FGS49FIHjjKInb263Me/yVQ2F3LJeuw==", + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@reduxjs/toolkit": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.8.0.tgz", + "integrity": "sha512-cdfHWfcvLyhBUDicoFwG1u32JqvwKDxLxDd7zSmSoFw/RhYLOygIRtmaMjPRUUHmVmmAGAvquLLsKKU/677kSQ==", + "dependencies": { + "immer": "^9.0.7", + "redux": "^4.1.2", + "redux-thunk": "^2.4.1", + "reselect": "^4.1.5" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || 18.0.0-beta", + "react-redux": "^7.2.1 || ^8.0.0-beta" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-redux": { + "optional": true + } + } + }, + "node_modules/@remix-run/router": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.3.3.tgz", + "integrity": "sha512-YRHie1yQEj0kqqCTCJEfHqYSSNlZQ696QJG+MMiW4mxSl9I0ojz/eRhJS4fs88Z5i6D1SmoF9d3K99/QOhI8/w==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@rollup/plugin-babel": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.0.tgz", + "integrity": "sha512-9uIC8HZOnVLrLHxayq/PTzw+uS25E14KPUBh5ktF+18Mjo5yK0ToMMx6epY0uEgkjwJw0aBW4x2horYXh8juWw==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/plugin-replace": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/pluginutils/node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.0.tgz", + "integrity": "sha512-JLo+Y592QzIE+q7Dl2pMUtt4q8SKYI5jDrZxrozEQxnGVOyYE+GWK9eLkwTaeN9DDctlaRAQ3TBmzZ1qdLE30A==", + "dev": true + }, + "node_modules/@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==", + "dev": true + }, + "node_modules/@sinonjs/commons": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", + "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/@surma/rollup-plugin-off-main-thread": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", + "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", + "dev": true, + "dependencies": { + "ejs": "^3.1.6", + "json5": "^2.2.0", + "magic-string": "^0.25.0", + "string.prototype.matchall": "^4.0.6" + } + }, + "node_modules/@svgr/babel-plugin-add-jsx-attribute": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", + "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", + "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-svg-dynamic-title": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", + "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-svg-em-dimensions": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", + "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-transform-react-native-svg": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", + "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-transform-svg-component": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", + "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-preset": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", + "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", + "dev": true, + "dependencies": { + "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", + "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", + "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", + "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", + "@svgr/babel-plugin-transform-svg-component": "^5.5.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/core": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", + "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", + "dev": true, + "dependencies": { + "@svgr/plugin-jsx": "^5.5.0", + "camelcase": "^6.2.0", + "cosmiconfig": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/core/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@svgr/hast-util-to-babel-ast": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", + "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.6" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/plugin-jsx": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", + "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@svgr/babel-preset": "^5.5.0", + "@svgr/hast-util-to-babel-ast": "^5.5.0", + "svg-parser": "^2.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/plugin-svgo": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", + "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", + "dev": true, + "dependencies": { + "cosmiconfig": "^7.0.0", + "deepmerge": "^4.2.2", + "svgo": "^1.2.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/webpack": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", + "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/plugin-transform-react-constant-elements": "^7.12.1", + "@babel/preset-env": "^7.12.1", + "@babel/preset-react": "^7.12.5", + "@svgr/core": "^5.5.0", + "@svgr/plugin-jsx": "^5.5.0", + "@svgr/plugin-svgo": "^5.5.0", + "loader-utils": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@types/babel__core": { + "version": "7.1.18", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.18.tgz", + "integrity": "sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", + "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", + "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.3.0" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", + "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", + "dev": true, + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.21.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.21.1.tgz", + "integrity": "sha512-rc9K8ZpVjNcLs8Fp0dkozd5Pt2Apk1glO4Vgz8ix1u6yFByxfqo5Yavpy65o+93TAe24jr7v+eSBtFLvOQtCRQ==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", + "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true + }, + "node_modules/@types/express": { + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", + "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.28", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", + "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/hoist-non-react-statics": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", + "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", + "dependencies": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, + "node_modules/@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", + "dev": true + }, + "node_modules/@types/http-proxy": { + "version": "1.17.8", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.8.tgz", + "integrity": "sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "dev": true + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "node_modules/@types/mime": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", + "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==", + "dev": true + }, + "node_modules/@types/node": { + "version": "18.14.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.6.tgz", + "integrity": "sha512-93+VvleD3mXwlLI/xASjw0FzKcwzl3OdTCzm1LaRfqgS21gfFtK3zDXM5Op9TeeMsJVOaJ2VRDpT9q4Y3d0AvA==", + "dev": true + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + }, + "node_modules/@types/prettier": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz", + "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==", + "dev": true + }, + "node_modules/@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + }, + "node_modules/@types/q": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", + "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==", + "dev": true + }, + "node_modules/@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true + }, + "node_modules/@types/react": { + "version": "18.0.28", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.28.tgz", + "integrity": "sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew==", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-redux": { + "version": "7.1.25", + "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.25.tgz", + "integrity": "sha512-bAGh4e+w5D8dajd6InASVIyCo4pZLJ66oLb80F9OBLO1gKESbZcRCJpTT6uLXX+HAB57zw1WTdwJdAsewuTweg==", + "dependencies": { + "@types/hoist-non-react-statics": "^3.3.0", + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0", + "redux": "^4.0.0" + } + }, + "node_modules/@types/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA==", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "dev": true + }, + "node_modules/@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" + }, + "node_modules/@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "dev": true + }, + "node_modules/@types/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", + "dev": true, + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz", + "integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==", + "dev": true, + "dependencies": { + "@types/mime": "*", + "@types/node": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.33", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true + }, + "node_modules/@types/trusted-types": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz", + "integrity": "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==", + "dev": true + }, + "node_modules/@types/ws": { + "version": "8.5.4", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz", + "integrity": "sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.54.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.54.0.tgz", + "integrity": "sha512-+hSN9BdSr629RF02d7mMtXhAJvDTyCbprNYJKrXETlul/Aml6YZwd90XioVbjejQeHbb3R8Dg0CkRgoJDxo8aw==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.54.0", + "@typescript-eslint/type-utils": "5.54.0", + "@typescript-eslint/utils": "5.54.0", + "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@typescript-eslint/experimental-utils": { + "version": "5.54.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.54.0.tgz", + "integrity": "sha512-rRYECOTh5V3iWsrOzXi7h1jp3Bi9OkJHrb3wECi3DVqMGTilo9wAYmCbT+6cGdrzUY3MWcAa2mESM6FMik6tVw==", + "dev": true, + "dependencies": { + "@typescript-eslint/utils": "5.54.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.54.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.54.0.tgz", + "integrity": "sha512-aAVL3Mu2qTi+h/r04WI/5PfNWvO6pdhpeMRWk9R7rEV4mwJNzoWf5CCU5vDKBsPIFQFjEq1xg7XBI2rjiMXQbQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.54.0", + "@typescript-eslint/types": "5.54.0", + "@typescript-eslint/typescript-estree": "5.54.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.54.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.54.0.tgz", + "integrity": "sha512-VTPYNZ7vaWtYna9M4oD42zENOBrb+ZYyCNdFs949GcN8Miwn37b8b7eMj+EZaq7VK9fx0Jd+JhmkhjFhvnovhg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.54.0", + "@typescript-eslint/visitor-keys": "5.54.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.54.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.54.0.tgz", + "integrity": "sha512-WI+WMJ8+oS+LyflqsD4nlXMsVdzTMYTxl16myXPaCXnSgc7LWwMsjxQFZCK/rVmTZ3FN71Ct78ehO9bRC7erYQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.54.0", + "@typescript-eslint/utils": "5.54.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.54.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.54.0.tgz", + "integrity": "sha512-nExy+fDCBEgqblasfeE3aQ3NuafBUxZxgxXcYfzYRZFHdVvk5q60KhCSkG0noHgHRo/xQ/BOzURLZAafFpTkmQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.54.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.54.0.tgz", + "integrity": "sha512-X2rJG97Wj/VRo5YxJ8Qx26Zqf0RRKsVHd4sav8NElhbZzhpBI8jU54i6hfo9eheumj4oO4dcRN1B/zIVEqR/MQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.54.0", + "@typescript-eslint/visitor-keys": "5.54.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.54.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.54.0.tgz", + "integrity": "sha512-cuwm8D/Z/7AuyAeJ+T0r4WZmlnlxQ8wt7C7fLpFlKMR+dY6QO79Cq1WpJhvZbMA4ZeZGHiRWnht7ZJ8qkdAunw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.54.0", + "@typescript-eslint/types": "5.54.0", + "@typescript-eslint/typescript-estree": "5.54.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.54.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.54.0.tgz", + "integrity": "sha512-xu4wT7aRCakGINTLGeyGqDn+78BwFlggwBjnHa1ar/KaGagnmwLYmlrXIrgAaQ3AE1Vd6nLfKASm7LrFHNbKGA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.54.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "dev": true + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dev": true, + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "node_modules/acorn-globals/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "dependencies": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "node_modules/acorn-node/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/address": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", + "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "dev": true, + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "node_modules/array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + }, + "node_modules/array-includes": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", + "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", + "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", + "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.reduce": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz", + "integrity": "sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", + "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.1.3" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true + }, + "node_modules/ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", + "dev": true + }, + "node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.13", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", + "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + ], + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-lite": "^1.0.30001426", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axe-core": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.6.3.tgz", + "integrity": "sha512-/BQzOX780JhsxDnPpH4ZiyrJAzcd8AfzFPkv+89veFSr1rcMjuq2JDCwypKaPeB6ljHp9KjXhPpjgCvQlWYuqg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/axios": { + "version": "0.26.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz", + "integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.14.8" + } + }, + "node_modules/axobject-query": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz", + "integrity": "sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==", + "dev": true, + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "node_modules/babel-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", + "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", + "dev": true, + "dependencies": { + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-loader": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", + "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", + "dev": true, + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" + } + }, + "node_modules/babel-loader/node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", + "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, + "node_modules/babel-plugin-named-asset-import": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz", + "integrity": "sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==", + "dev": true, + "peerDependencies": { + "@babel/core": "^7.1.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", + "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.3.3", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz", + "integrity": "sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.2", + "core-js-compat": "^3.21.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", + "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-transform-react-remove-prop-types": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", + "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==", + "dev": true + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", + "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^27.5.1", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-react-app": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-10.0.1.tgz", + "integrity": "sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.16.0", + "@babel/plugin-proposal-class-properties": "^7.16.0", + "@babel/plugin-proposal-decorators": "^7.16.4", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0", + "@babel/plugin-proposal-numeric-separator": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.0", + "@babel/plugin-proposal-private-methods": "^7.16.0", + "@babel/plugin-transform-flow-strip-types": "^7.16.0", + "@babel/plugin-transform-react-display-name": "^7.16.0", + "@babel/plugin-transform-runtime": "^7.16.4", + "@babel/preset-env": "^7.16.4", + "@babel/preset-react": "^7.16.0", + "@babel/preset-typescript": "^7.16.0", + "@babel/runtime": "^7.16.3", + "babel-plugin-macros": "^3.1.0", + "babel-plugin-transform-react-remove-prop-types": "^0.4.24" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "node_modules/bfj": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/bfj/-/bfj-7.0.2.tgz", + "integrity": "sha512-+e/UqUzwmzJamNF50tBV6tZPTORow7gQ96iFow+8b562OdMpEK0BcJEq2OSPEDmAbSMBQ7PKZ87ubFkgxpYWgw==", + "dev": true, + "dependencies": { + "bluebird": "^3.5.5", + "check-types": "^11.1.1", + "hoopy": "^0.1.4", + "tryer": "^1.0.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/blob-util": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", + "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==" + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/bonjour-service": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.0.tgz", + "integrity": "sha512-LVRinRB3k1/K0XzZ2p58COnWvkQknIY6sf0zF2rpErvcJXpMBttEPQSxK+HEXSS9VmpZlDoDnQWv8ftJT20B0Q==", + "dev": true, + "dependencies": { + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true + }, + "node_modules/browserslist": { + "version": "4.21.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", + "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001460", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001460.tgz", + "integrity": "sha512-Bud7abqjvEjipUkpLs4D7gR0l8hBYBHoa+tGtKJHvT2AYzLp1z7EmVkUT4ERpVUfca8S2HGIVs883D8pUH1ZzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] + }, + "node_modules/case-sensitive-paths-webpack-plugin": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", + "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/charcodes": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/charcodes/-/charcodes-0.2.0.tgz", + "integrity": "sha512-Y4kiDb+AM4Ecy58YkuZrrSRJBDQdQ2L+NyS1vHHFtNtUjgutcZfx3yp1dAONI/oPaPmyGfCLx5CxL+zauIMyKQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/chart.js": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.2.1.tgz", + "integrity": "sha512-6YbpQ0nt3NovAgOzbkSSeeAQu/3za1319dPUQTXn9WcOpywM8rGKxJHrhS8V8xEkAlk8YhEfjbuAPfUyp6jIsw==", + "dependencies": { + "@kurkle/color": "^0.3.0" + }, + "engines": { + "pnpm": "^7.0.0" + } + }, + "node_modules/check-types": { + "version": "11.2.2", + "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.2.2.tgz", + "integrity": "sha512-HBiYvXvn9Z70Z88XKjz3AEKd4HJhBXsa3j7xFnITAzoS8+q6eIGi8qDB8FKPBAjtuxjI/zFpwuiCb8oDtKOYrA==", + "dev": true + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/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, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", + "dev": true + }, + "node_modules/classnames": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz", + "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==" + }, + "node_modules/clean-css": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.2.tgz", + "integrity": "sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==", + "dev": true, + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "dev": true, + "dependencies": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/coa/node_modules/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==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/coa/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/coa/node_modules/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==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/coa/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/coa/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/coa/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/coa/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "dev": true + }, + "node_modules/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/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 + }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "dev": true + }, + "node_modules/colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", + "dev": true + }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/compression/node_modules/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==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/confusing-browser-globals": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", + "dev": true + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "node_modules/core-js": { + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.29.0.tgz", + "integrity": "sha512-VG23vuEisJNkGl6XQmFJd3rEG/so/CNatqeE+7uZAwTSwFeB/qaO0be8xZYUNWprJ/GIwL8aMt9cj1kvbpTZhg==", + "dev": true, + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.29.0.tgz", + "integrity": "sha512-ScMn3uZNAFhK2DGoEfErguoiAHhV2Ju+oJo/jK08p7B3f3UhocUrCCkTvnZaiS+edl5nlIoiBXKcwMc6elv4KQ==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-pure": { + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.29.0.tgz", + "integrity": "sha512-v94gUjN5UTe1n0yN/opTihJ8QBWD2O8i19RfTZR7foONPWArnjB96QA/wk5ozu1mm6ja3udQCzOzwQXTxi3xOQ==", + "dev": true, + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/css-blank-pseudo": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", + "integrity": "sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "bin": { + "css-blank-pseudo": "dist/cli.cjs" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-declaration-sorter": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz", + "integrity": "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-has-pseudo": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz", + "integrity": "sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "bin": { + "css-has-pseudo": "dist/cli.cjs" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-loader": { + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.3.tgz", + "integrity": "sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.19", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.8" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/css-loader/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/css-loader/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/css-loader/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/css-minimizer-webpack-plugin": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", + "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==", + "dev": true, + "dependencies": { + "cssnano": "^5.0.6", + "jest-worker": "^27.0.2", + "postcss": "^8.3.5", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@parcel/css": { + "optional": true + }, + "clean-css": { + "optional": true + }, + "csso": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/css-prefers-color-scheme": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", + "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", + "dev": true, + "bin": { + "css-prefers-color-scheme": "dist/cli.cjs" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", + "dev": true + }, + "node_modules/css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssdb": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.4.1.tgz", + "integrity": "sha512-0Q8NOMpXJ3iTDDbUv9grcmQAfdDx4qz+fN/+Md2FGbevT+6+bJNQ2LjB2YIUlLbpBTM32idU1Sb+tb/uGt6/XQ==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "5.1.15", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", + "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", + "dev": true, + "dependencies": { + "cssnano-preset-default": "^5.2.14", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-preset-default": { + "version": "5.2.14", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", + "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", + "dev": true, + "dependencies": { + "css-declaration-sorter": "^6.3.1", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.1", + "postcss-convert-values": "^5.1.3", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.4", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.4", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.2", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "node_modules/cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "dev": true + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "node_modules/csstype": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true + }, + "node_modules/data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dev": true, + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", + "dev": true + }, + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "dev": true + }, + "node_modules/deep-equal": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.0.tgz", + "integrity": "sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "es-get-iterator": "^1.1.2", + "get-intrinsic": "^1.1.3", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.1", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.0.tgz", + "integrity": "sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "dev": true, + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/defined": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", + "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "node_modules/detect-port-alt": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", + "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", + "dev": true, + "dependencies": { + "address": "^1.0.1", + "debug": "^2.6.0" + }, + "bin": { + "detect": "bin/detect-port", + "detect-port": "bin/detect-port" + }, + "engines": { + "node": ">= 4.2.1" + } + }, + "node_modules/detect-port-alt/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/detect-port-alt/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/detective": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", + "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", + "dev": true, + "dependencies": { + "acorn-node": "^1.8.2", + "defined": "^1.0.0", + "minimist": "^1.2.6" + }, + "bin": { + "detective": "bin/detective.js" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true + }, + "node_modules/diff-sequences": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", + "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "node_modules/dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", + "dev": true + }, + "node_modules/dns-packet": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", + "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==", + "dev": true, + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dev": true, + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "dev": true, + "dependencies": { + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "node_modules/ejs": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", + "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", + "dev": true, + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.319", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.319.tgz", + "integrity": "sha512-WeoI6NwZUgteKB+Wmn692S35QycwwNxwgTomNnoCJ79znBAjtBi6C/cIW62JkXmpJRX5rKNYSLDBdAM8l5fH0w==", + "dev": true + }, + "node_modules/emittery": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", + "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "dev": true, + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/es-abstract": { + "version": "1.21.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz", + "integrity": "sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.3", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.4", + "is-array-buffer": "^3.0.1", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.2", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", + "dev": true + }, + "node_modules/es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/eslint": { + "version": "8.35.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.35.0.tgz", + "integrity": "sha512-BxAf1fVL7w+JLRQhWl2pzGeSiGqbWumV4WNvc9Rhp6tiCtm4oHnyPBSEtMGZwrQgudFQ+otqzWoPB7x+hxoWsw==", + "dev": true, + "dependencies": { + "@eslint/eslintrc": "^2.0.0", + "@eslint/js": "8.35.0", + "@humanwhocodes/config-array": "^0.11.8", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.4.0", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-react-app": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz", + "integrity": "sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.16.0", + "@babel/eslint-parser": "^7.16.3", + "@rushstack/eslint-patch": "^1.1.0", + "@typescript-eslint/eslint-plugin": "^5.5.0", + "@typescript-eslint/parser": "^5.5.0", + "babel-preset-react-app": "^10.0.1", + "confusing-browser-globals": "^1.0.11", + "eslint-plugin-flowtype": "^8.0.3", + "eslint-plugin-import": "^2.25.3", + "eslint-plugin-jest": "^25.3.0", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.27.1", + "eslint-plugin-react-hooks": "^4.3.0", + "eslint-plugin-testing-library": "^5.0.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "eslint": "^8.0.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", + "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.11.0", + "resolve": "^1.22.1" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", + "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", + "dev": true, + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-flowtype": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz", + "integrity": "sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==", + "dev": true, + "dependencies": { + "lodash": "^4.17.21", + "string-natural-compare": "^3.0.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@babel/plugin-syntax-flow": "^7.14.5", + "@babel/plugin-transform-react-jsx": "^7.14.9", + "eslint": "^8.1.0" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.27.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", + "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.7.4", + "has": "^1.0.3", + "is-core-module": "^2.11.0", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.6", + "resolve": "^1.22.1", + "semver": "^6.3.0", + "tsconfig-paths": "^3.14.1" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-jest": { + "version": "25.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz", + "integrity": "sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/experimental-utils": "^5.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^4.0.0 || ^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + }, + "jest": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", + "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.20.7", + "aria-query": "^5.1.3", + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "ast-types-flow": "^0.0.7", + "axe-core": "^4.6.2", + "axobject-query": "^3.1.1", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "has": "^1.0.3", + "jsx-ast-utils": "^3.3.3", + "language-tags": "=1.0.5", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.32.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz", + "integrity": "sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "array.prototype.tosorted": "^1.1.1", + "doctrine": "^2.1.0", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "object.hasown": "^1.1.2", + "object.values": "^1.1.6", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.4", + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.8" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", + "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-testing-library": { + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.10.2.tgz", + "integrity": "sha512-f1DmDWcz5SDM+IpCkEX0lbFqrrTs8HRsEElzDEqN/EBI0hpRj8Cns5+IVANXswE8/LeybIJqPAOQIFu2j5Y5sw==", + "dev": true, + "dependencies": { + "@typescript-eslint/utils": "^5.43.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0", + "npm": ">=6" + }, + "peerDependencies": { + "eslint": "^7.5.0 || ^8.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint-webpack-plugin": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz", + "integrity": "sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==", + "dev": true, + "dependencies": { + "@types/eslint": "^7.29.0 || ^8.4.1", + "jest-worker": "^28.0.2", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0", + "webpack": "^5.0.0" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/jest-worker": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", + "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/eslint-webpack-plugin/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/eslint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eslint/node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "dev": true, + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/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, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/filesize": { + "version": "8.0.7", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", + "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/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, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/final-form": { + "version": "4.20.9", + "resolved": "https://registry.npmjs.org/final-form/-/final-form-4.20.9.tgz", + "integrity": "sha512-shA1X/7v8RmukWMNRHx0l7+Bm41hOivY78IvOiBrPVHjyWFIyqqIEMCz7yTVRc9Ea+EU4WkZ5r4MH6whSo5taw==", + "dependencies": { + "@babel/runtime": "^7.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/final-form" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/fork-ts-checker-webpack-plugin": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz", + "integrity": "sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "chokidar": "^3.4.2", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "memfs": "^3.1.2", + "minimatch": "^3.0.4", + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=10", + "yarn": ">=1.0.0" + }, + "peerDependencies": { + "eslint": ">= 6", + "typescript": ">= 2.7", + "vue-template-compiler": "*", + "webpack": ">= 4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + } + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "dev": true + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "node_modules/gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "dev": true, + "dependencies": { + "duplexer": "^0.1.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "node_modules/harmony-reflect": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", + "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/hoopy": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", + "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", + "dev": true, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "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" + } + }, + "node_modules/hpack.js/node_modules/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==", + "dev": true + }, + "node_modules/hpack.js/node_modules/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==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "dev": true, + "dependencies": { + "whatwg-encoding": "^1.0.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-entities": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", + "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==", + "dev": true + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "dev": true, + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-webpack-plugin": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", + "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", + "dev": true, + "dependencies": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "webpack": "^5.20.0" + } + }, + "node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "dev": true, + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/idb": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", + "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==", + "dev": true + }, + "node_modules/identity-obj-proxy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", + "integrity": "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==", + "dev": true, + "dependencies": { + "harmony-reflect": "^1.4.6" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/immer": { + "version": "9.0.19", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.19.tgz", + "integrity": "sha512-eY+Y0qcsB4TZKwgQzLaE/lqYMlKhv5J9dyd2RhhtGhNo2njPXDqU9XPfcNfa3MIDsdtZt5KlkIsirlo4dHsWdQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/internal-slot": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ipaddr.js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", + "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-root": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", + "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, + "node_modules/is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jake": { + "version": "10.8.5", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", + "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", + "dev": true, + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.1", + "minimatch": "^3.0.4" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", + "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", + "dev": true, + "dependencies": { + "@jest/core": "^27.5.1", + "import-local": "^3.0.2", + "jest-cli": "^27.5.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", + "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "execa": "^5.0.0", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", + "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-cli": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", + "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", + "dev": true, + "dependencies": { + "@jest/core": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "prompts": "^2.0.1", + "yargs": "^16.2.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-config": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", + "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.8.0", + "@jest/test-sequencer": "^27.5.1", + "@jest/types": "^27.5.1", + "babel-jest": "^27.5.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.9", + "jest-circus": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-jasmine2": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-diff": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", + "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", + "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", + "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-jsdom": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", + "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1", + "jsdom": "^16.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", + "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-jasmine2": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", + "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-leak-detector": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", + "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", + "dev": true, + "dependencies": { + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", + "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-mock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", + "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", + "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-snapshot": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", + "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", + "dev": true, + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-leak-detector": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "source-map-support": "^0.5.6", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", + "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/globals": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-serializer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "dev": true, + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", + "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^27.5.1", + "semver": "^7.3.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-snapshot/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", + "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "leven": "^3.1.0", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watch-typeahead": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz", + "integrity": "sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.3.1", + "chalk": "^4.0.0", + "jest-regex-util": "^28.0.0", + "jest-watcher": "^28.0.0", + "slash": "^4.0.0", + "string-length": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "jest": "^27.0.0 || ^28.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/console": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", + "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", + "dev": true, + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", + "slash": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/console/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/test-result": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", + "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", + "dev": true, + "dependencies": { + "@jest/console": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@types/yargs": { + "version": "17.0.23", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.23.tgz", + "integrity": "sha512-yuogunc04OnzGQCrfHx+Kk883Q4X0aSwmYZhKjI21m+SVYzjIbrWl8dOOwSv5hf2Um2pdCOXWo9isteZTNXUZQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-watch-typeahead/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/emittery": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", + "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-message-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", + "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.1.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-message-util/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "dev": true, + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-watcher": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", + "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", + "dev": true, + "dependencies": { + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.10.2", + "jest-util": "^28.1.3", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-watcher/node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-watcher/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/jest-watch-typeahead/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watch-typeahead/node_modules/string-length": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz", + "integrity": "sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==", + "dev": true, + "dependencies": { + "char-regex": "^2.0.0", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watch-typeahead/node_modules/string-length/node_modules/char-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.1.tgz", + "integrity": "sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==", + "dev": true, + "engines": { + "node": ">=12.20" + } + }, + "node_modules/jest-watch-typeahead/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/jest-watcher": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", + "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", + "dev": true, + "dependencies": { + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^27.5.1", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-sdsl": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", + "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "dev": true, + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", + "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.5", + "object.assign": "^4.1.3" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/jwt-decode": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-3.1.2.tgz", + "integrity": "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==" + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", + "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", + "dev": true + }, + "node_modules/language-tags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", + "dev": true, + "dependencies": { + "language-subtag-registry": "~0.3.2" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", + "dev": true + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "dev": true + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/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, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", + "dev": true + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.4.13", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.13.tgz", + "integrity": "sha512-omTM41g3Skpvx5dSYeZIbXKcXoAVc/AoMNwn9TKx++L/gaen/+4TTttmu8ZSch5vfVJ8uJvGbroTsIlslRg6lg==", + "dev": true, + "dependencies": { + "fs-monkey": "^1.0.3" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.2.tgz", + "integrity": "sha512-EdlUizq13o0Pd+uCp+WO/JpkLvHRVGt97RqfeGhXqAcorYo1ypJSpkV+WDT0vY/kmh/p7wRdJNJtuyK540PXDw==", + "dev": true, + "dependencies": { + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/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==", + "dev": true + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true, + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", + "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", + "dev": true + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nwsapi": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.2.tgz", + "integrity": "sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==", + "dev": true + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", + "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", + "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz", + "integrity": "sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==", + "dev": true, + "dependencies": { + "array.prototype.reduce": "^1.0.5", + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.hasown": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", + "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", + "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dev": true, + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "dev": true, + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss": { + "version": "8.4.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-attribute-case-insensitive": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz", + "integrity": "sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-browser-comments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-4.0.0.tgz", + "integrity": "sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "browserslist": ">=4", + "postcss": ">=8" + } + }, + "node_modules/postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + }, + "peerDependencies": { + "postcss": "^8.2.2" + } + }, + "node_modules/postcss-clamp": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", + "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=7.6.0" + }, + "peerDependencies": { + "postcss": "^8.4.6" + } + }, + "node_modules/postcss-color-functional-notation": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz", + "integrity": "sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-color-hex-alpha": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz", + "integrity": "sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-color-rebeccapurple": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz", + "integrity": "sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-colormin": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", + "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-convert-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-custom-media": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz", + "integrity": "sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/postcss-custom-properties": { + "version": "12.1.11", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz", + "integrity": "sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-custom-selectors": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz", + "integrity": "sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/postcss-dir-pseudo-class": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz", + "integrity": "sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-discard-comments": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-empty": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-double-position-gradients": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz", + "integrity": "sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==", + "dev": true, + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-env-function": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz", + "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-flexbugs-fixes": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz", + "integrity": "sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==", + "dev": true, + "peerDependencies": { + "postcss": "^8.1.4" + } + }, + "node_modules/postcss-focus-visible": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz", + "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-focus-within": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", + "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-font-variant": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", + "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", + "dev": true, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-gap-properties": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz", + "integrity": "sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==", + "dev": true, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-image-set-function": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz", + "integrity": "sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-import": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", + "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-initial": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", + "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", + "dev": true, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-lab-function": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz", + "integrity": "sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==", + "dev": true, + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "dev": true, + "dependencies": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-loader": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", + "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", + "dev": true, + "dependencies": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.5", + "semver": "^7.3.5" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + } + }, + "node_modules/postcss-loader/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/postcss-loader/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/postcss-loader/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/postcss-logical": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", + "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", + "dev": true, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-media-minmax": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", + "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-merge-rules": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", + "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "dev": true, + "dependencies": { + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-params": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-nested": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz", + "integrity": "sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-nesting": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz", + "integrity": "sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==", + "dev": true, + "dependencies": { + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-normalize": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-10.0.1.tgz", + "integrity": "sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==", + "dev": true, + "dependencies": { + "@csstools/normalize.css": "*", + "postcss-browser-comments": "^4", + "sanitize.css": "*" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "browserslist": ">= 4", + "postcss": ">= 8" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-string": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "dev": true, + "dependencies": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-opacity-percentage": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.3.tgz", + "integrity": "sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A==", + "dev": true, + "funding": [ + { + "type": "kofi", + "url": "https://ko-fi.com/mrcgrtz" + }, + { + "type": "liberapay", + "url": "https://liberapay.com/mrcgrtz" + } + ], + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-ordered-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "dev": true, + "dependencies": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-overflow-shorthand": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz", + "integrity": "sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-page-break": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", + "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", + "dev": true, + "peerDependencies": { + "postcss": "^8" + } + }, + "node_modules/postcss-place": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.5.tgz", + "integrity": "sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-preset-env": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.8.3.tgz", + "integrity": "sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag==", + "dev": true, + "dependencies": { + "@csstools/postcss-cascade-layers": "^1.1.1", + "@csstools/postcss-color-function": "^1.1.1", + "@csstools/postcss-font-format-keywords": "^1.0.1", + "@csstools/postcss-hwb-function": "^1.0.2", + "@csstools/postcss-ic-unit": "^1.0.1", + "@csstools/postcss-is-pseudo-class": "^2.0.7", + "@csstools/postcss-nested-calc": "^1.0.0", + "@csstools/postcss-normalize-display-values": "^1.0.1", + "@csstools/postcss-oklab-function": "^1.1.1", + "@csstools/postcss-progressive-custom-properties": "^1.3.0", + "@csstools/postcss-stepped-value-functions": "^1.0.1", + "@csstools/postcss-text-decoration-shorthand": "^1.0.0", + "@csstools/postcss-trigonometric-functions": "^1.0.2", + "@csstools/postcss-unset-value": "^1.0.2", + "autoprefixer": "^10.4.13", + "browserslist": "^4.21.4", + "css-blank-pseudo": "^3.0.3", + "css-has-pseudo": "^3.0.4", + "css-prefers-color-scheme": "^6.0.3", + "cssdb": "^7.1.0", + "postcss-attribute-case-insensitive": "^5.0.2", + "postcss-clamp": "^4.1.0", + "postcss-color-functional-notation": "^4.2.4", + "postcss-color-hex-alpha": "^8.0.4", + "postcss-color-rebeccapurple": "^7.1.1", + "postcss-custom-media": "^8.0.2", + "postcss-custom-properties": "^12.1.10", + "postcss-custom-selectors": "^6.0.3", + "postcss-dir-pseudo-class": "^6.0.5", + "postcss-double-position-gradients": "^3.1.2", + "postcss-env-function": "^4.0.6", + "postcss-focus-visible": "^6.0.4", + "postcss-focus-within": "^5.0.4", + "postcss-font-variant": "^5.0.0", + "postcss-gap-properties": "^3.0.5", + "postcss-image-set-function": "^4.0.7", + "postcss-initial": "^4.0.1", + "postcss-lab-function": "^4.2.1", + "postcss-logical": "^5.0.4", + "postcss-media-minmax": "^5.0.0", + "postcss-nesting": "^10.2.0", + "postcss-opacity-percentage": "^1.1.2", + "postcss-overflow-shorthand": "^3.0.4", + "postcss-page-break": "^3.0.4", + "postcss-place": "^7.0.5", + "postcss-pseudo-class-any-link": "^7.1.6", + "postcss-replace-overflow-wrap": "^4.0.0", + "postcss-selector-not": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-pseudo-class-any-link": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz", + "integrity": "sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", + "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-replace-overflow-wrap": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", + "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", + "dev": true, + "peerDependencies": { + "postcss": "^8.0.3" + } + }, + "node_modules/postcss-selector-not": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz", + "integrity": "sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", + "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/postcss-svgo/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/postcss-svgo/node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "node_modules/postcss-svgo/node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dev": true, + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/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==", + "dev": true + }, + "node_modules/promise": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", + "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", + "dev": true, + "dependencies": { + "asap": "~2.0.6" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/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==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", + "dev": true, + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "dev": true, + "dependencies": { + "performance-now": "^2.1.0" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/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==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", + "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-app-polyfill": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-3.0.0.tgz", + "integrity": "sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==", + "dev": true, + "dependencies": { + "core-js": "^3.19.2", + "object-assign": "^4.1.1", + "promise": "^8.1.0", + "raf": "^3.4.1", + "regenerator-runtime": "^0.13.9", + "whatwg-fetch": "^3.6.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/react-chartjs-2": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/react-chartjs-2/-/react-chartjs-2-5.2.0.tgz", + "integrity": "sha512-98iN5aguJyVSxp5U3CblRLH67J8gkfyGNbiK3c+l1QI/G4irHMPQw44aEPmjVag+YKTyQ260NcF82GTQ3bdscA==", + "peerDependencies": { + "chart.js": "^4.1.1", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-collapsed": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/react-collapsed/-/react-collapsed-3.6.0.tgz", + "integrity": "sha512-QqtogOGl5hM9L7j7rlMCYxm4jD8Ovr8voqyYS1g5ltADhUNvxbbgtJ5MwRiajJ0DmYFOZHShpnSPz4wvJaOiKA==", + "dependencies": { + "tiny-warning": "^1.0.3" + }, + "peerDependencies": { + "react": "^16.8 || ^17", + "react-dom": "^16.8 || ^17" + } + }, + "node_modules/react-dev-utils": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", + "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.0", + "address": "^1.1.2", + "browserslist": "^4.18.1", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "detect-port-alt": "^1.1.6", + "escape-string-regexp": "^4.0.0", + "filesize": "^8.0.6", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^6.5.0", + "global-modules": "^2.0.0", + "globby": "^11.0.4", + "gzip-size": "^6.0.0", + "immer": "^9.0.7", + "is-root": "^2.1.0", + "loader-utils": "^3.2.0", + "open": "^8.4.0", + "pkg-up": "^3.1.0", + "prompts": "^2.4.2", + "react-error-overlay": "^6.0.11", + "recursive-readdir": "^2.2.2", + "shell-quote": "^1.7.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/react-dev-utils/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/loader-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", + "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", + "dev": true, + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/react-dev-utils/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dom": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", + "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.2" + }, + "peerDependencies": { + "react": "17.0.2" + } + }, + "node_modules/react-error-overlay": { + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", + "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==", + "dev": true + }, + "node_modules/react-final-form": { + "version": "6.5.9", + "resolved": "https://registry.npmjs.org/react-final-form/-/react-final-form-6.5.9.tgz", + "integrity": "sha512-x3XYvozolECp3nIjly+4QqxdjSSWfcnpGEL5K8OBT6xmGrq5kBqbA6+/tOqoom9NwqIPPbxPNsOViFlbKgowbA==", + "dependencies": { + "@babel/runtime": "^7.15.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/final-form" + }, + "peerDependencies": { + "final-form": "^4.20.4", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-google-login": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/react-google-login/-/react-google-login-5.2.2.tgz", + "integrity": "sha512-JUngfvaSMcOuV0lFff7+SzJ2qviuNMQdqlsDJkUM145xkGPVIfqWXq9Ui+2Dr6jdJWH5KYdynz9+4CzKjI5u6g==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dependencies": { + "@types/react": "*", + "prop-types": "^15.6.0" + }, + "peerDependencies": { + "react": "^16 || ^17", + "react-dom": "^16 || ^17" + } + }, + "node_modules/react-icons": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.8.0.tgz", + "integrity": "sha512-N6+kOLcihDiAnj5Czu637waJqSnwlMNROzVZMhfX68V/9bu9qHaMIJC4UdozWoOk57gahFCNHwVvWzm0MTzRjg==", + "peerDependencies": { + "react": "*" + } + }, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + }, + "node_modules/react-pro-sidebar": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/react-pro-sidebar/-/react-pro-sidebar-0.7.1.tgz", + "integrity": "sha512-Iy1X8ce4t5Vqz4CsyzjwokGUE3/IObgmYzS0ins7/2eWKle0SMUPaWdgMKFIVjtVrMr5vmjPbRicq8FxnVaf8A==", + "dependencies": { + "@popperjs/core": "^2.4.0", + "classnames": "^2.2.6", + "react-slidedown": "^2.4.5", + "resize-observer-polyfill": "^1.5.1" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/react-redux": { + "version": "7.2.9", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.9.tgz", + "integrity": "sha512-Gx4L3uM182jEEayZfRbI/G11ZpYdNAnBs70lFVMNdHJI76XYtR+7m0MN+eAs7UHBPhWXcnFPaS+9owSCJQHNpQ==", + "dependencies": { + "@babel/runtime": "^7.15.4", + "@types/react-redux": "^7.1.20", + "hoist-non-react-statics": "^3.3.2", + "loose-envify": "^1.4.0", + "prop-types": "^15.7.2", + "react-is": "^17.0.2" + }, + "peerDependencies": { + "react": "^16.8.3 || ^17 || ^18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } + }, + "node_modules/react-refresh": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", + "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-router": { + "version": "6.8.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.8.2.tgz", + "integrity": "sha512-lF7S0UmXI5Pd8bmHvMdPKI4u4S5McxmHnzJhrYi9ZQ6wE+DA8JN5BzVC5EEBuduWWDaiJ8u6YhVOCmThBli+rw==", + "dev": true, + "dependencies": { + "@remix-run/router": "1.3.3" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.8.2", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.8.2.tgz", + "integrity": "sha512-N/oAF1Shd7g4tWy+75IIufCGsHBqT74tnzHQhbiUTYILYF0Blk65cg+HPZqwC+6SqEyx033nKqU7by38v3lBZg==", + "dev": true, + "dependencies": { + "@remix-run/router": "1.3.3", + "react-router": "6.8.2" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, + "node_modules/react-scripts": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", + "integrity": "sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.16.0", + "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3", + "@svgr/webpack": "^5.5.0", + "babel-jest": "^27.4.2", + "babel-loader": "^8.2.3", + "babel-plugin-named-asset-import": "^0.3.8", + "babel-preset-react-app": "^10.0.1", + "bfj": "^7.0.2", + "browserslist": "^4.18.1", + "camelcase": "^6.2.1", + "case-sensitive-paths-webpack-plugin": "^2.4.0", + "css-loader": "^6.5.1", + "css-minimizer-webpack-plugin": "^3.2.0", + "dotenv": "^10.0.0", + "dotenv-expand": "^5.1.0", + "eslint": "^8.3.0", + "eslint-config-react-app": "^7.0.1", + "eslint-webpack-plugin": "^3.1.1", + "file-loader": "^6.2.0", + "fs-extra": "^10.0.0", + "html-webpack-plugin": "^5.5.0", + "identity-obj-proxy": "^3.0.0", + "jest": "^27.4.3", + "jest-resolve": "^27.4.2", + "jest-watch-typeahead": "^1.0.0", + "mini-css-extract-plugin": "^2.4.5", + "postcss": "^8.4.4", + "postcss-flexbugs-fixes": "^5.0.2", + "postcss-loader": "^6.2.1", + "postcss-normalize": "^10.0.1", + "postcss-preset-env": "^7.0.1", + "prompts": "^2.4.2", + "react-app-polyfill": "^3.0.0", + "react-dev-utils": "^12.0.1", + "react-refresh": "^0.11.0", + "resolve": "^1.20.0", + "resolve-url-loader": "^4.0.0", + "sass-loader": "^12.3.0", + "semver": "^7.3.5", + "source-map-loader": "^3.0.0", + "style-loader": "^3.3.1", + "tailwindcss": "^3.0.2", + "terser-webpack-plugin": "^5.2.5", + "webpack": "^5.64.4", + "webpack-dev-server": "^4.6.0", + "webpack-manifest-plugin": "^4.0.2", + "workbox-webpack-plugin": "^6.4.1" + }, + "bin": { + "react-scripts": "bin/react-scripts.js" + }, + "engines": { + "node": ">=14.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + }, + "peerDependencies": { + "react": ">= 16", + "typescript": "^3.2.1 || ^4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/react-scripts/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-scripts/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/react-scripts/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/react-scripts/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/react-select": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.7.2.tgz", + "integrity": "sha512-cTlJkQ8YjV6T/js8wW0owTzht0hHGABh29vjLscY4HfZGkv7hc3FFTmRp9NzY/Ib1uQ36GieAKEjxpHdpCFpcA==", + "dependencies": { + "@babel/runtime": "^7.12.0", + "@emotion/cache": "^11.4.0", + "@emotion/react": "^11.8.1", + "@floating-ui/dom": "^1.0.1", + "@types/react-transition-group": "^4.4.0", + "memoize-one": "^6.0.0", + "prop-types": "^15.6.0", + "react-transition-group": "^4.3.0", + "use-isomorphic-layout-effect": "^1.1.2" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-slidedown": { + "version": "2.4.7", + "resolved": "https://registry.npmjs.org/react-slidedown/-/react-slidedown-2.4.7.tgz", + "integrity": "sha512-HGDfrqo70r1WVE0DwrySPdCT27/2wcZaJYh5kOnmuPSCtjDDJrNkDdn4Ep/cma2VVfwupeAGhbc2pbrGThU6VQ==", + "dependencies": { + "tslib": "^2.0.0" + }, + "peerDependencies": { + "react": "^16.3.0 || 17", + "react-dom": "^16.3.0 || 17" + } + }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, + "node_modules/react-uuid": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/react-uuid/-/react-uuid-1.0.3.tgz", + "integrity": "sha512-cw6Rr6JphvsdK4xHPGBjKD7XSH6Y6i4NJFWUO3OiDd7NLcR8xVeQ3CfeKm7h+S5tpZZVfbH3Tkrz/ydsIiV8pA==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info." + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.1.tgz", + "integrity": "sha512-+rQmrWMYGA90yenhTYsLWAsLsqVC8osOw6PKE1HDYiO0gdPeKe/xDHNzIAIn4C91YQ6oenEhfYqqc1883qHbjQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/recursive-readdir": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", + "dev": true, + "dependencies": { + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/redux": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", + "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", + "dependencies": { + "@babel/runtime": "^7.9.2" + } + }, + "node_modules/redux-thunk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.2.tgz", + "integrity": "sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q==", + "peerDependencies": { + "redux": "^4" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, + "node_modules/regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-parser": { + "version": "2.2.11", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", + "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", + "dev": true + }, + "node_modules/regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/regexpu-core": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.1.tgz", + "integrity": "sha512-nCOzW2V/X15XpLsK2rlgdwrysrBq+AauCn+omItIz4R1pIcmeot5zvjdmOBRLzEH/CkC6IxMJVmxDe3QcMuNVQ==", + "dev": true, + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "dev": true, + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "node_modules/reselect": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.7.tgz", + "integrity": "sha512-Zu1xbUt3/OPwsXL46hvOOoQrap2azE7ZQbokq61BQfiXvhewsKDwhMeZjTX9sX0nvw1t/U5Audyn1I9P/m9z0A==" + }, + "node_modules/resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-url-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz", + "integrity": "sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==", + "dev": true, + "dependencies": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^7.0.35", + "source-map": "0.6.1" + }, + "engines": { + "node": ">=8.9" + }, + "peerDependencies": { + "rework": "1.0.1", + "rework-visit": "1.0.0" + }, + "peerDependenciesMeta": { + "rework": { + "optional": true + }, + "rework-visit": { + "optional": true + } + } + }, + "node_modules/resolve-url-loader/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/resolve-url-loader/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/resolve.exports": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.1.tgz", + "integrity": "sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/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==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sanitize.css": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/sanitize.css/-/sanitize.css-13.0.0.tgz", + "integrity": "sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==", + "dev": true + }, + "node_modules/sass-loader": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz", + "integrity": "sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==", + "dev": true, + "dependencies": { + "klona": "^2.0.4", + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + } + } + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dev": true, + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/scheduler": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true + }, + "node_modules/selfsigned": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", + "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", + "dev": true, + "dependencies": { + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/send/node_modules/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 + }, + "node_modules/serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.0.tgz", + "integrity": "sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-loader": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.2.tgz", + "integrity": "sha512-BokxPoLjyl3iOrgkWaakaxqnelAJSS+0V+De0kKIq6lyWrXuiPgYTGp6z3iHmqljKAaLXwZa+ctD8GccRJeVvg==", + "dev": true, + "dependencies": { + "abab": "^2.0.5", + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead", + "dev": true + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", + "dev": true + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", + "dev": true + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/stop-iteration-iterator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", + "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "dev": true, + "dependencies": { + "internal-slot": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-natural-compare": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", + "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==", + "dev": true + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/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 + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", + "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dev": true, + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", + "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/style-loader": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz", + "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==", + "dev": true, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/stylehacks": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/stylis": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.3.tgz", + "integrity": "sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==" + }, + "node_modules/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, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", + "dev": true + }, + "node_modules/svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.", + "dev": true, + "dependencies": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/svgo/node_modules/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==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/svgo/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/svgo/node_modules/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==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/svgo/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/svgo/node_modules/css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "node_modules/svgo/node_modules/css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/svgo/node_modules/dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/svgo/node_modules/domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/svgo/node_modules/domutils/node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "node_modules/svgo/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/svgo/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/svgo/node_modules/nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dev": true, + "dependencies": { + "boolbase": "~1.0.0" + } + }, + "node_modules/svgo/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "node_modules/tailwindcss": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.2.7.tgz", + "integrity": "sha512-B6DLqJzc21x7wntlH/GsZwEXTBttVSl1FtCzC8WP4oBc/NKef7kaax5jeihkkCEWc831/5NDJ9gRNDK6NEioQQ==", + "dev": true, + "dependencies": { + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "color-name": "^1.1.4", + "detective": "^5.2.1", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.12", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "lilconfig": "^2.0.6", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.0.9", + "postcss-import": "^14.1.0", + "postcss-js": "^4.0.0", + "postcss-load-config": "^3.1.4", + "postcss-nested": "6.0.0", + "postcss-selector-parser": "^6.0.11", + "postcss-value-parser": "^4.2.0", + "quick-lru": "^5.1.1", + "resolve": "^1.22.1" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/tempy": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", + "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", + "dev": true, + "dependencies": { + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tempy/node_modules/type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "5.16.5", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.5.tgz", + "integrity": "sha512-qcwfg4+RZa3YvlFh0qjifnzBHjKGNbtDo9yivMqMFDy9Q6FSaQWSB/j1xKhsoUFJIqDOM3TsN6D5xbrMrFcHbg==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", + "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.14", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.14.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/throat": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz", + "integrity": "sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==", + "dev": true + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "node_modules/timers": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/timers/-/timers-0.1.1.tgz", + "integrity": "sha512-pkJC8uIP/gxDHxNQUBUbjHyl6oZfT+ofn7tbaHW+CFIUjI+Q2MBbHcx1JSBQfhDaTcO9bNg328q0i7Vk5PismQ==" + }, + "node_modules/tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "engines": { + "node": ">=4" + } + }, + "node_modules/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, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", + "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==", + "dev": true, + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dev": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tryer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", + "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", + "dev": true + }, + "node_modules/tsconfig-paths": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", + "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true, + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/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, + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==", + "dev": true + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/use-isomorphic-layout-effect": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", + "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", + "dev": true + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-to-istanbul": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", + "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", + "dev": true, + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "dev": true, + "dependencies": { + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true, + "engines": { + "node": ">=10.4" + } + }, + "node_modules/webpack": { + "version": "5.75.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", + "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", + "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-middleware/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/webpack-dev-middleware/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack-dev-server": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz", + "integrity": "sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==", + "dev": true, + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.1", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.4.2" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack-dev-server/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack-dev-server/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.12.1.tgz", + "integrity": "sha512-1qo+M9Ba+xNhPB+YTWUlK6M17brTut5EXbcBaMRN5pH5dFrXz7lzz1ChFSUq3bOUl8yEvSenhHmYUNJxFzdJew==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/webpack-manifest-plugin": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-4.1.1.tgz", + "integrity": "sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==", + "dev": true, + "dependencies": { + "tapable": "^2.0.0", + "webpack-sources": "^2.2.0" + }, + "engines": { + "node": ">=12.22.0" + }, + "peerDependencies": { + "webpack": "^4.44.2 || ^5.47.0" + } + }, + "node_modules/webpack-manifest-plugin/node_modules/webpack-sources": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.1.tgz", + "integrity": "sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==", + "dev": true, + "dependencies": { + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/webpack/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/whatwg-fetch": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", + "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==", + "dev": true + }, + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dev": true, + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, + "dependencies": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/workbox-background-sync": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.5.4.tgz", + "integrity": "sha512-0r4INQZMyPky/lj4Ou98qxcThrETucOde+7mRGJl13MPJugQNKeZQOdIJe/1AchOP23cTqHcN/YVpD6r8E6I8g==", + "dev": true, + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "6.5.4" + } + }, + "node_modules/workbox-broadcast-update": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.5.4.tgz", + "integrity": "sha512-I/lBERoH1u3zyBosnpPEtcAVe5lwykx9Yg1k6f8/BGEPGaMMgZrwVrqL1uA9QZ1NGGFoyE6t9i7lBjOlDhFEEw==", + "dev": true, + "dependencies": { + "workbox-core": "6.5.4" + } + }, + "node_modules/workbox-build": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.5.4.tgz", + "integrity": "sha512-kgRevLXEYvUW9WS4XoziYqZ8Q9j/2ziJYEtTrjdz5/L/cTUa2XfyMP2i7c3p34lgqJ03+mTiz13SdFef2POwbA==", + "dev": true, + "dependencies": { + "@apideck/better-ajv-errors": "^0.3.1", + "@babel/core": "^7.11.1", + "@babel/preset-env": "^7.11.0", + "@babel/runtime": "^7.11.2", + "@rollup/plugin-babel": "^5.2.0", + "@rollup/plugin-node-resolve": "^11.2.1", + "@rollup/plugin-replace": "^2.4.1", + "@surma/rollup-plugin-off-main-thread": "^2.2.3", + "ajv": "^8.6.0", + "common-tags": "^1.8.0", + "fast-json-stable-stringify": "^2.1.0", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "lodash": "^4.17.20", + "pretty-bytes": "^5.3.0", + "rollup": "^2.43.1", + "rollup-plugin-terser": "^7.0.0", + "source-map": "^0.8.0-beta.0", + "stringify-object": "^3.3.0", + "strip-comments": "^2.0.1", + "tempy": "^0.6.0", + "upath": "^1.2.0", + "workbox-background-sync": "6.5.4", + "workbox-broadcast-update": "6.5.4", + "workbox-cacheable-response": "6.5.4", + "workbox-core": "6.5.4", + "workbox-expiration": "6.5.4", + "workbox-google-analytics": "6.5.4", + "workbox-navigation-preload": "6.5.4", + "workbox-precaching": "6.5.4", + "workbox-range-requests": "6.5.4", + "workbox-recipes": "6.5.4", + "workbox-routing": "6.5.4", + "workbox-strategies": "6.5.4", + "workbox-streams": "6.5.4", + "workbox-sw": "6.5.4", + "workbox-window": "6.5.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/workbox-build/node_modules/@apideck/better-ajv-errors": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.3.tgz", + "integrity": "sha512-9o+HO2MbJhJHjDYZaDxJmSDckvDpiuItEsrIShV0DXeCshXWRHhqYyU/PKHMkuClOmFnZhRd6wzv4vpDu/dRKg==", + "dev": true, + "dependencies": { + "json-schema": "^0.4.0", + "jsonpointer": "^5.0.0", + "leven": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "ajv": ">=8" + } + }, + "node_modules/workbox-build/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/workbox-build/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/workbox-build/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/workbox-build/node_modules/source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "dev": true, + "dependencies": { + "whatwg-url": "^7.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/workbox-build/node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/workbox-build/node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "node_modules/workbox-build/node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/workbox-cacheable-response": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.5.4.tgz", + "integrity": "sha512-DCR9uD0Fqj8oB2TSWQEm1hbFs/85hXXoayVwFKLVuIuxwJaihBsLsp4y7J9bvZbqtPJ1KlCkmYVGQKrBU4KAug==", + "dev": true, + "dependencies": { + "workbox-core": "6.5.4" + } + }, + "node_modules/workbox-core": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.5.4.tgz", + "integrity": "sha512-OXYb+m9wZm8GrORlV2vBbE5EC1FKu71GGp0H4rjmxmF4/HLbMCoTFws87M3dFwgpmg0v00K++PImpNQ6J5NQ6Q==", + "dev": true + }, + "node_modules/workbox-expiration": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.5.4.tgz", + "integrity": "sha512-jUP5qPOpH1nXtjGGh1fRBa1wJL2QlIb5mGpct3NzepjGG2uFFBn4iiEBiI9GUmfAFR2ApuRhDydjcRmYXddiEQ==", + "dev": true, + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "6.5.4" + } + }, + "node_modules/workbox-google-analytics": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.5.4.tgz", + "integrity": "sha512-8AU1WuaXsD49249Wq0B2zn4a/vvFfHkpcFfqAFHNHwln3jK9QUYmzdkKXGIZl9wyKNP+RRX30vcgcyWMcZ9VAg==", + "dev": true, + "dependencies": { + "workbox-background-sync": "6.5.4", + "workbox-core": "6.5.4", + "workbox-routing": "6.5.4", + "workbox-strategies": "6.5.4" + } + }, + "node_modules/workbox-navigation-preload": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.5.4.tgz", + "integrity": "sha512-IIwf80eO3cr8h6XSQJF+Hxj26rg2RPFVUmJLUlM0+A2GzB4HFbQyKkrgD5y2d84g2IbJzP4B4j5dPBRzamHrng==", + "dev": true, + "dependencies": { + "workbox-core": "6.5.4" + } + }, + "node_modules/workbox-precaching": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.5.4.tgz", + "integrity": "sha512-hSMezMsW6btKnxHB4bFy2Qfwey/8SYdGWvVIKFaUm8vJ4E53JAY+U2JwLTRD8wbLWoP6OVUdFlXsTdKu9yoLTg==", + "dev": true, + "dependencies": { + "workbox-core": "6.5.4", + "workbox-routing": "6.5.4", + "workbox-strategies": "6.5.4" + } + }, + "node_modules/workbox-range-requests": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.5.4.tgz", + "integrity": "sha512-Je2qR1NXCFC8xVJ/Lux6saH6IrQGhMpDrPXWZWWS8n/RD+WZfKa6dSZwU+/QksfEadJEr/NfY+aP/CXFFK5JFg==", + "dev": true, + "dependencies": { + "workbox-core": "6.5.4" + } + }, + "node_modules/workbox-recipes": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.5.4.tgz", + "integrity": "sha512-QZNO8Ez708NNwzLNEXTG4QYSKQ1ochzEtRLGaq+mr2PyoEIC1xFW7MrWxrONUxBFOByksds9Z4//lKAX8tHyUA==", + "dev": true, + "dependencies": { + "workbox-cacheable-response": "6.5.4", + "workbox-core": "6.5.4", + "workbox-expiration": "6.5.4", + "workbox-precaching": "6.5.4", + "workbox-routing": "6.5.4", + "workbox-strategies": "6.5.4" + } + }, + "node_modules/workbox-routing": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.5.4.tgz", + "integrity": "sha512-apQswLsbrrOsBUWtr9Lf80F+P1sHnQdYodRo32SjiByYi36IDyL2r7BH1lJtFX8fwNHDa1QOVY74WKLLS6o5Pg==", + "dev": true, + "dependencies": { + "workbox-core": "6.5.4" + } + }, + "node_modules/workbox-strategies": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.5.4.tgz", + "integrity": "sha512-DEtsxhx0LIYWkJBTQolRxG4EI0setTJkqR4m7r4YpBdxtWJH1Mbg01Cj8ZjNOO8etqfA3IZaOPHUxCs8cBsKLw==", + "dev": true, + "dependencies": { + "workbox-core": "6.5.4" + } + }, + "node_modules/workbox-streams": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.5.4.tgz", + "integrity": "sha512-FXKVh87d2RFXkliAIheBojBELIPnWbQdyDvsH3t74Cwhg0fDheL1T8BqSM86hZvC0ZESLsznSYWw+Va+KVbUzg==", + "dev": true, + "dependencies": { + "workbox-core": "6.5.4", + "workbox-routing": "6.5.4" + } + }, + "node_modules/workbox-sw": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.5.4.tgz", + "integrity": "sha512-vo2RQo7DILVRoH5LjGqw3nphavEjK4Qk+FenXeUsknKn14eCNedHOXWbmnvP4ipKhlE35pvJ4yl4YYf6YsJArA==", + "dev": true + }, + "node_modules/workbox-webpack-plugin": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-6.5.4.tgz", + "integrity": "sha512-LmWm/zoaahe0EGmMTrSLUi+BjyR3cdGEfU3fS6PN1zKFYbqAKuQ+Oy/27e4VSXsyIwAw8+QDfk1XHNGtZu9nQg==", + "dev": true, + "dependencies": { + "fast-json-stable-stringify": "^2.1.0", + "pretty-bytes": "^5.4.1", + "upath": "^1.2.0", + "webpack-sources": "^1.4.3", + "workbox-build": "6.5.4" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "webpack": "^4.4.0 || ^5.9.0" + } + }, + "node_modules/workbox-webpack-plugin/node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "node_modules/workbox-window": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.5.4.tgz", + "integrity": "sha512-HnLZJDwYBE+hpG25AQBO8RUWBJRaCsI9ksQJEp3aCOFCaG5kqaToAYXFRAHxzRluM2cQbGzdQF5rjKPWPA1fug==", + "dev": true, + "dependencies": { + "@types/trusted-types": "^2.0.2", + "workbox-core": "6.5.4" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/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, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/frontend/src/main/frontend/package.json b/frontend/src/main/frontend/package.json old mode 100644 new mode 100755 index 39b1407c9..4489521df --- a/frontend/src/main/frontend/package.json +++ b/frontend/src/main/frontend/package.json @@ -5,17 +5,22 @@ "dependencies": { "@react-oauth/google": "^0.6.1", "@reduxjs/toolkit": "^1.8.0", + "blob-util": "^2.0.2", + "chart.js": "^4.2.1", "final-form": "^4.20.6", "jwt-decode": "^3.1.2", "react": "^17.0.2", + "react-chartjs-2": "^5.2.0", + "react-collapsed": "^3.6.0", "react-dom": "^17.0.2", "react-final-form": "^6.5.8", "react-google-login": "^5.2.2", "react-icons": "^4.3.1", "react-pro-sidebar": "^0.7.1", "react-redux": "^7.2.6", - "react-scripts": "5.0.0", - "react-uuid": "^1.0.3" + "react-select": "^5.7.2", + "react-uuid": "^1.0.3", + "timers": "^0.1.1" }, "scripts": { "start": "react-scripts start", @@ -43,6 +48,8 @@ }, "devDependencies": { "axios": "^0.26.0", - "react-router-dom": "^6.2.1" + "jest": "^27.5.1", + "react-router-dom": "^6.2.1", + "react-scripts": "^5.0.1" } } diff --git a/frontend/src/main/frontend/public/index.html b/frontend/src/main/frontend/public/index.html old mode 100644 new mode 100755 index cc4ecd2ec..c524b8ddd --- a/frontend/src/main/frontend/public/index.html +++ b/frontend/src/main/frontend/public/index.html @@ -1,17 +1,19 @@ - - - - - - - - - - - CPR Tool + + + + + + + + + + + + CPR Tool diff --git a/frontend/src/main/frontend/public/manifest.json b/frontend/src/main/frontend/public/manifest.json old mode 100644 new mode 100755 diff --git a/frontend/src/main/frontend/public/robots.txt b/frontend/src/main/frontend/public/robots.txt old mode 100644 new mode 100755 diff --git a/frontend/src/main/frontend/src/App.css b/frontend/src/main/frontend/src/App.css old mode 100644 new mode 100755 diff --git a/frontend/src/main/frontend/src/App.js b/frontend/src/main/frontend/src/App.js old mode 100644 new mode 100755 index 2eccb4ee9..d77a1f806 --- a/frontend/src/main/frontend/src/App.js +++ b/frontend/src/main/frontend/src/App.js @@ -7,6 +7,8 @@ import { setUserInformation, } from './redux/features/authSlice'; import StudentDashboardPage from './pages/StudentPages/StudentDashboardPage'; +import HeaderBar from "./components/HeaderBar/HeaderBar"; +import NavigationContainerComponent from "./components/NavigationComponents/NavigationContainerComponent"; function App() { const dispatch = useDispatch(); diff --git a/frontend/src/main/frontend/src/assets/404-no-bg.png b/frontend/src/main/frontend/src/assets/404-no-bg.png old mode 100644 new mode 100755 diff --git a/frontend/src/main/frontend/src/assets/icons/Admin_Header.svg b/frontend/src/main/frontend/src/assets/icons/Admin_Header.svg new file mode 100644 index 000000000..7c562d323 --- /dev/null +++ b/frontend/src/main/frontend/src/assets/icons/Admin_Header.svg @@ -0,0 +1,4 @@ + + + + diff --git a/frontend/src/main/frontend/src/assets/icons/Corner_X.svg b/frontend/src/main/frontend/src/assets/icons/Corner_X.svg new file mode 100644 index 000000000..1c299246f --- /dev/null +++ b/frontend/src/main/frontend/src/assets/icons/Corner_X.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/src/main/frontend/src/assets/icons/Green_Check.svg b/frontend/src/main/frontend/src/assets/icons/Green_Check.svg new file mode 100644 index 000000000..16cb21677 --- /dev/null +++ b/frontend/src/main/frontend/src/assets/icons/Green_Check.svg @@ -0,0 +1,4 @@ + + + + diff --git a/frontend/src/main/frontend/src/assets/icons/Logout.svg b/frontend/src/main/frontend/src/assets/icons/Logout.svg new file mode 100644 index 000000000..59951d2e6 --- /dev/null +++ b/frontend/src/main/frontend/src/assets/icons/Logout.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/src/main/frontend/src/assets/icons/White_Download.svg b/frontend/src/main/frontend/src/assets/icons/White_Download.svg new file mode 100644 index 000000000..3e26baa51 --- /dev/null +++ b/frontend/src/main/frontend/src/assets/icons/White_Download.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/frontend/src/main/frontend/src/assets/icons/aboutPage/CPR logo final-01.png b/frontend/src/main/frontend/src/assets/icons/aboutPage/CPR logo final-01.png new file mode 100644 index 000000000..9158d71a5 Binary files /dev/null and b/frontend/src/main/frontend/src/assets/icons/aboutPage/CPR logo final-01.png differ diff --git a/frontend/src/main/frontend/src/assets/icons/aboutPage/Copy of CPR logo final-01.svg b/frontend/src/main/frontend/src/assets/icons/aboutPage/Copy of CPR logo final-01.svg new file mode 100644 index 000000000..3d43aeae9 --- /dev/null +++ b/frontend/src/main/frontend/src/assets/icons/aboutPage/Copy of CPR logo final-01.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + diff --git a/frontend/src/main/frontend/src/assets/icons/aboutPage/DB.svg b/frontend/src/main/frontend/src/assets/icons/aboutPage/DB.svg new file mode 100644 index 000000000..8431bc51a --- /dev/null +++ b/frontend/src/main/frontend/src/assets/icons/aboutPage/DB.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/src/main/frontend/src/assets/icons/aboutPage/Engine.svg b/frontend/src/main/frontend/src/assets/icons/aboutPage/Engine.svg new file mode 100644 index 000000000..ba5abdd12 --- /dev/null +++ b/frontend/src/main/frontend/src/assets/icons/aboutPage/Engine.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/src/main/frontend/src/assets/icons/aboutPage/Gui.svg b/frontend/src/main/frontend/src/assets/icons/aboutPage/Gui.svg new file mode 100644 index 000000000..fb9932180 --- /dev/null +++ b/frontend/src/main/frontend/src/assets/icons/aboutPage/Gui.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/src/main/frontend/src/assets/icons/aboutPage/IBM.svg b/frontend/src/main/frontend/src/assets/icons/aboutPage/IBM.svg new file mode 100644 index 000000000..7c461c96f --- /dev/null +++ b/frontend/src/main/frontend/src/assets/icons/aboutPage/IBM.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/frontend/src/main/frontend/src/assets/icons/aboutPage/QA.svg b/frontend/src/main/frontend/src/assets/icons/aboutPage/QA.svg new file mode 100644 index 000000000..c3af0fd22 --- /dev/null +++ b/frontend/src/main/frontend/src/assets/icons/aboutPage/QA.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/frontend/src/main/frontend/src/assets/icons/aboutPage/Req.svg b/frontend/src/main/frontend/src/assets/icons/aboutPage/Req.svg new file mode 100644 index 000000000..d5364e916 --- /dev/null +++ b/frontend/src/main/frontend/src/assets/icons/aboutPage/Req.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/src/main/frontend/src/assets/icons/aboutPage/SUNY_Oswego_seal.svg.png b/frontend/src/main/frontend/src/assets/icons/aboutPage/SUNY_Oswego_seal.svg.png new file mode 100644 index 000000000..6717e18b7 Binary files /dev/null and b/frontend/src/main/frontend/src/assets/icons/aboutPage/SUNY_Oswego_seal.svg.png differ diff --git a/frontend/src/main/frontend/src/assets/icons/aboutPage/Stakeholder.svg b/frontend/src/main/frontend/src/assets/icons/aboutPage/Stakeholder.svg new file mode 100644 index 000000000..af4ac4764 --- /dev/null +++ b/frontend/src/main/frontend/src/assets/icons/aboutPage/Stakeholder.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/src/main/frontend/src/assets/icons/aboutPage/Usability.svg b/frontend/src/main/frontend/src/assets/icons/aboutPage/Usability.svg new file mode 100644 index 000000000..98b62bc5d --- /dev/null +++ b/frontend/src/main/frontend/src/assets/icons/aboutPage/Usability.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/frontend/src/main/frontend/src/assets/icons/aboutPage/White I Icon.svg b/frontend/src/main/frontend/src/assets/icons/aboutPage/White I Icon.svg new file mode 100644 index 000000000..422d09383 --- /dev/null +++ b/frontend/src/main/frontend/src/assets/icons/aboutPage/White I Icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/frontend/src/main/frontend/src/assets/icons/aboutPage/docker.png b/frontend/src/main/frontend/src/assets/icons/aboutPage/docker.png new file mode 100644 index 000000000..88bd2d7db Binary files /dev/null and b/frontend/src/main/frontend/src/assets/icons/aboutPage/docker.png differ diff --git a/frontend/src/main/frontend/src/assets/icons/aboutPage/html-css.png b/frontend/src/main/frontend/src/assets/icons/aboutPage/html-css.png new file mode 100644 index 000000000..cab123123 Binary files /dev/null and b/frontend/src/main/frontend/src/assets/icons/aboutPage/html-css.png differ diff --git a/frontend/src/main/frontend/src/assets/icons/aboutPage/ibm 1.png b/frontend/src/main/frontend/src/assets/icons/aboutPage/ibm 1.png new file mode 100644 index 000000000..d209505e8 Binary files /dev/null and b/frontend/src/main/frontend/src/assets/icons/aboutPage/ibm 1.png differ diff --git a/frontend/src/main/frontend/src/assets/icons/aboutPage/java.png b/frontend/src/main/frontend/src/assets/icons/aboutPage/java.png new file mode 100644 index 000000000..1bbf49660 Binary files /dev/null and b/frontend/src/main/frontend/src/assets/icons/aboutPage/java.png differ diff --git a/frontend/src/main/frontend/src/assets/icons/aboutPage/maven.png b/frontend/src/main/frontend/src/assets/icons/aboutPage/maven.png new file mode 100644 index 000000000..af4aee621 Binary files /dev/null and b/frontend/src/main/frontend/src/assets/icons/aboutPage/maven.png differ diff --git a/frontend/src/main/frontend/src/assets/icons/aboutPage/microprofile.png b/frontend/src/main/frontend/src/assets/icons/aboutPage/microprofile.png new file mode 100644 index 000000000..72b3645aa Binary files /dev/null and b/frontend/src/main/frontend/src/assets/icons/aboutPage/microprofile.png differ diff --git a/frontend/src/main/frontend/src/assets/icons/aboutPage/mongo-db.png b/frontend/src/main/frontend/src/assets/icons/aboutPage/mongo-db.png new file mode 100644 index 000000000..fb482da01 Binary files /dev/null and b/frontend/src/main/frontend/src/assets/icons/aboutPage/mongo-db.png differ diff --git a/frontend/src/main/frontend/src/assets/icons/aboutPage/open-liberty.png b/frontend/src/main/frontend/src/assets/icons/aboutPage/open-liberty.png new file mode 100644 index 000000000..0178ae11e Binary files /dev/null and b/frontend/src/main/frontend/src/assets/icons/aboutPage/open-liberty.png differ diff --git a/frontend/src/main/frontend/src/assets/icons/aboutPage/product-owners.svg b/frontend/src/main/frontend/src/assets/icons/aboutPage/product-owners.svg new file mode 100644 index 000000000..0228558b7 --- /dev/null +++ b/frontend/src/main/frontend/src/assets/icons/aboutPage/product-owners.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/src/main/frontend/src/assets/icons/aboutPage/project-lead.svg b/frontend/src/main/frontend/src/assets/icons/aboutPage/project-lead.svg new file mode 100644 index 000000000..e07ad37f4 --- /dev/null +++ b/frontend/src/main/frontend/src/assets/icons/aboutPage/project-lead.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/src/main/frontend/src/assets/icons/aboutPage/react.png b/frontend/src/main/frontend/src/assets/icons/aboutPage/react.png new file mode 100644 index 000000000..b5702ea9a Binary files /dev/null and b/frontend/src/main/frontend/src/assets/icons/aboutPage/react.png differ diff --git a/frontend/src/main/frontend/src/assets/icons/aboutPage/selenium.png b/frontend/src/main/frontend/src/assets/icons/aboutPage/selenium.png new file mode 100644 index 000000000..17e3f1ee6 Binary files /dev/null and b/frontend/src/main/frontend/src/assets/icons/aboutPage/selenium.png differ diff --git a/frontend/src/main/frontend/src/assets/icons/logo/CPR logo final-01.svg b/frontend/src/main/frontend/src/assets/icons/logo/CPR logo final-01.svg new file mode 100644 index 000000000..3d43aeae9 --- /dev/null +++ b/frontend/src/main/frontend/src/assets/icons/logo/CPR logo final-01.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + diff --git a/frontend/src/main/frontend/src/assets/icons/logo/CPR logo final-02.svg b/frontend/src/main/frontend/src/assets/icons/logo/CPR logo final-02.svg new file mode 100644 index 000000000..d3266d45c --- /dev/null +++ b/frontend/src/main/frontend/src/assets/icons/logo/CPR logo final-02.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + diff --git a/frontend/src/main/frontend/src/assets/icons/logo/CPR logo final-03.svg b/frontend/src/main/frontend/src/assets/icons/logo/CPR logo final-03.svg new file mode 100644 index 000000000..e9298f27a --- /dev/null +++ b/frontend/src/main/frontend/src/assets/icons/logo/CPR logo final-03.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + diff --git a/frontend/src/main/frontend/src/assets/icons/navigation/active/Admin.svg b/frontend/src/main/frontend/src/assets/icons/navigation/active/Admin.svg new file mode 100644 index 000000000..a3b20a27a --- /dev/null +++ b/frontend/src/main/frontend/src/assets/icons/navigation/active/Admin.svg @@ -0,0 +1,4 @@ + + + + diff --git a/frontend/src/main/frontend/src/assets/icons/navigation/active/Arrow_Active.svg b/frontend/src/main/frontend/src/assets/icons/navigation/active/Arrow_Active.svg new file mode 100644 index 000000000..d7efd5cbf --- /dev/null +++ b/frontend/src/main/frontend/src/assets/icons/navigation/active/Arrow_Active.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/src/main/frontend/src/assets/icons/navigation/active/Bulk Download.svg b/frontend/src/main/frontend/src/assets/icons/navigation/active/Bulk Download.svg new file mode 100644 index 000000000..8c4a61ca6 --- /dev/null +++ b/frontend/src/main/frontend/src/assets/icons/navigation/active/Bulk Download.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/frontend/src/main/frontend/src/assets/icons/navigation/active/Courses.svg b/frontend/src/main/frontend/src/assets/icons/navigation/active/Courses.svg new file mode 100644 index 000000000..571cb3486 --- /dev/null +++ b/frontend/src/main/frontend/src/assets/icons/navigation/active/Courses.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/frontend/src/main/frontend/src/assets/icons/navigation/active/Home.svg b/frontend/src/main/frontend/src/assets/icons/navigation/active/Home.svg new file mode 100644 index 000000000..72cd2e524 --- /dev/null +++ b/frontend/src/main/frontend/src/assets/icons/navigation/active/Home.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/src/main/frontend/src/assets/icons/navigation/default/Admin.svg b/frontend/src/main/frontend/src/assets/icons/navigation/default/Admin.svg new file mode 100644 index 000000000..4d9f5b500 --- /dev/null +++ b/frontend/src/main/frontend/src/assets/icons/navigation/default/Admin.svg @@ -0,0 +1,4 @@ + + + + diff --git a/frontend/src/main/frontend/src/assets/icons/navigation/default/Arrow_Default.svg b/frontend/src/main/frontend/src/assets/icons/navigation/default/Arrow_Default.svg new file mode 100644 index 000000000..495e7dbf7 --- /dev/null +++ b/frontend/src/main/frontend/src/assets/icons/navigation/default/Arrow_Default.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/src/main/frontend/src/assets/icons/navigation/default/Bulk Download.svg b/frontend/src/main/frontend/src/assets/icons/navigation/default/Bulk Download.svg new file mode 100644 index 000000000..9017f78e9 --- /dev/null +++ b/frontend/src/main/frontend/src/assets/icons/navigation/default/Bulk Download.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/frontend/src/main/frontend/src/assets/icons/navigation/default/Courses.svg b/frontend/src/main/frontend/src/assets/icons/navigation/default/Courses.svg new file mode 100644 index 000000000..871625c76 --- /dev/null +++ b/frontend/src/main/frontend/src/assets/icons/navigation/default/Courses.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/frontend/src/main/frontend/src/assets/icons/navigation/default/Home.svg b/frontend/src/main/frontend/src/assets/icons/navigation/default/Home.svg new file mode 100644 index 000000000..a31759802 --- /dev/null +++ b/frontend/src/main/frontend/src/assets/icons/navigation/default/Home.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/src/main/frontend/src/assets/icons/navigation/default/Minus_Default.svg b/frontend/src/main/frontend/src/assets/icons/navigation/default/Minus_Default.svg new file mode 100644 index 000000000..f35b935a0 --- /dev/null +++ b/frontend/src/main/frontend/src/assets/icons/navigation/default/Minus_Default.svg @@ -0,0 +1,4 @@ + + + + diff --git a/frontend/src/main/frontend/src/assets/icons/navigation/default/Plus_Default.svg b/frontend/src/main/frontend/src/assets/icons/navigation/default/Plus_Default.svg new file mode 100644 index 000000000..edbd8b530 --- /dev/null +++ b/frontend/src/main/frontend/src/assets/icons/navigation/default/Plus_Default.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/src/main/frontend/src/assets/icons/navigation/default/white_bulk_download.svg b/frontend/src/main/frontend/src/assets/icons/navigation/default/white_bulk_download.svg new file mode 100644 index 000000000..18dc0d6e5 --- /dev/null +++ b/frontend/src/main/frontend/src/assets/icons/navigation/default/white_bulk_download.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/frontend/src/main/frontend/src/assets/loading.gif b/frontend/src/main/frontend/src/assets/loading.gif new file mode 100755 index 000000000..4301102d3 Binary files /dev/null and b/frontend/src/main/frontend/src/assets/loading.gif differ diff --git a/frontend/src/main/frontend/src/assets/no-course.png b/frontend/src/main/frontend/src/assets/no-course.png old mode 100644 new mode 100755 diff --git a/frontend/src/main/frontend/src/assets/no-data.png b/frontend/src/main/frontend/src/assets/no-data.png old mode 100644 new mode 100755 diff --git a/frontend/src/main/frontend/src/assets/no-student.png b/frontend/src/main/frontend/src/assets/no-student.png old mode 100644 new mode 100755 diff --git a/frontend/src/main/frontend/src/assets/no-team-no-bg.png b/frontend/src/main/frontend/src/assets/no-team-no-bg.png old mode 100644 new mode 100755 diff --git a/frontend/src/main/frontend/src/assets/rr.html b/frontend/src/main/frontend/src/assets/rr.html new file mode 100755 index 000000000..a04d66c8d --- /dev/null +++ b/frontend/src/main/frontend/src/assets/rr.html @@ -0,0 +1,327 @@ + + +Requesting Assistance.
Mark Abbe
hi!

Hello! How can I assist you today?

Mark Abbe
This is my js code: +import { useEffect, useState } from 'react'; +import '../TeacherPages/styles/ProfessorCourseStyle.css'; +import SidebarComponent from '../../components/SidebarComponent'; +import { useParams } from 'react-router-dom'; +import { useDispatch, useSelector } from 'react-redux'; +import { getCourseDetailsAsync } from '../../redux/features/courseSlice'; +import GradeAssBarComponent from '../../components/GradeAssBarComponent'; +import ProfessorAllSubmissionsComponent from '../../components/ProfessorComponents/AssignmentPage/ProfessorAllSubmissionsComponent'; +import ProfessorEditAssignmentComponent from '../../components/ProfessorComponents/AssignmentPage/ProfessorEditAssignmentComponent'; +import { getAssignmentDetailsAsync } from '../../redux/features/assignmentSlice'; +import Loader from '../../components/LoaderComponenets/Loader'; +import uuid from 'react-uuid'; +import UserList from './UserList'; + +function AdminInterface() { + const [userList, setUserList] = useState([ + { id: uuid(), name: 'John Doe', role: 'Admin' }, + { id: uuid(), name: 'Jane Smith', role: 'Teacher' }, + { id: uuid(), name: 'Bob Johnson', role: 'Student' }, + // Add more users here + ]); + + return ( + <div className='admin-container'> + <div className='sidebar'> + <h1>Admin</h1> + </div> + <div className='user-roles'> + <h2>User Roles</h2> + <button className='add-user-button'>Add User +</button> + <UserList userList={userList} /> + </div> + </div> + ); +} + +export default AdminInterface; + +And: +import React from 'react'; + +function UserList({ userList }) { + return ( + <div className='user-list'> + <div className='user-item header'> + <div>Name</div> + <div>Laker Net ID</div> + <div>Role</div> + </div> + {userList.map((user) => ( + <div key={user.id} className='user-item'> + <div>{user.name}</div> + <div>{user.netID}</div> + <div>{user.role}</div> + </div> + ))} + </div> + ); + } + +export default UserList; + +And this is my css: +.admin-container{ + margin: auto; + display: flex; + align-items: center; + justify-content: center; + height: 100vh; + width: 80%; +} + +.sidebar{ + position: relative; + border-top-left-radius: 10px; + border-bottom-left-radius: 10px; + flex: 1; + height: 75%; + background-color: #d4eefc; +} + +.user-roles{ + position: relative; + flex: 3; + height: 75%; + border-top-right-radius: 10px; + border-bottom-right-radius: 10px; + background-color: #fafdff; +} + +.user-roles h2 { + position: absolute; + top: 40px; + left: 40px; + margin: 0; +} + +.sidebar h1 { + position: absolute; + top: 40px; + left: 40px; + margin: 0; +} + +.add-user-button { + position: absolute; + top: 40px; + right: 40px; + background-color: #28A745; + color: #fff; + border-radius: 5px; + padding: 10px 40px; + font-size: 1.2em; +} + +.user-list { + position: absolute; + top: 80px; /* Adjust the top value to match your design */ + left: 0; + right: 0; + bottom: 0; + overflow-y: scroll; + height: calc(100% - 80px); + padding: 80px 40px; + margin: 0 auto; + max-width: 1200px; /* or any desired value */ + max-height: 1200px; +} + +.user-item { + display: flex; + align-items: center; + justify-content: space-between; + padding: 10px; + border-bottom: 1px solid #ddd; +} + +.header { + background-color: #4a7dfc; + color: white; +}

Is there anything you'd like me to help you with?

Mark Abbe
Right now my list in the center of the page displays a users name, id, and role. I would like there to be a button to the right of the role in the shape of a pencil

To add a button to the right of the role field for each user in the list, you can modify the UserList component as follows:

javascript
import React from 'react'; + +function UserList({ userList }) { + return ( + <div className='user-list'> + <div className='user-item header'> + <div>Name</div> + <div>Laker Net ID</div> + <div>Role</div> + <div>Edit</div> {/* add a new column for the edit button */} + </div> + {userList.map((user) => ( + <div key={user.id} className='user-item'> + <div>{user.name}</div> + <div>{user.netID}</div> + <div>{user.role}</div> + <div> + <button>Edit</button> {/* add an edit button */} + </div> + </div> + ))} + </div> + ); +} + +export default UserList; +

Then you can modify the CSS for the new Edit column in user-item as follows:

css
.user-item { + display: flex; + align-items: center; + justify-content: space-between; + padding: 10px; + border-bottom: 1px solid #ddd; +} + +.user-item > div:last-child { + margin-left: auto; /* push the edit button to the right */ +} +

This will align the edit button to the right of the Role column for each user in the list.

Mark Abbe
Thanks! Now the name id and role are bunched together on the left and the button is all the way on the right. I would like them to be 4 columns, evenly spread apart!

Sure, we can achieve that by modifying the CSS of the .user-item class. Here's an updated CSS:

css
.user-item { + display: flex; + align-items: center; + justify-content: space-between; + padding: 10px; + border-bottom: 1px solid #ddd; +} + +.header { + background-color: #4 +
Mark Abbe
Now I would like there to be an "X" button to the right of the edit button

Sure, we can add another button to the right of the edit button to represent the "X" button. Here's an updated UserList component code:

javascript
import React from 'react'; + +function UserList({ userList }) { + return ( + <div className='user-list'> + <div className='user-item header'> + <div>Name</div> + <div>Laker Net ID</div> + <div>Role</div> + <div></div> {/* Add an empty div for spacing */} + </div> + {userList.map((user) => ( + <div key={user.id} className='user-item'> + <div>{user.name}</div> + <div>{user.netID}</div> + <div>{user.role}</div> + <div> + <button className='edit-button'>Edit</button> + <button className='delete-button'>X</button> + </div> + </div> + ))} + </div> + ); +} + +export default UserList; +

And here's the updated CSS:

css
.user-item { + display: flex; + align-items: center; + justify-content: space-between; + padding: 10px; + border-bottom: 1px solid #ddd; +} + +.header { + background-color: #4a7dfc; + color: white; +} + +.user-item > div { + width: 25%; /* Set the width of each column */ +} + +.user-item > div:last-child { + display: flex; + justify-content: flex-end; +} + +.edit-button { + margin-right: 5px; +} + +.delete-button { + background-color: #dc3545; + color: white; + border: none; + border-radius: 50%; + width: 30px; + height: 30px; + font-size: 1.2em; + cursor: pointer; +} +

Now each user item is divided into four equal columns, and there's an "Edit" button on the left and an "X" button on the right.

Mark Abbe
Awesome! Now Id like both the edit and X buttons to be a bit more to the left

To move both the edit and X buttons to the left, you can adjust their right position in the CSS. You can change the right value to a lower number to move the buttons closer to the left

Mark Abbe
I got it looking good by doing this: +.edit-button { + margin-right: 10px; +} + +.delete-button { + background-color: #dc3545; + color: white; + border: none; + border-radius: 50%; + width: 30px; + height: 30px; + font-size: 1.2em; + cursor: pointer; + margin-right: 100px; +}

Great! It sounds like you were able to adjust the styling to get the edit and delete buttons in the desired position. If you have any more questions or run into any issues, feel free to ask!

Mark Abbe
I added more users to the list, and the list now runs off the page of the user-roles div. I want the list to fit in the div: +import { useEffect, useState } from 'react'; +import '../TeacherPages/styles/ProfessorCourseStyle.css'; +import SidebarComponent from '../../components/SidebarComponent'; +import { useParams } from 'react-router-dom'; +import { useDispatch, useSelector } from 'react-redux'; +import { getCourseDetailsAsync } from '../../redux/features/courseSlice'; +import GradeAssBarComponent from '../../components/GradeAssBarComponent'; +import ProfessorAllSubmissionsComponent from '../../components/ProfessorComponents/AssignmentPage/ProfessorAllSubmissionsComponent'; +import ProfessorEditAssignmentComponent from '../../components/ProfessorComponents/AssignmentPage/ProfessorEditAssignmentComponent'; +import { getAssignmentDetailsAsync } from '../../redux/features/assignmentSlice'; +import Loader from '../../components/LoaderComponenets/Loader'; +import uuid from 'react-uuid'; +import UserList from './UserList'; + +function AdminInterface() { + const [userList, setUserList] = useState([ + { id: uuid(), name: 'John Doe', role: 'Admin' }, + { id: uuid(), name: 'Jane Smith', role: 'Teacher' }, + { id: uuid(), name: 'Bob Johnson', role: 'Student' }, + { id: uuid(), name: 'Bob Johnson', role: 'Student' }, + { id: uuid(), name: 'Bob Johnson', role: 'Student' }, + { id: uuid(), name: 'Bob Johnson', role: 'Student' }, + { id: uuid(), name: 'Bob Johnson', role: 'Student' }, + { id: uuid(), name: 'Bob Johnson', role: 'Student' }, + { id: uuid(), name: 'Bob Johnson', role: 'Student' }, + { id: uuid(), name: 'Bob Johnson', role: 'Student' }, + { id: uuid(), name: 'Bob Johnson', role: 'Student' }, + { id: uuid(), name: 'Bob Johnson', role: 'Student' }, + { id: uuid(), name: 'Bob Johnson', role: 'Student' }, + // Add more users here + ]); + + return ( + <div className='admin-container'> + <div className='sidebar'> + <h1>Admin</h1> + </div> + <div className='user-roles'> + <h2>User Roles</h2> + <button className='add-user-button'>Add User +</button> + <UserList userList={userList} /> + </div> + </div> + ); +} + +export default AdminInterface; +

You can add a CSS rule to limit the maximum height of the user list container and make it scrollable if it exceeds that height. Here's an example:

css
.user-list-container { + max-height: 400px; /* adjust this value as needed */ + overflow-y: auto; +} +

Then, you need to add the user-list-container class to the container element of the user list. For example, if you're using a ul element for the list, you can add the class like this:

php
<UserList userList={userList} className="user-list-container" /> +

Or if you're using a div element:

php
<div className="user-list-container"> + <UserList userList={userList} /> +</div> +

This will limit the height of the container to 400 pixels and make it scrollable if the content overflows the container. You can adjust the value of max-height to fit your design.

ChatGPT Feb 13 Version. + Free Research Preview. Our goal is to make AI systems more natural and +safe to interact with. Your feedback will help us improve.
\ No newline at end of file diff --git a/frontend/src/main/frontend/src/assets/rr_files/14-c10b8a9e6cb760e9.js b/frontend/src/main/frontend/src/assets/rr_files/14-c10b8a9e6cb760e9.js new file mode 100755 index 000000000..3b32a943a --- /dev/null +++ b/frontend/src/main/frontend/src/assets/rr_files/14-c10b8a9e6cb760e9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[14],{86885:function(e,n,t){t.d(n,{Z:function(){return g}});var r=t(61706),a=t(45813),s=t(35250),o=t(61432),i=t(70079),c=t(48240),l=t(12762),u=t(98943),d=t(33264),f=t(66285),p=t(74516),v=t(35e3),m=t(69858),h=t(77507);function g(e){var n=e.isOpen,t=e.onClose,g=(0,i.useRef)(null),x=(0,l.WS)(),b=(0,i.useState)(!1),y=b[0],w=b[1],j=(0,o.useRouter)(),P=(0,i.useCallback)(function(){x(u.s6.closeAccountPaymentModal),t()},[t,x]),k=(0,i.useCallback)((0,r.Z)(function(){var e;return(0,a.__generator)(this,function(n){switch(n.label){case 0:w(!0),x(u.s6.clickAccountPaymentCheckout),n.label=1;case 1:return n.trys.push([1,3,4,5]),[4,d.ZP.submitCheckoutForm()];case 2:return e=n.sent(),j.push(e.url),[3,5];case 3:return n.sent(),p.m.warning("The payments page encountered an error. Please try again. If the problem continues, please email support@openai.com.",{hasCloseButton:!0}),[3,5];case 4:return w(!1),[7];case 5:return[2]}})}),[j,x,w]),Z=(0,i.useCallback)((0,r.Z)(function(){var e;return(0,a.__generator)(this,function(n){switch(n.label){case 0:w(!0),x(u.s6.clickAccountCustomerPortal),n.label=1;case 1:return n.trys.push([1,3,4,5]),[4,d.ZP.fetchCustomerPortalUrl()];case 2:return e=n.sent(),j.push(e.url),[3,5];case 3:return n.sent(),p.m.warning("The account management page encountered an error. Please try again. If the problem continues, please email support@openai.com.",{hasCloseButton:!0}),[3,5];case 4:return w(!1),[7];case 5:return[2]}})}),[j,x,w]),S=(0,f.mA)(function(e){var n;return null===(n=e.accountPlan)||void 0===n?void 0:n.hasCustomerObject});return(0,s.jsxs)(v.x,{isOpen:n,onClose:t,focusRef:g,children:[(0,s.jsxs)("div",{className:"flex w-full flex-row items-center justify-between border-b py-3 px-4 dark:border-gray-700",children:[(0,s.jsx)("span",{className:"text-base font-semibold sm:text-base",children:"Your Account"}),(0,s.jsx)("button",{className:"text-gray-700 opacity-50 transition hover:opacity-75 dark:text-white",onClick:P,children:(0,s.jsx)(c.q5L,{className:"h-6 w-6"})})]}),(0,s.jsxs)("div",{className:"grid sm:grid-cols-2",children:[(0,s.jsx)("div",{className:"relative order-2 col-span-1 border-t border-r-0 dark:border-gray-700 sm:order-1 sm:border-t-0 sm:border-r",children:(0,s.jsx)(m.Oi,{rowElements:[(0,s.jsx)(m.Cu,{text:"Free Plan"},"row-free-plan-name"),(0,s.jsx)(m.hi,{variant:"disabled",disabled:!0,text:h.S.free.callToAction.active},"row-free-plan-button"),(0,s.jsx)(m.G,{variant:"secondary",text:h.S.free.demandAccess},"row-free-plan-demand"),(0,s.jsx)(m.G,{variant:"secondary",text:h.S.free.responseSpeed},"row-free-plan-speed"),(0,s.jsx)(m.G,{className:"sm:pb-2",variant:"secondary",text:h.S.free.modelFeatures},"row-free-plan-updates"),]})}),(0,s.jsx)("div",{className:"relative order-1 col-span-1 sm:order-2",children:(0,s.jsx)(m.Oi,{rowElements:[(0,s.jsx)(m.Cu,{text:h.S.plus.name,children:(0,s.jsx)("span",{className:"font-semibold text-gray-500",children:h.S.plus.costInDollars})},"row-plus-plan-title"),(0,s.jsx)(m.hi,{variant:"primary",disabled:y,isLoading:y,ref:g,onClick:k,text:h.S.plus.callToAction.inactivePayment},"row-plus-plan-button"),(0,s.jsx)(m.G,{variant:"primary",text:h.S.plus.demandAccess},"row-plus-plan-demand"),(0,s.jsx)(m.G,{variant:"primary",text:h.S.plus.responseSpeed},"row-plus-plan-speed"),(0,s.jsx)(m.G,{className:"sm:pb-2",variant:"primary",text:h.S.plus.modelFeatures},"row-plus-plan-updates"),S&&(0,s.jsx)(m.nR,{className:"sm:pb-1",isLoading:y,text:h.S.manageSubscription.callToAction,onClick:Z},"row-plus-plan-manage"),]})})]})]})}},35e3:function(e,n,t){t.d(n,{x:function(){return c}});var r=t(14806),a=t(35250),s=t(34303),o=t(73925);function i(){var e=(0,r.Z)(["flex grow items-center justify-center bg-white dark:bg-gray-900 rounded-md flex flex-col items-start overflow-hidden border shadow-md dark:border-gray-700"]);return i=function(){return e},e}var c=function(e){var n=e.children,t=e.isOpen,r=e.onClose,s=e.focusRef;return(0,a.jsx)(o.Z,{size:"fullscreen",isOpen:t,onModalClose:r,type:"success",title:"",className:"bg-transparent dark:bg-transparent",initialFocusRef:s,children:(0,a.jsx)("div",{className:"flex h-full flex-col items-center justify-start",children:(0,a.jsx)("div",{className:"relative",children:(0,a.jsx)(l,{children:n})})})})},l=s.Z.div(i())},69858:function(e,n,t){t.d(n,{Cu:function(){return v},G:function(){return g},Oi:function(){return p},hi:function(){return h},nR:function(){return x}});var r=t(14806),a=t(35250),s=t(19841),o=t(48240),i=t(34303),c=t(39690),l=t(79876);function u(){var e=(0,r.Z)(["p-4 flex flex-col gap-3 bg-white z-20 relative dark:bg-gray-900"]);return u=function(){return e},e}function d(){var e=(0,r.Z)(["gap-2 flex flex-row justify-start items-center text-sm"]);return d=function(){return e},e}function f(){var e=(0,r.Z)(["text-xl font-semibold justify-between items-center flex"]);return f=function(){return e},e}var p=function(e){var n=e.rowElements;return(0,a.jsx)(b,{children:n.map(function(e){return e})})},v=function(e){var n=e.className,t=e.text,r=e.children;return(0,a.jsxs)(w,{className:n,children:[(0,a.jsx)("span",{children:t}),r]})},m={"primary-disabled":"border-none bg-gray-200 py-3 font-semibold hover:bg-gray-200",primary:"border-none py-3 font-semibold",disabled:"dark:text-gray-white border-none bg-gray-300 py-3 font-semibold text-gray-800 hover:bg-gray-300 dark:bg-gray-500 dark:opacity-100"},h=function(e){var n=e.isLoading,t=e.disabled,r=e.onClick,i=(e.className,e.variant),u=void 0===i?"primary":i,d=e.text,f=e.ref;return(0,a.jsxs)(c.z,{disabled:void 0!==t&&t,onClick:r,openNewTab:!0,ref:f,as:"button",className:(0,s.Z)(m[u]),children:[(0,a.jsx)("span",{className:(0,s.Z)({"text-gray-700":"primary-disabled"===u,"text-white":"primary"===u}),children:d}),void 0!==n&&n&&(0,a.jsx)(l.ZP,{className:"animate-spin",icon:o.dAq})]})},g=function(e){var n=e.variant,t=void 0===n?"primary":n,r=e.className,i=e.text;return(0,a.jsxs)(y,{className:r,children:[(0,a.jsx)(l.ZP,{icon:o._rq,className:(0,s.Z)("h-5 w-5",{"text-green-700":"primary"==t,"text-gray-400":"secondary"==t})}),(0,a.jsx)("span",{children:i})]})},x=function(e){var n=e.className,t=e.text,r=e.isLoading,s=e.onClick;return(0,a.jsx)(y,{className:n,children:(0,a.jsxs)("button",{onClick:s,className:"flex flex-row items-center space-x-1 underline",children:[(0,a.jsx)("span",{children:t}),r&&(0,a.jsx)(l.ZP,{className:"animate-spin",icon:o.dAq})]})})},b=i.Z.div(u()),y=i.Z.div(d()),w=i.Z.div(f())},77507:function(e,n,t){t.d(n,{S:function(){return r}});var r={free:{name:"Free Plan",callToAction:{active:"Your Current Plan",inactive:"Your Current Plan"},costInDollars:"",demandAccess:"Available when demand is low",responseSpeed:"Standard response speed",modelFeatures:"Regular model updates"},plus:{name:"ChatGPT Plus",callToAction:{active:"Your current plan",inactive:"I'm Interested",inactivePayment:"Upgrade plan"},costInDollars:"USD $20/mo",demandAccess:"Available even when demand is high",responseSpeed:"Faster response speed",modelFeatures:"Priority access to new features"},manageSubscription:{callToAction:"Manage my subscription"}}},85087:function(e,n,t){t.d(n,{Z:function(){return l}});var r=t(87762),a=t(70079),s=t(82018),o=t(33264),i=t(66285),c=t(27252);function l(){var e=(0,s.kP)(),n=e.session,t=e.loading,l=(0,i.mA)(function(e){return e.hasBeenSet}),u=(0,c.g)(function(e){return e.updateFlagValue}),d=(0,r.a)(["account-status"],function(){return o.ZP.getAccountStatus(null==n?void 0:n.accessToken)},{enabled:!t&&Boolean(null==n?void 0:n.accessToken),onError:function(){console.error("Unable to load account")},onSuccess:function(e){var n;v(e),u("highlightPlusUpgrade",!(null===(n=e.account_plan)||void 0===n?void 0:n.is_paid_subscription_active))}}),f=d.data,p=d.isLoading,v=(0,i.mA)(function(e){return{accountPlan:e.accountPlan,updateAccountPlanWithResponse:e.updateAccountPlanWithResponse}}).updateAccountPlanWithResponse;return(0,a.useMemo)(function(){return{accountStatusResponse:f,isLoading:!l&&p}},[f,l,p])}},49690:function(e,n,t){t.d(n,{Z:function(){return u}});var r=t(27215),a=t(70079),s=t(12762),o=t(98943),i=t(82018),c=t(33264),l=t(66285);function u(e,n,t,u,d){var f=!(arguments.length>5)||void 0===arguments[5]||arguments[5],p=(0,l.mA)(function(e){return e.features}),v=(0,i.kP)().session,m=(0,s.WS)(t);(0,a.useEffect)(function(){f&&(p&&n.id&&s.ZP.setUser(n,p,u,d),m(o.s6.pageLoad))},[p,n.id,f]),(0,a.useEffect)(function(){if(f){var e,t,a,s,o;n.id&&(null==v?void 0:null===(e=v.user)||void 0===e?void 0:e.id)&&n.id!==(null==v?void 0:null===(t=v.user)||void 0===t?void 0:t.id)&&c.ZP.setLog("Mismatched user ids: ".concat(null==v?void 0:null===(a=v.user)||void 0===a?void 0:a.id," -> ").concat(n.id)),(null==v?void 0:v.accessToken)?c.ZP.setAccessToken(v.accessToken):!v||(null==v?void 0:v.error)||(null===r.default||void 0===r.default||r.default.captureMessage("Missing access token for User: ".concat(null==v?void 0:null===(s=v.user)||void 0===s?void 0:s.id," (").concat(null==v?void 0:v.accessToken,")")),c.ZP.setLog("Missing access token for User: ".concat(null==v?void 0:null===(o=v.user)||void 0===o?void 0:o.id," (").concat(null==v?void 0:v.accessToken,")"))),(null==v?void 0:v.error)==="RefreshAccessTokenError"&&(null===r.default||void 0===r.default||r.default.captureException(v.error),c.ZP.setLog("Refresh access token error: ".concat(JSON.stringify(v.error))),window._oaiHandleSessionExpired("page load",v.error))}},[f,v,n.id]),(0,a.useEffect)(function(){document.title=e},[e])}},66285:function(e,n,t){t.d(n,{hz:function(){return u},mA:function(){return c},nR:function(){return l}});var r=t(31501),a=t(61079),s=t(70079),o=t(59268),i={lastUpdated:Date.now(),hasBeenSet:!1},c=(0,o.ZP)()(function(e){return(0,a.Z)((0,r.Z)({},i),{updateAccountPlanWithResponse:function(n){var t,r,a,s,o;e({accountPlan:{hasPaidSubscription:(null==n?void 0:null===(t=n.account_plan)||void 0===t?void 0:t.is_paid_subscription_active)||!1,subscriptionPlan:(null==n?void 0:null===(r=n.account_plan)||void 0===r?void 0:r.subscription_plan)||"chatgptplusfreeplan",accountUserRole:(null==n?void 0:null===(a=n.account_plan)||void 0===a?void 0:a.account_user_role)||"account-owner",wasPaidCustomer:(null==n?void 0:null===(s=n.account_plan)||void 0===s?void 0:s.was_paid_customer)||!1,hasCustomerObject:(null==n?void 0:null===(o=n.account_plan)||void 0===o?void 0:o.has_customer_object)||!1},features:(null==n?void 0:n.features)||[],hasBeenSet:!0})}})}),l=function(){return c(function(e){var n;return null===(n=e.accountPlan)||void 0===n?void 0:n.hasPaidSubscription})},u=function(){var e=c(function(e){return e.features});return(0,s.useMemo)(function(){return new Set(e)},[e])}},27252:function(e,n,t){t.d(n,{g:function(){return c}});var r=t(33861),a=t(31501),s=t(61079),o=t(59268),i={flags:{isUserInCanPayGroup:!1,highlightPlusUpgrade:!1,failwhaleBypassEnabled:!1}},c=(0,o.ZP)()(function(e,n){return(0,s.Z)((0,a.Z)({},i),{updateFlagValue:function(t,o){var i=n().flags;e({flags:(0,s.Z)((0,a.Z)({},i),(0,r.Z)({},t,o))})}})})},82018:function(e,n,t){t.d(n,{kP:function(){return f},w7:function(){return l}});var r=t(61706),a=t(31501),s=t(45813),o=t(87762),i=t(44928),c=t(61432);function l(e){(0,i.signOut)((0,a.Z)({callbackUrl:window.location.origin+"/api/auth/logout"},e))}function u(){return d.apply(this,arguments)}function d(){return(d=(0,r.Z)(function(){var e,n;return(0,s.__generator)(this,function(e){switch(e.label){case 0:return[4,fetch("/api/auth/session")];case 1:return[4,e.sent().json()];case 2:if(Object.keys(n=e.sent()).length)return[2,n];return[2,null]}})})).apply(this,arguments)}function f(e){var n=e||{},t=n.required,r=n.redirectTo,a=n.queryConfig,s=(0,c.useRouter)(),i=(0,o.a)(["session"],u,{onSettled:function(e,n){(null==a?void 0:a.onSettled)&&(null==a||a.onSettled(e,n)),!e&&t&&s.push(r)}});return{session:(null==i?void 0:i.data)||null,loading:(null==i?void 0:i.status)==="loading"}}}}]); \ No newline at end of file diff --git a/frontend/src/main/frontend/src/assets/rr_files/174-bd28069f281ef76f.js b/frontend/src/main/frontend/src/assets/rr_files/174-bd28069f281ef76f.js new file mode 100755 index 000000000..693862175 --- /dev/null +++ b/frontend/src/main/frontend/src/assets/rr_files/174-bd28069f281ef76f.js @@ -0,0 +1 @@ +(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[174],{63561:function(e,t){"use strict";t.Z=function(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}},68561:function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=i(63561).Z,o=i(95781).Z,a=i(89478).Z;Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t,i,l=e.src,c=e.sizes,h=e.unoptimized,p=void 0!==h&&h,w=e.priority,k=void 0!==w&&w,E=e.loading,I=e.lazyRoot,R=e.lazyBoundary,_=e.className,L=e.quality,q=e.width,C=e.height,O=e.style,N=e.objectFit,P=e.objectPosition,W=e.onLoadingComplete,B=e.placeholder,M=void 0===B?"empty":B,Z=e.blurDataURL,D=s(e,["src","sizes","unoptimized","priority","loading","lazyRoot","lazyBoundary","className","quality","width","height","style","objectFit","objectPosition","onLoadingComplete","placeholder","blurDataURL"]),U=d.useContext(m.ImageConfigContext),V=d.useMemo(function(){var e=y||U||f.imageConfigDefault,t=a(e.deviceSizes).concat(a(e.imageSizes)).sort(function(e,t){return e-t}),i=e.deviceSizes.sort(function(e,t){return e-t});return r({},e,{allSizes:t,deviceSizes:i})},[U]),F=c?"responsive":"intrinsic";"layout"in D&&(D.layout&&(F=D.layout),delete D.layout);var H=x;if("loader"in D){if(D.loader){var G=D.loader;H=function(e){e.config;var t=s(e,["config"]);return G(t)}}delete D.loader}var T="";if(function(e){var t;return"object"==typeof e&&(z(e)||void 0!==e.src)}(l)){var J=z(l)?l.default:l;if(!J.src)throw Error("An object should only be passed to the image component src parameter if it comes from a static image import. It must include src. Received ".concat(JSON.stringify(J)));if(Z=Z||J.blurDataURL,T=J.src,(!F||"fill"!==F)&&(C=C||J.height,q=q||J.width,!J.height||!J.width))throw Error("An object should only be passed to the image component src parameter if it comes from a static image import. It must include height and width. Received ".concat(JSON.stringify(J)))}l="string"==typeof l?l:T;var Q=!k&&("lazy"===E||void 0===E);(l.startsWith("data:")||l.startsWith("blob:"))&&(p=!0,Q=!1),b.has(l)&&(Q=!1),V.unoptimized&&(p=!0);var K=o(d.useState(!1),2),X=K[0],Y=K[1],$=o(g.useIntersection({rootRef:void 0===I?null:I,rootMargin:R||"200px",disabled:!Q}),3),ee=$[0],et=$[1],ei=$[2],en=!Q||et,eo={boxSizing:"border-box",display:"block",overflow:"hidden",width:"initial",height:"initial",background:"none",opacity:1,border:0,margin:0,padding:0},ea={boxSizing:"border-box",display:"block",width:"initial",height:"initial",background:"none",opacity:1,border:0,margin:0,padding:0},er=!1,el=A(q),ec=A(C),es=A(L),ed=Object.assign({},O,{position:"absolute",top:0,left:0,bottom:0,right:0,boxSizing:"border-box",padding:0,border:"none",margin:"auto",display:"block",width:0,height:0,minWidth:"100%",maxWidth:"100%",minHeight:"100%",maxHeight:"100%",objectFit:N,objectPosition:P}),eu="blur"!==M||X?{}:{backgroundSize:N||"cover",backgroundPosition:P||"0% 0%",filter:"blur(20px)",backgroundImage:'url("'.concat(Z,'")')};if("fill"===F)eo.display="block",eo.position="absolute",eo.top=0,eo.left=0,eo.bottom=0,eo.right=0;else if(void 0!==el&&void 0!==ec){var ef=ec/el,eg=isNaN(ef)?"100%":"".concat(100*ef,"%");"responsive"===F?(eo.display="block",eo.position="relative",er=!0,ea.paddingTop=eg):"intrinsic"===F?(eo.display="inline-block",eo.position="relative",eo.maxWidth="100%",er=!0,ea.maxWidth="100%",t="data:image/svg+xml,%3csvg%20xmlns=%27http://www.w3.org/2000/svg%27%20version=%271.1%27%20width=%27".concat(el,"%27%20height=%27").concat(ec,"%27/%3e")):"fixed"===F&&(eo.display="inline-block",eo.position="relative",eo.width=el,eo.height=ec)}var em={src:v,srcSet:void 0,sizes:void 0};en&&(em=S({config:V,src:l,unoptimized:p,layout:F,width:el,quality:es,sizes:c,loader:H}));var eh=l,ep="imagesizes";ep="imageSizes";var ey=(n(i={},"imageSrcSet",em.srcSet),n(i,ep,em.sizes),n(i,"crossOrigin",D.crossOrigin),i),eb=d.default.useLayoutEffect,ev=d.useRef(W),ew=d.useRef(l);d.useEffect(function(){ev.current=W},[W]),eb(function(){ew.current!==l&&(ei(),ew.current=l)},[ei,l]);var ez=r({isLazy:Q,imgAttributes:em,heightInt:ec,widthInt:el,qualityInt:es,layout:F,className:_,imgStyle:ed,blurStyle:eu,loading:E,config:V,unoptimized:p,placeholder:M,loader:H,srcString:eh,onLoadingCompleteRef:ev,setBlurComplete:Y,setIntersection:ee,isVisible:en,noscriptSizes:c},D);return d.default.createElement(d.default.Fragment,null,d.default.createElement("span",{style:eo},er?d.default.createElement("span",{style:ea},t?d.default.createElement("img",{style:{display:"block",maxWidth:"100%",width:"initial",height:"initial",background:"none",opacity:1,border:0,margin:0,padding:0},alt:"","aria-hidden":!0,src:t}):null):null,d.default.createElement(j,Object.assign({},ez))),k?d.default.createElement(u.default,null,d.default.createElement("link",Object.assign({key:"__nimg-"+em.src+em.srcSet+em.sizes,rel:"preload",as:"image",href:em.srcSet?void 0:em.src},ey))):null)};var r=i(17858).Z,l=i(16922).Z,c=i(86905).Z,s=i(31080).Z,d=c(i(70079)),u=l(i(76109)),f=i(60239),g=i(26790),m=i(94136);i(13279);var h=i(5189);function p(e){return"/"===e[0]?e.slice(1):e}var y={deviceSizes:[640,750,828,1080,1200,1920,2048,3840],imageSizes:[16,32,48,64,96,128,256,384],path:"/_next/image",loader:"default",dangerouslyAllowSVG:!1,unoptimized:!1},b=new Set,v="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",w=new Map([["default",function(e){var t=e.config,i=e.src,n=e.width,o=e.quality;return i.endsWith(".svg")&&!t.dangerouslyAllowSVG?i:"".concat(h.normalizePathTrailingSlash(t.path),"?url=").concat(encodeURIComponent(i),"&w=").concat(n,"&q=").concat(o||75)}],["imgix",function(e){var t=e.config,i=e.src,n=e.width,o=e.quality,a=new URL("".concat(t.path).concat(p(i))),r=a.searchParams;return r.set("auto",r.getAll("auto").join(",")||"format"),r.set("fit",r.get("fit")||"max"),r.set("w",r.get("w")||n.toString()),o&&r.set("q",o.toString()),a.href}],["cloudinary",function(e){var t,i=e.config,n=e.src,o=e.width,a=["f_auto","c_limit","w_"+o,"q_"+(e.quality||"auto")].join(",")+"/";return"".concat(i.path).concat(a).concat(p(n))}],["akamai",function(e){var t=e.config,i=e.src,n=e.width;return"".concat(t.path).concat(p(i),"?imwidth=").concat(n)}],["custom",function(e){var t=e.src;throw Error('Image with src "'.concat(t,'" is missing "loader" prop.')+"\nRead more: https://nextjs.org/docs/messages/next-image-missing-loader")}],]);function z(e){return void 0!==e.default}function S(e){var t=e.config,i=e.src,n=e.unoptimized,o=e.layout,r=e.width,l=e.quality,c=e.sizes,s=e.loader;if(n)return{src:i,srcSet:void 0,sizes:void 0};var d=function(e,t,i,n){var o=e.deviceSizes,r=e.allSizes;if(n&&("fill"===i||"responsive"===i)){for(var l=/(^|\s)(1?\d?\d)vw/g,c=[];s=l.exec(n);s)c.push(parseInt(s[2]));if(c.length){var s,d,u=.01*(d=Math).min.apply(d,a(c));return{widths:r.filter(function(e){return e>=o[0]*u}),kind:"w"}}return{widths:r,kind:"w"}}return"number"!=typeof t||"fill"===i||"responsive"===i?{widths:o,kind:"w"}:{widths:a(new Set([t,2*t].map(function(e){return r.find(function(t){return t>=e})||r[r.length-1]}))),kind:"x"}}(t,r,o,c),u=d.widths,f=d.kind,g=u.length-1;return{sizes:c||"w"!==f?c:"100vw",srcSet:u.map(function(e,n){return"".concat(s({config:t,src:i,quality:l,width:e})," ").concat("w"===f?e:n+1).concat(f)}).join(", "),src:s({config:t,src:i,quality:l,width:u[g]})}}function A(e){return"number"==typeof e?e:"string"==typeof e?parseInt(e,10):void 0}function x(e){var t,i=(null==(t=e.config)?void 0:t.loader)||"default",n=w.get(i);if(n)return n(e);throw Error('Unknown "loader" found in "next.config.js". Expected: '.concat(f.VALID_LOADERS.join(", "),". Received: ").concat(i))}function k(e,t,i,n,o,a){e&&e.src!==v&&e["data-loaded-src"]!==t&&(e["data-loaded-src"]=t,("decode"in e?e.decode():Promise.resolve()).catch(function(){}).then(function(){if(e.parentNode&&(b.add(t),"blur"===n&&a(!0),null==o?void 0:o.current)){var i=e.naturalWidth,r=e.naturalHeight;o.current({naturalWidth:i,naturalHeight:r})}}))}var j=function(e){var t=e.imgAttributes,i=(e.heightInt,e.widthInt),n=e.qualityInt,o=e.layout,a=e.className,l=e.imgStyle,c=e.blurStyle,u=e.isLazy,f=e.placeholder,g=e.loading,m=e.srcString,h=e.config,p=e.unoptimized,y=e.loader,b=e.onLoadingCompleteRef,v=e.setBlurComplete,w=e.setIntersection,z=e.onLoad,A=e.onError,x=(e.isVisible,e.noscriptSizes),j=s(e,["imgAttributes","heightInt","widthInt","qualityInt","layout","className","imgStyle","blurStyle","isLazy","placeholder","loading","srcString","config","unoptimized","loader","onLoadingCompleteRef","setBlurComplete","setIntersection","onLoad","onError","isVisible","noscriptSizes"]);return g=u?"lazy":g,d.default.createElement(d.default.Fragment,null,d.default.createElement("img",Object.assign({},j,t,{decoding:"async","data-nimg":o,className:a,style:r({},l,c),ref:d.useCallback(function(e){w(e),(null==e?void 0:e.complete)&&k(e,m,o,f,b,v)},[w,m,o,f,b,v,]),onLoad:function(e){k(e.currentTarget,m,o,f,b,v),z&&z(e)},onError:function(e){"blur"===f&&v(!0),A&&A(e)}})),(u||"blur"===f)&&d.default.createElement("noscript",null,d.default.createElement("img",Object.assign({},j,S({config:h,src:m,unoptimized:p,layout:o,width:i,quality:n,sizes:x,loader:y}),{decoding:"async","data-nimg":o,style:l,className:a,loading:g}))))};("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},96424:function(e,t,i){e.exports=i(68561)}}]); \ No newline at end of file diff --git a/frontend/src/main/frontend/src/assets/rr_files/1f110208-44a6f43ddc5e9011.js b/frontend/src/main/frontend/src/assets/rr_files/1f110208-44a6f43ddc5e9011.js new file mode 100755 index 000000000..58c11b641 --- /dev/null +++ b/frontend/src/main/frontend/src/assets/rr_files/1f110208-44a6f43ddc5e9011.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[960],{75927:function(e,t,r){r.d(t,{Z:function(){return um}});class a{constructor(e,t,r){this.lexer=void 0,this.start=void 0,this.end=void 0,this.lexer=e,this.start=t,this.end=r}static range(e,t){return t?e&&e.loc&&t.loc&&e.loc.lexer===t.loc.lexer?new a(e.loc.lexer,e.loc.start,t.loc.end):null:e&&e.loc}}class n{constructor(e,t){this.text=void 0,this.loc=void 0,this.noexpand=void 0,this.treatAsRelax=void 0,this.text=e,this.loc=t}range(e,t){return new n(t,a.range(this,e))}}class i{constructor(e,t){this.position=void 0;var r="KaTeX parse error: "+e,a=t&&t.loc;if(a&&a.start<=a.end){var n,s,o,l=a.lexer.input;n=a.start;var h=a.end;n===l.length?r+=" at end of input: ":r+=" at position "+(n+1)+": ";var m=l.slice(n,h).replace(/[^]/g,"$&̲");s=n>15?"…"+l.slice(n-15,n):l.slice(0,n),o=h+15":">","<":"<",'"':""","'":"'"},c=/[&><"']/g,p=function e(t){return"ordgroup"===t.type||"color"===t.type?1===t.body.length?e(t.body[0]):t:"font"===t.type?e(t.body):t},u=function(e){var t=p(e);return"mathord"===t.type||"textord"===t.type||"atom"===t.type},d=function(e){if(!e)throw Error("Expected non-null, but got "+String(e));return e},g=function(e){var t=/^\s*([^\\/#]*?)(?::|�*58|�*3a)/i.exec(e);return null!=t?t[1]:"_relative"},f={contains:s,deflt:o,escape:function(e){return String(e).replace(c,e=>m[e])},hyphenate:h,getBaseElem:p,isCharacterBox:u,protocolFromUrl:g},v={displayMode:{type:"boolean",description:"Render math in display mode, which puts the math in display style (so \\int and \\sum are large, for example), and centers the math on the page on its own line.",cli:"-d, --display-mode"},output:{type:{enum:["htmlAndMathml","html","mathml"]},description:"Determines the markup language of the output.",cli:"-F, --format "},leqno:{type:"boolean",description:"Render display math in leqno style (left-justified tags)."},fleqn:{type:"boolean",description:"Render display math flush left."},throwOnError:{type:"boolean",default:!0,cli:"-t, --no-throw-on-error",cliDescription:"Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error."},errorColor:{type:"string",default:"#cc0000",cli:"-c, --error-color ",cliDescription:"A color string given in the format 'rgb' or 'rrggbb' (no #). This option determines the color of errors rendered by the -t option.",cliProcessor:e=>"#"+e},macros:{type:"object",cli:"-m, --macro ",cliDescription:"Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).",cliDefault:[],cliProcessor:(e,t)=>(t.push(e),t)},minRuleThickness:{type:"number",description:"Specifies a minimum thickness, in ems, for fraction lines, `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, `\\hdashline`, `\\underline`, `\\overline`, and the borders of `\\fbox`, `\\boxed`, and `\\fcolorbox`.",processor:e=>Math.max(0,e),cli:"--min-rule-thickness ",cliProcessor:parseFloat},colorIsTextColor:{type:"boolean",description:"Makes \\color behave like LaTeX's 2-argument \\textcolor, instead of LaTeX's one-argument \\color mode change.",cli:"-b, --color-is-text-color"},strict:{type:[{enum:["warn","ignore","error"]},"boolean","function"],description:"Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.",cli:"-S, --strict",cliDefault:!1},trust:{type:["boolean","function"],description:"Trust the input, enabling all HTML features such as \\url.",cli:"-T, --trust"},maxSize:{type:"number",default:1/0,description:"If non-zero, all user-specified sizes, e.g. in \\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large",processor:e=>Math.max(0,e),cli:"-s, --max-size ",cliProcessor:parseInt},maxExpand:{type:"number",default:1e3,description:"Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.",processor:e=>Math.max(0,e),cli:"-e, --max-expand ",cliProcessor:e=>"Infinity"===e?1/0:parseInt(e)},globalGroup:{type:"boolean",cli:!1}};function b(e){if(e.default)return e.default;var t=e.type,r=Array.isArray(t)?t[0]:t;if("string"!=typeof r)return r.enum[0];switch(r){case"boolean":return!1;case"string":return"";case"number":return 0;case"object":return{}}}class y{constructor(e){for(var t in this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,this.globalGroup=void 0,e=e||{},v)if(v.hasOwnProperty(t)){var r=v[t];this[t]=void 0!==e[t]?r.processor?r.processor(e[t]):e[t]:b(r)}}reportNonstrict(e,t,r){var a=this.strict;if("function"==typeof a&&(a=a(e,t,r)),a&&"ignore"!==a){if(!0===a||"error"===a)throw new i("LaTeX-incompatible input and strict mode is set to 'error': "+(t+" [")+e+"]",r);"warn"===a?"undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(t+" [")+e+"]"):"undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+a+"': "+t+" [")+e+"]")}}useStrictBehavior(e,t,r){var a=this.strict;if("function"==typeof a)try{a=a(e,t,r)}catch(n){a="error"}return!!a&&"ignore"!==a&&(!0===a||"error"===a||("warn"===a?("undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(t+" [")+e+"]"),!1):("undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+a+"': "+t+" [")+e+"]"),!1)))}isTrusted(e){return e.url&&!e.protocol&&(e.protocol=f.protocolFromUrl(e.url)),Boolean("function"==typeof this.trust?this.trust(e):this.trust)}}class x{constructor(e,t,r){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=e,this.size=t,this.cramped=r}sup(){return w[k[this.id]]}sub(){return w[S[this.id]]}fracNum(){return w[M[this.id]]}fracDen(){return w[z[this.id]]}cramp(){return w[A[this.id]]}text(){return w[T[this.id]]}isTight(){return this.size>=2}}var w=[new x(0,0,!1),new x(1,0,!0),new x(2,1,!1),new x(3,1,!0),new x(4,2,!1),new x(5,2,!0),new x(6,3,!1),new x(7,3,!0)],k=[4,5,4,5,6,7,6,7],S=[5,5,5,5,7,7,7,7],M=[2,3,4,5,6,7,6,7],z=[3,3,5,5,7,7,7,7],A=[1,1,3,3,5,5,7,7],T=[0,1,2,3,2,3,2,3],B={DISPLAY:w[0],TEXT:w[2],SCRIPT:w[4],SCRIPTSCRIPT:w[6]},q=[{name:"latin",blocks:[[256,591],[768,879]]},{name:"cyrillic",blocks:[[1024,1279]]},{name:"armenian",blocks:[[1328,1423]]},{name:"brahmic",blocks:[[2304,4255]]},{name:"georgian",blocks:[[4256,4351]]},{name:"cjk",blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:"hangul",blocks:[[44032,55215]]}],C=[];function N(e){for(var t=0;t=C[t]&&e<=C[t+1])return!0;return!1}q.forEach(e=>e.blocks.forEach(e=>C.push(...e)));var I=function(e,t,r){t*=1e3;var a,n,i,s,o,l,h,m,c,p,u,d,g,f="";switch(e){case"sqrtMain":f="M95,"+(622+t+80)+"\nc-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14\nc0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54\nc44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10\ns173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429\nc69,-144,104.5,-217.7,106.5,-221\nl"+t/2.075+" -"+t+"\nc5.3,-9.3,12,-14,20,-14\nH400000v"+(40+t)+"H845.2724\ns-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7\nc-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z\nM"+(834+t)+" 80h400000v"+(40+t)+"h-400000z";break;case"sqrtSize1":f="M263,"+(601+t+80)+"c0.7,0,18,39.7,52,119\nc34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120\nc340,-704.7,510.7,-1060.3,512,-1067\nl"+t/2.084+" -"+t+"\nc4.7,-7.3,11,-11,19,-11\nH40000v"+(40+t)+"H1012.3\ns-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232\nc-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1\ns-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26\nc-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z\nM"+(1001+t)+" 80h400000v"+(40+t)+"h-400000z";break;case"sqrtSize2":f="M983 "+(10+t+80)+"\nl"+t/3.13+" -"+t+"\nc4,-6.7,10,-10,18,-10 H400000v"+(40+t)+"\nH1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7\ns-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744\nc-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30\nc26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722\nc56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5\nc53.7,-170.3,84.5,-266.8,92.5,-289.5z\nM"+(1001+t)+" 80h400000v"+(40+t)+"h-400000z";break;case"sqrtSize3":f="M424,"+(2398+t+80)+"\nc-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514\nc0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20\ns-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121\ns209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081\nl"+t/4.223+" -"+t+"c4,-6.7,10,-10,18,-10 H400000\nv"+(40+t)+"H1014.6\ns-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185\nc-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2z M"+(1001+t)+" 80\nh400000v"+(40+t)+"h-400000z";break;case"sqrtSize4":f="M473,"+(2713+t+80)+"\nc339.3,-1799.3,509.3,-2700,510,-2702 l"+t/5.298+" -"+t+"\nc3.3,-7.3,9.3,-11,18,-11 H400000v"+(40+t)+"H1017.7\ns-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200\nc0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26\ns76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104,\n606zM"+(1001+t)+" 80h400000v"+(40+t)+"H1017.7z";break;case"sqrtTall":f="M702 "+(t+80)+"H400000"+(40+t)+"\nH742v"+(r-54-80-t)+"l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1\nh-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170\nc-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667\n219 661 l218 661zM702 80H400000v"+(40+t)+"H742z"}return f},R=function(e,t){switch(e){case"⎜":return"M291 0 H417 V"+t+" H291z M291 0 H417 V"+t+" H291z";case"∣":return"M145 0 H188 V"+t+" H145z M145 0 H188 V"+t+" H145z";case"∥":return"M145 0 H188 V"+t+" H145z M145 0 H188 V"+t+" H145z"+("M367 0 H410 V"+t+" H367z M367 0 H410 V")+t+" H367z";case"⎟":return"M457 0 H583 V"+t+" H457z M457 0 H583 V"+t+" H457z";case"⎢":return"M319 0 H403 V"+t+" H319z M319 0 H403 V"+t+" H319z";case"⎥":return"M263 0 H347 V"+t+" H263z M263 0 H347 V"+t+" H263z";case"⎪":return"M384 0 H504 V"+t+" H384z M384 0 H504 V"+t+" H384z";case"⏐":return"M312 0 H355 V"+t+" H312z M312 0 H355 V"+t+" H312z";case"‖":return"M257 0 H300 V"+t+" H257z M257 0 H300 V"+t+" H257z"+("M478 0 H521 V"+t+" H478z M478 0 H521 V")+t+" H478z";default:return""}},O={doubleleftarrow:"M262 157\nl10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3\n 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28\n 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5\nc2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5\n 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87\n-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7\n-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z\nm8 0v40h399730v-40zm0 194v40h399730v-40z",doublerightarrow:"M399738 392l\n-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5\n 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88\n-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68\n-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18\n-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782\nc-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3\n-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z",leftarrow:"M400000 241H110l3-3c68.7-52.7 113.7-120\n 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8\n-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247\nc-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208\n 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3\n 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202\n l-3-3h399890zM100 241v40h399900v-40z",leftbrace:"M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117\n-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7\n 5-6 9-10 13-.7 1-7.3 1-20 1H6z",leftbraceunder:"M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13\n 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688\n 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7\n-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z",leftgroup:"M400000 80\nH435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0\n 435 0h399565z",leftgroupunder:"M400000 262\nH435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219\n 435 219h399565z",leftharpoon:"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3\n-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5\n-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7\n-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z",leftharpoonplus:"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5\n 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3\n-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7\n-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z\nm0 0v40h400000v-40z",leftharpoondown:"M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333\n 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5\n 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667\n-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z",leftharpoondownplus:"M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12\n 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7\n-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0\nv40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z",lefthook:"M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5\n-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3\n-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21\n 71.5 23h399859zM103 281v-40h399897v40z",leftlinesegment:"M40 281 V428 H0 V94 H40 V241 H400000 v40z\nM40 281 V428 H0 V94 H40 V241 H400000 v40z",leftmapsto:"M40 281 V448H0V74H40V241H400000v40z\nM40 281 V448H0V74H40V241H400000v40z",leftToFrom:"M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23\n-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8\nc28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3\n 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z",longequal:"M0 50 h400000 v40H0z m0 194h40000v40H0z\nM0 50 h400000 v40H0z m0 194h40000v40H0z",midbrace:"M200428 334\nc-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14\n-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7\n 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11\n 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z",midbraceunder:"M199572 214\nc100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14\n 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3\n 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0\n-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z",oiintSize1:"M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6\n-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z\nm368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8\n60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z",oiintSize2:"M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8\n-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z\nm502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2\nc0 110 84 276 504 276s502.4-166 502.4-276z",oiiintSize1:"M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6\n-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z\nm525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0\n85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z",oiiintSize2:"M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8\n-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z\nm770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1\nc0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z",rightarrow:"M0 241v40h399891c-47.3 35.3-84 78-110 128\n-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20\n 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7\n 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85\n-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n 151.7 139 205zm0 0v40h399900v-40z",rightbrace:"M400000 542l\n-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5\ns-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1\nc124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z",rightbraceunder:"M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3\n 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237\n-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z",rightgroup:"M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0\n 3-1 3-3v-38c-76-158-257-219-435-219H0z",rightgroupunder:"M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18\n 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z",rightharpoon:"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3\n-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2\n-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58\n 69.2 92 94.5zm0 0v40h399900v-40z",rightharpoonplus:"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11\n-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7\n 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z\nm0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z",rightharpoondown:"M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8\n 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5\n-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95\n-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z",rightharpoondownplus:"M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8\n 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3\n 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3\n-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z\nm0-194v40h400000v-40zm0 0v40h400000v-40z",righthook:"M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3\n 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0\n-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21\n 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z",rightlinesegment:"M399960 241 V94 h40 V428 h-40 V281 H0 v-40z\nM399960 241 V94 h40 V428 h-40 V281 H0 v-40z",rightToFrom:"M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23\n 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32\n-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142\n-167z M100 147v40h399900v-40zM0 341v40h399900v-40z",twoheadleftarrow:"M0 167c68 40\n 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69\n-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3\n-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19\n-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101\n 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z",twoheadrightarrow:"M400000 167\nc-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3\n 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42\n 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333\n-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70\n 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z",tilde1:"M200 55.538c-77 0-168 73.953-177 73.953-3 0-7\n-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0\n 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0\n 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128\n-68.267.847-113-73.952-191-73.952z",tilde2:"M344 55.266c-142 0-300.638 81.316-311.5 86.418\n-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9\n 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114\nc1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751\n 181.476 676 181.476c-149 0-189-126.21-332-126.21z",tilde3:"M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457\n-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0\n 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697\n 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696\n -338 0-409-156.573-744-156.573z",tilde4:"M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345\n-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409\n 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9\n 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409\n -175.236-744-175.236z",vec:"M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5\n3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11\n10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63\n-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1\n-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59\nH213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359\nc-16-25.333-24-45-24-59z",widehat1:"M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22\nc-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z",widehat2:"M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widehat3:"M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widehat4:"M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widecheck1:"M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1,\n-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z",widecheck2:"M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",widecheck3:"M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",widecheck4:"M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",baraboveleftarrow:"M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202\nc4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5\nc-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130\ns-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47\n121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6\ns2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11\nc0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z\nM100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z",rightarrowabovebar:"M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32\n-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0\n13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39\n-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5\n-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z",baraboveshortleftharpoon:"M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17\nc2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21\nc-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40\nc-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z\nM0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z",rightharpoonaboveshortbar:"M0,241 l0,40c399126,0,399993,0,399993,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z",shortbaraboveleftharpoon:"M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9,\n1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7,\n-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z\nM93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z",shortrightharpoonabovebar:"M53,241l0,40c398570,0,399437,0,399437,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z"};class H{constructor(e){this.children=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.children=e,this.classes=[],this.height=0,this.depth=0,this.maxFontSize=0,this.style={}}hasClass(e){return f.contains(this.classes,e)}toNode(){for(var e=document.createDocumentFragment(),t=0;te.toText();return this.children.map(e).join("")}}var E={"AMS-Regular":{32:[0,0,0,0,.25],65:[0,.68889,0,0,.72222],66:[0,.68889,0,0,.66667],67:[0,.68889,0,0,.72222],68:[0,.68889,0,0,.72222],69:[0,.68889,0,0,.66667],70:[0,.68889,0,0,.61111],71:[0,.68889,0,0,.77778],72:[0,.68889,0,0,.77778],73:[0,.68889,0,0,.38889],74:[.16667,.68889,0,0,.5],75:[0,.68889,0,0,.77778],76:[0,.68889,0,0,.66667],77:[0,.68889,0,0,.94445],78:[0,.68889,0,0,.72222],79:[.16667,.68889,0,0,.77778],80:[0,.68889,0,0,.61111],81:[.16667,.68889,0,0,.77778],82:[0,.68889,0,0,.72222],83:[0,.68889,0,0,.55556],84:[0,.68889,0,0,.66667],85:[0,.68889,0,0,.72222],86:[0,.68889,0,0,.72222],87:[0,.68889,0,0,1],88:[0,.68889,0,0,.72222],89:[0,.68889,0,0,.72222],90:[0,.68889,0,0,.66667],107:[0,.68889,0,0,.55556],160:[0,0,0,0,.25],165:[0,.675,.025,0,.75],174:[.15559,.69224,0,0,.94666],240:[0,.68889,0,0,.55556],295:[0,.68889,0,0,.54028],710:[0,.825,0,0,2.33334],732:[0,.9,0,0,2.33334],770:[0,.825,0,0,2.33334],771:[0,.9,0,0,2.33334],989:[.08167,.58167,0,0,.77778],1008:[0,.43056,.04028,0,.66667],8245:[0,.54986,0,0,.275],8463:[0,.68889,0,0,.54028],8487:[0,.68889,0,0,.72222],8498:[0,.68889,0,0,.55556],8502:[0,.68889,0,0,.66667],8503:[0,.68889,0,0,.44445],8504:[0,.68889,0,0,.66667],8513:[0,.68889,0,0,.63889],8592:[-.03598,.46402,0,0,.5],8594:[-.03598,.46402,0,0,.5],8602:[-.13313,.36687,0,0,1],8603:[-.13313,.36687,0,0,1],8606:[.01354,.52239,0,0,1],8608:[.01354,.52239,0,0,1],8610:[.01354,.52239,0,0,1.11111],8611:[.01354,.52239,0,0,1.11111],8619:[0,.54986,0,0,1],8620:[0,.54986,0,0,1],8621:[-.13313,.37788,0,0,1.38889],8622:[-.13313,.36687,0,0,1],8624:[0,.69224,0,0,.5],8625:[0,.69224,0,0,.5],8630:[0,.43056,0,0,1],8631:[0,.43056,0,0,1],8634:[.08198,.58198,0,0,.77778],8635:[.08198,.58198,0,0,.77778],8638:[.19444,.69224,0,0,.41667],8639:[.19444,.69224,0,0,.41667],8642:[.19444,.69224,0,0,.41667],8643:[.19444,.69224,0,0,.41667],8644:[.1808,.675,0,0,1],8646:[.1808,.675,0,0,1],8647:[.1808,.675,0,0,1],8648:[.19444,.69224,0,0,.83334],8649:[.1808,.675,0,0,1],8650:[.19444,.69224,0,0,.83334],8651:[.01354,.52239,0,0,1],8652:[.01354,.52239,0,0,1],8653:[-.13313,.36687,0,0,1],8654:[-.13313,.36687,0,0,1],8655:[-.13313,.36687,0,0,1],8666:[.13667,.63667,0,0,1],8667:[.13667,.63667,0,0,1],8669:[-.13313,.37788,0,0,1],8672:[-.064,.437,0,0,1.334],8674:[-.064,.437,0,0,1.334],8705:[0,.825,0,0,.5],8708:[0,.68889,0,0,.55556],8709:[.08167,.58167,0,0,.77778],8717:[0,.43056,0,0,.42917],8722:[-.03598,.46402,0,0,.5],8724:[.08198,.69224,0,0,.77778],8726:[.08167,.58167,0,0,.77778],8733:[0,.69224,0,0,.77778],8736:[0,.69224,0,0,.72222],8737:[0,.69224,0,0,.72222],8738:[.03517,.52239,0,0,.72222],8739:[.08167,.58167,0,0,.22222],8740:[.25142,.74111,0,0,.27778],8741:[.08167,.58167,0,0,.38889],8742:[.25142,.74111,0,0,.5],8756:[0,.69224,0,0,.66667],8757:[0,.69224,0,0,.66667],8764:[-.13313,.36687,0,0,.77778],8765:[-.13313,.37788,0,0,.77778],8769:[-.13313,.36687,0,0,.77778],8770:[-.03625,.46375,0,0,.77778],8774:[.30274,.79383,0,0,.77778],8776:[-.01688,.48312,0,0,.77778],8778:[.08167,.58167,0,0,.77778],8782:[.06062,.54986,0,0,.77778],8783:[.06062,.54986,0,0,.77778],8785:[.08198,.58198,0,0,.77778],8786:[.08198,.58198,0,0,.77778],8787:[.08198,.58198,0,0,.77778],8790:[0,.69224,0,0,.77778],8791:[.22958,.72958,0,0,.77778],8796:[.08198,.91667,0,0,.77778],8806:[.25583,.75583,0,0,.77778],8807:[.25583,.75583,0,0,.77778],8808:[.25142,.75726,0,0,.77778],8809:[.25142,.75726,0,0,.77778],8812:[.25583,.75583,0,0,.5],8814:[.20576,.70576,0,0,.77778],8815:[.20576,.70576,0,0,.77778],8816:[.30274,.79383,0,0,.77778],8817:[.30274,.79383,0,0,.77778],8818:[.22958,.72958,0,0,.77778],8819:[.22958,.72958,0,0,.77778],8822:[.1808,.675,0,0,.77778],8823:[.1808,.675,0,0,.77778],8828:[.13667,.63667,0,0,.77778],8829:[.13667,.63667,0,0,.77778],8830:[.22958,.72958,0,0,.77778],8831:[.22958,.72958,0,0,.77778],8832:[.20576,.70576,0,0,.77778],8833:[.20576,.70576,0,0,.77778],8840:[.30274,.79383,0,0,.77778],8841:[.30274,.79383,0,0,.77778],8842:[.13597,.63597,0,0,.77778],8843:[.13597,.63597,0,0,.77778],8847:[.03517,.54986,0,0,.77778],8848:[.03517,.54986,0,0,.77778],8858:[.08198,.58198,0,0,.77778],8859:[.08198,.58198,0,0,.77778],8861:[.08198,.58198,0,0,.77778],8862:[0,.675,0,0,.77778],8863:[0,.675,0,0,.77778],8864:[0,.675,0,0,.77778],8865:[0,.675,0,0,.77778],8872:[0,.69224,0,0,.61111],8873:[0,.69224,0,0,.72222],8874:[0,.69224,0,0,.88889],8876:[0,.68889,0,0,.61111],8877:[0,.68889,0,0,.61111],8878:[0,.68889,0,0,.72222],8879:[0,.68889,0,0,.72222],8882:[.03517,.54986,0,0,.77778],8883:[.03517,.54986,0,0,.77778],8884:[.13667,.63667,0,0,.77778],8885:[.13667,.63667,0,0,.77778],8888:[0,.54986,0,0,1.11111],8890:[.19444,.43056,0,0,.55556],8891:[.19444,.69224,0,0,.61111],8892:[.19444,.69224,0,0,.61111],8901:[0,.54986,0,0,.27778],8903:[.08167,.58167,0,0,.77778],8905:[.08167,.58167,0,0,.77778],8906:[.08167,.58167,0,0,.77778],8907:[0,.69224,0,0,.77778],8908:[0,.69224,0,0,.77778],8909:[-.03598,.46402,0,0,.77778],8910:[0,.54986,0,0,.76042],8911:[0,.54986,0,0,.76042],8912:[.03517,.54986,0,0,.77778],8913:[.03517,.54986,0,0,.77778],8914:[0,.54986,0,0,.66667],8915:[0,.54986,0,0,.66667],8916:[0,.69224,0,0,.66667],8918:[.0391,.5391,0,0,.77778],8919:[.0391,.5391,0,0,.77778],8920:[.03517,.54986,0,0,1.33334],8921:[.03517,.54986,0,0,1.33334],8922:[.38569,.88569,0,0,.77778],8923:[.38569,.88569,0,0,.77778],8926:[.13667,.63667,0,0,.77778],8927:[.13667,.63667,0,0,.77778],8928:[.30274,.79383,0,0,.77778],8929:[.30274,.79383,0,0,.77778],8934:[.23222,.74111,0,0,.77778],8935:[.23222,.74111,0,0,.77778],8936:[.23222,.74111,0,0,.77778],8937:[.23222,.74111,0,0,.77778],8938:[.20576,.70576,0,0,.77778],8939:[.20576,.70576,0,0,.77778],8940:[.30274,.79383,0,0,.77778],8941:[.30274,.79383,0,0,.77778],8994:[.19444,.69224,0,0,.77778],8995:[.19444,.69224,0,0,.77778],9416:[.15559,.69224,0,0,.90222],9484:[0,.69224,0,0,.5],9488:[0,.69224,0,0,.5],9492:[0,.37788,0,0,.5],9496:[0,.37788,0,0,.5],9585:[.19444,.68889,0,0,.88889],9586:[.19444,.74111,0,0,.88889],9632:[0,.675,0,0,.77778],9633:[0,.675,0,0,.77778],9650:[0,.54986,0,0,.72222],9651:[0,.54986,0,0,.72222],9654:[.03517,.54986,0,0,.77778],9660:[0,.54986,0,0,.72222],9661:[0,.54986,0,0,.72222],9664:[.03517,.54986,0,0,.77778],9674:[.11111,.69224,0,0,.66667],9733:[.19444,.69224,0,0,.94445],10003:[0,.69224,0,0,.83334],10016:[0,.69224,0,0,.83334],10731:[.11111,.69224,0,0,.66667],10846:[.19444,.75583,0,0,.61111],10877:[.13667,.63667,0,0,.77778],10878:[.13667,.63667,0,0,.77778],10885:[.25583,.75583,0,0,.77778],10886:[.25583,.75583,0,0,.77778],10887:[.13597,.63597,0,0,.77778],10888:[.13597,.63597,0,0,.77778],10889:[.26167,.75726,0,0,.77778],10890:[.26167,.75726,0,0,.77778],10891:[.48256,.98256,0,0,.77778],10892:[.48256,.98256,0,0,.77778],10901:[.13667,.63667,0,0,.77778],10902:[.13667,.63667,0,0,.77778],10933:[.25142,.75726,0,0,.77778],10934:[.25142,.75726,0,0,.77778],10935:[.26167,.75726,0,0,.77778],10936:[.26167,.75726,0,0,.77778],10937:[.26167,.75726,0,0,.77778],10938:[.26167,.75726,0,0,.77778],10949:[.25583,.75583,0,0,.77778],10950:[.25583,.75583,0,0,.77778],10955:[.28481,.79383,0,0,.77778],10956:[.28481,.79383,0,0,.77778],57350:[.08167,.58167,0,0,.22222],57351:[.08167,.58167,0,0,.38889],57352:[.08167,.58167,0,0,.77778],57353:[0,.43056,.04028,0,.66667],57356:[.25142,.75726,0,0,.77778],57357:[.25142,.75726,0,0,.77778],57358:[.41951,.91951,0,0,.77778],57359:[.30274,.79383,0,0,.77778],57360:[.30274,.79383,0,0,.77778],57361:[.41951,.91951,0,0,.77778],57366:[.25142,.75726,0,0,.77778],57367:[.25142,.75726,0,0,.77778],57368:[.25142,.75726,0,0,.77778],57369:[.25142,.75726,0,0,.77778],57370:[.13597,.63597,0,0,.77778],57371:[.13597,.63597,0,0,.77778]},"Caligraphic-Regular":{32:[0,0,0,0,.25],65:[0,.68333,0,.19445,.79847],66:[0,.68333,.03041,.13889,.65681],67:[0,.68333,.05834,.13889,.52653],68:[0,.68333,.02778,.08334,.77139],69:[0,.68333,.08944,.11111,.52778],70:[0,.68333,.09931,.11111,.71875],71:[.09722,.68333,.0593,.11111,.59487],72:[0,.68333,.00965,.11111,.84452],73:[0,.68333,.07382,0,.54452],74:[.09722,.68333,.18472,.16667,.67778],75:[0,.68333,.01445,.05556,.76195],76:[0,.68333,0,.13889,.68972],77:[0,.68333,0,.13889,1.2009],78:[0,.68333,.14736,.08334,.82049],79:[0,.68333,.02778,.11111,.79611],80:[0,.68333,.08222,.08334,.69556],81:[.09722,.68333,0,.11111,.81667],82:[0,.68333,0,.08334,.8475],83:[0,.68333,.075,.13889,.60556],84:[0,.68333,.25417,0,.54464],85:[0,.68333,.09931,.08334,.62583],86:[0,.68333,.08222,0,.61278],87:[0,.68333,.08222,.08334,.98778],88:[0,.68333,.14643,.13889,.7133],89:[.09722,.68333,.08222,.08334,.66834],90:[0,.68333,.07944,.13889,.72473],160:[0,0,0,0,.25]},"Fraktur-Regular":{32:[0,0,0,0,.25],33:[0,.69141,0,0,.29574],34:[0,.69141,0,0,.21471],38:[0,.69141,0,0,.73786],39:[0,.69141,0,0,.21201],40:[.24982,.74947,0,0,.38865],41:[.24982,.74947,0,0,.38865],42:[0,.62119,0,0,.27764],43:[.08319,.58283,0,0,.75623],44:[0,.10803,0,0,.27764],45:[.08319,.58283,0,0,.75623],46:[0,.10803,0,0,.27764],47:[.24982,.74947,0,0,.50181],48:[0,.47534,0,0,.50181],49:[0,.47534,0,0,.50181],50:[0,.47534,0,0,.50181],51:[.18906,.47534,0,0,.50181],52:[.18906,.47534,0,0,.50181],53:[.18906,.47534,0,0,.50181],54:[0,.69141,0,0,.50181],55:[.18906,.47534,0,0,.50181],56:[0,.69141,0,0,.50181],57:[.18906,.47534,0,0,.50181],58:[0,.47534,0,0,.21606],59:[.12604,.47534,0,0,.21606],61:[-.13099,.36866,0,0,.75623],63:[0,.69141,0,0,.36245],65:[0,.69141,0,0,.7176],66:[0,.69141,0,0,.88397],67:[0,.69141,0,0,.61254],68:[0,.69141,0,0,.83158],69:[0,.69141,0,0,.66278],70:[.12604,.69141,0,0,.61119],71:[0,.69141,0,0,.78539],72:[.06302,.69141,0,0,.7203],73:[0,.69141,0,0,.55448],74:[.12604,.69141,0,0,.55231],75:[0,.69141,0,0,.66845],76:[0,.69141,0,0,.66602],77:[0,.69141,0,0,1.04953],78:[0,.69141,0,0,.83212],79:[0,.69141,0,0,.82699],80:[.18906,.69141,0,0,.82753],81:[.03781,.69141,0,0,.82699],82:[0,.69141,0,0,.82807],83:[0,.69141,0,0,.82861],84:[0,.69141,0,0,.66899],85:[0,.69141,0,0,.64576],86:[0,.69141,0,0,.83131],87:[0,.69141,0,0,1.04602],88:[0,.69141,0,0,.71922],89:[.18906,.69141,0,0,.83293],90:[.12604,.69141,0,0,.60201],91:[.24982,.74947,0,0,.27764],93:[.24982,.74947,0,0,.27764],94:[0,.69141,0,0,.49965],97:[0,.47534,0,0,.50046],98:[0,.69141,0,0,.51315],99:[0,.47534,0,0,.38946],100:[0,.62119,0,0,.49857],101:[0,.47534,0,0,.40053],102:[.18906,.69141,0,0,.32626],103:[.18906,.47534,0,0,.5037],104:[.18906,.69141,0,0,.52126],105:[0,.69141,0,0,.27899],106:[0,.69141,0,0,.28088],107:[0,.69141,0,0,.38946],108:[0,.69141,0,0,.27953],109:[0,.47534,0,0,.76676],110:[0,.47534,0,0,.52666],111:[0,.47534,0,0,.48885],112:[.18906,.52396,0,0,.50046],113:[.18906,.47534,0,0,.48912],114:[0,.47534,0,0,.38919],115:[0,.47534,0,0,.44266],116:[0,.62119,0,0,.33301],117:[0,.47534,0,0,.5172],118:[0,.52396,0,0,.5118],119:[0,.52396,0,0,.77351],120:[.18906,.47534,0,0,.38865],121:[.18906,.47534,0,0,.49884],122:[.18906,.47534,0,0,.39054],160:[0,0,0,0,.25],8216:[0,.69141,0,0,.21471],8217:[0,.69141,0,0,.21471],58112:[0,.62119,0,0,.49749],58113:[0,.62119,0,0,.4983],58114:[.18906,.69141,0,0,.33328],58115:[.18906,.69141,0,0,.32923],58116:[.18906,.47534,0,0,.50343],58117:[0,.69141,0,0,.33301],58118:[0,.62119,0,0,.33409],58119:[0,.47534,0,0,.50073]},"Main-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.35],34:[0,.69444,0,0,.60278],35:[.19444,.69444,0,0,.95833],36:[.05556,.75,0,0,.575],37:[.05556,.75,0,0,.95833],38:[0,.69444,0,0,.89444],39:[0,.69444,0,0,.31944],40:[.25,.75,0,0,.44722],41:[.25,.75,0,0,.44722],42:[0,.75,0,0,.575],43:[.13333,.63333,0,0,.89444],44:[.19444,.15556,0,0,.31944],45:[0,.44444,0,0,.38333],46:[0,.15556,0,0,.31944],47:[.25,.75,0,0,.575],48:[0,.64444,0,0,.575],49:[0,.64444,0,0,.575],50:[0,.64444,0,0,.575],51:[0,.64444,0,0,.575],52:[0,.64444,0,0,.575],53:[0,.64444,0,0,.575],54:[0,.64444,0,0,.575],55:[0,.64444,0,0,.575],56:[0,.64444,0,0,.575],57:[0,.64444,0,0,.575],58:[0,.44444,0,0,.31944],59:[.19444,.44444,0,0,.31944],60:[.08556,.58556,0,0,.89444],61:[-.10889,.39111,0,0,.89444],62:[.08556,.58556,0,0,.89444],63:[0,.69444,0,0,.54305],64:[0,.69444,0,0,.89444],65:[0,.68611,0,0,.86944],66:[0,.68611,0,0,.81805],67:[0,.68611,0,0,.83055],68:[0,.68611,0,0,.88194],69:[0,.68611,0,0,.75555],70:[0,.68611,0,0,.72361],71:[0,.68611,0,0,.90416],72:[0,.68611,0,0,.9],73:[0,.68611,0,0,.43611],74:[0,.68611,0,0,.59444],75:[0,.68611,0,0,.90138],76:[0,.68611,0,0,.69166],77:[0,.68611,0,0,1.09166],78:[0,.68611,0,0,.9],79:[0,.68611,0,0,.86388],80:[0,.68611,0,0,.78611],81:[.19444,.68611,0,0,.86388],82:[0,.68611,0,0,.8625],83:[0,.68611,0,0,.63889],84:[0,.68611,0,0,.8],85:[0,.68611,0,0,.88472],86:[0,.68611,.01597,0,.86944],87:[0,.68611,.01597,0,1.18888],88:[0,.68611,0,0,.86944],89:[0,.68611,.02875,0,.86944],90:[0,.68611,0,0,.70277],91:[.25,.75,0,0,.31944],92:[.25,.75,0,0,.575],93:[.25,.75,0,0,.31944],94:[0,.69444,0,0,.575],95:[.31,.13444,.03194,0,.575],97:[0,.44444,0,0,.55902],98:[0,.69444,0,0,.63889],99:[0,.44444,0,0,.51111],100:[0,.69444,0,0,.63889],101:[0,.44444,0,0,.52708],102:[0,.69444,.10903,0,.35139],103:[.19444,.44444,.01597,0,.575],104:[0,.69444,0,0,.63889],105:[0,.69444,0,0,.31944],106:[.19444,.69444,0,0,.35139],107:[0,.69444,0,0,.60694],108:[0,.69444,0,0,.31944],109:[0,.44444,0,0,.95833],110:[0,.44444,0,0,.63889],111:[0,.44444,0,0,.575],112:[.19444,.44444,0,0,.63889],113:[.19444,.44444,0,0,.60694],114:[0,.44444,0,0,.47361],115:[0,.44444,0,0,.45361],116:[0,.63492,0,0,.44722],117:[0,.44444,0,0,.63889],118:[0,.44444,.01597,0,.60694],119:[0,.44444,.01597,0,.83055],120:[0,.44444,0,0,.60694],121:[.19444,.44444,.01597,0,.60694],122:[0,.44444,0,0,.51111],123:[.25,.75,0,0,.575],124:[.25,.75,0,0,.31944],125:[.25,.75,0,0,.575],126:[.35,.34444,0,0,.575],160:[0,0,0,0,.25],163:[0,.69444,0,0,.86853],168:[0,.69444,0,0,.575],172:[0,.44444,0,0,.76666],176:[0,.69444,0,0,.86944],177:[.13333,.63333,0,0,.89444],184:[.17014,0,0,0,.51111],198:[0,.68611,0,0,1.04166],215:[.13333,.63333,0,0,.89444],216:[.04861,.73472,0,0,.89444],223:[0,.69444,0,0,.59722],230:[0,.44444,0,0,.83055],247:[.13333,.63333,0,0,.89444],248:[.09722,.54167,0,0,.575],305:[0,.44444,0,0,.31944],338:[0,.68611,0,0,1.16944],339:[0,.44444,0,0,.89444],567:[.19444,.44444,0,0,.35139],710:[0,.69444,0,0,.575],711:[0,.63194,0,0,.575],713:[0,.59611,0,0,.575],714:[0,.69444,0,0,.575],715:[0,.69444,0,0,.575],728:[0,.69444,0,0,.575],729:[0,.69444,0,0,.31944],730:[0,.69444,0,0,.86944],732:[0,.69444,0,0,.575],733:[0,.69444,0,0,.575],915:[0,.68611,0,0,.69166],916:[0,.68611,0,0,.95833],920:[0,.68611,0,0,.89444],923:[0,.68611,0,0,.80555],926:[0,.68611,0,0,.76666],928:[0,.68611,0,0,.9],931:[0,.68611,0,0,.83055],933:[0,.68611,0,0,.89444],934:[0,.68611,0,0,.83055],936:[0,.68611,0,0,.89444],937:[0,.68611,0,0,.83055],8211:[0,.44444,.03194,0,.575],8212:[0,.44444,.03194,0,1.14999],8216:[0,.69444,0,0,.31944],8217:[0,.69444,0,0,.31944],8220:[0,.69444,0,0,.60278],8221:[0,.69444,0,0,.60278],8224:[.19444,.69444,0,0,.51111],8225:[.19444,.69444,0,0,.51111],8242:[0,.55556,0,0,.34444],8407:[0,.72444,.15486,0,.575],8463:[0,.69444,0,0,.66759],8465:[0,.69444,0,0,.83055],8467:[0,.69444,0,0,.47361],8472:[.19444,.44444,0,0,.74027],8476:[0,.69444,0,0,.83055],8501:[0,.69444,0,0,.70277],8592:[-.10889,.39111,0,0,1.14999],8593:[.19444,.69444,0,0,.575],8594:[-.10889,.39111,0,0,1.14999],8595:[.19444,.69444,0,0,.575],8596:[-.10889,.39111,0,0,1.14999],8597:[.25,.75,0,0,.575],8598:[.19444,.69444,0,0,1.14999],8599:[.19444,.69444,0,0,1.14999],8600:[.19444,.69444,0,0,1.14999],8601:[.19444,.69444,0,0,1.14999],8636:[-.10889,.39111,0,0,1.14999],8637:[-.10889,.39111,0,0,1.14999],8640:[-.10889,.39111,0,0,1.14999],8641:[-.10889,.39111,0,0,1.14999],8656:[-.10889,.39111,0,0,1.14999],8657:[.19444,.69444,0,0,.70277],8658:[-.10889,.39111,0,0,1.14999],8659:[.19444,.69444,0,0,.70277],8660:[-.10889,.39111,0,0,1.14999],8661:[.25,.75,0,0,.70277],8704:[0,.69444,0,0,.63889],8706:[0,.69444,.06389,0,.62847],8707:[0,.69444,0,0,.63889],8709:[.05556,.75,0,0,.575],8711:[0,.68611,0,0,.95833],8712:[.08556,.58556,0,0,.76666],8715:[.08556,.58556,0,0,.76666],8722:[.13333,.63333,0,0,.89444],8723:[.13333,.63333,0,0,.89444],8725:[.25,.75,0,0,.575],8726:[.25,.75,0,0,.575],8727:[-.02778,.47222,0,0,.575],8728:[-.02639,.47361,0,0,.575],8729:[-.02639,.47361,0,0,.575],8730:[.18,.82,0,0,.95833],8733:[0,.44444,0,0,.89444],8734:[0,.44444,0,0,1.14999],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.31944],8741:[.25,.75,0,0,.575],8743:[0,.55556,0,0,.76666],8744:[0,.55556,0,0,.76666],8745:[0,.55556,0,0,.76666],8746:[0,.55556,0,0,.76666],8747:[.19444,.69444,.12778,0,.56875],8764:[-.10889,.39111,0,0,.89444],8768:[.19444,.69444,0,0,.31944],8771:[.00222,.50222,0,0,.89444],8773:[.027,.638,0,0,.894],8776:[.02444,.52444,0,0,.89444],8781:[.00222,.50222,0,0,.89444],8801:[.00222,.50222,0,0,.89444],8804:[.19667,.69667,0,0,.89444],8805:[.19667,.69667,0,0,.89444],8810:[.08556,.58556,0,0,1.14999],8811:[.08556,.58556,0,0,1.14999],8826:[.08556,.58556,0,0,.89444],8827:[.08556,.58556,0,0,.89444],8834:[.08556,.58556,0,0,.89444],8835:[.08556,.58556,0,0,.89444],8838:[.19667,.69667,0,0,.89444],8839:[.19667,.69667,0,0,.89444],8846:[0,.55556,0,0,.76666],8849:[.19667,.69667,0,0,.89444],8850:[.19667,.69667,0,0,.89444],8851:[0,.55556,0,0,.76666],8852:[0,.55556,0,0,.76666],8853:[.13333,.63333,0,0,.89444],8854:[.13333,.63333,0,0,.89444],8855:[.13333,.63333,0,0,.89444],8856:[.13333,.63333,0,0,.89444],8857:[.13333,.63333,0,0,.89444],8866:[0,.69444,0,0,.70277],8867:[0,.69444,0,0,.70277],8868:[0,.69444,0,0,.89444],8869:[0,.69444,0,0,.89444],8900:[-.02639,.47361,0,0,.575],8901:[-.02639,.47361,0,0,.31944],8902:[-.02778,.47222,0,0,.575],8968:[.25,.75,0,0,.51111],8969:[.25,.75,0,0,.51111],8970:[.25,.75,0,0,.51111],8971:[.25,.75,0,0,.51111],8994:[-.13889,.36111,0,0,1.14999],8995:[-.13889,.36111,0,0,1.14999],9651:[.19444,.69444,0,0,1.02222],9657:[-.02778,.47222,0,0,.575],9661:[.19444,.69444,0,0,1.02222],9667:[-.02778,.47222,0,0,.575],9711:[.19444,.69444,0,0,1.14999],9824:[.12963,.69444,0,0,.89444],9825:[.12963,.69444,0,0,.89444],9826:[.12963,.69444,0,0,.89444],9827:[.12963,.69444,0,0,.89444],9837:[0,.75,0,0,.44722],9838:[.19444,.69444,0,0,.44722],9839:[.19444,.69444,0,0,.44722],10216:[.25,.75,0,0,.44722],10217:[.25,.75,0,0,.44722],10815:[0,.68611,0,0,.9],10927:[.19667,.69667,0,0,.89444],10928:[.19667,.69667,0,0,.89444],57376:[.19444,.69444,0,0,0]},"Main-BoldItalic":{32:[0,0,0,0,.25],33:[0,.69444,.11417,0,.38611],34:[0,.69444,.07939,0,.62055],35:[.19444,.69444,.06833,0,.94444],37:[.05556,.75,.12861,0,.94444],38:[0,.69444,.08528,0,.88555],39:[0,.69444,.12945,0,.35555],40:[.25,.75,.15806,0,.47333],41:[.25,.75,.03306,0,.47333],42:[0,.75,.14333,0,.59111],43:[.10333,.60333,.03306,0,.88555],44:[.19444,.14722,0,0,.35555],45:[0,.44444,.02611,0,.41444],46:[0,.14722,0,0,.35555],47:[.25,.75,.15806,0,.59111],48:[0,.64444,.13167,0,.59111],49:[0,.64444,.13167,0,.59111],50:[0,.64444,.13167,0,.59111],51:[0,.64444,.13167,0,.59111],52:[.19444,.64444,.13167,0,.59111],53:[0,.64444,.13167,0,.59111],54:[0,.64444,.13167,0,.59111],55:[.19444,.64444,.13167,0,.59111],56:[0,.64444,.13167,0,.59111],57:[0,.64444,.13167,0,.59111],58:[0,.44444,.06695,0,.35555],59:[.19444,.44444,.06695,0,.35555],61:[-.10889,.39111,.06833,0,.88555],63:[0,.69444,.11472,0,.59111],64:[0,.69444,.09208,0,.88555],65:[0,.68611,0,0,.86555],66:[0,.68611,.0992,0,.81666],67:[0,.68611,.14208,0,.82666],68:[0,.68611,.09062,0,.87555],69:[0,.68611,.11431,0,.75666],70:[0,.68611,.12903,0,.72722],71:[0,.68611,.07347,0,.89527],72:[0,.68611,.17208,0,.8961],73:[0,.68611,.15681,0,.47166],74:[0,.68611,.145,0,.61055],75:[0,.68611,.14208,0,.89499],76:[0,.68611,0,0,.69777],77:[0,.68611,.17208,0,1.07277],78:[0,.68611,.17208,0,.8961],79:[0,.68611,.09062,0,.85499],80:[0,.68611,.0992,0,.78721],81:[.19444,.68611,.09062,0,.85499],82:[0,.68611,.02559,0,.85944],83:[0,.68611,.11264,0,.64999],84:[0,.68611,.12903,0,.7961],85:[0,.68611,.17208,0,.88083],86:[0,.68611,.18625,0,.86555],87:[0,.68611,.18625,0,1.15999],88:[0,.68611,.15681,0,.86555],89:[0,.68611,.19803,0,.86555],90:[0,.68611,.14208,0,.70888],91:[.25,.75,.1875,0,.35611],93:[.25,.75,.09972,0,.35611],94:[0,.69444,.06709,0,.59111],95:[.31,.13444,.09811,0,.59111],97:[0,.44444,.09426,0,.59111],98:[0,.69444,.07861,0,.53222],99:[0,.44444,.05222,0,.53222],100:[0,.69444,.10861,0,.59111],101:[0,.44444,.085,0,.53222],102:[.19444,.69444,.21778,0,.4],103:[.19444,.44444,.105,0,.53222],104:[0,.69444,.09426,0,.59111],105:[0,.69326,.11387,0,.35555],106:[.19444,.69326,.1672,0,.35555],107:[0,.69444,.11111,0,.53222],108:[0,.69444,.10861,0,.29666],109:[0,.44444,.09426,0,.94444],110:[0,.44444,.09426,0,.64999],111:[0,.44444,.07861,0,.59111],112:[.19444,.44444,.07861,0,.59111],113:[.19444,.44444,.105,0,.53222],114:[0,.44444,.11111,0,.50167],115:[0,.44444,.08167,0,.48694],116:[0,.63492,.09639,0,.385],117:[0,.44444,.09426,0,.62055],118:[0,.44444,.11111,0,.53222],119:[0,.44444,.11111,0,.76777],120:[0,.44444,.12583,0,.56055],121:[.19444,.44444,.105,0,.56166],122:[0,.44444,.13889,0,.49055],126:[.35,.34444,.11472,0,.59111],160:[0,0,0,0,.25],168:[0,.69444,.11473,0,.59111],176:[0,.69444,0,0,.94888],184:[.17014,0,0,0,.53222],198:[0,.68611,.11431,0,1.02277],216:[.04861,.73472,.09062,0,.88555],223:[.19444,.69444,.09736,0,.665],230:[0,.44444,.085,0,.82666],248:[.09722,.54167,.09458,0,.59111],305:[0,.44444,.09426,0,.35555],338:[0,.68611,.11431,0,1.14054],339:[0,.44444,.085,0,.82666],567:[.19444,.44444,.04611,0,.385],710:[0,.69444,.06709,0,.59111],711:[0,.63194,.08271,0,.59111],713:[0,.59444,.10444,0,.59111],714:[0,.69444,.08528,0,.59111],715:[0,.69444,0,0,.59111],728:[0,.69444,.10333,0,.59111],729:[0,.69444,.12945,0,.35555],730:[0,.69444,0,0,.94888],732:[0,.69444,.11472,0,.59111],733:[0,.69444,.11472,0,.59111],915:[0,.68611,.12903,0,.69777],916:[0,.68611,0,0,.94444],920:[0,.68611,.09062,0,.88555],923:[0,.68611,0,0,.80666],926:[0,.68611,.15092,0,.76777],928:[0,.68611,.17208,0,.8961],931:[0,.68611,.11431,0,.82666],933:[0,.68611,.10778,0,.88555],934:[0,.68611,.05632,0,.82666],936:[0,.68611,.10778,0,.88555],937:[0,.68611,.0992,0,.82666],8211:[0,.44444,.09811,0,.59111],8212:[0,.44444,.09811,0,1.18221],8216:[0,.69444,.12945,0,.35555],8217:[0,.69444,.12945,0,.35555],8220:[0,.69444,.16772,0,.62055],8221:[0,.69444,.07939,0,.62055]},"Main-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.12417,0,.30667],34:[0,.69444,.06961,0,.51444],35:[.19444,.69444,.06616,0,.81777],37:[.05556,.75,.13639,0,.81777],38:[0,.69444,.09694,0,.76666],39:[0,.69444,.12417,0,.30667],40:[.25,.75,.16194,0,.40889],41:[.25,.75,.03694,0,.40889],42:[0,.75,.14917,0,.51111],43:[.05667,.56167,.03694,0,.76666],44:[.19444,.10556,0,0,.30667],45:[0,.43056,.02826,0,.35778],46:[0,.10556,0,0,.30667],47:[.25,.75,.16194,0,.51111],48:[0,.64444,.13556,0,.51111],49:[0,.64444,.13556,0,.51111],50:[0,.64444,.13556,0,.51111],51:[0,.64444,.13556,0,.51111],52:[.19444,.64444,.13556,0,.51111],53:[0,.64444,.13556,0,.51111],54:[0,.64444,.13556,0,.51111],55:[.19444,.64444,.13556,0,.51111],56:[0,.64444,.13556,0,.51111],57:[0,.64444,.13556,0,.51111],58:[0,.43056,.0582,0,.30667],59:[.19444,.43056,.0582,0,.30667],61:[-.13313,.36687,.06616,0,.76666],63:[0,.69444,.1225,0,.51111],64:[0,.69444,.09597,0,.76666],65:[0,.68333,0,0,.74333],66:[0,.68333,.10257,0,.70389],67:[0,.68333,.14528,0,.71555],68:[0,.68333,.09403,0,.755],69:[0,.68333,.12028,0,.67833],70:[0,.68333,.13305,0,.65277],71:[0,.68333,.08722,0,.77361],72:[0,.68333,.16389,0,.74333],73:[0,.68333,.15806,0,.38555],74:[0,.68333,.14028,0,.525],75:[0,.68333,.14528,0,.76888],76:[0,.68333,0,0,.62722],77:[0,.68333,.16389,0,.89666],78:[0,.68333,.16389,0,.74333],79:[0,.68333,.09403,0,.76666],80:[0,.68333,.10257,0,.67833],81:[.19444,.68333,.09403,0,.76666],82:[0,.68333,.03868,0,.72944],83:[0,.68333,.11972,0,.56222],84:[0,.68333,.13305,0,.71555],85:[0,.68333,.16389,0,.74333],86:[0,.68333,.18361,0,.74333],87:[0,.68333,.18361,0,.99888],88:[0,.68333,.15806,0,.74333],89:[0,.68333,.19383,0,.74333],90:[0,.68333,.14528,0,.61333],91:[.25,.75,.1875,0,.30667],93:[.25,.75,.10528,0,.30667],94:[0,.69444,.06646,0,.51111],95:[.31,.12056,.09208,0,.51111],97:[0,.43056,.07671,0,.51111],98:[0,.69444,.06312,0,.46],99:[0,.43056,.05653,0,.46],100:[0,.69444,.10333,0,.51111],101:[0,.43056,.07514,0,.46],102:[.19444,.69444,.21194,0,.30667],103:[.19444,.43056,.08847,0,.46],104:[0,.69444,.07671,0,.51111],105:[0,.65536,.1019,0,.30667],106:[.19444,.65536,.14467,0,.30667],107:[0,.69444,.10764,0,.46],108:[0,.69444,.10333,0,.25555],109:[0,.43056,.07671,0,.81777],110:[0,.43056,.07671,0,.56222],111:[0,.43056,.06312,0,.51111],112:[.19444,.43056,.06312,0,.51111],113:[.19444,.43056,.08847,0,.46],114:[0,.43056,.10764,0,.42166],115:[0,.43056,.08208,0,.40889],116:[0,.61508,.09486,0,.33222],117:[0,.43056,.07671,0,.53666],118:[0,.43056,.10764,0,.46],119:[0,.43056,.10764,0,.66444],120:[0,.43056,.12042,0,.46389],121:[.19444,.43056,.08847,0,.48555],122:[0,.43056,.12292,0,.40889],126:[.35,.31786,.11585,0,.51111],160:[0,0,0,0,.25],168:[0,.66786,.10474,0,.51111],176:[0,.69444,0,0,.83129],184:[.17014,0,0,0,.46],198:[0,.68333,.12028,0,.88277],216:[.04861,.73194,.09403,0,.76666],223:[.19444,.69444,.10514,0,.53666],230:[0,.43056,.07514,0,.71555],248:[.09722,.52778,.09194,0,.51111],338:[0,.68333,.12028,0,.98499],339:[0,.43056,.07514,0,.71555],710:[0,.69444,.06646,0,.51111],711:[0,.62847,.08295,0,.51111],713:[0,.56167,.10333,0,.51111],714:[0,.69444,.09694,0,.51111],715:[0,.69444,0,0,.51111],728:[0,.69444,.10806,0,.51111],729:[0,.66786,.11752,0,.30667],730:[0,.69444,0,0,.83129],732:[0,.66786,.11585,0,.51111],733:[0,.69444,.1225,0,.51111],915:[0,.68333,.13305,0,.62722],916:[0,.68333,0,0,.81777],920:[0,.68333,.09403,0,.76666],923:[0,.68333,0,0,.69222],926:[0,.68333,.15294,0,.66444],928:[0,.68333,.16389,0,.74333],931:[0,.68333,.12028,0,.71555],933:[0,.68333,.11111,0,.76666],934:[0,.68333,.05986,0,.71555],936:[0,.68333,.11111,0,.76666],937:[0,.68333,.10257,0,.71555],8211:[0,.43056,.09208,0,.51111],8212:[0,.43056,.09208,0,1.02222],8216:[0,.69444,.12417,0,.30667],8217:[0,.69444,.12417,0,.30667],8220:[0,.69444,.1685,0,.51444],8221:[0,.69444,.06961,0,.51444],8463:[0,.68889,0,0,.54028]},"Main-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.27778],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.77778],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.19444,.10556,0,0,.27778],45:[0,.43056,0,0,.33333],46:[0,.10556,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.64444,0,0,.5],49:[0,.64444,0,0,.5],50:[0,.64444,0,0,.5],51:[0,.64444,0,0,.5],52:[0,.64444,0,0,.5],53:[0,.64444,0,0,.5],54:[0,.64444,0,0,.5],55:[0,.64444,0,0,.5],56:[0,.64444,0,0,.5],57:[0,.64444,0,0,.5],58:[0,.43056,0,0,.27778],59:[.19444,.43056,0,0,.27778],60:[.0391,.5391,0,0,.77778],61:[-.13313,.36687,0,0,.77778],62:[.0391,.5391,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.77778],65:[0,.68333,0,0,.75],66:[0,.68333,0,0,.70834],67:[0,.68333,0,0,.72222],68:[0,.68333,0,0,.76389],69:[0,.68333,0,0,.68056],70:[0,.68333,0,0,.65278],71:[0,.68333,0,0,.78472],72:[0,.68333,0,0,.75],73:[0,.68333,0,0,.36111],74:[0,.68333,0,0,.51389],75:[0,.68333,0,0,.77778],76:[0,.68333,0,0,.625],77:[0,.68333,0,0,.91667],78:[0,.68333,0,0,.75],79:[0,.68333,0,0,.77778],80:[0,.68333,0,0,.68056],81:[.19444,.68333,0,0,.77778],82:[0,.68333,0,0,.73611],83:[0,.68333,0,0,.55556],84:[0,.68333,0,0,.72222],85:[0,.68333,0,0,.75],86:[0,.68333,.01389,0,.75],87:[0,.68333,.01389,0,1.02778],88:[0,.68333,0,0,.75],89:[0,.68333,.025,0,.75],90:[0,.68333,0,0,.61111],91:[.25,.75,0,0,.27778],92:[.25,.75,0,0,.5],93:[.25,.75,0,0,.27778],94:[0,.69444,0,0,.5],95:[.31,.12056,.02778,0,.5],97:[0,.43056,0,0,.5],98:[0,.69444,0,0,.55556],99:[0,.43056,0,0,.44445],100:[0,.69444,0,0,.55556],101:[0,.43056,0,0,.44445],102:[0,.69444,.07778,0,.30556],103:[.19444,.43056,.01389,0,.5],104:[0,.69444,0,0,.55556],105:[0,.66786,0,0,.27778],106:[.19444,.66786,0,0,.30556],107:[0,.69444,0,0,.52778],108:[0,.69444,0,0,.27778],109:[0,.43056,0,0,.83334],110:[0,.43056,0,0,.55556],111:[0,.43056,0,0,.5],112:[.19444,.43056,0,0,.55556],113:[.19444,.43056,0,0,.52778],114:[0,.43056,0,0,.39167],115:[0,.43056,0,0,.39445],116:[0,.61508,0,0,.38889],117:[0,.43056,0,0,.55556],118:[0,.43056,.01389,0,.52778],119:[0,.43056,.01389,0,.72222],120:[0,.43056,0,0,.52778],121:[.19444,.43056,.01389,0,.52778],122:[0,.43056,0,0,.44445],123:[.25,.75,0,0,.5],124:[.25,.75,0,0,.27778],125:[.25,.75,0,0,.5],126:[.35,.31786,0,0,.5],160:[0,0,0,0,.25],163:[0,.69444,0,0,.76909],167:[.19444,.69444,0,0,.44445],168:[0,.66786,0,0,.5],172:[0,.43056,0,0,.66667],176:[0,.69444,0,0,.75],177:[.08333,.58333,0,0,.77778],182:[.19444,.69444,0,0,.61111],184:[.17014,0,0,0,.44445],198:[0,.68333,0,0,.90278],215:[.08333,.58333,0,0,.77778],216:[.04861,.73194,0,0,.77778],223:[0,.69444,0,0,.5],230:[0,.43056,0,0,.72222],247:[.08333,.58333,0,0,.77778],248:[.09722,.52778,0,0,.5],305:[0,.43056,0,0,.27778],338:[0,.68333,0,0,1.01389],339:[0,.43056,0,0,.77778],567:[.19444,.43056,0,0,.30556],710:[0,.69444,0,0,.5],711:[0,.62847,0,0,.5],713:[0,.56778,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.66786,0,0,.27778],730:[0,.69444,0,0,.75],732:[0,.66786,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.68333,0,0,.625],916:[0,.68333,0,0,.83334],920:[0,.68333,0,0,.77778],923:[0,.68333,0,0,.69445],926:[0,.68333,0,0,.66667],928:[0,.68333,0,0,.75],931:[0,.68333,0,0,.72222],933:[0,.68333,0,0,.77778],934:[0,.68333,0,0,.72222],936:[0,.68333,0,0,.77778],937:[0,.68333,0,0,.72222],8211:[0,.43056,.02778,0,.5],8212:[0,.43056,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5],8224:[.19444,.69444,0,0,.44445],8225:[.19444,.69444,0,0,.44445],8230:[0,.123,0,0,1.172],8242:[0,.55556,0,0,.275],8407:[0,.71444,.15382,0,.5],8463:[0,.68889,0,0,.54028],8465:[0,.69444,0,0,.72222],8467:[0,.69444,0,.11111,.41667],8472:[.19444,.43056,0,.11111,.63646],8476:[0,.69444,0,0,.72222],8501:[0,.69444,0,0,.61111],8592:[-.13313,.36687,0,0,1],8593:[.19444,.69444,0,0,.5],8594:[-.13313,.36687,0,0,1],8595:[.19444,.69444,0,0,.5],8596:[-.13313,.36687,0,0,1],8597:[.25,.75,0,0,.5],8598:[.19444,.69444,0,0,1],8599:[.19444,.69444,0,0,1],8600:[.19444,.69444,0,0,1],8601:[.19444,.69444,0,0,1],8614:[.011,.511,0,0,1],8617:[.011,.511,0,0,1.126],8618:[.011,.511,0,0,1.126],8636:[-.13313,.36687,0,0,1],8637:[-.13313,.36687,0,0,1],8640:[-.13313,.36687,0,0,1],8641:[-.13313,.36687,0,0,1],8652:[.011,.671,0,0,1],8656:[-.13313,.36687,0,0,1],8657:[.19444,.69444,0,0,.61111],8658:[-.13313,.36687,0,0,1],8659:[.19444,.69444,0,0,.61111],8660:[-.13313,.36687,0,0,1],8661:[.25,.75,0,0,.61111],8704:[0,.69444,0,0,.55556],8706:[0,.69444,.05556,.08334,.5309],8707:[0,.69444,0,0,.55556],8709:[.05556,.75,0,0,.5],8711:[0,.68333,0,0,.83334],8712:[.0391,.5391,0,0,.66667],8715:[.0391,.5391,0,0,.66667],8722:[.08333,.58333,0,0,.77778],8723:[.08333,.58333,0,0,.77778],8725:[.25,.75,0,0,.5],8726:[.25,.75,0,0,.5],8727:[-.03472,.46528,0,0,.5],8728:[-.05555,.44445,0,0,.5],8729:[-.05555,.44445,0,0,.5],8730:[.2,.8,0,0,.83334],8733:[0,.43056,0,0,.77778],8734:[0,.43056,0,0,1],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.27778],8741:[.25,.75,0,0,.5],8743:[0,.55556,0,0,.66667],8744:[0,.55556,0,0,.66667],8745:[0,.55556,0,0,.66667],8746:[0,.55556,0,0,.66667],8747:[.19444,.69444,.11111,0,.41667],8764:[-.13313,.36687,0,0,.77778],8768:[.19444,.69444,0,0,.27778],8771:[-.03625,.46375,0,0,.77778],8773:[-.022,.589,0,0,.778],8776:[-.01688,.48312,0,0,.77778],8781:[-.03625,.46375,0,0,.77778],8784:[-.133,.673,0,0,.778],8801:[-.03625,.46375,0,0,.77778],8804:[.13597,.63597,0,0,.77778],8805:[.13597,.63597,0,0,.77778],8810:[.0391,.5391,0,0,1],8811:[.0391,.5391,0,0,1],8826:[.0391,.5391,0,0,.77778],8827:[.0391,.5391,0,0,.77778],8834:[.0391,.5391,0,0,.77778],8835:[.0391,.5391,0,0,.77778],8838:[.13597,.63597,0,0,.77778],8839:[.13597,.63597,0,0,.77778],8846:[0,.55556,0,0,.66667],8849:[.13597,.63597,0,0,.77778],8850:[.13597,.63597,0,0,.77778],8851:[0,.55556,0,0,.66667],8852:[0,.55556,0,0,.66667],8853:[.08333,.58333,0,0,.77778],8854:[.08333,.58333,0,0,.77778],8855:[.08333,.58333,0,0,.77778],8856:[.08333,.58333,0,0,.77778],8857:[.08333,.58333,0,0,.77778],8866:[0,.69444,0,0,.61111],8867:[0,.69444,0,0,.61111],8868:[0,.69444,0,0,.77778],8869:[0,.69444,0,0,.77778],8872:[.249,.75,0,0,.867],8900:[-.05555,.44445,0,0,.5],8901:[-.05555,.44445,0,0,.27778],8902:[-.03472,.46528,0,0,.5],8904:[.005,.505,0,0,.9],8942:[.03,.903,0,0,.278],8943:[-.19,.313,0,0,1.172],8945:[-.1,.823,0,0,1.282],8968:[.25,.75,0,0,.44445],8969:[.25,.75,0,0,.44445],8970:[.25,.75,0,0,.44445],8971:[.25,.75,0,0,.44445],8994:[-.14236,.35764,0,0,1],8995:[-.14236,.35764,0,0,1],9136:[.244,.744,0,0,.412],9137:[.244,.745,0,0,.412],9651:[.19444,.69444,0,0,.88889],9657:[-.03472,.46528,0,0,.5],9661:[.19444,.69444,0,0,.88889],9667:[-.03472,.46528,0,0,.5],9711:[.19444,.69444,0,0,1],9824:[.12963,.69444,0,0,.77778],9825:[.12963,.69444,0,0,.77778],9826:[.12963,.69444,0,0,.77778],9827:[.12963,.69444,0,0,.77778],9837:[0,.75,0,0,.38889],9838:[.19444,.69444,0,0,.38889],9839:[.19444,.69444,0,0,.38889],10216:[.25,.75,0,0,.38889],10217:[.25,.75,0,0,.38889],10222:[.244,.744,0,0,.412],10223:[.244,.745,0,0,.412],10229:[.011,.511,0,0,1.609],10230:[.011,.511,0,0,1.638],10231:[.011,.511,0,0,1.859],10232:[.024,.525,0,0,1.609],10233:[.024,.525,0,0,1.638],10234:[.024,.525,0,0,1.858],10236:[.011,.511,0,0,1.638],10815:[0,.68333,0,0,.75],10927:[.13597,.63597,0,0,.77778],10928:[.13597,.63597,0,0,.77778],57376:[.19444,.69444,0,0,0]},"Math-BoldItalic":{32:[0,0,0,0,.25],48:[0,.44444,0,0,.575],49:[0,.44444,0,0,.575],50:[0,.44444,0,0,.575],51:[.19444,.44444,0,0,.575],52:[.19444,.44444,0,0,.575],53:[.19444,.44444,0,0,.575],54:[0,.64444,0,0,.575],55:[.19444,.44444,0,0,.575],56:[0,.64444,0,0,.575],57:[.19444,.44444,0,0,.575],65:[0,.68611,0,0,.86944],66:[0,.68611,.04835,0,.8664],67:[0,.68611,.06979,0,.81694],68:[0,.68611,.03194,0,.93812],69:[0,.68611,.05451,0,.81007],70:[0,.68611,.15972,0,.68889],71:[0,.68611,0,0,.88673],72:[0,.68611,.08229,0,.98229],73:[0,.68611,.07778,0,.51111],74:[0,.68611,.10069,0,.63125],75:[0,.68611,.06979,0,.97118],76:[0,.68611,0,0,.75555],77:[0,.68611,.11424,0,1.14201],78:[0,.68611,.11424,0,.95034],79:[0,.68611,.03194,0,.83666],80:[0,.68611,.15972,0,.72309],81:[.19444,.68611,0,0,.86861],82:[0,.68611,.00421,0,.87235],83:[0,.68611,.05382,0,.69271],84:[0,.68611,.15972,0,.63663],85:[0,.68611,.11424,0,.80027],86:[0,.68611,.25555,0,.67778],87:[0,.68611,.15972,0,1.09305],88:[0,.68611,.07778,0,.94722],89:[0,.68611,.25555,0,.67458],90:[0,.68611,.06979,0,.77257],97:[0,.44444,0,0,.63287],98:[0,.69444,0,0,.52083],99:[0,.44444,0,0,.51342],100:[0,.69444,0,0,.60972],101:[0,.44444,0,0,.55361],102:[.19444,.69444,.11042,0,.56806],103:[.19444,.44444,.03704,0,.5449],104:[0,.69444,0,0,.66759],105:[0,.69326,0,0,.4048],106:[.19444,.69326,.0622,0,.47083],107:[0,.69444,.01852,0,.6037],108:[0,.69444,.0088,0,.34815],109:[0,.44444,0,0,1.0324],110:[0,.44444,0,0,.71296],111:[0,.44444,0,0,.58472],112:[.19444,.44444,0,0,.60092],113:[.19444,.44444,.03704,0,.54213],114:[0,.44444,.03194,0,.5287],115:[0,.44444,0,0,.53125],116:[0,.63492,0,0,.41528],117:[0,.44444,0,0,.68102],118:[0,.44444,.03704,0,.56666],119:[0,.44444,.02778,0,.83148],120:[0,.44444,0,0,.65903],121:[.19444,.44444,.03704,0,.59028],122:[0,.44444,.04213,0,.55509],160:[0,0,0,0,.25],915:[0,.68611,.15972,0,.65694],916:[0,.68611,0,0,.95833],920:[0,.68611,.03194,0,.86722],923:[0,.68611,0,0,.80555],926:[0,.68611,.07458,0,.84125],928:[0,.68611,.08229,0,.98229],931:[0,.68611,.05451,0,.88507],933:[0,.68611,.15972,0,.67083],934:[0,.68611,0,0,.76666],936:[0,.68611,.11653,0,.71402],937:[0,.68611,.04835,0,.8789],945:[0,.44444,0,0,.76064],946:[.19444,.69444,.03403,0,.65972],947:[.19444,.44444,.06389,0,.59003],948:[0,.69444,.03819,0,.52222],949:[0,.44444,0,0,.52882],950:[.19444,.69444,.06215,0,.50833],951:[.19444,.44444,.03704,0,.6],952:[0,.69444,.03194,0,.5618],953:[0,.44444,0,0,.41204],954:[0,.44444,0,0,.66759],955:[0,.69444,0,0,.67083],956:[.19444,.44444,0,0,.70787],957:[0,.44444,.06898,0,.57685],958:[.19444,.69444,.03021,0,.50833],959:[0,.44444,0,0,.58472],960:[0,.44444,.03704,0,.68241],961:[.19444,.44444,0,0,.6118],962:[.09722,.44444,.07917,0,.42361],963:[0,.44444,.03704,0,.68588],964:[0,.44444,.13472,0,.52083],965:[0,.44444,.03704,0,.63055],966:[.19444,.44444,0,0,.74722],967:[.19444,.44444,0,0,.71805],968:[.19444,.69444,.03704,0,.75833],969:[0,.44444,.03704,0,.71782],977:[0,.69444,0,0,.69155],981:[.19444,.69444,0,0,.7125],982:[0,.44444,.03194,0,.975],1009:[.19444,.44444,0,0,.6118],1013:[0,.44444,0,0,.48333],57649:[0,.44444,0,0,.39352],57911:[.19444,.44444,0,0,.43889]},"Math-Italic":{32:[0,0,0,0,.25],48:[0,.43056,0,0,.5],49:[0,.43056,0,0,.5],50:[0,.43056,0,0,.5],51:[.19444,.43056,0,0,.5],52:[.19444,.43056,0,0,.5],53:[.19444,.43056,0,0,.5],54:[0,.64444,0,0,.5],55:[.19444,.43056,0,0,.5],56:[0,.64444,0,0,.5],57:[.19444,.43056,0,0,.5],65:[0,.68333,0,.13889,.75],66:[0,.68333,.05017,.08334,.75851],67:[0,.68333,.07153,.08334,.71472],68:[0,.68333,.02778,.05556,.82792],69:[0,.68333,.05764,.08334,.7382],70:[0,.68333,.13889,.08334,.64306],71:[0,.68333,0,.08334,.78625],72:[0,.68333,.08125,.05556,.83125],73:[0,.68333,.07847,.11111,.43958],74:[0,.68333,.09618,.16667,.55451],75:[0,.68333,.07153,.05556,.84931],76:[0,.68333,0,.02778,.68056],77:[0,.68333,.10903,.08334,.97014],78:[0,.68333,.10903,.08334,.80347],79:[0,.68333,.02778,.08334,.76278],80:[0,.68333,.13889,.08334,.64201],81:[.19444,.68333,0,.08334,.79056],82:[0,.68333,.00773,.08334,.75929],83:[0,.68333,.05764,.08334,.6132],84:[0,.68333,.13889,.08334,.58438],85:[0,.68333,.10903,.02778,.68278],86:[0,.68333,.22222,0,.58333],87:[0,.68333,.13889,0,.94445],88:[0,.68333,.07847,.08334,.82847],89:[0,.68333,.22222,0,.58056],90:[0,.68333,.07153,.08334,.68264],97:[0,.43056,0,0,.52859],98:[0,.69444,0,0,.42917],99:[0,.43056,0,.05556,.43276],100:[0,.69444,0,.16667,.52049],101:[0,.43056,0,.05556,.46563],102:[.19444,.69444,.10764,.16667,.48959],103:[.19444,.43056,.03588,.02778,.47697],104:[0,.69444,0,0,.57616],105:[0,.65952,0,0,.34451],106:[.19444,.65952,.05724,0,.41181],107:[0,.69444,.03148,0,.5206],108:[0,.69444,.01968,.08334,.29838],109:[0,.43056,0,0,.87801],110:[0,.43056,0,0,.60023],111:[0,.43056,0,.05556,.48472],112:[.19444,.43056,0,.08334,.50313],113:[.19444,.43056,.03588,.08334,.44641],114:[0,.43056,.02778,.05556,.45116],115:[0,.43056,0,.05556,.46875],116:[0,.61508,0,.08334,.36111],117:[0,.43056,0,.02778,.57246],118:[0,.43056,.03588,.02778,.48472],119:[0,.43056,.02691,.08334,.71592],120:[0,.43056,0,.02778,.57153],121:[.19444,.43056,.03588,.05556,.49028],122:[0,.43056,.04398,.05556,.46505],160:[0,0,0,0,.25],915:[0,.68333,.13889,.08334,.61528],916:[0,.68333,0,.16667,.83334],920:[0,.68333,.02778,.08334,.76278],923:[0,.68333,0,.16667,.69445],926:[0,.68333,.07569,.08334,.74236],928:[0,.68333,.08125,.05556,.83125],931:[0,.68333,.05764,.08334,.77986],933:[0,.68333,.13889,.05556,.58333],934:[0,.68333,0,.08334,.66667],936:[0,.68333,.11,.05556,.61222],937:[0,.68333,.05017,.08334,.7724],945:[0,.43056,.0037,.02778,.6397],946:[.19444,.69444,.05278,.08334,.56563],947:[.19444,.43056,.05556,0,.51773],948:[0,.69444,.03785,.05556,.44444],949:[0,.43056,0,.08334,.46632],950:[.19444,.69444,.07378,.08334,.4375],951:[.19444,.43056,.03588,.05556,.49653],952:[0,.69444,.02778,.08334,.46944],953:[0,.43056,0,.05556,.35394],954:[0,.43056,0,0,.57616],955:[0,.69444,0,0,.58334],956:[.19444,.43056,0,.02778,.60255],957:[0,.43056,.06366,.02778,.49398],958:[.19444,.69444,.04601,.11111,.4375],959:[0,.43056,0,.05556,.48472],960:[0,.43056,.03588,0,.57003],961:[.19444,.43056,0,.08334,.51702],962:[.09722,.43056,.07986,.08334,.36285],963:[0,.43056,.03588,0,.57141],964:[0,.43056,.1132,.02778,.43715],965:[0,.43056,.03588,.02778,.54028],966:[.19444,.43056,0,.08334,.65417],967:[.19444,.43056,0,.05556,.62569],968:[.19444,.69444,.03588,.11111,.65139],969:[0,.43056,.03588,0,.62245],977:[0,.69444,0,.08334,.59144],981:[.19444,.69444,0,.08334,.59583],982:[0,.43056,.02778,0,.82813],1009:[.19444,.43056,0,.08334,.51702],1013:[0,.43056,0,.05556,.4059],57649:[0,.43056,0,.02778,.32246],57911:[.19444,.43056,0,.08334,.38403]},"SansSerif-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.36667],34:[0,.69444,0,0,.55834],35:[.19444,.69444,0,0,.91667],36:[.05556,.75,0,0,.55],37:[.05556,.75,0,0,1.02912],38:[0,.69444,0,0,.83056],39:[0,.69444,0,0,.30556],40:[.25,.75,0,0,.42778],41:[.25,.75,0,0,.42778],42:[0,.75,0,0,.55],43:[.11667,.61667,0,0,.85556],44:[.10556,.13056,0,0,.30556],45:[0,.45833,0,0,.36667],46:[0,.13056,0,0,.30556],47:[.25,.75,0,0,.55],48:[0,.69444,0,0,.55],49:[0,.69444,0,0,.55],50:[0,.69444,0,0,.55],51:[0,.69444,0,0,.55],52:[0,.69444,0,0,.55],53:[0,.69444,0,0,.55],54:[0,.69444,0,0,.55],55:[0,.69444,0,0,.55],56:[0,.69444,0,0,.55],57:[0,.69444,0,0,.55],58:[0,.45833,0,0,.30556],59:[.10556,.45833,0,0,.30556],61:[-.09375,.40625,0,0,.85556],63:[0,.69444,0,0,.51945],64:[0,.69444,0,0,.73334],65:[0,.69444,0,0,.73334],66:[0,.69444,0,0,.73334],67:[0,.69444,0,0,.70278],68:[0,.69444,0,0,.79445],69:[0,.69444,0,0,.64167],70:[0,.69444,0,0,.61111],71:[0,.69444,0,0,.73334],72:[0,.69444,0,0,.79445],73:[0,.69444,0,0,.33056],74:[0,.69444,0,0,.51945],75:[0,.69444,0,0,.76389],76:[0,.69444,0,0,.58056],77:[0,.69444,0,0,.97778],78:[0,.69444,0,0,.79445],79:[0,.69444,0,0,.79445],80:[0,.69444,0,0,.70278],81:[.10556,.69444,0,0,.79445],82:[0,.69444,0,0,.70278],83:[0,.69444,0,0,.61111],84:[0,.69444,0,0,.73334],85:[0,.69444,0,0,.76389],86:[0,.69444,.01528,0,.73334],87:[0,.69444,.01528,0,1.03889],88:[0,.69444,0,0,.73334],89:[0,.69444,.0275,0,.73334],90:[0,.69444,0,0,.67223],91:[.25,.75,0,0,.34306],93:[.25,.75,0,0,.34306],94:[0,.69444,0,0,.55],95:[.35,.10833,.03056,0,.55],97:[0,.45833,0,0,.525],98:[0,.69444,0,0,.56111],99:[0,.45833,0,0,.48889],100:[0,.69444,0,0,.56111],101:[0,.45833,0,0,.51111],102:[0,.69444,.07639,0,.33611],103:[.19444,.45833,.01528,0,.55],104:[0,.69444,0,0,.56111],105:[0,.69444,0,0,.25556],106:[.19444,.69444,0,0,.28611],107:[0,.69444,0,0,.53056],108:[0,.69444,0,0,.25556],109:[0,.45833,0,0,.86667],110:[0,.45833,0,0,.56111],111:[0,.45833,0,0,.55],112:[.19444,.45833,0,0,.56111],113:[.19444,.45833,0,0,.56111],114:[0,.45833,.01528,0,.37222],115:[0,.45833,0,0,.42167],116:[0,.58929,0,0,.40417],117:[0,.45833,0,0,.56111],118:[0,.45833,.01528,0,.5],119:[0,.45833,.01528,0,.74445],120:[0,.45833,0,0,.5],121:[.19444,.45833,.01528,0,.5],122:[0,.45833,0,0,.47639],126:[.35,.34444,0,0,.55],160:[0,0,0,0,.25],168:[0,.69444,0,0,.55],176:[0,.69444,0,0,.73334],180:[0,.69444,0,0,.55],184:[.17014,0,0,0,.48889],305:[0,.45833,0,0,.25556],567:[.19444,.45833,0,0,.28611],710:[0,.69444,0,0,.55],711:[0,.63542,0,0,.55],713:[0,.63778,0,0,.55],728:[0,.69444,0,0,.55],729:[0,.69444,0,0,.30556],730:[0,.69444,0,0,.73334],732:[0,.69444,0,0,.55],733:[0,.69444,0,0,.55],915:[0,.69444,0,0,.58056],916:[0,.69444,0,0,.91667],920:[0,.69444,0,0,.85556],923:[0,.69444,0,0,.67223],926:[0,.69444,0,0,.73334],928:[0,.69444,0,0,.79445],931:[0,.69444,0,0,.79445],933:[0,.69444,0,0,.85556],934:[0,.69444,0,0,.79445],936:[0,.69444,0,0,.85556],937:[0,.69444,0,0,.79445],8211:[0,.45833,.03056,0,.55],8212:[0,.45833,.03056,0,1.10001],8216:[0,.69444,0,0,.30556],8217:[0,.69444,0,0,.30556],8220:[0,.69444,0,0,.55834],8221:[0,.69444,0,0,.55834]},"SansSerif-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.05733,0,.31945],34:[0,.69444,.00316,0,.5],35:[.19444,.69444,.05087,0,.83334],36:[.05556,.75,.11156,0,.5],37:[.05556,.75,.03126,0,.83334],38:[0,.69444,.03058,0,.75834],39:[0,.69444,.07816,0,.27778],40:[.25,.75,.13164,0,.38889],41:[.25,.75,.02536,0,.38889],42:[0,.75,.11775,0,.5],43:[.08333,.58333,.02536,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,.01946,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,.13164,0,.5],48:[0,.65556,.11156,0,.5],49:[0,.65556,.11156,0,.5],50:[0,.65556,.11156,0,.5],51:[0,.65556,.11156,0,.5],52:[0,.65556,.11156,0,.5],53:[0,.65556,.11156,0,.5],54:[0,.65556,.11156,0,.5],55:[0,.65556,.11156,0,.5],56:[0,.65556,.11156,0,.5],57:[0,.65556,.11156,0,.5],58:[0,.44444,.02502,0,.27778],59:[.125,.44444,.02502,0,.27778],61:[-.13,.37,.05087,0,.77778],63:[0,.69444,.11809,0,.47222],64:[0,.69444,.07555,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,.08293,0,.66667],67:[0,.69444,.11983,0,.63889],68:[0,.69444,.07555,0,.72223],69:[0,.69444,.11983,0,.59722],70:[0,.69444,.13372,0,.56945],71:[0,.69444,.11983,0,.66667],72:[0,.69444,.08094,0,.70834],73:[0,.69444,.13372,0,.27778],74:[0,.69444,.08094,0,.47222],75:[0,.69444,.11983,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,.08094,0,.875],78:[0,.69444,.08094,0,.70834],79:[0,.69444,.07555,0,.73611],80:[0,.69444,.08293,0,.63889],81:[.125,.69444,.07555,0,.73611],82:[0,.69444,.08293,0,.64584],83:[0,.69444,.09205,0,.55556],84:[0,.69444,.13372,0,.68056],85:[0,.69444,.08094,0,.6875],86:[0,.69444,.1615,0,.66667],87:[0,.69444,.1615,0,.94445],88:[0,.69444,.13372,0,.66667],89:[0,.69444,.17261,0,.66667],90:[0,.69444,.11983,0,.61111],91:[.25,.75,.15942,0,.28889],93:[.25,.75,.08719,0,.28889],94:[0,.69444,.0799,0,.5],95:[.35,.09444,.08616,0,.5],97:[0,.44444,.00981,0,.48056],98:[0,.69444,.03057,0,.51667],99:[0,.44444,.08336,0,.44445],100:[0,.69444,.09483,0,.51667],101:[0,.44444,.06778,0,.44445],102:[0,.69444,.21705,0,.30556],103:[.19444,.44444,.10836,0,.5],104:[0,.69444,.01778,0,.51667],105:[0,.67937,.09718,0,.23889],106:[.19444,.67937,.09162,0,.26667],107:[0,.69444,.08336,0,.48889],108:[0,.69444,.09483,0,.23889],109:[0,.44444,.01778,0,.79445],110:[0,.44444,.01778,0,.51667],111:[0,.44444,.06613,0,.5],112:[.19444,.44444,.0389,0,.51667],113:[.19444,.44444,.04169,0,.51667],114:[0,.44444,.10836,0,.34167],115:[0,.44444,.0778,0,.38333],116:[0,.57143,.07225,0,.36111],117:[0,.44444,.04169,0,.51667],118:[0,.44444,.10836,0,.46111],119:[0,.44444,.10836,0,.68334],120:[0,.44444,.09169,0,.46111],121:[.19444,.44444,.10836,0,.46111],122:[0,.44444,.08752,0,.43472],126:[.35,.32659,.08826,0,.5],160:[0,0,0,0,.25],168:[0,.67937,.06385,0,.5],176:[0,.69444,0,0,.73752],184:[.17014,0,0,0,.44445],305:[0,.44444,.04169,0,.23889],567:[.19444,.44444,.04169,0,.26667],710:[0,.69444,.0799,0,.5],711:[0,.63194,.08432,0,.5],713:[0,.60889,.08776,0,.5],714:[0,.69444,.09205,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,.09483,0,.5],729:[0,.67937,.07774,0,.27778],730:[0,.69444,0,0,.73752],732:[0,.67659,.08826,0,.5],733:[0,.69444,.09205,0,.5],915:[0,.69444,.13372,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,.07555,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,.12816,0,.66667],928:[0,.69444,.08094,0,.70834],931:[0,.69444,.11983,0,.72222],933:[0,.69444,.09031,0,.77778],934:[0,.69444,.04603,0,.72222],936:[0,.69444,.09031,0,.77778],937:[0,.69444,.08293,0,.72222],8211:[0,.44444,.08616,0,.5],8212:[0,.44444,.08616,0,1],8216:[0,.69444,.07816,0,.27778],8217:[0,.69444,.07816,0,.27778],8220:[0,.69444,.14205,0,.5],8221:[0,.69444,.00316,0,.5]},"SansSerif-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.31945],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.75834],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,0,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.65556,0,0,.5],49:[0,.65556,0,0,.5],50:[0,.65556,0,0,.5],51:[0,.65556,0,0,.5],52:[0,.65556,0,0,.5],53:[0,.65556,0,0,.5],54:[0,.65556,0,0,.5],55:[0,.65556,0,0,.5],56:[0,.65556,0,0,.5],57:[0,.65556,0,0,.5],58:[0,.44444,0,0,.27778],59:[.125,.44444,0,0,.27778],61:[-.13,.37,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,0,0,.66667],67:[0,.69444,0,0,.63889],68:[0,.69444,0,0,.72223],69:[0,.69444,0,0,.59722],70:[0,.69444,0,0,.56945],71:[0,.69444,0,0,.66667],72:[0,.69444,0,0,.70834],73:[0,.69444,0,0,.27778],74:[0,.69444,0,0,.47222],75:[0,.69444,0,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,0,0,.875],78:[0,.69444,0,0,.70834],79:[0,.69444,0,0,.73611],80:[0,.69444,0,0,.63889],81:[.125,.69444,0,0,.73611],82:[0,.69444,0,0,.64584],83:[0,.69444,0,0,.55556],84:[0,.69444,0,0,.68056],85:[0,.69444,0,0,.6875],86:[0,.69444,.01389,0,.66667],87:[0,.69444,.01389,0,.94445],88:[0,.69444,0,0,.66667],89:[0,.69444,.025,0,.66667],90:[0,.69444,0,0,.61111],91:[.25,.75,0,0,.28889],93:[.25,.75,0,0,.28889],94:[0,.69444,0,0,.5],95:[.35,.09444,.02778,0,.5],97:[0,.44444,0,0,.48056],98:[0,.69444,0,0,.51667],99:[0,.44444,0,0,.44445],100:[0,.69444,0,0,.51667],101:[0,.44444,0,0,.44445],102:[0,.69444,.06944,0,.30556],103:[.19444,.44444,.01389,0,.5],104:[0,.69444,0,0,.51667],105:[0,.67937,0,0,.23889],106:[.19444,.67937,0,0,.26667],107:[0,.69444,0,0,.48889],108:[0,.69444,0,0,.23889],109:[0,.44444,0,0,.79445],110:[0,.44444,0,0,.51667],111:[0,.44444,0,0,.5],112:[.19444,.44444,0,0,.51667],113:[.19444,.44444,0,0,.51667],114:[0,.44444,.01389,0,.34167],115:[0,.44444,0,0,.38333],116:[0,.57143,0,0,.36111],117:[0,.44444,0,0,.51667],118:[0,.44444,.01389,0,.46111],119:[0,.44444,.01389,0,.68334],120:[0,.44444,0,0,.46111],121:[.19444,.44444,.01389,0,.46111],122:[0,.44444,0,0,.43472],126:[.35,.32659,0,0,.5],160:[0,0,0,0,.25],168:[0,.67937,0,0,.5],176:[0,.69444,0,0,.66667],184:[.17014,0,0,0,.44445],305:[0,.44444,0,0,.23889],567:[.19444,.44444,0,0,.26667],710:[0,.69444,0,0,.5],711:[0,.63194,0,0,.5],713:[0,.60889,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.67937,0,0,.27778],730:[0,.69444,0,0,.66667],732:[0,.67659,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.69444,0,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,0,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,0,0,.66667],928:[0,.69444,0,0,.70834],931:[0,.69444,0,0,.72222],933:[0,.69444,0,0,.77778],934:[0,.69444,0,0,.72222],936:[0,.69444,0,0,.77778],937:[0,.69444,0,0,.72222],8211:[0,.44444,.02778,0,.5],8212:[0,.44444,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5]},"Script-Regular":{32:[0,0,0,0,.25],65:[0,.7,.22925,0,.80253],66:[0,.7,.04087,0,.90757],67:[0,.7,.1689,0,.66619],68:[0,.7,.09371,0,.77443],69:[0,.7,.18583,0,.56162],70:[0,.7,.13634,0,.89544],71:[0,.7,.17322,0,.60961],72:[0,.7,.29694,0,.96919],73:[0,.7,.19189,0,.80907],74:[.27778,.7,.19189,0,1.05159],75:[0,.7,.31259,0,.91364],76:[0,.7,.19189,0,.87373],77:[0,.7,.15981,0,1.08031],78:[0,.7,.3525,0,.9015],79:[0,.7,.08078,0,.73787],80:[0,.7,.08078,0,1.01262],81:[0,.7,.03305,0,.88282],82:[0,.7,.06259,0,.85],83:[0,.7,.19189,0,.86767],84:[0,.7,.29087,0,.74697],85:[0,.7,.25815,0,.79996],86:[0,.7,.27523,0,.62204],87:[0,.7,.27523,0,.80532],88:[0,.7,.26006,0,.94445],89:[0,.7,.2939,0,.70961],90:[0,.7,.24037,0,.8212],160:[0,0,0,0,.25]},"Size1-Regular":{32:[0,0,0,0,.25],40:[.35001,.85,0,0,.45834],41:[.35001,.85,0,0,.45834],47:[.35001,.85,0,0,.57778],91:[.35001,.85,0,0,.41667],92:[.35001,.85,0,0,.57778],93:[.35001,.85,0,0,.41667],123:[.35001,.85,0,0,.58334],125:[.35001,.85,0,0,.58334],160:[0,0,0,0,.25],710:[0,.72222,0,0,.55556],732:[0,.72222,0,0,.55556],770:[0,.72222,0,0,.55556],771:[0,.72222,0,0,.55556],8214:[-.00099,.601,0,0,.77778],8593:[1e-5,.6,0,0,.66667],8595:[1e-5,.6,0,0,.66667],8657:[1e-5,.6,0,0,.77778],8659:[1e-5,.6,0,0,.77778],8719:[.25001,.75,0,0,.94445],8720:[.25001,.75,0,0,.94445],8721:[.25001,.75,0,0,1.05556],8730:[.35001,.85,0,0,1],8739:[-.00599,.606,0,0,.33333],8741:[-.00599,.606,0,0,.55556],8747:[.30612,.805,.19445,0,.47222],8748:[.306,.805,.19445,0,.47222],8749:[.306,.805,.19445,0,.47222],8750:[.30612,.805,.19445,0,.47222],8896:[.25001,.75,0,0,.83334],8897:[.25001,.75,0,0,.83334],8898:[.25001,.75,0,0,.83334],8899:[.25001,.75,0,0,.83334],8968:[.35001,.85,0,0,.47222],8969:[.35001,.85,0,0,.47222],8970:[.35001,.85,0,0,.47222],8971:[.35001,.85,0,0,.47222],9168:[-.00099,.601,0,0,.66667],10216:[.35001,.85,0,0,.47222],10217:[.35001,.85,0,0,.47222],10752:[.25001,.75,0,0,1.11111],10753:[.25001,.75,0,0,1.11111],10754:[.25001,.75,0,0,1.11111],10756:[.25001,.75,0,0,.83334],10758:[.25001,.75,0,0,.83334]},"Size2-Regular":{32:[0,0,0,0,.25],40:[.65002,1.15,0,0,.59722],41:[.65002,1.15,0,0,.59722],47:[.65002,1.15,0,0,.81111],91:[.65002,1.15,0,0,.47222],92:[.65002,1.15,0,0,.81111],93:[.65002,1.15,0,0,.47222],123:[.65002,1.15,0,0,.66667],125:[.65002,1.15,0,0,.66667],160:[0,0,0,0,.25],710:[0,.75,0,0,1],732:[0,.75,0,0,1],770:[0,.75,0,0,1],771:[0,.75,0,0,1],8719:[.55001,1.05,0,0,1.27778],8720:[.55001,1.05,0,0,1.27778],8721:[.55001,1.05,0,0,1.44445],8730:[.65002,1.15,0,0,1],8747:[.86225,1.36,.44445,0,.55556],8748:[.862,1.36,.44445,0,.55556],8749:[.862,1.36,.44445,0,.55556],8750:[.86225,1.36,.44445,0,.55556],8896:[.55001,1.05,0,0,1.11111],8897:[.55001,1.05,0,0,1.11111],8898:[.55001,1.05,0,0,1.11111],8899:[.55001,1.05,0,0,1.11111],8968:[.65002,1.15,0,0,.52778],8969:[.65002,1.15,0,0,.52778],8970:[.65002,1.15,0,0,.52778],8971:[.65002,1.15,0,0,.52778],10216:[.65002,1.15,0,0,.61111],10217:[.65002,1.15,0,0,.61111],10752:[.55001,1.05,0,0,1.51112],10753:[.55001,1.05,0,0,1.51112],10754:[.55001,1.05,0,0,1.51112],10756:[.55001,1.05,0,0,1.11111],10758:[.55001,1.05,0,0,1.11111]},"Size3-Regular":{32:[0,0,0,0,.25],40:[.95003,1.45,0,0,.73611],41:[.95003,1.45,0,0,.73611],47:[.95003,1.45,0,0,1.04445],91:[.95003,1.45,0,0,.52778],92:[.95003,1.45,0,0,1.04445],93:[.95003,1.45,0,0,.52778],123:[.95003,1.45,0,0,.75],125:[.95003,1.45,0,0,.75],160:[0,0,0,0,.25],710:[0,.75,0,0,1.44445],732:[0,.75,0,0,1.44445],770:[0,.75,0,0,1.44445],771:[0,.75,0,0,1.44445],8730:[.95003,1.45,0,0,1],8968:[.95003,1.45,0,0,.58334],8969:[.95003,1.45,0,0,.58334],8970:[.95003,1.45,0,0,.58334],8971:[.95003,1.45,0,0,.58334],10216:[.95003,1.45,0,0,.75],10217:[.95003,1.45,0,0,.75]},"Size4-Regular":{32:[0,0,0,0,.25],40:[1.25003,1.75,0,0,.79167],41:[1.25003,1.75,0,0,.79167],47:[1.25003,1.75,0,0,1.27778],91:[1.25003,1.75,0,0,.58334],92:[1.25003,1.75,0,0,1.27778],93:[1.25003,1.75,0,0,.58334],123:[1.25003,1.75,0,0,.80556],125:[1.25003,1.75,0,0,.80556],160:[0,0,0,0,.25],710:[0,.825,0,0,1.8889],732:[0,.825,0,0,1.8889],770:[0,.825,0,0,1.8889],771:[0,.825,0,0,1.8889],8730:[1.25003,1.75,0,0,1],8968:[1.25003,1.75,0,0,.63889],8969:[1.25003,1.75,0,0,.63889],8970:[1.25003,1.75,0,0,.63889],8971:[1.25003,1.75,0,0,.63889],9115:[.64502,1.155,0,0,.875],9116:[1e-5,.6,0,0,.875],9117:[.64502,1.155,0,0,.875],9118:[.64502,1.155,0,0,.875],9119:[1e-5,.6,0,0,.875],9120:[.64502,1.155,0,0,.875],9121:[.64502,1.155,0,0,.66667],9122:[-.00099,.601,0,0,.66667],9123:[.64502,1.155,0,0,.66667],9124:[.64502,1.155,0,0,.66667],9125:[-.00099,.601,0,0,.66667],9126:[.64502,1.155,0,0,.66667],9127:[1e-5,.9,0,0,.88889],9128:[.65002,1.15,0,0,.88889],9129:[.90001,0,0,0,.88889],9130:[0,.3,0,0,.88889],9131:[1e-5,.9,0,0,.88889],9132:[.65002,1.15,0,0,.88889],9133:[.90001,0,0,0,.88889],9143:[.88502,.915,0,0,1.05556],10216:[1.25003,1.75,0,0,.80556],10217:[1.25003,1.75,0,0,.80556],57344:[-.00499,.605,0,0,1.05556],57345:[-.00499,.605,0,0,1.05556],57680:[0,.12,0,0,.45],57681:[0,.12,0,0,.45],57682:[0,.12,0,0,.45],57683:[0,.12,0,0,.45]},"Typewriter-Regular":{32:[0,0,0,0,.525],33:[0,.61111,0,0,.525],34:[0,.61111,0,0,.525],35:[0,.61111,0,0,.525],36:[.08333,.69444,0,0,.525],37:[.08333,.69444,0,0,.525],38:[0,.61111,0,0,.525],39:[0,.61111,0,0,.525],40:[.08333,.69444,0,0,.525],41:[.08333,.69444,0,0,.525],42:[0,.52083,0,0,.525],43:[-.08056,.53055,0,0,.525],44:[.13889,.125,0,0,.525],45:[-.08056,.53055,0,0,.525],46:[0,.125,0,0,.525],47:[.08333,.69444,0,0,.525],48:[0,.61111,0,0,.525],49:[0,.61111,0,0,.525],50:[0,.61111,0,0,.525],51:[0,.61111,0,0,.525],52:[0,.61111,0,0,.525],53:[0,.61111,0,0,.525],54:[0,.61111,0,0,.525],55:[0,.61111,0,0,.525],56:[0,.61111,0,0,.525],57:[0,.61111,0,0,.525],58:[0,.43056,0,0,.525],59:[.13889,.43056,0,0,.525],60:[-.05556,.55556,0,0,.525],61:[-.19549,.41562,0,0,.525],62:[-.05556,.55556,0,0,.525],63:[0,.61111,0,0,.525],64:[0,.61111,0,0,.525],65:[0,.61111,0,0,.525],66:[0,.61111,0,0,.525],67:[0,.61111,0,0,.525],68:[0,.61111,0,0,.525],69:[0,.61111,0,0,.525],70:[0,.61111,0,0,.525],71:[0,.61111,0,0,.525],72:[0,.61111,0,0,.525],73:[0,.61111,0,0,.525],74:[0,.61111,0,0,.525],75:[0,.61111,0,0,.525],76:[0,.61111,0,0,.525],77:[0,.61111,0,0,.525],78:[0,.61111,0,0,.525],79:[0,.61111,0,0,.525],80:[0,.61111,0,0,.525],81:[.13889,.61111,0,0,.525],82:[0,.61111,0,0,.525],83:[0,.61111,0,0,.525],84:[0,.61111,0,0,.525],85:[0,.61111,0,0,.525],86:[0,.61111,0,0,.525],87:[0,.61111,0,0,.525],88:[0,.61111,0,0,.525],89:[0,.61111,0,0,.525],90:[0,.61111,0,0,.525],91:[.08333,.69444,0,0,.525],92:[.08333,.69444,0,0,.525],93:[.08333,.69444,0,0,.525],94:[0,.61111,0,0,.525],95:[.09514,0,0,0,.525],96:[0,.61111,0,0,.525],97:[0,.43056,0,0,.525],98:[0,.61111,0,0,.525],99:[0,.43056,0,0,.525],100:[0,.61111,0,0,.525],101:[0,.43056,0,0,.525],102:[0,.61111,0,0,.525],103:[.22222,.43056,0,0,.525],104:[0,.61111,0,0,.525],105:[0,.61111,0,0,.525],106:[.22222,.61111,0,0,.525],107:[0,.61111,0,0,.525],108:[0,.61111,0,0,.525],109:[0,.43056,0,0,.525],110:[0,.43056,0,0,.525],111:[0,.43056,0,0,.525],112:[.22222,.43056,0,0,.525],113:[.22222,.43056,0,0,.525],114:[0,.43056,0,0,.525],115:[0,.43056,0,0,.525],116:[0,.55358,0,0,.525],117:[0,.43056,0,0,.525],118:[0,.43056,0,0,.525],119:[0,.43056,0,0,.525],120:[0,.43056,0,0,.525],121:[.22222,.43056,0,0,.525],122:[0,.43056,0,0,.525],123:[.08333,.69444,0,0,.525],124:[.08333,.69444,0,0,.525],125:[.08333,.69444,0,0,.525],126:[0,.61111,0,0,.525],127:[0,.61111,0,0,.525],160:[0,0,0,0,.525],176:[0,.61111,0,0,.525],184:[.19445,0,0,0,.525],305:[0,.43056,0,0,.525],567:[.22222,.43056,0,0,.525],711:[0,.56597,0,0,.525],713:[0,.56555,0,0,.525],714:[0,.61111,0,0,.525],715:[0,.61111,0,0,.525],728:[0,.61111,0,0,.525],730:[0,.61111,0,0,.525],770:[0,.61111,0,0,.525],771:[0,.61111,0,0,.525],776:[0,.61111,0,0,.525],915:[0,.61111,0,0,.525],916:[0,.61111,0,0,.525],920:[0,.61111,0,0,.525],923:[0,.61111,0,0,.525],926:[0,.61111,0,0,.525],928:[0,.61111,0,0,.525],931:[0,.61111,0,0,.525],933:[0,.61111,0,0,.525],934:[0,.61111,0,0,.525],936:[0,.61111,0,0,.525],937:[0,.61111,0,0,.525],8216:[0,.61111,0,0,.525],8217:[0,.61111,0,0,.525],8242:[0,.61111,0,0,.525],9251:[.11111,.21944,0,0,.525]}},L={slant:[.25,.25,.25],space:[0,0,0],stretch:[0,0,0],shrink:[0,0,0],xHeight:[.431,.431,.431],quad:[1,1.171,1.472],extraSpace:[0,0,0],num1:[.677,.732,.925],num2:[.394,.384,.387],num3:[.444,.471,.504],denom1:[.686,.752,1.025],denom2:[.345,.344,.532],sup1:[.413,.503,.504],sup2:[.363,.431,.404],sup3:[.289,.286,.294],sub1:[.15,.143,.2],sub2:[.247,.286,.4],supDrop:[.386,.353,.494],subDrop:[.05,.071,.1],delim1:[2.39,1.7,1.98],delim2:[1.01,1.157,1.42],axisHeight:[.25,.25,.25],defaultRuleThickness:[.04,.049,.049],bigOpSpacing1:[.111,.111,.111],bigOpSpacing2:[.166,.166,.166],bigOpSpacing3:[.2,.2,.2],bigOpSpacing4:[.6,.611,.611],bigOpSpacing5:[.1,.143,.143],sqrtRuleThickness:[.04,.04,.04],ptPerEm:[10,10,10],doubleRuleSep:[.2,.2,.2],arrayRuleWidth:[.04,.04,.04],fboxsep:[.3,.3,.3],fboxrule:[.04,.04,.04]},D={Å:"A",Ð:"D",Þ:"o",å:"a",ð:"d",þ:"o",А:"A",Б:"B",В:"B",Г:"F",Д:"A",Е:"E",Ж:"K",З:"3",И:"N",Й:"N",К:"K",Л:"N",М:"M",Н:"H",О:"O",П:"N",Р:"P",С:"C",Т:"T",У:"y",Ф:"O",Х:"X",Ц:"U",Ч:"h",Ш:"W",Щ:"W",Ъ:"B",Ы:"X",Ь:"B",Э:"3",Ю:"X",Я:"R",а:"a",б:"b",в:"a",г:"r",д:"y",е:"e",ж:"m",з:"e",и:"n",й:"n",к:"n",л:"n",м:"m",н:"n",о:"o",п:"n",р:"p",с:"c",т:"o",у:"y",ф:"b",х:"x",ц:"n",ч:"n",ш:"w",щ:"w",ъ:"a",ы:"m",ь:"a",э:"e",ю:"m",я:"r"};function P(e,t){E[e]=t}function F(e,t,r){if(!E[t])throw Error("Font metrics not found for font: "+t+".");var a=e.charCodeAt(0),n=E[t][a];if(!n&&e[0]in D&&(a=D[e[0]].charCodeAt(0),n=E[t][a]),!n&&"text"===r&&N(a)&&(n=E[t][77]),n)return{depth:n[0],height:n[1],italic:n[2],skew:n[3],width:n[4]}}var V={},G=[[1,1,1],[2,1,1],[3,1,1],[4,2,1],[5,2,1],[6,3,1],[7,4,2],[8,6,3],[9,7,6],[10,8,7],[11,10,9]],U=[.5,.6,.7,.8,.9,1,1.2,1.44,1.728,2.074,2.488],Y=function(e,t){return t.size<2?e:G[e-1][t.size-1]};class X{constructor(e){this.style=void 0,this.color=void 0,this.size=void 0,this.textSize=void 0,this.phantom=void 0,this.font=void 0,this.fontFamily=void 0,this.fontWeight=void 0,this.fontShape=void 0,this.sizeMultiplier=void 0,this.maxSize=void 0,this.minRuleThickness=void 0,this._fontMetrics=void 0,this.style=e.style,this.color=e.color,this.size=e.size||X.BASESIZE,this.textSize=e.textSize||this.size,this.phantom=!!e.phantom,this.font=e.font||"",this.fontFamily=e.fontFamily||"",this.fontWeight=e.fontWeight||"",this.fontShape=e.fontShape||"",this.sizeMultiplier=U[this.size-1],this.maxSize=e.maxSize,this.minRuleThickness=e.minRuleThickness,this._fontMetrics=void 0}extend(e){var t={style:this.style,size:this.size,textSize:this.textSize,color:this.color,phantom:this.phantom,font:this.font,fontFamily:this.fontFamily,fontWeight:this.fontWeight,fontShape:this.fontShape,maxSize:this.maxSize,minRuleThickness:this.minRuleThickness};for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);return new X(t)}havingStyle(e){return this.style===e?this:this.extend({style:e,size:Y(this.textSize,e)})}havingCrampedStyle(){return this.havingStyle(this.style.cramp())}havingSize(e){return this.size===e&&this.textSize===e?this:this.extend({style:this.style.text(),size:e,textSize:e,sizeMultiplier:U[e-1]})}havingBaseStyle(e){e=e||this.style.text();var t=Y(X.BASESIZE,e);return this.size===t&&this.textSize===X.BASESIZE&&this.style===e?this:this.extend({style:e,size:t})}havingBaseSizing(){var e;switch(this.style.id){case 4:case 5:e=3;break;case 6:case 7:e=1;break;default:e=6}return this.extend({style:this.style.text(),size:e})}withColor(e){return this.extend({color:e})}withPhantom(){return this.extend({phantom:!0})}withFont(e){return this.extend({font:e})}withTextFontFamily(e){return this.extend({fontFamily:e,font:""})}withTextFontWeight(e){return this.extend({fontWeight:e,font:""})}withTextFontShape(e){return this.extend({fontShape:e,font:""})}sizingClasses(e){return e.size!==this.size?["sizing","reset-size"+e.size,"size"+this.size]:[]}baseSizingClasses(){return this.size!==X.BASESIZE?["sizing","reset-size"+this.size,"size"+X.BASESIZE]:[]}fontMetrics(){return this._fontMetrics||(this._fontMetrics=function(e){var t;if(!V[t=e>=5?0:e>=3?1:2]){var r=V[t]={cssEmPerMu:L.quad[t]/18};for(var a in L)L.hasOwnProperty(a)&&(r[a]=L[a][t])}return V[t]}(this.size)),this._fontMetrics}getColor(){return this.phantom?"transparent":this.color}}X.BASESIZE=6;var W={pt:1,mm:7227/2540,cm:7227/254,in:72.27,bp:1.00375,pc:12,dd:1238/1157,cc:14856/1157,nd:685/642,nc:1370/107,sp:1/65536,px:1.00375},_={ex:!0,em:!0,mu:!0},j=function(e){return"string"!=typeof e&&(e=e.unit),e in W||e in _||"ex"===e},$=function(e,t){var r,a;if(e.unit in W)r=W[e.unit]/t.fontMetrics().ptPerEm/t.sizeMultiplier;else if("mu"===e.unit)r=t.fontMetrics().cssEmPerMu;else{if(a=t.style.isTight()?t.havingStyle(t.style.text()):t,"ex"===e.unit)r=a.fontMetrics().xHeight;else if("em"===e.unit)r=a.fontMetrics().quad;else throw new i("Invalid unit: '"+e.unit+"'");a!==t&&(r*=a.sizeMultiplier/t.sizeMultiplier)}return Math.min(e.number*r,t.maxSize)},Z=function(e){return+e.toFixed(4)+"em"},K=function(e){return e.filter(e=>e).join(" ")},J=function(e,t,r){if(this.classes=e||[],this.attributes={},this.height=0,this.depth=0,this.maxFontSize=0,this.style=r||{},t){t.style.isTight()&&this.classes.push("mtight");var a=t.getColor();a&&(this.style.color=a)}},Q=function(e){var t=document.createElement(e);for(var r in t.className=K(this.classes),this.style)this.style.hasOwnProperty(r)&&(t.style[r]=this.style[r]);for(var a in this.attributes)this.attributes.hasOwnProperty(a)&&t.setAttribute(a,this.attributes[a]);for(var n=0;n")};class et{constructor(e,t,r,a){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.width=void 0,this.maxFontSize=void 0,this.style=void 0,J.call(this,e,r,a),this.children=t||[]}setAttribute(e,t){this.attributes[e]=t}hasClass(e){return f.contains(this.classes,e)}toNode(){return Q.call(this,"span")}toMarkup(){return ee.call(this,"span")}}class er{constructor(e,t,r,a){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,J.call(this,t,a),this.children=r||[],this.setAttribute("href",e)}setAttribute(e,t){this.attributes[e]=t}hasClass(e){return f.contains(this.classes,e)}toNode(){return Q.call(this,"a")}toMarkup(){return ee.call(this,"a")}}class ea{constructor(e,t,r){this.src=void 0,this.alt=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.alt=t,this.src=e,this.classes=["mord"],this.style=r}hasClass(e){return f.contains(this.classes,e)}toNode(){var e=document.createElement("img");for(var t in e.src=this.src,e.alt=this.alt,e.className="mord",this.style)this.style.hasOwnProperty(t)&&(e.style[t]=this.style[t]);return e}toMarkup(){var e=""+this.alt+"=n[0]&&e<=n[1])return r.name}return null}(this.text.charCodeAt(0));l&&this.classes.push(l+"_fallback"),/[îïíì]/.test(this.text)&&(this.text=en[this.text])}hasClass(e){return f.contains(this.classes,e)}toNode(){var e=document.createTextNode(this.text),t=null;for(var r in this.italic>0&&((t=document.createElement("span")).style.marginRight=Z(this.italic)),this.classes.length>0&&((t=t||document.createElement("span")).className=K(this.classes)),this.style)this.style.hasOwnProperty(r)&&((t=t||document.createElement("span")).style[r]=this.style[r]);return t?(t.appendChild(e),t):e}toMarkup(){var e=!1,t="0&&(r+="margin-right:"+this.italic+"em;"),this.style)this.style.hasOwnProperty(a)&&(r+=f.hyphenate(a)+":"+this.style[a]+";");r&&(e=!0,t+=' style="'+f.escape(r)+'"');var n=f.escape(this.text);return e?(t+=">",t+=n,t+=""):n}}class es{constructor(e,t){this.children=void 0,this.attributes=void 0,this.children=e||[],this.attributes=t||{}}toNode(){var e=document.createElementNS("http://www.w3.org/2000/svg","svg");for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);for(var r=0;r"}}class eo{constructor(e,t){this.pathName=void 0,this.alternate=void 0,this.pathName=e,this.alternate=t}toNode(){var e=document.createElementNS("http://www.w3.org/2000/svg","path");return this.alternate?e.setAttribute("d",this.alternate):e.setAttribute("d",O[this.pathName]),e}toMarkup(){return this.alternate?"":""}}class el{constructor(e){this.attributes=void 0,this.attributes=e||{}}toNode(){var e=document.createElementNS("http://www.w3.org/2000/svg","line");for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);return e}toMarkup(){var e=""}}function eh(e){if(e instanceof ei)return e;throw Error("Expected symbolNode but got "+String(e)+".")}var em={bin:1,close:1,inner:1,open:1,punct:1,rel:1},ec={"accent-token":1,mathord:1,"op-token":1,spacing:1,textord:1},ep={math:{},text:{}};function eu(e,t,r,a,n,i){ep[e][n]={font:t,group:r,replace:a},i&&a&&(ep[e][a]=ep[e][n])}var ed="math",eg="text",ef="main",ev="accent-token",eb="close",ey="inner",ex="mathord",ew="op-token",ek="open",eS="punct",eM="spacing",ez="textord";eu(ed,ef,"rel","≡","\\equiv",!0),eu(ed,ef,"rel","≺","\\prec",!0),eu(ed,ef,"rel","≻","\\succ",!0),eu(ed,ef,"rel","∼","\\sim",!0),eu(ed,ef,"rel","⊥","\\perp"),eu(ed,ef,"rel","⪯","\\preceq",!0),eu(ed,ef,"rel","⪰","\\succeq",!0),eu(ed,ef,"rel","≃","\\simeq",!0),eu(ed,ef,"rel","∣","\\mid",!0),eu(ed,ef,"rel","≪","\\ll",!0),eu(ed,ef,"rel","≫","\\gg",!0),eu(ed,ef,"rel","≍","\\asymp",!0),eu(ed,ef,"rel","∥","\\parallel"),eu(ed,ef,"rel","⋈","\\bowtie",!0),eu(ed,ef,"rel","⌣","\\smile",!0),eu(ed,ef,"rel","⊑","\\sqsubseteq",!0),eu(ed,ef,"rel","⊒","\\sqsupseteq",!0),eu(ed,ef,"rel","≐","\\doteq",!0),eu(ed,ef,"rel","⌢","\\frown",!0),eu(ed,ef,"rel","∋","\\ni",!0),eu(ed,ef,"rel","∝","\\propto",!0),eu(ed,ef,"rel","⊢","\\vdash",!0),eu(ed,ef,"rel","⊣","\\dashv",!0),eu(ed,ef,"rel","∋","\\owns"),eu(ed,ef,eS,".","\\ldotp"),eu(ed,ef,eS,"⋅","\\cdotp"),eu(ed,ef,ez,"#","\\#"),eu(eg,ef,ez,"#","\\#"),eu(ed,ef,ez,"&","\\&"),eu(eg,ef,ez,"&","\\&"),eu(ed,ef,ez,"ℵ","\\aleph",!0),eu(ed,ef,ez,"∀","\\forall",!0),eu(ed,ef,ez,"ℏ","\\hbar",!0),eu(ed,ef,ez,"∃","\\exists",!0),eu(ed,ef,ez,"∇","\\nabla",!0),eu(ed,ef,ez,"♭","\\flat",!0),eu(ed,ef,ez,"ℓ","\\ell",!0),eu(ed,ef,ez,"♮","\\natural",!0),eu(ed,ef,ez,"♣","\\clubsuit",!0),eu(ed,ef,ez,"℘","\\wp",!0),eu(ed,ef,ez,"♯","\\sharp",!0),eu(ed,ef,ez,"♢","\\diamondsuit",!0),eu(ed,ef,ez,"ℜ","\\Re",!0),eu(ed,ef,ez,"♡","\\heartsuit",!0),eu(ed,ef,ez,"ℑ","\\Im",!0),eu(ed,ef,ez,"♠","\\spadesuit",!0),eu(ed,ef,ez,"\xa7","\\S",!0),eu(eg,ef,ez,"\xa7","\\S"),eu(ed,ef,ez,"\xb6","\\P",!0),eu(eg,ef,ez,"\xb6","\\P"),eu(ed,ef,ez,"†","\\dag"),eu(eg,ef,ez,"†","\\dag"),eu(eg,ef,ez,"†","\\textdagger"),eu(ed,ef,ez,"‡","\\ddag"),eu(eg,ef,ez,"‡","\\ddag"),eu(eg,ef,ez,"‡","\\textdaggerdbl"),eu(ed,ef,eb,"⎱","\\rmoustache",!0),eu(ed,ef,ek,"⎰","\\lmoustache",!0),eu(ed,ef,eb,"⟯","\\rgroup",!0),eu(ed,ef,ek,"⟮","\\lgroup",!0),eu(ed,ef,"bin","∓","\\mp",!0),eu(ed,ef,"bin","⊖","\\ominus",!0),eu(ed,ef,"bin","⊎","\\uplus",!0),eu(ed,ef,"bin","⊓","\\sqcap",!0),eu(ed,ef,"bin","∗","\\ast"),eu(ed,ef,"bin","⊔","\\sqcup",!0),eu(ed,ef,"bin","◯","\\bigcirc",!0),eu(ed,ef,"bin","∙","\\bullet",!0),eu(ed,ef,"bin","‡","\\ddagger"),eu(ed,ef,"bin","≀","\\wr",!0),eu(ed,ef,"bin","⨿","\\amalg"),eu(ed,ef,"bin","&","\\And"),eu(ed,ef,"rel","⟵","\\longleftarrow",!0),eu(ed,ef,"rel","⇐","\\Leftarrow",!0),eu(ed,ef,"rel","⟸","\\Longleftarrow",!0),eu(ed,ef,"rel","⟶","\\longrightarrow",!0),eu(ed,ef,"rel","⇒","\\Rightarrow",!0),eu(ed,ef,"rel","⟹","\\Longrightarrow",!0),eu(ed,ef,"rel","↔","\\leftrightarrow",!0),eu(ed,ef,"rel","⟷","\\longleftrightarrow",!0),eu(ed,ef,"rel","⇔","\\Leftrightarrow",!0),eu(ed,ef,"rel","⟺","\\Longleftrightarrow",!0),eu(ed,ef,"rel","↦","\\mapsto",!0),eu(ed,ef,"rel","⟼","\\longmapsto",!0),eu(ed,ef,"rel","↗","\\nearrow",!0),eu(ed,ef,"rel","↩","\\hookleftarrow",!0),eu(ed,ef,"rel","↪","\\hookrightarrow",!0),eu(ed,ef,"rel","↘","\\searrow",!0),eu(ed,ef,"rel","↼","\\leftharpoonup",!0),eu(ed,ef,"rel","⇀","\\rightharpoonup",!0),eu(ed,ef,"rel","↙","\\swarrow",!0),eu(ed,ef,"rel","↽","\\leftharpoondown",!0),eu(ed,ef,"rel","⇁","\\rightharpoondown",!0),eu(ed,ef,"rel","↖","\\nwarrow",!0),eu(ed,ef,"rel","⇌","\\rightleftharpoons",!0),eu(ed,"ams","rel","≮","\\nless",!0),eu(ed,"ams","rel","","\\@nleqslant"),eu(ed,"ams","rel","","\\@nleqq"),eu(ed,"ams","rel","⪇","\\lneq",!0),eu(ed,"ams","rel","≨","\\lneqq",!0),eu(ed,"ams","rel","","\\@lvertneqq"),eu(ed,"ams","rel","⋦","\\lnsim",!0),eu(ed,"ams","rel","⪉","\\lnapprox",!0),eu(ed,"ams","rel","⊀","\\nprec",!0),eu(ed,"ams","rel","⋠","\\npreceq",!0),eu(ed,"ams","rel","⋨","\\precnsim",!0),eu(ed,"ams","rel","⪹","\\precnapprox",!0),eu(ed,"ams","rel","≁","\\nsim",!0),eu(ed,"ams","rel","","\\@nshortmid"),eu(ed,"ams","rel","∤","\\nmid",!0),eu(ed,"ams","rel","⊬","\\nvdash",!0),eu(ed,"ams","rel","⊭","\\nvDash",!0),eu(ed,"ams","rel","⋪","\\ntriangleleft"),eu(ed,"ams","rel","⋬","\\ntrianglelefteq",!0),eu(ed,"ams","rel","⊊","\\subsetneq",!0),eu(ed,"ams","rel","","\\@varsubsetneq"),eu(ed,"ams","rel","⫋","\\subsetneqq",!0),eu(ed,"ams","rel","","\\@varsubsetneqq"),eu(ed,"ams","rel","≯","\\ngtr",!0),eu(ed,"ams","rel","","\\@ngeqslant"),eu(ed,"ams","rel","","\\@ngeqq"),eu(ed,"ams","rel","⪈","\\gneq",!0),eu(ed,"ams","rel","≩","\\gneqq",!0),eu(ed,"ams","rel","","\\@gvertneqq"),eu(ed,"ams","rel","⋧","\\gnsim",!0),eu(ed,"ams","rel","⪊","\\gnapprox",!0),eu(ed,"ams","rel","⊁","\\nsucc",!0),eu(ed,"ams","rel","⋡","\\nsucceq",!0),eu(ed,"ams","rel","⋩","\\succnsim",!0),eu(ed,"ams","rel","⪺","\\succnapprox",!0),eu(ed,"ams","rel","≆","\\ncong",!0),eu(ed,"ams","rel","","\\@nshortparallel"),eu(ed,"ams","rel","∦","\\nparallel",!0),eu(ed,"ams","rel","⊯","\\nVDash",!0),eu(ed,"ams","rel","⋫","\\ntriangleright"),eu(ed,"ams","rel","⋭","\\ntrianglerighteq",!0),eu(ed,"ams","rel","","\\@nsupseteqq"),eu(ed,"ams","rel","⊋","\\supsetneq",!0),eu(ed,"ams","rel","","\\@varsupsetneq"),eu(ed,"ams","rel","⫌","\\supsetneqq",!0),eu(ed,"ams","rel","","\\@varsupsetneqq"),eu(ed,"ams","rel","⊮","\\nVdash",!0),eu(ed,"ams","rel","⪵","\\precneqq",!0),eu(ed,"ams","rel","⪶","\\succneqq",!0),eu(ed,"ams","rel","","\\@nsubseteqq"),eu(ed,"ams","bin","⊴","\\unlhd"),eu(ed,"ams","bin","⊵","\\unrhd"),eu(ed,"ams","rel","↚","\\nleftarrow",!0),eu(ed,"ams","rel","↛","\\nrightarrow",!0),eu(ed,"ams","rel","⇍","\\nLeftarrow",!0),eu(ed,"ams","rel","⇏","\\nRightarrow",!0),eu(ed,"ams","rel","↮","\\nleftrightarrow",!0),eu(ed,"ams","rel","⇎","\\nLeftrightarrow",!0),eu(ed,"ams","rel","△","\\vartriangle"),eu(ed,"ams",ez,"ℏ","\\hslash"),eu(ed,"ams",ez,"▽","\\triangledown"),eu(ed,"ams",ez,"◊","\\lozenge"),eu(ed,"ams",ez,"Ⓢ","\\circledS"),eu(ed,"ams",ez,"\xae","\\circledR"),eu(eg,"ams",ez,"\xae","\\circledR"),eu(ed,"ams",ez,"∡","\\measuredangle",!0),eu(ed,"ams",ez,"∄","\\nexists"),eu(ed,"ams",ez,"℧","\\mho"),eu(ed,"ams",ez,"Ⅎ","\\Finv",!0),eu(ed,"ams",ez,"⅁","\\Game",!0),eu(ed,"ams",ez,"‵","\\backprime"),eu(ed,"ams",ez,"▲","\\blacktriangle"),eu(ed,"ams",ez,"▼","\\blacktriangledown"),eu(ed,"ams",ez,"■","\\blacksquare"),eu(ed,"ams",ez,"⧫","\\blacklozenge"),eu(ed,"ams",ez,"★","\\bigstar"),eu(ed,"ams",ez,"∢","\\sphericalangle",!0),eu(ed,"ams",ez,"∁","\\complement",!0),eu(ed,"ams",ez,"\xf0","\\eth",!0),eu(eg,ef,ez,"\xf0","\xf0"),eu(ed,"ams",ez,"╱","\\diagup"),eu(ed,"ams",ez,"╲","\\diagdown"),eu(ed,"ams",ez,"□","\\square"),eu(ed,"ams",ez,"□","\\Box"),eu(ed,"ams",ez,"◊","\\Diamond"),eu(ed,"ams",ez,"\xa5","\\yen",!0),eu(eg,"ams",ez,"\xa5","\\yen",!0),eu(ed,"ams",ez,"✓","\\checkmark",!0),eu(eg,"ams",ez,"✓","\\checkmark"),eu(ed,"ams",ez,"ℶ","\\beth",!0),eu(ed,"ams",ez,"ℸ","\\daleth",!0),eu(ed,"ams",ez,"ℷ","\\gimel",!0),eu(ed,"ams",ez,"ϝ","\\digamma",!0),eu(ed,"ams",ez,"ϰ","\\varkappa"),eu(ed,"ams",ek,"┌","\\@ulcorner",!0),eu(ed,"ams",eb,"┐","\\@urcorner",!0),eu(ed,"ams",ek,"└","\\@llcorner",!0),eu(ed,"ams",eb,"┘","\\@lrcorner",!0),eu(ed,"ams","rel","≦","\\leqq",!0),eu(ed,"ams","rel","⩽","\\leqslant",!0),eu(ed,"ams","rel","⪕","\\eqslantless",!0),eu(ed,"ams","rel","≲","\\lesssim",!0),eu(ed,"ams","rel","⪅","\\lessapprox",!0),eu(ed,"ams","rel","≊","\\approxeq",!0),eu(ed,"ams","bin","⋖","\\lessdot"),eu(ed,"ams","rel","⋘","\\lll",!0),eu(ed,"ams","rel","≶","\\lessgtr",!0),eu(ed,"ams","rel","⋚","\\lesseqgtr",!0),eu(ed,"ams","rel","⪋","\\lesseqqgtr",!0),eu(ed,"ams","rel","≑","\\doteqdot"),eu(ed,"ams","rel","≓","\\risingdotseq",!0),eu(ed,"ams","rel","≒","\\fallingdotseq",!0),eu(ed,"ams","rel","∽","\\backsim",!0),eu(ed,"ams","rel","⋍","\\backsimeq",!0),eu(ed,"ams","rel","⫅","\\subseteqq",!0),eu(ed,"ams","rel","⋐","\\Subset",!0),eu(ed,"ams","rel","⊏","\\sqsubset",!0),eu(ed,"ams","rel","≼","\\preccurlyeq",!0),eu(ed,"ams","rel","⋞","\\curlyeqprec",!0),eu(ed,"ams","rel","≾","\\precsim",!0),eu(ed,"ams","rel","⪷","\\precapprox",!0),eu(ed,"ams","rel","⊲","\\vartriangleleft"),eu(ed,"ams","rel","⊴","\\trianglelefteq"),eu(ed,"ams","rel","⊨","\\vDash",!0),eu(ed,"ams","rel","⊪","\\Vvdash",!0),eu(ed,"ams","rel","⌣","\\smallsmile"),eu(ed,"ams","rel","⌢","\\smallfrown"),eu(ed,"ams","rel","≏","\\bumpeq",!0),eu(ed,"ams","rel","≎","\\Bumpeq",!0),eu(ed,"ams","rel","≧","\\geqq",!0),eu(ed,"ams","rel","⩾","\\geqslant",!0),eu(ed,"ams","rel","⪖","\\eqslantgtr",!0),eu(ed,"ams","rel","≳","\\gtrsim",!0),eu(ed,"ams","rel","⪆","\\gtrapprox",!0),eu(ed,"ams","bin","⋗","\\gtrdot"),eu(ed,"ams","rel","⋙","\\ggg",!0),eu(ed,"ams","rel","≷","\\gtrless",!0),eu(ed,"ams","rel","⋛","\\gtreqless",!0),eu(ed,"ams","rel","⪌","\\gtreqqless",!0),eu(ed,"ams","rel","≖","\\eqcirc",!0),eu(ed,"ams","rel","≗","\\circeq",!0),eu(ed,"ams","rel","≜","\\triangleq",!0),eu(ed,"ams","rel","∼","\\thicksim"),eu(ed,"ams","rel","≈","\\thickapprox"),eu(ed,"ams","rel","⫆","\\supseteqq",!0),eu(ed,"ams","rel","⋑","\\Supset",!0),eu(ed,"ams","rel","⊐","\\sqsupset",!0),eu(ed,"ams","rel","≽","\\succcurlyeq",!0),eu(ed,"ams","rel","⋟","\\curlyeqsucc",!0),eu(ed,"ams","rel","≿","\\succsim",!0),eu(ed,"ams","rel","⪸","\\succapprox",!0),eu(ed,"ams","rel","⊳","\\vartriangleright"),eu(ed,"ams","rel","⊵","\\trianglerighteq"),eu(ed,"ams","rel","⊩","\\Vdash",!0),eu(ed,"ams","rel","∣","\\shortmid"),eu(ed,"ams","rel","∥","\\shortparallel"),eu(ed,"ams","rel","≬","\\between",!0),eu(ed,"ams","rel","⋔","\\pitchfork",!0),eu(ed,"ams","rel","∝","\\varpropto"),eu(ed,"ams","rel","◀","\\blacktriangleleft"),eu(ed,"ams","rel","∴","\\therefore",!0),eu(ed,"ams","rel","∍","\\backepsilon"),eu(ed,"ams","rel","▶","\\blacktriangleright"),eu(ed,"ams","rel","∵","\\because",!0),eu(ed,"ams","rel","⋘","\\llless"),eu(ed,"ams","rel","⋙","\\gggtr"),eu(ed,"ams","bin","⊲","\\lhd"),eu(ed,"ams","bin","⊳","\\rhd"),eu(ed,"ams","rel","≂","\\eqsim",!0),eu(ed,ef,"rel","⋈","\\Join"),eu(ed,"ams","rel","≑","\\Doteq",!0),eu(ed,"ams","bin","∔","\\dotplus",!0),eu(ed,"ams","bin","∖","\\smallsetminus"),eu(ed,"ams","bin","⋒","\\Cap",!0),eu(ed,"ams","bin","⋓","\\Cup",!0),eu(ed,"ams","bin","⩞","\\doublebarwedge",!0),eu(ed,"ams","bin","⊟","\\boxminus",!0),eu(ed,"ams","bin","⊞","\\boxplus",!0),eu(ed,"ams","bin","⋇","\\divideontimes",!0),eu(ed,"ams","bin","⋉","\\ltimes",!0),eu(ed,"ams","bin","⋊","\\rtimes",!0),eu(ed,"ams","bin","⋋","\\leftthreetimes",!0),eu(ed,"ams","bin","⋌","\\rightthreetimes",!0),eu(ed,"ams","bin","⋏","\\curlywedge",!0),eu(ed,"ams","bin","⋎","\\curlyvee",!0),eu(ed,"ams","bin","⊝","\\circleddash",!0),eu(ed,"ams","bin","⊛","\\circledast",!0),eu(ed,"ams","bin","⋅","\\centerdot"),eu(ed,"ams","bin","⊺","\\intercal",!0),eu(ed,"ams","bin","⋒","\\doublecap"),eu(ed,"ams","bin","⋓","\\doublecup"),eu(ed,"ams","bin","⊠","\\boxtimes",!0),eu(ed,"ams","rel","⇢","\\dashrightarrow",!0),eu(ed,"ams","rel","⇠","\\dashleftarrow",!0),eu(ed,"ams","rel","⇇","\\leftleftarrows",!0),eu(ed,"ams","rel","⇆","\\leftrightarrows",!0),eu(ed,"ams","rel","⇚","\\Lleftarrow",!0),eu(ed,"ams","rel","↞","\\twoheadleftarrow",!0),eu(ed,"ams","rel","↢","\\leftarrowtail",!0),eu(ed,"ams","rel","↫","\\looparrowleft",!0),eu(ed,"ams","rel","⇋","\\leftrightharpoons",!0),eu(ed,"ams","rel","↶","\\curvearrowleft",!0),eu(ed,"ams","rel","↺","\\circlearrowleft",!0),eu(ed,"ams","rel","↰","\\Lsh",!0),eu(ed,"ams","rel","⇈","\\upuparrows",!0),eu(ed,"ams","rel","↿","\\upharpoonleft",!0),eu(ed,"ams","rel","⇃","\\downharpoonleft",!0),eu(ed,ef,"rel","⊶","\\origof",!0),eu(ed,ef,"rel","⊷","\\imageof",!0),eu(ed,"ams","rel","⊸","\\multimap",!0),eu(ed,"ams","rel","↭","\\leftrightsquigarrow",!0),eu(ed,"ams","rel","⇉","\\rightrightarrows",!0),eu(ed,"ams","rel","⇄","\\rightleftarrows",!0),eu(ed,"ams","rel","↠","\\twoheadrightarrow",!0),eu(ed,"ams","rel","↣","\\rightarrowtail",!0),eu(ed,"ams","rel","↬","\\looparrowright",!0),eu(ed,"ams","rel","↷","\\curvearrowright",!0),eu(ed,"ams","rel","↻","\\circlearrowright",!0),eu(ed,"ams","rel","↱","\\Rsh",!0),eu(ed,"ams","rel","⇊","\\downdownarrows",!0),eu(ed,"ams","rel","↾","\\upharpoonright",!0),eu(ed,"ams","rel","⇂","\\downharpoonright",!0),eu(ed,"ams","rel","⇝","\\rightsquigarrow",!0),eu(ed,"ams","rel","⇝","\\leadsto"),eu(ed,"ams","rel","⇛","\\Rrightarrow",!0),eu(ed,"ams","rel","↾","\\restriction"),eu(ed,ef,ez,"‘","`"),eu(ed,ef,ez,"$","\\$"),eu(eg,ef,ez,"$","\\$"),eu(eg,ef,ez,"$","\\textdollar"),eu(ed,ef,ez,"%","\\%"),eu(eg,ef,ez,"%","\\%"),eu(ed,ef,ez,"_","\\_"),eu(eg,ef,ez,"_","\\_"),eu(eg,ef,ez,"_","\\textunderscore"),eu(ed,ef,ez,"∠","\\angle",!0),eu(ed,ef,ez,"∞","\\infty",!0),eu(ed,ef,ez,"′","\\prime"),eu(ed,ef,ez,"△","\\triangle"),eu(ed,ef,ez,"Γ","\\Gamma",!0),eu(ed,ef,ez,"Δ","\\Delta",!0),eu(ed,ef,ez,"Θ","\\Theta",!0),eu(ed,ef,ez,"Λ","\\Lambda",!0),eu(ed,ef,ez,"Ξ","\\Xi",!0),eu(ed,ef,ez,"Π","\\Pi",!0),eu(ed,ef,ez,"Σ","\\Sigma",!0),eu(ed,ef,ez,"Υ","\\Upsilon",!0),eu(ed,ef,ez,"Φ","\\Phi",!0),eu(ed,ef,ez,"Ψ","\\Psi",!0),eu(ed,ef,ez,"Ω","\\Omega",!0),eu(ed,ef,ez,"A","Α"),eu(ed,ef,ez,"B","Β"),eu(ed,ef,ez,"E","Ε"),eu(ed,ef,ez,"Z","Ζ"),eu(ed,ef,ez,"H","Η"),eu(ed,ef,ez,"I","Ι"),eu(ed,ef,ez,"K","Κ"),eu(ed,ef,ez,"M","Μ"),eu(ed,ef,ez,"N","Ν"),eu(ed,ef,ez,"O","Ο"),eu(ed,ef,ez,"P","Ρ"),eu(ed,ef,ez,"T","Τ"),eu(ed,ef,ez,"X","Χ"),eu(ed,ef,ez,"\xac","\\neg",!0),eu(ed,ef,ez,"\xac","\\lnot"),eu(ed,ef,ez,"⊤","\\top"),eu(ed,ef,ez,"⊥","\\bot"),eu(ed,ef,ez,"∅","\\emptyset"),eu(ed,"ams",ez,"∅","\\varnothing"),eu(ed,ef,ex,"α","\\alpha",!0),eu(ed,ef,ex,"β","\\beta",!0),eu(ed,ef,ex,"γ","\\gamma",!0),eu(ed,ef,ex,"δ","\\delta",!0),eu(ed,ef,ex,"ϵ","\\epsilon",!0),eu(ed,ef,ex,"ζ","\\zeta",!0),eu(ed,ef,ex,"η","\\eta",!0),eu(ed,ef,ex,"θ","\\theta",!0),eu(ed,ef,ex,"ι","\\iota",!0),eu(ed,ef,ex,"κ","\\kappa",!0),eu(ed,ef,ex,"λ","\\lambda",!0),eu(ed,ef,ex,"μ","\\mu",!0),eu(ed,ef,ex,"ν","\\nu",!0),eu(ed,ef,ex,"ξ","\\xi",!0),eu(ed,ef,ex,"ο","\\omicron",!0),eu(ed,ef,ex,"π","\\pi",!0),eu(ed,ef,ex,"ρ","\\rho",!0),eu(ed,ef,ex,"σ","\\sigma",!0),eu(ed,ef,ex,"τ","\\tau",!0),eu(ed,ef,ex,"υ","\\upsilon",!0),eu(ed,ef,ex,"ϕ","\\phi",!0),eu(ed,ef,ex,"χ","\\chi",!0),eu(ed,ef,ex,"ψ","\\psi",!0),eu(ed,ef,ex,"ω","\\omega",!0),eu(ed,ef,ex,"ε","\\varepsilon",!0),eu(ed,ef,ex,"ϑ","\\vartheta",!0),eu(ed,ef,ex,"ϖ","\\varpi",!0),eu(ed,ef,ex,"ϱ","\\varrho",!0),eu(ed,ef,ex,"ς","\\varsigma",!0),eu(ed,ef,ex,"φ","\\varphi",!0),eu(ed,ef,"bin","∗","*",!0),eu(ed,ef,"bin","+","+"),eu(ed,ef,"bin","−","-",!0),eu(ed,ef,"bin","⋅","\\cdot",!0),eu(ed,ef,"bin","∘","\\circ",!0),eu(ed,ef,"bin","\xf7","\\div",!0),eu(ed,ef,"bin","\xb1","\\pm",!0),eu(ed,ef,"bin","\xd7","\\times",!0),eu(ed,ef,"bin","∩","\\cap",!0),eu(ed,ef,"bin","∪","\\cup",!0),eu(ed,ef,"bin","∖","\\setminus",!0),eu(ed,ef,"bin","∧","\\land"),eu(ed,ef,"bin","∨","\\lor"),eu(ed,ef,"bin","∧","\\wedge",!0),eu(ed,ef,"bin","∨","\\vee",!0),eu(ed,ef,ez,"√","\\surd"),eu(ed,ef,ek,"⟨","\\langle",!0),eu(ed,ef,ek,"∣","\\lvert"),eu(ed,ef,ek,"∥","\\lVert"),eu(ed,ef,eb,"?","?"),eu(ed,ef,eb,"!","!"),eu(ed,ef,eb,"⟩","\\rangle",!0),eu(ed,ef,eb,"∣","\\rvert"),eu(ed,ef,eb,"∥","\\rVert"),eu(ed,ef,"rel","=","="),eu(ed,ef,"rel",":",":"),eu(ed,ef,"rel","≈","\\approx",!0),eu(ed,ef,"rel","≅","\\cong",!0),eu(ed,ef,"rel","≥","\\ge"),eu(ed,ef,"rel","≥","\\geq",!0),eu(ed,ef,"rel","←","\\gets"),eu(ed,ef,"rel",">","\\gt",!0),eu(ed,ef,"rel","∈","\\in",!0),eu(ed,ef,"rel","","\\@not"),eu(ed,ef,"rel","⊂","\\subset",!0),eu(ed,ef,"rel","⊃","\\supset",!0),eu(ed,ef,"rel","⊆","\\subseteq",!0),eu(ed,ef,"rel","⊇","\\supseteq",!0),eu(ed,"ams","rel","⊈","\\nsubseteq",!0),eu(ed,"ams","rel","⊉","\\nsupseteq",!0),eu(ed,ef,"rel","⊨","\\models"),eu(ed,ef,"rel","←","\\leftarrow",!0),eu(ed,ef,"rel","≤","\\le"),eu(ed,ef,"rel","≤","\\leq",!0),eu(ed,ef,"rel","<","\\lt",!0),eu(ed,ef,"rel","→","\\rightarrow",!0),eu(ed,ef,"rel","→","\\to"),eu(ed,"ams","rel","≱","\\ngeq",!0),eu(ed,"ams","rel","≰","\\nleq",!0),eu(ed,ef,eM,"\xa0","\\ "),eu(ed,ef,eM,"\xa0","\\space"),eu(ed,ef,eM,"\xa0","\\nobreakspace"),eu(eg,ef,eM,"\xa0","\\ "),eu(eg,ef,eM,"\xa0"," "),eu(eg,ef,eM,"\xa0","\\space"),eu(eg,ef,eM,"\xa0","\\nobreakspace"),eu(ed,ef,eM,null,"\\nobreak"),eu(ed,ef,eM,null,"\\allowbreak"),eu(ed,ef,eS,",",","),eu(ed,ef,eS,";",";"),eu(ed,"ams","bin","⊼","\\barwedge",!0),eu(ed,"ams","bin","⊻","\\veebar",!0),eu(ed,ef,"bin","⊙","\\odot",!0),eu(ed,ef,"bin","⊕","\\oplus",!0),eu(ed,ef,"bin","⊗","\\otimes",!0),eu(ed,ef,ez,"∂","\\partial",!0),eu(ed,ef,"bin","⊘","\\oslash",!0),eu(ed,"ams","bin","⊚","\\circledcirc",!0),eu(ed,"ams","bin","⊡","\\boxdot",!0),eu(ed,ef,"bin","△","\\bigtriangleup"),eu(ed,ef,"bin","▽","\\bigtriangledown"),eu(ed,ef,"bin","†","\\dagger"),eu(ed,ef,"bin","⋄","\\diamond"),eu(ed,ef,"bin","⋆","\\star"),eu(ed,ef,"bin","◃","\\triangleleft"),eu(ed,ef,"bin","▹","\\triangleright"),eu(ed,ef,ek,"{","\\{"),eu(eg,ef,ez,"{","\\{"),eu(eg,ef,ez,"{","\\textbraceleft"),eu(ed,ef,eb,"}","\\}"),eu(eg,ef,ez,"}","\\}"),eu(eg,ef,ez,"}","\\textbraceright"),eu(ed,ef,ek,"{","\\lbrace"),eu(ed,ef,eb,"}","\\rbrace"),eu(ed,ef,ek,"[","\\lbrack",!0),eu(eg,ef,ez,"[","\\lbrack",!0),eu(ed,ef,eb,"]","\\rbrack",!0),eu(eg,ef,ez,"]","\\rbrack",!0),eu(ed,ef,ek,"(","\\lparen",!0),eu(ed,ef,eb,")","\\rparen",!0),eu(eg,ef,ez,"<","\\textless",!0),eu(eg,ef,ez,">","\\textgreater",!0),eu(ed,ef,ek,"⌊","\\lfloor",!0),eu(ed,ef,eb,"⌋","\\rfloor",!0),eu(ed,ef,ek,"⌈","\\lceil",!0),eu(ed,ef,eb,"⌉","\\rceil",!0),eu(ed,ef,ez,"\\","\\backslash"),eu(ed,ef,ez,"∣","|"),eu(ed,ef,ez,"∣","\\vert"),eu(eg,ef,ez,"|","\\textbar",!0),eu(ed,ef,ez,"∥","\\|"),eu(ed,ef,ez,"∥","\\Vert"),eu(eg,ef,ez,"∥","\\textbardbl"),eu(eg,ef,ez,"~","\\textasciitilde"),eu(eg,ef,ez,"\\","\\textbackslash"),eu(eg,ef,ez,"^","\\textasciicircum"),eu(ed,ef,"rel","↑","\\uparrow",!0),eu(ed,ef,"rel","⇑","\\Uparrow",!0),eu(ed,ef,"rel","↓","\\downarrow",!0),eu(ed,ef,"rel","⇓","\\Downarrow",!0),eu(ed,ef,"rel","↕","\\updownarrow",!0),eu(ed,ef,"rel","⇕","\\Updownarrow",!0),eu(ed,ef,ew,"∐","\\coprod"),eu(ed,ef,ew,"⋁","\\bigvee"),eu(ed,ef,ew,"⋀","\\bigwedge"),eu(ed,ef,ew,"⨄","\\biguplus"),eu(ed,ef,ew,"⋂","\\bigcap"),eu(ed,ef,ew,"⋃","\\bigcup"),eu(ed,ef,ew,"∫","\\int"),eu(ed,ef,ew,"∫","\\intop"),eu(ed,ef,ew,"∬","\\iint"),eu(ed,ef,ew,"∭","\\iiint"),eu(ed,ef,ew,"∏","\\prod"),eu(ed,ef,ew,"∑","\\sum"),eu(ed,ef,ew,"⨂","\\bigotimes"),eu(ed,ef,ew,"⨁","\\bigoplus"),eu(ed,ef,ew,"⨀","\\bigodot"),eu(ed,ef,ew,"∮","\\oint"),eu(ed,ef,ew,"∯","\\oiint"),eu(ed,ef,ew,"∰","\\oiiint"),eu(ed,ef,ew,"⨆","\\bigsqcup"),eu(ed,ef,ew,"∫","\\smallint"),eu(eg,ef,ey,"…","\\textellipsis"),eu(ed,ef,ey,"…","\\mathellipsis"),eu(eg,ef,ey,"…","\\ldots",!0),eu(ed,ef,ey,"…","\\ldots",!0),eu(ed,ef,ey,"⋯","\\@cdots",!0),eu(ed,ef,ey,"⋱","\\ddots",!0),eu(ed,ef,ez,"⋮","\\varvdots"),eu(ed,ef,ev,"ˊ","\\acute"),eu(ed,ef,ev,"ˋ","\\grave"),eu(ed,ef,ev,"\xa8","\\ddot"),eu(ed,ef,ev,"~","\\tilde"),eu(ed,ef,ev,"ˉ","\\bar"),eu(ed,ef,ev,"˘","\\breve"),eu(ed,ef,ev,"ˇ","\\check"),eu(ed,ef,ev,"^","\\hat"),eu(ed,ef,ev,"⃗","\\vec"),eu(ed,ef,ev,"˙","\\dot"),eu(ed,ef,ev,"˚","\\mathring"),eu(ed,ef,ex,"","\\@imath"),eu(ed,ef,ex,"","\\@jmath"),eu(ed,ef,ez,"ı","ı"),eu(ed,ef,ez,"ȷ","ȷ"),eu(eg,ef,ez,"ı","\\i",!0),eu(eg,ef,ez,"ȷ","\\j",!0),eu(eg,ef,ez,"\xdf","\\ss",!0),eu(eg,ef,ez,"\xe6","\\ae",!0),eu(eg,ef,ez,"œ","\\oe",!0),eu(eg,ef,ez,"\xf8","\\o",!0),eu(eg,ef,ez,"\xc6","\\AE",!0),eu(eg,ef,ez,"Œ","\\OE",!0),eu(eg,ef,ez,"\xd8","\\O",!0),eu(eg,ef,ev,"ˊ","\\'"),eu(eg,ef,ev,"ˋ","\\`"),eu(eg,ef,ev,"ˆ","\\^"),eu(eg,ef,ev,"˜","\\~"),eu(eg,ef,ev,"ˉ","\\="),eu(eg,ef,ev,"˘","\\u"),eu(eg,ef,ev,"˙","\\."),eu(eg,ef,ev,"\xb8","\\c"),eu(eg,ef,ev,"˚","\\r"),eu(eg,ef,ev,"ˇ","\\v"),eu(eg,ef,ev,"\xa8",'\\"'),eu(eg,ef,ev,"˝","\\H"),eu(eg,ef,ev,"◯","\\textcircled");var eA={"--":!0,"---":!0,"``":!0,"''":!0};eu(eg,ef,ez,"–","--",!0),eu(eg,ef,ez,"–","\\textendash"),eu(eg,ef,ez,"—","---",!0),eu(eg,ef,ez,"—","\\textemdash"),eu(eg,ef,ez,"‘","`",!0),eu(eg,ef,ez,"‘","\\textquoteleft"),eu(eg,ef,ez,"’","'",!0),eu(eg,ef,ez,"’","\\textquoteright"),eu(eg,ef,ez,"“","``",!0),eu(eg,ef,ez,"“","\\textquotedblleft"),eu(eg,ef,ez,"”","''",!0),eu(eg,ef,ez,"”","\\textquotedblright"),eu(ed,ef,ez,"\xb0","\\degree",!0),eu(eg,ef,ez,"\xb0","\\degree"),eu(eg,ef,ez,"\xb0","\\textdegree",!0),eu(ed,ef,ez,"\xa3","\\pounds"),eu(ed,ef,ez,"\xa3","\\mathsterling",!0),eu(eg,ef,ez,"\xa3","\\pounds"),eu(eg,ef,ez,"\xa3","\\textsterling",!0),eu(ed,"ams",ez,"✠","\\maltese"),eu(eg,"ams",ez,"✠","\\maltese");for(var eT='0123456789/@."',eB=0;eB{if(K(e.classes)!==K(t.classes)||e.skew!==t.skew||e.maxFontSize!==t.maxFontSize)return!1;if(1===e.classes.length){var r=e.classes[0];if("mbin"===r||"mord"===r)return!1}for(var a in e.style)if(e.style.hasOwnProperty(a)&&e.style[a]!==t.style[a])return!1;for(var n in t.style)if(t.style.hasOwnProperty(n)&&e.style[n]!==t.style[n])return!1;return!0},eJ=e=>{for(var t=0;tt&&(t=i.height),i.depth>r&&(r=i.depth),i.maxFontSize>a&&(a=i.maxFontSize)}e.height=t,e.depth=r,e.maxFontSize=a},e0=function(e,t,r,a){var n=new et(e,t,r,a);return eQ(n),n},e1=(e,t,r,a)=>new et(e,t,r,a),e4=function(e,t,r){var a=e0([e],[],t);return a.height=Math.max(r||t.fontMetrics().defaultRuleThickness,t.minRuleThickness),a.style.borderBottomWidth=Z(a.height),a.maxFontSize=1,a},e5=function(e,t,r,a){var n=new er(e,t,r,a);return eQ(n),n},e6=function(e){var t=new H(e);return eQ(t),t},e7=function(e,t){return e instanceof H?e0([],[e],t):e},e3=function(e){if("individualShift"===e.positionType){for(var t,r=e.children,a=[r[0]],n=-r[0].shift-r[0].elem.depth,i=n,s=1;s{var r=e0(["mspace"],[],t),a=$(e,t);return r.style.marginRight=Z(a),r},e9=function(e,t,r){var a="";switch(e){case"amsrm":a="AMS";break;case"textrm":a="Main";break;case"textsf":a="SansSerif";break;case"texttt":a="Typewriter";break;default:a=e}return a+"-"+("textbf"===t&&"textit"===r?"BoldItalic":"textbf"===t?"Bold":"textit"===t?"Italic":"Regular")},te={mathbf:{variant:"bold",fontName:"Main-Bold"},mathrm:{variant:"normal",fontName:"Main-Regular"},textit:{variant:"italic",fontName:"Main-Italic"},mathit:{variant:"italic",fontName:"Main-Italic"},mathnormal:{variant:"italic",fontName:"Math-Italic"},mathbb:{variant:"double-struck",fontName:"AMS-Regular"},mathcal:{variant:"script",fontName:"Caligraphic-Regular"},mathfrak:{variant:"fraktur",fontName:"Fraktur-Regular"},mathscr:{variant:"script",fontName:"Script-Regular"},mathsf:{variant:"sans-serif",fontName:"SansSerif-Regular"},mathtt:{variant:"monospace",fontName:"Typewriter-Regular"}},tt={vec:["vec",.471,.714],oiintSize1:["oiintSize1",.957,.499],oiintSize2:["oiintSize2",1.472,.659],oiiintSize1:["oiiintSize1",1.304,.499],oiiintSize2:["oiiintSize2",1.98,.659]},tr=function(e,t){var[r,a,n]=tt[e],i=new eo(r),s=new es([i],{width:Z(a),height:Z(n),style:"width:"+Z(a),viewBox:"0 0 "+1e3*a+" "+1e3*n,preserveAspectRatio:"xMinYMin"}),o=e1(["overlay"],[s],t);return o.height=n,o.style.height=Z(n),o.style.width=Z(a),o},ta={fontMap:te,makeSymbol:ej,mathsym:e$,makeSpan:e0,makeSvgSpan:e1,makeLineSpan:e4,makeAnchor:e5,makeFragment:e6,wrapFragment:e7,makeVList:e8,makeOrd:eZ,makeGlue:e2,staticSvg:tr,svgData:tt,tryCombineChars:eJ},tn={number:3,unit:"mu"},ti={number:4,unit:"mu"},ts={number:5,unit:"mu"},to={mord:{mop:tn,mbin:ti,mrel:ts,minner:tn},mop:{mord:tn,mop:tn,mrel:ts,minner:tn},mbin:{mord:ti,mop:ti,mopen:ti,minner:ti},mrel:{mord:ts,mop:ts,mopen:ts,minner:ts},mopen:{},mclose:{mop:tn,mbin:ti,mrel:ts,minner:tn},mpunct:{mord:tn,mop:tn,mrel:ts,mopen:tn,mclose:tn,mpunct:tn,minner:tn},minner:{mord:tn,mop:tn,mbin:ti,mrel:ts,mopen:tn,mpunct:tn,minner:tn}},tl={mord:{mop:tn},mop:{mord:tn,mop:tn},mbin:{},mrel:{},mopen:{},mclose:{mop:tn},mpunct:{},minner:{mop:tn}},th={},tm={},tc={};function tp(e){for(var{type:t,names:r,props:a,handler:n,htmlBuilder:i,mathmlBuilder:s}=e,o={type:t,numArgs:a.numArgs,argTypes:a.argTypes,allowedInArgument:!!a.allowedInArgument,allowedInText:!!a.allowedInText,allowedInMath:void 0===a.allowedInMath||a.allowedInMath,numOptionalArgs:a.numOptionalArgs||0,infix:!!a.infix,primitive:!!a.primitive,handler:n},l=0;l{var r=t.classes[0],a=e.classes[0];"mbin"===r&&f.contains(tb,a)?t.classes[0]="mord":"mbin"===a&&f.contains(tv,r)&&(e.classes[0]="mord")},{node:m},c,p),tk(n,(e,t)=>{var r=tz(t),a=tz(e),n=r&&a?e.hasClass("mtight")?tl[r][a]:to[r][a]:null;if(n)return ta.makeGlue(n,l)},{node:m},c,p),n},tk=function e(t,r,a,n,i){n&&t.push(n);for(var s=0;s{t.splice(o+1,0,e),s++})}n&&t.pop()},tS=function(e){return e instanceof H||e instanceof er||e instanceof et&&e.hasClass("enclosing")?e:null},tM=function e(t,r){var a=tS(t);if(a){var n=a.children;if(n.length){if("right"===r)return e(n[n.length-1],"right");if("left"===r)return e(n[0],"left")}}return t},tz=function(e,t){return e?(t&&(e=tM(e,t)),tx[e.classes[0]]||null):null},tA=function(e,t){var r=["nulldelimiter"].concat(e.baseSizingClasses());return tf(t.concat(r))},tT=function(e,t,r){if(!e)return tf();if(tm[e.type]){var a=tm[e.type](e,t);if(r&&t.size!==r.size){a=tf(t.sizingClasses(r),[a],t);var n=t.sizeMultiplier/r.sizeMultiplier;a.height*=n,a.depth*=n}return a}throw new i("Got group of unknown type: '"+e.type+"'")};function tB(e,t){var r=tf(["base"],e,t),a=tf(["strut"]);return a.style.height=Z(r.height+r.depth),r.depth&&(a.style.verticalAlign=Z(-r.depth)),r.children.unshift(a),r}function tq(e,t){var r,a,n=null;1===e.length&&"tag"===e[0].type&&(n=e[0].tag,e=e[0].body);var i=tw(e,t,"root");2===i.length&&i[1].hasClass("tag")&&(r=i.pop());for(var s=[],o=[],l=0;l0&&(s.push(tB(o,t)),o=[]),s.push(i[l]));o.length>0&&s.push(tB(o,t)),n?((a=tB(tw(n,t,!0))).classes=["tag"],s.push(a)):r&&s.push(r);var m=tf(["katex-html"],s);if(m.setAttribute("aria-hidden","true"),a){var c=a.children[0];c.style.height=Z(m.height+m.depth),m.depth&&(c.style.verticalAlign=Z(-m.depth))}return m}function tC(e){return new H(e)}class tN{constructor(e,t,r){this.type=void 0,this.attributes=void 0,this.children=void 0,this.classes=void 0,this.type=e,this.attributes={},this.children=t||[],this.classes=r||[]}setAttribute(e,t){this.attributes[e]=t}getAttribute(e){return this.attributes[e]}toNode(){var e=document.createElementNS("http://www.w3.org/1998/Math/MathML",this.type);for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);this.classes.length>0&&(e.className=K(this.classes));for(var r=0;r0&&(e+=' class ="'+f.escape(K(this.classes))+'"'),e+=">";for(var r=0;r")}toText(){return this.children.map(e=>e.toText()).join("")}}class tI{constructor(e){this.text=void 0,this.text=e}toNode(){return document.createTextNode(this.text)}toMarkup(){return f.escape(this.toText())}toText(){return this.text}}var tR={MathNode:tN,TextNode:tI,SpaceNode:class{constructor(e){this.width=void 0,this.character=void 0,this.width=e,e>=.05555&&e<=.05556?this.character=" ":e>=.1666&&e<=.1667?this.character=" ":e>=.2222&&e<=.2223?this.character=" ":e>=.2777&&e<=.2778?this.character="  ":e>=-.05556&&e<=-.05555?this.character=" ⁣":e>=-.1667&&e<=-.1666?this.character=" ⁣":e>=-.2223&&e<=-.2222?this.character=" ⁣":e>=-.2778&&e<=-.2777?this.character=" ⁣":this.character=null}toNode(){if(this.character)return document.createTextNode(this.character);var e=document.createElementNS("http://www.w3.org/1998/Math/MathML","mspace");return e.setAttribute("width",Z(this.width)),e}toMarkup(){return this.character?""+this.character+"":''}toText(){return this.character?this.character:" "}},newDocumentFragment:tC},tO=function(e,t,r){return ep[t][e]&&ep[t][e].replace&&55349!==e.charCodeAt(0)&&!(eA.hasOwnProperty(e)&&r&&(r.fontFamily&&"tt"===r.fontFamily.substr(4,2)||r.font&&"tt"===r.font.substr(4,2)))&&(e=ep[t][e].replace),new tR.TextNode(e)},tH=function(e){return 1===e.length?e[0]:new tR.MathNode("mrow",e)},tE=function(e,t){if("texttt"===t.fontFamily)return"monospace";if("textsf"===t.fontFamily)return"textit"===t.fontShape&&"textbf"===t.fontWeight?"sans-serif-bold-italic":"textit"===t.fontShape?"sans-serif-italic":"textbf"===t.fontWeight?"bold-sans-serif":"sans-serif";if("textit"===t.fontShape&&"textbf"===t.fontWeight)return"bold-italic";if("textit"===t.fontShape)return"italic";if("textbf"===t.fontWeight)return"bold";var r=t.font;if(!r||"mathnormal"===r)return null;var a=e.mode;if("mathit"===r)return"italic";if("boldsymbol"===r)return"textord"===e.type?"bold":"bold-italic";if("mathbf"===r)return"bold";if("mathbb"===r)return"double-struck";if("mathfrak"===r)return"fraktur";else if("mathscr"===r||"mathcal"===r)return"script";else if("mathsf"===r)return"sans-serif";else if("mathtt"===r)return"monospace";var n=e.text;return f.contains(["\\imath","\\jmath"],n)?null:(ep[a][n]&&ep[a][n].replace&&(n=ep[a][n].replace),F(n,ta.fontMap[r].fontName,a))?ta.fontMap[r].variant:null},tL=function(e,t,r){if(1===e.length){var a,n=tP(e[0],t);return r&&n instanceof tN&&"mo"===n.type&&(n.setAttribute("lspace","0em"),n.setAttribute("rspace","0em")),[n]}for(var i=[],s=0;s0&&(m.text=m.text.slice(0,1)+"̸"+m.text.slice(1),i.pop())}}}i.push(o),a=o}return i},tD=function(e,t,r){return tH(tL(e,t,r))},tP=function(e,t){if(!e)return new tR.MathNode("mrow");if(tc[e.type])return tc[e.type](e,t);throw new i("Got group of unknown type: '"+e.type+"'")};function tF(e,t,r,a,n){var i,s=tL(e,r);i=1===s.length&&s[0]instanceof tN&&f.contains(["mrow","mtable"],s[0].type)?s[0]:new tR.MathNode("mrow",s);var o=new tR.MathNode("annotation",[new tR.TextNode(t)]);o.setAttribute("encoding","application/x-tex");var l=new tR.MathNode("semantics",[i,o]),h=new tR.MathNode("math",[l]);return h.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML"),a&&h.setAttribute("display","block"),ta.makeSpan([n?"katex":"katex-mathml"],[h])}var tV=function(e){return new X({style:e.displayMode?B.DISPLAY:B.TEXT,maxSize:e.maxSize,minRuleThickness:e.minRuleThickness})},tG=function(e,t){if(t.displayMode){var r=["katex-display"];t.leqno&&r.push("leqno"),t.fleqn&&r.push("fleqn"),e=ta.makeSpan(r,[e])}return e},tU=function(e,t,r){var a,n=tV(r);if("mathml"===r.output)return tF(e,t,n,r.displayMode,!0);if("html"===r.output){var i=tq(e,n);a=ta.makeSpan(["katex"],[i])}else{var s=tF(e,t,n,r.displayMode,!1),o=tq(e,n);a=ta.makeSpan(["katex"],[s,o])}return tG(a,r)},tY=function(e,t,r){var a=tV(r),n=tq(e,a),i=ta.makeSpan(["katex"],[n]);return tG(i,r)},tX={widehat:"^",widecheck:"ˇ",widetilde:"~",utilde:"~",overleftarrow:"←",underleftarrow:"←",xleftarrow:"←",overrightarrow:"→",underrightarrow:"→",xrightarrow:"→",underbrace:"⏟",overbrace:"⏞",overgroup:"⏠",undergroup:"⏡",overleftrightarrow:"↔",underleftrightarrow:"↔",xleftrightarrow:"↔",Overrightarrow:"⇒",xRightarrow:"⇒",overleftharpoon:"↼",xleftharpoonup:"↼",overrightharpoon:"⇀",xrightharpoonup:"⇀",xLeftarrow:"⇐",xLeftrightarrow:"⇔",xhookleftarrow:"↩",xhookrightarrow:"↪",xmapsto:"↦",xrightharpoondown:"⇁",xleftharpoondown:"↽",xrightleftharpoons:"⇌",xleftrightharpoons:"⇋",xtwoheadleftarrow:"↞",xtwoheadrightarrow:"↠",xlongequal:"=",xtofrom:"⇄",xrightleftarrows:"⇄",xrightequilibrium:"⇌",xleftequilibrium:"⇋","\\cdrightarrow":"→","\\cdleftarrow":"←","\\cdlongequal":"="},tW=function(e){var t=new tR.MathNode("mo",[new tR.TextNode(tX[e.replace(/^\\/,"")])]);return t.setAttribute("stretchy","true"),t},t_={overrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],overleftarrow:[["leftarrow"],.888,522,"xMinYMin"],underrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],underleftarrow:[["leftarrow"],.888,522,"xMinYMin"],xrightarrow:[["rightarrow"],1.469,522,"xMaxYMin"],"\\cdrightarrow":[["rightarrow"],3,522,"xMaxYMin"],xleftarrow:[["leftarrow"],1.469,522,"xMinYMin"],"\\cdleftarrow":[["leftarrow"],3,522,"xMinYMin"],Overrightarrow:[["doublerightarrow"],.888,560,"xMaxYMin"],xRightarrow:[["doublerightarrow"],1.526,560,"xMaxYMin"],xLeftarrow:[["doubleleftarrow"],1.526,560,"xMinYMin"],overleftharpoon:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoonup:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoondown:[["leftharpoondown"],.888,522,"xMinYMin"],overrightharpoon:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoonup:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoondown:[["rightharpoondown"],.888,522,"xMaxYMin"],xlongequal:[["longequal"],.888,334,"xMinYMin"],"\\cdlongequal":[["longequal"],3,334,"xMinYMin"],xtwoheadleftarrow:[["twoheadleftarrow"],.888,334,"xMinYMin"],xtwoheadrightarrow:[["twoheadrightarrow"],.888,334,"xMaxYMin"],overleftrightarrow:[["leftarrow","rightarrow"],.888,522],overbrace:[["leftbrace","midbrace","rightbrace"],1.6,548],underbrace:[["leftbraceunder","midbraceunder","rightbraceunder"],1.6,548],underleftrightarrow:[["leftarrow","rightarrow"],.888,522],xleftrightarrow:[["leftarrow","rightarrow"],1.75,522],xLeftrightarrow:[["doubleleftarrow","doublerightarrow"],1.75,560],xrightleftharpoons:[["leftharpoondownplus","rightharpoonplus"],1.75,716],xleftrightharpoons:[["leftharpoonplus","rightharpoondownplus"],1.75,716],xhookleftarrow:[["leftarrow","righthook"],1.08,522],xhookrightarrow:[["lefthook","rightarrow"],1.08,522],overlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],underlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],overgroup:[["leftgroup","rightgroup"],.888,342],undergroup:[["leftgroupunder","rightgroupunder"],.888,342],xmapsto:[["leftmapsto","rightarrow"],1.5,522],xtofrom:[["leftToFrom","rightToFrom"],1.75,528],xrightleftarrows:[["baraboveleftarrow","rightarrowabovebar"],1.75,901],xrightequilibrium:[["baraboveshortleftharpoon","rightharpoonaboveshortbar"],1.75,716],xleftequilibrium:[["shortbaraboveleftharpoon","shortrightharpoonabovebar"],1.75,716]},tj=function(e,t){var{span:r,minWidth:a,height:n}=function(){var r,a=4e5,n=e.label.substr(1);if(f.contains(["widehat","widecheck","widetilde","utilde"],n)){var i,s,o,l,h="ordgroup"===(l=e.base).type?l.body.length:1;if(h>5)"widehat"===n||"widecheck"===n?(i=420,a=2364,o=.42,s=n+"4"):(i=312,a=2340,o=.34,s="tilde4");else{var m=[1,1,2,2,3,3][h];"widehat"===n||"widecheck"===n?(a=[0,1062,2364,2364,2364][m],i=[0,239,300,360,420][m],o=[0,.24,.3,.3,.36,.42][m],s=n+m):(a=[0,600,1033,2339,2340][m],i=[0,260,286,306,312][m],o=[0,.26,.286,.3,.306,.34][m],s="tilde"+m)}var c=new eo(s),p=new es([c],{width:"100%",height:Z(o),viewBox:"0 0 "+a+" "+i,preserveAspectRatio:"none"});return{span:ta.makeSvgSpan([],[p],t),minWidth:0,height:o}}var u,d,g=[],v=t_[n],[b,y,x]=v,w=x/1e3,k=b.length;if(1===k){u=["hide-tail"],d=[v[3]]}else if(2===k)u=["halfarrow-left","halfarrow-right"],d=["xMinYMin","xMaxYMin"];else if(3===k)u=["brace-left","brace-center","brace-right"],d=["xMinYMin","xMidYMin","xMaxYMin"];else throw Error("Correct katexImagesData or update code here to support\n "+k+" children.");for(var S=0;S0&&(r.style.minWidth=Z(a)),r},t$=function(e,t,r,a,n){var i,s=e.height+e.depth+r+a;if(/fbox|color|angl/.test(t)){if(i=ta.makeSpan(["stretchy",t],[],n),"fbox"===t){var o=n.color&&n.getColor();o&&(i.style.borderColor=o)}}else{var l=[];/^[bx]cancel$/.test(t)&&l.push(new el({x1:"0",y1:"0",x2:"100%",y2:"100%","stroke-width":"0.046em"})),/^x?cancel$/.test(t)&&l.push(new el({x1:"0",y1:"100%",x2:"100%",y2:"0","stroke-width":"0.046em"}));var h=new es(l,{width:"100%",height:Z(s)});i=ta.makeSvgSpan([],[h],n)}return i.height=s,i.style.height=Z(s),i},tZ={encloseSpan:t$,mathMLnode:tW,svgSpan:tj};function tK(e,t){if(!e||e.type!==t)throw Error("Expected node of type "+t+", but got "+(e?"node of type "+e.type:String(e)));return e}function tJ(e){var t=tQ(e);if(!t)throw Error("Expected node of symbol group type, but got "+(e?"node of type "+e.type:String(e)));return t}function tQ(e){return e&&("atom"===e.type||ec.hasOwnProperty(e.type))?e:null}var t0=(e,t)=>{e&&"supsub"===e.type?(h=(m=tK(e.base,"accent")).base,e.base=h,c=function(e){if(e instanceof et)return e;throw Error("Expected span but got "+String(e)+".")}(tT(e,t)),e.base=m):h=(m=tK(e,"accent")).base;var r=tT(h,t.havingCrampedStyle()),a=m.isShifty&&f.isCharacterBox(h),n=0;if(a){var i=f.getBaseElem(h),s=tT(i,t.havingCrampedStyle());n=eh(s).skew}var o="\\c"===m.label,l=o?r.height+r.depth:Math.min(r.height,t.fontMetrics().xHeight);if(m.isStretchy)p=tZ.svgSpan(m,t),p=ta.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r},{type:"elem",elem:p,wrapperClasses:["svg-align"],wrapperStyle:n>0?{width:"calc(100% - "+Z(2*n)+")",marginLeft:Z(2*n)}:void 0}]},t);else{"\\vec"===m.label?(u=ta.staticSvg("vec",t),d=ta.svgData.vec[1]):((u=eh(u=ta.makeOrd({mode:m.mode,text:m.label},t,"textord"))).italic=0,d=u.width,o&&(l+=u.depth)),p=ta.makeSpan(["accent-body"],[u]);var h,m,c,p,u,d,g="\\textcircled"===m.label;g&&(p.classes.push("accent-full"),l=r.height);var v=n;g||(v-=d/2),p.style.left=Z(v),"\\textcircled"===m.label&&(p.style.top=".2em"),p=ta.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r},{type:"kern",size:-l},{type:"elem",elem:p}]},t)}var b=ta.makeSpan(["mord","accent"],[p],t);return c?(c.children[0]=b,c.height=Math.max(b.height,c.height),c.classes[0]="mord",c):b},t1=(e,t)=>{var r=e.isStretchy?tZ.mathMLnode(e.label):new tR.MathNode("mo",[tO(e.label,e.mode)]),a=new tR.MathNode("mover",[tP(e.base,t),r]);return a.setAttribute("accent","true"),a},t4=RegExp(["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring"].map(e=>"\\"+e).join("|"));tp({type:"accent",names:["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring","\\widecheck","\\widehat","\\widetilde","\\overrightarrow","\\overleftarrow","\\Overrightarrow","\\overleftrightarrow","\\overgroup","\\overlinesegment","\\overleftharpoon","\\overrightharpoon"],props:{numArgs:1},handler(e,t){var r=td(t[0]),a=!t4.test(e.funcName),n=!a||"\\widehat"===e.funcName||"\\widetilde"===e.funcName||"\\widecheck"===e.funcName;return{type:"accent",mode:e.parser.mode,label:e.funcName,isStretchy:a,isShifty:n,base:r}},htmlBuilder:t0,mathmlBuilder:t1}),tp({type:"accent",names:["\\'","\\`","\\^","\\~","\\=","\\u","\\.",'\\"',"\\c","\\r","\\H","\\v","\\textcircled"],props:{numArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["primitive"]},handler(e,t){var r=t[0],a=e.parser.mode;return"math"===a&&(e.parser.settings.reportNonstrict("mathVsTextAccents","LaTeX's accent "+e.funcName+" works only in text mode"),a="text"),{type:"accent",mode:a,label:e.funcName,isStretchy:!1,isShifty:!0,base:r}},htmlBuilder:t0,mathmlBuilder:t1}),tp({type:"accentUnder",names:["\\underleftarrow","\\underrightarrow","\\underleftrightarrow","\\undergroup","\\underlinesegment","\\utilde"],props:{numArgs:1},handler(e,t){var{parser:r,funcName:a}=e,n=t[0];return{type:"accentUnder",mode:r.mode,label:a,base:n}},htmlBuilder(e,t){var r=tT(e.base,t),a=tZ.svgSpan(e,t),n="\\utilde"===e.label?.12:0,i=ta.makeVList({positionType:"top",positionData:r.height,children:[{type:"elem",elem:a,wrapperClasses:["svg-align"]},{type:"kern",size:n},{type:"elem",elem:r}]},t);return ta.makeSpan(["mord","accentunder"],[i],t)},mathmlBuilder(e,t){var r=tZ.mathMLnode(e.label),a=new tR.MathNode("munder",[tP(e.base,t),r]);return a.setAttribute("accentunder","true"),a}});var t5=e=>{var t=new tR.MathNode("mpadded",e?[e]:[]);return t.setAttribute("width","+0.6em"),t.setAttribute("lspace","0.3em"),t};tp({type:"xArrow",names:["\\xleftarrow","\\xrightarrow","\\xLeftarrow","\\xRightarrow","\\xleftrightarrow","\\xLeftrightarrow","\\xhookleftarrow","\\xhookrightarrow","\\xmapsto","\\xrightharpoondown","\\xrightharpoonup","\\xleftharpoondown","\\xleftharpoonup","\\xrightleftharpoons","\\xleftrightharpoons","\\xlongequal","\\xtwoheadrightarrow","\\xtwoheadleftarrow","\\xtofrom","\\xrightleftarrows","\\xrightequilibrium","\\xleftequilibrium","\\\\cdrightarrow","\\\\cdleftarrow","\\\\cdlongequal"],props:{numArgs:1,numOptionalArgs:1},handler(e,t,r){var{parser:a,funcName:n}=e;return{type:"xArrow",mode:a.mode,label:n,body:t[0],below:r[0]}},htmlBuilder(e,t){var r,a,n=t.style,i=t.havingStyle(n.sup()),s=ta.wrapFragment(tT(e.body,i,t),t),o="\\x"===e.label.slice(0,2)?"x":"cd";s.classes.push(o+"-arrow-pad"),e.below&&(i=t.havingStyle(n.sub()),(r=ta.wrapFragment(tT(e.below,i,t),t)).classes.push(o+"-arrow-pad"));var l=tZ.svgSpan(e,t),h=-t.fontMetrics().axisHeight+.5*l.height,m=-t.fontMetrics().axisHeight-.5*l.height-.111;if((s.depth>.25||"\\xleftequilibrium"===e.label)&&(m-=s.depth),r){var c=-t.fontMetrics().axisHeight+r.height+.5*l.height+.111;a=ta.makeVList({positionType:"individualShift",children:[{type:"elem",elem:s,shift:m},{type:"elem",elem:l,shift:h},{type:"elem",elem:r,shift:c}]},t)}else a=ta.makeVList({positionType:"individualShift",children:[{type:"elem",elem:s,shift:m},{type:"elem",elem:l,shift:h}]},t);return a.children[0].children[0].children[1].classes.push("svg-align"),ta.makeSpan(["mrel","x-arrow"],[a],t)},mathmlBuilder(e,t){var r,a=tZ.mathMLnode(e.label);if(a.setAttribute("minsize","x"===e.label.charAt(0)?"1.75em":"3.0em"),e.body){var n=t5(tP(e.body,t));if(e.below){var i=t5(tP(e.below,t));r=new tR.MathNode("munderover",[a,i,n])}else r=new tR.MathNode("mover",[a,n])}else if(e.below){var s=t5(tP(e.below,t));r=new tR.MathNode("munder",[a,s])}else r=t5(),r=new tR.MathNode("mover",[a,r]);return r}});var t6={">":"\\\\cdrightarrow","<":"\\\\cdleftarrow","=":"\\\\cdlongequal",A:"\\uparrow",V:"\\downarrow","|":"\\Vert",".":"no arrow"},t7=()=>({type:"styling",body:[],mode:"math",style:"display"}),t3=e=>"textord"===e.type&&"@"===e.text,t8=(e,t)=>("mathord"===e.type||"atom"===e.type)&&e.text===t;function t2(e,t,r){var a=t6[e];switch(a){case"\\\\cdrightarrow":case"\\\\cdleftarrow":return r.callFunction(a,[t[0]],[t[1]]);case"\\uparrow":case"\\downarrow":var n=r.callFunction("\\\\cdleft",[t[0]],[]),i=r.callFunction("\\Big",[{type:"atom",text:a,mode:"math",family:"rel"}],[]),s=r.callFunction("\\\\cdright",[t[1]],[]);return r.callFunction("\\\\cdparent",[{type:"ordgroup",mode:"math",body:[n,i,s]}],[]);case"\\\\cdlongequal":return r.callFunction("\\\\cdlongequal",[],[]);case"\\Vert":return r.callFunction("\\Big",[{type:"textord",text:"\\Vert",mode:"math"}],[]);default:return{type:"textord",text:" ",mode:"math"}}}tp({type:"cdlabel",names:["\\\\cdleft","\\\\cdright"],props:{numArgs:1},handler(e,t){var{parser:r,funcName:a}=e;return{type:"cdlabel",mode:r.mode,side:a.slice(4),label:t[0]}},htmlBuilder(e,t){var r=t.havingStyle(t.style.sup()),a=ta.wrapFragment(tT(e.label,r,t),t);return a.classes.push("cd-label-"+e.side),a.style.bottom=Z(.8-a.depth),a.height=0,a.depth=0,a},mathmlBuilder(e,t){var r=new tR.MathNode("mrow",[tP(e.label,t)]);return(r=new tR.MathNode("mpadded",[r])).setAttribute("width","0"),"left"===e.side&&r.setAttribute("lspace","-1width"),r.setAttribute("voffset","0.7em"),(r=new tR.MathNode("mstyle",[r])).setAttribute("displaystyle","false"),r.setAttribute("scriptlevel","1"),r}}),tp({type:"cdlabelparent",names:["\\\\cdparent"],props:{numArgs:1},handler(e,t){var{parser:r}=e;return{type:"cdlabelparent",mode:r.mode,fragment:t[0]}},htmlBuilder(e,t){var r=ta.wrapFragment(tT(e.fragment,t),t);return r.classes.push("cd-vert-arrow"),r},mathmlBuilder:(e,t)=>new tR.MathNode("mrow",[tP(e.fragment,t)])}),tp({type:"textord",names:["\\@char"],props:{numArgs:1,allowedInText:!0},handler(e,t){for(var r,{parser:a}=e,n=tK(t[0],"ordgroup").body,s="",o=0;o=1114111)throw new i("\\@char with invalid code point "+s);return h<=65535?r=String.fromCharCode(h):(h-=65536,r=String.fromCharCode((h>>10)+55296,(1023&h)+56320)),{type:"textord",mode:a.mode,text:r}}});var t9=(e,t)=>{var r=tw(e.body,t.withColor(e.color),!1);return ta.makeFragment(r)},re=(e,t)=>{var r=tL(e.body,t.withColor(e.color)),a=new tR.MathNode("mstyle",r);return a.setAttribute("mathcolor",e.color),a};tp({type:"color",names:["\\textcolor"],props:{numArgs:2,allowedInText:!0,argTypes:["color","original"]},handler(e,t){var{parser:r}=e,a=tK(t[0],"color-token").color,n=t[1];return{type:"color",mode:r.mode,color:a,body:tg(n)}},htmlBuilder:t9,mathmlBuilder:re}),tp({type:"color",names:["\\color"],props:{numArgs:1,allowedInText:!0,argTypes:["color"]},handler(e,t){var{parser:r,breakOnTokenText:a}=e,n=tK(t[0],"color-token").color;r.gullet.macros.set("\\current@color",n);var i=r.parseExpression(!0,a);return{type:"color",mode:r.mode,color:n,body:i}},htmlBuilder:t9,mathmlBuilder:re}),tp({type:"cr",names:["\\\\"],props:{numArgs:0,numOptionalArgs:1,argTypes:["size"],allowedInText:!0},handler(e,t,r){var{parser:a}=e,n=r[0],i=!a.settings.displayMode||!a.settings.useStrictBehavior("newLineInDisplayMode","In LaTeX, \\\\ or \\newline does nothing in display mode");return{type:"cr",mode:a.mode,newLine:i,size:n&&tK(n,"size").value}},htmlBuilder(e,t){var r=ta.makeSpan(["mspace"],[],t);return e.newLine&&(r.classes.push("newline"),e.size&&(r.style.marginTop=Z($(e.size,t)))),r},mathmlBuilder(e,t){var r=new tR.MathNode("mspace");return e.newLine&&(r.setAttribute("linebreak","newline"),e.size&&r.setAttribute("height",Z($(e.size,t)))),r}});var rt={"\\global":"\\global","\\long":"\\\\globallong","\\\\globallong":"\\\\globallong","\\def":"\\gdef","\\gdef":"\\gdef","\\edef":"\\xdef","\\xdef":"\\xdef","\\let":"\\\\globallet","\\futurelet":"\\\\globalfuture"},rr=e=>{var t=e.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(t))throw new i("Expected a control sequence",e);return t},ra=e=>{var t=e.gullet.popToken();return"="===t.text&&" "===(t=e.gullet.popToken()).text&&(t=e.gullet.popToken()),t},rn=(e,t,r,a)=>{var n=e.gullet.macros.get(r.text);null==n&&(r.noexpand=!0,n={tokens:[r],numArgs:0,unexpandable:!e.gullet.isExpandable(r.text)}),e.gullet.macros.set(t,n,a)};tp({type:"internal",names:["\\global","\\long","\\\\globallong"],props:{numArgs:0,allowedInText:!0},handler(e){var{parser:t,funcName:r}=e;t.consumeSpaces();var a=t.fetch();if(rt[a.text])return("\\global"===r||"\\\\globallong"===r)&&(a.text=rt[a.text]),tK(t.parseFunction(),"internal");throw new i("Invalid token after macro prefix",a)}}),tp({type:"internal",names:["\\def","\\gdef","\\edef","\\xdef"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e){var t,{parser:r,funcName:a}=e,n=r.gullet.popToken(),s=n.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(s))throw new i("Expected a control sequence",n);for(var o=0,l=[[]];"{"!==r.gullet.future().text;)if("#"===(n=r.gullet.popToken()).text){if("{"===r.gullet.future().text){t=r.gullet.future(),l[o].push("{");break}if(n=r.gullet.popToken(),!/^[1-9]$/.test(n.text))throw new i('Invalid argument number "'+n.text+'"');if(parseInt(n.text)!==o+1)throw new i('Argument number "'+n.text+'" out of order');o++,l.push([])}else if("EOF"===n.text)throw new i("Expected a macro definition");else l[o].push(n.text);var{tokens:h}=r.gullet.consumeArg();return t&&h.unshift(t),("\\edef"===a||"\\xdef"===a)&&(h=r.gullet.expandTokens(h)).reverse(),r.gullet.macros.set(s,{tokens:h,numArgs:o,delimiters:l},a===rt[a]),{type:"internal",mode:r.mode}}}),tp({type:"internal",names:["\\let","\\\\globallet"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e){var{parser:t,funcName:r}=e,a=rr(t.gullet.popToken());t.gullet.consumeSpaces();var n=ra(t);return rn(t,a,n,"\\\\globallet"===r),{type:"internal",mode:t.mode}}}),tp({type:"internal",names:["\\futurelet","\\\\globalfuture"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e){var{parser:t,funcName:r}=e,a=rr(t.gullet.popToken()),n=t.gullet.popToken(),i=t.gullet.popToken();return rn(t,a,i,"\\\\globalfuture"===r),t.gullet.pushToken(i),t.gullet.pushToken(n),{type:"internal",mode:t.mode}}});var ri=function(e,t,r){var a=F(ep.math[e]&&ep.math[e].replace||e,t,r);if(!a)throw Error("Unsupported symbol "+e+" and font size "+t+".");return a},rs=function(e,t,r,a){var n=r.havingBaseStyle(t),i=ta.makeSpan(a.concat(n.sizingClasses(r)),[e],r),s=n.sizeMultiplier/r.sizeMultiplier;return i.height*=s,i.depth*=s,i.maxFontSize=n.sizeMultiplier,i},ro=function(e,t,r){var a=t.havingBaseStyle(r),n=(1-t.sizeMultiplier/a.sizeMultiplier)*t.fontMetrics().axisHeight;e.classes.push("delimcenter"),e.style.top=Z(n),e.height-=n,e.depth+=n},rl=function(e,t,r,a,n,i){var s=ta.makeSymbol(e,"Main-Regular",n,a),o=rs(s,t,a,i);return r&&ro(o,a,t),o},rh=function(e,t,r,a,n,i){var s,o,l,h,m=ta.makeSymbol(e,"Size"+t+"-Regular",n,a),c=rs(ta.makeSpan(["delimsizing","size"+t],[m],a),B.TEXT,a,i);return r&&ro(c,a,B.TEXT),c},rm=function(e,t,r){var a;return{type:"elem",elem:ta.makeSpan(["delimsizinginner","Size1-Regular"===t?"delim-size1":"delim-size4"],[ta.makeSpan([],[ta.makeSymbol(e,t,r)])])}},rc=function(e,t,r){var a=E["Size4-Regular"][e.charCodeAt(0)]?E["Size4-Regular"][e.charCodeAt(0)][4]:E["Size1-Regular"][e.charCodeAt(0)][4],n=new eo("inner",R(e,Math.round(1e3*t))),i=new es([n],{width:Z(a),height:Z(t),style:"width:"+Z(a),viewBox:"0 0 "+1e3*a+" "+Math.round(1e3*t),preserveAspectRatio:"xMinYMin"}),s=ta.makeSvgSpan([],[i],r);return s.height=t,s.style.height=Z(t),s.style.width=Z(a),{type:"elem",elem:s}},rp={type:"kern",size:-.008},ru=["|","\\lvert","\\rvert","\\vert"],rd=["\\|","\\lVert","\\rVert","\\Vert"],rg=function(e,t,r,a,n,i){s=l=h=e,o=null;var s,o,l,h,m="Size1-Regular";"\\uparrow"===e?l=h="⏐":"\\Uparrow"===e?l=h="‖":"\\downarrow"===e?s=l="⏐":"\\Downarrow"===e?s=l="‖":"\\updownarrow"===e?(s="\\uparrow",l="⏐",h="\\downarrow"):"\\Updownarrow"===e?(s="\\Uparrow",l="‖",h="\\Downarrow"):f.contains(ru,e)?l="∣":f.contains(rd,e)?l="∥":"["===e||"\\lbrack"===e?(s="⎡",l="⎢",h="⎣",m="Size4-Regular"):"]"===e||"\\rbrack"===e?(s="⎤",l="⎥",h="⎦",m="Size4-Regular"):"\\lfloor"===e||"⌊"===e?(l=s="⎢",h="⎣",m="Size4-Regular"):"\\lceil"===e||"⌈"===e?(s="⎡",l=h="⎢",m="Size4-Regular"):"\\rfloor"===e||"⌋"===e?(l=s="⎥",h="⎦",m="Size4-Regular"):"\\rceil"===e||"⌉"===e?(s="⎤",l=h="⎥",m="Size4-Regular"):"("===e||"\\lparen"===e?(s="⎛",l="⎜",h="⎝",m="Size4-Regular"):")"===e||"\\rparen"===e?(s="⎞",l="⎟",h="⎠",m="Size4-Regular"):"\\{"===e||"\\lbrace"===e?(s="⎧",o="⎨",h="⎩",l="⎪",m="Size4-Regular"):"\\}"===e||"\\rbrace"===e?(s="⎫",o="⎬",h="⎭",l="⎪",m="Size4-Regular"):"\\lgroup"===e||"⟮"===e?(s="⎧",h="⎩",l="⎪",m="Size4-Regular"):"\\rgroup"===e||"⟯"===e?(s="⎫",h="⎭",l="⎪",m="Size4-Regular"):"\\lmoustache"===e||"⎰"===e?(s="⎧",h="⎭",l="⎪",m="Size4-Regular"):("\\rmoustache"===e||"⎱"===e)&&(s="⎫",h="⎩",l="⎪",m="Size4-Regular");var c=ri(s,m,n),p=c.height+c.depth,u=ri(l,m,n),d=u.height+u.depth,g=ri(h,m,n),v=g.height+g.depth,b=0,y=1;if(null!==o){var x=ri(o,m,n);b=x.height+x.depth,y=2}var w=p+v+b,k=Math.max(0,Math.ceil((t-w)/(y*d))),S=w+k*y*d,M=a.fontMetrics().axisHeight;r&&(M*=a.sizeMultiplier);var z=[];if(z.push(rm(h,m,n)),z.push(rp),null===o)z.push(rc(l,S-p-v+.016,a));else{var A=(S-p-v-b)/2+.016;z.push(rc(l,A,a)),z.push(rp),z.push(rm(o,m,n)),z.push(rp),z.push(rc(l,A,a))}z.push(rp),z.push(rm(s,m,n));var T=a.havingBaseStyle(B.TEXT),q=ta.makeVList({positionType:"bottom",positionData:S/2-M,children:z},T);return rs(ta.makeSpan(["delimsizing","mult"],[q],T),B.TEXT,a,i)},rf=function(e,t,r,a,n){var i=I(e,a,r),s=new eo(e,i),o=new es([s],{width:"400em",height:Z(t),viewBox:"0 0 400000 "+r,preserveAspectRatio:"xMinYMin slice"});return ta.makeSvgSpan(["hide-tail"],[o],n)},rv=function(e,t){var r,a,n=t.havingBaseSizing(),i=rT("\\surd",e*n.sizeMultiplier,rz,n),s=n.sizeMultiplier,o=Math.max(0,t.minRuleThickness-t.fontMetrics().sqrtRuleThickness),l=0,h=0,m=0;return"small"===i.type?(m=1e3+1e3*o+80,e<1?s=1:e<1.4&&(s=.7),l=(1+o+.08)/s,h=(1+o)/s,(r=rf("sqrtMain",l,m,o,t)).style.minWidth="0.853em",a=.833/s):"large"===i.type?(m=1080*rw[i.size],h=(rw[i.size]+o)/s,l=(rw[i.size]+o+.08)/s,(r=rf("sqrtSize"+i.size,l,m,o,t)).style.minWidth="1.02em",a=1/s):(l=e+o+.08,h=e+o,(r=rf("sqrtTall",l,m=Math.floor(1e3*e+o)+80,o,t)).style.minWidth="0.742em",a=1.056),r.height=h,r.style.height=Z(l),{span:r,advanceWidth:a,ruleWidth:(t.fontMetrics().sqrtRuleThickness+o)*s}},rb=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","⌊","⌋","\\lceil","\\rceil","⌈","⌉","\\surd"],ry=["\\uparrow","\\downarrow","\\updownarrow","\\Uparrow","\\Downarrow","\\Updownarrow","|","\\|","\\vert","\\Vert","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","⟮","⟯","\\lmoustache","\\rmoustache","⎰","⎱"],rx=["<",">","\\langle","\\rangle","/","\\backslash","\\lt","\\gt"],rw=[0,1.2,1.8,2.4,3],rk=function(e,t,r,a,n){if("<"===e||"\\lt"===e||"⟨"===e?e="\\langle":(">"===e||"\\gt"===e||"⟩"===e)&&(e="\\rangle"),f.contains(rb,e)||f.contains(rx,e))return rh(e,t,!1,r,a,n);if(f.contains(ry,e))return rg(e,rw[t],!1,r,a,n);throw new i("Illegal delimiter: '"+e+"'")},rS=[{type:"small",style:B.SCRIPTSCRIPT},{type:"small",style:B.SCRIPT},{type:"small",style:B.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4}],rM=[{type:"small",style:B.SCRIPTSCRIPT},{type:"small",style:B.SCRIPT},{type:"small",style:B.TEXT},{type:"stack"}],rz=[{type:"small",style:B.SCRIPTSCRIPT},{type:"small",style:B.SCRIPT},{type:"small",style:B.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4},{type:"stack"}],rA=function(e){if("small"===e.type)return"Main-Regular";if("large"===e.type)return"Size"+e.size+"-Regular";if("stack"===e.type)return"Size4-Regular";throw Error("Add support for delim type '"+e.type+"' here.")},rT=function(e,t,r,a){for(var n=Math.min(2,3-a.style.size),i=n;it)return r[i]}return r[r.length-1]},rB=function(e,t,r,a,n,i){"<"===e||"\\lt"===e||"⟨"===e?e="\\langle":(">"===e||"\\gt"===e||"⟩"===e)&&(e="\\rangle"),s=f.contains(rx,e)?rS:f.contains(rb,e)?rz:rM;var s,o=rT(e,t,s,a);return"small"===o.type?rl(e,o.style,r,a,n,i):"large"===o.type?rh(e,o.size,r,a,n,i):rg(e,t,r,a,n,i)},rq=function(e,t,r,a,n,i){var s=a.fontMetrics().axisHeight*a.sizeMultiplier,o=5/a.fontMetrics().ptPerEm,l=Math.max(t-s,r+s);return rB(e,Math.max(l/500*901,2*l-o),!0,a,n,i)},rC={sqrtImage:rv,sizedDelim:rk,sizeToMaxHeight:rw,customSizedDelim:rB,leftRightDelim:rq},rN={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}},rI=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","⌊","⌋","\\lceil","\\rceil","⌈","⌉","<",">","\\langle","⟨","\\rangle","⟩","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","⟮","⟯","\\lmoustache","\\rmoustache","⎰","⎱","/","\\backslash","|","\\vert","\\|","\\Vert","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."];function rR(e,t){var r=tQ(e);if(r&&f.contains(rI,r.text))return r;if(r)throw new i("Invalid delimiter '"+r.text+"' after '"+t.funcName+"'",e);throw new i("Invalid delimiter type '"+e.type+"'",e)}function rO(e){if(!e.body)throw Error("Bug: The leftright ParseNode wasn't fully parsed.")}tp({type:"delimsizing",names:["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],props:{numArgs:1,argTypes:["primitive"]},handler(e,t){var r=rR(t[0],e);return{type:"delimsizing",mode:e.parser.mode,size:rN[e.funcName].size,mclass:rN[e.funcName].mclass,delim:r.text}},htmlBuilder:(e,t)=>"."===e.delim?ta.makeSpan([e.mclass]):rC.sizedDelim(e.delim,e.size,t,e.mode,[e.mclass]),mathmlBuilder(e){var t=[];"."!==e.delim&&t.push(tO(e.delim,e.mode));var r=new tR.MathNode("mo",t);"mopen"===e.mclass||"mclose"===e.mclass?r.setAttribute("fence","true"):r.setAttribute("fence","false"),r.setAttribute("stretchy","true");var a=Z(rC.sizeToMaxHeight[e.size]);return r.setAttribute("minsize",a),r.setAttribute("maxsize",a),r}}),tp({type:"leftright-right",names:["\\right"],props:{numArgs:1,primitive:!0},handler(e,t){var r=e.parser.gullet.macros.get("\\current@color");if(r&&"string"!=typeof r)throw new i("\\current@color set to non-string in \\right");return{type:"leftright-right",mode:e.parser.mode,delim:rR(t[0],e).text,color:r}}}),tp({type:"leftright",names:["\\left"],props:{numArgs:1,primitive:!0},handler(e,t){var r=rR(t[0],e),a=e.parser;++a.leftrightDepth;var n=a.parseExpression(!1);--a.leftrightDepth,a.expect("\\right",!1);var i=tK(a.parseFunction(),"leftright-right");return{type:"leftright",mode:a.mode,body:n,left:r.text,right:i.delim,rightColor:i.color}},htmlBuilder(e,t){rO(e);for(var r,a,n=tw(e.body,t,!0,["mopen","mclose"]),i=0,s=0,o=!1,l=0;l{var r,a,n=ta.wrapFragment(tT(e.body,t),t),i=e.label.substr(1),s=t.sizeMultiplier,o=0,l=f.isCharacterBox(e.body);if("sout"===i)(r=ta.makeSpan(["stretchy","sout"])).height=t.fontMetrics().defaultRuleThickness/s,o=-.5*t.fontMetrics().xHeight;else if("phase"===i){var h=$({number:.6,unit:"pt"},t),m=$({number:.35,unit:"ex"},t);s/=t.havingBaseSizing().sizeMultiplier;var c=n.height+n.depth+h+m;n.style.paddingLeft=Z(c/2+h);var p,u=Math.floor(1e3*c*s),d=new es([new eo("phase","M400000 "+u+" H0 L"+u/2+" 0 l65 45 L145 "+(u-80)+" H400000z")],{width:"400em",height:Z(u/1e3),viewBox:"0 0 400000 "+u,preserveAspectRatio:"xMinYMin slice"});(r=ta.makeSvgSpan(["hide-tail"],[d],t)).style.height=Z(c),o=n.depth+h+m}else{/cancel/.test(i)?l||n.classes.push("cancel-pad"):"angl"===i?n.classes.push("anglpad"):n.classes.push("boxpad");var g=0,v=0,b=0;/box/.test(i)?(b=Math.max(t.fontMetrics().fboxrule,t.minRuleThickness),v=g=t.fontMetrics().fboxsep+("colorbox"===i?0:b)):"angl"===i?(g=4*(b=Math.max(t.fontMetrics().defaultRuleThickness,t.minRuleThickness)),v=Math.max(0,.25-n.depth)):v=g=l?.2:0,r=tZ.encloseSpan(n,i,g,v,t),/fbox|boxed|fcolorbox/.test(i)?(r.style.borderStyle="solid",r.style.borderWidth=Z(b)):"angl"===i&&.049!==b&&(r.style.borderTopWidth=Z(b),r.style.borderRightWidth=Z(b)),o=n.depth+v,e.backgroundColor&&(r.style.backgroundColor=e.backgroundColor,e.borderColor&&(r.style.borderColor=e.borderColor))}if(e.backgroundColor)a=ta.makeVList({positionType:"individualShift",children:[{type:"elem",elem:r,shift:o},{type:"elem",elem:n,shift:0}]},t);else{var y=/cancel|phase/.test(i)?["svg-align"]:[];a=ta.makeVList({positionType:"individualShift",children:[{type:"elem",elem:n,shift:0},{type:"elem",elem:r,shift:o,wrapperClasses:y}]},t)}return(/cancel/.test(i)&&(a.height=n.height,a.depth=n.depth),/cancel/.test(i)&&!l)?ta.makeSpan(["mord","cancel-lap"],[a],t):ta.makeSpan(["mord"],[a],t)},rE=(e,t)=>{var r=0,a=new tR.MathNode(e.label.indexOf("colorbox")>-1?"mpadded":"menclose",[tP(e.body,t)]);switch(e.label){case"\\cancel":a.setAttribute("notation","updiagonalstrike");break;case"\\bcancel":a.setAttribute("notation","downdiagonalstrike");break;case"\\phase":a.setAttribute("notation","phasorangle");break;case"\\sout":a.setAttribute("notation","horizontalstrike");break;case"\\fbox":a.setAttribute("notation","box");break;case"\\angl":a.setAttribute("notation","actuarial");break;case"\\fcolorbox":case"\\colorbox":if(r=t.fontMetrics().fboxsep*t.fontMetrics().ptPerEm,a.setAttribute("width","+"+2*r+"pt"),a.setAttribute("height","+"+2*r+"pt"),a.setAttribute("lspace",r+"pt"),a.setAttribute("voffset",r+"pt"),"\\fcolorbox"===e.label){var n=Math.max(t.fontMetrics().fboxrule,t.minRuleThickness);a.setAttribute("style","border: "+n+"em solid "+String(e.borderColor))}break;case"\\xcancel":a.setAttribute("notation","updiagonalstrike downdiagonalstrike")}return e.backgroundColor&&a.setAttribute("mathbackground",e.backgroundColor),a};tp({type:"enclose",names:["\\colorbox"],props:{numArgs:2,allowedInText:!0,argTypes:["color","text"]},handler(e,t,r){var{parser:a,funcName:n}=e,i=tK(t[0],"color-token").color,s=t[1];return{type:"enclose",mode:a.mode,label:n,backgroundColor:i,body:s}},htmlBuilder:rH,mathmlBuilder:rE}),tp({type:"enclose",names:["\\fcolorbox"],props:{numArgs:3,allowedInText:!0,argTypes:["color","color","text"]},handler(e,t,r){var{parser:a,funcName:n}=e,i=tK(t[0],"color-token").color,s=tK(t[1],"color-token").color,o=t[2];return{type:"enclose",mode:a.mode,label:n,backgroundColor:s,borderColor:i,body:o}},htmlBuilder:rH,mathmlBuilder:rE}),tp({type:"enclose",names:["\\fbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler(e,t){var{parser:r}=e;return{type:"enclose",mode:r.mode,label:"\\fbox",body:t[0]}}}),tp({type:"enclose",names:["\\cancel","\\bcancel","\\xcancel","\\sout","\\phase"],props:{numArgs:1},handler(e,t){var{parser:r,funcName:a}=e,n=t[0];return{type:"enclose",mode:r.mode,label:a,body:n}},htmlBuilder:rH,mathmlBuilder:rE}),tp({type:"enclose",names:["\\angl"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!1},handler(e,t){var{parser:r}=e;return{type:"enclose",mode:r.mode,label:"\\angl",body:t[0]}}});var rL={};function rD(e){for(var{type:t,names:r,props:a,handler:n,htmlBuilder:i,mathmlBuilder:s}=e,o={type:t,numArgs:a.numArgs||0,allowedInText:!1,numOptionalArgs:0,handler:n},l=0;l{if(!e.parser.settings.displayMode)throw new i("{"+e.envName+"} can be used only in display mode.")};function rU(e){if(-1===e.indexOf("ed"))return -1===e.indexOf("*")}function rY(e,t,r){var{hskipBeforeAndAfter:a,addJot:s,cols:o,arraystretch:l,colSeparationType:h,autoTag:m,singleRow:c,emptySingleRow:p,maxNumCols:u,leqno:d}=t;if(e.gullet.beginGroup(),c||e.gullet.macros.set("\\cr","\\\\\\relax"),!l){var g=e.gullet.expandMacroAsText("\\arraystretch");if(null==g)l=1;else if(!(l=parseFloat(g))||l<0)throw new i("Invalid \\arraystretch: "+g)}e.gullet.beginGroup();var f=[],v=[f],b=[],y=[],x=null!=m?[]:void 0;function w(){m&&e.gullet.macros.set("\\@eqnsw","1",!0)}function k(){x&&(e.gullet.macros.get("\\df@tag")?(x.push(e.subparse([new n("\\df@tag")])),e.gullet.macros.set("\\df@tag",void 0,!0)):x.push(Boolean(m)&&"1"===e.gullet.macros.get("\\@eqnsw")))}for(w(),y.push(rV(e));;){var S=e.parseExpression(!1,c?"\\end":"\\\\");e.gullet.endGroup(),e.gullet.beginGroup(),S={type:"ordgroup",mode:e.mode,body:S},r&&(S={type:"styling",mode:e.mode,style:r,body:[S]}),f.push(S);var M=e.fetch().text;if("&"===M){if(u&&f.length===u){if(c||h)throw new i("Too many tab characters: &",e.nextToken);e.settings.reportNonstrict("textEnv","Too few columns specified in the {array} column argument.")}e.consume()}else if("\\end"===M){k(),1===f.length&&"styling"===S.type&&0===S.body[0].body.length&&(v.length>1||!p)&&v.pop(),y.length0&&(w+=.25),c.push({pos:w,isDashed:e[t]})}for(k(l[0]),r=0;r0&&(z<(C+=x)&&(z=C),C=0),e.addJot&&(z+=v),A.height=M,A.depth=z,w+=M,A.pos=w,w+=z+C,m[r]=A,k(l[r+1])}var N=w/2+t.fontMetrics().axisHeight,I=e.cols||[],R=[],O=[];if(e.tags&&e.tags.some(e=>e))for(r=0;r=h)){var Y=void 0;(a>0||e.hskipBeforeAndAfter)&&0!==(Y=f.deflt(P.pregap,d))&&((n=ta.makeSpan(["arraycolsep"],[])).style.width=Z(Y),R.push(n));var X=[];for(r=0;r0){for(var K=ta.makeLineSpan("hline",t,p),J=ta.makeLineSpan("hdashline",t,p),Q=[{type:"elem",elem:m,shift:0}];c.length>0;){var ee=c.pop(),et=ee.pos-N;ee.isDashed?Q.push({type:"elem",elem:J,shift:et}):Q.push({type:"elem",elem:K,shift:et})}m=ta.makeVList({positionType:"individualShift",children:Q},t)}if(0===O.length)return ta.makeSpan(["mord"],[m],t);var er=ta.makeVList({positionType:"individualShift",children:O},t);return er=ta.makeSpan(["tag"],[er],t),ta.makeFragment([m,er])},rK={c:"center ",l:"left ",r:"right "},rJ=function(e,t){for(var r=[],a=new tR.MathNode("mtd",[],["mtr-glue"]),n=new tR.MathNode("mtd",[],["mml-eqn-num"]),i=0;i0){var u=e.cols,d="",g=!1,f=0,v=u.length;"separator"===u[0].type&&(c+="top ",f=1),"separator"===u[u.length-1].type&&(c+="bottom ",v-=1);for(var b=f;b0?"left ":"",c+=S[S.length-1].length>0?"right ":"";for(var M=1;M-1?"alignat":"align",s="split"===e.envName,o=rY(e.parser,{cols:a,addJot:!0,autoTag:s?void 0:rU(e.envName),emptySingleRow:!0,colSeparationType:n,maxNumCols:s?2:void 0,leqno:e.parser.settings.leqno},"display"),l=0,h={type:"ordgroup",mode:e.mode,body:[]};if(t[0]&&"ordgroup"===t[0].type){for(var m="",c=0;c0&&u&&(f=1),a[d]={type:"align",align:g,pregap:f,postgap:0}}return o.colSeparationType=u?"align":"alignat",o};rD({type:"array",names:["array","darray"],props:{numArgs:1},handler(e,t){var r=(tQ(t[0])?[t[0]]:tK(t[0],"ordgroup").body).map(function(e){var t=tJ(e).text;if(-1!=="lcr".indexOf(t))return{type:"align",align:t};if("|"===t)return{type:"separator",separator:"|"};if(":"===t)return{type:"separator",separator:":"};throw new i("Unknown column alignment: "+t,e)}),a={cols:r,hskipBeforeAndAfter:!0,maxNumCols:r.length};return rY(e.parser,a,rX(e.envName))},htmlBuilder:rZ,mathmlBuilder:rJ}),rD({type:"array",names:["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix","matrix*","pmatrix*","bmatrix*","Bmatrix*","vmatrix*","Vmatrix*"],props:{numArgs:0},handler(e){var t={matrix:null,pmatrix:["(",")"],bmatrix:["[","]"],Bmatrix:["\\{","\\}"],vmatrix:["|","|"],Vmatrix:["\\Vert","\\Vert"]}[e.envName.replace("*","")],r="c",a={hskipBeforeAndAfter:!1,cols:[{type:"align",align:r}]};if("*"===e.envName.charAt(e.envName.length-1)){var n=e.parser;if(n.consumeSpaces(),"["===n.fetch().text){if(n.consume(),n.consumeSpaces(),r=n.fetch().text,-1==="lcr".indexOf(r))throw new i("Expected l or c or r",n.nextToken);n.consume(),n.consumeSpaces(),n.expect("]"),n.consume(),a.cols=[{type:"align",align:r}]}}var s=rY(e.parser,a,rX(e.envName)),o=Math.max(0,...s.body.map(e=>e.length));return s.cols=Array(o).fill({type:"align",align:r}),t?{type:"leftright",mode:e.mode,body:[s],left:t[0],right:t[1],rightColor:void 0}:s},htmlBuilder:rZ,mathmlBuilder:rJ}),rD({type:"array",names:["smallmatrix"],props:{numArgs:0},handler(e){var t=rY(e.parser,{arraystretch:.5},"script");return t.colSeparationType="small",t},htmlBuilder:rZ,mathmlBuilder:rJ}),rD({type:"array",names:["subarray"],props:{numArgs:1},handler(e,t){var r=(tQ(t[0])?[t[0]]:tK(t[0],"ordgroup").body).map(function(e){var t=tJ(e).text;if(-1!=="lc".indexOf(t))return{type:"align",align:t};throw new i("Unknown column alignment: "+t,e)});if(r.length>1)throw new i("{subarray} can contain only one column");var a={cols:r,hskipBeforeAndAfter:!1,arraystretch:.5};if((a=rY(e.parser,a,"script")).body.length>0&&a.body[0].length>1)throw new i("{subarray} can contain only one column");return a},htmlBuilder:rZ,mathmlBuilder:rJ}),rD({type:"array",names:["cases","dcases","rcases","drcases"],props:{numArgs:0},handler(e){var t=rY(e.parser,{arraystretch:1.2,cols:[{type:"align",align:"l",pregap:0,postgap:1},{type:"align",align:"l",pregap:0,postgap:0}]},rX(e.envName));return{type:"leftright",mode:e.mode,body:[t],left:e.envName.indexOf("r")>-1?".":"\\{",right:e.envName.indexOf("r")>-1?"\\}":".",rightColor:void 0}},htmlBuilder:rZ,mathmlBuilder:rJ}),rD({type:"array",names:["align","align*","aligned","split"],props:{numArgs:0},handler:rQ,htmlBuilder:rZ,mathmlBuilder:rJ}),rD({type:"array",names:["gathered","gather","gather*"],props:{numArgs:0},handler(e){f.contains(["gather","gather*"],e.envName)&&rG(e);var t={cols:[{type:"align",align:"c"}],addJot:!0,colSeparationType:"gather",autoTag:rU(e.envName),emptySingleRow:!0,leqno:e.parser.settings.leqno};return rY(e.parser,t,"display")},htmlBuilder:rZ,mathmlBuilder:rJ}),rD({type:"array",names:["alignat","alignat*","alignedat"],props:{numArgs:1},handler:rQ,htmlBuilder:rZ,mathmlBuilder:rJ}),rD({type:"array",names:["equation","equation*"],props:{numArgs:0},handler(e){rG(e);var t={autoTag:rU(e.envName),emptySingleRow:!0,singleRow:!0,maxNumCols:1,leqno:e.parser.settings.leqno};return rY(e.parser,t,"display")},htmlBuilder:rZ,mathmlBuilder:rJ}),rD({type:"array",names:["CD"],props:{numArgs:0},handler:e=>(rG(e),function(e){var t=[];for(e.gullet.beginGroup(),e.gullet.macros.set("\\cr","\\\\\\relax"),e.gullet.beginGroup();;){t.push(e.parseExpression(!1,"\\\\")),e.gullet.endGroup(),e.gullet.beginGroup();var r=e.fetch().text;if("&"===r||"\\\\"===r)e.consume();else if("\\end"===r){0===t[t.length-1].length&&t.pop();break}else throw new i("Expected \\\\ or \\cr or \\end",e.nextToken)}for(var a=[],n=[a],s=0;s-1);else if("<>AV".indexOf(m)>-1)for(var p=0;p<2;p++){for(var u=!0,d=h+1;dAV=|." after @',o[h]);var g={type:"styling",body:[t2(m,c,e)],mode:"math",style:"display"};a.push(g),l=t7()}else l.body.push(o[h]);s%2==0?a.push(l):a.shift(),a=[],n.push(a)}e.gullet.endGroup(),e.gullet.endGroup();var f=Array(n[0].length).fill({type:"align",align:"c",pregap:.25,postgap:.25});return{type:"array",mode:"math",body:n,arraystretch:1,addJot:!0,rowGaps:[null],cols:f,colSeparationType:"CD",hLinesBeforeRow:Array(n.length+1).fill([])}}(e.parser)),htmlBuilder:rZ,mathmlBuilder:rJ}),rP["\\nonumber"]="\\gdef\\@eqnsw{0}",rP["\\notag"]="\\nonumber",tp({type:"text",names:["\\hline","\\hdashline"],props:{numArgs:0,allowedInText:!0,allowedInMath:!0},handler(e,t){throw new i(e.funcName+" valid only within array environment")}}),tp({type:"environment",names:["\\begin","\\end"],props:{numArgs:1,argTypes:["text"]},handler(e,t){var{parser:r,funcName:a}=e,n=t[0];if("ordgroup"!==n.type)throw new i("Invalid environment name",n);for(var s="",o=0;o{var t="ordgroup"===e.type&&e.body.length?e.body[0]:e;return"atom"===t.type&&("bin"===t.family||"rel"===t.family)?"m"+t.family:"mord"};tp({type:"mclass",names:["\\@binrel"],props:{numArgs:2},handler(e,t){var{parser:r}=e;return{type:"mclass",mode:r.mode,mclass:r5(t[0]),body:tg(t[1]),isCharacterBox:f.isCharacterBox(t[1])}}}),tp({type:"mclass",names:["\\stackrel","\\overset","\\underset"],props:{numArgs:2},handler(e,t){var r,{parser:a,funcName:n}=e,i=t[1],s=t[0];r="\\stackrel"!==n?r5(i):"mrel";var o={type:"op",mode:i.mode,limits:!0,alwaysHandleSupSub:!0,parentIsSupSub:!1,symbol:!1,suppressBaseShift:"\\stackrel"!==n,body:tg(i)},l={type:"supsub",mode:s.mode,base:o,sup:"\\underset"===n?null:s,sub:"\\underset"===n?s:null};return{type:"mclass",mode:a.mode,mclass:r,body:[l],isCharacterBox:f.isCharacterBox(l)}},htmlBuilder:r1,mathmlBuilder:r4});var r6=(e,t)=>{var r=e.font,a=t.withFont(r);return tT(e.body,a)},r7=(e,t)=>{var r=e.font,a=t.withFont(r);return tP(e.body,a)},r3={"\\Bbb":"\\mathbb","\\bold":"\\mathbf","\\frak":"\\mathfrak","\\bm":"\\boldsymbol"};tp({type:"font",names:["\\mathrm","\\mathit","\\mathbf","\\mathnormal","\\mathbb","\\mathcal","\\mathfrak","\\mathscr","\\mathsf","\\mathtt","\\Bbb","\\bold","\\frak"],props:{numArgs:1,allowedInArgument:!0},handler(e,t){var{parser:r,funcName:a}=e,n=td(t[0]),i=a;return i in r3&&(i=r3[i]),{type:"font",mode:r.mode,font:i.slice(1),body:n}},htmlBuilder:r6,mathmlBuilder:r7}),tp({type:"mclass",names:["\\boldsymbol","\\bm"],props:{numArgs:1},handler(e,t){var{parser:r}=e,a=t[0],n=f.isCharacterBox(a);return{type:"mclass",mode:r.mode,mclass:r5(a),body:[{type:"font",mode:r.mode,font:"boldsymbol",body:a}],isCharacterBox:n}}}),tp({type:"font",names:["\\rm","\\sf","\\tt","\\bf","\\it","\\cal"],props:{numArgs:0,allowedInText:!0},handler(e,t){var{parser:r,funcName:a,breakOnTokenText:n}=e,{mode:i}=r,s=r.parseExpression(!0,n);return{type:"font",mode:i,font:"math"+a.slice(1),body:{type:"ordgroup",mode:r.mode,body:s}}},htmlBuilder:r6,mathmlBuilder:r7});var r8=(e,t)=>{var r=t;return"display"===e?r=r.id>=B.SCRIPT.id?r.text():B.DISPLAY:"text"===e&&r.size===B.DISPLAY.size?r=B.TEXT:"script"===e?r=B.SCRIPT:"scriptscript"===e&&(r=B.SCRIPTSCRIPT),r},r2=(e,t)=>{var r,a,n,i,s,o,l,h,m,c,p,u=r8(e.size,t.style),d=u.fracNum(),g=u.fracDen();r=t.havingStyle(d);var f=tT(e.numer,r,t);if(e.continued){var v=8.5/t.fontMetrics().ptPerEm,b=3.5/t.fontMetrics().ptPerEm;f.height=f.height0?3*i:7*i,l=t.fontMetrics().denom1):(n>0?(s=t.fontMetrics().num2,o=i):(s=t.fontMetrics().num3,o=3*i),l=t.fontMetrics().denom2),a){var x=t.fontMetrics().axisHeight;s-f.depth-(x+.5*n){var r=new tR.MathNode("mfrac",[tP(e.numer,t),tP(e.denom,t)]);if(e.hasBarLine){if(e.barSize){var a=$(e.barSize,t);r.setAttribute("linethickness",Z(a))}}else r.setAttribute("linethickness","0px");var n=r8(e.size,t.style);if(n.size!==t.style.size){r=new tR.MathNode("mstyle",[r]);var i=n.size===B.DISPLAY.size?"true":"false";r.setAttribute("displaystyle",i),r.setAttribute("scriptlevel","0")}if(null!=e.leftDelim||null!=e.rightDelim){var s=[];if(null!=e.leftDelim){var o=new tR.MathNode("mo",[new tR.TextNode(e.leftDelim.replace("\\",""))]);o.setAttribute("fence","true"),s.push(o)}if(s.push(r),null!=e.rightDelim){var l=new tR.MathNode("mo",[new tR.TextNode(e.rightDelim.replace("\\",""))]);l.setAttribute("fence","true"),s.push(l)}return tH(s)}return r};tp({type:"genfrac",names:["\\dfrac","\\frac","\\tfrac","\\dbinom","\\binom","\\tbinom","\\\\atopfrac","\\\\bracefrac","\\\\brackfrac"],props:{numArgs:2,allowedInArgument:!0},handler(e,t){var r,{parser:a,funcName:n}=e,i=t[0],s=t[1],o=null,l=null,h="auto";switch(n){case"\\dfrac":case"\\frac":case"\\tfrac":r=!0;break;case"\\\\atopfrac":r=!1;break;case"\\dbinom":case"\\binom":case"\\tbinom":r=!1,o="(",l=")";break;case"\\\\bracefrac":r=!1,o="\\{",l="\\}";break;case"\\\\brackfrac":r=!1,o="[",l="]";break;default:throw Error("Unrecognized genfrac command")}switch(n){case"\\dfrac":case"\\dbinom":h="display";break;case"\\tfrac":case"\\tbinom":h="text"}return{type:"genfrac",mode:a.mode,continued:!1,numer:i,denom:s,hasBarLine:r,leftDelim:o,rightDelim:l,size:h,barSize:null}},htmlBuilder:r2,mathmlBuilder:r9}),tp({type:"genfrac",names:["\\cfrac"],props:{numArgs:2},handler(e,t){var{parser:r,funcName:a}=e,n=t[0],i=t[1];return{type:"genfrac",mode:r.mode,continued:!0,numer:n,denom:i,hasBarLine:!0,leftDelim:null,rightDelim:null,size:"display",barSize:null}}}),tp({type:"infix",names:["\\over","\\choose","\\atop","\\brace","\\brack"],props:{numArgs:0,infix:!0},handler(e){var t,{parser:r,funcName:a,token:n}=e;switch(a){case"\\over":t="\\frac";break;case"\\choose":t="\\binom";break;case"\\atop":t="\\\\atopfrac";break;case"\\brace":t="\\\\bracefrac";break;case"\\brack":t="\\\\brackfrac";break;default:throw Error("Unrecognized infix genfrac command")}return{type:"infix",mode:r.mode,replaceWith:t,token:n}}});var ae=["display","text","script","scriptscript"],at=function(e){var t=null;return e.length>0&&(t="."===(t=e)?null:t),t};tp({type:"genfrac",names:["\\genfrac"],props:{numArgs:6,allowedInArgument:!0,argTypes:["math","math","size","text","math","math"]},handler(e,t){var r,{parser:a}=e,n=t[4],i=t[5],s=td(t[0]),o="atom"===s.type&&"open"===s.family?at(s.text):null,l=td(t[1]),h="atom"===l.type&&"close"===l.family?at(l.text):null,m=tK(t[2],"size"),c=null;r=!!m.isBlank||(c=m.value).number>0;var p="auto",u=t[3];if("ordgroup"===u.type){if(u.body.length>0){var d=tK(u.body[0],"textord");p=ae[Number(d.text)]}}else u=tK(u,"textord"),p=ae[Number(u.text)];return{type:"genfrac",mode:a.mode,numer:n,denom:i,continued:!1,hasBarLine:r,barSize:c,leftDelim:o,rightDelim:h,size:p}},htmlBuilder:r2,mathmlBuilder:r9}),tp({type:"infix",names:["\\above"],props:{numArgs:1,argTypes:["size"],infix:!0},handler(e,t){var{parser:r,funcName:a,token:n}=e;return{type:"infix",mode:r.mode,replaceWith:"\\\\abovefrac",size:tK(t[0],"size").value,token:n}}}),tp({type:"genfrac",names:["\\\\abovefrac"],props:{numArgs:3,argTypes:["math","size","math"]},handler(e,t){var{parser:r,funcName:a}=e,n=t[0],i=d(tK(t[1],"infix").size),s=t[2],o=i.number>0;return{type:"genfrac",mode:r.mode,numer:n,denom:s,continued:!1,hasBarLine:o,barSize:i,leftDelim:null,rightDelim:null,size:"auto"}},htmlBuilder:r2,mathmlBuilder:r9});var ar=(e,t)=>{var r,a,n,i=t.style;"supsub"===e.type?(r=e.sup?tT(e.sup,t.havingStyle(i.sup()),t):tT(e.sub,t.havingStyle(i.sub()),t),a=tK(e.base,"horizBrace")):a=tK(e,"horizBrace");var s=tT(a.base,t.havingBaseStyle(B.DISPLAY)),o=tZ.svgSpan(a,t);if(a.isOver?(n=ta.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:s},{type:"kern",size:.1},{type:"elem",elem:o}]},t)).children[0].children[0].children[1].classes.push("svg-align"):(n=ta.makeVList({positionType:"bottom",positionData:s.depth+.1+o.height,children:[{type:"elem",elem:o},{type:"kern",size:.1},{type:"elem",elem:s}]},t)).children[0].children[0].children[0].classes.push("svg-align"),r){var l=ta.makeSpan(["mord",a.isOver?"mover":"munder"],[n],t);n=a.isOver?ta.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:l},{type:"kern",size:.2},{type:"elem",elem:r}]},t):ta.makeVList({positionType:"bottom",positionData:l.depth+.2+r.height+r.depth,children:[{type:"elem",elem:r},{type:"kern",size:.2},{type:"elem",elem:l}]},t)}return ta.makeSpan(["mord",a.isOver?"mover":"munder"],[n],t)};tp({type:"horizBrace",names:["\\overbrace","\\underbrace"],props:{numArgs:1},handler(e,t){var{parser:r,funcName:a}=e;return{type:"horizBrace",mode:r.mode,label:a,isOver:/^\\over/.test(a),base:t[0]}},htmlBuilder:ar,mathmlBuilder(e,t){var r=tZ.mathMLnode(e.label);return new tR.MathNode(e.isOver?"mover":"munder",[tP(e.base,t),r])}}),tp({type:"href",names:["\\href"],props:{numArgs:2,argTypes:["url","original"],allowedInText:!0},handler(e,t){var{parser:r}=e,a=t[1],n=tK(t[0],"url").url;return r.settings.isTrusted({command:"\\href",url:n})?{type:"href",mode:r.mode,href:n,body:tg(a)}:r.formatUnsupportedCmd("\\href")},htmlBuilder(e,t){var r=tw(e.body,t,!1);return ta.makeAnchor(e.href,[],r,t)},mathmlBuilder(e,t){var r=tD(e.body,t);return r instanceof tN||(r=new tN("mrow",[r])),r.setAttribute("href",e.href),r}}),tp({type:"href",names:["\\url"],props:{numArgs:1,argTypes:["url"],allowedInText:!0},handler(e,t){var{parser:r}=e,a=tK(t[0],"url").url;if(!r.settings.isTrusted({command:"\\url",url:a}))return r.formatUnsupportedCmd("\\url");for(var n=[],i=0;inew tR.MathNode("mrow",tL(e.body,t))}),tp({type:"html",names:["\\htmlClass","\\htmlId","\\htmlStyle","\\htmlData"],props:{numArgs:2,argTypes:["raw","original"],allowedInText:!0},handler(e,t){var r,{parser:a,funcName:n,token:s}=e,o=tK(t[0],"raw").string,l=t[1];a.settings.strict&&a.settings.reportNonstrict("htmlExtension","HTML extension is disabled on strict mode");var h={};switch(n){case"\\htmlClass":h.class=o,r={command:"\\htmlClass",class:o};break;case"\\htmlId":h.id=o,r={command:"\\htmlId",id:o};break;case"\\htmlStyle":h.style=o,r={command:"\\htmlStyle",style:o};break;case"\\htmlData":for(var m=o.split(","),c=0;ctD(e.body,t)}),tp({type:"htmlmathml",names:["\\html@mathml"],props:{numArgs:2,allowedInText:!0},handler(e,t){var{parser:r}=e;return{type:"htmlmathml",mode:r.mode,html:tg(t[0]),mathml:tg(t[1])}},htmlBuilder(e,t){var r=tw(e.html,t,!1);return ta.makeFragment(r)},mathmlBuilder:(e,t)=>tD(e.mathml,t)});var aa=function(e){if(/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(e))return{number:+e,unit:"bp"};var t=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(e);if(!t)throw new i("Invalid size: '"+e+"' in \\includegraphics");var r={number:+(t[1]+t[2]),unit:t[3]};if(!j(r))throw new i("Invalid unit: '"+r.unit+"' in \\includegraphics.");return r};tp({type:"includegraphics",names:["\\includegraphics"],props:{numArgs:1,numOptionalArgs:1,argTypes:["raw","url"],allowedInText:!1},handler(e,t,r){var{parser:a}=e,n={number:0,unit:"em"},s={number:.9,unit:"em"},o={number:0,unit:"em"},l="";if(r[0])for(var h=tK(r[0],"raw").string.split(","),m=0;m0&&(a=$(e.totalheight,t)-r);var n=0;e.width.number>0&&(n=$(e.width,t));var i={height:Z(r+a)};n>0&&(i.width=Z(n)),a>0&&(i.verticalAlign=Z(-a));var s=new ea(e.src,e.alt,i);return s.height=r,s.depth=a,s},mathmlBuilder(e,t){var r=new tR.MathNode("mglyph",[]);r.setAttribute("alt",e.alt);var a=$(e.height,t),n=0;if(e.totalheight.number>0&&(n=$(e.totalheight,t)-a,r.setAttribute("valign",Z(-n))),r.setAttribute("height",Z(a+n)),e.width.number>0){var i=$(e.width,t);r.setAttribute("width",Z(i))}return r.setAttribute("src",e.src),r}}),tp({type:"kern",names:["\\kern","\\mkern","\\hskip","\\mskip"],props:{numArgs:1,argTypes:["size"],primitive:!0,allowedInText:!0},handler(e,t){var{parser:r,funcName:a}=e,n=tK(t[0],"size");if(r.settings.strict){var i="m"===a[1],s="mu"===n.value.unit;i?(s||r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+a+" supports only mu units, not "+n.value.unit+" units"),"math"!==r.mode&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+a+" works only in math mode")):s&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+a+" doesn't support mu units")}return{type:"kern",mode:r.mode,dimension:n.value}},htmlBuilder:(e,t)=>ta.makeGlue(e.dimension,t),mathmlBuilder(e,t){var r=$(e.dimension,t);return new tR.SpaceNode(r)}}),tp({type:"lap",names:["\\mathllap","\\mathrlap","\\mathclap"],props:{numArgs:1,allowedInText:!0},handler(e,t){var{parser:r,funcName:a}=e,n=t[0];return{type:"lap",mode:r.mode,alignment:a.slice(5),body:n}},htmlBuilder(e,t){"clap"===e.alignment?(r=ta.makeSpan([],[tT(e.body,t)]),r=ta.makeSpan(["inner"],[r],t)):r=ta.makeSpan(["inner"],[tT(e.body,t)]);var r,a=ta.makeSpan(["fix"],[]),n=ta.makeSpan([e.alignment],[r,a],t),i=ta.makeSpan(["strut"]);return i.style.height=Z(n.height+n.depth),n.depth&&(i.style.verticalAlign=Z(-n.depth)),n.children.unshift(i),n=ta.makeSpan(["thinbox"],[n],t),ta.makeSpan(["mord","vbox"],[n],t)},mathmlBuilder(e,t){var r=new tR.MathNode("mpadded",[tP(e.body,t)]);if("rlap"!==e.alignment){var a="llap"===e.alignment?"-1":"-0.5";r.setAttribute("lspace",a+"width")}return r.setAttribute("width","0px"),r}}),tp({type:"styling",names:["\\(","$"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(e,t){var{funcName:r,parser:a}=e,n=a.mode;a.switchMode("math");var i="\\("===r?"\\)":"$",s=a.parseExpression(!1,i);return a.expect(i),a.switchMode(n),{type:"styling",mode:a.mode,style:"text",body:s}}}),tp({type:"text",names:["\\)","\\]"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(e,t){throw new i("Mismatched "+e.funcName)}});var an=(e,t)=>{switch(t.style.size){case B.DISPLAY.size:return e.display;case B.TEXT.size:return e.text;case B.SCRIPT.size:return e.script;case B.SCRIPTSCRIPT.size:return e.scriptscript;default:return e.text}};tp({type:"mathchoice",names:["\\mathchoice"],props:{numArgs:4,primitive:!0},handler(e,t){var{parser:r}=e;return{type:"mathchoice",mode:r.mode,display:tg(t[0]),text:tg(t[1]),script:tg(t[2]),scriptscript:tg(t[3])}},htmlBuilder(e,t){var r=an(e,t),a=tw(r,t,!1);return ta.makeFragment(a)},mathmlBuilder(e,t){var r=an(e,t);return tD(r,t)}});var ai=(e,t,r,a,n,i,s)=>{e=ta.makeSpan([],[e]);var o,l,h,m=r&&f.isCharacterBox(r);if(t){var c=tT(t,a.havingStyle(n.sup()),a);l={elem:c,kern:Math.max(a.fontMetrics().bigOpSpacing1,a.fontMetrics().bigOpSpacing3-c.depth)}}if(r){var p=tT(r,a.havingStyle(n.sub()),a);o={elem:p,kern:Math.max(a.fontMetrics().bigOpSpacing2,a.fontMetrics().bigOpSpacing4-p.height)}}if(l&&o){var u=a.fontMetrics().bigOpSpacing5+o.elem.height+o.elem.depth+o.kern+e.depth+s;h=ta.makeVList({positionType:"bottom",positionData:u,children:[{type:"kern",size:a.fontMetrics().bigOpSpacing5},{type:"elem",elem:o.elem,marginLeft:Z(-i)},{type:"kern",size:o.kern},{type:"elem",elem:e},{type:"kern",size:l.kern},{type:"elem",elem:l.elem,marginLeft:Z(i)},{type:"kern",size:a.fontMetrics().bigOpSpacing5}]},a)}else if(o){var d=e.height-s;h=ta.makeVList({positionType:"top",positionData:d,children:[{type:"kern",size:a.fontMetrics().bigOpSpacing5},{type:"elem",elem:o.elem,marginLeft:Z(-i)},{type:"kern",size:o.kern},{type:"elem",elem:e}]},a)}else{if(!l)return e;var g=e.depth+s;h=ta.makeVList({positionType:"bottom",positionData:g,children:[{type:"elem",elem:e},{type:"kern",size:l.kern},{type:"elem",elem:l.elem,marginLeft:Z(i)},{type:"kern",size:a.fontMetrics().bigOpSpacing5}]},a)}var v=[h];if(o&&0!==i&&!m){var b=ta.makeSpan(["mspace"],[],a);b.style.marginRight=Z(i),v.unshift(b)}return ta.makeSpan(["mop","op-limits"],v,a)},as=["\\smallint"],ao=(e,t)=>{var r,a,n,i,s=!1;"supsub"===e.type?(r=e.sup,a=e.sub,n=tK(e.base,"op"),s=!0):n=tK(e,"op");var o=t.style,l=!1;if(o.size===B.DISPLAY.size&&n.symbol&&!f.contains(as,n.name)&&(l=!0),n.symbol){var h=l?"Size2-Regular":"Size1-Regular",m="";if(("\\oiint"===n.name||"\\oiiint"===n.name)&&(m=n.name.substr(1),n.name="oiint"===m?"\\iint":"\\iiint"),i=ta.makeSymbol(n.name,h,"math",t,["mop","op-symbol",l?"large-op":"small-op"]),m.length>0){var c=i.italic,p=ta.staticSvg(m+"Size"+(l?"2":"1"),t);i=ta.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:0},{type:"elem",elem:p,shift:l?.08:0}]},t),n.name="\\"+m,i.classes.unshift("mop"),i.italic=c}}else if(n.body){var u=tw(n.body,t,!0);1===u.length&&u[0]instanceof ei?(i=u[0]).classes[0]="mop":i=ta.makeSpan(["mop"],u,t)}else{for(var d=[],g=1;g{var r;if(e.symbol)r=new tN("mo",[tO(e.name,e.mode)]),f.contains(as,e.name)&&r.setAttribute("largeop","false");else if(e.body)r=new tN("mo",tL(e.body,t));else{r=new tN("mi",[new tI(e.name.slice(1))]);var a=new tN("mo",[tO("⁡","text")]);r=e.parentIsSupSub?new tN("mrow",[r,a]):tC([r,a])}return r},ah={"∏":"\\prod","∐":"\\coprod","∑":"\\sum","⋀":"\\bigwedge","⋁":"\\bigvee","⋂":"\\bigcap","⋃":"\\bigcup","⨀":"\\bigodot","⨁":"\\bigoplus","⨂":"\\bigotimes","⨄":"\\biguplus","⨆":"\\bigsqcup"};tp({type:"op",names:["\\coprod","\\bigvee","\\bigwedge","\\biguplus","\\bigcap","\\bigcup","\\intop","\\prod","\\sum","\\bigotimes","\\bigoplus","\\bigodot","\\bigsqcup","\\smallint","∏","∐","∑","⋀","⋁","⋂","⋃","⨀","⨁","⨂","⨄","⨆"],props:{numArgs:0},handler(e,t){var{parser:r,funcName:a}=e,n=a;return 1===n.length&&(n=ah[n]),{type:"op",mode:r.mode,limits:!0,parentIsSupSub:!1,symbol:!0,name:n}},htmlBuilder:ao,mathmlBuilder:al}),tp({type:"op",names:["\\mathop"],props:{numArgs:1,primitive:!0},handler(e,t){var{parser:r}=e,a=t[0];return{type:"op",mode:r.mode,limits:!1,parentIsSupSub:!1,symbol:!1,body:tg(a)}},htmlBuilder:ao,mathmlBuilder:al});var am={"∫":"\\int","∬":"\\iint","∭":"\\iiint","∮":"\\oint","∯":"\\oiint","∰":"\\oiiint"};tp({type:"op",names:["\\arcsin","\\arccos","\\arctan","\\arctg","\\arcctg","\\arg","\\ch","\\cos","\\cosec","\\cosh","\\cot","\\cotg","\\coth","\\csc","\\ctg","\\cth","\\deg","\\dim","\\exp","\\hom","\\ker","\\lg","\\ln","\\log","\\sec","\\sin","\\sinh","\\sh","\\tan","\\tanh","\\tg","\\th"],props:{numArgs:0},handler(e){var{parser:t,funcName:r}=e;return{type:"op",mode:t.mode,limits:!1,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:ao,mathmlBuilder:al}),tp({type:"op",names:["\\det","\\gcd","\\inf","\\lim","\\max","\\min","\\Pr","\\sup"],props:{numArgs:0},handler(e){var{parser:t,funcName:r}=e;return{type:"op",mode:t.mode,limits:!0,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:ao,mathmlBuilder:al}),tp({type:"op",names:["\\int","\\iint","\\iiint","\\oint","\\oiint","\\oiiint","∫","∬","∭","∮","∯","∰"],props:{numArgs:0},handler(e){var{parser:t,funcName:r}=e,a=r;return 1===a.length&&(a=am[a]),{type:"op",mode:t.mode,limits:!1,parentIsSupSub:!1,symbol:!0,name:a}},htmlBuilder:ao,mathmlBuilder:al});var ac,ap,au=(e,t)=>{var r,a,n,i,s=!1;if("supsub"===e.type?(r=e.sup,a=e.sub,n=tK(e.base,"operatorname"),s=!0):n=tK(e,"operatorname"),n.body.length>0){for(var o=tw(n.body.map(e=>{var t=e.text;return"string"==typeof t?{type:"textord",mode:e.mode,text:t}:e}),t.withFont("mathrm"),!0),l=0;l{for(var r=tL(e.body,t.withFont("mathrm")),a=!0,n=0;ne.toText()).join("");r=[new tR.TextNode(o)]}var l=new tR.MathNode("mi",r);l.setAttribute("mathvariant","normal");var h=new tR.MathNode("mo",[tO("⁡","text")]);return e.parentIsSupSub?new tR.MathNode("mrow",[l,h]):tR.newDocumentFragment([l,h])};function ag(e,t,r){for(var a=tw(e,t,!1),n=t.sizeMultiplier/r.sizeMultiplier,i=0;ie.semisimple?ta.makeFragment(tw(e.body,t,!1)):ta.makeSpan(["mord"],tw(e.body,t,!0),t),mathmlBuilder:(e,t)=>tD(e.body,t,!0)}),tp({type:"overline",names:["\\overline"],props:{numArgs:1},handler(e,t){var{parser:r}=e,a=t[0];return{type:"overline",mode:r.mode,body:a}},htmlBuilder(e,t){var r=tT(e.body,t.havingCrampedStyle()),a=ta.makeLineSpan("overline-line",t),n=t.fontMetrics().defaultRuleThickness,i=ta.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r},{type:"kern",size:3*n},{type:"elem",elem:a},{type:"kern",size:n}]},t);return ta.makeSpan(["mord","overline"],[i],t)},mathmlBuilder(e,t){var r=new tR.MathNode("mo",[new tR.TextNode("‾")]);r.setAttribute("stretchy","true");var a=new tR.MathNode("mover",[tP(e.body,t),r]);return a.setAttribute("accent","true"),a}}),tp({type:"phantom",names:["\\phantom"],props:{numArgs:1,allowedInText:!0},handler(e,t){var{parser:r}=e,a=t[0];return{type:"phantom",mode:r.mode,body:tg(a)}},htmlBuilder(e,t){var r=tw(e.body,t.withPhantom(),!1);return ta.makeFragment(r)},mathmlBuilder(e,t){var r=tL(e.body,t);return new tR.MathNode("mphantom",r)}}),tp({type:"hphantom",names:["\\hphantom"],props:{numArgs:1,allowedInText:!0},handler(e,t){var{parser:r}=e,a=t[0];return{type:"hphantom",mode:r.mode,body:a}},htmlBuilder(e,t){var r=ta.makeSpan([],[tT(e.body,t.withPhantom())]);if(r.height=0,r.depth=0,r.children)for(var a=0;a=0?o.setAttribute("height",Z(n)):(o.setAttribute("height",Z(n)),o.setAttribute("depth",Z(-n))),o.setAttribute("voffset",Z(n)),o}});var af=["\\tiny","\\sixptsize","\\scriptsize","\\footnotesize","\\small","\\normalsize","\\large","\\Large","\\LARGE","\\huge","\\Huge"],av=(e,t)=>{var r=t.havingSize(e.size);return ag(e.body,r,t)};tp({type:"sizing",names:af,props:{numArgs:0,allowedInText:!0},handler(e,t){var{breakOnTokenText:r,funcName:a,parser:n}=e,i=n.parseExpression(!1,r);return{type:"sizing",mode:n.mode,size:af.indexOf(a)+1,body:i}},htmlBuilder:av,mathmlBuilder(e,t){var r=t.havingSize(e.size),a=tL(e.body,r),n=new tR.MathNode("mstyle",a);return n.setAttribute("mathsize",Z(r.sizeMultiplier)),n}}),tp({type:"smash",names:["\\smash"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0},handler(e,t,r){var{parser:a}=e,n=!1,i=!1,s=r[0]&&tK(r[0],"ordgroup");if(s)for(var o="",l=0;lr.height+r.depth+i&&(i=(i+m-r.height-r.depth)/2);var c=o.height-r.height-i-l;r.style.paddingLeft=Z(h);var p=ta.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r,wrapperClasses:["svg-align"]},{type:"kern",size:-(r.height+c)},{type:"elem",elem:o},{type:"kern",size:l}]},t);if(!e.index)return ta.makeSpan(["mord","sqrt"],[p],t);var u=t.havingStyle(B.SCRIPTSCRIPT),d=tT(e.index,u,t),g=.6*(p.height-p.depth),f=ta.makeVList({positionType:"shift",positionData:-g,children:[{type:"elem",elem:d}]},t),v=ta.makeSpan(["root"],[f]);return ta.makeSpan(["mord","sqrt"],[v,p],t)},mathmlBuilder(e,t){var{body:r,index:a}=e;return a?new tR.MathNode("mroot",[tP(r,t),tP(a,t)]):new tR.MathNode("msqrt",[tP(r,t)])}});var ab={display:B.DISPLAY,text:B.TEXT,script:B.SCRIPT,scriptscript:B.SCRIPTSCRIPT};tp({type:"styling",names:["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e,t){var{breakOnTokenText:r,funcName:a,parser:n}=e,i=n.parseExpression(!0,r),s=a.slice(1,a.length-5);return{type:"styling",mode:n.mode,style:s,body:i}},htmlBuilder(e,t){var r=ab[e.style],a=t.havingStyle(r).withFont("");return ag(e.body,a,t)},mathmlBuilder(e,t){var r=ab[e.style],a=t.havingStyle(r),n=tL(e.body,a),i=new tR.MathNode("mstyle",n),s={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]}[e.style];return i.setAttribute("scriptlevel",s[0]),i.setAttribute("displaystyle",s[1]),i}});var ay=function(e,t){var r=e.base;return r?"op"===r.type?r.limits&&(t.style.size===B.DISPLAY.size||r.alwaysHandleSupSub)?ao:null:"operatorname"===r.type?r.alwaysHandleSupSub&&(t.style.size===B.DISPLAY.size||r.limits)?au:null:"accent"===r.type?f.isCharacterBox(r.base)?t0:null:"horizBrace"!==r.type?null:!e.sub===r.isOver?ar:null:null};tu({type:"supsub",htmlBuilder(e,t){var r,a,n,i,s=ay(e,t);if(s)return s(e,t);var{base:o,sup:l,sub:h}=e,m=tT(o,t),c=t.fontMetrics(),p=0,u=0,d=o&&f.isCharacterBox(o);if(l){var g=t.havingStyle(t.style.sup());r=tT(l,g,t),d||(p=m.height-g.fontMetrics().supDrop*g.sizeMultiplier/t.sizeMultiplier)}if(h){var v=t.havingStyle(t.style.sub());a=tT(h,v,t),d||(u=m.depth+v.fontMetrics().subDrop*v.sizeMultiplier/t.sizeMultiplier)}n=t.style===B.DISPLAY?c.sup1:t.style.cramped?c.sup3:c.sup2;var b=t.sizeMultiplier,y=Z(.5/c.ptPerEm/b),x=null;if(a){var w=e.base&&"op"===e.base.type&&e.base.name&&("\\oiint"===e.base.name||"\\oiiint"===e.base.name);(m instanceof ei||w)&&(x=Z(-m.italic))}if(r&&a){p=Math.max(p,n,r.depth+.25*c.xHeight),u=Math.max(u,c.sub2);var k=4*c.defaultRuleThickness;if(p-r.depth-(a.height-u)0&&(p+=S,u-=S)}var M=[{type:"elem",elem:a,shift:u,marginRight:y,marginLeft:x},{type:"elem",elem:r,shift:-p,marginRight:y}];i=ta.makeVList({positionType:"individualShift",children:M},t)}else if(a){u=Math.max(u,c.sub1,a.height-.8*c.xHeight);var z=[{type:"elem",elem:a,marginLeft:x,marginRight:y}];i=ta.makeVList({positionType:"shift",positionData:u,children:z},t)}else if(r)p=Math.max(p,n,r.depth+.25*c.xHeight),i=ta.makeVList({positionType:"shift",positionData:-p,children:[{type:"elem",elem:r,marginRight:y}]},t);else throw Error("supsub must have either sup or sub.");var A=tz(m,"right")||"mord";return ta.makeSpan([A],[m,ta.makeSpan(["msupsub"],[i])],t)},mathmlBuilder(e,t){var r,a,n,i=!1;e.base&&"horizBrace"===e.base.type&&!!e.sup===e.base.isOver&&(i=!0,r=e.base.isOver),e.base&&("op"===e.base.type||"operatorname"===e.base.type)&&(e.base.parentIsSupSub=!0);var s=[tP(e.base,t)];if(e.sub&&s.push(tP(e.sub,t)),e.sup&&s.push(tP(e.sup,t)),i)n=r?"mover":"munder";else if(e.sub){if(e.sup){var o=e.base;n=o&&"op"===o.type&&o.limits&&t.style===B.DISPLAY?"munderover":o&&"operatorname"===o.type&&o.alwaysHandleSupSub&&(t.style===B.DISPLAY||o.limits)?"munderover":"msubsup"}else{var l=e.base;n=l&&"op"===l.type&&l.limits&&(t.style===B.DISPLAY||l.alwaysHandleSupSub)?"munder":l&&"operatorname"===l.type&&l.alwaysHandleSupSub&&(l.limits||t.style===B.DISPLAY)?"munder":"msub"}}else{var h=e.base;n=h&&"op"===h.type&&h.limits&&(t.style===B.DISPLAY||h.alwaysHandleSupSub)?"mover":h&&"operatorname"===h.type&&h.alwaysHandleSupSub&&(h.limits||t.style===B.DISPLAY)?"mover":"msup"}return new tR.MathNode(n,s)}}),tu({type:"atom",htmlBuilder:(e,t)=>ta.mathsym(e.text,e.mode,t,["m"+e.family]),mathmlBuilder(e,t){var r=new tR.MathNode("mo",[tO(e.text,e.mode)]);if("bin"===e.family){var a=tE(e,t);"bold-italic"===a&&r.setAttribute("mathvariant",a)}else"punct"===e.family?r.setAttribute("separator","true"):("open"===e.family||"close"===e.family)&&r.setAttribute("stretchy","false");return r}});var ax={mi:"italic",mn:"normal",mtext:"normal"};tu({type:"mathord",htmlBuilder:(e,t)=>ta.makeOrd(e,t,"mathord"),mathmlBuilder(e,t){var r=new tR.MathNode("mi",[tO(e.text,e.mode,t)]),a=tE(e,t)||"italic";return a!==ax[r.type]&&r.setAttribute("mathvariant",a),r}}),tu({type:"textord",htmlBuilder:(e,t)=>ta.makeOrd(e,t,"textord"),mathmlBuilder(e,t){var r,a=tO(e.text,e.mode,t),n=tE(e,t)||"normal";return r="text"===e.mode?new tR.MathNode("mtext",[a]):/[0-9]/.test(e.text)?new tR.MathNode("mn",[a]):"\\prime"===e.text?new tR.MathNode("mo",[a]):new tR.MathNode("mi",[a]),n!==ax[r.type]&&r.setAttribute("mathvariant",n),r}});var aw={"\\nobreak":"nobreak","\\allowbreak":"allowbreak"},ak={" ":{},"\\ ":{},"~":{className:"nobreak"},"\\space":{},"\\nobreakspace":{className:"nobreak"}};tu({type:"spacing",htmlBuilder(e,t){if(ak.hasOwnProperty(e.text)){var r=ak[e.text].className||"";if("text"!==e.mode)return ta.makeSpan(["mspace",r],[ta.mathsym(e.text,e.mode,t)],t);var a=ta.makeOrd(e,t,"textord");return a.classes.push(r),a}if(aw.hasOwnProperty(e.text))return ta.makeSpan(["mspace",aw[e.text]],[],t);throw new i('Unknown type of space "'+e.text+'"')},mathmlBuilder(e,t){var r;if(ak.hasOwnProperty(e.text))r=new tR.MathNode("mtext",[new tR.TextNode("\xa0")]);else if(aw.hasOwnProperty(e.text))return new tR.MathNode("mspace");else throw new i('Unknown type of space "'+e.text+'"');return r}});var aS=()=>{var e=new tR.MathNode("mtd",[]);return e.setAttribute("width","50%"),e};tu({type:"tag",mathmlBuilder(e,t){var r=new tR.MathNode("mtable",[new tR.MathNode("mtr",[aS(),new tR.MathNode("mtd",[tD(e.body,t)]),aS(),new tR.MathNode("mtd",[tD(e.tag,t)])])]);return r.setAttribute("width","100%"),r}});var aM={"\\text":void 0,"\\textrm":"textrm","\\textsf":"textsf","\\texttt":"texttt","\\textnormal":"textrm"},az={"\\textbf":"textbf","\\textmd":"textmd"},aA={"\\textit":"textit","\\textup":"textup"},aT=(e,t)=>{var r=e.font;return r?aM[r]?t.withTextFontFamily(aM[r]):az[r]?t.withTextFontWeight(az[r]):t.withTextFontShape(aA[r]):t};tp({type:"text",names:["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textbf","\\textmd","\\textit","\\textup"],props:{numArgs:1,argTypes:["text"],allowedInArgument:!0,allowedInText:!0},handler(e,t){var{parser:r,funcName:a}=e,n=t[0];return{type:"text",mode:r.mode,body:tg(n),font:a}},htmlBuilder(e,t){var r=aT(e,t),a=tw(e.body,r,!0);return ta.makeSpan(["mord","text"],a,r)},mathmlBuilder(e,t){var r=aT(e,t);return tD(e.body,r)}}),tp({type:"underline",names:["\\underline"],props:{numArgs:1,allowedInText:!0},handler(e,t){var{parser:r}=e;return{type:"underline",mode:r.mode,body:t[0]}},htmlBuilder(e,t){var r=tT(e.body,t),a=ta.makeLineSpan("underline-line",t),n=t.fontMetrics().defaultRuleThickness,i=ta.makeVList({positionType:"top",positionData:r.height,children:[{type:"kern",size:n},{type:"elem",elem:a},{type:"kern",size:3*n},{type:"elem",elem:r}]},t);return ta.makeSpan(["mord","underline"],[i],t)},mathmlBuilder(e,t){var r=new tR.MathNode("mo",[new tR.TextNode("‾")]);r.setAttribute("stretchy","true");var a=new tR.MathNode("munder",[tP(e.body,t),r]);return a.setAttribute("accentunder","true"),a}}),tp({type:"vcenter",names:["\\vcenter"],props:{numArgs:1,argTypes:["original"],allowedInText:!1},handler(e,t){var{parser:r}=e;return{type:"vcenter",mode:r.mode,body:t[0]}},htmlBuilder(e,t){var r=tT(e.body,t),a=t.fontMetrics().axisHeight,n=.5*(r.height-a-(r.depth+a));return ta.makeVList({positionType:"shift",positionData:n,children:[{type:"elem",elem:r}]},t)},mathmlBuilder:(e,t)=>new tR.MathNode("mpadded",[tP(e.body,t)],["vcenter"])}),tp({type:"verb",names:["\\verb"],props:{numArgs:0,allowedInText:!0},handler(e,t,r){throw new i("\\verb ended by end of line instead of matching delimiter")},htmlBuilder(e,t){for(var r=aB(e),a=[],n=t.havingStyle(t.style.text()),i=0;ie.body.replace(/ /g,e.star?"␣":"\xa0"),aq="[ \r\n ]",aC="[̀-ͯ]",aN=RegExp(aC+"+$"),aI="("+aq+"+)|\\\\(\n|[ \r ]+\n?)[ \r ]*|([!-\\[\\]-‧‪-퟿豈-￿]"+aC+"*|[\uD800-\uDBFF][\uDC00-\uDFFF]"+aC+"*|\\\\verb\\*([^]).*?\\4|\\\\verb([^*a-zA-Z]).*?\\5|(\\\\[a-zA-Z@]+)"+aq+"*|\\\\[^\uD800-\uDFFF])";class aR{constructor(e,t){this.input=void 0,this.settings=void 0,this.tokenRegex=void 0,this.catcodes=void 0,this.input=e,this.settings=t,this.tokenRegex=RegExp(aI,"g"),this.catcodes={"%":14,"~":13}}setCatcode(e,t){this.catcodes[e]=t}lex(){var e=this.input,t=this.tokenRegex.lastIndex;if(t===e.length)return new n("EOF",new a(this,t,t));var r=this.tokenRegex.exec(e);if(null===r||r.index!==t)throw new i("Unexpected character: '"+e[t]+"'",new n(e[t],new a(this,t,t+1)));var s=r[6]||r[3]||(r[2]?"\\ ":" ");if(14===this.catcodes[s]){var o=e.indexOf("\n",this.tokenRegex.lastIndex);return -1===o?(this.tokenRegex.lastIndex=e.length,this.settings.reportNonstrict("commentAtEnd","% comment has no terminating newline; LaTeX would fail because of commenting the end of math mode (e.g. $)")):this.tokenRegex.lastIndex=o+1,this.lex()}return new n(s,new a(this,t,this.tokenRegex.lastIndex))}}class aO{constructor(e,t){void 0===e&&(e={}),void 0===t&&(t={}),this.current=void 0,this.builtins=void 0,this.undefStack=void 0,this.current=t,this.builtins=e,this.undefStack=[]}beginGroup(){this.undefStack.push({})}endGroup(){if(0===this.undefStack.length)throw new i("Unbalanced namespace destruction: attempt to pop global namespace; please report this as a bug");var e=this.undefStack.pop();for(var t in e)e.hasOwnProperty(t)&&(null==e[t]?delete this.current[t]:this.current[t]=e[t])}endGroups(){for(;this.undefStack.length>0;)this.endGroup()}has(e){return this.current.hasOwnProperty(e)||this.builtins.hasOwnProperty(e)}get(e){return this.current.hasOwnProperty(e)?this.current[e]:this.builtins[e]}set(e,t,r){if(void 0===r&&(r=!1),r){for(var a=0;a0&&(this.undefStack[this.undefStack.length-1][e]=t)}else{var n=this.undefStack[this.undefStack.length-1];n&&!n.hasOwnProperty(e)&&(n[e]=this.current[e])}null==t?delete this.current[e]:this.current[e]=t}}aH="\\noexpand",aE=function(e){var t=e.popToken();return e.isExpandable(t.text)&&(t.noexpand=!0,t.treatAsRelax=!0),{tokens:[t],numArgs:0}},rP[aH]=aE,aL="\\expandafter",aD=function(e){var t=e.popToken();return e.expandOnce(!0),{tokens:[t],numArgs:0}},rP[aL]=aD,aP="\\@firstoftwo",aF=function(e){return{tokens:e.consumeArgs(2)[0],numArgs:0}},rP[aP]=aF,aV="\\@secondoftwo",aG=function(e){return{tokens:e.consumeArgs(2)[1],numArgs:0}},rP[aV]=aG,aU="\\@ifnextchar",aY=function(e){var t=e.consumeArgs(3);e.consumeSpaces();var r=e.future();return 1===t[0].length&&t[0][0].text===r.text?{tokens:t[1],numArgs:0}:{tokens:t[2],numArgs:0}},rP[aU]=aY,aW="\\@ifnextchar *{\\@firstoftwo{#1}}",rP[aX="\\@ifstar"]=aW,a_="\\TextOrMath",aj=function(e){var t=e.consumeArgs(2);return"text"===e.mode?{tokens:t[0],numArgs:0}:{tokens:t[1],numArgs:0}},rP[a_]=aj;var aH,aE,aL,aD,aP,aF,aV,aG,aU,aY,aX,aW,a_,aj,a$,aZ,aK={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15};aZ=function(e){var t,r,a=e.popToken(),n="";if("'"===a.text)t=8,a=e.popToken();else if('"'===a.text)t=16,a=e.popToken();else if("`"===a.text){if("\\"===(a=e.popToken()).text[0])n=a.text.charCodeAt(1);else if("EOF"===a.text)throw new i("\\char` missing argument");else n=a.text.charCodeAt(0)}else t=10;if(t){if(null==(n=aK[a.text])||n>=t)throw new i("Invalid base-"+t+" digit "+a.text);for(;null!=(r=aK[e.future().text])&&r{var a=e.consumeArg().tokens;if(1!==a.length)throw new i("\\newcommand's first argument must be a macro name");var n=a[0].text,s=e.isDefined(n);if(s&&!t)throw new i("\\newcommand{"+n+"} attempting to redefine "+n+"; use \\renewcommand");if(!s&&!r)throw new i("\\renewcommand{"+n+"} when command "+n+" does not yet exist; use \\newcommand");var o=0;if(1===(a=e.consumeArg().tokens).length&&"["===a[0].text){for(var l="",h=e.expandNextToken();"]"!==h.text&&"EOF"!==h.text;)l+=h.text,h=e.expandNextToken();if(!l.match(/^\s*[0-9]+\s*$/))throw new i("Invalid number of arguments: "+l);o=parseInt(l),a=e.consumeArg().tokens}return e.macros.set(n,{tokens:a,numArgs:o}),""};aQ=e=>iY(e,!1,!0),rP["\\newcommand"]=aQ,a1=e=>iY(e,!0,!1),rP["\\renewcommand"]=a1,a5=e=>iY(e,!0,!0),rP["\\providecommand"]=a5,a7=e=>{var t=e.consumeArgs(1)[0];return console.log(t.reverse().map(e=>e.text).join("")),""},rP["\\message"]=a7,a8=e=>{var t=e.consumeArgs(1)[0];return console.error(t.reverse().map(e=>e.text).join("")),""},rP["\\errmessage"]=a8,a9=e=>{var t=e.popToken(),r=t.text;return console.log(t,e.macros.get(r),th[r],ep.math[r],ep.text[r]),""},rP["\\show"]=a9,rP["\\bgroup"]="{",rP["\\egroup"]="}",rP["~"]="\\nobreakspace",rP["\\lq"]="`",rP["\\rq"]="'",rP["\\aa"]="\\r a",rP["\\AA"]="\\r A",rP["\\textcopyright"]="\\html@mathml{\\textcircled{c}}{\\char`\xa9}",rP["\\copyright"]="\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}",rP["\\textregistered"]="\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`\xae}",rP["ℬ"]="\\mathscr{B}",rP["ℰ"]="\\mathscr{E}",rP["ℱ"]="\\mathscr{F}",rP["ℋ"]="\\mathscr{H}",rP["ℐ"]="\\mathscr{I}",rP["ℒ"]="\\mathscr{L}",rP["ℳ"]="\\mathscr{M}",rP["ℛ"]="\\mathscr{R}",rP["ℭ"]="\\mathfrak{C}",rP["ℌ"]="\\mathfrak{H}",rP["ℨ"]="\\mathfrak{Z}",rP["\\Bbbk"]="\\Bbb{k}",rP["\xb7"]="\\cdotp",rP["\\llap"]="\\mathllap{\\textrm{#1}}",rP["\\rlap"]="\\mathrlap{\\textrm{#1}}",rP["\\clap"]="\\mathclap{\\textrm{#1}}",rP["\\mathstrut"]="\\vphantom{(}",rP["\\underbar"]="\\underline{\\text{#1}}",rP["\\not"]='\\html@mathml{\\mathrel{\\mathrlap\\@not}}{\\char"338}',rP["\\neq"]="\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`≠}}",rP["\\ne"]="\\neq",rP["≠"]="\\neq",rP["\\notin"]="\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}{\\mathrel{\\char`∉}}",rP["∉"]="\\notin",rP["≘"]="\\html@mathml{\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}}{\\mathrel{\\char`≘}}",rP["≙"]="\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`≘}}",rP["≚"]="\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`≚}}",rP["≛"]="\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}{\\mathrel{\\char`≛}}",rP["≝"]="\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}{\\mathrel{\\char`≝}}",rP["≞"]="\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}{\\mathrel{\\char`≞}}",rP["≟"]="\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`≟}}",rP["⟂"]="\\perp",rP["‼"]="\\mathclose{!\\mkern-0.8mu!}",rP["∌"]="\\notni",rP["⌜"]="\\ulcorner",rP["⌝"]="\\urcorner",rP["⌞"]="\\llcorner",rP["⌟"]="\\lrcorner",rP["\xa9"]="\\copyright",rP["\xae"]="\\textregistered",rP["️"]="\\textregistered",rP["\\ulcorner"]='\\html@mathml{\\@ulcorner}{\\mathop{\\char"231c}}',rP["\\urcorner"]='\\html@mathml{\\@urcorner}{\\mathop{\\char"231d}}',rP["\\llcorner"]='\\html@mathml{\\@llcorner}{\\mathop{\\char"231e}}',rP["\\lrcorner"]='\\html@mathml{\\@lrcorner}{\\mathop{\\char"231f}}',rP["\\vdots"]="\\mathord{\\varvdots\\rule{0pt}{15pt}}",rP["⋮"]="\\vdots",rP["\\varGamma"]="\\mathit{\\Gamma}",rP["\\varDelta"]="\\mathit{\\Delta}",rP["\\varTheta"]="\\mathit{\\Theta}",rP["\\varLambda"]="\\mathit{\\Lambda}",rP["\\varXi"]="\\mathit{\\Xi}",rP["\\varPi"]="\\mathit{\\Pi}",rP["\\varSigma"]="\\mathit{\\Sigma}",rP["\\varUpsilon"]="\\mathit{\\Upsilon}",rP["\\varPhi"]="\\mathit{\\Phi}",rP["\\varPsi"]="\\mathit{\\Psi}",rP["\\varOmega"]="\\mathit{\\Omega}",rP["\\substack"]="\\begin{subarray}{c}#1\\end{subarray}",rP["\\colon"]="\\nobreak\\mskip2mu\\mathpunct{}\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu\\relax",rP["\\boxed"]="\\fbox{$\\displaystyle{#1}$}",rP["\\iff"]="\\DOTSB\\;\\Longleftrightarrow\\;",rP["\\implies"]="\\DOTSB\\;\\Longrightarrow\\;",rP["\\impliedby"]="\\DOTSB\\;\\Longleftarrow\\;";var iX,iW,i_={",":"\\dotsc","\\not":"\\dotsb","+":"\\dotsb","=":"\\dotsb","<":"\\dotsb",">":"\\dotsb","-":"\\dotsb","*":"\\dotsb",":":"\\dotsb","\\DOTSB":"\\dotsb","\\coprod":"\\dotsb","\\bigvee":"\\dotsb","\\bigwedge":"\\dotsb","\\biguplus":"\\dotsb","\\bigcap":"\\dotsb","\\bigcup":"\\dotsb","\\prod":"\\dotsb","\\sum":"\\dotsb","\\bigotimes":"\\dotsb","\\bigoplus":"\\dotsb","\\bigodot":"\\dotsb","\\bigsqcup":"\\dotsb","\\And":"\\dotsb","\\longrightarrow":"\\dotsb","\\Longrightarrow":"\\dotsb","\\longleftarrow":"\\dotsb","\\Longleftarrow":"\\dotsb","\\longleftrightarrow":"\\dotsb","\\Longleftrightarrow":"\\dotsb","\\mapsto":"\\dotsb","\\longmapsto":"\\dotsb","\\hookrightarrow":"\\dotsb","\\doteq":"\\dotsb","\\mathbin":"\\dotsb","\\mathrel":"\\dotsb","\\relbar":"\\dotsb","\\Relbar":"\\dotsb","\\xrightarrow":"\\dotsb","\\xleftarrow":"\\dotsb","\\DOTSI":"\\dotsi","\\int":"\\dotsi","\\oint":"\\dotsi","\\iint":"\\dotsi","\\iiint":"\\dotsi","\\iiiint":"\\dotsi","\\idotsint":"\\dotsi","\\DOTSX":"\\dotsx"};iW=function(e){var t="\\dotso",r=e.expandAfterFuture().text;return r in i_?t=i_[r]:"\\not"===r.substr(0,4)?t="\\dotsb":r in ep.math&&f.contains(["bin","rel"],ep.math[r].group)&&(t="\\dotsb"),t},rP["\\dots"]=iW;var ij,i$,iZ,iK,iJ,iQ,i0,i1,i4,i5,i6,i7,i3,i8,i2,i9,se,st,sr,sa,sn,si,ss,so,sl,sh,sm,sc,sp,su,sd,sg,sf,sv,sb,sy,sx,sw,sk,sS,sM,sz,sA,sT,sB,sq,sC,sN,sI,sR,sO,sH,sE,sL,sD,sP,sF,sV,sG,sU,sY,sX,sW,s_={")":!0,"]":!0,"\\rbrack":!0,"\\}":!0,"\\rbrace":!0,"\\rangle":!0,"\\rceil":!0,"\\rfloor":!0,"\\rgroup":!0,"\\rmoustache":!0,"\\right":!0,"\\bigr":!0,"\\biggr":!0,"\\Bigr":!0,"\\Biggr":!0,$:!0,";":!0,".":!0,",":!0};i$=function(e){return e.future().text in s_?"\\ldots\\,":"\\ldots"},rP["\\dotso"]=i$,iK=function(e){var t=e.future().text;return t in s_&&","!==t?"\\ldots\\,":"\\ldots"},rP["\\dotsc"]=iK,iQ=function(e){return e.future().text in s_?"\\@cdots\\,":"\\@cdots"},rP["\\cdots"]=iQ,rP["\\dotsb"]="\\cdots",rP["\\dotsm"]="\\cdots",rP["\\dotsi"]="\\!\\cdots",rP["\\dotsx"]="\\ldots\\,",rP["\\DOTSI"]="\\relax",rP["\\DOTSB"]="\\relax",rP["\\DOTSX"]="\\relax",rP["\\tmspace"]="\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax",rP["\\,"]="\\tmspace+{3mu}{.1667em}",rP["\\thinspace"]="\\,",rP["\\>"]="\\mskip{4mu}",rP["\\:"]="\\tmspace+{4mu}{.2222em}",rP["\\medspace"]="\\:",rP["\\;"]="\\tmspace+{5mu}{.2777em}",rP["\\thickspace"]="\\;",rP["\\!"]="\\tmspace-{3mu}{.1667em}",rP["\\negthinspace"]="\\!",rP["\\negmedspace"]="\\tmspace-{4mu}{.2222em}",rP["\\negthickspace"]="\\tmspace-{5mu}{.277em}",rP["\\enspace"]="\\kern.5em ",rP["\\enskip"]="\\hskip.5em\\relax",rP["\\quad"]="\\hskip1em\\relax",rP["\\qquad"]="\\hskip2em\\relax",rP["\\tag"]="\\@ifstar\\tag@literal\\tag@paren",rP["\\tag@paren"]="\\tag@literal{({#1})}",sI=e=>{if(e.macros.get("\\df@tag"))throw new i("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"},rP["\\tag@literal"]=sI,rP["\\bmod"]="\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}\\mathbin{\\rm mod}\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}",rP["\\pod"]="\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)",rP["\\pmod"]="\\pod{{\\rm mod}\\mkern6mu#1}",rP["\\mod"]="\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1",rP["\\pmb"]="\\html@mathml{\\@binrel{#1}{\\mathrlap{#1}\\kern0.5px#1}}{\\mathbf{#1}}",rP["\\newline"]="\\\\\\relax",rP["\\TeX"]="\\textrm{\\html@mathml{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}{TeX}}";var sj,s$,sZ,sK,sJ,sQ,s0,s1,s4,s5,s6,s7,s3,s8,s2,s9,oe,ot,or,oa,on,oi,os,oo,ol,oh,om,oc,op,ou,od,og,of,ov,ob,oy,ox,ow,ok,oS,oM,oz,oA,oT,oB,oq,oC,oN,oI,oR,oO,oH,oE,oL,oD,oP,oF,oV,oG,oU,oY,oX,oW,o_,oj,o$,oZ,oK,oJ,oQ,o0,o1,o4,o5,o6,o7,o3,o8,o2,o9,le,lt,lr,la,ln,li,ls,lo,ll,lh,lm,lc,lp,lu,ld,lg,lf,lv,lb,ly,lx,lw,lk,lS,lM,lz,lA,lT,lB,lq,lC,lN,lI,lR,lO,lH,lE,lL,lD,lP,lF,lV,lG,lU,lY,lX,lW,l_,lj,l$,lZ,lK,lJ,lQ,l0,l1,l4,l5,l6,l7,l3,l8,l2,l9,he,ht,hr,ha,hn,hi,hs,ho,hl,hh,hm,hc,hp,hu,hd,hg,hf,hv,hb,hy,hx,hw,hk,hS,hM,hz,hA,hT,hB,hq,hC,hN,hI,hR,hO,hH,hE,hL,hD,hP,hF,hV,hG,hU,hY,hX,hW,h_,hj,h$,hZ,hK,hJ,hQ,h0,h1,h4,h5,h6,h7,h3,h8,h2,h9,me,mt,mr,ma,mn,mi,ms,mo,ml,mh,mm,mc,mp,mu,md,mg,mf,mv,mb,my,mx,mw,mk,mS,mM,mz,mA,mT,mB,mq,mC,mN,mI,mR,mO,mH,mE,mL,mD,mP,mF,mV,mG,mU,mY,mX,mW,m_,mj,m$,mZ,mK,mJ,mQ,m0,m1,m4,m5,m6,m7,m3,m8,m2,m9,ce=Z(E["Main-Regular"][84][1]-.7*E["Main-Regular"][65][1]);s$="\\textrm{\\html@mathml{L\\kern-.36em\\raisebox{"+ce+"}{\\scriptstyle A}\\kern-.15em\\TeX}{LaTeX}}",rP["\\LaTeX"]=s$,sK="\\textrm{\\html@mathml{K\\kern-.17em\\raisebox{"+ce+"}{\\scriptstyle A}\\kern-.15em\\TeX}{KaTeX}}",rP["\\KaTeX"]=sK,rP["\\hspace"]="\\@ifstar\\@hspacer\\@hspace",rP["\\@hspace"]="\\hskip #1\\relax",rP["\\@hspacer"]="\\rule{0pt}{0pt}\\hskip #1\\relax",rP["\\ordinarycolon"]=":",rP["\\vcentcolon"]="\\mathrel{\\mathop\\ordinarycolon}",rP["\\dblcolon"]='\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}{\\mathop{\\char"2237}}',rP["\\coloneqq"]='\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2254}}',rP["\\Coloneqq"]='\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2237\\char"3d}}',rP["\\coloneq"]='\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"3a\\char"2212}}',rP["\\Coloneq"]='\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"2237\\char"2212}}',rP["\\eqqcolon"]='\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2255}}',rP["\\Eqqcolon"]='\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"3d\\char"2237}}',rP["\\eqcolon"]='\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2239}}',rP["\\Eqcolon"]='\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"2212\\char"2237}}',rP["\\colonapprox"]='\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"3a\\char"2248}}',rP["\\Colonapprox"]='\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"2237\\char"2248}}',rP["\\colonsim"]='\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"3a\\char"223c}}',rP["\\Colonsim"]='\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"2237\\char"223c}}',rP["∷"]="\\dblcolon",rP["∹"]="\\eqcolon",rP["≔"]="\\coloneqq",rP["≕"]="\\eqqcolon",rP["⩴"]="\\Coloneqq",rP["\\ratio"]="\\vcentcolon",rP["\\coloncolon"]="\\dblcolon",rP["\\colonequals"]="\\coloneqq",rP["\\coloncolonequals"]="\\Coloneqq",rP["\\equalscolon"]="\\eqqcolon",rP["\\equalscoloncolon"]="\\Eqqcolon",rP["\\colonminus"]="\\coloneq",rP["\\coloncolonminus"]="\\Coloneq",rP["\\minuscolon"]="\\eqcolon",rP["\\minuscoloncolon"]="\\Eqcolon",rP["\\coloncolonapprox"]="\\Colonapprox",rP["\\coloncolonsim"]="\\Colonsim",rP["\\simcolon"]="\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}",rP["\\simcoloncolon"]="\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}",rP["\\approxcolon"]="\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}",rP["\\approxcoloncolon"]="\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}",rP["\\notni"]="\\html@mathml{\\not\\ni}{\\mathrel{\\char`∌}}",rP["\\limsup"]="\\DOTSB\\operatorname*{lim\\,sup}",rP["\\liminf"]="\\DOTSB\\operatorname*{lim\\,inf}",rP["\\injlim"]="\\DOTSB\\operatorname*{inj\\,lim}",rP["\\projlim"]="\\DOTSB\\operatorname*{proj\\,lim}",rP["\\varlimsup"]="\\DOTSB\\operatorname*{\\overline{lim}}",rP["\\varliminf"]="\\DOTSB\\operatorname*{\\underline{lim}}",rP["\\varinjlim"]="\\DOTSB\\operatorname*{\\underrightarrow{lim}}",rP["\\varprojlim"]="\\DOTSB\\operatorname*{\\underleftarrow{lim}}",rP["\\gvertneqq"]="\\html@mathml{\\@gvertneqq}{≩}",rP["\\lvertneqq"]="\\html@mathml{\\@lvertneqq}{≨}",rP["\\ngeqq"]="\\html@mathml{\\@ngeqq}{≱}",rP["\\ngeqslant"]="\\html@mathml{\\@ngeqslant}{≱}",rP["\\nleqq"]="\\html@mathml{\\@nleqq}{≰}",rP["\\nleqslant"]="\\html@mathml{\\@nleqslant}{≰}",rP["\\nshortmid"]="\\html@mathml{\\@nshortmid}{∤}",rP["\\nshortparallel"]="\\html@mathml{\\@nshortparallel}{∦}",rP["\\nsubseteqq"]="\\html@mathml{\\@nsubseteqq}{⊈}",rP["\\nsupseteqq"]="\\html@mathml{\\@nsupseteqq}{⊉}",rP["\\varsubsetneq"]="\\html@mathml{\\@varsubsetneq}{⊊}",rP["\\varsubsetneqq"]="\\html@mathml{\\@varsubsetneqq}{⫋}",rP["\\varsupsetneq"]="\\html@mathml{\\@varsupsetneq}{⊋}",rP["\\varsupsetneqq"]="\\html@mathml{\\@varsupsetneqq}{⫌}",rP["\\imath"]="\\html@mathml{\\@imath}{ı}",rP["\\jmath"]="\\html@mathml{\\@jmath}{ȷ}",rP["\\llbracket"]="\\html@mathml{\\mathopen{[\\mkern-3.2mu[}}{\\mathopen{\\char`⟦}}",rP["\\rrbracket"]="\\html@mathml{\\mathclose{]\\mkern-3.2mu]}}{\\mathclose{\\char`⟧}}",rP["⟦"]="\\llbracket",rP["⟧"]="\\rrbracket",rP["\\lBrace"]="\\html@mathml{\\mathopen{\\{\\mkern-3.2mu[}}{\\mathopen{\\char`⦃}}",rP["\\rBrace"]="\\html@mathml{\\mathclose{]\\mkern-3.2mu\\}}}{\\mathclose{\\char`⦄}}",rP["⦃"]="\\lBrace",rP["⦄"]="\\rBrace",rP["\\minuso"]="\\mathbin{\\html@mathml{{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}{\\char`⦵}}",rP["⦵"]="\\minuso",rP["\\darr"]="\\downarrow",rP["\\dArr"]="\\Downarrow",rP["\\Darr"]="\\Downarrow",rP["\\lang"]="\\langle",rP["\\rang"]="\\rangle",rP["\\uarr"]="\\uparrow",rP["\\uArr"]="\\Uparrow",rP["\\Uarr"]="\\Uparrow",rP["\\N"]="\\mathbb{N}",rP["\\R"]="\\mathbb{R}",rP["\\Z"]="\\mathbb{Z}",rP["\\alef"]="\\aleph",rP["\\alefsym"]="\\aleph",rP["\\Alpha"]="\\mathrm{A}",rP["\\Beta"]="\\mathrm{B}",rP["\\bull"]="\\bullet",rP["\\Chi"]="\\mathrm{X}",rP["\\clubs"]="\\clubsuit",rP["\\cnums"]="\\mathbb{C}",rP["\\Complex"]="\\mathbb{C}",rP["\\Dagger"]="\\ddagger",rP["\\diamonds"]="\\diamondsuit",rP["\\empty"]="\\emptyset",rP["\\Epsilon"]="\\mathrm{E}",rP["\\Eta"]="\\mathrm{H}",rP["\\exist"]="\\exists",rP["\\harr"]="\\leftrightarrow",rP["\\hArr"]="\\Leftrightarrow",rP["\\Harr"]="\\Leftrightarrow",rP["\\hearts"]="\\heartsuit",rP["\\image"]="\\Im",rP["\\infin"]="\\infty",rP["\\Iota"]="\\mathrm{I}",rP["\\isin"]="\\in",rP["\\Kappa"]="\\mathrm{K}",rP["\\larr"]="\\leftarrow",rP["\\lArr"]="\\Leftarrow",rP["\\Larr"]="\\Leftarrow",rP["\\lrarr"]="\\leftrightarrow",rP["\\lrArr"]="\\Leftrightarrow",rP["\\Lrarr"]="\\Leftrightarrow",rP["\\Mu"]="\\mathrm{M}",rP["\\natnums"]="\\mathbb{N}",rP["\\Nu"]="\\mathrm{N}",rP["\\Omicron"]="\\mathrm{O}",rP["\\plusmn"]="\\pm",rP["\\rarr"]="\\rightarrow",rP["\\rArr"]="\\Rightarrow",rP["\\Rarr"]="\\Rightarrow",rP["\\real"]="\\Re",rP["\\reals"]="\\mathbb{R}",rP["\\Reals"]="\\mathbb{R}",rP["\\Rho"]="\\mathrm{P}",rP["\\sdot"]="\\cdot",rP["\\sect"]="\\S",rP["\\spades"]="\\spadesuit",rP["\\sub"]="\\subset",rP["\\sube"]="\\subseteq",rP["\\supe"]="\\supseteq",rP["\\Tau"]="\\mathrm{T}",rP["\\thetasym"]="\\vartheta",rP["\\weierp"]="\\wp",rP["\\Zeta"]="\\mathrm{Z}",rP["\\argmin"]="\\DOTSB\\operatorname*{arg\\,min}",rP["\\argmax"]="\\DOTSB\\operatorname*{arg\\,max}",rP["\\plim"]="\\DOTSB\\mathop{\\operatorname{plim}}\\limits",rP["\\bra"]="\\mathinner{\\langle{#1}|}",rP["\\ket"]="\\mathinner{|{#1}\\rangle}",rP["\\braket"]="\\mathinner{\\langle{#1}\\rangle}",rP["\\Bra"]="\\left\\langle#1\\right|",rP["\\Ket"]="\\left|#1\\right\\rangle";var ct,cr,ca,cn,ci,cs,co,cl,ch,cm,cc,cp,cu,cd,cg,cf,cv,cb,cy,cx,cw,ck,cS,cM,cz,cA,cT,cB,cq,cC,cN,cI,cR,cO,cH,cE,cL,cD,cP,cF,cV,cG,cU,cY,cX,cW,c_,cj,c$,cZ,cK,cJ,cQ,c0,c1,c4,c5,c6,c7,c3,c8,c2,c9,pe,pt,pr,pa,pn,pi,ps,po,pl,ph,pm,pc,pp,pu,pd,pg,pf,pv,pb,py,px,pw,pk,pS,pM,pz,pA,pT,pB,pq,pC,pN,pI,pR,pO,pH,pE,pL,pD,pP,pF,pV,pG,pU,pY,pX,pW,p_,pj,p$,pZ,pK,pJ,pQ,p0,p1,p4,p5,p6,p7,p3,p8=e=>t=>{var r=t.consumeArg().tokens,a=t.consumeArg().tokens,n=t.consumeArg().tokens,i=t.consumeArg().tokens,s=t.macros.get("|"),o=t.macros.get("\\|");t.macros.beginGroup();var l=t=>r=>{e&&(r.macros.set("|",s),n.length&&r.macros.set("\\|",o));var i=t;return!t&&n.length&&"|"===r.future().text&&(r.popToken(),i=!0),{tokens:i?n:a,numArgs:0}};t.macros.set("|",l(!1)),n.length&&t.macros.set("\\|",l(!0));var h=t.consumeArg().tokens,m=t.expandTokens([...i,...h,...r]);return t.macros.endGroup(),{tokens:m.reverse(),numArgs:0}};cr=p8(!1),rP["\\bra@ket"]=cr,cn=p8(!0),rP["\\bra@set"]=cn,rP["\\Braket"]="\\bra@ket{\\left\\langle}{\\,\\middle\\vert\\,}{\\,\\middle\\vert\\,}{\\right\\rangle}",rP["\\Set"]="\\bra@set{\\left\\{\\:}{\\;\\middle\\vert\\;}{\\;\\middle\\Vert\\;}{\\:\\right\\}}",rP["\\set"]="\\bra@set{\\{\\,}{\\mid}{}{\\,\\}}",rP["\\angln"]="{\\angl n}",rP["\\blue"]="\\textcolor{##6495ed}{#1}",rP["\\orange"]="\\textcolor{##ffa500}{#1}",rP["\\pink"]="\\textcolor{##ff00af}{#1}",rP["\\red"]="\\textcolor{##df0030}{#1}",rP["\\green"]="\\textcolor{##28ae7b}{#1}",rP["\\gray"]="\\textcolor{gray}{#1}",rP["\\purple"]="\\textcolor{##9d38bd}{#1}",rP["\\blueA"]="\\textcolor{##ccfaff}{#1}",rP["\\blueB"]="\\textcolor{##80f6ff}{#1}",rP["\\blueC"]="\\textcolor{##63d9ea}{#1}",rP["\\blueD"]="\\textcolor{##11accd}{#1}",rP["\\blueE"]="\\textcolor{##0c7f99}{#1}",rP["\\tealA"]="\\textcolor{##94fff5}{#1}",rP["\\tealB"]="\\textcolor{##26edd5}{#1}",rP["\\tealC"]="\\textcolor{##01d1c1}{#1}",rP["\\tealD"]="\\textcolor{##01a995}{#1}",rP["\\tealE"]="\\textcolor{##208170}{#1}",rP["\\greenA"]="\\textcolor{##b6ffb0}{#1}",rP["\\greenB"]="\\textcolor{##8af281}{#1}",rP["\\greenC"]="\\textcolor{##74cf70}{#1}",rP["\\greenD"]="\\textcolor{##1fab54}{#1}",rP["\\greenE"]="\\textcolor{##0d923f}{#1}",rP["\\goldA"]="\\textcolor{##ffd0a9}{#1}",rP["\\goldB"]="\\textcolor{##ffbb71}{#1}",rP["\\goldC"]="\\textcolor{##ff9c39}{#1}",rP["\\goldD"]="\\textcolor{##e07d10}{#1}",rP["\\goldE"]="\\textcolor{##a75a05}{#1}",rP["\\redA"]="\\textcolor{##fca9a9}{#1}",rP["\\redB"]="\\textcolor{##ff8482}{#1}",rP["\\redC"]="\\textcolor{##f9685d}{#1}",rP["\\redD"]="\\textcolor{##e84d39}{#1}",rP["\\redE"]="\\textcolor{##bc2612}{#1}",rP["\\maroonA"]="\\textcolor{##ffbde0}{#1}",rP["\\maroonB"]="\\textcolor{##ff92c6}{#1}",rP["\\maroonC"]="\\textcolor{##ed5fa6}{#1}",rP["\\maroonD"]="\\textcolor{##ca337c}{#1}",rP["\\maroonE"]="\\textcolor{##9e034e}{#1}",rP["\\purpleA"]="\\textcolor{##ddd7ff}{#1}",rP["\\purpleB"]="\\textcolor{##c6b9fc}{#1}",rP["\\purpleC"]="\\textcolor{##aa87ff}{#1}",rP["\\purpleD"]="\\textcolor{##7854ab}{#1}",rP["\\purpleE"]="\\textcolor{##543b78}{#1}",rP["\\mintA"]="\\textcolor{##f5f9e8}{#1}",rP["\\mintB"]="\\textcolor{##edf2df}{#1}",rP["\\mintC"]="\\textcolor{##e0e5cc}{#1}",rP["\\grayA"]="\\textcolor{##f6f7f7}{#1}",rP["\\grayB"]="\\textcolor{##f0f1f2}{#1}",rP["\\grayC"]="\\textcolor{##e3e5e6}{#1}",rP["\\grayD"]="\\textcolor{##d6d8da}{#1}",rP["\\grayE"]="\\textcolor{##babec2}{#1}",rP["\\grayF"]="\\textcolor{##888d93}{#1}",rP["\\grayG"]="\\textcolor{##626569}{#1}",rP["\\grayH"]="\\textcolor{##3b3e40}{#1}",rP["\\grayI"]="\\textcolor{##21242c}{#1}",rP["\\kaBlue"]="\\textcolor{##314453}{#1}",rP["\\kaGreen"]="\\textcolor{##71B307}{#1}";var p2={"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0};class p9{constructor(e,t,r){this.settings=void 0,this.expansionCount=void 0,this.lexer=void 0,this.macros=void 0,this.stack=void 0,this.mode=void 0,this.settings=t,this.expansionCount=0,this.feed(e),this.macros=new aO(rP,t.macros),this.mode=r,this.stack=[]}feed(e){this.lexer=new aR(e,this.settings)}switchMode(e){this.mode=e}beginGroup(){this.macros.beginGroup()}endGroup(){this.macros.endGroup()}endGroups(){this.macros.endGroups()}future(){return 0===this.stack.length&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]}popToken(){return this.future(),this.stack.pop()}pushToken(e){this.stack.push(e)}pushTokens(e){this.stack.push(...e)}scanArgument(e){var t,r,a;if(e){if(this.consumeSpaces(),"["!==this.future().text)return null;t=this.popToken(),{tokens:a,end:r}=this.consumeArg(["]"])}else({tokens:a,start:t,end:r}=this.consumeArg());return this.pushToken(new n("EOF",r.loc)),this.pushTokens(a),t.range(r,"")}consumeSpaces(){for(;;)if(" "===this.future().text)this.stack.pop();else break}consumeArg(e){var t,r=[],a=e&&e.length>0;a||this.consumeSpaces();var n=this.future(),s=0,o=0;do{if(t=this.popToken(),r.push(t),"{"===t.text)++s;else if("}"===t.text){if(-1==--s)throw new i("Extra }",t)}else if("EOF"===t.text)throw new i("Unexpected end of input in a macro argument, expected '"+(e&&a?e[o]:"}")+"'",t);if(e&&a){if((0===s||1===s&&"{"===e[o])&&t.text===e[o]){if(++o===e.length){r.splice(-o,o);break}}else o=0}}while(0!==s||a);return"{"===n.text&&"}"===r[r.length-1].text&&(r.pop(),r.shift()),r.reverse(),{tokens:r,start:n,end:t}}consumeArgs(e,t){if(t){if(t.length!==e+1)throw new i("The length of delimiters doesn't match the number of args!");for(var r=t[0],a=0;athis.settings.maxExpand)throw new i("Too many expansions: infinite loop or need to increase maxExpand setting");var n=a.tokens,s=this.consumeArgs(a.numArgs,a.delimiters);if(a.numArgs){n=n.slice();for(var o=n.length-1;o>=0;--o){var l=n[o];if("#"===l.text){if(0===o)throw new i("Incomplete placeholder at end of macro body",l);if("#"===(l=n[--o]).text)n.splice(o+1,1);else if(/^[1-9]$/.test(l.text))n.splice(o,2,...s[+l.text-1]);else throw new i("Not a valid argument number",l)}}}return this.pushTokens(n),n}expandAfterFuture(){return this.expandOnce(),this.future()}expandNextToken(){for(;;){var e=this.expandOnce();if(e instanceof n)return e.treatAsRelax&&(e.text="\\relax"),this.stack.pop()}throw Error()}expandMacro(e){return this.macros.has(e)?this.expandTokens([new n(e)]):void 0}expandTokens(e){var t=[],r=this.stack.length;for(this.pushTokens(e);this.stack.length>r;){var a=this.expandOnce(!0);a instanceof n&&(a.treatAsRelax&&(a.noexpand=!1,a.treatAsRelax=!1),t.push(this.stack.pop()))}return t}expandMacroAsText(e){var t=this.expandMacro(e);return t?t.map(e=>e.text).join(""):t}_getExpansion(e){var t=this.macros.get(e);if(null==t)return t;if(1===e.length){var r=this.lexer.catcodes[e];if(null!=r&&13!==r)return}var a="function"==typeof t?t(this):t;if("string"==typeof a){var n=0;if(-1!==a.indexOf("#"))for(var i=a.replace(/##/g,"");-1!==i.indexOf("#"+(n+1));)++n;for(var s=new aR(a,this.settings),o=[],l=s.lex();"EOF"!==l.text;)o.push(l),l=s.lex();return o.reverse(),{tokens:o,numArgs:n}}return a}isDefined(e){return this.macros.has(e)||th.hasOwnProperty(e)||ep.math.hasOwnProperty(e)||ep.text.hasOwnProperty(e)||p2.hasOwnProperty(e)}isExpandable(e){var t=this.macros.get(e);return null!=t?"string"==typeof t||"function"==typeof t||!t.unexpandable:th.hasOwnProperty(e)&&!th[e].primitive}}var ue=/^[₊₋₌₍₎₀₁₂₃₄₅₆₇₈₉ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ]/,ut=Object.freeze({"₊":"+","₋":"-","₌":"=","₍":"(","₎":")","₀":"0","₁":"1","₂":"2","₃":"3","₄":"4","₅":"5","₆":"6","₇":"7","₈":"8","₉":"9",ₐ:"a",ₑ:"e",ₕ:"h",ᵢ:"i",ⱼ:"j",ₖ:"k",ₗ:"l",ₘ:"m",ₙ:"n",ₒ:"o",ₚ:"p",ᵣ:"r",ₛ:"s",ₜ:"t",ᵤ:"u",ᵥ:"v",ₓ:"x",ᵦ:"β",ᵧ:"γ",ᵨ:"ρ",ᵩ:"ϕ",ᵪ:"χ","⁺":"+","⁻":"-","⁼":"=","⁽":"(","⁾":")","⁰":"0","\xb9":"1","\xb2":"2","\xb3":"3","⁴":"4","⁵":"5","⁶":"6","⁷":"7","⁸":"8","⁹":"9",ᴬ:"A",ᴮ:"B",ᴰ:"D",ᴱ:"E",ᴳ:"G",ᴴ:"H",ᴵ:"I",ᴶ:"J",ᴷ:"K",ᴸ:"L",ᴹ:"M",ᴺ:"N",ᴼ:"O",ᴾ:"P",ᴿ:"R",ᵀ:"T",ᵁ:"U",ⱽ:"V",ᵂ:"W",ᵃ:"a",ᵇ:"b",ᶜ:"c",ᵈ:"d",ᵉ:"e",ᶠ:"f",ᵍ:"g",ʰ:"h",ⁱ:"i",ʲ:"j",ᵏ:"k",ˡ:"l",ᵐ:"m",ⁿ:"n",ᵒ:"o",ᵖ:"p",ʳ:"r",ˢ:"s",ᵗ:"t",ᵘ:"u",ᵛ:"v",ʷ:"w",ˣ:"x",ʸ:"y",ᶻ:"z",ᵝ:"β",ᵞ:"γ",ᵟ:"δ",ᵠ:"ϕ",ᵡ:"χ",ᶿ:"θ"}),ur={"́":{text:"\\'",math:"\\acute"},"̀":{text:"\\`",math:"\\grave"},"̈":{text:'\\"',math:"\\ddot"},"̃":{text:"\\~",math:"\\tilde"},"̄":{text:"\\=",math:"\\bar"},"̆":{text:"\\u",math:"\\breve"},"̌":{text:"\\v",math:"\\check"},"̂":{text:"\\^",math:"\\hat"},"̇":{text:"\\.",math:"\\dot"},"̊":{text:"\\r",math:"\\mathring"},"̋":{text:"\\H"},"̧":{text:"\\c"}},ua={á:"á",à:"à",ä:"ä",ǟ:"ǟ",ã:"ã",ā:"ā",ă:"ă",ắ:"ắ",ằ:"ằ",ẵ:"ẵ",ǎ:"ǎ",â:"â",ấ:"ấ",ầ:"ầ",ẫ:"ẫ",ȧ:"ȧ",ǡ:"ǡ",å:"å",ǻ:"ǻ",ḃ:"ḃ",ć:"ć",ḉ:"ḉ",č:"č",ĉ:"ĉ",ċ:"ċ",ç:"ç",ď:"ď",ḋ:"ḋ",ḑ:"ḑ",é:"é",è:"è",ë:"ë",ẽ:"ẽ",ē:"ē",ḗ:"ḗ",ḕ:"ḕ",ĕ:"ĕ",ḝ:"ḝ",ě:"ě",ê:"ê",ế:"ế",ề:"ề",ễ:"ễ",ė:"ė",ȩ:"ȩ",ḟ:"ḟ",ǵ:"ǵ",ḡ:"ḡ",ğ:"ğ",ǧ:"ǧ",ĝ:"ĝ",ġ:"ġ",ģ:"ģ",ḧ:"ḧ",ȟ:"ȟ",ĥ:"ĥ",ḣ:"ḣ",ḩ:"ḩ",í:"í",ì:"ì",ï:"ï",ḯ:"ḯ",ĩ:"ĩ",ī:"ī",ĭ:"ĭ",ǐ:"ǐ",î:"î",ǰ:"ǰ",ĵ:"ĵ",ḱ:"ḱ",ǩ:"ǩ",ķ:"ķ",ĺ:"ĺ",ľ:"ľ",ļ:"ļ",ḿ:"ḿ",ṁ:"ṁ",ń:"ń",ǹ:"ǹ",ñ:"ñ",ň:"ň",ṅ:"ṅ",ņ:"ņ",ó:"ó",ò:"ò",ö:"ö",ȫ:"ȫ",õ:"õ",ṍ:"ṍ",ṏ:"ṏ",ȭ:"ȭ",ō:"ō",ṓ:"ṓ",ṑ:"ṑ",ŏ:"ŏ",ǒ:"ǒ",ô:"ô",ố:"ố",ồ:"ồ",ỗ:"ỗ",ȯ:"ȯ",ȱ:"ȱ",ő:"ő",ṕ:"ṕ",ṗ:"ṗ",ŕ:"ŕ",ř:"ř",ṙ:"ṙ",ŗ:"ŗ",ś:"ś",ṥ:"ṥ",š:"š",ṧ:"ṧ",ŝ:"ŝ",ṡ:"ṡ",ş:"ş",ẗ:"ẗ",ť:"ť",ṫ:"ṫ",ţ:"ţ",ú:"ú",ù:"ù",ü:"ü",ǘ:"ǘ",ǜ:"ǜ",ǖ:"ǖ",ǚ:"ǚ",ũ:"ũ",ṹ:"ṹ",ū:"ū",ṻ:"ṻ",ŭ:"ŭ",ǔ:"ǔ",û:"û",ů:"ů",ű:"ű",ṽ:"ṽ",ẃ:"ẃ",ẁ:"ẁ",ẅ:"ẅ",ŵ:"ŵ",ẇ:"ẇ",ẘ:"ẘ",ẍ:"ẍ",ẋ:"ẋ",ý:"ý",ỳ:"ỳ",ÿ:"ÿ",ỹ:"ỹ",ȳ:"ȳ",ŷ:"ŷ",ẏ:"ẏ",ẙ:"ẙ",ź:"ź",ž:"ž",ẑ:"ẑ",ż:"ż",Á:"Á",À:"À",Ä:"Ä",Ǟ:"Ǟ",Ã:"Ã",Ā:"Ā",Ă:"Ă",Ắ:"Ắ",Ằ:"Ằ",Ẵ:"Ẵ",Ǎ:"Ǎ",Â:"Â",Ấ:"Ấ",Ầ:"Ầ",Ẫ:"Ẫ",Ȧ:"Ȧ",Ǡ:"Ǡ",Å:"Å",Ǻ:"Ǻ",Ḃ:"Ḃ",Ć:"Ć",Ḉ:"Ḉ",Č:"Č",Ĉ:"Ĉ",Ċ:"Ċ",Ç:"Ç",Ď:"Ď",Ḋ:"Ḋ",Ḑ:"Ḑ",É:"É",È:"È",Ë:"Ë",Ẽ:"Ẽ",Ē:"Ē",Ḗ:"Ḗ",Ḕ:"Ḕ",Ĕ:"Ĕ",Ḝ:"Ḝ",Ě:"Ě",Ê:"Ê",Ế:"Ế",Ề:"Ề",Ễ:"Ễ",Ė:"Ė",Ȩ:"Ȩ",Ḟ:"Ḟ",Ǵ:"Ǵ",Ḡ:"Ḡ",Ğ:"Ğ",Ǧ:"Ǧ",Ĝ:"Ĝ",Ġ:"Ġ",Ģ:"Ģ",Ḧ:"Ḧ",Ȟ:"Ȟ",Ĥ:"Ĥ",Ḣ:"Ḣ",Ḩ:"Ḩ",Í:"Í",Ì:"Ì",Ï:"Ï",Ḯ:"Ḯ",Ĩ:"Ĩ",Ī:"Ī",Ĭ:"Ĭ",Ǐ:"Ǐ",Î:"Î",İ:"İ",Ĵ:"Ĵ",Ḱ:"Ḱ",Ǩ:"Ǩ",Ķ:"Ķ",Ĺ:"Ĺ",Ľ:"Ľ",Ļ:"Ļ",Ḿ:"Ḿ",Ṁ:"Ṁ",Ń:"Ń",Ǹ:"Ǹ",Ñ:"Ñ",Ň:"Ň",Ṅ:"Ṅ",Ņ:"Ņ",Ó:"Ó",Ò:"Ò",Ö:"Ö",Ȫ:"Ȫ",Õ:"Õ",Ṍ:"Ṍ",Ṏ:"Ṏ",Ȭ:"Ȭ",Ō:"Ō",Ṓ:"Ṓ",Ṑ:"Ṑ",Ŏ:"Ŏ",Ǒ:"Ǒ",Ô:"Ô",Ố:"Ố",Ồ:"Ồ",Ỗ:"Ỗ",Ȯ:"Ȯ",Ȱ:"Ȱ",Ő:"Ő",Ṕ:"Ṕ",Ṗ:"Ṗ",Ŕ:"Ŕ",Ř:"Ř",Ṙ:"Ṙ",Ŗ:"Ŗ",Ś:"Ś",Ṥ:"Ṥ",Š:"Š",Ṧ:"Ṧ",Ŝ:"Ŝ",Ṡ:"Ṡ",Ş:"Ş",Ť:"Ť",Ṫ:"Ṫ",Ţ:"Ţ",Ú:"Ú",Ù:"Ù",Ü:"Ü",Ǘ:"Ǘ",Ǜ:"Ǜ",Ǖ:"Ǖ",Ǚ:"Ǚ",Ũ:"Ũ",Ṹ:"Ṹ",Ū:"Ū",Ṻ:"Ṻ",Ŭ:"Ŭ",Ǔ:"Ǔ",Û:"Û",Ů:"Ů",Ű:"Ű",Ṽ:"Ṽ",Ẃ:"Ẃ",Ẁ:"Ẁ",Ẅ:"Ẅ",Ŵ:"Ŵ",Ẇ:"Ẇ",Ẍ:"Ẍ",Ẋ:"Ẋ",Ý:"Ý",Ỳ:"Ỳ",Ÿ:"Ÿ",Ỹ:"Ỹ",Ȳ:"Ȳ",Ŷ:"Ŷ",Ẏ:"Ẏ",Ź:"Ź",Ž:"Ž",Ẑ:"Ẑ",Ż:"Ż",ά:"ά",ὰ:"ὰ",ᾱ:"ᾱ",ᾰ:"ᾰ",έ:"έ",ὲ:"ὲ",ή:"ή",ὴ:"ὴ",ί:"ί",ὶ:"ὶ",ϊ:"ϊ",ΐ:"ΐ",ῒ:"ῒ",ῑ:"ῑ",ῐ:"ῐ",ό:"ό",ὸ:"ὸ",ύ:"ύ",ὺ:"ὺ",ϋ:"ϋ",ΰ:"ΰ",ῢ:"ῢ",ῡ:"ῡ",ῠ:"ῠ",ώ:"ώ",ὼ:"ὼ",Ύ:"Ύ",Ὺ:"Ὺ",Ϋ:"Ϋ",Ῡ:"Ῡ",Ῠ:"Ῠ",Ώ:"Ώ",Ὼ:"Ὼ"};class un{constructor(e,t){this.mode=void 0,this.gullet=void 0,this.settings=void 0,this.leftrightDepth=void 0,this.nextToken=void 0,this.mode="math",this.gullet=new p9(e,t,this.mode),this.settings=t,this.leftrightDepth=0}expect(e,t){if(void 0===t&&(t=!0),this.fetch().text!==e)throw new i("Expected '"+e+"', got '"+this.fetch().text+"'",this.fetch());t&&this.consume()}consume(){this.nextToken=null}fetch(){return null==this.nextToken&&(this.nextToken=this.gullet.expandNextToken()),this.nextToken}switchMode(e){this.mode=e,this.gullet.switchMode(e)}parse(){this.settings.globalGroup||this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set("\\color","\\textcolor");try{var e=this.parseExpression(!1);return this.expect("EOF"),this.settings.globalGroup||this.gullet.endGroup(),e}finally{this.gullet.endGroups()}}subparse(e){var t=this.nextToken;this.consume(),this.gullet.pushToken(new n("}")),this.gullet.pushTokens(e);var r=this.parseExpression(!1);return this.expect("}"),this.nextToken=t,r}parseExpression(e,t){for(var r=[];;){"math"===this.mode&&this.consumeSpaces();var a=this.fetch();if(-1!==un.endOfExpression.indexOf(a.text)||t&&a.text===t||e&&th[a.text]&&th[a.text].infix)break;var n=this.parseAtom(t);if(n){if("internal"===n.type)continue}else break;r.push(n)}return"text"===this.mode&&this.formLigatures(r),this.handleInfixNodes(r)}handleInfixNodes(e){for(var t=-1,r=0;r=0&&this.settings.reportNonstrict("unicodeTextInMathMode",'Latin-1/Unicode text character "'+t[0]+'" used in math mode',e);var o,l,h=ep[this.mode][t].group,m=a.range(e);o=em.hasOwnProperty(h)?{type:"atom",mode:this.mode,family:h,loc:m,text:t}:{type:h,mode:this.mode,loc:m,text:t}}else{if(!(t.charCodeAt(0)>=128))return null;this.settings.strict&&(N(t.charCodeAt(0))?"math"===this.mode&&this.settings.reportNonstrict("unicodeTextInMathMode",'Unicode text character "'+t[0]+'" used in math mode',e):this.settings.reportNonstrict("unknownSymbol",'Unrecognized Unicode character "'+t[0]+'" ('+t.charCodeAt(0)+")",e)),o={type:"textord",mode:"text",loc:a.range(e),text:t}}if(this.consume(),s)for(var c=0;c2&&void 0!==arguments[2]?arguments[2]:{},i=this;return(0,o.Z)(function(){var o,a,c,u,d,l;return(0,h.__generator)(this,function(h){switch(h.label){case 0:return[4,fetch(e,o=(0,s.Z)({credentials:"include"},t))];case 1:if((a=h.sent()).status>=500)throw new p.kb;if(!(a.status>=400))return[3,12];h.label=2;case 2:return h.trys.push([2,4,,5]),[4,a.json()];case 3:return c=(null==(u=h.sent())?void 0:u.detail)||(null==u?void 0:u.error),[3,5];case 4:return d=h.sent(),console.error("Failed to parse error response",d),[3,5];case 5:if(console.error("API error",e,c),!((null==c?void 0:c.code)==="expired_session_key"||(null==c?void 0:c.code)==="token_expired"))return[3,11];h.label=6;case 6:if(h.trys.push([6,9,,10]),n.isRetry)return[3,8];return[4,i.refreshApiKey()];case 7:return h.sent(),[2,i.fetch(e,o,(0,r.Z)((0,s.Z)({},n),{isRetry:!0}))];case 8:return[3,10];case 9:return l=h.sent(),console.error("Failed to refresh expired access token: ".concat(l)),[3,10];case 10:console.error("Refresh access token failed when retrieving",e,c),window._oaiHandleSessionExpired("fetch",JSON.stringify(c)),h.label=11;case 11:if(null==c?void 0:c.type)throw new p.gK((null==c?void 0:c.message)||c,a.status,null==c?void 0:c.code,null==c?void 0:c.type);throw new p.kb;case 12:if(204===a.status)return[2,{}];return[2,a.json()]}})})()},e.getArtifacts=function(){return this.fetch("".concat(f,"/artifacts"),{method:"GET",headers:(0,s.Z)({"Content-Type":"application/json"},this.getAuthHeader())})},e.createArtifact=function(e){return this.fetch("".concat(f,"/artifacts"),{method:"POST",headers:(0,s.Z)({"Content-Type":"application/json"},this.getAuthHeader()),body:JSON.stringify({url:e,contents:"\n"})})},e.upload=function(e,t){var n=new FormData;return n.append("file",t),this.fetch("".concat(f,"/conversation/").concat(e,"/upload"),{method:"POST",headers:(0,s.Z)({},this.getAuthHeader()),body:n})},e.fetchFileForDownload=function(e,t){var n=new URLSearchParams({path:t});return fetch("".concat(f,"/conversation/").concat(e,"/download?").concat(n),{method:"GET",headers:(0,s.Z)({},this.getAuthHeader())})},e.checkFile=function(e,t){var n=new URLSearchParams({path:t});return this.fetch("".concat(f,"/conversation/").concat(e,"/check_file?").concat(n),{method:"GET",headers:(0,s.Z)({"Content-Type":"application/json"},this.getAuthHeader())})},e.sendDocument=function(){return this.fetch("".concat(f,"/private"),{method:"GET",headers:{"Content-Type":"application/json"}})},e.getRetrievalResults=function(e){return this.fetch("".concat(f,"/retrieval/public_data"),{method:"POST",headers:(0,s.Z)({"Content-Type":"application/json"},this.getAuthHeader()),body:JSON.stringify({query:e})})},e.getModels=function(e){return this.fetch("".concat(f,"/models"),{method:"GET",headers:(0,s.Z)({"Content-Type":"application/json"},this.getAuthHeader(e))})},e.getConversations=function(e,t,n){var o=new URLSearchParams({offset:e.toString(),limit:t.toString()});return this.fetch("".concat(f,"/conversations?").concat(o),{method:"GET",headers:(0,s.Z)({"Content-Type":"application/json"},this.getAuthHeader(n))})},e.getConversation=function(e,t){return this.fetch("".concat(f,"/conversation/").concat(e),{method:"GET",headers:(0,s.Z)({"Content-Type":"application/json"},this.getAuthHeader(t))})},e.generateTitle=function(e,t,n){return this.fetch("".concat(f,"/conversation/gen_title/").concat(e),{method:"POST",headers:(0,s.Z)({"Content-Type":"application/json"},this.getAuthHeader()),body:JSON.stringify({message_id:t})})},e.patchConversation=function(e,t){return this.fetch("".concat(f,"/conversation/").concat(e),{method:"PATCH",headers:(0,s.Z)({"Content-Type":"application/json"},this.getAuthHeader()),body:JSON.stringify(t)})},e.deleteConversations=function(){return this.fetch("".concat(f,"/conversations"),{method:"PATCH",headers:(0,s.Z)({"Content-Type":"application/json"},this.getAuthHeader()),body:JSON.stringify({is_visible:!1})})},e.getLoginLink=function(e){return this.fetch("".concat(f,"/bypass/link"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:e})})},e.publicApiCompletionStream=function(e,t){var n=this;return(0,o.Z)(function(){var i,r,c;return(0,h.__generator)(this,function(c){return i=new AbortController,r={action:e.completionType,messages:e.messages.length>0?e.messages:void 0,conversation_id:e.threadId,parent_message_id:e.parentMessageId,model:e.model,plugin_ids:e.threadId?void 0:e.enabledPluginIds},(0,u.L)("".concat("https://chat.openai.com/backend-api","/conversation"),{method:"POST",credentials:"include",headers:(0,s.Z)({"Content-Type":"application/json"},n.getAuthHeader()),body:JSON.stringify(r),signal:i.signal,openWhenHidden:!0,onopen:function(e){return(0,o.Z)(function(){var t,n,o;return(0,h.__generator)(this,function(i){switch(i.label){case 0:if(t=e.headers.get("content-type")||"",e.ok&&t.includes("text/event-stream"))return[2];if(!t.includes("application/json"))return[3,2];return[4,e.json()];case 1:if(n=i.sent(),console.error(n),o=(null==n?void 0:n.error)||(null==n?void 0:n.detail)){if(e.status>=500)throw new p.kb((null==o?void 0:o.message)||o);throw((null==o?void 0:o.code)==="expired_session_key"||(null==o?void 0:o.code)==="invalid_api_key"||(null==o?void 0:o.code)==="token_expired")&&window._oaiHandleSessionExpired("stream",JSON.stringify(o)),new p.gK((null==o?void 0:o.message)||o,e.status,null==o?void 0:o.code,null==o?void 0:o.type,void 0,null==o?void 0:o.clears_in)}i.label=2;case 2:throw new p.kb}})})()},onmessage:function(e){if("[DONE]"===e.data)i.abort(),t({finish_reason:"stop"});else if("ping"===e.event);else try{var n=JSON.parse(e.data);if(n.error)throw new p.kb(n.error.message);t({message:n.message,threadId:n.conversation_id})}catch(o){if((0,l.T)(o))throw new p.kb(o.message)}},onerror:function(e){throw"Failed to fetch"===e.message&&(e=new p.kb("An error occurred. Either the engine you requested does not exist or there was another issue processing your request. If this issue persists please contact us through our help center at help.openai.com.")),t({err:e}),e}}).catch(function(e){(0,a.Z)(e,p.gK)||(0,a.Z)(e,p.kb)||console.error(e)}),[2,i]})})()},e.runModerationApi=function(e,t,n){return this.fetch("".concat("https://chat.openai.com/backend-api","/moderations"),{method:"POST",headers:(0,s.Z)({"Content-Type":"application/json"},this.getAuthHeader()),body:JSON.stringify({input:e,model:"text-moderation-playground",conversation_id:t,message_id:n})})},e.submitMessageFeedback=function(e){return this.fetch("".concat(f,"/conversation/message_feedback"),{method:"POST",headers:(0,s.Z)({"Content-Type":"application/json"},this.getAuthHeader()),body:JSON.stringify(e)})},e.submitMessageComparisonFeedback=function(e){return this.fetch("".concat(f,"/conversation/message_comparison_feedback"),{method:"POST",headers:(0,s.Z)({"Content-Type":"application/json"},this.getAuthHeader()),body:JSON.stringify(e)})},e.submitCheckoutForm=function(){return this.fetch("".concat(f,"/payments/checkout"),{method:"POST",headers:(0,s.Z)({"Content-Type":"application/json"},this.getAuthHeader())})},e.fetchCustomerPortalUrl=function(e){return this.fetch("".concat(f,"/payments/customer_portal"),{method:"GET",headers:(0,s.Z)({"Content-Type":"application/json"},this.getAuthHeader(e))})},e.getPlugins=function(e){var t=e.offset,n=e.limit,o=e.statuses,i=e.isInstalled,a=e.accessToken,r=[["offset",t.toString()],["limit",n.toString()],];if(o){var c=!0,h=!1,u=void 0;try{for(var d,l=o[Symbol.iterator]();!(c=(d=l.next()).done);c=!0){var p=d.value;r.push(["statuses",p])}}catch(g){h=!0,u=g}finally{try{c||null==l.return||l.return()}finally{if(h)throw u}}}i&&r.push(["is_installed","true"]);var m=new URLSearchParams(r);return this.fetch("".concat(f,"/aip/p?").concat(m),{method:"GET",headers:(0,s.Z)({"Content-Type":"application/json"},this.getAuthHeader(a))})},e.getPluginByDomain=function(e){var t=e.domain,n=e.accessToken,o=new URLSearchParams({offset:"0",limit:"1",domains:t});return this.fetch("".concat(f,"/aip/p?").concat(o),{method:"GET",headers:(0,s.Z)({"Content-Type":"application/json"},this.getAuthHeader(n))}).then(function(e){return 0===e.items.length?null:e.items[0]})},e.setLocalhostPlugin=function(e){var t=e.localhost,n=e.manifest,o=e.openapiSpec,i=e.accessToken;return this.fetch("".concat(f,"/aip/lhp"),{method:"POST",headers:(0,s.Z)({"Content-Type":"application/json"},this.getAuthHeader(i)),body:JSON.stringify({localhost:t,manifest:n,openapi_spec:o})})},e.scrapePluginManifest=function(e){var t=e.domain,n=e.manifestAccessToken,o=e.accessToken;return this.fetch("".concat(f,"/aip/p"),{method:"POST",headers:(0,s.Z)({"Content-Type":"application/json"},this.getAuthHeader(o)),body:JSON.stringify({domain:t,manifest_access_token:n})})},e.getPluginApi=function(e){var t=e.id,n=e.accessToken;return this.fetch("".concat(f,"/aip/p/").concat(t,"/api"),{method:"GET",headers:(0,s.Z)({"Content-Type":"application/json"},this.getAuthHeader(n))})},e.updatePluginUserSettings=function(e){var t=e.pluginId,n=e.isInstalled,o=e.accessToken;return this.fetch("".concat(f,"/aip/p/").concat(t,"/user-settings"),{method:"PATCH",headers:(0,s.Z)({"Content-Type":"application/json"},this.getAuthHeader(o)),body:JSON.stringify({is_installed:n})})},e.deletePlugin=function(e){var t=e.id,n=e.accessToken;return this.fetch("".concat(f,"/aip/p/").concat(t),{method:"DELETE",headers:(0,s.Z)({"Content-Type":"application/json"},this.getAuthHeader(n))})},e.setPluginUserHttpToken=function(e){var t=e.id,n=e.userAccessToken,o=e.accessToken;return this.fetch("".concat(f,"/aip/p/").concat(t,"/user-settings/http-auth"),{method:"POST",headers:(0,s.Z)({"Content-Type":"application/json"},this.getAuthHeader(o)),body:JSON.stringify({access_token:n})})},e.setPluginServiceHttpToken=function(e){var t=e.id,n=e.serviceAccessToken,o=e.accessToken;return this.fetch("".concat(f,"/aip/p/").concat(t,"/http-auth"),{method:"POST",headers:(0,s.Z)({"Content-Type":"application/json"},this.getAuthHeader(o)),body:JSON.stringify({access_token:n})})},e.setPluginOAuthClientCredentials=function(e){var t=e.id,n=e.clientId,o=e.clientSecret,i=e.accessToken;return this.fetch("".concat(f,"/aip/p/").concat(t,"/oauth"),{method:"POST",headers:(0,s.Z)({"Content-Type":"application/json"},this.getAuthHeader(i)),body:JSON.stringify({client_id:n,client_secret:o})})},e.getAccountStatus=function(e,t){var n=(0,s.Z)({"Content-Type":"application/json"},this.getAuthHeader(e));if(t){var o={},i=!0,a=!1,r=void 0;try{for(var h,u=Object.entries(t)[Symbol.iterator]();!(i=(h=u.next()).done);i=!0){var d=(0,c.Z)(h.value,2),l=d[0],p=d[1];g.includes(l.toLowerCase())&&(o[l]=p)}}catch(m){a=!0,r=m}finally{try{i||null==u.return||u.return()}finally{if(a)throw r}}n=(0,s.Z)({},o,n)}return this.fetch("".concat(f,"/accounts/check"),{method:"GET",headers:n})},e.pluginOauthCallback=function(e,t,n,o){var i=new URLSearchParams({code:t,redirect_uri:n});return this.fetch("".concat(f,"/aip/p/").concat(e,"/user-settings/oauth/callback?").concat(i),{method:"GET",headers:(0,s.Z)({"Content-Type":"application/json"},this.getAuthHeader(o))})},e.getPageMetadata=function(e){var t=e.url;return this.fetch("".concat(f,"/opengraph/tags?url=").concat(encodeURIComponent(t)),{method:"GET",headers:(0,s.Z)({"Content-Type":"application/json"},this.getAuthHeader())})},e.getModelMessageCap=function(){return this.fetch("https://chat.openai.com/public-api/conversation_limit",{method:"GET",headers:(0,s.Z)({"Content-Type":"application/json"},this.getAuthHeader())})},e}();m.auth0Client=null,t.ZP=m}}]); \ No newline at end of file diff --git a/frontend/src/main/frontend/src/assets/rr_files/368-07f1471aa435a034.js b/frontend/src/main/frontend/src/assets/rr_files/368-07f1471aa435a034.js new file mode 100755 index 000000000..ec50a8b6b --- /dev/null +++ b/frontend/src/main/frontend/src/assets/rr_files/368-07f1471aa435a034.js @@ -0,0 +1,26 @@ +(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[368],{27215:function(){},65443:function(e,n){var r; /*! + Copyright (c) 2018 Jed Watson. + Licensed under the MIT License (MIT), see + http://jedwatson.github.io/classnames +*/ !function(){"use strict";var a={}.hasOwnProperty;function i(){for(var e=[],n=0;n1?arguments[1]:void 0)}},8804:function(e,n,r){"use strict";var a=r(89684),i=r(21296),o=r(2236),s=r(84750),l=r(13444),u=r(8615),c=r(38830),p=r(10833),m=r(72697),d=r(575),h=Array;e.exports=function(e){var n,r,f,g,b,k,y=o(e),v=u(this),E=arguments.length,T=E>1?arguments[1]:void 0,_=void 0!==T;_&&(T=a(T,E>2?arguments[2]:void 0));var x=d(y),w=0;if(x&&!(this===h&&l(x)))for(b=(g=m(y,x)).next,r=v?new this:[];!(f=i(b,g)).done;w++)k=_?s(g,T,[f.value,w],!0):f.value,p(r,w,k);else for(n=c(y),r=v?new this(n):h(n);n>w;w++)k=_?T(y[w],w):y[w],p(r,w,k);return r.length=w,r}},62335:function(e,n,r){var a=r(7322),i=r(10205),o=r(38830),s=function(e){return function(n,r,s){var l,u=a(n),c=o(u),p=i(s,c);if(e&&r!=r){for(;c>p;)if((l=u[p++])!=l)return!0}else for(;c>p;p++)if((e||p in u)&&u[p]===r)return e||p||0;return!e&&-1}};e.exports={includes:s(!0),indexOf:s(!1)}},28718:function(e,n,r){var a=r(89684),i=r(8697),o=r(31852),s=r(2236),l=r(38830),u=r(35352),c=i([].push),p=function(e){var n=1==e,r=2==e,i=3==e,p=4==e,m=6==e,d=7==e,h=5==e||m;return function(f,g,b,k){for(var y,v,E=s(f),T=o(E),_=a(g,b),x=l(T),w=0,A=k||u,j=n?A(f,x):r||d?A(f,0):void 0;x>w;w++)if((h||w in T)&&(v=_(y=T[w],w,E),e)){if(n)j[w]=v;else if(v)switch(e){case 3:return!0;case 5:return y;case 6:return w;case 2:c(j,y)}else switch(e){case 4:return!1;case 7:c(j,y)}}return m?-1:i||p?p:j}};e.exports={forEach:p(0),map:p(1),filter:p(2),some:p(3),every:p(4),find:p(5),findIndex:p(6),filterReject:p(7)}},60508:function(e,n,r){var a=r(95522),i=r(83355),o=r(51920),s=i("species");e.exports=function(e){return o>=51||!a(function(){var n=[];return(n.constructor={})[s]=function(){return{foo:1}},1!==n[e](Boolean).foo})}},98873:function(e,n,r){"use strict";var a=r(95522);e.exports=function(e,n){var r=[][e];return!!r&&a(function(){r.call(null,n||function(){return 1},1)})}},53610:function(e,n,r){"use strict";var a=r(91370),i=r(70837),o=TypeError,s=Object.getOwnPropertyDescriptor,l=a&&!function(){if(void 0!==this)return!0;try{Object.defineProperty([],"length",{writable:!1}).length=1}catch(e){return e instanceof TypeError}}();e.exports=l?function(e,n){if(i(e)&&!s(e,"length").writable)throw o("Cannot set read only .length");return e.length=n}:function(e,n){return e.length=n}},28234:function(e,n,r){var a=r(10205),i=r(38830),o=r(10833),s=Array,l=Math.max;e.exports=function(e,n,r){for(var u=i(e),c=a(n,u),p=a(void 0===r?u:r,u),m=s(l(p-c,0)),d=0;c9007199254740991)throw n("Maximum allowed index exceeded");return e}},52964:function(e){e.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},84295:function(e,n,r){var a=r(76702);e.exports=a("navigator","userAgent")||""},51920:function(e,n,r){var a,i,o=r(25822),s=r(84295),l=o.process,u=o.Deno,c=l&&l.versions||u&&u.version,p=c&&c.v8;p&&(i=(a=p.split("."))[0]>0&&a[0]<4?1:+(a[0]+a[1])),!i&&s&&(!(a=s.match(/Edge\/(\d+)/))||a[1]>=74)&&(a=s.match(/Chrome\/(\d+)/))&&(i=+a[1]),e.exports=i},44767:function(e,n,r){var a=r(50349);e.exports=function(e){return a[e+"Prototype"]}},9949:function(e){e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},65079:function(e,n,r){"use strict";var a=r(25822),i=r(58917),o=r(8697),s=r(420),l=r(12689).f,u=r(17199),c=r(50349),p=r(89684),m=r(44489),d=r(66810),h=function(e){var n=function(r,a,o){if(this instanceof n){switch(arguments.length){case 0:return new e;case 1:return new e(r);case 2:return new e(r,a)}return new e(r,a,o)}return i(e,this,arguments)};return n.prototype=e.prototype,n};e.exports=function(e,n){var r,i,f,g,b,k,y,v,E,T=e.target,_=e.global,x=e.stat,w=e.proto,A=_?a:x?a[T]:(a[T]||{}).prototype,j=_?c:c[T]||m(c,T,{})[T],S=j.prototype;for(g in n)i=!u(_?g:T+(x?".":"#")+g,e.forced)&&A&&d(A,g),k=j[g],i&&(y=e.dontCallGetSet?(E=l(A,g))&&E.value:A[g]),b=i&&y?y:n[g],(!i||typeof k!=typeof b)&&(v=e.bind&&i?p(b,a):e.wrap&&i?h(b):w&&s(b)?o(b):b,(e.sham||b&&b.sham||k&&k.sham)&&m(v,"sham",!0),m(j,g,v),w&&(d(c,f=T+"Prototype")||m(c,f,{}),m(c[f],g,b),e.real&&S&&!S[g]&&m(S,g,b)))}},95522:function(e){e.exports=function(e){try{return!!e()}catch(n){return!0}}},58917:function(e,n,r){var a=r(20770),i=Function.prototype,o=i.apply,s=i.call;e.exports="object"==typeof Reflect&&Reflect.apply||(a?s.bind(o):function(){return s.apply(o,arguments)})},89684:function(e,n,r){var a=r(8697),i=r(50869),o=r(20770),s=a(a.bind);e.exports=function(e,n){return i(e),void 0===n?e:o?s(e,n):function(){return e.apply(n,arguments)}}},20770:function(e,n,r){var a=r(95522);e.exports=!a(function(){var e=(function(){}).bind();return"function"!=typeof e||e.hasOwnProperty("prototype")})},21296:function(e,n,r){var a=r(20770),i=Function.prototype.call;e.exports=a?i.bind(i):function(){return i.apply(i,arguments)}},26901:function(e,n,r){var a=r(91370),i=r(66810),o=Function.prototype,s=a&&Object.getOwnPropertyDescriptor,l=i(o,"name"),u=l&&(!a||a&&s(o,"name").configurable);e.exports={EXISTS:l,PROPER:l&&"something"===(function(){}).name,CONFIGURABLE:u}},8697:function(e,n,r){var a=r(20770),i=Function.prototype,o=i.bind,s=i.call,l=a&&o.bind(s,s);e.exports=a?function(e){return e&&l(e)}:function(e){return e&&function(){return s.apply(e,arguments)}}},76702:function(e,n,r){var a=r(50349),i=r(25822),o=r(420),s=function(e){return o(e)?e:void 0};e.exports=function(e,n){return arguments.length<2?s(a[e])||s(i[e]):a[e]&&a[e][n]||i[e]&&i[e][n]}},575:function(e,n,r){var a=r(50377),i=r(87537),o=r(60047),s=r(70964),l=r(83355)("iterator");e.exports=function(e){if(!o(e))return i(e,l)||i(e,"@@iterator")||s[a(e)]}},72697:function(e,n,r){var a=r(21296),i=r(50869),o=r(99933),s=r(74647),l=r(575),u=TypeError;e.exports=function(e,n){var r=arguments.length<2?l(e):n;if(i(r))return o(a(r,e));throw u(s(e)+" is not iterable")}},87537:function(e,n,r){var a=r(50869),i=r(60047);e.exports=function(e,n){var r=e[n];return i(r)?void 0:a(r)}},25822:function(e,n,r){var a=function(e){return e&&e.Math==Math&&e};e.exports=a("object"==typeof globalThis&&globalThis)||a("object"==typeof window&&window)||a("object"==typeof self&&self)||a("object"==typeof r.g&&r.g)||function(){return this}()||Function("return this")()},66810:function(e,n,r){var a=r(8697),i=r(2236),o=a({}.hasOwnProperty);e.exports=Object.hasOwn||function(e,n){return o(i(e),n)}},38573:function(e){e.exports={}},99561:function(e,n,r){var a=r(76702);e.exports=a("document","documentElement")},7252:function(e,n,r){var a=r(91370),i=r(95522),o=r(6115);e.exports=!a&&!i(function(){return 7!=Object.defineProperty(o("div"),"a",{get:function(){return 7}}).a})},31852:function(e,n,r){var a=r(8697),i=r(95522),o=r(5376),s=Object,l=a("".split);e.exports=i(function(){return!s("z").propertyIsEnumerable(0)})?function(e){return"String"==o(e)?l(e,""):s(e)}:s},87929:function(e,n,r){var a=r(8697),i=r(420),o=r(13404),s=a(Function.toString);i(o.inspectSource)||(o.inspectSource=function(e){return s(e)}),e.exports=o.inspectSource},98199:function(e,n,r){var a,i,o,s=r(77014),l=r(25822),u=r(8697),c=r(59722),p=r(44489),m=r(66810),d=r(13404),h=r(2514),f=r(38573),g="Object already initialized",b=l.TypeError,k=l.WeakMap,y=function(e){return o(e)?i(e):a(e,{})},v=function(e){return function(n){var r;if(!c(n)||(r=i(n)).type!==e)throw b("Incompatible receiver, "+e+" required");return r}};if(s||d.state){var E=d.state||(d.state=new k),T=u(E.get),_=u(E.has),x=u(E.set);a=function(e,n){if(_(E,e))throw b(g);return n.facade=e,x(E,e,n),n},i=function(e){return T(E,e)||{}},o=function(e){return _(E,e)}}else{var w=h("state");f[w]=!0,a=function(e,n){if(m(e,w))throw b(g);return n.facade=e,p(e,w,n),n},i=function(e){return m(e,w)?e[w]:{}},o=function(e){return m(e,w)}}e.exports={set:a,get:i,has:o,enforce:y,getterFor:v}},13444:function(e,n,r){var a=r(83355),i=r(70964),o=a("iterator"),s=Array.prototype;e.exports=function(e){return void 0!==e&&(i.Array===e||s[o]===e)}},70837:function(e,n,r){var a=r(5376);e.exports=Array.isArray||function(e){return"Array"==a(e)}},420:function(e,n,r){var a=r(40),i=a.all;e.exports=a.IS_HTMLDDA?function(e){return"function"==typeof e||e===i}:function(e){return"function"==typeof e}},8615:function(e,n,r){var a=r(8697),i=r(95522),o=r(420),s=r(50377),l=r(76702),u=r(87929),c=function(){},p=[],m=l("Reflect","construct"),d=/^\s*(?:class|function)\b/,h=a(d.exec),f=!d.exec(c),g=function(e){if(!o(e))return!1;try{return m(c,p,e),!0}catch(n){return!1}},b=function(e){if(!o(e))return!1;switch(s(e)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return f||!!h(d,u(e))}catch(n){return!0}};b.sham=!0,e.exports=!m||i(function(){var e;return g(g.call)||!g(Object)||!g(function(){e=!0})||e})?b:g},17199:function(e,n,r){var a=r(95522),i=r(420),o=/#|\.prototype\./,s=function(e,n){var r=u[l(e)];return r==p||r!=c&&(i(n)?a(n):!!n)},l=s.normalize=function(e){return String(e).replace(o,".").toLowerCase()},u=s.data={},c=s.NATIVE="N",p=s.POLYFILL="P";e.exports=s},60047:function(e){e.exports=function(e){return null==e}},59722:function(e,n,r){var a=r(420),i=r(40),o=i.all;e.exports=i.IS_HTMLDDA?function(e){return"object"==typeof e?null!==e:a(e)||e===o}:function(e){return"object"==typeof e?null!==e:a(e)}},1847:function(e){e.exports=!0},48826:function(e,n,r){var a=r(76702),i=r(420),o=r(44948),s=r(29170),l=Object;e.exports=s?function(e){return"symbol"==typeof e}:function(e){var n=a("Symbol");return i(n)&&o(n.prototype,l(e))}},80956:function(e,n,r){var a=r(21296),i=r(99933),o=r(87537);e.exports=function(e,n,r){var s,l;i(e);try{if(!(s=o(e,"return"))){if("throw"===n)throw r;return r}s=a(s,e)}catch(u){l=!0,s=u}if("throw"===n)throw r;if(l)throw s;return i(s),r}},12770:function(e,n,r){"use strict";var a=r(37895).IteratorPrototype,i=r(53796),o=r(79341),s=r(2515),l=r(70964),u=function(){return this};e.exports=function(e,n,r,c){var p=n+" Iterator";return e.prototype=i(a,{next:o(+!c,r)}),s(e,p,!1,!0),l[p]=u,e}},89840:function(e,n,r){"use strict";var a=r(65079),i=r(21296),o=r(1847),s=r(26901),l=r(420),u=r(12770),c=r(60214),p=r(88992),m=r(2515),d=r(44489),h=r(59282),f=r(83355),g=r(70964),b=r(37895),k=s.PROPER,y=s.CONFIGURABLE,v=b.IteratorPrototype,E=b.BUGGY_SAFARI_ITERATORS,T=f("iterator"),_="keys",x="values",w="entries",A=function(){return this};e.exports=function(e,n,r,s,f,b,j){u(r,n,s);var S,C,N,O=function(e){if(e===f&&P)return P;if(!E&&e in I)return I[e];switch(e){case _:case x:case w:return function(){return new r(this,e)}}return function(){return new r(this)}},R=n+" Iterator",M=!1,I=e.prototype,L=I[T]||I["@@iterator"]||f&&I[f],P=!E&&L||O(f),D="Array"==n&&I.entries||L;if(D&&(S=c(D.call(new e)))!==Object.prototype&&S.next&&(o||c(S)===v||(p?p(S,v):l(S[T])||h(S,T,A)),m(S,R,!0,!0),o&&(g[R]=A)),k&&f==x&&L&&L.name!==x&&(!o&&y?d(I,"name",x):(M=!0,P=function(){return i(L,this)})),f){if(C={values:O(x),keys:b?P:O(_),entries:O(w)},j)for(N in C)!E&&!M&&N in I||h(I,N,C[N]);else a({target:n,proto:!0,forced:E||M},C)}return(!o||j)&&I[T]!==P&&h(I,T,P,{name:f}),g[n]=P,C}},37895:function(e,n,r){"use strict";var a,i,o,s=r(95522),l=r(420),u=r(59722),c=r(53796),p=r(60214),m=r(59282),d=r(83355),h=r(1847),f=d("iterator"),g=!1;[].keys&&("next"in(o=[].keys())?(i=p(p(o)))!==Object.prototype&&(a=i):g=!0),!u(a)||s(function(){var e={};return a[f].call(e)!==e})?a={}:h&&(a=c(a)),l(a[f])||m(a,f,function(){return this}),e.exports={IteratorPrototype:a,BUGGY_SAFARI_ITERATORS:g}},70964:function(e){e.exports={}},38830:function(e,n,r){var a=r(19153);e.exports=function(e){return a(e.length)}},20754:function(e){e.exports=Math.sign||function(e){var n=+e;return 0==n||n!=n?n:n<0?-1:1}},42661:function(e){var n=Math.ceil,r=Math.floor;e.exports=Math.trunc||function(e){var a=+e;return(a>0?r:n)(a)}},53796:function(e,n,r){var a,i=r(99933),o=r(44512),s=r(9949),l=r(38573),u=r(99561),c=r(6115),p=r(2514),m="prototype",d="script",h=p("IE_PROTO"),f=function(){},g=function(e){return"<"+d+">"+e+""},b=function(e){e.write(g("")),e.close();var n=e.parentWindow.Object;return e=null,n},k=function(){var e,n=c("iframe");return n.style.display="none",u.appendChild(n),n.src=String("java"+d+":"),(e=n.contentWindow.document).open(),e.write(g("document.F=Object")),e.close(),e.F},y=function(){try{a=new ActiveXObject("htmlfile")}catch(e){}y="undefined"!=typeof document?document.domain&&a?b(a):k():b(a);for(var n=s.length;n--;)delete y[m][s[n]];return y()};l[h]=!0,e.exports=Object.create||function(e,n){var r;return null!==e?(f[m]=i(e),r=new f,f[m]=null,r[h]=e):r=y(),void 0===n?r:o.f(r,n)}},44512:function(e,n,r){var a=r(91370),i=r(14390),o=r(59186),s=r(99933),l=r(7322),u=r(3637);n.f=a&&!i?Object.defineProperties:function(e,n){s(e);for(var r,a=l(n),i=u(n),c=i.length,p=0;c>p;)o.f(e,r=i[p++],a[r]);return e}},59186:function(e,n,r){var a=r(91370),i=r(7252),o=r(14390),s=r(99933),l=r(3061),u=TypeError,c=Object.defineProperty,p=Object.getOwnPropertyDescriptor,m="enumerable",d="configurable",h="writable";n.f=a?o?function(e,n,r){if(s(e),n=l(n),s(r),"function"==typeof e&&"prototype"===n&&"value"in r&&h in r&&!r[h]){var a=p(e,n);a&&a[h]&&(e[n]=r.value,r={configurable:d in r?r[d]:a[d],enumerable:m in r?r[m]:a[m],writable:!1})}return c(e,n,r)}:c:function(e,n,r){if(s(e),n=l(n),s(r),i)try{return c(e,n,r)}catch(a){}if("get"in r||"set"in r)throw u("Accessors not supported");return"value"in r&&(e[n]=r.value),e}},12689:function(e,n,r){var a=r(91370),i=r(21296),o=r(51492),s=r(79341),l=r(7322),u=r(3061),c=r(66810),p=r(7252),m=Object.getOwnPropertyDescriptor;n.f=a?m:function(e,n){if(e=l(e),n=u(n),p)try{return m(e,n)}catch(r){}if(c(e,n))return s(!i(o.f,e,n),e[n])}},47768:function(e,n,r){var a=r(5376),i=r(7322),o=r(39906).f,s=r(28234),l="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],u=function(e){try{return o(e)}catch(n){return s(l)}};e.exports.f=function(e){return l&&"Window"==a(e)?u(e):o(i(e))}},39906:function(e,n,r){var a=r(47648),i=r(9949).concat("length","prototype");n.f=Object.getOwnPropertyNames||function(e){return a(e,i)}},56241:function(e,n){n.f=Object.getOwnPropertySymbols},60214:function(e,n,r){var a=r(66810),i=r(420),o=r(2236),s=r(2514),l=r(57381),u=s("IE_PROTO"),c=Object,p=c.prototype;e.exports=l?c.getPrototypeOf:function(e){var n=o(e);if(a(n,u))return n[u];var r=n.constructor;return i(r)&&n instanceof r?r.prototype:n instanceof c?p:null}},44948:function(e,n,r){var a=r(8697);e.exports=a({}.isPrototypeOf)},47648:function(e,n,r){var a=r(8697),i=r(66810),o=r(7322),s=r(62335).indexOf,l=r(38573),u=a([].push);e.exports=function(e,n){var r,a=o(e),c=0,p=[];for(r in a)!i(l,r)&&i(a,r)&&u(p,r);for(;n.length>c;)i(a,r=n[c++])&&(~s(p,r)||u(p,r));return p}},3637:function(e,n,r){var a=r(47648),i=r(9949);e.exports=Object.keys||function(e){return a(e,i)}},51492:function(e,n){"use strict";var r={}.propertyIsEnumerable,a=Object.getOwnPropertyDescriptor,i=a&&!r.call({1:2},1);n.f=i?function(e){var n=a(this,e);return!!n&&n.enumerable}:r},88992:function(e,n,r){var a=r(8697),i=r(99933),o=r(37681);e.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var e,n=!1,r={};try{(e=a(Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set))(r,[]),n=r instanceof Array}catch(s){}return function(r,a){return i(r),o(a),n?e(r,a):r.__proto__=a,r}}():void 0)},33611:function(e,n,r){"use strict";var a=r(49228),i=r(50377);e.exports=a?({}).toString:function(){return"[object "+i(this)+"]"}},93578:function(e,n,r){var a=r(21296),i=r(420),o=r(59722),s=TypeError;e.exports=function(e,n){var r,l;if("string"===n&&i(r=e.toString)&&!o(l=a(r,e))||i(r=e.valueOf)&&!o(l=a(r,e))||"string"!==n&&i(r=e.toString)&&!o(l=a(r,e)))return l;throw s("Can't convert object to primitive value")}},84618:function(e,n,r){var a=r(76702),i=r(8697),o=r(39906),s=r(56241),l=r(99933),u=i([].concat);e.exports=a("Reflect","ownKeys")||function(e){var n=o.f(l(e)),r=s.f;return r?u(n,r(e)):n}},50349:function(e){e.exports={}},41653:function(e,n,r){var a=r(60047),i=TypeError;e.exports=function(e){if(a(e))throw i("Can't call method on "+e);return e}},17839:function(e,n,r){var a=r(25822),i=r(58917),o=r(420),s=r(84295),l=r(7942),u=r(62258),c=/MSIE .\./.test(s),p=a.Function,m=function(e){return c?function(n,r){var a=u(arguments.length,1)>2,s=o(n)?n:p(n),c=a?l(arguments,2):void 0;return e(a?function(){i(s,this,c)}:s,r)}:e};e.exports={setTimeout:m(a.setTimeout),setInterval:m(a.setInterval)}},2515:function(e,n,r){var a=r(49228),i=r(59186).f,o=r(44489),s=r(66810),l=r(33611),u=r(83355)("toStringTag");e.exports=function(e,n,r,c){if(e){var p=r?e:e.prototype;s(p,u)||i(p,u,{configurable:!0,value:n}),c&&!a&&o(p,"toString",l)}}},2514:function(e,n,r){var a=r(51019),i=r(33852),o=a("keys");e.exports=function(e){return o[e]||(o[e]=i(e))}},13404:function(e,n,r){var a=r(25822),i=r(81673),o="__core-js_shared__",s=a[o]||i(o,{});e.exports=s},51019:function(e,n,r){var a=r(1847),i=r(13404);(e.exports=function(e,n){return i[e]||(i[e]=void 0!==n?n:{})})("versions",[]).push({version:"3.25.2",mode:a?"pure":"global",copyright:"\xa9 2014-2022 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.25.2/LICENSE",source:"https://github.com/zloirock/core-js"})},46437:function(e,n,r){var a=r(8697),i=r(50485),o=r(39752),s=r(41653),l=a("".charAt),u=a("".charCodeAt),c=a("".slice),p=function(e){return function(n,r){var a,p,m=o(s(n)),d=i(r),h=m.length;return d<0||d>=h?e?"":void 0:(a=u(m,d))<55296||a>56319||d+1===h||(p=u(m,d+1))<56320||p>57343?e?l(m,d):a:e?c(m,d,d+2):(a-55296<<10)+(p-56320)+65536}};e.exports={codeAt:p(!1),charAt:p(!0)}},38726:function(e,n,r){var a=r(51920),i=r(95522);e.exports=!!Object.getOwnPropertySymbols&&!i(function(){var e=Symbol();return!String(e)||!(Object(e) instanceof Symbol)||!Symbol.sham&&a&&a<41})},52726:function(e,n,r){var a=r(21296),i=r(76702),o=r(83355),s=r(59282);e.exports=function(){var e=i("Symbol"),n=e&&e.prototype,r=n&&n.valueOf,l=o("toPrimitive");n&&!n[l]&&s(n,l,function(e){return a(r,this)},{arity:1})}},95542:function(e,n,r){var a=r(38726);e.exports=a&&!!Symbol.for&&!!Symbol.keyFor},10205:function(e,n,r){var a=r(50485),i=Math.max,o=Math.min;e.exports=function(e,n){var r=a(e);return r<0?i(r+n,0):o(r,n)}},7322:function(e,n,r){var a=r(31852),i=r(41653);e.exports=function(e){return a(i(e))}},50485:function(e,n,r){var a=r(42661);e.exports=function(e){var n=+e;return n!=n||0===n?0:a(n)}},19153:function(e,n,r){var a=r(50485),i=Math.min;e.exports=function(e){return e>0?i(a(e),9007199254740991):0}},2236:function(e,n,r){var a=r(41653),i=Object;e.exports=function(e){return i(a(e))}},37508:function(e,n,r){var a=r(21296),i=r(59722),o=r(48826),s=r(87537),l=r(93578),u=r(83355),c=TypeError,p=u("toPrimitive");e.exports=function(e,n){if(!i(e)||o(e))return e;var r,u=s(e,p);if(u){if(void 0===n&&(n="default"),r=a(u,e,n),!i(r)||o(r))return r;throw c("Can't convert object to primitive value")}return void 0===n&&(n="number"),l(e,n)}},3061:function(e,n,r){var a=r(37508),i=r(48826);e.exports=function(e){var n=a(e,"string");return i(n)?n:n+""}},49228:function(e,n,r){var a=r(83355)("toStringTag"),i={};i[a]="z",e.exports="[object z]"===String(i)},39752:function(e,n,r){var a=r(50377),i=String;e.exports=function(e){if("Symbol"===a(e))throw TypeError("Cannot convert a Symbol value to a string");return i(e)}},74647:function(e){var n=String;e.exports=function(e){try{return n(e)}catch(r){return"Object"}}},33852:function(e,n,r){var a=r(8697),i=0,o=Math.random(),s=a(1..toString);e.exports=function(e){return"Symbol("+(void 0===e?"":e)+")_"+s(++i+o,36)}},29170:function(e,n,r){var a=r(38726);e.exports=a&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},14390:function(e,n,r){var a=r(91370),i=r(95522);e.exports=a&&i(function(){return 42!=Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype})},62258:function(e){var n=TypeError;e.exports=function(e,r){if(e=51||!i(function(){var e=[];return e[g]=!1,e.concat()[0]!==e}),k=d("concat"),y=function(e){if(!s(e))return!1;var n=e[g];return void 0!==n?!!n:o(e)};a({target:"Array",proto:!0,arity:1,forced:!b||!k},{concat:function(e){var n,r,a,i,o,s=l(this),d=m(s,0),h=0;for(n=-1,a=arguments.length;n1?arguments[1]:void 0)}})},57902:function(e,n,r){"use strict";var a=r(65079),i=r(19472);a({target:"Array",proto:!0,forced:[].forEach!=i},{forEach:i})},56858:function(e,n,r){var a=r(65079),i=r(8804),o=!r(8882)(function(e){Array.from(e)});a({target:"Array",stat:!0,forced:o},{from:i})},12952:function(e,n,r){"use strict";var a=r(65079),i=r(8697),o=r(62335).indexOf,s=r(98873),l=i([].indexOf),u=!!l&&1/l([1],1,-0)<0,c=s("indexOf");a({target:"Array",proto:!0,forced:u||!c},{indexOf:function(e){var n=arguments.length>1?arguments[1]:void 0;return u?l(this,e,n)||0:o(this,e,n)}})},21084:function(e,n,r){var a=r(65079),i=r(70837);a({target:"Array",stat:!0},{isArray:i})},70662:function(e,n,r){"use strict";var a=r(7322),i=r(91884),o=r(70964),s=r(98199),l=r(59186).f,u=r(89840),c=r(43689),p=r(1847),m=r(91370),d="Array Iterator",h=s.set,f=s.getterFor(d);e.exports=u(Array,"Array",function(e,n){h(this,{type:d,target:a(e),index:0,kind:n})},function(){var e=f(this),n=e.target,r=e.kind,a=e.index++;return!n||a>=n.length?(e.target=void 0,c(void 0,!0)):"keys"==r?c(a,!1):"values"==r?c(n[a],!1):c([a,n[a]],!1)},"values");var g=o.Arguments=o.Array;if(i("keys"),i("values"),i("entries"),!p&&m&&"values"!==g.name)try{l(g,"name",{value:"values"})}catch(b){}},98016:function(e,n,r){"use strict";var a=r(65079),i=r(70837),o=r(8615),s=r(59722),l=r(10205),u=r(38830),c=r(7322),p=r(10833),m=r(83355),d=r(60508),h=r(7942),f=d("slice"),g=m("species"),b=Array,k=Math.max;a({target:"Array",proto:!0,forced:!f},{slice:function(e,n){var r,a,m,d=c(this),f=u(d),y=l(e,f),v=l(void 0===n?f:n,f);if(i(d)&&(o(r=d.constructor)&&(r===b||i(r.prototype))?r=void 0:s(r)&&null===(r=r[g])&&(r=void 0),r===b||void 0===r))return h(d,y,v);for(m=0,a=new(void 0===r?b:r)(k(v-y,0));yE-a+r;b--)d(v,b-1)}else if(r>a)for(b=E-a;b>T;b--)k=b+a-1,y=b+r-1,k in v?v[y]=v[k]:d(v,y);for(b=0;bm;)void 0!==(r=i(a,n=c[m++]))&&u(p,n,r);return p}})},9850:function(e,n,r){var a=r(65079),i=r(38726),o=r(95522),s=r(56241),l=r(2236),u=!i||o(function(){s.f(1)});a({target:"Object",stat:!0,forced:u},{getOwnPropertySymbols:function(e){var n=s.f;return n?n(l(e)):[]}})},25016:function(e,n,r){var a=r(65079),i=r(2236),o=r(3637),s=r(95522)(function(){o(1)});a({target:"Object",stat:!0,forced:s},{keys:function(e){return o(i(e))}})},83739:function(){},10416:function(){},9813:function(e,n,r){"use strict";var a=r(46437).charAt,i=r(39752),o=r(98199),s=r(89840),l=r(43689),u="String Iterator",c=o.set,p=o.getterFor(u);s(String,"String",function(e){c(this,{type:u,string:i(e),index:0})},function(){var e,n=p(this),r=n.string,i=n.index;return i>=r.length?l(void 0,!0):(e=a(r,i),n.index+=e.length,l(e,!1))})},63617:function(e,n,r){r(75209)("asyncIterator")},55773:function(e,n,r){"use strict";var a=r(65079),i=r(25822),o=r(21296),s=r(8697),l=r(1847),u=r(91370),c=r(38726),p=r(95522),m=r(66810),d=r(44948),h=r(99933),f=r(7322),g=r(3061),b=r(39752),k=r(79341),y=r(53796),v=r(3637),E=r(39906),T=r(47768),_=r(56241),x=r(12689),w=r(59186),A=r(44512),j=r(51492),S=r(59282),C=r(51019),N=r(2514),O=r(38573),R=r(33852),M=r(83355),I=r(39509),L=r(75209),P=r(52726),D=r(2515),z=r(98199),F=r(28718).forEach,B=N("hidden"),H="Symbol",U="prototype",G=z.set,$=z.getterFor(H),K=Object[U],V=i.Symbol,q=V&&V[U],W=i.TypeError,Y=i.QObject,Q=x.f,Z=w.f,X=T.f,J=j.f,ee=s([].push),et=C("symbols"),en=C("op-symbols"),er=C("wks"),ea=!Y||!Y[U]||!Y[U].findChild,ei=u&&p(function(){return 7!=y(Z({},"a",{get:function(){return Z(this,"a",{value:7}).a}})).a})?function(e,n,r){var a=Q(K,n);a&&delete K[n],Z(e,n,r),a&&e!==K&&Z(K,n,a)}:Z,eo=function(e,n){var r=et[e]=y(q);return G(r,{type:H,tag:e,description:n}),u||(r.description=n),r},es=function(e,n,r){e===K&&es(en,n,r),h(e);var a=g(n);return(h(r),m(et,a))?(r.enumerable?(m(e,B)&&e[B][a]&&(e[B][a]=!1),r=y(r,{enumerable:k(0,!1)})):(m(e,B)||Z(e,B,k(1,{})),e[B][a]=!0),ei(e,a,r)):Z(e,a,r)},el=function(e,n){h(e);var r=f(n),a=v(r).concat(ed(r));return F(a,function(n){(!u||o(ec,r,n))&&es(e,n,r[n])}),e},eu=function(e,n){return void 0===n?y(e):el(y(e),n)},ec=function(e){var n=g(e),r=o(J,this,n);return(!(this===K&&m(et,n))||!!m(en,n))&&(!(r||!m(this,n)||!m(et,n)||m(this,B)&&this[B][n])||r)},ep=function(e,n){var r=f(e),a=g(n);if(!(r===K&&m(et,a))||m(en,a)){var i=Q(r,a);return i&&m(et,a)&&!(m(r,B)&&r[B][a])&&(i.enumerable=!0),i}},em=function(e){var n=X(f(e)),r=[];return F(n,function(e){m(et,e)||m(O,e)||ee(r,e)}),r},ed=function(e){var n=e===K,r=X(n?en:f(e)),a=[];return F(r,function(e){m(et,e)&&(!n||m(K,e))&&ee(a,et[e])}),a};c||(q=(V=function(){if(d(q,this))throw W("Symbol is not a constructor");var e=arguments.length&&void 0!==arguments[0]?b(arguments[0]):void 0,n=R(e),r=function(e){this===K&&o(r,en,e),m(this,B)&&m(this[B],n)&&(this[B][n]=!1),ei(this,n,k(1,e))};return u&&ea&&ei(K,n,{configurable:!0,set:r}),eo(n,e)})[U],S(q,"toString",function(){return $(this).tag}),S(V,"withoutSetter",function(e){return eo(R(e),e)}),j.f=ec,w.f=es,A.f=el,x.f=ep,E.f=T.f=em,_.f=ed,I.f=function(e){return eo(M(e),e)},u&&(Z(q,"description",{configurable:!0,get:function(){return $(this).description}}),l||S(K,"propertyIsEnumerable",ec,{unsafe:!0}))),a({global:!0,constructor:!0,wrap:!0,forced:!c,sham:!c},{Symbol:V}),F(v(er),function(e){L(e)}),a({target:H,stat:!0,forced:!c},{useSetter:function(){ea=!0},useSimple:function(){ea=!1}}),a({target:"Object",stat:!0,forced:!c,sham:!u},{create:eu,defineProperty:es,defineProperties:el,getOwnPropertyDescriptor:ep}),a({target:"Object",stat:!0,forced:!c},{getOwnPropertyNames:em}),P(),D(V,H),O[B]=!0},32222:function(){},58584:function(e,n,r){var a=r(65079),i=r(76702),o=r(66810),s=r(39752),l=r(51019),u=r(95542),c=l("string-to-symbol-registry"),p=l("symbol-to-string-registry");a({target:"Symbol",stat:!0,forced:!u},{for:function(e){var n=s(e);if(o(c,n))return c[n];var r=i("Symbol")(n);return c[n]=r,p[r]=n,r}})},45453:function(e,n,r){r(75209)("hasInstance")},69956:function(e,n,r){r(75209)("isConcatSpreadable")},39234:function(e,n,r){r(75209)("iterator")},14138:function(e,n,r){r(55773),r(58584),r(32002),r(23628),r(9850)},32002:function(e,n,r){var a=r(65079),i=r(66810),o=r(48826),s=r(74647),l=r(51019),u=r(95542),c=l("symbol-to-string-registry");a({target:"Symbol",stat:!0,forced:!u},{keyFor:function(e){if(!o(e))throw TypeError(s(e)+" is not a symbol");if(i(c,e))return c[e]}})},74696:function(e,n,r){r(75209)("matchAll")},58280:function(e,n,r){r(75209)("match")},12710:function(e,n,r){r(75209)("replace")},58730:function(e,n,r){r(75209)("search")},56733:function(e,n,r){r(75209)("species")},4774:function(e,n,r){r(75209)("split")},72874:function(e,n,r){var a=r(75209),i=r(52726);a("toPrimitive"),i()},93492:function(e,n,r){var a=r(76702),i=r(75209),o=r(2515);i("toStringTag"),o(a("Symbol"),"Symbol")},60905:function(e,n,r){r(75209)("unscopables")},12014:function(e,n,r){r(75209)("asyncDispose")},29864:function(e,n,r){r(75209)("dispose")},29657:function(e,n,r){r(75209)("matcher")},18286:function(e,n,r){r(75209)("metadataKey")},69201:function(e,n,r){r(75209)("metadata")},70245:function(e,n,r){r(75209)("observable")},74662:function(e,n,r){r(75209)("patternMatch")},19109:function(e,n,r){r(75209)("replaceAll")},5384:function(e,n,r){r(70662);var a=r(52964),i=r(25822),o=r(50377),s=r(44489),l=r(70964),u=r(83355)("toStringTag");for(var c in a){var p=i[c],m=p&&p.prototype;m&&o(m)!==u&&s(m,u,c),l[c]=l.Array}},77461:function(e,n,r){var a=r(65079),i=r(25822),o=r(17839).setInterval;a({global:!0,bind:!0,forced:i.setInterval!==o},{setInterval:o})},17219:function(e,n,r){var a=r(65079),i=r(25822),o=r(17839).setTimeout;a({global:!0,bind:!0,forced:i.setTimeout!==o},{setTimeout:o})},88406:function(e,n,r){r(77461),r(17219)},61289:function(e,n,r){var a=r(93674);e.exports=a},73983:function(e,n,r){var a=r(16007);e.exports=a},29943:function(e,n,r){var a=r(21487);e.exports=a},35237:function(e,n,r){var a=r(79295);e.exports=a},586:function(e,n,r){var a=r(98010);r(5384),e.exports=a},18187:function(e,n,r){var a=r(2968);e.exports=a},19933:function(e,n,r){var a=r(80764);e.exports=a},78954:function(e,n,r){r(5384);var a=r(50377),i=r(66810),o=r(44948),s=r(29943),l=Array.prototype,u={DOMTokenList:!0,NodeList:!0};e.exports=function(e){var n=e.forEach;return e===l||o(l,e)&&n===l.forEach||i(u,a(e))?s:n}},61325:function(e,n,r){var a=r(9118);e.exports=a},27845:function(e,n,r){var a=r(57652);e.exports=a},98860:function(e,n,r){var a=r(506);e.exports=a},43282:function(e,n,r){var a=r(52870);e.exports=a},69630:function(e,n,r){var a=r(22341);e.exports=a},56813:function(e,n,r){var a=r(92460);e.exports=a},51921:function(e,n,r){var a=r(78007);e.exports=a},24457:function(e,n,r){var a=r(59799);e.exports=a},97911:function(e,n,r){var a=r(20017);e.exports=a},85827:function(e,n,r){var a=r(90337);e.exports=a},79748:function(e,n,r){r(88406);var a=r(50349);e.exports=a.setInterval},56437:function(e,n,r){r(88406);var a=r(50349);e.exports=a.setTimeout},79709:function(e,n,r){var a=r(3408);r(5384),e.exports=a},12750:function(e,n,r){var a=r(4015),i=r(54347);e.exports=function(e){if(a(e))return e;throw TypeError(i(e)+" is not a function")}},84179:function(e,n,r){"use strict";var a=r(82978).charAt;e.exports=function(e,n,r){return n+(r?a(e,n).length:1)}},13533:function(e,n,r){var a=r(72852);e.exports=function(e){if(a(e))return e;throw TypeError(String(e)+" is not an object")}},73934:function(e,n,r){var a=r(97418),i=r(73154),o=r(72061),s=function(e){return function(n,r,s){var l,u=a(n),c=o(u),p=i(s,c);if(e&&r!=r){for(;c>p;)if((l=u[p++])!=l)return!0}else for(;c>p;p++)if((e||p in u)&&u[p]===r)return e||p||0;return!e&&-1}};e.exports={includes:s(!0),indexOf:s(!1)}},2945:function(e){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},81153:function(e,n,r){var a=r(85943),i=r(4015),o=r(2945),s=r(30359)("toStringTag"),l="Arguments"==o(function(){return arguments}()),u=function(e,n){try{return e[n]}catch(r){}};e.exports=a?o:function(e){var n,r,a;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(r=u(n=Object(e),s))?r:l?o(n):"Object"==(a=o(n))&&i(n.callee)?"Arguments":a}},84255:function(e,n,r){var a=r(67728),i=r(2213),o=r(58776),s=r(29311);e.exports=function(e,n){for(var r=i(n),l=s.f,u=o.f,c=0;c=74)&&(a=s.match(/Chrome\/(\d+)/))&&(i=a[1]),e.exports=i&&+i},31069:function(e){e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},58643:function(e,n,r){var a=r(53392),i=r(58776).f,o=r(57695),s=r(81839),l=r(88461),u=r(84255),c=r(71239);e.exports=function(e,n){var r,p,m,d,h,f,g=e.target,b=e.global,k=e.stat;if(p=b?a:k?a[g]||l(g,{}):(a[g]||{}).prototype)for(m in n){if(h=n[m],d=e.noTargetGet?(f=i(p,m))&&f.value:p[m],!c(b?m:g+(k?".":"#")+m,e.forced)&&void 0!==d){if(typeof h==typeof d)continue;u(h,d)}(e.sham||d&&d.sham)&&o(h,"sham",!0),s(p,m,h,e)}}},65905:function(e){e.exports=function(e){try{return!!e()}catch(n){return!0}}},42758:function(e,n,r){"use strict";r(59103);var a=r(81839),i=r(60974),o=r(65905),s=r(30359),l=r(57695),u=s("species"),c=RegExp.prototype;e.exports=function(e,n,r,p){var m=s(e),d=!o(function(){var n={};return n[m]=function(){return 7},7!=""[e](n)}),h=d&&!o(function(){var n=!1,r=/a/;return"split"===e&&((r={}).constructor={},r.constructor[u]=function(){return r},r.flags="",r[m]=/./[m]),r.exec=function(){return n=!0,null},r[m](""),!n});if(!d||!h||r){var f=/./[m],g=n(m,""[e],function(e,n,r,a,o){var s=n.exec;return s===i||s===c.exec?d&&!o?{done:!0,value:f.call(n,r,a)}:{done:!0,value:e.call(r,n,a)}:{done:!1}});a(String.prototype,e,g[0]),a(c,m,g[1])}p&&l(c[m],"sham",!0)}},61336:function(e,n,r){var a=r(81846),i=r(67728),o=Function.prototype,s=a&&Object.getOwnPropertyDescriptor,l=i(o,"name"),u=l&&(!a||a&&s(o,"name").configurable);e.exports={EXISTS:l,PROPER:l&&"something"===(function(){}).name,CONFIGURABLE:u}},70773:function(e,n,r){var a=r(53392),i=r(4015);e.exports=function(e,n){var r;return arguments.length<2?i(r=a[e])?r:void 0:a[e]&&a[e][n]}},66404:function(e,n,r){var a=r(12750);e.exports=function(e,n){var r=e[n];return null==r?void 0:a(r)}},10860:function(e,n,r){var a=r(80362),i=Math.floor,o="".replace,s=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,l=/\$([$&'`]|\d{1,2})/g;e.exports=function(e,n,r,u,c,p){var m=r+e.length,d=u.length,h=l;return void 0!==c&&(c=a(c),h=s),o.call(p,h,function(a,o){var s;switch(o.charAt(0)){case"$":return"$";case"&":return e;case"`":return n.slice(0,r);case"'":return n.slice(m);case"<":s=c[o.slice(1,-1)];break;default:var l=+o;if(0===l)return a;if(l>d){var p=i(l/10);if(0===p)return a;if(p<=d)return void 0===u[p-1]?o.charAt(1):u[p-1]+o.charAt(1);return a}s=u[l-1]}return void 0===s?"":s})}},53392:function(e,n,r){var a=function(e){return e&&e.Math==Math&&e};e.exports=a("object"==typeof globalThis&&globalThis)||a("object"==typeof window&&window)||a("object"==typeof self&&self)||a("object"==typeof r.g&&r.g)||function(){return this}()||Function("return this")()},67728:function(e,n,r){var a=r(80362),i={}.hasOwnProperty;e.exports=Object.hasOwn||function(e,n){return i.call(a(e),n)}},62998:function(e){e.exports={}},19368:function(e,n,r){var a=r(70773);e.exports=a("document","documentElement")},29630:function(e,n,r){var a=r(81846),i=r(65905),o=r(62770);e.exports=!a&&!i(function(){return 7!=Object.defineProperty(o("div"),"a",{get:function(){return 7}}).a})},15338:function(e,n,r){var a=r(65905),i=r(2945),o="".split;e.exports=a(function(){return!Object("z").propertyIsEnumerable(0)})?function(e){return"String"==i(e)?o.call(e,""):Object(e)}:Object},83252:function(e,n,r){var a=r(4015),i=r(20559),o=Function.toString;a(i.inspectSource)||(i.inspectSource=function(e){return o.call(e)}),e.exports=i.inspectSource},3490:function(e,n,r){var a,i,o,s=r(18407),l=r(53392),u=r(72852),c=r(57695),p=r(67728),m=r(20559),d=r(13131),h=r(62998),f="Object already initialized",g=l.WeakMap,b=function(e){return o(e)?i(e):a(e,{})},k=function(e){return function(n){var r;if(!u(n)||(r=i(n)).type!==e)throw TypeError("Incompatible receiver, "+e+" required");return r}};if(s||m.state){var y=m.state||(m.state=new g),v=y.get,E=y.has,T=y.set;a=function(e,n){if(E.call(y,e))throw TypeError(f);return n.facade=e,T.call(y,e,n),n},i=function(e){return v.call(y,e)||{}},o=function(e){return E.call(y,e)}}else{var _=d("state");h[_]=!0,a=function(e,n){if(p(e,_))throw TypeError(f);return n.facade=e,c(e,_,n),n},i=function(e){return p(e,_)?e[_]:{}},o=function(e){return p(e,_)}}e.exports={set:a,get:i,has:o,enforce:b,getterFor:k}},4015:function(e){e.exports=function(e){return"function"==typeof e}},71239:function(e,n,r){var a=r(65905),i=r(4015),o=/#|\.prototype\./,s=function(e,n){var r=u[l(e)];return r==p||r!=c&&(i(n)?a(n):!!n)},l=s.normalize=function(e){return String(e).replace(o,".").toLowerCase()},u=s.data={},c=s.NATIVE="N",p=s.POLYFILL="P";e.exports=s},72852:function(e,n,r){var a=r(4015);e.exports=function(e){return"object"==typeof e?null!==e:a(e)}},49810:function(e){e.exports=!1},11874:function(e,n,r){var a=r(4015),i=r(70773),o=r(75563);e.exports=o?function(e){return"symbol"==typeof e}:function(e){var n=i("Symbol");return a(n)&&Object(e) instanceof n}},72061:function(e,n,r){var a=r(8924);e.exports=function(e){return a(e.length)}},83774:function(e,n,r){var a=r(45873),i=r(65905);e.exports=!!Object.getOwnPropertySymbols&&!i(function(){var e=Symbol();return!String(e)||!(Object(e) instanceof Symbol)||!Symbol.sham&&a&&a<41})},18407:function(e,n,r){var a=r(53392),i=r(4015),o=r(83252),s=a.WeakMap;e.exports=i(s)&&/native code/.test(o(s))},49898:function(e,n,r){var a,i=r(13533),o=r(36627),s=r(31069),l=r(62998),u=r(19368),c=r(62770),p=r(13131),m="prototype",d="script",h=p("IE_PROTO"),f=function(){},g=function(e){return"<"+d+">"+e+""},b=function(e){e.write(g("")),e.close();var n=e.parentWindow.Object;return e=null,n},k=function(){var e,n=c("iframe");return n.style.display="none",u.appendChild(n),n.src=String("java"+d+":"),(e=n.contentWindow.document).open(),e.write(g("document.F=Object")),e.close(),e.F},y=function(){try{a=new ActiveXObject("htmlfile")}catch(e){}y="undefined"!=typeof document?document.domain&&a?b(a):k():b(a);for(var n=s.length;n--;)delete y[m][s[n]];return y()};l[h]=!0,e.exports=Object.create||function(e,n){var r;return null!==e?(f[m]=i(e),r=new f,f[m]=null,r[h]=e):r=y(),void 0===n?r:o(r,n)}},36627:function(e,n,r){var a=r(81846),i=r(29311),o=r(13533),s=r(8994);e.exports=a?Object.defineProperties:function(e,n){o(e);for(var r,a=s(n),l=a.length,u=0;l>u;)i.f(e,r=a[u++],n[r]);return e}},29311:function(e,n,r){var a=r(81846),i=r(29630),o=r(13533),s=r(42932),l=Object.defineProperty;n.f=a?l:function(e,n,r){if(o(e),n=s(n),o(r),i)try{return l(e,n,r)}catch(a){}if("get"in r||"set"in r)throw TypeError("Accessors not supported");return"value"in r&&(e[n]=r.value),e}},58776:function(e,n,r){var a=r(81846),i=r(34511),o=r(7773),s=r(97418),l=r(42932),u=r(67728),c=r(29630),p=Object.getOwnPropertyDescriptor;n.f=a?p:function(e,n){if(e=s(e),n=l(n),c)try{return p(e,n)}catch(r){}if(u(e,n))return o(!i.f.call(e,n),e[n])}},52728:function(e,n,r){var a=r(88486),i=r(31069).concat("length","prototype");n.f=Object.getOwnPropertyNames||function(e){return a(e,i)}},96932:function(e,n){n.f=Object.getOwnPropertySymbols},88486:function(e,n,r){var a=r(67728),i=r(97418),o=r(73934).indexOf,s=r(62998);e.exports=function(e,n){var r,l=i(e),u=0,c=[];for(r in l)!a(s,r)&&a(l,r)&&c.push(r);for(;n.length>u;)a(l,r=n[u++])&&(~o(c,r)||c.push(r));return c}},8994:function(e,n,r){var a=r(88486),i=r(31069);e.exports=Object.keys||function(e){return a(e,i)}},34511:function(e,n){"use strict";var r={}.propertyIsEnumerable,a=Object.getOwnPropertyDescriptor,i=a&&!r.call({1:2},1);n.f=i?function(e){var n=a(this,e);return!!n&&n.enumerable}:r},15609:function(e,n,r){"use strict";var a=r(85943),i=r(81153);e.exports=a?({}).toString:function(){return"[object "+i(this)+"]"}},79954:function(e,n,r){var a=r(4015),i=r(72852);e.exports=function(e,n){var r,o;if("string"===n&&a(r=e.toString)&&!i(o=r.call(e))||a(r=e.valueOf)&&!i(o=r.call(e))||"string"!==n&&a(r=e.toString)&&!i(o=r.call(e)))return o;throw TypeError("Can't convert object to primitive value")}},2213:function(e,n,r){var a=r(70773),i=r(52728),o=r(96932),s=r(13533);e.exports=a("Reflect","ownKeys")||function(e){var n=i.f(s(e)),r=o.f;return r?n.concat(r(e)):n}},81839:function(e,n,r){var a=r(53392),i=r(4015),o=r(67728),s=r(57695),l=r(88461),u=r(83252),c=r(3490),p=r(61336).CONFIGURABLE,m=c.get,d=c.enforce,h=String(String).split("String");(e.exports=function(e,n,r,u){var c,m=!!u&&!!u.unsafe,f=!!u&&!!u.enumerable,g=!!u&&!!u.noTargetGet,b=u&&void 0!==u.name?u.name:n;if(i(r)&&("Symbol("===String(b).slice(0,7)&&(b="["+String(b).replace(/^Symbol\(([^)]*)\)/,"$1")+"]"),(!o(r,"name")||p&&r.name!==b)&&s(r,"name",b),(c=d(r)).source||(c.source=h.join("string"==typeof b?b:""))),e===a){f?e[n]=r:l(n,r);return}m?!g&&e[n]&&(f=!0):delete e[n],f?e[n]=r:s(e,n,r)})(Function.prototype,"toString",function(){return i(this)&&m(this).source||u(this)})},31336:function(e,n,r){var a=r(13533),i=r(4015),o=r(2945),s=r(60974);e.exports=function(e,n){var r=e.exec;if(i(r)){var l=r.call(e,n);return null!==l&&a(l),l}if("RegExp"===o(e))return s.call(e,n);throw TypeError("RegExp#exec called on incompatible receiver")}},60974:function(e,n,r){"use strict";var a,i,o=r(75807),s=r(7246),l=r(14207),u=r(28014),c=r(49898),p=r(3490).get,m=r(34314),d=r(44309),h=RegExp.prototype.exec,f=u("native-string-replace",String.prototype.replace),g=h,b=(a=/a/,i=/b*/g,h.call(a,"a"),h.call(i,"a"),0!==a.lastIndex||0!==i.lastIndex),k=l.UNSUPPORTED_Y||l.BROKEN_CARET,y=void 0!==/()??/.exec("")[1];(b||y||k||m||d)&&(g=function(e){var n,r,a,i,l,u,m,d=this,v=p(d),E=o(e),T=v.raw;if(T)return T.lastIndex=d.lastIndex,n=g.call(T,E),d.lastIndex=T.lastIndex,n;var _=v.groups,x=k&&d.sticky,w=s.call(d),A=d.source,j=0,S=E;if(x&&(-1===(w=w.replace("y","")).indexOf("g")&&(w+="g"),S=E.slice(d.lastIndex),d.lastIndex>0&&(!d.multiline||d.multiline&&"\n"!==E.charAt(d.lastIndex-1))&&(A="(?: "+A+")",S=" "+S,j++),r=RegExp("^(?:"+A+")",w)),y&&(r=RegExp("^"+A+"$(?!\\s)",w)),b&&(a=d.lastIndex),i=h.call(x?r:d,S),x?i?(i.input=i.input.slice(j),i[0]=i[0].slice(j),i.index=d.lastIndex,d.lastIndex+=i[0].length):d.lastIndex=0:b&&i&&(d.lastIndex=d.global?i.index+i[0].length:a),y&&i&&i.length>1&&f.call(i[0],r,function(){for(l=1;lb)","g");return"b"!==e.exec("b").groups.a||"bc"!=="b".replace(e,"$c")})},39899:function(e){e.exports=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e}},88461:function(e,n,r){var a=r(53392);e.exports=function(e,n){try{Object.defineProperty(a,e,{value:n,configurable:!0,writable:!0})}catch(r){a[e]=n}return n}},13131:function(e,n,r){var a=r(28014),i=r(91511),o=a("keys");e.exports=function(e){return o[e]||(o[e]=i(e))}},20559:function(e,n,r){var a=r(53392),i=r(88461),o="__core-js_shared__",s=a[o]||i(o,{});e.exports=s},28014:function(e,n,r){var a=r(49810),i=r(20559);(e.exports=function(e,n){return i[e]||(i[e]=void 0!==n?n:{})})("versions",[]).push({version:"3.18.3",mode:a?"pure":"global",copyright:"\xa9 2021 Denis Pushkarev (zloirock.ru)"})},82978:function(e,n,r){var a=r(58210),i=r(75807),o=r(39899),s=function(e){return function(n,r){var s,l,u=i(o(n)),c=a(r),p=u.length;return c<0||c>=p?e?"":void 0:(s=u.charCodeAt(c))<55296||s>56319||c+1===p||(l=u.charCodeAt(c+1))<56320||l>57343?e?u.charAt(c):s:e?u.slice(c,c+2):(s-55296<<10)+(l-56320)+65536}};e.exports={codeAt:s(!1),charAt:s(!0)}},73154:function(e,n,r){var a=r(58210),i=Math.max,o=Math.min;e.exports=function(e,n){var r=a(e);return r<0?i(r+n,0):o(r,n)}},97418:function(e,n,r){var a=r(15338),i=r(39899);e.exports=function(e){return a(i(e))}},58210:function(e){var n=Math.ceil,r=Math.floor;e.exports=function(e){var a=+e;return a!=a||0===a?0:(a>0?r:n)(a)}},8924:function(e,n,r){var a=r(58210),i=Math.min;e.exports=function(e){return e>0?i(a(e),9007199254740991):0}},80362:function(e,n,r){var a=r(39899);e.exports=function(e){return Object(a(e))}},22184:function(e,n,r){var a=r(72852),i=r(11874),o=r(66404),s=r(79954),l=r(30359)("toPrimitive");e.exports=function(e,n){if(!a(e)||i(e))return e;var r,u=o(e,l);if(u){if(void 0===n&&(n="default"),r=u.call(e,n),!a(r)||i(r))return r;throw TypeError("Can't convert object to primitive value")}return void 0===n&&(n="number"),s(e,n)}},42932:function(e,n,r){var a=r(22184),i=r(11874);e.exports=function(e){var n=a(e,"string");return i(n)?n:String(n)}},85943:function(e,n,r){var a=r(30359)("toStringTag"),i={};i[a]="z",e.exports="[object z]"===String(i)},75807:function(e,n,r){var a=r(81153);e.exports=function(e){if("Symbol"===a(e))throw TypeError("Cannot convert a Symbol value to a string");return String(e)}},54347:function(e){e.exports=function(e){try{return String(e)}catch(n){return"Object"}}},91511:function(e){var n=0,r=Math.random();e.exports=function(e){return"Symbol("+String(void 0===e?"":e)+")_"+(++n+r).toString(36)}},75563:function(e,n,r){var a=r(83774);e.exports=a&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},30359:function(e,n,r){var a=r(53392),i=r(28014),o=r(67728),s=r(91511),l=r(83774),u=r(75563),c=i("wks"),p=a.Symbol,m=u?p:p&&p.withoutSetter||s;e.exports=function(e){return o(c,e)&&(l||"string"==typeof c[e])||(l&&o(p,e)?c[e]=p[e]:c[e]=m("Symbol."+e)),c[e]}},20542:function(e,n,r){var a=r(81839),i=Date.prototype,o="Invalid Date",s="toString",l=i[s],u=i.getTime;String(new Date(NaN))!=o&&a(i,s,function(){var e=u.call(this);return e==e?l.call(this):o})},80936:function(e,n,r){var a=r(81846),i=r(61336).EXISTS,o=r(29311).f,s=Function.prototype,l=s.toString,u=/^\s*function ([^ (]*)/;a&&!i&&o(s,"name",{configurable:!0,get:function(){try{return l.call(this).match(u)[1]}catch(e){return""}}})},97331:function(e,n,r){var a=r(85943),i=r(81839),o=r(15609);a||i(Object.prototype,"toString",o,{unsafe:!0})},59103:function(e,n,r){"use strict";var a=r(58643),i=r(60974);a({target:"RegExp",proto:!0,forced:/./.exec!==i},{exec:i})},7842:function(e,n,r){"use strict";var a=r(61336).PROPER,i=r(81839),o=r(13533),s=r(75807),l=r(65905),u=r(7246),c="toString",p=RegExp.prototype,m=p[c],d=l(function(){return"/a/b"!=m.call({source:"a",flags:"b"})}),h=a&&m.name!=c;(d||h)&&i(RegExp.prototype,c,function(){var e=o(this),n=s(e.source),r=e.flags,a=s(void 0===r&&e instanceof RegExp&&!("flags"in p)?u.call(e):r);return"/"+n+"/"+a},{unsafe:!0})},88085:function(e,n,r){"use strict";var a=r(42758),i=r(65905),o=r(13533),s=r(4015),l=r(58210),u=r(8924),c=r(75807),p=r(39899),m=r(84179),d=r(66404),h=r(10860),f=r(31336),g=r(30359)("replace"),b=Math.max,k=Math.min,y="$0"==="a".replace(/./,"$0"),v=!!/./[g]&&""===/./[g]("a","$0"),E=!i(function(){var e=/./;return e.exec=function(){var e=[];return e.groups={a:"7"},e},"7"!=="".replace(e,"$")});a("replace",function(e,n,r){var a=v?"$":"$0";return[function(e,r){var a=p(this),i=void 0==e?void 0:d(e,g);return i?i.call(e,a,r):n.call(c(a),e,r)},function(e,i){var p=o(this),d=c(e);if("string"==typeof i&&-1===i.indexOf(a)&&-1===i.indexOf("$<")){var g=r(n,p,d,i);if(g.done)return g.value}var y=s(i);y||(i=c(i));var v=p.global;if(v){var E=p.unicode;p.lastIndex=0}for(var T=[];;){var _=f(p,d);if(null===_||(T.push(_),!v))break;""===c(_[0])&&(p.lastIndex=m(d,u(p.lastIndex),E))}for(var x="",w=0,A=0;A=w&&(x+=d.slice(w,C)+I,w=C+S.length)}return x+d.slice(w)}]},!E||!y||v)},24740:function(e){"use strict";var n=Object.prototype.hasOwnProperty,r=Object.prototype.toString,a=Object.defineProperty,i=Object.getOwnPropertyDescriptor,o=function(e){return"function"==typeof Array.isArray?Array.isArray(e):"[object Array]"===r.call(e)},s=function(e){if(!e||"[object Object]"!==r.call(e))return!1;var a,i=n.call(e,"constructor"),o=e.constructor&&e.constructor.prototype&&n.call(e.constructor.prototype,"isPrototypeOf");if(e.constructor&&!i&&!o)return!1;for(a in e);return void 0===a||n.call(e,a)},l=function(e,n){a&&"__proto__"===n.name?a(e,n.name,{enumerable:!0,configurable:!0,value:n.newValue,writable:!0}):e[n.name]=n.newValue},u=function(e,r){if("__proto__"===r){if(!n.call(e,r))return;if(i)return i(e,r).value}return e[r]};e.exports=function e(){var n,r,a,i,c,p,m=arguments[0],d=1,h=arguments.length,f=!1;for("boolean"==typeof m&&(f=m,m=arguments[1]||{},d=2),(null==m||"object"!=typeof m&&"function"!=typeof m)&&(m={});d0?parseInt(r):null}(),n){case"b":c+=parseInt(d(),10).toString(2);break;case"c":"string"==typeof(r=d())||r instanceof String?c+=r:c+=String.fromCharCode(parseInt(r,10));break;case"d":c+=parseInt(d(),10);break;case"f":a=String(parseFloat(d()).toFixed(i||6)),c+=m?a:a.replace(/^0/,"");break;case"j":c+=JSON.stringify(d());break;case"o":c+="0"+parseInt(d(),10).toString(8);break;case"s":c+=d();break;case"x":c+="0x"+parseInt(d(),10).toString(16);break;case"X":c+="0x"+parseInt(d(),10).toString(16).toUpperCase();break;default:c+=n}else"%"===n?p=!0:c+=n;return c}(n=e.exports=r).format=r,n.vsprintf=function(e,n){return r.apply(null,[e].concat(n))},"undefined"!=typeof console&&"function"==typeof console.log&&(n.printf=function(){console.log(r.apply(null,arguments))})}()},37265:function(e,n,r){"use strict";r.d(n,{K:function(){return a},k:function(){return i}});var a=function(){},i=function(){}},84251:function(e,n,r){"use strict";var a=r(44675);function i(e){return"object"!=typeof e||"toString"in e?e:Object.prototype.toString.call(e).slice(8,-1)}Object.defineProperty(n,"__esModule",{value:!0});var o="object"==typeof a;function s(e,n){if(!e){if(o)throw Error("Invariant failed");throw Error(n())}}n.invariant=s;var l=Object.prototype.hasOwnProperty,u=Array.prototype.splice,c=Object.prototype.toString;function p(e){return c.call(e).slice(8,-1)}var m=Object.assign||function(e,n){return d(n).forEach(function(r){l.call(n,r)&&(e[r]=n[r])}),e},d="function"==typeof Object.getOwnPropertySymbols?function(e){return Object.keys(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.keys(e)};function h(e){return Array.isArray(e)?m(e.constructor(e.length),e):"Map"===p(e)?new Map(e):"Set"===p(e)?new Set(e):e&&"object"==typeof e?m(Object.create(Object.getPrototypeOf(e)),e):e}var f=function(){function e(){this.commands=m({},g),this.update=this.update.bind(this),this.update.extend=this.extend=this.extend.bind(this),this.update.isEquals=function(e,n){return e===n},this.update.newContext=function(){return new e().update}}return Object.defineProperty(e.prototype,"isEquals",{get:function(){return this.update.isEquals},set:function(e){this.update.isEquals=e},enumerable:!0,configurable:!0}),e.prototype.extend=function(e,n){this.commands[e]=n},e.prototype.update=function(e,n){var r=this,a="function"==typeof n?{$apply:n}:n;Array.isArray(e)&&Array.isArray(a)||s(!Array.isArray(a),function(){return"update(): You provided an invalid spec to update(). The spec may not contain an array except as the value of $set, $push, $unshift, $splice or any custom command allowing an array value."}),s("object"==typeof a&&null!==a,function(){return"update(): You provided an invalid spec to update(). The spec and every included key path must be plain objects containing one of the following commands: "+Object.keys(r.commands).join(", ")+"."});var i=e;return d(a).forEach(function(n){if(l.call(r.commands,n)){var o=e===i;i=r.commands[n](a[n],i,a,e),o&&r.isEquals(i,e)&&(i=e)}else{var s="Map"===p(e)?r.update(e.get(n),a[n]):r.update(e[n],a[n]),u="Map"===p(i)?i.get(n):i[n];r.isEquals(s,u)&&(void 0!==s||l.call(e,n))||(i===e&&(i=h(e)),"Map"===p(i)?i.set(n,s):i[n]=s)}}),i},e}();n.Context=f;var g={$push:function(e,n,r){return k(n,r,"$push"),e.length?n.concat(e):n},$unshift:function(e,n,r){return k(n,r,"$unshift"),e.length?e.concat(n):n},$splice:function(e,n,r,a){var o,l;return o=n,l=r,s(Array.isArray(o),function(){return"Expected $splice target to be an array; got "+i(o)}),v(l.$splice),e.forEach(function(e){v(e),n===a&&e.length&&(n=h(a)),u.apply(n,e)}),n},$set:function(e,n,r){var a;return s(1===Object.keys(a=r).length,function(){return"Cannot have more than one key in an object with $set"}),e},$toggle:function(e,n){y(e,"$toggle");var r=e.length?h(n):n;return e.forEach(function(e){r[e]=!n[e]}),r},$unset:function(e,n,r,a){return y(e,"$unset"),e.forEach(function(e){Object.hasOwnProperty.call(n,e)&&(n===a&&(n=h(a)),delete n[e])}),n},$add:function(e,n,r,a){return E(n,"$add"),y(e,"$add"),"Map"===p(n)?e.forEach(function(e){var r=e[0],i=e[1];n===a&&n.get(r)!==i&&(n=h(a)),n.set(r,i)}):e.forEach(function(e){n!==a||n.has(e)||(n=h(a)),n.add(e)}),n},$remove:function(e,n,r,a){return E(n,"$remove"),y(e,"$remove"),e.forEach(function(e){n===a&&n.has(e)&&(n=h(a)),n.delete(e)}),n},$merge:function(e,n,r,a){var o,l;return o=n,s((l=e)&&"object"==typeof l,function(){return"update(): $merge expects a spec of type 'object'; got "+i(l)}),s(o&&"object"==typeof o,function(){return"update(): $merge expects a target of type 'object'; got "+i(o)}),d(e).forEach(function(r){e[r]!==n[r]&&(n===a&&(n=h(a)),n[r]=e[r])}),n},$apply:function(e,n){var r;return s("function"==typeof(r=e),function(){return"update(): expected spec of $apply to be a function; got "+i(r)+"."}),e(n)}},b=new f;function k(e,n,r){s(Array.isArray(e),function(){return"update(): expected target of "+i(r)+" to be an array; got "+i(e)+"."}),y(n[r],r)}function y(e,n){s(Array.isArray(e),function(){return"update(): expected spec of "+i(n)+" to be an array; got "+i(e)+". Did you forget to wrap your parameter in an array?"})}function v(e){s(Array.isArray(e),function(){return"update(): expected spec of $splice to be an array of arrays; got "+i(e)+". Did you forget to wrap your parameters in an array?"})}function E(e,n){var r=p(e);s("Map"===r||"Set"===r,function(){return"update(): "+i(n)+" expects a target of type Set or Map; got "+i(r)})}n.isEquals=b.update.isEquals,n.extend=b.extend,n.default=b.update,n.default.default=e.exports=m(n.default,n)},29058:function(e){var n=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,r=/\n/g,a=/^\s*/,i=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,o=/^:\s*/,s=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,l=/^[;\s]*/,u=/^\s+|\s+$/g;function c(e){return e?e.replace(u,""):""}e.exports=function(e,u){if("string"!=typeof e)throw TypeError("First argument must be a string");if(!e)return[];u=u||{};var p=1,m=1;function d(e){var n=e.match(r);n&&(p+=n.length);var a=e.lastIndexOf("\n");m=~a?e.length-a:m+e.length}function h(){var e={line:p,column:m};return function(n){return n.position=new f(e),y(),n}}function f(e){this.start=e,this.end={line:p,column:m},this.source=u.source}f.prototype.content=e;var g=[];function b(n){var r=Error(u.source+":"+p+":"+m+": "+n);if(r.reason=n,r.filename=u.source,r.line=p,r.column=m,r.source=e,u.silent)g.push(r);else throw r}function k(n){var r=n.exec(e);if(r){var a=r[0];return d(a),e=e.slice(a.length),r}}function y(){k(a)}function v(e){var n;for(e=e||[];n=E();)!1!==n&&e.push(n);return e}function E(){var n=h();if("/"==e.charAt(0)&&"*"==e.charAt(1)){for(var r=2;""!=e.charAt(r)&&("*"!=e.charAt(r)||"/"!=e.charAt(r+1));)++r;if(r+=2,""===e.charAt(r-1))return b("End of comment missing");var a=e.slice(2,r-2);return m+=2,d(a),e=e.slice(r),m+=2,n({type:"comment",comment:a})}}function T(){var e=h(),r=k(i);if(r){if(E(),!k(o))return b("property missing ':'");var a=k(s),u=e({type:"declaration",property:c(r[0].replace(n,"")),value:a?c(a[0].replace(n,"")):""});return k(l),u}}return y(),function(){var e,n=[];for(v(n);e=T();)!1!==e&&(n.push(e),v(n));return n}()}},38165:function(e){/*! + * Determine if an object is a Buffer + * + * @author Feross Aboukhadijeh + * @license MIT + */ e.exports=function(e){return null!=e&&null!=e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}},66293:function(e,n,r){var a=r(73401).Symbol;e.exports=a},67631:function(e){e.exports=function(e,n){for(var r=-1,a=null==e?0:e.length,i=Array(a);++r=n?e:n)),e}},66304:function(e,n,r){var a=r(5890),i=r(1796);e.exports=function(e,n,r,o){var s=e.length;for((r=a(r))<0&&(r=-r>s?0:s+r),(o=void 0===o||o>s?s:a(o))<0&&(o+=s),o=r>o?0:i(o);r=r(a,i)&&ei?0:i+n),(r=r>i?i:r)<0&&(r+=i),i=n>r?0:r-n>>>0,n>>>=0;for(var o=Array(i);++a=i?e:a(e,n,r)}},48790:function(e,n,r){var a=r(87493),i=r(98030),o=r(59901),s=r(44091);e.exports=function(e){return function(n){n=s(n);var r=i(n)?o(n):void 0,l=r?r[0]:n.charAt(0),u=r?a(r,1).join(""):n.slice(1);return l[e]()+u}}},40151:function(e,n,r){var a="object"==typeof r.g&&r.g&&r.g.Object===Object&&r.g;e.exports=a},46945:function(e,n,r){var a=r(66293),i=Object.prototype,o=i.hasOwnProperty,s=i.toString,l=a?a.toStringTag:void 0;e.exports=function(e){var n=o.call(e,l),r=e[l];try{e[l]=void 0;var a=!0}catch(i){}var u=s.call(e);return a&&(n?e[l]=r:delete e[l]),u}},98030:function(e){var n=RegExp("[\\u200d\ud800-\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");e.exports=function(e){return n.test(e)}},30911:function(e){var n=/^(?:0|[1-9]\d*)$/;e.exports=function(e,r){var a=typeof e;return!!(r=null==r?9007199254740991:r)&&("number"==a||"symbol"!=a&&n.test(e))&&e>-1&&e%1==0&&e=n||r<0||b&&a>=p}function E(){var e,r,a,o,s=i();if(v(s))return T(s);d=setTimeout(E,(r=s-h,a=s-f,o=n-r,b?l(o,p-a):o))}function T(e){return(d=void 0,k&&u)?y(e):(u=c=void 0,m)}function _(){var e,r=i(),a=v(r);if(u=arguments,c=this,h=r,a){if(void 0===d)return f=e=h,d=setTimeout(E,n),g?y(e):m;if(b)return clearTimeout(d),d=setTimeout(E,n),y(h)}return void 0===d&&(d=setTimeout(E,n)),m}return n=o(n)||0,a(r)&&(g=!!r.leading,p=(b="maxWait"in r)?s(o(r.maxWait)||0,n):p,k="trailing"in r?!!r.trailing:k),_.cancel=function(){void 0!==d&&clearTimeout(d),f=0,u=h=c=d=void 0},_.flush=function(){return void 0===d?m:T(i())},_}},3284:function(e){e.exports=function(e,n){return e===n||e!=e&&n!=n}},7361:function(e,n,r){var a=r(66304),i=r(57209);e.exports=function(e,n,r,o){var s=null==e?0:e.length;return s?(r&&"number"!=typeof r&&i(e,n,r)&&(r=0,o=s),a(e,n,r,o)):[]}},68483:function(e,n,r){var a=r(25987),i=r(73640),o=r(67948);e.exports=function(e,n,r){return n=i(n),void 0===r?(r=n,n=0):r=i(r),e=o(e),a(e,n,r)}},2428:function(e){var n=Array.isArray;e.exports=n},71701:function(e,n,r){var a=r(7419),i=r(6705);e.exports=function(e){return null!=e&&i(e.length)&&!a(e)}},7419:function(e,n,r){var a=r(57398),i=r(6627);e.exports=function(e){if(!i(e))return!1;var n=a(e);return"[object Function]"==n||"[object GeneratorFunction]"==n||"[object AsyncFunction]"==n||"[object Proxy]"==n}},6705:function(e){e.exports=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}},6627:function(e){e.exports=function(e){var n=typeof e;return null!=e&&("object"==n||"function"==n)}},89109:function(e){e.exports=function(e){return null!=e&&"object"==typeof e}},42848:function(e,n,r){var a=r(57398),i=r(89109);e.exports=function(e){return"symbol"==typeof e||i(e)&&"[object Symbol]"==a(e)}},85365:function(e,n,r){var a=r(73401),i=function(){return a.Date.now()};e.exports=i},73640:function(e,n,r){var a=r(67948),i=1/0;e.exports=function(e){return e?(e=a(e))===i||e===-i?(e<0?-1:1)*17976931348623157e292:e==e?e:0:0===e?e:0}},5890:function(e,n,r){var a=r(73640);e.exports=function(e){var n=a(e),r=n%1;return n==n?r?n-r:n:0}},1796:function(e,n,r){var a=r(70331),i=r(5890);e.exports=function(e){return e?a(i(e),0,4294967295):0}},67948:function(e,n,r){var a=r(33897),i=r(6627),o=r(42848),s=0/0,l=/^[-+]0x[0-9a-f]+$/i,u=/^0b[01]+$/i,c=/^0o[0-7]+$/i,p=parseInt;e.exports=function(e){if("number"==typeof e)return e;if(o(e))return s;if(i(e)){var n="function"==typeof e.valueOf?e.valueOf():e;e=i(n)?n+"":n}if("string"!=typeof e)return 0===e?e:+e;e=a(e);var r=u.test(e);return r||c.test(e)?p(e.slice(2),r?2:8):l.test(e)?s:+e}},44091:function(e,n,r){var a=r(17185);e.exports=function(e){return null==e?"":a(e)}},57647:function(e,n,r){var a=r(48790)("toUpperCase");e.exports=a},60348:function(e){var n="undefined"!=typeof window?window:self;e.exports=n.crypto||n.msCrypto},64876:function(e,n,r){e.exports=function(e){if(!e)return Math.random;var n=new Uint32Array(1);return function(){return e.getRandomValues(n)[0]/4294967296}}(r(60348))},95295:function(e,n,r){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var a=r(86191).Z;Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e,n){var r=s.default,o=(null==n?void 0:n.suspense)?{}:{loading:function(e){return e.error,e.isLoading,e.pastDelay,null}};if(a(e,Promise)?o.loader=function(){return e}:"function"==typeof e?o.loader=e:"object"==typeof e&&(o=i({},o,e)),(o=i({},o,n)).suspense&&(delete o.ssr,delete o.loading),o.loadableGenerated&&delete(o=i({},o,o.loadableGenerated)).loadableGenerated,"boolean"==typeof o.ssr&&!o.suspense){if(!o.ssr)return delete o.ssr,l(r,o);delete o.ssr}return r(o)},n.noSSR=l;var i=r(17858).Z,o=r(16922).Z,s=(o(r(70079)),o(r(90255)));function l(e,n){return delete n.webpack,delete n.modules,e(n)}("function"==typeof n.default||"object"==typeof n.default&&null!==n.default)&&void 0===n.default.__esModule&&(Object.defineProperty(n.default,"__esModule",{value:!0}),Object.assign(n.default,n),e.exports=n.default)},19612:function(e,n,r){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.LoadableContext=void 0;var a=(0,r(16922).Z)(r(70079)).default.createContext(null);n.LoadableContext=a},90255:function(e,n,r){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var a=r(43571).Z,i=r(37746).Z;Object.defineProperty(n,"__esModule",{value:!0}),n.default=void 0;var o=r(17858).Z,s=(0,r(16922).Z)(r(70079)),l=r(19612),u=r(70079).useSyncExternalStore,c=[],p=[],m=!1;function d(e){var n=e(),r={loading:!0,loaded:null,error:null};return r.promise=n.then(function(e){return r.loading=!1,r.loaded=e,e}).catch(function(e){throw r.loading=!1,r.error=e,e}),r}var h=function(){function e(n,r){a(this,e),this._loadFn=n,this._opts=r,this._callbacks=new Set,this._delay=null,this._timeout=null,this.retry()}return i(e,[{key:"promise",value:function(){return this._res.promise}},{key:"retry",value:function(){var e=this;this._clearTimeouts(),this._res=this._loadFn(this._opts.loader),this._state={pastDelay:!1,timedOut:!1};var n=this._res,r=this._opts;n.loading&&("number"==typeof r.delay&&(0===r.delay?this._state.pastDelay=!0:this._delay=setTimeout(function(){e._update({pastDelay:!0})},r.delay)),"number"==typeof r.timeout&&(this._timeout=setTimeout(function(){e._update({timedOut:!0})},r.timeout))),this._res.promise.then(function(){e._update({}),e._clearTimeouts()}).catch(function(n){e._update({}),e._clearTimeouts()}),this._update({})}},{key:"_update",value:function(e){this._state=o({},this._state,{error:this._res.error,loaded:this._res.loaded,loading:this._res.loading},e),this._callbacks.forEach(function(e){return e()})}},{key:"_clearTimeouts",value:function(){clearTimeout(this._delay),clearTimeout(this._timeout)}},{key:"getCurrentValue",value:function(){return this._state}},{key:"subscribe",value:function(e){var n=this;return this._callbacks.add(e),function(){n._callbacks.delete(e)}}}]),e}();function f(e){return function(e,n){var r=function(){if(!f){var n=new h(e,d);f={getCurrentValue:n.getCurrentValue.bind(n),subscribe:n.subscribe.bind(n),retry:n.retry.bind(n),promise:n.promise.bind(n)}}return f.promise()},a=function(){r();var e=s.default.useContext(l.LoadableContext);e&&Array.isArray(d.modules)&&d.modules.forEach(function(n){e(n)})},i=function(e,n){a();var r=u(f.subscribe,f.getCurrentValue,f.getCurrentValue);return s.default.useImperativeHandle(n,function(){return{retry:f.retry}},[]),s.default.useMemo(function(){var n;return r.loading||r.error?s.default.createElement(d.loading,{isLoading:r.loading,pastDelay:r.pastDelay,timedOut:r.timedOut,error:r.error,retry:f.retry}):r.loaded?s.default.createElement((n=r.loaded)&&n.__esModule?n.default:n,e):null},[e,r])},c=function(e,n){return a(),s.default.createElement(d.lazy,o({},e,{ref:n}))},d=Object.assign({loader:null,loading:null,delay:200,timeout:null,webpack:null,modules:null,suspense:!1},n);d.suspense&&(d.lazy=s.default.lazy(d.loader));var f=null;if(!m){var g=d.webpack?d.webpack():d.modules;g&&p.push(function(e){var n=!0,a=!1,i=void 0;try{for(var o,s=g[Symbol.iterator]();!(n=(o=s.next()).done);n=!0){var l=o.value;if(-1!==e.indexOf(l))return r()}}catch(u){a=!0,i=u}finally{try{n||null==s.return||s.return()}finally{if(a)throw i}}})}var b=d.suspense?c:i;return b.preload=function(){return r()},b.displayName="LoadableComponent",s.default.forwardRef(b)}(d,e)}function g(e,n){for(var r=[];e.length;){var a=e.pop();r.push(a(n))}return Promise.all(r).then(function(){if(e.length)return g(e,n)})}f.preloadAll=function(){return new Promise(function(e,n){g(c).then(e,n)})},f.preloadReady=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return new Promise(function(n){var r=function(){return m=!0,n()};g(p,e).then(r,r)})},window.__NEXT_PRELOADREADY=f.preloadReady,n.default=f},97374:function(e,n,r){e.exports=r(95295)},76743:function(e,n,r){"use strict";let{DOCUMENT_MODE:a}=r(28040),i="html",o=["+//silmaril//dtd html pro v0r11 19970101//","-//as//dtd html 3.0 aswedit + extensions//","-//advasoft ltd//dtd html 3.0 aswedit + extensions//","-//ietf//dtd html 2.0 level 1//","-//ietf//dtd html 2.0 level 2//","-//ietf//dtd html 2.0 strict level 1//","-//ietf//dtd html 2.0 strict level 2//","-//ietf//dtd html 2.0 strict//","-//ietf//dtd html 2.0//","-//ietf//dtd html 2.1e//","-//ietf//dtd html 3.0//","-//ietf//dtd html 3.2 final//","-//ietf//dtd html 3.2//","-//ietf//dtd html 3//","-//ietf//dtd html level 0//","-//ietf//dtd html level 1//","-//ietf//dtd html level 2//","-//ietf//dtd html level 3//","-//ietf//dtd html strict level 0//","-//ietf//dtd html strict level 1//","-//ietf//dtd html strict level 2//","-//ietf//dtd html strict level 3//","-//ietf//dtd html strict//","-//ietf//dtd html//","-//metrius//dtd metrius presentational//","-//microsoft//dtd internet explorer 2.0 html strict//","-//microsoft//dtd internet explorer 2.0 html//","-//microsoft//dtd internet explorer 2.0 tables//","-//microsoft//dtd internet explorer 3.0 html strict//","-//microsoft//dtd internet explorer 3.0 html//","-//microsoft//dtd internet explorer 3.0 tables//","-//netscape comm. corp.//dtd html//","-//netscape comm. corp.//dtd strict html//","-//o'reilly and associates//dtd html 2.0//","-//o'reilly and associates//dtd html extended 1.0//","-//o'reilly and associates//dtd html extended relaxed 1.0//","-//sq//dtd html 2.0 hotmetal + extensions//","-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//","-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//","-//spyglass//dtd html 2.0 extended//","-//sun microsystems corp.//dtd hotjava html//","-//sun microsystems corp.//dtd hotjava strict html//","-//w3c//dtd html 3 1995-03-24//","-//w3c//dtd html 3.2 draft//","-//w3c//dtd html 3.2 final//","-//w3c//dtd html 3.2//","-//w3c//dtd html 3.2s draft//","-//w3c//dtd html 4.0 frameset//","-//w3c//dtd html 4.0 transitional//","-//w3c//dtd html experimental 19960712//","-//w3c//dtd html experimental 970421//","-//w3c//dtd w3 html//","-//w3o//dtd w3 html 3.0//","-//webtechs//dtd mozilla html 2.0//","-//webtechs//dtd mozilla html//"],s=o.concat(["-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"]),l=["-//w3o//dtd w3 html strict 3.0//en//","-/w3c/dtd html 4.0 transitional/en","html"],u=["-//w3c//dtd xhtml 1.0 frameset//","-//w3c//dtd xhtml 1.0 transitional//"],c=u.concat(["-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"]);function p(e){let n=-1!==e.indexOf('"')?"'":'"';return n+e+n}function m(e,n){for(let r=0;r-1)return a.QUIRKS;let p=null===n?s:o;if(m(r,p))return a.QUIRKS;if(m(r,p=null===n?u:c))return a.LIMITED_QUIRKS}return a.NO_QUIRKS},n.serializeContent=function(e,n,r){let a="!DOCTYPE ";return e&&(a+=e),n?a+=" PUBLIC "+p(n):r&&(a+=" SYSTEM"),null!==r&&(a+=" "+p(r)),a}},97700:function(e){"use strict";e.exports={controlCharacterInInputStream:"control-character-in-input-stream",noncharacterInInputStream:"noncharacter-in-input-stream",surrogateInInputStream:"surrogate-in-input-stream",nonVoidHtmlElementStartTagWithTrailingSolidus:"non-void-html-element-start-tag-with-trailing-solidus",endTagWithAttributes:"end-tag-with-attributes",endTagWithTrailingSolidus:"end-tag-with-trailing-solidus",unexpectedSolidusInTag:"unexpected-solidus-in-tag",unexpectedNullCharacter:"unexpected-null-character",unexpectedQuestionMarkInsteadOfTagName:"unexpected-question-mark-instead-of-tag-name",invalidFirstCharacterOfTagName:"invalid-first-character-of-tag-name",unexpectedEqualsSignBeforeAttributeName:"unexpected-equals-sign-before-attribute-name",missingEndTagName:"missing-end-tag-name",unexpectedCharacterInAttributeName:"unexpected-character-in-attribute-name",unknownNamedCharacterReference:"unknown-named-character-reference",missingSemicolonAfterCharacterReference:"missing-semicolon-after-character-reference",unexpectedCharacterAfterDoctypeSystemIdentifier:"unexpected-character-after-doctype-system-identifier",unexpectedCharacterInUnquotedAttributeValue:"unexpected-character-in-unquoted-attribute-value",eofBeforeTagName:"eof-before-tag-name",eofInTag:"eof-in-tag",missingAttributeValue:"missing-attribute-value",missingWhitespaceBetweenAttributes:"missing-whitespace-between-attributes",missingWhitespaceAfterDoctypePublicKeyword:"missing-whitespace-after-doctype-public-keyword",missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers:"missing-whitespace-between-doctype-public-and-system-identifiers",missingWhitespaceAfterDoctypeSystemKeyword:"missing-whitespace-after-doctype-system-keyword",missingQuoteBeforeDoctypePublicIdentifier:"missing-quote-before-doctype-public-identifier",missingQuoteBeforeDoctypeSystemIdentifier:"missing-quote-before-doctype-system-identifier",missingDoctypePublicIdentifier:"missing-doctype-public-identifier",missingDoctypeSystemIdentifier:"missing-doctype-system-identifier",abruptDoctypePublicIdentifier:"abrupt-doctype-public-identifier",abruptDoctypeSystemIdentifier:"abrupt-doctype-system-identifier",cdataInHtmlContent:"cdata-in-html-content",incorrectlyOpenedComment:"incorrectly-opened-comment",eofInScriptHtmlCommentLikeText:"eof-in-script-html-comment-like-text",eofInDoctype:"eof-in-doctype",nestedComment:"nested-comment",abruptClosingOfEmptyComment:"abrupt-closing-of-empty-comment",eofInComment:"eof-in-comment",incorrectlyClosedComment:"incorrectly-closed-comment",eofInCdata:"eof-in-cdata",absenceOfDigitsInNumericCharacterReference:"absence-of-digits-in-numeric-character-reference",nullCharacterReference:"null-character-reference",surrogateCharacterReference:"surrogate-character-reference",characterReferenceOutsideUnicodeRange:"character-reference-outside-unicode-range",controlCharacterReference:"control-character-reference",noncharacterCharacterReference:"noncharacter-character-reference",missingWhitespaceBeforeDoctypeName:"missing-whitespace-before-doctype-name",missingDoctypeName:"missing-doctype-name",invalidCharacterSequenceAfterDoctypeName:"invalid-character-sequence-after-doctype-name",duplicateAttribute:"duplicate-attribute",nonConformingDoctype:"non-conforming-doctype",missingDoctype:"missing-doctype",misplacedDoctype:"misplaced-doctype",endTagWithoutMatchingOpenElement:"end-tag-without-matching-open-element",closingOfElementWithOpenChildElements:"closing-of-element-with-open-child-elements",disallowedContentInNoscriptInHead:"disallowed-content-in-noscript-in-head",openElementsLeftAfterEof:"open-elements-left-after-eof",abandonedHeadElementChild:"abandoned-head-element-child",misplacedStartTagForHeadElement:"misplaced-start-tag-for-head-element",nestedNoscriptInHead:"nested-noscript-in-head",eofInElementThatCanContainOnlyText:"eof-in-element-that-can-contain-only-text"}},11093:function(e,n,r){"use strict";let a=r(1672),i=r(28040),o=i.TAG_NAMES,s=i.NAMESPACES,l=i.ATTRS,u={TEXT_HTML:"text/html",APPLICATION_XML:"application/xhtml+xml"},c={attributename:"attributeName",attributetype:"attributeType",basefrequency:"baseFrequency",baseprofile:"baseProfile",calcmode:"calcMode",clippathunits:"clipPathUnits",diffuseconstant:"diffuseConstant",edgemode:"edgeMode",filterunits:"filterUnits",glyphref:"glyphRef",gradienttransform:"gradientTransform",gradientunits:"gradientUnits",kernelmatrix:"kernelMatrix",kernelunitlength:"kernelUnitLength",keypoints:"keyPoints",keysplines:"keySplines",keytimes:"keyTimes",lengthadjust:"lengthAdjust",limitingconeangle:"limitingConeAngle",markerheight:"markerHeight",markerunits:"markerUnits",markerwidth:"markerWidth",maskcontentunits:"maskContentUnits",maskunits:"maskUnits",numoctaves:"numOctaves",pathlength:"pathLength",patterncontentunits:"patternContentUnits",patterntransform:"patternTransform",patternunits:"patternUnits",pointsatx:"pointsAtX",pointsaty:"pointsAtY",pointsatz:"pointsAtZ",preservealpha:"preserveAlpha",preserveaspectratio:"preserveAspectRatio",primitiveunits:"primitiveUnits",refx:"refX",refy:"refY",repeatcount:"repeatCount",repeatdur:"repeatDur",requiredextensions:"requiredExtensions",requiredfeatures:"requiredFeatures",specularconstant:"specularConstant",specularexponent:"specularExponent",spreadmethod:"spreadMethod",startoffset:"startOffset",stddeviation:"stdDeviation",stitchtiles:"stitchTiles",surfacescale:"surfaceScale",systemlanguage:"systemLanguage",tablevalues:"tableValues",targetx:"targetX",targety:"targetY",textlength:"textLength",viewbox:"viewBox",viewtarget:"viewTarget",xchannelselector:"xChannelSelector",ychannelselector:"yChannelSelector",zoomandpan:"zoomAndPan"},p={"xlink:actuate":{prefix:"xlink",name:"actuate",namespace:s.XLINK},"xlink:arcrole":{prefix:"xlink",name:"arcrole",namespace:s.XLINK},"xlink:href":{prefix:"xlink",name:"href",namespace:s.XLINK},"xlink:role":{prefix:"xlink",name:"role",namespace:s.XLINK},"xlink:show":{prefix:"xlink",name:"show",namespace:s.XLINK},"xlink:title":{prefix:"xlink",name:"title",namespace:s.XLINK},"xlink:type":{prefix:"xlink",name:"type",namespace:s.XLINK},"xml:base":{prefix:"xml",name:"base",namespace:s.XML},"xml:lang":{prefix:"xml",name:"lang",namespace:s.XML},"xml:space":{prefix:"xml",name:"space",namespace:s.XML},xmlns:{prefix:"",name:"xmlns",namespace:s.XMLNS},"xmlns:xlink":{prefix:"xmlns",name:"xlink",namespace:s.XMLNS}},m=n.SVG_TAG_NAMES_ADJUSTMENT_MAP={altglyph:"altGlyph",altglyphdef:"altGlyphDef",altglyphitem:"altGlyphItem",animatecolor:"animateColor",animatemotion:"animateMotion",animatetransform:"animateTransform",clippath:"clipPath",feblend:"feBlend",fecolormatrix:"feColorMatrix",fecomponenttransfer:"feComponentTransfer",fecomposite:"feComposite",feconvolvematrix:"feConvolveMatrix",fediffuselighting:"feDiffuseLighting",fedisplacementmap:"feDisplacementMap",fedistantlight:"feDistantLight",feflood:"feFlood",fefunca:"feFuncA",fefuncb:"feFuncB",fefuncg:"feFuncG",fefuncr:"feFuncR",fegaussianblur:"feGaussianBlur",feimage:"feImage",femerge:"feMerge",femergenode:"feMergeNode",femorphology:"feMorphology",feoffset:"feOffset",fepointlight:"fePointLight",fespecularlighting:"feSpecularLighting",fespotlight:"feSpotLight",fetile:"feTile",feturbulence:"feTurbulence",foreignobject:"foreignObject",glyphref:"glyphRef",lineargradient:"linearGradient",radialgradient:"radialGradient",textpath:"textPath"},d={[o.B]:!0,[o.BIG]:!0,[o.BLOCKQUOTE]:!0,[o.BODY]:!0,[o.BR]:!0,[o.CENTER]:!0,[o.CODE]:!0,[o.DD]:!0,[o.DIV]:!0,[o.DL]:!0,[o.DT]:!0,[o.EM]:!0,[o.EMBED]:!0,[o.H1]:!0,[o.H2]:!0,[o.H3]:!0,[o.H4]:!0,[o.H5]:!0,[o.H6]:!0,[o.HEAD]:!0,[o.HR]:!0,[o.I]:!0,[o.IMG]:!0,[o.LI]:!0,[o.LISTING]:!0,[o.MENU]:!0,[o.META]:!0,[o.NOBR]:!0,[o.OL]:!0,[o.P]:!0,[o.PRE]:!0,[o.RUBY]:!0,[o.S]:!0,[o.SMALL]:!0,[o.SPAN]:!0,[o.STRONG]:!0,[o.STRIKE]:!0,[o.SUB]:!0,[o.SUP]:!0,[o.TABLE]:!0,[o.TT]:!0,[o.U]:!0,[o.UL]:!0,[o.VAR]:!0};n.causesExit=function(e){let n=e.tagName,r=n===o.FONT&&(null!==a.getTokenAttr(e,l.COLOR)||null!==a.getTokenAttr(e,l.SIZE)||null!==a.getTokenAttr(e,l.FACE));return!!r||d[n]},n.adjustTokenMathMLAttrs=function(e){for(let n=0;n=55296&&e<=57343},n.isSurrogatePair=function(e){return e>=56320&&e<=57343},n.getSurrogatePairCodePoint=function(e,n){return(e-55296)*1024+9216+n},n.isControlCodePoint=function(e){return 32!==e&&10!==e&&13!==e&&9!==e&&12!==e&&e>=1&&e<=31||e>=127&&e<=159},n.isUndefinedCodePoint=function(e){return e>=64976&&e<=65007||r.indexOf(e)>-1}},71210:function(e,n,r){"use strict";let a=r(24592);e.exports=class extends a{constructor(e,n){super(e),this.posTracker=null,this.onParseError=n.onParseError}_setErrorLocation(e){e.startLine=e.endLine=this.posTracker.line,e.startCol=e.endCol=this.posTracker.col,e.startOffset=e.endOffset=this.posTracker.offset}_reportError(e){let n={code:e,startLine:-1,startCol:-1,startOffset:-1,endLine:-1,endCol:-1,endOffset:-1};this._setErrorLocation(n),this.onParseError(n)}_getOverriddenMethods(e){return{_err(n){e._reportError(n)}}}}},62951:function(e,n,r){"use strict";let a=r(71210),i=r(65319),o=r(84447),s=r(24592);e.exports=class extends a{constructor(e,n){super(e,n),this.opts=n,this.ctLoc=null,this.locBeforeToken=!1}_setErrorLocation(e){this.ctLoc&&(e.startLine=this.ctLoc.startLine,e.startCol=this.ctLoc.startCol,e.startOffset=this.ctLoc.startOffset,e.endLine=this.locBeforeToken?this.ctLoc.startLine:this.ctLoc.endLine,e.endCol=this.locBeforeToken?this.ctLoc.startCol:this.ctLoc.endCol,e.endOffset=this.locBeforeToken?this.ctLoc.startOffset:this.ctLoc.endOffset)}_getOverriddenMethods(e,n){return{_bootstrap(r,a){n._bootstrap.call(this,r,a),s.install(this.tokenizer,i,e.opts),s.install(this.tokenizer,o)},_processInputToken(r){e.ctLoc=r.location,n._processInputToken.call(this,r)},_err(n,r){e.locBeforeToken=r&&r.beforeToken,e._reportError(n)}}}}},49298:function(e,n,r){"use strict";let a=r(71210),i=r(4315),o=r(24592);e.exports=class extends a{constructor(e,n){super(e,n),this.posTracker=o.install(e,i),this.lastErrOffset=-1}_reportError(e){this.lastErrOffset!==this.posTracker.offset&&(this.lastErrOffset=this.posTracker.offset,super._reportError(e))}}},65319:function(e,n,r){"use strict";let a=r(71210),i=r(49298),o=r(24592);e.exports=class extends a{constructor(e,n){super(e,n);let r=o.install(e.preprocessor,i,n);this.posTracker=r.posTracker}}},69134:function(e,n,r){"use strict";let a=r(24592);e.exports=class extends a{constructor(e,n){super(e),this.onItemPop=n.onItemPop}_getOverriddenMethods(e,n){return{pop(){e.onItemPop(this.current),n.pop.call(this)},popAllUpToHtmlElement(){for(let r=this.stackTop;r>0;r--)e.onItemPop(this.items[r]);n.popAllUpToHtmlElement.call(this)},remove(r){e.onItemPop(this.current),n.remove.call(this,r)}}}}},66010:function(e,n,r){"use strict";let a=r(24592),i=r(1672),o=r(84447),s=r(69134),l=r(28040),u=l.TAG_NAMES;e.exports=class extends a{constructor(e){super(e),this.parser=e,this.treeAdapter=this.parser.treeAdapter,this.posTracker=null,this.lastStartTagToken=null,this.lastFosterParentingLocation=null,this.currentToken=null}_setStartLocation(e){let n=null;this.lastStartTagToken&&((n=Object.assign({},this.lastStartTagToken.location)).startTag=this.lastStartTagToken.location),this.treeAdapter.setNodeSourceCodeLocation(e,n)}_setEndLocation(e,n){let r=this.treeAdapter.getNodeSourceCodeLocation(e);if(r&&n.location){let a=n.location,o=this.treeAdapter.getTagName(e),s=n.type===i.END_TAG_TOKEN&&o===n.tagName,l={};s?(l.endTag=Object.assign({},a),l.endLine=a.endLine,l.endCol=a.endCol,l.endOffset=a.endOffset):(l.endLine=a.startLine,l.endCol=a.startCol,l.endOffset=a.startOffset),this.treeAdapter.updateNodeSourceCodeLocation(e,l)}}_getOverriddenMethods(e,n){return{_bootstrap(r,i){n._bootstrap.call(this,r,i),e.lastStartTagToken=null,e.lastFosterParentingLocation=null,e.currentToken=null;let l=a.install(this.tokenizer,o);e.posTracker=l.posTracker,a.install(this.openElements,s,{onItemPop:function(n){e._setEndLocation(n,e.currentToken)}})},_runParsingLoop(r){n._runParsingLoop.call(this,r);for(let a=this.openElements.stackTop;a>=0;a--)e._setEndLocation(this.openElements.items[a],e.currentToken)},_processTokenInForeignContent(r){e.currentToken=r,n._processTokenInForeignContent.call(this,r)},_processToken(r){e.currentToken=r,n._processToken.call(this,r);let a=r.type===i.END_TAG_TOKEN&&(r.tagName===u.HTML||r.tagName===u.BODY&&this.openElements.hasInScope(u.BODY));if(a)for(let o=this.openElements.stackTop;o>=0;o--){let s=this.openElements.items[o];if(this.treeAdapter.getTagName(s)===r.tagName){e._setEndLocation(s,r);break}}},_setDocumentType(e){n._setDocumentType.call(this,e);let r=this.treeAdapter.getChildNodes(this.document),a=r.length;for(let i=0;i{let o=i.MODE[a];r[o]=function(r){e.ctLoc=e._getCurrentLocation(),n[o].call(this,r)}}),r}}},4315:function(e,n,r){"use strict";let a=r(24592);e.exports=class extends a{constructor(e){super(e),this.preprocessor=e,this.isEol=!1,this.lineStartPos=0,this.droppedBufferSize=0,this.offset=0,this.col=0,this.line=1}_getOverriddenMethods(e,n){return{advance(){let r=this.pos+1,a=this.html[r];return e.isEol&&(e.isEol=!1,e.line++,e.lineStartPos=r),("\n"===a||"\r"===a&&"\n"!==this.html[r+1])&&(e.isEol=!0),e.col=r-e.lineStartPos+1,e.offset=e.droppedBufferSize+r,n.advance.call(this)},retreat(){n.retreat.call(this),e.isEol=!1,e.col=this.pos-e.lineStartPos+1},dropParsedChunk(){let r=this.pos;n.dropParsedChunk.call(this);let a=r-this.pos;e.lineStartPos-=a,e.droppedBufferSize+=a,e.offset=e.droppedBufferSize+this.pos}}}}},72485:function(e){"use strict";class n{constructor(e){this.length=0,this.entries=[],this.treeAdapter=e,this.bookmark=null}_getNoahArkConditionCandidates(e){let r=[];if(this.length>=3){let a=this.treeAdapter.getAttrList(e).length,i=this.treeAdapter.getTagName(e),o=this.treeAdapter.getNamespaceURI(e);for(let s=this.length-1;s>=0;s--){let l=this.entries[s];if(l.type===n.MARKER_ENTRY)break;let u=l.element,c=this.treeAdapter.getAttrList(u),p=this.treeAdapter.getTagName(u)===i&&this.treeAdapter.getNamespaceURI(u)===o&&c.length===a;p&&r.push({idx:s,attrs:c})}}return r.length<3?[]:r}_ensureNoahArkCondition(e){let n=this._getNoahArkConditionCandidates(e),r=n.length;if(r){let a=this.treeAdapter.getAttrList(e),i=a.length,o=Object.create(null);for(let s=0;s=2;m--)this.entries.splice(n[m].idx,1),this.length--}}insertMarker(){this.entries.push({type:n.MARKER_ENTRY}),this.length++}pushElement(e,r){this._ensureNoahArkCondition(e),this.entries.push({type:n.ELEMENT_ENTRY,element:e,token:r}),this.length++}insertElementAfterBookmark(e,r){let a=this.length-1;for(;a>=0&&this.entries[a]!==this.bookmark;a--);this.entries.splice(a+1,0,{type:n.ELEMENT_ENTRY,element:e,token:r}),this.length++}removeEntry(e){for(let n=this.length-1;n>=0;n--)if(this.entries[n]===e){this.entries.splice(n,1),this.length--;break}}clearToLastMarker(){for(;this.length;){let e=this.entries.pop();if(this.length--,e.type===n.MARKER_ENTRY)break}}getElementEntryInScopeWithTagName(e){for(let r=this.length-1;r>=0;r--){let a=this.entries[r];if(a.type===n.MARKER_ENTRY)break;if(this.treeAdapter.getTagName(a.element)===e)return a}return null}getElementEntry(e){for(let r=this.length-1;r>=0;r--){let a=this.entries[r];if(a.type===n.ELEMENT_ENTRY&&a.element===e)return a}return null}}n.MARKER_ENTRY="MARKER_ENTRY",n.ELEMENT_ENTRY="ELEMENT_ENTRY",e.exports=n},92860:function(e,n,r){"use strict";let a=r(1672),i=r(91619),o=r(72485),s=r(66010),l=r(62951),u=r(24592),c=r(17385),p=r(96308),m=r(76743),d=r(11093),h=r(97700),f=r(79740),g=r(28040),b=g.TAG_NAMES,k=g.NAMESPACES,y=g.ATTRS,v={scriptingEnabled:!0,sourceCodeLocationInfo:!1,onParseError:null,treeAdapter:c},E="hidden",T="INITIAL_MODE",_="BEFORE_HTML_MODE",x="BEFORE_HEAD_MODE",w="IN_HEAD_MODE",A="IN_HEAD_NO_SCRIPT_MODE",j="AFTER_HEAD_MODE",S="IN_BODY_MODE",C="TEXT_MODE",N="IN_TABLE_MODE",O="IN_TABLE_TEXT_MODE",R="IN_CAPTION_MODE",M="IN_COLUMN_GROUP_MODE",I="IN_TABLE_BODY_MODE",L="IN_ROW_MODE",P="IN_CELL_MODE",D="IN_SELECT_MODE",z="IN_SELECT_IN_TABLE_MODE",F="IN_TEMPLATE_MODE",B="AFTER_BODY_MODE",H="IN_FRAMESET_MODE",U="AFTER_FRAMESET_MODE",G="AFTER_AFTER_BODY_MODE",$="AFTER_AFTER_FRAMESET_MODE",K={[b.TR]:L,[b.TBODY]:I,[b.THEAD]:I,[b.TFOOT]:I,[b.CAPTION]:R,[b.COLGROUP]:M,[b.TABLE]:N,[b.BODY]:S,[b.FRAMESET]:H},V={[b.CAPTION]:N,[b.COLGROUP]:N,[b.TBODY]:N,[b.TFOOT]:N,[b.THEAD]:N,[b.COL]:M,[b.TR]:I,[b.TD]:L,[b.TH]:L},q={[T]:{[a.CHARACTER_TOKEN]:es,[a.NULL_CHARACTER_TOKEN]:es,[a.WHITESPACE_CHARACTER_TOKEN]:et,[a.COMMENT_TOKEN]:er,[a.DOCTYPE_TOKEN]:function(e,n){e._setDocumentType(n);let r=n.forceQuirks?g.DOCUMENT_MODE.QUIRKS:m.getDocumentMode(n);m.isConforming(n)||e._err(h.nonConformingDoctype),e.treeAdapter.setDocumentMode(e.document,r),e.insertionMode=_},[a.START_TAG_TOKEN]:es,[a.END_TAG_TOKEN]:es,[a.EOF_TOKEN]:es},[_]:{[a.CHARACTER_TOKEN]:el,[a.NULL_CHARACTER_TOKEN]:el,[a.WHITESPACE_CHARACTER_TOKEN]:et,[a.COMMENT_TOKEN]:er,[a.DOCTYPE_TOKEN]:et,[a.START_TAG_TOKEN]:function(e,n){n.tagName===b.HTML?(e._insertElement(n,k.HTML),e.insertionMode=x):el(e,n)},[a.END_TAG_TOKEN]:function(e,n){let r=n.tagName;(r===b.HTML||r===b.HEAD||r===b.BODY||r===b.BR)&&el(e,n)},[a.EOF_TOKEN]:el},[x]:{[a.CHARACTER_TOKEN]:eu,[a.NULL_CHARACTER_TOKEN]:eu,[a.WHITESPACE_CHARACTER_TOKEN]:et,[a.COMMENT_TOKEN]:er,[a.DOCTYPE_TOKEN]:en,[a.START_TAG_TOKEN]:function(e,n){let r=n.tagName;r===b.HTML?ej(e,n):r===b.HEAD?(e._insertElement(n,k.HTML),e.headElement=e.openElements.current,e.insertionMode=w):eu(e,n)},[a.END_TAG_TOKEN]:function(e,n){let r=n.tagName;r===b.HEAD||r===b.BODY||r===b.HTML||r===b.BR?eu(e,n):e._err(h.endTagWithoutMatchingOpenElement)},[a.EOF_TOKEN]:eu},[w]:{[a.CHARACTER_TOKEN]:em,[a.NULL_CHARACTER_TOKEN]:em,[a.WHITESPACE_CHARACTER_TOKEN]:ei,[a.COMMENT_TOKEN]:er,[a.DOCTYPE_TOKEN]:en,[a.START_TAG_TOKEN]:ec,[a.END_TAG_TOKEN]:ep,[a.EOF_TOKEN]:em},[A]:{[a.CHARACTER_TOKEN]:ed,[a.NULL_CHARACTER_TOKEN]:ed,[a.WHITESPACE_CHARACTER_TOKEN]:ei,[a.COMMENT_TOKEN]:er,[a.DOCTYPE_TOKEN]:en,[a.START_TAG_TOKEN]:function(e,n){let r=n.tagName;r===b.HTML?ej(e,n):r===b.BASEFONT||r===b.BGSOUND||r===b.HEAD||r===b.LINK||r===b.META||r===b.NOFRAMES||r===b.STYLE?ec(e,n):r===b.NOSCRIPT?e._err(h.nestedNoscriptInHead):ed(e,n)},[a.END_TAG_TOKEN]:function(e,n){let r=n.tagName;r===b.NOSCRIPT?(e.openElements.pop(),e.insertionMode=w):r===b.BR?ed(e,n):e._err(h.endTagWithoutMatchingOpenElement)},[a.EOF_TOKEN]:ed},[j]:{[a.CHARACTER_TOKEN]:eh,[a.NULL_CHARACTER_TOKEN]:eh,[a.WHITESPACE_CHARACTER_TOKEN]:ei,[a.COMMENT_TOKEN]:er,[a.DOCTYPE_TOKEN]:en,[a.START_TAG_TOKEN]:function(e,n){let r=n.tagName;r===b.HTML?ej(e,n):r===b.BODY?(e._insertElement(n,k.HTML),e.framesetOk=!1,e.insertionMode=S):r===b.FRAMESET?(e._insertElement(n,k.HTML),e.insertionMode=H):r===b.BASE||r===b.BASEFONT||r===b.BGSOUND||r===b.LINK||r===b.META||r===b.NOFRAMES||r===b.SCRIPT||r===b.STYLE||r===b.TEMPLATE||r===b.TITLE?(e._err(h.abandonedHeadElementChild),e.openElements.push(e.headElement),ec(e,n),e.openElements.remove(e.headElement)):r===b.HEAD?e._err(h.misplacedStartTagForHeadElement):eh(e,n)},[a.END_TAG_TOKEN]:function(e,n){let r=n.tagName;r===b.BODY||r===b.HTML||r===b.BR?eh(e,n):r===b.TEMPLATE?ep(e,n):e._err(h.endTagWithoutMatchingOpenElement)},[a.EOF_TOKEN]:eh},[S]:{[a.CHARACTER_TOKEN]:eg,[a.NULL_CHARACTER_TOKEN]:et,[a.WHITESPACE_CHARACTER_TOKEN]:ef,[a.COMMENT_TOKEN]:er,[a.DOCTYPE_TOKEN]:et,[a.START_TAG_TOKEN]:ej,[a.END_TAG_TOKEN]:eO,[a.EOF_TOKEN]:eR},[C]:{[a.CHARACTER_TOKEN]:ei,[a.NULL_CHARACTER_TOKEN]:ei,[a.WHITESPACE_CHARACTER_TOKEN]:ei,[a.COMMENT_TOKEN]:et,[a.DOCTYPE_TOKEN]:et,[a.START_TAG_TOKEN]:et,[a.END_TAG_TOKEN]:function(e,n){n.tagName===b.SCRIPT&&(e.pendingScript=e.openElements.current),e.openElements.pop(),e.insertionMode=e.originalInsertionMode},[a.EOF_TOKEN]:function(e,n){e._err(h.eofInElementThatCanContainOnlyText),e.openElements.pop(),e.insertionMode=e.originalInsertionMode,e._processToken(n)}},[N]:{[a.CHARACTER_TOKEN]:eM,[a.NULL_CHARACTER_TOKEN]:eM,[a.WHITESPACE_CHARACTER_TOKEN]:eM,[a.COMMENT_TOKEN]:er,[a.DOCTYPE_TOKEN]:et,[a.START_TAG_TOKEN]:eI,[a.END_TAG_TOKEN]:eL,[a.EOF_TOKEN]:eR},[O]:{[a.CHARACTER_TOKEN]:function(e,n){e.pendingCharacterTokens.push(n),e.hasNonWhitespacePendingCharacterToken=!0},[a.NULL_CHARACTER_TOKEN]:et,[a.WHITESPACE_CHARACTER_TOKEN]:function(e,n){e.pendingCharacterTokens.push(n)},[a.COMMENT_TOKEN]:eD,[a.DOCTYPE_TOKEN]:eD,[a.START_TAG_TOKEN]:eD,[a.END_TAG_TOKEN]:eD,[a.EOF_TOKEN]:eD},[R]:{[a.CHARACTER_TOKEN]:eg,[a.NULL_CHARACTER_TOKEN]:et,[a.WHITESPACE_CHARACTER_TOKEN]:ef,[a.COMMENT_TOKEN]:er,[a.DOCTYPE_TOKEN]:et,[a.START_TAG_TOKEN]:function(e,n){let r=n.tagName;r===b.CAPTION||r===b.COL||r===b.COLGROUP||r===b.TBODY||r===b.TD||r===b.TFOOT||r===b.TH||r===b.THEAD||r===b.TR?e.openElements.hasInTableScope(b.CAPTION)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(b.CAPTION),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=N,e._processToken(n)):ej(e,n)},[a.END_TAG_TOKEN]:function(e,n){let r=n.tagName;r===b.CAPTION||r===b.TABLE?e.openElements.hasInTableScope(b.CAPTION)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(b.CAPTION),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=N,r===b.TABLE&&e._processToken(n)):r!==b.BODY&&r!==b.COL&&r!==b.COLGROUP&&r!==b.HTML&&r!==b.TBODY&&r!==b.TD&&r!==b.TFOOT&&r!==b.TH&&r!==b.THEAD&&r!==b.TR&&eO(e,n)},[a.EOF_TOKEN]:eR},[M]:{[a.CHARACTER_TOKEN]:ez,[a.NULL_CHARACTER_TOKEN]:ez,[a.WHITESPACE_CHARACTER_TOKEN]:ei,[a.COMMENT_TOKEN]:er,[a.DOCTYPE_TOKEN]:et,[a.START_TAG_TOKEN]:function(e,n){let r=n.tagName;r===b.HTML?ej(e,n):r===b.COL?(e._appendElement(n,k.HTML),n.ackSelfClosing=!0):r===b.TEMPLATE?ec(e,n):ez(e,n)},[a.END_TAG_TOKEN]:function(e,n){let r=n.tagName;r===b.COLGROUP?e.openElements.currentTagName===b.COLGROUP&&(e.openElements.pop(),e.insertionMode=N):r===b.TEMPLATE?ep(e,n):r!==b.COL&&ez(e,n)},[a.EOF_TOKEN]:eR},[I]:{[a.CHARACTER_TOKEN]:eM,[a.NULL_CHARACTER_TOKEN]:eM,[a.WHITESPACE_CHARACTER_TOKEN]:eM,[a.COMMENT_TOKEN]:er,[a.DOCTYPE_TOKEN]:et,[a.START_TAG_TOKEN]:function(e,n){let r=n.tagName;r===b.TR?(e.openElements.clearBackToTableBodyContext(),e._insertElement(n,k.HTML),e.insertionMode=L):r===b.TH||r===b.TD?(e.openElements.clearBackToTableBodyContext(),e._insertFakeElement(b.TR),e.insertionMode=L,e._processToken(n)):r===b.CAPTION||r===b.COL||r===b.COLGROUP||r===b.TBODY||r===b.TFOOT||r===b.THEAD?e.openElements.hasTableBodyContextInTableScope()&&(e.openElements.clearBackToTableBodyContext(),e.openElements.pop(),e.insertionMode=N,e._processToken(n)):eI(e,n)},[a.END_TAG_TOKEN]:function(e,n){let r=n.tagName;r===b.TBODY||r===b.TFOOT||r===b.THEAD?e.openElements.hasInTableScope(r)&&(e.openElements.clearBackToTableBodyContext(),e.openElements.pop(),e.insertionMode=N):r===b.TABLE?e.openElements.hasTableBodyContextInTableScope()&&(e.openElements.clearBackToTableBodyContext(),e.openElements.pop(),e.insertionMode=N,e._processToken(n)):(r!==b.BODY&&r!==b.CAPTION&&r!==b.COL&&r!==b.COLGROUP||r!==b.HTML&&r!==b.TD&&r!==b.TH&&r!==b.TR)&&eL(e,n)},[a.EOF_TOKEN]:eR},[L]:{[a.CHARACTER_TOKEN]:eM,[a.NULL_CHARACTER_TOKEN]:eM,[a.WHITESPACE_CHARACTER_TOKEN]:eM,[a.COMMENT_TOKEN]:er,[a.DOCTYPE_TOKEN]:et,[a.START_TAG_TOKEN]:function(e,n){let r=n.tagName;r===b.TH||r===b.TD?(e.openElements.clearBackToTableRowContext(),e._insertElement(n,k.HTML),e.insertionMode=P,e.activeFormattingElements.insertMarker()):r===b.CAPTION||r===b.COL||r===b.COLGROUP||r===b.TBODY||r===b.TFOOT||r===b.THEAD||r===b.TR?e.openElements.hasInTableScope(b.TR)&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=I,e._processToken(n)):eI(e,n)},[a.END_TAG_TOKEN]:function(e,n){let r=n.tagName;r===b.TR?e.openElements.hasInTableScope(b.TR)&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=I):r===b.TABLE?e.openElements.hasInTableScope(b.TR)&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=I,e._processToken(n)):r===b.TBODY||r===b.TFOOT||r===b.THEAD?(e.openElements.hasInTableScope(r)||e.openElements.hasInTableScope(b.TR))&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=I,e._processToken(n)):(r!==b.BODY&&r!==b.CAPTION&&r!==b.COL&&r!==b.COLGROUP||r!==b.HTML&&r!==b.TD&&r!==b.TH)&&eL(e,n)},[a.EOF_TOKEN]:eR},[P]:{[a.CHARACTER_TOKEN]:eg,[a.NULL_CHARACTER_TOKEN]:et,[a.WHITESPACE_CHARACTER_TOKEN]:ef,[a.COMMENT_TOKEN]:er,[a.DOCTYPE_TOKEN]:et,[a.START_TAG_TOKEN]:function(e,n){let r=n.tagName;r===b.CAPTION||r===b.COL||r===b.COLGROUP||r===b.TBODY||r===b.TD||r===b.TFOOT||r===b.TH||r===b.THEAD||r===b.TR?(e.openElements.hasInTableScope(b.TD)||e.openElements.hasInTableScope(b.TH))&&(e._closeTableCell(),e._processToken(n)):ej(e,n)},[a.END_TAG_TOKEN]:function(e,n){let r=n.tagName;r===b.TD||r===b.TH?e.openElements.hasInTableScope(r)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(r),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=L):r===b.TABLE||r===b.TBODY||r===b.TFOOT||r===b.THEAD||r===b.TR?e.openElements.hasInTableScope(r)&&(e._closeTableCell(),e._processToken(n)):r!==b.BODY&&r!==b.CAPTION&&r!==b.COL&&r!==b.COLGROUP&&r!==b.HTML&&eO(e,n)},[a.EOF_TOKEN]:eR},[D]:{[a.CHARACTER_TOKEN]:ei,[a.NULL_CHARACTER_TOKEN]:et,[a.WHITESPACE_CHARACTER_TOKEN]:ei,[a.COMMENT_TOKEN]:er,[a.DOCTYPE_TOKEN]:et,[a.START_TAG_TOKEN]:eF,[a.END_TAG_TOKEN]:eB,[a.EOF_TOKEN]:eR},[z]:{[a.CHARACTER_TOKEN]:ei,[a.NULL_CHARACTER_TOKEN]:et,[a.WHITESPACE_CHARACTER_TOKEN]:ei,[a.COMMENT_TOKEN]:er,[a.DOCTYPE_TOKEN]:et,[a.START_TAG_TOKEN]:function(e,n){let r=n.tagName;r===b.CAPTION||r===b.TABLE||r===b.TBODY||r===b.TFOOT||r===b.THEAD||r===b.TR||r===b.TD||r===b.TH?(e.openElements.popUntilTagNamePopped(b.SELECT),e._resetInsertionMode(),e._processToken(n)):eF(e,n)},[a.END_TAG_TOKEN]:function(e,n){let r=n.tagName;r===b.CAPTION||r===b.TABLE||r===b.TBODY||r===b.TFOOT||r===b.THEAD||r===b.TR||r===b.TD||r===b.TH?e.openElements.hasInTableScope(r)&&(e.openElements.popUntilTagNamePopped(b.SELECT),e._resetInsertionMode(),e._processToken(n)):eB(e,n)},[a.EOF_TOKEN]:eR},[F]:{[a.CHARACTER_TOKEN]:eg,[a.NULL_CHARACTER_TOKEN]:et,[a.WHITESPACE_CHARACTER_TOKEN]:ef,[a.COMMENT_TOKEN]:er,[a.DOCTYPE_TOKEN]:et,[a.START_TAG_TOKEN]:function(e,n){let r=n.tagName;if(r===b.BASE||r===b.BASEFONT||r===b.BGSOUND||r===b.LINK||r===b.META||r===b.NOFRAMES||r===b.SCRIPT||r===b.STYLE||r===b.TEMPLATE||r===b.TITLE)ec(e,n);else{let a=V[r]||S;e._popTmplInsertionMode(),e._pushTmplInsertionMode(a),e.insertionMode=a,e._processToken(n)}},[a.END_TAG_TOKEN]:function(e,n){n.tagName===b.TEMPLATE&&ep(e,n)},[a.EOF_TOKEN]:eH},[B]:{[a.CHARACTER_TOKEN]:eU,[a.NULL_CHARACTER_TOKEN]:eU,[a.WHITESPACE_CHARACTER_TOKEN]:ef,[a.COMMENT_TOKEN]:function(e,n){e._appendCommentNode(n,e.openElements.items[0])},[a.DOCTYPE_TOKEN]:et,[a.START_TAG_TOKEN]:function(e,n){n.tagName===b.HTML?ej(e,n):eU(e,n)},[a.END_TAG_TOKEN]:function(e,n){n.tagName===b.HTML?e.fragmentContext||(e.insertionMode=G):eU(e,n)},[a.EOF_TOKEN]:eo},[H]:{[a.CHARACTER_TOKEN]:et,[a.NULL_CHARACTER_TOKEN]:et,[a.WHITESPACE_CHARACTER_TOKEN]:ei,[a.COMMENT_TOKEN]:er,[a.DOCTYPE_TOKEN]:et,[a.START_TAG_TOKEN]:function(e,n){let r=n.tagName;r===b.HTML?ej(e,n):r===b.FRAMESET?e._insertElement(n,k.HTML):r===b.FRAME?(e._appendElement(n,k.HTML),n.ackSelfClosing=!0):r===b.NOFRAMES&&ec(e,n)},[a.END_TAG_TOKEN]:function(e,n){n.tagName!==b.FRAMESET||e.openElements.isRootHtmlElementCurrent()||(e.openElements.pop(),e.fragmentContext||e.openElements.currentTagName===b.FRAMESET||(e.insertionMode=U))},[a.EOF_TOKEN]:eo},[U]:{[a.CHARACTER_TOKEN]:et,[a.NULL_CHARACTER_TOKEN]:et,[a.WHITESPACE_CHARACTER_TOKEN]:ei,[a.COMMENT_TOKEN]:er,[a.DOCTYPE_TOKEN]:et,[a.START_TAG_TOKEN]:function(e,n){let r=n.tagName;r===b.HTML?ej(e,n):r===b.NOFRAMES&&ec(e,n)},[a.END_TAG_TOKEN]:function(e,n){n.tagName===b.HTML&&(e.insertionMode=$)},[a.EOF_TOKEN]:eo},[G]:{[a.CHARACTER_TOKEN]:eG,[a.NULL_CHARACTER_TOKEN]:eG,[a.WHITESPACE_CHARACTER_TOKEN]:ef,[a.COMMENT_TOKEN]:ea,[a.DOCTYPE_TOKEN]:et,[a.START_TAG_TOKEN]:function(e,n){n.tagName===b.HTML?ej(e,n):eG(e,n)},[a.END_TAG_TOKEN]:eG,[a.EOF_TOKEN]:eo},[$]:{[a.CHARACTER_TOKEN]:et,[a.NULL_CHARACTER_TOKEN]:et,[a.WHITESPACE_CHARACTER_TOKEN]:ef,[a.COMMENT_TOKEN]:ea,[a.DOCTYPE_TOKEN]:et,[a.START_TAG_TOKEN]:function(e,n){let r=n.tagName;r===b.HTML?ej(e,n):r===b.NOFRAMES&&ec(e,n)},[a.END_TAG_TOKEN]:et,[a.EOF_TOKEN]:eo}};function W(e,n){let r=e.activeFormattingElements.getElementEntryInScopeWithTagName(n.tagName);return r?e.openElements.contains(r.element)?e.openElements.hasInScope(n.tagName)||(r=null):(e.activeFormattingElements.removeEntry(r),r=null):eN(e,n),r}function Y(e,n){let r=null;for(let a=e.openElements.stackTop;a>=0;a--){let i=e.openElements.items[a];if(i===n.element)break;e._isSpecialElement(i)&&(r=i)}return r||(e.openElements.popUntilElementPopped(n.element),e.activeFormattingElements.removeEntry(n)),r}function Q(e,n,r){let a=n,i=e.openElements.getCommonAncestor(n);for(let o=0,s=i;s!==r;o++,s=i){i=e.openElements.getCommonAncestor(s);let l=e.activeFormattingElements.getElementEntry(s),u=l&&o>=3,c=!l||u;c?(u&&e.activeFormattingElements.removeEntry(l),e.openElements.remove(s)):(s=Z(e,l),a===n&&(e.activeFormattingElements.bookmark=l),e.treeAdapter.detachNode(a),e.treeAdapter.appendChild(s,a),a=s)}return a}function Z(e,n){let r=e.treeAdapter.getNamespaceURI(n.element),a=e.treeAdapter.createElement(n.token.tagName,r,n.token.attrs);return e.openElements.replace(n.element,a),n.element=a,a}function X(e,n,r){if(e._isElementCausesFosterParenting(n))e._fosterParentElement(r);else{let a=e.treeAdapter.getTagName(n),i=e.treeAdapter.getNamespaceURI(n);a===b.TEMPLATE&&i===k.HTML&&(n=e.treeAdapter.getTemplateContent(n)),e.treeAdapter.appendChild(n,r)}}function J(e,n,r){let a=e.treeAdapter.getNamespaceURI(r.element),i=r.token,o=e.treeAdapter.createElement(i.tagName,a,i.attrs);e._adoptNodes(n,o),e.treeAdapter.appendChild(n,o),e.activeFormattingElements.insertElementAfterBookmark(o,r.token),e.activeFormattingElements.removeEntry(r),e.openElements.remove(r.element),e.openElements.insertAfter(n,o)}function ee(e,n){let r;for(let a=0;a<8&&(r=W(e,n,r));a++){let i=Y(e,r);if(!i)break;e.activeFormattingElements.bookmark=r;let o=Q(e,i,r.element),s=e.openElements.getCommonAncestor(r.element);e.treeAdapter.detachNode(o),X(e,s,o),J(e,i,r)}}function et(){}function en(e){e._err(h.misplacedDoctype)}function er(e,n){e._appendCommentNode(n,e.openElements.currentTmplContent||e.openElements.current)}function ea(e,n){e._appendCommentNode(n,e.document)}function ei(e,n){e._insertCharacters(n)}function eo(e){e.stopped=!0}function es(e,n){e._err(h.missingDoctype,{beforeToken:!0}),e.treeAdapter.setDocumentMode(e.document,g.DOCUMENT_MODE.QUIRKS),e.insertionMode=_,e._processToken(n)}function el(e,n){e._insertFakeRootElement(),e.insertionMode=x,e._processToken(n)}function eu(e,n){e._insertFakeElement(b.HEAD),e.headElement=e.openElements.current,e.insertionMode=w,e._processToken(n)}function ec(e,n){let r=n.tagName;r===b.HTML?ej(e,n):r===b.BASE||r===b.BASEFONT||r===b.BGSOUND||r===b.LINK||r===b.META?(e._appendElement(n,k.HTML),n.ackSelfClosing=!0):r===b.TITLE?e._switchToTextParsing(n,a.MODE.RCDATA):r===b.NOSCRIPT?e.options.scriptingEnabled?e._switchToTextParsing(n,a.MODE.RAWTEXT):(e._insertElement(n,k.HTML),e.insertionMode=A):r===b.NOFRAMES||r===b.STYLE?e._switchToTextParsing(n,a.MODE.RAWTEXT):r===b.SCRIPT?e._switchToTextParsing(n,a.MODE.SCRIPT_DATA):r===b.TEMPLATE?(e._insertTemplate(n,k.HTML),e.activeFormattingElements.insertMarker(),e.framesetOk=!1,e.insertionMode=F,e._pushTmplInsertionMode(F)):r===b.HEAD?e._err(h.misplacedStartTagForHeadElement):em(e,n)}function ep(e,n){let r=n.tagName;r===b.HEAD?(e.openElements.pop(),e.insertionMode=j):r===b.BODY||r===b.BR||r===b.HTML?em(e,n):r===b.TEMPLATE&&e.openElements.tmplCount>0?(e.openElements.generateImpliedEndTagsThoroughly(),e.openElements.currentTagName!==b.TEMPLATE&&e._err(h.closingOfElementWithOpenChildElements),e.openElements.popUntilTagNamePopped(b.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e._popTmplInsertionMode(),e._resetInsertionMode()):e._err(h.endTagWithoutMatchingOpenElement)}function em(e,n){e.openElements.pop(),e.insertionMode=j,e._processToken(n)}function ed(e,n){let r=n.type===a.EOF_TOKEN?h.openElementsLeftAfterEof:h.disallowedContentInNoscriptInHead;e._err(r),e.openElements.pop(),e.insertionMode=w,e._processToken(n)}function eh(e,n){e._insertFakeElement(b.BODY),e.insertionMode=S,e._processToken(n)}function ef(e,n){e._reconstructActiveFormattingElements(),e._insertCharacters(n)}function eg(e,n){e._reconstructActiveFormattingElements(),e._insertCharacters(n),e.framesetOk=!1}function eb(e,n){e.openElements.hasInButtonScope(b.P)&&e._closePElement(),e._insertElement(n,k.HTML)}function ek(e,n){e.openElements.hasInButtonScope(b.P)&&e._closePElement(),e._insertElement(n,k.HTML),e.skipNextNewLine=!0,e.framesetOk=!1}function ey(e,n){e._reconstructActiveFormattingElements(),e._insertElement(n,k.HTML),e.activeFormattingElements.pushElement(e.openElements.current,n)}function ev(e,n){e._reconstructActiveFormattingElements(),e._insertElement(n,k.HTML),e.activeFormattingElements.insertMarker(),e.framesetOk=!1}function eE(e,n){e._reconstructActiveFormattingElements(),e._appendElement(n,k.HTML),e.framesetOk=!1,n.ackSelfClosing=!0}function eT(e,n){e._appendElement(n,k.HTML),n.ackSelfClosing=!0}function e_(e,n){e._switchToTextParsing(n,a.MODE.RAWTEXT)}function ex(e,n){e.openElements.currentTagName===b.OPTION&&e.openElements.pop(),e._reconstructActiveFormattingElements(),e._insertElement(n,k.HTML)}function ew(e,n){e.openElements.hasInScope(b.RUBY)&&e.openElements.generateImpliedEndTags(),e._insertElement(n,k.HTML)}function eA(e,n){e._reconstructActiveFormattingElements(),e._insertElement(n,k.HTML)}function ej(e,n){var r,i,o,s,l,u,c,p,m,h,f,v,T,_,x,w,A,j,S,O,M,F,B,U,G,$,K,V,q,W;let Y=n.tagName;switch(Y.length){case 1:Y===b.I||Y===b.S||Y===b.B||Y===b.U?ey(e,n):Y===b.P?eb(e,n):Y===b.A?function(e,n){let r=e.activeFormattingElements.getElementEntryInScopeWithTagName(b.A);r&&(ee(e,n),e.openElements.remove(r.element),e.activeFormattingElements.removeEntry(r)),e._reconstructActiveFormattingElements(),e._insertElement(n,k.HTML),e.activeFormattingElements.pushElement(e.openElements.current,n)}(e,n):eA(e,n);break;case 2:Y===b.DL||Y===b.OL||Y===b.UL?eb(e,n):Y===b.H1||Y===b.H2||Y===b.H3||Y===b.H4||Y===b.H5||Y===b.H6?!function(e,n){e.openElements.hasInButtonScope(b.P)&&e._closePElement();let r=e.openElements.currentTagName;(r===b.H1||r===b.H2||r===b.H3||r===b.H4||r===b.H5||r===b.H6)&&e.openElements.pop(),e._insertElement(n,k.HTML)}(e,n):Y===b.LI||Y===b.DD||Y===b.DT?!function(e,n){e.framesetOk=!1;let r=n.tagName;for(let a=e.openElements.stackTop;a>=0;a--){let i=e.openElements.items[a],o=e.treeAdapter.getTagName(i),s=null;if(r===b.LI&&o===b.LI?s=b.LI:(r===b.DD||r===b.DT)&&(o===b.DD||o===b.DT)&&(s=o),s){e.openElements.generateImpliedEndTagsWithExclusion(s),e.openElements.popUntilTagNamePopped(s);break}if(o!==b.ADDRESS&&o!==b.DIV&&o!==b.P&&e._isSpecialElement(i))break}e.openElements.hasInButtonScope(b.P)&&e._closePElement(),e._insertElement(n,k.HTML)}(e,n):Y===b.EM||Y===b.TT?ey(e,n):Y===b.BR?eE(e,n):Y===b.HR?(r=e,i=n,r.openElements.hasInButtonScope(b.P)&&r._closePElement(),r._appendElement(i,k.HTML),r.framesetOk=!1,i.ackSelfClosing=!0):Y===b.RB?ew(e,n):Y===b.RT||Y===b.RP?(o=e,s=n,o.openElements.hasInScope(b.RUBY)&&o.openElements.generateImpliedEndTagsWithExclusion(b.RTC),o._insertElement(s,k.HTML)):Y!==b.TH&&Y!==b.TD&&Y!==b.TR&&eA(e,n);break;case 3:Y===b.DIV||Y===b.DIR||Y===b.NAV?eb(e,n):Y===b.PRE?ek(e,n):Y===b.BIG?ey(e,n):Y===b.IMG||Y===b.WBR?eE(e,n):Y===b.XMP?(l=e,u=n,l.openElements.hasInButtonScope(b.P)&&l._closePElement(),l._reconstructActiveFormattingElements(),l.framesetOk=!1,l._switchToTextParsing(u,a.MODE.RAWTEXT)):Y===b.SVG?(c=e,p=n,c._reconstructActiveFormattingElements(),d.adjustTokenSVGAttrs(p),d.adjustTokenXMLAttrs(p),p.selfClosing?c._appendElement(p,k.SVG):c._insertElement(p,k.SVG),p.ackSelfClosing=!0):Y===b.RTC?ew(e,n):Y!==b.COL&&eA(e,n);break;case 4:Y===b.HTML?(m=e,h=n,0===m.openElements.tmplCount&&m.treeAdapter.adoptAttributes(m.openElements.items[0],h.attrs)):Y===b.BASE||Y===b.LINK||Y===b.META?ec(e,n):Y===b.BODY?!function(e,n){let r=e.openElements.tryPeekProperlyNestedBodyElement();r&&0===e.openElements.tmplCount&&(e.framesetOk=!1,e.treeAdapter.adoptAttributes(r,n.attrs))}(e,n):Y===b.MAIN||Y===b.MENU?eb(e,n):Y===b.FORM?!function(e,n){let r=e.openElements.tmplCount>0;e.formElement&&!r||(e.openElements.hasInButtonScope(b.P)&&e._closePElement(),e._insertElement(n,k.HTML),r||(e.formElement=e.openElements.current))}(e,n):Y===b.CODE||Y===b.FONT?ey(e,n):Y===b.NOBR?(f=e,v=n,f._reconstructActiveFormattingElements(),f.openElements.hasInScope(b.NOBR)&&(ee(f,v),f._reconstructActiveFormattingElements()),f._insertElement(v,k.HTML),f.activeFormattingElements.pushElement(f.openElements.current,v)):Y===b.AREA?eE(e,n):Y===b.MATH?(T=e,_=n,T._reconstructActiveFormattingElements(),d.adjustTokenMathMLAttrs(_),d.adjustTokenXMLAttrs(_),_.selfClosing?T._appendElement(_,k.MATHML):T._insertElement(_,k.MATHML),_.ackSelfClosing=!0):Y===b.MENU?(x=e,w=n,x.openElements.hasInButtonScope(b.P)&&x._closePElement(),x._insertElement(w,k.HTML)):Y!==b.HEAD&&eA(e,n);break;case 5:Y===b.STYLE||Y===b.TITLE?ec(e,n):Y===b.ASIDE?eb(e,n):Y===b.SMALL?ey(e,n):Y===b.TABLE?(A=e,j=n,A.treeAdapter.getDocumentMode(A.document)!==g.DOCUMENT_MODE.QUIRKS&&A.openElements.hasInButtonScope(b.P)&&A._closePElement(),A._insertElement(j,k.HTML),A.framesetOk=!1,A.insertionMode=N):Y===b.EMBED?eE(e,n):Y===b.INPUT?!function(e,n){e._reconstructActiveFormattingElements(),e._appendElement(n,k.HTML);let r=a.getTokenAttr(n,y.TYPE);r&&r.toLowerCase()===E||(e.framesetOk=!1),n.ackSelfClosing=!0}(e,n):Y===b.PARAM||Y===b.TRACK?eT(e,n):Y===b.IMAGE?(S=e,(O=n).tagName=b.IMG,eE(S,O)):Y!==b.FRAME&&Y!==b.TBODY&&Y!==b.TFOOT&&Y!==b.THEAD&&eA(e,n);break;case 6:Y===b.SCRIPT?ec(e,n):Y===b.CENTER||Y===b.FIGURE||Y===b.FOOTER||Y===b.HEADER||Y===b.HGROUP||Y===b.DIALOG?eb(e,n):Y===b.BUTTON?(M=e,F=n,M.openElements.hasInScope(b.BUTTON)&&(M.openElements.generateImpliedEndTags(),M.openElements.popUntilTagNamePopped(b.BUTTON)),M._reconstructActiveFormattingElements(),M._insertElement(F,k.HTML),M.framesetOk=!1):Y===b.STRIKE||Y===b.STRONG?ey(e,n):Y===b.APPLET||Y===b.OBJECT?ev(e,n):Y===b.KEYGEN?eE(e,n):Y===b.SOURCE?eT(e,n):Y===b.IFRAME?(B=e,U=n,B.framesetOk=!1,B._switchToTextParsing(U,a.MODE.RAWTEXT)):Y===b.SELECT?(G=e,$=n,G._reconstructActiveFormattingElements(),G._insertElement($,k.HTML),G.framesetOk=!1,G.insertionMode===N||G.insertionMode===R||G.insertionMode===I||G.insertionMode===L||G.insertionMode===P?G.insertionMode=z:G.insertionMode=D):Y===b.OPTION?ex(e,n):eA(e,n);break;case 7:Y===b.BGSOUND?ec(e,n):Y===b.DETAILS||Y===b.ADDRESS||Y===b.ARTICLE||Y===b.SECTION||Y===b.SUMMARY?eb(e,n):Y===b.LISTING?ek(e,n):Y===b.MARQUEE?ev(e,n):Y===b.NOEMBED?e_(e,n):Y!==b.CAPTION&&eA(e,n);break;case 8:Y===b.BASEFONT?ec(e,n):Y===b.FRAMESET?!function(e,n){let r=e.openElements.tryPeekProperlyNestedBodyElement();e.framesetOk&&r&&(e.treeAdapter.detachNode(r),e.openElements.popAllUpToHtmlElement(),e._insertElement(n,k.HTML),e.insertionMode=H)}(e,n):Y===b.FIELDSET?eb(e,n):Y===b.TEXTAREA?(K=e,V=n,K._insertElement(V,k.HTML),K.skipNextNewLine=!0,K.tokenizer.state=a.MODE.RCDATA,K.originalInsertionMode=K.insertionMode,K.framesetOk=!1,K.insertionMode=C):Y===b.TEMPLATE?ec(e,n):Y===b.NOSCRIPT?e.options.scriptingEnabled?e_(e,n):eA(e,n):Y===b.OPTGROUP?ex(e,n):Y!==b.COLGROUP&&eA(e,n);break;case 9:Y===b.PLAINTEXT?(q=e,W=n,q.openElements.hasInButtonScope(b.P)&&q._closePElement(),q._insertElement(W,k.HTML),q.tokenizer.state=a.MODE.PLAINTEXT):eA(e,n);break;case 10:Y===b.BLOCKQUOTE||Y===b.FIGCAPTION?eb(e,n):eA(e,n);break;default:eA(e,n)}}function eS(e,n){let r=n.tagName;e.openElements.hasInScope(r)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(r))}function eC(e,n){let r=n.tagName;e.openElements.hasInScope(r)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(r),e.activeFormattingElements.clearToLastMarker())}function eN(e,n){let r=n.tagName;for(let a=e.openElements.stackTop;a>0;a--){let i=e.openElements.items[a];if(e.treeAdapter.getTagName(i)===r){e.openElements.generateImpliedEndTagsWithExclusion(r),e.openElements.popUntilElementPopped(i);break}if(e._isSpecialElement(i))break}}function eO(e,n){var r,a,i,o,s,l,u;let c=n.tagName;switch(c.length){case 1:c===b.A||c===b.B||c===b.I||c===b.S||c===b.U?ee(e,n):c===b.P?((r=e).openElements.hasInButtonScope(b.P)||r._insertFakeElement(b.P),r._closePElement()):eN(e,n);break;case 2:c===b.DL||c===b.UL||c===b.OL?eS(e,n):c===b.LI?(a=e).openElements.hasInListItemScope(b.LI)&&(a.openElements.generateImpliedEndTagsWithExclusion(b.LI),a.openElements.popUntilTagNamePopped(b.LI)):c===b.DD||c===b.DT?!function(e,n){let r=n.tagName;e.openElements.hasInScope(r)&&(e.openElements.generateImpliedEndTagsWithExclusion(r),e.openElements.popUntilTagNamePopped(r))}(e,n):c===b.H1||c===b.H2||c===b.H3||c===b.H4||c===b.H5||c===b.H6?(i=e).openElements.hasNumberedHeaderInScope()&&(i.openElements.generateImpliedEndTags(),i.openElements.popUntilNumberedHeaderPopped()):c===b.BR?((o=e)._reconstructActiveFormattingElements(),o._insertFakeElement(b.BR),o.openElements.pop(),o.framesetOk=!1):c===b.EM||c===b.TT?ee(e,n):eN(e,n);break;case 3:c===b.BIG?ee(e,n):c===b.DIR||c===b.DIV||c===b.NAV||c===b.PRE?eS(e,n):eN(e,n);break;case 4:c===b.BODY?(s=e).openElements.hasInScope(b.BODY)&&(s.insertionMode=B):c===b.HTML?(l=e,u=n,l.openElements.hasInScope(b.BODY)&&(l.insertionMode=B,l._processToken(u))):c===b.FORM?function(e){let n=e.openElements.tmplCount>0,r=e.formElement;n||(e.formElement=null),(r||n)&&e.openElements.hasInScope(b.FORM)&&(e.openElements.generateImpliedEndTags(),n?e.openElements.popUntilTagNamePopped(b.FORM):e.openElements.remove(r))}(e,n):c===b.CODE||c===b.FONT||c===b.NOBR?ee(e,n):c===b.MAIN||c===b.MENU?eS(e,n):eN(e,n);break;case 5:c===b.ASIDE?eS(e,n):c===b.SMALL?ee(e,n):eN(e,n);break;case 6:c===b.CENTER||c===b.FIGURE||c===b.FOOTER||c===b.HEADER||c===b.HGROUP||c===b.DIALOG?eS(e,n):c===b.APPLET||c===b.OBJECT?eC(e,n):c===b.STRIKE||c===b.STRONG?ee(e,n):eN(e,n);break;case 7:c===b.ADDRESS||c===b.ARTICLE||c===b.DETAILS||c===b.SECTION||c===b.SUMMARY||c===b.LISTING?eS(e,n):c===b.MARQUEE?eC(e,n):eN(e,n);break;case 8:c===b.FIELDSET?eS(e,n):c===b.TEMPLATE?ep(e,n):eN(e,n);break;case 10:c===b.BLOCKQUOTE||c===b.FIGCAPTION?eS(e,n):eN(e,n);break;default:eN(e,n)}}function eR(e,n){e.tmplInsertionModeStackTop>-1?eH(e,n):e.stopped=!0}function eM(e,n){let r=e.openElements.currentTagName;r===b.TABLE||r===b.TBODY||r===b.TFOOT||r===b.THEAD||r===b.TR?(e.pendingCharacterTokens=[],e.hasNonWhitespacePendingCharacterToken=!1,e.originalInsertionMode=e.insertionMode,e.insertionMode=O,e._processToken(n)):eP(e,n)}function eI(e,n){var r,i,o,s,l,u,c,p,m,d,h,f,g,v;let T=n.tagName;switch(T.length){case 2:T===b.TD||T===b.TH||T===b.TR?(r=e,i=n,r.openElements.clearBackToTableContext(),r._insertFakeElement(b.TBODY),r.insertionMode=I,r._processToken(i)):eP(e,n);break;case 3:T===b.COL?(o=e,s=n,o.openElements.clearBackToTableContext(),o._insertFakeElement(b.COLGROUP),o.insertionMode=M,o._processToken(s)):eP(e,n);break;case 4:T===b.FORM?(l=e,u=n,l.formElement||0!==l.openElements.tmplCount||(l._insertElement(u,k.HTML),l.formElement=l.openElements.current,l.openElements.pop())):eP(e,n);break;case 5:T===b.TABLE?(c=e,p=n,c.openElements.hasInTableScope(b.TABLE)&&(c.openElements.popUntilTagNamePopped(b.TABLE),c._resetInsertionMode(),c._processToken(p))):T===b.STYLE?ec(e,n):T===b.TBODY||T===b.TFOOT||T===b.THEAD?(m=e,d=n,m.openElements.clearBackToTableContext(),m._insertElement(d,k.HTML),m.insertionMode=I):T===b.INPUT?function(e,n){let r=a.getTokenAttr(n,y.TYPE);r&&r.toLowerCase()===E?e._appendElement(n,k.HTML):eP(e,n),n.ackSelfClosing=!0}(e,n):eP(e,n);break;case 6:T===b.SCRIPT?ec(e,n):eP(e,n);break;case 7:T===b.CAPTION?(h=e,f=n,h.openElements.clearBackToTableContext(),h.activeFormattingElements.insertMarker(),h._insertElement(f,k.HTML),h.insertionMode=R):eP(e,n);break;case 8:T===b.COLGROUP?(g=e,v=n,g.openElements.clearBackToTableContext(),g._insertElement(v,k.HTML),g.insertionMode=M):T===b.TEMPLATE?ec(e,n):eP(e,n);break;default:eP(e,n)}}function eL(e,n){let r=n.tagName;r===b.TABLE?e.openElements.hasInTableScope(b.TABLE)&&(e.openElements.popUntilTagNamePopped(b.TABLE),e._resetInsertionMode()):r===b.TEMPLATE?ep(e,n):r!==b.BODY&&r!==b.CAPTION&&r!==b.COL&&r!==b.COLGROUP&&r!==b.HTML&&r!==b.TBODY&&r!==b.TD&&r!==b.TFOOT&&r!==b.TH&&r!==b.THEAD&&r!==b.TR&&eP(e,n)}function eP(e,n){let r=e.fosterParentingEnabled;e.fosterParentingEnabled=!0,e._processTokenInBodyMode(n),e.fosterParentingEnabled=r}function eD(e,n){let r=0;if(e.hasNonWhitespacePendingCharacterToken)for(;r0?(e.openElements.popUntilTagNamePopped(b.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e._popTmplInsertionMode(),e._resetInsertionMode(),e._processToken(n)):e.stopped=!0}function eU(e,n){e.insertionMode=S,e._processToken(n)}function eG(e,n){e.insertionMode=S,e._processToken(n)}e.exports=class{constructor(e){this.options=p(v,e),this.treeAdapter=this.options.treeAdapter,this.pendingScript=null,this.options.sourceCodeLocationInfo&&u.install(this,s),this.options.onParseError&&u.install(this,l,{onParseError:this.options.onParseError})}parse(e){let n=this.treeAdapter.createDocument();return this._bootstrap(n,null),this.tokenizer.write(e,!0),this._runParsingLoop(null),n}parseFragment(e,n){n||(n=this.treeAdapter.createElement(b.TEMPLATE,k.HTML,[]));let r=this.treeAdapter.createElement("documentmock",k.HTML,[]);this._bootstrap(r,n),this.treeAdapter.getTagName(n)===b.TEMPLATE&&this._pushTmplInsertionMode(F),this._initTokenizerForFragmentParsing(),this._insertFakeRootElement(),this._resetInsertionMode(),this._findFormInFragmentContext(),this.tokenizer.write(e,!0),this._runParsingLoop(null);let a=this.treeAdapter.getFirstChild(r),i=this.treeAdapter.createDocumentFragment();return this._adoptNodes(a,i),i}_bootstrap(e,n){this.tokenizer=new a(this.options),this.stopped=!1,this.insertionMode=T,this.originalInsertionMode="",this.document=e,this.fragmentContext=n,this.headElement=null,this.formElement=null,this.openElements=new i(this.document,this.treeAdapter),this.activeFormattingElements=new o(this.treeAdapter),this.tmplInsertionModeStack=[],this.tmplInsertionModeStackTop=-1,this.currentTmplInsertionMode=null,this.pendingCharacterTokens=[],this.hasNonWhitespacePendingCharacterToken=!1,this.framesetOk=!0,this.skipNextNewLine=!1,this.fosterParentingEnabled=!1}_err(){}_runParsingLoop(e){for(;!this.stopped;){this._setupTokenizerCDATAMode();let n=this.tokenizer.getNextToken();if(n.type===a.HIBERNATION_TOKEN)break;if(this.skipNextNewLine&&(this.skipNextNewLine=!1,n.type===a.WHITESPACE_CHARACTER_TOKEN&&"\n"===n.chars[0])){if(1===n.chars.length)continue;n.chars=n.chars.substr(1)}if(this._processInputToken(n),e&&this.pendingScript)break}}runParsingLoopForCurrentChunk(e,n){if(this._runParsingLoop(n),n&&this.pendingScript){let r=this.pendingScript;this.pendingScript=null,n(r);return}e&&e()}_setupTokenizerCDATAMode(){let e=this._getAdjustedCurrentElement();this.tokenizer.allowCDATA=e&&e!==this.document&&this.treeAdapter.getNamespaceURI(e)!==k.HTML&&!this._isIntegrationPoint(e)}_switchToTextParsing(e,n){this._insertElement(e,k.HTML),this.tokenizer.state=n,this.originalInsertionMode=this.insertionMode,this.insertionMode=C}switchToPlaintextParsing(){this.insertionMode=C,this.originalInsertionMode=S,this.tokenizer.state=a.MODE.PLAINTEXT}_getAdjustedCurrentElement(){return 0===this.openElements.stackTop&&this.fragmentContext?this.fragmentContext:this.openElements.current}_findFormInFragmentContext(){let e=this.fragmentContext;do{if(this.treeAdapter.getTagName(e)===b.FORM){this.formElement=e;break}e=this.treeAdapter.getParentNode(e)}while(e)}_initTokenizerForFragmentParsing(){if(this.treeAdapter.getNamespaceURI(this.fragmentContext)===k.HTML){let e=this.treeAdapter.getTagName(this.fragmentContext);e===b.TITLE||e===b.TEXTAREA?this.tokenizer.state=a.MODE.RCDATA:e===b.STYLE||e===b.XMP||e===b.IFRAME||e===b.NOEMBED||e===b.NOFRAMES||e===b.NOSCRIPT?this.tokenizer.state=a.MODE.RAWTEXT:e===b.SCRIPT?this.tokenizer.state=a.MODE.SCRIPT_DATA:e===b.PLAINTEXT&&(this.tokenizer.state=a.MODE.PLAINTEXT)}}_setDocumentType(e){let n=e.name||"",r=e.publicId||"",a=e.systemId||"";this.treeAdapter.setDocumentType(this.document,n,r,a)}_attachElementToTree(e){if(this._shouldFosterParentOnInsertion())this._fosterParentElement(e);else{let n=this.openElements.currentTmplContent||this.openElements.current;this.treeAdapter.appendChild(n,e)}}_appendElement(e,n){let r=this.treeAdapter.createElement(e.tagName,n,e.attrs);this._attachElementToTree(r)}_insertElement(e,n){let r=this.treeAdapter.createElement(e.tagName,n,e.attrs);this._attachElementToTree(r),this.openElements.push(r)}_insertFakeElement(e){let n=this.treeAdapter.createElement(e,k.HTML,[]);this._attachElementToTree(n),this.openElements.push(n)}_insertTemplate(e){let n=this.treeAdapter.createElement(e.tagName,k.HTML,e.attrs),r=this.treeAdapter.createDocumentFragment();this.treeAdapter.setTemplateContent(n,r),this._attachElementToTree(n),this.openElements.push(n)}_insertFakeRootElement(){let e=this.treeAdapter.createElement(b.HTML,k.HTML,[]);this.treeAdapter.appendChild(this.openElements.current,e),this.openElements.push(e)}_appendCommentNode(e,n){let r=this.treeAdapter.createCommentNode(e.data);this.treeAdapter.appendChild(n,r)}_insertCharacters(e){if(this._shouldFosterParentOnInsertion())this._fosterParentText(e.chars);else{let n=this.openElements.currentTmplContent||this.openElements.current;this.treeAdapter.insertText(n,e.chars)}}_adoptNodes(e,n){for(let r=this.treeAdapter.getFirstChild(e);r;r=this.treeAdapter.getFirstChild(e))this.treeAdapter.detachNode(r),this.treeAdapter.appendChild(n,r)}_shouldProcessTokenInForeignContent(e){let n=this._getAdjustedCurrentElement();if(!n||n===this.document)return!1;let r=this.treeAdapter.getNamespaceURI(n);if(r===k.HTML||this.treeAdapter.getTagName(n)===b.ANNOTATION_XML&&r===k.MATHML&&e.type===a.START_TAG_TOKEN&&e.tagName===b.SVG)return!1;let i=e.type===a.CHARACTER_TOKEN||e.type===a.NULL_CHARACTER_TOKEN||e.type===a.WHITESPACE_CHARACTER_TOKEN,o=e.type===a.START_TAG_TOKEN&&e.tagName!==b.MGLYPH&&e.tagName!==b.MALIGNMARK;return!((o||i)&&this._isIntegrationPoint(n,k.MATHML)||(e.type===a.START_TAG_TOKEN||i)&&this._isIntegrationPoint(n,k.HTML))&&e.type!==a.EOF_TOKEN}_processToken(e){q[this.insertionMode][e.type](this,e)}_processTokenInBodyMode(e){q[S][e.type](this,e)}_processTokenInForeignContent(e){var n,r,i,o;e.type===a.CHARACTER_TOKEN?(n=this,r=e,n._insertCharacters(r),n.framesetOk=!1):e.type===a.NULL_CHARACTER_TOKEN?(i=this,o=e,o.chars=f.REPLACEMENT_CHARACTER,i._insertCharacters(o)):e.type===a.WHITESPACE_CHARACTER_TOKEN?ei(this,e):e.type===a.COMMENT_TOKEN?er(this,e):e.type===a.START_TAG_TOKEN?function(e,n){if(d.causesExit(n)&&!e.fragmentContext){for(;e.treeAdapter.getNamespaceURI(e.openElements.current)!==k.HTML&&!e._isIntegrationPoint(e.openElements.current);)e.openElements.pop();e._processToken(n)}else{let r=e._getAdjustedCurrentElement(),a=e.treeAdapter.getNamespaceURI(r);a===k.MATHML?d.adjustTokenMathMLAttrs(n):a===k.SVG&&(d.adjustTokenSVGTagName(n),d.adjustTokenSVGAttrs(n)),d.adjustTokenXMLAttrs(n),n.selfClosing?e._appendElement(n,a):e._insertElement(n,a),n.ackSelfClosing=!0}}(this,e):e.type===a.END_TAG_TOKEN&&function(e,n){for(let r=e.openElements.stackTop;r>0;r--){let a=e.openElements.items[r];if(e.treeAdapter.getNamespaceURI(a)===k.HTML){e._processToken(n);break}if(e.treeAdapter.getTagName(a).toLowerCase()===n.tagName){e.openElements.popUntilElementPopped(a);break}}}(this,e)}_processInputToken(e){this._shouldProcessTokenInForeignContent(e)?this._processTokenInForeignContent(e):this._processToken(e),e.type===a.START_TAG_TOKEN&&e.selfClosing&&!e.ackSelfClosing&&this._err(h.nonVoidHtmlElementStartTagWithTrailingSolidus)}_isIntegrationPoint(e,n){let r=this.treeAdapter.getTagName(e),a=this.treeAdapter.getNamespaceURI(e),i=this.treeAdapter.getAttrList(e);return d.isIntegrationPoint(r,a,i,n)}_reconstructActiveFormattingElements(){let e=this.activeFormattingElements.length;if(e){let n=e,r=null;do if(n--,(r=this.activeFormattingElements.entries[n]).type===o.MARKER_ENTRY||this.openElements.contains(r.element)){n++;break}while(n>0);for(let a=n;a=0;e--){let r=this.openElements.items[e];0===e&&(n=!0,this.fragmentContext&&(r=this.fragmentContext));let a=this.treeAdapter.getTagName(r),i=K[a];if(i){this.insertionMode=i;break}if(n||a!==b.TD&&a!==b.TH){if(n||a!==b.HEAD){if(a===b.SELECT){this._resetInsertionModeForSelect(e);break}if(a===b.TEMPLATE){this.insertionMode=this.currentTmplInsertionMode;break}else if(a===b.HTML){this.insertionMode=this.headElement?j:x;break}else if(n){this.insertionMode=S;break}}else{this.insertionMode=w;break}}else{this.insertionMode=P;break}}}_resetInsertionModeForSelect(e){if(e>0)for(let n=e-1;n>0;n--){let r=this.openElements.items[n],a=this.treeAdapter.getTagName(r);if(a===b.TEMPLATE)break;if(a===b.TABLE){this.insertionMode=z;return}}this.insertionMode=D}_pushTmplInsertionMode(e){this.tmplInsertionModeStack.push(e),this.tmplInsertionModeStackTop++,this.currentTmplInsertionMode=e}_popTmplInsertionMode(){this.tmplInsertionModeStack.pop(),this.tmplInsertionModeStackTop--,this.currentTmplInsertionMode=this.tmplInsertionModeStack[this.tmplInsertionModeStackTop]}_isElementCausesFosterParenting(e){let n=this.treeAdapter.getTagName(e);return n===b.TABLE||n===b.TBODY||n===b.TFOOT||n===b.THEAD||n===b.TR}_shouldFosterParentOnInsertion(){return this.fosterParentingEnabled&&this._isElementCausesFosterParenting(this.openElements.current)}_findFosterParentingLocation(){let e={parent:null,beforeElement:null};for(let n=this.openElements.stackTop;n>=0;n--){let r=this.openElements.items[n],a=this.treeAdapter.getTagName(r),i=this.treeAdapter.getNamespaceURI(r);if(a===b.TEMPLATE&&i===k.HTML){e.parent=this.treeAdapter.getTemplateContent(r);break}if(a===b.TABLE){e.parent=this.treeAdapter.getParentNode(r),e.parent?e.beforeElement=r:e.parent=this.openElements.items[n-1];break}}return e.parent||(e.parent=this.openElements.items[0]),e}_fosterParentElement(e){let n=this._findFosterParentingLocation();n.beforeElement?this.treeAdapter.insertBefore(n.parent,e,n.beforeElement):this.treeAdapter.appendChild(n.parent,e)}_fosterParentText(e){let n=this._findFosterParentingLocation();n.beforeElement?this.treeAdapter.insertTextBefore(n.parent,e,n.beforeElement):this.treeAdapter.insertText(n.parent,e)}_isSpecialElement(e){let n=this.treeAdapter.getTagName(e),r=this.treeAdapter.getNamespaceURI(e);return g.SPECIAL_ELEMENTS[r][n]}}},91619:function(e,n,r){"use strict";let a=r(28040),i=a.TAG_NAMES,o=a.NAMESPACES;function s(e){switch(e.length){case 1:return e===i.P;case 2:return e===i.RB||e===i.RP||e===i.RT||e===i.DD||e===i.DT||e===i.LI;case 3:return e===i.RTC;case 6:return e===i.OPTION;case 8:return e===i.OPTGROUP}return!1}function l(e){switch(e.length){case 1:return e===i.P;case 2:return e===i.RB||e===i.RP||e===i.RT||e===i.DD||e===i.DT||e===i.LI||e===i.TD||e===i.TH||e===i.TR;case 3:return e===i.RTC;case 5:return e===i.TBODY||e===i.TFOOT||e===i.THEAD;case 6:return e===i.OPTION;case 7:return e===i.CAPTION;case 8:return e===i.OPTGROUP||e===i.COLGROUP}return!1}function u(e,n){switch(e.length){case 2:if(e===i.TD||e===i.TH)return n===o.HTML;if(e===i.MI||e===i.MO||e===i.MN||e===i.MS)return n===o.MATHML;break;case 4:if(e===i.HTML)return n===o.HTML;if(e===i.DESC)return n===o.SVG;break;case 5:if(e===i.TABLE)return n===o.HTML;if(e===i.MTEXT)return n===o.MATHML;if(e===i.TITLE)return n===o.SVG;break;case 6:return(e===i.APPLET||e===i.OBJECT)&&n===o.HTML;case 7:return(e===i.CAPTION||e===i.MARQUEE)&&n===o.HTML;case 8:return e===i.TEMPLATE&&n===o.HTML;case 13:return e===i.FOREIGN_OBJECT&&n===o.SVG;case 14:return e===i.ANNOTATION_XML&&n===o.MATHML}return!1}e.exports=class{constructor(e,n){this.stackTop=-1,this.items=[],this.current=e,this.currentTagName=null,this.currentTmplContent=null,this.tmplCount=0,this.treeAdapter=n}_indexOf(e){let n=-1;for(let r=this.stackTop;r>=0;r--)if(this.items[r]===e){n=r;break}return n}_isInTemplate(){return this.currentTagName===i.TEMPLATE&&this.treeAdapter.getNamespaceURI(this.current)===o.HTML}_updateCurrentElement(){this.current=this.items[this.stackTop],this.currentTagName=this.current&&this.treeAdapter.getTagName(this.current),this.currentTmplContent=this._isInTemplate()?this.treeAdapter.getTemplateContent(this.current):null}push(e){this.items[++this.stackTop]=e,this._updateCurrentElement(),this._isInTemplate()&&this.tmplCount++}pop(){this.stackTop--,this.tmplCount>0&&this._isInTemplate()&&this.tmplCount--,this._updateCurrentElement()}replace(e,n){let r=this._indexOf(e);this.items[r]=n,r===this.stackTop&&this._updateCurrentElement()}insertAfter(e,n){let r=this._indexOf(e)+1;this.items.splice(r,0,n),r===++this.stackTop&&this._updateCurrentElement()}popUntilTagNamePopped(e){for(;this.stackTop>-1;){let n=this.currentTagName,r=this.treeAdapter.getNamespaceURI(this.current);if(this.pop(),n===e&&r===o.HTML)break}}popUntilElementPopped(e){for(;this.stackTop>-1;){let n=this.current;if(this.pop(),n===e)break}}popUntilNumberedHeaderPopped(){for(;this.stackTop>-1;){let e=this.currentTagName,n=this.treeAdapter.getNamespaceURI(this.current);if(this.pop(),e===i.H1||e===i.H2||e===i.H3||e===i.H4||e===i.H5||e===i.H6&&n===o.HTML)break}}popUntilTableCellPopped(){for(;this.stackTop>-1;){let e=this.currentTagName,n=this.treeAdapter.getNamespaceURI(this.current);if(this.pop(),e===i.TD||e===i.TH&&n===o.HTML)break}}popAllUpToHtmlElement(){this.stackTop=0,this._updateCurrentElement()}clearBackToTableContext(){for(;this.currentTagName!==i.TABLE&&this.currentTagName!==i.TEMPLATE&&this.currentTagName!==i.HTML||this.treeAdapter.getNamespaceURI(this.current)!==o.HTML;)this.pop()}clearBackToTableBodyContext(){for(;this.currentTagName!==i.TBODY&&this.currentTagName!==i.TFOOT&&this.currentTagName!==i.THEAD&&this.currentTagName!==i.TEMPLATE&&this.currentTagName!==i.HTML||this.treeAdapter.getNamespaceURI(this.current)!==o.HTML;)this.pop()}clearBackToTableRowContext(){for(;this.currentTagName!==i.TR&&this.currentTagName!==i.TEMPLATE&&this.currentTagName!==i.HTML||this.treeAdapter.getNamespaceURI(this.current)!==o.HTML;)this.pop()}remove(e){for(let n=this.stackTop;n>=0;n--)if(this.items[n]===e){this.items.splice(n,1),this.stackTop--,this._updateCurrentElement();break}}tryPeekProperlyNestedBodyElement(){let e=this.items[1];return e&&this.treeAdapter.getTagName(e)===i.BODY?e:null}contains(e){return this._indexOf(e)>-1}getCommonAncestor(e){let n=this._indexOf(e);return--n>=0?this.items[n]:null}isRootHtmlElementCurrent(){return 0===this.stackTop&&this.currentTagName===i.HTML}hasInScope(e){for(let n=this.stackTop;n>=0;n--){let r=this.treeAdapter.getTagName(this.items[n]),a=this.treeAdapter.getNamespaceURI(this.items[n]);if(r===e&&a===o.HTML)break;if(u(r,a))return!1}return!0}hasNumberedHeaderInScope(){for(let e=this.stackTop;e>=0;e--){let n=this.treeAdapter.getTagName(this.items[e]),r=this.treeAdapter.getNamespaceURI(this.items[e]);if((n===i.H1||n===i.H2||n===i.H3||n===i.H4||n===i.H5||n===i.H6)&&r===o.HTML)break;if(u(n,r))return!1}return!0}hasInListItemScope(e){for(let n=this.stackTop;n>=0;n--){let r=this.treeAdapter.getTagName(this.items[n]),a=this.treeAdapter.getNamespaceURI(this.items[n]);if(r===e&&a===o.HTML)break;if((r===i.UL||r===i.OL)&&a===o.HTML||u(r,a))return!1}return!0}hasInButtonScope(e){for(let n=this.stackTop;n>=0;n--){let r=this.treeAdapter.getTagName(this.items[n]),a=this.treeAdapter.getNamespaceURI(this.items[n]);if(r===e&&a===o.HTML)break;if(r===i.BUTTON&&a===o.HTML||u(r,a))return!1}return!0}hasInTableScope(e){for(let n=this.stackTop;n>=0;n--){let r=this.treeAdapter.getTagName(this.items[n]),a=this.treeAdapter.getNamespaceURI(this.items[n]);if(a===o.HTML){if(r===e)break;if(r===i.TABLE||r===i.TEMPLATE||r===i.HTML)return!1}}return!0}hasTableBodyContextInTableScope(){for(let e=this.stackTop;e>=0;e--){let n=this.treeAdapter.getTagName(this.items[e]),r=this.treeAdapter.getNamespaceURI(this.items[e]);if(r===o.HTML){if(n===i.TBODY||n===i.THEAD||n===i.TFOOT)break;if(n===i.TABLE||n===i.HTML)return!1}}return!0}hasInSelectScope(e){for(let n=this.stackTop;n>=0;n--){let r=this.treeAdapter.getTagName(this.items[n]),a=this.treeAdapter.getNamespaceURI(this.items[n]);if(a===o.HTML){if(r===e)break;if(r!==i.OPTION&&r!==i.OPTGROUP)return!1}}return!0}generateImpliedEndTags(){for(;s(this.currentTagName);)this.pop()}generateImpliedEndTagsThoroughly(){for(;l(this.currentTagName);)this.pop()}generateImpliedEndTagsWithExclusion(e){for(;s(this.currentTagName)&&this.currentTagName!==e;)this.pop()}}},1672:function(e,n,r){"use strict";let a=r(47757),i=r(79740),o=r(30959),s=r(97700),l=i.CODE_POINTS,u=i.CODE_POINT_SEQUENCES,c={128:8364,130:8218,131:402,132:8222,133:8230,134:8224,135:8225,136:710,137:8240,138:352,139:8249,140:338,142:381,145:8216,146:8217,147:8220,148:8221,149:8226,150:8211,151:8212,152:732,153:8482,154:353,155:8250,156:339,158:382,159:376},p="DATA_STATE",m="RCDATA_STATE",d="RAWTEXT_STATE",h="SCRIPT_DATA_STATE",f="PLAINTEXT_STATE",g="TAG_OPEN_STATE",b="END_TAG_OPEN_STATE",k="TAG_NAME_STATE",y="RCDATA_LESS_THAN_SIGN_STATE",v="RCDATA_END_TAG_OPEN_STATE",E="RCDATA_END_TAG_NAME_STATE",T="RAWTEXT_LESS_THAN_SIGN_STATE",_="RAWTEXT_END_TAG_OPEN_STATE",x="RAWTEXT_END_TAG_NAME_STATE",w="SCRIPT_DATA_LESS_THAN_SIGN_STATE",A="SCRIPT_DATA_END_TAG_OPEN_STATE",j="SCRIPT_DATA_END_TAG_NAME_STATE",S="SCRIPT_DATA_ESCAPE_START_STATE",C="SCRIPT_DATA_ESCAPE_START_DASH_STATE",N="SCRIPT_DATA_ESCAPED_STATE",O="SCRIPT_DATA_ESCAPED_DASH_STATE",R="SCRIPT_DATA_ESCAPED_DASH_DASH_STATE",M="SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN_STATE",I="SCRIPT_DATA_ESCAPED_END_TAG_OPEN_STATE",L="SCRIPT_DATA_ESCAPED_END_TAG_NAME_STATE",P="SCRIPT_DATA_DOUBLE_ESCAPE_START_STATE",D="SCRIPT_DATA_DOUBLE_ESCAPED_STATE",z="SCRIPT_DATA_DOUBLE_ESCAPED_DASH_STATE",F="SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH_STATE",B="SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN_STATE",H="SCRIPT_DATA_DOUBLE_ESCAPE_END_STATE",U="BEFORE_ATTRIBUTE_NAME_STATE",G="ATTRIBUTE_NAME_STATE",$="AFTER_ATTRIBUTE_NAME_STATE",K="BEFORE_ATTRIBUTE_VALUE_STATE",V="ATTRIBUTE_VALUE_DOUBLE_QUOTED_STATE",q="ATTRIBUTE_VALUE_SINGLE_QUOTED_STATE",W="ATTRIBUTE_VALUE_UNQUOTED_STATE",Y="AFTER_ATTRIBUTE_VALUE_QUOTED_STATE",Q="SELF_CLOSING_START_TAG_STATE",Z="BOGUS_COMMENT_STATE",X="MARKUP_DECLARATION_OPEN_STATE",J="COMMENT_START_STATE",ee="COMMENT_START_DASH_STATE",et="COMMENT_STATE",en="COMMENT_LESS_THAN_SIGN_STATE",er="COMMENT_LESS_THAN_SIGN_BANG_STATE",ea="COMMENT_LESS_THAN_SIGN_BANG_DASH_STATE",ei="COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH_STATE",eo="COMMENT_END_DASH_STATE",es="COMMENT_END_STATE",el="COMMENT_END_BANG_STATE",eu="DOCTYPE_STATE",ec="BEFORE_DOCTYPE_NAME_STATE",ep="DOCTYPE_NAME_STATE",em="AFTER_DOCTYPE_NAME_STATE",ed="AFTER_DOCTYPE_PUBLIC_KEYWORD_STATE",eh="BEFORE_DOCTYPE_PUBLIC_IDENTIFIER_STATE",ef="DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED_STATE",eg="DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED_STATE",eb="AFTER_DOCTYPE_PUBLIC_IDENTIFIER_STATE",ek="BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS_STATE",ey="AFTER_DOCTYPE_SYSTEM_KEYWORD_STATE",ev="BEFORE_DOCTYPE_SYSTEM_IDENTIFIER_STATE",eE="DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED_STATE",eT="DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED_STATE",e_="AFTER_DOCTYPE_SYSTEM_IDENTIFIER_STATE",ex="BOGUS_DOCTYPE_STATE",ew="CDATA_SECTION_STATE",eA="CDATA_SECTION_BRACKET_STATE",ej="CDATA_SECTION_END_STATE",eS="CHARACTER_REFERENCE_STATE",eC="NAMED_CHARACTER_REFERENCE_STATE",eN="AMBIGUOS_AMPERSAND_STATE",eO="NUMERIC_CHARACTER_REFERENCE_STATE",eR="HEXADEMICAL_CHARACTER_REFERENCE_START_STATE",eM="DECIMAL_CHARACTER_REFERENCE_START_STATE",eI="HEXADEMICAL_CHARACTER_REFERENCE_STATE",eL="DECIMAL_CHARACTER_REFERENCE_STATE",eP="NUMERIC_CHARACTER_REFERENCE_END_STATE";function eD(e){return e===l.SPACE||e===l.LINE_FEED||e===l.TABULATION||e===l.FORM_FEED}function ez(e){return e>=l.DIGIT_0&&e<=l.DIGIT_9}function eF(e){return e>=l.LATIN_CAPITAL_A&&e<=l.LATIN_CAPITAL_Z}function eB(e){return e>=l.LATIN_SMALL_A&&e<=l.LATIN_SMALL_Z}function eH(e){return eB(e)||eF(e)}function eU(e){return eH(e)||ez(e)}function eG(e){return e>=l.LATIN_CAPITAL_A&&e<=l.LATIN_CAPITAL_F}function e$(e){return e>=l.LATIN_SMALL_A&&e<=l.LATIN_SMALL_F}function eK(e){return e+32}function eV(e){return e<=65535?String.fromCharCode(e):String.fromCharCode((e-=65536)>>>10&1023|55296)+String.fromCharCode(56320|1023&e)}function eq(e){return String.fromCharCode(eK(e))}function eW(e,n){let r=o[++e],a=++e,i=a+r-1;for(;a<=i;){let s=a+i>>>1,l=o[s];if(ln))return o[s+r];i=s-1}}return -1}class eY{constructor(){this.preprocessor=new a,this.tokenQueue=[],this.allowCDATA=!1,this.state=p,this.returnState="",this.charRefCode=-1,this.tempBuff=[],this.lastStartTagName="",this.consumedAfterSnapshot=-1,this.active=!1,this.currentCharacterToken=null,this.currentToken=null,this.currentAttr=null}_err(){}_errOnNextCodePoint(e){this._consume(),this._err(e),this._unconsume()}getNextToken(){for(;!this.tokenQueue.length&&this.active;){this.consumedAfterSnapshot=0;let e=this._consume();this._ensureHibernation()||this[this.state](e)}return this.tokenQueue.shift()}write(e,n){this.active=!0,this.preprocessor.write(e,n)}insertHtmlAtCurrentPos(e){this.active=!0,this.preprocessor.insertHtmlAtCurrentPos(e)}_ensureHibernation(){if(this.preprocessor.endOfChunkHit){for(;this.consumedAfterSnapshot>0;this.consumedAfterSnapshot--)this.preprocessor.retreat();return this.active=!1,this.tokenQueue.push({type:eY.HIBERNATION_TOKEN}),!0}return!1}_consume(){return this.consumedAfterSnapshot++,this.preprocessor.advance()}_unconsume(){this.consumedAfterSnapshot--,this.preprocessor.retreat()}_reconsumeInState(e){this.state=e,this._unconsume()}_consumeSequenceIfMatch(e,n,r){let a=0,i=!0,o=e.length,s=0,u=n,c;for(;s0&&(u=this._consume(),a++),u===l.EOF||u!==(c=e[s])&&(r||u!==eK(c))){i=!1;break}if(!i)for(;a--;)this._unconsume();return i}_isTempBufferEqualToScriptString(){if(this.tempBuff.length!==u.SCRIPT_STRING.length)return!1;for(let e=0;e0&&this._err(s.endTagWithAttributes),e.selfClosing&&this._err(s.endTagWithTrailingSolidus)),this.tokenQueue.push(e)}_emitCurrentCharacterToken(){this.currentCharacterToken&&(this.tokenQueue.push(this.currentCharacterToken),this.currentCharacterToken=null)}_emitEOFToken(){this._createEOFToken(),this._emitCurrentToken()}_appendCharToCurrentCharacterToken(e,n){this.currentCharacterToken&&this.currentCharacterToken.type!==e&&this._emitCurrentCharacterToken(),this.currentCharacterToken?this.currentCharacterToken.chars+=n:this._createCharacterToken(e,n)}_emitCodePoint(e){let n=eY.CHARACTER_TOKEN;eD(e)?n=eY.WHITESPACE_CHARACTER_TOKEN:e===l.NULL&&(n=eY.NULL_CHARACTER_TOKEN),this._appendCharToCurrentCharacterToken(n,eV(e))}_emitSeveralCodePoints(e){for(let n=0;n-1;){let i=o[a],s=i<7,u=s&&1&i;u&&(n=2&i?[o[++a],o[++a]]:[o[++a]],r=0);let c=this._consume();if(this.tempBuff.push(c),r++,c===l.EOF)break;a=s?4&i?eW(a,c):-1:c===i?++a:-1}for(;r--;)this.tempBuff.pop(),this._unconsume();return n}_isCharacterReferenceInAttribute(){return this.returnState===V||this.returnState===q||this.returnState===W}_isCharacterReferenceAttributeQuirk(e){if(!e&&this._isCharacterReferenceInAttribute()){let n=this._consume();return this._unconsume(),n===l.EQUALS_SIGN||eU(n)}return!1}_flushCodePointsConsumedAsCharacterReference(){if(this._isCharacterReferenceInAttribute())for(let e=0;e")):e===l.NULL?(this._err(s.unexpectedNullCharacter),this.state=N,this._emitChars(i.REPLACEMENT_CHARACTER)):e===l.EOF?(this._err(s.eofInScriptHtmlCommentLikeText),this._emitEOFToken()):(this.state=N,this._emitCodePoint(e))}[M](e){e===l.SOLIDUS?(this.tempBuff=[],this.state=I):eH(e)?(this.tempBuff=[],this._emitChars("<"),this._reconsumeInState(P)):(this._emitChars("<"),this._reconsumeInState(N))}[I](e){eH(e)?(this._createEndTagToken(),this._reconsumeInState(L)):(this._emitChars("")):e===l.NULL?(this._err(s.unexpectedNullCharacter),this.state=D,this._emitChars(i.REPLACEMENT_CHARACTER)):e===l.EOF?(this._err(s.eofInScriptHtmlCommentLikeText),this._emitEOFToken()):(this.state=D,this._emitCodePoint(e))}[B](e){e===l.SOLIDUS?(this.tempBuff=[],this.state=H,this._emitChars("/")):this._reconsumeInState(D)}[H](e){eD(e)||e===l.SOLIDUS||e===l.GREATER_THAN_SIGN?(this.state=this._isTempBufferEqualToScriptString()?N:D,this._emitCodePoint(e)):eF(e)?(this.tempBuff.push(eK(e)),this._emitCodePoint(e)):eB(e)?(this.tempBuff.push(e),this._emitCodePoint(e)):this._reconsumeInState(D)}[U](e){!eD(e)&&(e===l.SOLIDUS||e===l.GREATER_THAN_SIGN||e===l.EOF?this._reconsumeInState($):e===l.EQUALS_SIGN?(this._err(s.unexpectedEqualsSignBeforeAttributeName),this._createAttr("="),this.state=G):(this._createAttr(""),this._reconsumeInState(G)))}[G](e){eD(e)||e===l.SOLIDUS||e===l.GREATER_THAN_SIGN||e===l.EOF?(this._leaveAttrName($),this._unconsume()):e===l.EQUALS_SIGN?this._leaveAttrName(K):eF(e)?this.currentAttr.name+=eq(e):e===l.QUOTATION_MARK||e===l.APOSTROPHE||e===l.LESS_THAN_SIGN?(this._err(s.unexpectedCharacterInAttributeName),this.currentAttr.name+=eV(e)):e===l.NULL?(this._err(s.unexpectedNullCharacter),this.currentAttr.name+=i.REPLACEMENT_CHARACTER):this.currentAttr.name+=eV(e)}[$](e){!eD(e)&&(e===l.SOLIDUS?this.state=Q:e===l.EQUALS_SIGN?this.state=K:e===l.GREATER_THAN_SIGN?(this.state=p,this._emitCurrentToken()):e===l.EOF?(this._err(s.eofInTag),this._emitEOFToken()):(this._createAttr(""),this._reconsumeInState(G)))}[K](e){!eD(e)&&(e===l.QUOTATION_MARK?this.state=V:e===l.APOSTROPHE?this.state=q:e===l.GREATER_THAN_SIGN?(this._err(s.missingAttributeValue),this.state=p,this._emitCurrentToken()):this._reconsumeInState(W))}[V](e){e===l.QUOTATION_MARK?this.state=Y:e===l.AMPERSAND?(this.returnState=V,this.state=eS):e===l.NULL?(this._err(s.unexpectedNullCharacter),this.currentAttr.value+=i.REPLACEMENT_CHARACTER):e===l.EOF?(this._err(s.eofInTag),this._emitEOFToken()):this.currentAttr.value+=eV(e)}[q](e){e===l.APOSTROPHE?this.state=Y:e===l.AMPERSAND?(this.returnState=q,this.state=eS):e===l.NULL?(this._err(s.unexpectedNullCharacter),this.currentAttr.value+=i.REPLACEMENT_CHARACTER):e===l.EOF?(this._err(s.eofInTag),this._emitEOFToken()):this.currentAttr.value+=eV(e)}[W](e){eD(e)?this._leaveAttrValue(U):e===l.AMPERSAND?(this.returnState=W,this.state=eS):e===l.GREATER_THAN_SIGN?(this._leaveAttrValue(p),this._emitCurrentToken()):e===l.NULL?(this._err(s.unexpectedNullCharacter),this.currentAttr.value+=i.REPLACEMENT_CHARACTER):e===l.QUOTATION_MARK||e===l.APOSTROPHE||e===l.LESS_THAN_SIGN||e===l.EQUALS_SIGN||e===l.GRAVE_ACCENT?(this._err(s.unexpectedCharacterInUnquotedAttributeValue),this.currentAttr.value+=eV(e)):e===l.EOF?(this._err(s.eofInTag),this._emitEOFToken()):this.currentAttr.value+=eV(e)}[Y](e){eD(e)?this._leaveAttrValue(U):e===l.SOLIDUS?this._leaveAttrValue(Q):e===l.GREATER_THAN_SIGN?(this._leaveAttrValue(p),this._emitCurrentToken()):e===l.EOF?(this._err(s.eofInTag),this._emitEOFToken()):(this._err(s.missingWhitespaceBetweenAttributes),this._reconsumeInState(U))}[Q](e){e===l.GREATER_THAN_SIGN?(this.currentToken.selfClosing=!0,this.state=p,this._emitCurrentToken()):e===l.EOF?(this._err(s.eofInTag),this._emitEOFToken()):(this._err(s.unexpectedSolidusInTag),this._reconsumeInState(U))}[Z](e){e===l.GREATER_THAN_SIGN?(this.state=p,this._emitCurrentToken()):e===l.EOF?(this._emitCurrentToken(),this._emitEOFToken()):e===l.NULL?(this._err(s.unexpectedNullCharacter),this.currentToken.data+=i.REPLACEMENT_CHARACTER):this.currentToken.data+=eV(e)}[X](e){this._consumeSequenceIfMatch(u.DASH_DASH_STRING,e,!0)?(this._createCommentToken(),this.state=J):this._consumeSequenceIfMatch(u.DOCTYPE_STRING,e,!1)?this.state=eu:this._consumeSequenceIfMatch(u.CDATA_START_STRING,e,!0)?this.allowCDATA?this.state=ew:(this._err(s.cdataInHtmlContent),this._createCommentToken(),this.currentToken.data="[CDATA[",this.state=Z):this._ensureHibernation()||(this._err(s.incorrectlyOpenedComment),this._createCommentToken(),this._reconsumeInState(Z))}[J](e){e===l.HYPHEN_MINUS?this.state=ee:e===l.GREATER_THAN_SIGN?(this._err(s.abruptClosingOfEmptyComment),this.state=p,this._emitCurrentToken()):this._reconsumeInState(et)}[ee](e){e===l.HYPHEN_MINUS?this.state=es:e===l.GREATER_THAN_SIGN?(this._err(s.abruptClosingOfEmptyComment),this.state=p,this._emitCurrentToken()):e===l.EOF?(this._err(s.eofInComment),this._emitCurrentToken(),this._emitEOFToken()):(this.currentToken.data+="-",this._reconsumeInState(et))}[et](e){e===l.HYPHEN_MINUS?this.state=eo:e===l.LESS_THAN_SIGN?(this.currentToken.data+="<",this.state=en):e===l.NULL?(this._err(s.unexpectedNullCharacter),this.currentToken.data+=i.REPLACEMENT_CHARACTER):e===l.EOF?(this._err(s.eofInComment),this._emitCurrentToken(),this._emitEOFToken()):this.currentToken.data+=eV(e)}[en](e){e===l.EXCLAMATION_MARK?(this.currentToken.data+="!",this.state=er):e===l.LESS_THAN_SIGN?this.currentToken.data+="!":this._reconsumeInState(et)}[er](e){e===l.HYPHEN_MINUS?this.state=ea:this._reconsumeInState(et)}[ea](e){e===l.HYPHEN_MINUS?this.state=ei:this._reconsumeInState(eo)}[ei](e){e!==l.GREATER_THAN_SIGN&&e!==l.EOF&&this._err(s.nestedComment),this._reconsumeInState(es)}[eo](e){e===l.HYPHEN_MINUS?this.state=es:e===l.EOF?(this._err(s.eofInComment),this._emitCurrentToken(),this._emitEOFToken()):(this.currentToken.data+="-",this._reconsumeInState(et))}[es](e){e===l.GREATER_THAN_SIGN?(this.state=p,this._emitCurrentToken()):e===l.EXCLAMATION_MARK?this.state=el:e===l.HYPHEN_MINUS?this.currentToken.data+="-":e===l.EOF?(this._err(s.eofInComment),this._emitCurrentToken(),this._emitEOFToken()):(this.currentToken.data+="--",this._reconsumeInState(et))}[el](e){e===l.HYPHEN_MINUS?(this.currentToken.data+="--!",this.state=eo):e===l.GREATER_THAN_SIGN?(this._err(s.incorrectlyClosedComment),this.state=p,this._emitCurrentToken()):e===l.EOF?(this._err(s.eofInComment),this._emitCurrentToken(),this._emitEOFToken()):(this.currentToken.data+="--!",this._reconsumeInState(et))}[eu](e){eD(e)?this.state=ec:e===l.GREATER_THAN_SIGN?this._reconsumeInState(ec):e===l.EOF?(this._err(s.eofInDoctype),this._createDoctypeToken(null),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):(this._err(s.missingWhitespaceBeforeDoctypeName),this._reconsumeInState(ec))}[ec](e){!eD(e)&&(eF(e)?(this._createDoctypeToken(eq(e)),this.state=ep):e===l.NULL?(this._err(s.unexpectedNullCharacter),this._createDoctypeToken(i.REPLACEMENT_CHARACTER),this.state=ep):e===l.GREATER_THAN_SIGN?(this._err(s.missingDoctypeName),this._createDoctypeToken(null),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this.state=p):e===l.EOF?(this._err(s.eofInDoctype),this._createDoctypeToken(null),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):(this._createDoctypeToken(eV(e)),this.state=ep))}[ep](e){eD(e)?this.state=em:e===l.GREATER_THAN_SIGN?(this.state=p,this._emitCurrentToken()):eF(e)?this.currentToken.name+=eq(e):e===l.NULL?(this._err(s.unexpectedNullCharacter),this.currentToken.name+=i.REPLACEMENT_CHARACTER):e===l.EOF?(this._err(s.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):this.currentToken.name+=eV(e)}[em](e){!eD(e)&&(e===l.GREATER_THAN_SIGN?(this.state=p,this._emitCurrentToken()):e===l.EOF?(this._err(s.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):this._consumeSequenceIfMatch(u.PUBLIC_STRING,e,!1)?this.state=ed:this._consumeSequenceIfMatch(u.SYSTEM_STRING,e,!1)?this.state=ey:this._ensureHibernation()||(this._err(s.invalidCharacterSequenceAfterDoctypeName),this.currentToken.forceQuirks=!0,this._reconsumeInState(ex)))}[ed](e){eD(e)?this.state=eh:e===l.QUOTATION_MARK?(this._err(s.missingWhitespaceAfterDoctypePublicKeyword),this.currentToken.publicId="",this.state=ef):e===l.APOSTROPHE?(this._err(s.missingWhitespaceAfterDoctypePublicKeyword),this.currentToken.publicId="",this.state=eg):e===l.GREATER_THAN_SIGN?(this._err(s.missingDoctypePublicIdentifier),this.currentToken.forceQuirks=!0,this.state=p,this._emitCurrentToken()):e===l.EOF?(this._err(s.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):(this._err(s.missingQuoteBeforeDoctypePublicIdentifier),this.currentToken.forceQuirks=!0,this._reconsumeInState(ex))}[eh](e){!eD(e)&&(e===l.QUOTATION_MARK?(this.currentToken.publicId="",this.state=ef):e===l.APOSTROPHE?(this.currentToken.publicId="",this.state=eg):e===l.GREATER_THAN_SIGN?(this._err(s.missingDoctypePublicIdentifier),this.currentToken.forceQuirks=!0,this.state=p,this._emitCurrentToken()):e===l.EOF?(this._err(s.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):(this._err(s.missingQuoteBeforeDoctypePublicIdentifier),this.currentToken.forceQuirks=!0,this._reconsumeInState(ex)))}[ef](e){e===l.QUOTATION_MARK?this.state=eb:e===l.NULL?(this._err(s.unexpectedNullCharacter),this.currentToken.publicId+=i.REPLACEMENT_CHARACTER):e===l.GREATER_THAN_SIGN?(this._err(s.abruptDoctypePublicIdentifier),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this.state=p):e===l.EOF?(this._err(s.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):this.currentToken.publicId+=eV(e)}[eg](e){e===l.APOSTROPHE?this.state=eb:e===l.NULL?(this._err(s.unexpectedNullCharacter),this.currentToken.publicId+=i.REPLACEMENT_CHARACTER):e===l.GREATER_THAN_SIGN?(this._err(s.abruptDoctypePublicIdentifier),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this.state=p):e===l.EOF?(this._err(s.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):this.currentToken.publicId+=eV(e)}[eb](e){eD(e)?this.state=ek:e===l.GREATER_THAN_SIGN?(this.state=p,this._emitCurrentToken()):e===l.QUOTATION_MARK?(this._err(s.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),this.currentToken.systemId="",this.state=eE):e===l.APOSTROPHE?(this._err(s.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),this.currentToken.systemId="",this.state=eT):e===l.EOF?(this._err(s.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):(this._err(s.missingQuoteBeforeDoctypeSystemIdentifier),this.currentToken.forceQuirks=!0,this._reconsumeInState(ex))}[ek](e){!eD(e)&&(e===l.GREATER_THAN_SIGN?(this._emitCurrentToken(),this.state=p):e===l.QUOTATION_MARK?(this.currentToken.systemId="",this.state=eE):e===l.APOSTROPHE?(this.currentToken.systemId="",this.state=eT):e===l.EOF?(this._err(s.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):(this._err(s.missingQuoteBeforeDoctypeSystemIdentifier),this.currentToken.forceQuirks=!0,this._reconsumeInState(ex)))}[ey](e){eD(e)?this.state=ev:e===l.QUOTATION_MARK?(this._err(s.missingWhitespaceAfterDoctypeSystemKeyword),this.currentToken.systemId="",this.state=eE):e===l.APOSTROPHE?(this._err(s.missingWhitespaceAfterDoctypeSystemKeyword),this.currentToken.systemId="",this.state=eT):e===l.GREATER_THAN_SIGN?(this._err(s.missingDoctypeSystemIdentifier),this.currentToken.forceQuirks=!0,this.state=p,this._emitCurrentToken()):e===l.EOF?(this._err(s.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):(this._err(s.missingQuoteBeforeDoctypeSystemIdentifier),this.currentToken.forceQuirks=!0,this._reconsumeInState(ex))}[ev](e){!eD(e)&&(e===l.QUOTATION_MARK?(this.currentToken.systemId="",this.state=eE):e===l.APOSTROPHE?(this.currentToken.systemId="",this.state=eT):e===l.GREATER_THAN_SIGN?(this._err(s.missingDoctypeSystemIdentifier),this.currentToken.forceQuirks=!0,this.state=p,this._emitCurrentToken()):e===l.EOF?(this._err(s.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):(this._err(s.missingQuoteBeforeDoctypeSystemIdentifier),this.currentToken.forceQuirks=!0,this._reconsumeInState(ex)))}[eE](e){e===l.QUOTATION_MARK?this.state=e_:e===l.NULL?(this._err(s.unexpectedNullCharacter),this.currentToken.systemId+=i.REPLACEMENT_CHARACTER):e===l.GREATER_THAN_SIGN?(this._err(s.abruptDoctypeSystemIdentifier),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this.state=p):e===l.EOF?(this._err(s.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):this.currentToken.systemId+=eV(e)}[eT](e){e===l.APOSTROPHE?this.state=e_:e===l.NULL?(this._err(s.unexpectedNullCharacter),this.currentToken.systemId+=i.REPLACEMENT_CHARACTER):e===l.GREATER_THAN_SIGN?(this._err(s.abruptDoctypeSystemIdentifier),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this.state=p):e===l.EOF?(this._err(s.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):this.currentToken.systemId+=eV(e)}[e_](e){!eD(e)&&(e===l.GREATER_THAN_SIGN?(this._emitCurrentToken(),this.state=p):e===l.EOF?(this._err(s.eofInDoctype),this.currentToken.forceQuirks=!0,this._emitCurrentToken(),this._emitEOFToken()):(this._err(s.unexpectedCharacterAfterDoctypeSystemIdentifier),this._reconsumeInState(ex)))}[ex](e){e===l.GREATER_THAN_SIGN?(this._emitCurrentToken(),this.state=p):e===l.NULL?this._err(s.unexpectedNullCharacter):e===l.EOF&&(this._emitCurrentToken(),this._emitEOFToken())}[ew](e){e===l.RIGHT_SQUARE_BRACKET?this.state=eA:e===l.EOF?(this._err(s.eofInCdata),this._emitEOFToken()):this._emitCodePoint(e)}[eA](e){e===l.RIGHT_SQUARE_BRACKET?this.state=ej:(this._emitChars("]"),this._reconsumeInState(ew))}[ej](e){e===l.GREATER_THAN_SIGN?this.state=p:e===l.RIGHT_SQUARE_BRACKET?this._emitChars("]"):(this._emitChars("]]"),this._reconsumeInState(ew))}[eS](e){this.tempBuff=[l.AMPERSAND],e===l.NUMBER_SIGN?(this.tempBuff.push(e),this.state=eO):eU(e)?this._reconsumeInState(eC):(this._flushCodePointsConsumedAsCharacterReference(),this._reconsumeInState(this.returnState))}[eC](e){let n=this._matchNamedCharacterReference(e);if(this._ensureHibernation())this.tempBuff=[l.AMPERSAND];else if(n){let r=this.tempBuff[this.tempBuff.length-1]===l.SEMICOLON;this._isCharacterReferenceAttributeQuirk(r)||(r||this._errOnNextCodePoint(s.missingSemicolonAfterCharacterReference),this.tempBuff=n),this._flushCodePointsConsumedAsCharacterReference(),this.state=this.returnState}else this._flushCodePointsConsumedAsCharacterReference(),this.state=eN}[eN](e){eU(e)?this._isCharacterReferenceInAttribute()?this.currentAttr.value+=eV(e):this._emitCodePoint(e):(e===l.SEMICOLON&&this._err(s.unknownNamedCharacterReference),this._reconsumeInState(this.returnState))}[eO](e){this.charRefCode=0,e===l.LATIN_SMALL_X||e===l.LATIN_CAPITAL_X?(this.tempBuff.push(e),this.state=eR):this._reconsumeInState(eM)}[eR](e){var n;ez(e)||eG(e)||e$(e)?this._reconsumeInState(eI):(this._err(s.absenceOfDigitsInNumericCharacterReference),this._flushCodePointsConsumedAsCharacterReference(),this._reconsumeInState(this.returnState))}[eM](e){ez(e)?this._reconsumeInState(eL):(this._err(s.absenceOfDigitsInNumericCharacterReference),this._flushCodePointsConsumedAsCharacterReference(),this._reconsumeInState(this.returnState))}[eI](e){eG(e)?this.charRefCode=16*this.charRefCode+e-55:e$(e)?this.charRefCode=16*this.charRefCode+e-87:ez(e)?this.charRefCode=16*this.charRefCode+e-48:e===l.SEMICOLON?this.state=eP:(this._err(s.missingSemicolonAfterCharacterReference),this._reconsumeInState(eP))}[eL](e){ez(e)?this.charRefCode=10*this.charRefCode+e-48:e===l.SEMICOLON?this.state=eP:(this._err(s.missingSemicolonAfterCharacterReference),this._reconsumeInState(eP))}[eP](){if(this.charRefCode===l.NULL)this._err(s.nullCharacterReference),this.charRefCode=l.REPLACEMENT_CHARACTER;else if(this.charRefCode>1114111)this._err(s.characterReferenceOutsideUnicodeRange),this.charRefCode=l.REPLACEMENT_CHARACTER;else if(i.isSurrogate(this.charRefCode))this._err(s.surrogateCharacterReference),this.charRefCode=l.REPLACEMENT_CHARACTER;else if(i.isUndefinedCodePoint(this.charRefCode))this._err(s.noncharacterCharacterReference);else if(i.isControlCodePoint(this.charRefCode)||this.charRefCode===l.CARRIAGE_RETURN){this._err(s.controlCharacterReference);let e=c[this.charRefCode];e&&(this.charRefCode=e)}this.tempBuff=[this.charRefCode],this._flushCodePointsConsumedAsCharacterReference(),this._reconsumeInState(this.returnState)}}eY.CHARACTER_TOKEN="CHARACTER_TOKEN",eY.NULL_CHARACTER_TOKEN="NULL_CHARACTER_TOKEN",eY.WHITESPACE_CHARACTER_TOKEN="WHITESPACE_CHARACTER_TOKEN",eY.START_TAG_TOKEN="START_TAG_TOKEN",eY.END_TAG_TOKEN="END_TAG_TOKEN",eY.COMMENT_TOKEN="COMMENT_TOKEN",eY.DOCTYPE_TOKEN="DOCTYPE_TOKEN",eY.EOF_TOKEN="EOF_TOKEN",eY.HIBERNATION_TOKEN="HIBERNATION_TOKEN",eY.MODE={DATA:p,RCDATA:m,RAWTEXT:d,SCRIPT_DATA:h,PLAINTEXT:f},eY.getTokenAttr=function(e,n){for(let r=e.attrs.length-1;r>=0;r--)if(e.attrs[r].name===n)return e.attrs[r].value;return null},e.exports=eY},30959:function(e){"use strict";e.exports=new Uint16Array([4,52,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,106,303,412,810,1432,1701,1796,1987,2114,2360,2420,2484,3170,3251,4140,4393,4575,4610,5106,5512,5728,6117,6274,6315,6345,6427,6516,7002,7910,8733,9323,9870,10170,10631,10893,11318,11386,11467,12773,13092,14474,14922,15448,15542,16419,17666,18166,18611,19004,19095,19298,19397,4,16,69,77,97,98,99,102,103,108,109,110,111,112,114,115,116,117,140,150,158,169,176,194,199,210,216,222,226,242,256,266,283,294,108,105,103,5,198,1,59,148,1,198,80,5,38,1,59,156,1,38,99,117,116,101,5,193,1,59,167,1,193,114,101,118,101,59,1,258,4,2,105,121,182,191,114,99,5,194,1,59,189,1,194,59,1,1040,114,59,3,55349,56580,114,97,118,101,5,192,1,59,208,1,192,112,104,97,59,1,913,97,99,114,59,1,256,100,59,1,10835,4,2,103,112,232,237,111,110,59,1,260,102,59,3,55349,56632,112,108,121,70,117,110,99,116,105,111,110,59,1,8289,105,110,103,5,197,1,59,264,1,197,4,2,99,115,272,277,114,59,3,55349,56476,105,103,110,59,1,8788,105,108,100,101,5,195,1,59,292,1,195,109,108,5,196,1,59,301,1,196,4,8,97,99,101,102,111,114,115,117,321,350,354,383,388,394,400,405,4,2,99,114,327,336,107,115,108,97,115,104,59,1,8726,4,2,118,119,342,345,59,1,10983,101,100,59,1,8966,121,59,1,1041,4,3,99,114,116,362,369,379,97,117,115,101,59,1,8757,110,111,117,108,108,105,115,59,1,8492,97,59,1,914,114,59,3,55349,56581,112,102,59,3,55349,56633,101,118,101,59,1,728,99,114,59,1,8492,109,112,101,113,59,1,8782,4,14,72,79,97,99,100,101,102,104,105,108,111,114,115,117,442,447,456,504,542,547,569,573,577,616,678,784,790,796,99,121,59,1,1063,80,89,5,169,1,59,454,1,169,4,3,99,112,121,464,470,497,117,116,101,59,1,262,4,2,59,105,476,478,1,8914,116,97,108,68,105,102,102,101,114,101,110,116,105,97,108,68,59,1,8517,108,101,121,115,59,1,8493,4,4,97,101,105,111,514,520,530,535,114,111,110,59,1,268,100,105,108,5,199,1,59,528,1,199,114,99,59,1,264,110,105,110,116,59,1,8752,111,116,59,1,266,4,2,100,110,553,560,105,108,108,97,59,1,184,116,101,114,68,111,116,59,1,183,114,59,1,8493,105,59,1,935,114,99,108,101,4,4,68,77,80,84,591,596,603,609,111,116,59,1,8857,105,110,117,115,59,1,8854,108,117,115,59,1,8853,105,109,101,115,59,1,8855,111,4,2,99,115,623,646,107,119,105,115,101,67,111,110,116,111,117,114,73,110,116,101,103,114,97,108,59,1,8754,101,67,117,114,108,121,4,2,68,81,658,671,111,117,98,108,101,81,117,111,116,101,59,1,8221,117,111,116,101,59,1,8217,4,4,108,110,112,117,688,701,736,753,111,110,4,2,59,101,696,698,1,8759,59,1,10868,4,3,103,105,116,709,717,722,114,117,101,110,116,59,1,8801,110,116,59,1,8751,111,117,114,73,110,116,101,103,114,97,108,59,1,8750,4,2,102,114,742,745,59,1,8450,111,100,117,99,116,59,1,8720,110,116,101,114,67,108,111,99,107,119,105,115,101,67,111,110,116,111,117,114,73,110,116,101,103,114,97,108,59,1,8755,111,115,115,59,1,10799,99,114,59,3,55349,56478,112,4,2,59,67,803,805,1,8915,97,112,59,1,8781,4,11,68,74,83,90,97,99,101,102,105,111,115,834,850,855,860,865,888,903,916,921,1011,1415,4,2,59,111,840,842,1,8517,116,114,97,104,100,59,1,10513,99,121,59,1,1026,99,121,59,1,1029,99,121,59,1,1039,4,3,103,114,115,873,879,883,103,101,114,59,1,8225,114,59,1,8609,104,118,59,1,10980,4,2,97,121,894,900,114,111,110,59,1,270,59,1,1044,108,4,2,59,116,910,912,1,8711,97,59,1,916,114,59,3,55349,56583,4,2,97,102,927,998,4,2,99,109,933,992,114,105,116,105,99,97,108,4,4,65,68,71,84,950,957,978,985,99,117,116,101,59,1,180,111,4,2,116,117,964,967,59,1,729,98,108,101,65,99,117,116,101,59,1,733,114,97,118,101,59,1,96,105,108,100,101,59,1,732,111,110,100,59,1,8900,102,101,114,101,110,116,105,97,108,68,59,1,8518,4,4,112,116,117,119,1021,1026,1048,1249,102,59,3,55349,56635,4,3,59,68,69,1034,1036,1041,1,168,111,116,59,1,8412,113,117,97,108,59,1,8784,98,108,101,4,6,67,68,76,82,85,86,1065,1082,1101,1189,1211,1236,111,110,116,111,117,114,73,110,116,101,103,114,97,108,59,1,8751,111,4,2,116,119,1089,1092,59,1,168,110,65,114,114,111,119,59,1,8659,4,2,101,111,1107,1141,102,116,4,3,65,82,84,1117,1124,1136,114,114,111,119,59,1,8656,105,103,104,116,65,114,114,111,119,59,1,8660,101,101,59,1,10980,110,103,4,2,76,82,1149,1177,101,102,116,4,2,65,82,1158,1165,114,114,111,119,59,1,10232,105,103,104,116,65,114,114,111,119,59,1,10234,105,103,104,116,65,114,114,111,119,59,1,10233,105,103,104,116,4,2,65,84,1199,1206,114,114,111,119,59,1,8658,101,101,59,1,8872,112,4,2,65,68,1218,1225,114,114,111,119,59,1,8657,111,119,110,65,114,114,111,119,59,1,8661,101,114,116,105,99,97,108,66,97,114,59,1,8741,110,4,6,65,66,76,82,84,97,1264,1292,1299,1352,1391,1408,114,114,111,119,4,3,59,66,85,1276,1278,1283,1,8595,97,114,59,1,10515,112,65,114,114,111,119,59,1,8693,114,101,118,101,59,1,785,101,102,116,4,3,82,84,86,1310,1323,1334,105,103,104,116,86,101,99,116,111,114,59,1,10576,101,101,86,101,99,116,111,114,59,1,10590,101,99,116,111,114,4,2,59,66,1345,1347,1,8637,97,114,59,1,10582,105,103,104,116,4,2,84,86,1362,1373,101,101,86,101,99,116,111,114,59,1,10591,101,99,116,111,114,4,2,59,66,1384,1386,1,8641,97,114,59,1,10583,101,101,4,2,59,65,1399,1401,1,8868,114,114,111,119,59,1,8615,114,114,111,119,59,1,8659,4,2,99,116,1421,1426,114,59,3,55349,56479,114,111,107,59,1,272,4,16,78,84,97,99,100,102,103,108,109,111,112,113,115,116,117,120,1466,1470,1478,1489,1515,1520,1525,1536,1544,1593,1609,1617,1650,1664,1668,1677,71,59,1,330,72,5,208,1,59,1476,1,208,99,117,116,101,5,201,1,59,1487,1,201,4,3,97,105,121,1497,1503,1512,114,111,110,59,1,282,114,99,5,202,1,59,1510,1,202,59,1,1069,111,116,59,1,278,114,59,3,55349,56584,114,97,118,101,5,200,1,59,1534,1,200,101,109,101,110,116,59,1,8712,4,2,97,112,1550,1555,99,114,59,1,274,116,121,4,2,83,86,1563,1576,109,97,108,108,83,113,117,97,114,101,59,1,9723,101,114,121,83,109,97,108,108,83,113,117,97,114,101,59,1,9643,4,2,103,112,1599,1604,111,110,59,1,280,102,59,3,55349,56636,115,105,108,111,110,59,1,917,117,4,2,97,105,1624,1640,108,4,2,59,84,1631,1633,1,10869,105,108,100,101,59,1,8770,108,105,98,114,105,117,109,59,1,8652,4,2,99,105,1656,1660,114,59,1,8496,109,59,1,10867,97,59,1,919,109,108,5,203,1,59,1675,1,203,4,2,105,112,1683,1689,115,116,115,59,1,8707,111,110,101,110,116,105,97,108,69,59,1,8519,4,5,99,102,105,111,115,1713,1717,1722,1762,1791,121,59,1,1060,114,59,3,55349,56585,108,108,101,100,4,2,83,86,1732,1745,109,97,108,108,83,113,117,97,114,101,59,1,9724,101,114,121,83,109,97,108,108,83,113,117,97,114,101,59,1,9642,4,3,112,114,117,1770,1775,1781,102,59,3,55349,56637,65,108,108,59,1,8704,114,105,101,114,116,114,102,59,1,8497,99,114,59,1,8497,4,12,74,84,97,98,99,100,102,103,111,114,115,116,1822,1827,1834,1848,1855,1877,1882,1887,1890,1896,1978,1984,99,121,59,1,1027,5,62,1,59,1832,1,62,109,109,97,4,2,59,100,1843,1845,1,915,59,1,988,114,101,118,101,59,1,286,4,3,101,105,121,1863,1869,1874,100,105,108,59,1,290,114,99,59,1,284,59,1,1043,111,116,59,1,288,114,59,3,55349,56586,59,1,8921,112,102,59,3,55349,56638,101,97,116,101,114,4,6,69,70,71,76,83,84,1915,1933,1944,1953,1959,1971,113,117,97,108,4,2,59,76,1925,1927,1,8805,101,115,115,59,1,8923,117,108,108,69,113,117,97,108,59,1,8807,114,101,97,116,101,114,59,1,10914,101,115,115,59,1,8823,108,97,110,116,69,113,117,97,108,59,1,10878,105,108,100,101,59,1,8819,99,114,59,3,55349,56482,59,1,8811,4,8,65,97,99,102,105,111,115,117,2005,2012,2026,2032,2036,2049,2073,2089,82,68,99,121,59,1,1066,4,2,99,116,2018,2023,101,107,59,1,711,59,1,94,105,114,99,59,1,292,114,59,1,8460,108,98,101,114,116,83,112,97,99,101,59,1,8459,4,2,112,114,2055,2059,102,59,1,8461,105,122,111,110,116,97,108,76,105,110,101,59,1,9472,4,2,99,116,2079,2083,114,59,1,8459,114,111,107,59,1,294,109,112,4,2,68,69,2097,2107,111,119,110,72,117,109,112,59,1,8782,113,117,97,108,59,1,8783,4,14,69,74,79,97,99,100,102,103,109,110,111,115,116,117,2144,2149,2155,2160,2171,2189,2194,2198,2209,2245,2307,2329,2334,2341,99,121,59,1,1045,108,105,103,59,1,306,99,121,59,1,1025,99,117,116,101,5,205,1,59,2169,1,205,4,2,105,121,2177,2186,114,99,5,206,1,59,2184,1,206,59,1,1048,111,116,59,1,304,114,59,1,8465,114,97,118,101,5,204,1,59,2207,1,204,4,3,59,97,112,2217,2219,2238,1,8465,4,2,99,103,2225,2229,114,59,1,298,105,110,97,114,121,73,59,1,8520,108,105,101,115,59,1,8658,4,2,116,118,2251,2281,4,2,59,101,2257,2259,1,8748,4,2,103,114,2265,2271,114,97,108,59,1,8747,115,101,99,116,105,111,110,59,1,8898,105,115,105,98,108,101,4,2,67,84,2293,2300,111,109,109,97,59,1,8291,105,109,101,115,59,1,8290,4,3,103,112,116,2315,2320,2325,111,110,59,1,302,102,59,3,55349,56640,97,59,1,921,99,114,59,1,8464,105,108,100,101,59,1,296,4,2,107,109,2347,2352,99,121,59,1,1030,108,5,207,1,59,2358,1,207,4,5,99,102,111,115,117,2372,2386,2391,2397,2414,4,2,105,121,2378,2383,114,99,59,1,308,59,1,1049,114,59,3,55349,56589,112,102,59,3,55349,56641,4,2,99,101,2403,2408,114,59,3,55349,56485,114,99,121,59,1,1032,107,99,121,59,1,1028,4,7,72,74,97,99,102,111,115,2436,2441,2446,2452,2467,2472,2478,99,121,59,1,1061,99,121,59,1,1036,112,112,97,59,1,922,4,2,101,121,2458,2464,100,105,108,59,1,310,59,1,1050,114,59,3,55349,56590,112,102,59,3,55349,56642,99,114,59,3,55349,56486,4,11,74,84,97,99,101,102,108,109,111,115,116,2508,2513,2520,2562,2585,2981,2986,3004,3011,3146,3167,99,121,59,1,1033,5,60,1,59,2518,1,60,4,5,99,109,110,112,114,2532,2538,2544,2548,2558,117,116,101,59,1,313,98,100,97,59,1,923,103,59,1,10218,108,97,99,101,116,114,102,59,1,8466,114,59,1,8606,4,3,97,101,121,2570,2576,2582,114,111,110,59,1,317,100,105,108,59,1,315,59,1,1051,4,2,102,115,2591,2907,116,4,10,65,67,68,70,82,84,85,86,97,114,2614,2663,2672,2728,2735,2760,2820,2870,2888,2895,4,2,110,114,2620,2633,103,108,101,66,114,97,99,107,101,116,59,1,10216,114,111,119,4,3,59,66,82,2644,2646,2651,1,8592,97,114,59,1,8676,105,103,104,116,65,114,114,111,119,59,1,8646,101,105,108,105,110,103,59,1,8968,111,4,2,117,119,2679,2692,98,108,101,66,114,97,99,107,101,116,59,1,10214,110,4,2,84,86,2699,2710,101,101,86,101,99,116,111,114,59,1,10593,101,99,116,111,114,4,2,59,66,2721,2723,1,8643,97,114,59,1,10585,108,111,111,114,59,1,8970,105,103,104,116,4,2,65,86,2745,2752,114,114,111,119,59,1,8596,101,99,116,111,114,59,1,10574,4,2,101,114,2766,2792,101,4,3,59,65,86,2775,2777,2784,1,8867,114,114,111,119,59,1,8612,101,99,116,111,114,59,1,10586,105,97,110,103,108,101,4,3,59,66,69,2806,2808,2813,1,8882,97,114,59,1,10703,113,117,97,108,59,1,8884,112,4,3,68,84,86,2829,2841,2852,111,119,110,86,101,99,116,111,114,59,1,10577,101,101,86,101,99,116,111,114,59,1,10592,101,99,116,111,114,4,2,59,66,2863,2865,1,8639,97,114,59,1,10584,101,99,116,111,114,4,2,59,66,2881,2883,1,8636,97,114,59,1,10578,114,114,111,119,59,1,8656,105,103,104,116,97,114,114,111,119,59,1,8660,115,4,6,69,70,71,76,83,84,2922,2936,2947,2956,2962,2974,113,117,97,108,71,114,101,97,116,101,114,59,1,8922,117,108,108,69,113,117,97,108,59,1,8806,114,101,97,116,101,114,59,1,8822,101,115,115,59,1,10913,108,97,110,116,69,113,117,97,108,59,1,10877,105,108,100,101,59,1,8818,114,59,3,55349,56591,4,2,59,101,2992,2994,1,8920,102,116,97,114,114,111,119,59,1,8666,105,100,111,116,59,1,319,4,3,110,112,119,3019,3110,3115,103,4,4,76,82,108,114,3030,3058,3070,3098,101,102,116,4,2,65,82,3039,3046,114,114,111,119,59,1,10229,105,103,104,116,65,114,114,111,119,59,1,10231,105,103,104,116,65,114,114,111,119,59,1,10230,101,102,116,4,2,97,114,3079,3086,114,114,111,119,59,1,10232,105,103,104,116,97,114,114,111,119,59,1,10234,105,103,104,116,97,114,114,111,119,59,1,10233,102,59,3,55349,56643,101,114,4,2,76,82,3123,3134,101,102,116,65,114,114,111,119,59,1,8601,105,103,104,116,65,114,114,111,119,59,1,8600,4,3,99,104,116,3154,3158,3161,114,59,1,8466,59,1,8624,114,111,107,59,1,321,59,1,8810,4,8,97,99,101,102,105,111,115,117,3188,3192,3196,3222,3227,3237,3243,3248,112,59,1,10501,121,59,1,1052,4,2,100,108,3202,3213,105,117,109,83,112,97,99,101,59,1,8287,108,105,110,116,114,102,59,1,8499,114,59,3,55349,56592,110,117,115,80,108,117,115,59,1,8723,112,102,59,3,55349,56644,99,114,59,1,8499,59,1,924,4,9,74,97,99,101,102,111,115,116,117,3271,3276,3283,3306,3422,3427,4120,4126,4137,99,121,59,1,1034,99,117,116,101,59,1,323,4,3,97,101,121,3291,3297,3303,114,111,110,59,1,327,100,105,108,59,1,325,59,1,1053,4,3,103,115,119,3314,3380,3415,97,116,105,118,101,4,3,77,84,86,3327,3340,3365,101,100,105,117,109,83,112,97,99,101,59,1,8203,104,105,4,2,99,110,3348,3357,107,83,112,97,99,101,59,1,8203,83,112,97,99,101,59,1,8203,101,114,121,84,104,105,110,83,112,97,99,101,59,1,8203,116,101,100,4,2,71,76,3389,3405,114,101,97,116,101,114,71,114,101,97,116,101,114,59,1,8811,101,115,115,76,101,115,115,59,1,8810,76,105,110,101,59,1,10,114,59,3,55349,56593,4,4,66,110,112,116,3437,3444,3460,3464,114,101,97,107,59,1,8288,66,114,101,97,107,105,110,103,83,112,97,99,101,59,1,160,102,59,1,8469,4,13,59,67,68,69,71,72,76,78,80,82,83,84,86,3492,3494,3517,3536,3578,3657,3685,3784,3823,3860,3915,4066,4107,1,10988,4,2,111,117,3500,3510,110,103,114,117,101,110,116,59,1,8802,112,67,97,112,59,1,8813,111,117,98,108,101,86,101,114,116,105,99,97,108,66,97,114,59,1,8742,4,3,108,113,120,3544,3552,3571,101,109,101,110,116,59,1,8713,117,97,108,4,2,59,84,3561,3563,1,8800,105,108,100,101,59,3,8770,824,105,115,116,115,59,1,8708,114,101,97,116,101,114,4,7,59,69,70,71,76,83,84,3600,3602,3609,3621,3631,3637,3650,1,8815,113,117,97,108,59,1,8817,117,108,108,69,113,117,97,108,59,3,8807,824,114,101,97,116,101,114,59,3,8811,824,101,115,115,59,1,8825,108,97,110,116,69,113,117,97,108,59,3,10878,824,105,108,100,101,59,1,8821,117,109,112,4,2,68,69,3666,3677,111,119,110,72,117,109,112,59,3,8782,824,113,117,97,108,59,3,8783,824,101,4,2,102,115,3692,3724,116,84,114,105,97,110,103,108,101,4,3,59,66,69,3709,3711,3717,1,8938,97,114,59,3,10703,824,113,117,97,108,59,1,8940,115,4,6,59,69,71,76,83,84,3739,3741,3748,3757,3764,3777,1,8814,113,117,97,108,59,1,8816,114,101,97,116,101,114,59,1,8824,101,115,115,59,3,8810,824,108,97,110,116,69,113,117,97,108,59,3,10877,824,105,108,100,101,59,1,8820,101,115,116,101,100,4,2,71,76,3795,3812,114,101,97,116,101,114,71,114,101,97,116,101,114,59,3,10914,824,101,115,115,76,101,115,115,59,3,10913,824,114,101,99,101,100,101,115,4,3,59,69,83,3838,3840,3848,1,8832,113,117,97,108,59,3,10927,824,108,97,110,116,69,113,117,97,108,59,1,8928,4,2,101,105,3866,3881,118,101,114,115,101,69,108,101,109,101,110,116,59,1,8716,103,104,116,84,114,105,97,110,103,108,101,4,3,59,66,69,3900,3902,3908,1,8939,97,114,59,3,10704,824,113,117,97,108,59,1,8941,4,2,113,117,3921,3973,117,97,114,101,83,117,4,2,98,112,3933,3952,115,101,116,4,2,59,69,3942,3945,3,8847,824,113,117,97,108,59,1,8930,101,114,115,101,116,4,2,59,69,3963,3966,3,8848,824,113,117,97,108,59,1,8931,4,3,98,99,112,3981,4e3,4045,115,101,116,4,2,59,69,3990,3993,3,8834,8402,113,117,97,108,59,1,8840,99,101,101,100,115,4,4,59,69,83,84,4015,4017,4025,4037,1,8833,113,117,97,108,59,3,10928,824,108,97,110,116,69,113,117,97,108,59,1,8929,105,108,100,101,59,3,8831,824,101,114,115,101,116,4,2,59,69,4056,4059,3,8835,8402,113,117,97,108,59,1,8841,105,108,100,101,4,4,59,69,70,84,4080,4082,4089,4100,1,8769,113,117,97,108,59,1,8772,117,108,108,69,113,117,97,108,59,1,8775,105,108,100,101,59,1,8777,101,114,116,105,99,97,108,66,97,114,59,1,8740,99,114,59,3,55349,56489,105,108,100,101,5,209,1,59,4135,1,209,59,1,925,4,14,69,97,99,100,102,103,109,111,112,114,115,116,117,118,4170,4176,4187,4205,4212,4217,4228,4253,4259,4292,4295,4316,4337,4346,108,105,103,59,1,338,99,117,116,101,5,211,1,59,4185,1,211,4,2,105,121,4193,4202,114,99,5,212,1,59,4200,1,212,59,1,1054,98,108,97,99,59,1,336,114,59,3,55349,56594,114,97,118,101,5,210,1,59,4226,1,210,4,3,97,101,105,4236,4241,4246,99,114,59,1,332,103,97,59,1,937,99,114,111,110,59,1,927,112,102,59,3,55349,56646,101,110,67,117,114,108,121,4,2,68,81,4272,4285,111,117,98,108,101,81,117,111,116,101,59,1,8220,117,111,116,101,59,1,8216,59,1,10836,4,2,99,108,4301,4306,114,59,3,55349,56490,97,115,104,5,216,1,59,4314,1,216,105,4,2,108,109,4323,4332,100,101,5,213,1,59,4330,1,213,101,115,59,1,10807,109,108,5,214,1,59,4344,1,214,101,114,4,2,66,80,4354,4380,4,2,97,114,4360,4364,114,59,1,8254,97,99,4,2,101,107,4372,4375,59,1,9182,101,116,59,1,9140,97,114,101,110,116,104,101,115,105,115,59,1,9180,4,9,97,99,102,104,105,108,111,114,115,4413,4422,4426,4431,4435,4438,4448,4471,4561,114,116,105,97,108,68,59,1,8706,121,59,1,1055,114,59,3,55349,56595,105,59,1,934,59,1,928,117,115,77,105,110,117,115,59,1,177,4,2,105,112,4454,4467,110,99,97,114,101,112,108,97,110,101,59,1,8460,102,59,1,8473,4,4,59,101,105,111,4481,4483,4526,4531,1,10939,99,101,100,101,115,4,4,59,69,83,84,4498,4500,4507,4519,1,8826,113,117,97,108,59,1,10927,108,97,110,116,69,113,117,97,108,59,1,8828,105,108,100,101,59,1,8830,109,101,59,1,8243,4,2,100,112,4537,4543,117,99,116,59,1,8719,111,114,116,105,111,110,4,2,59,97,4555,4557,1,8759,108,59,1,8733,4,2,99,105,4567,4572,114,59,3,55349,56491,59,1,936,4,4,85,102,111,115,4585,4594,4599,4604,79,84,5,34,1,59,4592,1,34,114,59,3,55349,56596,112,102,59,1,8474,99,114,59,3,55349,56492,4,12,66,69,97,99,101,102,104,105,111,114,115,117,4636,4642,4650,4681,4704,4763,4767,4771,5047,5069,5081,5094,97,114,114,59,1,10512,71,5,174,1,59,4648,1,174,4,3,99,110,114,4658,4664,4668,117,116,101,59,1,340,103,59,1,10219,114,4,2,59,116,4675,4677,1,8608,108,59,1,10518,4,3,97,101,121,4689,4695,4701,114,111,110,59,1,344,100,105,108,59,1,342,59,1,1056,4,2,59,118,4710,4712,1,8476,101,114,115,101,4,2,69,85,4722,4748,4,2,108,113,4728,4736,101,109,101,110,116,59,1,8715,117,105,108,105,98,114,105,117,109,59,1,8651,112,69,113,117,105,108,105,98,114,105,117,109,59,1,10607,114,59,1,8476,111,59,1,929,103,104,116,4,8,65,67,68,70,84,85,86,97,4792,4840,4849,4905,4912,4972,5022,5040,4,2,110,114,4798,4811,103,108,101,66,114,97,99,107,101,116,59,1,10217,114,111,119,4,3,59,66,76,4822,4824,4829,1,8594,97,114,59,1,8677,101,102,116,65,114,114,111,119,59,1,8644,101,105,108,105,110,103,59,1,8969,111,4,2,117,119,4856,4869,98,108,101,66,114,97,99,107,101,116,59,1,10215,110,4,2,84,86,4876,4887,101,101,86,101,99,116,111,114,59,1,10589,101,99,116,111,114,4,2,59,66,4898,4900,1,8642,97,114,59,1,10581,108,111,111,114,59,1,8971,4,2,101,114,4918,4944,101,4,3,59,65,86,4927,4929,4936,1,8866,114,114,111,119,59,1,8614,101,99,116,111,114,59,1,10587,105,97,110,103,108,101,4,3,59,66,69,4958,4960,4965,1,8883,97,114,59,1,10704,113,117,97,108,59,1,8885,112,4,3,68,84,86,4981,4993,5004,111,119,110,86,101,99,116,111,114,59,1,10575,101,101,86,101,99,116,111,114,59,1,10588,101,99,116,111,114,4,2,59,66,5015,5017,1,8638,97,114,59,1,10580,101,99,116,111,114,4,2,59,66,5033,5035,1,8640,97,114,59,1,10579,114,114,111,119,59,1,8658,4,2,112,117,5053,5057,102,59,1,8477,110,100,73,109,112,108,105,101,115,59,1,10608,105,103,104,116,97,114,114,111,119,59,1,8667,4,2,99,104,5087,5091,114,59,1,8475,59,1,8625,108,101,68,101,108,97,121,101,100,59,1,10740,4,13,72,79,97,99,102,104,105,109,111,113,115,116,117,5134,5150,5157,5164,5198,5203,5259,5265,5277,5283,5374,5380,5385,4,2,67,99,5140,5146,72,99,121,59,1,1065,121,59,1,1064,70,84,99,121,59,1,1068,99,117,116,101,59,1,346,4,5,59,97,101,105,121,5176,5178,5184,5190,5195,1,10940,114,111,110,59,1,352,100,105,108,59,1,350,114,99,59,1,348,59,1,1057,114,59,3,55349,56598,111,114,116,4,4,68,76,82,85,5216,5227,5238,5250,111,119,110,65,114,114,111,119,59,1,8595,101,102,116,65,114,114,111,119,59,1,8592,105,103,104,116,65,114,114,111,119,59,1,8594,112,65,114,114,111,119,59,1,8593,103,109,97,59,1,931,97,108,108,67,105,114,99,108,101,59,1,8728,112,102,59,3,55349,56650,4,2,114,117,5289,5293,116,59,1,8730,97,114,101,4,4,59,73,83,85,5306,5308,5322,5367,1,9633,110,116,101,114,115,101,99,116,105,111,110,59,1,8851,117,4,2,98,112,5329,5347,115,101,116,4,2,59,69,5338,5340,1,8847,113,117,97,108,59,1,8849,101,114,115,101,116,4,2,59,69,5358,5360,1,8848,113,117,97,108,59,1,8850,110,105,111,110,59,1,8852,99,114,59,3,55349,56494,97,114,59,1,8902,4,4,98,99,109,112,5395,5420,5475,5478,4,2,59,115,5401,5403,1,8912,101,116,4,2,59,69,5411,5413,1,8912,113,117,97,108,59,1,8838,4,2,99,104,5426,5468,101,101,100,115,4,4,59,69,83,84,5440,5442,5449,5461,1,8827,113,117,97,108,59,1,10928,108,97,110,116,69,113,117,97,108,59,1,8829,105,108,100,101,59,1,8831,84,104,97,116,59,1,8715,59,1,8721,4,3,59,101,115,5486,5488,5507,1,8913,114,115,101,116,4,2,59,69,5498,5500,1,8835,113,117,97,108,59,1,8839,101,116,59,1,8913,4,11,72,82,83,97,99,102,104,105,111,114,115,5536,5546,5552,5567,5579,5602,5607,5655,5695,5701,5711,79,82,78,5,222,1,59,5544,1,222,65,68,69,59,1,8482,4,2,72,99,5558,5563,99,121,59,1,1035,121,59,1,1062,4,2,98,117,5573,5576,59,1,9,59,1,932,4,3,97,101,121,5587,5593,5599,114,111,110,59,1,356,100,105,108,59,1,354,59,1,1058,114,59,3,55349,56599,4,2,101,105,5613,5631,4,2,114,116,5619,5627,101,102,111,114,101,59,1,8756,97,59,1,920,4,2,99,110,5637,5647,107,83,112,97,99,101,59,3,8287,8202,83,112,97,99,101,59,1,8201,108,100,101,4,4,59,69,70,84,5668,5670,5677,5688,1,8764,113,117,97,108,59,1,8771,117,108,108,69,113,117,97,108,59,1,8773,105,108,100,101,59,1,8776,112,102,59,3,55349,56651,105,112,108,101,68,111,116,59,1,8411,4,2,99,116,5717,5722,114,59,3,55349,56495,114,111,107,59,1,358,4,14,97,98,99,100,102,103,109,110,111,112,114,115,116,117,5758,5789,5805,5823,5830,5835,5846,5852,5921,5937,6089,6095,6101,6108,4,2,99,114,5764,5774,117,116,101,5,218,1,59,5772,1,218,114,4,2,59,111,5781,5783,1,8607,99,105,114,59,1,10569,114,4,2,99,101,5796,5800,121,59,1,1038,118,101,59,1,364,4,2,105,121,5811,5820,114,99,5,219,1,59,5818,1,219,59,1,1059,98,108,97,99,59,1,368,114,59,3,55349,56600,114,97,118,101,5,217,1,59,5844,1,217,97,99,114,59,1,362,4,2,100,105,5858,5905,101,114,4,2,66,80,5866,5892,4,2,97,114,5872,5876,114,59,1,95,97,99,4,2,101,107,5884,5887,59,1,9183,101,116,59,1,9141,97,114,101,110,116,104,101,115,105,115,59,1,9181,111,110,4,2,59,80,5913,5915,1,8899,108,117,115,59,1,8846,4,2,103,112,5927,5932,111,110,59,1,370,102,59,3,55349,56652,4,8,65,68,69,84,97,100,112,115,5955,5985,5996,6009,6026,6033,6044,6075,114,114,111,119,4,3,59,66,68,5967,5969,5974,1,8593,97,114,59,1,10514,111,119,110,65,114,114,111,119,59,1,8645,111,119,110,65,114,114,111,119,59,1,8597,113,117,105,108,105,98,114,105,117,109,59,1,10606,101,101,4,2,59,65,6017,6019,1,8869,114,114,111,119,59,1,8613,114,114,111,119,59,1,8657,111,119,110,97,114,114,111,119,59,1,8661,101,114,4,2,76,82,6052,6063,101,102,116,65,114,114,111,119,59,1,8598,105,103,104,116,65,114,114,111,119,59,1,8599,105,4,2,59,108,6082,6084,1,978,111,110,59,1,933,105,110,103,59,1,366,99,114,59,3,55349,56496,105,108,100,101,59,1,360,109,108,5,220,1,59,6115,1,220,4,9,68,98,99,100,101,102,111,115,118,6137,6143,6148,6152,6166,6250,6255,6261,6267,97,115,104,59,1,8875,97,114,59,1,10987,121,59,1,1042,97,115,104,4,2,59,108,6161,6163,1,8873,59,1,10982,4,2,101,114,6172,6175,59,1,8897,4,3,98,116,121,6183,6188,6238,97,114,59,1,8214,4,2,59,105,6194,6196,1,8214,99,97,108,4,4,66,76,83,84,6209,6214,6220,6231,97,114,59,1,8739,105,110,101,59,1,124,101,112,97,114,97,116,111,114,59,1,10072,105,108,100,101,59,1,8768,84,104,105,110,83,112,97,99,101,59,1,8202,114,59,3,55349,56601,112,102,59,3,55349,56653,99,114,59,3,55349,56497,100,97,115,104,59,1,8874,4,5,99,101,102,111,115,6286,6292,6298,6303,6309,105,114,99,59,1,372,100,103,101,59,1,8896,114,59,3,55349,56602,112,102,59,3,55349,56654,99,114,59,3,55349,56498,4,4,102,105,111,115,6325,6330,6333,6339,114,59,3,55349,56603,59,1,926,112,102,59,3,55349,56655,99,114,59,3,55349,56499,4,9,65,73,85,97,99,102,111,115,117,6365,6370,6375,6380,6391,6405,6410,6416,6422,99,121,59,1,1071,99,121,59,1,1031,99,121,59,1,1070,99,117,116,101,5,221,1,59,6389,1,221,4,2,105,121,6397,6402,114,99,59,1,374,59,1,1067,114,59,3,55349,56604,112,102,59,3,55349,56656,99,114,59,3,55349,56500,109,108,59,1,376,4,8,72,97,99,100,101,102,111,115,6445,6450,6457,6472,6477,6501,6505,6510,99,121,59,1,1046,99,117,116,101,59,1,377,4,2,97,121,6463,6469,114,111,110,59,1,381,59,1,1047,111,116,59,1,379,4,2,114,116,6483,6497,111,87,105,100,116,104,83,112,97,99,101,59,1,8203,97,59,1,918,114,59,1,8488,112,102,59,1,8484,99,114,59,3,55349,56501,4,16,97,98,99,101,102,103,108,109,110,111,112,114,115,116,117,119,6550,6561,6568,6612,6622,6634,6645,6672,6699,6854,6870,6923,6933,6963,6974,6983,99,117,116,101,5,225,1,59,6559,1,225,114,101,118,101,59,1,259,4,6,59,69,100,105,117,121,6582,6584,6588,6591,6600,6609,1,8766,59,3,8766,819,59,1,8767,114,99,5,226,1,59,6598,1,226,116,101,5,180,1,59,6607,1,180,59,1,1072,108,105,103,5,230,1,59,6620,1,230,4,2,59,114,6628,6630,1,8289,59,3,55349,56606,114,97,118,101,5,224,1,59,6643,1,224,4,2,101,112,6651,6667,4,2,102,112,6657,6663,115,121,109,59,1,8501,104,59,1,8501,104,97,59,1,945,4,2,97,112,6678,6692,4,2,99,108,6684,6688,114,59,1,257,103,59,1,10815,5,38,1,59,6697,1,38,4,2,100,103,6705,6737,4,5,59,97,100,115,118,6717,6719,6724,6727,6734,1,8743,110,100,59,1,10837,59,1,10844,108,111,112,101,59,1,10840,59,1,10842,4,7,59,101,108,109,114,115,122,6753,6755,6758,6762,6814,6835,6848,1,8736,59,1,10660,101,59,1,8736,115,100,4,2,59,97,6770,6772,1,8737,4,8,97,98,99,100,101,102,103,104,6790,6793,6796,6799,6802,6805,6808,6811,59,1,10664,59,1,10665,59,1,10666,59,1,10667,59,1,10668,59,1,10669,59,1,10670,59,1,10671,116,4,2,59,118,6821,6823,1,8735,98,4,2,59,100,6830,6832,1,8894,59,1,10653,4,2,112,116,6841,6845,104,59,1,8738,59,1,197,97,114,114,59,1,9084,4,2,103,112,6860,6865,111,110,59,1,261,102,59,3,55349,56658,4,7,59,69,97,101,105,111,112,6886,6888,6891,6897,6900,6904,6908,1,8776,59,1,10864,99,105,114,59,1,10863,59,1,8778,100,59,1,8779,115,59,1,39,114,111,120,4,2,59,101,6917,6919,1,8776,113,59,1,8778,105,110,103,5,229,1,59,6931,1,229,4,3,99,116,121,6941,6946,6949,114,59,3,55349,56502,59,1,42,109,112,4,2,59,101,6957,6959,1,8776,113,59,1,8781,105,108,100,101,5,227,1,59,6972,1,227,109,108,5,228,1,59,6981,1,228,4,2,99,105,6989,6997,111,110,105,110,116,59,1,8755,110,116,59,1,10769,4,16,78,97,98,99,100,101,102,105,107,108,110,111,112,114,115,117,7036,7041,7119,7135,7149,7155,7219,7224,7347,7354,7463,7489,7786,7793,7814,7866,111,116,59,1,10989,4,2,99,114,7047,7094,107,4,4,99,101,112,115,7058,7064,7073,7080,111,110,103,59,1,8780,112,115,105,108,111,110,59,1,1014,114,105,109,101,59,1,8245,105,109,4,2,59,101,7088,7090,1,8765,113,59,1,8909,4,2,118,119,7100,7105,101,101,59,1,8893,101,100,4,2,59,103,7113,7115,1,8965,101,59,1,8965,114,107,4,2,59,116,7127,7129,1,9141,98,114,107,59,1,9142,4,2,111,121,7141,7146,110,103,59,1,8780,59,1,1073,113,117,111,59,1,8222,4,5,99,109,112,114,116,7167,7181,7188,7193,7199,97,117,115,4,2,59,101,7176,7178,1,8757,59,1,8757,112,116,121,118,59,1,10672,115,105,59,1,1014,110,111,117,59,1,8492,4,3,97,104,119,7207,7210,7213,59,1,946,59,1,8502,101,101,110,59,1,8812,114,59,3,55349,56607,103,4,7,99,111,115,116,117,118,119,7241,7262,7288,7305,7328,7335,7340,4,3,97,105,117,7249,7253,7258,112,59,1,8898,114,99,59,1,9711,112,59,1,8899,4,3,100,112,116,7270,7275,7281,111,116,59,1,10752,108,117,115,59,1,10753,105,109,101,115,59,1,10754,4,2,113,116,7294,7300,99,117,112,59,1,10758,97,114,59,1,9733,114,105,97,110,103,108,101,4,2,100,117,7318,7324,111,119,110,59,1,9661,112,59,1,9651,112,108,117,115,59,1,10756,101,101,59,1,8897,101,100,103,101,59,1,8896,97,114,111,119,59,1,10509,4,3,97,107,111,7362,7436,7458,4,2,99,110,7368,7432,107,4,3,108,115,116,7377,7386,7394,111,122,101,110,103,101,59,1,10731,113,117,97,114,101,59,1,9642,114,105,97,110,103,108,101,4,4,59,100,108,114,7411,7413,7419,7425,1,9652,111,119,110,59,1,9662,101,102,116,59,1,9666,105,103,104,116,59,1,9656,107,59,1,9251,4,2,49,51,7442,7454,4,2,50,52,7448,7451,59,1,9618,59,1,9617,52,59,1,9619,99,107,59,1,9608,4,2,101,111,7469,7485,4,2,59,113,7475,7478,3,61,8421,117,105,118,59,3,8801,8421,116,59,1,8976,4,4,112,116,119,120,7499,7504,7517,7523,102,59,3,55349,56659,4,2,59,116,7510,7512,1,8869,111,109,59,1,8869,116,105,101,59,1,8904,4,12,68,72,85,86,98,100,104,109,112,116,117,118,7549,7571,7597,7619,7655,7660,7682,7708,7715,7721,7728,7750,4,4,76,82,108,114,7559,7562,7565,7568,59,1,9559,59,1,9556,59,1,9558,59,1,9555,4,5,59,68,85,100,117,7583,7585,7588,7591,7594,1,9552,59,1,9574,59,1,9577,59,1,9572,59,1,9575,4,4,76,82,108,114,7607,7610,7613,7616,59,1,9565,59,1,9562,59,1,9564,59,1,9561,4,7,59,72,76,82,104,108,114,7635,7637,7640,7643,7646,7649,7652,1,9553,59,1,9580,59,1,9571,59,1,9568,59,1,9579,59,1,9570,59,1,9567,111,120,59,1,10697,4,4,76,82,108,114,7670,7673,7676,7679,59,1,9557,59,1,9554,59,1,9488,59,1,9484,4,5,59,68,85,100,117,7694,7696,7699,7702,7705,1,9472,59,1,9573,59,1,9576,59,1,9516,59,1,9524,105,110,117,115,59,1,8863,108,117,115,59,1,8862,105,109,101,115,59,1,8864,4,4,76,82,108,114,7738,7741,7744,7747,59,1,9563,59,1,9560,59,1,9496,59,1,9492,4,7,59,72,76,82,104,108,114,7766,7768,7771,7774,7777,7780,7783,1,9474,59,1,9578,59,1,9569,59,1,9566,59,1,9532,59,1,9508,59,1,9500,114,105,109,101,59,1,8245,4,2,101,118,7799,7804,118,101,59,1,728,98,97,114,5,166,1,59,7812,1,166,4,4,99,101,105,111,7824,7829,7834,7846,114,59,3,55349,56503,109,105,59,1,8271,109,4,2,59,101,7841,7843,1,8765,59,1,8909,108,4,3,59,98,104,7855,7857,7860,1,92,59,1,10693,115,117,98,59,1,10184,4,2,108,109,7872,7885,108,4,2,59,101,7879,7881,1,8226,116,59,1,8226,112,4,3,59,69,101,7894,7896,7899,1,8782,59,1,10926,4,2,59,113,7905,7907,1,8783,59,1,8783,4,15,97,99,100,101,102,104,105,108,111,114,115,116,117,119,121,7942,8021,8075,8080,8121,8126,8157,8279,8295,8430,8446,8485,8491,8707,8726,4,3,99,112,114,7950,7956,8007,117,116,101,59,1,263,4,6,59,97,98,99,100,115,7970,7972,7977,7984,7998,8003,1,8745,110,100,59,1,10820,114,99,117,112,59,1,10825,4,2,97,117,7990,7994,112,59,1,10827,112,59,1,10823,111,116,59,1,10816,59,3,8745,65024,4,2,101,111,8013,8017,116,59,1,8257,110,59,1,711,4,4,97,101,105,117,8031,8046,8056,8061,4,2,112,114,8037,8041,115,59,1,10829,111,110,59,1,269,100,105,108,5,231,1,59,8054,1,231,114,99,59,1,265,112,115,4,2,59,115,8069,8071,1,10828,109,59,1,10832,111,116,59,1,267,4,3,100,109,110,8088,8097,8104,105,108,5,184,1,59,8095,1,184,112,116,121,118,59,1,10674,116,5,162,2,59,101,8112,8114,1,162,114,100,111,116,59,1,183,114,59,3,55349,56608,4,3,99,101,105,8134,8138,8154,121,59,1,1095,99,107,4,2,59,109,8146,8148,1,10003,97,114,107,59,1,10003,59,1,967,114,4,7,59,69,99,101,102,109,115,8174,8176,8179,8258,8261,8268,8273,1,9675,59,1,10691,4,3,59,101,108,8187,8189,8193,1,710,113,59,1,8791,101,4,2,97,100,8200,8223,114,114,111,119,4,2,108,114,8210,8216,101,102,116,59,1,8634,105,103,104,116,59,1,8635,4,5,82,83,97,99,100,8235,8238,8241,8246,8252,59,1,174,59,1,9416,115,116,59,1,8859,105,114,99,59,1,8858,97,115,104,59,1,8861,59,1,8791,110,105,110,116,59,1,10768,105,100,59,1,10991,99,105,114,59,1,10690,117,98,115,4,2,59,117,8288,8290,1,9827,105,116,59,1,9827,4,4,108,109,110,112,8305,8326,8376,8400,111,110,4,2,59,101,8313,8315,1,58,4,2,59,113,8321,8323,1,8788,59,1,8788,4,2,109,112,8332,8344,97,4,2,59,116,8339,8341,1,44,59,1,64,4,3,59,102,108,8352,8354,8358,1,8705,110,59,1,8728,101,4,2,109,120,8365,8371,101,110,116,59,1,8705,101,115,59,1,8450,4,2,103,105,8382,8395,4,2,59,100,8388,8390,1,8773,111,116,59,1,10861,110,116,59,1,8750,4,3,102,114,121,8408,8412,8417,59,3,55349,56660,111,100,59,1,8720,5,169,2,59,115,8424,8426,1,169,114,59,1,8471,4,2,97,111,8436,8441,114,114,59,1,8629,115,115,59,1,10007,4,2,99,117,8452,8457,114,59,3,55349,56504,4,2,98,112,8463,8474,4,2,59,101,8469,8471,1,10959,59,1,10961,4,2,59,101,8480,8482,1,10960,59,1,10962,100,111,116,59,1,8943,4,7,100,101,108,112,114,118,119,8507,8522,8536,8550,8600,8697,8702,97,114,114,4,2,108,114,8516,8519,59,1,10552,59,1,10549,4,2,112,115,8528,8532,114,59,1,8926,99,59,1,8927,97,114,114,4,2,59,112,8545,8547,1,8630,59,1,10557,4,6,59,98,99,100,111,115,8564,8566,8573,8587,8592,8596,1,8746,114,99,97,112,59,1,10824,4,2,97,117,8579,8583,112,59,1,10822,112,59,1,10826,111,116,59,1,8845,114,59,1,10821,59,3,8746,65024,4,4,97,108,114,118,8610,8623,8663,8672,114,114,4,2,59,109,8618,8620,1,8631,59,1,10556,121,4,3,101,118,119,8632,8651,8656,113,4,2,112,115,8639,8645,114,101,99,59,1,8926,117,99,99,59,1,8927,101,101,59,1,8910,101,100,103,101,59,1,8911,101,110,5,164,1,59,8670,1,164,101,97,114,114,111,119,4,2,108,114,8684,8690,101,102,116,59,1,8630,105,103,104,116,59,1,8631,101,101,59,1,8910,101,100,59,1,8911,4,2,99,105,8713,8721,111,110,105,110,116,59,1,8754,110,116,59,1,8753,108,99,116,121,59,1,9005,4,19,65,72,97,98,99,100,101,102,104,105,106,108,111,114,115,116,117,119,122,8773,8778,8783,8821,8839,8854,8887,8914,8930,8944,9036,9041,9058,9197,9227,9258,9281,9297,9305,114,114,59,1,8659,97,114,59,1,10597,4,4,103,108,114,115,8793,8799,8805,8809,103,101,114,59,1,8224,101,116,104,59,1,8504,114,59,1,8595,104,4,2,59,118,8816,8818,1,8208,59,1,8867,4,2,107,108,8827,8834,97,114,111,119,59,1,10511,97,99,59,1,733,4,2,97,121,8845,8851,114,111,110,59,1,271,59,1,1076,4,3,59,97,111,8862,8864,8880,1,8518,4,2,103,114,8870,8876,103,101,114,59,1,8225,114,59,1,8650,116,115,101,113,59,1,10871,4,3,103,108,109,8895,8902,8907,5,176,1,59,8900,1,176,116,97,59,1,948,112,116,121,118,59,1,10673,4,2,105,114,8920,8926,115,104,116,59,1,10623,59,3,55349,56609,97,114,4,2,108,114,8938,8941,59,1,8643,59,1,8642,4,5,97,101,103,115,118,8956,8986,8989,8996,9001,109,4,3,59,111,115,8965,8967,8983,1,8900,110,100,4,2,59,115,8975,8977,1,8900,117,105,116,59,1,9830,59,1,9830,59,1,168,97,109,109,97,59,1,989,105,110,59,1,8946,4,3,59,105,111,9009,9011,9031,1,247,100,101,5,247,2,59,111,9020,9022,1,247,110,116,105,109,101,115,59,1,8903,110,120,59,1,8903,99,121,59,1,1106,99,4,2,111,114,9048,9053,114,110,59,1,8990,111,112,59,1,8973,4,5,108,112,116,117,119,9070,9076,9081,9130,9144,108,97,114,59,1,36,102,59,3,55349,56661,4,5,59,101,109,112,115,9093,9095,9109,9116,9122,1,729,113,4,2,59,100,9102,9104,1,8784,111,116,59,1,8785,105,110,117,115,59,1,8760,108,117,115,59,1,8724,113,117,97,114,101,59,1,8865,98,108,101,98,97,114,119,101,100,103,101,59,1,8966,110,4,3,97,100,104,9153,9160,9172,114,114,111,119,59,1,8595,111,119,110,97,114,114,111,119,115,59,1,8650,97,114,112,111,111,110,4,2,108,114,9184,9190,101,102,116,59,1,8643,105,103,104,116,59,1,8642,4,2,98,99,9203,9211,107,97,114,111,119,59,1,10512,4,2,111,114,9217,9222,114,110,59,1,8991,111,112,59,1,8972,4,3,99,111,116,9235,9248,9252,4,2,114,121,9241,9245,59,3,55349,56505,59,1,1109,108,59,1,10742,114,111,107,59,1,273,4,2,100,114,9264,9269,111,116,59,1,8945,105,4,2,59,102,9276,9278,1,9663,59,1,9662,4,2,97,104,9287,9292,114,114,59,1,8693,97,114,59,1,10607,97,110,103,108,101,59,1,10662,4,2,99,105,9311,9315,121,59,1,1119,103,114,97,114,114,59,1,10239,4,18,68,97,99,100,101,102,103,108,109,110,111,112,113,114,115,116,117,120,9361,9376,9398,9439,9444,9447,9462,9495,9531,9585,9598,9614,9659,9755,9771,9792,9808,9826,4,2,68,111,9367,9372,111,116,59,1,10871,116,59,1,8785,4,2,99,115,9382,9392,117,116,101,5,233,1,59,9390,1,233,116,101,114,59,1,10862,4,4,97,105,111,121,9408,9414,9430,9436,114,111,110,59,1,283,114,4,2,59,99,9421,9423,1,8790,5,234,1,59,9428,1,234,108,111,110,59,1,8789,59,1,1101,111,116,59,1,279,59,1,8519,4,2,68,114,9453,9458,111,116,59,1,8786,59,3,55349,56610,4,3,59,114,115,9470,9472,9482,1,10906,97,118,101,5,232,1,59,9480,1,232,4,2,59,100,9488,9490,1,10902,111,116,59,1,10904,4,4,59,105,108,115,9505,9507,9515,9518,1,10905,110,116,101,114,115,59,1,9191,59,1,8467,4,2,59,100,9524,9526,1,10901,111,116,59,1,10903,4,3,97,112,115,9539,9544,9564,99,114,59,1,275,116,121,4,3,59,115,118,9554,9556,9561,1,8709,101,116,59,1,8709,59,1,8709,112,4,2,49,59,9571,9583,4,2,51,52,9577,9580,59,1,8196,59,1,8197,1,8195,4,2,103,115,9591,9594,59,1,331,112,59,1,8194,4,2,103,112,9604,9609,111,110,59,1,281,102,59,3,55349,56662,4,3,97,108,115,9622,9635,9640,114,4,2,59,115,9629,9631,1,8917,108,59,1,10723,117,115,59,1,10865,105,4,3,59,108,118,9649,9651,9656,1,949,111,110,59,1,949,59,1,1013,4,4,99,115,117,118,9669,9686,9716,9747,4,2,105,111,9675,9680,114,99,59,1,8790,108,111,110,59,1,8789,4,2,105,108,9692,9696,109,59,1,8770,97,110,116,4,2,103,108,9705,9710,116,114,59,1,10902,101,115,115,59,1,10901,4,3,97,101,105,9724,9729,9734,108,115,59,1,61,115,116,59,1,8799,118,4,2,59,68,9741,9743,1,8801,68,59,1,10872,112,97,114,115,108,59,1,10725,4,2,68,97,9761,9766,111,116,59,1,8787,114,114,59,1,10609,4,3,99,100,105,9779,9783,9788,114,59,1,8495,111,116,59,1,8784,109,59,1,8770,4,2,97,104,9798,9801,59,1,951,5,240,1,59,9806,1,240,4,2,109,114,9814,9822,108,5,235,1,59,9820,1,235,111,59,1,8364,4,3,99,105,112,9834,9838,9843,108,59,1,33,115,116,59,1,8707,4,2,101,111,9849,9859,99,116,97,116,105,111,110,59,1,8496,110,101,110,116,105,97,108,101,59,1,8519,4,12,97,99,101,102,105,106,108,110,111,112,114,115,9896,9910,9914,9921,9954,9960,9967,9989,9994,10027,10036,10164,108,108,105,110,103,100,111,116,115,101,113,59,1,8786,121,59,1,1092,109,97,108,101,59,1,9792,4,3,105,108,114,9929,9935,9950,108,105,103,59,1,64259,4,2,105,108,9941,9945,103,59,1,64256,105,103,59,1,64260,59,3,55349,56611,108,105,103,59,1,64257,108,105,103,59,3,102,106,4,3,97,108,116,9975,9979,9984,116,59,1,9837,105,103,59,1,64258,110,115,59,1,9649,111,102,59,1,402,4,2,112,114,1e4,10005,102,59,3,55349,56663,4,2,97,107,10011,10016,108,108,59,1,8704,4,2,59,118,10022,10024,1,8916,59,1,10969,97,114,116,105,110,116,59,1,10765,4,2,97,111,10042,10159,4,2,99,115,10048,10155,4,6,49,50,51,52,53,55,10062,10102,10114,10135,10139,10151,4,6,50,51,52,53,54,56,10076,10083,10086,10093,10096,10099,5,189,1,59,10081,1,189,59,1,8531,5,188,1,59,10091,1,188,59,1,8533,59,1,8537,59,1,8539,4,2,51,53,10108,10111,59,1,8532,59,1,8534,4,3,52,53,56,10122,10129,10132,5,190,1,59,10127,1,190,59,1,8535,59,1,8540,53,59,1,8536,4,2,54,56,10145,10148,59,1,8538,59,1,8541,56,59,1,8542,108,59,1,8260,119,110,59,1,8994,99,114,59,3,55349,56507,4,17,69,97,98,99,100,101,102,103,105,106,108,110,111,114,115,116,118,10206,10217,10247,10254,10268,10273,10358,10363,10374,10380,10385,10406,10458,10464,10470,10497,10610,4,2,59,108,10212,10214,1,8807,59,1,10892,4,3,99,109,112,10225,10231,10244,117,116,101,59,1,501,109,97,4,2,59,100,10239,10241,1,947,59,1,989,59,1,10886,114,101,118,101,59,1,287,4,2,105,121,10260,10265,114,99,59,1,285,59,1,1075,111,116,59,1,289,4,4,59,108,113,115,10283,10285,10288,10308,1,8805,59,1,8923,4,3,59,113,115,10296,10298,10301,1,8805,59,1,8807,108,97,110,116,59,1,10878,4,4,59,99,100,108,10318,10320,10324,10345,1,10878,99,59,1,10921,111,116,4,2,59,111,10332,10334,1,10880,4,2,59,108,10340,10342,1,10882,59,1,10884,4,2,59,101,10351,10354,3,8923,65024,115,59,1,10900,114,59,3,55349,56612,4,2,59,103,10369,10371,1,8811,59,1,8921,109,101,108,59,1,8503,99,121,59,1,1107,4,4,59,69,97,106,10395,10397,10400,10403,1,8823,59,1,10898,59,1,10917,59,1,10916,4,4,69,97,101,115,10416,10419,10434,10453,59,1,8809,112,4,2,59,112,10426,10428,1,10890,114,111,120,59,1,10890,4,2,59,113,10440,10442,1,10888,4,2,59,113,10448,10450,1,10888,59,1,8809,105,109,59,1,8935,112,102,59,3,55349,56664,97,118,101,59,1,96,4,2,99,105,10476,10480,114,59,1,8458,109,4,3,59,101,108,10489,10491,10494,1,8819,59,1,10894,59,1,10896,5,62,6,59,99,100,108,113,114,10512,10514,10527,10532,10538,10545,1,62,4,2,99,105,10520,10523,59,1,10919,114,59,1,10874,111,116,59,1,8919,80,97,114,59,1,10645,117,101,115,116,59,1,10876,4,5,97,100,101,108,115,10557,10574,10579,10599,10605,4,2,112,114,10563,10570,112,114,111,120,59,1,10886,114,59,1,10616,111,116,59,1,8919,113,4,2,108,113,10586,10592,101,115,115,59,1,8923,108,101,115,115,59,1,10892,101,115,115,59,1,8823,105,109,59,1,8819,4,2,101,110,10616,10626,114,116,110,101,113,113,59,3,8809,65024,69,59,3,8809,65024,4,10,65,97,98,99,101,102,107,111,115,121,10653,10658,10713,10718,10724,10760,10765,10786,10850,10875,114,114,59,1,8660,4,4,105,108,109,114,10668,10674,10678,10684,114,115,112,59,1,8202,102,59,1,189,105,108,116,59,1,8459,4,2,100,114,10690,10695,99,121,59,1,1098,4,3,59,99,119,10703,10705,10710,1,8596,105,114,59,1,10568,59,1,8621,97,114,59,1,8463,105,114,99,59,1,293,4,3,97,108,114,10732,10748,10754,114,116,115,4,2,59,117,10741,10743,1,9829,105,116,59,1,9829,108,105,112,59,1,8230,99,111,110,59,1,8889,114,59,3,55349,56613,115,4,2,101,119,10772,10779,97,114,111,119,59,1,10533,97,114,111,119,59,1,10534,4,5,97,109,111,112,114,10798,10803,10809,10839,10844,114,114,59,1,8703,116,104,116,59,1,8763,107,4,2,108,114,10816,10827,101,102,116,97,114,114,111,119,59,1,8617,105,103,104,116,97,114,114,111,119,59,1,8618,102,59,3,55349,56665,98,97,114,59,1,8213,4,3,99,108,116,10858,10863,10869,114,59,3,55349,56509,97,115,104,59,1,8463,114,111,107,59,1,295,4,2,98,112,10881,10887,117,108,108,59,1,8259,104,101,110,59,1,8208,4,15,97,99,101,102,103,105,106,109,110,111,112,113,115,116,117,10925,10936,10958,10977,10990,11001,11039,11045,11101,11192,11220,11226,11237,11285,11299,99,117,116,101,5,237,1,59,10934,1,237,4,3,59,105,121,10944,10946,10955,1,8291,114,99,5,238,1,59,10953,1,238,59,1,1080,4,2,99,120,10964,10968,121,59,1,1077,99,108,5,161,1,59,10975,1,161,4,2,102,114,10983,10986,59,1,8660,59,3,55349,56614,114,97,118,101,5,236,1,59,10999,1,236,4,4,59,105,110,111,11011,11013,11028,11034,1,8520,4,2,105,110,11019,11024,110,116,59,1,10764,116,59,1,8749,102,105,110,59,1,10716,116,97,59,1,8489,108,105,103,59,1,307,4,3,97,111,112,11053,11092,11096,4,3,99,103,116,11061,11065,11088,114,59,1,299,4,3,101,108,112,11073,11076,11082,59,1,8465,105,110,101,59,1,8464,97,114,116,59,1,8465,104,59,1,305,102,59,1,8887,101,100,59,1,437,4,5,59,99,102,111,116,11113,11115,11121,11136,11142,1,8712,97,114,101,59,1,8453,105,110,4,2,59,116,11129,11131,1,8734,105,101,59,1,10717,100,111,116,59,1,305,4,5,59,99,101,108,112,11154,11156,11161,11179,11186,1,8747,97,108,59,1,8890,4,2,103,114,11167,11173,101,114,115,59,1,8484,99,97,108,59,1,8890,97,114,104,107,59,1,10775,114,111,100,59,1,10812,4,4,99,103,112,116,11202,11206,11211,11216,121,59,1,1105,111,110,59,1,303,102,59,3,55349,56666,97,59,1,953,114,111,100,59,1,10812,117,101,115,116,5,191,1,59,11235,1,191,4,2,99,105,11243,11248,114,59,3,55349,56510,110,4,5,59,69,100,115,118,11261,11263,11266,11271,11282,1,8712,59,1,8953,111,116,59,1,8949,4,2,59,118,11277,11279,1,8948,59,1,8947,59,1,8712,4,2,59,105,11291,11293,1,8290,108,100,101,59,1,297,4,2,107,109,11305,11310,99,121,59,1,1110,108,5,239,1,59,11316,1,239,4,6,99,102,109,111,115,117,11332,11346,11351,11357,11363,11380,4,2,105,121,11338,11343,114,99,59,1,309,59,1,1081,114,59,3,55349,56615,97,116,104,59,1,567,112,102,59,3,55349,56667,4,2,99,101,11369,11374,114,59,3,55349,56511,114,99,121,59,1,1112,107,99,121,59,1,1108,4,8,97,99,102,103,104,106,111,115,11404,11418,11433,11438,11445,11450,11455,11461,112,112,97,4,2,59,118,11413,11415,1,954,59,1,1008,4,2,101,121,11424,11430,100,105,108,59,1,311,59,1,1082,114,59,3,55349,56616,114,101,101,110,59,1,312,99,121,59,1,1093,99,121,59,1,1116,112,102,59,3,55349,56668,99,114,59,3,55349,56512,4,23,65,66,69,72,97,98,99,100,101,102,103,104,106,108,109,110,111,112,114,115,116,117,118,11515,11538,11544,11555,11560,11721,11780,11818,11868,12136,12160,12171,12203,12208,12246,12275,12327,12509,12523,12569,12641,12732,12752,4,3,97,114,116,11523,11528,11532,114,114,59,1,8666,114,59,1,8656,97,105,108,59,1,10523,97,114,114,59,1,10510,4,2,59,103,11550,11552,1,8806,59,1,10891,97,114,59,1,10594,4,9,99,101,103,109,110,112,113,114,116,11580,11586,11594,11600,11606,11624,11627,11636,11694,117,116,101,59,1,314,109,112,116,121,118,59,1,10676,114,97,110,59,1,8466,98,100,97,59,1,955,103,4,3,59,100,108,11615,11617,11620,1,10216,59,1,10641,101,59,1,10216,59,1,10885,117,111,5,171,1,59,11634,1,171,114,4,8,59,98,102,104,108,112,115,116,11655,11657,11669,11673,11677,11681,11685,11690,1,8592,4,2,59,102,11663,11665,1,8676,115,59,1,10527,115,59,1,10525,107,59,1,8617,112,59,1,8619,108,59,1,10553,105,109,59,1,10611,108,59,1,8610,4,3,59,97,101,11702,11704,11709,1,10923,105,108,59,1,10521,4,2,59,115,11715,11717,1,10925,59,3,10925,65024,4,3,97,98,114,11729,11734,11739,114,114,59,1,10508,114,107,59,1,10098,4,2,97,107,11745,11758,99,4,2,101,107,11752,11755,59,1,123,59,1,91,4,2,101,115,11764,11767,59,1,10635,108,4,2,100,117,11774,11777,59,1,10639,59,1,10637,4,4,97,101,117,121,11790,11796,11811,11815,114,111,110,59,1,318,4,2,100,105,11802,11807,105,108,59,1,316,108,59,1,8968,98,59,1,123,59,1,1083,4,4,99,113,114,115,11828,11832,11845,11864,97,59,1,10550,117,111,4,2,59,114,11840,11842,1,8220,59,1,8222,4,2,100,117,11851,11857,104,97,114,59,1,10599,115,104,97,114,59,1,10571,104,59,1,8626,4,5,59,102,103,113,115,11880,11882,12008,12011,12031,1,8804,116,4,5,97,104,108,114,116,11895,11913,11935,11947,11996,114,114,111,119,4,2,59,116,11905,11907,1,8592,97,105,108,59,1,8610,97,114,112,111,111,110,4,2,100,117,11925,11931,111,119,110,59,1,8637,112,59,1,8636,101,102,116,97,114,114,111,119,115,59,1,8647,105,103,104,116,4,3,97,104,115,11959,11974,11984,114,114,111,119,4,2,59,115,11969,11971,1,8596,59,1,8646,97,114,112,111,111,110,115,59,1,8651,113,117,105,103,97,114,114,111,119,59,1,8621,104,114,101,101,116,105,109,101,115,59,1,8907,59,1,8922,4,3,59,113,115,12019,12021,12024,1,8804,59,1,8806,108,97,110,116,59,1,10877,4,5,59,99,100,103,115,12043,12045,12049,12070,12083,1,10877,99,59,1,10920,111,116,4,2,59,111,12057,12059,1,10879,4,2,59,114,12065,12067,1,10881,59,1,10883,4,2,59,101,12076,12079,3,8922,65024,115,59,1,10899,4,5,97,100,101,103,115,12095,12103,12108,12126,12131,112,112,114,111,120,59,1,10885,111,116,59,1,8918,113,4,2,103,113,12115,12120,116,114,59,1,8922,103,116,114,59,1,10891,116,114,59,1,8822,105,109,59,1,8818,4,3,105,108,114,12144,12150,12156,115,104,116,59,1,10620,111,111,114,59,1,8970,59,3,55349,56617,4,2,59,69,12166,12168,1,8822,59,1,10897,4,2,97,98,12177,12198,114,4,2,100,117,12184,12187,59,1,8637,4,2,59,108,12193,12195,1,8636,59,1,10602,108,107,59,1,9604,99,121,59,1,1113,4,5,59,97,99,104,116,12220,12222,12227,12235,12241,1,8810,114,114,59,1,8647,111,114,110,101,114,59,1,8990,97,114,100,59,1,10603,114,105,59,1,9722,4,2,105,111,12252,12258,100,111,116,59,1,320,117,115,116,4,2,59,97,12267,12269,1,9136,99,104,101,59,1,9136,4,4,69,97,101,115,12285,12288,12303,12322,59,1,8808,112,4,2,59,112,12295,12297,1,10889,114,111,120,59,1,10889,4,2,59,113,12309,12311,1,10887,4,2,59,113,12317,12319,1,10887,59,1,8808,105,109,59,1,8934,4,8,97,98,110,111,112,116,119,122,12345,12359,12364,12421,12446,12467,12474,12490,4,2,110,114,12351,12355,103,59,1,10220,114,59,1,8701,114,107,59,1,10214,103,4,3,108,109,114,12373,12401,12409,101,102,116,4,2,97,114,12382,12389,114,114,111,119,59,1,10229,105,103,104,116,97,114,114,111,119,59,1,10231,97,112,115,116,111,59,1,10236,105,103,104,116,97,114,114,111,119,59,1,10230,112,97,114,114,111,119,4,2,108,114,12433,12439,101,102,116,59,1,8619,105,103,104,116,59,1,8620,4,3,97,102,108,12454,12458,12462,114,59,1,10629,59,3,55349,56669,117,115,59,1,10797,105,109,101,115,59,1,10804,4,2,97,98,12480,12485,115,116,59,1,8727,97,114,59,1,95,4,3,59,101,102,12498,12500,12506,1,9674,110,103,101,59,1,9674,59,1,10731,97,114,4,2,59,108,12517,12519,1,40,116,59,1,10643,4,5,97,99,104,109,116,12535,12540,12548,12561,12564,114,114,59,1,8646,111,114,110,101,114,59,1,8991,97,114,4,2,59,100,12556,12558,1,8651,59,1,10605,59,1,8206,114,105,59,1,8895,4,6,97,99,104,105,113,116,12583,12589,12594,12597,12614,12635,113,117,111,59,1,8249,114,59,3,55349,56513,59,1,8624,109,4,3,59,101,103,12606,12608,12611,1,8818,59,1,10893,59,1,10895,4,2,98,117,12620,12623,59,1,91,111,4,2,59,114,12630,12632,1,8216,59,1,8218,114,111,107,59,1,322,5,60,8,59,99,100,104,105,108,113,114,12660,12662,12675,12680,12686,12692,12698,12705,1,60,4,2,99,105,12668,12671,59,1,10918,114,59,1,10873,111,116,59,1,8918,114,101,101,59,1,8907,109,101,115,59,1,8905,97,114,114,59,1,10614,117,101,115,116,59,1,10875,4,2,80,105,12711,12716,97,114,59,1,10646,4,3,59,101,102,12724,12726,12729,1,9667,59,1,8884,59,1,9666,114,4,2,100,117,12739,12746,115,104,97,114,59,1,10570,104,97,114,59,1,10598,4,2,101,110,12758,12768,114,116,110,101,113,113,59,3,8808,65024,69,59,3,8808,65024,4,14,68,97,99,100,101,102,104,105,108,110,111,112,115,117,12803,12809,12893,12908,12914,12928,12933,12937,13011,13025,13032,13049,13052,13069,68,111,116,59,1,8762,4,4,99,108,112,114,12819,12827,12849,12887,114,5,175,1,59,12825,1,175,4,2,101,116,12833,12836,59,1,9794,4,2,59,101,12842,12844,1,10016,115,101,59,1,10016,4,2,59,115,12855,12857,1,8614,116,111,4,4,59,100,108,117,12869,12871,12877,12883,1,8614,111,119,110,59,1,8615,101,102,116,59,1,8612,112,59,1,8613,107,101,114,59,1,9646,4,2,111,121,12899,12905,109,109,97,59,1,10793,59,1,1084,97,115,104,59,1,8212,97,115,117,114,101,100,97,110,103,108,101,59,1,8737,114,59,3,55349,56618,111,59,1,8487,4,3,99,100,110,12945,12954,12985,114,111,5,181,1,59,12952,1,181,4,4,59,97,99,100,12964,12966,12971,12976,1,8739,115,116,59,1,42,105,114,59,1,10992,111,116,5,183,1,59,12983,1,183,117,115,4,3,59,98,100,12995,12997,13e3,1,8722,59,1,8863,4,2,59,117,13006,13008,1,8760,59,1,10794,4,2,99,100,13017,13021,112,59,1,10971,114,59,1,8230,112,108,117,115,59,1,8723,4,2,100,112,13038,13044,101,108,115,59,1,8871,102,59,3,55349,56670,59,1,8723,4,2,99,116,13058,13063,114,59,3,55349,56514,112,111,115,59,1,8766,4,3,59,108,109,13077,13079,13087,1,956,116,105,109,97,112,59,1,8888,97,112,59,1,8888,4,24,71,76,82,86,97,98,99,100,101,102,103,104,105,106,108,109,111,112,114,115,116,117,118,119,13142,13165,13217,13229,13247,13330,13359,13414,13420,13508,13513,13579,13602,13626,13631,13762,13767,13855,13936,13995,14214,14285,14312,14432,4,2,103,116,13148,13152,59,3,8921,824,4,2,59,118,13158,13161,3,8811,8402,59,3,8811,824,4,3,101,108,116,13173,13200,13204,102,116,4,2,97,114,13181,13188,114,114,111,119,59,1,8653,105,103,104,116,97,114,114,111,119,59,1,8654,59,3,8920,824,4,2,59,118,13210,13213,3,8810,8402,59,3,8810,824,105,103,104,116,97,114,114,111,119,59,1,8655,4,2,68,100,13235,13241,97,115,104,59,1,8879,97,115,104,59,1,8878,4,5,98,99,110,112,116,13259,13264,13270,13275,13308,108,97,59,1,8711,117,116,101,59,1,324,103,59,3,8736,8402,4,5,59,69,105,111,112,13287,13289,13293,13298,13302,1,8777,59,3,10864,824,100,59,3,8779,824,115,59,1,329,114,111,120,59,1,8777,117,114,4,2,59,97,13316,13318,1,9838,108,4,2,59,115,13325,13327,1,9838,59,1,8469,4,2,115,117,13336,13344,112,5,160,1,59,13342,1,160,109,112,4,2,59,101,13352,13355,3,8782,824,59,3,8783,824,4,5,97,101,111,117,121,13371,13385,13391,13407,13411,4,2,112,114,13377,13380,59,1,10819,111,110,59,1,328,100,105,108,59,1,326,110,103,4,2,59,100,13399,13401,1,8775,111,116,59,3,10861,824,112,59,1,10818,59,1,1085,97,115,104,59,1,8211,4,7,59,65,97,100,113,115,120,13436,13438,13443,13466,13472,13478,13494,1,8800,114,114,59,1,8663,114,4,2,104,114,13450,13454,107,59,1,10532,4,2,59,111,13460,13462,1,8599,119,59,1,8599,111,116,59,3,8784,824,117,105,118,59,1,8802,4,2,101,105,13484,13489,97,114,59,1,10536,109,59,3,8770,824,105,115,116,4,2,59,115,13503,13505,1,8708,59,1,8708,114,59,3,55349,56619,4,4,69,101,115,116,13523,13527,13563,13568,59,3,8807,824,4,3,59,113,115,13535,13537,13559,1,8817,4,3,59,113,115,13545,13547,13551,1,8817,59,3,8807,824,108,97,110,116,59,3,10878,824,59,3,10878,824,105,109,59,1,8821,4,2,59,114,13574,13576,1,8815,59,1,8815,4,3,65,97,112,13587,13592,13597,114,114,59,1,8654,114,114,59,1,8622,97,114,59,1,10994,4,3,59,115,118,13610,13612,13623,1,8715,4,2,59,100,13618,13620,1,8956,59,1,8954,59,1,8715,99,121,59,1,1114,4,7,65,69,97,100,101,115,116,13647,13652,13656,13661,13665,13737,13742,114,114,59,1,8653,59,3,8806,824,114,114,59,1,8602,114,59,1,8229,4,4,59,102,113,115,13675,13677,13703,13725,1,8816,116,4,2,97,114,13684,13691,114,114,111,119,59,1,8602,105,103,104,116,97,114,114,111,119,59,1,8622,4,3,59,113,115,13711,13713,13717,1,8816,59,3,8806,824,108,97,110,116,59,3,10877,824,4,2,59,115,13731,13734,3,10877,824,59,1,8814,105,109,59,1,8820,4,2,59,114,13748,13750,1,8814,105,4,2,59,101,13757,13759,1,8938,59,1,8940,105,100,59,1,8740,4,2,112,116,13773,13778,102,59,3,55349,56671,5,172,3,59,105,110,13787,13789,13829,1,172,110,4,4,59,69,100,118,13800,13802,13806,13812,1,8713,59,3,8953,824,111,116,59,3,8949,824,4,3,97,98,99,13820,13823,13826,59,1,8713,59,1,8951,59,1,8950,105,4,2,59,118,13836,13838,1,8716,4,3,97,98,99,13846,13849,13852,59,1,8716,59,1,8958,59,1,8957,4,3,97,111,114,13863,13892,13899,114,4,4,59,97,115,116,13874,13876,13883,13888,1,8742,108,108,101,108,59,1,8742,108,59,3,11005,8421,59,3,8706,824,108,105,110,116,59,1,10772,4,3,59,99,101,13907,13909,13914,1,8832,117,101,59,1,8928,4,2,59,99,13920,13923,3,10927,824,4,2,59,101,13929,13931,1,8832,113,59,3,10927,824,4,4,65,97,105,116,13946,13951,13971,13982,114,114,59,1,8655,114,114,4,3,59,99,119,13961,13963,13967,1,8603,59,3,10547,824,59,3,8605,824,103,104,116,97,114,114,111,119,59,1,8603,114,105,4,2,59,101,13990,13992,1,8939,59,1,8941,4,7,99,104,105,109,112,113,117,14011,14036,14060,14080,14085,14090,14106,4,4,59,99,101,114,14021,14023,14028,14032,1,8833,117,101,59,1,8929,59,3,10928,824,59,3,55349,56515,111,114,116,4,2,109,112,14045,14050,105,100,59,1,8740,97,114,97,108,108,101,108,59,1,8742,109,4,2,59,101,14067,14069,1,8769,4,2,59,113,14075,14077,1,8772,59,1,8772,105,100,59,1,8740,97,114,59,1,8742,115,117,4,2,98,112,14098,14102,101,59,1,8930,101,59,1,8931,4,3,98,99,112,14114,14157,14171,4,4,59,69,101,115,14124,14126,14130,14133,1,8836,59,3,10949,824,59,1,8840,101,116,4,2,59,101,14141,14144,3,8834,8402,113,4,2,59,113,14151,14153,1,8840,59,3,10949,824,99,4,2,59,101,14164,14166,1,8833,113,59,3,10928,824,4,4,59,69,101,115,14181,14183,14187,14190,1,8837,59,3,10950,824,59,1,8841,101,116,4,2,59,101,14198,14201,3,8835,8402,113,4,2,59,113,14208,14210,1,8841,59,3,10950,824,4,4,103,105,108,114,14224,14228,14238,14242,108,59,1,8825,108,100,101,5,241,1,59,14236,1,241,103,59,1,8824,105,97,110,103,108,101,4,2,108,114,14254,14269,101,102,116,4,2,59,101,14263,14265,1,8938,113,59,1,8940,105,103,104,116,4,2,59,101,14279,14281,1,8939,113,59,1,8941,4,2,59,109,14291,14293,1,957,4,3,59,101,115,14301,14303,14308,1,35,114,111,59,1,8470,112,59,1,8199,4,9,68,72,97,100,103,105,108,114,115,14332,14338,14344,14349,14355,14369,14376,14408,14426,97,115,104,59,1,8877,97,114,114,59,1,10500,112,59,3,8781,8402,97,115,104,59,1,8876,4,2,101,116,14361,14365,59,3,8805,8402,59,3,62,8402,110,102,105,110,59,1,10718,4,3,65,101,116,14384,14389,14393,114,114,59,1,10498,59,3,8804,8402,4,2,59,114,14399,14402,3,60,8402,105,101,59,3,8884,8402,4,2,65,116,14414,14419,114,114,59,1,10499,114,105,101,59,3,8885,8402,105,109,59,3,8764,8402,4,3,65,97,110,14440,14445,14468,114,114,59,1,8662,114,4,2,104,114,14452,14456,107,59,1,10531,4,2,59,111,14462,14464,1,8598,119,59,1,8598,101,97,114,59,1,10535,4,18,83,97,99,100,101,102,103,104,105,108,109,111,112,114,115,116,117,118,14512,14515,14535,14560,14597,14603,14618,14643,14657,14662,14701,14741,14747,14769,14851,14877,14907,14916,59,1,9416,4,2,99,115,14521,14531,117,116,101,5,243,1,59,14529,1,243,116,59,1,8859,4,2,105,121,14541,14557,114,4,2,59,99,14548,14550,1,8858,5,244,1,59,14555,1,244,59,1,1086,4,5,97,98,105,111,115,14572,14577,14583,14587,14591,115,104,59,1,8861,108,97,99,59,1,337,118,59,1,10808,116,59,1,8857,111,108,100,59,1,10684,108,105,103,59,1,339,4,2,99,114,14609,14614,105,114,59,1,10687,59,3,55349,56620,4,3,111,114,116,14626,14630,14640,110,59,1,731,97,118,101,5,242,1,59,14638,1,242,59,1,10689,4,2,98,109,14649,14654,97,114,59,1,10677,59,1,937,110,116,59,1,8750,4,4,97,99,105,116,14672,14677,14693,14698,114,114,59,1,8634,4,2,105,114,14683,14687,114,59,1,10686,111,115,115,59,1,10683,110,101,59,1,8254,59,1,10688,4,3,97,101,105,14709,14714,14719,99,114,59,1,333,103,97,59,1,969,4,3,99,100,110,14727,14733,14736,114,111,110,59,1,959,59,1,10678,117,115,59,1,8854,112,102,59,3,55349,56672,4,3,97,101,108,14755,14759,14764,114,59,1,10679,114,112,59,1,10681,117,115,59,1,8853,4,7,59,97,100,105,111,115,118,14785,14787,14792,14831,14837,14841,14848,1,8744,114,114,59,1,8635,4,4,59,101,102,109,14802,14804,14817,14824,1,10845,114,4,2,59,111,14811,14813,1,8500,102,59,1,8500,5,170,1,59,14822,1,170,5,186,1,59,14829,1,186,103,111,102,59,1,8886,114,59,1,10838,108,111,112,101,59,1,10839,59,1,10843,4,3,99,108,111,14859,14863,14873,114,59,1,8500,97,115,104,5,248,1,59,14871,1,248,108,59,1,8856,105,4,2,108,109,14884,14893,100,101,5,245,1,59,14891,1,245,101,115,4,2,59,97,14901,14903,1,8855,115,59,1,10806,109,108,5,246,1,59,14914,1,246,98,97,114,59,1,9021,4,12,97,99,101,102,104,105,108,109,111,114,115,117,14948,14992,14996,15033,15038,15068,15090,15189,15192,15222,15427,15441,114,4,4,59,97,115,116,14959,14961,14976,14989,1,8741,5,182,2,59,108,14968,14970,1,182,108,101,108,59,1,8741,4,2,105,108,14982,14986,109,59,1,10995,59,1,11005,59,1,8706,121,59,1,1087,114,4,5,99,105,109,112,116,15009,15014,15019,15024,15027,110,116,59,1,37,111,100,59,1,46,105,108,59,1,8240,59,1,8869,101,110,107,59,1,8241,114,59,3,55349,56621,4,3,105,109,111,15046,15057,15063,4,2,59,118,15052,15054,1,966,59,1,981,109,97,116,59,1,8499,110,101,59,1,9742,4,3,59,116,118,15076,15078,15087,1,960,99,104,102,111,114,107,59,1,8916,59,1,982,4,2,97,117,15096,15119,110,4,2,99,107,15103,15115,107,4,2,59,104,15110,15112,1,8463,59,1,8462,118,59,1,8463,115,4,9,59,97,98,99,100,101,109,115,116,15140,15142,15148,15151,15156,15168,15171,15179,15184,1,43,99,105,114,59,1,10787,59,1,8862,105,114,59,1,10786,4,2,111,117,15162,15165,59,1,8724,59,1,10789,59,1,10866,110,5,177,1,59,15177,1,177,105,109,59,1,10790,119,111,59,1,10791,59,1,177,4,3,105,112,117,15200,15208,15213,110,116,105,110,116,59,1,10773,102,59,3,55349,56673,110,100,5,163,1,59,15220,1,163,4,10,59,69,97,99,101,105,110,111,115,117,15244,15246,15249,15253,15258,15334,15347,15367,15416,15421,1,8826,59,1,10931,112,59,1,10935,117,101,59,1,8828,4,2,59,99,15264,15266,1,10927,4,6,59,97,99,101,110,115,15280,15282,15290,15299,15303,15329,1,8826,112,112,114,111,120,59,1,10935,117,114,108,121,101,113,59,1,8828,113,59,1,10927,4,3,97,101,115,15311,15319,15324,112,112,114,111,120,59,1,10937,113,113,59,1,10933,105,109,59,1,8936,105,109,59,1,8830,109,101,4,2,59,115,15342,15344,1,8242,59,1,8473,4,3,69,97,115,15355,15358,15362,59,1,10933,112,59,1,10937,105,109,59,1,8936,4,3,100,102,112,15375,15378,15404,59,1,8719,4,3,97,108,115,15386,15392,15398,108,97,114,59,1,9006,105,110,101,59,1,8978,117,114,102,59,1,8979,4,2,59,116,15410,15412,1,8733,111,59,1,8733,105,109,59,1,8830,114,101,108,59,1,8880,4,2,99,105,15433,15438,114,59,3,55349,56517,59,1,968,110,99,115,112,59,1,8200,4,6,102,105,111,112,115,117,15462,15467,15472,15478,15485,15491,114,59,3,55349,56622,110,116,59,1,10764,112,102,59,3,55349,56674,114,105,109,101,59,1,8279,99,114,59,3,55349,56518,4,3,97,101,111,15499,15520,15534,116,4,2,101,105,15506,15515,114,110,105,111,110,115,59,1,8461,110,116,59,1,10774,115,116,4,2,59,101,15528,15530,1,63,113,59,1,8799,116,5,34,1,59,15540,1,34,4,21,65,66,72,97,98,99,100,101,102,104,105,108,109,110,111,112,114,115,116,117,120,15586,15609,15615,15620,15796,15855,15893,15931,15977,16001,16039,16183,16204,16222,16228,16285,16312,16318,16363,16408,16416,4,3,97,114,116,15594,15599,15603,114,114,59,1,8667,114,59,1,8658,97,105,108,59,1,10524,97,114,114,59,1,10511,97,114,59,1,10596,4,7,99,100,101,110,113,114,116,15636,15651,15656,15664,15687,15696,15770,4,2,101,117,15642,15646,59,3,8765,817,116,101,59,1,341,105,99,59,1,8730,109,112,116,121,118,59,1,10675,103,4,4,59,100,101,108,15675,15677,15680,15683,1,10217,59,1,10642,59,1,10661,101,59,1,10217,117,111,5,187,1,59,15694,1,187,114,4,11,59,97,98,99,102,104,108,112,115,116,119,15721,15723,15727,15739,15742,15746,15750,15754,15758,15763,15767,1,8594,112,59,1,10613,4,2,59,102,15733,15735,1,8677,115,59,1,10528,59,1,10547,115,59,1,10526,107,59,1,8618,112,59,1,8620,108,59,1,10565,105,109,59,1,10612,108,59,1,8611,59,1,8605,4,2,97,105,15776,15781,105,108,59,1,10522,111,4,2,59,110,15788,15790,1,8758,97,108,115,59,1,8474,4,3,97,98,114,15804,15809,15814,114,114,59,1,10509,114,107,59,1,10099,4,2,97,107,15820,15833,99,4,2,101,107,15827,15830,59,1,125,59,1,93,4,2,101,115,15839,15842,59,1,10636,108,4,2,100,117,15849,15852,59,1,10638,59,1,10640,4,4,97,101,117,121,15865,15871,15886,15890,114,111,110,59,1,345,4,2,100,105,15877,15882,105,108,59,1,343,108,59,1,8969,98,59,1,125,59,1,1088,4,4,99,108,113,115,15903,15907,15914,15927,97,59,1,10551,100,104,97,114,59,1,10601,117,111,4,2,59,114,15922,15924,1,8221,59,1,8221,104,59,1,8627,4,3,97,99,103,15939,15966,15970,108,4,4,59,105,112,115,15950,15952,15957,15963,1,8476,110,101,59,1,8475,97,114,116,59,1,8476,59,1,8477,116,59,1,9645,5,174,1,59,15975,1,174,4,3,105,108,114,15985,15991,15997,115,104,116,59,1,10621,111,111,114,59,1,8971,59,3,55349,56623,4,2,97,111,16007,16028,114,4,2,100,117,16014,16017,59,1,8641,4,2,59,108,16023,16025,1,8640,59,1,10604,4,2,59,118,16034,16036,1,961,59,1,1009,4,3,103,110,115,16047,16167,16171,104,116,4,6,97,104,108,114,115,116,16063,16081,16103,16130,16143,16155,114,114,111,119,4,2,59,116,16073,16075,1,8594,97,105,108,59,1,8611,97,114,112,111,111,110,4,2,100,117,16093,16099,111,119,110,59,1,8641,112,59,1,8640,101,102,116,4,2,97,104,16112,16120,114,114,111,119,115,59,1,8644,97,114,112,111,111,110,115,59,1,8652,105,103,104,116,97,114,114,111,119,115,59,1,8649,113,117,105,103,97,114,114,111,119,59,1,8605,104,114,101,101,116,105,109,101,115,59,1,8908,103,59,1,730,105,110,103,100,111,116,115,101,113,59,1,8787,4,3,97,104,109,16191,16196,16201,114,114,59,1,8644,97,114,59,1,8652,59,1,8207,111,117,115,116,4,2,59,97,16214,16216,1,9137,99,104,101,59,1,9137,109,105,100,59,1,10990,4,4,97,98,112,116,16238,16252,16257,16278,4,2,110,114,16244,16248,103,59,1,10221,114,59,1,8702,114,107,59,1,10215,4,3,97,102,108,16265,16269,16273,114,59,1,10630,59,3,55349,56675,117,115,59,1,10798,105,109,101,115,59,1,10805,4,2,97,112,16291,16304,114,4,2,59,103,16298,16300,1,41,116,59,1,10644,111,108,105,110,116,59,1,10770,97,114,114,59,1,8649,4,4,97,99,104,113,16328,16334,16339,16342,113,117,111,59,1,8250,114,59,3,55349,56519,59,1,8625,4,2,98,117,16348,16351,59,1,93,111,4,2,59,114,16358,16360,1,8217,59,1,8217,4,3,104,105,114,16371,16377,16383,114,101,101,59,1,8908,109,101,115,59,1,8906,105,4,4,59,101,102,108,16394,16396,16399,16402,1,9657,59,1,8885,59,1,9656,116,114,105,59,1,10702,108,117,104,97,114,59,1,10600,59,1,8478,4,19,97,98,99,100,101,102,104,105,108,109,111,112,113,114,115,116,117,119,122,16459,16466,16472,16572,16590,16672,16687,16746,16844,16850,16924,16963,16988,17115,17121,17154,17206,17614,17656,99,117,116,101,59,1,347,113,117,111,59,1,8218,4,10,59,69,97,99,101,105,110,112,115,121,16494,16496,16499,16513,16518,16531,16536,16556,16564,16569,1,8827,59,1,10932,4,2,112,114,16505,16508,59,1,10936,111,110,59,1,353,117,101,59,1,8829,4,2,59,100,16524,16526,1,10928,105,108,59,1,351,114,99,59,1,349,4,3,69,97,115,16544,16547,16551,59,1,10934,112,59,1,10938,105,109,59,1,8937,111,108,105,110,116,59,1,10771,105,109,59,1,8831,59,1,1089,111,116,4,3,59,98,101,16582,16584,16587,1,8901,59,1,8865,59,1,10854,4,7,65,97,99,109,115,116,120,16606,16611,16634,16642,16646,16652,16668,114,114,59,1,8664,114,4,2,104,114,16618,16622,107,59,1,10533,4,2,59,111,16628,16630,1,8600,119,59,1,8600,116,5,167,1,59,16640,1,167,105,59,1,59,119,97,114,59,1,10537,109,4,2,105,110,16659,16665,110,117,115,59,1,8726,59,1,8726,116,59,1,10038,114,4,2,59,111,16679,16682,3,55349,56624,119,110,59,1,8994,4,4,97,99,111,121,16697,16702,16716,16739,114,112,59,1,9839,4,2,104,121,16708,16713,99,121,59,1,1097,59,1,1096,114,116,4,2,109,112,16724,16729,105,100,59,1,8739,97,114,97,108,108,101,108,59,1,8741,5,173,1,59,16744,1,173,4,2,103,109,16752,16770,109,97,4,3,59,102,118,16762,16764,16767,1,963,59,1,962,59,1,962,4,8,59,100,101,103,108,110,112,114,16788,16790,16795,16806,16817,16828,16832,16838,1,8764,111,116,59,1,10858,4,2,59,113,16801,16803,1,8771,59,1,8771,4,2,59,69,16812,16814,1,10910,59,1,10912,4,2,59,69,16823,16825,1,10909,59,1,10911,101,59,1,8774,108,117,115,59,1,10788,97,114,114,59,1,10610,97,114,114,59,1,8592,4,4,97,101,105,116,16860,16883,16891,16904,4,2,108,115,16866,16878,108,115,101,116,109,105,110,117,115,59,1,8726,104,112,59,1,10803,112,97,114,115,108,59,1,10724,4,2,100,108,16897,16900,59,1,8739,101,59,1,8995,4,2,59,101,16910,16912,1,10922,4,2,59,115,16918,16920,1,10924,59,3,10924,65024,4,3,102,108,112,16932,16938,16958,116,99,121,59,1,1100,4,2,59,98,16944,16946,1,47,4,2,59,97,16952,16954,1,10692,114,59,1,9023,102,59,3,55349,56676,97,4,2,100,114,16970,16985,101,115,4,2,59,117,16978,16980,1,9824,105,116,59,1,9824,59,1,8741,4,3,99,115,117,16996,17028,17089,4,2,97,117,17002,17015,112,4,2,59,115,17009,17011,1,8851,59,3,8851,65024,112,4,2,59,115,17022,17024,1,8852,59,3,8852,65024,117,4,2,98,112,17035,17062,4,3,59,101,115,17043,17045,17048,1,8847,59,1,8849,101,116,4,2,59,101,17056,17058,1,8847,113,59,1,8849,4,3,59,101,115,17070,17072,17075,1,8848,59,1,8850,101,116,4,2,59,101,17083,17085,1,8848,113,59,1,8850,4,3,59,97,102,17097,17099,17112,1,9633,114,4,2,101,102,17106,17109,59,1,9633,59,1,9642,59,1,9642,97,114,114,59,1,8594,4,4,99,101,109,116,17131,17136,17142,17148,114,59,3,55349,56520,116,109,110,59,1,8726,105,108,101,59,1,8995,97,114,102,59,1,8902,4,2,97,114,17160,17172,114,4,2,59,102,17167,17169,1,9734,59,1,9733,4,2,97,110,17178,17202,105,103,104,116,4,2,101,112,17188,17197,112,115,105,108,111,110,59,1,1013,104,105,59,1,981,115,59,1,175,4,5,98,99,109,110,112,17218,17351,17420,17423,17427,4,9,59,69,100,101,109,110,112,114,115,17238,17240,17243,17248,17261,17267,17279,17285,17291,1,8834,59,1,10949,111,116,59,1,10941,4,2,59,100,17254,17256,1,8838,111,116,59,1,10947,117,108,116,59,1,10945,4,2,69,101,17273,17276,59,1,10955,59,1,8842,108,117,115,59,1,10943,97,114,114,59,1,10617,4,3,101,105,117,17299,17335,17339,116,4,3,59,101,110,17308,17310,17322,1,8834,113,4,2,59,113,17317,17319,1,8838,59,1,10949,101,113,4,2,59,113,17330,17332,1,8842,59,1,10955,109,59,1,10951,4,2,98,112,17345,17348,59,1,10965,59,1,10963,99,4,6,59,97,99,101,110,115,17366,17368,17376,17385,17389,17415,1,8827,112,112,114,111,120,59,1,10936,117,114,108,121,101,113,59,1,8829,113,59,1,10928,4,3,97,101,115,17397,17405,17410,112,112,114,111,120,59,1,10938,113,113,59,1,10934,105,109,59,1,8937,105,109,59,1,8831,59,1,8721,103,59,1,9834,4,13,49,50,51,59,69,100,101,104,108,109,110,112,115,17455,17462,17469,17476,17478,17481,17496,17509,17524,17530,17536,17548,17554,5,185,1,59,17460,1,185,5,178,1,59,17467,1,178,5,179,1,59,17474,1,179,1,8835,59,1,10950,4,2,111,115,17487,17491,116,59,1,10942,117,98,59,1,10968,4,2,59,100,17502,17504,1,8839,111,116,59,1,10948,115,4,2,111,117,17516,17520,108,59,1,10185,98,59,1,10967,97,114,114,59,1,10619,117,108,116,59,1,10946,4,2,69,101,17542,17545,59,1,10956,59,1,8843,108,117,115,59,1,10944,4,3,101,105,117,17562,17598,17602,116,4,3,59,101,110,17571,17573,17585,1,8835,113,4,2,59,113,17580,17582,1,8839,59,1,10950,101,113,4,2,59,113,17593,17595,1,8843,59,1,10956,109,59,1,10952,4,2,98,112,17608,17611,59,1,10964,59,1,10966,4,3,65,97,110,17622,17627,17650,114,114,59,1,8665,114,4,2,104,114,17634,17638,107,59,1,10534,4,2,59,111,17644,17646,1,8601,119,59,1,8601,119,97,114,59,1,10538,108,105,103,5,223,1,59,17664,1,223,4,13,97,98,99,100,101,102,104,105,111,112,114,115,119,17694,17709,17714,17737,17742,17749,17754,17860,17905,17957,17964,18090,18122,4,2,114,117,17700,17706,103,101,116,59,1,8982,59,1,964,114,107,59,1,9140,4,3,97,101,121,17722,17728,17734,114,111,110,59,1,357,100,105,108,59,1,355,59,1,1090,111,116,59,1,8411,108,114,101,99,59,1,8981,114,59,3,55349,56625,4,4,101,105,107,111,17764,17805,17836,17851,4,2,114,116,17770,17786,101,4,2,52,102,17777,17780,59,1,8756,111,114,101,59,1,8756,97,4,3,59,115,118,17795,17797,17802,1,952,121,109,59,1,977,59,1,977,4,2,99,110,17811,17831,107,4,2,97,115,17818,17826,112,112,114,111,120,59,1,8776,105,109,59,1,8764,115,112,59,1,8201,4,2,97,115,17842,17846,112,59,1,8776,105,109,59,1,8764,114,110,5,254,1,59,17858,1,254,4,3,108,109,110,17868,17873,17901,100,101,59,1,732,101,115,5,215,3,59,98,100,17884,17886,17898,1,215,4,2,59,97,17892,17894,1,8864,114,59,1,10801,59,1,10800,116,59,1,8749,4,3,101,112,115,17913,17917,17953,97,59,1,10536,4,4,59,98,99,102,17927,17929,17934,17939,1,8868,111,116,59,1,9014,105,114,59,1,10993,4,2,59,111,17945,17948,3,55349,56677,114,107,59,1,10970,97,59,1,10537,114,105,109,101,59,1,8244,4,3,97,105,112,17972,17977,18082,100,101,59,1,8482,4,7,97,100,101,109,112,115,116,17993,18051,18056,18059,18066,18072,18076,110,103,108,101,4,5,59,100,108,113,114,18009,18011,18017,18032,18035,1,9653,111,119,110,59,1,9663,101,102,116,4,2,59,101,18026,18028,1,9667,113,59,1,8884,59,1,8796,105,103,104,116,4,2,59,101,18045,18047,1,9657,113,59,1,8885,111,116,59,1,9708,59,1,8796,105,110,117,115,59,1,10810,108,117,115,59,1,10809,98,59,1,10701,105,109,101,59,1,10811,101,122,105,117,109,59,1,9186,4,3,99,104,116,18098,18111,18116,4,2,114,121,18104,18108,59,3,55349,56521,59,1,1094,99,121,59,1,1115,114,111,107,59,1,359,4,2,105,111,18128,18133,120,116,59,1,8812,104,101,97,100,4,2,108,114,18143,18154,101,102,116,97,114,114,111,119,59,1,8606,105,103,104,116,97,114,114,111,119,59,1,8608,4,18,65,72,97,98,99,100,102,103,104,108,109,111,112,114,115,116,117,119,18204,18209,18214,18234,18250,18268,18292,18308,18319,18343,18379,18397,18413,18504,18547,18553,18584,18603,114,114,59,1,8657,97,114,59,1,10595,4,2,99,114,18220,18230,117,116,101,5,250,1,59,18228,1,250,114,59,1,8593,114,4,2,99,101,18241,18245,121,59,1,1118,118,101,59,1,365,4,2,105,121,18256,18265,114,99,5,251,1,59,18263,1,251,59,1,1091,4,3,97,98,104,18276,18281,18287,114,114,59,1,8645,108,97,99,59,1,369,97,114,59,1,10606,4,2,105,114,18298,18304,115,104,116,59,1,10622,59,3,55349,56626,114,97,118,101,5,249,1,59,18317,1,249,4,2,97,98,18325,18338,114,4,2,108,114,18332,18335,59,1,8639,59,1,8638,108,107,59,1,9600,4,2,99,116,18349,18374,4,2,111,114,18355,18369,114,110,4,2,59,101,18363,18365,1,8988,114,59,1,8988,111,112,59,1,8975,114,105,59,1,9720,4,2,97,108,18385,18390,99,114,59,1,363,5,168,1,59,18395,1,168,4,2,103,112,18403,18408,111,110,59,1,371,102,59,3,55349,56678,4,6,97,100,104,108,115,117,18427,18434,18445,18470,18475,18494,114,114,111,119,59,1,8593,111,119,110,97,114,114,111,119,59,1,8597,97,114,112,111,111,110,4,2,108,114,18457,18463,101,102,116,59,1,8639,105,103,104,116,59,1,8638,117,115,59,1,8846,105,4,3,59,104,108,18484,18486,18489,1,965,59,1,978,111,110,59,1,965,112,97,114,114,111,119,115,59,1,8648,4,3,99,105,116,18512,18537,18542,4,2,111,114,18518,18532,114,110,4,2,59,101,18526,18528,1,8989,114,59,1,8989,111,112,59,1,8974,110,103,59,1,367,114,105,59,1,9721,99,114,59,3,55349,56522,4,3,100,105,114,18561,18566,18572,111,116,59,1,8944,108,100,101,59,1,361,105,4,2,59,102,18579,18581,1,9653,59,1,9652,4,2,97,109,18590,18595,114,114,59,1,8648,108,5,252,1,59,18601,1,252,97,110,103,108,101,59,1,10663,4,15,65,66,68,97,99,100,101,102,108,110,111,112,114,115,122,18643,18648,18661,18667,18847,18851,18857,18904,18909,18915,18931,18937,18943,18949,18996,114,114,59,1,8661,97,114,4,2,59,118,18656,18658,1,10984,59,1,10985,97,115,104,59,1,8872,4,2,110,114,18673,18679,103,114,116,59,1,10652,4,7,101,107,110,112,114,115,116,18695,18704,18711,18720,18742,18754,18810,112,115,105,108,111,110,59,1,1013,97,112,112,97,59,1,1008,111,116,104,105,110,103,59,1,8709,4,3,104,105,114,18728,18732,18735,105,59,1,981,59,1,982,111,112,116,111,59,1,8733,4,2,59,104,18748,18750,1,8597,111,59,1,1009,4,2,105,117,18760,18766,103,109,97,59,1,962,4,2,98,112,18772,18791,115,101,116,110,101,113,4,2,59,113,18784,18787,3,8842,65024,59,3,10955,65024,115,101,116,110,101,113,4,2,59,113,18803,18806,3,8843,65024,59,3,10956,65024,4,2,104,114,18816,18822,101,116,97,59,1,977,105,97,110,103,108,101,4,2,108,114,18834,18840,101,102,116,59,1,8882,105,103,104,116,59,1,8883,121,59,1,1074,97,115,104,59,1,8866,4,3,101,108,114,18865,18884,18890,4,3,59,98,101,18873,18875,18880,1,8744,97,114,59,1,8891,113,59,1,8794,108,105,112,59,1,8942,4,2,98,116,18896,18901,97,114,59,1,124,59,1,124,114,59,3,55349,56627,116,114,105,59,1,8882,115,117,4,2,98,112,18923,18927,59,3,8834,8402,59,3,8835,8402,112,102,59,3,55349,56679,114,111,112,59,1,8733,116,114,105,59,1,8883,4,2,99,117,18955,18960,114,59,3,55349,56523,4,2,98,112,18966,18981,110,4,2,69,101,18973,18977,59,3,10955,65024,59,3,8842,65024,110,4,2,69,101,18988,18992,59,3,10956,65024,59,3,8843,65024,105,103,122,97,103,59,1,10650,4,7,99,101,102,111,112,114,115,19020,19026,19061,19066,19072,19075,19089,105,114,99,59,1,373,4,2,100,105,19032,19055,4,2,98,103,19038,19043,97,114,59,1,10847,101,4,2,59,113,19050,19052,1,8743,59,1,8793,101,114,112,59,1,8472,114,59,3,55349,56628,112,102,59,3,55349,56680,59,1,8472,4,2,59,101,19081,19083,1,8768,97,116,104,59,1,8768,99,114,59,3,55349,56524,4,14,99,100,102,104,105,108,109,110,111,114,115,117,118,119,19125,19146,19152,19157,19173,19176,19192,19197,19202,19236,19252,19269,19286,19291,4,3,97,105,117,19133,19137,19142,112,59,1,8898,114,99,59,1,9711,112,59,1,8899,116,114,105,59,1,9661,114,59,3,55349,56629,4,2,65,97,19163,19168,114,114,59,1,10234,114,114,59,1,10231,59,1,958,4,2,65,97,19182,19187,114,114,59,1,10232,114,114,59,1,10229,97,112,59,1,10236,105,115,59,1,8955,4,3,100,112,116,19210,19215,19230,111,116,59,1,10752,4,2,102,108,19221,19225,59,3,55349,56681,117,115,59,1,10753,105,109,101,59,1,10754,4,2,65,97,19242,19247,114,114,59,1,10233,114,114,59,1,10230,4,2,99,113,19258,19263,114,59,3,55349,56525,99,117,112,59,1,10758,4,2,112,116,19275,19281,108,117,115,59,1,10756,114,105,59,1,9651,101,101,59,1,8897,101,100,103,101,59,1,8896,4,8,97,99,101,102,105,111,115,117,19316,19335,19349,19357,19362,19367,19373,19379,99,4,2,117,121,19323,19332,116,101,5,253,1,59,19330,1,253,59,1,1103,4,2,105,121,19341,19346,114,99,59,1,375,59,1,1099,110,5,165,1,59,19355,1,165,114,59,3,55349,56630,99,121,59,1,1111,112,102,59,3,55349,56682,99,114,59,3,55349,56526,4,2,99,109,19385,19389,121,59,1,1102,108,5,255,1,59,19395,1,255,4,10,97,99,100,101,102,104,105,111,115,119,19419,19426,19441,19446,19462,19467,19472,19480,19486,19492,99,117,116,101,59,1,378,4,2,97,121,19432,19438,114,111,110,59,1,382,59,1,1079,111,116,59,1,380,4,2,101,116,19452,19458,116,114,102,59,1,8488,97,59,1,950,114,59,3,55349,56631,99,121,59,1,1078,103,114,97,114,114,59,1,8669,112,102,59,3,55349,56683,99,114,59,3,55349,56527,4,2,106,110,19498,19501,59,1,8205,106,59,1,8204])},47757:function(e,n,r){"use strict";let a=r(79740),i=r(97700),o=a.CODE_POINTS;e.exports=class{constructor(){this.html=null,this.pos=-1,this.lastGapPos=-1,this.lastCharPos=-1,this.gapStack=[],this.skipNextNewLine=!1,this.lastChunkWritten=!1,this.endOfChunkHit=!1,this.bufferWaterline=65536}_err(){}_addGap(){this.gapStack.push(this.lastGapPos),this.lastGapPos=this.pos}_processSurrogate(e){if(this.pos!==this.lastCharPos){let n=this.html.charCodeAt(this.pos+1);if(a.isSurrogatePair(n))return this.pos++,this._addGap(),a.getSurrogatePairCodePoint(e,n)}else if(!this.lastChunkWritten)return this.endOfChunkHit=!0,o.EOF;return this._err(i.surrogateInInputStream),e}dropParsedChunk(){this.pos>this.bufferWaterline&&(this.lastCharPos-=this.pos,this.html=this.html.substring(this.pos),this.pos=0,this.lastGapPos=-1,this.gapStack=[])}write(e,n){this.html?this.html+=e:this.html=e,this.lastCharPos=this.html.length-1,this.endOfChunkHit=!1,this.lastChunkWritten=n}insertHtmlAtCurrentPos(e){this.html=this.html.substring(0,this.pos+1)+e+this.html.substring(this.pos+1,this.html.length),this.lastCharPos=this.html.length-1,this.endOfChunkHit=!1}advance(){if(this.pos++,this.pos>this.lastCharPos)return this.endOfChunkHit=!this.lastChunkWritten,o.EOF;let e=this.html.charCodeAt(this.pos);if(this.skipNextNewLine&&e===o.LINE_FEED)return this.skipNextNewLine=!1,this._addGap(),this.advance();if(e===o.CARRIAGE_RETURN)return this.skipNextNewLine=!0,o.LINE_FEED;this.skipNextNewLine=!1,a.isSurrogate(e)&&(e=this._processSurrogate(e));let n=e>31&&e<127||e===o.LINE_FEED||e===o.CARRIAGE_RETURN||e>159&&e<64976;return n||this._checkForProblematicCharacters(e),e}_checkForProblematicCharacters(e){a.isControlCodePoint(e)?this._err(i.controlCharacterInInputStream):a.isUndefinedCodePoint(e)&&this._err(i.noncharacterInInputStream)}retreat(){this.pos===this.lastGapPos&&(this.lastGapPos=this.gapStack.pop(),this.pos--),this.pos--}}},17385:function(e,n,r){"use strict";let{DOCUMENT_MODE:a}=r(28040);n.createDocument=function(){return{nodeName:"#document",mode:a.NO_QUIRKS,childNodes:[]}},n.createDocumentFragment=function(){return{nodeName:"#document-fragment",childNodes:[]}},n.createElement=function(e,n,r){return{nodeName:e,tagName:e,attrs:r,namespaceURI:n,childNodes:[],parentNode:null}},n.createCommentNode=function(e){return{nodeName:"#comment",data:e,parentNode:null}};let i=function(e){return{nodeName:"#text",value:e,parentNode:null}},o=n.appendChild=function(e,n){e.childNodes.push(n),n.parentNode=e},s=n.insertBefore=function(e,n,r){let a=e.childNodes.indexOf(r);e.childNodes.splice(a,0,n),n.parentNode=e};n.setTemplateContent=function(e,n){e.content=n},n.getTemplateContent=function(e){return e.content},n.setDocumentType=function(e,n,r,a){let i=null;for(let s=0;s(Object.keys(n).forEach(r=>{e[r]=n[r]}),e),Object.create(null))}},24592:function(e){"use strict";class n{constructor(e){let n={},r=this._getOverriddenMethods(this,n);for(let a of Object.keys(r))"function"==typeof r[a]&&(n[a]=e[a],e[a]=r[a])}_getOverriddenMethods(){throw Error("Not implemented")}}n.install=function(e,n,r){e.__mixins||(e.__mixins=[]);for(let a=0;a255)return"DOMAIN_TOO_LONG";for(var i=r.split("."),o=0;o63)return"LABEL_TOO_LONG";if("-"===n.charAt(0))return"LABEL_STARTS_WITH_DASH";if("-"===n.charAt(n.length-1))return"LABEL_ENDS_WITH_DASH";if(!/^[a-z0-9\-]+$/.test(n))return"LABEL_INVALID_CHARS"}},n.parse=function(e){if("string"!=typeof e)throw TypeError("Domain name must be a string.");var r=e.slice(0).toLowerCase();"."===r.charAt(r.length-1)&&(r=r.slice(0,r.length-1));var o=i.validate(r);if(o)return{input:e,error:{message:n.errorCodes[o],code:o}};var s={input:e,tld:null,sld:null,domain:null,subdomain:null,listed:!1},l=r.split(".");if("local"===l[l.length-1])return s;var u=function(){return/xn--/.test(r)&&(s.domain&&(s.domain=a.toASCII(s.domain)),s.subdomain&&(s.subdomain=a.toASCII(s.subdomain))),s},c=i.findRule(r);if(!c)return l.length<2?s:(s.tld=l.pop(),s.sld=l.pop(),s.domain=[s.sld,s.tld].join("."),l.length&&(s.subdomain=l.pop()),u());s.listed=!0;var p=c.suffix.split("."),m=l.slice(0,l.length-p.length);return c.exception&&m.push(p.shift()),s.tld=p.join("."),m.length&&(c.wildcard&&(p.unshift(m.pop()),s.tld=p.join(".")),m.length&&(s.sld=m.pop(),s.domain=[s.sld,s.tld].join("."),m.length&&(s.subdomain=m.join(".")))),u()},n.get=function(e){return e&&n.parse(e).domain||null},n.isValid=function(e){var r=n.parse(e);return Boolean(r.domain&&r.listed)}},11253:function(e,n,r){var a,i,o;e=r.nmd(e),a="object"==typeof window&&window||this,i=function(e){"use strict";var n={},r=-1;function a(e,n,r){try{e(n,r)}catch(i){var a;setTimeout(function(){throw i},0)}}function i(e,n,r){e(n,r)}function o(e,r,o,s){var l,u=n[r],c=s?i:a;if(Object.prototype.hasOwnProperty.call(n,r))for(l in u)Object.prototype.hasOwnProperty.call(u,l)&&c(u[l],e,o)}function s(e){var r=String(e);return Boolean(Object.prototype.hasOwnProperty.call(n,r)&&function(e){var n;for(n in e)if(Object.prototype.hasOwnProperty.call(e,n))return!0;return!1}(n[r]))}function l(e,n,r,a){var i,l,u,c=(i=e="symbol"==typeof e?e.toString():e,function(){var e=String(i),r=e.lastIndexOf(".");for(o(i,i,n,a);-1!==r;)r=(e=e.substr(0,r)).lastIndexOf("."),o(i,e,n,a);o(i,"*",n,a)});return!!function(e){for(var n=String(e),r=s(n)||s("*"),a=n.lastIndexOf(".");!r&&-1!==a;)a=(n=n.substr(0,a)).lastIndexOf("."),r=s(n);return r}(e)&&(!0===r?c():setTimeout(c,0),!0)}e.publish=function(n,r){return l(n,r,!1,e.immediateExceptions)},e.publishSync=function(n,r){return l(n,r,!0,e.immediateExceptions)},e.subscribe=function(e,a){if("function"!=typeof a)return!1;e="symbol"==typeof e?e.toString():e,Object.prototype.hasOwnProperty.call(n,e)||(n[e]={});var i="uid_"+String(++r);return n[e][i]=a,i},e.subscribeAll=function(n){return e.subscribe("*",n)},e.subscribeOnce=function(n,r){var a=e.subscribe(n,function(){e.unsubscribe(a),r.apply(this,arguments)});return e},e.clearAllSubscriptions=function(){n={}},e.clearSubscriptions=function(e){var r;for(r in n)Object.prototype.hasOwnProperty.call(n,r)&&0===r.indexOf(e)&&delete n[r]},e.countSubscriptions=function(e){var r,a,i=0;for(r in n)if(Object.prototype.hasOwnProperty.call(n,r)&&0===r.indexOf(e)){for(a in n[r])i++;break}return i},e.getSubscriptions=function(e){var r,a=[];for(r in n)Object.prototype.hasOwnProperty.call(n,r)&&0===r.indexOf(e)&&a.push(r);return a},e.unsubscribe=function(r){var a,i,o,s="string"==typeof r&&(Object.prototype.hasOwnProperty.call(n,r)||function(e){var r;for(r in n)if(Object.prototype.hasOwnProperty.call(n,r)&&0===r.indexOf(e))return!0;return!1}(r)),l=!s&&"string"==typeof r,u="function"==typeof r,c=!1;if(s){e.clearSubscriptions(r);return}for(a in n)if(Object.prototype.hasOwnProperty.call(n,a)){if(i=n[a],l&&i[r]){delete i[r],c=r;break}if(u)for(o in i)Object.prototype.hasOwnProperty.call(i,o)&&i[o]===r&&(delete i[o],c=!0)}return c}},o={},a.PubSub?(o=a.PubSub,console.warn("PubSub already loaded, using existing version")):(a.PubSub=o,i(o)),void 0!==e&&e.exports&&(n=e.exports=o),n.PubSub=o,e.exports=n=o},76269:function(e,n,r){"use strict";r.r(n),r.d(n,{decode:function(){return g},encode:function(){return b},toASCII:function(){return y},toUnicode:function(){return k},ucs2decode:function(){return m},ucs2encode:function(){return d}});let a=/^xn--/,i=/[^\0-\x7E]/,o=/[\x2E\u3002\uFF0E\uFF61]/g,s={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},l=Math.floor,u=String.fromCharCode;function c(e){throw RangeError(s[e])}function p(e,n){let r=e.split("@"),a="";r.length>1&&(a=r[0]+"@",e=r[1]),e=e.replace(o,".");let i=e.split("."),s=(function(e,n){let r=[],a=e.length;for(;a--;)r[a]=n(e[a]);return r})(i,n).join(".");return a+s}function m(e){let n=[],r=0,a=e.length;for(;r=55296&&i<=56319&&rString.fromCodePoint(...e),h=function(e,n){return e+22+75*(e<26)-((0!=n)<<5)},f=function(e,n,r){let a=0;for(e=r?l(e/700):e>>1,e+=l(e/n);e>455;a+=36)e=l(e/35);return l(a+36*e/(e+38))},g=function(e){let n=[],r=e.length,a=0,i=128,o=72,s=e.lastIndexOf("-");s<0&&(s=0);for(let u=0;u=128&&c("not-basic"),n.push(e.charCodeAt(u));for(let p=s>0?s+1:0;p=r&&c("invalid-input");let b=(g=e.charCodeAt(p++))-48<10?g-22:g-65<26?g-65:g-97<26?g-97:36;(b>=36||b>l((2147483647-a)/d))&&c("overflow"),a+=b*d;let k=h<=o?1:h>=o+26?26:h-o;if(bl(2147483647/y)&&c("overflow"),d*=y}let v=n.length+1;o=f(a-m,v,0==m),l(a/v)>2147483647-i&&c("overflow"),i+=l(a/v),a%=v,n.splice(a++,0,i)}return String.fromCodePoint(...n)},b=function(e){let n=[],r=(e=m(e)).length,a=128,i=0,o=72;for(let s of e)s<128&&n.push(u(s));let p=n.length,d=p;for(p&&n.push("-");d=a&&bl((2147483647-i)/k)&&c("overflow"),i+=(g-a)*k,a=g,e))if(y2147483647&&c("overflow"),y==a){let v=i;for(let E=36;;E+=36){let T=E<=o?1:E>=o+26?26:E-o;if(v0&&m(a.width)/e.offsetWidth||1,u=e.offsetHeight>0&&m(a.height)/e.offsetHeight||1);var c=(s(e)?o(e):window).visualViewport,p=!h()&&r,d=(a.left+(p&&c?c.offsetLeft:0))/i,f=(a.top+(p&&c?c.offsetTop:0))/u,g=a.width/i,b=a.height/u;return{width:g,height:b,top:f,right:d+g,bottom:f+b,left:d,x:d,y:f}}function g(e){var n,r=o(e);return{scrollLeft:r.pageXOffset,scrollTop:r.pageYOffset}}function b(e){return e?(e.nodeName||"").toLowerCase():null}function k(e){return((s(e)?e.ownerDocument:e.document)||window.document).documentElement}function y(e){return f(k(e)).left+g(e).scrollLeft}function v(e){return o(e).getComputedStyle(e)}function E(e){var n=v(e),r=n.overflow,a=n.overflowX,i=n.overflowY;return/auto|scroll|overlay|hidden/.test(r+i+a)}function T(e){var n=f(e),r=e.offsetWidth,a=e.offsetHeight;return 1>=Math.abs(n.width-r)&&(r=n.width),1>=Math.abs(n.height-a)&&(a=n.height),{x:e.offsetLeft,y:e.offsetTop,width:r,height:a}}function _(e){return"html"===b(e)?e:e.assignedSlot||e.parentNode||(u(e)?e.host:null)||k(e)}function x(e,n){void 0===n&&(n=[]);var r,a=function e(n){return["html","body","#document"].indexOf(b(n))>=0?n.ownerDocument.body:l(n)&&E(n)?n:e(_(n))}(e),i=a===(null==(r=e.ownerDocument)?void 0:r.body),s=o(a),u=i?[s].concat(s.visualViewport||[],E(a)?a:[]):a,c=n.concat(u);return i?c:c.concat(x(_(u)))}function w(e){return["table","td","th"].indexOf(b(e))>=0}function A(e){return l(e)&&"fixed"!==v(e).position?e.offsetParent:null}function j(e){for(var n=o(e),r=A(e);r&&w(r)&&"static"===v(r).position;)r=A(r);return r&&("html"===b(r)||"body"===b(r)&&"static"===v(r).position)?n:r||function(e){var n=/firefox/i.test(d());if(/Trident/i.test(d())&&l(e)&&"fixed"===v(e).position)return null;var r=_(e);for(u(r)&&(r=r.host);l(r)&&0>["html","body"].indexOf(b(r));){var a=v(r);if("none"!==a.transform||"none"!==a.perspective||"paint"===a.contain||-1!==["transform","perspective"].indexOf(a.willChange)||n&&"filter"===a.willChange||n&&a.filter&&"none"!==a.filter)return r;r=r.parentNode}return null}(e)||n}var S="bottom",C="right",N="left",O="auto",R=["top",S,C,N],M="start",I="viewport",L="popper",P=R.reduce(function(e,n){return e.concat([n+"-"+M,n+"-end"])},[]),D=[].concat(R,[O]).reduce(function(e,n){return e.concat([n,n+"-"+M,n+"-end"])},[]),z=["beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite"],F={placement:"bottom",modifiers:[],strategy:"absolute"};function B(){for(var e=arguments.length,n=Array(e),r=0;r=0?"x":"y"}function K(e){var n,r=e.reference,a=e.element,i=e.placement,o=i?U(i):null,s=i?G(i):null,l=r.x+r.width/2-a.width/2,u=r.y+r.height/2-a.height/2;switch(o){case"top":n={x:l,y:r.y-a.height};break;case S:n={x:l,y:r.y+r.height};break;case C:n={x:r.x+r.width,y:u};break;case N:n={x:r.x-a.width,y:u};break;default:n={x:r.x,y:r.y}}var c=o?$(o):null;if(null!=c){var p="y"===c?"height":"width";switch(s){case M:n[c]=n[c]-(r[p]/2-a[p]/2);break;case"end":n[c]=n[c]+(r[p]/2-a[p]/2)}}return n}var V={top:"auto",right:"auto",bottom:"auto",left:"auto"};function q(e){var n,r,a=e.popper,i=e.popperRect,s=e.placement,l=e.variation,u=e.offsets,c=e.position,p=e.gpuAcceleration,d=e.adaptive,h=e.roundOffsets,f=e.isFixed,g=u.x,b=void 0===g?0:g,y=u.y,E=void 0===y?0:y,T="function"==typeof h?h({x:b,y:E}):{x:b,y:E};b=T.x,E=T.y;var _=u.hasOwnProperty("x"),x=u.hasOwnProperty("y"),w=N,A="top",O=window;if(d){var R=j(a),M="clientHeight",I="clientWidth";R===o(a)&&(R=k(a),"static"!==v(R).position&&"absolute"===c&&(M="scrollHeight",I="scrollWidth")),("top"===s||(s===N||s===C)&&"end"===l)&&(A=S,E-=(f&&R===O&&O.visualViewport?O.visualViewport.height:R[M])-i.height,E*=p?1:-1),(s===N||("top"===s||s===S)&&"end"===l)&&(w=C,b-=(f&&R===O&&O.visualViewport?O.visualViewport.width:R[I])-i.width,b*=p?1:-1)}var L,P,D,z,F=Object.assign({position:c},d&&V),B=!0===h?(P=(L={x:b,y:E}).x,D=L.y,{x:m(P*(z=window.devicePixelRatio||1))/z||0,y:m(D*z)/z||0}):{x:b,y:E};return(b=B.x,E=B.y,p)?Object.assign({},F,((r={})[A]=x?"0":"",r[w]=_?"0":"",r.transform=1>=(O.devicePixelRatio||1)?"translate("+b+"px, "+E+"px)":"translate3d("+b+"px, "+E+"px, 0)",r)):Object.assign({},F,((n={})[A]=x?E+"px":"",n[w]=_?b+"px":"",n.transform="",n))}var W={left:"right",right:"left",bottom:"top",top:"bottom"};function Y(e){return e.replace(/left|right|bottom|top/g,function(e){return W[e]})}var Q={start:"end",end:"start"};function Z(e){return e.replace(/start|end/g,function(e){return Q[e]})}function X(e,n){var r=n.getRootNode&&n.getRootNode();if(e.contains(n))return!0;if(r&&u(r)){var a=n;do{if(a&&e.isSameNode(a))return!0;a=a.parentNode||a.host}while(a)}return!1}function J(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function ee(e,n,r){var a,i,l,u,p,m,d,b,E,T,_,x;return n===I?J(function(e,n){var r=o(e),a=k(e),i=r.visualViewport,s=a.clientWidth,l=a.clientHeight,u=0,c=0;if(i){s=i.width,l=i.height;var p=h();(p||!p&&"fixed"===n)&&(u=i.offsetLeft,c=i.offsetTop)}return{width:s,height:l,x:u+y(e),y:c}}(e,r)):s(n)?((l=f(n,!1,"fixed"===r)).top=l.top+n.clientTop,l.left=l.left+n.clientLeft,l.bottom=l.top+n.clientHeight,l.right=l.left+n.clientWidth,l.width=n.clientWidth,l.height=n.clientHeight,l.x=l.left,l.y=l.top,l):J((u=k(e),m=k(u),d=g(u),b=null==(p=u.ownerDocument)?void 0:p.body,E=c(m.scrollWidth,m.clientWidth,b?b.scrollWidth:0,b?b.clientWidth:0),T=c(m.scrollHeight,m.clientHeight,b?b.scrollHeight:0,b?b.clientHeight:0),_=-d.scrollLeft+y(u),x=-d.scrollTop,"rtl"===v(b||m).direction&&(_+=c(m.clientWidth,b?b.clientWidth:0)-E),{width:E,height:T,x:_,y:x}))}function et(){return{top:0,right:0,bottom:0,left:0}}function en(e){return Object.assign({},et(),e)}function er(e,n){return n.reduce(function(n,r){return n[r]=e,n},{})}function ea(e,n){void 0===n&&(n={});var r,a,i,o,u,m,d,h,g,y,E=n,T=E.placement,w=void 0===T?e.placement:T,A=E.strategy,N=void 0===A?e.strategy:A,O=E.boundary,M=E.rootBoundary,P=E.elementContext,D=void 0===P?L:P,z=E.altBoundary,F=E.padding,B=void 0===F?0:F,H=en("number"!=typeof B?B:er(B,R)),U=e.rects.popper,G=e.elements[void 0!==z&&z?D===L?"reference":L:D],$=(r=s(G)?G:G.contextElement||k(e.elements.popper),g=(h=[].concat("clippingParents"===(a=void 0===O?"clippingParents":O)?(m=x(_(r)),d=["absolute","fixed"].indexOf(v(r).position)>=0&&l(r)?j(r):r,s(d)?m.filter(function(e){return s(e)&&X(e,d)&&"body"!==b(e)}):[]):[].concat(a),[void 0===M?I:M]))[0],(y=h.reduce(function(e,n){var a=ee(r,n,N);return e.top=c(a.top,e.top),e.right=p(a.right,e.right),e.bottom=p(a.bottom,e.bottom),e.left=c(a.left,e.left),e},ee(r,g,N))).width=y.right-y.left,y.height=y.bottom-y.top,y.x=y.left,y.y=y.top,y),V=f(e.elements.reference),q=K({reference:V,element:U,strategy:"absolute",placement:w}),W=J(Object.assign({},U,q)),Y=D===L?W:V,Q={top:$.top-Y.top+H.top,bottom:Y.bottom-$.bottom+H.bottom,left:$.left-Y.left+H.left,right:Y.right-$.right+H.right},Z=e.modifiersData.offset;if(D===L&&Z){var et=Z[w];Object.keys(Q).forEach(function(e){var n=[C,S].indexOf(e)>=0?1:-1,r=["top",S].indexOf(e)>=0?"y":"x";Q[e]+=et[r]*n})}return Q}function ei(e,n,r){return c(e,p(n,r))}function eo(e,n,r){return void 0===r&&(r={x:0,y:0}),{top:e.top-n.height-r.y,right:e.right-n.width+r.x,bottom:e.bottom-n.height+r.y,left:e.left-n.width-r.x}}function es(e){return["top",C,S,N].some(function(n){return e[n]>=0})}var el,eu,ec,ep,em,ed,eh=(el={defaultModifiers:[{name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(e){var n=e.state,r=e.instance,a=e.options,i=a.scroll,s=void 0===i||i,l=a.resize,u=void 0===l||l,c=o(n.elements.popper),p=[].concat(n.scrollParents.reference,n.scrollParents.popper);return s&&p.forEach(function(e){e.addEventListener("scroll",r.update,H)}),u&&c.addEventListener("resize",r.update,H),function(){s&&p.forEach(function(e){e.removeEventListener("scroll",r.update,H)}),u&&c.removeEventListener("resize",r.update,H)}},data:{}},{name:"popperOffsets",enabled:!0,phase:"read",fn:function(e){var n=e.state,r=e.name;n.modifiersData[r]=K({reference:n.rects.reference,element:n.rects.popper,strategy:"absolute",placement:n.placement})},data:{}},{name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(e){var n=e.state,r=e.options,a=r.gpuAcceleration,i=r.adaptive,o=r.roundOffsets,s=void 0===o||o,l={placement:U(n.placement),variation:G(n.placement),popper:n.elements.popper,popperRect:n.rects.popper,gpuAcceleration:void 0===a||a,isFixed:"fixed"===n.options.strategy};null!=n.modifiersData.popperOffsets&&(n.styles.popper=Object.assign({},n.styles.popper,q(Object.assign({},l,{offsets:n.modifiersData.popperOffsets,position:n.options.strategy,adaptive:void 0===i||i,roundOffsets:s})))),null!=n.modifiersData.arrow&&(n.styles.arrow=Object.assign({},n.styles.arrow,q(Object.assign({},l,{offsets:n.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:s})))),n.attributes.popper=Object.assign({},n.attributes.popper,{"data-popper-placement":n.placement})},data:{}},{name:"applyStyles",enabled:!0,phase:"write",fn:function(e){var n=e.state;Object.keys(n.elements).forEach(function(e){var r=n.styles[e]||{},a=n.attributes[e]||{},i=n.elements[e];l(i)&&b(i)&&(Object.assign(i.style,r),Object.keys(a).forEach(function(e){var n=a[e];!1===n?i.removeAttribute(e):i.setAttribute(e,!0===n?"":n)}))})},effect:function(e){var n=e.state,r={popper:{position:n.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(n.elements.popper.style,r.popper),n.styles=r,n.elements.arrow&&Object.assign(n.elements.arrow.style,r.arrow),function(){Object.keys(n.elements).forEach(function(e){var a=n.elements[e],i=n.attributes[e]||{},o=Object.keys(n.styles.hasOwnProperty(e)?n.styles[e]:r[e]).reduce(function(e,n){return e[n]="",e},{});l(a)&&b(a)&&(Object.assign(a.style,o),Object.keys(i).forEach(function(e){a.removeAttribute(e)}))})}},requires:["computeStyles"]},{name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(e){var n=e.state,r=e.options,a=e.name,i=r.offset,o=void 0===i?[0,0]:i,s=D.reduce(function(e,r){var a,i,s,l,u,c,p,m;return e[r]=(i=n.rects,u=[N,"top"].indexOf(l=U(r))>=0?-1:1,p=(c="function"==typeof o?o(Object.assign({},i,{placement:r})):o)[0],m=c[1],p=p||0,m=(m||0)*u,[N,C].indexOf(l)>=0?{x:m,y:p}:{x:p,y:m}),e},{}),l=s[n.placement],u=l.x,c=l.y;null!=n.modifiersData.popperOffsets&&(n.modifiersData.popperOffsets.x+=u,n.modifiersData.popperOffsets.y+=c),n.modifiersData[a]=s}},{name:"flip",enabled:!0,phase:"main",fn:function(e){var n=e.state,r=e.options,a=e.name;if(!n.modifiersData[a]._skip){for(var i=r.mainAxis,o=void 0===i||i,s=r.altAxis,l=void 0===s||s,u=r.fallbackPlacements,c=r.padding,p=r.boundary,m=r.rootBoundary,d=r.altBoundary,h=r.flipVariations,f=void 0===h||h,g=r.allowedAutoPlacements,b=n.options.placement,k=U(b),y=[b].concat(u||(k!==b&&f?function(e){if(U(e)===O)return[];var n=Y(e);return[Z(e),n,Z(n)]}(b):[Y(b)])).reduce(function(e,r){var a,i,o,s,l,u,d,h,b,k,y,v,E,T;return e.concat(U(r)===O?(i={placement:r,boundary:p,rootBoundary:m,padding:c,flipVariations:f,allowedAutoPlacements:g},s=(o=i).placement,l=o.boundary,u=o.rootBoundary,d=o.padding,h=o.flipVariations,k=void 0===(b=o.allowedAutoPlacements)?D:b,0===(E=(v=(y=G(s))?h?P:P.filter(function(e){return G(e)===y}):R).filter(function(e){return k.indexOf(e)>=0})).length&&(E=v),Object.keys(T=E.reduce(function(e,r){return e[r]=ea(n,{placement:r,boundary:l,rootBoundary:u,padding:d})[U(r)],e},{})).sort(function(e,n){return T[e]-T[n]})):r)},[]),v=n.rects.reference,E=n.rects.popper,T=new Map,_=!0,x=y[0],w=0;w=0,z=L?"width":"height",F=ea(n,{placement:A,boundary:p,rootBoundary:m,altBoundary:d,padding:c}),B=L?I?C:N:I?S:"top";v[z]>E[z]&&(B=Y(B));var H=Y(B),$=[];if(o&&$.push(F[j]<=0),l&&$.push(F[B]<=0,F[H]<=0),$.every(function(e){return e})){x=A,_=!1;break}T.set(A,$)}if(_)for(var K=f?3:1,V=function(e){var n=y.find(function(n){var r=T.get(n);if(r)return r.slice(0,e).every(function(e){return e})});if(n)return x=n,"break"},q=K;q>0&&"break"!==V(q);q--);n.placement!==x&&(n.modifiersData[a]._skip=!0,n.placement=x,n.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}},{name:"preventOverflow",enabled:!0,phase:"main",fn:function(e){var n,r=e.state,a=e.options,i=e.name,o=a.mainAxis,s=a.altAxis,l=a.boundary,u=a.rootBoundary,m=a.altBoundary,d=a.padding,h=a.tether,f=void 0===h||h,g=a.tetherOffset,b=void 0===g?0:g,k=ea(r,{boundary:l,rootBoundary:u,padding:d,altBoundary:m}),y=U(r.placement),v=G(r.placement),E=!v,_=$(y),x="x"===_?"y":"x",w=r.modifiersData.popperOffsets,A=r.rects.reference,O=r.rects.popper,R="function"==typeof b?b(Object.assign({},r.rects,{placement:r.placement})):b,I="number"==typeof R?{mainAxis:R,altAxis:R}:Object.assign({mainAxis:0,altAxis:0},R),L=r.modifiersData.offset?r.modifiersData.offset[r.placement]:null,P={x:0,y:0};if(w){if(void 0===o||o){var D,z="y"===_?"top":N,F="y"===_?S:C,B="y"===_?"height":"width",H=w[_],K=H+k[z],V=H-k[F],q=f?-O[B]/2:0,W=v===M?A[B]:O[B],Y=v===M?-O[B]:-A[B],Q=r.elements.arrow,Z=f&&Q?T(Q):{width:0,height:0},X=r.modifiersData["arrow#persistent"]?r.modifiersData["arrow#persistent"].padding:et(),J=X[z],ee=X[F],en=ei(0,A[B],Z[B]),er=E?A[B]/2-q-en-J-I.mainAxis:W-en-J-I.mainAxis,eo=E?-A[B]/2+q+en+ee+I.mainAxis:Y+en+ee+I.mainAxis,es=r.elements.arrow&&j(r.elements.arrow),el=es?"y"===_?es.clientTop||0:es.clientLeft||0:0,eu=null!=(D=null==L?void 0:L[_])?D:0,ec=ei(f?p(K,H+er-eu-el):K,H,f?c(V,H+eo-eu):V);w[_]=ec,P[_]=ec-H}if(void 0!==s&&s){var ep,em,ed,eh,ef,eg=w[x],eb="y"===x?"height":"width",ek=eg+k["x"===_?"top":N],ey=eg-k["x"===_?S:C],ev=-1!==["top",N].indexOf(y),eE=null!=(ep=null==L?void 0:L[x])?ep:0,eT=ev?ek:eg-A[eb]-O[eb]-eE+I.altAxis,e_=ev?eg+A[eb]+O[eb]-eE-I.altAxis:ey,ex=f&&ev?(ef=ei(eT,eg,e_))>e_?e_:ef:ei(f?eT:ek,eg,f?e_:ey);w[x]=ex,P[x]=ex-eg}r.modifiersData[i]=P}},requiresIfExists:["offset"]},{name:"arrow",enabled:!0,phase:"main",fn:function(e){var n,r=e.state,a=e.name,i=e.options,o=r.elements.arrow,s=r.modifiersData.popperOffsets,l=U(r.placement),u=$(l),c=[N,C].indexOf(l)>=0?"height":"width";if(o&&s){var p,m,d=en("number"!=typeof(p="function"==typeof(p=i.padding)?p(Object.assign({},r.rects,{placement:r.placement})):p)?p:er(p,R)),h=T(o),f=r.rects.reference[c]+r.rects.reference[u]-s[u]-r.rects.popper[c],g=s[u]-r.rects.reference[u],b=j(o),k=b?"y"===u?b.clientHeight||0:b.clientWidth||0:0,y=d["y"===u?"top":N],v=k-h[c]-d["y"===u?S:C],E=k/2-h[c]/2+(f/2-g/2),_=ei(y,E,v);r.modifiersData[a]=((n={})[u]=_,n.centerOffset=_-E,n)}},effect:function(e){var n=e.state,r=e.options.element,a=void 0===r?"[data-popper-arrow]":r;if(null!=a&&("string"!=typeof a||(a=n.elements.popper.querySelector(a))))X(n.elements.popper,a)&&(n.elements.arrow=a)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]},{name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(e){var n=e.state,r=e.name,a=n.rects.reference,i=n.rects.popper,o=n.modifiersData.preventOverflow,s=ea(n,{elementContext:"reference"}),l=ea(n,{altBoundary:!0}),u=eo(s,a),c=eo(l,i,o),p=es(u),m=es(c);n.modifiersData[r]={referenceClippingOffsets:u,popperEscapeOffsets:c,isReferenceHidden:p,hasPopperEscaped:m},n.attributes.popper=Object.assign({},n.attributes.popper,{"data-popper-reference-hidden":p,"data-popper-escaped":m})}}]},ep=void 0===(ec=(eu=el).defaultModifiers)?[]:ec,ed=void 0===(em=eu.defaultOptions)?F:em,function(e,n,r){void 0===r&&(r=ed);var a,i,u={placement:"bottom",orderedModifiers:[],options:Object.assign({},F,ed),modifiersData:{},elements:{reference:e,popper:n},attributes:{},styles:{}},c=[],p=!1,d={state:u,setOptions:function(r){var a,i,o,l,p,m,f,g,b="function"==typeof r?r(u.options):r;h(),u.options=Object.assign({},ed,u.options,b),u.scrollParents={reference:s(e)?x(e):e.contextElement?x(e.contextElement):[],popper:x(n)};var k=(o=Object.keys(i=(a=[].concat(ep,u.options.modifiers)).reduce(function(e,n){var r=e[n.name];return e[n.name]=r?Object.assign({},r,n,{options:Object.assign({},r.options,n.options),data:Object.assign({},r.data,n.data)}):n,e},{})).map(function(e){return i[e]}),p=new Map,m=new Set,f=[],o.forEach(function(e){p.set(e.name,e)}),o.forEach(function(e){m.has(e.name)||function e(n){m.add(n.name),[].concat(n.requires||[],n.requiresIfExists||[]).forEach(function(n){if(!m.has(n)){var r=p.get(n);r&&e(r)}}),f.push(n)}(e)}),z.reduce(function(e,n){return e.concat(f.filter(function(e){return e.phase===n}))},[]));return u.orderedModifiers=k.filter(function(e){return e.enabled}),u.orderedModifiers.forEach(function(e){var n=e.name,r=e.options,a=e.effect;if("function"==typeof a){var i=a({state:u,name:n,instance:d,options:void 0===r?{}:r}),o=function(){};c.push(i||o)}}),d.update()},forceUpdate:function(){if(!p){var e,n,r,a,i,s,c,h,v,_,x,w,A,S=u.elements,C=S.reference,N=S.popper;if(B(C,N)){u.rects={reference:(e=C,n=j(N),r="fixed"===u.options.strategy,a=l(n),v=l(n)&&(c=m((s=(i=n).getBoundingClientRect()).width)/i.offsetWidth||1,h=m(s.height)/i.offsetHeight||1,1!==c||1!==h),_=k(n),x=f(e,v,r),w={scrollLeft:0,scrollTop:0},A={x:0,y:0},(a||!a&&!r)&&(("body"!==b(n)||E(_))&&(w=function(e){var n;return e!==o(e)&&l(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:g(e)}(n)),l(n)?(A=f(n,!0),A.x+=n.clientLeft,A.y+=n.clientTop):_&&(A.x=y(_))),{x:x.left+w.scrollLeft-A.x,y:x.top+w.scrollTop-A.y,width:x.width,height:x.height}),popper:T(N)},u.reset=!1,u.placement=u.options.placement,u.orderedModifiers.forEach(function(e){return u.modifiersData[e.name]=Object.assign({},e.data)});for(var O=0;Oe.length)&&(n=e.length);for(var r=0,a=Array(n);r0?eb(ej,--ew):0,e_--,10===eA&&(e_=1,eT--),eA}function eO(){return eA=ew2||eI(eA)>3?"":" "}function eF(e,n){for(;--n&&eO()&&!(eA<48)&&!(eA>102)&&(!(eA>57)||!(eA<65))&&(!(eA>70)||!(eA<97)););return eM(e,ew+(n<6&&32==eR()&&32==eO()))}function eB(e,n){for(;eO();)if(e+eA===57)break;else if(e+eA===84&&47===eR())break;return"/*"+eM(n,ew-1)+"*"+em(47===e?e:eO())}function eH(e){for(;!eI(eR());)eO();return eM(e,ew)}var eU="-ms-",eG="-moz-",e$="-webkit-",eK="comm",eV="rule",eq="decl",eW="@keyframes";function eY(e,n){for(var r="",a=ev(e),i=0;i0?d[k]+" "+y:ef(y,/&\f/g,d[k])))&&(u[b++]=v);return eS(e,n,r,0===i?eV:l,u,c,p)}function eX(e,n,r){return eS(e,n,r,eK,em(eA),ek(e,2,-2),0)}function eJ(e,n,r,a){return eS(e,n,r,eq,ek(e,0,a),ek(e,a+1,-1),a)}var e1,e0,e9=function(e,n,r){for(var a=0,i=0;a=i,i=eR(),38===a&&12===i&&(n[r]=1),!eI(i);)eO();return eM(e,ew)},e5=function(e,n){var r=-1,a=44;do switch(eI(a)){case 0:38===a&&12===eR()&&(n[r]=1),e[r]+=e9(ew-1,n,r);break;case 2:e[r]+=eD(a);break;case 4:if(44===a){e[++r]=58===eR()?"&\f":"",n[r]=e[r].length;break}default:e[r]+=em(a)}while(a=eO());return e},e4=new WeakMap,e2=function(e){if("rule"===e.type&&e.parent&&!(e.length<1)){for(var n=e.value,r=e.parent,a=e.column===r.column&&e.line===r.line;"rule"!==r.type;)if(!(r=r.parent))return;if((1!==e.props.length||58===n.charCodeAt(0)||e4.get(r))&&!a){e4.set(e,!0);for(var i,o,s=[],l=eP(e5(eL(n),s)),u=r.props,c=0,p=0;c-1&&!e.return)switch(e.type){case eq:e.return=function e(n,r){var a,i;switch((((r<<2^eb(n,0))<<2^eb(n,1))<<2^eb(n,2))<<2^eb(n,3)){case 5103:return e$+"print-"+n+n;case 5737:case 4201:case 3177:case 3433:case 1641:case 4457:case 2921:case 5572:case 6356:case 5844:case 3191:case 6645:case 3005:case 6391:case 5879:case 5623:case 6135:case 4599:case 4855:case 4215:case 6389:case 5109:case 5365:case 5621:case 3829:return e$+n+n;case 5349:case 4246:case 4810:case 6968:case 2756:return e$+n+eG+n+eU+n+n;case 6828:case 4268:return e$+n+eU+n+n;case 6165:return e$+n+eU+"flex-"+n+n;case 5187:return e$+n+ef(n,/(\w+).+(:[^]+)/,e$+"box-$1$2"+eU+"flex-$1$2")+n;case 5443:return e$+n+eU+"flex-item-"+ef(n,/flex-|-self/,"")+n;case 4675:return e$+n+eU+"flex-line-pack"+ef(n,/align-content|flex-|-self/,"")+n;case 5548:return e$+n+eU+ef(n,"shrink","negative")+n;case 5292:return e$+n+eU+ef(n,"basis","preferred-size")+n;case 6060:return e$+"box-"+ef(n,"-grow","")+e$+n+eU+ef(n,"grow","positive")+n;case 4554:return e$+ef(n,/([^-])(transform)/g,"$1"+e$+"$2")+n;case 6187:return ef(ef(ef(n,/(zoom-|grab)/,e$+"$1"),/(image-set)/,e$+"$1"),n,"")+n;case 5495:case 3959:return ef(n,/(image-set\([^]*)/,e$+"$1$`$1");case 4968:return ef(ef(n,/(.+:)(flex-)?(.*)/,e$+"box-pack:$3"+eU+"flex-pack:$3"),/s.+-b[^;]+/,"justify")+e$+n+n;case 4095:case 3583:case 4068:case 2532:return ef(n,/(.+)-inline(.+)/,e$+"$1$2")+n;case 8116:case 7059:case 5753:case 5535:case 5445:case 5701:case 4933:case 4677:case 5533:case 5789:case 5021:case 4765:if(ey(n)-1-r>6)switch(eb(n,r+1)){case 109:if(45!==eb(n,r+4))break;case 102:return ef(n,/(.+:)(.+)-([^]+)/,"$1"+e$+"$2-$3$1"+eG+(108==eb(n,r+3)?"$3":"$2-$3"))+n;case 115:return~eg(n,"stretch")?e(ef(n,"stretch","fill-available"),r)+n:n}break;case 4949:if(115!==eb(n,r+1))break;case 6444:switch(eb(n,ey(n)-3-(~eg(n,"!important")&&10))){case 107:return ef(n,":",":"+e$)+n;case 101:return ef(n,/(.+:)([^;!]+)(;|!.+)?/,"$1"+e$+(45===eb(n,14)?"inline-":"")+"box$3$1"+e$+"$2$3$1"+eU+"$2box$3")+n}break;case 5936:switch(eb(n,r+11)){case 114:return e$+n+eU+ef(n,/[svh]\w+-[tblr]{2}/,"tb")+n;case 108:return e$+n+eU+ef(n,/[svh]\w+-[tblr]{2}/,"tb-rl")+n;case 45:return e$+n+eU+ef(n,/[svh]\w+-[tblr]{2}/,"lr")+n}return e$+n+eU+n+n}return n}(e.value,e.length);break;case eW:return eY([eC(e,{value:ef(e.value,"@","@"+e$)})],a);case eV:if(e.length){var i,o;return i=e.props,o=function(n){var r;switch(r=n,(r=/(::plac\w+|:read-\w+)/.exec(r))?r[0]:r){case":read-only":case":read-write":return eY([eC(e,{props:[ef(n,/:(read-\w+)/,":"+eG+"$1")]})],a);case"::placeholder":return eY([eC(e,{props:[ef(n,/:(plac\w+)/,":"+e$+"input-$1")]}),eC(e,{props:[ef(n,/:(plac\w+)/,":"+eG+"$1")]}),eC(e,{props:[ef(n,/:(plac\w+)/,eU+"input-$1")]})],a)}return""},i.map(o).join("")}}}],e7=function(e){var n=e.key;if("css"===n){var r=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(r,function(e){-1!==e.getAttribute("data-emotion").indexOf(" ")&&(document.head.appendChild(e),e.setAttribute("data-s",""))})}var a=e.stylisPlugins||e6,i={},o=[];l=e.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+n+' "]'),function(e){for(var n=e.getAttribute("data-emotion").split(" "),r=1;r0&&ey(w)-d&&eE(f>32?eJ(w+";",i,a,d-1):eJ(ef(w," ","")+";",i,a,d-2),c);break;case 59:w+=";";default:if(eE(x=eZ(w,r,a,p,m,o,u,E,T=[],_=[],d),s),123===v){if(0===m)e(w,r,x,x,T,s,d,u,_);else switch(h){case 100:case 109:case 115:e(n,x,x,i&&eE(eZ(n,x,x,0,0,o,u,E,o,T=[],d),_),o,_,d,u,i?T:_);break;default:e(w,x,x,x,[""],_,0,u,_)}}}p=m=f=0,b=y=1,E=w="",d=l;break;case 58:d=1+ey(w),f=g;default:if(b<1){if(123==v)--b;else if(125==v&&0==b++&&125==eN())continue}switch(w+=em(v),v*b){case 38:y=m>0?1:(w+="\f",-1);break;case 44:u[p++]=(ey(w)-1)*y,y=1;break;case 64:45===eR()&&(w+=eD(eO())),h=eR(),m=d=ey(E=w+=eH(ew)),v++;break;case 45:45===g&&2==ey(w)&&(b=0)}}return s}("",null,null,null,[""],n=eL(n=e),0,[0],n)),h)};u=function(e,n,r,a){c=r,f(e?e+"{"+n.styles+"}":n.styles),a&&(g.inserted[n.name]=!0)};var g={key:n,sheet:new ec({key:n,container:l,nonce:e.nonce,speedy:e.speedy,prepend:e.prepend,insertionPoint:e.insertionPoint}),nonce:e.nonce,inserted:i,registered:{},insert:u};return g.sheet.hydrate(o),g},e3=function(e){for(var n,r=0,a=0,i=e.length;i>=4;++a,i-=4)n=(65535&(n=255&e.charCodeAt(a)|(255&e.charCodeAt(++a))<<8|(255&e.charCodeAt(++a))<<16|(255&e.charCodeAt(++a))<<24))*1540483477+((n>>>16)*59797<<16),n^=n>>>24,r=(65535&n)*1540483477+((n>>>16)*59797<<16)^(65535&r)*1540483477+((r>>>16)*59797<<16);switch(i){case 3:r^=(255&e.charCodeAt(a+2))<<16;case 2:r^=(255&e.charCodeAt(a+1))<<8;case 1:r^=255&e.charCodeAt(a),r=(65535&r)*1540483477+((r>>>16)*59797<<16)}return r^=r>>>13,(((r=(65535&r)*1540483477+((r>>>16)*59797<<16))^r>>>15)>>>0).toString(36)},te={animationIterationCount:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1},tt=/[A-Z]|^ms/g,tn=/_EMO_([^_]+?)_([^]*?)_EMO_/g,tr=function(e){return 45===e.charCodeAt(1)},ta=function(e){return null!=e&&"boolean"!=typeof e},ti=(e1=function(e){return tr(e)?e:e.replace(tt,"-$&").toLowerCase()},e0=Object.create(null),function(e){return void 0===e0[e]&&(e0[e]=e1(e)),e0[e]}),to=function(e,n){switch(e){case"animation":case"animationName":if("string"==typeof n)return n.replace(tn,function(e,n,r){return a={name:n,styles:r,next:a},n})}return 1===te[e]||tr(e)||"number"!=typeof n||0===n?n:n+"px"};function ts(e,n,r){if(null==r)return"";if(void 0!==r.__emotion_styles)return r;switch(typeof r){case"boolean":return"";case"object":if(1===r.anim)return a={name:r.name,styles:r.styles,next:a},r.name;if(void 0!==r.styles){var i,o=r.next;if(void 0!==o)for(;void 0!==o;)a={name:o.name,styles:o.styles,next:a},o=o.next;return r.styles+";"}return function(e,n,r){var a="";if(Array.isArray(r))for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:"white",r="background-color: ".concat(e,"; border-radius: 4px; padding: 2px 4px;");return n&&(r+=" color: ".concat(n,";")),[r,""]}function tT(e,n){for(var r,a,i=arguments.length,o=Array(i>2?i-2:0),s=2;sn?(e.apply(void 0,o),r=l):(clearTimeout(a),a=tx()(function(){e.apply(void 0,o),r=q()()},Math.max(0,n-l+r)))}}(function(e){var n=o.current;n&&n(e)},n)},[n,o]),l=(0,b.useCallback)(function(e){e.timeStampLow=q()(),s(e)},[s]);return(0,b.useLayoutEffect)(function(){return i.addEventListener(r,l,{passive:!0}),l({target:i,type:r}),function(){return i.removeEventListener(r,l)}},[r,l,i]),!1};tw.defaultProps={debounce:200};var tA=r(44353),tj=r.n(tA);function tS(e,n){var r=tj()(n-e),a=e+Math.sqrt(Math.abs(n-e))*r;return r>0?Math.min(n,a):Math.max(n,a)}var tC=function(e){var n=e.name,r=e.onEnd,a=e.target,i=e.value,o=(0,b.useRef)(),s=(0,b.useCallback)(function(e,n,i,l){var u=arguments.length>4&&void 0!==arguments[4]?arguments[4]:q()();("100%"===i||"number"==typeof i)&&(cancelAnimationFrame(o.current),o.current=requestAnimationFrame(function(){if(a){var o="100%"===i?a.scrollHeight-a.offsetHeight:i,c=function(e,n,r,a){for(var i=e,o=0;oMath.abs(o-c)&&(c=o),a[e]=c,o===c?r&&r(!0):s(e,n,i,l+1,u)}}))},[o,r,a]),l=(0,b.useCallback)(function(){cancelAnimationFrame(o.current),r&&r(!1)},[r]);return(0,b.useLayoutEffect)(function(){return(s(n,a[n],i,1),a)?(a.addEventListener("pointerdown",l,{passive:!0}),a.addEventListener("wheel",l,{passive:!0}),function(){a.removeEventListener("pointerdown",l),a.removeEventListener("wheel",l),cancelAnimationFrame(o.current)}):function(){return cancelAnimationFrame(o.current)}},[s,o,l,n,a,i]),!1};function tN(e){var n=(0,b.useState)(e),r=m(n,2),a=r[0],i=r[1],o=(0,b.useRef)(),s=(0,b.useCallback)(function(e){"function"==typeof e?s(function(n){return e=e(n),o.current=e,e}):(o.current=e,s(e))},[o]);return o.current=a,[a,i,o]}function tO(e,n){var r=Z()(e);if(J()){var a=J()(e);n&&(a=et()(a).call(a,function(n){return er()(e,n).enumerable})),r.push.apply(r,a)}return r}function tR(e){for(var n=1;n1&&void 0!==arguments[1]?arguments[1]:{},r=n.force;return void 0!==r&&r?function(){for(var n=arguments.length,r=Array(n),a=0;a",{force:i})},[i]);s="top"===s?"top":"bottom";var p=(0,b.useRef)(0),d=(0,b.useRef)(o),h=tN("top"===s?0:"100%"),f=m(h,3),g=f[0],k=f[1],v=f[2],E=tN(null),x=m(E,3),A=x[0],j=x[1],S=x[2],N=(0,b.useRef)(0),O=(0,b.useRef)(0),R=(0,b.useRef)(0),M=m((0,b.useState)(!0),2),I=M[0],L=M[1],P=m((0,b.useState)(!0),2),z=P[0],B=P[1],U=m((0,b.useState)(!0),2),$=U[0],V=U[1],W=m((0,b.useState)(!1),2),Q=W[0],Z=W[1],X=tN(!0),J=m(X,3),ee=J[0],et=J[1],en=J[2],er=(0,b.useRef)([]),ea=(0,b.useCallback)(function(e){var n=S.current;return er.current.push(e),n&&e({scrollTop:n.scrollTop}),function(){var n=er.current,r=H()(n).call(n,e);~r&&G()(n).call(n,r,1)}},[er,S]),ei=(0,b.useCallback)(function(){var e=v.current;c(function(){var n;return K()(n=["%cSpineTo%c: %conEnd%c is fired."]).call(n,D(tE("magenta")),D(tE("orange")),[{animateTo:e}])}),p.current=q()(),tP(e,s)||et(!1),k(null)},[v,c,p,s,k,et]),eo=(0,b.useCallback)(function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=n.behavior,a=S.current;if("number"!=typeof e&&"100%"!==e)return console.warn('react-scroll-to-bottom: Arguments passed to scrollTo() must be either number or "100%".');c(function(){var n;return[K()(n=["%cscrollTo%c: Will scroll to %c".concat("number"==typeof e?e+"px":e.replace(/%/g,"%%"),"%c")]).call(n,D(tE("lime","")),D(tE("purple"))),{behavior:r,nextAnimateTo:e,target:a}]}),"auto"===r?(ei(),a&&(a.scrollTop="100%"===e?a.scrollHeight-a.offsetHeight:e)):("smooth"!==r&&console.warn('react-scroll-to-bottom: Please set "behavior" when calling "scrollTo". In future versions, the default behavior will be changed from smooth scrolling to discrete scrolling to align with HTML Standard.'),k(e)),tP(e,s)&&(c(function(){var n;return[K()(n=["%cscrollTo%c: Scrolling to end, will set sticky to %ctrue%c."]).call(n,D(tE("lime","")),D(tE("purple"))),[{mode:s,nextAnimateTo:e}]]}),et(!0))},[c,ei,s,k,et,S]),es=(0,b.useCallback)(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.behavior;c(function(){var e;return K()(e=["%cscrollToBottom%c: Called"]).call(e,D(tE("yellow","")))}),"smooth"!==n&&console.warn('react-scroll-to-bottom: Please set "behavior" when calling "scrollToBottom". In future versions, the default behavior will be changed from smooth scrolling to discrete scrolling to align with HTML Standard.'),eo("100%",{behavior:n||"smooth"})},[c,eo]),el=(0,b.useCallback)(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.behavior;c(function(){var e;return K()(e=["%cscrollToTop%c: Called"]).call(e,D(tE("yellow","")))}),"smooth"!==n&&console.warn('react-scroll-to-bottom: Please set "behavior" when calling "scrollToTop". In future versions, the default behavior will be changed from smooth scrolling to discrete scrolling to align with HTML Standard.'),eo(0,{behavior:n||"smooth"})},[c,eo]),eu=(0,b.useCallback)(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.behavior;c(function(){var e;return K()(e=["%cscrollToEnd%c: Called"]).call(e,D(tE("yellow","")))}),"smooth"!==n&&console.warn('react-scroll-to-bottom: Please set "behavior" when calling "scrollToEnd". In future versions, the default behavior will be changed from smooth scrolling to discrete scrolling to align with HTML Standard.');var r={behavior:n||"smooth"};"top"===s?el(r):es(r)},[c,s,es,el]),ec=(0,b.useCallback)(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.behavior;c(function(){var e;return K()(e=["%cscrollToStart%c: Called"]).call(e,D(tE("yellow","")))}),"smooth"!==n&&console.warn('react-scroll-to-bottom: Please set "behavior" when calling "scrollToStart". In future versions, the default behavior will be changed from smooth scrolling to discrete scrolling to align with HTML Standard.');var r={behavior:n||"smooth"};"top"===s?es(r):el(r)},[c,s,es,el]),ep=(0,b.useCallback)(function(){var e=S.current;if(e){if("auto"===d.current){c(function(){var e;return K()(e=["%ctarget changed%c: Initial scroll"]).call(e,D(tE("blue")))}),e.scrollTop="top"===s?0:e.scrollHeight-e.offsetHeight,d.current=!1;return}var n,r=N.current,a=e.offsetHeight,i=e.scrollHeight,o=e.scrollTop,l="top"===s?0:Math.max(0,i-a-o),p=Math.max(0,r-o),m=u({maxValue:l,minValue:p,offsetHeight:a,scrollHeight:i,scrollTop:o}),h=Math.max(0,Math.min(l,m));n="top"===s||h!==l?o+h:"100%",c(function(){var e,s,u;return[K()(e=[K()(s=K()(u="%cscrollToSticky%c: Will animate from %c".concat(r,"px%c to %c")).call(u,"number"==typeof n?n+"px":n.replace(/%/g,"%%"),"%c (%c")).call(s,("100%"===n?l:n)+r,"px%c)")]).call(e,D(tE("orange")),D(tE("purple")),D(tE("purple")),D(tE("purple"))),{animateFrom:r,maxValue:l,minValue:p,nextAnimateTo:n,nextValue:h,offsetHeight:a,rawNextValue:m,scrollHeight:i,scrollTop:o}]}),eo(n,{behavior:"smooth"})}},[N,c,s,u,eo,S]),em=(0,b.useCallback)(function(e){var n,r=e.timeStampLow,a=v.current,i=S.current,o=null!==a;if(!(r<=p.current)&&i){var l=tL({mode:s,target:i}),u=l.atBottom,m=l.atEnd,d=l.atStart,h=l.atTop;L(u),B(m),Z(d),V(h);var f=i.offsetHeight,g=i.scrollHeight,b=O.current,k=R.current,y=f!==b,E=g!==k;if(y&&(O.current=f),E&&(R.current=g),y||E)en.current&&(c(function(){var e;return[K()(e=["%conScroll%c: Size changed while sticky, calling %cscrollToSticky()%c"]).call(e,D(tE("red")),D(tE("orange")),[{offsetHeightChanged:y,scrollHeightChanged:E}]),{nextOffsetHeight:f,prevOffsetHeight:b,nextScrollHeight:g,prevScrollHeight:k}]}),ep());else{var T=o&&tP(a,s)||m;en.current!==T&&(c(function(){var e,n,r,l;return[K()(e=["%conScroll%c: %csetSticky%c(%c".concat(T,"%c)")]).call(e,D(tE("red")),D(tE("red")),D(tE("purple"))),K()(n=[K()(r=K()(l="(animating = %c".concat(o,"%c && isEnd = %c")).call(l,tP(a,s),"%c) || atEnd = %c")).call(r,m,"%c")]).call(n,D(tE("purple")),D(tE("purple")),D(tE("purple")),[{animating:o,animateTo:a,atEnd:m,mode:s,offsetHeight:i.offsetHeight,scrollHeight:i.scrollHeight,sticky:en.current,nextSticky:T}])]}),et(T))}var _=i.scrollTop;Y()(n=er.current).call(n,function(e){return e({scrollTop:_})})}},[v,c,p,s,O,R,er,ep,L,B,Z,V,et,en,S]);(0,b.useEffect)(function(){if(A){var e,r,a=!1,i=((e=function(){var e=S.current,n=null!==v.current;en.current?tL({mode:s,target:e}).atEnd?a=!1:a?q()()-a>34&&(n||(N.current=e.scrollTop,c(function(){var e;return K()(e=["%cInterval check%c: Should sticky but not at end, calling %cscrollToSticky()%c to scroll"]).call(e,D(tE("navy")),D(tE("orange")))}),ep()),a=!1):a=q()():e.scrollHeight<=e.offsetHeight&&!en.current&&(c(function(){var n;return[K()(n=["%cInterval check%c: Container is emptied, setting sticky back to %ctrue%c"]).call(n,D(tE("navy")),D(tE("purple"))),[{offsetHeight:e.offsetHeight,scrollHeight:e.scrollHeight,sticky:en.current}]]}),et(!0))})(),F()(e,Math.max(17,n)||17));return function(){return clearInterval(i)}}},[v,n,c,s,ep,et,en,A,S]);var ed=(0,b.useMemo)(function(){var e=tI[l]||(tI[l]=tf({key:"react-scroll-to-bottom--css-"+tk()().toString(26).substr(2,5).replace(/[0-9]/g,function(e){return String.fromCharCode(e.charCodeAt(0)+65)}),nonce:l}));return function(n){return e.css(n)+""}},[l]),eh=(0,b.useMemo)(function(){return{observeScrollPosition:ea,setTarget:j,styleToClassName:ed}},[ea,j,ed]),ef=(0,b.useMemo)(function(){return{atBottom:I,atEnd:z,atStart:Q,atTop:$,mode:s}},[I,z,Q,$,s]),eg=(0,b.useMemo)(function(){var e=null!==g;return{animating:e,animatingToEnd:e&&tP(g,s),sticky:ee}},[g,s,ee]),eb=(0,b.useMemo)(function(){return tR(tR({},ef),eg)},[ef,eg]),ek=(0,b.useMemo)(function(){return{scrollTo:eo,scrollToBottom:es,scrollToEnd:eu,scrollToStart:ec,scrollToTop:el}},[eo,es,eu,ec,el]);return(0,b.useEffect)(function(){if(A){var e=function(){R.current=A.scrollHeight};return A.addEventListener("focus",e,{capture:!0,passive:!0}),function(){return A.removeEventListener("focus",e)}}},[A]),c(function(){var e;return[K()(e=["%cRender%c: Render"]).call(e,D(tE("cyan",""))),{animateTo:g,animating:null!==g,sticky:ee,target:A}]}),b.createElement(C.Provider,{value:eh},b.createElement(y.Provider,{value:ek},b.createElement(w.Provider,{value:eb},b.createElement(T.Provider,{value:ef},b.createElement(_.Provider,{value:eg},r,A&&b.createElement(tw,{debounce:a,name:"scroll",onEvent:em,target:A}),A&&null!==g&&b.createElement(tC,{name:"scrollTop",onEnd:ei,target:A,value:g}))))))};tD.defaultProps={checkInterval:100,children:void 0,debounce:17,debug:void 0,initialScrollBehavior:"smooth",mode:void 0,nonce:void 0,scroller:tM},tD.propTypes={checkInterval:g().number,children:g().any,debounce:g().number,debug:g().bool,initialScrollBehavior:g().oneOf(["auto","smooth"]),mode:g().oneOf(["bottom","top"]),nonce:g().string,scroller:g().func};var tz=tD,tF={height:"100%",overflowY:"auto",width:"100%"},tB=function(e){var n=e.children,r=e.className,a=(0,b.useContext)(C).setTarget,i=O()(tF);return b.createElement("div",{className:h()(i,(r||"")+""),ref:a},n)};tB.defaultProps={children:void 0,className:void 0},tB.propTypes={children:g().any,className:g().string};var tH=tB,tU={position:"relative"},tG=function(e){var n=e.children,r=e.className,a=e.followButtonClassName,i=e.scrollViewClassName,o=O()(tU);return b.createElement("div",{className:h()(o,(r||"")+"")},b.createElement(tH,{className:(i||"")+""},n),b.createElement(I,{className:(a||"")+""}))};tG.defaultProps={children:void 0,className:void 0,followButtonClassName:void 0,scrollViewClassName:void 0},tG.propTypes={children:g().any,className:g().string,followButtonClassName:g().string,scrollViewClassName:g().string};var t$=function(e){var n=e.checkInterval,r=e.children,a=e.className,i=e.debounce,o=e.debug,s=e.followButtonClassName,l=e.initialScrollBehavior,u=e.mode,c=e.nonce,p=e.scroller,m=e.scrollViewClassName;return b.createElement(tz,{checkInterval:n,debounce:i,debug:o,initialScrollBehavior:l,mode:u,nonce:c,scroller:p},b.createElement(tG,{className:a,followButtonClassName:s,scrollViewClassName:m},r))};function tK(){return[j(2).animating]}function tV(){return[j(2).animatingToEnd]}function tq(){return[j(1).atBottom]}function tW(){return[j(1).atEnd]}function tY(){return[j(1).atStart]}function tQ(){return[j(1).atTop]}function tZ(){return[j(1).mode]}function tX(e){var n,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];e&&"function"!=typeof e?console.error('react-scroll-to-bottom: First argument passed to "useObserveScrollPosition" must be a function.'):tv()(r)||console.error('react-scroll-to-bottom: Second argument passed to "useObserveScrollPosition" must be an array if specified.');var a=N().observeScrollPosition;(0,b.useEffect)(function(){return e&&a(e)},K()(n=[]).call(n,D(r),[!e,a]))}function tJ(){return v().scrollTo}function t1(){return v().scrollToBottom}function t0(){return v().scrollToStart}function t9(){return v().scrollToTop}t$.defaultProps={checkInterval:void 0,children:void 0,className:void 0,debounce:void 0,debug:void 0,followButtonClassName:void 0,initialScrollBehavior:"smooth",mode:void 0,nonce:void 0,scroller:void 0,scrollViewClassName:void 0},t$.propTypes={checkInterval:g().number,children:g().any,className:g().string,debounce:g().number,debug:g().bool,followButtonClassName:g().string,initialScrollBehavior:g().oneOf(["auto","smooth"]),mode:g().oneOf(["bottom","top"]),nonce:g().string,scroller:g().func,scrollViewClassName:g().string};var t5=t$;!function(e,n){try{var a=r.g.document;if(void 0!==a&&a.createElement&&a.head&&a.head.appendChild){var i=a.querySelector('html meta[name="'.concat(encodeURI(e),'"]'))||a.createElement("meta");i.setAttribute("name",e),i.setAttribute("content",n),a.head.appendChild(i)}}catch(o){}}("react-scroll-to-bottom:version","4.2.0")},78791:function(e,n,r){var a=r(29058);e.exports=function(e,n){var r,i,o,s=null;if(!e||"string"!=typeof e)return s;for(var l=a(e),u="function"==typeof n,c=0,p=l.length;c/g,">").replace(/"/g,""").replace(/'/g,"'")}function o(e,...n){let r=Object.create(null);for(let a in e)r[a]=e[a];return n.forEach(function(e){for(let n in e)r[n]=e[n]}),r}let s=e=>!!e.scope||e.sublanguage&&e.language,l=(e,{prefix:n})=>{if(e.includes(".")){let r=e.split(".");return[`${n}${r.shift()}`,...r.map((e,n)=>`${e}${"_".repeat(n+1)}`)].join(" ")}return`${n}${e}`};class u{constructor(e,n){this.buffer="",this.classPrefix=n.classPrefix,e.walk(this)}addText(e){this.buffer+=i(e)}openNode(e){if(!s(e))return;let n="";n=e.sublanguage?`language-${e.language}`:l(e.scope,{prefix:this.classPrefix}),this.span(n)}closeNode(e){s(e)&&(this.buffer+="")}value(){return this.buffer}span(e){this.buffer+=``}}let c=(e={})=>{let n={children:[]};return Object.assign(n,e),n};class p{constructor(){this.rootNode=c(),this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){this.top.children.push(e)}openNode(e){let n=c({scope:e});this.add(n),this.stack.push(n)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,n){return"string"==typeof n?e.addText(n):n.children&&(e.openNode(n),n.children.forEach(n=>this._walk(e,n)),e.closeNode(n)),e}static _collapse(e){"string"!=typeof e&&e.children&&(e.children.every(e=>"string"==typeof e)?e.children=[e.children.join("")]:e.children.forEach(e=>{p._collapse(e)}))}}class m extends p{constructor(e){super(),this.options=e}addKeyword(e,n){""!==e&&(this.openNode(n),this.addText(e),this.closeNode())}addText(e){""!==e&&this.add(e)}addSublanguage(e,n){let r=e.root;r.sublanguage=!0,r.language=n,this.add(r)}toHTML(){let e=new u(this,this.options);return e.value()}finalize(){return!0}}function d(e){return e?"string"==typeof e?e:e.source:null}function h(e){return b("(?=",e,")")}function f(e){return b("(?:",e,")*")}function g(e){return b("(?:",e,")?")}function b(...e){let n=e.map(e=>d(e)).join("");return n}function k(...e){let n=function(e){let n=e[e.length-1];return"object"==typeof n&&n.constructor===Object?(e.splice(e.length-1,1),n):{}}(e),r="("+(n.capture?"":"?:")+e.map(e=>d(e)).join("|")+")";return r}function y(e){return RegExp(e.toString()+"|").exec("").length-1}let v=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./;function E(e,{joinWith:n}){let r=0;return e.map(e=>{r+=1;let n=r,a=d(e),i="";for(;a.length>0;){let o=v.exec(a);if(!o){i+=a;break}i+=a.substring(0,o.index),a=a.substring(o.index+o[0].length),"\\"===o[0][0]&&o[1]?i+="\\"+String(Number(o[1])+n):(i+=o[0],"("===o[0]&&r++)}return i}).map(e=>`(${e})`).join(n)}let T="[a-zA-Z]\\w*",_="[a-zA-Z_]\\w*",x="\\b\\d+(\\.\\d+)?",w="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",A="\\b(0b[01]+)",j=(e={})=>{let n=/^#![ ]*\//;return e.binary&&(e.begin=b(n,/.*\b/,e.binary,/\b.*/)),o({scope:"meta",begin:n,end:/$/,relevance:0,"on:begin"(e,n){0!==e.index&&n.ignoreMatch()}},e)},S={begin:"\\\\[\\s\\S]",relevance:0},C=function(e,n,r={}){let a=o({scope:"comment",begin:e,end:n,contains:[]},r);a.contains.push({scope:"doctag",begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0});let i=k("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/);return a.contains.push({begin:b(/[ ]+/,"(",i,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),a},N=C("//","$"),O=C("/\\*","\\*/"),R=C("#","$"),M=function(e){return Object.assign(e,{"on:begin"(e,n){n.data._beginMatch=e[1]},"on:end"(e,n){n.data._beginMatch!==e[1]&&n.ignoreMatch()}})};var I=Object.freeze({__proto__:null,MATCH_NOTHING_RE:/\b\B/,IDENT_RE:T,UNDERSCORE_IDENT_RE:_,NUMBER_RE:x,C_NUMBER_RE:w,BINARY_NUMBER_RE:A,RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",SHEBANG:j,BACKSLASH_ESCAPE:S,APOS_STRING_MODE:{scope:"string",begin:"'",end:"'",illegal:"\\n",contains:[S]},QUOTE_STRING_MODE:{scope:"string",begin:'"',end:'"',illegal:"\\n",contains:[S]},PHRASAL_WORDS_MODE:{begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},COMMENT:C,C_LINE_COMMENT_MODE:N,C_BLOCK_COMMENT_MODE:O,HASH_COMMENT_MODE:R,NUMBER_MODE:{scope:"number",begin:x,relevance:0},C_NUMBER_MODE:{scope:"number",begin:w,relevance:0},BINARY_NUMBER_MODE:{scope:"number",begin:A,relevance:0},REGEXP_MODE:{begin:/(?=\/[^/\n]*\/)/,contains:[{scope:"regexp",begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[S,{begin:/\[/,end:/\]/,relevance:0,contains:[S]}]}]},TITLE_MODE:{scope:"title",begin:T,relevance:0},UNDERSCORE_TITLE_MODE:{scope:"title",begin:_,relevance:0},METHOD_GUARD:{begin:"\\.\\s*"+_,relevance:0},END_SAME_AS_BEGIN:M});function L(e,n){let r=e.input[e.index-1];"."===r&&n.ignoreMatch()}function P(e,n){void 0!==e.className&&(e.scope=e.className,delete e.className)}function D(e,n){n&&e.beginKeywords&&(e.begin="\\b("+e.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",e.__beforeBegin=L,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords,void 0===e.relevance&&(e.relevance=0))}function z(e,n){Array.isArray(e.illegal)&&(e.illegal=k(...e.illegal))}function F(e,n){if(e.match){if(e.begin||e.end)throw Error("begin & end are not supported with match");e.begin=e.match,delete e.match}}function B(e,n){void 0===e.relevance&&(e.relevance=1)}let H=(e,n)=>{if(!e.beforeMatch)return;if(e.starts)throw Error("beforeMatch cannot be used with starts");let r=Object.assign({},e);Object.keys(e).forEach(n=>{delete e[n]}),e.keywords=r.keywords,e.begin=b(r.beforeMatch,h(r.begin)),e.starts={relevance:0,contains:[Object.assign(r,{endsParent:!0})]},e.relevance=0,delete r.beforeMatch},U=["of","and","for","in","not","or","if","then","parent","list","value"],G={},$=e=>{console.error(e)},K=(e,...n)=>{console.log(`WARN: ${e}`,...n)},V=(e,n)=>{G[`${e}/${n}`]||(console.log(`Deprecated as of ${e}. ${n}`),G[`${e}/${n}`]=!0)},q=Error();function W(e,n,{key:r}){let a=0,i=e[r],o={},s={};for(let l=1;l<=n.length;l++)s[l+a]=i[l],o[l+a]=!0,a+=y(n[l-1]);e[r]=s,e[r]._emit=o,e[r]._multi=!0}function Y(e){var n;(n=e).scope&&"object"==typeof n.scope&&null!==n.scope&&(n.beginScope=n.scope,delete n.scope),"string"==typeof e.beginScope&&(e.beginScope={_wrap:e.beginScope}),"string"==typeof e.endScope&&(e.endScope={_wrap:e.endScope}),function(e){if(Array.isArray(e.begin)){if(e.skip||e.excludeBegin||e.returnBegin)throw $("skip, excludeBegin, returnBegin not compatible with beginScope: {}"),q;if("object"!=typeof e.beginScope||null===e.beginScope)throw $("beginScope must be object"),q;W(e,e.begin,{key:"beginScope"}),e.begin=E(e.begin,{joinWith:""})}}(e),function(e){if(Array.isArray(e.end)){if(e.skip||e.excludeEnd||e.returnEnd)throw $("skip, excludeEnd, returnEnd not compatible with endScope: {}"),q;if("object"!=typeof e.endScope||null===e.endScope)throw $("endScope must be object"),q;W(e,e.end,{key:"endScope"}),e.end=E(e.end,{joinWith:""})}}(e)}class Q extends Error{constructor(e,n){super(e),this.name="HTMLInjectionError",this.html=n}}let Z=Symbol("nomatch");var X=function(e){let r=Object.create(null),s=Object.create(null),l=[],u=!0,c="Could not find the language '{}', did you forget to load/include a language module?",p={disableAutodetect:!0,name:"Plain text",contains:[]},v={ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",cssSelector:"pre code",languages:null,__emitter:m};function T(e){return v.noHighlightRe.test(e)}function _(e,n,r){let a="",i="";"object"==typeof n?(a=e,r=n.ignoreIllegals,i=n.language):(V("10.7.0","highlight(lang, code, ...args) has been deprecated."),V("10.7.0","Please use highlight(code, options) instead.\nhttps://github.com/highlightjs/highlight.js/issues/2277"),i=e,a=n),void 0===r&&(r=!0);let o={code:a,language:i};M("before:highlight",o);let s=o.result?o.result:x(o.language,o.code,r);return s.code=o.code,M("after:highlight",s),s}function x(e,n,s,l){let p=Object.create(null);function m(e,n){return e.keywords[n]}function h(){if(!C.keywords){R.addText(M);return}let e=0;C.keywordPatternRe.lastIndex=0;let n=C.keywordPatternRe.exec(M),r="";for(;n;){r+=M.substring(e,n.index);let a=A.case_insensitive?n[0].toLowerCase():n[0],i=m(C,a);if(i){let[o,s]=i;if(R.addText(r),r="",p[a]=(p[a]||0)+1,p[a]<=7&&(I+=s),o.startsWith("_"))r+=n[0];else{let l=A.classNameAliases[o]||o;R.addKeyword(n[0],l)}}else r+=n[0];e=C.keywordPatternRe.lastIndex,n=C.keywordPatternRe.exec(M)}r+=M.substring(e),R.addText(r)}function f(){null!=C.subLanguage?function(){if(""===M)return;let e=null;if("string"==typeof C.subLanguage){if(!r[C.subLanguage]){R.addText(M);return}e=x(C.subLanguage,M,!0,O[C.subLanguage]),O[C.subLanguage]=e._top}else e=w(M,C.subLanguage.length?C.subLanguage:null);C.relevance>0&&(I+=e.relevance),R.addSublanguage(e._emitter,e.language)}():h(),M=""}function g(e,n){let r=1,a=n.length-1;for(;r<=a;){if(!e._emit[r]){r++;continue}let i=A.classNameAliases[e[r]]||e[r],o=n[r];i?R.addKeyword(o,i):(M=o,h(),M=""),r++}}function b(e,n){return e.scope&&"string"==typeof e.scope&&R.openNode(A.classNameAliases[e.scope]||e.scope),e.beginScope&&(e.beginScope._wrap?(R.addKeyword(M,A.classNameAliases[e.beginScope._wrap]||e.beginScope._wrap),M=""):e.beginScope._multi&&(g(e.beginScope,n),M="")),C=Object.create(e,{parent:{value:C}})}function k(e){return 0===C.matcher.regexIndex?(M+=e[0],1):(K=!0,0)}let T={};function _(r,i){let o=i&&i[0];if(M+=r,null==o)return f(),0;if("begin"===T.type&&"end"===i.type&&T.index===i.index&&""===o){if(M+=n.slice(i.index,i.index+1),!u){let l=Error(`0 width match regex (${e})`);throw l.languageName=e,l.badRule=T.rule,l}return 1}if(T=i,"begin"===i.type)return function(e){let n=e[0],r=e.rule,i=new a(r),o=[r.__beforeBegin,r["on:begin"]];for(let s of o)if(s&&(s(e,i),i.isMatchIgnored))return k(n);return r.skip?M+=n:(r.excludeBegin&&(M+=n),f(),r.returnBegin||r.excludeBegin||(M=n)),b(r,e),r.returnBegin?0:n.length}(i);if("illegal"!==i.type||s){if("end"===i.type){let c=function e(r){let i=r[0],o=n.substring(r.index),s=function e(n,r,i){let o=function e(n,r){let a=n&&n.exec(r);return a&&0===a.index}(n.endRe,i);if(o){if(n["on:end"]){let s=new a(n);n["on:end"](r,s),s.isMatchIgnored&&(o=!1)}if(o){for(;n.endsParent&&n.parent;)n=n.parent;return n}}if(n.endsWithParent)return e(n.parent,r,i)}(C,r,o);if(!s)return Z;let l=C;C.endScope&&C.endScope._wrap?(f(),R.addKeyword(i,C.endScope._wrap)):C.endScope&&C.endScope._multi?(f(),g(C.endScope,r)):l.skip?M+=i:(l.returnEnd||l.excludeEnd||(M+=i),f(),l.excludeEnd&&(M=i));do C.scope&&R.closeNode(),C.skip||C.subLanguage||(I+=C.relevance),C=C.parent;while(C!==s.parent);return s.starts&&b(s.starts,r),l.returnEnd?0:i.length}(i);if(c!==Z)return c}}else{let p=Error('Illegal lexeme "'+o+'" for mode "'+(C.scope||"")+'"');throw p.mode=C,p}if("illegal"===i.type&&""===o)return 1;if(G>1e5&&G>3*i.index){let m=Error("potential infinite loop, way more iterations than matches");throw m}return M+=o,o.length}let A=N(e);if(!A)throw $(c.replace("{}",e)),Error('Unknown language: "'+e+'"');let j=function(e){function n(n,r){return RegExp(d(n),"m"+(e.case_insensitive?"i":"")+(e.unicodeRegex?"u":"")+(r?"g":""))}class r{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(e,n){n.position=this.position++,this.matchIndexes[this.matchAt]=n,this.regexes.push([n,e]),this.matchAt+=y(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null);let e=this.regexes.map(e=>e[1]);this.matcherRe=n(E(e,{joinWith:"|"}),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex;let n=this.matcherRe.exec(e);if(!n)return null;let r=n.findIndex((e,n)=>n>0&&void 0!==e),a=this.matchIndexes[r];return n.splice(0,r),Object.assign(n,a)}}class a{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){if(this.multiRegexes[e])return this.multiRegexes[e];let n=new r;return this.rules.slice(e).forEach(([e,r])=>n.addRule(e,r)),n.compile(),this.multiRegexes[e]=n,n}resumingScanAtSamePosition(){return 0!==this.regexIndex}considerAll(){this.regexIndex=0}addRule(e,n){this.rules.push([e,n]),"begin"===n.type&&this.count++}exec(e){let n=this.getMatcher(this.regexIndex);n.lastIndex=this.lastIndex;let r=n.exec(e);if(this.resumingScanAtSamePosition()){if(r&&r.index===this.lastIndex);else{let a=this.getMatcher(0);a.lastIndex=this.lastIndex+1,r=a.exec(e)}}return r&&(this.regexIndex+=r.position+1,this.regexIndex===this.count&&this.considerAll()),r}}if(e.compilerExtensions||(e.compilerExtensions=[]),e.contains&&e.contains.includes("self"))throw Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return e.classNameAliases=o(e.classNameAliases||{}),function r(i,s){let l=i;if(i.isCompiled)return l;[P,F,Y,H].forEach(e=>e(i,s)),e.compilerExtensions.forEach(e=>e(i,s)),i.__beforeBegin=null,[D,z,B].forEach(e=>e(i,s)),i.isCompiled=!0;let u=null;return"object"==typeof i.keywords&&i.keywords.$pattern&&(i.keywords=Object.assign({},i.keywords),u=i.keywords.$pattern,delete i.keywords.$pattern),u=u||/\w+/,i.keywords&&(i.keywords=function e(n,r,a="keyword"){let i=Object.create(null);return"string"==typeof n?o(a,n.split(" ")):Array.isArray(n)?o(a,n):Object.keys(n).forEach(function(a){Object.assign(i,e(n[a],r,a))}),i;function o(e,n){r&&(n=n.map(e=>e.toLowerCase())),n.forEach(function(n){var r,a,o;let s=n.split("|");i[s[0]]=[e,(r=s[0],a=s[1],a?Number(a):(o=r,U.includes(o.toLowerCase()))?0:1)]})}}(i.keywords,e.case_insensitive)),l.keywordPatternRe=n(u,!0),s&&(i.begin||(i.begin=/\B|\b/),l.beginRe=n(l.begin),i.end||i.endsWithParent||(i.end=/\B|\b/),i.end&&(l.endRe=n(l.end)),l.terminatorEnd=d(l.end)||"",i.endsWithParent&&s.terminatorEnd&&(l.terminatorEnd+=(i.end?"|":"")+s.terminatorEnd)),i.illegal&&(l.illegalRe=n(i.illegal)),i.contains||(i.contains=[]),i.contains=[].concat(...i.contains.map(function(e){var n;return n="self"===e?i:e,(n.variants&&!n.cachedVariants&&(n.cachedVariants=n.variants.map(function(e){return o(n,{variants:null},e)})),n.cachedVariants)?n.cachedVariants:!function e(n){return!!n&&(n.endsWithParent||e(n.starts))}(n)?Object.isFrozen(n)?o(n):n:o(n,{starts:n.starts?o(n.starts):null})})),i.contains.forEach(function(e){r(e,l)}),i.starts&&r(i.starts,s),l.matcher=function(e){let n=new a;return e.contains.forEach(e=>n.addRule(e.begin,{rule:e,type:"begin"})),e.terminatorEnd&&n.addRule(e.terminatorEnd,{type:"end"}),e.illegal&&n.addRule(e.illegal,{type:"illegal"}),n}(l),l}(e)}(A),S="",C=l||j,O={},R=new v.__emitter(v);!function(){let e=[];for(let n=C;n!==A;n=n.parent)n.scope&&e.unshift(n.scope);e.forEach(e=>R.openNode(e))}();let M="",I=0,L=0,G=0,K=!1;try{for(C.matcher.considerAll();;){G++,K?K=!1:C.matcher.considerAll(),C.matcher.lastIndex=L;let V=C.matcher.exec(n);if(!V)break;let q=n.substring(L,V.index),W=_(q,V);L=V.index+W}return _(n.substring(L)),R.closeAllNodes(),R.finalize(),S=R.toHTML(),{language:e,value:S,relevance:I,illegal:!1,_emitter:R,_top:C}}catch(Q){if(Q.message&&Q.message.includes("Illegal"))return{language:e,value:i(n),illegal:!0,relevance:0,_illegalBy:{message:Q.message,index:L,context:n.slice(L-100,L+100),mode:Q.mode,resultSoFar:S},_emitter:R};if(u)return{language:e,value:i(n),illegal:!1,relevance:0,errorRaised:Q,_emitter:R,_top:C};throw Q}}function w(e,n){n=n||v.languages||Object.keys(r);let a=function(e){let n={value:i(e),illegal:!1,relevance:0,_top:p,_emitter:new v.__emitter(v)};return n._emitter.addText(e),n}(e),o=n.filter(N).filter(R).map(n=>x(n,e,!1));o.unshift(a);let s=o.sort((e,n)=>{if(e.relevance!==n.relevance)return n.relevance-e.relevance;if(e.language&&n.language){if(N(e.language).supersetOf===n.language)return 1;if(N(n.language).supersetOf===e.language)return -1}return 0}),[l,u]=s,c=l;return c.secondBest=u,c}function A(e){let n=null,r=function(e){let n=e.className+" ";n+=e.parentNode?e.parentNode.className:"";let r=v.languageDetectRe.exec(n);if(r){let a=N(r[1]);return a||(K(c.replace("{}",r[1])),K("Falling back to no-highlight mode for this block.",e)),a?r[1]:"no-highlight"}return n.split(/\s+/).find(e=>T(e)||N(e))}(e);if(T(r))return;if(M("before:highlightElement",{el:e,language:r}),e.children.length>0&&(v.ignoreUnescapedHTML||(console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."),console.warn("https://github.com/highlightjs/highlight.js/wiki/security"),console.warn("The element with unescaped HTML:"),console.warn(e)),v.throwUnescapedHTML)){let a=new Q("One of your code blocks includes unescaped HTML.",e.innerHTML);throw a}n=e;let i=n.textContent,o=r?_(i,{language:r,ignoreIllegals:!0}):w(i);e.innerHTML=o.value,function(e,n,r){let a=n&&s[n]||r;e.classList.add("hljs"),e.classList.add(`language-${a}`)}(e,r,o.language),e.result={language:o.language,re:o.relevance,relevance:o.relevance},o.secondBest&&(e.secondBest={language:o.secondBest.language,relevance:o.secondBest.relevance}),M("after:highlightElement",{el:e,result:o,text:i})}let j=()=>{C(),V("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")},S=!1;function C(){if("loading"===document.readyState){S=!0;return}let e=document.querySelectorAll(v.cssSelector);e.forEach(A)}function N(e){return r[e=(e||"").toLowerCase()]||r[s[e]]}function O(e,{languageName:n}){"string"==typeof e&&(e=[e]),e.forEach(e=>{s[e.toLowerCase()]=n})}function R(e){let n=N(e);return n&&!n.disableAutodetect}function M(e,n){l.forEach(function(r){r[e]&&r[e](n)})}for(let L in"undefined"!=typeof window&&window.addEventListener&&window.addEventListener("DOMContentLoaded",function(){S&&C()},!1),Object.assign(e,{highlight:_,highlightAuto:w,highlightAll:C,highlightElement:A,highlightBlock:function(e){return V("10.7.0","highlightBlock will be removed entirely in v12.0"),V("10.7.0","Please use highlightElement now."),A(e)},configure:function(e){v=o(v,e)},initHighlighting:j,initHighlightingOnLoad:function(){C(),V("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.")},registerLanguage:function(n,a){let i=null;try{i=a(e)}catch(o){if($("Language definition for '{}' could not be registered.".replace("{}",n)),u)$(o);else throw o;i=p}i.name||(i.name=n),r[n]=i,i.rawDefinition=a.bind(null,e),i.aliases&&O(i.aliases,{languageName:n})},unregisterLanguage:function(e){for(let n of(delete r[e],Object.keys(s)))s[n]===e&&delete s[n]},listLanguages:function(){return Object.keys(r)},getLanguage:N,registerAliases:O,autoDetection:R,inherit:o,addPlugin:function(e){var n;(n=e)["before:highlightBlock"]&&!n["before:highlightElement"]&&(n["before:highlightElement"]=e=>{n["before:highlightBlock"](Object.assign({block:e.el},e))}),n["after:highlightBlock"]&&!n["after:highlightElement"]&&(n["after:highlightElement"]=e=>{n["after:highlightBlock"](Object.assign({block:e.el},e))}),l.push(e)}}),e.debugMode=function(){u=!1},e.safeMode=function(){u=!0},e.versionString="11.7.0",e.regex={concat:b,lookahead:h,either:k,optional:g,anyNumberOfTimes:f},I)"object"==typeof I[L]&&n.exports(I[L]);return Object.assign(e,I),e}({});e.exports=X,X.HighlightJS=X,X.default=X},35888:function(e,n,r){"use strict";r.d(n,{R:function(){return q}});var a=r(70079),i=r(62530),o=r(19430),s=r(9335),l=r(41800);function u(e,n){let[r,i]=(0,a.useState)(e),o=(0,l.E)(e);return(0,s.e)(()=>i(o.current),[o,i,...n]),r}var c,p,m,d,h,f=r(84325),g=r(34741),b=r(71690),k=r(570),y=r(52076),v=((c=v||{})[c.First=0]="First",c[c.Previous=1]="Previous",c[c.Next=2]="Next",c[c.Last=3]="Last",c[c.Specific=4]="Specific",c[c.Nothing=5]="Nothing",c),E=r(46428),T=r(90723),_=r(77095),x=r(16446),w=r(43562),A=r(82756),j=r(85483),S=r(90385),C=r(27721),N=r(19184),O=((p=O||{})[p.Open=0]="Open",p[p.Closed=1]="Closed",p),R=((m=R||{})[m.Single=0]="Single",m[m.Multi=1]="Multi",m),M=((d=M||{})[d.Pointer=0]="Pointer",d[d.Other=1]="Other",d),I=((h=I||{})[h.OpenListbox=0]="OpenListbox",h[h.CloseListbox=1]="CloseListbox",h[h.SetDisabled=2]="SetDisabled",h[h.SetOrientation=3]="SetOrientation",h[h.GoToOption=4]="GoToOption",h[h.Search=5]="Search",h[h.ClearSearch=6]="ClearSearch",h[h.RegisterOption=7]="RegisterOption",h[h.UnregisterOption=8]="UnregisterOption",h);function L(e,n=e=>e){let r=null!==e.activeOptionIndex?e.options[e.activeOptionIndex]:null,a=(0,T.z2)(n(e.options.slice()),e=>e.dataRef.current.domRef.current),i=r?a.indexOf(r):null;return -1===i&&(i=null),{options:a,activeOptionIndex:i}}let P={1:e=>e.disabled||1===e.listboxState?e:{...e,activeOptionIndex:null,listboxState:1},0(e){if(e.disabled||0===e.listboxState)return e;let n=e.activeOptionIndex,{value:r,mode:a,compare:i}=e.propsRef.current,o=e.options.findIndex(e=>{let n=e.dataRef.current.value;return(0,b.E)(a,{1:()=>r.some(e=>i(e,n)),0:()=>i(r,n)})});return -1!==o&&(n=o),{...e,listboxState:0,activeOptionIndex:n}},2:(e,n)=>e.disabled===n.disabled?e:{...e,disabled:n.disabled},3:(e,n)=>e.orientation===n.orientation?e:{...e,orientation:n.orientation},4(e,n){var r;if(e.disabled||1===e.listboxState)return e;let a=L(e),i=function(e,n){let r=n.resolveItems();if(r.length<=0)return null;let a=n.resolveActiveIndex(),i=null!=a?a:-1,o=(()=>{switch(e.focus){case 0:return r.findIndex(e=>!n.resolveDisabled(e));case 1:{let a=r.slice().reverse().findIndex((e,r,a)=>(-1===i||!(a.length-r-1>=i))&&!n.resolveDisabled(e));return -1===a?a:r.length-1-a}case 2:return r.findIndex((e,r)=>!(r<=i)&&!n.resolveDisabled(e));case 3:{let o=r.slice().reverse().findIndex(e=>!n.resolveDisabled(e));return -1===o?o:r.length-1-o}case 4:return r.findIndex(r=>n.resolveId(r)===e.id);case 5:return null;default:!function(e){throw Error("Unexpected object: "+e)}(e)}})();return -1===o?a:o}(n,{resolveItems:()=>a.options,resolveActiveIndex:()=>a.activeOptionIndex,resolveId:e=>e.id,resolveDisabled:e=>e.dataRef.current.disabled});return{...e,...a,searchQuery:"",activeOptionIndex:i,activationTrigger:null!=(r=n.trigger)?r:1}},5(e,n){if(e.disabled||1===e.listboxState)return e;let r=""!==e.searchQuery?0:1,a=e.searchQuery+n.value.toLowerCase(),i=(null!==e.activeOptionIndex?e.options.slice(e.activeOptionIndex+r).concat(e.options.slice(0,e.activeOptionIndex+r)):e.options).find(e=>{var n;return!e.dataRef.current.disabled&&(null==(n=e.dataRef.current.textValue)?void 0:n.startsWith(a))}),o=i?e.options.indexOf(i):-1;return -1===o||o===e.activeOptionIndex?{...e,searchQuery:a}:{...e,searchQuery:a,activeOptionIndex:o,activationTrigger:1}},6:e=>e.disabled||1===e.listboxState||""===e.searchQuery?e:{...e,searchQuery:""},7(e,n){let r={id:n.id,dataRef:n.dataRef},a=L(e,e=>[...e,r]);if(null===e.activeOptionIndex){let{value:i,mode:o,compare:s}=e.propsRef.current,l=n.dataRef.current.value;(0,b.E)(o,{1:()=>i.some(e=>s(e,l)),0:()=>s(i,l)})&&(a.activeOptionIndex=a.options.indexOf(r))}return{...e,...a}},8(e,n){let r=L(e,e=>{let r=e.findIndex(e=>e.id===n.id);return -1!==r&&e.splice(r,1),e});return{...e,...r,activationTrigger:1}}},D=(0,a.createContext)(null);function z(e){let n=(0,a.useContext)(D);if(null===n){let r=Error(`<${e} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(r,z),r}return n}function F(e,n){return(0,b.E)(n.type,P,e,n)}D.displayName="ListboxContext";let B=a.Fragment,H=(0,g.yV)(function(e,n){let{value:r,defaultValue:i,name:o,onChange:l,by:u=(e,n)=>e===n,disabled:c=!1,horizontal:p=!1,multiple:m=!1,...d}=e,h=p?"horizontal":"vertical",k=(0,f.T)(n),[y,v]=(0,N.q)(r,l,i),E=(0,a.useReducer)(F,{listboxState:1,propsRef:{current:{value:y,onChange:v,mode:m?1:0,compare:(0,C.z)("string"==typeof u?(e,n)=>(null==e?void 0:e[u])===(null==n?void 0:n[u]):u)}},labelRef:(0,a.createRef)(),buttonRef:(0,a.createRef)(),optionsRef:(0,a.createRef)(),disabled:c,orientation:h,options:[],searchQuery:"",activeOptionIndex:null,activationTrigger:1}),[{listboxState:x,propsRef:S,optionsRef:O,buttonRef:R},M]=E;S.current.value=y,S.current.mode=m?1:0,(0,s.e)(()=>{S.current.onChange=e=>(0,b.E)(S.current.mode,{0:()=>v(e),1(){let n=S.current.value.slice(),{compare:r}=S.current,a=n.findIndex(n=>r(n,e));return -1===a?n.push(e):n.splice(a,1),v(n)}})},[v,S]),(0,s.e)(()=>M({type:2,disabled:c}),[c]),(0,s.e)(()=>M({type:3,orientation:h}),[h]),(0,w.O)([R,O],(e,n)=>{var r;M({type:1}),(0,T.sP)(n,T.tJ.Loose)||(e.preventDefault(),null==(r=R.current)||r.focus())},0===x);let I=(0,a.useMemo)(()=>({open:0===x,disabled:c,value:y}),[x,c,y]);return a.createElement(D.Provider,{value:E},a.createElement(_.up,{value:(0,b.E)(x,{0:_.ZM.Open,1:_.ZM.Closed})},null!=o&&null!=y&&(0,j.t)({[o]:y}).map(([e,n])=>a.createElement(A._,{features:A.A.Hidden,...(0,g.oA)({key:e,as:"input",type:"hidden",hidden:!0,readOnly:!0,name:e,value:n})})),(0,g.sY)({ourProps:{ref:k},theirProps:d,slot:I,defaultTag:B,name:"Listbox"})))}),U=(0,g.yV)(function(e,n){var r;let[s,l]=z("Listbox.Button"),c=(0,f.T)(s.buttonRef,n),p=`headlessui-listbox-button-${(0,o.M)()}`,m=(0,i.G)(),d=(0,C.z)(e=>{switch(e.key){case y.R.Space:case y.R.Enter:case y.R.ArrowDown:e.preventDefault(),l({type:0}),m.nextFrame(()=>{s.propsRef.current.value||l({type:4,focus:v.First})});break;case y.R.ArrowUp:e.preventDefault(),l({type:0}),m.nextFrame(()=>{s.propsRef.current.value||l({type:4,focus:v.Last})})}}),h=(0,C.z)(e=>{e.key===y.R.Space&&e.preventDefault()}),b=(0,C.z)(e=>{if((0,E.P)(e.currentTarget))return e.preventDefault();0===s.listboxState?(l({type:1}),m.nextFrame(()=>{var e;return null==(e=s.buttonRef.current)?void 0:e.focus({preventScroll:!0})})):(e.preventDefault(),l({type:0}))}),k=u(()=>{if(s.labelRef.current)return[s.labelRef.current.id,p].join(" ")},[s.labelRef.current,p]),T=(0,a.useMemo)(()=>({open:0===s.listboxState,disabled:s.disabled,value:s.propsRef.current.value}),[s]),_={ref:c,id:p,type:(0,x.f)(e,s.buttonRef),"aria-haspopup":!0,"aria-controls":null==(r=s.optionsRef.current)?void 0:r.id,"aria-expanded":s.disabled?void 0:0===s.listboxState,"aria-labelledby":k,disabled:s.disabled,onKeyDown:d,onKeyUp:h,onClick:b};return(0,g.sY)({ourProps:_,theirProps:e,slot:T,defaultTag:"button",name:"Listbox.Button"})}),G=(0,g.yV)(function(e,n){let[r]=z("Listbox.Label"),i=`headlessui-listbox-label-${(0,o.M)()}`,s=(0,f.T)(r.labelRef,n),l=(0,C.z)(()=>{var e;return null==(e=r.buttonRef.current)?void 0:e.focus({preventScroll:!0})}),u=(0,a.useMemo)(()=>({open:0===r.listboxState,disabled:r.disabled}),[r]);return(0,g.sY)({ourProps:{ref:s,id:i,onClick:l},theirProps:e,slot:u,defaultTag:"label",name:"Listbox.Label"})}),$=g.AN.RenderStrategy|g.AN.Static,K=(0,g.yV)(function(e,n){var r;let[s,l]=z("Listbox.Options"),c=(0,f.T)(s.optionsRef,n),p=`headlessui-listbox-options-${(0,o.M)()}`,m=(0,i.G)(),d=(0,i.G)(),h=(0,_.oJ)(),E=null!==h?h===_.ZM.Open:0===s.listboxState;(0,a.useEffect)(()=>{var e;let n=s.optionsRef.current;n&&0===s.listboxState&&n!==(null==(e=(0,S.r)(n))?void 0:e.activeElement)&&n.focus({preventScroll:!0})},[s.listboxState,s.optionsRef]);let T=(0,C.z)(e=>{switch(d.dispose(),e.key){case y.R.Space:if(""!==s.searchQuery)return e.preventDefault(),e.stopPropagation(),l({type:5,value:e.key});case y.R.Enter:if(e.preventDefault(),e.stopPropagation(),null!==s.activeOptionIndex){let{dataRef:n}=s.options[s.activeOptionIndex];s.propsRef.current.onChange(n.current.value)}0===s.propsRef.current.mode&&(l({type:1}),(0,k.k)().nextFrame(()=>{var e;return null==(e=s.buttonRef.current)?void 0:e.focus({preventScroll:!0})}));break;case(0,b.E)(s.orientation,{vertical:y.R.ArrowDown,horizontal:y.R.ArrowRight}):return e.preventDefault(),e.stopPropagation(),l({type:4,focus:v.Next});case(0,b.E)(s.orientation,{vertical:y.R.ArrowUp,horizontal:y.R.ArrowLeft}):return e.preventDefault(),e.stopPropagation(),l({type:4,focus:v.Previous});case y.R.Home:case y.R.PageUp:return e.preventDefault(),e.stopPropagation(),l({type:4,focus:v.First});case y.R.End:case y.R.PageDown:return e.preventDefault(),e.stopPropagation(),l({type:4,focus:v.Last});case y.R.Escape:return e.preventDefault(),e.stopPropagation(),l({type:1}),m.nextFrame(()=>{var e;return null==(e=s.buttonRef.current)?void 0:e.focus({preventScroll:!0})});case y.R.Tab:e.preventDefault(),e.stopPropagation();break;default:1===e.key.length&&(l({type:5,value:e.key}),d.setTimeout(()=>l({type:6}),350))}}),x=u(()=>{var e,n,r;return null!=(r=null==(e=s.labelRef.current)?void 0:e.id)?r:null==(n=s.buttonRef.current)?void 0:n.id},[s.labelRef.current,s.buttonRef.current]),w=(0,a.useMemo)(()=>({open:0===s.listboxState}),[s]),A={"aria-activedescendant":null===s.activeOptionIndex||null==(r=s.options[s.activeOptionIndex])?void 0:r.id,"aria-multiselectable":1===s.propsRef.current.mode||void 0,"aria-labelledby":x,"aria-orientation":s.orientation,id:p,onKeyDown:T,role:"listbox",tabIndex:0,ref:c};return(0,g.sY)({ourProps:A,theirProps:e,slot:w,defaultTag:"ul",features:$,visible:E,name:"Listbox.Options"})}),V=(0,g.yV)(function(e,n){let{disabled:r=!1,value:i,...l}=e,[u,c]=z("Listbox.Option"),p=`headlessui-listbox-option-${(0,o.M)()}`,m=null!==u.activeOptionIndex&&u.options[u.activeOptionIndex].id===p,{value:d,compare:h}=u.propsRef.current,y=(0,b.E)(u.propsRef.current.mode,{1:()=>d.some(e=>h(e,i)),0:()=>h(d,i)}),E=(0,a.useRef)(null),T=(0,f.T)(n,E);(0,s.e)(()=>{if(0!==u.listboxState||!m||0===u.activationTrigger)return;let e=(0,k.k)();return e.requestAnimationFrame(()=>{var e,n;null==(n=null==(e=E.current)?void 0:e.scrollIntoView)||n.call(e,{block:"nearest"})}),e.dispose},[E,m,u.listboxState,u.activationTrigger,u.activeOptionIndex]);let _=(0,a.useRef)({disabled:r,value:i,domRef:E});(0,s.e)(()=>{_.current.disabled=r},[_,r]),(0,s.e)(()=>{_.current.value=i},[_,i]),(0,s.e)(()=>{var e,n;_.current.textValue=null==(n=null==(e=E.current)?void 0:e.textContent)?void 0:n.toLowerCase()},[_,E]);let x=(0,C.z)(()=>u.propsRef.current.onChange(i));(0,s.e)(()=>(c({type:7,id:p,dataRef:_}),()=>c({type:8,id:p})),[_,p]);let w=(0,C.z)(e=>{if(r)return e.preventDefault();x(),0===u.propsRef.current.mode&&(c({type:1}),(0,k.k)().nextFrame(()=>{var e;return null==(e=u.buttonRef.current)?void 0:e.focus({preventScroll:!0})}))}),A=(0,C.z)(()=>{if(r)return c({type:4,focus:v.Nothing});c({type:4,focus:v.Specific,id:p})}),j=(0,C.z)(()=>{r||m||c({type:4,focus:v.Specific,id:p,trigger:0})}),S=(0,C.z)(()=>{r||!m||c({type:4,focus:v.Nothing})}),N=(0,a.useMemo)(()=>({active:m,selected:y,disabled:r}),[m,y,r]);return(0,g.sY)({ourProps:{id:p,ref:T,role:"option",tabIndex:!0===r?void 0:-1,"aria-disabled":!0===r||void 0,"aria-selected":y,disabled:void 0,onClick:w,onFocus:A,onPointerMove:j,onMouseMove:j,onPointerLeave:S,onMouseLeave:S},theirProps:l,slot:N,defaultTag:"li",name:"Listbox.Option"})}),q=Object.assign(H,{Button:U,Label:G,Options:K,Option:V})},87093:function(e,n,r){"use strict";r.d(n,{J:function(){return B}});var a,i,o=r(70079),s=r(71690),l=r(34741),u=r(84325),c=r(19430),p=r(52076),m=r(46428),d=r(90723),h=r(77095),f=r(16446),g=r(43562),b=r(90385),k=r(61566),y=r(69990),v=r(82756),E=r(27721),T=r(43412),_=((a=_||{})[a.Open=0]="Open",a[a.Closed=1]="Closed",a),x=((i=x||{})[i.TogglePopover=0]="TogglePopover",i[i.ClosePopover=1]="ClosePopover",i[i.SetButton=2]="SetButton",i[i.SetButtonId=3]="SetButtonId",i[i.SetPanel=4]="SetPanel",i[i.SetPanelId=5]="SetPanelId",i);let w={0:e=>({...e,popoverState:(0,s.E)(e.popoverState,{0:1,1:0})}),1:e=>1===e.popoverState?e:{...e,popoverState:1},2:(e,n)=>e.button===n.button?e:{...e,button:n.button},3:(e,n)=>e.buttonId===n.buttonId?e:{...e,buttonId:n.buttonId},4:(e,n)=>e.panel===n.panel?e:{...e,panel:n.panel},5:(e,n)=>e.panelId===n.panelId?e:{...e,panelId:n.panelId}},A=(0,o.createContext)(null);function j(e){let n=(0,o.useContext)(A);if(null===n){let r=Error(`<${e} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(r,j),r}return n}A.displayName="PopoverContext";let S=(0,o.createContext)(null);function C(e){let n=(0,o.useContext)(S);if(null===n){let r=Error(`<${e} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(r,C),r}return n}S.displayName="PopoverAPIContext";let N=(0,o.createContext)(null);function O(){return(0,o.useContext)(N)}N.displayName="PopoverGroupContext";let R=(0,o.createContext)(null);function M(e,n){return(0,s.E)(n.type,w,e,n)}R.displayName="PopoverPanelContext";let I=(0,l.yV)(function(e,n){var r;let a=`headlessui-popover-button-${(0,c.M)()}`,i=`headlessui-popover-panel-${(0,c.M)()}`,p=(0,o.useRef)(null),m=(0,u.T)(n,(0,u.h)(e=>{p.current=e})),f=(0,o.useReducer)(M,{popoverState:1,button:null,buttonId:a,panel:null,panelId:i,beforePanelSentinel:(0,o.createRef)(),afterPanelSentinel:(0,o.createRef)()}),[{popoverState:b,button:v,panel:T,beforePanelSentinel:_,afterPanelSentinel:x},w]=f,j=(0,k.i)(null!=(r=p.current)?r:v);(0,o.useEffect)(()=>w({type:3,buttonId:a}),[a,w]),(0,o.useEffect)(()=>w({type:5,panelId:i}),[i,w]);let C=(0,o.useMemo)(()=>{if(!v||!T)return!1;for(let e of document.querySelectorAll("body > *"))if(Number(null==e?void 0:e.contains(v))^Number(null==e?void 0:e.contains(T)))return!0;return!1},[v,T]),N=(0,o.useMemo)(()=>({buttonId:a,panelId:i,close:()=>w({type:1})}),[a,i,w]),R=O(),I=null==R?void 0:R.registerPopover,L=(0,E.z)(()=>{var e;return null!=(e=null==R?void 0:R.isFocusWithinPopoverGroup())?e:(null==j?void 0:j.activeElement)&&((null==v?void 0:v.contains(j.activeElement))||(null==T?void 0:T.contains(j.activeElement)))});(0,o.useEffect)(()=>null==I?void 0:I(N),[I,N]),(0,y.O)(null==j?void 0:j.defaultView,"focus",e=>{var n,r,a,i;0===b&&(L()||!v||!T||null!=(r=null==(n=_.current)?void 0:n.contains)&&r.call(n,e.target)||null!=(i=null==(a=x.current)?void 0:a.contains)&&i.call(a,e.target)||w({type:1}))},!0),(0,g.O)([v,T],(e,n)=>{w({type:1}),(0,d.sP)(n,d.tJ.Loose)||(e.preventDefault(),null==v||v.focus())},0===b);let P=(0,E.z)(e=>{w({type:1});let n=e?e instanceof HTMLElement?e:"current"in e&&e.current instanceof HTMLElement?e.current:v:v;null==n||n.focus()}),D=(0,o.useMemo)(()=>({close:P,isPortalled:C}),[P,C]),z=(0,o.useMemo)(()=>({open:0===b,close:P}),[b,P]);return o.createElement(A.Provider,{value:f},o.createElement(S.Provider,{value:D},o.createElement(h.up,{value:(0,s.E)(b,{0:h.ZM.Open,1:h.ZM.Closed})},(0,l.sY)({ourProps:{ref:m},theirProps:e,slot:z,defaultTag:"div",name:"Popover"}))))}),L=(0,l.yV)(function(e,n){let[r,a]=j("Popover.Button"),{isPortalled:i}=C("Popover.Button"),h=(0,o.useRef)(null),g=`headlessui-focus-sentinel-${(0,c.M)()}`,b=O(),y=null==b?void 0:b.closeOthers,_=(0,o.useContext)(R),x=null!==_&&_===r.panelId,w=(0,u.T)(h,n,x?null:e=>a({type:2,button:e})),A=(0,u.T)(h,n),S=(0,k.i)(h),N=(0,E.z)(e=>{var n,i,o;if(x){if(1===r.popoverState)return;switch(e.key){case p.R.Space:case p.R.Enter:e.preventDefault(),null==(i=(n=e.target).click)||i.call(n),a({type:1}),null==(o=r.button)||o.focus()}}else switch(e.key){case p.R.Space:case p.R.Enter:e.preventDefault(),e.stopPropagation(),1===r.popoverState&&(null==y||y(r.buttonId)),a({type:0});break;case p.R.Escape:if(0!==r.popoverState)return null==y?void 0:y(r.buttonId);if(!h.current||(null==S?void 0:S.activeElement)&&!h.current.contains(S.activeElement))return;e.preventDefault(),e.stopPropagation(),a({type:1})}}),M=(0,E.z)(e=>{x||e.key===p.R.Space&&e.preventDefault()}),I=(0,E.z)(n=>{var i,o;(0,m.P)(n.currentTarget)||e.disabled||(x?(a({type:1}),null==(i=r.button)||i.focus()):(n.preventDefault(),n.stopPropagation(),1===r.popoverState&&(null==y||y(r.buttonId)),a({type:0}),null==(o=r.button)||o.focus()))}),L=(0,E.z)(e=>{e.preventDefault(),e.stopPropagation()}),P=0===r.popoverState,D=(0,o.useMemo)(()=>({open:P}),[P]),z=(0,f.f)(e,h),F=x?{ref:A,type:z,onKeyDown:N,onClick:I}:{ref:w,id:r.buttonId,type:z,"aria-expanded":e.disabled?void 0:0===r.popoverState,"aria-controls":r.panel?r.panelId:void 0,onKeyDown:N,onKeyUp:M,onClick:I,onMouseDown:L},B=(0,T.l)(),H=(0,E.z)(()=>{let e=r.panel;e&&(0,s.E)(B.current,{[T.N.Forwards]:()=>(0,d.jA)(e,d.TO.First),[T.N.Backwards]:()=>(0,d.jA)(e,d.TO.Last)})});return o.createElement(o.Fragment,null,(0,l.sY)({ourProps:F,theirProps:e,slot:D,defaultTag:"button",name:"Popover.Button"}),P&&!x&&i&&o.createElement(v._,{id:g,features:v.A.Focusable,as:"button",type:"button",onFocus:H}))}),P=l.AN.RenderStrategy|l.AN.Static,D=(0,l.yV)(function(e,n){let[{popoverState:r},a]=j("Popover.Overlay"),i=(0,u.T)(n),s=`headlessui-popover-overlay-${(0,c.M)()}`,p=(0,h.oJ)(),d=null!==p?p===h.ZM.Open:0===r,f=(0,E.z)(e=>{if((0,m.P)(e.currentTarget))return e.preventDefault();a({type:1})}),g=(0,o.useMemo)(()=>({open:0===r}),[r]);return(0,l.sY)({ourProps:{ref:i,id:s,"aria-hidden":!0,onClick:f},theirProps:e,slot:g,defaultTag:"div",features:P,visible:d,name:"Popover.Overlay"})}),z=l.AN.RenderStrategy|l.AN.Static,F=(0,l.yV)(function(e,n){let{focus:r=!1,...a}=e,[i,m]=j("Popover.Panel"),{close:f,isPortalled:g}=C("Popover.Panel"),b=`headlessui-focus-sentinel-before-${(0,c.M)()}`,y=`headlessui-focus-sentinel-after-${(0,c.M)()}`,_=(0,o.useRef)(null),x=(0,u.T)(_,n,e=>{m({type:4,panel:e})}),w=(0,k.i)(_),A=(0,h.oJ)(),S=null!==A?A===h.ZM.Open:0===i.popoverState,N=(0,E.z)(e=>{var n;if(e.key===p.R.Escape){if(0!==i.popoverState||!_.current||(null==w?void 0:w.activeElement)&&!_.current.contains(w.activeElement))return;e.preventDefault(),e.stopPropagation(),m({type:1}),null==(n=i.button)||n.focus()}});(0,o.useEffect)(()=>{var n;e.static||1===i.popoverState&&(null==(n=e.unmount)||n)&&m({type:4,panel:null})},[i.popoverState,e.unmount,e.static,m]),(0,o.useEffect)(()=>{if(!r||0!==i.popoverState||!_.current)return;let e=null==w?void 0:w.activeElement;_.current.contains(e)||(0,d.jA)(_.current,d.TO.First)},[r,_,i.popoverState]);let O=(0,o.useMemo)(()=>({open:0===i.popoverState,close:f}),[i,f]),M={ref:x,id:i.panelId,onKeyDown:N,onBlur:r&&0===i.popoverState?e=>{var n,r,a,o,s;let l=e.relatedTarget;!l||!_.current||null!=(n=_.current)&&n.contains(l)||(m({type:1}),((null==(a=null==(r=i.beforePanelSentinel.current)?void 0:r.contains)?void 0:a.call(r,l))||(null==(s=null==(o=i.afterPanelSentinel.current)?void 0:o.contains)?void 0:s.call(o,l)))&&l.focus({preventScroll:!0}))}:void 0,tabIndex:-1},I=(0,T.l)(),L=(0,E.z)(()=>{let e=_.current;e&&(0,s.E)(I.current,{[T.N.Forwards](){(0,d.jA)(e,d.TO.First)},[T.N.Backwards](){var e;null==(e=i.button)||e.focus({preventScroll:!0})}})}),P=(0,E.z)(()=>{let e=_.current;e&&(0,s.E)(I.current,{[T.N.Forwards](){var e,n,r;if(!i.button)return;let a=(0,d.GO)(),o=a.indexOf(i.button),s=a.slice(0,o+1),l=[...a.slice(o+1),...s];for(let u of l.slice())if((null==(n=null==(e=null==u?void 0:u.id)?void 0:e.startsWith)?void 0:n.call(e,"headlessui-focus-sentinel-"))||(null==(r=i.panel)?void 0:r.contains(u))){let c=l.indexOf(u);-1!==c&&l.splice(c,1)}(0,d.jA)(l,d.TO.First,!1)},[T.N.Backwards]:()=>(0,d.jA)(e,d.TO.Last)})});return o.createElement(R.Provider,{value:i.panelId},S&&g&&o.createElement(v._,{id:b,ref:i.beforePanelSentinel,features:v.A.Focusable,as:"button",type:"button",onFocus:L}),(0,l.sY)({ourProps:M,theirProps:a,slot:O,defaultTag:"div",features:z,visible:S,name:"Popover.Panel"}),S&&g&&o.createElement(v._,{id:y,ref:i.afterPanelSentinel,features:v.A.Focusable,as:"button",type:"button",onFocus:P}))}),B=Object.assign(I,{Button:L,Overlay:D,Panel:F,Group:(0,l.yV)(function(e,n){let r=(0,o.useRef)(null),a=(0,u.T)(r,n),[i,s]=(0,o.useState)([]),c=(0,E.z)(e=>{s(n=>{let r=n.indexOf(e);if(-1!==r){let a=n.slice();return a.splice(r,1),a}return n})}),p=(0,E.z)(e=>(s(n=>[...n,e]),()=>c(e))),m=(0,E.z)(()=>{var e;let n=(0,b.r)(r);if(!n)return!1;let a=n.activeElement;return!!(null!=(e=r.current)&&e.contains(a))||i.some(e=>{var r,i;return(null==(r=n.getElementById(e.buttonId))?void 0:r.contains(a))||(null==(i=n.getElementById(e.panelId))?void 0:i.contains(a))})}),d=(0,E.z)(e=>{for(let n of i)n.buttonId!==e&&n.close()}),h=(0,o.useMemo)(()=>({registerPopover:p,unregisterPopover:c,isFocusWithinPopoverGroup:m,closeOthers:d}),[p,c,m,d]),f=(0,o.useMemo)(()=>({}),[]);return o.createElement(N.Provider,{value:h},(0,l.sY)({ourProps:{ref:a},theirProps:e,slot:f,defaultTag:"div",name:"Popover.Group"}))})})},6004:function(e,n,r){"use strict";r.d(n,{r:function(){return E}});var a=r(70079),i=r(34741),o=r(19430),s=r(52076),l=r(46428),u=r(9335),c=r(84325),p=r(27721);let m=(0,a.createContext)(null),d=(0,i.yV)(function(e,n){let{passive:r=!1,...s}=e,l=function e(){let n=(0,a.useContext)(m);if(null===n){let r=Error("You used a