İçeriğe geç
academia.sh

Ders 12 / 16

Kalıcılık Mekanizmaları

On kalıcılık noktası türü bir envanter olarak sayılır ve altı denetim dört uç sınıfı üzerinde koşturulur: hangi denetim kaç türü kapatıyor, kaçını yalnız görünür kılıyor, hangi denetim hangi uç sınıfında uygulanamıyor; dört sınıfın dördünde birden kapanan tür sayısı sıfır, hiçbir denetimin dokunmadığı tür bir ve kapatmanın bedeli 36 engellenen meşru kalem ile 52 elle onay kalemidir.

İçindekiler

Önceki ders koşumları ölçtü ve bir koşumun geçici olduğunu gösterdi: biter, arkasında yalnız bir kayıt bırakır. Kalıcı olan, o koşumun uçta yazdığı kalemdir. Konu bu yüzden başladığı yere döner — birinci derste türlerin kullandığı noktalar sayılmıştı, bu ders o noktaları uçtaki bir envanter olarak sayar ve üzerlerine altı denetim koşturur.

Ölçülen üç sütun kursun üç sütunudur. Kaç nokta türü var; her denetim kaçını kapatıyor, kaçını yalnız görünür kılıyor; kapatmanın meşru işe bedeli ne. Buna dördüncü bir ayrım ekleniyor: bir denetim her uç sınıfında uygulanamaz. Bu derste hiçbir kalıcılık kurma yöntemi yazılmadı; sayılan şey noktanın kendisi ve üzerindeki denetimdir.

  • UK31. On nokta türü, meşru kalem sayıları, altı denetim ve uygulanabilirlikleri kurgusal bölgesel ölçüm ağına aittir. Ölçülen şey node ile kurulan modeldir.
  • UK32. Bir denetimin bir nokta türü üzerindeki etkisi üç değerden biridir: kapatır, görünür kılar, dokunmaz. Kısmi kapatma modellenmedi; bu, kapalı sütununu olduğundan iyi gösterir.
  • UK33. Uygulanabilirlik uç sınıfı düzeyindedir. Gerçekte aynı sınıftaki uçların bir kısmı denetimi taşımaz; sapma ölçümü önceki konunun konusuydu ve burada girdi olarak alınıyor.
  • UK34. Bedel iki kalemle sayıldı: engellenen meşru kalem ve elle onaya düşen iş. Süregelen bakım yükü sayılmadı; sayılsaydı görünürlük veren denetimlerin bedeli büyürdü.
  • UK35. Kapatan bir denetim aynı noktayı kayda da düşürebilir; modelde önce kapatma sayılır. İki sütun bu yüzden ayrıktır: bir tür ya kapalıdır ya yalnız görünürdür.

Envanter ve Altı Denetim

