An SFP EEPROM is a 256-byte non-volatile memory chip inside a network приемопередатчик that communicates module identity and diagnostic capabilities to a host переключатель via an I2C bus. Network engineers program these EEPROMs with specific OEM hex codes to bypass "unsupported transceiver" errors, ensuring multi-vendor interoperability and reducing optical hardware CapEx by up to 80%.

In enterprise центров обработки данных and ISP networks, managing оптические приемопередатчики often feels like navigating a maze of artificial hardware restrictions. While the physical hardware of a standard 10G, 40G, or 100G optical module is strictly governed by Multi-Source Agreement (MSA) standards—specifically the SFF-8472 specification—major Original Equipment Manufacturers (OEMs) like Cisco, Juniper, and Arista frequently implement proprietary software checks.
During the port initialization phase, the switch operating system reads the module's EEPROM. If the embedded cryptographic signature or vendor string fails to match the OEM's predefined whitelist, the switch rejects the optic, typically triggering an err-disable состояние или системный журнал «неисправного модуля». Этот механизм предназначен для одной основной цели: привязки к конкретному поставщику сетевого оборудования.
Однако, поскольку базовая архитектура EEPROM стандартизирована по всем параметрам, эту привязку к протоколу можно систематически обходить. В этом руководстве представлен углубленный технический анализ логики SFP EEPROM. Мы рассмотрим стандартную 256-байтовую структуру памяти, продемонстрируем, как извлекать и считывать данные I2C с помощью таких инструментов, как Linux. ethtoolа также разработать действенную систему закупок для перепрограммирования универсальных модулей SFP с целью обеспечения бесперебойной работы сети с участием оборудования разных производителей.
🟣 Что такое SFP EEPROM и как она работает?
An SFP EEPROM (Electrically Erasable Programmable Read-Only Memory) is a non-volatile memory chip located on the transceiver's Печатные платы. It stores critical identity, compatibility, and optical telemetry data. The host switch queries this chip via an I2C interface to verify the module's specifications and authorize the port connection.

Физический уровень: I2C и микросхема 24CO02
At the hardware level, the SFP EEPROM is typically a standard 2Kbit memory IC (such as the 24C02 series). Its primary function is to act as the transceiver's digital passport. When an SFP module is inserted into a chassis, the switch does not immediately activate the laser. Instead, the switch's ASIC / ИНТЕГРАЛЬНАЯ СХЕМА, СПЕЦИАЛИЗИРОВАННАЯ ДЛЯ РЕШЕНИЯ КОНКРЕТНОЙ ЗАДАЧИ queries the EEPROM data via a 2-wire serial interface—universally known as an I2C (Inter-Integrated Circuit) bus—typically operating at a clock speed of 100 kHz.
Без исправной EEPROM коммутатор не имеет механизма для определения длины волны, дальности связи или требований к питанию приемопередатчика, что приводит к немедленной неисправности порта или нераспознанной аппаратной ошибке.
Стандарт SFF-8472 и карта памяти размером 256 байт
Для обеспечения глобального совместимость, the networking industry relies on the SFF-8472 MSA specification. This standard dictates a strict, standardized 256-byte memory map that all optical transceivers must follow. The switch accesses this data using two distinct I2C base addresses: A0h and A2h.
| I2C Адрес | Тип блока данных | Сохраненные ключевые параметры |
|---|---|---|
| A0h (1010000X) | Блок идентификации модуля (статический) |
|
| A2h (1010001X) | Блок диагностических данных (динамический) |
|
The Module Identity Block (Address A0h) is the critical section for multi-vendor interoperability. It contains the static string values that the switch operating system parses during port initialization. Conversely, the Diagnostic Data Block (Address A2h) is utilized only if the module supports Digital Diagnostics Monitoring Interface (DDMI), providing engineers with real-time физический слой видимость.
🟣 Как SFP EEPROM влияет на совместимость устройств разных производителей
Почему стандартные SFP-модули выходят из строя в коммутаторах OEM-производителей?
Совместимость устройств разных производителей нарушается, поскольку операционные системы коммутаторов OEM-производителей активно сканируют адрес памяти A0h в EEPROM SFP на наличие проприетарных строковых обозначений и зашифрованных подписей производителей. Даже если универсальный трансивер строго соответствует физическим стандартам MSA, коммутатор отключит порт, если кодировка EEPROM производителя не соответствует запрограммированному списку разрешенных устройств OEM-производителя.

