i8oAj

                Правила левописания:

                пишем ЧН   говорим ШН
                ---------------------
                скучно     скушно
                точно      тошно

# ОСНОВЫ ОПЕРАЦИОННЫХ СИСТЕМ (ОС) 2.5EKAP
=========================================

  + эволюция ОС
  + таблицы кодировок
  + файловые системы
  + драйверы
  + ядро

## Õpiväljund

+ понимает как устроена и для чего нужна операционная система.
+ способен изучить модули Linux/BSD 7.5EKAP, Windows 7.5EKAP, OS-II 5EKAP
+ способен успешно сдать экзамен --
   EUCIP C: Эксплуатация и поддержка информационной системы:
         2. Операционные системы
    http://www.e-uni.ee/e-kursused/eucip/haldus_vk/

## Что преподавать?

  на основе обратной связи с группой, например:
  - не учим системы счисления, потому что уже знаем (информатика)
  - не учим представление картинок в памяти компьютера, так как есть отдельный предмет \"Raster- ja vektorgraafika alused"
  - не учим английский, потому что свободно владеем.
  + учим временнЫе функции, потому что еще не знаем (физика, математика), но хотим хранить звук в компьютере.
  + знакомимся с программированием, так как операционная система -- это программа.
  + велосипедистам{*}
------
{*} изобретать велосипед -- делать что-то уже давно готовое, например, с целью обучения.
------

## Как изучать. Что такое кэш-память?

Много-много самой разнообразной информации в Интернете делает бессмысленной идею "учить впрок" все подряд. Наибольшее количество времени отнимает сортировка такой информации по уровням -- от фундаментальных знаний до навыков, которые пригодятся раз в жизни. Такую переработку лучше доверить учителю, "trust me" -- как говорил Терминатор (Арнольд Шварцнеггер). А еще, интернет поисковики плохо думают -- то есть плохо создают решение на основе минимального количества данных. Вытряхнутый из экзокостюма инопланетянин обычно изображается эдаким слабым и беспомощным червяком. Вытряхнутый из интернета студент..

Будем учиться решая практические задачи с использованием Сети (интернет, локальные ресурсы, помощь друга..). Решение незнакомой проблемы в первый раз займет уйму времени. Потом должен помочь многоуровневый кэш -- наш мозг {*}, где объем внешних знаний (интернет, подсказки) с каждым разом будет уменьшаться.
------
{*} https://ru.wikipedia.org/wiki/Кэш
------

Еще лет 30 назад на фирме Intel показали, как уменьшается трафик при просмотре специальным образом закодированного мультсериала с использованием кэша. Вначале передаются трехмерные модели персонажей, окружающих предметов. В конце -- фильм похож на текст сценария -- "этот пошел туда-то, с усмешкой сказал то-то. Тот изобразил на лице ярость.." И так далее. С гигабайта за первую серию до мегабайта и ниже за, скажем, восьмую.