// envanter.mjs — kalicilik noktasi turleri, uc siniflari ve denetimlerin etkisi; model
// nokta turu -> bir uctaki mesru kalem sayisi
export const NOKTA = {
  'acilis-girisi': 14, 'servis-tanimi': 63, 'zamanlanmis-gorev': 41, 'oturum-betigi': 6,
  'yukleme-yolu-kancasi': 3, 'olay-aboneligi': 2, 'mesru-ikiliye-ilisme': 0,
  'ortam-otomatik-calistirma': 1, 'uygulama-uzantisi': 27, 'onyukleme-girisi': 4,
};
export const TUR = Object.keys(NOKTA);
export const UC = { 'saha dizustu': 120, 'sube ucu': 240, 'toplayici': 60, 'merkez sunucu': 12 };
export const SINIF = Object.keys(UC);
// denetim -> [etki haritasi, uygulanabildigi uc siniflari, engellenen mesru kalem, elle onaya dusen is]
export const DENETIM = {
  'yazma izni daraltma': [
    { 'oturum-betigi': 'kapatir', 'uygulama-uzantisi': 'kapatir', 'acilis-girisi': 'kapatir' },
    ['sube ucu', 'toplayici', 'merkez sunucu'], 8, 4],
  'uygulama izin listesi': [
    { 'acilis-girisi': 'kapatir', 'servis-tanimi': 'kapatir', 'zamanlanmis-gorev': 'kapatir',
      'ortam-otomatik-calistirma': 'kapatir', 'oturum-betigi': 'gorunur' },
    ['sube ucu', 'toplayici'], 22, 31],
  'imzali kod zorunlulugu': [
    { 'mesru-ikiliye-ilisme': 'kapatir', 'yukleme-yolu-kancasi': 'kapatir', 'uygulama-uzantisi': 'gorunur' },
    ['saha dizustu', 'sube ucu', 'toplayici'], 6, 3],
  'guvenli onyukleme zinciri': [
    { 'onyukleme-girisi': 'kapatir' },
    ['saha dizustu', 'sube ucu', 'merkez sunucu'], 0, 2],
  'taban cizgisi karsilastirmasi': [
    { 'acilis-girisi': 'gorunur', 'servis-tanimi': 'gorunur', 'zamanlanmis-gorev': 'gorunur',
      'oturum-betigi': 'gorunur', 'yukleme-yolu-kancasi': 'gorunur', 'uygulama-uzantisi': 'gorunur',
      'ortam-otomatik-calistirma': 'gorunur' },
    ['saha dizustu', 'sube ucu', 'toplayici', 'merkez sunucu'], 0, 12],
  'surec olusturma kaydi': [
    { 'acilis-girisi': 'gorunur', 'servis-tanimi': 'gorunur', 'zamanlanmis-gorev': 'gorunur',
      'oturum-betigi': 'gorunur' },
    ['saha dizustu', 'sube ucu', 'toplayici', 'merkez sunucu'], 0, 0],
};
export const AD = Object.keys(DENETIM);
export const gecerli = (d, s) => DENETIM[d][1].includes(s);
export function durum(tur, sinif) {
  const etkiler = AD.filter((d) => gecerli(d, sinif)).map((d) => DENETIM[d][0][tur]).filter(Boolean);
  return etkiler.includes('kapatir') ? 'kapali' : etkiler.includes('gorunur') ? 'gorunur' : 'karanlik';
}
export const uc = (s) => UC[s];
export const TOPLAM_UC = Object.values(UC).reduce((a, b) => a + b, 0);
// kosum1.mjs — nokta turu envanteri ve her denetimin kapattigi / gorunur kildigi tur
import { NOKTA, TUR, DENETIM, AD, SINIF, TOPLAM_UC } from './envanter.mjs';

const kalem = Object.values(NOKTA).reduce((a, b) => a + b, 0);
console.log(`${TUR.length} kalicilik noktasi turu, uc basina ${kalem} mesru kalem, ${TOPLAM_UC} uc\n`);
console.log(`${'nokta turu'.padEnd(26)} ${'mesru kalem'.padStart(11)} ${'kapatan denetim'.padStart(15)} ${'goren denetim'.padStart(13)}`);
for (const t of TUR) {
  const k = AD.filter((d) => DENETIM[d][0][t] === 'kapatir'), g = AD.filter((d) => DENETIM[d][0][t] === 'gorunur');
  console.log(`${t.padEnd(26)} ${String(NOKTA[t]).padStart(11)} ${String(k.length).padStart(15)} ${String(g.length).padStart(13)}`);
}
console.log(`\n${'denetim'.padEnd(30)} ${'kapatir'.padStart(7)} ${'gorunur kilar'.padStart(13)} ${'uc sinifi'.padStart(9)} ` +
  `${'engellenen kalem'.padStart(16)} ${'elle onay'.padStart(9)}`);
for (const d of AD) {
  const e = DENETIM[d][0];
  console.log(`${d.padEnd(30)} ${String(Object.values(e).filter((x) => x === 'kapatir').length).padStart(7)} ` +
    `${String(Object.values(e).filter((x) => x === 'gorunur').length).padStart(13)} ` +
    `${`${DENETIM[d][1].length}/${SINIF.length}`.padStart(9)} ${String(DENETIM[d][2]).padStart(16)} ${String(DENETIM[d][3]).padStart(9)}`);
}
const hic = TUR.filter((t) => !AD.some((d) => DENETIM[d][0][t]));
console.log(`\nhicbir denetimin dokunmadigi nokta turu: ${hic.length}/${TUR.length} (${hic.join(', ') || '-'})`);
console.log(`toplam engellenen mesru kalem: ${AD.reduce((a, d) => a + DENETIM[d][2], 0)}; ` +
  `elle onaya dusen is: ${AD.reduce((a, d) => a + DENETIM[d][3], 0)}`);
