Подпишитесь на наш Telegram-канал, чтобы всегда быть в курсе важных обновлений! Перейти

Исходник Xy0 resolver hhh

  • Автор темы Автор темы ba1m0v
  • Дата начала Дата начала
фа-фа-фаина, фаина
Забаненный
Забаненный
Статус
Оффлайн
Регистрация
19 Апр 2020
Сообщения
327
Реакции
138
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Делаем резовлер для xy0, PS: не говорите что какаха, я знаю. Заходим в resolver.cpp - вставляем эту поеботу -
C++:
Expand Collapse Copy
__forceinline float MaxDesyncAmount()//хыхыхых
{
    auto animstate = uintptr_t(Globals::LocalPlayer->AnimState());

    float
        rate = 180,
        duckammount = *(float*)(animstate + 0xA4),
        speedfraction = (0.f, (*(float*)(animstate + 0xF8), 1.f)),
        speedfactor = (0.f, (1.f, *(float*)(animstate + 0xFC)));

    float
        unk1 = ((*(float*)(animstate + 0x11C) * -0.30000001) - 0.19999999) * speedfraction, // animstate
        unk2 = unk1 + 1.f;

    if (duckammount > 0)
        unk2 += ((duckammount * speedfactor) * (0.5f - unk2));

    return *(float*)(animstate + 0x334) * unk2;//получаем норм десинк амоунт
};


void DetectTrueSideIDX_TRACER_RAY(C_BaseEntity* player, int* side)
{
    Vector src3D, dst3D, forward, right, up, src, dst;
    float back_two, right_two, left_two;
    C_Trace tr;
    ray_t ray, ray2, ray3, ray4, ray5;
    C_TraceFilter filter(player);

    AngleVectors(Vector(0, GetBackwardYaw(player), 0), &forward, &right, &up);

    filter.pSkip1 = player;
    src3D = player->GetEyePosition();
    dst3D = src3D + (forward * 384);


    ray.initialize(src3D, dst3D);
    g_pTrace->TraceRay(C_Ray(ray.m_start, ray.m_end), mask_shot, &filter, &tr);
    back_two = (tr.end - tr.start).Length();

    ray.initialize(src3D + right * 35, dst3D + right * 35);
    g_pTrace->TraceRay(C_Ray(ray2.m_start, ray2.m_end), mask_shot, &filter, &tr);
    right_two = (tr.end - tr.start).Length();

    ray.initialize(src3D - right * 35, dst3D - right * 35);
    g_pTrace->TraceRay(C_Ray(ray3.m_start, ray3.m_end), mask_shot, &filter, &tr);
    left_two = (tr.end - tr.start).Length();

    if (left_two > right_two) {
        *side = -1;
        //боди щуд би райт
    }
    else if (right_two > left_two) {
        *side = 1;
    }
    else
        *side = 0;
}

int FreestandSideProped_dfv23[64];



void resolver(C_BaseEntity* ent)
{


    if (!Globals::LocalPlayer->IsAlive())
        return;



    if (DoesPlayerHaveJitterCMD(ent, jittered_side));//детект джиттеров а че)
    {
        newsidefromdetect = jittered_side;
        JITTER = true;
    }

    if (!DoesPlayerHaveJitterCMD(ent, jittered_side));//
    {
        newsidefromdetect = 1;
        JITTER = false;
    }

    bool resolve;
    int nohint_resolve = 1;
    //hints
    float MAXDELTA = MaxDesyncAmount();//абузим макседдльту, нах 60.

    auto animStateIndex_prop = ent->AnimState(); // get animstate ez 

    int proper_index = ent->EntIndex();

    float angle = GetRealAngleFromAnim(ent);//текущий угол
   
    if (&c_config::get().aimbot_resolver)
    {
        resolve = true;
        // animStateIndex_prop->m_flGoalFeetYaw = GetNormalizedAngleyaw_property(animStateIndex_prop->m_flGoalFeetYaw); /// useless
    }
    else
    {

        resolve = false;
    }
    if (Globals::MissedShots[ent->EntIndex()] == 0)//если 0 миссов, делам детект сайда, или че у вас там есть)) bruh))) xd
    {
        //detect jopa
        DetectTrueSideIDX_TRACER_RAY(ent, &FreestandSideProped_dfv23[proper_index]);
        animStateIndex_prop->m_flGoalFeetYaw = GetNormalizedAngleyaw_property(angle - MAXDELTA * FreestandSideProped_dfv23[proper_index]);
    }
    else
    {//def bruteforce 
        //0____0 bruteforce
        switch (Globals::MissedShots[ent->EntIndex()] % 2) {
        case 0: // brute right side 
            MAXDELTA = MaxDesyncAmount();
            animStateIndex_prop->m_flGoalFeetYaw = GetNormalizedAngleyaw_property((angle + (MAXDELTA)) * nohint_resolve);//max delta 0__0
            break;
        case 1: // brute left side
            MAXDELTA = MaxDesyncAmount();
            animStateIndex_prop->m_flGoalFeetYaw = GetNormalizedAngleyaw_property((angle - (MAXDELTA)) * nohint_resolve);//0_0
            break;
        }
    }

    animStateIndex_prop->m_flGoalFeetYaw = GetNormalizedAngleyaw_property(animStateIndex_prop->m_flGoalFeetYaw);

}


