Paylaşım - [Release] ECKIT091 [ECSRO Devkit SRO_Global_TestBed_In.dll](FULL SOURCE) | SroCave - SRO Destek Forumu

Paylaşım [Release] ECKIT091 [ECSRO Devkit SRO_Global_TestBed_In.dll](FULL SOURCE)

  • Konbuyu başlatan Konbuyu başlatan waryaty
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 0
  • Görüntüleme Görüntüleme 3

waryaty

Isyutaru
Katılım
16 Ağu 2023
Mesajlar
66
Tepkime puanı
9
Puanları
8
ECSRO artık biraz sıktığı için projeye bir süre ara verme kararı aldım; bu süre içerisinde bugüne kadar yaptığım her şeyi toplulukla paylaşmak istiyorum.

DevKit’in birçok adresini düzelttim; client tarafındaki kritik crash sorunlarını giderdim ve çeşitli yeni özellikler ekledim. Underbar, Mini Macro ve AutoPotion sistemleri de projeye dahil edildi.

AutoPotion sistemi, bazı durumlarda Item Mall potlarını kullanmayabiliyor; bu konuda biraz daha düzenleme yapılması gerekiyor. Bunun dışında, orijinal AutoPotion sistemine oldukça yakın ve gayet başarılı çalışıyor.

Bildiğim tüm kritik bugları düzelttim; Stall Dupe, Double Pet Spawn, Job Suit, Restart, skill animasyonu iptali, Exchange, Skill Edit ve Potion Dupe gibi sorunlar üzerinde gerekli düzeltmeleri yaptım. Client’ı genel olarak oldukça stabil bir hâle getirdim.

Bundan sonraki geliştirmeler artık size kalmış; projeyi geliştirip daha ileriye taşımanız dileğiyle.

İyi günlerde kullanın :) 😎

================================================================
ECSRO DevKit 1.091 - FULL CHANGELOG (TURKCE)
================================================================
Proje: ECSRO DevKit | Istemci: Silkroad Online ECSRO 1.091
Belge Turu: Teknik Degisme Belgelendirme

================================================================
SECTION 1: PROJE BILGISI
================================================================
1.1 Proje Amaci:
C++ ile binary-uyumlu hook'lar. DLL enjeksiyon (SRO_Global_TestBed_In.dll).
Bellek adresi yamalama, vtable hook, ani arguman degisimleri.
Kutuphaneler: BSLib, ClientLib, SROInterfaceLib, DevKit_DLL, ClientNet.

1.2 Build: CMake+CPM, VS2005(VC80), /MT statik CRT, debug konsol aktif.
1.3 Config: (varsayilan ON), CONFIG_IMGUI (ON)
1.4 Global: g_CGame(0xEECE80), g_pCGInterface(0x110F80C)
1.5 Siniflar: CObj->CGWndBase->CGWnd->CIFWnd
1.6 Hook: vtableHook, HOOK_ORIGINAL_MEMBER, replaceAddr

================================================================
SECTION 2: SURUM VURGUMLARI
================================================================
KRITIK HATA DUZELTMELERI:
A. Stall Ogesi Carpintisi (StackTable)
B. Becerilendirme Hazinesi Carpintisi (eskchange)
C. Restart karakter secenegine NULL pointer
D. WM_CLOSE/WM_ENDSESSION vtable INT3 + NULL EPB
E. Yinilenen Pet Onleme (DW Maastari)
F. Is Kivaresi Ceza Durumu (teleport)
G. Heuksal Ghost Spear Mars (20s gecikme)
H. Pet Filtre/Envanter Izleyici (25ms, 5 alim, 15.0f)
OZELLIKLER: Mini Makro, Pet Sistemi, Stall Sistemi, 4K, DLL isimlendirme,
Fake Shard List, Mavi oge metni, ESC pencere, Oge Pasaji modernizasyonu

================================================================
SECTION 3A: STALL OGE CARPINTISI DUZELTMESI
================================================================
Kategori: Kritik Hata Duzeltme | Oncelik: Yuksek
Etkilendigin: Stall sistemi, envanter, StackTable ogelri
Onceki: Stall acip/kapatırken oge carpintisi. StackTable ogelri
(50 Iksir, 1 Global, 50 Ok) iki kez islenebilirdi.
Problem: Envanter durumu kontrol edilmedi. Ayni CSOItem referansi
iki stall oturumunda kullanildi.
Dorzluk: Stall kapatma/yeniden acma akisi envanter slot durumunu
temizliyordu.

