(() => {
    if (window.aituInitiated !== undefined) return;

    window.aituInitiated = false;

    const STORAGE_KEY = "aituPassword";

    async function decrypt(encryptedText, password) {
        const encryptedDataWithIv = new Uint8Array(atob(encryptedText).split("").map(char => char.charCodeAt(0)));

        const iv = encryptedDataWithIv.slice(0, 16);
        const encryptedData = encryptedDataWithIv.slice(16);

        const encoder = new TextEncoder();

        const baseKey = await crypto.subtle.importKey(
            "raw",
            encoder.encode(password),
            { name: "PBKDF2" },
            false,
            ["deriveKey"]
        );

        const keyObj = await crypto.subtle.deriveKey(
            {
                name: "PBKDF2",
                salt: iv,
                iterations: 100000,
                hash: "SHA-256"
            },
            baseKey,
            { name: "AES-CBC", length: 256 },
            false,
            ["decrypt"]
        );

        const decryptedData = await crypto.subtle.decrypt(
            { name: "AES-CBC", iv: iv },
            keyObj,
            encryptedData
        );

        const decoder = new TextDecoder();

        return decoder.decode(decryptedData);
    };

    const encryptedBlob = "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";

    (async () => {
        let password = localStorage.getItem(STORAGE_KEY);
        let decryptedCode;

        while (true) {
            if (!password) {
                password = prompt("Enter password:");

                if (!password) {
                    alert("Decryption cancelled.");

                    return;
                }
            }

            try {
                decryptedCode = await decrypt(encryptedBlob, password);
                localStorage.setItem(STORAGE_KEY, password);

                break;

            } catch (err) {
                localStorage.removeItem(STORAGE_KEY);
                password = undefined;
            }
        }

        window.aituInitiated = true;
        console.log("Started");
        eval("(" + decryptedCode.slice(0, decryptedCode.length - 1) + ")")(password);
    })();
})();