Чем более эффективный кэш удается придумать, тем результативнее станут тренировки (désolé, le processus d'apprentissage, translate.google.com)

Так что же такое кэш-память?.. А там у меня ссылочка была. Кэшируем..


## ЭВОЛЮЦИЯ ОПЕРАЦИОННЫХ СИСТЕМ

  1. программирование железа с помощью нулей и единиц
  2. программа монитор
  3. разделение на ветки
    + CP/M, DOS, .. Windows Millenium. EOL (end of life)
    + RSX, Windows NT.. 10
    + Unix: Linux, BSD, Android, MacOS, iOS
    + ..
  4. слияние веток:
    + из Unix в Windows: WSL, Cygwin, GnuWin32..
    + из Windows в Unix: mono, .NET Core v.1..3
  5. искуственный интеллект / машинное обучение (AI/ML)


## КОМПЬЮТЕРНАЯ ПАМЯТЬ:

Теория: каждый бит имеет свой адрес. (бит это 0 или 1). В одной ячейке хранить можно только один ноль или одну единицу.

  данные  | 0 | 1 | 0 | .. | 0 | ..
  адреса    0   1   2   ..   n   ..

Реальность: каждый байт имеет свой адрес. (байт это 8 бит). В одной ячейке хранить можно только 0..255.

  данные  | 00101110 | 00101110 | 00101110 | .. | 00101110 | ..
  адреса    0          1          2   ..          n          ..

Посчитаем:

десять пальцев:
  0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,..101..

шестнадцать пальцев (QLC V-NAND, NVidia Turing GPU AI/ML int4):
  0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F,10,.. 65..

восемь пальцев (TLC):
  0, 1, 2, 3, 4, 5, 6, 7,10,11,12,13,14,15,16,17,20,..145..

четыре пальца (MLC):
  0, 1, 2, 3,10,11,12,13,20,21,22,23,30,31,32,33,40,..???..

три пальца ("разделитель, ноль, один" -- машина Тюринга (1936), Сетунь (1959), Салют-7 (1982)):
  0, 1, 2,10,11,12,20,21,22,100,101,102,110,111,112,120,121,..???..

два пальца (компьютеры):
  0,  1, 10, 11, 100, 101, 110, 111, 1000, 1001, 1010, 1011, 1100, 1101, 1110, 1111, 10000, 10001,..1100101..

один палец (каменный век, наскальные рисунки):
  I,II,III,..IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII,

Задача 1. Велосипедисты считают до 101 с помощью 4-х и 3-х пальцев.

Замечание: Существуют ускоренные методики перевода чисел из одной системы в другую, например Windows калькулятор в Programmer's mode.


## РИСУНКИ
----------

B 1980 году хакер Джеф Посканзер (Jef Poskanzer) придумал формат для передачи черно-белых рисунков как текста.

Закодируем изображение буквы 'J' в формате PBM:

  https://ru.wikipedia.org/wiki/Portable_anymap

точки (пиксели)   файл Посканзера

                  P1
                  # j.pbm comment
                  6 8
  . . . . X .     0 0 0 0 1 0
  . . . . X .     0 0 0 0 1 0
  . . . . X .     0 0 0 0 1 0
  . . . . X .     0 0 0 0 1 0
  . . . . X .     0 0 0 0 1 0
  . . . . X .     0 0 0 0 1 0
  X . . . X .     1 0 0 0 1 0
  . X X X . .     0 1 1 1 0 0

0. Скопируем в блокнот содержимое файла j.pbm. Сохраним на стол.

  C:\Users\Opilane\Desktop\iT-18V\j.pbm

1. Установим в компьютер программу ImageMagick:

  https://www.imagemagick.org/script/download.php

  ImageMagick-7.0.8-10-Q16-x64-dll.exe

2. Найдем "скворечник", для этого: открываем в Windows 10 поиск программы : [ cmd ]

3. Пройдем в папку с нашим файлом и переделаем картинку в формат jpg. Смотрим результат в Paint.

  CMD> cd C:\Users\Opilane\Desktop\iT-18V
  CMD> magick convert j.pbm j.png

Задача: нарисуйте свою картинку в notepad и сделайте из нее jpg.

Замечание: мультфильм -- это куча рисунков (кадров), показываемых последовательно. Существуют форматы 5, 15, 24, 25, 30, 60 кадров в секунду. В игры хорошо играть с еще большим fps (frames per second).

Задача: Разобрать анимированный gif на кадры. Собрать кадры в мультфильм с помощью ffmpeg. Смотрим результат в vlc.

  https://www.easygifanimator.net/images/samples/video-to-gif-sample.gif

  CMD> magick convert video-to-gif-sample.gif sample%04d.jpg
  CMD> ffmpeg -i sample%04d.jpg sample.mp4


## ЗВУК
-------

Звук преобразуют микрофоном в электрический сигнал, затем дробят по времени (семплируют, скажем 48000 раз в секунду) и по уровню сигнала (квантуют, скажем на 65536 уровней). Полученные таким образом точки пишут в файл в виде нулей и единиц (формат raw). Затем преобразуют в формат, пригодный для прослушивания (например, программой sox): MP3, FLAC..


## ТЕКСТ И ТАБЛИЦЫ КОДИРОВОК
----------------------------

Проще всего: отводим 7 бит на символ, используем таблицу соответствия кода (0..127) показываемому символу (ASCII), но.. русские буквы в таблицу не помещаются. Po russki pishem translitom. Tut problema -- translitov mnogo.. Пробуем запихать русские буквы, назначив символы-переключатели (14-й лат-рус и 15-й рус-лат) -- получаем кодировку КОИ-7. Вспоминаем про восьмой бит: кодировки KOI-8R, CP866, CP1251.. Хотим использовать латинский, русский, эстонский, греческий одновременно -- и тут на помощь приходит юникод (Форматы UTF-8, UTF-8 BOM, UCS-2 BE BOM, UCS-2 LE BOM, UTF-32 {*}).
------
{*} BOM -- Byte order mark. LE  -- Little Endian. BE  -- Big Endian
------

Про UTF-8 велосипедисты смотрят 10-минутный ролик: \"The most beautiful hack" на ютубе:

  https://www.youtube.com/watch?v=MijmeoH9LT4

Затем устанавливаем Python

  https://www.python.org/ftp/python/3.7.0/python-3.7.0-amd64.exe

, скачиваем в высоком разрешении и смотрим до полного запоминания.

  python -m pip install --upgrade pip
  CMD> python -m pip install --upgrade youtube-dl
  CMD> youtube-dl -F https://www.youtube.com/watch?v=MijmeoH9LT4
  CMD> youtube-dl -f248+251 https://www.youtube.com/watch?v=MijmeoH9LT4
  [ffmpeg] Merging formats into "Characters, Symbols ..

Задача: Конспектировать полезный текст из ролика, так, чтобы по конспекту можно было вручную создать UTF-8 документ.

Задача: написать нулями и единицами "Привет, World !" в кодировке UTF-8. Конвертировать в файл с BOM (Byte order mark) заголовком (для UTF-8 первые три байта EF, BB, BF):

1. Устанавливаем xxd.exe в папку, которую Windows "видит\" (path, текущая папка) c сайта http://ge.tt/5jfutZq/v/0, либо настраиваем путь:

Control Panel -> System -> Advanced System Settings
Advanced -> Environment Variables -> User Variables for Opilane -> Path
[New] Путь к файлу xxd.exe, например:

  C:\Users\Opilane\Desktop\KiT-18V

Чтобы новый путь заработал, следует перезапустить командное окно.

## ДАЛЕЕ

1. Команды можно соединять в pipes c помощью '|'
2. Результат можно записать в файл с помощью '>'

Пример

  команда1 | команда2 > файл_с_результатом.

  CMD> chcp 65001               # Включаем "неофициальную"\
                             # (вечные глюки) страницу юникода.
  CMD> xxd -p hw.txt > hw.hex   # записать шестнадцатеричный дамп в файл.
  CMD> type hw.hex | xxd -r -p  # конвертировать обратно (дамп в текст).

## ИГРАЕМ В SED

  1. Сайт: http://gnuwin32.sourceforge.net/packages/sed.htm
  2. Установить: sed-4.2.1-setup.exe
  3. Установить: coreutils-5.3.0.exe
  4. Установить: netpbm-10.27.exe
  5. Установить: grep-2.5.4-setup.exe
  6. Добавить путь: "C:\Program Files (x86)\GnuWin32\bin"

Скрипты-конвертеры:

hw.txt

  Здравствуй, World!

1. hex to bin:

  xxd -p hw.txt |
  sed 's/0/oooo /g' | sed 's/1/oooi /g' | sed 's/2/ooio /g' | \
  sed 's/3/ooii /g' | sed 's/4/oioo /g' | sed 's/5/oioi /g' | \
  sed 's/6/oiio /g' | sed 's/7/oiii /g' | sed 's/8/iooo /g' | \
  sed 's/9/iooi /g' | sed 's/a/ioio /g' | sed 's/b/ioii /g' | \
  sed 's/c/iioo /g' | sed 's/d/iioi /g' | sed 's/e/iiio /g' | \
  sed 's/f/iiii /g' | sed 'y/oi/01/'

2. bin to hex:

  cat hw.bin.txt |
  sed 's/0000 /0/g' | sed 's/0001 /1/g' | sed 's/0010 /2/g' | \
  sed 's/0011 /3/g' | sed 's/0100 /4/g' | sed 's/0101 /5/g' | \
  sed 's/0110 /6/g' | sed 's/0111 /7/g' | sed 's/1000 /8/g' | \
  sed 's/1001 /9/g' | sed 's/1010 /a/g' | sed 's/1011 /b/g' | \
  sed 's/1100 /c/g' | sed 's/1101 /d/g' | sed 's/1110 /e/g' | \
  sed 's/1111 /f/g' | sed 'y/01/01/'


## ОПЕАЦИОННАЯ СИСТЕМА -- ЭТО ПРОГРАММА

                Чтобы отвлечься, решила написать компьютерную игру,
                совсем простенькую -- «Пятнашки» на С++.

                Эли Фрей, «Синдром Алисы».

Писать программу с помощью нулей и единиц дело неблагодарное и совсем скучное. Поэтому первым делом (но в виде 10110001..) написали код для автоматического перевода с человекочитаемого языка в нули-единицы. Теперь можно выбрать язык (C, C++, C#, Python, PHP, JavaScript, Perl, BASH, AWK..) и писать код. Нам это понадобится как для понимания работы ядра и драйверов операционной системы, так и в дальнейшем при изучении Linux и Windows.

## ПЕРЕМЕННЫЕ И ФАЙЛЫ.

Мы уже сталкивались с парами вида адрес-значение когда говорили о работе компьютерной памяти. Но человеку удобнее работать со словами, чем с числами. Когда пишут программу, программа-переводчик (компилятор) дает бо'льшую свободу в использовании памяти, чем просто адрес-значение. Адрес может быть словом (имя переменной), значение -- любой, заранее оговоренной длины (тип переменной. Должно иметься достаточное количество памяти). Кроме того, можно условиться относительно прав и истории доступа к значению переменной. Ну а если еще при выключении питания переменная не стирается, то больше подойдет назвать ее файлом (образно-мешок с биркой: в мешке содержимое, на бирке название, свойства и права доступа к файлу).

Если содержимое файла это копии "бирок" с других файлов -- то такой файл называется папкой (folder). Говорят, что файл лежит в папке, если он доступен только из этой папки. Операционная система упрощает создание удаление чтение и запись в файл (папку)

## ЗАЧЕМ НУЖНЫ КОМАНДЫ?

Замечание. В PowerShell используйте

  command | out-file somefile -encoding ASCII

вместо

  command > somefile

, поэтому CMD (Для знатоков, штучка. М. Жванецкий). Вот за что окну powershell можно многое простить, так это за то, что он может помнить историю команд (можно закрыть окно, перезагрузить компьютер,.. но Clear-History) {*}.
------
{*}. https://www.howtogeek.com/298244
        /how-to-use-your-command-history-in-windows-powershell/
------

Если вас заинтересовал PowerShell, попробуйте Flowgorithm, там есть автопереводчик, наряду с такими языками, как:

C#, C++, Java, JavaScript, Lua, Pascal, Perl, PHP, Powershell, Python, QBasic, Ruby, Scala, Smalltalk, Swift, TypeScript, VBA, Visual Basic .NET, Caddis Pseudocode, IBO Pseudocode, Auto Pseudocode

Пример:

  босс: Создай на столе папку и положи туда все картинки из книги "Ы"
  я:    Лихо щелкаю мышкой в графическом файл-менеджере
  босс: Прекрасно. Сегодня ночью сделай это на остальных 500-х компьютерах фирмы.

Задачи на подобие этой следует решать с помощью команд и скриптов.

Команда состоит из имени, ключей настройки и аргументов:

  ## -s -- one '-' before short key or '--' before long key.
  command --longkey -s arg1 arg2 ..

Список команд помещенный в текстовый файл образует простейший скрипт.

Задача: создать позитив картинки с 000001.png (негатив).

  CMD> magick convert 000001.png 000001.pbm
  CMD> pnmtopnm -plain 000001.pbm > n.pbm
  CMD> cat n.pbm | sed "3,$y/01/10/" > p.pbm
  CMD> magick convert p.pbm 000001p.png

## ЕСЛИ..

Справка: if /?

  CMD> cat iff.bat
  @echo off
  if "%1" == "yes" ( echo great %1 ) else echo oh no, it's %1
  CMD> iff 2
  oh no, it's 2

## ПЕРЕМЕННЫЕ И АРГУМЕНТЫ

Справка: set /?

varr.bat

  CMD> cat varr.bat
  @echo off
  set zzz=crazy
  echo %zzz%
  if "%*"=="" ( echo none ) else echo %1
  CMD> varr
  crazy
  none
  CMD> varr x
  crazy
  x

## А КАРТИНОК ТО МНОГО..

Справка: for /?

Цикл по списку:

  for %x in (*) do echo %x

Цикл ( старт, шаг, стоп) в командной строке:

  for /L %a in (1,1,200) do echo %a

Цикл в файле (пишем %%var):

forr.bat

  @echo off
  for /L %%a in (1,1,20) do (
    echo %%a
  )

C аргументом:

  CMD> type forr.bat
  @echo off
  for /l %%a in (1,1,%1) do echo %%a
  CMD> forr 2
  1
  2

Задача: конвертировать негативы в позитивы для всех картинок

  (000001.png .. 000020.png)


## ВЫЗОВ ОДНОГО СКРИПТА ИЗ ДРУГОГО

  CMD> cat ma.bat
  @echo off
  call sl
  echo Back to square one..
  sl
  echo Point of no return..
  CMD> cat sl.bat
  @ echo off
  echo By Your Command..
  CMD> ma
  By Your Command..
  Back To Square One..
  By Your Command..

  $

Мораль сей басни такова: пиши call если есть желание вернуться в вызывающий скрипт.

## ТО-ЖЕ, НО ДЛЯ ПИНГВИНОВ

  $ cat /etc/issue
  Ubuntu 16.04.5 LTS \n \l
  $ sudo apt-get install imagemagick netpbm
  $ convert  000001.png p4.pbm
  $ pnmtoplainpnm p4.pbm > p1.pbm
  $ cat p1.pbm | sed "3,$y/01/10/" > n1.pbm
  $ convert n1.pbm 000001i.png


## ССЫЛКИ (При подготовке этой заметки я нашел..):

  https://superuser.com/questions/866006
    /is-it-possible-to-reverse-xxd-to-get-original-file-from-binary-file

  https://www.pcgamesn.com/samsung-fifth-generation-v-nand-qlc

  https://www.anandtech.com/show/13170
    /samsung-starts-mass-production-of-qlc-vnandbased-ssds

  https://developerinsider.co
    https://developerinsider.co/educational-software/

  https://codingbee.net/tutorials/powershell
    /powershell-make-a-permanent-change-to-the-path-environment-variable

  https://social.technet.microsoft.com/Forums/lync/en-US
    /23f8f360-f257-4552-b8d8-ae8621c0203a
    /powershell-file-created-within-powershell-has-a-
    different-formatsize-then-normal-notepad-file-in?forum=ITCG

  https://blog.ipswitch.com
    /run-linux-on-windows-10-without-a-virtual-machine-with-wsl

## A. ПРИЛОЖЕНИЕ А. FAQ (вопросы-ответы)

1. Как определить или изменить текущую кодировку файла в Notepad++?

  Encode -> Encode in ANSI           Encode -> Convert in ANSI
            Encode in UTF-8                    Convert in UTF-8
            Encode in UTF-8 BOM                Convert in UTF-8
            Encode in UCS-2 BE BOM{*}          Convert in UCS-2 BE BOM
          v Encode in UCS-2 LE BOM             Convert in UCS-2 LE BOM
------
{*}. UCS-2 is obsolete terminology which refers to a Unicode implementation up to Unicode 1.1
http://unicode.org/faq/utf_bom.html
------

2. Как определить или изменить текущий способ перевода строки в Notepad++?

  Edit -> EOL Conversion (текущая серая)

3. BOM (byte order mark) для различных кодировок.

  00 00 FE FF   UTF-32, big-endian
  FF FE 00 00   UTF-32, little-endian
  FE FF         UTF-16, big-endian
  FF FE         UTF-16, little-endian
  EF BB BF      UTF-8

## B. ПРИЛОЖЕНИЕ Б. UTF-8 ru+en+gr+ee

  d090 d091 d092 d093 d094 d095 d081 d096 d097 d098
  А    Б    В    Г    Д    Е    Ё    Ж    З    И

  d099 d09a d09b d09c d09d d09e d09f d0a0 d0a1 d0a2
  Й    К    Л    М    Н    О    П    Р    С    Т

  d0a3 d0a4 d0a5 d0a6 d0a7 d0a8 d0a9 d0aa d0ab d0ac
  У    Ф    Х    Ц    Ч    Ш    Щ    Ъ    Ы    Ь

  d0ad d0ae d0af 0d0a d0b0 d0b1 d0b2 d0b3 d0b4 d0b5
  Э    Ю    Я         а    б    в    г    д    е

  d191 d0b6 d0b7 d0b8 d0b9 d0ba d0bb d0bc d0bd d0be
  ё    ж    з    и    й    к    л    м    н    о

  d0bf d180 d181 d182 d183 d184 d185 d186 d187 d188
  п    р    с    т    у    ф    х    ц    ч    ш

  d189 d18a d18b d18c d18d d18e d18f 0d0a 4142 4344
  щ    ъ    ы    ь    э    ю    я         A B  C D

  4546 4748 494a 4b4c 4d4e 4f50 5152 5354 5556 5758
  E F  G H  I J  K L  M N  O P  Q R  S T  U V  W X

  595a 0d0a 6162 6364 6566 6768 696a 6b6c 6d6e 6f70
  Y Z       a b  c d  e f  g h  i j  k l  m n  o p

  7172 7374 7576 7778 797a 0d0a ce91 ce92 ce93 ce94
  q r  s t  u v  w x  y z       Α    Β    Γ    Δ

  ce95 ce96 ce97 ce98 ce99 ce9a ce9b ce9c ce9d ce9e
  Ε    Ζ    Η    Θ    Ι    Κ    Λ    Μ    Ν    Ξ

  ce9f cea0 cea1 cea3 cea4 cea5 cea6 cea7 cea8 cea9
  Ο    Π    Ρ    Σ    Τ    Υ    Φ    Χ    Ψ    Ω

  0d0a ceb1 ceb2 ceb3 ceb4 ceb5 ceb6 ceb7 ceb8 ceb9
       α    β    γ    δ    ε    ζ    η    θ    ι

  ceba cebb cebc cebd cebe cebf cf80 cf81 cf83 cf84
  κ    λ    μ    ν    ξ    ο    π    ρ    σ    τ

  cf85 cf86 cf87 cf88 cf89 0d0a 4142 4445 4647 4849
  υ    φ    χ    ψ    ω         A B  D E  F G  H I

  4a4b 4c4d 4e4f 5052 5320 c5a0 5a20 c5bd 5455 5620
  J K  L M  N O  P R  S    Š    Z    Ž    T U  V

  c395 c384 c396 c39c 0d0a 6162 6465 6667 6869 6a6b
  Õ    Ä    Ö    Ü         a b  d e  f g  h i  j k

  6c6d 6e6f 7072 7320 c5a1 7a20 c5be 7475 7620 c3b5
  l m  n o  p r  s    š    z    ž    t u  v    õ

  c3a4 c3b6 c3bc
  ä    ö    ü

C. ## ПРИЛОЖЕНИЕ В. POWERSHELL

enable local scripts:

  PS# get-executionpolicy
  PS# set-executionpolicy remotesigned

add path:

  PS> $env:Path += ";C:\Program Files (x86)\GnuWin32\bin"
  PS> [Environment]::SetEnvironmentVariable("PATH", $env:Path + ";" + $addMe, [System.EnvironmentVariableTarget]::Machine);

install and run Linux on Windows 10 (WSL)

Run Powershell. Pin to taskbar. Close and Rerun as Administrator. Edit Properties: Font: Consolas 20, Layout: 120x36

  PS# Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

Sleepy: Ubuntu 16.04 201,749,452
        Ubuntu 18.04 224,617,257

  PS> Invoke-WebRequest -Uri https://aka.ms/wsl-ubuntu-1804 -OutFile ~/Ubuntu.zip –UseBasicParsing
  PS> cd C:\Users\opilane\Ubuntu\
  PS> Expand-Archive ~/Ubuntu.zip ~/Ubuntu
  PS> cd .\Ubuntu
  PS> .\ubuntu.exe

i found mine in C:\Users\alien\AppData\Local\lxss and
C:\Users\alien\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState. installed from Windows Store i believe..