Uygulama: NetProcessIn.cpp (satir 1530) OnItemMallPurchaseAck
kapsamlı NULL kontroller icerir:
g_pCGInterface -> GetMainPopup() -> GetInventory() ->
g_CGlobalDataManager -> GetSOPackageByShopData() -> GetSOItem() ->
GetPackageItemData() -> m_vScrapData[0]->m_quantity
StackTable miktari CRefScrapOfPackageItemData.m_quantity'dan okunur
(offset 0x20). Her slot tek bir FakePick. Satin alma sayisi atomik.

Kaynak Kaniti: NetProcessIn.cpp satir 1530-1585
RefScrapOfPackageItemData.h (m_quantity 0x20)
Sinir: Yalnizca . 50 Potion/1 Global/50 Arrow adreslenir.

================================================================
SECTION 3B: BECERILENDIRME HAZINESI CARPINTISI DUZELTMESI
================================================================
Kategori: Kritik Hata Duzeltme | Oncelik: Yuksek
Onceki: Eskchange iptaliyla Skill Edit Potion carpintisi.
Problem: Eskchange iptali oge referanslarini dogrulamiyordu.

Uygulama: CSOItem::IsSameItemType RefObjId karsilastirmasi:
bool CSOItem::IsSameItemType(const CSOItem *other) const {
return reinterpret_cast<bool(__thiscall *)(
const CSOItem*, const CSOItem*)>(0x008bac80)(this, other); }
Eskchange CIFExchange (GDR_EXCHANGE = 26, GInterface.h satir 79)

Kaynak Kaniti: SOItem.cpp satir 19-21 (0x008bac80)
GInterface.h satir 79 (GDR_EXCHANGE = 26)
Not: Eskchange iptali yolu siniriyla sinirli.

================================================================
SECTION 3C: RESTART KARAKTER SECENEGINE DUZELTMESI
================================================================
Kategori: Kritik Hata Duzeltme | Oncelik: Yuksek
Onceki: Restart/Exit NULL fonksiyon isaretcisi nedeniyle çöküyordu.
Problem: TerminateProcess NULL isaretci nedeniyle çöküyordu.

Uygulama: SendRestartRequest unsorted.cpp satir 65:
void SendRestartRequest(char type) {
reinterpret_cast<void(__cdecl*)(char)>(0x0081F030)(type); }
GInterface.cpp OnItemMallSectionControl mesaj kutusunu temizler:
if (pItemMall->m_pMessageBox && pItemMall->m_bIsMessageBoxCreated) {
pItemMall->m_pMessageBox->ShowGWnd(false);
pItemMall->m_pMessageBox = NULL; ... }

Kaynak Kaniti: unsorted.cpp satir 65 (0x0081F030)
GInterface.cpp satir 55, 87 (OnEscapePressed)
GInterface.cpp satir 196-208 (temizlik)
Sinir: Oge pasaji temizligi.

================================================================
SECTION 3D: WM_CLOSE/WM_ENDSESSION ÇÖKÜŞ DUZELTMESI
================================================================
Kategori: Kritik Hata Duzeltme | Oncelik: Yuksek
Onceki: WM_CLOSE/WM_ENDSESSION sirasinda erişim ihlali.
Problem: Uc farkli çöküş vektoru:
1. CIFItemMall vtable[50] INT3 breakpoint (0x61004D)
2. 0x0087F756' da NULL EBP'ye deref
3. 0x008311C0 isaretci dogrulamaz

Uygulama: Util.cpp satir 97-131:
1. vtable[50] stub: replaceAddr(0xDC899C + 50*4, stub)
2. CrashSitePatch_RenewalItemMall 0x0087F756 (placeHook)
3. WndProcHook 0x00831337 (replaceAddr)
CIFMessageBox hook DEVRE DISI (F10 çöküsü)

Kaynak Kaniti: Util.cpp satir 102-130
Not: vtable[50] sadece icin.

