From fce886f077c494511b8ac9949e0000164c177205 Mon Sep 17 00:00:00 2001 From: graciousgey Date: Thu, 15 May 2025 08:55:50 +0200 Subject: [PATCH 001/185] Tests: Refactor page model for more stability --- frontend/tests/acceptance/page-model/page.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/frontend/tests/acceptance/page-model/page.js b/frontend/tests/acceptance/page-model/page.js index dd22717d2..c283cebe3 100644 --- a/frontend/tests/acceptance/page-model/page.js +++ b/frontend/tests/acceptance/page-model/page.js @@ -68,7 +68,7 @@ export default class Page { .expect(InitialExpire) .contains("Never") .typeText(sharedialog.linkSecretInput, "secretForTesting", { replace: true }) - .click(sharedialog.linkExpireInput) + .click(sharedialog.linkExpireInput, { speed: 0.5 }) .click(Selector("div").withText("After 1 day").parent('div[role="option"]')) .click(sharedialog.dialogSave) .click(sharedialog.dialogClose); @@ -83,8 +83,7 @@ export default class Page { .expect(ExpireAfterChange) .contains("After 1 day") .typeText(sharedialog.linkSecretInput, InitialSecret, { replace: true }) - .click(sharedialog.linkExpireInput) - .pressKey("down") + .click(sharedialog.linkExpireInput, { speed: 0.5 }) .click(Selector("div").withText("Never").parent('div[role="option"]')) .click(sharedialog.dialogSave) .click(sharedialog.expandLink); From a5aef038ef17aa2b202cfcdf7311d130efcaa579 Mon Sep 17 00:00:00 2001 From: Michael Mayer Date: Thu, 15 May 2025 16:37:28 +0200 Subject: [PATCH 002/185] Batch Edit: Fix PhotoLng.Mixed flag in form/batch/photos.go #271 Signed-off-by: Michael Mayer --- internal/form/batch/photos.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/form/batch/photos.go b/internal/form/batch/photos.go index 14df04f6e..fdc2bcc1d 100644 --- a/internal/form/batch/photos.go +++ b/internal/form/batch/photos.go @@ -126,7 +126,7 @@ func NewPhotosForm(photos search.PhotoResults) *PhotosForm { if i == 0 { frm.PhotoLng.Value = photo.PhotoLng } else if photo.PhotoLng != frm.PhotoLng.Value { - frm.PhotoLng.Mixed = false + frm.PhotoLng.Mixed = true frm.PhotoLng.Value = 0.0 } From af832247fcf52f9cd6c3b91d5ed3054dab323ee5 Mon Sep 17 00:00:00 2001 From: graciousgey Date: Fri, 16 May 2025 16:48:55 +0200 Subject: [PATCH 003/185] Tests: Update testcafe timeouts --- frontend/testcaferc.json | 4 ++-- frontend/tests/acceptance/page-model/toolbar.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/frontend/testcaferc.json b/frontend/testcaferc.json index 9567d0fbf..23ce94176 100644 --- a/frontend/testcaferc.json +++ b/frontend/testcaferc.json @@ -1,8 +1,8 @@ { "skipJsErrors": true, "quarantineMode": false, - "selectorTimeout": 9500, - "assertionTimeout": 9500, + "selectorTimeout": 3500, + "assertionTimeout": 3500, "hostname": "localhost", "screenshots": { "path": "tests/acceptance/screenshots/", diff --git a/frontend/tests/acceptance/page-model/toolbar.js b/frontend/tests/acceptance/page-model/toolbar.js index f72fe244e..3b3f17767 100644 --- a/frontend/tests/acceptance/page-model/toolbar.js +++ b/frontend/tests/acceptance/page-model/toolbar.js @@ -139,7 +139,7 @@ export default class Page { } async search(term) { - await t.typeText(this.search1, term, { replace: true }).pressKey("enter"); + await t.typeText(this.search1, term, { replace: true }).pressKey("enter").wait(6000); } async setFilter(filter, option) { From 2499b13f51758d62629eb98266c3cc14965bf494 Mon Sep 17 00:00:00 2001 From: graciousgrey Date: Wed, 21 May 2025 13:16:11 +0200 Subject: [PATCH 004/185] Tests: Add unit tests #271 --- internal/form/batch/photos_test.go | 88 +++++++++++++++++++++++------- 1 file changed, 67 insertions(+), 21 deletions(-) diff --git a/internal/form/batch/photos_test.go b/internal/form/batch/photos_test.go index 5763691a0..51b665f5a 100644 --- a/internal/form/batch/photos_test.go +++ b/internal/form/batch/photos_test.go @@ -52,6 +52,12 @@ func TestNewPhotosForm(t *testing.T) { assert.Equal(t, true, frm.PhotoFNumber.Mixed) assert.Equal(t, 0, frm.PhotoFocalLength.Value) assert.Equal(t, true, frm.PhotoFocalLength.Mixed) + assert.Equal(t, float64(0), frm.PhotoLat.Value) + assert.Equal(t, true, frm.PhotoLat.Mixed) + assert.Equal(t, float64(0), frm.PhotoLng.Value) + assert.Equal(t, true, frm.PhotoLng.Mixed) + assert.Equal(t, 0, frm.PhotoAltitude.Value) + assert.Equal(t, true, frm.PhotoAltitude.Mixed) // Additional details. assert.Equal(t, "", frm.DetailsKeywords.Value) @@ -80,6 +86,12 @@ func TestNewPhotosForm(t *testing.T) { PhotoFavorite: false, CameraID: 1, LensID: 2, + PhotoAltitude: -10, + PhotoLat: 48.519234, + PhotoLng: 9.057997, + PhotoDay: 4, + PhotoMonth: 5, + PhotoYear: 2021, } photo2 := search.Photo{ @@ -99,6 +111,12 @@ func TestNewPhotosForm(t *testing.T) { PhotoFavorite: true, CameraID: 1, LensID: 2, + PhotoAltitude: -15, + PhotoLat: 48.519234, + PhotoLng: 9.057997, + PhotoDay: 3, + PhotoMonth: 5, + PhotoYear: 2020, } photos := search.PhotoResults{photo1, photo2} @@ -133,33 +151,53 @@ func TestNewPhotosForm(t *testing.T) { assert.Equal(t, false, frm.PhotoFNumber.Mixed) assert.Equal(t, 0, frm.PhotoFocalLength.Value) assert.Equal(t, false, frm.PhotoFocalLength.Mixed) + assert.Equal(t, 48.519234, frm.PhotoLat.Value) + assert.Equal(t, false, frm.PhotoLat.Mixed) + assert.Equal(t, 9.057997, frm.PhotoLng.Value) + assert.Equal(t, false, frm.PhotoLng.Mixed) + assert.Equal(t, 0, frm.PhotoAltitude.Value) + assert.Equal(t, true, frm.PhotoAltitude.Mixed) + assert.Equal(t, -2, frm.PhotoDay.Value) + assert.Equal(t, true, frm.PhotoDay.Mixed) + assert.Equal(t, 5, frm.PhotoMonth.Value) + assert.Equal(t, false, frm.PhotoMonth.Mixed) + assert.Equal(t, -2, frm.PhotoYear.Value) + assert.Equal(t, true, frm.PhotoYear.Mixed) }) t.Run("Success", func(t *testing.T) { photo1 := search.Photo{ - ID: 111115411, - TakenSrc: "", - TimeZone: "", - PhotoUID: "ps6sg6be2lvl0x41", - PhotoType: "image", - PhotoTitle: "Same Title", - PhotoCountry: "de", - CameraID: 1000001, - LensID: 1000001, + ID: 111115411, + TakenSrc: "", + TimeZone: "", + PhotoUID: "ps6sg6be2lvl0x41", + PhotoType: "image", + PhotoTitle: "Same Title", + PhotoCountry: "de", + CameraID: 1000001, + LensID: 1000001, + PhotoDay: 3, + PhotoMonth: 5, + PhotoYear: 2020, + PhotoAltitude: 105, } photo2 := search.Photo{ - ID: 111115511, - CreatedAt: time.Time{}, - TakenAt: time.Time{}, - TakenAtLocal: time.Time{}, - TakenSrc: "", - TimeZone: "", - PhotoUID: "ps6sg6be2lvlx986", - PhotoType: "image", - PhotoTitle: "Same Title", - PhotoCountry: "", - CameraID: 1000000, - LensID: 1000000, + ID: 111115511, + CreatedAt: time.Time{}, + TakenAt: time.Time{}, + TakenAtLocal: time.Time{}, + TakenSrc: "", + TimeZone: "", + PhotoUID: "ps6sg6be2lvlx986", + PhotoType: "image", + PhotoTitle: "Same Title", + PhotoCountry: "", + CameraID: 1000000, + LensID: 1000000, + PhotoDay: 3, + PhotoMonth: 6, + PhotoYear: 2020, + PhotoAltitude: 105, } photos := search.PhotoResults{photo1, photo2} @@ -194,6 +232,14 @@ func TestNewPhotosForm(t *testing.T) { assert.Equal(t, false, frm.PhotoFNumber.Mixed) assert.Equal(t, 0, frm.PhotoFocalLength.Value) assert.Equal(t, false, frm.PhotoFocalLength.Mixed) + assert.Equal(t, 105, frm.PhotoAltitude.Value) + assert.Equal(t, false, frm.PhotoAltitude.Mixed) + assert.Equal(t, 3, frm.PhotoDay.Value) + assert.Equal(t, false, frm.PhotoDay.Mixed) + assert.Equal(t, -2, frm.PhotoMonth.Value) + assert.Equal(t, true, frm.PhotoMonth.Mixed) + assert.Equal(t, 2020, frm.PhotoYear.Value) + assert.Equal(t, false, frm.PhotoYear.Mixed) }) } From 03dba1fe20f02dab6d45a0df34164e256471faff Mon Sep 17 00:00:00 2001 From: Michael Mayer Date: Sun, 25 May 2025 01:20:59 +0200 Subject: [PATCH 005/185] Video Downloads: Set --playlist-index and --embed-metadata flags #4982 Signed-off-by: Michael Mayer --- internal/commands/download.go | 11 ++++++++++- internal/photoprism/ytdl/options.go | 19 +++++++++++-------- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/internal/commands/download.go b/internal/commands/download.go index 3c3a8f33c..1451041ea 100644 --- a/internal/commands/download.go +++ b/internal/commands/download.go @@ -119,9 +119,18 @@ func downloadAction(ctx *cli.Context) error { downloadFile = time.Now().Format("20060102_150405") + fs.ExtMp4 } + // Compose download file path. downloadFilePath := filepath.Join(downloadPath, downloadFile) - downloadResult, err := result.Download(context.Background(), "best") + // Download the first video and embed its metadata. + downloadResult, err := result.DownloadWithOptions(context.Background(), ytdl.DownloadOptions{ + Filter: "best", + DownloadAudioOnly: false, + EmbedMetadata: true, + PlaylistIndex: 1, + }) + + // Check if download was successful. if err != nil { return err } diff --git a/internal/photoprism/ytdl/options.go b/internal/photoprism/ytdl/options.go index 006efafde..434bb7b95 100644 --- a/internal/photoprism/ytdl/options.go +++ b/internal/photoprism/ytdl/options.go @@ -41,14 +41,11 @@ type Options struct { } type DownloadOptions struct { - AudioFormats string // --audio-formats Download audio using formats (best, aac, alac, flac, m4a, mp3, opus, vorbis, wav) - DownloadAudioOnly bool // -x Download audio only from video - // Download format matched by filter (usually a format id or quality designator). - // If filter is empty, then youtube-dl will use its default format selector. - Filter string - // The index of the entry to download from the playlist that would be - // passed to youtube-dl via --playlist-items. The index value starts at 1 - PlaylistIndex int + Filter string // Download format matched by filter (usually a format id or quality designator). + AudioFormats string // --audio-formats Download audio using formats (best, aac, alac, flac, m4a, mp3, opus, vorbis, wav). + DownloadAudioOnly bool // -x Download audio only from video. + EmbedMetadata bool // --embed-metadata embeds metadata to the video file. + PlaylistIndex int // --playlist-items index of the file to download if there is more than one video } func (result Result) DownloadWithOptions( @@ -146,6 +143,12 @@ func (result Result) DownloadWithOptions( cmd.Args = append(cmd.Args, "-x") } + // If requested, embed metadata in the video file, including chapters and infoJSON, + // see https://github.com/yt-dlp/yt-dlp?tab=readme-ov-file#post-processing-options. + if options.EmbedMetadata { + cmd.Args = append(cmd.Args, "--embed-metadata") + } + if options.AudioFormats != "" { cmd.Args = append(cmd.Args, "--audio-format", options.AudioFormats) } From 69600fdbe3bf4804c5a769ccec708bc66265e26a Mon Sep 17 00:00:00 2001 From: Michael Mayer Date: Sun, 25 May 2025 01:33:59 +0200 Subject: [PATCH 006/185] Video Downloads: Update test video URL #4982 Signed-off-by: Michael Mayer --- internal/photoprism/ytdl/ytdl_test.go | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/internal/photoprism/ytdl/ytdl_test.go b/internal/photoprism/ytdl/ytdl_test.go index 7432d3f25..c7742f865 100644 --- a/internal/photoprism/ytdl/ytdl_test.go +++ b/internal/photoprism/ytdl/ytdl_test.go @@ -16,7 +16,7 @@ import ( ) const ( - testVideoRawURL = "https://vimeo.com/454525548" + testVideoRawURL = "https://youtu.be/fD6VYfy3B2s" playlistRawURL = "https://soundcloud.com/mattheis/sets/kindred-phenomena" channelRawURL = "https://www.youtube.com/channel/UCHDm-DKoMyJxKVgwGmuTaQA" subtitlesTestVideoRawURL = "https://www.youtube.com/watch?v=QRS8MkLhQmM" @@ -31,9 +31,12 @@ func TestParseInfo(t *testing.T) { url string expectedTitle string }{ - {"https://soundcloud.com/avalonemerson/avalon-emerson-live-at-printworks-london-march-2017", "Avalon Emerson Live at Printworks London 2017"}, - {"https://www.infoq.com/presentations/Simple-Made-Easy", "Simple Made Easy - InfoQ"}, - {"https://vimeo.com/454525548", "Sample Video - 3 minutemp4.mp4"}, + {"https://soundcloud.com/avalonemerson/avalon-emerson-live-at-printworks-london-march-2017", + "Avalon Emerson Live at Printworks London 2017"}, + {"https://www.infoq.com/presentations/Simple-Made-Easy", + "Simple Made Easy - InfoQ"}, + {testVideoRawURL, + "Cinematic Epic Deep Trailer - Background Music for Trailers and Film"}, } { t.Run(c.url, func(t *testing.T) { ctx, cancelFn := context.WithCancel(context.Background()) @@ -227,7 +230,7 @@ func TestDownloadSections(t *testing.T) { ydlResult, ydlResultErr := New( context.Background(), - "https://vimeo.com/454525548", + testVideoRawURL, Options{ DownloadSections: fmt.Sprintf("*0:0-0:%d", duration), }) From 798c77464ed0e9026b105d07ae7794bf406ba33a Mon Sep 17 00:00:00 2001 From: Michael Mayer Date: Sun, 25 May 2025 01:40:13 +0200 Subject: [PATCH 007/185] Develop: Upgrade base image from 250507-plucky to 250524-plucky #4982 Signed-off-by: Michael Mayer --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index b87f65a7d..c3282681e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # Ubuntu 25.04 (Plucky Puffin) -FROM photoprism/develop:250507-plucky +FROM photoprism/develop:250524-plucky ## Alternative Environments: # FROM photoprism/develop:armv7 # ARMv7 (32bit) From 72fdd053586fb6071354721a65c53e6fe4a74fd8 Mon Sep 17 00:00:00 2001 From: Michael Mayer Date: Sun, 25 May 2025 01:41:28 +0200 Subject: [PATCH 008/185] Frontend: Update deps in package.json and package-lock.json Signed-off-by: Michael Mayer --- frontend/package-lock.json | 2187 +++++++++++++----------------------- frontend/package.json | 32 +- 2 files changed, 774 insertions(+), 1445 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 8fc8013ad..9d449b4d1 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -16,19 +16,19 @@ "@babel/register": "^7.27.1", "@babel/runtime": "^7.27.1", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "^9.26.0", + "@eslint/js": "^9.27.0", "@lcdp/offline-plugin": "^5.1.1", "@mdi/font": "^7.4.47", "@testing-library/jest-dom": "^6.6.3", "@testing-library/react": "^16.3.0", - "@vitejs/plugin-react": "^4.4.1", + "@vitejs/plugin-react": "^4.5.0", "@vitejs/plugin-vue": "^5.2.4", - "@vitest/coverage-v8": "^3.1.3", - "@vitest/ui": "^3.1.3", - "@vue/compiler-sfc": "^3.5.13", + "@vitest/coverage-v8": "^3.1.4", + "@vitest/ui": "^3.1.4", + "@vue/compiler-sfc": "^3.5.14", "@vue/language-server": "^2.2.10", "@vue/test-utils": "^2.4.6", - "@vvo/tzdb": "^6.161.0", + "@vvo/tzdb": "^6.163.0", "axios": "^1.9.0", "axios-mock-adapter": "^2.1.0", "babel-loader": "^10.0.0", @@ -43,10 +43,10 @@ "css-loader": "^7.1.2", "cssnano": "^7.0.7", "easygettext": "^2.17.0", - "eslint": "^9.26.0", - "eslint-config-prettier": "^10.1.3", + "eslint": "^9.27.0", + "eslint-config-prettier": "^10.1.5", "eslint-formatter-pretty": "^6.0.1", - "eslint-plugin-html": "^8.1.2", + "eslint-plugin-html": "^8.1.3", "eslint-plugin-import": "^2.31.0", "eslint-plugin-node": "^11.1.0", "eslint-plugin-prettier": "^5.4.0", @@ -58,7 +58,7 @@ "file-loader": "^6.2.0", "file-saver": "^2.0.5", "floating-vue": "^5.2.2", - "globals": "^16.0.1", + "globals": "^16.1.0", "hls.js": "^1.6.2", "i": "^0.3.7", "jsdom": "^26.1.0", @@ -88,8 +88,8 @@ "pubsub-js": "^1.9.5", "regenerator-runtime": "^0.14.1", "resolve-url-loader": "^5.0.0", - "sanitize-html": "^2.16.0", - "sass": "^1.87.0", + "sanitize-html": "^2.17.0", + "sass": "^1.89.0", "sass-loader": "^16.0.5", "server": "^1.0.41", "sockette": "^2.0.6", @@ -99,8 +99,8 @@ "url-loader": "^4.1.1", "util": "^0.12.5", "vite-tsconfig-paths": "^5.1.4", - "vitest": "^3.1.3", - "vue": "^3.5.13", + "vitest": "^3.1.4", + "vue": "^3.5.14", "vue-3-sanitize": "^0.1.4", "vue-loader": "^17.4.2", "vue-loader-plugin": "^1.3.0", @@ -109,8 +109,8 @@ "vue-sanitize-directive": "^0.2.1", "vue-style-loader": "^4.1.3", "vue3-gettext": "^2.4.0", - "vuetify": "^3.8.4", - "webpack": "^5.99.8", + "vuetify": "^3.8.6", + "webpack": "^5.99.9", "webpack-bundle-analyzer": "^4.10.2", "webpack-cli": "^6.0.1", "webpack-hot-middleware": "^2.26.1", @@ -126,9 +126,9 @@ } }, "node_modules/@adobe/css-tools": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.2.tgz", - "integrity": "sha512-baYZExFpsdkBNuvGKTKWCwKH57HRZLVtycZS05WTQNVOiXVSeAki3nU35zlRbToeMW8aHlJfyS+1C4BOv27q0A==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.3.tgz", + "integrity": "sha512-VQKMkwriZbaOgVCby1UDY/LDk5fIjhQicCvVPFqfe+69fWaPWydbWJ3wRt59/YzIwda1I81loas3oCoHxnqvdA==", "license": "MIT" }, "node_modules/@ampproject/remapping": { @@ -145,9 +145,9 @@ } }, "node_modules/@asamuzakjp/css-color": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.1.7.tgz", - "integrity": "sha512-Ok5fYhtwdyJQmU1PpEv6Si7Y+A4cYb8yNM9oiIJC9TzXPMuN9fvdonKJqcnz9TbFqV6bQ8z0giRq0iaOpGZV2g==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.2.0.tgz", + "integrity": "sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==", "license": "MIT", "dependencies": { "@csstools/css-calc": "^2.1.3", @@ -3357,9 +3357,9 @@ } }, "node_modules/@eslint/core": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.13.0.tgz", - "integrity": "sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.14.0.tgz", + "integrity": "sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==", "license": "Apache-2.0", "dependencies": { "@types/json-schema": "^7.0.15" @@ -3404,12 +3404,15 @@ } }, "node_modules/@eslint/js": { - "version": "9.26.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.26.0.tgz", - "integrity": "sha512-I9XlJawFdSMvWjDt6wksMCrgns5ggLNfFwFvnShsleWruvXM514Qxk8V246efTw+eo9JABvVz+u3q2RiAowKxQ==", + "version": "9.27.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.27.0.tgz", + "integrity": "sha512-G5JD9Tu5HJEu4z2Uo4aHY2sLV64B7CDMXxFzqzjl3NKd6RVzSXNoE80jk7Y0lJkTTkjiIhBAqmlYwjuBY3tvpA==", "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" } }, "node_modules/@eslint/object-schema": { @@ -3422,12 +3425,12 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.8.tgz", - "integrity": "sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.1.tgz", + "integrity": "sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==", "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.13.0", + "@eslint/core": "^0.14.0", "levn": "^0.4.1" }, "engines": { @@ -3905,9 +3908,9 @@ } }, "node_modules/@maplibre/maplibre-gl-style-spec": { - "version": "23.2.2", - "resolved": "https://registry.npmjs.org/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-23.2.2.tgz", - "integrity": "sha512-kLcVlItPCULc20SM6pSVA7u8nST9xmQA8d7utc9j3KB0Tf/xhM4GgCn/QsZcmlbN/wW0ujyomDrvZ3/LbwvAmw==", + "version": "23.3.0", + "resolved": "https://registry.npmjs.org/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-23.3.0.tgz", + "integrity": "sha512-IGJtuBbaGzOUgODdBRg66p8stnwj9iDXkgbYKoYcNiiQmaez5WVRfXm4b03MCDwmZyX93csbfHFWEJJYHnn5oA==", "license": "ISC", "dependencies": { "@mapbox/jsonlint-lines-primitives": "~2.0.2", @@ -3930,27 +3933,6 @@ "integrity": "sha512-43MtGpd585SNzHZPcYowu/84Vz2a2g31TvPMTm9uTiCSWzaheQySUcSyUH/46fPnuPQWof2yd0pGBtzee/IQWw==", "license": "Apache-2.0" }, - "node_modules/@modelcontextprotocol/sdk": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.11.0.tgz", - "integrity": "sha512-k/1pb70eD638anoi0e8wUGAlbMJXyvdV4p62Ko+EZ7eBe1xMx8Uhak1R5DgfoofsK5IBBnRwsYGTaLZl+6/+RQ==", - "license": "MIT", - "dependencies": { - "content-type": "^1.0.5", - "cors": "^2.8.5", - "cross-spawn": "^7.0.3", - "eventsource": "^3.0.2", - "express": "^5.0.1", - "express-rate-limit": "^7.5.0", - "pkce-challenge": "^5.0.0", - "raw-body": "^3.0.0", - "zod": "^3.23.8", - "zod-to-json-schema": "^3.24.1" - }, - "engines": { - "node": ">=18" - } - }, "node_modules/@nicolo-ribaudo/chokidar-2": { "version": "2.1.8-no-fsevents.3", "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz", @@ -4309,10 +4291,16 @@ "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", "license": "MIT" }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.9", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.9.tgz", + "integrity": "sha512-e9MeMtVWo186sgvFFJOPGy7/d2j2mZhLJIdVW0C/xDluuOvymEATqz6zKsP0ZmXGzQtqlyjz5sC1sYQUoJG98w==", + "license": "MIT" + }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.40.2.tgz", - "integrity": "sha512-JkdNEq+DFxZfUwxvB58tHMHBHVgX23ew41g1OQinthJ+ryhdRk67O31S7sYw8u2lTjHUPFxwar07BBt1KHp/hg==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.41.1.tgz", + "integrity": "sha512-NELNvyEWZ6R9QMkiytB4/L4zSEaBC03KIXEghptLGLZWJ6VPrL63ooZQCOnlx36aQPGhzuOMwDerC1Eb2VmrLw==", "cpu": [ "arm" ], @@ -4323,9 +4311,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.40.2.tgz", - "integrity": "sha512-13unNoZ8NzUmnndhPTkWPWbX3vtHodYmy+I9kuLxN+F+l+x3LdVF7UCu8TWVMt1POHLh6oDHhnOA04n8oJZhBw==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.41.1.tgz", + "integrity": "sha512-DXdQe1BJ6TK47ukAoZLehRHhfKnKg9BjnQYUu9gzhI8Mwa1d2fzxA1aw2JixHVl403bwp1+/o/NhhHtxWJBgEA==", "cpu": [ "arm64" ], @@ -4336,9 +4324,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.40.2.tgz", - "integrity": "sha512-Gzf1Hn2Aoe8VZzevHostPX23U7N5+4D36WJNHK88NZHCJr7aVMG4fadqkIf72eqVPGjGc0HJHNuUaUcxiR+N/w==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.41.1.tgz", + "integrity": "sha512-5afxvwszzdulsU2w8JKWwY8/sJOLPzf0e1bFuvcW5h9zsEg+RQAojdW0ux2zyYAz7R8HvvzKCjLNJhVq965U7w==", "cpu": [ "arm64" ], @@ -4349,9 +4337,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.40.2.tgz", - "integrity": "sha512-47N4hxa01a4x6XnJoskMKTS8XZ0CZMd8YTbINbi+w03A2w4j1RTlnGHOz/P0+Bg1LaVL6ufZyNprSg+fW5nYQQ==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.41.1.tgz", + "integrity": "sha512-egpJACny8QOdHNNMZKf8xY0Is6gIMz+tuqXlusxquWu3F833DcMwmGM7WlvCO9sB3OsPjdC4U0wHw5FabzCGZg==", "cpu": [ "x64" ], @@ -4362,9 +4350,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.40.2.tgz", - "integrity": "sha512-8t6aL4MD+rXSHHZUR1z19+9OFJ2rl1wGKvckN47XFRVO+QL/dUSpKA2SLRo4vMg7ELA8pzGpC+W9OEd1Z/ZqoQ==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.41.1.tgz", + "integrity": "sha512-DBVMZH5vbjgRk3r0OzgjS38z+atlupJ7xfKIDJdZZL6sM6wjfDNo64aowcLPKIx7LMQi8vybB56uh1Ftck/Atg==", "cpu": [ "arm64" ], @@ -4375,9 +4363,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.40.2.tgz", - "integrity": "sha512-C+AyHBzfpsOEYRFjztcYUFsH4S7UsE9cDtHCtma5BK8+ydOZYgMmWg1d/4KBytQspJCld8ZIujFMAdKG1xyr4Q==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.41.1.tgz", + "integrity": "sha512-3FkydeohozEskBxNWEIbPfOE0aqQgB6ttTkJ159uWOFn42VLyfAiyD9UK5mhu+ItWzft60DycIN1Xdgiy8o/SA==", "cpu": [ "x64" ], @@ -4388,9 +4376,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.40.2.tgz", - "integrity": "sha512-de6TFZYIvJwRNjmW3+gaXiZ2DaWL5D5yGmSYzkdzjBDS3W+B9JQ48oZEsmMvemqjtAFzE16DIBLqd6IQQRuG9Q==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.41.1.tgz", + "integrity": "sha512-wC53ZNDgt0pqx5xCAgNunkTzFE8GTgdZ9EwYGVcg+jEjJdZGtq9xPjDnFgfFozQI/Xm1mh+D9YlYtl+ueswNEg==", "cpu": [ "arm" ], @@ -4401,9 +4389,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.40.2.tgz", - "integrity": "sha512-urjaEZubdIkacKc930hUDOfQPysezKla/O9qV+O89enqsqUmQm8Xj8O/vh0gHg4LYfv7Y7UsE3QjzLQzDYN1qg==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.41.1.tgz", + "integrity": "sha512-jwKCca1gbZkZLhLRtsrka5N8sFAaxrGz/7wRJ8Wwvq3jug7toO21vWlViihG85ei7uJTpzbXZRcORotE+xyrLA==", "cpu": [ "arm" ], @@ -4414,9 +4402,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.40.2.tgz", - "integrity": "sha512-KlE8IC0HFOC33taNt1zR8qNlBYHj31qGT1UqWqtvR/+NuCVhfufAq9fxO8BMFC22Wu0rxOwGVWxtCMvZVLmhQg==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.41.1.tgz", + "integrity": "sha512-g0UBcNknsmmNQ8V2d/zD2P7WWfJKU0F1nu0k5pW4rvdb+BIqMm8ToluW/eeRmxCared5dD76lS04uL4UaNgpNA==", "cpu": [ "arm64" ], @@ -4427,9 +4415,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.40.2.tgz", - "integrity": "sha512-j8CgxvfM0kbnhu4XgjnCWJQyyBOeBI1Zq91Z850aUddUmPeQvuAy6OiMdPS46gNFgy8gN1xkYyLgwLYZG3rBOg==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.41.1.tgz", + "integrity": "sha512-XZpeGB5TKEZWzIrj7sXr+BEaSgo/ma/kCgrZgL0oo5qdB1JlTzIYQKel/RmhT6vMAvOdM2teYlAaOGJpJ9lahg==", "cpu": [ "arm64" ], @@ -4440,9 +4428,9 @@ ] }, "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.40.2.tgz", - "integrity": "sha512-Ybc/1qUampKuRF4tQXc7G7QY9YRyeVSykfK36Y5Qc5dmrIxwFhrOzqaVTNoZygqZ1ZieSWTibfFhQ5qK8jpWxw==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.41.1.tgz", + "integrity": "sha512-bkCfDJ4qzWfFRCNt5RVV4DOw6KEgFTUZi2r2RuYhGWC8WhCA8lCAJhDeAmrM/fdiAH54m0mA0Vk2FGRPyzI+tw==", "cpu": [ "loong64" ], @@ -4453,9 +4441,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.40.2.tgz", - "integrity": "sha512-3FCIrnrt03CCsZqSYAOW/k9n625pjpuMzVfeI+ZBUSDT3MVIFDSPfSUgIl9FqUftxcUXInvFah79hE1c9abD+Q==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.41.1.tgz", + "integrity": "sha512-3mr3Xm+gvMX+/8EKogIZSIEF0WUu0HL9di+YWlJpO8CQBnoLAEL/roTCxuLncEdgcfJcvA4UMOf+2dnjl4Ut1A==", "cpu": [ "ppc64" ], @@ -4466,9 +4454,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.40.2.tgz", - "integrity": "sha512-QNU7BFHEvHMp2ESSY3SozIkBPaPBDTsfVNGx3Xhv+TdvWXFGOSH2NJvhD1zKAT6AyuuErJgbdvaJhYVhVqrWTg==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.41.1.tgz", + "integrity": "sha512-3rwCIh6MQ1LGrvKJitQjZFuQnT2wxfU+ivhNBzmxXTXPllewOF7JR1s2vMX/tWtUYFgphygxjqMl76q4aMotGw==", "cpu": [ "riscv64" ], @@ -4479,9 +4467,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.40.2.tgz", - "integrity": "sha512-5W6vNYkhgfh7URiXTO1E9a0cy4fSgfE4+Hl5agb/U1sa0kjOLMLC1wObxwKxecE17j0URxuTrYZZME4/VH57Hg==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.41.1.tgz", + "integrity": "sha512-LdIUOb3gvfmpkgFZuccNa2uYiqtgZAz3PTzjuM5bH3nvuy9ty6RGc/Q0+HDFrHrizJGVpjnTZ1yS5TNNjFlklw==", "cpu": [ "riscv64" ], @@ -4492,9 +4480,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.40.2.tgz", - "integrity": "sha512-B7LKIz+0+p348JoAL4X/YxGx9zOx3sR+o6Hj15Y3aaApNfAshK8+mWZEf759DXfRLeL2vg5LYJBB7DdcleYCoQ==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.41.1.tgz", + "integrity": "sha512-oIE6M8WC9ma6xYqjvPhzZYk6NbobIURvP/lEbh7FWplcMO6gn7MM2yHKA1eC/GvYwzNKK/1LYgqzdkZ8YFxR8g==", "cpu": [ "s390x" ], @@ -4505,9 +4493,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.40.2.tgz", - "integrity": "sha512-lG7Xa+BmBNwpjmVUbmyKxdQJ3Q6whHjMjzQplOs5Z+Gj7mxPtWakGHqzMqNER68G67kmCX9qX57aRsW5V0VOng==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.41.1.tgz", + "integrity": "sha512-cWBOvayNvA+SyeQMp79BHPK8ws6sHSsYnK5zDcsC3Hsxr1dgTABKjMnMslPq1DvZIp6uO7kIWhiGwaTdR4Og9A==", "cpu": [ "x64" ], @@ -4518,9 +4506,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.40.2.tgz", - "integrity": "sha512-tD46wKHd+KJvsmije4bUskNuvWKFcTOIM9tZ/RrmIvcXnbi0YK/cKS9FzFtAm7Oxi2EhV5N2OpfFB348vSQRXA==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.41.1.tgz", + "integrity": "sha512-y5CbN44M+pUCdGDlZFzGGBSKCA4A/J2ZH4edTYSSxFg7ce1Xt3GtydbVKWLlzL+INfFIZAEg1ZV6hh9+QQf9YQ==", "cpu": [ "x64" ], @@ -4531,9 +4519,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.40.2.tgz", - "integrity": "sha512-Bjv/HG8RRWLNkXwQQemdsWw4Mg+IJ29LK+bJPW2SCzPKOUaMmPEppQlu/Fqk1d7+DX3V7JbFdbkh/NMmurT6Pg==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.41.1.tgz", + "integrity": "sha512-lZkCxIrjlJlMt1dLO/FbpZbzt6J/A8p4DnqzSa4PWqPEUUUnzXLeki/iyPLfV0BmHItlYgHUqJe+3KiyydmiNQ==", "cpu": [ "arm64" ], @@ -4544,9 +4532,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.40.2.tgz", - "integrity": "sha512-dt1llVSGEsGKvzeIO76HToiYPNPYPkmjhMHhP00T9S4rDern8P2ZWvWAQUEJ+R1UdMWJ/42i/QqJ2WV765GZcA==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.41.1.tgz", + "integrity": "sha512-+psFT9+pIh2iuGsxFYYa/LhS5MFKmuivRsx9iPJWNSGbh2XVEjk90fmpUEjCnILPEPJnikAU6SFDiEUyOv90Pg==", "cpu": [ "ia32" ], @@ -4557,9 +4545,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.40.2.tgz", - "integrity": "sha512-bwspbWB04XJpeElvsp+DCylKfF4trJDa2Y9Go8O6A7YLX2LIKGcNK/CYImJN6ZP4DcuOHB4Utl3iCbnR62DudA==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.41.1.tgz", + "integrity": "sha512-Wq2zpapRYLfi4aKxf2Xff0tN+7slj2d4R87WEzqw7ZLsVvO5zwYCIuEGSZYiK41+GlwUo1HiR+GdkLEJnCKTCw==", "cpu": [ "x64" ], @@ -4731,9 +4719,9 @@ } }, "node_modules/@types/cors": { - "version": "2.8.17", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", - "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", + "version": "2.8.18", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.18.tgz", + "integrity": "sha512-nX3d0sxJW41CqQvfOzVG1NCTXfFDrDWIghCZncpHeWlVFd81zxB/DLhg7avFg6eHLCRX7ckBmoIIcqa++upvJA==", "license": "MIT", "dependencies": { "@types/node": "*" @@ -4850,9 +4838,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "22.15.15", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.15.tgz", - "integrity": "sha512-R5muMcZob3/Jjchn5LcO8jdKwSCbzqmPB6ruBxMcf9kbxtniZHP327s6C37iOfuw8mbKK3cAQa7sEl7afLrQ8A==", + "version": "22.15.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.21.tgz", + "integrity": "sha512-EV/37Td6c+MgKAbkcLG6vqZ2zEYHD7bvSrzqqs2RIhbA6w3x+Dqz8MZM3sP6kGTeLrdoOgKZe+Xja7tUB2DNkQ==", "license": "MIT", "dependencies": { "undici-types": "~6.21.0" @@ -4901,14 +4889,15 @@ "license": "MIT" }, "node_modules/@vitejs/plugin-react": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.4.1.tgz", - "integrity": "sha512-IpEm5ZmeXAP/osiBXVVP5KjFMzbWOonMs0NaQQl+xYnUAcq4oHUBsF2+p4MgKWG4YMmFYJU8A6sxRPuowllm6w==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.5.0.tgz", + "integrity": "sha512-JuLWaEqypaJmOJPLWwO335Ig6jSgC1FTONCWAxnqcQthLTK/Yc9aH6hr9z/87xciejbQcnP3GnA1FWUSWeXaeg==", "license": "MIT", "dependencies": { "@babel/core": "^7.26.10", "@babel/plugin-transform-react-jsx-self": "^7.25.9", "@babel/plugin-transform-react-jsx-source": "^7.25.9", + "@rolldown/pluginutils": "1.0.0-beta.9", "@types/babel__core": "^7.20.5", "react-refresh": "^0.17.0" }, @@ -4933,9 +4922,9 @@ } }, "node_modules/@vitest/coverage-v8": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-3.1.3.tgz", - "integrity": "sha512-cj76U5gXCl3g88KSnf80kof6+6w+K4BjOflCl7t6yRJPDuCrHtVu0SgNYOUARJOL5TI8RScDbm5x4s1/P9bvpw==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-3.1.4.tgz", + "integrity": "sha512-G4p6OtioySL+hPV7Y6JHlhpsODbJzt1ndwHAFkyk6vVjpK03PFsKnauZIzcd0PrK4zAbc5lc+jeZ+eNGiMA+iw==", "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.3.0", @@ -4955,8 +4944,8 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "@vitest/browser": "3.1.3", - "vitest": "3.1.3" + "@vitest/browser": "3.1.4", + "vitest": "3.1.4" }, "peerDependenciesMeta": { "@vitest/browser": { @@ -4965,13 +4954,13 @@ } }, "node_modules/@vitest/expect": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.1.3.tgz", - "integrity": "sha512-7FTQQuuLKmN1Ig/h+h/GO+44Q1IlglPlR2es4ab7Yvfx+Uk5xsv+Ykk+MEt/M2Yn/xGmzaLKxGw2lgy2bwuYqg==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.1.4.tgz", + "integrity": "sha512-xkD/ljeliyaClDYqHPNCiJ0plY5YIcM0OlRiZizLhlPmpXWpxnGMyTZXOHFhFeG7w9P5PBeL4IdtJ/HeQwTbQA==", "license": "MIT", "dependencies": { - "@vitest/spy": "3.1.3", - "@vitest/utils": "3.1.3", + "@vitest/spy": "3.1.4", + "@vitest/utils": "3.1.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" }, @@ -4980,12 +4969,12 @@ } }, "node_modules/@vitest/mocker": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.1.3.tgz", - "integrity": "sha512-PJbLjonJK82uCWHjzgBJZuR7zmAOrSvKk1QBxrennDIgtH4uK0TB1PvYmc0XBCigxxtiAVPfWtAdy4lpz8SQGQ==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.1.4.tgz", + "integrity": "sha512-8IJ3CvwtSw/EFXqWFL8aCMu+YyYXG2WUSrQbViOZkWTKTVicVwZ/YiEZDSqD00kX+v/+W+OnxhNWoeVKorHygA==", "license": "MIT", "dependencies": { - "@vitest/spy": "3.1.3", + "@vitest/spy": "3.1.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, @@ -5015,9 +5004,9 @@ } }, "node_modules/@vitest/pretty-format": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.1.3.tgz", - "integrity": "sha512-i6FDiBeJUGLDKADw2Gb01UtUNb12yyXAqC/mmRWuYl+m/U9GS7s8us5ONmGkGpUUo7/iAYzI2ePVfOZTYvUifA==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.1.4.tgz", + "integrity": "sha512-cqv9H9GvAEoTaoq+cYqUTCGscUjKqlJZC7PRwY5FMySVj5J+xOm1KQcCiYHJOEzOKRUhLH4R2pTwvFlWCEScsg==", "license": "MIT", "dependencies": { "tinyrainbow": "^2.0.0" @@ -5027,12 +5016,12 @@ } }, "node_modules/@vitest/runner": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.1.3.tgz", - "integrity": "sha512-Tae+ogtlNfFei5DggOsSUvkIaSuVywujMj6HzR97AHK6XK8i3BuVyIifWAm/sE3a15lF5RH9yQIrbXYuo0IFyA==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.1.4.tgz", + "integrity": "sha512-djTeF1/vt985I/wpKVFBMWUlk/I7mb5hmD5oP8K9ACRmVXgKTae3TUOtXAEBfslNKPzUQvnKhNd34nnRSYgLNQ==", "license": "MIT", "dependencies": { - "@vitest/utils": "3.1.3", + "@vitest/utils": "3.1.4", "pathe": "^2.0.3" }, "funding": { @@ -5040,12 +5029,12 @@ } }, "node_modules/@vitest/snapshot": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.1.3.tgz", - "integrity": "sha512-XVa5OPNTYUsyqG9skuUkFzAeFnEzDp8hQu7kZ0N25B1+6KjGm4hWLtURyBbsIAOekfWQ7Wuz/N/XXzgYO3deWQ==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.1.4.tgz", + "integrity": "sha512-JPHf68DvuO7vilmvwdPr9TS0SuuIzHvxeaCkxYcCD4jTk67XwL45ZhEHFKIuCm8CYstgI6LZ4XbwD6ANrwMpFg==", "license": "MIT", "dependencies": { - "@vitest/pretty-format": "3.1.3", + "@vitest/pretty-format": "3.1.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" }, @@ -5054,9 +5043,9 @@ } }, "node_modules/@vitest/spy": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.1.3.tgz", - "integrity": "sha512-x6w+ctOEmEXdWaa6TO4ilb7l9DxPR5bwEb6hILKuxfU1NqWT2mpJD9NJN7t3OTfxmVlOMrvtoFJGdgyzZ605lQ==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.1.4.tgz", + "integrity": "sha512-Xg1bXhu+vtPXIodYN369M86K8shGLouNjoVI78g8iAq2rFoHFdajNvJJ5A/9bPMFcfQqdaCpOgWKEoMQg/s0Yg==", "license": "MIT", "dependencies": { "tinyspy": "^3.0.2" @@ -5066,12 +5055,12 @@ } }, "node_modules/@vitest/ui": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-3.1.3.tgz", - "integrity": "sha512-IipSzX+8DptUdXN/GWq3hq5z18MwnpphYdOMm0WndkRGYELzfq7NDP8dMpZT7JGW1uXFrIGxOW2D0Xi++ulByg==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-3.1.4.tgz", + "integrity": "sha512-CFc2Bpb3sz4Sdt53kdNGq+qZKLftBwX4qZLC03CBUc0N1LJrOoL0ZeK0oq/708mtnpwccL0BZCY9d1WuiBSr7Q==", "license": "MIT", "dependencies": { - "@vitest/utils": "3.1.3", + "@vitest/utils": "3.1.4", "fflate": "^0.8.2", "flatted": "^3.3.3", "pathe": "^2.0.3", @@ -5083,16 +5072,16 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "vitest": "3.1.3" + "vitest": "3.1.4" } }, "node_modules/@vitest/utils": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.1.3.tgz", - "integrity": "sha512-2Ltrpht4OmHO9+c/nmHtF09HWiyWdworqnHIwjfvDyWjuwKbdkcS9AnhsDn+8E2RM4x++foD1/tNuLPVvWG1Rg==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.1.4.tgz", + "integrity": "sha512-yriMuO1cfFhmiGc8ataN51+9ooHRuURdfAZfwFd3usWynjzpLslZdYnRegTv32qdgtJTsj15FoeZe2g15fY1gg==", "license": "MIT", "dependencies": { - "@vitest/pretty-format": "3.1.3", + "@vitest/pretty-format": "3.1.4", "loupe": "^3.1.3", "tinyrainbow": "^2.0.0" }, @@ -5101,23 +5090,23 @@ } }, "node_modules/@volar/language-core": { - "version": "2.4.13", - "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.13.tgz", - "integrity": "sha512-MnQJ7eKchJx5Oz+YdbqyFUk8BN6jasdJv31n/7r6/WwlOOv7qzvot6B66887l2ST3bUW4Mewml54euzpJWA6bg==", + "version": "2.4.14", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.14.tgz", + "integrity": "sha512-X6beusV0DvuVseaOEy7GoagS4rYHgDHnTrdOj5jeUb49fW5ceQyP9Ej5rBhqgz2wJggl+2fDbbojq1XKaxDi6w==", "license": "MIT", "dependencies": { - "@volar/source-map": "2.4.13" + "@volar/source-map": "2.4.14" } }, "node_modules/@volar/language-server": { - "version": "2.4.13", - "resolved": "https://registry.npmjs.org/@volar/language-server/-/language-server-2.4.13.tgz", - "integrity": "sha512-g8ucG5+FJgQT2r+Te1Pk+ppoPHCwzJ54gq/oN1utjtA3+iE9hp5E+M60Ks+hhGrexUPC/E3EABDQlCagmEal+Q==", + "version": "2.4.14", + "resolved": "https://registry.npmjs.org/@volar/language-server/-/language-server-2.4.14.tgz", + "integrity": "sha512-P3mGbQbW0v40UYBnb3DAaNtRYx6/MGOVKzdOWmBCGwjUkCR2xBkGrCFt05XnPDwFS/cTWDh2U6Mc9lpZ8Aecfw==", "license": "MIT", "dependencies": { - "@volar/language-core": "2.4.13", - "@volar/language-service": "2.4.13", - "@volar/typescript": "2.4.13", + "@volar/language-core": "2.4.14", + "@volar/language-service": "2.4.14", + "@volar/typescript": "2.4.14", "path-browserify": "^1.0.1", "request-light": "^0.7.0", "vscode-languageserver": "^9.0.1", @@ -5127,42 +5116,42 @@ } }, "node_modules/@volar/language-service": { - "version": "2.4.13", - "resolved": "https://registry.npmjs.org/@volar/language-service/-/language-service-2.4.13.tgz", - "integrity": "sha512-yngNLIxt1w3S60YLTRAa7MSE1IRmXcxGA9ttLjndY0Jc3owCFjeAWSPeXBILZBJOtdT8rP07JY1ozwUls/gvRg==", + "version": "2.4.14", + "resolved": "https://registry.npmjs.org/@volar/language-service/-/language-service-2.4.14.tgz", + "integrity": "sha512-vNC3823EJohdzLTyjZoCMPwoWCfINB5emusniCkW5CGoGHQov4VVmT6yI5ncgP/NpgAIUv2NEkJooXvLHA4VeQ==", "license": "MIT", "dependencies": { - "@volar/language-core": "2.4.13", + "@volar/language-core": "2.4.14", "vscode-languageserver-protocol": "^3.17.5", "vscode-languageserver-textdocument": "^1.0.11", "vscode-uri": "^3.0.8" } }, "node_modules/@volar/source-map": { - "version": "2.4.13", - "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.13.tgz", - "integrity": "sha512-l/EBcc2FkvHgz2ZxV+OZK3kMSroMr7nN3sZLF2/f6kWW66q8+tEL4giiYyFjt0BcubqJhBt6soYIrAPhg/Yr+Q==", + "version": "2.4.14", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.14.tgz", + "integrity": "sha512-5TeKKMh7Sfxo8021cJfmBzcjfY1SsXsPMMjMvjY7ivesdnybqqS+GxGAoXHAOUawQTwtdUxgP65Im+dEmvWtYQ==", "license": "MIT" }, "node_modules/@volar/test-utils": { - "version": "2.4.13", - "resolved": "https://registry.npmjs.org/@volar/test-utils/-/test-utils-2.4.13.tgz", - "integrity": "sha512-tb0PP1BQY0lPwVcT0qAs9N20iOxRHjmdQPEJfbJAJc38bvDhaC+XjZZjlAzEnhjU51dodcrZBAR/xt7wrwqffQ==", + "version": "2.4.14", + "resolved": "https://registry.npmjs.org/@volar/test-utils/-/test-utils-2.4.14.tgz", + "integrity": "sha512-+3fzjRA3HSchFw22848xofqvv1+Y2LBEduyjYc1vqQWFYcWjkKOOLgSonRflmJrFwLa9bBcvUxNihhh71FsbGw==", "license": "MIT", "dependencies": { - "@volar/language-core": "2.4.13", - "@volar/language-server": "2.4.13", + "@volar/language-core": "2.4.14", + "@volar/language-server": "2.4.14", "vscode-languageserver-textdocument": "^1.0.11", "vscode-uri": "^3.0.8" } }, "node_modules/@volar/typescript": { - "version": "2.4.13", - "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.13.tgz", - "integrity": "sha512-Ukz4xv84swJPupZeoFsQoeJEOm7U9pqsEnaGGgt5ni3SCTa22m8oJP5Nng3Wed7Uw5RBELdLxxORX8YhJPyOgQ==", + "version": "2.4.14", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.14.tgz", + "integrity": "sha512-p8Z6f/bZM3/HyCdRNFZOEEzts51uV8WHeN8Tnfnm2EBv6FDB2TQLzfVx7aJvnl8ofKAOnS64B2O8bImBFaauRw==", "license": "MIT", "dependencies": { - "@volar/language-core": "2.4.13", + "@volar/language-core": "2.4.14", "path-browserify": "^1.0.1", "vscode-uri": "^3.0.8" } @@ -5187,53 +5176,53 @@ "license": "MIT" }, "node_modules/@vue/compiler-core": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.13.tgz", - "integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==", + "version": "3.5.14", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.14.tgz", + "integrity": "sha512-k7qMHMbKvoCXIxPhquKQVw3Twid3Kg4s7+oYURxLGRd56LiuHJVrvFKI4fm2AM3c8apqODPfVJGoh8nePbXMRA==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.25.3", - "@vue/shared": "3.5.13", + "@babel/parser": "^7.27.2", + "@vue/shared": "3.5.14", "entities": "^4.5.0", "estree-walker": "^2.0.2", - "source-map-js": "^1.2.0" + "source-map-js": "^1.2.1" } }, "node_modules/@vue/compiler-dom": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz", - "integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==", + "version": "3.5.14", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.14.tgz", + "integrity": "sha512-1aOCSqxGOea5I80U2hQJvXYpPm/aXo95xL/m/mMhgyPUsKe9jhjwWpziNAw7tYRnbz1I61rd9Mld4W9KmmRoug==", "license": "MIT", "dependencies": { - "@vue/compiler-core": "3.5.13", - "@vue/shared": "3.5.13" + "@vue/compiler-core": "3.5.14", + "@vue/shared": "3.5.14" } }, "node_modules/@vue/compiler-sfc": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz", - "integrity": "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==", + "version": "3.5.14", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.14.tgz", + "integrity": "sha512-9T6m/9mMr81Lj58JpzsiSIjBgv2LiVoWjIVa7kuXHICUi8LiDSIotMpPRXYJsXKqyARrzjT24NAwttrMnMaCXA==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.25.3", - "@vue/compiler-core": "3.5.13", - "@vue/compiler-dom": "3.5.13", - "@vue/compiler-ssr": "3.5.13", - "@vue/shared": "3.5.13", + "@babel/parser": "^7.27.2", + "@vue/compiler-core": "3.5.14", + "@vue/compiler-dom": "3.5.14", + "@vue/compiler-ssr": "3.5.14", + "@vue/shared": "3.5.14", "estree-walker": "^2.0.2", - "magic-string": "^0.30.11", - "postcss": "^8.4.48", - "source-map-js": "^1.2.0" + "magic-string": "^0.30.17", + "postcss": "^8.5.3", + "source-map-js": "^1.2.1" } }, "node_modules/@vue/compiler-ssr": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz", - "integrity": "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==", + "version": "3.5.14", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.14.tgz", + "integrity": "sha512-Y0G7PcBxr1yllnHuS/NxNCSPWnRGH4Ogrp0tsLA5QemDZuJLs99YjAKQ7KqkHE0vCg4QTKlQzXLKCMF7WPSl7Q==", "license": "MIT", "dependencies": { - "@vue/compiler-dom": "3.5.13", - "@vue/shared": "3.5.13" + "@vue/compiler-dom": "3.5.14", + "@vue/shared": "3.5.14" } }, "node_modules/@vue/compiler-vue2": { @@ -5349,53 +5338,53 @@ } }, "node_modules/@vue/reactivity": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.13.tgz", - "integrity": "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==", + "version": "3.5.14", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.14.tgz", + "integrity": "sha512-7cK1Hp343Fu/SUCCO52vCabjvsYu7ZkOqyYu7bXV9P2yyfjUMUXHZafEbq244sP7gf+EZEz+77QixBTuEqkQQw==", "license": "MIT", "dependencies": { - "@vue/shared": "3.5.13" + "@vue/shared": "3.5.14" } }, "node_modules/@vue/runtime-core": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.13.tgz", - "integrity": "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==", + "version": "3.5.14", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.14.tgz", + "integrity": "sha512-w9JWEANwHXNgieAhxPpEpJa+0V5G0hz3NmjAZwlOebtfKyp2hKxKF0+qSh0Xs6/PhfGihuSdqMprMVcQU/E6ag==", "license": "MIT", "dependencies": { - "@vue/reactivity": "3.5.13", - "@vue/shared": "3.5.13" + "@vue/reactivity": "3.5.14", + "@vue/shared": "3.5.14" } }, "node_modules/@vue/runtime-dom": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz", - "integrity": "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==", + "version": "3.5.14", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.14.tgz", + "integrity": "sha512-lCfR++IakeI35TVR80QgOelsUIdcKjd65rWAMfdSlCYnaEY5t3hYwru7vvcWaqmrK+LpI7ZDDYiGU5V3xjMacw==", "license": "MIT", "dependencies": { - "@vue/reactivity": "3.5.13", - "@vue/runtime-core": "3.5.13", - "@vue/shared": "3.5.13", + "@vue/reactivity": "3.5.14", + "@vue/runtime-core": "3.5.14", + "@vue/shared": "3.5.14", "csstype": "^3.1.3" } }, "node_modules/@vue/server-renderer": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.13.tgz", - "integrity": "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==", + "version": "3.5.14", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.14.tgz", + "integrity": "sha512-Rf/ISLqokIvcySIYnv3tNWq40PLpNLDLSJwwVWzG6MNtyIhfbcrAxo5ZL9nARJhqjZyWWa40oRb2IDuejeuv6w==", "license": "MIT", "dependencies": { - "@vue/compiler-ssr": "3.5.13", - "@vue/shared": "3.5.13" + "@vue/compiler-ssr": "3.5.14", + "@vue/shared": "3.5.14" }, "peerDependencies": { - "vue": "3.5.13" + "vue": "3.5.14" } }, "node_modules/@vue/shared": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz", - "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==", + "version": "3.5.14", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.14.tgz", + "integrity": "sha512-oXTwNxVfc9EtP1zzXAlSlgARLXNC84frFYkS0HHz0h3E4WZSP9sywqjqzGCP9Y34M8ipNmd380pVgmMuwELDyQ==", "license": "MIT" }, "node_modules/@vue/test-utils": { @@ -5433,9 +5422,9 @@ } }, "node_modules/@vvo/tzdb": { - "version": "6.161.0", - "resolved": "https://registry.npmjs.org/@vvo/tzdb/-/tzdb-6.161.0.tgz", - "integrity": "sha512-rvk2x77vnY87Tu1d8QuJk300WWzk8OP9/cDw2KgxEdjlYpLarJx82j2sPUpiy1wnjSuTTnYwpjBgZnNS5Iyb+w==", + "version": "6.163.0", + "resolved": "https://registry.npmjs.org/@vvo/tzdb/-/tzdb-6.163.0.tgz", + "integrity": "sha512-hcPG4+OxwTAtyU0kmJuYGdpDOlGsRIUUGH+4VVi4uPrmArChXG6UTpgQC/H6YS9HZ5Ke13w9byBrIG0mcGrPBg==", "license": "MIT" }, "node_modules/@webassemblyjs/ast": { @@ -5650,18 +5639,27 @@ } }, "node_modules/accepts": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", - "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "license": "MIT", "dependencies": { - "mime-types": "^3.0.0", - "negotiator": "^1.0.0" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" }, "engines": { "node": ">= 0.6" } }, + "node_modules/accepts/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", @@ -6396,25 +6394,44 @@ } }, "node_modules/body-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", - "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "license": "MIT", "dependencies": { - "bytes": "^3.1.2", - "content-type": "^1.0.5", - "debug": "^4.4.0", - "http-errors": "^2.0.0", - "iconv-lite": "^0.6.3", - "on-finished": "^2.4.1", - "qs": "^6.14.0", - "raw-body": "^3.0.0", - "type-is": "^2.0.0" + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, "engines": { - "node": ">=18" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", @@ -6597,9 +6614,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001717", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001717.tgz", - "integrity": "sha512-auPpttCq6BDEG8ZAuHJIplGw6GODhjw+/11e7IjpnYCxZcW/ONgPs0KVBJ0d1bY3e2+7PRe5RCLyP+PfwVgkYw==", + "version": "1.0.30001718", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001718.tgz", + "integrity": "sha512-AflseV1ahcSunK53NfEs9gFWgOEmzr0f+kaMFA4xiLZlr9Hzt7HxcSpIFcnNCUkz6R6dWKa54rUz3HUmI3nVcw==", "funding": [ { "type": "opencollective", @@ -6974,15 +6991,6 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, - "node_modules/compression/node_modules/negotiator": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", - "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -6999,12 +7007,6 @@ "proto-list": "~1.2.1" } }, - "node_modules/config-chain/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "license": "ISC" - }, "node_modules/connect": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", @@ -7041,60 +7043,12 @@ "ms": "2.0.0" } }, - "node_modules/connect/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/connect/node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/connect/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, - "node_modules/connect/node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/connect/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", @@ -7112,9 +7066,9 @@ } }, "node_modules/content-disposition": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", - "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" @@ -7160,21 +7114,12 @@ "node": ">= 0.8.0" } }, - "node_modules/cookie-parser/node_modules/cookie-signature": { + "node_modules/cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", "license": "MIT" }, - "node_modules/cookie-signature": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", - "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", - "license": "MIT", - "engines": { - "node": ">=6.6.0" - } - }, "node_modules/core-js": { "version": "3.42.0", "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.42.0.tgz", @@ -7441,9 +7386,9 @@ } }, "node_modules/css-loader/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -7687,7 +7632,7 @@ "version": "1.11.0", "resolved": "https://registry.npmjs.org/csurf/-/csurf-1.11.0.tgz", "integrity": "sha512-UCtehyEExKTxgiu8UHdGvHj4tnpE/Qctue03Giq5gPgMQ9cg/ciod5blZQ5a4uCEenNQjxyGuzygLdKUmee/bQ==", - "deprecated": "Please use another csrf package", + "deprecated": "This package is archived and no longer maintained. For support, visit https://github.com/expressjs/express/discussions", "license": "MIT", "dependencies": { "cookie": "0.4.0", @@ -7708,12 +7653,6 @@ "node": ">= 0.6" } }, - "node_modules/csurf/node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "license": "MIT" - }, "node_modules/csurf/node_modules/depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -7745,15 +7684,6 @@ "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", "license": "ISC" }, - "node_modules/csurf/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/csurf/node_modules/toidentifier": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", @@ -7861,9 +7791,9 @@ "license": "MIT" }, "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -8048,9 +7978,9 @@ "license": "MIT" }, "node_modules/diff": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", - "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", + "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" @@ -8273,9 +8203,9 @@ } }, "node_modules/editorconfig/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -8306,9 +8236,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.150", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.150.tgz", - "integrity": "sha512-rOOkP2ZUMx1yL4fCxXQKDHQ8ZXwisb2OycOQVKHgvB3ZI4CvehOd4y2tfnnLDieJ3Zs1RL1Dlp3cMkyIn7nnXA==", + "version": "1.5.157", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.157.tgz", + "integrity": "sha512-/0ybgsQd1muo8QlnuTpKwtl0oX5YMlUGbm8xyqgDU00motRkKFFbUJySAQBWcY79rVqNLWIWa87BGVGClwAB2w==", "license": "ISC" }, "node_modules/emmet": { @@ -8343,9 +8273,9 @@ } }, "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -8380,19 +8310,6 @@ "node": ">=10.0.0" } }, - "node_modules/engine.io/node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "license": "MIT", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/engine.io/node_modules/debug": { "version": "4.3.7", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", @@ -8410,36 +8327,6 @@ } } }, - "node_modules/engine.io/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/engine.io/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/engine.io/node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/engine.io/node_modules/ws": { "version": "8.17.1", "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", @@ -8532,27 +8419,27 @@ } }, "node_modules/es-abstract": { - "version": "1.23.9", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz", - "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==", + "version": "1.23.10", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.10.tgz", + "integrity": "sha512-MtUbM072wlJNyeYAe0mhzrD+M6DIJa96CZAOBBrhDbgKnB4MApIKefcyAB1eOdYn8cUNZgvwBvEzdoAYsxgEIw==", "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.2", "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", - "call-bound": "^1.0.3", + "call-bound": "^1.0.4", "data-view-buffer": "^1.0.2", "data-view-byte-length": "^1.0.2", "data-view-byte-offset": "^1.0.1", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", + "es-object-atoms": "^1.1.1", "es-set-tostringtag": "^2.1.0", "es-to-primitive": "^1.3.0", "function.prototype.name": "^1.1.8", - "get-intrinsic": "^1.2.7", - "get-proto": "^1.0.0", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", "get-symbol-description": "^1.1.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", @@ -8568,13 +8455,13 @@ "is-shared-array-buffer": "^1.0.4", "is-string": "^1.1.1", "is-typed-array": "^1.1.15", - "is-weakref": "^1.1.0", + "is-weakref": "^1.1.1", "math-intrinsics": "^1.1.0", - "object-inspect": "^1.13.3", + "object-inspect": "^1.13.4", "object-keys": "^1.1.1", "object.assign": "^4.1.7", "own-keys": "^1.0.1", - "regexp.prototype.flags": "^1.5.3", + "regexp.prototype.flags": "^1.5.4", "safe-array-concat": "^1.1.3", "safe-push-apply": "^1.0.0", "safe-regex-test": "^1.1.0", @@ -8587,7 +8474,7 @@ "typed-array-byte-offset": "^1.0.4", "typed-array-length": "^1.0.7", "unbox-primitive": "^1.1.0", - "which-typed-array": "^1.1.18" + "which-typed-array": "^1.1.19" }, "engines": { "node": ">= 0.4" @@ -8744,23 +8631,22 @@ } }, "node_modules/eslint": { - "version": "9.26.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.26.0.tgz", - "integrity": "sha512-Hx0MOjPh6uK9oq9nVsATZKE/Wlbai7KFjfCuw9UHaguDW3x+HF0O5nIi3ud39TWgrTjTO5nHxmL3R1eANinWHQ==", + "version": "9.27.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.27.0.tgz", + "integrity": "sha512-ixRawFQuMB9DZ7fjU3iGGganFDp3+45bPOdaRurcFHSXO1e/sYwUX/FtQZpLZJR6SjMoJH8hR2pPEAfDyCoU2Q==", "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.20.0", "@eslint/config-helpers": "^0.2.1", - "@eslint/core": "^0.13.0", + "@eslint/core": "^0.14.0", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.26.0", - "@eslint/plugin-kit": "^0.2.8", + "@eslint/js": "9.27.0", + "@eslint/plugin-kit": "^0.3.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", - "@modelcontextprotocol/sdk": "^1.8.0", "@types/estree": "^1.0.6", "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", @@ -8784,8 +8670,7 @@ "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "zod": "^3.24.2" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" @@ -8806,13 +8691,16 @@ } }, "node_modules/eslint-config-prettier": { - "version": "10.1.3", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.3.tgz", - "integrity": "sha512-vDo4d9yQE+cS2tdIT4J02H/16veRvkHgiLDRpej+WL67oCfbOb97itZXn8wMPJ/GsiEBVjrjs//AVNw2Cp1EcA==", + "version": "10.1.5", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.5.tgz", + "integrity": "sha512-zc1UmCpNltmVY34vuLRV61r1K27sWuX39E+uyUnY8xS2Bex88VV9cugG+UZbRSRGtGyFboj+D8JODyme1plMpw==", "license": "MIT", "bin": { "eslint-config-prettier": "bin/cli.js" }, + "funding": { + "url": "https://opencollective.com/eslint-config-prettier" + }, "peerDependencies": { "eslint": ">=7.0.0" } @@ -8917,21 +8805,33 @@ } }, "node_modules/eslint-plugin-html": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-html/-/eslint-plugin-html-8.1.2.tgz", - "integrity": "sha512-pbRchDV2SmqbCi/Ev/q3aAikzG9BcFe0IjjqjtMn8eTLq71ZUggyJB6CDmuwGAXmYZHrXI12XTfCqvgcnPRqGw==", + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-html/-/eslint-plugin-html-8.1.3.tgz", + "integrity": "sha512-cnCdO7yb/jrvgSJJAfRkGDOwLu1AOvNdw8WCD6nh/2C4RnxuI4tz6QjMEAmmSiHSeugq/fXcIO8yBpIBQrMZCg==", "license": "ISC", "dependencies": { - "htmlparser2": "^9.1.0" + "htmlparser2": "^10.0.0" }, "engines": { "node": ">=16.0.0" } }, + "node_modules/eslint-plugin-html/node_modules/entities": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.0.tgz", + "integrity": "sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/eslint-plugin-html/node_modules/htmlparser2": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.1.0.tgz", - "integrity": "sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.0.0.tgz", + "integrity": "sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==", "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", { @@ -8943,8 +8843,8 @@ "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", - "domutils": "^3.1.0", - "entities": "^4.5.0" + "domutils": "^3.2.1", + "entities": "^6.0.0" } }, "node_modules/eslint-plugin-import": { @@ -9079,9 +8979,9 @@ } }, "node_modules/eslint-plugin-vue/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -9322,27 +9222,6 @@ "node": ">=0.8.x" } }, - "node_modules/eventsource": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.6.tgz", - "integrity": "sha512-l19WpE2m9hSuyP06+FbuUUf1G+R0SFLrtQfbRb9PRr+oimOfxQhgGCbVaXg5IvZyyTThJsxh6L/srkMiCeBPDA==", - "license": "MIT", - "dependencies": { - "eventsource-parser": "^3.0.1" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/eventsource-parser": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.1.tgz", - "integrity": "sha512-VARTJ9CYeuQYb0pZEPbzi740OWFgpHe7AYJ2WFZVnUDUQp5Dk2yJUgF36YsZ81cOyxT0QxmXD2EQpapAouzWVA==", - "license": "MIT", - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/eventsource-polyfill": { "version": "0.9.6", "resolved": "https://registry.npmjs.org/eventsource-polyfill/-/eventsource-polyfill-0.9.6.tgz", @@ -9359,62 +9238,51 @@ } }, "node_modules/express": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", - "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", "license": "MIT", "dependencies": { - "accepts": "^2.0.0", - "body-parser": "^2.2.0", - "content-disposition": "^1.0.0", - "content-type": "^1.0.5", - "cookie": "^0.7.1", - "cookie-signature": "^1.2.1", - "debug": "^4.4.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "finalhandler": "^2.1.0", - "fresh": "^2.0.0", - "http-errors": "^2.0.0", - "merge-descriptors": "^2.0.0", - "mime-types": "^3.0.0", - "on-finished": "^2.4.1", - "once": "^1.4.0", - "parseurl": "^1.3.3", - "proxy-addr": "^2.0.7", - "qs": "^6.14.0", - "range-parser": "^1.2.1", - "router": "^2.2.0", - "send": "^1.1.0", - "serve-static": "^2.2.0", - "statuses": "^2.0.1", - "type-is": "^2.0.1", - "vary": "^1.1.2" + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.12", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" }, "engines": { - "node": ">= 18" + "node": ">= 0.10.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/express" } }, - "node_modules/express-rate-limit": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.0.tgz", - "integrity": "sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==", - "license": "MIT", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://github.com/sponsors/express-rate-limit" - }, - "peerDependencies": { - "express": "^4.11 || 5 || ^5.0.0-beta.1" - } - }, "node_modules/express-session": { "version": "1.18.1", "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.18.1.tgz", @@ -9455,6 +9323,72 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, + "node_modules/express/node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/express/node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "license": "MIT" + }, + "node_modules/express/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -9647,17 +9581,45 @@ } }, "node_modules/finalhandler": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", - "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "license": "MIT", "dependencies": { - "debug": "^4.4.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "on-finished": "^2.4.1", - "parseurl": "^1.3.3", - "statuses": "^2.0.1" + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/finalhandler/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" }, "engines": { "node": ">= 0.8" @@ -9753,9 +9715,9 @@ } }, "node_modules/flow-remove-types": { - "version": "2.269.1", - "resolved": "https://registry.npmjs.org/flow-remove-types/-/flow-remove-types-2.269.1.tgz", - "integrity": "sha512-P46c3VI+2Bq/oFuQojatHISg0c+t0JQDnFhwwuSSraw+QtDVEvNYg3eEP+Cc/i4nKntt6qa22hbUb8dJ//LkBw==", + "version": "2.272.1", + "resolved": "https://registry.npmjs.org/flow-remove-types/-/flow-remove-types-2.272.1.tgz", + "integrity": "sha512-cF+gSi+Pd6DglG2Rzhb4WsUKqa5s21qf+sFVLfPEu26ym3t/dZzdLCMC4SR200ZsOxP57syolwObCFAjcLnlvg==", "license": "MIT", "dependencies": { "hermes-parser": "0.28.0", @@ -9854,27 +9816,6 @@ "node": ">= 6" } }, - "node_modules/form-data/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/form-data/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/formidable": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.5.tgz", @@ -9913,12 +9854,12 @@ } }, "node_modules/fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", - "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">= 0.6" } }, "node_modules/fs-extra": { @@ -10238,6 +10179,15 @@ "node": ">=16" } }, + "node_modules/global-prefix/node_modules/ini": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", + "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/global-prefix/node_modules/isexe": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", @@ -10571,6 +10521,15 @@ "node": ">= 0.8" } }, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/http-proxy": { "version": "1.18.1", "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", @@ -10620,12 +10579,12 @@ } }, "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "safer-buffer": ">= 2.1.2 < 3" }, "engines": { "node": ">=0.10.0" @@ -10822,13 +10781,10 @@ "license": "ISC" }, "node_modules/ini": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", - "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" }, "node_modules/internal-slot": { "version": "1.1.0", @@ -11429,9 +11385,9 @@ } }, "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -11470,9 +11426,9 @@ } }, "node_modules/istanbul-lib-report/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -12018,130 +11974,6 @@ "lodash": "^4.17.15" } }, - "node_modules/karma/node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/karma/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/karma/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/karma/node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/karma/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/karma/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/karma/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/karma/node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/karma/node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/karma/node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "license": "MIT", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/kdbush": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-4.0.2.tgz", @@ -12493,12 +12325,12 @@ "license": "CC0-1.0" }, "node_modules/media-typer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", - "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">= 0.6" } }, "node_modules/memoize-one": { @@ -12508,13 +12340,10 @@ "license": "MIT" }, "node_modules/merge-descriptors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", - "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", "license": "MIT", - "engines": { - "node": ">=18" - }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } @@ -12590,21 +12419,21 @@ } }, "node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", - "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "license": "MIT", "dependencies": { - "mime-db": "^1.54.0" + "mime-db": "1.52.0" }, "engines": { "node": ">= 0.6" @@ -12694,22 +12523,22 @@ } }, "node_modules/mocha": { - "version": "11.2.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.2.2.tgz", - "integrity": "sha512-VlSBxrPYHK4YNOEbFdkCxHQbZMoNzBkoPprqtZRW6311EUF/DlSxoycE2e/2NtRk4WKkIXzyrXDTrlikJMWgbw==", + "version": "11.5.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.5.0.tgz", + "integrity": "sha512-VKDjhy6LMTKm0WgNEdlY77YVsD49LZnPSXJAaPNL9NRYQADxvORsyG1DIQY6v53BKTnlNbEE2MbVCDbnxr4K3w==", "license": "MIT", "dependencies": { "browser-stdout": "^1.3.1", "chokidar": "^4.0.1", "debug": "^4.3.5", - "diff": "^5.2.0", + "diff": "^7.0.0", "escape-string-regexp": "^4.0.0", "find-up": "^5.0.0", "glob": "^10.4.5", "he": "^1.2.0", "js-yaml": "^4.1.0", "log-symbols": "^4.1.0", - "minimatch": "^5.1.6", + "minimatch": "^9.0.5", "ms": "^2.1.3", "picocolors": "^1.1.1", "serialize-javascript": "^6.0.2", @@ -12792,21 +12621,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/mocha/node_modules/glob/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/mocha/node_modules/is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", @@ -12836,15 +12650,18 @@ } }, "node_modules/mocha/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/mocha/node_modules/readdirp": { @@ -12970,9 +12787,9 @@ "license": "MIT" }, "node_modules/negotiator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -13520,13 +13337,10 @@ "license": "ISC" }, "node_modules/path-to-regexp": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", - "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", - "license": "MIT", - "engines": { - "node": ">=16" - } + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", + "license": "MIT" }, "node_modules/path-type": { "version": "4.0.0", @@ -13610,15 +13424,6 @@ "node": ">= 6" } }, - "node_modules/pkce-challenge": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.0.tgz", - "integrity": "sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==", - "license": "MIT", - "engines": { - "node": ">=16.20.0" - } - }, "node_modules/pkg-dir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", @@ -14385,9 +14190,9 @@ } }, "node_modules/postcss-loader/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -15559,12 +15364,12 @@ } }, "node_modules/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.1.0" + "side-channel": "^1.0.6" }, "engines": { "node": ">=0.6" @@ -15607,14 +15412,14 @@ } }, "node_modules/raw-body": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", - "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "license": "MIT", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", - "iconv-lite": "0.6.3", + "iconv-lite": "0.4.24", "unpipe": "1.0.0" }, "engines": { @@ -16052,9 +15857,9 @@ "license": "MIT" }, "node_modules/rollup": { - "version": "4.40.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.40.2.tgz", - "integrity": "sha512-tfUOg6DTP4rhQ3VjOO6B4wyrJnGOX85requAXvqYTHsOgb2TFJdZ3aWpT8W2kPoypSGP7dZUyzxJ9ee4buM5Fg==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.41.1.tgz", + "integrity": "sha512-cPmwD3FnFv8rKMBc1MxWCwVQFxwf1JEmSX3iQXrRVVG15zerAIXRjMFVWnd5Q5QvgKF7Aj+5ykXFhUl+QGnyOw==", "license": "MIT", "dependencies": { "@types/estree": "1.0.7" @@ -16067,51 +15872,29 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.40.2", - "@rollup/rollup-android-arm64": "4.40.2", - "@rollup/rollup-darwin-arm64": "4.40.2", - "@rollup/rollup-darwin-x64": "4.40.2", - "@rollup/rollup-freebsd-arm64": "4.40.2", - "@rollup/rollup-freebsd-x64": "4.40.2", - "@rollup/rollup-linux-arm-gnueabihf": "4.40.2", - "@rollup/rollup-linux-arm-musleabihf": "4.40.2", - "@rollup/rollup-linux-arm64-gnu": "4.40.2", - "@rollup/rollup-linux-arm64-musl": "4.40.2", - "@rollup/rollup-linux-loongarch64-gnu": "4.40.2", - "@rollup/rollup-linux-powerpc64le-gnu": "4.40.2", - "@rollup/rollup-linux-riscv64-gnu": "4.40.2", - "@rollup/rollup-linux-riscv64-musl": "4.40.2", - "@rollup/rollup-linux-s390x-gnu": "4.40.2", - "@rollup/rollup-linux-x64-gnu": "4.40.2", - "@rollup/rollup-linux-x64-musl": "4.40.2", - "@rollup/rollup-win32-arm64-msvc": "4.40.2", - "@rollup/rollup-win32-ia32-msvc": "4.40.2", - "@rollup/rollup-win32-x64-msvc": "4.40.2", + "@rollup/rollup-android-arm-eabi": "4.41.1", + "@rollup/rollup-android-arm64": "4.41.1", + "@rollup/rollup-darwin-arm64": "4.41.1", + "@rollup/rollup-darwin-x64": "4.41.1", + "@rollup/rollup-freebsd-arm64": "4.41.1", + "@rollup/rollup-freebsd-x64": "4.41.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.41.1", + "@rollup/rollup-linux-arm-musleabihf": "4.41.1", + "@rollup/rollup-linux-arm64-gnu": "4.41.1", + "@rollup/rollup-linux-arm64-musl": "4.41.1", + "@rollup/rollup-linux-loongarch64-gnu": "4.41.1", + "@rollup/rollup-linux-powerpc64le-gnu": "4.41.1", + "@rollup/rollup-linux-riscv64-gnu": "4.41.1", + "@rollup/rollup-linux-riscv64-musl": "4.41.1", + "@rollup/rollup-linux-s390x-gnu": "4.41.1", + "@rollup/rollup-linux-x64-gnu": "4.41.1", + "@rollup/rollup-linux-x64-musl": "4.41.1", + "@rollup/rollup-win32-arm64-msvc": "4.41.1", + "@rollup/rollup-win32-ia32-msvc": "4.41.1", + "@rollup/rollup-win32-x64-msvc": "4.41.1", "fsevents": "~2.3.2" } }, - "node_modules/router": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", - "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", - "license": "MIT", - "dependencies": { - "debug": "^4.4.0", - "depd": "^2.0.0", - "is-promise": "^4.0.0", - "parseurl": "^1.3.3", - "path-to-regexp": "^8.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/router/node_modules/is-promise": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", - "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", - "license": "MIT" - }, "node_modules/rrweb-cssom": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", @@ -16203,9 +15986,9 @@ "license": "MIT" }, "node_modules/sanitize-html": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.16.0.tgz", - "integrity": "sha512-0s4caLuHHaZFVxFTG74oW91+j6vW7gKbGD6CD2+miP73CE6z6YtOBN0ArtLd2UGyi4IC7K47v3ENUbQX4jV3Mg==", + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.17.0.tgz", + "integrity": "sha512-dLAADUSS8rBwhaevT12yCezvioCA+bmUTPH/u57xKPT8d++voeYE6HeluA/bPbQ15TwDBG2ii+QZIEmYx8VdxA==", "license": "MIT", "dependencies": { "deepmerge": "^4.2.2", @@ -16226,9 +16009,9 @@ } }, "node_modules/sass": { - "version": "1.87.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.87.0.tgz", - "integrity": "sha512-d0NoFH4v6SjEK7BoX810Jsrhj7IQSYHAHLi/iSpgqKc7LaIDshFRlSg5LOymf9FqQhxEHs2W5ZQXlvy0KD45Uw==", + "version": "1.89.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.89.0.tgz", + "integrity": "sha512-ld+kQU8YTdGNjOLfRWBzewJpU5cwEv/h5yyqlSeJcj6Yh8U4TDA9UA5FPicqDz/xgRPWRSYIQNiFks21TbA9KQ==", "license": "MIT", "dependencies": { "chokidar": "^4.0.0", @@ -16395,25 +16178,63 @@ } }, "node_modules/send": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", - "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "license": "MIT", "dependencies": { - "debug": "^4.3.5", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "fresh": "^2.0.0", - "http-errors": "^2.0.0", - "mime-types": "^3.0.1", - "ms": "^2.1.3", - "on-finished": "^2.4.1", - "range-parser": "^1.2.1", - "statuses": "^2.0.1" + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" }, "engines": { - "node": ">= 18" + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/send/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/send/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" } }, "node_modules/serialize-javascript": { @@ -16441,15 +16262,6 @@ "node": ">= 0.8.0" } }, - "node_modules/serve-favicon/node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/serve-favicon/node_modules/ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", @@ -16480,19 +16292,6 @@ "node": ">= 0.8.0" } }, - "node_modules/serve-index/node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "license": "MIT", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/serve-index/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -16532,70 +16331,40 @@ "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", "license": "ISC" }, - "node_modules/serve-index/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/serve-index/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, - "node_modules/serve-index/node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/serve-index/node_modules/setprototypeof": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", "license": "ISC" }, - "node_modules/serve-index/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/serve-static": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", - "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "license": "MIT", "dependencies": { - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "parseurl": "^1.3.3", - "send": "^1.2.0" + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" }, "engines": { - "node": ">= 18" + "node": ">= 0.8.0" + } + }, + "node_modules/serve-static/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" } }, "node_modules/server": { @@ -16635,339 +16404,6 @@ "url": "https://www.paypal.me/franciscopresencia/19" } }, - "node_modules/server/node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "license": "MIT", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/server/node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/server/node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/server/node_modules/cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/server/node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "license": "MIT" - }, - "node_modules/server/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/server/node_modules/express": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", - "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", - "license": "MIT", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.3", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.7.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.3.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.12", - "proxy-addr": "~2.0.7", - "qs": "6.13.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/server/node_modules/express/node_modules/path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", - "license": "MIT" - }, - "node_modules/server/node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/server/node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/server/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/server/node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/server/node_modules/merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/server/node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/server/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/server/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/server/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/server/node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/server/node_modules/path-to-regexp": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", - "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", - "license": "MIT" - }, - "node_modules/server/node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/server/node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/server/node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/server/node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/server/node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/server/node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", - "license": "MIT", - "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.19.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/server/node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "license": "MIT", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -17268,19 +16704,6 @@ } } }, - "node_modules/socket.io/node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "license": "MIT", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/socket.io/node_modules/debug": { "version": "4.3.7", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", @@ -17298,36 +16721,6 @@ } } }, - "node_modules/socket.io/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/socket.io/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/socket.io/node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/sockette": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/sockette/-/sockette-2.0.6.tgz", @@ -17387,12 +16780,12 @@ "license": "MIT" }, "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">= 0.6" } }, "node_modules/std-env": { @@ -17744,13 +17137,12 @@ "license": "MIT" }, "node_modules/synckit": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.4.tgz", - "integrity": "sha512-Q/XQKRaJiLiFIBNN+mndW7S/RHxvwzuZS6ZwmRzUBqJBv/5QIKCEwkBC8GBf8EQJKYnaFs0wOZbKTXBPj8L9oQ==", + "version": "0.11.6", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.6.tgz", + "integrity": "sha512-2pR2ubZSV64f/vqm9eLPz/KOvR9Dm+Co/5ChLgeHl0yEDRc6h5hXHoxEQH8Y5Ljycozd3p1k5TTSVdzYGkPvLw==", "license": "MIT", "dependencies": { - "@pkgr/core": "^0.2.3", - "tslib": "^2.8.1" + "@pkgr/core": "^0.2.4" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -17760,9 +17152,9 @@ } }, "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz", + "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==", "license": "MIT", "engines": { "node": ">=6" @@ -17810,13 +17202,13 @@ } }, "node_modules/terser": { - "version": "5.39.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.39.0.tgz", - "integrity": "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==", + "version": "5.39.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.39.2.tgz", + "integrity": "sha512-yEPUmWve+VA78bI71BW70Dh0TuV4HHd+I5SHOAfS1+QBOmvmCiiffgjR8ryyEd3KIfvPGFqoADt8LdQ6XpXIvg==", "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", + "acorn": "^8.14.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, @@ -18177,9 +17569,9 @@ } }, "node_modules/tsconfck": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.5.tgz", - "integrity": "sha512-CLDfGgUp7XPswWnezWwsCRxNmgQjhYq3VXHM0/XIRxhVrKw0M1if9agzryh1QS3nxjCROvV+xWxoJO1YctzzWg==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.6.tgz", + "integrity": "sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==", "license": "MIT", "bin": { "tsconfck": "bin/tsconfck.js" @@ -18248,14 +17640,13 @@ } }, "node_modules/type-is": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", - "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "license": "MIT", "dependencies": { - "content-type": "^1.0.5", - "media-typer": "^1.1.0", - "mime-types": "^3.0.0" + "media-typer": "0.3.0", + "mime-types": "~2.1.24" }, "engines": { "node": ">= 0.6" @@ -18349,18 +17740,18 @@ } }, "node_modules/typescript-auto-import-cache": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/typescript-auto-import-cache/-/typescript-auto-import-cache-0.3.5.tgz", - "integrity": "sha512-fAIveQKsoYj55CozUiBoj4b/7WpN0i4o74wiGY5JVUEoD0XiqDk1tJqTEjgzL2/AizKQrXxyRosSebyDzBZKjw==", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/typescript-auto-import-cache/-/typescript-auto-import-cache-0.3.6.tgz", + "integrity": "sha512-RpuHXrknHdVdK7wv/8ug3Fr0WNsNi5l5aB8MYYuXhq2UH5lnEB1htJ1smhtD5VeCsGr2p8mUDtd83LCQDFVgjQ==", "license": "MIT", "dependencies": { "semver": "^7.3.8" } }, "node_modules/typescript-auto-import-cache/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -18640,27 +18031,6 @@ "node": ">=8.9.0" } }, - "node_modules/url-loader/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/url-loader/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/url-loader/node_modules/schema-utils": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", @@ -18791,9 +18161,9 @@ } }, "node_modules/vite-node": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.1.3.tgz", - "integrity": "sha512-uHV4plJ2IxCl4u1up1FQRrqclylKAogbtBfOTwcuJ28xFi+89PZ57BRh+naIRvH70HPwxy5QHYzg1OrEaC7AbA==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.1.4.tgz", + "integrity": "sha512-6enNwYnpyDo4hEgytbmc6mYWHXDHYEn0D1/rw4Q+tnHUGtKTJsn8T1YkX6Q18wI5LCrS8CTYlBaiCqxOy2kvUA==", "license": "MIT", "dependencies": { "cac": "^6.7.14", @@ -18858,18 +18228,18 @@ } }, "node_modules/vitest": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.1.3.tgz", - "integrity": "sha512-188iM4hAHQ0km23TN/adso1q5hhwKqUpv+Sd6p5sOuh6FhQnRNW3IsiIpvxqahtBabsJ2SLZgmGSpcYK4wQYJw==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.1.4.tgz", + "integrity": "sha512-Ta56rT7uWxCSJXlBtKgIlApJnT6e6IGmTYxYcmxjJ4ujuZDI59GUQgVDObXXJujOmPDBYXHK1qmaGtneu6TNIQ==", "license": "MIT", "dependencies": { - "@vitest/expect": "3.1.3", - "@vitest/mocker": "3.1.3", - "@vitest/pretty-format": "^3.1.3", - "@vitest/runner": "3.1.3", - "@vitest/snapshot": "3.1.3", - "@vitest/spy": "3.1.3", - "@vitest/utils": "3.1.3", + "@vitest/expect": "3.1.4", + "@vitest/mocker": "3.1.4", + "@vitest/pretty-format": "^3.1.4", + "@vitest/runner": "3.1.4", + "@vitest/snapshot": "3.1.4", + "@vitest/spy": "3.1.4", + "@vitest/utils": "3.1.4", "chai": "^5.2.0", "debug": "^4.4.0", "expect-type": "^1.2.1", @@ -18882,7 +18252,7 @@ "tinypool": "^1.0.2", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0", - "vite-node": "3.1.3", + "vite-node": "3.1.4", "why-is-node-running": "^2.3.0" }, "bin": { @@ -18898,8 +18268,8 @@ "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", - "@vitest/browser": "3.1.3", - "@vitest/ui": "3.1.3", + "@vitest/browser": "3.1.4", + "@vitest/ui": "3.1.4", "happy-dom": "*", "jsdom": "*" }, @@ -19090,9 +18460,9 @@ } }, "node_modules/volar-service-typescript/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -19211,16 +18581,16 @@ } }, "node_modules/vue": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.13.tgz", - "integrity": "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==", + "version": "3.5.14", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.14.tgz", + "integrity": "sha512-LbOm50/vZFG6Mhy6KscQYXZMQ0LMCC/y40HDJPPvGFQ+i/lUH+PJHR6C3assgOQiXdl6tAfsXHbXYVBZZu65ew==", "license": "MIT", "dependencies": { - "@vue/compiler-dom": "3.5.13", - "@vue/compiler-sfc": "3.5.13", - "@vue/runtime-dom": "3.5.13", - "@vue/server-renderer": "3.5.13", - "@vue/shared": "3.5.13" + "@vue/compiler-dom": "3.5.14", + "@vue/compiler-sfc": "3.5.14", + "@vue/runtime-dom": "3.5.14", + "@vue/server-renderer": "3.5.14", + "@vue/shared": "3.5.14" }, "peerDependencies": { "typescript": "*" @@ -19272,9 +18642,9 @@ } }, "node_modules/vue-eslint-parser/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "license": "ISC", "peer": true, "bin": { @@ -19482,19 +18852,10 @@ "parse5": "^6.0.1" } }, - "node_modules/vue3-gettext/node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "license": "ISC", - "engines": { - "node": ">= 6" - } - }, "node_modules/vuetify": { - "version": "3.8.4", - "resolved": "https://registry.npmjs.org/vuetify/-/vuetify-3.8.4.tgz", - "integrity": "sha512-hfA1eqA6vhrF5LF8Yfk0uHdNUmh8Uckxn5wREiThO82HW/9Vfreh+IpxPgEtCsAhV33KW+NVamltQCu3HczRKw==", + "version": "3.8.6", + "resolved": "https://registry.npmjs.org/vuetify/-/vuetify-3.8.6.tgz", + "integrity": "sha512-WU7BrS0rKtewaU1e0SjJmUVc23k1Y9L5+aJdSmezAYlxYbHprlFVYeZZvwj1kA9xrPE8MGguvMQgePSxxD/l2w==", "license": "MIT", "engines": { "node": "^12.20 || >=14.13" @@ -19552,9 +18913,9 @@ } }, "node_modules/watchpack": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", - "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz", + "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==", "license": "MIT", "dependencies": { "glob-to-regexp": "^0.4.1", @@ -19574,9 +18935,9 @@ } }, "node_modules/webpack": { - "version": "5.99.8", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.8.tgz", - "integrity": "sha512-lQ3CPiSTpfOnrEGeXDwoq5hIGzSjmwD72GdfVzF7CQAI7t47rJG9eDWvcEkEn3CUQymAElVvDg3YNTlCYj+qUQ==", + "version": "5.99.9", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.9.tgz", + "integrity": "sha512-brOPwM3JnmOa+7kd3NsmOUOwbDAj8FT9xDsG3IW0MgbN9yZV7Oi/s/+MNQ/EcSMqw7qfoRyXPoeEWT8zLVdVGg==", "license": "MIT", "dependencies": { "@types/eslint-scope": "^3.7.7", @@ -20008,9 +19369,9 @@ } }, "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.0.tgz", + "integrity": "sha512-77R0RDmJfj9dyv5p3bM5pOHa+X8/ZkO9c7kpDstigkC4nIDobadsfSGCwB4bKhMVxqAok8tajaoR8rirM7+VFQ==", "license": "MIT", "engines": { "node": ">=10.13.0" @@ -20050,27 +19411,6 @@ "node": ">=4.0" } }, - "node_modules/webpack/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/whatwg-encoding": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", @@ -20083,6 +19423,18 @@ "node": ">=18" } }, + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/whatwg-mimetype": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", @@ -20443,17 +19795,12 @@ "license": "ISC" }, "node_modules/yaml": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.1.tgz", - "integrity": "sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==", + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "license": "ISC", - "optional": true, - "peer": true, - "bin": { - "yaml": "bin.mjs" - }, "engines": { - "node": ">= 14" + "node": ">= 6" } }, "node_modules/yargs": { @@ -20550,24 +19897,6 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } - }, - "node_modules/zod": { - "version": "3.24.4", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.4.tgz", - "integrity": "sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, - "node_modules/zod-to-json-schema": { - "version": "3.24.5", - "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.5.tgz", - "integrity": "sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==", - "license": "ISC", - "peerDependencies": { - "zod": "^3.24.1" - } } } } diff --git a/frontend/package.json b/frontend/package.json index a47fc9b01..509a48bbe 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -39,17 +39,17 @@ "@babel/register": "^7.27.1", "@babel/runtime": "^7.27.1", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "^9.26.0", + "@eslint/js": "^9.27.0", "@lcdp/offline-plugin": "^5.1.1", "@mdi/font": "^7.4.47", "@testing-library/jest-dom": "^6.6.3", "@testing-library/react": "^16.3.0", - "@vitejs/plugin-react": "^4.4.1", - "@vitest/coverage-v8": "^3.1.3", - "@vitest/ui": "^3.1.3", - "@vue/compiler-sfc": "^3.5.13", + "@vitejs/plugin-react": "^4.5.0", + "@vitest/coverage-v8": "^3.1.4", + "@vitest/ui": "^3.1.4", + "@vue/compiler-sfc": "^3.5.14", "@vue/language-server": "^2.2.10", - "@vvo/tzdb": "^6.161.0", + "@vvo/tzdb": "^6.163.0", "axios": "^1.9.0", "axios-mock-adapter": "^2.1.0", "babel-loader": "^10.0.0", @@ -64,10 +64,10 @@ "css-loader": "^7.1.2", "cssnano": "^7.0.7", "easygettext": "^2.17.0", - "eslint": "^9.26.0", - "eslint-config-prettier": "^10.1.3", + "eslint": "^9.27.0", + "eslint-config-prettier": "^10.1.5", "eslint-formatter-pretty": "^6.0.1", - "eslint-plugin-html": "^8.1.2", + "eslint-plugin-html": "^8.1.3", "eslint-plugin-import": "^2.31.0", "eslint-plugin-node": "^11.1.0", "eslint-plugin-prettier": "^5.4.0", @@ -79,7 +79,7 @@ "file-loader": "^6.2.0", "file-saver": "^2.0.5", "floating-vue": "^5.2.2", - "globals": "^16.0.1", + "globals": "^16.1.0", "hls.js": "^1.6.2", "i": "^0.3.7", "jsdom": "^26.1.0", @@ -109,8 +109,8 @@ "pubsub-js": "^1.9.5", "regenerator-runtime": "^0.14.1", "resolve-url-loader": "^5.0.0", - "sanitize-html": "^2.16.0", - "sass": "^1.87.0", + "sanitize-html": "^2.17.0", + "sass": "^1.89.0", "sass-loader": "^16.0.5", "server": "^1.0.41", "sockette": "^2.0.6", @@ -120,8 +120,8 @@ "url-loader": "^4.1.1", "util": "^0.12.5", "vite-tsconfig-paths": "^5.1.4", - "vitest": "^3.1.3", - "vue": "^3.5.13", + "vitest": "^3.1.4", + "vue": "^3.5.14", "vue-3-sanitize": "^0.1.4", "vue-loader": "^17.4.2", "vue-loader-plugin": "^1.3.0", @@ -130,8 +130,8 @@ "vue-sanitize-directive": "^0.2.1", "vue-style-loader": "^4.1.3", "vue3-gettext": "^2.4.0", - "vuetify": "^3.8.4", - "webpack": "^5.99.8", + "vuetify": "^3.8.6", + "webpack": "^5.99.9", "webpack-bundle-analyzer": "^4.10.2", "webpack-cli": "^6.0.1", "webpack-hot-middleware": "^2.26.1", From 3bcc415c06372759553a5f34ad747e4971e24b33 Mon Sep 17 00:00:00 2001 From: Michael Mayer Date: Sun, 25 May 2025 01:47:02 +0200 Subject: [PATCH 009/185] Frontend: Update package-lock.json Signed-off-by: Michael Mayer --- frontend/package-lock.json | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 9d449b4d1..b6dc748d5 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -18852,6 +18852,15 @@ "parse5": "^6.0.1" } }, + "node_modules/vue3-gettext/node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, "node_modules/vuetify": { "version": "3.8.6", "resolved": "https://registry.npmjs.org/vuetify/-/vuetify-3.8.6.tgz", @@ -19795,12 +19804,17 @@ "license": "ISC" }, "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz", + "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==", "license": "ISC", + "optional": true, + "peer": true, + "bin": { + "yaml": "bin.mjs" + }, "engines": { - "node": ">= 6" + "node": ">= 14.6" } }, "node_modules/yargs": { From ae530fec1b58af2c3ce78ebd5c652616396bb4a8 Mon Sep 17 00:00:00 2001 From: Michael Mayer Date: Sun, 25 May 2025 07:03:35 +0200 Subject: [PATCH 010/185] CLI: Force overwrite of existing video and metadata downloads #4982 Signed-off-by: Michael Mayer --- internal/commands/download.go | 16 +++++++++--- internal/photoprism/ytdl/options.go | 39 +++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 3 deletions(-) diff --git a/internal/commands/download.go b/internal/commands/download.go index 1451041ea..1306c2384 100644 --- a/internal/commands/download.go +++ b/internal/commands/download.go @@ -108,7 +108,13 @@ func downloadAction(ctx *cli.Context) error { mediaType = media.Video log.Infof("downloading %s from %s", mediaType, clean.Log(sourceUrl.String())) - result, err := ytdl.New(context.Background(), sourceUrl.String(), ytdl.Options{}) + result, err := ytdl.New(context.Background(), sourceUrl.String(), ytdl.Options{ + MergeOutputFormat: "mp4", + RemuxVideo: "mp4", + SortingFormat: "lang,quality,res,fps,hdr:10+,vcodec:h264>av01>h265>vp9.2>vp9>h263,acodec:m4a>mp4a>aac>mp3>mp3>ac3>dts,channels,size,br,asr,proto,ext,hasaud,source,id", + PlaylistStart: 1, + }) + if err != nil { return err } @@ -122,11 +128,15 @@ func downloadAction(ctx *cli.Context) error { // Compose download file path. downloadFilePath := filepath.Join(downloadPath, downloadFile) - // Download the first video and embed its metadata. + // Download the first video and embed its metadata, + // see https://github.com/yt-dlp/yt-dlp?tab=readme-ov-file#format-selection-examples. downloadResult, err := result.DownloadWithOptions(context.Background(), ytdl.DownloadOptions{ - Filter: "best", + // Filter: "bv*+ba/b", DownloadAudioOnly: false, EmbedMetadata: true, + EmbedSubs: false, + ForceOverwrites: true, + DisableCaching: false, PlaylistIndex: 1, }) diff --git a/internal/photoprism/ytdl/options.go b/internal/photoprism/ytdl/options.go index 434bb7b95..c409436ff 100644 --- a/internal/photoprism/ytdl/options.go +++ b/internal/photoprism/ytdl/options.go @@ -33,6 +33,9 @@ type Options struct { StderrFn func(cmd *exec.Cmd) io.Writer // if not nil, function to get Writer for stderr HttpClient *http.Client // Client for download thumbnail and subtitles (nil use http.DefaultClient) MergeOutputFormat string // --merge-output-format + RemuxVideo string // --remux-video + RecodeVideo string // --recode-video + Fixup string // --fixup SortingFormat string // --format-sort // Set to true if you don't want to use the result.Info structure after the goutubedl.New() call, @@ -45,6 +48,9 @@ type DownloadOptions struct { AudioFormats string // --audio-formats Download audio using formats (best, aac, alac, flac, m4a, mp3, opus, vorbis, wav). DownloadAudioOnly bool // -x Download audio only from video. EmbedMetadata bool // --embed-metadata embeds metadata to the video file. + EmbedSubs bool // --embed-subs embeds subtitles in the video file + ForceOverwrites bool // --force-overwrites replaces existing files + DisableCaching bool // --no-cache-dir PlaylistIndex int // --playlist-items index of the file to download if there is more than one video } @@ -149,6 +155,21 @@ func (result Result) DownloadWithOptions( cmd.Args = append(cmd.Args, "--embed-metadata") } + // If requested, embed subtitles in the video file. + if options.EmbedSubs { + cmd.Args = append(cmd.Args, "--embed-subs") + } + + // If requested, overwrite existing video and metadata files. + if options.ForceOverwrites { + cmd.Args = append(cmd.Args, "--force-overwrites") + } + + // If requested, disable filesystem caching. + if options.DisableCaching { + cmd.Args = append(cmd.Args, "--no-cache-dir") + } + if options.AudioFormats != "" { cmd.Args = append(cmd.Args, "--audio-format", options.AudioFormats) } @@ -175,6 +196,24 @@ func (result Result) DownloadWithOptions( ) } + if result.Options.RemuxVideo != "" { + cmd.Args = append(cmd.Args, + "--remux-video", result.Options.RemuxVideo, + ) + } + + if result.Options.RecodeVideo != "" { + cmd.Args = append(cmd.Args, + "--recode-video", result.Options.RecodeVideo, + ) + } + + if result.Options.Fixup != "" { + cmd.Args = append(cmd.Args, + "--fixup", result.Options.Fixup, + ) + } + if result.Options.SortingFormat != "" { cmd.Args = append(cmd.Args, "--format-sort", result.Options.SortingFormat, From cf9258949a3e20b41c28224d90b8133c69dc3394 Mon Sep 17 00:00:00 2001 From: graciousgey Date: Sun, 25 May 2025 11:22:50 +0200 Subject: [PATCH 011/185] Tests: Adapt acceptance tests to be more stable --- frontend/tests/acceptance/acceptance-public/shortcuts.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/tests/acceptance/acceptance-public/shortcuts.js b/frontend/tests/acceptance/acceptance-public/shortcuts.js index c396ce2f0..3e18545ea 100644 --- a/frontend/tests/acceptance/acceptance-public/shortcuts.js +++ b/frontend/tests/acceptance/acceptance-public/shortcuts.js @@ -155,7 +155,7 @@ test.meta("testID", "shortcuts-004").meta({ type: "short", mode: "public" })( // Edit Test await triggerKeyPress("e", "KeyE", 69, true, false); await t.expect(photoEdit.dialog.visible).ok(); - await t.pressKey("esc"); + await t.click(photoEdit.dialogClose); await photoviewer.openPhotoViewer("uid", FirstPhotoUid); await t.wait(500); // Wait for lightbox again From eda33e2032d2aa3b2cddcdeaae6a65e46f983a42 Mon Sep 17 00:00:00 2001 From: Weblate Date: Mon, 26 May 2025 11:40:21 +0200 Subject: [PATCH 012/185] Weblate: Update frontend translations --- frontend/src/locales/hu.po | 16 ++++++++-------- frontend/src/locales/zh.po | 16 ++++++++-------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/frontend/src/locales/hu.po b/frontend/src/locales/hu.po index 61e7d1dd8..99e0b88e7 100644 --- a/frontend/src/locales/hu.po +++ b/frontend/src/locales/hu.po @@ -3,15 +3,15 @@ msgstr "" "Project-Id-Version: photoprism\n" "Report-Msgid-Bugs-To: ci@photoprism.app\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2025-04-04 08:03+0000\n" -"Last-Translator: DeepL \n" +"PO-Revision-Date: 2025-05-26 09:40+0000\n" +"Last-Translator: \"vnandor@gmail.com\" \n" "Language-Team: Hungarian \n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.10.4\n" +"X-Generator: Weblate 5.11.4\n" #: src/locales.js:268 msgid "{0} appended action" @@ -137,11 +137,11 @@ msgstr "Fiók törölve" #: src/page/admin/users.vue:335 msgid "Account restored" -msgstr "Számla visszaállítva" +msgstr "Fiók visszaállítva" #: src/page/admin.vue:33 msgid "Accounts" -msgstr "Számlák" +msgstr "Fiókok" #: src/component/photo/edit/info.vue:391 msgid "Accuracy" @@ -2603,7 +2603,7 @@ msgstr "Mentés" #: src/component/photo/edit/info.vue:319 msgid "Scan" -msgstr "Felderítés" +msgstr "Szkennelt" #: src/component/settings/passcode.vue:179 msgid "Scan the QR code with your authenticator app or use the setup key shown below and then enter the generated verification code:" @@ -2832,7 +2832,7 @@ msgstr "Növekvő sorrendben." #: src/locales.js:220 msgid "Sorted descending." -msgstr "Lefelé rendezve." +msgstr "Csökkenő sorrendben." #: src/component/photo/edit/labels.vue:21 #: src/component/photo/edit/labels.vue:106 @@ -2887,7 +2887,7 @@ msgstr "Utcák" #: src/component/photo/edit/details.vue:494 #: src/component/photo/edit/labels.vue:44 msgid "Subject" -msgstr "Tantárgy" +msgstr "Tárgy" #: src/page/about/feedback.vue:162 src/page/about/feedback.vue:163 msgid "Submit" diff --git a/frontend/src/locales/zh.po b/frontend/src/locales/zh.po index bed373b6a..edf8adeef 100644 --- a/frontend/src/locales/zh.po +++ b/frontend/src/locales/zh.po @@ -3,15 +3,15 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: ci@photoprism.app\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2025-04-04 08:03+0000\n" -"Last-Translator: DeepL \n" +"PO-Revision-Date: 2025-05-26 09:40+0000\n" +"Last-Translator: equalchan \n" "Language-Team: Chinese (Simplified) \n" "Language: zh\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 5.10.4\n" +"X-Generator: Weblate 5.11.4\n" "Generated-By: easygettext\n" #: src/locales.js:268 @@ -56,7 +56,7 @@ msgstr "已找到 %{n} 个文件夹" #: src/component/navigation.vue:1676 msgid "%{n} GB of %{q} GB used" -msgstr "%{n}%{q}的 GB使用的 GB" +msgstr "已使用%{n}GB,共%{q}GB" #: src/page/labels.vue:528 msgid "%{n} labels found" @@ -207,7 +207,7 @@ msgstr "添加链接" #: src/component/photo/edit/people.vue:162 src/page/people/new.vue:57 #: src/page/people/new.vue:244 msgid "Add person?" -msgstr "加人?" +msgstr "新增人物?" #: src/page/albums.vue:420 msgid "Add pictures from search results by selecting them." @@ -782,7 +782,7 @@ msgstr "继续" #: src/page/auth/login.vue:314 msgid "Continue with %{provider}" -msgstr "继续 %{provider}" +msgstr "继续 %{provider}" #: src/options/admin.js:18 src/options/auth.js:9 msgid "Contributor" @@ -2110,7 +2110,7 @@ msgstr "离线" #: src/options/admin.js:39 src/options/auth.js:28 msgid "OIDC" -msgstr "奥伊德数据中心" +msgstr "OIDC" #: src/locales.js:209 msgid "OK" @@ -2547,7 +2547,7 @@ msgstr "请求失败 - 你是否离线?" #: src/common/api.js:74 msgid "Request failed - invalid response" -msgstr "请求失败——无效的响应" +msgstr "请求失败 - 无效的响应" #: src/page/settings/content.vue:61 msgid "Require non-photographic and low-quality images to be reviewed before they appear in search results." From f98f2bcc8ed54c41222ee0ff54faf28645db48d1 Mon Sep 17 00:00:00 2001 From: graciousgrey Date: Mon, 26 May 2025 11:58:17 +0200 Subject: [PATCH 013/185] Translations: Update hu.json and zh.json --- frontend/src/locales/json/hu.json | 2 +- frontend/src/locales/json/zh.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/locales/json/hu.json b/frontend/src/locales/json/hu.json index 1cf3607b4..dbcf20ad6 100644 --- a/frontend/src/locales/json/hu.json +++ b/frontend/src/locales/json/hu.json @@ -1 +1 @@ -{"hu":{"{0} appended action":"{0} appended action","{0} files":"{0} fájlok","{0} files ({1} in total)":"{0} fájlok ({1} összesen)","{0} more":"{0} még","{0} prepended action":"{0} prepended action","{0} selected":"{0} kiválasztott","{0}-{1} of {2}":"{0}-{1} of {2}","%{n} albums found":"%{n} album találat","%{n} files uploaded":"%{n} fájl feltöltve","%{n} folders found":"%{n} mappa találat","%{n} GB of %{q} GB used":"%{n} GB %{q} GB használt","%{n} labels found":"%{n} címke találat","%{n} people found":"%{n} ember találat","%{n} pictures found":"%{n} kép találat","%{s} is too long":"%{s} túl hosszú","%{s} is too short":"%{s} túl rövid","1 hour":"1 óra","12 hours":"12 óra","2-Factor Authentication":"2-faktoros hitelesítés","2FA":"2FA","4 hours":"4 óra","A click will copy it to your clipboard.":"A kattintás egy másolatot helyez a vágólapra.","A new version of %{s} is available:":"A %{s} új verziója elérhető:","About":"Rólunk","Access Token":"Hozzáférési jelszó","Account":"Fiók","Account created":"Fiók létrehozva","Account deleted":"Fiók törölve","Account restored":"Számla visszaállítva","Accounts":"Számlák","Accuracy":"Pontosság","Action":"Művelet","Actions":"Műveletek","Activate":"Aktiválja a címet.","Activate to remove sorting.":"Aktiválja a szortírozás megszüntetéséhez.","Activate to sort ascending.":"Aktiválja a növekvő rendezéshez.","Activate to sort descending.":"Aktiválja a csökkenő rendezéshez.","Activation Code":"Aktiválási kód","Add":"Add","Add %{s}?":"Add %{s}?","Add Account":"Fiók hozzáadása","Add Album":"Album hozzáadása","Add files to your library via Web Upload.":"Fájlok hozzáadása a könytárhoz Webes feltöltés segítéségével.","Add Link":"Hivatkozás hozzáadása","Add person?":"Személyt hozzáadni?","Add pictures from search results by selecting them.":"Képek hozzáadása a találok közül kiválasztás segítéségével.","Add to album":"Hozzáadás albumhoz","Added":"Hozzáadva","Admin":"Admin","Advanced":"Haladó","After 1 day":"Egy nap után","After 3 days":"Három nap után","After 7 days":"Hét nap után","After entering your password for confirmation, you can set up two-factor authentication with a compatible authenticator app or device:":"Miután megerősítésképpen megadta jelszavát, beállíthat kétfaktoros hitelesítést egy kompatibilis hitelesítő alkalmazással vagy eszközzel:","After one month":"Egy hónap után","After one year":"Egy év után","After selecting pictures from search results, you can add them to an album using the context menu.":"A találokból kiválasztott képeket, tetszőleges albumhoz adni a menü segítségével lehet.","After two months":"Két hónap után","After two weeks":"Két hét után","Album":"Album","Album Backups":"Album biztonsági mentések","Album created":"Album létrehozva","Albums":"Albumok","Albums deleted":"Albumok törölve","All":"Minden","All %{n} albums loaded":"Összesen %{n} album betöltve","All %{n} labels loaded":"Összesen %{n} címke betöltve","All %{n} people loaded":"Összesen %{n} ember betöltve","All Cameras":"Összes kamera","All Categories":"Összes kategória","All Colors":"Összes szín","All Countries":"Összes ország","All fields are required":"Minden mező kitöltése kötelező","All files from import folder":"Összes fájlt az import könyvtárból","All Lenses":"Összes lencse","All Months":"Összes hónap","All originals":"Összes eredeti","All Years":"Összes év","Alternatively, you can upload files directly to WebDAV servers like Nextcloud.":"Alternatívaként a fájlok feltölthetők WebDAV szerverekre is, mint például Nextcloud.","Altitude":"Magasság","Altitude (m)":"Magasság (m)","AM":"AM","Animated":"Mozgó","Animation":"Animáció","Any private photos and videos remain private and won't be shared.":"Bármilyen privát fotó és videó privát marad és nem kerül megosztásra.","API Key":"API Kulcs","Application":"Alkalmazás","Apply":"Alkalmaz","Approve":"Jóváhagy","Apps and Devices":"Alkalmazások és eszközök","Archive":"Archívum","Archived":"Archíválva","Are you sure you want to archive the selection?":"Biztos benne, hogy archíválja a kiválasztott fájlokat?","Are you sure you want to delete these albums?":"Biztos benne, hogy törli a kiválasztott fájlokat?","Are you sure you want to delete these labels?":"Biztos benne, hogy törli a kiválasztott címkéket?","Are you sure you want to delete this account?":"Biztos benne, hogy törli ezt a felhasználói fiókot?","Are you sure you want to permanently delete these pictures?":"Biztos benne, hogy véglegesen törli a kiválasztott képeket?","Are you sure you want to permanently delete this file?":"Biztos benne, hogy véglegesen törli a kiválasztott fájlokat?","Are you sure?":"Biztos benne?","Artist":"Művész","Aspect Ratio":"Képarány","Audio":"Audio","Authentication":"Hitelesítés","Auto":"Auto","Back":"Vissza","Back to top":"Vissza a tetejére","Backup":"Biztonsági mentés","Badge":"Jelvény","Base Path":"Bázis útvonal","Become a member today, support our mission and enjoy our member benefits!":"Legyen tag még ma, támogassa küldetésünket és élvezze tagi előnyeinket!","Being 100% self-funded and independent, we can promise you that we will never sell your data and that we will always be transparent about our software and services.":"Mivel 100%-ban önfinanszírozók és függetlenek vagyunk, megígérhetjük, hogy soha nem adjuk el az adatait, és mindig átláthatóak leszünk a szoftverünkkel és szolgáltatásainkkal kapcsolatban.","Bio":"Bio","Birth Date":"Születési dátum","Black":"Fekete","Blackman: Lanczos Modification, Less Ringing Artifacts":"Blackman: Lanczos-módosítás, kevesebb csengő műtárgy","Blue":"Kék","Brown":"Barna","Browse":"Böngésszen a oldalon.","Browse and edit image classification labels.":"Böngéssze és szerkessze a képbesorolási címkéket.","Browse and share your pictures organized into monthly albums.":"Böngésszen és ossza meg képeit havi albumokba rendezve.","Browse Files":"Fájlok böngészése","Browse indexed files and folders in Library.":"Böngésszen az indexelt fájlok és mappák között a Könyvtárban.","Bug Report":"Hibajelentés","Busy, please wait…":"Elfoglalt, kérem, várjon…","By using the software and services we provide, you agree to our terms of service, privacy policy, and code of conduct.":"Az általunk biztosított szoftver és szolgáltatások használatával Ön elfogadja szolgáltatási feltételeinket, adatvédelmi szabályzatunkat és magatartási kódexünket.","Calendar":"Naptár","Camera":"Kamera","Camera Serial":"Kamera sorozat","Can't access your authenticator app or device?":"Nem tud hozzáférni az autentikátor alkalmazásához vagy eszközéhez?","Can't load more, limit reached":"Nem tölthet be többet, elérte a korlátot","Can't select more items":"Nem lehet több elemet kiválasztani","Cancel":"Mégsem","Caption":"Felirat","Cards":"Kártyák","Carousel slide {0} of {1}":"{0} körhinta {0} a {1}-től","Category":"Kategória","Change Avatar":"Profilkép változtatása","Change Password":"Új jelszó","Change personal profile and security settings.":"Személyes profil és biztonsági beállítások módosítása.","Change photo titles, locations, and other metadata.":"Módosíthatja a fotók címét, helyét és egyéb metaadatait.","Change private flag":"Privát fotóként jelölés","Changes could not be saved":"Módosításokat nem sikerült menteni","Changes successfully saved":"Módosítások sikeresen mentve","Changes to the advanced settings require a restart to take effect.":"A speciális beállítások módosításához újraindításra van szükség, hogy a módosítások hatályba lépjenek.","Checked":"Ellenőrizve","Chroma":"Chroma","Cleaning index and cache":"Index és gyorsítótár tisztítása","Cleanup":"Tisztítás","Clear {0}":"Clear {0}","Client":"Ügyfél","Client Credentials":"Ügyfél hitelesítő adatok","Close":"Bezárás","Codec":"Codec","Color":"Szín","Color Profile":"Színprofil","Colors":"Színek","Compare Editions":"Edíciók összehasonlítása","Complete Rescan":"Teljes újraolvasás","Confidence":"Pontosság","Confirm":"megerősít","Connect":"Csatlakozás","Connect via WebDAV":"Csatlakozás WebDAV-on keresztül","Connected":"Csatlakozva","Contact Details":"Elérhetőségek","Contact Us":"Lépjen kapcsolatba velünk","Contains %{n} pictures.":"%{n} képet tartalmaz.","Contains one picture.":"Egy képet tartalmaz.","Content":"Tartalom","Continue":"Folytatni","Continue with %{provider}":"Folytassa a %{provider}","Contributor":"Hozzájáruló","Converting":"Konvertálás","Copied to clipboard":"Vágólapra másolva","Copy":"Másolat","Copyright":"Szerzői jog","Couldn't find anything.":"Nem találtunk semmit.","Country":"Ország","Create Account":"Fiók létrehozása","Create album":"Album létrehozása","Create regular backups based on the configured schedule.":"Index biztonsági mentések létrehozása a konfigurált ütemezés alapján.","Create YAML files to back up album metadata.":"YAML fájlok létrehozása az album metaadatok biztonsági mentéséhez.","Create YAML sidecar files to back up picture metadata.":"YAML oldalkocsis fájlok létrehozása a képek metaadatainak mentéséhez.","Created":"Létrehozva","Creating thumbnails for":"Miniatűrök létrehozása a következőhöz","Cubic: Moderate Quality, Good Performance":"Köbös: Közepes minőség, jó teljesítmény","Current Password":"Jelenlegi jelszó","Custom":"Custom","Cyan":"Cián","Daily":"Napi","Database Backups":"Adatbázis biztonsági mentések","Day":"Nap","Deactivate":"Deaktiválás","Debug Logs":"Hibakeresési naplók","Default":"Alapértelmezett","Default Folder":"Alapértelmezett mappa","Delete":"Törlés","Delete All":"Mindent törölni","Delete all?":"Mindent törölni?","Delete orphaned index entries, sidecar files and thumbnails.":"Törli az elárvult indexbejegyzéseket, oldalkocsis fájlokat és miniatűröket.","Description":"Leírás","Detailed instructions can be found in our User Guide.":"A részletes utasításokat a Felhasználói kézikönyvben találja.","Details":"Részletek","Dimensions":"Méretek","Disable Backups":"Biztonsági mentések letiltása","Disable Darktable":"A Darktable letiltása","Disable ExifTool":"Az ExifTool letiltása","Disable features that require write permission for the originals folder.":"Az eredeti mappa írási engedélyét igénylő funkciók letiltása.","Disable FFmpeg":"Az FFmpeg letiltása","Disable ImageMagick":"ImageMagick letiltása","Disable interactive world maps and reverse geocoding.":"Az interaktív világtérképek és a fordított geokódolás letiltása.","Disable Places":"Helyek letiltása","Disable RawTherapee":"A RawTherapee letiltása","Disable TensorFlow":"A TensorFlow letiltása","Disable Vectors":"Vektorok letiltása","Disable WebDAV":"A WebDAV letiltása","Disables vector graphics support.":"Letiltja a vektorgrafika támogatását.","Disables video transcoding and thumbnail extraction.":"Letiltja a videó átkódolását és a miniatűrök kinyerését.","Discover":"Felfedez","Dismiss":"Elutasíthatod","Display Name":"Megjelenített név","Display picture captions in search results.":"Képaláírások megjelenítése a keresési eredményekben.","Display picture titles in search results.":"Képcímek megjelenítése a keresési eredményekben.","Document":"Dokumentum","Documents":"Dokumentumok","Don't use Darktable to convert RAW images.":"Ne használja a Darktable-t RAW képek konvertálására.","Don't use ImageMagick to convert images.":"Ne használd az ImageMagick programot képek konvertálására.","Don't use RawTherapee to convert RAW images.":"Ne használja a RawTherapee-t RAW képek konvertálására.","Done":"Kész","Done.":"Kész.","Download":"Letöltés","Download only original media files, without any automatically generated files.":"Csak eredeti médiafájlok letöltése, automatikusan generált fájlok nélkül.","Download remote files":"Távoli fájlok letöltése","Download single files and zip archives.":"Egyedi fájlok és zip-archívumok letöltése.","Downloading…":"Letöltés…","Downscaling Filter":"Lekicsinyítési szűrő","Drag and drop files here":"Húzza ide a fájlokat","Due to the high volume of emails we receive, our team may be unable to get back to you immediately.":"A beérkező e-mailek nagy száma miatt előfordulhat, hogy csapatunk nem tud azonnal válaszolni Önnek.","Duplicates will be skipped and only appear once.":"A másolatok kimaradnak, és csak egyszer jelennek meg.","Duration":"Időtartam","Dynamic Previews":"Dinamikus előnézetek","Dynamic Size Limit: %{n}px":"Dinamikus méretkorlát: %{n}px","E-Mail":"Email","Edit":"Szerkesztés","Edit %{s}":"%{s} szerkesztése","Edit Account":"Fiók szerkesztése","Edit Photo":"Fénykép szerkesztése","Edited":"Szerkesztette","Email":"E-mail","Enable debug mode to display additional logs and help with troubleshooting.":"A hibakeresési mód engedélyezése további naplók megjelenítéséhez és a hibaelhárítás segítéséhez.","Enable new features that may be incomplete or unstable.":"Engedélyezze az új funkciókat, amelyek hiányosak vagy instabilak lehetnek.","Enables RAW converter presets. May reduce performance.":"Engedélyezi a RAW konverter előbeállításait. Csökkentheti a teljesítményt.","Enabling two-factor authentication means that you will need a randomly generated verification code to log in, so even if someone gains access to your password, they will not be able to access your account.":"A kéttényezős hitelesítés engedélyezése azt jelenti, hogy a bejelentkezéshez véletlenszerűen generált ellenőrző kódra lesz szüksége, így még ha valaki hozzáfér a jelszavához, nem férhet hozzá fiókjához.","Enter date":"Adja meg a dátumot","Enter dates":"Adja meg a dátumokat","Enter the code generated by your authenticator app:":"Írja be a hitelesítési alkalmazás által generált kódot:","Enter verification code":"Adja meg a megerősítő kódot","Enter your password to confirm the action and continue:":"Adja meg jelszavát a művelet megerősítéséhez, és folytassa:","Error":"Hiba","Errors":"Hibák","Estimate":"Becslés","Estimate Locations":"Becsült helyszínek","Estimate the approximate location of pictures without GPS coordinates.":"A képek hozzávetőleges helyének becslése GPS-koordináták nélkül.","Every two days":"Kétnaponta","Exclude content marked as private from search results, shared albums, labels, and places.":"A privátként megjelölt tartalmak kizárása a keresési eredményekből, a megosztott albumokból, címkékből és helyekről.","Exclude hidden":"Rejtett kizárás","ExifTool is required for full support of XMP metadata, videos and Live Photos.":"Az ExifTool segítségével történő metaadat-kivonatolás szükséges a teljes videó-, élőfotó- és XMP-támogatáshoz.","Experimental Features":"Kísérleti jellemzők","Expires":"Lejár","Exposure":"Kitettség","Extract still images and generate thumbnails while indexing.":"Állóképek kivonása és miniatűrök készítése indexelés közben.","F Number":"F Szám","Face":"Arc","Faces":"Arcok","Failed removing link":"Nem sikerült eltávolítani a linket","Failed to connect account.":"Nem sikerült csatlakoztatni a fiókot.","Failed updating link":"Nem sikerült frissíteni a linket","Family Name":"Családnév","Fast":"Gyors","Favorite":"Kedvenc","Favorites":"Kedvencek","Feature Request":"Funkciókérés","Feedback":"Visszacsatolás","Female":"Női","File":"Fájl","File Browser":"Fájl böngésző","File Conversion":"Fájl átalakítás","File Name":"Fájlnév","File Size":"Fájl méret","Filename":"Fájlnév","Files":"Fájlok","Files with sequential names like 'IMG_1234 (2)' and 'IMG_1234 (3)' belong to the same picture.":"Az olyan szekvenciális nevű fájlok, mint az „IMG_1234 (2)” és „IMG_1234 (3)”, ugyanahhoz a képhez tartoznak.","First page":"Első oldal","Focal Length":"Gyújtótávolság","Folder":"Mappa","Folder contains %{n} files":"A mappa %{n} fájlt tartalmaz","Folder is empty":"A mappa üres","Folders":"Mappák","Forgot password?":"Elfelejtett jelszó?","FPS":"FPS","Frames":"Keretek","Full Access":"Teljes hozzáférés","Fullscreen":"Teljes képernyő","General":"Általános","Generate":"generál","Generate albums of special moments, journeys, and places.":"Automatikusan albumokat hoz létre különleges pillanatokról, utazásokról és helyekről.","Generate Previews":"Előnézetek generálása","Generated":"Generált","Get Started":"Kezdje el","Given Name":"Keresztnév","Global Options":"Globális lehetőségek","Go to page {0}":"Menj az oldalra {0}","Gold":"Arany","Green":"Zöld","Grey":"Szürke","Guest":"Vendég","Hash":"Hash","Help":"Segítség","Help & Support":"Segítség & Támogatás","Hidden":"Rejtett","Hidden Files":"Rejtett fájlok","Hide":"Elrejt","Hide photos that have been moved to archive.":"Az archívumba áthelyezett fotók elrejtése.","High":"Magas","High Dynamic Range (HDR)":"Nagy dinamikatartomány (HDR)","How can we help?":"Hogyan segíthetünk?","Hybrid":"Hibrid","If you lose access to your authenticator app or device, you can use your recovery code to regain access to your account.":"Ha elveszíti hozzáférését hitelesítő alkalmazásához vagy eszközéhez, a helyreállítási kód segítségével visszaszerezheti a hozzáférést fiókjához.","Image":"Kép","Image Quality":"Képminőség","Import":"Importálás","Import failed":"Az importálás sikertelen","Imported files will be sorted by date and given a unique name to avoid duplicates.":"Az importált fájlok dátum szerint vannak rendezve, és egyedi nevet kapnak a párhuzamosságok elkerülése érdekében.","Imported files will be sorted by date and given a unique name.":"Az importált fájlok dátum szerint vannak rendezve, és egyedi nevet kapnak.","Importing %{s}…":"%{s} importálása…","Importing files to originals…":"Fájlok importálása eredetibe…","in":"-ban/-ben","In case pictures you expect are missing, please rescan your library and wait until indexing has been completed.":"Ha hiányoznak a várt képek, kérjük, ellenőrizze újra a könyvtárát, és várja meg, amíg az indexelés befejeződik.","Include RAW image files when downloading stacks and archives.":"RAW képfájlok felvétele a verem és az archívumok letöltésekor.","Include sidecar files when downloading stacks and archives.":"Oldalkocsis fájlok bevonása a verem és az archívumok letöltésekor.","Increase storage size or delete files to continue.":"A folytatáshoz növelje a tároló méretét vagy törölje a fájlokat.","Index":"Index","Index and import files through the user interface.":"Fájlok indexelése és importálása a felhasználói felületen keresztül.","Indexing":"Indexelés","Indexing failed":"Az indexelés nem sikerült","Indexing media and sidecar files…":"Média- és oldalsó fájlok indexelése…","Information":"Információ","Instance ID":"Példányazonosító","Insufficient storage.":"Elégtelen tárolás.","Interval":"Intervallum","Invalid":"Érvénytelen","Invalid address":"Érvénytelen cím","Invalid country":"Érvénytelen ország","Invalid date":"Érvénytelen dátum","Invalid parameters":"Érvénytelen paraméterek","Invalid photo selected":"Érvénytelen fénykép kiválasztva","Invalid time":"Érvénytelen idő","Invalid URL":"Érvénytelen URL","It is a one-time use code that will disable 2FA for your account when you use it.":"Ez egy egyszer használatos kód, amely letiltja a 2FA-t a fiókjában, amikor azt használja.","Item":"Tétel","Items per page:":"Tételek oldalanként:","JPEG Quality: %{n}":"JPEG minőség: %{n}","JPEG Size Limit: %{n}px":"JPEG méretkorlát: %{n}px","JPEGs and thumbnails are automatically rendered as needed.":"A JPEG-fájlok és miniatűrök szükség szerint automatikusan megjelennek.","Keywords":"Kulcsszavak","Label":"Címke","Labels":"Címkék","Labels deleted":"Címkék törölve","Lanczos: Detail Preservation, Minimal Artifacts":"Lanczos: Részletmegőrzés, minimális műtárgyak","Language":"Nyelv","Last Active":"Utolsó aktív","Last Login":"Utolsó bejelentkezés","Last page":"Utolsó oldal","Last Sync":"Utolsó szinkronizálás","Last Used":"Utoljára használt","Latitude":"Szélességi kör","LDAP/AD":"LDAP/AD","Learn more":"Tudjon meg többet","Learn More":"Tudjon meg többet","Legal Information":"Jogi információk","Lens":"Lencse","Library":"Könyvtár","License":"Engedély","Like":"Kedvelés","Lime":"Mész","Limit reached, showing first %{n} files":"Elérte a korlátot, az első %{n} fájl látható","Linear: Very Smooth, Best Performance":"Lineáris: Nagyon sima, a legjobb teljesítmény","Link":"Link","List":"Lista","List View":"Lista nézet","Live":"Élő","Live Photos":"Fényképek","Load more":"Töltsön többet","Loading items...":"Tételek betöltése...","Loading...":"Betöltés...","Local":"Helyi","Local Time":"Helyi idő","Location":"Elhelyezkedés","Log messages appear here whenever PhotoPrism comes across broken files, or there are other potential issues.":"Naplóüzenetek jelennek meg itt, ha a PhotoPrism hibás fájlokat talál, vagy más lehetséges problémák merülnek fel.","Login":"Belépés","Logout":"Kijelentkezés","Logs":"Naplók","Longitude":"Hosszúság","Low":"Alacsony","Magenta":"Bíborvörös","Main Color":"Fő szín","Male":"Férfi","Manage Account":"Számla kezelése","Manual":"Kézi","Manual Upload":"Kézi feltöltés","Maps":"Térképek","Marker":"Jelző","Maximum number of accounts has been reached.":"A számlák maximális száma elérte a határt.","Media":"Média","Medium":"Közepes","Membership":"Tagság","Merge %{a} with %{b}?":"Összevonja %{a}-t a %{b}-val?","Message":"Üzenet","Message sent":"Üzenet elküldve","Metadata":"Metaadatok","Metrics":"Metrikák","Minimize":"Minimalizálja","Missing":"Hiányzó","Missing or invalid configuration":"Hiányzó vagy érvénytelen konfiguráció","Moments":"Pillanatok","Monochrome":"Monokróm","Month":"Hónap","More options":"További lehetőségek","Mosaic":"Mozaik","Most Relevant":"Legrelevánsabb","Move Files":"Fájlok áthelyezése","Must have at least %{n} characters.":"Legalább %{n} karakteresnek kell lennie.","Mute":"Mute","Name":"Név","Name too long":"A név túl hosszú","Never":"Soha","New":"Új","New Password":"Új jelszó","Newest First":"Először a legújabb","Next":"Következő","Next page":"Következő oldal","Next visual":"Következő vizuális","No":"Nem","No albums found":"Nem találhatók albumok","No data available":"Nincs adat","No labels found":"Nem találhatók címkék","No matching records found":"Nem találtunk megfelelő rekordokat","No more":"Nem több","No people found":"Nem találhatók személyek","No pictures found":"Nem találhatók képek","No recently edited pictures":"Nincsenek nemrég szerkesztett képek","No server connection":"Nincs szerverkapcsolat","No servers configured.":"Nincsenek konfigurálva szerverek.","No services configured.":"Nincsenek konfigurálva szolgáltatások.","No thanks":"Nem köszönöm","No warnings or error containing this keyword. Note that search is case-sensitive.":"Nincsenek figyelmeztetések vagy hibák, amelyek ezt a kulcsszót tartalmazzák. Vegye figyelembe, hogy a keresés megkülönbözteti a kis- és nagybetűket.","Non-photographic and low-quality images require a review before they appear in search results.":"A rossz minőségű képek ellenörzésre kerülnek, mielőtt megjelennének a keresési eredmények között.","None":"Egyik sem","Not allowed":"Nem megengedett","Not found":"Nem található","Not sorted.":"Nem rendezett.","Not supported":"Nem támogatott","Note you may manually manage your originals folder and importing is optional.":"Vegye figyelembe, hogy manuálisan is kezelheti az eredeti mappát, és az importálás nem kötelező.","Note:":"Megjegyzés:","Note: Only WebDAV servers, like Nextcloud or PhotoPrism, can be configured as remote service for backup and file upload.":"Megjegyzés: Csak a WebDAV-kiszolgálók, például a Nextcloud vagy a PhotoPrism konfigurálhatók távoli szolgáltatásként biztonsági mentéshez és fájlfeltöltéshez.","Notes":"Megjegyzések","Nothing to see here yet.":"Itt még nincs látnivaló. Legyél türelmes.","Nothing was found.":"Semmit sem találtak.","Offline":"Offline","OIDC":"OIDC","OK":"OK","Oldest First":"Először a legidősebb","On Windows, enter the following resource in the connection dialog:":"Windows alatt adja meg a következő erőforrást a kapcsolat párbeszédpanelen:","On-demand generation of thumbnails may cause high CPU and memory usage. It is not recommended for resource-constrained servers and NAS devices.":"A miniatűrök igény szerinti generálása magas CPU- és memóriahasználatot okozhat. Erőforrás-korlátozott szerverek és NAS-eszközök esetében nem ajánlott.","Once a week":"Hetente egyszer","One album found":"Egy albumot találtunk","One file found":"Egy fájl található","One file uploaded":"Egy feltöltött fájl","One folder found":"Egy mappa található","One label found":"Egy címkét találtunk","One person found":"Egy személyt találtak","One picture found":"Egy kép található","Only locally managed accounts can be set up for authentication with 2FA.":"Csak helyileg kezelt fiókok állíthatók be a 2FA-val történő hitelesítéshez.","Open":"Nyissa meg a címet.","optional":"opcionális","or":"vagy","Orange":"Narancssárga","Organization":"Orientáció","Orientation":"Orientáció","Original file names will be stored and indexed.":"Az eredeti fájlneveket a rendszer tárolja és indexeli.","Original Name":"Eredeti Név","Originals":"Eredetiek","Other":"Egyéb","Our mission is to provide the most user- and privacy-friendly solution to keep your pictures organized and accessible.":"Küldetésünk, hogy a legfelhasználó- és adatvédelmi szempontból legkedvezőbb megoldást nyújtsuk képeinek rendszerezésére és elérhetőségére.","Outdoor":"Szabadtéri","Page {0}, Current page":"Oldal {0}, Jelenlegi oldal","Pages":"Oldalak","Pagination Navigation":"Oldalszámozás Navigáció","Panorama":"Panoráma","Panoramas":"Panorámák","Password":"Jelszó","Password changed":"A jelszó megváltozott","People":"Személyek","People you share a link with will be able to view public contents.":"Azok, akikkel megoszt egy linket, nyilvános tartalmakat tekinthetnek meg.","Permanently deleted":"Véglegesen törölve","Permanently remove files to free up storage.":"A tárhely felszabadításához távolítsa el véglegesen a fájlokat.","Person":"Személy","Personal":"Személyes","Photo":"Fénykép","PhotoPrism is 100% self-funded and independent.":"A PhotoPrism 100%-ban önfinanszírozó és független.","PhotoPrism+ Membership":"PhotoPrism+ tagság","Photos":"Fényképek","Picture Title":"Kép címe","Pink":"Rózsaszín","Place":"Hely","Place & Time":"Hely és idő","Places":"Helyek","Please confirm your new password.":"Kérjük, erősítse meg új jelszavát.","Please copy the following randomly generated app password and keep it in a safe place, as you will not be able to see it again:":"Kérjük, másolja ki a következő véletlenszerűen generált alkalmazásjelszót, és tartsa biztonságos helyen, mert nem fogja többé látni:","Please do not upload any private, unlawful or offensive pictures.":"Kérjük, ne töltsön fel magánjellegű, jogellenes vagy sértő képeket.","Please don't upload photos containing offensive content.":"Kérjük, ne töltsön fel sértő tartalmat tartalmazó fotókat.","Please enter OTP character {0}":"Kérjük, adja meg az OTP karaktert {0}","Please note that changing your password will log you out on other devices and browsers.":"Felhívjuk figyelmét, hogy a jelszó megváltoztatása más eszközökön és böngészőkben is kijelentkezik.","Please restart your instance for the changes to take effect.":"Kérjük, indítsa újra a példányt, hogy a módosítások hatályba lépjenek.","Please wait…":"Kérjük, várjon…","PM":"PM","PNG Size Limit: %{n}px":"PNG méretkorlát: %{n}px","Portrait":"Portré","Preserve filenames":"Fájlnevek megőrzése","Press enter to create a new album.":"Új album létrehozásához nyomja meg az Enter billentyűt.","Prevent database and album backups as well as YAML sidecar files from being created.":"Megakadályozza az adatbázis- és albummentések, valamint a YAML oldalkocsis fájlok létrehozását.","Prevent other apps from accessing PhotoPrism as a shared network drive.":"Megakadályozza, hogy más alkalmazások hozzáférjenek a PhotoPrismhez mint megosztott hálózati meghajtóhoz.","Preview":"Előnézet","Preview Images":"Képek előnézete","Previous":"Előző","Previous page":"Előző oldal","Previous visual":"Előző kép","Primary":"Elsődleges","Private":"Privát","Product Feedback":"Termék visszajelzés","Projection":"Kivetítés","Purple":"Lila","Quality Filter":"Minőségi szűrő","Quality Score":"Minőségi mutató","r":"r","Random":"Véletlen","Rating {0} of {1}":"A {0} minősítés {1}","Raw":"Nyers","RAW":"NYERS","Re-index all originals, including already indexed and unchanged files.":"Indexelje újra az összes eredetit, beleértve a már indexelt és változatlan fájlokat is.","Read-Only Mode":"Csak olvasható mód","Recently Added":"Nemrég hozzáadott","Recently Archived":"Nemrégiben archiválva","Recently Edited":"Nemrég szerkesztve","Recognition starts after indexing has been completed.":"A felismerés az indexelés befejezése után kezdődik.","Recognize faces so people can be assigned and found.":"Felismeri az arcokat, így konkrét személyeket is meg lehet találni.","Recognized":"Elismert","Recovery Code":"Helyreállítási kód","Red":"Piros","Refresh":"Frissítés","Regions":"Régiók","Register":"Regisztráció","Reload":"Újratöltés","Reloading…":"Újratöltés…","Remote Sync":"Távoli szinkronizálás","Remove":"Távolítsa el","remove failed: unknown album":"eltávolítás sikertelen: ismeretlen album","Remove from Album":"Eltávolítás az albumból","Remove imported files to save storage. Unsupported file types will never be deleted, they remain in their current location.":"Távolítsa el az importált fájlokat a tárhely megtakarításához. A nem támogatott fájltípusok soha nem törlődnek, a jelenlegi helyükön maradnak.","Request failed - are you offline?":"A kérés sikertelen - offline vagy?","Request failed - invalid response":"Sikertelen kérés – érvénytelen válasz","Require non-photographic and low-quality images to be reviewed before they appear in search results.":"A nem fényképes és gyenge minőségű képeket a keresési eredményekben való megjelenésük előtt felül kell vizsgálni.","Resolution":"Felbontás","Restart":"Újraindítás","Restore":"Visszaállítás","Restored":"Visszaállított","Retry Limit":"Újrapróbálkozási korlát","Retype Password":"Gépelje be újra a jelszót","Review":"Felülvizsgálat","Role":"Szerepvállalás","Rows per page:":"Sorok oldalanként:","Satellite":"Műholdas","Save":"Mentés","Scan":"Felderítés","Scan the QR code with your authenticator app or use the setup key shown below and then enter the generated verification code:":"Olvassa be a QR-kódot a hitelesítő alkalmazással, vagy használja az alább látható beállítási kulcsot, majd írja be a generált ellenőrző kódot:","Scans":"Szkennel","Scope":"Terjedelem","Search":"Keresés","Search and display photos on a map.":"Fényképek keresése és megjelenítése a térképen.","Season":"Évad","Secret":"Titok","Security and Access":"Biztonság és hozzáférés","Select":"Kiválasztás","Select a source folder to import files…":"Válassza ki a forrásmappát a fájlok importálásához…","Select date":"Válassza ki a dátumot","Select dates":"Válassza ki a dátumokat","Select or create an album":"Album kiválasztása vagy létrehozása","Select the files to upload…":"Válassza ki a feltölteni kívánt fájlokat…","Select the folder to be indexed…":"Válassza ki az indexelendő mappát…","Select Time":"Idő kiválasztása","Selection approved":"Kiválasztás jóváhagyva","Selection archived":"A kijelölés archiválva","Selection restored":"Kiválasztás visszaállítva","Sequential Name":"Sorozati név","Service URL":"Szolgáltatás URL-je","Services":"Szolgáltatások","Session":"Ülés","Session ID":"Munkamenet azonosítója","Sessions":"Ülések","Set as Album Cover":"Album borítóként beállítva","Settings":"Beállítások","Settings saved":"Beállítások elmentve","Setup":"Beállít","Share":"Megosztás","Share %{s}":"%{s} megosztása","Share your pictures with other apps and services.":"Ossza meg képeit más alkalmazásokkal és szolgáltatásokkal.","Show":"Előadás","Show all new faces":"Az összes új arc megjelenítése","Show Captions":"Feliratok megjelenítése","Show hidden":"Rejtett megjelenítése","Show less":"Mutass kevesebbet","Show more":"Mutass többet","Show server logs in Library.":"Szervernaplók megjelenítése a Könyvtárban.","Show Titles":"Címek megjelenítése","Sidecar":"Oldalkocsi","Sidecar Files":"Oldalkocsis fájlok","Sign in":"Bejelentkezés","Similar":"Hasonló","Size":"Méret","Slideshow":"Diavetítés","Slow":"Lassú","Software":"Szoftver","Software Update":"Szoftverfrissítés","Something went wrong, try again":"Valami rosszul ment, próbálja újra","Sort by":"Rendezés","Sort Order":"Sorrend","Sorted ascending.":"Növekvő sorrendben.","Sorted descending.":"Lefelé rendezve.","Source":"Forrás","Stack":"Csoportosítás","Stack files sharing the same unique image or instance identifier.":"Fájlok csoportosítása, amelyek ugyanazt az egyedi képet vagy példányazonosítót tartalmazzák.","Stack pictures taken at the exact same time and location based on their metadata.":"A metaadataik alapján csoportosítsa a pontosan ugyanabban az időben és helyen készült képeket.","Stackable":"Egymásra rakható","Stacks":"Stackek","Start":"Rajt","Start Page":"Kezdőlap","Static Size Limit: %{n}px":"Statikus méretkorlát: %{n}px","Status":"Állapot","Storage":"Tárhely","Streets":"Utcák","Subject":"Tantárgy","Submit":"Küldje be a","Successfully activated":"Sikeres aktiválás","Successfully Connected":"Sikeresen csatlakoztatva","Successfully deleted":"Sikeresen törölve","Successfully verified":"Sikeresen ellenőrizve","Super Admin":"Super Admin","Support for additional services, like Google Drive, will be added over time.":"A további szolgáltatások, például a Google Drive támogatása jelenleg fejlesztés alatt áll.","Support Our Mission":"Támogassa küldetésünket","Sync":"Szinkronizálás","Sync raw and video files":"Nyers és videofájlok szinkronizálása","Taken":"Felvett","Teal":"A zöldeskék","TensorFlow is required for image classification, facial recognition, and detecting unsafe content.":"A TensorFlow-ra a képosztályozáshoz, az arcfelismeréshez és a nem biztonságos tartalom felismeréséhez van szükség.","Terrain":"Terep","Text":"Szöveg","Text too long":"A szöveg túl hosszú","Thank You for Your Support!":"Köszönjük a támogatást!","That's why PhotoPrism was built from the ground up to run wherever you need it, without compromising freedom, privacy, or functionality.":"Ezért a PhotoPrismet az alapoktól kezdve úgy építették fel, hogy bárhol fusson, ahol csak szüksége van rá, anélkül, hogy a szabadság, a magánélet vagy a funkcionalitás sérülne.","The index currently contains %{n} hidden files.":"Az index jelenleg %{n} rejtett fájlt tartalmaz.","Their format may not be supported, they haven't been converted to JPEG yet or there are duplicates.":"Előfordulhat, hogy a formátumuk nem támogatott, még nem konvertálták JPEG formátumba, vagy ismétlődők vannak.","Theme":"Téma","This field is required":"Ez a mező kötelező","This mounts the originals folder as a network drive and allows you to open, edit, and delete files from your computer or smartphone as if they were local.":"Ez hálózati meghajtóként csatlakoztatja az eredeti mappát, és lehetővé teszi a fájlok megnyitását, szerkesztését és törlését számítógépéről vagy okostelefonjáról, mintha azok helyi lennének.","Time UTC":"Idő UTC","Time Zone":"Időzóna","Timeout":"Időtúllépés","Title":{"Account":"Cím","Photo":"Cím","":"Cím"},"Title / Position":"Cím / Pozíció","Title too long":"A cím túl hosszú","to":"nak nek","To avoid being locked out of your account, please download, print or copy this recovery code now and keep it in a safe place.":"Annak elkerülése érdekében, hogy ne zárjon ki fiókjából, kérjük, töltse le, nyomtassa ki vagy másolja ki ezt a helyreállítási kódot most, és tartsa biztonságos helyen.","To generate a new app-specific password, please enter the name and authorization scope of the application and select an expiration date:":"Új alkalmazásspecifikus jelszó generálásához adja meg az alkalmazás nevét és engedélyezési hatókörét, és válasszon egy lejárati dátumot:","To switch to a new authenticator app or device, first deactivate two-factor authentication and then reactivate it:":"Ha új hitelesítő alkalmazásra vagy eszközre szeretne váltani, először deaktiválja a kéttényezős hitelesítést, majd aktiválja újra:","To upgrade, you can either enter an activation code or click \"Register\" to sign up on our website:":"A frissítéshez vagy megadhat egy aktiváló kódot, vagy a \"Regisztráció\" gombra kattintva regisztrálhat a weboldalunkon:","Today":"Ma","Toggle View":"Nézet váltása","Token":"Jelképes","Too many files selected":"Túl sok fájl van kiválasztva","Too many requests":"Túl sok kérés","Troubleshooting":"Hibaelhárítás","Try again using other filters or keywords.":"Próbálja újra más szűrők vagy kulcsszavak használatával.","Two-factor authentication has been enabled for your account.":"A kétlépcsős hitelesítés engedélyezve van fiókjában.","Type":"Típus","Unauthorized":"Jogosulatlan","Undo":"Visszavonás","Unique ID":"Egyéni azonosító","Unknown":"Ismeretlen","Unregistered":"Nem regisztrált","Unsorted":"Rendezés nélkül","Unstack":"Bontsa ki","Updated":"Frissítve","Updating faces":"Arcok frissítése","Updating index":"Index frissítése","Updating moments":"Frissítő pillanatok","Updating picture…":"Kép frissítése…","Updating previews":"Előnézetek frissítése","Updating stacks":"Csoportosítások frissítése","Upgrade":"Frissítés","Upgrade Now":"Frissítés most","Upload":"Feltöltés","Upload complete":"Feltöltés kész","Upload complete. Indexing…":"Feltöltés kész. Indexelés…","Upload failed":"Feltöltés sikertelen","Upload local files":"Helyi fájlok feltöltése","Upload Path":"Feltöltési útvonal","Upload to WebDAV and share links with friends.":"Töltse fel a WebDAV-ba, és ossza meg hivatkozásait barátaival.","Uploading %{n} of %{t}…":"%{n}/%{t} feltöltése…","Uploading photos…":"Fényképek feltöltése…","Uploading…":"Feltöltés…","Uploads that may contain such images will be rejected automatically.":"Az esetlegesen ilyen képeket tartalmazó feltöltések automatikusan elutasításra kerülnek.","Use Presets":"Előbeállítások használata","Use the following recovery code to access your account when you are unable to generate a valid verification code with your authenticator app:":"Ha nem tud érvényes ellenőrző kódot generálni a hitelesítő alkalmazással, használja a következő helyreállítási kódot a fiók eléréséhez:","Use your recovery code or contact an administrator for help.":"Használja a helyreállítási kódot, vagy forduljon a rendszergazdához segítségért.","User":"Felhasználó","User Guide":"Felhasználói útmutató","User Interface":"Felhasználói felület","Username":"Felhasználónév","Users":"Felhasználók","Vector":"Vektor","Vectors":"Vektorok","Verification Code":"Ellenőrző kód","Video":"Videó","Video Duration":"Időtartam","Videos":"Videók","View":"Kilátás","View search results as a list.":"A keresési eredmények listaként történő megtekintése.","Viewer":"Viewer","Visitor":"Látogató","Visual Similarity":"Csoportosítás hasonlóság szerint","Warning":"Figyelmeztetés","We appreciate your feedback!":"Nagyra értékeljük visszajelzéseit!","We do our best to respond within five business days or less.":"Igyekszünk öt munkanapon belül vagy annál rövidebb időn belül válaszolni.","Web Login":"Webes bejelentkezés","WebDAV":"WebDAV","WebDAV clients can connect to PhotoPrism using the following URL:":"A WebDAV-kliensek a következő URL-címen csatlakozhatnak a PhotoPrism-hez:","WebDAV clients, like Microsoft’s Windows Explorer or Apple's Finder, can connect directly to PhotoPrism.":"A WebDAV-kliensek, mint például a Microsoft Windows Intézője vagy az Apple Finder, közvetlenül csatlakozhatnak a PhotoPrism-hez.","WebDAV Upload":"WebDAV feltöltés","WebGL support is disabled in your browser":"A WebGL-támogatás le van tiltva a böngésződben","Website":"Weboldal","White":"Fehér","Work Details":"Részletek","Year":"Év","Yellow":"Sárga","Yes":"Igen","You are welcome to contact us at membership@photoprism.app for questions regarding your membership.":"A tagsággal kapcsolatos kérdésekkel kapcsolatban szívesen állunk rendelkezésére a membership@photoprism.app e-mail címen.","You can only download one album":"Csak egy albumot tölthet le","You can only download one label":"Csak egy címkét tölthet le","You can upload up to %{n} files for test purposes.":"Legfeljebb %{n} fájlt tölthet fel tesztelés céljából.","You may only select one item":"Csak egy elemet választhat ki","You may rescan your library to find additional faces.":"Újra beolvashatja könyvtárát, hogy további arcokat találjon.","Your account has been successfully connected.":"A fiókját sikeresen csatlakoztattuk.","Your browser does not support WebGL":"A böngésző nem támogatja a WebGL-t","Your continued support helps us provide regular updates and remain independent, so we can fulfill our mission and protect your privacy.":"Folyamatos támogatása segít nekünk olyan szolgáltatásokat nyújtani, mint a műholdas térképek és új funkciók fejlesztése.","Your library is continuously analyzed to automatically create albums of special moments, trips, and places.":"Könyvtárát folyamatosan elemzi a rendszer, hogy automatikusan létrehozza a különleges pillanatokat, utazásokat és helyeket tartalmazó albumokat.","Zoom in/out":"Nagyítás/kicsinyítés"}} \ No newline at end of file +{"hu":{"{0} appended action":"{0} appended action","{0} files":"{0} fájlok","{0} files ({1} in total)":"{0} fájlok ({1} összesen)","{0} more":"{0} még","{0} prepended action":"{0} prepended action","{0} selected":"{0} kiválasztott","{0}-{1} of {2}":"{0}-{1} of {2}","%{n} albums found":"%{n} album találat","%{n} files uploaded":"%{n} fájl feltöltve","%{n} folders found":"%{n} mappa találat","%{n} GB of %{q} GB used":"%{n} GB %{q} GB használt","%{n} labels found":"%{n} címke találat","%{n} people found":"%{n} ember találat","%{n} pictures found":"%{n} kép találat","%{s} is too long":"%{s} túl hosszú","%{s} is too short":"%{s} túl rövid","1 hour":"1 óra","12 hours":"12 óra","2-Factor Authentication":"2-faktoros hitelesítés","2FA":"2FA","4 hours":"4 óra","A click will copy it to your clipboard.":"A kattintás egy másolatot helyez a vágólapra.","A new version of %{s} is available:":"A %{s} új verziója elérhető:","About":"Rólunk","Access Token":"Hozzáférési jelszó","Account":"Fiók","Account created":"Fiók létrehozva","Account deleted":"Fiók törölve","Account restored":"Fiók visszaállítva","Accounts":"Fiókok","Accuracy":"Pontosság","Action":"Művelet","Actions":"Műveletek","Activate":"Aktiválja a címet.","Activate to remove sorting.":"Aktiválja a szortírozás megszüntetéséhez.","Activate to sort ascending.":"Aktiválja a növekvő rendezéshez.","Activate to sort descending.":"Aktiválja a csökkenő rendezéshez.","Activation Code":"Aktiválási kód","Add":"Add","Add %{s}?":"Add %{s}?","Add Account":"Fiók hozzáadása","Add Album":"Album hozzáadása","Add files to your library via Web Upload.":"Fájlok hozzáadása a könytárhoz Webes feltöltés segítéségével.","Add Link":"Hivatkozás hozzáadása","Add person?":"Személyt hozzáadni?","Add pictures from search results by selecting them.":"Képek hozzáadása a találok közül kiválasztás segítéségével.","Add to album":"Hozzáadás albumhoz","Added":"Hozzáadva","Admin":"Admin","Advanced":"Haladó","After 1 day":"Egy nap után","After 3 days":"Három nap után","After 7 days":"Hét nap után","After entering your password for confirmation, you can set up two-factor authentication with a compatible authenticator app or device:":"Miután megerősítésképpen megadta jelszavát, beállíthat kétfaktoros hitelesítést egy kompatibilis hitelesítő alkalmazással vagy eszközzel:","After one month":"Egy hónap után","After one year":"Egy év után","After selecting pictures from search results, you can add them to an album using the context menu.":"A találokból kiválasztott képeket, tetszőleges albumhoz adni a menü segítségével lehet.","After two months":"Két hónap után","After two weeks":"Két hét után","Album":"Album","Album Backups":"Album biztonsági mentések","Album created":"Album létrehozva","Albums":"Albumok","Albums deleted":"Albumok törölve","All":"Minden","All %{n} albums loaded":"Összesen %{n} album betöltve","All %{n} labels loaded":"Összesen %{n} címke betöltve","All %{n} people loaded":"Összesen %{n} ember betöltve","All Cameras":"Összes kamera","All Categories":"Összes kategória","All Colors":"Összes szín","All Countries":"Összes ország","All fields are required":"Minden mező kitöltése kötelező","All files from import folder":"Összes fájlt az import könyvtárból","All Lenses":"Összes lencse","All Months":"Összes hónap","All originals":"Összes eredeti","All Years":"Összes év","Alternatively, you can upload files directly to WebDAV servers like Nextcloud.":"Alternatívaként a fájlok feltölthetők WebDAV szerverekre is, mint például Nextcloud.","Altitude":"Magasság","Altitude (m)":"Magasság (m)","AM":"AM","Animated":"Mozgó","Animation":"Animáció","Any private photos and videos remain private and won't be shared.":"Bármilyen privát fotó és videó privát marad és nem kerül megosztásra.","API Key":"API Kulcs","Application":"Alkalmazás","Apply":"Alkalmaz","Approve":"Jóváhagy","Apps and Devices":"Alkalmazások és eszközök","Archive":"Archívum","Archived":"Archíválva","Are you sure you want to archive the selection?":"Biztos benne, hogy archíválja a kiválasztott fájlokat?","Are you sure you want to delete these albums?":"Biztos benne, hogy törli a kiválasztott fájlokat?","Are you sure you want to delete these labels?":"Biztos benne, hogy törli a kiválasztott címkéket?","Are you sure you want to delete this account?":"Biztos benne, hogy törli ezt a felhasználói fiókot?","Are you sure you want to permanently delete these pictures?":"Biztos benne, hogy véglegesen törli a kiválasztott képeket?","Are you sure you want to permanently delete this file?":"Biztos benne, hogy véglegesen törli a kiválasztott fájlokat?","Are you sure?":"Biztos benne?","Artist":"Művész","Aspect Ratio":"Képarány","Audio":"Audio","Authentication":"Hitelesítés","Auto":"Auto","Back":"Vissza","Back to top":"Vissza a tetejére","Backup":"Biztonsági mentés","Badge":"Jelvény","Base Path":"Bázis útvonal","Become a member today, support our mission and enjoy our member benefits!":"Legyen tag még ma, támogassa küldetésünket és élvezze tagi előnyeinket!","Being 100% self-funded and independent, we can promise you that we will never sell your data and that we will always be transparent about our software and services.":"Mivel 100%-ban önfinanszírozók és függetlenek vagyunk, megígérhetjük, hogy soha nem adjuk el az adatait, és mindig átláthatóak leszünk a szoftverünkkel és szolgáltatásainkkal kapcsolatban.","Bio":"Bio","Birth Date":"Születési dátum","Black":"Fekete","Blackman: Lanczos Modification, Less Ringing Artifacts":"Blackman: Lanczos-módosítás, kevesebb csengő műtárgy","Blue":"Kék","Brown":"Barna","Browse":"Böngésszen a oldalon.","Browse and edit image classification labels.":"Böngéssze és szerkessze a képbesorolási címkéket.","Browse and share your pictures organized into monthly albums.":"Böngésszen és ossza meg képeit havi albumokba rendezve.","Browse Files":"Fájlok böngészése","Browse indexed files and folders in Library.":"Böngésszen az indexelt fájlok és mappák között a Könyvtárban.","Bug Report":"Hibajelentés","Busy, please wait…":"Elfoglalt, kérem, várjon…","By using the software and services we provide, you agree to our terms of service, privacy policy, and code of conduct.":"Az általunk biztosított szoftver és szolgáltatások használatával Ön elfogadja szolgáltatási feltételeinket, adatvédelmi szabályzatunkat és magatartási kódexünket.","Calendar":"Naptár","Camera":"Kamera","Camera Serial":"Kamera sorozat","Can't access your authenticator app or device?":"Nem tud hozzáférni az autentikátor alkalmazásához vagy eszközéhez?","Can't load more, limit reached":"Nem tölthet be többet, elérte a korlátot","Can't select more items":"Nem lehet több elemet kiválasztani","Cancel":"Mégsem","Caption":"Felirat","Cards":"Kártyák","Carousel slide {0} of {1}":"{0} körhinta {0} a {1}-től","Category":"Kategória","Change Avatar":"Profilkép változtatása","Change Password":"Új jelszó","Change personal profile and security settings.":"Személyes profil és biztonsági beállítások módosítása.","Change photo titles, locations, and other metadata.":"Módosíthatja a fotók címét, helyét és egyéb metaadatait.","Change private flag":"Privát fotóként jelölés","Changes could not be saved":"Módosításokat nem sikerült menteni","Changes successfully saved":"Módosítások sikeresen mentve","Changes to the advanced settings require a restart to take effect.":"A speciális beállítások módosításához újraindításra van szükség, hogy a módosítások hatályba lépjenek.","Checked":"Ellenőrizve","Chroma":"Chroma","Cleaning index and cache":"Index és gyorsítótár tisztítása","Cleanup":"Tisztítás","Clear {0}":"Clear {0}","Client":"Ügyfél","Client Credentials":"Ügyfél hitelesítő adatok","Close":"Bezárás","Codec":"Codec","Color":"Szín","Color Profile":"Színprofil","Colors":"Színek","Compare Editions":"Edíciók összehasonlítása","Complete Rescan":"Teljes újraolvasás","Confidence":"Pontosság","Confirm":"megerősít","Connect":"Csatlakozás","Connect via WebDAV":"Csatlakozás WebDAV-on keresztül","Connected":"Csatlakozva","Contact Details":"Elérhetőségek","Contact Us":"Lépjen kapcsolatba velünk","Contains %{n} pictures.":"%{n} képet tartalmaz.","Contains one picture.":"Egy képet tartalmaz.","Content":"Tartalom","Continue":"Folytatni","Continue with %{provider}":"Folytassa a %{provider}","Contributor":"Hozzájáruló","Converting":"Konvertálás","Copied to clipboard":"Vágólapra másolva","Copy":"Másolat","Copyright":"Szerzői jog","Couldn't find anything.":"Nem találtunk semmit.","Country":"Ország","Create Account":"Fiók létrehozása","Create album":"Album létrehozása","Create regular backups based on the configured schedule.":"Index biztonsági mentések létrehozása a konfigurált ütemezés alapján.","Create YAML files to back up album metadata.":"YAML fájlok létrehozása az album metaadatok biztonsági mentéséhez.","Create YAML sidecar files to back up picture metadata.":"YAML oldalkocsis fájlok létrehozása a képek metaadatainak mentéséhez.","Created":"Létrehozva","Creating thumbnails for":"Miniatűrök létrehozása a következőhöz","Cubic: Moderate Quality, Good Performance":"Köbös: Közepes minőség, jó teljesítmény","Current Password":"Jelenlegi jelszó","Custom":"Custom","Cyan":"Cián","Daily":"Napi","Database Backups":"Adatbázis biztonsági mentések","Day":"Nap","Deactivate":"Deaktiválás","Debug Logs":"Hibakeresési naplók","Default":"Alapértelmezett","Default Folder":"Alapértelmezett mappa","Delete":"Törlés","Delete All":"Mindent törölni","Delete all?":"Mindent törölni?","Delete orphaned index entries, sidecar files and thumbnails.":"Törli az elárvult indexbejegyzéseket, oldalkocsis fájlokat és miniatűröket.","Description":"Leírás","Detailed instructions can be found in our User Guide.":"A részletes utasításokat a Felhasználói kézikönyvben találja.","Details":"Részletek","Dimensions":"Méretek","Disable Backups":"Biztonsági mentések letiltása","Disable Darktable":"A Darktable letiltása","Disable ExifTool":"Az ExifTool letiltása","Disable features that require write permission for the originals folder.":"Az eredeti mappa írási engedélyét igénylő funkciók letiltása.","Disable FFmpeg":"Az FFmpeg letiltása","Disable ImageMagick":"ImageMagick letiltása","Disable interactive world maps and reverse geocoding.":"Az interaktív világtérképek és a fordított geokódolás letiltása.","Disable Places":"Helyek letiltása","Disable RawTherapee":"A RawTherapee letiltása","Disable TensorFlow":"A TensorFlow letiltása","Disable Vectors":"Vektorok letiltása","Disable WebDAV":"A WebDAV letiltása","Disables vector graphics support.":"Letiltja a vektorgrafika támogatását.","Disables video transcoding and thumbnail extraction.":"Letiltja a videó átkódolását és a miniatűrök kinyerését.","Discover":"Felfedez","Dismiss":"Elutasíthatod","Display Name":"Megjelenített név","Display picture captions in search results.":"Képaláírások megjelenítése a keresési eredményekben.","Display picture titles in search results.":"Képcímek megjelenítése a keresési eredményekben.","Document":"Dokumentum","Documents":"Dokumentumok","Don't use Darktable to convert RAW images.":"Ne használja a Darktable-t RAW képek konvertálására.","Don't use ImageMagick to convert images.":"Ne használd az ImageMagick programot képek konvertálására.","Don't use RawTherapee to convert RAW images.":"Ne használja a RawTherapee-t RAW képek konvertálására.","Done":"Kész","Done.":"Kész.","Download":"Letöltés","Download only original media files, without any automatically generated files.":"Csak eredeti médiafájlok letöltése, automatikusan generált fájlok nélkül.","Download remote files":"Távoli fájlok letöltése","Download single files and zip archives.":"Egyedi fájlok és zip-archívumok letöltése.","Downloading…":"Letöltés…","Downscaling Filter":"Lekicsinyítési szűrő","Drag and drop files here":"Húzza ide a fájlokat","Due to the high volume of emails we receive, our team may be unable to get back to you immediately.":"A beérkező e-mailek nagy száma miatt előfordulhat, hogy csapatunk nem tud azonnal válaszolni Önnek.","Duplicates will be skipped and only appear once.":"A másolatok kimaradnak, és csak egyszer jelennek meg.","Duration":"Időtartam","Dynamic Previews":"Dinamikus előnézetek","Dynamic Size Limit: %{n}px":"Dinamikus méretkorlát: %{n}px","E-Mail":"Email","Edit":"Szerkesztés","Edit %{s}":"%{s} szerkesztése","Edit Account":"Fiók szerkesztése","Edit Photo":"Fénykép szerkesztése","Edited":"Szerkesztette","Email":"E-mail","Enable debug mode to display additional logs and help with troubleshooting.":"A hibakeresési mód engedélyezése további naplók megjelenítéséhez és a hibaelhárítás segítéséhez.","Enable new features that may be incomplete or unstable.":"Engedélyezze az új funkciókat, amelyek hiányosak vagy instabilak lehetnek.","Enables RAW converter presets. May reduce performance.":"Engedélyezi a RAW konverter előbeállításait. Csökkentheti a teljesítményt.","Enabling two-factor authentication means that you will need a randomly generated verification code to log in, so even if someone gains access to your password, they will not be able to access your account.":"A kéttényezős hitelesítés engedélyezése azt jelenti, hogy a bejelentkezéshez véletlenszerűen generált ellenőrző kódra lesz szüksége, így még ha valaki hozzáfér a jelszavához, nem férhet hozzá fiókjához.","Enter date":"Adja meg a dátumot","Enter dates":"Adja meg a dátumokat","Enter the code generated by your authenticator app:":"Írja be a hitelesítési alkalmazás által generált kódot:","Enter verification code":"Adja meg a megerősítő kódot","Enter your password to confirm the action and continue:":"Adja meg jelszavát a művelet megerősítéséhez, és folytassa:","Error":"Hiba","Errors":"Hibák","Estimate":"Becslés","Estimate Locations":"Becsült helyszínek","Estimate the approximate location of pictures without GPS coordinates.":"A képek hozzávetőleges helyének becslése GPS-koordináták nélkül.","Every two days":"Kétnaponta","Exclude content marked as private from search results, shared albums, labels, and places.":"A privátként megjelölt tartalmak kizárása a keresési eredményekből, a megosztott albumokból, címkékből és helyekről.","Exclude hidden":"Rejtett kizárás","ExifTool is required for full support of XMP metadata, videos and Live Photos.":"Az ExifTool segítségével történő metaadat-kivonatolás szükséges a teljes videó-, élőfotó- és XMP-támogatáshoz.","Experimental Features":"Kísérleti jellemzők","Expires":"Lejár","Exposure":"Kitettség","Extract still images and generate thumbnails while indexing.":"Állóképek kivonása és miniatűrök készítése indexelés közben.","F Number":"F Szám","Face":"Arc","Faces":"Arcok","Failed removing link":"Nem sikerült eltávolítani a linket","Failed to connect account.":"Nem sikerült csatlakoztatni a fiókot.","Failed updating link":"Nem sikerült frissíteni a linket","Family Name":"Családnév","Fast":"Gyors","Favorite":"Kedvenc","Favorites":"Kedvencek","Feature Request":"Funkciókérés","Feedback":"Visszacsatolás","Female":"Női","File":"Fájl","File Browser":"Fájl böngésző","File Conversion":"Fájl átalakítás","File Name":"Fájlnév","File Size":"Fájl méret","Filename":"Fájlnév","Files":"Fájlok","Files with sequential names like 'IMG_1234 (2)' and 'IMG_1234 (3)' belong to the same picture.":"Az olyan szekvenciális nevű fájlok, mint az „IMG_1234 (2)” és „IMG_1234 (3)”, ugyanahhoz a képhez tartoznak.","First page":"Első oldal","Focal Length":"Gyújtótávolság","Folder":"Mappa","Folder contains %{n} files":"A mappa %{n} fájlt tartalmaz","Folder is empty":"A mappa üres","Folders":"Mappák","Forgot password?":"Elfelejtett jelszó?","FPS":"FPS","Frames":"Keretek","Full Access":"Teljes hozzáférés","Fullscreen":"Teljes képernyő","General":"Általános","Generate":"generál","Generate albums of special moments, journeys, and places.":"Automatikusan albumokat hoz létre különleges pillanatokról, utazásokról és helyekről.","Generate Previews":"Előnézetek generálása","Generated":"Generált","Get Started":"Kezdje el","Given Name":"Keresztnév","Global Options":"Globális lehetőségek","Go to page {0}":"Menj az oldalra {0}","Gold":"Arany","Green":"Zöld","Grey":"Szürke","Guest":"Vendég","Hash":"Hash","Help":"Segítség","Help & Support":"Segítség & Támogatás","Hidden":"Rejtett","Hidden Files":"Rejtett fájlok","Hide":"Elrejt","Hide photos that have been moved to archive.":"Az archívumba áthelyezett fotók elrejtése.","High":"Magas","High Dynamic Range (HDR)":"Nagy dinamikatartomány (HDR)","How can we help?":"Hogyan segíthetünk?","Hybrid":"Hibrid","If you lose access to your authenticator app or device, you can use your recovery code to regain access to your account.":"Ha elveszíti hozzáférését hitelesítő alkalmazásához vagy eszközéhez, a helyreállítási kód segítségével visszaszerezheti a hozzáférést fiókjához.","Image":"Kép","Image Quality":"Képminőség","Import":"Importálás","Import failed":"Az importálás sikertelen","Imported files will be sorted by date and given a unique name to avoid duplicates.":"Az importált fájlok dátum szerint vannak rendezve, és egyedi nevet kapnak a párhuzamosságok elkerülése érdekében.","Imported files will be sorted by date and given a unique name.":"Az importált fájlok dátum szerint vannak rendezve, és egyedi nevet kapnak.","Importing %{s}…":"%{s} importálása…","Importing files to originals…":"Fájlok importálása eredetibe…","in":"-ban/-ben","In case pictures you expect are missing, please rescan your library and wait until indexing has been completed.":"Ha hiányoznak a várt képek, kérjük, ellenőrizze újra a könyvtárát, és várja meg, amíg az indexelés befejeződik.","Include RAW image files when downloading stacks and archives.":"RAW képfájlok felvétele a verem és az archívumok letöltésekor.","Include sidecar files when downloading stacks and archives.":"Oldalkocsis fájlok bevonása a verem és az archívumok letöltésekor.","Increase storage size or delete files to continue.":"A folytatáshoz növelje a tároló méretét vagy törölje a fájlokat.","Index":"Index","Index and import files through the user interface.":"Fájlok indexelése és importálása a felhasználói felületen keresztül.","Indexing":"Indexelés","Indexing failed":"Az indexelés nem sikerült","Indexing media and sidecar files…":"Média- és oldalsó fájlok indexelése…","Information":"Információ","Instance ID":"Példányazonosító","Insufficient storage.":"Elégtelen tárolás.","Interval":"Intervallum","Invalid":"Érvénytelen","Invalid address":"Érvénytelen cím","Invalid country":"Érvénytelen ország","Invalid date":"Érvénytelen dátum","Invalid parameters":"Érvénytelen paraméterek","Invalid photo selected":"Érvénytelen fénykép kiválasztva","Invalid time":"Érvénytelen idő","Invalid URL":"Érvénytelen URL","It is a one-time use code that will disable 2FA for your account when you use it.":"Ez egy egyszer használatos kód, amely letiltja a 2FA-t a fiókjában, amikor azt használja.","Item":"Tétel","Items per page:":"Tételek oldalanként:","JPEG Quality: %{n}":"JPEG minőség: %{n}","JPEG Size Limit: %{n}px":"JPEG méretkorlát: %{n}px","JPEGs and thumbnails are automatically rendered as needed.":"A JPEG-fájlok és miniatűrök szükség szerint automatikusan megjelennek.","Keywords":"Kulcsszavak","Label":"Címke","Labels":"Címkék","Labels deleted":"Címkék törölve","Lanczos: Detail Preservation, Minimal Artifacts":"Lanczos: Részletmegőrzés, minimális műtárgyak","Language":"Nyelv","Last Active":"Utolsó aktív","Last Login":"Utolsó bejelentkezés","Last page":"Utolsó oldal","Last Sync":"Utolsó szinkronizálás","Last Used":"Utoljára használt","Latitude":"Szélességi kör","LDAP/AD":"LDAP/AD","Learn more":"Tudjon meg többet","Learn More":"Tudjon meg többet","Legal Information":"Jogi információk","Lens":"Lencse","Library":"Könyvtár","License":"Engedély","Like":"Kedvelés","Lime":"Mész","Limit reached, showing first %{n} files":"Elérte a korlátot, az első %{n} fájl látható","Linear: Very Smooth, Best Performance":"Lineáris: Nagyon sima, a legjobb teljesítmény","Link":"Link","List":"Lista","List View":"Lista nézet","Live":"Élő","Live Photos":"Fényképek","Load more":"Töltsön többet","Loading items...":"Tételek betöltése...","Loading...":"Betöltés...","Local":"Helyi","Local Time":"Helyi idő","Location":"Elhelyezkedés","Log messages appear here whenever PhotoPrism comes across broken files, or there are other potential issues.":"Naplóüzenetek jelennek meg itt, ha a PhotoPrism hibás fájlokat talál, vagy más lehetséges problémák merülnek fel.","Login":"Belépés","Logout":"Kijelentkezés","Logs":"Naplók","Longitude":"Hosszúság","Low":"Alacsony","Magenta":"Bíborvörös","Main Color":"Fő szín","Male":"Férfi","Manage Account":"Számla kezelése","Manual":"Kézi","Manual Upload":"Kézi feltöltés","Maps":"Térképek","Marker":"Jelző","Maximum number of accounts has been reached.":"A számlák maximális száma elérte a határt.","Media":"Média","Medium":"Közepes","Membership":"Tagság","Merge %{a} with %{b}?":"Összevonja %{a}-t a %{b}-val?","Message":"Üzenet","Message sent":"Üzenet elküldve","Metadata":"Metaadatok","Metrics":"Metrikák","Minimize":"Minimalizálja","Missing":"Hiányzó","Missing or invalid configuration":"Hiányzó vagy érvénytelen konfiguráció","Moments":"Pillanatok","Monochrome":"Monokróm","Month":"Hónap","More options":"További lehetőségek","Mosaic":"Mozaik","Most Relevant":"Legrelevánsabb","Move Files":"Fájlok áthelyezése","Must have at least %{n} characters.":"Legalább %{n} karakteresnek kell lennie.","Mute":"Mute","Name":"Név","Name too long":"A név túl hosszú","Never":"Soha","New":"Új","New Password":"Új jelszó","Newest First":"Először a legújabb","Next":"Következő","Next page":"Következő oldal","Next visual":"Következő vizuális","No":"Nem","No albums found":"Nem találhatók albumok","No data available":"Nincs adat","No labels found":"Nem találhatók címkék","No matching records found":"Nem találtunk megfelelő rekordokat","No more":"Nem több","No people found":"Nem találhatók személyek","No pictures found":"Nem találhatók képek","No recently edited pictures":"Nincsenek nemrég szerkesztett képek","No server connection":"Nincs szerverkapcsolat","No servers configured.":"Nincsenek konfigurálva szerverek.","No services configured.":"Nincsenek konfigurálva szolgáltatások.","No thanks":"Nem köszönöm","No warnings or error containing this keyword. Note that search is case-sensitive.":"Nincsenek figyelmeztetések vagy hibák, amelyek ezt a kulcsszót tartalmazzák. Vegye figyelembe, hogy a keresés megkülönbözteti a kis- és nagybetűket.","Non-photographic and low-quality images require a review before they appear in search results.":"A rossz minőségű képek ellenörzésre kerülnek, mielőtt megjelennének a keresési eredmények között.","None":"Egyik sem","Not allowed":"Nem megengedett","Not found":"Nem található","Not sorted.":"Nem rendezett.","Not supported":"Nem támogatott","Note you may manually manage your originals folder and importing is optional.":"Vegye figyelembe, hogy manuálisan is kezelheti az eredeti mappát, és az importálás nem kötelező.","Note:":"Megjegyzés:","Note: Only WebDAV servers, like Nextcloud or PhotoPrism, can be configured as remote service for backup and file upload.":"Megjegyzés: Csak a WebDAV-kiszolgálók, például a Nextcloud vagy a PhotoPrism konfigurálhatók távoli szolgáltatásként biztonsági mentéshez és fájlfeltöltéshez.","Notes":"Megjegyzések","Nothing to see here yet.":"Itt még nincs látnivaló. Legyél türelmes.","Nothing was found.":"Semmit sem találtak.","Offline":"Offline","OIDC":"OIDC","OK":"OK","Oldest First":"Először a legidősebb","On Windows, enter the following resource in the connection dialog:":"Windows alatt adja meg a következő erőforrást a kapcsolat párbeszédpanelen:","On-demand generation of thumbnails may cause high CPU and memory usage. It is not recommended for resource-constrained servers and NAS devices.":"A miniatűrök igény szerinti generálása magas CPU- és memóriahasználatot okozhat. Erőforrás-korlátozott szerverek és NAS-eszközök esetében nem ajánlott.","Once a week":"Hetente egyszer","One album found":"Egy albumot találtunk","One file found":"Egy fájl található","One file uploaded":"Egy feltöltött fájl","One folder found":"Egy mappa található","One label found":"Egy címkét találtunk","One person found":"Egy személyt találtak","One picture found":"Egy kép található","Only locally managed accounts can be set up for authentication with 2FA.":"Csak helyileg kezelt fiókok állíthatók be a 2FA-val történő hitelesítéshez.","Open":"Nyissa meg a címet.","optional":"opcionális","or":"vagy","Orange":"Narancssárga","Organization":"Orientáció","Orientation":"Orientáció","Original file names will be stored and indexed.":"Az eredeti fájlneveket a rendszer tárolja és indexeli.","Original Name":"Eredeti Név","Originals":"Eredetiek","Other":"Egyéb","Our mission is to provide the most user- and privacy-friendly solution to keep your pictures organized and accessible.":"Küldetésünk, hogy a legfelhasználó- és adatvédelmi szempontból legkedvezőbb megoldást nyújtsuk képeinek rendszerezésére és elérhetőségére.","Outdoor":"Szabadtéri","Page {0}, Current page":"Oldal {0}, Jelenlegi oldal","Pages":"Oldalak","Pagination Navigation":"Oldalszámozás Navigáció","Panorama":"Panoráma","Panoramas":"Panorámák","Password":"Jelszó","Password changed":"A jelszó megváltozott","People":"Személyek","People you share a link with will be able to view public contents.":"Azok, akikkel megoszt egy linket, nyilvános tartalmakat tekinthetnek meg.","Permanently deleted":"Véglegesen törölve","Permanently remove files to free up storage.":"A tárhely felszabadításához távolítsa el véglegesen a fájlokat.","Person":"Személy","Personal":"Személyes","Photo":"Fénykép","PhotoPrism is 100% self-funded and independent.":"A PhotoPrism 100%-ban önfinanszírozó és független.","PhotoPrism+ Membership":"PhotoPrism+ tagság","Photos":"Fényképek","Picture Title":"Kép címe","Pink":"Rózsaszín","Place":"Hely","Place & Time":"Hely és idő","Places":"Helyek","Please confirm your new password.":"Kérjük, erősítse meg új jelszavát.","Please copy the following randomly generated app password and keep it in a safe place, as you will not be able to see it again:":"Kérjük, másolja ki a következő véletlenszerűen generált alkalmazásjelszót, és tartsa biztonságos helyen, mert nem fogja többé látni:","Please do not upload any private, unlawful or offensive pictures.":"Kérjük, ne töltsön fel magánjellegű, jogellenes vagy sértő képeket.","Please don't upload photos containing offensive content.":"Kérjük, ne töltsön fel sértő tartalmat tartalmazó fotókat.","Please enter OTP character {0}":"Kérjük, adja meg az OTP karaktert {0}","Please note that changing your password will log you out on other devices and browsers.":"Felhívjuk figyelmét, hogy a jelszó megváltoztatása más eszközökön és böngészőkben is kijelentkezik.","Please restart your instance for the changes to take effect.":"Kérjük, indítsa újra a példányt, hogy a módosítások hatályba lépjenek.","Please wait…":"Kérjük, várjon…","PM":"PM","PNG Size Limit: %{n}px":"PNG méretkorlát: %{n}px","Portrait":"Portré","Preserve filenames":"Fájlnevek megőrzése","Press enter to create a new album.":"Új album létrehozásához nyomja meg az Enter billentyűt.","Prevent database and album backups as well as YAML sidecar files from being created.":"Megakadályozza az adatbázis- és albummentések, valamint a YAML oldalkocsis fájlok létrehozását.","Prevent other apps from accessing PhotoPrism as a shared network drive.":"Megakadályozza, hogy más alkalmazások hozzáférjenek a PhotoPrismhez mint megosztott hálózati meghajtóhoz.","Preview":"Előnézet","Preview Images":"Képek előnézete","Previous":"Előző","Previous page":"Előző oldal","Previous visual":"Előző kép","Primary":"Elsődleges","Private":"Privát","Product Feedback":"Termék visszajelzés","Projection":"Kivetítés","Purple":"Lila","Quality Filter":"Minőségi szűrő","Quality Score":"Minőségi mutató","r":"r","Random":"Véletlen","Rating {0} of {1}":"A {0} minősítés {1}","Raw":"Nyers","RAW":"NYERS","Re-index all originals, including already indexed and unchanged files.":"Indexelje újra az összes eredetit, beleértve a már indexelt és változatlan fájlokat is.","Read-Only Mode":"Csak olvasható mód","Recently Added":"Nemrég hozzáadott","Recently Archived":"Nemrégiben archiválva","Recently Edited":"Nemrég szerkesztve","Recognition starts after indexing has been completed.":"A felismerés az indexelés befejezése után kezdődik.","Recognize faces so people can be assigned and found.":"Felismeri az arcokat, így konkrét személyeket is meg lehet találni.","Recognized":"Elismert","Recovery Code":"Helyreállítási kód","Red":"Piros","Refresh":"Frissítés","Regions":"Régiók","Register":"Regisztráció","Reload":"Újratöltés","Reloading…":"Újratöltés…","Remote Sync":"Távoli szinkronizálás","Remove":"Távolítsa el","remove failed: unknown album":"eltávolítás sikertelen: ismeretlen album","Remove from Album":"Eltávolítás az albumból","Remove imported files to save storage. Unsupported file types will never be deleted, they remain in their current location.":"Távolítsa el az importált fájlokat a tárhely megtakarításához. A nem támogatott fájltípusok soha nem törlődnek, a jelenlegi helyükön maradnak.","Request failed - are you offline?":"A kérés sikertelen - offline vagy?","Request failed - invalid response":"Sikertelen kérés – érvénytelen válasz","Require non-photographic and low-quality images to be reviewed before they appear in search results.":"A nem fényképes és gyenge minőségű képeket a keresési eredményekben való megjelenésük előtt felül kell vizsgálni.","Resolution":"Felbontás","Restart":"Újraindítás","Restore":"Visszaállítás","Restored":"Visszaállított","Retry Limit":"Újrapróbálkozási korlát","Retype Password":"Gépelje be újra a jelszót","Review":"Felülvizsgálat","Role":"Szerepvállalás","Rows per page:":"Sorok oldalanként:","Satellite":"Műholdas","Save":"Mentés","Scan":"Szkennelt","Scan the QR code with your authenticator app or use the setup key shown below and then enter the generated verification code:":"Olvassa be a QR-kódot a hitelesítő alkalmazással, vagy használja az alább látható beállítási kulcsot, majd írja be a generált ellenőrző kódot:","Scans":"Szkennel","Scope":"Terjedelem","Search":"Keresés","Search and display photos on a map.":"Fényképek keresése és megjelenítése a térképen.","Season":"Évad","Secret":"Titok","Security and Access":"Biztonság és hozzáférés","Select":"Kiválasztás","Select a source folder to import files…":"Válassza ki a forrásmappát a fájlok importálásához…","Select date":"Válassza ki a dátumot","Select dates":"Válassza ki a dátumokat","Select or create an album":"Album kiválasztása vagy létrehozása","Select the files to upload…":"Válassza ki a feltölteni kívánt fájlokat…","Select the folder to be indexed…":"Válassza ki az indexelendő mappát…","Select Time":"Idő kiválasztása","Selection approved":"Kiválasztás jóváhagyva","Selection archived":"A kijelölés archiválva","Selection restored":"Kiválasztás visszaállítva","Sequential Name":"Sorozati név","Service URL":"Szolgáltatás URL-je","Services":"Szolgáltatások","Session":"Ülés","Session ID":"Munkamenet azonosítója","Sessions":"Ülések","Set as Album Cover":"Album borítóként beállítva","Settings":"Beállítások","Settings saved":"Beállítások elmentve","Setup":"Beállít","Share":"Megosztás","Share %{s}":"%{s} megosztása","Share your pictures with other apps and services.":"Ossza meg képeit más alkalmazásokkal és szolgáltatásokkal.","Show":"Előadás","Show all new faces":"Az összes új arc megjelenítése","Show Captions":"Feliratok megjelenítése","Show hidden":"Rejtett megjelenítése","Show less":"Mutass kevesebbet","Show more":"Mutass többet","Show server logs in Library.":"Szervernaplók megjelenítése a Könyvtárban.","Show Titles":"Címek megjelenítése","Sidecar":"Oldalkocsi","Sidecar Files":"Oldalkocsis fájlok","Sign in":"Bejelentkezés","Similar":"Hasonló","Size":"Méret","Slideshow":"Diavetítés","Slow":"Lassú","Software":"Szoftver","Software Update":"Szoftverfrissítés","Something went wrong, try again":"Valami rosszul ment, próbálja újra","Sort by":"Rendezés","Sort Order":"Sorrend","Sorted ascending.":"Növekvő sorrendben.","Sorted descending.":"Csökkenő sorrendben.","Source":"Forrás","Stack":"Csoportosítás","Stack files sharing the same unique image or instance identifier.":"Fájlok csoportosítása, amelyek ugyanazt az egyedi képet vagy példányazonosítót tartalmazzák.","Stack pictures taken at the exact same time and location based on their metadata.":"A metaadataik alapján csoportosítsa a pontosan ugyanabban az időben és helyen készült képeket.","Stackable":"Egymásra rakható","Stacks":"Stackek","Start":"Rajt","Start Page":"Kezdőlap","Static Size Limit: %{n}px":"Statikus méretkorlát: %{n}px","Status":"Állapot","Storage":"Tárhely","Streets":"Utcák","Subject":"Tárgy","Submit":"Küldje be a","Successfully activated":"Sikeres aktiválás","Successfully Connected":"Sikeresen csatlakoztatva","Successfully deleted":"Sikeresen törölve","Successfully verified":"Sikeresen ellenőrizve","Super Admin":"Super Admin","Support for additional services, like Google Drive, will be added over time.":"A további szolgáltatások, például a Google Drive támogatása jelenleg fejlesztés alatt áll.","Support Our Mission":"Támogassa küldetésünket","Sync":"Szinkronizálás","Sync raw and video files":"Nyers és videofájlok szinkronizálása","Taken":"Felvett","Teal":"A zöldeskék","TensorFlow is required for image classification, facial recognition, and detecting unsafe content.":"A TensorFlow-ra a képosztályozáshoz, az arcfelismeréshez és a nem biztonságos tartalom felismeréséhez van szükség.","Terrain":"Terep","Text":"Szöveg","Text too long":"A szöveg túl hosszú","Thank You for Your Support!":"Köszönjük a támogatást!","That's why PhotoPrism was built from the ground up to run wherever you need it, without compromising freedom, privacy, or functionality.":"Ezért a PhotoPrismet az alapoktól kezdve úgy építették fel, hogy bárhol fusson, ahol csak szüksége van rá, anélkül, hogy a szabadság, a magánélet vagy a funkcionalitás sérülne.","The index currently contains %{n} hidden files.":"Az index jelenleg %{n} rejtett fájlt tartalmaz.","Their format may not be supported, they haven't been converted to JPEG yet or there are duplicates.":"Előfordulhat, hogy a formátumuk nem támogatott, még nem konvertálták JPEG formátumba, vagy ismétlődők vannak.","Theme":"Téma","This field is required":"Ez a mező kötelező","This mounts the originals folder as a network drive and allows you to open, edit, and delete files from your computer or smartphone as if they were local.":"Ez hálózati meghajtóként csatlakoztatja az eredeti mappát, és lehetővé teszi a fájlok megnyitását, szerkesztését és törlését számítógépéről vagy okostelefonjáról, mintha azok helyi lennének.","Time UTC":"Idő UTC","Time Zone":"Időzóna","Timeout":"Időtúllépés","Title":{"Account":"Cím","Photo":"Cím","":"Cím"},"Title / Position":"Cím / Pozíció","Title too long":"A cím túl hosszú","to":"nak nek","To avoid being locked out of your account, please download, print or copy this recovery code now and keep it in a safe place.":"Annak elkerülése érdekében, hogy ne zárjon ki fiókjából, kérjük, töltse le, nyomtassa ki vagy másolja ki ezt a helyreállítási kódot most, és tartsa biztonságos helyen.","To generate a new app-specific password, please enter the name and authorization scope of the application and select an expiration date:":"Új alkalmazásspecifikus jelszó generálásához adja meg az alkalmazás nevét és engedélyezési hatókörét, és válasszon egy lejárati dátumot:","To switch to a new authenticator app or device, first deactivate two-factor authentication and then reactivate it:":"Ha új hitelesítő alkalmazásra vagy eszközre szeretne váltani, először deaktiválja a kéttényezős hitelesítést, majd aktiválja újra:","To upgrade, you can either enter an activation code or click \"Register\" to sign up on our website:":"A frissítéshez vagy megadhat egy aktiváló kódot, vagy a \"Regisztráció\" gombra kattintva regisztrálhat a weboldalunkon:","Today":"Ma","Toggle View":"Nézet váltása","Token":"Jelképes","Too many files selected":"Túl sok fájl van kiválasztva","Too many requests":"Túl sok kérés","Troubleshooting":"Hibaelhárítás","Try again using other filters or keywords.":"Próbálja újra más szűrők vagy kulcsszavak használatával.","Two-factor authentication has been enabled for your account.":"A kétlépcsős hitelesítés engedélyezve van fiókjában.","Type":"Típus","Unauthorized":"Jogosulatlan","Undo":"Visszavonás","Unique ID":"Egyéni azonosító","Unknown":"Ismeretlen","Unregistered":"Nem regisztrált","Unsorted":"Rendezés nélkül","Unstack":"Bontsa ki","Updated":"Frissítve","Updating faces":"Arcok frissítése","Updating index":"Index frissítése","Updating moments":"Frissítő pillanatok","Updating picture…":"Kép frissítése…","Updating previews":"Előnézetek frissítése","Updating stacks":"Csoportosítások frissítése","Upgrade":"Frissítés","Upgrade Now":"Frissítés most","Upload":"Feltöltés","Upload complete":"Feltöltés kész","Upload complete. Indexing…":"Feltöltés kész. Indexelés…","Upload failed":"Feltöltés sikertelen","Upload local files":"Helyi fájlok feltöltése","Upload Path":"Feltöltési útvonal","Upload to WebDAV and share links with friends.":"Töltse fel a WebDAV-ba, és ossza meg hivatkozásait barátaival.","Uploading %{n} of %{t}…":"%{n}/%{t} feltöltése…","Uploading photos…":"Fényképek feltöltése…","Uploading…":"Feltöltés…","Uploads that may contain such images will be rejected automatically.":"Az esetlegesen ilyen képeket tartalmazó feltöltések automatikusan elutasításra kerülnek.","Use Presets":"Előbeállítások használata","Use the following recovery code to access your account when you are unable to generate a valid verification code with your authenticator app:":"Ha nem tud érvényes ellenőrző kódot generálni a hitelesítő alkalmazással, használja a következő helyreállítási kódot a fiók eléréséhez:","Use your recovery code or contact an administrator for help.":"Használja a helyreállítási kódot, vagy forduljon a rendszergazdához segítségért.","User":"Felhasználó","User Guide":"Felhasználói útmutató","User Interface":"Felhasználói felület","Username":"Felhasználónév","Users":"Felhasználók","Vector":"Vektor","Vectors":"Vektorok","Verification Code":"Ellenőrző kód","Video":"Videó","Video Duration":"Időtartam","Videos":"Videók","View":"Kilátás","View search results as a list.":"A keresési eredmények listaként történő megtekintése.","Viewer":"Viewer","Visitor":"Látogató","Visual Similarity":"Csoportosítás hasonlóság szerint","Warning":"Figyelmeztetés","We appreciate your feedback!":"Nagyra értékeljük visszajelzéseit!","We do our best to respond within five business days or less.":"Igyekszünk öt munkanapon belül vagy annál rövidebb időn belül válaszolni.","Web Login":"Webes bejelentkezés","WebDAV":"WebDAV","WebDAV clients can connect to PhotoPrism using the following URL:":"A WebDAV-kliensek a következő URL-címen csatlakozhatnak a PhotoPrism-hez:","WebDAV clients, like Microsoft’s Windows Explorer or Apple's Finder, can connect directly to PhotoPrism.":"A WebDAV-kliensek, mint például a Microsoft Windows Intézője vagy az Apple Finder, közvetlenül csatlakozhatnak a PhotoPrism-hez.","WebDAV Upload":"WebDAV feltöltés","WebGL support is disabled in your browser":"A WebGL-támogatás le van tiltva a böngésződben","Website":"Weboldal","White":"Fehér","Work Details":"Részletek","Year":"Év","Yellow":"Sárga","Yes":"Igen","You are welcome to contact us at membership@photoprism.app for questions regarding your membership.":"A tagsággal kapcsolatos kérdésekkel kapcsolatban szívesen állunk rendelkezésére a membership@photoprism.app e-mail címen.","You can only download one album":"Csak egy albumot tölthet le","You can only download one label":"Csak egy címkét tölthet le","You can upload up to %{n} files for test purposes.":"Legfeljebb %{n} fájlt tölthet fel tesztelés céljából.","You may only select one item":"Csak egy elemet választhat ki","You may rescan your library to find additional faces.":"Újra beolvashatja könyvtárát, hogy további arcokat találjon.","Your account has been successfully connected.":"A fiókját sikeresen csatlakoztattuk.","Your browser does not support WebGL":"A böngésző nem támogatja a WebGL-t","Your continued support helps us provide regular updates and remain independent, so we can fulfill our mission and protect your privacy.":"Folyamatos támogatása segít nekünk olyan szolgáltatásokat nyújtani, mint a műholdas térképek és új funkciók fejlesztése.","Your library is continuously analyzed to automatically create albums of special moments, trips, and places.":"Könyvtárát folyamatosan elemzi a rendszer, hogy automatikusan létrehozza a különleges pillanatokat, utazásokat és helyeket tartalmazó albumokat.","Zoom in/out":"Nagyítás/kicsinyítés"}} \ No newline at end of file diff --git a/frontend/src/locales/json/zh.json b/frontend/src/locales/json/zh.json index fa5a64f8d..76f342c3f 100644 --- a/frontend/src/locales/json/zh.json +++ b/frontend/src/locales/json/zh.json @@ -1 +1 @@ -{"zh":{"{0} appended action":"{0}附加行动","{0} files":"{0}个文件","{0} files ({1} in total)":"{0}个文件(共{1}个文件)","{0} more":"{0}更多","{0} prepended action":"{0}预设行动","{0} selected":"{0}已选定","{0}-{1} of {2}":"{2}的{0}-{1}部分","%{n} albums found":"已找到 %{n} 个相册","%{n} files uploaded":"已上传 %{n} 个文件","%{n} folders found":"已找到 %{n} 个文件夹","%{n} GB of %{q} GB used":"%{n}%{q}的 GB使用的 GB","%{n} labels found":"已找到 %{n} 个标签","%{n} people found":"已找到 %{n} 个人物","%{n} pictures found":"已找到 %{n} 张图片","%{s} is too long":"%{s} 太长","%{s} is too short":"%{s}太短","1 hour":"1 小时","12 hours":"12 小时","2-Factor Authentication":"双因素身份验证","2FA":"2FA","4 hours":"4 小时","A click will copy it to your clipboard.":"点击复制到剪贴板。","A new version of %{s} is available:":"%{s} 的新版本已发布:","About":"关于","Access Token":"访问令牌","Account":"账户","Account created":"账户已创建","Account deleted":"账户已删除","Account restored":"账户已恢复","Accounts":"账户","Accuracy":"准确率","Action":"动作","Actions":"动作","Activate":"激活","Activate to remove sorting.":"激活以删除排序。","Activate to sort ascending.":"激活以升序排序。","Activate to sort descending.":"激活以降序排序。","Activation Code":"激活码","Add":"添加","Add %{s}?":"添加 %{s}?","Add Account":"添加账户","Add Album":"添加相册","Add files to your library via Web Upload.":"从网页上传文件到库。","Add Link":"添加链接","Add person?":"加人?","Add pictures from search results by selecting them.":"从搜索结果中选择添加图片。","Add to album":"添加到相册","Added":"已添加","Admin":"管理员","Advanced":"高级","After 1 day":"1 天后","After 3 days":"3 天后","After 7 days":"7 天后","After entering your password for confirmation, you can set up two-factor authentication with a compatible authenticator app or device:":"输入密码确认后,您可以使用兼容的身份验证器应用或设备设置双重身份验证:","After one month":"1 个月后","After one year":"1 年后","After selecting pictures from search results, you can add them to an album using the context menu.":"从搜索结果中选择图片后,你可以使用上下文菜单将它们添加到相册中。","After two months":"2 个月后","After two weeks":"两周后","Album":"相册","Album Backups":"相册备份","Album created":"相册已创建","Albums":"相册","Albums deleted":"相册已删除","All":"全部","All %{n} albums loaded":"%{n} 本相册已加载","All %{n} labels loaded":"%{n} 个标签已加载","All %{n} people loaded":"%{n} 个人物已加载","All Cameras":"全部相机","All Categories":"全部分类","All Colors":"全部颜色","All Countries":"全部国家","All fields are required":"所有字段均为必填项","All files from import folder":"导入文件夹中的所有文件","All Lenses":"全部镜头","All Months":"全部月份","All originals":"全部源图","All Years":"全部年份","Alternatively, you can upload files directly to WebDAV servers like Nextcloud.":"或者,你也可以上传文件到类似 NextCloud 的 WebDAV 服务端。","Altitude":"海拔","Altitude (m)":"海拔(米)","AM":"上午","Animated":"动画","Animation":"动画","Any private photos and videos remain private and won't be shared.":"任何私有照片和视频都保持私有,不会被分享。","API Key":"API 密钥","Application":"应用","Apply":"应用","Approve":"批准","Apps and Devices":"应用程序和设备","Archive":"归档","Archived":"已归档","Are you sure you want to archive the selection?":"你确定要归档所选内容吗?","Are you sure you want to delete these albums?":"你确定要删除这些相册吗?","Are you sure you want to delete these labels?":"你确定要删除这些标签吗?","Are you sure you want to delete this account?":"你确定要删除此账号吗?","Are you sure you want to permanently delete these pictures?":"你确定要永久删除这些图片吗?","Are you sure you want to permanently delete this file?":"你确定要永久的删除这个文件吗?","Are you sure?":"你确定?","Artist":"艺术家","Aspect Ratio":"长宽比","Audio":"音频","Authentication":"认证","Auto":"汽车","Back":"后退","Back to top":"返回页首","Backup":"备份","Badge":"徽章","Base Path":"基本路径","Become a member today, support our mission and enjoy our member benefits!":"今天就成为会员,支持我们的使命,享受我们的会员福利!","Being 100% self-funded and independent, we can promise you that we will never sell your data and that we will always be transparent about our software and services.":"作为 100% 自筹资金和独立的公司,我们可以向您保证,我们永远不会出售您的数据,并且我们将始终对我们的软件和服务保持透明。","Bio":"简介","Birth Date":"出生日期","Black":"黑","Blackman: Lanczos Modification, Less Ringing Artifacts":"Blackman:修改后的 Lanczos 算法,振铃效应更小","Blue":"蓝","Brown":"棕","Browse":"浏览","Browse and edit image classification labels.":"浏览和编辑图像分类标签。","Browse and share your pictures organized into monthly albums.":"浏览并分享按月整理的照片。","Browse Files":"浏览文件","Browse indexed files and folders in Library.":"浏览库中已索引的文件和文件夹。","Bug Report":"上报问题","Busy, please wait…":"正在忙碌,请稍候…","By using the software and services we provide, you agree to our terms of service, privacy policy, and code of conduct.":"通过使用我们提供的软件和服务,您同意我们的服务条款、隐私政策和行为准则。","Calendar":"日历","Camera":"相机","Camera Serial":"相机序列号","Can't access your authenticator app or device?":"无法访问您的身份验证应用程序或设备?","Can't load more, limit reached":"无法加载更多内容,已达上限","Can't select more items":"无法选择更多项目","Cancel":"取消","Caption":"标题","Cards":"卡片","Carousel slide {0} of {1}":"旋转木马幻灯片 {0} of {1}","Category":"分类","Change Avatar":"改变头像","Change Password":"更改密码","Change personal profile and security settings.":"修改个人资料及安全设置。","Change photo titles, locations, and other metadata.":"更改照片标题、位置及其他元数据。","Change private flag":"更改私有标记","Changes could not be saved":"无法保存变更","Changes successfully saved":"更改成功保存","Changes to the advanced settings require a restart to take effect.":"对高级设置的更改需要重新启动才能生效。","Checked":"已确认","Chroma":"色度","Cleaning index and cache":"清理索引和缓存","Cleanup":"清理","Clear {0}":"清除 {0}","Client":"客户","Client Credentials":"客户证书","Close":"关闭","Codec":"编解码器","Color":"颜色","Color Profile":"颜色简介","Colors":"颜色","Compare Editions":"版本比较","Complete Rescan":"完全重新扫描","Confidence":"置信度","Confirm":"确认","Connect":"连接","Connect via WebDAV":"使用 WebDAV 连接","Connected":"已连接","Contact Details":"联系方式","Contact Us":"联系我们","Contains %{n} pictures.":"包含 %{n} 张图片。","Contains one picture.":"包含一张图片。","Content":"内容","Continue":"继续","Continue with %{provider}":"继续 %{provider}","Contributor":"撰稿人","Converting":"转换中","Copied to clipboard":"已复制到剪贴板","Copy":"复制","Copyright":"版权","Couldn't find anything.":"找不到任何东西。","Country":"国家","Create Account":"创建账户","Create album":"创建相册","Create regular backups based on the configured schedule.":"根据配置的时间表创建索引备份。","Create YAML files to back up album metadata.":"创建 YAML 文件来备份相册元数据。","Create YAML sidecar files to back up picture metadata.":"创建 YAML sidecar 文件来备份图片元数据。","Created":"已创建","Creating thumbnails for":"创建缩略图,用于","Cubic: Moderate Quality, Good Performance":"Cubic: 质量适中,性能良好","Current Password":"当前密码","Custom":"定制","Cyan":"青","Daily":"每日","Database Backups":"数据库备份","Day":"天","Deactivate":"停用","Debug Logs":"调试日志","Default":"默认","Default Folder":"默认文件夹","Delete":"删除","Delete All":"全部删除","Delete all?":"全部删除?","Delete orphaned index entries, sidecar files and thumbnails.":"删除孤立索引项、副卡文件和缩略图。","Description":"描述","Detailed instructions can be found in our User Guide.":"详细说明可以在我们的用户指南中找到。","Details":"细节","Dimensions":"尺寸","Disable Backups":"禁用备份","Disable Darktable":"禁用 Darktable","Disable ExifTool":"禁用 ExifTool","Disable features that require write permission for the originals folder.":"禁用需要原件文件夹写入权限的功能。","Disable FFmpeg":"禁用 FFmpeg","Disable ImageMagick":"禁用ImageMagick","Disable interactive world maps and reverse geocoding.":"禁用交互式世界地图和反向地理编码。","Disable Places":"禁用地点","Disable RawTherapee":"禁用 RawTherapee","Disable TensorFlow":"禁用 TensorFlow","Disable Vectors":"禁用载体","Disable WebDAV":"禁用 WebDAV","Disables vector graphics support.":"禁用矢量图形支持。","Disables video transcoding and thumbnail extraction.":"禁用视频转码和缩略图提取。","Discover":"探索","Dismiss":"解散","Display Name":"昵称","Display picture captions in search results.":"在搜索结果中显示图片说明。","Display picture titles in search results.":"在搜索结果中显示图片标题。","Document":"文件","Documents":"文件","Don't use Darktable to convert RAW images.":"不使用 Darktable 转换 RAW 文件。","Don't use ImageMagick to convert images.":"不要用ImageMagick来转换图像。","Don't use RawTherapee to convert RAW images.":"不使用 RawTherapee 转换 RAW 文件。","Done":"完成","Done.":"完成。","Download":"下载","Download only original media files, without any automatically generated files.":"只下载原始媒体文件,不下载任何自动生成的文件。","Download remote files":"下载远端文件","Download single files and zip archives.":"下载单个文件并用 zip 压缩。","Downloading…":"下载中…","Downscaling Filter":"缩小方法","Drag and drop files here":"在此处拖放文件","Due to the high volume of emails we receive, our team may be unable to get back to you immediately.":"由于我们收到大量的电子邮件,我们的团队可能无法立即回复你。","Duplicates will be skipped and only appear once.":"重复项将被跳过,仅出现一次。","Duration":"持续时间","Dynamic Previews":"动态预览","Dynamic Size Limit: %{n}px":"动态尺寸限制:%{n}px","E-Mail":"电子邮件","Edit":"编辑","Edit %{s}":"编辑 %{s}","Edit Account":"编辑账户","Edit Photo":"编辑照片","Edited":"已编辑","Email":"电子邮箱","Enable debug mode to display additional logs and help with troubleshooting.":"启用调试模式可显示更多日志,帮助排除故障。","Enable new features that may be incomplete or unstable.":"启用可能不完整或不稳定的新功能。","Enables RAW converter presets. May reduce performance.":"启用 RAW 转换器预设,可能会降低性能。","Enabling two-factor authentication means that you will need a randomly generated verification code to log in, so even if someone gains access to your password, they will not be able to access your account.":"启用双重身份验证意味着您需要随机生成的验证码才能登录,因此即使有人获得了您的密码,他们也无法访问您的帐户。","Enter date":"输入日期","Enter dates":"输入日期","Enter the code generated by your authenticator app:":"输入验证程序生成的代码:","Enter verification code":"输入验证码","Enter your password to confirm the action and continue:":"输入您的密码确认操作并继续:","Error":"错误","Errors":"错误","Estimate":"估算","Estimate Locations":"估计地点","Estimate the approximate location of pictures without GPS coordinates.":"在没有 GPS 坐标的情况下估算图片的大致位置。","Every two days":"每两天","Exclude content marked as private from search results, shared albums, labels, and places.":"排除搜索结果中标记私有的内容,已共享的相册、标签和地点。","Exclude hidden":"排除已隐藏","ExifTool is required for full support of XMP metadata, videos and Live Photos.":"要完全支持视频、实时照片和 XMP,需要使用 ExifTool 提取元数据。","Experimental Features":"实验特性","Expires":"时限","Exposure":"曝光度","Extract still images and generate thumbnails while indexing.":"提取静态图像并在编制索引时生成缩略图。","F Number":"光圈数","Face":"面部","Faces":"面部","Failed removing link":"删除链接失败","Failed to connect account.":"连接账户失败。","Failed updating link":"更新链接失败","Family Name":"姓","Fast":"快","Favorite":"收藏","Favorites":"收藏","Feature Request":"特性请求","Feedback":"反馈","Female":"女","File":"文件","File Browser":"文件浏览器","File Conversion":"文件转换","File Name":"文件名","File Size":"文件大小","Filename":"文件名","Files":"文件","Files with sequential names like 'IMG_1234 (2)' and 'IMG_1234 (3)' belong to the same picture.":"顺序名称的文件如“IMG_1234 (2)”和“IMG_1234 (3)”的文件属于同一图片。","First page":"第一页","Focal Length":"焦距","Folder":"文件夹","Folder contains %{n} files":"文件夹中有 %{n} 个文件","Folder is empty":"文件夹为空","Folders":"文件夹","Forgot password?":"忘记密码?","FPS":"帧数","Frames":"框架","Full Access":"完全访问","Fullscreen":"全屏","General":"一般","Generate":"产生","Generate albums of special moments, journeys, and places.":"自动创建特殊时刻、旅行和地点的相册。","Generate Previews":"生成预览","Generated":"生成","Get Started":"开始","Given Name":"名","Global Options":"全局选项","Go to page {0}":"转到 {0} 页","Gold":"金","Green":"绿","Grey":"灰","Guest":"访客","Hash":"哈希","Help":"帮助","Help & Support":"帮助和支持","Hidden":"隐藏","Hidden Files":"隐藏文件","Hide":"隐藏","Hide photos that have been moved to archive.":"隐藏已归档的照片。","High":"高","High Dynamic Range (HDR)":"高动态范围渲染(HDR)","How can we help?":"我们可以帮您吗?","Hybrid":"混合地图","If you lose access to your authenticator app or device, you can use your recovery code to regain access to your account.":"如果您无法访问身份验证器应用或设备,则可以使用恢复代码重新访问您的帐户。","Image":"图片","Image Quality":"图像质量","Import":"导入","Import failed":"导入失败","Imported files will be sorted by date and given a unique name to avoid duplicates.":"导入的文件将按日期排序,并指定一个唯一的名称以避免重复。","Imported files will be sorted by date and given a unique name.":"导入的文件将按日期排序,并指定一个唯一的名称。","Importing %{s}…":"导入 %{s} 中…","Importing files to originals…":"导入文件到源…","in":"于","In case pictures you expect are missing, please rescan your library and wait until indexing has been completed.":"如果您想要的图片丢失,请重新扫描库并等待索引完成。","Include RAW image files when downloading stacks and archives.":"在下载堆栈和档案时包括RAW图像文件。","Include sidecar files when downloading stacks and archives.":"在下载堆栈和档案时包括sidecar文件。","Increase storage size or delete files to continue.":"增加存储空间或删除文件以继续。","Index":"索引","Index and import files through the user interface.":"通过用户界面索引和导入文件。","Indexing":"索引中","Indexing failed":"索引失败","Indexing media and sidecar files…":"索引媒体和附属文件…","Information":"信息","Instance ID":"实例 ID","Insufficient storage.":"存储不足","Interval":"间隔","Invalid":"无效","Invalid address":"无效地址","Invalid country":"无效国家","Invalid date":"无效日期","Invalid parameters":"参数无效","Invalid photo selected":"选择了无效的照片","Invalid time":"无效时间","Invalid URL":"无效 URL","It is a one-time use code that will disable 2FA for your account when you use it.":"这是一个一次性使用的代码,当您使用它时将禁用您帐户的 2FA。","Item":"项目","Items per page:":"每页项目:","JPEG Quality: %{n}":"JPEG 质量:%{n}","JPEG Size Limit: %{n}px":"JPEG 尺寸限制:%{n}px","JPEGs and thumbnails are automatically rendered as needed.":"系统会根据需要自动生成缩略图及JPEG格式的预览图。","Keywords":"关键字","Label":"标签","Labels":"标签","Labels deleted":"标签已移除","Lanczos: Detail Preservation, Minimal Artifacts":"Lanczos:保留细节,虚影较小","Language":"语言","Last Active":"最后一次活动","Last Login":"最后一次登录","Last page":"最后一页","Last Sync":"上次同步","Last Used":"最后使用","Latitude":"纬度","LDAP/AD":"LDAP/AD","Learn more":"进一步了解","Learn More":"了解更多","Legal Information":"法律信息","Lens":"镜头","Library":"资料库","License":"许可证","Like":"喜欢","Lime":"淡绿","Limit reached, showing first %{n} files":"已达到限制,显示前 %{n} 个文件","Linear: Very Smooth, Best Performance":"Linear: 非常平滑,性能最佳","Link":"链接","List":"列表","List View":"列表查看","Live":"实况","Live Photos":"实况照片","Load more":"加载更多","Loading items...":"正在加载项目...","Loading...":"正在加载...","Local":"当地","Local Time":"本地时间","Location":"位置","Log messages appear here whenever PhotoPrism comes across broken files, or there are other potential issues.":"每当 PhotoPrism 遇到损坏的文件或其他潜在问题时,日志消息就会出现在这里。","Login":"登录","Logout":"登出","Logs":"日志","Longitude":"经度","Low":"低","Magenta":"洋红","Main Color":"主色调","Male":"男","Manage Account":"管理账户","Manual":"手动","Manual Upload":"手动上传","Maps":"地图","Marker":"标记","Maximum number of accounts has been reached.":"账户数已达到上限。","Media":"媒体","Medium":"中","Membership":"会员资格","Merge %{a} with %{b}?":"将 %{a} 与 %{b} 合并?","Message":"留言","Message sent":"消息已发送","Metadata":"元数据","Metrics":"指标","Minimize":"最小化","Missing":"缺失","Missing or invalid configuration":"配置缺失或无效","Moments":"瞬间","Monochrome":"黑白","Month":"月","More options":"更多选择","Mosaic":"马赛克","Most Relevant":"最相关","Move Files":"移动文件","Must have at least %{n} characters.":"必须至少有%{n}个字符。","Mute":"静音","Name":"名称","Name too long":"名称太长","Never":"永不","New":"新","New Password":"新密码","Newest First":"最新优先","Next":"下一页","Next page":"下一页","Next visual":"下一个视觉","No":"否","No albums found":"找不到相册","No data available":"无数据","No labels found":"找不到标签","No matching records found":"未找到匹配记录","No more":"没有更多","No people found":"找不到人物","No pictures found":"找不到图片","No recently edited pictures":"没有最近编辑过的图片","No server connection":"无服务器连接","No servers configured.":"沒有服务器配置。","No services configured.":"没有配置服务。","No thanks":"不用了,谢谢","No warnings or error containing this keyword. Note that search is case-sensitive.":"没有包含此关键字的警告或错误,请注意,搜索区分大小写。","Non-photographic and low-quality images require a review before they appear in search results.":"非照片和低质量图像出现在搜索结果中前需要进行审查。","None":"无","Not allowed":"不允许","Not found":"未找到","Not sorted.":"未分类。","Not supported":"不支持","Note you may manually manage your originals folder and importing is optional.":"如果希望保持原有文件名及目录结构,请直接管理源文件夹,不要使用导入功能。","Note:":"注意:","Note: Only WebDAV servers, like Nextcloud or PhotoPrism, can be configured as remote service for backup and file upload.":"注意:只能将 WebDAV 服务器(如 Nextcloud 或 PhotoPrism)配置为远程服务,以进行备份和文件上传。","Notes":"备注","Nothing to see here yet.":"暂无数据。","Nothing was found.":"没有发现任何问题。","Offline":"离线","OIDC":"奥伊德数据中心","OK":"好的","Oldest First":"最旧优先","On Windows, enter the following resource in the connection dialog:":"在 Windows 上,连接对话框中使用以下资源:","On-demand generation of thumbnails may cause high CPU and memory usage. It is not recommended for resource-constrained servers and NAS devices.":"按需生成缩略图可能会导致较高的 CPU 和内存使用率。不建议资源有限的服务器和 NAS 设备使用。","Once a week":"每周一次","One album found":"已找到一本相册","One file found":"已找到一个文件","One file uploaded":"已上传一个文件","One folder found":"已找到一个文件夹","One label found":"已找到一个标签","One person found":"已找到一个人物","One picture found":"已发现一张图片","Only locally managed accounts can be set up for authentication with 2FA.":"仅可设置本地管理的帐户进行 2FA 身份验证。","Open":"开放","optional":"可选的","or":"或","Orange":"橙","Organization":"组织机构","Orientation":"朝向","Original file names will be stored and indexed.":"原始文件名将被存储并索引。","Original Name":"源文件名","Originals":"源","Other":"其他","Our mission is to provide the most user- and privacy-friendly solution to keep your pictures organized and accessible.":"我们的使命是提供对绝大部分用户——及隐私最友好的解决方案,以保持你的照片有条理和可访问。","Outdoor":"户外地图","Page {0}, Current page":"第 {0} 页,当前页","Pages":"页面","Pagination Navigation":"分页导航","Panorama":"全景","Panoramas":"全景","Password":"密码","Password changed":"密码已更改","People":"人物","People you share a link with will be able to view public contents.":"与您共享链接的人将可以查看公共内容。","Permanently deleted":"已永久删除","Permanently remove files to free up storage.":"永久删除文件以释放存储空间。","Person":"个人","Personal":"个人","Photo":"相片","PhotoPrism is 100% self-funded and independent.":"PhotoPrism是100%自筹资金和独立的。","PhotoPrism+ Membership":"照片棱镜+会员资格","Photos":"照片","Picture Title":"图片标题","Pink":"粉红","Place":"地点","Place & Time":"地点和时间","Places":"地点","Please confirm your new password.":"请确认新密码。","Please copy the following randomly generated app password and keep it in a safe place, as you will not be able to see it again:":"请复制以下随机生成的应用程序密码并将其保存在安全的地方,因为您将无法再次看到它:","Please do not upload any private, unlawful or offensive pictures.":"请勿上传任何私人、非法或攻击性图片。","Please don't upload photos containing offensive content.":"请不要上传包含令人反感的内容的照片。","Please enter OTP character {0}":"请输入 OTP 字符 {0}","Please note that changing your password will log you out on other devices and browsers.":"请注意,修改密码将退出你已登录在其他设备和浏览器上的账号。","Please restart your instance for the changes to take effect.":"请重新启动您的实例以使变化生效。","Please wait…":"请等待…","PM":"下午","PNG Size Limit: %{n}px":"PNG 尺寸限制:%{n}px","Portrait":"人像","Preserve filenames":"保留文件名","Press enter to create a new album.":"按下 Enter 键创建一个新相册。","Prevent database and album backups as well as YAML sidecar files from being created.":"防止创建数据库和相册备份以及 YAML sidecar 文件。","Prevent other apps from accessing PhotoPrism as a shared network drive.":"防止其他应用程序将 PhotoPrism 作为共享网络驱动器访问。","Preview":"预览","Preview Images":"图片预览","Previous":"上一页","Previous page":"上一页","Previous visual":"上一个视觉","Primary":"主文件","Private":"私有","Product Feedback":"产品反馈","Projection":"投影","Purple":"紫","Quality Filter":"质量筛选","Quality Score":"质量得分","r":"r","Random":"随机","Rating {0} of {1}":"评级 {0} of {1}","Raw":"原始数据","RAW":"RAW","Re-index all originals, including already indexed and unchanged files.":"重新索引所有源文件,包括已索引和未更改的文件。","Read-Only Mode":"只读模式","Recently Added":"最近添加","Recently Archived":"最近存档","Recently Edited":"最近编辑","Recognition starts after indexing has been completed.":"识别工作在索引完成后开始。","Recognize faces so people can be assigned and found.":"识别人脸,以便能够找到特定的人。","Recognized":"已识别","Recovery Code":"恢复代码","Red":"红","Refresh":"刷新","Regions":"地区","Register":"注册","Reload":"重载","Reloading…":"重载中…","Remote Sync":"远端同步","Remove":"移除","remove failed: unknown album":"移除失败:未知相册","Remove from Album":"从相册中移除","Remove imported files to save storage. Unsupported file types will never be deleted, they remain in their current location.":"移除导入的文件以节省存储空间,不支持的文件类型将永远不会被删除,它们会保留在它们当前的位置。","Request failed - are you offline?":"请求失败 - 你是否离线?","Request failed - invalid response":"请求失败——无效的响应","Require non-photographic and low-quality images to be reviewed before they appear in search results.":"要求非图片和低质量图片在出现在搜索结果中之前必须经过审核。","Resolution":"分辨率","Restart":"重新启动","Restore":"恢复","Restored":"恢复","Retry Limit":"重试限制","Retype Password":"重新输入密码","Review":"审查","Role":"角色","Rows per page:":"每页行数:","Satellite":"卫星","Save":"保存","Scan":"扫描","Scan the QR code with your authenticator app or use the setup key shown below and then enter the generated verification code:":"使用您的身份验证器应用程序扫描二维码或使用下面显示的设置键,然后输入生成的验证码:","Scans":"扫描","Scope":"范围","Search":"搜索","Search and display photos on a map.":"在地图上搜索并显示照片。","Season":"季节","Secret":"密钥","Security and Access":"安全和访问","Select":"选择","Select a source folder to import files…":"选择要导入文件的源文件夹…","Select date":"选择日期","Select dates":"选择日期","Select or create an album":"选择或创建相册","Select the files to upload…":"选择要上传的文件…","Select the folder to be indexed…":"选择要编制索引的文件夹…","Select Time":"选择时间","Selection approved":"所选项已批准","Selection archived":"所选项已归档","Selection restored":"所选项已恢复","Sequential Name":"顺序名称","Service URL":"服务 URL","Services":"服务","Session":"会议","Session ID":"会议ID","Sessions":"会议","Set as Album Cover":"设为专辑封面","Settings":"设置","Settings saved":"设置已保存","Setup":"设置","Share":"分享","Share %{s}":"分享 %{s}","Share your pictures with other apps and services.":"与其他应用程序和服务分享你的图片。","Show":"显示","Show all new faces":"显示所有的新面孔","Show Captions":"显示字幕","Show hidden":"显示隐藏","Show less":"显示更少","Show more":"显示更多","Show server logs in Library.":"在库中显示服务器日志。","Show Titles":"显示标题","Sidecar":"附属","Sidecar Files":"Sidecar 文件","Sign in":"登录","Similar":"相似","Size":"尺寸","Slideshow":"幻灯片","Slow":"慢","Software":"软件","Software Update":"软件更新","Something went wrong, try again":"出错了,再试一次","Sort by":"排序方式","Sort Order":"排序","Sorted ascending.":"按升序排列。","Sorted descending.":"按降序排列。","Source":"来源","Stack":"堆","Stack files sharing the same unique image or instance identifier.":"文件堆共享相同的唯一图像或实例标识符。","Stack pictures taken at the exact same time and location based on their metadata.":"根据图片的元数据,堆叠在相同的时间和地点拍摄的图片。","Stackable":"可堆叠","Stacks":"堆","Start":"开始","Start Page":"起始页","Static Size Limit: %{n}px":"静态渲染尺寸限制: %{n}px","Status":"状态","Storage":"存储","Streets":"街道图","Subject":"主题","Submit":"提交","Successfully activated":"已成功激活","Successfully Connected":"账户成功连接","Successfully deleted":"已成功删除","Successfully verified":"验证成功","Super Admin":"超级管理员","Support for additional services, like Google Drive, will be added over time.":"随着时间的推移,将增加对其他服务的支持,例如 Google 云端硬盘。","Support Our Mission":"支持我们的使命","Sync":"同步","Sync raw and video files":"同步 Raw 和视频文件","Taken":"纳入于","Teal":"蓝绿","TensorFlow is required for image classification, facial recognition, and detecting unsafe content.":"图像分类、面部识别和检测不安全内容都需要使用 TensorFlow。","Terrain":"地形","Text":"文本","Text too long":"文字太长","Thank You for Your Support!":"感谢你的支持!","That's why PhotoPrism was built from the ground up to run wherever you need it, without compromising freedom, privacy, or functionality.":"这就是为什么PhotoPrism从一开始就能在你需要的地方运行,而不影响自由、隐私或功能。","The index currently contains %{n} hidden files.":"该索引当前包含 %{n} 个隐藏文件。","Their format may not be supported, they haven't been converted to JPEG yet or there are duplicates.":"它们的格式可能不受支持,它们尚未转换为 JPEG 或存在重复项。","Theme":"主题","This field is required":"该字段为必填字段","This mounts the originals folder as a network drive and allows you to open, edit, and delete files from your computer or smartphone as if they were local.":"这会将源文件夹安装为网络驱动器,并允许您从计算机或智能手机中打开,编辑和删除文件,就像它们是本地文件一样。","Time UTC":"UTC 时间","Time Zone":"时区","Timeout":"超时","Title":{"Account":"标题","Photo":"标题","":"标题"},"Title / Position":"职称/职位","Title too long":"标题太长了","to":"到","To avoid being locked out of your account, please download, print or copy this recovery code now and keep it in a safe place.":"为了避免您的帐户被锁定,请立即下载、打印或复制此恢复代码并将其保存在安全的地方。","To generate a new app-specific password, please enter the name and authorization scope of the application and select an expiration date:":"生成新的应用专用密码,请输入应用程序的名称、授权范围并选择到期日期:","To switch to a new authenticator app or device, first deactivate two-factor authentication and then reactivate it:":"要切换到新的身份验证器应用程序或设备,请先停用双重身份验证,然后重新激活它:","To upgrade, you can either enter an activation code or click \"Register\" to sign up on our website:":"要升级,你可以输入激活码或点击 \"注册\",在我们的网站上注册:","Today":"今天","Toggle View":"切换视图","Token":"令牌","Too many files selected":"选择的文件过多","Too many requests":"请求太多","Troubleshooting":"故障排除","Try again using other filters or keywords.":"使用其他过滤器或关键字再试一次。","Two-factor authentication has been enabled for your account.":"您的帐户已启用双重身份验证。","Type":"类型","Unauthorized":"未经授权的","Undo":"撤销","Unique ID":"唯一标识符","Unknown":"未知","Unregistered":"未注册的","Unsorted":"未分类","Unstack":"取消堆叠","Updated":"已更新","Updating faces":"更新面部","Updating index":"更新索引","Updating moments":"更新时刻","Updating picture…":"更新图片…","Updating previews":"更新预览","Updating stacks":"更新堆","Upgrade":"升级","Upgrade Now":"立即升级","Upload":"上传","Upload complete":"上传完成","Upload complete. Indexing…":"上传完成,索引中…","Upload failed":"上传失败","Upload local files":"上传本地文件","Upload Path":"上传路径","Upload to WebDAV and share links with friends.":"上传到 WebDAV 并与朋友共享链接。","Uploading %{n} of %{t}…":"上传 %{n} / %{t} …","Uploading photos…":"上传照片…","Uploading…":"上传中…","Uploads that may contain such images will be rejected automatically.":"可能包含此类图像的上传将被自动拒绝。","Use Presets":"使用预设","Use the following recovery code to access your account when you are unable to generate a valid verification code with your authenticator app:":"当您无法使用身份验证器应用生成有效的验证码时,请使用以下恢复代码访问您的帐户:","Use your recovery code or contact an administrator for help.":"使用恢复密码或联系管理员寻求帮助。","User":"用户","User Guide":"用户指南","User Interface":"用户界面","Username":"用户名","Users":"用户","Vector":"矢量","Vectors":"媒介物","Verification Code":"验证码","Video":"视频","Video Duration":"视频时长","Videos":"视频","View":"视图","View search results as a list.":"以列表形式查看搜索结果。","Viewer":"浏览者","Visitor":"访客","Visual Similarity":"视觉相似性","Warning":"警告","We appreciate your feedback!":"感谢您的反馈!","We do our best to respond within five business days or less.":"我们尽力在五个工作日或更短时间内作出回应。","Web Login":"网络登录","WebDAV":"WebDAV","WebDAV clients can connect to PhotoPrism using the following URL:":"WebDAV 客户端可以使用以下 URL 连接到 PhotoPrism:","WebDAV clients, like Microsoft’s Windows Explorer or Apple's Finder, can connect directly to PhotoPrism.":"WebDAV 客户端(例如 Microsoft 的 Windows 资源管理器或 Apple 的 Finder)可以直接连接到 PhotoPrism。","WebDAV Upload":"WebDAV 上传","WebGL support is disabled in your browser":"您的浏览器已禁用 WebGL 支持","Website":"网站","White":"白","Work Details":"作品详情","Year":"年","Yellow":"黄","Yes":"是","You are welcome to contact us at membership@photoprism.app for questions regarding your membership.":"欢迎你与我们联系,membership@photoprism.app,询问有关你的会员资格的问题。","You can only download one album":"你只能下载一个相册","You can only download one label":"你只能下载一个标签","You can upload up to %{n} files for test purposes.":"您最多可以上传 %{n} 个文件用于测试。","You may only select one item":"你只能选择一项","You may rescan your library to find additional faces.":"你可以重新扫描你的库以找到更多的面部。","Your account has been successfully connected.":"您的账户已成功连接。","Your browser does not support WebGL":"您的浏览器不支持 WebGL","Your continued support helps us provide regular updates and remain independent, so we can fulfill our mission and protect your privacy.":"您的持续支持有助于我们提供定期更新并保持独立,因此我们可以履行我们的使命并保护您的隐私。","Your library is continuously analyzed to automatically create albums of special moments, trips, and places.":"你的库被不断分析,以自动创建特殊时刻、旅行和地点的相册。","Zoom in/out":"缩放"}} \ No newline at end of file +{"zh":{"{0} appended action":"{0}附加行动","{0} files":"{0}个文件","{0} files ({1} in total)":"{0}个文件(共{1}个文件)","{0} more":"{0}更多","{0} prepended action":"{0}预设行动","{0} selected":"{0}已选定","{0}-{1} of {2}":"{2}的{0}-{1}部分","%{n} albums found":"已找到 %{n} 个相册","%{n} files uploaded":"已上传 %{n} 个文件","%{n} folders found":"已找到 %{n} 个文件夹","%{n} GB of %{q} GB used":"已使用%{n}GB,共%{q}GB","%{n} labels found":"已找到 %{n} 个标签","%{n} people found":"已找到 %{n} 个人物","%{n} pictures found":"已找到 %{n} 张图片","%{s} is too long":"%{s} 太长","%{s} is too short":"%{s}太短","1 hour":"1 小时","12 hours":"12 小时","2-Factor Authentication":"双因素身份验证","2FA":"2FA","4 hours":"4 小时","A click will copy it to your clipboard.":"点击复制到剪贴板。","A new version of %{s} is available:":"%{s} 的新版本已发布:","About":"关于","Access Token":"访问令牌","Account":"账户","Account created":"账户已创建","Account deleted":"账户已删除","Account restored":"账户已恢复","Accounts":"账户","Accuracy":"准确率","Action":"动作","Actions":"动作","Activate":"激活","Activate to remove sorting.":"激活以删除排序。","Activate to sort ascending.":"激活以升序排序。","Activate to sort descending.":"激活以降序排序。","Activation Code":"激活码","Add":"添加","Add %{s}?":"添加 %{s}?","Add Account":"添加账户","Add Album":"添加相册","Add files to your library via Web Upload.":"从网页上传文件到库。","Add Link":"添加链接","Add person?":"新增人物?","Add pictures from search results by selecting them.":"从搜索结果中选择添加图片。","Add to album":"添加到相册","Added":"已添加","Admin":"管理员","Advanced":"高级","After 1 day":"1 天后","After 3 days":"3 天后","After 7 days":"7 天后","After entering your password for confirmation, you can set up two-factor authentication with a compatible authenticator app or device:":"输入密码确认后,您可以使用兼容的身份验证器应用或设备设置双重身份验证:","After one month":"1 个月后","After one year":"1 年后","After selecting pictures from search results, you can add them to an album using the context menu.":"从搜索结果中选择图片后,你可以使用上下文菜单将它们添加到相册中。","After two months":"2 个月后","After two weeks":"两周后","Album":"相册","Album Backups":"相册备份","Album created":"相册已创建","Albums":"相册","Albums deleted":"相册已删除","All":"全部","All %{n} albums loaded":"%{n} 本相册已加载","All %{n} labels loaded":"%{n} 个标签已加载","All %{n} people loaded":"%{n} 个人物已加载","All Cameras":"全部相机","All Categories":"全部分类","All Colors":"全部颜色","All Countries":"全部国家","All fields are required":"所有字段均为必填项","All files from import folder":"导入文件夹中的所有文件","All Lenses":"全部镜头","All Months":"全部月份","All originals":"全部源图","All Years":"全部年份","Alternatively, you can upload files directly to WebDAV servers like Nextcloud.":"或者,你也可以上传文件到类似 NextCloud 的 WebDAV 服务端。","Altitude":"海拔","Altitude (m)":"海拔(米)","AM":"上午","Animated":"动画","Animation":"动画","Any private photos and videos remain private and won't be shared.":"任何私有照片和视频都保持私有,不会被分享。","API Key":"API 密钥","Application":"应用","Apply":"应用","Approve":"批准","Apps and Devices":"应用程序和设备","Archive":"归档","Archived":"已归档","Are you sure you want to archive the selection?":"你确定要归档所选内容吗?","Are you sure you want to delete these albums?":"你确定要删除这些相册吗?","Are you sure you want to delete these labels?":"你确定要删除这些标签吗?","Are you sure you want to delete this account?":"你确定要删除此账号吗?","Are you sure you want to permanently delete these pictures?":"你确定要永久删除这些图片吗?","Are you sure you want to permanently delete this file?":"你确定要永久的删除这个文件吗?","Are you sure?":"你确定?","Artist":"艺术家","Aspect Ratio":"长宽比","Audio":"音频","Authentication":"认证","Auto":"汽车","Back":"后退","Back to top":"返回页首","Backup":"备份","Badge":"徽章","Base Path":"基本路径","Become a member today, support our mission and enjoy our member benefits!":"今天就成为会员,支持我们的使命,享受我们的会员福利!","Being 100% self-funded and independent, we can promise you that we will never sell your data and that we will always be transparent about our software and services.":"作为 100% 自筹资金和独立的公司,我们可以向您保证,我们永远不会出售您的数据,并且我们将始终对我们的软件和服务保持透明。","Bio":"简介","Birth Date":"出生日期","Black":"黑","Blackman: Lanczos Modification, Less Ringing Artifacts":"Blackman:修改后的 Lanczos 算法,振铃效应更小","Blue":"蓝","Brown":"棕","Browse":"浏览","Browse and edit image classification labels.":"浏览和编辑图像分类标签。","Browse and share your pictures organized into monthly albums.":"浏览并分享按月整理的照片。","Browse Files":"浏览文件","Browse indexed files and folders in Library.":"浏览库中已索引的文件和文件夹。","Bug Report":"上报问题","Busy, please wait…":"正在忙碌,请稍候…","By using the software and services we provide, you agree to our terms of service, privacy policy, and code of conduct.":"通过使用我们提供的软件和服务,您同意我们的服务条款、隐私政策和行为准则。","Calendar":"日历","Camera":"相机","Camera Serial":"相机序列号","Can't access your authenticator app or device?":"无法访问您的身份验证应用程序或设备?","Can't load more, limit reached":"无法加载更多内容,已达上限","Can't select more items":"无法选择更多项目","Cancel":"取消","Caption":"标题","Cards":"卡片","Carousel slide {0} of {1}":"旋转木马幻灯片 {0} of {1}","Category":"分类","Change Avatar":"改变头像","Change Password":"更改密码","Change personal profile and security settings.":"修改个人资料及安全设置。","Change photo titles, locations, and other metadata.":"更改照片标题、位置及其他元数据。","Change private flag":"更改私有标记","Changes could not be saved":"无法保存变更","Changes successfully saved":"更改成功保存","Changes to the advanced settings require a restart to take effect.":"对高级设置的更改需要重新启动才能生效。","Checked":"已确认","Chroma":"色度","Cleaning index and cache":"清理索引和缓存","Cleanup":"清理","Clear {0}":"清除 {0}","Client":"客户","Client Credentials":"客户证书","Close":"关闭","Codec":"编解码器","Color":"颜色","Color Profile":"颜色简介","Colors":"颜色","Compare Editions":"版本比较","Complete Rescan":"完全重新扫描","Confidence":"置信度","Confirm":"确认","Connect":"连接","Connect via WebDAV":"使用 WebDAV 连接","Connected":"已连接","Contact Details":"联系方式","Contact Us":"联系我们","Contains %{n} pictures.":"包含 %{n} 张图片。","Contains one picture.":"包含一张图片。","Content":"内容","Continue":"继续","Continue with %{provider}":"继续 %{provider}","Contributor":"撰稿人","Converting":"转换中","Copied to clipboard":"已复制到剪贴板","Copy":"复制","Copyright":"版权","Couldn't find anything.":"找不到任何东西。","Country":"国家","Create Account":"创建账户","Create album":"创建相册","Create regular backups based on the configured schedule.":"根据配置的时间表创建索引备份。","Create YAML files to back up album metadata.":"创建 YAML 文件来备份相册元数据。","Create YAML sidecar files to back up picture metadata.":"创建 YAML sidecar 文件来备份图片元数据。","Created":"已创建","Creating thumbnails for":"创建缩略图,用于","Cubic: Moderate Quality, Good Performance":"Cubic: 质量适中,性能良好","Current Password":"当前密码","Custom":"定制","Cyan":"青","Daily":"每日","Database Backups":"数据库备份","Day":"天","Deactivate":"停用","Debug Logs":"调试日志","Default":"默认","Default Folder":"默认文件夹","Delete":"删除","Delete All":"全部删除","Delete all?":"全部删除?","Delete orphaned index entries, sidecar files and thumbnails.":"删除孤立索引项、副卡文件和缩略图。","Description":"描述","Detailed instructions can be found in our User Guide.":"详细说明可以在我们的用户指南中找到。","Details":"细节","Dimensions":"尺寸","Disable Backups":"禁用备份","Disable Darktable":"禁用 Darktable","Disable ExifTool":"禁用 ExifTool","Disable features that require write permission for the originals folder.":"禁用需要原件文件夹写入权限的功能。","Disable FFmpeg":"禁用 FFmpeg","Disable ImageMagick":"禁用ImageMagick","Disable interactive world maps and reverse geocoding.":"禁用交互式世界地图和反向地理编码。","Disable Places":"禁用地点","Disable RawTherapee":"禁用 RawTherapee","Disable TensorFlow":"禁用 TensorFlow","Disable Vectors":"禁用载体","Disable WebDAV":"禁用 WebDAV","Disables vector graphics support.":"禁用矢量图形支持。","Disables video transcoding and thumbnail extraction.":"禁用视频转码和缩略图提取。","Discover":"探索","Dismiss":"解散","Display Name":"昵称","Display picture captions in search results.":"在搜索结果中显示图片说明。","Display picture titles in search results.":"在搜索结果中显示图片标题。","Document":"文件","Documents":"文件","Don't use Darktable to convert RAW images.":"不使用 Darktable 转换 RAW 文件。","Don't use ImageMagick to convert images.":"不要用ImageMagick来转换图像。","Don't use RawTherapee to convert RAW images.":"不使用 RawTherapee 转换 RAW 文件。","Done":"完成","Done.":"完成。","Download":"下载","Download only original media files, without any automatically generated files.":"只下载原始媒体文件,不下载任何自动生成的文件。","Download remote files":"下载远端文件","Download single files and zip archives.":"下载单个文件并用 zip 压缩。","Downloading…":"下载中…","Downscaling Filter":"缩小方法","Drag and drop files here":"在此处拖放文件","Due to the high volume of emails we receive, our team may be unable to get back to you immediately.":"由于我们收到大量的电子邮件,我们的团队可能无法立即回复你。","Duplicates will be skipped and only appear once.":"重复项将被跳过,仅出现一次。","Duration":"持续时间","Dynamic Previews":"动态预览","Dynamic Size Limit: %{n}px":"动态尺寸限制:%{n}px","E-Mail":"电子邮件","Edit":"编辑","Edit %{s}":"编辑 %{s}","Edit Account":"编辑账户","Edit Photo":"编辑照片","Edited":"已编辑","Email":"电子邮箱","Enable debug mode to display additional logs and help with troubleshooting.":"启用调试模式可显示更多日志,帮助排除故障。","Enable new features that may be incomplete or unstable.":"启用可能不完整或不稳定的新功能。","Enables RAW converter presets. May reduce performance.":"启用 RAW 转换器预设,可能会降低性能。","Enabling two-factor authentication means that you will need a randomly generated verification code to log in, so even if someone gains access to your password, they will not be able to access your account.":"启用双重身份验证意味着您需要随机生成的验证码才能登录,因此即使有人获得了您的密码,他们也无法访问您的帐户。","Enter date":"输入日期","Enter dates":"输入日期","Enter the code generated by your authenticator app:":"输入验证程序生成的代码:","Enter verification code":"输入验证码","Enter your password to confirm the action and continue:":"输入您的密码确认操作并继续:","Error":"错误","Errors":"错误","Estimate":"估算","Estimate Locations":"估计地点","Estimate the approximate location of pictures without GPS coordinates.":"在没有 GPS 坐标的情况下估算图片的大致位置。","Every two days":"每两天","Exclude content marked as private from search results, shared albums, labels, and places.":"排除搜索结果中标记私有的内容,已共享的相册、标签和地点。","Exclude hidden":"排除已隐藏","ExifTool is required for full support of XMP metadata, videos and Live Photos.":"要完全支持视频、实时照片和 XMP,需要使用 ExifTool 提取元数据。","Experimental Features":"实验特性","Expires":"时限","Exposure":"曝光度","Extract still images and generate thumbnails while indexing.":"提取静态图像并在编制索引时生成缩略图。","F Number":"光圈数","Face":"面部","Faces":"面部","Failed removing link":"删除链接失败","Failed to connect account.":"连接账户失败。","Failed updating link":"更新链接失败","Family Name":"姓","Fast":"快","Favorite":"收藏","Favorites":"收藏","Feature Request":"特性请求","Feedback":"反馈","Female":"女","File":"文件","File Browser":"文件浏览器","File Conversion":"文件转换","File Name":"文件名","File Size":"文件大小","Filename":"文件名","Files":"文件","Files with sequential names like 'IMG_1234 (2)' and 'IMG_1234 (3)' belong to the same picture.":"顺序名称的文件如“IMG_1234 (2)”和“IMG_1234 (3)”的文件属于同一图片。","First page":"第一页","Focal Length":"焦距","Folder":"文件夹","Folder contains %{n} files":"文件夹中有 %{n} 个文件","Folder is empty":"文件夹为空","Folders":"文件夹","Forgot password?":"忘记密码?","FPS":"帧数","Frames":"框架","Full Access":"完全访问","Fullscreen":"全屏","General":"一般","Generate":"产生","Generate albums of special moments, journeys, and places.":"自动创建特殊时刻、旅行和地点的相册。","Generate Previews":"生成预览","Generated":"生成","Get Started":"开始","Given Name":"名","Global Options":"全局选项","Go to page {0}":"转到 {0} 页","Gold":"金","Green":"绿","Grey":"灰","Guest":"访客","Hash":"哈希","Help":"帮助","Help & Support":"帮助和支持","Hidden":"隐藏","Hidden Files":"隐藏文件","Hide":"隐藏","Hide photos that have been moved to archive.":"隐藏已归档的照片。","High":"高","High Dynamic Range (HDR)":"高动态范围渲染(HDR)","How can we help?":"我们可以帮您吗?","Hybrid":"混合地图","If you lose access to your authenticator app or device, you can use your recovery code to regain access to your account.":"如果您无法访问身份验证器应用或设备,则可以使用恢复代码重新访问您的帐户。","Image":"图片","Image Quality":"图像质量","Import":"导入","Import failed":"导入失败","Imported files will be sorted by date and given a unique name to avoid duplicates.":"导入的文件将按日期排序,并指定一个唯一的名称以避免重复。","Imported files will be sorted by date and given a unique name.":"导入的文件将按日期排序,并指定一个唯一的名称。","Importing %{s}…":"导入 %{s} 中…","Importing files to originals…":"导入文件到源…","in":"于","In case pictures you expect are missing, please rescan your library and wait until indexing has been completed.":"如果您想要的图片丢失,请重新扫描库并等待索引完成。","Include RAW image files when downloading stacks and archives.":"在下载堆栈和档案时包括RAW图像文件。","Include sidecar files when downloading stacks and archives.":"在下载堆栈和档案时包括sidecar文件。","Increase storage size or delete files to continue.":"增加存储空间或删除文件以继续。","Index":"索引","Index and import files through the user interface.":"通过用户界面索引和导入文件。","Indexing":"索引中","Indexing failed":"索引失败","Indexing media and sidecar files…":"索引媒体和附属文件…","Information":"信息","Instance ID":"实例 ID","Insufficient storage.":"存储不足","Interval":"间隔","Invalid":"无效","Invalid address":"无效地址","Invalid country":"无效国家","Invalid date":"无效日期","Invalid parameters":"参数无效","Invalid photo selected":"选择了无效的照片","Invalid time":"无效时间","Invalid URL":"无效 URL","It is a one-time use code that will disable 2FA for your account when you use it.":"这是一个一次性使用的代码,当您使用它时将禁用您帐户的 2FA。","Item":"项目","Items per page:":"每页项目:","JPEG Quality: %{n}":"JPEG 质量:%{n}","JPEG Size Limit: %{n}px":"JPEG 尺寸限制:%{n}px","JPEGs and thumbnails are automatically rendered as needed.":"系统会根据需要自动生成缩略图及JPEG格式的预览图。","Keywords":"关键字","Label":"标签","Labels":"标签","Labels deleted":"标签已移除","Lanczos: Detail Preservation, Minimal Artifacts":"Lanczos:保留细节,虚影较小","Language":"语言","Last Active":"最后一次活动","Last Login":"最后一次登录","Last page":"最后一页","Last Sync":"上次同步","Last Used":"最后使用","Latitude":"纬度","LDAP/AD":"LDAP/AD","Learn more":"进一步了解","Learn More":"了解更多","Legal Information":"法律信息","Lens":"镜头","Library":"资料库","License":"许可证","Like":"喜欢","Lime":"淡绿","Limit reached, showing first %{n} files":"已达到限制,显示前 %{n} 个文件","Linear: Very Smooth, Best Performance":"Linear: 非常平滑,性能最佳","Link":"链接","List":"列表","List View":"列表查看","Live":"实况","Live Photos":"实况照片","Load more":"加载更多","Loading items...":"正在加载项目...","Loading...":"正在加载...","Local":"当地","Local Time":"本地时间","Location":"位置","Log messages appear here whenever PhotoPrism comes across broken files, or there are other potential issues.":"每当 PhotoPrism 遇到损坏的文件或其他潜在问题时,日志消息就会出现在这里。","Login":"登录","Logout":"登出","Logs":"日志","Longitude":"经度","Low":"低","Magenta":"洋红","Main Color":"主色调","Male":"男","Manage Account":"管理账户","Manual":"手动","Manual Upload":"手动上传","Maps":"地图","Marker":"标记","Maximum number of accounts has been reached.":"账户数已达到上限。","Media":"媒体","Medium":"中","Membership":"会员资格","Merge %{a} with %{b}?":"将 %{a} 与 %{b} 合并?","Message":"留言","Message sent":"消息已发送","Metadata":"元数据","Metrics":"指标","Minimize":"最小化","Missing":"缺失","Missing or invalid configuration":"配置缺失或无效","Moments":"瞬间","Monochrome":"黑白","Month":"月","More options":"更多选择","Mosaic":"马赛克","Most Relevant":"最相关","Move Files":"移动文件","Must have at least %{n} characters.":"必须至少有%{n}个字符。","Mute":"静音","Name":"名称","Name too long":"名称太长","Never":"永不","New":"新","New Password":"新密码","Newest First":"最新优先","Next":"下一页","Next page":"下一页","Next visual":"下一个视觉","No":"否","No albums found":"找不到相册","No data available":"无数据","No labels found":"找不到标签","No matching records found":"未找到匹配记录","No more":"没有更多","No people found":"找不到人物","No pictures found":"找不到图片","No recently edited pictures":"没有最近编辑过的图片","No server connection":"无服务器连接","No servers configured.":"沒有服务器配置。","No services configured.":"没有配置服务。","No thanks":"不用了,谢谢","No warnings or error containing this keyword. Note that search is case-sensitive.":"没有包含此关键字的警告或错误,请注意,搜索区分大小写。","Non-photographic and low-quality images require a review before they appear in search results.":"非照片和低质量图像出现在搜索结果中前需要进行审查。","None":"无","Not allowed":"不允许","Not found":"未找到","Not sorted.":"未分类。","Not supported":"不支持","Note you may manually manage your originals folder and importing is optional.":"如果希望保持原有文件名及目录结构,请直接管理源文件夹,不要使用导入功能。","Note:":"注意:","Note: Only WebDAV servers, like Nextcloud or PhotoPrism, can be configured as remote service for backup and file upload.":"注意:只能将 WebDAV 服务器(如 Nextcloud 或 PhotoPrism)配置为远程服务,以进行备份和文件上传。","Notes":"备注","Nothing to see here yet.":"暂无数据。","Nothing was found.":"没有发现任何问题。","Offline":"离线","OIDC":"OIDC","OK":"好的","Oldest First":"最旧优先","On Windows, enter the following resource in the connection dialog:":"在 Windows 上,连接对话框中使用以下资源:","On-demand generation of thumbnails may cause high CPU and memory usage. It is not recommended for resource-constrained servers and NAS devices.":"按需生成缩略图可能会导致较高的 CPU 和内存使用率。不建议资源有限的服务器和 NAS 设备使用。","Once a week":"每周一次","One album found":"已找到一本相册","One file found":"已找到一个文件","One file uploaded":"已上传一个文件","One folder found":"已找到一个文件夹","One label found":"已找到一个标签","One person found":"已找到一个人物","One picture found":"已发现一张图片","Only locally managed accounts can be set up for authentication with 2FA.":"仅可设置本地管理的帐户进行 2FA 身份验证。","Open":"开放","optional":"可选的","or":"或","Orange":"橙","Organization":"组织机构","Orientation":"朝向","Original file names will be stored and indexed.":"原始文件名将被存储并索引。","Original Name":"源文件名","Originals":"源","Other":"其他","Our mission is to provide the most user- and privacy-friendly solution to keep your pictures organized and accessible.":"我们的使命是提供对绝大部分用户——及隐私最友好的解决方案,以保持你的照片有条理和可访问。","Outdoor":"户外地图","Page {0}, Current page":"第 {0} 页,当前页","Pages":"页面","Pagination Navigation":"分页导航","Panorama":"全景","Panoramas":"全景","Password":"密码","Password changed":"密码已更改","People":"人物","People you share a link with will be able to view public contents.":"与您共享链接的人将可以查看公共内容。","Permanently deleted":"已永久删除","Permanently remove files to free up storage.":"永久删除文件以释放存储空间。","Person":"个人","Personal":"个人","Photo":"相片","PhotoPrism is 100% self-funded and independent.":"PhotoPrism是100%自筹资金和独立的。","PhotoPrism+ Membership":"照片棱镜+会员资格","Photos":"照片","Picture Title":"图片标题","Pink":"粉红","Place":"地点","Place & Time":"地点和时间","Places":"地点","Please confirm your new password.":"请确认新密码。","Please copy the following randomly generated app password and keep it in a safe place, as you will not be able to see it again:":"请复制以下随机生成的应用程序密码并将其保存在安全的地方,因为您将无法再次看到它:","Please do not upload any private, unlawful or offensive pictures.":"请勿上传任何私人、非法或攻击性图片。","Please don't upload photos containing offensive content.":"请不要上传包含令人反感的内容的照片。","Please enter OTP character {0}":"请输入 OTP 字符 {0}","Please note that changing your password will log you out on other devices and browsers.":"请注意,修改密码将退出你已登录在其他设备和浏览器上的账号。","Please restart your instance for the changes to take effect.":"请重新启动您的实例以使变化生效。","Please wait…":"请等待…","PM":"下午","PNG Size Limit: %{n}px":"PNG 尺寸限制:%{n}px","Portrait":"人像","Preserve filenames":"保留文件名","Press enter to create a new album.":"按下 Enter 键创建一个新相册。","Prevent database and album backups as well as YAML sidecar files from being created.":"防止创建数据库和相册备份以及 YAML sidecar 文件。","Prevent other apps from accessing PhotoPrism as a shared network drive.":"防止其他应用程序将 PhotoPrism 作为共享网络驱动器访问。","Preview":"预览","Preview Images":"图片预览","Previous":"上一页","Previous page":"上一页","Previous visual":"上一个视觉","Primary":"主文件","Private":"私有","Product Feedback":"产品反馈","Projection":"投影","Purple":"紫","Quality Filter":"质量筛选","Quality Score":"质量得分","r":"r","Random":"随机","Rating {0} of {1}":"评级 {0} of {1}","Raw":"原始数据","RAW":"RAW","Re-index all originals, including already indexed and unchanged files.":"重新索引所有源文件,包括已索引和未更改的文件。","Read-Only Mode":"只读模式","Recently Added":"最近添加","Recently Archived":"最近存档","Recently Edited":"最近编辑","Recognition starts after indexing has been completed.":"识别工作在索引完成后开始。","Recognize faces so people can be assigned and found.":"识别人脸,以便能够找到特定的人。","Recognized":"已识别","Recovery Code":"恢复代码","Red":"红","Refresh":"刷新","Regions":"地区","Register":"注册","Reload":"重载","Reloading…":"重载中…","Remote Sync":"远端同步","Remove":"移除","remove failed: unknown album":"移除失败:未知相册","Remove from Album":"从相册中移除","Remove imported files to save storage. Unsupported file types will never be deleted, they remain in their current location.":"移除导入的文件以节省存储空间,不支持的文件类型将永远不会被删除,它们会保留在它们当前的位置。","Request failed - are you offline?":"请求失败 - 你是否离线?","Request failed - invalid response":"请求失败 - 无效的响应","Require non-photographic and low-quality images to be reviewed before they appear in search results.":"要求非图片和低质量图片在出现在搜索结果中之前必须经过审核。","Resolution":"分辨率","Restart":"重新启动","Restore":"恢复","Restored":"恢复","Retry Limit":"重试限制","Retype Password":"重新输入密码","Review":"审查","Role":"角色","Rows per page:":"每页行数:","Satellite":"卫星","Save":"保存","Scan":"扫描","Scan the QR code with your authenticator app or use the setup key shown below and then enter the generated verification code:":"使用您的身份验证器应用程序扫描二维码或使用下面显示的设置键,然后输入生成的验证码:","Scans":"扫描","Scope":"范围","Search":"搜索","Search and display photos on a map.":"在地图上搜索并显示照片。","Season":"季节","Secret":"密钥","Security and Access":"安全和访问","Select":"选择","Select a source folder to import files…":"选择要导入文件的源文件夹…","Select date":"选择日期","Select dates":"选择日期","Select or create an album":"选择或创建相册","Select the files to upload…":"选择要上传的文件…","Select the folder to be indexed…":"选择要编制索引的文件夹…","Select Time":"选择时间","Selection approved":"所选项已批准","Selection archived":"所选项已归档","Selection restored":"所选项已恢复","Sequential Name":"顺序名称","Service URL":"服务 URL","Services":"服务","Session":"会议","Session ID":"会议ID","Sessions":"会议","Set as Album Cover":"设为专辑封面","Settings":"设置","Settings saved":"设置已保存","Setup":"设置","Share":"分享","Share %{s}":"分享 %{s}","Share your pictures with other apps and services.":"与其他应用程序和服务分享你的图片。","Show":"显示","Show all new faces":"显示所有的新面孔","Show Captions":"显示字幕","Show hidden":"显示隐藏","Show less":"显示更少","Show more":"显示更多","Show server logs in Library.":"在库中显示服务器日志。","Show Titles":"显示标题","Sidecar":"附属","Sidecar Files":"Sidecar 文件","Sign in":"登录","Similar":"相似","Size":"尺寸","Slideshow":"幻灯片","Slow":"慢","Software":"软件","Software Update":"软件更新","Something went wrong, try again":"出错了,再试一次","Sort by":"排序方式","Sort Order":"排序","Sorted ascending.":"按升序排列。","Sorted descending.":"按降序排列。","Source":"来源","Stack":"堆","Stack files sharing the same unique image or instance identifier.":"文件堆共享相同的唯一图像或实例标识符。","Stack pictures taken at the exact same time and location based on their metadata.":"根据图片的元数据,堆叠在相同的时间和地点拍摄的图片。","Stackable":"可堆叠","Stacks":"堆","Start":"开始","Start Page":"起始页","Static Size Limit: %{n}px":"静态渲染尺寸限制: %{n}px","Status":"状态","Storage":"存储","Streets":"街道图","Subject":"主题","Submit":"提交","Successfully activated":"已成功激活","Successfully Connected":"账户成功连接","Successfully deleted":"已成功删除","Successfully verified":"验证成功","Super Admin":"超级管理员","Support for additional services, like Google Drive, will be added over time.":"随着时间的推移,将增加对其他服务的支持,例如 Google 云端硬盘。","Support Our Mission":"支持我们的使命","Sync":"同步","Sync raw and video files":"同步 Raw 和视频文件","Taken":"纳入于","Teal":"蓝绿","TensorFlow is required for image classification, facial recognition, and detecting unsafe content.":"图像分类、面部识别和检测不安全内容都需要使用 TensorFlow。","Terrain":"地形","Text":"文本","Text too long":"文字太长","Thank You for Your Support!":"感谢你的支持!","That's why PhotoPrism was built from the ground up to run wherever you need it, without compromising freedom, privacy, or functionality.":"这就是为什么PhotoPrism从一开始就能在你需要的地方运行,而不影响自由、隐私或功能。","The index currently contains %{n} hidden files.":"该索引当前包含 %{n} 个隐藏文件。","Their format may not be supported, they haven't been converted to JPEG yet or there are duplicates.":"它们的格式可能不受支持,它们尚未转换为 JPEG 或存在重复项。","Theme":"主题","This field is required":"该字段为必填字段","This mounts the originals folder as a network drive and allows you to open, edit, and delete files from your computer or smartphone as if they were local.":"这会将源文件夹安装为网络驱动器,并允许您从计算机或智能手机中打开,编辑和删除文件,就像它们是本地文件一样。","Time UTC":"UTC 时间","Time Zone":"时区","Timeout":"超时","Title":{"Account":"标题","Photo":"标题","":"标题"},"Title / Position":"职称/职位","Title too long":"标题太长了","to":"到","To avoid being locked out of your account, please download, print or copy this recovery code now and keep it in a safe place.":"为了避免您的帐户被锁定,请立即下载、打印或复制此恢复代码并将其保存在安全的地方。","To generate a new app-specific password, please enter the name and authorization scope of the application and select an expiration date:":"生成新的应用专用密码,请输入应用程序的名称、授权范围并选择到期日期:","To switch to a new authenticator app or device, first deactivate two-factor authentication and then reactivate it:":"要切换到新的身份验证器应用程序或设备,请先停用双重身份验证,然后重新激活它:","To upgrade, you can either enter an activation code or click \"Register\" to sign up on our website:":"要升级,你可以输入激活码或点击 \"注册\",在我们的网站上注册:","Today":"今天","Toggle View":"切换视图","Token":"令牌","Too many files selected":"选择的文件过多","Too many requests":"请求太多","Troubleshooting":"故障排除","Try again using other filters or keywords.":"使用其他过滤器或关键字再试一次。","Two-factor authentication has been enabled for your account.":"您的帐户已启用双重身份验证。","Type":"类型","Unauthorized":"未经授权的","Undo":"撤销","Unique ID":"唯一标识符","Unknown":"未知","Unregistered":"未注册的","Unsorted":"未分类","Unstack":"取消堆叠","Updated":"已更新","Updating faces":"更新面部","Updating index":"更新索引","Updating moments":"更新时刻","Updating picture…":"更新图片…","Updating previews":"更新预览","Updating stacks":"更新堆","Upgrade":"升级","Upgrade Now":"立即升级","Upload":"上传","Upload complete":"上传完成","Upload complete. Indexing…":"上传完成,索引中…","Upload failed":"上传失败","Upload local files":"上传本地文件","Upload Path":"上传路径","Upload to WebDAV and share links with friends.":"上传到 WebDAV 并与朋友共享链接。","Uploading %{n} of %{t}…":"上传 %{n} / %{t} …","Uploading photos…":"上传照片…","Uploading…":"上传中…","Uploads that may contain such images will be rejected automatically.":"可能包含此类图像的上传将被自动拒绝。","Use Presets":"使用预设","Use the following recovery code to access your account when you are unable to generate a valid verification code with your authenticator app:":"当您无法使用身份验证器应用生成有效的验证码时,请使用以下恢复代码访问您的帐户:","Use your recovery code or contact an administrator for help.":"使用恢复密码或联系管理员寻求帮助。","User":"用户","User Guide":"用户指南","User Interface":"用户界面","Username":"用户名","Users":"用户","Vector":"矢量","Vectors":"媒介物","Verification Code":"验证码","Video":"视频","Video Duration":"视频时长","Videos":"视频","View":"视图","View search results as a list.":"以列表形式查看搜索结果。","Viewer":"浏览者","Visitor":"访客","Visual Similarity":"视觉相似性","Warning":"警告","We appreciate your feedback!":"感谢您的反馈!","We do our best to respond within five business days or less.":"我们尽力在五个工作日或更短时间内作出回应。","Web Login":"网络登录","WebDAV":"WebDAV","WebDAV clients can connect to PhotoPrism using the following URL:":"WebDAV 客户端可以使用以下 URL 连接到 PhotoPrism:","WebDAV clients, like Microsoft’s Windows Explorer or Apple's Finder, can connect directly to PhotoPrism.":"WebDAV 客户端(例如 Microsoft 的 Windows 资源管理器或 Apple 的 Finder)可以直接连接到 PhotoPrism。","WebDAV Upload":"WebDAV 上传","WebGL support is disabled in your browser":"您的浏览器已禁用 WebGL 支持","Website":"网站","White":"白","Work Details":"作品详情","Year":"年","Yellow":"黄","Yes":"是","You are welcome to contact us at membership@photoprism.app for questions regarding your membership.":"欢迎你与我们联系,membership@photoprism.app,询问有关你的会员资格的问题。","You can only download one album":"你只能下载一个相册","You can only download one label":"你只能下载一个标签","You can upload up to %{n} files for test purposes.":"您最多可以上传 %{n} 个文件用于测试。","You may only select one item":"你只能选择一项","You may rescan your library to find additional faces.":"你可以重新扫描你的库以找到更多的面部。","Your account has been successfully connected.":"您的账户已成功连接。","Your browser does not support WebGL":"您的浏览器不支持 WebGL","Your continued support helps us provide regular updates and remain independent, so we can fulfill our mission and protect your privacy.":"您的持续支持有助于我们提供定期更新并保持独立,因此我们可以履行我们的使命并保护您的隐私。","Your library is continuously analyzed to automatically create albums of special moments, trips, and places.":"你的库被不断分析,以自动创建特殊时刻、旅行和地点的相册。","Zoom in/out":"缩放"}} \ No newline at end of file From 1ac9a8a3bf9a9e6126118ceab248ada6d97895b5 Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 28 May 2025 20:02:00 +0200 Subject: [PATCH 014/185] Weblate: Update frontend translations --- frontend/src/locales/fr.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/frontend/src/locales/fr.po b/frontend/src/locales/fr.po index 9228faf31..75be796a1 100644 --- a/frontend/src/locales/fr.po +++ b/frontend/src/locales/fr.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: ci@photoprism.app\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2025-05-06 01:02+0000\n" +"PO-Revision-Date: 2025-05-28 18:02+0000\n" "Last-Translator: jean-louis67 \n" "Language-Team: French \n" "Language: fr\n" @@ -11,7 +11,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 5.11.1\n" +"X-Generator: Weblate 5.11.4\n" "Generated-By: easygettext\n" #: src/locales.js:268 @@ -2715,7 +2715,7 @@ msgstr "Sessions" #: src/component/lightbox.vue:1177 msgid "Set as Album Cover" -msgstr "Utiliser comme couverture de l'album" +msgstr "Utiliser cette photo comme couverture de l'album" #: src/app/routes.js:101 src/app/routes.js:492 src/app/routes.js:504 #: src/app/routes.js:521 src/app/routes.js:534 src/app/routes.js:547 From 7a1929797cf1b2a7bc7342b763f7cce4be4468f0 Mon Sep 17 00:00:00 2001 From: graciousgrey Date: Sat, 7 Jun 2025 08:51:18 +0200 Subject: [PATCH 015/185] Translations: Update fr.po --- frontend/src/locales/json/fr.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/locales/json/fr.json b/frontend/src/locales/json/fr.json index 0d30880e1..8d13fd6b2 100644 --- a/frontend/src/locales/json/fr.json +++ b/frontend/src/locales/json/fr.json @@ -1 +1 @@ -{"fr":{"{0} appended action":"{0} action(s) attachées(s)","{0} files":"{0} fichier(s)","{0} files ({1} in total)":"{0} fichiers(s) ({1} au total)","{0} more":"{0} de plus","{0} prepended action":"{0} action(s) préliminaire(s)","{0} selected":"{0} sélectionnée(s)","{0}-{1} of {2}":"{0}-{1} de {2}","%{n} albums found":"%{n} album(s) trouvé(s)","%{n} files uploaded":"%{n} fichier(s) chargé(s)","%{n} folders found":"%{n} dossier(s) trouvé(s)","%{n} GB of %{q} GB used":"%{n} Go de %{q} Go utilisés","%{n} labels found":"%{n} étiquette(s) trouvée(s)","%{n} people found":"%{n} personne(s) trouvée(s)","%{n} pictures found":"%{n} image(s) trouvée(s)","%{s} is too long":"%{s} est trop long","%{s} is too short":"%{s} est trop court","1 hour":"1 heure","12 hours":"12 heures","2-Factor Authentication":"Authentification à 2 facteurs","2FA":"2FA","4 hours":"4 heures","A click will copy it to your clipboard.":"Cliquez pour copier vers votre presse-papier.","A new version of %{s} is available:":"Une nouvelle version de %{s} est disponible :","About":"À propos","Access Token":"Jeton d'accès","Account":"Compte","Account created":"Compte créé","Account deleted":"Compte supprimé","Account restored":"Compte restauré","Accounts":"Comptes","Accuracy":"Précision","Action":"Action","Actions":"Actions","Activate":"Activer","Activate to remove sorting.":"Activer pour supprimer le tri.","Activate to sort ascending.":"Activer pour trier par ordre croissant.","Activate to sort descending.":"Activer pour trier par ordre décroissant.","Activation Code":"Code d'activation","Add":"Ajouter","Add %{s}?":"Ajouter %{s} ?","Add Account":"Ajouter un compte","Add Album":"Ajouter un album","Add files to your library via Web Upload.":"Ajouter des fichiers à votre bibliothèque par Web Upload.","Add Link":"Ajouter un lien","Add person?":"Ajouter une personne ?","Add pictures from search results by selecting them.":"Ajouter des images à partir des résultats de recherche en les sélectionnant.","Add to album":"Ajouter à l'album","Added":"Ajouté","Admin":"Administrateur","Advanced":"Avancé","After 1 day":"Après 1 jour","After 3 days":"Après 3 jours","After 7 days":"Après 7 jours","After entering your password for confirmation, you can set up two-factor authentication with a compatible authenticator app or device:":"Après avoir saisi votre mot de passe pour confirmation, vous pourrez configurer l'authentification à deux facteurs à l'aide d'une application ou d'un dispositif d'authentification compatible :","After one month":"Après un mois","After one year":"Après un an","After selecting pictures from search results, you can add them to an album using the context menu.":"Après avoir sélectionné des images dans les résultats de recherche, vous pouvez les ajouter à un album à l'aide du menu contextuel.","After two months":"Après 2 mois","After two weeks":"Après 2 semaines","Album":"Album","Album Backups":"Sauvegardes d'albums","Album created":"Album créé","Albums":"Albums","Albums deleted":"Albums supprimés","All":"Tous","All %{n} albums loaded":"Les %{n} album(s) ont été chargé(s)","All %{n} labels loaded":"Les %{n} étiquettes ont été chargées","All %{n} people loaded":"Les %{n} personnes ont été chargées","All Cameras":"Tous les appareils photo","All Categories":"Toutes les catégories","All Colors":"Toutes les couleurs","All Countries":"Tous les pays","All fields are required":"Tous les champs sont obligatoires","All files from import folder":"Tous les fichiers du dossier d'importation","All Lenses":"Tous les objectifs","All Months":"Tous les mois","All originals":"Tous les fichiers originaux","All Years":"Toutes les années","Alternatively, you can upload files directly to WebDAV servers like Nextcloud.":"Vous pouvez également envoyer les fichiers directement vers un serveur WebDAV comme Nextcloud.","Altitude":"Altitude","Altitude (m)":"Altitude (m)","AM":"AM","Animated":"Animé","Animation":"Animation","Any private photos and videos remain private and won't be shared.":"Une photo ou vidéo privée restera privée et ne sera pas partagée.","API Key":"Clé d'API","Application":"Application","Apply":"Appliquer","Approve":"Approuver","Apps and Devices":"Applications et appareils","Archive":"Archives","Archived":"Archivé","Are you sure you want to archive the selection?":"Êtes-vous sûr de vouloir archiver la sélection ?","Are you sure you want to delete these albums?":"Êtes-vous sûr de vouloir supprimer ces albums ?","Are you sure you want to delete these labels?":"Êtes-vous sûr de vouloir supprimer ces étiquettes ?","Are you sure you want to delete this account?":"Êtes-vous sûr de vouloir supprimer ce compte ?","Are you sure you want to permanently delete these pictures?":"Êtes-vous sûr de vouloir supprimer définitivement ces photos ?","Are you sure you want to permanently delete this file?":"Êtes-vous sûr de vouloir supprimer définitivement ce fichier ?","Are you sure?":"Êtes-vous sûr ?","Artist":"Auteur","Aspect Ratio":"Format d'image","Audio":"Audio","Authentication":"Authentification","Auto":"Auto","Back":"Retour","Back to top":"Retour en haut de la page","Backup":"Sauvegarde","Badge":"Badge","Base Path":"Chemin de base","Become a member today, support our mission and enjoy our member benefits!":"Devenez membre aujourd'hui, soutenez notre mission et profitez de nos avantages !","Being 100% self-funded and independent, we can promise you that we will never sell your data and that we will always be transparent about our software and services.":"Étant 100% autofinancés et indépendants, nous pouvons vous promettre que nous ne vendrons jamais vos données et que nous serons toujours transparents sur nos logiciels et services.","Bio":"Biographie","Birth Date":"Date de naissance","Black":"Noir","Blackman: Lanczos Modification, Less Ringing Artifacts":"Blackman : modification de Lanczos, moins d'artefacts de sonnerie","Blue":"Bleu","Brown":"Marron","Browse":"Parcourir","Browse and edit image classification labels.":"Parcourir et modifier les étiquettes de classification d'images.","Browse and share your pictures organized into monthly albums.":"Parcourez et partagez vos photos organisées en albums mensuels.","Browse Files":"Parcourir les fichiers","Browse indexed files and folders in Library.":"Parcourir les dossiers et fichiers indexés dans la bibliothèque.","Bug Report":"Signaler une erreur","Busy, please wait…":"Veuillez patienter…","By using the software and services we provide, you agree to our terms of service, privacy policy, and code of conduct.":"En utilisant le logiciel et les services que nous fournissons, vous acceptez nos conditions d'utilisation, notre politique de confidentialité et notre code de conduite.","Calendar":"Calendrier","Camera":"Appareil photo","Camera Serial":"N° de série de l'appareil photo","Can't access your authenticator app or device?":"Vous n'avez pas accès à votre application ou votre appareil d'authentification ?","Can't load more, limit reached":"Impossible de charger plus, limite atteinte","Can't select more items":"Impossible de sélectionner plus d’éléments","Cancel":"Annuler","Caption":"Légende","Cards":"Cartes","Carousel slide {0} of {1}":"Page {0} sur {1} du carrousel","Category":"Catégorie","Change Avatar":"Changer d'avatar","Change Password":"Changer le mot de passe","Change personal profile and security settings.":"Modifier le profil personnel et les paramètres de sécurité.","Change photo titles, locations, and other metadata.":"Modifier les titres, les lieux et d'autres métadonnées.","Change private flag":"Modifier le statut privé","Changes could not be saved":"Les modifications n'ont pu être sauvegardées","Changes successfully saved":"Les modifications ont bien été enregistrées","Changes to the advanced settings require a restart to take effect.":"Un redémarrage est nécessaire pour que les modifications apportées aux paramètres avancés soient prises en compte.","Checked":"Vérifié","Chroma":"Saturation","Cleaning index and cache":"Nettoyage de l'index et du cache","Cleanup":"Nettoyage","Clear {0}":"Effacer {0}","Client":"Client","Client Credentials":"Identifiants du client","Close":"Fermer","Codec":"Codec","Color":"Couleur","Color Profile":"Profil de couleur","Colors":"Couleurs","Compare Editions":"Comparer les éditions","Complete Rescan":"Réanalyse complète","Confidence":"Confiance","Confirm":"Confirmer","Connect":"Connecter","Connect via WebDAV":"Se connecter via le protocole WebDAV","Connected":"Connecté","Contact Details":"Coordonnées","Contact Us":"Nous contacter","Contains %{n} pictures.":"Contient %{n} images.","Contains one picture.":"Contient une image.","Content":"Contenu","Continue":"Poursuivre","Continue with %{provider}":"Continuer avec %{fournisseur}","Contributor":"Contributeur","Converting":"Conversion en cours","Copied to clipboard":"Copié vers le presse-papier","Copy":"Copier","Copyright":"Copyright","Couldn't find anything.":"Aucun élément trouvé.","Country":"Pays","Create Account":"Créer un compte","Create album":"Créer un album","Create regular backups based on the configured schedule.":"Réaliser des sauvegardes de l'index en suivant la planification programmée.","Create YAML files to back up album metadata.":"Utiliser des fichiers YAML pour sauvegarder les métadonnées des albums.","Create YAML sidecar files to back up picture metadata.":"Utiliser des fichiers side-car YAML pour sauvegarder les métadonnées des images.","Created":"Créé","Creating thumbnails for":"Création des miniatures pour","Cubic: Moderate Quality, Good Performance":"Cubique : Qualité modérée, bonne performance","Current Password":"Mot de passe actuel","Custom":"Sur mesure","Cyan":"Cyan","Daily":"Quotidien","Database Backups":"Sauvegarde de la base de données","Day":"Jour","Deactivate":"Désactiver","Debug Logs":"Journaux de débogage","Default":"Valeur par défaut","Default Folder":"Dossier par défaut","Delete":"Supprimer","Delete All":"Tout supprimer","Delete all?":"Tout supprimer ?","Delete orphaned index entries, sidecar files and thumbnails.":"Supprimer les entrées d'index, les vignettes, et les fichiers side-car orphelins.","Description":"Description","Detailed instructions can be found in our User Guide.":"Vous trouverez des instructions détaillées dans notre guide de l’utilisateur.","Details":"Détails","Dimensions":"Dimensions","Disable Backups":"Désactiver les sauvegardes","Disable Darktable":"Désactiver Darktable","Disable ExifTool":"Désactiver l'outil ExifTool","Disable features that require write permission for the originals folder.":"Désactiver les fonctions pour lesquelles l'autorisation d'écrire dans le dossier des originaux est nécessaire.","Disable FFmpeg":"Désactiver FFmpeg","Disable ImageMagick":"Désactiver ImageMagick","Disable interactive world maps and reverse geocoding.":"Désactiver les cartes du monde interactives et le géocodage inversé.","Disable Places":"Désactiver les Lieux","Disable RawTherapee":"Désactiver RawTherapee","Disable TensorFlow":"Désactiver TensorFlow","Disable Vectors":"Désactiver les vecteurs","Disable WebDAV":"Désactiver WebDAV","Disables vector graphics support.":"Désactive la prise en charge des images vectorielles.","Disables video transcoding and thumbnail extraction.":"Désactive le transcodage vidéo et l'extraction des vignettes.","Discover":"Découvrir","Dismiss":"Rejeter","Display Name":"Nom affiché","Display picture captions in search results.":"Afficher les légendes des images dans les résultats de recherche.","Display picture titles in search results.":"Afficher les titres des images dans les résultats de recherche.","Document":"Document","Documents":"Documents","Don't use Darktable to convert RAW images.":"Ne pas utiliser Darktable pour convertir les fichers RAW.","Don't use ImageMagick to convert images.":"Ne pas utiliser ImageMagick pour convertir les images.","Don't use RawTherapee to convert RAW images.":"Ne pas utiliser RawTherapee pour convertir les fichiers RAW.","Done":"Terminé","Done.":"Terminé.","Download":"Télécharger","Download only original media files, without any automatically generated files.":"Télécharger uniquement les fichiers multimédias originaux, sans fichiers générés automatiquement.","Download remote files":"Télécharger les fichiers distants","Download single files and zip archives.":"Téléchargement de fichiers et d'archives zip.","Downloading…":"Téléchargement en cours…","Downscaling Filter":"Filtre de qualité","Drag and drop files here":"Glisser et déposer les fichiers ici","Due to the high volume of emails we receive, our team may be unable to get back to you immediately.":"En raison du volume élevé d'e-mails que nous recevons, notre équipe peut être dans l'incapacité de vous répondre immédiatement.","Duplicates will be skipped and only appear once.":"Les doublons seront ignorés et n'apparaîtront qu'une seule fois.","Duration":"Durée","Dynamic Previews":"Avant-premières non cachées","Dynamic Size Limit: %{n}px":"Limite de taille non cachée : %{n}px","E-Mail":"Courriel","Edit":"Modifier","Edit %{s}":"Modifier %{s}","Edit Account":"Modifier le compte","Edit Photo":"Modifier la photo","Edited":"Modifié","Email":"Email","Enable debug mode to display additional logs and help with troubleshooting.":"Activer le mode débogage pour afficher des journaux supplémentaires et aider au dépannage.","Enable new features that may be incomplete or unstable.":"Activer les nouvelles fonctionnalités, potentiellement incomplètes ou instables.","Enables RAW converter presets. May reduce performance.":"Active les préréglages du convertisseur RAW. Cela peut réduire les performances.","Enabling two-factor authentication means that you will need a randomly generated verification code to log in, so even if someone gains access to your password, they will not be able to access your account.":"Avec l'authentification à deux facteurs, il faut un code de vérification généré de manière aléatoire pour se connecter, si bien que personne, même connaissant votre mot de passe, ne pourra se connecter à votre compte.","Enter date":"Saisir la date","Enter dates":"Saisir les dates","Enter the code generated by your authenticator app:":"Entrez le code généré par votre application d'authentification :","Enter verification code":"Entrer le code de vérification","Enter your password to confirm the action and continue:":"Saisissez votre mot de passe pour confirmer l'action et continuer :","Error":"Erreur","Errors":"Erreurs","Estimate":"Estimation","Estimate Locations":"Reconnaissance de lieux","Estimate the approximate location of pictures without GPS coordinates.":"Tente de reconnaître le lieu où une photo dépourvue de géolocalisation a été prise.","Every two days":"Tous les deux jours","Exclude content marked as private from search results, shared albums, labels, and places.":"Exclure le contenu marqué comme privé des résultats de recherche, des albums partagés, des étiquettes et des lieux.","Exclude hidden":"Exclure les éléments cachés","ExifTool is required for full support of XMP metadata, videos and Live Photos.":"ExifTool est requis pour la prise en charge complète des métadonnées XMP, des vidéos et des Live Photos.","Experimental Features":"Fonctions Expérimentales","Expires":"Expire","Exposure":"Exposition","Extract still images and generate thumbnails while indexing.":"Extrait les images fixes et génère des vignettes lors de l'indexation.","F Number":"Ouverture","Face":"Visage","Faces":"Visages","Failed removing link":"Échec de la suppression du lien","Failed to connect account.":"Échec de la connexion au compte.","Failed updating link":"Échec de la mise à jour du lien","Family Name":"Nom de famille","Fast":"Rapide","Favorite":"Favori","Favorites":"Favoris","Feature Request":"Demander une fonctionnalité","Feedback":"Retour d'information","Female":"Femme","File":"Fichier","File Browser":"Explorateur de fichiers","File Conversion":"Conversion de fichiers","File Name":"Nom du fichier","File Size":"Taille du fichier","Filename":"Nom du fichier","Files":"Fichiers","Files with sequential names like 'IMG_1234 (2)' and 'IMG_1234 (3)' belong to the same picture.":"Des fichiers ayant des noms séquentiels tels que 'IMG_1234 (2)' et 'IMG_1234 (3)' appartiennent à la même image.","First page":"Première page","Focal Length":"Longueur focale","Folder":"Dossier","Folder contains %{n} files":"Dossier contenant %{n} fichiers","Folder is empty":"Le dossier est vide","Folders":"Dossiers","Forgot password?":"Mot de passe oublié ?","FPS":"FPS","Frames":"Cadres","Full Access":"Accès intégral","Fullscreen":"Plein écran","General":"Général","Generate":"Générer","Generate albums of special moments, journeys, and places.":"Création automatique d'albums regroupant des moments, des voyages et des lieux particuliers.","Generate Previews":"Générer des aperçus","Generated":"Généré","Get Started":"Commencer","Given Name":"Prénom","Global Options":"Options globales","Go to page {0}":"Aller à la page {0}","Gold":"Or","Green":"Vert","Grey":"Gris","Guest":"Invité","Hash":"Somme de contrôle","Help":"Aide","Help & Support":"Aide & Support","Hidden":"Caché","Hidden Files":"Fichiers cachés","Hide":"Cacher","Hide photos that have been moved to archive.":"Masquer les photos archivées.","High":"Élevé","High Dynamic Range (HDR)":"Gamme dynamique élevée (HDR)","How can we help?":"Comment pouvons nous vous aider ?","Hybrid":"Hybride","If you lose access to your authenticator app or device, you can use your recovery code to regain access to your account.":"En cas de perte d'accès à votre application ou votre appareil d'authentification, vous pourrez utiliser votre code de récupération pour accéder à nouveau à votre compte.","Image":"Image","Image Quality":"Qualité de l'image","Import":"Importer","Import failed":"Échec de l'importation","Imported files will be sorted by date and given a unique name to avoid duplicates.":"Les fichiers importés seront classés par date et recevront un nom unique pour éviter les doublons.","Imported files will be sorted by date and given a unique name.":"Les fichiers importés seront classés par date et recevront un nom unique.","Importing %{s}…":"Importation de %{s} en cours…","Importing files to originals…":"Importation des fichiers vers le dossier des originaux…","in":"en","In case pictures you expect are missing, please rescan your library and wait until indexing has been completed.":"Si des images sont manquantes, veuillez réanalyser votre bibliothèque et attendre que l'indexation soit terminée.","Include RAW image files when downloading stacks and archives.":"Inclure les fichiers d'images RAW lors du téléchargement de piles et d'archives.","Include sidecar files when downloading stacks and archives.":"Inclure les fichiers side-car lors du téléchargement de piles et d'archives.","Increase storage size or delete files to continue.":"Augmentez l'espace de stockage ou supprimez des fichiers pour continuer.","Index":"Index","Index and import files through the user interface.":"Indexer et importer des fichiers via l'interface utilisateur.","Indexing":"Indexation","Indexing failed":"Échec de l'indexation","Indexing media and sidecar files…":"Indexation des fichiers médias et side-car…","Information":"Informations","Instance ID":"ID de l'instance","Insufficient storage.":"Espace de stockage insuffisant.","Interval":"Intervalle","Invalid":"Invalide","Invalid address":"Adresse incorrecte","Invalid country":"Pays non valide","Invalid date":"Date incorrecte","Invalid parameters":"Paramètres invalides","Invalid photo selected":"Photo non valide sélectionnée","Invalid time":"Heure incorrecte","Invalid URL":"URL incorrecte","It is a one-time use code that will disable 2FA for your account when you use it.":"Il s'agit d'un code à usage unique qui désactivera l'authentification à deux facteurs (2FA) lors de l'usage de votre compte.","Item":"Item","Items per page:":"Article(s) par page :","JPEG Quality: %{n}":"Qualité des JPEG : %{n}","JPEG Size Limit: %{n}px":"Limite de taille des JPEGs : %{n}px","JPEGs and thumbnails are automatically rendered as needed.":"Les JPEGs et miniatures sont automatiquement affichés selon les besoins.","Keywords":"Mots-clés","Label":"Etiquette","Labels":"Étiquettes","Labels deleted":"Étiquettes supprimées","Lanczos: Detail Preservation, Minimal Artifacts":"Lanczos : Préservation des détails, artefacts minimaux","Language":"Langue","Last Active":"Dernière activité","Last Login":"Dernière connexion","Last page":"Dernière page","Last Sync":"Dernière synchro","Last Used":"Dernière utilisation","Latitude":"Latitude","LDAP/AD":"LDAP/AD","Learn more":"En savoir plus","Learn More":"En savoir plus","Legal Information":"Informations légales","Lens":"Objectif","Library":"Bibliothèque","License":"Licence","Like":"Préféré","Lime":"Citron","Limit reached, showing first %{n} files":"Limite atteinte, affichage des %{n} premiers fichiers","Linear: Very Smooth, Best Performance":"Linéaire : Très lisse, meilleure performance","Link":"Lien","List":"Liste","List View":"Vue en liste","Live":"Live","Live Photos":"Photos en direct","Load more":"En charger plus","Loading items...":"Chargement des articles…","Loading...":"Chargement…","Local":"Locale","Local Time":"Heure locale","Location":"Emplacement","Log messages appear here whenever PhotoPrism comes across broken files, or there are other potential issues.":"Les messages des journaux s'affichent ici si PhotoPrism rencontre un fichier corrompu ou s'il y a un autre problème potentiel.","Login":"Connexion","Logout":"Déconnexion","Logs":"Journaux","Longitude":"Longitude","Low":"Basse","Magenta":"Magenta","Main Color":"Couleur principale","Male":"Homme","Manage Account":"Gérer le compte","Manual":"Manuel","Manual Upload":"Chargement manuel","Maps":"Cartes","Marker":"Marqueur","Maximum number of accounts has been reached.":"Le nombre maximum de comptes a été atteint.","Media":"Les médias","Medium":"Moyen","Membership":"Adhésion","Merge %{a} with %{b}?":"Fusionner %{a} avec %{b} ?","Message":"Message","Message sent":"Message envoyé","Metadata":"Métadonnées","Metrics":"Métriques","Minimize":"Minimiser","Missing":"Manquant","Missing or invalid configuration":"Configuration manquante ou incorrecte","Moments":"Moments","Monochrome":"Monochrome","Month":"Mois","More options":"Plus d'options","Mosaic":"Mosaïque","Most Relevant":"Le plus pertinent","Move Files":"Déplacer les fichiers","Must have at least %{n} characters.":"Doit comporter au moins %{n} caractères.","Mute":"Muet","Name":"Nom","Name too long":"Nom trop long","Never":"Jamais","New":"Nouvelles","New Password":"Nouveau mot de passe","Newest First":"La plus récente d'abord","Next":"Suivant","Next page":"Page suivante","Next visual":"Visuel suivant","No":"Non","No albums found":"Aucun album trouvé","No data available":"Pas de données disponibles","No labels found":"Aucune étiquette trouvée","No matching records found":"Aucun enregistrement correspondant n'a été trouvé","No more":"Pas plus","No people found":"Aucune personne trouvée","No pictures found":"Aucune image trouvée","No recently edited pictures":"Aucune image modifiée récemment","No server connection":"Pas de connexion au serveur","No servers configured.":"Aucun serveur configuré.","No services configured.":"Aucun service n'est configuré.","No thanks":"Non merci","No warnings or error containing this keyword. Note that search is case-sensitive.":"Aucun avertissement ou erreur contenant ce mot-clé. Notez que la recherche est sensible à la casse.","Non-photographic and low-quality images require a review before they appear in search results.":"Les images non photographiques ou de mauvaise qualité doivent faire l'objet d'un examen avant d'apparaître dans les résultats de recherche.","None":"Aucun","Not allowed":"Non autorisé","Not found":"Non trouvé","Not sorted.":"Non trié.","Not supported":"Non pris en charge","Note you may manually manage your originals folder and importing is optional.":"Notez que vous pouvez gérer manuellement votre dossier d'originaux et que l'importation est facultative.","Note:":"Remarque :","Note: Only WebDAV servers, like Nextcloud or PhotoPrism, can be configured as remote service for backup and file upload.":"Note : Seuls les serveurs WebDAV, comme Nextcloud ou PhotoPrism, peuvent être configurés comme service à distance pour la sauvegarde et le chargement de fichiers.","Notes":"Remarques","Nothing to see here yet.":"Rien à voir ici pour le moment.","Nothing was found.":"Rien n'a été trouvé.","Offline":"Hors-ligne","OIDC":"OIDC","OK":"OK","Oldest First":"La plus ancienne d'abord","On Windows, enter the following resource in the connection dialog:":"Sous Windows, saisissez la ressource suivante dans la boîte de dialogue de connexion :","On-demand generation of thumbnails may cause high CPU and memory usage. It is not recommended for resource-constrained servers and NAS devices.":"La génération de vignettes à la demande peut entraîner une charge élevée du processeur et de la mémoire. Elle est déconseillée en cas de serveurs ou d'appareils NAS aux ressources limitées.","Once a week":"Une fois par semaine","One album found":"Un album trouvé","One file found":"Un fichier trouvé","One file uploaded":"Un fichier téléchargé","One folder found":"Un dossier trouvé","One label found":"Une étiquette trouvée","One person found":"Une personne trouvée","One picture found":"Une image trouvée","Only locally managed accounts can be set up for authentication with 2FA.":"L'authentification à deux facteurs (2FA) ne peut être activée que pour les comptes gérés localement.","Open":"Ouvrir","optional":"optionnel","or":"ou","Orange":"Orange","Organization":"Organisation","Orientation":"Orientation","Original file names will be stored and indexed.":"Les noms des fichier originaux seront sauvegardés et indexés.","Original Name":"Nom original","Originals":"Originaux","Other":"Autre","Our mission is to provide the most user- and privacy-friendly solution to keep your pictures organized and accessible.":"Notre mission est de fournir la solution la plus conviviale et la plus respectueuse de la vie privée pour que vos photos soient organisées et accessibles.","Outdoor":"Extérieur","Page {0}, Current page":"Page {0}, page en cours","Pages":"Pages","Pagination Navigation":"Navigation par pagination","Panorama":"Panorama","Panoramas":"Panoramas","Password":"Mot de passe","Password changed":"Mot de passe modifié","People":"Personnes","People you share a link with will be able to view public contents.":"Les personnes avec qui vous partagez un lien pourront voir le contenu public de votre bibliothèque.","Permanently deleted":"Supprimé définitivement","Permanently remove files to free up storage.":"Supprimer définitivement les fichiers pour récupérer de la place de stockage.","Person":"Personne","Personal":"Personnel","Photo":"Photo","PhotoPrism is 100% self-funded and independent.":"PhotoPrism est autofinancé à 100% et indépendant.","PhotoPrism+ Membership":"Adhésion à PhotoPrism","Photos":"Photos","Picture Title":"Titre de l'image","Pink":"Rose","Place":"Lieu","Place & Time":"Unité de lieu et de temps","Places":"Lieux","Please confirm your new password.":"Veuillez confirmer votre nouveau mot de passe.","Please copy the following randomly generated app password and keep it in a safe place, as you will not be able to see it again:":"Veuillez copier le mot de passe suivant, généré de manière aléatoire, et le conserver dans un endroit sûr, car vous ne pourrez plus le voir :","Please do not upload any private, unlawful or offensive pictures.":"Attention à ne pas envoyer de photos privées, illégales ou offensantes.","Please don't upload photos containing offensive content.":"Veuillez ne pas envoyer de photos choquantes.","Please enter OTP character {0}":"Saisir le caractère OTP {0}","Please note that changing your password will log you out on other devices and browsers.":"Veuillez noter que la modification de votre mot de passe vous déconnectera sur d'autres appareils et navigateurs.","Please restart your instance for the changes to take effect.":"Veuillez redémarrer votre instance pour que les changements prennent effet.","Please wait…":"Veuillez patienter…","PM":"PM","PNG Size Limit: %{n}px":"Limite de taille PNG : %{n}px","Portrait":"Portrait","Preserve filenames":"Conserver les noms de fichiers","Press enter to create a new album.":"Appuyer sur la touche entrée pour créer un nouvel album.","Prevent database and album backups as well as YAML sidecar files from being created.":"Désactiver les sauvegardes de bases de données et d’albums ainsi que la création de fichiers side-car YAML.","Prevent other apps from accessing PhotoPrism as a shared network drive.":"Interdire à une autre application l'accès à PhotoPrism en tant que lecteur réseau partagé.","Preview":"Prévisualisation","Preview Images":"Images de prévisualisation","Previous":"Précédent","Previous page":"Page précédente","Previous visual":"Visuel précédent","Primary":"Primaire","Private":"Privée","Product Feedback":"Commentaires sur le produit","Projection":"Projection","Purple":"Violet","Quality Filter":"Filtre de qualité","Quality Score":"Score de qualité","r":"r","Random":"Aléatoire","Rating {0} of {1}":"Évaluation {0} sur {1}","Raw":"Brut","RAW":"RAW","Re-index all originals, including already indexed and unchanged files.":"Réindexer tous les originaux, en incluant ceux déjà indexés et les fichiers inchangés.","Read-Only Mode":"Accès en lecture seule","Recently Added":"Ajoutées récemment","Recently Archived":"Archivées récemment","Recently Edited":"Modifiées récemment","Recognition starts after indexing has been completed.":"La reconnaissance démarrera après la fin de l'indexation.","Recognize faces so people can be assigned and found.":"Rechercher les visages pour qu'on puisse les attribuer à des personnes et ainsi permettre de trouver ces personnes.","Recognized":"Reconnues","Recovery Code":"Code de récupération","Red":"Rouge","Refresh":"Rafraîchir","Regions":"Les régions","Register":"S'inscrire","Reload":"Recharger","Reloading…":"Rechargement…","Remote Sync":"Synchronisation à distance","Remove":"Supprimer","remove failed: unknown album":"échec de la suppression : album inconnu","Remove from Album":"Retirer de l'album","Remove imported files to save storage. Unsupported file types will never be deleted, they remain in their current location.":"Supprimez les fichiers importés pour économiser l'espace de stockage. Les fichiers non pris en charge ne sont jamais supprimés et demeurent à leur emplacement actuel.","Request failed - are you offline?":"La requête a échoué - êtes-vous hors ligne ?","Request failed - invalid response":"Échec de la requête - réponse incorrecte","Require non-photographic and low-quality images to be reviewed before they appear in search results.":"Impose un examen préalable des images non photographiques ou de faible qualité avant de les faire apparaître dans les résultats de recherche.","Resolution":"Résolution","Restart":"Redémarrer","Restore":"Restaurer","Restored":"Restauré","Retry Limit":"Limite de réessai","Retype Password":"Ressaisir le mot de passe","Review":"Examen","Role":"Rôle","Rows per page:":"Lignes par page :","Satellite":"Satellite","Save":"Sauvegarder","Scan":"Numérisée","Scan the QR code with your authenticator app or use the setup key shown below and then enter the generated verification code:":"Scannez le code QR avec votre application d'authentification ou utilisez la clé d'installation indiquée ci-dessous, puis saisissez le code de vérification généré :","Scans":"Numérisées","Scope":"Portée","Search":"Rechercher","Search and display photos on a map.":"Rechercher et afficher des images sur une carte.","Season":"Saison","Secret":"Secret","Security and Access":"Sécurité et accès","Select":"Sélectionner","Select a source folder to import files…":"Sélectionner le dossier source d'où importer des fichiers…","Select date":"Sélectionner la date","Select dates":"Sélectionner les dates","Select or create an album":"Sélectionner ou créer un album","Select the files to upload…":"Sélectionner les fichiers à charger…","Select the folder to be indexed…":"Sélectionner le dossier à indexer…","Select Time":"Sélectionner l'heure","Selection approved":"Sélection approuvée","Selection archived":"Sélection archivée","Selection restored":"Sélection restaurée","Sequential Name":"Suite logique de noms","Service URL":"URL du service","Services":"Services","Session":"Session","Session ID":"Identifiant de session","Sessions":"Sessions","Set as Album Cover":"Utiliser comme couverture de l'album","Settings":"Paramètres","Settings saved":"Paramètres sauvegardés","Setup":"Configurer","Share":"Partager","Share %{s}":"Partager %{s}","Share your pictures with other apps and services.":"Partagez vos photos avec d'autres applications et services.","Show":"Afficher","Show all new faces":"Montrer tous les nouveaux visages","Show Captions":"Afficher les légendes","Show hidden":"Afficher les éléments masqués","Show less":"Montrer moins","Show more":"Montre plus","Show server logs in Library.":"Afficher les journaux serveurs dans Bibliothèque.","Show Titles":"Afficher les titres","Sidecar":"Fichier side-car","Sidecar Files":"Fichiers side-car","Sign in":"S'identifier","Similar":"Similaire","Size":"Taille","Slideshow":"Diaporama","Slow":"Lent","Software":"Logiciel","Software Update":"Mise à jour du logiciel","Something went wrong, try again":"Quelque chose s'est mal passé, réessayez","Sort by":"Trier par","Sort Order":"Ordre de tri","Sorted ascending.":"Triés par ordre croissant.","Sorted descending.":"Trié par ordre décroissant.","Source":"Source","Stack":"Groupe","Stack files sharing the same unique image or instance identifier.":"Images partageant le même identifiant unique d'image.","Stack pictures taken at the exact same time and location based on their metadata.":"Images prises exactement au même moment et au même endroit, en se fondant sur les métadonnées.","Stackable":"Groupable","Stacks":"Groupes","Start":"Démarrer","Start Page":"Page d'accueil","Static Size Limit: %{n}px":"Limite de taille avant rendu : %{n}px","Status":"Statut","Storage":"Stockage","Streets":"Rues","Subject":"Sujet","Submit":"Soumettre","Successfully activated":"Activation réussie","Successfully Connected":"Bien connecté","Successfully deleted":"Suppression réussie","Successfully verified":"Vérifié avec succès","Super Admin":"Super Admin","Support for additional services, like Google Drive, will be added over time.":"La prise en charge de services supplémentaires tels que Google Drive sera ajoutée ultérieurement.","Support Our Mission":"Soutenez notre mission","Sync":"Synchronisation","Sync raw and video files":"Synchroniser les fichiers raw et les vidéos","Taken":"Prise","Teal":"Sarcelle","TensorFlow is required for image classification, facial recognition, and detecting unsafe content.":"TensorFlow est requis pour la classification des images, la reconnaissance faciale et la détection des contenus choquants.","Terrain":"Terrain","Text":"Texte","Text too long":"Texte trop long","Thank You for Your Support!":"Merci pour votre soutien !","That's why PhotoPrism was built from the ground up to run wherever you need it, without compromising freedom, privacy, or functionality.":"C'est pourquoi PhotoPrism a été conçu dès le départ pour fonctionner partout où vous en avez besoin, sans compromettre la liberté, la confidentialité ou la fonctionnalité.","The index currently contains %{n} hidden files.":"L'index contient actuellement %{n} fichiers cachés.","Their format may not be supported, they haven't been converted to JPEG yet or there are duplicates.":"Leur format n'est peut-être pas pris en charge, ils n'ont pas encore été convertis en JPEG ou ce sont des doublons.","Theme":"Thème","This field is required":"Ce champ est obligatoire","This mounts the originals folder as a network drive and allows you to open, edit, and delete files from your computer or smartphone as if they were local.":"Cela monte le dossier des originaux en tant que lecteur réseau et vous permet d'ouvrir, modifier et supprimer des fichiers de votre ordinateur ou smartphone comme s'ils étaient locaux.","Time UTC":"Heure UTC","Time Zone":"Fuseau horaire","Timeout":"Délai","Title":{"Account":"Titre","Photo":"Titre","":"Titre"},"Title / Position":"Titre / Poste","Title too long":"Titre trop long","to":"à","To avoid being locked out of your account, please download, print or copy this recovery code now and keep it in a safe place.":"Pour éviter le blocage de votre compte, téléchargez, imprimez ou copiez maintenant ce code de récupération, et conservez-le dans un endroit sûr.","To generate a new app-specific password, please enter the name and authorization scope of the application and select an expiration date:":"Pour générer un nouveau mot de passe spécifique à l'application, veuillez saisir le nom et la portée de l'autorisation de l'application ainsi que sélectionner une date d'expiration :","To switch to a new authenticator app or device, first deactivate two-factor authentication and then reactivate it:":"Pour changer d'application ou de dispositif d'authentification, commencez par désactiver l'authentification à deux facteurs, puis réactivez-la :","To upgrade, you can either enter an activation code or click \"Register\" to sign up on our website:":"Pour effectuer une mise à niveau, vous pouvez soit saisir un code d'activation, soit cliquer sur «S'inscrire» pour vous inscrire sur notre site web :","Today":"Aujourd'hui","Toggle View":"Basculer la vue","Token":"Jeton","Too many files selected":"Trop de fichiers sélectionnés","Too many requests":"Trop de demandes","Troubleshooting":"Résolution des problèmes","Try again using other filters or keywords.":"Réessayez en utilisant d'autres filtres ou mots-clés.","Two-factor authentication has been enabled for your account.":"L'authentification à deux facteurs de votre compte est désormais activée.","Type":"Type","Unauthorized":"Non autorisé","Undo":"Annuler","Unique ID":"Identifiant unique","Unknown":"Inconnu","Unregistered":"Non enregistré","Unsorted":"Non trié","Unstack":"Dégrouper","Updated":"Mis à jour","Updating faces":"Mise à jour des visages","Updating index":"Mise à jour de l'index","Updating moments":"Mise à jour des moments","Updating picture…":"Mise à jour de l'image…","Updating previews":"Mise à jour des aperçus","Updating stacks":"Mise à jour des groupes","Upgrade":"Mise à niveau","Upgrade Now":"Mettre à niveau maintenant","Upload":"Chargement","Upload complete":"Chargement terminé","Upload complete. Indexing…":"Chargement terminé. Indexation en cours…","Upload failed":"Échec du chargement","Upload local files":"Envoyer des fichiers locaux","Upload Path":"Chemin d'accès","Upload to WebDAV and share links with friends.":"Envoyer via le protocole WebDAV et partager des liens avec des amis.","Uploading %{n} of %{t}…":"Chargement de %{n} sur %{t}…","Uploading photos…":"Chargement des photos en cours…","Uploading…":"Téléchargement…","Uploads that may contain such images will be rejected automatically.":"Les fichiers chargés qui contiendraient de telles images seront automatiquement rejetés.","Use Presets":"Utiliser les préréglages","Use the following recovery code to access your account when you are unable to generate a valid verification code with your authenticator app:":"Utilisez le code de récupération suivant pour accéder à votre compte lorsque vous ne pouvez pas générer un code de vérification valide avec l'application d'identification :","Use your recovery code or contact an administrator for help.":"Utilisez votre code de récupération ou contactez un administrateur pour obtenir de l'aide.","User":"Utilisateur","User Guide":"Guide de l'utilisateur","User Interface":"Interface utilisateur","Username":"Identifiant","Users":"Utilisateurs","Vector":"Vectoriel","Vectors":"Vectoriels","Verification Code":"Code de vérification","Video":"Vidéo","Video Duration":"Durée de la vidéo","Videos":"Vidéos","View":"Voir","View search results as a list.":"Afficher les résultats de la recherche sous forme de liste.","Viewer":"Visionneuse","Visitor":"Visiteur","Visual Similarity":"Similitude visuelle","Warning":"Avertissement","We appreciate your feedback!":"Nous apprécions vos commentaires !","We do our best to respond within five business days or less.":"Nous faisons de notre mieux pour répondre dans un délai de cinq jours ouvrables ou moins.","Web Login":"Connexion Web","WebDAV":"WebDAV","WebDAV clients can connect to PhotoPrism using the following URL:":"Les clients WebDAV peuvent se connecter à PhotoPrism en utilisant l'URL suivante :","WebDAV clients, like Microsoft’s Windows Explorer or Apple's Finder, can connect directly to PhotoPrism.":"Les clients WebDAV, comme par exemple l'explorateur Windows de Microsoft ou le Finder d'Apple, peuvent se connecter directement à PhotoPrism.","WebDAV Upload":"Chargement via le protocole WebDAV","WebGL support is disabled in your browser":"La prise en charge de WebGL est désactivée dans votre navigateur","Website":"Site web","White":"Blanc","Work Details":"Détails sur le poste","Year":"Année","Yellow":"Jaune","Yes":"Oui","You are welcome to contact us at membership@photoprism.app for questions regarding your membership.":"Vous pouvez nous contacter à l'adresse membership@photoprism.app pour toute question concernant votre adhésion.","You can only download one album":"Vous ne pouvez télécharger qu'un seul album","You can only download one label":"Vous ne pouvez télécharger qu'une seule étiquette","You can upload up to %{n} files for test purposes.":"Vous pouvez déposer jusqu'à %{n} fichiers à des fins de test.","You may only select one item":"Vous ne pouvez sélectionner qu'un seul élément","You may rescan your library to find additional faces.":"Vous pouvez réanalyser votre bibliothèque pour trouver plus de visages.","Your account has been successfully connected.":"Votre compte a été connecté avec succès.","Your browser does not support WebGL":"Votre navigateur ne prend pas en charge WebGL","Your continued support helps us provide regular updates and remain independent, so we can fulfill our mission and protect your privacy.":"Votre soutien continu nous aide à fournir des mises à jour régulières et à rester indépendants, afin que nous puissions remplir notre mission et protéger votre vie privée.","Your library is continuously analyzed to automatically create albums of special moments, trips, and places.":"Votre bibliothèque est analysée en permanence pour créer automatiquement des albums regroupant des moments, des voyages et des lieux spéciaux.","Zoom in/out":"Agrandir/Dézoomer"}} \ No newline at end of file +{"fr":{"{0} appended action":"{0} action(s) attachées(s)","{0} files":"{0} fichier(s)","{0} files ({1} in total)":"{0} fichiers(s) ({1} au total)","{0} more":"{0} de plus","{0} prepended action":"{0} action(s) préliminaire(s)","{0} selected":"{0} sélectionnée(s)","{0}-{1} of {2}":"{0}-{1} de {2}","%{n} albums found":"%{n} album(s) trouvé(s)","%{n} files uploaded":"%{n} fichier(s) chargé(s)","%{n} folders found":"%{n} dossier(s) trouvé(s)","%{n} GB of %{q} GB used":"%{n} Go de %{q} Go utilisés","%{n} labels found":"%{n} étiquette(s) trouvée(s)","%{n} people found":"%{n} personne(s) trouvée(s)","%{n} pictures found":"%{n} image(s) trouvée(s)","%{s} is too long":"%{s} est trop long","%{s} is too short":"%{s} est trop court","1 hour":"1 heure","12 hours":"12 heures","2-Factor Authentication":"Authentification à 2 facteurs","2FA":"2FA","4 hours":"4 heures","A click will copy it to your clipboard.":"Cliquez pour copier vers votre presse-papier.","A new version of %{s} is available:":"Une nouvelle version de %{s} est disponible :","About":"À propos","Access Token":"Jeton d'accès","Account":"Compte","Account created":"Compte créé","Account deleted":"Compte supprimé","Account restored":"Compte restauré","Accounts":"Comptes","Accuracy":"Précision","Action":"Action","Actions":"Actions","Activate":"Activer","Activate to remove sorting.":"Activer pour supprimer le tri.","Activate to sort ascending.":"Activer pour trier par ordre croissant.","Activate to sort descending.":"Activer pour trier par ordre décroissant.","Activation Code":"Code d'activation","Add":"Ajouter","Add %{s}?":"Ajouter %{s} ?","Add Account":"Ajouter un compte","Add Album":"Ajouter un album","Add files to your library via Web Upload.":"Ajouter des fichiers à votre bibliothèque par Web Upload.","Add Link":"Ajouter un lien","Add person?":"Ajouter une personne ?","Add pictures from search results by selecting them.":"Ajouter des images à partir des résultats de recherche en les sélectionnant.","Add to album":"Ajouter à l'album","Added":"Ajouté","Admin":"Administrateur","Advanced":"Avancé","After 1 day":"Après 1 jour","After 3 days":"Après 3 jours","After 7 days":"Après 7 jours","After entering your password for confirmation, you can set up two-factor authentication with a compatible authenticator app or device:":"Après avoir saisi votre mot de passe pour confirmation, vous pourrez configurer l'authentification à deux facteurs à l'aide d'une application ou d'un dispositif d'authentification compatible :","After one month":"Après un mois","After one year":"Après un an","After selecting pictures from search results, you can add them to an album using the context menu.":"Après avoir sélectionné des images dans les résultats de recherche, vous pouvez les ajouter à un album à l'aide du menu contextuel.","After two months":"Après 2 mois","After two weeks":"Après 2 semaines","Album":"Album","Album Backups":"Sauvegardes d'albums","Album created":"Album créé","Albums":"Albums","Albums deleted":"Albums supprimés","All":"Tous","All %{n} albums loaded":"Les %{n} album(s) ont été chargé(s)","All %{n} labels loaded":"Les %{n} étiquettes ont été chargées","All %{n} people loaded":"Les %{n} personnes ont été chargées","All Cameras":"Tous les appareils photo","All Categories":"Toutes les catégories","All Colors":"Toutes les couleurs","All Countries":"Tous les pays","All fields are required":"Tous les champs sont obligatoires","All files from import folder":"Tous les fichiers du dossier d'importation","All Lenses":"Tous les objectifs","All Months":"Tous les mois","All originals":"Tous les fichiers originaux","All Years":"Toutes les années","Alternatively, you can upload files directly to WebDAV servers like Nextcloud.":"Vous pouvez également envoyer les fichiers directement vers un serveur WebDAV comme Nextcloud.","Altitude":"Altitude","Altitude (m)":"Altitude (m)","AM":"AM","Animated":"Animé","Animation":"Animation","Any private photos and videos remain private and won't be shared.":"Une photo ou vidéo privée restera privée et ne sera pas partagée.","API Key":"Clé d'API","Application":"Application","Apply":"Appliquer","Approve":"Approuver","Apps and Devices":"Applications et appareils","Archive":"Archives","Archived":"Archivé","Are you sure you want to archive the selection?":"Êtes-vous sûr de vouloir archiver la sélection ?","Are you sure you want to delete these albums?":"Êtes-vous sûr de vouloir supprimer ces albums ?","Are you sure you want to delete these labels?":"Êtes-vous sûr de vouloir supprimer ces étiquettes ?","Are you sure you want to delete this account?":"Êtes-vous sûr de vouloir supprimer ce compte ?","Are you sure you want to permanently delete these pictures?":"Êtes-vous sûr de vouloir supprimer définitivement ces photos ?","Are you sure you want to permanently delete this file?":"Êtes-vous sûr de vouloir supprimer définitivement ce fichier ?","Are you sure?":"Êtes-vous sûr ?","Artist":"Auteur","Aspect Ratio":"Format d'image","Audio":"Audio","Authentication":"Authentification","Auto":"Auto","Back":"Retour","Back to top":"Retour en haut de la page","Backup":"Sauvegarde","Badge":"Badge","Base Path":"Chemin de base","Become a member today, support our mission and enjoy our member benefits!":"Devenez membre aujourd'hui, soutenez notre mission et profitez de nos avantages !","Being 100% self-funded and independent, we can promise you that we will never sell your data and that we will always be transparent about our software and services.":"Étant 100% autofinancés et indépendants, nous pouvons vous promettre que nous ne vendrons jamais vos données et que nous serons toujours transparents sur nos logiciels et services.","Bio":"Biographie","Birth Date":"Date de naissance","Black":"Noir","Blackman: Lanczos Modification, Less Ringing Artifacts":"Blackman : modification de Lanczos, moins d'artefacts de sonnerie","Blue":"Bleu","Brown":"Marron","Browse":"Parcourir","Browse and edit image classification labels.":"Parcourir et modifier les étiquettes de classification d'images.","Browse and share your pictures organized into monthly albums.":"Parcourez et partagez vos photos organisées en albums mensuels.","Browse Files":"Parcourir les fichiers","Browse indexed files and folders in Library.":"Parcourir les dossiers et fichiers indexés dans la bibliothèque.","Bug Report":"Signaler une erreur","Busy, please wait…":"Veuillez patienter…","By using the software and services we provide, you agree to our terms of service, privacy policy, and code of conduct.":"En utilisant le logiciel et les services que nous fournissons, vous acceptez nos conditions d'utilisation, notre politique de confidentialité et notre code de conduite.","Calendar":"Calendrier","Camera":"Appareil photo","Camera Serial":"N° de série de l'appareil photo","Can't access your authenticator app or device?":"Vous n'avez pas accès à votre application ou votre appareil d'authentification ?","Can't load more, limit reached":"Impossible de charger plus, limite atteinte","Can't select more items":"Impossible de sélectionner plus d’éléments","Cancel":"Annuler","Caption":"Légende","Cards":"Cartes","Carousel slide {0} of {1}":"Page {0} sur {1} du carrousel","Category":"Catégorie","Change Avatar":"Changer d'avatar","Change Password":"Changer le mot de passe","Change personal profile and security settings.":"Modifier le profil personnel et les paramètres de sécurité.","Change photo titles, locations, and other metadata.":"Modifier les titres, les lieux et d'autres métadonnées.","Change private flag":"Modifier le statut privé","Changes could not be saved":"Les modifications n'ont pu être sauvegardées","Changes successfully saved":"Les modifications ont bien été enregistrées","Changes to the advanced settings require a restart to take effect.":"Un redémarrage est nécessaire pour que les modifications apportées aux paramètres avancés soient prises en compte.","Checked":"Vérifié","Chroma":"Saturation","Cleaning index and cache":"Nettoyage de l'index et du cache","Cleanup":"Nettoyage","Clear {0}":"Effacer {0}","Client":"Client","Client Credentials":"Identifiants du client","Close":"Fermer","Codec":"Codec","Color":"Couleur","Color Profile":"Profil de couleur","Colors":"Couleurs","Compare Editions":"Comparer les éditions","Complete Rescan":"Réanalyse complète","Confidence":"Confiance","Confirm":"Confirmer","Connect":"Connecter","Connect via WebDAV":"Se connecter via le protocole WebDAV","Connected":"Connecté","Contact Details":"Coordonnées","Contact Us":"Nous contacter","Contains %{n} pictures.":"Contient %{n} images.","Contains one picture.":"Contient une image.","Content":"Contenu","Continue":"Poursuivre","Continue with %{provider}":"Continuer avec %{fournisseur}","Contributor":"Contributeur","Converting":"Conversion en cours","Copied to clipboard":"Copié vers le presse-papier","Copy":"Copier","Copyright":"Copyright","Couldn't find anything.":"Aucun élément trouvé.","Country":"Pays","Create Account":"Créer un compte","Create album":"Créer un album","Create regular backups based on the configured schedule.":"Réaliser des sauvegardes de l'index en suivant la planification programmée.","Create YAML files to back up album metadata.":"Utiliser des fichiers YAML pour sauvegarder les métadonnées des albums.","Create YAML sidecar files to back up picture metadata.":"Utiliser des fichiers side-car YAML pour sauvegarder les métadonnées des images.","Created":"Créé","Creating thumbnails for":"Création des miniatures pour","Cubic: Moderate Quality, Good Performance":"Cubique : Qualité modérée, bonne performance","Current Password":"Mot de passe actuel","Custom":"Sur mesure","Cyan":"Cyan","Daily":"Quotidien","Database Backups":"Sauvegarde de la base de données","Day":"Jour","Deactivate":"Désactiver","Debug Logs":"Journaux de débogage","Default":"Valeur par défaut","Default Folder":"Dossier par défaut","Delete":"Supprimer","Delete All":"Tout supprimer","Delete all?":"Tout supprimer ?","Delete orphaned index entries, sidecar files and thumbnails.":"Supprimer les entrées d'index, les vignettes, et les fichiers side-car orphelins.","Description":"Description","Detailed instructions can be found in our User Guide.":"Vous trouverez des instructions détaillées dans notre guide de l’utilisateur.","Details":"Détails","Dimensions":"Dimensions","Disable Backups":"Désactiver les sauvegardes","Disable Darktable":"Désactiver Darktable","Disable ExifTool":"Désactiver l'outil ExifTool","Disable features that require write permission for the originals folder.":"Désactiver les fonctions pour lesquelles l'autorisation d'écrire dans le dossier des originaux est nécessaire.","Disable FFmpeg":"Désactiver FFmpeg","Disable ImageMagick":"Désactiver ImageMagick","Disable interactive world maps and reverse geocoding.":"Désactiver les cartes du monde interactives et le géocodage inversé.","Disable Places":"Désactiver les Lieux","Disable RawTherapee":"Désactiver RawTherapee","Disable TensorFlow":"Désactiver TensorFlow","Disable Vectors":"Désactiver les vecteurs","Disable WebDAV":"Désactiver WebDAV","Disables vector graphics support.":"Désactive la prise en charge des images vectorielles.","Disables video transcoding and thumbnail extraction.":"Désactive le transcodage vidéo et l'extraction des vignettes.","Discover":"Découvrir","Dismiss":"Rejeter","Display Name":"Nom affiché","Display picture captions in search results.":"Afficher les légendes des images dans les résultats de recherche.","Display picture titles in search results.":"Afficher les titres des images dans les résultats de recherche.","Document":"Document","Documents":"Documents","Don't use Darktable to convert RAW images.":"Ne pas utiliser Darktable pour convertir les fichers RAW.","Don't use ImageMagick to convert images.":"Ne pas utiliser ImageMagick pour convertir les images.","Don't use RawTherapee to convert RAW images.":"Ne pas utiliser RawTherapee pour convertir les fichiers RAW.","Done":"Terminé","Done.":"Terminé.","Download":"Télécharger","Download only original media files, without any automatically generated files.":"Télécharger uniquement les fichiers multimédias originaux, sans fichiers générés automatiquement.","Download remote files":"Télécharger les fichiers distants","Download single files and zip archives.":"Téléchargement de fichiers et d'archives zip.","Downloading…":"Téléchargement en cours…","Downscaling Filter":"Filtre de qualité","Drag and drop files here":"Glisser et déposer les fichiers ici","Due to the high volume of emails we receive, our team may be unable to get back to you immediately.":"En raison du volume élevé d'e-mails que nous recevons, notre équipe peut être dans l'incapacité de vous répondre immédiatement.","Duplicates will be skipped and only appear once.":"Les doublons seront ignorés et n'apparaîtront qu'une seule fois.","Duration":"Durée","Dynamic Previews":"Avant-premières non cachées","Dynamic Size Limit: %{n}px":"Limite de taille non cachée : %{n}px","E-Mail":"Courriel","Edit":"Modifier","Edit %{s}":"Modifier %{s}","Edit Account":"Modifier le compte","Edit Photo":"Modifier la photo","Edited":"Modifié","Email":"Email","Enable debug mode to display additional logs and help with troubleshooting.":"Activer le mode débogage pour afficher des journaux supplémentaires et aider au dépannage.","Enable new features that may be incomplete or unstable.":"Activer les nouvelles fonctionnalités, potentiellement incomplètes ou instables.","Enables RAW converter presets. May reduce performance.":"Active les préréglages du convertisseur RAW. Cela peut réduire les performances.","Enabling two-factor authentication means that you will need a randomly generated verification code to log in, so even if someone gains access to your password, they will not be able to access your account.":"Avec l'authentification à deux facteurs, il faut un code de vérification généré de manière aléatoire pour se connecter, si bien que personne, même connaissant votre mot de passe, ne pourra se connecter à votre compte.","Enter date":"Saisir la date","Enter dates":"Saisir les dates","Enter the code generated by your authenticator app:":"Entrez le code généré par votre application d'authentification :","Enter verification code":"Entrer le code de vérification","Enter your password to confirm the action and continue:":"Saisissez votre mot de passe pour confirmer l'action et continuer :","Error":"Erreur","Errors":"Erreurs","Estimate":"Estimation","Estimate Locations":"Reconnaissance de lieux","Estimate the approximate location of pictures without GPS coordinates.":"Tente de reconnaître le lieu où une photo dépourvue de géolocalisation a été prise.","Every two days":"Tous les deux jours","Exclude content marked as private from search results, shared albums, labels, and places.":"Exclure le contenu marqué comme privé des résultats de recherche, des albums partagés, des étiquettes et des lieux.","Exclude hidden":"Exclure les éléments cachés","ExifTool is required for full support of XMP metadata, videos and Live Photos.":"ExifTool est requis pour la prise en charge complète des métadonnées XMP, des vidéos et des Live Photos.","Experimental Features":"Fonctions Expérimentales","Expires":"Expire","Exposure":"Exposition","Extract still images and generate thumbnails while indexing.":"Extrait les images fixes et génère des vignettes lors de l'indexation.","F Number":"Ouverture","Face":"Visage","Faces":"Visages","Failed removing link":"Échec de la suppression du lien","Failed to connect account.":"Échec de la connexion au compte.","Failed updating link":"Échec de la mise à jour du lien","Family Name":"Nom de famille","Fast":"Rapide","Favorite":"Favori","Favorites":"Favoris","Feature Request":"Demander une fonctionnalité","Feedback":"Retour d'information","Female":"Femme","File":"Fichier","File Browser":"Explorateur de fichiers","File Conversion":"Conversion de fichiers","File Name":"Nom du fichier","File Size":"Taille du fichier","Filename":"Nom du fichier","Files":"Fichiers","Files with sequential names like 'IMG_1234 (2)' and 'IMG_1234 (3)' belong to the same picture.":"Des fichiers ayant des noms séquentiels tels que 'IMG_1234 (2)' et 'IMG_1234 (3)' appartiennent à la même image.","First page":"Première page","Focal Length":"Longueur focale","Folder":"Dossier","Folder contains %{n} files":"Dossier contenant %{n} fichiers","Folder is empty":"Le dossier est vide","Folders":"Dossiers","Forgot password?":"Mot de passe oublié ?","FPS":"FPS","Frames":"Cadres","Full Access":"Accès intégral","Fullscreen":"Plein écran","General":"Général","Generate":"Générer","Generate albums of special moments, journeys, and places.":"Création automatique d'albums regroupant des moments, des voyages et des lieux particuliers.","Generate Previews":"Générer des aperçus","Generated":"Généré","Get Started":"Commencer","Given Name":"Prénom","Global Options":"Options globales","Go to page {0}":"Aller à la page {0}","Gold":"Or","Green":"Vert","Grey":"Gris","Guest":"Invité","Hash":"Somme de contrôle","Help":"Aide","Help & Support":"Aide & Support","Hidden":"Caché","Hidden Files":"Fichiers cachés","Hide":"Cacher","Hide photos that have been moved to archive.":"Masquer les photos archivées.","High":"Élevé","High Dynamic Range (HDR)":"Gamme dynamique élevée (HDR)","How can we help?":"Comment pouvons nous vous aider ?","Hybrid":"Hybride","If you lose access to your authenticator app or device, you can use your recovery code to regain access to your account.":"En cas de perte d'accès à votre application ou votre appareil d'authentification, vous pourrez utiliser votre code de récupération pour accéder à nouveau à votre compte.","Image":"Image","Image Quality":"Qualité de l'image","Import":"Importer","Import failed":"Échec de l'importation","Imported files will be sorted by date and given a unique name to avoid duplicates.":"Les fichiers importés seront classés par date et recevront un nom unique pour éviter les doublons.","Imported files will be sorted by date and given a unique name.":"Les fichiers importés seront classés par date et recevront un nom unique.","Importing %{s}…":"Importation de %{s} en cours…","Importing files to originals…":"Importation des fichiers vers le dossier des originaux…","in":"en","In case pictures you expect are missing, please rescan your library and wait until indexing has been completed.":"Si des images sont manquantes, veuillez réanalyser votre bibliothèque et attendre que l'indexation soit terminée.","Include RAW image files when downloading stacks and archives.":"Inclure les fichiers d'images RAW lors du téléchargement de piles et d'archives.","Include sidecar files when downloading stacks and archives.":"Inclure les fichiers side-car lors du téléchargement de piles et d'archives.","Increase storage size or delete files to continue.":"Augmentez l'espace de stockage ou supprimez des fichiers pour continuer.","Index":"Index","Index and import files through the user interface.":"Indexer et importer des fichiers via l'interface utilisateur.","Indexing":"Indexation","Indexing failed":"Échec de l'indexation","Indexing media and sidecar files…":"Indexation des fichiers médias et side-car…","Information":"Informations","Instance ID":"ID de l'instance","Insufficient storage.":"Espace de stockage insuffisant.","Interval":"Intervalle","Invalid":"Invalide","Invalid address":"Adresse incorrecte","Invalid country":"Pays non valide","Invalid date":"Date incorrecte","Invalid parameters":"Paramètres invalides","Invalid photo selected":"Photo non valide sélectionnée","Invalid time":"Heure incorrecte","Invalid URL":"URL incorrecte","It is a one-time use code that will disable 2FA for your account when you use it.":"Il s'agit d'un code à usage unique qui désactivera l'authentification à deux facteurs (2FA) lors de l'usage de votre compte.","Item":"Item","Items per page:":"Article(s) par page :","JPEG Quality: %{n}":"Qualité des JPEG : %{n}","JPEG Size Limit: %{n}px":"Limite de taille des JPEGs : %{n}px","JPEGs and thumbnails are automatically rendered as needed.":"Les JPEGs et miniatures sont automatiquement affichés selon les besoins.","Keywords":"Mots-clés","Label":"Etiquette","Labels":"Étiquettes","Labels deleted":"Étiquettes supprimées","Lanczos: Detail Preservation, Minimal Artifacts":"Lanczos : Préservation des détails, artefacts minimaux","Language":"Langue","Last Active":"Dernière activité","Last Login":"Dernière connexion","Last page":"Dernière page","Last Sync":"Dernière synchro","Last Used":"Dernière utilisation","Latitude":"Latitude","LDAP/AD":"LDAP/AD","Learn more":"En savoir plus","Learn More":"En savoir plus","Legal Information":"Informations légales","Lens":"Objectif","Library":"Bibliothèque","License":"Licence","Like":"Préféré","Lime":"Citron","Limit reached, showing first %{n} files":"Limite atteinte, affichage des %{n} premiers fichiers","Linear: Very Smooth, Best Performance":"Linéaire : Très lisse, meilleure performance","Link":"Lien","List":"Liste","List View":"Vue en liste","Live":"Live","Live Photos":"Photos en direct","Load more":"En charger plus","Loading items...":"Chargement des articles…","Loading...":"Chargement…","Local":"Locale","Local Time":"Heure locale","Location":"Emplacement","Log messages appear here whenever PhotoPrism comes across broken files, or there are other potential issues.":"Les messages des journaux s'affichent ici si PhotoPrism rencontre un fichier corrompu ou s'il y a un autre problème potentiel.","Login":"Connexion","Logout":"Déconnexion","Logs":"Journaux","Longitude":"Longitude","Low":"Basse","Magenta":"Magenta","Main Color":"Couleur principale","Male":"Homme","Manage Account":"Gérer le compte","Manual":"Manuel","Manual Upload":"Chargement manuel","Maps":"Cartes","Marker":"Marqueur","Maximum number of accounts has been reached.":"Le nombre maximum de comptes a été atteint.","Media":"Les médias","Medium":"Moyen","Membership":"Adhésion","Merge %{a} with %{b}?":"Fusionner %{a} avec %{b} ?","Message":"Message","Message sent":"Message envoyé","Metadata":"Métadonnées","Metrics":"Métriques","Minimize":"Minimiser","Missing":"Manquant","Missing or invalid configuration":"Configuration manquante ou incorrecte","Moments":"Moments","Monochrome":"Monochrome","Month":"Mois","More options":"Plus d'options","Mosaic":"Mosaïque","Most Relevant":"Le plus pertinent","Move Files":"Déplacer les fichiers","Must have at least %{n} characters.":"Doit comporter au moins %{n} caractères.","Mute":"Muet","Name":"Nom","Name too long":"Nom trop long","Never":"Jamais","New":"Nouvelles","New Password":"Nouveau mot de passe","Newest First":"La plus récente d'abord","Next":"Suivant","Next page":"Page suivante","Next visual":"Visuel suivant","No":"Non","No albums found":"Aucun album trouvé","No data available":"Pas de données disponibles","No labels found":"Aucune étiquette trouvée","No matching records found":"Aucun enregistrement correspondant n'a été trouvé","No more":"Pas plus","No people found":"Aucune personne trouvée","No pictures found":"Aucune image trouvée","No recently edited pictures":"Aucune image modifiée récemment","No server connection":"Pas de connexion au serveur","No servers configured.":"Aucun serveur configuré.","No services configured.":"Aucun service n'est configuré.","No thanks":"Non merci","No warnings or error containing this keyword. Note that search is case-sensitive.":"Aucun avertissement ou erreur contenant ce mot-clé. Notez que la recherche est sensible à la casse.","Non-photographic and low-quality images require a review before they appear in search results.":"Les images non photographiques ou de mauvaise qualité doivent faire l'objet d'un examen avant d'apparaître dans les résultats de recherche.","None":"Aucun","Not allowed":"Non autorisé","Not found":"Non trouvé","Not sorted.":"Non trié.","Not supported":"Non pris en charge","Note you may manually manage your originals folder and importing is optional.":"Notez que vous pouvez gérer manuellement votre dossier d'originaux et que l'importation est facultative.","Note:":"Remarque :","Note: Only WebDAV servers, like Nextcloud or PhotoPrism, can be configured as remote service for backup and file upload.":"Note : Seuls les serveurs WebDAV, comme Nextcloud ou PhotoPrism, peuvent être configurés comme service à distance pour la sauvegarde et le chargement de fichiers.","Notes":"Remarques","Nothing to see here yet.":"Rien à voir ici pour le moment.","Nothing was found.":"Rien n'a été trouvé.","Offline":"Hors-ligne","OIDC":"OIDC","OK":"OK","Oldest First":"La plus ancienne d'abord","On Windows, enter the following resource in the connection dialog:":"Sous Windows, saisissez la ressource suivante dans la boîte de dialogue de connexion :","On-demand generation of thumbnails may cause high CPU and memory usage. It is not recommended for resource-constrained servers and NAS devices.":"La génération de vignettes à la demande peut entraîner une charge élevée du processeur et de la mémoire. Elle est déconseillée en cas de serveurs ou d'appareils NAS aux ressources limitées.","Once a week":"Une fois par semaine","One album found":"Un album trouvé","One file found":"Un fichier trouvé","One file uploaded":"Un fichier téléchargé","One folder found":"Un dossier trouvé","One label found":"Une étiquette trouvée","One person found":"Une personne trouvée","One picture found":"Une image trouvée","Only locally managed accounts can be set up for authentication with 2FA.":"L'authentification à deux facteurs (2FA) ne peut être activée que pour les comptes gérés localement.","Open":"Ouvrir","optional":"optionnel","or":"ou","Orange":"Orange","Organization":"Organisation","Orientation":"Orientation","Original file names will be stored and indexed.":"Les noms des fichier originaux seront sauvegardés et indexés.","Original Name":"Nom original","Originals":"Originaux","Other":"Autre","Our mission is to provide the most user- and privacy-friendly solution to keep your pictures organized and accessible.":"Notre mission est de fournir la solution la plus conviviale et la plus respectueuse de la vie privée pour que vos photos soient organisées et accessibles.","Outdoor":"Extérieur","Page {0}, Current page":"Page {0}, page en cours","Pages":"Pages","Pagination Navigation":"Navigation par pagination","Panorama":"Panorama","Panoramas":"Panoramas","Password":"Mot de passe","Password changed":"Mot de passe modifié","People":"Personnes","People you share a link with will be able to view public contents.":"Les personnes avec qui vous partagez un lien pourront voir le contenu public de votre bibliothèque.","Permanently deleted":"Supprimé définitivement","Permanently remove files to free up storage.":"Supprimer définitivement les fichiers pour récupérer de la place de stockage.","Person":"Personne","Personal":"Personnel","Photo":"Photo","PhotoPrism is 100% self-funded and independent.":"PhotoPrism est autofinancé à 100% et indépendant.","PhotoPrism+ Membership":"Adhésion à PhotoPrism","Photos":"Photos","Picture Title":"Titre de l'image","Pink":"Rose","Place":"Lieu","Place & Time":"Unité de lieu et de temps","Places":"Lieux","Please confirm your new password.":"Veuillez confirmer votre nouveau mot de passe.","Please copy the following randomly generated app password and keep it in a safe place, as you will not be able to see it again:":"Veuillez copier le mot de passe suivant, généré de manière aléatoire, et le conserver dans un endroit sûr, car vous ne pourrez plus le voir :","Please do not upload any private, unlawful or offensive pictures.":"Attention à ne pas envoyer de photos privées, illégales ou offensantes.","Please don't upload photos containing offensive content.":"Veuillez ne pas envoyer de photos choquantes.","Please enter OTP character {0}":"Saisir le caractère OTP {0}","Please note that changing your password will log you out on other devices and browsers.":"Veuillez noter que la modification de votre mot de passe vous déconnectera sur d'autres appareils et navigateurs.","Please restart your instance for the changes to take effect.":"Veuillez redémarrer votre instance pour que les changements prennent effet.","Please wait…":"Veuillez patienter…","PM":"PM","PNG Size Limit: %{n}px":"Limite de taille PNG : %{n}px","Portrait":"Portrait","Preserve filenames":"Conserver les noms de fichiers","Press enter to create a new album.":"Appuyer sur la touche entrée pour créer un nouvel album.","Prevent database and album backups as well as YAML sidecar files from being created.":"Désactiver les sauvegardes de bases de données et d’albums ainsi que la création de fichiers side-car YAML.","Prevent other apps from accessing PhotoPrism as a shared network drive.":"Interdire à une autre application l'accès à PhotoPrism en tant que lecteur réseau partagé.","Preview":"Prévisualisation","Preview Images":"Images de prévisualisation","Previous":"Précédent","Previous page":"Page précédente","Previous visual":"Visuel précédent","Primary":"Primaire","Private":"Privée","Product Feedback":"Commentaires sur le produit","Projection":"Projection","Purple":"Violet","Quality Filter":"Filtre de qualité","Quality Score":"Score de qualité","r":"r","Random":"Aléatoire","Rating {0} of {1}":"Évaluation {0} sur {1}","Raw":"Brut","RAW":"RAW","Re-index all originals, including already indexed and unchanged files.":"Réindexer tous les originaux, en incluant ceux déjà indexés et les fichiers inchangés.","Read-Only Mode":"Accès en lecture seule","Recently Added":"Ajoutées récemment","Recently Archived":"Archivées récemment","Recently Edited":"Modifiées récemment","Recognition starts after indexing has been completed.":"La reconnaissance démarrera après la fin de l'indexation.","Recognize faces so people can be assigned and found.":"Rechercher les visages pour qu'on puisse les attribuer à des personnes et ainsi permettre de trouver ces personnes.","Recognized":"Reconnues","Recovery Code":"Code de récupération","Red":"Rouge","Refresh":"Rafraîchir","Regions":"Les régions","Register":"S'inscrire","Reload":"Recharger","Reloading…":"Rechargement…","Remote Sync":"Synchronisation à distance","Remove":"Supprimer","remove failed: unknown album":"échec de la suppression : album inconnu","Remove from Album":"Retirer de l'album","Remove imported files to save storage. Unsupported file types will never be deleted, they remain in their current location.":"Supprimez les fichiers importés pour économiser l'espace de stockage. Les fichiers non pris en charge ne sont jamais supprimés et demeurent à leur emplacement actuel.","Request failed - are you offline?":"La requête a échoué - êtes-vous hors ligne ?","Request failed - invalid response":"Échec de la requête - réponse incorrecte","Require non-photographic and low-quality images to be reviewed before they appear in search results.":"Impose un examen préalable des images non photographiques ou de faible qualité avant de les faire apparaître dans les résultats de recherche.","Resolution":"Résolution","Restart":"Redémarrer","Restore":"Restaurer","Restored":"Restauré","Retry Limit":"Limite de réessai","Retype Password":"Ressaisir le mot de passe","Review":"Examen","Role":"Rôle","Rows per page:":"Lignes par page :","Satellite":"Satellite","Save":"Sauvegarder","Scan":"Numérisée","Scan the QR code with your authenticator app or use the setup key shown below and then enter the generated verification code:":"Scannez le code QR avec votre application d'authentification ou utilisez la clé d'installation indiquée ci-dessous, puis saisissez le code de vérification généré :","Scans":"Numérisées","Scope":"Portée","Search":"Rechercher","Search and display photos on a map.":"Rechercher et afficher des images sur une carte.","Season":"Saison","Secret":"Secret","Security and Access":"Sécurité et accès","Select":"Sélectionner","Select a source folder to import files…":"Sélectionner le dossier source d'où importer des fichiers…","Select date":"Sélectionner la date","Select dates":"Sélectionner les dates","Select or create an album":"Sélectionner ou créer un album","Select the files to upload…":"Sélectionner les fichiers à charger…","Select the folder to be indexed…":"Sélectionner le dossier à indexer…","Select Time":"Sélectionner l'heure","Selection approved":"Sélection approuvée","Selection archived":"Sélection archivée","Selection restored":"Sélection restaurée","Sequential Name":"Suite logique de noms","Service URL":"URL du service","Services":"Services","Session":"Session","Session ID":"Identifiant de session","Sessions":"Sessions","Set as Album Cover":"Utiliser cette photo comme couverture de l'album","Settings":"Paramètres","Settings saved":"Paramètres sauvegardés","Setup":"Configurer","Share":"Partager","Share %{s}":"Partager %{s}","Share your pictures with other apps and services.":"Partagez vos photos avec d'autres applications et services.","Show":"Afficher","Show all new faces":"Montrer tous les nouveaux visages","Show Captions":"Afficher les légendes","Show hidden":"Afficher les éléments masqués","Show less":"Montrer moins","Show more":"Montre plus","Show server logs in Library.":"Afficher les journaux serveurs dans Bibliothèque.","Show Titles":"Afficher les titres","Sidecar":"Fichier side-car","Sidecar Files":"Fichiers side-car","Sign in":"S'identifier","Similar":"Similaire","Size":"Taille","Slideshow":"Diaporama","Slow":"Lent","Software":"Logiciel","Software Update":"Mise à jour du logiciel","Something went wrong, try again":"Quelque chose s'est mal passé, réessayez","Sort by":"Trier par","Sort Order":"Ordre de tri","Sorted ascending.":"Triés par ordre croissant.","Sorted descending.":"Trié par ordre décroissant.","Source":"Source","Stack":"Groupe","Stack files sharing the same unique image or instance identifier.":"Images partageant le même identifiant unique d'image.","Stack pictures taken at the exact same time and location based on their metadata.":"Images prises exactement au même moment et au même endroit, en se fondant sur les métadonnées.","Stackable":"Groupable","Stacks":"Groupes","Start":"Démarrer","Start Page":"Page d'accueil","Static Size Limit: %{n}px":"Limite de taille avant rendu : %{n}px","Status":"Statut","Storage":"Stockage","Streets":"Rues","Subject":"Sujet","Submit":"Soumettre","Successfully activated":"Activation réussie","Successfully Connected":"Bien connecté","Successfully deleted":"Suppression réussie","Successfully verified":"Vérifié avec succès","Super Admin":"Super Admin","Support for additional services, like Google Drive, will be added over time.":"La prise en charge de services supplémentaires tels que Google Drive sera ajoutée ultérieurement.","Support Our Mission":"Soutenez notre mission","Sync":"Synchronisation","Sync raw and video files":"Synchroniser les fichiers raw et les vidéos","Taken":"Prise","Teal":"Sarcelle","TensorFlow is required for image classification, facial recognition, and detecting unsafe content.":"TensorFlow est requis pour la classification des images, la reconnaissance faciale et la détection des contenus choquants.","Terrain":"Terrain","Text":"Texte","Text too long":"Texte trop long","Thank You for Your Support!":"Merci pour votre soutien !","That's why PhotoPrism was built from the ground up to run wherever you need it, without compromising freedom, privacy, or functionality.":"C'est pourquoi PhotoPrism a été conçu dès le départ pour fonctionner partout où vous en avez besoin, sans compromettre la liberté, la confidentialité ou la fonctionnalité.","The index currently contains %{n} hidden files.":"L'index contient actuellement %{n} fichiers cachés.","Their format may not be supported, they haven't been converted to JPEG yet or there are duplicates.":"Leur format n'est peut-être pas pris en charge, ils n'ont pas encore été convertis en JPEG ou ce sont des doublons.","Theme":"Thème","This field is required":"Ce champ est obligatoire","This mounts the originals folder as a network drive and allows you to open, edit, and delete files from your computer or smartphone as if they were local.":"Cela monte le dossier des originaux en tant que lecteur réseau et vous permet d'ouvrir, modifier et supprimer des fichiers de votre ordinateur ou smartphone comme s'ils étaient locaux.","Time UTC":"Heure UTC","Time Zone":"Fuseau horaire","Timeout":"Délai","Title":{"Account":"Titre","Photo":"Titre","":"Titre"},"Title / Position":"Titre / Poste","Title too long":"Titre trop long","to":"à","To avoid being locked out of your account, please download, print or copy this recovery code now and keep it in a safe place.":"Pour éviter le blocage de votre compte, téléchargez, imprimez ou copiez maintenant ce code de récupération, et conservez-le dans un endroit sûr.","To generate a new app-specific password, please enter the name and authorization scope of the application and select an expiration date:":"Pour générer un nouveau mot de passe spécifique à l'application, veuillez saisir le nom et la portée de l'autorisation de l'application ainsi que sélectionner une date d'expiration :","To switch to a new authenticator app or device, first deactivate two-factor authentication and then reactivate it:":"Pour changer d'application ou de dispositif d'authentification, commencez par désactiver l'authentification à deux facteurs, puis réactivez-la :","To upgrade, you can either enter an activation code or click \"Register\" to sign up on our website:":"Pour effectuer une mise à niveau, vous pouvez soit saisir un code d'activation, soit cliquer sur «S'inscrire» pour vous inscrire sur notre site web :","Today":"Aujourd'hui","Toggle View":"Basculer la vue","Token":"Jeton","Too many files selected":"Trop de fichiers sélectionnés","Too many requests":"Trop de demandes","Troubleshooting":"Résolution des problèmes","Try again using other filters or keywords.":"Réessayez en utilisant d'autres filtres ou mots-clés.","Two-factor authentication has been enabled for your account.":"L'authentification à deux facteurs de votre compte est désormais activée.","Type":"Type","Unauthorized":"Non autorisé","Undo":"Annuler","Unique ID":"Identifiant unique","Unknown":"Inconnu","Unregistered":"Non enregistré","Unsorted":"Non trié","Unstack":"Dégrouper","Updated":"Mis à jour","Updating faces":"Mise à jour des visages","Updating index":"Mise à jour de l'index","Updating moments":"Mise à jour des moments","Updating picture…":"Mise à jour de l'image…","Updating previews":"Mise à jour des aperçus","Updating stacks":"Mise à jour des groupes","Upgrade":"Mise à niveau","Upgrade Now":"Mettre à niveau maintenant","Upload":"Chargement","Upload complete":"Chargement terminé","Upload complete. Indexing…":"Chargement terminé. Indexation en cours…","Upload failed":"Échec du chargement","Upload local files":"Envoyer des fichiers locaux","Upload Path":"Chemin d'accès","Upload to WebDAV and share links with friends.":"Envoyer via le protocole WebDAV et partager des liens avec des amis.","Uploading %{n} of %{t}…":"Chargement de %{n} sur %{t}…","Uploading photos…":"Chargement des photos en cours…","Uploading…":"Téléchargement…","Uploads that may contain such images will be rejected automatically.":"Les fichiers chargés qui contiendraient de telles images seront automatiquement rejetés.","Use Presets":"Utiliser les préréglages","Use the following recovery code to access your account when you are unable to generate a valid verification code with your authenticator app:":"Utilisez le code de récupération suivant pour accéder à votre compte lorsque vous ne pouvez pas générer un code de vérification valide avec l'application d'identification :","Use your recovery code or contact an administrator for help.":"Utilisez votre code de récupération ou contactez un administrateur pour obtenir de l'aide.","User":"Utilisateur","User Guide":"Guide de l'utilisateur","User Interface":"Interface utilisateur","Username":"Identifiant","Users":"Utilisateurs","Vector":"Vectoriel","Vectors":"Vectoriels","Verification Code":"Code de vérification","Video":"Vidéo","Video Duration":"Durée de la vidéo","Videos":"Vidéos","View":"Voir","View search results as a list.":"Afficher les résultats de la recherche sous forme de liste.","Viewer":"Visionneuse","Visitor":"Visiteur","Visual Similarity":"Similitude visuelle","Warning":"Avertissement","We appreciate your feedback!":"Nous apprécions vos commentaires !","We do our best to respond within five business days or less.":"Nous faisons de notre mieux pour répondre dans un délai de cinq jours ouvrables ou moins.","Web Login":"Connexion Web","WebDAV":"WebDAV","WebDAV clients can connect to PhotoPrism using the following URL:":"Les clients WebDAV peuvent se connecter à PhotoPrism en utilisant l'URL suivante :","WebDAV clients, like Microsoft’s Windows Explorer or Apple's Finder, can connect directly to PhotoPrism.":"Les clients WebDAV, comme par exemple l'explorateur Windows de Microsoft ou le Finder d'Apple, peuvent se connecter directement à PhotoPrism.","WebDAV Upload":"Chargement via le protocole WebDAV","WebGL support is disabled in your browser":"La prise en charge de WebGL est désactivée dans votre navigateur","Website":"Site web","White":"Blanc","Work Details":"Détails sur le poste","Year":"Année","Yellow":"Jaune","Yes":"Oui","You are welcome to contact us at membership@photoprism.app for questions regarding your membership.":"Vous pouvez nous contacter à l'adresse membership@photoprism.app pour toute question concernant votre adhésion.","You can only download one album":"Vous ne pouvez télécharger qu'un seul album","You can only download one label":"Vous ne pouvez télécharger qu'une seule étiquette","You can upload up to %{n} files for test purposes.":"Vous pouvez déposer jusqu'à %{n} fichiers à des fins de test.","You may only select one item":"Vous ne pouvez sélectionner qu'un seul élément","You may rescan your library to find additional faces.":"Vous pouvez réanalyser votre bibliothèque pour trouver plus de visages.","Your account has been successfully connected.":"Votre compte a été connecté avec succès.","Your browser does not support WebGL":"Votre navigateur ne prend pas en charge WebGL","Your continued support helps us provide regular updates and remain independent, so we can fulfill our mission and protect your privacy.":"Votre soutien continu nous aide à fournir des mises à jour régulières et à rester indépendants, afin que nous puissions remplir notre mission et protéger votre vie privée.","Your library is continuously analyzed to automatically create albums of special moments, trips, and places.":"Votre bibliothèque est analysée en permanence pour créer automatiquement des albums regroupant des moments, des voyages et des lieux spéciaux.","Zoom in/out":"Agrandir/Dézoomer"}} \ No newline at end of file From a45d9d30b93a2848e324ace6415e09a42eb8eb09 Mon Sep 17 00:00:00 2001 From: graciousgrey Date: Mon, 9 Jun 2025 15:15:13 +0200 Subject: [PATCH 016/185] Update SPONSORS.md --- SPONSORS.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/SPONSORS.md b/SPONSORS.md index f9f179f99..eda46469c 100644 --- a/SPONSORS.md +++ b/SPONSORS.md @@ -30,6 +30,8 @@ You are [welcome to contact us](https://www.photoprism.app/contact) for change r **[Andreas Krizek](https://github.com/Cosmic314)** (January 2025) +**[Jason Grim](https://github.com/jgrim)** (June 2025) + ## Gold Sponsors ## [**Simen Eriksen**](https://github.com/dennorske) (GitHub Sponsors, December 2019) From 2e2ebab433b962326762ab26a2e8b63ac302d9ea Mon Sep 17 00:00:00 2001 From: Michael Mayer Date: Mon, 9 Jun 2025 15:31:23 +0200 Subject: [PATCH 017/185] Videos: Improve downloading, remuxing, and transcoding #4982 #4892 #5040 Signed-off-by: Michael Mayer --- Dockerfile | 2 +- Makefile | 4 + assets/examples/bear.m2ts | Bin 0 -> 102272 bytes assets/examples/m2ts.mp4 | Bin 0 -> 102272 bytes frontend/src/common/media.js | 1 + frontend/src/common/util.js | 8 +- go.mod | 42 ++-- go.sum | 84 ++++---- internal/commands/download.go | 76 ++++++- internal/config/config.go | 6 + internal/config/config_ffmpeg.go | 15 ++ internal/config/config_storage_test.go | 13 +- internal/ffmpeg/apple/avc.go | 7 +- internal/ffmpeg/encode/avc.go | 6 +- internal/ffmpeg/encode/const.go | 5 +- internal/ffmpeg/encode/flags.go | 2 +- internal/ffmpeg/encode/options.go | 73 +++++-- internal/ffmpeg/intel/avc.go | 12 +- internal/ffmpeg/nvidia/avc.go | 6 +- internal/ffmpeg/remux.go | 204 ++++++++++++++++++ internal/ffmpeg/remux_test.go | 100 +++++++++ internal/ffmpeg/transcode_cmd.go | 4 +- internal/ffmpeg/transcode_cmd_test.go | 18 +- internal/ffmpeg/v4l/avc.go | 5 +- internal/ffmpeg/vaapi/avc.go | 12 +- internal/meta/data.go | 4 +- internal/photoprism/convert_sidecar_json.go | 20 +- internal/photoprism/convert_video_avc.go | 21 +- internal/photoprism/{ytdl => dl}/bin.go | 21 +- internal/photoprism/{ytdl => dl}/bin_test.go | 4 +- .../photoprism/{ytdl/ytdl.go => dl/dl.go} | 4 +- .../{ytdl/ytdl_test.go => dl/dl_test.go} | 30 +-- internal/photoprism/{ytdl => dl}/download.go | 4 +- .../photoprism/{ytdl => dl}/download_test.go | 4 +- internal/photoprism/{ytdl => dl}/error.go | 2 +- internal/photoprism/{ytdl => dl}/format.go | 2 +- internal/photoprism/{ytdl => dl}/info.go | 4 +- internal/photoprism/dl/metadata.go | 38 ++++ internal/photoprism/{ytdl => dl}/options.go | 20 +- internal/photoprism/{ytdl => dl}/result.go | 14 +- internal/photoprism/{ytdl => dl}/subtitle.go | 2 +- .../photoprism/{ytdl => dl}/testdata/.gitkeep | 0 internal/photoprism/{ytdl => dl}/thumbnail.go | 2 +- internal/photoprism/{ytdl => dl}/type.go | 2 +- internal/photoprism/{ytdl => dl}/version.go | 4 +- .../photoprism/{ytdl => dl}/version_test.go | 6 +- internal/photoprism/mediafile.go | 15 ++ internal/photoprism/mediafile_meta_test.go | 129 +++++++++-- internal/photoprism/mediafile_test.go | 20 ++ internal/photoprism/ytdl/new.go | 30 --- pkg/fs/file_exts.go | 5 +- pkg/fs/file_info.go | 2 +- pkg/fs/file_types.go | 2 +- pkg/fs/mime.go | 3 + pkg/media/formats.go | 2 +- pkg/media/http/header/content_types.go | 1 + pkg/media/video/brands.go | 1 - pkg/media/video/chunk.go | 11 +- pkg/media/video/chunks_test.go | 11 + pkg/media/video/codecs.go | 1 + pkg/media/video/content_type.go | 2 + pkg/media/video/probe.go | 3 +- pkg/media/video/probe_test.go | 30 +++ pkg/media/video/standards.go | 3 + pkg/media/video/testdata/bear.m2ts | Bin 0 -> 102272 bytes pkg/media/video/testdata/motion-photo.heif | Bin 0 -> 3366300 bytes pkg/media/video/types.go | 10 + 67 files changed, 936 insertions(+), 258 deletions(-) create mode 100644 assets/examples/bear.m2ts create mode 100644 assets/examples/m2ts.mp4 create mode 100644 internal/ffmpeg/remux.go create mode 100644 internal/ffmpeg/remux_test.go rename internal/photoprism/{ytdl => dl}/bin.go (52%) rename internal/photoprism/{ytdl => dl}/bin_test.go (78%) rename internal/photoprism/{ytdl/ytdl.go => dl/dl.go} (94%) rename internal/photoprism/{ytdl/ytdl_test.go => dl/dl_test.go} (93%) rename internal/photoprism/{ytdl => dl}/download.go (88%) rename internal/photoprism/{ytdl => dl}/download_test.go (95%) rename internal/photoprism/{ytdl => dl}/error.go (97%) rename internal/photoprism/{ytdl => dl}/format.go (99%) rename internal/photoprism/{ytdl => dl}/info.go (99%) create mode 100644 internal/photoprism/dl/metadata.go rename internal/photoprism/{ytdl => dl}/options.go (96%) rename internal/photoprism/{ytdl => dl}/result.go (72%) rename internal/photoprism/{ytdl => dl}/subtitle.go (94%) rename internal/photoprism/{ytdl => dl}/testdata/.gitkeep (100%) rename internal/photoprism/{ytdl => dl}/thumbnail.go (94%) rename internal/photoprism/{ytdl => dl}/type.go (97%) rename internal/photoprism/{ytdl => dl}/version.go (82%) rename internal/photoprism/{ytdl => dl}/version_test.go (87%) delete mode 100644 internal/photoprism/ytdl/new.go create mode 100644 pkg/media/video/testdata/bear.m2ts create mode 100644 pkg/media/video/testdata/motion-photo.heif diff --git a/Dockerfile b/Dockerfile index c3282681e..89c099c76 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # Ubuntu 25.04 (Plucky Puffin) -FROM photoprism/develop:250524-plucky +FROM photoprism/develop:250608-plucky ## Alternative Environments: # FROM photoprism/develop:armv7 # ARMv7 (32bit) diff --git a/Makefile b/Makefile index 8217ab664..1a31a7fa9 100644 --- a/Makefile +++ b/Makefile @@ -74,6 +74,7 @@ test: test-js test-go test-go: reset-sqlite run-test-go test-pkg: reset-sqlite run-test-pkg test-api: reset-sqlite run-test-api +test-video: reset-sqlite run-test-video test-entity: reset-sqlite run-test-entity test-commands: reset-sqlite run-test-commands test-photoprism: reset-sqlite run-test-photoprism @@ -376,6 +377,9 @@ run-test-pkg: run-test-api: $(info Running all API tests...) $(GOTEST) -parallel 2 -count 1 -cpu 2 -tags="slow,develop" -timeout 20m ./internal/api/... +run-test-video: + $(info Running all video tests...) + $(GOTEST) -parallel 2 -count 1 -cpu 2 -tags="slow,develop" -timeout 20m ./internal/ffmpeg/... ./internal/photoprism/dl/... ./pkg/media/... run-test-entity: $(info Running all Entity tests...) $(GOTEST) -parallel 2 -count 1 -cpu 2 -tags="slow,develop" -timeout 20m ./internal/entity/... diff --git a/assets/examples/bear.m2ts b/assets/examples/bear.m2ts new file mode 100644 index 0000000000000000000000000000000000000000..4508dc463e5b2d36e82fa5e8f1cf415a12fdf430 GIT binary patch literal 102272 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 n7?71@P`R@x>7eMDKd;G}pKeYV|{@;48 literal 0 HcmV?d00001 diff --git a/assets/examples/m2ts.mp4 b/assets/examples/m2ts.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..4508dc463e5b2d36e82fa5e8f1cf415a12fdf430 GIT binary patch literal 102272 zcmdSAX;c&2*Y3NjDm@8=geHV8fe;!|0-_))7M%nH4Ty@07#cMoDk2JYP=SD88vy~a z*#SYZ*&2K7un<%bw<4lq9}u>vsMv!dIpzPHamRSaz31Eg@VS^tN9 z0Jxkao%(Oa_n45;`!;;GXn05{R=bv)wnS(D8GBK{6Qb%6Gt-vAit2midXL;uAO zBOXBZKQoaw7$@o6p$VRwa1WN$LTV$8qhMlS2j(GFJQG(>1nn@%QN)J`%c9xYDrifN z?GR|CmMCv5(5Ev}baG^k@>|RYNd`EDm&b1BMRM2} z6tvlo2~}MKo^b6uAse?lB_wsg0yrNF8V{C3M_tF$z#4K4)hlS<7dB$0axD)asY%C# zph<&!^iotg61YjjE+*JHk;}GLB}Zn0_B-uAlOXz7hs=DsfSxR+p_QX!JUJ+Pysr9{ z8ZwOsl|j8dGiUw4!w|L;%;pufC?`Oq!Yv_E*Ku<8+*~?l1`=B4MzI`3^+QHsF=8k( z(kOg3RJguYL5fTi(hfV{Z)>!36UZrvxUVPdR0_T_V6PEa3eQCw&=77ZPsRxv7psAI zCURfMq!!#}tRlV;Dv@ylu{avid~i%PP#q`XcE#X5La=jlQM-Mx%X_;I;4B@YnKTIO zgUTz&GFftl(IkNgxE4kR(DA=kOcOnlb*bZipHqG`+mz~%wm2zL_} zgY=S;=)3Dd8%b_77j>7CW*45WFIT`C13bP2QsXWvaO5?>AX!pSDGg-@uo_C)2ACB_ zu$wehZ084n+iDJlG9RK2fw5v1LYk6aot)A=C@?_imDof`8Xw?ov;qwP=}>JP^E|Aq zRy(AkT(FpojuUSamrkQ!JPf9TZ=#N(=7iKXkww%3AfuvDyGtTdaCyF(BYvA>^cBQT zlO>^Ru|SN9kN^1+iNkdU%} zGD%m5F9w*eM6K9LgWsr}rvGkXob5|8Y7qe+NM?G)8zwmj9GBjPsXdquYGYu3_n~x# zG|97~xG(}+wIth1OaYw~5T(sQTPyExW-{Bcev(d(_{&I@=bEZZd4=2%_YGUm$g~Z) zqfn2K(X3T1wW4{~ABIUA%0yMmI{jTWi|-u07Qjlb%85vC4Y7ZQ6YOS9Ic$W}?RGgJ zR0j0!jiW{PYQ%pFF9?hVj3SnFVTqo*!sjGO7|Q(~z4?M&DPp#o$A9Fg5i$xc+WzG; z(LM!81HxPYyN{0%dl9X78!pkMz`4RjR@Pjd(jN|&3R?uHmGoxL%uQ{J8t*o z?mUWOeC>I0zS%-qlFLK2OEi;W63&k$EgbfT-1KA8-xSo>A#Lpia`B8&l>(P5Pa=;t z19v8v#MHTqO^|DRHucsOg5A8feV*0E3u_dYRidpBmKD8kalk=!P?rNtY8JiFBzL=cnC!Wu^v9j9xNy_3Fg|3w3ZKnD>SxRax6?_*Hj(U2O`NFGDEmnZo;}G5?Ct}CwHS`!5Gk#Uo@AQ?@vb> zL(COaISIJ)$XkSR<0qi>XeR<(ponqS*SKr79$u5*)WI6IMsCieLGN#h<=m2pQTal_ zWJ}}B!ld;Rme{@dioNHtaUN{pO~>P#Ndh{^KeD1AC%@{oM&l1ks=n5OG?;yxCO7e# zTL%yDY5>7*kq^n)_h-EoACOafnUdXUxGhD*tS(za3+zziZhni3=?kHETpK#Kzwq=Q)hp-I}! zICp@JZ3101i`4qEPxfJ;(RRD-=PG% zf!fr`CxSIFo9nPyOfj$8bGaOJEqxFJ<-AVts&X?EWJP#V4+Pll`FdU43ovo720|(M*y1qUo~c!1)}VZM4j3l{ z!HC^2hholGi_~eLxg6g#(sQc=_(JV7pb1eAHhNN6B?_B59R>AqGM>_T1V>P7TRh$( z3MDoT$^Pf#(E?62Ot4!`6d<~G+z_v7r)7Vib>+n!D1+qo6~=bx<95x=9t&o}C72u+ zp{CN7#*o8efV*$u@dKnbK<)7yKg^^ESZF-i$0Q6j;n8%|K7?ZfIAz#?iJu>~Q-4k% z+R`hi-kM%B4(IFqL3QP^%B_}aZk$-@ALoZHd~WjczKm=Dy?>2`sgZ8={#{}4O65NL zah+gFXj*7h`|w-|=~s6+3O(_*z0zrj`SZj27pcJe6@SLvdPx=vrbbL{4g*)qKFT5z zQZ!Uu!l=1b)i3vgzj2#l17I?yTf``)*Bq_-E*HRuU8|Celsf!roec4;7-zO7cg1T= z=2$%tEx9N{DdXVhtAAdl1`sIn<=c)6KJ2^fVNoxTJA$(Nu=wTe>tA=$&= zL*8|-wx)*tg<1%!=*S<_zNb?bKl6ix2CBT$ey1`)deMs6r$r19RrdX1Mm2N?1tlcl zQiogoIah7UnQH9hj~a;X32Ui33Dn!u7%=Ve@l?*Ntn*+DOKP}rYdM55QMrUkIrutX zLrw8oA1%=71=$Rvfc@EA(P~%l4#QG>APm#6_!zZbrp94(Pvb!zkhB7Cf<0-e( zKfexRMpD!e^&Bo==e*@73S~9{d{@r6udBUp)Te_;n%uAq&bW8|NpZ@py54+|0cou) z3{;LO+zf?`?*^UlmQc6-#QLSl&7d8+ZF+*;7Apm1hrz}hmFC-lix|RKU~H%H)gBJc z`7XC$`KO7>>+O4zbK=&2UBKbpcfsS5!iR9nx7`ap?%!vR4VqI>>UAsp?ZsLlcJO+u zW!0ZRPPYFgcq*YtrBIy-Df<`mBD!defCXxW*;*5MkY3xoWvCB|Hf$sgYTN@VU|NvX zZP6BdD!yzT#w8Z1NsZ`ijp$5`mkE1{pTG%hpxb_?WAt_1Sncv#s{2`i8YXH;u(M4l zQ@8#t#vEBQ(!$?hSJj%PCq;)XH+;s&ij}eY2GeGESCHxc02j-2!4Z{dl2p-nMn`>P zv&FqMcSRBAGIstnutuWYw@gY|WN*9Nl~GJve1F#PAf!}4oph`=nNDNEC)Py{ny~zS z`~{p6fdt&t1p(BBE~l?gZ8%`Jr&{a0*TAfT87gunb?iF=j0z9lk8tT{ii-p2)?PFO zzyk)jAD-s5Adw=zlfyZ3+9C`5$!ClO=x-4v$96a$1g!;Jkp%kSAK-K1tPpW4%K_%< z8^t_&)B-OZ!;gjtT2DdchK)$tl{3(wsaP4QxOR2v$~fhT<>U8sjKkf9v7QW*ovQjh zPprT&!{G8x8nfD9seluNxsYYpmPcTmm@+)hdX8F*HQ1^i>R1T9cAn|1Ip1_#Z1KEM z=@Jh>0*pq~12lobaf0aaIEVyoo`{`=t3>0v;5{SN8uUxf=%y@LFvup@Iq0y~)jt@u ztv_6N{tmIO{dsUI6FVe&>F?@p`LsBNaaqStWvrMq&EohVWou;YZ8CZSI+gXkWTBck z7Jv=dv>EDjz(&7km)IA5^aRnC?LbHDVhJNBniSiw3hy~sZ8Uu_L|Ex`3d471V3iIT zd&DLUrQ3pfn)zEo;>^-Hqo(5DFZjpPoH%J4uBw$F?8k#n1 zED!kf2t3@u^sk*zD$-pi)K_t3G~4QcCLE_e&G8z3(Is%VHqP>7qhW~fZ+yB6Y^Q@1 zD8~?7E{Ci?V1{!ftedTA&999Lc0_aq?6wdnm?y!5HQ=3dnQDM;!yG4hB4|mKbI@ zR=c}owdc!is2o;}f+Bl*fs0&io&TccYzVEYwMTie#Llg`Bn$**3Dv)MkpyIPi(WPH z9#Rh2~zsclcEB#`qs!-=A{Zydj{a}*Hp)p1#@~BU;~+8 zH=QQ+V|pqW{Tm=T{cevZ7QCui?(T#L3qwuRQ=-B^JQ*B^f-M!Br@pKaVu^ehFwyjB z(tGDg`9Mbz)@*}SlD6CMrA(w}T+xh4Aa8nZ09X@1oVk=H0q)_cf}9v* z1_gR=B2~2l-aMlIO~biDYz#zWV6_gI!&@w!3>#`v7P3`PCdD>~M}?!|nA>~=p#_Y= z4Y73htmb+B5h-&s?&yRNi0cv17NHcm&ugH>gEO{3m?G&M!EO$$*}0+bg90zT2K;<) zAvVu=HV}#h#=zBm9Omv1u2G*`T}u13MnY^Js{OA}bd3+n8)*LXSiqj*WWWX15)P~>2W6L>B+H_nzv9}l7oOBzm&y`@ zIwLu)CqhPlh(IM_hoNy18$S=GG!#w`|F<0~qKEo+hJm&-l)ueZ$EL-(J2zkGg@UB2 zL{T86D1HyY&ijPY5H@Cj#nW^&vY#vDHakpcREIHXNjg5IpZ0PnV*<0)=Xeg5P6?PF zo6Z2`5*6=~7Rs5r^6FzOo*Xa}JFAq`UJeK_EMc;4T`@LbH%^0pRDfpni}G^~MHuET zpvLW`o=dE%MMU<+%ZqMp`K(b6>4Z)sK;QfdjVucKE}#GdG#;r+1{dc#Uv?5?<+H$T z6`9e5wLXPVa+AkAuKH-Dd-fP6xGf>|NZ95(2zCoU@lZSv2YqL=fl@%6er;t+qmhqW zDFOoldG^Y69GGc&Tqze%@Av5X$2d!)#VuFc-3sSN&=f{v)-n@{#%K^uG7a^CVuF5) zpe^}5!`PJdZPd!#iSIWIki03qj+5V`W2c6O%x-!Tu~EV$bvCBReIRHqrxYf0mL43^ z(7oH(P!t&Wv)dP(Nwn(%E<#Z`86@DDe+F~R+L2q>y_rmZ`}+yYGFu3C zzOvS}b$?jn`uT;bn+qC1oyv0@r{iTMaF-@YC}959zALp%uqJ%;PifL+i6E=MlnLsp zcMWuuQcu(XjO^@CG{){f*(uHbSF@sHeFe0MM<`A3l;8QWPWfOE6uL-}PnexJM}a)0 zp*#tx4)fi|OuJtaIb0x^*&k$BK! zre`@HR!b;uf&P$$DDDY%%R-D_Ovo%m%8ex!#n(nKKILJ35NZo~C!>LuLR0|8pmy19 zhJ&=KJ>UGGiYzE}zTM|Z3}Ei)s?Xl0-p z8G%R1pgzc~izMJ4tUQ^eiA#JL?*vsQR@RiIG9YhQRHOD6b_Q@jgOdpKlai`a<`eqg zrL_1^IHLq=6F`~d7O`t}T`N%{T#HM5=%nDC#wH3=sRX+f$xcCwgwyymzXB1YekyTG z$_@fo*%%?kC=7EAKm{fc{+)C-m84@}%PE-@Wz9BHD(Uh71&xB*=#BJ6V7Difd8I(8 z#zym!SNMjBQzA;MxxiL*4xDt7a!;D$VLWQFwEfMcmctH<+7OsO!E=#>BA1Y4R7*K% zg-~Ac8b4a1SyA^}_;OXdf0#%Li{v7`E>V~J8{@-nzm#Z*zV+S!1xWmwiP@JxkC2BuH)tUmg+5yD2(^jy zy>9^nb%RweBK%a6ChV}6E#?i{)E+-H%AXpN#t5*vs0(yTn&_^|b#^MFTdcc3$UPP! zk&IxWVB+Ka9O`pr)PO6rlVG=@Ltk|0FP-)IXB1Ma$E=zmSRrpB5rwVY#X=Ue8Db-7 z1|GC-Kh3rPbR=UbjaUi~J!3|*Ed_h?qs@c|ylqf<988ZOYAi)jvs_kzNuuK;u{IMC zRlr?Pgv${t8b;$orp-VCYaCrwU>!NK$CHahO3xIdrdYh%_s?B2K*rbAzotT zBz$5jBSfh&j@}GrL+d2wt`b5=l=+PS?!`K}2(z9=u-igQo5K8M)FR0AU(^cNQdZU! zhX%a>&CqVo{P3x+Oc1nT5J3&F^Z=&ARwq)_t|i$~B%=<{MvQx^hfLb~Kmciz+|ltY zk{YRJAZ(@@sb*biL$n6?bVQ@ZC85w8B9&>aO(aeTy8SN~X^a=EfI`Ck^{BN6#2pDe z>Pm*n#kW8oBVRyGbfvuT+Kbel&YrF!h>6I1!% za+3Wc%;M1giugf7G$e1FRhM^8_LSHjA%{gV?f4pUsDDer;UkwqUE`Mv>CO(qIhiDy zSlx0Zm;1Yy7JaIn7vZ!ds5~wrD-d!-pqk~>59NZ5ZIoJ+PJ|AVUDXa=R*)tEyf>tt zI1E$Y7KdmE-4#CUaG1{9>~b{`N=W!fup65IO}^S13Lfopkx)U>$?j6ud`puK(8r|0xC@`h?`bn( zYUC8F@|n7h$!$W+c7!uGd~W*7W;8v_36V8XN_L)=Q>Ig84&5)Y#N<>&3rNSYVCCgC3~X5MKkQB~N8R{%*U#yJ2NH!Orn4qaPe1 z;cij$(1!aEdZz$dkQDxPYIW)OpK3uCfMLw0R7St`ie9~ALvzJE_PP~e;0z*hE(qaC zJTKCfrs9#e{=j7hi^nI{^mVBKl2TNf0R6!qPM#Ivp&^JM%-LaJ&)!RZWiNCjR4noI zdNyD{)OO`0y2HuQg2{EqJocHrN~#A)A|Z`}CS%;>Qd_m?oeDfgfE-@=hB>Ccgjaj; zTdAssh4LsuYx_BAEq`(`t^{#78%>d004w3}to4WiPraoVC-gZ!Y&h+mCd;nJ3GfBLK0q8TP+` zsaQzab{tj$cOg7w#B}9m&_bV^CC9C~4AyPZ8w+Fw8opJchNC-vd-EjO_# zbd*Uc$DSUO9GPi;mBfS};O;Hr(rV@-r^V%qs#*0_0KG)8n-qccFjx2B2PH^Vl9w`m z{}-JF@MSTfd!A+LX(57TMdFf|l}sV$BKY=Njj*pN=ycjeTnI^$#&Vvepf*BLoAoa2 z(i7E%mQm-q(U}gGbGg?6y1QZG1H)+?=u=BPOA$t zIlzoyH|6271R|v8cNQW*!f3hsGf@XW1&>6Ml zN-c>!3Sk`nGtg9oq?r~_ zQSx=QR;a&6TPE>%FYFP58BZ83)+=QIuSoLDTZAIVX;;7dA9g51TR$*g9ZSTyqVYX| zW&kU|W*nANad#3*YL?QD?D`7iJhe3i{Iv>HW@vH8`LT4;HM~|qA=u5U1>CRDjFwzZ z3H0uMHNh9;FhCv>6oJy!u@XvPdl5OnBN?YJAU#aoJm3Urh_p2n+-02t@h}rkZA!H+ zmW81<;iP7Ztd7!4?28nutu>hAPM4%M@MfN>xOA$rpdqDlV#k=W$* z-E2r<0?w2~Q&b}8wdIBl)Hp1$ykz}X+MkbTGr-(fjo_4jMDjd3vED6a&-si|F&~^? zwzphmLi!+3z;frdqVR75DyIA?=VJ;u9;*x#iB2iGdM?qi+6omIHgHGk-7Np4NpYN?#8#DmM>FSa#kvAIO{m|t8mh*GmhS?2{dPm~;V)~hn z(B#GXGIj+}3U><)jzMh*x$aiwz^@({m_d;|dMgXMki_B@6*^z>OOzP2T=uLF7am~2 z87hDhb^zQoE|+q!-wdfL8b?-~d& zT^jbnu>k**NlK+1;JdPTgYU?8a9xn62ZnxDkU@QE{nLfM#GGnKlb{O<5y5UHk}zKM zmv6prbV6cyR>vT6+fZxl%}NO?%5-${IhuZECX~?S!xEi)XVg zJlX`DK`O8l<{yH7JuwTnT)be$re`6`?lF-=uFHLZd|5eF8p;{F@4fQ|Un1%;?Z4qU zWWlx(yaed>>1V<;Q%-R`S;LWA;C>M4Cfd@s*^Zl0N>t9HR}bW}|x{wH-FypuPasP_JVi&w&{>54M}tOUGDv z3JqfriT4`k#Ay!mMQm^eIz&RrjxYC-Y+va%LtvM_tP;#7>b6*k0f;VvgGX-2Dq7(m zQh_oP(M;8+((vA&Bp@PAiC-Y6Rztonv|pQmu3edb@A^D~-3D|Xfk+0ZHS9GErc&Li z!vN6>wN@5wfg6F?VilVrp*zy8{i+V1BC%aT>cqSk@z`OBWWbt5+A(~g38&~}>wm3 zGO%Uwkf&`k@Bi1y?m=q>S(Toi61kiSZo=}!vh{4P&IM+-&rN)Q9SKRo{9xH1EtQRJ zhBmk|Fy@MCkhrs2YgvQOTHFT}I?16<1?~_vJ~t@J10vB;GuVkdpmhQ6=OK60lwDY< zQX9zTjqU@PD$7;=!7{~fQZ0$?0HSFcb0XmYH+~8zs^f^7<|ZISYad`mVFF)7uv1@l zz;)<~=)eB$AW?u@O#*iSQ90BxDq$oZohMd?GluQ#Ye6)#;)?$ZjG0o3aKW> zo!dUBNMcQJ@()F5Gw`{iacLkn3bd*AN8dom>D#@JA2fWJ(;g0*RROGpGhS+pF^dWJ z>VCo1jLMCV3UBR*fKT21NWHyCzVb@E;G%xmSp^od+rt7_zfYdXxgLE__=)xWnKBkS z0X+(+LxVGJJN}(&x=33ejJZ!sK@Re^hR*0eAgX3`T|phB;Ng`8+Zd%+DA@e^2~dRl za+k~F5+vW}ozU3^7~WaGVC^IqPgZE|QNk^kO0b)}{b3bY8rN_O8>KUuaPj2L%}4zU z@8SL)mp?W2k=xQoFR_gRQTr}sWaY&b`TWeXeb{Cyv}b*IdFsku&t9M7cUyKF#`bP| zg-zL#C8-E+hHmy!cXOj;i-lT?UXqq$DL5X>bT;TLrA+g5?0q}nd~5n!|CQ6PJ2iTS zLpz$_rJ3p*p?DclJTyAFC z^~}C$>q{os9G7DHry7O1e|Zq^CMr3@0ej$-gl`8mB9MG?)L#rtPM(k9n{YCnP)<65 zf-Rh*aMc7r5%TTd!GmZ{$+lU`*4FY=Yg4C0x;Rn@K1<6JO6o z4>Yt%0RBj{hWIQ1QOZ!M^aIuY!$h zJ?Vcdo`0(4Zk^)aeLDf$$?bYMp<<2jVnq49P3duz`C0Bazi<6q$ji2mZY`VfR%(yg z+M{ucQiJs!J9`fKAko(@@R>~LnxCzHtA03v%W$NH{Ylk+}_5~Gt>e6sDoa`Tgr%y~h?XxNR z0=|4j!|Hk)tmn<$qhIVYjIa2w{kbac{zDYvq&wOVZy)dYNWNsab&fofV-wA|1Dij=-UfVZo${>M(8=s3N@0QHd5pzT047lhaj}2jvH!~86SD5Sa!GQ+L zk*{?scs15H4r$5Lh3c;?(~RZPm70k{&MjwWu>kS7IyKO~#Cu_K0j%#C=Oq%?9^41fw4L7^)lKlvF{rN?&U;Vm3n%c+asjb6!97+vmJ7c<{BpeH~Sz z12Hb|>EjmW-E4{Bz1!a&`0m`?!7iC0o&p8*+p<`??8Cbcy!fYblGa~e>96B*XOq{& z+WQ^XnNHBQUpn_;10}_M1L!|!=|-ByA~$ zvgpFw)1F`o^m3BcI%}+rmXB}JJN#I=yMti2oNOnzwpZivVYuWi6M8aZ+~gMWX3SIr z{ebG9tyy}SDW{jSF-r^K&Q4)GkvzOnf0?^0R(o=G?(^w(iU;G)Y^6po=F?uj4NR>q zhvfkvm77JyJyS=53N_;8WXsw?22k*D!s~AANl8<;>cJrrpaR8-+ zbG5D3BP)YIG;3L*GbFn-*s*qjv*s5{yYO`=P9Pzr5`eUCee!t2aXVv zEKlW_D@Wvtuj1Vrg$yP261|!(o zje~=q9{oNB2B~=3Q%h}Bs^%DaRVhO%V@9>`;Pb{hrIgWLO3gW2R*V`I5MBfF2b(&$ zefP3X@`4`b%_4Owr{lW25Sn-Auy;PeZaY>RaUqaSY8vf$`pcxb%R%bC?Yv!b(@f26 z%u=LAN_KC$b;ZId)v)D7(};Bq_ymlhmKk?si~}p)l2#0LMMhKaCnlVdqzA~@+85;6 z2~BM-7`s*tnPEpZ$!kdhBRoS3y*m8SZyc7Hv+@fzZ({Vit^ZD6)pMmY8(!i{k*xs7 zW_r%8{7w!tUeuNQ#WM6(n@O&R_24BR2H>9Bnh%=~=Q#e_`s&k9!VGcXFQ?cj9->8b z1UuUr?D?WIpM?^wPb`K^xbOkdqr=9534Ie13toFs@$v9ws@!MX0(Z6LvEAF}H7#7N zE1i3;uTZt)dYV@?)+;I=x*3tolroB@enun=&QKzeXf0T)`kbz{Pqsexr5aSPxzr$e zPj$C3*tID+_qZgStEu`k!&J_vwm4SeHHAGUl$Yt(Wiq>G}g=s7tlP`MCmT4UmO< zsThCfQELwIknktkhpqnjXr1quyMHun*Rcr

V{x88C(UntUgj^ZpM;9$!$1sg`1Hwr@RI?iHG}f+xYMFvY3|mYo4+8F zB4?uFsgV0CS#UuRsS>``q#%5u5^G??H6eYnLFwgjsEZ%JwRf>$?hHrC?)a{*pN|Q4 z4k2KKZ1<1gK+3T&n>04H7XGA+$X1=?T!xR~K3Q$0+|Y#UHz!{Wu#DKKlJ<{!kucy7 zRG(tDnXHgIcG!lHBn;{HsYPK^Mkb5a&a{q=uWWskd`?{&?BO1@VZZe(l#a_IdFK}n zy|_AK^wqfeIAOFf5aiE0>8$-yJI;RE(4Hx?gcsR%#5~YApYG8rwASqF`67<~qYTn5 zZzZg7q^(s7CIV8z`4AB{4Ulz=sV_hL@r!XcJf2j7eT(D2yq;tGn*wT)NY9&rL=#{h z1v2=32N&`x!BiG5;o*5BUF%=oii^0%%G-4QWG)`x_2S1SsZK&#@uO?@$>eb-e(uhm zm*;QWNe-j^^|5)^tBymtb*pX|HKlq{CcNKNadZ_D^=yZLKJu?h*_rR}d41JgAK}0# z%td-{OaHpT+BY9ja$&%P(ZINy88Gwjx+uP<s9jrcK{pk74 zE9r8P8Rg*Hp@J8W#Y!2MJd1j=>ReM_`G;|*w4Blj(J}QaCiOy(?9nmjQC9xe&`ZqM z1@+laJ%((=`-%jsf*d~`PFdkGD{6x5i~oT})wB=PWo!CmMpd6D?l5`5m=x6)(e&Qv z2srL^GM87MdwO}}uD|OzJwpg%NHCZ3c`9)Z-Oz6i{=KPqr6==iR+$$Nlw*xZ+FID1q#_$hvkW5et|n=y=C zFDtBV`dbeyZ~IV7g07HDbILz>T}Dn9I-WrQ{!eSjqC+40^8!9xvOamwDAo2ww5{R! zgsdy1d)7TySN;BYec&n^Pd+kBHo zk!wrZXbYKRH}!#jY9?U`&^a#Yd#QW(`jeLe-b%hRWv?x;m5`66Rk6v0E)5kBK54jG zVl84~4WrdG{lAl5NanU7>Stjr5!QE}otm{N8ubBTPy*I(*m9#QVl3;~&X!NFsutzt z+6&ikK04)-BR_8EHGbbL@7q+!TtMvb)3;iGB@FGXpKYCU4zxj=|9{;>;66F*+Gx^2HpzjrE^JJFr%|$lyG>c>byeqv1}&*oiB~ z!V8D?kC9cS`_vn*92maIIQP(cIkmBD48Yui89S^$N`6eqYkJ^ugPn-AyA^dhIvVQf*Wj%BXweD_|zcv3S7k7D$zxxKC=mWp7vXu6|z z#?ty^w*A^)ua&KB0|n)M%f7hpo3_c<;Pt$ZQyt~C!z(95R_WqNv z__N~PA?@j^z17fH5PYn3Cdo`jT1T++4>}KA&>k@#@}0z*VMSVc*LrQX!4B(~*>m^o zIRCGl{lSs!mvL8mDpd$_8d$Fvz{xB2-jLdtcJ^s`Ploqj zql~`)$x7*t#hr#RXG2X-%rs13h87i8He%CF~SsaKudt z;g~bAWTM$j4HP^~tO;|NIciZ6^?mcZ(;vS*U4Q!-+@^aMH`wqGIn%Y!z4e^&TICkQ z%K>qn-iE;*-JDI_V*&GLp?P{qQlZ@8PWOSFynu%@lr)0f3R01kPgiq8z3Z0(<=)A7 ze~T{h{O`gfq`NzL)pEC>4OhSS?2-NIi0&BR5Z281^6Bz!*R|>h-y_rcTO~=!5hI{_ z+@sb$iGw7`Gif1bAcog-a@(ePH|MLm#9xd1Nr{8onvO#o|7ACAY<$1x`});NU$>@b zcdzmse_O{rnkq8R)|mn{*KqdDz%!fzbfTXoZzN|r^i{G`wcyysF856d)sQRzY}jAF zeR}TPw!JQlM~g=pJ|)<#3wGs^0~-wQuCk7Ma%A??qrr}gJF}yn&-0)4X|Xj~K}<4} zqtad1-!Io1#=VXv2kk&b`h%pG!?pM|f7uj0mc5~WYuu0K5F0{z_Mk6|IC1GxgWL+| zvvWa;Y5-|t5)KS4yEsY!?&phO$cZhO9|_BFe*AVzcmvw z0_z~m4jX`R9UGh2>BP=HZ+wJ2d!I%0&XdPBn7V*@#4RIv5R^&<#UnV&&+AuzH!72q zQxIv=aA{;Ht?|6i9dDo6L>hXAFeyVD=u^6Zikn?u$(TP9=x8CJ$d~Jw=yC)EK{50x zJ%3(1btJlbA}nWwKSs~NWiMX92c+m`2-`IxCq94JB>|x^rn$H1_QGXu&!8PdpYDPI z7b208q|j-~Z6JAFlrMzug84XEA>RAxdxGPxQ439r%CjeQnPF;J&tG`v1SZ zgDzz)-_!W&K+TBwr~dVn;lId!v;UvPaQg7BoA^Xm#zjkkoYq{mX;b5CEu&~Mv3WLd zv%e1zCAy3Um1s^L;C+dibWhx9(nOnuMX7Cw6^t3Y^)&l@46gnYD*ggIoai06Q`rDu zZ~pgPb6)*_dI)rCIMGA+_=t!x0F?c|dkBy>qUMS=HHNxY$e4^~T$0KKdw1UO*e$-a z31#J?wn~2dyJj8f55o`pLbw=nK+?%*KBd`I3T+|HmHpH#5CeX>q zS7J=IqzZ3vVgUJ^ReRqKyg=AofFtm&;9fK03=S(Q%(GY7WA8jT6P(Oa{`71(08v|K zarjXASrG>R}Ekk!Wa!g$X%D0sh>(&Z0Bb(_X1iA>qg3yEKoQwvcI$yQ?E|J0-&i>(yXQZCF@%;-l+ekbrv4oZvl$p! zBnZ)WG!PvWCZVH+@yS@(T6fuyz9HOF_Zb{ zgHQ?Sub*QE@gV&vHYq7LBnT3LpehBA=}u!jv~7nm;syD<71iamtDh0g=f(_1p=Jr6 zH-|)wyD5e|go3l6xX?-Vb1)U9YYWM3sOJ|rqjKGEPB{n9^*@8KJ&J>|`*x?0bgk$;m1+8fwV-o$rr-|)6eavV1SO^En=iZAOF1pITBTOa-^g| zBTOv8c>86G9n#~a!t9$o?I5G}OfTr78lNE8dAdZhKwcGK+RDHh=<`@9)6$Y7T0>6_ znB5@vHu>&a{3~w!6=9vd1C_`NeESTsBR(F!=_{)~zZWuTD64$V`IFzTjAp;b*7(3j zuc~hkK6nWEGXxB$TeDMB)AS8K7cgR=#3v{#l}>viJ27 z=mNoRA)zJ-|AqH-MW6{gE~19H=y97Fh2?via23>alO&-*6FAsmKWye`+m-7vCh^Xr z%m&PZ(177TYi_n`N66Ct4aN1GD(6n_h-cv^SVh!-%HevFNTRSjIW(?}O|bI^SxdmNhm4Dt_i)3!_w~0;_|t(T`Zvr$ zL_#@CnlS)*6YhM4Sl=HY#8ikckFUa#1N!>hGK9r*wxy1_xLH_Rt~M3FZp$&2fG;AF z#tcg=GhApe2V0FFz-CYA7~YCj;iHN6P8e~!O~aQ@(+4!3Jfy9ypkqeMgaUbuTi%zR zi@}48O@U*#pTAlfDkU8@7@)Vre7d^n*F2qz?Xs_a@BkBdz#5)XeXZ~^e9me3e^K|QaWTDr-1v27Yo=yuYNnd@nM~72 z%e2r&O$+Udge00$%34wh(P=SSP%0@(Q$py=L=>Xag2I<%3&}_bA=ygH+*kMS(S6^q z*Z;}?z90Oag%{rEoay>HX6`sar^X1`yJD#)~P znp2K&v+N~>(NP-(;Q<(z!AWZ&pj4EGzBfmcX471oBFSnyf(+6SyQHo# zH|2V3O3SIjpe+yMTDm^JmFZn@3M-aa&pvFj>Jql*86z}UGe&0l``ug9!__03ugX|x zCK#fA*Y^~0(Ang7a*&nPBZS!XB^*>lN!P_K-}dM&++>%E&HYl1ZhF1S+_AgME#$T3 zvsk1XQbu&t6g_7x)GQJvbuMC=e{rU=6u8It%{dldHk-QQ)boX@*OVY9PxMT&QAjC{ zSTMk%3ePN(@iW%8Z{Z;hZj=a#gDdmpcLBaIRv9K9Bxund-Hhus@!t6aILefPN;lye z44uK#>5L$juh+t=9#%k^d2{w$85*K1FvG{lMSGt`3N51yNNQD%(T=*(K{|Bw z29`#Ac-iMe$FtxSW~?J#F6}=n|KP{WU!&zDC5vQ2z!<;|=&nv z87-hL%MK@;!vF#;Q~ zwaa=dXSN@b+6W_ojxT1@vAOaOP=a5l*7BPNbio?v^1*}IdE7BE}xA4^t8S6VYrFi@!fi z++o+8R){&+h?AYj|6UWFaeeS~cPKfUd7x{{iG7ol$mO$E({R~H_dTK?l*xd{IGLWv z#QW7z^vmAp!l6`<2rTyyM-!(rQ#~6!2g_9>RtWa z<}IO?*}(sBoXzuJtizbGY;e9cJ(D{BVK|ma@xqtH9Gg z(?{op8<0it>)}L(L|GA*=?Xz{5R_l1m65^UTMFiNI=wB_+=n z3LB%IEW(Qzrhgc+ZbejLDDTuRe$S|mZSuPck^`Ak3jx{LH86y#H_jz;&Y;Sfz)B_n z&TjiAFW--_sF2W66qgtemk^Eo?hLg2(J?mO2*)NGb?hI>{fUO)*676;FodS9ZEKMe z=PvNj`y4b7|LL^5an2d&M@5ytD~G{Vs=zoJtKf1C?X^+Gs7TsO*V(f|U!Nrj^dqaN~-rQ~xbuP6* z_gPr|mhW@5IsK?&3X}Q)W&}+8qqh(jaLJBi;r~{ z?wd;Rp?pI9mqafG93v_k8Q(-0>^7Oo4P0H=IB!+976o_oD6oeN^201PMvrOt*=)KI zDQEd1o|HSDY7=`F(waJ z;`IL2qoWcczs=GK+UEOi6cB}hikj(+DWU&{1F>27I)UOw$Ix9=68@W(39q(d6T7S^ zkJl>9YY z^$%&U!;dul5>dVOf(u(G@eDS6T4c4K(pmy$%)`-1Xa##8cq74w97XkjExs4dk3&EGR7)5jj+%?=pDphT402x;*xVt zqzCdXiD)HPVd3w%!<8Zfj05aJ_uHG74yT8s6O|f$iFjR*BIv(m&O`g~ZoLG%#eaT3 zRGECigK}LWv~$kQT*R1pS2c5=CL-Z4c(RY3qWL}wT~I~62Ca&kfVE(-8@K>!N~Lb{ z7&Hl`jVP8cIQJ14BT$x+%4=cbd)PuHAgl?N<#UMAZI{>0L@ zX}@;w(L^Q-Fcx}LN<$66UW%+@YS1+mr)i4_X`Lhfdck1$!rGfrSJ?5o&7`n(1>~T@ zH9Fl6NUqf$a|%JE0L0Bl6g>QH9;J`5LV{UtJO)L4%=`wX0z?oy3kgAnh^3C{&j~gX z1)+8mtV$j4EcjO`mvwl{^*tv#FC%AsEZK`YMrkP|PBYvOkg3)}Ztf z2qgO2E@Z#}sBE9K{FMhcu7jh1UBw2g@y))ppibd>Jh36Dk8=DA2k}BLUPA)MErD5|H z6XVGtc$YpCh+V4!k8Rt~eYj1yPN*SPD>rH%FQ9I*DOKpox@;5jYxb78z|qJtU8uL^ zY^d&t=8K=je&i6LCP$=>*4W4f5;HCWOu_%tM>Vex7^ijq`QPzYw&d2z)+VsF06E_x z<7)&I;^Vb30LGV|IK+!3M9AubX6QA+gP%a=UwrH z9~KxkG(+x<;f_^xQ_yp;x8!{#OQ9Nuad*MvqgQqs zz|Xxu=Ln4#rBi=An;xkwudcoi@?SsF`9QfL*z;U_ibqQFpLz23 z4v}u1L&&sj_Yg&NvFWNIuRq92<-@mMj<6d1KF!|`D*BOL7LDoOlD@<+j^lDJdfNH2 z&BEi05E0QG)0^S>bataAE8a?IUa;n&NR&}uNb~NQzI{sJ9MZyD3#7NUI1E1n_wXK6 z@AwZf0&}q2&*%6reG?w~T3qrWd8N}sT8vV|J`hSqmFQP7SO2ex#AW7N7a90ZZFwR% z^)~xW0M1~lkqN(IvA}@U2)6(@v)xp zX@CwJhmRsRpO^cAhE%OPV}T$ChynQ;fiuD9Uv$@R$>kFR5k6q?O(bt9x^g|KahqoEH~s9vO|?TWiI zqRz6{HR0^z)%QPuEr@_a&-UL)7ApI4D#38Ix1d>ba)rC$X3$6za^T?1^F@0N7`6pb zL79|t_V({7ieJWs>Kn=OiIPP*ySQ!LWT6_K-dD`Am+CnYEWY!QWkRG?WvlptcxDq;-A=B*7(8DZ^*c6F{OBKkQ9;+};O?m{e>u+n!ZxN4rsCM>v zkHy__KB|_kG@a-Dypg^|8plHxx5)6-0njDwtr{$uP= zMJpE;nz{wl{ZxqEfRmFl*R5uI^7gy6bdrp8Cx($-0NarfIws&5{EH4wyaQvqE~9#< zBlp!ohtY40=QeBdpNd^I=ZxUMqJ(ejgsi-dN}k~_pJYx>e-48KDg$)RLjk?z?XR8pJahm=#y zMC%$V0~eHLds`tqexe(<5sWFakN9{hX9Q^b%)%^rbPQsrpM(b9j^R$L=kOJ zvrQlSsphOK&7A9tP^ic^FLy~d-y54RLW+HjNTgE>t@l#Iv*#LYIz7@laDv`Tmw!U~ za9a-k2_vy>c?bA&gvK%s@4!Q!OX+vV$nopRsp5lqd_^=?_e6smpTxEtvi52#yaN4)lxUO@KFymZ3RQ%Wgt0KBmMF56ow}0(|xNbpe)zi}E~`)!=j? zr!_g}^nBlpJWt|@!C%Iz5(achHO#aA{CCluUFE5(pFeBBOIvF#nu)tY-SB-s2HJxL zdU$R>W~vgZT7$X16K?Keku6!YNS?6ZsI1mOLsZ{(f7Y4%T!>vw=Nz0qiNfw% z_MHxjrI+%vIR}(aFS&j5x+^dfYR#t7LzPxUf_GYb_+Xp4#W7N;-O@$J|1}J3Z!QQ1 zhD2{`yn-CiQc4?10687}6`PwGh9SQ~*N@9?0Xz3aD(6IJ?(kaQBx%pudxvR<`O9(a zq{p#Gkhq*~C5YX6<^NsI=6~^RY%sMv_&RIvzU=6t?UD5?Qc}!Q)fc>h4R+Xp+YKL{ zrKeY+%aQQcVzs=jj~;XkNgo$>7h+{;(l-~rBo)hKKoA`QjgpZh152~^5(?W8SQj3; zLfX-}7>6W6&V~sej!g5`f4Ca`c2xig8~9rQJo`VmnlWSu<}np$lPql%FIbJObASBC z+_J*}I1vnnL81*^E+c#zzePfpDI<&GrL}k`Fj(EiR)I$Ae570X?+7=o&rPV#Q59JpeP5^2M%-W zyoH_Q@V(ZmoF^_RmO%U4kKsF0i=)Mmzg8|N)N=DM;&9hU^hWd~iYLH4USy*`>(1RE z>6>nhgtMO0niG<{onP1Vwc*lDtA+F+?fz1bJf4xIT>qmbZ+=eEfS zY$aaA8dYd{hg7w_P!;J+S~`otB!_>+6DTwqdnL&TV%I2y>2PIQP-|d>iGd^+w4$n! z1XM9QOcl^)n39+8g=87pA5YcrI_=ww2ASAL`#aGk_*GF3cjn$`0^V=`d$xJX!dsql@kv`%JS3T zMtdlFaK5X|4;0C-S`?{-f>}M=7p@69(Q#X-vO%c7T%wr4B2suV6*FV?$DX&zhF)e- zY)^lEY1z@P$~O-TDmB}gfC(${7t+K!@#z2=E-8B?uMZ1Bp1>fQ~yB?dU784Mc zQri4*P{C2Vye&}&MlQ7NHNUI>X-c%7*LtSWB~|5MzF1e2J=kOjEWM#58eh3@%fsl% zB_%tY-_pqPORs**_R3Qq&jSa#QI(j4#kLt1)7%<}U7P6g&*g}a{b|T^A!E>>kvi+6 z&h+A8I6uTOEKy4y7OW7qE_Sjz*~k_n^+@%07nK*L^K#inj8T(s1>NgJCRYgpAu?g3hrIVo6S}x#~O*L+rCIg zlP;q$Q3|Ewoc|Ufrnm-tO#I_KBgO!F1~06I#6sOMSXK!gd8bOeUC9gS=*E}YR}h4J zA7a;03k?dGPU??}95GC5c4I>;NVM|jG=^}_)1u2QX`DVcaE^DaEN$?`y{A}k(o}pH zYf@EcB)bhK`L!#_@kOtvW;Zog*0(H|Zh<3zOlVb9|?z6YfO8 zi9}44Q zb>sC=fhT@2ukVRN2e!J6&&NHrN&}ck`TLMmu}Qs6W%Q3#+b%4=)aJx2Q}&9(w|12` zM5*lBiDu3L>rwKrsRhv-9Sb|<4vByWlBp{`YsT`@U9Mz$4`&rej{4HyyLVe5MZiCE z;=KNc@OGgPaU!Hm4#t-H+DSd+@$`)F3Ho4>z0#?lTO?wHisetgJNVO*?Z7{b-k0rx z*!AS@RuAsHsS))21q*vxpSCpFl;A`>l>Ad|@AB3iuk#zjR!Vl4p%pt01UnSqB~&a0 z5_bcJ&<#{-h|Yt&eK%YwkXxgpP>_-828XB^OiAMWWO$v!i=IaQi&u#ESaKEiU(Q-7&s!|LaOgTX$8mmQGuljgwU4BdnS=pFR5Wf)sg!_Rbi0FX%4C+iO0 zUM=R#n@=z|T5^Et7RGYrZ)~9Mg;V0nVW?g^fi5ewK;7~d zcT=W~zBOM8zq>>~Af^7C!u`C?-%e9YKXLL(oI83%%4!^LtRe|4>De9k;uE$IM5|Z< zr<|&#F{Ue=TbGtSwAMe7eL-8G<1SF_dKS62s^TZOC>0~Ty+a+czZQFhLKLjA>jN<0hH3^y|djtkwR$2 z2zh?1elkURZ5=(vqA+cl?f5JoT&g*m7=rYJU)y$kD^ecm(6^9x{2IT9*6Lm-iW3$K z6e0^*l*&H?5tJyy*byCZ5tgju6gjg;(*19t9SZKF5z2^kvypX-9JVbdx5ru_V!Lh`~TmsdE@@J5MM-N$2P^RMWrEsg3%BuwDQDY$7vBss6Fgm$7P z#d$iwaYE!O&){lp^^kRnAJWhoU+GUIu-}bF4LLb*j3awkwvvKIUTA{acjSm7g43{x zt+iBmu3Ad0#A!}^RR_*c7Y?zjMe4(_zPEQ3*J1fFexR11A^bhk~$w&3#5& z6p5aJNhLyw5o)Q-FBS7h+>{6nTvaKYY9A?qA1M(_1!|j+0}wl7aHy21q>WUOVPH$y zw!QYn^0|3Ua4|q$Ob@5|hZ-Pbhwe8`NBjZD^qdW$U2uzg_^39FCg;LX5%i@gLB=sM zPSD;_7<)EOToM?ojPbl&N+l+&aIaklIH{+Y#WFbD<6MaI;<|qQWh=^_Qe9BuR3|bZ55=hkVS$JLf^)#3_$C; z6z@a<>M#HKE=h*o`FQ*YtL}}>*^Qc@VUH*a$nxa+y}?dTz-(M)twPk07=wMt>xRMt zF;`SOm%M0A=|YEL6O`KHi*%DDe1YYf3;QKA{i=GG#F9f|%ajaeDQj^{NI}KX1gk@g zc;!N5I~kg81tfg?i>dNkn;jfsf;r%Q0mI-gb%XS$NIm_nzTNk~ogxQtdQXR895_Yp zxpX>j{=1G_LPPnjuWQ!f%bkAX(y430WAM^VSB`){2D+xe|2tJNLvu<5FF=NGLZ(3z zke`9^fbm3O7P6+ZagOqJKts);E077MX2UGTiiyJUjxi~|XU3d#Y@L*X!D+;2{_NeK~787@0mCCCD50b9*p+UTi)TV?E*dZGKDaP3vS|?pi^l- zB%TCNZpSFeSH^hT4o-j4F zXxJB@2_v3nNU+L$2P)02IHbA|*c7iLd3-6v)g1f>YOYy@z>1Lehp&bini=mMU4X{C zM8mMW>1H*|4sS(LJhbg~n3EJ@*W^9e_RuIO_4nQMLLpNX`Y!dx3Qh595oBDmDWUg? zRs>j6{?@ZmkibfOK)-kX*=j%iL>@1_ca>O4xSlx~(M@&ps>-_OO5?NRaBtDzHW@?A zF?$M=eko&G&{>67{2E9b>2Cg{oKyF^i)hzFy??TN+HArl8!e zPj9FY((fGtSNYPj`a2{N_!6YRY>x!?eL9w%S(D&Y%TXoA;=)0$M? zoF+tmY3|>oPdqUq^N<&!q^#ajB0@z9aB_zCe4#ob;HABNE>O_PGgXuSvfWM}OKvvE z>c8d(f)z=ko=}HHPO05YPbP;wx5eVmdu(}Ox3_1c=0&6X-^q%Th4S&jueC8VCLyxg zuWvQ_J}`QPASIL{GF&CZu7%cZ!hZYq$p-5SBiQ?J;-*D_k# zQIw#InID|@8aQ%+10n6Z>C6MvdJqhDuUN=d@b?2!DyY!4G(ZkEBW1-F%|N< zRHApEGjeu12{!WZon)ZFBIT(`#onWlFwg$BqEyKXO*-$Q9CD4oR+x{w5m1Q4lH7{) zQtXujctu)AWkYxp(hqk=#jVXr??HLiHp?H%vxJsZTo%NxZ5ZQywg1O4O^uR8?{l~lO7saKeu5ISP>Hnw|xfeBJwv75Vu ztAFJQ3AJD*A6O@4@0~fxMkTU2-&Km2ROR{P{N8jRy4_o5>;yQ(X|Kt&ML$hf2}e z(_Q#4eHNHN*xsfAgPhe-k+x1-f>JN#98JVxD{=9rezN(rzbxxb=tgZs7cO7ual`a# zRGmLW)rE@mGzys8yuBz(_P#LqQN!>~G{Opnq>`74G>%M1JSQ1BAW%i!I~^GkI#kq} z%J2ogh~jUEU2iEBsX4Uy;oN=KWGlIYY@C?}iG>sXqhb43>tATH-gt{q8>zsqSiO>+ z01O}BE|@hCeR<8BF$W&0afqs)s*S{IuK32lyHP~OM$@;c*Zz3k#Fi19|6U##*mN?z zs!Bmev+S@~sYbRCxX%xzYuD)Z2D2sRMAKAd#le8oO8x9(T3^6mE; z&swa$-UA6z#r@a+q9RiV815bOP^ci&NU~^cOeCzSNQRo051g`j_XbyN%Q%UXFtrjk zuQFO|G@O2vsco$c>BKx-8CvCw@AiSZ;uDZ4i-YO~Pf-bYI42%2!&GMq)%W+EzU{bo z%_eDR_@m3CnT-UpTyN`C;x#=g&Z8ea$~ILIy7|No^maU%toh^x4S$yq{-2S!+zw4^*Cc6|3J5w>ABG#V`2D*BEy)%yx!V*gY<+JFjX}e*OP5+W9acu! zxt{7QS;|uJ`b|g}B1$ds{6_B$#{C^>(+|Ps+sMWU+-|;Wl)fP%##Qkbe{7>>dezu+ zicgVU+OLl2O0Q&D#m2_8!m725kJLx#O3ckx^BZLR&>5W`y$fAxlnBK{H#_bl*-V(@ zhU}4CEEnB(ujTF%uct=p>zSr%lLQP*bx0~$9{3n|{3CCsLVNK(Lf6QKH)H0rSLzw; z>|B4jGI_vkH|i!2WGQ*2+8ug9quD>*;bI|QLT`5=BRx2k(Gk&FjfO&zi4TG*12Z#k zJHM;;i*3=Rt&FMR0nen>$|c5uP!=Ub^cSH8RmXS5vLsZlHZ_RN2Da+YH z_>h#;YHcBQRY*(6pw*nw2%1(;YrNV5PU2)lgp<=tf#OtCBuQMnTuAA*Ce#sCw~MEJ z9CfW|w9SE}1CWU(roiM@zG%7egDt#fv2+orPKBpSfM9qUQ>w(k<>VIqmjb*RRA*dZ zUN-ca+T%Vqo}bWJSYuJU?sC<$Qnv)v@!jx#>f@1R8^3BsENF}U_jdn2HK132%(az; zbK&AkG{NAT+dL}EZRXLL3w>}qWzOUkRd@faU`1dCf?_`=&G z-kvF>k6LBjMNo-s$+pxEeLQ#m#5JJ^`9AzIka9a5K>aQKTsnt616oQ-7ohh z#7&w)?2JtMk1{w%?yr`zaM64I4)Gjmp4)zFyRP-V@NMb|g6lDp%I&mV$vnogQ8W+dD6()y&Muf~(Oe000xErM6PsSIPn>k@Z zH3ZIyJU@CMbmmw-1DHdu9z4=U`9Zjg9;;RImHIgyf>{f`#;zL>-Rb%iv0&|)6kAHiQwR>zVn)z-w|(-1q;MiuC`s$ROVYXw-5y(arYnb1b6 z_51~^s$+$6lzJ*&g9-?X(Cv%6wH_#8_^S<7r^+=3Jr!1MsMucj20)M8QMBlb*kaWeqn1|qc6C&%;Wc)6l#|N7O*_ev z0+Std7Mpq!2O~9D!|e{+f}XbZZ`d;To%o84IK#lq`OxU{o3;5fJAw}`KJl#MHVt?1 z8+pyin$Z}}J^ufYZ~9-zr~eulVbRF2@5Ba8fGajLRHUIGl zsXYD2M(XEA>n2ZY6?pTB z-1hx6FWfG4qu*i&tpXBWa1VJ>SpwhlztG+F?&6FGStybi)fT5e-5vf8crR1=F$%Zg zPN8Z|I$^WIK>|~18nkDF1(mmN%^gOOj3qMh1&44N0lCQtZ&Q1A_d3&342BT~E--b! z4zmG^6j^@4SP_#`P8O;Z#$N+<5_6j)`?A)2ce~l~=!XQ(CMHaO)%Mj=XTD8Z307fQ zzHgTt`f>SAVALmO|i@k1a=r;-vxDdbpHhg1y3%J7cy0! z?t5rsLuxG-)ZwdRU?D&a@ZO^GhsI;KjNR|3d~sh)GoFmH=Tt5&IMT3%ywEjNt}mI8fuJp2eCtNx#D!nh1J1JukZ_UO9diI$NW_i>7-1 z#NX{0{QvRVBkiJ&VKx0ls4ub^4xf>1E~MEc$R~t}fOF13_Hq*o;qAiz;>|()RkKizx1Qi8xgaPl@Pnm`|Od0VC8$? zT*NOd4Dp-=OqUiZ$SAT0Ip>*rYckor3cTA`E;!r_v;LPh;38v5!YCEo^2y#LrQl8>#zbHI|C}b!-iYz z)}Q|Zd^AYlw)HpeTI)CF8UZ`s7Y2C@9r4EekZt!aEQ6hlC4OYp>h^(B#SA{a=;s0a zR&-+k3U3ENdz6JV#Tr8Fy7Ct;TqF~aR8`RRejyx`&qXbTcnUqnCg@88n`*(`W}NMq zo$d2we}G8kO(dAprri&o%d$3{5q${XzN zC4sf=HEfbBrnU44u2k}bR9;I0A=Gm&$rgOlSg8XZsr9!auxGsHdI-AN2@0e$aV)$- zcKu&`e5|3oFOb!DsV>+Pskey%HTl4a2UYn%8N(vDd8?rzjcVKbIRDLVD0f4e!|QUc zeV;U^#an5|u4=JROXxFJ9augneF9xI5|g+*TvjnSuliAel;J!D1J33B7hdQ8o;zzS z{PMd+uPHS%D~qW8OQlBIQF?CC!Bq%F^^4R)5F|_-P!QVFXv{P))`jt81&GyL8ETu` zbn4IkE!$QcPKMa^`~QsI+xb4HTwyjHe|k3eyVFnfWS6BNz-rZTSs*-a%SLP?VTsiW z=cnR9PoBkZmju3XIi9m8zTzF-hLC%~Re>8w3cU$Jbq-on>I$_#0~T2D zO!9|2+e4mx18U*szUKc3HH~>APFTQLk`s`hf@@?!(&%G88Bx0*Di>jW#fnzN&7kolUm#TI+I z+tQgxO4wNynWGVVO?vS*y`OGI?4O!7@p`0a*?mpAluAK!!Cgi~EvK*m8WPc_Bif6F zd2+~WLmkI|tzVn@U(9RM`Np2WiLWZ8SGp+@0ts&tz6H+(0mRQnY}K^4AwBSk+O66T z|D5q;GJB)q99LEdHkg_6!*+~Hz#xb!#4_~gnzI{+4ixbNxcf$Lp0>ddH?z=kxd!HtHXl)D5G z`PPL>1)rd{smWIaN*oW$Z-kOfMGnPi3|M3a<_l@EWwrHOQHX0 zrU&S!$;#yOj{d1Z-&@3-7?Ct^|Jmyznb%>v(y~B#AP^D()(76ZT<#(kV!IeoDkJO2 zHcG4ZYT_i8pyKaEX38J5$`;wibVs$}fs9bYS8-=;d)8_M6XlV$=iseUv(GBf;1o5M z=t9N?sr`o6uTyYyE(7qXpYw!@JLcYQ7eefe?fy1bKnW-xtTRK0GW%&AuGa5t$W9!4V%sFUULWBjm!GVqki9ZELXZA>@ z9WTRTO2`4Vsx3nm$!L$N4V4i}g9I}nd>rZ3%@hWvM1|wtNceWYP(6i8U8kQeCyM71 zI^vHtnWLSQ+yGN)o0e@$!gu$_e~=He?R9W42dBnZLryXl>F@8uskbKACfvT$9jk#1 zop#44KFayv@XF&ZA`8&jNGugR+39#}6bbg&h< z;({weCL=x=FYN$F=X}OJ)fyF6r_LOfN9)+v_dPT&O~uWU>jl-Q}@Ol(=Dqpgis-F_o zaP}rWLEc)u+m>De0icwD8IE3mF@7RqboHVI230NrabIenD$YxNkBi-Qr=R?{PX>>T z?l`cnQReCvem9V)L2mg2RfntnkZu~v$JqqNYOMIvf(9*ByQB9leT&+I$L321x6ag& ztVdUBe}^~wWiBI2XmE#peV4X|Cly>@W1k}XE&W{NqjleNQ@v7tfd0n4X1W6#4A4eM zA3n=9ja9s!hiyYQ;)h85*#-@PL_1ZWvBK8EATpM7=<%hSdl#n1b6HT6q|ujv7|YH7 zwKETa*|BzyC!m9|_xPzVp5IO(|q_D)u~H5w$hmWy3D+dXI7W=8NVp#}tj2 z@apX)1z@x!$tB3!l<7Q*3 zQoo*Fx2Oerss8fzCJtCd?=qdl_rO^&efU_`FY%~d$g)Xf!1 z)A7b_ALn4ntI}rPGpcs4A!<~y2kyD6A$A@6+2|6LttR#TReUeYo~&yM-Xn@pyKPEd zp__eO@f2Y;I3X#7QGm#?aO8@}2y>JLlN8cXK5Lg}P4$MTLqD#ZPu}|QYO5X2@O;5d zqrcsPgY4o)mFwBcXdwCZALgcEJ~S+Y&OOWS{8NlyFO7WI9Z(Q%ba>C&y~~6mqH59w zY2>RH9VUn?rXOxfrKvR!4*s2ew9~&HVP| znSOQtiT{Gxl3b2Q%m;nuXHu%NE`}Tviq}3ahO;F-_$XwQum71T`JIO|rFqch4`)it z|M!`a;Rqvrb#;W2DXzo$l!x&^qPBK%e9su`m7a%cL}}@Pu`Hr`)5;Zpfn_K-Zidz} zck`8XW*LDz`7uvw5E8?Q+DKC3qzhYttxHKz;CmPz{eC**8tJm*P|50q+^PNHRy|p> z_J7z);OC3@{zDd#t3&VUqEl(Y4y_TwjwQ+bZtg;RS%k1Bb+KOIT#y$ErxvJ~DO0gsW?CAa^)4XuSme)SU;QNgRphkS(P+@{z zs!E|xx!lXpNKGNUY{w1#F^>?iZ3)BkD!b-;N6PUp zy<~}^zU!=eo|60UI6{5(9frru-H9^eR68X}(wL{_?rqH_(KipL-o4g34zbfs;5LVD zHTF zWx-?C-j*^^veIZ`X<&hUn@qQ9*Cb`g_E-oPu#HfAEAH=PuEsVB{+2%}{M1G68g@)P z+LjxNrTqR;HY=wKu(~z_`#-H#*t*oac__RVf?=cf!53Fr`|(DzZ>pNz%jLq`>|QI7 zS;jCa27h=9pOclKv~$&?Ac$SHRw=hA`2nTSW|iPm&!+KsM)U5%0$uUz+UtXkCU>u2 z??m`4sd%5H+hU!mQUwXw#M?;`J~ZE-gBl%aPZ1HLJ(0u$0V`|;Ux|F4Pc?^IHy5AK zOC^;76sB9_ITGeXqR6^Ya}dbt11X!w&2U}6C)14k#R2cW$RmRSb(%nUKVTQ7;cOGRCYLLLwFsyTmZM;Ozsx=7^kNe5S1 zPpR0~^U)yJ2qpsrHm@5s{6b6>vru^a9|q?rVc)lh@`EUQe0p7kB{It}fm}80b;$2I;O% zXZnxD!Yd~kjuFjJe!8-kbd+S@{o>C(|0oI#90+ zY`8E;xGN6IiOi?z1r)(*b}PYJ(YUvt(4)B~&34bC{^+)WRuPQ)Kvp4>ppbYUSIt;hK#@f&gqSDOh)8(AQg)y(F^GSQ;0-lh4>!X!&nIV0Y-26 zfDRKCybgvCmbQ3mBzGJvce4-FKpx=d82u5e3Ee4`e{QnX*pU&qI7*k(|Z z)vE|^bzCV&-V0}=h}|q;R(BUq*Z3{ZH~|zRH`T5%RhY~8`UhgyAf@N9!&K8osfgd? zwS!6Tu*@k*AWq8nRp%uYKT9RCHqW8*D~$k0q+2}uNi@4UcV*EBm$0Al*EW=d(TNS1 z9j)~9?j$FsX7$Lae1k9BeG4d*zx=8b%7v3@O7-P!S5$I#I>R987;&+-#L72TY8L$g zwt6>Al@!4JzwUy(F>eEkCJpI|==OXh2o9ae2#1tm;xy_3JQe7)s9QpK?G(e&_B8D@ zoYvu%Ep(WFgqt_lxyLJcDq)+<^=C-ZsW$1d zJ)2MYA!Tr{rlQ$vwDh@C~~A0;Hc=zHZD^YdQFc0J4FuR=J%|~={ z=Tpylwr0B>xjIpQ+iMEjXxU4RVMI*Yo)TPhN<${7f58%xyH#M5&7q{wb!qR4H!d@5 zcRXR5xuu?8k{OtW?;3>Iwc^%~bgPAQ+`V3ro5No8>SkBE@&EKKC>eIv9@>28>-7PQ zA2~nV!QmAvmWXD9d^Omu&xgl^80Zp=`jtY6dsK1~EY`zAX@wlT_Y*vwJo+CMe6Pot@LHQoHahjK^F;dA5rL3`CT;by3X@rm?3r zrA=2fCXcH36t1v|=YYBCO<;0hrNE55$zD_+A zCwb;I2BwtYm>lUPX5yGw7Lon?T*|okHCH3};F-0jCgeNciS6BdHeUS5TFdw*?OVCFu5j@hV$nbI<7#BEj&z*i zC`-ft!%-3?|EVXVjbJ_LcOD`H$p4XJXaZ%($sruz$>g!?B{4M(7oN?za<{EImKqPe zE%0>bw?_U~Jxoig<~&W7?Zlm$^8NQv+x6OH#p~E^nQC}jDkF|Jwmik&ur03R=zSNV zJ^JK_uUgU%zy7anQLoc&d;MY+G`5c0mOGut$R8&MG5b^H5D9Khxw!k{#%JF(@Cp&E z{Za6~>uT*&zWQ*R?9O)iN#D|SJop8590rS5esunb`|R;($I_nHFGTRK;!SRScyJB9 z@!mMb&g`gQuIE zbI#BpARr(a#ReobK_t@z$*GkLO0)@rLCC}nSV_A|FS>aNEt{&H>Fu)m}xm4 zcuS}>MdU7DwP%)FYtXhsYD8uecO#yCf=!4e6hf55;AVIN^ibKTy1x)xWmla7TX@;o zcK2mGk`|n-Jdy>^GeCS7z_t4}UFRlT9 z$A=TI>GslG*|y<*RHfY;*X{8A8^!8vK({LBd~gKvjUim8=}!i29heNE&sUy{Uh?$l%JdjQb?V&tXL|UpI!~zt zZ+1cADS$#5Fc_yzrcnxH0-4T+7CYB;0(8<{w?(OhF(5Nf;Wt^TC#kv^CWU@DijHuy z^TWaFcJl1josHm24CJD}q96a*JPp~w2Qmq1Y(#@gg%!$@XV%rg%?$9d;sbh~1@1=8f8j{EVRzac+X#qOG%;^YI*?nUoRtrQ7g z-km~pm|jN?#4b(uZ~i@4BLTKv{GP=TC%t)3YgvY%P!j5`anU^#4TOSeN9Q75#MEjyNh!);qB|!rRmi9 z>FDVAU};7$;Ge6iiX8k?MQ$I<8MI{+uE3K_ViR`488*1$b5anrRp2vdlR5_rBv}br zKIvHc*VX(RYsKO9LKcfc{szDCouT-S{gCB->Vv(pZwsM#Y*Nd34jzXM1;0`ER8ZDk zis7h0aPuPTor=q8&QBnOeO41iS)pW0v~jPe11ge)Cvkq}n#MQ3X+a=#d$e{#YJQ{^ zn)qny08wpCJ~1^Xq(&um%7%{s6IO0_(P2PD=UqtNp5NBTk-pNnyJWP9WABezEZ!Cu zAu_N=$$sl1$T?NDsC=Kub!xV?v?yVD>l^ldQr!_KH8O;&Y)i*JveAmNlP$<0Q^Y7k zv_S(Uk)=bALe8nZOUuMz^`0Z9T`NW{O*6TQKDOB;+WH5)(v+)5e7Ku{GA=YlT3ZFun_w zPl_B)mwi3;v%LSkbz{47PYSMXG;MeBvlJ$Um=>jt_&GmuaUS_!JL>lT?5NtRs;bl4 z+EbgreD~SQo(Y)c^ch?X8!QO>#T7AI5O8uYoMkPBv2<9s*jDgRfS*$|XF9dta{*b( z`oVe|PQZHpXUim~Qu_NfX6bd22cIxClY7=iDKX8Z0H}$BFklrw^+%Ixq$E5Uvfdce z3s7gBHRn`#;5OjMOIn00rh_u%+6}x-l9>GSY-pDei;^XD8O1t^dz!bqDq>@)X`LlU z9N77abf)vCEBDQE+|xz$A7J@ua!M5k$2)e}kutd=4eJIn6(&8zolkyzZi+5tdJCbA zk^Ft!9Nu((U#suoR`{bddJF|j5P`?NWX~j~$OCSLJKEH=+t5l8C`={pq~NP@Ee2Q* z!{`~$HmRpt)Qr`BpcWCr_*tIDdw|zL$QR1|vvsW(iA%}%MT-@ z>NsvhUGq48rN@x_)G7QNi_4i#ER`v7j3V0q-}e*-`JX0L3U(EE**pYIsyJAfH(=HV z>@4sr?8GK$YbBC+U4NhwnUP6nuLY;01Jn*+0OT!bj*trg@(0bJO$Q;;b9b;0Br|sQ z4Rm*OmXvbqU(oq~Kvnx+@~hyPJXqxLzwMbk(|_MHc?c5)n5h6ay*W&ZuYZ=)PwoG4 zXa(2$+QtVkPhoeQ`PZQ7u#Urm-n-6N6D`o^IXSW5oI32aq`s& zgKu#tmaQu=_AX`PlUAp@%QTg*SR6sBP^FzJ?m#zIJmQZ+eH5`oDBAjVCb%`P)v#j5 za6TrO?Je1=44VdfQbklUJ7#XQKIhHV-V!B^WC7O1%w$eLL|e5NC54S8g-yg9Ie&R8 zOdreQ^Qfk;1Pj_Kv#Qq$YblHm6GcZx*LcsrI6Fg1ob^NYaAGp@sMML;cXJGdoZr16 z*HS>BJr<0VY0@dl2?#MS7G^BP%H5wgCguD&4^X)iWZumlwVZEE*O9^Ssom^QBQ?>_ zm6JlSE;iqvUqqVrbS!>UY*2D6Q){|Ptc%3YEo2F+uaKIfGI3QoM?GqSC`CAt2>N6TR<`chuj>oz*Zgoj9i^ za2kLKiAcLjXJBh)J^AF#%XKYJ+V=xBoXle$xm(NO9z2Mp#;0Ij;;n))n^q_FnQ0GT z&AsK zJBR{|=56F^Srna`~g687X)SUA{^YVkw3-0)Q_p%)DZ~FmG=Q*}O zVjlbB0{74ME-bvhq{a6+=alp}ma1|p!9|XK*-976VgOvkfOEo+&p0Xv_IFxM!Iq_2 zWwcLv)>x%!MYOfye9>1_IHh8hY61}O68?Gd6wS13PU_LTO$7LBAa-_1N0jGMG`&m7 zsA+(?IW8pAI$FS|0j9dKErK{To2T3_mpBC{N;tplp?Z6A+oO(;&Y3n$9~>7=DiizPfy)<^S$$$O zA62g6ZrOr+R9A-(xgl+?K^4c8;8@rZ}VA5X*t}(BIg+`9%jz$B&$uB1ln`Iu)9P2*G&`R6xfySiJs>sK=I!{OJ@wB* z^!9(5H7|_{w5q$BIqv14L9GOBfzxL}*a>J~tKp=@$@187t7O)-G&a733?yD=OWFa0 z?;+2TDG?lkEz07Suf9RNdDVWsk@1;q8Hk;e6Ok_mwuXIg4RUt(ZV$d{&a^Hr`?+gb zaQOqHq(S;pU0Yw;9uMEK0FIGD9~_2K?7>WuA@C?~*`_ooGRd|aGuyA=vKG0$rdkO1gmDxRcL+|6K< zG1d^ykS(b$gXvlfpls{k*;8SZ?DBp)`3_k=$+n!yheJDtE%k$UQC7$@Q8QfAHk+Pb zk}vxvDJ}ZzSoK1vRFhu6$Na()Hn6jebw$>s@_(*x{$*4Db<0o)ZWpRbOUZSFtSz&c zeFnjvS_%8S64b&O31a6a0XuIgYB^&lCtC_TT@khZ)8-=52of2>ab06b+>Jv8+64ud}1(Bw7GHIVJ zuBHs^h_mFHUt_i!#{;`3V@0Z{>-;Vn74wPf)Y8fWc$e#(ZKc-&ac3a*TTtL4XJKiq zTp!y(6U>FTae1_rY)+34zRA-il|87q!&oYUm3CER-;-VZHJ+>wo7@uI7fMIXqHNEQ zn>jP0ehNO=DXp?(Hoi0v+SMvr4gPA2Xkz7MhWQy0Z0PSqjo|p>Vh`BdXd*o`UM|<} zElOKUQG~IWHo8;?+o0o=B1J%ZMa{qBnD)I3lPJpTQJ=f@Mk&^;R?*C@`okm_f8A9` z*>9}oOTVpB(6gIHGD~h%-X#TNdSKok$SMi_Ke4>fTrigBEC_xCK>jVym2@Hbp`kt5 z?Q(?9Bp0AhN10s&r zVPUa6`-v*z)6v}JmQj)W5&R0I_hv+m1fPessl#DiFJ0CS_%AlO^W9bcSly!@SSgYn z8((xT*;T}6B$l^-{1hGD_<2w1Z>_5w&-Gtq6+RM|d6^mWbb1>Nz(S*|S1p44Tu;VX zU9S3g4Xi>k-|X#={VNc7J=V_Mjv?#4V3xk1T+eF)2*U-qCsvh&xGJc`#eyaACiDP{ zhYXK3lHr7ywqf~R^w06D`45>MesZsL#4SAd9BWkIEU`#6Kdz!P>$>|;IFlqE6w%g^ zK?E+Yb#CP!WrK}HAbn&wOfPmWcvT}Bhniqa{`yj4SA--TQil{`-mKD{LXQ1x@s4f((Xaq-L}s;) zh&)SpulTYp`iMQS{PKMfQPwd>mv9Wo)G6xQ_#B3@^ zW>32h>|l>K|da5#QWt@NO#H%OlH9VSdW5Kt(^(UqxLRb6VEY zQEoG<0HP<7{&IF}k^rrJu>ecdPV=p<5Qx`W?fE$fV`hC}BGD)$o8N|1bG}#j_~4L|SRD*a#_ycU z+vIcLMxE9t)0Rp`W4Mq`Y+c^0;!EbKyjrRo0P-$#mH|QG}2-P3_?%jn{!l_jbDfAhI zRRuwQ#}wriS(!Y7ppM< z_ykZBI+NTJ#Ql~QLJ*}rMNdxCC9*slCh_rL+AcfyfQUB*@O6bnYC|Ry##eJ0?jJg# zQ{}%`Kn?W>i>qDV#ruHR*-|~5-`>5Rb4(kUOGcPuIKsx95PQ}(@%$xCX_sfD9^tAG z89)*Wkj%QP%I{7nvC8=s#V&$4NTuI|8Xv$?bbyv5YMC zXbg5I?Q7J6QrU>Q!qa4 z6!DcxK(CBpOZjOd!S>(KT%`V+kk{K8f%jk`UFs67udMZV5fte{NA6MD8YLz3_k}{j zferGMZkld?Tdu+nA08ZQvs_nw-504Vy;uEld*F^&cbxzlmKwoC?|#0RO*TIp5}?f~ zlorr_%gDG81VAob=T9Oa_80akipf$j1K~1+XqbS;TAYrdyDX_HNE~?hsNT_zRA)jT z#D0V2-(so%ge0nC>VvTF1+9kaq$TO#^x7Z5Jb_uM18?Pzb_jk0&n_~Rd<{S^-Ff3A zf940-tM#S7V#A@CWB_UWZ#Vkec}JiYDF&e2emiI+~dUgkPInpSlLl51YHyNn; zBg$qo$YQ+7&7<*nm%U5o#W1} zmC#mjF#M@iL1zep^XkpZv$7KQ|2QjC`DcE`fMFZ5&|L6Y0QBGVd`hjL^pYXr0dsyF z0iK6X?N#@E(#LzT07jDj;@Buznyq_SK4Z|u{ieG2-hg=oOtjg5mD}vkHUgnB3;o)= zHi1A1lzAKlr~^JOkL+iIVTesOyhto3{1t05Bs zMZse|#<@4!Z{E><6|x?Kia>&X%2bwPK!0_aJP`)@`9B<*F?t z8`BUt1yBsU`74wTH)MaBlOkntee07k$$0k zVJaUPhg?VL7{R+vfNm!C4~(X_+FyBP$FS8UE%(-Ear7V7wA*))vwf+){9aBE5Ynyq zt;_Q!It@7P0`ueal6Xd<6n5$jjHyv~f}|Hy$I7c$GJYjBdcC|Be|JFrW?Ux+ z<2Zj2de>^&u z*%m0Hg73UpSb+_{^82*6Qd&r2A1wpSIX#yT&9Sr`c>jR zw~T)-ZcIvp*cl4NQc?>;Z>K)hRQa|y6JEA-KA2GZX($WK=5e2%usi?BxY;oVUU@O& zrZG~w`SbPfe4zqw@U|36k%oG+UaOF#LOY%Y!aRiVE|a3We(s&#r@VTx37!tA<9Z5Y6HIDkGh(`lJ=V|%4; zBOOjY2l|L2Q=C_Toly-^FX@9E_sTcch_&FhpJBUMpYD0u z($0q5;Tx51hId(oSuN**{vC{AgZrji|M>M+v7leafccO>zy5EWTBSn|c>=EdzV&L1 zWiNws1?GC`M-&g!L^_2SJ(?y}>`x8?K|n7rX&~#WO{r=pM`;c`Cy2Gx5@fa%7lG01 zxq;Ot%oEHnL@+%bXhy*{n{fhMTU3*gqNmOU#a!I&^2e>?Ndvt*J@m>?g5WCXE3((_ zbms?ePLQsDJxKN4jGy^(R!~^^;w4n;@AA(Uu-%z8S8pB%1`UQ#l&8tOB+VILFv6 zUN6_y?GB$a2Q9eh-KZ~yrn27& z_s~ZES(tz;`RN{Q0akTg2ZnNnG1d40!>`s{&X=XlT>Fut5fxa zwz0bI^tY0KyB?|A%dbr%w$Cj=F=2DjngY3YMYs2t&EE*+%N?Y6$|^&oA*44*uf9;R zdW=bgld$=R5=Biu0D>b_N+9NgqWLD^K-q5XPw@YN*jYacNy5lf1tjKT?q$>8Iv#t^ z%@QE?AnADJO5bl~E2K%r(z)Lmb$)jp?D6hj3x*i7oI3K_KmM)NbWS-vo(2u^+Ucbh zzVPlom_L#~B~(F$%|5CB$l{~e&s764d7`1;cZjLD$pGTxX{ZoPU6O zRTutVJ#e}p>?XqQ>c0DD#%eR=U*x2Ttbj~h0l1)Ef0s_ozS^#M{qEK#<2lpp1@lsW zTZ{XmJ(8CSVrP3ek#s0HFnoWyhF)8cP-NRJ`n?FA0ccwyo8EXLx`BZm7O2weLH#Z9r!Ola}hg z%*x(*Z%WP|7DXZ>i-xh@D;ga00CGpiCtUHu`UR z;RjD1=~G3~EnTO-c1jBtU4NI{d1I%pDQS|NmyEKri;}<-zeWU+-eN5()O(%x2~3Ls3g0Df z^~KSh%;O#*wD`%iX#}oa`f?JbJ|S$)tw=cJJy@@pGUC>SbLf_bL<%R^AO;{U8*KQH z_Bh!aF{~DSOL3QR0*>SuzE8s}A?eu7q`IxaQN=@TlgD&;pUi0f@v*1Pd2KZns+3vi z0clqsIrdI|$C|9;J>}4?cq#yP?rTa8IZiricC}EgUGfc`rz;5cZk`rc|?$Hlf(}mJc09 zM%{7?G{?w*eFzsJKP+UWkl&8UYOX?$q$ce{b0>@N-zbNn+x#GQPFqZUoN26{!Q#Uh zrEf6kJ^L4TE}l^kq(;SUQ2Zjnzs%0VbNMbLM`;Foaq9SnEyVT$=Db9*;XM^FvbTY= zFatYGYHFBbx3`HS#dcSXs)Q|<$7=A2S%qi^Uu^4b%tisOzd|GW+2wd9Q##j@$(*E$ zd{CZ=*1wn|$pQ&6uXg=#bVt$X&-)8JpVJagjqfS#oHK_X3@hz}ReRFR<4R;R<-(ZR zx|$0<$TZQX5q)k%wu^zWRDerI-97_tFZsNe6PBr!aMX3jFCM~~z{vx$RGSPOg_epB zZ-7rFR~m#h_M!ZGT(Cb{%O8lAf4+M>H3v(JG)a*lEQvvT+875vw2aNHS}{-A0rJT{ktwtJwKcb7j=TC$yG& z-|b9zLd#+Q+lOt1t*IerVIG$+Org{e44Y|NQ*zM92=ZExJz2nb^dT;5$8z6D=mnnp zgxU#Q?5?5d)N6iBUe|rSA;D@1%YsDvyJ)kdt=>owb7KZQ!W&-M2?$KqU#@mDZ28$^V+3dv8@|$3}J^;Ct<5uWSdgYOyHGq zuHh*vzc(zZH&z~hR9I^@O?!SniwPX>blcJ0v@1&v#g;=%AFf_dDT2wt4OS8lHG|a7 zfoGR<22?jT>RpJv4cbo%RC-iq|9S{PdXW^x>THebpHPVM=m#*rI#|-Zk2{t~Qcq;+=F}P3gSxAzIB;o-R`)?=CtVlyW5;(F5voR$T_Wl@!%IevG5KM zJNjvM6fY=$>sT8H}ZJ*8gYPBv5PSJNn}Em<=7R< z2|Wolo3WR_w(rtyP)E^Tb1wA0{SOTi+j`{|4DOi75x^Twa{zB|eyyPi@|j%7&?KSH zxQL9;FY|VSIW54Y1R|_+qK>I-2XeqP7>e57J{Ug$0+d3zzIOL?QUgq=?Sk4D<@Gfu-d1d2cr{^Q^Um`h`U%14>3hGhC;7 zw)E?$Hw$FbRe?sN+x!7fka#eYmK8+VkjC!S+fzdt=SQMFHKr}y;d1+b3^Lavzc`G8 z{6<iuT!T$|m^@PlK;VqC00Wevu3fc$08CpBE0T9!K zHLK8%d1MRkf1O#YyrI0FX3!a;f4Ms)L$nX5emI_0^WNdPF@VNi?|4Q29Q7q^kqT`Z zhD#4}1}iCFp{{$o%%D+XFQgIuwCqUy@!{=P492V6%krZwCb-ev{~= zM9f|`8aX0Q1?AoZTtgEbwWu_!oX&=f2%`w!6Icmi@(kY{y$C?PI&+s}0_(W(0ezJ6 zT#gFQ%@{T&-}N7X*qMLnWj2RGm@>XXb`veZX1Kp+0zES85c8rFso8@SzllAA`l7POV{0=g*osC_wAYH0HRnadS@yZP@oTROMXmqJfoW zx_8S?@G<4)4Wc->KuemATqmO);< z?nmEo#hG=!9#XOIUC;ZwpG95%n@ysb!O{dD#P7FAlI}E;em3b1?zLILmsuqi`Nyx% z`+ z@Y<3B!hUeUn~hKVQQFLqWH4|Jb%?A{Q1vnxgdVrS3H;`?gO<26BgE#&zi znlgj?7NCk!oZbr-?~w04AU`^bxB($5p|NlM))3b0!3^eqzQ%xMcZ&GlyPLYmLevc+ zBt#t2i2w*y5kMEw?j+UFTYl|Egeq@TkYs(s-!ZAMpLI*R?R+!;wZDqW_%<%;!J~BMcgZbh=G~8LIWS)M% z?esWYt&Lp+sIE+Ti*euOnA+4AC!TLfOf?cuS-(=>;ZaSpP5R9Lqg6}7QmIBl{hKzW z)(^Nde`FA8Zloq&S@n(731-guyNyk2Jp(8NfsigIzJW->&?0OyAO1CS=+X%${`skA zWYcbOu^A-NtES_K;ereS){(NtkL%7bvty&!wmT?qKntwfK79gT-RADmlplsC*iF&S<&wy*e5 zqnjScv!|n?qA1DT+}#vDlE6+En#|SBi}ogLC1ft}{vKM`*Z8T01}T<$Sl~ ze4eATU^-P-bpLHt{nW%+-UW!AOINNDTe3hodObus^O{?dB#|39RUhC(!EkjQ!BLre zv#bCdd$m$2@2PM5|et}06mo)>pX`vB@ zKy8>9+{A$VO%%_+1~3`o`-JArI+J9l-`Mn*n|l7DXOOQ!Tf5Zz%6~;zuPj}CWoa%V z$Icm9e=ryiw|DK;39&qS%mdemgS4m;tuCInDSs`!zvQa^hX4>pi{2v;f${rYKm%MK z?oKhE)Zf?@)u`#&t>xst-Rey`g!%DD!5?fMazwKRuA@O?Sn_PAOL=m3HTO(EXV6l7 z1dODaw|{DPshejOHMk>fQOWVH;WC!WBhE!jFhR?pgI3a!(528ylO$3Nq&EPLpp)^! zluR(1zUSx^9^By!i}>@qCx-{aay(ZT4)X6@!~%(N+>V;-b1;dE_o1~(0=H97M%BK# z@`M9g0EmP_x7M(P=&iq;`hvXnQ~9*&mq%&ce!ITibu{-Wfa7Iq`S?Ve(@w4A$b$?VzsR@@EZh@*?waM`HBT?oa$^^{eV+7L~=3 zAwJeQdtSS?l`A&J=>MXb2>h33g3RK_KU6hoX}W(W6;_dx7aow4>j*NMn&kwt*gToF z@ny+-vSkzWg~yj) z;;6i}o(!(n%D&q*xnekW&j(;NrL$k~Qr0!%>qwN-uwVAedac-}kFv5iGPlWSpMq2) z*&6Qw+GsHcnFn5Ce=Waeg1jZVN?%tp4KgJq-I!8-xFNh>e8E1IWyIzD2t)Nz||)uFLks6 z9-3QtNH5|lZ@=7{%E@4Do62**k6=pgK6y!g^h_raCu&uRQ0J?)Nkn-Ch>YQL=2D5} zK^mkzH{EjO$UH(#ku%vEB;Z+vwDk!ff9~XKh{hWk3rca)PiOXB(Ji-a>A2*&(c_AM z7+NFjg5vxRZniQ$JA*XJDuPTl=S>i)?Y6EJ>tuRv)>RwuheLbGJHFLaZ=xCFwIuXh za9BR}N!sW~hbRA6q{7oGeOXhG0SXdz1O6qQ0O`6BL!3chc;kfzc9T9gpvV|gjkM%+PzBbGrb_zX#ltHk}#1WAXjAa(}7Qf|bJ zN3%&TX3iE&(M)BzW-nRQ@J;3vW;L0{-uSoDkxuWwjr%{;5|P-F7*j}P9Uh}qD;dMR zkiA`sP`@8DZ@amh`jI<(53fdV>M`FZSiS2`jGy&z7R4MbZMQ2ocBvhS6uv^Ld}gc+ zna4~0xQD}Pt8+5sH%+;hhd%7LFilXE&M@g;XbDMqBIa6(%Il}st?{E1;=dzyxVSau zzeMHnDj@=r7|s5X)}yK9>w=D+Q)gTlh@FvZclqOHfu6TXG5uRmY5{6^a&534M&K^c zU3${FNm+eL_PR_8sSf*7xB0t?0AKUykSy$CSPA7O&-j-Q;#Oo5l zs-YAAttX`1tdm&$IL}xrwp5b9uRb4eS=_1wd>AgCD zQ0EvB635!q^UKyEmNR7r#GOYVxb{J9}zXTt%+T z3&lswc?ynH9+-$46MUFGj@!t$+Wpa&CTyLgHRANL|m|+$WLum_eb;q(^^_ zB0?vMkRLT0k{r}v(j0u5x-oL!+K`P%e0@s6@4Cpc7b^I^{{JkXVvb)l73_^xkYKBdB3+oBQ_!#D~LTW1VD zdKk0$P!X0^YXcH>N%o@W`hOq|y!@^cyU=b@+k9L~^}H6i?rqWBd}36h+LJTyr~Lxu z9&Yp}r2MtZ!2KkZQtoG}YFIZ_Qt!c0N0ASTwm5sUo@%a$k1^Tq6`NyN{I(JHftwnb zh6Td9b`x8MU;m7gNV5@qVqt}8(_C0*YhGyc8N(Vp(zkZkO)75MQhsY5S@PMydD&+E z4fk<^hEiY)t6v(<5$o*iF^SI-sWFbV2zclkSl{2V?$gdJ4tgQqa`9-!9xbXwY`&Ee zeUT`#v|_RuBbgm|AEm~z@}vkJt%pw|ZrZdQY2!>Ca*i>}O{2fc1PZ1Q7K3}WjvQk$ zSvmMF@o+OP`;QsV5uVpGbMFunH{Kio|)|jzOwB)P)CtE>9%fx`!eWcN>@3%CrT14{)%UFQe*$4Z^(tZmS6gDu- zOUn>(X1`lS;Hng$NG~LfM_KTR2nu^Mi}9(MMPok~co=N#=>%ZSUfFiwaAhrc$1Ya% z`qtb~XMLD`0o$(GjEf%UHY{y4En^I&FPfO$?*@;+F5YYHSX>(Y#LdSahBCX#3pXki zYAF-`n20smo*PgR3pKSd1+jB{bkD5P&fECpGgZBb^?TJ4hMY^HWT(YmLF${Dn$Fmm z$^FI0^_>OsF}EoGu)eNn&PvNVh^@7{YsplaY3b;->#*hna`MNFT9Nr{WR3sl1o(ft zs>;-C!M(gN81#Byc*B0#$FP6|_>~w|`()WEiZY=F6qA%O8>Wc(uYB+i)&Z$#gWWOz z&ANFMvgD`Est^=GSvcIT24d$V&y&EpNYi4~pNI%vrNVac32162wuZz8Wj&{S88Qh> zSL!)nPD-y>FQ5D6qVcb#{hiDN9rpJ2`E*0DNv)E8d7C1o%2fC?+$+?tQ0uLo9ewGPYuy?r-8k&pb< z`LU3Ca%NnjQN>I#*4f9sEt=jKRu)vA6Pq10Fdj|U{6Q@m_8C`x6>qyfXkDj9`<^e` zqBMS-@_WH%2zI89*B*F+FeTYTPRW9@&wulP|7la8L0x*kLa?X)k^h8kErUH3_X~{a zLAb&B3Uq(*A`Y1rrH&Q@4ea)%Y#&~b-Pm%M$!iOlU$E>c)!2tKZubd~NMW4KOkKF` zKiuE<^-+A6YZ2}DqSc;MOTX57t8_)T^MT8ZT)Kzcd7@6qiVDi2Uu1FxhYFpJV=NyT z&nQDUH8AiAWbzR&c)1Lz(T*81Bw@g=L@os^sE=57 z)hPA_TYN`$W&A5!+&eFOh~#rn*fNH4D}84IV!s6eDjsmFoFpu$)7xLLYG*PA`Kw>uYY_x^2mfR?ET zbFoQvbfhYOf3&zulRL_EESB{9;>O$UsO_4Z_qY2Vv}kLt`-mc^9o6{W?r3X`hM$kA zjzxhtec}61kW5NM2b59pk!trB=T$g{&Kgu|;h$kemh*>UX%=nCfeW7ZKaP%}+$|?3 zb8BjCrNG#d6p0}Kw5R-YcEGmrPmJmNHW*`?_XGC|jf_AyKequmq=KwBxL4QU>&~0IQfzE|WxG0eLnpxcEyfoFWS*jnk#tm? zBxI;-5K`)CCk*5idf!Vy{<@@_Atno-n;vESrD}-nBc){B zD{VH_B_gzjuk_=0x!>tb&kVU@l#d*GYAi@4C%D2|0=c}EN|arTK(qs*U;J)rt`pbw!YAAicwfEfe6n-v@B%KU9Z0sDq42V156OE z#shKqH^6F6+CXOXlj%&bq5_!PHIv1UR^31d#Lnn{=vGL>V_r?SpFn=|ei_q;+5V;j(LOV4_yFHrq{J$(+PqWg83- z9kbMHyvj<@z_ZFwzT@GQoYK>sRjn%dhNJ^d_0DzsIEDP3@0~_dvp16RkbO!bvO+`? zbYhugN{%nxxZ5}7btM`ce^B*PL#TfeL>U6Jom>ZR3WTeR)qAva+>{EphIsQ`WZOlf zsU%22>`c%J^$WFb6IMXxwH;-=9V>=UUIy}r@1oL9R2XnKl{X~#R{N-vRu4`S_6;t1 z_0VoAE2x3pA|n<>ORuphxR+lrd@y4(p4HJ!X=P)wyupaLwiCmesj`UVy5_7Qdrv^9 zrSyRZ`)dV#snCO)!7znMw|#Hp0sbTBut^Sm^M`+4R@)huG_L9iXQiF?=m}@c=-I*u zLl|%YO*Q1>ykz?O8 zVgVYP+WoJ?T@m*cnU4b(mT!<))1t-X(ck5pmA-cyN753)IsY*myVhvU-z_Olwyvx8C|71(;GX&YfJ7+)JypzYS4pFYa9wd0^LTDiT0Dnxvj{H_HoSppb)F>O35d4lqnPO9hdP)wml`<*d5CpZ_#a4)e5yh z`~3HBPT~HL)K!uOzy#_r@&&j_daGuB?0jAwd4LvLhf7ec-dH8Ds!pKA62g*ewLsu8T=n)?3*QzS#%2qi(2| zzYFUD>kDqm-t#Ojt%D)MJx--#Uh47LG@ykcWVsJA{N+`?L6>osb?2_g%x+!EIzmV<bTwb|pgOlIV z1^RF9b~Be=IrAm|I~qmuTju80@ZSo%*WZ$o%Ec3lu-xCj;SHtdcOjX##!^Hhj%GmY zT#po}zqdR?ctgrRLr~k5;$&}xz3fOVyqU{nPYFMzJ!qvAx4pk!{Y5o&m&W*>3?U)^ za8bKbZ7P^ucFRp8(<7VV{ zBRb1Jn;oa`wXG})t5Aqv?iUorFNj|-%QFWh0YgNv{aSB@L!@*I*CrKD$$2MWnPXuxkUTU3=R0!-qU?V1 zI7go?*4~dz%@5*1@<5Hak_S>;i1~BW{?^?jhcc7_4@-V^;hMTIbmkkr zGJyi`TYsx)FswwKt+mO8wT-BZ^>+X*EQ0XqS@98M7=??t?oB<<10#c}oNZb&0_>Fe z=X>jI0SGY`4>XHx$R{N{Yl9{Z=r(cN3z9?5*U^VED@m{zLU2h_Hsqrc*?STgTs`=T zPcTf3V8WpIY^tr7*R zc^NuADrZQD2Jgnh;ao7VC+rH+lDqfGrf$DA{B@Zu*Jif{q zJ?YpNsjXYO@lQIWp*?wMvqY8`3sqj!s!%=tlZPTAf|$&d*n*)@y~rtu{s<-uikFQ{ z=U?ae+2p>YdG)k~YpQ+AI5NzxXV6Gyny|j4Xh$C5P)`gSSu!v>?9bssF0hMlsNWQg ze7z*#Gv+dcsqksm1k)QO!}C>}VPHesLT zHNZ|?joTv`g|~d5qQF zUp@UnFwVu-m&AE+pc`xPV$81K@@JG)#^asW;pS3RNsy%_gT$#5t#aPOw!1s(POHL3 zDH28e{hFHuyd2SHlk!Tf^=F-Lw47>YS@Xhip=Q+r!>tF*&~**5Ixu{7YgS0o!8Ba zT!O)15vZI!(rpatLNQas4t764CLz$&e105Tz4fXGKrjMc1jQ|(u5~NiWh@4yq~yr0Z(1o+kZAIqmdUS z2^)qA4CKf1N>R{HitMYM`vI8>lr%}DkIHuOPK<(d~zA{oe1_>tR+Pc5n*E;_SoXO zK`;ez4e*=RzW;*jp9fWB5Of^t;W)LS*il1v&6gjWbm9Oa3V@w1kEr*~0Q*QJQ}5X+wxn^r$VYmyyU8Z76dTM0D**eHsIE3@m1GqGo|WsjAn# z$1DKuMG-FHD?*Y3VJ_#Xj8@n95n1jRE5S5J|j8nnF4r`*lWoo}(&@UFr6ee)(Ni)A%@6Myw zxlqpw?1>!kkHA~A(sT^xDTuhm3Vkb74;C0u76ZJ6t&xSEEWuKcm{7`=AJ#Tb`Mt%* zj?WPIU;2)Nfs^5!vDNm=&^|2ZYd^Pe>zNYdF%@n}${_r1v7XFzxx#WySQ z-R^8w;s%H7d-kUNWlSxV{mo26FpHv`6MH^iop;ZT=CI;@IqV#3>j!U7;+UrVjYO>; zh<3m`O1JNe^JL5kzR}Rh@x2j4YhvQ;*3G!CWF2w(E>!V;Fn8z@up%)3!Ouaq6vN$y zPr=L))FkDNSEjZdvw8`Mb9`l#B=IPyDq%0yY+KUE&n8N?DvH{7SYV9Jbpe zzmeGL_Lcc?gVYaJRb|MO%Md+2Y>gOgde`uDfi4cue`X)uR*Z;BqIXU$81gYmu~=?;jv`BbTu|oOvPGygg2ZZ$D_hebq>MuJYbAso_|WSx zJuI`|8`+LGrB9F5@g6_tps5prZ10G$S)lNg#Q7z~QpY|A?#}5^*Ig7O5~-X~ie>g< zhy~oeV~mt&?}e>71?`})6z3Z@GBgO9AC{9noUbyp1#sIHKLPp3_k#?vw!c*lew}{I zB;+z7jufWq7pG@4(}3%b$fuk(1Evv4Cefyk^|JBb)Pd^W^12PZTWCY(@G&0Ltec zntM=Usg1aaTFs2mD6&!f3Do71u=$cHap@u|S6;d0ULGy1O-i30Hnr1k5GSEjqRE2M z5Z)A1h4hBX)t=TZ7Mnamr~txNLkd*c4GNeRQ4JaoGMXgeGu-n@LDVu(w`MV0r-iC7w;NO(F^x%w?V*fJAtyz5846$D;618Id*3il-+3y#q@lx(;1blaFdj&%i9#auFvGc;i(blzgUy*t_1uyp5AN^YGb@wGi z6Nj-p+=f<(wrBZ?qaZIGKr&52Tvp!41bwNU?U*nHUKE2Ep=K52% z$62oS4RO-1~(&69R+nPI^xJqb8tz@m$Bduge=~1_V&AKZ}j<-+@(uK)2F5P!t&lO+n} zcGw!(GJ8FIcR$IRM9Es^G6!V9wRe=wPvjj=0lQ@M6N{Z=KvF+D!h%gV&QMo!wE2?z z`q3*foPOaSwv>;@QMTIrI53n0E{D9u_xD;eN>aQKQd<*$L-EPnpDbnQBV@$=nn9m+ z4=V@tp-1+u?1a%n3>1GnD0e7Pbm8XD6Q0HO&LVt8c6woY_!oJ4Y#;78cZW?MD995* z-9MtPy~LS&QjNdBM>^ZB-}RbNQVef_p4c1hCUrCbJ;c?6>tVlJkU_ujgGYh3Jp%&g z3l>X?Yb?!l$d1F#x4=Wx*JLfn8?HZG-{hNuCdqUU{6Rt1Y%v|FARPk_FG{}N?-_C_ z%7j2&<3vCta-K}-9;2UrNm(Mf$yOx&tO3pw?=wwmA} zNH94^vSj^e9S;AeF!8X9wTZ%>DfN%0=sF(cRF!cyfWl_rL1<@f{A6vb&+ViRf9Mr& z+&d4n)E27CW5<2sSh_qh%t0+dzb$@Z+;GYF6NgP(*;8CRQqy^(^Vv65!rCy2ppXi7 zaVT(@LB?T&?&$%$9QQ^~6ds3A+ae)>@B(= zs??^VEwgD1(#O?=F&R;C_}%sbSm_ningV?L!GRTeGUb(hW%FkynX#nY)eE~vqVm%m zhUN-ez=3kkF{lVQ`uRC31+vaLZ%lm1MjEOFaY94Dl2D!RJ_-d&8T60|lh)Gn$#-Z% ztR!@uw@`*o^M0&j>mY%O#P9rkG;|Y&=0x%HoG;@2j)t6%Im0G-AO^m$Eo*jEFYxT( zpb?v1{Qu0!nd!gT}MGC>$ z|NVLCM|W!2^X}assQ?`>a5X-hb^#>JPC#`Jo;jnFCVg~t>UOVFNjl!P*;VcqLc}59K9;a2K!FXCuqXznCV8F0Ex);z4EW+6xyph z$(xUEjs*Ot-giV`Mazq&He*17bn%%By=q)qF$xCZp<2qC8#TdEg*9LicJy|T7lT)-Ws?BLH|^1u78kk;r7`c4U*j> ze*cd0hkd^zfOztA!5;k#_j8vIQz06Cx$)Kxs8F?~pJMjm2Rt7p&Z;CrHQ7U~6NRZL z9#wHg{?v$aS2AcCGSTZ4VxqkTE+dD6s;D=H$1vO zB@|1X+DpB`)l0oVKUVfN;`_H}sqJi*i6{jn@ZRao)97Ll6mrT8_q#TJUR_1)IlfSl zVn3|XRURCEyv~@bVl#GTrkQG09izPdLJ9m?aD(XR4Kt!R@DbjIuI1v72&`Q27W*M{ zL+|69{{}U)&M7}Kz>NrlS8sZ1* z+Ioy6N`!9W^6YMpzE84{LJSm-@Q}AibINtV?eYuYX(IjYau+#w$^F5zc`7GXZOfh) z06WuB`@x+}7>XpUljjsY#6rhB%G7!E5-Y|LSB=J35`UNcRmZv!g~C^ogFUg~p<8=& zYnRYk<9r6!$k^E1vAwYnG!H!F3AZ5SU@DMx4SFKh?{{KZifwq&f7B@kt^GL-tAFF^ z9MsR0q%HT}-!M0LyHLHbZt(hiXk1CI0eFB!KlsOyi^E=+k#*^L`zIqmV9+QKD8eo+ zoXaN{vYre0P}zgwa<{U%pRer?dl!v^5<| zVEw#-9M{$qnaiRNMrKqk`cD4nN(h_!l?3m@#C0lqUHMNAvfx34{s-b@C@(@?WyIZ& z^V3a;afUei(+0BY7e1#~;4mtvYORI*v(4$r;vKoXEnegYQR1S#doARRv2c%1?=jB~ z2}5>dl5(2I{_vmSJ|O8AN}^`=EFo@Nj=qWF&JdbAl*F+{s4oKStPdmxt<#Axne4qW z@U3O9rbYh+96bO5#~{^s9#J1g5vTT;5S^~xxquK_GXztOj*|szsM=OMHZSpxM_dx# zGijWa-koY9+a`o{?z8KuT+u`Z>E^C z$2KObZBq2RJ|%heg+3fezoM<$uW~>^QTQKs0Q1;RlG@smeq{PZKwpX-E#y*M0l>uOB-NDJ-W~ zN^@~NSM=3t*Kw(~BCDtfl_nS(2v&`qo}gCx8Qt%EDaJN2$XEcT2Z6XY!++zrHp748 zxHd)obBI`dV(Q?mZ|{cD#bS)FAJUHRcriP>B0u3ra>r|zyzncy_9SDQGb!N4{U=fV zQF$J#C-F%Rr~3NiWYVzJhnxx2wj=r>DY1(JNhtw2`)UFj(Hn*I__%;7#13q8pT#kCTvyxX*Rr@P`REVNrv z-Sj6m$;(PyD3&TqxYHA>i`p#8wQh<`;$9OjESjGJl}Wy3@Abo{ z6%y3RRU?L;_7W3evQ35*j9d4{YesAKzWwe1d#9!w<>){3umQ_})#E(evjA2(zG=%3 z%YBzSq+bJ=g!(OvJlk_uKX4^}FC>S`QKa`Q_47Q$*q-(wj&y>OtrLOcMGqXS7bBmL z0B-=)6BqLMQHvZesGf4ta8QLM^q@JUX@~-+4YfJKZ$BD=Jv*bWpmxvHg9-p&At;;W zOr5*nxoxmU|F8x`)%hsFEdXn>Gdzmbe@a+EC9r}B;mz7-wP8(q8}u*(#TCT=WJSjuOA$S)HId|#NhHT>SQyMe1)LNtubX6|uwLuBm z!@t*4SuL=hvX6mF5cKc$tKn?_mOiL|NTBs5KKX?33*K@ZqT&6*<@_fs5g5!Mv!LBB z(Gtvy(rT>tOH^aKIi-8QNod4RfnX#?{&+M#j^*mt-jh%1wToFynsbJQDXIZ3G@3+H{*U{E40)#ar%>GG1_iYIB5506=> zE?`Qosz&hX=w)f%(ZvzkZLHmoShzPaHq2~P^c?LhX3(8LHEG-`m85A0h*xF9!8@#fOmW>&Jl;dIHdDO1wEN|WxOOvioM5Sws^hJ z|-r!|KCwj)l*?{;(opN=aJYL9Lg zbce6+fT7SmpPpU2ZMI%!rIRxoWnDUvwB{n9@ux!EyB06tb;o_P`C_E(&^#uhvVNCb zm>=D%?Hh0OY--vi#b8jusg$$*sn+)kVmku;KfkC}oQO*pUN{}^-2GZLhWe3r)E->@ z;zzfYp4&7jP{^hA=xCT&Zz!oGz(kdUCwk8K+E-Nb%n?sOYqXBan< zCBJO#LJVa8L>1qt+=_(0_C8THHATg-aa5lBOa@oFe7M)Fyd|p6Hs_lYu{;o^1P~DF z|0HRwsrD7oy*|*gPuMQoFY{Jfx|97EzLFRT0+uLQO;{LJbn^-3*{4aJ$mRJ5>7;iK zZF1eBzHOM!bZfA4q5^g80{zBVbmjMv2X-EDM;A*Ak^bCYZ)vJi=G=4c*Yy5rd&^O~ zGb6WSwb`%?mJyuJ)Xk}~-5dKOFMO$tq*^3eyTo2*swiWasaWBO0@=e`SXsE=1VODT zC@F8C{#~yQrS0PQx1^)8+Z=Oc)J*R`{3Z8WVuMz<@?uno4U&Dy8@kJ8oYbKL_Q{R! z)S{Nqkp;F^dI(CQ`r;emP1Ta?_a~dMO4FC@f{TeJcE-%LKB|1x;ydKE}hl|0PJ$n z|H?-G&m0W?7oQ;?bY$w@HR@R)*kQ^tC(8RBT$K4;?DY91VNqii(U&(2Sj)*e{Q^bh zPCQC4Js7^Qk$-6mj^O=$_P}}hx2@Fe1h!IE3%pba2soahzz>-Ju$9O|0>{OXsPNkh z0(Q3%HTS|Mmpgq}DqojiuYRs*@JNz={Q-6$i{s4Yx=`bkHLemrJQ~_4f7*U?gQ!E$ z*s?E&RWMV_J0;hkl8_fBv5@p^EgnwmT13_ugI}P;Haf(pY+YM1nG4Km` ziVEP7&WSJiOZ66EmK@{E{Ye{$D<9&?a-PpM%ptJq=aY%b{Syi1awp!NpH7Z~gDJ_| z`aW~PWY=;<+z^vLbYnF#1-$LwHaaO8Nw}C`SWf^5~WLZhV-6Bn)*vO&d&62!oT_6_A?iU zY+n6&GKeapjIjSb@2(|chu-}`(qpcQ$>fc2-aNTD@!**yTQk#u$g?@_BPcJ`y?zmU zsh0_p$cN|(WIDlBBRlF3@J~mj{s1*X5Gy&m26Sx`F7&nQ`!_eH@HXrLYF2!AR`gFq z-R(Cw9a@R*9of`B#o0u&>e#%VeMgY7>bqsc?B`33_siTg2!{lvxAF8U?Y%-;khiui zq}=_a4)Sy!U=2KATMMm7zOWwn$dDM!Lx^GI>PpMZ9Xi%qs41o{g{oq0#j%lkZH*ry zvUd(Iy^u6AxnEn!v5~MyCqvt(GthUyjAYgb6^8X@={hysy*8R_rvw@!K(-m*-4wO* z2H4q@6)^kku;5pamG1sK)V_(){ukpkAuF*&^)${?xm_cyVex0lNNlKLmwX|b*DuC& z(^kaUkKEoZs&XPIX%WW%$hVN(>SBGVsDNU<^v|bcc88xb(giESnq0Jas4}0I%geQ) zDZfliajsJ>oo!J71cXTJvEtNCvNQI=y!ruyferUCO1dZbwYRH#v9{W3ow=H7eZpBP zU0kOkb5BkZTqoZXj8_Kf=4HdLmAwBH==YH4B4$Hj@Js2-yXX&?zqXRd-mK}J;EfL5 z>)q*rDF6)yIin1|LLv@(5z^kX#AME~e4keFArzPx%zl>#foQxqkt#K2GJ zY*JA^h3RBhs2ixC`y-2A!wwk)uK>zk+G7~)xZrX4AUVuo4pI#vEdl6>%~Fyi@e@5z zJnoH8wF-tI@pi4Rm9`O8vU~e1!No0;T@JW6nZMTEtHt;lK6jq3NE7_n6L5!>tqN5m zA5ToJ3$TkD|DUmuXY*J1+7`5hpR*8CUZa!f)h856xMGG=s`(#z^n06pRuXW``gf|*ScHx2 z%lrS*U!?*qF5qPSZ5thBfNj+61eYM#Kly=?b$1pd+mr07im-}FQJ4HA!^Sq?PtE&P z__#SB)0iKM3b!b%3GpMpikQ?={OII|R_+;kZ8_RK^F8w+eok0x48y%#u1hP}YhY!+ z?lEK`al*wD%@*WN5rw3 zU;*HQn`K|&y=JECb&*p`{ruPq$N$l5#!xoz*DrE06i~tK22*C80qwT@{mbKb-&R>D z1(@TlHUCBJiTuqWz$9vhrCCsgbj4gi0LH+bb&nk%L$8jdGebiLjPBa9ZZJ~$bbn0! z;bvT_X8YXO(B$GUvQFE~wd5nWW6qRccGvApzm~~ylxoN;{KmI0J-c^?2ud%$SsY|Y zNi57<5PSS$A>|L@^)qLA)w2(yjfE>ltxTF#c4!`V8Z9#u`><3e3xJ&_QMAET7ik;l#*?3vxwVG)X|#XPq$=SgaiMNup69tpP5T=&7R%4atFv5GT$fQd<+?&BwW7zWcZ4Os7Ana% zIV-qmI35||AN&}Va421=`8qBES|l(_M*oIX1>jpvmZLc3QnB$Y?xqtv06Sf%|L2L= zv`{&yr=Z%&w#fA|34$bp{J|!-lg^~8FW|Ni5Qeu@=aRJC`^jfvA{e%n2AB#l_J6`( z!3|;x%*s?;$ug>_i{^%a^z*x^i5e3^ph`LcTz4TCYYibXyUy**MWB9UP~olF%>yUj z&4n*2OS-Q8rMyXlm0k9Hv5ydN_e*p4>I7jHr$>QP!s}RN$odmLno`Hts4ZMB@ZzXM zWR}?5={NHZMY2*i1iyCJL4FY{qv!dk6Re8Nv%2!u%!}1Da1O@)Ic)-a*XCC(rKB@~ zIM&-ON|>aCkyW7xbvQ7>i&cZvf~Z5GxI=oENUJNAch|6*d0!Rb{$F=S-Ws4lKg39k zm!^Z66_cQ@EIZ-gRV-I~%lDS{h@JNH3PW^O#-kAGu4QDuhXWnWB!|T)IX## zPs`BYe_0tQrgU$-1jqs&(&s(~I*SDCafDnE>g=F|Hj1Gj=@z9nX9=0txXnEwjeG=q zo!=&h>uvknDbL+2OSH_G=p=a9iDsjJb3JiKs=3rZSO!kC4a?fl@f~oy)UPpI+_t?bkEG z?^tDM`eV&ZpHZk}sf~=6p}h$6s`ZgDzoCSksWbNaLBT z)awUFyWwLhW$}VPDn>tQeh_hXh{#u_P^NmJ8$8}{sE)jsB03LKh*+kf3_j z^xm9%;|t%(OX0mhDk>LLI)mcb2m%{0WDx}DSb~C2bvgG893&S%UE&Ui^pIie05l{; z?}6qlCj61zmE08tfU7mASE^SN=`Kk?<}09C1+Y`QJ#@YO@aKx+oi8t+qo-Nc=8Abn zUyVBNFH4MT>XsNT@$fr+ey**Y5i^`4Xjgod=Usyack}(7w$YO9;Gt*+?aWGL{m5bj zyZEfdc&3h~-!*DpsNtl;Jc3l0;4lr z^dp7+$FUg7U=u57TmSaXMV&k?t%u;(I*sW`FU^yEB&PI6%!G*RI~;_34y)8#JJ%|?P$p@cpcT|y7rRzI3M0QG?c^4jx z1kPLLQa2zEs=Uj8#a&Wx{`4TfbA#bsECuH{As!V;0TKI?C$XRcUuQ{o9`pKvnMD;N z0kRZMV)Nx&^QW@)8bXSMm(N`!vw}}FBbnv{zxheT>K8?F1Suc76qiv^a@d1)6$Stm z57qb-dykiKMb>0I=m^x}5!FN*6v-6{8aRk-PfL-rW{;N7CHu``f`_@0W0mD*mZ@u& zrRyo4S)+n9CqGgNlqnXkfpW0t~ z-MsXmFXlj5C{vD$lQ4~A zvS#R9kzedY4HzN_aTsNjqo+cWDAVfSyDJ8dXKy+ZQ#^NNe7KKOkKKcX%--y^@w3qd`uQ~ogKQ+5~ z=4eH#P)Plzx$2wl3hnQgHfO2Y0(w?lts2HLX>We^sbum=+?ir2aN$kyieR98bMhla znPD*N!8>klS)Z4H4k59G$${#QAdjfGj%|@1{XXijK9y!G&qxP3|zvr&V0CkW+r87d$Vn{xPdG85cACG^Zy4Q zN7*TuRApu7fIA?3lErs?1_*2eHA)~39JmaAo{w404dwe<_&|Nx!eKm$--cMclAYpG zGX}g#AXT&XdK6 zHbh5?&?T^g(fjT!AQ?H~pqT=&GZmIP>yH~b0Imlk9HuYhE?eW6Pj(!beI%H@sg-8; z8UPmqsTJ*>hDGJ`cgK60hOgeW*h*CfPwZ^D>iZS0u_iA0-E~fmpvk(u^sa&8L5Yq5 za_UYr*-`Fgc}teXS)e2PRLa$%c2*8KT5ht-e)X9wqxX0dzn)%B{xlb-gyembo^{`W zB#I(eH;aMW0c2i_nv`^$qUd#!q!@v;&y~+_rId19_Nzw?V=4_tW0=NDpBk{{tO4xI zpK}f%LgyUzhnv;Ae9a3 zWsyUV(nZ{JwB#Of^Q4{A%-q)gF?R7Ntq^}=Iu)&xTpX-3eeW&Bau4P$={T6iG*i$F zSn-_F=`zj&&Xg@X4OLz(Ggkp)re|(;j6@VFe7A1L?6XN0zSp?FksZdlG2x1wF&(i0 zi<-=i>;0{7Gbw>;JhsN-%0cV)brY3t9LQ!p3h~T=bUuZo8J<^wqE3NKjZ*(oM7IcBzL0vo|1Jw)X9X4z%&z;r(; zk0&|&@RUg+IVHI8*}a)Hkkd;aQiYJ?;{`Xzn@7=~Yhv+eNW`|tW}Y{_mnqf0!W|9= zmZVO@)ub!U9%!Gtn2-6~z0I^(LZqLHi3K|4r8+=Q7*M$d|K@L2^?oW{=T@Yt@65A3 zbMxy>{j4v`ZTa|Zl@NS9d*kXjptEAmZ|WtYU^lpOuO^bGqM|w?H5=pd;0>S8?NN6% zhQt_Kuv+vzrNfiCc6AoSwHf~#$F&*%`^L2|cu1K~Mdln{5 zJsT_=$d&64kSkXQ^N=HHe8L8maxcFsawkYtxA=~{WUR~{qO5c^=^f0PcL^QcTVZuT z8ilK6jdJjiF@srO_T-&-oVU+Gk^O1^Pc6fO3c-(!17-qs504nYm;TIET~#oZ{c-<; zq*dhO;tc0#8u4dX^+e8bOhc`4^G8=Rm(K*fH{v2SZx(b5OD1tKBGlMA9%N14*a!CR z)5F7Y;D5h*k^3{(`M3Wam+o&LQ)ngdF*(YB!y^Ps|0n-@b#5^3`;B8s!OM2XS-YZl z4e+u(Vl>`*1bWu)W=X)RIZ%Rz*48{ImK$k$6bV?x3}2&Y;uxxmO>Xj-AEi8P@eO-4 zKhmUbuGfpQD7fWFetTVM3AcnFTM&>pyb3XWekFCzl4VQiKGPt3^TU*jBQS8nN8v2~ znKZl=zF-K+I-`U-!ohi!>8jY7S4@`Q@!6Qukzncf+Q6mKrEBP1$frXOwuu;`9q#29 z1CJw+Ei#?#@)1gb?(&f36D}pmHln6_&N2Ts@nI#kpcVqyR$1QHcekvFf_66unp?{m z9fO-V395IMBWx37G*j(E>_R>uWm%tglh*Q)7s;2YoJS7uVJWmay6w>AEnZDYb@4G= zm~qhy;#VBxlDk^=Bvln1zPOdCfd(@s* zUpDNs!2M=*V~8qo@TqD-vy;kFcTye?Hpou(8=?8hJed#6I$Z(~qCD#+y9tJ1B9)pSg%>6CghZ zN-qdD1}wu2ski!4Cf@o7+0=g93Q6t_5bBMuPCPuB2_{~VIma-Y1}HrOutqth^V2}skpHap6cZb|;Yh=iQ} zLSR09_i;m_L90Z_5B-+2CmA3E)o47(%-CYaq`d8&!l>HpHoXvvh-<6kSp@B-vl11+ z&NiU*=13@Mx}WYeEO$D|2rtsA+g-Z!;ZZ18uhkVaLDky@9^F~Yh}oLoQG#FAJoyD| zVq|sF_1nw5($gDB-vohdR7FvIQTR2#4~R)0&eQEygzVTS%s{)j;%4NeU+Q*Qdv|4B ze2eDvR`-a%PUzj%JlV|O+nidRpX>j8w&kGCT)PN(lOTiaXps z?8$E*m?F!=(=UfX8$8TG7(QU%DZyX7fV1|uT~Ffzc0IHbT>2L}&&ZmaYyCx#daf;C z_jbo|*(K6=-bEeHs+4(^zT2>&Gr+ju{r z55>t6&h$}*9YS$=uOKxAfej_f@t6b5&v7*vLjsQ5maIQ<4Bn1HflD>@qW>Wlf|3|sz3Up0`yIS%&0-XJNc2?Fn(>caBpaAU2{&ulCunAE#8xs+F~!u4+b z47;mk@X?=@F&N5L%t@?h(Hzl3ErE7!?(0m>uLO?vC zFeShbvgkMS1q)w!)|Xt^2Bk2NN9I} z>#CG>$8z_LE9dqv_)sL=_afvH!;pusb6ap@M zHON_xvF9D*rnvv2q=fA8*{n@>(H8cY8^t1WQ4>e=0jEZIs?4UEx$ z8W!{qA`}2SZ6n<@i^S-;#m~tby9`m0QOQbom*sEjz?&pV((uH_fVcjB_qA#1aQ;Fg zsSj2zaut^ZIy+Qb4?gYKi~brAtT}4qx*qSdKbaogj~D{Y5+HY9oy2%jsmSakn};THlkJ;j|5?mwWY+%byq8Vx}WQ!nSa%7=LLt){5Zr=nJM!#mb`JYk!O zjbVxkg#o^MQ0ykU_sfbJ5<}8r%{rv|XdY&L{N5<4o?K<{B6dJG>80I-Uw;lvH|UrU z`S!sjU)yYakntO%#l-&fYWbS!Ls1_&SI@{wv`~XaWAv1W>_#Me27)G>?^sHZ_0rguLkGVGWBIWkiPgrr+b`j1He=+e%j3y|fmeMB zK{F)Cc~i0sE~&e(AW!|Wz3f0ZT{ zy0}=i!M6OC_4oBNz-y~g&Ddk2 z@3Q42t=hd)oCx|&m6y(nbiD33u0hdGXH#Tz1QrQuOoI%~e?|j;UdswJoAJVsQ)?HI z0PIYlQCz#!xtS+m@MV4FkH-dfH5Ay*(!fy0#58 z#VCUBGPO0uvAvVLnW^5EBM-Gx1KH)@ti83quJQ5vkIz?v{Ozmol19~IxLzM@4BnQP z+wqat?(FR)YN$Tbz0C%JPVwxL4H;m3C@&ayxqC@$yv>8N@4+EIgs8NPRQLvyS9J6Mk}(dnM#9B@ohs&nkQs|CVg7_n_!{7;B&gT-^p|; zCZ3&-4s!1}nfg8ZUjFXOPh;`kbUQrTqO!U1atDj2TRb!|m(>R=UAi@>DKS5Ix%9{4 zx%)tS1a`@B(K)iq4f7dr{$nqK(*0gfNX=oLRwyo>ZJ{H~FgQPyZ(fPgifgUHn8Yx# z_%0^lZ;gyg#;o1nwsw3C=DL@-A)|XHMkOdBGyzBl*euBXvLskRU!N#iAywXuULBbH z{kZowbfrE0Ht3SjEM;w5mqxb*D@?xaL>v$%=i~iTg!Tk!Kmfdiy)0oJ!he$ z7*CU1I<~p?FPO>|E?>unMW2SDPEnu*BHO{+scr>0;djp+-?zN=;;}Q3_Z3aN-h+z! zWwgx-mtEQMtPBe{Uh~`fkenikU#(t#S+ih)peVNPk0$V8LoE48*g#?Y^o}$vUQt#0QYJyuhjn`0wyM;vF6&ENYg0!v~WywaqO zWxRFUHz}^>0jvH+NC>gISY`#D-zVt)g-6P^=+H6LCa^1CsI7g0jDKBgCLK@4!0yGAUv=-hH{>kEuwi#Lso#^f#K0Aq?xryQ|^W4C^oq2=! z^Wd(oyNscasgMc(SKn#u;(xXC!n-c%s(M64wH!TxVfowB1|ylXu_RBrWexv5vdw ze4o7E|M~9T@N%Yc&v!XXC7l8g_kbuRXTMq8423a3Bi&tn6S6QxIJ*|4aPKihD*54J zM&a5v&3M`=3^aF+KYH{u4c^?$H1jq{xC>pTdxlAq@HXS+EsD{0uOB6u^&%(^!gJG_ zcjA42IC7#<*T$>%sRegeBWcHzTA8|Hqf5o2{`tE!2_6CNnsk@%KavZWw3u1tPEcx> zU?MxHHITf&di(a*N0pt?y9-*7qqw!oPC^wwkM0e0$V@RlIOakbg+gc6mrjVYq8#%Gd?;&yJ5 zKeWPE#dx+HLhqL0wi-@PnmaS=DhCvmtv={IexV)>(yrYG(3F5W0^b)nV*ZdI9`sTt?1BR zL%pM8Bx*T$f?jD!Vr6v|JAHI{NW>0l!^vFbfsH>QHhTLrNbB+y zOa1dOu08|gX&-Np;5=PZpEazBiXTe zxaOkFt;YRZ>r_nLVjV zdE}w&Kjx8|f5*x%F<`9hz6u`bzu-~YzeP9s)RJgD8?WdvWP)(s>Dtq_bmHl_R!$~G zb!%^C(WtVAYsl%avSe2aV?kZKI8#Sk^`htsW|ABu`UI0!!9#>KOa~pE17~_pE&{X` z!d%(m+5Mq@Z2~KfYha&H`*qCHauR68mIt2t1-=U#RCs_v=Z=4zFp`#5{4(Htz~Bd5 z&S&VKKXCwG53@hNQw@)~fKwITMaExbStFG&)aV*?hlwOZAt!`f(%O2vFj#{-Y~?<6rU=^b_>065ergKfflJBP}jz^br6X zz;{SrY*H45aL*maLUwl{7*#0j;`&T2EZSuX)Xo4ExGfm}C_?a-accjQz~gLv-E@=G z@1MBI@UC^b=adxd-sKuT(6SmRDaf`PPds!|)=-;D3rI6e9ZEF}@AMd|7Rrim9;kW5 zJx99r=>3C`wY8M+R8elN=CV#8gpaTWlt5rV09~Nk^MfU;Uv#BmN*hN-18Q;SpE%zA zJQ^@R{&{H1cB}VkvyhJqCt4;|Ux)(DSiO?|BNqLA^aGE`%+VH^Zok1JbIHjXo9}5a z>nBIvJ*>N2OJ(dJpnc-_h3SmL!BuTlhFTn`q?N`-AxaQRTR+^2zZC7~dUm18_XeML z?C$Um9~7BOsub!yN0m3ZH6ikxB**6AU>hV3$rkA!S~@*vL(pVZpGrh>K z-F$`4J)7_S;=KkH1hq5U4u!-gp}87Ti*iC!%LLlA!hA+YN@*(yzxQ{c%(2~??+XIHJGHaWK%MJy)o(D63@ zw&qfFyXKj>!hgOVbZ)VG+Hr+aXwWTt?AgraDJQcJK?a%=Ussr=B4>b*uju7r*hMO? zUH|6qRXcr<{v{lUkMuh4piFzmd$E-(m}4iyu3Pys$*suo9)_z1(%l|KK7Ab=MpF8UR!Tp6_UR-=h`MH~s?sN~~Ujo9h=0Oug&?>l{erenL z>p5uKD@@zDK3~`*z`FQV>l|xd>DV95gcBRlq=|N*<~4j%`t2?VABxd3j%kXfbb04J zgTp4&;E1AW%Eq7daJa)q$tk88Q=WSwrt4-_`afb4ocS$gaP=$i69mkSn}us9H^S>v ziM7GKVM>YTprs83LOrqzDOS_CquVfH7EF|d*{;R4Vypg5BOF9lOBucs${1|EQZ%p1 zP|Vxr8}%q>!&!`>HeU)SsRhO}wIrHlb!TQI(hd(d;eil;1?GlJ4LJ5^)>EKNQdvO! z(f*1cwgKhRmk^CmuizO?wis4;GR6V#!*B55AC~vz#F{U z|C*-%ueYLk2h(ld3<2Nlk(m8E0u+i_SLm>E zPww+OXIiIBb8}~pjk=VXE9)S}u>3T|j-aO%J{*yoXYsv$!+ko6!AG8}8+AXnUQG~- zX(asgSee3}W7$n3gZ8ej7h>ADOu&d4!6|}h*3uEu$xM%~AU3hXv5^#%@t*p=9GO?* zH}H<#R0O zh2vSYp`%^2He8$A`TbA8uI*c z`L2hc(<#q&6?CH&1QXf4zOJVa+Erd5K!6cOZOMP*13CC%0y@7CC%e%{^4kGq3quy& zIl_a8=BWwrVuJtTWSX_u7^Cueu_7z&YZe*EQ$!FWxBQ-xTU5u?Gc%X>GGokWTB z$-9EhEB!?Y_Or}f8iw*a0hg^#Q*n}X`#ZI8pg z?8H`jntw^NkZ$=ltSe3t7g{#>{NwP8MFK1)nuQ&12Es9+pIQ7ZLv6eu572{1tuPIlnf|DwLZpG^QlSuZF&$lH^EWdI z5Slf==Tc?mi!G#PaF8E~#emuwbrH;dGC!rM4F`qFp|Z^`pZ(T-`4JOUhMfGm4TzEd z{f8!K>^wLHr#F8MEAWD_-0yke+5_4+S?qeUJ?dvXUW1R>{$JKDK4;`w%sroep=}W0 z6jyCA>>Dk%@aLl&h5PjI2j%EURc=X^Hv?4)lZ3LKa}ErH=79^XM7{+eq)c%j$l2N1 zqkdMvl#@B()zKEplA-@e8q4yv$$C&bQ{4*j0Mkm9(dbPIi^;}ND!+9c=)P;*&ytH) z3QItxPV(5}M68QvxYwfH$DZ0?tL_uqe8vz-mr)@`Lkf>{Y2FA9w5*$hDGB1U^`N)2 zun`8{K4-hJB#JZvPR@wI%DTrc%I+Ss^|%k@9&`nyh+?JCV(uR8M7{LBL$7<>?{F1* zbwt;tF&NX}!{X~QiB!qa5yUVGanZt40e+10XxUq2PqEFnc>f_}Zzo!nK|#!~ThAEO z&YY$#QS4t?Q}ns4=Sqmh{)6dZP8K+}M_q8>~# zbvTR4YJy$APkOu85?v8-AYaY*#Rh#iuFe6Bh5x)#|6w9p0A8ij^3!4qrx#B582_?! zvUoJ)-R}j#lb}e~)Zob82 zIt-IHeL?LkGDc3BUvP11r9b;L>M6K`$qW-vlaUOKqrR!Gyt&$+Yq3mU@(hY~5x$)4 zQm!-=bK@1}J$Dm|W6UkwGD~DHGXk(KtJv(%QKs=0m>3dlD95qtodfbj^UuBb82PcKPPrnu*JnbIiJ z+&K-o7y9F`!HK9<**<8(1m}Zq{hik{%Uq??%nVE9jmtsptcxAdpkWQ8r6G<{43Q7i z+s#Hg;~&~OYn)?~GzBN4uRKt|KF*gnEFBFQndGd>eC`_cSkAwbACai_^Xu6hrfN!` zA~lbNDx(TzHQoKfhG)qTCYe6wa;E~kb@HY65o4JvJq=XDJkNVy_*tlDZUtcLXF)$F z%2iV!jzEG!D-{fYk^e3La;l~O6Sa1F`AG%-nE0EymLMW<1z`LGzbRbe3qkE{tKi%e zgiYE#xjwUlomjCkca6=t{a7`{$#bsK;ht2E_U)KDqW95$?BHe4&z4{ zmZz8L)K&;u;S1tdz$0x;I`z8ZiG164XC)-Ln+B`Ysc;*tB6BDeDoR0HX-s2|>0^EUrX0H^HVy&kTmH|* zZyK1SD-DxV7E+41W!^{jDC^{_87;GY2KogJQp5koxmuwLuu7c0-7Jyg-bw zL(>?q$cN+bk;a^P@DfG57c2YFtVIF{7w zDooTo7MSUNqShu*joFC=F^2*{8eoS|hZcr75_Wg3cUQpF*?S6mF1Bh)8u_Cu6C$&a z-P0h)6d%cRU@!AejA6XYbDpP{>jZ4z`(XCJetGjOCx}GCvt5x?vo^b=rB`o`=Rh_Z zOq}W2J;r-yo!do5x&5u{Qk5odl6klg%bWCzUoA&*&)=$@Gd-bme*1Ny@QSDY%wAU}N05*Yd-=2o5*95h* zH-cOEwcj2)UqQD+6AUtbRf&gqOO6oOmQ}C4fiMp zrySP1Bet!+5zaY7SRkwy@1SzRJI_18G7z2UTxTi)V#qQmjKIDRDuwnp#l2r%lk@ZS z*1DJ#(cE|Fov5)wHwN?z|853LW^@-IpL2uSDQ=>LK7eSmJR&$1XhAdE{k$ub$m!Mk zZmc20S=S%&Erbzu)6A6Hz7nwGT{%oMedft1t8f~h;@AX~YUnwusGhGqfl26x9 zEd_fAw_kJM_>+iW3m!xW#iUP*Yt-u{+;db!yI-6yUQnei+^MR6<0y z5~ZtsH=I%xQ}1u(uYdW?nAkoqw8AkFeN40nUiP;_X}{-!jW^Q|(zuv#BdXUNs=A#8 zSjPT5{T0=%OqH>nKQim2>i^`c14rZ9)v0wM<0lyKa}}Vfl{83f`nGj>Cz04MkZz@X zdq?zbfm_m6mg$zx!fo3p3yO6yS0fM6*8(>@vpsCT90b7I%&&5!m}%bcEL3lJVeb{V zz#~MMv1qzf>ZYld<0a%$CX(l*pjl|k?&mi1Rq3R9cD~{;GfzR$FRa1lSa8t#_2(4R z!#n}SJ64xtfYiR9nZpmc;h6AxK|r5O5np{iG2EzDA(E|{i5pI7y{a)$p>L-9`lFu6 zs6aJjrL)*tqJ9n3F6s5(ye^ir>Yh6Vgox+imRtGhi*jof z*&0g26;pGfN)uF(p#C?H16(F-9Se6;WkSD9IpAOy&}Rkx1j>LE$fJZn_Ws^Gpl|yt zR+5w62V>>_8QAXsmPbi;dFlTnkJ4ygn@nT!bB8@xGTU65Z$Sa>GW==g1WjhBL-so$ z7s;e5b^L_v4lBiZ5$FJ_4gp-<^_N(&qb^6}O*_8A zHg0P?k!6ncGVEduL>M7fNr=teVjnk}CFAqU;Rs0JV%u=PVM>=cI!uzXp}WY&xkGhX zx04R&nPZNtUgIN1mNh{8GRr;5!15F-Vr&yn&9lVsn~beN5h4jteZLdeuH0wg5~ZF7 zX7?%SCxu`((Z2~uOfUdrCc;MyX}|qbb`RkZL*fa0N9k}AmLWEeYul{=I5>H z`1r}Tt?F}kV%`Y@Yz08-cPNs#6`HmoAtiVm#N-`{LWw4_JEOS7&~$<;6b`m#Wc;0X zcy=<^3tQ7kZwl^M~awjy{{ey^tVNT5;I3nrzdeS7b<^ztiaFIcJXC?b%+yFDVc5cX1bL2HN12DYP+6jaQ{{8${wJ3cL*(Q$rs9EcXufMx_ z=sbBa9S)8sn9->@>^xZjM)N1_P#!x4d4r_lh6)ZvUOk`ywKLAYQR{)2q=7)O0xdBp z-|Ihj)jsSJQ_+V0#v@vwqkrx|3Zh0S(;kAPy#WACQdHBGW~tPTR;CQ^BcXWrb^SPO zVK$b4tdHl{O6f*{ieOsc=e&%wNHn?baI~Y$W~$7P07@e7ty;30k!1cWKKl5zSHTSFfunVREz)! zebq#B|LiT%XNDH@*MTP=Q}0}bbLl7GeIeT!_ns2-uf|!%WMzZ#>jtwVWFHEl%doScz)=Qo|P9yP*4}WNg1IM0cZBGnh;W)Xq#C>~p@^ zI46Jn)%!&KC>|Jz%^!buYZgvUNLoj3bDAogM+kbOY&&EhPmByG zb$d8fbaNCATVRc)i~gDKxa#Hqj+QrTzgS=>%ucx&ZOV|8zWai3N%VVxI7G~qEFGcb z9&5ekO`zOfRsyuN-6g}M?b6-wW_!K1GzfJiE&gTu0uCa4{ISCz3C(|f*Ngqbww?On zE!@x01=v!zTP4)K+uAcF+|XJYemPcIz`32#8A8(B|4ro#*UBPD@Qg$AUSy}5LRfch zwSW{^Ko|l+DryTsdAeo4`*_=l^UK!^@klQV^|dle!6Y8rMa0lN%}LaK+Sv7h{ks%z z&c2K0;fGEc-D7}t=}nfo6y8~UL$KEi-I;anM|+;tysh_ku9qKMA?;Of_^ar)8(njM> zCPU%@#U0Lv@2v=%x)?r|2Xx5t;rn%W5F$Y~9u(BhCI>}A%014at?m#u`?y*GcdG`J zT=$o@=f4<-PujBkV11gtzTtQCM>PF-3=VyKqcdv5JIoNDD zJN<~3;EWI`Jblr=&8LKiPk(a)H#)0?GNJmk1TEuIY0r~0HCb{idt<4cd*_dMI1wS-EbacJ ztTVI zmK!nJqMh|19&(2ot&QetTyNnX;fp%hOiPP@N6d@PkJyCJP6!eFah)YJF+v<{6fmP} z)lAV}J|I~9N#C=M$8_0F5f|f~i;ULpFr-qD(Lwb3H~|+|nI92<#Q03hP z?-l~1BRJHXIzkFesVM}Y-VA6R2vlSPm-t%r6PhvN4l$fVeFcz$7VkAaj9#@q5U~M~ zA}p>%Ql>(HD`jvhI6HI7W8PAPQ89MaoZ;Fr=WL>V;2W)o@{e;gfg!@sh0ifx3%uTP za+SY625XOtFT`Cqp*7*K-AgoeELzj=mTT;cQIH&&7HHQ1wNu5QHO(H|wNT#Ltsxrs zcgJ^$KUshkcB-ld{J8z$&pw=CGa9v7z(kj77qVi@!COKQOU^Q?|9ypr^YJ|e9_pLD zoMHXXx1IZ*RF6B7)UGgk_anj+$?1c%{BhU4wu2diqf1>{zm$J}H&mg_@9Wa?SYvIn z05avk$t5cI7F7#tS&TtfjMBHjI9N~vHZ3p_eC#rR`7i&uJFMwz@AUnFYDYEO@p#CX zghq}z^NT93mCTD7>WoXD9`!ovv{9PeCKiQO<^N(br+j4cDUk6n{W+SS&#YqFkbp1y z&U5weKzKqbBRmNR1nvb;Ff??l9M0}e)mCIwl+W!1Lf%W0@Z6Wp1x6%ag?&8V24^D+JX+QRkP%m}+6&ui)QwTJ9zuS&vl8#J z4msUhs@7si88lR+lx+9lj$7v@{1mq2gL7oLtYqCMdWG*FO0dkg)>Dv)B3^-@MfR1!d+Y#MKQ)$v+p{P z$F%Fpf{!QV$k1-`0HqBYZ$Rj5RbE=Y zwiBogKYPAuMFMP&xv8d^0=tAP`m3ZjrcYY`C=xn;rlw)C2*rEw5Z#3bJH~t94(THT z8DEC!+#pZ_4ZRY>M``XO^bN96Y2EC{#wo_-2M0FFm64%n_60(brmgKZoCT7vULj$w} z-Pgp4@kzfP@qv)ov{@S(0^lwlZ|{Dn`tg`6IpkT9_fYbqkXj(%5uO;q`v5p~>K&p5 z!m0z~c^cri*qFV5_mzQ#$3U~q+nqmA&TcPvR-?J>)MSWIdFI5=Rb?j&fxbt(ZWQ<0 ztT&gy0ZnXl`VQagxw*CdjkzyR?~iQy1x{v#d_=ntcF_S+txXRpgE&arSFWSMdP`t^ z0%e1E9Om|6vtmu!2K}7BQ78?;Mt;=Y+8yJeN6emo6hn=|<)C#ASPb{%k(F3ciSbfe ztF$dSF<*#jZ1L6X9u+|z$PG6%Z0W_ZOOuubSy(r(M{>T)8d)br)VcL4x<^@TgTTY& zJ7kT3&nxsj-8nP`+lqoK_VngPJd2(#L$L8sHcWlNLS>lY! zchxx)`l}G7qb^W8GsPTpbL%Nzb?7kxz*IsbKCDoV1TP+m(dm0ZfnxVr8wa!t^YePSdDA-t z5rvUIj79!r@m}BP2dq>W^n|Ex{Q_JavG;`;olEi z!XXjrkYDCv1Zdd+ZH3Md_4#q&)8sQ=8eRC;@Z)0o11h$-wvonLoGxwE)n;_uhmG*#9h{ z7`%xegP_7E3SH)H0SsVlgdH5}y}UrzqfbJ))FuZMPbuYGmBYBd-VZN> z6n)XYU2f(KjfoJw*To$nfE+t!UwrU_)6>Q_$0%%5?^{){3Po+xM~S`5JW4i*`Uv!w z{bNhgmxX^8h&%N3d4H!%Qq?Q1a}eNt!HZmm5W994Tt|On-Np$kevX+iIWD3aVbD4L z`E|z|^Xmv;91s>gIb>LC=-?1#u6!1416ym=cDYzI4cod5BBVyA zBjo+BV~d~)+xSKurz-2QW_!+MKbn3@$$n?bqz&O3U5ztwO8axRe_ z1j&2tp6AUMrCV;d%SFZJ1H}lsUxC`$vj(&)CdVGU1E&Iu5v2y~svoNt_;?BAuZ6_t zu-3Qoi?!vpuBPmUb>JEf0Q}{iW9jI*WWo+{!TT}wJr6^l5pWBsk{KKiZncn*-5z?- zY&0`;c47!;Mz2ZA_|vlX>DiFrLgb!vk&+o;vw_7@{%D_NNHdnmYJQRmLineyVYd(Q6tQ+&z@ZI^c2@=eR34zXCQceD`klJL5kbMdS!ywHBo4mgkm}u}1 z_KaWAnQ6*etf>F_-JbuwKHnEE%}4OQ6}r`Z@2N3(%a9oz08pgHMF$ZtKn(>g_sT&C z^%DS+OdLT2frwsc$!-96vmonA{XYDqBzmnVmYiw3-kI5lm|;*&3j8E`MhT~&y7(0p zJ_IPg2enhtpYMYC&me%X1pJDH1mT9zv(79SjRyWIS?2Yssw3 zksMG!^#SrHc-g4I3@@ndd9oL%orXV*7}j-G2y+kLat?AU0{Z@W04=fvnF(mgLrN51 zw1us=hOPS!E>*Zig`YBaeRrI$)L8<_`y<{ht|K{1Tqp#rXzs@uhB4$ zfA%S$JC`2du+fu_7q^edaGn5&(R%+VHQL5c6dOr@KZ*UmA+XahB_5L)GNXL=-wQT( zxyM^l%zyFo4jj}j{p!DYzv=&vClcAIjYFQOE*AWKi@|j-#>l|^roY*O-hb~iajjAU z;ARszuKopE(5-!~<6)7)uhf2};SnJQMX5YMJfp_$;$>=3iVze@Ngs-?L0;7!(dfO^ z8e8$6i0zqqY-KuZT4jTWG+m_D_@#f8SjTa|)yjfnk=i@YRh;|sfwo#CyAI^{_;B1| zfHI(C2ykOU41Al=(M5V;n*jkor$U#L7a+Ng-fQdA9~MAeP}HMp%O063;Y9Gf)7M)X zCS7_DSDZ#Y-8}z-^TFKq2G=!A1f~jziGOlHRl*u1zcyZ3jDdO;f&`N_G=`50r$EDYj_lJI6lazXd}ESDQ}{~ zzl#m)+^PNuvj2is#K4#0yM1&ifuDI^y9!~sS2=0ipqRxoI6@1O&^XcMBerz3Jc`#a zJyYGCWKkryKmUMQlyW?HLtg3E1Zro%)#MN2d{boKG%Fp?YfhVg;=KPWd;6X)yt%9# zEJUw2%i@nmLizq0#v;#ryH^}ri1Ky(DdbjLl)eiyGx zoQ~bIf{dS=!^tZ6uw=sSx4X{%7_rO%6Yx9TT!^u*-NTgQq{8s?uv^d_uuVd@u&t*h zPODurW2BoR| zLLO6K{m?tv1}*bD<`dJFz2EGA7K+S_SVi{JF@08oY$;aYZ{||5nZz2JW(4$i>(UCG zDf<6v4_d$6wI_B9!?@j(R@^`L`}zCP>!}^H^KzBz`W)WZVaQRvoTccVsicg118IhD zKUoG3zA6CULgF@D5xA!0u>I5Q$E0}$_;>_rSK$0l$7(QbC=S+-RBS@h@<|sEBI%aX z#l>-?@&u{q5FT_0vUN57DSKqu*e!hPo52z!wZ2)p&;ZwplC0aeR>LM7-x#y9DS`cy zy7hg@J z_fH><+er&T`}q@|2;=SHzL3G6PDffXma~8{15x`n(`|G;KMDErm-z>Z8<6YN6<-L| zdhu=@iT=b>Sm6ZXF52bC>bp=C7hrHCfoi7XYMrgXoGiyhxHe3httqnvO|xT`Ei+5WR@ zb|N8~r)OtsrvPLnZ;B;DZ+a!ek-y#((R-yv0U>xa@|U9$ic0!K>6PF0DZ|tJdkDvj z)Qi(bhnt2U6<>vu6u))7K&ihU7dhpPmTGOB6+_qwM zASO-rPwMU|`d#kxvEpzO)R=uB(wbYlK?jyMnk!p{p$%zzwY8-`gYhy+nDnqGOOdY6 z(z(7DMyMG5O#+TR9r+0}L*C*NzECu6p$c0o)o|wYqvv%)PA4??!GTbx||cRr5cY(7}Y+++Nki_ zMLg5b^J6l+Vpu|R}SzP=4z$P`F9asbY@KAK#AYVj}A9U*h#Lwp7G~_gMAU9T2_YR-4Q61gG%3#$mms)EZu{HAREZT=DIRw>D6(Bok$4L zG+DOBn^l3zTQ_HfKM0Fwr=b>46`($q663{52{nI2rWr6SB6<76F@&IYidn}Z(xhSr zuytZoKDE2XC&(P6+)^el==S?pGe;Sx)h<%mrrqXzQY4swf%kX3WDLagBz(7BB{pWT zgY}J94ZqHs2#-UQcMHyb{+01gf@<8la<#s-Y*A*)eBmUio%S~W?`rQYQD%`r7th$8 zvEAFafCWxoV9J4hfg(1RhA>S*BVywrm>rsw(QD4QtK%W8WNqu#puISiZ}+)E*XfpO z_1D=)mnVP})vU5`rZnR(e#wLpSNTt4-db^OJC=_CkE}?b1niy6Ed;6OA-Y$N4n#e~LGN0rYrGU+`cU9-u@N>okg{9r zzgHy9@h8>za$gF{LF8=f={8n*!gE|ESN9FzY^&L%zwM}yoiz-`NGhEj&iL+M%fnp0~^BNOT=WX_wSg+)yTh#udb$7jcy0gBTiKSkkp;o59Ac-okg}#3^$|p@Qkt7uW76G)F zfh9xW#^|)w_KKgT?@Z>eEwHTjrQ(5Kp>rK!$=9jix$KFaN`mY}T^7sqLQ>)2d8dB0 z2a}^tiRn>#R&kY`?G{+Sw2zdkpL;&q1sV+%{apkVoWifcEB*~zgGP&SUd#heLZ&F& zEZkwEyCgDlIl$gYXeAhwRRMh2K9HmWaR+|^z@vxyMsAKEbF>fKrJvU8sa%1u;@Sku zjT}Gimt3NiAI2D8KuT0yFZjUM!hCb0wDEze+nTT+asv?7`at0Pg$Z_3z2Wmz-^QUy z9*w_ZrWdMUJyap+T}9)TTV2xSJ|9i`?}Hy@n7y`&KcZKYl2~0E<0zh;BL1p`=o>wr zmm_YARyeu?t6@Q&Z8sGe1;$M7Sm)pSA*M9Ou=`TN@Q^|&p?WR z@8atC$Br*wMmc|1RApL>A}H*X6X~}=;~(z7e(SA{eRS%Kp%Uh8#I`(*o}YWgl?`gA zbsD?K*e^TYXj{&H)O)qq`7-_x_`XOP5#hdCKilF$xX%WieXYQehz$R#c?El=EwYkp z4z6>fulI+dT{<4aq# zS(uOT&@b(UtC-IhT^vMTOLkAmykb~ZDJ~CcrzNl%2$Jn|4M3c5D@0DFnEQoy{eb~Z$Y=dq+eO;23uRoA>wMK%7lDkqyLi?Vg zijQ^htt^YW&GDP9G=38ZVVJr_cfI$OINhv}>zyIMp*rMDV|?gomWN7)E(oZ;Jh>#k zmmU=Qyn&yGqnp~zF)Jp36A_=PIvcTg-ZFhPc&ffJk zUUg%*sKT;m_^IE=1&cN3g;^u+$lCS=@CWl8K*THv@`Gg*F=yZ)Qv?67o)9(7j z4}_IFqJb~ZE9nxs2bulfy3;566wu>tXK-ZLDS)->0Xduh^BDR66-3$70qG7Z>JI!7 zKpLQ-?)cuC?%K`;C_vFv067ZY1DK?LmZ(jvAg`00vPg8Jrz_xv;3ZQcbuLEqFJ=q# z_t4>hXsz@D7f21noBvb!@>kQSD*p7^8W8cIJ%Ddy>$@mwn zH6JXM`J>SeAr-vW$Vdh%HOJf4kUpwWZekR(NTnjNvLaOLbT{vE zk%F9jfeO`pE9|@zTGse8?SayvXz!=ctd7jcK&pvU@Vqk}Q;i*OS>P+11~A1w?QyYo ztcwt46L{L2@a>njHZ*ul_G;#{x4Xi}>>6N=Rb~3~C~0Q1H+V%a;ZCdp1f*h81!vWc zJ{o6I?<1;U>G!=m<0-`_kaSwqYDG`KW`E*Hx}{9ac4+{C`bOs;hhdqjn5->%pFEo2 zTS+o}{=jdr*-yl8E5M_?ybX;%dB?>`;xD+$Wz@VwVW#Dmp6HHF*vRO}ZTv;=`S2<> zn1?jOb3IXs6x7aKd&!7iJ^UnM^7IL5O$olvTRqU_A(D|Fl*>`nAbLAQ>V*^QrwEY{@Ut)S=Fi3nCwl=*rTUjY?X?HvvD*BG+QA=~DReOSGc!Mw z=;$*(urgoW2l+~FUZvt4lzRTsLLFdh_&#AT+!|h@!}CI!A6efbgZ&yAnwGKY>L4Kw zBpxr<*8W{oV18$!Rqu}6Zp;(DCYY{0wv#ulr z)SMpy>R!sm3*b>)MoJE!o#>BO^?CAcM}AmS{wY=cT$;u*-Dpbgobb2q*aO@BBZ&`q zzw`y(8{uiZ#+VY-GJ@J!{T?#lG;%DKgx<5$b2+&6(Nq}OK4@)8ojZ4$0L8RblR{np**cHD%UudAt|q;MrwBdCG7 zQuJpNEyt_ZO1<7EOKGz=v*;?UtzWE{DK#4nUWPd^aPIGzTi3*WD(e3A>&ss4Y5T1q z!X*YfoA+wp3Y%Ql&NV9!-(aj{W}fU$CTIRs&m5H`u9vfvzKQJ(6u*ASbYvr}af-2T zG`;a$T2MN#Jj}D?^7bI{&5;Ymg}4P>(1x20V{IqvAZ5y>Jc24{GvEbu>=_hApD{X? zm2#>fKH{d^b8YzT8*tHv@6owx!fWh`1Qqo)sS>Cm`r$p#@~7CBM+?@i#{0i}4KXfZ zB4F!a42@i|SoS;ePz((`ZF|b@4_j@<&RHo+AoX2{DS9 zXl>;Oz&Dclj73CUxF1OW!V!boZ#n$mjgf!FPaFa8MlYE}<+f0VHgJcTLbXD`ynJew zI8pyfI&Alb1!s|1lX7ToZFcss35*B&^upZzbp>+@$$NeIM&B zyMhH1uf#E`02A#bxIUMn5#P)M8d>z5`ZWHS)aoT3_Nbq0#=gxEz=DT^ ziyo%725q)qdo?>Nu79n{QZ{gMdRs>pqn`D$ts)^sZgTA{}4T3+Lqz4$EzI_ z<>28T`tCGn_>!RR&6aarv|;hTB~JdMF2uj3<6WlWfuNaceHjb8M=T({1pLx*zmGLy z(%Q9zC9L;L&<~DOJV+@_vnbenI84!FQ}=)4c#!=j@o$yF9P4%pUxPD$;Lrdm7z2GcAvb zWm>j^)?}h2I)(U~a8;c(aTGBaij+6|c2}mWt)iP~{RFIeMly-*>N3;KxV$-Tf(f!- zqLw;0QIn-A)3mkn)G49~#~(|kKCHcJ@H{e13jX-IRE62DlaoC_X%nm~py?R!tOoI! zIBm6ydle<8i<8E>9jrx1U|?Wn4;FUiJ^oiO9@m|R4kJbrKe&iRYxH@4`GMF2wbNjK zaHXk|KmVoQ_mjILA7vSSxFbwOkW6nr=(<_zY z4xn~gx~m1JROy&|jQu-PJ-Fof;Xk8EjcsB4o;7oJWx-i`zlJS?ahNw)0Rz7x2bc1p z1e;o{eWrkrv8j$@p*=6x_8~Ul{%9eXPVV81dTU8u>xiw)WE8q7IWDOxCAWwz6O0>t zraWv|f-x3$?2e{AdD*=IUJNc5Uo3wh_?tS zDHo5ZCAzSD^Dp3NeV!`^qBp?oPVX(V)C82MUkWe|Z&jv_iJ zH_B`a#T8?85fuY138e%5%0vPyQgL7{2FxQo3<~+y6DLvaVKe%HMWk=@$q^T2*xhpD zVhv%}J#$~i`xSHu+&re;*k4md)lr=H14PwsFiU=z$nL$k9pV4e+jU1Zm2Gb;Z+_y4eK(QoRpwJl^)*m)hP#$X(_#v2huq`uhD4flOK~Q zL)3N|Ghn;u>Yx;dkYV`RmuY5JF?(V-asI2`#4^vav9g3|J9X= z$RID{ob}jvN*Qz<2O07nt@qb8>&-}`7Gr;1r4RbUD8>cL1F0HN=(DJ8WuA)~`ntE` zRFaH5V}di%v_)=Ron*AJDKmUZvd}|CwiUp3I4MW$gywqh>GrlPRVeR5>uoFpc~IT@ zW89!^87%9X<}%ZfI*hQGd4g2pK7Bn$tapxhoXo+e891l5@_k}ubUFSd#F?MoTRI%g zL4`b3`(ga#Z&!xV9vf!wQMr`3lS%k`$lf4#_~9Ngf)*i#sEBiF#K!3Ci*6ii5J$G9 z<}xV74_gTibBgQE_2{xu-!7vw6=A_ic%bS7Z|KsUOt^>aFyhCLjaN|^S$fJ6`GB6+Qth)X-WuLofcWhcnP^t~T>5POazcfmB7ZKDXU>?A3WOqDk%>kKQNn(86ywnzQSYcIxMjR3F}6N%h4RfJFf6HN9ya>S?MD@ zXurCbheQ|k;CCLsf^4`pm}75ipW9+Ck&UhMP$@N5avN{?pv)Pav6Nbq#vrI_bQrDn^HRDTX*4*=rotbo{Oze_^9tX8BAd@nfT#Fr}&0=d!86zJ3>FES{HdxHDnaj z`6ocg-MVZ8%ktBc2$ckaUtPyO$hHylElq#E?&b87bsL@tx!=(QxMbRJ@%l&FmN#-tvy@n0xJov&mr$xgtMHJal7amEM~-IFP*63#s`ti zSl6w~zS>oig4Evo0MROZLAqN#l+ZP2+BD5pv*c3I;nRn`W!jn^CCuY8L1jAlGG9yG zzd%KiV2Me`D6d%kXCVyfF&s#$F%h|z4#c9NuYm!S!7R+24C4zGO?joZ+l${u+F_ag zE=At+XmaZ<9f;s*CJAa)wsnNy$#0qi9JuO)a+nA=VWiYsn8l-ZHiD6%W>bu%z$Zw$U-`B9@fv}WSh%xOukMQgnSFGZ=CFWYpJ@w;}>>MkFY5&rq+F}9hP=YDT% z`xVY+)qno|)~5)o1_L&!C$I^ZJ)A74OGyGz%dDv}mH1A?%-TTT`RT3o&w&?2K%I^e z240$CCs2;^NT#SHEPwuXQ>&kWQZUCQUG40ge7(kRrlsIj{O#m|+{c=YX=@es)PtDq zy`6j!(z6kts(=U)*GA%Vlal@LPep9{rEbVR+Mo0=(&vom@qozbi(Q8*nHC=JyU*PnNYn(kVRsm@ zvb=pViES>>YeYmy+1&lM-iz#;zQPD@Ua*}+E(D(v@SV3IijSjW>g_Q)IAc#(#%-N` zspoL7l2gyokD;&xJ~@Hl-xB2XoVgF070upgk1S9Fw)025{qr^09N&=vPTI1X17+)FsZ#6B>Q$e3t1qVoNsGG)x7bjF!1r49OG4fT{| zunqr;o(8^-wDjwPjl z_IE2|)|%NN-+Q-lF@dw+6~~3ne$^sxKQ3Sk^=ul+&hcI21H0G4&PRo`x3E=4+#D9H z%q`WNzgO|OYTfB9CZlQpFPoe}`|-LVY@-KF3$9#sb;|M2o!(UM>?*Flr{-<)Q_$HK zcLk;s8uZB?mUTuxAcjRDvsI9$C40~>Ti5H5a==@>!e^;!giGD%%mbmxfj!Ahk{)!ZiPw%J#vI)Zngv41(%_>XYFRk zTDy^hkITNiC*PFo@rtdmxDoM_0NTK$(P;MJvk)#Zmkc)(PM+h|3@56}4N`{Pib2`Dgxbi1-WT4Bv6yW-?{2#?(@gq!pqbOK_%_ZX zuzrneCDLYZbr7>k#O%D!%!R;`IW4X6_uNl)S6dq2)9yD=ckuSG%nX&FClQW-kCC^s zMXok4f?Rgs{O880!2`Ha$HU)`GfMCecQZ>Gi!dQyqfEW&%#;>j%D&LBD-bWs*OI=s zEoUFU2`?s`c~NzTrH=Py$VnDwmM6Re0$H`H?n}wXsWQo2XTN)OWLo=vIT0b%0*l<< zFQ#_?e}FChH-P?!w%?d{+zDPll{k?bzP93X!N0f}q;5ouraG!s!B zV956v%V1;7_SlQIaT@iRUpru1%7{D4ZyUv-&`nBgEH>Npn~;c6pL(1$kNDuOgvd*u(S~4f8ucKIHLCGVfJg;*Ha^1-k*tK)7j%}DnRuYknt`tx8_aeszgX6xS{69l zVc5<^o(M3yWAb|IT$UaiITm=1-P*O!&Co2qd+tQR6p0K76zCd zLMRY7O8TqkgoC5JY-kvBcZi8~&kjsb&F-zR6{;Pj~Jyu$i^pUpWcJrJJRPNWjN z-S+~TxHrN_bor_!uUw>tJfv_e$IuXvkQ|FHkC!a7*G2dHcPJx3ZAP-~w8Obp+dHNA zJQ{%l{YlJ|3n@L^QQgc>8yz81@n--nf=7#A_K^3ls4x6iH5DXu0z z)KI33Y^$uIr^u}oOab7cg{oQZ7?j!pU3jEP2bokha@_7kJvl&vX9^6gwmZx*a`zHL z5lxh+^m_+Kd-RdYBpnRQW+rm6(uQ1s7V!bN&%-FJco7Q3Zt(H8*U@)Btn}Fp=XiT6 zbX^)Opg|-rCjrqOUdWD^x8DH4K)70xQNqA>;XV={M=g+Huc^_OA4Y5IcT*VB`_R%% z$GEg~vNU!?Aa1M{IJgY6bT!lrO-Ao=VQT^7CJ(Jz@Recl=*?5Yg*$i+OBxi-ULHUx zwy`eGEk01$D3{!!az*vqdM1vjF+FHx3{%0=qY~H;9o~%`a?~%FLjK&sIEGYCQFN22 zNjB&_Zr9PU9K;mLx%~F7ycC5oh+i6cf+RR8d3EVSDtOf2W9m;&{ijAX$eY)k|DeYM z(z)W>SQKNzdlY11hl08gH%2Cc=A8iWG2`0R%0Re`@l@&;ttNCWjaU{LR97yIvS=*X z61k$u+}2cdbQ=HxavWwcn@Yjt+@%b1Mk{&E(n-d` z%Q>uaQpU!7mMAGB zB)IRQK!sQ#&;lZ|?V}Y2(U(+{Fb3`(w+aZ>aw7ei;KabEApwc0{Ux@|JmCn$tBHw; zfn@BcyHb`mrss6;m=3d7Oq|m|H{zj zkC65jepz4@SZtYB$sE3=%Ln09sVG8*D&a1Ku={lHNQ5@No*?mK*JBsm`m0d@4< zuyRM}&EuyY)GIdm13~RXR=4Wz65DDj0d0?gmWGJglBW&o31qv{;TKIyL3Ne50~2Ui z_EyvCJqg(DHzLiBvy;YBe$51Xv%>yux=R9ffDa1)0)9GpAaVAp@ouL3hp6}81;SOLlb^`YY!`KA1K57*(*Go$>0X?e n7?71@P`R@x>7eMDKd;G}pKeYV|{@;48 literal 0 HcmV?d00001 diff --git a/frontend/src/common/media.js b/frontend/src/common/media.js index e8a1560b8..79bc9c209 100644 --- a/frontend/src/common/media.js +++ b/frontend/src/common/media.js @@ -38,6 +38,7 @@ export const FormatWebmAv1 = "webm_av1"; export const FormatMkvAv1 = "mkv_av1"; export const FormatTheora = "ogg"; export const FormatWebp = "webp"; +export const FormatM2TS = "m2t"; // Image file formats: export const FormatJpeg = "jpg"; diff --git a/frontend/src/common/util.js b/frontend/src/common/util.js index 98b115eba..2ff98f66e 100644 --- a/frontend/src/common/util.js +++ b/frontend/src/common/util.js @@ -423,8 +423,9 @@ export default class $util { return "Matroska Multimedia Container"; case "mts": return "Advanced Video Coding High Definition (AVCHD)"; + case "m2t": case "m2ts": - return "Blu-ray MPEG-2 Transport Stream"; + return "MPEG-2 Transport Stream (M2TS)"; case "webp": return "Google WebP"; case media.FormatWebm: @@ -524,6 +525,8 @@ export default class $util { case media.CodecVp09: case media.FormatVp9: return "VP9"; + case media.FormatM2TS: + return "M2TS"; case "extended webp": case media.FormatWebp: return "WebP"; @@ -578,6 +581,9 @@ export default class $util { return "Extended WebP"; case "webm": return "Google WebM"; + case "m2t": + case "m2ts": + return "MPEG-2 Transport Stream (M2TS)"; case "mpeg": return "Moving Picture Experts Group (MPEG)"; case "mjpg": diff --git a/go.mod b/go.mod index 72670b65a..23a71053e 100644 --- a/go.mod +++ b/go.mod @@ -13,9 +13,9 @@ require ( github.com/dustin/go-humanize v1.0.1 github.com/esimov/pigo v1.4.6 github.com/gin-contrib/gzip v1.2.3 - github.com/gin-gonic/gin v1.10.0 - github.com/golang/geo v0.0.0-20250509130527-0a13e5a5d53d - github.com/google/open-location-code/go v0.0.0-20250415120251-fa6d7f9d4765 + github.com/gin-gonic/gin v1.10.1 + github.com/golang/geo v0.0.0-20250606134707-e8fe6a72b492 + github.com/google/open-location-code/go v0.0.0-20250523152404-3cf9f806af4d github.com/gorilla/websocket v1.5.3 github.com/gosimple/slug v1.15.0 github.com/jinzhu/gorm v1.9.16 @@ -24,7 +24,7 @@ require ( github.com/karrick/godirwalk v1.17.0 github.com/klauspost/cpuid/v2 v2.2.10 github.com/leandro-lugaresi/hub v1.1.1 - github.com/leonelquinteros/gotext v1.7.1 + github.com/leonelquinteros/gotext v1.7.2 github.com/lib/pq v1.10.9 // indirect github.com/lucasb-eyer/go-colorful v1.2.0 github.com/mandykoh/prism v0.35.3 @@ -40,15 +40,15 @@ require ( github.com/tidwall/gjson v1.18.0 github.com/ulule/deepcopier v0.0.0-20200430083143-45decc6639b6 go4.org v0.0.0-20230225012048-214862532bf5 // indirect - golang.org/x/crypto v0.38.0 - golang.org/x/net v0.40.0 + golang.org/x/crypto v0.39.0 + golang.org/x/net v0.41.0 gonum.org/v1/gonum v0.16.0 gopkg.in/yaml.v2 v2.4.0 ) require ( github.com/go-xmlfmt/xmlfmt v1.1.3 // indirect - golang.org/x/image v0.27.0 + golang.org/x/image v0.28.0 ) require github.com/olekukonko/tablewriter v0.0.5 @@ -60,34 +60,34 @@ require github.com/chzyer/readline v1.5.1 // indirect require github.com/gabriel-vasile/mimetype v1.4.9 require ( - golang.org/x/sync v0.14.0 - golang.org/x/time v0.11.0 + golang.org/x/sync v0.15.0 + golang.org/x/time v0.12.0 ) require github.com/go-ldap/ldap/v3 v3.4.11 require ( github.com/prometheus/client_golang v1.22.0 - github.com/prometheus/common v0.63.0 + github.com/prometheus/common v0.64.0 ) require github.com/dustinkirkland/golang-petname v0.0.0-20240428194347-eebcea082ee0 -require golang.org/x/text v0.25.0 +require golang.org/x/text v0.26.0 require ( github.com/IGLOU-EU/go-wildcard v1.0.3 github.com/davidbyttow/govips/v2 v2.16.0 - github.com/go-co-op/gocron/v2 v2.16.1 - github.com/pquerna/otp v1.4.0 + github.com/go-co-op/gocron/v2 v2.16.2 + github.com/pquerna/otp v1.5.0 github.com/robfig/cron/v3 v3.0.1 github.com/swaggo/files v1.0.1 github.com/swaggo/gin-swagger v1.6.0 github.com/ugjka/go-tz/v2 v2.2.6 github.com/urfave/cli/v2 v2.27.6 github.com/wamuir/graft v0.10.0 - github.com/zitadel/oidc/v3 v3.38.1 - golang.org/x/mod v0.24.0 + github.com/zitadel/oidc/v3 v3.39.0 + golang.org/x/mod v0.25.0 golang.org/x/sys v0.33.0 ) @@ -132,7 +132,7 @@ require ( github.com/muhlemmer/gu v0.3.1 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/prometheus/client_model v0.6.1 // indirect + github.com/prometheus/client_model v0.6.2 // indirect github.com/prometheus/procfs v0.16.0 // indirect github.com/rivo/uniseg v0.4.7 // indirect github.com/rogpeppe/go-internal v1.14.1 // indirect @@ -140,7 +140,7 @@ require ( github.com/swaggo/swag v1.16.4 // indirect github.com/tidwall/match v1.1.1 // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect - github.com/ugorji/go/codec v1.2.12 // indirect + github.com/ugorji/go/codec v1.2.14 // indirect github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 // indirect github.com/zitadel/logging v0.6.2 // indirect github.com/zitadel/schema v1.3.1 // indirect @@ -148,20 +148,20 @@ require ( go.opentelemetry.io/otel v1.35.0 // indirect go.opentelemetry.io/otel/metric v1.35.0 // indirect go.opentelemetry.io/otel/trace v1.35.0 // indirect - golang.org/x/oauth2 v0.29.0 // indirect - golang.org/x/tools v0.31.0 // indirect + golang.org/x/oauth2 v0.30.0 // indirect + golang.org/x/tools v0.33.0 // indirect google.golang.org/protobuf v1.36.6 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) require ( github.com/abema/go-mp4 v1.4.1 - github.com/bytedance/sonic v1.13.2 // indirect + github.com/bytedance/sonic v1.13.3 // indirect github.com/go-errors/errors v1.5.1 // indirect github.com/go-playground/validator/v10 v10.26.0 // indirect github.com/pelletier/go-toml/v2 v2.2.4 // indirect github.com/sunfish-shogi/bufseekio v0.1.0 - golang.org/x/arch v0.16.0 // indirect + golang.org/x/arch v0.18.0 // indirect ) require ( diff --git a/go.sum b/go.sum index cba1da377..511ae8dae 100644 --- a/go.sum +++ b/go.sum @@ -38,8 +38,8 @@ github.com/bmatcuk/doublestar/v4 v4.8.1/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTS github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= github.com/boombuler/barcode v1.0.2 h1:79yrbttoZrLGkL/oOI8hBrUKucwOL0oOjUgEguGMcJ4= github.com/boombuler/barcode v1.0.2/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= -github.com/bytedance/sonic v1.13.2 h1:8/H1FempDZqC4VqjptGo14QQlJx8VdZJegxs6wwfqpQ= -github.com/bytedance/sonic v1.13.2/go.mod h1:o68xyaF9u2gvVBuGHPlUVCy+ZfmNNO5ETf1+KgkJhz4= +github.com/bytedance/sonic v1.13.3 h1:MS8gmaH16Gtirygw7jV91pDCN33NyMrPbN7qiYhEsF0= +github.com/bytedance/sonic v1.13.3/go.mod h1:o68xyaF9u2gvVBuGHPlUVCy+ZfmNNO5ETf1+KgkJhz4= github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= github.com/bytedance/sonic/loader v0.2.4 h1:ZWCw4stuXUsn1/+zQDqeE7JKP+QO47tz7QCNan80NzY= github.com/bytedance/sonic/loader v0.2.4/go.mod h1:N8A3vUdtUebEY2/VQC0MyhYeKUFosQU6FxH2JmUe6VI= @@ -127,14 +127,14 @@ github.com/gin-contrib/gzip v1.2.3 h1:dAhT722RuEG330ce2agAs75z7yB+NKvX/ZM1r8w0u2 github.com/gin-contrib/gzip v1.2.3/go.mod h1:ad72i4Bzmaypk8M762gNXa2wkxxjbz0icRNnuLJ9a/c= github.com/gin-contrib/sse v1.1.0 h1:n0w2GMuUpWDVp7qSpvze6fAu9iRxJY4Hmj6AmBOU05w= github.com/gin-contrib/sse v1.1.0/go.mod h1:hxRZ5gVpWMT7Z0B0gSNYqqsSCNIJMjzvm6fqCz9vjwM= -github.com/gin-gonic/gin v1.10.0 h1:nTuyha1TYqgedzytsKYqna+DfLos46nTv2ygFy86HFU= -github.com/gin-gonic/gin v1.10.0/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y= +github.com/gin-gonic/gin v1.10.1 h1:T0ujvqyCSqRopADpgPgiTT63DUQVSfojyME59Ei63pQ= +github.com/gin-gonic/gin v1.10.1/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y= github.com/go-asn1-ber/asn1-ber v1.5.8-0.20250403174932-29230038a667 h1:BP4M0CvQ4S3TGls2FvczZtj5Re/2ZzkV9VwqPHH/3Bo= github.com/go-asn1-ber/asn1-ber v1.5.8-0.20250403174932-29230038a667/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0= github.com/go-chi/chi/v5 v5.2.1 h1:KOIHODQj58PmL80G2Eak4WdvUzjSJSm0vG72crDCqb8= github.com/go-chi/chi/v5 v5.2.1/go.mod h1:L2yAIGWB3H+phAw1NxKwWM+7eUH/lU8pOMm5hHcoops= -github.com/go-co-op/gocron/v2 v2.16.1 h1:ux/5zxVRveCaCuTtNI3DiOk581KC1KpJbpJFYUEVYwo= -github.com/go-co-op/gocron/v2 v2.16.1/go.mod h1:opexeOFy5BplhsKdA7bzY9zeYih8I8/WNJ4arTIFPVc= +github.com/go-co-op/gocron/v2 v2.16.2 h1:r08P663ikXiulLT9XaabkLypL/W9MoCIbqgQoAutyX4= +github.com/go-co-op/gocron/v2 v2.16.2/go.mod h1:4YTLGCCAH75A5RlQ6q+h+VacO7CgjkgP0EJ+BEOXRSI= github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= github.com/go-errors/errors v1.0.2/go.mod h1:psDX2osz5VnTOnFWbDeWwS7yejl+uV3FEWEp4lssFEs= github.com/go-errors/errors v1.1.1/go.mod h1:psDX2osz5VnTOnFWbDeWwS7yejl+uV3FEWEp4lssFEs= @@ -182,8 +182,8 @@ github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGw github.com/golang/geo v0.0.0-20190916061304-5b978397cfec/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= github.com/golang/geo v0.0.0-20200319012246-673a6f80352d/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= github.com/golang/geo v0.0.0-20210211234256-740aa86cb551/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= -github.com/golang/geo v0.0.0-20250509130527-0a13e5a5d53d h1:744gh8J7sbiKoLDyb4KMKj7DCiA2+vDVjb/nKGiv6yE= -github.com/golang/geo v0.0.0-20250509130527-0a13e5a5d53d/go.mod h1:Vaw7L5b+xa3Rj4/pRtrQkymn3lSBRB/NAEdbF9YEVLA= +github.com/golang/geo v0.0.0-20250606134707-e8fe6a72b492 h1:8mHyM6CCmj/DQAhHXJVTgdkg/6hAH71N7qGEF+t4Bzg= +github.com/golang/geo v0.0.0-20250606134707-e8fe6a72b492/go.mod h1:Vaw7L5b+xa3Rj4/pRtrQkymn3lSBRB/NAEdbF9YEVLA= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -209,8 +209,8 @@ github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/ github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/open-location-code/go v0.0.0-20250415120251-fa6d7f9d4765 h1:/Xn4RiCibwInR8cebnpm/muVubIUBbQcMIovW3omkQE= -github.com/google/open-location-code/go v0.0.0-20250415120251-fa6d7f9d4765/go.mod h1:eJfRN6aj+kR/rnua/rw9jAgYhqoMHldQkdTi+sePRKk= +github.com/google/open-location-code/go v0.0.0-20250523152404-3cf9f806af4d h1:Vsgdb0N5xlbjgshQmoprjFB+noSo0mioy4Xdl4rk3fg= +github.com/google/open-location-code/go v0.0.0-20250523152404-3cf9f806af4d/go.mod h1:eJfRN6aj+kR/rnua/rw9jAgYhqoMHldQkdTi+sePRKk= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= @@ -286,8 +286,8 @@ github.com/leandro-lugaresi/hub v1.1.1 h1:zqp0HzFvj4HtqjMBXM2QF17o6PNmR8MJOChgeK github.com/leandro-lugaresi/hub v1.1.1/go.mod h1:XEFWanhHv6Rt3XlteHMxuNDYi8dJcpJjodpqkU+BtIo= github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= -github.com/leonelquinteros/gotext v1.7.1 h1:/JNPeE3lY5JeVYv2+KBpz39994W3W9fmZCGq3eO9Ri8= -github.com/leonelquinteros/gotext v1.7.1/go.mod h1:I0WoFDn9u2D3VbPnnDPT8mzZu0iSXG8iih+AH2fHHqg= +github.com/leonelquinteros/gotext v1.7.2 h1:bDPndU8nt+/kRo1m4l/1OXiiy2v7Z7dfPQ9+YP7G1Mc= +github.com/leonelquinteros/gotext v1.7.2/go.mod h1:9/haCkm5P7Jay1sxKDGJ5WIg4zkz8oZKw4ekNpALob8= github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= @@ -337,15 +337,15 @@ github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0 github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/pquerna/otp v1.4.0 h1:wZvl1TIVxKRThZIBiwOOHOGP/1+nZyWBil9Y2XNEDzg= -github.com/pquerna/otp v1.4.0/go.mod h1:dkJfzwRKNiegxyNb54X/3fLwhCynbMspSyWKnvi1AEg= +github.com/pquerna/otp v1.5.0 h1:NMMR+WrmaqXU4EzdGJEE1aUUI0AMRzsp96fFFWNPwxs= +github.com/pquerna/otp v1.5.0/go.mod h1:dkJfzwRKNiegxyNb54X/3fLwhCynbMspSyWKnvi1AEg= github.com/prometheus/client_golang v1.22.0 h1:rb93p9lokFEsctTys46VnV1kLCDpVZ0a/Y92Vm0Zc6Q= github.com/prometheus/client_golang v1.22.0/go.mod h1:R7ljNsLXhuQXYZYtw6GAE9AZg8Y7vEW5scdCXrWRXC0= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= -github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= -github.com/prometheus/common v0.63.0 h1:YR/EIY1o3mEFP/kZCD7iDMnLPlGyuU2Gb3HIcXnA98k= -github.com/prometheus/common v0.63.0/go.mod h1:VVFF/fBIoToEnWRVkYoXEkq3R3paCoxG9PXP74SnV18= +github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk= +github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE= +github.com/prometheus/common v0.64.0 h1:pdZeA+g617P7oGv1CzdTzyeShxAGrTBsolKNOLQPGO4= +github.com/prometheus/common v0.64.0/go.mod h1:0gZns+BLRQ3V6NdaerOhMbwwRbNh9hkGINtQAsP5GS8= github.com/prometheus/procfs v0.16.0 h1:xh6oHhKwnOJKMYiYBDWmkHqQPyiY40sny36Cmx2bbsM= github.com/prometheus/procfs v0.16.0/go.mod h1:8veyXUu3nGP7oaCxhX6yeaM5u4stL2FeMXnCqhDthZg= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= @@ -399,8 +399,8 @@ github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= github.com/ugjka/go-tz/v2 v2.2.6 h1:xAjw0dwSoLZYVBv1lA+n165ibSnDtHguBQNbeAMDwNE= github.com/ugjka/go-tz/v2 v2.2.6/go.mod h1:Jh35OKbERtwjZLWDZ2KgjD+bm5hb9Lx8nVD9Mv9NVzs= -github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE= -github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= +github.com/ugorji/go/codec v1.2.14 h1:yOQvXCBc3Ij46LRkRoh4Yd5qK6LVOgi0bYOXfb7ifjw= +github.com/ugorji/go/codec v1.2.14/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= github.com/ulule/deepcopier v0.0.0-20200430083143-45decc6639b6 h1:TtyC78WMafNW8QFfv3TeP3yWNDG+uxNkk9vOrnDu6JA= github.com/ulule/deepcopier v0.0.0-20200430083143-45decc6639b6/go.mod h1:h8272+G2omSmi30fBXiZDMkmHuOgonplfKIKjQWzlfs= github.com/urfave/cli/v2 v2.27.6 h1:VdRdS98FNhKZ8/Az8B7MTyGQmpIr36O1EHybx/LaZ4g= @@ -412,8 +412,8 @@ github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1/go.mod h1:Ohn+xnUBi github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/zitadel/logging v0.6.2 h1:MW2kDDR0ieQynPZ0KIZPrh9ote2WkxfBif5QoARDQcU= github.com/zitadel/logging v0.6.2/go.mod h1:z6VWLWUkJpnNVDSLzrPSQSQyttysKZ6bCRongw0ROK4= -github.com/zitadel/oidc/v3 v3.38.1 h1:VTf1Bv/33UbSwJnIWbfEIdpUGYKfoHetuBNIqVTcjvA= -github.com/zitadel/oidc/v3 v3.38.1/go.mod h1:muukzAasaWmn3vBwEVMglJfuTE0PKCvLJGombPwXIRw= +github.com/zitadel/oidc/v3 v3.39.0 h1:WK3eNqmgshiYo1oEqONfXXbPbve+Qzgjl8KhKDFUvxc= +github.com/zitadel/oidc/v3 v3.39.0/go.mod h1:JwdgdU/WxkmBtWuE8/pEjAbDTWXxJGqBix/gUoeEig4= github.com/zitadel/schema v1.3.1 h1:QT3kwiRIRXXLVAs6gCK/u044WmUVh6IlbLXUsn6yRQU= github.com/zitadel/schema v1.3.1/go.mod h1:071u7D2LQacy1HAN+YnMd/mx1qVE2isb0Mjeqg46xnU= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= @@ -433,8 +433,8 @@ go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go4.org v0.0.0-20200411211856-f5505b9728dd/go.mod h1:CIiUVy99QCPfoE13bO4EZaz5GZMZXMSBGhxRdsvzbkg= go4.org v0.0.0-20230225012048-214862532bf5 h1:nifaUDeh+rPaBCMPMQHZmvJf+QdpLFnuQPwx+LxVmtc= go4.org v0.0.0-20230225012048-214862532bf5/go.mod h1:F57wTi5Lrj6WLyswp5EYV1ncrEbFGHD4hhz6S1ZYeaU= -golang.org/x/arch v0.16.0 h1:foMtLTdyOmIniqWCHjY6+JxuC54XP1fDwx4N0ASyW+U= -golang.org/x/arch v0.16.0/go.mod h1:JmwW7aLIoRUKgaTzhkiEFxvcEiQGyOg9BMonBJUS7EE= +golang.org/x/arch v0.18.0 h1:WN9poc33zL4AzGxqf8VtpKUnGvMi8O9lhNyBMF/85qc= +golang.org/x/arch v0.18.0/go.mod h1:bdwinDaKcfZUGpH09BB7ZmOfhalA8lQdzl62l8gGWsk= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -446,8 +446,8 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= -golang.org/x/crypto v0.38.0 h1:jt+WWG8IZlBnVbomuhg2Mdq0+BBQaHbtqHEFEigjUV8= -golang.org/x/crypto v0.38.0/go.mod h1:MvrbAqul58NNYPKnOra203SB9vpuZW0e+RRZV+Ggqjw= +golang.org/x/crypto v0.39.0 h1:SHs+kF4LP+f+p14esP5jAoDpHU8Gu/v9lFRK6IT5imM= +golang.org/x/crypto v0.39.0/go.mod h1:L+Xg3Wf6HoL4Bn4238Z6ft6KfEpN0tJGo53AAPC632U= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -462,8 +462,8 @@ golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+o golang.org/x/image v0.0.0-20200927104501-e162460cd6b5/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/image v0.0.0-20220902085622-e7cb96979f69/go.mod h1:doUCurBvlfPMKfmIpRIywoHmhN3VyhnoFDbvIEWF4hY= golang.org/x/image v0.18.0/go.mod h1:4yyo5vMFQjVjUcVk4jEQcU9MGy/rulF5WvUILseCM2E= -golang.org/x/image v0.27.0 h1:C8gA4oWU/tKkdCfYT6T2u4faJu3MeNS5O8UPWlPF61w= -golang.org/x/image v0.27.0/go.mod h1:xbdrClrAUway1MUTEZDq9mz/UpRwYAkFFNUslZtcB+g= +golang.org/x/image v0.28.0 h1:gdem5JW1OLS4FbkWgLO+7ZeFzYtL3xClb97GaUzYMFE= +golang.org/x/image v0.28.0/go.mod h1:GUJYXtnGKEUgggyzh+Vxt+AviiCcyiwpsl8iQ8MvwGY= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -484,8 +484,8 @@ golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/mod v0.24.0 h1:ZfthKaKaT4NrhGVZHO1/WDTwGES4De8KtWO0SIbNJMU= -golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= +golang.org/x/mod v0.25.0 h1:n7a+ZbQKQA/Ysbyb0/6IbB1H/X41mKgbhfv7AfG/44w= +golang.org/x/mod v0.25.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -516,15 +516,15 @@ golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= -golang.org/x/net v0.40.0 h1:79Xs7wF06Gbdcg4kdCCIQArK11Z1hr5POQ6+fIYHNuY= -golang.org/x/net v0.40.0/go.mod h1:y0hY0exeL2Pku80/zKK7tpntoX23cqL3Oa6njdgRtds= +golang.org/x/net v0.41.0 h1:vBTly1HeNPEn3wtREYfy4GZ/NECgw2Cnl+nK6Nz3uvw= +golang.org/x/net v0.41.0/go.mod h1:B/K4NNqkfmg07DQYrbwvSluqCJOOXwUjeb/5lOisjbA= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.29.0 h1:WdYw2tdTK1S8olAzWHdgeqfy+Mtm9XNhv/xJsY65d98= -golang.org/x/oauth2 v0.29.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8= +golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI= +golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -536,8 +536,8 @@ golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sync v0.14.0 h1:woo0S4Yywslg6hp4eUFjTVOyKt0RookbpAHG4c1HmhQ= -golang.org/x/sync v0.14.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.15.0 h1:KWH3jNZsfyT6xfAfKiz6MRNmd46ByHDYaZ7KSkCtdW8= +golang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -594,12 +594,12 @@ golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= -golang.org/x/text v0.25.0 h1:qVyWApTSYLk/drJRO5mDlNYskwQznZmkpV2c8q9zls4= -golang.org/x/text v0.25.0/go.mod h1:WEdwpYrmk1qmdHvhkSTNPm3app7v4rsT8F2UD6+VHIA= +golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M= +golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.11.0 h1:/bpjEDfN9tkoN/ryeYHnv5hcMlc8ncjMcM4XBk5NWV0= -golang.org/x/time v0.11.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= +golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE= +golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= @@ -628,8 +628,8 @@ golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= -golang.org/x/tools v0.31.0 h1:0EedkvKDbh+qistFTd0Bcwe/YLh4vHwWEkiI0toFIBU= -golang.org/x/tools v0.31.0/go.mod h1:naFTU+Cev749tSJRXJlna0T3WxKvb1kWEx15xA4SdmQ= +golang.org/x/tools v0.33.0 h1:4qz2S3zmRxbGIhDIAgjxvFutSvH5EfnsYrRBj0UI0bc= +golang.org/x/tools v0.33.0/go.mod h1:CIJMaWEY88juyUfo7UbgPqbC8rU2OqfAV1h2Qp0oMYI= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/internal/commands/download.go b/internal/commands/download.go index 1306c2384..f6d5ada70 100644 --- a/internal/commands/download.go +++ b/internal/commands/download.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "io" + "math" "net/url" "os" "path/filepath" @@ -13,9 +14,11 @@ import ( "github.com/urfave/cli/v2" "github.com/photoprism/photoprism/internal/config" + "github.com/photoprism/photoprism/internal/ffmpeg" + "github.com/photoprism/photoprism/internal/ffmpeg/encode" "github.com/photoprism/photoprism/internal/photoprism" + "github.com/photoprism/photoprism/internal/photoprism/dl" "github.com/photoprism/photoprism/internal/photoprism/get" - "github.com/photoprism/photoprism/internal/photoprism/ytdl" "github.com/photoprism/photoprism/pkg/clean" "github.com/photoprism/photoprism/pkg/fs" "github.com/photoprism/photoprism/pkg/media" @@ -108,12 +111,17 @@ func downloadAction(ctx *cli.Context) error { mediaType = media.Video log.Infof("downloading %s from %s", mediaType, clean.Log(sourceUrl.String())) - result, err := ytdl.New(context.Background(), sourceUrl.String(), ytdl.Options{ - MergeOutputFormat: "mp4", - RemuxVideo: "mp4", - SortingFormat: "lang,quality,res,fps,hdr:10+,vcodec:h264>av01>h265>vp9.2>vp9>h263,acodec:m4a>mp4a>aac>mp3>mp3>ac3>dts,channels,size,br,asr,proto,ext,hasaud,source,id", - PlaylistStart: 1, - }) + opt := dl.Options{ + // The following flags currently seem to have no effect when piping the output to stdout; + // however, that may change in a future version of the "yt-dlp" video downloader: + MergeOutputFormat: fs.VideoMp4.String(), + RemuxVideo: fs.VideoMp4.String(), + // Alternative codec sorting format to prioritize H264/AVC: + // vcodec:h264>av01>h265>vp9.2>vp9>h263,acodec:m4a>mp4a>aac>mp3>mp3>ac3>dts + SortingFormat: "lang,quality,res,fps,codec:avc:m4a,channels,size,br,asr,proto,ext,hasaud,source,id", + } + + result, err := dl.NewMetadata(context.Background(), sourceUrl.String(), opt) if err != nil { return err @@ -130,14 +138,22 @@ func downloadAction(ctx *cli.Context) error { // Download the first video and embed its metadata, // see https://github.com/yt-dlp/yt-dlp?tab=readme-ov-file#format-selection-examples. - downloadResult, err := result.DownloadWithOptions(context.Background(), ytdl.DownloadOptions{ - // Filter: "bv*+ba/b", + downloadResult, err := result.DownloadWithOptions(context.Background(), dl.DownloadOptions{ + // TODO: While this may work with a future version of the "yt-dlp" video downloader, + // it is currently not possible to properly download videos with separate video and + // audio streams when piping the output to stdout. For now, the following Filter + // will download the best combined video and audio content (see docs for details). + Filter: "best", + // Alternative filters for combining the best video and audio streams: + // Filter: "bestvideo*+bestaudio/best", + // Filter: "best/bestvideo+bestaudio", DownloadAudioOnly: false, EmbedMetadata: true, EmbedSubs: false, - ForceOverwrites: true, + ForceOverwrites: false, DisableCaching: false, - PlaylistIndex: 1, + // Download the first video if multiple videos are available: + PlaylistIndex: 1, }) // Check if download was successful. @@ -159,6 +175,44 @@ func downloadAction(ctx *cli.Context) error { } file.Close() + + // TODO: The remux command flags currently don't seem to have an effect when piping the output to stdout, + // so this command will manually remux the downloaded file with ffmpeg. This ensures that the file is a + // valid MP4 that can be played. It also adds metadata in the same step. + remuxOpt := encode.NewRemuxOptions(conf.FFmpegBin(), fs.VideoMp4, false) + + if title := clean.Name(result.Info.Title); title != "" { + remuxOpt.Title = title + } else if title = clean.Name(result.Info.AltTitle); title != "" { + remuxOpt.Title = title + } + + if desc := strings.TrimSpace(result.Info.Description); desc != "" { + remuxOpt.Description = desc + } + + if u := strings.TrimSpace(sourceUrl.String()); u != "" { + remuxOpt.Comment = u + } + + if author := clean.Name(result.Info.Artist); author != "" { + remuxOpt.Author = author + } else if author = clean.Name(result.Info.AlbumArtist); author != "" { + remuxOpt.Author = author + } else if author = clean.Name(result.Info.Creator); author != "" { + remuxOpt.Author = author + } else if author = clean.Name(result.Info.License); author != "" { + remuxOpt.Author = author + } + + if result.Info.Timestamp > 1 { + sec, dec := math.Modf(result.Info.Timestamp) + remuxOpt.Created = time.Unix(int64(sec), int64(dec*(1e9))) + } + + if remuxErr := ffmpeg.RemuxFile(downloadFilePath, "", remuxOpt); remuxErr != nil { + return remuxErr + } } log.Infof("importing %s to %s", mediaType, clean.Log(filepath.Join(conf.OriginalsPath(), destFolder))) diff --git a/internal/config/config.go b/internal/config/config.go index 2fc39c5b0..b543a7a85 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -51,6 +51,7 @@ import ( "github.com/photoprism/photoprism/internal/config/ttl" "github.com/photoprism/photoprism/internal/entity" "github.com/photoprism/photoprism/internal/mutex" + "github.com/photoprism/photoprism/internal/photoprism/dl" "github.com/photoprism/photoprism/internal/service/hub" "github.com/photoprism/photoprism/internal/service/hub/places" "github.com/photoprism/photoprism/internal/thumb" @@ -278,6 +279,11 @@ func (c *Config) Propagate() { thumb.CachePublic = c.HttpCachePublic() initThumbs() + // Configure video download package. + dl.YtDlpBin = c.YtDlpBin() + dl.FFmpegBin = c.FFmpegBin() + dl.FFprobeBin = c.FFprobeBin() + // Configure computer vision package. vision.AssetsPath = c.AssetsPath() vision.FaceNetModelPath = c.FaceNetModelPath() diff --git a/internal/config/config_ffmpeg.go b/internal/config/config_ffmpeg.go index 1dfceb080..1c0edfb3a 100644 --- a/internal/config/config_ffmpeg.go +++ b/internal/config/config_ffmpeg.go @@ -2,6 +2,7 @@ package config import ( "fmt" + "path/filepath" "github.com/photoprism/photoprism/internal/ffmpeg/encode" "github.com/photoprism/photoprism/internal/thumb" @@ -14,6 +15,20 @@ func (c *Config) FFmpegBin() string { return FindBin(c.options.FFmpegBin, encode.FFmpegBin) } +// FFprobeBin returns the ffprobe executable file name. +func (c *Config) FFprobeBin() string { + if ffmpegBin := c.FFmpegBin(); ffmpegBin != "" && fs.FileExistsNotEmpty(ffmpegBin) { + return FindBin(filepath.Join(filepath.Dir(ffmpegBin), encode.FFprobeBin), encode.FFprobeBin) + } + + return FindBin(encode.FFprobeBin) +} + +// YtDlpBin returns the name of the video download executable file, if installed. +func (c *Config) YtDlpBin() string { + return FindBin("yt-dlp", "yt-dl", "youtube-dl", "dl") +} + // FFmpegEnabled checks if FFmpeg is enabled for video transcoding. func (c *Config) FFmpegEnabled() bool { return !c.DisableFFmpeg() diff --git a/internal/config/config_storage_test.go b/internal/config/config_storage_test.go index 75336722c..10da3c2d6 100644 --- a/internal/config/config_storage_test.go +++ b/internal/config/config_storage_test.go @@ -99,7 +99,6 @@ func TestConfig_UserUploadPath(t *testing.T) { func TestConfig_SidecarPathIsAbs(t *testing.T) { c := NewConfig(CliTestContext()) - assert.Equal(t, true, c.SidecarPathIsAbs()) c.options.SidecarPath = ".photoprism" assert.Equal(t, false, c.SidecarPathIsAbs()) @@ -107,16 +106,24 @@ func TestConfig_SidecarPathIsAbs(t *testing.T) { func TestConfig_SidecarWritable(t *testing.T) { c := NewConfig(CliTestContext()) - assert.Equal(t, true, c.SidecarWritable()) } func TestConfig_FFmpegBin(t *testing.T) { c := NewConfig(CliTestContext()) - assert.True(t, strings.Contains(c.FFmpegBin(), "/bin/ffmpeg")) } +func TestConfig_FFprobeBin(t *testing.T) { + c := NewConfig(CliTestContext()) + assert.True(t, strings.Contains(c.FFprobeBin(), "/bin/ffprobe")) +} + +func TestConfig_YtDlpBin(t *testing.T) { + c := NewConfig(CliTestContext()) + assert.True(t, strings.Contains(c.YtDlpBin(), "/bin/yt-dlp")) +} + func TestConfig_TempPath(t *testing.T) { c := NewConfig(CliTestContext()) diff --git a/internal/ffmpeg/apple/avc.go b/internal/ffmpeg/apple/avc.go index 05f2d7305..12a4b21f8 100644 --- a/internal/ffmpeg/apple/avc.go +++ b/internal/ffmpeg/apple/avc.go @@ -8,23 +8,24 @@ import ( // TranscodeToAvcCmd returns the FFmpeg command for hardware-accelerated transcoding to MPEG-4 AVC. func TranscodeToAvcCmd(srcName, destName string, opt encode.Options) *exec.Cmd { - // ffmpeg -hide_banner -h encoder=h264_videotoolbox return exec.Command( opt.Bin, - "-hide_banner", "-y", + "-hide_banner", + "-y", "-strict", "-2", "-i", srcName, "-c:v", opt.Encoder.String(), "-map", opt.MapVideo, "-map", opt.MapAudio, + "-ignore_unknown", "-c:a", "aac", "-vf", opt.VideoFilter(encode.FormatYUV420P), "-profile", "high", "-level", "51", - "-r", "30", "-q:v", opt.QvQuality(), "-f", "mp4", "-movflags", opt.MovFlags, + "-map_metadata", opt.MapMetadata, destName, ) } diff --git a/internal/ffmpeg/encode/avc.go b/internal/ffmpeg/encode/avc.go index e239fd638..85ee88f2d 100644 --- a/internal/ffmpeg/encode/avc.go +++ b/internal/ffmpeg/encode/avc.go @@ -6,20 +6,22 @@ import "os/exec" func TranscodeToAvcCmd(srcName, destName string, opt Options) *exec.Cmd { return exec.Command( opt.Bin, - "-hide_banner", "-y", + "-hide_banner", + "-y", "-strict", "-2", "-i", srcName, "-c:v", opt.Encoder.String(), "-map", opt.MapVideo, "-map", opt.MapAudio, + "-ignore_unknown", "-c:a", "aac", "-preset", opt.Preset, "-vf", opt.VideoFilter(FormatYUV420P), "-max_muxing_queue_size", "1024", - "-r", "30", "-crf", opt.CrfQuality(), "-f", "mp4", "-movflags", opt.MovFlags, + "-map_metadata", opt.MapMetadata, destName, ) } diff --git a/internal/ffmpeg/encode/const.go b/internal/ffmpeg/encode/const.go index fa87c3928..fc88a7ca9 100644 --- a/internal/ffmpeg/encode/const.go +++ b/internal/ffmpeg/encode/const.go @@ -16,6 +16,7 @@ const ( // Default video and audio track mapping. const ( - DefaultMapVideo = "0:v:0" - DefaultMapAudio = "0:a:0?" + DefaultMapVideo = "0:v:0" + DefaultMapAudio = "0:a:0?" + DefaultMapMetadata = "0" ) diff --git a/internal/ffmpeg/encode/flags.go b/internal/ffmpeg/encode/flags.go index 6254aa938..da2a8462c 100644 --- a/internal/ffmpeg/encode/flags.go +++ b/internal/ffmpeg/encode/flags.go @@ -6,4 +6,4 @@ package encode // - https://cloudinary.com/glossary/fragmented-mp4 // - https://medium.com/@vlad.pbr/in-browser-live-video-using-fragmented-mp4-3aedb600a07e // - https://github.com/video-dev/hls.js?tab=readme-ov-file#features -var MovFlags = "frag_keyframe+empty_moov+default_base_moof+faststart" +var MovFlags = "use_metadata_tags+faststart" diff --git a/internal/ffmpeg/encode/options.go b/internal/ffmpeg/encode/options.go index be1c27d6a..2e28eeea3 100644 --- a/internal/ffmpeg/encode/options.go +++ b/internal/ffmpeg/encode/options.go @@ -3,21 +3,31 @@ package encode import ( "fmt" "time" + + "github.com/photoprism/photoprism/pkg/fs" ) // Options represents FFmpeg encoding options. type Options struct { - Bin string // FFmpeg binary filename, e.g. /usr/bin/ffmpeg - Encoder Encoder // Supported FFmpeg output Encoder - SizeLimit int // Maximum width and height of the output video file in pixels. - Quality int // See https://ffmpeg.org/ffmpeg-codecs.html - Preset string // See https://trac.ffmpeg.org/wiki/Encode/H.264#Preset - Device string // See https://trac.ffmpeg.org/wiki/Limiting%20the%20output%20bitrate - MapVideo string // See https://trac.ffmpeg.org/wiki/Map#Videostreamsonly - MapAudio string // See https://trac.ffmpeg.org/wiki/Map#Audiostreamsonly - TimeOffset string // See https://trac.ffmpeg.org/wiki/Seeking and https://ffmpeg.org/ffmpeg-utils.html#time-duration-syntax - Duration time.Duration // See https://ffmpeg.org/ffmpeg.html#Main-options - MovFlags string + Bin string // FFmpeg binary filename, e.g. /usr/bin/ffmpeg + Container fs.Type // Multimedia Container File Format + Encoder Encoder // Supported FFmpeg output Encoder + SizeLimit int // Maximum width and height of the output video file in pixels. + Quality int // See https://ffmpeg.org/ffmpeg-codecs.html + Preset string // See https://trac.ffmpeg.org/wiki/Encode/H.264#Preset + Device string // See https://trac.ffmpeg.org/wiki/Limiting%20the%20output%20bitrate + MapVideo string // See https://trac.ffmpeg.org/wiki/Map#Videostreamsonly + MapAudio string // See https://trac.ffmpeg.org/wiki/Map#Audiostreamsonly + MapMetadata string // See https://ffmpeg.org/ffmpeg.html + TimeOffset string // See https://trac.ffmpeg.org/wiki/Seeking and https://ffmpeg.org/ffmpeg-utils.html#time-duration-syntax + Duration time.Duration // See https://ffmpeg.org/ffmpeg.html#Main-options + MovFlags string + Title string + Description string + Comment string + Author string + Created time.Time + Force bool } // NewVideoOptions creates and returns new FFmpeg video transcoding options. @@ -57,15 +67,38 @@ func NewVideoOptions(ffmpegBin string, encoder Encoder, sizeLimit, quality int, } return Options{ - Bin: ffmpegBin, - Encoder: encoder, - SizeLimit: sizeLimit, - Quality: quality, - Preset: preset, - Device: device, - MapVideo: mapVideo, - MapAudio: mapAudio, - MovFlags: MovFlags, + Bin: ffmpegBin, + Container: fs.VideoMp4, + Encoder: encoder, + SizeLimit: sizeLimit, + Quality: quality, + Preset: preset, + Device: device, + MapVideo: mapVideo, + MapAudio: mapAudio, + MapMetadata: DefaultMapMetadata, + MovFlags: MovFlags, + } +} + +// NewRemuxOptions creates and returns new video remux options. +func NewRemuxOptions(ffmpegBin string, container fs.Type, force bool) Options { + if ffmpegBin == "" { + ffmpegBin = FFmpegBin + } + + if container == "" { + container = fs.VideoMp4 + } + + return Options{ + Bin: ffmpegBin, + Container: fs.VideoMp4, + MapVideo: DefaultMapVideo, + MapAudio: DefaultMapAudio, + MapMetadata: DefaultMapMetadata, + MovFlags: MovFlags, + Force: force, } } diff --git a/internal/ffmpeg/intel/avc.go b/internal/ffmpeg/intel/avc.go index beae1a044..67c903482 100644 --- a/internal/ffmpeg/intel/avc.go +++ b/internal/ffmpeg/intel/avc.go @@ -12,7 +12,8 @@ func TranscodeToAvcCmd(srcName, destName string, opt encode.Options) *exec.Cmd { if opt.Device != "" { return exec.Command( opt.Bin, - "-hide_banner", "-y", + "-hide_banner", + "-y", "-strict", "-2", "-hwaccel", "qsv", "-hwaccel_device", opt.Device, @@ -23,17 +24,19 @@ func TranscodeToAvcCmd(srcName, destName string, opt encode.Options) *exec.Cmd { "-c:v", opt.Encoder.String(), "-map", opt.MapVideo, "-map", opt.MapAudio, + "-ignore_unknown", "-preset", opt.Preset, - "-r", "30", "-global_quality", opt.GlobalQuality(), "-f", "mp4", "-movflags", opt.MovFlags, + "-map_metadata", opt.MapMetadata, destName, ) } else { return exec.Command( opt.Bin, - "-hide_banner", "-y", + "-hide_banner", + "-y", "-strict", "-2", "-hwaccel", "qsv", "-hwaccel_output_format", "qsv", @@ -43,11 +46,12 @@ func TranscodeToAvcCmd(srcName, destName string, opt encode.Options) *exec.Cmd { "-c:v", opt.Encoder.String(), "-map", opt.MapVideo, "-map", opt.MapAudio, + "-ignore_unknown", "-preset", opt.Preset, - "-r", "30", "-global_quality", opt.GlobalQuality(), "-f", "mp4", "-movflags", opt.MovFlags, + "-map_metadata", opt.MapMetadata, destName, ) } diff --git a/internal/ffmpeg/nvidia/avc.go b/internal/ffmpeg/nvidia/avc.go index 27c9b94b2..48eb2a112 100644 --- a/internal/ffmpeg/nvidia/avc.go +++ b/internal/ffmpeg/nvidia/avc.go @@ -11,7 +11,8 @@ func TranscodeToAvcCmd(srcName, destName string, opt encode.Options) *exec.Cmd { // ffmpeg -hide_banner -h encoder=h264_nvenc return exec.Command( opt.Bin, - "-hide_banner", "-y", + "-hide_banner", + "-y", "-strict", "-2", "-hwaccel", "auto", "-i", srcName, @@ -19,6 +20,7 @@ func TranscodeToAvcCmd(srcName, destName string, opt encode.Options) *exec.Cmd { "-c:v", opt.Encoder.String(), "-map", opt.MapVideo, "-map", opt.MapAudio, + "-ignore_unknown", "-c:a", "aac", "-preset", opt.Preset, "-pixel_format", "yuv420p", @@ -27,12 +29,12 @@ func TranscodeToAvcCmd(srcName, destName string, opt encode.Options) *exec.Cmd { "-rc:v", "constqp", "-cq", opt.CqQuality(), "-tune", "2", - "-r", "30", "-profile:v", "1", "-level:v", "auto", "-coder:v", "1", "-f", "mp4", "-movflags", opt.MovFlags, + "-map_metadata", opt.MapMetadata, destName, ) } diff --git a/internal/ffmpeg/remux.go b/internal/ffmpeg/remux.go new file mode 100644 index 000000000..1cd134d23 --- /dev/null +++ b/internal/ffmpeg/remux.go @@ -0,0 +1,204 @@ +package ffmpeg + +import ( + "bytes" + "errors" + "fmt" + "os" + "os/exec" + "path/filepath" + "strings" + "time" + + "github.com/photoprism/photoprism/internal/ffmpeg/encode" + "github.com/photoprism/photoprism/pkg/clean" + "github.com/photoprism/photoprism/pkg/fs" +) + +// RemuxFile changes the file format to the specified container as needed. +func RemuxFile(videoFilePath, destFilePath string, opt encode.Options) error { + // Return if destination file already exists and force option is not set. + if !opt.Force && fs.FileExistsNotEmpty(destFilePath) { + return nil + } + + // Error if source file does not exist or is empty. + if !fs.FileExistsNotEmpty(videoFilePath) { + return errors.New("invalid video file path") + } + + // Use MP4 as default container format. + if opt.Container == "" { + opt.Container = fs.ExtMp4 + } + + videoBaseName := filepath.Base(videoFilePath) + + if destFilePath == "" { + destFilePath = fs.StripKnownExt(videoFilePath) + opt.Container.DefaultExt() + } + + destFileBase := filepath.Base(destFilePath) + destPathName := filepath.Dir(destFilePath) + + tempBaseName := "." + fs.StripKnownExt(clean.FileName(videoBaseName)) + opt.Container.DefaultExt() + tempFilePath := filepath.Join(destPathName, tempBaseName) + + cmd, err := RemuxCmd(videoFilePath, tempFilePath, opt) + + // Return if an error occurred. + if err != nil { + log.Error(err) + return err + } + + // Check if target file already exists. + if fs.FileExists(tempFilePath) { + if !opt.Force { + return fmt.Errorf("temp file %s already exists", clean.Log(tempBaseName)) + } else if err = os.Remove(tempFilePath); err != nil { + return fmt.Errorf("%s (remove temp file)", err) + } + + log.Infof("ffmpeg: replacing temp file %s", clean.Log(tempBaseName)) + } + + // Fetch command output. + var out bytes.Buffer + var stderr bytes.Buffer + cmd.Stdout = &out + cmd.Stderr = &stderr + cmd.Env = append(cmd.Env, []string{ + fmt.Sprintf("HOME=%s", tempFilePath), + }...) + + log.Infof("ffmpeg: changing container format of %s to %s", clean.Log(videoBaseName), opt.Container) + + // Log exact command for debugging in trace mode. + log.Trace(cmd.String()) + + // Transcode source media file to AVC. + start := time.Now() + if err = cmd.Run(); err != nil { + if stderr.String() != "" { + err = errors.New(stderr.String()) + } + + // Log ffmpeg output for debugging. + if err.Error() != "" { + log.Debug(err) + } + + // Log filename and transcoding time. + log.Warnf("ffmpeg: failed to convert %s [%s]", clean.Log(videoBaseName), time.Since(start)) + + // Remove broken video file. + if !fs.FileExists(tempFilePath) { + // Do nothing. + } else if err = os.Remove(tempFilePath); err != nil { + return fmt.Errorf("failed to remove temp file %s (%s)", clean.Log(tempBaseName), err) + } + + return err + } + + // Abort if destination file is missing or empty. + if !fs.FileExistsNotEmpty(tempFilePath) { + _ = os.Remove(tempFilePath) + return fmt.Errorf("failed change container format of %s [%s]", clean.Log(videoBaseName), time.Since(start)) + } + + if !fs.FileExists(destFilePath) { + // Do nothing. + } else if err = os.Remove(destFilePath); err != nil { + _ = os.Remove(tempFilePath) + return fmt.Errorf("failed to remove %s (%s)", clean.Log(destFileBase), err) + } + + if err = os.Rename(tempFilePath, destFilePath); err != nil { + return fmt.Errorf("failed to rename %s to %s (%s)", clean.Log(tempBaseName), clean.Log(destFileBase), err) + } + + // Log filename and remux time. + if videoBaseName != destFileBase { + log.Infof("ffmpeg: converted %s to %s [%s]", clean.Log(videoBaseName), clean.Log(destFileBase), time.Since(start)) + } else { + log.Infof("ffmpeg: converted %s to %s [%s]", clean.Log(videoBaseName), opt.Container.String(), time.Since(start)) + } + + return nil +} + +// RemuxCmd returns the FFmpeg command for transferring content from one container format to another without altering the original video or audio stream. +func RemuxCmd(srcName, destName string, opt encode.Options) (cmd *exec.Cmd, err error) { + if srcName == "" { + return nil, fmt.Errorf("empty source filename") + } else if !fs.FileExistsNotEmpty(srcName) { + return nil, fmt.Errorf("source file is empty or missing") + } else if destName == "" { + return nil, fmt.Errorf("empty destination filename") + } else if srcName == destName { + return nil, fmt.Errorf("source and destination filenames must be different") + } + + // Use the default binary name if no name is specified. + if opt.Bin == "" { + opt.Bin = encode.FFmpegBin + } + + // Compose "ffmpeg" command flags: + flags := []string{ + "-hide_banner", + "-y", + "-strict", "-2", + "-avoid_negative_ts", "make_non_negative", + "-i", srcName, + "-map", opt.MapVideo, + "-map", opt.MapAudio, + "-dn", // Exclude data streams such as subtitles, timecode tracks, or camera motion data from the output file. + "-ignore_unknown", + "-codec", "copy", + "-f", opt.Container.String(), + } + + // Append format specific "ffmpeg" command flags. + switch opt.Container { + case fs.VideoMp4: + // Ensure MP4 compatibility: + flags = append(flags, + "-movflags", opt.MovFlags, + "-map_metadata", opt.MapMetadata, // Copy existing video metadata. + ) + + // If specified, add the following metadata: + if title := clean.Name(opt.Title); title != "" { + flags = append(flags, "-metadata", fmt.Sprintf(`title=%s`, title)) + } + + if desc := strings.TrimSpace(opt.Description); desc != "" { + flags = append(flags, "-metadata", fmt.Sprintf(`description=%s`, desc)) + } + + if comment := strings.TrimSpace(opt.Comment); comment != "" { + flags = append(flags, "-metadata", fmt.Sprintf(`comment=%s`, comment)) + } + + if author := clean.Name(opt.Author); author != "" { + flags = append(flags, "-metadata", fmt.Sprintf(`author=%s`, author)) + } + + if !opt.Created.IsZero() { + flags = append(flags, "-metadata", fmt.Sprintf(`creation_time=%s`, opt.Created.Format(time.DateTime))) + } + } + + // Set the destination file name as the last command flag. + flags = append(flags, destName) + + cmd = exec.Command( + opt.Bin, + flags..., + ) + + return cmd, nil +} diff --git a/internal/ffmpeg/remux_test.go b/internal/ffmpeg/remux_test.go new file mode 100644 index 000000000..29348008a --- /dev/null +++ b/internal/ffmpeg/remux_test.go @@ -0,0 +1,100 @@ +package ffmpeg + +import ( + "os" + "strings" + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/photoprism/photoprism/internal/ffmpeg/encode" + "github.com/photoprism/photoprism/pkg/fs" +) + +func TestRemuxFile(t *testing.T) { + ffmpegBin := "/usr/bin/ffmpeg" + + t.Run("NoFilePath", func(t *testing.T) { + opt := encode.NewRemuxOptions(ffmpegBin, fs.VideoMp4, false) + err := RemuxFile("", "", opt) + + assert.Equal(t, "invalid video file path", err.Error()) + }) + + t.Run("Mp4", func(t *testing.T) { + opt := encode.NewRemuxOptions(ffmpegBin, fs.VideoMp4, false) + + // QuickTime MOV container with HVC1 (HEVC) codec. + origName := fs.Abs("./testdata/30fps.mov") + srcName := fs.Abs("./testdata/30fps.remux-file.mov") + tmpName := fs.Abs("./testdata/.30fps.remux-file.mp4") + destName := fs.Abs("./testdata/30fps.remux-file.avc") + + _ = os.Remove(srcName) + _ = os.Remove(tmpName) + _ = os.Remove(destName) + + defer func() { + _ = os.Remove(srcName) + _ = os.Remove(tmpName) + _ = os.Remove(destName) + }() + + if err := fs.Copy(origName, srcName); err != nil { + t.Fatal(err) + } + + if err := RemuxFile(srcName, destName, opt); err != nil { + t.Fatal(err) + } + + assert.FileExists(t, srcName) + assert.NoFileExists(t, tmpName) + assert.FileExists(t, destName) + }) +} + +func TestRemuxCmd(t *testing.T) { + ffmpegBin := "/usr/bin/ffmpeg" + + t.Run("NoSrcName", func(t *testing.T) { + opt := encode.NewRemuxOptions(ffmpegBin, fs.VideoMp4, false) + _, err := RemuxCmd("", "", opt) + + assert.Equal(t, "empty source filename", err.Error()) + }) + + t.Run("Mp4", func(t *testing.T) { + opt := encode.NewRemuxOptions(ffmpegBin, fs.VideoMp4, false) + + // QuickTime MOV container with HVC1 (HEVC) codec. + origName := fs.Abs("./testdata/30fps.mov") + + srcName := fs.Abs("./testdata/30fps.remux-cmd.mov") + destName := fs.Abs("./testdata/30fps.remux-cmd.mp4") + + _ = os.Remove(srcName) + _ = os.Remove(destName) + + defer func() { + _ = os.Remove(srcName) + _ = os.Remove(destName) + }() + + if err := fs.Copy(origName, srcName); err != nil { + t.Fatal(err) + } + + cmd, err := RemuxCmd(srcName, destName, opt) + + if err != nil { + t.Fatal(err) + } + + cmdStr := cmd.String() + cmdStr = strings.Replace(cmdStr, srcName, "SRC", 1) + cmdStr = strings.Replace(cmdStr, destName, "DEST", 1) + + assert.Equal(t, "/usr/bin/ffmpeg -hide_banner -y -strict -2 -avoid_negative_ts make_non_negative -i SRC -map 0:v:0 -map 0:a:0? -dn -ignore_unknown -codec copy -f mp4 -movflags use_metadata_tags+faststart -map_metadata 0 DEST", cmdStr) + }) +} diff --git a/internal/ffmpeg/transcode_cmd.go b/internal/ffmpeg/transcode_cmd.go index 891c95b7f..5453ffa40 100644 --- a/internal/ffmpeg/transcode_cmd.go +++ b/internal/ffmpeg/transcode_cmd.go @@ -33,9 +33,11 @@ func TranscodeCmd(srcName, destName string, opt encode.Options) (cmd *exec.Cmd, if fs.TypeAnimated[fs.FileType(srcName)] != "" { cmd = exec.Command( opt.Bin, - "-hide_banner", "-y", + "-hide_banner", + "-y", "-strict", "-2", "-i", srcName, + "-ignore_unknown", "-pix_fmt", encode.FormatYUV420P.String(), "-vf", "scale='trunc(iw/2)*2:trunc(ih/2)*2'", "-f", "mp4", diff --git a/internal/ffmpeg/transcode_cmd_test.go b/internal/ffmpeg/transcode_cmd_test.go index 7ed7b7768..d6ab5d3f6 100644 --- a/internal/ffmpeg/transcode_cmd_test.go +++ b/internal/ffmpeg/transcode_cmd_test.go @@ -34,7 +34,7 @@ func TestTranscodeCmd(t *testing.T) { t.Fatal(err) } - assert.Contains(t, r.String(), "bin/ffmpeg -hide_banner -y -strict -2 -i VID123.gif -pix_fmt yuv420p -vf scale='trunc(iw/2)*2:trunc(ih/2)*2' -f mp4 -movflags +faststart VID123.gif.avc") + assert.Contains(t, r.String(), "bin/ffmpeg -hide_banner -y -strict -2 -i VID123.gif -ignore_unknown -pix_fmt yuv420p -vf scale='trunc(iw/2)*2:trunc(ih/2)*2' -f mp4 -movflags +faststart VID123.gif.avc") }) t.Run("VP9toAVC", func(t *testing.T) { opt := encode.NewVideoOptions(ffmpegBin, encode.SoftwareAvc, 1500, encode.DefaultQuality, encode.PresetFast, "", "", "") @@ -52,7 +52,7 @@ func TestTranscodeCmd(t *testing.T) { cmdStr = strings.Replace(cmdStr, srcName, "SRC", 1) cmdStr = strings.Replace(cmdStr, destName, "DEST", 1) - assert.Equal(t, "/usr/bin/ffmpeg -hide_banner -y -strict -2 -i SRC -c:v libx264 -map 0:v:0 -map 0:a:0? -c:a aac -preset fast -vf scale='if(gte(iw,ih), min(1500, iw), -2):if(gte(iw,ih), -2, min(1500, ih))',format=yuv420p -max_muxing_queue_size 1024 -r 30 -crf 25 -f mp4 -movflags frag_keyframe+empty_moov+default_base_moof+faststart DEST", cmdStr) + assert.Equal(t, "/usr/bin/ffmpeg -hide_banner -y -strict -2 -i SRC -c:v libx264 -map 0:v:0 -map 0:a:0? -ignore_unknown -c:a aac -preset fast -vf scale='if(gte(iw,ih), min(1500, iw), -2):if(gte(iw,ih), -2, min(1500, ih))',format=yuv420p -max_muxing_queue_size 1024 -crf 25 -f mp4 -movflags use_metadata_tags+faststart -map_metadata 0 DEST", cmdStr) // Run generated command to test software transcoding. RunCommandTest(t, opt.Encoder, srcName, destName, cmd, true) @@ -73,7 +73,7 @@ func TestTranscodeCmd(t *testing.T) { cmdStr = strings.Replace(cmdStr, srcName, "SRC", 1) cmdStr = strings.Replace(cmdStr, destName, "DEST", 1) - assert.Equal(t, "/usr/bin/ffmpeg -hide_banner -y -strict -2 -hwaccel vaapi -i SRC -c:a aac -vf scale='if(gte(iw,ih), min(1500, iw), -2):if(gte(iw,ih), -2, min(1500, ih))',format=nv12,hwupload -c:v h264_vaapi -map 0:v:0 -map 0:a:0? -r 30 -qp 25 -f mp4 -movflags frag_keyframe+empty_moov+default_base_moof+faststart DEST", cmdStr) + assert.Equal(t, "/usr/bin/ffmpeg -hide_banner -y -strict -2 -hwaccel vaapi -i SRC -c:a aac -vf scale='if(gte(iw,ih), min(1500, iw), -2):if(gte(iw,ih), -2, min(1500, ih))',format=nv12,hwupload -c:v h264_vaapi -map 0:v:0 -map 0:a:0? -ignore_unknown -qp 25 -f mp4 -movflags use_metadata_tags+faststart -map_metadata 0 DEST", cmdStr) // This transcoding test requires a supported hardware device that is properly configured: if os.Getenv("PHOTOPRISM_FFMPEG_ENCODER") == "vaapi" { @@ -97,7 +97,7 @@ func TestTranscodeCmd(t *testing.T) { cmdStr = strings.Replace(cmdStr, srcName, "SRC", 1) cmdStr = strings.Replace(cmdStr, destName, "DEST", 1) - assert.Equal(t, "/usr/bin/ffmpeg -hide_banner -y -strict -2 -hwaccel qsv -hwaccel_device /dev/dri/renderD128 -hwaccel_output_format qsv -i SRC -c:a aac -vf scale_qsv=w='if(gte(iw,ih), min(1500, iw), -1)':h='if(gte(iw,ih), -1, min(1500, ih))':format=nv12 -c:v h264_qsv -map 0:v:0 -map 0:a:0? -preset fast -r 30 -global_quality 25 -f mp4 -movflags frag_keyframe+empty_moov+default_base_moof+faststart DEST", cmdStr) + assert.Equal(t, "/usr/bin/ffmpeg -hide_banner -y -strict -2 -hwaccel qsv -hwaccel_device /dev/dri/renderD128 -hwaccel_output_format qsv -i SRC -c:a aac -vf scale_qsv=w='if(gte(iw,ih), min(1500, iw), -1)':h='if(gte(iw,ih), -1, min(1500, ih))':format=nv12 -c:v h264_qsv -map 0:v:0 -map 0:a:0? -ignore_unknown -preset fast -global_quality 25 -f mp4 -movflags use_metadata_tags+faststart -map_metadata 0 DEST", cmdStr) // This transcoding test requires a supported hardware device that is properly configured: if os.Getenv("PHOTOPRISM_FFMPEG_ENCODER") == "intel" { @@ -120,7 +120,7 @@ func TestTranscodeCmd(t *testing.T) { cmdStr = strings.Replace(cmdStr, srcName, "SRC", 1) cmdStr = strings.Replace(cmdStr, destName, "DEST", 1) - assert.Equal(t, "/usr/bin/ffmpeg -hide_banner -y -strict -2 -hwaccel qsv -hwaccel_device /dev/dri/renderD128 -hwaccel_output_format qsv -i SRC -c:a aac -vf scale_qsv=w='if(gte(iw,ih), min(1500, iw), -1)':h='if(gte(iw,ih), -1, min(1500, ih))':format=nv12 -c:v h264_qsv -map 0:v:0 -map 0:a:0? -preset fast -r 30 -global_quality 25 -f mp4 -movflags frag_keyframe+empty_moov+default_base_moof+faststart DEST", cmdStr) + assert.Equal(t, "/usr/bin/ffmpeg -hide_banner -y -strict -2 -hwaccel qsv -hwaccel_device /dev/dri/renderD128 -hwaccel_output_format qsv -i SRC -c:a aac -vf scale_qsv=w='if(gte(iw,ih), min(1500, iw), -1)':h='if(gte(iw,ih), -1, min(1500, ih))':format=nv12 -c:v h264_qsv -map 0:v:0 -map 0:a:0? -ignore_unknown -preset fast -global_quality 25 -f mp4 -movflags use_metadata_tags+faststart -map_metadata 0 DEST", cmdStr) // This transcoding test requires a supported hardware device that is properly configured: if os.Getenv("PHOTOPRISM_FFMPEG_ENCODER") == "intel" { @@ -144,7 +144,7 @@ func TestTranscodeCmd(t *testing.T) { cmdStr = strings.Replace(cmdStr, srcName, "SRC", 1) cmdStr = strings.Replace(cmdStr, destName, "DEST", 1) - assert.Equal(t, "/usr/bin/ffmpeg -hide_banner -y -strict -2 -hwaccel auto -i SRC -pix_fmt yuv420p -c:v h264_nvenc -map 0:v:0 -map 0:a:0? -c:a aac -preset fast -pixel_format yuv420p -gpu any -vf scale='if(gte(iw,ih), min(1500, iw), -2):if(gte(iw,ih), -2, min(1500, ih))',format=yuv420p -rc:v constqp -cq 25 -tune 2 -r 30 -profile:v 1 -level:v auto -coder:v 1 -f mp4 -movflags frag_keyframe+empty_moov+default_base_moof+faststart DEST", cmdStr) + assert.Equal(t, "/usr/bin/ffmpeg -hide_banner -y -strict -2 -hwaccel auto -i SRC -pix_fmt yuv420p -c:v h264_nvenc -map 0:v:0 -map 0:a:0? -ignore_unknown -c:a aac -preset fast -pixel_format yuv420p -gpu any -vf scale='if(gte(iw,ih), min(1500, iw), -2):if(gte(iw,ih), -2, min(1500, ih))',format=yuv420p -rc:v constqp -cq 25 -tune 2 -profile:v 1 -level:v auto -coder:v 1 -f mp4 -movflags use_metadata_tags+faststart -map_metadata 0 DEST", cmdStr) // This transcoding test requires a supported hardware device that is properly configured: if os.Getenv("PHOTOPRISM_FFMPEG_ENCODER") == "nvidia" { @@ -167,7 +167,7 @@ func TestTranscodeCmd(t *testing.T) { cmdStr = strings.Replace(cmdStr, srcName, "SRC", 1) cmdStr = strings.Replace(cmdStr, destName, "DEST", 1) - assert.Equal(t, "/usr/bin/ffmpeg -hide_banner -y -strict -2 -hwaccel auto -i SRC -pix_fmt yuv420p -c:v h264_nvenc -map 0:v:0 -map 0:a:0? -c:a aac -preset fast -pixel_format yuv420p -gpu any -vf scale='if(gte(iw,ih), min(1500, iw), -2):if(gte(iw,ih), -2, min(1500, ih))',format=yuv420p -rc:v constqp -cq 25 -tune 2 -r 30 -profile:v 1 -level:v auto -coder:v 1 -f mp4 -movflags frag_keyframe+empty_moov+default_base_moof+faststart DEST", cmdStr) + assert.Equal(t, "/usr/bin/ffmpeg -hide_banner -y -strict -2 -hwaccel auto -i SRC -pix_fmt yuv420p -c:v h264_nvenc -map 0:v:0 -map 0:a:0? -ignore_unknown -c:a aac -preset fast -pixel_format yuv420p -gpu any -vf scale='if(gte(iw,ih), min(1500, iw), -2):if(gte(iw,ih), -2, min(1500, ih))',format=yuv420p -rc:v constqp -cq 25 -tune 2 -profile:v 1 -level:v auto -coder:v 1 -f mp4 -movflags use_metadata_tags+faststart -map_metadata 0 DEST", cmdStr) // This transcoding test requires a supported hardware device that is properly configured: if os.Getenv("PHOTOPRISM_FFMPEG_ENCODER") == "nvidia" { @@ -182,7 +182,7 @@ func TestTranscodeCmd(t *testing.T) { t.Fatal(err) } - assert.Contains(t, r.String(), "ffmpeg -hide_banner -y -strict -2 -i VID123.mov -c:v h264_videotoolbox -map 0:v:0 -map 0:a:0? -c:a aac -vf scale='if(gte(iw,ih), min(1500, iw), -2):if(gte(iw,ih), -2, min(1500, ih))',format=yuv420p -profile high -level 51 -r 30 -q:v 50 -f mp4 -movflags frag_keyframe+empty_moov+default_base_moof+faststart VID123.mov.avc") + assert.Contains(t, r.String(), "ffmpeg -hide_banner -y -strict -2 -i VID123.mov -c:v h264_videotoolbox -map 0:v:0 -map 0:a:0? -ignore_unknown -c:a aac -vf scale='if(gte(iw,ih), min(1500, iw), -2):if(gte(iw,ih), -2, min(1500, ih))',format=yuv420p -profile high -level 51 -q:v 50 -f mp4 -movflags use_metadata_tags+faststart -map_metadata 0 VID123.mov.avc") }) t.Run("Video4Linux", func(t *testing.T) { opt := encode.NewVideoOptions("", encode.V4LAvc, 1500, encode.DefaultQuality, encode.PresetFast, "", "", "") @@ -192,6 +192,6 @@ func TestTranscodeCmd(t *testing.T) { t.Fatal(err) } - assert.Contains(t, r.String(), "ffmpeg -hide_banner -y -strict -2 -i VID123.mov -c:v h264_v4l2m2m -map 0:v:0 -map 0:a:0? -c:a aac -vf scale='if(gte(iw,ih), min(1500, iw), -2):if(gte(iw,ih), -2, min(1500, ih))',format=yuv420p -num_output_buffers 72 -num_capture_buffers 64 -max_muxing_queue_size 1024 -f mp4 -movflags frag_keyframe+empty_moov+default_base_moof+faststart VID123.mov.avc") + assert.Contains(t, r.String(), "ffmpeg -hide_banner -y -strict -2 -i VID123.mov -c:v h264_v4l2m2m -map 0:v:0 -map 0:a:0? -ignore_unknown -c:a aac -vf scale='if(gte(iw,ih), min(1500, iw), -2):if(gte(iw,ih), -2, min(1500, ih))',format=yuv420p -num_output_buffers 72 -num_capture_buffers 64 -max_muxing_queue_size 1024 -f mp4 -movflags use_metadata_tags+faststart -map_metadata 0 VID123.mov.avc") }) } diff --git a/internal/ffmpeg/v4l/avc.go b/internal/ffmpeg/v4l/avc.go index 9f2ab8b20..408514f42 100644 --- a/internal/ffmpeg/v4l/avc.go +++ b/internal/ffmpeg/v4l/avc.go @@ -11,12 +11,14 @@ func TranscodeToAvcCmd(srcName, destName string, opt encode.Options) *exec.Cmd { // ffmpeg -hide_banner -h encoder=h264_v4l2m2m return exec.Command( opt.Bin, - "-hide_banner", "-y", + "-hide_banner", + "-y", "-strict", "-2", "-i", srcName, "-c:v", opt.Encoder.String(), "-map", opt.MapVideo, "-map", opt.MapAudio, + "-ignore_unknown", "-c:a", "aac", "-vf", opt.VideoFilter(encode.FormatYUV420P), "-num_output_buffers", "72", @@ -24,6 +26,7 @@ func TranscodeToAvcCmd(srcName, destName string, opt encode.Options) *exec.Cmd { "-max_muxing_queue_size", "1024", "-f", "mp4", "-movflags", opt.MovFlags, + "-map_metadata", opt.MapMetadata, destName, ) } diff --git a/internal/ffmpeg/vaapi/avc.go b/internal/ffmpeg/vaapi/avc.go index a43f19d0b..75a38e8ac 100644 --- a/internal/ffmpeg/vaapi/avc.go +++ b/internal/ffmpeg/vaapi/avc.go @@ -11,7 +11,8 @@ func TranscodeToAvcCmd(srcName, destName string, opt encode.Options) *exec.Cmd { if opt.Device != "" { return exec.Command( opt.Bin, - "-hide_banner", "-y", + "-hide_banner", + "-y", "-strict", "-2", "-hwaccel", "vaapi", "-hwaccel_device", opt.Device, @@ -21,16 +22,18 @@ func TranscodeToAvcCmd(srcName, destName string, opt encode.Options) *exec.Cmd { "-c:v", opt.Encoder.String(), "-map", opt.MapVideo, "-map", opt.MapAudio, - "-r", "30", + "-ignore_unknown", "-qp", opt.QpQuality(), "-f", "mp4", "-movflags", opt.MovFlags, + "-map_metadata", opt.MapMetadata, destName, ) } else { return exec.Command( opt.Bin, - "-hide_banner", "-y", + "-hide_banner", + "-y", "-strict", "-2", "-hwaccel", "vaapi", "-i", srcName, @@ -39,10 +42,11 @@ func TranscodeToAvcCmd(srcName, destName string, opt encode.Options) *exec.Cmd { "-c:v", opt.Encoder.String(), "-map", opt.MapVideo, "-map", opt.MapAudio, - "-r", "30", + "-ignore_unknown", "-qp", opt.QpQuality(), "-f", "mp4", "-movflags", opt.MovFlags, + "-map_metadata", opt.MapMetadata, destName, ) } diff --git a/internal/meta/data.go b/internal/meta/data.go index 3d0163ba2..6c3b512f4 100644 --- a/internal/meta/data.go +++ b/internal/meta/data.go @@ -19,8 +19,8 @@ type Data struct { MimeType string `meta:"MIMEType" report:"-"` DocumentID string `meta:"ContentIdentifier,MediaGroupUUID,BurstUUID,OriginalDocumentID,DocumentID,ImageUniqueID,DigitalImageGUID"` // see https://exiftool.org/forum/index.php?topic=14874.0 InstanceID string `meta:"InstanceID,DocumentID"` - CreatedAt time.Time `meta:"SubSecCreateDate,CreationDate,CreateDate,MediaCreateDate,ContentCreateDate,TrackCreateDate"` - TakenAt time.Time `meta:"SubSecDateTimeOriginal,SubSecDateTimeCreated,DateTimeOriginal,CreationDate,DateTimeCreated,DateTime,DateTimeDigitized" xmp:"DateCreated"` + CreatedAt time.Time `meta:"SubSecCreateDate,CreationTime,CreationDate,CreateDate,MediaCreateDate,ContentCreateDate,TrackCreateDate"` + TakenAt time.Time `meta:"SubSecDateTimeOriginal,SubSecDateTimeCreated,DateTimeOriginal,CreationTime,CreationDate,DateTimeCreated,DateTime,DateTimeDigitized" xmp:"DateCreated,CreationTime"` TakenAtLocal time.Time `meta:"SubSecDateTimeOriginal,SubSecDateTimeCreated,DateTimeOriginal,CreationDate,DateTimeCreated,DateTime,DateTimeDigitized"` TakenGps time.Time `meta:"GPSDateTime,GPSDateStamp"` TakenNs int `meta:"-"` diff --git a/internal/photoprism/convert_sidecar_json.go b/internal/photoprism/convert_sidecar_json.go index 4a0b95a4c..47365a6a7 100644 --- a/internal/photoprism/convert_sidecar_json.go +++ b/internal/photoprism/convert_sidecar_json.go @@ -10,6 +10,7 @@ import ( "github.com/photoprism/photoprism/pkg/clean" "github.com/photoprism/photoprism/pkg/fs" + "github.com/photoprism/photoprism/pkg/media" ) // ToJson uses exiftool to export metadata to a json file. @@ -30,9 +31,20 @@ func (w *Convert) ToJson(f *MediaFile, force bool) (jsonName string, err error) log.Debugf("exiftool: extracting metadata from %s", clean.Log(f.RootRelName())) - cmd := exec.Command(w.conf.ExifToolBin(), "-n", "-m", "-api", "LargeFileSupport", "-j", f.FileName()) + // Command arguments. + var args []string - // Fetch command output. + // Also extract embedded metadata from videos and live photos. + if f.IsVideo() || f.MetaData().MediaType == media.Live { + args = []string{"-n", "-ee", "-m", "-api", "LargeFileSupport", "-j", f.FileName()} + } else { + args = []string{"-n", "-m", "-api", "LargeFileSupport", "-j", f.FileName()} + } + + // Compose ExifTool command to run. + cmd := exec.Command(w.conf.ExifToolBin(), args...) + + // Command environment, output and errors. var out bytes.Buffer var stderr bytes.Buffer cmd.Stdout = &out @@ -45,7 +57,7 @@ func (w *Convert) ToJson(f *MediaFile, force bool) (jsonName string, err error) log.Trace(cmd.String()) // Run convert command. - if err := cmd.Run(); err != nil { + if err = cmd.Run(); err != nil { if stderr.String() != "" { return "", errors.New(stderr.String()) } else { @@ -54,7 +66,7 @@ func (w *Convert) ToJson(f *MediaFile, force bool) (jsonName string, err error) } // Write output to file. - if err := os.WriteFile(jsonName, []byte(out.String()), fs.ModeFile); err != nil { + if err = os.WriteFile(jsonName, []byte(out.String()), fs.ModeFile); err != nil { return "", err } diff --git a/internal/photoprism/convert_video_avc.go b/internal/photoprism/convert_video_avc.go index 59d7348d1..da43f0a60 100644 --- a/internal/photoprism/convert_video_avc.go +++ b/internal/photoprism/convert_video_avc.go @@ -41,16 +41,33 @@ func (w *Convert) ToAvc(f *MediaFile, encoder encode.Encoder, noMutex, force boo if f.IsAnimatedImage() { avcName = fs.VideoMp4.FindFirst(f.FileName(), []string{w.conf.SidecarPath(), fs.PPHiddenPathname}, w.conf.OriginalsPath(), false) } else { + // Convert MPEG-2 Transport Stream (M2TS) files to MPEG4 containers. + if f.IsM2TS() && w.conf.SidecarWritable() { + if mp4Name, mp4Err := fs.FileName(f.FileName(), w.conf.SidecarPath(), w.conf.OriginalsPath(), fs.ExtMp4); mp4Err != nil { + return nil, fmt.Errorf("convert: %s in %s (remux)", mp4Err, clean.Log(f.RootRelName())) + } else if mp4Err = ffmpeg.RemuxFile(f.FileName(), mp4Name, encode.NewRemuxOptions(conf.FFmpegBin(), fs.VideoMp4, false)); mp4Err != nil { + return nil, fmt.Errorf("convert: %s in %s (remux)", err, clean.Log(f.RootRelName())) + } else if mp4File, fileErr := NewMediaFile(mp4Name); mp4File == nil || fileErr != nil { + log.Warnf("convert: %s could not be converted to mp4", logFileName) + } else if jsonErr := mp4File.CreateExifToolJson(w); jsonErr != nil { + log.Warnf("convert: %s in %s (create json)", jsonErr, logFileName) + } else if jsonErr = mp4File.ReadExifToolJson(); jsonErr != nil { + log.Warnf("convert: %s in %s (read json)", jsonErr, logFileName) + } else if mp4File.MetaData().CodecAvc() { + return mp4File, nil + } + } + avcName = fs.VideoAvc.FindFirst(f.FileName(), []string{w.conf.SidecarPath(), fs.PPHiddenPathname}, w.conf.OriginalsPath(), false) } mediaFile, err := NewMediaFile(avcName) - // Return it if an MP4 AVC encoded video file already exists. + // Return the AVC-encoded video file if it already exists. if mediaFile == nil || err != nil { // Do nothing. } else if mediaFile.IsVideo() { - // Return MP4 AVC encoded video file + // Return existing AVC file. log.Debugf("convert: %s has already been transcoded to MPEG-4 AVC", logFileName) return mediaFile, nil } diff --git a/internal/photoprism/ytdl/bin.go b/internal/photoprism/dl/bin.go similarity index 52% rename from internal/photoprism/ytdl/bin.go rename to internal/photoprism/dl/bin.go index d8ac44f36..f6848aa1f 100644 --- a/internal/photoprism/ytdl/bin.go +++ b/internal/photoprism/dl/bin.go @@ -1,29 +1,30 @@ -package ytdl +package dl import ( - "github.com/photoprism/photoprism/internal/config" + "os/exec" + "github.com/photoprism/photoprism/internal/ffmpeg/encode" ) var ( - Bin = "" + YtDlpBin = "" FFmpegBin = "" FFprobeBin = "" ) -// FindBin returns the YouTube / M38U video downloader binary name. -func FindBin() string { - if Bin == "" { - Bin = config.FindBin("yt-dlp", "yt-dl", "youtube-dl", "dl") +// FindYtDlpBin returns the YouTube / M38U video downloader binary name. +func FindYtDlpBin() string { + if YtDlpBin == "" { + YtDlpBin, _ = exec.LookPath("yt-dlp") } - return Bin + return YtDlpBin } // FindFFmpegBin returns the "ffmpeg" command binary name. func FindFFmpegBin() string { if FFmpegBin == "" { - FFmpegBin = config.FindBin(encode.FFmpegBin) + FFmpegBin, _ = exec.LookPath(encode.FFmpegBin) } return FFmpegBin @@ -32,7 +33,7 @@ func FindFFmpegBin() string { // FindFFprobeBin returns the "ffprobe" command binary name. func FindFFprobeBin() string { if FFprobeBin == "" { - FFprobeBin = config.FindBin(encode.FFprobeBin) + FFprobeBin, _ = exec.LookPath(encode.FFprobeBin) } return FFprobeBin diff --git a/internal/photoprism/ytdl/bin_test.go b/internal/photoprism/dl/bin_test.go similarity index 78% rename from internal/photoprism/ytdl/bin_test.go rename to internal/photoprism/dl/bin_test.go index 77c4a777a..4158f1263 100644 --- a/internal/photoprism/ytdl/bin_test.go +++ b/internal/photoprism/dl/bin_test.go @@ -1,4 +1,4 @@ -package ytdl +package dl import ( "strings" @@ -8,7 +8,7 @@ import ( ) func TestFindBin(t *testing.T) { - assert.True(t, strings.Contains(FindBin(), "yt-dlp"), "binary filepath should contain 'yt-dlp'") + assert.True(t, strings.Contains(FindYtDlpBin(), "yt-dlp"), "binary filepath should contain 'yt-dlp'") } func TestFindFFmpegBin(t *testing.T) { diff --git a/internal/photoprism/ytdl/ytdl.go b/internal/photoprism/dl/dl.go similarity index 94% rename from internal/photoprism/ytdl/ytdl.go rename to internal/photoprism/dl/dl.go index 66d01bfdd..fad1590fd 100644 --- a/internal/photoprism/ytdl/ytdl.go +++ b/internal/photoprism/dl/dl.go @@ -1,5 +1,5 @@ /* -Package ytdl provides media download functionality. +Package dl provides media download functionality. Copyright (c) 2018 - 2025 PhotoPrism UG. All rights reserved. @@ -28,7 +28,7 @@ want to support our work, or just want to say hello. Additional information can be found in our Developer Guide: */ -package ytdl +package dl import ( "github.com/photoprism/photoprism/internal/event" diff --git a/internal/photoprism/ytdl/ytdl_test.go b/internal/photoprism/dl/dl_test.go similarity index 93% rename from internal/photoprism/ytdl/ytdl_test.go rename to internal/photoprism/dl/dl_test.go index c7742f865..eedea76b5 100644 --- a/internal/photoprism/ytdl/ytdl_test.go +++ b/internal/photoprism/dl/dl_test.go @@ -1,4 +1,4 @@ -package ytdl +package dl import ( "bytes" @@ -40,7 +40,7 @@ func TestParseInfo(t *testing.T) { } { t.Run(c.url, func(t *testing.T) { ctx, cancelFn := context.WithCancel(context.Background()) - ydlResult, err := New(ctx, c.url, Options{ + ydlResult, err := NewMetadata(ctx, c.url, Options{ DownloadThumbnail: true, }) if err != nil { @@ -88,7 +88,7 @@ func TestParseInfo(t *testing.T) { } func TestPlaylist(t *testing.T) { - ydlResult, ydlResultErr := New(context.Background(), playlistRawURL, Options{ + ydlResult, ydlResultErr := NewMetadata(context.Background(), playlistRawURL, Options{ Type: TypePlaylist, DownloadThumbnail: false, }) @@ -116,7 +116,7 @@ func TestPlaylist(t *testing.T) { func TestChannel(t *testing.T) { t.Skip("skip youtube for now") - ydlResult, ydlResultErr := New( + ydlResult, ydlResultErr := NewMetadata( context.Background(), channelRawURL, Options{ @@ -150,7 +150,7 @@ func TestUnsupportedURL(t *testing.T) { t.Skip("skipping test in short mode.") } - _, ydlResultErr := New(context.Background(), "https://www.google.com", Options{}) + _, ydlResultErr := NewMetadata(context.Background(), "https://www.google.com", Options{}) if ydlResultErr == nil { t.Errorf("expected unsupported url") } @@ -165,7 +165,7 @@ func TestPlaylistWithPrivateVideo(t *testing.T) { t.Skip("skip youtube for now") plRawURL := "https://www.youtube.com/playlist?list=PLX0g748fkegS54oiDN4AXKl7BR7mLIydP" - ydlResult, ydlResultErr := New(context.Background(), plRawURL, Options{ + ydlResult, ydlResultErr := NewMetadata(context.Background(), plRawURL, Options{ Type: TypePlaylist, DownloadThumbnail: false, }) @@ -184,7 +184,7 @@ func TestPlaylistWithPrivateVideo(t *testing.T) { func TestSubtitles(t *testing.T) { t.Skip("skip youtube for now") - ydlResult, ydlResultErr := New( + ydlResult, ydlResultErr := NewMetadata( context.Background(), subtitlesTestVideoRawURL, Options{ @@ -228,7 +228,7 @@ func TestDownloadSections(t *testing.T) { t.Errorf("failed to check ffmpeg installed: %s", err) } - ydlResult, ydlResultErr := New( + ydlResult, ydlResultErr := NewMetadata( context.Background(), testVideoRawURL, Options{ @@ -300,7 +300,7 @@ func TestErrorNotAPlaylist(t *testing.T) { t.Skip("skipping test in short mode.") } - _, ydlResultErr := New(context.Background(), testVideoRawURL, Options{ + _, ydlResultErr := NewMetadata(context.Background(), testVideoRawURL, Options{ Type: TypePlaylist, DownloadThumbnail: false, }) @@ -314,7 +314,7 @@ func TestErrorNotASingleEntry(t *testing.T) { t.Skip("skipping test in short mode.") } - _, ydlResultErr := New(context.Background(), playlistRawURL, Options{ + _, ydlResultErr := NewMetadata(context.Background(), playlistRawURL, Options{ Type: TypeSingle, DownloadThumbnail: false, }) @@ -329,7 +329,7 @@ func TestOptionDownloader(t *testing.T) { t.Skip("skipping test in short mode.") } - ydlResult, ydlResultErr := New( + ydlResult, ydlResultErr := NewMetadata( context.Background(), testVideoRawURL, Options{ @@ -356,7 +356,7 @@ func TestOptionDownloader(t *testing.T) { } func TestInvalidOptionTypeField(t *testing.T) { - _, err := New(context.Background(), playlistRawURL, Options{ + _, err := NewMetadata(context.Background(), playlistRawURL, Options{ Type: 42, }) if err == nil { @@ -371,7 +371,7 @@ func TestDownloadPlaylistEntry(t *testing.T) { // Download file by specifying the playlist index stderrBuf := &bytes.Buffer{} - r, err := New(context.Background(), playlistRawURL, Options{ + r, err := NewMetadata(context.Background(), playlistRawURL, Options{ StderrFn: func(cmd *exec.Cmd) io.Writer { return stderrBuf }, @@ -425,7 +425,7 @@ func TestDownloadPlaylistEntry(t *testing.T) { // Download the same file but with the direct link url := "https://soundcloud.com/mattheis/b1-mattheis-ben-m" stderrBuf = &bytes.Buffer{} - r, err = New(context.Background(), url, Options{ + r, err = NewMetadata(context.Background(), url, Options{ StderrFn: func(cmd *exec.Cmd) io.Writer { return stderrBuf }, @@ -478,7 +478,7 @@ func TestDownloadPlaylistEntry(t *testing.T) { func TestFormatDownloadError(t *testing.T) { t.Skip("test URL broken") - ydl, ydlErr := New( + ydl, ydlErr := NewMetadata( context.Background(), "https://www.reddit.com/r/newsbabes/s/92rflI0EB0", Options{}, diff --git a/internal/photoprism/ytdl/download.go b/internal/photoprism/dl/download.go similarity index 88% rename from internal/photoprism/ytdl/download.go rename to internal/photoprism/dl/download.go index 1a4062423..e99b9087c 100644 --- a/internal/photoprism/ytdl/download.go +++ b/internal/photoprism/dl/download.go @@ -1,4 +1,4 @@ -package ytdl +package dl import ( "context" @@ -13,7 +13,7 @@ func Download( filter string, ) (*DownloadResult, error) { options.noInfoDownload = true - d, err := New(ctx, rawURL, options) + d, err := NewMetadata(ctx, rawURL, options) if err != nil { return nil, err } diff --git a/internal/photoprism/ytdl/download_test.go b/internal/photoprism/dl/download_test.go similarity index 95% rename from internal/photoprism/ytdl/download_test.go rename to internal/photoprism/dl/download_test.go index b75785533..bc9385319 100644 --- a/internal/photoprism/ytdl/download_test.go +++ b/internal/photoprism/dl/download_test.go @@ -1,4 +1,4 @@ -package ytdl +package dl import ( "bytes" @@ -15,7 +15,7 @@ func TestDownload(t *testing.T) { } stderrBuf := &bytes.Buffer{} - r, err := New(context.Background(), testVideoRawURL, Options{ + r, err := NewMetadata(context.Background(), testVideoRawURL, Options{ StderrFn: func(cmd *exec.Cmd) io.Writer { return stderrBuf }, diff --git a/internal/photoprism/ytdl/error.go b/internal/photoprism/dl/error.go similarity index 97% rename from internal/photoprism/ytdl/error.go rename to internal/photoprism/dl/error.go index e6fc2cfff..bba73182f 100644 --- a/internal/photoprism/ytdl/error.go +++ b/internal/photoprism/dl/error.go @@ -1,4 +1,4 @@ -package ytdl +package dl import ( "errors" diff --git a/internal/photoprism/ytdl/format.go b/internal/photoprism/dl/format.go similarity index 99% rename from internal/photoprism/ytdl/format.go rename to internal/photoprism/dl/format.go index f1f1acc29..fe8cf5f7a 100644 --- a/internal/photoprism/ytdl/format.go +++ b/internal/photoprism/dl/format.go @@ -1,4 +1,4 @@ -package ytdl +package dl import ( "fmt" diff --git a/internal/photoprism/ytdl/info.go b/internal/photoprism/dl/info.go similarity index 99% rename from internal/photoprism/ytdl/info.go rename to internal/photoprism/dl/info.go index 4fd542007..81f2b1574 100644 --- a/internal/photoprism/ytdl/info.go +++ b/internal/photoprism/dl/info.go @@ -1,4 +1,4 @@ -package ytdl +package dl import ( "bufio" @@ -107,7 +107,7 @@ func infoFromURL( ) (info Info, rawJSON []byte, err error) { cmd := exec.CommandContext( ctx, - FindBin(), + FindYtDlpBin(), // see comment below about ignoring errors for playlists "--ignore-errors", // TODO: deprecated in yt-dlp? diff --git a/internal/photoprism/dl/metadata.go b/internal/photoprism/dl/metadata.go new file mode 100644 index 000000000..73ab9dfa1 --- /dev/null +++ b/internal/photoprism/dl/metadata.go @@ -0,0 +1,38 @@ +package dl + +import ( + "context" +) + +// Metadata represents information and options related to a video download URL. +type Metadata struct { + Info Info + RawURL string + RawJSON []byte // saved raw JSON. Used later when downloading + Options Options // options passed to NewMetadata +} + +// NewMetadata downloads metadata for URL +func NewMetadata(ctx context.Context, rawURL string, options Options) (result Metadata, err error) { + if options.noInfoDownload { + return Metadata{ + RawURL: rawURL, + Options: options, + }, nil + } + + info, rawJSON, err := infoFromURL(ctx, rawURL, options) + if err != nil { + return Metadata{}, err + } + + rawJSONCopy := make([]byte, len(rawJSON)) + copy(rawJSONCopy, rawJSON) + + return Metadata{ + Info: info, + RawURL: rawURL, + RawJSON: rawJSONCopy, + Options: options, + }, nil +} diff --git a/internal/photoprism/ytdl/options.go b/internal/photoprism/dl/options.go similarity index 96% rename from internal/photoprism/ytdl/options.go rename to internal/photoprism/dl/options.go index c409436ff..4ca0c0022 100644 --- a/internal/photoprism/ytdl/options.go +++ b/internal/photoprism/dl/options.go @@ -1,4 +1,4 @@ -package ytdl +package dl import ( "bufio" @@ -15,7 +15,7 @@ import ( "strings" ) -// Options for New() +// Options for NewMetadata() type Options struct { Type Type PlaylistStart uint // --playlist-start @@ -38,7 +38,7 @@ type Options struct { Fixup string // --fixup SortingFormat string // --format-sort - // Set to true if you don't want to use the result.Info structure after the goutubedl.New() call, + // Set to true if you don't want to use the result.Info structure after the goutubedl.NewMetadata() call, // so the given URL will be downloaded in a single pass in the DownloadResult.Download() call. noInfoDownload bool } @@ -52,9 +52,10 @@ type DownloadOptions struct { ForceOverwrites bool // --force-overwrites replaces existing files DisableCaching bool // --no-cache-dir PlaylistIndex int // --playlist-items index of the file to download if there is more than one video + Output string } -func (result Result) DownloadWithOptions( +func (result Metadata) DownloadWithOptions( ctx context.Context, options DownloadOptions, ) (*DownloadResult, error) { @@ -89,7 +90,7 @@ func (result Result) DownloadWithOptions( cmd := exec.CommandContext( ctx, - FindBin(), + FindYtDlpBin(), // see comment below about ignoring errors for playlists "--ignore-errors", // TODO: deprecated in yt-dlp? @@ -101,10 +102,14 @@ func (result Result) DownloadWithOptions( "--restrict-filenames", // use .netrc authentication data "--netrc", - // write to stdout - "--output", "-", ) + if options.Output != "" { + cmd.Args = append(cmd.Args, "--output", options.Output) + } else { + cmd.Args = append(cmd.Args, "--output", "-") + } + if result.Options.noInfoDownload { // provide URL via stdin for security, youtube-dl has some run command args cmd.Args = append(cmd.Args, "--batch-file", "-") @@ -131,6 +136,7 @@ func (result Result) DownloadWithOptions( } else { cmd.Args = append(cmd.Args, "--load-info", jsonTempPath) } + // force IPV4 Usage if result.Options.UseIPV4 { cmd.Args = append(cmd.Args, "-4") diff --git a/internal/photoprism/ytdl/result.go b/internal/photoprism/dl/result.go similarity index 72% rename from internal/photoprism/ytdl/result.go rename to internal/photoprism/dl/result.go index 47a89cbbc..0ebf3f429 100644 --- a/internal/photoprism/ytdl/result.go +++ b/internal/photoprism/dl/result.go @@ -1,18 +1,10 @@ -package ytdl +package dl import ( "context" "io" ) -// Result metadata for a URL -type Result struct { - Info Info - RawURL string - RawJSON []byte // saved raw JSON. Used later when downloading - Options Options // options passed to New -} - // DownloadResult download result type DownloadResult struct { reader io.ReadCloser @@ -22,7 +14,7 @@ type DownloadResult struct { // Download format matched by filter (usually a format id or quality designator). // If filter is empty, then youtube-dl will use its default format selector. // It's a shortcut of DownloadWithOptions where the options use the default value -func (result Result) Download(ctx context.Context, filter string) (*DownloadResult, error) { +func (result Metadata) Download(ctx context.Context, filter string) (*DownloadResult, error) { return result.DownloadWithOptions(ctx, DownloadOptions{ Filter: filter, }) @@ -41,7 +33,7 @@ func (dr *DownloadResult) Close() error { // Formats return all formats // helper to take care of mixed info and format -func (result Result) Formats() []Format { +func (result Metadata) Formats() []Format { if len(result.Info.Formats) > 0 { return result.Info.Formats } diff --git a/internal/photoprism/ytdl/subtitle.go b/internal/photoprism/dl/subtitle.go similarity index 94% rename from internal/photoprism/ytdl/subtitle.go rename to internal/photoprism/dl/subtitle.go index 1fa6611ee..0e1b950a3 100644 --- a/internal/photoprism/ytdl/subtitle.go +++ b/internal/photoprism/dl/subtitle.go @@ -1,4 +1,4 @@ -package ytdl +package dl // Subtitle youtube-dl subtitle type Subtitle struct { diff --git a/internal/photoprism/ytdl/testdata/.gitkeep b/internal/photoprism/dl/testdata/.gitkeep similarity index 100% rename from internal/photoprism/ytdl/testdata/.gitkeep rename to internal/photoprism/dl/testdata/.gitkeep diff --git a/internal/photoprism/ytdl/thumbnail.go b/internal/photoprism/dl/thumbnail.go similarity index 94% rename from internal/photoprism/ytdl/thumbnail.go rename to internal/photoprism/dl/thumbnail.go index 5208824e3..6b8b657ad 100644 --- a/internal/photoprism/ytdl/thumbnail.go +++ b/internal/photoprism/dl/thumbnail.go @@ -1,4 +1,4 @@ -package ytdl +package dl type Thumbnail struct { ID string `json:"id"` diff --git a/internal/photoprism/ytdl/type.go b/internal/photoprism/dl/type.go similarity index 97% rename from internal/photoprism/ytdl/type.go rename to internal/photoprism/dl/type.go index 04d7dbc71..51ef11a63 100644 --- a/internal/photoprism/ytdl/type.go +++ b/internal/photoprism/dl/type.go @@ -1,4 +1,4 @@ -package ytdl +package dl // Type of response you want type Type int diff --git a/internal/photoprism/ytdl/version.go b/internal/photoprism/dl/version.go similarity index 82% rename from internal/photoprism/ytdl/version.go rename to internal/photoprism/dl/version.go index bbc3187a2..00a3ce148 100644 --- a/internal/photoprism/ytdl/version.go +++ b/internal/photoprism/dl/version.go @@ -1,4 +1,4 @@ -package ytdl +package dl import ( "context" @@ -9,7 +9,7 @@ import ( // Version of youtube-dl. // Might be a good idea to call at start to assert that youtube-dl can be found. func Version(ctx context.Context) (string, error) { - cmd := exec.CommandContext(ctx, FindBin(), "--version") + cmd := exec.CommandContext(ctx, FindYtDlpBin(), "--version") versionBytes, cmdErr := cmd.Output() if cmdErr != nil { return "", cmdErr diff --git a/internal/photoprism/ytdl/version_test.go b/internal/photoprism/dl/version_test.go similarity index 87% rename from internal/photoprism/ytdl/version_test.go rename to internal/photoprism/dl/version_test.go index 1a1f0aad0..5a1088ad8 100644 --- a/internal/photoprism/ytdl/version_test.go +++ b/internal/photoprism/dl/version_test.go @@ -1,4 +1,4 @@ -package ytdl +package dl import ( "context" @@ -21,8 +21,8 @@ func TestVersion(t *testing.T) { } }) t.Run("InvalidBin", func(t *testing.T) { - defer func(orig string) { Bin = orig }(Bin) - Bin = "/non-existing" + defer func(orig string) { YtDlpBin = orig }(YtDlpBin) + YtDlpBin = "/non-existing" _, versionErr := Version(context.Background()) if versionErr == nil || !strings.Contains(versionErr.Error(), "no such file or directory") { diff --git a/internal/photoprism/mediafile.go b/internal/photoprism/mediafile.go index 45101a369..6a51ef77b 100644 --- a/internal/photoprism/mediafile.go +++ b/internal/photoprism/mediafile.go @@ -532,6 +532,10 @@ func (m *MediaFile) MimeType() string { m.mimeType = fs.MimeType(fileName) + if m.mimeType == header.ContentTypeMp4 && m.MetaData().Codec == video.CodecM2TS { + m.mimeType = header.ContentTypeM2TS + } + return m.mimeType } @@ -814,6 +818,17 @@ func (m *MediaFile) IsAvifS() bool { return m.HasFileType(fs.ImageAvifS) } +// IsM2TS checks if the file is an MPEG-2 Transport Stream (M2TS) container. +func (m *MediaFile) IsM2TS() bool { + if t := fs.FileType(m.fileName); t == fs.VideoM2TS { + return true + } else if t == fs.VideoMp4 || t == fs.VideoAvcHD { + return m.HasMimeType(header.ContentTypeM2TS) + } + + return false +} + // IsBmp checks if the file is a bitmap image with a supported file type extension. func (m *MediaFile) IsBmp() bool { if fs.FileType(m.fileName) != fs.ImageBmp { diff --git a/internal/photoprism/mediafile_meta_test.go b/internal/photoprism/mediafile_meta_test.go index 85b6aad37..c7855e304 100644 --- a/internal/photoprism/mediafile_meta_test.go +++ b/internal/photoprism/mediafile_meta_test.go @@ -12,6 +12,7 @@ import ( "github.com/photoprism/photoprism/internal/meta" "github.com/photoprism/photoprism/pkg/fs" "github.com/photoprism/photoprism/pkg/media" + "github.com/photoprism/photoprism/pkg/media/http/header" "github.com/photoprism/photoprism/pkg/media/projection" "github.com/photoprism/photoprism/pkg/media/video" "github.com/photoprism/photoprism/pkg/time/tz" @@ -73,10 +74,11 @@ func TestMediaFile_SidecarJsonName(t *testing.T) { } func TestMediaFile_NeedsExifToolJson(t *testing.T) { + c := config.TestConfig() + t.Run("false", func(t *testing.T) { - conf := config.TestConfig() - mediaFile, err := NewMediaFile(conf.ExamplesPath() + "/beach_sand.jpg") + mediaFile, err := NewMediaFile(c.ExamplesPath() + "/beach_sand.jpg") if err != nil { t.Fatal(err) @@ -85,9 +87,7 @@ func TestMediaFile_NeedsExifToolJson(t *testing.T) { assert.True(t, mediaFile.NeedsExifToolJson()) }) t.Run("true", func(t *testing.T) { - conf := config.TestConfig() - - mediaFile, err := NewMediaFile(conf.ExamplesPath() + "/blue-go-video.mp4") + mediaFile, err := NewMediaFile(c.ExamplesPath() + "/blue-go-video.mp4") if err != nil { t.Fatal(err) @@ -96,9 +96,7 @@ func TestMediaFile_NeedsExifToolJson(t *testing.T) { assert.True(t, mediaFile.NeedsExifToolJson()) }) t.Run("true", func(t *testing.T) { - conf := config.TestConfig() - - mediaFile, err := NewMediaFile(conf.ExamplesPath() + "/blue-go-video.mp4.json") + mediaFile, err := NewMediaFile(c.ExamplesPath() + "/blue-go-video.mp4.json") if err != nil { t.Fatal(err) @@ -109,10 +107,108 @@ func TestMediaFile_NeedsExifToolJson(t *testing.T) { } func TestMediaFile_CreateExifToolJson(t *testing.T) { - conf := config.TestConfig() + c := config.TestConfig() + t.Run("bear.m2ts", func(t *testing.T) { + mediaFile, err := NewMediaFile(filepath.Join(c.ExamplesPath(), "bear.m2ts")) + + if err != nil { + t.Fatal(err) + } + + assert.Equal(t, fs.VideoM2TS, mediaFile.FileType()) + + jsonName, err := mediaFile.ExifToolJsonName() + + if fs.FileExists(jsonName) { + if err = os.Remove(jsonName); err != nil { + t.Error(err) + } + } + + assert.True(t, mediaFile.NeedsExifToolJson()) + + err = mediaFile.CreateExifToolJson(NewConvert(c)) + + if err != nil { + t.Fatal(err) + } + + data := mediaFile.MetaData() + + assert.Empty(t, err) + + assert.IsType(t, meta.Data{}, data) + + assert.Equal(t, "0001-01-01 00:00:00 +0000 UTC", data.TakenAt.String()) + assert.Equal(t, "0001-01-01 00:00:00 +0000 UTC", data.TakenAtLocal.String()) + assert.Equal(t, video.CodecM2TS, data.Codec) + assert.Equal(t, 320, data.Width) + assert.Equal(t, 192, data.Height) + assert.Equal(t, false, data.Flash) + assert.Equal(t, "", data.Caption) + assert.True(t, mediaFile.IsM2TS()) + assert.True(t, mediaFile.IsVideo()) + assert.True(t, mediaFile.HasMediaType(media.Video)) + assert.Equal(t, fs.VideoM2TS, mediaFile.FileType()) + assert.Equal(t, header.ContentTypeM2TS, mediaFile.MimeType()) + assert.Equal(t, header.ContentTypeM2TS, mediaFile.ContentType()) + + if err = os.Remove(jsonName); err != nil { + t.Error(err) + } + }) + t.Run("m2ts.mp4", func(t *testing.T) { + mediaFile, err := NewMediaFile(filepath.Join(c.ExamplesPath(), "m2ts.mp4")) + + if err != nil { + t.Fatal(err) + } + + assert.Equal(t, fs.VideoMp4, mediaFile.FileType()) + + jsonName, err := mediaFile.ExifToolJsonName() + + if fs.FileExists(jsonName) { + if err = os.Remove(jsonName); err != nil { + t.Error(err) + } + } + + assert.True(t, mediaFile.NeedsExifToolJson()) + + err = mediaFile.CreateExifToolJson(NewConvert(c)) + + if err != nil { + t.Fatal(err) + } + + data := mediaFile.MetaData() + + assert.Empty(t, err) + + assert.IsType(t, meta.Data{}, data) + + assert.Equal(t, "0001-01-01 00:00:00 +0000 UTC", data.TakenAt.String()) + assert.Equal(t, "0001-01-01 00:00:00 +0000 UTC", data.TakenAtLocal.String()) + assert.Equal(t, video.CodecM2TS, data.Codec) + assert.Equal(t, 320, data.Width) + assert.Equal(t, 192, data.Height) + assert.Equal(t, false, data.Flash) + assert.Equal(t, "", data.Caption) + assert.True(t, mediaFile.IsM2TS()) + assert.True(t, mediaFile.IsVideo()) + assert.True(t, mediaFile.HasMediaType(media.Video)) + assert.Equal(t, fs.VideoMp4, mediaFile.FileType()) + assert.Equal(t, header.ContentTypeM2TS, mediaFile.MimeType()) + assert.Equal(t, header.ContentTypeM2TS, mediaFile.ContentType()) + + if err = os.Remove(jsonName); err != nil { + t.Error(err) + } + }) t.Run("gopher-video.mp4", func(t *testing.T) { - mediaFile, err := NewMediaFile(conf.ExamplesPath() + "/gopher-video.mp4") + mediaFile, err := NewMediaFile(c.ExamplesPath() + "/gopher-video.mp4") if err != nil { t.Fatal(err) @@ -128,7 +224,7 @@ func TestMediaFile_CreateExifToolJson(t *testing.T) { assert.True(t, mediaFile.NeedsExifToolJson()) - err = mediaFile.CreateExifToolJson(NewConvert(conf)) + err = mediaFile.CreateExifToolJson(NewConvert(c)) if err != nil { t.Fatal(err) @@ -156,10 +252,10 @@ func TestMediaFile_CreateExifToolJson(t *testing.T) { } func TestMediaFile_Exif_Jpeg(t *testing.T) { - conf := config.TestConfig() + c := config.TestConfig() t.Run("elephants.jpg", func(t *testing.T) { - img, err := NewMediaFile(conf.ExamplesPath() + "/elephants.jpg") + img, err := NewMediaFile(c.ExamplesPath() + "/elephants.jpg") if err != nil { t.Fatal(err) @@ -198,7 +294,7 @@ func TestMediaFile_Exif_Jpeg(t *testing.T) { }) t.Run("fern_green.jpg", func(t *testing.T) { - img, err := NewMediaFile(conf.ExamplesPath() + "/fern_green.jpg") + img, err := NewMediaFile(c.ExamplesPath() + "/fern_green.jpg") if err != nil { t.Fatal(err) @@ -232,9 +328,8 @@ func TestMediaFile_Exif_Jpeg(t *testing.T) { t.Logf("UTC: %s", info.TakenAt.String()) t.Logf("Local: %s", info.TakenAtLocal.String()) }) - t.Run("blue-go-video.mp4", func(t *testing.T) { - img, err := NewMediaFile(conf.ExamplesPath() + "/blue-go-video.mp4") + img, err := NewMediaFile(c.ExamplesPath() + "/blue-go-video.mp4") if err != nil { t.Fatal(err) @@ -246,7 +341,6 @@ func TestMediaFile_Exif_Jpeg(t *testing.T) { assert.IsType(t, meta.Data{}, info) }) - t.Run("panorama360.jpg", func(t *testing.T) { img, err := NewMediaFile("testdata/panorama360.jpg") @@ -281,7 +375,6 @@ func TestMediaFile_Exif_Jpeg(t *testing.T) { assert.Equal(t, 1, data.Orientation) assert.Equal(t, projection.Equirectangular.String(), data.Projection) }) - t.Run("digikam.jpg", func(t *testing.T) { img, err := NewMediaFile("testdata/digikam.jpg") diff --git a/internal/photoprism/mediafile_test.go b/internal/photoprism/mediafile_test.go index 2192dbb80..0e590dd29 100644 --- a/internal/photoprism/mediafile_test.go +++ b/internal/photoprism/mediafile_test.go @@ -765,6 +765,26 @@ func TestMediaFile_MimeType(t *testing.T) { assert.Equal(t, "video/mp4", f.MimeType()) } }) + t.Run("bear.m2ts", func(t *testing.T) { + if f, err := NewMediaFile(filepath.Join(c.ExamplesPath(), "bear.m2ts")); err != nil { + t.Fatal(err) + } else { + assert.True(t, f.IsM2TS()) + assert.Equal(t, fs.VideoM2TS, f.FileType()) + assert.Equal(t, header.ContentTypeM2TS, f.MimeType()) + assert.Equal(t, header.ContentTypeM2TS, f.ContentType()) + } + }) + t.Run("m2ts.mp4", func(t *testing.T) { + if f, err := NewMediaFile(filepath.Join(c.ExamplesPath(), "m2ts.mp4")); err != nil { + t.Fatal(err) + } else { + assert.False(t, f.IsM2TS()) + assert.Equal(t, fs.VideoMp4, f.FileType()) + assert.Equal(t, header.ContentTypeMp4, f.MimeType()) + assert.Equal(t, header.ContentTypeMp4, f.ContentType()) + } + }) t.Run("earth.avi", func(t *testing.T) { if f, err := NewMediaFile(filepath.Join(c.ExamplesPath(), "earth.avi")); err != nil { t.Fatal(err) diff --git a/internal/photoprism/ytdl/new.go b/internal/photoprism/ytdl/new.go deleted file mode 100644 index 32daa40a4..000000000 --- a/internal/photoprism/ytdl/new.go +++ /dev/null @@ -1,30 +0,0 @@ -package ytdl - -import ( - "context" -) - -// New downloads metadata for URL -func New(ctx context.Context, rawURL string, options Options) (result Result, err error) { - if options.noInfoDownload { - return Result{ - RawURL: rawURL, - Options: options, - }, nil - } - - info, rawJSON, err := infoFromURL(ctx, rawURL, options) - if err != nil { - return Result{}, err - } - - rawJSONCopy := make([]byte, len(rawJSON)) - copy(rawJSONCopy, rawJSON) - - return Result{ - Info: info, - RawURL: rawURL, - RawJSON: rawJSONCopy, - Options: options, - }, nil -} diff --git a/pkg/fs/file_exts.go b/pkg/fs/file_exts.go index 1c6a3892e..2b230cfbf 100644 --- a/pkg/fs/file_exts.go +++ b/pkg/fs/file_exts.go @@ -155,8 +155,11 @@ var Extensions = FileExtensions{ ".flv": VideoFlash, ".f4v": VideoFlash, ".mkv": VideoMkv, + ".ts": VideoM2TS, + ".m2t": VideoM2TS, + ".m2ts": VideoM2TS, + ".mp2t": VideoM2TS, ".mts": VideoAvcHD, - ".m2ts": VideoBDAV, ".ogv": VideoTheora, ".ogg": VideoTheora, ".ogx": VideoTheora, diff --git a/pkg/fs/file_info.go b/pkg/fs/file_info.go index ba2ea6f4e..23b61823e 100644 --- a/pkg/fs/file_info.go +++ b/pkg/fs/file_info.go @@ -51,8 +51,8 @@ var TypeInfo = TypeMap{ VideoMkv: "Matroska Multimedia Container", VideoMpeg: "Moving Picture Experts Group (MPEG)", VideoMjpeg: "Motion JPEG", + VideoM2TS: "MPEG-2 Transport Stream (M2TS)", VideoAvcHD: "Advanced Video Coding High Definition (AVCHD)", - VideoBDAV: "Blu-ray MPEG-2 Transport Stream", VideoTheora: "Ogg Media (OGG)", SidecarXMP: "Adobe Extensible Metadata Platform", SidecarAppleXml: "Apple Image Edits XML", diff --git a/pkg/fs/file_types.go b/pkg/fs/file_types.go index bd4dd6813..857b61cd1 100644 --- a/pkg/fs/file_types.go +++ b/pkg/fs/file_types.go @@ -87,8 +87,8 @@ const ( Video3GP Type = "3gp" // Mobile Multimedia Container, MPEG-4 Part 12 Video3G2 Type = "3g2" // Similar to 3GP, consumes less space & bandwidth VideoFlash Type = "flv" // Flash Video + VideoM2TS Type = "m2t" // MPEG-2 Transport Stream (M2TS) VideoAvcHD Type = "mts" // AVCHD (Advanced Video Coding High Definition) - VideoBDAV Type = "m2ts" // Blu-ray MPEG-2 Transport Stream VideoTheora Type = "ogv" // Ogg container format maintained by the Xiph.Org, free and open VideoASF Type = "asf" // Advanced Systems/Streaming Format (ASF) VideoAVI Type = "avi" // Microsoft Audio Video Interleave (AVI) diff --git a/pkg/fs/mime.go b/pkg/fs/mime.go index 13fa0d274..14da3a68c 100644 --- a/pkg/fs/mime.go +++ b/pkg/fs/mime.go @@ -29,6 +29,9 @@ func MimeType(filename string) (mimeType string) { // Determine mime type based on the extension for the following // formats, which otherwise cannot be reliably distinguished: switch fileType { + // MPEG-2 Transport Stream + case VideoM2TS, VideoAvcHD: + return header.ContentTypeM2TS // Apple QuickTime Container case VideoMov: return header.ContentTypeMov diff --git a/pkg/media/formats.go b/pkg/media/formats.go index e42258e26..c416041f9 100644 --- a/pkg/media/formats.go +++ b/pkg/media/formats.go @@ -56,8 +56,8 @@ var Formats = map[fs.Type]Type{ fs.Video3GP: Video, fs.Video3G2: Video, fs.VideoFlash: Video, + fs.VideoM2TS: Video, fs.VideoAvcHD: Video, - fs.VideoBDAV: Video, fs.VideoTheora: Video, fs.VideoASF: Video, fs.VideoWMV: Video, diff --git a/pkg/media/http/header/content_types.go b/pkg/media/http/header/content_types.go index a857cb31d..9f0ab14fd 100644 --- a/pkg/media/http/header/content_types.go +++ b/pkg/media/http/header/content_types.go @@ -23,6 +23,7 @@ import ( // Standard ContentType strings for audio and video files: const ( + ContentTypeM2TS = "video/mp2t" ContentTypeM4v = "video/x-m4v" ContentTypeMp4 = "video/mp4" ContentTypeMp4Avc = ContentTypeMp4 + "; codecs=\"avc1\"" // MPEG-4 AVC (H.264) diff --git a/pkg/media/video/brands.go b/pkg/media/video/brands.go index 612fb7856..92e9b6a81 100644 --- a/pkg/media/video/brands.go +++ b/pkg/media/video/brands.go @@ -76,7 +76,6 @@ var CompatibleBrands = Chunks{ ChunkHEV2, ChunkHEV3, ChunkDVHE, - ChunkHEIC, ChunkAV01, ChunkAV1C, ChunkMMP4, diff --git a/pkg/media/video/chunk.go b/pkg/media/video/chunk.go index 0ec5993e4..396806d1a 100644 --- a/pkg/media/video/chunk.go +++ b/pkg/media/video/chunk.go @@ -60,13 +60,13 @@ func (c Chunk) FileOffset(fileName string) (int, error) { defer file.Close() - index, err := c.DataOffset(file, -1) + index, err := c.DataOffset(file, 0, -1) return index, err } // DataOffset returns the index of the chunk in file, or -1 if it was not found. -func (c Chunk) DataOffset(file io.ReadSeeker, maxOffset int) (int, error) { +func (c Chunk) DataOffset(file io.ReadSeeker, offset, maxOffset int) (int, error) { if file == nil { return -1, errors.New("file is nil") } @@ -79,8 +79,11 @@ func (c Chunk) DataOffset(file io.ReadSeeker, maxOffset int) (int, error) { // Create buffered read seeker. r := bufseekio.NewReadSeeker(file, blockSize, dataSize) - // Index offset. - var offset int + if seekOffset, seekErr := r.Seek(int64(offset), io.SeekStart); seekErr != nil { + return -1, seekErr + } else { + offset = int(seekOffset) + } // Search in batches. for { diff --git a/pkg/media/video/chunks_test.go b/pkg/media/video/chunks_test.go index 08f80c0cc..ac0716fe2 100644 --- a/pkg/media/video/chunks_test.go +++ b/pkg/media/video/chunks_test.go @@ -39,6 +39,17 @@ func TestChunk_FileOffset(t *testing.T) { require.NoError(t, err) assert.Equal(t, 23213, index) }) + t.Run("motion-photo.heif", func(t *testing.T) { + index, err := ChunkFTYP.FileOffset("testdata/motion-photo.heif") + require.NoError(t, err) + assert.Equal(t, 4, index) + index, err = ChunkHEIC.FileOffset("testdata/motion-photo.heif") + require.NoError(t, err) + assert.Equal(t, 8, index) + index, err = ChunkHVC1.FileOffset("testdata/motion-photo.heif") + require.NoError(t, err) + assert.Equal(t, 976016, index) + }) } func TestChunks(t *testing.T) { diff --git a/pkg/media/video/codecs.go b/pkg/media/video/codecs.go index 9e52fd6f6..17d853d27 100644 --- a/pkg/media/video/codecs.go +++ b/pkg/media/video/codecs.go @@ -33,6 +33,7 @@ const ( CodecVp08 Codec = "vp08" // Google VP8 CodecVp09 Codec = "vp09" // Google VP9 CodecTheora Codec = "ogv" // Ogg Vorbis Video + CodecM2TS Codec = "m2t" // MPEG-2 Transport Stream CodecWebm Codec = "webm" // Google WebM ) diff --git a/pkg/media/video/content_type.go b/pkg/media/video/content_type.go index 62d93957c..63c8baca7 100644 --- a/pkg/media/video/content_type.go +++ b/pkg/media/video/content_type.go @@ -64,6 +64,8 @@ func ContentType(mediaType, fileType, videoCodec string, hdr bool) string { mediaType = header.ContentTypeMp4 case fs.VideoMkv.Equal(fileType): mediaType = header.ContentTypeMkv + case fs.VideoM2TS.Equal(fileType) || videoCodec == CodecM2TS: + mediaType = header.ContentTypeM2TS } } diff --git a/pkg/media/video/probe.go b/pkg/media/video/probe.go index 2a400292e..6b468f85e 100644 --- a/pkg/media/video/probe.go +++ b/pkg/media/video/probe.go @@ -153,8 +153,7 @@ func Probe(file io.ReadSeeker) (info Info, err error) { // If no AVC video was found, search the video data for High Efficiency Video Coding (HEVC) chunks, // see https://stackoverflow.com/questions/63468587/what-hevc-codec-tag-to-use-with-fmp4-hvc1-or-hev1. if info.VideoCodec == "" { - // To improve performance, only search for "hvc1" as that is the most common HEVC video identifier. - if fileOffset, fileErr := ChunkHVC1.DataOffset(file, -1); fileOffset > 0 && fileErr == nil { + if fileOffset, fileErr := ChunkHVC1.DataOffset(file, 0, -1); fileOffset > 0 && fileErr == nil { info.VideoCodec = CodecHvc1 } } diff --git a/pkg/media/video/probe_test.go b/pkg/media/video/probe_test.go index 9c9e7fbbc..73eb94eed 100644 --- a/pkg/media/video/probe_test.go +++ b/pkg/media/video/probe_test.go @@ -252,4 +252,34 @@ func TestProbe(t *testing.T) { assert.Equal(t, false, info.FastStart) assert.Equal(t, true, info.Compatible) }) + t.Run("motion-photo.heif", func(t *testing.T) { + f, fileErr := os.Open("testdata/motion-photo.heif") + require.NoError(t, fileErr) + defer f.Close() + + info, err := Probe(f) + require.NoError(t, err) + require.NotNil(t, info) + + assert.Equal(t, "", info.FileName) + assert.Equal(t, int64(-1), info.FileSize) + assert.Equal(t, fs.TypeUnknown, info.FileType) + assert.Equal(t, Mp4, info.VideoType) + assert.Equal(t, int64(978741), info.VideoOffset) + assert.Equal(t, int64(0), info.ThumbOffset) + assert.Equal(t, media.Live, info.MediaType) + assert.Equal(t, CodecHvc1, info.VideoCodec) + assert.Equal(t, header.ContentTypeMp4, info.VideoMimeType) + assert.Equal(t, header.ContentTypeMp4HvcMain10, info.VideoContentType()) + assert.Equal(t, "2.9686s", info.Duration.String()) + assert.InEpsilon(t, 2.9686, info.Duration.Seconds(), 0.01) + assert.Equal(t, 2, info.Tracks) + assert.Equal(t, 0, info.VideoWidth) + assert.Equal(t, 0, info.VideoHeight) + assert.Equal(t, 89, info.Frames) + assert.Equal(t, 30.0, info.FPS) + assert.Equal(t, false, info.Encrypted) + assert.Equal(t, false, info.FastStart) + assert.Equal(t, true, info.Compatible) + }) } diff --git a/pkg/media/video/standards.go b/pkg/media/video/standards.go index 25cfb231c..33fb357af 100644 --- a/pkg/media/video/standards.go +++ b/pkg/media/video/standards.go @@ -74,6 +74,9 @@ var Types = Standards{ "mkv1": MkvAv1, "ogg": Theora, // ↓ Theora video in OGG container "ogv": Theora, + "m2t": M2TS, // ↓ MPEG-2 Transport Stream container + "m2ts": M2TS, + "mp2t": M2TS, "mp4": Mp4, // ↓ Unknown codec in MP4 container "mpeg4": Mp4, "webm": Webm, // ↓ Unknown codec in WebM container diff --git a/pkg/media/video/testdata/bear.m2ts b/pkg/media/video/testdata/bear.m2ts new file mode 100644 index 0000000000000000000000000000000000000000..4508dc463e5b2d36e82fa5e8f1cf415a12fdf430 GIT binary patch literal 102272 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 n7?71@P`R@x>7eMDKd;G}pKeYV|{@;48 literal 0 HcmV?d00001 diff --git a/pkg/media/video/testdata/motion-photo.heif b/pkg/media/video/testdata/motion-photo.heif new file mode 100644 index 0000000000000000000000000000000000000000..01724f19f86556229dad09c8f834fb11b4359d05 GIT binary patch literal 3366300 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⋙aT4XR*DA5`7#FU++nZ^+*0CkzR}a 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

0|U?cmGXk&SG*M#>^3 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%0DT&E5$4NI1ebR*k_$Pk!w69@uG_yUlC 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