Стандарт SFP MSA: универсальный язык трансиверов.
To understand the root cause of interoperability issues, it is essential to distinguish between physical hardware and embedded software. The physical and electrical characteristics of optical transceivers are governed by the Multi-Source Agreement (MSA)—a collaborative framework established by competing manufacturers to ensure baseline compatibility.
Under MSA specifications (such as SFF-8074i for physical dimensions and SFF-8472 for diagnostic monitoring), the optical sub-assemblies (ТОСА/розовый), laser drivers, and I2C communication protocols are standardized. Consequently, a generic 10GBASE-LR module manufactured by an independent fab and a premium-branded OEM module are practically identical at the hardware level. They both transmit light at a 1310nm wavelength, support a 10km link budget, and speak the exact same base I2C language.
Почему производители оригинального оборудования используют EEPROM для привязки к конкретному поставщику
Если аппаратное обеспечение идентично, почему два модуля с абсолютно одинаковой скоростью и дальностью действия ведут себя по-разному на разных аппаратных платформах? Расхождение полностью объясняется кодом производителя в EEPROM.
Крупные производители сетевого оборудования (OEM, такие как Cisco, HPE и Juniper) разрабатывают микропрограммное обеспечение своих коммутаторов таким образом, чтобы оно ожидало определенные идентификационные данные модуля. При установке SFP-модуля операционная система коммутатора (например, Cisco IOS-XE или Juniper Junos) выполняет строгую последовательность проверки:
- Идентификация модуля (байты 20-35 и 37-52): Коммутатор считывает блок памяти A0h для проверки Название поставщика и Производитель PN (Номер детали). Если коммутатор HPE отображает "Generic" вместо "HP", это сигнализирует о неисправности модуля.
- Требования к встроенному программному обеспечению и криптографические подписи (байты 96-127): Современные OEM-коммутаторы выходят за рамки простых текстовых строк. Они используют байты, специфичные для производителя, в EEPROM для хранения собственных зашифрованных хэш-ключей. Коммутатор вычисляет контрольную сумму; если хэш не удается, аутентификация завершается неудачей.
- Искусственное отключение порта: При сбое аутентификации коммутатор преднамеренно прерывает функцию передачи (TX) приемопередатчика или переводит порт в аварийное состояние. err-disable Состояние, генерирующее сообщение "неподдерживаемый приемопередатчик".
| Обоснование производителя оборудования для обеспечения привязки EEPROM к конкретному производителю | Реальность для сетевой инженерии |
|---|---|
| Контроль качества и стабильность: Производители оборудования утверждают, что ограничение совместимости гарантирует использование только тщательно протестированных и прошедших термическую проверку оптических компонентов, что защищает аппаратное обеспечение коммутатора и обеспечивает соблюдение гарантий SLA. | Защита маржи: Основная функция кодирования EEPROM поставщиками — коммерческая. Это позволяет OEM-производителям завышать цену на оптическое оборудование стандарта MSA на 300–1000%, вынуждая корпоративных покупателей работать в замкнутой аппаратной экосистеме. |
В конечном счете, программирование EEPROM не отражает оптическое качество трансивера, а представляет собой цифровой механизм контроля. Модификация этого кода EEPROM является отраслевым стандартом для обхода этих искусственных ограничений и восстановления истинной совместимости MSA.
🟣 Типичные сообщения об ошибках SFP EEPROM и их значение
Как интерпретировать ошибки SFP EEPROM?
Когда коммутатор отклоняет оптический модуль, сообщения syslog позволяют выявить первопричину. Ошибки «Неподдерживаемый трансивер» указывают на то, что коммутатор успешно считал данные из EEPROM, но отклонил кодировку производителя (программная блокировка). И наоборот, ошибки «Неисправная EEPROM» или отсутствие телеметрии DOM указывают на поврежденную карту памяти, физическое повреждение шины I2C или отсутствие поддержки диагностики SFF-8472 (аппаратный сбой).
На этапе инициализации порта операционная система коммутатора полностью полагается на данные EEPROM для подключения физического уровня. При сбое этого процесса коммутатор генерирует специальные системные журналы. Для сетевых инженеров точная интерпретация этих журналов является первым шагом в определении того, столкнулись ли вы с искусственным ограничением со стороны производителя или с реальной аппаратной неисправностью.