================================================================
SECTION 3E: YINILENEN PET ONLEME
================================================================
Kategori: Kritik Hata Duzeltme | Oncelik: Yuksek
Onceki: DW Maastari'nde ayni pet tiplerinden birden fazla.
Uygulama: CICPlayer/CICMonster g_pGfxEtmanager araciligiyla.
Onemli: Uygulama KAYNAGIN KODUDA BULUNAMADI. DEGILDIR.

================================================================
SECTION 3F: IS KIVARESI CEZA DURUMU
================================================================
Kategori: Kritik Hata Duzeltme | Oncelik: Orta
Onceki: Ceza (10 dk) teleport sirasinda sifirlanirdi.
Uygulama: m_abnormalState (CICharator.h 0x02C4),
SUSPEND_MODE_TELPORTIONG=11 (GInterface.h satir 222)
m_SuspendMode (0x07EC) (satir 514)
bitwise AND kontrol: (m_abnormalState & ABNORMAL_STATE_ZOMBIE)==0
Kaynak: GInterface.h satir 222, CICharactor.h, AutoPotion.cpp
Not: Dogru kalici mekanizma onaylanmamadi.

================================================================
SECTION 3G: GHOST SPEAR MARS DUZELTMESI
================================================================
Kategori: Kritik Hata Duzeltme | Oncelik: Orta
Onceki: Ghost Spear Mars sonrasi hemen saldırı basarısız.
Uygulama: Becerisi yoneticileri:
m_pCSkillRunTimeManager (0x0780), m_pCSkillCoolTimeManager (0x0778)
Kaynak: GInterface.h satir 504, 506
Not: 20s gecikme KAYNAGIN KODUDA BULUNAMADI. DEGILDIR.

================================================================
SECTION 3H: PET FILTRE/ENVANTER IZLEYICI OPTIMIZASYONU
================================================================
Kategori: Kritik Hata Duzeltme (Performans) | Oncelik: Orta
Onceki: DC sonrasi pet aynı oge grubunu tekrarliyordu.
Uygulama: CNIFUnderMenuBar::UseSlot Util.cpp satir 78:
replaceOffset(0x0060bbbf, addr_from_this(&CNIFUnderMenuBar::UseSlot));
Kaynak: Util.cpp satir 78
Not: 25ms zamanlayici, 5 alim, 15.0f float KAYNAGIN KODUDA DEGILDIR.

================================================================
SECTION 4: OGE CARPINTISI VE ISLEM GUVENLIGI
================================================================
4.1 StackTable Koruma: m_quantity (offset 0x20) dogrulama
4.2 Eskchange: IsSameItemType RefObjId karsilastirmasi
4.3 Oge Pasaji: Cift mesaj kutusu, rezerve liste, onay akisi
4.4 Envanter: NULL zincir dogrulama
4.5 Kaynaklar: NetProcessIn.cpp(1530), SOItem.cpp(19), GInterface.h(79)
4.6 Sinir: gerekir. Sunucu dogrulama onaylanmadi.

================================================================
SECTION 5: MINI MAKRO SISTEMI
================================================================
5.1 F1-F5 otomasyonu. NPC/rank filtreleme.
5.2 Tuşlar: F1=g/ç, F2=hedef, F3=temizle, F4=yeniden, F5=saldir
5.3 Numara 0-9: Genel/Sampion/Elit/Jenerik/Essiz turu
5.4 Mesafe: 25.0f
5.5 Kaynak: QuickStart.cpp, GInterface.h, ICPlayer.h
Not: Tum adresler dogrulanmadi.

================================================================
SECTION 6: PET SISTEMI
================================================================
6.1 Filtre, korumalı, otomatik iksir, çift onleme
6.2 Pet filtresi: beyaz/mavi/altın/patlama/essiz turleri
6.3 Koruma modu: 17.0f mesafede saldır
6.4 Otomatik iksir: HP/MP %30, 5 saniye bekleme, 17.0f
6.5 Çift onleme: Tip/Sayi/Alan/Base - KAYNAK KODDA DEGILDIR.
6.6 Mesafeler: 17.0f alim, 15.0f genel
6.7 Kaynak: CICPlayer.h, CICMonster.cpp, CICharator.h

================================================================
SECTION 7: STALL SISTEMI
================================================================
7.1 Ağ devre dışı. Onay penceresi degistirildi.
7.2 StackTable guvenli alim: quantity dogrulama, NULL kontroller
7.3 Item delivery: FakePick ile güvenli zincir dogrulama
7.4 Kaynak: CIFInventory, CIFStallConfirm, NetProcessIn.cpp(1530)

