TELEGRAM: @RAMA_MODZ

AUTO-BYPASS SHORTENER LINKS (ENCURTARAPIDO). SKIP WAITING TIME, AUTO-CLICK BUTTONS, AND GET YOUR LINK FASTER. BY @RAMA_MODZ

Dovrai installare un'estensione come Tampermonkey, Greasemonkey o Violentmonkey per installare questo script.

You will need to install an extension such as Tampermonkey to install this script.

Dovrai installare un'estensione come Tampermonkey o Violentmonkey per installare questo script.

Dovrai installare un'estensione come Tampermonkey o Userscripts per installare questo script.

Dovrai installare un'estensione come ad esempio Tampermonkey per installare questo script.

Dovrai installare un gestore di script utente per installare questo script.

(Ho già un gestore di script utente, lasciamelo installare!)

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

(Ho già un gestore di stile utente, lasciamelo installare!)

// ==UserScript==
// @name        TELEGRAM: @RAMA_MODZ
// @namespace    https://t.me/RAMA_MODZ
// @version      1.5
// @description  AUTO-BYPASS SHORTENER LINKS (ENCURTARAPIDO). SKIP WAITING TIME, AUTO-CLICK BUTTONS, AND GET YOUR LINK FASTER. BY @RAMA_MODZ
// @author       RAMA_MODZ
// @match        https://aincrad.decryptvpn.xyz/*
// @match        https://precisosaberinvestir.com.br/*
// @match        https://encurtarapido.com/*
// @match        *://*encurtarapido.com/*
// @grant        none
// @run-at       document-start
// @license      CC BY-NC-ND 4.0
// @homepageURL  https://t.me/RAMA_MODZ
// @supportURL   https://t.me/RAMA_MODZ

// ==/UserScript==

