From 15136e25625f725fb9e33f71cef765088cfac216 Mon Sep 17 00:00:00 2001 From: Vito0912 <86927734+Vito0912@users.noreply.github.com> Date: Sat, 27 Jul 2024 19:45:52 +0200 Subject: [PATCH 01/15] First draft for user / login and logout --- docs/controllers/AuthController.yaml | 73 +++++++++++++++++++++++ docs/objects/Bookmarks.yaml | 18 ++++++ docs/objects/Media.yaml | 42 ++++++++++++++ docs/objects/Permissions.yaml | 55 ++++++++++++++++++ docs/objects/entities/User.yaml | 86 ++++++++++++++++++++++++++++ 5 files changed, 274 insertions(+) create mode 100644 docs/controllers/AuthController.yaml create mode 100644 docs/objects/Bookmarks.yaml create mode 100644 docs/objects/Media.yaml create mode 100644 docs/objects/Permissions.yaml create mode 100644 docs/objects/entities/User.yaml diff --git a/docs/controllers/AuthController.yaml b/docs/controllers/AuthController.yaml new file mode 100644 index 0000000000..04b9a05a7e --- /dev/null +++ b/docs/controllers/AuthController.yaml @@ -0,0 +1,73 @@ +paths: + /login: + post: + summary: Login to the server + description: Logs in a client to the server, returning information about the user and server. + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + username: + $ref: '../objects/entities/User.yaml#/components/schemas/username' + password: + $ref: '../objects/entities/User.yaml#/components/schemas/password' + required: + - username + - password + responses: + '200': + description: Success + content: + application/json: + schema: + type: object + properties: + user: + type: object + properties: + $ref: '../objects/entities/User.yaml#/components/schemas/user' + '401': + description: Unauthorized - Invalid username or password. + content: + application/json: + schema: + type: object + properties: + message: + type: string + /logout: + post: + summary: Logout from the server + description: Logs out a client from the server. If the socketId parameter is provided, the server removes the socket from the client list. + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + socketId: + $ref: '../objects/entities/User.yaml#/components/schemas/socketId' + responses: + '200': + description: Success + content: + application/json: + schema: + type: object + properties: + message: + type: string + example: Successfully logged out. + '401': + description: Unauthorized + content: + application/json: + schema: + type: object + properties: + message: + type: string diff --git a/docs/objects/Bookmarks.yaml b/docs/objects/Bookmarks.yaml new file mode 100644 index 0000000000..0099b42cc3 --- /dev/null +++ b/docs/objects/Bookmarks.yaml @@ -0,0 +1,18 @@ +components: + schemas: + time: + type: integer + description: The time (in ms since POSIX epoch) when the bookmark was created. + example: 1616239000 + bookmark: + properties: + libraryItemId: + $ref: 'LibraryItem.yaml#/components/schemas/libraryItemId' + title: + type: string + description: The title of the bookmark. + example: Chapter 1 + time: + $ref: '#/components/schemas/time' + createdAt: + $ref: '../schemas.yaml#/components/schemas/createdAt' \ No newline at end of file diff --git a/docs/objects/Media.yaml b/docs/objects/Media.yaml new file mode 100644 index 0000000000..0809ef97ed --- /dev/null +++ b/docs/objects/Media.yaml @@ -0,0 +1,42 @@ +components: + schemas: + mediaProgressId: + type: string + description: The ID of the media progress. + example: e4bb1afb-4a4f-4dd6-8be0-e615d233185b + format: uuid + mediaProgress: + type: object + properties: + id: + $ref: '#/components/schemas/mediaProgressId' + libraryItemId: + $ref: 'LibraryItem.yaml#/components/schemas/libraryItemId' + episodeId: + $ref: 'mediaTypes/Podcast.yaml#/components/schemas/podcastId' + duration: + $ref: '../schemas.yaml#/components/schemas/durationSec' + progress: + type: number + description: The user's progress in the media item. + example: 0.5 + currentTime: + type: number + description: The user's current time in the media item. + example: 0.5 + isFinished: + type: boolean + description: Whether the user has finished the media item. + example: false + hideFromContinueListening: + type: boolean + description: Whether the media item should be hidden from the continue listening section. + example: false + lastUpdate: + $ref: '../schemas.yaml#/components/schemas/updatedAt' + startedAt: + $ref: '../schemas.yaml#/components/schemas/createdAt' + finishedAt: + type: integer + description: The time (in ms since POSIX epoch) when the media was finished. Will be null if the media has is not finished. + example: 1616239000 \ No newline at end of file diff --git a/docs/objects/Permissions.yaml b/docs/objects/Permissions.yaml new file mode 100644 index 0000000000..cfda324fbc --- /dev/null +++ b/docs/objects/Permissions.yaml @@ -0,0 +1,55 @@ +components: + schemas: + downloads: + type: boolean + description: Whether the user has permission to download media. + example: true + update: + type: boolean + description: Whether the user has permission to update media. + example: true + delete: + type: boolean + description: Whether the user has permission to delete media. + example: true + upload: + type: boolean + description: Whether the user has permission to upload media. + example: true + accessAllLibraries: + type: boolean + description: Whether the user has permission to access all libraries. + example: true + accessAllTags: + type: boolean + description: Whether the user has permission to access all tags. + example: true + accessExplicitContent: + type: boolean + description: Whether the user has permission to access explicit content. + example: true + permissions: + type: object + properties: + downloads: + $ref: '#/components/schemas/downloads' + update: + $ref: '#/components/schemas/update' + delete: + $ref: '#/components/schemas/delete' + upload: + $ref: '#/components/schemas/upload' + accessAllLibraries: + $ref: '#/components/schemas/accessAllLibraries' + accessAllTags: + $ref: '#/components/schemas/accessAllTags' + accessExplicitContent: + $ref: '#/components/schemas/accessExplicitContent' + required: + - downloads + - update + - delete + - upload + - accessAllLibraries + - accessAllTags + - accessExplicitContent \ No newline at end of file diff --git a/docs/objects/entities/User.yaml b/docs/objects/entities/User.yaml new file mode 100644 index 0000000000..15d1b5479b --- /dev/null +++ b/docs/objects/entities/User.yaml @@ -0,0 +1,86 @@ +components: + schemas: + username: + type: string + description: The username to log in with. + example: testuser + password: + type: string + description: The password of the user. + example: password + userId: + type: string + description: The ID of the user. + example: e4bb1afb-4a4f-4dd6-8be0-e615d233185b + format: uuid + userType: + type: string + description: The type of the user. + example: root + token: + type: string + description: The token of the user. + example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6InRlc3R1c2VyIiwiaWF0IjoxNTE2MjM5MDIyfQ.4k1jJ9 + socketId: + type: string + description: The socket ID of the user. + example: AFcTcb7xBLsSPnIzAAAV + isActive: + type: boolean + description: Whether the user is active. + example: true + isLocked: + type: boolean + description: Whether the user is locked. + example: false + lastSeen: + type: integer + description: The time (in ms since POSIX epoch) when the user was last seen. + example: 1616239000 + user: + type: object + description: A user object which includes the user's ID, username, type, token, and media progress. + properties: + id: + $ref: '#/components/schemas/userId' + username: + $ref: '#/components/schemas/username' + type: + $ref: '#/components/schemas/userType' + token: + $ref: '#/components/schemas/token' + mediaProgress: + description: The user's progress of media. + type: array + items: + $ref: '../Media.yaml#/components/schemas/mediaProgress' + seriesHideFromContinueListening: + description: The IDs of series to hide from the user's "Continue Series" shelf. + type: array + items: + $ref: '../LibraryItem.yaml#/components/schemas/libraryItemId' + bookmarks: + description: The user's bookmarks. + type: array + items: + $ref: '../Bookmarks.yaml#/components/schemas/bookmark' + lastSeen: + $ref: '#/components/schemas/lastSeen' + isActive: + $ref: '#/components/schemas/isActive' + isLocked: + $ref: '#/components/schemas/isLocked' + createdAt: + $ref: '../../schemas.yaml#/components/schemas/createdAt' + permissions: + $ref: '../Permissions.yaml#/components/schemas/permissions' + librariesAccessible: + description: The IDs of libraries the user has access to. + type: array + items: + $ref: '../Library.yaml#/components/schemas/libraryId' + itemTags: + $ref: '../../schemas.yaml#/components/schemas/tags' + + + \ No newline at end of file From 9efd3537a4fa93e83590c0a077d8216a57264431 Mon Sep 17 00:00:00 2001 From: Vito0912 <86927734+Vito0912@users.noreply.github.com> Date: Sat, 27 Jul 2024 21:20:15 +0200 Subject: [PATCH 02/15] Fixed wrong formation and added endpoints to root --- docs/controllers/AuthController.yaml | 22 ++++++++-------------- docs/openapi.json | Bin 126211 -> 283378 bytes docs/root.yaml | 4 ++++ 3 files changed, 12 insertions(+), 14 deletions(-) diff --git a/docs/controllers/AuthController.yaml b/docs/controllers/AuthController.yaml index 04b9a05a7e..76b9085aa4 100644 --- a/docs/controllers/AuthController.yaml +++ b/docs/controllers/AuthController.yaml @@ -26,18 +26,14 @@ paths: type: object properties: user: - type: object - properties: - $ref: '../objects/entities/User.yaml#/components/schemas/user' + $ref: '../objects/entities/User.yaml#/components/schemas/user' '401': description: Unauthorized - Invalid username or password. content: - application/json: + text/html: schema: - type: object - properties: - message: - type: string + type: string + example: Unauthorized /logout: post: summary: Logout from the server @@ -61,13 +57,11 @@ paths: properties: message: type: string - example: Successfully logged out. + example: Success '401': description: Unauthorized content: - application/json: + text/html: schema: - type: object - properties: - message: - type: string + type: string + example: Unauthorized diff --git a/docs/openapi.json b/docs/openapi.json index 9767f57960a24a91867848532a0e261c50fda9f0..5a2f61347df7d83e10437b8a4fa73b4bb31ebc3a 100644 GIT binary patch literal 283378 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 diff --git a/docs/root.yaml b/docs/root.yaml index 4d6c055db7..3959236416 100644 --- a/docs/root.yaml +++ b/docs/root.yaml @@ -77,6 +77,10 @@ paths: $ref: './controllers/PodcastController.yaml#/paths/~1api~1podcasts~1{id}~1episode~1{episodeId}' /api/series/{id}: $ref: './controllers/SeriesController.yaml#/paths/~1api~1series~1{id}' + /login: + $ref: './controllers/AuthController.yaml#/paths/~1login' + /logout: + $ref: './controllers/AuthController.yaml#/paths/~1logout' tags: - name: Authors description: Author endpoints From 1811e0a06c2c299c54fe8f3b1f8f72f8f7a0f7d8 Mon Sep 17 00:00:00 2001 From: Vito0912 <86927734+Vito0912@users.noreply.github.com> Date: Sat, 27 Jul 2024 21:56:46 +0200 Subject: [PATCH 03/15] Added media to items endpoint --- docs/objects/LibraryItem.yaml | 4 ++++ docs/objects/mediaTypes/Book.yaml | 8 ++++++++ docs/objects/metadata/BookMetadata.yaml | 14 ++++++++++++++ docs/openapi.json | Bin 283378 -> 283900 bytes 4 files changed, 26 insertions(+) diff --git a/docs/objects/LibraryItem.yaml b/docs/objects/LibraryItem.yaml index 107ba9f3f9..0e9ade14d5 100644 --- a/docs/objects/LibraryItem.yaml +++ b/docs/objects/LibraryItem.yaml @@ -55,6 +55,10 @@ components: type: boolean mediaType: $ref: './mediaTypes/media.yaml#/components/schemas/mediaType' + media: + oneOf: + - $ref: './mediaTypes/Book.yaml#/components/schemas/bookMinified' + - $ref: './mediaTypes/Podcast.yaml#/components/schemas/Podcast' libraryItemMinified: type: object description: A single item on the server, like a book or podcast. Minified media format. diff --git a/docs/objects/mediaTypes/Book.yaml b/docs/objects/mediaTypes/Book.yaml index ebe2b63d9d..a4191d5a74 100644 --- a/docs/objects/mediaTypes/Book.yaml +++ b/docs/objects/mediaTypes/Book.yaml @@ -68,3 +68,11 @@ components: description: The format of ebook of the book. Will be null if the book is an audiobook. type: string nullable: true + book: + allOf: + - $ref: '#/components/schemas/bookBase' + - type: object + properties: + metadata: + $ref: '../metadata/BookMetadata.yaml#/components/schemas/bookMetadata' + diff --git a/docs/objects/metadata/BookMetadata.yaml b/docs/objects/metadata/BookMetadata.yaml index faa054ac3c..6f4769d173 100644 --- a/docs/objects/metadata/BookMetadata.yaml +++ b/docs/objects/metadata/BookMetadata.yaml @@ -124,3 +124,17 @@ components: description: The title of the chapter. type: string example: Wizards First Rule 01 Chapter 1 + bookMetadata: + allOf: + - $ref: '#/components/schemas/bookMetadataBase' + - type: object + properties: + authors: + type: array + items: + $ref: '../entities/Author.yaml#/components/schemas/author' + series: + type: array + items: + $ref: '../entities/Series.yaml#/components/schemas/series' + diff --git a/docs/openapi.json b/docs/openapi.json index 5a2f61347df7d83e10437b8a4fa73b4bb31ebc3a..c161925af368f536c64355421b17ef0814b0d209 100644 GIT binary patch delta 179 zcmV;k08Ib#r4jt85rBjNv;saLw-7P{mOPhGZUGLrP)-B>X_w4F11^_fWdb;tKs*C* zm%z&chLa#g1h-PS1Fk)nK*s|XmpXC+3b$S$0(KFX@Y4b&mmYHhB$K{hG?PFcCX?`t zJeQ7R0tlDzZvrZk8VHjR9wd`M9wwKdqX9~n;BEmTlkgfImoRVw5|^+T0Y;ZlDFh0) huxnub_4E#mr!m24wt~Q0S1>2*a8}tpcVpZw`^Sk VbZL_yMFh7%$O5iCw+i?J@?3S Date: Sat, 27 Jul 2024 22:10:33 +0200 Subject: [PATCH 04/15] fix: some typos --- docs/objects/Permissions.yaml | 10 +++++----- docs/objects/entities/User.yaml | 7 +++---- docs/openapi.json | Bin 283900 -> 283908 bytes 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/docs/objects/Permissions.yaml b/docs/objects/Permissions.yaml index cfda324fbc..8a1b91543f 100644 --- a/docs/objects/Permissions.yaml +++ b/docs/objects/Permissions.yaml @@ -1,6 +1,6 @@ components: schemas: - downloads: + download: type: boolean description: Whether the user has permission to download media. example: true @@ -31,8 +31,8 @@ components: permissions: type: object properties: - downloads: - $ref: '#/components/schemas/downloads' + download: + $ref: '#/components/schemas/download' update: $ref: '#/components/schemas/update' delete: @@ -46,10 +46,10 @@ components: accessExplicitContent: $ref: '#/components/schemas/accessExplicitContent' required: - - downloads + - download - update - delete - upload - accessAllLibraries - accessAllTags - - accessExplicitContent \ No newline at end of file + - accessExplicitContent diff --git a/docs/objects/entities/User.yaml b/docs/objects/entities/User.yaml index 15d1b5479b..6d0ca074d4 100644 --- a/docs/objects/entities/User.yaml +++ b/docs/objects/entities/User.yaml @@ -79,8 +79,7 @@ components: type: array items: $ref: '../Library.yaml#/components/schemas/libraryId' - itemTags: + itemTagsSelected: $ref: '../../schemas.yaml#/components/schemas/tags' - - - \ No newline at end of file + + diff --git a/docs/openapi.json b/docs/openapi.json index c161925af368f536c64355421b17ef0814b0d209..c75e29d62fd62a21bf8db452a3da1adf15fa57d7 100644 GIT binary patch delta 115 zcmeyfQm|!}U_%RI3sVd878WP5=@LpTGSdx2SgNKw$g-$x|0l-6#0e5inEquBqrmhf zI~Xmde~@Hh*}g%6 KZez}JLKXmY2q(V) From 7ae904ccbba7c8a667368bf2f9385170861b003e Mon Sep 17 00:00:00 2001 From: Vito0912 <86927734+Vito0912@users.noreply.github.com> Date: Sun, 28 Jul 2024 18:24:12 +0200 Subject: [PATCH 05/15] Added some smaller fixes and the getaitem endpoint --- docs/controllers/AuthController.yaml | 2 + docs/controllers/LibraryController.yaml | 1 + docs/controllers/LibraryItemController.yaml | 41 ++++++++++++++++++++ docs/objects/LibraryItem.yaml | 4 +- docs/objects/mediaTypes/Book.yaml | 2 + docs/openapi.json | Bin 283908 -> 288218 bytes docs/root.yaml | 2 + 7 files changed, 49 insertions(+), 3 deletions(-) create mode 100644 docs/controllers/LibraryItemController.yaml diff --git a/docs/controllers/AuthController.yaml b/docs/controllers/AuthController.yaml index 76b9085aa4..62c71b1c16 100644 --- a/docs/controllers/AuthController.yaml +++ b/docs/controllers/AuthController.yaml @@ -3,6 +3,7 @@ paths: post: summary: Login to the server description: Logs in a client to the server, returning information about the user and server. + operationId: login requestBody: required: true content: @@ -38,6 +39,7 @@ paths: post: summary: Logout from the server description: Logs out a client from the server. If the socketId parameter is provided, the server removes the socket from the client list. + operationId: logout requestBody: required: true content: diff --git a/docs/controllers/LibraryController.yaml b/docs/controllers/LibraryController.yaml index b985c05ecd..f1a8a36301 100644 --- a/docs/controllers/LibraryController.yaml +++ b/docs/controllers/LibraryController.yaml @@ -167,6 +167,7 @@ paths: parameters: - in: query name: include + description: A comma separated list of what to include with the library item. The only current option is filterdata. schema: type: string - $ref: '../schemas.yaml#/components/parameters/minified' diff --git a/docs/controllers/LibraryItemController.yaml b/docs/controllers/LibraryItemController.yaml new file mode 100644 index 0000000000..0bfa622801 --- /dev/null +++ b/docs/controllers/LibraryItemController.yaml @@ -0,0 +1,41 @@ +paths: + /api/items/{id}: + parameters: + - name: id + in: path + description: The ID of the library item. + required: true + schema: + $ref: '../objects/LibraryItem.yaml#/components/schemas/libraryItemId' + get: + operationId: getLibraryItem + summary: Get a single library item by ID on server. + description: Get a single library item by ID on server. + tags: + - LibraryItem + parameters: + - in: query + name: include + description: A comma separated list of what to include with the library item. The options are progress, rssfeed, authors (for books), and downloads (for podcasts). expanded must be 1 for include to have an effect. + schema: + type: string + - in: query + name: expanded + description: Whether to return Library Item Expanded instead. 0 for false, 1 for true. + schema: + type: integer + example: 1 + - in: query + name: episode + description: If requesting progress for a podcast, the episode ID to get progress for. + schema: + $ref: '../objects/mediaTypes/Podcast.yaml#/components/schemas/podcastId' + responses: + '200': + description: OK + content: + application/json: + schema: + oneOf: + - $ref: '../objects/LibraryItem.yaml#/components/schemas/libraryItemMinified' + - $ref: '../objects/LibraryItem.yaml#/components/schemas/libraryItemBase' diff --git a/docs/objects/LibraryItem.yaml b/docs/objects/LibraryItem.yaml index 0e9ade14d5..f6dbd4b569 100644 --- a/docs/objects/LibraryItem.yaml +++ b/docs/objects/LibraryItem.yaml @@ -56,9 +56,7 @@ components: mediaType: $ref: './mediaTypes/media.yaml#/components/schemas/mediaType' media: - oneOf: - - $ref: './mediaTypes/Book.yaml#/components/schemas/bookMinified' - - $ref: './mediaTypes/Podcast.yaml#/components/schemas/Podcast' + $ref: './mediaTypes/Book.yaml#/components/schemas/bookMinified' libraryItemMinified: type: object description: A single item on the server, like a book or podcast. Minified media format. diff --git a/docs/objects/mediaTypes/Book.yaml b/docs/objects/mediaTypes/Book.yaml index a4191d5a74..2793393c08 100644 --- a/docs/objects/mediaTypes/Book.yaml +++ b/docs/objects/mediaTypes/Book.yaml @@ -9,6 +9,8 @@ components: type: object description: Base book schema properties: + id: + description: TODO libraryItemId: $ref: '../LibraryItem.yaml#/components/schemas/libraryItemId' coverPath: diff --git a/docs/openapi.json b/docs/openapi.json index c75e29d62fd62a21bf8db452a3da1adf15fa57d7..a911f58ef093f4f4454db5c40ff8c33615f31249 100644 GIT binary patch delta 978 zcmZWoUr19?7(eHpo10U|RPtn2m<#TM8q$LmLHH06J=A?EC_;R)KbZ90D}p7Ld+z1?e&6r+eZOM1MHeHBxkQNez$)hw2D)MM4_qxkumqIHkNco~3Y(J<0ybdv!D?=w?+94Le zaxL{hw4Uj~rzSnWn0543y?kPgDv2s-;wEVa=?3!+;eT3Lp~5X4_eQL`pw?|${LgSU z9W@$YD4E%~a<-f=PW8eB6_eq*j#;^hkHX3r%8eR?OjtcmQz811>bZ4eH-B@_1k1Th z&--te^Hpl&74nWmCww1chInyOly189EIALJ&M}kQNhCC@3!i4REr7PE5kKk1##+%C zH75}}X4QX*T*Pk&xr|WDNF`Fu$W2<{DCo zDV!JA7OanGbqwqHqUdylPLJ=KpDeYWt8%j7pse$8dGwwKLf zJQ6vriP2(mfUVW0xh{;;A8@efOipN$nEqi3qs{aSmMk38d#qTLCSNcWn0`T?Q4geh zy2BnOmg(=fSh%+9d}s9If*G*gfQji6$K*Xs9NXteGsOi@PH1MC{^1t0*5m~~W|JRm zHJLu4lv!x|nMCHK%;{@FnDwSFIL%}+UBREZVETf4Ol^}DTv@goon~HVJAHx%lh}5F ze5NyklMlojO?Hq|gE&YanTcz}7WwCXB diff --git a/docs/root.yaml b/docs/root.yaml index 3959236416..cc6cf7e111 100644 --- a/docs/root.yaml +++ b/docs/root.yaml @@ -81,6 +81,8 @@ paths: $ref: './controllers/AuthController.yaml#/paths/~1login' /logout: $ref: './controllers/AuthController.yaml#/paths/~1logout' + /api/items/{id}: + $ref: './controllers/LibraryItemController.yaml#/paths/~1api~1items~1{id}' tags: - name: Authors description: Author endpoints From 11826c37a3f7309b1a1a2d1c2e10957a3be8daac Mon Sep 17 00:00:00 2001 From: Vito0912 <86927734+Vito0912@users.noreply.github.com> Date: Sun, 28 Jul 2024 18:57:56 +0200 Subject: [PATCH 06/15] Reverted change that has contradictory outputs --- docs/controllers/LibraryItemController.yaml | 2 +- docs/openapi.json | Bin 288218 -> 288130 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/controllers/LibraryItemController.yaml b/docs/controllers/LibraryItemController.yaml index 0bfa622801..932bb558b5 100644 --- a/docs/controllers/LibraryItemController.yaml +++ b/docs/controllers/LibraryItemController.yaml @@ -36,6 +36,6 @@ paths: content: application/json: schema: + description: TODO - Add minified library item object oneOf: - - $ref: '../objects/LibraryItem.yaml#/components/schemas/libraryItemMinified' - $ref: '../objects/LibraryItem.yaml#/components/schemas/libraryItemBase' diff --git a/docs/openapi.json b/docs/openapi.json index a911f58ef093f4f4454db5c40ff8c33615f31249..8e90ee61c07ea7389b48750a69873ebd1ae3dbbf 100644 GIT binary patch delta 109 zcmV-z0FwXO%MpUh5rBjNv;xQ&lkn#t5l;X_08aoQ04)F@06_p`0A!cpfdUnmly3qW zm!eSuESFIJ0S=SEU#yql5(E~P5N`qslWfQ=lMu5im$2mlCYNBi0dkYT(;$<)0tknk P8v=)%8w0nT8w5T|Rt+aQ delta 44 zcmZoVEqLp+U_%Sz7N!#tlMlqNnV!(c Date: Mon, 29 Jul 2024 21:44:43 +0200 Subject: [PATCH 07/15] Updated LibraryItemController Paths (See description) Added missing abridged Fixed wrong type on start of bookChapter Added missing libraryFile for LibraryItem Added missing type to id in media --- docs/controllers/LibraryItemController.yaml | 5 +++-- docs/objects/LibraryItem.yaml | 13 ++++++++++++- docs/objects/files/AudioFile.yaml | 17 +++++++++++++++++ docs/objects/mediaTypes/Book.yaml | 4 ++++ docs/objects/metadata/BookMetadata.yaml | 16 +++++++++++++--- docs/openapi.json | Bin 288130 -> 298894 bytes 6 files changed, 49 insertions(+), 6 deletions(-) diff --git a/docs/controllers/LibraryItemController.yaml b/docs/controllers/LibraryItemController.yaml index 932bb558b5..94d4951892 100644 --- a/docs/controllers/LibraryItemController.yaml +++ b/docs/controllers/LibraryItemController.yaml @@ -36,6 +36,7 @@ paths: content: application/json: schema: - description: TODO - Add minified library item object + type: object + description: TODO oneOf: - - $ref: '../objects/LibraryItem.yaml#/components/schemas/libraryItemBase' + - $ref: '../objects/LibraryItem.yaml#/components/schemas/libraryItem' diff --git a/docs/objects/LibraryItem.yaml b/docs/objects/LibraryItem.yaml index f6dbd4b569..ecf70127c0 100644 --- a/docs/objects/LibraryItem.yaml +++ b/docs/objects/LibraryItem.yaml @@ -56,7 +56,7 @@ components: mediaType: $ref: './mediaTypes/media.yaml#/components/schemas/mediaType' media: - $ref: './mediaTypes/Book.yaml#/components/schemas/bookMinified' + $ref: './mediaTypes/Book.yaml#/components/schemas/book' libraryItemMinified: type: object description: A single item on the server, like a book or podcast. Minified media format. @@ -66,6 +66,17 @@ components: properties: media: $ref: './mediaTypes/media.yaml#/components/schemas/mediaMinified' + libraryItem: + type: object + description: A single item on the server, like a book or podcast. + allOf: + - $ref: '#/components/schemas/libraryItemBase' + - type: object + properties: + libraryFiles: + type: array + items: + $ref: './files/AudioFile.yaml#/components/schemas/libraryFile' libraryItemSequence: type: object description: A single item on the server, like a book or podcast. Includes series sequence information. diff --git a/docs/objects/files/AudioFile.yaml b/docs/objects/files/AudioFile.yaml index 20994438fa..6092af2622 100644 --- a/docs/objects/files/AudioFile.yaml +++ b/docs/objects/files/AudioFile.yaml @@ -92,3 +92,20 @@ components: description: The MIME type of the audio file. type: string example: audio/mpeg + libraryFile: + type: object + description: A library file. Includes the path and metadata of the file. + properties: + ino: + $ref: '../../schemas.yaml#/components/schemas/inode' + addedAt: + $ref: '../../schemas.yaml#/components/schemas/addedAt' + updatedAt: + $ref: '../../schemas.yaml#/components/schemas/updatedAt' + fileType: + description: The type of file. + type: string + example: audio + metadata: + $ref: '../metadata/FileMetadata.yaml#/components/schemas/fileMetadata' + diff --git a/docs/objects/mediaTypes/Book.yaml b/docs/objects/mediaTypes/Book.yaml index 2793393c08..c4f891fbad 100644 --- a/docs/objects/mediaTypes/Book.yaml +++ b/docs/objects/mediaTypes/Book.yaml @@ -11,6 +11,9 @@ components: properties: id: description: TODO + type: string + format: uuid + example: e4bb1afb-4a4f-4dd6-8be0-e615d233185b libraryItemId: $ref: '../LibraryItem.yaml#/components/schemas/libraryItemId' coverPath: @@ -23,6 +26,7 @@ components: $ref: '../files/AudioFile.yaml#/components/schemas/audioFile' chapters: type: array + nullable: true items: $ref: '../metadata/BookMetadata.yaml#/components/schemas/bookChapter' missingParts: diff --git a/docs/objects/metadata/BookMetadata.yaml b/docs/objects/metadata/BookMetadata.yaml index 6f4769d173..1420125538 100644 --- a/docs/objects/metadata/BookMetadata.yaml +++ b/docs/objects/metadata/BookMetadata.yaml @@ -78,6 +78,10 @@ components: description: Whether the book has been marked as explicit. type: boolean example: false + abridged: + description: Whether the book is abridged. + type: boolean + example: false bookMetadataMinified: type: object description: The minified metadata for a book in the database. @@ -107,6 +111,7 @@ components: bookChapter: type: object description: A book chapter. Includes the title and timestamps. + nullable: true properties: id: description: The ID of the book chapter. @@ -114,7 +119,7 @@ components: example: 0 start: description: When in the book (in seconds) the chapter starts. - type: integer + type: number example: 0 end: description: When in the book (in seconds) the chapter ends. @@ -132,9 +137,14 @@ components: authors: type: array items: - $ref: '../entities/Author.yaml#/components/schemas/author' + $ref: '../entities/Author.yaml#/components/schemas/authorMinified' + narrators: + type: array + items: + type: string + example: Sam Tsoutsouvas series: type: array items: - $ref: '../entities/Series.yaml#/components/schemas/series' + $ref: '../entities/Series.yaml#/components/schemas/seriesSequence' diff --git a/docs/openapi.json b/docs/openapi.json index 8e90ee61c07ea7389b48750a69873ebd1ae3dbbf..9e2e04872117b71a0216be6e3a46df4111b1e161 100644 GIT binary patch delta 1509 zcmZuxZEO@(6rH(mO1DGVPHVdqSjx1Nx@tH zq?QjWfl_(4#~8)N_=8A8ih>hkW45Frh=w$pC^m?MMBoRSjbFdOcxQ@GKQhT=^5))m z?>YCJ+xbOq_q%x=`_$8Pz7XlN>T;RBVfK!QBJ@0}hGc5P0PJoGVMPvwAI(y>z0bX?v*m)+4_A`(P+NEmo~ zNCe#IdRnOB>KYE}IwyiK_KTlkJwsLKIY>6F@70AcDk`)SDh|x5}Tj`~HtU2XsA=AKM0!}1V01)S{!gQys-$xx8&0uE!s+C`4xAG$us;_X zj%}i+vF8&J$aIvL(x&W0ohu&1?F^yMh$}BDrm~YyV@k8KmA^MD+mse1p|s=m!_*5q zpNpM*Os)2roqU%lWr^YwJ0EtVx@gLTQzeO9QfJ*K$jx6sV_|8$9G)Cwp4+%Ui}D(^AybQ739*OmRzsMY8q?6;5mAHj{qy z%{;kn3?b&XzC#X|Op~MeI+CR#AeJe$7_Qb_IFhpEvDK#62&|vfa%tI1QQpWrho^|? za0U}6CXJ1Y$ECzf8MyMT2+R6b4MV>( zY96JIi}iF9W+MYQeX7E*cl5&ro**jGQO}z5uz4iq$?%(n()=|j2cIpGsV7Rny3mkp zqTqiseKlUqqE&eRDT;ccDmuDX_p)U4j)pX-0^>1tTIGad+;=vGD0LABf-{-PywvEH~hsk6Rk&q3C6g(s@gNjIp z81|E1hlQ1nAtJQ!K@g14A^eAzE>WS;O$v`HvNY=D!Q;Kh@4cxxb6YLJf~e!`Ef!M3 zqpy*;;#v1B&l<4CtT7H9;5zHy;PU-8vh*FKb@XDDduQm=M}rw{f9x`Wi}0q&R`I=+ zD_=0o;4d6boS>D_r`SeYGG(3}z)cyu2fkvl44eC9B+YIP4}>Z7qF=DPsFJ31h~HNk zROAh=l~jt&^D#TzMlVa_qQh+NB5Yyx6uyo+GhCmJd-jM-nvoMMHPPQdvwnJ(Ft0x2 z9k}mGo4?XAz0ttGne$k2b5`DEREedSm5M(WrOyu$-d;l6m!!kz8<;k)XJqB24tEk} z`99jy7x!rA(TK+gSokSi9@UU!H4n!eKSC%N+)>@yyO!a^WAxGgBa}%zLFS?Ma>{sz Ua Date: Tue, 30 Jul 2024 17:24:12 +0200 Subject: [PATCH 08/15] Added /api/items/{id}/play endpoint --- docs/controllers/LibraryItemController.yaml | 59 +++++++++++++++ docs/objects/entities/Device.yaml | 42 +++++++++++ docs/objects/entities/PlaybackSession.yaml | 82 +++++++++++++++++++++ docs/schemas.yaml | 3 + 4 files changed, 186 insertions(+) create mode 100644 docs/objects/entities/Device.yaml create mode 100644 docs/objects/entities/PlaybackSession.yaml diff --git a/docs/controllers/LibraryItemController.yaml b/docs/controllers/LibraryItemController.yaml index 94d4951892..60a7699a1b 100644 --- a/docs/controllers/LibraryItemController.yaml +++ b/docs/controllers/LibraryItemController.yaml @@ -40,3 +40,62 @@ paths: description: TODO oneOf: - $ref: '../objects/LibraryItem.yaml#/components/schemas/libraryItem' + /api/items/{id}/play: + parameters: + - name: id + in: path + description: The ID of the library item. + required: true + schema: + $ref: '../objects/LibraryItem.yaml#/components/schemas/libraryItemId' + post: + operationId: playLibraryItem + summary: Play a library item. + description: Play a library item. + tags: + - LibraryItem + parameters: + - in: query + name: deviceInfo + description: The device information to send to the server. + schema: + $ref: '../objects/entities/Device.yaml#/components/schemas/deviceInfo' + - in: query + name: forceDirectPlay + description: Whether to force direct play of the library item. + schema: + type: boolean + example: false + - in: query + name: forceTranscode + description: Whether to force transcoding of the library item. + schema: + type: boolean + example: false + - in: query + name: supportedMimeTypes + description: The supported mime types for the device. + schema: + type: array + items: + type: string + - in: query + name: mediaPlayer + description: The media player to use. + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '../objects/entities/PlaybackSession.yaml#/components/schemas/playbackSessionExpanded' + '404': + description: Not Found + content: + text/html: + schema: + type: string + description: The library item does not have any audio tracks to play. + example: Not Found diff --git a/docs/objects/entities/Device.yaml b/docs/objects/entities/Device.yaml new file mode 100644 index 0000000000..17e99b277e --- /dev/null +++ b/docs/objects/entities/Device.yaml @@ -0,0 +1,42 @@ +components: + schemas: + deviceId: + description: The client device identifier. + type: string + example: 1 + clientVersion: + description: The client version. + type: string + example: 1.0.0 + clientName: + description: The client name. + type: string + example: "Audible" + manufacturer: + description: The manufacturer of the device. + type: string + example: "Apple" + model: + description: The model of the device. + type: string + example: "iPhone 12" + sdkVersion: + description: For an Android client, the Android SDK version of the client. + type: integer + example: 49 + deviceInfo: + description: The device information to send to the server. + type: object + properties: + deviceId: + $ref: '#/components/schemas/deviceId' + clientVersion: + $ref: '#/components/schemas/clientVersion' + clientName: + $ref: '#/components/schemas/clientName' + manufacturer: + $ref: '#/components/schemas/manufacturer' + model: + $ref: '#/components/schemas/model' + sdkVersion: + $ref: '#/components/schemas/sdkVersion' diff --git a/docs/objects/entities/PlaybackSession.yaml b/docs/objects/entities/PlaybackSession.yaml new file mode 100644 index 0000000000..0867e6d4ef --- /dev/null +++ b/docs/objects/entities/PlaybackSession.yaml @@ -0,0 +1,82 @@ +components: + schemas: + playbackSessionId: + description: The playback session identifier. + type: string + format: uuid + playbackSession: + id: + $ref: '#/components/schemas/playbackSessionId' + userId: + $ref: './User.yaml#/components/schemas/userId' + libraryId: + $ref: '../Library.yaml#/components/schemas/libraryId' + libraryItemId: + $ref: '../LibraryItem.yaml#/components/schemas/libraryItemId' + episodeId: + $ref: '../mediaTypes/Podcast.yaml#/components/schemas/episodeId' + nullable: true + mediaType: + $ref: '../../controllers/LibraryItemController.yaml#/components/schemas/libraryMediaType' + mediaMetadata: + description: The metadata of the media. + oneOf: + - $ref: '../mediaTypes/Book.yaml#/components/schemas/bookMinified' + - $ref: '../mediaTypes/Podcast.yaml#/components/schemas/podcastMinified' + chapters: + description: The chapters of the media. + type: array + items: + $ref: '../metadata/BookMetadata.yaml#/components/schemas/bookChapter' + displayTitle: + description: The display title of the media. + type: string + displayAuthor: + description: The display author of the media. + type: string + coverPath: + $ref: '../Book.yaml#/components/schemas/bookCoverPath' + duration: + $ref: '../schemas.yaml#/components/schemas/durationSec' + playMethod: + type: integer + description: The method used to play the media. 0 = Direct play, 1 = Direct Stream, 2 = Transcode, 3 = Local + mediaPlayer: + type: string + description: The media player used to play the media. + deviceInfo: + $ref: './Device.yaml#/components/schemas/deviceInfo' + serverVersion: + $ref: '../schemas.yaml#/components/schemas/serverVersion' + date: + description: TODO + type: String + dayOfWeek: + description: TODO + type: String + timeListening: + $ref: '../schemas.yaml#/components/schemas/durationSec' + startTime: + $ref: '../schemas.yaml#/components/schemas/durationSec' + currentTime: + $ref: '../schemas.yaml#/components/schemas/durationSec' + createdAt: + $ref: '../schemas.yaml#/components/schemas/createdAt' + updatedAt: + $ref: '../schemas.yaml#/components/schemas/updatedAt' + playbackSessionExpanded: + description: Expanded playback session schema. + allOf: + - $ref: '#/components/schemas/playbackSession' + - properties: + audioTracks: + description: The audio tracks of the media. + type: array + items: + $ref: '../files/AudioTrack.yaml#/components/schemas/AudioTrack' + videoTrack: + description: The video track of the media. TODO + type: object + nullable: true + libraryItem: + $ref: '../LibraryItem.yaml#/components/schemas/libraryItem' diff --git a/docs/schemas.yaml b/docs/schemas.yaml index e4e05e8090..ee97e31245 100644 --- a/docs/schemas.yaml +++ b/docs/schemas.yaml @@ -59,6 +59,9 @@ components: type: boolean example: true default: false + serverVersion: + type: string + description: The server version region: description: The region used to search. type: string From 9b3cb4ed33e05062e2aef445a9a28a77cba67522 Mon Sep 17 00:00:00 2001 From: Vito0912 <86927734+Vito0912@users.noreply.github.com> Date: Tue, 30 Jul 2024 17:34:04 +0200 Subject: [PATCH 09/15] Fixed some minor bugs and added to root --- docs/controllers/LibraryItemController.yaml | 8 +- docs/controllers/MeController.yaml | 2 + docs/objects/entities/PlaybackSession.yaml | 120 ++++++++++---------- docs/openapi.json | Bin 298894 -> 316108 bytes docs/root.yaml | 2 + 5 files changed, 72 insertions(+), 60 deletions(-) create mode 100644 docs/controllers/MeController.yaml diff --git a/docs/controllers/LibraryItemController.yaml b/docs/controllers/LibraryItemController.yaml index 60a7699a1b..6a3a346706 100644 --- a/docs/controllers/LibraryItemController.yaml +++ b/docs/controllers/LibraryItemController.yaml @@ -40,7 +40,7 @@ paths: description: TODO oneOf: - $ref: '../objects/LibraryItem.yaml#/components/schemas/libraryItem' - /api/items/{id}/play: + /api/items/{id}/play/{episodeId}: parameters: - name: id in: path @@ -48,6 +48,12 @@ paths: required: true schema: $ref: '../objects/LibraryItem.yaml#/components/schemas/libraryItemId' + - name: episodeId + in: path + description: The ID of the episode to play. + required: false + schema: + $ref: '../objects/mediaTypes/Podcast.yaml#/components/schemas/podcastId' post: operationId: playLibraryItem summary: Play a library item. diff --git a/docs/controllers/MeController.yaml b/docs/controllers/MeController.yaml new file mode 100644 index 0000000000..cf62b84605 --- /dev/null +++ b/docs/controllers/MeController.yaml @@ -0,0 +1,2 @@ +paths: + diff --git a/docs/objects/entities/PlaybackSession.yaml b/docs/objects/entities/PlaybackSession.yaml index 0867e6d4ef..17004fb9fa 100644 --- a/docs/objects/entities/PlaybackSession.yaml +++ b/docs/objects/entities/PlaybackSession.yaml @@ -5,65 +5,67 @@ components: type: string format: uuid playbackSession: - id: - $ref: '#/components/schemas/playbackSessionId' - userId: - $ref: './User.yaml#/components/schemas/userId' - libraryId: - $ref: '../Library.yaml#/components/schemas/libraryId' - libraryItemId: - $ref: '../LibraryItem.yaml#/components/schemas/libraryItemId' - episodeId: - $ref: '../mediaTypes/Podcast.yaml#/components/schemas/episodeId' - nullable: true - mediaType: - $ref: '../../controllers/LibraryItemController.yaml#/components/schemas/libraryMediaType' - mediaMetadata: - description: The metadata of the media. - oneOf: - - $ref: '../mediaTypes/Book.yaml#/components/schemas/bookMinified' - - $ref: '../mediaTypes/Podcast.yaml#/components/schemas/podcastMinified' - chapters: - description: The chapters of the media. - type: array - items: - $ref: '../metadata/BookMetadata.yaml#/components/schemas/bookChapter' - displayTitle: - description: The display title of the media. - type: string - displayAuthor: - description: The display author of the media. - type: string - coverPath: - $ref: '../Book.yaml#/components/schemas/bookCoverPath' - duration: - $ref: '../schemas.yaml#/components/schemas/durationSec' - playMethod: - type: integer - description: The method used to play the media. 0 = Direct play, 1 = Direct Stream, 2 = Transcode, 3 = Local - mediaPlayer: - type: string - description: The media player used to play the media. - deviceInfo: - $ref: './Device.yaml#/components/schemas/deviceInfo' - serverVersion: - $ref: '../schemas.yaml#/components/schemas/serverVersion' - date: - description: TODO - type: String - dayOfWeek: - description: TODO - type: String - timeListening: - $ref: '../schemas.yaml#/components/schemas/durationSec' - startTime: - $ref: '../schemas.yaml#/components/schemas/durationSec' - currentTime: - $ref: '../schemas.yaml#/components/schemas/durationSec' - createdAt: - $ref: '../schemas.yaml#/components/schemas/createdAt' - updatedAt: - $ref: '../schemas.yaml#/components/schemas/updatedAt' + type: object + description: A playback session object. + properties: + id: + $ref: '#/components/schemas/playbackSessionId' + userId: + $ref: './User.yaml#/components/schemas/userId' + libraryId: + $ref: '../Library.yaml#/components/schemas/libraryId' + libraryItemId: + $ref: '../LibraryItem.yaml#/components/schemas/libraryItemId' + episodeId: + $ref: '../mediaTypes/Podcast.yaml#/components/schemas/podcastId' + mediaType: + $ref: '../mediaTypes/media.yaml#/components/schemas/mediaType' + mediaMetadata: + description: The metadata of the media. + oneOf: + - $ref: '../mediaTypes/Book.yaml#/components/schemas/bookMinified' + - $ref: '../mediaTypes/Podcast.yaml#/components/schemas/Podcast' + chapters: + description: The chapters of the media. + type: array + items: + $ref: '../metadata/BookMetadata.yaml#/components/schemas/bookChapter' + displayTitle: + description: The display title of the media. + type: string + displayAuthor: + description: The display author of the media. + type: string + coverPath: + $ref: '../mediaTypes/Book.yaml#/components/schemas/bookCoverPath' + duration: + $ref: '../../schemas.yaml#/components/schemas/durationSec' + playMethod: + type: integer + description: The method used to play the media. 0 = Direct play, 1 = Direct Stream, 2 = Transcode, 3 = Local + mediaPlayer: + type: string + description: The media player used to play the media. + deviceInfo: + $ref: './Device.yaml#/components/schemas/deviceInfo' + serverVersion: + $ref: '../../schemas.yaml#/components/schemas/serverVersion' + date: + description: TODO + type: string + dayOfWeek: + description: TODO + type: string + timeListening: + $ref: '../../schemas.yaml#/components/schemas/durationSec' + startTime: + $ref: '../../schemas.yaml#/components/schemas/durationSec' + currentTime: + $ref: '../../schemas.yaml#/components/schemas/durationSec' + createdAt: + $ref: '../../schemas.yaml#/components/schemas/createdAt' + updatedAt: + $ref: '../../schemas.yaml#/components/schemas/updatedAt' playbackSessionExpanded: description: Expanded playback session schema. allOf: diff --git a/docs/openapi.json b/docs/openapi.json index 9e2e04872117b71a0216be6e3a46df4111b1e161..9c2d854dd463ed36109bfdceab048129adb66f7d 100644 GIT binary patch delta 3045 zcmb7Ge@xtG8GnC#3)h48;P_df@TEmcDdX;FSNr3jhcav{rC@1m>yJ`7y28qVaNR)3 zcElNtiI;=7^2uD@c2G1f zKF{ZQKF{-pFFSAiFe~&le?{ynR4u^*6s3vmwJz4j&au;MX!=jDan8rC zR*tQ=PdB9tCm(a>f~+&qPz^DEBsB>{*8vzB{S-| z={($P;O^9xm|ewxomzivUU;*aG<-hTbi2PQRDf8M+wEtarGat0$c}5%^PvzZt zy{z9lpn(qRCkq`c$jECfJ}e)>RK3hCrDK;cCi5qu%s6ZK;DX$$V=IPxi0@GoO-_W~ zmeu3?WdYm`auZq%QLHB3@xn~y2eabl+Q{r_a(RGtVD{I%1W}Kyc<{{NM=Oh zInqyWu}q$41MuwQJ!YP4%jV`U9Fw!rG*kqydf*sS+5k7N%Wn;2W8Te*qYfzqC2be zXXU}eYA`z^wh=dvCB?2=2Yj#bltZypnXH~R_^EPwi77uBPUfu2%HUbc;7Z&P*1$eX z>oE!)d&LG#X*w?aP8Pw}E1TpFwi|anVoN-0{J>~!A*P(t{eQF{6?wK8=26)l-;I0w z41e-QoUWC%tEbqdd|%j;l^ltceXWV#$WqKhnDMl3R||vQv?M5I!?GSTPYBzxB(|Ou z+tl1GZ>DZH%hT9;N7SbF5P_5`jNFzT@fS7n`bLCKNppD;TxkC*_fjZJiCJ<>Wt{Ql ztSU?VY*KC=|Bt=p!pUQg2+@hK$?d z`*|yYOAQCVx+y=6TNQ>4?|hS2=v-jtgwcTZX1-H}{@IQ8G+Bel1#uPTcH>no~lv4;&N+G(>-CwrTf%5 zB3pP>;`4kjcdLbhVobfw3v_|B#oEiBgT&$U+GgC`EfhT?&Z(k_^}G$E$At^Neo+Ot zU)u4?A4Nd|xPy9c`S?X%Y+>tBct?7Yu-6P~pwT-refb8fI1%0_ZD{$P_$At(6f>D| z_70H}gIeTxu0rlcXrplq6mZH@TK8JK)b;*x;xpl$)MfdKyUl z@zMR!K+*E|tco~7_B5W_AR|;2t67324dj?0^fKGNwAw`9I@D9Im%taM2JU`Kq$GwK z39KuTLZg25;r21&L+LfSH{Lv~)-%4tXnyb>qe@@cy{bSgnflfx$!1BYI;Y%^krUz} z?J)IIB^ve2&etmrKd~~z4pXN;P7HNo_Ndsp0*6Qobs)MA;N~u4ufAY?CoM?Z`ia&y z8aJ(B*@?L)MKj)g*zoH0Z)4)RoKWr;ix9QT3Ai`&y8ku9k=HF<6n$~+BW#dnitbu^ zO6t;x7e##duMjOE=sIPUOAlHP8YO7@mw5WWDp+?^>tZ%{L)5`^7}@y2IeARcEW}^F zE~t#(CuJ;?&?eW1L3nh7s)O&#!e12Q9bY#Hzcj12ksvuY< delta 46 zcmX@JRJd=xP(usj7A6bn$$OYM+PRFFfS7qZmk|p`#PkhCjB=CL6lrZgw~ghWGyrW{ B5EuXe diff --git a/docs/root.yaml b/docs/root.yaml index cc6cf7e111..b920e09a1c 100644 --- a/docs/root.yaml +++ b/docs/root.yaml @@ -83,6 +83,8 @@ paths: $ref: './controllers/AuthController.yaml#/paths/~1logout' /api/items/{id}: $ref: './controllers/LibraryItemController.yaml#/paths/~1api~1items~1{id}' + /api/items/{id}/play/{episodeId}: + $ref: './controllers/LibraryItemController.yaml#/paths/~1api~1items~1{id}~1play~1{episodeId}' tags: - name: Authors description: Author endpoints From b0d85a8dd92173dadae2f1d818c466711c356e82 Mon Sep 17 00:00:00 2001 From: Vito0912 <86927734+Vito0912@users.noreply.github.com> Date: Tue, 30 Jul 2024 17:37:22 +0200 Subject: [PATCH 10/15] Added /api/me endpoint --- docs/controllers/MeController.yaml | 15 ++++++++++++++- docs/openapi.json | Bin 316108 -> 317168 bytes docs/root.yaml | 2 ++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/docs/controllers/MeController.yaml b/docs/controllers/MeController.yaml index cf62b84605..166312f782 100644 --- a/docs/controllers/MeController.yaml +++ b/docs/controllers/MeController.yaml @@ -1,2 +1,15 @@ paths: - + /api/me: + get: + operationId: getMe + summary: Get the current user. + description: Get the current user. + tags: + - Me + responses: + '200': + description: Success + content: + application/json: + schema: + $ref: '../objects/entities/User.yaml#/components/schemas/user' diff --git a/docs/openapi.json b/docs/openapi.json index 9c2d854dd463ed36109bfdceab048129adb66f7d..25cdf1964c9d8090aa18d3d6a9e777a0c87cb78e 100644 GIT binary patch delta 159 zcmX@JRQSVM;f5B*Elf;ClLJbmCMSu@Om?{M#ppZTa5kgttWher|RE9i;lIe+#Eb5aDcBtWzo_;})QH#-ca$t|-zSewpkLZ8hDd nkcDIVyWfmz(+l*NVkRd9nN8lq#L>=W#0135+qsNb4lMux_~tTM delta 32 ncmeycR`|?P;f5B*Elf;C)9+kk;c7Q9V*+C4?FMEn2NnPT)&2|H diff --git a/docs/root.yaml b/docs/root.yaml index b920e09a1c..a706e40410 100644 --- a/docs/root.yaml +++ b/docs/root.yaml @@ -85,6 +85,8 @@ paths: $ref: './controllers/LibraryItemController.yaml#/paths/~1api~1items~1{id}' /api/items/{id}/play/{episodeId}: $ref: './controllers/LibraryItemController.yaml#/paths/~1api~1items~1{id}~1play~1{episodeId}' + /api/me: + $ref: './controllers/MeController.yaml#/paths/~1api~1me' tags: - name: Authors description: Author endpoints From 5e63efd8108f5085d8d3809b489328bb214facb5 Mon Sep 17 00:00:00 2001 From: Vito0912 <86927734+Vito0912@users.noreply.github.com> Date: Tue, 30 Jul 2024 17:44:26 +0200 Subject: [PATCH 11/15] Added two endpoints --- docs/controllers/MeController.yaml | 62 +++++++++++++++++++++++++++++ docs/openapi.json | Bin 317168 -> 322500 bytes docs/root.yaml | 4 ++ 3 files changed, 66 insertions(+) diff --git a/docs/controllers/MeController.yaml b/docs/controllers/MeController.yaml index 166312f782..e8165b3221 100644 --- a/docs/controllers/MeController.yaml +++ b/docs/controllers/MeController.yaml @@ -13,3 +13,65 @@ paths: application/json: schema: $ref: '../objects/entities/User.yaml#/components/schemas/user' + /api/me/progress/{libraryItemId}/{episodeId}: + parameters: + - name: libraryItemId + in: path + description: The ID of the library item. + required: true + schema: + $ref: '../objects/LibraryItem.yaml#/components/schemas/libraryItemId' + - name: episodeId + in: path + description: The ID of the episode to get progress for. + required: false + schema: + $ref: '../objects/mediaTypes/Podcast.yaml#/components/schemas/podcastId' + get: + operationId: getProgress + summary: Get the user's progress for a library item. + description: Get the user's progress for a library item. + tags: + - Me + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '../objects/Media.yaml#/components/schemas/mediaProgress' + '404': + description: Not Found + content: + html/text: + schema: + type: string + example: Not Found + /api/me/progress/{mediaId}: + parameters: + - name: mediaId + in: path + description: The ID of the media progress. + required: true + schema: + $ref: '../objects/Media.yaml#/components/schemas/mediaProgressId' + get: + operationId: getProgressById + summary: Get the user's progress for a media item. + description: Get the user's progress for a media item. + tags: + - Me + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '../objects/Media.yaml#/components/schemas/mediaProgress' + '404': + description: Not Found + content: + html/text: + schema: + type: string + example: Not Found diff --git a/docs/openapi.json b/docs/openapi.json index 25cdf1964c9d8090aa18d3d6a9e777a0c87cb78e..d72acb3e6c09550a6ce5feff97d145f55ca83ea1 100644 GIT binary patch delta 549 zcmeycR`|$u;f5B*Elg@=lLJbmBy$;38T1(n7>XG38Pb7dDnl_4>N8YN7vyDP2BGrgL8;hf9#Z$2yn)8A}mR+_$G8KczX z2U0wfFT`3+7O2Ua?qJBoGyPdEV+3~wLkUAJLk`e`CDUum7>y@SxV2!qg(1@md8~l| zRGZ3>!jQ?3IK5GtsdjSB3ob^_$&C|xr+@HbF`Ing1>58RTdTEoqnYSC5 Iu^dJ_k;c92`W&&d7?JV9b2NnPT*=-Ba diff --git a/docs/root.yaml b/docs/root.yaml index a706e40410..ff2c6f21fc 100644 --- a/docs/root.yaml +++ b/docs/root.yaml @@ -87,6 +87,10 @@ paths: $ref: './controllers/LibraryItemController.yaml#/paths/~1api~1items~1{id}~1play~1{episodeId}' /api/me: $ref: './controllers/MeController.yaml#/paths/~1api~1me' + /api/me/progress/{libraryItemId}/{episodeId}: + $ref: './controllers/MeController.yaml#/paths/~1api~1me~1progress~1{libraryItemId}~1{episodeId}' + /api/me/progress/{mediaId}: + $ref: './controllers/MeController.yaml#/paths/~1api~1me~1progress~1{mediaId}' tags: - name: Authors description: Author endpoints From 811893f0fe7594fe883cb181001bc809a9846bb7 Mon Sep 17 00:00:00 2001 From: Vito0912 <86927734+Vito0912@users.noreply.github.com> Date: Tue, 30 Jul 2024 17:56:05 +0200 Subject: [PATCH 12/15] ABOVE NOT TESTED - Added sync endpoint --- docs/controllers/SessionController.yaml | 55 ++++++++++++++++++++++++ docs/openapi.json | Bin 322500 -> 327344 bytes docs/root.yaml | 2 + 3 files changed, 57 insertions(+) create mode 100644 docs/controllers/SessionController.yaml diff --git a/docs/controllers/SessionController.yaml b/docs/controllers/SessionController.yaml new file mode 100644 index 0000000000..70cab2843d --- /dev/null +++ b/docs/controllers/SessionController.yaml @@ -0,0 +1,55 @@ +paths: + /api/session/{id}/sync: + post: + operationId: syncOpenSession + summary: Sync an open session. + description: Sync an open session. + tags: + - Session + parameters: + - name: id + in: path + description: The ID of the session. + required: true + schema: + $ref: '../objects/entities/PlaybackSession.yaml#/components/schemas/playbackSessionId' + - name: currentTime + in: query + description: The current time of the session. + required: true + schema: + $ref: '../schemas.yaml#/components/schemas/durationSec' + - name: timeListened + in: query + description: The time listened to the session. + required: true + schema: + $ref: '../schemas.yaml#/components/schemas/durationSec' + - name: duration + in: query + description: The duration of the session. + required: true + schema: + $ref: '../schemas.yaml#/components/schemas/durationSec' + responses: + '200': + description: OK + content: + html/text: + schema: + type: string + example: OK + '404': + description: No listening session with the provided ID is open, or the session belongs to another user. + content: + html/text: + schema: + type: string + example: Not Found + '500': + description: There was an error syncing the session. + content: + html/text: + schema: + type: string + example: Internal Server Error diff --git a/docs/openapi.json b/docs/openapi.json index d72acb3e6c09550a6ce5feff97d145f55ca83ea1..c5edd27062000ca9547876cbe9f45d5a7972a069 100644 GIT binary patch delta 834 zcma)4O=uHA6n-;#CK_r8jnYz@bedKxQreXs3~D6@1)B(s^dN$u(ZnWFn{{_lLaDkY?5bowWK!?9eJ#5~&$`n6Jv0Q=jArm zn(LrvTf93^;&z*J<{V#53eK>1%2U>)SLv|rtE1Aav1t6E9MHsyR2!LLS)=+F4By18tT0&>0dI{*Lx delta 32 ncmdn+SNOrqB7u!qxsEmI;WNw||IbIj{f#2$c`Q diff --git a/docs/root.yaml b/docs/root.yaml index ff2c6f21fc..63462a22ce 100644 --- a/docs/root.yaml +++ b/docs/root.yaml @@ -91,6 +91,8 @@ paths: $ref: './controllers/MeController.yaml#/paths/~1api~1me~1progress~1{libraryItemId}~1{episodeId}' /api/me/progress/{mediaId}: $ref: './controllers/MeController.yaml#/paths/~1api~1me~1progress~1{mediaId}' + /api/session/{id}/sync: + $ref: './controllers/SessionController.yaml#/paths/~1api~1session~1{id}~1sync' tags: - name: Authors description: Author endpoints From 7274b87aca6b359d626638a92a0931e5b9dca104 Mon Sep 17 00:00:00 2001 From: Vito0912 <86927734+Vito0912@users.noreply.github.com> Date: Thu, 1 Aug 2024 19:42:24 +0200 Subject: [PATCH 13/15] Added some new endpoints --- docs/controllers/MeController.yaml | 130 ++++++++++++++++++ docs/controllers/SessionController.yaml | 170 ++++++++++++++++++++++++ docs/openapi.json | Bin 327344 -> 353792 bytes docs/root.yaml | 18 +++ 4 files changed, 318 insertions(+) diff --git a/docs/controllers/MeController.yaml b/docs/controllers/MeController.yaml index e8165b3221..b461ea8862 100644 --- a/docs/controllers/MeController.yaml +++ b/docs/controllers/MeController.yaml @@ -1,3 +1,9 @@ +components: + schemas: + totalTime: + description: The total time listened in seconds. + type: integer + example: 123456 paths: /api/me: get: @@ -75,3 +81,127 @@ paths: schema: type: string example: Not Found + /api/me/listening-sessions: + get: + operationId: getListeningSessions + summary: Get all listening sessions for the current user. + description: Get all listening sessions for the current user. + tags: + - Me + parameters: + - name: itemsPerPage + in: query + description: The number of items per page. + required: true + schema: + $ref: '../schemas.yaml#/components/schemas/limit' + - name: page + in: query + description: The page number (zero indexed) to return. + required: true + schema: + $ref: '../schemas.yaml#/components/schemas/page' + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + properties: + total: + $ref: '../schemas.yaml#/components/schemas/total' + numPages: + description: The number of pages. + type: integer + itemsPerPage: + $ref: '../schemas.yaml#/components/schemas/limit' + sessions: + type: array + items: + $ref: '../objects/entities/PlaybackSession.yaml#/components/schemas/playbackSession' + /api/me/items-in-progress: + get: + operationId: getItemsInProgress + summary: Get all items in progress for the current user. + description: Get all items in progress for the current user. + tags: + - Me + parameters: + - name: limit + in: query + description: The number of items to return. + required: false + schema: + $ref: '../schemas.yaml#/components/schemas/limit' + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + properties: + total: + $ref: '../schemas.yaml#/components/schemas/total' + numPages: + description: The number of pages. + type: integer + itemsPerPage: + $ref: '../schemas.yaml#/components/schemas/limit' + items: + type: array + items: + $ref: '../objects/LibraryItem.yaml#/components/schemas/libraryItemMinified' + /api/me/listening-stats: + get: + operationId: getListeningStats + summary: Get listening stats for the current user. + description: Get listening stats for the current user. + tags: + - Me + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + properties: + totalTime: + $ref: '#/components/schemas/totalTime' + items: + type: object + description: A list of library items the user has listened to, keyed by their item IDs. + additionalProperties: + type: object + properties: + id: + type: string + description: The ID of the library item. + timeListening: + type: integer + description: The time (in seconds) the user listened to this library item. + mediaMetadata: + oneOf: + - $ref: '../objects/metadata/BookMetadata.yaml#/components/schemas/bookMetadata' + - $ref: '../objects/metadata/PodcastMetadata.yaml#/components/schemas/PodcastMetadata' + days: + type: object + description: A mapping of days to total listening times. + additionalProperties: + type: integer + description: The total time (in seconds) listened to on that day. + dayOfWeek: + type: object + description: A mapping of days of the week to total listening times. + additionalProperties: + type: integer + description: The total time (in seconds) listened to on that day of the week. + today: + type: integer + description: The time (in seconds) the user has listened to library items today. + recentSessions: + type: array + items: + $ref: '../objects/entities/PlaybackSession.yaml#/components/schemas/playbackSession' diff --git a/docs/controllers/SessionController.yaml b/docs/controllers/SessionController.yaml index 70cab2843d..3a1f17057f 100644 --- a/docs/controllers/SessionController.yaml +++ b/docs/controllers/SessionController.yaml @@ -53,3 +53,173 @@ paths: schema: type: string example: Internal Server Error + /api/sessions/{id}: + delete: + operationId: deleteSession + summary: Delets a listening session. + description: Deletes a listening session. + tags: + - Session + parameters: + - name: id + in: path + description: The ID of the session. + required: true + schema: + $ref: '../objects/entities/PlaybackSession.yaml#/components/schemas/playbackSessionId' + responses: + '200': + description: OK + content: + html/text: + schema: + type: string + example: OK + '403': + description: A user with delete permissions is required to delete sessions. + content: + html/text: + schema: + type: string + example: Forbidden + '404': + description: No listening session with the provided ID was found. + content: + html/text: + schema: + type: string + example: Not Found + /api/session/{id}/close: + post: + operationId: closeSession + summary: Close a listening session. + description: Close a listening session. + tags: + - Session + parameters: + - name: id + in: path + description: The ID of the session. + required: true + schema: + $ref: '../objects/entities/PlaybackSession.yaml#/components/schemas/playbackSessionId' + - name: currentTime + in: query + description: The current time of the session. + required: false + schema: + $ref: '../schemas.yaml#/components/schemas/durationSec' + - name: timeListened + in: query + description: The time listened to the session. + required: false + schema: + $ref: '../schemas.yaml#/components/schemas/durationSec' + - name: duration + in: query + description: The duration of the session. + required: false + schema: + $ref: '../schemas.yaml#/components/schemas/durationSec' + responses: + '200': + description: OK + content: + html/text: + schema: + type: string + example: OK + '404': + description: No listening session with the provided ID is open, or the session belongs to another user. + content: + html/text: + schema: + type: string + example: Not Found + /api/session/{id}: + get: + operationId: getSession + summary: Get a listening session. + description: Get a listening session. + tags: + - Session + parameters: + - name: id + in: path + description: The ID of the session. + required: true + schema: + $ref: '../objects/entities/PlaybackSession.yaml#/components/schemas/playbackSessionId' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '../objects/entities/PlaybackSession.yaml#/components/schemas/playbackSessionExpanded' + '404': + description: No listening session with the provided ID was found. + content: + html/text: + schema: + type: string + example: Not Found + /api/sessions: + get: + operationId: getSessions + summary: Get all listening sessions. + description: Get all listening sessions. + tags: + - Session + parameters: + - name: user + in: query + description: The ID of the user to filter listening sessions by. + required: false + schema: + $ref: '../objects/entities/User.yaml#/components/schemas/userId' + - name: itemsPerPage + in: query + description: The number of items to return. + required: false + schema: + $ref: '../schemas.yaml#/components/schemas/limit' + - name: page + in: query + description: The page number (zero indexed) to return. + required: false + schema: + $ref: '../schemas.yaml#/components/schemas/page' + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + properties: + results: + type: array + items: + $ref: '../objects/LibraryItem.yaml#/components/schemas/libraryItemBase' + total: + $ref: '../schemas.yaml#/components/schemas/total' + itemsPerPage: + $ref: '../schemas.yaml#/components/schemas/limit' + numPages: + description: The number of pages. + type: integer + example: 10 + userFilter: + description: If provided, the `user` parameter. + sessions: + type: array + items: + $ref: '../objects/entities/PlaybackSession.yaml#/components/schemas/playbackSession' + '404': + description: No listening sessions were found. + content: + html/text: + schema: + type: string + example: Not Found diff --git a/docs/openapi.json b/docs/openapi.json index c5edd27062000ca9547876cbe9f45d5a7972a069..97ce3d814827371d8afee1ed3080965b5fba1ec1 100644 GIT binary patch delta 2994 zcmcguYfMvT7(U;3zFw?oDiq|ldO%Qyz*=r&%Jkqi!Ya|C&ap&iQBlmW6u}U8G3ay} zXEwrTcoQWC{KI|_SE5@t;je8iA8>9x_V_3vH7@LOA(pITX^78d^IzLV0-W@dVA2gD{pplNO;qJyn zaQ{HGJ1}D@$>xr()uvTaHC}6g`eo!q#l7ATzKYWtP|`45d-3L1UZHLoI$9rD|Alkj*9yQ1LrU zg4>6fZ3gBd-0N{e=XpAxt7%1mCT~D*8_DAS^-ORQb%@8A_mjBe69&E-lEyny?6XEU(AC6jXS|@F$K^*ewokGrvbHer28jo( ztLT-$M-|jUwD$nM_v?>h>tF;lF2+48-5T-`zl_>=rYVuTrYGC zj&=aizDlPA;yxVcVu@V6=^Asf+e%8fvMUOXS5iA{Z=!aN4kA_*uI6Nb?=E5RX*oS6 z??51jznBk-i4=k3I#~!ee9Ro9AdPj1*Jfm_R!}N!*R-O^V*{`6PJv(-F>?3waXM5% zyIc(3c9sUpLSpCcUyFH*DLO{n+=jfng$4XyC2fKFugF`_@v)o?NB(3AwC$&8Q!&v5}kMf{aioY2Yb?F_4i*^CNUR zzTOIkYh6Wn?~13YG02>99c6N%ILp-vMT`_P#J9`wphnRsSbCJ%+CE^GmnLRZjYCH7OrkK} zK+1RGN33nYr*Nrk#ZIH3DD~c>NH0q-Lg!DU06f1S5mp1XKJSq1LeI8v2zDMa;Xree zGQCXP19ArL+rgJ8+qk2!NIUGVq8Xq>p_U5o$qFvTi^{`qOyy~;=7-nV!tkv$XtrTr z6G&*+9Q$ZA^dF*$aQYClfNLd9ma&4s8Aa#(!yI=!z_F$xAo&+rzA!1`EdwaUg_R`2Od-{1 zuAaoSaS~%&Y&C2`W$fga&o2t2G)5F#whi}u_@|e?g0o^XVy@l5HV~d3VulDo)#A!T z9>cd9@%}cbAMKUgU56Y*&@0?Q@eMbd<2xSF>v}+p1V`3OjGwEN_1m{{7Qy^MpH7fCc$@np~@R*D-CY_b=02z&S zawLR;nW0Wl2vwc<^GpaVJiI26aCGdX@C!XB;jcX%4^0o6zlbq~!_xsmT{Kx_SI@Y_FTaVZxn@~Dfx3FALvCiOZpKODWlO>9Tio_(I?v!$+ dJSkr)kP6{U332l7?U~S0BF_v2e`KMgzX2TFzs~>w delta 64 zcmZoTBf8-dlON>C UO+FK(HT}R*Ccf Date: Sun, 4 Aug 2024 00:00:32 -0700 Subject: [PATCH 14/15] Schema updates from August 3 (#1) * Update: formatting * Fix: libraryItemController `play` endpoint + Endpoints cannot have optional path parameters + Moved schemas to `components` section * Fix: MeController optional path parameters * Fix: Books do not have `episodeId` in `mediaProgress` * Fix: `PlaybackSession` oneOf between book and podcast * Update: bundled spec * Fix: `allowReserved` in LibraryItem include query * Add: tags to AuthController endpoints * Fix: summary of play endpoints * Update: bundled spec --- docs/controllers/AuthController.yaml | 7 +- docs/controllers/LibraryItemController.yaml | 192 +++++++++----- docs/controllers/MeController.yaml | 238 +++++++++--------- docs/controllers/SessionController.yaml | 266 ++++++++++---------- docs/objects/Bookmarks.yaml | 4 +- docs/objects/LibraryItem.yaml | 20 +- docs/objects/Media.yaml | 68 +++-- docs/objects/entities/Device.yaml | 40 +-- docs/objects/entities/PlaybackSession.yaml | 79 ++++-- docs/objects/files/AudioFile.yaml | 31 ++- docs/objects/metadata/BookMetadata.yaml | 35 +-- docs/openapi.json | Bin 353792 -> 177228 bytes docs/root.yaml | 6 +- 13 files changed, 553 insertions(+), 433 deletions(-) diff --git a/docs/controllers/AuthController.yaml b/docs/controllers/AuthController.yaml index 62c71b1c16..0b148feea8 100644 --- a/docs/controllers/AuthController.yaml +++ b/docs/controllers/AuthController.yaml @@ -4,6 +4,8 @@ paths: summary: Login to the server description: Logs in a client to the server, returning information about the user and server. operationId: login + tags: + - Auth requestBody: required: true content: @@ -15,9 +17,6 @@ paths: $ref: '../objects/entities/User.yaml#/components/schemas/username' password: $ref: '../objects/entities/User.yaml#/components/schemas/password' - required: - - username - - password responses: '200': description: Success @@ -40,6 +39,8 @@ paths: summary: Logout from the server description: Logs out a client from the server. If the socketId parameter is provided, the server removes the socket from the client list. operationId: logout + tags: + - Auth requestBody: required: true content: diff --git a/docs/controllers/LibraryItemController.yaml b/docs/controllers/LibraryItemController.yaml index 6a3a346706..013b94a6fb 100644 --- a/docs/controllers/LibraryItemController.yaml +++ b/docs/controllers/LibraryItemController.yaml @@ -1,3 +1,69 @@ +components: + schemas: + parameters: + include: + in: query + name: include + description: A comma separated list of what to include with the library item. The options are progress, rssfeed, authors (for books), and downloads (for podcasts). expanded must be 1 for include to have an effect. + allowReserved: true + schema: + type: string + expanded: + in: query + name: expanded + description: Whether to return Library Item Expanded instead. 0 for false, 1 for true. + schema: + type: integer + example: 1 + episode: + in: query + name: episode + description: If requesting progress for a podcast, the episode ID to get progress for. + schema: + $ref: '../objects/mediaTypes/Podcast.yaml#/components/schemas/podcastId' + deviceInfo: + in: query + name: deviceInfo + description: The device information to send to the server. + schema: + $ref: '../objects/entities/Device.yaml#/components/schemas/deviceInfo' + forceDirectPlay: + in: query + name: forceDirectPlay + description: Whether to force direct play of the library item. + schema: + type: boolean + example: false + forceTranscode: + in: query + name: forceTranscode + description: Whether to force transcoding of the library item. + schema: + type: boolean + example: false + supportedMimeTypes: + in: query + name: supportedMimeTypes + description: The supported mime types for the device. + schema: + type: array + items: + type: string + mediaPlayer: + in: query + name: mediaPlayer + description: The media player to use. + schema: + type: string + responses: + libraryItem404: + description: Not Found + content: + text/html: + schema: + type: string + description: The library item does not exist. + example: Not Found paths: /api/items/{id}: parameters: @@ -14,32 +80,50 @@ paths: tags: - LibraryItem parameters: - - in: query - name: include - description: A comma separated list of what to include with the library item. The options are progress, rssfeed, authors (for books), and downloads (for podcasts). expanded must be 1 for include to have an effect. - schema: - type: string - - in: query - name: expanded - description: Whether to return Library Item Expanded instead. 0 for false, 1 for true. - schema: - type: integer - example: 1 - - in: query - name: episode - description: If requesting progress for a podcast, the episode ID to get progress for. - schema: - $ref: '../objects/mediaTypes/Podcast.yaml#/components/schemas/podcastId' + - $ref: '#/components/schemas/parameters/include' + - $ref: '#/components/schemas/parameters/expanded' + - $ref: '#/components/schemas/parameters/episode' + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + description: TODO + oneOf: + - $ref: '../objects/LibraryItem.yaml#/components/schemas/libraryItem' + '404': + $ref: '#/components/responses/libraryItem404' + /api/items/{id}/play: + parameters: + - name: id + in: path + description: The ID of the library item. + required: true + schema: + $ref: '../objects/LibraryItem.yaml#/components/schemas/libraryItemId' + post: + operationId: playLibraryItem + summary: Play a library item + description: Play a library item by ID. + tags: + - LibraryItem + parameters: + - $ref: '#/components/schemas/parameters/deviceInfo' + - $ref: '#/components/schemas/parameters/forceDirectPlay' + - $ref: '#/components/schemas/parameters/forceTranscode' + - $ref: '#/components/schemas/parameters/supportedMimeTypes' + - $ref: '#/components/schemas/parameters/mediaPlayer' responses: '200': - description: OK - content: - application/json: - schema: - type: object - description: TODO - oneOf: - - $ref: '../objects/LibraryItem.yaml#/components/schemas/libraryItem' + description: OK + content: + application/json: + schema: + $ref: '../objects/entities/PlaybackSession.yaml#/components/schemas/playbackSessionExpanded' + '404': + $ref: '#/components/responses/libraryItem404' /api/items/{id}/play/{episodeId}: parameters: - name: id @@ -51,57 +135,27 @@ paths: - name: episodeId in: path description: The ID of the episode to play. - required: false + required: true schema: $ref: '../objects/mediaTypes/Podcast.yaml#/components/schemas/podcastId' post: - operationId: playLibraryItem - summary: Play a library item. - description: Play a library item. + operationId: playLibraryItemPodcastEpisode + summary: Play a podcast episode + description: Play a podcast by library item ID and episode ID. tags: - LibraryItem parameters: - - in: query - name: deviceInfo - description: The device information to send to the server. - schema: - $ref: '../objects/entities/Device.yaml#/components/schemas/deviceInfo' - - in: query - name: forceDirectPlay - description: Whether to force direct play of the library item. - schema: - type: boolean - example: false - - in: query - name: forceTranscode - description: Whether to force transcoding of the library item. - schema: - type: boolean - example: false - - in: query - name: supportedMimeTypes - description: The supported mime types for the device. - schema: - type: array - items: - type: string - - in: query - name: mediaPlayer - description: The media player to use. - schema: - type: string + - $ref: '#/components/schemas/parameters/deviceInfo' + - $ref: '#/components/schemas/parameters/forceDirectPlay' + - $ref: '#/components/schemas/parameters/forceTranscode' + - $ref: '#/components/schemas/parameters/supportedMimeTypes' + - $ref: '#/components/schemas/parameters/mediaPlayer' responses: '200': - description: OK - content: - application/json: - schema: - $ref: '../objects/entities/PlaybackSession.yaml#/components/schemas/playbackSessionExpanded' + description: OK + content: + application/json: + schema: + $ref: '../objects/entities/PlaybackSession.yaml#/components/schemas/playbackSessionExpanded' '404': - description: Not Found - content: - text/html: - schema: - type: string - description: The library item does not have any audio tracks to play. - example: Not Found + $ref: '#/components/responses/libraryItem404' diff --git a/docs/controllers/MeController.yaml b/docs/controllers/MeController.yaml index b461ea8862..6cf1c5a72e 100644 --- a/docs/controllers/MeController.yaml +++ b/docs/controllers/MeController.yaml @@ -4,6 +4,14 @@ components: description: The total time listened in seconds. type: integer example: 123456 + responses: + me404: + description: Not Found + content: + html/text: + schema: + type: string + example: Not Found paths: /api/me: get: @@ -14,12 +22,12 @@ paths: - Me responses: '200': - description: Success - content: - application/json: - schema: - $ref: '../objects/entities/User.yaml#/components/schemas/user' - /api/me/progress/{libraryItemId}/{episodeId}: + description: Success + content: + application/json: + schema: + $ref: '../objects/entities/User.yaml#/components/schemas/user' + /api/me/progress/{libraryItemId}: parameters: - name: libraryItemId in: path @@ -27,60 +35,50 @@ paths: required: true schema: $ref: '../objects/LibraryItem.yaml#/components/schemas/libraryItemId' - - name: episodeId - in: path - description: The ID of the episode to get progress for. - required: false - schema: - $ref: '../objects/mediaTypes/Podcast.yaml#/components/schemas/podcastId' get: - operationId: getProgress + operationId: getProgressLibraryItem summary: Get the user's progress for a library item. description: Get the user's progress for a library item. tags: - Me responses: '200': - description: OK - content: - application/json: - schema: - $ref: '../objects/Media.yaml#/components/schemas/mediaProgress' + description: OK + content: + application/json: + schema: + $ref: '../objects/Media.yaml#/components/schemas/mediaProgress' '404': - description: Not Found - content: - html/text: - schema: - type: string - example: Not Found - /api/me/progress/{mediaId}: + $ref: '#/components/responses/me404' + /api/me/progress/{libraryItemId}/{episodeId}: parameters: - - name: mediaId + - name: libraryItemId in: path - description: The ID of the media progress. + description: The ID of the library item. required: true schema: - $ref: '../objects/Media.yaml#/components/schemas/mediaProgressId' + $ref: '../objects/LibraryItem.yaml#/components/schemas/libraryItemId' + - name: episodeId + in: path + description: The ID of the episode to get progress for. + required: true + schema: + $ref: '../objects/mediaTypes/Podcast.yaml#/components/schemas/podcastId' get: - operationId: getProgressById - summary: Get the user's progress for a media item. - description: Get the user's progress for a media item. + operationId: getProgressPodcastEpisode + summary: Get the user's progress for a podcast episode. + description: Get the user's progress for a podcast episode. tags: - Me responses: '200': - description: OK - content: - application/json: - schema: - $ref: '../objects/Media.yaml#/components/schemas/mediaProgress' + description: OK + content: + application/json: + schema: + $ref: '../objects/Media.yaml#/components/schemas/mediaProgressPodcastEpisode' '404': - description: Not Found - content: - html/text: - schema: - type: string - example: Not Found + $ref: '#/components/responses/me404' /api/me/listening-sessions: get: operationId: getListeningSessions @@ -94,32 +92,32 @@ paths: description: The number of items per page. required: true schema: - $ref: '../schemas.yaml#/components/schemas/limit' + $ref: '../schemas.yaml#/components/schemas/limit' - name: page in: query description: The page number (zero indexed) to return. required: true schema: - $ref: '../schemas.yaml#/components/schemas/page' + $ref: '../schemas.yaml#/components/schemas/page' responses: '200': - description: OK - content: - application/json: - schema: - type: object - properties: - total: - $ref: '../schemas.yaml#/components/schemas/total' - numPages: - description: The number of pages. - type: integer - itemsPerPage: - $ref: '../schemas.yaml#/components/schemas/limit' - sessions: - type: array - items: - $ref: '../objects/entities/PlaybackSession.yaml#/components/schemas/playbackSession' + description: OK + content: + application/json: + schema: + type: object + properties: + total: + $ref: '../schemas.yaml#/components/schemas/total' + numPages: + description: The number of pages. + type: integer + itemsPerPage: + $ref: '../schemas.yaml#/components/schemas/limit' + sessions: + type: array + items: + $ref: '../objects/entities/PlaybackSession.yaml#/components/schemas/playbackSession' /api/me/items-in-progress: get: operationId: getItemsInProgress @@ -133,26 +131,26 @@ paths: description: The number of items to return. required: false schema: - $ref: '../schemas.yaml#/components/schemas/limit' + $ref: '../schemas.yaml#/components/schemas/limit' responses: '200': - description: OK - content: - application/json: - schema: - type: object - properties: - total: - $ref: '../schemas.yaml#/components/schemas/total' - numPages: - description: The number of pages. - type: integer - itemsPerPage: - $ref: '../schemas.yaml#/components/schemas/limit' - items: - type: array - items: - $ref: '../objects/LibraryItem.yaml#/components/schemas/libraryItemMinified' + description: OK + content: + application/json: + schema: + type: object + properties: + total: + $ref: '../schemas.yaml#/components/schemas/total' + numPages: + description: The number of pages. + type: integer + itemsPerPage: + $ref: '../schemas.yaml#/components/schemas/limit' + items: + type: array + items: + $ref: '../objects/LibraryItem.yaml#/components/schemas/libraryItemMinified' /api/me/listening-stats: get: operationId: getListeningStats @@ -162,46 +160,46 @@ paths: - Me responses: '200': - description: OK - content: - application/json: - schema: + description: OK + content: + application/json: + schema: + type: object + properties: + totalTime: + $ref: '#/components/schemas/totalTime' + items: + type: object + description: A list of library items the user has listened to, keyed by their item IDs. + additionalProperties: type: object properties: - totalTime: - $ref: '#/components/schemas/totalTime' - items: - type: object - description: A list of library items the user has listened to, keyed by their item IDs. - additionalProperties: - type: object - properties: - id: - type: string - description: The ID of the library item. - timeListening: - type: integer - description: The time (in seconds) the user listened to this library item. - mediaMetadata: - oneOf: - - $ref: '../objects/metadata/BookMetadata.yaml#/components/schemas/bookMetadata' - - $ref: '../objects/metadata/PodcastMetadata.yaml#/components/schemas/PodcastMetadata' - days: - type: object - description: A mapping of days to total listening times. - additionalProperties: - type: integer - description: The total time (in seconds) listened to on that day. - dayOfWeek: - type: object - description: A mapping of days of the week to total listening times. - additionalProperties: - type: integer - description: The total time (in seconds) listened to on that day of the week. - today: - type: integer - description: The time (in seconds) the user has listened to library items today. - recentSessions: - type: array - items: - $ref: '../objects/entities/PlaybackSession.yaml#/components/schemas/playbackSession' + id: + type: string + description: The ID of the library item. + timeListening: + type: integer + description: The time (in seconds) the user listened to this library item. + mediaMetadata: + oneOf: + - $ref: '../objects/metadata/BookMetadata.yaml#/components/schemas/bookMetadata' + - $ref: '../objects/metadata/PodcastMetadata.yaml#/components/schemas/PodcastMetadata' + days: + type: object + description: A mapping of days to total listening times. + additionalProperties: + type: integer + description: The total time (in seconds) listened to on that day. + dayOfWeek: + type: object + description: A mapping of days of the week to total listening times. + additionalProperties: + type: integer + description: The total time (in seconds) listened to on that day of the week. + today: + type: integer + description: The time (in seconds) the user has listened to library items today. + recentSessions: + type: array + items: + $ref: '../objects/entities/PlaybackSession.yaml#/components/schemas/playbackSession' diff --git a/docs/controllers/SessionController.yaml b/docs/controllers/SessionController.yaml index 3a1f17057f..20c97e4034 100644 --- a/docs/controllers/SessionController.yaml +++ b/docs/controllers/SessionController.yaml @@ -18,41 +18,41 @@ paths: description: The current time of the session. required: true schema: - $ref: '../schemas.yaml#/components/schemas/durationSec' + $ref: '../schemas.yaml#/components/schemas/durationSec' - name: timeListened in: query description: The time listened to the session. required: true schema: - $ref: '../schemas.yaml#/components/schemas/durationSec' + $ref: '../schemas.yaml#/components/schemas/durationSec' - name: duration in: query description: The duration of the session. required: true schema: - $ref: '../schemas.yaml#/components/schemas/durationSec' + $ref: '../schemas.yaml#/components/schemas/durationSec' responses: '200': - description: OK - content: - html/text: - schema: - type: string - example: OK + description: OK + content: + html/text: + schema: + type: string + example: OK '404': - description: No listening session with the provided ID is open, or the session belongs to another user. - content: - html/text: - schema: - type: string - example: Not Found + description: No listening session with the provided ID is open, or the session belongs to another user. + content: + html/text: + schema: + type: string + example: Not Found '500': - description: There was an error syncing the session. - content: - html/text: - schema: - type: string - example: Internal Server Error + description: There was an error syncing the session. + content: + html/text: + schema: + type: string + example: Internal Server Error /api/sessions/{id}: delete: operationId: deleteSession @@ -69,26 +69,26 @@ paths: $ref: '../objects/entities/PlaybackSession.yaml#/components/schemas/playbackSessionId' responses: '200': - description: OK - content: - html/text: - schema: - type: string - example: OK + description: OK + content: + html/text: + schema: + type: string + example: OK '403': - description: A user with delete permissions is required to delete sessions. - content: - html/text: - schema: - type: string - example: Forbidden + description: A user with delete permissions is required to delete sessions. + content: + html/text: + schema: + type: string + example: Forbidden '404': - description: No listening session with the provided ID was found. - content: - html/text: - schema: - type: string - example: Not Found + description: No listening session with the provided ID was found. + content: + html/text: + schema: + type: string + example: Not Found /api/session/{id}/close: post: operationId: closeSession @@ -123,103 +123,103 @@ paths: $ref: '../schemas.yaml#/components/schemas/durationSec' responses: '200': - description: OK - content: - html/text: - schema: - type: string - example: OK + description: OK + content: + html/text: + schema: + type: string + example: OK '404': - description: No listening session with the provided ID is open, or the session belongs to another user. - content: - html/text: - schema: - type: string - example: Not Found + description: No listening session with the provided ID is open, or the session belongs to another user. + content: + html/text: + schema: + type: string + example: Not Found /api/session/{id}: get: - operationId: getSession - summary: Get a listening session. - description: Get a listening session. - tags: - - Session - parameters: - - name: id - in: path - description: The ID of the session. - required: true + operationId: getSession + summary: Get a listening session. + description: Get a listening session. + tags: + - Session + parameters: + - name: id + in: path + description: The ID of the session. + required: true + schema: + $ref: '../objects/entities/PlaybackSession.yaml#/components/schemas/playbackSessionId' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '../objects/entities/PlaybackSession.yaml#/components/schemas/playbackSessionExpanded' + '404': + description: No listening session with the provided ID was found. + content: + html/text: schema: - $ref: '../objects/entities/PlaybackSession.yaml#/components/schemas/playbackSessionId' - responses: - '200': - description: OK - content: - application/json: - schema: - $ref: '../objects/entities/PlaybackSession.yaml#/components/schemas/playbackSessionExpanded' - '404': - description: No listening session with the provided ID was found. - content: - html/text: - schema: - type: string - example: Not Found + type: string + example: Not Found /api/sessions: get: - operationId: getSessions - summary: Get all listening sessions. - description: Get all listening sessions. - tags: - - Session - parameters: - - name: user - in: query - description: The ID of the user to filter listening sessions by. - required: false - schema: - $ref: '../objects/entities/User.yaml#/components/schemas/userId' - - name: itemsPerPage - in: query - description: The number of items to return. - required: false - schema: - $ref: '../schemas.yaml#/components/schemas/limit' - - name: page - in: query - description: The page number (zero indexed) to return. - required: false - schema: - $ref: '../schemas.yaml#/components/schemas/page' - responses: - '200': - description: OK - content: - application/json: - schema: - type: object - properties: - results: - type: array - items: - $ref: '../objects/LibraryItem.yaml#/components/schemas/libraryItemBase' - total: - $ref: '../schemas.yaml#/components/schemas/total' - itemsPerPage: - $ref: '../schemas.yaml#/components/schemas/limit' - numPages: - description: The number of pages. - type: integer - example: 10 - userFilter: - description: If provided, the `user` parameter. - sessions: - type: array - items: - $ref: '../objects/entities/PlaybackSession.yaml#/components/schemas/playbackSession' - '404': - description: No listening sessions were found. - content: - html/text: - schema: - type: string - example: Not Found + operationId: getSessions + summary: Get all listening sessions. + description: Get all listening sessions. + tags: + - Session + parameters: + - name: user + in: query + description: The ID of the user to filter listening sessions by. + required: false + schema: + $ref: '../objects/entities/User.yaml#/components/schemas/userId' + - name: itemsPerPage + in: query + description: The number of items to return. + required: false + schema: + $ref: '../schemas.yaml#/components/schemas/limit' + - name: page + in: query + description: The page number (zero indexed) to return. + required: false + schema: + $ref: '../schemas.yaml#/components/schemas/page' + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + properties: + results: + type: array + items: + $ref: '../objects/LibraryItem.yaml#/components/schemas/libraryItemBase' + total: + $ref: '../schemas.yaml#/components/schemas/total' + itemsPerPage: + $ref: '../schemas.yaml#/components/schemas/limit' + numPages: + description: The number of pages. + type: integer + example: 10 + userFilter: + description: If provided, the `user` parameter. + sessions: + type: array + items: + $ref: '../objects/entities/PlaybackSession.yaml#/components/schemas/playbackSession' + '404': + description: No listening sessions were found. + content: + html/text: + schema: + type: string + example: Not Found diff --git a/docs/objects/Bookmarks.yaml b/docs/objects/Bookmarks.yaml index 0099b42cc3..07fd3256ba 100644 --- a/docs/objects/Bookmarks.yaml +++ b/docs/objects/Bookmarks.yaml @@ -7,7 +7,7 @@ components: bookmark: properties: libraryItemId: - $ref: 'LibraryItem.yaml#/components/schemas/libraryItemId' + $ref: './LibraryItem.yaml#/components/schemas/libraryItemId' title: type: string description: The title of the bookmark. @@ -15,4 +15,4 @@ components: time: $ref: '#/components/schemas/time' createdAt: - $ref: '../schemas.yaml#/components/schemas/createdAt' \ No newline at end of file + $ref: '../schemas.yaml#/components/schemas/createdAt' diff --git a/docs/objects/LibraryItem.yaml b/docs/objects/LibraryItem.yaml index ecf70127c0..51eb25623b 100644 --- a/docs/objects/LibraryItem.yaml +++ b/docs/objects/LibraryItem.yaml @@ -67,16 +67,16 @@ components: media: $ref: './mediaTypes/media.yaml#/components/schemas/mediaMinified' libraryItem: - type: object - description: A single item on the server, like a book or podcast. - allOf: - - $ref: '#/components/schemas/libraryItemBase' - - type: object - properties: - libraryFiles: - type: array - items: - $ref: './files/AudioFile.yaml#/components/schemas/libraryFile' + type: object + description: A single item on the server, like a book or podcast. + allOf: + - $ref: '#/components/schemas/libraryItemBase' + - type: object + properties: + libraryFiles: + type: array + items: + $ref: './files/AudioFile.yaml#/components/schemas/libraryFile' libraryItemSequence: type: object description: A single item on the server, like a book or podcast. Includes series sequence information. diff --git a/docs/objects/Media.yaml b/docs/objects/Media.yaml index 0809ef97ed..f1414b5939 100644 --- a/docs/objects/Media.yaml +++ b/docs/objects/Media.yaml @@ -5,38 +5,72 @@ components: description: The ID of the media progress. example: e4bb1afb-4a4f-4dd6-8be0-e615d233185b format: uuid + progress: + type: number + description: The user's progress in the media item. + example: 0.5 + currentTime: + type: number + description: The user's current time in the media item. + example: 0.5 + isFinished: + type: boolean + description: Whether the user has finished the media item. + example: false + hideFromContinueListening: + type: boolean + description: Whether the media item should be hidden from the continue listening section. + example: false + finishedAt: + type: integer + nullable: true + description: The time (in ms since POSIX epoch) when the media was finished. Will be null if the media has is not finished. + example: 1616239000 mediaProgress: type: object properties: id: $ref: '#/components/schemas/mediaProgressId' libraryItemId: - $ref: 'LibraryItem.yaml#/components/schemas/libraryItemId' + $ref: './LibraryItem.yaml#/components/schemas/libraryItemId' + duration: + $ref: '../schemas.yaml#/components/schemas/durationSec' + progress: + $ref: '#/components/schemas/progress' + currentTime: + $ref: '#/components/schemas/currentTime' + isFinished: + $ref: '#/components/schemas/isFinished' + hideFromContinueListening: + $ref: '#/components/schemas/hideFromContinueListening' + lastUpdate: + $ref: '../schemas.yaml#/components/schemas/updatedAt' + startedAt: + $ref: '../schemas.yaml#/components/schemas/createdAt' + finishedAt: + $ref: '#/components/schemas/finishedAt' + mediaProgressPodcastEpisode: + type: object + properties: + id: + $ref: '#/components/schemas/mediaProgressId' + libraryItemId: + $ref: './LibraryItem.yaml#/components/schemas/libraryItemId' episodeId: - $ref: 'mediaTypes/Podcast.yaml#/components/schemas/podcastId' + $ref: './mediaTypes/Podcast.yaml#/components/schemas/podcastId' duration: $ref: '../schemas.yaml#/components/schemas/durationSec' progress: - type: number - description: The user's progress in the media item. - example: 0.5 + $ref: '#/components/schemas/progress' currentTime: - type: number - description: The user's current time in the media item. - example: 0.5 + $ref: '#/components/schemas/currentTime' isFinished: - type: boolean - description: Whether the user has finished the media item. - example: false + $ref: '#/components/schemas/isFinished' hideFromContinueListening: - type: boolean - description: Whether the media item should be hidden from the continue listening section. - example: false + $ref: '#/components/schemas/hideFromContinueListening' lastUpdate: $ref: '../schemas.yaml#/components/schemas/updatedAt' startedAt: $ref: '../schemas.yaml#/components/schemas/createdAt' finishedAt: - type: integer - description: The time (in ms since POSIX epoch) when the media was finished. Will be null if the media has is not finished. - example: 1616239000 \ No newline at end of file + $ref: '#/components/schemas/finishedAt' diff --git a/docs/objects/entities/Device.yaml b/docs/objects/entities/Device.yaml index 17e99b277e..89bdfcf2ae 100644 --- a/docs/objects/entities/Device.yaml +++ b/docs/objects/entities/Device.yaml @@ -11,32 +11,32 @@ components: clientName: description: The client name. type: string - example: "Audible" + example: 'Audible' manufacturer: description: The manufacturer of the device. type: string - example: "Apple" + example: 'Apple' model: - description: The model of the device. - type: string - example: "iPhone 12" + description: The model of the device. + type: string + example: 'iPhone 12' sdkVersion: description: For an Android client, the Android SDK version of the client. type: integer example: 49 deviceInfo: - description: The device information to send to the server. - type: object - properties: - deviceId: - $ref: '#/components/schemas/deviceId' - clientVersion: - $ref: '#/components/schemas/clientVersion' - clientName: - $ref: '#/components/schemas/clientName' - manufacturer: - $ref: '#/components/schemas/manufacturer' - model: - $ref: '#/components/schemas/model' - sdkVersion: - $ref: '#/components/schemas/sdkVersion' + description: The device information to send to the server. + type: object + properties: + deviceId: + $ref: '#/components/schemas/deviceId' + clientVersion: + $ref: '#/components/schemas/clientVersion' + clientName: + $ref: '#/components/schemas/clientName' + manufacturer: + $ref: '#/components/schemas/manufacturer' + model: + $ref: '#/components/schemas/model' + sdkVersion: + $ref: '#/components/schemas/sdkVersion' diff --git a/docs/objects/entities/PlaybackSession.yaml b/docs/objects/entities/PlaybackSession.yaml index 17004fb9fa..a43d38b5b2 100644 --- a/docs/objects/entities/PlaybackSession.yaml +++ b/docs/objects/entities/PlaybackSession.yaml @@ -7,6 +7,17 @@ components: playbackSession: type: object description: A playback session object. + oneOf: + - $ref: '#/components/schemas/playbackSessionBook' + - $ref: '#/components/schemas/playbackSessionPodcast' + discriminator: + propertyName: mediaType + mapping: + book: '#/components/schemas/playbackSessionBook' + podcast: '#/components/schemas/playbackSessionPodcast' + playbackSessionBase: + type: object + description: Base playback session object. properties: id: $ref: '#/components/schemas/playbackSessionId' @@ -16,20 +27,8 @@ components: $ref: '../Library.yaml#/components/schemas/libraryId' libraryItemId: $ref: '../LibraryItem.yaml#/components/schemas/libraryItemId' - episodeId: - $ref: '../mediaTypes/Podcast.yaml#/components/schemas/podcastId' mediaType: $ref: '../mediaTypes/media.yaml#/components/schemas/mediaType' - mediaMetadata: - description: The metadata of the media. - oneOf: - - $ref: '../mediaTypes/Book.yaml#/components/schemas/bookMinified' - - $ref: '../mediaTypes/Podcast.yaml#/components/schemas/Podcast' - chapters: - description: The chapters of the media. - type: array - items: - $ref: '../metadata/BookMetadata.yaml#/components/schemas/bookChapter' displayTitle: description: The display title of the media. type: string @@ -66,19 +65,67 @@ components: $ref: '../../schemas.yaml#/components/schemas/createdAt' updatedAt: $ref: '../../schemas.yaml#/components/schemas/updatedAt' + playbackSessionBook: + description: Book playback session schema. + allOf: + - $ref: '#/components/schemas/playbackSessionBase' + - properties: + mediaMetadata: + $ref: '../metadata/BookMetadata.yaml#/components/schemas/bookMetadata' + chapters: + description: The chapters of the media. + type: array + items: + $ref: '../metadata/BookMetadata.yaml#/components/schemas/bookChapter' + playbackSessionPodcast: + description: Podcast playback session schema. + allOf: + - $ref: '#/components/schemas/playbackSessionBase' + - properties: + mediaMetadata: + $ref: '../metadata/PodcastMetadata.yaml#/components/schemas/PodcastMetadata' + episodeId: + $ref: '../mediaTypes/Podcast.yaml#/components/schemas/podcastId' playbackSessionExpanded: - description: Expanded playback session schema. + type: object + description: A playback session object. + oneOf: + - $ref: '#/components/schemas/playbackSessionBookExpanded' + - $ref: '#/components/schemas/playbackSessionPodcastExpanded' + discriminator: + propertyName: mediaType + mapping: + book: '#/components/schemas/playbackSessionBookExpanded' + podcast: '#/components/schemas/playbackSessionPodcastExpanded' + playbackSessionBookExpanded: + description: Expanded book playback session schema. + allOf: + - $ref: '#/components/schemas/playbackSessionBook' + - properties: + audioTracks: + description: The audio tracks of the media. + type: array + items: + $ref: '../files/AudioTrack.yaml#/components/schemas/AudioTrack' + videoTrack: + description: The video track of the media. TODO + type: object + nullable: true + libraryItem: + $ref: '../LibraryItem.yaml#/components/schemas/libraryItem' + playbackSessionPodcastExpanded: + description: Expanded podcast playback session schema. allOf: - - $ref: '#/components/schemas/playbackSession' + - $ref: '#/components/schemas/playbackSessionPodcast' - properties: audioTracks: description: The audio tracks of the media. type: array items: - $ref: '../files/AudioTrack.yaml#/components/schemas/AudioTrack' + $ref: '../files/AudioTrack.yaml#/components/schemas/AudioTrack' videoTrack: description: The video track of the media. TODO type: object nullable: true libraryItem: - $ref: '../LibraryItem.yaml#/components/schemas/libraryItem' + $ref: '../LibraryItem.yaml#/components/schemas/libraryItem' diff --git a/docs/objects/files/AudioFile.yaml b/docs/objects/files/AudioFile.yaml index 6092af2622..6ffa3affc0 100644 --- a/docs/objects/files/AudioFile.yaml +++ b/docs/objects/files/AudioFile.yaml @@ -93,19 +93,18 @@ components: type: string example: audio/mpeg libraryFile: - type: object - description: A library file. Includes the path and metadata of the file. - properties: - ino: - $ref: '../../schemas.yaml#/components/schemas/inode' - addedAt: - $ref: '../../schemas.yaml#/components/schemas/addedAt' - updatedAt: - $ref: '../../schemas.yaml#/components/schemas/updatedAt' - fileType: - description: The type of file. - type: string - example: audio - metadata: - $ref: '../metadata/FileMetadata.yaml#/components/schemas/fileMetadata' - + type: object + description: A library file. Includes the path and metadata of the file. + properties: + ino: + $ref: '../../schemas.yaml#/components/schemas/inode' + addedAt: + $ref: '../../schemas.yaml#/components/schemas/addedAt' + updatedAt: + $ref: '../../schemas.yaml#/components/schemas/updatedAt' + fileType: + description: The type of file. + type: string + example: audio + metadata: + $ref: '../metadata/FileMetadata.yaml#/components/schemas/fileMetadata' diff --git a/docs/objects/metadata/BookMetadata.yaml b/docs/objects/metadata/BookMetadata.yaml index 1420125538..0fed0a9191 100644 --- a/docs/objects/metadata/BookMetadata.yaml +++ b/docs/objects/metadata/BookMetadata.yaml @@ -24,7 +24,7 @@ components: type: array items: type: string - example: ["Fantasy", "Sci-Fi", "Nonfiction: History"] + example: ['Fantasy', 'Sci-Fi', 'Nonfiction: History'] publishedYear: description: The year the book was published. Will be null if unknown. type: string @@ -44,23 +44,9 @@ components: type: string nullable: true example: >- - The masterpiece that started Terry Goodkind's New York Times bestselling - epic Sword of Truth In the aftermath of the brutal murder of his father, - a mysterious woman, Kahlan Amnell, appears in Richard Cypher's forest - sanctuary seeking help...and more. His world, his very beliefs, are - shattered when ancient debts come due with thundering violence. In a - dark age it takes courage to live, and more than mere courage to - challenge those who hold dominion, Richard and Kahlan must take up that - challenge or become the next victims. Beyond awaits a bewitching land - where even the best of their hearts could betray them. Yet, Richard - fears nothing so much as what secrets his sword might reveal about his - own soul. Falling in love would destroy them - for reasons Richard can't - imagine and Kahlan dare not say. In their darkest hour, hunted - relentlessly, tormented by treachery and loss, Kahlan calls upon Richard - to reach beyond his sword - to invoke within himself something more - noble. Neither knows that the rules of battle have just changed...or - that their time has run out. Wizard's First Rule is the beginning. One - book. One Rule. Witness the birth of a legend. + The masterpiece that started Terry Goodkind's New York Times bestselling epic Sword of Truth In the aftermath of the brutal murder of his father, a mysterious woman, Kahlan Amnell, appears in Richard Cypher's forest sanctuary seeking help...and more. His world, his very beliefs, are shattered when ancient debts come due with thundering violence. In a dark age it takes courage to live, and more than mere courage to challenge those who hold dominion, Richard and Kahlan must take up that challenge or become the next victims. Beyond awaits a bewitching land where even the best of their hearts could betray them. Yet, Richard fears nothing so much as what secrets his sword might reveal about his own soul. Falling in love would destroy them - for reasons Richard can't imagine and Kahlan dare not say. In their darkest hour, hunted relentlessly, tormented by treachery and loss, Kahlan calls upon Richard to reach beyond his sword - to invoke within himself something more noble. Neither knows that the rules of battle have just changed...or that their time has run out. Wizard's First Rule is the beginning. One book. One Rule. Witness the birth of a legend. + + isbn: description: The ISBN of the book. Will be null if unknown. type: string @@ -79,14 +65,14 @@ components: type: boolean example: false abridged: - description: Whether the book is abridged. - type: boolean - example: false + description: Whether the book is abridged. + type: boolean + example: false bookMetadataMinified: type: object description: The minified metadata for a book in the database. allOf: - - $ref : '#/components/schemas/bookMetadataBase' + - $ref: '#/components/schemas/bookMetadataBase' - type: object properties: titleIgnorePrefix: @@ -141,10 +127,9 @@ components: narrators: type: array items: - type: string - example: Sam Tsoutsouvas + type: string + example: Sam Tsoutsouvas series: type: array items: $ref: '../entities/Series.yaml#/components/schemas/seriesSequence' - diff --git a/docs/openapi.json b/docs/openapi.json index 97ce3d814827371d8afee1ed3080965b5fba1ec1..13ea22f6805c71dd33d7270b62ca285c9afbc901 100644 GIT binary patch literal 177228 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 Du{2OP literal 353792 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 diff --git a/docs/root.yaml b/docs/root.yaml index b93d88a689..5dc49e604d 100644 --- a/docs/root.yaml +++ b/docs/root.yaml @@ -83,14 +83,16 @@ paths: $ref: './controllers/AuthController.yaml#/paths/~1logout' /api/items/{id}: $ref: './controllers/LibraryItemController.yaml#/paths/~1api~1items~1{id}' + /api/items/{id}/play: + $ref: './controllers/LibraryItemController.yaml#/paths/~1api~1items~1{id}~1play' /api/items/{id}/play/{episodeId}: $ref: './controllers/LibraryItemController.yaml#/paths/~1api~1items~1{id}~1play~1{episodeId}' /api/me: $ref: './controllers/MeController.yaml#/paths/~1api~1me' + /api/me/progress/{libraryItemId}: + $ref: './controllers/MeController.yaml#/paths/~1api~1me~1progress~1{libraryItemId}' /api/me/progress/{libraryItemId}/{episodeId}: $ref: './controllers/MeController.yaml#/paths/~1api~1me~1progress~1{libraryItemId}~1{episodeId}' - /api/me/progress/{mediaId}: - $ref: './controllers/MeController.yaml#/paths/~1api~1me~1progress~1{mediaId}' /api/session/{id}/sync: $ref: './controllers/SessionController.yaml#/paths/~1api~1session~1{id}~1sync' /api/sessions/{id}: From 4f6c2b3ca36175f8d68bcabce808c66e93043686 Mon Sep 17 00:00:00 2001 From: Vito0912 <86927734+Vito0912@users.noreply.github.com> Date: Fri, 9 Aug 2024 17:36:48 +0200 Subject: [PATCH 15/15] fixed endpoints using parameters instead of body --- docs/bundled.yaml | Bin 0 -> 269898 bytes docs/controllers/LibraryItemController.yaml | 92 ++++++++++---------- docs/controllers/MeController.yaml | 12 +-- docs/controllers/SessionController.yaml | 89 +++++++++++++++---- docs/objects/entities/Device.yaml | 2 +- docs/openapi.json | Bin 177228 -> 370896 bytes docs/root.yaml | 4 + unicode.dll | Bin 0 -> 144590 bytes 8 files changed, 129 insertions(+), 70 deletions(-) create mode 100644 docs/bundled.yaml create mode 100644 unicode.dll diff --git a/docs/bundled.yaml b/docs/bundled.yaml new file mode 100644 index 0000000000000000000000000000000000000000..97778b05a0ca5363f456268761fe8e74f6cc2607 GIT binary patch literal 269898 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

)`hc247 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 literal 0 HcmV?d00001 diff --git a/docs/controllers/LibraryItemController.yaml b/docs/controllers/LibraryItemController.yaml index 013b94a6fb..587bc1ec68 100644 --- a/docs/controllers/LibraryItemController.yaml +++ b/docs/controllers/LibraryItemController.yaml @@ -21,40 +21,22 @@ components: description: If requesting progress for a podcast, the episode ID to get progress for. schema: $ref: '../objects/mediaTypes/Podcast.yaml#/components/schemas/podcastId' - deviceInfo: - in: query - name: deviceInfo - description: The device information to send to the server. - schema: - $ref: '../objects/entities/Device.yaml#/components/schemas/deviceInfo' - forceDirectPlay: - in: query - name: forceDirectPlay - description: Whether to force direct play of the library item. - schema: - type: boolean - example: false - forceTranscode: - in: query - name: forceTranscode - description: Whether to force transcoding of the library item. - schema: - type: boolean - example: false - supportedMimeTypes: - in: query - name: supportedMimeTypes - description: The supported mime types for the device. - schema: - type: array - items: - type: string - mediaPlayer: - in: query - name: mediaPlayer - description: The media player to use. - schema: + forceDirectPlay: + description: Whether to force direct play of the library item. + type: boolean + example: false + forceTranscode: + description: Whether to force transcoding of the library item. + type: boolean + example: false + supportedMimeTypes: + description: The supported mime types for the device. + type: array + items: type: string + mediaPlayer: + description: The media player to use. + type: string responses: libraryItem404: description: Not Found @@ -109,12 +91,22 @@ paths: description: Play a library item by ID. tags: - LibraryItem - parameters: - - $ref: '#/components/schemas/parameters/deviceInfo' - - $ref: '#/components/schemas/parameters/forceDirectPlay' - - $ref: '#/components/schemas/parameters/forceTranscode' - - $ref: '#/components/schemas/parameters/supportedMimeTypes' - - $ref: '#/components/schemas/parameters/mediaPlayer' + requestBody: + required: true + content: + application/json: + schema: + properties: + deviceInfo: + $ref: '../objects/entities/Device.yaml#/components/schemas/deviceInfo' + forceDirectPlay: + $ref: '#/components/schemas/forceDirectPlay' + forceTranscode: + $ref: '#/components/schemas/forceTranscode' + supportedMimeTypes: + $ref: '#/components/schemas/supportedMimeTypes' + mediaPlayer: + $ref: '#/components/schemas/mediaPlayer' responses: '200': description: OK @@ -144,12 +136,22 @@ paths: description: Play a podcast by library item ID and episode ID. tags: - LibraryItem - parameters: - - $ref: '#/components/schemas/parameters/deviceInfo' - - $ref: '#/components/schemas/parameters/forceDirectPlay' - - $ref: '#/components/schemas/parameters/forceTranscode' - - $ref: '#/components/schemas/parameters/supportedMimeTypes' - - $ref: '#/components/schemas/parameters/mediaPlayer' + requestBody: + required: true + content: + application/json: + schema: + properties: + deviceInfo: + $ref: '../objects/entities/Device.yaml#/components/schemas/deviceInfo' + forceDirectPlay: + $ref: '#/components/schemas/forceDirectPlay' + forceTranscode: + $ref: '#/components/schemas/forceTranscode' + supportedMimeTypes: + $ref: '#/components/schemas/supportedMimeTypes' + mediaPlayer: + $ref: '#/components/schemas/mediaPlayer' responses: '200': description: OK diff --git a/docs/controllers/MeController.yaml b/docs/controllers/MeController.yaml index 6cf1c5a72e..edf7efcae6 100644 --- a/docs/controllers/MeController.yaml +++ b/docs/controllers/MeController.yaml @@ -2,7 +2,7 @@ components: schemas: totalTime: description: The total time listened in seconds. - type: integer + type: number example: 123456 responses: me404: @@ -178,26 +178,26 @@ paths: type: string description: The ID of the library item. timeListening: - type: integer + type: number description: The time (in seconds) the user listened to this library item. mediaMetadata: oneOf: - $ref: '../objects/metadata/BookMetadata.yaml#/components/schemas/bookMetadata' - - $ref: '../objects/metadata/PodcastMetadata.yaml#/components/schemas/PodcastMetadata' + days: type: object description: A mapping of days to total listening times. additionalProperties: - type: integer + type: number description: The total time (in seconds) listened to on that day. dayOfWeek: type: object description: A mapping of days of the week to total listening times. additionalProperties: - type: integer + type: number description: The total time (in seconds) listened to on that day of the week. today: - type: integer + type: number description: The time (in seconds) the user has listened to library items today. recentSessions: type: array diff --git a/docs/controllers/SessionController.yaml b/docs/controllers/SessionController.yaml index 20c97e4034..9e43dfb629 100644 --- a/docs/controllers/SessionController.yaml +++ b/docs/controllers/SessionController.yaml @@ -13,24 +13,20 @@ paths: required: true schema: $ref: '../objects/entities/PlaybackSession.yaml#/components/schemas/playbackSessionId' - - name: currentTime - in: query - description: The current time of the session. - required: true - schema: - $ref: '../schemas.yaml#/components/schemas/durationSec' - - name: timeListened - in: query - description: The time listened to the session. - required: true - schema: - $ref: '../schemas.yaml#/components/schemas/durationSec' - - name: duration - in: query - description: The duration of the session. - required: true - schema: - $ref: '../schemas.yaml#/components/schemas/durationSec' + requestBody: + required: true + content: + application/json: + schema: + properties: + id: + $ref: '../objects/entities/PlaybackSession.yaml#/components/schemas/playbackSessionId' + currentTime: + $ref: '../schemas.yaml#/components/schemas/durationSec' + timeListened: + $ref: '../schemas.yaml#/components/schemas/durationSec' + duration: + $ref: '../schemas.yaml#/components/schemas/durationSec' responses: '200': description: OK @@ -223,3 +219,60 @@ paths: schema: type: string example: Not Found + /api/session/local: + post: + operationId: createLocalSession + summary: Create a local session. + description: Create a local session. + tags: + - Session + requestBody: + required: true + content: + application/json: + schema: + $ref: '../objects/entities/PlaybackSession.yaml#/components/schemas/playbackSession' + responses: + '200': + description: OK + content: + html/text: + schema: + type: string + example: OK + '500': + description: There was an error creating the session. + content: + html/text: + schema: + type: string + example: Internal Server Error + /api/local/session/local-all: + post: + operationId: createLocalSessionAll + summary: Create a local session for all users. + description: Create a local session for all users. + tags: + - Session + requestBody: + required: true + content: + application/json: + schema: + items: + $ref: '../objects/entities/PlaybackSession.yaml#/components/schemas/playbackSession' + responses: + '200': + description: OK + content: + html/text: + schema: + type: string + example: OK + '500': + description: There was an error creating the session. + content: + html/text: + schema: + type: string + example: Internal Server Error diff --git a/docs/objects/entities/Device.yaml b/docs/objects/entities/Device.yaml index 89bdfcf2ae..f32af63323 100644 --- a/docs/objects/entities/Device.yaml +++ b/docs/objects/entities/Device.yaml @@ -22,7 +22,7 @@ components: example: 'iPhone 12' sdkVersion: description: For an Android client, the Android SDK version of the client. - type: integer + type: string example: 49 deviceInfo: description: The device information to send to the server. diff --git a/docs/openapi.json b/docs/openapi.json index 13ea22f6805c71dd33d7270b62ca285c9afbc901..69b538137e2d0dfb034cd190b797121c0d4b23ad 100644 GIT binary patch literal 370896 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

O&0k1wN~eGR8ULit0hkhIG^ z)qnlD%63T}&!F`CILfv6-cvY@wQ+hq{j2@%wmYZqs^8&X&8>)d9ZP1>c5Ux^@JHDf z1htb@crVjWo~GMdMtjRB<&=KQ=u6Q7+GQ-)wI@SomAFE@&oZJb6eFazk#A>h&l1{3 zmTVe+hRIE3$&QB{9p05xNdAC~xQ#q!b;!_*nw=~dS52S|4IHFwnscXC=tBLnHl{3k83vJ)8^zVdT z>OV`^6zlBl8IRv?&)dp;z1en$|9tt1r;T@aHv%xlR-}fIn*G!w9cQA;+y*qgwR3Ir z`w!Nc*T+?rzg`t1iY9OO*;d1{eJaQ9{uv3W zCf{UT{yG*2H6>4m-5>`;E>@{A-#490pPIc;&%P?&*nL7xxQ@1qw#YUjj`SGNx;u7d z(b>cI&Qw+tpS4W6T1xC!oqn!fOLIG$2iT@s9}UEaKZu^-4d|mMvd4*?aGW7~k8!YxQNP`5Q#0RLOT_SJ) ze5jDgrDJ>^FDD+&?+~E#%)#yhnY!bNA~l$Ckr7-6L#I0Qv(Dn(ifbhT*0(iq`3+_JhYk+s={g zViW;gRo@ffLC?5lFMs0fX-;`lx^G(6OyBV?NhACQDlLh4^jNmv%5%@ek|TnRVp9i6>YNap=B?XW#Wh>KN%#J&Pb)1 zzTs{}o1T?1$Hzp3M-O#8{hk*u{iDtHB{-^4@ zZpy4xC!u?^D#0vMtDd9tEzwuwzBgjMK@-+x5Zm#gcm%ISE@9QZk^8amf}Iz`-iMD` zG}kl!TJ|?sas0DP23&JN0V6dZEgn7oeX35iZ9VqJt44)3@A#8Ge!mLcW4+HI>(F;-MaOc` zDb4Jk1S8aqgi(CEF@}@3r%8e5Dg)MPR6A+CTD|!hgTBKI+MGB0eg7()Gk4~=R@P6y!%Af z!f9zC+7-?gwUZj+Rr$8SRHbH&m2&)Lj@5W`m^C%RF*O+P+;jF*Egi#bvBCBcLGvxp z(nOg&t~BiBpNE2LrNQ)ko9$U14_rKjb1n!;dmJ)%tcuCrY@+s62Mu0#r$ zX^#WtycWi8;T#*WOy_nr{%pH*`mXvN{#B3nn4{J)vuk)-zSX_Y!_{|U+vv%vKMqp! z$?C77WvJSDPyQXr)%g5NgSu%FvVxqWo=ZO8&M_GGb0wL{U&ZFSAz8*(l974Z1cxwg zOi3*ev?mqvIUlAwqRW<9{095o%P4vHC|hdwHv9DHsqGH``SO+Vx9K-I6$k%9?Pd@D zOL!P&nLic^rS2-&=&?oaX^$zs34Vr+GxjvOXSaDUhW9e3?0p#J z)2pzntc*dEGxiB5ufMOKxKzp;p5(A`OP}l5_T%we?T%C;mgdEG(|6VH@UNDy*F2IK`jqMon{@Vi#})! z!}fdIozr*K@9?jBT&s{FGQC-^z_XSNK6|UaOr6)?s^=WwC*qTZQ)Tzn>alH){d^*p z5PPzy7B)Ef_O$Xe`H0=`*_W>FNPG---(7_o_OBAW*vvgS=k@DIYr{2fq~}qjkO_E? zt6qqrkgJOQQlBoSJk#yYrG3w&2kDZgzUOA3tUew41S+FWRegc)i@7YgsBX8+@d`?# zBlF@Kct288)83n&BYKJ1Q%y*`U{_}upBh`6<2FBDr`%;KU4k)c9m~8LCK+lWqxn4m_w(u zhmO@wi}AaC?%$+6-B!_MwJ7CXp+=vcrB{~Ko=tt{oZ7X9%fq*)0j8|vwztPtx=&ei zvKAg}O0vbbg3T*jW-sY=uESa;`+zkR(j!SN8cc`lwN)rjEX@*q%}%VyTkj{2YF zhYAnf4gR&z0)F?g*dTP1Guy(qB8;Nq&vmTgwmEGE9<2OSAn@RV4~RZ&n-aWPw6D44 z&eT$kv1h;6@9?jduXxhwva^xzj_2NQtD4n!BAh|>%H2USycABs-~OUG?qrn3XPHXc z@9>}ZD2;dTJxzSPze)7LaQd!yx!-%Bny<3>Q=bP~_WOLRVH|sSBos;An_6Ewi}G8Q zkBP{uX4aSpHE*7$s83AA8?|R)DH4&+jrzJ5B1?>ee6LZ*HBWB0;}KYa;e^UQD#-1Q zl6Tu$_qk3S;!d)b*5064p3me*`N3$*JfihFnbv8qK8E(5@}eW!m5SMs_Zj!xoa$M% z?d+a$!#=Kobnt(cs;Vr<6sC6-Bj$&Qz)U7*xf-lCyXjrR<4%c}=U&vwc_(#j`k*AL~zHdn|p=aVodD z#0c${zrvs-eM=r5e0|x{@2)`nq5S9$2M>Qi0?qG1p{t}Onm7P?!;mq*vHHsp$*>58 z9|y4+=-c8N0gtldC*t4NvCoYj{c5~;q_Q4tzr%mNd}aJ?`c1BZ<0>0u1hLMve<(4} z)Sr%{UzgQ;-Jem7e)lywG36n7`t5-l21?S8kyBcXbBHyL4 zU5}1h^_adC{km`@i z*OO&?6zQ|g3?~rUe&uYRPT#FOXDS_I>%)`LirZ~wz0x_hNN}B_Mfi6+-<7T|#lT!$ zU*<;N>c0-zPxX#{E5P?{uM(APFDt6>ta*J?-Bvd|(xF!wf(U`$)U%8}|UWyoY9mC=hOPRZB6-}BZ?zjIdkm3-1=6|Jb9E6RGfG@^aC z4%WB3>U^}ThvOD%@a3*ytbT`owS2{+yvxo+Z#L3y{gH1B+(XagIn=anA){XF&g8&Cgj~ zO8({(k-nTl!noQ;m^o2d{z52={SkBmx2R8xt=StTxZZRPt~pWWOZj{)(5>}qGHJA=D$K)WZ9rF^OTJP%JjOYzZmnS-@Oj>M?!Pj zSq&fesX!b%FZ2`t;sO_KmY+{oHmmv_{?+o8@we$WIW@->L8;7(yYG0KQzOvy`U7U( zUCJpcYpJ`i6Zh0Z#hy*y1H?m=W^VN7mOQO9QVwd-96rBH#n{7W%o&bdcf5UE2$|+# z-MD57FDgw<+rN;Ptk{ zu7-c{aaHF8{;m5LH$^s>1L9c%9=?EQqx z&FH1_B9@c6?1-<8B|?04T>t51|NPi9?@RaoaE1id8{LDao~!e)`IYIcu=X@xM;v(* zzUJd08iib)n*X-F%{*s^Jf6ynZijLVC*vII6b$1^mE~#2=9NZ@$nKigVD=jL4w0}H zn=JQ3)L!0G&(x0lvE0e&dRlU9mTL0(>?O^*lBQ%8-*e>aK35)V>Gbz~uH4|!r`Ptm z@+p11kAan9VDECI!OJ5ow{INn5^OI|`+GI$wjXHyd|=%lS#F$tJYgSC*xh)--d0l^ zW4W`@dEdI0TYo>1`rd`>+c&)~&C%#-RKV)I(n!EQw__G}{JGqD+xy&3$Z&7l(&Ai| zvOh3wYdw{0P7D9MT=}uIsmh{YaV<02b+Wsxio(O7aqFg|^QBJpHaCm0K9-36)AL%- zHk#4%(0s}XtGjAZScA=adj`u~3smOje4Y$=c_#kX9r41>x06D0bA8>~iCSzG&E7T48_lF3^U}<3O+; zQ^{{ue;w!r%MNP}3-DL@ce?rq`9{ynxb75Vu<56l5}m!9vHD%=tD5g}dm*y%FGAa# zmpCP>O-iWT*2*-ku_QlA?9H=0<0tdqEl=}$(CvNi&>7`xqhBPu7p7|n@;T}If}ZGE zm%VeHy}aeVUZ2UD@Gk4TY2(MAzI>1GvfpbpA$Cvvi8seyFm~beLTnvq#iN&`PdwN7 z_xbA#l#yFI^Y?l)lXX_zs@vlg^ZWc&tClp&ZXHgo$5gChC)LVYrDJ-j<`3p8jsG4; z9MJIWg~B4?e9XGN8o$eaFUKA}lzoPqr9$%oz7*+eeo;T))p2q()JWyk$n3(k%9s0M zLm`#UR`=yw@RXkHj$OT3c%%`xb?Ec@X_9*Mb{=M+`?;E=74vQHoxZDnhkvyu6)z*} z&wiCR16Q%jcwg<`E}hF#`Ed0v# zE*U)z{oGAo<@La(z5MvkCgRM?%&R>j{k6cpEbZ?(mJho>a$Rn8^S!Il=f;G5i@Ho3 z!S>p04QI&)4Rf_UhHCF%LHg7aW?YUnzY=?in)j*oZo68%)xYS|sdMSX?Efh{ebaGe zo5$tF4tJGa3^HXYV_Z<9mXfXLODDMLy6#xtM-Gi%N}umeyy@MDyp;I9gm=EH`DvwR z&<8|$N*T)Q9JAZUMD(0OdLzY_6MyexA~C1T)yU)f({FMPjr&&B{8N0HSAr`qlDS#W zG>l%h!>4@GvCmBhID6|d-d;UY`v;M7^yAycOg8Ix?k&5zcVyhVZcT6=?cRl)aLDBy zi{?gNc=EuY;C-%>TPw|CTUJW{dY8hdL3AqaMK>msHdbTB-{H*0aNZX2Y>U8I#O*-3 z$7%OWdyDnX)@mEFOg{+)yp@0KxIU5J>@Dd0+Z*H0DGIfWa;eJHqtvZrYeYwPIU6Is;@k@;hY&C$N48Kyo;>5kfW_uPC(?J2JHjXVFTc~8uhQ*bx+biQ{s z1&6Wp>9sa(q$!Dmb@EJR&Dr)UMa@RBwWyV$|HGf&juewwSIxdyLcUKy*)(jhn1QEt zSn_4OC()5=D%Xhy9Guf#k51kWM<9RyBy#wXNUdHiy_>v|cE_R?g*EPZ#^jIxxf?uV z($2gt!{9FR64FDZ@^U=1uJmii;R0=Iv_WewF6ZlgVsQ`UAGNaM`kmek zO700?{fhm4P9c_uzV0nw8GoC8lhbXSQ%EyiH^hp2ArxENi?CE*TX+L2g|pvm%#=qw zuiDEdd@eC3d#81|wKwNyD8c()uA-hPSZb8^EI3PIH4>D+T(^(@sQx;h_qy^c<=0pi@VkGtd?n|1d!OwY+n-Zm z5DB0Cbi+HwK1gqz)~mnX{c|d|eL~p73u$lh39}PZo#sn=!+wv%QmkL^vr&!)`OV&> zckhg_U;;n_4VhrRkl^t3xT+W&Ah$Ce3I7+8ly z`^+D!MfRrrz-`Q6Z)usN+Z9VIR28;Zhhg^2e^b5K>Xp|vhqA?GSNW{p;a@FZ+1qk- z5oz-x3=4Z(&LB~yDW%e~rr_G)YH!P3H=4Wtwwy&pVu`7iJ!h(EzMptRISY%-AXZB^ zE40&FiPt_H&by`(q5O>U%4c#Ns|q{$raX@qQqyWv7E$~@qFDMyjio#pVsm5&S&wh+ z`prmpo+)>C#w(TZI9*iJ^A~A z{Chn7My=g%<+tAr`1wG7dnA8rzq5pRKtBw%55OjklUhDxTJ!fQve!<_1+G;f+h|3GrZ^z6X*I2qnZmP-GA zBGADjc`jMj=kk^}^8fqtjqO{v*uc#JM}Hmor#zz?mUF&piSlsbiq7)EIV2Re^__?w zZG1MI!~TK5?9S?cO8wFw<+mO@ejx{|r>lD-pRtsJ z`m`#Cx8EOlg_wj@G~O6`{~#%`BIqfHE_^%4uPKSAGvhgfEz&QY+tQr3B(>ZqKqH1S zJI?g)KTChfj|Hxe2Dtwq@IkNqvtaG9eE)XPktYJPzX+fHFoW0iT-{TVqo%oAZ4dAY z#Xtdm53E*sFs}Pz*ClyN#-WPfKr6=;`MDC zx@rCP(Lj~YcF3Ae=ZAEHZQ0v{&>#gwGvTfKyv?=SH2kFzoHThaFD zpikuIBl(BFi(dL@@Pj{+D<3rDAmxzVi$J9FtKp^u<*O2dVD3mpWYO;7AfDZI#Q+|> z?zlP@SwM&CdTgLi60~VBd$-B4FgJF!=KhuKd*W`a2%^2GL!=amR>K$3D0M*-!`%yUcN#PduVJT(csU8pVs~mm0A)ebCx%W(H)9CtG{?h38jUl%A zSFs_uj^9Ur;~c=hvvmxu#dw6QejRyl$#&&eD$xV6V9tW&+lC3tVxi%f?BEJ)ploJtC#43p78 zT6oYIdk@&Iynia*Qod3a<}o=Ak9Cv=AnT%_@K_&>$2jarl1 zeO_J9c^PEmR2NxhqJ}M#0j==Q-#s4|VZ@wHQb{$=)!CE2Y&vYxBM0IieJGlm%=pJ5 z8A|enF+8~##;?arZN771OLUV83?yTSMa-qSF#0Coye{;N1DB-DS}vpAsxu1rxp}jY zy*%rxX1^Us^yolrxZ7goq2YfTcu2n`OEYD=EyHuz33S()&VL0QP1$rBH8gtku4lCFM|85UwreE7Qy}!OSjMFF2pIzwsuLXZ? zvu&d-vmt`5*q7TA+10bid;T>19{j_@Bi zn+Ut94__xje`msB)Z(c{eRc2_Fogy{{+BT|j{JNem@L<3d46BuqFm}P!G-?mQfWP- z&0_p*$tK3WrE*j?Bl701Kx6K=27v6lAGZt}?3i081_9C46sd8dWr!_y_sugTgPY=J~u z|I8^$+yq>8c9#WHGTR>vvh=rNk^FN(ni@_@Qq`^zTQ%9V1pOWl^sBK#lX$5PN~zPA zc<~J5ETnQARk-NCX<1RC$2qaF1KArJOZo$``)YBrl1h}Ij7+7fT62#@p1qL!g9ZyTi+wKjr?6qkcOnDPgSQ1UPbCAu z**@Iyp8T`w{4ipkyTzWgGvsv^U|1s!p=(Kv+s1iMBXuS0wmy;7S?0K$OGu6A-Dz{?>y|$ne$pIbdw}U~}_A zLIsQDOOYbv768r0{h-!`p;tRI*GTkg@e3`9OQPv7Xw{A#OvQ#~3RMo=Iw+3BMkAK+v zHVcP!@Of9H-pQcX)TX_B>AlWsg3WSs;I+NBHVV{F=n!3WOa3R;bhWWf)u7tvL+rW?9B&V+?DFxw&RT8__RXAKx5mr6t4+QT zyimPK#`LPwTD+E1sfC#CCklRc7dJ;D15N}#SDS0T63s<)jJ-+ZQm^)EtSiLTUd8S6 z`uJ1fd99ft#z(a8f#mJ+dN`x&s>_4h!|HyJRcWWl{~>E)ZC4w2-^wb8jS}H_B=O)E z!dd9n&_VGs<9_St*K}paBEP5h`|Q4cP1kgHu;#VW^!r*mZ{}sk@h3mW8km=aIyvXDpeOj?Z-KR?ceVlh*5h*sCwE%{3_ds^#M z&ph_!5RrYX{MRZ>gT$*t$#U=Et$77^41slO`x$}ASbhIhn0G10+*>`#*e@F4)n7ra zqX6&TEKN>fHLeMe>YuUU6R(2!rS+8Roqy;abW`59>DlL_l_VBWs^=Wi-aFfvcWK1F zxd*xP%^-EY6gfoX*6`Vefi?*d#!6*ei@ZS6QrkFHF=F(n`#f@PKthu#jk}{+F8}iC zglz`P)mQXNIjwnrC|xVjK%1lm8|ive!Y<^x&8|psYF5=IcBn4F=SUQEJ$<&&ie80S z%I~(CJ)hS#mT}+qXu?M9=l82X5tq;JbOc48=ou+*SN}2aP}q&Ogg)1*X07|C-;Gs( zm+bt5p^6pFjXy(fP|tOa=V)Eu!YsL)N>02hJLRRPW>>4lG=@rcrO!q}{`@jP^oiKF z+lL?-VxYz+F)VT{_@a5WtY+G$`fCQOKhL%=11-F+-~n$RT2xJs=}q$-c-rQx?c^dbk&+OZQp6JNQ zz5mcHP4k_KZ4#nCLXnS0-6xfSeY${Mw67!|GN(qXjb8N4>^#tShy9g$g>&G_Clp{? z(e=q};T}pttE?MaqaP-_gL?N}L1pvn2il;Uzk4@05-W&UMA`H2qfo2yX{~;3gI{>- zZa}Uq%hu~BWP4*j6MSGxwMnKn_}RO$Z1wHC3`eT4KNN2MP=2V!=BHO;>dw38!r4?a z)c2GHJE0A#@Q-Cm44(OTb&JRRlgpBsA9d=Xbd_HTO}!NzKrhE7sTRp(?=|?=ygiM& zrgN)humZkwUt|f(hIe2CKN85SN4>V+ei`aL5=}itm1TV}Q!irz?u z7lnS9akygk0bK;}cgWYE_xmu!%&=9cy_~A8whj<&@PjJWIcL+L^7#;ZFi7|mzO#DZAGyvn&Yo%*%ZFnqoGVxSqV z%QJd22@}?{p3gCl63P}|m`9HgduvkqYdZGz z3HZq9KO`eo_Kgdl*f?+9`h=JUh}SJ2Hwq)vV@TGQ+Fhov1!qCASJBt8 zC5|$#*y#H zc-y1%L!m?>>1YD2lx*3lekl5Mnas|y^dY$=|GfDHnqQ9($5HF)^IpT)WnH?tb6;)b zx)exHnmG~+6FJ^q<=W3#wUJAF#Cqy$!NXEZd|t2I{xulS1`i~R+_wh&!)@5dVVu5s z1{=`qvNk_+EV*{qryZ}+*R@KWeXz`<2Q>@VxOzP});+v;H?olC`>jJsD`nTUt7V8S zzSLG57pmgjLrFy=JtyB1kzPZ{@6MvN5x5RO+YR8Y9^;)oGnCA3} zsY?ihXLxHK1v2=yL=V}w`qKc*H}b!~c3-2+ixsV>Q_9wHONT9ACztprtoG&LJqK9V z_$NHohQa*Z>)=r%fMitS+8<~??NoHx81|)}Z%-VGtqVW1x@EMi@lgC;ANun>#%*iO zlm|T+s~+*;%ynX^zluaAVjK4M`RAGin$Nrb)yL7X?n>O?iSz?S4^Kf^pZG>(cYX>Q zv7LXFHvk26LapZ@Z@Jf*+0{r|=nHhZn%B*sO)5~$1^tA~kje9KF2Z;w?~1I~nup(Y z$1}%}o7dH=4ToyaAd6Kl$2O0hm@uBn)x)7DY3e#PU->e%wIs9JbPjtUh!6Ty-tzwN!~OWIoK=Or3stLaqw_zLd)5E7^=mAfH&g8bW*!MlUY^53 zJp%d|0wsmHQpB5KWLBkf=OE!2@ICbb_1JkB>j!7!#gz)F=S z6nc*aXoEK!8T!)I#JtMcRZ7KRHc$=q)4Y?XG#&|!>bsr|v&DLTHQ+Oc=3}|S+n@&G zJUnHyeJOvdL|_fj5qB|jlYB@+)}V7SK6xqk09WO%CxUs-+tTv{pevO$)O%~SCTmg& z^Fp2k4vfsIfHdAtEC-n#G^)8J%dY;r&W=ffEdq zF%58Lr#=T1e~~vMf54o|H^nGV!dSBsCS*>tBkvmoDp;7f+s<$l8##(q@ z=~bx#s6sC)0hPaqm?E?J792bnIPyT^qb5~UmZ=mw6}gX}IdH$lz}-W*eY`#l;DeSIy(-^YD;kP{ESX zQtSF@lyLQ7JLL;{-W+>AK9c?8AFTc;((;p`17IJXRP)d63){vE`Ma+V-uhq-Hi@ZX zv!NB1;Eg{Gaz{C#95F;|AW@Oe=wvJ>wZPR2(5v~}da?v6mPMSXtCbT1iGh#epse%Y#PRDCFW!AG7L);JkC3pqIidbA^dWz!!xNyN6Lr1Y>lQj zlU>edfK3_Zhs=rd$#@Cs!E?nK=XjUU7EexpMCxANQX z`E?S3KV! z&2pMGEm@*nyQY#c#%_({!&B?QIvvlScj-#2&Ncb*wNNjya?PMW5RFlj`WhR&EqX}r z^XpWm@{#=z@@5_?E=zC$H#JO8&9_G)1$yY=?eKJLJGRwhg=h15uHc^sLpp0w2z*J{AhmxVC=MDG*p~6IZe9ugS7_UHpFeSn8LE@tW^u*2r?uuVK;W zwDOgEBbq45=1^TnA$dI zWjtQryx9YZ#a+|3fs)#?lJ?F#Dw5(imPHx^V;*Gq)wa=^J3q=5W|d3O)Yk2Ti`L(; z?{rhpp$7ZvQ zP~YQOE51Zv4cKHdX?b~jFC51t*y{cYuuoIaDMp^54CAVkyoG6wQd$1 zl&O1Mz4n3N0)C)6bKRZ9%Wy*8L(2DW0#Ei^Y58b<+*|4&wb^->M(mqAnv^Pxa012> z(tf@^HEE6SNG^=ZQ>v9MFNU9?71~-aOT84CS!Pb9c#rH}MprU}Bbo1ZPBQT=k{$?J zeHoe_nT$PS7R+VBG|cB%q8{yMSoceU(ujQ=72edwN&R!SSXRyID6L@}kt%ulAzu2m zP)D5A%d56(>l{bImxw|gpZjyqgl6LkHf+3fu3^U^v~3VW>%~8*PAxduR9`iPd)IZm=2Z{-DuU7&Z6X0wvjw z6V+Ahiy^YfE$fl%N1b9f>Uo#uFroqw|-oFC6SMs z#I+IZv$b-p7aw8I7516=+V(bldpJRNAo+6DW^13D#a+IKnuu4x=Tg`M23jAXnf`C& zZ}ihPu?PQP*`alH7nAZ;KDXWCt#xYv+PEvubYBK;QjEm2*%dyibp>eQl9Kgl96q)} z>sMMcrUuo^w^H*N#P(;LBYj__&n@9j-93tJL$netisz%d!8LAn|ALFn(z`ErQn!uQ zOyrF$hsH*+L6q0k9$_yk)(N}XiOT7ISL_ecs8_PH;@NKY3Rj0<$lCa0y=OL4DW9uf5p4M&Ca_wC2>GTTan-`YCmtrrF zLE1dDgLRTZ(y}|o%L?1Rh}7jn_H&W8$X4R=*uiaF*H6Qma|z>(>G*2H6Gt!nzS$0A8%i&OT9&2a9CyCvL>J;RbU zdpN{WG;1}s?frOVYdj1IKh7=acscI8teg+`L!k|FoV!tHK89ZjFIcZ*-0*FyZ=S-* zs+q^5*RYq@7NeCSX|q@K5NoJMKXV(|R+#GGn;=-RktKApZ= zey)|j(L8Vp)Q=TmoepXc8~egbaCAI+s3I{ghSS52Y%+5xH3$B;-P+g&`X1G zzK#TI7p7=gq{4s2``c4ZI-hL&b*iV!AFUjqy0`k_r$kK()BY zpQLN6)o=7_w%y$s7sF|t{czv~IMygKNP>O~DxUAni!uB312nJ=ofgk|U7c3uxNSoH zmT(fePIOG*Cf|N7NwGi)K|*XR_ZDO0XowN9(<6-DM@xC#x$p0WwXeek=_$~Cb1v1K zZ+70L5&PzzY7W!To3r$K^p2Nz4-~Msh!hre84+6mZIZ4gB|~@U_`Q9W#dX4PEEn+& zf~W6sD7YJ2tw!DDE8}lVxKC?VzY{&9_1su{H42!rdA(gM@!GK_;dbqBAI1$=(iLe7RAhx4pY%?5J+0Kztb4`I-2kH z@DW2PU_-qPJ(B_`rZC3a=*LT{uY4bO>=$ekGr@*prKf|JwGLLyJHuzv2m!I~;A!ay zmN5yVTRemlh<=s(=^Q-=X7~?`V>@p>YDT)#nVJlm<@Y|3KBpf@1S6+qq*1xHMxV&< zFVlWl!zV2p2UW3)na<w*M?r@LyIp6@MA5wgn~T;PY-tZo!8<(?*}*fK~CPvqq}S zrED7&FhVKj3H^t7f=A1bg!|)}YTiUo3sjxZw%#w2x7?CB**k7Wd7C;d(@+DeU*B0rJfYd`9{DaSe^Vury%QW^@YS^zmt=@RQKXzzZPC$hYO>qjmo)y{*3!F zE{4Gx3@yH~PJYp&+?)<SU$gClwF;h0KKPsx@XEe4s^WF! z-@C94Pk`5F0=wq|xijHcZ1u9&WY6%aG9C_?_Y_hC3VJp3xtB68qzjff=Qn&O?_l(j zo{8sq&xJsp8&&hR?+VGe5iO0U(NYyr=f$sNy}-+Cs~i$$B`{aGk_r>fR*fYy6)Z?* zf(MO&vD+P}Oz}osC*^ZODzR(# zdAy%WsuC>5)LUBRq0}gu?!dywn^8-;o=F>fUQ5^!<~hc?173}1HMS!x9)+iFo`KP+ za=LnvR(GPYFIE}q1)+a?MtiP7;Y1^;GSSm+gB`8=chOGjqqB<<{;^Y@nMvScZP(Vw+PV zt8;_WW9zQP(y$0?IaXVeW-8VFHBf;|9&d@PZeDJ!To zHezei-9pbq+LXB@U?r7z)AJ}rH$IWG;y&%PeHj1Yz>}@J#d68h7WE96sLP%s!3h=q z?AHLlNC1n-Y6YU6HOamm?bxb$jF$s_lSjcvRg3OGB5iji_I5)!;4As9h0;s#r8*Z& zwvWz{b$>aZ?RT=eI8LU!^vp_`yYpgOkVg-cW}U+qO%J`JgVk~mI85;aUub`9gABIX z<>1Gx|J{+fN>%rr{DfTp0J~1fmh**m4 zmS{yiIXjD|rV+>UULxZ4rOekxk2M^!G~XTN$(>!^eTtT_^&JV0dLto^1;a$A!!8ZK z@*v2+x*WE+6jmLvKjL&i-Qs|;FC8pByBe>INYrnn@{p{895O59*GC~<{dJCs$VXVta(mi=0!G-62-GROMdH79}rE&h7;-Oi+ zDwTkm(XGKI;J+?0yxjvSM5s$5I+{n1UJkKu>`0;&rl~Zap)c~ z#C(|*AaS*^b0pX~xnkHk66}0-g|VYC)EBY}qNmR#H%a{Gxn$UX6^=sc6FZ!)_Y5>x z*G9*KWJG`HI7D8?BLzuCXAk0Ka13(K=BwPLITCDaI7h44^I~mE`o$fxGX@CtSeFJ`?P|5dDi)ANJm^@8^!KR=D40pjGrXUf9o~-mu~e z%*8hARn?zHfp=x~)VX~nR7B3;>;m?B?%U^b6&eFKWNNpA5u2U)59~BDj?%m}@|dnW z_-FxR4@BTnY)4)sxzns(LD-N5j-6`=x4(% z_|@|m>h^;^&%THk(fQXc&%6?A@72XK#Q0jCqGtT@#Zzt1;E}%^QLS&wu%>aQf^Ye$ zVN&b3LVr~_2AU)aKz!BqH!WfFnEi~*u=kp6Y!yGjW=3Y(Ow4jM4$Y&jJ)AesVlDap z-rlJI_Y!}#Mjo{)R`um{M71}r)EcEkHzRS0dw~sN1n5YONg#2NsnchUTc?k7bw2*e z*8Yc5F~`o#Po?(nqt)++zdjY~|M#OBuM+L&QQaDCPr>J=tULGA;;1Y39kv1dL?v8a z1I-RB;wk8$)cR0e)K2MR3W(?7$(>!!WuOE!!a7Qb4yx48wMXo=d?inv z2%W$+#0Zbh-+|sWO9<~Y$Jf|bvC-S=!*Z@&!cq$MdhoE(dQW8~KEKsD3VQ^udLZ@T zb51y~^OE7vpkTZcMvLWT8H=`O3ZDepR&O+P#nLF-{flVBeZivY`}-mx;`0vf4}R<} z)jAmdda;I2AN$Qq@SVmX9t%CNlT$eke5F2rK62oqG8SWA{Cf1ZU5Owp$(E#y|yn!iddyv-8!D~;Y{MkHXu5-W-}ohZi{5M>|NOLZaX6Ji1R8s-)0_rZ_~E& zoF4t_cr`Ix%CeykgQ?ZpW)ZjIGPSlDL2k{h!xz`z8r=*>dDdqc ze_HE8Uis|2;z#>Iz)N-P|M*J?^Ce&S5O`5V++;G=LVC7JKA<6LbI z^R+@Y+MY~p-Pyh5y(_2C-wbC}6V+4NgyQK&e=7U2kS=^5!!=+-@qjK<>fm|JDhGd>jKk@GHPwAc ztT2;M%NlCW^{wo+CL%}-etTHl1P-ZdqASN|66LPrG1r1^eomW&(wCW?yY>!f#yw+-BtJK^rs*C5=PI;VwczbnA{>_71 zd_wv%G-weY<)x;-2!v`oiQk)yFBdvmJctP9iT`r?;(*ywJKT=e%; zmARVCD*G882!ybJh%#BVZk@w(dD+Tgb*$u)A)jAf9c(pG%$?fd)GA+3h8q0a_&)V2 zk3`CZj*WFl)*%ui>}Ydz2wGk(16CVGDXl)WZo^roSiBm4*A8eviaG+~kbzftBct6H znxKLgn*fV~%&IR7a>{7aq$LiZGe$gatFFp%fi!+L&~{u&UdKwliX|c)RJ>``pYEav zQUc1$BG%% z@VpDrkus(~6L|&%$Mj;}ZAlv1wOx*vu&NkuH5#_{*ylQVtns+HRJ2j-vm7CqzFK~+ zHL{?5qm@=|QKhkGzZ|E>92dWJs$)^%w#QYdSdAgRZoO*Wk)vfN-8wPlB~Iiu>O7JtiS4Yk{0(R7O;Hsz z(;m0du26ZNG{!-kC4gV>tD$zH8O#SOU;AzZKioJ?eN3Nk0)6LpL2BK2Qn99QLLYVy zl6MC^UylHW8MfJzhQ0M53UmWhFAIJtPNwvC9X_Gb5c?+d;y#g;VhP6-SF?iyKGNCc znc6;z33^~jE=#ScV4bSRVVx_q8rSMGL&Pe~sji#oZBep7*{_4oMddCh00M9LlkfEu zBBTu8+kCh~D|U%yX}5yf*yFi!x9L*sZ2gP1Jsj+9Bt_j0_VGMjg%q9*@$?pa^4vO_ zHpTPN0Mn9xYtV6cu*05_4>~5mZ1l>$IFNfXWVDU5?E$qgEqm`!d zt+i8;o_=hd9xOXqqpcp<7iT7GzDfxXWB8YJ4ALf8p|=L!p=NR%5i3j0Dg6v5m*wfW zLO7lYK5CG(DqDeuLfqnQy0;51SH6V*!KV-Fu{EFS=Q3qZojL72RgPI$#O7|)ds%A| zjs@~aHr>yL+@ZE1hD*@KoNPlx1}jEaP5%i_D}E^75a;76elB+a8TxYR=^t+f3?of> zhedjih^*)%=XWYriGu?OTwkIK}fBOP974)YU$&B;ZN`F_8uJZiuOl$c_w zMuU4F3t4YJ>u9Q&H`evB$~dmk@X{-|B~(Q2ESJAI=h?U=4zz1jQ>I?rRqz>074Ms! zcWFc)-lZ!&nifC!h4{tzM?|n|RJIvOXyb9rIi`PGeO*4)F#e@rfZBa} zbYY*@_`^nz~QMuYa0 zeJ*(dZa*am>Mkf8WlC zkPE8K$e=Qw*&Lj<+EZSpNTcy%s1m0l76n|1^O;>{@6ouI=Cieig#MP+N&P^cJ zn+O>`ltvjAF>NSLsYHMl)Mq1Fi7%S^4m|a%U>00pd;c&* zfIUf4hiUredHY8LRC0TM6MSc5n57dcy6qdYY11`@ESHZ3usVkP7|L;!Uf&ku0{fXv zNu5rEl?`9RMZSF&AZ*zHlM71iUQMPwSI2#gmgibjo4|N^emS;%tj2P;SLPsnvE2>s ztc$1NpcPJ>+&?D;cQMXhVV>2UWyM-Ht>9nM!4Rp7srt5!BiY!&|duHYtVQa zxg&R(MyP!JYfMY~r187Uw~l3X?3tt@nFOOC zqXKWHJ|?}GiT9@W23o53V=F_EU0mo;Jf%lcD?zo$ck=hsD!=!_ux_E3rBN&7t^3!3 z%>P^Qd$qCy{~OE5aKQ@0dZ{bCBYV}k&c12uiw-pKDCzKk^do)%wsJ}?!!-4+pvQ0I z&AMmKx~}XJeWvq8$|;oi9vxuN(a1~cY1v?ow?>0Xp_3yl=$`x0SR-cG&IFSyzoG)^+dQbj-Apaf@zfmReTlwvGa^;cqU3gFa z|E=8nseJ#@&JCXd*gavvF# zy0ing&(3Ae_aiqrlC5e z{3>`=pU3)a9EwGyFq z`Y-uO_naPIy!CJ5qZ~+AF>DXx<=)E+Rsq*zL?G0Qfai1AEs*K2pi5)7EYnNyuOkX9j5qP)i68bR*kpZVDe zwH?#-w!_Ke!ejAx@!d8dL6~cs_Qg|0ihDMiY7Ndad?-KYRJ36k@_H{>yfb;L`oQ&j z!6hENom`bup6crIXub9NC7MDX*Wu7Al|5{0<)y_^+NtLoS98s=DdVV#hmqb~wOaW8 zY`~#XM*m(_52_j&C{Ya~mb6QlO)B^FO`BcCc*Jjn@>4IeZ!N)|H`!j3Dgg$|W2EH$ z^sTAI_FiHoVVu5s23u;5y|Tp2Ya{oq#cY*ruf!j>Zyl+w-ZU@dqxH?%bi<}+>&en! zkMzyo&QADJbSW`{=`;5N52R~XZH#}@dY(~F94U<6<`cthR9}QWqkSj%O?zk7&&nW* zXJ;@ame;mt($6<=ma_T{N(<@x$M(NLYD%AKoz%_2b64M#(>~S0)2L00e$8p2%~!BF zPT6Um^&epE@dq_Yx|BR-DQDYWEFNJG8CS@a! zJumFsIh@tT8@dL(P&!fRt{dG=O%5Vnk;We2BaJ3$J-!cfqtqPMWuG9dyJY2$d%oKJ zEf_jJ=YQR)pc1Z4R_7GGJsg?RrNU%NTFmy^pUq|n8=w3ae9Kds(f+RF;g!frfWxt-C1UK)4mk13U`xi1k+ z5?I_zW6NbB&o^3uolCq z-o5#%;C^eslS95wGzC4bPx&OrL;aXmk3qLSy!+{KJ?kUjvLCiBGw7qwB{cSOEA(h6 zwjBD_>Cwe4k!{GVdY}2Q!kiyB?Me{ zTIOjMdnyw!wliAvV5s}0k6shy=e=F%(d#)&iSdgo(-vHIgwPJDb`HR1Vly%k)$ zQHym)bb6>C`dZdaeY4f-*0j_Zn{8HO-I~c~5Nb2-sjXDB)2)o#MAhW&EAT)<tEP{u=;;%|P|c;gWh=^;9huO{51QF18Q)8Tb3O&p5e zEU(X{Ngte2YhoEaozHB2yJ-`8I+bU;;6d4p3|={P{YI$i{h=EVxs^B)1+VZO-i&q= zc`BXtHz^%UG&{C8OB8%4Ji@tpcalibl;m6{st0!(l(e%H{jY!-T^;l)F+BbEvD^!f z(G!G7s^w&Txc1q>z4i4aUs7r2&#Uic=I_aA$LzoSz3jsKFWJ%cJMjoS&+<^#SK1wB z?|ZTOXL%l3^Fr=?Esmcffg{iXG;=W+rW=L++=BSxaqG{SS4NiL@ck)~*epsWE()~3UV25e7CcaYZX-_6m z^v%0j?TMz;HJRMAcx4$2K2(FPTB2psAtlMhlOS-JdNek^}}!um#c@_kQeF0={!q$8(bGw)P{}A;VAQoRL5>FCbkU>SVU6$5@Ab( zTBx%2%Kbm9h#L1xnUc&U9d{@v=FxwZ9Q6(PXVK;xtN$(*p#6=l{WrPJUI(%udNs_K zeIOLryl(m zgA}rU3N^YL^ZOG1-A&<5>(z)fOCu)yt$Czv)QRN#kyS2F#XOdvf!fF=Tr*}}qH9Ee z-d;%MZLFa*V&B}Kh|H)_;t~*FZnhdHOZjLU@b=?#y-+s~zYX@LQT6WmQHwU8)sH*G zkyYdb9V*c%JQ3`>6wfWTbzLv^!4{txP9%2O2i&t>-I*Z+b zV>+)Kl4ZJ#VZR&j+@|f{MxQ2O%m&EeoMu|AJ0=+xjRvcKbhhCfi|+wqF(H$%Yj%fP z!<-DRW{0Qny)3Gvx6;W@LN1@#Zo;p|Tf2}yEzfT^VM#RX;Sj|K_e75R__)PW3RZ0y zLOOETMLeDxFpRr_TTD;u9I%Ui5ZPGjoIUosY_GujQoxswtQc>dUbM)`mQLQ55$UtT zsKaRYE=>Oz zWUF=BZJeU>(pn|5aaKd%)miTbH0j+>jF>0{l@EQAXZc#|d|saCH6Mx=`EFaQN{^gJ zV+rU-(0FznFEa^TkF1O%@NJmsj}Vqd?2~_i6YPxPn?hfkp8vd_BEG&bT`{kh);e%c z&yw$hdFib6mgs)}yh|hY%{@@w@kM>jrm5woXpwQ_c1a@Ki-&-v2DsT3TzS8Dm?8 z?h4a0Q_W^OmDS}v`LUdHsFmS!N1hJ5b!#*_hC-_E%Cd6`2IOGUIBCd#r@q58!6aR+ zp2+>BY)!2mXqWrxrmNTJeU7^}>!6m&*{syBjoh~uDgs*fjT>~<>C}?)!JK?(neLg> zp~&AC=hegPP$Je<3i_p~tbFH7YIX6T3#Oc-jS{ zkM5WEAoF?UvA>k&H-(RWdnuJusTDKU`G${mFln|&e)dl~cHM%qd8{L$+vnlYbDd(n z_umyBCKHK$y<6E7x;@4-3)M}wmS8WIqO7Ui_;T1Eq#10yX5H%&*Os?%!zMD=>=r{} zr4;x1u=c5)A%XI8oytm)%dLH_+v0uLr`RscS5H#PC5)|Rj1k2qD+1DeR1C&{%^>ws zYAau?{#|B;^y`zvn}L?j7KpLmAJP78VBlZdMgc_Ey1PNJ!{5i|+Fpln$Q(o!EjPc0lf_2?}M>GR#03O*T zJj~(u*ml+$3|-G<%hfWJwMX7rcPG2l#`L`;B=l62;CP@*>w(LhYBjw^JsL@{U7WiB z@eu85@yEBNu{e(p?$&BpqJE~cl;=wlMD2tV!2~*Vsw1F}eK1dUJLJZ8i@O7C@_Dwx z2)cvwsc>8ePFPmYqW!R~7Wa0jNN1-z77a35357j_)}~@A)#UV_R5~h09M;nxN|(9S zct@bfDZyA2YCG>1y-it<^iM{z9th7sSDK&K?EN^ymUC_$q9u!S?Eja%D9#s#&N*ui ztG8aOGL9s-=!#Yyk*J$;A?y^(pGi7cqm z-DV+_&m{0G9ATREtg^q>gH8VCR@fLUr)t+X3zt$iA)DEJI$7=v?6UTp>JpoCbD1h_ zeaE87H+2GLtLI$aC1*37j{#yB=?>oAd~IUtq(V zK9oB?l5gM28=uK3Dz8@mb9MLp3EuEju750_;l3jo0g3xS&dd5zI*uHz{vxpcRYpFR zSj9)OPx3GF?^F4AORl|@eW!nv(LRy!Ka?ws-HJnW4;lOi(me+J|1juDEVV(1|U~FZ2eJ$qN37Xf+=Vf++S*9_rECVwaN1T-Y=_syOmdl*e zbvDp0QOaYX==oOF=Af0%4hu`?ciB+Gs%LLHRje)c{n(z^Ol5~rk?FE<>K|Fyc(x%k zxCF&R!Xe%@%d^4?A2cn>pnR57~_>|m#~Kebb!)aX)qTzIi*ZhPmXCDjIn}x z#-q2_SgVz1lHxZ51s#Z7BRW82jQtMyA9ut;!Jha}`JI>nS@a)eCsiDuHjavMZfAAo zka}O9{FA(&iYe{WrkMu)o7(n(`S^Wy-XXGtC$J@<7G@gc%UryFD3%rfJ`x-0_hJk2 z)5e`)Zn!{jP2Ht;_UFKTIH--6L(_7AB~5GB4hIfD zk+qU#cq`Ngr#zdq8pHGb>sh{fDvwoe8YB65cLjF+wWql)w&~fA$Lph@)GBJR*_NOl zZ`8gu%(bAFSV4KrzWFa}!7Q=5o*DJ6-SS@FiO#hBMVscGzlX@{{OzH2zOw*_r*A(#7`dyL?7z8jwwl()W}csWX!YqYN5+PDm&sOJtwv8+ug?eNEMvd_jGcK? z{1T{fZZU$8Q%Z+5=VR zITtE(<867B<8D%m#i%q+LoZcwUDjnlD`oSQ5OcFE*<2{jqpjFGxVrF*SFt_VA+gzS zfIoC~VHdArd$0pz$O`(qTwU13tJogw&^*N9ks~(+icg2Ek3~kG3|Fo$Oykv|Wi>;bEm|gCQ-G}Ph}<4LzmU3;_;fJKVPb36`;A;B_~IGH zs|>s5b)B1qcgfnQXNShH-DDOjw|HvuY6<^#JYLBooc42LOJmb>PRHt-Z>-%nJ>PV! zzWK%)b<^`r$LgDJEK_@Q@e;J%HixCw*P;hEv#K!i`fKUeK})Y~Y9{_#OIJz}1ZI3F z5%fnx-@qrsZ)SCWKdNj9>l@3=a-FljKb2OsJ5xDPyEEm`+MR7YFz*e4-ddmQ!R5UX z21+;#`!{M*u~&zK5%#Kc8Xi3bH9Daq9g2?;b{tUi9Cs0AKPugh=uM*aK~JTUOWzl2 zb}V+Lm7G-Z(}&r?fG<}W+NF+@h@)#UbNW42K(V{llfHpbpzu&hx@ z;PC!j(RjR)G-9L@HHR6bG2E#R#Ou#D?4szMuhHbDAsqG@^yZENr`!?Fjw|ik=3bWy z$HMdRUL>zdTYChAx%hsMM-}vlqtg0;RDF3h<>6VY{jPgEc0Zr%`QpijxOX{KoS_?$f2p>S{{$yCy%BYW|ntz@h+X z5h|Gvq{5WSMqMj+Xr(YQ*T;^+rp0Wm|I4fdl&W<#;@g4(sx2PDXc$d5_2IpLc7{b*Xu$06pq?!ZYihHYy-l&#tXlhe$>tau z=vAT~9$tZauT^F?r$r2q(qx9I5Sgmj2>9-o)~_ydQ{L*zD;s}XlIDkE=UMg1^l5?P z7{rpjBjTAH2u5!S*3<&E{YGYe_>^3(S|ZNzrC{t>{++D;S+X~uNnZ7(SfO{sB0Z9w z*f)ot|0vK<8EPr@eJPggRCmHL?BZyP=le|AWyEjNx#%7#X2Z^_BUvBk*o@;gbc+D4 zY4inZvlC!)=u`8o@AYTf8;N0mSDWYB&q;V6+Q-h96eVm2F4hxkwpAgYkLL4#EruD# zZcl~E>si>a)_ypbM(mrrQCx`ZwAedsy45^LqjDR|mn{J{_N-DYGL*_J=!-qMJ~nuR zC!y&1r>7tEQYZ0>n146TPX@8CN8|d~E?sHWRH>Y^J%Y7WZcgUvj#yusJu|zT!9tqd=?BSTJ^ocJ7N`DMK672q_SxL< z?faYBviAPt(BVS%>wF-4{`oiO-8`3sz5YV<8+LYkYS`-DvFPy04c?$0V@_Y^X~BLy zV)*3q;{og0m_KhqkJ7shp_x^M*G#64N3EZxjK3w6QeWfsMzpcF-3Ds>AbvA-U8r%* z4!DQivUDvP@Sjq>49#bfzebk+a)X`V%Ds3u)Olq+6irK3rt4zOI?#2^^uFg3Yxt|& zuSm`Ml~Ou<+j02rk<=(j5p!NHLz%$m=j4DjbTw-hzE`tA!ZQitoi5-$=x=L;Ca)n1 zUP8AXbT@joR5-4d$6JV<@*fIu5ffhwr(!G}hOp_G1fr=i4mzKX+yBr{v_^s>$8kFoc@MoU0#tFx<83ZAa@sF&*g zX4e3`+c2H3z%8L_ebjj^Xu9WHkso%(KcBeDaCr-_^^P@dMXMr&JGhS%uL%*g&LJ7$ zzX-48*0l2!3o&*-E^P5=ekG%qzG0tI->NtElFm`g2_9{(*+tV8M%zBW0xeR`o41x- zN{mwaI z^mB|}=UUvR?`p|TF@~_^v9Y+FGSpGCep_%)uEnvwW4W*2;p-O@rqCE{5C7NolE-br zHn83x7hSE4b838CW!>cTOLb}8y4!Pg9T3xlxHOR?@MYhej!{I<*wc1WOn!Qr;Gt+V z@|j>D=+Q@uaqVcU(d6o<4Y`>kyUd>{=R}}K}URJ;MyFbdm$D$YJK0mSYkFs|>mo~YdRWR;)cyrg>x8~}{ zH&-?LnXH95?z3^%b%gi+*-c!csd{g*99QEPc@EX%6@w)pF*$mmm%o4haP6iBtsHkO&FBY8$&3V(ek zo_L=Xy3Jz(2_dbY%O^Bq%}OJ4ePdfAFR?wummROuPTz@G^_@@Sd~#d*U#gtmgMn|) z7}OTRMaRjl-EK!tE=%{Yw9mCz*08xNy{jmOek>-FMvXM@vL^2>6!s@U$(p;Fwl$Cc z5Je*IfOWgFk98qePoLG9jwYqtA+tM2;$N=U9DzL%S})Cm_V@C?G*@nlFt@DznD0bjG4HNHJ-7xKS$v0l@@!}K9{V#*faLICU3*$^v@Ap z$|&91mXm2m;a`_n?gmo%$`$PxCK{RA@UP2h?oMUTD(i3432sk2qY1Yx&du7P6he zW#2^myWv|ZnUv(%p0CNX-BUXKY?=j=@)RGO*QyGm=)w+8c) z+vPH(Ew}Yt?T);})7Si!L+FAOgVwZbOE;wNLOX;s`~T7wu{@ORM$HzUvF&d}8tOl1 zY@4S~jj!y9GqyEK_-E^^>6%98Eq!z^q01#+#TnbO*Dkd>bqhA){j}^J)n?l9n$XXx z#k+O?;AyKEq@zjW-KAJqNj7RS(Xw&lTwWhVY@g>`R31z2%2$PzXm|&_s+Fe6)MrOC zyG+`7TpUw6JY3q5f$t=RJZZ{F=PsCn?*&l!y%XsyZ8);1UK>T#%CUF?1kGLHe)jAhI_UNeSR7T5GW%~P!Lw$I+Ubx7M= zmv^F4^Gak_PboWe@8|91tWpb)vU*DP4ZTK-lXZ=h9lH0WR>#JGeWmgc8B5pGifw&e zZVT?ow>j2-s~Wy_Rr7J#80pd2*jYg!CjED@>dP_&$49p;T`8v!>zZ5v9;~DDWOzlGUrT;QfuNK8q3TqyHeZ?IP$Kre^ z^|#+hY~>&F|D|w9%|f|UgjuvbPgrYOlftA3KIyI0t8bvU>~=!B&0nCNc$;E5y=mi# zdBMKrGk<0NZOT8^TOwc7>3%3&L5;(5=BIgzixw-|FY1b4A$p{ost$R`eid<3{DJk+@_024<2ym^!DA<#*frSGF198^Yh` zKEU$qY#mpBZJe-u`+ZGp?$aVYo{AO!QRqXh(z^UvKlq$$+wiLW-oC4TNBL_0%KY2B z4Tz(y>+QhjqItg+3d0w_3Uv;H3+|@2k7-@!u=)JeIca`>&wQ^(gXw&q@u1BU_%)9Q z`)GCw`>(V2gGg616KO$^ag#aIdsIg+je+zE3bE(Pjb`N9Tr~U4& z+>0mTbqij}H`Jrx{dy+QnIGHy2==t|HA^1dZQ{oDR_Y7kEqsKO&-WAWyqx@MxD?Np z+Jf%coW0xByL~Fvuuo&lhG0yr-q?rBG>p4WV z#$HxcE!MT2mwMMY0&mjtw|<&*sYh8ZB#x_lx8j-b`oElYay7ld?G0E7B=DvZeRW$_ zMpwC6It3RJZ@%3;XED_WlY|gw?TLAfM#<7x$X3zSQ_OeBPpO|pCLZ3ep8bMcb9zOI zvgEkwiZfWGy?2^>^<5V`&@ykQ)_2J=kyq)tE4kK6Pu3;;Z_=`!=mOSG$Ka9pT*rc&(>$np5FYD0q28&kqYUMCar^x%oLs+`GgRhi-MLBZqL^jH83C zow2z#Z62<4+5TIP<1xcmGJc|s#u*>T-#o1z9=;lDaMWi0@ARAQ;pTihz9aIjRVR@k zD&WoQbzg~eS#+Nj!~O2-N#3~oYx&D%qK4FSe)&hT0#c&S@i-HyqiQ|tC&n2cX4e9G z`OIip(m=}JYq`u@DbcX5PmIUxJ>UXgSKaU4n>dCXVDyRBnfQ;;>gDct@=c!eKAZH; zzoutg3V0r^#Of)rUiAWb6IBS6N6~5C6XFc)>elnJi7zN>!CU-Zel%jdl;7?rx7jQo zmfO6QF>Z^kSE$3_E!AOK*AyRJeRwj^tUb&!fKATbZxdavu@d_^CLfh-c|578B}Ng&!~< z)k>iSxi4A+)>=;KqWT%ysrKYO{n}G&on1-17rE7_5AU&jW~;AJ;)8Y8JN8pTiO}EAPt6`sH7WVlbOm({f%9{#Xni?j7tM4DQj>dU`R# zqhIhD-&XZ%T+tgx>rp*BpUvJcud4AyarF9xU&kvSs>QONP3fhBy+hp%o{y^Ka8b`! z`nR});$ywKD$4b0c3DlUMY*a*#Vf#szKhXpH~<8{GDyp6L4#m~9~mkI8-`df#x(5J zYBm4k{{DD2EXP-~8emY(?}Q#|9z{+8?G1i>N+0q zNmVYY#nF0oMZdib+O5jV1d!8mqA|F-nqd|+1pSK~~rhe|)*|SMmkFzu7U%Pho{cKfV)WeeLD2F@w(z0vMuVx+H_#p#K3?eb-n1?~sXZr5&3t0l8&4mkaL)ScysdAYhG($-R8 zA7W!4j7#*q|4Tjk)&2yso|g+y{7Nz`k-MQ_CVfN2^~lbTpVur#Xf*$Mz`}$~u*%7? z|JI`V$GTorBS5oStSd8H?s+-9swSm?lb!{?j!4)+UKB(0eqI&zbU0p*Aad(z0n#iM)e_TR zR(ldIPok+=Llf}2JDk}0=NI2!e!Qm^`XB2GlXiGuBwE@~0ERz@q)=epCM70EbVn*= zTrXF}?4tO1Rj!KF%uG~i8=9#?twPg`_0zI|STEkyt7@`*$GCc@ko9h_FrUzVJT7L_ z@pW-ken2nNqPn=KhO45!uubcw8E&*!JSS=XshrHm)jdY>hjP3&!`#yYsBZOQV6mVP z$1K{f3kFB5oLm{kR5>2cKEA2Y(}yI{1J4<<$1khvIjg1RYEe%w-D*|DI(QV#BMpH?sg_RE(uyQy#rQ+pfgqVz zLo!?(DnbFZo{zvotupEdevMe5qnJuJ2qYCTK9jqk10$^zU|_1VEAW`HkreYxs>Nkh ztUk^(G~mGt=C^6}(E!MOPiX#-faMfy2JNYV=ijsx#PrMaa$6}#il|zyp3Fuh(jB@% zRbp=VY2ZY4F+2Z>qzNRJnyk<6gB-PYq4m5N07UZzX{i;Nl0K}8jPQn*$Z{U$w{Cp$ zJ(<9QNKI=?n&tuh4N$cCsK>$q={$HnDKD$nWPqfR(QU#fwwKNWmrK@(n@{(MI!Fx{ zJ(FUHFz$bs-`r=hR0Au50vrvxNOeWrPQ={4V26?Sifq0gBg7Cg(hJaS*;D9`v?&cj z|F#)O$y3iRRh`m*#ZtM4+l}{6n#uI&-e-<849`QNJbD$8d?{EBFgIw zs@4Jp{9JY|{Ry{0j2L5eSuG?d2$1ze-Wo)Ak8QB+(>cJwG)!R*ZH#*{op5dZXh+;s zITY$S%TB~O7S(FKn94W@+va$1FfZIqaM(I z2Uk^nd6n}0)jMh5S+T@Y3C{meJ#-#Xk&6(w4jP82F_OqrL_i1xCmGIkk)GqC{J70< zZ_qq7yXcu?dj*gGU4C<)1;pF=12)QYLOv78jeb@HV|M>zbv{qxY6n(?UHHLyJ*6mZ zI|7Z=H0wK1Q2sQpF28&z|NRRB(L=SPzCbG6j+ZdU)}n`+&_^goBc%&0DGQA(y@aFD zNVo`08x;2;6Q6^*3)wEv1g&jTN^ms$I33SQ3iq?~KqDdU^P#3EKfHONl;CQH%@c&U z1t3zv+?4W*_G*F|ix`)Rb9qr%_ty59}zCP?+?D(nhIGb$u3S~*%E3jLoEn-C2jc}0M zwNw7@z~gJ)WsnfuB!9Pu!S77mb{TkQ;zD?YZmS~Xz%;m%%|X(IjYRg}*i=!yM%zq= zD%*tfaTvr^W=BWi+@W2AVPj*)$`2ZC6{9D$OI@?CZ35lSCpBvNdLI(=g{j zwSrDWM|rnb(8TX3I;xlBt#LyKt*#3rOG&7P(A`VgK$kla{dY61Dz(KZ?Fe{jG6ia;ti)V^VAc`Zi*0`Zs|BKwCHIg z%72-BXSAG-NbpzpRn{$Hdewc>Hb{n+VlxaJA_o49pgv8EoZ4~Xmz~jN^?YwWONs}} zs{1@eO6n1$;Fj5ZvWuOHkq8XysD+O=A=g8!D7R^Mh{@*UHEGNn+fqxS-fU3$lNQ(~ z#xr=2nb7@W*W@#iM3yaA$cq#zAYqvbia7;871Tm8TLY~S=bhn2Mx1=_M%hPLo0!w! zbUhs6q{YR0Y_sWGI46syN=c3Tqv}JAK09N~@R*i5u!mK9A~C{ z-W!2m7MtzDiqwl?kdsXeHDi^FMHwDzP|ON$VOdETO3#C{Jn2^SL_5?$n&D7G$ckeiGppV3y z;D8RFq}s&W@%spLDlvp0Y{MU*IJI`{1ZEk(QI~7!k#!>@NF0$WF#PZGoBJ$a-_F%) z(_tHPqfUhKxH0JLpn&U`@=OB}C#RO`xc8Tom^DdfHz$C?fLD zO2lqOz}+zKUqr`s0jjWc$f2N&UfVxy!?)%FG_>;Ejg$m&5Lr~db?dPm5y=VPzO!!B za5iuR)VGF?@Qz)Jh%AM8FoQMeeDu|(_3=uh5K*usQjbz1!hq+*gL#s&3&OYj@A8}b zY(81mOK8J@35L+_t4dLwG>#+}Jmq(avY?Y&ddi&`p}FDqypXkN1HnS6Di&^go=Z(# zLV@MJF~`zSWS0EF+xDFFkCyoziKr}UCkw+Xm$sYEBkR4DEwTJsCB}J~@dlx34BLp|R)l4vf2sLK&x{DRka=&&U)^T` zeNP3SR8B5Xs9B@MbxRm#-TG}m2!Qw1XV7}~5D=1g&Wq(pnQK-j1CF(?vTn{TZ0NrLujepkH7|2u~tQ`*9|_L*yCY+_6`c$EVCh-=q zOWJBy$dV9#UaPs)Wi&#<=NqG+)BF?2?mKhVpo{(rbHzQrGiL=ZlCm+NsXKEvP%{uC zNxXfDIz?q%dJ_n@$<-_EO2y=*Zmv{1_P~jE>ewxtzY0JcEaHHO6zH3&oIVMxU;09~ z`7Nf(o}hr7IV;tUQALAVmYDuk>JsG&(7w^_je(oz@Z5G%GHMf%qIA=oGn&D9}q`}I)M}? zf*@n0t<4I0pYUu?^k{ckDg*9B)YqJ@CzJ;wSD#<$9NRJB2x>+D0O3Ws9#hhtnuu5% zU_^Y|2GgW*c8F;eOaUi3 zrGVoP@`$y+ymjq+ZVF}1Ox9n&T_Y2L00>N(bgLHF{nyHY8#XevSw{GLf~vGq!a87l zj&aXDdF~#gINGYDdlP)}7cV58W)oFXtu6JqW`TNjKOm8Ybo!=89Dkj>O!lTO$QIU={0j>fowXqkzBfne|qf1Q)!SYM1@cM@A8|6&d==z zFPA6*F4*(V57w&!23gUc5R)%?2W9ZTyr^w>;L8_BoL zoscJ|shV>;yfRs;Es$Q=;m#%uW{@>A)Q(MM?qvWF*j6qbR*L7(N7E`pvU-{<+ zZ##ikEs=-+&u7kQU(2n(6QI(uQ)Hqs`ME3nYC_pTJWY8FcY?%*D&87G=n+th{IxLr zZx~x++YG_s6VIumpuc*_moUY1&dZ_GzkJsY>@)hTFWccW=oN@kbi4siyEqx>;YXo8 zeN#SdZo0;ILAIR-*(${Cf;CZ6O2ypVvK!eo$OQW6cjciSuhrF2f@W-El=`biM`19M z+m3Oi8AT9LClcEdiGj@vDn-aU0z(~G_OgTB1rYB7h*SjTx`?w8e}4f)D|H2<>?&@i z)YRv*w6aG=Ad_0t-|)_t6F5^UTJ5CR6*Ce|{gs}h`^EDi-Q&BUS=y*DQNg>QSw8$} zV_uuaQfvoFO3qQN4Lxl-tnHxJuy=tYCpDaiF`v|5y=19_DkwWZJ4E}xsJ|z-ezz)Z zDt>WCSDYCuJsr0(&p7k0RE0L$DA!G)T{>#4*X)7G-5k|1iz_#D42ihy9BX0p_H-N0 z7O(@Wjuj{<$dA?TuW%Q_Fc~Minbc9&(B{cS`6R(jjX1e7s^*Id7dfK>HMz*|_(CJq z6`#?1S1hk)Yotz~uHt%0b*fQX5@l)RVgM}D3EVAzF*eC2bxv{My-7L)1td3cT;n^B z`p%=Cy}$FQRYuBhFD0jqy;G);XLkkS;x5If$C*QGURr&pTuHu;TyCL}VU<23n9W2v zWy^rn;q80XNun|ilhS*CLv3N4&$)!-ygZtY-khFFi$EEY&MruOm%n-xdE5J+*u}!} zPpEg)qm_%+#dbkG9?{krdtsDbj)5qAr!t*XRp)4qQq0SWcG~PXMfCv(Yw0rRk^kKE zt1EiqZgsEZanj0=6L2fIGkVrVnS^=9tdJ`q0xsD_(OYw9c-yEDL8U;# z;tg|3TfC{+G?lGzzKk0^^(+M6|1Q6IQ`$(zNg>d_KWl_hhtu6)$BX)My{P0`TkM#Q zKqw-8L7&rJA|(QMze~`%$T!^@S*COo);*Nm|5RL{jxc#xE94B$SIc`W;P68|Sx>wH zC_@3)U+Nu7R5)6r8C5aX($aIgQk#`>nvR-%p_eV3l#^XuBv(E^8^~>yChd`If`RnK z(Y&TRy>gZey5qFgWBzh)! zo{-~zm*3oHfzh5jGD%a-od=eDx${C3vhzOjsO>gFRdr0FU)T>)2I=By5{@pyM>m7O zSo1|)g&fLu@H>_wI;ggF!P3$9Yn(d3^(s!t8gT)>aC*f(9Iy$*#UwTpUXm8rTIpAq zV!aqk7r+5VpPI!cH;tr0Zk~L4=M0K&jIiQ{GRp6x^U&wB(e;)idtG!MxSA3zj5eID zY2A4^txwa|d-GaKDmtTjaH&C~X9ruJxJ7G})+KL&;l#gWWgc!UF!7oODP3(mtTA zA32(nAg0*J8F)4Y+bJS zdl6`3@=A$*nwS%cdY=3z^)!AKKJmZHZ$jV#2gGinS(H{}X%Apqc3tj=m!Mo${_(i5 z#1CB$aIB7T(Ac60d2)9>=#KsxC6Dc~r9*U2BWl_KhXd2bkF zPvZ1$D}}Y4`cEeXZ?KqJRm34Q(vPQH&!;`+Wu4cNQW`*_R&084?zu zg3t!EuO!uJN@(AO#tfGk+|l2G7ctok%U%}=`IK4PfA-K=fC(vIeTnUU5t!;}RR+TB zF4$yqNB+4rXBQhia$z&hopkMNy7o?rl1ddUjY`NL5iS0lhI$vTzK=Vf@XDp-5V9*p z0CW@hwq&wj)<`_@Y!_vJNc7!`O`cS+>0rxe-foR~VLlrTal}?e*%Fsu38PW(ld4Ot zbZfb8!5sl=+xE2@MZTA^4E1Z7doOgk!6(?M3LJ(;7P+z1jO4N#yUNV?3s7;mz?b4g zd>I+>P`qet=H&1M3ABs!yG^j=8vz8RGX%nK!Y}~Dk8sO(XsU%FwI?O{_ngur?d`Cm zhpiob_G=vViZ1u5_@Mx|nUiTtL$@rrp|gI&h%IElCg|rhf_U+_&&IpRutLE|ModU@ zM5Of3rg1eCf5BUU&ZFZ8$f4%Np^P|l0h3|iK(^38K7XX1_;1K>?z3Qlofz3l0wI=$ zvw$CvmY1PA0yle+Ab#3~7;0T@jME`A7o5d^X#cha$GyM!dkh-<1Avq|yl^~)F7O8O)Vm4rO|ng(!ha=NMx zBA2McPgkiE8*{Hxjs|8E1TG1b<#UWn!=44B?o{mNG=CR{%WV}9;aaJeO}TGpHE5#A zm}l=6%`t^HN~(yldR6j5`icLB{N_FjF500~WQxRb9z$D#Vkm)`h(OQ@PdK+;Uzmtg zu;-RdkjM7B_Z_6VTK9H>Q|}RU^$IzPdGK|IX6QWinH~lGm`CpKfUwn+o^4*WOx0n) zgn^*CaYSvpZF-)1JAM{E@xRM&9wPdxqkDo?5Hu;Etg#aTqf|^b9H55@e~->;FX(1M z>bxA`sHE4k9mPyY{naC?WF~DJEcaRED91|>QnSu^vL3(J&YH24r1~K;AzM%ih0t0* zM;FRX*H(s7BM_v|6_I(3e?O|ESs+=)Y7$4SsYJGyCiXP6Bbm>mS@VOwv>oR?1^t*G z)!$|_)9pxE!gbBlL#j)$Hy+V8?>r!`o|zrbK2FE8a`bFoFK2LrHk@v5`P}^u#c0rT zB7-gPh1E6XER-*1>!~m9ElSMVsJ|LLfl&UX9{svMysC!pr`1P6XSY$&Sj%Hnr15OJ z#`xt%xj345x~Jhp(R~^6C1kN(I?`-f0Ch!Wc-1XtsEHWO-&Y?kTZ>ow>z&M|Omy+F zx!^{X+IK^eoWmr5*Jfr+*>wgL-a?{(v0I~3?ksWg@R`*_Lt{wZ zN{U@DRlOOiBgM4buretB$;=X8GfU31`i*!bX8i=$6ZrCRIDm@C@!R}gm3RjeJeB5k|MDe%Ka8At#^=o$H^XJiQq4Cf#PuRl82lxb|2ooUp- zB*o7ih05iX6iT~XTJGD`^!(pA@){7P_x9%`O1FX1G$E$#--tp^k+QGrgkkhM*2tTx z(*D9_3As1Cx~~aL2+cbQlanydkqvD{3~p6Xfn%p0LgjaX_qB)-&OIy#o?jQHmKHuTMB~>B=?t=%4lLwITNcf++n3hN?eneabj8t9sj%h<~|GeYKO7) z<*Hmz!Dgeq%&K}(1E)&Zv1|7nZ#a>#zY#YnSI&mJ6ABuE&HJu@S=R`1Gv>^`t05DQ z*#mbGgg>DAq=d!>6Qs!#QjZ}}SGHt~9lYn?Bs?iB^Q z55w+-Ww%+BJ0&X|_e+^^Go~Fcw37sKiAhNPR?-l0?UtcCbviS@Q7k;^~VkHJ_U~sFO2VPTSw9HFOX6U$^z!{8H&i-F;)0YFd3`U8z7ieNftpfZ>kBb zPIr*Zn8^a)q1aTHNSoOk$|Q@Vyd?ibmQNb&Ht2a(F64nFLT8U0kpDnybDK4tIjvOA z%RjYgtQPA|;8KY#(B|Mvi2JGgHTYgBVb0t}jE@eXxeL@39P)%U*hx5pVVFM`_QA1|d?~x!RLBFxUjTBfQ)kz)dAs}1Tgl|iff-UFO zVnupP<{~&QG$mA$6exk~`r^%CUJC`jX#vQNnAhha2pVXP3N7Vd$oLf93_fP4*1AVIWrQS~Q3Q zyp8<}9Jnrq;~Ld+{f75+T~FK_iz=r@S0bY$HIXv`j)ijKh z1O`)v<}=mEG*XNGyHP_8MVNAHpz;>l1Y|N!#WrS>O=ux`b+4EU+3O z;dlAISS^-_hY`$?`7y=O!>ie%{uv(F{o+KQtTU8c;94O=WKxz8XicUm6`R<gf2G`qm=!2(75pTXxdKOb*-uTZ@DJMV6(<); zjm&V+X@$#F?XEi={DzsuC(7>$RRe`VK~K754%&yCIf%51A;()TZbDJeyqy5M(-Z@R z%8d^j+vb+$484ZzP0tNIns@x~@|*iCM8WS_a8GcfZ+Y2N4x@{>A;e3OW0YB9_2Si{ z#%^8c8~qEP_}}F>v634Ib-}hY?C(x!m-Bj`&pdwq7__cwP!Kp$-eOgD9*H*f6EM_H z!_hD5^F_J1K0&{NvcecMq8V^ekaRDntU?qd09$r_D|DGv zq2Yd>?*XI@ao2d?#Cq)@;Bhxhbk;j**Ng6|Pjk3&4dr2af~PkCrGeyxjKqiaj)kGa zlB3I6#9NPF2FV{1;RH1O3r*g$SI4ge?W&jf#o4rab%AOBDAv&Z>?7PgPg90*(F7w( z+`Hy(72LD85dh&^{&)G!Bf5>EA_C;Tp%Gu&?&Cg4S@QPwxBaC2`65MbobMlmrU`{o zhB*qCLiaV^g4-acD@Z)#fW+I0xbtU~rlaaZJ*-X;}2;M%m#H50hzd0{`0_8^`~y~tPt-fio5CA>w{q3P5i$4M(4CWQ|V&@ z5ee<1fibye^5p<$B!5I69?l+1k|9c>EewOplVgd-WbjF9NGsK(By)-&u z@Pt7iSX$pt8MPSQE~%6mTY17JL?~4XuN_-=!rT3wvMMDJbf0y6fXY)z@ z)pn37S2(HmO%~SvFIuWov}lVnOkOWSt8A*HrLK|0g#Larak$qyO;0L5M`|e+qSgO5 z-X!AuKE7Mm_ZTHELYL7nR?l8;joofN@YKj@%E{78(?AEqscec{M?&G{IDpnwhy4>Hy zRixlVHi@f2Lbb? zh^b^TtQcGL#E6~v*ASOoiiX4zB&|b9{&S(+FBOBk(TB~{MPr?xjv91@>Tf&CA_&Ks^*16JPyYEvV?; zsQOfmzP@#Q@MQAnu)lmBQ+pR0%xpgCI@NN4Y4zzJmAq@Nl*Qb+T#r||Qd-=N87g-z z3Jq&{2kzFL!zxl7RMa_5h*Q0Rv(_l4QmFcn}>ZRu0f7Ln(NNzw+rld9% zyNsJ)XEUeVxZpbyV~qAf&GVF>%nZz=lLNg<3fDILxTN6?gN3V*?28Rc|P)8#D zIcpZ7zkMjseJ}~sFfm)1s#3{2>gJuRWwMthq#PbiAiN0#gNhqwh`4__PaKQD`qv{`x=DBq{E&B%*Y=_=SOzMmkxE>5&cok0iMo9=JKa_%m^nY+0Y6TLIca4=wbBjy~mD9cBQ6_#}k8U7Ge8%C59(m%_I zU#u|~mg?Ia9e1`IY1J;a+^risw{CRwvL`;5DVC7rPA{uZwoKIT%7n11XT+KMt4#}g z;!EhnRq44V{S+cMc4n%~44)Y~Bq%6cZL3&f~ z$@O3fPV%2;$+{mJFZZO^EYCK$-27hPp&T)#(axhhDyV8GlBrc(A$3F%5~t+cE8bVv z_(XSTUsd&jD|{hMv&lItN28juvCHx6cAvk`WV&e{>Je`u#XrAh`W@ptH6+cdH@U|E zmE^IyXrx4E#>-P(WmeokWE0R~MR%V-n;)!uPt1Vx)W1Sm=4FKgyrU(;W0)6{f*=Dt z#Af7<=Ez3~U*bZ`QMoGH=h$4jO3jS^>sz1hx%<={Upb%6-dm`W%<6h-Tts?pTVV9T zqt5U&!uz)2SEK#h+{~xkFX`tQj0{HQbz>OFuwZXFHi4d?v}TAh8iS&`ENiv&qMwMi zZ$?nH^IPbrlC)6p#T+LY4K)N;bW058locbrSK!sf->T|;1FLPWPQqota*zP|i1Gdj zm&By((DZh+JgXU&y35kE(Oi<^=tNdpx(ABh6Yj)Kc>>I_I_i%h1>1&x^4ix@+nvLq zBBqQ{WH*~Ec1sQeXyx^yUR|FKuPO*L`vVM|Csnzq7JQ3=M0H38>a~Jup<{LGAs>_z z8;o`_u2!qLe9i$QzBuWeM=~K_C4Dpz=&+Ipm@2!D{ZJ1qBj_VrD+HJ%rL(J4XEN3` zP?tlX_rZD%D^EC8;($~2==}V!yg0xAsC;yB|Iujl`2M%&)xrJh@!>b42M-?}e*4Y2 zossEcphi1FiB})^gyD3w9@Xcl1B;8kf!2!}w)0mlLGo!)8B;xZxiX}P2d8F&&PqW$RJ@#UA;2evKXIi1EKH?@wdr{3s0CvKn z4>}!ND0A?iOt5$Lno6s+L0_IPXXEv%LNpiGz!{HUkxfxkH+#hy+1(#C1<_?IpqFq>9YLs(AhC^yI%#S#37F`WiRw z;V3#BQF->3?x*os%hBfH9{5GeGy|EtCUx=XSsaD34RRJly9gBTI_B4BXjmfzHvD zGt|}f>82O#^fD0?_jS+eABvFhwK=oV5R%H9QR33f0lhCMh{AWOrJl)S;z?D!sY+?57x20OyDW*xc4s^j7egNE1Z04PVk!w zuF$LO@Sb0d(gLlCmO-YekC% zL2ZmFHUdkA@*afva0~*{C-=!lya!9?=jt9SuJyG3qyk(kTyTq;2`cUqO)yWX*-hL5 zb)t*JI3lC4U)nR%Nb3$=&xHp+UbRr|jAO+?5hGY|<1zxVEYy@Nw z)(_lf$Y{+xy3K*+djd%*7A|Z*IJXi-zU;zPYNxNxiYM<64)Jk=^;%TpNVMk=Ll~5V zMYlwb5yALC!Bn4XOR8I#$F!WK|NQ@D{!#4}A8M2}>cHkOSHh~rv#Pp|_KQaO0= z2O}ft6@Nw$^EWdi+A&|lOUA^8SLO6_H&c4_&3AwJ_QB)BgM-8DBAwTZ)zwW+i|4bb z_yT#eMApeakddT~7fzR~95OR%mNdhV)=Ro1?klrSzH zKK%BZM|6WmD13Rqt-xT;rhrl@v1tv5&x zN>_5sU=u})=%qv_vsD76E*k0qC@{n=%|u)I)mwJS^aIRm(XLJZM!^;BV=_eEGLxjy zIHY8j#md8z2Whm@{Hqfzc|a=!5Zh4K9ZdALIgpPJ4j%12e*6bRk~9a)I%>K^JFVcJ z0dI=RG@}?o%&l|ez6aP#8&kzoMc>7tXHr=i7jr+mF=XYQ!LRV95!!<%#}Az?OKwUr zM~oWs*xvTZeW}0%WLk|4kHu=Qcr_hgBTPBHPfS#BLlg5@AgbPGa`X z8@L$ZXnek&c#}~}r5tB4!h#YoBy&LbW_disys?lx6wA)&s)r-o8^26&o8jXvVerki zMo8EjyD?Gk>?88X<-+7g(i)x~@#*vGxW5suwH ze2%{%)&PqRN(zF^U%X5DNez(%%1)Rh+wpVX(9Vipv2D^WS;P7aH zFvv@~^X_H2cz>g7{%TQQ*2w4mZzO`;;H=)DP$mxBK1JEo)#4`UOAmAw?vm`5%=9Ry z9G@|O8c6CQTZ$*_z^ovne9e54P1>@i4<;a#Un^xIw(|IuM9lLhfu2)1T->)an7qbb?FGfpZ{kf5-8bFaJM+ODr!D0A; z(1#5IgZy|y*d*tLp1*O#G9=VBFpwuOMBs;g=TB{Jclw<|5}g*AL{aBG#`c9CRS4Nm zYPxH|#+vkE(tgR51=}t5q@1o%sOtK!2yf6fQ!7U!Tnh$P#~uY2Q=a;H zg@Ci^kkYu+#uW~wmFY_W47)-@!K9q#13dNgLpiQD1`gSkT+14p^p@=4HB;(FPJ*<8 zRDGg-e_v0hG+;Zv;1z%!psKk`+V$Q7DlWy}7IHtDUh7*2xZ<}jkYgsK_0}n>Q!g*W zQ`_6oq0JKOkjgMyOmOr@hu<9yX0eurOa#VWzJ9R(u=wib>t}z`nu)I`FYxs1JW-nM zwwPra^|xsj6#w;Oap(2wO)_+p(64y6z{NT`p{8E#yM&q!$jPWmhn>fdkei-W7UQgw zo`BT6y!F}ziaZM)MOhL7%>-!t=GJgItPL8IVQ6!b3s$vp>KX4gA*ufy9``Q6JKR5f zba?mxOPeQf>}*Y^)!5%mO365aQf(3vh^84QemDxGGs{^PZKc8o`88Hhz9_F}>qKNQ zvDRR2yc%N@CZ~Zt3uvn>K^pI(nl&Po_O08IiYisUV5UO?sBgo7 z@LTfk)x_CW@utqykXSE%pX@+k+~{Y(-sVeI&DZt_9WR#L?HQP8LZpbA=~bT$%2KL} zCG_jqwUb@j&oOxsbw!%Afw}_3Q&W{sqzi93I zsF8?DbZcDH9qLLuoHP=o5RLGuReQWzjnD-;%TYEH)UD}x?Rit?L;}A7KayukHcrA} zC+gq=Hyo_ypmJ6y_FFB3MPq~tLTOr-v}R-EHWH(2Ck8T-%?;>OD9xOV1BxbZA?wI~ zVmE>@X@aYT+Ed^F1R`@Bvbl#WFQ}ohI>W%p_;f^5iAb*DQBM&QfZs{s6uAlwLNk;3 z5fA_yd7Q+l{d)p7w&dCZz-bZN%n?Gw#`#B*SMAF1S}(InEs3d_myJ!9o*nFd6L2X^ z3yEbO*HCSzsY*(df&kUgaKfjZFKJoSs~+Sz4YwKp>6r*v14-zmGsy!?j1ZHyCg;aL zoDS>z&+7nI^yQ8<{jvBDI0ZPLEtlCHd!t_bMTbqr$u6VxUVCEYudyj_k3w)3yzS%G z$s2C}w{oVLxuuhr5_5xKLQ*V=7n0GG5r5Nj6EuVERC?sqT%h=}S)rKTs>ys6-@?#K!sMq%vSWgS zsMTU#qxKBIK=hVV&Y@GzylNAOzOROtk`N@qFBZfb%qGQt7<&o+uNfp z^$DFSH*O<|`t}d1s0y2IHTmTRt;v<(rz#YKIZ^O!+!vsR5nW`AA zQKqTJ#8y{pT#Z2a&c%ls`z0V3+SSKoMo26wkSK+!f5^&y53CJmxN02_aQbSD^dqIm z2_!;3_Gn1Gh<7kQH{{D zm|_Xn${0Xl!z-)`qh<~8&MRy=a>>KVUh&`6%7J;oi$@nwQ@6_*2w`|dTg@Mt_^Kfi z)|b2{OFrW}sV}b(MaQ5Zn(~~&gG4YW0E5Qs@g8!b6%B$O#&A)vsssS|akZE!2yo1f zm<&gOmb2;7B5YVr{|&(@RQABOC!b8w=)zL=7=b$Cw~3Ce8Q?O9-k#junUl z$LT;8a8Q=xYlQn?oZ%~;Q@uwFh^j*%EW#ZwxddhD5r%+yiN!$*zga#I1iuf|@gmS9 z6$b7Tv0$HVhV>+R!$hyJT-Epj7=W?Jh-4C)&QQ%}4~&Ypz*|%%hbmKI{b{)tI2O(4 zT+cz-IE!;t0$V>3sen4@)E5|pWs!OxGp1lT7qncgrv)%i;)xDggVWqeYYKiUY5*ST zdU86BpcIb!M8~nI{=ew z6}?_+|I-7wdoa&5$JPk+7_|QRPt|Y*kq-rqC5kJ4B3Rq&(mVOOVQF(Hj}DQAiWg-JNk%op~6` zMlhwZ+b4SI=tGUhla&GG6o|Z@I(U!(GHcXIAblg#;8%k4k2M)!KA|RL7EWhyk!74>n^P-0d$jMXsk|1NNUb(iJA*qwY13H?ELV7nP6XK z>DpysO;*lpM}}>d?YMI>C0R2_1FUYXK(vAk4aktD{9G+Vvv43{lHP$%8EFU$#wCjk zP-@QijGbd1la`X!FC#CI@LA~UWt0)a?E~PXUna+;U`R>zR4)-=xxmJ?F)tT0#FMn` zYZ|naSu#Fm7S@|6ab#d4B=Ua2W~Gj@FyBNGBM)YTuQx4blm+^x$`pBk@2*@?b{@Zp zlp<;Q4eI5~dP(dQDdW(=%yJ~*b%|In9c>}^2-Td&GlV-StG_Ydu$BMn<;e!8AEHH1 z14mIQE+5Kb#B)YHfz}FTx}IsfMse-3^u({kE7NKsNz=#~KjxFw-CY0F_+Hj`@S+Sx zthYMQXHZ-d9mKN7*LYh%9m6zonld@gVJ%4ovJ>mo%;UDKSWfCVxkS21^?FfV)Sset zO6fI16Sp+FiY!{S%T-bW5ch;Fv=3k=T|kh-_mXL;U)XMDX<~bTezuEDU+A9>G)93W z^(%f4G%!Ib14;xa_9c{~`PK4kxq!Bh0Hy@gBGts-0F^XL{WVSC#q-X{ZkmF^J1by% z4cnVk-gf(mnHvP|sXgBInHk@EK zG}8cM1fu#bzq!wEwQ#mGRYG$|;daft<_riK>jv;WQg5-+dv zIZkYRvHoVm-aFi>xtqdk@E7N&X=`Vy!TmI(`h`zfSI{c<_-&NOp#WQ5ydB}s+!z<5! z)qxGTS4bk}EV#0Gr&_)%kQ=wC&vC05QZtKpr)t;TY?!^nT`runqI2Gm*Q(MZ^|)d` zg=b;-I<=FRyegy}d4kmpU;7T6qf|-3=BdT9_P4#I3&raZN&Yxt$EF=1!POOIWa8y} z()d0$x_Zsub0SSb*$JG-P%f9VVU6r`WR8EJ-QGOBMYCrN*p z(_tHbM>rIya+5-h%X@74Y&A^z`4L$c=&4U%t-|A6taZor5(oMP=K5HPn zPo9HPUr4Z@*Pl>cB?(j<6G7(}<$6r1$Ee8TctONT@LZFYLpcxj9~GT%XvDY=>lHUh z0b8Ih$vetMgp~sP<3I)NA6%>*S3soE^E~!%o0k&oGY1DLXEzCZtdIR04>)@Ul8?rGrd~Ma z-(T@*0UtMJ?AQSa#)c0Q3`b`TF6zrQo$bToE^zXZ?n8U_`iCcwn~T}{@(N8LDaRgS z^Ns}(jR#%3wJUL|Cr^zmJ#Y^d!4P+BrXKMhHwvat9M1g^PvdYToUnxF6=29NNDNc? z0Wg*4^|)SLzhWnC2LQ@Wwd=?HM(W6rh!e^RHwZCfWSM)-&&$!Ip1xZAFc$<)KOiOn zrdgzaxm@F1U-~Cflc>Bf`~i(EZ>SDUAc(&C3r8a*3}CZx$!I{ZZZD9ULW0PQ&t*EX zc;oTxqoUh#I5g+!GB`@dP{j6*rXWFp($JNk#ry_jAmG+?vUDZ-k)aJXkjpes1nfPM zORee04sQ@@2OB&i4mia|B4n~5+F%F_ZoJk$w zSZ7`0&?Y3tl6F6<`xH4>F%1gIAv^t=7A#;T--gV~klJ?~h^FimJ2N`&G{xbDqGn)G zGZy!?@_|kx0t^E7il^(vg3hhd0a+M`6y+a(EU%ZvJ6^N<=FNBBf&wO?()>4#43D`1 z2bX;VceBZzzC3%4v$tRiEy<*G<}L#h)Y4VRo^)qcUTVemJ$LSG8@%xFL5P=teTnF3 z7_$Rs)`2IX2`%ixq4v?^{9S0vY6#7h2R}9y8TgB`K(g((a(vc6RYU1M2sG2Ehyn4wAGT(_r2<=0v?C4p^e}I;t?qC=R1KfJTPdH4xIOS^fjH zfph{C_l;0H?oC=Dhp{*)z9KoyF}1JhR`f&lfb5(or`U2-#%6T%l27i!wG<_)w)~BD zl2ax|ZfY~SbDUZ-r7P0LW&-!pv;rQPXN)cfw~Q@POP|7*@9X(Xy#@Y~E>c60mn+`d z?7TworqBuE(t0DE#TlkVi4J250$uAJdK7>{-4sbnH$Ic}EqeI{={%DYl&ZO@nZTZ$ zo#MF5)5UE1>=UwZaeO8SEHdJPX^>tTq6w8g(QTNDK2q^3iU^}yEE3FATuH*`X_)Q| zcPaVdH^myDE^)PXA~oK@6)bL zNng_C$=isOnh#m%tU8sbNQn+y)`a6V-cP_K#LRL%pN}i56@@BgH$@6p2n3u0@#E?V zLKUaowq>pCM4>UXH~AWzq`_07O6|m@Hw85fa(XrU_yQi>f&j-UtEVWKUr*On|2Z(o za05Rw%v?1N=QDK<$^}MXGQPr28Mzet2UA+&rlx4p+h0@c8Nr&MTuF{U!I=7W3N)Ec zs0`Wyp}@W3w5ke|{$9LZ%sycKP$-Y|847LbfFkOiENfC5(6{P^>@1VcLDsSlOebqt zM6BmAtBfG>yp<$5g}y}zKLk2_Hb+}#T$(1Aj*fnwUd$-vJZ`u8v{Jd~QIpyHBHg4s zUmAQ$LDE=$bT%5IqT(s<6upTzb#iN~H+CQ$V09zO3{uzbHt`A?do#OQX`$&TYiXlQYu4WU^ZAgsXbXP9`_a8hY2>I5l*d&*RM`b{tLAtXTz(n)fB~cNJGs`9Hup!#d-#EEx8vX8~RC<#%U=i ze6}={%=9hUd;pVUj>~0UQO(iTNgk`0K?%AjgB@^z zoG%10tx`8_(`#q6(k`@or$vOpke{b<{Ns5xaYdZ?f(xnH~~&BbjC6C9J`#;U7O z-X?R-o0IiJIh&oCmYT7MO-)bBW3VIz8pBDNU`!}R?Yv?UI>5GnJ>i^yLnryAA)(hM zS`m_e-r}d=Wic9pN%r<;Qq)c)Vm<+}vUJ%lk<0w`D54pOZ&hc1L1jpxy%CMY+Xo@Vcq1fiMMVrVFhjWLlo+sq; zd*ndv=wFJY-3eEPg;aKvMq?g9s(TDzK#%2%eZ@IcGNwyE8_B3%mEYXww~-X$#q_3| znr67<-k~SN>rhENs9BPqiV!h}iM-o!JqfBPrvP$zSD?Ug#esihxpD~bfbOZ$ht??6 zu72`&-y4waLFgzAaF{&nI9+&-s`{;Hq?b%e##cXA3#zL=syh&0hgBtNK0*ed<*pVRByY*}ccu*J&g0I8F z3=Tk%e&XaWVz3lC+zG-|UrCe|XZ}rcf@(YBjck_aYVVNSbn>`)S94X*Y;hlBNwSk$ zJr0+{*%)OzmZ`|ACBeiB1vF^Z-t=Yytz4U{vNwb_6Jv6%wYoc*#&>>)h-9;x7=e@c zbb_C8=B*6nV~ZR$MxGVr$eDyxNP>5Zh@8grt<`aridI@BT9OaSLy%_&o# zjSL?|>NK3+MrXq{;vnTzOx%RNffvM$X~)M;O4_;>mYDBt9Thio^6+XEdZP69%*Zk|h-o0pLS%A0LMwiWDjp55+`RKNC$sQrwIvj@Q zZpAOcI3Vfamx7~F>^?Qgl#j4PaK3fNr>&|9A_fl zcS-q09-g|>A8`sc$my;>m@nKD%M@+CdQ6$OZ-hiV8Tp_vs{Qp;w~HO~)oCQ=eFfsl zdO1G#WOU}uh;x6ZSPDjbcA^IMf}RL1=QjnJaBbv7QUv`4@`|D)HWN{>E>m zWml|9g1L2uP;VTvu-qV*CdV0+J88J%XgYdxdb%Nxkg?MBt{}-oZjy58wl0{afbsOV zB+bA~Gz=4IA|}r)OPgO~*+Re2zvf*o1*Ad01eV%*yu_Wsoqvu%fVV>Q1N{q)43b$` z&4MBab~{%MC=sn1qq#vr6i={kNYmlTaRjX(J4tx*^IQFnof)oN*2kt`={>^@pT0X` zfr{3p;V1w(L=lE;Ps!<}a3}pL7~AS_7og;eNO316;g{agXEEu7EaydkD91S0%a^$# zaLh(2vWiXpflIL4`kYG*l%o&x@%3Wg&sNw!AJ5MB)%CdhST0mS*k7;e@p4}RvE2Kq z;Rt{}jk0{9axL=6FcL#@ModXk97!M)CJ;`gy1dX+IF4$y6qk-c5~#HViHhv9(-)&0 z())<~Mk7h4){GjEV&?dMfH){m7UlAI%?Ig`_i1h^HvK44f@Tn5{ zW?n4RgC2?*?dNz-|v zNQq{5QK;-v&P{G)$#-m307JkII$X-WsF&5zypBo^1(SCgt|2y(SbNHI;#x&mC3qRM zaz|>=;^_4W?QK%xG_3RSjLv?$E2SNf#t9mIkG@FK?gWdv*F6FU_s8?*62-XGb9#Wi zI#rj;L$calA<42{BUQK)UWDPd*=?7=-TY%P#>gtXE$G>NKOObJAkbO0k%iXJJ5WhL_z)v*r0d$4!-_}jgMy@!AN_Tb<^ z*__w=lk59KIG6Y3IvOlk$Of#Q&a|B0g2+8p5zau}6O)_A_tnSZmtS;Q4k2itOEeKrw6q*mLmsAEN5YowPlOQ&P_5XZ3_!o1twUoxe$^6 z@MF1{!UFOiUZ9u{9qF;W^j6F?u-U~g4m*Qj^ptv&lSPz}*f@cb?}ZfEQ zzNJ29GpsS}D}nTbcy`se6HQ`)zHjf}wzHbf;yg6ZSZYUFpnV8A1*b`}!$jh^eFScj z?JzIn+I#lfW{1cMrS=iLrr7~fa-zL&(<4dg3U$%C4ZX&`n&T+iO9Ig`GboXc5_SRRvD zELB?wtPyx3rX0X(uL$!Lcu5Jqo@U4~Ng)nLrA~{@?+xSRPDfRM-IbGSgY5a$a*XgQ^=kcE(uD`x@Rv z5P@N8RA7Ev%SWLI_oyN-UP2d<$KNdbM$(M4e51*yy-A#`^SG=jg4!$~+A$cn&teg; z%4x;i+iA48i|l}M*^Vn5_oK$aO0o>^($yK$uvl`9%r4Kur`;5&?$I;zqAk zRK}b;_0Vr87z@1s>!vwJL`rkg-kU=)pq=Vbrg5~2qa0Gf|O!T%Zye)7(9hVMZU%*%U9hTHlIo-E$pSV~s zL2lLcfE4ZD+2UVTQ=~HGNiwNL1Tu+J$;(mww4pYueuDKBve?T1xqe1wj*_MC?%4o9{t`#_L z=V)8`R5KEfa13<0+9iY~_gL%>P*g)3*TdjEq=&@*p1xrcopp}LtsaCcS2X7cjLYfe zIy~vW zC>)?1!)s;R1a#QJI76O|$_pxx8$?z1iU)i6-$TCVPWhFRd##-mEm1x&CTuz&R*7m?0f`)CV#)ovb z&!uAsCNi4L%f|?)-tpDo-9Dm3`)uIu|L#?5?`(NogHYp>^yVjxbxSOspOp zyl{;Z_uJaphAIWBoN7r1hDm$(u3fh4y6=v4hdyCS>1F8+v1f(lfu>p=F{%xBXDov@ z-EU}s&g$yJJbJPbKLnB@3n(ggE>q_v4Wwz!kpNV6B)47=F3&|3655Hy4Y=B+po~J4bXm~$>Y|rFAr;8Y#3ePT8zXSJKHtcCNnp=( zWt82vp!q{=>n@7kb_F2nF^^}<#!HqW=ZJ-}fCbFOp*`D|NmJHNKW&e?>|slpq(s}+ zToNC4ja)BY4zehgLa_Ok(j_IFZXdJ0!~q#(x?UFz_l~JOi?%ssCFy*9e!M}9II$Aw z36UH=$nFJ!wR?3gMV4H?%?4CK=q z%9Cm3p>W*BzCfm7jhkLG~ zX?6+^B-{5A*SGcTmz&5A?dRC8$NtyMBzr&88=c;8*1C@au3@Ooq*ZC=L3|1+DKvn) zz+zcua(`M9zGKN;pj&;bSY&01lNPtxbeYAdatJPE;CCz*y+Ca(T~FYwst*3 z1!D@vc_?hBagF$-Pw4SI-`bPD5~{b2OLqz|uLd?!u&oM08~I`hn-qj$rFcR6&cyU&thL?~Xq3R3g0uvY(yVEAt-`0B zbdy~ONfosO{{JQK4AsO66A=foEh+VT9fiHHfC_wjULGj;N=r zqf1Gv8rM&+s^R-Qd31NqIlFLGPUeO}I5Sq0O@SE>arI0Vvq(+S04>jEf3B+eEhmZKY$0*GZ;V_H?%4oTp0c?tMHxf9r=IXwUv=Ss|q?%&`3ube}L}(qJqTbNr zlrJ~g1^nr?R$><+gvIb`E7BCuB1dh}kTuqs#gH_*fWu=h8zp_g^tlt5(>9h713g%X z3q(_I#6xr#(UJrh|NI&!TN~Edn1ef6V1~r>n1aUcL}ghT(IqyR8(ggJsByXMyjQs_ zzA~u!nuMaz{|y-8!|X=zy(Y&pT}@|$m7~;ZDf}jM;Wgd+#FuqjXUZ(752Qt5Y+r+7 z`Ql-3QLRlKk$-5^Qks(Kg6yR6?2^z$5kJYHawD3KPg4^ktE~ncm`jGYfW>rSbOa5Q z1H`-=146BWSam;?xI~jC06L{yI{Q}a`SZzOy{Zm>G}c+T(bW%dqRcM1Tg+zml&u3` zHG5zA^{e_nPk#9MJx`DXa^3@E= zhnEhA5B_?6K6$?Sf2a6i`erg)MCsFk>ODHihI7?8 z5#U}Ixj91D9X>vM{NUktIHw=UYVOKNlQh}K5hbu&x|&G;%FN#QkY?6I2tzi0WJeNM zyYuU}%?@GAKo1S=y_;r@;YlN*diHIbWr5B~t#-I&%WU@<@zdVBXqfH1n*eDaE8kCc zXmW~vm{YcW&lTwqL+AXq4dVVCHWZ9p2qaZIibO++6Z<)~$Vq5oHTL?XGmV0b8fuVZrWYULyrA+$!i|WNU2SlC33z6n5<|TDPR9+Nsx80bFfUD`#cih` zZer;r6wi)!`{B~HlU>`-Fr0Y;&A96_h+3I)X+3DiLB#nQxFHqG6ok=1h z19+-Q$gvZ>snm@3OfR7KEP?a%?~JR&PuaP>)qvZ14anm0n9hpsn0*67???r^)O)Fm zsHktm4o{Bn*{uVl+amCc|55<>9-os_u@>WpdqOksU8K?%8}kAPmZsgc1dV zWUfm#Po)t>KD1&|O<5jTVptCU(J83PfF~w>qOJi^U6DCVp%E7^)g=Ev0~4|>PI=J( z86e17jW2EkH@@fH5jV!|^>uj;3woNi(QQo23?{jvX|_HWS5S0vuwvM2C$3Rfv0eCR$x2WvSk)>YwsVi!@<{WM{~%tscp`?FhsSyH=`6R zxc4^b*07@&dT%0Jl8B_)Phl<$QOG(L#*LzJMNW=HsQnzrdX^Mn2+x;U3!qa{fa*e2 zTp%nlk*pv>bBJQbn>LXK5xw!R&J7)K?tC61vz|RyhG0r&9NVeK zjANJ@tm=){heYXy2&8HfyVH#=M4Dh7q}ScUZtHs_tn)321&-+^Qe=ON*YIkjJqNyH zGsB~Vl%>coiq%+ zBsSS`4Y)5hvs@tr>Y*l4Cp%Twe^up3eA3JVqN|s9QoGCWgF_UcJ22=Bfrx5Kr}9fQ zD#-QfKRg|Yp<5gxEKJJj`T{|GoZ$<++XNEi%SIKbrP%-?Tmg}S2eNZs0D9woeI+2=$D>ftY0S66JUt`QRv$`bI(0PU> zanpQho!_=)h=?7#_RkHoolEZVmaDycuW5dOh<7^l%x$t=W*DKpU(rx@Za*7M;Y1tb1P?;Ipkq-d4iQ~rzPDe+o>@z`-&XbuC;4e zp1r{~-K)0QAvi#HMnOy|!rQUp+GV>&RdHIIGrChI?ma=Lx`Dc{#^~4PP^ET7+F&?Z zudZgkg~3y700Jj)&}27I@R^hJDab}!m_liMG=|&eCz-wXy|MRh>3Uc}I9*q>1bG`F z6x$6s;w!>x<=BWd8rq6=hJ!nQjiCY?lYcaGNc*%2`rzIeJOrsS6UoDpF_{>Y=EYJz z3)xy(I>_sb_Wu30*&)(-f+3n-9lsLcnG~KI2DpB8@wci;i`UcyLOUr?B`Z_uj6CMGMEOEx?fqPLy$NY~ir0wQYZ$y4siltA&2O25#*5V>dM zcIxUYjS7_;8;N`au_e~03J@tp8ECHpH$5>#760mfd8-j+5i|(b7g)tEKcd*d{y>N$ z^OA}snqI64eG8OGEF#w3PKoBd4MM3X9lb@>K!o6>nwf zf!WA838UonBmHZRZU|395)d_XoDzO>zqIm@E*0U4nvi|;JHKxcu947Pit7{A3Ez^I zt9jM+UI*F+eBxGi`!zRGv2pFqOJ@7!a}a@{QGpAO&F%zfNDTa4rYO*Z!JPmlG`N2| zVJ5>MJ{K7~D^eq&Y(2rATyGMos!Ua&DzdyYY8MUrUrS1+T6Wfw+WHg z=hcWE)9mg{u4JjZGr7Ib&AO;imioof+A#jmO#Y&w?A(5iMNl9UJ*H?7JAvo<*)*H9 znLQ!3g~rr^*z4M2@Qc-Co`T$1gQX`Olg)~%Tt#8o(BPqX6~C#jwN@oHuw#KbO121= zQ@obk;%yL_0rcSEqi-JT^-zH6g~x%FB~(6kkp&eag^sqL9vwUq4}qSLfYl}ySH767 zr~VmKstE!^!s`HCtg26|{j1f)&vRi-qAZS}0smr*#pE^#I(2y>1GU$ts&OcoEEQ5$ zW>Ngl=BZ_d0Rpe}_`$(}2TeHt(>13Xqd+`LZz(Jm_lsxLR1nr6g9%t;rqcBOPsw`# z@(5{Ex(tB5cX+euW4CKmEjC1eYJ9^eFf8ObjT7KFxQZj_IlYhWzF}n@^6)wO!e^%rE%#?lsDV zc4YD!BW(?^k0UcL9}nhfG}|_*W@h_EiM0e!8!@)Lx3~=vN4TzS1ea4C;6uFwbGDI^ zjb%sbCO1l>yF`VBDP{S8QOG;x!&MTdt#Q}JGT)0^>kH%=&S%ii#ZoB@FBd7J9d24r zzWVcKOoW|!xXo>(6JuOhET3t{F-#j#ffhluThWFE5JB;rWM&6dcq8i_*lT22YVg&0 zg3%1O#}cbnpHR3>lBLo#(y(%q*$8cuYM0m|19G2G=GkWi^dN6E8C~ANirj3nj2L5A z&&vg})q^WP1`wx|!|z9#1~rw@8F0;DNh*}?PCwX2f{B8qeN!QeeOj0|d3jNm4oTOG zwG0EM(bM2W0Hf6DWKAbn4jce@?yPQez`)rdQtM8FdvV*QJ4T#S-fkJ1-9*N&J};YJ zl*YYa6zmmeS5Q@?jBH_JeBv`SbKHo_HP7kS*_`SVmgC|bJ$_d(_9Y9*`H6{dg27RB zQQ~F?!k}fI*ghdR@QQQ7+YrSK+>)g5#8cMD`s(LuF@qb4+tI4g*AitX7mxxF4Zu5< zGF;B9AyX-*^H2GHY3O*=hrTL50Qa+^y10O;n!(nsAdBd~7qYlP9$A`!6g9!-SyXh~ z1#b6j0Y}Ji(&wCUjr*q7I2_oALQI?dypM2u#bi<}GgLU7!NLi>ue(D;CQoUGR?j4IC#x4Q;wik~SNbU#p@HrYMH~Nynj=U+>Xf z*POLdOx7rDjgq5>%(w;?fW@SU11JenL?!dt$2Yii7{}yD(vl1m7)WXeD+0B4Xy8)= zTd$R{jRYWp3^(`DSXovWtDlUG!fX~{K~QA19PJ@tl@Q7$z9?ChzR*-XB5j^*95m`I z*Y##YKP2dFnmi65iO9=9O>nwxz|ay;&ECAJ4jJk3$=LwHE^&pie7ge<8Xfb*mPjnH zGwHN#Vp}xJBZAmUy@>TzM>Xi?a7?x3*iw4I8z(COY9M<6F|1U6^lR+M_FDL`ZGPT@ z3Aj-)av9ksd(RU<(qKx@-PnDQJmadIiUuCB%TjqMLx#bzx!?V#@0#|QJ#HW1Tyx?E zouBo2X1`p|=d%U$!%L(UpJ8v=51F;me4=?C3q%aVe Du{2OP diff --git a/docs/root.yaml b/docs/root.yaml index 5dc49e604d..384a6242c6 100644 --- a/docs/root.yaml +++ b/docs/root.yaml @@ -107,6 +107,10 @@ paths: $ref: './controllers/MeController.yaml#/paths/~1api~1me~1listening-sessions' /api/me/listening-stats: $ref: './controllers/MeController.yaml#/paths/~1api~1me~1listening-stats' + /api/session/local: + $ref: './controllers/SessionController.yaml#/paths/~1api~1session~1local' + /api/local/session/local-all: + $ref: './controllers/SessionController.yaml#/paths/~1api~1local~1session~1local-all' tags: - name: Authors description: Author endpoints diff --git a/unicode.dll b/unicode.dll new file mode 100644 index 0000000000000000000000000000000000000000..7ad46dd553a0b598f72cfbeeb928ff8922d38d77 GIT binary patch literal 144590 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 literal 0 HcmV?d00001