================================================================
SECTION 8: BEYSERI SISTEMI
================================================================
8.1 Skill manager ofsetleri: m_pCSkillRunTimeManager (0x0780),
m_pCSkillCoolTimeManager (0x0778)
8.2 Ghost Spear Mars: 20s gecikme, animasyon Restart/Exit'ta temizlenir
8.3 Source: GInterface.h satir 504, 506
Not: 20s gecikme KAYNAK KODDA BULUNAMADI. DEGILDIR.

================================================================
SECTION 9: IS SISTEMI
================================================================
9.1 Job Suit cezasi 10 dk. Teleport sirasinda sürebilir.
9.2 Anormal durum: m_abnormalState (CICharator.h 0x02C4)
bitwise AND: (g_pMyPlayerObj->m_abnormalState & ZOMBIE) == 0
9.3 Teleport askı modu: SUSPEND_MODE_TELPORTIONG=11 (GInterface.h L222)
m_SuspendMode (0x07EC)
9.4 Source: CICharator.h, GInterface.h, AutoPotion.cpp
Not: Dogru mekanizma onaylanmadi.

================================================================
SECTION 10: ÇÖZÜNÜRLÜK VE ARAYUZ
================================================================
10.1 4K (3840x2160) destek. Yüksek DPI için ui öğeleri ölçeklendirildi.
10.2 Request Help butonu kaldırıldı.
10.3 Mavi oge dusme metni (SOItem.h Blue enum).
10.4 Yüksek DPI destek: DPI farkındalığı, tam sayı ölçekleme.
10.5 Sinir: Yalnizca 3840x2160 test edildi.

================================================================
SECTION 11: SAHTE SHARD SUNUCU LISTESI
================================================================
11.1 Giris ekraninda özel sunucu isimleri.
11.2 Sunucu isimleri: Xian, Aege, Troy, Athens, Oasis, Venice, Babel
11.3 Genis karakter dizileri, NIFText render.
11.4 Kaynak: NIFTextBoard, CNIFMainFrame, Hooks.cpp
Not: Tam yakalama mekanizması kaynaktada bulunamadi. DEGILDIR.

================================================================
SECTION 12: OGE GORUNTULEME IYILESTIRMELERI
================================================================
12.1 Mavi oge dusme metni: SOItem.h Blue enum ile renk ayirt.
12.2 Oge tur siniflandirmasi: Beyaz/Mavi/Altın/Kırmizi/Essiz
12.3 Source: SOItem.h, CNetProcessIn.cpp, CIFWnd.h
12.4 Sinir: Tam renk haritalamasi onaylanmadi.

================================================================
SECTION 13: ESC PENCERE KAPATMA DAVRANISI
================================================================
13.1 ESC DevKit UI pencerelerini güvenle kapatır.
13.2 Etkilenen pencereler:
- Otomatik Iksir penceresi
- Pet Filtre penceresi
- Pet Iksir penceresi
13.3 Uygulama: Aktif pencere tespit edilir, durum kaydedilir,
pencere gizlenir (yok edilmez), oyun durumu korunur.
13.4 Source: QuickStart.cpp, Hooks.cpp, ImGui windows
Not: Tum ESC davranislari onaylanmadi.

================================================================
SECTION 14: OGE PASAJI MODERNIZASYONU
================================================================
14.1 : ZZim, onay akisi, çarpisma güvenli kutu.
14.2 Rezerve oge listesi: alisveris icin korunan ogelr.
14.3 ZZim (istek liste): favori olarak isaretlenmis ogelr.
Dosyalar: IFItemMall.cpp, IFItemMallZzim.cpp/.h, IFItemMallConfirmBuy.cpp
14.4 Onay satin alma akisi:
- Oge adi, fiyat, miktar gosterilir
- Kalan alim sayisi gösterilir
- Acik onay gerekir
14.5 Çarpisma guvenli mesaj kutusu:
Mesaj kutusu oge pasaji silinmeden önce yok edilir
(GInterface.cpp OnItemMallSectionControl satir 196-208):
if (pItemMall->m_pMessageBox && pItemMall->m_bIsMessageBoxCreated) {
pItemMall->m_pMessageBox->ShowGWnd(false); ... }
14.6 Source: IFItemMall.cpp, IFItemMallZzim.cpp/.h, GInterface.cpp
14.7 Sinir: Yeni oge pasaji (GDR_RENEWAL_ITEM_MALL=167) desteklenmiyor.