Заходим в IEngineTrace - и заменяем струкутуру ray_t на вот это -
C++:
Expand Collapse Copy
struct ray_t {
    Vector m_start; // starting point, centered within the extents
    Vector m_end; // starting point, centered within the extents
    Vector m_delta; // direction + length of the ray
    Vector m_start_offset; // Add this to m_Start to get the actual ray start
    Vector m_extents; // Describes an axis aligned box extruded along a ray
    const matrix3x4_t* m_world_axis_transform;
    //const matrix_t *m_pWorldAxisTransform;
    bool m_is_ray; // are the extents zero?
    bool m_is_swept; // is delta != 0?

    void initialize(const Vector& start, const Vector& end) {
        m_delta = end - start;

        m_is_swept = (m_delta.LengthSqr() != 0);

        m_extents.x = m_extents.y = m_extents.z = 0.0f;
        m_is_ray = true;

        m_start_offset.x = m_start_offset.y = m_start_offset.z = 0.0f;

        m_start = start;
        m_end = end;
    }

    void initialize(Vector& vecStart, Vector& vecEnd, Vector min, Vector max) {
        m_delta = vecEnd - vecStart;

        m_is_swept = (m_delta.LengthSqr() != 0);

        m_extents.x = (max.x - min.x);
        m_extents.y = (max.y - min.y);
        m_extents.z = (max.z - min.z);
        m_is_ray = false;

        m_start_offset.x = m_start_offset.y = m_start_offset.z = 0.0f;

        m_start = vecStart + ((max + min) * 0.5f);
    }

private:
};

Вот и все.
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
XD, trash code..
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
гетхад написан на ксгосимпле и там базовый рейдж и аа есть
правда анимки и 3 лицо сломаны но фиксы найти легко
а кому гетхад нужен в котором ДОХУЯ мусора, проще чистый симпл с рейджом и на нем уже делать софт бтв
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Делаем резовлер для xy0, PS: не говорите что какаха, я знаю. Заходим в resolver.cpp - вставляем эту поеботу -
C++:
Expand Collapse Copy
__forceinline float MaxDesyncAmount()//хыхыхых
{
    auto animstate = uintptr_t(Globals::LocalPlayer->AnimState());

    float
        rate = 180,
        duckammount = *(float*)(animstate + 0xA4),
        speedfraction = (0.f, (*(float*)(animstate + 0xF8), 1.f)),
        speedfactor = (0.f, (1.f, *(float*)(animstate + 0xFC)));

    float
        unk1 = ((*(float*)(animstate + 0x11C) * -0.30000001) - 0.19999999) * speedfraction, // animstate
        unk2 = unk1 + 1.f;

    if (duckammount > 0)
        unk2 += ((duckammount * speedfactor) * (0.5f - unk2));

    return *(float*)(animstate + 0x334) * unk2;//получаем норм десинк амоунт
};


