const findCaptionsContainer = () => {
    let e = document.querySelector('div[jsname="dsyhDe"]');
    return e || (e = document.querySelector('div[jscontroller="D1tHje"] > div > div:first-child')), e && (captionContainerChildObserver.observe(e, {
        childList: !0,
        subtree: !0,
        characterData: !0
    }), captionContainerAttributeObserver.observe(e, {
        attributes: !0,
        subtree: !1,
        attributeOldValue: !0
    }), Array.from(e.children).forEach(tryTo((e => {
        updateCurrentTranscriptSession(e)
    }), "handling child node")), debug("Final CaptionsContainer", e)), e
},
findCaptionsContainerObsolete = () => {
    captionContainerChildObserver.disconnect(), captionContainerAttributeObserver.disconnect();
    const e = {},
        t = Array.from(document.querySelectorAll("img")).filter((e => e.src.match(/\.googleusercontent\.com\//)));
    for (let n of t) n.className in e || (e[n.className] = []), e[n.className].push(n);
    const n = [];
    for (let t of Object.values(e)) {
        let e = 0;
        for (let n of t) {
            const t = document.evaluate("..//span", n.parentElement, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE);
            let r;
            for (; r = t.iterateNext();)
                if (0 === r.children.length && r.textContent.length > 3) {
                    e += 1;
                    break
                }
        }
        if (e !== t.length) continue;
        let r = null;
        if (t.length >= 2) {
            const e = [...t];
            let n = null,
                o = !1;
            do {
                for (let t in e) {
                    if (!e[t].parent) {
                        o = !0;
                        break
                    }
                    e[t] = e[t].parent, 0 === t ? n = e[t] : n && n !== e[t] && (n = null), debug("current", n)
                }
            } while (null === n && !1 === o);
            r = n
        } else {
            let e = t[0];
            for (; null === r && e;) e.getAttribute("jscontroller") ? r = e : e = e.parentNode
        }
        if (r) {
            const e = r?.firstChild?.firstChild?.tagName;
            debug("first grand child tag name", e);
            const t = "IMG" === e ? r : r.firstChild.firstChild;
            debug("caption container candidate", t), null !== t && n.push(t)
        }
    }
    if (1 === n.length) return captionContainerChildObserver.observe(n[0], {
        childList: !0,
        subtree: !0,
        characterData: !0
    }), captionContainerAttributeObserver.observe(n[0], {
        attributes: !0,
        subtree: !1,
        attributeOldValue: !0
    }), Array.from(n[0].children).forEach(tryTo((e => {
        updateCurrentTranscriptSession(e)
    }), "handling child node")), debug("Final CaptionsContainer", n[0]), n[0]
},
captionContainerChildObserver = new MutationObserver(tryTo((e => {
    for (let t of e)
        if (debug("mutation target", t.target), t.target === captionsContainer) {
            debug("update with added nodes");
            for (let e of t.addedNodes) updateCurrentTranscriptSession(e)
        } else {
            const e = Array.from(t.addedNodes).filter((e => "SPAN" === e.nodeName || "#text" === e.nodeName)),
                n = Array.from(t.removedNodes).filter((e => "SPAN" === e.nodeName || "#text" === e.nodeName));
            if (debug("addedSpansOrTexts", e), "characterData" === t.type || e.length > 0 || n.length > 0) {
                let e = t.target;
                for (; e && e.parentNode !== captionsContainer;) e = e.parentNode;
                if (!e) {
                    debug("could not find root for", t.target);
                    continue
                }
                if (debug("update with parent node"), e.querySelector("button")) {
                    let t = Array.from(e.children),
                        n = t.slice(0, t.length - 1).slice(-4);
                    for (let e of n) updateCurrentTranscriptSession(e)
                } else updateCurrentTranscriptSession(e)
            }
        }
}), "executing observer")),
captionContainerAttributeObserver = new MutationObserver(tryTo((e => {
    for (let t of e)
        if ("style" === t.attributeName) {
            const e = t.target.getAttribute("style");
            "display: none;" === t.oldValue && "" === e && (currentSessionIndex = null)
        }
}), "executing observer"));
let isCaptionTurnedOn = !1;
const closedCaptionsAttachLoop = () => {
    if (captionsContainer = findCaptionsContainer(), captionsContainer) debug("attached to closed captions"), isCaptionTurnedOn = !0, clearInterval(closedCaptionsAttachInterval);
    else if (!hasCaptionButtons) {
        if (isCaptionTurnedOn) return;
        if (getElementWithXPathFallback(document, XPATH_CAPTION_OPEN_TOAST, XPATH_CAPTION_OPEN_TOAST_V20210602)) return popup.classList.remove("show"), isCaptionTurnedOn = !0, notificationsOn(), void clearInterval(closedCaptionsAttachInterval);
        isCaptionTurnedOn || turnOnCaptionNotificationsOn()
    }
},
removeCaptionPanel = () => {
    // debug("start remove caption panel");
    // const e = document.querySelector('div[jscontroller="D1tHje"]');
    // debug("googleMeetCaptionsPanel", e), e && (e.style = "height: 0px", turnOffCaptions(), setTimeout((() => {
    //     turnOnCaptions()
    // }), 500))
};