From e5a88665cde414284c10cfa50910ccfc56df777e Mon Sep 17 00:00:00 2001 From: zuevav <34027267+zuevav@users.noreply.github.com> Date: Thu, 30 Apr 2026 15:14:09 +0300 Subject: [PATCH] mailn --- SYSTEM.md | 409 ++ api.php | 949 ++++ classes/Auth.php | 258 + classes/FlickrAPI.php | 395 ++ classes/FlickrOAuth.php | 272 ++ classes/FlickrParser.php | 153 + classes/FormatGenerator.php | 200 + classes/TelegramBot.php | 283 ++ classes/VKAPI.php | 403 ++ config.example.php | 32 + config.php | 32 + cron_publish.php | 229 + css/style.css | 4008 ++++++++++++++++ data/.htaccess | 1 + debug.php | 579 +++ debug_urls.php | 111 + image.png | Bin 0 -> 658920 bytes js/app.js | 4210 +++++++++++++++++ setup.php | 113 + test_single_download.php | 110 + vh-flickr-mosaic.zip | Bin 0 -> 7289 bytes widget_api.php | 246 + .../vh-flickr-mosaic/assets/css/mosaic.css | 165 + .../vh-flickr-mosaic/assets/js/mosaic.js | 235 + .../vh-flickr-mosaic/vh-flickr-mosaic.php | 304 ++ 25 files changed, 13697 insertions(+) create mode 100644 SYSTEM.md create mode 100644 api.php create mode 100644 classes/Auth.php create mode 100644 classes/FlickrAPI.php create mode 100644 classes/FlickrOAuth.php create mode 100644 classes/FlickrParser.php create mode 100644 classes/FormatGenerator.php create mode 100644 classes/TelegramBot.php create mode 100644 classes/VKAPI.php create mode 100644 config.example.php create mode 100644 config.php create mode 100644 cron_publish.php create mode 100644 css/style.css create mode 100644 data/.htaccess create mode 100644 debug.php create mode 100644 debug_urls.php create mode 100644 image.png create mode 100644 js/app.js create mode 100644 setup.php create mode 100644 test_single_download.php create mode 100644 vh-flickr-mosaic.zip create mode 100644 widget_api.php create mode 100644 wordpress-plugin/vh-flickr-mosaic/assets/css/mosaic.css create mode 100644 wordpress-plugin/vh-flickr-mosaic/assets/js/mosaic.js create mode 100644 wordpress-plugin/vh-flickr-mosaic/vh-flickr-mosaic.php diff --git a/SYSTEM.md b/SYSTEM.md new file mode 100644 index 0000000..751221b --- /dev/null +++ b/SYSTEM.md @@ -0,0 +1,409 @@ +# VH Posting System - Описание системы + +**Версия:** 1.0 +**Дата:** 2026-01-07 +**Совместимость:** PHP 7.2+ +**Хостинг:** reg.ru (shared hosting) + +--- + +## Общее описание + +VH Posting System — веб-приложение для работы с изображениями Flickr. Позволяет конвертировать ссылки в различные форматы для публикации на форумах, блогах и социальных сетях, а также напрямую публиковать в Telegram-каналы. + +--- + +## Структура проекта + +``` +VH_posting_system/ +├── index.php # Главная страница (требует авторизации) +├── login.php # Страница входа +├── setup.php # Первоначальная настройка (создание админа) +├── api.php # API эндпоинты для AJAX-запросов +├── config.php # Конфигурация (API ключи) - НЕ в git +├── config.example.php # Пример конфигурации +├── auth_config.php # Данные пользователей - НЕ в git, создаётся автоматически +├── .htaccess # Настройки Apache +├── .gitignore # Исключения для git +│ +├── classes/ # PHP классы +│ ├── Auth.php # Система авторизации +│ ├── FlickrAPI.php # Клиент Flickr API +│ ├── FlickrParser.php # Парсер ссылок Flickr +│ ├── FormatGenerator.php # Генератор форматов вывода +│ └── TelegramBot.php # Клиент Telegram Bot API +│ +├── css/ +│ └── style.css # Стили интерфейса +│ +├── js/ +│ └── app.js # Фронтенд логика +│ +└── templates/ # (зарезервировано для шаблонов) +``` + +--- + +## Функциональные модули + +### 1. Link Converter (Конвертер ссылок) + +**Назначение:** Преобразование ссылок Flickr в различные форматы. + +**Поддерживаемые входные форматы:** +- Страница фото: `https://www.flickr.com/photos/username/12345678901/` +- Короткая ссылка: `https://flic.kr/p/ABC123` +- Прямая ссылка: `https://live.staticflickr.com/65535/12345678901_abcdef1234_b.jpg` + +**Форматы вывода:** + +| Ключ | Название | Шаблон | Применение | +|------|----------|--------|------------| +| `bbcode` | BBCode | `[img]{url}[/img]` | Форумы phpBB, vBulletin, IPB | +| `bbcode_linked` | BBCode (clickable) | `[url={original}][img]{url}[/img][/url]` | Кликабельные превью | +| `html` | HTML | `{title}` | Веб-сайты | +| `html_linked` | HTML (clickable) | `` | Кликабельные изображения | +| `html_figure` | HTML Figure | `
...
` | Семантическая разметка | +| `markdown` | Markdown | `![{title}]({url})` | GitHub, Reddit | +| `markdown_linked` | Markdown (clickable) | `[![...](...)]({original})` | Кликабельные в Markdown | +| `url_only` | URL only | `{url}` | Просто ссылка | +| `url_list` | URL list (comma) | `{url}, {url}...` | Списки через запятую | + +**Размеры изображений:** + +| Размер | Суффикс | Размер (px) | +|--------|---------|-------------| +| Square | `_s` | 75×75 | +| LargeSquare | `_q` | 150×150 | +| Thumbnail | `_t` | 100 | +| Small | `_m` | 240 | +| Small320 | `_n` | 320 | +| Medium | (нет) | 500 | +| Medium640 | `_z` | 640 | +| Medium800 | `_c` | 800 | +| Large | `_b` | 1024 | +| Large1600 | `_h` | 1600 | +| Large2048 | `_k` | 2048 | +| Original | `_o` | Оригинал | + +--- + +### 2. Flickr Gallery (Галерея Flickr) + +**Назначение:** Просмотр и выбор фотографий из аккаунта Flickr. + +**Возможности:** +- Просмотр всех фотографий пользователя +- Просмотр по альбомам (photosets) +- Поиск по названию/описанию +- Множественный выбор галочками +- Пагинация (50 фото на страницу) +- Превью в виде сетки + +**Требует:** Flickr API Key + User ID + +--- + +### 3. Telegram Post (Публикация в Telegram) + +**Назначение:** Отправка фотографий и текста в Telegram-каналы. + +**Возможности:** +- Отправка одной фотографии с подписью +- Отправка альбома (2-10 фото) +- Автоматическое разбиение больших альбомов (>10 фото) +- Выбор формата текста (HTML, Markdown, plain) +- Публикация в несколько каналов + +**Ограничения Telegram:** +- Максимум 10 фото в одном альбоме +- Подпись только у первого фото в альбоме +- Бот должен быть администратором канала + +--- + +### 4. Settings (Настройки) + +**Возможности:** +- Проверка статуса подключения к Flickr API +- Проверка статуса Telegram бота +- Управление списком каналов +- Смена пароля пользователя + +--- + +## Классы PHP + +### Auth.php — Система авторизации + +```php +class Auth { + // Создание пользователя + createUser($username, $password): bool + + // Смена пароля + changePassword($username, $oldPassword, $newPassword): bool + + // Вход в систему + login($username, $password, $ip): array + + // Запуск сессии + startSession($username, $token): void + + // Проверка авторизации + isAuthenticated($timeout = 3600): bool + + // Выход + logout(): void + + // Текущий пользователь + getCurrentUser(): ?string + + // Есть ли пользователи + hasUsers(): bool + + // IP клиента + static getClientIP(): string +} +``` + +**Безопасность:** +- Хеширование: Argon2ID (fallback на bcrypt) +- Защита от брутфорса: 5 попыток, блокировка 15 минут +- Таймаут сессии: 1 час +- Регенерация session ID при входе + +--- + +### FlickrAPI.php — Клиент Flickr API + +```php +class FlickrAPI { + __construct($apiKey, $apiSecret, $userId = '') + + // Установить User ID + setUserId($userId): void + + // Получить фотографии пользователя + getPhotos($page = 1, $perPage = 50): array + + // Получить альбомы + getPhotosets($page = 1, $perPage = 50): array + + // Фотографии из альбома + getPhotosetPhotos($photosetId, $page, $perPage): array + + // Информация о фото + getPhotoInfo($photoId): array + + // Доступные размеры фото + getPhotoSizes($photoId): array + + // Поиск фотографий + searchPhotos($query, $page, $perPage): array + + // Найти User ID по имени + findUserByUsername($username): string +} +``` + +--- + +### FlickrParser.php — Парсер ссылок + +```php +class FlickrParser { + // Парсинг одной ссылки + parse($url): ?array + + // Парсинг нескольких ссылок + parseMultiple($input): array + + // Построение URL изображения + buildImageUrl($photoInfo, $size = 'Large'): string + + // Доступные размеры + getAvailableSizes(): array +} +``` + +--- + +### FormatGenerator.php — Генератор форматов + +```php +class FormatGenerator { + // Добавить кастомный формат + addFormat($key, $name, $template, $separator, $description): void + + // Получить все форматы + getFormats(): array + + // Сгенерировать для одного изображения + generate($formatKey, $imageData): string + + // Сгенерировать для нескольких + generateMultiple($formatKey, $images): string + + // Сгенерировать все форматы сразу + generateAll($images): array +} +``` + +**Плейсхолдеры в шаблонах:** +- `{url}` — URL изображения выбранного размера +- `{original}` — URL оригинала +- `{title}` — Название фото +- `{description}` — Описание +- `{photo_id}` — ID фото +- `{width}`, `{height}` — Размеры + +--- + +### TelegramBot.php — Клиент Telegram + +```php +class TelegramBot { + __construct($botToken) + + // Отправить текст + sendMessage($chatId, $text, $parseMode, $disablePreview): array + + // Отправить фото + sendPhoto($chatId, $photo, $caption, $parseMode): array + + // Отправить альбом + sendMediaGroup($chatId, $photos, $caption, $parseMode): array + + // Умная публикация (авто-выбор метода) + post($chatId, $photos, $text, $parseMode): array + + // Публикация в несколько каналов + postToMultiple($chatIds, $photos, $text, $parseMode): array + + // Информация о боте + getMe(): array + + // Информация о чате + getChat($chatId): array + + // Проверка доступа к каналу + validateChannel($chatId): array + + // Экранирование HTML + static escapeHtml($text): string + + // Экранирование Markdown + static escapeMarkdown($text): string +} +``` + +--- + +## API Endpoints (api.php) + +| Action | Method | Параметры | Описание | +|--------|--------|-----------|----------| +| `convert` | POST | urls, size, format | Конвертация ссылок | +| `flickr_albums` | GET | — | Список альбомов | +| `flickr_photos` | GET | page, per_page, album_id, search | Список фото | +| `flickr_photo_sizes` | GET | photo_id | Размеры фото | +| `telegram_status` | GET | — | Статус бота | +| `telegram_channels` | GET | — | Список каналов | +| `telegram_post` | POST | channel_id, text, photos, parse_mode | Публикация | +| `change_password` | POST | current_password, new_password | Смена пароля | + +--- + +## Конфигурация (config.php) + +```php +return [ + 'flickr' => [ + 'api_key' => '', // API ключ Flickr + 'api_secret' => '', // API секрет + ], + 'flickr_user_id' => '', // ID пользователя (12345678@N00) + + 'telegram' => [ + 'bot_token' => '', // Токен бота от @BotFather + 'channels' => [ // Список каналов + ['id' => '@channel', 'name' => 'Название'], + ], + ], + + 'default_size' => 'Large', + + 'custom_formats' => [ // Кастомные форматы + // 'key' => ['name' => '', 'template' => ''], + ], +]; +``` + +--- + +## Безопасность + +### Защита файлов (.htaccess) +- Запрет листинга директорий +- Блокировка доступа к config.php, auth_config.php +- Блокировка прямого доступа к /classes/ + +### Защита авторизации +- Argon2ID/bcrypt хеширование +- Rate limiting (5 попыток / 15 минут блокировки) +- Session timeout (1 час) +- CSRF токены на формах +- Регенерация session ID + +### Входные данные +- htmlspecialchars() для вывода +- Валидация URL при парсинге +- JSON-encode для API ответов + +--- + +## Требования + +### Сервер +- PHP 7.2+ (рекомендуется 7.4+) +- Расширения: curl, json, bcmath (для base58) +- Apache с mod_rewrite + +### API ключи +- **Flickr:** https://www.flickr.com/services/apps/create/ +- **Telegram:** @BotFather → /newbot + +--- + +## Установка + +1. Загрузить файлы на хостинг +2. Скопировать `config.example.php` → `config.php` +3. Заполнить API ключи в config.php +4. Открыть сайт → setup.php → создать админа +5. Войти через login.php + +--- + +## Планируемые функции + +- [ ] Drag & drop загрузка изображений +- [ ] История конвертаций +- [ ] Избранные форматы +- [ ] Темная тема +- [ ] Экспорт/импорт настроек +- [ ] Поддержка других фотохостингов (Imgur, etc.) + +--- + +## Changelog + +### v1.0 (2026-01-07) +- Начальная реализация +- Конвертер ссылок Flickr +- Интеграция с Flickr API +- Интеграция с Telegram Bot API +- Система авторизации +- Адаптация под PHP 7.2 (reg.ru) diff --git a/api.php b/api.php new file mode 100644 index 0000000..e50cd0c --- /dev/null +++ b/api.php @@ -0,0 +1,949 @@ + 'Configuration not found']); + exit; +} +$config = require $configFile; + +// Autoload classes +spl_autoload_register(function ($class) { + $file = __DIR__ . '/classes/' . $class . '.php'; + if (file_exists($file)) { + require_once $file; + } +}); + +/** + * Create FlickrAPI instance with OAuth if available + */ +function createFlickrAPI($config) { + $flickr = new FlickrAPI( + $config['flickr']['api_key'], + $config['flickr']['api_secret'] ?? '', + $config['flickr_user_id'] ?? '' + ); + + // Add OAuth if tokens exist + if (!empty($config['flickr']['api_secret'])) { + $oauth = new FlickrOAuth( + $config['flickr']['api_key'], + $config['flickr']['api_secret'] + ); + if ($oauth->isAuthorized()) { + $flickr->setOAuth($oauth); + } + } + + return $flickr; +} + +// Check authentication +$auth = new Auth(); +if (!$auth->isAuthenticated()) { + http_response_code(401); + echo json_encode(['error' => 'Not authenticated']); + exit; +} + +// Get action +$action = $_GET['action'] ?? $_POST['action'] ?? ''; + +try { + switch ($action) { + + // ============ CONVERTER ============ + + case 'convert': + $urls = $_POST['urls'] ?? ''; + $size = $_POST['size'] ?? 'Large'; + $format = $_POST['format'] ?? 'bbcode'; + + $parser = new FlickrParser(); + $generator = new FormatGenerator(); + + $parsed = $parser->parseMultiple($urls); + + if (empty($parsed)) { + echo json_encode(['error' => 'No valid Flickr URLs found']); + exit; + } + + $images = []; + $flickr = null; + + // Check if we need API to get full URLs + $needApi = false; + foreach ($parsed as $item) { + if ($item['type'] === 'page' || $item['type'] === 'short') { + $needApi = true; + break; + } + } + + if ($needApi && !empty($config['flickr']['api_key'])) { + $flickr = createFlickrAPI($config); + } + + foreach ($parsed as $item) { + $imageData = [ + 'photo_id' => $item['photo_id'], + 'title' => 'Image', + ]; + + if ($item['type'] === 'direct') { + // Direct URL - modify size suffix + $imageData['url'] = $parser->buildImageUrl($item, $size); + $imageData['original'] = $parser->buildImageUrl($item, 'Original'); + } elseif ($flickr) { + // Need to fetch from API + try { + $info = $flickr->getPhotoInfo($item['photo_id']); + $sizes = $flickr->getPhotoSizes($item['photo_id']); + + $imageData['title'] = $info['title']['_content'] ?? 'Image'; + + // Get requested size + $sizeMap = [ + 'Large' => 'Large', + 'Large1600' => 'Large 1600', + 'Large2048' => 'Large 2048', + 'Original' => 'Original', + 'Medium640' => 'Medium 640', + 'Medium' => 'Medium', + ]; + + $sizeName = $sizeMap[$size] ?? 'Large'; + $imageData['url'] = $sizes[$sizeName]['url'] ?? $sizes['Large']['url'] ?? ''; + $imageData['original'] = $sizes['Original']['url'] ?? $sizes['Large']['url'] ?? ''; + + } catch (Exception $e) { + $imageData['url'] = $item['original_url']; + $imageData['original'] = $item['original_url']; + } + } else { + // No API - use original URL + $imageData['url'] = $item['original_url']; + $imageData['original'] = $item['original_url']; + } + + $images[] = $imageData; + } + + $output = $generator->generateMultiple($format, $images); + + echo json_encode([ + 'success' => true, + 'output' => $output, + 'count' => count($images), + ]); + break; + + // ============ FLICKR GALLERY ============ + + case 'flickr_albums': + if (empty($config['flickr']['api_key'])) { + echo json_encode(['error' => 'Flickr API not configured']); + exit; + } + + $flickr = createFlickrAPI($config); + $page = (int)($_GET['page'] ?? 1); + $perPage = (int)($_GET['per_page'] ?? 50); + $result = $flickr->getPhotosets($page, $perPage); + + echo json_encode([ + 'success' => true, + 'albums' => $result['albums'], + 'page' => $result['page'], + 'pages' => $result['pages'], + 'total' => $result['total'], + ]); + break; + + case 'flickr_photos': + if (empty($config['flickr']['api_key'])) { + echo json_encode(['error' => 'Flickr API not configured']); + exit; + } + + $flickr = createFlickrAPI($config); + $page = (int)($_GET['page'] ?? 1); + $perPage = (int)($_GET['per_page'] ?? 50); + $albumId = $_GET['album_id'] ?? ''; + $search = $_GET['search'] ?? ''; + + if ($search) { + $result = $flickr->searchPhotos($search, $page, $perPage); + } elseif ($albumId) { + $result = $flickr->getPhotosetPhotos($albumId, $page, $perPage); + } else { + $result = $flickr->getPhotos($page, $perPage); + } + + echo json_encode([ + 'success' => true, + 'photos' => $result['photos'], + 'pagination' => [ + 'page' => $result['page'], + 'pages' => $result['pages'], + 'total' => $result['total'], + ], + ]); + break; + + case 'flickr_photo_sizes': + if (empty($config['flickr']['api_key'])) { + echo json_encode(['error' => 'Flickr API not configured']); + exit; + } + + $photoId = $_GET['photo_id'] ?? ''; + if (!$photoId) { + echo json_encode(['error' => 'Photo ID required']); + exit; + } + + $flickr = createFlickrAPI($config); + $sizes = $flickr->getPhotoSizes($photoId); + + echo json_encode([ + 'success' => true, + 'sizes' => $sizes, + ]); + break; + + case 'flickr_oauth_status': + if (empty($config['flickr']['api_secret'])) { + echo json_encode([ + 'success' => true, + 'authorized' => false, + 'message' => 'API secret not configured', + ]); + exit; + } + + $oauth = new FlickrOAuth( + $config['flickr']['api_key'], + $config['flickr']['api_secret'] + ); + + echo json_encode([ + 'success' => true, + 'authorized' => $oauth->isAuthorized(), + 'auth_url' => 'flickr_auth.php', + ]); + break; + + case 'flickr_original_url': + if (empty($config['flickr']['api_key'])) { + echo json_encode(['error' => 'Flickr API not configured']); + exit; + } + + $photoId = $_GET['photo_id'] ?? ''; + if (!$photoId) { + echo json_encode(['error' => 'Photo ID required']); + exit; + } + + $flickr = createFlickrAPI($config); + $originalUrl = $flickr->getOriginalUrl($photoId); + + echo json_encode([ + 'success' => true, + 'original_url' => $originalUrl, + 'has_oauth' => $flickr->hasOAuth(), + ]); + break; + + // ============ TELEGRAM ============ + + case 'telegram_status': + if (empty($config['telegram']['bot_token'])) { + echo json_encode([ + 'success' => true, + 'connected' => false, + 'message' => 'Bot token not configured', + ]); + exit; + } + + $telegram = new TelegramBot($config['telegram']['bot_token']); + + try { + $me = $telegram->getMe(); + echo json_encode([ + 'success' => true, + 'connected' => true, + 'bot_name' => $me['first_name'] ?? '', + 'bot_username' => $me['username'] ?? '', + ]); + } catch (Exception $e) { + echo json_encode([ + 'success' => true, + 'connected' => false, + 'message' => $e->getMessage(), + ]); + } + break; + + case 'telegram_channels': + echo json_encode([ + 'success' => true, + 'channels' => $config['telegram']['channels'] ?? [], + ]); + break; + + case 'telegram_post': + if (empty($config['telegram']['bot_token'])) { + echo json_encode(['error' => 'Telegram bot not configured']); + exit; + } + + $channelId = $_POST['channel_id'] ?? ''; + $text = $_POST['text'] ?? ''; + $photos = json_decode($_POST['photos'] ?? '[]', true); + $parseMode = $_POST['parse_mode'] ?? 'HTML'; + + if (!$channelId) { + echo json_encode(['error' => 'Channel ID required']); + exit; + } + + $telegram = new TelegramBot($config['telegram']['bot_token']); + + $result = $telegram->post($channelId, $photos, $text, $parseMode); + + echo json_encode([ + 'success' => true, + 'result' => $result, + ]); + break; + + // ============ VK ============ + + case 'vk_status': + if (empty($config['vk']['access_token'])) { + echo json_encode([ + 'success' => true, + 'connected' => false, + 'message' => 'VK access token not configured', + ]); + exit; + } + + $vk = new VKAPI($config['vk']['access_token']); + + try { + $validation = $vk->validateToken(); + if ($validation['valid']) { + echo json_encode([ + 'success' => true, + 'connected' => true, + 'user_name' => $validation['user_name'] ?? '', + 'user_id' => $validation['user_id'] ?? '', + 'type' => $validation['type'] ?? 'user', + 'screen_name' => $validation['screen_name'] ?? '', + ]); + } else { + echo json_encode([ + 'success' => true, + 'connected' => false, + 'message' => $validation['error'] ?? 'Invalid token', + ]); + } + } catch (Exception $e) { + echo json_encode([ + 'success' => true, + 'connected' => false, + 'message' => $e->getMessage(), + ]); + } + break; + + case 'vk_groups': + if (empty($config['vk']['access_token'])) { + echo json_encode([ + 'success' => true, + 'groups' => [], + ]); + exit; + } + + $vk = new VKAPI($config['vk']['access_token']); + + // First check if this is a community token + try { + $validation = $vk->validateToken(); + if ($validation['valid'] && ($validation['type'] ?? '') === 'community') { + // Community token - return the community itself + echo json_encode([ + 'success' => true, + 'groups' => [[ + 'id' => $validation['user_id'], + 'name' => $validation['user_name'] ?? 'Сообщество', + 'screen_name' => $validation['screen_name'] ?? '', + ]], + 'type' => 'community', + ]); + exit; + } + } catch (Exception $e) { + // Continue to try groups.get + } + + try { + $groups = $vk->getGroups(); + echo json_encode([ + 'success' => true, + 'groups' => $groups, + ]); + } catch (Exception $e) { + echo json_encode([ + 'success' => true, + 'groups' => [], + 'error' => $e->getMessage(), + ]); + } + break; + + case 'vk_post': + if (empty($config['vk']['access_token'])) { + echo json_encode(['error' => 'VK not configured']); + exit; + } + + $groupId = $_POST['group_id'] ?? ''; + $text = $_POST['text'] ?? ''; + $photos = json_decode($_POST['photos'] ?? '[]', true); + + if (!$groupId) { + echo json_encode(['error' => 'Group ID required']); + exit; + } + + $vk = new VKAPI($config['vk']['access_token']); + + $result = $vk->post($groupId, $photos, $text); + + echo json_encode([ + 'success' => true, + 'result' => $result, + ]); + break; + + // ============ FILE UPLOAD ============ + + case 'upload_file': + if (empty($_FILES['file'])) { + echo json_encode(['error' => 'No file uploaded']); + exit; + } + + $file = $_FILES['file']; + $allowedTypes = ['image/jpeg', 'image/png', 'image/gif', 'image/webp', 'video/mp4', 'video/quicktime', 'video/webm']; + + if (!in_array($file['type'], $allowedTypes)) { + echo json_encode(['error' => 'Неподдерживаемый тип файла: ' . $file['type']]); + exit; + } + + if ($file['size'] > 50 * 1024 * 1024) { + echo json_encode(['error' => 'Файл слишком большой (макс 50MB)']); + exit; + } + + // Create uploads directory + $uploadsDir = __DIR__ . '/uploads'; + if (!is_dir($uploadsDir)) { + mkdir($uploadsDir, 0755, true); + } + + // Generate unique filename + $ext = pathinfo($file['name'], PATHINFO_EXTENSION); + $filename = uniqid('upload_') . '_' . time() . '.' . $ext; + $filepath = $uploadsDir . '/' . $filename; + + if (move_uploaded_file($file['tmp_name'], $filepath)) { + // Get the URL + $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https' : 'http'; + $host = $_SERVER['HTTP_HOST']; + $path = dirname($_SERVER['REQUEST_URI']); + $url = $protocol . '://' . $host . $path . '/uploads/' . $filename; + + echo json_encode([ + 'success' => true, + 'url' => $url, + 'filename' => $filename, + 'type' => $file['type'], + 'size' => $file['size'] + ]); + } else { + echo json_encode(['error' => 'Не удалось сохранить файл']); + } + break; + + // ============ MULTI-PLATFORM POSTING ============ + + case 'multi_post': + $platforms = json_decode($_POST['platforms'] ?? '[]', true); + $text = $_POST['text'] ?? ''; + $photos = json_decode($_POST['photos'] ?? '[]', true); + $uploadedFiles = json_decode($_POST['uploaded_files'] ?? '[]', true); + $parseMode = $_POST['parse_mode'] ?? 'HTML'; + + // Merge Flickr photos and uploaded files + if (!empty($uploadedFiles)) { + foreach ($uploadedFiles as $uploadedFile) { + if (!empty($uploadedFile['url'])) { + $photos[] = $uploadedFile['url']; + } + } + } + + if (empty($platforms)) { + echo json_encode(['error' => 'No platforms selected']); + exit; + } + + $results = []; + + foreach ($platforms as $platform) { + $type = $platform['type'] ?? ''; + $target = $platform['target'] ?? ''; + + switch ($type) { + case 'telegram': + if (empty($config['telegram']['bot_token'])) { + $results['telegram'] = [ + 'success' => false, + 'error' => 'Telegram not configured', + ]; + break; + } + + try { + $telegram = new TelegramBot($config['telegram']['bot_token']); + $result = $telegram->post($target, $photos, $text, $parseMode); + $results['telegram'] = [ + 'success' => true, + 'result' => $result, + ]; + } catch (Exception $e) { + $results['telegram'] = [ + 'success' => false, + 'error' => $e->getMessage(), + ]; + } + break; + + case 'vk': + if (empty($config['vk']['access_token'])) { + $results['vk'] = [ + 'success' => false, + 'error' => 'VK not configured', + ]; + break; + } + + try { + $vk = new VKAPI($config['vk']['access_token']); + // VK uses plain text, remove HTML/Markdown formatting + $vkText = strip_tags($text); + $result = $vk->post($target, $photos, $vkText); + $vkResult = [ + 'success' => true, + 'result' => $result, + ]; + // Include warning if photos were posted as links + if (isset($result['warning'])) { + $vkResult['warning'] = $result['warning']; + } + $results['vk'] = $vkResult; + } catch (Exception $e) { + $results['vk'] = [ + 'success' => false, + 'error' => $e->getMessage(), + ]; + } + break; + + case 'instagram': + // Instagram requires Facebook Business API + $results['instagram'] = [ + 'success' => false, + 'error' => 'Instagram posting requires Facebook Business API setup', + ]; + break; + + default: + $results[$type] = [ + 'success' => false, + 'error' => 'Unknown platform', + ]; + } + } + + echo json_encode([ + 'success' => true, + 'results' => $results, + ]); + break; + + // ============ TAG PRESETS ============ + + case 'get_presets': + $presetsFile = __DIR__ . '/data/tag_presets.json'; + if (file_exists($presetsFile)) { + $presets = json_decode(file_get_contents($presetsFile), true); + echo json_encode(['success' => true, 'presets' => $presets ?: []]); + } else { + // Return default presets + $defaultPresets = [ + ['id' => 1, 'name' => 'BJD', 'tags' => ['bjd', 'doll', 'куклы']], + ['id' => 2, 'name' => 'Фото', 'tags' => ['фото', 'photo', 'photography']], + ['id' => 3, 'name' => 'Арт', 'tags' => ['art', 'artwork', 'творчество']], + ['id' => 4, 'name' => 'Handmade', 'tags' => ['handmade', 'ручнаяработа']], + ['id' => 5, 'name' => 'Faceup', 'tags' => ['faceup', 'мейк']], + ['id' => 6, 'name' => 'Outfit', 'tags' => ['outfit', 'одежда']], + ]; + echo json_encode(['success' => true, 'presets' => $defaultPresets]); + } + break; + + case 'save_presets': + $presetsFile = __DIR__ . '/data/tag_presets.json'; + $input = json_decode(file_get_contents('php://input'), true); + $presets = $input['presets'] ?? []; + + // Validate presets structure + if (!is_array($presets)) { + echo json_encode(['error' => 'Invalid presets format']); + exit; + } + + // Ensure data directory exists + $dataDir = __DIR__ . '/data'; + if (!is_dir($dataDir)) { + mkdir($dataDir, 0755, true); + } + + // Save presets + if (file_put_contents($presetsFile, json_encode($presets, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE))) { + echo json_encode(['success' => true, 'message' => 'Presets saved']); + } else { + echo json_encode(['error' => 'Failed to save presets']); + } + break; + + // ============ SCHEDULED POSTS ============ + + case 'get_scheduled_posts': + $scheduledFile = __DIR__ . '/data/scheduled_posts.json'; + if (file_exists($scheduledFile)) { + $posts = json_decode(file_get_contents($scheduledFile), true) ?: []; + // Sort by scheduled time + usort($posts, function($a, $b) { + return strtotime($a['scheduled_time']) - strtotime($b['scheduled_time']); + }); + echo json_encode(['success' => true, 'posts' => $posts]); + } else { + echo json_encode(['success' => true, 'posts' => []]); + } + break; + + case 'create_scheduled_post': + $scheduledFile = __DIR__ . '/data/scheduled_posts.json'; + $dataDir = __DIR__ . '/data'; + + if (!is_dir($dataDir)) { + mkdir($dataDir, 0755, true); + } + + $posts = file_exists($scheduledFile) ? json_decode(file_get_contents($scheduledFile), true) ?: [] : []; + + $newPost = [ + 'id' => uniqid('sched_'), + 'text' => $_POST['text'] ?? '', + 'tags' => json_decode($_POST['tags'] ?? '[]', true), + 'photos' => json_decode($_POST['photos'] ?? '[]', true), + 'uploaded_files' => json_decode($_POST['uploaded_files'] ?? '[]', true), + 'platforms' => json_decode($_POST['platforms'] ?? '[]', true), + 'scheduled_time' => $_POST['scheduled_time'] ?? '', + 'cross_promo' => ($_POST['cross_promo'] ?? '0') === '1', + 'created_at' => date('Y-m-d H:i:s'), + 'status' => 'pending' + ]; + + if (empty($newPost['scheduled_time'])) { + echo json_encode(['error' => 'Укажите дату и время публикации']); + exit; + } + + if (strtotime($newPost['scheduled_time']) < time()) { + echo json_encode(['error' => 'Нельзя запланировать на прошедшее время']); + exit; + } + + $posts[] = $newPost; + + if (file_put_contents($scheduledFile, json_encode($posts, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE))) { + echo json_encode(['success' => true, 'post' => $newPost]); + } else { + echo json_encode(['error' => 'Не удалось сохранить']); + } + break; + + case 'update_scheduled_post': + $scheduledFile = __DIR__ . '/data/scheduled_posts.json'; + $postId = $_POST['id'] ?? ''; + + if (!$postId) { + echo json_encode(['error' => 'ID поста не указан']); + exit; + } + + $posts = file_exists($scheduledFile) ? json_decode(file_get_contents($scheduledFile), true) ?: [] : []; + + $found = false; + foreach ($posts as &$post) { + if ($post['id'] === $postId && $post['status'] === 'pending') { + $post['text'] = $_POST['text'] ?? $post['text']; + $post['tags'] = isset($_POST['tags']) ? json_decode($_POST['tags'], true) : $post['tags']; + $post['photos'] = isset($_POST['photos']) ? json_decode($_POST['photos'], true) : $post['photos']; + $post['uploaded_files'] = isset($_POST['uploaded_files']) ? json_decode($_POST['uploaded_files'], true) : $post['uploaded_files']; + $post['platforms'] = isset($_POST['platforms']) ? json_decode($_POST['platforms'], true) : $post['platforms']; + $post['scheduled_time'] = $_POST['scheduled_time'] ?? $post['scheduled_time']; + $post['cross_promo'] = isset($_POST['cross_promo']) ? ($_POST['cross_promo'] === '1') : ($post['cross_promo'] ?? false); + $post['updated_at'] = date('Y-m-d H:i:s'); + $found = true; + break; + } + } + + if (!$found) { + echo json_encode(['error' => 'Пост не найден или уже опубликован']); + exit; + } + + if (file_put_contents($scheduledFile, json_encode($posts, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE))) { + echo json_encode(['success' => true, 'message' => 'Пост обновлён']); + } else { + echo json_encode(['error' => 'Не удалось сохранить']); + } + break; + + case 'delete_scheduled_post': + $scheduledFile = __DIR__ . '/data/scheduled_posts.json'; + $postId = $_POST['id'] ?? ''; + + if (!$postId) { + echo json_encode(['error' => 'ID поста не указан']); + exit; + } + + $posts = file_exists($scheduledFile) ? json_decode(file_get_contents($scheduledFile), true) ?: [] : []; + $initialCount = count($posts); + + $posts = array_filter($posts, function($post) use ($postId) { + return $post['id'] !== $postId || $post['status'] !== 'pending'; + }); + + if (count($posts) === $initialCount) { + echo json_encode(['error' => 'Пост не найден или уже опубликован']); + exit; + } + + $posts = array_values($posts); // Re-index + + if (file_put_contents($scheduledFile, json_encode($posts, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE))) { + echo json_encode(['success' => true, 'message' => 'Пост удалён']); + } else { + echo json_encode(['error' => 'Не удалось сохранить']); + } + break; + + case 'get_published_posts': + $scheduledFile = __DIR__ . '/data/scheduled_posts.json'; + if (file_exists($scheduledFile)) { + $posts = json_decode(file_get_contents($scheduledFile), true) ?: []; + // Filter only published posts + $published = array_filter($posts, function($p) { + return $p['status'] === 'published'; + }); + // Sort by published_at descending (newest first) + usort($published, function($a, $b) { + return strtotime($b['published_at'] ?? $b['scheduled_time']) - strtotime($a['published_at'] ?? $a['scheduled_time']); + }); + // Return last 10 + $published = array_slice($published, 0, 10); + echo json_encode(['success' => true, 'posts' => array_values($published)]); + } else { + echo json_encode(['success' => true, 'posts' => []]); + } + break; + + // ============ CROSS-PROMO SETTINGS ============ + + case 'save_cross_promo': + $settingsFile = __DIR__ . '/data/cross_promo.json'; + $dataDir = __DIR__ . '/data'; + + if (!is_dir($dataDir)) { + mkdir($dataDir, 0755, true); + } + + $settings = [ + 'telegramLink' => trim($_POST['telegramLink'] ?? ''), + 'vkLink' => trim($_POST['vkLink'] ?? ''), + 'textForTg' => trim($_POST['textForTg'] ?? 'Мой канал ВКонтакте'), + 'textForVk' => trim($_POST['textForVk'] ?? 'Мой канал в Telegram') + ]; + + if (file_put_contents($settingsFile, json_encode($settings, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE))) { + echo json_encode(['success' => true]); + } else { + echo json_encode(['error' => 'Не удалось сохранить']); + } + break; + + case 'get_cross_promo': + $settingsFile = __DIR__ . '/data/cross_promo.json'; + if (file_exists($settingsFile)) { + $settings = json_decode(file_get_contents($settingsFile), true) ?: []; + echo json_encode(['success' => true, 'settings' => $settings]); + } else { + echo json_encode(['success' => true, 'settings' => [ + 'telegramLink' => '', + 'vkLink' => '', + 'textForTg' => 'Мой канал ВКонтакте', + 'textForVk' => 'Мой канал в Telegram' + ]]); + } + break; + + // ============ DRAFTS ============ + + case 'save_draft': + $draftFile = __DIR__ . '/data/draft.json'; + $dataDir = __DIR__ . '/data'; + + if (!is_dir($dataDir)) { + mkdir($dataDir, 0755, true); + } + + $draft = [ + 'text' => $_POST['text'] ?? '', + 'tags' => json_decode($_POST['tags'] ?? '[]', true), + 'photos' => json_decode($_POST['photos'] ?? '[]', true), + 'uploaded_files' => json_decode($_POST['uploaded_files'] ?? '[]', true), + 'updated_at' => date('Y-m-d H:i:s') + ]; + + if (file_put_contents($draftFile, json_encode($draft, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE))) { + echo json_encode(['success' => true]); + } else { + echo json_encode(['error' => 'Не удалось сохранить черновик']); + } + break; + + case 'get_draft': + $draftFile = __DIR__ . '/data/draft.json'; + if (file_exists($draftFile)) { + $draft = json_decode(file_get_contents($draftFile), true) ?: []; + echo json_encode(['success' => true, 'draft' => $draft]); + } else { + echo json_encode(['success' => true, 'draft' => null]); + } + break; + + case 'clear_draft': + $draftFile = __DIR__ . '/data/draft.json'; + if (file_exists($draftFile)) { + unlink($draftFile); + } + echo json_encode(['success' => true]); + break; + + // ============ SETTINGS ============ + + case 'save_vk_token': + $token = trim($_POST['token'] ?? ''); + + if (empty($token)) { + echo json_encode(['error' => 'Токен не может быть пустым']); + exit; + } + + // Update config.php with new VK token + $configFile = __DIR__ . '/config.php'; + $configContent = file_get_contents($configFile); + + // Check if vk section exists + if (strpos($configContent, "'vk'") !== false) { + // Update existing vk access_token + $configContent = preg_replace( + "/('vk'\s*=>\s*\[\s*'access_token'\s*=>\s*')[^']*(')/s", + "$1" . addslashes($token) . "$2", + $configContent + ); + } else { + // Add vk section before the closing ]; + $vkSection = "\n 'vk' => [\n 'access_token' => '" . addslashes($token) . "',\n ],\n"; + $configContent = preg_replace("/(\];)\s*$/", $vkSection . "$1", $configContent); + } + + if (file_put_contents($configFile, $configContent)) { + // Validate the new token + require_once __DIR__ . '/classes/VKAPI.php'; + $vk = new VKAPI($token); + $validation = $vk->validateToken(); + + echo json_encode([ + 'success' => true, + 'message' => 'Токен сохранён', + 'validation' => $validation + ]); + } else { + echo json_encode(['error' => 'Не удалось сохранить config.php']); + } + break; + + case 'change_password': + $currentPassword = $_POST['current_password'] ?? ''; + $newPassword = $_POST['new_password'] ?? ''; + + if (strlen($newPassword) < 8) { + echo json_encode(['error' => 'New password must be at least 8 characters']); + exit; + } + + $username = $auth->getCurrentUser(); + if ($auth->changePassword($username, $currentPassword, $newPassword)) { + echo json_encode(['success' => true, 'message' => 'Password changed successfully']); + } else { + echo json_encode(['error' => 'Current password is incorrect']); + } + break; + + default: + echo json_encode(['error' => 'Unknown action']); + } + +} catch (Exception $e) { + http_response_code(500); + echo json_encode(['error' => $e->getMessage()]); +} diff --git a/classes/Auth.php b/classes/Auth.php new file mode 100644 index 0000000..64a4462 --- /dev/null +++ b/classes/Auth.php @@ -0,0 +1,258 @@ +configFile = __DIR__ . '/../auth_config.php'; + } else { + $this->configFile = $configFile; + } + + // Use Argon2ID if available, fallback to bcrypt + if (defined('PASSWORD_ARGON2ID')) { + $this->passwordAlgo = PASSWORD_ARGON2ID; + } else { + $this->passwordAlgo = PASSWORD_BCRYPT; + } + + $this->loadConfig(); + } + + private function loadConfig() + { + if (file_exists($this->configFile)) { + $this->config = require $this->configFile; + } else { + $this->config = array( + 'users' => array(), + 'failed_attempts' => array(), + ); + } + } + + private function saveConfig() + { + $content = "config, true) . ";\n"; + file_put_contents($this->configFile, $content); + @chmod($this->configFile, 0600); + } + + public function createUser($username, $password) + { + if (isset($this->config['users'][$username])) { + return false; + } + + $this->config['users'][$username] = array( + 'password_hash' => $this->hashPassword($password), + 'created_at' => time(), + ); + + $this->saveConfig(); + return true; + } + + public function changePassword($username, $oldPassword, $newPassword) + { + if (!$this->verifyPassword($username, $oldPassword)) { + return false; + } + + $this->config['users'][$username]['password_hash'] = $this->hashPassword($newPassword); + $this->saveConfig(); + return true; + } + + private function hashPassword($password) + { + if ($this->passwordAlgo === PASSWORD_ARGON2ID) { + return password_hash($password, PASSWORD_ARGON2ID, array( + 'memory_cost' => 65536, + 'time_cost' => 4, + 'threads' => 1, + )); + } + return password_hash($password, PASSWORD_BCRYPT, array('cost' => 12)); + } + + private function verifyPassword($username, $password) + { + if (!isset($this->config['users'][$username])) { + $this->hashPassword($password); + return false; + } + return password_verify($password, $this->config['users'][$username]['password_hash']); + } + + private function isLockedOut($ip) + { + if (!isset($this->config['failed_attempts'][$ip])) { + return false; + } + + $attempts = $this->config['failed_attempts'][$ip]; + $lockoutTime = $this->lockoutTime; + + $filtered = array(); + foreach ($attempts as $time) { + if ($time > time() - $lockoutTime) { + $filtered[] = $time; + } + } + $this->config['failed_attempts'][$ip] = $filtered; + + return count($filtered) >= $this->maxAttempts; + } + + private function recordFailedAttempt($ip) + { + if (!isset($this->config['failed_attempts'][$ip])) { + $this->config['failed_attempts'][$ip] = array(); + } + $this->config['failed_attempts'][$ip][] = time(); + $this->saveConfig(); + } + + private function clearFailedAttempts($ip) + { + unset($this->config['failed_attempts'][$ip]); + $this->saveConfig(); + } + + public function login($username, $password, $ip) + { + if ($this->isLockedOut($ip)) { + return array( + 'success' => false, + 'message' => 'Too many failed attempts. Please try again later.', + 'locked' => true, + ); + } + + if ($this->verifyPassword($username, $password)) { + $this->clearFailedAttempts($ip); + $token = $this->generateSessionToken(); + + return array( + 'success' => true, + 'message' => 'Login successful', + 'token' => $token, + 'username' => $username, + ); + } + + $this->recordFailedAttempt($ip); + + $attempts = isset($this->config['failed_attempts'][$ip]) ? $this->config['failed_attempts'][$ip] : array(); + $remaining = $this->maxAttempts - count($attempts); + + return array( + 'success' => false, + 'message' => "Invalid username or password. {$remaining} attempts remaining.", + 'locked' => false, + ); + } + + private function generateSessionToken() + { + if (function_exists('random_bytes')) { + return bin2hex(random_bytes(32)); + } + return bin2hex(openssl_random_pseudo_bytes(32)); + } + + public function startSession($username, $token) + { + if (session_status() === PHP_SESSION_NONE) { + session_start(); + } + + session_regenerate_id(true); + + $_SESSION['authenticated'] = true; + $_SESSION['username'] = $username; + $_SESSION['token'] = $token; + $_SESSION['login_time'] = time(); + $_SESSION['last_activity'] = time(); + } + + public function isAuthenticated($timeout = 3600) + { + if (session_status() === PHP_SESSION_NONE) { + session_start(); + } + + if (empty($_SESSION['authenticated'])) { + return false; + } + + $lastActivity = isset($_SESSION['last_activity']) ? $_SESSION['last_activity'] : 0; + if (time() - $lastActivity > $timeout) { + $this->logout(); + return false; + } + + $_SESSION['last_activity'] = time(); + return true; + } + + public function logout() + { + if (session_status() === PHP_SESSION_NONE) { + session_start(); + } + + $_SESSION = array(); + + if (isset($_COOKIE[session_name()])) { + setcookie(session_name(), '', time() - 3600, '/'); + } + + session_destroy(); + } + + public function getCurrentUser() + { + if (!$this->isAuthenticated()) { + return null; + } + return isset($_SESSION['username']) ? $_SESSION['username'] : null; + } + + public function hasUsers() + { + return !empty($this->config['users']); + } + + public static function getClientIP() + { + $headers = array('HTTP_CF_CONNECTING_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_REAL_IP', 'REMOTE_ADDR'); + + foreach ($headers as $header) { + if (!empty($_SERVER[$header])) { + $ip = $_SERVER[$header]; + if (strpos($ip, ',') !== false) { + $parts = explode(',', $ip); + $ip = trim($parts[0]); + } + if (filter_var($ip, FILTER_VALIDATE_IP)) { + return $ip; + } + } + } + + return '0.0.0.0'; + } +} diff --git a/classes/FlickrAPI.php b/classes/FlickrAPI.php new file mode 100644 index 0000000..69f472b --- /dev/null +++ b/classes/FlickrAPI.php @@ -0,0 +1,395 @@ +apiKey = $apiKey; + $this->apiSecret = $apiSecret; + $this->userId = $userId; + } + + /** + * Set OAuth handler for authenticated requests + */ + public function setOAuth($oauth) + { + $this->oauth = $oauth; + } + + /** + * Check if OAuth is available + */ + public function hasOAuth() + { + return $this->oauth !== null && $this->oauth->isAuthorized(); + } + + /** + * Set user ID + */ + public function setUserId($userId) + { + $this->userId = $userId; + } + + /** + * Make API request (with OAuth if available) + * + * @param string $method Flickr API method + * @param array $params Additional parameters + * @param bool $useOAuth Force OAuth for this request + * @return array Response data + */ + private function request($method, $params = [], $useOAuth = false) + { + $params = array_merge([ + 'method' => $method, + 'api_key' => $this->apiKey, + 'format' => 'json', + 'nojsoncallback' => 1, + ], $params); + + // Use OAuth if available and requested + if (($useOAuth || $this->hasOAuth()) && $this->oauth !== null) { + return $this->requestWithOAuth($method, $params); + } + + $url = $this->baseUrl . '?' . http_build_query($params); + + $context = stream_context_create([ + 'http' => [ + 'timeout' => 30, + 'user_agent' => 'VH_Posting_System/1.0', + ], + ]); + + $response = @file_get_contents($url, false, $context); + + if ($response === false) { + throw new RuntimeException('Failed to connect to Flickr API'); + } + + $data = json_decode($response, true); + + if ($data === null) { + throw new RuntimeException('Invalid JSON response from Flickr API'); + } + + if (isset($data['stat']) && $data['stat'] === 'fail') { + throw new RuntimeException('Flickr API error: ' . (isset($data['message']) ? $data['message'] : 'Unknown error')); + } + + return $data; + } + + /** + * Make OAuth-signed API request + */ + private function requestWithOAuth($method, $params) + { + $params['method'] = $method; + $params['format'] = 'json'; + $params['nojsoncallback'] = 1; + + $oauthParams = $this->oauth->signRequest('GET', $this->baseUrl, $params); + $allParams = array_merge($params, $oauthParams); + + $url = $this->baseUrl . '?' . http_build_query($allParams); + + $ch = curl_init(); + curl_setopt_array($ch, [ + CURLOPT_URL => $url, + CURLOPT_RETURNTRANSFER => true, + CURLOPT_TIMEOUT => 30, + CURLOPT_SSL_VERIFYPEER => true, + ]); + + $response = curl_exec($ch); + $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); + curl_close($ch); + + if ($response === false || $httpCode !== 200) { + throw new RuntimeException('Failed to connect to Flickr API (OAuth)'); + } + + $data = json_decode($response, true); + + if ($data === null) { + throw new RuntimeException('Invalid JSON response from Flickr API'); + } + + if (isset($data['stat']) && $data['stat'] === 'fail') { + throw new RuntimeException('Flickr API error: ' . (isset($data['message']) ? $data['message'] : 'Unknown error')); + } + + return $data; + } + + /** + * Get user's photostream + * + * @param int $page Page number + * @param int $perPage Photos per page (max 500) + * @return array Photos data + */ + public function getPhotos($page = 1, $perPage = 50) + { + $response = $this->request('flickr.people.getPhotos', [ + 'user_id' => $this->userId ? $this->userId : 'me', + 'page' => $page, + 'per_page' => $perPage, + 'extras' => 'url_sq,url_t,url_s,url_m,url_z,url_l,url_k,url_o,description,date_upload,date_taken,owner_name,original_format', + ]); + + return $this->normalizePhotosResponse(isset($response['photos']) ? $response['photos'] : []); + } + + /** + * Get user's photosets (albums) + * + * @param int $page Page number + * @param int $perPage Albums per page + * @return array Photosets data with pagination info + */ + public function getPhotosets($page = 1, $perPage = 50) + { + $response = $this->request('flickr.photosets.getList', [ + 'user_id' => $this->userId, + 'page' => $page, + 'per_page' => $perPage, + 'primary_photo_extras' => 'url_sq,url_t,url_s,url_m', + ]); + + $photosets = isset($response['photosets']) ? $response['photosets'] : []; + + return [ + 'albums' => isset($photosets['photoset']) ? $photosets['photoset'] : [], + 'page' => (int)($photosets['page'] ?? $page), + 'pages' => (int)($photosets['pages'] ?? 1), + 'perpage' => (int)($photosets['perpage'] ?? $perPage), + 'total' => (int)($photosets['total'] ?? 0), + ]; + } + + /** + * Get photos from a specific photoset (album) + * + * @param string $photosetId Photoset ID + * @param int $page Page number + * @param int $perPage Photos per page + * @return array Photos data + */ + public function getPhotosetPhotos($photosetId, $page = 1, $perPage = 50) + { + $response = $this->request('flickr.photosets.getPhotos', [ + 'photoset_id' => $photosetId, + 'user_id' => $this->userId, + 'page' => $page, + 'per_page' => $perPage, + 'extras' => 'url_sq,url_t,url_s,url_m,url_z,url_l,url_k,url_o,description,date_upload,date_taken,original_format,media,path_alias,owner_name', + ]); + + // Get owner info from photoset response + $ownername = isset($response['photoset']['ownername']) ? $response['photoset']['ownername'] : ''; + $owner = isset($response['photoset']['owner']) ? $response['photoset']['owner'] : $this->userId; + + return $this->normalizePhotosResponse(isset($response['photoset']) ? $response['photoset'] : [], $ownername, $owner); + } + + /** + * Get info about a specific photo + * + * @param string $photoId Photo ID + * @return array Photo info + */ + public function getPhotoInfo($photoId) + { + $response = $this->request('flickr.photos.getInfo', [ + 'photo_id' => $photoId, + ]); + + return isset($response['photo']) ? $response['photo'] : []; + } + + /** + * Get available sizes for a photo (uses OAuth if available) + * + * @param string $photoId Photo ID + * @return array Available sizes + */ + public function getPhotoSizes($photoId) + { + // getSizes requires OAuth to return Original for private/restricted photos + $response = $this->request('flickr.photos.getSizes', [ + 'photo_id' => $photoId, + ], true); // Force OAuth if available + + $sizes = []; + $sizeList = isset($response['sizes']['size']) ? $response['sizes']['size'] : []; + foreach ($sizeList as $size) { + $sizes[$size['label']] = [ + 'url' => $size['source'], + 'width' => (int)$size['width'], + 'height' => (int)$size['height'], + ]; + } + + return $sizes; + } + + /** + * Get original URL for a photo (requires OAuth) + * + * @param string $photoId Photo ID + * @return string|null Original URL or null if not available + */ + public function getOriginalUrl($photoId) + { + try { + $sizes = $this->getPhotoSizes($photoId); + + // Try Original first, then fall back to largest available + if (isset($sizes['Original'])) { + return $sizes['Original']['url']; + } + if (isset($sizes['Large 2048'])) { + return $sizes['Large 2048']['url']; + } + if (isset($sizes['Large 1600'])) { + return $sizes['Large 1600']['url']; + } + if (isset($sizes['Large'])) { + return $sizes['Large']['url']; + } + + return null; + } catch (Exception $e) { + return null; + } + } + + /** + * Search user's photos + * + * @param string $query Search query + * @param int $page Page number + * @param int $perPage Photos per page + * @return array Photos data + */ + public function searchPhotos($query, $page = 1, $perPage = 50) + { + $response = $this->request('flickr.photos.search', [ + 'user_id' => $this->userId ? $this->userId : 'me', + 'text' => $query, + 'page' => $page, + 'per_page' => $perPage, + 'extras' => 'url_sq,url_t,url_s,url_m,url_z,url_l,url_k,url_o,description,date_upload,date_taken,original_format', + ]); + + return $this->normalizePhotosResponse(isset($response['photos']) ? $response['photos'] : []); + } + + /** + * Find user ID by username + * + * @param string $username Flickr username + * @return string User ID + */ + public function findUserByUsername($username) + { + $response = $this->request('flickr.people.findByUsername', [ + 'username' => $username, + ]); + + return isset($response['user']['nsid']) ? $response['user']['nsid'] : ''; + } + + /** + * Normalize photos response to consistent format + */ + private function normalizePhotosResponse($response, $defaultOwnerName = '', $defaultOwner = '') + { + $photos = []; + $photoList = isset($response['photo']) ? $response['photo'] : []; + + foreach ($photoList as $photo) { + $farm = isset($photo['farm']) ? $photo['farm'] : ''; + $server = $photo['server']; + $id = $photo['id']; + $originalSecret = isset($photo['originalsecret']) ? $photo['originalsecret'] : $photo['secret']; + $originalFormat = isset($photo['originalformat']) ? $photo['originalformat'] : 'jpg'; + + // Get original URL - ONLY use if API returns it + // If url_o is not returned, originals are blocked by Flickr privacy settings + $originalUrl = isset($photo['url_o']) ? $photo['url_o'] : null; + + // Get large 2048 URL (url_k) - from API or construct it + // This is the best quality available when originals are blocked + $large2048Url = isset($photo['url_k']) ? $photo['url_k'] : null; + + // Construct large2048 URL if not provided (usually works) + if (!$large2048Url && $server) { + $large2048Url = "https://live.staticflickr.com/{$server}/{$id}_{$photo['secret']}_k.jpg"; + } + + // Determine media type (photo or video) + $mediaType = isset($photo['media']) ? $photo['media'] : 'photo'; + $isVideo = ($mediaType === 'video'); + + // Build page URL - use path_alias, ownername, or owner NSID + $pathAlias = isset($photo['pathalias']) && $photo['pathalias'] ? $photo['pathalias'] : ''; + $ownerName = isset($photo['ownername']) ? $photo['ownername'] : $defaultOwnerName; + $owner = isset($photo['owner']) ? $photo['owner'] : ($defaultOwner ? $defaultOwner : $this->userId); + + // Prefer path_alias, then ownername, then owner NSID (URL encoded) + $userPath = $pathAlias ? $pathAlias : ($ownerName ? $ownerName : rawurlencode($owner)); + $pageUrl = "https://www.flickr.com/photos/{$userPath}/{$id}/"; + + $photos[] = [ + 'id' => $id, + 'secret' => $photo['secret'], + 'server' => $server, + 'farm' => $farm, + 'title' => isset($photo['title']) ? $photo['title'] : 'Untitled', + 'description' => isset($photo['description']['_content']) ? $photo['description']['_content'] : '', + 'date_upload' => isset($photo['dateupload']) ? $photo['dateupload'] : '', + 'date_taken' => isset($photo['datetaken']) ? $photo['datetaken'] : '', + 'original_format' => $originalFormat, + 'original_secret' => $originalSecret, + 'media' => $mediaType, + 'is_video' => $isVideo, + 'urls' => [ + 'square' => isset($photo['url_sq']) ? $photo['url_sq'] : null, + 'thumbnail' => isset($photo['url_t']) ? $photo['url_t'] : null, + 'small' => isset($photo['url_s']) ? $photo['url_s'] : null, + 'medium' => isset($photo['url_m']) ? $photo['url_m'] : null, + 'medium640' => isset($photo['url_z']) ? $photo['url_z'] : null, + 'large' => isset($photo['url_l']) ? $photo['url_l'] : null, + 'large2048' => $large2048Url, + 'original' => $originalUrl, + ], + 'page_url' => $pageUrl, + ]; + } + + return [ + 'photos' => $photos, + 'page' => (int)(isset($response['page']) ? $response['page'] : 1), + 'pages' => (int)(isset($response['pages']) ? $response['pages'] : 1), + 'perpage' => (int)(isset($response['perpage']) ? $response['perpage'] : count($photos)), + 'total' => (int)(isset($response['total']) ? $response['total'] : count($photos)), + ]; + } +} diff --git a/classes/FlickrOAuth.php b/classes/FlickrOAuth.php new file mode 100644 index 0000000..0346eec --- /dev/null +++ b/classes/FlickrOAuth.php @@ -0,0 +1,272 @@ +consumerKey = $consumerKey; + $this->consumerSecret = $consumerSecret; + $this->tokenFile = __DIR__ . '/../data/oauth_token.json'; + + // Load saved tokens if exist + $this->loadTokens(); + } + + /** + * Check if we have valid access tokens + */ + public function isAuthorized() + { + return !empty($this->oauthToken) && !empty($this->oauthTokenSecret); + } + + /** + * Get stored OAuth token + */ + public function getOAuthToken() + { + return $this->oauthToken; + } + + /** + * Get stored OAuth token secret + */ + public function getOAuthTokenSecret() + { + return $this->oauthTokenSecret; + } + + /** + * Step 1: Get request token and return authorization URL + */ + public function getAuthorizationUrl($callbackUrl) + { + $params = [ + 'oauth_callback' => $callbackUrl, + 'oauth_consumer_key' => $this->consumerKey, + 'oauth_nonce' => $this->generateNonce(), + 'oauth_signature_method' => 'HMAC-SHA1', + 'oauth_timestamp' => time(), + 'oauth_version' => '1.0', + ]; + + $params['oauth_signature'] = $this->generateSignature('GET', $this->requestTokenUrl, $params); + + $url = $this->requestTokenUrl . '?' . http_build_query($params); + + $response = $this->httpRequest($url); + + if (!$response) { + throw new Exception('Failed to get request token'); + } + + parse_str($response, $data); + + if (!isset($data['oauth_token']) || !isset($data['oauth_token_secret'])) { + throw new Exception('Invalid request token response: ' . $response); + } + + // Store request token temporarily (needed for step 2) + $_SESSION['flickr_request_token'] = $data['oauth_token']; + $_SESSION['flickr_request_token_secret'] = $data['oauth_token_secret']; + + // Return URL for user to authorize + return $this->authorizeUrl . '?oauth_token=' . $data['oauth_token'] . '&perms=read'; + } + + /** + * Step 2: Exchange verifier for access token + */ + public function handleCallback($oauthToken, $oauthVerifier) + { + if (!isset($_SESSION['flickr_request_token_secret'])) { + throw new Exception('Request token secret not found in session'); + } + + $requestTokenSecret = $_SESSION['flickr_request_token_secret']; + + $params = [ + 'oauth_consumer_key' => $this->consumerKey, + 'oauth_token' => $oauthToken, + 'oauth_verifier' => $oauthVerifier, + 'oauth_nonce' => $this->generateNonce(), + 'oauth_signature_method' => 'HMAC-SHA1', + 'oauth_timestamp' => time(), + 'oauth_version' => '1.0', + ]; + + $params['oauth_signature'] = $this->generateSignature( + 'GET', + $this->accessTokenUrl, + $params, + $requestTokenSecret + ); + + $url = $this->accessTokenUrl . '?' . http_build_query($params); + + $response = $this->httpRequest($url); + + if (!$response) { + throw new Exception('Failed to get access token'); + } + + parse_str($response, $data); + + if (!isset($data['oauth_token']) || !isset($data['oauth_token_secret'])) { + throw new Exception('Invalid access token response: ' . $response); + } + + // Save access tokens + $this->oauthToken = $data['oauth_token']; + $this->oauthTokenSecret = $data['oauth_token_secret']; + $this->saveTokens($data); + + // Clean up session + unset($_SESSION['flickr_request_token']); + unset($_SESSION['flickr_request_token_secret']); + + return [ + 'oauth_token' => $this->oauthToken, + 'user_nsid' => $data['user_nsid'] ?? null, + 'username' => $data['username'] ?? null, + 'fullname' => $data['fullname'] ?? null, + ]; + } + + /** + * Sign an API request with OAuth + */ + public function signRequest($method, $url, $params = []) + { + $oauthParams = [ + 'oauth_consumer_key' => $this->consumerKey, + 'oauth_token' => $this->oauthToken, + 'oauth_nonce' => $this->generateNonce(), + 'oauth_signature_method' => 'HMAC-SHA1', + 'oauth_timestamp' => time(), + 'oauth_version' => '1.0', + ]; + + $allParams = array_merge($params, $oauthParams); + $oauthParams['oauth_signature'] = $this->generateSignature( + $method, + $url, + $allParams, + $this->oauthTokenSecret + ); + + return $oauthParams; + } + + /** + * Generate OAuth signature + */ + private function generateSignature($method, $url, $params, $tokenSecret = '') + { + ksort($params); + + $paramString = http_build_query($params, '', '&', PHP_QUERY_RFC3986); + + $baseString = strtoupper($method) . '&' + . rawurlencode($url) . '&' + . rawurlencode($paramString); + + $signingKey = rawurlencode($this->consumerSecret) . '&' . rawurlencode($tokenSecret); + + return base64_encode(hash_hmac('sha1', $baseString, $signingKey, true)); + } + + /** + * Generate random nonce + */ + private function generateNonce() + { + return md5(uniqid(mt_rand(), true)); + } + + /** + * Make HTTP request + */ + private function httpRequest($url) + { + $ch = curl_init(); + curl_setopt_array($ch, [ + CURLOPT_URL => $url, + CURLOPT_RETURNTRANSFER => true, + CURLOPT_FOLLOWLOCATION => true, + CURLOPT_TIMEOUT => 30, + CURLOPT_SSL_VERIFYPEER => true, + ]); + + $response = curl_exec($ch); + $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); + curl_close($ch); + + if ($httpCode !== 200) { + return false; + } + + return $response; + } + + /** + * Save tokens to file + */ + private function saveTokens($data) + { + $dir = dirname($this->tokenFile); + if (!is_dir($dir)) { + mkdir($dir, 0700, true); + } + + $tokenData = [ + 'oauth_token' => $data['oauth_token'], + 'oauth_token_secret' => $data['oauth_token_secret'], + 'user_nsid' => $data['user_nsid'] ?? null, + 'username' => $data['username'] ?? null, + 'created_at' => date('Y-m-d H:i:s'), + ]; + + file_put_contents($this->tokenFile, json_encode($tokenData, JSON_PRETTY_PRINT)); + chmod($this->tokenFile, 0600); + } + + /** + * Load tokens from file + */ + private function loadTokens() + { + if (file_exists($this->tokenFile)) { + $data = json_decode(file_get_contents($this->tokenFile), true); + if ($data) { + $this->oauthToken = $data['oauth_token'] ?? null; + $this->oauthTokenSecret = $data['oauth_token_secret'] ?? null; + } + } + } + + /** + * Clear saved tokens (logout) + */ + public function clearTokens() + { + $this->oauthToken = null; + $this->oauthTokenSecret = null; + if (file_exists($this->tokenFile)) { + unlink($this->tokenFile); + } + } +} diff --git a/classes/FlickrParser.php b/classes/FlickrParser.php new file mode 100644 index 0000000..c2aeb80 --- /dev/null +++ b/classes/FlickrParser.php @@ -0,0 +1,153 @@ + '_s', // 75x75 + 'LargeSquare' => '_q', // 150x150 + 'Thumbnail' => '_t', // 100 on longest side + 'Small' => '_m', // 240 on longest side + 'Small320' => '_n', // 320 on longest side + 'Medium' => '', // 500 on longest side + 'Medium640' => '_z', // 640 on longest side + 'Medium800' => '_c', // 800 on longest side + 'Large' => '_b', // 1024 on longest side + 'Large1600' => '_h', // 1600 on longest side + 'Large2048' => '_k', // 2048 on longest side + 'Original' => '_o', // original image + ]; + + /** + * Parse a Flickr URL and extract photo information + * + * @param string $url Flickr URL + * @return array|null Photo info or null if not a valid Flickr URL + */ + public function parse($url) + { + $url = trim($url); + + // Direct image URL + if (preg_match('/staticflickr\.com\/\d+\/(\d+)_([a-f0-9]+)(_[a-z])?\.(\w+)/i', $url, $matches)) { + return [ + 'photo_id' => $matches[1], + 'secret' => $matches[2], + 'size_suffix' => isset($matches[3]) ? $matches[3] : '', + 'format' => $matches[4], + 'type' => 'direct', + 'original_url' => $url, + ]; + } + + // Photo page URL + if (preg_match('/flickr\.com\/photos\/[^\/]+\/(\d+)/i', $url, $matches)) { + return [ + 'photo_id' => $matches[1], + 'type' => 'page', + 'original_url' => $url, + ]; + } + + // Short URL (flic.kr) + if (preg_match('/flic\.kr\/p\/([a-zA-Z0-9]+)/i', $url, $matches)) { + $photoId = $this->decodeBase58($matches[1]); + return [ + 'photo_id' => $photoId, + 'type' => 'short', + 'original_url' => $url, + ]; + } + + return null; + } + + /** + * Parse multiple URLs (one per line or comma-separated) + * + * @param string $input Input text with URLs + * @return array Array of parsed photo info + */ + public function parseMultiple($input) + { + $results = []; + + // Split by newlines and commas + $lines = preg_split('/[\r\n,]+/', $input); + + foreach ($lines as $line) { + $url = trim($line); + if (empty($url)) continue; + + $parsed = $this->parse($url); + if ($parsed) { + $results[] = $parsed; + } + } + + return $results; + } + + /** + * Build a direct image URL from photo info + * + * @param array $photoInfo Photo information + * @param string $size Size name from SIZES constant + * @return string Direct image URL + */ + public function buildImageUrl($photoInfo, $size = 'Large') + { + $suffix = isset(self::SIZES[$size]) ? self::SIZES[$size] : self::SIZES['Large']; + + $server = isset($photoInfo['server']) ? $photoInfo['server'] : '65535'; + $photoId = $photoInfo['photo_id']; + $secret = isset($photoInfo['secret']) ? $photoInfo['secret'] : (isset($photoInfo['originalsecret']) ? $photoInfo['originalsecret'] : ''); + $format = isset($photoInfo['format']) ? $photoInfo['format'] : (isset($photoInfo['originalformat']) ? $photoInfo['originalformat'] : 'jpg'); + + // For original size, use originalsecret if available + if ($size === 'Original' && isset($photoInfo['originalsecret'])) { + $secret = $photoInfo['originalsecret']; + $format = isset($photoInfo['originalformat']) ? $photoInfo['originalformat'] : 'jpg'; + } + + return "https://live.staticflickr.com/{$server}/{$photoId}_{$secret}{$suffix}.{$format}"; + } + + /** + * Decode Flickr's base58 short URL to photo ID + * + * @param string $encoded Base58 encoded string + * @return string Photo ID + */ + private function decodeBase58($encoded) + { + $alphabet = '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'; + $base = strlen($alphabet); + $decoded = '0'; + + for ($i = 0; $i < strlen($encoded); $i++) { + $pos = strpos($alphabet, $encoded[$i]); + $decoded = bcmul($decoded, (string)$base); + $decoded = bcadd($decoded, (string)$pos); + } + + return $decoded; + } + + /** + * Get available sizes + * + * @return array Size names + */ + public function getAvailableSizes() + { + return array_keys(self::SIZES); + } +} diff --git a/classes/FormatGenerator.php b/classes/FormatGenerator.php new file mode 100644 index 0000000..d331a33 --- /dev/null +++ b/classes/FormatGenerator.php @@ -0,0 +1,200 @@ + [ + 'name' => 'BBCode', + 'description' => 'Standard forum BBCode', + 'template' => '[img]{url}[/img]', + 'separator' => "\n", + ], + 'bbcode_linked' => [ + 'name' => 'BBCode (clickable)', + 'description' => 'BBCode with link to original', + 'template' => '[url={original}][img]{url}[/img][/url]', + 'separator' => "\n", + ], + 'html' => [ + 'name' => 'HTML', + 'description' => 'HTML img tag', + 'template' => '{title}', + 'separator' => "\n", + ], + 'html_linked' => [ + 'name' => 'HTML (clickable)', + 'description' => 'HTML img with link to original', + 'template' => '{title}', + 'separator' => "\n", + ], + 'html_figure' => [ + 'name' => 'HTML Figure', + 'description' => 'HTML5 figure with caption', + 'template' => "
\n \"{title}\"\n
{title}
\n
", + 'separator' => "\n\n", + ], + 'markdown' => [ + 'name' => 'Markdown', + 'description' => 'Markdown image syntax', + 'template' => '![{title}]({url})', + 'separator' => "\n", + ], + 'markdown_linked' => [ + 'name' => 'Markdown (clickable)', + 'description' => 'Markdown with link to original', + 'template' => '[![{title}]({url})]({original})', + 'separator' => "\n", + ], + 'url_only' => [ + 'name' => 'URL only', + 'description' => 'Just the image URL', + 'template' => '{url}', + 'separator' => "\n", + ], + 'url_list' => [ + 'name' => 'URL list (comma)', + 'description' => 'Comma-separated URLs', + 'template' => '{url}', + 'separator' => ', ', + ], + + // ============ FORUM PRESETS ============ + + 'bjdclub' => [ + 'name' => 'BJDClub.ru', + 'description' => 'Оптимизировано для BJDClub (phpBB)', + 'template' => '[url={original}][img]{url}[/img][/url]', + 'separator' => "\n\n", + 'category' => 'forum', + ], + 'babiki' => [ + 'name' => 'Babiki.ru', + 'description' => 'Оптимизировано для Бэбиков', + 'template' => '{title}', + 'separator' => "\n\n", + 'category' => 'forum', + ], + 'babiki_simple' => [ + 'name' => 'Babiki.ru (простой)', + 'description' => 'Только картинки для Бэбиков', + 'template' => '{title}', + 'separator' => "\n", + 'category' => 'forum', + ], + 'doll_forum' => [ + 'name' => 'Кукольный форум', + 'description' => 'Универсальный BBCode для кукольных форумов', + 'template' => '[url={original}][img]{url}[/img][/url]', + 'separator' => "\n", + 'category' => 'forum', + ], + ]; + + /** + * Add a custom format + * + * @param string $key Format key + * @param string $name Display name + * @param string $template Template with placeholders + * @param string $separator Separator between multiple images + * @param string $description Format description + */ + public function addFormat($key, $name, $template, $separator = "\n", $description = '') + { + $this->formats[$key] = [ + 'name' => $name, + 'description' => $description, + 'template' => $template, + 'separator' => $separator, + ]; + } + + /** + * Get all available formats + * + * @return array Format definitions + */ + public function getFormats() + { + return $this->formats; + } + + /** + * Generate formatted output for a single image + * + * @param string $formatKey Format key + * @param array $imageData Image data with url, original, title + * @return string Formatted output + */ + public function generate($formatKey, $imageData) + { + if (!isset($this->formats[$formatKey])) { + throw new InvalidArgumentException("Unknown format: {$formatKey}"); + } + + $template = $this->formats[$formatKey]['template']; + + $replacements = [ + '{url}' => isset($imageData['url']) ? $imageData['url'] : '', + '{original}' => isset($imageData['original']) ? $imageData['original'] : (isset($imageData['url']) ? $imageData['url'] : ''), + '{title}' => htmlspecialchars(isset($imageData['title']) ? $imageData['title'] : 'Image', ENT_QUOTES), + '{description}' => htmlspecialchars(isset($imageData['description']) ? $imageData['description'] : '', ENT_QUOTES), + '{photo_id}' => isset($imageData['photo_id']) ? $imageData['photo_id'] : '', + '{width}' => isset($imageData['width']) ? $imageData['width'] : '', + '{height}' => isset($imageData['height']) ? $imageData['height'] : '', + ]; + + return str_replace(array_keys($replacements), array_values($replacements), $template); + } + + /** + * Generate formatted output for multiple images + * + * @param string $formatKey Format key + * @param array $images Array of image data + * @return string Formatted output + */ + public function generateMultiple($formatKey, $images) + { + if (!isset($this->formats[$formatKey])) { + throw new InvalidArgumentException("Unknown format: {$formatKey}"); + } + + $separator = $this->formats[$formatKey]['separator']; + $outputs = []; + + foreach ($images as $imageData) { + $outputs[] = $this->generate($formatKey, $imageData); + } + + return implode($separator, $outputs); + } + + /** + * Generate output in all formats at once + * + * @param array $images Array of image data + * @return array Keyed by format key + */ + public function generateAll($images) + { + $result = []; + + foreach (array_keys($this->formats) as $formatKey) { + $result[$formatKey] = [ + 'name' => $this->formats[$formatKey]['name'], + 'description' => $this->formats[$formatKey]['description'], + 'output' => $this->generateMultiple($formatKey, $images), + ]; + } + + return $result; + } +} diff --git a/classes/TelegramBot.php b/classes/TelegramBot.php new file mode 100644 index 0000000..41f0ea6 --- /dev/null +++ b/classes/TelegramBot.php @@ -0,0 +1,283 @@ +botToken = $botToken; + } + + /** + * Set default channels for posting + * + * @param array $channels Array of channel usernames or IDs + */ + public function setDefaultChannels($channels) + { + $this->defaultChannels = $channels; + } + + /** + * Make API request to Telegram + * + * @param string $method API method + * @param array $params Parameters + * @return array Response + */ + private function request($method, $params = []) + { + $url = $this->baseUrl . $this->botToken . '/' . $method; + + $ch = curl_init(); + curl_setopt_array($ch, [ + CURLOPT_URL => $url, + CURLOPT_POST => true, + CURLOPT_POSTFIELDS => $params, + CURLOPT_RETURNTRANSFER => true, + CURLOPT_TIMEOUT => 60, + CURLOPT_SSL_VERIFYPEER => true, + ]); + + $response = curl_exec($ch); + $error = curl_error($ch); + curl_close($ch); + + if ($error) { + throw new RuntimeException("Telegram API error: {$error}"); + } + + $data = json_decode($response, true); + + if (!$data['ok']) { + throw new RuntimeException("Telegram API error: " . (isset($data['description']) ? $data['description'] : 'Unknown error')); + } + + return isset($data['result']) ? $data['result'] : []; + } + + /** + * Send a text message + * + * @param string $chatId Chat/Channel ID or username + * @param string $text Message text + * @param string $parseMode Parse mode (HTML, Markdown, MarkdownV2) + * @param bool $disablePreview Disable link preview + * @return array Message info + */ + public function sendMessage($chatId, $text, $parseMode = 'HTML', $disablePreview = false) + { + return $this->request('sendMessage', [ + 'chat_id' => $chatId, + 'text' => $text, + 'parse_mode' => $parseMode, + 'disable_web_page_preview' => $disablePreview, + ]); + } + + /** + * Send a single photo + * + * @param string $chatId Chat/Channel ID + * @param string $photo Photo URL or file_id + * @param string $caption Photo caption + * @param string $parseMode Parse mode for caption + * @return array Message info + */ + public function sendPhoto($chatId, $photo, $caption = '', $parseMode = 'HTML') + { + $params = [ + 'chat_id' => $chatId, + 'photo' => $photo, + ]; + + if ($caption) { + $params['caption'] = $caption; + $params['parse_mode'] = $parseMode; + } + + return $this->request('sendPhoto', $params); + } + + /** + * Send multiple photos as media group (album) + * + * @param string $chatId Chat/Channel ID + * @param array $photos Array of photo URLs + * @param string $caption Caption for first photo + * @param string $parseMode Parse mode + * @return array Messages info + */ + public function sendMediaGroup($chatId, $photos, $caption = '', $parseMode = 'HTML') + { + $media = []; + + foreach ($photos as $index => $photo) { + $item = [ + 'type' => 'photo', + 'media' => $photo, + ]; + + // Caption only on first photo + if ($index === 0 && $caption) { + $item['caption'] = $caption; + $item['parse_mode'] = $parseMode; + } + + $media[] = $item; + } + + return $this->request('sendMediaGroup', [ + 'chat_id' => $chatId, + 'media' => json_encode($media), + ]); + } + + /** + * Post photos with text to a channel + * Smart method that chooses best approach based on content + * + * @param string $chatId Chat/Channel ID + * @param array $photos Array of photo URLs + * @param string $text Post text + * @param string $parseMode Parse mode + * @return array Result info + */ + public function post($chatId, $photos, $text = '', $parseMode = 'HTML') + { + $photoCount = count($photos); + + // Text only + if ($photoCount === 0) { + return ['type' => 'text', 'message' => $this->sendMessage($chatId, $text, $parseMode)]; + } + + // Single photo + if ($photoCount === 1) { + return ['type' => 'photo', 'message' => $this->sendPhoto($chatId, $photos[0], $text, $parseMode)]; + } + + // Multiple photos (2-10) - use media group + if ($photoCount <= 10) { + return ['type' => 'album', 'messages' => $this->sendMediaGroup($chatId, $photos, $text, $parseMode)]; + } + + // More than 10 photos - split into multiple albums + $results = []; + $chunks = array_chunk($photos, 10); + + foreach ($chunks as $index => $chunk) { + $caption = ($index === 0) ? $text : ''; + $results[] = $this->sendMediaGroup($chatId, $chunk, $caption, $parseMode); + } + + return ['type' => 'multiple_albums', 'messages' => $results]; + } + + /** + * Post to multiple channels at once + * + * @param array $chatIds Array of Chat/Channel IDs + * @param array $photos Array of photo URLs + * @param string $text Post text + * @param string $parseMode Parse mode + * @return array Results for each channel + */ + public function postToMultiple($chatIds, $photos, $text = '', $parseMode = 'HTML') + { + $results = []; + + foreach ($chatIds as $chatId) { + try { + $results[$chatId] = [ + 'success' => true, + 'result' => $this->post($chatId, $photos, $text, $parseMode), + ]; + } catch (Exception $e) { + $results[$chatId] = [ + 'success' => false, + 'error' => $e->getMessage(), + ]; + } + } + + return $results; + } + + /** + * Get bot info + * + * @return array Bot info + */ + public function getMe() + { + return $this->request('getMe'); + } + + /** + * Get chat info + * + * @param string $chatId Chat/Channel ID + * @return array Chat info + */ + public function getChat($chatId) + { + return $this->request('getChat', ['chat_id' => $chatId]); + } + + /** + * Validate that bot has access to a channel + * + * @param string $chatId Channel ID or username + * @return array Validation result + */ + public function validateChannel($chatId) + { + try { + $chat = $this->getChat($chatId); + return [ + 'valid' => true, + 'title' => isset($chat['title']) ? $chat['title'] : (isset($chat['username']) ? $chat['username'] : $chatId), + 'type' => $chat['type'], + ]; + } catch (Exception $e) { + return [ + 'valid' => false, + 'error' => $e->getMessage(), + ]; + } + } + + /** + * Format text for Telegram HTML mode + * + * @param string $text Plain text + * @return string Escaped HTML + */ + public static function escapeHtml($text) + { + return htmlspecialchars($text, ENT_QUOTES | ENT_HTML5, 'UTF-8'); + } + + /** + * Format text for Telegram MarkdownV2 mode + * + * @param string $text Plain text + * @return string Escaped Markdown + */ + public static function escapeMarkdown($text) + { + $chars = ['_', '*', '[', ']', '(', ')', '~', '`', '>', '#', '+', '-', '=', '|', '{', '}', '.', '!']; + foreach ($chars as $char) { + $text = str_replace($char, '\\' . $char, $text); + } + return $text; + } +} diff --git a/classes/VKAPI.php b/classes/VKAPI.php new file mode 100644 index 0000000..d6959a2 --- /dev/null +++ b/classes/VKAPI.php @@ -0,0 +1,403 @@ +accessToken = $accessToken; + } + + /** + * Make API request to VK + * + * @param string $method API method + * @param array $params Parameters + * @return array Response + */ + private function request($method, $params = []) + { + $params['access_token'] = $this->accessToken; + $params['v'] = $this->apiVersion; + + $url = $this->baseUrl . $method; + + $ch = curl_init(); + curl_setopt_array($ch, [ + CURLOPT_URL => $url, + CURLOPT_POST => true, + CURLOPT_POSTFIELDS => http_build_query($params), + CURLOPT_RETURNTRANSFER => true, + CURLOPT_TIMEOUT => 60, + CURLOPT_SSL_VERIFYPEER => true, + ]); + + $response = curl_exec($ch); + $error = curl_error($ch); + curl_close($ch); + + if ($error) { + throw new RuntimeException("VK API connection error: {$error}"); + } + + $data = json_decode($response, true); + + if (isset($data['error'])) { + $errorMsg = isset($data['error']['error_msg']) ? $data['error']['error_msg'] : 'Unknown error'; + $errorCode = isset($data['error']['error_code']) ? $data['error']['error_code'] : 0; + throw new RuntimeException("VK API error [{$errorCode}]: {$errorMsg}"); + } + + return isset($data['response']) ? $data['response'] : []; + } + + /** + * Get current user info + * + * @return array User info + */ + public function getMe() + { + $result = $this->request('users.get', [ + 'fields' => 'photo_100,screen_name' + ]); + + if (!empty($result[0])) { + $this->userId = $result[0]['id']; + return $result[0]; + } + + return []; + } + + /** + * Get groups where user can post + * + * @param int $count Number of groups to return + * @return array Groups list + */ + public function getGroups($count = 100) + { + $result = $this->request('groups.get', [ + 'extended' => 1, + 'filter' => 'admin,editor,moder', + 'fields' => 'name,screen_name,photo_100,can_post', + 'count' => $count + ]); + + $groups = []; + if (isset($result['items'])) { + foreach ($result['items'] as $group) { + // Only groups where posting is allowed + if (!empty($group['can_post']) || isset($group['admin_level'])) { + $groups[] = [ + 'id' => '-' . $group['id'], // Negative for group wall + 'name' => $group['name'], + 'screen_name' => isset($group['screen_name']) ? $group['screen_name'] : '', + 'photo' => isset($group['photo_100']) ? $group['photo_100'] : '', + ]; + } + } + } + + return $groups; + } + + /** + * Upload photo to VK from URL + * + * @param int $groupId Group ID (without minus, positive number) + * @param string $photoUrl Photo URL to upload + * @return string Attachment string (photo{owner}_{id}) + */ + public function uploadPhotoFromUrl($groupId, $photoUrl) + { + $groupId = abs((int)$groupId); + + // Get upload server + try { + $uploadServer = $this->request('photos.getWallUploadServer', [ + 'group_id' => $groupId + ]); + } catch (Exception $e) { + throw new RuntimeException('Не удалось получить сервер загрузки VK: ' . $e->getMessage()); + } + + if (!isset($uploadServer['upload_url'])) { + throw new RuntimeException('VK не вернул URL для загрузки фото'); + } + + // Download photo from URL with context for HTTPS + $context = stream_context_create([ + 'http' => [ + 'timeout' => 30, + 'user_agent' => 'VH-Posting-System/1.0' + ], + 'ssl' => [ + 'verify_peer' => true, + 'verify_peer_name' => true + ] + ]); + + $photoData = @file_get_contents($photoUrl, false, $context); + if ($photoData === false) { + throw new RuntimeException('Не удалось скачать фото с Flickr: ' . $photoUrl); + } + + // Detect mime type + $finfo = new finfo(FILEINFO_MIME_TYPE); + $mimeType = $finfo->buffer($photoData) ?: 'image/jpeg'; + $extension = $mimeType === 'image/png' ? 'png' : 'jpg'; + + // Save to temp file + $tempFile = tempnam(sys_get_temp_dir(), 'vk_photo_'); + file_put_contents($tempFile, $photoData); + + // Upload photo using CURLFile + $ch = curl_init(); + curl_setopt_array($ch, [ + CURLOPT_URL => $uploadServer['upload_url'], + CURLOPT_POST => true, + CURLOPT_POSTFIELDS => [ + 'photo' => new CURLFile($tempFile, $mimeType, 'photo.' . $extension) + ], + CURLOPT_RETURNTRANSFER => true, + CURLOPT_TIMEOUT => 120, + ]); + + $uploadResponse = curl_exec($ch); + $curlError = curl_error($ch); + curl_close($ch); + unlink($tempFile); + + if ($curlError) { + throw new RuntimeException('Ошибка загрузки фото на VK: ' . $curlError); + } + + $uploadData = json_decode($uploadResponse, true); + if (!$uploadData) { + throw new RuntimeException('Неверный ответ от сервера VK при загрузке'); + } + + if (empty($uploadData['photo']) || $uploadData['photo'] === '[]') { + $errorMsg = isset($uploadData['error']) ? $uploadData['error'] : 'пустой ответ'; + throw new RuntimeException('VK не принял фото: ' . $errorMsg); + } + + // Save photo + try { + $savedPhoto = $this->request('photos.saveWallPhoto', [ + 'group_id' => $groupId, + 'photo' => $uploadData['photo'], + 'server' => $uploadData['server'], + 'hash' => $uploadData['hash'] + ]); + } catch (Exception $e) { + throw new RuntimeException('Не удалось сохранить фото в VK: ' . $e->getMessage()); + } + + if (empty($savedPhoto[0])) { + throw new RuntimeException('VK не вернул данные сохранённого фото'); + } + + $photo = $savedPhoto[0]; + return 'photo' . $photo['owner_id'] . '_' . $photo['id']; + } + + /** + * Post to wall/group + * + * @param int $ownerId User ID or Group ID (negative for groups) + * @param string $message Post text + * @param array $attachments Array of attachments + * @param bool $fromGroup Post from group name (only for groups) + * @return array Post info + */ + public function wallPost($ownerId, $message = '', $attachments = [], $fromGroup = true) + { + $params = [ + 'owner_id' => $ownerId, + 'message' => $message, + ]; + + if (!empty($attachments)) { + $params['attachments'] = implode(',', $attachments); + $params['primary_attachments_mode'] = 'grid'; + } + + // If posting to group, post from group name + if ($ownerId < 0 && $fromGroup) { + $params['from_group'] = 1; + } + + return $this->request('wall.post', $params); + } + + /** + * Post photos and text to a group + * + * @param int $groupId Group ID (will be converted to negative) + * @param array $photoUrls Array of photo URLs + * @param string $message Post text + * @return array Result + */ + public function post($groupId, $photoUrls = [], $message = '') + { + $attachments = []; + $uploadErrors = []; + $permissionError = false; + + // Make sure group ID is numeric + $numericGroupId = (int)$groupId; + if ($numericGroupId > 0) { + $numericGroupId = -$numericGroupId; + } + + // Try to upload each photo + foreach ($photoUrls as $url) { + try { + $attachments[] = $this->uploadPhotoFromUrl(abs($numericGroupId), $url); + } catch (Exception $e) { + $errorMsg = $e->getMessage(); + $uploadErrors[] = $errorMsg; + error_log("VK photo upload failed: " . $errorMsg); + + // Check if it's a permission error (error 15 = Access denied, error 27 = group auth) + if (strpos($errorMsg, 'error [15]') !== false || + strpos($errorMsg, 'error [27]') !== false || + strpos($errorMsg, 'Access denied') !== false || + strpos($errorMsg, 'group auth') !== false) { + $permissionError = true; + break; // Don't try other photos if it's a permission issue + } + } + } + + // If permission error, try to post with photo links in text + if ($permissionError && !empty($photoUrls)) { + $photoLinks = "\n\n📷 Фото:\n" . implode("\n", $photoUrls); + $messageWithPhotos = $message . $photoLinks; + + try { + $result = $this->wallPost($numericGroupId, $messageWithPhotos, []); + $result['warning'] = 'Фото добавлены как ссылки. Community-токен не поддерживает загрузку фото - нужен пользовательский токен.'; + return $result; + } catch (Exception $e) { + throw new RuntimeException('Ошибка постинга: ' . $e->getMessage() . '. Также нет прав на загрузку фото.'); + } + } + + // If all photos failed to upload for non-permission reasons, report the first error + if (!empty($photoUrls) && empty($attachments) && !empty($uploadErrors)) { + throw new RuntimeException('Ошибка загрузки фото: ' . $uploadErrors[0]); + } + + return $this->wallPost($numericGroupId, $message, $attachments); + } + + /** + * Post to multiple groups at once + * + * @param array $groupIds Array of group IDs + * @param array $photoUrls Array of photo URLs + * @param string $message Post text + * @return array Results for each group + */ + public function postToMultiple($groupIds, $photoUrls = [], $message = '') + { + $results = []; + + foreach ($groupIds as $groupId) { + try { + $results[$groupId] = [ + 'success' => true, + 'result' => $this->post($groupId, $photoUrls, $message), + ]; + } catch (Exception $e) { + $results[$groupId] = [ + 'success' => false, + 'error' => $e->getMessage(), + ]; + } + + // VK rate limit: max 3 requests per second + usleep(350000); + } + + return $results; + } + + /** + * Validate access token (supports both user and community tokens) + * + * @return array Validation result + */ + public function validateToken() + { + // First try user token validation + try { + $user = $this->getMe(); + if (!empty($user)) { + return [ + 'valid' => true, + 'type' => 'user', + 'user_id' => $user['id'], + 'user_name' => trim(($user['first_name'] ?? '') . ' ' . ($user['last_name'] ?? '')), + 'screen_name' => $user['screen_name'] ?? '', + ]; + } + } catch (Exception $e) { + // User token failed, try community token + } + + // Try community token validation using groups.getById with group_id from token + try { + // For community tokens, we can get group info using groups.getById + // The token should have access to its own group + $result = $this->request('groups.getById', [ + 'fields' => 'name,screen_name,photo_100' + ]); + + if (!empty($result['groups'][0])) { + $group = $result['groups'][0]; + return [ + 'valid' => true, + 'type' => 'community', + 'user_id' => '-' . $group['id'], + 'user_name' => $group['name'] ?? 'Сообщество', + 'screen_name' => $group['screen_name'] ?? '', + ]; + } + // VK API v5.199+ returns in different format + if (!empty($result[0])) { + $group = $result[0]; + return [ + 'valid' => true, + 'type' => 'community', + 'user_id' => '-' . $group['id'], + 'user_name' => $group['name'] ?? 'Сообщество', + 'screen_name' => $group['screen_name'] ?? '', + ]; + } + } catch (Exception $e) { + return [ + 'valid' => false, + 'error' => $e->getMessage(), + ]; + } + + return ['valid' => false, 'error' => 'Invalid token']; + } +} diff --git a/config.example.php b/config.example.php new file mode 100644 index 0000000..cb0a15a --- /dev/null +++ b/config.example.php @@ -0,0 +1,32 @@ + [ + 'api_key' => '733ecb91a48dce7be84410d49d96b57e', + 'api_secret' => 'c921aaf8b60c5603', + ], + + // Your Flickr user ID (e.g., '12345678@N00') + // Find it at: https://www.flickr.com/services/api/explore/flickr.people.findByUsername + 'flickr_user_id' => '90307077@N07', + + // Default image size for output + // Options: 'Square', 'Thumbnail', 'Small', 'Medium', 'Large', 'Original' + 'default_size' => 'Large', + + // Available output formats + 'formats' => [ + 'bbcode' => '[img]{url}[/img]', + 'bbcode_linked' => '[url={original}][img]{url}[/img][/url]', + 'html' => '{title}', + 'html_linked' => '{title}', + 'markdown' => '![{title}]({url})', + 'markdown_linked' => '[![{title}]({url})]({original})', + 'url' => '{url}', + ], +]; diff --git a/config.php b/config.php new file mode 100644 index 0000000..cb0a15a --- /dev/null +++ b/config.php @@ -0,0 +1,32 @@ + [ + 'api_key' => '733ecb91a48dce7be84410d49d96b57e', + 'api_secret' => 'c921aaf8b60c5603', + ], + + // Your Flickr user ID (e.g., '12345678@N00') + // Find it at: https://www.flickr.com/services/api/explore/flickr.people.findByUsername + 'flickr_user_id' => '90307077@N07', + + // Default image size for output + // Options: 'Square', 'Thumbnail', 'Small', 'Medium', 'Large', 'Original' + 'default_size' => 'Large', + + // Available output formats + 'formats' => [ + 'bbcode' => '[img]{url}[/img]', + 'bbcode_linked' => '[url={original}][img]{url}[/img][/url]', + 'html' => '{title}', + 'html_linked' => '{title}', + 'markdown' => '![{title}]({url})', + 'markdown_linked' => '[![{title}]({url})]({original})', + 'url' => '{url}', + ], +]; diff --git a/cron_publish.php b/cron_publish.php new file mode 100644 index 0000000..bf81531 --- /dev/null +++ b/cron_publish.php @@ -0,0 +1,229 @@ + $p['status'] === 'pending')); +logMessage("Found $pendingCount pending posts"); + +foreach ($posts as &$post) { + // Skip if not pending + if ($post['status'] !== 'pending') { + continue; + } + + $scheduledTime = strtotime($post['scheduled_time']); + logMessage("Post {$post['id']}: scheduled for " . date('Y-m-d H:i:s', $scheduledTime) . " ($scheduledTime)"); + + if ($scheduledTime > $now) { + $diff = $scheduledTime - $now; + logMessage(" -> Not yet time (in $diff seconds)"); + continue; + } + + logMessage(" -> Time to publish!"); + + // Prepare text with tags + $baseText = $post['text'] ?? ''; + $tags = $post['tags'] ?? []; + if (!empty($tags)) { + $tagsString = implode(' ', array_map(function($t) { return '#' . $t; }, $tags)); + $baseText = $baseText ? $baseText . "\n\n" . $tagsString : $tagsString; + } + + // Collect all photo URLs + $photoUrls = $post['photos'] ?? []; + $uploadedFiles = $post['uploaded_files'] ?? []; + foreach ($uploadedFiles as $file) { + if (!empty($file['url'])) { + $photoUrls[] = $file['url']; + } + } + + logMessage(" Photos: " . count($photoUrls)); + + // Check if cross-promo was enabled for this post + $crossPromoEnabled = $post['cross_promo'] ?? false; + logMessage(" Cross-promo enabled: " . ($crossPromoEnabled ? 'yes' : 'no')); + + // Load cross-promo settings if enabled + $crossPromoFile = __DIR__ . '/data/cross_promo.json'; + $crossPromo = []; + if ($crossPromoEnabled && file_exists($crossPromoFile)) { + $crossPromo = json_decode(file_get_contents($crossPromoFile), true) ?: []; + } + $hasCrossPromo = $crossPromoEnabled && (!empty($crossPromo['telegramLink']) || !empty($crossPromo['vkLink'])); + + // Check which platforms we're posting to + $platforms = $post['platforms'] ?? []; + $postingToTelegram = false; + $postingToVk = false; + foreach ($platforms as $p) { + $pType = $p['type'] ?? $p; + if ($pType === 'telegram') $postingToTelegram = true; + if ($pType === 'vk') $postingToVk = true; + } + + // Prepare platform-specific texts with cross-promo + $textForTelegram = $baseText; + $textForVk = $baseText; + + if ($hasCrossPromo) { + // Add VK link to Telegram posts + if (!empty($crossPromo['vkLink']) && $postingToTelegram) { + $linkText = $crossPromo['textForTg'] ?? 'Мой канал ВКонтакте'; + $textForTelegram .= "\n\n{$linkText}"; + logMessage(" Cross-promo: VK link added to TG text"); + } + // Add Telegram link to VK posts + if (!empty($crossPromo['telegramLink']) && $postingToVk) { + $linkText = $crossPromo['textForVk'] ?? 'Мой канал в Telegram'; + $textForVk .= "\n\n{$linkText}: {$crossPromo['telegramLink']}"; + logMessage(" Cross-promo: TG link added to VK text"); + } + } + + $results = []; + + logMessage(" Platforms: " . json_encode($platforms)); + logMessage(" TG token set: " . (!empty($config['telegram']['bot_token']) ? 'yes' : 'NO')); + logMessage(" VK token set: " . (!empty($config['vk']['access_token']) ? 'yes' : 'NO')); + + if (empty($platforms)) { + logMessage(" WARNING: No platforms specified!"); + } + + foreach ($platforms as $platform) { + $type = $platform['type'] ?? $platform; + $target = $platform['target'] ?? ''; + + logMessage(" Processing platform: $type, target: $target"); + + if ($type === 'telegram') { + if (empty($config['telegram']['bot_token'])) { + logMessage(" Telegram: SKIPPED - no bot token in config"); + continue; + } + try { + $telegram = new TelegramBot($config['telegram']['bot_token']); + // Get first channel if no target specified + if (empty($target)) { + $channels = $telegram->getChannels(); + logMessage(" Telegram channels: " . count($channels)); + if (!empty($channels)) { + $target = $channels[0]['id']; + } + } + if ($target) { + logMessage(" Posting to Telegram channel: $target"); + $result = $telegram->post($target, $photoUrls, $textForTelegram, 'HTML'); + $results['telegram'] = ['success' => true, 'result' => $result]; + logMessage(" Telegram: OK"); + } else { + $results['telegram'] = ['success' => false, 'error' => 'No target channel']; + logMessage(" Telegram: No target channel"); + } + } catch (Exception $e) { + $results['telegram'] = ['success' => false, 'error' => $e->getMessage()]; + logMessage(" Telegram: ERROR - {$e->getMessage()}"); + } + } + + if ($type === 'vk') { + if (empty($config['vk']['access_token'])) { + logMessage(" VK: SKIPPED - no access token in config"); + continue; + } + try { + $vk = new VKAPI($config['vk']['access_token']); + // Get first group if no target specified + if (empty($target)) { + $validation = $vk->validateToken(); + if ($validation['valid'] && ($validation['type'] ?? '') === 'community') { + $target = $validation['user_id']; + } else { + $groups = $vk->getGroups(); + if (!empty($groups)) { + $target = $groups[0]['id']; + } + } + } + if ($target) { + logMessage(" Posting to VK group: $target"); + $result = $vk->post($target, $photoUrls, strip_tags($textForVk)); + $results['vk'] = ['success' => true, 'result' => $result]; + logMessage(" VK: OK"); + } else { + $results['vk'] = ['success' => false, 'error' => 'No target group']; + logMessage(" VK: No target group"); + } + } catch (Exception $e) { + $results['vk'] = ['success' => false, 'error' => $e->getMessage()]; + logMessage(" VK: ERROR - {$e->getMessage()}"); + } + } + } + + // Update post status + $post['status'] = 'published'; + $post['published_at'] = date('Y-m-d H:i:s'); + $post['results'] = $results; + $updated = true; + logMessage("Post {$post['id']} marked as published"); +} + +// Save updated posts +if ($updated) { + file_put_contents($scheduledFile, json_encode($posts, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)); + logMessage("Posts file updated"); +} + +logMessage("Done\n---"); diff --git a/css/style.css b/css/style.css new file mode 100644 index 0000000..c6c3b06 --- /dev/null +++ b/css/style.css @@ -0,0 +1,4008 @@ +/* VH Posting System - Apple Liquid Glass Design */ +/* Русский интерфейс | Light & Dark Theme */ + +/* ============ CSS Variables - Light Theme ============ */ +:root { + /* Core colors */ + --accent-color: #007AFF; + --accent-hover: #0056CC; + --accent-light: rgba(0, 122, 255, 0.15); + --success-color: #34C759; + --error-color: #FF3B30; + --warning-color: #FF9500; + + /* Backgrounds */ + --bg-primary: #F2F2F7; + --bg-secondary: #FFFFFF; + --bg-tertiary: #E5E5EA; + + /* Glass effect */ + --glass-bg: rgba(255, 255, 255, 0.72); + --glass-bg-solid: rgba(255, 255, 255, 0.92); + --glass-border: rgba(255, 255, 255, 0.5); + --glass-shadow: 0 8px 32px rgba(0, 0, 0, 0.08); + --glass-shadow-hover: 0 12px 48px rgba(0, 0, 0, 0.12); + --glass-blur: blur(20px); + + /* Text */ + --text-primary: #1C1C1E; + --text-secondary: #8E8E93; + --text-tertiary: #AEAEB2; + --text-inverse: #FFFFFF; + + /* Borders */ + --border-color: rgba(0, 0, 0, 0.08); + --border-light: rgba(0, 0, 0, 0.04); + --divider: rgba(60, 60, 67, 0.12); + + /* Gradients */ + --gradient-primary: linear-gradient(135deg, #667eea 0%, #764ba2 100%); + --gradient-accent: linear-gradient(135deg, #007AFF 0%, #5856D6 100%); + --gradient-bg: linear-gradient(180deg, #F2F2F7 0%, #E5E5EA 100%); + + /* Radius */ + --radius-sm: 8px; + --radius-md: 12px; + --radius-lg: 16px; + --radius-xl: 24px; + + /* Transitions */ + --transition-fast: 0.15s ease; + --transition-normal: 0.25s ease; + --transition-slow: 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94); +} + +/* ============ Dark Theme ============ */ +[data-theme="dark"] { + --bg-primary: #000000; + --bg-secondary: #1C1C1E; + --bg-tertiary: #2C2C2E; + + --glass-bg: rgba(44, 44, 46, 0.72); + --glass-bg-solid: rgba(44, 44, 46, 0.92); + --glass-border: rgba(255, 255, 255, 0.1); + --glass-shadow: 0 8px 32px rgba(0, 0, 0, 0.3); + --glass-shadow-hover: 0 12px 48px rgba(0, 0, 0, 0.4); + + --text-primary: #FFFFFF; + --text-secondary: #8E8E93; + --text-tertiary: #636366; + + --border-color: rgba(255, 255, 255, 0.1); + --border-light: rgba(255, 255, 255, 0.05); + --divider: rgba(84, 84, 88, 0.65); + + --gradient-bg: linear-gradient(180deg, #1C1C1E 0%, #000000 100%); +} + +/* ============ Base Styles ============ */ +* { + box-sizing: border-box; + margin: 0; + padding: 0; +} + +html { + scroll-behavior: smooth; +} + +body { + font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Display', 'SF Pro Text', 'Helvetica Neue', Arial, sans-serif; + background: var(--gradient-bg); + color: var(--text-primary); + line-height: 1.5; + min-height: 100vh; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + transition: background var(--transition-normal), color var(--transition-normal); +} + +/* ============ Glass Card Component ============ */ +.glass-card { + background: var(--glass-bg); + backdrop-filter: var(--glass-blur); + -webkit-backdrop-filter: var(--glass-blur); + border: 1px solid var(--glass-border); + border-radius: var(--radius-lg); + box-shadow: var(--glass-shadow); + transition: all var(--transition-normal); +} + +.glass-card:hover { + box-shadow: var(--glass-shadow-hover); +} + +.glass-card-solid { + background: var(--glass-bg-solid); + backdrop-filter: var(--glass-blur); + -webkit-backdrop-filter: var(--glass-blur); + border: 1px solid var(--glass-border); + border-radius: var(--radius-lg); + box-shadow: var(--glass-shadow); +} + +/* ============ App Container ============ */ +.app-container { + max-width: 1200px; + margin: 0 auto; + padding: 20px; +} + +/* ============ Header ============ */ +.app-header { + display: flex; + justify-content: space-between; + align-items: center; + padding: 16px 24px; + background: var(--glass-bg); + backdrop-filter: var(--glass-blur); + -webkit-backdrop-filter: var(--glass-blur); + border: 1px solid var(--glass-border); + border-radius: var(--radius-xl); + box-shadow: var(--glass-shadow); + margin-bottom: 20px; + transition: all var(--transition-normal); +} + +.app-header h1 { + font-size: 1.5rem; + font-weight: 600; + background: var(--gradient-accent); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; +} + +.user-menu { + display: flex; + align-items: center; + gap: 16px; +} + +.username { + color: var(--text-secondary); + font-size: 0.9rem; +} + +/* Theme Toggle */ +.theme-toggle { + width: 44px; + height: 24px; + background: var(--bg-tertiary); + border: none; + border-radius: 12px; + cursor: pointer; + position: relative; + transition: all var(--transition-normal); +} + +.theme-toggle::before { + content: ''; + position: absolute; + top: 2px; + left: 2px; + width: 20px; + height: 20px; + background: var(--bg-secondary); + border-radius: 50%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + transition: all var(--transition-normal); +} + +.theme-toggle.dark::before { + transform: translateX(20px); +} + +.theme-toggle.dark { + background: var(--accent-color); +} + +/* ============ Navigation ============ */ +.main-nav { + display: flex; + gap: 8px; + margin-bottom: 20px; + padding: 8px; + background: var(--glass-bg); + backdrop-filter: var(--glass-blur); + -webkit-backdrop-filter: var(--glass-blur); + border: 1px solid var(--glass-border); + border-radius: var(--radius-xl); + box-shadow: var(--glass-shadow); + flex-wrap: wrap; +} + +.nav-btn { + flex: 1; + min-width: 120px; + padding: 12px 20px; + border: none; + background: transparent; + color: var(--text-secondary); + border-radius: var(--radius-md); + cursor: pointer; + font-size: 0.95rem; + font-weight: 500; + transition: all var(--transition-fast); +} + +.nav-btn:hover { + background: var(--accent-light); + color: var(--accent-color); +} + +.nav-btn.active { + background: var(--accent-color); + color: var(--text-inverse); + box-shadow: 0 4px 12px rgba(0, 122, 255, 0.3); +} + +/* ============ Panels ============ */ +.panel { + background: var(--glass-bg); + backdrop-filter: var(--glass-blur); + -webkit-backdrop-filter: var(--glass-blur); + border: 1px solid var(--glass-border); + border-radius: var(--radius-xl); + padding: 28px; + box-shadow: var(--glass-shadow); + transition: all var(--transition-normal); +} + +.panel h2 { + margin: 0 0 8px 0; + font-size: 1.5rem; + font-weight: 600; + color: var(--text-primary); +} + +.panel h3 { + margin: 24px 0 16px 0; + font-size: 1.1rem; + font-weight: 600; + color: var(--text-secondary); +} + +/* ============ Tabs ============ */ +.tab-content { + display: none; + animation: fadeIn var(--transition-slow); +} + +.tab-content.active { + display: block; +} + +@keyframes fadeIn { + from { opacity: 0; transform: translateY(10px); } + to { opacity: 1; transform: translateY(0); } +} + +/* ============ Forms ============ */ +.form-group { + margin-bottom: 20px; +} + +.form-group label { + display: block; + margin-bottom: 8px; + font-weight: 500; + color: var(--text-primary); + font-size: 0.95rem; +} + +.form-row { + display: flex; + gap: 20px; + flex-wrap: wrap; +} + +.form-row .form-group { + flex: 1; + min-width: 200px; +} + +input[type="text"], +input[type="password"], +input[type="email"], +select, +textarea { + width: 100%; + padding: 14px 18px; + background: var(--bg-secondary); + border: 1px solid var(--border-color); + border-radius: var(--radius-md); + font-size: 1rem; + font-family: inherit; + color: var(--text-primary); + transition: all var(--transition-fast); +} + +input:focus, +select:focus, +textarea:focus { + outline: none; + border-color: var(--accent-color); + box-shadow: 0 0 0 4px var(--accent-light); +} + +textarea { + resize: vertical; + min-height: 120px; + font-family: 'SF Mono', 'Monaco', 'Menlo', 'Ubuntu Mono', monospace; +} + +select { + cursor: pointer; + appearance: none; + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='%238E8E93' viewBox='0 0 16 16'%3E%3Cpath d='M8 11L3 6h10l-5 5z'/%3E%3C/svg%3E"); + background-repeat: no-repeat; + background-position: right 16px center; + padding-right: 40px; +} + +.hint { + display: block; + font-size: 0.85rem; + color: var(--text-tertiary); + margin-top: 6px; +} + +.help-text { + color: var(--text-secondary); + margin-bottom: 20px; + font-size: 0.95rem; +} + +/* ============ Buttons ============ */ +.btn { + display: inline-flex; + align-items: center; + justify-content: center; + gap: 8px; + padding: 12px 24px; + border: none; + border-radius: var(--radius-md); + font-size: 1rem; + font-weight: 500; + cursor: pointer; + transition: all var(--transition-fast); + text-decoration: none; +} + +.btn-primary { + background: var(--accent-color); + color: var(--text-inverse); + box-shadow: 0 4px 12px rgba(0, 122, 255, 0.25); +} + +.btn-primary:hover { + background: var(--accent-hover); + box-shadow: 0 6px 16px rgba(0, 122, 255, 0.35); + transform: translateY(-1px); +} + +.btn-secondary { + background: var(--bg-tertiary); + color: var(--text-primary); +} + +.btn-secondary:hover { + background: var(--border-color); +} + +.btn-accent { + background: linear-gradient(135deg, #FF9500 0%, #FF3B30 100%); + color: var(--text-inverse); + box-shadow: 0 4px 12px rgba(255, 149, 0, 0.25); +} + +.btn-accent:hover { + box-shadow: 0 6px 16px rgba(255, 149, 0, 0.35); + transform: translateY(-1px); +} + +.btn-success { + background: var(--success-color); + color: var(--text-inverse); +} + +.btn-small { + padding: 8px 16px; + font-size: 0.875rem; +} + +.btn-large { + padding: 16px 32px; + font-size: 1.1rem; + border-radius: var(--radius-lg); +} + +.btn-block { + width: 100%; +} + +.btn:disabled { + opacity: 0.5; + cursor: not-allowed; + transform: none !important; +} + +.btn:active:not(:disabled) { + transform: scale(0.98); +} + +/* ============ Alerts ============ */ +.alert { + padding: 16px 20px; + border-radius: var(--radius-md); + margin-bottom: 20px; + font-size: 0.95rem; + backdrop-filter: var(--glass-blur); + -webkit-backdrop-filter: var(--glass-blur); +} + +.alert-error { + background: rgba(255, 59, 48, 0.15); + color: var(--error-color); + border: 1px solid rgba(255, 59, 48, 0.3); +} + +.alert-success { + background: rgba(52, 199, 89, 0.15); + color: var(--success-color); + border: 1px solid rgba(52, 199, 89, 0.3); +} + +.alert-warning { + background: rgba(255, 149, 0, 0.15); + color: var(--warning-color); + border: 1px solid rgba(255, 149, 0, 0.3); +} + +/* ============ Status Badges ============ */ +.status { + display: inline-flex; + align-items: center; + gap: 6px; + padding: 6px 14px; + border-radius: 20px; + font-size: 0.85rem; + font-weight: 500; +} + +.status::before { + content: ''; + width: 8px; + height: 8px; + border-radius: 50%; +} + +.status.connected { + background: rgba(52, 199, 89, 0.15); + color: var(--success-color); +} + +.status.connected::before { + background: var(--success-color); + box-shadow: 0 0 8px var(--success-color); +} + +.status.disconnected { + background: rgba(255, 59, 48, 0.15); + color: var(--error-color); +} + +.status.disconnected::before { + background: var(--error-color); +} + +/* ============ Login Page ============ */ +.login-page { + display: flex; + align-items: center; + justify-content: center; + min-height: 100vh; + background: var(--gradient-primary); + padding: 20px; +} + +.login-container { + width: 100%; + max-width: 420px; +} + +.login-box { + background: var(--glass-bg-solid); + backdrop-filter: var(--glass-blur); + -webkit-backdrop-filter: var(--glass-blur); + border: 1px solid var(--glass-border); + border-radius: var(--radius-xl); + padding: 48px 40px; + box-shadow: var(--glass-shadow-hover); +} + +.login-logo { + text-align: center; + margin-bottom: 24px; + display: flex; + justify-content: center; + align-items: center; +} + +.login-logo-img { + width: 100px !important; + height: 100px !important; + max-width: 100px !important; + max-height: 100px !important; + object-fit: contain; + border-radius: var(--radius-lg); + display: block; +} + +.login-box h1 { + font-size: 1.75rem; + font-weight: 700; + text-align: center; + margin: 0 0 8px 0; + background: var(--gradient-accent); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; +} + +.login-box h2 { + color: var(--text-secondary); + text-align: center; + font-weight: 400; + font-size: 1.1rem; + margin: 0 0 32px 0; +} + +/* Login page mobile */ +@media (max-width: 480px) { + .login-page { + padding: 16px; + } + + .login-box { + padding: 24px 20px; + } + + .login-logo-img { + width: 80px !important; + height: 80px !important; + max-width: 80px !important; + max-height: 80px !important; + } + + .login-box h1 { + font-size: 1.4rem; + } + + .login-box h2 { + font-size: 1rem; + margin-bottom: 24px; + } +} + +/* ============ Photo Gallery ============ */ +.gallery-controls { + display: flex; + gap: 16px; + flex-wrap: wrap; + margin-bottom: 20px; + align-items: flex-end; +} + +.gallery-controls .form-group { + margin-bottom: 0; + flex: 1; + min-width: 150px; +} + +.selection-bar { + display: flex; + align-items: center; + gap: 12px; + padding: 16px 20px; + background: var(--accent-light); + border: 1px solid rgba(0, 122, 255, 0.2); + border-radius: var(--radius-lg); + margin-bottom: 20px; + flex-wrap: wrap; +} + +#selected-count { + font-weight: 600; + color: var(--accent-color); +} + +.photo-gallery { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); + gap: 12px; + margin-bottom: 24px; +} + +.photo-item { + position: relative; + border-radius: var(--radius-md); + overflow: hidden; + cursor: pointer; + aspect-ratio: 1; + background: var(--bg-tertiary); + transition: all var(--transition-fast); + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08); +} + +.photo-item:hover { + transform: scale(1.03); + box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15); +} + +.photo-item img { + width: 100%; + height: 100%; + object-fit: cover; +} + +.photo-item .checkbox { + position: absolute; + top: 8px; + left: 8px; + width: 26px; + height: 26px; + background: var(--glass-bg-solid); + backdrop-filter: var(--glass-blur); + -webkit-backdrop-filter: var(--glass-blur); + border: 2px solid var(--glass-border); + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + transition: all var(--transition-fast); +} + +.photo-item.selected .checkbox { + background: var(--accent-color); + border-color: var(--accent-color); + color: var(--text-inverse); + box-shadow: 0 2px 8px rgba(0, 122, 255, 0.4); +} + +.photo-item.selected .checkbox::after { + content: '✓'; + font-size: 14px; + font-weight: bold; +} + +.photo-item .title { + position: absolute; + bottom: 0; + left: 0; + right: 0; + padding: 10px 12px; + background: linear-gradient(to top, rgba(0, 0, 0, 0.8), transparent); + color: white; + font-size: 0.75rem; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.photo-preview-btn { + position: absolute; + top: 8px; + right: 8px; + width: 32px; + height: 32px; + background: var(--glass-bg-solid); + backdrop-filter: var(--glass-blur); + -webkit-backdrop-filter: var(--glass-blur); + border: 2px solid var(--glass-border); + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + font-size: 14px; + opacity: 0; + transition: all var(--transition-fast); + z-index: 5; +} + +.photo-item:hover .photo-preview-btn { + opacity: 1; +} + +.photo-preview-btn:hover { + background: var(--accent-color); + border-color: var(--accent-color); + transform: scale(1.1); +} + +/* Video Badge */ +.photo-item.is-video { + position: relative; +} + +.video-badge { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 48px; + height: 48px; + background: rgba(0, 0, 0, 0.7); + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + z-index: 3; + pointer-events: none; + transition: all 0.2s ease; +} + +.photo-item:hover .video-badge { + background: rgba(234, 67, 53, 0.9); + transform: translate(-50%, -50%) scale(1.1); +} + +.video-icon { + color: white; + font-size: 20px; + margin-left: 4px; +} + +.photo-item.is-video .photo-preview-btn { + background: rgba(234, 67, 53, 0.9); + border-color: rgba(234, 67, 53, 0.9); +} + +/* Pagination */ +.pagination { + display: flex; + align-items: center; + justify-content: center; + gap: 16px; +} + +#page-info { + color: var(--text-secondary); + font-weight: 500; +} + +/* Photos Preview */ +.photos-preview { + display: flex; + flex-wrap: wrap; + gap: 10px; + padding: 20px; + background: var(--bg-tertiary); + border-radius: var(--radius-md); + min-height: 100px; +} + +.photos-preview .placeholder { + color: var(--text-tertiary); + width: 100%; + text-align: center; + padding: 24px; +} + +.preview-thumb { + width: 72px; + height: 72px; + border-radius: var(--radius-sm); + overflow: hidden; + position: relative; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); +} + +.preview-thumb img { + width: 100%; + height: 100%; + object-fit: cover; +} + +.preview-thumb .remove-btn { + position: absolute; + top: 4px; + right: 4px; + width: 22px; + height: 22px; + background: var(--error-color); + color: white; + border: none; + border-radius: 50%; + cursor: pointer; + font-size: 14px; + line-height: 1; + display: flex; + align-items: center; + justify-content: center; + opacity: 0; + transition: opacity var(--transition-fast); +} + +.preview-thumb:hover .remove-btn { + opacity: 1; +} + +/* Result Message */ +.result-message { + padding: 16px 20px; + border-radius: var(--radius-md); + margin-top: 20px; + display: none; + animation: fadeIn var(--transition-normal); +} + +.result-message.success { + display: block; + background: rgba(52, 199, 89, 0.15); + color: var(--success-color); + border: 1px solid rgba(52, 199, 89, 0.3); +} + +.result-message.error { + display: block; + background: rgba(255, 59, 48, 0.15); + color: var(--error-color); + border: 1px solid rgba(255, 59, 48, 0.3); +} + +/* ============ Settings ============ */ +.settings-section { + border-bottom: 1px solid var(--divider); + padding-bottom: 28px; + margin-bottom: 28px; +} + +.settings-section:last-child { + border-bottom: none; + margin-bottom: 0; + padding-bottom: 0; +} + +/* ============ Loading State ============ */ +.loading { + text-align: center; + padding: 48px; + color: var(--text-secondary); +} + +.loading::after { + content: ''; + display: inline-block; + width: 24px; + height: 24px; + border: 3px solid var(--border-color); + border-top-color: var(--accent-color); + border-radius: 50%; + animation: spin 0.8s linear infinite; + margin-left: 12px; + vertical-align: middle; +} + +@keyframes spin { + to { transform: rotate(360deg); } +} + +/* Placeholder */ +.placeholder { + color: var(--text-tertiary); + text-align: center; + padding: 24px; +} + +/* ============ Platform Cards ============ */ +.platforms-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); + gap: 16px; + margin-top: 12px; +} + +.platform-card { + background: var(--bg-secondary); + border: 1px solid var(--border-color); + border-radius: var(--radius-md); + padding: 16px; + transition: all var(--transition-fast); +} + +.platform-card:hover { + border-color: var(--accent-color); + box-shadow: 0 4px 12px rgba(0, 122, 255, 0.1); +} + +.platform-card.platform-disabled { + opacity: 0.6; +} + +.platform-header { + display: flex; + align-items: center; + gap: 12px; + margin-bottom: 12px; +} + +.platform-checkbox { + position: relative; + display: flex; + cursor: pointer; +} + +.platform-checkbox input { + position: absolute; + opacity: 0; + width: 0; + height: 0; +} + +.platform-checkbox .checkmark { + width: 24px; + height: 24px; + background: var(--bg-tertiary); + border: 2px solid var(--border-color); + border-radius: 6px; + display: flex; + align-items: center; + justify-content: center; + transition: all var(--transition-fast); +} + +.platform-checkbox input:checked + .checkmark { + background: var(--accent-color); + border-color: var(--accent-color); +} + +.platform-checkbox input:checked + .checkmark::after { + content: '✓'; + color: white; + font-size: 14px; + font-weight: bold; +} + +.platform-info { + flex: 1; +} + +.platform-name { + display: block; + font-weight: 600; + color: var(--text-primary); + font-size: 1rem; +} + +.status-mini { + display: block; + font-size: 0.8rem; + color: var(--text-tertiary); + margin-top: 2px; +} + +.status-mini.connected { + color: var(--success-color); +} + +.platform-target { + width: 100%; + padding: 10px 14px; + background: var(--bg-primary); + border: 1px solid var(--border-color); + border-radius: var(--radius-sm); + font-size: 0.9rem; + color: var(--text-primary); +} + +.platform-note { + font-size: 0.8rem; + color: var(--text-tertiary); + margin: 0; + padding: 8px 0 0 0; +} + +/* ============ Gallery Header & Toolbar ============ */ +.gallery-header { + display: flex; + flex-direction: column; + gap: 16px; + margin-bottom: 20px; +} + +.gallery-header h2 { + margin: 0; +} + +.gallery-toolbar { + display: flex; + gap: 12px; + align-items: center; + flex-wrap: wrap; +} + +.album-controls { + display: flex; + align-items: center; + gap: 8px; + flex: 1; + min-width: 200px; +} + +.toolbar-select { + flex: 1; + min-width: 150px; + max-width: 280px; +} + +.btn-icon { + display: flex; + align-items: center; + justify-content: center; + width: 36px; + height: 36px; + border: none; + border-radius: var(--radius-sm); + background: var(--glass-bg); + backdrop-filter: var(--glass-blur); + -webkit-backdrop-filter: var(--glass-blur); + color: var(--text-primary); + font-size: 16px; + cursor: pointer; + transition: all var(--transition-fast); + flex-shrink: 0; +} + +.btn-icon:hover { + background: var(--accent-light); + color: var(--accent-color); + transform: scale(1.05); +} + +.btn-icon:active { + transform: scale(0.95); +} + +.btn-icon.active { + background: var(--accent-color); + color: white; +} + +.toolbar-search { + flex: 1; + min-width: 150px; + max-width: 250px; +} + +.toolbar-search input { + width: 100%; + margin: 0; +} + +/* ============ Gallery Views ============ */ +.gallery-view { + animation: fadeIn 0.3s ease; +} + +.gallery-view.hidden { + display: none; +} + +/* ============ Albums Grid ============ */ +.albums-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); + gap: 16px; + padding: 8px 0; +} + +@media (min-width: 768px) { + .albums-grid { + grid-template-columns: repeat(5, 1fr); + } +} + +@media (min-width: 1024px) { + .albums-grid { + grid-template-columns: repeat(6, 1fr); + } +} + +@media (min-width: 1400px) { + .albums-grid { + grid-template-columns: repeat(7, 1fr); + } +} + +.album-card { + position: relative; + aspect-ratio: 1; + border-radius: var(--radius-md); + overflow: hidden; + cursor: pointer; + background: var(--bg-tertiary); + box-shadow: var(--glass-shadow); + transition: all var(--transition-normal); + user-select: none; +} + +.album-card:hover { + transform: translateY(-4px) scale(1.02); + box-shadow: var(--glass-shadow-hover); +} + +.album-card.dragging { + opacity: 0.6; + transform: scale(1.05) rotate(2deg); + box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3); + z-index: 100; +} + +.album-card.drag-over { + transform: scale(0.95); + border: 3px solid var(--accent-color); +} + +.album-card-cover { + width: 100%; + height: 100%; + object-fit: cover; + transition: transform var(--transition-normal); +} + +.album-card:hover .album-card-cover { + transform: scale(1.1); +} + +.album-card-overlay { + position: absolute; + bottom: 0; + left: 0; + right: 0; + padding: 12px; + background: linear-gradient(transparent, rgba(0, 0, 0, 0.85)); + color: white; +} + +.album-card-title { + font-size: 0.85rem; + font-weight: 600; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + margin-bottom: 2px; +} + +.album-card-count { + font-size: 0.7rem; + opacity: 0.8; +} + +.album-card-drag-handle { + position: absolute; + top: 8px; + right: 8px; + width: 26px; + height: 26px; + background: rgba(0, 0, 0, 0.5); + backdrop-filter: blur(10px); + border-radius: 6px; + display: flex; + align-items: center; + justify-content: center; + color: white; + font-size: 12px; + opacity: 0; + transition: opacity var(--transition-fast); + cursor: grab; +} + +.album-card:hover .album-card-drag-handle { + opacity: 1; +} + +.album-card-drag-handle:active { + cursor: grabbing; +} + +/* Placeholder for empty cover */ +.album-card-placeholder { + width: 100%; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + background: var(--bg-tertiary); + color: var(--text-tertiary); + font-size: 2rem; +} + +/* Drag hint */ +.drag-hint { + font-size: 0.85rem; + color: var(--text-secondary); + text-align: center; + margin: 8px 0 16px; + opacity: 0.7; +} + +.drag-hint.hidden { + display: none; +} + +/* ============ Breadcrumb Navigation ============ */ +.breadcrumb { + display: flex; + align-items: center; + gap: 8px; + flex-wrap: wrap; +} + +.breadcrumb-separator { + color: var(--text-tertiary); +} + +.breadcrumb-current { + font-weight: 600; + color: var(--text-primary); +} + +.btn-text { + background: none; + border: none; + color: var(--accent-color); + font-size: 0.95rem; + cursor: pointer; + padding: 8px 12px; + border-radius: var(--radius-sm); + transition: all var(--transition-fast); +} + +.btn-text:hover { + background: var(--accent-light); +} + +.btn-icon-text { + margin-right: 6px; +} + +.photos-count { + font-size: 0.9rem; + color: var(--text-secondary); + white-space: nowrap; +} + +/* ============ Loading Spinner ============ */ +.loading { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding: 60px 20px; + gap: 16px; + color: var(--text-secondary); +} + +.loading-spinner { + width: 40px; + height: 40px; + border: 3px solid var(--border-color); + border-top-color: var(--accent-color); + border-radius: 50%; + animation: spin 0.8s linear infinite; +} + +@keyframes spin { + to { transform: rotate(360deg); } +} + +@keyframes fadeIn { + from { opacity: 0; transform: translateY(-10px); } + to { opacity: 1; transform: translateY(0); } +} + +/* ============ Floating Action Bar ============ */ +.floating-action-bar { + position: fixed; + bottom: 24px; + left: 50%; + transform: translateX(-50%); + display: flex; + align-items: center; + gap: 16px; + padding: 12px 20px; + background: var(--glass-bg-solid); + backdrop-filter: var(--glass-blur); + -webkit-backdrop-filter: var(--glass-blur); + border: 1px solid var(--glass-border); + border-radius: 20px; + box-shadow: 0 8px 32px rgba(0, 0, 0, 0.2); + z-index: 1000; + animation: slideUp 0.3s ease; +} + +.floating-action-bar.hidden { + display: none; +} + +@keyframes slideUp { + from { + opacity: 0; + transform: translateX(-50%) translateY(20px); + } + to { + opacity: 1; + transform: translateX(-50%) translateY(0); + } +} + +.action-bar-left { + display: flex; + align-items: baseline; + gap: 6px; + padding-right: 16px; + border-right: 1px solid var(--divider); +} + +.selection-count { + font-size: 1.5rem; + font-weight: 700; + color: var(--accent-color); +} + +.selection-label { + font-size: 0.85rem; + color: var(--text-secondary); +} + +.action-bar-center, +.action-bar-right { + display: flex; + gap: 8px; +} + +.action-btn { + display: flex; + flex-direction: column; + align-items: center; + gap: 4px; + padding: 8px 16px; + background: transparent; + border: none; + border-radius: var(--radius-md); + cursor: pointer; + transition: all var(--transition-fast); + color: var(--text-primary); +} + +.action-btn:hover { + background: var(--accent-light); +} + +.action-btn:active { + transform: scale(0.95); +} + +.action-icon { + font-size: 1.25rem; + line-height: 1; +} + +.action-text { + font-size: 0.7rem; + font-weight: 500; + white-space: nowrap; +} + +.action-btn.action-primary { + background: var(--accent-color); + color: white; + box-shadow: 0 4px 12px rgba(0, 122, 255, 0.3); +} + +.action-btn.action-primary:hover { + background: var(--accent-hover); +} + +.action-btn.action-secondary { + background: var(--bg-tertiary); +} + +.action-btn.action-secondary:hover { + background: var(--border-color); +} + +/* Mobile floating bar */ +@media (max-width: 768px) { + .floating-action-bar { + left: 12px; + right: 12px; + transform: none; + bottom: 12px; + padding: 10px 16px; + gap: 8px; + } + + .action-bar-left { + padding-right: 12px; + } + + .selection-count { + font-size: 1.2rem; + } + + .action-btn { + padding: 6px 10px; + } + + .action-text { + display: none; + } + + .action-icon { + font-size: 1.4rem; + } +} + +/* ============ Scrollbar Styling ============ */ +::-webkit-scrollbar { + width: 8px; + height: 8px; +} + +::-webkit-scrollbar-track { + background: var(--bg-tertiary); + border-radius: 4px; +} + +::-webkit-scrollbar-thumb { + background: var(--text-tertiary); + border-radius: 4px; +} + +::-webkit-scrollbar-thumb:hover { + background: var(--text-secondary); +} + +/* ============ Selection ============ */ +::selection { + background: var(--accent-light); + color: var(--accent-color); +} + +/* ============ Responsive ============ */ +@media (max-width: 768px) { + .app-container { + padding: 12px; + } + + .app-header { + flex-direction: column; + text-align: center; + gap: 16px; + padding: 20px; + } + + .main-nav { + padding: 6px; + } + + .nav-btn { + min-width: auto; + padding: 10px 16px; + font-size: 0.9rem; + } + + .panel { + padding: 20px; + } + + .form-row { + flex-direction: column; + } + + .form-row .form-group { + min-width: 100%; + } + + .photo-gallery { + grid-template-columns: repeat(auto-fill, minmax(100px, 1fr)); + gap: 8px; + } + + .selection-bar { + flex-direction: column; + align-items: stretch; + gap: 10px; + } + + .login-box { + padding: 32px 24px; + } +} + +/* ============ Print Styles ============ */ +@media print { + .app-header, + .main-nav, + .btn, + .selection-bar, + .pagination { + display: none !important; + } + + .panel { + box-shadow: none; + border: 1px solid #ccc; + } +} + +/* ============ Photo Lightbox ============ */ +.lightbox { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 10000; + display: flex; + align-items: center; + justify-content: center; +} + +.lightbox.hidden { + display: none; +} + +.lightbox-backdrop { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(0, 0, 0, 0.85); + backdrop-filter: blur(10px); + -webkit-backdrop-filter: blur(10px); +} + +.lightbox-content { + position: relative; + max-width: 90vw; + max-height: 90vh; + display: flex; + flex-direction: column; + align-items: center; + z-index: 1; +} + +.lightbox-close { + position: absolute; + top: -40px; + right: -40px; + width: 36px; + height: 36px; + background: rgba(255, 255, 255, 0.2); + border: none; + border-radius: 50%; + color: white; + font-size: 24px; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + transition: all var(--transition-fast); + z-index: 10; +} + +.lightbox-close:hover { + background: rgba(255, 255, 255, 0.3); + transform: scale(1.1); +} + +.lightbox-image-container { + position: relative; + max-width: 85vw; + max-height: 70vh; + display: flex; + align-items: center; + justify-content: center; + border-radius: var(--radius-lg); + overflow: hidden; + background: rgba(0, 0, 0, 0.5); +} + +.lightbox-image { + max-width: 100%; + max-height: 70vh; + object-fit: contain; + transition: opacity 0.3s ease; +} + +.lightbox-video-container { + width: 100%; + max-width: 85vw; + aspect-ratio: 16 / 9; + background: #000; + border-radius: var(--radius-md); + overflow: hidden; +} + +.lightbox-video { + width: 100%; + height: 100%; + border: none; +} + +/* Video Play Overlay in Lightbox */ +.video-play-overlay { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + background: rgba(0, 0, 0, 0.5); + cursor: pointer; + transition: background 0.2s ease; + z-index: 10; +} + +.video-play-overlay:hover { + background: rgba(0, 0, 0, 0.3); +} + +.video-play-overlay:hover .video-play-button { + transform: scale(1.1); + background: rgba(234, 67, 53, 1); +} + +.video-play-button { + width: 80px; + height: 80px; + border-radius: 50%; + background: rgba(234, 67, 53, 0.9); + display: flex; + align-items: center; + justify-content: center; + font-size: 32px; + color: white; + padding-left: 6px; + transition: all 0.2s ease; + box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3); +} + +.video-play-text { + margin-top: 16px; + color: white; + font-size: 14px; + font-weight: 500; + text-shadow: 0 1px 3px rgba(0, 0, 0, 0.5); +} + +.lightbox-loading { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} + +.lightbox-loading.hidden { + display: none; +} + +.lightbox-info { + margin-top: 16px; + text-align: center; +} + +.lightbox-title { + color: white; + font-size: 1rem; + font-weight: 500; + margin: 0; + max-width: 60vw; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.lightbox-actions { + margin-top: 20px; + display: flex; + gap: 12px; +} + +.lightbox-actions .btn { + min-width: 130px; +} + +.lightbox-actions .btn-success { + background: var(--success-color); +} + +.lightbox-nav { + position: absolute; + top: 50%; + transform: translateY(-50%); + width: 50px; + height: 50px; + background: rgba(255, 255, 255, 0.15); + border: none; + border-radius: 50%; + color: white; + font-size: 28px; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + transition: all var(--transition-fast); +} + +.lightbox-nav:hover { + background: rgba(255, 255, 255, 0.3); + transform: translateY(-50%) scale(1.1); +} + +.lightbox-prev { + left: -80px; +} + +.lightbox-next { + right: -80px; +} + +/* Mobile lightbox adjustments */ +@media (max-width: 768px) { + .lightbox-close { + top: 10px; + right: 10px; + } + + .lightbox-nav { + width: 40px; + height: 40px; + font-size: 22px; + } + + .lightbox-prev { + left: 10px; + } + + .lightbox-next { + right: 10px; + } + + .lightbox-actions { + flex-direction: column; + width: 100%; + padding: 0 20px; + } + + .lightbox-actions .btn { + width: 100%; + } + + .lightbox-title { + max-width: 90vw; + font-size: 0.9rem; + } +} + +/* ============ Download Choice Dialog ============ */ +.download-dialog-overlay { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(0, 0, 0, 0.5); + backdrop-filter: blur(8px); + -webkit-backdrop-filter: blur(8px); + display: flex; + align-items: center; + justify-content: center; + z-index: 10000; + animation: fadeIn 0.2s ease; +} + +.download-dialog { + background: var(--glass-bg-solid); + backdrop-filter: var(--glass-blur); + -webkit-backdrop-filter: var(--glass-blur); + border-radius: var(--radius-xl); + padding: 32px; + min-width: 320px; + max-width: 90vw; + box-shadow: var(--glass-shadow-hover); + border: 1px solid var(--glass-border); + position: relative; + text-align: center; + animation: slideUp 0.3s ease; +} + +.download-dialog h3 { + margin: 0 0 8px 0; + font-size: 1.25rem; + font-weight: 600; + color: var(--text-primary); +} + +.download-dialog p { + margin: 0 0 24px 0; + color: var(--text-secondary); + font-size: 0.95rem; +} + +.download-dialog-buttons { + display: flex; + gap: 12px; + justify-content: center; +} + +.download-dialog-buttons .btn { + flex: 1; + display: flex; + flex-direction: column; + align-items: center; + gap: 8px; + padding: 16px 24px; + min-width: 130px; +} + +.download-dialog-buttons .btn-icon { + font-size: 1.5rem; +} + +.download-dialog-close { + position: absolute; + top: 12px; + right: 12px; + width: 32px; + height: 32px; + border: none; + background: var(--bg-tertiary); + border-radius: 50%; + font-size: 1.25rem; + color: var(--text-secondary); + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + transition: var(--transition-fast); +} + +.download-dialog-close:hover { + background: var(--error-color); + color: white; +} + +@keyframes slideUp { + from { + opacity: 0; + transform: translateY(20px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +/* ============ OAuth Banner ============ */ +.oauth-banner { + background: linear-gradient(135deg, #FF9500 0%, #FF6B00 100%); + border-radius: var(--radius-md); + padding: 12px 16px; + margin-bottom: 16px; + animation: slideDown 0.3s ease; +} + +.oauth-banner.hidden { + display: none; +} + +.oauth-banner-content { + display: flex; + align-items: center; + gap: 12px; + flex-wrap: wrap; +} + +.oauth-banner-icon { + font-size: 1.25rem; +} + +.oauth-banner-text { + flex: 1; + color: white; + font-size: 0.9rem; +} + +.oauth-banner-text strong { + display: block; + font-size: 1rem; +} + +.oauth-banner .btn { + background: rgba(255, 255, 255, 0.2); + border: 1px solid rgba(255, 255, 255, 0.3); + color: white; + white-space: nowrap; +} + +.oauth-banner .btn:hover { + background: rgba(255, 255, 255, 0.3); +} + +@keyframes slideDown { + from { + opacity: 0; + transform: translateY(-10px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +/* ============ Text Editor Toolbar ============ */ +.text-editor { + border: 1px solid var(--border-color); + border-radius: var(--radius-md); + overflow: hidden; + background: var(--bg-secondary); +} + +.editor-toolbar { + display: flex; + gap: 4px; + padding: 8px; + background: var(--bg-tertiary); + border-bottom: 1px solid var(--border-color); +} + +.toolbar-btn { + width: 32px; + height: 32px; + border: none; + background: transparent; + border-radius: var(--radius-sm); + cursor: pointer; + font-size: 14px; + color: var(--text-primary); + transition: var(--transition-fast); + display: flex; + align-items: center; + justify-content: center; +} + +.toolbar-btn:hover { + background: var(--accent-light); + color: var(--accent-color); +} + +.toolbar-btn.active { + background: var(--accent-color); + color: white; +} + +.toolbar-separator { + width: 1px; + background: var(--border-color); + margin: 0 4px; +} + +.text-editor textarea { + border: none; + border-radius: 0; + resize: vertical; +} + +.text-editor textarea:focus { + box-shadow: none; +} + +/* ============ Tags System ============ */ +.tags-container { + background: var(--bg-secondary); + border: 1px solid var(--border-color); + border-radius: var(--radius-md); + padding: 8px; + min-height: 44px; +} + +.tags-list { + display: flex; + flex-wrap: wrap; + gap: 6px; + margin-bottom: 8px; +} + +.tags-list:empty { + display: none; +} + +.tags-list + .tags-input-wrapper { + margin-top: 0; +} + +.tag-chip { + display: inline-flex; + align-items: center; + gap: 4px; + padding: 4px 8px; + background: var(--accent-light); + color: var(--accent-color); + border-radius: 20px; + font-size: 0.85rem; + animation: tagAppear 0.2s ease; +} + +@keyframes tagAppear { + from { opacity: 0; transform: scale(0.8); } + to { opacity: 1; transform: scale(1); } +} + +.tag-chip .tag-remove { + width: 16px; + height: 16px; + border: none; + background: transparent; + color: var(--accent-color); + cursor: pointer; + font-size: 14px; + line-height: 1; + padding: 0; + opacity: 0.6; + transition: var(--transition-fast); + border-radius: 50%; +} + +.tag-chip .tag-remove:hover { + opacity: 1; + background: var(--accent-color); + color: white; +} + +.tags-input-wrapper { + position: relative; +} + +.tags-input { + border: none !important; + background: transparent !important; + padding: 4px 8px !important; + font-size: 0.9rem; + width: 100%; + min-width: 120px; +} + +.tags-input:focus { + box-shadow: none !important; + outline: none; +} + +.tags-suggestions { + position: absolute; + top: 100%; + left: 0; + right: 0; + background: var(--bg-secondary); + border: 1px solid var(--border-color); + border-radius: var(--radius-md); + box-shadow: var(--glass-shadow); + z-index: 100; + max-height: 200px; + overflow-y: auto; + display: none; +} + +.tags-suggestions.visible { + display: block; +} + +.tag-suggestion { + padding: 8px 12px; + cursor: pointer; + transition: var(--transition-fast); + display: flex; + justify-content: space-between; + align-items: center; +} + +.tag-suggestion:hover, +.tag-suggestion.selected { + background: var(--accent-light); +} + +.tag-suggestion .tag-count { + font-size: 0.75rem; + color: var(--text-secondary); +} + +.tags-presets { + display: flex; + align-items: center; + gap: 8px; + margin-top: 8px; + flex-wrap: wrap; +} + +.tags-presets-label { + font-size: 0.8rem; + color: var(--text-secondary); +} + +.tag-preset { + padding: 4px 10px; + background: var(--bg-tertiary); + border: 1px solid var(--border-color); + border-radius: 20px; + font-size: 0.8rem; + cursor: pointer; + transition: var(--transition-fast); + color: var(--text-primary); +} + +.tag-preset:hover { + background: var(--accent-light); + border-color: var(--accent-color); + color: var(--accent-color); +} + +.presets-list { + display: inline-flex; + flex-wrap: wrap; + gap: 6px; +} + +.preset-add-btn, +.preset-manage-btn { + width: 28px; + height: 28px; + border-radius: 50%; + border: 1px dashed var(--border-color); + background: transparent; + color: var(--text-secondary); + font-size: 16px; + cursor: pointer; + display: inline-flex; + align-items: center; + justify-content: center; + transition: all 0.2s ease; +} + +.preset-add-btn:hover, +.preset-manage-btn:hover { + border-color: var(--accent-color); + color: var(--accent-color); + background: var(--accent-light); +} + +/* ============ Modal Styles ============ */ +.modal-overlay { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(0, 0, 0, 0.5); + display: flex; + align-items: center; + justify-content: center; + z-index: 1000; + backdrop-filter: blur(4px); +} + +.modal-content { + background: var(--bg-primary); + border-radius: 12px; + box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3); + max-height: 90vh; + overflow: hidden; + display: flex; + flex-direction: column; +} + +.modal-header { + display: flex; + justify-content: space-between; + align-items: center; + padding: 16px 20px; + border-bottom: 1px solid var(--border-color); +} + +.modal-header h3 { + margin: 0; + font-size: 1.1rem; + color: var(--text-primary); +} + +.modal-close { + width: 32px; + height: 32px; + border: none; + background: transparent; + font-size: 24px; + color: var(--text-secondary); + cursor: pointer; + border-radius: 6px; + display: flex; + align-items: center; + justify-content: center; + transition: all 0.2s ease; +} + +.modal-close:hover { + background: var(--bg-hover); + color: var(--text-primary); +} + +.modal-body { + padding: 20px; + overflow-y: auto; +} + +/* Preset Modal */ +.preset-modal { + max-width: 500px; + width: 90%; +} + +.preset-manager-list { + max-height: 300px; + overflow-y: auto; + margin-bottom: 16px; +} + +.preset-manager-item { + display: flex; + justify-content: space-between; + align-items: center; + padding: 12px; + border: 1px solid var(--border-color); + border-radius: 8px; + margin-bottom: 8px; + background: var(--bg-secondary); +} + +.preset-manager-item:hover { + border-color: var(--accent-color); +} + +.preset-info { + flex: 1; + min-width: 0; +} + +.preset-info .preset-name { + display: block; + font-weight: 600; + color: var(--text-primary); + margin-bottom: 4px; +} + +.preset-info .preset-tags-preview { + display: block; + font-size: 12px; + color: var(--text-secondary); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.preset-actions { + display: flex; + gap: 8px; + margin-left: 12px; +} + +.btn-icon { + width: 32px; + height: 32px; + border: none; + background: transparent; + cursor: pointer; + border-radius: 6px; + display: flex; + align-items: center; + justify-content: center; + font-size: 16px; + transition: background 0.2s ease; +} + +.btn-icon:hover { + background: var(--bg-hover); +} + +.btn-icon.preset-delete:hover { + background: rgba(239, 68, 68, 0.1); +} + +.preset-form-actions { + display: flex; + gap: 12px; + margin-top: 16px; +} + +.btn-block { + width: 100%; +} + +/* ============ Infinite Scroll Loading ============ */ +.albums-loading-more, +.photos-loading-more { + display: flex; + align-items: center; + justify-content: center; + gap: 12px; + padding: 24px; + color: var(--text-secondary); + font-size: 0.9rem; + grid-column: 1 / -1; + width: 100%; +} + +.albums-loading-more .loading-spinner, +.photos-loading-more .loading-spinner { + width: 24px; + height: 24px; +} + +#albums-scroll-sentinel, +#photos-scroll-sentinel { + visibility: hidden; +} + +/* ============ Converter Grid Layout ============ */ +.converter-grid { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 24px; + margin-bottom: 24px; +} + +.converter-input-section, +.converter-text-section { + display: flex; + flex-direction: column; + gap: 12px; +} + +.converter-output-section { + border-top: 1px solid var(--border-color); + padding-top: 20px; +} + +.output-actions { + display: flex; + gap: 8px; + align-items: center; + margin-top: 8px; +} + +.copy-status { + font-size: 0.85rem; + color: var(--success-color); + opacity: 0; + transition: opacity 0.3s; +} + +.copy-status.visible { + opacity: 1; +} + +@media (max-width: 768px) { + .converter-grid { + grid-template-columns: 1fr; + } + + .tags-presets { + flex-direction: column; + align-items: flex-start; + } +} + +/* ============ Widget Settings ============ */ +.widget-albums-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); + gap: 12px; + max-height: 400px; + overflow-y: auto; + padding: 8px; + border: 1px solid var(--border-color); + border-radius: var(--radius-md); + background: var(--bg-secondary); +} + +.widget-album-item { + display: flex; + flex-direction: column; + align-items: center; + padding: 12px; + border: 2px solid transparent; + border-radius: var(--radius-md); + background: var(--glass-bg); + cursor: pointer; + transition: all 0.2s ease; + text-align: center; +} + +.widget-album-item:hover { + background: var(--bg-hover); +} + +.widget-album-item.selected { + border-color: var(--primary); + background: rgba(var(--primary-rgb), 0.1); +} + +.widget-album-item input[type="checkbox"] { + position: absolute; + opacity: 0; + pointer-events: none; +} + +.widget-album-thumb { + width: 80px; + height: 80px; + object-fit: cover; + border-radius: var(--radius-sm); + margin-bottom: 8px; +} + +.widget-album-title { + font-size: 0.85rem; + font-weight: 500; + color: var(--text-primary); + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + overflow: hidden; + margin-bottom: 4px; +} + +.widget-album-count { + font-size: 0.75rem; + color: var(--text-secondary); +} + +.code-block { + background: var(--bg-secondary); + border: 1px solid var(--border-color); + border-radius: var(--radius-md); + padding: 16px; + margin-bottom: 12px; +} + +.code-block p { + margin: 0 0 8px 0; + color: var(--text-secondary); +} + +.code-block code { + display: block; + background: var(--bg-tertiary); + padding: 8px 12px; + border-radius: var(--radius-sm); + font-family: 'SF Mono', monospace; + font-size: 0.85rem; + word-break: break-all; + color: var(--text-primary); +} + +.save-status { + margin-left: 12px; + font-size: 0.9rem; +} + +.save-status.success { + color: var(--success); +} + +.checkbox-label { + display: flex; + align-items: center; + gap: 8px; + cursor: pointer; +} + +.checkbox-label input[type="checkbox"] { + width: 18px; + height: 18px; +} + +/* ============ Photo Source Buttons ============ */ +.photo-source-buttons { + display: flex; + gap: 10px; + margin-bottom: 12px; + flex-wrap: wrap; +} + +.photo-source-buttons .btn { + flex: 1; + min-width: 140px; +} + +/* Combined preview for all photos */ +.combined-preview { + min-height: 80px; + border: 2px dashed transparent; + transition: all 0.2s ease; +} + +.combined-preview.drag-over { + border-color: var(--accent-color); + background: var(--bg-tertiary); +} + +.combined-preview .preview-thumb .source-badge { + position: absolute; + bottom: 2px; + left: 2px; + background: rgba(0, 0, 0, 0.7); + color: white; + font-size: 8px; + padding: 1px 4px; + border-radius: 3px; + text-transform: uppercase; +} + +.combined-preview .preview-thumb.uploading { + opacity: 0.6; +} + +.combined-preview .preview-thumb .upload-spinner { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 20px; + height: 20px; + border: 2px solid var(--bg-primary); + border-top-color: var(--accent-color); + border-radius: 50%; + animation: spin 0.8s linear infinite; +} + +@keyframes spin { + to { transform: translate(-50%, -50%) rotate(360deg); } +} + +/* ============ File Upload Area ============ */ +.upload-area { + display: flex; + align-items: center; + gap: 12px; + padding: 16px; + border: 2px dashed var(--divider); + border-radius: var(--radius-md); + background: var(--bg-secondary); + transition: all 0.2s ease; +} + +.upload-area.drag-over { + border-color: var(--accent-color); + background: var(--bg-tertiary); +} + +.uploaded-preview { + display: flex; + flex-wrap: wrap; + gap: 8px; + margin-top: 8px; +} + +.uploaded-item { + position: relative; + width: 80px; + height: 80px; + border-radius: var(--radius-sm); + overflow: hidden; + background: var(--bg-tertiary); +} + +.uploaded-item .preview-thumb { + width: 100%; + height: 100%; + object-fit: cover; +} + +.uploaded-item .remove-uploaded { + position: absolute; + top: 4px; + right: 4px; + width: 20px; + height: 20px; + border: none; + border-radius: 50%; + background: rgba(0, 0, 0, 0.7); + color: white; + font-size: 14px; + line-height: 1; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; +} + +.uploaded-item .video-badge { + position: absolute; + bottom: 4px; + left: 4px; + background: rgba(0, 0, 0, 0.7); + color: white; + padding: 2px 6px; + border-radius: 4px; + font-size: 10px; +} + +.uploaded-item .file-name { + position: absolute; + bottom: 0; + left: 0; + right: 0; + background: rgba(0, 0, 0, 0.7); + color: white; + font-size: 9px; + padding: 2px 4px; + text-align: center; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.uploaded-item.uploading { + opacity: 0.7; +} + +.uploaded-item .upload-spinner { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 24px; + height: 24px; + border: 3px solid rgba(255, 255, 255, 0.3); + border-top-color: white; + border-radius: 50%; + animation: spin 1s linear infinite; +} + +@keyframes spin { + to { transform: translate(-50%, -50%) rotate(360deg); } +} + +/* ============ Post Options Grid ============ */ +.post-options-grid { + display: grid; + grid-template-columns: 1fr 1fr 1fr; + gap: 12px; + margin-bottom: 16px; +} + +.checkbox-label.compact { + font-size: 0.9rem; +} + +.schedule-options { + background: var(--bg-tertiary); + padding: 16px; + border-radius: var(--radius-md); + margin-bottom: 16px; + border: 2px solid var(--accent-color); +} + +.schedule-options.hidden { + display: none; +} + +.schedule-label { + display: block; + font-weight: 600; + margin-bottom: 12px; + color: var(--text-primary); +} + +.schedule-presets { + display: flex; + flex-wrap: wrap; + gap: 8px; + margin-bottom: 16px; +} + +.schedule-presets .preset-btn { + padding: 8px 14px; + border: 1px solid var(--divider); + border-radius: var(--radius-md); + background: var(--bg-secondary); + color: var(--text-primary); + font-size: 0.9rem; + cursor: pointer; + transition: all var(--transition-fast); +} + +.schedule-presets .preset-btn:hover { + background: var(--accent-light); + border-color: var(--accent-color); +} + +.schedule-presets .preset-btn.active { + background: var(--accent-color); + color: white; + border-color: var(--accent-color); +} + +.schedule-custom { + background: var(--bg-secondary); + padding: 12px; + border-radius: var(--radius-sm); +} + +.schedule-date-row { + display: flex; + gap: 12px; +} + +.schedule-field { + flex: 1; +} + +.schedule-field label { + display: block; + font-size: 0.85rem; + color: var(--text-secondary); + margin-bottom: 4px; +} + +.schedule-input { + width: 100%; + padding: 10px 12px; + font-size: 16px; + border: 1px solid var(--divider); + border-radius: var(--radius-sm); + background: var(--bg-primary); + color: var(--text-primary); +} + +.schedule-input:focus { + outline: none; + border-color: var(--accent-color); +} + +.datetime-input { + width: 100%; + padding: 12px; + font-size: 1rem; + border: 1px solid var(--divider); + border-radius: var(--radius-md); + background: var(--bg-primary); + color: var(--text-primary); +} + +.post-actions { + display: flex; + gap: 12px; + margin-bottom: 20px; +} + +.post-actions .btn { + flex: 1; +} + +/* ============ Scheduled Posts Section ============ */ +.scheduled-section { + margin-top: 32px; + padding-top: 24px; + border-top: 1px solid var(--divider); +} + +.scheduled-header { + display: flex; + align-items: center; + gap: 12px; + margin-bottom: 16px; +} + +.scheduled-header h3 { + margin: 0; + font-size: 1.1rem; +} + +.badge { + background: var(--accent-color); + color: white; + padding: 2px 10px; + border-radius: 12px; + font-size: 0.85rem; + font-weight: 600; +} + +.scheduled-posts-list { + display: flex; + flex-direction: column; + gap: 12px; +} + +.scheduled-post-card { + background: var(--bg-secondary); + border-radius: var(--radius-md); + padding: 16px; + border: 1px solid var(--divider); +} + +.scheduled-post-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 10px; + flex-wrap: wrap; + gap: 8px; +} + +.scheduled-time { + font-weight: 600; + color: var(--accent-color); + font-size: 0.9rem; +} + +.scheduled-platforms { + font-size: 0.75rem; + color: var(--text-secondary); + text-transform: uppercase; + background: var(--bg-tertiary); + padding: 3px 8px; + border-radius: 4px; + font-weight: 600; +} + +/* Photo previews in scheduled posts */ +.scheduled-photos-preview { + display: flex; + gap: 6px; + margin-bottom: 10px; + flex-wrap: wrap; + align-items: center; +} + +.scheduled-thumb { + width: 60px; + height: 60px; + object-fit: cover; + border-radius: var(--radius-sm); + border: 1px solid var(--divider); +} + +.more-photos { + display: flex; + align-items: center; + justify-content: center; + width: 60px; + height: 60px; + background: var(--bg-tertiary); + border-radius: var(--radius-sm); + font-size: 0.9rem; + font-weight: 600; + color: var(--text-secondary); +} + +.scheduled-post-content { + margin-bottom: 10px; +} + +.scheduled-text { + margin: 0 0 8px 0; + color: var(--text-primary); +} + +.scheduled-photos, +.scheduled-tags { + display: inline-block; + font-size: 0.85rem; + color: var(--text-secondary); + margin-right: 12px; +} + +.scheduled-post-actions { + display: flex; + gap: 8px; +} + +.scheduled-platforms label { + display: flex; + align-items: center; + gap: 6px; +} + +/* Inline editor for scheduled posts */ +.scheduled-post-card.editing { + border-color: var(--accent-color); + box-shadow: 0 0 0 2px rgba(var(--accent-color-rgb, 0,122,255), 0.15); +} + +.inline-editor { + display: flex; + flex-direction: column; + gap: 12px; +} + +.inline-editor-photos { + display: flex; + gap: 10px; + flex-wrap: wrap; + flex-direction: row; +} + +.inline-editor-photos .preview-thumb { + width: 80px; + height: 80px; + position: relative; + border-radius: var(--radius-sm); + overflow: hidden; + flex-shrink: 0; +} + +.inline-editor-photos .preview-thumb img { + width: 100%; + height: 100%; + object-fit: cover; +} + +.inline-editor-photos .remove-btn { + position: absolute; + top: 3px; + right: 3px; + width: 24px; + height: 24px; + border-radius: 50%; + background: rgba(220,40,40,0.85); + color: white; + border: none; + cursor: pointer; + font-size: 12px; + line-height: 1; + display: flex; + align-items: center; + justify-content: center; +} + +.inline-editor-text { + width: 100%; + padding: 10px; + border: 1px solid var(--divider); + border-radius: var(--radius-sm); + background: var(--bg-primary); + color: var(--text-primary); + font-family: inherit; + font-size: 0.95rem; + resize: vertical; + box-sizing: border-box; +} + +.inline-editor-tags { + display: flex; + flex-wrap: wrap; + gap: 6px; + align-items: center; +} + +.inline-tags-list { + display: flex; + flex-wrap: wrap; + gap: 4px; +} + +.inline-tags-input { + flex: 1; + min-width: 100px; + padding: 4px 8px; + border: 1px solid var(--divider); + border-radius: var(--radius-sm); + background: var(--bg-primary); + color: var(--text-primary); + font-size: 0.85rem; +} + +.inline-editor-row { + display: flex; + gap: 12px; + align-items: center; + flex-wrap: wrap; +} + +.inline-editor-field { + display: flex; + align-items: center; + gap: 6px; +} + +.inline-editor-field label { + font-size: 0.85rem; + color: var(--text-secondary); + white-space: nowrap; +} + +.inline-editor-actions { + display: flex; + gap: 8px; + flex-wrap: wrap; +} + +.btn-accent { + background: var(--success, #34c759); + color: white; +} + +.btn-accent:hover { + opacity: 0.9; +} + +.btn-danger { + background: var(--error); + color: white; +} + +.btn-danger:hover { + background: #c0392b; +} + +/* Photo counter on posting page */ +.photo-counter { + font-weight: 600; + font-size: 0.9em; + padding: 2px 8px; + background: var(--bg-tertiary); + border-radius: var(--radius-sm); + color: var(--text-secondary); +} + +.photo-counter.at-limit { + background: var(--error); + color: white; +} + +/* ============ Published Posts Archive ============ */ +.archive-section { + margin-top: 24px; + padding-top: 20px; + border-top: 1px solid var(--divider); +} + +.archive-header { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 12px; +} + +.archive-header h3 { + margin: 0; + font-size: 1rem; + color: var(--text-secondary); +} + +.published-posts-list { + display: flex; + flex-direction: column; + gap: 8px; +} + +.archive-post-card { + background: var(--bg-secondary); + border-radius: var(--radius-sm); + padding: 10px 12px; + border: 1px solid var(--divider); + opacity: 0.85; +} + +.archive-post-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 6px; + flex-wrap: wrap; + gap: 6px; +} + +.archive-time { + font-size: 0.8rem; + color: var(--text-secondary); +} + +.archive-results { + font-size: 0.75rem; + display: flex; + gap: 8px; +} + +.archive-results .result-success { + color: var(--success-color); +} + +.archive-results .result-error { + color: var(--error-color); +} + +.archive-photos-preview { + display: flex; + gap: 4px; + margin-bottom: 6px; + align-items: center; +} + +.archive-thumb { + width: 40px; + height: 40px; + object-fit: cover; + border-radius: 4px; + border: 1px solid var(--divider); +} + +.archive-text { + margin: 0; + font-size: 0.85rem; + color: var(--text-primary); + line-height: 1.3; +} + +/* ============ Reduced Motion ============ */ +@media (prefers-reduced-motion: reduce) { + *, + *::before, + *::after { + animation-duration: 0.01ms !important; + transition-duration: 0.01ms !important; + } +} + +/* ============ Mobile Responsive Styles ============ */ + +/* Tablet and smaller */ +@media (max-width: 1024px) { + .converter-grid { + grid-template-columns: 1fr; + } + + .platforms-grid { + grid-template-columns: repeat(2, 1fr); + } +} + +/* Mobile devices */ +@media (max-width: 768px) { + .app-container { + padding: 8px; + } + + /* Header - compact horizontal layout */ + .app-header { + flex-direction: row; + flex-wrap: wrap; + gap: 8px; + padding: 10px 12px; + justify-content: space-between; + align-items: center; + } + + .app-header h1 { + font-size: 1.1rem; + flex: 1; + min-width: 0; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + + .user-menu { + gap: 6px; + flex-shrink: 0; + } + + .user-menu .username { + display: none; + } + + .user-menu .btn { + padding: 6px 10px; + font-size: 0.8rem; + } + + .theme-toggle { + width: 36px; + height: 20px; + } + + .theme-toggle::before { + width: 16px; + height: 16px; + } + + .theme-toggle.dark::before { + transform: translateX(16px); + } + + /* Navigation - grid layout for mobile */ + .main-nav { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 4px; + padding: 6px; + margin-bottom: 12px; + } + + .nav-btn { + padding: 10px 6px; + font-size: 0.75rem; + text-align: center; + min-width: 0; + flex: none; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + + /* Make settings button span 2 columns for 5 items grid */ + .nav-btn:nth-child(4) { + grid-column: 1 / 2; + } + .nav-btn:nth-child(5) { + grid-column: 2 / 4; + } + + .panel { + padding: 12px; + border-radius: var(--radius-md); + } + + .panel h2 { + font-size: 1.1rem; + margin-bottom: 12px; + } + + .panel h3 { + font-size: 1rem; + margin: 16px 0 10px; + } + + .help-text { + font-size: 0.85rem; + margin-bottom: 12px; + } + + /* Post options grid - horizontal on mobile */ + .post-options-grid { + display: flex; + flex-wrap: wrap; + gap: 8px; + } + + .post-options-grid .form-group { + margin-bottom: 0; + flex: 1 1 auto; + min-width: 0; + } + + .post-options-grid .form-group:first-child { + flex: 1 1 100%; + } + + .checkbox-label.compact { + padding: 10px 12px; + background: var(--bg-tertiary); + border-radius: var(--radius-sm); + display: flex; + align-items: center; + gap: 8px; + font-size: 0.85rem; + white-space: nowrap; + } + + /* Platforms grid - single column on mobile */ + .platforms-grid { + grid-template-columns: 1fr; + gap: 8px; + } + + .platform-card { + padding: 10px; + } + + .platform-header { + margin-bottom: 8px; + } + + .platform-name { + font-size: 0.9rem; + } + + .platform-target { + padding: 8px 10px; + font-size: 0.85rem; + } + + /* Schedule options */ + .schedule-options { + padding: 10px; + margin-bottom: 12px; + } + + .schedule-label { + font-size: 0.9rem; + margin-bottom: 8px; + } + + .schedule-presets { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 6px; + margin-bottom: 12px; + } + + .schedule-presets .preset-btn { + padding: 10px 8px; + font-size: 0.75rem; + text-align: center; + } + + .schedule-date-row { + flex-direction: row; + gap: 8px; + } + + .schedule-field { + flex: 1; + } + + .schedule-field label { + font-size: 0.75rem; + } + + .schedule-input { + font-size: 16px; + padding: 8px 10px; + } + + .schedule-custom { + padding: 10px; + } + + /* Scheduled posts */ + .scheduled-section { + margin-top: 20px; + padding-top: 16px; + } + + .scheduled-header { + margin-bottom: 10px; + } + + .scheduled-header h3 { + font-size: 0.95rem; + margin: 0; + } + + .badge { + font-size: 0.75rem; + padding: 2px 8px; + } + + .scheduled-post-card { + padding: 10px; + } + + .scheduled-post-header { + flex-direction: row; + align-items: center; + gap: 8px; + margin-bottom: 8px; + } + + .scheduled-time { + font-size: 0.8rem; + } + + .scheduled-platforms { + font-size: 0.65rem; + padding: 2px 6px; + } + + .scheduled-photos-preview { + gap: 4px; + margin-bottom: 8px; + } + + .scheduled-thumb, + .more-photos { + width: 44px; + height: 44px; + } + + .more-photos { + font-size: 0.75rem; + } + + .scheduled-text { + font-size: 0.85rem; + margin-bottom: 6px; + } + + .scheduled-photos, + .scheduled-tags { + font-size: 0.75rem; + } + + .scheduled-post-actions { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 6px; + } + + .scheduled-post-actions .btn { + padding: 8px 4px; + font-size: 0.75rem; + justify-content: center; + } + + /* Archive section */ + .archive-section { + margin-top: 16px; + padding-top: 14px; + } + + .archive-header h3 { + font-size: 0.9rem; + } + + .archive-post-card { + padding: 8px 10px; + } + + .archive-thumb { + width: 32px; + height: 32px; + } + + .archive-text { + font-size: 0.8rem; + } + + /* Photos preview */ + .photos-preview { + display: flex; + flex-wrap: wrap; + gap: 6px; + padding: 12px; + min-height: 80px; + } + + .preview-thumb { + width: 56px; + height: 56px; + } + + /* Upload area */ + .upload-area { + flex-direction: column; + padding: 12px; + gap: 8px; + text-align: center; + } + + .upload-area .hint { + font-size: 0.75rem; + } + + .uploaded-preview { + margin-top: 6px; + } + + .uploaded-item { + width: 60px; + height: 60px; + } + + /* Text editor */ + .text-editor textarea { + min-height: 80px; + padding: 10px; + font-size: 16px; + } + + .editor-toolbar { + padding: 6px; + gap: 2px; + } + + .toolbar-btn { + width: 28px; + height: 28px; + font-size: 12px; + } + + .toolbar-separator { + margin: 0 2px; + } + + /* Tags */ + .tags-container { + padding: 6px; + } + + .tag-chip { + font-size: 0.75rem; + padding: 3px 6px; + } + + .tags-input { + font-size: 16px !important; + padding: 6px !important; + } + + .tags-presets { + flex-wrap: wrap; + gap: 4px; + margin-top: 6px; + } + + .tags-presets-label { + font-size: 0.7rem; + width: 100%; + } + + .tag-preset { + padding: 4px 8px; + font-size: 0.7rem; + } + + .preset-add-btn, + .preset-manage-btn { + width: 24px; + height: 24px; + font-size: 14px; + } + + /* Form elements */ + .form-group { + margin-bottom: 12px; + } + + .form-group label { + font-size: 0.85rem; + margin-bottom: 4px; + } + + input[type="text"], + input[type="password"], + textarea, + select { + font-size: 16px; + padding: 10px 12px; + } + + .hint { + font-size: 0.75rem; + margin-top: 4px; + } + + /* Buttons */ + .btn { + padding: 10px 16px; + font-size: 0.9rem; + } + + .btn-small { + padding: 6px 10px; + font-size: 0.8rem; + } + + .btn-large { + padding: 14px 20px; + font-size: 0.95rem; + } + + .post-actions { + gap: 8px; + margin-bottom: 16px; + } + + .post-actions .btn { + flex: 1; + } + + /* Gallery */ + .gallery-header { + flex-direction: column; + gap: 10px; + margin-bottom: 12px; + } + + .gallery-header h2 { + font-size: 1.1rem; + margin: 0; + } + + .gallery-toolbar { + width: 100%; + flex-wrap: wrap; + gap: 8px; + } + + .toolbar-search { + flex: 1; + min-width: 120px; + } + + .toolbar-search input { + padding: 8px 10px; + } + + #btn-load-albums { + padding: 8px 12px; + font-size: 0.85rem; + } + + .albums-grid { + grid-template-columns: repeat(2, 1fr); + gap: 8px; + } + + .album-card-overlay { + padding: 8px; + } + + .album-card-title { + font-size: 0.75rem; + } + + .album-card-count { + font-size: 0.6rem; + } + + .photo-gallery { + grid-template-columns: repeat(3, 1fr); + gap: 4px; + } + + .photo-item .checkbox { + width: 22px; + height: 22px; + top: 4px; + left: 4px; + } + + .photo-item .title { + padding: 6px 8px; + font-size: 0.65rem; + } + + /* Breadcrumb */ + .breadcrumb { + flex-wrap: wrap; + gap: 4px; + } + + #btn-back-to-albums { + padding: 6px 10px; + font-size: 0.85rem; + } + + .breadcrumb-current { + font-size: 0.85rem; + } + + .photos-count { + font-size: 0.75rem; + } + + #btn-download-album { + font-size: 0.75rem; + padding: 6px 10px; + } + + /* Pagination */ + .pagination { + gap: 8px; + margin-top: 12px; + } + + #page-info { + font-size: 0.85rem; + } + + /* Floating action bar - compact horizontal */ + .floating-action-bar { + flex-direction: row; + flex-wrap: wrap; + gap: 8px; + padding: 10px 12px; + bottom: 8px; + left: 8px; + right: 8px; + border-radius: 16px; + } + + .action-bar-left { + padding-right: 10px; + border-right: 1px solid var(--divider); + flex-shrink: 0; + } + + .selection-count { + font-size: 1.1rem; + } + + .selection-label { + font-size: 0.7rem; + } + + .action-bar-center, + .action-bar-right { + display: flex; + gap: 4px; + } + + .action-btn { + padding: 8px; + flex-direction: row; + gap: 0; + } + + .action-icon { + font-size: 1.2rem; + } + + .action-text { + display: none; + } + + /* Settings sections */ + .settings-section { + padding-bottom: 16px; + margin-bottom: 16px; + } + + .settings-section h3 { + font-size: 0.95rem; + } + + /* Status badges */ + .status { + padding: 4px 10px; + font-size: 0.75rem; + } + + /* Modal */ + .modal-content { + margin: 8px; + max-height: calc(100vh - 16px); + width: calc(100% - 16px); + } + + .modal-header { + padding: 12px 16px; + } + + .modal-header h3 { + font-size: 1rem; + } + + .modal-body { + padding: 16px; + } + + /* Drag hint */ + .drag-hint { + font-size: 0.75rem; + margin: 6px 0 12px; + } + + /* Lightbox mobile */ + .lightbox-image-container { + max-width: 95vw; + max-height: 60vh; + } + + .lightbox-image { + max-height: 60vh; + } + + /* Converter */ + .converter-input-section, + .converter-text-section { + gap: 10px; + } + + .output-actions { + flex-wrap: wrap; + gap: 6px; + } + + .output-actions .btn { + flex: 1 1 auto; + min-width: 100px; + } +} + +/* Small phones */ +@media (max-width: 480px) { + .app-container { + padding: 6px; + } + + .app-header { + padding: 8px 10px; + } + + .app-header h1 { + font-size: 1rem; + } + + .main-nav { + grid-template-columns: repeat(2, 1fr); + gap: 4px; + } + + /* Adjust nav buttons for 2-column grid */ + .nav-btn:nth-child(5) { + grid-column: 1 / 3; + } + + .nav-btn { + padding: 10px 4px; + font-size: 0.7rem; + } + + .panel { + padding: 10px; + } + + .panel h2 { + font-size: 1rem; + } + + .albums-grid { + grid-template-columns: repeat(2, 1fr); + gap: 6px; + } + + .photo-gallery { + grid-template-columns: repeat(2, 1fr); + gap: 4px; + } + + .scheduled-thumb, + .more-photos { + width: 40px; + height: 40px; + } + + .scheduled-post-actions { + grid-template-columns: repeat(2, 1fr); + } + + .scheduled-post-actions .btn:last-child { + grid-column: 1 / 3; + } + + .floating-action-bar { + padding: 8px 10px; + } + + .action-bar-left { + padding-right: 8px; + } + + .selection-count { + font-size: 1rem; + } + + .action-icon { + font-size: 1.1rem; + } + + .action-btn { + padding: 6px; + } +} + +/* Extra small phones */ +@media (max-width: 360px) { + .app-header h1 { + font-size: 0.9rem; + } + + .nav-btn { + font-size: 0.65rem; + padding: 8px 2px; + } + + .panel { + padding: 8px; + } + + .btn { + padding: 8px 12px; + font-size: 0.8rem; + } + + .photo-gallery { + gap: 3px; + } +} + +/* Touch devices optimization */ +@media (hover: none) and (pointer: coarse) { + .btn, + .nav-btn, + .action-btn, + .toolbar-btn { + min-height: 44px; + } + + .album-card:hover, + .photo-item:hover { + transform: none; + } + + /* Remove hover shadows on touch */ + .album-card:hover, + .platform-card:hover { + box-shadow: var(--glass-shadow); + } + + /* Better touch targets */ + .photo-item .checkbox { + width: 28px; + height: 28px; + } + + .platform-checkbox .checkmark { + width: 28px; + height: 28px; + } + + /* Visible preview button on touch */ + .photo-preview-btn { + opacity: 0.8; + } +} + +/* Landscape phones */ +@media (max-width: 768px) and (orientation: landscape) { + .main-nav { + grid-template-columns: repeat(5, 1fr); + } + + .nav-btn:nth-child(4), + .nav-btn:nth-child(5) { + grid-column: auto; + } + + .floating-action-bar { + bottom: 6px; + padding: 8px 16px; + } + + .photo-gallery { + grid-template-columns: repeat(4, 1fr); + } + + .albums-grid { + grid-template-columns: repeat(3, 1fr); + } + + .lightbox-image-container { + max-height: 80vh; + } + + .lightbox-image { + max-height: 75vh; + } +} diff --git a/data/.htaccess b/data/.htaccess new file mode 100644 index 0000000..3a42882 --- /dev/null +++ b/data/.htaccess @@ -0,0 +1 @@ +Deny from all diff --git a/debug.php b/debug.php new file mode 100644 index 0000000..9605356 --- /dev/null +++ b/debug.php @@ -0,0 +1,579 @@ + + Order Allow,Deny + Deny from all + + +# Block direct access to class files +RewriteEngine On +RewriteRule ^classes/ - [F,L] + +# Security headers (if mod_headers available) + + Header set X-Content-Type-Options "nosniff" + Header set X-Frame-Options "SAMEORIGIN" +'; + + if (file_put_contents(__DIR__ . '/.htaccess', $htaccessContent)) { + $fixResults[] = array('success', 'Created .htaccess file'); + } else { + $fixResults[] = array('error', 'Failed to create .htaccess'); + } + break; + + case 'create_config': + if (file_exists(__DIR__ . '/config.example.php')) { + if (copy(__DIR__ . '/config.example.php', __DIR__ . '/config.php')) { + @chmod(__DIR__ . '/config.php', 0644); + $fixResults[] = array('success', 'Created config.php from example'); + } else { + $fixResults[] = array('error', 'Failed to copy config.example.php'); + } + } else { + $configContent = ' [ + \'api_key\' => \'\', + \'api_secret\' => \'\', + ], + \'flickr_user_id\' => \'\', + \'telegram\' => [ + \'bot_token\' => \'\', + \'channels\' => [], + ], + \'default_size\' => \'Large\', + \'custom_formats\' => [], +];'; + if (file_put_contents(__DIR__ . '/config.php', $configContent)) { + @chmod(__DIR__ . '/config.php', 0644); + $fixResults[] = array('success', 'Created config.php'); + } else { + $fixResults[] = array('error', 'Failed to create config.php'); + } + } + break; + + case 'fix_permissions': + $files = array( + 'config.php' => 0644, + 'auth_config.php' => 0600, + '.htaccess' => 0644, + ); + foreach ($files as $file => $perm) { + $path = __DIR__ . '/' . $file; + if (file_exists($path)) { + if (@chmod($path, $perm)) { + $fixResults[] = array('success', "Fixed permissions for {$file}"); + } else { + $fixResults[] = array('error', "Failed to fix permissions for {$file}"); + } + } + } + break; + + case 'fix_auth_config_perms': + $path = __DIR__ . '/auth_config.php'; + if (file_exists($path)) { + if (@chmod($path, 0600)) { + $fixResults[] = array('success', 'Fixed auth_config.php permissions to 0600'); + } else { + $fixResults[] = array('error', 'Failed to fix auth_config.php permissions'); + } + } else { + $fixResults[] = array('info', 'auth_config.php does not exist yet'); + } + break; + + case 'delete_debug': + // Self-delete + if (@unlink(__FILE__)) { + header('Location: index.php'); + exit; + } else { + $fixResults[] = array('error', 'Failed to delete debug.php - delete manually!'); + } + break; + + case 'reset_user': + $path = __DIR__ . '/auth_config.php'; + if (file_exists($path)) { + if (@unlink($path)) { + $fixResults[] = array('success', 'Deleted auth_config.php - go to setup.php to create new user'); + } else { + $fixResults[] = array('error', 'Failed to delete auth_config.php'); + } + } else { + $fixResults[] = array('info', 'auth_config.php does not exist'); + } + break; + } +} + +// ============ HTML OUTPUT ============ +?> + + + + VH Posting System - Diagnostics + + + + +

VH Posting System - Diagnostics

+ +'; + echo '

Fix Results

'; + foreach ($fixResults as $result) { + echo '
' . htmlspecialchars($result[1]) . '
'; + } + echo ''; +} +?> + + +
+

Quick Fix Panel

+

Click buttons to automatically fix common issues:

+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +

+ +
+ + +
+ +
+ + +
+
+ +1. PHP Version"; +echo "

PHP Version: " . phpversion() . "

"; + +if (version_compare(PHP_VERSION, '7.2.0', '<')) { + echo "

WARNING: PHP 7.2+ required!

"; +} else { + echo "

OK: PHP version is compatible

"; +} + +// Required extensions +echo "

2. Required Extensions

"; +$extensions = array('curl', 'json', 'mbstring', 'session'); +foreach ($extensions as $ext) { + if (extension_loaded($ext)) { + echo "

OK: {$ext}

"; + } else { + echo "

MISSING: {$ext}

"; + } +} + +// BCMath (for base58 decoding) +echo "

"; +if (function_exists('bcmul')) { + echo "OK: bcmath"; +} else { + echo "WARNING: bcmath not available (short URLs won't work)"; +} +echo "

"; + +// Password algorithms +echo "

3. Password Hashing

"; +if (defined('PASSWORD_ARGON2ID')) { + echo "

OK: Argon2ID available

"; +} else { + echo "

INFO: Argon2ID not available, using bcrypt (OK)

"; +} + +// Config file +echo "

4. Configuration

"; +if (file_exists(__DIR__ . '/config.php')) { + echo "

OK: config.php exists

"; + + try { + $config = require __DIR__ . '/config.php'; + echo "

OK: config.php is valid PHP

"; + + if (!empty($config['flickr']['api_key'])) { + echo "

OK: Flickr API key set

"; + } else { + echo "

INFO: Flickr API key not set

"; + } + + if (!empty($config['telegram']['bot_token'])) { + echo "

OK: Telegram bot token set

"; + } else { + echo "

INFO: Telegram bot token not set

"; + } + } catch (Throwable $e) { + echo "

ERROR in config.php: " . htmlspecialchars($e->getMessage()) . "

"; + } +} else { + echo "

MISSING: config.php — use Quick Fix above!

"; +} + +// Writable directories +echo "

5. File Permissions

"; +if (is_writable(__DIR__)) { + echo "

OK: Root directory is writable

"; +} else { + echo "

ERROR: Root directory is not writable (needed for auth_config.php)

"; +} + +// Test class loading +echo "

6. Class Loading Test

"; + +$classes = array('Auth', 'FlickrParser', 'FormatGenerator', 'FlickrAPI', 'TelegramBot'); +foreach ($classes as $class) { + $file = __DIR__ . '/classes/' . $class . '.php'; + if (file_exists($file)) { + try { + require_once $file; + if (class_exists($class)) { + echo "

OK: {$class}

"; + } else { + echo "

ERROR: {$class} - file loaded but class not found

"; + } + } catch (Throwable $e) { + echo "

ERROR loading {$class}: " . htmlspecialchars($e->getMessage()) . "

"; + echo "
" . htmlspecialchars($e->getTraceAsString()) . "
"; + } + } else { + echo "

MISSING: {$file}

"; + } +} + +// Test Auth instantiation +echo "

7. Auth System Test

"; +try { + $auth = new Auth(); + echo "

OK: Auth class instantiated

"; + + if ($auth->hasUsers()) { + echo "

OK: Users exist, login page should work

"; + } else { + echo "

INFO: No users yet, setup.php should appear

"; + } +} catch (Throwable $e) { + echo "

ERROR: " . htmlspecialchars($e->getMessage()) . "

"; + echo "
" . htmlspecialchars($e->getTraceAsString()) . "
"; +} + +// Security checks +echo "

8. Security Checks

"; + +// HTTPS +$isHttps = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') || + (!empty($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') || + (!empty($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443); +if ($isHttps) { + echo "

OK: HTTPS enabled

"; +} else { + echo "

WARNING: HTTPS not detected (recommended for production)

"; +} + +// .htaccess exists +if (file_exists(__DIR__ . '/.htaccess')) { + echo "

OK: .htaccess exists

"; +} else { + echo "

WARNING: .htaccess missing — use Quick Fix above!

"; +} + +// ========== LEAK DETECTION ========== +echo "

Leak Detection (API Keys & Credentials)

"; + +// Check if sensitive files are accessible via web +$baseUrl = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? 'https' : 'http') . + '://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['REQUEST_URI']); + +$sensitiveFiles = array( + 'config.php' => 'API Keys (Flickr, Telegram)', + 'auth_config.php' => 'User passwords (hashed)', + 'config.example.php' => 'Config template', + 'classes/Auth.php' => 'Auth class source', + 'classes/FlickrAPI.php' => 'Flickr API class', + 'classes/TelegramBot.php' => 'Telegram Bot class', + '.env' => 'Environment file', + '.git/config' => 'Git config', + 'composer.json' => 'Dependencies', + 'error_log' => 'Error log', + 'debug.log' => 'Debug log', +); + +$leaksFound = 0; +foreach ($sensitiveFiles as $file => $desc) { + $testUrl = rtrim($baseUrl, '/') . '/' . $file; + + $ch = curl_init(); + curl_setopt_array($ch, array( + CURLOPT_URL => $testUrl, + CURLOPT_RETURNTRANSFER => true, + CURLOPT_TIMEOUT => 5, + CURLOPT_FOLLOWLOCATION => false, + CURLOPT_SSL_VERIFYPEER => false, + )); + $content = curl_exec($ch); + $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); + curl_close($ch); + + if ($httpCode == 403 || $httpCode == 404 || $httpCode == 500) { + echo "

OK: {$file} is protected (HTTP {$httpCode})

"; + } elseif ($httpCode == 200) { + // Check if content contains sensitive data + $hasSensitiveData = false; + if (strpos($content, 'api_key') !== false || + strpos($content, 'api_secret') !== false || + strpos($content, 'bot_token') !== false || + strpos($content, 'password_hash') !== false || + strpos($content, 'password') !== false) { + $hasSensitiveData = true; + } + + if ($hasSensitiveData) { + echo "

CRITICAL LEAK: {$file} is ACCESSIBLE and contains sensitive data! ({$desc})

"; + $leaksFound++; + } else { + echo "

WARNING: {$file} is accessible (HTTP 200) - {$desc}

"; + } + } else { + echo "

INFO: {$file} returned HTTP {$httpCode}

"; + } +} + +// Check for common info disclosure files +echo "

Information Disclosure Check

"; +$infoFiles = array( + 'phpinfo.php' => 'PHP Info page', + 'info.php' => 'PHP Info page', + 'test.php' => 'Test file', + 'readme.md' => 'Readme file', + 'README.md' => 'Readme file', + 'CHANGELOG.md' => 'Changelog', + '.htpasswd' => 'Password file', + 'backup.sql' => 'Database backup', + 'dump.sql' => 'Database dump', +); + +foreach ($infoFiles as $file => $desc) { + $path = __DIR__ . '/' . $file; + if (file_exists($path)) { + echo "

WARNING: {$file} exists - consider removing ({$desc})

"; + } +} + +// Check if secrets are exposed in JS files +echo "

Secret Exposure in Public Files

"; +$publicFiles = array( + 'js/app.js', + 'css/style.css', +); + +$secretPatterns = array( + '/api[_-]?key\s*[:=]\s*[\'"][^\'"]+[\'"]/i' => 'API Key', + '/bot[_-]?token\s*[:=]\s*[\'"][^\'"]+[\'"]/i' => 'Bot Token', + '/password\s*[:=]\s*[\'"][^\'"]+[\'"]/i' => 'Password', + '/secret\s*[:=]\s*[\'"][^\'"]+[\'"]/i' => 'Secret', +); + +foreach ($publicFiles as $file) { + $path = __DIR__ . '/' . $file; + if (file_exists($path)) { + $content = file_get_contents($path); + $foundSecrets = array(); + + foreach ($secretPatterns as $pattern => $type) { + if (preg_match($pattern, $content)) { + $foundSecrets[] = $type; + } + } + + if (!empty($foundSecrets)) { + echo "

DANGER: {$file} may contain: " . implode(', ', $foundSecrets) . "

"; + $leaksFound++; + } else { + echo "

OK: {$file} - no secrets found

"; + } + } +} + +// Check config.php for exposed secrets (verify it's not outputting) +if (file_exists(__DIR__ . '/config.php')) { + $configContent = file_get_contents(__DIR__ . '/config.php'); + + // Check if config has echo/print statements + if (preg_match('/(echo|print|var_dump|print_r)\s*\(/i', $configContent)) { + echo "

DANGER: config.php contains output statements!

"; + $leaksFound++; + } else { + echo "

OK: config.php has no output statements

"; + } + + // Check if config returns array (proper format) + if (strpos($configContent, 'return') !== false) { + echo "

OK: config.php uses return statement (good)

"; + } else { + echo "

WARNING: config.php may not return array properly

"; + } +} + +// Summary +if ($leaksFound > 0) { + echo "
"; + echo "SECURITY ALERT: {$leaksFound} potential leak(s) detected!"; + echo "

Use Quick Fix buttons above or manually fix the issues.

"; + echo "
"; +} else { + echo "

No critical leaks detected.

"; +} + +// File permissions +echo "

File Permissions

"; +$checkPerms = array( + 'config.php' => '0600 or 0644', + 'auth_config.php' => '0600', + '.htaccess' => '0644', +); + +foreach ($checkPerms as $file => $recommended) { + $path = __DIR__ . '/' . $file; + if (file_exists($path)) { + $perms = substr(sprintf('%o', fileperms($path)), -4); + $worldReadable = (fileperms($path) & 0x0004); + + if ($file === 'auth_config.php' && $worldReadable) { + echo "

WARNING: {$file} is world-readable ({$perms}), recommended: {$recommended}

"; + } else { + echo "

OK: {$file} permissions: {$perms}

"; + } + } +} + +// PHP security settings +echo "

PHP Security Settings

"; +echo "

These are hosting settings - may not be changeable on shared hosting

"; + +$securitySettings = array( + 'expose_php' => array('recommended' => '0', 'desc' => 'Hide PHP version'), + 'display_errors' => array('recommended' => '0', 'desc' => 'Hide errors in production'), + 'allow_url_include' => array('recommended' => '0', 'desc' => 'Prevent remote file inclusion'), + 'session.cookie_httponly' => array('recommended' => '1', 'desc' => 'Protect session cookie'), + 'session.cookie_secure' => array('recommended' => '1', 'desc' => 'HTTPS-only cookies'), + 'session.use_strict_mode' => array('recommended' => '1', 'desc' => 'Strict session mode'), +); + +foreach ($securitySettings as $setting => $info) { + $value = ini_get($setting); + $valueStr = ($value === '' || $value === '0' || $value === false) ? '0' : '1'; + + if ($valueStr === $info['recommended']) { + echo "

OK: {$setting} = {$valueStr} ({$info['desc']})

"; + } else { + echo "

INFO: {$setting} = {$valueStr}, recommended: {$info['recommended']} ({$info['desc']})

"; + } +} + +// Cryptographic Functions +echo "

Cryptographic Functions

"; +if (function_exists('random_bytes')) { + try { + $test = random_bytes(32); + echo "

OK: random_bytes() works

"; + } catch (Exception $e) { + echo "

ERROR: random_bytes() failed

"; + } +} else { + echo "

WARNING: random_bytes() not available

"; +} + +if (function_exists('openssl_random_pseudo_bytes')) { + echo "

OK: openssl_random_pseudo_bytes() available

"; +} else { + echo "

WARNING: openssl_random_pseudo_bytes() not available

"; +} + +if (function_exists('password_hash')) { + echo "

OK: password_hash() available

"; +} else { + echo "

ERROR: password_hash() not available!

"; +} + +// Server info (be careful not to expose too much) +echo "

9. Server Info

"; +echo "

Server software: " . htmlspecialchars(isset($_SERVER['SERVER_SOFTWARE']) ? $_SERVER['SERVER_SOFTWARE'] : 'Unknown') . "

"; +echo "

Document root: " . htmlspecialchars(isset($_SERVER['DOCUMENT_ROOT']) ? $_SERVER['DOCUMENT_ROOT'] : 'Unknown') . "

"; +echo "

Script path: " . htmlspecialchars(__DIR__) . "

"; + +echo "
"; +echo "

If all green: Use 'Delete debug.php & Go to Site' button above

"; +echo "

If errors: Use Quick Fix buttons, then refresh this page

"; +echo "

IMPORTANT: Delete this file after debugging!

"; +?> + + + diff --git a/debug_urls.php b/debug_urls.php new file mode 100644 index 0000000..2ba2349 --- /dev/null +++ b/debug_urls.php @@ -0,0 +1,111 @@ + $url, + CURLOPT_NOBODY => true, // HEAD request + CURLOPT_RETURNTRANSFER => true, + CURLOPT_FOLLOWLOCATION => true, + CURLOPT_TIMEOUT => 10, + CURLOPT_USERAGENT => 'Mozilla/5.0', + CURLOPT_HTTPHEADER => ['Referer: https://www.flickr.com/'], + ]); + curl_exec($ch); + $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); + $size = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD); + curl_close($ch); + + $sizeStr = $size > 0 ? formatSize($size) : '?'; + return ['status' => $httpCode, 'size' => $sizeStr, 'bytes' => $size]; +} + +function formatSize($bytes) { + if ($bytes >= 1048576) return round($bytes / 1048576, 1) . ' MB'; + if ($bytes >= 1024) return round($bytes / 1024) . ' KB'; + return $bytes . ' B'; +} + +$flickr = new FlickrAPI( + $config['flickr']['api_key'], + $config['flickr']['api_secret'] ?? '', + $config['flickr_user_id'] ?? '' +); + +echo "=== Testing Flickr URL Formats ===\n\n"; + +// Get one album +$albums = $flickr->getPhotosets(1, 1); +if (empty($albums)) { + die("No albums found\n"); +} + +$albumId = $albums[0]['id']; +$albumTitle = $albums[0]['title']['_content'] ?? 'Unknown'; +echo "Album: $albumTitle (ID: $albumId)\n\n"; + +// Get photos from album +$result = $flickr->getPhotosetPhotos($albumId, 1, 3); + +if (empty($result['photos'])) { + die("No photos in album\n"); +} + +foreach ($result['photos'] as $i => $photo) { + echo "--- Photo " . ($i + 1) . " ---\n"; + echo "ID: " . $photo['id'] . "\n"; + echo "Title: " . $photo['title'] . "\n"; + echo "Server: " . $photo['server'] . "\n"; + echo "Secret: " . $photo['secret'] . "\n"; + echo "Original Secret: " . $photo['original_secret'] . "\n"; + echo "Original Format: " . $photo['original_format'] . "\n"; + + echo "\nURLs (with sizes):\n"; + + // Test each URL size + $sizes = ['medium640', 'large', 'large2048', 'original']; + foreach ($sizes as $size) { + $url = $photo['urls'][$size] ?? null; + if ($url) { + $info = checkUrl($url); + $status = $info['status'] == 200 ? '✓' : '✗ ' . $info['status']; + echo " $size: $status - {$info['size']}\n"; + echo " $url\n"; + } else { + echo " $size: (not available)\n"; + } + } + + // If original secret differs from secret, note it + if ($photo['original_secret'] !== $photo['secret']) { + echo "\n *** Original secret is DIFFERENT - originals should be accessible ***\n"; + } else { + echo "\n Note: Original secret = Secret (originals may not be enabled in Flickr settings)\n"; + } + + echo "\n"; +} + +echo "=== Summary ===\n"; +echo "If 'original' shows ✗ 403 or ✗ 404:\n"; +echo " -> Enable original downloads in Flickr: Settings > Privacy > Allow downloads\n"; +echo "If 'original' shows ✓ with large size:\n"; +echo " -> Downloads should work at full quality!\n"; diff --git a/image.png b/image.png new file mode 100644 index 0000000000000000000000000000000000000000..4c5e42f10ce7521b91e936ff8ffaaac969e06d81 GIT binary patch literal 658920 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

Нажмите кнопку выше чтобы добавить фото

'; + return; + } + + postPhotosPreview.innerHTML = ''; + + // Render Flickr photos + state.selectedPhotos.forEach((photo, index) => { + const div = document.createElement('div'); + div.className = 'preview-thumb'; + div.innerHTML = ` + ${escapeHtml(photo.title)} + + flickr + `; + postPhotosPreview.appendChild(div); + }); + + // Render uploaded files + state.uploadedFiles.forEach((file) => { + const div = document.createElement('div'); + const isVideo = file.type.startsWith('video/'); + div.className = 'preview-thumb' + (file.uploading ? ' uploading' : ''); + div.innerHTML = ` + ${isVideo + ? `` + : `${escapeHtml(file.name)}` + } + ${file.uploading ? '
' : ''} + + файл + `; + postPhotosPreview.appendChild(div); + }); + + // Attach remove handlers for Flickr photos + postPhotosPreview.querySelectorAll('.remove-btn[data-source="flickr"]').forEach(btn => { + btn.addEventListener('click', (e) => { + e.stopPropagation(); + const index = parseInt(btn.dataset.index); + state.selectedPhotos.splice(index, 1); + updatePostingPreview(); + updateSelectionUI(); + syncGallerySelection(); + saveSelectedPhotos(); + }); + }); + + // Attach remove handlers for uploaded files + postPhotosPreview.querySelectorAll('.remove-btn[data-source="upload"]').forEach(btn => { + btn.addEventListener('click', (e) => { + e.stopPropagation(); + const id = btn.dataset.id; + state.uploadedFiles = state.uploadedFiles.filter(f => f.id !== id); + updatePostingPreview(); + saveUploadedFiles(); + }); + }); + } + + function syncGallerySelection() { + document.querySelectorAll('.photo-item').forEach(item => { + const photoId = item.dataset.photoId; + if (state.selectedPhotos.find(p => p.id === photoId)) { + item.classList.add('selected'); + } else { + item.classList.remove('selected'); + } + }); + } + + // ============ TAB NAVIGATION ============ + + const navBtns = document.querySelectorAll('.nav-btn'); + const tabContents = document.querySelectorAll('.tab-content'); + + navBtns.forEach(btn => { + btn.addEventListener('click', () => { + const tabId = btn.dataset.tab; + + navBtns.forEach(b => b.classList.remove('active')); + tabContents.forEach(t => t.classList.remove('active')); + + btn.classList.add('active'); + document.getElementById('tab-' + tabId)?.classList.add('active'); + + // Load data when switching tabs + if (tabId === 'gallery') { + // Albums are loaded on button click now + // But if we have cache, render it + if (window._cachedAlbums && albumsGrid) { + renderAlbumsGrid(window._cachedAlbums); + } + } else if (tabId === 'posting') { + updatePostingPreview(); + loadTelegramStatus(); + loadVKStatus(); + } else if (tabId === 'settings') { + loadTelegramStatus(); + loadVKStatus(); + } + }); + }); + + // ============ LINK CONVERTER ============ + + const btnConvert = document.getElementById('btn-convert'); + const btnCopy = document.getElementById('btn-copy'); + const inputUrls = document.getElementById('input-urls'); + const outputResult = document.getElementById('output-result'); + + btnConvert?.addEventListener('click', async () => { + const urls = inputUrls?.value.trim(); + if (!urls) { + showNotification('Введите ссылки Flickr', 'error'); + return; + } + + btnConvert.disabled = true; + btnConvert.textContent = 'Конвертация...'; + + try { + const formData = new FormData(); + formData.append('action', 'convert'); + formData.append('urls', urls); + formData.append('size', document.getElementById('image-size')?.value || 'Large'); + formData.append('format', document.getElementById('output-format')?.value || 'bbcode'); + + const response = await fetch('api.php', { method: 'POST', body: formData }); + const data = await response.json(); + + if (data.error) { + showNotification('Ошибка: ' + data.error, 'error'); + } else { + if (outputResult) outputResult.value = data.output; + showNotification('Конвертация завершена', 'success'); + } + } catch (error) { + showNotification('Ошибка: ' + error.message, 'error'); + } finally { + btnConvert.disabled = false; + btnConvert.textContent = 'Конвертировать'; + } + }); + + btnCopy?.addEventListener('click', () => { + outputResult?.select(); + document.execCommand('copy'); + if (btnCopy) { + btnCopy.textContent = 'Скопировано!'; + setTimeout(() => btnCopy.textContent = 'Скопировать', 2000); + } + }); + + // ============ FLICKR GALLERY (Albums Grid + Photos View) ============ + + // DOM Elements + const albumsView = document.getElementById('albums-view'); + const photosView = document.getElementById('photos-view'); + const albumsGrid = document.getElementById('albums-grid'); + const btnLoadAlbums = document.getElementById('btn-load-albums'); + const searchAlbums = document.getElementById('search-albums'); + const searchPhotos = document.getElementById('search-photos'); + const btnBackToAlbums = document.getElementById('btn-back-to-albums'); + const currentAlbumTitle = document.getElementById('current-album-title'); + const photosCountEl = document.getElementById('photos-count'); + const btnPrevPage = document.getElementById('btn-prev-page'); + const btnNextPage = document.getElementById('btn-next-page'); + const pageInfo = document.getElementById('page-info'); + const dragHint = document.getElementById('drag-hint'); + + // Drag state + let draggedAlbum = null; + let draggedElement = null; + + // ============ ALBUMS GRID ============ + + function renderAlbumsGrid(albums, filterText = '') { + if (!albumsGrid) return; + + // Apply order from preferences + const prefs = getAlbumPrefs(); + let orderedAlbums = [...albums]; + + // Sort by saved order if available + if (prefs.order && prefs.order.length > 0) { + const orderMap = new Map(prefs.order.map((id, idx) => [id, idx])); + orderedAlbums.sort((a, b) => { + const aIdx = orderMap.has(a.id) ? orderMap.get(a.id) : 9999; + const bIdx = orderMap.has(b.id) ? orderMap.get(b.id) : 9999; + return aIdx - bIdx; + }); + } + + // Filter by search text + if (filterText) { + const lower = filterText.toLowerCase(); + orderedAlbums = orderedAlbums.filter(a => { + const title = (a.title?._content || a.title || '').toLowerCase(); + return title.includes(lower); + }); + } + + if (orderedAlbums.length === 0) { + albumsGrid.innerHTML = '

Альбомы не найдены

'; + if (dragHint) dragHint.classList.add('hidden'); + return; + } + + if (dragHint) dragHint.classList.remove('hidden'); + + albumsGrid.innerHTML = ''; + orderedAlbums.forEach(album => { + const card = createAlbumCard(album); + albumsGrid.appendChild(card); + }); + } + + function createAlbumCard(album) { + const card = document.createElement('div'); + card.className = 'album-card'; + card.dataset.albumId = album.id; + card.draggable = true; + + const title = album.title?._content || album.title || 'Без названия'; + const count = album.photos || 0; + const coverUrl = album.primary_photo_extras?.url_m || + album.primary_photo_extras?.url_s || + album.primary_photo_extras?.url_sq || + null; + + card.innerHTML = ` + ${coverUrl + ? `${escapeHtml(title)}` + : `
📁
` + } +
+
${escapeHtml(title)}
+
${count} фото
+
+
⋮⋮
+ `; + + // Click to open album + card.addEventListener('click', (e) => { + if (e.target.closest('.album-card-drag-handle')) return; + openAlbum(album); + }); + + // Drag events + card.addEventListener('dragstart', handleDragStart); + card.addEventListener('dragend', handleDragEnd); + card.addEventListener('dragover', handleDragOver); + card.addEventListener('dragenter', handleDragEnter); + card.addEventListener('dragleave', handleDragLeave); + card.addEventListener('drop', handleDrop); + + return card; + } + + // ============ DRAG AND DROP ============ + + function handleDragStart(e) { + draggedElement = e.currentTarget; + draggedAlbum = e.currentTarget.dataset.albumId; + e.currentTarget.classList.add('dragging'); + e.dataTransfer.effectAllowed = 'move'; + e.dataTransfer.setData('text/plain', draggedAlbum); + } + + function handleDragEnd(e) { + e.currentTarget.classList.remove('dragging'); + document.querySelectorAll('.album-card.drag-over').forEach(el => { + el.classList.remove('drag-over'); + }); + draggedElement = null; + draggedAlbum = null; + } + + function handleDragOver(e) { + e.preventDefault(); + e.dataTransfer.dropEffect = 'move'; + } + + function handleDragEnter(e) { + e.preventDefault(); + if (e.currentTarget !== draggedElement) { + e.currentTarget.classList.add('drag-over'); + } + } + + function handleDragLeave(e) { + e.currentTarget.classList.remove('drag-over'); + } + + function handleDrop(e) { + e.preventDefault(); + const targetCard = e.currentTarget; + targetCard.classList.remove('drag-over'); + + if (!draggedElement || targetCard === draggedElement) return; + + const targetId = targetCard.dataset.albumId; + const sourceId = draggedAlbum; + + // Get current order from DOM + const cards = Array.from(albumsGrid.querySelectorAll('.album-card')); + const currentOrder = cards.map(c => c.dataset.albumId); + + const sourceIdx = currentOrder.indexOf(sourceId); + const targetIdx = currentOrder.indexOf(targetId); + + if (sourceIdx === -1 || targetIdx === -1) return; + + // Move element in DOM + if (sourceIdx < targetIdx) { + targetCard.parentNode.insertBefore(draggedElement, targetCard.nextSibling); + } else { + targetCard.parentNode.insertBefore(draggedElement, targetCard); + } + + // Save new order + const newOrder = Array.from(albumsGrid.querySelectorAll('.album-card')) + .map(c => c.dataset.albumId); + saveAlbumOrder(newOrder); + + showNotification('Порядок альбомов сохранён', 'success'); + } + + function saveAlbumOrder(order) { + const prefs = getAlbumPrefs(); + prefs.order = order; + saveAlbumPrefs(prefs); + } + + // ============ ALBUM NAVIGATION ============ + + function openAlbum(album) { + state.currentAlbum = album.id; + state.currentPage = 1; + + // Update UI + if (currentAlbumTitle) { + currentAlbumTitle.textContent = album.title?._content || album.title || 'Альбом'; + } + + // Switch views + albumsView?.classList.add('hidden'); + photosView?.classList.remove('hidden'); + + // Load photos + loadPhotos(); + } + + function closeAlbum() { + state.currentAlbum = ''; + state.currentPage = 1; + + // Switch views + photosView?.classList.add('hidden'); + albumsView?.classList.remove('hidden'); + + // Clear search + if (searchPhotos) searchPhotos.value = ''; + + // Silently refresh albums in background + refreshAlbumsSilently(); + } + + // Refresh albums in background without showing loading to user + async function refreshAlbumsSilently() { + if (state.isLoadingAlbums) return; + + try { + const response = await fetch('api.php?action=flickr_albums'); + if (!response.ok) return; + + const data = await response.json(); + if (data.albums && data.albums.length > 0) { + setAlbumCache(data.albums); + window._cachedAlbums = data.albums; + // Only re-render if on albums view (photos view is hidden) + if (photosView?.classList.contains('hidden')) { + renderAlbumsGrid(data.albums); + } + } + } catch (error) { + console.log('Silent refresh failed:', error.message); + } + } + + // ============ LOAD ALBUMS (with infinite scroll) ============ + + async function loadAlbums(forceRefresh = false) { + console.log('loadAlbums called, forceRefresh:', forceRefresh); + + // Check if albumsGrid exists + if (!albumsGrid) { + console.error('albumsGrid element not found!'); + showNotification('Ошибка: элемент галереи не найден', 'error'); + return; + } + + if (state.isLoadingAlbums) { + console.log('Albums already loading, skipping...'); + showNotification('Альбомы уже загружаются...', 'info'); + return; + } + + // Reset pagination state + state.albumsPage = 1; + state.albumsTotalPages = 1; + state.allAlbums = []; + + // Check cache first + if (!forceRefresh) { + const cached = getAlbumCache(); + if (cached && cached.albums) { + console.log('Using cached albums:', cached.albums.length); + state.allAlbums = cached.albums; + state.albumsPage = cached.page || 1; + state.albumsTotalPages = cached.pages || 1; + state.albumsTotal = cached.total || cached.albums.length; + window._cachedAlbums = cached.albums; + renderAlbumsGrid(cached.albums); + showNotification(`Загружено ${cached.albums.length} альбомов (из кеша)`, 'success'); + setupAlbumsInfiniteScroll(); + return; + } else if (cached && Array.isArray(cached)) { + // Old cache format compatibility + console.log('Using old cached albums:', cached.length); + state.allAlbums = cached; + window._cachedAlbums = cached; + renderAlbumsGrid(cached); + showNotification(`Загружено ${cached.length} альбомов (из кеша)`, 'success'); + return; + } + } + + // Cancel previous request + if (albumAbortController) { + albumAbortController.abort(); + } + albumAbortController = new AbortController(); + + state.isLoadingAlbums = true; + state.albumRequestId++; + const thisRequestId = state.albumRequestId; + + // Show loading state + albumsGrid.innerHTML = ` +
+
+ Загрузка альбомов с Flickr... +
+ `; + if (dragHint) dragHint.classList.add('hidden'); + + // Also update button state + if (btnLoadAlbums) { + btnLoadAlbums.disabled = true; + btnLoadAlbums.innerHTML = ' Загрузка...'; + } + + try { + console.log('Fetching albums from API...'); + + // Add timeout + const timeoutId = setTimeout(() => { + albumAbortController.abort(); + console.error('Request timed out after 30 seconds'); + }, 30000); + + const response = await fetch(`api.php?action=flickr_albums&page=1&per_page=50`, { + signal: albumAbortController.signal + }); + + clearTimeout(timeoutId); + + console.log('API response status:', response.status); + + if (!response.ok) { + throw new Error(`HTTP ${response.status}: ${response.statusText}`); + } + + if (thisRequestId !== state.albumRequestId) { + console.log('Album request superseded'); + return; + } + + const data = await response.json(); + console.log('API response data:', data); + + if (data.error) { + throw new Error(data.error); + } + + if (data.albums && data.albums.length > 0) { + state.allAlbums = data.albums; + state.albumsPage = data.page || 1; + state.albumsTotalPages = data.pages || 1; + state.albumsTotal = data.total || data.albums.length; + + // Save to cache with pagination info + setAlbumCache({ + albums: data.albums, + page: state.albumsPage, + pages: state.albumsTotalPages, + total: state.albumsTotal + }); + window._cachedAlbums = data.albums; + renderAlbumsGrid(data.albums); + + const hasMore = state.albumsPage < state.albumsTotalPages; + const totalInfo = state.albumsTotal > data.albums.length + ? ` (${data.albums.length} из ${state.albumsTotal})` + : ''; + showNotification(`Загружено ${data.albums.length} альбомов${totalInfo}`, 'success'); + + // Setup infinite scroll if there are more pages + if (hasMore) { + setupAlbumsInfiniteScroll(); + } + } else { + albumsGrid.innerHTML = '

Альбомы не найдены. Проверьте настройки Flickr API.

'; + showNotification('Альбомы не найдены', 'error'); + } + } catch (error) { + if (error.name === 'AbortError') { + console.log('Request aborted'); + albumsGrid.innerHTML = ` +
+

⏱️

+

Превышено время ожидания. Flickr API не отвечает.

+ +
+ `; + showNotification('Таймаут: сервер не отвечает', 'error'); + return; + } + console.error('Ошибка загрузки альбомов:', error); + albumsGrid.innerHTML = ` +
+

⚠️

+

Ошибка загрузки: ${escapeHtml(error.message)}

+ +
+ `; + showNotification('Ошибка: ' + error.message, 'error'); + } finally { + state.isLoadingAlbums = false; + if (btnLoadAlbums) { + btnLoadAlbums.disabled = false; + btnLoadAlbums.innerHTML = ' Загрузить альбомы'; + } + } + } + + // Load more albums (infinite scroll) + async function loadMoreAlbums() { + if (state.isLoadingMoreAlbums || state.albumsPage >= state.albumsTotalPages) { + return; + } + + state.isLoadingMoreAlbums = true; + const nextPage = state.albumsPage + 1; + + // Show loading indicator at bottom + const loadingEl = document.createElement('div'); + loadingEl.className = 'albums-loading-more'; + loadingEl.innerHTML = ` +
+ Загрузка альбомов... + `; + albumsGrid.appendChild(loadingEl); + + try { + const response = await fetch(`api.php?action=flickr_albums&page=${nextPage}&per_page=50`); + const data = await response.json(); + + // Remove loading indicator + loadingEl.remove(); + + if (data.error) { + throw new Error(data.error); + } + + if (data.albums && data.albums.length > 0) { + state.albumsPage = data.page; + state.allAlbums = [...state.allAlbums, ...data.albums]; + window._cachedAlbums = state.allAlbums; + + // Update cache + setAlbumCache({ + albums: state.allAlbums, + page: state.albumsPage, + pages: state.albumsTotalPages, + total: state.albumsTotal + }); + + // Append new albums to grid + appendAlbumsToGrid(data.albums); + + console.log(`Loaded page ${nextPage}/${state.albumsTotalPages}, total albums: ${state.allAlbums.length}`); + } + } catch (error) { + loadingEl.remove(); + console.error('Error loading more albums:', error); + showNotification('Ошибка загрузки альбомов: ' + error.message, 'error'); + } finally { + state.isLoadingMoreAlbums = false; + } + } + + // Append albums to existing grid + function appendAlbumsToGrid(albums) { + albums.forEach(album => { + const card = createAlbumCard(album); + albumsGrid.appendChild(card); + }); + + if (dragHint && state.allAlbums.length > 1) { + dragHint.classList.remove('hidden'); + } + } + + // Setup infinite scroll observer for albums + let albumsScrollObserver = null; + + function setupAlbumsInfiniteScroll() { + // Remove existing observer + if (albumsScrollObserver) { + albumsScrollObserver.disconnect(); + } + + // Create sentinel element + let sentinel = document.getElementById('albums-scroll-sentinel'); + if (!sentinel) { + sentinel = document.createElement('div'); + sentinel.id = 'albums-scroll-sentinel'; + sentinel.style.cssText = 'height: 20px; grid-column: 1/-1;'; + } + + // Append sentinel after grid + if (albumsGrid && albumsGrid.parentNode) { + // Insert after albumsGrid + albumsGrid.parentNode.insertBefore(sentinel, albumsGrid.nextSibling); + } + + // Create intersection observer + albumsScrollObserver = new IntersectionObserver((entries) => { + entries.forEach(entry => { + if (entry.isIntersecting && !state.isLoadingMoreAlbums && state.albumsPage < state.albumsTotalPages) { + console.log('Albums sentinel visible, loading more...'); + loadMoreAlbums(); + } + }); + }, { + root: null, + rootMargin: '200px', + threshold: 0 + }); + + albumsScrollObserver.observe(sentinel); + } + + // ============ LOAD PHOTOS (with infinite scroll) ============ + + async function loadPhotos() { + if (!photoGallery) return; + + if (photoAbortController) { + photoAbortController.abort(); + } + photoAbortController = new AbortController(); + + // Reset state for new load + state.currentPage = 1; + state.totalPages = 1; + state.allPhotos = []; + state.isLoadingPhotos = true; + state.photoRequestId++; + const thisRequestId = state.photoRequestId; + + photoGallery.innerHTML = ` +
+
+ Загрузка фотографий... +
+ `; + + try { + const params = new URLSearchParams({ + action: 'flickr_photos', + page: 1, + per_page: 50 + }); + + if (state.currentAlbum) params.append('album_id', state.currentAlbum); + if (searchPhotos?.value.trim()) params.append('search', searchPhotos.value.trim()); + + const response = await fetch('api.php?' + params, { + signal: photoAbortController.signal + }); + + if (thisRequestId !== state.photoRequestId) { + console.log('Photo request superseded'); + return; + } + + const data = await response.json(); + + if (data.error) { + photoGallery.innerHTML = `

Ошибка: ${data.error}

`; + return; + } + + state.totalPages = data.pagination?.pages || 1; + state.currentPage = data.pagination?.page || 1; + const totalPhotos = data.pagination?.total || 0; + updatePagination(); + + if (photosCountEl) { + photosCountEl.textContent = `${totalPhotos} фото`; + } + + if (!data.photos || data.photos.length === 0) { + photoGallery.innerHTML = '

Фотографии не найдены

'; + return; + } + + state.allPhotos = data.photos; + photoGallery.innerHTML = ''; + renderPhotos(data.photos); + + // Setup infinite scroll if there are more pages + if (state.currentPage < state.totalPages) { + setupPhotosInfiniteScroll(); + } + + } catch (error) { + if (error.name === 'AbortError') return; + photoGallery.innerHTML = `

Ошибка: ${error.message}

`; + showNotification('Ошибка загрузки фотографий', 'error'); + } finally { + state.isLoadingPhotos = false; + } + } + + // Render photos to gallery + function renderPhotos(photos, append = false) { + if (!append) { + photoGallery.innerHTML = ''; + } + + photos.forEach(photo => { + const div = document.createElement('div'); + div.className = 'photo-item'; + if (photo.is_video) { + div.classList.add('is-video'); + } + div.dataset.photoId = photo.id; + div.dataset.photoData = JSON.stringify(photo); + + if (state.selectedPhotos.find(p => p.id === photo.id)) { + div.classList.add('selected'); + } + + const videoBadge = photo.is_video ? '
' : ''; + + div.innerHTML = ` +
+ ${videoBadge} + ${escapeHtml(photo.title)} +
${escapeHtml(photo.title)}
+ + `; + + // Checkbox click = toggle selection + div.querySelector('.checkbox').addEventListener('click', (e) => { + e.stopPropagation(); + togglePhotoSelection(div, photo); + }); + + // Image click = open lightbox + div.querySelector('img').addEventListener('click', (e) => { + e.stopPropagation(); + openLightbox(photo); + }); + + // Preview button = open lightbox + div.querySelector('.photo-preview-btn').addEventListener('click', (e) => { + e.stopPropagation(); + openLightbox(photo); + }); + + // Background click = toggle selection + div.addEventListener('click', () => togglePhotoSelection(div, photo)); + + photoGallery.appendChild(div); + }); + } + + // Load more photos (infinite scroll) + async function loadMorePhotos() { + if (state.isLoadingMorePhotos || state.currentPage >= state.totalPages) { + return; + } + + state.isLoadingMorePhotos = true; + const nextPage = state.currentPage + 1; + + // Show loading indicator at bottom + const loadingEl = document.createElement('div'); + loadingEl.className = 'photos-loading-more'; + loadingEl.innerHTML = ` +
+ Загрузка фотографий... + `; + photoGallery.appendChild(loadingEl); + + try { + const params = new URLSearchParams({ + action: 'flickr_photos', + page: nextPage, + per_page: 50 + }); + + if (state.currentAlbum) params.append('album_id', state.currentAlbum); + if (searchPhotos?.value.trim()) params.append('search', searchPhotos.value.trim()); + + const response = await fetch('api.php?' + params); + const data = await response.json(); + + // Remove loading indicator + loadingEl.remove(); + + if (data.error) { + throw new Error(data.error); + } + + if (data.photos && data.photos.length > 0) { + state.currentPage = data.pagination?.page || nextPage; + state.allPhotos = [...state.allPhotos, ...data.photos]; + + // Append new photos + renderPhotos(data.photos, true); + updatePagination(); + + console.log(`Loaded photos page ${nextPage}/${state.totalPages}, total: ${state.allPhotos.length}`); + } + } catch (error) { + loadingEl.remove(); + console.error('Error loading more photos:', error); + showNotification('Ошибка загрузки фотографий: ' + error.message, 'error'); + } finally { + state.isLoadingMorePhotos = false; + } + } + + // Setup infinite scroll observer for photos + let photosScrollObserver = null; + + function setupPhotosInfiniteScroll() { + // Remove existing observer + if (photosScrollObserver) { + photosScrollObserver.disconnect(); + } + + // Create sentinel element + let sentinel = document.getElementById('photos-scroll-sentinel'); + if (!sentinel) { + sentinel = document.createElement('div'); + sentinel.id = 'photos-scroll-sentinel'; + sentinel.style.cssText = 'height: 20px; width: 100%; clear: both;'; + } + + // Append sentinel after gallery + if (photoGallery && photoGallery.parentNode) { + photoGallery.parentNode.insertBefore(sentinel, photoGallery.nextSibling); + } + + // Create intersection observer + photosScrollObserver = new IntersectionObserver((entries) => { + entries.forEach(entry => { + if (entry.isIntersecting && !state.isLoadingMorePhotos && state.currentPage < state.totalPages) { + console.log('Photos sentinel visible, loading more...'); + loadMorePhotos(); + } + }); + }, { + root: null, + rootMargin: '300px', + threshold: 0 + }); + + photosScrollObserver.observe(sentinel); + } + + function togglePhotoSelection(element, photo) { + const index = state.selectedPhotos.findIndex(p => p.id === photo.id); + + if (index === -1) { + if (!canAddPhotos(1)) return; + state.selectedPhotos.push(photo); + element.classList.add('selected'); + } else { + state.selectedPhotos.splice(index, 1); + element.classList.remove('selected'); + } + + updateSelectionUI(); + saveSelectedPhotos(); // Save to localStorage + } + + function updatePagination() { + // Show loaded/total info for infinite scroll + const loaded = state.allPhotos.length; + const total = state.totalPages * 50; // Approximate total + if (pageInfo) { + if (state.currentPage < state.totalPages) { + pageInfo.textContent = `Загружено: ${loaded}`; + } else { + pageInfo.textContent = `Все фото загружены`; + } + } + // Hide old pagination buttons (infinite scroll replaces them) + if (btnPrevPage) btnPrevPage.style.display = 'none'; + if (btnNextPage) btnNextPage.style.display = 'none'; + } + + // ============ EVENT LISTENERS ============ + + // Load albums button + if (btnLoadAlbums) { + console.log('btnLoadAlbums found, attaching click listener'); + btnLoadAlbums.addEventListener('click', () => { + console.log('Load albums button clicked!'); + loadAlbums(true); + }); + } else { + console.error('btnLoadAlbums element not found! Check ID: btn-load-albums'); + } + + // Back to albums + btnBackToAlbums?.addEventListener('click', closeAlbum); + + // Search albums + let albumSearchTimeout; + searchAlbums?.addEventListener('input', () => { + clearTimeout(albumSearchTimeout); + albumSearchTimeout = setTimeout(() => { + if (window._cachedAlbums) { + renderAlbumsGrid(window._cachedAlbums, searchAlbums.value.trim()); + } + }, 300); + }); + + // Search photos + let photoSearchTimeout; + searchPhotos?.addEventListener('input', () => { + clearTimeout(photoSearchTimeout); + photoSearchTimeout = setTimeout(() => { + state.currentPage = 1; + loadPhotos(); + }, 500); + }); + + // Pagination + btnPrevPage?.addEventListener('click', () => { + if (state.currentPage > 1) { + state.currentPage--; + loadPhotos(); + } + }); + + btnNextPage?.addEventListener('click', () => { + if (state.currentPage < state.totalPages) { + state.currentPage++; + loadPhotos(); + } + }); + + // ============ FLOATING ACTION BAR ============ + + document.getElementById('btn-select-all')?.addEventListener('click', () => { + document.querySelectorAll('.photo-item').forEach(item => { + if (getTotalPhotosCount() >= MAX_PHOTOS) return; + const photo = JSON.parse(item.dataset.photoData); + if (!state.selectedPhotos.find(p => p.id === photo.id)) { + state.selectedPhotos.push(photo); + item.classList.add('selected'); + } + }); + if (getTotalPhotosCount() >= MAX_PHOTOS) { + showNotification(`Выбрано максимум ${MAX_PHOTOS} фото`, 'info'); + } + updateSelectionUI(); + saveSelectedPhotos(); + }); + + document.getElementById('btn-deselect-all')?.addEventListener('click', () => { + state.selectedPhotos = []; + document.querySelectorAll('.photo-item').forEach(item => item.classList.remove('selected')); + updateSelectionUI(); + saveSelectedPhotos(); + }); + + document.getElementById('btn-convert-selected')?.addEventListener('click', () => { + if (state.selectedPhotos.length === 0) { + showNotification('Сначала выберите фотографии', 'error'); + return; + } + const urls = state.selectedPhotos.map(p => p.page_url).join('\n'); + if (inputUrls) inputUrls.value = urls; + document.querySelector('.nav-btn[data-tab="converter"]')?.click(); + }); + + document.getElementById('btn-telegram-selected')?.addEventListener('click', () => { + if (state.selectedPhotos.length === 0) { + showNotification('Сначала выберите фотографии', 'error'); + return; + } + document.querySelector('.nav-btn[data-tab="posting"]')?.click(); + }); + + // Get best quality URL for photo (prefer original, but only use actual URLs) + function getBestPhotoUrl(photo) { + // Priority: original > large2048 > large > medium640 > medium + // Only return URLs that actually exist (not null/undefined) + const urls = photo.urls || {}; + return urls.original || urls.large2048 || urls.large || urls.medium640 || urls.medium; + } + + // Get preview URL (medium size for lightbox) + function getPreviewUrl(photo) { + return photo.urls.large || photo.urls.medium640 || photo.urls.medium || photo.urls.original; + } + + // Get file extension from photo + function getPhotoExtension(photo) { + return photo.original_format || 'jpg'; + } + + // ============ SERVER-SIDE DOWNLOAD (bypasses CORS) ============ + + // Download single photo via server proxy + function downloadSinglePhoto(photo) { + const url = getBestPhotoUrl(photo); + const ext = getPhotoExtension(photo); + const title = (photo.title || photo.id).replace(/[<>:"/\\|?*]/g, '_').substring(0, 100); + + // Create download URL through our server proxy + const downloadUrl = `download.php?action=photo&url=${encodeURIComponent(url)}&filename=${encodeURIComponent(title)}&format=${ext}`; + + // Trigger download via hidden iframe or link + const link = document.createElement('a'); + link.href = downloadUrl; + link.download = `${title}.${ext}`; + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + } + + // Download multiple photos as individual files (sequential) + async function downloadPhotosIndividually(photos) { + showNotification(`Скачивание ${photos.length} фото...`, 'info'); + + for (let i = 0; i < photos.length; i++) { + downloadSinglePhoto(photos[i]); + // Small delay between downloads to avoid overwhelming browser + if (i < photos.length - 1) { + await new Promise(resolve => setTimeout(resolve, 500)); + } + } + + showNotification(`✓ Загрузка ${photos.length} фото начата`, 'success'); + } + + // Download multiple photos as ZIP archive + function downloadPhotosAsZip(photos, albumName = '') { + showNotification(`Подготовка архива: ${photos.length} фото...`, 'info'); + + // Prepare photo data for server + const photoData = photos.map(photo => ({ + id: photo.id, + url: getBestPhotoUrl(photo), + title: photo.title || photo.id, + format: getPhotoExtension(photo) + })); + + try { + // Create form for POST request + const form = document.createElement('form'); + form.method = 'POST'; + form.action = 'download.php?action=zip'; + form.style.display = 'none'; + + const photosInput = document.createElement('input'); + photosInput.type = 'hidden'; + photosInput.name = 'photos'; + photosInput.value = JSON.stringify(photoData); + form.appendChild(photosInput); + + const albumInput = document.createElement('input'); + albumInput.type = 'hidden'; + albumInput.name = 'album_name'; + albumInput.value = albumName; + form.appendChild(albumInput); + + document.body.appendChild(form); + form.submit(); + document.body.removeChild(form); + + showNotification('✓ Создание архива на сервере...', 'success'); + } catch (error) { + console.error('Failed to create ZIP:', error); + showNotification('Ошибка создания архива', 'error'); + } + } + + // Show download format choice dialog + function showDownloadChoiceDialog(photos, albumName = '') { + // Remove existing dialog if any + const existing = document.getElementById('download-choice-dialog'); + if (existing) existing.remove(); + + const dialog = document.createElement('div'); + dialog.id = 'download-choice-dialog'; + dialog.className = 'download-dialog-overlay'; + dialog.innerHTML = ` +
+

Скачать ${photos.length} фото

+

Выберите формат загрузки:

+
+ + +
+ +
+ `; + + dialog.querySelector('[data-action="zip"]').addEventListener('click', () => { + dialog.remove(); + downloadPhotosAsZip(photos, albumName); + }); + + dialog.querySelector('[data-action="individual"]').addEventListener('click', () => { + dialog.remove(); + downloadPhotosIndividually(photos); + }); + + dialog.querySelector('.download-dialog-close').addEventListener('click', () => { + dialog.remove(); + }); + + dialog.querySelector('.download-dialog-overlay')?.addEventListener('click', (e) => { + if (e.target === dialog) dialog.remove(); + }); + + // Close on backdrop click + dialog.addEventListener('click', (e) => { + if (e.target === dialog) dialog.remove(); + }); + + document.body.appendChild(dialog); + } + + // Download photos - single directly, multiple with choice + async function downloadPhotos(photos, albumName = '') { + if (photos.length === 0) { + showNotification('Нет фото для скачивания', 'error'); + return; + } + + // Single photo - download directly via server proxy + if (photos.length === 1) { + showNotification('Скачивание фото...', 'info'); + downloadSinglePhoto(photos[0]); + showNotification('✓ Загрузка начата', 'success'); + return; + } + + // Multiple photos - show choice dialog + showDownloadChoiceDialog(photos, albumName); + } + + // ============ PHOTO LIGHTBOX (Preview) ============ + + let lightboxPhoto = null; + + function createLightbox() { + // Create lightbox container if not exists + if (document.getElementById('photo-lightbox')) return; + + const lightbox = document.createElement('div'); + lightbox.id = 'photo-lightbox'; + lightbox.className = 'lightbox hidden'; + lightbox.innerHTML = ` + +
+ `; + + document.body.appendChild(lightbox); + + // Event listeners + lightbox.querySelector('.lightbox-backdrop').addEventListener('click', closeLightbox); + lightbox.querySelector('.lightbox-close').addEventListener('click', closeLightbox); + lightbox.querySelector('.lightbox-btn-select').addEventListener('click', lightboxSelectPhoto); + lightbox.querySelector('.lightbox-btn-download').addEventListener('click', lightboxDownloadPhoto); + lightbox.querySelector('.lightbox-prev').addEventListener('click', lightboxPrevPhoto); + lightbox.querySelector('.lightbox-next').addEventListener('click', lightboxNextPhoto); + + // Keyboard navigation + document.addEventListener('keydown', handleLightboxKeyboard); + } + + function openLightbox(photo) { + createLightbox(); + lightboxPhoto = photo; + + const lightbox = document.getElementById('photo-lightbox'); + const img = lightbox.querySelector('.lightbox-image'); + const videoContainer = lightbox.querySelector('.lightbox-video-container'); + const video = lightbox.querySelector('.lightbox-video'); + const title = lightbox.querySelector('.lightbox-title'); + const loading = lightbox.querySelector('.lightbox-loading'); + const selectBtn = lightbox.querySelector('.lightbox-btn-select'); + const flickrBtn = lightbox.querySelector('.lightbox-btn-flickr'); + const downloadBtn = lightbox.querySelector('.lightbox-btn-download'); + + const isVideo = photo.is_video; + + // Show loading + loading.classList.remove('hidden'); + + // Update Flickr link + if (flickrBtn) { + flickrBtn.href = photo.page_url || '#'; + } + + // Hide video container (not used due to Flickr restrictions) + videoContainer.style.display = 'none'; + video.src = ''; + + // Show image (for both photos and video thumbnails) + img.style.display = 'block'; + img.style.opacity = '0'; + img.src = getPreviewUrl(photo); + img.alt = photo.title || ''; + + // Handle video play overlay + let playOverlay = lightbox.querySelector('.video-play-overlay'); + if (!playOverlay) { + playOverlay = document.createElement('div'); + playOverlay.className = 'video-play-overlay'; + playOverlay.innerHTML = ` +
+
Смотреть на Flickr
+ `; + lightbox.querySelector('.lightbox-image-container').appendChild(playOverlay); + } + + if (isVideo) { + // Show play overlay for videos + playOverlay.style.display = 'flex'; + playOverlay.onclick = () => window.open(photo.page_url, '_blank'); + if (downloadBtn) downloadBtn.style.display = 'none'; + } else { + // Hide play overlay for photos + playOverlay.style.display = 'none'; + if (downloadBtn) downloadBtn.style.display = ''; + } + + // When image loads + img.onload = () => { + loading.classList.add('hidden'); + img.style.opacity = '1'; + }; + + img.onerror = () => { + loading.classList.add('hidden'); + img.style.opacity = '1'; + }; + + title.textContent = (isVideo ? '▶ ' : '') + (photo.title || 'Без названия'); + + // Update select button state + const isSelected = state.selectedPhotos.find(p => p.id === photo.id); + selectBtn.innerHTML = isSelected + ? ' Выбрано' + : '+ Выбрать'; + selectBtn.className = isSelected ? 'btn btn-success lightbox-btn-select' : 'btn btn-primary lightbox-btn-select'; + + // Show lightbox + lightbox.classList.remove('hidden'); + document.body.style.overflow = 'hidden'; + + updateLightboxNavigation(); + } + + function closeLightbox() { + const lightbox = document.getElementById('photo-lightbox'); + if (lightbox) { + // Stop video if playing + const video = lightbox.querySelector('.lightbox-video'); + if (video) video.src = ''; + + lightbox.classList.add('hidden'); + document.body.style.overflow = ''; + lightboxPhoto = null; + } + } + + function lightboxSelectPhoto() { + if (!lightboxPhoto) return; + + const index = state.selectedPhotos.findIndex(p => p.id === lightboxPhoto.id); + + if (index === -1) { + if (!canAddPhotos(1)) return; + state.selectedPhotos.push(lightboxPhoto); + } else { + state.selectedPhotos.splice(index, 1); + } + + // Update button + const selectBtn = document.querySelector('.lightbox-btn-select'); + const isSelected = state.selectedPhotos.find(p => p.id === lightboxPhoto.id); + selectBtn.innerHTML = isSelected + ? ' Выбрано' + : '+ Выбрать'; + selectBtn.className = isSelected ? 'btn btn-success lightbox-btn-select' : 'btn btn-primary lightbox-btn-select'; + + // Update gallery + updateSelectionUI(); + syncGallerySelection(); + saveSelectedPhotos(); + + showNotification(isSelected ? 'Фото добавлено' : 'Фото удалено', 'info'); + } + + function lightboxDownloadPhoto() { + if (!lightboxPhoto) return; + showNotification('Скачивание...', 'info'); + downloadSinglePhoto(lightboxPhoto); + } + + function getPhotosList() { + return Array.from(document.querySelectorAll('.photo-item')).map(item => { + try { + return JSON.parse(item.dataset.photoData); + } catch (e) { + return null; + } + }).filter(p => p !== null); + } + + function lightboxPrevPhoto() { + if (!lightboxPhoto) return; + const photos = getPhotosList(); + const currentIdx = photos.findIndex(p => p.id === lightboxPhoto.id); + if (currentIdx > 0) { + openLightbox(photos[currentIdx - 1]); + } + } + + function lightboxNextPhoto() { + if (!lightboxPhoto) return; + const photos = getPhotosList(); + const currentIdx = photos.findIndex(p => p.id === lightboxPhoto.id); + if (currentIdx < photos.length - 1) { + openLightbox(photos[currentIdx + 1]); + } + } + + function updateLightboxNavigation() { + const lightbox = document.getElementById('photo-lightbox'); + if (!lightbox || !lightboxPhoto) return; + + const photos = getPhotosList(); + const currentIdx = photos.findIndex(p => p.id === lightboxPhoto.id); + + const prevBtn = lightbox.querySelector('.lightbox-prev'); + const nextBtn = lightbox.querySelector('.lightbox-next'); + + prevBtn.style.visibility = currentIdx > 0 ? 'visible' : 'hidden'; + nextBtn.style.visibility = currentIdx < photos.length - 1 ? 'visible' : 'hidden'; + } + + function handleLightboxKeyboard(e) { + const lightbox = document.getElementById('photo-lightbox'); + if (!lightbox || lightbox.classList.contains('hidden')) return; + + switch (e.key) { + case 'Escape': + closeLightbox(); + break; + case 'ArrowLeft': + lightboxPrevPhoto(); + break; + case 'ArrowRight': + lightboxNextPhoto(); + break; + case ' ': + e.preventDefault(); + lightboxSelectPhoto(); + break; + } + } + + // Download selected photos + document.getElementById('btn-download-selected')?.addEventListener('click', () => { + if (state.selectedPhotos.length === 0) { + showNotification('Сначала выберите фотографии', 'error'); + return; + } + downloadPhotos(state.selectedPhotos); + }); + + // Download all photos in current album + window.downloadAllPhotos = async function() { + if (!state.currentAlbum) { + showNotification('Сначала откройте альбом', 'error'); + return; + } + + // Get album name for ZIP filename + const albumName = currentAlbumTitle?.textContent?.replace(/[<>:"/\\|?*]/g, '_') || 'album'; + + showNotification('Получение списка фото альбома...', 'info'); + + try { + // Fetch all photos from the album (increase per_page for full album) + const params = new URLSearchParams({ + action: 'flickr_photos', + album_id: state.currentAlbum, + page: 1, + per_page: 500 // Get more photos at once + }); + + const response = await fetch('api.php?' + params); + const data = await response.json(); + + if (data.error) { + showNotification('Ошибка: ' + data.error, 'error'); + return; + } + + if (!data.photos || data.photos.length === 0) { + showNotification('Альбом пуст', 'error'); + return; + } + + // Download all photos as ZIP with album name + downloadPhotos(data.photos, albumName); + } catch (error) { + showNotification('Ошибка: ' + error.message, 'error'); + } + }; + + // ============ MULTI-PLATFORM POSTING ============ + + async function loadTelegramStatus() { + const statusEl = document.getElementById('tg-bot-status'); + const statusMini = document.getElementById('tg-status-mini'); + const tgChannel = document.getElementById('tg-channel'); + + try { + const response = await fetch('api.php?action=telegram_status'); + const data = await response.json(); + + const connected = data.connected; + const text = connected ? `@${data.bot_username}` : (data.message || 'Не подключён'); + + if (statusEl) { + statusEl.className = `status ${connected ? 'connected' : 'disconnected'}`; + statusEl.textContent = connected ? `Подключён: ${text}` : text; + } + if (statusMini) { + statusMini.className = `status-mini ${connected ? 'connected' : ''}`; + statusMini.textContent = connected ? 'Подключён' : 'Не подключён'; + } + } catch (error) { + if (statusEl) { + statusEl.className = 'status disconnected'; + statusEl.textContent = 'Ошибка проверки'; + } + } + + // Load channels + try { + const response = await fetch('api.php?action=telegram_channels'); + const data = await response.json(); + + if (data.channels && tgChannel) { + tgChannel.innerHTML = ''; + data.channels.forEach(channel => { + const option = document.createElement('option'); + option.value = channel.id || channel; + option.textContent = channel.name || channel; + tgChannel.appendChild(option); + }); + // Auto-select if only one channel + if (data.channels.length === 1) { + tgChannel.selectedIndex = 1; + } + } + } catch (error) { + console.error('Ошибка загрузки каналов:', error); + } + } + + async function loadVKStatus() { + const statusEl = document.getElementById('vk-status'); + const statusMini = document.getElementById('vk-status-mini'); + const vkGroup = document.getElementById('vk-group'); + + try { + const response = await fetch('api.php?action=vk_status'); + const data = await response.json(); + + const connected = data.connected; + const text = connected ? (data.user_name || 'VK') : (data.message || 'Не подключён'); + + if (statusEl) { + statusEl.className = `status ${connected ? 'connected' : 'disconnected'}`; + statusEl.textContent = connected ? `Подключён: ${text}` : text; + } + if (statusMini) { + statusMini.className = `status-mini ${connected ? 'connected' : ''}`; + statusMini.textContent = connected ? 'Подключён' : 'Не подключён'; + } + } catch (error) { + if (statusEl) { + statusEl.className = 'status disconnected'; + statusEl.textContent = 'Ошибка проверки'; + } + } + + // Load groups + try { + const response = await fetch('api.php?action=vk_groups'); + const data = await response.json(); + + if (data.groups && vkGroup) { + vkGroup.innerHTML = ''; + data.groups.forEach(group => { + const option = document.createElement('option'); + option.value = group.id; + option.textContent = group.name; + vkGroup.appendChild(option); + }); + // Auto-select if only one group (or community token) + if (data.groups.length === 1) { + vkGroup.selectedIndex = 1; + } + } + } catch (error) { + console.error('Ошибка загрузки групп VK:', error); + } + } + + // Send post (immediate or scheduled) + document.getElementById('btn-send-post')?.addEventListener('click', async () => { + const postText = document.getElementById('post-text'); + let baseText = postText?.value || ''; + const parseMode = document.getElementById('post-parse-mode')?.value || 'HTML'; + const isScheduled = document.getElementById('chk-schedule')?.checked; + const scheduledTime = document.getElementById('scheduled-datetime')?.value; + + // Check scheduled time + if (isScheduled) { + if (!scheduledTime) { + showNotification('Укажите дату и время публикации', 'error'); + return; + } + const scheduledDate = new Date(scheduledTime); + if (scheduledDate <= new Date()) { + showNotification('Время публикации должно быть в будущем', 'error'); + return; + } + } + + // Add tags to text + const tagsString = getTagsString('post'); + const currentTags = tagContexts?.post || []; + if (tagsString) { + baseText = baseText.trim() ? baseText.trim() + '\n\n' + tagsString : tagsString; + } + + const platforms = []; + const tgChannel = document.getElementById('tg-channel'); + const vkGroup = document.getElementById('vk-group'); + + const postToTelegram = document.getElementById('chk-telegram')?.checked && tgChannel?.value; + const postToVk = document.getElementById('chk-vk')?.checked && vkGroup?.value; + + if (postToTelegram) { + platforms.push({ type: 'telegram', target: tgChannel.value }); + } + if (postToVk) { + platforms.push({ type: 'vk', target: vkGroup.value }); + } + + if (platforms.length === 0) { + showNotification('Выберите платформу и канал/группу', 'error'); + return; + } + + if (state.selectedPhotos.length === 0 && state.uploadedFiles.length === 0 && !baseText.trim()) { + showNotification('Добавьте фото или текст', 'error'); + return; + } + + const btnSendPost = document.getElementById('btn-send-post'); + const postResult = document.getElementById('post-result'); + + // Handle scheduled posting + if (isScheduled) { + if (btnSendPost) { + btnSendPost.disabled = true; + btnSendPost.textContent = 'Планирование...'; + } + + try { + const photoUrls = state.selectedPhotos.map(p => p.urls.large || p.urls.original || p.urls.medium640); + const uploadedFileUrls = state.uploadedFiles + .filter(f => f.url && !f.uploading) + .map(f => ({ url: f.url, type: f.type })); + + const formData = new FormData(); + const isEditing = scheduledState.editingPostId !== null; + formData.append('action', isEditing ? 'update_scheduled_post' : 'create_scheduled_post'); + if (isEditing) { + formData.append('id', scheduledState.editingPostId); + } + formData.append('text', postText?.value || ''); + formData.append('tags', JSON.stringify(currentTags)); + formData.append('photos', JSON.stringify(photoUrls)); + formData.append('uploaded_files', JSON.stringify(uploadedFileUrls)); + formData.append('platforms', JSON.stringify(platforms)); + formData.append('scheduled_time', scheduledTime.replace('T', ' ')); + // Save cross-promo state + const crossPromoEnabled = document.getElementById('chk-cross-promo')?.checked || false; + formData.append('cross_promo', crossPromoEnabled ? '1' : '0'); + + const response = await fetch('api.php', { method: 'POST', body: formData }); + const data = await response.json(); + + if (data.error) { + showNotification('Ошибка: ' + data.error, 'error'); + } else { + showNotification(isEditing ? 'Пост обновлён!' : 'Пост запланирован!', 'success'); + + // Clear form + state.selectedPhotos = []; + state.uploadedFiles = []; + updatePostingPreview(); + updateSelectionUI(); + syncGallerySelection(); + if (postText) postText.value = ''; + if (typeof tagContexts !== 'undefined') { + tagContexts.post = []; + const tagsList = document.getElementById('post-tags-list'); + if (tagsList) tagsList.innerHTML = ''; + } + clearPostDraft(); + + // Reset schedule UI and editing state + document.getElementById('chk-schedule').checked = false; + scheduledState.editingPostId = null; + updateScheduleUI(); + + // Refresh scheduled posts list + loadScheduledPosts(); + } + } catch (error) { + showNotification('Ошибка: ' + error.message, 'error'); + } finally { + if (btnSendPost) { + btnSendPost.disabled = false; + btnSendPost.innerHTML = '📅 Запланировать'; + } + } + return; + } + + if (btnSendPost) { + btnSendPost.disabled = true; + btnSendPost.textContent = 'Публикация...'; + } + + try { + // Check if there are files still uploading + const stillUploading = state.uploadedFiles.some(f => f.uploading); + if (stillUploading) { + showNotification('Дождитесь завершения загрузки файлов', 'error'); + if (btnSendPost) { + btnSendPost.disabled = false; + btnSendPost.textContent = 'Опубликовать'; + } + return; + } + + const photoUrls = state.selectedPhotos.map(p => p.urls.large || p.urls.original || p.urls.medium640); + + // Get uploaded files that finished uploading + const uploadedFileUrls = state.uploadedFiles + .filter(f => f.url && !f.uploading) + .map(f => ({ url: f.url, type: f.type })); + + // Check cross-promo settings + const crossPromoEnabled = document.getElementById('chk-cross-promo')?.checked; + // Get settings from localStorage, but also check current input values as fallback + const storedSettings = getCrossPromoSettings(); + const crossPromoSettings = { + telegramLink: storedSettings.telegramLink || document.getElementById('cross-promo-telegram')?.value.trim() || '', + vkLink: storedSettings.vkLink || document.getElementById('cross-promo-vk')?.value.trim() || '', + textForTg: storedSettings.textForTg || document.getElementById('cross-promo-text-tg')?.value.trim() || 'Мой канал ВКонтакте', + textForVk: storedSettings.textForVk || document.getElementById('cross-promo-text-vk')?.value.trim() || 'Мой канал в Telegram' + }; + + // Prepare platform-specific texts + let textForTelegram = baseText; + let textForVk = baseText; + + if (crossPromoEnabled) { + console.log('Cross-promo enabled, settings:', crossPromoSettings); + // Add VK link to Telegram post + if (crossPromoSettings.vkLink && postToTelegram) { + const linkText = crossPromoSettings.textForTg || 'Мой канал ВКонтакте'; + if (parseMode === 'HTML') { + textForTelegram += `\n\n${linkText}`; + } else if (parseMode === 'Markdown') { + textForTelegram += `\n\n[${linkText}](${crossPromoSettings.vkLink})`; + } else { + textForTelegram += `\n\n${linkText}: ${crossPromoSettings.vkLink}`; + } + } + // Add Telegram link to VK post + if (crossPromoSettings.telegramLink && postToVk) { + const linkText = crossPromoSettings.textForVk || 'Мой канал в Telegram'; + textForVk += `\n\n${linkText}: ${crossPromoSettings.telegramLink}`; + } + } + + // Send to each platform with appropriate text + const results = {}; + + for (const platform of platforms) { + const formData = new FormData(); + formData.append('action', 'multi_post'); + formData.append('platforms', JSON.stringify([platform])); + formData.append('text', platform.type === 'telegram' ? textForTelegram : textForVk); + formData.append('photos', JSON.stringify(photoUrls)); + formData.append('uploaded_files', JSON.stringify(uploadedFileUrls)); + formData.append('parse_mode', parseMode); + + const response = await fetch('api.php', { method: 'POST', body: formData }); + const data = await response.json(); + + if (data.results) { + Object.assign(results, data.results); + } else if (data.error) { + results[platform.type] = { success: false, error: data.error }; + } + } + + // Process results + let resultText = 'Результаты:\n'; + let hasErrors = false; + + Object.entries(results).forEach(([platform, result]) => { + const name = platform === 'telegram' ? 'Telegram' : platform === 'vk' ? 'ВКонтакте' : platform; + if (result.success) { + if (result.warning) { + resultText += `⚠ ${name}: Опубликовано с предупреждением\n ${result.warning}\n`; + } else { + resultText += `✓ ${name}: Успешно\n`; + } + } else { + resultText += `✗ ${name}: ${result.error}\n`; + hasErrors = true; + } + }); + + if (postResult) { + postResult.className = hasErrors ? 'result-message error' : 'result-message success'; + postResult.textContent = resultText; + postResult.style.display = 'block'; + } + + if (!hasErrors) { + state.selectedPhotos = []; + state.uploadedFiles = []; // Clear uploaded files + updatePostingPreview(); + updateSelectionUI(); + syncGallerySelection(); + if (postText) postText.value = ''; + // Clear tags + if (typeof tagContexts !== 'undefined') { + tagContexts.post = []; + const tagsList = document.getElementById('post-tags-list'); + if (tagsList) tagsList.innerHTML = ''; + } + // Clear draft + clearPostDraft(); + showNotification('Публикация завершена!', 'success'); + } + } catch (error) { + if (postResult) { + postResult.className = 'result-message error'; + postResult.textContent = 'Ошибка: ' + error.message; + postResult.style.display = 'block'; + } + } finally { + if (btnSendPost) { + btnSendPost.disabled = false; + btnSendPost.textContent = 'Опубликовать'; + } + } + }); + + // ============ SETTINGS ============ + + document.getElementById('btn-change-password')?.addEventListener('click', async () => { + const currentPassword = document.getElementById('current-password')?.value; + const newPassword = document.getElementById('new-password')?.value; + const confirmPassword = document.getElementById('confirm-password')?.value; + + if (!currentPassword || !newPassword) { + showNotification('Заполните все поля', 'error'); + return; + } + if (newPassword !== confirmPassword) { + showNotification('Пароли не совпадают', 'error'); + return; + } + if (newPassword.length < 8) { + showNotification('Минимум 8 символов', 'error'); + return; + } + + try { + const formData = new FormData(); + formData.append('action', 'change_password'); + formData.append('current_password', currentPassword); + formData.append('new_password', newPassword); + + const response = await fetch('api.php', { method: 'POST', body: formData }); + const data = await response.json(); + + if (data.error) { + showNotification('Ошибка: ' + data.error, 'error'); + } else { + showNotification('Пароль изменён', 'success'); + document.getElementById('current-password').value = ''; + document.getElementById('new-password').value = ''; + document.getElementById('confirm-password').value = ''; + } + } catch (error) { + showNotification('Ошибка: ' + error.message, 'error'); + } + }); + + // ============ VK TOKEN MANAGEMENT ============ + + // Toggle VK token visibility + document.getElementById('btn-toggle-vk-token')?.addEventListener('click', () => { + const input = document.getElementById('vk-token-input'); + if (input) { + input.type = input.type === 'password' ? 'text' : 'password'; + } + }); + + // Save VK token + document.getElementById('btn-save-vk-token')?.addEventListener('click', async () => { + const tokenInput = document.getElementById('vk-token-input'); + const token = tokenInput?.value.trim(); + const statusSpan = document.getElementById('vk-token-save-status'); + + if (!token) { + showNotification('Введите токен', 'error'); + return; + } + + const btn = document.getElementById('btn-save-vk-token'); + if (btn) { + btn.disabled = true; + btn.textContent = 'Сохранение...'; + } + + try { + const formData = new FormData(); + formData.append('action', 'save_vk_token'); + formData.append('token', token); + + const response = await fetch('api.php', { method: 'POST', body: formData }); + const data = await response.json(); + + if (data.error) { + showNotification('Ошибка: ' + data.error, 'error'); + if (statusSpan) { + statusSpan.textContent = '✗ Ошибка'; + statusSpan.className = 'save-status error'; + } + } else { + let message = 'Токен сохранён'; + if (data.validation?.valid) { + const type = data.validation.type === 'user' ? 'пользовательский' : 'community'; + const name = data.validation.user_name || ''; + message += ` (${type}${name ? ': ' + name : ''})`; + + // Update VK status display + const vkStatus = document.getElementById('vk-status'); + if (vkStatus) { + vkStatus.textContent = `Подключён (${type})`; + vkStatus.className = 'status connected'; + } + } + showNotification(message, 'success'); + if (statusSpan) { + statusSpan.textContent = '✓ Сохранено'; + statusSpan.className = 'save-status success'; + } + + // Reload VK groups + loadVkGroups(); + } + } catch (error) { + showNotification('Ошибка: ' + error.message, 'error'); + if (statusSpan) { + statusSpan.textContent = '✗ Ошибка'; + statusSpan.className = 'save-status error'; + } + } finally { + if (btn) { + btn.disabled = false; + btn.textContent = 'Сохранить'; + } + } + }); + + // ============ TAGS MANAGEMENT SYSTEM ============ + + const TAGS_STORAGE_KEY = 'vh_tags_history'; + const MAX_TAGS_HISTORY = 100; + + // Store for current tags in each context + const tagContexts = { + post: [], + converter: [] + }; + + // Load tags history from localStorage + function getTagsHistory() { + try { + const data = localStorage.getItem(TAGS_STORAGE_KEY); + return data ? JSON.parse(data) : []; + } catch (e) { + return []; + } + } + + // Save tag to history + function saveTagToHistory(tag) { + const history = getTagsHistory(); + const existingIndex = history.findIndex(t => t.name.toLowerCase() === tag.toLowerCase()); + + if (existingIndex >= 0) { + // Increment usage count + history[existingIndex].count++; + history[existingIndex].lastUsed = Date.now(); + } else { + // Add new tag + history.push({ + name: tag, + count: 1, + lastUsed: Date.now() + }); + } + + // Sort by count and limit + history.sort((a, b) => b.count - a.count); + if (history.length > MAX_TAGS_HISTORY) { + history.splice(MAX_TAGS_HISTORY); + } + + localStorage.setItem(TAGS_STORAGE_KEY, JSON.stringify(history)); + } + + // Get tag suggestions based on input + function getTagSuggestions(input, excludeTags = []) { + const history = getTagsHistory(); + const search = input.toLowerCase(); + + return history + .filter(t => t.name.toLowerCase().includes(search) && !excludeTags.includes(t.name)) + .slice(0, 10); + } + + // Initialize tag input for a context + function initTagInput(context, inputId, listId, suggestionsId) { + const input = document.getElementById(inputId); + const list = document.getElementById(listId); + const suggestions = document.getElementById(suggestionsId); + + if (!input || !list) return; + + // Render current tags + function renderTags() { + list.innerHTML = tagContexts[context].map(tag => ` + + #${escapeHtml(tag)} + + + `).join(''); + } + + // Add tag + function addTag(tag) { + tag = tag.trim().replace(/^#/, '').replace(/[,\s]+/g, ''); + if (!tag || tagContexts[context].includes(tag)) return; + + tagContexts[context].push(tag); + saveTagToHistory(tag); + renderTags(); + input.value = ''; + hideSuggestions(); + // Save draft immediately when tags change in post context + if (context === 'post') { + savePostDraftNow(); + } + } + + // Remove tag + function removeTag(tag) { + tagContexts[context] = tagContexts[context].filter(t => t !== tag); + renderTags(); + // Save draft immediately when tags change in post context + if (context === 'post') { + savePostDraftNow(); + } + } + + // Show suggestions + function showSuggestions(query) { + if (!suggestions) return; + const items = getTagSuggestions(query, tagContexts[context]); + + if (items.length === 0 && query.length < 2) { + // Show recent tags if no query + const recent = getTagsHistory().slice(0, 8); + if (recent.length > 0) { + suggestions.innerHTML = recent.map(t => ` +
+ #${escapeHtml(t.name)} + ${t.count}× +
+ `).join(''); + suggestions.classList.add('visible'); + } + return; + } + + if (items.length === 0) { + hideSuggestions(); + return; + } + + suggestions.innerHTML = items.map(t => ` +
+ #${escapeHtml(t.name)} + ${t.count}× +
+ `).join(''); + suggestions.classList.add('visible'); + } + + function hideSuggestions() { + if (suggestions) suggestions.classList.remove('visible'); + } + + // Event listeners + input.addEventListener('keydown', (e) => { + if (e.key === 'Enter' || e.key === ',') { + e.preventDefault(); + addTag(input.value); + } else if (e.key === 'Backspace' && !input.value && tagContexts[context].length > 0) { + removeTag(tagContexts[context][tagContexts[context].length - 1]); + } else if (e.key === 'Escape') { + hideSuggestions(); + } + }); + + input.addEventListener('input', () => { + showSuggestions(input.value); + }); + + input.addEventListener('focus', () => { + showSuggestions(input.value); + }); + + input.addEventListener('blur', () => { + setTimeout(hideSuggestions, 200); + }); + + // Click on suggestion + if (suggestions) { + suggestions.addEventListener('click', (e) => { + const item = e.target.closest('.tag-suggestion'); + if (item) { + addTag(item.dataset.tag); + } + }); + } + + // Click remove button + list.addEventListener('click', (e) => { + if (e.target.classList.contains('tag-remove')) { + removeTag(e.target.dataset.tag); + } + }); + + renderTags(); + } + + // ============ TAG PRESETS MANAGEMENT (Server-side storage) ============ + + let editingPresetId = null; + let cachedPresets = []; // In-memory cache for sync operations + + // Load presets from server + async function loadPresetsFromServer() { + try { + const response = await fetch('api.php?action=get_presets'); + const data = await response.json(); + if (data.success && data.presets) { + cachedPresets = data.presets; + return data.presets; + } + return []; + } catch (e) { + console.error('Failed to load presets:', e); + return []; + } + } + + // Save presets to server + async function savePresetsToServer(presets) { + try { + const response = await fetch('api.php?action=save_presets', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ presets }) + }); + const data = await response.json(); + if (data.success) { + cachedPresets = presets; + return true; + } + console.error('Failed to save presets:', data.error); + return false; + } catch (e) { + console.error('Failed to save presets:', e); + return false; + } + } + + // Get presets (from cache for sync operations) + function getPresets() { + return cachedPresets; + } + + // Generate unique ID + function generatePresetId() { + const maxId = cachedPresets.reduce((max, p) => Math.max(max, p.id || 0), 0); + return maxId + 1; + } + + // Render presets in both containers + function renderPresets() { + const presets = getPresets(); + const containers = ['post-presets-list', 'converter-presets-list']; + + containers.forEach(containerId => { + const container = document.getElementById(containerId); + if (!container) return; + + const target = containerId.includes('converter') ? 'converter' : 'post'; + + container.innerHTML = presets.map(preset => ` + + `).join(''); + + // Add click handlers + container.querySelectorAll('.tag-preset').forEach(btn => { + btn.addEventListener('click', () => { + applyPreset(btn.dataset.presetId, btn.dataset.target); + }); + }); + }); + } + + // Apply preset tags + function applyPreset(presetId, target) { + const presets = getPresets(); + const preset = presets.find(p => p.id == presetId); + if (!preset) return; + + preset.tags.forEach(tag => { + tag = tag.trim(); + if (tag && !tagContexts[target].includes(tag)) { + tagContexts[target].push(tag); + saveTagToHistory(tag); + } + }); + + // Re-render tags + const listId = target === 'converter' ? 'converter-tags-list' : 'post-tags-list'; + const list = document.getElementById(listId); + if (list) { + list.innerHTML = tagContexts[target].map(tag => ` + + #${escapeHtml(tag)} + + + `).join(''); + } + } + + // Open preset modal + function openPresetModal(mode = 'list') { + const modal = document.getElementById('preset-modal'); + const formSection = document.getElementById('preset-form-section'); + const listSection = document.getElementById('preset-list-section'); + const titleEl = document.getElementById('preset-modal-title'); + + if (mode === 'list') { + formSection.style.display = 'none'; + listSection.style.display = 'block'; + titleEl.textContent = 'Управление пресетами'; + renderPresetManager(); + } else if (mode === 'add') { + formSection.style.display = 'block'; + listSection.style.display = 'none'; + titleEl.textContent = 'Добавить пресет'; + document.getElementById('preset-name').value = ''; + document.getElementById('preset-tags').value = ''; + editingPresetId = null; + } else if (mode === 'edit') { + formSection.style.display = 'block'; + listSection.style.display = 'none'; + titleEl.textContent = 'Редактировать пресет'; + } + + modal.style.display = 'flex'; + } + + // Close preset modal + function closePresetModal() { + document.getElementById('preset-modal').style.display = 'none'; + editingPresetId = null; + } + + // Render preset manager list + function renderPresetManager() { + const presets = getPresets(); + const container = document.getElementById('preset-manager-list'); + + if (presets.length === 0) { + container.innerHTML = '

Нет пресетов. Добавьте первый!

'; + return; + } + + container.innerHTML = presets.map(preset => ` +
+
+ ${escapeHtml(preset.name)} + ${preset.tags.map(t => '#' + escapeHtml(t)).join(' ')} +
+
+ + +
+
+ `).join(''); + + // Add event handlers + container.querySelectorAll('.preset-edit').forEach(btn => { + btn.addEventListener('click', () => editPreset(btn.dataset.presetId)); + }); + + container.querySelectorAll('.preset-delete').forEach(btn => { + btn.addEventListener('click', () => deletePreset(btn.dataset.presetId)); + }); + } + + // Edit preset + function editPreset(presetId) { + const presets = getPresets(); + const preset = presets.find(p => p.id == presetId); + if (!preset) return; + + document.getElementById('preset-name').value = preset.name; + document.getElementById('preset-tags').value = preset.tags.join(', '); + editingPresetId = preset.id; + + openPresetModal('edit'); + } + + // Delete preset + async function deletePreset(presetId) { + if (!confirm('Удалить этот пресет?')) return; + + let presets = getPresets(); + presets = presets.filter(p => p.id != presetId); + + if (await savePresetsToServer(presets)) { + renderPresetManager(); + renderPresets(); + showNotification('Пресет удалён', 'success'); + } else { + showNotification('Ошибка удаления пресета', 'error'); + } + } + + // Save preset (add or edit) + async function savePreset() { + const name = document.getElementById('preset-name').value.trim(); + const tagsStr = document.getElementById('preset-tags').value.trim(); + + if (!name) { + alert('Введите название пресета'); + return; + } + + if (!tagsStr) { + alert('Введите хотя бы один тег'); + return; + } + + const tags = tagsStr.split(',').map(t => t.trim()).filter(t => t); + let presets = [...getPresets()]; + + if (editingPresetId) { + // Edit existing + const index = presets.findIndex(p => p.id == editingPresetId); + if (index !== -1) { + presets[index].name = name; + presets[index].tags = tags; + } + } else { + // Add new + presets.push({ + id: generatePresetId(), + name: name, + tags: tags + }); + } + + if (await savePresetsToServer(presets)) { + renderPresets(); + openPresetModal('list'); + showNotification('Пресет сохранён', 'success'); + } else { + showNotification('Ошибка сохранения пресета', 'error'); + } + } + + // Initialize presets system + async function initTagPresets() { + // Load presets from server + await loadPresetsFromServer(); + + // Initial render + renderPresets(); + + // Add button handlers + document.getElementById('post-preset-add')?.addEventListener('click', () => openPresetModal('add')); + document.getElementById('converter-preset-add')?.addEventListener('click', () => openPresetModal('add')); + document.getElementById('post-preset-manage')?.addEventListener('click', () => openPresetModal('list')); + document.getElementById('converter-preset-manage')?.addEventListener('click', () => openPresetModal('list')); + + // Modal handlers + document.getElementById('preset-modal-close')?.addEventListener('click', closePresetModal); + document.getElementById('preset-add-new')?.addEventListener('click', () => openPresetModal('add')); + document.getElementById('preset-save')?.addEventListener('click', savePreset); + document.getElementById('preset-cancel')?.addEventListener('click', () => openPresetModal('list')); + + // Close on overlay click + document.getElementById('preset-modal')?.addEventListener('click', (e) => { + if (e.target.id === 'preset-modal') closePresetModal(); + }); + } + + // Get tags as formatted string + function getTagsString(context) { + return tagContexts[context].map(t => '#' + t).join(' '); + } + + // Initialize tag inputs + initTagInput('post', 'post-tags-input', 'post-tags-list', 'post-tags-suggestions'); + initTagInput('converter', 'converter-tags-input', 'converter-tags-list', 'converter-tags-suggestions'); + initTagPresets(); + + // Restore draft tags after tagContexts is initialized + restoreDraftTags(); + + // ============ TEXT FORMATTING TOOLBAR ============ + + function initTextEditorToolbar() { + document.querySelectorAll('.toolbar-btn[data-format]').forEach(btn => { + btn.addEventListener('click', () => { + const format = btn.dataset.format; + const targetId = btn.dataset.target || 'post-text'; + const textarea = document.getElementById(targetId); + + if (!textarea) return; + + const start = textarea.selectionStart; + const end = textarea.selectionEnd; + const text = textarea.value; + const selected = text.substring(start, end); + + let before = '', after = ''; + let newText = selected; + + // Get format mode from the post-parse-mode selector + const parseMode = document.getElementById('post-parse-mode')?.value || 'HTML'; + + if (parseMode === 'HTML') { + switch (format) { + case 'bold': before = ''; after = ''; break; + case 'italic': before = ''; after = ''; break; + case 'underline': before = ''; after = ''; break; + case 'strike': before = ''; after = ''; break; + case 'code': before = ''; after = ''; break; + case 'link': + const url = prompt('Введите URL:', 'https://'); + if (url) { + before = ''; + after = ''; + if (!selected) newText = url; + } + break; + } + } else if (parseMode === 'Markdown') { + switch (format) { + case 'bold': before = '**'; after = '**'; break; + case 'italic': before = '_'; after = '_'; break; + case 'underline': before = '__'; after = '__'; break; + case 'strike': before = '~~'; after = '~~'; break; + case 'code': before = '`'; after = '`'; break; + case 'link': + const url = prompt('Введите URL:', 'https://'); + if (url) { + before = '['; + after = '](' + url + ')'; + if (!selected) newText = 'ссылка'; + } + break; + } + } else { + // Plain text - just insert without formatting + if (format === 'link') { + const url = prompt('Введите URL:', 'https://'); + if (url) { + newText = url; + } + } + before = ''; + after = ''; + } + + if (before || after || newText !== selected) { + const replacement = before + newText + after; + textarea.value = text.substring(0, start) + replacement + text.substring(end); + textarea.focus(); + textarea.setSelectionRange(start + before.length, start + before.length + newText.length); + } + }); + }); + } + + initTextEditorToolbar(); + + // ============ SCHEDULED POSTS ============ + + const scheduledState = { + uploadedFiles: [], + editingPostId: null + }; + + // Schedule toggle handler + const scheduleCheckbox = document.getElementById('chk-schedule'); + const scheduleOptions = document.getElementById('schedule-options'); + const btnSendPostMain = document.getElementById('btn-send-post'); + + function updateScheduleUI() { + const isScheduled = scheduleCheckbox?.checked; + if (scheduleOptions) { + scheduleOptions.classList.toggle('hidden', !isScheduled); + } + if (btnSendPostMain) { + btnSendPostMain.innerHTML = isScheduled ? '📅 Запланировать' : '🚀 Опубликовать'; + } + } + + scheduleCheckbox?.addEventListener('change', updateScheduleUI); + + // Schedule date/time picker + const scheduleDate = document.getElementById('schedule-date'); + const scheduleTime = document.getElementById('schedule-time'); + const scheduledDatetime = document.getElementById('scheduled-datetime'); + + // Set default to 1 hour from now + function setDefaultScheduleTime() { + const oneHourLater = new Date(); + oneHourLater.setHours(oneHourLater.getHours() + 1); + oneHourLater.setMinutes(0, 0, 0); // Round to nearest hour + setScheduleDateTime(oneHourLater); + } + + function setScheduleDateTime(date) { + if (scheduleDate) { + // Use local date components to avoid timezone issues + const year = date.getFullYear(); + const month = String(date.getMonth() + 1).padStart(2, '0'); + const day = String(date.getDate()).padStart(2, '0'); + scheduleDate.value = `${year}-${month}-${day}`; + } + if (scheduleTime) { + const hours = String(date.getHours()).padStart(2, '0'); + const minutes = String(date.getMinutes()).padStart(2, '0'); + scheduleTime.value = `${hours}:${minutes}`; + } + syncScheduledDatetime(); + } + + function syncScheduledDatetime() { + if (scheduleDate && scheduleTime && scheduledDatetime) { + scheduledDatetime.value = `${scheduleDate.value}T${scheduleTime.value}`; + } + } + + // Sync hidden field when date/time changes + scheduleDate?.addEventListener('change', syncScheduledDatetime); + scheduleTime?.addEventListener('change', syncScheduledDatetime); + + // Set min date to today (local date) + if (scheduleDate) { + const today = new Date(); + const year = today.getFullYear(); + const month = String(today.getMonth() + 1).padStart(2, '0'); + const day = String(today.getDate()).padStart(2, '0'); + scheduleDate.min = `${year}-${month}-${day}`; + } + + // Handle preset buttons + document.querySelectorAll('.schedule-presets .preset-btn').forEach(btn => { + btn.addEventListener('click', () => { + const preset = btn.dataset.preset; + const now = new Date(); + let targetDate = new Date(); + + switch (preset) { + case '1h': + targetDate.setHours(now.getHours() + 1); + break; + case '3h': + targetDate.setHours(now.getHours() + 3); + break; + case 'tomorrow-10': + targetDate.setDate(now.getDate() + 1); + targetDate.setHours(10, 0, 0, 0); + break; + case 'tomorrow-18': + targetDate.setDate(now.getDate() + 1); + targetDate.setHours(18, 0, 0, 0); + break; + } + + setScheduleDateTime(targetDate); + + // Highlight active preset + document.querySelectorAll('.schedule-presets .preset-btn').forEach(b => b.classList.remove('active')); + btn.classList.add('active'); + }); + }); + + // Initialize with default time + setDefaultScheduleTime(); + + // Load scheduled and published posts on posting tab switch + document.querySelectorAll('.nav-btn[data-tab="posting"]').forEach(btn => { + btn.addEventListener('click', () => { + loadScheduledPosts(); + loadPublishedPosts(); + updateScheduledCount(); + }); + }); + + async function loadScheduledPosts() { + const list = document.getElementById('scheduled-posts-list'); + if (!list) return; + + try { + const formData = new FormData(); + formData.append('action', 'get_scheduled_posts'); + const response = await fetch('api.php', { method: 'POST', body: formData }); + const data = await response.json(); + + if (data.posts && data.posts.length > 0) { + const pendingPosts = data.posts.filter(p => p.status === 'pending'); + if (pendingPosts.length === 0) { + list.innerHTML = '

Нет запланированных постов

'; + return; + } + + list.innerHTML = pendingPosts.map(post => { + const dateStr = new Date(post.scheduled_time).toLocaleString('ru-RU', { + day: 'numeric', + month: 'short', + hour: '2-digit', + minute: '2-digit' + }); + const platforms = (post.platforms || []).map(p => { + const type = p.type || p; + return type === 'telegram' ? 'TG' : type === 'vk' ? 'VK' : type; + }).join(' · '); + + // Collect all photo URLs for preview + const allPhotos = [ + ...(post.photos || []), + ...(post.uploaded_files || []).map(f => f.url || f) + ]; + const photosCount = allPhotos.length; + + // Generate photo preview HTML (show up to 4 photos) + let photosPreviewHtml = ''; + if (photosCount > 0) { + const previewPhotos = allPhotos.slice(0, 4); + const moreCount = photosCount > 4 ? photosCount - 4 : 0; + photosPreviewHtml = ` +
+ ${previewPhotos.map(url => ``).join('')} + ${moreCount > 0 ? `+${moreCount}` : ''} +
+ `; + } + + return ` +
+
+ 📅 ${dateStr} + ${platforms} +
+ ${photosPreviewHtml} +
+ ${post.text ? `

${escapeHtml(post.text.substring(0, 150))}${post.text.length > 150 ? '...' : ''}

` : ''} + ${post.tags?.length ? `${post.tags.slice(0, 5).map(t => '#' + t).join(' ')}` : ''} +
+
+ + +
+
+ `; + }).join(''); + + // Attach event handlers + list.querySelectorAll('.btn-delete-scheduled').forEach(btn => { + btn.addEventListener('click', () => deleteScheduledPost(btn.dataset.id)); + }); + list.querySelectorAll('.btn-edit-scheduled').forEach(btn => { + btn.addEventListener('click', () => editScheduledPost(btn.dataset.id, data.posts)); + }); + // Update count badge + updateScheduledCount(pendingPosts.length); + } else { + list.innerHTML = '

Нет запланированных постов

'; + updateScheduledCount(0); + } + } catch (error) { + list.innerHTML = '

Ошибка загрузки

'; + } + } + + // Update scheduled posts count badge + async function updateScheduledCount(count = null) { + const badge = document.getElementById('scheduled-count'); + if (!badge) return; + + if (count !== null) { + badge.textContent = count; + badge.style.display = count > 0 ? 'inline-block' : 'none'; + return; + } + + try { + const formData = new FormData(); + formData.append('action', 'get_scheduled_posts'); + const response = await fetch('api.php', { method: 'POST', body: formData }); + const data = await response.json(); + + if (data.posts) { + const pendingCount = data.posts.filter(p => p.status === 'pending').length; + badge.textContent = pendingCount; + badge.style.display = pendingCount > 0 ? 'inline-block' : 'none'; + } + } catch (error) { + console.error('Failed to update scheduled count:', error); + } + } + + async function deleteScheduledPost(postId) { + if (!confirm('Удалить этот запланированный пост?')) return; + + try { + const formData = new FormData(); + formData.append('action', 'delete_scheduled_post'); + formData.append('id', postId); + + const response = await fetch('api.php', { method: 'POST', body: formData }); + const data = await response.json(); + + if (data.error) { + showNotification('Ошибка: ' + data.error, 'error'); + } else { + showNotification('Пост удалён', 'success'); + loadScheduledPosts(); + } + } catch (error) { + showNotification('Ошибка: ' + error.message, 'error'); + } + } + + function editScheduledPost(postId, posts) { + const post = posts.find(p => p.id === postId); + if (!post) return; + + const card = document.querySelector(`.scheduled-post-card[data-id="${postId}"]`); + if (!card) return; + + // Collect all photo URLs + const allPhotos = [ + ...(post.photos || []), + ...(post.uploaded_files || []).map(f => f.url || f) + ]; + + const hasTg = (post.platforms || []).some(p => (p.type || p) === 'telegram'); + const hasVk = (post.platforms || []).some(p => (p.type || p) === 'vk'); + const tags = post.tags || []; + + // Parse scheduled_time into date and time inputs + let dateVal = '', timeVal = ''; + if (post.scheduled_time) { + const dt = new Date(post.scheduled_time.replace(' ', 'T')); + dateVal = `${dt.getFullYear()}-${String(dt.getMonth()+1).padStart(2,'0')}-${String(dt.getDate()).padStart(2,'0')}`; + timeVal = `${String(dt.getHours()).padStart(2,'0')}:${String(dt.getMinutes()).padStart(2,'0')}`; + } + + // Save original HTML for cancel + const originalHtml = card.innerHTML; + + // Render inline editor + card.classList.add('editing'); + card.innerHTML = ` +
+
+ ${allPhotos.length > 0 ? allPhotos.map((url, i) => ` +
+ + +
+ `).join('') : '

Нет фото

'} +
+ +
+
+ ${tags.map(t => `#${escapeHtml(t)} `).join('')} +
+ +
+
+
+ + +
+
+ + +
+
+
+ + +
+
+ + + +
+
+ `; + + // Track editable photos and tags + let editPhotos = [...allPhotos]; + let editTags = [...tags]; + + // Photo remove handlers + card.querySelectorAll('.inline-editor-photos .remove-btn').forEach(btn => { + btn.addEventListener('click', () => { + const idx = parseInt(btn.dataset.index); + editPhotos.splice(idx, 1); + // Re-render photos + const photosContainer = card.querySelector('.inline-editor-photos'); + if (editPhotos.length > 0) { + photosContainer.innerHTML = editPhotos.map((url, i) => ` +
+ + +
+ `).join(''); + // Re-attach handlers + photosContainer.querySelectorAll('.remove-btn').forEach(b => { + b.addEventListener('click', () => { + editPhotos.splice(parseInt(b.dataset.index), 1); + b.parentElement.remove(); + if (editPhotos.length === 0) { + photosContainer.innerHTML = '

Нет фото

'; + } + }); + }); + } else { + photosContainer.innerHTML = '

Нет фото

'; + } + }); + }); + + // Tag remove handlers + card.querySelectorAll('.tag-remove').forEach(btn => { + btn.addEventListener('click', () => { + editTags = editTags.filter(t => t !== btn.dataset.tag); + btn.parentElement.remove(); + }); + }); + + // Tag add on Enter + const tagInput = card.querySelector('.inline-tags-input'); + tagInput?.addEventListener('keydown', (e) => { + if (e.key === 'Enter' || e.key === ',') { + e.preventDefault(); + const tag = tagInput.value.trim().replace(/^#/, '').replace(/[,\s]+/g, ''); + if (tag && !editTags.includes(tag)) { + editTags.push(tag); + const chip = document.createElement('span'); + chip.className = 'tag-chip'; + chip.innerHTML = `#${escapeHtml(tag)} `; + chip.querySelector('.tag-remove').addEventListener('click', () => { + editTags = editTags.filter(t => t !== tag); + chip.remove(); + }); + card.querySelector('.inline-tags-list').appendChild(chip); + } + tagInput.value = ''; + } + }); + + // Cancel + card.querySelector('.inline-cancel').addEventListener('click', () => { + card.classList.remove('editing'); + card.innerHTML = originalHtml; + // Re-attach original handlers + card.querySelector('.btn-edit-scheduled')?.addEventListener('click', () => editScheduledPost(postId, posts)); + card.querySelector('.btn-delete-scheduled')?.addEventListener('click', () => deleteScheduledPost(postId)); + }); + + // Save + card.querySelector('.inline-save').addEventListener('click', async () => { + const text = card.querySelector('.inline-editor-text').value; + const dateInput = card.querySelector('.inline-date').value; + const timeInput = card.querySelector('.inline-time').value; + const tgChecked = card.querySelector('.inline-chk-tg').checked; + const vkChecked = card.querySelector('.inline-chk-vk').checked; + + if (!dateInput || !timeInput) { + showNotification('Укажите дату и время', 'error'); + return; + } + + const scheduledTime = `${dateInput} ${timeInput}:00`; + + const platforms = []; + if (tgChecked) platforms.push({ type: 'telegram', target: document.getElementById('tg-channel')?.value || '' }); + if (vkChecked) platforms.push({ type: 'vk', target: document.getElementById('vk-group')?.value || '' }); + + if (platforms.length === 0) { + showNotification('Выберите платформу', 'error'); + return; + } + + // Separate photos and uploaded files based on original data + const origPhotos = post.photos || []; + const origUploaded = (post.uploaded_files || []).map(f => f.url || f); + const newPhotos = editPhotos.filter(url => origPhotos.includes(url)); + const newUploaded = editPhotos.filter(url => origUploaded.includes(url)).map(url => { + const orig = (post.uploaded_files || []).find(f => (f.url || f) === url); + return orig && typeof orig === 'object' ? orig : { url }; + }); + // Photos not in either original list go to photos + editPhotos.forEach(url => { + if (!newPhotos.includes(url) && !newUploaded.some(f => (f.url || f) === url)) { + newPhotos.push(url); + } + }); + + const saveBtn = card.querySelector('.inline-save'); + saveBtn.disabled = true; + saveBtn.textContent = 'Сохранение...'; + + try { + const formData = new FormData(); + formData.append('action', 'update_scheduled_post'); + formData.append('id', postId); + formData.append('text', text); + formData.append('tags', JSON.stringify(editTags)); + formData.append('photos', JSON.stringify(newPhotos)); + formData.append('uploaded_files', JSON.stringify(newUploaded)); + formData.append('platforms', JSON.stringify(platforms)); + formData.append('scheduled_time', scheduledTime); + + const response = await fetch('api.php', { method: 'POST', body: formData }); + const data = await response.json(); + + if (data.error) { + showNotification('Ошибка: ' + data.error, 'error'); + saveBtn.disabled = false; + saveBtn.textContent = '💾 Сохранить'; + } else { + showNotification('Пост обновлён!', 'success'); + loadScheduledPosts(); + } + } catch (error) { + showNotification('Ошибка: ' + error.message, 'error'); + saveBtn.disabled = false; + saveBtn.textContent = '💾 Сохранить'; + } + }); + + // Publish now + card.querySelector('.inline-publish-now').addEventListener('click', async () => { + const text = card.querySelector('.inline-editor-text').value; + const tgChecked = card.querySelector('.inline-chk-tg').checked; + const vkChecked = card.querySelector('.inline-chk-vk').checked; + + const platforms = []; + const tgChannel = document.getElementById('tg-channel')?.value; + const vkGroup = document.getElementById('vk-group')?.value; + if (tgChecked && tgChannel) platforms.push({ type: 'telegram', target: tgChannel }); + if (vkChecked && vkGroup) platforms.push({ type: 'vk', target: vkGroup }); + + if (platforms.length === 0) { + showNotification('Выберите платформу и канал/группу', 'error'); + return; + } + + if (editPhotos.length === 0 && !text.trim()) { + showNotification('Добавьте фото или текст', 'error'); + return; + } + + if (!confirm('Опубликовать этот пост сейчас?')) return; + + const pubBtn = card.querySelector('.inline-publish-now'); + pubBtn.disabled = true; + pubBtn.textContent = 'Публикация...'; + + try { + // Add tags to text + const tagsStr = editTags.map(t => '#' + t).join(' '); + let fullText = text.trim(); + if (tagsStr) { + fullText = fullText ? fullText + '\n\n' + tagsStr : tagsStr; + } + + // Add cross-promo + const crossPromoEnabled = post.cross_promo; + if (crossPromoEnabled) { + const storedSettings = getCrossPromoSettings(); + if (tgChecked && storedSettings.vkLink) { + // Will be handled per-platform below + } + } + + // Publish to each platform + const results = {}; + for (const platform of platforms) { + let platformText = fullText; + + // Cross-promo + if (crossPromoEnabled) { + const s = getCrossPromoSettings(); + if (platform.type === 'telegram' && s.vkLink) { + const parseMode = 'HTML'; + platformText += `\n\n${s.textForTg || 'Мой канал ВКонтакте'}`; + } + if (platform.type === 'vk' && s.telegramLink) { + platformText += `\n\n${s.textForVk || 'Мой канал в Telegram'}: ${s.telegramLink}`; + } + } + + const formData = new FormData(); + formData.append('action', 'multi_post'); + formData.append('platforms', JSON.stringify([platform])); + formData.append('text', platformText); + formData.append('photos', JSON.stringify(editPhotos)); + formData.append('uploaded_files', JSON.stringify([])); + formData.append('parse_mode', 'HTML'); + + const response = await fetch('api.php', { method: 'POST', body: formData }); + const data = await response.json(); + if (data.results) Object.assign(results, data.results); + } + + // Check results + const allSuccess = Object.values(results).every(r => r.success); + const anySuccess = Object.values(results).some(r => r.success); + + if (anySuccess) { + // Delete the scheduled post + const delForm = new FormData(); + delForm.append('action', 'delete_scheduled_post'); + delForm.append('id', postId); + await fetch('api.php', { method: 'POST', body: delForm }); + + showNotification(allSuccess ? 'Опубликовано!' : 'Частично опубликовано', allSuccess ? 'success' : 'warning'); + loadScheduledPosts(); + } else { + const errors = Object.entries(results).map(([p, r]) => `${p}: ${r.error}`).join(', '); + showNotification('Ошибка: ' + errors, 'error'); + pubBtn.disabled = false; + pubBtn.textContent = '🚀 Опубликовать сейчас'; + } + } catch (error) { + showNotification('Ошибка: ' + error.message, 'error'); + pubBtn.disabled = false; + pubBtn.textContent = '🚀 Опубликовать сейчас'; + } + }); + + // Scroll to the card + card.scrollIntoView({ behavior: 'smooth', block: 'nearest' }); + } + + // ============ PUBLISHED POSTS ARCHIVE ============ + + async function loadPublishedPosts() { + const list = document.getElementById('published-posts-list'); + if (!list) return; + + try { + const formData = new FormData(); + formData.append('action', 'get_published_posts'); + const response = await fetch('api.php', { method: 'POST', body: formData }); + const data = await response.json(); + + if (data.posts && data.posts.length > 0) { + list.innerHTML = data.posts.map(post => { + const publishedDate = post.published_at || post.scheduled_time; + const dateStr = new Date(publishedDate).toLocaleString('ru-RU', { + day: 'numeric', + month: 'short', + hour: '2-digit', + minute: '2-digit' + }); + + const platforms = (post.platforms || []).map(p => { + const type = p.type || p; + return type === 'telegram' ? 'TG' : type === 'vk' ? 'VK' : type; + }).join(' · '); + + // Check results for success/error + const results = post.results || {}; + let statusIcons = ''; + Object.entries(results).forEach(([platform, result]) => { + const icon = result.success ? '✓' : '✗'; + const platformName = platform === 'telegram' ? 'TG' : platform === 'vk' ? 'VK' : platform; + statusIcons += `${platformName} ${icon} `; + }); + + // Collect all photo URLs for preview + const allPhotos = [ + ...(post.photos || []), + ...(post.uploaded_files || []).map(f => f.url || f) + ]; + + // Generate photo preview HTML (show up to 3 photos) + let photosPreviewHtml = ''; + if (allPhotos.length > 0) { + const previewPhotos = allPhotos.slice(0, 3); + photosPreviewHtml = ` +
+ ${previewPhotos.map(url => ``).join('')} + ${allPhotos.length > 3 ? `+${allPhotos.length - 3}` : ''} +
+ `; + } + + return ` +
+
+ ${dateStr} + ${statusIcons} +
+ ${photosPreviewHtml} + ${post.text ? `

${escapeHtml(post.text.substring(0, 100))}${post.text.length > 100 ? '...' : ''}

` : ''} +
+ `; + }).join(''); + } else { + list.innerHTML = '

Нет опубликованных постов

'; + } + } catch (error) { + list.innerHTML = '

Ошибка загрузки

'; + } + } + + // Refresh archive button + document.getElementById('btn-refresh-archive')?.addEventListener('click', loadPublishedPosts); + + // Load scheduled and published posts on initial page load + loadScheduledPosts(); + loadPublishedPosts(); + + // Create/Update scheduled post + document.getElementById('btn-create-scheduled')?.addEventListener('click', async () => { + const text = document.getElementById('scheduled-text')?.value || ''; + const datetime = document.getElementById('scheduled-datetime')?.value || ''; + const tgChecked = document.getElementById('scheduled-chk-telegram')?.checked; + const vkChecked = document.getElementById('scheduled-chk-vk')?.checked; + + if (!datetime) { + showNotification('Укажите дату и время публикации', 'error'); + return; + } + + const platforms = []; + if (tgChecked) platforms.push({ type: 'telegram' }); + if (vkChecked) platforms.push({ type: 'vk' }); + + if (platforms.length === 0) { + showNotification('Выберите хотя бы одну платформу', 'error'); + return; + } + + // Get photos from gallery selection + const photoUrls = state.selectedPhotos.map(p => p.urls.large || p.urls.original || p.urls.medium640); + + const formData = new FormData(); + formData.append('action', scheduledState.editingPostId ? 'update_scheduled_post' : 'create_scheduled_post'); + if (scheduledState.editingPostId) { + formData.append('id', scheduledState.editingPostId); + } + formData.append('text', text); + formData.append('tags', JSON.stringify([])); // TODO: add tags support + formData.append('photos', JSON.stringify(photoUrls)); + formData.append('uploaded_files', JSON.stringify(scheduledState.uploadedFiles.filter(f => f.url))); + formData.append('platforms', JSON.stringify(platforms)); + formData.append('scheduled_time', datetime.replace('T', ' ')); + + try { + const response = await fetch('api.php', { method: 'POST', body: formData }); + const data = await response.json(); + + if (data.error) { + showNotification('Ошибка: ' + data.error, 'error'); + } else { + showNotification(scheduledState.editingPostId ? 'Пост обновлён' : 'Пост запланирован!', 'success'); + + // Reset form + document.getElementById('scheduled-text').value = ''; + document.getElementById('scheduled-datetime').value = ''; + scheduledState.editingPostId = null; + scheduledState.uploadedFiles = []; + document.getElementById('scheduled-uploaded-preview').innerHTML = ''; + + const btn = document.getElementById('btn-create-scheduled'); + if (btn) btn.textContent = '📅 Запланировать публикацию'; + + loadScheduledPosts(); + } + } catch (error) { + showNotification('Ошибка: ' + error.message, 'error'); + } + }); + + // File upload for scheduled posts + document.getElementById('btn-scheduled-upload')?.addEventListener('click', () => { + document.getElementById('scheduled-file-upload')?.click(); + }); + + document.getElementById('scheduled-file-upload')?.addEventListener('change', async (e) => { + const files = Array.from(e.target.files); + if (!files.length) return; + + for (const file of files) { + if (file.size > 50 * 1024 * 1024) { + showNotification(`Файл ${file.name} слишком большой`, 'error'); + continue; + } + + const formData = new FormData(); + formData.append('action', 'upload_file'); + formData.append('file', file); + + try { + const response = await fetch('api.php', { method: 'POST', body: formData }); + const data = await response.json(); + + if (data.error) { + showNotification(`Ошибка: ${data.error}`, 'error'); + } else { + scheduledState.uploadedFiles.push({ + url: data.url, + type: data.type, + name: file.name + }); + renderScheduledUploads(); + } + } catch (error) { + showNotification('Ошибка загрузки', 'error'); + } + } + e.target.value = ''; + }); + + function renderScheduledUploads() { + const preview = document.getElementById('scheduled-uploaded-preview'); + if (!preview) return; + + preview.innerHTML = scheduledState.uploadedFiles.map((file, idx) => ` +
+ ${escapeHtml(file.name?.substring(0, 15) || 'file')} + +
+ `).join(''); + + preview.querySelectorAll('.remove-uploaded').forEach(btn => { + btn.addEventListener('click', () => { + scheduledState.uploadedFiles.splice(parseInt(btn.dataset.idx), 1); + renderScheduledUploads(); + }); + }); + } + + // Update scheduled photos preview when switching to tab + function updateScheduledPhotosPreview() { + const preview = document.getElementById('scheduled-photos-preview'); + if (!preview) return; + + if (state.selectedPhotos.length === 0) { + preview.innerHTML = '

Сначала выберите фото в Галерее, затем вернитесь сюда

'; + } else { + preview.innerHTML = state.selectedPhotos.map(photo => ` +
+ +
+ `).join(''); + } + } + + // Update preview when tab is switched + document.querySelectorAll('.nav-btn[data-tab="scheduled"]').forEach(btn => { + btn.addEventListener('click', updateScheduledPhotosPreview); + }); + + // ============ COPY WITH TAGS ============ + + document.getElementById('btn-copy-with-tags')?.addEventListener('click', () => { + const output = document.getElementById('output-result'); + const title = document.getElementById('converter-title')?.value || ''; + const text = document.getElementById('converter-text')?.value || ''; + const tags = getTagsString('converter'); + + let fullText = ''; + if (title) fullText += title + '\n\n'; + if (text) fullText += text + '\n\n'; + fullText += output.value; + if (tags) fullText += '\n\n' + tags; + + navigator.clipboard.writeText(fullText).then(() => { + const status = document.getElementById('copy-status'); + if (status) { + status.textContent = '✓ Скопировано с тегами!'; + status.classList.add('visible'); + setTimeout(() => status.classList.remove('visible'), 2000); + } + }); + }); + + // Update copy button to show status + document.getElementById('btn-copy')?.addEventListener('click', () => { + const output = document.getElementById('output-result'); + navigator.clipboard.writeText(output.value).then(() => { + const status = document.getElementById('copy-status'); + if (status) { + status.textContent = '✓ Скопировано!'; + status.classList.add('visible'); + setTimeout(() => status.classList.remove('visible'), 2000); + } + }); + }); + + // Check Flickr OAuth status + async function loadFlickrOAuthStatus() { + const statusEl = document.getElementById('flickr-oauth-status'); + const btnEl = document.getElementById('flickr-oauth-btn'); + const bannerEl = document.getElementById('oauth-banner'); + + try { + const response = await fetch('api.php?action=flickr_oauth_status'); + const data = await response.json(); + + if (data.authorized) { + // Settings page elements + if (statusEl) { + statusEl.className = 'status connected'; + statusEl.textContent = 'Авторизован (оригиналы доступны)'; + } + if (btnEl) { + btnEl.textContent = 'Переавторизовать'; + btnEl.className = 'btn btn-small btn-secondary'; + } + // Hide gallery banner when authorized + if (bannerEl) { + bannerEl.classList.add('hidden'); + } + } else { + // Settings page elements + if (statusEl) { + statusEl.className = 'status disconnected'; + statusEl.textContent = 'Не авторизован'; + } + if (btnEl) { + btnEl.textContent = 'Авторизовать'; + btnEl.className = 'btn btn-small btn-primary'; + } + // Show gallery banner when not authorized + if (bannerEl) { + bannerEl.classList.remove('hidden'); + } + } + } catch (error) { + if (statusEl) { + statusEl.className = 'status disconnected'; + statusEl.textContent = 'Ошибка проверки'; + } + } + } + + // ============ WIDGET SETTINGS ============ + + const widgetApiUrlInput = document.getElementById('widget-api-url'); + const widgetApiUrlCode = document.getElementById('widget-api-url-code'); + const widgetEnabled = document.getElementById('widget-enabled'); + const widgetMaxPhotos = document.getElementById('widget-max-photos'); + const widgetCacheTime = document.getElementById('widget-cache-time'); + const widgetAlbumsList = document.getElementById('widget-albums-list'); + const btnLoadWidgetAlbums = document.getElementById('btn-load-widget-albums'); + const btnSaveWidgetSettings = document.getElementById('btn-save-widget-settings'); + const widgetSaveStatus = document.getElementById('widget-save-status'); + + let widgetSelectedAlbums = []; + + // Set API URL + if (widgetApiUrlInput) { + const apiUrl = window.location.origin + window.location.pathname.replace('index.php', '') + 'widget_api.php?action=get_photos'; + widgetApiUrlInput.value = apiUrl; + if (widgetApiUrlCode) { + widgetApiUrlCode.textContent = apiUrl; + } + } + + // Copy widget URL + window.copyWidgetUrl = function() { + if (widgetApiUrlInput) { + widgetApiUrlInput.select(); + document.execCommand('copy'); + showNotification('URL скопирован', 'success'); + } + }; + + // Load widget settings + async function loadWidgetSettings() { + try { + const response = await fetch('widget_api.php?action=get_settings'); + const data = await response.json(); + if (data.success && data.settings) { + const settings = data.settings; + if (widgetEnabled) widgetEnabled.checked = settings.enabled !== false; + if (widgetMaxPhotos) widgetMaxPhotos.value = settings.max_photos || 30; + if (widgetCacheTime) widgetCacheTime.value = settings.cache_time || 3600; + widgetSelectedAlbums = settings.albums || []; + } + } catch (error) { + console.error('Failed to load widget settings:', error); + } + } + + // Load albums for widget selection + async function loadWidgetAlbums() { + if (!widgetAlbumsList) return; + + widgetAlbumsList.innerHTML = '

Загрузка альбомов...

'; + + try { + const response = await fetch('widget_api.php?action=get_albums'); + const data = await response.json(); + + if (data.success && data.albums) { + renderWidgetAlbums(data.albums); + } else { + widgetAlbumsList.innerHTML = '

Ошибка загрузки альбомов

'; + } + } catch (error) { + widgetAlbumsList.innerHTML = '

Ошибка: ' + error.message + '

'; + } + } + + // Render widget albums selection + function renderWidgetAlbums(albums) { + if (!widgetAlbumsList) return; + + if (albums.length === 0) { + widgetAlbumsList.innerHTML = '

Нет доступных альбомов

'; + return; + } + + widgetAlbumsList.innerHTML = albums.map(album => { + const isSelected = widgetSelectedAlbums.includes(album.id); + const title = album.title?._content || album.title || 'Без названия'; + const count = album.photos || 0; + const thumb = album.primary_photo_extras?.url_m || + album.primary_photo_extras?.url_s || + album.primary_photo_extras?.url_sq || ''; + return ` + + `; + }).join(''); + + // Add event listeners + widgetAlbumsList.querySelectorAll('input[type="checkbox"]').forEach(checkbox => { + checkbox.addEventListener('change', function() { + const albumId = this.value; + const label = this.closest('.widget-album-item'); + if (this.checked) { + if (!widgetSelectedAlbums.includes(albumId)) { + widgetSelectedAlbums.push(albumId); + } + label.classList.add('selected'); + } else { + widgetSelectedAlbums = widgetSelectedAlbums.filter(id => id !== albumId); + label.classList.remove('selected'); + } + }); + }); + } + + // Save widget settings + async function saveWidgetSettings() { + const settings = { + enabled: widgetEnabled ? widgetEnabled.checked : true, + albums: widgetSelectedAlbums, + max_photos: widgetMaxPhotos ? parseInt(widgetMaxPhotos.value) : 30, + cache_time: widgetCacheTime ? parseInt(widgetCacheTime.value) : 3600 + }; + + try { + const response = await fetch('widget_api.php?action=save_settings', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(settings) + }); + + const data = await response.json(); + if (data.success) { + if (widgetSaveStatus) { + widgetSaveStatus.textContent = '✓ Сохранено'; + widgetSaveStatus.className = 'save-status success'; + setTimeout(() => { + widgetSaveStatus.textContent = ''; + }, 3000); + } + showNotification('Настройки виджета сохранены', 'success'); + } else { + showNotification(data.error || 'Ошибка сохранения', 'error'); + } + } catch (error) { + showNotification('Ошибка: ' + error.message, 'error'); + } + } + + // Widget event listeners + if (btnLoadWidgetAlbums) { + btnLoadWidgetAlbums.addEventListener('click', loadWidgetAlbums); + } + + if (btnSaveWidgetSettings) { + btnSaveWidgetSettings.addEventListener('click', saveWidgetSettings); + } + + // Load widget settings on tab switch + document.querySelectorAll('.nav-btn[data-tab="widget"]').forEach(btn => { + btn.addEventListener('click', () => { + loadWidgetSettings(); + }); + }); + + // Initial load + loadTelegramStatus(); + loadVKStatus(); + loadFlickrOAuthStatus(); + updateScheduledCount(); // Load scheduled posts count badge + + // Restore selected photos and uploaded files UI if any were saved + if (state.selectedPhotos.length > 0 || state.uploadedFiles.length > 0) { + updateSelectionUI(); + updatePostingPreview(); + if (state.selectedPhotos.length > 0) { + console.log('Restored ' + state.selectedPhotos.length + ' Flickr photos from previous session'); + } + if (state.uploadedFiles.length > 0) { + console.log('Restored ' + state.uploadedFiles.length + ' uploaded files from previous session'); + } + } + + // Auto-load albums on page init + if (albumsGrid) { + const cachedAlbums = getAlbumCache(); + if (cachedAlbums && cachedAlbums.length > 0) { + // Use cache first for instant display + console.log('Loading cached albums:', cachedAlbums.length); + window._cachedAlbums = cachedAlbums; + renderAlbumsGrid(cachedAlbums); + // Silently refresh in background + setTimeout(() => refreshAlbumsSilently(), 2000); + } else { + // No cache or empty - load from API + console.log('No cache, loading albums from API...'); + loadAlbums(false); + } + } +}); diff --git a/setup.php b/setup.php new file mode 100644 index 0000000..06c668b --- /dev/null +++ b/setup.php @@ -0,0 +1,113 @@ +hasUsers()) { + header('Location: login.php'); + exit; +} + +$error = ''; +$success = false; + +// Handle setup form submission +if ($_SERVER['REQUEST_METHOD'] === 'POST') { + $username = trim($_POST['username'] ?? ''); + $password = $_POST['password'] ?? ''; + $confirmPassword = $_POST['confirm_password'] ?? ''; + + // Validation + if (empty($username)) { + $error = 'Имя пользователя обязательно'; + } elseif (strlen($username) < 3) { + $error = 'Имя пользователя должно быть не менее 3 символов'; + } elseif (strlen($password) < 8) { + $error = 'Пароль должен быть не менее 8 символов'; + } elseif ($password !== $confirmPassword) { + $error = 'Пароли не совпадают'; + } else { + // Create user + if ($auth->createUser($username, $password)) { + $success = true; + } else { + $error = 'Не удалось создать пользователя'; + } + } +} + +// CSRF token +$csrfToken = bin2hex(random_bytes(32)); +$_SESSION['csrf_token'] = $csrfToken; +?> + + + + + + Настройка - VH Posting System + + + + + + + diff --git a/test_single_download.php b/test_single_download.php new file mode 100644 index 0000000..bb2dca0 --- /dev/null +++ b/test_single_download.php @@ -0,0 +1,110 @@ +Testing Download: $testUrl

KT(?PumW%=lAw~0_{merQ!vX=!|Sigv+vVbARdXMPd$c;`* zWbY_{^GjF&M(@Pn&QUR%2%xq>OLh#PHCPI+cOyy-^vfIjeMs$bCz9@23veFEi?2J++-IJ(Gj!8EXbG?X z9#oKCKrc6IyD1`W4d3c+B5Zl8(QTm7d)QvFlc*#eEj++VZ}P$s`LM%K!j;^{!|_{h zIHL?m)lQ}E4ln7kgG_N(=j7XVTm)m_{C^H!s9W1{9{>?mkDK-j<-(~ZfnI&#cM&hD z*4~JEkPbIqfjiLBouazP5Bcnqq)y62MqsVn`Skbvs1@Vs&IE8s!VFcF>F$@hB`xNd)K}_vfV*(5bLgz1*_@2pzu&# z`sy1LCI(n|G*`q%fTJjRTgFVJp!Xv-#)j}+a6JNvC=XD{6@duc#aa=^I_}n5SRpP) z2iOo1Rku5HKjgVl$F(YmmCWsCDjz};q;B2%oJcf(Rj0a{fK zwwxItkhT36gyCryD3!P`D3&{!;E||6w2!H>F!R0He09B|nBrOQGl~e$n#495SNt-1 z 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 { + const settings = { + telegramLink: document.getElementById('cross-promo-telegram')?.value.trim() || '', + vkLink: document.getElementById('cross-promo-vk')?.value.trim() || '', + textForTg: document.getElementById('cross-promo-text-tg')?.value.trim() || 'Мой канал ВКонтакте', + textForVk: document.getElementById('cross-promo-text-vk')?.value.trim() || 'Мой канал в Telegram' + }; + + // Save to localStorage + saveCrossPromoSettings(settings); + + // Save to server for cron + try { + const formData = new FormData(); + formData.append('action', 'save_cross_promo'); + formData.append('telegramLink', settings.telegramLink); + formData.append('vkLink', settings.vkLink); + formData.append('textForTg', settings.textForTg); + formData.append('textForVk', settings.textForVk); + await fetch('api.php', { method: 'POST', body: formData }); + } catch (e) { + console.warn('Failed to save cross-promo to server:', e); + } + + const status = document.getElementById('cross-promo-save-status'); + if (status) { + status.textContent = '✓ Сохранено'; + status.className = 'save-status success'; + setTimeout(() => { status.textContent = ''; }, 2000); + } + showNotification('Настройки кросс-промо сохранены', 'success'); + }); + + // Initialize cross-promo on load + initCrossPromoSettings(); + + // ============ AUTO-SAVE POST DRAFT (SERVER-BASED) ============ + + let serverDraft = null; + let draftSaveTimer = null; + + // Save draft to server (debounced - for text input) + function savePostDraft() { + clearTimeout(draftSaveTimer); + draftSaveTimer = setTimeout(savePostDraftToServer, 1500); + } + + // Save draft immediately (for tags, photos) + function savePostDraftNow() { + clearTimeout(draftSaveTimer); + savePostDraftToServer(); + } + + // Actually save to server + async function savePostDraftToServer() { + const postText = document.getElementById('post-text')?.value || ''; + const tags = typeof tagContexts !== 'undefined' ? tagContexts.post : []; + const photos = state?.selectedPhotos?.map(p => ({ + id: p.id, + title: p.title, + urls: p.urls, + page_url: p.page_url, + is_video: p.is_video + })) || []; + const uploadedFiles = state?.uploadedFiles?.filter(f => !f.uploading && f.url).map(f => ({ + id: f.id, + name: f.name, + type: f.type, + url: f.url + })) || []; + + const formData = new FormData(); + formData.append('action', 'save_draft'); + formData.append('text', postText); + formData.append('tags', JSON.stringify(tags)); + formData.append('photos', JSON.stringify(photos)); + formData.append('uploaded_files', JSON.stringify(uploadedFiles)); + + try { + await fetch('api.php', { method: 'POST', body: formData }); + } catch (e) { + console.warn('Could not save draft to server:', e); + } + } + + // Load draft from server + async function loadPostDraftFromServer() { + try { + const response = await fetch('api.php?action=get_draft'); + const data = await response.json(); + if (data.success && data.draft) { + return data.draft; + } + } catch (e) { + console.error('Error loading draft from server:', e); + } + return null; + } + + // Clear draft on server + async function clearPostDraftOnServer() { + try { + const formData = new FormData(); + formData.append('action', 'clear_draft'); + await fetch('api.php', { method: 'POST', body: formData }); + } catch (e) { + console.warn('Could not clear draft on server:', e); + } + } + + function clearPostDraft() { + clearPostDraftOnServer(); + } + + // Save photos and uploaded files immediately + function saveSelectedPhotos() { + savePostDraftNow(); + } + + function saveUploadedFiles() { + savePostDraftNow(); + } + + // Auto-save on text input (debounced) + document.getElementById('post-text')?.addEventListener('input', () => { + savePostDraft(); + }); + + // ============ STATE ============ + + const MAX_PHOTOS = 9; + + function getTotalPhotosCount() { + return state.selectedPhotos.length + state.uploadedFiles.length; + } + + function canAddPhotos(count = 1) { + if (getTotalPhotosCount() + count > MAX_PHOTOS) { + showNotification(`Максимум ${MAX_PHOTOS} фото/видео`, 'error'); + return false; + } + return true; + } + + const state = { + selectedPhotos: [], + uploadedFiles: [], + currentPage: 1, + totalPages: 1, + currentAlbum: '', + isLoadingPhotos: false, + isLoadingAlbums: false, + photoRequestId: 0, // For request deduplication + albumRequestId: 0, + // Infinite scroll state for albums + albumsPage: 1, + albumsTotalPages: 1, + albumsTotal: 0, + isLoadingMoreAlbums: false, + allAlbums: [], + // Infinite scroll state for photos + isLoadingMorePhotos: false, + allPhotos: [] + }; + + // Load draft from server on page load + let pendingDraft = null; + loadPostDraftFromServer().then(draft => { + if (!draft) return; + serverDraft = draft; + pendingDraft = draft; + + // Restore text + const postText = document.getElementById('post-text'); + if (postText && draft.text) { + postText.value = draft.text; + } + + // Restore photos + if (draft.photos && draft.photos.length > 0) { + state.selectedPhotos = draft.photos; + } + + // Restore uploaded files (without dataUrl, just URL) + if (draft.uploaded_files && draft.uploaded_files.length > 0) { + state.uploadedFiles = draft.uploaded_files.map(f => ({ + ...f, + dataUrl: f.url, // Use URL as dataUrl for preview + uploading: false + })); + } + + // Update preview + updatePostingPreview(); + + // Try to restore tags (will work if tagContexts is already initialized) + restoreDraftTags(); + }); + + // Function to restore tags after tagContexts is available + let tagsRestored = false; + function restoreDraftTags() { + if (tagsRestored) return; + if (!pendingDraft || !pendingDraft.tags || pendingDraft.tags.length === 0) return; + if (typeof tagContexts === 'undefined') return; + + tagsRestored = true; + tagContexts.post = pendingDraft.tags; + const tagsList = document.getElementById('post-tags-list'); + if (tagsList) { + tagsList.innerHTML = pendingDraft.tags.map(tag => ` + + #${escapeHtml(tag)} + + + `).join(''); + // Re-attach remove handlers + tagsList.querySelectorAll('.tag-remove').forEach(btn => { + btn.addEventListener('click', () => { + const tag = btn.dataset.tag; + tagContexts.post = tagContexts.post.filter(t => t !== tag); + btn.parentElement.remove(); + savePostDraftNow(); + }); + }); + } + showNotification('Черновик восстановлен', 'info'); + } + + // ============ PHOTO SOURCE BUTTONS ============ + + // Select from Flickr - go to gallery tab + document.getElementById('btn-select-from-flickr')?.addEventListener('click', () => { + document.querySelector('.nav-btn[data-tab="gallery"]')?.click(); + }); + + // Upload from device + document.getElementById('btn-upload-files')?.addEventListener('click', () => { + document.getElementById('file-upload')?.click(); + }); + + document.getElementById('file-upload')?.addEventListener('change', async (e) => { + const files = Array.from(e.target.files); + if (!files.length) return; + + for (const file of files) { + // Check photo limit + if (getTotalPhotosCount() >= MAX_PHOTOS) { + showNotification(`Максимум ${MAX_PHOTOS} фото/видео`, 'error'); + break; + } + + // Check file size (max 50MB) + if (file.size > 50 * 1024 * 1024) { + showNotification(`Файл ${file.name} слишком большой (макс 50MB)`, 'error'); + continue; + } + + // Create preview immediately + const reader = new FileReader(); + reader.onload = async (event) => { + const fileId = 'upload_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9); + const fileData = { + id: fileId, + name: file.name, + type: file.type, + size: file.size, + dataUrl: event.target.result, + uploading: true, + url: null + }; + state.uploadedFiles.push(fileData); + renderUploadedFiles(); + + // Upload to server + try { + const formData = new FormData(); + formData.append('action', 'upload_file'); + formData.append('file', file); + + const response = await fetch('api.php', { method: 'POST', body: formData }); + const data = await response.json(); + + // Find and update the file in state + const idx = state.uploadedFiles.findIndex(f => f.id === fileId); + if (idx !== -1) { + if (data.error) { + showNotification(`Ошибка загрузки ${file.name}: ${data.error}`, 'error'); + state.uploadedFiles.splice(idx, 1); + } else { + state.uploadedFiles[idx].url = data.url; + state.uploadedFiles[idx].uploading = false; + saveUploadedFiles(); // Save to localStorage after successful upload + } + renderUploadedFiles(); + } + } catch (error) { + showNotification(`Ошибка загрузки ${file.name}`, 'error'); + const idx = state.uploadedFiles.findIndex(f => f.id === fileId); + if (idx !== -1) { + state.uploadedFiles.splice(idx, 1); + renderUploadedFiles(); + } + } + }; + reader.readAsDataURL(file); + } + + // Clear input for re-upload of same files + e.target.value = ''; + }); + + function renderUploadedFiles() { + // Now uses the combined preview + updatePostingPreview(); + } + + // Drag and drop support for combined preview + const combinedPreview = document.getElementById('post-photos-preview'); + if (combinedPreview) { + ['dragenter', 'dragover', 'dragleave', 'drop'].forEach(eventName => { + combinedPreview.addEventListener(eventName, (e) => { + e.preventDefault(); + e.stopPropagation(); + }); + }); + + ['dragenter', 'dragover'].forEach(eventName => { + combinedPreview.addEventListener(eventName, () => { + combinedPreview.classList.add('drag-over'); + }); + }); + + ['dragleave', 'drop'].forEach(eventName => { + combinedPreview.addEventListener(eventName, () => { + combinedPreview.classList.remove('drag-over'); + }); + }); + + combinedPreview.addEventListener('drop', (e) => { + const files = e.dataTransfer.files; + if (files.length) { + const fileInput = document.getElementById('file-upload'); + if (fileInput) { + fileInput.files = files; + fileInput.dispatchEvent(new Event('change')); + } + } + }); + } + + // AbortController for cancelling in-flight requests + let photoAbortController = null; + let albumAbortController = null; + + // ============ ALBUM PREFERENCES (localStorage) ============ + + const ALBUM_CACHE_KEY = 'vh_album_cache'; + const ALBUM_PREFS_KEY = 'vh_album_prefs'; + const CACHE_TTL = 60 * 60 * 1000; // 1 hour + + function getAlbumCache() { + try { + const cached = localStorage.getItem(ALBUM_CACHE_KEY); + if (!cached) return null; + const data = JSON.parse(cached); + if (Date.now() - data.timestamp > CACHE_TTL) { + localStorage.removeItem(ALBUM_CACHE_KEY); + return null; + } + // Handle both old format (array) and new format (object with albums property) + const albums = data.albums; + if (Array.isArray(albums)) { + return albums; + } else if (albums && Array.isArray(albums.albums)) { + return albums.albums; + } + return null; + } catch (e) { + return null; + } + } + + function setAlbumCache(albumsOrData) { + try { + // Accept either array or object with albums property + const albums = Array.isArray(albumsOrData) ? albumsOrData : (albumsOrData.albums || []); + localStorage.setItem(ALBUM_CACHE_KEY, JSON.stringify({ + albums: albums, + timestamp: Date.now() + })); + } catch (e) { + console.warn('Failed to cache albums:', e); + } + } + + function getAlbumPrefs() { + try { + const prefs = localStorage.getItem(ALBUM_PREFS_KEY); + return prefs ? JSON.parse(prefs) : { favorites: [], order: [] }; + } catch (e) { + return { favorites: [], order: [] }; + } + } + + function saveAlbumPrefs(prefs) { + try { + localStorage.setItem(ALBUM_PREFS_KEY, JSON.stringify(prefs)); + } catch (e) { + console.warn('Failed to save album prefs:', e); + } + } + + function toggleAlbumFavorite(albumId) { + const prefs = getAlbumPrefs(); + const index = prefs.favorites.indexOf(albumId); + if (index === -1) { + prefs.favorites.push(albumId); + } else { + prefs.favorites.splice(index, 1); + } + saveAlbumPrefs(prefs); + renderAlbumDropdown(window._cachedAlbums || []); + } + + function sortAlbumsByPreference(albums) { + const prefs = getAlbumPrefs(); + const favorites = new Set(prefs.favorites); + + // Sort: favorites first, then rest + return [...albums].sort((a, b) => { + const aFav = favorites.has(a.id); + const bFav = favorites.has(b.id); + if (aFav && !bFav) return -1; + if (!aFav && bFav) return 1; + return 0; // Keep original order within groups + }); + } + + // ============ DOM ELEMENTS ============ + + const selectionBar = document.getElementById('selection-bar'); + const selectedCountEl = document.getElementById('selected-count'); + const photoGallery = document.getElementById('photo-gallery'); + const postPhotosPreview = document.getElementById('post-photos-preview'); + + // ============ UTILITY FUNCTIONS ============ + + function escapeHtml(text) { + const div = document.createElement('div'); + div.textContent = text || ''; + return div.innerHTML; + } + + function showNotification(message, type = 'info') { + const notification = document.createElement('div'); + notification.textContent = message; + notification.style.cssText = ` + position: fixed; + top: 20px; + right: 20px; + padding: 16px 24px; + border-radius: 12px; + font-weight: 500; + z-index: 10000; + animation: slideIn 0.3s ease; + backdrop-filter: blur(20px); + -webkit-backdrop-filter: blur(20px); + box-shadow: 0 8px 32px rgba(0, 0, 0, 0.15); + color: white; + background: ${type === 'success' ? 'rgba(52, 199, 89, 0.9)' : + type === 'error' ? 'rgba(255, 59, 48, 0.9)' : + 'rgba(0, 122, 255, 0.9)'}; + `; + document.body.appendChild(notification); + setTimeout(() => { + notification.style.animation = 'slideOut 0.3s ease'; + setTimeout(() => notification.remove(), 300); + }, 3000); + } + + // Add animation styles + const style = document.createElement('style'); + style.textContent = ` + @keyframes slideIn { from { transform: translateX(100%); opacity: 0; } to { transform: translateX(0); opacity: 1; } } + @keyframes slideOut { from { transform: translateX(0); opacity: 1; } to { transform: translateX(100%); opacity: 0; } } + `; + document.head.appendChild(style); + + // ============ SELECTION MANAGEMENT ============ + + function updateSelectionUI() { + const count = state.selectedPhotos.length; + const total = getTotalPhotosCount(); + + // Update counter with limit info (gallery floating bar) + if (selectedCountEl) { + selectedCountEl.textContent = `${total}/${MAX_PHOTOS}`; + } + + // Update counter on posting page + const photoCounter = document.getElementById('photo-counter'); + if (photoCounter) { + photoCounter.textContent = `${total}/${MAX_PHOTOS}`; + photoCounter.classList.toggle('at-limit', total >= MAX_PHOTOS); + } + + // Show/hide floating action bar + if (selectionBar) { + if (count > 0) { + selectionBar.classList.remove('hidden'); + } else { + selectionBar.classList.add('hidden'); + } + } + } + + function updatePostingPreview() { + // Always update photo counter + const total = getTotalPhotosCount(); + const photoCounter = document.getElementById('photo-counter'); + if (photoCounter) { + photoCounter.textContent = `${total}/${MAX_PHOTOS}`; + photoCounter.classList.toggle('at-limit', total >= MAX_PHOTOS); + } + + if (!postPhotosPreview) return; + + const hasFlickrPhotos = state.selectedPhotos.length > 0; + const hasUploadedFiles = state.uploadedFiles.length > 0; + + if (!hasFlickrPhotos && !hasUploadedFiles) { + postPhotosPreview.innerHTML = '

"; + +// Fetch the image +$ch = curl_init(); +curl_setopt_array($ch, [ + CURLOPT_URL => $testUrl, + CURLOPT_RETURNTRANSFER => true, + CURLOPT_FOLLOWLOCATION => true, + CURLOPT_MAXREDIRS => 5, + CURLOPT_TIMEOUT => 60, + CURLOPT_CONNECTTIMEOUT => 15, + CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36', + CURLOPT_SSL_VERIFYPEER => true, + CURLOPT_HTTPHEADER => [ + 'Accept: image/*, */*', + 'Referer: https://www.flickr.com/', + ], +]); + +$content = curl_exec($ch); +$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); +$contentType = curl_getinfo($ch, CURLINFO_CONTENT_TYPE); +$error = curl_error($ch); +curl_close($ch); + +echo "

HTTP Status: $httpCode

"; +echo "

Content-Type: $contentType

"; +echo "

Content Size: " . strlen($content) . " bytes

"; + +if ($error) { + echo "

cURL Error: $error

"; +} + +// Check magic bytes +$magicBytes = substr($content, 0, 16); +echo "

First 16 bytes (hex): " . bin2hex($magicBytes) . "

"; + +$isJpeg = (substr($content, 0, 2) === "\xFF\xD8"); +$isPng = (substr($content, 0, 4) === "\x89PNG"); + +echo "

Is JPEG: " . ($isJpeg ? 'YES' : 'NO') . "

"; +echo "

Is PNG: " . ($isPng ? 'YES' : 'NO') . "

"; + +if ($httpCode === 200 && ($isJpeg || $isPng)) { + echo "

✓ Image fetched successfully!

"; + + // Save test file + $testFile = sys_get_temp_dir() . '/flickr_test_' . time() . '.jpg'; + file_put_contents($testFile, $content); + + // Verify with getimagesize + $imgInfo = @getimagesize($testFile); + if ($imgInfo) { + echo "

Image verified: {$imgInfo[0]}x{$imgInfo[1]} - {$imgInfo['mime']}

"; + echo "

Test file saved to: $testFile

"; + } else { + echo "

getimagesize() failed on saved file!

"; + } + + // Show preview + echo "

Preview (base64):

"; + echo ""; + + // Download link + echo "

Test Download:

"; + echo "

Click to test download

"; + + @unlink($testFile); +} else { + echo "

✗ Failed to fetch valid image

"; + if (strlen($content) < 500) { + echo "

Response content:

" . htmlspecialchars($content) . "
"; + } +} + +// Handle download action +if (($_GET['action'] ?? '') === 'download') { + $url = $_GET['url'] ?? ''; + if (!$url) die('No URL'); + + $ch = curl_init(); + curl_setopt_array($ch, [ + CURLOPT_URL => $url, + CURLOPT_RETURNTRANSFER => true, + CURLOPT_FOLLOWLOCATION => true, + CURLOPT_USERAGENT => 'Mozilla/5.0', + CURLOPT_HTTPHEADER => ['Accept: image/*', 'Referer: https://www.flickr.com/'], + ]); + $content = curl_exec($ch); + curl_close($ch); + + // Clear ALL output + while (ob_get_level()) ob_end_clean(); + + header('Content-Type: image/jpeg'); + header('Content-Length: ' . strlen($content)); + header('Content-Disposition: attachment; filename="test_photo.jpg"'); + echo $content; + exit; +} diff --git a/vh-flickr-mosaic.zip b/vh-flickr-mosaic.zip new file mode 100644 index 0000000000000000000000000000000000000000..97c9f55ff9aae6bd9716b24907e63cb70a2f0980 GIT binary patch literal 7289 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 literal 0 HcmV?d00001 diff --git a/widget_api.php b/widget_api.php new file mode 100644 index 0000000..27c30f1 --- /dev/null +++ b/widget_api.php @@ -0,0 +1,246 @@ + 'Configuration not found']); + exit; +} +$config = require $configFile; + +// Autoload classes +spl_autoload_register(function ($class) { + $file = __DIR__ . '/classes/' . $class . '.php'; + if (file_exists($file)) { + require_once $file; + } +}); + +// Widget settings file +$widgetSettingsFile = __DIR__ . '/data/widget_settings.json'; + +/** + * Get widget settings + */ +function getWidgetSettings($file) { + if (file_exists($file)) { + return json_decode(file_get_contents($file), true) ?: []; + } + return [ + 'enabled' => true, + 'albums' => [], + 'max_photos' => 30, + 'cache_time' => 3600, // 1 hour + ]; +} + +/** + * Create FlickrAPI instance + */ +function createFlickrAPI($config) { + $flickr = new FlickrAPI( + $config['flickr']['api_key'], + $config['flickr']['api_secret'] ?? '', + $config['flickr_user_id'] ?? '' + ); + return $flickr; +} + +$action = $_GET['action'] ?? ''; + +try { + switch ($action) { + + case 'get_photos': + // Public endpoint - returns photos for widget + if (empty($config['flickr']['api_key'])) { + echo json_encode(['error' => 'Flickr not configured']); + exit; + } + + $settings = getWidgetSettings($widgetSettingsFile); + + if (!$settings['enabled']) { + echo json_encode(['error' => 'Widget disabled']); + exit; + } + + // Check cache + $cacheFile = __DIR__ . '/data/widget_cache.json'; + if (file_exists($cacheFile)) { + $cacheData = json_decode(file_get_contents($cacheFile), true); + if ($cacheData && isset($cacheData['timestamp'])) { + $cacheAge = time() - $cacheData['timestamp']; + if ($cacheAge < ($settings['cache_time'] ?? 3600)) { + echo json_encode([ + 'success' => true, + 'photos' => $cacheData['photos'], + 'cached' => true, + ]); + exit; + } + } + } + + $flickr = createFlickrAPI($config); + $allPhotos = []; + $maxPhotos = $settings['max_photos'] ?? 30; + $selectedAlbums = $settings['albums'] ?? []; + + if (empty($selectedAlbums)) { + // If no albums selected, get recent photos + $result = $flickr->getPhotos(1, $maxPhotos); + $allPhotos = $result['photos'] ?? []; + } else { + // Get photos from selected albums + $photosPerAlbum = max(5, ceil($maxPhotos / count($selectedAlbums))); + + foreach ($selectedAlbums as $albumId) { + try { + $result = $flickr->getPhotosetPhotos($albumId, 1, $photosPerAlbum); + if (!empty($result['photos'])) { + $allPhotos = array_merge($allPhotos, $result['photos']); + } + } catch (Exception $e) { + // Skip failed album + continue; + } + } + + // Shuffle and limit + shuffle($allPhotos); + $allPhotos = array_slice($allPhotos, 0, $maxPhotos); + } + + // Simplify photo data for widget + $widgetPhotos = array_map(function($photo) { + $urls = $photo['urls'] ?? []; + return [ + 'id' => $photo['id'], + 'title' => $photo['title'] ?? '', + 'thumb' => $urls['small'] ?? $urls['thumbnail'] ?? $urls['square'] ?? '', + 'medium' => $urls['medium'] ?? $urls['medium640'] ?? $urls['small'] ?? '', + 'large' => $urls['large'] ?? $urls['large2048'] ?? $urls['medium'] ?? '', + 'page_url' => $photo['page_url'] ?? '', + ]; + }, $allPhotos); + + // Save to cache + $dataDir = __DIR__ . '/data'; + if (!is_dir($dataDir)) { + mkdir($dataDir, 0755, true); + } + file_put_contents($cacheFile, json_encode([ + 'timestamp' => time(), + 'photos' => $widgetPhotos, + ])); + + echo json_encode([ + 'success' => true, + 'photos' => $widgetPhotos, + 'cached' => false, + ]); + break; + + case 'get_albums': + // For admin - list available albums + session_start(); + $auth = new Auth(); + if (!$auth->isAuthenticated()) { + http_response_code(401); + echo json_encode(['error' => 'Not authenticated']); + exit; + } + + if (empty($config['flickr']['api_key'])) { + echo json_encode(['error' => 'Flickr not configured']); + exit; + } + + $flickr = createFlickrAPI($config); + $result = $flickr->getPhotosets(1, 100); + + echo json_encode([ + 'success' => true, + 'albums' => $result['albums'], + ]); + break; + + case 'get_settings': + // For admin - get widget settings + session_start(); + $auth = new Auth(); + if (!$auth->isAuthenticated()) { + http_response_code(401); + echo json_encode(['error' => 'Not authenticated']); + exit; + } + + $settings = getWidgetSettings($widgetSettingsFile); + echo json_encode([ + 'success' => true, + 'settings' => $settings, + ]); + break; + + case 'save_settings': + // For admin - save widget settings + session_start(); + $auth = new Auth(); + if (!$auth->isAuthenticated()) { + http_response_code(401); + echo json_encode(['error' => 'Not authenticated']); + exit; + } + + $input = json_decode(file_get_contents('php://input'), true); + + $settings = [ + 'enabled' => $input['enabled'] ?? true, + 'albums' => $input['albums'] ?? [], + 'max_photos' => (int)($input['max_photos'] ?? 30), + 'cache_time' => (int)($input['cache_time'] ?? 3600), + ]; + + $dataDir = __DIR__ . '/data'; + if (!is_dir($dataDir)) { + mkdir($dataDir, 0755, true); + } + + // Clear cache when settings change + $cacheFile = __DIR__ . '/data/widget_cache.json'; + if (file_exists($cacheFile)) { + unlink($cacheFile); + } + + if (file_put_contents($widgetSettingsFile, json_encode($settings, JSON_PRETTY_PRINT))) { + echo json_encode(['success' => true, 'message' => 'Settings saved']); + } else { + echo json_encode(['error' => 'Failed to save settings']); + } + break; + + default: + echo json_encode(['error' => 'Unknown action', 'available' => ['get_photos', 'get_albums', 'get_settings', 'save_settings']]); + } + +} catch (Exception $e) { + http_response_code(500); + echo json_encode(['error' => $e->getMessage()]); +} diff --git a/wordpress-plugin/vh-flickr-mosaic/assets/css/mosaic.css b/wordpress-plugin/vh-flickr-mosaic/assets/css/mosaic.css new file mode 100644 index 0000000..d8ffcad --- /dev/null +++ b/wordpress-plugin/vh-flickr-mosaic/assets/css/mosaic.css @@ -0,0 +1,165 @@ +/** + * VH Flickr Mosaic - Styles + * Beautiful photo mosaic with fade animations + */ + +.vh-flickr-mosaic { + width: 100%; + overflow: hidden; + background: linear-gradient(180deg, transparent 0%, rgba(0,0,0,0.03) 100%); + padding: 20px 0; + position: relative; +} + +.vh-mosaic-container { + display: grid; + gap: 8px; + padding: 0 20px; + justify-content: center; + max-width: 100%; + margin: 0 auto; +} + +.vh-mosaic-item { + position: relative; + overflow: hidden; + border-radius: 8px; + background: #f0f0f0; + transition: transform 0.3s ease, box-shadow 0.3s ease; +} + +.vh-mosaic-item:hover { + transform: scale(1.05); + box-shadow: 0 8px 25px rgba(0,0,0,0.15); + z-index: 10; +} + +.vh-mosaic-item a { + display: block; + width: 100%; + height: 100%; +} + +.vh-mosaic-item img { + width: 100%; + height: 100%; + object-fit: cover; + transition: opacity 0.8s ease-in-out; + display: block; +} + +/* Fade animation for image swap */ +.vh-mosaic-item img.vh-fading-out { + opacity: 0; +} + +.vh-mosaic-item img.vh-fading-in { + position: absolute; + top: 0; + left: 0; + opacity: 0; + animation: vhFadeIn 0.8s ease-in-out forwards; +} + +@keyframes vhFadeIn { + 0% { opacity: 0; } + 100% { opacity: 1; } +} + +/* Loading state */ +.vh-mosaic-item.vh-loading { + background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%); + background-size: 200% 100%; + animation: vhShimmer 1.5s infinite; +} + +@keyframes vhShimmer { + 0% { background-position: 200% 0; } + 100% { background-position: -200% 0; } +} + +/* Title overlay on hover */ +.vh-mosaic-item .vh-photo-title { + position: absolute; + bottom: 0; + left: 0; + right: 0; + padding: 8px 10px; + background: linear-gradient(transparent, rgba(0,0,0,0.7)); + color: white; + font-size: 12px; + opacity: 0; + transition: opacity 0.3s ease; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.vh-mosaic-item:hover .vh-photo-title { + opacity: 1; +} + +/* Responsive adjustments */ +@media (max-width: 768px) { + .vh-flickr-mosaic { + padding: 15px 0; + } + + .vh-mosaic-container { + gap: 6px; + padding: 0 10px; + } + + .vh-mosaic-item { + border-radius: 6px; + } +} + +@media (max-width: 480px) { + .vh-mosaic-container { + gap: 4px; + padding: 0 5px; + } + + .vh-mosaic-item { + border-radius: 4px; + } + + .vh-mosaic-item .vh-photo-title { + font-size: 10px; + padding: 5px 8px; + } +} + +/* Dark mode support */ +@media (prefers-color-scheme: dark) { + .vh-flickr-mosaic { + background: linear-gradient(180deg, transparent 0%, rgba(255,255,255,0.03) 100%); + } + + .vh-mosaic-item { + background: #2a2a2a; + } + + .vh-mosaic-item.vh-loading { + background: linear-gradient(90deg, #2a2a2a 25%, #3a3a3a 50%, #2a2a2a 75%); + background-size: 200% 100%; + } +} + +/* Reduce motion for accessibility */ +@media (prefers-reduced-motion: reduce) { + .vh-mosaic-item, + .vh-mosaic-item img { + transition: none; + } + + .vh-mosaic-item img.vh-fading-in { + animation: none; + opacity: 1; + } + + .vh-mosaic-item.vh-loading { + animation: none; + } +} diff --git a/wordpress-plugin/vh-flickr-mosaic/assets/js/mosaic.js b/wordpress-plugin/vh-flickr-mosaic/assets/js/mosaic.js new file mode 100644 index 0000000..e5761ac --- /dev/null +++ b/wordpress-plugin/vh-flickr-mosaic/assets/js/mosaic.js @@ -0,0 +1,235 @@ +/** + * VH Flickr Mosaic - JavaScript + * Beautiful photo mosaic with fade animations + */ + +(function() { + 'use strict'; + + class VHFlickrMosaic { + constructor(container) { + this.container = container; + this.mosaicEl = container.querySelector('.vh-mosaic-container'); + this.photos = []; + this.displayedPhotos = []; + this.rows = parseInt(container.dataset.rows) || vhMosaicConfig.rows || 2; + this.photoSize = parseInt(container.dataset.size) || vhMosaicConfig.photoSize || 150; + this.animationSpeed = parseFloat(container.dataset.speed) || vhMosaicConfig.animationSpeed || 5; + this.apiUrl = vhMosaicConfig.apiUrl; + this.animationInterval = null; + this.isVisible = false; + + this.init(); + } + + async init() { + // Set up intersection observer for lazy loading + this.setupVisibilityObserver(); + + // Load photos + await this.loadPhotos(); + + // Initial render + this.render(); + + // Start animation when visible + if (this.isVisible) { + this.startAnimation(); + } + } + + setupVisibilityObserver() { + const observer = new IntersectionObserver((entries) => { + entries.forEach(entry => { + this.isVisible = entry.isIntersecting; + if (this.isVisible && this.photos.length > 0) { + this.startAnimation(); + } else { + this.stopAnimation(); + } + }); + }, { threshold: 0.1 }); + + observer.observe(this.container); + } + + async loadPhotos() { + if (!this.apiUrl) { + console.error('VH Flickr Mosaic: API URL not configured'); + return; + } + + try { + const response = await fetch(this.apiUrl); + const data = await response.json(); + + if (data.success && data.photos) { + this.photos = data.photos; + } else { + console.error('VH Flickr Mosaic: Failed to load photos', data.error); + } + } catch (error) { + console.error('VH Flickr Mosaic: API error', error); + } + } + + calculateGrid() { + const containerWidth = this.mosaicEl.offsetWidth || window.innerWidth; + const cols = Math.floor(containerWidth / (this.photoSize + 8)); // 8px gap + return { + cols: Math.max(cols, 3), + total: Math.max(cols, 3) * this.rows + }; + } + + render() { + if (this.photos.length === 0) { + this.mosaicEl.innerHTML = ''; + return; + } + + const { cols, total } = this.calculateGrid(); + + // Set grid columns + this.mosaicEl.style.gridTemplateColumns = `repeat(${cols}, ${this.photoSize}px)`; + + // Select random photos for display + this.displayedPhotos = this.getRandomPhotos(total); + + // Create HTML + this.mosaicEl.innerHTML = this.displayedPhotos.map((photo, index) => ` + + `).join(''); + } + + getRandomPhotos(count) { + const shuffled = [...this.photos].sort(() => Math.random() - 0.5); + return shuffled.slice(0, Math.min(count, shuffled.length)); + } + + startAnimation() { + if (this.animationInterval) return; + if (this.photos.length <= this.displayedPhotos.length) return; + + this.animationInterval = setInterval(() => { + this.swapRandomPhoto(); + }, this.animationSpeed * 1000); + } + + stopAnimation() { + if (this.animationInterval) { + clearInterval(this.animationInterval); + this.animationInterval = null; + } + } + + swapRandomPhoto() { + if (!this.isVisible || this.photos.length === 0) return; + + const items = this.mosaicEl.querySelectorAll('.vh-mosaic-item'); + if (items.length === 0) return; + + // Pick random item to swap + const randomIndex = Math.floor(Math.random() * items.length); + const item = items[randomIndex]; + + // Find a photo not currently displayed + const currentIds = this.displayedPhotos.map(p => p.id); + const availablePhotos = this.photos.filter(p => !currentIds.includes(p.id)); + + if (availablePhotos.length === 0) return; + + const newPhoto = availablePhotos[Math.floor(Math.random() * availablePhotos.length)]; + + // Animate the swap + this.animatePhotoSwap(item, newPhoto, randomIndex); + } + + animatePhotoSwap(item, newPhoto, index) { + const oldImg = item.querySelector('img'); + const link = item.querySelector('a'); + + if (!oldImg || !link) return; + + // Create new image + const newImg = document.createElement('img'); + newImg.src = newPhoto.medium || newPhoto.thumb; + newImg.alt = newPhoto.title || ''; + newImg.className = 'vh-fading-in'; + newImg.loading = 'lazy'; + + // Start fade out of old image + oldImg.classList.add('vh-fading-out'); + + // Add new image + link.appendChild(newImg); + + // Update link href + link.href = newPhoto.page_url || '#'; + + // Update title + let titleEl = item.querySelector('.vh-photo-title'); + if (newPhoto.title) { + if (titleEl) { + titleEl.textContent = newPhoto.title; + } else { + titleEl = document.createElement('span'); + titleEl.className = 'vh-photo-title'; + titleEl.textContent = newPhoto.title; + link.appendChild(titleEl); + } + } else if (titleEl) { + titleEl.remove(); + } + + // After animation, clean up + setTimeout(() => { + oldImg.remove(); + newImg.classList.remove('vh-fading-in'); + }, 800); + + // Update displayed photos array + this.displayedPhotos[index] = newPhoto; + } + + escapeHtml(text) { + const div = document.createElement('div'); + div.textContent = text; + return div.innerHTML; + } + } + + // Initialize all mosaics on page + function initMosaics() { + document.querySelectorAll('.vh-flickr-mosaic').forEach(container => { + new VHFlickrMosaic(container); + }); + } + + // Initialize when DOM is ready + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', initMosaics); + } else { + initMosaics(); + } + + // Handle window resize + let resizeTimeout; + window.addEventListener('resize', () => { + clearTimeout(resizeTimeout); + resizeTimeout = setTimeout(() => { + document.querySelectorAll('.vh-flickr-mosaic').forEach(container => { + const mosaic = container._vhMosaic; + if (mosaic) { + mosaic.render(); + } + }); + }, 250); + }); + +})(); diff --git a/wordpress-plugin/vh-flickr-mosaic/vh-flickr-mosaic.php b/wordpress-plugin/vh-flickr-mosaic/vh-flickr-mosaic.php new file mode 100644 index 0000000..8e9da4f --- /dev/null +++ b/wordpress-plugin/vh-flickr-mosaic/vh-flickr-mosaic.php @@ -0,0 +1,304 @@ +options = get_option('vh_flickr_mosaic_options', [ + 'api_url' => '', + 'position' => 'footer', + 'rows' => 2, + 'photo_size' => 150, + 'animation_speed' => 5, + 'enabled' => true, + ]); + + add_action('admin_menu', [$this, 'add_admin_menu']); + add_action('admin_init', [$this, 'settings_init']); + add_action('wp_enqueue_scripts', [$this, 'enqueue_scripts']); + add_action('wp_footer', [$this, 'render_mosaic']); + add_shortcode('flickr_mosaic', [$this, 'shortcode_mosaic']); + } + + public function add_admin_menu() { + add_options_page( + 'VH Flickr Mosaic', + 'VH Flickr Mosaic', + 'manage_options', + 'vh-flickr-mosaic', + [$this, 'options_page'] + ); + } + + public function settings_init() { + register_setting('vh_flickr_mosaic', 'vh_flickr_mosaic_options'); + + add_settings_section( + 'vh_flickr_mosaic_section', + __('Настройки мозаики', 'vh-flickr-mosaic'), + null, + 'vh-flickr-mosaic' + ); + + add_settings_field( + 'api_url', + __('API URL', 'vh-flickr-mosaic'), + [$this, 'api_url_render'], + 'vh-flickr-mosaic', + 'vh_flickr_mosaic_section' + ); + + add_settings_field( + 'enabled', + __('Включить', 'vh-flickr-mosaic'), + [$this, 'enabled_render'], + 'vh-flickr-mosaic', + 'vh_flickr_mosaic_section' + ); + + add_settings_field( + 'position', + __('Позиция', 'vh-flickr-mosaic'), + [$this, 'position_render'], + 'vh-flickr-mosaic', + 'vh_flickr_mosaic_section' + ); + + add_settings_field( + 'rows', + __('Количество рядов', 'vh-flickr-mosaic'), + [$this, 'rows_render'], + 'vh-flickr-mosaic', + 'vh_flickr_mosaic_section' + ); + + add_settings_field( + 'photo_size', + __('Размер фото (px)', 'vh-flickr-mosaic'), + [$this, 'photo_size_render'], + 'vh-flickr-mosaic', + 'vh_flickr_mosaic_section' + ); + + add_settings_field( + 'animation_speed', + __('Скорость анимации (сек)', 'vh-flickr-mosaic'), + [$this, 'animation_speed_render'], + 'vh-flickr-mosaic', + 'vh_flickr_mosaic_section' + ); + } + + public function api_url_render() { + ?> + ' + class='regular-text' placeholder='https://your-site.com/vh/widget_api.php?action=get_photos'> +

+ + + + + + ' + min='1' max='5' style='width: 60px;'> + + ' + min='80' max='300' style='width: 80px;'> + + ' + min='2' max='15' step='0.5' style='width: 80px;'> +

+ +
+

+
+ +
+ +
+

+

+ [flickr_mosaic] +

+ [flickr_mosaic rows="3" size="120" speed="4"] + +
+

+
+ +
+ + +
+ options['enabled']) || empty($this->options['api_url'])) { + return; + } + + wp_enqueue_style( + 'vh-flickr-mosaic', + plugin_dir_url(__FILE__) . 'assets/css/mosaic.css', + [], + '1.0.0' + ); + + wp_enqueue_script( + 'vh-flickr-mosaic', + plugin_dir_url(__FILE__) . 'assets/js/mosaic.js', + [], + '1.0.0', + true + ); + + wp_localize_script('vh-flickr-mosaic', 'vhMosaicConfig', [ + 'apiUrl' => $this->options['api_url'], + 'rows' => intval($this->options['rows'] ?? 2), + 'photoSize' => intval($this->options['photo_size'] ?? 150), + 'animationSpeed' => floatval($this->options['animation_speed'] ?? 5), + ]); + } + + public function render_mosaic() { + if (empty($this->options['enabled']) || empty($this->options['api_url'])) { + return; + } + + if (($this->options['position'] ?? 'footer') !== 'footer') { + return; + } + + echo $this->get_mosaic_html(); + } + + public function shortcode_mosaic($atts) { + if (empty($this->options['api_url'])) { + return ''; + } + + $atts = shortcode_atts([ + 'rows' => $this->options['rows'] ?? 2, + 'size' => $this->options['photo_size'] ?? 150, + 'speed' => $this->options['animation_speed'] ?? 5, + ], $atts); + + return $this->get_mosaic_html($atts); + } + + private function get_mosaic_html($atts = []) { + $rows = intval($atts['rows'] ?? $this->options['rows'] ?? 2); + $size = intval($atts['size'] ?? $this->options['photo_size'] ?? 150); + $speed = floatval($atts['speed'] ?? $this->options['animation_speed'] ?? 5); + + return sprintf( + '
+
+
', + $rows, + $size, + $speed + ); + } +} + +// Initialize +VH_Flickr_Mosaic::get_instance();

IERj{xKw2a*1gNLd5&^&VN!kde|_7RyeYG5qh%EEx^M$sXo%QTo-<^zNR{gFGz z!Sr9J9{_Bs<-TeI?CFBYOy6w%yX1ecJ#TyFd*0Fy;2CIs_T=*NQ+W0Yyqcm}P-cxLIS4gR2W#cG5L04QEc_>J|Ho zAK-^i5?R)m|&31TbigA)~q!KXqSlZa%i{~%x{hJ^8kDo>J_~fhj zySH}#_$R-9$F~E$OAc_455iFXsdF|jzA~*>eg=SLk($T3Q@Hv#o;ZVzVHdddaJ>7u z-T2zZ0MG-wh+RZS>_+dLpOJ+=2cl!JHtR|yiJ{N?w1IH9p4wB1FeL`bmlu9F=gcz` zNgf6kNsTa;=_DC0TA^V1N?k{(u&8yM@@kG@zHc%o_>1KAtyEIT|HeR03mGlYv4xs5 zuKboJ?OP%QQ92;s2jK3m5)~=hQn{8@Ac^A6egYMlBw19OVikOq*3sMoCWGOq zamXKI8UQxmpW^iq7oC%jANGCQfx*JKVkQn1pHi& zs$XQQEwKjA7I0y2eOLH3KN8$-L-os9(x-H${&ty5`U+=AEf3KY zytFw|H)?=PB4--R{pUIUz0fT_i=gWbM7lG2&{m?vM2~J(j?0y#4#Etv$&S&=JZQJdLBoSc6orHr4;9@PNN}%QLbhE57WEl(8 z+|1A#T8q8Cc=Ce(;wAk2d7L{D19rH>7kA^=?~mWTz+l!YlM!fmi_>aGdH{Wk}AKGpt6AfkXO2SuGRQ}7XtjZ(6 z%_zf6;?xXoabkm~F4*&rL0WvaKq^=VbJ1aLjw~vf zXjNegQwnqQryg&H&dD2+z2+q+=Mw^hkxE0C2%(I0ERRysDS;{pG4#n&Pe)%XZ_?yF zk6+*J>(~JJ?q9aT5Fm>X7)O$TZ4#lxG5ROrHSK!?R1XAstlg}-dZn5X2mru14Yv|W ze#9MDCVpy1lk5bb%YO6V7TuHzt&VQJyCyyhsu#CWPsfV|mr9iccl#@(h0*2!fI)EN;5vC9-`WUHog>Cx7+AEhWk z?!VvzfvFqUh4qGN^W;t-9F*2_+C1d@NigbG12Ir36H#lC(e`woTMT_!pYgJyLU?)t zoicUkL*P0Rh$(Sp)G>^j(>y+&++2Aug4=QS9v67yl&)&{AZzoNo#o(%YM+>VP`NG+ zTV_l)aeqrp%YQ2C*EpGq@W~`#1_foU&#e95Z2q~JZLDp)ZM-#iZ2!eI2IBYE`mf)%PjA}c7RV;B5!rGqup_rUAf`I4v6`8d8`Rvg)mJkX(cf%v`UIYR z!hZ1zUVFyQ?Z+-~?W^5CywzX-z`wlH`VM0#aL{tufPg!^#b()^JGK1ftIJ=#W|z<6 z>xc1of873merF%w_QOL%wj~CfAXi#LVo3q3IyzV#5D5URZ|!J?O^eHq`KwRi%Gp@V zdf=;r@$MJ#>CJYyMMMv5BX+1JYykVNTo9C{c|U*2bsubhj~_)ks;|PAXNT0*<_t zRHjSlAFCRD_1VzmW5rU|%OvoRU*FH`*Z}ypUWP}Hjb1T-$v*;E_s&jmXa%o`IYcj5 z5Fc5p3=~#JGaD-J7?f5i2q@mm?&qCWG_(ogr%gXrAS$v|Fi59N78OZlhSVpp!XZ{F zB>jkHOf*WtHI?oZC!CPbm_(pVL}ljx$s*M)x#6DNO1C zQ)ZdkMKNl^3<2g~(%=$Z5-b)J$iNK)Du$#&fD+V=A+|Ici|iB5&4C4w4$J-e1NzpcE2sowJk*LF5#MTfbsEj3*~>*OG{u37pV@&P;n zw>rtT)qNwTNl<$rZ4{2*d}MWhS|U`0u8NlOtiTY-iLZ=8LyX2$T-Yj~&jE~KZVp#{ zlevEqTU0H`+{R6Yn+v0B-OE}VX{&I?B6Q;FE41aZ-nI@l1C5%39C958S1dJh)W(~u z7U4|rMTv;w?95s^?ii~Ddil-SrrM}|!*m>*EZF?GS9Y%sT+I9#v@DlYMq3OIK2m0W z7u>hVWay$I^S^8=2h{~qsm)ae@In;s*&HCt@NY6EhX8kDS1$U?SMb=02v{HZ^!9l3 zLwtS%+e38q-Wp~9BG{PRGw#Dzqy{||u*I|Su(_GL8w~EzTI}tOOON@_Ub0`ljK|La zW``Z0e;u!1>;Lp8`{YaCZqav06c;0-*molv4-XlVk-#u_Wzz#@;D7c*6Z&7`>}h-M z3H#{_cshJJe2l6LOKlPrxVC}|rRRdnF-l3)dMNxACYP;}r8sb#*D^hq)%z(1 z*;??xq zB2!WLeTCL>^g19vQSqIVZ$g%?C-`2)KGxKTBY`4MOuSxwj2Lt>4ZO#YafQ-$GDLW( z(9}kRs?I|k{;YbfD;vX$UCYT|)Q~koPOLkzNF(B;cy-Y>nhVaYnVI|;VKIWee(R}$ z`S4yT@!mRUDPg3(lHIyggu!7#aB=02&Lv%hO(lYfcgSf6?<{ zlg$c(U~_GV1e_+r$=qFvmzEei0C4fRjhhr6;Xwop%@r$UkyI(?A)*LuGY_^pB^R!B zoR+GaHS>fZInG2&s|q?%ORuh=+_2dsm{B!gfQI%bb!$2oifdGiN@Xh7vM?LcEF2hv z)+P~~5Jqa_^qJ%}2Zk9~lpkaVPyspIZy891%nkOr1gm+Q%foNcz)%IxME{=LxtYls z;;>d-wT+p+O*MAX@W}TW`IC*nobN0?8v?XuZSh!qoH@0;a0Sm@!ii>PxbraH{USd2 z!X6wX^e5&%;<*eMdiGTi!;uKdRaPOL4<3s9caP@SY{td&{<9bTU%ZIRr{RXff$Lw# z8`s8f-tmvVw8KNN-B<+6+eeS+7z}91P_@eAWDrzNQ%3wN?%y4oO`Jb%FFuW*T*Zq| z+PQrk^mzA+-QT{^-~6!Mec%}+uj4-reYaSaadHnYKDqxt{={E<8i@GawcY>vtMS&y z%VD=&lnmfzi-21dq9~b886ryAWJYrrlys}lEsirM@xm2*?P***1vlFceE#+L!-w(V z^>%OwL?2@pV;g-JV;9I?$Q^9ZwvEvhFc%TSkflO{b!|nrk7p&GY5Mfh@O99pF z$m}Ws#$7^}cy7nMduUpttc%J1tY62N|9f~H8vx(KE9&nxy072Js8%@d5oB%52XNv- zrZDEWCAU`8ff++XO+k72ht1k#h!7nC!sVlyp{xd;-VsA#y%Cuka70Y-i)jN;Fdey! zgawY=r>Le9EWl8&*#s7I{8Q{`%8Cz$WL2QV^h{e$PB*Ed#_!sS<>JKow0tnt-)eb| zkkzOeE|UmK0uBlONMSA1v7TiRjp>W>@P>mtzFCZjMvxYkUFZQQ6h&qLujn- z%!67~>HY|qGd;t~2IE8uf}2#g29f)^T;aT{X1}ITIR|B4qz^4jwjWb0(vf03FRA&P z>iRid4csSYmSy}JA`}Tgs6uLPs1hhlU7}WJibupP19X`Vo&m(Q-*PBO0n2{CW=>oM zLp0gbj+u$Oz&0wxx$%~DLg5yB8(g_)uRMi|r@|6z-i>!ZwOjYH&}8zsF$N4{(8&|* zEi(N!?sF45u<_#l*^w;Vv029XGxo!){ueLf>GNog?ZAz@@yCzHZ{Nj-U)c80dXK@b zPrdh!$k6to;C1GzMj)bbpBjr_sm>6Z!yEQnoI7o=K8v5dh-V+i>AiT^@$MJ9zyCx3 z(}(TuL+c|V9${r*Kx?tt>`w3bt55Cy+n?EskH?({@sDrs{^kw)=;mhE(X%qCw#=uE-Cc#xv)!IJSY?2l2;G`9;$pC{5PRRM zwSe4hNl05-4s7p573BIPo!p)0nv_A8J3mS*nWbT(+C(|upg1&R2v;Cedw4*jA`oLP zu)un$k8)Gc!ld^mOBgrGOu#Cf)&%{d>f@%Yo`^wX<3vbatSo{#Bnh*UQ^NmA{nQiJ zQ^*}5u`*w}&#^7=UA>MCfbZyKSRdl`=>dRZdsiO;^f9kb9sMm)fWApAkborv4Duku z=GhjewUm;@b&y{l#UGSKGTDJhBte0KNtc8lJ+fs;5bT;5hnS)PGH%k_n0AF{sTuGC zUeuF>FG+yp<<>dr^|%tLNJjI)1$f2)M;j}S_h$;*R?J(N_b!0eZ96} zR&xbo#hQF*O{rEs>&^RWD=1_r@su4|{zN6S_d*!jgnb0wR+d!yi)ue*l^E4)n>fiW{9ZRW^Yt!g4-&B%J}X$FLLaUpoOO5bLE%Vg(kAA*RJ#)VP2 zOsy}Sod#!qz@Z}mQTa(ER&ucwk}x;9y(YdF*ii%BT*G{i)=+Y=t0Q1A`uIYIML~7c z@nMbx&t(pDL<|)Ym0stOO~b>4#EgmlJPoo^AYBWyD8P~pRWtY63*6<=&%LB;=JhJ> zKgU{~gj{Y$6O;$wK+DgDn}9yl&>?MEtN8v*#$bN{V~zn4zX*OHD3>bCnfD&Dc5;8Y zJO6Zr{WQa}#JMx}+H?5DOL*pzo!sETF5dpE|I;7G+aI^P2j#m_;&v{i#nQ&I*Uz8u zpI_bkH$SoSr{m+V#((+!?pN=(TX%g7>~<1D^bzHGIMRfsEWXvz^%4`>B>boI*JzHt z4KAL=D^KIa$8lys01tP#_SJanBV51byWPO(h;585#tyMV>{$LEofSV>9Erd*_pe)w zj5Vb#FsS2T)+`30Z*C+8cZC}hc}+1q1|MQ*X8T_qf`A9cb}$?$V{&MI5Sf!18j*4O z7OY5}9#0m{NlFZq^D+|3*pPe(rAXO~yIhIM5{@XaUV}5JQqaoVgm6`2JI49n`|H>M_|{%WVg941 zmhaYy<7c9Ta}c-#1>g9M8H|3^=+^PZ%JSA&L=5nQab!G$cO0Q`KQqiYX5C_rU(m@U z@fbubu6K%ecY%`dqL%rNF6394qZ~7s#W-qsvea+ zHvxJ;;WO)SB*Eo~qK|kmRvWqImS|wQvI1jJr7FrRk$~l5=9|Ij7hQ&*%K-4z0ECS- zpIIK2J&AZsrhb!FjIu>k|A#>Z4yb%;tZ!WVD))2lBu`Ajy_XLgz;u4m5H%#H=%7m> zS0gvGvhH#i?hk>|w&VKY9{`?g@eF4pJ_b~qS>G<{Ac<rJ^<< zgE4o2Ps@OXWn{;-4bGg#3s2#P&*0K2m|+|E@Y* zgk;L{Gnr-(#;iE?4-O%I*8UpI6JQg@!PGL7@~zN57)t;_!xZw?GfZ4AxmEu_pc)RE z#D|zDim0p`*5s&+U=`Gqt@(3b`59>=$wJ6pX_7z027&pfd9YsIU!o9e*I0X@#u$Pma&h1^kYbB?L_&%rR4|f6hz|mf3z$G4|SPfEaVmhxl)j&~(J3OAQMk1DG{`3h4^2B;XZnw$(x& z$JH`So%@X|uArJQtJ?TnV#Y_gM})hQ>U5o`Tv#sQ@pIt3u}z>L-|~0a2I1LG@sw_>4stj z&mfl{!hqZ}`a$LY!`u}81;+gwX3j~DGZSGO697cRn=jrL^F8y8GcJGA+}*=%oISa` z^c1dM#J-z}{{QTT9Uic`QwB^q&CvimE6rmG%j1yiWd`OPCqwCG=HZCF1y5h}U%rSJ zpTPct4m{}i=tjKxVO;y%?mskg!Vyet#V$rB0A%fd;j3zt2X||p$qzGm3(c{&#Q8J! zldJfbui8`R(HwUU;?0l7Z{Lk;U*KNWH5!rU$5|WzaDK z*lSt%AMbw|?|tUC?|~J5ko12?Y$LXjet@x4^_wipIWj(g-&{5L4VgMh{5kqn6eVO8s)^Dlgl2?4Z zNn=nbr3Cm!G)(AEDMqQHphk1792Ph7O#N!Y<-nkCv+6`b=! ziG+!XS#ji%O#B*Bg%5IMAwejQL7`cVO@V`kfO%fMr6?8|tnc%CiBe>lfTAu)rZ8=p zm`>x*ugGaHu{!~Aj#k)8IKDA*F=b&o7QA@3x-1efmo&>kn$5*#?E1kQ>VUZlwK+@bQgJ((1XZkF$xGpFA zuvD}#av6DvQiu>xVYBranpzd_Zb-hIE99{4pRH7X`W@K3J=Y6UKAuTwRxkNlzt(b zCSTfx935<-Q)xjrl5BJzC@#JIe zU%Z0Xp25jI^uWOmAK!{MK8&|Nvajyg_AvS`Yq5?ob`je#dh`UQgqz|)T_I|DTQ_5p zb_V|}EzX{@pFEGh`k_624rX!dKK}6G_|3cV(RJL*v}TqPEu#=_@HX6cm(T70&p-D+ ze>v_R#Bbi+{>|&Sc4OHM^e$N(DsF~S4-oa^^>6O?a2FN83SC*fNkTmc8qNo`j6;i^q}e1GdUPz z)WRj09+OCkI&k^3j&MDz)E}jGsA3L`v9Tc=epFg5JgN1z1Z$mv zLS{9;ltK#V3rsC2ihre6>ZiI_`Qf2pw)*Vq?=`6>$;uf^p)m&aMV-9WoN;6Ho=m@z zrStr_d1podC(~3JOudlHtf?W?-ScCdm2xxqtb2R}`y6@wx86T~{h#_eHUPetSDos4 za%Z>#Fp-u15i4dMh2~J5&rK!;iVp~e8ARcqM^4=e4kb?2sas)%_2=`iSttTTXg=+j zF=Dv26+EB7{V4he2ynxRW7qeGP*!CI7f4+V1%QGR2+ECdBMN7jSn-hpLQo!?$zAK5 z5u?yFl?g@E4eFt55alx|Fl1WW;*x6;RzRIWHKr91)f8DM(`Db8*{sE0+&J|Q3uxw$ zShT2!De<_d*p*sjx@uTy!>xHa`m3TSzl(GoFqUJjaJU$%WT{85_sJVc5t=4a^N=@z zoA=QLG_y{qt#()jA4g*BT*8e}M?*MRrhfi+BXE*J^K{mu) zVWh&i zjE-$!hsd^8NIrWEWZV`pQWoQq5tZAk8GHSnJ%t}UgTH*$o<5IexN#4^d%yqo-T3sT z-9I#@7uRVAO9m~QzPH3P7f$@UpV?2Y#?5=<@88<~*FV_jx7)6|SXdcEKX7XBnkrBpVvG`^yo+a^@X z`1=$k1iYZ19O6$vxf6yo0_s?4W95c&dM|C%S0sJ)xzsI57Jx%kSf0oVlw2GXO{r6a ztxN9EVCP7IqGhU(heUy9oi31P?s%~rmAUg`-m3&g4%P(7uWRVGQusV2;2jBGxMVBk0SccH~K zNXoCLf|B%RY<;Y{G7&aqn7)}?m0c&+4}-aTE}{77P)Q>F6Xowb`h zpEQI%gLN&9?rbwetACOM;oig8T;D=N(El39`F`9eIG9L#6+c2ZRCU7GTRcKf({Lmt)mKI^UgZ z$6d(u@$?JTo7s$l;XNi3FTY5VoGAoM1$MX022N*$c8LK6B(o~08=AuNviyxcW4S95 z`ZqQTu&l|`JZpoxwH9rOOXu6m&)~vIqLo_@K9<(cpKU*T*?#^aE}UkSp)c>oTOW@aB7p&CDX3Uh8$Wrmi{WmO2oH~gYp0t1Yiam1yhWO%Z{Pw;6+jsHVS9Y+)ZWmE8 zp_XUK+_2f(o!rDrPwxNwpW6#h#Amnq-@LK=)!XgH*WR-rDZers%R=!VDIQ$sjUSZD zr))PjM27lgMufv{Y&N)X7SCO_*Pg;NmvHe6PVHgi0I-d?d4Tu7jQ2mYo40ZB5Pg@0 z{dZ$*d*6+*9ixxP{{oS<|09e44EDhd*a*3DxPBDN#XU2)E4X`w(k-8NP|C6cLlQbe zTVV{A%QQlS;x2UR7ra6bqC4rYf zCfZEZtDQSB&VLKxudv3k8Sq`ajtzkS9$qUFK>sdXjupL`EP{~)6@8EezgU8UF*14R zRzwE>hobsTQVX_*CZKX$jYwE(s?fx5h4IBn5EGa%Vu%`*ejx{`B-#X*dcPpBt#3X* zCn!8otm>4j9YPc+0fML~N3fdPx{=cfU?J31QPFv0QzR!!$ZC#F;TUAfh0>?N;Bz5O zJ;hSPq6`=!sw9|aR(D`z%^8OUGF=UgCHu`FU?>!W4p<+s6gv}Hyo;i*b+Ky~; zq=5vlrtxsR;l70qDQl`cjjT%Y%{ zRKl>ZtZ>5iPY$QoEXz25+JF3l|M^R}d=4A8?Z8*}<4>QA*FW$tZYB30qeny^eK$r&>_+b~ zc1b+PDr5zWp01caE`XUeM{7870#9GEpTA_!Uq&;0@il(+cK`i*_~Mow?y&1Q`BgSH zJj@&R_I9WC@PnuK|K~rqr_RTRH~N42?e@3tFSj3fSIc8<-W6n=yz?r=-zw!NH#pOR z*q98A_Sr0BZ!<2Qj;l{BKX}HTxnvhkV}BEiXpsOOc6|C(y!W|Xzm10n(bFR`MvOj2 zkFm{vGQ~DR@%Q;d7c?g#WkIc|3Qjq6bux)DveeA_sLp*JSy$9B)Oo88WhAdpLrBt- zh&Sl1EHWr(4{6U2Nf(|AW7rx{k-8=XTbzWU%nbP!>NIlh$gV_vVa?lMrJ`%VbGc& zLn4=7$rL~Sh-GQttN~%VAABu{m7ty!kpSR zT!rLZxz`1*Er-EP7pCH>3BXN$k~CD<6m}Y5)Z6))Hq&Zn#6U103$P64F=qb=a>$H= z@XhQ^E5nZF`kD}QqPk2mKz*njA-Sxy!8G3j_aqt<2M?gJuR;*}aoux&Q`Tghe5>Rd zea6eoP>Ii#SryHYb_f7x@O@-Bc{8(6uCS>Dr%Z@uwz0ODwd~95&E4UKrH%8a+Y484 z=}ay*ZXd>n*Ky;PZMTYd4<#xwn1Sbrj0w!lB}tk$gJm^Nn4z^;T0ectUVX;@#Y=eh zLM+X8179D+JD-i;y=R}@wA~iFUG$EK(MM9++cEkW+l*+>!2hVFK?Sx|eY2z-V1~Uc z`*YP^dlvf(u74f>_;&y8ySRSab{#uK@DGg`u;$p?+nw4UuUt9tfBU6fJ|FLW-v8r2 z?Oy+I`TEdjrT-#&0>*5TC_!1kBy-hrEHePJ9@3N zUvC;r(PKzCGM|S(NAS0qL2o=hS!ie&dheNnpHZ+O=h+yUA)aSz)8rswOXNM|Pm}Od7 zdaKLv1-KxG{uFqSNXfEBsmG&By+?XkN`sT7%95vRyNeew?(+ap6|^5g{6i^G>zDoi z`1kSaTX`KD0N>H;ksZIX2kI@JMqB+!#-jk86{ubt31%|lSQRkatIrIqJc&lX13F_Td#RY5j`TKiHiHzK8Kk#n8}k6 zYJz6kyHTY%IL_(aX7GCLIJ3pP9>@g8E6RoEA?KmUNCJjDt28VEk&U-lzbKJ6W2@2| z5cDPyc*V%913U68rJ*&q1z}fXP|U7Rs|2vBvze@73ERy^20a+%{VVdj|nZJrVUoML_+^Ow%MdPJq%U#f5!crEoRMq@wT`(Z`OS5ZS2WQ z?YYNsvH`$0aN}Rym!6-Z~xR^ z|6sYhb%u7AWv_dN%+>^`#$&9~zBwsM?Pf=UhGmJpO`JLzm(SvbC)$sm!P6J*)P9V> z*9Y;@&G_WT?qF-LKC}GbiaF4MuO7yyH|^{DINYMAHI&8vV>iZ*_&!!;f3PF^&r10g zhCUM3j|wY|AbZ4U652$-41MLCi}H`~>>>=v#T`Ibg-(c-mxUC_4MYndN*fm5R)CD@ zyHbNeQAxsV@?E9h4B}Zr1-k~s!c%BYg`O%=#)rP04>EPS%@5O0l8Im@c^oyi`4lNL zsp?lcIdy2vNzP{2#J*jxqoD@H#dCzWdja z3jOn4o#Y@d0i|q89GFjXfptAiC|@vLm5EcPg+h1orBWo|b)kEShWN&?sLtzs@eq%o z^s@W&@iOb!5hJkyRpE*Yhl(ex%$Y<#IKnEF{vu?jvPv7EnKdSErURN>5n_ZPGGz%s zz)`T4bLEhaq!2O72a#wgA1aYmj$i%&K}!p1rDI_zSjD-!VHnMtr3>qb4}rdg3UZsS204*^9t38f^1BF^hRg9VCO(*65{zT1 zjRZH#U|3WBLoR^J-q0e_^k&#nCGcvYP097la{%$BXVoo4g;vW~Q$2t~K8nmC=B=`6 zXHHH_tZ!Imla+p< z%0V)T2xzre*^(^l46((9J6ao?{c-v6_OqAlh08d( z37GYP&+d%hU9apg_ehxr@)hcSOp2+T0B(RqbF?K+?8Uj$_Uz+$BN6|IKCtT1i9OQ{v-Ei=r5G8rg^H@hRF`b49@#4(Pv0upAgv4W z;uL|QfO@Va&mTR464W5)-+i)fOR-d74c%@4_bJ&2w?)l-x|8O)gu zIR}8qN~ST8+&uLoqkv+#IU6ic<&t2E8WeAg5|bh_D$fn&cq>b$z7s%z*%@^0u^u@!ByULLq6X{}+3P_lodHuJ7Oeso$K@h8G7W{F$hE*L z$Y+l2sKA`xS$d!{iiY z_3>Fadt>A(+v=>Lxi`*p<)F|%pr|z~e~~*AcU%X+0D(lgbu5s4KiN#41($tjDXGYY z%G*$^ve7tPw3nKhXGMGl{bwewwN-KX#eL(p$rdAI9JOe*D89 z@#WXHi;QxQ+G#wiEjF8RcCY>N#rE%iX6H}EA3xpwum2ctebOH6R)mGEBFq%)nPQ8{ zN)8N$1ZJ+2fvy0zFpte_%Mw8t-2pfBGywyy0IzunwG9 z{LCr4aEAL}J8=6x?mon}gTYX-8!=elQ~lA9+dF!UZqez&DiLjg7$k8hRbxh+5Zr_0 z3xj!t=A$~z4>=6_h+#1p6`Gq-=4={lR-)Mg2xFVD;2ctr8p$l0lV%>JeCHgK%@<+8 zz_XOWMww)V9iQR)s^lFrH%VJr1i7UC3NlsRUg4L^0C#Mm@Ev_ojBo4Ptq zUBSl%t(x_(`u9--Al4&4etpNUV*}vZdmX{}_Q=1#@iAlAfI!I_ z-ZQ_4qG+H>XO1icWRW65QZ0%G5R?x^KFDFf7(sd-$vsPLmEo?GrkPbtTA9oMC^?1y z0>SK2`U+-YW`YWr7;>uPN9IRFy#`77r?(k3!Tz{m=Gll8Rm#&4Ls9kBp=HJKm%})p zcgW=+G@7itLPb<>$23<8^kFr>2?JLK#F`FqGX!&Rxh{#q%0kE+l*Ar`C2u4bqeOmG zdC(}_NZ76L;985ky~$^y`4`CKGawh&&6?7GxRLh#Xmh@$Dy)Td&R=@x{Qnkeb=ke^+PGELcM$D{R4YSw5l!5bo)X z5JEwQwC9N++|w@LUXlU8Jz*?nO7qnyRAB7jJgsq8qH`I&N#|S0QD9ub=58{aauPD* z)-as_&JcfZW|pBr0b^ZGWbOY94f5tNj}x2r^y9d40h@*qIOy@&t?~H{d+^X0R1%R5 zxQLNZnYBhcXld{k=T6xVpR*r7kMpM@V21yjNiZSx4yRB4r3R+ zNAJ5a4tw84&+wJ5K=z2}s2Cua*$9;?4h#%48yK0eG)7>rZGQM1_FMet*LQ#WhTZtu zdL^}*HH%QM5O?hF#raeIFMrVf-Oq4(FW$Je{eS)g-uZkv=*W8iD^m?bv!?AId{S;# zc5r6Bfc&8QaPOy2;<+dM$5-2rp2Gk?LBPI~=WOHHj`;XC-uZ02{c(J9({4ZT!;xzo zrxttSF+6sHjiw&<`0B1bIKXa~*$bohKE`g0U6%YGv8$k;$|`+y5I0W$n1?WK9(bcHN_VjeJkdf4 z`2p%&!?NBN>vV(~JJj$V&i1K)VrkzW)wU}Wov z7nLD2-&i>lN}8ZR{JeFjpg`zW2@n}0uIg_wFIb>Rxxg?4Ynx=hR$tSF8rX_&c;x9< zARa`1-<+Y9q#)^1kVVMaghqk7UjfePqz%nfVafmj4HW8<4p~+5uj>@;4bKK)0oZi% znq}!8Avu025}Fs?VTC&kh8XoWYOWrimbQfeAtXiiQE*ew$199(+qWYDOzeF&fT0zSb-FJuq~Bq zSXfw7JxXDAV$KjVS&5g^qEqgHuy1Wt<%~}I(=;iGP9h8E zqZfhf&L=nmGYTPY5mRI2A0O4JLN?%&dSZ2?#DjCITdCOThcHvZ#oB_?Y+#F zS@oZN05?Zq^)|hO?*b*~f9=B${CWw-3fAH{+|Xy?R}RCKA(Vua|LT3i@xE z_3QA4#pBdTy!?#)>;+st6K>W6Hy_07ANJq8>tEinq_q2pz%H;=J^LiKM=;}HfCnAZ zQUn7NYZn3oV~mbnG?;b7-~Vy@pMQ%l?$~Zro8>&lW`+iHkNy3)bf*2~Yxb{yh*Nv< z`)h~)kH5F~KW_)w>WdpgurU&=Xn@&Re4IQH&s_2!Ki7Wz9G-m4_7)uM z;-g#f$B)M!KZ#GjvU?AG*E3cR4be7n=A>Odhm#Hi25|QfH^0Wi14PFdA?`mDe0xNP zl62KjCUoG&=wav?{%u}46e{*Bb=++aVzW|gOV(|7*gBfKxRtUe|24a}C01M(p zjL3#c`MW5eM?C^Vo5IL62SX|H2d8tMFWrN5W{Ufx{nb->uKXUWNrqWXa%fEn%}3$U zU}iGcD>0$QJz`xelZd>iVrhf~YD9+)WGVfsQ4^tSYRjybvot>n3Fz5dR+gN6kLfc+ z;=*}Zu%9)8keoCl9mofZO6EgF#_=7>SR2a%KV*I*h4Fn#)bi#pJ3#Ha$Q$=MT^hpZoD-N{+= zJA(cw^7jmhXUZ~W6I}Ve^Wn8&DyKrTPIA)CpaN4a zc+}k7Jd;S>LjEqArYRj7vp1rd=zbQ(QY+s~EDkV858+_OLUV6W9y!pe7LX^|?-?Vs zF<-1L=6mLg5`$y2!QKt*5%dGZ2#h|^12^w%|L=d@@88Gm2g_jLGMF=*Gh?B=#s2=dbf*35AKSnB z0rr;o&3gy`%isG4HWpovuHl{H}T|S{-dk@)2n#u z0`?a?*v5Nb_CH)3Z+&W?-S)$+_c38xI;5J%g|oPDiUQ+s;EOx>@)jN*Vz-OY`)-%e ze>?h)C4gc?j1fKQ`K+lKS>@Bl=!)l|g^<-kK@y5EHwo%;lng^g)$f#8+%u^_)ojvo z2w=pp><1FW#FE@arKkMYk&Q59L-1U?P`IMT^N4)l;EDdlIH4F5!Eq~H6Fkd3sSw)S z+_d?L)ZL{ng!Oqtz0aI0W{U@v()t;*AB#!dSKYZhD5-{Hr2ITWBOcM$CZC1rS#_@! z=_pw$gJ)_(DWdXpOq_G%b!-uQC$D1z;M;pmd-{>LWA%2yPkZDTtnpe@sX?prKjsZm z8W<6V%F#gZ5{CMAL=o=>UKmFO53oAbtD&e032|`VA%ks3J#8`bx(@M`+88TX{JiurRQ@-P-*w4zue1;5WPX^3WEUCx!S$%4eytSJ@Kv5OftJpT`h(`B?~iT4WftC@OcW8g|6YXe zpU)yEM(yz2rC?4ABhYeqmM#dRH-N{cF5NVeETB`z*0ZN?Fu}zX5|%MMVB`;@*|T=g zV&;*(1z6E*G2ggvn#(QF)I7|wzp*DT;?h}c+#I-nI6nDue0jU=c9s%xEm%qN0yS6Z z$Z$7T%CB3N{lVUTJaNH(@;qL8GEOW8;O+tb^lAU6xAEb1JJ_P{qW2iFi*eYq=U3m3 zKG@5a<^G2PPI%-~1W1}D10j=mbhw+vy@Tz0pP0AYQ4<*=&>YRMEOBDLKXG>XAAjoq z;uW~XKfZJL|N2M&_^ah`RHAT96qi4!k^yg;>ybY=HHkZ#kNv%P;v8PSvi#(Ed*%{O z?8SpaynlW7yZ8GWANdz|+F=mG#;|4thFKo;^a;QG7|x&I3AwY455I_;cdU0XCwlBg z-^J)bjGmQ1bE#C?KWp_TdB4&e7JWpQ&7sH~Abkj`XfYzPun%(#fE~uj@1|J}g4HC+ zy3B^+igeOpR+&W<1yU;#aGbRS_B6L_<|FYa9OVk~>{e}J3rj}d|k(5g3Dn_v0 zsnPN`%iU#eSr>)r@%>kj*EIEX=lmEc1IGMkpUM(G+*U9??AD3^{ zoJ7S_)`eIy1B7i_XfyHs5ZH={#O_*hXRX7D=tBFZ1TmQjtosw3Ty@T%RGq+ zrWnfk1;8ddiF0TJH&{dr3->l{WdY`b;HJJprs*R~PVYAHRh` z6oi7K%$W?W-6oR&UcegZ8DPq@Re9M+??7a-uVq!Av^jxAm0JyHhQ=#r`mbe-&?bX_ z@{F_ww{hx(J$V7=PlUsI;MV=!$Jg!7J==E9Qy$wjuN!loEG@u2)owXl7 zhu5CQ*?kP);SL|(=)ZXv?|p%FXcYHUH$+S~tK;$^h zb?ubm{yj+rn4>wCHZGpQD^Ir{Kab}gx3ed4xQh>N^w;0py?)I;{%UjBZIl{;xv{3^ z;t>INJAcNmT)@dq1Z)Jpyc-{WZg(G~x1{%MjU3yaX%d+SjEES4kv@}%UeQzOjSY0R z0p_8o^;BQm)Csg7l3Un~K7bL?5j|T0AitZn=y{My4^1M4U+2u3O@b_V{!MaNHFmVG z#DQ1j`^wjsf{0}a01So(x%ik`sWha~BTwGQaHe^a%!N??LZ=^@sxpo8vx(qtFU&RxOy2_auNUvHRWdpYn~iAh*qVd75@-GcK@!J7d+ylv+}=HptfxP zIYP^C4aKk*_n;ugI;8VJ8x4<4R$iwst}y;THyhI(7?iIv8hDrb-e8On^PlzoNxUDK z%K1fOed1}2tSp{{?t$`G6m$ZyCx4dNMUiMy+g9rmQMV9ws+o;62E@ySP+};i-*iu9 zLCDAo1pOHj+7MZ#(5V?OG*|+tv6oi*KB7AKK z0d(%b`nfcaY&olEOB^Ymfc72~BA>32nj4_1wMWJWM`Vg5bn6j`xuX^=H|YS$Uq)we zgv=06Yt5BsocHt9_*Kkf;&-!EgDvejU+wd>7@7?Ac{b;su8pjTHSMOEd*DN@Qp=u< z^1w+ZI2nAHAT^JGS<7;$N_)xMIpg`m=8EMWm=q=#Op6IbWtnTwcz}(M%Fkf3_H`X| zGlKZE0o*+O1~XEK1|*~Z%@=2Z&a@m_ngz{bZ?Q|~{K>~~azQgZ*o`l4#}~KS;h}{f z)B5C>(aVQ1GedJjhW^V5ur!=IV?THnKfQ{}XVA|1jQ-@-~MqFpu2@<6*pLh~$1G)|rv&p)yEKmOQ$auoyd z+Yh$??|<^ozV=<9cZuszWMysHTxmZ7`n^J)9BqSB`|;f4{)-p!>eKevY3xRPekcC; z$?o^>j`zM;?jCp#126_89|>V;if`ExhYCy!Jsr$ zemzRM&vQu~S7b;5-L5cwqYA}p(oILSmbz37S2*{C^hn(ejNP<38huQ{KW#8+XBRuR zqUYDTOj*vhem}!^Lnm_mMKi0Whm(#NSf{RFrNXdMolzH>Mu|yV$o_&9CZsQGuzJPO ze;&WS_1Cch@V&m`(Z9$F%upGaasYs-#?uclv9kP`CBo$Lq#_)wOqcY7Vua``I6@z- ztawOxP}EACM4@FKbcTf-)j#!DOah^vsCaw`*3?&4!;3`MA;wgZGgSD-sSrs|SEH3+ zN+4!OCN%5iE6iFCLKj3jOQ472AQKT*v^Wy+mwL*9GPhF}6&Mna=|4d7q#?&@t*FpH zY>YtFvrO<6VErec;zTLD$8Zy?WAp(fp&J9)#wHE4U{F(z)=YK(fM|tp&7elDLDP!R zlk+3HBVh&Dvg%06G88nz2M-{|!aHy(LJyv_chdxo$e42V#Vuo1hHxV?1%kyoIA-(Q z!x?PTGl!vE^9<3U?hmVVn&CIbSp3{$)7Jq-am>*ZxFuOWAZtVcSB%9^6TM=1@=#X_ zb%x!qbMkUvVi^Gpmd-4|pz~yydrufWr+w|X05W?bSnt1F{MGT*dCx!5OMrzVB`Y(gGTVrIsHF%2?r|jy}`1$jA`g|-6 zyJ5Egh?5vOm&)yy`ox=~Gwx7Rb&s;#WxO<3qKI^}E4{v|gZhgHx+}Q|nM_#68Ai~_~ z#8@0>PTEtC;jxpv^__$G=u5lv0Aq*VqxU|dkCCA`eMDz>W*Xixn4W9w?`wgeb3g$t zL(V?VEkvgi@l&al4X$6dQ@UF_FwM?d`=k?1102q@?;hMwosW6U!ep~$`rV2QIeQU2{1K_`} zSL%s1J`G`0l2}OnKdpizU$^4vbuE-Yh#>5Y)t^{__mY5+P?7<#!pbW!!r!h~lPOFR zEw(ZVOz;>&&6HS!x|;FhcI2@&A9+p5p_FZ`L!viU69yJ*E5C>CUQW-I$e9C=>1iQA zgdVW`Eji}0b8IGVDLO-<+fe-d>YE{V3^WgGL8v7Q;Y}`6Mhv)DsDK5+&E)f$m~c)- zn6YVdsKhsK?JHax%AF-dONK}&0s;|5gDGbqgkzz4NKiD3xfpt=1pxw6<_97(7J{Eo zLm>-b&@z#QmW-EaJW?=OR@5@=sFpk}LsxAZ1l&T16x_os*ip(?9A9cf_SXYY0KJTt zxe4A)Xb#m={AE6f(h0YD!0NDd2&q#7=gLazZv6; z%V>#6YYn`fe&*EXKT(mz00`@&s>l{t&xe(Vq`59CCxGc0t(jXC`VV#nP!>e(!$!o5 zW@#SSV!mYVZ$=L-4I7X1r|p@Gce00Nifj+|0 zh#NY)$WBuLi~pFJl3X~&Fvs44GpBI%3H;&(d+iyVIe{_albhq8-s!*p&_2J@?jPD1 z=(ANhH-tMd(#qtOHw~B0ihz{%mLx-z^6@$mN z{MwYp3RiVX50Ta!gUlk$%qkr`>ca;$zRNoz3Mh z(4G?ibKouoGu0NV@J>N}%T|^76*2TF?xMb@O)}>tG@4k=R7_!? zVMY_KN0HxJbsh|aSNRSG^Vpn6$(AAAF7Zfr*LvYfcLSiIyJ7{8U*Fs7*Z}yhU+eS6 z*Mx{sW^altx!)q8hPYIk;1K(}{=NY)CB{xB0g{A;I!!)Sgc52^gnDrhk+K^Q3$)@i z{iIQisA{>I(K!(xh$VCqeGzr(+tdBMzCZpymGz+C>CS+edapne$Vo3Om<)A>A zH7$FUc}n<8dq{f2l-}S|y#TBDexI4yFfaun!Dh0@?Dncgumq^Yf-0uEvJLVPmX%Q| zyJ&vKWO+t}yF%rq4BSoroHED~pE|dew5;H?_Pe6gbSEmq;9mDYI6~PST(QtdKr;aW zYsN4G7iJLA&d0?Fr4P`!iTN{nrFZAnPGFA=($%095w6__tni7ui}!?OyJa5p+HMAz zvpY3pSaEtPnp_T(I)(znnxHbPIIvu&D9&$qFon2`(K2Jw@?e1(!WklM{($8B-N6Ve ztMdQB+BPP;!VnJDqTP4~r}^T|!{80>(ONuq)}J_s6AJ)rJHEU#uHW7qZpkEDGS*Yl zaYxeXk>#6DpQQM*#KrUWlNa#PWt?mn1NXP_@y+qZ`}pW{J9voEqxWI9Blkbj3}E{z z)&3tN%YXs|Nr^g#v2h+TsJP)GqxtNfb{wPI%$j3qaq;){2dk67{4|jk6hj{mk zc5iDvm`y>E6ma$4vmr^A4kM5KJ$vFYTsn)z5WvG8pM8ZJx3S$~jOe5H*!8g;Ovdd& z4?xEDWaXbcC^dB%+|RCDtlJX+t2+ePLUsh31N3^I>Az7vgs^Y;5QY%5o{!12F-d(o zDCAun3c*3?W{$MpgM87Fybv@G!SpD#7Qv@Zciot}H0Y$rIT@vd(&<6tlI0O3i%_`@ z5+Y(XC<#>ZM|AyaUFWlmnXV>biTqLy?}+NQ>0LL??HCx28IVk~&4S^JQAu~xKwqhd zIE*Z}x`UsHn5jc$mjO6e99M~n${1?nLQj?#E5?^&_%5^*6N9rGSF zg6Sm`!x{nbg zAd!NRBXhGcM#&Pl6;V#2Ng$Q;MWExw(-;$>T;V9T9u{DN$QpJ6w#LO2cdI}op?$)D zp*w2evMQ=xkWnZjB6ebM0|M+pOtzwd3aq;`-vGwg>jLpaZ*G-ifJA9p7F&HRnSVP1 z9Lst#GtUlY$}50Dg$xBcIk%ZJ3is?$JK$-hWQbBL1>xloC_HHbJ!UJ;Ohh}4p!p_O zC&tJUNuDcFn~GLq`iTMo0^X!52kVYlfo2%PaOZc4V$CgWZWi*cx|+ooYQ11g2j&#h zCd|*3Rg(`Jku#ZeT_D&vXoY0gn=rR!@#`Ervdm9V3r}Mv^FvGpg_QW~LKqeX_F+Ih zf65U#AIdxs!559?k#gZ(&>OCnUS5?g744J%ITHrjk_ABBJ+oKb;D)^g7tZ3s=~&zV zJlKve@7SIDR$O(Iz)AsR2=*WVjM4BpvJ8b^mT~^9{p>~j^jVzU0D*&!&u))5K8&|N z@w@kpI2Ao2!+y4-ZzDthM~@hcQjeiV%SV7=9t??;S|4tjma}Q@S)0ny90pq&T8on> z;)N&u-~ZHJy@EhoyD|Ry4gBddzjtV(%Z(YBHf+fv=XF~H0Cy()wuaODc=;*(`HOh@ zDLa1(BjU4L@n8SA`>%hr>t8S1Kp%|JprD$IF7TL%1cs%>rs1(O_S8k3+ozFm`yf8K ziM#jEd+bIG5cFeg2lLP}H+L9z)rD54G~FYt+oMCSL8yJoKoFx-yhkZICGii@37FWi z4vHdyOaj6@vcUcXxhpSHtS_SN&-GiW+WeM+97_X~oG}T(m`+7HSqHzLY(epH8j+M5 z{T{U(k>OHxBI%cy%e8uRLHqgOrn3^&-3Rr}l^W(8uzpecG1ieuNTX+lKIzsbbv(7< z(b<~6s)O?1d>y0zZ~Jv@0DOP1n12Vw3IOuxh4PJXhX=Gv6i~255gU{p<7mXZs*lCm z7cl5)h!~>-mTf7k1Pw(GFny7A$8S7@6ddD+)et1AfIWdP7+#?gjyXd1y}}wl|MM^M z*~C_0PngMx2IS66PO-$2u2L;u1N#MacXm8Rr<84WDHElF?s8v zrx8)>7(pKesu#KpqdkA}q|@R6>NfLgvDZ<&)tG zo0FEIM7f?ppkM$S`sRZ2_>GJutxV2HMI0vOC9 z+_DLPyQvIlb|GM6VE5d4IV*b`TsVs}Cji54;LgLie%tOnH0DUJBxem&#z$x@{L>x2 zj8iA^!>jg-7jWrhIBYv`{cgPZalCoWZ{D%p4kP1OVmrnz#WP?4C` z#Ncwfq)9m(kP2G9z8t4tqH}Td-%l$)ahlTVH zQJ?Z)BGg_$3CiwR94Ghe@?*Gi9w!?tje2Vo7jb>^>l!{F4FiL8zVwaBoYJ|buk!6smTk?4V@>isYqumn-W%-62{SiZl zFUlBDxDBll&=G{ zEsosk(bvkfTAQ}VuW##hYyf=6uhs6ifA;OwNwfNcKjtY`6`&O{Z&Mf*AD<_)sO|h5 zC4DkvJd3sx91updY+EQXu_6c_8NDUD&qxH<-5x1ymr^teT+)2u1BT$vYN+cQt!kx*2R*qTAla0(YMMF)2R?xgRd7Es9oSg%WFC(mYQvKB&kR7xjcwyZoboKbJ7 ze^diBf5^46;W5GuXl_GMZn*{o91Y;DUAB|-omVylEmuxA^_zhBG(G|4`<7kYoY8n| z$}7R`BpYc8&LZ2(-8qOq zeLCLwz`nR;+bx94dWfK<7N;2wlD2lsM>I!k=>dqP z#s1!S@_hTNAK=H&V&ifB?)Wc%h~HoHTMw*v(%ddkCP4!>8-p#bCv~)j%@TWi@$^Oe z%UA4Y&*RJqjKJr&$3OhB|NT4u#T`G~rI~_~3+pSRj=J0?ZrC(zmU!%pJ@+^sKh5}` zueb5xm-ylq4z}ncdh`*y7@Zvetw(euG`E0<4LC-xmQ@wZQd=}n<&dC>U+8&kW_v8}|~dfL7T_K(5;ck((m0KWIv8dcUmLIEB}sfapb`I(B&DFH!f znt~?8H}Q&V`dOE%@WmoG4b!7q#6r~h*Js2W@Vbg}IjaAJ^z=v;+2U6qWtQ7~^O90#QOTV|#KTN6*772`*`jSk zgjY~r@kJSok=j6gUXd8EF-bH?q8fo+a`}zX6@kjuO{ibWgUoO8VKTHhSAZq*)&u73 zWm_*-yh|!ft5BlVbf>4wsGf7XwkmTGFpI?qnHP8ND{6L(s<)K60a+!6v8^;nGpDfG z5rAT*Uc9+fRCKfqz}PPiwmcT8mff_Od3056M;hFy*Qa%nsygBMSnGL?A%uPzlvA^G zBu1YfGMiyzI(XT8K^sGcpUtP$x;V49VRRDA_?D&$;_KF9u8Oevewv!i%@NI5=D)Gx zXSxDx@y7U~<^ePJ*x%sNdAs~r>@@`Na5uiV9bes@0qdsol2T3s&fTxRS4m)7EG?eA z;D7cKu3p4miwL{F#e3J|^$+aRFYVwEeZ+2z2nGEo_a8eJvmXP7Q#JQBb9ogZ-ZB&t-^v&9+CND{r%l=Y8zeH!Av2-lZ`tu%R=CiI)YWi@@NqS3P z3EJ|SIS8FbfcUF<*+0otMnD4RAeWO`@i4ZQK3-_d2!!zKhqf z0r364Y?4<~_~t9(DE=4FUA-rYg0*NsJwJ*CE25wb^c6UV)$J=Pvj$;nt701KVmtUY zDFh-T6T+yP;)+-i)LoelMB?+D+x%1H-D*CB^wn6FY(mir!m?mOtQ~ngUeC&wnb!*- zX=7q}w_pLs5yRn_thw>qQ`rmp6;pEbaaQJ#X_yhpF385ThG36i;%o|NFNn{AIW?zz zkbL+Vwjo<$dbyv)TM2=`_p2fboNbcM`I3BbfI z6Fles5ucnR3LC-75gc1chvv#RZ^mnZS8xK>Waz29vzk2(Qv~ToMArNn0Y^l01^fV! zQ8cxS(?up_RXlDutXp_S&~X=LL;>nZR*nDMdZOiPoztG=lI7%xJ6HXD+5mHNX$}>1 z!EIm3%EN%BmdPukn|s4FrL`&33~QD54VYPDeu6ApZYb`hU|L9efecz|`N@p?hi{zde=%$BZr?QnurV9J z-GlMvZNGn5^^dYrupUqzHJhNHRsWlXw{h{T|MW%t;0jJJFxbJs$G78mAK=>OcK-l_ zgmTufKU5dn-C*UJ5$MPSM*_!Ot11AR(8%0II+PgKM`$X42o|%}%Ei%Qv-I<){AX9& zFJHE^C*s~={L{PrSMT_ZySD4uBK9bH3W{*oc1#0+jg2?siF5Xsui7tPv5Ti;1g_uh z|M1rC@7``7-CTBIqnAcVo0rF}sM#YE=rG69uxZ%e;KDh(dKs6`VQ~a-Zx-}d*QKLh->`)Lum&uVEk~`BA`a%@Hxq-#6EmCIFt}gE1)uE3N zJtv${KYl{^s~wkX6PL_11lzo4v-OJ z3X7>yQYrK4Z0ft!FiUQjR8Z-7>07fZuAt9T|MR3yzb4FT2q9e)62Y2`{JByW%*>;O zZm8NrmP>#PX||Z^QID{Gl)xiT_Ki1=U*E#(*Z}zcUQ^moDo*4L8s60pJi*}Vt5d5$ z0Ov9{WHW+YL) zrQ>1^jPpX3`w;*u9`TM!bTK4GAF1HoY7Z{TwGCN8AtpWpsCe#V1twVUGJzc!1H)(w zuKHr;TBNGXZNol2xv|{lD7`}M;TboP?Syi@QptyyKgd*~d9ywPWp+3L@K_brG+6?L z2+UZFAM`)4c#{G_S*fHlv$pEL{> z;}7nP0&129Ky6QiS)4v;PhG&-eRIQMkDGVn%R4Q@S0K|4f-ENMm{3Fc#^&KR&Ytww zuG-I^$HfzH!!B_BK7RiJ{`9fkxo5i`yFU6DF}8i|M&I?`1HH4}f6r<&V~oM_`@yrz zlb$fkfiZ$h1KI$&iWX*JHrR)ZBWylS?cs+{wZHfQE}o5pEndGC|MgG)`E7f6fGlrQ zJTPOswHF8rT`9k9>}}$yi~c|T#DDn`_80UXfBJ0upMD>||8Tkez`Kg&Oy;D3on|cW z0vS&Hp`k5t>Li}Jgy)~Y>3xih{=XaVU$?LBVcVmR2#grLkARHYIxtnl20VP#lO;&^0p$pu%>{ zKv#5>)uK8?IpwkjN@eknRh*G5lUSKbEB%Qhz@Yx5ff2=D1%q+z{}AIJNN8VIPjeP0!*Qxec=eLz)n@1#&0!7X`BJC77x?X+Z$mw0(s-(_}Q%m4o;9Dn~ zq65Wuh(E9z_t6K88i^&(gK#t!m=i?cxi|3?d=^!mobbr%JN1WRD|o#?<%O0tQXig4 zZV+SW83>(47eG)i&n=AueOoO0w7?SJM$TMG`kW*Q(EwDtF~u>9r5YHmkblK2zU^^5m%0AkiqVW7-ZOa+*!bv`KglqP8D`{XyyXH`VHqMpw{Lp~FD9 z4J!5#>5qYyJ8Wo=504I=K;eJm{>d<*Xqo;hEiH^3<)NtgPo9_^a)U|SR_-Z+S>8kv zz@Ry#`O0vrOp8~Zt`^-2;LFv+ln>f+Q;uX^&LsF;HGopKxIlhUouIK{i8(=&ARAnj zeL{@I|&}OgS*ev7f;PQEU`AIx^4jX6jpZBigqwD_gA%HCYlM!?y z#xTUdApNg*CZvbrUZ4f5-w-K|RT5Q-xgcU5dU|1Xk^WiiD|f1_<`rBe6=3=H}c1w`s4W^&U_yI4ji!9m#xx5SU)cqzSmoo~+lj%;vjvb`+^5QOW%= z{h``{^WjY`CG}jKgcT1XL+Ob0krRL~r=n6~UT&IDojuv^<;p059s0L>lZgB0F#a+0 z{|;Zr2Ee!X`X-ZJ6SL26jmYk#F)-N8NO69M`Z6(5%0yJ6UzGf+!#g29?e^7C zTlxP4fsgS2kvMb0b6ugNljV@7fH`8HghouMNwJ>ck}IK954D;hE3r4<);viZqD10+ zOo@JbWIVBwc=Tz|#7LnQfcnBFhNo^{!62|eipelby-_%uT)z4*b3H}wgaY}Ij zxeN5NEpAabyd`YfboF2g&#Vbl=veT%R%5mb1X3^t(hLAA93}O-0`sgyh3^ouWuz2of>AHx)6|9ZB;=$64Ec1xF zpG>?C4sB*}{d4QjP_v@Mb7>gGI1!kK+K z*Y0m|^R7QQTmhifpX-BO4zNr-Hj7K=+s|IY^Ovyi0PJwY``7XMJNW!d+a5$VuZljR zZ+qX3-bcp$k3K~FXVckgfSOxw$Ok21l0F$BwH3mXYtIV@y2s-2n|0wTA&b?D*j3c=IECcEb*~7(KG@ zFQUiTW_yGTfzK9Q#JrSmk;HRM87c1EGLk$>u1-~yt`^ORl!|Fl0?E@;AGld(&7ZK0 zqk_)<%D)h$EJMx_DV?F4j;T*+x1^F}ukk?(P24)wX|R<-?tlSAmjKF*5vuO?btWNkHKxv|K=o{=}fXiSlWZwTy|6v4ZV|(^%}U)HSarx_mt= ze9Yplff=8w87jhPJyCQx8dldlIwdaeNJ@G$l=O3Q^=cj#1{SCx1r8I1p8!h12ITlc zzSjJ5C;^*j6HbU(L#lNoc;fO!0O+G<3`Q*w${a!@BTjlXxQP4}3A_S@EdOa_?#&`= zt8m{r!-sPQd;vd}1!NZG{<_=7Tbd1vE3Si(og28#((oWflw-6o*1!mBzNX(2OB>3c zpq)?m0L#uq9T9COXlq0OEdZ7p%-u^rz|`_9v{0L#bp}U-wUu5SBZkEY%lbV7EVVNt z2F=7s%PoiK8ni4(Tb~c1dM=$AooTcNbN>b4vPv?$HZ&2T%{J`?LN(ny9Svb*`g3P` zUfYZb9;yLlo&{mE_EJ7a&`4PO8FDLU2nbUzva);t6?9a_hfEs!_DtJP6ktAWRsmwU zPh(1Pb7Tpi#l1Bq09b~CHH)R$xzjkcmu4RB9^lqJKimoY8xQ@2+cZ;VJsdYI9_LQ_ z53l02r*L)w47(AZ+`;eOj}Ncg!$a%_1|miuaoGC~k$r!&7u5*i*NEIRLS&RdBZTqF za4dr@YM&y7gDmiXTR7s}Df^38?6s%iz{fYo-@ZBC`n27Bh~BHgz|n1AM<=0`%kIM$L%q#FX zeFD#4#;Z@^!bvp4;lO8i`x_ta-u-m>`W{A)hz@kacEk=b47)6u$|xCGY%xZ8O$sBH z+YGi2I+6WM`Jif^c^C-JIVl0vLuLgGN!UDK8HEybgRQxL;#&hViDj_q|57_CWeK!P zYG>`>m2JSbT~I(Tlv`ougAFD53%86%RjDF*D-88b3c<2~3iyWvL1FBHAt6DPrWRfG zs;5aEPh%w~B32*LRz-n-30&q-<&0TbJyl$!E;El~X*)_kC=l_Vd(B zBrJ0PjI_T`;U0i~H(k;Z9<`$R-k^R^EhE(b33L*Be{@E(Fj>L?w8}h|y&f zO)wC1Go>4Qgoj&X0gw>`a33SkXT)l%fXG$LN3i&2StABk**8;bi;xGVZd%wL z74yTxQDHS^`cxuDldY0TK|*Rj^cXQ{2BeV8IzNGk7(>OirqIBMfnZ%MB)|?y^OTB& zcbmn2eAWK^Wt`aHtGn^5x8seE+MNg3?U2Fxm1t1dP6l9}b}SzI`{Uv{`|}t5uYPDx zoQ<1z$KSr$|Nf8m@$J3C9eRevg{(&P4VbJqraPxZ43LQvXbsJ=w}&S$*$AH)g-KXNe?`Uw>Hu|wW!h~qU)&e6^165e$>O5t zL{Jk*(?l@#DVd}I>-I39M|#1ET($~QVzE(eD5q8msj$3G4R3dG&|A~AByLaCCh0^9i5Om)K|2W0^KXP7=Sm`UD01-TKKcE90 zwPwJI9yNHDAe9wlK+Bq>ygSRwE-ej9-?Sx*f#y=1TbPYzKOvoS_S+Kn-5 zzU9Kn=RrN-mB?2r%viIo=F_G=OiN;@VDU=eOyUZ$R=#=_&!S(cHpbk{s}EzERvO9N z@vDzXo~*X@G0^{hU&jW(cl@#`)_GnOi1G;5o{mM9^HW~q5O;t)K6w={LYXpDX@zCp zQ$0~(2b&JEnfEvnC&QEZjj^xNh$*9Dp5mYjvIobBN=r>KMq$ZjmKq_$X7qdkMixT0 zQIz5=NQlPq+XPj#Fs8g`oeU>3D*fyT{HEs3Yrb_Ob}DRYB`TcerhIqoz{EB$wBP8MO})N;xA#R$(2 zSQyCkS0@LUx%ooNuuMeFEiH?(S7kO#*HaqM>~0*vG5fmbC=%e6tAc{3xgn-$+HwbG zAs}QqAkP+HnU9djsPAw5;yGMAgNqy8bAREy;^^cZ24{f{4lBOhTCnq8y%6TG)m77N_0WGM8%?20F z;DsxA?I}EV5@Fa4eE#+L{fF`Hr^~|w%lb%Tbl`Br;b8CNEU4ed7+Du+kS>x_Y4g7dN*hG+%B_`oo?5yKTT<^ZCPfV)SGX6QkaHa#OFc$7%mv#3-) z^)UFD^g)T8v=i1GywWFf-ksS?>sN>!ISR+=8_6#k=@Q2MmqcCDav_rrBzH8n{4=48 zmh90%Oyn`mfn%%SyLlZO0N?TJo4DHk*-c+yo6L+QZ_17{HkpK2of>2zWEAY0(sH6- z(HpY}T76!?I)zDKeInI92>qNp;_jwQ#|z}KbuBq`<~LnzyX z-h%>~VIC{?p@xFu{wL+S0;6R}6k?u>kOqMGlF4e$L50obn6sq}#8nD~09zmweyazy zdQPi5+g!Qg$U&HH7#I!B^jrB@>Om-^O*hHTXe#2FeU~EL5m}o>l|A`GGPR3&Gi`g%Vm+yx2w6r3 zW}ublozz*&Qk*Nyvknme6krh}u!}J)M)(fHBRYHpdg^m0r0YQ16usPVnP3X*qlX0s zlb8V+q;msgc$KZSu#7iuXJ<xZ~~58K^5#tMTYsHjjD&wf}-oH>nGp0yu8gYzd~ zz~R8hxABJ$`gnS~o!uh*M z3}guNZe~wi@;`qGdrN$Ecl^y;@&1>-?Z`5fGesOI3$2Rtv?bAhy!=%ApMGkuJcauQ z@y4~?-~J)qzTWO1_~?=7ztK3RI;jP&qwW%W(*RJ`Z)@1w;QSd}y^J3{g{RJ9PdA5vm}>5El=Gv*rJX#(P(1nG(#=%w362Odx6!F zWj8tRtigIDQWHR)BS&PEJn5LgP$`Jg3W2b}gaE2h5<6s*a{fB? z7J!XxdCpQeWXC{SuWkUzG3jV2>oTVq3t+Ip>0<{pX_po7rkWPSm;Z5wPy!WCYb4~R za4e9I=z6Ejo%si9SCxT@NsCC_&J&9DH&^??9{tzR_l{rR*6Y{+_>Nyz2hi-uSv&%s zr}Rp+M1fNvTYy*b$KtKyh>fq~y$Y6qG=j>XLsg4;&%*MvJZB9ZmKPk6TnWe(sWM%x zL` z`WbbfYMTPNCz4+eF{44+iYg-M5e+SW$iE$>UI2N9IZtzbP?nGaL&`}n?{fqT_RmG1 zuq`stj08-b!;KV+jdBT45EH0me8+HR<-ou|hi4Q)rJNL2e z=n)-QRr((hV?-YrrVgh6Mg&9H>1#@unEM@qR3?*qwdK@%N~R_pBQOGe#EHi**rjtg zIE?@FyWOupSneI751#2rzIJ3SRv_mjV1~u9Y{t1$_~EnuZ+~hpJP~&v#;@M#fA^+; z@|E2`%*J6^gDG;ZBBpi(B5edHB*^+IHnm3@Behx@P3*i--(`4+>eu_8bL^50+sa zBkSvX4Eg1zmJA`@3ZQe(jP2alMcO0RH&J;Y2*D{d)T&%VbpSL=f~slAJ}|33VU&1L z7OE68^Bl|~PmJiFV37p=Q^@`Z&z_}qrB8<9wl3tA&;5n+8x>!Bh519!xuhn{jT+M_pP8Ih?%{`FiEgjNGZMRKmpDUliiA_#GXyondrQP<>WMeG*$pI33AMyq*{ z^-zxh^8K|CDNYsdGp&~l#7`q`I(nojR_n|D07S1N`TNj(8W3TgwcBa2BtlDE?JC<+ z)US&ShQ&a*v*l8b#}%U8%ojs8X4;r<-1pmZqWLLrr`%7pwy|Ziw3h8%1%W~UeMDB# zk>?^Tl`aH`gG~@L|2gtVZ8eUsL&UyeKLSP#&Fxgx4rkU#YYc##CD9PWa6}%dJGH8(2BvxeH|?`i-w4)6SEGK z&XpqUwamtSTX_*Yu%@-(u37C*MsP(k0u93MS^uX3Y@BqXyDgsX9m|A`Mz{~=d(gq6 zO(*kD2dc!2#=k=LgS#dz(Mk-Y!6O9B(pR-Jo0*3h(A*nll1WPopc-VQpW@s}Ts&hZ zHUZ$lLEOG;4-a&L)#Af~6_iStZW_E{Zx2siupd2(=P%+!!wB4di1)vUcR$6Aud&^M zt|P+!Ec8A`jFBXKi~{@st4t=7Eh7^;n)3+9O6G8&D?`XF48vlFh+W^l_lf^6zmB_i zx4(YRZ#}?vkm9iHU@%P5l(meKm0vdFu~Yc@3;u6@VpkrETMx$Hz1jckAN`BFc5h2e zni3AYPS%yAq|ChqHxJ6``Jc9*M(Fx<5F~ zK&%m?8+K##7`rjp0GM?%1*}DE=U(a&Bl^&8kLZ}{X6<8D>tSYs(v)Lf89BPy^Dvh6cyZt zG96N>sCFm3TI7%}!!*B<=65PDI!2;Q4IbLax2pKw3Dw9{=lvDqxXS(eQLG=zmhcN6+Ybiwfq zSsti*)3iLrq2_*0Oipe%Z(67{0dDi=ihu}4YebLHF&LlCI1Q&;AhJz8!%=ECE8fLf z<~0{TqI>M3Z^u|*J;rYM7GV+1eLF@sGsG^!Grnj1f7$z!E=#iHOc47-uIhWwW^*%h z^Eo2iBRqzToFWs61iDZSkYFv?Jcozmnm>tqE}Q4{jtll_c9DG!iDDJ13P2)}12Qur zGDdd~p9h<#_nxX=5iUgJs+tF~Ruus(Tr<+${Fy%0t5@$8`Q(#HmB{+|5}S^MDGnaSsu^%`bF2)J;914-u6wA7k_8TL#Xtm0#vnuu*2LjIVT<*0PmZ0I`c!XC zoXBJG-K=$zp4`%ibs5lvVtfv&l-MgXLahS>mCanftLjk;@itLH&KR7S%*kVZDYsM% zYSf8Wm#{c?Kz7n#{{++dV8IV!tT-ysdhE(bFRaj;SMcUGmdD7zw8g_ceEt}ZcW^dE z&XD3cf;#b^B_hf?ksRUv(cDU%%c*{;CZC9B0MzY=%0X5h4EN6mgpyM(@)=_)dk%>$$$U*{EIKrvm=zkva7>~)L!G=0a6?uv=E)r&xN)#ls9 zAt%U!^(_g&dvB9-1L}1+;jc@46BoYU%{CQ+IsH5)-enmSD3wV)P@Z~bUn5P(_zuKP zEuO#U&`VrdD6)(wLmj*dL9Icv2KTQjLd0TSAqI6q9d(EAL3NmWR{R~YePWAJQTaqM z9Q5CcEH$(D+{8R*7{xbSF!cVA;?)_N0MY9iFQfhbU;jj2@~h*UI9?e5-}*s4%tycA zOZnm+=OTV43dkRu$#oA**Rb=B@cMuQd`|@x>)>uQ+>S$GfEZ2T1qL6XKi>(p z=!_JlX|bdT&{(|YLyIDw+TLRz5|^-E`^ZlxQ19h%4Mf9BX<_tH8pqhxvgBk)UY!9} zHBf~(pU7+Ym3WU5>CuBo!-%BeGysUAHcMaphbrcpc$|2ts#fZ1VKg4CuPkhDR|^yF zIvkzo$r*Loh%CvX(3~Zk6~>gsbJ|>Y1f8W}cts34lD89-wh>#dnjmb!^tns{ zHGlIv`OV#WZ^~UJc}d2HX!U_9$V>YZQE?qb7vV^l9*=NwmEO9F_ikW&U6)5*H>p$X zP4U%^+<8hb4ymyg#l|a1r_!l*q8Tb;kyH?%6U`z@l(V-VHVO+w5OJ-Bm+`3aFdk56 zj@BsY5TKmSBUFSgEAC?7K+Gfx=A;%qALNX;{Z=6XAgpAu^^rd3F*a_QM5T(}#w!tL z<$+?{?hG3YW1tzlU})L;+Us%SY6y^l$IP`r0R{1H?Hgg$og>j)|3!)r_2EJ1L3#o1 z4iARPu$)%D=%#FR`-+8SU$fyB2MGFk!@&0F7bFlhuKtV1A3_ALj{myHD+AzLKmPFI ze`#9=Vm!AI0!5ePT2&2m*+au!T87*R4}nt&<@y0lf>m%rzgPJEkP1vL{J~3`vq+I1 zELe`I$2#;8kS0O|8KC6#L;P!0*#E)hMLqSlSFwFCH_i)+UUC)Qjbm(K7dd&+TO}xTn8BU9{kC`D?0R{#A$Y!B5fUn+qGj%1^o}_A+&|_{(<^R9c5yW*KrG38VF1i z+iV~i7%`f*Xea}_Fkm+b_3=+ox&%erR&o!%Rde zaFEZGO3q#GI!R5JTagxdt~wK$t1?j|Qrg$q$j$9Wpe#yI9)yJyXT9w_R#(Y|lZ?G% zWFe_)A4yZ}x3I?$1)W&KB@$he4a%qU=sz)=*_J4gc>@SFr4(`h<>fL^F*B#+_Mz8W zA_A2jxp7l z1He4%!6{Bo(RR>?ld%Ch&SrU6po7R?}TU?%T2HVHIYUs03iE%zE#NnH_`}vxIA zsH+cGkrWm8{ZuOG)G1!qzF_r0oB%cIDNO2jAR^_ELf*+v>RQa^fnu(Q=8!sq z5{eT3R#}o!V#m$Dja+<0vBME!Q-D$NlO2r_v)A`@?w|a>I&od`DDlFm zURYbH-hG{Z^g5Pmh~nlpedmTgKfvBG_D`^LjDuqwp3roTrXv+t?qtrYf>H(?&gN;D zqC{XQF{4VlIH9$*^x8JPc^R*5Vr>EA$`|xJ<9Mb!C;D(#9z54)dwhICvxeIank7r6 zC^5$r8;Jv4Q6g}n#Gqtsu|x2#OKm%9+fmbr#&dSi!_NMZClBBX~ZF6q&}9E(_r*Z|uuTHuD|VN$sNdq+Rik~M98 zM>Q~;9*(>Pz%l^H6XtCxR7}egtS!+vDFIE^!&98idPb9c_CN|^BnC06gvkgStGIOq zuWey*1XUbQaqoqG{z#wf(rk_{BSVp)s^B>{<6GOQ&HGq=pytlEk+Ik#3oNi6I~N)KR(O<@wS z0D6TgnOUV#u?V(alpx|r+AReagAs2AJs;%c5%A`Ii^%_|nPI+GF?n0`r)d)~S&18B zP*!-r-3Rm81EYJ9kbD0g^Te0Gz<=w~F zBLUMgZcG-YE0$ZYiU!c43_L7$irpMLyAWguLo&8AG+cVUx5M=pqyU1@YsJdxt1%(e zSlG2>Y0$4g{=bCdl>zXrA0_SPYezrlU_h*R4vZ!Vh}{!2LBn{+t;X{^??k;7L=KE-0Ohqj)4+J^!BLrflvGa> z*zDS_4Bxwh5iIASpsUg~Ox-|Ir++~HXvY1UOs6m-eW`@nFVLTY`-g=9mGocLG_Vt@ z2o$NK9Ms zvj=#xLnmj{wyEv70PtAQl-R0eYGTy2E{th?h1OQEynu0qI*|xYXS#cU-Gg*+T1}g( zX}M|GP=*<1PS=a5FmqN_MIwd5Sh`3jMA7=Cc!)Rl2`y_ciNm}PrRdhX#ejId9sk^K z&Z<^N$ZUWVjD7+o5Hls_invZ(c~Ffz1Zv`%I3+Vkh{<|4Fms}mh*=GFup%Wgy9iKA zf-U>j`?f0J)mS`7S%f$Zc2>YA6CYgY2E_XJ?HTFI-oe<{DG?GWkycDAi&&YUVkj_g z_2`V|ZHNf%XO4{0CR7QdN|qLI<09X_jEyA#n6`L&pm!eY!{>B5MVrlGVVN2ksuz~) zzxc8I?XRtNzh#doA!jk*WuR76GsK9L{=XnetUr3JWPeQK2|^|pIa>m#%m7hQNlsG) z4FMu%RD`O+WTF?A>HQn@r|;0ERm?j1`De|)|Ht(3AT`1wnsa>D0~RI--MK7scQ_eJk~yX!&Q zIb8Hq(Jd~PeEFzXdFl;D(!v-JM8(Vk2Gm_muCLstQ=vi49kmk0g~|&*hOY)EA*2|k zTvV!W%GjqG`M&N93ypYgZIxI7WugKmpsI0Ovr^0!ppqP=s=3s28m`o#MlW3sULD`; z@yY=B=8mtS+n0aw@(Dvs0FNT*Tek+p?0+DNlujzZ5Ruvjj+n^c!U?55z4jW^u^4E$ z{}4Cqs~pFWEFVyFu0xx zuUN=<72UonqKdg@9;K9wsV&YApLE8AP$yjmHkate1~naKEuGA8aE9Ge-96TWV>&$1 z(<#jw%;uPP)V9b%dEl?ESXY<$&8zfBxAE3xY%F;b`wX(wJXU2=CX5qZT*BIfw%5|t zP5J06x$}_s4tYK&uiyw61mom1=VXMnWx8}B-MEMw8`xOF!Uz?kVh}LTY3~#dcJpVC z^xhMCzCS+kOl`o+%$WPBQ?e8TFKoy}MBXeGD(WTv5NI%#rJ>;fiC%}r5sED`3+Q5E zikunhoi;{`Q^aw>UJWZ%%$7T0kiKRfrK)C1Ev}6dN}@ zYUJpbiI|mH>xx$vXld+40GbZ7hH{{c2tWc5WB0n8Hu#;ZxUz}~W7c8+4EJB? z!yOz?t?nmCK#Hu&oNFxqn?Kh5RQp6N+ko7YyFnHZ73tb% zKw1?s3Q$TR5#g~p#aCt3eh4+At}q&7Yn6WZ2L1FlE-Yc%>d(Ju|LWKL=&;I4B7j3_&uNx#*eiLcvUU|430ws!+2iY`X^ zok3W6h42Fq>J*^^qUcIz7(ydxvKJ^#gv43{lSHc%TwF$0G?`9YI-cU_j1JClaH2cM z*gMkwBOIO5v_V!iyRX|tr0+LLGi_5sS zk#1hnPafxAekOMwrmPczbe$-PWI;Act5X)J%~FmxnVmgjvTB4y;SWtj43J7OEIsmt zyiHaq#S^DG=x1MP?Dc<8!8|jRykIL;%oV2*C#&3=h?yx>Oo^$gkZN$!s*<|G(wNqk zXk!&?OSHOxg%K8NTBxy5V^kp}N9W=9hbTIsro*hkw87aNXLCKB>DgS*W;$;$oug@} z=_m`jj#9`NgGU-0!eVBeDea+9)bu0}`=T6GSejr`d63mS)4cQOVvp_?w~O7*O-Qw_ zuF$P3xUq?a8Y-B!cy_1{cCmLtP3PVTC`7<%F5Tn@@8IUOqyPSYl#@`m{Nzns zSibAyRTxz|8tL*PUf)VTzRlmcii&h^ z+WpNZ`Inz@BaWADf#Xx^I_)|Y5!I&4jpU~5TG3V{i*(te zfJBi+I#>$@WXsD}uM1@IOFiEj9zmwPHZ1e3)|tV|{%RlRL&Kh8Jq_gl@IpL69T~Ny zsur$i4$@(i+5o9XCp+inU4LeY76xI2IEZx(?gI~7CJGCZEW`a@wytW_hA<5l!Hb1%7wQjfjzimD^ zEO%2*y`lmD5*2du#buv0Gcik|w8W6X`};#jPf@-)zRBa20r0IK1K1vW(SIJsmIPfC zAEIDaz|mts;o;S&Ki>c*N9?2HR}85HB7#7|9Ur<(p=93M;U+AC($p4}R$u;08yAA` zr~U!^-`PJrdO!gPH1)Mo&?f=*WLggu0wtWcvDH9fZcz-I;`DN>(HSYp}?K(hY#Q^8Fo+T>ApVP(MQj*dyG~vN_71q{rFA1 zca@gMP~dQi`@8yJN1q?!w4p4h6P6a~;wmm(z?C(uO)yGWu5sf6%S~3;abmVel7zaF@dPVNSX-fu6~3^Fi_5gNjE!Y1)EFhyiR$DrWGSeFSY(c> zpy(8xpv!18+Ky%|%{$CnoX+%cio;VqIMKrsoKDfWm%ws%y`Fhw&O)P_CY|@d6=a-< z#x*UCF^agnd5fk4)T{kS*&=L(Q^3&0G2Pgr+n2C50Rtx;UL5PAU43zgX@g;$xsp(( z%d6@C@Mq1x{ZD6ipOc`4WUKfIBeT_lF|rl}+0&oJqBs0C2(Wgk;?S<&m$m|QC~1hy zkyy4lKtvT#Gsd-UuhNfh(jVQz$|4TW^dCOY|M?SsdPJRifRV!Ln)zQ8A&$K|iJ0~T zBp@ZNlP-*LV~c)pliq)w))&y`{Lz!@%87d2N{S>e|%(c71?QUSnO#{C_=^OW{a zw8@&q!Z%uxMx~M5h|DeDS0zI_)lPl(tf#R=(=LfxK8F6S<$}V?_4;o^hKg!uzJi{h z4oj?@WB!DY$LQl%5cC!SMC?&U@!A5H6N2pOzoijPQ(l#L$6#+dp}rTOL!}xU+z>UD z)Yqc4;BCv!nQ6U|P?T4c_7Cl%WX<5*Bzg%DyJmojO87elIyzDgv_u|;VMTG@01Re1 z_%b#-7SX$-s4HXE%t(#YVe;UgkaJA#Um0>`ic*5Sy&VtXz*ZP|KZi~%^t4| zfN%NmE!rQwNl$cs2dI`ffq<+5_k+T)3+Ui482$?qqkK+4U&E(-zX&5OBXBY48LZh| zpIUSa^|p$S)~~PHbMhf>dgnA1!zW~i2OyGA;T25GNI<0W>_v9D`GP+nD$YxpUJ|q4 z-^W{q?boNC*YD>lp2W@xp=_eobfle^)AF9JDF7Rk2x9|uhj+~RV7KM_&lo-(W_wCC{f|wbiXgeIA zV%lM;0)Ufd{@Xirf2SUeczuP|S8#P57gw;cL~9d_lai$y5-Qdz(Nc}IMO<3L&5N{m zjUMde&mYOd9Zg)leI0LIqlFPV)klZ=k6*~=kMQDBaR=n=*hO=^sj zCZRN@zx&tv$-|w${tYQN-MlmIAKHlsw6m(R zhWkaM+`EVSI}Z(KO=ACs#8r*`OX!n5>{EMGHwP%dyNd*dCdRnd%j^6{x9EdgSXtEl z6aBkS^p|(|*)cVp&z|=+)L^0qlC>A*07EUNh?CZ}tS{3K-%NjWo35_|&<6+IFF)@- zx>p^~39RFau3e<}Z{XshnnAI1s-Hi=;}@9Ekh6AKL^{dyu4{6h=iKDnskS*A_wP;s zwd$WJ&45KUtH6_%a8DTVei6H{a zx3A`o=%e`v(N~xX#YY1O;PzQHyj$sgpnCpyHlk zh8TKf8nX3(`2i?;-iGW6^z3s(PSvV&_`RajbN7i`Q$LPE`uAhfV#5%`gZoX8_QqJm z_4YMG$?F>R1^|HaQW98Hl{CSsF0mOOI`rp+@#5h;#p;1i-%v6~v2Md-6xRu^rLg|R zV-Q`n>>UY2&2h|D5VO<+RrZ>XT7W1AyEAMQkfJd#bA+q5f}^RPG}xK|KuW14?3~cN z0YBGKjkN__Sf)!C^x_&ema#l>#JM=8Nrj3$yK$VbI>DvYbn}wjf00k8c>5Y%SVUI+ z;#v1MAIYbW(#e!M30D_UCps6*S{zOF=!EuEa2v4 zynBPLt?OdtShLAEonz++FOGEY6lV>ZP6?)y#<~rNmX@Dj`)ERl2Z%%{6-M61{yDuWw;<0aY@BKg@Ke1}T9= z(OAi*NJ`*B%=eiz4j}xuu|Y=(i#66J*j`4rL2ZX=ODA(WIMtma-8<34Q%vW2Hs@J` zX+!2i5JB$4B78@fK~g1*DpbjBlB_zLQ_klk7#ur;302bdC3@=$UfaN!A&TP}9`5PA zXZrk*rVVl=GpM4fX5Do1ufC7#TYLYP|3T-Pb8ev-=v1t|bcPDFGxQ(OS}kU=lu)BS zsv}&ETx5&WCMIHg*=R&(GPE7VXRO0^WT1~zy2!iO{vSU zNhopuRQRKiffg}k^Tys7K~j~MM)bzz>QBEz?_Q^I(if-l;l1`B@6hwZQL7-*5$mOm z^u0H5ZADEQ9?bQ#M|$@upG?tq$XP_%oSU5IDzn_pMOxKXawn424JX6;5(SRJR1^f{ zwK-Ai90!HPuY1rrK#|dF6DFb@sRO-wp#Y+N=`=_4;Zky($|i^VTv#YE7fend&+$O$ z&A{le-HqtS5ZbDsbvF(qR3w7wHUTevP}3leK31@K8^mv`MIW(8+aRu2)R{Lwh^GgL zqC#kB^MRG%Yc@>xLi|Pb&~R|X4Wu@&n*WH?pOA9 zY+6+sF?^%WHo9u43{FE=xZBY15kw8UGujTbDRvL>=mo|jEKRU5 z!Qx1lCbYSNtu<_}V10sx8smhDu`oS% zMA3BEJJBW+fKg4iF6yMh`ULM>2UHJEXmb@ew{dw@$I0h)+Ti&y?mgFgPxZ+Goy@%( z6rcoI9MQGSH1F`;8>o{q(dAXTc^zLorCC#DtrcTHvyx;mtH_ARvh|E}6D1*J)x;#Q z@CG8*68=>g^J_cFLTQ=J_fniK>^*Z)TKSTN_*>Z?qAF2>*JY|L*5A;7G8aIFRO`Z+ zRu-|nj_Vic<~FWxVq*!3g?x>YC?#Xo1x?1h!>rS3i<22n=a@Af15hPUcyC5ECL=7= zR99L>aMz^5sG=%DhU~+t!nnfn7#mC2UZd+EC zHm4v=4y7uoHNdh}mj(0Iv9H6Hesh6H7sjx_m9-H7%rl-I;?5I&^a4kxXgY{Qb^O%i zMql5q{*Qll`hWYMr_c5&rzW?pN~hGRbYf-fEq>j@P7JYHJ$Mn9Ck{wOJ!>-vUkQhv zB@ib>oTLRrh>~Y+5`$SS&W^#Xb%mvgzP_1$dYiuY2F8^>-0A+~hx*}z>ZqZ4i!1>Q zgA*Q4E-DZpDkkEswZh5;x7d8hJfKz z@dzK6yvFF8iYXM5H)qt|Y%o`Vi1itCBU_095)op~QIpD4L0|1YY7HUQ6nS%EE%EN+ z)Kbsi!(;cg{3hH8Ahj-VC=O)AyD`~b+GZKoZm*==zHk15g5hC>k-~^6mn}Mq%BwdO z96?AFA%{xD?xE`OfC7*#9u-hlOIR{KzY!GW%PREmIdcO2X|cl05K|+kteQo^B<5Hd zE>R9stS1SFNJ!89>(%k?9Ip(3e}*GAV$c_ct(;RMLQh0vSe-WvY`6p6F423gdcA0xOCp58La&<#4_bbr^JKX@0QxvelObTM z%oa3|s76`+V#X*uHeq{EMJUK{%FUJtuBA9yh(Z}LP*RoqCZs*^2Z|bqiXa@e8Z1^-R7Hst zESlNF%Iq^TR{%%-8TQquY$P-WH!B{RvpJ5>&EG^))%n4faRK&YY=pQntyvIfAX-Nww%3~Rdjknd3IzV zfzIZ5w1f2(Y%JsQ3PyyBOEh{NO@qaeX9y_J3XW%Zw5OjvmQNqii$gZ5o1Gg2k+hxW zEXxzVxQ@k|MvR3-S2lHXm5xuVEMrwGXbAJl$6h4StjbK*f!J0^Rw1$wSn7RNgS|vn z^GBlqCQ$0JR^|=hzQwPX_9re?Sx1~Icxk38B_?p4P}jOJ!s;4d-K3kBaPuOzSFyGL zB5`IDEQ+j{cQ~D6|3vrC^x#ZSW;mJAv{6IRrmUE@IGJPr6niJSdyIo4Jvhbbl;$mR z5l8?lDt5cVc3M{Lav%7Pus0YWl2L`r7x>+4xV(&t(J6M%@WoTT`xN`f)U?P}(I=~N zhO`Uy%K!O)EC2B6{y%)mTF>*W1F~ob$?Cbk!(ug3Kn!`{2SWB)9rTbc!`g~moqDq{s`57}((z@1_MSAmM`jgxA?hO#>r;ob7{a8PJS{=94b>3Fb1q%u#5kxbA zK+HyXfCyD3qdKoH;+-p#58mRpt|6;_^r-vUC-Ui|bk;HvL{XEDYS~y$@4rs(UBYq= zD~W%9Uw-)|-QUAmgRaxIYgL-u%_Upte->o5&R@uuH398JBU}ffutL9HOsNO)nk`e7 z{GVk`qlOf@uYiL1_u`m#Wfh2hqEN6A_))bpJPF=7Q3O0lL3eYa+)G5WhUr$wADfuM zubG@L4YLL&Xc(a`$QfR_)VF*%f2h1H3kVt#Z2_VO6nI>|ST7n>7(#Q|ybZLp>r+uJ z{tYJ9K@LD)nVJ|7f;C(4spo;-qcDCD788Xo^k)rqQw)MgbdO)f6RRtfvIPnn87SFv zb20q;)$wf{uMB{1=g^n__J8QhTcKd|9;*kd6M}zW4}`QZ0=d*PR#odWW1yqNAZod5 zT)Oll3|%rD0J+~B98wwzBpVzNTr6rCirw2{`b((dd0s(7|JY(Azl9G+m-VZs&I zRJBgVx-`axCEZ@b%}eR+YuH>w7ChR^cOIwHIY%km9tA2WQU5+fpp5ApFAnr*N*9;4 zCQO({i_irm(p1cq24C&S$6x8^k7)OVTXB_JmaTvon6>h350Cfw(yCS?N`%d2+FHf4 zz0~EANY_~^unI(ll!?F{gq5;b%q&=u3BH&pGBgp3jm-q*LiyVay8&QP{vHBkVIiEz zVt%+zToJ0M@KY04iJ22y^MuJr*H-woi|O`t+}g(GG8RV?HD?$^ZN}Lg`zN}4A}W1i<-EFp!da22#Sf(owC8BTUA$IM#7Z%M&b5Xk!T% zma#g)q^5C&L|QTG1ON*otS#c=D$ZIup5fqxc8~S>zV064WQKX`-T+cqHB4hB%Vx9H z$3Zs`AwjAtZ?06gui=d?j1#irxWT>W`o$xCv5&JkvOv_TC@L^RxAMRLODv9e|6l(p zWp2Bs70J*}ql1-E*P_GNbVR&04J#NqdqLJ7g2O!K*gEPb_At;kDk&;(0w>~RjTgqX zZZ6~P%lyZ;>DFb4=qHc5zx^0@UsTf$9{J;}zY7@C2}E9?jmZ6`iLB6PUKr`M&FaT* z^LK90@ITN0p>My>a&mYst8Jb4A zt`ljco9En!%&qFbXe(CKU$bf#Ilkg<6J*WC(>vlX#gvS{2h_3|`huZeBgmpCRjdrF zno=-3K}4)YmWcQayQrlcm|GzLd)SQy6j`rKC0pNi%`B3=I#F;Xit;nO#V_3a=wZ8i zpbh#aLN?t=5$EJIla->jx;;+!+e5#E1J18+xK$A7Xo~nW zbv=yY=kCK?HKWu!auLh1@y|hppajFw;ARqFYNw2om_go#652l^z+lf|2w@DAEB?Ww z%*CtYTR2`B0N=vVL;05%es6C3zk*Ko#!t3^gJB{N)Tz*j86IA&&<$SyD@E{&47Q#Q zz8EgnQ1hXs;A{!`Rf}*iIlur}4Pz%fLM}Q8*EqGvv1r}mm5I-docg~AjviT~3CsDj z98;YK`Urqc6pm8z@_L0@DZ;GGQeiBdvglE~k35oY!ycoThE0PHTr8JY8H{gCJG|?e zJ*1W?1|ovg?G!Bq!%csgW+zql7Q+N@78VH7wLejeumE>b5JRAeNg=B2Nr)>dGw+?IN`M=T3f)h)u;P7JWZCYNfc?4Lx)X?J|F0&D#7AXpz2*z;V6IF;n80H z{a5nIgS3C@7`NA$fJW%A2pvxijM7RCCTuLGE1P=%InCOt%Ohy+3@&)eZdM^qNwtHL zDzSx&NW2OQ(xvFmfrxPPW^e@*roQZtH(#^FUm{MV6>|luDb>uQ#EGcploF?u3Uka? zx6-@U>AkDCw2H;CcG-+MCdRbG{;53J$xn9m*#YgJ;bcnlmfJkYudw3XW-uFGiSj#9 z-4sg58ANCa0M5t*S4yDyxYEf8D-*0N^2Q2XSjNT*Ru*V&0ZU_yl145#CKc8uxU_=P zO*-7hi$lCP)cs>QIm5J}wu7h=lQ`Z`j_4pJsDTOsR1;)*!Z)wbyVtNj1`%c%kB{{8 zCwR0=XN}eLfrC7rp#depaInJt?U+3 z_;uWw)YxI-1=*AYBtRLR%e)b9O@1{q>q7-zXzT{J=l(1;a#xG!iA`8w$n)+vI z2?Dl!q$jZ4C@304eHSBKxOS1qJs<$e-rY}$tPNMFin69kvD&yMp=YOT5@#JVRdW&g>%xgIII0M1qd90m;U<@(SBZPkXTvUpw;kaVKiR5H@obTgsXddGz@smD&Xefi1 zMrrNZt>(8gt^Q0P?i6BrU}-QBX`A)vjHV6pA{ba(Oj~Q+!bqpB zSB?+m*oPyl7OFC4k|+yz9d|-t64gfZbWT?75rm|U&aKg`+W^C+#-yVWUD}|{WmMt) zQTOE#DRrVRj`BzM^|Qy-;Tg4E|3U}4*LQ;uwVfWE;bab3K?SUgXnPZr392)yx++VZ zau&9H(i&hPg5-$J^_qmB6e=+JVhYpQom6DCAI%e0=G;m(S>;yizh;G84KI$ksyWp} zRbl-{H6~+ht)-h+`2B0Rc@gUi03e{MqAWO^V)s-Z?&SMBc(TVQXPCFtW)gw_=hDNq zeC$#XJmBP|ZHp47Z`H8G%Aq0?5zw%nOm+WA6U(^9WQ65KT3_Mqb-K8YtyNl^U{Yh0 z+$}IkSgf(WfbCTrU8I9k+CSFaV;r68$yDk@BH{NW_4_6udkqq1nbf$pmEOC7E2~J1 ztk|34i^sV46vtC^f^6?apxi-pYq|bE{dxX(|G4{~KB_d$nrRElDxzW-Fk4X?V@I_# zp!GS>g5}jcIk9<35K%wAmCqqO-_BrCByiGHfora~sOIyzIg5AcBG|-2VI9C@Zq30Wkiz{#5jBDegw<#g0O$C{3-3hDem5i(s$zkT z9(&`T69CE);$tv6t4er!vMMZ50jloDAT9NILjU!;*~OPcBw#Tx>@EB1K<{}s0i(s; zPlKKSp-Oy_1VJQ4niY|yJ{U`xHXS+u72#iqAUVpg+&(AN!VT|5s>$6NN+11i zXUS-h@KmttATr0dP(%(Cg8{{SH|&HUSvV?>98OYvcDvKR0D=7f}e9p{y_$Lp-t7w<*)yhEEX(Os zPi7GZ!eB;Xtys5K>E<@pN8Z!8HyQy^J)FuX59RYm)xn9^kQqSPUibKdB~rz_Lt_jy zam~84Ky`)003ku%zDTL6c%&@E0?AHC+rEm0N61PZb}Pd*;o~w#J`EURds7L%I4$7E z8!vz=riz$Bqm)LJEbND>gi$5qkzQC$uWj?~%ec9X?Nv-FC{QId9iE@+qg}c80?!U` zaKfiEns>;pSKYBfoMEzSP})IY4!DV;$<05&tXZhU=KvtD!4HdoU?L%E1x?oDneH9y zlfCZlV_IG2jTPElr;BU2utaN%v@(X3gc>K*jHOyP7BO3+!x;`wY4Z^WZ$-5o1ZKT35$-`&#Rc;jb_vKf2>Cqm|8f`lfHR8Y1 z+)8d#IuWmxq~7YQv#@?hah?cNi2Axq8sYo!-`XNGAf6HFzZP>gNDMGG#qDd4@{hOg z74tQ`0c5@^YZL$?cWFh+oK>k58;n;GEgjyRyD{6t-dh+Ih$y3TgtbD4)ji={cr25m zV+JBm2OM3|E4FMj{OX{xmM}2*`s?fYD|IVYXv#JUPD~0AF9#B*RO3j%dh)VLh z(BVe5rWP8S*hRKYtgUMv4yNby;t9%_5Ve{#-0c5U_`*4H{Ob7Dj#mc2w{V=d`TYno zB>qvz<-!e^-;prMUL&f2HJ35PiM9G2FxFo&^E2 z05>`87upZoLFQT(=b62}eUOD+5M491f4hIi4i?5NnbBA(aA* zlXp*XjvuAXadCHYaRY=wV(m`2=S9?c5zXQziJF=TVBf2TBBqVh7tzGYfsHyZQ*5o0 zb?l)&L-;&+EgYXPndRfgiaB~HEC`4G-bR36F+fhz5POaR$coLwvVkdC!BCjlV29t& z#dpqnc!GmdYD5O@^7&?lIHt4N_P?Mxc3`<<|p|E#OBgWE%zk8G3 zeU0xv&cFB+bA__^G$qn;O_w(4@*2iT2a(}0PyamY-KY8EuXtyl<_#2(QnfL52E}T! zkTX@1j4Uu?K@{@<%}kWI%2W#pGeE5hv3tN;Q6eR1(!h@BiNnI6+X8hB$oBe}qJe{_ z{1R1c@gb=uPWA)1W=^T1igi@$g(beR&9|@68{4?FhJ}%5T!>=-1Yf<7&mQZ8=X88V z^A=r(DmsC5VXN8;lEKCViZP4g3NU9@nN}lTNhMtRL;!0x0+WbXGo0WP5EMexWz6S# zGQ+byojlQ{39T(*a~10=*jmN<60I#@X@r_-vDSqeOAFXs!S;pfbgC?l379ahbW{;H zeMb0Xl&){n%}ZDw13;sAeym?U#^W8D%^)4ru!=xw-p%T_uh8q4cmDhTsoS4vtBrKd zTN@%2qoUQzqG-up?emvZwA3*}*|;GZRaHQVNkmg37wtTh+h8RUR25Z}XgtF8E&7Y^ z(of#RWTc0u@(-WpzyCZvJEk^MwzTLlqKTSC@AdKZDAQ39k)kV5}mEOCG)rlxrfSnWhl zxy!i~X>!ggUCze$cPgE#C_3@}UltK$)0d;LkG1Q{4z&Z{tF!o7oWB(*&Fd$ zHaPD5cF@W29&KTsiD$gQ`-S<;_i;q=xh-+=HV;w^0ENICRokwOs-?yLi&rf@^;QfB z?Im>h5D-$Pe9?rB^X^gbKW-4=`+cPcML32_u0r9S5D9oi)p$y}SrYwqL9nD@d)V^* z0T~8GiO~%q9eKwtz{oYO2ReO?LearFpz=sjg}h9_A3EY&iDm5yfOg( z`3@TV;liYN$D&?Mzy2v40JgJ&nJ0&lRGgj~V4e!5?J36yEWEPCJ+8`WfiwJ3}i`(+TRgz4mpEh!~=?>kovsXA)t5793}Y5*an^tDiYI> zzXMZs27OSYNBeoV`%+w0RihX`mGnsaRdE0_G*ke*&liBiR8_E2^JJAsfd5@ubT@RbW#9fxt{qaz|@!On61_yHd6ag!l|ckLX;VB%3;NGU7> zTaB&aWU5W;^=A@sl}6bJL1j=YNJO1jRJB??5(zK+pxaSjh!(LGbjEN5sMAHtVY>RIUux@d-{)}=~pi>A_+u-yJJNxpm!gz$$ zMOt0P_6D}s>EasJmuRU%MM$;Q6|GJP88xdYL9x7m^<{0c7xk}*F0Ik6OW0aMB8cK> zj=RtGtEY5w<^^6YFfVIX$&A(a-kSd}e|!4*6XtP~=PfjQ#J>n3TehV|43)ylVhF6* zmR_X2NB|M{Njh&z5Y@z#Ra1G>j^-$VSWyvbW}b|2eUtw3d-T)Wm{huR(*4KZ%CGKL z`%|8EnzK>3h*|Gdg{|_ifibFdRO`w_-`Gk&ev4keig~NQ`l9>Ar~1{4G|e7dqSh`A zU?4Fn)}=+4y*Xqx*btjHXq|S)~z~OKw#f(N=P&(q^$Pza6BD z@O@AG1%y5DSI0MZyfOg3spAiuyLM1e*Kl1M9~bZ6a4$u2Pmv6Y z-X9J0nYiN8Cba%=7`CI;InpAu5L|>q(q2YbJg{*tJwzCO)zykx`&%zWR|*2yK&gm1 zMEw0wvC;6Vy%kg%P}!25oyHn6BKOa$rXvCxvbOAR*%x7(!C^Q%pCzLLL$f+r)PM!s|ROT zAA^9U5pAwwX`)AG)M znW;(%ItECERhZC;Fo8unRZhsFYC+6mF~q7RQY2Ke8vuixhUm>qiIIpaqH(HfN+ae( zDOF4f^s|TglSlgWfSZ3{PN5Cu%VpM zwvLcW`=~;p*kLI#iBVTN8O!=2-o2Xs=X z>ui|mN z*a|e9m)h`n5~hSE2x!4A^vp3O9X(f<%He3GS|(?M+KV$erU{`r&d3?+O2am!FTiK(4tF ze6xoP^jkXMT2ZF(s3AS)UWhN0Q5bwJ>2EzTP0qI+oOT_~v6p}e*lzrI z$yy$q8FZ-2dFI8p+7rrA@0z1CzRW~jmaL|{;2O2moE4{SB*2Y6lqP}Awo0qq>n)is?Y zOe$=y;=(fajvx(s)fSVY;aVqhGBO^Fx{R*#%Ar-Fiv0u<%Gn}tXl)T!F5vESbRDcZ zR7!MV1s4{)D(!GxiDKt8fBu+vPgr{XTUGi6!9#m17NgauNzs6|&E6G@2?Cg#1W1X; zU1ms9Nm;UL#oVcMqM1ZA36R4Z5K7m5N<_8*Dt~L908lemoJPzwr79)nM0LVw zq{|CIihUfK@oxe zBXB|qUb#!NuOr)T7O-v2%1rw3!0;^ZV`YK=?0fam$?X64D;zg|u22z(u)09EuV8yk4^D7=Mit|=ZCalw5jw%%ncjJ( z51!NM%*`H);StFY0V?Ig-+k7ec9PMmcB0eL|MVUDvv)AA^zlLdfB%F0_Fi>r$tQWRGRr~@@o9300A@^T zU0BeKMSAag`suq^S=29{#aly;RB3A}xz{P*wK>^f>^Q*Bb?dOLTrV zJHeJ9MQI=+i@)zg5LGiZdMlcn}pw7?jpTTfkmugQ@g&WF; z;`+U;I8y*+r-xEijdCJ3=l+f#&YHkMN|O z7Zfi`@pB)&I=;E%l>zY2cEq01^Q)bT&MsUp1vfy>d%Khhb&MblG|u%fXY^zW3Xg6@ zHhU3Q05aJ3aF7rb;@EkFQigu`2pDerC_NTMY@&8hpmc=8(=8HrT&PCK6ZmV_*O-=| zFfF1cpc|L?l;T4mFtI;%0CXD6XOUQCZU?bCy%8cYIJ+si_n@#i>aB&#{Mkj++oHge zGqk5n{Mqc;#cVvbK}xUXfu6>R`w4?=a@bM;*?lWqOcy`j<9{g1`5W#h5L+Y*EYp{* z_J3kdpafKI2C$W(OkRbCQXo`+B^KG61qY{iwvUrb7%!qu*jVAsHGQ;;Sw|%0O*!g`~4RMW;XEso%;DU$LCXtI3q zRPH{nn+7@e!R`SNToL!sOo<%IAu-kQtWBr0*5AH4C73}(B1|+QNjX;_i-%516*Pmh zXjT!X>@mu|{h}>^nR*_9mWUIOh%0+3Ocke^QpJ=wah0g5FsiY-L~mWe2RHH7HdZDs zA*LOk9O$PH^Y8D|ll|0m5J0l6HI4my9;n0s5Coy)AXTq^6IDV$hU#q2NK5Nd`!bRD zi%?a#T`BJ|*Uh@;B%_Mo zzD9rfT`Z0C_xHR1`S111=V_KnfUZ;Te()0biMug@NttX($fY%Y|26*JEleu??cMx0 zAIqJm)mcZD^-;uLiuX|^)RkOV;kU2TJ6Ev2s0wN_c249scjc1@>1?XG%Q<(djY=cA z$$6fQ{+CX*m29gzt9IrGaNzFky^P(@>ItH(UKYaown@I*1q0uRZ!ecjNrBeaS{5>ojA-mnfS0(n>G?)^mFL)$z?8uMB{1 z_XsRJ_`rE*N1uKUg%y0B`5#D*VZgZk%t*zFD(`Pu4UB|t68 z-=p$TE{U)0%;Ko-BMpXU_Ers*Ph8%GZzA#;iU_cy@QQ=W4B7w}!0i7h!HCwOx6C1X z*iZlTh|qs$=lVO4$y^>d3)Jc!^lp#AQ^c7HtJbgF2S*mlXZX5;w^s`a>W9?N(qN)Y z2e7qcGn$bd$XbLx#|13}$ov2vz!UJ@*gzxoquLKu#0l1D){D=S81yRsv-2xrF1Chg z=II>I4s`z%YYV6dYYW)EfVE|u&e66Wzz`I4gxyE&oIWf8nlrlW_@+);CF0O9r!%?p zlz;FBZ7<`(lCDnZVCKfp;+Qs;F;1@k!v=)_&riC~AM)X8w172q(VMyPYA8%6_?~0~ zNeK)uiP$tCjlpx&6DLw47RpGOM6?pk%H9!)B`b9iULs<-m#PAB3a`8`N+43Ih-*d- zHUof}Q({gD6{D`Owv2af;E!(N<`z~)P(Xm=IqvVsNB8CP$FzUUSv=O?(Mvqhx&3Eq zI^0lpqUY&_4S)ba7<6py8{v7b5xh#T^9z>C>_tO*AfiyEqiOs1pVg@OPrfsHo)+4=Dvq(1xTxlh@UDv6!DjDdk5G00?;G~ZE$zbJRr=qN#fyD9O zX%yNrv{*JdmEG^QrGi3{m&?0@>Zv~!x2(Pl+#(PBBjbQOlD`HyN{ zUBb=n^po3k>k7^q{hN>TKYXSS_S38*Rjc#(rEU=|0<1SvzN?v64k8eRIL1e4t8Gvu~2)9q*AEY9Q6mV#=s?< zU5aNQimuvx25cS#j>i=OP?823mRO&Dm)PVwVD}Lh*WwEFb0XRe>iO>`k~QEp4KcV! zd{L0x1zT(Xv(faivEnTjou|Dfp)!a9{$0fo0aPXg2(8<%13GWRmjz0$Kou1Ad4x1t zLr0Z0@@Gj=tk~IocSmr!eEcpdk3AT$88R04slVU_cbUfzcy#Ge$&;671BTmcoQL@2nwB90TdX0C`U zibx<;h)~nw**>1^V|xuNBP`Z*c@vv!x_3-%H(cdm0~Fh{Xmy1Ox~xr0A^@nas7ii< zfE4-u4t@24E-qtj5vvQJ16V-y@&eYDdUmtSVw>~5=lWnbH63ZT`1OKn`*|u%wODvI z0i?tjR~RJ#$cocB+9o3A46X-$7C|M%Oq@xSMJt7fWRWb|iF70#B#UYy4=L%bdy4l$ z#Z;?6HK&T06B99|gp^PvU0tSkZs4c4adXoPeTv{ zO4(%nM($UXxn)$0@psnQJT;2oRtH`}3#A|?0Vr$P5g<+EwHo_QcS@>C49da;J~)%V z`@QZS^SiIptt)u*aypvw{T=z@QTO1v9-i>5Wpfx(F%Fg5jt)+6HpTNpJl@qyn{;&( z+pAccpk~zUJA2mY(|x)BJRO~(>mXT0MWpL;BV8l8$V1E?1h>mHqRi2MAHn%n{ZdBh$yj&$h6Bp`-DEZGyC0_^=X#`Ko?TN zH%m`AAhtWRlN_U3R~PA>Yy4;L)71;uJ(j=weg5Sa^z1lUi#=6071Y~7`qJe}tBGFO z;`guP${G?AfKKq$ZvM?(dU`-zC%Nl#?o^tb=Q%f78j)6{6KS(_);-t4epI_GhO=`x zQoQMcI?m35AkIA~$OK~;3~DX{1DcT!;65m&Al*wDeku6?kuwm=&C*!Kk*B*95Hj4? zv$r!Bm}4PAIful6#2sCAh6<6vhcDIdFRMahL1^(KV4y(aZ(Cp{|1~H-#6s&ixMGDA zIaz*iT@!8u#4836k*h^L5r*F*28jwHQw$)1kX4oyB}z7n9%a;V)HAwHw#ohc9ZHSqt+8u)gPR|dehe1!E}ID}BA16x1%pWf$JbWlX;l~|p@ z7qkbwg+8`J3yMLZsUo_B9Y9NPE3gol;_gFi*z^*EasEa|Qn5lHR;Y%~>rIsEMgFgH z0hfote;CtX_|b)lPu;-U0E*3{)PrOopr(env_Y4Y06VLc>*m6D1Vf@>lN6u|iuBq- z>cq(u@j@1#1434zXv=^&XYl&VLt7k0#Hhwv(7^QZEL2(tpr>Gi@*iB*Vt-0K84KKx zECOpU1&okG=HFM20BC3c+%wtYtPAMfCs(>swJjSCPymk@G zHO2{-R_Vq?eYT6)98LE6suY1u{=-1Y*;85|xW!D2Ym93o250vgoXqm)kLbOtw6uT= z%UUtD9a2TBi&&mS!1Q1i&RTi0pH5~J(f@i5{uf0JAbT1$F)V6>zzZWxYJkuRj?d7x zV4$)PAVtjpAc90th7vN7Dv3gsGb$y`nlp77ol<5Mpd(eNM6Ni4Nxd26_n*tt9o;+OY0GUU0+eBk6^!E4eul1RYaZo ziwf6+7&nT`+Azz51bCrx>3B7<1?*Dg4SEFA5RsJVx^s{D3i$tX9Ip(3Z|OKMJpxO< z1muV3J3no^UJ6|RC+g0V;eJhzE-agu`qWGGFxvl81+f*6v>mMu2Al&7-)Z1os1`HD zwyW=H?eAc@PU)POEwUi6d<;*A!$MI2K&e9PXSkmA+98v4`=mM)*G|Yc+ z2Fr(_k!v~d2|(ddAH-1Q0O(fCht);Cae@@JK1q?n6_7wRb464Wn>U~)u384J)9dnl@IkI6|xe-$x9bHrPMmE<4QV$usnWF~!Z+ zW|*zBm{P)cOcz$MP(u}GtsI@8%UUswYgn|pq3x6aML|6gH$ZFF zPDNRZ^+SW?Y-6(!_h1Jf-sLM>eCrBc+oJEjmOgl$Pg^`a#N$1Eyo3D{oXpU+Xxk`a!+J8s@fqzM z>Cq|9uG6iHv@}vxw1UGkoHl4%7*qKH8cF?Tm}dn>pUsUn7l@BU%|r2W%KS- zesx!Vf3G?{LvC~1b}CKo=DC~Y+=(<Ur zJp-OSTr#yS{S<{4jz*APLNwlysUveqMb3Z}G_L{Q?Zm<_+x!c8HF^osVdxYjSj`_r z+!y`EcB7Zh_wMZjbs)CULD`!@yY=BwvJveQ|$Rcw92_Cbo&P*nCxIxdL428lCdHEa>gZu3>p{; zA^lJ&1mEE$Tm^s$kzoCz$=ARc;RZeThDJF33OIOqAD^KpK9x z$R=n%5k0L8C9t<8jc|hUefBt?_(1z-0<^F)h`A<@^QjZpOm*TqrE!%eRW(W}S#chZ-49HeMGsEs$*#V(Mav^BRC?_K zy?Ip+j?wIRWWSa78Lo#w!H!r&VEw9yFs^BFthEK(5JX8e?Vfi3;dklY3)(%xyn{lQ z7kF#c`hOwJE>FBTo#SjymJ1s?xZfPHy{syu66=UD8Pno|E>GyjMY_I8Bi2rFG?kMx zt`k<5V5z0Bf|%4h$Gsf8YA5J2<}J+|G!11z+f`Y((mXv{QfrBk z5~@m<#`?x3{>g2;c@c{>MA2kCJH&_g^`m=uc0@VDVW0L$!zWn^#BgHYQq3**nMy`4 zg9Vw0q1ge4HM%O6Wx*;1Re1HOVrBG9rtb+=P4C>`4{moK-;qxraF-}m{^guWmCt7S zu$9Mq`Qv+7Tc#@)`05s4-K4D*TwbU5U&rwrM`t)a)8kWg9Tq3FIHCO${l_nK=Mb|7 zhbK6m;r10;pXe;(@QmgSI#H3FrOnccG%Bq+D$ODSHHTD${u@dqcy$`jB@N=499}Yq z;PvIND26v7G_eb%V#J&~iniQo;L( z$Q+__Aq{^$1*Ug4q`$JOqk&`D46i6H8g7VCH{s?QzzaCCFPH)7PYzP<9M2fI;T*&t z?3`D}zl`IR0r2e~z5X0-h1jk|(I~y-h7LSaHd@fd#nKMEs5pP|Ave(jSsJ42C?yJy zNGW~+xFMmAFGZD2L;~nL91Zuh4#hdO3 z!zfuCg_nwxVwDvTK|r(^_9g<+O}PhOFRdGUb`9XoWlj`;GBE=cb48TEBjyp=pQ+~P zLY25?9#vIcRimm(RRv-%(htilBmfY_*-W48(X#_wT)|RJYZHCz3hf>1>6{Ku&_lh38Pk9Je*LfBmB0Ql|LjxR zJEd&ahmrz0lL#?s+vw4WK7P^u?k+D+czv0+)_8Lr8>_T9#>xe{wC;kfVt`O3%;uOj zdUS>thxB+~Z(qg!i9X(;vzd0Cbh#C^+BHqi9<46o_32fzc$+E_Z*gof=puc~s-Q+q zBC1z9^?&uQyh7JTF!|6D0-`5(k)ujvw08$3&8n!BDq(>@XvAr_PWw0wW)NwWbTX3b z8}*<6kZxSmPan?y?a%1T=hZZml{qbi$}Ca4c;1-7l`Jjso7d=rTe!A@iUHuH#cv+U z&p%Di_Ruuawr%bjm051*IX5Cr&Q{>R6E~kaK?||!{+8gLEvZ)^&>Z!nBy7dpv-KjX z>fOFPQb?m|0IXEMJ%U-T>L!x{mOA120FkQ#g8OVNA3#;T-LDc+E~K-Dy%CeILuDBu zn!Oca?};J~$G@W9UNOM%;5Dg+l^3s?-CF7SpkBqFL&7@H)WkLePOY zC?SW#;{E7v5&YgTfHgE=fJn!pv452*^1T-M^ z14To^VCr2UC72_^Wc)r6Tw(Qvz~p5!3)?|JU(X;W4VEC~BTxYt9Qk~G)?=6t%yDlU zJ_mPCJ_W;iAmxWL_r;7O0#fuSwgE;1U=37Zx`i0lF3RVK0J6``TST^k{GSv^FtOJ@ z3KtDg)BvrRN6F&*c}zUwWVk=jf2vbu#VC=iI=(d%wSh!U%uaOgSRe1=`W7u#s2NvQ z@$Pjxo$8&(bToz4=PQ*-{Ov|7Q)UvybcX3107ey-7ci=Or-4_nBWg2PHC1_OQeEA| z#saD#a|i;ERgTZBc>nngra(A)QqpnC7nbqHrSaR>>5VJ2vWSXN5o%J)w(L5sIbGYJ ziZH6MFv6swk=Z{{?w$xK+OmnF6Pji0p5Tke^6?#den4#ob;QDnwar|*)(y5R3|}U; z)BvPP$F*GE;2++i?_9^~1OR3kPY&_huk^#OuzO6MK%>s1EBL`a3a6AZWlmUK=Ih&h z^D-{3VReD31QqO`$i3(C)l=Fzq_a6F107`n6Dw!Q1Y$xLXr{zz^w1y#g+?xlNeck1 zoIiW4|HEIUKmUOL%?JF0xAYfZbRU1EyGLj`-%T#JgaFDyvktSVzSx&99||QNRWzzG zs!>~6Sf)DZ{t2EP;%p8Dolf=eL>}+rSD#7O%FYorok(uG+(28&t>$c@>M-;#hGo4G zm6`3ONv*__#O5zhC3sj4yS=AveRXm_@d&4+8rlkMWkm*zDOV-|GQhFBgL-wD1R^f` zD-oDcRk|>e8|(F7{D9uRrgxq-|IeTC-51qN&}FE&)(Ga?vvin{66&Oji+JM-{pd~H z+QcM5fwPQ{p2^>ROpkVG)@W`!$#a!y?&cQvuhJ>9NGIxjzI-yZGY}7ml9l_kI#EK7 z>8t~dnU((RGo%K9IMh}ch=N`zXk&Q_dufP^s*~Uh;47$+bAe36Q;ha*FZWv+rWJ^6R!z<4+%qie_7v9**@wN`t z44?CSmLUNaY7G#aMpZ`<{R8*s+i8aC!yi&UM;HJU3WlIm;*ki6$QnLS4>LT1$7+Dq zL}TVL(}a0KX_Qi((zvSX#8u+NiBqDKsA5=XikW5Xz};brsGQC8*>3gXKsOe#SYe^U z8(U~QN{k23add`xbnlAw=Fexb{;D{g;b@9hP%)M!7*&1AAj<|JRVI*XVr(qa zJmV|_^Q;WijCt1MGc=9UbNw42kSH;#Buh2DcccE{Tex+VCbb?-_46mXe<-Z!dpGII zsw!yA)s=N*L82%O+P@s1UjT{1K2-&fmDU%ryg+R$vnCy!L1FF8h*+~w@kkV}1=%|R zI3bbNm29oi_uruJ-N5>y0@MngALHW(^85R=cT72Z!Jh*92O1V$X^ND&9oPKEwd#Yn z=#6cxFJM%826G~`Tl~f)e7UV3eWmxG($OgtkhX{s0+EV|3C{#Dw?H7)0LXnW2Pd7O zq*|S{`Db^V&z{$R^d|rGJM`cEsQ#0;<e59hX26{b)`!aT;EPVeiOGZdE)O}@cFL% z-N*FRQ%tAYwr%cOk$LXsIX9wB_Od^nTFoDHqHQ$)^6qJa|15yYJpfQG?Ybf^2;`M# zRA62?>*EXRvjtS0otEOZ6U}ghTH=dJeIe)dLyp^TvxL88*jT_P-}R3~=b6IkOEd=z zd)m#02;)I~S>ftcT>u*!|p|hf2i$ws&ZHF5AoXkfkON|=@ofQ?iiUP7Y zMmLU}l!)B9fvMmZSMrYDLtUdqr}UDfxG(xhfgts%JSlO+UfHy<`>}nV-Rd3EFvW1O z$0LLa*Zyw(faCO67Qi=uyfOg3vE#o0^8dgW$p0iNJ2Bu!Y&ZY~2NtxA{@?MJ{cS;t zvA_HpREli&+yTM?VVVsAa5YG-fb--v{<2v9o3|@=3_UDj<5H0#h$c=Wcfps(D-RX& zZuk@-jR(#P8h~IMTM8DO`^f?`1w$JpfJ~whgFJKBJ`=YLdbdjmX=UPpfbu3=)DPJQ z;+nWv3*?|Y1Y!tW_SgxIMWi4DA|9t|!o0w|$Z3+&I8{|ujYoA=ThV{^N=}JD2`TV8SwDbe9dk9YR8{Vj zj;HCY!6bnRYh%2535z3at>eLt9-N?QpaKKI2F4_o3>5Pg$7g6ejA|^5Fs{K2&ckxD z#87685^t?xYZ)UZ0=247j`iVlEG_W6m$em4XOSA~3)TSxSgT4dEL4B`UH-H0qRaZl zqvn$b`f!JKk7eHI)s6J}Wn5YXfRt!~(J7!1!L-pfqiHek&}PjUM5rns>OzfiMRigl z)Qs&FdgH1-dZDL{SN>E5xgrlB8WyMlXDilTSGvB+-+hC=|2npo)FQ+WXZYfoeENuX zPbrr|>N;G4=%s+Kj652p_ik4Is~^%E7qnu67i3Zbm~@or(lQoCw7jSbBl+SX?H-Yc z)iO%TD!KFl0;0D6z;v_KN#UuBZDzj|WML6{ahU(zZ}LYE(of#uAKv0WeS7?qH}%;u zo*n9o1KB&)<1?MM+O(28EBUH`a^i)GmKLg&1zH@@LPevR4yW>)FY#d4^SYyNfe5K8 zM6yT=Z6S@-{1NN*t67m17X4p>e3Vpj2t-v7d4dO7D8yi9?Hxs}#tuB@?_8;6e zR?8p$Z-N=aF*aNFu5MtZjP2pX>#*5P zLo+}^{}KqfiEWwR|deplw(L)0tgZyFbn}v zSW%st=!s{*d2tSa#&yf#KlTaChL)ZR%I|{=>(H$MI=7L;oh#}|-a|Rmx zwBMoFC)%TR8#^H!jm5d>SJ2=M!a5mbFgw_`@0!N;^Z@_C#utRWs**s{K+X_g zug2MMe>c`5nZj;z;a8?^IG=U8GwrUHmKNft^gw5 zwC7^Yy0GYNshGUPNg2606o8s|L^L5@B3@)3b6tXWYXz4t;K~}UPC$%t!o~`(u4uJSop>D^Q7;nf6@=9N zCuUwUp{itgiQc_IKX?P%E1H-TIP37$u72{6c8;mbUep7<%{tt~zWz_t-RzzD<$j;6dkM ziU;}!S?*I|Ok(>>Z{903z?1!@DzVRvae%0Zkhq7%80X{?w{ZW=S|uHiclYbFOl{|39;E#qA%dm)GlMIwN4mB~Z@-RruV8fq5VGRw6u$KoG1u&M}eZ^ zsl#x`lE%Bxs1_=!*@-Iuo<`Z993LrEy@jy#B0zv_(SZ(%R2IJ$xi7-kX{;m<+=-`f zH6y+*sHkQ27%&=o1A>(CmE$2mt`tjs9JK^5e_&{`ge==%mQ_>g?(`VI)nak;t2YoR zGQar$U7NU>;r(!;?TFd%!|fa~x&H)*V7jq4W;H;BPf>Bpy4MLP25^ictiAI8-Z$b# z0uUWGhZbIM>J0ySb$sK;D+A!$IeBV_mx<~5`Y`Kz1Y=c z3e1#N5AYF)HPE*Sj<|`Q-*~}0xD>N%_5f80tS%%61bt7axIpVkH638Oz|j8ho;D~0 zb#c{SAWrw_#!!5&IW<5(F{$D2M3HLhoCC;P#<;IS#MHcKiQ^AfW*HyFL<}ZH)vIM6KgIchpN*W%=BP_S_BFRo|f2<9nX48eOD z5QvE?ri!qbc%`bwb;b20tt_Xt6ZQ#m=6+>Pfg)|N1; zFsZd7*Cd5VWdbWE6|XO1!T_*0(_emx5AUYqQ<={3{7}~yv42EXveTxIyen15Qr)^l z@88yc_`Lad|A5`&Q5s8PzO>HYyG0k*wQ2M>cQr#rFl}hoV%C_6LQO{3SrHp&(hT%g zNyj5y8PSz3YG1?6OIR6!36qK@Bdsem9a5yhX)FPVr$A^VR3z5L3EjFvKX@Hi*HAMl zFzxVQS3mqpAMNw3Lt#X1ixWZfd9`Wpnl)9`jcs~;Qxl;Py>}!ZeWg!#kp-)h^#1Gg z-W6T0kO<2oT-)Tst9kE0&Su0bNGFRNRZ(;JuQ`X)A3XlaC%1(!wY6g}pxHZ7hX>fx#G9^>#tPo{KqhUZ6C z%E;+vsAY&|kq*dKs9v>=Xmtx%_X7N)ksIpPNyJQqaB)_;kilMOIp$Km~b4 zk|+j~6!J~8YKllUGYrJa@_V2Q1s0RxMn)o3gevLwTJ^8qrT4C(?d0!2>3;EfI%>$` z{$WBSs1+tqA`&D9k*0*D1-f;GzWX{ZE_r#^7gPM|uKw;0_Kwju(zSERGnKjIM%03) zGCarEPkk6 zRHAuh`li2jcpeOCRJ3$)sakf(K-EUfy$Mi}J{Gm0|Ja}*RMj@Bh8v-jv5)iJ;v1lG zYq@~PCn$Puz^{2QC&eWk{r5D-c~Z|WL@qaA&q@RR6r#~n{bJpkevF0JD}i3k2DL~; zgHoP8b8(5n+6AnqvRz&I`g;jO$Oh^Gu;pER?eHYPmyUr58N9hy$2WYuG6254L;Jt~ z30ojQWZ487FxY8noKyHz40M+-!QR7b?2veLpoE{X@C-c(?aqXfEQ}y!%zde$qCkjZ zG{Gf=Ni*=OhPHF7AjkwAwgDlahY|zHJD8e2$8$2$n2+l_-S`mcJpfO)u znq0-4I1+LFq6>ZLMP=Mb`jA zm8hyPsvP%w{Er12FbJp^b%nY@N+3cbXy6!t`V~Qwk(RXER}8<+UU?_o00uO7&QXF6>mWNOU~4^`hO>QNl9SKN0z5=a9g z-B_WE7qD3Snl16%Opq{DeXXQW!-k_-CpE5a()V7&^$m=Y3aIJuXkY&E4!(TMr&DxN zDx*Z`l-GSnA?%32svwMO+FZp_1p*G{`NMno>=B>MkUM#fJgU;A4NNN31Xe87xV*vJ z8{Oj_I-655Rb2OnB~R*bCwM?}UL;~>b}Ji-E*n5E3sxDwuZ=QXvu{D2W=EE+SdcXzs}3{*Ar% z+BH%CM-ly8jXoCfy6M_WFA7={VGQ`Yc3D*RqatKMU?s=%!MS<`Q4ka|NJ}cB&dmWW zq<6P(;wfa_g{mm{Qg1ri_g=}DL0+>qc8|<-?RNlij=I16vks*zsTQv z1D98j2&%d})qlLNzy6e-?_fTacHZUOK;}8mCAXT}>^&2_WNQ2n5&xc`kwrRaR`FW? zDpteCQ+`F%BJwRVOI4$vG)nP)sCh*q8psQC455ekK$zh5*azip9GVeH)GG1D9Xd8%%)f!s<#6qi#t5O6)^7cZI_p{Dvf z#2_MI-&`-QiF{7T>%NxBc-itQ){K@bqQ7Unt8+(Dy94&{)$xrSuMB{1|M)ukCs#`a z;l-ZtI2Mn1p@NzvAZ6C!W)5L6xRC?R03awJ)!C{ZccN^>;#r`Q6{oP2yut1^kVWTr zunUS}2Dm*F`gC{~H(+{)V2EK3QOCiQ>F}X~j{%hn1_X-f;(%Z#27CSht;~I5^QNk!;Qe#|Wslw72Ym0Pob<_a&KnTCK zI!>qv;|eQ_nAA9(LCX8^m0|oZ1A5YQpFT*>_c3p*0~B^ou(N}MGaB^lv1w{5EWZCX zrnA|<|2glSa$Sqe((O0tgWCY)S0Bp#XWR-KSgR^Gbu7ZgqZM4^!*cHcq(rt4vtTyY zvpIF*Q#9|;bsz;ZR1nD>v0`Gw5LwlKTwJAhuH)u5mPV?edB)R2`R!f#{eyILhAcx! z-Tz6R6afHTHg5?LQI*KvBLQuvr)S)C1ceBR%B(??BRz*OVp^JDaX}NS#}tRBvV`q9 z3*b=4Gf9|gqEr!0Dl9F~WP+M?-stg}o=&N=7!@+)Y~d6PL7t=Oa5~jTdpb(s%Hjuo zCRLG@RH zVh!Z5ofHv*4zq%4wyUuhKP|R=fwbptOiaXyDG_Q$Rq5&?|L7+D=qARM-hI~o{4;uV zNb_vPZ3{G0Tc5;WqGU{ahEk1sdfBgkN+QHdW+NKkot2UZj z&7E4kf60(e>;|Q!vRCpEPomIlaWcW{i%SSUCu}Hh9ixO&l+z~P>;Vw6`&|)^5oa($ zdyvHzNjRKChLh!eM0uZHi)vAQLsi(jbi!&=5EvvPV*16q_YJgP(Te1;gJrdF888aV z69pjvYa(VrVt%!ATC1ROGf2F%ClqRVYbCKk!<`=9B-1hq&m1F$Mb$zSbeH7xNSUQs>$XJy&Kq>=sy=?+-FZN}Cn*!4 zW_Usc<})K!iSoPVwV=Y>GsJKRL);~ViU1%hj;A=AdeIGvOkY#EVMe%fph~*3M6X}L zn^&;901&kqd#CcrL;3yvbZ}}R9}W~HmLn+`xvuE?7Ju&+nnr&6g}yi>WlD(@dUA$o zN28HWYMPA2KuO}fI7yoqur$)-t|k)IStBQ>+P2673#yOc4a9mLfMZ*ql!y}(jcVFn zr|-Xox36GnM6))1`BXo=D-U1jSwjLce;FBVE0h?yLk6dWu7fuHu0=%TghU8{3jnAp ztx~Ql?V4^TqFFPk=cl5B^ohUXI5m5#STfGpUuGya*XYN$u{_b;)BLMD`0`mgnNinz z^XcIr%}llK(J5gx((MiU;7z=D1&b9Fm}Y$bEdTloeDwsUr_#>5wrimC+|5;@@KC?zE8I5wQYPOnZcj{WSh`5uBhsT#gNcp7;fToCb33MFS@t7c2@+M5(stKmAw`^jtK3)Ci)N>c5cu^lb;Ae4= zIpmYvll1mnQ7FdoAw}d8k&@RFM{xf{;lALgBSi2<2c9%bAZS!WB2p_2#GIq<$NJ=eMm6dx6hhER(-sFO*gwT-gR=&+nKkXwX@hx#d5gxTbK zll_x4%h)}oy(35l0Z5oOdhaosjt4KyzXTn>b`>vno4Zfy(TG>a>E;bAF656s%P$U7 zR#xNrML7|Nrlb^zTL)z00QW&0MiA+E#A{0)|8v&j`96-%JS@IMyIQFq3kR~F6Jv2g z*S7HX6>P6y%xD$IbN%Xh{^ViWIq|YT#SASrE|JzuZ(QR4?kDvA6*L`hF34a17Q1Iq zA`#s^q`fn&j%cw?x31)ABPXX?r*w6LzjGa%V}B!Ab$6;?JZ>L8!`VElu?+2H6eaH~ zir7+X5;Ikd1zghcaBpYQ8DYZpaJ?ShsQ%cNOAM3meZHuO(~ zL9Ib0mWpuY0>5#UHrHrrR6)^p^@A79&p(_!-V;Fc z3z65-Ak890{R}ix*=JO)AiYXJ$YB!%>^oG6NQubFeN}~!$IJm_l|Wxs{1mDLVLmc! z7x;X72xmCAjbxH2a%7%z({EOHN`u()M)iowpd~)Y?F2V@GzhQIl^#@V-{s-wy@w@! ztpzh6Y;D(fi2oHEDP~uDOS{Z7zIOc6pT0W&>mRQSfN$v-Y<_*&1~8=)3_YD!4S|3i z0Fnn#f}upnY8-$QrCv`jQgeDHA;SI3vX!ukYs^k5PwJN8Wm5h$6UCi_7X6L8#pF}z|QkiP|YsX!vzkr zK(y5Vi6lc(AW_Kz<9^;j#3@xZ*CVb*iIh!sTcmH7^>8X5KV+Tg2QA&)rlndfwgf;Y zI6CXTcp~?nr=uCoT51~1J9L>WE=9s#_}UUL69)jfm}{Vh^lXl!Q|u&pvZs?VUs%A! zHQd<3wM}fUA~CHl@P(B;sWELdN^KbWpn29uJNnTR{rx>YIHqEFb{TFh*lTtrrJ_VB zfAyGD#$2Tdr`2V2ZT|8(PUn?^DQTBAIil*LRD0i$Y1Nml3Nz8bBy~kwYjkY`lNzen zJ=VuBa5lI32NRIM04I>;cQS}kvo4NlYaO?*;>HCm)eyzJ!}G&@_bENwC&zrT1c#GM z&{4&2Y}31!krEb|e*89n@l5ycA}d6&dx)=|;o>sJiQc`KE-m47hMKXyL>Cs+lDy}F zom2e&LHoNe<;h;vWQf(rw6I}>NOEM30AI{j-jD#+g)wel#rBFaA&WlV)1Q4xzq^mU z6K%wcvJ~`9z7JGfV%gFLBRr98X^{#*NfY?(>-2AaLa$vwBIJy-Il7GHar)$L`*5cN zIxkEq&i#A*j|z}Qq8>cda3_(9n46=_XmHX63K`sCE$`bR`Ol>-QcQ@OD%Nnrq^9iZ!j$rI^YEd8lyoslp>sX=xar7s1&^gFfRU$!GfC3xt*m<0v*K<9-adFMaB zk_SCdk!N&1%O^r;BGS=53>;s!H2PiLmk+UOMg2Gt04$I^m4KOYouJjr1BN&Ws>Jyf z3#JdRg-LJ=btnV!I}##16n*p*^=MWDs%QXm48l29sLgzVmv!;Hwud~nT;26(t z;k~PLaS3(svf~ktC%Kh;I8AL!hO-^|2l{sdXCUmgIHaiZYV8Yd5-|$FWJa@_6K2BhEx?c*ZA#gxV(y*a4^@qPxZwS z3p^-Dqy3gq{+3i-*Sb8Rtrgt3i0d0zUqD4@1Sd0jekjimt9ct;!@j2fY?HNFp6>C3 zJ-T%fqI&m*zSuW1fF$GSR6l)ywPkwiA{HuIT7|5F5!nce(+-ah_0xylhj;bii)z}i z)np+rhNuxz27h#NX~02B6l_p=cp5~zJJ098xI2Edm)b7!7K-h34haO(5M?H^l$S8m z19K69TET~R_1B-{XeNgza(broSw1+P?jCkoJ7@>Vga}&~1uTkPBAnf)OvR~d1ZoU9 zRQwOYUk+uan_Gjuh;zS+W$qhLDFXZy12?8oH03+Kx!o5+%;3bRYFS;RAHG5FTmwPB zdXfL(bG^UI(;2LVF_|}l&3#0PQ76y8uahn>(>pilM>lb02^FDJ?9BAH5A*Nt((WPV zjb_h~Zd6+PFJgX5c#oC#547!x?&5V`IG!a6@{n`*aPyoB`0gi}q8zH(2}L?s;&e=4 zN#)fN7Za;RL#~uspRqoCVJf16g%)K~q&mTC4H<*Pakbu_WspRo*1!;OTZ>}w!Kp+} zLNv*-^%D}Xzhmek?~cnjpO@4>Tv-kjS{UHIv`*iwQ;TknORIm6$|VTq@RH(ujU~?H z#Z~(h1&W#;fdV*QR$Q=O=0(593MR9TC?w-R2Qv^a+BIHL>it;*2LN8)RdtOam7D1;gKrQn=8NzPVUeBcMLIsmyC;O8=bdak1EXbK2V#9Wkq zZ0Ha-CYC9rg|%w|`T`5Vw#GGGM$+J3e#7(VAD-|Oe`1h=gaSg;aZB)O7TDQ)eNDtg zF&%T+yQ;F-+$e|^syb*%5TdJjV035oJ)m^p$JY>k8Z%3SUTVQDky|wOkftREg`9&^ z(WueJsvc&HFeU&gV9r z0;H^92{*kp!SHrzG5KU9w1PGEUQuh>Umir1{6#SbWQ%%7xZYK70?a>63D%$+6eDl$F)sbn_yg{VgT9+4o>yap4@pV_nzX# zVKtjmC()qQiQCdEx1cMwv=hfoL`tNjXDxP5kiBS9;;L3oAY#@|!zxxPWP{5uvfO9| zyx)eIz@D?O1gL=KoqqBVpWa6&XgahRSs;?T7P-?bQM@t=0+o6-hGpHe*GKhOAWE<% z_WCV=+vG}NGzaUrkCw(@xjEHR1eb4HB9}{uh!;gFn9Ajktu`VhhCB37*I1n3_Eq}P zTbNY(a995G$NKqWK02eeL(au4GE_;{nVTz6g;eR%B5q%&AHRjy)=@D8IO*{D3;FFG zda_SVD{by_?liZO8<9q(&Dt5kFA_NbDk@#JLbz512z?DD)eJS#J=;2ofHC(8sAiu= z0MQ2^h+YXH5LSWy|JnPqW;wDXJrMjpJ?8Fr1upg-u}5U&R;(&k6?@p6ZuUx%ei)H{ znuqyu^8;q)VMJPl)7|VAa=OW4u@+V?k+DZ05C8%|V7aSbceA5952||1ZbVk~JTNl( z083=x!mqj6v18|`e){Pql%XZxTDG`qY!*YDdi=fRoLkI!hN~I`ta)LC(ZXaP{4X8% z4cd4JS_Ea8HDLiD`zvSXthNn;U(s)ntfKJ!sskTf@steGAost&!J_H^1n zY;H47ySa}{VXA2vm4e3swX3LboNP->&DT(Oqfs^L?C}{hnhw6bwOuQE z>9mKwoMF)vwy!jez4<}0q{c|_V@jB6a*uP$y)9%>BY;sIIL^YKO`)2G;EOj92kqxU?Rm@LQ@;cl;Gm@^RZoD;{Xf@#vV$hb2HCNmMo=Cd(csXP4~2= zfsq0&Vi1$m`7JZbq-5eQl7UQT&vXf{ofM1=N{Ap;4S1f@(#U>yvT zpNWYmVQRH{A( zVB7J*E;NTvO#kSzYu~WRvgYW)fO^@3+}XKNb101M&QfgN@z$RFpMJy(+xF=B@IU{J z{qidwoS+}Z$`BIklVT{DMk2J$1>U&HKY9zV?O`D>U{!JdrTyx2e*J{2wf5DE^!H|K zv);Vbmqx<`Q!k(DF@f58`nFj7R?$CF0yKU_cejnJ#nOG6GATBGHm`R7bMi&uS82K| zf~hPeJTi+PWr3XX4oYAG?9nnPDl;auI_+3S)mZ9Ugyoy3UEHotMH}~L8CQCmyS`c z5J}@{a{u;R&D)qXQ(}m;T1F}4o{AP3i0Nw@cS2wS!l3 z@8F1S^V>je1Lt5m!p~rxpd2ULX(R^HJKwnH6m5*sApin{hK-Mux#Ne-BHrN#O~if% z+@Zzy~eqfvDi0OCG z;nI^0+#3uih-grk;SwCxG$)}AC0<~ZqHu>v9So?ZRf>?6sE|QyUF%YYvK~yqLFe6^ z&jwwuxLWe`ZT$EK&u^KKdz<*l?QVCWAKbTl-`K%1R|ZqiP%~P5^2(5*CsiFyoZ z1fK~^jiN=$-fnmOBDZD+a8MjCb$QD55dJ3NxO(E-p<6=Pa1z7OmYT2Kh)qa%=YO}? zIyF!lRA8<{P9is)Tq^?i11uJD>pFk@IDi}?4do~Cj}cbbOno9@cp}+IG2C6 z=h&Q~E0`DfRIC)WvWSt`UhvMP?)kp$AKJ6S$g3WAPj1EdL1pmVR}fQR0zhesTCrYX zf8S;Wl1S7{hKhb*-&-Gb<-G#CMM3n8nh5hAgl8T4EJkHs$5R}te(@L|Kf)is2@)4~ zd1X&Odm!2%-r@MEf(lbWchZSaiyw-jn23GWA6s2jtwYrTwb$CK_G;cVt(x_%{*Pw)R5SHH%8Vq6 z;|k_PTicZ$zS)C0AI_`dBBVL#c2VdSDUv3b6arjsBdP^i_Y;S-lnKWWPC{0br+ z)*{CPS-{GSu*&9;^)RrMl2bJrMy{`CM&w<)@3?gH2lx3{gUh2d2_4%kyzFq$c2R@9 z?dzlDZg+A?XX#JC_<8&?86TuG$T4?3szxC=Z>{EDskB#PnYu+h`WUReuXg{l_qFk7 zYulJj+r)?Y;`2p^&J8-xre?<9b>s!leDHUl{_6M-aJ(`Aeh0^QmG_y$S9t5wI#NU9 z-xIVF@EOgLMp9JfTeAtJ{7wqb_I+!?nNtBbwK_O~8LjT}_%t?x z!Y>D+7 zJA390`U??(Q=D2AtfpNlN>)Q}TxspJO6|R7MAh|NA$o!jzt*GEa-Q*aDN9eb8QLzGGkK!sJ{9BG{PW#wGsv z4sV`EC$=2y;q&3?L7C67v4O2Qb~kZ;6X!Ouvw_Vy79HjVvw&`6jjdtUV5rr+v}>EY z#66mQml7NVa?qr=gI_01!D@VdWWV|vcdzs6ww>GH?aQ{if#r(Tw^!p2+lFpyRHU2n z>P7y+Tin}%!A{mVUSYYy@d~G>wp#Oe&99#izy6}GPJ4LFk5ya8CSU~k|u6GjWZXYZrOG}wQw&fZ7`jIgAS{; z%<9ldvA_L%`9J=pe(|JR_SO%P0&a+#5fou55TGk41+xxU_xO|7`PLQNE+Ehwo-FMb z_v$Y{)hO2qObTlG+%;IJK+j!P>}3&-yy&ORHBjmn(k0!vzH^xFq?9{=6M zKOvMd>2=edrdcGeS5p;u9>vu6kCBJV2b8QOsOG@}t&YW+^MiBAK~1rJ1}MZK823@r zfYXEHgf+SRJ@NkP_`!}>2Egy=u;2RQWsMg?<0uJ6^xu&0gsK?5<(5WA>Q9Th%TuwE&)9@m+8Smek_Lv?>86DIve2`EjSiTK1BdFJcF?|$;#s}szUizK9=E4H=4>lgU`9lmx6o1Lj))tgAU zdqqlz%>{NA*qmb_=n6^}>Oj)P?SpFeh?q2q&%88v?0f7!Q)p3gxwcOq z^4AaS+*_Cl?_RPC+xG1~YdB|``+sW1#(z%N^>07r^OwARjd!l`+Bw`jk6Gt3j_Zp3 zrTy<8)DJ%GQ7bT@M&%#a098UY;?&hKXO{G`=-0}|Pp6x&L4FG_Qo^@}v{X$b<>zQ^ zyLgin8|i@x`9h{~3v>Gj02`HHQK7-qSk1&tsB487OjqlNFZBQUuZHys&yQ!l_cyMd za^X8UcwWi>ddJ`09lZM*-oJ_Sa}ZF&i&Oj6{rXoQ@xc?WPIah5t-aZx+N-Xs^;zLZ zEph(UEcuTt)Z-3lck-i7)Y0SSS`WRtEQtp>}Ws7ENbYbif_bu>H~mLbJXa4xZ!n2 z$C~})%_5vN+=Er!zH&>-6`V4%ZCreKG*S4m)jOb%Tvn`qpJt9V{YKR}nu6KAukDxI zUlURi<1v{&3&eBQ3-IdrL627kzz=myXoEPu3yaTwJ_X@_-_Zgnnuc~{KeBj!cVZd{ zlyWZxO5j{44jQ3ohTPi$=_heMV@6T)m(NqTrIs_49Y^#eshKB?cKC@UD(Z z!EA;yvpV4PlxxQi0+q&zwx_p}*6&5G}8>6^Xn|SLsetMVJwyYx*I2`cNfI zT0Qi?*M{}2{h(vhKL`5lok1s^l_L{CP&HzEyaBKWog0%|O5=NcBWB@)gcB~|!SahB zQLmA1UAST9uOM>FgbklmI{macb3-I^>8dmv__ z$$#X2m@K!nm)Vw{-$zH07YfBKPN&%Q3?QbNdcIwb!~=<}38RqS^td4UcqH^l_=miw zK`OiE`+!EaUL;P(!{^#;oIcao%~qTKCflZph%Aw5RXxq!zWOIR1}pfz(m?J9A3Fg4<1ha|2b)CU;(Uq&o6mBO;GxMlJ_S zmimgbLmHSzlWPjE=1KKl))9l+ zKrPfBwUA;1)HnnCeqq{K$ExrZT%I60JFx1rB5oDFGJ`iWF z=Ufm3n!yvjyqypXkmjF&^!~UtSWk!4X(}Y!m*qnz-8eiG*py1Hdi~;Y{i~15g>9bO zkT-9vfAO&_`?P~WU;U7jVdlkY0iY_?FjO3$;`vMca;s`aa`*WU9}i3!^VkWiY|v`UZOs?xlNYrC=JY7W#Cb!hHV#^Ggo_tAT{|FC`-*s zdqG0Cz!ezO^D?Y6%qpqQP?&&4qFR6fQS?*Xwk#0Ae1=%xAs%mCcBN?E2ALXq66db%pTY!MwF4Hp^z>EJ_ zFzwd*{<_+7-4QsOa1!34*<$Dpe=8ZU<&?jhqh_Yo611AQ_BHK!1!;ygC?9X%LvFI) zwwVE<`BGA?q=xln5Ny$ySd|bzOp8VjP3*n&EL#iwvDAHGg>$@qGaJXX>Xeq{K8?Ej ztz6wGo+b-7?UURdW{5_5HY#OH%pDUSc1SRRV}S6u8RF+qqnfWP)Xqd70#-mZi!h_x8HfaCgypQN1GfYIB8hnl|k^s9U`MvoQY%g$ zI-krYn6|0nkz^SKZJy+GfsGX#Mv0N!k7;8>5b7Y~G4pw%L+ALKMvM~8fW}Fagou+T zh(O5n6393dYxClxZ)5fW+Sz^p@x0Q`$@BBiCO~tiN?B2 zcwBRkR80qP&{_mylsd4$DZvil@hQIi##SpneTjE(;?5=PZDX_Jn^%RVs`~i@Ia-n# zF>uDbY%^-@1x%HknHq%~b8Ib82m-y@{;{ssWpjZG=dfDJtxMRM*-S8-W4(${R+tHG zXG`9^&7Z%4tLOOgME?D(E_>~d2%Q(M~VaGqa_ZGak8@00mFd4Vo>ze z21TvViec#2r+n)MW;5Gg+P5z-RNsDBuI-D5IJb$P+{X4CS9kf-*K9plRqh{wz~I|Y zqEaE7!;fv<$5Tv=oQCyt;Uy%q+}+VRtDVul8p}SHqKq$e^!b@7D|oonUw(nTo$jCf zn0K$0tC#Ax$BnX7fz69`9So%!tim)bMelwOE@nL1#f{umr&IhFk%+MzirdZqJ-?cPvgKtrMye zMnm-}GDRJV&|Q$72+WE|Ht-;eP_pI1ti#3gc<(OWybKThAIu&d>o2~vPan$B5<@lB zYTCoA{#$R>tM-omRR`0^=ryR>psJIaKhaL1*#pR$Ol};u%0HRyn^9#>@cT5zq-)0F zq&y-mG8-~zCobz`JV;HS>@)>80d`mm);?@8sN<3!RYL@HB~Fd=r!pQXjRG|Lt89Tc z(NHX1O|j(YUIha{A!_WKV9Mpp@UjG4vma8@c(jkU{99z%=~VYYDv{<@p2yAXu7C#N zTR3Yxj0N!@=s(x6JKwxS22EiSPV|v`%S{K1;=(SM<72No z)=qMcBT32or?5t}ZJLM!5S|!haI-KIfyQdrheeS2UbtM>$kY8w|nsPiivc>qrdM zV1NbxG*w(NpR`e&VtSf|TUgukg`eKRtqa(k@%3v`p+nU#9?I#O zW?l_C{qk)da=BY7Estew3uivZViq&D8tiz*tg`fI_r4l z5`X$S-@lHHV)KG?yVlJqosqb>$DhB!Ke&w^f`2c{O0*w@3ZI`B1huI@pJ^=w5r)jL{%hP2Ban5+Lzdwh#IwGTbq32Cf>P$y}1!ovuCIHUa`2YIGg60B7ldhO zlj5QA7-@ZGRGOZV4c2&lcs@WFsZA%0=$~k*!_5+Pozm8C{&)Nb&-^u&OM#nRRS__c zYem=tHonW0syK6m6Iilqd-@L|e8{7DQfK*=@I@X8U7G1(h}cB{CRy7v42x#50Bw=A zbOabAT3e=8@ZvuJfjZf=qhBHbB7pid z6S?&T3JKGEpuyISkj;fyV6KGzXxB_~F3J%bytTqa(kWCR%nau7DWLA|932}7&~@g; zo_UI#o5?#L=Yj3q<|!Es16LGIv9x?J;ly-Gj*62@G)e8D|9OG|EE1igBSRp5nd^bD z459Wk$^k0I0oI!pXb%x;F=MYlrJiDVVyA1WLWtWJu)W}0*X8829xwIbvr_v6i@Dy~ zyo~8^;Y!bU1Hjl3^Q?%kYJCq8?ksrqTz4egUVxBuJGQfdqf-LWMs#bV+_}m(E@Qik zHC6}0SZG4IzQ@}aFc(`_92}#sjHYS^03sPBKUrj9l&DETN88!to$LJ3UEaEk`3ytF z^CNrsExvwi&knF!(+t(Cp^VQx-3ASr8${<~8ymVYmkV3v&1<$?tsg%ZgKaMWPYeK5 z>&xTyufCWsioACdn}Rnlm!ThqTJJq62TH9GbD|As;EWT{pC^&P*#(+oB9iJ>ZQ;?# zO?zhXHr^o^%F$d$GgEzyDr+rIUJU>1-*i{b>(`IHzeB(S5#G5X|Ll)AR6O3tlNa{* zC0-oz;M9&z>dDfUD?ROtf=Xrtx)Ct7LV&ie3J(i0b;-vR2&RJ8*&{_&`z^x6Z=nz^ zOv0bS{bQa~8e~h`Rai;if=g|0sjUzX#bWeW zGfDwWC_loe1$vCbO7pJC&D2lU&R?L0OLaI?t5Aak%D?Qbp3A!MEjDb6JM&QUXK zXHVKzbo}OH_zoUr{@{FaIQi-5f(FjY@w{OVQ>4u6$ zBFz0&JIQSg5cxZjyvndOqXtWfkoTQf3t?l#kVoC^3d(}w86%@Y&#_%9Hr=b^KZfI#0q{FNEM-dr z{QmKT%oqdlS`522KWgJ6OwD7WgDZ&w%Ncx`TRg5CVlNamM9sZs)5mnB`G#@ z5I5nirv^#Ze2B0mSEb3zPfQ0SsBN+Op$nTxMxrpJ)EIG0ifhYrQmVVkZ_0Rd`vTK) zr)Dtm(4Z)};KaOI<3)(c1SujsAXEn@_r=7v5SDxeA*OHx2%9k0bygV7&42E6g7iMaCVSbHC{%YQ44$^I#E+G z3`VjN1eVID&+!qlxxn@Umv*r^=UX?+)BWM_MEc4s0N;2Y!r`U@j1`oYpJ|rqtQGyx zayVE7GvUU}1XhHb3kb2Z!L1D|0hi~DXJE#?As7h5-W341qMAj7> zGi(;Tb-naDRMoFkj==RgsM5x@#a?Gq>1p}LKSs_nV=f%TInise567f}?-&h;wc~y= z2!$DHG+CJdv<$EZ&+Ef)WvE2g@Rh9V@T)JoYZv4nyoooj;qGM|E^)NN!IJw&@_b*P zy{!AkJn8MUVlb?$Rn@-7dZ;T0hyqi!QDQXe*eyB0JiRn5xnTT#@LudCiq()%oy2O; zBiDRNveapSOlt;2Mzwe*d6RsZP8k);kVvobH>zMKW0@AqBDq1BQ#>c%cV8*dhnQx9 z65)I)@2t=+oRjzO;El`JDgd~u_Qg~C>yP;LV=Pat?`s`A?tfM5N_DN(3;$P`H&Gj4 zt!`3{zQ|z-WQ$+b7Sj*Z5U)-}Spo^{l!Y0qW`8NCA1BrW*tJm2ifAeB_ZC4)c1(%OS|(p zDQF6Ps*A&Jo>iFS~R|dfE z=a?>kAkcg0v)nu zfx#VQ5H*uA%u6%rnILV_$VkZ%qK7$vWZRgILI98`9PCmiC~F^eI7egh+Q>7`@(d@} z^BrPH)vkaNs!SMKyU2G>4O;HAuJ<{6N72eG(Iv9;uW;2qV7@{9T^Vs z&E<0T_qEA)GuxPH740G=T;5VCbXA!Y12;2lSdZdVm zbwQtFyW`u}W@_5e?mxu=xawVrbMQu^&6bP((Re}-R;?-Klr;V_Eh{j_cMy2(On{(Y zBR?X;KWk}r<*{x|ijr?#$^{H>XWIc-)*%`yPKrc|v=_RENGg1{vJ z5qE!?B=ccy?*@NNb92<}uzIz)#x`n+Bc){F9hxRw0+NTeAe1f5B9R{sy)s^YmA^~7P#QaoKrPUgR zJ8R~CXikpT;nB30;Ht*Zl7Oo(kD6feCv`|0znE?-AYyp3s|km|0e#&cV$7uk;wp|naF3}BIuaRXw*AG)IH1T*3lYC3n6r+JHHz- zH>L0!^VL*8Qw6uR+$@{PH*;e(pr7$Q!3R#YEWf`;kk@?$^?x77D+A#7aE#nS{%r}) z0}hN9x+`NPsg_wu@KA0y6(+?l42;e1`q8zb<#m9hv|YP3n;`jeG4xNQ@T zlo8Z5s=(WwWZT8|oDG6RVnckfA(c@-PX5lQ+Dz4DLN$!}0E9siJ#jU8akrXED)>?C zOz?f`B=K4BX~}s568bw#WQyQ3Mn*F|8W)1mc8VEJfp6x$MJ=rr=P6^JLNKT4AgM7X zP5@(sQMy_}A!!u%rql`>Rw{Wide2&}9&?srtJzjUti+ z`ihfNJb8hypX2%^Y<4yiUOq1uFWA>Fv94a*Ct1{Z{Inl)t;dV^E|tckC7!;-@&>y( z79Fo%;JF#(~Gw+#SP!>VF6gwEgEz}_~BKn*8roUG!z zMKEMCoaKr%qx%^)7U*VJEU>Ef@xA(+FS)ZJWoFA2*K3%euOP6PTPK)%$^T7U+U3O^ zT-f2xCKfX;W|(Ci&_S`Tw(4=Z!rmN0wPcNb5Ym#+rvswfc|isf*q-CvM`SMu*?Z@`%|~$P6f|dXRc1U}5HZ$npzwqoL=yvuK+L>Yugt*S2O*f~= z^z(SeMM7guX3S6xMic|aI&7oy%)F)`-hEg#2s>v~YokUpZ6>xgC6ik^HC+@-%`e6p zaS0u<{~7nm*um!aZ@w(o{NuXH1U5Q#gK(8t_{soKRh#32-pjmMBEaaRZGQMMSktGm zO=`2HHFRz;blR?y?b?$|fZN^8XbCdvw;=uRqko?H>(%kY9j^?4-~SOVPs^Vt5$*xf zfFu_tzXihRpFjl!*v%SsO@J~mZfMOjj=?bUr;*xd)Rd)RpP21CkUEWrQAk-!q#KhE zCSt%vR?=Y2>~U5-pL(K56ZB`KL3+{8+?kpM*Cc{q{KKH4{Ra;`O5E?RgJ2JZl2a8B zj4q&wl+qXlGSahc$!UxjEiRkh|$v=3Mmu#rba3fF;&IM3j4=6U5C<~cih~tXyMed zJA4EdMhV9Ck<;ax2RvEp!>9864tFkKCb)hQJNix~GV$}m+VE}O!IE3dMwt4Qwm`wf#e!KDX5{nA+CneD4l7 zHf*^vfQuO}?Be1M&u!t{CU!Tuvx)6ZY|St$5MWSSuJQZ`N2hjpV#`w;uWY%})3xqx z&i~0zc>P>Pp7^RwdvDy#2|z4YT@3<&yK}sGg*#i^-n0+z+tZg^tpTuBK+J<$bduRT zuFo_O+P+R3BXeXU;GnU%5^KMeKc|1_iQBH`wJSR7%JwD~i&DBUCi;O|Q3uot$!bfM z1g@F%6;EF1pC94N$MUn+@XlRc-9;%FDpmtnSvuP&=maz2V0QFuczG}kgC^W$%Aw+w zdMZ#v6;+KeF&05p4(2Q;mGD?}-ze2a0fljGBbZT`P{yvoDGzc^&+LV%xI=X6@GVs& z#8e*MF3jq^xCEFXK(WEB`gF0PAfipqQCqCPxd(s z9^ccOtyOziZ@Si6VYPApFa^8{P(?QOYISwYYA{OqNlE}qK&c=yX#t2%UL*Pks(R?@ zvZ!Ca1bBS*Z+z0d&TJ8u`a$%8O}etQy2-D)<$!c4B6?Gcb`p!6ZV-ZS#iIx-HT{T;6ifFJCbXpHG$`zgZ%Z${GqHW8WfHb9I-i;%1f#4J99$uRt@ z$$ell&cwyd$VfIBqy1y)o_Fx;70zQ$)H9-zQ8EBfL21;dkgAsMdxNuvDNQGz2g5W* z6Whcd3%WCH!mHvNl7ScTIugOPr9zAi z0sOO;MJNz6_X$`6yL4`(eu>qP3ngb_T%<5XtyYb0A9&FR)rs#I6QMql{A~^UnazeA zsy+A?pFYHe9h{r<@|OJME}y-`?iOzEk+9`}$1icX#NZ@X^4=WBh0_7+o~9s77!IjH zv0P)-Th*lcau}}K7Bdt0Tup<58V)o5TT-ssrd~F$VrJl(mOXd5LVKh1t zp%@h8*5=}$`~m*qTiBYT0;`JS6`mgA$xA$Wj^_tBKEcqV4p6UX=0#4_Dsi;3FCXiR z1Ag)i-nxa$=dfDagU5D!qTO8Hzbikz%OdviLZg4Q4@(Hlp(M9|yKM*o7eyZtH&)y9CI z1pRcw-Q)gT4v0a(61IH-Xhm#iTi(9Qx2|J*1`vbd(SiQ*3;Xi1oUTl@W{FQH{(IG` zR=wUoEc$t=sYYuT1GIJciby|e96#VyKFw^b@Po_-_PrjaLdu7hiWciPJWXutv61H% zeEK980+X*ILf8jY_c>Q>SUpyN8ayMoxxN!(n`T#>hCXe4C-^)z$d8>zL+Ox9IeaRh41 ze~ZtYs*k!q$Oz&I_FyV5YoDV@j0x^QVhOhx*n;KU0b;O>sq?Rg8W|ytj{;{@!$f|k z^%wtcC;+dHAM$u*0Q?@0#C`c67cyBfGFT(D->``*moY&qW1_02NDYAzn}dN&dZsC_ zMDFI|qq#CetT5z*pQe$A;FxlHqefmJkY=Vvxu#3_j>I$!uQ^?6v|yWffRqJcEHu6@ zn21pTyPD7Z1VnH^-Zq4+MR0r*a3dB-Qqe!3TnCmNe;dQjtZ5RS<$?_0p8z%SSp2-A zwAo`8`pnN`Lg)d>NS{M8_Y-i-tnQEWjf9Os#v_9SgZ>ZD7MIF%vK2u1H7xQ3M4AmC zUdLg)L)?1uTJi@1rNhR;JGK(QP|^1hCImvDl6LZKw zc!DJiP}q76tyYa?W+JvRw{u&Iw{Ob(xB2E}>#N*4hs6f3?O=C~zS_N)_R-h&)i-!~ zgyjIs@CXA7Q98^zY|bz%HtRT_aX#zLZD`k((_ZI-P9ko^Uw6~IXpjkOQw0{ zqQ$_S4P4p5qJ%gY49C4ac!|%S;HxKi@(c$@wmikqHz^aytFL%|tS?XT)nm+O7*vms zhvf?I-r4-K_t+Kt2&v#)^+W(pN`&drFmd~GDAUPn3LMv5WOK~r#HfG|Z&V?g4D zu2c;pRLB>Xmjc_J!FFef*M_DWnVwY3y8p3eCZ!2Dc?;h=e%oiSj^D}g$^iIXAGxDO zV4c69P2FlVz-S{lX2J~QzMppdF~DtcP4hibc#16-{(;LhT5$$4XcsZG8utLfsJ!9L z#W2z-6O*GoP!rQFWN>QIpQ*ai>TRdVF^PX~Pn7)#C-OKvmZPGM0S6yq|k3+SGFYs5N8p*dW zV|&hSW(KS)ULND4hxXtZPY16uWJdIZ9xY3sB{0>n?$HmC-8NM86$(_tpjHhOO2JIv zO^eOU%z9NqyIHw#QLbL(<@4p-2F`Ee@-FY3$5satYP_}!0EMQ|qrN_T!DlBT8*+UY zU5AZ=u3*-o2xbMdg82-Kf>{?$Tf5S2&9FVgLeirjtA+|xMPJ=Y!D{dULlr}W_=AKL z?96d-3+EOn#H9@^ZgFR!TO0b>19^EwU1y|?MNyns)BrQoIcM54WstaYnp@uxHp36l zY*Ml@*-!%IcwPVXZ}{amym1+~FY)!OyuF8=8P3nSdj+@l@YPkj|1G|H%tue{#XgoR z=#YX4Fk>ZQ)>pF=k6*`+Zg2iy{t4f{Y@dB=|I4q2U*F@&8r5p`{S}Kpc48^#Z(P3c z^LOOJZhiW)K6%kUJGA4~`e?aYEssxEVii?={|u&35?0j!ikG8lP_A*EiCTpPX70vp zQ)A%`%z5b0q*q-aeCK+{2vD`WneDp4Kh+B>%SeRL9!Wy$6MY3c%K&hJ?9(yW&6 zj6dEX3>K|2nl5O7U2Tf}^Mo@>I&Rc>cuWT>vFz6uoPMSVJJOHd2w6C2WZP2=gqLb$zGCjvERh_WcxFdqeC%{3Bv8Bkg*_+O>pLf=fMzcCz9Y65#$^iJ`4xU}*XO4;LIde{<{~gy_6fBI= zT?qh3(jtv)0BFz)qdr3Fo!s#Bn~Xs3dt*j}^{K*IPee9}r8b5rj7Cjh_2fD7pLte` z#dL?bWmtZr;lDd|mT^aovnOOEqw-SzfHI9}$UK2y9Y&hPFiylcp0O)08Z!3aBqW30 zETxFNZyFv6{+T%g$(@3ks@PB;y`!+V7m#2XvqYzj@SS1Vc%7g2T9DD$`Do_QKO+3e z_RP#kqzoB4({1#HhCKyO$NSod(l2{k5< zL=h9Iiv4aykJ+)O2HwnxbN!J94S!a8jynBW3UdPoP%mq6g-o7fE za}?I!+$+N%T0ww1y1+b!LM=6Qd)pG`2kAMelJbDfPc_E$O75O4&!_|dRURGV(!?A{}Lv5&s`f>Jeuz|>g!Md7VW z@{`vV|LDg&zil5q(SP}?`in1cyb?2-3R-(Pjpgk)MueBn@lW3BHaEJ{e*XLfPY?9d zuUDVk*RLMh>eSX1<{>#!U5be*U<%19^^F$r#bOR@Qbq*k9}VZJP`B|zpU<@B&!Cy+ zNx}3NvG?2$AcPn@up>LLv{4Ccca!hk!P_^nyAl4x$4BpGl?V%p` zU(GVUzqRNx^Y*U)595^D^^eoxcz@||-XNgJP2>EgIg$YySCqD(`CLKGF*!2omPzNqZY4w??-ju_&Z)P;rs>OXC)-3oCRjMD z_(y%sIA0=ekP{jo*{E^yz)dx_1>9a+QVFrxEpScfJ8Rz$z~H*%tXah~f4w?>hsP@e z;CFP4ievoecg=%_dGntUnW&TfJiSD^ZUF?p5e>yB5INkT05V-E#}f9srHl29I2mu2 zQfeekkSSqft%CMI6NKOD@yA7{0v}Peq(LV;`+OmLnO{Wm97)>c!%v>Y#t@@+z0n3r z&$i!J(tqq+Aj5N;b^Y?012Myp#mzFO!oTH|A2_{lni>(Jh4gKZt>R09{(OLR2B){j z078J`;+)eDV?4~7D+wczS-$Zy0w;}i8sl5y!Am*s6Q)0ey4MPov;o`~4+gYF5!>0~ z&C9&9Yl{-=YuV$pXJFzOnTc2@b!U@rUYq^w4SDA}wq{uML5(AoUMv}<0m~)6{>Gj^ z!{!DSGf0Q3SgyFg#A?WZVnBgG?cfLpOV~L8HmHZ11pl^L<6wzum=#{XC~w@<{bQ*H zGwpj5$fa}Tog2J$0ec(h=z9z>D7>35)JBM31VykYEJPE@X4r#!OT-y zPuExvwyx+0ta@9nY`Mb88pkV~uCeN|_CEvr0sTN7n4L5NSH!vz2=Q%)7YDXp^Cx$3 zbqAebqu|a(p_rNe>Pze&2?m6D?B+*eucmAXmI93;D@GFovX)m{fX!x3elglsfJTVB z5Pa)U%}jaJ+sTnWdx4L?mbY&4z1w{68ZK_&!UlF0ymlTpF5$v1KKN80Kf|fQJYBKI z|L^Q={$Kwo?q0(4L|K~4uKl*BR=cc@Q zgEueY&1>Z!yuSI-qpSb+SI<89bp7OI8ES#L15kvfFjJRT4%aoDZf=%voUJL3nKA?c zQzz7?hkqohZb;Fq8M};eSe2}IF8X*ij{Z@ALUtCe0GD=Firu;*@889h9V?^)#{)ip zqMzL7{voWwR5c2A^=56EJJ-V=Nue5#*CXx~ej~)0Riz z{*b$AZ#41fu~cTG1lLRO{*JAzElW@nGIpsFFNHC*tX~1=oxVsgde{ zdRsZm*eo>NIx%_}n>&|k7&6k*l+%xulM>&HLU@?ciR1G&Lr4ZD59T4z6RPgHf4}ZKe0RH1SVzZrr!<^UwZc2~wb~gRyXj{9ac9=Ud zHE7J<6c50f6hQlQG6qgSc7y5}SRB`Aj=#27qZVMwizX(MvS=71uQnPz<5MTW#w2D& zx#SLkkyrT6G`7iNd-4!UmM(=fWGuT80On;wN0TPed=T~7oY7%uq+hsPcBLMntj+6@ ze0<90oI`^pu#WiTj0XsC(CP)r6bS~o-;jEE9Y&fz3V;UsXZjx!!GW1e5bS=~=j~%Hw9?hRt@5+i<>#;S z+IbYQr$_ej*Y&SH!pozg$+pI`C4bmg9#ng|@-|zsHr1jPQ>MPt496>dd0Z-3V5Ie0~$}-{HGg zu`|Pk1r}Gh=zxKzr@A^|MYJn7Gvn~`sQAf$l5fGxnC`JUX zRNsVZ?1$yI`@_ql?l<>0&hM1Ho!PA`a`lp2-JAXCPcE+O!TzsBR|QbjLa&EH@ug&t z=ts-eJVHFXeI=AiNAL3sArr*tsXqzgcJ( zcIDl>xN`}c9SE!x4-fR?hj{XmLv;#WfdS}YmGJtW-q1Hw@}me;tJUKZSkIPe2F%i> z>j<%7O83*MLA`WP1I-R*Ir2J;izC;DTgL>fA~KJsh&ap)=Yf(82@}Q5&3GgJ4U18Z zx3UDE7?Jn{up(^?H#w{W+3!-4EG2)G+O0;Y^o>)AW1`Q3MXZ;>=%Xsu4M1wOI z44P>tHR-E%Zy#=y<#9?r#+`GQ58nv2v=*4*JW28U3u$if#^0x|Z5;pTyFLT4n?HPF z{7&G)M8C(6SqQ`eSHw4%v}A6liSmw1oPis!j^F3;$^iI19Aq~Bm~I6CDe0Kx`V{F} zLSLYn{o@rfsx{h=`^82mKiS*Pb8x)YgzNBYCg0|fJa&e%X@1ib9g#-W1jd;QHuRst zPVVteKVjCoNtoX96Zi.MyVs$Rb6epI89}QqawCZWnj1;re;o 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