10 kalicilik noktasi turu, uc basina 161 mesru kalem, 432 uc

nokta turu                 mesru kalem kapatan denetim goren denetim
acilis-girisi                       14               2             2
servis-tanimi                       63               1             2
zamanlanmis-gorev                   41               1             2
oturum-betigi                        6               1             3
yukleme-yolu-kancasi                 3               1             1
olay-aboneligi                       2               0             0
mesru-ikiliye-ilisme                 0               1             0
ortam-otomatik-calistirma            1               1             1
uygulama-uzantisi                   27               1             2
onyukleme-girisi                     4               1             0

denetim                        kapatir gorunur kilar uc sinifi engellenen kalem elle onay
yazma izni daraltma                  3             0       3/4                8         4
uygulama izin listesi                4             1       2/4               22        31
imzali kod zorunlulugu               2             1       3/4                6         3
guvenli onyukleme zinciri            1             0       3/4                0         2
taban cizgisi karsilastirmasi        0             7       4/4                0        12
surec olusturma kaydi                0             4       4/4                0         0

hicbir denetimin dokunmadigi nokta turu: 1/10 (olay-aboneligi)
toplam engellenen mesru kalem: 36; elle onaya dusen is: 52

Alt tablo iki denetim ailesini kesin bir çizgiyle ayırıyor. Kapatan dört denetim toplam on nokta türü kapatıyor ve karşılığında otuz altı meşru kalem engelliyor. Görünürlük veren iki denetim hiçbir tür kapatmıyor, on bir tür görünür kılıyor ve tek bir meşru kalem engellemiyor. Bedelleri farklı yerdedir: kapatan denetimlerin bedeli engellenen kalemde, gören denetimlerinki elle onaya düşen işte — ve toplam elli iki kalemlik elle onay yükünün on ikisi tek bir görünürlük denetiminden geliyor.

Uygulanabilirlik sütunu üçüncü ayrımı veriyor ve kapatan denetimlerin hepsi burada zayıf. Dört uç sınıfının dördünde birden uygulanabilen iki denetim var ve ikisi de yalnız görünürlük veriyor. Kapatan denetimlerin hiçbiri dört sınıfın dördünde uygulanamıyor; en dar olan uygulama izin listesi yalnız ikisinde. Kapatmak ile yaymak arasında bir gerilim var: bir denetim ne kadar çok şey kapatıyorsa o kadar az uçta uygulanabiliyor.

Üst tablodaki iki satır ayrıca dikkat çekiyor. Kalıcı olay aboneliğine hiçbir denetim dokunmuyor — ne kapatan var ne gören. Önyükleme girişini bir denetim kapatıyor ama hiçbiri görmüyor: kapatmanın uygulanamadığı bir uçta o tür tamamen karanlıkta kalır. En kalabalık iki nokta türü olan servis tanımı ve zamanlanmış görev ise birer denetimle kapanıyor ve ikişer denetimle görünüyor.

Uç Sınıfına Göre Üç Sütun

// kosum2.mjs — uc sinifi basina kapali / yalniz gorunur / karanlik nokta turu sayimi
import { TUR, NOKTA, SINIF, AD, DENETIM, durum, uc, TOPLAM_UC } from './envanter.mjs';

console.log(`${'nokta turu'.padEnd(26)} ${SINIF.map((s) => s.padStart(14)).join(' ')}`);
for (const t of TUR)
  console.log(`${t.padEnd(26)} ${SINIF.map((s) => durum(t, s).padStart(14)).join(' ')}`);
console.log(`\n${'uc sinifi'.padEnd(14)} ${'uc'.padStart(4)} ${'uygulanan denetim'.padStart(17)} ${'kapali'.padStart(6)} ` +
  `${'yalniz gorunur'.padStart(14)} ${'karanlik'.padStart(8)} ${'karanlik kalem'.padStart(14)}`);
const say = (s, d) => TUR.filter((t) => durum(t, s) === d);
for (const s of SINIF)
  console.log(`${s.padEnd(14)} ${String(uc(s)).padStart(4)} ${String(AD.filter((d) => DENETIM[d][1].includes(s)).length).padStart(17)} ` +
    `${String(say(s, 'kapali').length).padStart(6)} ${String(say(s, 'gorunur').length).padStart(14)} ` +
    `${String(say(s, 'karanlik').length).padStart(8)} ${String(say(s, 'karanlik').reduce((a, t) => a + NOKTA[t], 0)).padStart(14)}`);