================================================================
SECTION 15: ISTEMCI KARMAŞIKLIGI VE RESTART
================================================================
15.1 SendRestartRequest (unsorted.cpp satir 65):
void SendRestartRequest(char type) {
reinterpret_cast<void(__cdecl*)(char)>(0x0081F030)(type); }
Tip: 0=Karakter yeniden sec, 1=Giris

15.2 Cökmis crash noktalari yamalandi:
- vtable[50] INT3 (0xDC899C, 0xDCC08C)
- NULL EBP (0x0087F756)
- Pencere proseduru (0x00831337)

15.3 Nazik kapatma:
1. Mesaj kutulari yok edilir ve NULL kontrolü yapilir
2. UI pencereleri ShowGWnd(false) ile gizlenir
3. IRM.DeleteCreatedSection ile bolumler silinir
4. Ag durumu temizlenir

15.4 WndProcHook (0x00831337): ImGui yönlendirme, orijinal handler'a geç.
15.5 Source: unsorted.cpp (L65), GInterface.cpp (L196-208), Util.cpp (L50)

================================================================
SECTION 16: TEKNIK UYGULAMA DETAYLARI
================================================================
16.1 Hook Yöntemleri: Vtable, HOOK_ORIGINAL_MEMBER, replaceAddr
16.2 Adres Yamalama: replaceAddr 5-byte JMP, replaceOffset anı değer
16.3 ABI Test: BEGIN_FIXTURE, ENSURE_SIZE, ENSURE_OFFSET, RUN_FIXTURE
16.4 Ag: CMsgStreamBuffer, NEWMSG/SENDMSG, 0x00EECD98 havuz
16.5 String: acp_encode/decode, TO_NSTRING, WideCharToMultiByte
16.6 Kaynak: DLL(Util/QuickStart/DllMain), UI(GInterface/NIFWnd),
Net(NetProcessIn/Second/Third)

================================================================
SECTION 17: KAYNAK KODU KANITLARI
================================================================
Stall Dup: NetProcessIn.cpp L1530, RefScrapOfPackageItemData.h (@0x20)
Skill Edit: SOItem.cpp L19-21 (IsSameItemType @ 0x008bac80)
Restart: unsorted.cpp L65 (SendRestartRequest @ 0x0081F030)
Crash Fix: Util.cpp L50,102-130 (vtable, CrashSitePatch, WndProc)
Job Suit: GInterface.h L222,514 (SUSPEND_MODE @ 0x07EC)
Skill Mgr: GInterface.h L504,506 (0x0778, 0x0780)
Inv Watcher: Util.cpp L78 (UseSlot @ 0x0060bbbf)
DllMain: DLL_PROCESS_ATTACH, Setup(), ImGui hooks
QuickStart: PlaceHooks L46-48 (credential patches)

================================================================
SECTION 18: BILINEN SINIRDLAR VE RISKLER
================================================================
18.1 KAYNAK KODU OLMADAN DOGRULANMAMIŞ OZELLIKLER:
- Yinelenen Pet Onleme uygulamasi
- Envanter Izleyici 25ms zamanlayici, 5 alim, 15.0f
- Ghost Spear Mars 20s gecikme
- Is Kivaresi ceza mekanizmasi
- Mini Makro adresleri
- 4K ölçekleme
- Sahte shard dize yakalama
- ESC pencere kapatma

18.2 Kismi Dogrulama:
- Stall Sistemi: temel mantik dogrulandi
- Oge Pasaji: dovruldu
- İstemci kararliligi: crash yamalari dogrulandi
- QuickStart: INI parsing onaylandi

18.3 Bilinen Bosluklar:
EntityExplorer.cpp, IFItemMall*.cpp, IFItemMallZzim*.cpp,
IFItemMallConfirmBuy.cpp, CGame.cpp, GameCfg.cpp,
NetProcessSecond/Third detaylari, ImGui window'lar

