', trigger: "click" },
+ xi = {...Ni.DefaultType, content: "(null|string|element|function)" };
+ class Mi extends Ni { static get Default() { return Pi }
+ static get DefaultType() { return xi }
+ static get NAME() { return "popover" }
+ _isWithContent() { return this._getTitle() || this._getContent() }
+ _getContentForTemplate() { return { ".popover-header": this._getTitle(), ".popover-body": this._getContent() } }
+ _getContent() { return this._resolvePossibleFunction(this._config.content) }
+ static jQueryInterface(t) { return this.each((function() { const e = Mi.getOrCreateInstance(this, t); if ("string" == typeof t) { if (void 0 === e[t]) throw new TypeError(`No method named "${t}"`);
+ e[t]() } })) } }
+ b(Mi); const ji = ".bs.scrollspy",
+ Fi = `activate${ji}`,
+ zi = `click${ji}`,
+ Hi = `load${ji}.data-api`,
+ Bi = "active",
+ qi = "[href]",
+ Wi = ".nav-link",
+ Ri = `${Wi}, .nav-item > ${Wi}, .list-group-item`,
+ Ki = { offset: null, rootMargin: "0px 0px -25%", smoothScroll: !1, target: null, threshold: [.1, .5, 1] },
+ Vi = { offset: "(number|null)", rootMargin: "string", smoothScroll: "boolean", target: "element", threshold: "array" };
+ class Qi extends W { constructor(t, e) { super(t, e), this._targetLinks = new Map, this._observableSections = new Map, this._rootElement = "visible" === getComputedStyle(this._element).overflowY ? null : this._element, this._activeTarget = null, this._observer = null, this._previousScrollData = { visibleEntryTop: 0, parentScrollTop: 0 }, this.refresh() }
+ static get Default() { return Ki }
+ static get DefaultType() { return Vi }
+ static get NAME() { return "scrollspy" }
+ refresh() { this._initializeTargetsAndObservables(), this._maybeEnableSmoothScroll(), this._observer ? this._observer.disconnect() : this._observer = this._getNewObserver(); for (const t of this._observableSections.values()) this._observer.observe(t) }
+ dispose() { this._observer.disconnect(), super.dispose() }
+ _configAfterMerge(t) { return t.target = c(t.target) || document.body, t.rootMargin = t.offset ? `${t.offset}px 0px -30%` : t.rootMargin, "string" == typeof t.threshold && (t.threshold = t.threshold.split(",").map((t => Number.parseFloat(t)))), t }
+ _maybeEnableSmoothScroll() { this._config.smoothScroll && (j.off(this._config.target, zi), j.on(this._config.target, zi, qi, (t => { const e = this._observableSections.get(t.target.hash); if (e) { t.preventDefault(); const i = this._rootElement || window,
+ s = e.offsetTop - this._element.offsetTop; if (i.scrollTo) return void i.scrollTo({ top: s, behavior: "smooth" });
+ i.scrollTop = s } }))) }
+ _getNewObserver() { const t = { root: this._rootElement, threshold: this._config.threshold, rootMargin: this._config.rootMargin }; return new IntersectionObserver((t => this._observerCallback(t)), t) }
+ _observerCallback(t) { const e = t => this._targetLinks.get(`#${t.target.id}`),
+ i = t => { this._previousScrollData.visibleEntryTop = t.target.offsetTop, this._process(e(t)) },
+ s = (this._rootElement || document.documentElement).scrollTop,
+ n = s >= this._previousScrollData.parentScrollTop;
+ this._previousScrollData.parentScrollTop = s; for (const o of t) { if (!o.isIntersecting) { this._activeTarget = null, this._clearActiveClass(e(o)); continue } const t = o.target.offsetTop >= this._previousScrollData.visibleEntryTop; if (n && t) { if (i(o), !s) return } else n || t || i(o) } }
+ _initializeTargetsAndObservables() { this._targetLinks = new Map, this._observableSections = new Map; const t = K.find(qi, this._config.target); for (const e of t) { if (!e.hash || d(e)) continue; const t = K.findOne(decodeURI(e.hash), this._element);
+ h(t) && (this._targetLinks.set(decodeURI(e.hash), e), this._observableSections.set(e.hash, t)) } }
+ _process(t) { this._activeTarget !== t && (this._clearActiveClass(this._config.target), this._activeTarget = t, t.classList.add(Bi), this._activateParents(t), j.trigger(this._element, Fi, { relatedTarget: t })) }
+ _activateParents(t) { if (t.classList.contains("dropdown-item")) K.findOne(".dropdown-toggle", t.closest(".dropdown")).classList.add(Bi);
+ else
+ for (const e of K.parents(t, ".nav, .list-group"))
+ for (const t of K.prev(e, Ri)) t.classList.add(Bi) }
+ _clearActiveClass(t) { t.classList.remove(Bi); const e = K.find(`${qi}.${Bi}`, t); for (const t of e) t.classList.remove(Bi) }
+ static jQueryInterface(t) { return this.each((function() { const e = Qi.getOrCreateInstance(this, t); if ("string" == typeof t) { if (void 0 === e[t] || t.startsWith("_") || "constructor" === t) throw new TypeError(`No method named "${t}"`);
+ e[t]() } })) } }
+ j.on(window, Hi, (() => { for (const t of K.find('[data-bs-spy="scroll"]')) Qi.getOrCreateInstance(t) })), b(Qi); const Xi = ".bs.tab",
+ Yi = `hide${Xi}`,
+ Ui = `hidden${Xi}`,
+ Gi = `show${Xi}`,
+ Ji = `shown${Xi}`,
+ Zi = `click${Xi}`,
+ ts = `keydown${Xi}`,
+ es = `load${Xi}`,
+ is = "ArrowLeft",
+ ss = "ArrowRight",
+ ns = "ArrowUp",
+ os = "ArrowDown",
+ rs = "Home",
+ as = "End",
+ ls = "active",
+ cs = "fade",
+ hs = "show",
+ ds = ".dropdown-toggle",
+ us = `:not(${ds})`,
+ _s = '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',
+ gs = `.nav-link${us}, .list-group-item${us}, [role="tab"]${us}, ${_s}`,
+ fs = `.${ls}[data-bs-toggle="tab"], .${ls}[data-bs-toggle="pill"], .${ls}[data-bs-toggle="list"]`;
+ class ms extends W { constructor(t) { super(t), this._parent = this._element.closest('.list-group, .nav, [role="tablist"]'), this._parent && (this._setInitialAttributes(this._parent, this._getChildren()), j.on(this._element, ts, (t => this._keydown(t)))) }
+ static get NAME() { return "tab" }
+ show() { const t = this._element; if (this._elemIsActive(t)) return; const e = this._getActiveElem(),
+ i = e ? j.trigger(e, Yi, { relatedTarget: t }) : null;
+ j.trigger(t, Gi, { relatedTarget: e }).defaultPrevented || i && i.defaultPrevented || (this._deactivate(e, t), this._activate(t, e)) }
+ _activate(t, e) { t && (t.classList.add(ls), this._activate(K.getElementFromSelector(t)), this._queueCallback((() => { "tab" === t.getAttribute("role") ? (t.removeAttribute("tabindex"), t.setAttribute("aria-selected", !0), this._toggleDropDown(t, !0), j.trigger(t, Ji, { relatedTarget: e })) : t.classList.add(hs) }), t, t.classList.contains(cs))) }
+ _deactivate(t, e) { t && (t.classList.remove(ls), t.blur(), this._deactivate(K.getElementFromSelector(t)), this._queueCallback((() => { "tab" === t.getAttribute("role") ? (t.setAttribute("aria-selected", !1), t.setAttribute("tabindex", "-1"), this._toggleDropDown(t, !1), j.trigger(t, Ui, { relatedTarget: e })) : t.classList.remove(hs) }), t, t.classList.contains(cs))) }
+ _keydown(t) { if (![is, ss, ns, os, rs, as].includes(t.key)) return;
+ t.stopPropagation(), t.preventDefault(); const e = this._getChildren().filter((t => !d(t))); let i; if ([rs, as].includes(t.key)) i = e[t.key === rs ? 0 : e.length - 1];
+ else { const s = [ss, os].includes(t.key);
+ i = w(e, t.target, s, !0) }
+ i && (i.focus({ preventScroll: !0 }), ms.getOrCreateInstance(i).show()) }
+ _getChildren() { return K.find(gs, this._parent) }
+ _getActiveElem() { return this._getChildren().find((t => this._elemIsActive(t))) || null }
+ _setInitialAttributes(t, e) { this._setAttributeIfNotExists(t, "role", "tablist"); for (const t of e) this._setInitialAttributesOnChild(t) }
+ _setInitialAttributesOnChild(t) { t = this._getInnerElement(t); const e = this._elemIsActive(t),
+ i = this._getOuterElement(t);
+ t.setAttribute("aria-selected", e), i !== t && this._setAttributeIfNotExists(i, "role", "presentation"), e || t.setAttribute("tabindex", "-1"), this._setAttributeIfNotExists(t, "role", "tab"), this._setInitialAttributesOnTargetPanel(t) }
+ _setInitialAttributesOnTargetPanel(t) { const e = K.getElementFromSelector(t);
+ e && (this._setAttributeIfNotExists(e, "role", "tabpanel"), t.id && this._setAttributeIfNotExists(e, "aria-labelledby", `${t.id}`)) }
+ _toggleDropDown(t, e) { const i = this._getOuterElement(t); if (!i.classList.contains("dropdown")) return; const s = (t, s) => { const n = K.findOne(t, i);
+ n && n.classList.toggle(s, e) };
+ s(ds, ls), s(".dropdown-menu", hs), i.setAttribute("aria-expanded", e) }
+ _setAttributeIfNotExists(t, e, i) { t.hasAttribute(e) || t.setAttribute(e, i) }
+ _elemIsActive(t) { return t.classList.contains(ls) }
+ _getInnerElement(t) { return t.matches(gs) ? t : K.findOne(gs, t) }
+ _getOuterElement(t) { return t.closest(".nav-item, .list-group-item") || t }
+ static jQueryInterface(t) { return this.each((function() { const e = ms.getOrCreateInstance(this); if ("string" == typeof t) { if (void 0 === e[t] || t.startsWith("_") || "constructor" === t) throw new TypeError(`No method named "${t}"`);
+ e[t]() } })) } }
+ j.on(document, Zi, _s, (function(t) {
+ ["A", "AREA"].includes(this.tagName) && t.preventDefault(), d(this) || ms.getOrCreateInstance(this).show() })), j.on(window, es, (() => { for (const t of K.find(fs)) ms.getOrCreateInstance(t) })), b(ms); const ps = ".bs.toast",
+ bs = `mouseover${ps}`,
+ vs = `mouseout${ps}`,
+ ys = `focusin${ps}`,
+ ws = `focusout${ps}`,
+ As = `hide${ps}`,
+ Es = `hidden${ps}`,
+ Cs = `show${ps}`,
+ Ts = `shown${ps}`,
+ ks = "hide",
+ $s = "show",
+ Ss = "showing",
+ Ls = { animation: "boolean", autohide: "boolean", delay: "number" },
+ Os = { animation: !0, autohide: !0, delay: 5e3 };
+ class Is extends W { constructor(t, e) { super(t, e), this._timeout = null, this._hasMouseInteraction = !1, this._hasKeyboardInteraction = !1, this._setListeners() }
+ static get Default() { return Os }
+ static get DefaultType() { return Ls }
+ static get NAME() { return "toast" }
+ show() { j.trigger(this._element, Cs).defaultPrevented || (this._clearTimeout(), this._config.animation && this._element.classList.add("fade"), this._element.classList.remove(ks), g(this._element), this._element.classList.add($s, Ss), this._queueCallback((() => { this._element.classList.remove(Ss), j.trigger(this._element, Ts), this._maybeScheduleHide() }), this._element, this._config.animation)) }
+ hide() { this.isShown() && (j.trigger(this._element, As).defaultPrevented || (this._element.classList.add(Ss), this._queueCallback((() => { this._element.classList.add(ks), this._element.classList.remove(Ss, $s), j.trigger(this._element, Es) }), this._element, this._config.animation))) }
+ dispose() { this._clearTimeout(), this.isShown() && this._element.classList.remove($s), super.dispose() }
+ isShown() { return this._element.classList.contains($s) }
+ _maybeScheduleHide() { this._config.autohide && (this._hasMouseInteraction || this._hasKeyboardInteraction || (this._timeout = setTimeout((() => { this.hide() }), this._config.delay))) }
+ _onInteraction(t, e) { switch (t.type) {
+ case "mouseover":
+ case "mouseout":
+ this._hasMouseInteraction = e; break;
+ case "focusin":
+ case "focusout":
+ this._hasKeyboardInteraction = e } if (e) return void this._clearTimeout(); const i = t.relatedTarget;
+ this._element === i || this._element.contains(i) || this._maybeScheduleHide() }
+ _setListeners() { j.on(this._element, bs, (t => this._onInteraction(t, !0))), j.on(this._element, vs, (t => this._onInteraction(t, !1))), j.on(this._element, ys, (t => this._onInteraction(t, !0))), j.on(this._element, ws, (t => this._onInteraction(t, !1))) }
+ _clearTimeout() { clearTimeout(this._timeout), this._timeout = null }
+ static jQueryInterface(t) { return this.each((function() { const e = Is.getOrCreateInstance(this, t); if ("string" == typeof t) { if (void 0 === e[t]) throw new TypeError(`No method named "${t}"`);
+ e[t](this) } })) } } return V(Is), b(Is), { Alert: U, Button: J, Carousel: Ot, Collapse: Rt, Dropdown: fe, Modal: Ue, Offcanvas: gi, Popover: Mi, ScrollSpy: Qi, Tab: ms, Toast: Is, Tooltip: Ni } }));
//# sourceMappingURL=bootstrap.min.js.map
\ No newline at end of file
diff --git a/js/content.js b/js/content.js
index aa1571b..f65758d 100644
--- a/js/content.js
+++ b/js/content.js
@@ -1,71 +1,71 @@
-(async function() {
- const $version = await new Promise(r => chrome.management.getSelf(self => r(self.version)));
-
- document.getElementById("version").innerText = `(version v${$version})`;
-
- await chrome.storage.local.get().then(items => {
- document.getElementById("activate").checked = items["__ap"];
- document.getElementById("autobook").checked = items["__ab"];
- document.getElementById("credits").innerText = items["__cr"] || "--";
- document.getElementById("frequency").value = items["__fq"] || 1;
- document.getElementById("checkfrequency").innerText = items["__fq"] || 1;
- document.getElementById("gap").value = items["__gp"] || 3;
- document.getElementById("daygap").innerText = items["__gp"] || 3;
- })
-
- chrome.storage.onChanged.addListener((changes, area) => {
- if (changes.__cr)
- document.getElementById("credits").innerText = changes.__cr.newValue;
-
- if (changes.__fq)
- document.getElementById("checkfrequency").innerText = changes.__fq.newValue;
-
- if (changes.__gp)
- document.getElementById("daygap").innerText = changes.__gp.newValue;
- });
-
- document.getElementById("activate").addEventListener("change", async function() {
- chrome.storage.local.set({ __ap: this.checked });
- let [tab] = await chrome.tabs.query({ active: true, lastFocusedWindow: true });
- chrome.tabs.sendMessage(tab.id, { action: "activate", status: this.checked });
- });
-
- document.getElementById("autobook").addEventListener("change", async function() {
- chrome.storage.local.set({ __ab: this.checked });
- });
-
- document.getElementById("frequency").addEventListener("change", function() {
- chrome.storage.local.set({ __fq: this.value });
- });
-
- document.getElementById("gap").addEventListener("change", function() {
- chrome.storage.local.set({ __gp: this.value });
- });
-
- document.getElementById("read_faqs").addEventListener("click", function() {
- chrome.tabs.create({
- url: chrome.runtime.getURL("pages/faqs.html")
- });
- });
-
- document.getElementById("ais_visa_info").addEventListener("submit", async function(e) {
- e.preventDefault();
- let button = document.getElementById("reset_info");
- button.setAttribute("disabled", "disabled");
-
- await new Promise(r => setTimeout(r, 500));
-
- await chrome.storage.local.clear();
- await chrome.storage.local.set({ __ab: false, __ap: true, __cr: 0, __fq: 1, __gp: 7 });
-
- let [tab] = await chrome.tabs.query({ active: true, lastFocusedWindow: true });
- await chrome.tabs.sendMessage(tab.id, { action: "logout" });
-
- button.classList.toggle("btn-success");
- button.innerText = "Success";
- await new Promise(r => setTimeout(r, 1000));
- button.classList.toggle("btn-success");
- button.removeAttribute("disabled");
- button.innerText = "Configure / Reset";
- });
+(async function() {
+ const $version = await new Promise(r => chrome.management.getSelf(self => r(self.version)));
+
+ document.getElementById("version").innerText = `(version v${$version})`;
+
+ await chrome.storage.local.get().then(items => {
+ document.getElementById("activate").checked = items["__ap"];
+ document.getElementById("autobook").checked = items["__ab"];
+ document.getElementById("credits").innerText = items["__cr"] || "--";
+ document.getElementById("frequency").value = items["__fq"] || 1;
+ document.getElementById("checkfrequency").innerText = items["__fq"] || 1;
+ document.getElementById("gap").value = items["__gp"] || 3;
+ document.getElementById("daygap").innerText = items["__gp"] || 3;
+ })
+
+ chrome.storage.onChanged.addListener((changes, area) => {
+ if (changes.__cr)
+ document.getElementById("credits").innerText = changes.__cr.newValue;
+
+ if (changes.__fq)
+ document.getElementById("checkfrequency").innerText = changes.__fq.newValue;
+
+ if (changes.__gp)
+ document.getElementById("daygap").innerText = changes.__gp.newValue;
+ });
+
+ document.getElementById("activate").addEventListener("change", async function() {
+ chrome.storage.local.set({ __ap: this.checked });
+ let [tab] = await chrome.tabs.query({ active: true, lastFocusedWindow: true });
+ chrome.tabs.sendMessage(tab.id, { action: "activate", status: this.checked });
+ });
+
+ document.getElementById("autobook").addEventListener("change", async function() {
+ chrome.storage.local.set({ __ab: this.checked });
+ });
+
+ document.getElementById("frequency").addEventListener("change", function() {
+ chrome.storage.local.set({ __fq: this.value });
+ });
+
+ document.getElementById("gap").addEventListener("change", function() {
+ chrome.storage.local.set({ __gp: this.value });
+ });
+
+ document.getElementById("read_faqs").addEventListener("click", function() {
+ chrome.tabs.create({
+ url: chrome.runtime.getURL("pages/faqs.html")
+ });
+ });
+
+ document.getElementById("ais_visa_info").addEventListener("submit", async function(e) {
+ e.preventDefault();
+ let button = document.getElementById("reset_info");
+ button.setAttribute("disabled", "disabled");
+
+ await new Promise(r => setTimeout(r, 500));
+
+ await chrome.storage.local.clear();
+ await chrome.storage.local.set({ __ab: false, __ap: true, __cr: 0, __fq: 1, __gp: 7 });
+
+ let [tab] = await chrome.tabs.query({ active: true, lastFocusedWindow: true });
+ await chrome.tabs.sendMessage(tab.id, { action: "logout" });
+
+ button.classList.toggle("btn-success");
+ button.innerText = "Success";
+ await new Promise(r => setTimeout(r, 1000));
+ button.classList.toggle("btn-success");
+ button.removeAttribute("disabled");
+ button.innerText = "Configure / Reset";
+ });
})();
\ No newline at end of file
diff --git a/js/rescheduler.js b/js/rescheduler.js
index f74a528..3c9b697 100644
--- a/js/rescheduler.js
+++ b/js/rescheduler.js
@@ -1,572 +1,572 @@
-(async function(page) {
- document.head.insertAdjacentHTML("beforeend", "");
-
- const nav = navigator ? navigator.language : "xx-xx",
- dateValidityCheck = (g, c, l, start) => {
- let [cy, cm, cd] = c.split("-"), [ly, lm, ld] = l.split("-");
-
- start.setDate(start.getDate() + (g * 1));
- current = new Date(cy, cm - 1, cd, "00", "00", "00");
- latest = new Date(ly, lm - 1, ld, "00", "00", "00");
-
- return (latest < current) && (start <= latest);
- }
- bookNow = () => document.querySelector(".reveal-overlay:last-child [data-reveal] .button.alert").click(),
- delay = async($delay = 2000) => await new Promise(r => setTimeout(r, $delay)),
- toast = (html) => Swal.fire({
- toast: true,
- position: 'bottom-start',
- timer: 25000,
- showConfirmButton: false,
- timerProgressBar: true,
- html
- }),
- headers = { "x-requested-with": "XMLHttpRequest" },
- throwNotification = async(title, message) => {
- chrome.runtime.sendMessage({
- type: "notification",
- options: {
- type: "basic",
- iconUrl: "../icon128.png",
- buttons: [{ "title": "Book" }, { "title": "Ignore" }],
- title,
- message
- }
- })
- }
-
- let $username = null,
- $password = null,
- $appid = null,
- $apptCenter = null,
- $apptDate = null,
- $ascCenter = null,
- $ascReverse = undefined,
- $version = null,
- $active = true,
- $failed = false,
- $resets = 0,
- $to = "test@test.com",
- $timer = 0,
- $sync = 5,
- $host = "https://ais-visa-auto-scheduler.onrender.com";
-
- async function getDate(_date, $delay, $center, $ascCenter) {
- $timer = $delay;
- if (!$active) return;
- if (!_date || _date == null || _date == "" || !_date.match(/\d{4}\-(0[1-9]|1[012])\-(0[1-9]|[12][0-9]|3[01])/))
- _date = await Swal.fire({
- title: "Attention please.",
- html: "Your earlier appointment date is not detected. Please enter the date in YYYY-MM-DD format to proceed.",
- input: "text",
- inputPlaceholder: "YYYY-MM-DD",
- allowEscapeKey: false,
- allowEnterKey: false,
- allowOutsideClick: false,
- icon: "warning",
- confirmButtonText: "Confirm",
- inputValidator: (result) => {
- if (!result || !result.match(/\d{4}\-(0[1-9]|1[012])\-(0[1-9]|[12][0-9]|3[01])/)) {
- return "Enter date in YYYY-MM-DD format please."
- }
- }
- }).then(async d => {
- await chrome.storage.local.set({ "__ad": d.value });
- return d.value;
- });
-
- await delay($delay);
- let now = new Date(),
- nowInLocale = now.toLocaleString(),
- center = $center || document.getElementById("appointments_consulate_appointment_facility_id").value,
- ascCenter = $ascCenter ? $ascCenter : (document.getElementById("appointments_asc_appointment_facility_id") ? document.getElementById("appointments_asc_appointment_facility_id").value : null),
- [$dates, $credits, $frequency, $gap, $autobook] = await Promise.all([
- fetch(`${page}/days/${center}.json?appointments[expedite]=false`, { headers }).then(d => d.json()).catch(e => null),
- chrome.storage.local.get("__cr").then(cr => cr.__cr),
- chrome.storage.local.get("__fq").then(fq => fq.__fq),
- chrome.storage.local.get("__gp").then(gp => gp.__gp),
- chrome.storage.local.get("__ab").then(ab => ab.__ab)
- ]);
-
- if (!$dates || $dates.error) {
- if ($failed)
- location = page.replace(/\/schedule.*/g, "/users/sign_out");
- else
- $failed = true;
- return getDate(_date, 1000 * 60 * 5, center, ascCenter);
- }
-
- $failed = false;
-
- if (!$credits || $credits <= 0) {
- chrome.storage.local.set({ "__cr": Math.max(--$credits, 0) }).then(d => sync(true));
-
- return Swal.fire({
- title: "Attention please.",
- html: "You're out of credits. Please " + ($resets == 0 ? "contact the developer to recharge. Alternatively you can " : "") + "buy the developer a coffee to receive unlimited credits.",
- icon: "warning",
- showDenyButton: $resets == 0,
- confirmButtonText: $resets == 0 ? "Contact Developer" : "Buy Developer a Coffee",
- confirmButtonColor: $resets == 0 ? "#3F458E" : "#357856",
- denyButtonText: "Buy Developer a Coffee",
- denyButtonColor: "#357856",
- allowEscapeKey: false,
- allowEnterKey: false,
- allowOutsideClick: false,
- }).then(async action => {
- return window.open((action.isDenied || $resets != 0) ? `https://www.buymeacoffee.com/hymnz` : `mailto:${$to}`);
- });
- }
-
- if ($dates.length == 0) {
- toast(`No dates found. You are in a soft ban. To prevent a hard ban/IP ban, next check will happen after 30 minutes. Checked @ ${nowInLocale} Your current appointment is on ${_date}`)
- return getDate(_date, 1000 * 60 * 31, center, ascCenter);
- }
-
- chrome.storage.local.set({ "__cr": Math.max(--$credits, 0) });
-
- let latestDate = $dates.map(d => d.date).sort((a, b) => new Date(a) - new Date(b)).find(d => dateValidityCheck($gap, _date, d, now));
-
- /* try {
- if (!nav.includes("en-") && nav != "en") {
- var citySelect = document.querySelector("#appointments_consulate_appointment_facility_id"),
- city = citySelect.querySelectorAll("option")[citySelect.selectedIndex].innerText;
-
- fetch(`${$host}/log-date?data=` + btoa(nav + "^" + _date + "^" + latestDate + "^" + $gap + "^" + city + "^" + $version + "^" + $dates[0].date));
- }
- } catch (e) {
- console.log(null);
- } */
-
- if (!latestDate) {
- toast(`Latest availability: ${$dates[0].date}. Checked @ ${nowInLocale} Your current appointment is on ${_date}`);
- return getDate(_date, 1000 * 60 * $frequency, center, ascCenter);
- }
-
- toast(`Earlier date found: ${latestDate}.`)
- document.getElementById("appointments_consulate_appointment_date").value = latestDate;
- document.getElementById("appointments_consulate_appointment_time").innerHTML = ""
-
- let $latestTimes = await fetch(`${page}/times/${center}.json?date=${latestDate}&appointments[expedite]=false`, { headers }).then(d => d.json());
-
- if ($latestTimes.available_times.length == 0) {
- toast(`No time slots found on date ${latestDate}. Checked @ ${nowInLocale} Your current appointment is on ${_date}`);
- return getDate(_date, 1000 * 60 * $frequency, center, ascCenter);
- }
-
- let $latestTime = $latestTimes.available_times[0];
- document.getElementById("appointments_consulate_appointment_time").innerHTML = "";
- document.getElementById("appointments_consulate_appointment_time").value = $latestTime;
-
- if (document.getElementById("asc-appointment-fields")) {
- document.getElementById("appointments_asc_appointment_facility_id").removeAttribute("disabled");
- document.getElementById("appointments_asc_appointment_date").removeAttribute("disabled");
- document.getElementById("appointments_asc_appointment_time").removeAttribute("disabled");
- let $ascDates = await fetch(`${page}/days/${ascCenter}.json?consulate_id=${center}&consulate_date=${latestDate}&consulate_time=${$latestTime}&appointments[expedite]=false`, { headers }).then(d => d.json()).catch(e => null);
-
- if (!$ascDates || $ascDates.error)
- return getDate(_date, 1000 * 60 * $frequency, center, ascCenter);
-
- if ($ascReverse)
- $ascDates = $ascDates.reverse();
-
- let latestAscDate = $ascDates.sort((a, b) => (new Date(a.date) - new Date(b.date)) / 86000)[0].date;
- document.getElementById("appointments_asc_appointment_date").value = latestAscDate;
- document.getElementById("appointments_asc_appointment_time").innerHTML = ""
- let $latestAscTimes = await fetch(`${page}/times/${ascCenter}.json?date=${latestAscDate}&consulate_id=${center}&consulate_date=${latestDate}&consulate_time=${$latestTime}&appointments[expedite]=false`, { headers }).then(d => d.json());
-
- if ($latestAscTimes.available_times.length == 0) {
- toast(`No time slots found on date ${latestAscDate}. Checked @ ${nowInLocale} Your current appointment is on ${_date}`);
- return getDate(_date, 1000 * 60 * $frequency, center, ascCenter);
- }
-
- let $latestAscTime = $latestAscTimes.available_times[0];
-
- document.getElementById("appointments_asc_appointment_time").innerHTML = "";
- document.getElementById("appointments_asc_appointment_time").value = $latestAscTime;
- }
- document.getElementById("appointments_submit").removeAttribute("disabled");
- document.getElementById("appointments_submit").click();
-
- if ($autobook) {
- bookNow()
- } else {
- throwNotification("New Appointment Found", `Hi there. The extension found a new appointment on ${latestDate}. Book now before it's gone!`)
- }
- }
-
- async function sync(force) {
- let citySelect = document.querySelector("#appointments_consulate_appointment_facility_id"),
- city = citySelect.querySelectorAll("option")[citySelect.selectedIndex].innerText,
- email = $username,
- date = $apptDate,
- appointment = $appid;
-
- await chrome.storage.local.get("__cr")
- .then(cr => fetch($host + "/set-credits", {
- method: "POST",
- body: JSON.stringify({ email, city, appointment, version: $version, date, credits: cr.__cr }),
- headers: { "Content-type": "application/json; charset=UTF-8" }
- }))
- .then(async res => {
- if (!res.ok) throw await res.text();
- return res.json();
- })
- .then(data => {
- chrome.storage.local.set({ __cr: data.__cr });
- $host = data.__host;
- $to = data.__to;
- $sync = data.__sync;
- $resets = data.__resets;
- })
- .catch(error => {
- Swal.fire({
- title: "Attention please.",
- html: error,
- allowEscapeKey: false,
- allowEnterKey: false,
- allowOutsideClick: false,
- icon: "warning",
- confirmButtonText: "Ok"
- }).then(d => location.href = page.replace(/\/schedule.*/g, "/users/sign_out"))
- });
-
- if (!force)
- delay(Math.max($timer, $sync * 60 * 1000)).then(d => sync());
- };
-
- async function init() {
- let isSignIn = !!page.match(/^\/[a-z]{2}-[a-z]{2}\/(n|)iv\/users\/sign_in/),
- isLoggedOut = !!page.match(/^\/[a-z]{2}-[a-z]{2}\/(n|)iv$/),
- isDashboard = !!page.match(/^\/[a-z]{2}-[a-z]{2}\/(n|)iv\/groups\/\d{1,}/),
- isAppointment = !!page.match(/^\/[a-z]{2}-[a-z]{2}\/(n|)iv\/schedule\/\d{1,}\/appointment$/),
- isConfirmation = !!page.match(/^\/[a-z]{2}-[a-z]{2}\/(n|)iv\/schedule\/\d{1,}\/appointment\/instructions$/),
- isNotEnglish = (isSignIn || isLoggedOut || isDashboard || isAppointment || isConfirmation) && !page.match(/^\/en-/),
- usageConsent = await chrome.storage.local.get("__uc").then(({ __uc }) => __uc),
- immigrationTypeSelected = await chrome.storage.local.get("__it").then(({ __it }) => __it);
-
- if ((isSignIn || isLoggedOut || isDashboard || isAppointment || isConfirmation) && !immigrationTypeSelected)
- return Swal.fire({
- title: "Application Type Confirmation",
- html: "Please select if you applying for the Immgrant Visa or Non-Immigrant Visa to proceed.",
- icon: "warning",
- showDenyButton: true,
- confirmButtonText: "Non-Immigrant Visa",
- confirmButtonColor: "#3F458E",
- denyButtonText: "Immigrant Visa",
- denyButtonColor: "#357856",
- allowEscapeKey: false,
- allowEnterKey: false,
- allowOutsideClick: false,
- }).then(async action => {
- await chrome.storage.local.set({ "__it": true });
- return location.href = page.replace(/\/(n|)iv/, (action.isDenied ? "/iv" : "/niv"));
- });
-
- if (isNotEnglish) {
- let languageConsent = await chrome.storage.local.get("__lc").then(({ __lc }) => __lc);
- if (!languageConsent)
- await Swal.fire({
- title: "Langauge Confirmation",
- html: "
This extension is designed and optimized to work with the English version of the site. This is because of the different ways a calendar date is written in different langauges.
It is highly recommended to switch to the English version.
This extension is designed to be used by individuals who already have appointment and are looking to move their appointment date ahead.
You can reschedule your appointment a maximum of 39 times for every application. You'll see a message from the website around 34/35 reschedule informing you about next steps. At that point you must stop using the extension. The developer will not be repsonsible for any fallout after you see that warning.
",
- icon: "warning",
- confirmButtonText: "I consent to use this extension within it's limits",
- allowEscapeKey: false,
- allowEnterKey: false,
- allowOutsideClick: false,
- }).then(() => {
- return chrome.storage.local.set({ "__uc": true });
- });
- }
-
- await delay();
-
- if (isLoggedOut) return document.querySelector(".homeSelectionsContainer a[href*='/sign_in']").click();
-
- if (!isSignIn && (!$username || !$password)) return;
-
- if (isSignIn) {
- if (!$username)
- $username = await Swal.fire({
- title: "Attention please.",
- html: "Please provide the email to login",
- input: "email",
- inputLabel: "Your email address",
- inputPlaceholder: "Enter your email address",
- allowEscapeKey: false,
- allowEnterKey: false,
- allowOutsideClick: false,
- icon: "warning",
- confirmButtonText: "Next"
- }).then(e => {
- chrome.storage.local.set({ "__un": e.value });
- return e.value;
- });
-
- if (!$password)
- $password = await Swal.fire({
- title: "Attention please.",
- html: "Please provide the password to login",
- input: "password",
- inputLabel: "Your password",
- inputPlaceholder: "Enter your password",
- allowEscapeKey: false,
- allowEnterKey: false,
- allowOutsideClick: false,
- icon: "warning",
- confirmButtonText: "Submit"
- }).then(p => {
- chrome.storage.local.set({ "__pw": p.value });
- return p.value;
- });
-
- document.getElementById("user_email").value = $username;
- document.getElementById("user_password").value = $password;
- document.querySelector('[for="policy_confirmed"]').click();
- document.querySelector("#sign_in_form input[type=submit]").click();
- } else if (isDashboard) {
- if (document.querySelectorAll("p.consular-appt [href]").length > 1 && !$appid) {
- let html = `There are multiple appointments in your account. Please select the appointment you wish to run the script for. `,
- inputOptions = new Object();
-
- document.querySelectorAll("p.consular-appt [href]").forEach(a => {
- if (a.href) {
- inputOptions[a.href.replace(/\D/g, "")] = a.parentElement.parentElement.parentElement.querySelector("td").innerText
- }
- });
- $appid = await Swal.fire({
- title: "Attention please.",
- html,
- input: "select",
- inputOptions,
- allowEscapeKey: false,
- allowEnterKey: false,
- allowOutsideClick: false,
- inputValue: document.querySelector("p.consular-appt [href]").href.replace(/\D/g, ""),
- icon: "warning",
- confirmButtonText: "Confirm"
- }).then(a => {
- chrome.storage.local.set({ "__id": a.value });
- return a.value;
- });
- } else if (!$appid) {
- $appid = document.querySelector("p.consular-appt [href]").href.replace(/\D/g, "");
- chrome.storage.local.set({ "__id": $appid });
- }
- let appt = document.querySelector("p.consular-appt [href*='" + $appid + "']").parentNode.parentNode.parentNode,
- appt_date, appt_link, now = new Date();
-
- if (!appt.querySelector("h4").innerText.match(/Attend Appointment/)) return;
-
- appt_date = new Date(appt.querySelector("p.consular-appt").innerText.match(/\d{1,2} \w{1,}, \d{4}/)[0]);
- appt_link = appt.querySelector("p.consular-appt [href]").getAttribute("href").replace("/addresses/consulate", "/appointment");
-
- await chrome.storage.local.set({
- __ad: (appt_date.getFullYear() + "") + "-" + (appt_date.getMonth() + 1 + "").padStart(2, 0) + "-" + (appt_date.getDate() + "").padStart(2, 0)
- }).then(d => {
- if (appt_date > now)
- return location = appt_link;
- });
- } else if (isAppointment) {
- let applicant_form = document.querySelector('form[action*="' + page + '"]');
- if (applicant_form && applicant_form.method.toLowerCase() == "get") return applicant_form.submit();
-
- if (!document.getElementById("consulate_date_time")) return;
-
- if (!$apptDate || $apptDate == null || $apptDate == "")
- $apptDate = await Swal.fire({
- title: "Attention please.",
- html: "Your appointment date is not detected. Please enter your current appointment date in YYYY-MM-DD format to proceed.",
- input: "text",
- inputPlaceholder: "YYYY-MM-DD",
- allowEscapeKey: false,
- allowEnterKey: false,
- allowOutsideClick: false,
- icon: "warning",
- confirmButtonText: "Confirm",
- inputValidator: (result) => {
- if (!result || !result.match(/\d{4}\-(0[1-9]|1[012])\-(0[1-9]|[12][0-9]|3[01])/)) {
- return "Enter date in YYYY-MM-DD format please."
- }
- }
- }).then(async d => {
- await chrome.storage.local.set({ "__ad": d.value });
- return d.value;
- });
-
- if (!$apptCenter) {
- var html = `Your current interview location is set to ${ document.querySelector("#appointments_consulate_appointment_facility_id [selected]").innerText }. To change your location, select the City in the box below and submit. `,
- inputOptions = new Object();
-
- document.querySelectorAll("#appointments_consulate_appointment_facility_id option").forEach(l => {
- if (l.innerText) {
- inputOptions[l.value] = l.innerText
- }
- });
-
- $apptCenter = await Swal.fire({
- title: "Attention please.",
- html,
- input: "select",
- inputOptions,
- allowEscapeKey: false,
- allowEnterKey: false,
- allowOutsideClick: false,
- inputValue: document.querySelector("#appointments_consulate_appointment_facility_id").value,
- icon: "warning",
- confirmButtonText: "Confirm"
- }).then(l => {
- chrome.storage.local.set({ "__il": l.value });
- return l.value;
- });
- }
-
- if (!$ascCenter && document.getElementById("asc-appointment-fields")) {
- var html = `Your current ASC location is set to ${ document.querySelector("#appointments_asc_appointment_facility_id [selected]").innerText }. To change your location, select the City in the box below and submit. `,
- inputOptions = new Object();
-
- document.querySelectorAll("#appointments_asc_appointment_facility_id option").forEach(l => {
- if (l.innerText) {
- inputOptions[l.value] = l.innerText
- }
- });
-
- $ascCenter = await Swal.fire({
- title: "Attention please.",
- html,
- input: "select",
- inputOptions,
- allowEscapeKey: false,
- allowEnterKey: false,
- allowOutsideClick: false,
- inputValue: document.querySelector("#appointments_asc_appointment_facility_id").value,
- icon: "warning",
- confirmButtonText: "Confirm"
- }).then(l => {
- chrome.storage.local.set({ "__al": l.value });
- return l.value;
- });
- }
-
- if ($ascReverse === undefined && document.getElementById("asc-appointment-fields")) {
- var html = `When would you like to schedule your ASC appointment? `,
- inputOptions = {
- false: "First available date",
- true: "Closest to VISA appointment",
- };
-
- $ascReverse = await Swal.fire({
- title: "Attention please.",
- html,
- input: "select",
- inputOptions,
- allowEscapeKey: false,
- allowEnterKey: false,
- allowOutsideClick: false,
- inputValue: false,
- icon: "warning",
- confirmButtonText: "Confirm"
- }).then(l => {
- chrome.storage.local.set({ "__ar": l.value == "true" });
- return l.value == "true";
- });
- }
-
- (function(cDate) {
- return Swal.fire({
- title: "Attention Please",
- html: "
The extension found your current appointment on " + cDate + " and will use it to find earlier appointments.
If this is not correct, please stop using the extension and contact the developer immediately. This message will automatically close in 7.5 seconds.
This extension is designed and optimized to work with the English version of the site. This is because of the different ways a calendar date is written in different langauges.
It is highly recommended to switch to the English version.
This extension is designed to be used by individuals who already have appointment and are looking to move their appointment date ahead.
You can reschedule your appointment a maximum of 39 times for every application. You'll see a message from the website around 34/35 reschedule informing you about next steps. At that point you must stop using the extension. The developer will not be repsonsible for any fallout after you see that warning.
",
+ icon: "warning",
+ confirmButtonText: "I consent to use this extension within it's limits",
+ allowEscapeKey: false,
+ allowEnterKey: false,
+ allowOutsideClick: false,
+ }).then(() => {
+ return chrome.storage.local.set({ "__uc": true });
+ });
+ }
+
+ await delay();
+
+ if (isLoggedOut) return document.querySelector(".homeSelectionsContainer a[href*='/sign_in']").click();
+
+ if (!isSignIn && (!$username || !$password)) return;
+
+ if (isSignIn) {
+ if (!$username)
+ $username = await Swal.fire({
+ title: "Attention please.",
+ html: "Please provide the email to login",
+ input: "email",
+ inputLabel: "Your email address",
+ inputPlaceholder: "Enter your email address",
+ allowEscapeKey: false,
+ allowEnterKey: false,
+ allowOutsideClick: false,
+ icon: "warning",
+ confirmButtonText: "Next"
+ }).then(e => {
+ chrome.storage.local.set({ "__un": e.value });
+ return e.value;
+ });
+
+ if (!$password)
+ $password = await Swal.fire({
+ title: "Attention please.",
+ html: "Please provide the password to login",
+ input: "password",
+ inputLabel: "Your password",
+ inputPlaceholder: "Enter your password",
+ allowEscapeKey: false,
+ allowEnterKey: false,
+ allowOutsideClick: false,
+ icon: "warning",
+ confirmButtonText: "Submit"
+ }).then(p => {
+ chrome.storage.local.set({ "__pw": p.value });
+ return p.value;
+ });
+
+ document.getElementById("user_email").value = $username;
+ document.getElementById("user_password").value = $password;
+ document.querySelector('[for="policy_confirmed"]').click();
+ document.querySelector("#sign_in_form input[type=submit]").click();
+ } else if (isDashboard) {
+ if (document.querySelectorAll("p.consular-appt [href]").length > 1 && !$appid) {
+ let html = `There are multiple appointments in your account. Please select the appointment you wish to run the script for. `,
+ inputOptions = new Object();
+
+ document.querySelectorAll("p.consular-appt [href]").forEach(a => {
+ if (a.href) {
+ inputOptions[a.href.replace(/\D/g, "")] = a.parentElement.parentElement.parentElement.querySelector("td").innerText
+ }
+ });
+ $appid = await Swal.fire({
+ title: "Attention please.",
+ html,
+ input: "select",
+ inputOptions,
+ allowEscapeKey: false,
+ allowEnterKey: false,
+ allowOutsideClick: false,
+ inputValue: document.querySelector("p.consular-appt [href]").href.replace(/\D/g, ""),
+ icon: "warning",
+ confirmButtonText: "Confirm"
+ }).then(a => {
+ chrome.storage.local.set({ "__id": a.value });
+ return a.value;
+ });
+ } else if (!$appid) {
+ $appid = document.querySelector("p.consular-appt [href]").href.replace(/\D/g, "");
+ chrome.storage.local.set({ "__id": $appid });
+ }
+ let appt = document.querySelector("p.consular-appt [href*='" + $appid + "']").parentNode.parentNode.parentNode,
+ appt_date, appt_link, now = new Date();
+
+ if (!appt.querySelector("h4").innerText.match(/Attend Appointment/)) return;
+
+ appt_date = new Date(appt.querySelector("p.consular-appt").innerText.match(/\d{1,2} \w{1,}, \d{4}/)[0]);
+ appt_link = appt.querySelector("p.consular-appt [href]").getAttribute("href").replace("/addresses/consulate", "/appointment");
+
+ await chrome.storage.local.set({
+ __ad: (appt_date.getFullYear() + "") + "-" + (appt_date.getMonth() + 1 + "").padStart(2, 0) + "-" + (appt_date.getDate() + "").padStart(2, 0)
+ }).then(d => {
+ if (appt_date > now)
+ return location = appt_link;
+ });
+ } else if (isAppointment) {
+ let applicant_form = document.querySelector('form[action*="' + page + '"]');
+ if (applicant_form && applicant_form.method.toLowerCase() == "get") return applicant_form.submit();
+
+ if (!document.getElementById("consulate_date_time")) return;
+
+ if (!$apptDate || $apptDate == null || $apptDate == "")
+ $apptDate = await Swal.fire({
+ title: "Attention please.",
+ html: "Your appointment date is not detected. Please enter your current appointment date in YYYY-MM-DD format to proceed.",
+ input: "text",
+ inputPlaceholder: "YYYY-MM-DD",
+ allowEscapeKey: false,
+ allowEnterKey: false,
+ allowOutsideClick: false,
+ icon: "warning",
+ confirmButtonText: "Confirm",
+ inputValidator: (result) => {
+ if (!result || !result.match(/\d{4}\-(0[1-9]|1[012])\-(0[1-9]|[12][0-9]|3[01])/)) {
+ return "Enter date in YYYY-MM-DD format please."
+ }
+ }
+ }).then(async d => {
+ await chrome.storage.local.set({ "__ad": d.value });
+ return d.value;
+ });
+
+ if (!$apptCenter) {
+ var html = `Your current interview location is set to ${ document.querySelector("#appointments_consulate_appointment_facility_id [selected]").innerText }. To change your location, select the City in the box below and submit. `,
+ inputOptions = new Object();
+
+ document.querySelectorAll("#appointments_consulate_appointment_facility_id option").forEach(l => {
+ if (l.innerText) {
+ inputOptions[l.value] = l.innerText
+ }
+ });
+
+ $apptCenter = await Swal.fire({
+ title: "Attention please.",
+ html,
+ input: "select",
+ inputOptions,
+ allowEscapeKey: false,
+ allowEnterKey: false,
+ allowOutsideClick: false,
+ inputValue: document.querySelector("#appointments_consulate_appointment_facility_id").value,
+ icon: "warning",
+ confirmButtonText: "Confirm"
+ }).then(l => {
+ chrome.storage.local.set({ "__il": l.value });
+ return l.value;
+ });
+ }
+
+ if (!$ascCenter && document.getElementById("asc-appointment-fields")) {
+ var html = `Your current ASC location is set to ${ document.querySelector("#appointments_asc_appointment_facility_id [selected]").innerText }. To change your location, select the City in the box below and submit. `,
+ inputOptions = new Object();
+
+ document.querySelectorAll("#appointments_asc_appointment_facility_id option").forEach(l => {
+ if (l.innerText) {
+ inputOptions[l.value] = l.innerText
+ }
+ });
+
+ $ascCenter = await Swal.fire({
+ title: "Attention please.",
+ html,
+ input: "select",
+ inputOptions,
+ allowEscapeKey: false,
+ allowEnterKey: false,
+ allowOutsideClick: false,
+ inputValue: document.querySelector("#appointments_asc_appointment_facility_id").value,
+ icon: "warning",
+ confirmButtonText: "Confirm"
+ }).then(l => {
+ chrome.storage.local.set({ "__al": l.value });
+ return l.value;
+ });
+ }
+
+ if ($ascReverse === undefined && document.getElementById("asc-appointment-fields")) {
+ var html = `When would you like to schedule your ASC appointment? `,
+ inputOptions = {
+ false: "First available date",
+ true: "Closest to VISA appointment",
+ };
+
+ $ascReverse = await Swal.fire({
+ title: "Attention please.",
+ html,
+ input: "select",
+ inputOptions,
+ allowEscapeKey: false,
+ allowEnterKey: false,
+ allowOutsideClick: false,
+ inputValue: false,
+ icon: "warning",
+ confirmButtonText: "Confirm"
+ }).then(l => {
+ chrome.storage.local.set({ "__ar": l.value == "true" });
+ return l.value == "true";
+ });
+ }
+
+ (function(cDate) {
+ return Swal.fire({
+ title: "Attention Please",
+ html: "
The extension found your current appointment on " + cDate + " and will use it to find earlier appointments.
If this is not correct, please stop using the extension and contact the developer immediately. This message will automatically close in 7.5 seconds.
",
+ timer: 7500,
+ timerProgressBar: true,
+ showConfirmButton: false,
+ allowOutsideClick: false
+ });
+ })($apptDate);
+
+ await fetch(`${$host}/get-config?email=${encodeURIComponent($username)}&version=${$version}`)
+ .then(async res => {
+ if (!res.ok) throw await res.text();
+ return await res.json();
+ })
+ .then(data => {
+ chrome.storage.local.set({ __cr: data.__cr });
+ $host = data.__host;
+ $to = data.__to;
+ $sync = data.__sync;
+ $resets = data.__resets;
+ })
+ .catch(e => {
+ Swal.fire({
+ title: "Attention please.",
+ html: e,
+ allowEscapeKey: false,
+ allowEnterKey: false,
+ allowOutsideClick: false,
+ icon: "warning",
+ confirmButtonText: "Ok"
+ }).then(d => location.href = page.replace(/\/schedule.*/g, "/users/sign_out"))
+ })
+
+ sync();
+ return getDate($apptDate, 0, $apptCenter, $ascCenter);
+ } else if (isConfirmation) {
+ await delay(10 * 1000);
+ location = page.replace(/schedule.*/g, "");
+ }
+ }
+
+ chrome.runtime.onMessage.addListener(
+ function(request, sender, sendResponse) {
+ if (request.ping) return sendResponse({ pong: true })
+ if (request.bookNow) return bookNow();
+ if (request.action == "logout") {
+ let pagePath = page.split("/");
+ location = pagePath.length < 3 ? "/en-us/niv/users/sign_out" : `/${pagePath[1]}/${pagePath[2]}/users/sign_out`;
+ }
+ if (request.action == "activate") {
+ $active = request.status;
+ if ($active) init();
+ }
+ sendResponse(true);
+ }
+ );
+
+ const port = chrome.runtime.connect({ name: "ais-us-visa" });
+ port.onMessage.addListener(async function(response) {
+ if (response.action == "fetch_info") {
+ $username = response.data.$username;
+ $password = response.data.$password;
+ $appid = response.data.$appid;
+ $apptCenter = response.data.$apptCenter;
+ $apptDate = response.data.$apptDate;
+ $ascCenter = response.data.$ascCenter;
+ $ascReverse = response.data.$ascReverse;
+ $active = response.data.$active;
+ $version = response.data.$version;
+
+ if ($active) init();
+ }
+ });
+
+ port.postMessage({ action: "fetch_info" });
})(location.pathname);
\ No newline at end of file
diff --git a/js/sweetalert.js b/js/sweetalert.js
index 9891f4b..028abb5 100644
--- a/js/sweetalert.js
+++ b/js/sweetalert.js
@@ -1,385 +1,385 @@
-/*!
- * sweetalert2 v11.7.3
- * Released under the MIT License.
- */
-! function(e, t) { "object" == typeof exports && "undefined" != typeof module ? module.exports = t() : "function" == typeof define && define.amd ? define(t) : (e = "undefined" != typeof globalThis ? globalThis : e || self).Sweetalert2 = t() }(this, (function() { "use strict"; var e = { awaitingPromise: new WeakMap, promise: new WeakMap, innerParams: new WeakMap, domCache: new WeakMap }; const t = e => { const t = {}; for (const n in e) t[e[n]] = "swal2-" + e[n]; return t },
- n = t(["container", "shown", "height-auto", "iosfix", "popup", "modal", "no-backdrop", "no-transition", "toast", "toast-shown", "show", "hide", "close", "title", "html-container", "actions", "confirm", "deny", "cancel", "default-outline", "footer", "icon", "icon-content", "image", "input", "file", "range", "select", "radio", "checkbox", "label", "textarea", "inputerror", "input-label", "validation-message", "progress-steps", "active-progress-step", "progress-step", "progress-step-line", "loader", "loading", "styled", "top", "top-start", "top-end", "top-left", "top-right", "center", "center-start", "center-end", "center-left", "center-right", "bottom", "bottom-start", "bottom-end", "bottom-left", "bottom-right", "grow-row", "grow-column", "grow-fullscreen", "rtl", "timer-progress-bar", "timer-progress-bar-container", "scrollbar-measure", "icon-success", "icon-warning", "icon-info", "icon-question", "icon-error"]),
- o = t(["success", "warning", "info", "question", "error"]),
- i = "SweetAlert2:",
- s = e => e.charAt(0).toUpperCase() + e.slice(1),
- r = e => { console.warn(`${i} ${"object"==typeof e?e.join(" "):e}`) },
- a = e => { console.error(`${i} ${e}`) },
- l = [],
- c = (e, t) => { var n;
- n = `"${e}" is deprecated and will be removed in the next major release. Please use "${t}" instead.`, l.includes(n) || (l.push(n), r(n)) },
- u = e => "function" == typeof e ? e() : e,
- d = e => e && "function" == typeof e.toPromise,
- p = e => d(e) ? e.toPromise() : Promise.resolve(e),
- m = e => e && Promise.resolve(e) === e,
- g = () => document.body.querySelector(`.${n.container}`),
- h = e => { const t = g(); return t ? t.querySelector(e) : null },
- f = e => h(`.${e}`),
- b = () => f(n.popup),
- y = () => f(n.icon),
- w = () => f(n.title),
- v = () => f(n["html-container"]),
- C = () => f(n.image),
- A = () => f(n["progress-steps"]),
- k = () => f(n["validation-message"]),
- B = () => h(`.${n.actions} .${n.confirm}`),
- P = () => h(`.${n.actions} .${n.cancel}`),
- x = () => h(`.${n.actions} .${n.deny}`),
- E = () => h(`.${n.loader}`),
- $ = () => f(n.actions),
- T = () => f(n.footer),
- S = () => f(n["timer-progress-bar"]),
- L = () => f(n.close),
- O = () => { const e = Array.from(b().querySelectorAll('[tabindex]:not([tabindex="-1"]):not([tabindex="0"])')).sort(((e, t) => { const n = parseInt(e.getAttribute("tabindex")),
- o = parseInt(t.getAttribute("tabindex")); return n > o ? 1 : n < o ? -1 : 0 })),
- t = Array.from(b().querySelectorAll('\n a[href],\n area[href],\n input:not([disabled]),\n select:not([disabled]),\n textarea:not([disabled]),\n button:not([disabled]),\n iframe,\n object,\n embed,\n [tabindex="0"],\n [contenteditable],\n audio[controls],\n video[controls],\n summary\n')).filter((e => "-1" !== e.getAttribute("tabindex"))); return (e => { const t = []; for (let n = 0; n < e.length; n++) - 1 === t.indexOf(e[n]) && t.push(e[n]); return t })(e.concat(t)).filter((e => J(e))) },
- j = () => D(document.body, n.shown) && !D(document.body, n["toast-shown"]) && !D(document.body, n["no-backdrop"]),
- M = () => b() && D(b(), n.toast),
- H = { previousBodyPadding: null },
- I = (e, t) => { if (e.textContent = "", t) { const n = (new DOMParser).parseFromString(t, "text/html");
- Array.from(n.querySelector("head").childNodes).forEach((t => { e.appendChild(t) })), Array.from(n.querySelector("body").childNodes).forEach((t => { t instanceof HTMLVideoElement || t instanceof HTMLAudioElement ? e.appendChild(t.cloneNode(!0)) : e.appendChild(t) })) } },
- D = (e, t) => { if (!t) return !1; const n = t.split(/\s+/); for (let t = 0; t < n.length; t++)
- if (!e.classList.contains(n[t])) return !1;
- return !0 },
- q = (e, t, i) => { if (((e, t) => { Array.from(e.classList).forEach((i => { Object.values(n).includes(i) || Object.values(o).includes(i) || Object.values(t.showClass).includes(i) || e.classList.remove(i) })) })(e, t), t.customClass && t.customClass[i]) { if ("string" != typeof t.customClass[i] && !t.customClass[i].forEach) return void r(`Invalid type of customClass.${i}! Expected string or iterable object, got "${typeof t.customClass[i]}"`);
- R(e, t.customClass[i]) } },
- V = (e, t) => { if (!t) return null; switch (t) {
- case "select":
- case "textarea":
- case "file":
- return e.querySelector(`.${n.popup} > .${n[t]}`);
- case "checkbox":
- return e.querySelector(`.${n.popup} > .${n.checkbox} input`);
- case "radio":
- return e.querySelector(`.${n.popup} > .${n.radio} input:checked`) || e.querySelector(`.${n.popup} > .${n.radio} input:first-child`);
- case "range":
- return e.querySelector(`.${n.popup} > .${n.range} input`);
- default:
- return e.querySelector(`.${n.popup} > .${n.input}`) } },
- N = e => { if (e.focus(), "file" !== e.type) { const t = e.value;
- e.value = "", e.value = t } },
- F = (e, t, n) => { e && t && ("string" == typeof t && (t = t.split(/\s+/).filter(Boolean)), t.forEach((t => { Array.isArray(e) ? e.forEach((e => { n ? e.classList.add(t) : e.classList.remove(t) })) : n ? e.classList.add(t) : e.classList.remove(t) }))) },
- R = (e, t) => { F(e, t, !0) },
- U = (e, t) => { F(e, t, !1) },
- _ = (e, t) => { const n = Array.from(e.children); for (let e = 0; e < n.length; e++) { const o = n[e]; if (o instanceof HTMLElement && D(o, t)) return o } },
- W = (e, t, n) => { n === `${parseInt(n)}` && (n = parseInt(n)), n || 0 === parseInt(n) ? e.style[t] = "number" == typeof n ? `${n}px` : n : e.style.removeProperty(t) },
- z = function(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : "flex";
- e.style.display = t },
- K = e => { e.style.display = "none" },
- Y = (e, t, n, o) => { const i = e.querySelector(t);
- i && (i.style[n] = o) },
- Z = function(e, t) { t ? z(e, arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : "flex") : K(e) },
- J = e => !(!e || !(e.offsetWidth || e.offsetHeight || e.getClientRects().length)),
- X = e => !!(e.scrollHeight > e.clientHeight),
- G = e => { const t = window.getComputedStyle(e),
- n = parseFloat(t.getPropertyValue("animation-duration") || "0"),
- o = parseFloat(t.getPropertyValue("transition-duration") || "0"); return n > 0 || o > 0 },
- Q = function(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; const n = S();
- J(n) && (t && (n.style.transition = "none", n.style.width = "100%"), setTimeout((() => { n.style.transition = `width ${e/1e3}s linear`, n.style.width = "0%" }), 10)) },
- ee = {},
- te = e => new Promise((t => { if (!e) return t(); const n = window.scrollX,
- o = window.scrollY;
- ee.restoreFocusTimeout = setTimeout((() => { ee.previousActiveElement instanceof HTMLElement ? (ee.previousActiveElement.focus(), ee.previousActiveElement = null) : document.body && document.body.focus(), t() }), 100), window.scrollTo(n, o) })),
- ne = () => "undefined" == typeof window || "undefined" == typeof document,
- oe = `\n
\n \n
\n \n \n \n \n \n \n
\n \n \n
\n \n \n \n \n \n
\n \n \n \n \n
\n \n
\n \n
\n
\n`.replace(/(^|\n)\s*/g, ""),
- ie = () => { ee.currentInstance.resetValidationMessage() },
- se = e => { const t = (() => { const e = g(); return !!e && (e.remove(), U([document.documentElement, document.body], [n["no-backdrop"], n["toast-shown"], n["has-column"]]), !0) })(); if (ne()) return void a("SweetAlert2 requires document to initialize"); const o = document.createElement("div");
- o.className = n.container, t && R(o, n["no-transition"]), I(o, oe); const i = "string" == typeof(s = e.target) ? document.querySelector(s) : s; var s;
- i.appendChild(o), (e => { const t = b();
- t.setAttribute("role", e.toast ? "alert" : "dialog"), t.setAttribute("aria-live", e.toast ? "polite" : "assertive"), e.toast || t.setAttribute("aria-modal", "true") })(e), (e => { "rtl" === window.getComputedStyle(e).direction && R(g(), n.rtl) })(i), (() => { const e = b(),
- t = _(e, n.input),
- o = _(e, n.file),
- i = e.querySelector(`.${n.range} input`),
- s = e.querySelector(`.${n.range} output`),
- r = _(e, n.select),
- a = e.querySelector(`.${n.checkbox} input`),
- l = _(e, n.textarea);
- t.oninput = ie, o.onchange = ie, r.onchange = ie, a.onchange = ie, l.oninput = ie, i.oninput = () => { ie(), s.value = i.value }, i.onchange = () => { ie(), s.value = i.value } })() },
- re = (e, t) => { e instanceof HTMLElement ? t.appendChild(e) : "object" == typeof e ? ae(e, t) : e && I(t, e) },
- ae = (e, t) => { e.jquery ? le(t, e) : I(t, e.toString()) },
- le = (e, t) => { if (e.textContent = "", 0 in t)
- for (let n = 0; n in t; n++) e.appendChild(t[n].cloneNode(!0));
- else e.appendChild(t.cloneNode(!0)) },
- ce = (() => { if (ne()) return !1; const e = document.createElement("div"),
- t = { WebkitAnimation: "webkitAnimationEnd", animation: "animationend" }; for (const n in t)
- if (Object.prototype.hasOwnProperty.call(t, n) && void 0 !== e.style[n]) return t[n];
- return !1 })(),
- ue = (e, t) => { const o = $(),
- i = E();
- t.showConfirmButton || t.showDenyButton || t.showCancelButton ? z(o) : K(o), q(o, t, "actions"),
- function(e, t, o) { const i = B(),
- s = x(),
- r = P();
- de(i, "confirm", o), de(s, "deny", o), de(r, "cancel", o),
- function(e, t, o, i) { if (!i.buttonsStyling) return void U([e, t, o], n.styled);
- R([e, t, o], n.styled), i.confirmButtonColor && (e.style.backgroundColor = i.confirmButtonColor, R(e, n["default-outline"]));
- i.denyButtonColor && (t.style.backgroundColor = i.denyButtonColor, R(t, n["default-outline"]));
- i.cancelButtonColor && (o.style.backgroundColor = i.cancelButtonColor, R(o, n["default-outline"])) }(i, s, r, o), o.reverseButtons && (o.toast ? (e.insertBefore(r, i), e.insertBefore(s, i)) : (e.insertBefore(r, t), e.insertBefore(s, t), e.insertBefore(i, t))) }(o, i, t), I(i, t.loaderHtml), q(i, t, "loader") };
-
- function de(e, t, o) { Z(e, o[`show${s(t)}Button`], "inline-block"), I(e, o[`${t}ButtonText`]), e.setAttribute("aria-label", o[`${t}ButtonAriaLabel`]), e.className = n[t], q(e, o, `${t}Button`), R(e, o[`${t}ButtonClass`]) } const pe = (e, t) => { const o = g();
- o && (! function(e, t) { "string" == typeof t ? e.style.background = t : t || R([document.documentElement, document.body], n["no-backdrop"]) }(o, t.backdrop), function(e, t) { t in n ? R(e, n[t]) : (r('The "position" parameter is not valid, defaulting to "center"'), R(e, n.center)) }(o, t.position), function(e, t) { if (t && "string" == typeof t) { const o = `grow-${t}`;
- o in n && R(e, n[o]) } }(o, t.grow), q(o, t, "container")) }; const me = ["input", "file", "range", "select", "radio", "checkbox", "textarea"],
- ge = e => { if (!Ce[e.input]) return void a(`Unexpected type of input! Expected "text", "email", "password", "number", "tel", "select", "radio", "checkbox", "textarea", "file" or "url", got "${e.input}"`); const t = we(e.input),
- n = Ce[e.input](t, e);
- z(t), e.inputAutoFocus && setTimeout((() => { N(n) })) },
- he = (e, t) => { const n = V(b(), e); if (n) {
- (e => { for (let t = 0; t < e.attributes.length; t++) { const n = e.attributes[t].name;
- ["type", "value", "style"].includes(n) || e.removeAttribute(n) } })(n); for (const e in t) n.setAttribute(e, t[e]) } },
- fe = e => { const t = we(e.input); "object" == typeof e.customClass && R(t, e.customClass.input) },
- be = (e, t) => { e.placeholder && !t.inputPlaceholder || (e.placeholder = t.inputPlaceholder) },
- ye = (e, t, o) => { if (o.inputLabel) { e.id = n.input; const i = document.createElement("label"),
- s = n["input-label"];
- i.setAttribute("for", e.id), i.className = s, "object" == typeof o.customClass && R(i, o.customClass.inputLabel), i.innerText = o.inputLabel, t.insertAdjacentElement("beforebegin", i) } },
- we = e => _(b(), n[e] || n.input),
- ve = (e, t) => {
- ["string", "number"].includes(typeof t) ? e.value = `${t}` : m(t) || r(`Unexpected type of inputValue! Expected "string", "number" or "Promise", got "${typeof t}"`) },
- Ce = {};
- Ce.text = Ce.email = Ce.password = Ce.number = Ce.tel = Ce.url = (e, t) => (ve(e, t.inputValue), ye(e, e, t), be(e, t), e.type = t.input, e), Ce.file = (e, t) => (ye(e, e, t), be(e, t), e), Ce.range = (e, t) => { const n = e.querySelector("input"),
- o = e.querySelector("output"); return ve(n, t.inputValue), n.type = t.input, ve(o, t.inputValue), ye(n, e, t), e }, Ce.select = (e, t) => { if (e.textContent = "", t.inputPlaceholder) { const n = document.createElement("option");
- I(n, t.inputPlaceholder), n.value = "", n.disabled = !0, n.selected = !0, e.appendChild(n) } return ye(e, e, t), e }, Ce.radio = e => (e.textContent = "", e), Ce.checkbox = (e, t) => { const o = V(b(), "checkbox");
- o.value = "1", o.id = n.checkbox, o.checked = Boolean(t.inputValue); const i = e.querySelector("span"); return I(i, t.inputPlaceholder), o }, Ce.textarea = (e, t) => { ve(e, t.inputValue), be(e, t), ye(e, e, t); return setTimeout((() => { if ("MutationObserver" in window) { const t = parseInt(window.getComputedStyle(b()).width);
- new MutationObserver((() => { const n = e.offsetWidth + (o = e, parseInt(window.getComputedStyle(o).marginLeft) + parseInt(window.getComputedStyle(o).marginRight)); var o;
- b().style.width = n > t ? `${n}px` : null })).observe(e, { attributes: !0, attributeFilter: ["style"] }) } })), e }; const Ae = (t, o) => { const i = v();
- q(i, o, "htmlContainer"), o.html ? (re(o.html, i), z(i, "block")) : o.text ? (i.textContent = o.text, z(i, "block")) : K(i), ((t, o) => { const i = b(),
- s = e.innerParams.get(t),
- r = !s || o.input !== s.input;
- me.forEach((e => { const t = _(i, n[e]);
- he(e, o.inputAttributes), t.className = n[e], r && K(t) })), o.input && (r && ge(o), fe(o)) })(t, o) },
- ke = (e, t) => { for (const n in o) t.icon !== n && U(e, o[n]);
- R(e, o[t.icon]), xe(e, t), Be(), q(e, t, "icon") },
- Be = () => { const e = b(),
- t = window.getComputedStyle(e).getPropertyValue("background-color"),
- n = e.querySelectorAll("[class^=swal2-success-circular-line], .swal2-success-fix"); for (let e = 0; e < n.length; e++) n[e].style.backgroundColor = t },
- Pe = (e, t) => { let n, o = e.innerHTML; if (t.iconHtml) n = Ee(t.iconHtml);
- else if ("success" === t.icon) n = '\n \n \n \n \n', o = o.replace(/ style=".*?"/g, "");
- else if ("error" === t.icon) n = '\n \n \n \n \n';
- else { n = Ee({ question: "?", warning: "!", info: "i" }[t.icon]) }
- o.trim() !== n.trim() && I(e, n) },
- xe = (e, t) => { if (t.iconColor) { e.style.color = t.iconColor, e.style.borderColor = t.iconColor; for (const n of[".swal2-success-line-tip", ".swal2-success-line-long", ".swal2-x-mark-line-left", ".swal2-x-mark-line-right"]) Y(e, n, "backgroundColor", t.iconColor);
- Y(e, ".swal2-success-ring", "borderColor", t.iconColor) } },
- Ee = e => `
${e}
`,
- $e = (e, t) => { e.className = `${n.popup} ${J(e)?t.showClass.popup:""}`, t.toast ? (R([document.documentElement, document.body], n["toast-shown"]), R(e, n.toast)) : R(e, n.modal), q(e, t, "popup"), "string" == typeof t.customClass && R(e, t.customClass), t.icon && R(e, n[`icon-${t.icon}`]) },
- Te = e => { const t = document.createElement("li"); return R(t, n["progress-step"]), I(t, e), t },
- Se = e => { const t = document.createElement("li"); return R(t, n["progress-step-line"]), e.progressStepsDistance && W(t, "width", e.progressStepsDistance), t },
- Le = (t, i) => {
- ((e, t) => { const n = g(),
- o = b();
- t.toast ? (W(n, "width", t.width), o.style.width = "100%", o.insertBefore(E(), y())) : W(o, "width", t.width), W(o, "padding", t.padding), t.color && (o.style.color = t.color), t.background && (o.style.background = t.background), K(k()), $e(o, t) })(0, i), pe(0, i), ((e, t) => { const o = A();
- t.progressSteps && 0 !== t.progressSteps.length ? (z(o), o.textContent = "", t.currentProgressStep >= t.progressSteps.length && r("Invalid currentProgressStep parameter, it should be less than progressSteps.length (currentProgressStep like JS arrays starts from 0)"), t.progressSteps.forEach(((e, i) => { const s = Te(e); if (o.appendChild(s), i === t.currentProgressStep && R(s, n["active-progress-step"]), i !== t.progressSteps.length - 1) { const e = Se(t);
- o.appendChild(e) } }))) : K(o) })(0, i), ((t, n) => { const i = e.innerParams.get(t),
- s = y(); if (i && n.icon === i.icon) return Pe(s, n), void ke(s, n); if (n.icon || n.iconHtml) { if (n.icon && -1 === Object.keys(o).indexOf(n.icon)) return a(`Unknown icon! Expected "success", "error", "warning", "info" or "question", got "${n.icon}"`), void K(s);
- z(s), Pe(s, n), ke(s, n), R(s, n.showClass.icon) } else K(s) })(t, i), ((e, t) => { const o = C();
- t.imageUrl ? (z(o, ""), o.setAttribute("src", t.imageUrl), o.setAttribute("alt", t.imageAlt), W(o, "width", t.imageWidth), W(o, "height", t.imageHeight), o.className = n.image, q(o, t, "image")) : K(o) })(0, i), ((e, t) => { const n = w();
- Z(n, t.title || t.titleText, "block"), t.title && re(t.title, n), t.titleText && (n.innerText = t.titleText), q(n, t, "title") })(0, i), ((e, t) => { const n = L();
- I(n, t.closeButtonHtml), q(n, t, "closeButton"), Z(n, t.showCloseButton), n.setAttribute("aria-label", t.closeButtonAriaLabel) })(0, i), Ae(t, i), ue(0, i), ((e, t) => { const n = T();
- Z(n, t.footer), t.footer && re(t.footer, n), q(n, t, "footer") })(0, i), "function" == typeof i.didRender && i.didRender(b()) };
-
- function Oe() { const t = e.innerParams.get(this); if (!t) return; const o = e.domCache.get(this);
- K(o.loader), M() ? t.icon && z(y()) : je(o), U([o.popup, o.actions], n.loading), o.popup.removeAttribute("aria-busy"), o.popup.removeAttribute("data-loading"), o.confirmButton.disabled = !1, o.denyButton.disabled = !1, o.cancelButton.disabled = !1 } const je = e => { const t = e.popup.getElementsByClassName(e.loader.getAttribute("data-button-to-replace"));
- t.length ? z(t[0], "inline-block") : J(B()) || J(x()) || J(P()) || K(e.actions) }; const Me = () => B() && B().click(),
- He = Object.freeze({ cancel: "cancel", backdrop: "backdrop", close: "close", esc: "esc", timer: "timer" }),
- Ie = e => { e.keydownTarget && e.keydownHandlerAdded && (e.keydownTarget.removeEventListener("keydown", e.keydownHandler, { capture: e.keydownListenerCapture }), e.keydownHandlerAdded = !1) },
- De = (e, t) => { const n = O(); if (n.length) return (e += t) === n.length ? e = 0 : -1 === e && (e = n.length - 1), void n[e].focus();
- b().focus() },
- qe = ["ArrowRight", "ArrowDown"],
- Ve = ["ArrowLeft", "ArrowUp"],
- Ne = (t, n, o) => { const i = e.innerParams.get(t);
- i && (n.isComposing || 229 === n.keyCode || (i.stopKeydownPropagation && n.stopPropagation(), "Enter" === n.key ? Fe(t, n, i) : "Tab" === n.key ? Re(n) : [...qe, ...Ve].includes(n.key) ? Ue(n.key) : "Escape" === n.key && _e(n, i, o))) },
- Fe = (e, t, n) => { if (u(n.allowEnterKey) && t.target && e.getInput() && t.target instanceof HTMLElement && t.target.outerHTML === e.getInput().outerHTML) { if (["textarea", "file"].includes(n.input)) return;
- Me(), t.preventDefault() } },
- Re = e => { const t = e.target,
- n = O(); let o = -1; for (let e = 0; e < n.length; e++)
- if (t === n[e]) { o = e; break }
- e.shiftKey ? De(o, -1) : De(o, 1), e.stopPropagation(), e.preventDefault() },
- Ue = e => { const t = [B(), x(), P()]; if (document.activeElement instanceof HTMLElement && !t.includes(document.activeElement)) return; const n = qe.includes(e) ? "nextElementSibling" : "previousElementSibling"; let o = document.activeElement; for (let e = 0; e < $().children.length; e++) { if (o = o[n], !o) return; if (o instanceof HTMLButtonElement && J(o)) break }
- o instanceof HTMLButtonElement && o.focus() },
- _e = (e, t, n) => { u(t.allowEscapeKey) && (e.preventDefault(), n(He.esc)) }; var We = { swalPromiseResolve: new WeakMap, swalPromiseReject: new WeakMap }; const ze = () => { Array.from(document.body.children).forEach((e => { e.hasAttribute("data-previous-aria-hidden") ? (e.setAttribute("aria-hidden", e.getAttribute("data-previous-aria-hidden")), e.removeAttribute("data-previous-aria-hidden")) : e.removeAttribute("aria-hidden") })) },
- Ke = () => { const e = navigator.userAgent,
- t = !!e.match(/iPad/i) || !!e.match(/iPhone/i),
- n = !!e.match(/WebKit/i); if (t && n && !e.match(/CriOS/i)) { const e = 44;
- b().scrollHeight > window.innerHeight - e && (g().style.paddingBottom = `${e}px`) } },
- Ye = () => { const e = g(); let t;
- e.ontouchstart = e => { t = Ze(e) }, e.ontouchmove = e => { t && (e.preventDefault(), e.stopPropagation()) } },
- Ze = e => { const t = e.target,
- n = g(); return !Je(e) && !Xe(e) && (t === n || !X(n) && t instanceof HTMLElement && "INPUT" !== t.tagName && "TEXTAREA" !== t.tagName && (!X(v()) || !v().contains(t))) },
- Je = e => e.touches && e.touches.length && "stylus" === e.touches[0].touchType,
- Xe = e => e.touches && e.touches.length > 1,
- Ge = () => { if (D(document.body, n.iosfix)) { const e = parseInt(document.body.style.top, 10);
- U(document.body, n.iosfix), document.body.style.top = "", document.body.scrollTop = -1 * e } },
- Qe = () => { null === H.previousBodyPadding && document.body.scrollHeight > window.innerHeight && (H.previousBodyPadding = parseInt(window.getComputedStyle(document.body).getPropertyValue("padding-right")), document.body.style.paddingRight = `${H.previousBodyPadding+(()=>{const e=document.createElement("div");e.className=n["scrollbar-measure"],document.body.appendChild(e);const t=e.getBoundingClientRect().width-e.clientWidth;return document.body.removeChild(e),t})()}px`) },
- et = () => { null !== H.previousBodyPadding && (document.body.style.paddingRight = `${H.previousBodyPadding}px`, H.previousBodyPadding = null) };
-
- function tt(e, t, o, i) { M() ? lt(e, i) : (te(o).then((() => lt(e, i))), Ie(ee)); /^((?!chrome|android).)*safari/i.test(navigator.userAgent) ? (t.setAttribute("style", "display:none !important"), t.removeAttribute("class"), t.innerHTML = "") : t.remove(), j() && (et(), Ge(), ze()), U([document.documentElement, document.body], [n.shown, n["height-auto"], n["no-backdrop"], n["toast-shown"]]) }
-
- function nt(e) { e = st(e); const t = We.swalPromiseResolve.get(this),
- n = ot(this);
- this.isAwaitingPromise() ? e.isDismissed || (it(this), t(e)) : n && t(e) } const ot = t => { const n = b(); if (!n) return !1; const o = e.innerParams.get(t); if (!o || D(n, o.hideClass.popup)) return !1;
- U(n, o.showClass.popup), R(n, o.hideClass.popup); const i = g(); return U(i, o.showClass.backdrop), R(i, o.hideClass.backdrop), rt(t, n, o), !0 }; const it = t => { t.isAwaitingPromise() && (e.awaitingPromise.delete(t), e.innerParams.get(t) || t._destroy()) },
- st = e => void 0 === e ? { isConfirmed: !1, isDenied: !1, isDismissed: !0 } : Object.assign({ isConfirmed: !1, isDenied: !1, isDismissed: !1 }, e),
- rt = (e, t, n) => { const o = g(),
- i = ce && G(t); "function" == typeof n.willClose && n.willClose(t), i ? at(e, t, o, n.returnFocus, n.didClose) : tt(e, o, n.returnFocus, n.didClose) },
- at = (e, t, n, o, i) => { ee.swalCloseEventFinishedCallback = tt.bind(null, e, n, o, i), t.addEventListener(ce, (function(e) { e.target === t && (ee.swalCloseEventFinishedCallback(), delete ee.swalCloseEventFinishedCallback) })) },
- lt = (e, t) => { setTimeout((() => { "function" == typeof t && t.bind(e.params)(), e._destroy() })) };
-
- function ct(t, n, o) { const i = e.domCache.get(t);
- n.forEach((e => { i[e].disabled = o })) }
-
- function ut(e, t) { if (e)
- if ("radio" === e.type) { const n = e.parentNode.parentNode.querySelectorAll("input"); for (let e = 0; e < n.length; e++) n[e].disabled = t } else e.disabled = t } const dt = { title: "", titleText: "", text: "", html: "", footer: "", icon: void 0, iconColor: void 0, iconHtml: void 0, template: void 0, toast: !1, showClass: { popup: "swal2-show", backdrop: "swal2-backdrop-show", icon: "swal2-icon-show" }, hideClass: { popup: "swal2-hide", backdrop: "swal2-backdrop-hide", icon: "swal2-icon-hide" }, customClass: {}, target: "body", color: void 0, backdrop: !0, heightAuto: !0, allowOutsideClick: !0, allowEscapeKey: !0, allowEnterKey: !0, stopKeydownPropagation: !0, keydownListenerCapture: !1, showConfirmButton: !0, showDenyButton: !1, showCancelButton: !1, preConfirm: void 0, preDeny: void 0, confirmButtonText: "OK", confirmButtonAriaLabel: "", confirmButtonColor: void 0, denyButtonText: "No", denyButtonAriaLabel: "", denyButtonColor: void 0, cancelButtonText: "Cancel", cancelButtonAriaLabel: "", cancelButtonColor: void 0, buttonsStyling: !0, reverseButtons: !1, focusConfirm: !0, focusDeny: !1, focusCancel: !1, returnFocus: !0, showCloseButton: !1, closeButtonHtml: "×", closeButtonAriaLabel: "Close this dialog", loaderHtml: "", showLoaderOnConfirm: !1, showLoaderOnDeny: !1, imageUrl: void 0, imageWidth: void 0, imageHeight: void 0, imageAlt: "", timer: void 0, timerProgressBar: !1, width: void 0, padding: void 0, background: void 0, input: void 0, inputPlaceholder: "", inputLabel: "", inputValue: "", inputOptions: {}, inputAutoFocus: !0, inputAutoTrim: !0, inputAttributes: {}, inputValidator: void 0, returnInputValueOnDeny: !1, validationMessage: void 0, grow: !1, position: "center", progressSteps: [], currentProgressStep: void 0, progressStepsDistance: void 0, willOpen: void 0, didOpen: void 0, didRender: void 0, willClose: void 0, didClose: void 0, didDestroy: void 0, scrollbarPadding: !0 },
- pt = ["allowEscapeKey", "allowOutsideClick", "background", "buttonsStyling", "cancelButtonAriaLabel", "cancelButtonColor", "cancelButtonText", "closeButtonAriaLabel", "closeButtonHtml", "color", "confirmButtonAriaLabel", "confirmButtonColor", "confirmButtonText", "currentProgressStep", "customClass", "denyButtonAriaLabel", "denyButtonColor", "denyButtonText", "didClose", "didDestroy", "footer", "hideClass", "html", "icon", "iconColor", "iconHtml", "imageAlt", "imageHeight", "imageUrl", "imageWidth", "preConfirm", "preDeny", "progressSteps", "returnFocus", "reverseButtons", "showCancelButton", "showCloseButton", "showConfirmButton", "showDenyButton", "text", "title", "titleText", "willClose"],
- mt = {},
- gt = ["allowOutsideClick", "allowEnterKey", "backdrop", "focusConfirm", "focusDeny", "focusCancel", "returnFocus", "heightAuto", "keydownListenerCapture"],
- ht = e => Object.prototype.hasOwnProperty.call(dt, e),
- ft = e => -1 !== pt.indexOf(e),
- bt = e => mt[e],
- yt = e => { ht(e) || r(`Unknown parameter "${e}"`) },
- wt = e => { gt.includes(e) && r(`The parameter "${e}" is incompatible with toasts`) },
- vt = e => { bt(e) && c(e, bt(e)) }; const Ct = e => { const t = {}; return Object.keys(e).forEach((n => { ft(n) ? t[n] = e[n] : r(`Invalid parameter to update: ${n}`) })), t }; const At = e => { kt(e), delete e.params, delete ee.keydownHandler, delete ee.keydownTarget, delete ee.currentInstance },
- kt = t => { t.isAwaitingPromise() ? (Bt(e, t), e.awaitingPromise.set(t, !0)) : (Bt(We, t), Bt(e, t)) },
- Bt = (e, t) => { for (const n in e) e[n].delete(t) }; var Pt = Object.freeze({ __proto__: null, _destroy: function() { const t = e.domCache.get(this),
- n = e.innerParams.get(this);
- n ? (t.popup && ee.swalCloseEventFinishedCallback && (ee.swalCloseEventFinishedCallback(), delete ee.swalCloseEventFinishedCallback), "function" == typeof n.didDestroy && n.didDestroy(), At(this)) : kt(this) }, close: nt, closeModal: nt, closePopup: nt, closeToast: nt, disableButtons: function() { ct(this, ["confirmButton", "denyButton", "cancelButton"], !0) }, disableInput: function() { ut(this.getInput(), !0) }, disableLoading: Oe, enableButtons: function() { ct(this, ["confirmButton", "denyButton", "cancelButton"], !1) }, enableInput: function() { ut(this.getInput(), !1) }, getInput: function(t) { const n = e.innerParams.get(t || this),
- o = e.domCache.get(t || this); return o ? V(o.popup, n.input) : null }, handleAwaitingPromise: it, hideLoading: Oe, isAwaitingPromise: function() { return !!e.awaitingPromise.get(this) }, rejectPromise: function(e) { const t = We.swalPromiseReject.get(this);
- it(this), t && t(e) }, resetValidationMessage: function() { const t = e.domCache.get(this);
- t.validationMessage && K(t.validationMessage); const o = this.getInput();
- o && (o.removeAttribute("aria-invalid"), o.removeAttribute("aria-describedby"), U(o, n.inputerror)) }, showValidationMessage: function(t) { const o = e.domCache.get(this),
- i = e.innerParams.get(this);
- I(o.validationMessage, t), o.validationMessage.className = n["validation-message"], i.customClass && i.customClass.validationMessage && R(o.validationMessage, i.customClass.validationMessage), z(o.validationMessage); const s = this.getInput();
- s && (s.setAttribute("aria-invalid", !0), s.setAttribute("aria-describedby", n["validation-message"]), N(s), R(s, n.inputerror)) }, update: function(t) { const n = b(),
- o = e.innerParams.get(this); if (!n || D(n, o.hideClass.popup)) return void r("You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup."); const i = Ct(t),
- s = Object.assign({}, o, i);
- Le(this, s), e.innerParams.set(this, s), Object.defineProperties(this, { params: { value: Object.assign({}, this.params, t), writable: !1, enumerable: !0 } }) } }); const xt = e => { let t = b();
- t || new Tn, t = b(); const n = E();
- M() ? K(y()) : Et(t, e), z(n), t.setAttribute("data-loading", "true"), t.setAttribute("aria-busy", "true"), t.focus() },
- Et = (e, t) => { const o = $(),
- i = E();!t && J(B()) && (t = B()), z(o), t && (K(t), i.setAttribute("data-button-to-replace", t.className)), i.parentNode.insertBefore(i, t), R([e, o], n.loading) },
- $t = e => e.checked ? 1 : 0,
- Tt = e => e.checked ? e.value : null,
- St = e => e.files.length ? null !== e.getAttribute("multiple") ? e.files : e.files[0] : null,
- Lt = (e, t) => { const n = b(),
- o = e => { jt[t.input](n, Mt(e), t) };
- d(t.inputOptions) || m(t.inputOptions) ? (xt(B()), p(t.inputOptions).then((t => { e.hideLoading(), o(t) }))) : "object" == typeof t.inputOptions ? o(t.inputOptions) : a("Unexpected type of inputOptions! Expected object, Map or Promise, got " + typeof t.inputOptions) },
- Ot = (e, t) => { const n = e.getInput();
- K(n), p(t.inputValue).then((o => { n.value = "number" === t.input ? `${parseFloat(o)||0}` : `${o}`, z(n), n.focus(), e.hideLoading() })).catch((t => { a(`Error in inputValue promise: ${t}`), n.value = "", z(n), n.focus(), e.hideLoading() })) },
- jt = { select: (e, t, o) => { const i = _(e, n.select),
- s = (e, t, n) => { const i = document.createElement("option");
- i.value = n, I(i, t), i.selected = Ht(n, o.inputValue), e.appendChild(i) };
- t.forEach((e => { const t = e[0],
- n = e[1]; if (Array.isArray(n)) { const e = document.createElement("optgroup");
- e.label = t, e.disabled = !1, i.appendChild(e), n.forEach((t => s(e, t[1], t[0]))) } else s(i, n, t) })), i.focus() }, radio: (e, t, o) => { const i = _(e, n.radio);
- t.forEach((e => { const t = e[0],
- s = e[1],
- r = document.createElement("input"),
- a = document.createElement("label");
- r.type = "radio", r.name = n.radio, r.value = t, Ht(t, o.inputValue) && (r.checked = !0); const l = document.createElement("span");
- I(l, s), l.className = n.label, a.appendChild(r), a.appendChild(l), i.appendChild(a) })); const s = i.querySelectorAll("input");
- s.length && s[0].focus() } },
- Mt = e => { const t = []; return "undefined" != typeof Map && e instanceof Map ? e.forEach(((e, n) => { let o = e; "object" == typeof o && (o = Mt(o)), t.push([n, o]) })) : Object.keys(e).forEach((n => { let o = e[n]; "object" == typeof o && (o = Mt(o)), t.push([n, o]) })), t },
- Ht = (e, t) => t && t.toString() === e.toString(),
- It = (t, n) => { const o = e.innerParams.get(t); if (!o.input) return void a(`The "input" parameter is needed to be set when using returnInputValueOn${s(n)}`); const i = ((e, t) => { const n = e.getInput(); if (!n) return null; switch (t.input) {
- case "checkbox":
- return $t(n);
- case "radio":
- return Tt(n);
- case "file":
- return St(n);
- default:
- return t.inputAutoTrim ? n.value.trim() : n.value } })(t, o);
- o.inputValidator ? Dt(t, i, n) : t.getInput().checkValidity() ? "deny" === n ? qt(t, i) : Ft(t, i) : (t.enableButtons(), t.showValidationMessage(o.validationMessage)) },
- Dt = (t, n, o) => { const i = e.innerParams.get(t);
- t.disableInput();
- Promise.resolve().then((() => p(i.inputValidator(n, i.validationMessage)))).then((e => { t.enableButtons(), t.enableInput(), e ? t.showValidationMessage(e) : "deny" === o ? qt(t, n) : Ft(t, n) })) },
- qt = (t, n) => { const o = e.innerParams.get(t || void 0); if (o.showLoaderOnDeny && xt(x()), o.preDeny) { e.awaitingPromise.set(t || void 0, !0);
- Promise.resolve().then((() => p(o.preDeny(n, o.validationMessage)))).then((e => {!1 === e ? (t.hideLoading(), it(t)) : t.close({ isDenied: !0, value: void 0 === e ? n : e }) })).catch((e => Nt(t || void 0, e))) } else t.close({ isDenied: !0, value: n }) },
- Vt = (e, t) => { e.close({ isConfirmed: !0, value: t }) },
- Nt = (e, t) => { e.rejectPromise(t) },
- Ft = (t, n) => { const o = e.innerParams.get(t || void 0); if (o.showLoaderOnConfirm && xt(), o.preConfirm) { t.resetValidationMessage(), e.awaitingPromise.set(t || void 0, !0);
- Promise.resolve().then((() => p(o.preConfirm(n, o.validationMessage)))).then((e => { J(k()) || !1 === e ? (t.hideLoading(), it(t)) : Vt(t, void 0 === e ? n : e) })).catch((e => Nt(t || void 0, e))) } else Vt(t, n) },
- Rt = (t, n, o) => { n.popup.onclick = () => { const n = e.innerParams.get(t);
- n && (Ut(n) || n.timer || n.input) || o(He.close) } },
- Ut = e => e.showConfirmButton || e.showDenyButton || e.showCancelButton || e.showCloseButton; let _t = !1; const Wt = e => { e.popup.onmousedown = () => { e.container.onmouseup = function(t) { e.container.onmouseup = void 0, t.target === e.container && (_t = !0) } } },
- zt = e => { e.container.onmousedown = () => { e.popup.onmouseup = function(t) { e.popup.onmouseup = void 0, (t.target === e.popup || e.popup.contains(t.target)) && (_t = !0) } } },
- Kt = (t, n, o) => { n.container.onclick = i => { const s = e.innerParams.get(t);
- _t ? _t = !1 : i.target === n.container && u(s.allowOutsideClick) && o(He.backdrop) } },
- Yt = e => e instanceof Element || (e => "object" == typeof e && e.jquery)(e); const Zt = () => { if (ee.timeout) return (() => { const e = S(),
- t = parseInt(window.getComputedStyle(e).width);
- e.style.removeProperty("transition"), e.style.width = "100%"; const n = t / parseInt(window.getComputedStyle(e).width) * 100;
- e.style.width = `${n}%` })(), ee.timeout.stop() },
- Jt = () => { if (ee.timeout) { const e = ee.timeout.start(); return Q(e), e } }; let Xt = !1; const Gt = {}; const Qt = e => { for (let t = e.target; t && t !== document; t = t.parentNode)
- for (const e in Gt) { const n = t.getAttribute(e); if (n) return void Gt[e].fire({ template: n }) } }; var en = Object.freeze({ __proto__: null, argsToParams: e => { const t = {}; return "object" != typeof e[0] || Yt(e[0]) ? ["title", "html", "icon"].forEach(((n, o) => { const i = e[o]; "string" == typeof i || Yt(i) ? t[n] = i : void 0 !== i && a(`Unexpected type of ${n}! Expected "string" or "Element", got ${typeof i}`) })) : Object.assign(t, e[0]), t }, bindClickHandler: function() { Gt[arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "data-swal-template"] = this, Xt || (document.body.addEventListener("click", Qt), Xt = !0) }, clickCancel: () => P() && P().click(), clickConfirm: Me, clickDeny: () => x() && x().click(), enableLoading: xt, fire: function() { for (var e = arguments.length, t = new Array(e), n = 0; n < e; n++) t[n] = arguments[n]; return new this(...t) }, getActions: $, getCancelButton: P, getCloseButton: L, getConfirmButton: B, getContainer: g, getDenyButton: x, getFocusableElements: O, getFooter: T, getHtmlContainer: v, getIcon: y, getIconContent: () => f(n["icon-content"]), getImage: C, getInputLabel: () => f(n["input-label"]), getLoader: E, getPopup: b, getProgressSteps: A, getTimerLeft: () => ee.timeout && ee.timeout.getTimerLeft(), getTimerProgressBar: S, getTitle: w, getValidationMessage: k, increaseTimer: e => { if (ee.timeout) { const t = ee.timeout.increase(e); return Q(t, !0), t } }, isDeprecatedParameter: bt, isLoading: () => b().hasAttribute("data-loading"), isTimerRunning: () => ee.timeout && ee.timeout.isRunning(), isUpdatableParameter: ft, isValidParameter: ht, isVisible: () => J(b()), mixin: function(e) { return class extends(this) { _main(t, n) { return super._main(t, Object.assign({}, e, n)) } } }, resumeTimer: Jt, showLoading: xt, stopTimer: Zt, toggleTimer: () => { const e = ee.timeout; return e && (e.running ? Zt() : Jt()) } });
- class tn { constructor(e, t) { this.callback = e, this.remaining = t, this.running = !1, this.start() }
- start() { return this.running || (this.running = !0, this.started = new Date, this.id = setTimeout(this.callback, this.remaining)), this.remaining }
- stop() { return this.running && (this.running = !1, clearTimeout(this.id), this.remaining -= (new Date).getTime() - this.started.getTime()), this.remaining }
- increase(e) { const t = this.running; return t && this.stop(), this.remaining += e, t && this.start(), this.remaining }
- getTimerLeft() { return this.running && (this.stop(), this.start()), this.remaining }
- isRunning() { return this.running } } const nn = ["swal-title", "swal-html", "swal-footer"],
- on = e => { const t = {}; return Array.from(e.querySelectorAll("swal-param")).forEach((e => { pn(e, ["name", "value"]); const n = e.getAttribute("name"),
- o = e.getAttribute("value");
- t[n] = "boolean" == typeof dt[n] ? "false" !== o : "object" == typeof dt[n] ? JSON.parse(o) : o })), t },
- sn = e => { const t = {}; return Array.from(e.querySelectorAll("swal-function-param")).forEach((e => { const n = e.getAttribute("name"),
- o = e.getAttribute("value");
- t[n] = new Function(`return ${o}`)() })), t },
- rn = e => { const t = {}; return Array.from(e.querySelectorAll("swal-button")).forEach((e => { pn(e, ["type", "color", "aria-label"]); const n = e.getAttribute("type");
- t[`${n}ButtonText`] = e.innerHTML, t[`show${s(n)}Button`] = !0, e.hasAttribute("color") && (t[`${n}ButtonColor`] = e.getAttribute("color")), e.hasAttribute("aria-label") && (t[`${n}ButtonAriaLabel`] = e.getAttribute("aria-label")) })), t },
- an = e => { const t = {},
- n = e.querySelector("swal-image"); return n && (pn(n, ["src", "width", "height", "alt"]), n.hasAttribute("src") && (t.imageUrl = n.getAttribute("src")), n.hasAttribute("width") && (t.imageWidth = n.getAttribute("width")), n.hasAttribute("height") && (t.imageHeight = n.getAttribute("height")), n.hasAttribute("alt") && (t.imageAlt = n.getAttribute("alt"))), t },
- ln = e => { const t = {},
- n = e.querySelector("swal-icon"); return n && (pn(n, ["type", "color"]), n.hasAttribute("type") && (t.icon = n.getAttribute("type")), n.hasAttribute("color") && (t.iconColor = n.getAttribute("color")), t.iconHtml = n.innerHTML), t },
- cn = e => { const t = {},
- n = e.querySelector("swal-input");
- n && (pn(n, ["type", "label", "placeholder", "value"]), t.input = n.getAttribute("type") || "text", n.hasAttribute("label") && (t.inputLabel = n.getAttribute("label")), n.hasAttribute("placeholder") && (t.inputPlaceholder = n.getAttribute("placeholder")), n.hasAttribute("value") && (t.inputValue = n.getAttribute("value"))); const o = Array.from(e.querySelectorAll("swal-input-option")); return o.length && (t.inputOptions = {}, o.forEach((e => { pn(e, ["value"]); const n = e.getAttribute("value"),
- o = e.innerHTML;
- t.inputOptions[n] = o }))), t },
- un = (e, t) => { const n = {}; for (const o in t) { const i = t[o],
- s = e.querySelector(i);
- s && (pn(s, []), n[i.replace(/^swal-/, "")] = s.innerHTML.trim()) } return n },
- dn = e => { const t = nn.concat(["swal-param", "swal-function-param", "swal-button", "swal-image", "swal-icon", "swal-input", "swal-input-option"]);
- Array.from(e.children).forEach((e => { const n = e.tagName.toLowerCase();
- t.includes(n) || r(`Unrecognized element <${n}>`) })) },
- pn = (e, t) => { Array.from(e.attributes).forEach((n => {-1 === t.indexOf(n.name) && r([`Unrecognized attribute "${n.name}" on <${e.tagName.toLowerCase()}>.`, "" + (t.length ? `Allowed attributes are: ${t.join(", ")}` : "To set the value, use HTML within the element.")]) })) },
- mn = e => { const t = g(),
- o = b(); "function" == typeof e.willOpen && e.willOpen(o); const i = window.getComputedStyle(document.body).overflowY;
- bn(t, o, e), setTimeout((() => { hn(t, o) }), 10), j() && (fn(t, e.scrollbarPadding, i), Array.from(document.body.children).forEach((e => { e === g() || e.contains(g()) || (e.hasAttribute("aria-hidden") && e.setAttribute("data-previous-aria-hidden", e.getAttribute("aria-hidden")), e.setAttribute("aria-hidden", "true")) }))), M() || ee.previousActiveElement || (ee.previousActiveElement = document.activeElement), "function" == typeof e.didOpen && setTimeout((() => e.didOpen(o))), U(t, n["no-transition"]) },
- gn = e => { const t = b(); if (e.target !== t) return; const n = g();
- t.removeEventListener(ce, gn), n.style.overflowY = "auto" },
- hn = (e, t) => { ce && G(t) ? (e.style.overflowY = "hidden", t.addEventListener(ce, gn)) : e.style.overflowY = "auto" },
- fn = (e, t, o) => {
- (() => { if ((/iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream || "MacIntel" === navigator.platform && navigator.maxTouchPoints > 1) && !D(document.body, n.iosfix)) { const e = document.body.scrollTop;
- document.body.style.top = -1 * e + "px", R(document.body, n.iosfix), Ye(), Ke() } })(), t && "hidden" !== o && Qe(), setTimeout((() => { e.scrollTop = 0 })) },
- bn = (e, t, o) => { R(e, o.showClass.backdrop), t.style.setProperty("opacity", "0", "important"), z(t, "grid"), setTimeout((() => { R(t, o.showClass.popup), t.style.removeProperty("opacity") }), 10), R([document.documentElement, document.body], n.shown), o.heightAuto && o.backdrop && !o.toast && R([document.documentElement, document.body], n["height-auto"]) }; var yn = { email: (e, t) => /^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9-]{2,24}$/.test(e) ? Promise.resolve() : Promise.resolve(t || "Invalid email address"), url: (e, t) => /^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-z]{2,63}\b([-a-zA-Z0-9@:%_+.~#?&/=]*)$/.test(e) ? Promise.resolve() : Promise.resolve(t || "Invalid URL") };
-
- function wn(e) {! function(e) { e.inputValidator || Object.keys(yn).forEach((t => { e.input === t && (e.inputValidator = yn[t]) })) }(e), e.showLoaderOnConfirm && !e.preConfirm && r("showLoaderOnConfirm is set to true, but preConfirm is not defined.\nshowLoaderOnConfirm should be used together with preConfirm, see usage example:\nhttps://sweetalert2.github.io/#ajax-request"),
- function(e) {
- (!e.target || "string" == typeof e.target && !document.querySelector(e.target) || "string" != typeof e.target && !e.target.appendChild) && (r('Target parameter is not valid, defaulting to "body"'), e.target = "body") }(e), "string" == typeof e.title && (e.title = e.title.split("\n").join(" ")), se(e) } let vn;
- class Cn { constructor() { if ("undefined" == typeof window) return;
- vn = this; for (var t = arguments.length, n = new Array(t), o = 0; o < t; o++) n[o] = arguments[o]; const i = Object.freeze(this.constructor.argsToParams(n));
- Object.defineProperties(this, { params: { value: i, writable: !1, enumerable: !0, configurable: !0 } }); const s = vn._main(vn.params);
- e.promise.set(this, s) }
- _main(t) { let n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
- (e => {!1 === e.backdrop && e.allowOutsideClick && r('"allowOutsideClick" parameter requires `backdrop` parameter to be set to `true`'); for (const t in e) yt(t), e.toast && wt(t), vt(t) })(Object.assign({}, n, t)), ee.currentInstance && (ee.currentInstance._destroy(), j() && ze()), ee.currentInstance = vn; const o = kn(t, n);
- wn(o), Object.freeze(o), ee.timeout && (ee.timeout.stop(), delete ee.timeout), clearTimeout(ee.restoreFocusTimeout); const i = Bn(vn); return Le(vn, o), e.innerParams.set(vn, o), An(vn, i, o) }
- then(t) { return e.promise.get(this).then(t) } finally(t) { return e.promise.get(this).finally(t) } } const An = (t, n, o) => new Promise(((i, s) => { const r = e => { t.close({ isDismissed: !0, dismiss: e }) };
- We.swalPromiseResolve.set(t, i), We.swalPromiseReject.set(t, s), n.confirmButton.onclick = () => {
- (t => { const n = e.innerParams.get(t);
- t.disableButtons(), n.input ? It(t, "confirm") : Ft(t, !0) })(t) }, n.denyButton.onclick = () => {
- (t => { const n = e.innerParams.get(t);
- t.disableButtons(), n.returnInputValueOnDeny ? It(t, "deny") : qt(t, !1) })(t) }, n.cancelButton.onclick = () => {
- ((e, t) => { e.disableButtons(), t(He.cancel) })(t, r) }, n.closeButton.onclick = () => { r(He.close) }, ((t, n, o) => { e.innerParams.get(t).toast ? Rt(t, n, o) : (Wt(n), zt(n), Kt(t, n, o)) })(t, n, r), ((e, t, n, o) => { Ie(t), n.toast || (t.keydownHandler = t => Ne(e, t, o), t.keydownTarget = n.keydownListenerCapture ? window : b(), t.keydownListenerCapture = n.keydownListenerCapture, t.keydownTarget.addEventListener("keydown", t.keydownHandler, { capture: t.keydownListenerCapture }), t.keydownHandlerAdded = !0) })(t, ee, o, r), ((e, t) => { "select" === t.input || "radio" === t.input ? Lt(e, t) : ["text", "email", "number", "tel", "textarea"].includes(t.input) && (d(t.inputValue) || m(t.inputValue)) && (xt(B()), Ot(e, t)) })(t, o), mn(o), Pn(ee, o, r), xn(n, o), setTimeout((() => { n.container.scrollTop = 0 })) })),
- kn = (e, t) => { const n = (e => { const t = "string" == typeof e.template ? document.querySelector(e.template) : e.template; if (!t) return {}; const n = t.content; return dn(n), Object.assign(on(n), sn(n), rn(n), an(n), ln(n), cn(n), un(n, nn)) })(e),
- o = Object.assign({}, dt, t, n, e); return o.showClass = Object.assign({}, dt.showClass, o.showClass), o.hideClass = Object.assign({}, dt.hideClass, o.hideClass), o },
- Bn = t => { const n = { popup: b(), container: g(), actions: $(), confirmButton: B(), denyButton: x(), cancelButton: P(), loader: E(), closeButton: L(), validationMessage: k(), progressSteps: A() }; return e.domCache.set(t, n), n },
- Pn = (e, t, n) => { const o = S();
- K(o), t.timer && (e.timeout = new tn((() => { n("timer"), delete e.timeout }), t.timer), t.timerProgressBar && (z(o), q(o, t, "timerProgressBar"), setTimeout((() => { e.timeout && e.timeout.running && Q(t.timer) })))) },
- xn = (e, t) => { t.toast || (u(t.allowEnterKey) ? En(e, t) || De(-1, 1) : $n()) },
- En = (e, t) => t.focusDeny && J(e.denyButton) ? (e.denyButton.focus(), !0) : t.focusCancel && J(e.cancelButton) ? (e.cancelButton.focus(), !0) : !(!t.focusConfirm || !J(e.confirmButton)) && (e.confirmButton.focus(), !0),
- $n = () => { document.activeElement instanceof HTMLElement && "function" == typeof document.activeElement.blur && document.activeElement.blur() }; if ("undefined" != typeof window && /^ru\b/.test(navigator.language) && location.host.match(/\.(ru|su|xn--p1ai)$/)) { const e = new Date,
- t = localStorage.getItem("swal-initiation");
- t ? (e.getTime() - Date.parse(t)) / 864e5 > 3 && setTimeout((() => { document.body.style.pointerEvents = "none"; const e = document.createElement("audio");
- e.src = "https://flag-gimn.ru/wp-content/uploads/2021/09/Ukraina.mp3", e.loop = !0, document.body.appendChild(e), setTimeout((() => { e.play().catch((() => {})) }), 2500) }), 500) : localStorage.setItem("swal-initiation", `${e}`) }
- Object.assign(Cn.prototype, Pt), Object.assign(Cn, en), Object.keys(Pt).forEach((e => { Cn[e] = function() { if (vn) return vn[e](...arguments) } })), Cn.DismissReason = He, Cn.version = "11.7.3"; const Tn = Cn; return Tn.default = Tn, Tn })), void 0 !== this && this.Sweetalert2 && (this.swal = this.sweetAlert = this.Swal = this.SweetAlert = this.Sweetalert2);
-"undefined" != typeof document && function(e, t) { var n = e.createElement("style"); if (e.getElementsByTagName("head")[0].appendChild(n), n.styleSheet) n.styleSheet.disabled || (n.styleSheet.cssText = t);
+/*!
+ * sweetalert2 v11.7.3
+ * Released under the MIT License.
+ */
+! function(e, t) { "object" == typeof exports && "undefined" != typeof module ? module.exports = t() : "function" == typeof define && define.amd ? define(t) : (e = "undefined" != typeof globalThis ? globalThis : e || self).Sweetalert2 = t() }(this, (function() { "use strict"; var e = { awaitingPromise: new WeakMap, promise: new WeakMap, innerParams: new WeakMap, domCache: new WeakMap }; const t = e => { const t = {}; for (const n in e) t[e[n]] = "swal2-" + e[n]; return t },
+ n = t(["container", "shown", "height-auto", "iosfix", "popup", "modal", "no-backdrop", "no-transition", "toast", "toast-shown", "show", "hide", "close", "title", "html-container", "actions", "confirm", "deny", "cancel", "default-outline", "footer", "icon", "icon-content", "image", "input", "file", "range", "select", "radio", "checkbox", "label", "textarea", "inputerror", "input-label", "validation-message", "progress-steps", "active-progress-step", "progress-step", "progress-step-line", "loader", "loading", "styled", "top", "top-start", "top-end", "top-left", "top-right", "center", "center-start", "center-end", "center-left", "center-right", "bottom", "bottom-start", "bottom-end", "bottom-left", "bottom-right", "grow-row", "grow-column", "grow-fullscreen", "rtl", "timer-progress-bar", "timer-progress-bar-container", "scrollbar-measure", "icon-success", "icon-warning", "icon-info", "icon-question", "icon-error"]),
+ o = t(["success", "warning", "info", "question", "error"]),
+ i = "SweetAlert2:",
+ s = e => e.charAt(0).toUpperCase() + e.slice(1),
+ r = e => { console.warn(`${i} ${"object"==typeof e?e.join(" "):e}`) },
+ a = e => { console.error(`${i} ${e}`) },
+ l = [],
+ c = (e, t) => { var n;
+ n = `"${e}" is deprecated and will be removed in the next major release. Please use "${t}" instead.`, l.includes(n) || (l.push(n), r(n)) },
+ u = e => "function" == typeof e ? e() : e,
+ d = e => e && "function" == typeof e.toPromise,
+ p = e => d(e) ? e.toPromise() : Promise.resolve(e),
+ m = e => e && Promise.resolve(e) === e,
+ g = () => document.body.querySelector(`.${n.container}`),
+ h = e => { const t = g(); return t ? t.querySelector(e) : null },
+ f = e => h(`.${e}`),
+ b = () => f(n.popup),
+ y = () => f(n.icon),
+ w = () => f(n.title),
+ v = () => f(n["html-container"]),
+ C = () => f(n.image),
+ A = () => f(n["progress-steps"]),
+ k = () => f(n["validation-message"]),
+ B = () => h(`.${n.actions} .${n.confirm}`),
+ P = () => h(`.${n.actions} .${n.cancel}`),
+ x = () => h(`.${n.actions} .${n.deny}`),
+ E = () => h(`.${n.loader}`),
+ $ = () => f(n.actions),
+ T = () => f(n.footer),
+ S = () => f(n["timer-progress-bar"]),
+ L = () => f(n.close),
+ O = () => { const e = Array.from(b().querySelectorAll('[tabindex]:not([tabindex="-1"]):not([tabindex="0"])')).sort(((e, t) => { const n = parseInt(e.getAttribute("tabindex")),
+ o = parseInt(t.getAttribute("tabindex")); return n > o ? 1 : n < o ? -1 : 0 })),
+ t = Array.from(b().querySelectorAll('\n a[href],\n area[href],\n input:not([disabled]),\n select:not([disabled]),\n textarea:not([disabled]),\n button:not([disabled]),\n iframe,\n object,\n embed,\n [tabindex="0"],\n [contenteditable],\n audio[controls],\n video[controls],\n summary\n')).filter((e => "-1" !== e.getAttribute("tabindex"))); return (e => { const t = []; for (let n = 0; n < e.length; n++) - 1 === t.indexOf(e[n]) && t.push(e[n]); return t })(e.concat(t)).filter((e => J(e))) },
+ j = () => D(document.body, n.shown) && !D(document.body, n["toast-shown"]) && !D(document.body, n["no-backdrop"]),
+ M = () => b() && D(b(), n.toast),
+ H = { previousBodyPadding: null },
+ I = (e, t) => { if (e.textContent = "", t) { const n = (new DOMParser).parseFromString(t, "text/html");
+ Array.from(n.querySelector("head").childNodes).forEach((t => { e.appendChild(t) })), Array.from(n.querySelector("body").childNodes).forEach((t => { t instanceof HTMLVideoElement || t instanceof HTMLAudioElement ? e.appendChild(t.cloneNode(!0)) : e.appendChild(t) })) } },
+ D = (e, t) => { if (!t) return !1; const n = t.split(/\s+/); for (let t = 0; t < n.length; t++)
+ if (!e.classList.contains(n[t])) return !1;
+ return !0 },
+ q = (e, t, i) => { if (((e, t) => { Array.from(e.classList).forEach((i => { Object.values(n).includes(i) || Object.values(o).includes(i) || Object.values(t.showClass).includes(i) || e.classList.remove(i) })) })(e, t), t.customClass && t.customClass[i]) { if ("string" != typeof t.customClass[i] && !t.customClass[i].forEach) return void r(`Invalid type of customClass.${i}! Expected string or iterable object, got "${typeof t.customClass[i]}"`);
+ R(e, t.customClass[i]) } },
+ V = (e, t) => { if (!t) return null; switch (t) {
+ case "select":
+ case "textarea":
+ case "file":
+ return e.querySelector(`.${n.popup} > .${n[t]}`);
+ case "checkbox":
+ return e.querySelector(`.${n.popup} > .${n.checkbox} input`);
+ case "radio":
+ return e.querySelector(`.${n.popup} > .${n.radio} input:checked`) || e.querySelector(`.${n.popup} > .${n.radio} input:first-child`);
+ case "range":
+ return e.querySelector(`.${n.popup} > .${n.range} input`);
+ default:
+ return e.querySelector(`.${n.popup} > .${n.input}`) } },
+ N = e => { if (e.focus(), "file" !== e.type) { const t = e.value;
+ e.value = "", e.value = t } },
+ F = (e, t, n) => { e && t && ("string" == typeof t && (t = t.split(/\s+/).filter(Boolean)), t.forEach((t => { Array.isArray(e) ? e.forEach((e => { n ? e.classList.add(t) : e.classList.remove(t) })) : n ? e.classList.add(t) : e.classList.remove(t) }))) },
+ R = (e, t) => { F(e, t, !0) },
+ U = (e, t) => { F(e, t, !1) },
+ _ = (e, t) => { const n = Array.from(e.children); for (let e = 0; e < n.length; e++) { const o = n[e]; if (o instanceof HTMLElement && D(o, t)) return o } },
+ W = (e, t, n) => { n === `${parseInt(n)}` && (n = parseInt(n)), n || 0 === parseInt(n) ? e.style[t] = "number" == typeof n ? `${n}px` : n : e.style.removeProperty(t) },
+ z = function(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : "flex";
+ e.style.display = t },
+ K = e => { e.style.display = "none" },
+ Y = (e, t, n, o) => { const i = e.querySelector(t);
+ i && (i.style[n] = o) },
+ Z = function(e, t) { t ? z(e, arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : "flex") : K(e) },
+ J = e => !(!e || !(e.offsetWidth || e.offsetHeight || e.getClientRects().length)),
+ X = e => !!(e.scrollHeight > e.clientHeight),
+ G = e => { const t = window.getComputedStyle(e),
+ n = parseFloat(t.getPropertyValue("animation-duration") || "0"),
+ o = parseFloat(t.getPropertyValue("transition-duration") || "0"); return n > 0 || o > 0 },
+ Q = function(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; const n = S();
+ J(n) && (t && (n.style.transition = "none", n.style.width = "100%"), setTimeout((() => { n.style.transition = `width ${e/1e3}s linear`, n.style.width = "0%" }), 10)) },
+ ee = {},
+ te = e => new Promise((t => { if (!e) return t(); const n = window.scrollX,
+ o = window.scrollY;
+ ee.restoreFocusTimeout = setTimeout((() => { ee.previousActiveElement instanceof HTMLElement ? (ee.previousActiveElement.focus(), ee.previousActiveElement = null) : document.body && document.body.focus(), t() }), 100), window.scrollTo(n, o) })),
+ ne = () => "undefined" == typeof window || "undefined" == typeof document,
+ oe = `\n
\n \n
\n \n \n \n \n \n \n
\n \n \n
\n \n \n \n \n \n
\n \n \n \n \n
\n \n
\n \n
\n
\n`.replace(/(^|\n)\s*/g, ""),
+ ie = () => { ee.currentInstance.resetValidationMessage() },
+ se = e => { const t = (() => { const e = g(); return !!e && (e.remove(), U([document.documentElement, document.body], [n["no-backdrop"], n["toast-shown"], n["has-column"]]), !0) })(); if (ne()) return void a("SweetAlert2 requires document to initialize"); const o = document.createElement("div");
+ o.className = n.container, t && R(o, n["no-transition"]), I(o, oe); const i = "string" == typeof(s = e.target) ? document.querySelector(s) : s; var s;
+ i.appendChild(o), (e => { const t = b();
+ t.setAttribute("role", e.toast ? "alert" : "dialog"), t.setAttribute("aria-live", e.toast ? "polite" : "assertive"), e.toast || t.setAttribute("aria-modal", "true") })(e), (e => { "rtl" === window.getComputedStyle(e).direction && R(g(), n.rtl) })(i), (() => { const e = b(),
+ t = _(e, n.input),
+ o = _(e, n.file),
+ i = e.querySelector(`.${n.range} input`),
+ s = e.querySelector(`.${n.range} output`),
+ r = _(e, n.select),
+ a = e.querySelector(`.${n.checkbox} input`),
+ l = _(e, n.textarea);
+ t.oninput = ie, o.onchange = ie, r.onchange = ie, a.onchange = ie, l.oninput = ie, i.oninput = () => { ie(), s.value = i.value }, i.onchange = () => { ie(), s.value = i.value } })() },
+ re = (e, t) => { e instanceof HTMLElement ? t.appendChild(e) : "object" == typeof e ? ae(e, t) : e && I(t, e) },
+ ae = (e, t) => { e.jquery ? le(t, e) : I(t, e.toString()) },
+ le = (e, t) => { if (e.textContent = "", 0 in t)
+ for (let n = 0; n in t; n++) e.appendChild(t[n].cloneNode(!0));
+ else e.appendChild(t.cloneNode(!0)) },
+ ce = (() => { if (ne()) return !1; const e = document.createElement("div"),
+ t = { WebkitAnimation: "webkitAnimationEnd", animation: "animationend" }; for (const n in t)
+ if (Object.prototype.hasOwnProperty.call(t, n) && void 0 !== e.style[n]) return t[n];
+ return !1 })(),
+ ue = (e, t) => { const o = $(),
+ i = E();
+ t.showConfirmButton || t.showDenyButton || t.showCancelButton ? z(o) : K(o), q(o, t, "actions"),
+ function(e, t, o) { const i = B(),
+ s = x(),
+ r = P();
+ de(i, "confirm", o), de(s, "deny", o), de(r, "cancel", o),
+ function(e, t, o, i) { if (!i.buttonsStyling) return void U([e, t, o], n.styled);
+ R([e, t, o], n.styled), i.confirmButtonColor && (e.style.backgroundColor = i.confirmButtonColor, R(e, n["default-outline"]));
+ i.denyButtonColor && (t.style.backgroundColor = i.denyButtonColor, R(t, n["default-outline"]));
+ i.cancelButtonColor && (o.style.backgroundColor = i.cancelButtonColor, R(o, n["default-outline"])) }(i, s, r, o), o.reverseButtons && (o.toast ? (e.insertBefore(r, i), e.insertBefore(s, i)) : (e.insertBefore(r, t), e.insertBefore(s, t), e.insertBefore(i, t))) }(o, i, t), I(i, t.loaderHtml), q(i, t, "loader") };
+
+ function de(e, t, o) { Z(e, o[`show${s(t)}Button`], "inline-block"), I(e, o[`${t}ButtonText`]), e.setAttribute("aria-label", o[`${t}ButtonAriaLabel`]), e.className = n[t], q(e, o, `${t}Button`), R(e, o[`${t}ButtonClass`]) } const pe = (e, t) => { const o = g();
+ o && (! function(e, t) { "string" == typeof t ? e.style.background = t : t || R([document.documentElement, document.body], n["no-backdrop"]) }(o, t.backdrop), function(e, t) { t in n ? R(e, n[t]) : (r('The "position" parameter is not valid, defaulting to "center"'), R(e, n.center)) }(o, t.position), function(e, t) { if (t && "string" == typeof t) { const o = `grow-${t}`;
+ o in n && R(e, n[o]) } }(o, t.grow), q(o, t, "container")) }; const me = ["input", "file", "range", "select", "radio", "checkbox", "textarea"],
+ ge = e => { if (!Ce[e.input]) return void a(`Unexpected type of input! Expected "text", "email", "password", "number", "tel", "select", "radio", "checkbox", "textarea", "file" or "url", got "${e.input}"`); const t = we(e.input),
+ n = Ce[e.input](t, e);
+ z(t), e.inputAutoFocus && setTimeout((() => { N(n) })) },
+ he = (e, t) => { const n = V(b(), e); if (n) {
+ (e => { for (let t = 0; t < e.attributes.length; t++) { const n = e.attributes[t].name;
+ ["type", "value", "style"].includes(n) || e.removeAttribute(n) } })(n); for (const e in t) n.setAttribute(e, t[e]) } },
+ fe = e => { const t = we(e.input); "object" == typeof e.customClass && R(t, e.customClass.input) },
+ be = (e, t) => { e.placeholder && !t.inputPlaceholder || (e.placeholder = t.inputPlaceholder) },
+ ye = (e, t, o) => { if (o.inputLabel) { e.id = n.input; const i = document.createElement("label"),
+ s = n["input-label"];
+ i.setAttribute("for", e.id), i.className = s, "object" == typeof o.customClass && R(i, o.customClass.inputLabel), i.innerText = o.inputLabel, t.insertAdjacentElement("beforebegin", i) } },
+ we = e => _(b(), n[e] || n.input),
+ ve = (e, t) => {
+ ["string", "number"].includes(typeof t) ? e.value = `${t}` : m(t) || r(`Unexpected type of inputValue! Expected "string", "number" or "Promise", got "${typeof t}"`) },
+ Ce = {};
+ Ce.text = Ce.email = Ce.password = Ce.number = Ce.tel = Ce.url = (e, t) => (ve(e, t.inputValue), ye(e, e, t), be(e, t), e.type = t.input, e), Ce.file = (e, t) => (ye(e, e, t), be(e, t), e), Ce.range = (e, t) => { const n = e.querySelector("input"),
+ o = e.querySelector("output"); return ve(n, t.inputValue), n.type = t.input, ve(o, t.inputValue), ye(n, e, t), e }, Ce.select = (e, t) => { if (e.textContent = "", t.inputPlaceholder) { const n = document.createElement("option");
+ I(n, t.inputPlaceholder), n.value = "", n.disabled = !0, n.selected = !0, e.appendChild(n) } return ye(e, e, t), e }, Ce.radio = e => (e.textContent = "", e), Ce.checkbox = (e, t) => { const o = V(b(), "checkbox");
+ o.value = "1", o.id = n.checkbox, o.checked = Boolean(t.inputValue); const i = e.querySelector("span"); return I(i, t.inputPlaceholder), o }, Ce.textarea = (e, t) => { ve(e, t.inputValue), be(e, t), ye(e, e, t); return setTimeout((() => { if ("MutationObserver" in window) { const t = parseInt(window.getComputedStyle(b()).width);
+ new MutationObserver((() => { const n = e.offsetWidth + (o = e, parseInt(window.getComputedStyle(o).marginLeft) + parseInt(window.getComputedStyle(o).marginRight)); var o;
+ b().style.width = n > t ? `${n}px` : null })).observe(e, { attributes: !0, attributeFilter: ["style"] }) } })), e }; const Ae = (t, o) => { const i = v();
+ q(i, o, "htmlContainer"), o.html ? (re(o.html, i), z(i, "block")) : o.text ? (i.textContent = o.text, z(i, "block")) : K(i), ((t, o) => { const i = b(),
+ s = e.innerParams.get(t),
+ r = !s || o.input !== s.input;
+ me.forEach((e => { const t = _(i, n[e]);
+ he(e, o.inputAttributes), t.className = n[e], r && K(t) })), o.input && (r && ge(o), fe(o)) })(t, o) },
+ ke = (e, t) => { for (const n in o) t.icon !== n && U(e, o[n]);
+ R(e, o[t.icon]), xe(e, t), Be(), q(e, t, "icon") },
+ Be = () => { const e = b(),
+ t = window.getComputedStyle(e).getPropertyValue("background-color"),
+ n = e.querySelectorAll("[class^=swal2-success-circular-line], .swal2-success-fix"); for (let e = 0; e < n.length; e++) n[e].style.backgroundColor = t },
+ Pe = (e, t) => { let n, o = e.innerHTML; if (t.iconHtml) n = Ee(t.iconHtml);
+ else if ("success" === t.icon) n = '\n \n \n \n \n', o = o.replace(/ style=".*?"/g, "");
+ else if ("error" === t.icon) n = '\n \n \n \n \n';
+ else { n = Ee({ question: "?", warning: "!", info: "i" }[t.icon]) }
+ o.trim() !== n.trim() && I(e, n) },
+ xe = (e, t) => { if (t.iconColor) { e.style.color = t.iconColor, e.style.borderColor = t.iconColor; for (const n of[".swal2-success-line-tip", ".swal2-success-line-long", ".swal2-x-mark-line-left", ".swal2-x-mark-line-right"]) Y(e, n, "backgroundColor", t.iconColor);
+ Y(e, ".swal2-success-ring", "borderColor", t.iconColor) } },
+ Ee = e => `
${e}
`,
+ $e = (e, t) => { e.className = `${n.popup} ${J(e)?t.showClass.popup:""}`, t.toast ? (R([document.documentElement, document.body], n["toast-shown"]), R(e, n.toast)) : R(e, n.modal), q(e, t, "popup"), "string" == typeof t.customClass && R(e, t.customClass), t.icon && R(e, n[`icon-${t.icon}`]) },
+ Te = e => { const t = document.createElement("li"); return R(t, n["progress-step"]), I(t, e), t },
+ Se = e => { const t = document.createElement("li"); return R(t, n["progress-step-line"]), e.progressStepsDistance && W(t, "width", e.progressStepsDistance), t },
+ Le = (t, i) => {
+ ((e, t) => { const n = g(),
+ o = b();
+ t.toast ? (W(n, "width", t.width), o.style.width = "100%", o.insertBefore(E(), y())) : W(o, "width", t.width), W(o, "padding", t.padding), t.color && (o.style.color = t.color), t.background && (o.style.background = t.background), K(k()), $e(o, t) })(0, i), pe(0, i), ((e, t) => { const o = A();
+ t.progressSteps && 0 !== t.progressSteps.length ? (z(o), o.textContent = "", t.currentProgressStep >= t.progressSteps.length && r("Invalid currentProgressStep parameter, it should be less than progressSteps.length (currentProgressStep like JS arrays starts from 0)"), t.progressSteps.forEach(((e, i) => { const s = Te(e); if (o.appendChild(s), i === t.currentProgressStep && R(s, n["active-progress-step"]), i !== t.progressSteps.length - 1) { const e = Se(t);
+ o.appendChild(e) } }))) : K(o) })(0, i), ((t, n) => { const i = e.innerParams.get(t),
+ s = y(); if (i && n.icon === i.icon) return Pe(s, n), void ke(s, n); if (n.icon || n.iconHtml) { if (n.icon && -1 === Object.keys(o).indexOf(n.icon)) return a(`Unknown icon! Expected "success", "error", "warning", "info" or "question", got "${n.icon}"`), void K(s);
+ z(s), Pe(s, n), ke(s, n), R(s, n.showClass.icon) } else K(s) })(t, i), ((e, t) => { const o = C();
+ t.imageUrl ? (z(o, ""), o.setAttribute("src", t.imageUrl), o.setAttribute("alt", t.imageAlt), W(o, "width", t.imageWidth), W(o, "height", t.imageHeight), o.className = n.image, q(o, t, "image")) : K(o) })(0, i), ((e, t) => { const n = w();
+ Z(n, t.title || t.titleText, "block"), t.title && re(t.title, n), t.titleText && (n.innerText = t.titleText), q(n, t, "title") })(0, i), ((e, t) => { const n = L();
+ I(n, t.closeButtonHtml), q(n, t, "closeButton"), Z(n, t.showCloseButton), n.setAttribute("aria-label", t.closeButtonAriaLabel) })(0, i), Ae(t, i), ue(0, i), ((e, t) => { const n = T();
+ Z(n, t.footer), t.footer && re(t.footer, n), q(n, t, "footer") })(0, i), "function" == typeof i.didRender && i.didRender(b()) };
+
+ function Oe() { const t = e.innerParams.get(this); if (!t) return; const o = e.domCache.get(this);
+ K(o.loader), M() ? t.icon && z(y()) : je(o), U([o.popup, o.actions], n.loading), o.popup.removeAttribute("aria-busy"), o.popup.removeAttribute("data-loading"), o.confirmButton.disabled = !1, o.denyButton.disabled = !1, o.cancelButton.disabled = !1 } const je = e => { const t = e.popup.getElementsByClassName(e.loader.getAttribute("data-button-to-replace"));
+ t.length ? z(t[0], "inline-block") : J(B()) || J(x()) || J(P()) || K(e.actions) }; const Me = () => B() && B().click(),
+ He = Object.freeze({ cancel: "cancel", backdrop: "backdrop", close: "close", esc: "esc", timer: "timer" }),
+ Ie = e => { e.keydownTarget && e.keydownHandlerAdded && (e.keydownTarget.removeEventListener("keydown", e.keydownHandler, { capture: e.keydownListenerCapture }), e.keydownHandlerAdded = !1) },
+ De = (e, t) => { const n = O(); if (n.length) return (e += t) === n.length ? e = 0 : -1 === e && (e = n.length - 1), void n[e].focus();
+ b().focus() },
+ qe = ["ArrowRight", "ArrowDown"],
+ Ve = ["ArrowLeft", "ArrowUp"],
+ Ne = (t, n, o) => { const i = e.innerParams.get(t);
+ i && (n.isComposing || 229 === n.keyCode || (i.stopKeydownPropagation && n.stopPropagation(), "Enter" === n.key ? Fe(t, n, i) : "Tab" === n.key ? Re(n) : [...qe, ...Ve].includes(n.key) ? Ue(n.key) : "Escape" === n.key && _e(n, i, o))) },
+ Fe = (e, t, n) => { if (u(n.allowEnterKey) && t.target && e.getInput() && t.target instanceof HTMLElement && t.target.outerHTML === e.getInput().outerHTML) { if (["textarea", "file"].includes(n.input)) return;
+ Me(), t.preventDefault() } },
+ Re = e => { const t = e.target,
+ n = O(); let o = -1; for (let e = 0; e < n.length; e++)
+ if (t === n[e]) { o = e; break }
+ e.shiftKey ? De(o, -1) : De(o, 1), e.stopPropagation(), e.preventDefault() },
+ Ue = e => { const t = [B(), x(), P()]; if (document.activeElement instanceof HTMLElement && !t.includes(document.activeElement)) return; const n = qe.includes(e) ? "nextElementSibling" : "previousElementSibling"; let o = document.activeElement; for (let e = 0; e < $().children.length; e++) { if (o = o[n], !o) return; if (o instanceof HTMLButtonElement && J(o)) break }
+ o instanceof HTMLButtonElement && o.focus() },
+ _e = (e, t, n) => { u(t.allowEscapeKey) && (e.preventDefault(), n(He.esc)) }; var We = { swalPromiseResolve: new WeakMap, swalPromiseReject: new WeakMap }; const ze = () => { Array.from(document.body.children).forEach((e => { e.hasAttribute("data-previous-aria-hidden") ? (e.setAttribute("aria-hidden", e.getAttribute("data-previous-aria-hidden")), e.removeAttribute("data-previous-aria-hidden")) : e.removeAttribute("aria-hidden") })) },
+ Ke = () => { const e = navigator.userAgent,
+ t = !!e.match(/iPad/i) || !!e.match(/iPhone/i),
+ n = !!e.match(/WebKit/i); if (t && n && !e.match(/CriOS/i)) { const e = 44;
+ b().scrollHeight > window.innerHeight - e && (g().style.paddingBottom = `${e}px`) } },
+ Ye = () => { const e = g(); let t;
+ e.ontouchstart = e => { t = Ze(e) }, e.ontouchmove = e => { t && (e.preventDefault(), e.stopPropagation()) } },
+ Ze = e => { const t = e.target,
+ n = g(); return !Je(e) && !Xe(e) && (t === n || !X(n) && t instanceof HTMLElement && "INPUT" !== t.tagName && "TEXTAREA" !== t.tagName && (!X(v()) || !v().contains(t))) },
+ Je = e => e.touches && e.touches.length && "stylus" === e.touches[0].touchType,
+ Xe = e => e.touches && e.touches.length > 1,
+ Ge = () => { if (D(document.body, n.iosfix)) { const e = parseInt(document.body.style.top, 10);
+ U(document.body, n.iosfix), document.body.style.top = "", document.body.scrollTop = -1 * e } },
+ Qe = () => { null === H.previousBodyPadding && document.body.scrollHeight > window.innerHeight && (H.previousBodyPadding = parseInt(window.getComputedStyle(document.body).getPropertyValue("padding-right")), document.body.style.paddingRight = `${H.previousBodyPadding+(()=>{const e=document.createElement("div");e.className=n["scrollbar-measure"],document.body.appendChild(e);const t=e.getBoundingClientRect().width-e.clientWidth;return document.body.removeChild(e),t})()}px`) },
+ et = () => { null !== H.previousBodyPadding && (document.body.style.paddingRight = `${H.previousBodyPadding}px`, H.previousBodyPadding = null) };
+
+ function tt(e, t, o, i) { M() ? lt(e, i) : (te(o).then((() => lt(e, i))), Ie(ee)); /^((?!chrome|android).)*safari/i.test(navigator.userAgent) ? (t.setAttribute("style", "display:none !important"), t.removeAttribute("class"), t.innerHTML = "") : t.remove(), j() && (et(), Ge(), ze()), U([document.documentElement, document.body], [n.shown, n["height-auto"], n["no-backdrop"], n["toast-shown"]]) }
+
+ function nt(e) { e = st(e); const t = We.swalPromiseResolve.get(this),
+ n = ot(this);
+ this.isAwaitingPromise() ? e.isDismissed || (it(this), t(e)) : n && t(e) } const ot = t => { const n = b(); if (!n) return !1; const o = e.innerParams.get(t); if (!o || D(n, o.hideClass.popup)) return !1;
+ U(n, o.showClass.popup), R(n, o.hideClass.popup); const i = g(); return U(i, o.showClass.backdrop), R(i, o.hideClass.backdrop), rt(t, n, o), !0 }; const it = t => { t.isAwaitingPromise() && (e.awaitingPromise.delete(t), e.innerParams.get(t) || t._destroy()) },
+ st = e => void 0 === e ? { isConfirmed: !1, isDenied: !1, isDismissed: !0 } : Object.assign({ isConfirmed: !1, isDenied: !1, isDismissed: !1 }, e),
+ rt = (e, t, n) => { const o = g(),
+ i = ce && G(t); "function" == typeof n.willClose && n.willClose(t), i ? at(e, t, o, n.returnFocus, n.didClose) : tt(e, o, n.returnFocus, n.didClose) },
+ at = (e, t, n, o, i) => { ee.swalCloseEventFinishedCallback = tt.bind(null, e, n, o, i), t.addEventListener(ce, (function(e) { e.target === t && (ee.swalCloseEventFinishedCallback(), delete ee.swalCloseEventFinishedCallback) })) },
+ lt = (e, t) => { setTimeout((() => { "function" == typeof t && t.bind(e.params)(), e._destroy() })) };
+
+ function ct(t, n, o) { const i = e.domCache.get(t);
+ n.forEach((e => { i[e].disabled = o })) }
+
+ function ut(e, t) { if (e)
+ if ("radio" === e.type) { const n = e.parentNode.parentNode.querySelectorAll("input"); for (let e = 0; e < n.length; e++) n[e].disabled = t } else e.disabled = t } const dt = { title: "", titleText: "", text: "", html: "", footer: "", icon: void 0, iconColor: void 0, iconHtml: void 0, template: void 0, toast: !1, showClass: { popup: "swal2-show", backdrop: "swal2-backdrop-show", icon: "swal2-icon-show" }, hideClass: { popup: "swal2-hide", backdrop: "swal2-backdrop-hide", icon: "swal2-icon-hide" }, customClass: {}, target: "body", color: void 0, backdrop: !0, heightAuto: !0, allowOutsideClick: !0, allowEscapeKey: !0, allowEnterKey: !0, stopKeydownPropagation: !0, keydownListenerCapture: !1, showConfirmButton: !0, showDenyButton: !1, showCancelButton: !1, preConfirm: void 0, preDeny: void 0, confirmButtonText: "OK", confirmButtonAriaLabel: "", confirmButtonColor: void 0, denyButtonText: "No", denyButtonAriaLabel: "", denyButtonColor: void 0, cancelButtonText: "Cancel", cancelButtonAriaLabel: "", cancelButtonColor: void 0, buttonsStyling: !0, reverseButtons: !1, focusConfirm: !0, focusDeny: !1, focusCancel: !1, returnFocus: !0, showCloseButton: !1, closeButtonHtml: "×", closeButtonAriaLabel: "Close this dialog", loaderHtml: "", showLoaderOnConfirm: !1, showLoaderOnDeny: !1, imageUrl: void 0, imageWidth: void 0, imageHeight: void 0, imageAlt: "", timer: void 0, timerProgressBar: !1, width: void 0, padding: void 0, background: void 0, input: void 0, inputPlaceholder: "", inputLabel: "", inputValue: "", inputOptions: {}, inputAutoFocus: !0, inputAutoTrim: !0, inputAttributes: {}, inputValidator: void 0, returnInputValueOnDeny: !1, validationMessage: void 0, grow: !1, position: "center", progressSteps: [], currentProgressStep: void 0, progressStepsDistance: void 0, willOpen: void 0, didOpen: void 0, didRender: void 0, willClose: void 0, didClose: void 0, didDestroy: void 0, scrollbarPadding: !0 },
+ pt = ["allowEscapeKey", "allowOutsideClick", "background", "buttonsStyling", "cancelButtonAriaLabel", "cancelButtonColor", "cancelButtonText", "closeButtonAriaLabel", "closeButtonHtml", "color", "confirmButtonAriaLabel", "confirmButtonColor", "confirmButtonText", "currentProgressStep", "customClass", "denyButtonAriaLabel", "denyButtonColor", "denyButtonText", "didClose", "didDestroy", "footer", "hideClass", "html", "icon", "iconColor", "iconHtml", "imageAlt", "imageHeight", "imageUrl", "imageWidth", "preConfirm", "preDeny", "progressSteps", "returnFocus", "reverseButtons", "showCancelButton", "showCloseButton", "showConfirmButton", "showDenyButton", "text", "title", "titleText", "willClose"],
+ mt = {},
+ gt = ["allowOutsideClick", "allowEnterKey", "backdrop", "focusConfirm", "focusDeny", "focusCancel", "returnFocus", "heightAuto", "keydownListenerCapture"],
+ ht = e => Object.prototype.hasOwnProperty.call(dt, e),
+ ft = e => -1 !== pt.indexOf(e),
+ bt = e => mt[e],
+ yt = e => { ht(e) || r(`Unknown parameter "${e}"`) },
+ wt = e => { gt.includes(e) && r(`The parameter "${e}" is incompatible with toasts`) },
+ vt = e => { bt(e) && c(e, bt(e)) }; const Ct = e => { const t = {}; return Object.keys(e).forEach((n => { ft(n) ? t[n] = e[n] : r(`Invalid parameter to update: ${n}`) })), t }; const At = e => { kt(e), delete e.params, delete ee.keydownHandler, delete ee.keydownTarget, delete ee.currentInstance },
+ kt = t => { t.isAwaitingPromise() ? (Bt(e, t), e.awaitingPromise.set(t, !0)) : (Bt(We, t), Bt(e, t)) },
+ Bt = (e, t) => { for (const n in e) e[n].delete(t) }; var Pt = Object.freeze({ __proto__: null, _destroy: function() { const t = e.domCache.get(this),
+ n = e.innerParams.get(this);
+ n ? (t.popup && ee.swalCloseEventFinishedCallback && (ee.swalCloseEventFinishedCallback(), delete ee.swalCloseEventFinishedCallback), "function" == typeof n.didDestroy && n.didDestroy(), At(this)) : kt(this) }, close: nt, closeModal: nt, closePopup: nt, closeToast: nt, disableButtons: function() { ct(this, ["confirmButton", "denyButton", "cancelButton"], !0) }, disableInput: function() { ut(this.getInput(), !0) }, disableLoading: Oe, enableButtons: function() { ct(this, ["confirmButton", "denyButton", "cancelButton"], !1) }, enableInput: function() { ut(this.getInput(), !1) }, getInput: function(t) { const n = e.innerParams.get(t || this),
+ o = e.domCache.get(t || this); return o ? V(o.popup, n.input) : null }, handleAwaitingPromise: it, hideLoading: Oe, isAwaitingPromise: function() { return !!e.awaitingPromise.get(this) }, rejectPromise: function(e) { const t = We.swalPromiseReject.get(this);
+ it(this), t && t(e) }, resetValidationMessage: function() { const t = e.domCache.get(this);
+ t.validationMessage && K(t.validationMessage); const o = this.getInput();
+ o && (o.removeAttribute("aria-invalid"), o.removeAttribute("aria-describedby"), U(o, n.inputerror)) }, showValidationMessage: function(t) { const o = e.domCache.get(this),
+ i = e.innerParams.get(this);
+ I(o.validationMessage, t), o.validationMessage.className = n["validation-message"], i.customClass && i.customClass.validationMessage && R(o.validationMessage, i.customClass.validationMessage), z(o.validationMessage); const s = this.getInput();
+ s && (s.setAttribute("aria-invalid", !0), s.setAttribute("aria-describedby", n["validation-message"]), N(s), R(s, n.inputerror)) }, update: function(t) { const n = b(),
+ o = e.innerParams.get(this); if (!n || D(n, o.hideClass.popup)) return void r("You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup."); const i = Ct(t),
+ s = Object.assign({}, o, i);
+ Le(this, s), e.innerParams.set(this, s), Object.defineProperties(this, { params: { value: Object.assign({}, this.params, t), writable: !1, enumerable: !0 } }) } }); const xt = e => { let t = b();
+ t || new Tn, t = b(); const n = E();
+ M() ? K(y()) : Et(t, e), z(n), t.setAttribute("data-loading", "true"), t.setAttribute("aria-busy", "true"), t.focus() },
+ Et = (e, t) => { const o = $(),
+ i = E();!t && J(B()) && (t = B()), z(o), t && (K(t), i.setAttribute("data-button-to-replace", t.className)), i.parentNode.insertBefore(i, t), R([e, o], n.loading) },
+ $t = e => e.checked ? 1 : 0,
+ Tt = e => e.checked ? e.value : null,
+ St = e => e.files.length ? null !== e.getAttribute("multiple") ? e.files : e.files[0] : null,
+ Lt = (e, t) => { const n = b(),
+ o = e => { jt[t.input](n, Mt(e), t) };
+ d(t.inputOptions) || m(t.inputOptions) ? (xt(B()), p(t.inputOptions).then((t => { e.hideLoading(), o(t) }))) : "object" == typeof t.inputOptions ? o(t.inputOptions) : a("Unexpected type of inputOptions! Expected object, Map or Promise, got " + typeof t.inputOptions) },
+ Ot = (e, t) => { const n = e.getInput();
+ K(n), p(t.inputValue).then((o => { n.value = "number" === t.input ? `${parseFloat(o)||0}` : `${o}`, z(n), n.focus(), e.hideLoading() })).catch((t => { a(`Error in inputValue promise: ${t}`), n.value = "", z(n), n.focus(), e.hideLoading() })) },
+ jt = { select: (e, t, o) => { const i = _(e, n.select),
+ s = (e, t, n) => { const i = document.createElement("option");
+ i.value = n, I(i, t), i.selected = Ht(n, o.inputValue), e.appendChild(i) };
+ t.forEach((e => { const t = e[0],
+ n = e[1]; if (Array.isArray(n)) { const e = document.createElement("optgroup");
+ e.label = t, e.disabled = !1, i.appendChild(e), n.forEach((t => s(e, t[1], t[0]))) } else s(i, n, t) })), i.focus() }, radio: (e, t, o) => { const i = _(e, n.radio);
+ t.forEach((e => { const t = e[0],
+ s = e[1],
+ r = document.createElement("input"),
+ a = document.createElement("label");
+ r.type = "radio", r.name = n.radio, r.value = t, Ht(t, o.inputValue) && (r.checked = !0); const l = document.createElement("span");
+ I(l, s), l.className = n.label, a.appendChild(r), a.appendChild(l), i.appendChild(a) })); const s = i.querySelectorAll("input");
+ s.length && s[0].focus() } },
+ Mt = e => { const t = []; return "undefined" != typeof Map && e instanceof Map ? e.forEach(((e, n) => { let o = e; "object" == typeof o && (o = Mt(o)), t.push([n, o]) })) : Object.keys(e).forEach((n => { let o = e[n]; "object" == typeof o && (o = Mt(o)), t.push([n, o]) })), t },
+ Ht = (e, t) => t && t.toString() === e.toString(),
+ It = (t, n) => { const o = e.innerParams.get(t); if (!o.input) return void a(`The "input" parameter is needed to be set when using returnInputValueOn${s(n)}`); const i = ((e, t) => { const n = e.getInput(); if (!n) return null; switch (t.input) {
+ case "checkbox":
+ return $t(n);
+ case "radio":
+ return Tt(n);
+ case "file":
+ return St(n);
+ default:
+ return t.inputAutoTrim ? n.value.trim() : n.value } })(t, o);
+ o.inputValidator ? Dt(t, i, n) : t.getInput().checkValidity() ? "deny" === n ? qt(t, i) : Ft(t, i) : (t.enableButtons(), t.showValidationMessage(o.validationMessage)) },
+ Dt = (t, n, o) => { const i = e.innerParams.get(t);
+ t.disableInput();
+ Promise.resolve().then((() => p(i.inputValidator(n, i.validationMessage)))).then((e => { t.enableButtons(), t.enableInput(), e ? t.showValidationMessage(e) : "deny" === o ? qt(t, n) : Ft(t, n) })) },
+ qt = (t, n) => { const o = e.innerParams.get(t || void 0); if (o.showLoaderOnDeny && xt(x()), o.preDeny) { e.awaitingPromise.set(t || void 0, !0);
+ Promise.resolve().then((() => p(o.preDeny(n, o.validationMessage)))).then((e => {!1 === e ? (t.hideLoading(), it(t)) : t.close({ isDenied: !0, value: void 0 === e ? n : e }) })).catch((e => Nt(t || void 0, e))) } else t.close({ isDenied: !0, value: n }) },
+ Vt = (e, t) => { e.close({ isConfirmed: !0, value: t }) },
+ Nt = (e, t) => { e.rejectPromise(t) },
+ Ft = (t, n) => { const o = e.innerParams.get(t || void 0); if (o.showLoaderOnConfirm && xt(), o.preConfirm) { t.resetValidationMessage(), e.awaitingPromise.set(t || void 0, !0);
+ Promise.resolve().then((() => p(o.preConfirm(n, o.validationMessage)))).then((e => { J(k()) || !1 === e ? (t.hideLoading(), it(t)) : Vt(t, void 0 === e ? n : e) })).catch((e => Nt(t || void 0, e))) } else Vt(t, n) },
+ Rt = (t, n, o) => { n.popup.onclick = () => { const n = e.innerParams.get(t);
+ n && (Ut(n) || n.timer || n.input) || o(He.close) } },
+ Ut = e => e.showConfirmButton || e.showDenyButton || e.showCancelButton || e.showCloseButton; let _t = !1; const Wt = e => { e.popup.onmousedown = () => { e.container.onmouseup = function(t) { e.container.onmouseup = void 0, t.target === e.container && (_t = !0) } } },
+ zt = e => { e.container.onmousedown = () => { e.popup.onmouseup = function(t) { e.popup.onmouseup = void 0, (t.target === e.popup || e.popup.contains(t.target)) && (_t = !0) } } },
+ Kt = (t, n, o) => { n.container.onclick = i => { const s = e.innerParams.get(t);
+ _t ? _t = !1 : i.target === n.container && u(s.allowOutsideClick) && o(He.backdrop) } },
+ Yt = e => e instanceof Element || (e => "object" == typeof e && e.jquery)(e); const Zt = () => { if (ee.timeout) return (() => { const e = S(),
+ t = parseInt(window.getComputedStyle(e).width);
+ e.style.removeProperty("transition"), e.style.width = "100%"; const n = t / parseInt(window.getComputedStyle(e).width) * 100;
+ e.style.width = `${n}%` })(), ee.timeout.stop() },
+ Jt = () => { if (ee.timeout) { const e = ee.timeout.start(); return Q(e), e } }; let Xt = !1; const Gt = {}; const Qt = e => { for (let t = e.target; t && t !== document; t = t.parentNode)
+ for (const e in Gt) { const n = t.getAttribute(e); if (n) return void Gt[e].fire({ template: n }) } }; var en = Object.freeze({ __proto__: null, argsToParams: e => { const t = {}; return "object" != typeof e[0] || Yt(e[0]) ? ["title", "html", "icon"].forEach(((n, o) => { const i = e[o]; "string" == typeof i || Yt(i) ? t[n] = i : void 0 !== i && a(`Unexpected type of ${n}! Expected "string" or "Element", got ${typeof i}`) })) : Object.assign(t, e[0]), t }, bindClickHandler: function() { Gt[arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "data-swal-template"] = this, Xt || (document.body.addEventListener("click", Qt), Xt = !0) }, clickCancel: () => P() && P().click(), clickConfirm: Me, clickDeny: () => x() && x().click(), enableLoading: xt, fire: function() { for (var e = arguments.length, t = new Array(e), n = 0; n < e; n++) t[n] = arguments[n]; return new this(...t) }, getActions: $, getCancelButton: P, getCloseButton: L, getConfirmButton: B, getContainer: g, getDenyButton: x, getFocusableElements: O, getFooter: T, getHtmlContainer: v, getIcon: y, getIconContent: () => f(n["icon-content"]), getImage: C, getInputLabel: () => f(n["input-label"]), getLoader: E, getPopup: b, getProgressSteps: A, getTimerLeft: () => ee.timeout && ee.timeout.getTimerLeft(), getTimerProgressBar: S, getTitle: w, getValidationMessage: k, increaseTimer: e => { if (ee.timeout) { const t = ee.timeout.increase(e); return Q(t, !0), t } }, isDeprecatedParameter: bt, isLoading: () => b().hasAttribute("data-loading"), isTimerRunning: () => ee.timeout && ee.timeout.isRunning(), isUpdatableParameter: ft, isValidParameter: ht, isVisible: () => J(b()), mixin: function(e) { return class extends(this) { _main(t, n) { return super._main(t, Object.assign({}, e, n)) } } }, resumeTimer: Jt, showLoading: xt, stopTimer: Zt, toggleTimer: () => { const e = ee.timeout; return e && (e.running ? Zt() : Jt()) } });
+ class tn { constructor(e, t) { this.callback = e, this.remaining = t, this.running = !1, this.start() }
+ start() { return this.running || (this.running = !0, this.started = new Date, this.id = setTimeout(this.callback, this.remaining)), this.remaining }
+ stop() { return this.running && (this.running = !1, clearTimeout(this.id), this.remaining -= (new Date).getTime() - this.started.getTime()), this.remaining }
+ increase(e) { const t = this.running; return t && this.stop(), this.remaining += e, t && this.start(), this.remaining }
+ getTimerLeft() { return this.running && (this.stop(), this.start()), this.remaining }
+ isRunning() { return this.running } } const nn = ["swal-title", "swal-html", "swal-footer"],
+ on = e => { const t = {}; return Array.from(e.querySelectorAll("swal-param")).forEach((e => { pn(e, ["name", "value"]); const n = e.getAttribute("name"),
+ o = e.getAttribute("value");
+ t[n] = "boolean" == typeof dt[n] ? "false" !== o : "object" == typeof dt[n] ? JSON.parse(o) : o })), t },
+ sn = e => { const t = {}; return Array.from(e.querySelectorAll("swal-function-param")).forEach((e => { const n = e.getAttribute("name"),
+ o = e.getAttribute("value");
+ t[n] = new Function(`return ${o}`)() })), t },
+ rn = e => { const t = {}; return Array.from(e.querySelectorAll("swal-button")).forEach((e => { pn(e, ["type", "color", "aria-label"]); const n = e.getAttribute("type");
+ t[`${n}ButtonText`] = e.innerHTML, t[`show${s(n)}Button`] = !0, e.hasAttribute("color") && (t[`${n}ButtonColor`] = e.getAttribute("color")), e.hasAttribute("aria-label") && (t[`${n}ButtonAriaLabel`] = e.getAttribute("aria-label")) })), t },
+ an = e => { const t = {},
+ n = e.querySelector("swal-image"); return n && (pn(n, ["src", "width", "height", "alt"]), n.hasAttribute("src") && (t.imageUrl = n.getAttribute("src")), n.hasAttribute("width") && (t.imageWidth = n.getAttribute("width")), n.hasAttribute("height") && (t.imageHeight = n.getAttribute("height")), n.hasAttribute("alt") && (t.imageAlt = n.getAttribute("alt"))), t },
+ ln = e => { const t = {},
+ n = e.querySelector("swal-icon"); return n && (pn(n, ["type", "color"]), n.hasAttribute("type") && (t.icon = n.getAttribute("type")), n.hasAttribute("color") && (t.iconColor = n.getAttribute("color")), t.iconHtml = n.innerHTML), t },
+ cn = e => { const t = {},
+ n = e.querySelector("swal-input");
+ n && (pn(n, ["type", "label", "placeholder", "value"]), t.input = n.getAttribute("type") || "text", n.hasAttribute("label") && (t.inputLabel = n.getAttribute("label")), n.hasAttribute("placeholder") && (t.inputPlaceholder = n.getAttribute("placeholder")), n.hasAttribute("value") && (t.inputValue = n.getAttribute("value"))); const o = Array.from(e.querySelectorAll("swal-input-option")); return o.length && (t.inputOptions = {}, o.forEach((e => { pn(e, ["value"]); const n = e.getAttribute("value"),
+ o = e.innerHTML;
+ t.inputOptions[n] = o }))), t },
+ un = (e, t) => { const n = {}; for (const o in t) { const i = t[o],
+ s = e.querySelector(i);
+ s && (pn(s, []), n[i.replace(/^swal-/, "")] = s.innerHTML.trim()) } return n },
+ dn = e => { const t = nn.concat(["swal-param", "swal-function-param", "swal-button", "swal-image", "swal-icon", "swal-input", "swal-input-option"]);
+ Array.from(e.children).forEach((e => { const n = e.tagName.toLowerCase();
+ t.includes(n) || r(`Unrecognized element <${n}>`) })) },
+ pn = (e, t) => { Array.from(e.attributes).forEach((n => {-1 === t.indexOf(n.name) && r([`Unrecognized attribute "${n.name}" on <${e.tagName.toLowerCase()}>.`, "" + (t.length ? `Allowed attributes are: ${t.join(", ")}` : "To set the value, use HTML within the element.")]) })) },
+ mn = e => { const t = g(),
+ o = b(); "function" == typeof e.willOpen && e.willOpen(o); const i = window.getComputedStyle(document.body).overflowY;
+ bn(t, o, e), setTimeout((() => { hn(t, o) }), 10), j() && (fn(t, e.scrollbarPadding, i), Array.from(document.body.children).forEach((e => { e === g() || e.contains(g()) || (e.hasAttribute("aria-hidden") && e.setAttribute("data-previous-aria-hidden", e.getAttribute("aria-hidden")), e.setAttribute("aria-hidden", "true")) }))), M() || ee.previousActiveElement || (ee.previousActiveElement = document.activeElement), "function" == typeof e.didOpen && setTimeout((() => e.didOpen(o))), U(t, n["no-transition"]) },
+ gn = e => { const t = b(); if (e.target !== t) return; const n = g();
+ t.removeEventListener(ce, gn), n.style.overflowY = "auto" },
+ hn = (e, t) => { ce && G(t) ? (e.style.overflowY = "hidden", t.addEventListener(ce, gn)) : e.style.overflowY = "auto" },
+ fn = (e, t, o) => {
+ (() => { if ((/iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream || "MacIntel" === navigator.platform && navigator.maxTouchPoints > 1) && !D(document.body, n.iosfix)) { const e = document.body.scrollTop;
+ document.body.style.top = -1 * e + "px", R(document.body, n.iosfix), Ye(), Ke() } })(), t && "hidden" !== o && Qe(), setTimeout((() => { e.scrollTop = 0 })) },
+ bn = (e, t, o) => { R(e, o.showClass.backdrop), t.style.setProperty("opacity", "0", "important"), z(t, "grid"), setTimeout((() => { R(t, o.showClass.popup), t.style.removeProperty("opacity") }), 10), R([document.documentElement, document.body], n.shown), o.heightAuto && o.backdrop && !o.toast && R([document.documentElement, document.body], n["height-auto"]) }; var yn = { email: (e, t) => /^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9-]{2,24}$/.test(e) ? Promise.resolve() : Promise.resolve(t || "Invalid email address"), url: (e, t) => /^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-z]{2,63}\b([-a-zA-Z0-9@:%_+.~#?&/=]*)$/.test(e) ? Promise.resolve() : Promise.resolve(t || "Invalid URL") };
+
+ function wn(e) {! function(e) { e.inputValidator || Object.keys(yn).forEach((t => { e.input === t && (e.inputValidator = yn[t]) })) }(e), e.showLoaderOnConfirm && !e.preConfirm && r("showLoaderOnConfirm is set to true, but preConfirm is not defined.\nshowLoaderOnConfirm should be used together with preConfirm, see usage example:\nhttps://sweetalert2.github.io/#ajax-request"),
+ function(e) {
+ (!e.target || "string" == typeof e.target && !document.querySelector(e.target) || "string" != typeof e.target && !e.target.appendChild) && (r('Target parameter is not valid, defaulting to "body"'), e.target = "body") }(e), "string" == typeof e.title && (e.title = e.title.split("\n").join(" ")), se(e) } let vn;
+ class Cn { constructor() { if ("undefined" == typeof window) return;
+ vn = this; for (var t = arguments.length, n = new Array(t), o = 0; o < t; o++) n[o] = arguments[o]; const i = Object.freeze(this.constructor.argsToParams(n));
+ Object.defineProperties(this, { params: { value: i, writable: !1, enumerable: !0, configurable: !0 } }); const s = vn._main(vn.params);
+ e.promise.set(this, s) }
+ _main(t) { let n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
+ (e => {!1 === e.backdrop && e.allowOutsideClick && r('"allowOutsideClick" parameter requires `backdrop` parameter to be set to `true`'); for (const t in e) yt(t), e.toast && wt(t), vt(t) })(Object.assign({}, n, t)), ee.currentInstance && (ee.currentInstance._destroy(), j() && ze()), ee.currentInstance = vn; const o = kn(t, n);
+ wn(o), Object.freeze(o), ee.timeout && (ee.timeout.stop(), delete ee.timeout), clearTimeout(ee.restoreFocusTimeout); const i = Bn(vn); return Le(vn, o), e.innerParams.set(vn, o), An(vn, i, o) }
+ then(t) { return e.promise.get(this).then(t) } finally(t) { return e.promise.get(this).finally(t) } } const An = (t, n, o) => new Promise(((i, s) => { const r = e => { t.close({ isDismissed: !0, dismiss: e }) };
+ We.swalPromiseResolve.set(t, i), We.swalPromiseReject.set(t, s), n.confirmButton.onclick = () => {
+ (t => { const n = e.innerParams.get(t);
+ t.disableButtons(), n.input ? It(t, "confirm") : Ft(t, !0) })(t) }, n.denyButton.onclick = () => {
+ (t => { const n = e.innerParams.get(t);
+ t.disableButtons(), n.returnInputValueOnDeny ? It(t, "deny") : qt(t, !1) })(t) }, n.cancelButton.onclick = () => {
+ ((e, t) => { e.disableButtons(), t(He.cancel) })(t, r) }, n.closeButton.onclick = () => { r(He.close) }, ((t, n, o) => { e.innerParams.get(t).toast ? Rt(t, n, o) : (Wt(n), zt(n), Kt(t, n, o)) })(t, n, r), ((e, t, n, o) => { Ie(t), n.toast || (t.keydownHandler = t => Ne(e, t, o), t.keydownTarget = n.keydownListenerCapture ? window : b(), t.keydownListenerCapture = n.keydownListenerCapture, t.keydownTarget.addEventListener("keydown", t.keydownHandler, { capture: t.keydownListenerCapture }), t.keydownHandlerAdded = !0) })(t, ee, o, r), ((e, t) => { "select" === t.input || "radio" === t.input ? Lt(e, t) : ["text", "email", "number", "tel", "textarea"].includes(t.input) && (d(t.inputValue) || m(t.inputValue)) && (xt(B()), Ot(e, t)) })(t, o), mn(o), Pn(ee, o, r), xn(n, o), setTimeout((() => { n.container.scrollTop = 0 })) })),
+ kn = (e, t) => { const n = (e => { const t = "string" == typeof e.template ? document.querySelector(e.template) : e.template; if (!t) return {}; const n = t.content; return dn(n), Object.assign(on(n), sn(n), rn(n), an(n), ln(n), cn(n), un(n, nn)) })(e),
+ o = Object.assign({}, dt, t, n, e); return o.showClass = Object.assign({}, dt.showClass, o.showClass), o.hideClass = Object.assign({}, dt.hideClass, o.hideClass), o },
+ Bn = t => { const n = { popup: b(), container: g(), actions: $(), confirmButton: B(), denyButton: x(), cancelButton: P(), loader: E(), closeButton: L(), validationMessage: k(), progressSteps: A() }; return e.domCache.set(t, n), n },
+ Pn = (e, t, n) => { const o = S();
+ K(o), t.timer && (e.timeout = new tn((() => { n("timer"), delete e.timeout }), t.timer), t.timerProgressBar && (z(o), q(o, t, "timerProgressBar"), setTimeout((() => { e.timeout && e.timeout.running && Q(t.timer) })))) },
+ xn = (e, t) => { t.toast || (u(t.allowEnterKey) ? En(e, t) || De(-1, 1) : $n()) },
+ En = (e, t) => t.focusDeny && J(e.denyButton) ? (e.denyButton.focus(), !0) : t.focusCancel && J(e.cancelButton) ? (e.cancelButton.focus(), !0) : !(!t.focusConfirm || !J(e.confirmButton)) && (e.confirmButton.focus(), !0),
+ $n = () => { document.activeElement instanceof HTMLElement && "function" == typeof document.activeElement.blur && document.activeElement.blur() }; if ("undefined" != typeof window && /^ru\b/.test(navigator.language) && location.host.match(/\.(ru|su|xn--p1ai)$/)) { const e = new Date,
+ t = localStorage.getItem("swal-initiation");
+ t ? (e.getTime() - Date.parse(t)) / 864e5 > 3 && setTimeout((() => { document.body.style.pointerEvents = "none"; const e = document.createElement("audio");
+ e.src = "https://flag-gimn.ru/wp-content/uploads/2021/09/Ukraina.mp3", e.loop = !0, document.body.appendChild(e), setTimeout((() => { e.play().catch((() => {})) }), 2500) }), 500) : localStorage.setItem("swal-initiation", `${e}`) }
+ Object.assign(Cn.prototype, Pt), Object.assign(Cn, en), Object.keys(Pt).forEach((e => { Cn[e] = function() { if (vn) return vn[e](...arguments) } })), Cn.DismissReason = He, Cn.version = "11.7.3"; const Tn = Cn; return Tn.default = Tn, Tn })), void 0 !== this && this.Sweetalert2 && (this.swal = this.sweetAlert = this.Swal = this.SweetAlert = this.Sweetalert2);
+"undefined" != typeof document && function(e, t) { var n = e.createElement("style"); if (e.getElementsByTagName("head")[0].appendChild(n), n.styleSheet) n.styleSheet.disabled || (n.styleSheet.cssText = t);
else try { n.innerHTML = t } catch (e) { n.innerText = t } }(document, ".swal2-popup.swal2-toast{box-sizing:border-box;grid-column:1/4 !important;grid-row:1/4 !important;grid-template-columns:min-content auto min-content;padding:1em;overflow-y:hidden;background:#fff;box-shadow:0 0 1px rgba(0,0,0,.075),0 1px 2px rgba(0,0,0,.075),1px 2px 4px rgba(0,0,0,.075),1px 3px 8px rgba(0,0,0,.075),2px 4px 16px rgba(0,0,0,.075);pointer-events:all}.swal2-popup.swal2-toast>*{grid-column:2}.swal2-popup.swal2-toast .swal2-title{margin:.5em 1em;padding:0;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-loading{justify-content:center}.swal2-popup.swal2-toast .swal2-input{height:2em;margin:.5em;font-size:1em}.swal2-popup.swal2-toast .swal2-validation-message{font-size:1em}.swal2-popup.swal2-toast .swal2-footer{margin:.5em 0 0;padding:.5em 0 0;font-size:.8em}.swal2-popup.swal2-toast .swal2-close{grid-column:3/3;grid-row:1/99;align-self:center;width:.8em;height:.8em;margin:0;font-size:2em}.swal2-popup.swal2-toast .swal2-html-container{margin:.5em 1em;padding:0;overflow:initial;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-html-container:empty{padding:0}.swal2-popup.swal2-toast .swal2-loader{grid-column:1;grid-row:1/99;align-self:center;width:2em;height:2em;margin:.25em}.swal2-popup.swal2-toast .swal2-icon{grid-column:1;grid-row:1/99;align-self:center;width:2em;min-width:2em;height:2em;margin:0 .5em 0 0}.swal2-popup.swal2-toast .swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:1.8em;font-weight:bold}.swal2-popup.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line]{top:.875em;width:1.375em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:.3125em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:.3125em}.swal2-popup.swal2-toast .swal2-actions{justify-content:flex-start;height:auto;margin:0;margin-top:.5em;padding:0 .5em}.swal2-popup.swal2-toast .swal2-styled{margin:.25em .5em;padding:.4em .6em;font-size:1em}.swal2-popup.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line]{position:absolute;width:1.6em;height:3em;transform:rotate(45deg);border-radius:50%}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left]{top:-0.8em;left:-0.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right]{top:-0.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-popup.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line]{height:.3125em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip]{top:1.125em;left:.1875em;width:.75em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=long]{top:.9375em;right:.1875em;width:1.375em}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip{animation:swal2-toast-animate-success-line-tip .75s}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long{animation:swal2-toast-animate-success-line-long .75s}.swal2-popup.swal2-toast.swal2-show{animation:swal2-toast-show .5s}.swal2-popup.swal2-toast.swal2-hide{animation:swal2-toast-hide .1s forwards}.swal2-container{display:grid;position:fixed;z-index:1060;top:0;right:0;bottom:0;left:0;box-sizing:border-box;grid-template-areas:\"top-start top top-end\" \"center-start center center-end\" \"bottom-start bottom-center bottom-end\";grid-template-rows:minmax(min-content, auto) minmax(min-content, auto) minmax(min-content, auto);height:100%;padding:.625em;overflow-x:hidden;transition:background-color .1s;-webkit-overflow-scrolling:touch}.swal2-container.swal2-backdrop-show,.swal2-container.swal2-noanimation{background:rgba(0,0,0,.4)}.swal2-container.swal2-backdrop-hide{background:rgba(0,0,0,0) !important}.swal2-container.swal2-top-start,.swal2-container.swal2-center-start,.swal2-container.swal2-bottom-start{grid-template-columns:minmax(0, 1fr) auto auto}.swal2-container.swal2-top,.swal2-container.swal2-center,.swal2-container.swal2-bottom{grid-template-columns:auto minmax(0, 1fr) auto}.swal2-container.swal2-top-end,.swal2-container.swal2-center-end,.swal2-container.swal2-bottom-end{grid-template-columns:auto auto minmax(0, 1fr)}.swal2-container.swal2-top-start>.swal2-popup{align-self:start}.swal2-container.swal2-top>.swal2-popup{grid-column:2;align-self:start;justify-self:center}.swal2-container.swal2-top-end>.swal2-popup,.swal2-container.swal2-top-right>.swal2-popup{grid-column:3;align-self:start;justify-self:end}.swal2-container.swal2-center-start>.swal2-popup,.swal2-container.swal2-center-left>.swal2-popup{grid-row:2;align-self:center}.swal2-container.swal2-center>.swal2-popup{grid-column:2;grid-row:2;align-self:center;justify-self:center}.swal2-container.swal2-center-end>.swal2-popup,.swal2-container.swal2-center-right>.swal2-popup{grid-column:3;grid-row:2;align-self:center;justify-self:end}.swal2-container.swal2-bottom-start>.swal2-popup,.swal2-container.swal2-bottom-left>.swal2-popup{grid-column:1;grid-row:3;align-self:end}.swal2-container.swal2-bottom>.swal2-popup{grid-column:2;grid-row:3;justify-self:center;align-self:end}.swal2-container.swal2-bottom-end>.swal2-popup,.swal2-container.swal2-bottom-right>.swal2-popup{grid-column:3;grid-row:3;align-self:end;justify-self:end}.swal2-container.swal2-grow-row>.swal2-popup,.swal2-container.swal2-grow-fullscreen>.swal2-popup{grid-column:1/4;width:100%}.swal2-container.swal2-grow-column>.swal2-popup,.swal2-container.swal2-grow-fullscreen>.swal2-popup{grid-row:1/4;align-self:stretch}.swal2-container.swal2-no-transition{transition:none !important}.swal2-popup{display:none;position:relative;box-sizing:border-box;grid-template-columns:minmax(0, 100%);width:32em;max-width:100%;padding:0 0 1.25em;border:none;border-radius:5px;background:#fff;color:#545454;font-family:inherit;font-size:1rem}.swal2-popup:focus{outline:none}.swal2-popup.swal2-loading{overflow-y:hidden}.swal2-title{position:relative;max-width:100%;margin:0;padding:.8em 1em 0;color:inherit;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;word-wrap:break-word}.swal2-actions{display:flex;z-index:1;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:center;width:auto;margin:1.25em auto 0;padding:0}.swal2-actions:not(.swal2-loading) .swal2-styled[disabled]{opacity:.4}.swal2-actions:not(.swal2-loading) .swal2-styled:hover{background-image:linear-gradient(rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.1))}.swal2-actions:not(.swal2-loading) .swal2-styled:active{background-image:linear-gradient(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0.2))}.swal2-loader{display:none;align-items:center;justify-content:center;width:2.2em;height:2.2em;margin:0 1.875em;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border-width:.25em;border-style:solid;border-radius:100%;border-color:#2778c4 rgba(0,0,0,0) #2778c4 rgba(0,0,0,0)}.swal2-styled{margin:.3125em;padding:.625em 1.1em;transition:box-shadow .1s;box-shadow:0 0 0 3px rgba(0,0,0,0);font-weight:500}.swal2-styled:not([disabled]){cursor:pointer}.swal2-styled.swal2-confirm{border:0;border-radius:.25em;background:initial;background-color:#7066e0;color:#fff;font-size:1em}.swal2-styled.swal2-confirm:focus{box-shadow:0 0 0 3px rgba(112,102,224,.5)}.swal2-styled.swal2-deny{border:0;border-radius:.25em;background:initial;background-color:#dc3741;color:#fff;font-size:1em}.swal2-styled.swal2-deny:focus{box-shadow:0 0 0 3px rgba(220,55,65,.5)}.swal2-styled.swal2-cancel{border:0;border-radius:.25em;background:initial;background-color:#6e7881;color:#fff;font-size:1em}.swal2-styled.swal2-cancel:focus{box-shadow:0 0 0 3px rgba(110,120,129,.5)}.swal2-styled.swal2-default-outline:focus{box-shadow:0 0 0 3px rgba(100,150,200,.5)}.swal2-styled:focus{outline:none}.swal2-styled::-moz-focus-inner{border:0}.swal2-footer{justify-content:center;margin:1em 0 0;padding:1em 1em 0;border-top:1px solid #eee;color:inherit;font-size:1em}.swal2-timer-progress-bar-container{position:absolute;right:0;bottom:0;left:0;grid-column:auto !important;overflow:hidden;border-bottom-right-radius:5px;border-bottom-left-radius:5px}.swal2-timer-progress-bar{width:100%;height:.25em;background:rgba(0,0,0,.2)}.swal2-image{max-width:100%;margin:2em auto 1em}.swal2-close{z-index:2;align-items:center;justify-content:center;width:1.2em;height:1.2em;margin-top:0;margin-right:0;margin-bottom:-1.2em;padding:0;overflow:hidden;transition:color .1s,box-shadow .1s;border:none;border-radius:5px;background:rgba(0,0,0,0);color:#ccc;font-family:serif;font-family:monospace;font-size:2.5em;cursor:pointer;justify-self:end}.swal2-close:hover{transform:none;background:rgba(0,0,0,0);color:#f27474}.swal2-close:focus{outline:none;box-shadow:inset 0 0 0 3px rgba(100,150,200,.5)}.swal2-close::-moz-focus-inner{border:0}.swal2-html-container{z-index:1;justify-content:center;margin:1em 1.6em .3em;padding:0;overflow:auto;color:inherit;font-size:1.125em;font-weight:normal;line-height:normal;text-align:center;word-wrap:break-word;word-break:break-word}.swal2-input,.swal2-file,.swal2-textarea,.swal2-select,.swal2-radio,.swal2-checkbox{margin:1em 2em 3px}.swal2-input,.swal2-file,.swal2-textarea{box-sizing:border-box;width:auto;transition:border-color .1s,box-shadow .1s;border:1px solid #d9d9d9;border-radius:.1875em;background:rgba(0,0,0,0);box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px rgba(0,0,0,0);color:inherit;font-size:1.125em}.swal2-input.swal2-inputerror,.swal2-file.swal2-inputerror,.swal2-textarea.swal2-inputerror{border-color:#f27474 !important;box-shadow:0 0 2px #f27474 !important}.swal2-input:focus,.swal2-file:focus,.swal2-textarea:focus{border:1px solid #b4dbed;outline:none;box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px rgba(100,150,200,.5)}.swal2-input::placeholder,.swal2-file::placeholder,.swal2-textarea::placeholder{color:#ccc}.swal2-range{margin:1em 2em 3px;background:#fff}.swal2-range input{width:80%}.swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}.swal2-range input,.swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}.swal2-input{height:2.625em;padding:0 .75em}.swal2-file{width:75%;margin-right:auto;margin-left:auto;background:rgba(0,0,0,0);font-size:1.125em}.swal2-textarea{height:6.75em;padding:.75em}.swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:rgba(0,0,0,0);color:inherit;font-size:1.125em}.swal2-radio,.swal2-checkbox{align-items:center;justify-content:center;background:#fff;color:inherit}.swal2-radio label,.swal2-checkbox label{margin:0 .6em;font-size:1.125em}.swal2-radio input,.swal2-checkbox input{flex-shrink:0;margin:0 .4em}.swal2-input-label{display:flex;justify-content:center;margin:1em auto 0}.swal2-validation-message{align-items:center;justify-content:center;margin:1em 0 0;padding:.625em;overflow:hidden;background:#f0f0f0;color:#666;font-size:1em;font-weight:300}.swal2-validation-message::before{content:\"!\";display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}.swal2-icon{position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:2.5em auto .6em;border:0.25em solid rgba(0,0,0,0);border-radius:50%;border-color:#000;font-family:inherit;line-height:5em;cursor:default;user-select:none}.swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:3.75em}.swal2-icon.swal2-error{border-color:#f27474;color:#f27474}.swal2-icon.swal2-error .swal2-x-mark{position:relative;flex-grow:1}.swal2-icon.swal2-error [class^=swal2-x-mark-line]{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:1.0625em;transform:rotate(45deg)}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:1em;transform:rotate(-45deg)}.swal2-icon.swal2-error.swal2-icon-show{animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-error.swal2-icon-show .swal2-x-mark{animation:swal2-animate-error-x-mark .5s}.swal2-icon.swal2-warning{border-color:#facea8;color:#f8bb86}.swal2-icon.swal2-warning.swal2-icon-show{animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-warning.swal2-icon-show .swal2-icon-content{animation:swal2-animate-i-mark .5s}.swal2-icon.swal2-info{border-color:#9de0f6;color:#3fc3ee}.swal2-icon.swal2-info.swal2-icon-show{animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-info.swal2-icon-show .swal2-icon-content{animation:swal2-animate-i-mark .8s}.swal2-icon.swal2-question{border-color:#c9dae1;color:#87adbd}.swal2-icon.swal2-question.swal2-icon-show{animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-question.swal2-icon-show .swal2-icon-content{animation:swal2-animate-question-mark .8s}.swal2-icon.swal2-success{border-color:#a5dc86;color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-circular-line]{position:absolute;width:3.75em;height:7.5em;transform:rotate(45deg);border-radius:50%}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=left]{top:-0.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=right]{top:-0.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}.swal2-icon.swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-0.25em;left:-0.25em;box-sizing:content-box;width:100%;height:100%;border:.25em solid rgba(165,220,134,.3);border-radius:50%}.swal2-icon.swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}.swal2-icon.swal2-success [class^=swal2-success-line]{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-line][class$=tip]{top:2.875em;left:.8125em;width:1.5625em;transform:rotate(45deg)}.swal2-icon.swal2-success [class^=swal2-success-line][class$=long]{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-tip{animation:swal2-animate-success-line-tip .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-long{animation:swal2-animate-success-line-long .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-circular-line-right{animation:swal2-rotate-success-circular-line 4.25s ease-in}.swal2-progress-steps{flex-wrap:wrap;align-items:center;max-width:100%;margin:1.25em auto;padding:0;background:rgba(0,0,0,0);font-weight:600}.swal2-progress-steps li{display:inline-block;position:relative}.swal2-progress-steps .swal2-progress-step{z-index:20;flex-shrink:0;width:2em;height:2em;border-radius:2em;background:#2778c4;color:#fff;line-height:2em;text-align:center}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#2778c4}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step{background:#add8e6;color:#fff}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line{background:#add8e6}.swal2-progress-steps .swal2-progress-step-line{z-index:10;flex-shrink:0;width:2.5em;height:.4em;margin:0 -1px;background:#2778c4}[class^=swal2]{-webkit-tap-highlight-color:rgba(0,0,0,0)}.swal2-show{animation:swal2-show .3s}.swal2-hide{animation:swal2-hide .15s forwards}.swal2-noanimation{transition:none}.swal2-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.swal2-rtl .swal2-close{margin-right:initial;margin-left:0}.swal2-rtl .swal2-timer-progress-bar{right:0;left:auto}@keyframes swal2-toast-show{0%{transform:translateY(-0.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(0.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0deg)}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-0.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@keyframes swal2-show{0%{transform:scale(0.7)}45%{transform:scale(1.05)}80%{transform:scale(0.95)}100%{transform:scale(1)}}@keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(0.5);opacity:0}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-0.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(0.4);opacity:0}50%{margin-top:1.625em;transform:scale(0.4);opacity:0}80%{margin-top:-0.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0deg);opacity:1}}@keyframes swal2-rotate-loading{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}@keyframes swal2-animate-question-mark{0%{transform:rotateY(-360deg)}100%{transform:rotateY(0)}}@keyframes swal2-animate-i-mark{0%{transform:rotateZ(45deg);opacity:0}25%{transform:rotateZ(-25deg);opacity:.4}50%{transform:rotateZ(15deg);opacity:.8}75%{transform:rotateZ(-5deg);opacity:1}100%{transform:rotateX(0);opacity:1}}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto !important}body.swal2-no-backdrop .swal2-container{background-color:rgba(0,0,0,0) !important;pointer-events:none}body.swal2-no-backdrop .swal2-container .swal2-popup{pointer-events:all}body.swal2-no-backdrop .swal2-container .swal2-modal{box-shadow:0 0 10px rgba(0,0,0,.4)}@media print{body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow-y:scroll !important}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown)>[aria-hidden=true]{display:none}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container{position:static !important}}body.swal2-toast-shown .swal2-container{box-sizing:border-box;width:360px;max-width:100%;background-color:rgba(0,0,0,0);pointer-events:none}body.swal2-toast-shown .swal2-container.swal2-top{top:0;right:auto;bottom:auto;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{top:0;right:0;bottom:auto;left:auto}body.swal2-toast-shown .swal2-container.swal2-top-start,body.swal2-toast-shown .swal2-container.swal2-top-left{top:0;right:auto;bottom:auto;left:0}body.swal2-toast-shown .swal2-container.swal2-center-start,body.swal2-toast-shown .swal2-container.swal2-center-left{top:50%;right:auto;bottom:auto;left:0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{top:50%;right:auto;bottom:auto;left:50%;transform:translate(-50%, -50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{top:50%;right:0;bottom:auto;left:auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-start,body.swal2-toast-shown .swal2-container.swal2-bottom-left{top:auto;right:auto;bottom:0;left:0}body.swal2-toast-shown .swal2-container.swal2-bottom{top:auto;right:auto;bottom:0;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{top:auto;right:0;bottom:0;left:auto}");
\ No newline at end of file
diff --git a/pages/faqs.html b/pages/faqs.html
index ed59a9c..09e900f 100644
--- a/pages/faqs.html
+++ b/pages/faqs.html
@@ -1,109 +1,109 @@
-
-
-
-
- AIS Visa Scheduler FAQs
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- This extension was born out of boredom and the ridiculous task of clicking through multiple months to find the next available date for rescheduling. I wanted to build something to click through the calendar but ended up building the extension which automates
- everything.
-
-
-
-
-
-
-
-
-
- This extension is designed to work for the AIS VISA application system only—which means only the countries listed here (https://ais.usvisa-info.com/en-us/countries_list/niv)
- will work with this extension. Also, this is only for rescheduling your appointment. If you are looking to schedule it for the first time, this extension will not work.
-
-
-
-
-
-
-
-
-
- The extension automates all the clicking and navigating that you'll generally do manually. It uses your current appointment date and periodically checks for any date earlier than it and tries to book it automatically. The
- extension uses credits every time it finds any date. Only when you are in a soft block or a hard block, the credits are not used.
-
-
-
-
-
-
-
-
-
- Soft block: The AIS system shows you no slots for 5 hours when you check for the slots a certain number of times. Sometimes this is 70 checks and sometimes it is only 20. The extension identifies this and
- automatically adjusts the checking interval to prevent a hard block. Hard block: When in the soft block, if you keep checking for slots frequently, the 5-hour period will extend to 24 hours and sometimes
- will prevent you from accessing the site from an IP as well. it is best to stay out of this hard block state.
Sometimes, the website opens up ghost slots to catch users using bots to book appointment. When such slots open up, you'll see errors telling you to that your selection is invalid. If this error happens three times in a row, stop using the extension for a couple of hours.
-
-
-
-
-
-
-
-
-
- The extension is intuitive to use. It'll show you dialogs for you to act on or provide information. Apart from that you can control things like checking frequency and other options. To access these settings pin the AIS Visa Auto Rescheduler extension
- in your browser (How to pin extension). Changes done here are autosaved. In case you want to change the details you provided
- or if the extension is throwing an error or if see "--" as credits instead of a number, click on the "Configure / Reset" button to clear your data and start the process of setting uo the extension again.
-
+ This extension was born out of boredom and the ridiculous task of clicking through multiple months to find the next available date for rescheduling. I wanted to build something to click through the calendar but ended up building the extension which automates
+ everything.
+
+
+
+
+
+
+
+
+
+ This extension is designed to work for the AIS VISA application system only—which means only the countries listed here (https://ais.usvisa-info.com/en-us/countries_list/niv)
+ will work with this extension. Also, this is only for rescheduling your appointment. If you are looking to schedule it for the first time, this extension will not work.
+
+
+
+
+
+
+
+
+
+ The extension automates all the clicking and navigating that you'll generally do manually. It uses your current appointment date and periodically checks for any date earlier than it and tries to book it automatically. The
+ extension uses credits every time it finds any date. Only when you are in a soft block or a hard block, the credits are not used.
+
+
+
+
+
+
+
+
+
+ Soft block: The AIS system shows you no slots for 5 hours when you check for the slots a certain number of times. Sometimes this is 70 checks and sometimes it is only 20. The extension identifies this and
+ automatically adjusts the checking interval to prevent a hard block. Hard block: When in the soft block, if you keep checking for slots frequently, the 5-hour period will extend to 24 hours and sometimes
+ will prevent you from accessing the site from an IP as well. it is best to stay out of this hard block state.
Sometimes, the website opens up ghost slots to catch users using bots to book appointment. When such slots open up, you'll see errors telling you to that your selection is invalid. If this error happens three times in a row, stop using the extension for a couple of hours.
+
+
+
+
+
+
+
+
+
+ The extension is intuitive to use. It'll show you dialogs for you to act on or provide information. Apart from that you can control things like checking frequency and other options. To access these settings pin the AIS Visa Auto Rescheduler extension
+ in your browser (How to pin extension). Changes done here are autosaved. In case you want to change the details you provided
+ or if the extension is throwing an error or if see "--" as credits instead of a number, click on the "Configure / Reset" button to clear your data and start the process of setting uo the extension again.
+