const agirlik = (d) => SINIF.reduce((a, s) => a + uc(s) * say(s, d).length, 0) / TOPLAM_UC;
console.log(`${'filo ortalamasi'.padEnd(14)} ${String(TOPLAM_UC).padStart(4)} ${''.padStart(17)} ` +
  `${agirlik('kapali').toFixed(1).padStart(6)} ${agirlik('gorunur').toFixed(1).padStart(14)} ${agirlik('karanlik').toFixed(1).padStart(8)}`);

const herYerde = TUR.filter((t) => SINIF.every((s) => durum(t, s) === 'kapali'));
const hicKapali = TUR.filter((t) => SINIF.every((s) => durum(t, s) !== 'kapali'));
console.log(`\ndort uc sinifinin dordunde de kapali nokta turu: ${herYerde.length}/${TUR.length} (${herYerde.join(', ') || '-'})`);
console.log(`hicbir uc sinifinda kapanmayan nokta turu    : ${hicKapali.length}/${TUR.length} (${hicKapali.join(', ')})`);
const enKor = SINIF.map((s) => [s, say(s, 'karanlik').length]).sort((a, b) => b[1] - a[1])[0];
console.log(`en cok karanlik nokta turu tasiyan uc sinifi : ${enKor[0]} (${enKor[1]} tur, ${uc(enKor[0])} uc)`);
nokta turu                   saha dizustu       sube ucu      toplayici  merkez sunucu
acilis-girisi                     gorunur         kapali         kapali         kapali
servis-tanimi                     gorunur         kapali         kapali        gorunur
zamanlanmis-gorev                 gorunur         kapali         kapali        gorunur
oturum-betigi                     gorunur         kapali         kapali         kapali
yukleme-yolu-kancasi               kapali         kapali         kapali        gorunur
olay-aboneligi                   karanlik       karanlik       karanlik       karanlik
mesru-ikiliye-ilisme               kapali         kapali         kapali       karanlik
ortam-otomatik-calistirma         gorunur         kapali         kapali        gorunur
uygulama-uzantisi                 gorunur         kapali         kapali         kapali
onyukleme-girisi                   kapali         kapali       karanlik         kapali

uc sinifi        uc uygulanan denetim kapali yalniz gorunur karanlik karanlik kalem
saha dizustu    120                 4      3              6        1              2
sube ucu        240                 6      9              0        1              2
toplayici        60                 5      8              0        2              6
merkez sunucu    12                 4      4              4        2              2
filo ortalamasi  432                      7.1            1.8      1.2

dort uc sinifinin dordunde de kapali nokta turu: 0/10 (-)
hicbir uc sinifinda kapanmayan nokta turu    : 1/10 (olay-aboneligi)
en cok karanlik nokta turu tasiyan uc sinifi : toplayici (2 tur, 60 uc)

Sıfır, bu tablonun en önemli sayısıdır. On nokta türünün hiçbiri dört uç sınıfının dördünde birden kapalı değil. Filo ortalaması yedi virgül bir kapalı, bir virgül sekiz yalnız görünür ve bir virgül iki karanlık türdür; ama ortalama bu tabloyu yanlış özetler, çünkü dağılım sınıflara göre keskin biçimde ayrışıyor. Şube uçlarında on türün dokuzu kapalı, saha dizüstülerinde üçü. Aynı envanter, aynı denetim listesi, farklı uygulanabilirlik.

Saha dizüstü sütunu kapatmanın nerede tıkandığını gösteriyor. Dört denetim uygulanabiliyor ve altı nokta türü yalnız görünür kalıyor. Bu uçlarda meşru işin çeşitliliği uygulama izin listesini ve yazma izni daraltmasını uygulanamaz kılıyor; karşılığında bu uçlar kapatılamayan altı türü kayda düşürüyor. Ölçüm burada bir seçim değil bir sonuç veriyor: kapatılamayan yerde kalan tek şey görünürlüktür ve bu uçlarda görünürlük altı türün tamamını taşıyor.