18.4 Risk Degerlendirmesi:
DUSUK: Yapilandirma, hata ayiklama, temel hook'lar
ORTA: Oge pasaji, stall sistemi, mini makro
YUKSEK: Yinelenen Pet Onleme (KAYNAK KODTA YOK)
YUKSEK: Ghost Spear 20s (KAYNAK KODTA YOK)

================================================================
SECTION 19: TEST KONTROL LISTESI
================================================================
| Ozellik | Kaynak Dogrulandi | Test Edildi | Notlar |
|---------|-------------------|-------------|--------|
| Stall Dup Düzeltme | EVET (NetProcessIn.cpp) | HAYIR | |
| SkEdit Hazinesi | EVET (SOItem.cpp) | HAYIR | Eskchange iptali |
| Restart Düzeltme | EVET (unsorted+GInterface) | HAYIR | Mesaj kutusu temizligi |
| Crash Düzeltme | EVET (Util.cpp) | HAYIR | vtable + crash site |
| Yinelenen Pet | HAYIR | HAYIR | KAYNAK KODTA YOK |
| Is Kivaresi | EVET (GInterface.h) | HAYIR | SUSPEND_MODE |
| Ghost Spear | EVET (ofsetler) | HAYIR | 20s KAYNAK KODTA YOK |
| Envanter Izleyici | EVET (Util.cpp L78) | HAYIR | timer DEGILDIR |
| Mini Makro | HAYIR | HAYIR | Adresler dogrulanmadi |
| 4K Destek | HAYIR | HAYIR | KAYNAK KODTA YOK |
| DLL Adi | EVET (DllMain.cpp) | HAYIR | SRO_Global_TestBed_In.dll |
| Shard Listesi | HAYIR | HAYIR | Dizeler kaynakta yok |
| Mavi Düs Metni | HAYIR | HAYIR | Sadece Blue enum |
| ESC Pencereler | HAYIR | HAYIR | Dogrulanmadi |
| Oge Pasaji | EVET (CONFIG yolu) | HAYIR | ZZim, onay, kutu |
| Konfig Pers | EVET (QuickStart.cpp) | HAYIR | INI parsing

================================================================
SECTION 20: FINAL ÖZELLIK ÖZETI
================================================================
KRITIK HATA DUZELTMELERI:
[DOGRULANDI] Stall Ogesi Carpintisi ()
[DOGRULANDI] SkEdit Hazinesi (eskchange doğrulama)
[DOGRULANDI] Restart/Exit NULL pointer (mesaj kutusu)
[DOGRULANDI] WM_CLOSE/WM_ENDSESSION (vtable + crash)
[DOGRULANMADI] Yinelenen Pet Onleme (kaynak kodda yok)
[KISMI] Is Kivaresi (durum dogrulandi, mekanizma hayir)
[DOGRULANMADI] Ghost Spear Mars 20s (kaynak kodda yok)
[DOGRULANMADI] Envanter Izleyici (kaynak kodda yok)

OZELLIKLER:
Mini Makro Sistemi (F1-F5 otomasyonu)
Pet Sistemi (filtre, korumalı, otomatik iksir)
Stall Sistemi (ağ devre dışı, guvenli alim)
4K Çözünürlük Desteği
DLL Kimliği (SRO_Global_TestBed_In.dll)
Sahte Shard Sunucu Listesi
Mavi Oge Düs Metni
ESC Pencere Kapatma Davranışı
Oge Pasaji Modernizasyonu (ZZim, onay)

KAYNAK DOSYALAR ANALIZ EDILDI:
Core: GInterface.h/.cpp, Game.cpp/.h, GameCfg.cpp/.h
Network: NetProcessIn.cpp, NetProcessSecond.cpp/.h
UI: IFWnd.h/.cpp, IFItemMall.cpp, IFSlotWithHelp.h/.cpp
DLL: DllMain.cpp, Util.cpp/.h, QuickStart.cpp/.h, Hooks.cpp/.h
Data: ItemData.cpp/.h, SOItem.cpp/.h, RefPackageItemData.h
Build: CMakeLists.txt, cmake/Options.cmake
================================================================
CHANGELOG SONU
================================================================

Videolar

Link : vSUPLOAD - Sorunsuz ve Hızlı Dosya Upload Sitesi - ECKIT091.rar
 
Etiketler Etiketler
#ecsro #70cap #oldschool

Geri
Üst Alt