From 34306bcc25359f6b34166623cfd4ca28d44bbc3a Mon Sep 17 00:00:00 2001 From: duasmisha-hub <300955612+duasmisha-hub@users.noreply.github.com> Date: Wed, 15 Jul 2026 04:22:26 -0300 Subject: [PATCH 1/4] Add OneReader --- src/pt/onereader/build.gradle.kts | 17 ++ .../onereader/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 5234 bytes .../onereader/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 3450 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4312 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 14441 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 23228 bytes .../tachiyomi/extension/pt/onereader/Dto.kt | 151 ++++++++++++++++++ .../extension/pt/onereader/Filters.kt | 138 ++++++++++++++++ .../extension/pt/onereader/OneReader.kt | 132 +++++++++++++++ 9 files changed, 438 insertions(+) create mode 100644 src/pt/onereader/build.gradle.kts create mode 100644 src/pt/onereader/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/pt/onereader/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/pt/onereader/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/pt/onereader/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/pt/onereader/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/pt/onereader/src/eu/kanade/tachiyomi/extension/pt/onereader/Dto.kt create mode 100644 src/pt/onereader/src/eu/kanade/tachiyomi/extension/pt/onereader/Filters.kt create mode 100644 src/pt/onereader/src/eu/kanade/tachiyomi/extension/pt/onereader/OneReader.kt diff --git a/src/pt/onereader/build.gradle.kts b/src/pt/onereader/build.gradle.kts new file mode 100644 index 00000000000..e2b5197f863 --- /dev/null +++ b/src/pt/onereader/build.gradle.kts @@ -0,0 +1,17 @@ +import io.github.keiyoushi.gradle.api.ContentWarning + +plugins { + alias(kei.plugins.extension) +} + +keiyoushi { + name = "OneReader" + versionCode = 1 + contentWarning = ContentWarning.MIXED + libVersion = "1.4" + + source { + lang = "pt-BR" + baseUrl = "https://onereader.net" + } +} diff --git a/src/pt/onereader/res/mipmap-hdpi/ic_launcher.png b/src/pt/onereader/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..ee70ef98c5a9c5d1d5cfa32baf2a576b606e48a5 GIT binary patch literal 5234 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 literal 0 HcmV?d00001 diff --git a/src/pt/onereader/res/mipmap-xhdpi/ic_launcher.png b/src/pt/onereader/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..c7a06d809444af17c0566a7ca5b5842ca797afe0 GIT binary patch literal 4312 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 literal 0 HcmV?d00001 diff --git a/src/pt/onereader/res/mipmap-xxxhdpi/ic_launcher.png b/src/pt/onereader/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..5e5e6ebcc051949854d1b262c192db7fa830cf42 GIT binary patch literal 23228 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 literal 0 HcmV?d00001 diff --git a/src/pt/onereader/src/eu/kanade/tachiyomi/extension/pt/onereader/Dto.kt b/src/pt/onereader/src/eu/kanade/tachiyomi/extension/pt/onereader/Dto.kt new file mode 100644 index 00000000000..d9263f15590 --- /dev/null +++ b/src/pt/onereader/src/eu/kanade/tachiyomi/extension/pt/onereader/Dto.kt @@ -0,0 +1,151 @@ +package eu.kanade.tachiyomi.extension.pt.onereader + +import eu.kanade.tachiyomi.source.model.MangasPage +import eu.kanade.tachiyomi.source.model.Page +import eu.kanade.tachiyomi.source.model.SChapter +import eu.kanade.tachiyomi.source.model.SManga +import keiyoushi.utils.jsonInstance +import keiyoushi.utils.tryParse +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.builtins.ListSerializer +import kotlinx.serialization.builtins.serializer +import kotlinx.serialization.json.JsonArray +import kotlinx.serialization.json.JsonElement +import kotlinx.serialization.json.JsonNull +import kotlinx.serialization.json.JsonPrimitive +import kotlinx.serialization.json.JsonTransformingSerializer +import kotlinx.serialization.json.contentOrNull +import okhttp3.HttpUrl +import okhttp3.HttpUrl.Companion.toHttpUrl +import java.text.SimpleDateFormat +import java.util.Locale +import java.util.TimeZone + +@Serializable +internal class SearchDto( + private val data: List, + private val page: Int, + private val totalPages: Int, +) { + fun toMangasPage() = MangasPage( + data.map(MangaDto::toSManga), + page < totalPages, + ) +} + +@Serializable +internal class MangaDto( + @SerialName("manga_key") + private val mangaKey: String, + @SerialName("display_name") + private val displayName: String, + private val name: String, + @SerialName("japanese_name") + private val japaneseName: String?, + private val author: String? = null, + private val artist: String? = null, + private val synopsis: String?, + private val status: String, + private val type: String, + @SerialName("origin_country") + private val originCountry: String, + private val year: Int, + @Serializable(with = TagsSerializer::class) + private val tags: List, + @SerialName("cover_image") + private val coverImage: String, + @SerialName("publisher_name") + private val publisherName: String? = null, +) { + fun toSManga(details: Boolean = false): SManga = SManga.create().apply { + url = mangaKey + title = displayName + thumbnail_url = coverImage + author = this@MangaDto.author?.takeIf(String::isNotBlank) + artist = this@MangaDto.artist?.takeIf(String::isNotBlank) + genre = tags.takeIf(List::isNotEmpty)?.joinToString() + status = this@MangaDto.status.toStatus() + description = buildDescription() + initialized = details + } + + private fun buildDescription(): String? { + val metadata = buildList { + name.takeIf { it.isNotBlank() && !it.equals(displayName, ignoreCase = true) } + ?.let { add("Título original: $it") } + japaneseName?.takeIf { + it.isNotBlank() && + !it.equals(displayName, ignoreCase = true) && + !it.equals(name, ignoreCase = true) + }?.let { add("Título nativo: $it") } + type.takeIf(String::isNotBlank)?.let { add("Tipo: $it") } + originCountry.takeIf(String::isNotBlank)?.let { add("País: $it") } + add("Ano: $year") + publisherName?.takeIf(String::isNotBlank)?.let { add("Editora: $it") } + } + + return buildString { + synopsis?.takeIf(String::isNotBlank)?.let(::append) + if (isNotEmpty() && metadata.isNotEmpty()) append("\n\n") + append(metadata.joinToString("\n")) + }.ifBlank { null } + } +} + +@Serializable +internal class ChapterDto( + @SerialName("manga_key") + private val mangaKey: String, + @SerialName("posted_date") + private val postedDate: String, +) { + fun toSChapter(number: String, baseUrl: String): SChapter = SChapter.create().apply { + val webUrl = "$baseUrl/leitor".toHttpUrl().newBuilder() + .addQueryParameter("id", mangaKey) + .addQueryParameter("capitulo", number) + .build() + + url = webUrl.run { "$encodedPath?$encodedQuery" } + name = "Capítulo $number" + chapter_number = number.toFloatOrNull() ?: -1F + date_upload = chapterDateFormat.tryParse(postedDate) + } +} + +@Serializable +internal class PagesDto( + private val pages: List, +) { + fun toPages(apiBaseUrl: HttpUrl): List = pages.mapIndexed { index, path -> + Page( + index = index, + imageUrl = requireNotNull(apiBaseUrl.resolve(path)).toString(), + ) + } +} + +private object TagsSerializer : JsonTransformingSerializer>( + ListSerializer(String.serializer()), +) { + override fun transformDeserialize(element: JsonElement): JsonElement = when (element) { + JsonNull -> JsonArray(emptyList()) + is JsonPrimitive -> + element.contentOrNull + ?.let(jsonInstance::parseToJsonElement) + ?: element + else -> element + } +} + +private fun String.toStatus(): Int = when (trim().lowercase(Locale.ROOT)) { + "em lançamento", "lançando" -> SManga.ONGOING + "completo" -> SManga.COMPLETED + "hiatus", "hiato" -> SManga.ON_HIATUS + "cancelado" -> SManga.CANCELLED + else -> SManga.UNKNOWN +} + +private val chapterDateFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.ROOT).apply { + timeZone = TimeZone.getTimeZone("UTC") +} diff --git a/src/pt/onereader/src/eu/kanade/tachiyomi/extension/pt/onereader/Filters.kt b/src/pt/onereader/src/eu/kanade/tachiyomi/extension/pt/onereader/Filters.kt new file mode 100644 index 00000000000..f435f00ff63 --- /dev/null +++ b/src/pt/onereader/src/eu/kanade/tachiyomi/extension/pt/onereader/Filters.kt @@ -0,0 +1,138 @@ +package eu.kanade.tachiyomi.extension.pt.onereader + +import eu.kanade.tachiyomi.source.model.Filter + +internal open class SelectFilter( + name: String, + private val options: Array>, +) : Filter.Select(name, options.map { it.first }.toTypedArray()) { + fun selected(): String = options[state].second +} + +internal class OrderFilter : + SelectFilter( + "Ordenar por", + arrayOf( + "A-Z" to "az", + "Atualizados recentemente" to "recent", + ), + ) + +internal class TypeFilter : + SelectFilter( + "Tipo", + arrayOf( + "Todos" to "", + "Adulto" to "Adulto", + "Mangá" to "Manga", + "Manhua" to "Manhua", + "Manhwa" to "Manhwa", + "Shoujo" to "Shoujo", + "Webtoon" to "Webtoon", + ), + ) + +internal class StatusFilter : + SelectFilter( + "Status", + arrayOf( + "Todos" to "", + "Em lançamento" to "Em Lançamento", + "Completo" to "Completo", + "Hiato" to "Hiatus", + "Cancelado" to "Cancelado", + ), + ) + +internal class TagFilter : + SelectFilter( + "Tag", + arrayOf( + "Todas" to "", + "Ação" to "Ação", + "Adaptação" to "Adaptação", + "Adulto" to "Adulto", + "Aliens" to "Aliens", + "Animais" to "Animais", + "Artes Marciais" to "Artes Marciais", + "Aventura" to "Aventura", + "Boys' Love" to "Boys' Love", + "Brutalidade" to "Brutalidade", + "Comédia" to "Comédia", + "Cosplayer" to "Cosplayer", + "Crime" to "Crime", + "Crossdressing" to "Crossdressing", + "Culinária" to "Culinária", + "Cultivação" to "Cultivação", + "Cultivo" to "Cultivo", + "Delinquentes" to "Delinquentes", + "Demônios" to "Demônios", + "Drama" to "Drama", + "Ecchi" to "Ecchi", + "Elf" to "Elf", + "Erótica" to "Erótica", + "Escolar" to "Escolar", + "Escritório" to "Escritório", + "Esporte" to "Esporte", + "Estratégia" to "Estratégia", + "Fantasia" to "Fantasia", + "Fantasmas" to "Fantasmas", + "Ficção Científica" to "Ficção Científica", + "Filosófico" to "Filosófico", + "Garota Mágica" to "Garota Mágica", + "Garota Monstro" to "Garota Monstro", + "Gore" to "Gore", + "Gyaru" to "Gyaru", + "Harém" to "Harém", + "Harém Reverso" to "Harém Reverso", + "Histórico" to "Histórico", + "Horror" to "Horror", + "Isekai" to "Isekai", + "Jogos" to "Jogos", + "Mafia" to "Mafia", + "Máfia" to "Máfia", + "Magia" to "Magia", + "Mecha" to "Mecha", + "Medicina" to "Medicina", + "Médico" to "Médico", + "Militar" to "Militar", + "Militares" to "Militares", + "Mistério" to "Mistério", + "Monstros" to "Monstros", + "Murim" to "Murim", + "Música" to "Música", + "Necromancer" to "Necromancer", + "Ninja" to "Ninja", + "Policial" to "Policial", + "Pós-Apocalíptico" to "Pós-Apocalíptico", + "Psicológico" to "Psicológico", + "Realidade Virtual" to "Realidade Virtual", + "Reencarnação" to "Reencarnação", + "Regressão" to "Regressão", + "Romance" to "Romance", + "Samurai" to "Samurai", + "Shounen" to "Shounen", + "Sistema de Jogo" to "Sistema de Jogo", + "Sobrenatural" to "Sobrenatural", + "Sobrevivência" to "Sobrevivência", + "Super Herói" to "Super Herói", + "Superação" to "Superação", + "Suspense" to "Suspense", + "Terror" to "Terror", + "Tragédia" to "Tragédia", + "Traição" to "Traição", + "Troca de Gênero" to "Troca de Gênero", + "Vampiro" to "Vampiro", + "Viagem no Tempo" to "Viagem no Tempo", + "Vida Cotidiana" to "Vida Cotidiana", + "Vida Escolar" to "Vida Escolar", + "Video Games" to "Video Games", + "Vilã" to "Vilã", + "Vilão" to "Vilão", + "Vingança" to "Vingança", + "Violência" to "Violência", + "Yaoi" to "Yaoi", + "Yuri" to "Yuri", + "Zumbis" to "Zumbis", + ), + ) diff --git a/src/pt/onereader/src/eu/kanade/tachiyomi/extension/pt/onereader/OneReader.kt b/src/pt/onereader/src/eu/kanade/tachiyomi/extension/pt/onereader/OneReader.kt new file mode 100644 index 00000000000..48e291aa798 --- /dev/null +++ b/src/pt/onereader/src/eu/kanade/tachiyomi/extension/pt/onereader/OneReader.kt @@ -0,0 +1,132 @@ +package eu.kanade.tachiyomi.extension.pt.onereader + +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.source.model.Filter +import eu.kanade.tachiyomi.source.model.FilterList +import eu.kanade.tachiyomi.source.model.MangasPage +import eu.kanade.tachiyomi.source.model.Page +import eu.kanade.tachiyomi.source.model.SChapter +import eu.kanade.tachiyomi.source.model.SManga +import eu.kanade.tachiyomi.source.online.HttpSource +import keiyoushi.annotation.Source +import keiyoushi.network.rateLimit +import keiyoushi.utils.firstInstanceOrNull +import keiyoushi.utils.parseAs +import okhttp3.HttpUrl +import okhttp3.HttpUrl.Companion.toHttpUrl +import okhttp3.Request +import okhttp3.Response + +@Source +abstract class OneReader : HttpSource() { + + override val supportsLatest = true + + override val client = network.client.newBuilder() + .rateLimit(3) + .build() + + private val apiBaseUrl = "https://api.onereader.net".toHttpUrl() + + override fun popularMangaRequest(page: Int): Request = searchRequest( + page = page, + query = "", + order = "az", + genre = "", + type = "", + status = "", + ) + + override fun popularMangaParse(response: Response): MangasPage = searchMangaParse(response) + + override fun latestUpdatesRequest(page: Int): Request = searchRequest( + page = page, + query = "", + order = "recent", + genre = "", + type = "", + status = "", + ) + + override fun latestUpdatesParse(response: Response): MangasPage = searchMangaParse(response) + + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { + val order = filters.firstInstanceOrNull()?.selected() ?: "az" + val genre = filters.firstInstanceOrNull()?.selected().orEmpty() + val type = filters.firstInstanceOrNull()?.selected().orEmpty() + val status = filters.firstInstanceOrNull()?.selected().orEmpty() + + return searchRequest(page, query, order, genre, type, status) + } + + private fun searchRequest( + page: Int, + query: String, + order: String, + genre: String, + type: String, + status: String, + ): Request { + val url = apiUrl("api", "mangas", "search").newBuilder() + .addQueryParameter("page", page.toString()) + .addQueryParameter("limit", PAGE_SIZE.toString()) + .addQueryParameter("order", order) + .addQueryParameter("role", "standard") + .addQueryParameter("search", query.trim()) + .addQueryParameter("genre", genre) + .addQueryParameter("type", type) + .addQueryParameter("status", status) + .build() + + return GET(url, headers) + } + + override fun searchMangaParse(response: Response): MangasPage = response.parseAs().toMangasPage() + + override fun getMangaUrl(manga: SManga): String = "$baseUrl/manga-details".toHttpUrl().newBuilder() + .addQueryParameter("id", manga.url) + .build() + .toString() + + override fun mangaDetailsRequest(manga: SManga): Request = GET(apiUrl("api", "mangas", manga.url), headers) + + override fun mangaDetailsParse(response: Response): SManga = response.parseAs().toSManga(details = true) + + override fun chapterListRequest(manga: SManga): Request = GET(apiUrl("api", "chapters", manga.url), headers) + + override fun chapterListParse(response: Response): List = response.parseAs>() + .entries + .sortedByDescending { it.key.toDoubleOrNull() ?: Double.NEGATIVE_INFINITY } + .map { it.value.toSChapter(it.key, baseUrl) } + + override fun getChapterUrl(chapter: SChapter): String = requireNotNull( + baseUrl.toHttpUrl().resolve(chapter.url), + ).toString() + + override fun pageListRequest(chapter: SChapter): Request { + val webUrl = getChapterUrl(chapter).toHttpUrl() + val mangaKey = requireNotNull(webUrl.queryParameter("id")) + val chapterNumber = requireNotNull(webUrl.queryParameter("capitulo")).replace('.', '_') + return GET(apiUrl("api", "chapters", mangaKey, chapterNumber), headers) + } + + override fun pageListParse(response: Response): List = response.parseAs().toPages(apiBaseUrl) + + override fun imageUrlParse(response: Response): String = throw UnsupportedOperationException() + + override fun getFilterList(): FilterList = FilterList( + OrderFilter(), + Filter.Separator(), + TypeFilter(), + StatusFilter(), + TagFilter(), + ) + + private fun apiUrl(vararg pathSegments: String): HttpUrl = apiBaseUrl.newBuilder() + .apply { pathSegments.forEach { addPathSegment(it) } } + .build() + + companion object { + private const val PAGE_SIZE = 24 + } +} From 5e6c4cfde919f4149568f2e73a0468c416a5ebb3 Mon Sep 17 00:00:00 2001 From: duasmisha-hub <300955612+duasmisha-hub@users.noreply.github.com> Date: Thu, 16 Jul 2026 14:31:58 -0300 Subject: [PATCH 2/4] OneReader: implement KeiSource, regenerate icon per style convention --- src/pt/onereader/build.gradle.kts | 2 +- .../onereader/res/mipmap-hdpi/ic_launcher.png | Bin 5234 -> 2865 bytes .../onereader/res/mipmap-mdpi/ic_launcher.png | Bin 3450 -> 1755 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 4312 -> 3949 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 14441 -> 6338 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 23228 -> 9143 bytes .../extension/pt/onereader/OneReader.kt | 92 +++++++++++------- 7 files changed, 56 insertions(+), 38 deletions(-) diff --git a/src/pt/onereader/build.gradle.kts b/src/pt/onereader/build.gradle.kts index e2b5197f863..cd93cfbb1b7 100644 --- a/src/pt/onereader/build.gradle.kts +++ b/src/pt/onereader/build.gradle.kts @@ -8,7 +8,7 @@ keiyoushi { name = "OneReader" versionCode = 1 contentWarning = ContentWarning.MIXED - libVersion = "1.4" + libVersion = "1.6" source { lang = "pt-BR" diff --git a/src/pt/onereader/res/mipmap-hdpi/ic_launcher.png b/src/pt/onereader/res/mipmap-hdpi/ic_launcher.png index ee70ef98c5a9c5d1d5cfa32baf2a576b606e48a5..69d2dcc769132d6d5164a0d6d676d6237935a8ce 100644 GIT binary patch delta 2859 zcmV+`3)J-TD6tlhBYz6`NklN z3m60ze;}eYppAeUHEOV+#u)thkH4ddMx#-KQH(MEh#Eyvf!b=d1%FmRVnF#(+b(Rk z-EP~R&d$!voA>TL{_);!7X)l^c6Yk&OcyVtT?Di{=T6r8T49LR8lVo` zzh}>$t*I4hz&#g$6rhU5VzH;E=T@!tCIF?>DQz|)0)Vx4N4;Ku^T^1^a5`6avH*Di z0|NuM1wn9i6n{nWLh>(TjESP?-fFda`RM3q{h2t)JPSCszrX(qW6af26h%rYe<1-B z$8qHQ{)TKedmZqt!NEbZbLYbNocSRoPRVICanaM+P{<8o5QRCq!fri zxuNm3P|P?2&o%WkLaQj%HBJ=yz=1T)qGlH$t)O8Q3gNnSWnQ_a!rHC|#jI`W=Nzed z{NqT5+aD>gb#ESD3!Y9Erey)rDp}dCtmU&WImDG~CKCd(&0pDK&T+=Fh>g#$@WTf? z_}JY&M1M}>DQT)DnPw8Pb&xfVTdq9F#j9)B+En(c(5ksh>qMauccdMa;Bk-SpLz0N`8 z6i!k%jun^o*SO)l5?X5d|yCAF0d>u)VO$6jVlKxdEfSB91A^s zFX5EQNVBpd;!9VIvSDRC$u?bTS_1e9c^WM=oO)6^e7tm&)*|U=158q$vFWQ=a1q!L zUbc3UFJCc=rxW*y9Tc;cZ(MbN4Xf(J_2gbjd1i{Urm#|TP^`_VzNt7)zMh7-3V(xZ zs=WT}GPOw2u!X^W=h`B zK2I+7129TXeSn-m;0eR!fbZ?u13xwZ4o@dMM0uGhBmasHu*|?^{doDQ289fnE{eQR%K?2Sn zhuZks-@3SaC`T#O(_k0{g^Z&kW05Aeljam4tssmP&+iG@w6=n^$z*D=;?E;(eE%OE zY}=dXmMaf(`9Kw$s)%U#%AdOU%pZI3JmHf58teON_!=~VQ}BZaJ2=+xnC;CbX143B zFjkzkB;?(LYc(k2wKG4asT+Cla z+IW1zC*wJ+Q+)jQOF2|AbY>irk>ciyj&gB-jYg_6#!j(rNl0(eA`u9J^57S{3mmE# ziW%3m-dIyP$bTsK@?X0c?61<>5fe8+#gGpim!4jm;g9gb6*V$O`0Bk~bY>i*69%mX z8$&Jj2t1(@DL#7XVK!e-O1c^|UB`kA6@p;0@bJNaZ$40LT0gAm#i|p?7-4V8=f*94 z>_28OS@66>bB;qr94ewl^6D&nOgt(!I z(r3h>LM(VjFm3SgXuyrX>Z4RkT1V2VQOpVCePP#uEU&w51@GE0&P!KS>1&TM-i#_W zPTI*XhWEedD22fBsXz44<|Wa|0bh98DA%4lfen*YRGu9FwvxE-f3LxcLX+$t+CA>`jaMF|BkOQ+l2yOqynixA3whu1s&$jtdMb$+mP~2!UAzX3iAFsY%%MikzY|>-g@3?b0JBAW)Vh8_M zn)EbC`|{j$S09s+Mr+Vs0?rM0E@$WCIXdSNoOu`Rr$GAkzQmG3rznS-x8Jdxd!Cqo za9W}_A3NyGIJWK0^Uf`O)UD#4;oQ8sRewtXMB4G_%s960$)i;Aw{`G;)Al)G{o0pV zKU#3g0@P~2oDfONY_|+({gdDSEs900xhbWYM_45~X@Ks#?>s{#>RF{ou+s$rzJD#JzXnTuH58#-i0EPpXHO5%<>7& zx^wP<(b3VLgkd<6dPV)2xb{STc_B!xDV(yZQ~02-q;3?a^K$9DasW%$KqH(fP?@5`Tzg`fam}Kbua(` z>RI+y?e7jT@qQ9J+u00d`2O+f$vv5yP3Nv zdv5}PgonJ;s;CG7c~}v_Po+|=E>J5}u>~Okln;oaeQ33BYqivV#!{_{FHjLFh#+EJ zf)6M{PzVSjs8lL%5E97i-h0lO`PQ6s6Y@?_G}yA&O1PYR&Y7A2?Ad$Ip8t-Z5fYUU zQ_#sq4!ahWn?p12H7>H6(-*~sXflCT2tphi;sX1DjYyVy#pGF+v2^lOO6JT)?r>1$ zV`@km9FT26%tK_hMQ^wjMLL7LCH&M%hMSBd|&1-uOYrMu;ms3c4XBRoqa8hsT5v`E!F|_8) zBnva8wRK5D)P}@PCgl_|?_t=pDS@;E%F_)1t^}8%I^<8i+Z0HHQrPHghvr4Xi0B#P1J-)m@!!iGP#f& zZ|lR|H~t3Uxs6+5qFDrYTt8ay9+wzTRxyC8qD|W|k2l!IFPA^V2V)f?L!iC#VJQ$6 zT1C(q7TPGHqrg*DI$hU1i|UP85^Me zq$ll8b^D{VMB*@I`BXmMTI3tVJJ`o};|`wXChv^{2XV0|Qs=Voh6`9pi0L{TE zcpZ3iVm`b*i048b7>~yZ)#ut@9hw$jB$5u*ab26W8%wZv#P;BVtB__9hK#!`H_^eO zGz+a2rL=NO=;A7Vl-`_we9z-od4D6n=P-n;Y6q$Onpv@V52L!r=|wYs7u(I{AxS7~ zT9GvuztBNnWU?PCQz6j-74j%4?|(ISV1CgYxzwNqcB!$tu?qijct)y=M4N^} z79p(}oY=v+-5u^)KZz&0KZ&K(JZ6rG$;hwOhy>ZW#>_lyg zGw4IIPicXpFe{>VFI@R;M-3nmyjJQO4b){#Dy|EGj##vFEFSCD9ryhgnSS1t$XI1h zsUcM$@?J!B+rcQOh-r~PU&?2{zHm!a{?}K`+P!e2q$$!9!gSdd$oK&s?Jn3c_cRt? zz6BW$;w=&iIrlVF_nmy#+!F~K9jqr7`wFG0@;AcFYB)rM67D%~GE4j2OJe2D;LCm; zQT-+pri9=7_XHa7wS!}%DHB}6gcGqieKR6V7}A;Cl{*6vhIB@yTTF-*(>EIQu*r5X zO`QSMA!AM*hIj14qr6L*x!AF{A3+T_DVL_sIW;vv7!UT zH#s%jyyw1Jr;V z2dDu#4p0Mf9H0i|I6w`^aex|-;{bil0O@KQg|BNTUb#(uYyzbH-&RFpv}zuw{C`I) zZCZZZcsN0Scn@bCO`whnK%OBB2ufYpr4JGF6YOb34Pj46(k)Tt-090?2!m(M*_ZSg zC9bC_MpJ@^gCyixq*xxUQJ6!iV*{YJsZ7D+fr#K!uB6Bx$P${9;wQbng`z7K1HBj* zh!Db@dmZ8Y`oJiK(2|4|W*H9eh$tV2Y<6ICfYvx1ARO9BOWJcrsJWj}YFdEYB(Y)e zlf2Oe$S}G;H~Hc%u(g;^dR@jlPh0~B*VCrMISgbgV`GXz(Wplz0YvpqRuwroFAUu}FTg9;?K|y`Fr0vnrAYEodmk2znpz!11 zVnzyNhhS|!4E+$;!RI&pioajghJ~pu$ktoZ4Qq+P++(K5?Zu?Unp3Tw07!Cx`{6ZP$=kxT9QrQZe8d@89LRRQWz`Y zp`RDH#EGMMhc$e9$*Yi4K-ryrc_^m~@7bD%6r58#2h1N_NIE?4ewUx+PGe^xv7YCn^@E9K34f0pf58jGw;pkd13rKydS(s-bwk~ARQiYH2)K-=J%8bA%}-)!R>o~P4S~2 z!R!fG125t_3i!TLNG~BdMa2B0_X;ia6xvE)7Z&mWu?Wh1`8S;s7uCjuL;)7I? zZMQgG7jnAZ$FPBy@V(7_xMStj?0m2-8}H9yf?eYCtHPBuDJ&xVlg>>3$xm^HeGHp_ zPe)pDpZbWACb@42?uT2dkP1g{9S%5-i8x4@`S*;9R}K|LK$|mZd10Xpd|m+~U7J4r zCNO+@E*mb)Wy8|{7lOhhOlf#@a0=jZ*Jd?SS6cq#46cGHJ1%n5pH@*Q2@8fJzm>rJMMOe7T-XzR1k+I$h3hZ=t zVzCP-GB(K4q!ZyZuhb{yHC~Q3KS+Q`8fjYh;K2{K@~1s}I2cO7Bh|Pzv+{_Ze+4J9 zlR-EPQpKDjHSL8!sW@FS!aThB83tc;IfZ#8l)5I|JcN#RB5_6m>{>>;^$ri4d!=uF z2`Rzua7$KWvzU%7Ua^SnF2sasw-nqmtaj~a*}6wEP&~|*ty}6L)P(AJK-KAhg>O;g z1^!7o)}J=8ZN^hIwikw48M~_mg`st92)jIV=cV*QGEO^;kdhQfGQeKOE%%?!Z_itU zv?WS-5I=yJ-WP2x=az(EfMJsID~(^H zSajpFsA&P+Qu2yV2h>7VZPzg7pM4_upB5lvw8o-MH8ytej^KC6kpm>y0~CT!=B)Bf zKqh7En6sH77m=3@p_qjm(UqnmN#IV6poKywJjAqox1`aw(}#J>)bf4i1Ko{FB2c1%C>PY2DEkCLWM1#OlqnEYV76h5F|XLrSVqX z36UtHRE#ufXjnBDQz6P9Yoh`3D>7t+Pw_Bu@wqjauEsmX2`4%*HER;rw|JK=v+`h0 zEiZFpRgm?xLX3S0OLk;imcyu$Gk89%8CYzHl)y;Ih!U|%eZF~>C7oiam%=@+?iC9AXsQYUg>mpX~!pi8kTka0GYPTq>uav7VhGSSUN+a z+OOWLsh$FDmvK@8?zX$~v+vZL0n>#Dl8t#8jLmQh zG+FG9?%?qe8-pv|_BZ>HA>&yjdg5(9=)ONJucw&48pr&YOO~M!8_(up<+Q`=bql={ zDa^A@8fH?IledvMD!%4fA9|Z%MKyUn6+uKA%J|6u?vSlbzcnIdora{ z1{bP0=Synk>xlBfS@ltdV|^T!a;E#z)z= za&6)@9tkz)BA-BBwI-}F`yOfBtV(c-4)fgEw=w4ZPAoeAT13&_KwHWy{!EI(6^Jwt zD=tN4Ud^T63Z@H(_DNUWSa1&a&uFLtr-Wyf_3r9xS1`vDz=Il(WqZ=QrEJo-tOUKz5>U@XCV$o)44xfM(&g2DIT-UFC_B( zY9qcNKsp)h$pX}v0%RiyyxZSyq29f{(1J6lBK~#5<<-~X}>iQKub=n-0 zt2RY^RV(mtHGD3c@v$A|ReKxrKikH}g{Q*A_x%;@PlNB2z9>ND_P{s5X1Ps9+zH&- ziH-3tZ2V;#?zJwYCpKpgqotqFFkzafGwVT&QMO{Bhr4I_YeTSd3k*^ve_$ty;FM{K zQv?%czQ8kgZ-EYWu$=t6LqX-EyA`n_xZ+Qrt^M{IEk~5@a7+%>gh@s)GZ+37YZHh~HM?wV79B|A_*v0&CgwyI+KJ}FMB0P^+N;^hu zd6NZmrw5x$t6ZbMiS!p`G|3BMsqA@3+OZ+4Ki4=rnQezSv(Ae7YOnD(mLB_~&B%WG z4Hjh042J}%2#4y9x;e$J~b zFgB-rSylft65m(?l`aoBL5-P3NXB_@^boE}?B&(4SqK@u#H;9#UZ!=GBk>)CU$gb2({W3~qW5hPAk z9w(XQ_7av(XLVLzhPh?T#UUl!mXS}r#p~HKkOs)60;fq?uDX1=3B2s5k#;ffj_A)1 sX-@NJSMZPQ89o!u$EBei_g5+Z4=d8V`gyuWdH?_b07*qoM6N<$f-dsmeENkl|3-JO};vfpdEtX*vzVhw56 zgcz$WA!=-EYGgyWkWdVX#0x=sK_SKqZNfzpjW;&Jg_M8^6^y|alQvrf3@WujTN^+v zS+L#hcDr!0&V_VFs~Wm_V)I4CX;C_6bdWmc~eu<^qDhfa&x7K)SjTfzyAlooj}tHQb~bn zRXr3%(eB~l;oOy!a-?fl(>K0Vf1WHvQ>6Fc@i}Yrz z7@5O%&Dv70@XlnwpGQ-aLZQLwTtUreptl^Sl9~0$hp>6}T7`ktWe)5(M^`$e5()DydTzdG zi&f#?n=jGR77~?&VkkWJS__vd1}i$lYj~g6rq*4GwR}+(oKbdd$kCGy>1hqQ_vTA{ z@1=HDS$`#3Dga)gAy5Xo%V-E*;DMtZ6hp)6Oh~>WoVt+W#Au3yRh)?tgkGpb!p5#L zpK33YPAF&dmU|9$^UT-Ik_|kYy2}g712^A-Y>g6FMGRaj8IF&nc>a!eS=|{yCFb?> zZ>D+VckPtIn4t~U^TRC{`0BcRoG%GDH)ih~3V~6q(Roj8uAUAf0tu%~ zlnp(l2ww#&u;bHtjKF=r?E>J(w_RY{hCIFiQ58%C6J<+aHKtb`=AhnIA3JR&1|$Me z0k*Bnv*E-vs`2Zn5a)ue<%E^^v-O&Tr4Sf`I%Qq!bPUn~RY90PMV1}FY#@PIdR64O zo_}Q20+r7Hv@OaGc#WS(-=BT2wi{7x9m;~{o+Sg2O?pfMjExDe)Bjmve63PR60FAm zwK?gp4**7B&rm0*kWEH>p|{BG>!(Nrvqp&o6br($r?R|ywt;daxY<2GS11Prh`dk^ z4XYX=rXykBA6wb_R4-@89Swn}De%1cuYUxapX}vFuiZc)6p~iCShPf5>aI|3G3w>M z+eYc{4!Jyq?Hy|4uIGB_Z>=y{wtVAPJ>0&2ialE{&P=3lpLcxu7rk}YSyyit4!!We zkuCxQO@ZfgtBX9md7Nx=6?=c*Mx^ll&EtIgGw<=UKeh16yN%?l@ht6UCH1lZ5Pu+y zgkr_uJ+w4N+|pCx@z+~ubV}&q**7vgb*h<1w~Vo_wSow2>MXP6z>ORqNyVdwf$31# z+E<_}9pV*=RYMrX^wK5M0|Mnx7#eQmmNg}ORoHjy7@z%EiTBEeR6-d#)5LH7k!JT$ z$IRz;4|VYR`4rnfk!S0g0@bQujeoN9lXiW4A=N9*Hnr+DII zGns^6T1lyZF;ET-yAE~p^ocAJB^&F2Do}xJ!t?m{5x%}|lBtSevSQe|c7KY;wvUi; zK3*Hfz2aig^7M%;yAE|z4h_bz^m;%Ql2*xAEe{^;+%u5FSKy~#8lBlXlYfBcPG$Jckxr_SU^asB zK+5TS&OcXPk!h{z>FjfRT_#1Qsj@&f=WmCAJO@*r9!Sv!|lM1Xql%hv*+ zgM)*%SS+58qUf--)?O#qtm>Sz-usuw#>U>7eLKUISE;8@p9V12+E<-({UY-5+M1OF zQVqlKrOC<3ZfP?@5`Tzg`fam}Kbua(`>RI+y?e7jT@qQ9J+u00d`2O+f$vv5yP< zVFdsH4C6^eK~#90X^_T!v$?`4J=3Kmg96q7)Os(%4V8#FB~5f~U&?Erb8 z5iv%M7V$yU0)?P9wwOSIiw2FBqzb|cpax-JcoYP2DJyD$Vo?_uK~Uaz=FZ%E&)NI` zyY{*F4l@HLqZwSf@~>HQ&pqedy}$2&?)`6pGl-S~hFE^>JkXEs(w(nN`4en?(D)hWK=>ZEpwwh9GC03z~HYhC%ThTi?`A zDST4WO=%3b^-aUC4AjjpOvYU^=c4ZZ_aOyv8iiH_gb-k6RdtE9v%XDZA+g9r*4G+@ z!Y}0~LV-a_12(e#loBgv-HvOvFA>XXcd!ydSY|$*Kz|XutW=%sGm{%Hv-NVJjL6p_ z1|I`w1`$Eh*#a({`+|kLVhANbOzd+~Eqvw<`}Vot>-73b+bD$)R3g!q0N;6W7D3v3 zkfW$fNI0wo@a`QCQl)@4-o)`+r@s9`kj*07++i>pAcz22cqWBYU}(#N6W)V&UYxC- zxf5K(dVh+5yFo;QtiGqfai-gQFi))`Mbx2UpOC_%~_o9-j7MdD9p&o z_wb;HzhAaJlgTt&p=AsRYb_FcF&Je+IBN(25r2aZd>lI#-uzF``3w7ZAs`2X;ljQbuzwQ6 zII9XEiorVj79O6``56*KdkK{COld;d!Vg91Ul72AVN_Gy%bz=A08g6sYJtFv0g9`8 z>AB$tVU2qSh1hFb8cSogjs4#%?IqAYVQ5c+ahz|tb#(Ofv{(IY?)I&t!@)T2-4Z`* zojCqz=~x1VR7qqbUD+*p{a3$|jeiMLc1up6Y}PHYoG+_SH30xJE<~y1z`svq3t&^p z%c(I7sXBfsqC0xPV!d){%X05sA%2aQV6$4emH;j2+17_Bvyyk-_Q zzTdc@OK;_NS=hHL!e0*MRDX5X@&V`cXt*8?;@ixeI>Y3#tFVC*oy9TT#EaiM8a!Q} z&hLD3J2Kt7N`yxU15)|KvAyt%n|9M4$NWe!;8yqjy67$g59F1U%v&m8-`InO6-R07 zfkD_hu`fT-+u{*o3{hr&k%K-PuuMO_lX%TMN~ZCq`Z z3)#L{Xcqz3m~fvbvwt`TN2yQtB%oX?#09XMMudaEbpa-Q>-^yUO+T}9H+>1;xOQx? zOacj84}s39Up~DfeN*?RfaNp2J0R`Md@ffR_a_<(odZii(h?eT&AnIAkwF}b&&Z*Y z_a_D3g@)UnbVWv-55;9+6DoZ#oHOJabiI0I+4K?i$c;@I3e^^33y=| z9st?t`8*+T>r*2#sNnaYa4gMe+^8^wuDKf!oT%jqr{f+Swd zWaNrm52|~7MSo&n6Xo*M1nzNOqN1T|reyV~mHvv|i$6$!<2F+>cH#ORK}zLu{- zGJ67?ZV{ZJnf(%WQHFLc8jE?OzUtpVneagz3FhAO_1wDW7vr$af@jw>o}(I)Kcz5x zM3(u}SG^Se=QYd7$THx>v9QJLCy&F2)`;~`+Vz}k`~a>JM6HvRK{A9{ep4>xr-GX)n=kZ89TtZ}W3NlGrx7T2 zyEvE2!GFAoE$HtVwxKRnSq?)j`iQ62%@RMX+eAyY3-EQ<%8rp%APIqS?%CRO)_10>>M5fuE|nEw#xyr_iIAUi5&D<+mvcCm zA6U8{w>On%qP_Vo`FtEAal@{a1*D8yfpXq@Z-4jHL0Ck2Oi-%OMQ}toPFF~j$xsiP)IJ@Qxb-qkyesoM-yhp^eXr>=~zUBWdZFVPq| zk!Hh2KM2#M4nS*{P^a4Z))**Vp8R0jp6rYn@3h8xrWhbgr0!UXcVD?Xs?jO^Y}9DZ z(O#i_=~~22Gc77iJUtt*@Wef-EP7T(vcpB8y2Q|FOLCzGU{g=}*AQ*neHq6L#vQ3e{EoIDZ{9 z-xb1AF-aiKm&FsH(sySoPXJywy#a^3Nkg8`zVXUID2L6sE^r%*wG#J&r;3YL%C4b;0cyBX&C5|G)+tX>R-2Gy5-9PVZ;LWc?IZTmh z4gQP-oVXXY7IyRNEC;{dK%G~iZgNl5d3~g!90k_0NS6D#d&h-C7~ zSTaqcM_t%y&GNr$9P!%#wz_xOZ|GR2N_#DitXyW%n)PvW>-{gw$8AJ`6n|iukojnj zwLd!m)Q1hRXFDus0{@`|VoMl~gNX!0eF*u0)6w48eoY0(3Gu>yxuN#EJVqF?oGe#5 z0C5bu3|rqcq~>bWjh2Wg-8fXblg{Ffi{j%7MM9ceW<7;p{P3OFr;E$a7-$@3LV+ZM z9F~u@lyD0yH=zq)*SIgNEPo4@7E)l%4pJk2jE!q1VT_b&1zB6+j)V#eSZ3?tZ{n6* zA!*0pU5%7d5K?s0$ocAt+IOt-b@9}(lsF02VRpw(XV!Z=36#W*8@YeB#YTk~T1m5Z zKk2Gph>f*((HNPP%gInh(Go&&>?uwG&6;N=t&()(%t!Fc+TB)pQh!ir+MFAGQe6pS z37(Q>&0D00FTjSi6XX~vT0LZ zIKg5C7zqTpcEqE0sRJKqY4h$h{L|Q(i%K!EmsHg}xwiHO{tg0>8o7X%uHEH|QOAOJ abN)XHRyZd4fU9``0000pib;p1A-nVqOdNivv-I9>RNDvShffh@Eu@VylE}XKflGx>{e2B4SBnTfcae1kP za*`@%aVS?|ERwQAs*+U7sY>h*7$g$F*np7)S`aad!HSmI_nztL?Y(zzKD^gGJzCIU zP)n_Or|OkvrZn&M{Qvi!bMCqS^De{|TWqn#7F%qw#THw`OCF2>Vu>t2!gkQ zAo%RDW5-^dF9~9vB&j7!mL$^Y^iOTu-sJm!MF^qdI50aCj4^>y%GO$+$mMcdM@L6T zBDbX9mAG@=dEL5oHsB|d$sKjzJJGBV@r3}S5W)_EprVvonNFv_0r+dzuC?Fq3=n_~ z(9_fNf>LUu*4jki$9B4DA%xIc_l}K?tL@_JD_+)oW{BfB&OH8aY;{SCl+vA#myz*m_rg{hWL$DMui&2(H|s)z zF90E`4=|0R*@RCwfH4g&4`)kUx3t8n#U2T}F(?!~$XI}@89%{#y<`SI&0s<{~@a7Tj+LXhTLqenoF90J< zLtUW(vd<+`Dmtm-`cVK}dpWdIAKLeZfap7FgTiVf;FmV?Zc4GVJmX2iiF{ zX(82YpcDdx2;G4(g7*?3LtqWs2#g5{5YaP}wqfV>6WrQUzyw6)%y1TbxVy;4Y>A(p zNRhG(=X=Y;YDB`JgkjUN5=K({gS7!^!z+CWzVJkrfxLwy>wK>e_yPEVz_kpHnx9{; zF78UczzYPnWl%Cgp6X~992`jSH@`E&XVy)jqd{S!&$MY-iJu-{)R270YDCIsNyG9M zzczqP1k!X#@^^bX8ObXix^0jZ=>X3MAq0Vj!5NF!MqKvxCOI)>W5ia6cw{+KUybW0x`fu zqs~=zOWnxz^ye*J8+J)r0h^Z>xoU|I-YM$=4aX;Ke)MJw-#^^Oj4yG|FdL)@7g$|M zpL;e=aOc_?vWxw>fxrMR7#W~2vFGUaf6amtRYHXtPweG$1v zu*6vcx44AT(07|1rVhljT_%8_3|m(hdE~Z1I#U6@7Bzog4g@{z9*^EJ$hu4!za0L~ zyWNvIcX%PKDR#Gn2#aTa2{x`Ov2()&F;^CLUlBdt2i`8UvZ8L$c zz~`=>Vne1x*%uUj!N*q5aL1Y%bR`78nM^j__L6~?l;)-tg>b`F!YwNb*iLh5l&ofz zqg}tWgc637ZTQgA@;THu@eKIDXF{gM57S%A(4F=hx}mn<38)qB#3>uEA|@cVn1Gmo z*kS@=0%D5^hzW?TnO4HaM4RJv3#w{aSiBzvV%;`Gb@SiE1e|WRGDy2_$KK2~_-IqF zA)OzYCaM!rt&9qg22kNXKuo|XrG>s}n|#q`XiA|Zbff|@p@L#)#$v{kC}Fs)-KXe@n1DI3Ny(o-)6GmpQVhb4mZW89bpv|ZJwA2CG`C$o z!{U@CsGNP&3qaV=J7Mv}(KOE-T|{5rV%n3T%mi5MYHUlBurHh-_o8$`{nJ*h<_|DY z5{wiSzZ!FR?pTTqnGz3d8Rw&`3#UoSwE-c)_XPiPa54YusV5(Ze|*CvS9esX1fu3n@)gO8CsVvJ?(kw?inn$2T+6U;Ai0>Tlj;f^)ad}LJ_ zDp7JA4e=ev-_=^|1NZFbjmX!!JC}}AAlE3;!=x`h^3^YxoXdFa+*uI#LY+mqG%>S{-Cm>roo2+wAmN*ea|rg&>4 z!9d$^*IrZkRi_}WclXbrm#we!7KI?zTiSy4Rx>lUPduWlV<`=-g- z?$}`7;?*ISOz@~A^f#Bi&?fmO6TN#-NwWh9RaGW!cuS2)j znG8<*z(rrus9qV_2u+W#1;=xCO@vkLmg!g&aNnj0gn*ffz}Mi_U4e!~v>q6pvH0c- zU3}x2C9Ll*v3XgEk}oI)l3Q2LkV*U8x2Kzj_IHvmOIqCk*D|Nwv-k0SxLAMFkMzC z5e8#h!4D3%vDgh*+3KNq#pjzZEaAt$YM~<$27t033bz(Hy4H*lt{DU=Tl2uy zakgJKSxdO0&Q&~Lu)jZnx@5$;k=XV5lPL}iCfJxQ)#Tt+z5XY!%yY}~0)xdc0AoV; z<5=+Y(G-9Ei!MAJimqB5&0|N}S!8RHmPQEp_t#pPsz_ShS@6@Y<}bI6upv{T5=2uy zlBTCD&5AZZOiRt|T0}YU^xG*84JL4{#+BOm?$b9Ind4zJ~0q>OPW~{v3%hn%n*2#vBRD@Zisv;AwDV2-ajt){1HqMH%(|hOs8?YX1Irhq&X4nGoc9cOHGM zz1aevHlP&bi;`Uj+o=SCRD=4&8nO=12GWk^>7$GI_Dh{eE6l|MJu6=~CR8(bDx11E0T6ibhu2J#REDoU zyOg{qNhniGA(enaMX)sO^YF)qxOsJvpfX!ms&?U@n%4*k%7URO#kXGU;y>SPX?Vl7 z)#!znYZ?CWP&&X8>!S{7r}5qLR>R+J8o8qb zg9#1~Wmwf#Vg1rFS9VrNMM1R^2sSS*vEi~3+M7$lwlxL5@APxep0KaX0BhPRQExzH z4)}oqWy71p4$t?d!uF=CM>)!36>Tf|Vk)3G4mFz_AI3cgCGsiCIJ| zgl5{kW-8n!{hc_2|4a$XA`(5tYli}@g z2V0t2Nk|B=BW-DIyK*7bf~tS8V;S5tG~11r6!-jhhDUE7Wb3M84O}I|4Cb1pW&Z6` zeOMAM@9@yx>EIvkbGhfK3@4{-I+6kUl;*zr4xI&C4Xtj**I&Mdgffg56g!{FuP?qzFm4qQm3zHV@;~1#A=M^N0IfcI?S=a>^!Unc6FH>aUC8wWk-YEF~~u8DhMk z*tsXe{u7DQNH9^lDo*kF2m2Ci-<_p@+9G9{GZx&4bwTqZ!LGsgq@TZGx$v*%&M**#!HI3pUljXP`9O9EhFqdk>E?avy2w4Gxie4 z1iViY#!41Dc4v6yWCG=ez*htAOUIM!+>>RrsG0`+rjjOV69(pyg2m1~8D8lPXM%Fz z7sry^`&2h01x2EXz;8NjXb`O*hGr~w?#}S)pv%j>3GRI=!)U=G*#thn>ANJW+0oF9 z#f~R4Xar+L)f55ul4(=b5eb8N8-$tj-iVlh29jV!Z(wOw@M-oJa$gDuc*G4FO+Y|= zP|Ss%0YZp#o`n+I+(8>*X5KFW2C#Cu+^8|8xBd*V*v@){i2;VErl$G`kN7h0i-2r4 zD}gEB_n(wf3S&%6z}b&d3Z#@G2!dye#bSRpn^or`;9Q6Chs&sc-(DybCi3~bKG&&w^F0m8E|p4o%d+-5j&rMJSsn8| zAz}fT5JCv0l+s#{7Yc>DhK7drMk#*fTrPXQ1ZW^pC=~iV&-;nvIJT6s3s@8%X+>a+ z8Pr-op3CL_WO#V^CBOwr^Ep#eyoYQ_0m>$9@yAoi!HX;Vv8-dCb9nq2TsYRE-CBt00000NkvXX Hu0mjfm=S># literal 4312 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 literal 14441 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 diff --git a/src/pt/onereader/res/mipmap-xxxhdpi/ic_launcher.png b/src/pt/onereader/res/mipmap-xxxhdpi/ic_launcher.png index 5e5e6ebcc051949854d1b262c192db7fa830cf42..eca6f497372c5fe40efa14622b75ea61e7fead80 100644 GIT binary patch literal 9143 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 literal 23228 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 diff --git a/src/pt/onereader/src/eu/kanade/tachiyomi/extension/pt/onereader/OneReader.kt b/src/pt/onereader/src/eu/kanade/tachiyomi/extension/pt/onereader/OneReader.kt index 48e291aa798..b5268e318ce 100644 --- a/src/pt/onereader/src/eu/kanade/tachiyomi/extension/pt/onereader/OneReader.kt +++ b/src/pt/onereader/src/eu/kanade/tachiyomi/extension/pt/onereader/OneReader.kt @@ -1,34 +1,33 @@ package eu.kanade.tachiyomi.extension.pt.onereader -import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.source.model.Filter import eu.kanade.tachiyomi.source.model.FilterList import eu.kanade.tachiyomi.source.model.MangasPage import eu.kanade.tachiyomi.source.model.Page import eu.kanade.tachiyomi.source.model.SChapter import eu.kanade.tachiyomi.source.model.SManga -import eu.kanade.tachiyomi.source.online.HttpSource +import eu.kanade.tachiyomi.source.model.SMangaUpdate import keiyoushi.annotation.Source +import keiyoushi.network.get import keiyoushi.network.rateLimit +import keiyoushi.source.KeiSource import keiyoushi.utils.firstInstanceOrNull import keiyoushi.utils.parseAs +import kotlinx.serialization.json.JsonElement import okhttp3.HttpUrl import okhttp3.HttpUrl.Companion.toHttpUrl -import okhttp3.Request -import okhttp3.Response +import okhttp3.OkHttpClient @Source -abstract class OneReader : HttpSource() { +abstract class OneReader : KeiSource() { - override val supportsLatest = true - - override val client = network.client.newBuilder() - .rateLimit(3) - .build() + override fun OkHttpClient.Builder.configureClient(): OkHttpClient.Builder = apply { + rateLimit(3) + } private val apiBaseUrl = "https://api.onereader.net".toHttpUrl() - override fun popularMangaRequest(page: Int): Request = searchRequest( + override suspend fun getPopularManga(page: Int): MangasPage = search( page = page, query = "", order = "az", @@ -37,9 +36,7 @@ abstract class OneReader : HttpSource() { status = "", ) - override fun popularMangaParse(response: Response): MangasPage = searchMangaParse(response) - - override fun latestUpdatesRequest(page: Int): Request = searchRequest( + override suspend fun getLatestUpdates(page: Int): MangasPage = search( page = page, query = "", order = "recent", @@ -48,25 +45,23 @@ abstract class OneReader : HttpSource() { status = "", ) - override fun latestUpdatesParse(response: Response): MangasPage = searchMangaParse(response) - - override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { + override suspend fun getSearchMangaList(page: Int, query: String, filters: FilterList): MangasPage { val order = filters.firstInstanceOrNull()?.selected() ?: "az" val genre = filters.firstInstanceOrNull()?.selected().orEmpty() val type = filters.firstInstanceOrNull()?.selected().orEmpty() val status = filters.firstInstanceOrNull()?.selected().orEmpty() - return searchRequest(page, query, order, genre, type, status) + return search(page, query, order, genre, type, status) } - private fun searchRequest( + private suspend fun search( page: Int, query: String, order: String, genre: String, type: String, status: String, - ): Request { + ): MangasPage { val url = apiUrl("api", "mangas", "search").newBuilder() .addQueryParameter("page", page.toString()) .addQueryParameter("limit", PAGE_SIZE.toString()) @@ -78,43 +73,66 @@ abstract class OneReader : HttpSource() { .addQueryParameter("status", status) .build() - return GET(url, headers) + return client.get(url).parseAs().toMangasPage() } - override fun searchMangaParse(response: Response): MangasPage = response.parseAs().toMangasPage() + override suspend fun getMangaByUrl(url: HttpUrl): SManga? { + if (url.host != baseUrl.toHttpUrl().host) return null + val mangaKey = url.queryParameter("id") ?: return null + + val manga = SManga.create().apply { this.url = mangaKey } + + return fetchMangaUpdate(manga, emptyList(), fetchDetails = true, fetchChapters = false) + .manga + .apply { initialized = true } + } override fun getMangaUrl(manga: SManga): String = "$baseUrl/manga-details".toHttpUrl().newBuilder() .addQueryParameter("id", manga.url) .build() .toString() - override fun mangaDetailsRequest(manga: SManga): Request = GET(apiUrl("api", "mangas", manga.url), headers) - - override fun mangaDetailsParse(response: Response): SManga = response.parseAs().toSManga(details = true) + override suspend fun fetchMangaUpdate( + manga: SManga, + chapters: List, + fetchDetails: Boolean, + fetchChapters: Boolean, + ): SMangaUpdate = SMangaUpdate( + manga = if (fetchDetails) { + client.get(apiUrl("api", "mangas", manga.url)).parseAs().toSManga(details = true) + } else { + manga + }, + chapters = if (fetchChapters) { + client.get(apiUrl("api", "chapters", manga.url)) + .parseAs>() + .entries + .sortedByDescending { it.key.toDoubleOrNull() ?: Double.NEGATIVE_INFINITY } + .map { it.value.toSChapter(it.key, baseUrl) } + } else { + chapters + }, + ) - override fun chapterListRequest(manga: SManga): Request = GET(apiUrl("api", "chapters", manga.url), headers) + override val supportsRelatedMangas = false - override fun chapterListParse(response: Response): List = response.parseAs>() - .entries - .sortedByDescending { it.key.toDoubleOrNull() ?: Double.NEGATIVE_INFINITY } - .map { it.value.toSChapter(it.key, baseUrl) } + override suspend fun fetchRelatedMangaList(manga: SManga): List = throw UnsupportedOperationException() override fun getChapterUrl(chapter: SChapter): String = requireNotNull( baseUrl.toHttpUrl().resolve(chapter.url), ).toString() - override fun pageListRequest(chapter: SChapter): Request { + override suspend fun getPageList(chapter: SChapter): List { val webUrl = getChapterUrl(chapter).toHttpUrl() val mangaKey = requireNotNull(webUrl.queryParameter("id")) val chapterNumber = requireNotNull(webUrl.queryParameter("capitulo")).replace('.', '_') - return GET(apiUrl("api", "chapters", mangaKey, chapterNumber), headers) - } - - override fun pageListParse(response: Response): List = response.parseAs().toPages(apiBaseUrl) - override fun imageUrlParse(response: Response): String = throw UnsupportedOperationException() + return client.get(apiUrl("api", "chapters", mangaKey, chapterNumber)) + .parseAs() + .toPages(apiBaseUrl) + } - override fun getFilterList(): FilterList = FilterList( + override fun getFilterList(data: JsonElement?): FilterList = FilterList( OrderFilter(), Filter.Separator(), TypeFilter(), From a46ca16c69ac50c34b69b03944a67f68363f7231 Mon Sep 17 00:00:00 2001 From: duasmisha-hub <300955612+duasmisha-hub@users.noreply.github.com> Date: Fri, 17 Jul 2026 17:08:50 -0300 Subject: [PATCH 3/4] OneReader: store chapter data in memo, parallel update fetch --- .../tachiyomi/extension/pt/onereader/Dto.kt | 16 ++--- .../extension/pt/onereader/OneReader.kt | 59 ++++++++++++------- 2 files changed, 47 insertions(+), 28 deletions(-) diff --git a/src/pt/onereader/src/eu/kanade/tachiyomi/extension/pt/onereader/Dto.kt b/src/pt/onereader/src/eu/kanade/tachiyomi/extension/pt/onereader/Dto.kt index d9263f15590..c282df1eada 100644 --- a/src/pt/onereader/src/eu/kanade/tachiyomi/extension/pt/onereader/Dto.kt +++ b/src/pt/onereader/src/eu/kanade/tachiyomi/extension/pt/onereader/Dto.kt @@ -15,9 +15,10 @@ import kotlinx.serialization.json.JsonElement import kotlinx.serialization.json.JsonNull import kotlinx.serialization.json.JsonPrimitive import kotlinx.serialization.json.JsonTransformingSerializer +import kotlinx.serialization.json.buildJsonObject import kotlinx.serialization.json.contentOrNull +import kotlinx.serialization.json.put import okhttp3.HttpUrl -import okhttp3.HttpUrl.Companion.toHttpUrl import java.text.SimpleDateFormat import java.util.Locale import java.util.TimeZone @@ -100,13 +101,12 @@ internal class ChapterDto( @SerialName("posted_date") private val postedDate: String, ) { - fun toSChapter(number: String, baseUrl: String): SChapter = SChapter.create().apply { - val webUrl = "$baseUrl/leitor".toHttpUrl().newBuilder() - .addQueryParameter("id", mangaKey) - .addQueryParameter("capitulo", number) - .build() - - url = webUrl.run { "$encodedPath?$encodedQuery" } + fun toSChapter(number: String): SChapter = SChapter.create().apply { + url = "$mangaKey/$number" + memo = buildJsonObject { + put("id", mangaKey) + put("number", number) + } name = "Capítulo $number" chapter_number = number.toFloatOrNull() ?: -1F date_upload = chapterDateFormat.tryParse(postedDate) diff --git a/src/pt/onereader/src/eu/kanade/tachiyomi/extension/pt/onereader/OneReader.kt b/src/pt/onereader/src/eu/kanade/tachiyomi/extension/pt/onereader/OneReader.kt index b5268e318ce..f1651cb525f 100644 --- a/src/pt/onereader/src/eu/kanade/tachiyomi/extension/pt/onereader/OneReader.kt +++ b/src/pt/onereader/src/eu/kanade/tachiyomi/extension/pt/onereader/OneReader.kt @@ -13,6 +13,9 @@ import keiyoushi.network.rateLimit import keiyoushi.source.KeiSource import keiyoushi.utils.firstInstanceOrNull import keiyoushi.utils.parseAs +import keiyoushi.utils.string +import kotlinx.coroutines.async +import kotlinx.coroutines.coroutineScope import kotlinx.serialization.json.JsonElement import okhttp3.HttpUrl import okhttp3.HttpUrl.Companion.toHttpUrl @@ -97,35 +100,51 @@ abstract class OneReader : KeiSource() { chapters: List, fetchDetails: Boolean, fetchChapters: Boolean, - ): SMangaUpdate = SMangaUpdate( - manga = if (fetchDetails) { - client.get(apiUrl("api", "mangas", manga.url)).parseAs().toSManga(details = true) + ): SMangaUpdate = coroutineScope { + val updatedManga = if (fetchDetails) { + async { + client.get(apiUrl("api", "mangas", manga.url)).parseAs().toSManga(details = true) + } } else { - manga - }, - chapters = if (fetchChapters) { - client.get(apiUrl("api", "chapters", manga.url)) - .parseAs>() - .entries - .sortedByDescending { it.key.toDoubleOrNull() ?: Double.NEGATIVE_INFINITY } - .map { it.value.toSChapter(it.key, baseUrl) } + null + } + + val updatedChapters = if (fetchChapters) { + async { + client.get(apiUrl("api", "chapters", manga.url)) + .parseAs>() + .entries + .sortedByDescending { it.key.toDoubleOrNull() ?: Double.NEGATIVE_INFINITY } + .map { it.value.toSChapter(it.key) } + } } else { - chapters - }, - ) + null + } + + SMangaUpdate( + manga = updatedManga?.await() ?: manga, + chapters = updatedChapters?.await() ?: chapters, + ) + } override val supportsRelatedMangas = false override suspend fun fetchRelatedMangaList(manga: SManga): List = throw UnsupportedOperationException() - override fun getChapterUrl(chapter: SChapter): String = requireNotNull( - baseUrl.toHttpUrl().resolve(chapter.url), - ).toString() + override fun getChapterUrl(chapter: SChapter): String { + val mangaKey = chapter.memo["id"]!!.string + val number = chapter.memo["number"]!!.string + + return "$baseUrl/leitor".toHttpUrl().newBuilder() + .addQueryParameter("id", mangaKey) + .addQueryParameter("capitulo", number) + .build() + .toString() + } override suspend fun getPageList(chapter: SChapter): List { - val webUrl = getChapterUrl(chapter).toHttpUrl() - val mangaKey = requireNotNull(webUrl.queryParameter("id")) - val chapterNumber = requireNotNull(webUrl.queryParameter("capitulo")).replace('.', '_') + val mangaKey = chapter.memo["id"]?.string ?: throw Exception("Atualize a lista de capítulos") + val chapterNumber = chapter.memo["number"]!!.string.replace('.', '_') return client.get(apiUrl("api", "chapters", mangaKey, chapterNumber)) .parseAs() From 8838b6395914047de36742218a65b46f5c38faf9 Mon Sep 17 00:00:00 2001 From: duasmisha-hub <300955612+duasmisha-hub@users.noreply.github.com> Date: Fri, 17 Jul 2026 20:49:00 -0300 Subject: [PATCH 4/4] OneReader: fetch tags/types from site, add deeplinks --- src/pt/onereader/build.gradle.kts | 5 + .../extension/pt/onereader/Filters.kt | 124 +++--------------- .../extension/pt/onereader/OneReader.kt | 35 +++-- 3 files changed, 50 insertions(+), 114 deletions(-) diff --git a/src/pt/onereader/build.gradle.kts b/src/pt/onereader/build.gradle.kts index cd93cfbb1b7..4538c60c166 100644 --- a/src/pt/onereader/build.gradle.kts +++ b/src/pt/onereader/build.gradle.kts @@ -14,4 +14,9 @@ keiyoushi { lang = "pt-BR" baseUrl = "https://onereader.net" } + + deeplink { + path("/manga-details") + path("/leitor") + } } diff --git a/src/pt/onereader/src/eu/kanade/tachiyomi/extension/pt/onereader/Filters.kt b/src/pt/onereader/src/eu/kanade/tachiyomi/extension/pt/onereader/Filters.kt index f435f00ff63..a315dd6b676 100644 --- a/src/pt/onereader/src/eu/kanade/tachiyomi/extension/pt/onereader/Filters.kt +++ b/src/pt/onereader/src/eu/kanade/tachiyomi/extension/pt/onereader/Filters.kt @@ -1,10 +1,17 @@ package eu.kanade.tachiyomi.extension.pt.onereader import eu.kanade.tachiyomi.source.model.Filter +import kotlinx.serialization.Serializable + +@Serializable +internal class FilterData( + val tags: List, + val types: List, +) internal open class SelectFilter( name: String, - private val options: Array>, + private val options: List>, ) : Filter.Select(name, options.map { it.first }.toTypedArray()) { fun selected(): String = options[state].second } @@ -12,30 +19,16 @@ internal open class SelectFilter( internal class OrderFilter : SelectFilter( "Ordenar por", - arrayOf( + listOf( "A-Z" to "az", "Atualizados recentemente" to "recent", ), ) -internal class TypeFilter : - SelectFilter( - "Tipo", - arrayOf( - "Todos" to "", - "Adulto" to "Adulto", - "Mangá" to "Manga", - "Manhua" to "Manhua", - "Manhwa" to "Manhwa", - "Shoujo" to "Shoujo", - "Webtoon" to "Webtoon", - ), - ) - internal class StatusFilter : SelectFilter( "Status", - arrayOf( + listOf( "Todos" to "", "Em lançamento" to "Em Lançamento", "Completo" to "Completo", @@ -44,95 +37,14 @@ internal class StatusFilter : ), ) -internal class TagFilter : +internal class TypeFilter(types: List) : + SelectFilter( + "Tipo", + listOf("Todos" to "") + types.map { it to it }, + ) + +internal class TagFilter(tags: List) : SelectFilter( "Tag", - arrayOf( - "Todas" to "", - "Ação" to "Ação", - "Adaptação" to "Adaptação", - "Adulto" to "Adulto", - "Aliens" to "Aliens", - "Animais" to "Animais", - "Artes Marciais" to "Artes Marciais", - "Aventura" to "Aventura", - "Boys' Love" to "Boys' Love", - "Brutalidade" to "Brutalidade", - "Comédia" to "Comédia", - "Cosplayer" to "Cosplayer", - "Crime" to "Crime", - "Crossdressing" to "Crossdressing", - "Culinária" to "Culinária", - "Cultivação" to "Cultivação", - "Cultivo" to "Cultivo", - "Delinquentes" to "Delinquentes", - "Demônios" to "Demônios", - "Drama" to "Drama", - "Ecchi" to "Ecchi", - "Elf" to "Elf", - "Erótica" to "Erótica", - "Escolar" to "Escolar", - "Escritório" to "Escritório", - "Esporte" to "Esporte", - "Estratégia" to "Estratégia", - "Fantasia" to "Fantasia", - "Fantasmas" to "Fantasmas", - "Ficção Científica" to "Ficção Científica", - "Filosófico" to "Filosófico", - "Garota Mágica" to "Garota Mágica", - "Garota Monstro" to "Garota Monstro", - "Gore" to "Gore", - "Gyaru" to "Gyaru", - "Harém" to "Harém", - "Harém Reverso" to "Harém Reverso", - "Histórico" to "Histórico", - "Horror" to "Horror", - "Isekai" to "Isekai", - "Jogos" to "Jogos", - "Mafia" to "Mafia", - "Máfia" to "Máfia", - "Magia" to "Magia", - "Mecha" to "Mecha", - "Medicina" to "Medicina", - "Médico" to "Médico", - "Militar" to "Militar", - "Militares" to "Militares", - "Mistério" to "Mistério", - "Monstros" to "Monstros", - "Murim" to "Murim", - "Música" to "Música", - "Necromancer" to "Necromancer", - "Ninja" to "Ninja", - "Policial" to "Policial", - "Pós-Apocalíptico" to "Pós-Apocalíptico", - "Psicológico" to "Psicológico", - "Realidade Virtual" to "Realidade Virtual", - "Reencarnação" to "Reencarnação", - "Regressão" to "Regressão", - "Romance" to "Romance", - "Samurai" to "Samurai", - "Shounen" to "Shounen", - "Sistema de Jogo" to "Sistema de Jogo", - "Sobrenatural" to "Sobrenatural", - "Sobrevivência" to "Sobrevivência", - "Super Herói" to "Super Herói", - "Superação" to "Superação", - "Suspense" to "Suspense", - "Terror" to "Terror", - "Tragédia" to "Tragédia", - "Traição" to "Traição", - "Troca de Gênero" to "Troca de Gênero", - "Vampiro" to "Vampiro", - "Viagem no Tempo" to "Viagem no Tempo", - "Vida Cotidiana" to "Vida Cotidiana", - "Vida Escolar" to "Vida Escolar", - "Video Games" to "Video Games", - "Vilã" to "Vilã", - "Vilão" to "Vilão", - "Vingança" to "Vingança", - "Violência" to "Violência", - "Yaoi" to "Yaoi", - "Yuri" to "Yuri", - "Zumbis" to "Zumbis", - ), + listOf("Todas" to "") + tags.map { it to it }, ) diff --git a/src/pt/onereader/src/eu/kanade/tachiyomi/extension/pt/onereader/OneReader.kt b/src/pt/onereader/src/eu/kanade/tachiyomi/extension/pt/onereader/OneReader.kt index f1651cb525f..8c4fe38ec9a 100644 --- a/src/pt/onereader/src/eu/kanade/tachiyomi/extension/pt/onereader/OneReader.kt +++ b/src/pt/onereader/src/eu/kanade/tachiyomi/extension/pt/onereader/OneReader.kt @@ -1,6 +1,5 @@ package eu.kanade.tachiyomi.extension.pt.onereader -import eu.kanade.tachiyomi.source.model.Filter import eu.kanade.tachiyomi.source.model.FilterList import eu.kanade.tachiyomi.source.model.MangasPage import eu.kanade.tachiyomi.source.model.Page @@ -14,6 +13,7 @@ import keiyoushi.source.KeiSource import keiyoushi.utils.firstInstanceOrNull import keiyoushi.utils.parseAs import keiyoushi.utils.string +import keiyoushi.utils.toJsonElement import kotlinx.coroutines.async import kotlinx.coroutines.coroutineScope import kotlinx.serialization.json.JsonElement @@ -151,13 +151,32 @@ abstract class OneReader : KeiSource() { .toPages(apiBaseUrl) } - override fun getFilterList(data: JsonElement?): FilterList = FilterList( - OrderFilter(), - Filter.Separator(), - TypeFilter(), - StatusFilter(), - TagFilter(), - ) + override val supportsFilterFetching get() = true + + override suspend fun fetchFilterData(): JsonElement = coroutineScope { + val tags = async { client.get(apiUrl("api", "tags")).parseAs>() } + val types = async { client.get(apiUrl("api", "types")).parseAs>() } + + FilterData( + tags = tags.await().filter(String::isNotBlank), + types = types.await().filter(String::isNotBlank), + ).toJsonElement() + } + + override fun getFilterList(data: JsonElement?): FilterList { + val filterData = data?.parseAs() + + return FilterList( + buildList { + add(OrderFilter()) + add(StatusFilter()) + if (filterData != null) { + add(TypeFilter(filterData.types)) + add(TagFilter(filterData.tags)) + } + }, + ) + } private fun apiUrl(vararg pathSegments: String): HttpUrl = apiBaseUrl.newBuilder() .apply { pathSegments.forEach { addPathSegment(it) } }