void DetectTrueSideIDX_TRACER_RAY(C_BaseEntity* player, int* side)
{
    Vector src3D, dst3D, forward, right, up, src, dst;
    float back_two, right_two, left_two;
    C_Trace tr;
    ray_t ray, ray2, ray3, ray4, ray5;
    C_TraceFilter filter(player);

    AngleVectors(Vector(0, GetBackwardYaw(player), 0), &forward, &right, &up);

    filter.pSkip1 = player;
    src3D = player->GetEyePosition();
    dst3D = src3D + (forward * 384);


    ray.initialize(src3D, dst3D);
    g_pTrace->TraceRay(C_Ray(ray.m_start, ray.m_end), mask_shot, &filter, &tr);
    back_two = (tr.end - tr.start).Length();

    ray.initialize(src3D + right * 35, dst3D + right * 35);
    g_pTrace->TraceRay(C_Ray(ray2.m_start, ray2.m_end), mask_shot, &filter, &tr);
    right_two = (tr.end - tr.start).Length();

    ray.initialize(src3D - right * 35, dst3D - right * 35);
    g_pTrace->TraceRay(C_Ray(ray3.m_start, ray3.m_end), mask_shot, &filter, &tr);
    left_two = (tr.end - tr.start).Length();

    if (left_two > right_two) {
        *side = -1;
        //боди щуд би райт
    }
    else if (right_two > left_two) {
        *side = 1;
    }
    else
        *side = 0;
}

int FreestandSideProped_dfv23[64];



void resolver(C_BaseEntity* ent)
{


    if (!Globals::LocalPlayer->IsAlive())
        return;



    if (DoesPlayerHaveJitterCMD(ent, jittered_side));//детект джиттеров а че)
    {
        newsidefromdetect = jittered_side;
        JITTER = true;
    }

    if (!DoesPlayerHaveJitterCMD(ent, jittered_side));//
    {
        newsidefromdetect = 1;
        JITTER = false;
    }

    bool resolve;
    int nohint_resolve = 1;
    //hints
    float MAXDELTA = MaxDesyncAmount();//абузим макседдльту, нах 60.

    auto animStateIndex_prop = ent->AnimState(); // get animstate ez

    int proper_index = ent->EntIndex();

    float angle = GetRealAngleFromAnim(ent);//текущий угол
  
    if (&c_config::get().aimbot_resolver)
    {
        resolve = true;
        // animStateIndex_prop->m_flGoalFeetYaw = GetNormalizedAngleyaw_property(animStateIndex_prop->m_flGoalFeetYaw); /// useless
    }
    else
    {

        resolve = false;
    }
    if (Globals::MissedShots[ent->EntIndex()] == 0)//если 0 миссов, делам детект сайда, или че у вас там есть)) bruh))) xd
    {
        //detect jopa
        DetectTrueSideIDX_TRACER_RAY(ent, &FreestandSideProped_dfv23[proper_index]);
        animStateIndex_prop->m_flGoalFeetYaw = GetNormalizedAngleyaw_property(angle - MAXDELTA * FreestandSideProped_dfv23[proper_index]);
    }
    else
    {//def bruteforce
        //0____0 bruteforce
        switch (Globals::MissedShots[ent->EntIndex()] % 2) {
        case 0: // brute right side
            MAXDELTA = MaxDesyncAmount();
            animStateIndex_prop->m_flGoalFeetYaw = GetNormalizedAngleyaw_property((angle + (MAXDELTA)) * nohint_resolve);//max delta 0__0
            break;
        case 1: // brute left side
            MAXDELTA = MaxDesyncAmount();
            animStateIndex_prop->m_flGoalFeetYaw = GetNormalizedAngleyaw_property((angle - (MAXDELTA)) * nohint_resolve);//0_0
            break;
        }
    }

    animStateIndex_prop->m_flGoalFeetYaw = GetNormalizedAngleyaw_property(animStateIndex_prop->m_flGoalFeetYaw);

}


Заходим в IEngineTrace - и заменяем струкутуру ray_t на вот это -
C++:
Expand Collapse Copy
struct ray_t {
    Vector m_start; // starting point, centered within the extents
    Vector m_end; // starting point, centered within the extents
    Vector m_delta; // direction + length of the ray
    Vector m_start_offset; // Add this to m_Start to get the actual ray start
    Vector m_extents; // Describes an axis aligned box extruded along a ray
    const matrix3x4_t* m_world_axis_transform;
    //const matrix_t *m_pWorldAxisTransform;
    bool m_is_ray; // are the extents zero?
    bool m_is_swept; // is delta != 0?