1. "Неподдерживаемый приемопередатчик" / Ошибка порта - отключение
Это наиболее часто встречающаяся ошибка в корпоративных средах, особенно в экосистемах Cisco, Aruba и Juniper. Типичные сообщения в системном журнале включают %PHY-4-UNSUPPORTED_TRANSCEIVER или %GBIC_SECURITY_CRYPT-4-VN_DATA_CRC_ERROR.
- Техническая реальность: Аппаратное обеспечение трансивера полностью исправно. Шина I2C коммутатора успешно получила доступ к адресу A0h и считала технические характеристики модуля.
- Основная причина: Строка поставщика (байты 20-35) или проприетарный криптографический хеш (байты 96-127) не соответствовали внутреннему белому списку производителя.
- Результат: Коммутатор в административном порядке отключает интерфейс, переводя его в другое состояние. err-disable Состояние. Передача данных по каналу связи будет приостановлена до тех пор, пока порт не будет перезагружен или в EEPROM не будет загружен принятый код производителя.
2. "Обнаружена неисправная SFP EEPROM" / Сбой аутентификации
В отличие от неподдерживаемого предупреждения, сообщение в журнале "неисправная EEPROM" или "нераспознанный модуль" обычно указывает на сбой связи низкого уровня между микросхемой коммутатора и микросхемой памяти модуля.
- Техническая реальность: Коммутатор попытался прочитать карту памяти размером 256 байт, но получил искаженные шестнадцатеричные данные, неверную контрольную сумму или вообще не получил ответа.
- Основная причина: Обычно это проблема на аппаратном уровне. Она может быть вызвана физическим повреждением контактов I2C модуля (SDA/SCL), электрическим коротким замыканием или полностью пустой/поврежденной микросхемой EEPROM 24C02 в результате неудачной попытки перепрограммирования.
- Результат: Трансивер полностью неработоспособен для коммутатора. Требуется полная перепрошивка в шестнадцатеричном коде с помощью внешнего программатора SFP или физическая замена.
3. Неудачные операции чтения: несоответствие данных DOM/DDMI
Иногда инженеры сталкиваются с ситуацией, когда физическое соединение находится в состоянии "UP" и успешно передает трафик уровня 2/уровня 3, но в командной строке коммутатора или пользовательском интерфейсе управления отображается "N/A" или выдаются ошибки, касающиеся оптической телеметрии (мощность TX/RX, температура).
- Техническая реальность: Коммутатор успешно считал статический блок идентификации (A0h) и авторизовал соединение. Однако чтение блока диагностических данных в реальном времени (A2h) не удалось.
- Основная причина: Либо оптический модуль изготовлен по более старому стандарту MSA (SFF-8074i), который физически не имеет возможностей цифрового оптического мониторинга (DOM), либо внутренняя адресация блока A2h в EEPROM повреждена.
- Результат: Traffic flows normally, but network monitoring platforms (like SolarWinds or PRTG) cannot pull SNMP data for optical health thresholds, creating blind spots in infrastructure management.
| Симптом ошибки | Статус чтения EEPROM | Первичный диагноз |
|---|---|---|
| err-disable / Неподдерживаемый | Прочитано успешно (A0h) | Программная зависимость. Несоответствие кода поставщика. |
| Неисправен / Нераспознан | Чтение не удалось / Повреждено | Аппаратная неисправность. Повреждение памяти или обрыв шины I2C. |
| Соединение установлено, но данные DOM отсутствуют. | A0h — успешно / A2h — неуспешно | Модуль, не соответствующий стандарту DDMI, или повреждение блока A2h. |
🟣 Как читать и программировать SFP EEPROM
Инженеры считывают данные из EEPROM SFP с помощью команд командной строки коммутатора, утилит Linux, таких как ethtool -m, или аппаратных интерфейсов I2C для извлечения 256-байтового шестнадцатеричного дампа. Для программирования требуется специальный кодер EEPROM SFP или микроконтроллер для записи определенной подписи производителя в блок памяти A0h модуля, что позволяет обойти ограничения программного обеспечения коммутатора.
Прежде чем пытаться прошить или модифицировать стандартный модуль SFP, сетевые инженеры должны сначала проверить существующую карту памяти. Поскольку операционные системы коммутаторов обычно ограничивают доступ на запись в память трансивера, чтобы предотвратить случайное повреждение, чтение можно осуществлять программно, но для программирования требуется физическое вмешательство оборудования.