Karanlık sütunu ise ne kapatılan ne görülen türleri sayıyor ve en yüksek olduğu yer toplayıcı makineleri. Toplayıcılarda iki tür karanlık: kalıcı olay aboneliği ve önyükleme girişi. İkincisinin nedeni donanım — güvenli önyükleme zinciri bu sınıfta uygulanamıyor ve o türü gören hiçbir denetim yok. Altı meşru kalem bu iki türde duruyor ve hiçbir denetim onlara bakmıyor. Merkez sunucularında da iki tür karanlık; on iki uç için küçük bir sayı gibi görünür, ama bu on iki uç kursun ölçtüğü en değerli veriyi taşıyor.

Filo Ölçeğinde Bedel

Uç başına sayılan bedel bir kararı taşımaz; kararı taşıyan sayı, denetimin uygulandığı uç sayısıyla çarpılmış hâlidir. Aynı model filo ölçeğinde de koşturulabilir.

// kosum3.mjs — filo olceginde bedel: denetim basina kapsanan uc, engellenen kalem ve onay yuku
import { TUR, NOKTA, SINIF, AD, DENETIM, durum, uc, TOPLAM_UC } from './envanter.mjs';

console.log(`${'denetim'.padEnd(30)} ${'kapsanan uc'.padStart(11)} ${'engellenen kalem'.padStart(16)} ` +
  `${'onay kalemi'.padStart(11)} ${'kapattigi nokta-uc'.padStart(18)}`);
let [eng, onay] = [0, 0];
for (const d of AD) {
  const n = DENETIM[d][1].reduce((a, s) => a + uc(s), 0);
  const kapali = Object.entries(DENETIM[d][0]).filter(([, v]) => v === 'kapatir').length;
  eng += n * DENETIM[d][2]; onay += n * DENETIM[d][3];
  console.log(`${d.padEnd(30)} ${String(n).padStart(11)} ${String(n * DENETIM[d][2]).padStart(16)} ` +
    `${String(n * DENETIM[d][3]).padStart(11)} ${String(n * kapali).padStart(18)}`);
}
console.log(`${'toplam'.padEnd(30)} ${String(TOPLAM_UC).padStart(11)} ${String(eng).padStart(16)} ${String(onay).padStart(11)}`);

const cift = (d) => SINIF.reduce((a, s) => a + uc(s) * TUR.filter((t) => durum(t, s) === d).length, 0);
const kalemCift = (d) => SINIF.reduce((a, s) =>
  a + uc(s) * TUR.filter((t) => durum(t, s) === d).reduce((x, t) => x + NOKTA[t], 0), 0);
console.log(`\n${'sutun'.padEnd(16)} ${'nokta-uc cifti'.padStart(14)} ${'pay'.padStart(6)} ${'mesru kalem'.padStart(11)}`);
const toplamCift = TOPLAM_UC * TUR.length;
for (const d of ['kapali', 'gorunur', 'karanlik'])
  console.log(`${d.padEnd(16)} ${String(cift(d)).padStart(14)} ${`%${(cift(d) * 100 / toplamCift).toFixed(1)}`.padStart(6)} ` +
    `${String(kalemCift(d)).padStart(11)}`);
console.log(`${'toplam'.padEnd(16)} ${String(toplamCift).padStart(14)}`);
denetim                        kapsanan uc engellenen kalem onay kalemi kapattigi nokta-uc
yazma izni daraltma                    312             2496        1248                936
uygulama izin listesi                  300             6600        9300               1200
imzali kod zorunlulugu                 420             2520        1260                840
guvenli onyukleme zinciri              372                0         744                372
taban cizgisi karsilastirmasi          432                0        5184                  0
surec olusturma kaydi                  432                0           0                  0
toplam                                 432            11616       17736

sutun            nokta-uc cifti    pay mesru kalem
kapali                     3048  %70.6       48912
gorunur                     768  %17.8       19536
karanlik                    504  %11.7        1104
toplam                     4320

Filo ölçeğinde sıralama değişiyor. Uygulama izin listesi uç başına en çok tür kapatan denetimdi; filo ölçeğinde en pahalı olan da odur: altı bin altı yüz engellenen kalem ve dokuz bin üç yüz onay kalemi. Buna karşılık güvenli önyükleme zinciri üç yüz yetmiş iki nokta-uç çiftini sıfır engellenen kalemle kapatıyor. İki denetim arasındaki fark, kapattıkları nokta türünün meşru kalem yoğunluğudur: biri uçtaki en kalabalık noktalara dokunuyor, öteki neredeyse boş olan bir noktaya.