    void initialize(const Vector& start, const Vector& end) {
        m_delta = end - start;

        m_is_swept = (m_delta.LengthSqr() != 0);

        m_extents.x = m_extents.y = m_extents.z = 0.0f;
        m_is_ray = true;

        m_start_offset.x = m_start_offset.y = m_start_offset.z = 0.0f;

        m_start = start;
        m_end = end;
    }

    void initialize(Vector& vecStart, Vector& vecEnd, Vector min, Vector max) {
        m_delta = vecEnd - vecStart;

        m_is_swept = (m_delta.LengthSqr() != 0);

        m_extents.x = (max.x - min.x);
        m_extents.y = (max.y - min.y);
        m_extents.z = (max.z - min.z);
        m_is_ray = false;

        m_start_offset.x = m_start_offset.y = m_start_offset.z = 0.0f;

        m_start = vecStart + ((max + min) * 0.5f);
    }

private:
};

Вот и все.
ты че кодстайл поменял
Почему так
C++:
Expand Collapse Copy
  auto animStateIndex_prop = ent->AnimState(); // get animstate ez
а не так
C++:
Expand Collapse Copy
 auto animlayer = ent->AnimState(); // get animstate ez
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
it would be better to in your bruteforce shoot at -60 first, because it has less of a deviation from their real. then their viewangles then + 60, this hypothetically assuming they are not using a jitter / antiaim (or antibruteforce) and staying on a side (static) you will resolve within 3 shots guaranteed, however with this it does not even try to use their viewangles on any of the brute stages, and you're brute forcing with the side with the most deviation for your first shot. and for your freestand prediction idea based on traces, if you utilize bameware's (not advert) antifreestanding you can yield even better results. either way, thanks
 
Последнее редактирование:
Делаем резовлер для xy0, PS: не говорите что какаха, я знаю. Заходим в resolver.cpp - вставляем эту поеботу -
C++:
Expand Collapse Copy
__forceinline float MaxDesyncAmount()//хыхыхых
{
    auto animstate = uintptr_t(Globals::LocalPlayer->AnimState());

    float
        rate = 180,
        duckammount = *(float*)(animstate + 0xA4),
        speedfraction = (0.f, (*(float*)(animstate + 0xF8), 1.f)),
        speedfactor = (0.f, (1.f, *(float*)(animstate + 0xFC)));

    float
        unk1 = ((*(float*)(animstate + 0x11C) * -0.30000001) - 0.19999999) * speedfraction, // animstate
        unk2 = unk1 + 1.f;

    if (duckammount > 0)
        unk2 += ((duckammount * speedfactor) * (0.5f - unk2));

    return *(float*)(animstate + 0x334) * unk2;//получаем норм десинк амоунт
};


void DetectTrueSideIDX_TRACER_RAY(C_BaseEntity* player, int* side)
{
    Vector src3D, dst3D, forward, right, up, src, dst;
    float back_two, right_two, left_two;
    C_Trace tr;
    ray_t ray, ray2, ray3, ray4, ray5;
    C_TraceFilter filter(player);

    AngleVectors(Vector(0, GetBackwardYaw(player), 0), &forward, &right, &up);

    filter.pSkip1 = player;
    src3D = player->GetEyePosition();
    dst3D = src3D + (forward * 384);


    ray.initialize(src3D, dst3D);
    g_pTrace->TraceRay(C_Ray(ray.m_start, ray.m_end), mask_shot, &filter, &tr);
    back_two = (tr.end - tr.start).Length();

    ray.initialize(src3D + right * 35, dst3D + right * 35);
    g_pTrace->TraceRay(C_Ray(ray2.m_start, ray2.m_end), mask_shot, &filter, &tr);
    right_two = (tr.end - tr.start).Length();

    ray.initialize(src3D - right * 35, dst3D - right * 35);
    g_pTrace->TraceRay(C_Ray(ray3.m_start, ray3.m_end), mask_shot, &filter, &tr);
    left_two = (tr.end - tr.start).Length();

    if (left_two > right_two) {
        *side = -1;
        //боди щуд би райт
    }
    else if (right_two > left_two) {
        *side = 1;
    }
    else
        *side = 0;
}