1. Извлечение программного обеспечения: Инструменты командной строки Switch
Большинство коммутаторов корпоративного класса имеют встроенные диагностические инструменты, которые считывают данные с шины I2C и декодируют необработанные шестнадцатеричные данные в удобочитаемый формат. Хотя эти команды не позволяют изменять EEPROM, они являются первой линией защиты для проверки кода производителя и телеметрии DOM.
- Cisco IOS/IOS-XE: Executing show interfaces transceiver detail displays the decoded SFF-8472 metrics (оптическая сила, temperature). To view the deeper EEPROM identity block, engineers use show idprom interface [interface_id] to reveal the specific vendor string the switch is authenticating against.
- Juniper Junos: Команда show interfaces diagnostics optics [interface_id] выдает аналогичный декодированный вывод блоков памяти A0h и A2h.
2. Извлечение на уровне ОС: Linux ethtool
Для серверов центров обработки данных, SmartNIC или сложных домашних лабораторий под управлением Linux операционная система взаимодействует напрямую с аппаратным уровнем. Утилита ethtool — это наиболее мощный программный метод чтения данных SFP EEPROM без использования проприетарного программного обеспечения коммутаторов.
Выполнив команду ethtool -m [interface_name] (или ethtool --dump-module-eeprom), Linux напрямую запрашивает информацию с шины I2C. В результате выводятся преобразованные спецификации модуля вместе с необработанным шестнадцатеричным дампом. Именно этот шестнадцатеричный дамп инженеры и собирают и сохраняют в виде файла .bin для клонирования сигнатуры работающего OEM-оптического модуля.
3. Аппаратный доступ по протоколу I2C: программный уровень
Для фактического программирования (прошивки) SFP EEPROM необходимо физически взаимодействовать с печатной платой трансивера с помощью ведущего устройства I2C. Физическая распиновка I2C на модуле SFP использует определенные золотые контакты: контакт 4 (SDA — последовательные данные), контакт 5 (SCL — последовательный тактовый сигнал), контакт 15 (VccR — питание) и контакт 20 (VeeT — заземление).
| Коммерческие программаторы SFP | Микроконтроллеры для самостоятельной сборки / с открытым исходным кодом |
|---|---|
| Методология: Такие устройства, как FS Box или SFPTotal, работают как USB-интерфейсы, готовые к подключению по принципу Plug-and-Play. Они подключаются к облачным базам данных, содержащим тысячи проверенных шестнадцатеричных кодов OEM-производителей. Лучшие для: Командам по закупке ИТ-оборудования для предприятий и поставщикам управляемых ИТ-услуг, которым необходима быстрая, надежная и стандартизированная прошивка без ручного редактирования шестнадцатеричных файлов. |
Методология: Utilizing a Raspberry Pi or Arduino wired directly to an Клетка SFP. Engineers use Linux utilities like i2c-tools (specifically i2cdump and i2cset) to manually push binary files to the 0x50 (A0h) address. Лучшие для: Исследования в области сетевых технологий, домашние лаборатории и углублённая диагностика оборудования. |
Техническое предупреждение: Программирование будет успешным только в том случае, если универсальный модуль SFP «разблокирован». Многие недорогие или OEM-трансиверы оснащены защищенными от записи микросхемами EEPROM, для работы которых требуется определенный 4-байтовый аппаратный пароль, передаваемый по шине I2C, прежде чем память сможет принимать новые данные.
🟣 Программирование, перепрограммирование и кодирование SFP EEPROM.
Enterprises reprogram SFP EEPROMs to overwrite generic module identity blocks with proprietary OEM hex codes. Using a commercial SFP coding tool, IT teams can flash blank MSA-standard optics on-demand. This is a strategic procurement workaround that consolidates multi-vendor optical inventory into a single SKU, bypassing vendor lock-in and drastically reducing network CapEx.

