REST-service for GAR.
Project description
REST-сервис на django-rest-framework для доступа к базе ГАР
Этот сервис - результат объединения разработок:
django-rest-framework <http://www.django-rest-framework.org/>
m3-gar
Формат сервиса
Список адресных объектов
GET /gar/v1/addrobj/
- Параметры:
- level:
Тип: число или список чисел через запятую.
Фильтрация по уровню адресного объекта.
- parent:
- Тип: hierarchy:objectid
hierarchy - Вид иерархии - all, mun или adm
objectid - objectid родительского объекта
Фильтрация по родительскому адресному объекту.
- region_code:
Тип: число или список чисел через запятую.
Фильтрация по коду региона.
- name:
Тип: строка символов.
Поиск адресного объекта по содержанию строки в наименовании.
- page:
Тип: число.
Страница вывода результатов.
- Результат:
Тип: application/json.
Результаты выводятся по страницам согласно настройкам DRF.
- Примеры:
GET /gar/v1/addrobj/?name=Шамбалыгский&level=8&parent=adm:210893 { "count": 1, "next": null, "previous": null, "results": [ { "id": 250006, "params": [ { "id": 3197562, "typeid": { "id": 5, "name": "Почтовый индекс", "code": "PostIndex", "desc": "Информация о почтовом индексе", "updatedate": "2018-06-15", "startdate": "2011-11-01", "enddate": "2079-06-06", "isactive": true }, "objectid": 207679, "changeid": 533863, "changeidend": 0, "value": "667901", "updatedate": "2017-11-16", "startdate": "1900-01-01", "enddate": "2079-06-06" } ], "objectguid": "7effc9de-7888-440b-b2a0-cc5432bc09a5", "changeid": 533888, "name": "Шамбалыгский", "typename": "пер", "level": "8", "previd": 249989, "nextid": 0, "updatedate": "2019-12-13", "startdate": "1900-01-01", "enddate": "2079-06-06", "isactual": true, "isactive": true, "opertypeid": 1, "objectid": 207679 } ] }
Адресный объект
GET /gar/v1/addrobj/:objectid:/
- Параметры:
- objectid:
Тип: число.
Идентификатор адресного объекта
- Результат:
Тип: application/json.
- Примеры:
GET /gar/v1/addrobj/207679/ { "id": 250006, "params": [ { "id": 3197562, "typeid": { "id": 5, "name": "Почтовый индекс", "code": "PostIndex", "desc": "Информация о почтовом индексе", "updatedate": "2018-06-15", "startdate": "2011-11-01", "enddate": "2079-06-06", "isactive": true }, "objectid": 207679, "changeid": 533863, "changeidend": 0, "value": "667901", "updatedate": "2017-11-16", "startdate": "1900-01-01", "enddate": "2079-06-06" } ], "objectguid": "7effc9de-7888-440b-b2a0-cc5432bc09a5", "changeid": 533888, "name": "Шамбалыгский", "typename": "пер", "level": "8", "previd": 249989, "nextid": 0, "updatedate": "2019-12-13", "startdate": "1900-01-01", "enddate": "2079-06-06", "isactual": true, "isactive": true, "opertypeid": 1, "objectid": 207679 }
Список домов
GET /gar/v1/houses/
- Параметры:
- parent:
- Тип: hierarchy:objectid
hierarchy - Вид иерархии - all, mun или adm
objectid - objectid родительского объекта
Фильтрация по родительскому адресному объекту.
- housenum:
Тип: строка символов.
Поиск дома по содержанию строки в номере.
- page:
Тип: число. Страница вывода результатов.
- Результат:
Тип: application/json.
Результаты выводятся по страницам согласно настройкам DRF.
- Примеры:
GET /gar/v1/houses/?parent=adm:210826&name=5 { "count": 65, "next": "http://127.0.0.1:8000/gar/v1/houses/?name=5&page=2&parent=adm%3A210826", "previous": null, "results": [ { "id": 52384730, "params": [ { "id": 197175620, "typeid": { "id": 3, "name": "ИНН ФЛ ТЕР УЧ", "code": "territorialifnsflcode", "desc": "Территориальный участок ИФНС ЮЛ", "updatedate": "2018-06-15", "startdate": "2011-11-01", "enddate": "2079-06-06", "isactive": true }, "objectid": 33665495, "changeid": 51296115, "changeidend": 158819227, "value": "1717", "updatedate": "2020-11-21", "startdate": "1900-01-01", "enddate": "2020-11-21" }, { "id": 197175630, "typeid": { "id": 6, "name": "ОКАТО", "code": "OKATO", "desc": "ОКАТО", "updatedate": "2018-06-19", "startdate": "2011-11-01", "enddate": "2079-06-06", "isactive": true }, "objectid": 33665495, "changeid": 51296115, "changeidend": 0, "value": "93243825001", "updatedate": "2019-12-14", "startdate": "1900-01-01", "enddate": "2079-06-06" }, { "id": 197175631, "typeid": { "id": 5, "name": "Почтовый индекс", "code": "PostIndex", "desc": "Информация о почтовом индексе", "updatedate": "2018-06-15", "startdate": "2011-11-01", "enddate": "2079-06-06", "isactive": true }, "objectid": 33665495, "changeid": 51296115, "changeidend": 0, "value": "667903", "updatedate": "2019-12-14", "startdate": "1900-01-01", "enddate": "2079-06-06" }, { "id": 197175643, "typeid": { "id": 14, "name": "Признак присвоения адреса", "code": "DivisionType", "desc": "Признак в каком делении присвоен адрес, муниципальном/административном", "updatedate": "2018-12-14", "startdate": "2011-11-01", "enddate": "2079-06-06", "isactive": true }, "objectid": 33665495, "changeid": 51296115, "changeidend": 0, "value": "0", "updatedate": "2019-12-14", "startdate": "1900-01-01", "enddate": "2079-06-06" }, { "id": 197175692, "typeid": { "id": 15, "name": "Порядковый номер", "code": "Counter", "desc": "Порядковый номер обьекта в рамках родителя", "updatedate": "2018-12-14", "startdate": "2011-11-01", "enddate": "2079-06-06", "isactive": true }, "objectid": 33665495, "changeid": 51296115, "changeidend": 0, "value": "18", "updatedate": "2019-12-14", "startdate": "1900-01-01", "enddate": "2079-06-06" }, { "id": 197175626, "typeid": { "id": 7, "name": "OKTMO", "code": "OKTMO", "desc": "OKTMO", "updatedate": "2018-06-19", "startdate": "2011-11-01", "enddate": "2079-06-06", "isactive": true }, "objectid": 33665495, "changeid": 51296115, "changeidend": 51296790, "value": "93643425", "updatedate": "2019-12-14", "startdate": "1900-01-01", "enddate": "2019-12-13" }, { "id": 197175728, "typeid": { "id": 7, "name": "OKTMO", "code": "OKTMO", "desc": "OKTMO", "updatedate": "2018-06-19", "startdate": "2011-11-01", "enddate": "2079-06-06", "isactive": true }, "objectid": 33665495, "changeid": 51296790, "changeidend": 0, "value": "93643425101", "updatedate": "2019-12-14", "startdate": "2019-12-13", "enddate": "2079-06-06" }, { "id": 197175636, "typeid": { "id": 13, "name": "Реестровый номер", "code": "ReestrNum", "desc": "Реестровый номер адресного объекта", "updatedate": "2018-11-12", "startdate": "2011-11-01", "enddate": "2079-06-06", "isactive": true }, "objectid": 33665495, "changeid": 51296115, "changeidend": 51296790, "value": "936434251010000000220018000000005", "updatedate": "2019-12-14", "startdate": "1900-01-01", "enddate": "2019-12-13" }, { "id": 197176157, "typeid": { "id": 13, "name": "Реестровый номер", "code": "ReestrNum", "desc": "Реестровый номер адресного объекта", "updatedate": "2018-11-12", "startdate": "2011-11-01", "enddate": "2079-06-06", "isactive": true }, "objectid": 33665495, "changeid": 51296790, "changeidend": 0, "value": "936434251010000000220018000000000", "updatedate": "2019-12-14", "startdate": "2019-12-13", "enddate": "2079-06-06" }, { "id": 197173900, "typeid": { "id": 1, "name": "ИФНС ФЛ", "code": "IFNSFL", "desc": "ИФНС ФЛ", "updatedate": "2018-06-15", "startdate": "2011-11-01", "enddate": "2079-06-06", "isactive": true }, "objectid": 33665495, "changeid": 51296115, "changeidend": 158819227, "value": "1720", "updatedate": "2020-11-21", "startdate": "1900-01-01", "enddate": "2020-11-21" }, { "id": 679599960, "typeid": { "id": 1, "name": "ИФНС ФЛ", "code": "IFNSFL", "desc": "ИФНС ФЛ", "updatedate": "2018-06-15", "startdate": "2011-11-01", "enddate": "2079-06-06", "isactive": true }, "objectid": 33665495, "changeid": 158819227, "changeidend": 0, "value": "1700", "updatedate": "2020-11-21", "startdate": "2020-11-21", "enddate": "2079-06-06" }, { "id": 679666370, "typeid": { "id": 2, "name": "ИФНС ЮЛ", "code": "IFNSUL", "desc": "ИФНС ЮЛ", "updatedate": "2018-06-15", "startdate": "2011-11-01", "enddate": "2079-06-06", "isactive": true }, "objectid": 33665495, "changeid": 158819227, "changeidend": 0, "value": "1700", "updatedate": "2020-11-21", "startdate": "2020-11-21", "enddate": "2079-06-06" }, { "id": 197175624, "typeid": { "id": 4, "name": "ИФНС ЮЛ ТЕР УЧ", "code": "territorialifnsulcode", "desc": "Территориальный участок ИФНС ФЛ", "updatedate": "2018-06-15", "startdate": "2011-11-01", "enddate": "2079-06-06", "isactive": true }, "objectid": 33665495, "changeid": 51296115, "changeidend": 158819227, "value": "1717", "updatedate": "2020-11-21", "startdate": "1900-01-01", "enddate": "2020-11-21" }, { "id": 197175616, "typeid": { "id": 2, "name": "ИФНС ЮЛ", "code": "IFNSUL", "desc": "ИФНС ЮЛ", "updatedate": "2018-06-15", "startdate": "2011-11-01", "enddate": "2079-06-06", "isactive": true }, "objectid": 33665495, "changeid": 51296115, "changeidend": 158819227, "value": "1720", "updatedate": "2020-11-21", "startdate": "1900-01-01", "enddate": "2020-11-21" } ], "housetype": { "id": 3, "name": "Домовладение", "shortname": "двлд.", "desc": "Домовладение", "updatedate": "1900-01-01", "startdate": "1900-01-01", "enddate": "2015-11-05", "isactive": false }, "addtype1": null, "addtype2": null, "objectguid": "0e27bfa6-d3e2-4160-967a-5f14d43fbc98", "changeid": 51296790, "housenum": "18", "addnum1": null, "addnum2": null, "previd": 20010713, "nextid": 0, "updatedate": "2019-12-14", "startdate": "2019-12-13", "enddate": "2079-06-06", "isactual": true, "isactive": true, "opertypeid": 20, "objectid": 33665495 } ] }
Информация о доме
GET /gar/v1/houses/:objectid:/
- Параметры:
- objectid:
Тип: число.
Идентификатор дома
- Результат:
Тип: application/json.
- Примеры:
GET /gar/v1/houses/33663074/ { "id": 60865585, "params": [ { "id": 197161766, "typeid": { "id": 1, "name": "ИФНС ФЛ", "code": "IFNSFL", "desc": "ИФНС ФЛ", "updatedate": "2018-06-15", "startdate": "2011-11-01", "enddate": "2079-06-06", "isactive": true }, "objectid": 33663074, "changeid": 51292720, "changeidend": 158819225, "value": "1720", "updatedate": "2020-11-21", "startdate": "1900-01-01", "enddate": "2020-11-21" }, { "id": 197163461, "typeid": { "id": 13, "name": "Реестровый номер", "code": "ReestrNum", "desc": "Реестровый номер адресного объекта", "updatedate": "2018-11-12", "startdate": "2011-11-01", "enddate": "2079-06-06", "isactive": true }, "objectid": 33663074, "changeid": 51293350, "changeidend": 0, "value": "936434251010000000220012000000000", "updatedate": "2019-12-14", "startdate": "2019-12-13", "enddate": "2079-06-06" }, { "id": 197163411, "typeid": { "id": 6, "name": "ОКАТО", "code": "OKATO", "desc": "ОКАТО", "updatedate": "2018-06-19", "startdate": "2011-11-01", "enddate": "2079-06-06", "isactive": true }, "objectid": 33663074, "changeid": 51292720, "changeidend": 0, "value": "93243825001", "updatedate": "2019-12-14", "startdate": "1900-01-01", "enddate": "2079-06-06" }, { "id": 197163416, "typeid": { "id": 5, "name": "Почтовый индекс", "code": "PostIndex", "desc": "Информация о почтовом индексе", "updatedate": "2018-06-15", "startdate": "2011-11-01", "enddate": "2079-06-06", "isactive": true }, "objectid": 33663074, "changeid": 51292720, "changeidend": 0, "value": "667903", "updatedate": "2019-12-14", "startdate": "1900-01-01", "enddate": "2079-06-06" }, { "id": 197163430, "typeid": { "id": 14, "name": "Признак присвоения адреса", "code": "DivisionType", "desc": "Признак в каком делении присвоен адрес, муниципальном/административном", "updatedate": "2018-12-14", "startdate": "2011-11-01", "enddate": "2079-06-06", "isactive": true }, "objectid": 33663074, "changeid": 51292720, "changeidend": 0, "value": "0", "updatedate": "2019-12-14", "startdate": "1900-01-01", "enddate": "2079-06-06" }, { "id": 197163432, "typeid": { "id": 15, "name": "Порядковый номер", "code": "Counter", "desc": "Порядковый номер обьекта в рамках родителя", "updatedate": "2018-12-14", "startdate": "2011-11-01", "enddate": "2079-06-06", "isactive": true }, "objectid": 33663074, "changeid": 51292720, "changeidend": 0, "value": "12", "updatedate": "2019-12-14", "startdate": "1900-01-01", "enddate": "2079-06-06" }, { "id": 197163408, "typeid": { "id": 7, "name": "OKTMO", "code": "OKTMO", "desc": "OKTMO", "updatedate": "2018-06-19", "startdate": "2011-11-01", "enddate": "2079-06-06", "isactive": true }, "objectid": 33663074, "changeid": 51292720, "changeidend": 51293350, "value": "93643425", "updatedate": "2019-12-14", "startdate": "1900-01-01", "enddate": "2019-12-13" }, { "id": 197163454, "typeid": { "id": 7, "name": "OKTMO", "code": "OKTMO", "desc": "OKTMO", "updatedate": "2018-06-19", "startdate": "2011-11-01", "enddate": "2079-06-06", "isactive": true }, "objectid": 33663074, "changeid": 51293350, "changeidend": 0, "value": "93643425101", "updatedate": "2019-12-14", "startdate": "2019-12-13", "enddate": "2079-06-06" }, { "id": 197163423, "typeid": { "id": 13, "name": "Реестровый номер", "code": "ReestrNum", "desc": "Реестровый номер адресного объекта", "updatedate": "2018-11-12", "startdate": "2011-11-01", "enddate": "2079-06-06", "isactive": true }, "objectid": 33663074, "changeid": 51292720, "changeidend": 51293350, "value": "936434251010000000220012000000005", "updatedate": "2019-12-14", "startdate": "1900-01-01", "enddate": "2019-12-13" }, { "id": 197163397, "typeid": { "id": 3, "name": "ИНН ФЛ ТЕР УЧ", "code": "territorialifnsflcode", "desc": "Территориальный участок ИФНС ЮЛ", "updatedate": "2018-06-15", "startdate": "2011-11-01", "enddate": "2079-06-06", "isactive": true }, "objectid": 33663074, "changeid": 51292720, "changeidend": 158819225, "value": "1717", "updatedate": "2020-11-21", "startdate": "1900-01-01", "enddate": "2020-11-21" }, { "id": 679599958, "typeid": { "id": 1, "name": "ИФНС ФЛ", "code": "IFNSFL", "desc": "ИФНС ФЛ", "updatedate": "2018-06-15", "startdate": "2011-11-01", "enddate": "2079-06-06", "isactive": true }, "objectid": 33663074, "changeid": 158819225, "changeidend": 0, "value": "1700", "updatedate": "2020-11-21", "startdate": "2020-11-21", "enddate": "2079-06-06" }, { "id": 197163402, "typeid": { "id": 4, "name": "ИФНС ЮЛ ТЕР УЧ", "code": "territorialifnsulcode", "desc": "Территориальный участок ИФНС ФЛ", "updatedate": "2018-06-15", "startdate": "2011-11-01", "enddate": "2079-06-06", "isactive": true }, "objectid": 33663074, "changeid": 51292720, "changeidend": 158819225, "value": "1717", "updatedate": "2020-11-21", "startdate": "1900-01-01", "enddate": "2020-11-21" }, { "id": 197161768, "typeid": { "id": 2, "name": "ИФНС ЮЛ", "code": "IFNSUL", "desc": "ИФНС ЮЛ", "updatedate": "2018-06-15", "startdate": "2011-11-01", "enddate": "2079-06-06", "isactive": true }, "objectid": 33663074, "changeid": 51292720, "changeidend": 158819225, "value": "1720", "updatedate": "2020-11-21", "startdate": "1900-01-01", "enddate": "2020-11-21" }, { "id": 679666368, "typeid": { "id": 2, "name": "ИФНС ЮЛ", "code": "IFNSUL", "desc": "ИФНС ЮЛ", "updatedate": "2018-06-15", "startdate": "2011-11-01", "enddate": "2079-06-06", "isactive": true }, "objectid": 33663074, "changeid": 158819225, "changeidend": 0, "value": "1700", "updatedate": "2020-11-21", "startdate": "2020-11-21", "enddate": "2079-06-06" } ], "housetype": { "id": 3, "name": "Домовладение", "shortname": "двлд.", "desc": "Домовладение", "updatedate": "1900-01-01", "startdate": "1900-01-01", "enddate": "2015-11-05", "isactive": false }, "addtype1": null, "addtype2": null, "objectguid": "85e4ae37-bd1a-42ec-ad27-5c4343d53adf", "changeid": 51293350, "housenum": "12", "addnum1": null, "addnum2": null, "previd": 20009203, "nextid": 0, "updatedate": "2019-12-14", "startdate": "2019-12-13", "enddate": "2079-06-06", "isactual": true, "isactive": true, "opertypeid": 20, "objectid": 33663074 }
Установка
Установите m3-rest-gar:
pip install m3-rest-gar
2. Добавьте rest_framework, `django_filters, m3_gar, m3_rest_gar в INSTALLED_APPS и установите DjangoFilterBackend
INSTALLED_APPS = [ ..., 'rest_framework', 'django_filters', 'm3_gar', 'm3_rest_gar', ] REST_FRAMEWORK = { ..., 'DEFAULT_FILTER_BACKENDS': [ 'django_filters.rest_framework.DjangoFilterBackend', ], }
Настройте m3_gar и импортируйте данные
Добавьте urlpatterns m3_rest_gar
urlpatterns = [ ..., path('gar/', include('m3_rest_gar.urls')), ]
Настройка аутентификации OAuth2
Установить пакет OAuth2
pip install django-oauth-toolkit
Настроить приложение (settings.py)
INSTALLED_APPS = [ ... 'oauth2_provider', ] MIDDLEWARE = [ ..., 'oauth2_provider.middleware.OAuth2TokenMiddleware', ] AUTHENTICATION_BACKENDS = [ 'oauth2_provider.backends.OAuth2Backend', # Если нужен доступ в /admin: # 'django.contrib.auth.backends.ModelBackend', ] REST_FRAMEWORK = { ..., 'DEFAULT_AUTHENTICATION_CLASSES': [ 'oauth2_provider.contrib.rest_framework.OAuth2Authentication', ], 'DEFAULT_PERMISSION_CLASSES': [ 'rest_framework.permissions.IsAuthenticated', ], }
Добавить urlpatterns (urls.py)
urlpatterns = patterns('', ... path('oauth2/', include('oauth2_provider.urls', namespace='oauth2_provider')), )
Выполнить миграцию базы
python manage.py migrate
Регистрация клиентского приложения
Заходим в django-admin /admin
В разделе Users создаем пользователя от имени которого будут выполняться запросы. (Можно всех клиентов привязать к одному пользователю, они всё-равно будут отличаться номером клиента)
В разделе Applications создаем клиента, * выбираем пользователя * Client type указываем Confidencial * Authorization grant type указываем Resource owner password-based * сохраняем клиента
Обращение к сервису из клиентского приложения
Получение токена
Для получения токена нужно выполнить POST-запрос:
POST /oauth2/token/
- Параметры:
- client_id:
Тип: строка символов. Идентификатор клиентского приложения
- client_secret:
Тип: строка символов. Секретный ключ клиентского приложения
- grant_type:
Тип: строка символов. Тип идентификации клиента. Доступные значения: password
- username:
Тип: строка символов. Имя пользователя, которому выдается токен
- password:
Тип: строка символов. Пароль пользователя
- Результат:
Тип: application/json.
{ "access_token": токен для доступа к сервису, "token_type": "Bearer", "expires_in": время жизни токена в секундах, "refresh_token": токен для обновления, "scope": "read" }
Запрос данных
После получения токена его нужно указать в заголовке запроса к сервису:
- ::
Authorization: Bearer <токен>
Локальное развертывание сервиса с использованием PyCharm (для разработчиков)
Создать отдельный Django-проект с виртуальным окружением (по умолчанию PROJECT_DIR/venv). Здесь и далее PROJECT_DIR - директория PyCharm проекта.
Установить пакеты в виртуальное окружение:
pip install --src PROJECT_DIR -e git+ssh://git@stash.bars-open.ru:7999/m3/m3-gar.git@master#egg=m3_gar pip install --src PROJECT_DIR -e git+ssh://git@stash.bars-open.ru:7999/m3/m3-rest-gar.git@master#egg=m3_rest_gar
Отметить следующие директории как директории с исходниками (Mark as Sources Root):
PROJECT_DIR/m3-gar/m3_gar PROJECT_DIR/m3-rest-gar/m3_rest_gar
Создать в директории PROJECT_DIR/m3-rest-gar/test_project/test_project файл local_settings.py, скопировать в него содержимое dev_settings.py, подменить настройки, если потребуется.
Актуализировать настройки PyCharm. File->Settings->Languages & Frameworks->Django:
Django project root: PROJECT_DIR/m3-rest-gar/test_project Settings: PROJECT_DIR/m3-rest-gar/test_project/test_project/local_settings.py.
Запустить Django сервер.
В клиентском приложении, которое будет использовать локально развернутый m3-rest-gar, необходимо подменить URL сервиса ГАР на локальный.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file m3-rest-gar-1.0.45.tar.gz
.
File metadata
- Download URL: m3-rest-gar-1.0.45.tar.gz
- Upload date:
- Size: 19.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.9.6 readme-renderer/42.0 requests/2.31.0 requests-toolbelt/1.0.0 urllib3/2.0.5 tqdm/4.66.2 importlib-metadata/6.8.0 keyring/24.2.0 rfc3986/2.0.0 colorama/0.4.6 CPython/3.9.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | bb532d50026bf8ca269a3842ddae045d69d35b538ffdec67cd6bf6d32969bf61 |
|
MD5 | 743fe27fe08847a0c79173025b397b76 |
|
BLAKE2b-256 | 6f9e56e568f1f7df1c1ce521770689a504774847679213a4cad54bb2873d26ed |
File details
Details for the file m3_rest_gar-1.0.45-py3-none-any.whl
.
File metadata
- Download URL: m3_rest_gar-1.0.45-py3-none-any.whl
- Upload date:
- Size: 13.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.9.6 readme-renderer/42.0 requests/2.31.0 requests-toolbelt/1.0.0 urllib3/2.0.5 tqdm/4.66.2 importlib-metadata/6.8.0 keyring/24.2.0 rfc3986/2.0.0 colorama/0.4.6 CPython/3.9.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4e31fbb5b1b4275106bed0785a0152348402ba26af1195dc7fcd230b1d9c6625 |
|
MD5 | eae0bc370e548b32b62355e3ee438d10 |
|
BLAKE2b-256 | 3b903916bfad8ee95f12c446b957a1b6b6066611b6d257e27850e01153ad4c32 |