Alt tablo konunun kapanış sayısını veriyor. Dört yüz otuz iki uç ve on nokta türü dört bin üç yüz yirmi nokta-uç çifti eder; bunun yüzde yetmiş virgül altısı kapalı, yüzde on yedi virgül sekizi yalnız görünür ve yüzde on bir virgül yedisi karanlıktır. Karanlık çiftlerin taşıdığı meşru kalem yalnızca bin yüz dört — yani karanlıkta kalan noktalar uçtaki en seyrek noktalar. Bu, iyi bir haber gibi okunabilir ama tersi de doğrudur: seyrek nokta, üzerine bir kalem eklendiğinde en kolay fark edilecek noktadır — eğer bakan bir kayıt varsa. Karanlık sütununun tanımı tam olarak böyle bir kaydın olmamasıdır.

Özet

  • 10 kalıcılık noktası türü uç başına 161 meşru kalem barındırıyor. 4 kapatan denetim toplam 10 tür kapatıyor ve 36 meşru kalem engelliyor; 2 görünürlük denetimi hiç tür kapatmıyor, 11 tür görünür kılıyor ve 0 kalem engelliyor.
  • Kapatan denetimlerin hiçbiri 4 uç sınıfının dördünde birden uygulanamıyor; dört sınıfta da uygulanabilen iki denetim yalnız görünürlük veriyor. Ne kadar çok kapatan, o kadar az uçta.
  • 4 uç sınıfının dördünde birden kapalı nokta türü sayısı 0/10. Şube uçlarında 9 tür kapalı, saha dizüstülerinde 3; aynı envanter, farklı uygulanabilirlik.
  • Kalıcı olay aboneliğine hiçbir denetim dokunmuyor: ne kapatan var ne gören. Önyükleme girişini bir denetim kapatıyor, hiçbiri görmüyor — kapatmanın uygulanamadığı uçta tamamen karanlıkta kalır.
  • Karanlık türlerin en yüksek olduğu sınıf toplayıcı makineleridir (2 tür, 6 meşru kalem, 60 uç). Filo ortalaması 7,1 kapalı, 1,8 yalnız görünür, 1,2 karanlıktır.
  • Kapatmanın toplam bedeli 36 engellenen meşru kalem ve 52 elle onay kalemidir; 52’nin 31’i tek bir denetimden (uygulama izin listesi), 12’si tek bir görünürlük denetiminden gelir.

Sonraki Adım

Bu konu altı derste koruma katmanlarını tek tek saydı ve her katmanın neyi kaçırdığını yazdı: kalıcılık noktası kapatmanın on türün yedisini durduramadığını, imza ile davranışın iki yanlışını birden sıfırlayan bir eşiğin olmadığını, telemetrinin sekiz noktanın ikisini hiç görmediğini, konak tabanlı filtrenin eşler arası meşru trafiği kapatamadığını, yerleşik araçların imza kuralına hiç görünmediğini ve dört uç sınıfının dördünde birden kapalı hiçbir noktanın bulunmadığını. Her derste kaçırılan bir küme kaldı ve her seferinde aynı cümle yazıldı: kapatılamayan nokta en azından görünür kılınmalıdır.

Ama görünürlük bir varsayıma yaslanıyordu ve o varsayım hiç sınanmadı. Bir noktanın “kayda düştüğü” söylendiğinde o kaydın nerede durduğu, kimin okuyabildiği, ne kadar süre kaldığı ve — en önemlisi — üzerinde oynanmadığını neyin kanıtladığı sorulmadı. Kaçırılanın kaçırıldığını ancak bir kayıt gösterebilir; o kayıt kendisi kaçırılabiliyorsa geriye ölçülecek bir şey kalmaz. Sonraki konu Sistem Günlükleri bu soruyla başlar: uçtaki kayıtlar hangi kaynaklarda tutuluyor, o kaynakların hangisi uçta duran birinin erişebildiği bir yerde, ve bir günlük kümesinin kurcalanmadığı hangi kanıtla söylenir.

İlerlemeni kaydetmek ve not almak için Giriş yap

Notlarım

Not almak için giriş yapmalısın.

Aramak için yazmaya başlayın.

↑↓ Esc gezin · aç · kapat