Механика кодирования поставщиками: что на самом деле делает инструмент программирования.
Перепрограммирование модуля SFP — это процесс изменения шестнадцатеричных значений в адресе памяти A0h для точного воспроизведения криптографической подписи и строки производителя высококачественного оптического модуля OEM. Поскольку ручное редактирование двоичных файлов с помощью шестнадцатеричного редактора подвержено человеческим ошибкам — особенно в отношении необходимых пересчетов контрольных сумм (байт 63 CC_BASE и байт 95 CC_EXT ) — специалисты отрасли полагаются на автоматизированное оборудование.
Коммерческий программатор SFP EEPROM (часто выполненный в виде компактного USB-интерфейсного блока) служит мостом между шиной I2C трансивера и рабочей станцией управления. Стандартный рабочий процесс для этих инструментов значительно упрощен:
- Интерфейсное соединение: Стандартный, разблокированный SFP-модуль вставляется в корпус программатора.
- Облачный поиск шестнадцатеричных значений: Прилагаемое программное обеспечение подключается к поддерживаемой базе данных проверенных OEM-кодов. Инженер выбирает целевую операционную систему коммутатора (например, Arista EOS, Cisco NX-OS или Juniper Junos).
- Автоматическая прошивка: Инструмент отправляет необходимый пароль для обхода защиты от записи, перезаписывает блок A0h подписью целевого OEM-производителя, пересчитывает контрольные суммы и блокирует память. Теперь универсальный оптический модуль мгновенно распознается целевым коммутатором как собственный модуль.
Перепрограммирование как стратегия закупок ИТ-оборудования.
Хотя изменение данных в EEPROM требует глубокого технического понимания аппаратного уровня, в современных корпоративных ИТ-системах перепрограммирование редко выполняется в качестве основной задачи по настройке сети или устранению неполадок. Вместо этого оно используется как высокоэффективная стратегия закупок и управления запасами.
Центры обработки данных и поставщики управляемых услуг (MSP), работающие в средах с оборудованием разных производителей, сталкиваются со значительной логистической проблемой: обеспечением запасов оптических модулей. Традиционная модель закупок требует приобретения и хранения отдельных дорогостоящих модулей для каждой марки коммутаторов в сети (например, накопление отдельных модулей 10GBASE-LR для Cisco, HP и Extreme Networks), что приводит к замораживанию огромных сумм ИТ-бюджета в невостребованных запасах.
| Показатель закупок | Традиционные OEM-поставки | Стратегия программирования EEPROM собственными силами |
|---|---|---|
| Сложность инвентаризации | Высокий уровень. Требуется наличие отдельных артикулов для каждой марки коммутатора в сети. | Минимальные требования. Необходимо иметь на складе только один «пустой» стандартный товарный номер (SKU) стандарта MSA. |
| Гибкость развертывания | Медленно. Зависит от сроков поставки от производителя и дефицита в цепочке поставок. | Мгновенно. Оптика перепрошивается по запросу для любого переключателя, требующего замены. |
| Капитальные затраты (CapEx) | Максимальная стоимость. Производители оригинального оборудования (OEM) взимают запатентованную наценку за собственное программное обеспечение. | Оптимизировано. Организации оплачивают базовую стоимость оборудования для стандартных оптических систем. |
Приобретая высококачественные оптические модули, соответствующие стандарту MSA, и используя их в паре с программатором SFP EEPROM, менеджеры по закупкам эффективно отделяют физическое оптическое оборудование от ограничивающего программного уровня. Это возвращает контроль в руки предприятия, обеспечивая максимальную гибкость сети и минимизируя ненужные накладные расходы.
🟣 Часто задаваемые вопросы о программировании SFP EEPROM

