diff --git a/pom.xml b/pom.xml
index 1b1c1ebe..81151949 100644
--- a/pom.xml
+++ b/pom.xml
@@ -39,6 +39,34 @@
mysql-connector-j8.1.0
+
+ com.googlecode.json-simple
+ json-simple
+ 1.1.1
+
+
+ io.jsonwebtoken
+ jjwt-api
+ 0.11.2
+
+
+ io.jsonwebtoken
+ jjwt-impl
+ 0.11.2
+ runtime
+
+
+ io.jsonwebtoken
+ jjwt-jackson
+ 0.11.2
+ runtime
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ 2.12.4
+
+
@@ -84,6 +112,19 @@
2.2.15
+
+ io.swagger.core.v3
+ swagger-jaxrs2-jakarta
+ 2.2.15
+
+
+
+ io.swagger.core.v3
+ swagger-jaxrs2-servlet-initializer-v2
+ 2.2.15
+
+
+
install
diff --git a/run-hsqldb-server.bat b/run-hsqldb-server.bat
index 349bea4e..f5160b09 100755
--- a/run-hsqldb-server.bat
+++ b/run-hsqldb-server.bat
@@ -1,3 +1,3 @@
-cd data
-
-java -cp ..\dependency\hsqldb-2.5.1.jar org.hsqldb.Server
+mkdir data
+cd data
+java -cp ..\target\dependency\hsqldb-2.7.2.jar org.hsqldb.Server
diff --git a/run-hsqldb-server.sh b/run-hsqldb-server.sh
index da9a4a66..0eca7f4a 100755
--- a/run-hsqldb-server.sh
+++ b/run-hsqldb-server.sh
@@ -1,3 +1,3 @@
mvn dependency:copy-dependencies
cd data
-java -cp ../target/dependency/hsqldb-2.5.1.jar org.hsqldb.Server
+java -cp ../target/dependency/hsqldb-2.7.2.jar org.hsqldb.Server
diff --git a/show-hsqldb.bat b/show-hsqldb.bat
index 5d44706d..1ffdc27d 100644
--- a/show-hsqldb.bat
+++ b/show-hsqldb.bat
@@ -1,3 +1,3 @@
-java jar dependency\hsqldb-2.5.1.jar
+java -jar target\dependency\hsqldb-2.7.2.jar
\ No newline at end of file
diff --git a/src/main/java/fr/istic/taa/jaxrs/RestServer.java b/src/main/java/fr/istic/taa/jaxrs/RestServer.java
index d2eeaeb6..0978dc51 100644
--- a/src/main/java/fr/istic/taa/jaxrs/RestServer.java
+++ b/src/main/java/fr/istic/taa/jaxrs/RestServer.java
@@ -7,13 +7,12 @@
/**
* RESTfull microservice, based on JAX-RS and JBoss Undertow
- *
*/
public class RestServer {
private static final Logger logger = Logger.getLogger(RestServer.class.getName());
- public static void main( String[] args ) {
+ public static void main(String[] args) {
UndertowJaxrsServer ut = new UndertowJaxrsServer();
@@ -23,7 +22,7 @@ public static void main( String[] args ) {
ut.start(
Undertow.builder()
- .addHttpListener(8080, "localhost")
+ .addHttpListener(8090, "localhost")
);
diff --git a/src/main/java/fr/istic/taa/jaxrs/TestApplication.java b/src/main/java/fr/istic/taa/jaxrs/TestApplication.java
index c479dad0..58484af1 100644
--- a/src/main/java/fr/istic/taa/jaxrs/TestApplication.java
+++ b/src/main/java/fr/istic/taa/jaxrs/TestApplication.java
@@ -1,13 +1,13 @@
/**
* JBoss, Home of Professional Open Source
* Copyright Red Hat, Inc., and individual contributors.
- *
+ *
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -16,29 +16,32 @@
*/
package fr.istic.taa.jaxrs;
-import java.util.HashSet;
-import java.util.Set;
-
-import fr.istic.taa.jaxrs.rest.PetResource;
+import fr.istic.taa.jaxrs.rest.*;
import io.swagger.v3.jaxrs2.integration.resources.OpenApiResource;
import jakarta.ws.rs.ApplicationPath;
import jakarta.ws.rs.core.Application;
+import java.util.HashSet;
+import java.util.Set;
+
@ApplicationPath("/")
public class TestApplication extends Application {
-
+
@Override
public Set> getClasses() {
-
- final Set> clazzes = new HashSet>();
-
- clazzes.add(OpenApiResource.class);
- clazzes.add(PetResource.class);
-// clazzes.add(AcceptHeaderOpenApiResource.class);
-
-
- return clazzes;
+ final Set> resources = new HashSet<>();
+ resources.add(OpenApiResource.class);
+ resources.add(SwaggerResource.class);
+ resources.add(UserResource.class);
+ resources.add(TicketResource.class);
+ resources.add(StatusResource.class);
+ resources.add(TagResource.class);
+ resources.add(FeatureResource.class);
+ resources.add(BugResource.class);
+ resources.add(RoleResource.class);
+ resources.add(CorsFilter.class);
+ return resources;
}
}
diff --git a/src/main/java/fr/istic/taa/jaxrs/dao/BugDAO.java b/src/main/java/fr/istic/taa/jaxrs/dao/BugDAO.java
new file mode 100644
index 00000000..fbc1dd54
--- /dev/null
+++ b/src/main/java/fr/istic/taa/jaxrs/dao/BugDAO.java
@@ -0,0 +1,11 @@
+package fr.istic.taa.jaxrs.dao;
+
+import fr.istic.taa.jaxrs.dao.generic.AbstractJpaDao;
+import fr.istic.taa.jaxrs.domain.Bug;
+
+public class BugDAO extends AbstractJpaDao {
+
+ public BugDAO() {
+ setClazz(Bug.class);
+ }
+}
diff --git a/src/main/java/fr/istic/taa/jaxrs/dao/FeatureDAO.java b/src/main/java/fr/istic/taa/jaxrs/dao/FeatureDAO.java
new file mode 100644
index 00000000..b4861c28
--- /dev/null
+++ b/src/main/java/fr/istic/taa/jaxrs/dao/FeatureDAO.java
@@ -0,0 +1,11 @@
+package fr.istic.taa.jaxrs.dao;
+
+import fr.istic.taa.jaxrs.dao.generic.AbstractJpaDao;
+import fr.istic.taa.jaxrs.domain.Feature;
+
+public class FeatureDAO extends AbstractJpaDao {
+
+ public FeatureDAO() {
+ setClazz(Feature.class);
+ }
+}
diff --git a/src/main/java/fr/istic/taa/jaxrs/dao/RoleDAO.java b/src/main/java/fr/istic/taa/jaxrs/dao/RoleDAO.java
new file mode 100644
index 00000000..2660e54d
--- /dev/null
+++ b/src/main/java/fr/istic/taa/jaxrs/dao/RoleDAO.java
@@ -0,0 +1,12 @@
+package fr.istic.taa.jaxrs.dao;
+
+import fr.istic.taa.jaxrs.dao.generic.AbstractJpaDao;
+import fr.istic.taa.jaxrs.domain.Role;
+import fr.istic.taa.jaxrs.domain.Status;
+
+public class RoleDAO extends AbstractJpaDao {
+ public RoleDAO() {
+ setClazz(Role.class);
+ }
+
+}
diff --git a/src/main/java/fr/istic/taa/jaxrs/dao/StatusDAO.java b/src/main/java/fr/istic/taa/jaxrs/dao/StatusDAO.java
new file mode 100644
index 00000000..ee742a29
--- /dev/null
+++ b/src/main/java/fr/istic/taa/jaxrs/dao/StatusDAO.java
@@ -0,0 +1,11 @@
+package fr.istic.taa.jaxrs.dao;
+
+import fr.istic.taa.jaxrs.dao.generic.AbstractJpaDao;
+import fr.istic.taa.jaxrs.domain.Status;
+
+public class StatusDAO extends AbstractJpaDao {
+
+ public StatusDAO() {
+ setClazz(Status.class);
+ }
+}
diff --git a/src/main/java/fr/istic/taa/jaxrs/dao/TagDAO.java b/src/main/java/fr/istic/taa/jaxrs/dao/TagDAO.java
new file mode 100644
index 00000000..2dc9bd2a
--- /dev/null
+++ b/src/main/java/fr/istic/taa/jaxrs/dao/TagDAO.java
@@ -0,0 +1,11 @@
+package fr.istic.taa.jaxrs.dao;
+
+import fr.istic.taa.jaxrs.dao.generic.AbstractJpaDao;
+import fr.istic.taa.jaxrs.domain.Tag;
+
+public class TagDAO extends AbstractJpaDao {
+
+ public TagDAO() {
+ setClazz(Tag.class);
+ }
+}
diff --git a/src/main/java/fr/istic/taa/jaxrs/dao/TicketDAO.java b/src/main/java/fr/istic/taa/jaxrs/dao/TicketDAO.java
new file mode 100644
index 00000000..0ab2c73f
--- /dev/null
+++ b/src/main/java/fr/istic/taa/jaxrs/dao/TicketDAO.java
@@ -0,0 +1,11 @@
+package fr.istic.taa.jaxrs.dao;
+
+import fr.istic.taa.jaxrs.dao.generic.AbstractJpaDao;
+import fr.istic.taa.jaxrs.domain.Ticket;
+
+public class TicketDAO extends AbstractJpaDao {
+
+ public TicketDAO() {
+ setClazz(Ticket.class);
+ }
+}
diff --git a/src/main/java/fr/istic/taa/jaxrs/dao/UserDAO.java b/src/main/java/fr/istic/taa/jaxrs/dao/UserDAO.java
new file mode 100644
index 00000000..68cce9ec
--- /dev/null
+++ b/src/main/java/fr/istic/taa/jaxrs/dao/UserDAO.java
@@ -0,0 +1,11 @@
+package fr.istic.taa.jaxrs.dao;
+
+import fr.istic.taa.jaxrs.dao.generic.AbstractJpaDao;
+import fr.istic.taa.jaxrs.domain.User;
+
+public class UserDAO extends AbstractJpaDao {
+
+ public UserDAO() {
+ setClazz(User.class);
+ }
+}
diff --git a/src/main/java/fr/istic/taa/jaxrs/dao/generic/AbstractJpaDao.java b/src/main/java/fr/istic/taa/jaxrs/dao/generic/AbstractJpaDao.java
index 6adb209c..9aeb2e0f 100644
--- a/src/main/java/fr/istic/taa/jaxrs/dao/generic/AbstractJpaDao.java
+++ b/src/main/java/fr/istic/taa/jaxrs/dao/generic/AbstractJpaDao.java
@@ -1,60 +1,92 @@
package fr.istic.taa.jaxrs.dao.generic;
-import java.io.Serializable;
-import java.util.List;
-
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityTransaction;
+import jakarta.persistence.Query;
-public abstract class AbstractJpaDao implements IGenericDao {
-
- private Class clazz;
-
- protected EntityManager entityManager;
-
- public AbstractJpaDao() {
- this.entityManager = EntityManagerHelper.getEntityManager();
- }
-
- public void setClazz(Class clazzToSet) {
- this.clazz = clazzToSet;
- }
-
- public T findOne(K id) {
- return entityManager.find(clazz, id);
- }
-
- public List findAll() {
- return entityManager.createQuery("select e from " + clazz.getName() + " as e",clazz).getResultList();
- }
-
- public void save(T entity) {
- EntityTransaction t = this.entityManager.getTransaction();
- t.begin();
- entityManager.persist(entity);
- t.commit();
-
- }
-
- public T update(final T entity) {
- EntityTransaction t = this.entityManager.getTransaction();
- t.begin();
- T res = entityManager.merge(entity);
- t.commit();
- return res;
-
- }
-
- public void delete(T entity) {
- EntityTransaction t = this.entityManager.getTransaction();
- t.begin();
- entityManager.remove(entity);
- t.commit();
+import java.io.Serializable;
+import java.util.List;
- }
+public abstract class AbstractJpaDao implements IGenericDao {
- public void deleteById(K entityId) {
- T entity = findOne(entityId);
- delete(entity);
- }
+ private Class clazz;
+
+ protected EntityManager entityManager;
+
+ public AbstractJpaDao() {
+ this.entityManager = EntityManagerHelper.getEntityManager();
+ }
+
+ public void setClazz(Class clazzToSet) {
+ this.clazz = clazzToSet;
+ }
+
+ public T findOne(K id) {
+ return entityManager.find(clazz, id);
+ }
+
+ public List findAll() {
+ return entityManager.createQuery("select e from " + clazz.getName() + " as e", clazz).getResultList();
+ }
+
+ public void deleteAll() {
+ EntityTransaction t = this.entityManager.getTransaction();
+ t.begin();
+ entityManager.createQuery("DELETE FROM " + clazz.getName()).executeUpdate();
+ t.commit();
+ }
+
+
+ public void save(T entity) {
+ EntityTransaction t = this.entityManager.getTransaction();
+ t.begin();
+ entityManager.persist(entity);
+ t.commit();
+
+ }
+
+ public T update(final T entity) {
+ EntityTransaction t = this.entityManager.getTransaction();
+ t.begin();
+ T res = entityManager.merge(entity);
+ t.commit();
+ return res;
+
+ }
+
+ public void delete(T entity) {
+ EntityTransaction t = this.entityManager.getTransaction();
+ t.begin();
+ entityManager.remove(entity);
+ t.commit();
+
+ }
+
+ public void deleteById(K entityId) {
+ T entity = findOne(entityId);
+ delete(entity);
+ }
+
+ public T findByEmailAndPassword(String email, String password) {
+ Query query = entityManager.createQuery("SELECT u FROM " + clazz.getName() + " u WHERE u.email = :email AND u.password = :password");
+ query.setParameter("email", email);
+ query.setParameter("password", password);
+ List results = query.getResultList();
+ if (!results.isEmpty()) {
+ return results.get(0); // Supposant qu'il n'y a qu'un seul utilisateur avec cet email et ce mot de passe
+ } else {
+ return null; // Aucun utilisateur trouvé avec ces identifiants
+ }
+ }
+
+ public T findByRoleString(String role) {
+ Query query = entityManager.createQuery("SELECT u FROM " + clazz.getName() + " u WHERE u.roleString = :role");
+ query.setParameter("role", role);
+ List results = query.getResultList();
+ if (!results.isEmpty()) {
+ return results.get(0); // Supposant qu'il n'y a qu'un seul utilisateur avec cet email et ce mot de passe
+ } else {
+ return null; // Aucun utilisateur trouvé avec ces identifiants
+ }
+ }
}
diff --git a/src/main/java/fr/istic/taa/jaxrs/dao/generic/EntityManagerHelper.java b/src/main/java/fr/istic/taa/jaxrs/dao/generic/EntityManagerHelper.java
index a9950dc2..43250e24 100644
--- a/src/main/java/fr/istic/taa/jaxrs/dao/generic/EntityManagerHelper.java
+++ b/src/main/java/fr/istic/taa/jaxrs/dao/generic/EntityManagerHelper.java
@@ -28,7 +28,7 @@ public static void closeEntityManager() {
EntityManager em = threadLocal.get();
if (em != null) {
em.close();
- threadLocal.set(null);
+ threadLocal.remove();
}
}
diff --git a/src/main/java/fr/istic/taa/jaxrs/dao/generic/IGenericDao.java b/src/main/java/fr/istic/taa/jaxrs/dao/generic/IGenericDao.java
index a19037fd..95a64430 100644
--- a/src/main/java/fr/istic/taa/jaxrs/dao/generic/IGenericDao.java
+++ b/src/main/java/fr/istic/taa/jaxrs/dao/generic/IGenericDao.java
@@ -14,6 +14,8 @@ public interface IGenericDao {
T update(final T entity);
void delete(final T entity);
+
+ void deleteAll();
void deleteById(final K entityId);
}
\ No newline at end of file
diff --git a/src/main/java/fr/istic/taa/jaxrs/dao/generic/Test.java b/src/main/java/fr/istic/taa/jaxrs/dao/generic/Test.java
new file mode 100644
index 00000000..26065745
--- /dev/null
+++ b/src/main/java/fr/istic/taa/jaxrs/dao/generic/Test.java
@@ -0,0 +1,89 @@
+package fr.istic.taa.jaxrs.dao.generic;
+
+import fr.istic.taa.jaxrs.dao.*;
+import fr.istic.taa.jaxrs.domain.Status;
+import fr.istic.taa.jaxrs.domain.Ticket;
+import fr.istic.taa.jaxrs.domain.User;
+import fr.istic.taa.jaxrs.domain.Role;
+
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityTransaction;
+
+
+public class Test {
+
+ private EntityManager manager;
+
+ public Test(EntityManager manager) {
+ this.manager = manager;
+ }
+
+ public static void main(String[] args) {
+ EntityManager manager = EntityManagerHelper.getEntityManager();
+ UserDAO userDAO = new UserDAO();
+ RoleDAO roleDAO = new RoleDAO();
+ TagDAO tagDAO = new TagDAO();
+ TicketDAO ticketDAO = new TicketDAO();
+ StatusDAO statusDAO = new StatusDAO();
+
+ EntityTransaction tx = manager.getTransaction();
+
+ try {
+ // Création des rôles
+ Role role = new Role("ADMIN");
+ Role role2 = new Role("USER");
+
+ // Création des utilisateurs
+ User user = new User("test","test","test");
+ User user2 = new User("test2","test2","test2");
+ user.setRole(role);
+ user2.setRole(role2);
+
+ // Création des statuts
+ Status status = new Status("OPEN");
+ Status status2 = new Status("CLOSED");
+ Status status3 = new Status("PENDING");
+
+ // Sauvegarde des rôles
+ roleDAO.save(role);
+ roleDAO.save(role2);
+
+ // Sauvegarde des utilisateurs
+ userDAO.save(user);
+ userDAO.save(user2);
+
+ // Sauvegarde des statuts
+ statusDAO.save(status);
+ statusDAO.save(status2);
+ statusDAO.save(status3);
+
+ Ticket ticket1 = new Ticket("test1", "Ce ticket concerne un problème de connexion utilisateur.", status, user);
+ Ticket ticket2 = new Ticket("test2", "Ce ticket traite un dysfonctionnement dans le système de paiement.", status3, user);
+ Ticket ticket3 = new Ticket("test3", "Ce ticket concerne une erreur lors du chargement de la page d'accueil.", status, user2);
+ Ticket ticket4 = new Ticket("test4", "Ce ticket concerne un problème de performance dans le module de recherche.", status, user);
+ Ticket ticket5 = new Ticket("test5", "Ce ticket concerne un bug dans le formulaire de contact.", status2, user);
+ Ticket ticket6 = new Ticket("test6", "Ce ticket traite un problème d'affichage sur les pages produits.", status, user2);
+ Ticket ticket7 = new Ticket("test7", "Ce ticket concerne une erreur dans le processus de commande.", status2, user2);
+ Ticket ticket8 = new Ticket("test8", "Ce ticket traite un problème de compatibilité avec les navigateurs mobiles.", status, user2);
+ Ticket ticket9 = new Ticket("test9", "Ce ticket concerne un bug dans le panier d'achat.", status2, user);
+ Ticket ticket10 = new Ticket("test10", "Ce ticket traite un problème de sécurité sur le site web.", status3, user2);
+
+ ticketDAO.save(ticket1);
+ ticketDAO.save(ticket2);
+ ticketDAO.save(ticket3);
+ ticketDAO.save(ticket4);
+ ticketDAO.save(ticket5);
+ ticketDAO.save(ticket6);
+ ticketDAO.save(ticket7);
+ ticketDAO.save(ticket8);
+ ticketDAO.save(ticket9);
+ ticketDAO.save(ticket10);
+ } catch (Exception e) {
+ e.printStackTrace();
+ tx.rollback(); // Annuler la transaction en cas d'erreur
+ } finally {
+ manager.close();
+ EntityManagerHelper.closeEntityManagerFactory();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/fr/istic/taa/jaxrs/domain/Bug.java b/src/main/java/fr/istic/taa/jaxrs/domain/Bug.java
new file mode 100644
index 00000000..7c5714d7
--- /dev/null
+++ b/src/main/java/fr/istic/taa/jaxrs/domain/Bug.java
@@ -0,0 +1,28 @@
+package fr.istic.taa.jaxrs.domain;
+
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.xml.bind.annotation.XmlRootElement;
+
+@Entity
+@XmlRootElement(name = "Feature")
+public class Bug extends Ticket {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Long id;
+
+ // Vous pouvez ajouter des attributs spécifiques aux fonctionnalités ici
+
+ public Bug(String name, String description, Status status, User user) {
+ super(name, description, status, user);
+ }
+
+ public Bug() {
+ super();
+ }
+
+ // Vous pouvez ajouter des méthodes spécifiques aux fonctionnalités ici, si nécessaire.
+}
diff --git a/src/main/java/fr/istic/taa/jaxrs/domain/Feature.java b/src/main/java/fr/istic/taa/jaxrs/domain/Feature.java
new file mode 100644
index 00000000..25140c6e
--- /dev/null
+++ b/src/main/java/fr/istic/taa/jaxrs/domain/Feature.java
@@ -0,0 +1,28 @@
+package fr.istic.taa.jaxrs.domain;
+
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.xml.bind.annotation.XmlRootElement;
+
+@Entity
+@XmlRootElement(name = "Feature")
+public class Feature extends Ticket {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Long id;
+
+ // Vous pouvez ajouter des attributs spécifiques aux fonctionnalités ici
+
+ public Feature(String name, String description, Status status, User user) {
+ super(name, description, status, user);
+ }
+
+ public Feature() {
+ super();
+ }
+
+ // Vous pouvez ajouter des méthodes spécifiques aux fonctionnalités ici, si nécessaire.
+}
diff --git a/src/main/java/fr/istic/taa/jaxrs/domain/Pet.java b/src/main/java/fr/istic/taa/jaxrs/domain/Pet.java
deleted file mode 100644
index c8738b97..00000000
--- a/src/main/java/fr/istic/taa/jaxrs/domain/Pet.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package fr.istic.taa.jaxrs.domain;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import io.swagger.v3.oas.models.tags.Tag;
-import jakarta.xml.bind.annotation.XmlElement;
-import jakarta.xml.bind.annotation.XmlElementWrapper;
-import jakarta.xml.bind.annotation.XmlRootElement;
-
-@XmlRootElement(name = "Pet")
-public class Pet {
- private long id;
- private String name;
- private List tags = new ArrayList();
-
- @XmlElement(name = "id")
- public long getId() {
- return id;
- }
-
- public void setId(long id) {
- this.id = id;
- }
-
- @XmlElement(name = "name")
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- @XmlElementWrapper(name = "tags")
- @XmlElement(name = "tag")
- public List getTags() {
- return tags;
- }
-
- public void setTags(List tags) {
- this.tags = tags;
- }
-}
\ No newline at end of file
diff --git a/src/main/java/fr/istic/taa/jaxrs/domain/Role.java b/src/main/java/fr/istic/taa/jaxrs/domain/Role.java
new file mode 100644
index 00000000..a3742418
--- /dev/null
+++ b/src/main/java/fr/istic/taa/jaxrs/domain/Role.java
@@ -0,0 +1,58 @@
+package fr.istic.taa.jaxrs.domain;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import jakarta.persistence.*;
+import jakarta.xml.bind.annotation.XmlAttribute;
+import jakarta.xml.bind.annotation.XmlRootElement;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+@Entity
+@XmlRootElement(name = "User")
+public class Role implements Serializable {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @XmlAttribute
+ private int id;
+
+ @XmlAttribute
+ private String roleString;
+
+ @OneToMany(mappedBy = "role")
+ @JsonIgnoreProperties("role") // Ignorer la sérialisation de la liste des tickets de l'utilisateur pour éviter la récursion infinie
+ private List users;
+
+ public Role() {
+ this.roleString = "USER";
+ }
+
+ public Role(String roleString) {
+ this.roleString = roleString;
+ }
+
+ public void setRoleString(String roleString) {
+ this.roleString = roleString;
+ }
+
+ public String getRoleString() {
+ return roleString;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public void setUsers(List users) {
+ this.users = users;
+ }
+
+ public List getUsers() {
+ return users;
+ }
+
+ public int getId() {
+ return id;
+ }
+}
diff --git a/src/main/java/fr/istic/taa/jaxrs/domain/Status.java b/src/main/java/fr/istic/taa/jaxrs/domain/Status.java
new file mode 100644
index 00000000..d11b1591
--- /dev/null
+++ b/src/main/java/fr/istic/taa/jaxrs/domain/Status.java
@@ -0,0 +1,50 @@
+package fr.istic.taa.jaxrs.domain;
+
+import jakarta.persistence.*;
+import jakarta.xml.bind.annotation.XmlAttribute;
+import jakarta.xml.bind.annotation.XmlRootElement;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+@Entity
+@XmlRootElement(name = "Status")
+public class Status implements Serializable {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @XmlAttribute
+ private int id;
+
+ @XmlAttribute
+ private String statusString;
+
+ @OneToMany(mappedBy = "status", cascade = CascadeType.REMOVE)
+ private List tickets = new ArrayList<>();
+
+ public Status() {
+ this.statusString = "OPEN";
+ }
+
+ public Status(String statusString) {
+ this.statusString = statusString;
+ }
+
+ public void setUserStatus(String userStatus) {
+ this.statusString = userStatus;
+ }
+
+ public String getUserStatus() {
+ return statusString;
+ }
+
+ public void setTickets(Ticket ticket) {
+ this.tickets.add(ticket);
+ }
+
+ public int getId() {
+ return id;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/fr/istic/taa/jaxrs/domain/Tag.java b/src/main/java/fr/istic/taa/jaxrs/domain/Tag.java
new file mode 100644
index 00000000..b3990344
--- /dev/null
+++ b/src/main/java/fr/istic/taa/jaxrs/domain/Tag.java
@@ -0,0 +1,59 @@
+package fr.istic.taa.jaxrs.domain;
+
+import jakarta.persistence.*;
+import jakarta.xml.bind.annotation.XmlAttribute;
+import jakarta.xml.bind.annotation.XmlElement;
+import jakarta.xml.bind.annotation.XmlRootElement;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+@Entity
+@XmlRootElement(name = "Tag")
+public class Tag implements Serializable {
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @XmlAttribute
+ private Long id;
+
+ @XmlAttribute
+ private String name;
+
+ @XmlElement
+ @ManyToMany
+ @JoinTable(name = "tag_list")
+ private List ticketList = new ArrayList<>();
+
+ public Tag(String name) {
+ this.name = name;
+ }
+
+ public Tag() {
+
+ }
+
+ public Long getId() {
+ return id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public List getTicketList() {
+ return ticketList;
+ }
+
+ public void setTicketList(Ticket ticket) {
+ this.ticketList.add(ticket);
+ }
+}
diff --git a/src/main/java/fr/istic/taa/jaxrs/domain/Ticket.java b/src/main/java/fr/istic/taa/jaxrs/domain/Ticket.java
new file mode 100644
index 00000000..2b779db1
--- /dev/null
+++ b/src/main/java/fr/istic/taa/jaxrs/domain/Ticket.java
@@ -0,0 +1,109 @@
+package fr.istic.taa.jaxrs.domain;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import jakarta.persistence.*;
+import jakarta.xml.bind.annotation.XmlAttribute;
+import jakarta.xml.bind.annotation.XmlElement;
+import jakarta.xml.bind.annotation.XmlRootElement;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+@Entity
+@XmlRootElement(name = "Ticket")
+
+public class Ticket implements Serializable {
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @XmlAttribute
+ private Long id;
+ @XmlAttribute
+
+ private String name;
+ @XmlAttribute
+
+ private String description;
+
+ @XmlAttribute
+ @ManyToOne
+ private Status status;
+
+ @XmlElement
+ @ManyToOne
+ @JsonIgnoreProperties("tickets") // Ignorer la sérialisation de la liste des tickets de l'utilisateur pour éviter la récursion infinie
+ private User user;
+
+ @XmlElement
+ @ManyToMany(mappedBy = "ticketList")
+ private List tagList = new ArrayList<>();
+
+ public Ticket(String name, String description, Status status, User user) {
+ this.name = name;
+ this.description = description;
+ this.status = status;
+ this.user = user;
+ }
+
+ public Ticket() {
+ }
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String username) {
+ this.name = username;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String email) {
+ this.description = email;
+ }
+
+ public Status getStatus() {
+ return status;
+ }
+
+ public void setStatus(Status status) {
+ this.status = status;
+ }
+
+ @Override
+ public String toString() {
+ return "Ticket{" +
+ "id=" + id +
+ ", name='" + name + '\'' +
+ ", description='" + description + '\'' +
+ ", status='" + status + '\'' +
+ '}';
+ }
+
+ public User getUser() {
+ return user;
+ }
+
+ public void setUser(User user) {
+ this.user = user;
+ }
+
+ public List getTagList() {
+ return tagList;
+ }
+
+ public void setTagList(Tag tag) {
+ this.tagList.add(tag);
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/fr/istic/taa/jaxrs/domain/User.java b/src/main/java/fr/istic/taa/jaxrs/domain/User.java
new file mode 100644
index 00000000..0d4072b8
--- /dev/null
+++ b/src/main/java/fr/istic/taa/jaxrs/domain/User.java
@@ -0,0 +1,107 @@
+package fr.istic.taa.jaxrs.domain;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import jakarta.persistence.*;
+import jakarta.xml.bind.annotation.XmlAttribute;
+import jakarta.xml.bind.annotation.XmlElement;
+import jakarta.xml.bind.annotation.XmlRootElement;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+
+@Entity
+@XmlRootElement(name = "User")
+public class User implements Serializable {
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @XmlAttribute
+ private Long id;
+ @XmlAttribute
+
+ private String username;
+ @XmlAttribute
+
+ private String email;
+ @XmlAttribute
+
+ private String password;
+
+ @XmlElement
+ @OneToMany(mappedBy = "user", cascade = CascadeType.REMOVE)
+ private List tickets = new ArrayList<>();
+
+ @ManyToOne
+ @JoinColumn(name = "role")
+ @JsonIgnoreProperties("users") // Ignorer la sérialisation de la liste des utilisateurs associés à ce rôle
+ private Role role;
+
+ public User(String username, String email, String password) {
+ this.username = username;
+ this.email = email;
+ this.password = password;
+ }
+
+ public User() {
+ }
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getUsername() {
+ return username;
+ }
+
+ public void setUsername(String username) {
+ this.username = username;
+ }
+
+ public String getEmail() {
+ return email;
+ }
+
+ public void setEmail(String email) {
+ this.email = email;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+
+ public void setRole(Role role) {
+ this.role = role;
+ }
+
+ public Role getRole() {
+ return role;
+ }
+
+ @Override
+ public String toString() {
+ return "User{" +
+ "id=" + id +
+ ", username='" + username + '\'' +
+ ", email='" + email + '\'' +
+ ", password='" + password + '\'' +
+ '}';
+ }
+
+ public void setTicket(Ticket ticket) {
+ this.tickets.add(ticket);
+ }
+
+ public List getTickets() {
+ return tickets;
+ }
+
+}
diff --git a/src/main/java/fr/istic/taa/jaxrs/rest/BugResource.java b/src/main/java/fr/istic/taa/jaxrs/rest/BugResource.java
new file mode 100644
index 00000000..f883d15e
--- /dev/null
+++ b/src/main/java/fr/istic/taa/jaxrs/rest/BugResource.java
@@ -0,0 +1,116 @@
+package fr.istic.taa.jaxrs.rest;
+
+import fr.istic.taa.jaxrs.dao.BugDAO;
+import fr.istic.taa.jaxrs.dao.StatusDAO;
+import fr.istic.taa.jaxrs.dao.TicketDAO;
+import fr.istic.taa.jaxrs.dao.UserDAO;
+import fr.istic.taa.jaxrs.domain.Bug;
+import fr.istic.taa.jaxrs.domain.Status;
+import fr.istic.taa.jaxrs.domain.Ticket;
+import fr.istic.taa.jaxrs.domain.User;
+import io.swagger.v3.core.util.Json;
+import jakarta.persistence.EntityNotFoundException;
+import jakarta.ws.rs.*;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.Response;
+import org.json.simple.JSONObject;
+import org.json.simple.parser.JSONParser;
+
+import java.util.Collections;
+import java.util.List;
+
+@Path("bug")
+@Produces({"application/json", "application/xml"})
+public class BugResource {
+ private BugDAO BugDAO = new BugDAO();
+
+ @POST
+ @Path("/new")
+ @Consumes(MediaType.APPLICATION_JSON)
+ public Response newBug(JSONObject content) {
+ try {
+ String titreTicket = (String) content.get("titreTicket");
+ String userTicket = (String) content.get("userTicket");
+ String statusTicket = (String) content.get("statusTicket");
+ String descriptionTicket = (String) content.get("descriptionTicket");
+
+ UserDAO userDAO = new UserDAO();
+ StatusDAO statusDAO = new StatusDAO();
+ BugDAO bugDAO = new BugDAO();
+
+ User user = userDAO.findOne(Long.parseLong(userTicket));
+ Status status = statusDAO.findOne(Long.parseLong(statusTicket));
+ Bug bug = new Bug(titreTicket,descriptionTicket,status,user);
+ bugDAO.save(bug);
+ JSONObject responseJson = new JSONObject();
+ responseJson.put("message", "SUCCESS");
+ return Response.ok().entity(responseJson.toJSONString()).build();
+ } catch (Exception e) {
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
+ .entity("Failed to create new ticket: " + e.getMessage()).build();
+ }
+ }
+
+ @GET
+ @Path("/all")
+ public List getAllBugs() {
+ try {
+ return BugDAO.findAll();
+ } catch (Exception e) {
+ // Log the exception for debugging purposes
+ e.printStackTrace();
+ // Return an empty list in case of failure
+ return Collections.emptyList();
+ }
+ }
+
+ @DELETE
+ @Path("/all")
+ public Response deleteAllBugs() {
+ try {
+ BugDAO.deleteAll();
+ return Response.ok().entity("Bugs deleted successfully").build();
+ } catch (Exception e) {
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
+ .entity("Failed to delete all Bugs: " + e.getMessage()).build();
+ }
+ }
+
+ @GET
+ @Path("/{idBug}")
+ public Bug getStatusById(@PathParam("idBug") Long idBug) {
+ try {
+ BugDAO BugDAO = new BugDAO();
+ BugDAO.findOne(idBug);
+ return BugDAO.findOne(idBug);
+ } catch (Exception e) {
+ // Return null or handle the exception as per your application's logic
+ return null;
+ }
+ }
+
+ @DELETE
+ @Path("/{idBug}")
+ public Response deleteBug(@PathParam("idBug") Long idBug) {
+ try {
+ Bug bug = BugDAO.findOne(idBug);
+ if (bug == null) {
+ return Response.status(Response.Status.NOT_FOUND)
+ .entity("Bug not found")
+ .build();
+ }
+ BugDAO.delete(bug);
+ JSONObject responseJson = new JSONObject();
+ responseJson.put("message", "SUCCESS");
+ return Response.ok().entity(responseJson.toJSONString()).build();
+ } catch (EntityNotFoundException e) {
+ return Response.status(Response.Status.NOT_FOUND)
+ .entity("Bug not found: " + e.getMessage())
+ .build();
+ } catch (Exception e) {
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
+ .entity("Failed to delete bug: " + e.getMessage())
+ .build();
+ }
+ }
+}
diff --git a/src/main/java/fr/istic/taa/jaxrs/rest/CorsFilter.java b/src/main/java/fr/istic/taa/jaxrs/rest/CorsFilter.java
new file mode 100644
index 00000000..dbf1c87c
--- /dev/null
+++ b/src/main/java/fr/istic/taa/jaxrs/rest/CorsFilter.java
@@ -0,0 +1,20 @@
+package fr.istic.taa.jaxrs.rest;
+
+import jakarta.ws.rs.container.ContainerRequestContext;
+import jakarta.ws.rs.container.ContainerResponseContext;
+import jakarta.ws.rs.container.ContainerResponseFilter;
+import jakarta.ws.rs.core.MultivaluedMap;
+import jakarta.ws.rs.ext.Provider;
+
+import java.io.IOException;
+
+@Provider
+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-Headers", "*");
+ responseContext.getHeaders().add("Access-Control-Allow-Methods", "*");
+ responseContext.getHeaders().add("Access-Control-Allow-Credentials", "*");
+ }
+}
diff --git a/src/main/java/fr/istic/taa/jaxrs/rest/FeatureResource.java b/src/main/java/fr/istic/taa/jaxrs/rest/FeatureResource.java
new file mode 100644
index 00000000..cc5e9061
--- /dev/null
+++ b/src/main/java/fr/istic/taa/jaxrs/rest/FeatureResource.java
@@ -0,0 +1,101 @@
+package fr.istic.taa.jaxrs.rest;
+
+import fr.istic.taa.jaxrs.dao.FeatureDAO;
+import fr.istic.taa.jaxrs.dao.StatusDAO;
+import fr.istic.taa.jaxrs.dao.TicketDAO;
+import fr.istic.taa.jaxrs.dao.UserDAO;
+import fr.istic.taa.jaxrs.domain.Feature;
+import fr.istic.taa.jaxrs.domain.Status;
+import fr.istic.taa.jaxrs.domain.Ticket;
+import fr.istic.taa.jaxrs.domain.User;
+import jakarta.ws.rs.*;
+import jakarta.ws.rs.core.Response;
+import org.json.simple.JSONObject;
+import org.json.simple.parser.JSONParser;
+
+import java.util.Collections;
+import java.util.List;
+
+@Path("feature")
+@Produces({"application/json", "application/xml"})
+public class FeatureResource {
+ private FeatureDAO featureDAO = new FeatureDAO();
+
+ @POST
+ @Path("/new")
+ public Response newFeature(JSONObject content) {
+ try {
+ String titreTicket = (String) content.get("titreTicket");
+ String userTicket = (String) content.get("userTicket");
+ String statusTicket = (String) content.get("statusTicket");
+ String descriptionTicket = (String) content.get("descriptionTicket");
+
+ UserDAO userDAO = new UserDAO();
+ StatusDAO statusDAO = new StatusDAO();
+ FeatureDAO featureDAO = new FeatureDAO();
+
+ User user = userDAO.findOne(Long.parseLong(userTicket));
+ Status status = statusDAO.findOne(Long.parseLong(statusTicket));
+ Feature feature = new Feature(titreTicket,descriptionTicket,status,user);
+ featureDAO.save(feature);
+ JSONObject responseJson = new JSONObject();
+ responseJson.put("message", "SUCCESS");
+ return Response.ok().entity(responseJson.toJSONString()).build();
+ } catch (Exception e) {
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
+ .entity("Failed to create new ticket: " + e.getMessage()).build();
+ }
+ }
+
+ @GET
+ @Path("/all")
+ public List getAllFeatures() {
+ try {
+ return featureDAO.findAll();
+ } catch (Exception e) {
+ // Log the exception for debugging purposes
+ e.printStackTrace();
+ // Return an empty list in case of failure
+ return Collections.emptyList();
+ }
+ }
+
+ @DELETE
+ @Path("/all")
+ public Response deleteAllFeatures() {
+ try {
+ featureDAO.deleteAll();
+ return Response.ok().entity("Features deleted successfully").build();
+ } catch (Exception e) {
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
+ .entity("Failed to delete all features: " + e.getMessage()).build();
+ }
+ }
+
+ @GET
+ @Path("/{idFeature}")
+ public Feature getStatusById(@PathParam("idFeature") Long idFeature) {
+ try {
+ return featureDAO.findOne(idFeature);
+ } catch (Exception e) {
+ // Return null or handle the exception as per your application's logic
+ return null;
+ }
+ }
+
+ @DELETE
+ @Path("/{idFeature}")
+ public Response deleteFeature(@PathParam("idFeature") Long idFeature) {
+ try {
+ Feature feature = featureDAO.findOne(idFeature);
+ if (feature == null) {
+ return Response.status(Response.Status.NOT_FOUND).entity("Feature not found").build();
+ }
+ featureDAO.delete(feature);
+ return Response.ok().entity("Feature deleted successfully").build();
+ } catch (Exception e) {
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
+ .entity("Failed to delete feature: " + e.getMessage()).build();
+ }
+ }
+}
diff --git a/src/main/java/fr/istic/taa/jaxrs/rest/PetResource.java b/src/main/java/fr/istic/taa/jaxrs/rest/PetResource.java
deleted file mode 100644
index 30873955..00000000
--- a/src/main/java/fr/istic/taa/jaxrs/rest/PetResource.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package fr.istic.taa.jaxrs.rest;
-
-import fr.istic.taa.jaxrs.domain.Pet;
-import io.swagger.v3.oas.annotations.Parameter;
-import jakarta.ws.rs.Consumes;
-import jakarta.ws.rs.GET;
-import jakarta.ws.rs.POST;
-import jakarta.ws.rs.Path;
-import jakarta.ws.rs.PathParam;
-import jakarta.ws.rs.Produces;
-import jakarta.ws.rs.core.Response;
-
-@Path("pet")
-@Produces({"application/json", "application/xml"})
-public class PetResource {
-
- @GET
- @Path("/{petId}")
- public Pet getPetById(@PathParam("petId") Long petId) {
- // return pet
- return new Pet();
- }
-
- @GET
- @Path("/")
- public Pet getPet(Long petId) {
- return new Pet();
- }
-
-
- @POST
- @Consumes("application/json")
- public Response addPet(
- @Parameter(description = "Pet object that needs to be added to the store", required = true) Pet pet) {
- // add pet
- return Response.ok().entity("SUCCESS").build();
- }
-}
\ No newline at end of file
diff --git a/src/main/java/fr/istic/taa/jaxrs/rest/RoleResource.java b/src/main/java/fr/istic/taa/jaxrs/rest/RoleResource.java
new file mode 100644
index 00000000..93a5f284
--- /dev/null
+++ b/src/main/java/fr/istic/taa/jaxrs/rest/RoleResource.java
@@ -0,0 +1,72 @@
+package fr.istic.taa.jaxrs.rest;
+
+import fr.istic.taa.jaxrs.dao.RoleDAO;
+import fr.istic.taa.jaxrs.dao.StatusDAO;
+import fr.istic.taa.jaxrs.dao.UserDAO;
+import fr.istic.taa.jaxrs.domain.Role;
+import fr.istic.taa.jaxrs.domain.Status;
+import fr.istic.taa.jaxrs.domain.User;
+import jakarta.persistence.Entity;
+import jakarta.ws.rs.*;
+import jakarta.ws.rs.core.Response;
+import jakarta.xml.bind.annotation.XmlRootElement;
+import org.json.simple.JSONObject;
+
+import java.util.Collections;
+import java.util.List;
+
+@Path("role")
+@Produces({"application/json", "application/xml"})
+public class RoleResource {
+ private RoleDAO roleDAO = new RoleDAO();
+ @POST
+ @Path("/new")
+ public Response newRole() {
+ try {
+ Role role = new Role();
+ roleDAO.save(role);
+ return Response.ok().entity("SUCCESS").build();
+ } catch (Exception e) {
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
+ .entity("Failed to create new status: " + e.getMessage()).build();
+ }
+ }
+
+ @GET
+ @Path("/all")
+ public List getAllRoles() {
+ try {
+ return roleDAO.findAll();
+ } catch (Exception e) {
+ // Log the exception for debugging purposes
+ e.printStackTrace();
+ // Return an empty list in case of failure
+ return Collections.emptyList();
+ }
+ }
+
+ @GET
+ @Path("/is_admin/{id}")
+ public Response isAdmin(@PathParam("id") Long id) {
+ try {
+ UserDAO userDAO = new UserDAO();
+ User user = userDAO.findOne(id);
+ System.out.println(user.getRole().getRoleString());
+ if(user.getRole().getRoleString().equals("ADMIN")){
+ JSONObject responseJson = new JSONObject();
+ responseJson.put("message", true);
+ return Response.ok().entity(responseJson.toJSONString()).build();
+ }else{
+ JSONObject responseJson = new JSONObject();
+ responseJson.put("message", false);
+ return Response.ok().entity(responseJson.toJSONString()).build();
+ }
+ } catch (Exception e) {
+ // Log the exception for debugging purposes
+ e.printStackTrace();
+ // Return an empty list in case of failure
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
+ .entity("Failed to create new ticket: " + e.getMessage()).build();
+ }
+ }
+}
diff --git a/src/main/java/fr/istic/taa/jaxrs/rest/StatusResource.java b/src/main/java/fr/istic/taa/jaxrs/rest/StatusResource.java
new file mode 100644
index 00000000..cf4daeaf
--- /dev/null
+++ b/src/main/java/fr/istic/taa/jaxrs/rest/StatusResource.java
@@ -0,0 +1,83 @@
+package fr.istic.taa.jaxrs.rest;
+
+import fr.istic.taa.jaxrs.dao.StatusDAO;
+import fr.istic.taa.jaxrs.domain.Status;
+import jakarta.ws.rs.*;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.Response;
+import org.json.simple.JSONObject;
+import org.json.simple.parser.JSONParser;
+
+import java.util.Collections;
+import java.util.List;
+
+@Path("status")
+@Produces({"application/json", "application/xml"})
+public class StatusResource {
+ private StatusDAO statusDAO = new StatusDAO();
+
+ @POST
+ @Path("/new")
+ public Response newStatus() {
+ try {
+ Status status = new Status();
+ statusDAO.save(status);
+ return Response.ok().entity("SUCCESS").build();
+ } catch (Exception e) {
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
+ .entity("Failed to create new status: " + e.getMessage()).build();
+ }
+ }
+
+ @GET
+ @Path("/all")
+ public List getAllStatus() {
+ try {
+ return statusDAO.findAll();
+ } catch (Exception e) {
+ // Log the exception for debugging purposes
+ e.printStackTrace();
+ // Return an empty list in case of failure
+ return Collections.emptyList();
+ }
+ }
+
+ @DELETE
+ @Path("/all")
+ public Response deleteAllStatus() {
+ try {
+ statusDAO.deleteAll();
+ return Response.ok().entity("Status deleted successfully").build();
+ } catch (Exception e) {
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
+ .entity("Failed to delete all status: " + e.getMessage()).build();
+ }
+ }
+
+ @GET
+ @Path("/{idStatus}")
+ public Status getStatusById(@PathParam("idStatus") Long idStatus) {
+ try {
+ return statusDAO.findOne(idStatus);
+ } catch (Exception e) {
+ // Return null or handle the exception as per your application's logic
+ return null;
+ }
+ }
+
+ @DELETE
+ @Path("/{idStatus}")
+ public Response deleteStatus(@PathParam("idStatus") Long idStatus) {
+ try {
+ Status status = statusDAO.findOne(idStatus);
+ if (status == null) {
+ return Response.status(Response.Status.NOT_FOUND).entity("Status not found").build();
+ }
+ statusDAO.delete(status);
+ return Response.ok().entity("Status deleted successfully").build();
+ } catch (Exception e) {
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
+ .entity("Failed to delete status: " + e.getMessage()).build();
+ }
+ }
+}
diff --git a/src/main/java/fr/istic/taa/jaxrs/rest/SwaggerResource.java b/src/main/java/fr/istic/taa/jaxrs/rest/SwaggerResource.java
new file mode 100644
index 00000000..164d5f7d
--- /dev/null
+++ b/src/main/java/fr/istic/taa/jaxrs/rest/SwaggerResource.java
@@ -0,0 +1,35 @@
+package fr.istic.taa.jaxrs.rest;
+
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.PathParam;
+
+import java.io.IOException;
+import java.nio.file.FileSystems;
+import java.nio.file.Files;
+import java.util.logging.Logger;
+
+@Path("/api")
+public class SwaggerResource {
+
+ private static final Logger logger = Logger.getLogger(SwaggerResource.class.getName());
+
+ @GET
+ public byte[] Get1() {
+ try {
+ return Files.readAllBytes(FileSystems.getDefault().getPath("src/main/webapp/swagger/dist/index.html"));
+ } catch (IOException e) {
+ return null;
+ }
+ }
+
+ @GET
+ @Path("{path:.*}")
+ public byte[] Get(@PathParam("path") String path) {
+ try {
+ return Files.readAllBytes(FileSystems.getDefault().getPath("src/main/webapp/swagger/dist/" + path));
+ } catch (IOException e) {
+ return null;
+ }
+ }
+}
diff --git a/src/main/java/fr/istic/taa/jaxrs/rest/TagResource.java b/src/main/java/fr/istic/taa/jaxrs/rest/TagResource.java
new file mode 100644
index 00000000..6003999b
--- /dev/null
+++ b/src/main/java/fr/istic/taa/jaxrs/rest/TagResource.java
@@ -0,0 +1,102 @@
+package fr.istic.taa.jaxrs.rest;
+
+import fr.istic.taa.jaxrs.dao.TagDAO;
+import fr.istic.taa.jaxrs.domain.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
+import io.swagger.v3.oas.annotations.responses.ApiResponses;
+import jakarta.ws.rs.*;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.Response;
+
+import java.util.Collections;
+import java.util.List;
+
+@Path("tag")
+@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
+public class TagResource {
+ private TagDAO tagDAO = new TagDAO();
+
+ @POST
+ @Path("/new")
+ @Operation(summary = "Create a new tag")
+ @ApiResponses(value = {
+ @ApiResponse(responseCode = "200", description = "Tag created successfully"),
+ @ApiResponse(responseCode = "500", description = "Failed to create new tag")
+ })
+ public Response newTag() {
+ try {
+ Tag tag = new Tag();
+ tagDAO.save(tag);
+ return Response.ok().entity("SUCCESS").build();
+ } catch (Exception e) {
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
+ .entity("Failed to create new tag: " + e.getMessage()).build();
+ }
+ }
+
+ @GET
+ @Path("/all")
+ @Operation(summary = "Get all tags")
+ public List getAllTags() {
+ try {
+ return tagDAO.findAll();
+ } catch (Exception e) {
+ // Log the exception for debugging purposes
+ e.printStackTrace();
+ // Return an empty list in case of failure
+ return Collections.emptyList();
+ }
+ }
+
+ @DELETE
+ @Path("/all")
+ @Operation(summary = "Delete all tags")
+ @ApiResponses(value = {
+ @ApiResponse(responseCode = "200", description = "Tags deleted successfully"),
+ @ApiResponse(responseCode = "500", description = "Failed to delete all tags")
+ })
+ public Response deleteAllTags() {
+ try {
+ tagDAO.deleteAll();
+ return Response.ok().entity("Tags deleted successfully").build();
+ } catch (Exception e) {
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
+ .entity("Failed to delete all tags: " + e.getMessage()).build();
+ }
+ }
+
+ @GET
+ @Path("/{idTag}")
+ @Operation(summary = "Get a tag by ID")
+ public Tag getTagById(@PathParam("idTag") Long idTag) {
+ try {
+ return tagDAO.findOne(idTag);
+ } catch (Exception e) {
+ // Return null or handle the exception as per your application's logic
+ return null;
+ }
+ }
+
+ @DELETE
+ @Path("/{idTag}")
+ @Operation(summary = "Delete a tag by ID")
+ @ApiResponses(value = {
+ @ApiResponse(responseCode = "200", description = "Tag deleted successfully"),
+ @ApiResponse(responseCode = "404", description = "Tag not found"),
+ @ApiResponse(responseCode = "500", description = "Failed to delete tag")
+ })
+ public Response deleteTag(@PathParam("idTag") Long idTag) {
+ try {
+ Tag tag = tagDAO.findOne(idTag);
+ if (tag == null) {
+ return Response.status(Response.Status.NOT_FOUND).entity("Tag not found").build();
+ }
+ tagDAO.delete(tag);
+ return Response.ok().entity("Tag deleted successfully").build();
+ } catch (Exception e) {
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
+ .entity("Failed to delete tag: " + e.getMessage()).build();
+ }
+ }
+}
diff --git a/src/main/java/fr/istic/taa/jaxrs/rest/TicketResource.java b/src/main/java/fr/istic/taa/jaxrs/rest/TicketResource.java
new file mode 100644
index 00000000..db9a5fe8
--- /dev/null
+++ b/src/main/java/fr/istic/taa/jaxrs/rest/TicketResource.java
@@ -0,0 +1,136 @@
+package fr.istic.taa.jaxrs.rest;
+
+import fr.istic.taa.jaxrs.dao.StatusDAO;
+import fr.istic.taa.jaxrs.dao.TicketDAO;
+import fr.istic.taa.jaxrs.dao.UserDAO;
+import fr.istic.taa.jaxrs.domain.Status;
+import fr.istic.taa.jaxrs.domain.Ticket;
+import fr.istic.taa.jaxrs.domain.User;
+import io.swagger.v3.core.util.Json;
+import jakarta.persistence.EntityNotFoundException;
+import jakarta.ws.rs.*;
+import jakarta.ws.rs.core.Response;
+import org.json.simple.JSONObject;
+import org.json.simple.parser.JSONParser;
+
+import java.util.Collections;
+import java.util.List;
+
+@Path("ticket")
+@Produces({"application/json", "application/xml"})
+public class TicketResource {
+ private TicketDAO ticketDAO = new TicketDAO();
+ private UserDAO userDAO = new UserDAO();
+ private StatusDAO statusDAO = new StatusDAO();
+
+ @POST
+ @Path("/new")
+ public Response newTicket(JSONObject content) {
+ try {
+ String titreTicket = (String) content.get("titreTicket");
+ String userTicket = (String) content.get("userTicket");
+ String statusTicket = (String) content.get("statusTicket");
+ String descriptionTicket = (String) content.get("descriptionTicket");
+
+ UserDAO userDAO = new UserDAO();
+ StatusDAO statusDAO = new StatusDAO();
+ TicketDAO ticketDAO = new TicketDAO();
+
+ User user = userDAO.findOne(Long.parseLong(userTicket));
+ Status status = statusDAO.findOne(Long.parseLong(statusTicket));
+ Ticket ticket = new Ticket(titreTicket,descriptionTicket,status,user);
+ ticketDAO.save(ticket);
+ JSONObject responseJson = new JSONObject();
+ responseJson.put("message", "SUCCESS");
+ return Response.ok().entity(responseJson.toJSONString()).build();
+ } catch (Exception e) {
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
+ .entity("Failed to create new ticket: " + e.getMessage()).build();
+ }
+ }
+
+ @GET
+ @Path("/all")
+ public List getAllTickets() {
+ try {
+ return ticketDAO.findAll();
+ } catch (Exception e) {
+ // Log the exception for debugging purposes
+ e.printStackTrace();
+ // Return an empty list in case of failure
+ return Collections.emptyList();
+ }
+ }
+
+ @DELETE
+ @Path("/all")
+ public Response deleteAllTickets() {
+ try {
+ ticketDAO.deleteAll();
+ return Response.ok().entity("Ticket deleted successfully").build();
+ } catch (Exception e) {
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
+ .entity("Failed to delete all tickets: " + e.getMessage()).build();
+ }
+ }
+
+ @GET
+ @Path("/{idTicket}")
+ public Ticket getTicketById(@PathParam("idTicket") Long idTicket) {
+ try {
+ return ticketDAO.findOne(idTicket);
+ } catch (Exception e) {
+ // Return null or handle the exception as per your application's logic
+ return null;
+ }
+ }
+
+ @DELETE
+ @Path("/{idTicket}")
+ public Response deleteTicket(@PathParam("idTicket") Long idTicket) {
+ try {
+ Ticket ticket = ticketDAO.findOne(idTicket);
+ if (ticket == null) {
+ return Response.status(Response.Status.NOT_FOUND).entity("Ticket not found").build();
+ }
+ ticketDAO.delete(ticket);
+ JSONObject responseJson = new JSONObject();
+ responseJson.put("message", "SUCCESS");
+ return Response.ok().entity(responseJson.toJSONString()).build();
+ } catch (EntityNotFoundException e) {
+ return Response.status(Response.Status.NOT_FOUND)
+ .entity("Bug not found: " + e.getMessage())
+ .build();
+ } catch (Exception e) {
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
+ .entity("Failed to delete bug: " + e.getMessage())
+ .build();
+ }
+ }
+
+ @PUT
+ @Path("/update")
+ public Ticket updateTicketById(JSONObject content) {
+ try {
+ System.out.println(content);
+
+ String idTicket = (String) content.get("idTicket");
+ String titreTicket = (String) content.get("titreTicket");
+ String userTicket = (String) content.get("userTicket");
+ String statusTicket = (String) content.get("statusTicket");
+ String descriptionTicket = (String) content.get("descriptionTicket");
+ Ticket ticket = ticketDAO.findOne(Long.parseLong(idTicket));
+ User user = userDAO.findOne(Long.parseLong(userTicket));
+ Status status = statusDAO.findOne(Long.parseLong(statusTicket));
+ ticket.setName(titreTicket);
+ ticket.setUser(user);
+ ticket.setStatus(status);
+ ticket.setDescription(descriptionTicket);
+ ticketDAO.update(ticket);
+ return ticketDAO.findOne(1L);
+ } catch (Exception e) {
+ // Return null or handle the exception as per your application's logic
+ return null;
+ }
+ }
+}
diff --git a/src/main/java/fr/istic/taa/jaxrs/rest/UserResource.java b/src/main/java/fr/istic/taa/jaxrs/rest/UserResource.java
new file mode 100644
index 00000000..be33ee24
--- /dev/null
+++ b/src/main/java/fr/istic/taa/jaxrs/rest/UserResource.java
@@ -0,0 +1,140 @@
+package fr.istic.taa.jaxrs.rest;
+
+import fr.istic.taa.jaxrs.dao.RoleDAO;
+import fr.istic.taa.jaxrs.dao.UserDAO;
+import fr.istic.taa.jaxrs.domain.Role;
+import fr.istic.taa.jaxrs.domain.User;
+import io.jsonwebtoken.Jwts;
+import io.jsonwebtoken.SignatureAlgorithm;
+import io.swagger.v3.core.util.Json;
+import jakarta.ws.rs.*;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.Response;
+import org.json.simple.JSONObject;
+import org.json.simple.parser.JSONParser;
+
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+import io.jsonwebtoken.security.Keys;
+import java.security.Key;
+
+
+@Path("user")
+@Produces({"application/json", "application/xml"})
+public class UserResource {
+ private UserDAO userDAO = new UserDAO();
+ private static final Key SECRET_KEY = Keys.secretKeyFor(SignatureAlgorithm.HS512);
+
+
+ @POST
+ @Path("/login")
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response login(String content) {
+ try {
+ JSONParser parser = new JSONParser();
+ JSONObject jsonObject = (JSONObject) parser.parse(content);
+ String email = (String) jsonObject.get("email");
+ String password = (String) jsonObject.get("password");
+
+ // Vérifier si l'utilisateur existe dans la base de données en utilisant email et mot de passe
+ User user = userDAO.findByEmailAndPassword(email, password);
+ if (user != null) {
+ // Générer un jeton JWT
+ String token = Jwts.builder()
+ .setSubject(user.getId().toString()) // Utiliser l'ID de l'utilisateur comme sujet du jeton
+ .setExpiration(new Date(System.currentTimeMillis() + 86400000)) // Expire dans 24 heures
+ .signWith(SECRET_KEY, SignatureAlgorithm.HS512)
+ .compact();
+
+ // Retourner le jeton JWT dans la réponse
+ JSONObject responseJson = new JSONObject();
+ responseJson.put("message", "SUCCESS");
+ responseJson.put("token", token);
+ responseJson.put("user_id", user.getId());
+ System.out.print(user.getId());
+ return Response.ok().entity(responseJson.toJSONString()).build();
+ } else {
+ return Response.status(Response.Status.UNAUTHORIZED)
+ .entity("Identifiants incorrects").build();
+ }
+ } catch (Exception e) {
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
+ .entity("Erreur lors de la connexion : " + e.getMessage()).build();
+ }
+ }
+
+ @POST
+ @Path("/new")
+ public Response newUser(JSONObject content) {
+ try {
+ String email = (String) content.get("email");
+ String password = (String) content.get("password");
+ String username = (String) content.get("username");
+ User user = new User(username, email, password);
+ RoleDAO roleDAO = new RoleDAO();
+ Role role = roleDAO.findByRoleString("USER");
+ user.setRole(role);
+ userDAO.save(user);
+ JSONObject responseJson = new JSONObject();
+ responseJson.put("message", "SUCCESS");
+ return Response.ok().entity(responseJson.toJSONString()).build();
+ } catch (Exception e) {
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
+ .entity("Failed to create new user: " + e.getMessage()).build();
+ }
+ }
+
+ @GET
+ @Path("/all")
+ public List getAllUsers() {
+ try {
+ return userDAO.findAll();
+ } catch (Exception e) {
+ // Log the exception for debugging purposes
+ e.printStackTrace();
+ // Return an empty list in case of failure
+ return Collections.emptyList();
+ }
+ }
+
+ @DELETE
+ @Path("/all")
+ public Response deleteAllUsers() {
+ try {
+ userDAO.deleteAll();
+ return Response.ok().entity("User deleted successfully").build();
+ } catch (Exception e) {
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
+ .entity("Failed to delete all users: " + e.getMessage()).build();
+ }
+ }
+
+ @GET
+ @Path("/{idUser}")
+ public User getUserById(@PathParam("idUser") Long idUser) {
+ try {
+ return userDAO.findOne(idUser);
+ } catch (Exception e) {
+ // Return null or handle the exception as per your application's logic
+ return null;
+ }
+ }
+
+ @DELETE
+ @Path("/{idUser}")
+ public Response deleteUser(@PathParam("idUser") Long idUser) {
+ try {
+ User user = userDAO.findOne(idUser);
+ if (user == null) {
+ return Response.status(Response.Status.NOT_FOUND).entity("User not found").build();
+ }
+ userDAO.delete(user);
+ return Response.ok().entity("User deleted successfully").build();
+ } catch (Exception e) {
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
+ .entity("Failed to delete user: " + e.getMessage()).build();
+ }
+ }
+}
diff --git a/src/main/resources/META-INF/persistence.xml b/src/main/resources/META-INF/persistence.xml
index 7277b7dd..8e764082 100644
--- a/src/main/resources/META-INF/persistence.xml
+++ b/src/main/resources/META-INF/persistence.xml
@@ -1,23 +1,24 @@
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="https://jakarta.ee/xml/ns/persistence https://jakarta.ee/xml/ns/persistence/persistence_3_0.xsd"
+ version="3.0">
org.hibernate.jpa.HibernatePersistenceProvider
+ fr.istic.taa.jaxrs.domain.User
+ value="com.mysql.cj.jdbc.Driver" />
-
+ value="jdbc:mysql://localhost/bdd_backend" />
+
+ name="jakarta.persistence.schema-generation.database.action"
+ value="create" />
+ value="org.hibernate.dialect.HSQLDialect" />
@@ -25,16 +26,16 @@
org.hibernate.jpa.HibernatePersistenceProvider
+ value="com.mysql.cj.jdbc.Driver" />
-
+ value="jdbc:mysql://localhost/bdd_backend" />
+
+ name="jakarta.persistence.schema-generation.database.action"
+ value="update" />
+ value="org.hibernate.dialect.HSQLDialect" />
@@ -42,19 +43,18 @@
org.hibernate.jpa.HibernatePersistenceProvider
-
+ value="com.mysql.cj.jdbc.Driver" />
+ value="jdbc:mysql://localhost/mydatabase" />
+ name="jakarta.persistence.schema-generation.database.action"
+ value="update" />
+ value="org.hibernate.dialect.MySQL8Dialect" />
@@ -63,5 +63,4 @@
-
\ No newline at end of file
diff --git a/src/main/webapp/swagger/dist/favicon-16x16.png b/src/main/webapp/swagger/dist/favicon-16x16.png
new file mode 100644
index 00000000..8b194e61
Binary files /dev/null and b/src/main/webapp/swagger/dist/favicon-16x16.png differ
diff --git a/src/main/webapp/swagger/dist/favicon-32x32.png b/src/main/webapp/swagger/dist/favicon-32x32.png
new file mode 100644
index 00000000..249737fe
Binary files /dev/null and b/src/main/webapp/swagger/dist/favicon-32x32.png differ
diff --git a/src/main/webapp/swagger/dist/index.css b/src/main/webapp/swagger/dist/index.css
new file mode 100644
index 00000000..f2376fda
--- /dev/null
+++ b/src/main/webapp/swagger/dist/index.css
@@ -0,0 +1,16 @@
+html {
+ box-sizing: border-box;
+ overflow: -moz-scrollbars-vertical;
+ overflow-y: scroll;
+}
+
+*,
+*:before,
+*:after {
+ box-sizing: inherit;
+}
+
+body {
+ margin: 0;
+ background: #fafafa;
+}
diff --git a/src/main/webapp/swagger/dist/index.html b/src/main/webapp/swagger/dist/index.html
new file mode 100644
index 00000000..4381ad12
--- /dev/null
+++ b/src/main/webapp/swagger/dist/index.html
@@ -0,0 +1,28 @@
+
+
+
+
+
+ Swagger UI
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/webapp/swagger/dist/oauth2-redirect.html b/src/main/webapp/swagger/dist/oauth2-redirect.html
new file mode 100644
index 00000000..56409171
--- /dev/null
+++ b/src/main/webapp/swagger/dist/oauth2-redirect.html
@@ -0,0 +1,79 @@
+
+
+
+ Swagger UI: OAuth2 Redirect
+
+
+
+
+
diff --git a/src/main/webapp/swagger/dist/swagger-initializer.js b/src/main/webapp/swagger/dist/swagger-initializer.js
new file mode 100644
index 00000000..de1dc74e
--- /dev/null
+++ b/src/main/webapp/swagger/dist/swagger-initializer.js
@@ -0,0 +1,23 @@
+window.onload = function () {
+ //
+
+ // Remplacez l'URL par l'URL de votre propre documentation d'API
+ var url = "http://localhost:8090/openapi.json"; // Exemple d'URL, remplacez-la par la vôtre
+
+ // the following lines will be replaced by docker/configurator, when it runs in a docker-container
+ window.ui = SwaggerUIBundle({
+ url: url,
+ dom_id: '#swagger-ui',
+ deepLinking: true,
+ presets: [
+ SwaggerUIBundle.presets.apis,
+ SwaggerUIStandalonePreset
+ ],
+ plugins: [
+ SwaggerUIBundle.plugins.DownloadUrl
+ ],
+ layout: "StandaloneLayout"
+ });
+
+ //
+};
diff --git a/src/main/webapp/swagger/dist/swagger-ui-bundle.js b/src/main/webapp/swagger/dist/swagger-ui-bundle.js
new file mode 100644
index 00000000..3b1d60ac
--- /dev/null
+++ b/src/main/webapp/swagger/dist/swagger-ui-bundle.js
@@ -0,0 +1,3 @@
+/*! For license information please see swagger-ui-bundle.js.LICENSE.txt */
+!function webpackUniversalModuleDefinition(s,i){"object"==typeof exports&&"object"==typeof module?module.exports=i():"function"==typeof define&&define.amd?define([],i):"object"==typeof exports?exports.SwaggerUIBundle=i():s.SwaggerUIBundle=i()}(this,(()=>(()=>{var s,i,u={57468:(s,i)=>{"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i.BLANK_URL=i.relativeFirstCharacters=i.urlSchemeRegex=i.ctrlCharactersRegex=i.htmlCtrlEntityRegex=i.htmlEntitiesRegex=i.invalidProtocolRegex=void 0,i.invalidProtocolRegex=/^([^\w]*)(javascript|data|vbscript)/im,i.htmlEntitiesRegex=/(\w+)(^\w|;)?/g,i.htmlCtrlEntityRegex=/&(newline|tab);/gi,i.ctrlCharactersRegex=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim,i.urlSchemeRegex=/^.+(:|:)/gim,i.relativeFirstCharacters=[".","/"],i.BLANK_URL="about:blank"},86208:(s,i,u)=>{"use strict";i.o=void 0;var _=u(57468);i.o=function sanitizeUrl(s){if(!s)return _.BLANK_URL;var i=function decodeHtmlCharacters(s){return s.replace(_.ctrlCharactersRegex,"").replace(_.htmlEntitiesRegex,(function(s,i){return String.fromCharCode(i)}))}(s).replace(_.htmlCtrlEntityRegex,"").replace(_.ctrlCharactersRegex,"").trim();if(!i)return _.BLANK_URL;if(function isRelativeUrlWithoutProtocol(s){return _.relativeFirstCharacters.indexOf(s[0])>-1}(i))return i;var u=i.match(_.urlSchemeRegex);if(!u)return i;var w=u[0];return _.invalidProtocolRegex.test(w)?_.BLANK_URL:i}},25704:(s,i)=>{"use strict";i.byteLength=function byteLength(s){var i=getLens(s),u=i[0],_=i[1];return 3*(u+_)/4-_},i.toByteArray=function toByteArray(s){var i,u,x=getLens(s),j=x[0],P=x[1],B=new w(function _byteLength(s,i,u){return 3*(i+u)/4-u}(0,j,P)),$=0,U=P>0?j-4:j;for(u=0;u>16&255,B[$++]=i>>8&255,B[$++]=255&i;2===P&&(i=_[s.charCodeAt(u)]<<2|_[s.charCodeAt(u+1)]>>4,B[$++]=255&i);1===P&&(i=_[s.charCodeAt(u)]<<10|_[s.charCodeAt(u+1)]<<4|_[s.charCodeAt(u+2)]>>2,B[$++]=i>>8&255,B[$++]=255&i);return B},i.fromByteArray=function fromByteArray(s){for(var i,_=s.length,w=_%3,x=[],j=16383,P=0,B=_-w;PB?B:P+j));1===w?(i=s[_-1],x.push(u[i>>2]+u[i<<4&63]+"==")):2===w&&(i=(s[_-2]<<8)+s[_-1],x.push(u[i>>10]+u[i>>4&63]+u[i<<2&63]+"="));return x.join("")};for(var u=[],_=[],w="undefined"!=typeof Uint8Array?Uint8Array:Array,x="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",j=0;j<64;++j)u[j]=x[j],_[x.charCodeAt(j)]=j;function getLens(s){var i=s.length;if(i%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var u=s.indexOf("=");return-1===u&&(u=i),[u,u===i?0:4-u%4]}function encodeChunk(s,i,_){for(var w,x,j=[],P=i;P<_;P+=3)w=(s[P]<<16&16711680)+(s[P+1]<<8&65280)+(255&s[P+2]),j.push(u[(x=w)>>18&63]+u[x>>12&63]+u[x>>6&63]+u[63&x]);return j.join("")}_["-".charCodeAt(0)]=62,_["_".charCodeAt(0)]=63},33296:(s,i,u)=>{"use strict";const _=u(25704),w=u(24404),x="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;i.Buffer=Buffer,i.SlowBuffer=function SlowBuffer(s){+s!=s&&(s=0);return Buffer.alloc(+s)},i.INSPECT_MAX_BYTES=50;const j=2147483647;function createBuffer(s){if(s>j)throw new RangeError('The value "'+s+'" is invalid for option "size"');const i=new Uint8Array(s);return Object.setPrototypeOf(i,Buffer.prototype),i}function Buffer(s,i,u){if("number"==typeof s){if("string"==typeof i)throw new TypeError('The "string" argument must be of type string. Received type number');return allocUnsafe(s)}return from(s,i,u)}function from(s,i,u){if("string"==typeof s)return function fromString(s,i){"string"==typeof i&&""!==i||(i="utf8");if(!Buffer.isEncoding(i))throw new TypeError("Unknown encoding: "+i);const u=0|byteLength(s,i);let _=createBuffer(u);const w=_.write(s,i);w!==u&&(_=_.slice(0,w));return _}(s,i);if(ArrayBuffer.isView(s))return function fromArrayView(s){if(isInstance(s,Uint8Array)){const i=new Uint8Array(s);return fromArrayBuffer(i.buffer,i.byteOffset,i.byteLength)}return fromArrayLike(s)}(s);if(null==s)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof s);if(isInstance(s,ArrayBuffer)||s&&isInstance(s.buffer,ArrayBuffer))return fromArrayBuffer(s,i,u);if("undefined"!=typeof SharedArrayBuffer&&(isInstance(s,SharedArrayBuffer)||s&&isInstance(s.buffer,SharedArrayBuffer)))return fromArrayBuffer(s,i,u);if("number"==typeof s)throw new TypeError('The "value" argument must not be of type number. Received type number');const _=s.valueOf&&s.valueOf();if(null!=_&&_!==s)return Buffer.from(_,i,u);const w=function fromObject(s){if(Buffer.isBuffer(s)){const i=0|checked(s.length),u=createBuffer(i);return 0===u.length||s.copy(u,0,0,i),u}if(void 0!==s.length)return"number"!=typeof s.length||numberIsNaN(s.length)?createBuffer(0):fromArrayLike(s);if("Buffer"===s.type&&Array.isArray(s.data))return fromArrayLike(s.data)}(s);if(w)return w;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof s[Symbol.toPrimitive])return Buffer.from(s[Symbol.toPrimitive]("string"),i,u);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof s)}function assertSize(s){if("number"!=typeof s)throw new TypeError('"size" argument must be of type number');if(s<0)throw new RangeError('The value "'+s+'" is invalid for option "size"')}function allocUnsafe(s){return assertSize(s),createBuffer(s<0?0:0|checked(s))}function fromArrayLike(s){const i=s.length<0?0:0|checked(s.length),u=createBuffer(i);for(let _=0;_=j)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+j.toString(16)+" bytes");return 0|s}function byteLength(s,i){if(Buffer.isBuffer(s))return s.length;if(ArrayBuffer.isView(s)||isInstance(s,ArrayBuffer))return s.byteLength;if("string"!=typeof s)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof s);const u=s.length,_=arguments.length>2&&!0===arguments[2];if(!_&&0===u)return 0;let w=!1;for(;;)switch(i){case"ascii":case"latin1":case"binary":return u;case"utf8":case"utf-8":return utf8ToBytes(s).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*u;case"hex":return u>>>1;case"base64":return base64ToBytes(s).length;default:if(w)return _?-1:utf8ToBytes(s).length;i=(""+i).toLowerCase(),w=!0}}function slowToString(s,i,u){let _=!1;if((void 0===i||i<0)&&(i=0),i>this.length)return"";if((void 0===u||u>this.length)&&(u=this.length),u<=0)return"";if((u>>>=0)<=(i>>>=0))return"";for(s||(s="utf8");;)switch(s){case"hex":return hexSlice(this,i,u);case"utf8":case"utf-8":return utf8Slice(this,i,u);case"ascii":return asciiSlice(this,i,u);case"latin1":case"binary":return latin1Slice(this,i,u);case"base64":return base64Slice(this,i,u);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return utf16leSlice(this,i,u);default:if(_)throw new TypeError("Unknown encoding: "+s);s=(s+"").toLowerCase(),_=!0}}function swap(s,i,u){const _=s[i];s[i]=s[u],s[u]=_}function bidirectionalIndexOf(s,i,u,_,w){if(0===s.length)return-1;if("string"==typeof u?(_=u,u=0):u>2147483647?u=2147483647:u<-2147483648&&(u=-2147483648),numberIsNaN(u=+u)&&(u=w?0:s.length-1),u<0&&(u=s.length+u),u>=s.length){if(w)return-1;u=s.length-1}else if(u<0){if(!w)return-1;u=0}if("string"==typeof i&&(i=Buffer.from(i,_)),Buffer.isBuffer(i))return 0===i.length?-1:arrayIndexOf(s,i,u,_,w);if("number"==typeof i)return i&=255,"function"==typeof Uint8Array.prototype.indexOf?w?Uint8Array.prototype.indexOf.call(s,i,u):Uint8Array.prototype.lastIndexOf.call(s,i,u):arrayIndexOf(s,[i],u,_,w);throw new TypeError("val must be string, number or Buffer")}function arrayIndexOf(s,i,u,_,w){let x,j=1,P=s.length,B=i.length;if(void 0!==_&&("ucs2"===(_=String(_).toLowerCase())||"ucs-2"===_||"utf16le"===_||"utf-16le"===_)){if(s.length<2||i.length<2)return-1;j=2,P/=2,B/=2,u/=2}function read(s,i){return 1===j?s[i]:s.readUInt16BE(i*j)}if(w){let _=-1;for(x=u;x
P&&(u=P-B),x=u;x>=0;x--){let u=!0;for(let _=0;_w&&(_=w):_=w;const x=i.length;let j;for(_>x/2&&(_=x/2),j=0;j<_;++j){const _=parseInt(i.substr(2*j,2),16);if(numberIsNaN(_))return j;s[u+j]=_}return j}function utf8Write(s,i,u,_){return blitBuffer(utf8ToBytes(i,s.length-u),s,u,_)}function asciiWrite(s,i,u,_){return blitBuffer(function asciiToBytes(s){const i=[];for(let u=0;u>8,w=u%256,x.push(w),x.push(_);return x}(i,s.length-u),s,u,_)}function base64Slice(s,i,u){return 0===i&&u===s.length?_.fromByteArray(s):_.fromByteArray(s.slice(i,u))}function utf8Slice(s,i,u){u=Math.min(s.length,u);const _=[];let w=i;for(;w239?4:i>223?3:i>191?2:1;if(w+j<=u){let u,_,P,B;switch(j){case 1:i<128&&(x=i);break;case 2:u=s[w+1],128==(192&u)&&(B=(31&i)<<6|63&u,B>127&&(x=B));break;case 3:u=s[w+1],_=s[w+2],128==(192&u)&&128==(192&_)&&(B=(15&i)<<12|(63&u)<<6|63&_,B>2047&&(B<55296||B>57343)&&(x=B));break;case 4:u=s[w+1],_=s[w+2],P=s[w+3],128==(192&u)&&128==(192&_)&&128==(192&P)&&(B=(15&i)<<18|(63&u)<<12|(63&_)<<6|63&P,B>65535&&B<1114112&&(x=B))}}null===x?(x=65533,j=1):x>65535&&(x-=65536,_.push(x>>>10&1023|55296),x=56320|1023&x),_.push(x),w+=j}return function decodeCodePointsArray(s){const i=s.length;if(i<=P)return String.fromCharCode.apply(String,s);let u="",_=0;for(;__.length?(Buffer.isBuffer(i)||(i=Buffer.from(i)),i.copy(_,w)):Uint8Array.prototype.set.call(_,i,w);else{if(!Buffer.isBuffer(i))throw new TypeError('"list" argument must be an Array of Buffers');i.copy(_,w)}w+=i.length}return _},Buffer.byteLength=byteLength,Buffer.prototype._isBuffer=!0,Buffer.prototype.swap16=function swap16(){const s=this.length;if(s%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let i=0;iu&&(s+=" ... "),""},x&&(Buffer.prototype[x]=Buffer.prototype.inspect),Buffer.prototype.compare=function compare(s,i,u,_,w){if(isInstance(s,Uint8Array)&&(s=Buffer.from(s,s.offset,s.byteLength)),!Buffer.isBuffer(s))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof s);if(void 0===i&&(i=0),void 0===u&&(u=s?s.length:0),void 0===_&&(_=0),void 0===w&&(w=this.length),i<0||u>s.length||_<0||w>this.length)throw new RangeError("out of range index");if(_>=w&&i>=u)return 0;if(_>=w)return-1;if(i>=u)return 1;if(this===s)return 0;let x=(w>>>=0)-(_>>>=0),j=(u>>>=0)-(i>>>=0);const P=Math.min(x,j),B=this.slice(_,w),$=s.slice(i,u);for(let s=0;s
>>=0,isFinite(u)?(u>>>=0,void 0===_&&(_="utf8")):(_=u,u=void 0)}const w=this.length-i;if((void 0===u||u>w)&&(u=w),s.length>0&&(u<0||i<0)||i>this.length)throw new RangeError("Attempt to write outside buffer bounds");_||(_="utf8");let x=!1;for(;;)switch(_){case"hex":return hexWrite(this,s,i,u);case"utf8":case"utf-8":return utf8Write(this,s,i,u);case"ascii":case"latin1":case"binary":return asciiWrite(this,s,i,u);case"base64":return base64Write(this,s,i,u);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return ucs2Write(this,s,i,u);default:if(x)throw new TypeError("Unknown encoding: "+_);_=(""+_).toLowerCase(),x=!0}},Buffer.prototype.toJSON=function toJSON(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};const P=4096;function asciiSlice(s,i,u){let _="";u=Math.min(s.length,u);for(let w=i;w_)&&(u=_);let w="";for(let _=i;_u)throw new RangeError("Trying to access beyond buffer length")}function checkInt(s,i,u,_,w,x){if(!Buffer.isBuffer(s))throw new TypeError('"buffer" argument must be a Buffer instance');if(i>w||is.length)throw new RangeError("Index out of range")}function wrtBigUInt64LE(s,i,u,_,w){checkIntBI(i,_,w,s,u,7);let x=Number(i&BigInt(4294967295));s[u++]=x,x>>=8,s[u++]=x,x>>=8,s[u++]=x,x>>=8,s[u++]=x;let j=Number(i>>BigInt(32)&BigInt(4294967295));return s[u++]=j,j>>=8,s[u++]=j,j>>=8,s[u++]=j,j>>=8,s[u++]=j,u}function wrtBigUInt64BE(s,i,u,_,w){checkIntBI(i,_,w,s,u,7);let x=Number(i&BigInt(4294967295));s[u+7]=x,x>>=8,s[u+6]=x,x>>=8,s[u+5]=x,x>>=8,s[u+4]=x;let j=Number(i>>BigInt(32)&BigInt(4294967295));return s[u+3]=j,j>>=8,s[u+2]=j,j>>=8,s[u+1]=j,j>>=8,s[u]=j,u+8}function checkIEEE754(s,i,u,_,w,x){if(u+_>s.length)throw new RangeError("Index out of range");if(u<0)throw new RangeError("Index out of range")}function writeFloat(s,i,u,_,x){return i=+i,u>>>=0,x||checkIEEE754(s,0,u,4),w.write(s,i,u,_,23,4),u+4}function writeDouble(s,i,u,_,x){return i=+i,u>>>=0,x||checkIEEE754(s,0,u,8),w.write(s,i,u,_,52,8),u+8}Buffer.prototype.slice=function slice(s,i){const u=this.length;(s=~~s)<0?(s+=u)<0&&(s=0):s>u&&(s=u),(i=void 0===i?u:~~i)<0?(i+=u)<0&&(i=0):i>u&&(i=u),i>>=0,i>>>=0,u||checkOffset(s,i,this.length);let _=this[s],w=1,x=0;for(;++x>>=0,i>>>=0,u||checkOffset(s,i,this.length);let _=this[s+--i],w=1;for(;i>0&&(w*=256);)_+=this[s+--i]*w;return _},Buffer.prototype.readUint8=Buffer.prototype.readUInt8=function readUInt8(s,i){return s>>>=0,i||checkOffset(s,1,this.length),this[s]},Buffer.prototype.readUint16LE=Buffer.prototype.readUInt16LE=function readUInt16LE(s,i){return s>>>=0,i||checkOffset(s,2,this.length),this[s]|this[s+1]<<8},Buffer.prototype.readUint16BE=Buffer.prototype.readUInt16BE=function readUInt16BE(s,i){return s>>>=0,i||checkOffset(s,2,this.length),this[s]<<8|this[s+1]},Buffer.prototype.readUint32LE=Buffer.prototype.readUInt32LE=function readUInt32LE(s,i){return s>>>=0,i||checkOffset(s,4,this.length),(this[s]|this[s+1]<<8|this[s+2]<<16)+16777216*this[s+3]},Buffer.prototype.readUint32BE=Buffer.prototype.readUInt32BE=function readUInt32BE(s,i){return s>>>=0,i||checkOffset(s,4,this.length),16777216*this[s]+(this[s+1]<<16|this[s+2]<<8|this[s+3])},Buffer.prototype.readBigUInt64LE=defineBigIntMethod((function readBigUInt64LE(s){validateNumber(s>>>=0,"offset");const i=this[s],u=this[s+7];void 0!==i&&void 0!==u||boundsError(s,this.length-8);const _=i+256*this[++s]+65536*this[++s]+this[++s]*2**24,w=this[++s]+256*this[++s]+65536*this[++s]+u*2**24;return BigInt(_)+(BigInt(w)<>>=0,"offset");const i=this[s],u=this[s+7];void 0!==i&&void 0!==u||boundsError(s,this.length-8);const _=i*2**24+65536*this[++s]+256*this[++s]+this[++s],w=this[++s]*2**24+65536*this[++s]+256*this[++s]+u;return(BigInt(_)<>>=0,i>>>=0,u||checkOffset(s,i,this.length);let _=this[s],w=1,x=0;for(;++x=w&&(_-=Math.pow(2,8*i)),_},Buffer.prototype.readIntBE=function readIntBE(s,i,u){s>>>=0,i>>>=0,u||checkOffset(s,i,this.length);let _=i,w=1,x=this[s+--_];for(;_>0&&(w*=256);)x+=this[s+--_]*w;return w*=128,x>=w&&(x-=Math.pow(2,8*i)),x},Buffer.prototype.readInt8=function readInt8(s,i){return s>>>=0,i||checkOffset(s,1,this.length),128&this[s]?-1*(255-this[s]+1):this[s]},Buffer.prototype.readInt16LE=function readInt16LE(s,i){s>>>=0,i||checkOffset(s,2,this.length);const u=this[s]|this[s+1]<<8;return 32768&u?4294901760|u:u},Buffer.prototype.readInt16BE=function readInt16BE(s,i){s>>>=0,i||checkOffset(s,2,this.length);const u=this[s+1]|this[s]<<8;return 32768&u?4294901760|u:u},Buffer.prototype.readInt32LE=function readInt32LE(s,i){return s>>>=0,i||checkOffset(s,4,this.length),this[s]|this[s+1]<<8|this[s+2]<<16|this[s+3]<<24},Buffer.prototype.readInt32BE=function readInt32BE(s,i){return s>>>=0,i||checkOffset(s,4,this.length),this[s]<<24|this[s+1]<<16|this[s+2]<<8|this[s+3]},Buffer.prototype.readBigInt64LE=defineBigIntMethod((function readBigInt64LE(s){validateNumber(s>>>=0,"offset");const i=this[s],u=this[s+7];void 0!==i&&void 0!==u||boundsError(s,this.length-8);const _=this[s+4]+256*this[s+5]+65536*this[s+6]+(u<<24);return(BigInt(_)<>>=0,"offset");const i=this[s],u=this[s+7];void 0!==i&&void 0!==u||boundsError(s,this.length-8);const _=(i<<24)+65536*this[++s]+256*this[++s]+this[++s];return(BigInt(_)<>>=0,i||checkOffset(s,4,this.length),w.read(this,s,!0,23,4)},Buffer.prototype.readFloatBE=function readFloatBE(s,i){return s>>>=0,i||checkOffset(s,4,this.length),w.read(this,s,!1,23,4)},Buffer.prototype.readDoubleLE=function readDoubleLE(s,i){return s>>>=0,i||checkOffset(s,8,this.length),w.read(this,s,!0,52,8)},Buffer.prototype.readDoubleBE=function readDoubleBE(s,i){return s>>>=0,i||checkOffset(s,8,this.length),w.read(this,s,!1,52,8)},Buffer.prototype.writeUintLE=Buffer.prototype.writeUIntLE=function writeUIntLE(s,i,u,_){if(s=+s,i>>>=0,u>>>=0,!_){checkInt(this,s,i,u,Math.pow(2,8*u)-1,0)}let w=1,x=0;for(this[i]=255&s;++x>>=0,u>>>=0,!_){checkInt(this,s,i,u,Math.pow(2,8*u)-1,0)}let w=u-1,x=1;for(this[i+w]=255&s;--w>=0&&(x*=256);)this[i+w]=s/x&255;return i+u},Buffer.prototype.writeUint8=Buffer.prototype.writeUInt8=function writeUInt8(s,i,u){return s=+s,i>>>=0,u||checkInt(this,s,i,1,255,0),this[i]=255&s,i+1},Buffer.prototype.writeUint16LE=Buffer.prototype.writeUInt16LE=function writeUInt16LE(s,i,u){return s=+s,i>>>=0,u||checkInt(this,s,i,2,65535,0),this[i]=255&s,this[i+1]=s>>>8,i+2},Buffer.prototype.writeUint16BE=Buffer.prototype.writeUInt16BE=function writeUInt16BE(s,i,u){return s=+s,i>>>=0,u||checkInt(this,s,i,2,65535,0),this[i]=s>>>8,this[i+1]=255&s,i+2},Buffer.prototype.writeUint32LE=Buffer.prototype.writeUInt32LE=function writeUInt32LE(s,i,u){return s=+s,i>>>=0,u||checkInt(this,s,i,4,4294967295,0),this[i+3]=s>>>24,this[i+2]=s>>>16,this[i+1]=s>>>8,this[i]=255&s,i+4},Buffer.prototype.writeUint32BE=Buffer.prototype.writeUInt32BE=function writeUInt32BE(s,i,u){return s=+s,i>>>=0,u||checkInt(this,s,i,4,4294967295,0),this[i]=s>>>24,this[i+1]=s>>>16,this[i+2]=s>>>8,this[i+3]=255&s,i+4},Buffer.prototype.writeBigUInt64LE=defineBigIntMethod((function writeBigUInt64LE(s,i=0){return wrtBigUInt64LE(this,s,i,BigInt(0),BigInt("0xffffffffffffffff"))})),Buffer.prototype.writeBigUInt64BE=defineBigIntMethod((function writeBigUInt64BE(s,i=0){return wrtBigUInt64BE(this,s,i,BigInt(0),BigInt("0xffffffffffffffff"))})),Buffer.prototype.writeIntLE=function writeIntLE(s,i,u,_){if(s=+s,i>>>=0,!_){const _=Math.pow(2,8*u-1);checkInt(this,s,i,u,_-1,-_)}let w=0,x=1,j=0;for(this[i]=255&s;++w>0)-j&255;return i+u},Buffer.prototype.writeIntBE=function writeIntBE(s,i,u,_){if(s=+s,i>>>=0,!_){const _=Math.pow(2,8*u-1);checkInt(this,s,i,u,_-1,-_)}let w=u-1,x=1,j=0;for(this[i+w]=255&s;--w>=0&&(x*=256);)s<0&&0===j&&0!==this[i+w+1]&&(j=1),this[i+w]=(s/x>>0)-j&255;return i+u},Buffer.prototype.writeInt8=function writeInt8(s,i,u){return s=+s,i>>>=0,u||checkInt(this,s,i,1,127,-128),s<0&&(s=255+s+1),this[i]=255&s,i+1},Buffer.prototype.writeInt16LE=function writeInt16LE(s,i,u){return s=+s,i>>>=0,u||checkInt(this,s,i,2,32767,-32768),this[i]=255&s,this[i+1]=s>>>8,i+2},Buffer.prototype.writeInt16BE=function writeInt16BE(s,i,u){return s=+s,i>>>=0,u||checkInt(this,s,i,2,32767,-32768),this[i]=s>>>8,this[i+1]=255&s,i+2},Buffer.prototype.writeInt32LE=function writeInt32LE(s,i,u){return s=+s,i>>>=0,u||checkInt(this,s,i,4,2147483647,-2147483648),this[i]=255&s,this[i+1]=s>>>8,this[i+2]=s>>>16,this[i+3]=s>>>24,i+4},Buffer.prototype.writeInt32BE=function writeInt32BE(s,i,u){return s=+s,i>>>=0,u||checkInt(this,s,i,4,2147483647,-2147483648),s<0&&(s=4294967295+s+1),this[i]=s>>>24,this[i+1]=s>>>16,this[i+2]=s>>>8,this[i+3]=255&s,i+4},Buffer.prototype.writeBigInt64LE=defineBigIntMethod((function writeBigInt64LE(s,i=0){return wrtBigUInt64LE(this,s,i,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),Buffer.prototype.writeBigInt64BE=defineBigIntMethod((function writeBigInt64BE(s,i=0){return wrtBigUInt64BE(this,s,i,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),Buffer.prototype.writeFloatLE=function writeFloatLE(s,i,u){return writeFloat(this,s,i,!0,u)},Buffer.prototype.writeFloatBE=function writeFloatBE(s,i,u){return writeFloat(this,s,i,!1,u)},Buffer.prototype.writeDoubleLE=function writeDoubleLE(s,i,u){return writeDouble(this,s,i,!0,u)},Buffer.prototype.writeDoubleBE=function writeDoubleBE(s,i,u){return writeDouble(this,s,i,!1,u)},Buffer.prototype.copy=function copy(s,i,u,_){if(!Buffer.isBuffer(s))throw new TypeError("argument should be a Buffer");if(u||(u=0),_||0===_||(_=this.length),i>=s.length&&(i=s.length),i||(i=0),_>0&&_=this.length)throw new RangeError("Index out of range");if(_<0)throw new RangeError("sourceEnd out of bounds");_>this.length&&(_=this.length),s.length-i<_-u&&(_=s.length-i+u);const w=_-u;return this===s&&"function"==typeof Uint8Array.prototype.copyWithin?this.copyWithin(i,u,_):Uint8Array.prototype.set.call(s,this.subarray(u,_),i),w},Buffer.prototype.fill=function fill(s,i,u,_){if("string"==typeof s){if("string"==typeof i?(_=i,i=0,u=this.length):"string"==typeof u&&(_=u,u=this.length),void 0!==_&&"string"!=typeof _)throw new TypeError("encoding must be a string");if("string"==typeof _&&!Buffer.isEncoding(_))throw new TypeError("Unknown encoding: "+_);if(1===s.length){const i=s.charCodeAt(0);("utf8"===_&&i<128||"latin1"===_)&&(s=i)}}else"number"==typeof s?s&=255:"boolean"==typeof s&&(s=Number(s));if(i<0||this.length>>=0,u=void 0===u?this.length:u>>>0,s||(s=0),"number"==typeof s)for(w=i;w=_+4;u-=3)i=`_${s.slice(u-3,u)}${i}`;return`${s.slice(0,u)}${i}`}function checkIntBI(s,i,u,_,w,x){if(s>u||s3?0===i||i===BigInt(0)?`>= 0${_} and < 2${_} ** ${8*(x+1)}${_}`:`>= -(2${_} ** ${8*(x+1)-1}${_}) and < 2 ** ${8*(x+1)-1}${_}`:`>= ${i}${_} and <= ${u}${_}`,new B.ERR_OUT_OF_RANGE("value",w,s)}!function checkBounds(s,i,u){validateNumber(i,"offset"),void 0!==s[i]&&void 0!==s[i+u]||boundsError(i,s.length-(u+1))}(_,w,x)}function validateNumber(s,i){if("number"!=typeof s)throw new B.ERR_INVALID_ARG_TYPE(i,"number",s)}function boundsError(s,i,u){if(Math.floor(s)!==s)throw validateNumber(s,u),new B.ERR_OUT_OF_RANGE(u||"offset","an integer",s);if(i<0)throw new B.ERR_BUFFER_OUT_OF_BOUNDS;throw new B.ERR_OUT_OF_RANGE(u||"offset",`>= ${u?1:0} and <= ${i}`,s)}E("ERR_BUFFER_OUT_OF_BOUNDS",(function(s){return s?`${s} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"}),RangeError),E("ERR_INVALID_ARG_TYPE",(function(s,i){return`The "${s}" argument must be of type number. Received type ${typeof i}`}),TypeError),E("ERR_OUT_OF_RANGE",(function(s,i,u){let _=`The value of "${s}" is out of range.`,w=u;return Number.isInteger(u)&&Math.abs(u)>2**32?w=addNumericalSeparator(String(u)):"bigint"==typeof u&&(w=String(u),(u>BigInt(2)**BigInt(32)||u<-(BigInt(2)**BigInt(32)))&&(w=addNumericalSeparator(w)),w+="n"),_+=` It must be ${i}. Received ${w}`,_}),RangeError);const $=/[^+/0-9A-Za-z-_]/g;function utf8ToBytes(s,i){let u;i=i||1/0;const _=s.length;let w=null;const x=[];for(let j=0;j<_;++j){if(u=s.charCodeAt(j),u>55295&&u<57344){if(!w){if(u>56319){(i-=3)>-1&&x.push(239,191,189);continue}if(j+1===_){(i-=3)>-1&&x.push(239,191,189);continue}w=u;continue}if(u<56320){(i-=3)>-1&&x.push(239,191,189),w=u;continue}u=65536+(w-55296<<10|u-56320)}else w&&(i-=3)>-1&&x.push(239,191,189);if(w=null,u<128){if((i-=1)<0)break;x.push(u)}else if(u<2048){if((i-=2)<0)break;x.push(u>>6|192,63&u|128)}else if(u<65536){if((i-=3)<0)break;x.push(u>>12|224,u>>6&63|128,63&u|128)}else{if(!(u<1114112))throw new Error("Invalid code point");if((i-=4)<0)break;x.push(u>>18|240,u>>12&63|128,u>>6&63|128,63&u|128)}}return x}function base64ToBytes(s){return _.toByteArray(function base64clean(s){if((s=(s=s.split("=")[0]).trim().replace($,"")).length<2)return"";for(;s.length%4!=0;)s+="=";return s}(s))}function blitBuffer(s,i,u,_){let w;for(w=0;w<_&&!(w+u>=i.length||w>=s.length);++w)i[w+u]=s[w];return w}function isInstance(s,i){return s instanceof i||null!=s&&null!=s.constructor&&null!=s.constructor.name&&s.constructor.name===i.name}function numberIsNaN(s){return s!=s}const U=function(){const s="0123456789abcdef",i=new Array(256);for(let u=0;u<16;++u){const _=16*u;for(let w=0;w<16;++w)i[_+w]=s[u]+s[w]}return i}();function defineBigIntMethod(s){return"undefined"==typeof BigInt?BufferBigIntNotDefined:s}function BufferBigIntNotDefined(){throw new Error("BigInt not supported")}},22768:(s,i,u)=>{"use strict";var _=u(96604),w=u(4572),x=w(_("String.prototype.indexOf"));s.exports=function callBoundIntrinsic(s,i){var u=_(s,!!i);return"function"==typeof u&&x(s,".prototype.")>-1?w(u):u}},4572:(s,i,u)=>{"use strict";var _=u(30268),w=u(96604),x=u(52392),j=w("%TypeError%"),P=w("%Function.prototype.apply%"),B=w("%Function.prototype.call%"),$=w("%Reflect.apply%",!0)||_.call(B,P),U=w("%Object.defineProperty%",!0),Y=w("%Math.max%");if(U)try{U({},"a",{value:1})}catch(s){U=null}s.exports=function callBind(s){if("function"!=typeof s)throw new j("a function is required");var i=$(_,B,arguments);return x(i,1+Y(0,s.length-(arguments.length-1)),!0)};var X=function applyBind(){return $(_,P,arguments)};U?U(s.exports,"apply",{value:X}):s.exports.apply=X},6272:(s,i,u)=>{"use strict";var _=u(20308),w={"text/plain":"Text","text/html":"Url",default:"Text"};s.exports=function copy(s,i){var u,x,j,P,B,$,U=!1;i||(i={}),u=i.debug||!1;try{if(j=_(),P=document.createRange(),B=document.getSelection(),($=document.createElement("span")).textContent=s,$.ariaHidden="true",$.style.all="unset",$.style.position="fixed",$.style.top=0,$.style.clip="rect(0, 0, 0, 0)",$.style.whiteSpace="pre",$.style.webkitUserSelect="text",$.style.MozUserSelect="text",$.style.msUserSelect="text",$.style.userSelect="text",$.addEventListener("copy",(function(_){if(_.stopPropagation(),i.format)if(_.preventDefault(),void 0===_.clipboardData){u&&console.warn("unable to use e.clipboardData"),u&&console.warn("trying IE specific stuff"),window.clipboardData.clearData();var x=w[i.format]||w.default;window.clipboardData.setData(x,s)}else _.clipboardData.clearData(),_.clipboardData.setData(i.format,s);i.onCopy&&(_.preventDefault(),i.onCopy(_.clipboardData))})),document.body.appendChild($),P.selectNodeContents($),B.addRange(P),!document.execCommand("copy"))throw new Error("copy command was unsuccessful");U=!0}catch(_){u&&console.error("unable to copy using execCommand: ",_),u&&console.warn("trying IE specific stuff");try{window.clipboardData.setData(i.format||"text",s),i.onCopy&&i.onCopy(window.clipboardData),U=!0}catch(_){u&&console.error("unable to copy using clipboardData: ",_),u&&console.error("falling back to prompt"),x=function format(s){var i=(/mac os x/i.test(navigator.userAgent)?"⌘":"Ctrl")+"+C";return s.replace(/#{\s*key\s*}/g,i)}("message"in i?i.message:"Copy to clipboard: #{key}, Enter"),window.prompt(x,s)}}finally{B&&("function"==typeof B.removeRange?B.removeRange(P):B.removeAllRanges()),$&&document.body.removeChild($),j()}return U}},50432:function(s,i,u){var _;_=void 0!==u.g?u.g:this,s.exports=function(s){if(s.CSS&&s.CSS.escape)return s.CSS.escape;var cssEscape=function(s){if(0==arguments.length)throw new TypeError("`CSS.escape` requires an argument.");for(var i,u=String(s),_=u.length,w=-1,x="",j=u.charCodeAt(0);++w<_;)0!=(i=u.charCodeAt(w))?x+=i>=1&&i<=31||127==i||0==w&&i>=48&&i<=57||1==w&&i>=48&&i<=57&&45==j?"\\"+i.toString(16)+" ":0==w&&1==_&&45==i||!(i>=128||45==i||95==i||i>=48&&i<=57||i>=65&&i<=90||i>=97&&i<=122)?"\\"+u.charAt(w):u.charAt(w):x+="�";return x};return s.CSS||(s.CSS={}),s.CSS.escape=cssEscape,cssEscape}(_)},41796:(s,i,u)=>{"use strict";var _=u(33296).Buffer;function isSpecificValue(s){return s instanceof _||s instanceof Date||s instanceof RegExp}function cloneSpecificValue(s){if(s instanceof _){var i=_.alloc?_.alloc(s.length):new _(s.length);return s.copy(i),i}if(s instanceof Date)return new Date(s.getTime());if(s instanceof RegExp)return new RegExp(s);throw new Error("Unexpected situation")}function deepCloneArray(s){var i=[];return s.forEach((function(s,u){"object"==typeof s&&null!==s?Array.isArray(s)?i[u]=deepCloneArray(s):isSpecificValue(s)?i[u]=cloneSpecificValue(s):i[u]=w({},s):i[u]=s})),i}function safeGetProperty(s,i){return"__proto__"===i?void 0:s[i]}var w=s.exports=function(){if(arguments.length<1||"object"!=typeof arguments[0])return!1;if(arguments.length<2)return arguments[0];var s,i,u=arguments[0];return Array.prototype.slice.call(arguments,1).forEach((function(_){"object"!=typeof _||null===_||Array.isArray(_)||Object.keys(_).forEach((function(x){return i=safeGetProperty(u,x),(s=safeGetProperty(_,x))===u?void 0:"object"!=typeof s||null===s?void(u[x]=s):Array.isArray(s)?void(u[x]=deepCloneArray(s)):isSpecificValue(s)?void(u[x]=cloneSpecificValue(s)):"object"!=typeof i||null===i||Array.isArray(i)?void(u[x]=w({},s)):void(u[x]=w(i,s))}))})),u}},68084:s=>{"use strict";var i=function isMergeableObject(s){return function isNonNullObject(s){return!!s&&"object"==typeof s}(s)&&!function isSpecial(s){var i=Object.prototype.toString.call(s);return"[object RegExp]"===i||"[object Date]"===i||function isReactElement(s){return s.$$typeof===u}(s)}(s)};var u="function"==typeof Symbol&&Symbol.for?Symbol.for("react.element"):60103;function cloneUnlessOtherwiseSpecified(s,i){return!1!==i.clone&&i.isMergeableObject(s)?deepmerge(function emptyTarget(s){return Array.isArray(s)?[]:{}}(s),s,i):s}function defaultArrayMerge(s,i,u){return s.concat(i).map((function(s){return cloneUnlessOtherwiseSpecified(s,u)}))}function getKeys(s){return Object.keys(s).concat(function getEnumerableOwnPropertySymbols(s){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(s).filter((function(i){return Object.propertyIsEnumerable.call(s,i)})):[]}(s))}function propertyIsOnObject(s,i){try{return i in s}catch(s){return!1}}function mergeObject(s,i,u){var _={};return u.isMergeableObject(s)&&getKeys(s).forEach((function(i){_[i]=cloneUnlessOtherwiseSpecified(s[i],u)})),getKeys(i).forEach((function(w){(function propertyIsUnsafe(s,i){return propertyIsOnObject(s,i)&&!(Object.hasOwnProperty.call(s,i)&&Object.propertyIsEnumerable.call(s,i))})(s,w)||(propertyIsOnObject(s,w)&&u.isMergeableObject(i[w])?_[w]=function getMergeFunction(s,i){if(!i.customMerge)return deepmerge;var u=i.customMerge(s);return"function"==typeof u?u:deepmerge}(w,u)(s[w],i[w],u):_[w]=cloneUnlessOtherwiseSpecified(i[w],u))})),_}function deepmerge(s,u,_){(_=_||{}).arrayMerge=_.arrayMerge||defaultArrayMerge,_.isMergeableObject=_.isMergeableObject||i,_.cloneUnlessOtherwiseSpecified=cloneUnlessOtherwiseSpecified;var w=Array.isArray(u);return w===Array.isArray(s)?w?_.arrayMerge(s,u,_):mergeObject(s,u,_):cloneUnlessOtherwiseSpecified(u,_)}deepmerge.all=function deepmergeAll(s,i){if(!Array.isArray(s))throw new Error("first argument should be an array");return s.reduce((function(s,u){return deepmerge(s,u,i)}),{})};var _=deepmerge;s.exports=_},5456:(s,i,u)=>{"use strict";var _=u(71188)(),w=u(96604),x=_&&w("%Object.defineProperty%",!0);if(x)try{x({},"a",{value:1})}catch(s){x=!1}var j=w("%SyntaxError%"),P=w("%TypeError%"),B=u(80872);s.exports=function defineDataProperty(s,i,u){if(!s||"object"!=typeof s&&"function"!=typeof s)throw new P("`obj` must be an object or a function`");if("string"!=typeof i&&"symbol"!=typeof i)throw new P("`property` must be a string or a symbol`");if(arguments.length>3&&"boolean"!=typeof arguments[3]&&null!==arguments[3])throw new P("`nonEnumerable`, if provided, must be a boolean or null");if(arguments.length>4&&"boolean"!=typeof arguments[4]&&null!==arguments[4])throw new P("`nonWritable`, if provided, must be a boolean or null");if(arguments.length>5&&"boolean"!=typeof arguments[5]&&null!==arguments[5])throw new P("`nonConfigurable`, if provided, must be a boolean or null");if(arguments.length>6&&"boolean"!=typeof arguments[6])throw new P("`loose`, if provided, must be a boolean");var _=arguments.length>3?arguments[3]:null,w=arguments.length>4?arguments[4]:null,$=arguments.length>5?arguments[5]:null,U=arguments.length>6&&arguments[6],Y=!!B&&B(s,i);if(x)x(s,i,{configurable:null===$&&Y?Y.configurable:!$,enumerable:null===_&&Y?Y.enumerable:!_,value:u,writable:null===w&&Y?Y.writable:!w});else{if(!U&&(_||w||$))throw new j("This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.");s[i]=u}}},24300:function(s){s.exports=function(){"use strict";const{entries:s,setPrototypeOf:i,isFrozen:u,getPrototypeOf:_,getOwnPropertyDescriptor:w}=Object;let{freeze:x,seal:j,create:P}=Object,{apply:B,construct:$}="undefined"!=typeof Reflect&&Reflect;x||(x=function freeze(s){return s}),j||(j=function seal(s){return s}),B||(B=function apply(s,i,u){return s.apply(i,u)}),$||($=function construct(s,i){return new s(...i)});const U=unapply(Array.prototype.forEach),Y=unapply(Array.prototype.pop),X=unapply(Array.prototype.push),Z=unapply(String.prototype.toLowerCase),ee=unapply(String.prototype.toString),ae=unapply(String.prototype.match),ie=unapply(String.prototype.replace),le=unapply(String.prototype.indexOf),ce=unapply(String.prototype.trim),pe=unapply(RegExp.prototype.test),de=unconstruct(TypeError);function unapply(s){return function(i){for(var u=arguments.length,_=new Array(u>1?u-1:0),w=1;w2&&void 0!==arguments[2]?arguments[2]:Z;i&&i(s,null);let x=_.length;for(;x--;){let i=_[x];if("string"==typeof i){const s=w(i);s!==i&&(u(_)||(_[x]=s),i=s)}s[i]=!0}return s}function cleanArray(s){for(let i=0;i/gm),We=j(/\${[\w\W]*}/gm),He=j(/^data-[\-\w.\u00B7-\uFFFF]/),Ye=j(/^aria-[\-\w]+$/),Qe=j(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),Xe=j(/^(?:\w+script|data):/i),et=j(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),tt=j(/^html$/i);var rt=Object.freeze({__proto__:null,MUSTACHE_EXPR:$e,ERB_EXPR:ze,TMPLIT_EXPR:We,DATA_ATTR:He,ARIA_ATTR:Ye,IS_ALLOWED_URI:Qe,IS_SCRIPT_OR_DATA:Xe,ATTR_WHITESPACE:et,DOCTYPE_NAME:tt});const nt=function getGlobal(){return"undefined"==typeof window?null:window},ot=function _createTrustedTypesPolicy(s,i){if("object"!=typeof s||"function"!=typeof s.createPolicy)return null;let u=null;const _="data-tt-policy-suffix";i&&i.hasAttribute(_)&&(u=i.getAttribute(_));const w="dompurify"+(u?"#"+u:"");try{return s.createPolicy(w,{createHTML:s=>s,createScriptURL:s=>s})}catch(s){return console.warn("TrustedTypes policy "+w+" could not be created."),null}};function createDOMPurify(){let i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:nt();const DOMPurify=s=>createDOMPurify(s);if(DOMPurify.version="3.0.8",DOMPurify.removed=[],!i||!i.document||9!==i.document.nodeType)return DOMPurify.isSupported=!1,DOMPurify;let{document:u}=i;const _=u,w=_.currentScript,{DocumentFragment:j,HTMLTemplateElement:B,Node:$,Element:$e,NodeFilter:ze,NamedNodeMap:We=i.NamedNodeMap||i.MozNamedAttrMap,HTMLFormElement:He,DOMParser:Ye,trustedTypes:Xe}=i,et=$e.prototype,at=lookupGetter(et,"cloneNode"),st=lookupGetter(et,"nextSibling"),it=lookupGetter(et,"childNodes"),lt=lookupGetter(et,"parentNode");if("function"==typeof B){const s=u.createElement("template");s.content&&s.content.ownerDocument&&(u=s.content.ownerDocument)}let ct,ut="";const{implementation:pt,createNodeIterator:ht,createDocumentFragment:dt,getElementsByTagName:mt}=u,{importNode:gt}=_;let yt={};DOMPurify.isSupported="function"==typeof s&&"function"==typeof lt&&pt&&void 0!==pt.createHTMLDocument;const{MUSTACHE_EXPR:vt,ERB_EXPR:bt,TMPLIT_EXPR:_t,DATA_ATTR:wt,ARIA_ATTR:Et,IS_SCRIPT_OR_DATA:St,ATTR_WHITESPACE:xt}=rt;let{IS_ALLOWED_URI:kt}=rt,Ot=null;const Ct=addToSet({},[...fe,...ye,...be,...we,...xe]);let At=null;const jt=addToSet({},[...Pe,...Te,...Re,...qe]);let It=Object.seal(P(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),Pt=null,Nt=null,Tt=!0,Mt=!0,Rt=!1,Dt=!0,Bt=!1,Lt=!1,Ft=!1,qt=!1,$t=!1,Ut=!1,zt=!1,Wt=!0,Vt=!1;const Kt="user-content-";let Ht=!0,Jt=!1,Gt={},Yt=null;const Qt=addToSet({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let Xt=null;const Zt=addToSet({},["audio","video","img","source","image","track"]);let er=null;const tr=addToSet({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),rr="http://www.w3.org/1998/Math/MathML",nr="http://www.w3.org/2000/svg",ar="http://www.w3.org/1999/xhtml";let sr=ar,ir=!1,lr=null;const cr=addToSet({},[rr,nr,ar],ee);let ur=null;const pr=["application/xhtml+xml","text/html"],dr="text/html";let fr=null,mr=null;const gr=u.createElement("form"),yr=function isRegexOrFunction(s){return s instanceof RegExp||s instanceof Function},vr=function _parseConfig(){let s=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!mr||mr!==s){if(s&&"object"==typeof s||(s={}),s=clone(s),ur=-1===pr.indexOf(s.PARSER_MEDIA_TYPE)?dr:s.PARSER_MEDIA_TYPE,fr="application/xhtml+xml"===ur?ee:Z,Ot="ALLOWED_TAGS"in s?addToSet({},s.ALLOWED_TAGS,fr):Ct,At="ALLOWED_ATTR"in s?addToSet({},s.ALLOWED_ATTR,fr):jt,lr="ALLOWED_NAMESPACES"in s?addToSet({},s.ALLOWED_NAMESPACES,ee):cr,er="ADD_URI_SAFE_ATTR"in s?addToSet(clone(tr),s.ADD_URI_SAFE_ATTR,fr):tr,Xt="ADD_DATA_URI_TAGS"in s?addToSet(clone(Zt),s.ADD_DATA_URI_TAGS,fr):Zt,Yt="FORBID_CONTENTS"in s?addToSet({},s.FORBID_CONTENTS,fr):Qt,Pt="FORBID_TAGS"in s?addToSet({},s.FORBID_TAGS,fr):{},Nt="FORBID_ATTR"in s?addToSet({},s.FORBID_ATTR,fr):{},Gt="USE_PROFILES"in s&&s.USE_PROFILES,Tt=!1!==s.ALLOW_ARIA_ATTR,Mt=!1!==s.ALLOW_DATA_ATTR,Rt=s.ALLOW_UNKNOWN_PROTOCOLS||!1,Dt=!1!==s.ALLOW_SELF_CLOSE_IN_ATTR,Bt=s.SAFE_FOR_TEMPLATES||!1,Lt=s.WHOLE_DOCUMENT||!1,$t=s.RETURN_DOM||!1,Ut=s.RETURN_DOM_FRAGMENT||!1,zt=s.RETURN_TRUSTED_TYPE||!1,qt=s.FORCE_BODY||!1,Wt=!1!==s.SANITIZE_DOM,Vt=s.SANITIZE_NAMED_PROPS||!1,Ht=!1!==s.KEEP_CONTENT,Jt=s.IN_PLACE||!1,kt=s.ALLOWED_URI_REGEXP||Qe,sr=s.NAMESPACE||ar,It=s.CUSTOM_ELEMENT_HANDLING||{},s.CUSTOM_ELEMENT_HANDLING&&yr(s.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(It.tagNameCheck=s.CUSTOM_ELEMENT_HANDLING.tagNameCheck),s.CUSTOM_ELEMENT_HANDLING&&yr(s.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(It.attributeNameCheck=s.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),s.CUSTOM_ELEMENT_HANDLING&&"boolean"==typeof s.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(It.allowCustomizedBuiltInElements=s.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),Bt&&(Mt=!1),Ut&&($t=!0),Gt&&(Ot=addToSet({},xe),At=[],!0===Gt.html&&(addToSet(Ot,fe),addToSet(At,Pe)),!0===Gt.svg&&(addToSet(Ot,ye),addToSet(At,Te),addToSet(At,qe)),!0===Gt.svgFilters&&(addToSet(Ot,be),addToSet(At,Te),addToSet(At,qe)),!0===Gt.mathMl&&(addToSet(Ot,we),addToSet(At,Re),addToSet(At,qe))),s.ADD_TAGS&&(Ot===Ct&&(Ot=clone(Ot)),addToSet(Ot,s.ADD_TAGS,fr)),s.ADD_ATTR&&(At===jt&&(At=clone(At)),addToSet(At,s.ADD_ATTR,fr)),s.ADD_URI_SAFE_ATTR&&addToSet(er,s.ADD_URI_SAFE_ATTR,fr),s.FORBID_CONTENTS&&(Yt===Qt&&(Yt=clone(Yt)),addToSet(Yt,s.FORBID_CONTENTS,fr)),Ht&&(Ot["#text"]=!0),Lt&&addToSet(Ot,["html","head","body"]),Ot.table&&(addToSet(Ot,["tbody"]),delete Pt.tbody),s.TRUSTED_TYPES_POLICY){if("function"!=typeof s.TRUSTED_TYPES_POLICY.createHTML)throw de('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if("function"!=typeof s.TRUSTED_TYPES_POLICY.createScriptURL)throw de('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');ct=s.TRUSTED_TYPES_POLICY,ut=ct.createHTML("")}else void 0===ct&&(ct=ot(Xe,w)),null!==ct&&"string"==typeof ut&&(ut=ct.createHTML(""));x&&x(s),mr=s}},br=addToSet({},["mi","mo","mn","ms","mtext"]),_r=addToSet({},["foreignobject","desc","title","annotation-xml"]),wr=addToSet({},["title","style","font","a","script"]),Er=addToSet({},[...ye,...be,..._e]),Sr=addToSet({},[...we,...Se]),xr=function _checkValidNamespace(s){let i=lt(s);i&&i.tagName||(i={namespaceURI:sr,tagName:"template"});const u=Z(s.tagName),_=Z(i.tagName);return!!lr[s.namespaceURI]&&(s.namespaceURI===nr?i.namespaceURI===ar?"svg"===u:i.namespaceURI===rr?"svg"===u&&("annotation-xml"===_||br[_]):Boolean(Er[u]):s.namespaceURI===rr?i.namespaceURI===ar?"math"===u:i.namespaceURI===nr?"math"===u&&_r[_]:Boolean(Sr[u]):s.namespaceURI===ar?!(i.namespaceURI===nr&&!_r[_])&&!(i.namespaceURI===rr&&!br[_])&&!Sr[u]&&(wr[u]||!Er[u]):!("application/xhtml+xml"!==ur||!lr[s.namespaceURI]))},kr=function _forceRemove(s){X(DOMPurify.removed,{element:s});try{s.parentNode.removeChild(s)}catch(i){s.remove()}},Or=function _removeAttribute(s,i){try{X(DOMPurify.removed,{attribute:i.getAttributeNode(s),from:i})}catch(s){X(DOMPurify.removed,{attribute:null,from:i})}if(i.removeAttribute(s),"is"===s&&!At[s])if($t||Ut)try{kr(i)}catch(s){}else try{i.setAttribute(s,"")}catch(s){}},Cr=function _initDocument(s){let i=null,_=null;if(qt)s=""+s;else{const i=ae(s,/^[\r\n\t ]+/);_=i&&i[0]}"application/xhtml+xml"===ur&&sr===ar&&(s=''+s+"");const w=ct?ct.createHTML(s):s;if(sr===ar)try{i=(new Ye).parseFromString(w,ur)}catch(s){}if(!i||!i.documentElement){i=pt.createDocument(sr,"template",null);try{i.documentElement.innerHTML=ir?ut:w}catch(s){}}const x=i.body||i.documentElement;return s&&_&&x.insertBefore(u.createTextNode(_),x.childNodes[0]||null),sr===ar?mt.call(i,Lt?"html":"body")[0]:Lt?i.documentElement:x},Ar=function _createNodeIterator(s){return ht.call(s.ownerDocument||s,s,ze.SHOW_ELEMENT|ze.SHOW_COMMENT|ze.SHOW_TEXT,null)},jr=function _isClobbered(s){return s instanceof He&&("string"!=typeof s.nodeName||"string"!=typeof s.textContent||"function"!=typeof s.removeChild||!(s.attributes instanceof We)||"function"!=typeof s.removeAttribute||"function"!=typeof s.setAttribute||"string"!=typeof s.namespaceURI||"function"!=typeof s.insertBefore||"function"!=typeof s.hasChildNodes)},Ir=function _isNode(s){return"function"==typeof $&&s instanceof $},Pr=function _executeHook(s,i,u){yt[s]&&U(yt[s],(s=>{s.call(DOMPurify,i,u,mr)}))},Nr=function _sanitizeElements(s){let i=null;if(Pr("beforeSanitizeElements",s,null),jr(s))return kr(s),!0;const u=fr(s.nodeName);if(Pr("uponSanitizeElement",s,{tagName:u,allowedTags:Ot}),s.hasChildNodes()&&!Ir(s.firstElementChild)&&pe(/<[/\w]/g,s.innerHTML)&&pe(/<[/\w]/g,s.textContent))return kr(s),!0;if(!Ot[u]||Pt[u]){if(!Pt[u]&&Mr(u)){if(It.tagNameCheck instanceof RegExp&&pe(It.tagNameCheck,u))return!1;if(It.tagNameCheck instanceof Function&&It.tagNameCheck(u))return!1}if(Ht&&!Yt[u]){const i=lt(s)||s.parentNode,u=it(s)||s.childNodes;if(u&&i)for(let _=u.length-1;_>=0;--_)i.insertBefore(at(u[_],!0),st(s))}return kr(s),!0}return s instanceof $e&&!xr(s)?(kr(s),!0):"noscript"!==u&&"noembed"!==u&&"noframes"!==u||!pe(/<\/no(script|embed|frames)/i,s.innerHTML)?(Bt&&3===s.nodeType&&(i=s.textContent,U([vt,bt,_t],(s=>{i=ie(i,s," ")})),s.textContent!==i&&(X(DOMPurify.removed,{element:s.cloneNode()}),s.textContent=i)),Pr("afterSanitizeElements",s,null),!1):(kr(s),!0)},Tr=function _isValidAttribute(s,i,_){if(Wt&&("id"===i||"name"===i)&&(_ in u||_ in gr))return!1;if(Mt&&!Nt[i]&&pe(wt,i));else if(Tt&&pe(Et,i));else if(!At[i]||Nt[i]){if(!(Mr(s)&&(It.tagNameCheck instanceof RegExp&&pe(It.tagNameCheck,s)||It.tagNameCheck instanceof Function&&It.tagNameCheck(s))&&(It.attributeNameCheck instanceof RegExp&&pe(It.attributeNameCheck,i)||It.attributeNameCheck instanceof Function&&It.attributeNameCheck(i))||"is"===i&&It.allowCustomizedBuiltInElements&&(It.tagNameCheck instanceof RegExp&&pe(It.tagNameCheck,_)||It.tagNameCheck instanceof Function&&It.tagNameCheck(_))))return!1}else if(er[i]);else if(pe(kt,ie(_,xt,"")));else if("src"!==i&&"xlink:href"!==i&&"href"!==i||"script"===s||0!==le(_,"data:")||!Xt[s])if(Rt&&!pe(St,ie(_,xt,"")));else if(_)return!1;return!0},Mr=function _isBasicCustomElement(s){return s.indexOf("-")>0},Rr=function _sanitizeAttributes(s){Pr("beforeSanitizeAttributes",s,null);const{attributes:i}=s;if(!i)return;const u={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:At};let _=i.length;for(;_--;){const w=i[_],{name:x,namespaceURI:j,value:P}=w,B=fr(x);let $="value"===x?P:ce(P);if(u.attrName=B,u.attrValue=$,u.keepAttr=!0,u.forceKeepAttr=void 0,Pr("uponSanitizeAttribute",s,u),$=u.attrValue,u.forceKeepAttr)continue;if(Or(x,s),!u.keepAttr)continue;if(!Dt&&pe(/\/>/i,$)){Or(x,s);continue}Bt&&U([vt,bt,_t],(s=>{$=ie($,s," ")}));const X=fr(s.nodeName);if(Tr(X,B,$)){if(!Vt||"id"!==B&&"name"!==B||(Or(x,s),$=Kt+$),ct&&"object"==typeof Xe&&"function"==typeof Xe.getAttributeType)if(j);else switch(Xe.getAttributeType(X,B)){case"TrustedHTML":$=ct.createHTML($);break;case"TrustedScriptURL":$=ct.createScriptURL($)}try{j?s.setAttributeNS(j,x,$):s.setAttribute(x,$),Y(DOMPurify.removed)}catch(s){}}}Pr("afterSanitizeAttributes",s,null)},Dr=function _sanitizeShadowDOM(s){let i=null;const u=Ar(s);for(Pr("beforeSanitizeShadowDOM",s,null);i=u.nextNode();)Pr("uponSanitizeShadowNode",i,null),Nr(i)||(i.content instanceof j&&_sanitizeShadowDOM(i.content),Rr(i));Pr("afterSanitizeShadowDOM",s,null)};return DOMPurify.sanitize=function(s){let i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},u=null,w=null,x=null,P=null;if(ir=!s,ir&&(s="\x3c!--\x3e"),"string"!=typeof s&&!Ir(s)){if("function"!=typeof s.toString)throw de("toString is not a function");if("string"!=typeof(s=s.toString()))throw de("dirty is not a string, aborting")}if(!DOMPurify.isSupported)return s;if(Ft||vr(i),DOMPurify.removed=[],"string"==typeof s&&(Jt=!1),Jt){if(s.nodeName){const i=fr(s.nodeName);if(!Ot[i]||Pt[i])throw de("root node is forbidden and cannot be sanitized in-place")}}else if(s instanceof $)u=Cr("\x3c!----\x3e"),w=u.ownerDocument.importNode(s,!0),1===w.nodeType&&"BODY"===w.nodeName||"HTML"===w.nodeName?u=w:u.appendChild(w);else{if(!$t&&!Bt&&!Lt&&-1===s.indexOf("<"))return ct&&zt?ct.createHTML(s):s;if(u=Cr(s),!u)return $t?null:zt?ut:""}u&&qt&&kr(u.firstChild);const B=Ar(Jt?s:u);for(;x=B.nextNode();)Nr(x)||(x.content instanceof j&&Dr(x.content),Rr(x));if(Jt)return s;if($t){if(Ut)for(P=dt.call(u.ownerDocument);u.firstChild;)P.appendChild(u.firstChild);else P=u;return(At.shadowroot||At.shadowrootmode)&&(P=gt.call(_,P,!0)),P}let Y=Lt?u.outerHTML:u.innerHTML;return Lt&&Ot["!doctype"]&&u.ownerDocument&&u.ownerDocument.doctype&&u.ownerDocument.doctype.name&&pe(tt,u.ownerDocument.doctype.name)&&(Y="\n"+Y),Bt&&U([vt,bt,_t],(s=>{Y=ie(Y,s," ")})),ct&&zt?ct.createHTML(Y):Y},DOMPurify.setConfig=function(){vr(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}),Ft=!0},DOMPurify.clearConfig=function(){mr=null,Ft=!1},DOMPurify.isValidAttribute=function(s,i,u){mr||vr({});const _=fr(s),w=fr(i);return Tr(_,w,u)},DOMPurify.addHook=function(s,i){"function"==typeof i&&(yt[s]=yt[s]||[],X(yt[s],i))},DOMPurify.removeHook=function(s){if(yt[s])return Y(yt[s])},DOMPurify.removeHooks=function(s){yt[s]&&(yt[s]=[])},DOMPurify.removeAllHooks=function(){yt={}},DOMPurify}return createDOMPurify()}()},64716:s=>{"use strict";class SubRange{constructor(s,i){this.low=s,this.high=i,this.length=1+i-s}overlaps(s){return!(this.highs.high)}touches(s){return!(this.high+1s.high)}add(s){return new SubRange(Math.min(this.low,s.low),Math.max(this.high,s.high))}subtract(s){return s.low<=this.low&&s.high>=this.high?[]:s.low>this.low&&s.highs+i.length),0)}add(s,i){var _add=s=>{for(var i=0;i{for(var i=0;i{for(var i=0;i{for(var u=i.low;u<=i.high;)s.push(u),u++;return s}),[])}subranges(){return this.ranges.map((s=>({low:s.low,high:s.high,length:1+s.high-s.low})))}}s.exports=DRange},84936:s=>{"use strict";var i,u="object"==typeof Reflect?Reflect:null,_=u&&"function"==typeof u.apply?u.apply:function ReflectApply(s,i,u){return Function.prototype.apply.call(s,i,u)};i=u&&"function"==typeof u.ownKeys?u.ownKeys:Object.getOwnPropertySymbols?function ReflectOwnKeys(s){return Object.getOwnPropertyNames(s).concat(Object.getOwnPropertySymbols(s))}:function ReflectOwnKeys(s){return Object.getOwnPropertyNames(s)};var w=Number.isNaN||function NumberIsNaN(s){return s!=s};function EventEmitter(){EventEmitter.init.call(this)}s.exports=EventEmitter,s.exports.once=function once(s,i){return new Promise((function(u,_){function errorListener(u){s.removeListener(i,resolver),_(u)}function resolver(){"function"==typeof s.removeListener&&s.removeListener("error",errorListener),u([].slice.call(arguments))}eventTargetAgnosticAddListener(s,i,resolver,{once:!0}),"error"!==i&&function addErrorHandlerIfEventEmitter(s,i,u){"function"==typeof s.on&&eventTargetAgnosticAddListener(s,"error",i,u)}(s,errorListener,{once:!0})}))},EventEmitter.EventEmitter=EventEmitter,EventEmitter.prototype._events=void 0,EventEmitter.prototype._eventsCount=0,EventEmitter.prototype._maxListeners=void 0;var x=10;function checkListener(s){if("function"!=typeof s)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof s)}function _getMaxListeners(s){return void 0===s._maxListeners?EventEmitter.defaultMaxListeners:s._maxListeners}function _addListener(s,i,u,_){var w,x,j;if(checkListener(u),void 0===(x=s._events)?(x=s._events=Object.create(null),s._eventsCount=0):(void 0!==x.newListener&&(s.emit("newListener",i,u.listener?u.listener:u),x=s._events),j=x[i]),void 0===j)j=x[i]=u,++s._eventsCount;else if("function"==typeof j?j=x[i]=_?[u,j]:[j,u]:_?j.unshift(u):j.push(u),(w=_getMaxListeners(s))>0&&j.length>w&&!j.warned){j.warned=!0;var P=new Error("Possible EventEmitter memory leak detected. "+j.length+" "+String(i)+" listeners added. Use emitter.setMaxListeners() to increase limit");P.name="MaxListenersExceededWarning",P.emitter=s,P.type=i,P.count=j.length,function ProcessEmitWarning(s){console&&console.warn&&console.warn(s)}(P)}return s}function onceWrapper(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function _onceWrap(s,i,u){var _={fired:!1,wrapFn:void 0,target:s,type:i,listener:u},w=onceWrapper.bind(_);return w.listener=u,_.wrapFn=w,w}function _listeners(s,i,u){var _=s._events;if(void 0===_)return[];var w=_[i];return void 0===w?[]:"function"==typeof w?u?[w.listener||w]:[w]:u?function unwrapListeners(s){for(var i=new Array(s.length),u=0;u0&&(j=i[0]),j instanceof Error)throw j;var P=new Error("Unhandled error."+(j?" ("+j.message+")":""));throw P.context=j,P}var B=x[s];if(void 0===B)return!1;if("function"==typeof B)_(B,this,i);else{var $=B.length,U=arrayClone(B,$);for(u=0;u<$;++u)_(U[u],this,i)}return!0},EventEmitter.prototype.addListener=function addListener(s,i){return _addListener(this,s,i,!1)},EventEmitter.prototype.on=EventEmitter.prototype.addListener,EventEmitter.prototype.prependListener=function prependListener(s,i){return _addListener(this,s,i,!0)},EventEmitter.prototype.once=function once(s,i){return checkListener(i),this.on(s,_onceWrap(this,s,i)),this},EventEmitter.prototype.prependOnceListener=function prependOnceListener(s,i){return checkListener(i),this.prependListener(s,_onceWrap(this,s,i)),this},EventEmitter.prototype.removeListener=function removeListener(s,i){var u,_,w,x,j;if(checkListener(i),void 0===(_=this._events))return this;if(void 0===(u=_[s]))return this;if(u===i||u.listener===i)0==--this._eventsCount?this._events=Object.create(null):(delete _[s],_.removeListener&&this.emit("removeListener",s,u.listener||i));else if("function"!=typeof u){for(w=-1,x=u.length-1;x>=0;x--)if(u[x]===i||u[x].listener===i){j=u[x].listener,w=x;break}if(w<0)return this;0===w?u.shift():function spliceOne(s,i){for(;i+1=0;_--)this.removeListener(s,i[_]);return this},EventEmitter.prototype.listeners=function listeners(s){return _listeners(this,s,!0)},EventEmitter.prototype.rawListeners=function rawListeners(s){return _listeners(this,s,!1)},EventEmitter.listenerCount=function(s,i){return"function"==typeof s.listenerCount?s.listenerCount(i):listenerCount.call(s,i)},EventEmitter.prototype.listenerCount=listenerCount,EventEmitter.prototype.eventNames=function eventNames(){return this._eventsCount>0?i(this._events):[]}},98556:(s,i,u)=>{"use strict";var _=u(43016),w=create(Error);function create(s){return FormattedError.displayName=s.displayName||s.name,FormattedError;function FormattedError(i){return i&&(i=_.apply(null,arguments)),new s(i)}}s.exports=w,w.eval=create(EvalError),w.range=create(RangeError),w.reference=create(ReferenceError),w.syntax=create(SyntaxError),w.type=create(TypeError),w.uri=create(URIError),w.create=create},43016:s=>{!function(){var i;function format(s){for(var i,u,_,w,x=1,j=[].slice.call(arguments),P=0,B=s.length,$="",U=!1,Y=!1,nextArg=function(){return j[x++]},slurpNumber=function(){for(var u="";/\d/.test(s[P]);)u+=s[P++],i=s[P];return u.length>0?parseInt(u):null};P{"use strict";var i=Object.prototype.toString,u=Math.max,_=function concatty(s,i){for(var u=[],_=0;_{"use strict";var _=u(97840);s.exports=Function.prototype.bind||_},96604:(s,i,u)=>{"use strict";var _,w=SyntaxError,x=Function,j=TypeError,getEvalledConstructor=function(s){try{return x('"use strict"; return ('+s+").constructor;")()}catch(s){}},P=Object.getOwnPropertyDescriptor;if(P)try{P({},"")}catch(s){P=null}var throwTypeError=function(){throw new j},B=P?function(){try{return throwTypeError}catch(s){try{return P(arguments,"callee").get}catch(s){return throwTypeError}}}():throwTypeError,$=u(24308)(),U=u(37636)(),Y=Object.getPrototypeOf||(U?function(s){return s.__proto__}:null),X={},Z="undefined"!=typeof Uint8Array&&Y?Y(Uint8Array):_,ee={"%AggregateError%":"undefined"==typeof AggregateError?_:AggregateError,"%Array%":Array,"%ArrayBuffer%":"undefined"==typeof ArrayBuffer?_:ArrayBuffer,"%ArrayIteratorPrototype%":$&&Y?Y([][Symbol.iterator]()):_,"%AsyncFromSyncIteratorPrototype%":_,"%AsyncFunction%":X,"%AsyncGenerator%":X,"%AsyncGeneratorFunction%":X,"%AsyncIteratorPrototype%":X,"%Atomics%":"undefined"==typeof Atomics?_:Atomics,"%BigInt%":"undefined"==typeof BigInt?_:BigInt,"%BigInt64Array%":"undefined"==typeof BigInt64Array?_:BigInt64Array,"%BigUint64Array%":"undefined"==typeof BigUint64Array?_:BigUint64Array,"%Boolean%":Boolean,"%DataView%":"undefined"==typeof DataView?_:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":Error,"%eval%":eval,"%EvalError%":EvalError,"%Float32Array%":"undefined"==typeof Float32Array?_:Float32Array,"%Float64Array%":"undefined"==typeof Float64Array?_:Float64Array,"%FinalizationRegistry%":"undefined"==typeof FinalizationRegistry?_:FinalizationRegistry,"%Function%":x,"%GeneratorFunction%":X,"%Int8Array%":"undefined"==typeof Int8Array?_:Int8Array,"%Int16Array%":"undefined"==typeof Int16Array?_:Int16Array,"%Int32Array%":"undefined"==typeof Int32Array?_:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":$&&Y?Y(Y([][Symbol.iterator]())):_,"%JSON%":"object"==typeof JSON?JSON:_,"%Map%":"undefined"==typeof Map?_:Map,"%MapIteratorPrototype%":"undefined"!=typeof Map&&$&&Y?Y((new Map)[Symbol.iterator]()):_,"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":"undefined"==typeof Promise?_:Promise,"%Proxy%":"undefined"==typeof Proxy?_:Proxy,"%RangeError%":RangeError,"%ReferenceError%":ReferenceError,"%Reflect%":"undefined"==typeof Reflect?_:Reflect,"%RegExp%":RegExp,"%Set%":"undefined"==typeof Set?_:Set,"%SetIteratorPrototype%":"undefined"!=typeof Set&&$&&Y?Y((new Set)[Symbol.iterator]()):_,"%SharedArrayBuffer%":"undefined"==typeof SharedArrayBuffer?_:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":$&&Y?Y(""[Symbol.iterator]()):_,"%Symbol%":$?Symbol:_,"%SyntaxError%":w,"%ThrowTypeError%":B,"%TypedArray%":Z,"%TypeError%":j,"%Uint8Array%":"undefined"==typeof Uint8Array?_:Uint8Array,"%Uint8ClampedArray%":"undefined"==typeof Uint8ClampedArray?_:Uint8ClampedArray,"%Uint16Array%":"undefined"==typeof Uint16Array?_:Uint16Array,"%Uint32Array%":"undefined"==typeof Uint32Array?_:Uint32Array,"%URIError%":URIError,"%WeakMap%":"undefined"==typeof WeakMap?_:WeakMap,"%WeakRef%":"undefined"==typeof WeakRef?_:WeakRef,"%WeakSet%":"undefined"==typeof WeakSet?_:WeakSet};if(Y)try{null.error}catch(s){var ae=Y(Y(s));ee["%Error.prototype%"]=ae}var ie=function doEval(s){var i;if("%AsyncFunction%"===s)i=getEvalledConstructor("async function () {}");else if("%GeneratorFunction%"===s)i=getEvalledConstructor("function* () {}");else if("%AsyncGeneratorFunction%"===s)i=getEvalledConstructor("async function* () {}");else if("%AsyncGenerator%"===s){var u=doEval("%AsyncGeneratorFunction%");u&&(i=u.prototype)}else if("%AsyncIteratorPrototype%"===s){var _=doEval("%AsyncGenerator%");_&&Y&&(i=Y(_.prototype))}return ee[s]=i,i},le={"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},ce=u(30268),pe=u(15176),de=ce.call(Function.call,Array.prototype.concat),fe=ce.call(Function.apply,Array.prototype.splice),ye=ce.call(Function.call,String.prototype.replace),be=ce.call(Function.call,String.prototype.slice),_e=ce.call(Function.call,RegExp.prototype.exec),we=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,Se=/\\(\\)?/g,xe=function getBaseIntrinsic(s,i){var u,_=s;if(pe(le,_)&&(_="%"+(u=le[_])[0]+"%"),pe(ee,_)){var x=ee[_];if(x===X&&(x=ie(_)),void 0===x&&!i)throw new j("intrinsic "+s+" exists, but is not available. Please file an issue!");return{alias:u,name:_,value:x}}throw new w("intrinsic "+s+" does not exist!")};s.exports=function GetIntrinsic(s,i){if("string"!=typeof s||0===s.length)throw new j("intrinsic name must be a non-empty string");if(arguments.length>1&&"boolean"!=typeof i)throw new j('"allowMissing" argument must be a boolean');if(null===_e(/^%?[^%]*%?$/,s))throw new w("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var u=function stringToPath(s){var i=be(s,0,1),u=be(s,-1);if("%"===i&&"%"!==u)throw new w("invalid intrinsic syntax, expected closing `%`");if("%"===u&&"%"!==i)throw new w("invalid intrinsic syntax, expected opening `%`");var _=[];return ye(s,we,(function(s,i,u,w){_[_.length]=u?ye(w,Se,"$1"):i||s})),_}(s),_=u.length>0?u[0]:"",x=xe("%"+_+"%",i),B=x.name,$=x.value,U=!1,Y=x.alias;Y&&(_=Y[0],fe(u,de([0,1],Y)));for(var X=1,Z=!0;X=u.length){var ce=P($,ae);$=(Z=!!ce)&&"get"in ce&&!("originalValue"in ce.get)?ce.get:$[ae]}else Z=pe($,ae),$=$[ae];Z&&!U&&(ee[B]=$)}}return $}},80872:(s,i,u)=>{"use strict";var _=u(96604)("%Object.getOwnPropertyDescriptor%",!0);if(_)try{_([],"length")}catch(s){_=null}s.exports=_},71188:(s,i,u)=>{"use strict";var _=u(96604)("%Object.defineProperty%",!0),w=function hasPropertyDescriptors(){if(_)try{return _({},"a",{value:1}),!0}catch(s){return!1}return!1};w.hasArrayLengthDefineBug=function hasArrayLengthDefineBug(){if(!w())return null;try{return 1!==_([],"length",{value:1}).length}catch(s){return!0}},s.exports=w},37636:s=>{"use strict";var i={foo:{}},u=Object;s.exports=function hasProto(){return{__proto__:i}.foo===i.foo&&!({__proto__:null}instanceof u)}},24308:(s,i,u)=>{"use strict";var _="undefined"!=typeof Symbol&&Symbol,w=u(31968);s.exports=function hasNativeSymbols(){return"function"==typeof _&&("function"==typeof Symbol&&("symbol"==typeof _("foo")&&("symbol"==typeof Symbol("bar")&&w())))}},31968:s=>{"use strict";s.exports=function hasSymbols(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var s={},i=Symbol("test"),u=Object(i);if("string"==typeof i)return!1;if("[object Symbol]"!==Object.prototype.toString.call(i))return!1;if("[object Symbol]"!==Object.prototype.toString.call(u))return!1;for(i in s[i]=42,s)return!1;if("function"==typeof Object.keys&&0!==Object.keys(s).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(s).length)return!1;var _=Object.getOwnPropertySymbols(s);if(1!==_.length||_[0]!==i)return!1;if(!Object.prototype.propertyIsEnumerable.call(s,i))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var w=Object.getOwnPropertyDescriptor(s,i);if(42!==w.value||!0!==w.enumerable)return!1}return!0}},15176:(s,i,u)=>{"use strict";var _=Function.prototype.call,w=Object.prototype.hasOwnProperty,x=u(30268);s.exports=x.call(_,w)},4728:s=>{function deepFreeze(s){return s instanceof Map?s.clear=s.delete=s.set=function(){throw new Error("map is read-only")}:s instanceof Set&&(s.add=s.clear=s.delete=function(){throw new Error("set is read-only")}),Object.freeze(s),Object.getOwnPropertyNames(s).forEach((function(i){var u=s[i];"object"!=typeof u||Object.isFrozen(u)||deepFreeze(u)})),s}var i=deepFreeze,u=deepFreeze;i.default=u;class Response{constructor(s){void 0===s.data&&(s.data={}),this.data=s.data,this.isMatchIgnored=!1}ignoreMatch(){this.isMatchIgnored=!0}}function escapeHTML(s){return s.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function inherit(s,...i){const u=Object.create(null);for(const i in s)u[i]=s[i];return i.forEach((function(s){for(const i in s)u[i]=s[i]})),u}const emitsWrappingTags=s=>!!s.kind;class HTMLRenderer{constructor(s,i){this.buffer="",this.classPrefix=i.classPrefix,s.walk(this)}addText(s){this.buffer+=escapeHTML(s)}openNode(s){if(!emitsWrappingTags(s))return;let i=s.kind;s.sublanguage||(i=`${this.classPrefix}${i}`),this.span(i)}closeNode(s){emitsWrappingTags(s)&&(this.buffer+="")}value(){return this.buffer}span(s){this.buffer+=``}}class TokenTree{constructor(){this.rootNode={children:[]},this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(s){this.top.children.push(s)}openNode(s){const i={kind:s,children:[]};this.add(i),this.stack.push(i)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(s){return this.constructor._walk(s,this.rootNode)}static _walk(s,i){return"string"==typeof i?s.addText(i):i.children&&(s.openNode(i),i.children.forEach((i=>this._walk(s,i))),s.closeNode(i)),s}static _collapse(s){"string"!=typeof s&&s.children&&(s.children.every((s=>"string"==typeof s))?s.children=[s.children.join("")]:s.children.forEach((s=>{TokenTree._collapse(s)})))}}class TokenTreeEmitter extends TokenTree{constructor(s){super(),this.options=s}addKeyword(s,i){""!==s&&(this.openNode(i),this.addText(s),this.closeNode())}addText(s){""!==s&&this.add(s)}addSublanguage(s,i){const u=s.root;u.kind=i,u.sublanguage=!0,this.add(u)}toHTML(){return new HTMLRenderer(this,this.options).value()}finalize(){return!0}}function source(s){return s?"string"==typeof s?s:s.source:null}const _=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./;const w="[a-zA-Z]\\w*",x="[a-zA-Z_]\\w*",j="\\b\\d+(\\.\\d+)?",P="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",B="\\b(0b[01]+)",$={begin:"\\\\[\\s\\S]",relevance:0},U={className:"string",begin:"'",end:"'",illegal:"\\n",contains:[$]},Y={className:"string",begin:'"',end:'"',illegal:"\\n",contains:[$]},X={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=function(s,i,u={}){const _=inherit({className:"comment",begin:s,end:i,contains:[]},u);return _.contains.push(X),_.contains.push({className:"doctag",begin:"(?:TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):",relevance:0}),_},Z=COMMENT("//","$"),ee=COMMENT("/\\*","\\*/"),ae=COMMENT("#","$"),ie={className:"number",begin:j,relevance:0},le={className:"number",begin:P,relevance:0},ce={className:"number",begin:B,relevance:0},pe={className:"number",begin:j+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},de={begin:/(?=\/[^/\n]*\/)/,contains:[{className:"regexp",begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[$,{begin:/\[/,end:/\]/,relevance:0,contains:[$]}]}]},fe={className:"title",begin:w,relevance:0},ye={className:"title",begin:x,relevance:0},be={begin:"\\.\\s*"+x,relevance:0};var _e=Object.freeze({__proto__:null,MATCH_NOTHING_RE:/\b\B/,IDENT_RE:w,UNDERSCORE_IDENT_RE:x,NUMBER_RE:j,C_NUMBER_RE:P,BINARY_NUMBER_RE:B,RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",SHEBANG:(s={})=>{const i=/^#![ ]*\//;return s.binary&&(s.begin=function concat(...s){return s.map((s=>source(s))).join("")}(i,/.*\b/,s.binary,/\b.*/)),inherit({className:"meta",begin:i,end:/$/,relevance:0,"on:begin":(s,i)=>{0!==s.index&&i.ignoreMatch()}},s)},BACKSLASH_ESCAPE:$,APOS_STRING_MODE:U,QUOTE_STRING_MODE:Y,PHRASAL_WORDS_MODE:X,COMMENT,C_LINE_COMMENT_MODE:Z,C_BLOCK_COMMENT_MODE:ee,HASH_COMMENT_MODE:ae,NUMBER_MODE:ie,C_NUMBER_MODE:le,BINARY_NUMBER_MODE:ce,CSS_NUMBER_MODE:pe,REGEXP_MODE:de,TITLE_MODE:fe,UNDERSCORE_TITLE_MODE:ye,METHOD_GUARD:be,END_SAME_AS_BEGIN:function(s){return Object.assign(s,{"on:begin":(s,i)=>{i.data._beginMatch=s[1]},"on:end":(s,i)=>{i.data._beginMatch!==s[1]&&i.ignoreMatch()}})}});function skipIfhasPrecedingDot(s,i){"."===s.input[s.index-1]&&i.ignoreMatch()}function beginKeywords(s,i){i&&s.beginKeywords&&(s.begin="\\b("+s.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",s.__beforeBegin=skipIfhasPrecedingDot,s.keywords=s.keywords||s.beginKeywords,delete s.beginKeywords,void 0===s.relevance&&(s.relevance=0))}function compileIllegal(s,i){Array.isArray(s.illegal)&&(s.illegal=function either(...s){return"("+s.map((s=>source(s))).join("|")+")"}(...s.illegal))}function compileMatch(s,i){if(s.match){if(s.begin||s.end)throw new Error("begin & end are not supported with match");s.begin=s.match,delete s.match}}function compileRelevance(s,i){void 0===s.relevance&&(s.relevance=1)}const we=["of","and","for","in","not","or","if","then","parent","list","value"],Se="keyword";function compileKeywords(s,i,u=Se){const _={};return"string"==typeof s?compileList(u,s.split(" ")):Array.isArray(s)?compileList(u,s):Object.keys(s).forEach((function(u){Object.assign(_,compileKeywords(s[u],i,u))})),_;function compileList(s,u){i&&(u=u.map((s=>s.toLowerCase()))),u.forEach((function(i){const u=i.split("|");_[u[0]]=[s,scoreForKeyword(u[0],u[1])]}))}}function scoreForKeyword(s,i){return i?Number(i):function commonKeyword(s){return we.includes(s.toLowerCase())}(s)?0:1}function compileLanguage(s,{plugins:i}){function langRe(i,u){return new RegExp(source(i),"m"+(s.case_insensitive?"i":"")+(u?"g":""))}class MultiRegex{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(s,i){i.position=this.position++,this.matchIndexes[this.matchAt]=i,this.regexes.push([i,s]),this.matchAt+=function countMatchGroups(s){return new RegExp(s.toString()+"|").exec("").length-1}(s)+1}compile(){0===this.regexes.length&&(this.exec=()=>null);const s=this.regexes.map((s=>s[1]));this.matcherRe=langRe(function join(s,i="|"){let u=0;return s.map((s=>{u+=1;const i=u;let w=source(s),x="";for(;w.length>0;){const s=_.exec(w);if(!s){x+=w;break}x+=w.substring(0,s.index),w=w.substring(s.index+s[0].length),"\\"===s[0][0]&&s[1]?x+="\\"+String(Number(s[1])+i):(x+=s[0],"("===s[0]&&u++)}return x})).map((s=>`(${s})`)).join(i)}(s),!0),this.lastIndex=0}exec(s){this.matcherRe.lastIndex=this.lastIndex;const i=this.matcherRe.exec(s);if(!i)return null;const u=i.findIndex(((s,i)=>i>0&&void 0!==s)),_=this.matchIndexes[u];return i.splice(0,u),Object.assign(i,_)}}class ResumableMultiRegex{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(s){if(this.multiRegexes[s])return this.multiRegexes[s];const i=new MultiRegex;return this.rules.slice(s).forEach((([s,u])=>i.addRule(s,u))),i.compile(),this.multiRegexes[s]=i,i}resumingScanAtSamePosition(){return 0!==this.regexIndex}considerAll(){this.regexIndex=0}addRule(s,i){this.rules.push([s,i]),"begin"===i.type&&this.count++}exec(s){const i=this.getMatcher(this.regexIndex);i.lastIndex=this.lastIndex;let u=i.exec(s);if(this.resumingScanAtSamePosition())if(u&&u.index===this.lastIndex);else{const i=this.getMatcher(0);i.lastIndex=this.lastIndex+1,u=i.exec(s)}return u&&(this.regexIndex+=u.position+1,this.regexIndex===this.count&&this.considerAll()),u}}if(s.compilerExtensions||(s.compilerExtensions=[]),s.contains&&s.contains.includes("self"))throw new Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return s.classNameAliases=inherit(s.classNameAliases||{}),function compileMode(i,u){const _=i;if(i.isCompiled)return _;[compileMatch].forEach((s=>s(i,u))),s.compilerExtensions.forEach((s=>s(i,u))),i.__beforeBegin=null,[beginKeywords,compileIllegal,compileRelevance].forEach((s=>s(i,u))),i.isCompiled=!0;let w=null;if("object"==typeof i.keywords&&(w=i.keywords.$pattern,delete i.keywords.$pattern),i.keywords&&(i.keywords=compileKeywords(i.keywords,s.case_insensitive)),i.lexemes&&w)throw new Error("ERR: Prefer `keywords.$pattern` to `mode.lexemes`, BOTH are not allowed. (see mode reference) ");return w=w||i.lexemes||/\w+/,_.keywordPatternRe=langRe(w,!0),u&&(i.begin||(i.begin=/\B|\b/),_.beginRe=langRe(i.begin),i.endSameAsBegin&&(i.end=i.begin),i.end||i.endsWithParent||(i.end=/\B|\b/),i.end&&(_.endRe=langRe(i.end)),_.terminatorEnd=source(i.end)||"",i.endsWithParent&&u.terminatorEnd&&(_.terminatorEnd+=(i.end?"|":"")+u.terminatorEnd)),i.illegal&&(_.illegalRe=langRe(i.illegal)),i.contains||(i.contains=[]),i.contains=[].concat(...i.contains.map((function(s){return function expandOrCloneMode(s){s.variants&&!s.cachedVariants&&(s.cachedVariants=s.variants.map((function(i){return inherit(s,{variants:null},i)})));if(s.cachedVariants)return s.cachedVariants;if(dependencyOnParent(s))return inherit(s,{starts:s.starts?inherit(s.starts):null});if(Object.isFrozen(s))return inherit(s);return s}("self"===s?i:s)}))),i.contains.forEach((function(s){compileMode(s,_)})),i.starts&&compileMode(i.starts,u),_.matcher=function buildModeRegex(s){const i=new ResumableMultiRegex;return s.contains.forEach((s=>i.addRule(s.begin,{rule:s,type:"begin"}))),s.terminatorEnd&&i.addRule(s.terminatorEnd,{type:"end"}),s.illegal&&i.addRule(s.illegal,{type:"illegal"}),i}(_),_}(s)}function dependencyOnParent(s){return!!s&&(s.endsWithParent||dependencyOnParent(s.starts))}function BuildVuePlugin(s){const i={props:["language","code","autodetect"],data:function(){return{detectedLanguage:"",unknownLanguage:!1}},computed:{className(){return this.unknownLanguage?"":"hljs "+this.detectedLanguage},highlighted(){if(!this.autoDetect&&!s.getLanguage(this.language))return console.warn(`The language "${this.language}" you specified could not be found.`),this.unknownLanguage=!0,escapeHTML(this.code);let i={};return this.autoDetect?(i=s.highlightAuto(this.code),this.detectedLanguage=i.language):(i=s.highlight(this.language,this.code,this.ignoreIllegals),this.detectedLanguage=this.language),i.value},autoDetect(){return!this.language||function hasValueOrEmptyAttribute(s){return Boolean(s||""===s)}(this.autodetect)},ignoreIllegals:()=>!0},render(s){return s("pre",{},[s("code",{class:this.className,domProps:{innerHTML:this.highlighted}})])}};return{Component:i,VuePlugin:{install(s){s.component("highlightjs",i)}}}}const xe={"after:highlightElement":({el:s,result:i,text:u})=>{const _=nodeStream(s);if(!_.length)return;const w=document.createElement("div");w.innerHTML=i.value,i.value=function mergeStreams(s,i,u){let _=0,w="";const x=[];function selectStream(){return s.length&&i.length?s[0].offset!==i[0].offset?s[0].offset"}function close(s){w+=""+tag(s)+">"}function render(s){("start"===s.event?open:close)(s.node)}for(;s.length||i.length;){let i=selectStream();if(w+=escapeHTML(u.substring(_,i[0].offset)),_=i[0].offset,i===s){x.reverse().forEach(close);do{render(i.splice(0,1)[0]),i=selectStream()}while(i===s&&i.length&&i[0].offset===_);x.reverse().forEach(open)}else"start"===i[0].event?x.push(i[0].node):x.pop(),render(i.splice(0,1)[0])}return w+escapeHTML(u.substr(_))}(_,nodeStream(w),u)}};function tag(s){return s.nodeName.toLowerCase()}function nodeStream(s){const i=[];return function _nodeStream(s,u){for(let _=s.firstChild;_;_=_.nextSibling)3===_.nodeType?u+=_.nodeValue.length:1===_.nodeType&&(i.push({event:"start",offset:u,node:_}),u=_nodeStream(_,u),tag(_).match(/br|hr|img|input/)||i.push({event:"stop",offset:u,node:_}));return u}(s,0),i}const Pe={},error=s=>{console.error(s)},warn=(s,...i)=>{console.log(`WARN: ${s}`,...i)},deprecated=(s,i)=>{Pe[`${s}/${i}`]||(console.log(`Deprecated as of ${s}. ${i}`),Pe[`${s}/${i}`]=!0)},Te=escapeHTML,Re=inherit,qe=Symbol("nomatch");var $e=function(s){const u=Object.create(null),_=Object.create(null),w=[];let x=!0;const j=/(^(<[^>]+>|\t|)+|\n)/gm,P="Could not find the language '{}', did you forget to load/include a language module?",B={disableAutodetect:!0,name:"Plain text",contains:[]};let $={noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:null,__emitter:TokenTreeEmitter};function shouldNotHighlight(s){return $.noHighlightRe.test(s)}function highlight(s,i,u,_){let w="",x="";"object"==typeof i?(w=s,u=i.ignoreIllegals,x=i.language,_=void 0):(deprecated("10.7.0","highlight(lang, code, ...args) has been deprecated."),deprecated("10.7.0","Please use highlight(code, options) instead.\nhttps://github.com/highlightjs/highlight.js/issues/2277"),x=s,w=i);const j={code:w,language:x};fire("before:highlight",j);const P=j.result?j.result:_highlight(j.language,j.code,u,_);return P.code=j.code,fire("after:highlight",P),P}function _highlight(s,i,_,j){function keywordData(s,i){const u=U.case_insensitive?i[0].toLowerCase():i[0];return Object.prototype.hasOwnProperty.call(s.keywords,u)&&s.keywords[u]}function processBuffer(){null!=Z.subLanguage?function processSubLanguage(){if(""===ie)return;let s=null;if("string"==typeof Z.subLanguage){if(!u[Z.subLanguage])return void ae.addText(ie);s=_highlight(Z.subLanguage,ie,!0,ee[Z.subLanguage]),ee[Z.subLanguage]=s.top}else s=highlightAuto(ie,Z.subLanguage.length?Z.subLanguage:null);Z.relevance>0&&(le+=s.relevance),ae.addSublanguage(s.emitter,s.language)}():function processKeywords(){if(!Z.keywords)return void ae.addText(ie);let s=0;Z.keywordPatternRe.lastIndex=0;let i=Z.keywordPatternRe.exec(ie),u="";for(;i;){u+=ie.substring(s,i.index);const _=keywordData(Z,i);if(_){const[s,w]=_;if(ae.addText(u),u="",le+=w,s.startsWith("_"))u+=i[0];else{const u=U.classNameAliases[s]||s;ae.addKeyword(i[0],u)}}else u+=i[0];s=Z.keywordPatternRe.lastIndex,i=Z.keywordPatternRe.exec(ie)}u+=ie.substr(s),ae.addText(u)}(),ie=""}function startNewMode(s){return s.className&&ae.openNode(U.classNameAliases[s.className]||s.className),Z=Object.create(s,{parent:{value:Z}}),Z}function endOfMode(s,i,u){let _=function startsWith(s,i){const u=s&&s.exec(i);return u&&0===u.index}(s.endRe,u);if(_){if(s["on:end"]){const u=new Response(s);s["on:end"](i,u),u.isMatchIgnored&&(_=!1)}if(_){for(;s.endsParent&&s.parent;)s=s.parent;return s}}if(s.endsWithParent)return endOfMode(s.parent,i,u)}function doIgnore(s){return 0===Z.matcher.regexIndex?(ie+=s[0],1):(de=!0,0)}function doBeginMatch(s){const i=s[0],u=s.rule,_=new Response(u),w=[u.__beforeBegin,u["on:begin"]];for(const u of w)if(u&&(u(s,_),_.isMatchIgnored))return doIgnore(i);return u&&u.endSameAsBegin&&(u.endRe=function escape(s){return new RegExp(s.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),"m")}(i)),u.skip?ie+=i:(u.excludeBegin&&(ie+=i),processBuffer(),u.returnBegin||u.excludeBegin||(ie=i)),startNewMode(u),u.returnBegin?0:i.length}function doEndMatch(s){const u=s[0],_=i.substr(s.index),w=endOfMode(Z,s,_);if(!w)return qe;const x=Z;x.skip?ie+=u:(x.returnEnd||x.excludeEnd||(ie+=u),processBuffer(),x.excludeEnd&&(ie=u));do{Z.className&&ae.closeNode(),Z.skip||Z.subLanguage||(le+=Z.relevance),Z=Z.parent}while(Z!==w.parent);return w.starts&&(w.endSameAsBegin&&(w.starts.endRe=w.endRe),startNewMode(w.starts)),x.returnEnd?0:u.length}let B={};function processLexeme(u,w){const j=w&&w[0];if(ie+=u,null==j)return processBuffer(),0;if("begin"===B.type&&"end"===w.type&&B.index===w.index&&""===j){if(ie+=i.slice(w.index,w.index+1),!x){const i=new Error("0 width match regex");throw i.languageName=s,i.badRule=B.rule,i}return 1}if(B=w,"begin"===w.type)return doBeginMatch(w);if("illegal"===w.type&&!_){const s=new Error('Illegal lexeme "'+j+'" for mode "'+(Z.className||"")+'"');throw s.mode=Z,s}if("end"===w.type){const s=doEndMatch(w);if(s!==qe)return s}if("illegal"===w.type&&""===j)return 1;if(pe>1e5&&pe>3*w.index){throw new Error("potential infinite loop, way more iterations than matches")}return ie+=j,j.length}const U=getLanguage(s);if(!U)throw error(P.replace("{}",s)),new Error('Unknown language: "'+s+'"');const Y=compileLanguage(U,{plugins:w});let X="",Z=j||Y;const ee={},ae=new $.__emitter($);!function processContinuations(){const s=[];for(let i=Z;i!==U;i=i.parent)i.className&&s.unshift(i.className);s.forEach((s=>ae.openNode(s)))}();let ie="",le=0,ce=0,pe=0,de=!1;try{for(Z.matcher.considerAll();;){pe++,de?de=!1:Z.matcher.considerAll(),Z.matcher.lastIndex=ce;const s=Z.matcher.exec(i);if(!s)break;const u=processLexeme(i.substring(ce,s.index),s);ce=s.index+u}return processLexeme(i.substr(ce)),ae.closeAllNodes(),ae.finalize(),X=ae.toHTML(),{relevance:Math.floor(le),value:X,language:s,illegal:!1,emitter:ae,top:Z}}catch(u){if(u.message&&u.message.includes("Illegal"))return{illegal:!0,illegalBy:{msg:u.message,context:i.slice(ce-100,ce+100),mode:u.mode},sofar:X,relevance:0,value:Te(i),emitter:ae};if(x)return{illegal:!1,relevance:0,value:Te(i),emitter:ae,language:s,top:Z,errorRaised:u};throw u}}function highlightAuto(s,i){i=i||$.languages||Object.keys(u);const _=function justTextHighlightResult(s){const i={relevance:0,emitter:new $.__emitter($),value:Te(s),illegal:!1,top:B};return i.emitter.addText(s),i}(s),w=i.filter(getLanguage).filter(autoDetection).map((i=>_highlight(i,s,!1)));w.unshift(_);const x=w.sort(((s,i)=>{if(s.relevance!==i.relevance)return i.relevance-s.relevance;if(s.language&&i.language){if(getLanguage(s.language).supersetOf===i.language)return 1;if(getLanguage(i.language).supersetOf===s.language)return-1}return 0})),[j,P]=x,U=j;return U.second_best=P,U}const U={"before:highlightElement":({el:s})=>{$.useBR&&(s.innerHTML=s.innerHTML.replace(/\n/g,"").replace(/ /g,"\n"))},"after:highlightElement":({result:s})=>{$.useBR&&(s.value=s.value.replace(/\n/g," "))}},Y=/^(<[^>]+>|\t)+/gm,X={"after:highlightElement":({result:s})=>{$.tabReplace&&(s.value=s.value.replace(Y,(s=>s.replace(/\t/g,$.tabReplace))))}};function highlightElement(s){let i=null;const u=function blockLanguage(s){let i=s.className+" ";i+=s.parentNode?s.parentNode.className:"";const u=$.languageDetectRe.exec(i);if(u){const i=getLanguage(u[1]);return i||(warn(P.replace("{}",u[1])),warn("Falling back to no-highlight mode for this block.",s)),i?u[1]:"no-highlight"}return i.split(/\s+/).find((s=>shouldNotHighlight(s)||getLanguage(s)))}(s);if(shouldNotHighlight(u))return;fire("before:highlightElement",{el:s,language:u}),i=s;const w=i.textContent,x=u?highlight(w,{language:u,ignoreIllegals:!0}):highlightAuto(w);fire("after:highlightElement",{el:s,result:x,text:w}),s.innerHTML=x.value,function updateClassName(s,i,u){const w=i?_[i]:u;s.classList.add("hljs"),w&&s.classList.add(w)}(s,u,x.language),s.result={language:x.language,re:x.relevance,relavance:x.relevance},x.second_best&&(s.second_best={language:x.second_best.language,re:x.second_best.relevance,relavance:x.second_best.relevance})}const initHighlighting=()=>{if(initHighlighting.called)return;initHighlighting.called=!0,deprecated("10.6.0","initHighlighting() is deprecated. Use highlightAll() instead.");document.querySelectorAll("pre code").forEach(highlightElement)};let Z=!1;function highlightAll(){if("loading"===document.readyState)return void(Z=!0);document.querySelectorAll("pre code").forEach(highlightElement)}function getLanguage(s){return s=(s||"").toLowerCase(),u[s]||u[_[s]]}function registerAliases(s,{languageName:i}){"string"==typeof s&&(s=[s]),s.forEach((s=>{_[s.toLowerCase()]=i}))}function autoDetection(s){const i=getLanguage(s);return i&&!i.disableAutodetect}function fire(s,i){const u=s;w.forEach((function(s){s[u]&&s[u](i)}))}"undefined"!=typeof window&&window.addEventListener&&window.addEventListener("DOMContentLoaded",(function boot(){Z&&highlightAll()}),!1),Object.assign(s,{highlight,highlightAuto,highlightAll,fixMarkup:function deprecateFixMarkup(s){return deprecated("10.2.0","fixMarkup will be removed entirely in v11.0"),deprecated("10.2.0","Please see https://github.com/highlightjs/highlight.js/issues/2534"),function fixMarkup(s){return $.tabReplace||$.useBR?s.replace(j,(s=>"\n"===s?$.useBR?" ":s:$.tabReplace?s.replace(/\t/g,$.tabReplace):s)):s}(s)},highlightElement,highlightBlock:function deprecateHighlightBlock(s){return deprecated("10.7.0","highlightBlock will be removed entirely in v12.0"),deprecated("10.7.0","Please use highlightElement now."),highlightElement(s)},configure:function configure(s){s.useBR&&(deprecated("10.3.0","'useBR' will be removed entirely in v11.0"),deprecated("10.3.0","Please see https://github.com/highlightjs/highlight.js/issues/2559")),$=Re($,s)},initHighlighting,initHighlightingOnLoad:function initHighlightingOnLoad(){deprecated("10.6.0","initHighlightingOnLoad() is deprecated. Use highlightAll() instead."),Z=!0},registerLanguage:function registerLanguage(i,_){let w=null;try{w=_(s)}catch(s){if(error("Language definition for '{}' could not be registered.".replace("{}",i)),!x)throw s;error(s),w=B}w.name||(w.name=i),u[i]=w,w.rawDefinition=_.bind(null,s),w.aliases&®isterAliases(w.aliases,{languageName:i})},unregisterLanguage:function unregisterLanguage(s){delete u[s];for(const i of Object.keys(_))_[i]===s&&delete _[i]},listLanguages:function listLanguages(){return Object.keys(u)},getLanguage,registerAliases,requireLanguage:function requireLanguage(s){deprecated("10.4.0","requireLanguage will be removed entirely in v11."),deprecated("10.4.0","Please see https://github.com/highlightjs/highlight.js/pull/2844");const i=getLanguage(s);if(i)return i;throw new Error("The '{}' language is required, but not loaded.".replace("{}",s))},autoDetection,inherit:Re,addPlugin:function addPlugin(s){!function upgradePluginAPI(s){s["before:highlightBlock"]&&!s["before:highlightElement"]&&(s["before:highlightElement"]=i=>{s["before:highlightBlock"](Object.assign({block:i.el},i))}),s["after:highlightBlock"]&&!s["after:highlightElement"]&&(s["after:highlightElement"]=i=>{s["after:highlightBlock"](Object.assign({block:i.el},i))})}(s),w.push(s)},vuePlugin:BuildVuePlugin(s).VuePlugin}),s.debugMode=function(){x=!1},s.safeMode=function(){x=!0},s.versionString="10.7.3";for(const s in _e)"object"==typeof _e[s]&&i(_e[s]);return Object.assign(s,_e),s.addPlugin(U),s.addPlugin(xe),s.addPlugin(X),s}({});s.exports=$e},37952:s=>{function concat(...s){return s.map((s=>function source(s){return s?"string"==typeof s?s:s.source:null}(s))).join("")}s.exports=function bash(s){const i={},u={begin:/\$\{/,end:/\}/,contains:["self",{begin:/:-/,contains:[i]}]};Object.assign(i,{className:"variable",variants:[{begin:concat(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},u]});const _={className:"subst",begin:/\$\(/,end:/\)/,contains:[s.BACKSLASH_ESCAPE]},w={begin:/<<-?\s*(?=\w+)/,starts:{contains:[s.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,className:"string"})]}},x={className:"string",begin:/"/,end:/"/,contains:[s.BACKSLASH_ESCAPE,i,_]};_.contains.push(x);const j={begin:/\$\(\(/,end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},s.NUMBER_MODE,i]},P=s.SHEBANG({binary:`(${["fish","bash","zsh","sh","csh","ksh","tcsh","dash","scsh"].join("|")})`,relevance:10}),B={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[s.inherit(s.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{name:"Bash",aliases:["sh","zsh"],keywords:{$pattern:/\b[a-z._-]+\b/,keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp"},contains:[P,s.SHEBANG(),B,j,s.HASH_COMMENT_MODE,w,x,{className:"",begin:/\\"/},{className:"string",begin:/'/,end:/'/},i]}}},56080:s=>{function concat(...s){return s.map((s=>function source(s){return s?"string"==typeof s?s:s.source:null}(s))).join("")}s.exports=function http(s){const i="HTTP/(2|1\\.[01])",u={className:"attribute",begin:concat("^",/[A-Za-z][A-Za-z0-9-]*/,"(?=\\:\\s)"),starts:{contains:[{className:"punctuation",begin:/: /,relevance:0,starts:{end:"$",relevance:0}}]}},_=[u,{begin:"\\n\\n",starts:{subLanguage:[],endsWithParent:!0}}];return{name:"HTTP",aliases:["https"],illegal:/\S/,contains:[{begin:"^(?="+i+" \\d{3})",end:/$/,contains:[{className:"meta",begin:i},{className:"number",begin:"\\b\\d{3}\\b"}],starts:{end:/\b\B/,illegal:/\S/,contains:_}},{begin:"(?=^[A-Z]+ (.*?) "+i+"$)",end:/$/,contains:[{className:"string",begin:" ",end:" ",excludeBegin:!0,excludeEnd:!0},{className:"meta",begin:i},{className:"keyword",begin:"[A-Z]+"}],starts:{end:/\b\B/,illegal:/\S/,contains:_}},s.inherit(u,{relevance:0})]}}},96800:s=>{const i="[A-Za-z$_][0-9A-Za-z$_]*",u=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],_=["true","false","null","undefined","NaN","Infinity"],w=[].concat(["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],["arguments","this","super","console","window","document","localStorage","module","global"],["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer","BigInt64Array","BigUint64Array","BigInt"],["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"]);function lookahead(s){return concat("(?=",s,")")}function concat(...s){return s.map((s=>function source(s){return s?"string"==typeof s?s:s.source:null}(s))).join("")}s.exports=function javascript(s){const x=i,j="<>",P=">",B={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(s,i)=>{const u=s[0].length+s.index,_=s.input[u];"<"!==_?">"===_&&(((s,{after:i})=>{const u=""+s[0].slice(1);return-1!==s.input.indexOf(u,i)})(s,{after:u})||i.ignoreMatch()):i.ignoreMatch()}},$={$pattern:i,keyword:u,literal:_,built_in:w},U="[0-9](_?[0-9])*",Y=`\\.(${U})`,X="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",Z={className:"number",variants:[{begin:`(\\b(${X})((${Y})|\\.)?|(${Y}))[eE][+-]?(${U})\\b`},{begin:`\\b(${X})\\b((${Y})\\b|\\.)?|(${Y})\\b`},{begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{begin:"\\b0[0-7]+n?\\b"}],relevance:0},ee={className:"subst",begin:"\\$\\{",end:"\\}",keywords:$,contains:[]},ae={begin:"html`",end:"",starts:{end:"`",returnEnd:!1,contains:[s.BACKSLASH_ESCAPE,ee],subLanguage:"xml"}},ie={begin:"css`",end:"",starts:{end:"`",returnEnd:!1,contains:[s.BACKSLASH_ESCAPE,ee],subLanguage:"css"}},le={className:"string",begin:"`",end:"`",contains:[s.BACKSLASH_ESCAPE,ee]},ce={className:"comment",variants:[s.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+",contains:[{className:"type",begin:"\\{",end:"\\}",relevance:0},{className:"variable",begin:x+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),s.C_BLOCK_COMMENT_MODE,s.C_LINE_COMMENT_MODE]},pe=[s.APOS_STRING_MODE,s.QUOTE_STRING_MODE,ae,ie,le,Z,s.REGEXP_MODE];ee.contains=pe.concat({begin:/\{/,end:/\}/,keywords:$,contains:["self"].concat(pe)});const de=[].concat(ce,ee.contains),fe=de.concat([{begin:/\(/,end:/\)/,keywords:$,contains:["self"].concat(de)}]),ye={className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:$,contains:fe};return{name:"Javascript",aliases:["js","jsx","mjs","cjs"],keywords:$,exports:{PARAMS_CONTAINS:fe},illegal:/#(?![$_A-z])/,contains:[s.SHEBANG({label:"shebang",binary:"node",relevance:5}),{label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},s.APOS_STRING_MODE,s.QUOTE_STRING_MODE,ae,ie,le,ce,Z,{begin:concat(/[{,\n]\s*/,lookahead(concat(/(((\/\/.*$)|(\/\*(\*[^/]|[^*])*\*\/))\s*)*/,x+"\\s*:"))),relevance:0,contains:[{className:"attr",begin:x+lookahead("\\s*:"),relevance:0}]},{begin:"("+s.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",contains:[ce,s.REGEXP_MODE,{className:"function",begin:"(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+s.UNDERSCORE_IDENT_RE+")\\s*=>",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:s.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:$,contains:fe}]}]},{begin:/,/,relevance:0},{className:"",begin:/\s/,end:/\s*/,skip:!0},{variants:[{begin:j,end:P},{begin:B.begin,"on:begin":B.isTrulyOpeningTag,end:B.end}],subLanguage:"xml",contains:[{begin:B.begin,end:B.end,skip:!0,contains:["self"]}]}],relevance:0},{className:"function",beginKeywords:"function",end:/[{;]/,excludeEnd:!0,keywords:$,contains:["self",s.inherit(s.TITLE_MODE,{begin:x}),ye],illegal:/%/},{beginKeywords:"while if switch catch for"},{className:"function",begin:s.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,contains:[ye,s.inherit(s.TITLE_MODE,{begin:x})]},{variants:[{begin:"\\."+x},{begin:"\\$"+x}],relevance:0},{className:"class",beginKeywords:"class",end:/[{;=]/,excludeEnd:!0,illegal:/[:"[\]]/,contains:[{beginKeywords:"extends"},s.UNDERSCORE_TITLE_MODE]},{begin:/\b(?=constructor)/,end:/[{;]/,excludeEnd:!0,contains:[s.inherit(s.TITLE_MODE,{begin:x}),"self",ye]},{begin:"(get|set)\\s+(?="+x+"\\()",end:/\{/,keywords:"get set",contains:[s.inherit(s.TITLE_MODE,{begin:x}),{begin:/\(\)/},ye]},{begin:/\$[(.]/}]}}},11163:s=>{s.exports=function json(s){const i={literal:"true false null"},u=[s.C_LINE_COMMENT_MODE,s.C_BLOCK_COMMENT_MODE],_=[s.QUOTE_STRING_MODE,s.C_NUMBER_MODE],w={end:",",endsWithParent:!0,excludeEnd:!0,contains:_,keywords:i},x={begin:/\{/,end:/\}/,contains:[{className:"attr",begin:/"/,end:/"/,contains:[s.BACKSLASH_ESCAPE],illegal:"\\n"},s.inherit(w,{begin:/:/})].concat(u),illegal:"\\S"},j={begin:"\\[",end:"\\]",contains:[s.inherit(w)],illegal:"\\S"};return _.push(x,j),u.forEach((function(s){_.push(s)})),{name:"JSON",contains:_,keywords:i,illegal:"\\S"}}},98792:s=>{s.exports=function powershell(s){const i={$pattern:/-?[A-z\.\-]+\b/,keyword:"if else foreach return do while until elseif begin for trap data dynamicparam end break throw param continue finally in switch exit filter try process catch hidden static parameter",built_in:"ac asnp cat cd CFS chdir clc clear clhy cli clp cls clv cnsn compare copy cp cpi cpp curl cvpa dbp del diff dir dnsn ebp echo|0 epal epcsv epsn erase etsn exsn fc fhx fl ft fw gal gbp gc gcb gci gcm gcs gdr gerr ghy gi gin gjb gl gm gmo gp gps gpv group gsn gsnp gsv gtz gu gv gwmi h history icm iex ihy ii ipal ipcsv ipmo ipsn irm ise iwmi iwr kill lp ls man md measure mi mount move mp mv nal ndr ni nmo npssc nsn nv ogv oh popd ps pushd pwd r rbp rcjb rcsn rd rdr ren ri rjb rm rmdir rmo rni rnp rp rsn rsnp rujb rv rvpa rwmi sajb sal saps sasv sbp sc scb select set shcm si sl sleep sls sort sp spjb spps spsv start stz sujb sv swmi tee trcm type wget where wjb write"},u={begin:"`[\\s\\S]",relevance:0},_={className:"variable",variants:[{begin:/\$\B/},{className:"keyword",begin:/\$this/},{begin:/\$[\w\d][\w\d_:]*/}]},w={className:"string",variants:[{begin:/"/,end:/"/},{begin:/@"/,end:/^"@/}],contains:[u,_,{className:"variable",begin:/\$[A-z]/,end:/[^A-z]/}]},x={className:"string",variants:[{begin:/'/,end:/'/},{begin:/@'/,end:/^'@/}]},j=s.inherit(s.COMMENT(null,null),{variants:[{begin:/#/,end:/$/},{begin:/<#/,end:/#>/}],contains:[{className:"doctag",variants:[{begin:/\.(synopsis|description|example|inputs|outputs|notes|link|component|role|functionality)/},{begin:/\.(parameter|forwardhelptargetname|forwardhelpcategory|remotehelprunspace|externalhelp)\s+\S+/}]}]}),P={className:"built_in",variants:[{begin:"(".concat("Add|Clear|Close|Copy|Enter|Exit|Find|Format|Get|Hide|Join|Lock|Move|New|Open|Optimize|Pop|Push|Redo|Remove|Rename|Reset|Resize|Search|Select|Set|Show|Skip|Split|Step|Switch|Undo|Unlock|Watch|Backup|Checkpoint|Compare|Compress|Convert|ConvertFrom|ConvertTo|Dismount|Edit|Expand|Export|Group|Import|Initialize|Limit|Merge|Mount|Out|Publish|Restore|Save|Sync|Unpublish|Update|Approve|Assert|Build|Complete|Confirm|Deny|Deploy|Disable|Enable|Install|Invoke|Register|Request|Restart|Resume|Start|Stop|Submit|Suspend|Uninstall|Unregister|Wait|Debug|Measure|Ping|Repair|Resolve|Test|Trace|Connect|Disconnect|Read|Receive|Send|Write|Block|Grant|Protect|Revoke|Unblock|Unprotect|Use|ForEach|Sort|Tee|Where",")+(-)[\\w\\d]+")}]},B={className:"class",beginKeywords:"class enum",end:/\s*[{]/,excludeEnd:!0,relevance:0,contains:[s.TITLE_MODE]},$={className:"function",begin:/function\s+/,end:/\s*\{|$/,excludeEnd:!0,returnBegin:!0,relevance:0,contains:[{begin:"function",relevance:0,className:"keyword"},{className:"title",begin:/\w[\w\d]*((-)[\w\d]+)*/,relevance:0},{begin:/\(/,end:/\)/,className:"params",relevance:0,contains:[_]}]},U={begin:/using\s/,end:/$/,returnBegin:!0,contains:[w,x,{className:"keyword",begin:/(using|assembly|command|module|namespace|type)/}]},Y={variants:[{className:"operator",begin:"(".concat("-and|-as|-band|-bnot|-bor|-bxor|-casesensitive|-ccontains|-ceq|-cge|-cgt|-cle|-clike|-clt|-cmatch|-cne|-cnotcontains|-cnotlike|-cnotmatch|-contains|-creplace|-csplit|-eq|-exact|-f|-file|-ge|-gt|-icontains|-ieq|-ige|-igt|-ile|-ilike|-ilt|-imatch|-in|-ine|-inotcontains|-inotlike|-inotmatch|-ireplace|-is|-isnot|-isplit|-join|-le|-like|-lt|-match|-ne|-not|-notcontains|-notin|-notlike|-notmatch|-or|-regex|-replace|-shl|-shr|-split|-wildcard|-xor",")\\b")},{className:"literal",begin:/(-)[\w\d]+/,relevance:0}]},X={className:"function",begin:/\[.*\]\s*[\w]+[ ]??\(/,end:/$/,returnBegin:!0,relevance:0,contains:[{className:"keyword",begin:"(".concat(i.keyword.toString().replace(/\s/g,"|"),")\\b"),endsParent:!0,relevance:0},s.inherit(s.TITLE_MODE,{endsParent:!0})]},Z=[X,j,u,s.NUMBER_MODE,w,x,P,_,{className:"literal",begin:/\$(null|true|false)\b/},{className:"selector-tag",begin:/@\B/,relevance:0}],ee={begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[].concat("self",Z,{begin:"("+["string","char","byte","int","long","bool","decimal","single","double","DateTime","xml","array","hashtable","void"].join("|")+")",className:"built_in",relevance:0},{className:"type",begin:/[\.\w\d]+/,relevance:0})};return X.contains.unshift(ee),{name:"PowerShell",aliases:["ps","ps1"],case_insensitive:!0,keywords:i,contains:Z.concat(B,$,U,Y,ee)}}},20960:s=>{function source(s){return s?"string"==typeof s?s:s.source:null}function lookahead(s){return concat("(?=",s,")")}function concat(...s){return s.map((s=>source(s))).join("")}function either(...s){return"("+s.map((s=>source(s))).join("|")+")"}s.exports=function xml(s){const i=concat(/[A-Z_]/,function optional(s){return concat("(",s,")?")}(/[A-Z0-9_.-]*:/),/[A-Z0-9_.-]*/),u={className:"symbol",begin:/&[a-z]+;|[0-9]+;|[a-f0-9]+;/},_={begin:/\s/,contains:[{className:"meta-keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}]},w=s.inherit(_,{begin:/\(/,end:/\)/}),x=s.inherit(s.APOS_STRING_MODE,{className:"meta-string"}),j=s.inherit(s.QUOTE_STRING_MODE,{className:"meta-string"}),P={endsWithParent:!0,illegal:/,relevance:0,contains:[{className:"attr",begin:/[A-Za-z0-9._:-]+/,relevance:0},{begin:/=\s*/,relevance:0,contains:[{className:"string",endsParent:!0,variants:[{begin:/"/,end:/"/,contains:[u]},{begin:/'/,end:/'/,contains:[u]},{begin:/[^\s"'=<>`]+/}]}]}]};return{name:"HTML, XML",aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,contains:[{className:"meta",begin://,relevance:10,contains:[_,j,x,w,{begin:/\[/,end:/\]/,contains:[{className:"meta",begin://,contains:[_,w,j,x]}]}]},s.COMMENT(//,{relevance:10}),{begin://,relevance:10},u,{className:"meta",begin:/<\?xml/,end:/\?>/,relevance:10},{className:"tag",begin:/