int FreestandSideProped_dfv23[64];



void resolver(C_BaseEntity* ent)
{


    if (!Globals::LocalPlayer->IsAlive())
        return;



    if (DoesPlayerHaveJitterCMD(ent, jittered_side));//детект джиттеров а че)
    {
        newsidefromdetect = jittered_side;
        JITTER = true;
    }

    if (!DoesPlayerHaveJitterCMD(ent, jittered_side));//
    {
        newsidefromdetect = 1;
        JITTER = false;
    }

    bool resolve;
    int nohint_resolve = 1;
    //hints
    float MAXDELTA = MaxDesyncAmount();//абузим макседдльту, нах 60.

    auto animStateIndex_prop = ent->AnimState(); // get animstate ez 

    int proper_index = ent->EntIndex();

    float angle = GetRealAngleFromAnim(ent);//текущий угол
   
    if (&c_config::get().aimbot_resolver)
    {
        resolve = true;
        // animStateIndex_prop->m_flGoalFeetYaw = GetNormalizedAngleyaw_property(animStateIndex_prop->m_flGoalFeetYaw); /// useless
    }
    else
    {

        resolve = false;
    }
    if (Globals::MissedShots[ent->EntIndex()] == 0)//если 0 миссов, делам детект сайда, или че у вас там есть)) bruh))) xd
    {
        //detect jopa
        DetectTrueSideIDX_TRACER_RAY(ent, &FreestandSideProped_dfv23[proper_index]);
        animStateIndex_prop->m_flGoalFeetYaw = GetNormalizedAngleyaw_property(angle - MAXDELTA * FreestandSideProped_dfv23[proper_index]);
    }
    else
    {//def bruteforce 
        //0____0 bruteforce
        switch (Globals::MissedShots[ent->EntIndex()] % 2) {
        case 0: // brute right side 
            MAXDELTA = MaxDesyncAmount();
            animStateIndex_prop->m_flGoalFeetYaw = GetNormalizedAngleyaw_property((angle + (MAXDELTA)) * nohint_resolve);//max delta 0__0
            break;
        case 1: // brute left side
            MAXDELTA = MaxDesyncAmount();
            animStateIndex_prop->m_flGoalFeetYaw = GetNormalizedAngleyaw_property((angle - (MAXDELTA)) * nohint_resolve);//0_0
            break;
        }
    }

    animStateIndex_prop->m_flGoalFeetYaw = GetNormalizedAngleyaw_property(animStateIndex_prop->m_flGoalFeetYaw);

}


Заходим в IEngineTrace - и заменяем струкутуру ray_t на вот это -
C++:
Expand Collapse Copy
struct ray_t {
    Vector m_start; // starting point, centered within the extents
    Vector m_end; // starting point, centered within the extents
    Vector m_delta; // direction + length of the ray
    Vector m_start_offset; // Add this to m_Start to get the actual ray start
    Vector m_extents; // Describes an axis aligned box extruded along a ray
    const matrix3x4_t* m_world_axis_transform;
    //const matrix_t *m_pWorldAxisTransform;
    bool m_is_ray; // are the extents zero?
    bool m_is_swept; // is delta != 0?

    void initialize(const Vector& start, const Vector& end) {
        m_delta = end - start;

        m_is_swept = (m_delta.LengthSqr() != 0);

        m_extents.x = m_extents.y = m_extents.z = 0.0f;
        m_is_ray = true;

        m_start_offset.x = m_start_offset.y = m_start_offset.z = 0.0f;

        m_start = start;
        m_end = end;
    }

    void initialize(Vector& vecStart, Vector& vecEnd, Vector min, Vector max) {
        m_delta = vecEnd - vecStart;

        m_is_swept = (m_delta.LengthSqr() != 0);

        m_extents.x = (max.x - min.x);
        m_extents.y = (max.y - min.y);
        m_extents.z = (max.z - min.z);
        m_is_ray = false;

        m_start_offset.x = m_start_offset.y = m_start_offset.z = 0.0f;

        m_start = vecStart + ((max + min) * 0.5f);
    }

private:
};