1. Можно ли обойти ошибку «неподдерживаемый трансивер Cisco» без программирования?
Да, но с существенными оговорками. В средах Cisco IOS и NX-OS инженеры могут вводить скрытые команды, такие как service unsupported-transceiver с последующей командой no errdisable detect cause gbic-invalid. Это заставляет коммутатор игнорировать несоответствие строк производителя и активировать порт.
Однако это лишь временное решение на программном уровне. Оно официально не поддерживается службой технической поддержки Cisco (TAC), может вызывать предупреждения в журналах и часто исправляется или отключается в более новых обновлениях ОС. Модификация EEPROM на аппаратном уровне — единственный постоянный и надежный способ гарантировать, что коммутатор будет изначально принимать оптический кабель.
2. Законно ли изменять шестнадцатеричные коды SFP?
Безусловно. Физический трансивер регулируется открытым стандартом MSA, и изменение встроенных данных EEPROM для обеспечения работы стандартного оборудования в закрытой экосистеме совершенно законно. Это широко практикуется центрами обработки данных по всему миру, чтобы избежать монополистической ценовой политики OEM-производителей. Примечание: Хотя это и законно, использование оптики сторонних производителей может повлиять на официальное соглашение об уровне обслуживания (SLA) или техническую поддержку от производителя вашего коммутатора, если сбой в сети напрямую связан с физическим уровнем трансивера.
3. Что произойдет, если я введу неправильный код?
Прошивка EEPROM SFP, как правило, является неразрушающим процессом. Если вы случайно прошьете шестнадцатеричный код Juniper на модуль, предназначенный для коммутатора HPE, коммутатор HPE просто прочитает блок A0h, отклонит подпись и переведет порт в состояние err-disable . Пока шина I2C трансивера работоспособна и EEPROM не защищена от постоянной записи, вы можете просто установить модуль обратно в программатор и перезаписать его правильным кодом.
🟣 Лучшие практики для стабильного развертывания решений от разных поставщиков
Как безопасно использовать оптику сторонних производителей?
Для стабильной работы многовендорной оптической сети необходимо проверить совместимость коммутаторов с операционными системами, подтвердить состояние физического канала связи и телеметрию A2h DOM в лабораторных условиях до начала производства, консолидировать запасные части в виде стандартных артикулов, а также закупать оборудование, соответствующее стандарту MSA, у надежных производителей для обеспечения целостности физического уровня.

Освобождение оптического оборудования от ограничений программного обеспечения OEM-производителя обеспечивает значительную экономию капитальных затрат, но требует продуманной структуры развертывания для поддержания стабильности сети корпоративного уровня. Следуйте этим основным инженерным рекомендациям:
1. Проверка совместимости с операционной системой Switch.
Производители коммутаторов часто обновляют свои операционные системы (например, переходят с более старых версий IOS на IOS-XE или обновляют Arista EOS). Иногда эти обновления вводят более строгие криптографические проверки хешей, предназначенные для отклонения ранее работавших шестнадцатеричных кодов сторонних производителей. Всегда проверяйте, содержит ли облачная база данных вашего программатора SFP проверенные коды для вашей конкретной версии ОС, прежде чем выполнять массовое развертывание.
2. Лабораторные испытания и валидация DOM.
Никогда не устанавливайте только что прошитый универсальный SFP-модуль непосредственно в основной коммутатор, используемый в производственной среде. Создайте тестовую среду для проверки двух критически важных параметров:
- Состояние уровня 1: Убедитесь, что порт корректно запускается без появления предупреждений в системном журнале.
- Проверка телеметрии: Выполните соответствующую команду CLI (например, показать подробную информацию о приемопередатчике интерфейса) для подтверждения того, что коммутатор может успешно считать диагностический блок данных A2h. Если уровни оптической мощности TX/RX показывают "N/A", возможно, контрольные суммы EEPROM были рассчитаны неправильно во время прошивки.
3. Консолидация запасов и запасных частей
Откажитесь от традиционной, фрагментированной модели резервного копирования. Стандартизируйте свой оптический инвентарь, поддерживая запас высококачественных «пустых» (незаблокированных) универсальных оптических модулей вместе с коммерческим инструментом программирования. Это позволит вашей ИТ-команде развертывать модули на лету, сокращая затраты на хранение запасов и исключая риск оказаться без нужной OEM-запасной детали во время аппаратного сбоя.
4. Покупайте надежное оборудование.
EEPROM programming only solves the software compatibility issue; it does not improve the physical quality of the transceiver. The underlying optical sub-assemblies (lasers and фотодиоды) must be engineered to exacting MSA tolerances to prevent bit errors and thermal failures.
При реализации стратегии использования оборудования от разных производителей качество стандартных оптических модулей имеет первостепенное значение. Рекомендуется закупать предварительно закодированные или разблокированные трансиверы, соответствующие стандарту MSA, у проверенных производителей, таких как [название производителя]. LINK-PP Официальный магазин гарантирует, что вы получите тщательно протестированное, высоконадежное оптическое оборудование, которое легко интегрируется в вашу программируемую сетевую архитектуру.