(function() {
    'use strict';

    const CONFIG = {
        TOKEN: '3TMdueEaUw',
        BASE_URL: 'https://encurtarapido.com/',
        CLICK_COOLDOWN: 5000,
        TIMER_WAIT_SECONDS: 80 
    };

    const CLICK_KEYWORDS = ["Clique aqui para prosseguir", "clique aqui para prosseguir"];
    const FINAL_BUTTON_KEYWORDS = ["Obter link", "obter link", "Obter Link"];
    
    
    const TIMER_INDICATORS = [
        '#tp-count', '.timer', '.countdown', 
        'Seu link está quase pronto', 'aguarde', 'wait'
    ];

    let timerPhaseActive = false;
    let lastClickTime = 0;

    
    function injectBranding() {
        // watermark disabled
    }

    
    function showCentralToast() {
        if (document.getElementById('xenox-toast-lock')) return;

        // Inject keyframe animations
        const style = document.createElement('style');
        style.id = 'xenox-styles';
        style.textContent = `
            @keyframes xenox-fadeIn {
                from { opacity: 0; transform: translate(-50%, -48%) scale(0.95); }
                to   { opacity: 1; transform: translate(-50%, -50%) scale(1); }
            }
            @keyframes xenox-pulse-ring {
                0%   { box-shadow: 0 0 0 0 rgba(0,242,255,0.4), 0 0 30px rgba(0,242,255,0.3); }
                70%  { box-shadow: 0 0 0 12px rgba(0,242,255,0), 0 0 30px rgba(0,242,255,0.3); }
                100% { box-shadow: 0 0 0 0 rgba(0,242,255,0), 0 0 30px rgba(0,242,255,0.3); }
            }
            @keyframes xenox-glow-text {
                0%, 100% { text-shadow: 0 0 10px #00f2ff, 0 0 20px #00f2ff; }
                50%       { text-shadow: 0 0 20px #00f2ff, 0 0 40px #00f2ff, 0 0 60px #00b8ff; }
            }
            @keyframes xenox-warn-flash {
                0%, 100% { color: #ff4444; }
                50%       { color: #ff8800; }
            }
            @keyframes xenox-bar-shine {
                0%   { background-position: -200% center; }
                100% { background-position: 200% center; }
            }
            @keyframes xenox-particle-float {
                0%   { transform: translateY(0px) translateX(0px) scale(1); opacity: 0.7; }
                33%  { transform: translateY(-18px) translateX(6px) scale(1.1); opacity: 1; }
                66%  { transform: translateY(-8px) translateX(-6px) scale(0.9); opacity: 0.8; }
                100% { transform: translateY(0px) translateX(0px) scale(1); opacity: 0.7; }
            }
            #xenox-btn-tg:hover {
                transform: scale(1.06) !important;
                box-shadow: 0 0 18px rgba(0,136,204,0.9) !important;
            }
        `;
        document.head.appendChild(style);

        // Overlay backdrop
        const overlay = document.createElement('div');
        overlay.id = 'xenox-overlay';
        overlay.style.cssText = `
            position: fixed; inset: 0;
            background: rgba(0,0,0,0.65);
            backdrop-filter: blur(3px);
            z-index: 2147483640;
            pointer-events: none;
        `;
        document.body.appendChild(overlay);

        // Canvas for particles
        const canvas = document.createElement('canvas');
        canvas.id = 'xenox-canvas';
        canvas.style.cssText = `
            position: fixed; inset: 0;
            width: 100%; height: 100%;
            z-index: 2147483641;
            pointer-events: none;
        `;
        document.body.appendChild(canvas);

        // Particle system — use actual pixel dimensions
        const ctx = canvas.getContext('2d');
        canvas.width = window.screen.width;
        canvas.height = window.screen.height;

        const W = canvas.width;
        const H = canvas.height;

        const particles = Array.from({ length: 70 }, () => ({
            x: Math.random() * W,
            y: Math.random() * H,
            r: Math.random() * 2.8 + 0.8,
            dx: (Math.random() - 0.5) * 2.2,
            dy: (Math.random() - 0.5) * 2.2,
            hue: Math.random() * 60 + 170,
            alpha: Math.random() * 0.5 + 0.4
        }));

        let particleRAF;
        function drawParticles() {
            ctx.clearRect(0, 0, W, H);
            particles.forEach(p => {
                // glow dot
                ctx.beginPath();
                ctx.arc(p.x, p.y, p.r, 0, Math.PI * 2);
                ctx.fillStyle = `hsla(${p.hue}, 100%, 65%, ${p.alpha})`;
                ctx.shadowColor = `hsla(${p.hue}, 100%, 65%, 1)`;
                ctx.shadowBlur = 8;
                ctx.fill();
                // move
                p.x += p.dx;
                p.y += p.dy;
                // wrap around edges
                if (p.x < 0) p.x = W;
                if (p.x > W) p.x = 0;
                if (p.y < 0) p.y = H;
                if (p.y > H) p.y = 0;
                p.hue += 0.5;
            });
            // connecting lines
            ctx.shadowBlur = 0;
            for (let i = 0; i < particles.length; i++) {
                for (let j = i + 1; j < particles.length; j++) {
                    const dist = Math.hypot(particles[i].x - particles[j].x, particles[i].y - particles[j].y);
                    if (dist < 90) {
                        ctx.beginPath();
                        ctx.moveTo(particles[i].x, particles[i].y);
                        ctx.lineTo(particles[j].x, particles[j].y);
                        ctx.strokeStyle = `rgba(0,242,255,${0.15 * (1 - dist / 90)})`;
                        ctx.lineWidth = 0.6;
                        ctx.stroke();
                    }
                }
            }
            particleRAF = requestAnimationFrame(drawParticles);
        }
        drawParticles();

        // Main toast card
        const toast = document.createElement('div');
        toast.id = 'xenox-toast-lock';
        toast.style.cssText = `
            position: fixed; top: 50%; left: 50%;
            transform: translate(-50%, -50%);
            width: 88%; max-width: 360px;
            background: linear-gradient(160deg, #0a0a1a 0%, #060612 60%, #0a0a1a 100%);
            border: 1.5px solid rgba(0,242,255,0.6);
            border-radius: 20px;
            padding: 24px 22px 20px;
            color: #fff;
            z-index: 2147483646;
            text-align: center;
            font-family: 'Segoe UI', sans-serif;
            animation: xenox-fadeIn 0.4s ease, xenox-pulse-ring 2s infinite;
            pointer-events: none;
            overflow: hidden;
        `;

        toast.innerHTML = `
            <!-- Top glow stripe -->
            <div style="position:absolute;top:0;left:0;right:0;height:2px;background:linear-gradient(90deg,transparent,#00f2ff,#a78bfa,#00f2ff,transparent);"></div>

            <!-- Warning label -->
            <div style="
                display:inline-flex; align-items:center; gap:6px;
                background:rgba(255,68,68,0.12); border:1px solid rgba(255,68,68,0.35);
                border-radius:30px; padding:5px 14px; margin-bottom:14px;
                font-size:13px; font-weight:700; letter-spacing:0.5px;
                animation: xenox-warn-flash 1.4s infinite;
            ">⚠️ DON'T TOUCH ANYTHING!</div>

            <!-- Timer -->
            <div style="position:relative; margin-bottom:6px;">
                <div id="xenox-toast-time" style="
                    font-size:78px; font-weight:900; line-height:1;
                    color:#00f2ff;
                    animation: xenox-glow-text 1.8s ease-in-out infinite;
                    letter-spacing:-2px;
                ">${CONFIG.TIMER_WAIT_SECONDS}</div>
                <div style="font-size:11px; color:rgba(0,242,255,0.5); letter-spacing:3px; text-transform:uppercase; margin-top:-4px;">seconds</div>
            </div>

            <!-- Status -->
            <div style="font-size:12px; color:#888; margin:10px 0 12px; letter-spacing:0.3px;">
                🔄 Bypass in progress...
            </div>

            <!-- Progress bar -->
            <div style="background:rgba(255,255,255,0.07); border-radius:99px; height:6px; overflow:hidden; margin-bottom:16px;">
                <div id="xenox-progress-bar" style="
                    height:100%; width:100%;
                    background: linear-gradient(90deg, #00f2ff, #a78bfa, #00f2ff);
                    background-size: 200% auto;
                    border-radius:99px;
                    animation: xenox-bar-shine 2s linear infinite;
                    transition: width 1s linear;
                "></div>
            </div>

            <!-- Divider -->
            <div style="border-top:1px solid rgba(255,255,255,0.07); padding-top:14px;">
                <a id="xenox-btn-tg" href="https://t.me/RAMA_MODZ" target="_blank" style="
                    display: inline-flex; align-items: center; gap: 8px;
                    pointer-events: all;
                    background: linear-gradient(135deg, #0088cc 0%, #00b4d8 100%);
                    color: #fff;
                    font-weight: 700;
                    font-size: 13px;
                    text-decoration: none;
                    padding: 9px 20px;
                    border-radius: 30px;
                    box-shadow: 0 0 14px rgba(0,136,204,0.5);
                    letter-spacing: 0.4px;
                    transition: transform 0.2s, box-shadow 0.2s;
                ">
                    <svg width="16" height="16" viewBox="0 0 24 24" fill="white"><path d="M12 0C5.373 0 0 5.373 0 12s5.373 12 12 12 12-5.373 12-12S18.627 0 12 0zm5.894 8.221l-1.97 9.28c-.145.658-.537.818-1.084.508l-3-2.21-1.447 1.394c-.16.16-.295.295-.605.295l.213-3.053 5.56-5.023c.242-.213-.054-.333-.373-.12l-6.871 4.326-2.962-.924c-.643-.204-.657-.643.136-.953l11.57-4.461c.537-.194 1.006.131.833.941z"/></svg>
                    t.me/RAMA_MODZ
                </a>
            </div>

            <!-- Bottom glow stripe -->
            <div style="position:absolute;bottom:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(167,139,250,0.5),transparent);"></div>
        `;

        document.body.appendChild(toast);

        // Animate progress bar shrinking
        const totalTime = CONFIG.TIMER_WAIT_SECONDS;
        let timeLeft = totalTime;

        const itv = setInterval(() => {
            timeLeft--;
            const disp = document.getElementById('xenox-toast-time');
            const bar  = document.getElementById('xenox-progress-bar');
            if (disp) disp.textContent = timeLeft;
            if (bar)  bar.style.width = ((timeLeft / totalTime) * 100) + '%';

            if (timeLeft <= 0) {
                clearInterval(itv);
                cancelAnimationFrame(particleRAF);
                canvas.remove();
                overlay.remove();
                toast.remove();
                const s = document.getElementById('xenox-styles');
                if (s) s.remove();
                findFinalAndClick();
            }
        }, 1000);
    }

    
    function simulateHumanClick(el) {
        if (!el || el.offsetParent === null) return;
        const rect = el.getBoundingClientRect();
        const x = rect.left + rect.width / 2;
        const y = rect.top + rect.height / 2;
        const opts = { bubbles: true, cancelable: true, view: window, clientX: x, clientY: y };
        el.dispatchEvent(new MouseEvent('mousedown', opts));
        el.dispatchEvent(new MouseEvent('mouseup', opts));
        el.dispatchEvent(new MouseEvent('click', opts));
        if (typeof el.click === 'function') el.click();
    }

    
    function automationLoop() {
        const bodyText = (document.body?.innerText || '').toLowerCase();
        
        
        const isTimerPage = TIMER_INDICATORS.some(indicator => {
            if (indicator.startsWith('.') || indicator.startsWith('#')) {
                return document.querySelector(indicator) !== null;
            }
            return bodyText.includes(indicator);
        });

        if (isTimerPage) {
            if (!timerPhaseActive) {
                timerPhaseActive = true;
                showCentralToast();
            }
            return;
        }

        if (timerPhaseActive) return;

        
        const elements = document.querySelectorAll('button, a, .btn, .button');
        for (const el of elements) {
            const text = (el.innerText || el.textContent || '').trim();
            if (CLICK_KEYWORDS.some(kw => text === kw || text.includes(kw))) {
                const now = Date.now();
                if (now - lastClickTime > CONFIG.CLICK_COOLDOWN) {
                    lastClickTime = now;
                    simulateHumanClick(el);
                    break;
                }
            }
        }
    }

    function findFinalAndClick() {
        const elements = document.querySelectorAll('button, a, .btn, .button');
        for (const el of elements) {
            const text = (el.innerText || el.textContent || '').trim();
            if (FINAL_BUTTON_KEYWORDS.some(kw => text === kw || text.includes(kw))) {
                simulateHumanClick(el);
                break;
            }
        }
    }

    
    function handleRedirect() {
        if (window.location.hostname.includes('precisosaberinvestir.com.br')) {
            const p = new URLSearchParams(window.location.search);
            const sf_v = p.get('sf_v') || p.get('id');
            const sf_ts = p.get('sf_ft_ts') || p.get('ts');
            const sf_sig = p.get('sf_sig') || p.get('sf_ft_sig');
            if (sf_v === CONFIG.TOKEN && sf_sig) {
                window.location.replace(`${CONFIG.BASE_URL}${CONFIG.TOKEN}?rtgok=1&sf_ft_ts=${encodeURIComponent(sf_ts || '')}&sf_ft_sig=${encodeURIComponent(sf_sig)}`);
            }
        }
    }

    function init() {
        injectBranding();
        handleRedirect();
        setInterval(automationLoop, 1500);
    }

    if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', init);
    else init();
})();