Вот и все.
Ты случайно не сидел? Пиздец у тебя там детект сайт блатной да и массив я вижу тоже по ауе живет
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Ты случайно не сидел? Пиздец у тебя там детект сайт блатной да и массив я вижу тоже по ауе живет
Слушай я написал его за 7 минут, ну спастил, но кое что написал, братик я сам понимаю что тут все пиздец, но думаешь ксио пастерам не похуй? Он как минимум лучше дэф ресика. лмао. С таким успехом, понимающий человек сможет нормально его дописать,улучшить.
 
Последнее редактирование:
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
holy shit paster commit suicide its not even optimised

C++:
Expand Collapse Copy
void DetectTrueSideIDX_TRACER_RAY(C_BaseEntity* player, int* side)
{
    Vector src3D, dst3D, forward, right, up, src, dst;
    float back_two, right_two, left_two;
    C_Trace tr;
    ray_t ray, ray2, ray3, ray4, ray5;
    C_TraceFilter filter(player);

    AngleVectors(Vector(0, GetBackwardYaw(player), 0), &forward, &right, &up);

    filter.pSkip1 = player;
    src3D = player->GetEyePosition();
    dst3D = src3D + (forward * 384);


    ray.initialize(src3D, dst3D);
    g_pTrace->TraceRay(C_Ray(ray.m_start, ray.m_end), mask_shot, &filter, &tr);
    back_two = (tr.end - tr.start).Length();

    ray.initialize(src3D + right * 35, dst3D + right * 35);
    g_pTrace->TraceRay(C_Ray(ray2.m_start, ray2.m_end), mask_shot, &filter, &tr);
    right_two = (tr.end - tr.start).Length();

    ray.initialize(src3D - right * 35, dst3D - right * 35);
    g_pTrace->TraceRay(C_Ray(ray3.m_start, ray3.m_end), mask_shot, &filter, &tr);
    left_two = (tr.end - tr.start).Length();

    if (left_two > right_two) {
        *side = -1;
        //боди щуд би райт
    }
    else if (right_two > left_two) {
        *side = 1;
    }
    else
        *side = 0;
}

this is worse than xy0's original resolver lmao u cant even properly resolve static desync HHHHHHHHHHHH


C++:
Expand Collapse Copy
 if (&c_config::get().aimbot_resolver)
    {
        resolve = true;
        // animStateIndex_prop->m_flGoalFeetYaw = GetNormalizedAngleyaw_property(animStateIndex_prop->m_flGoalFeetYaw); /// useless
    }
    else
    {

        resolve = false;
    }

why the fuck u dont use this in framestage instead?

C++:
Expand Collapse Copy
  if (left_two > right_two) {
        *side = -1;
        //боди щуд би райт
    }
    else if (right_two > left_two) {
        *side = 1;
    }
    else
        *side = 0;

gg i cry u just set side to 1 or 0 anyways if the 2nd statement isnt correct and the first one it wont prob do anything


Пожалуйста, авторизуйтесь для просмотра ссылки.
holy shit noname ur cringe



"

it would be better to in your bruteforce shoot at -60 first, because it has less of a deviation from their real. then their viewangles then + 60, this hypothetically assuming they are not using a jitter / antiaim (or antibruteforce) and staying on a side (static) you will resolve within 3 shots guaranteed, however with this it does not even try to use their viewangles on any of the brute stages, and you're brute forcing with the side with the most deviation for your first shot. and for your freestand prediction idea based on traces, if you utilize bameware's (not advert) antifreestanding you can yield even better results. either way, thanks


"

read and learn noname stop pasting xy0 2020 HHHHH unknown hvh user 2020 joiner
 
Слушай я написал его за 7 минут, ну спастил, но кое что написал, братик я сам понимаю что тут все пиздец, но думаешь ксио пастерам не похуй? Он как минимум лучше дэф ресика. лмао. С таким успехом, понимающий человек сможет нормально его дописать,улучшить.
Та я ниче против не имею , чисто по рофлу написал
 
Назад
Сверху Снизу