Compare commits

...

192 Commits

Author SHA1 Message Date
Neeraj
1fe2a941ff [mobile/photos] New translations (#6808)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-app)
2025-08-13 09:35:47 +05:30
Manav Rathi
4e622fc48a [web] Update yarn.lock (#6835) 2025-08-13 09:09:26 +05:30
Manav Rathi
b11d0e7c94 [web] Update yarn.lock 2025-08-13 09:04:53 +05:30
Manav Rathi
ea0e2ed664 [infra] Caddy (#6831)
For custom domain TLS provisioning
2025-08-12 18:01:24 +05:30
Manav Rathi
01d70d1b5e Fix HTTPS connection with upstream 2025-08-12 17:49:48 +05:30
Neeraj
7165db3cd9 [server] Support for configuring custom-domains (#6827)
## Description

## Tests
- Verified server db migrations is on 103
- Verified that duplicate custom domain results in error
- basic sanity testing for custom domain validation.
2025-08-12 17:25:47 +05:30
Neeraj
ee3829675b [auth] Update assets for f-droid (#6832)
## Description

## Tests
2025-08-12 16:26:56 +05:30
Neeraj
9ee86fc6a0 [mob] upgrade flutter to latest stable (#6254)
## Description

This PR upgrades flutter to stable version i.e. Flutter 3.32.8

- [x] Bump dependencies
- [x] Replace .withOpacity( with .withValues(alpha:
- [x] Fix broken l10n
- [x] Did some lint fixes
- [x] Update deprecated methods and arguments
- [x] Fix flutter_gen not found for Photos app (by removing the
l10n.yaml, fixing delegates, using `intl_utils/Flutter Intl`)

## Tests

- [x] Test app
- [x] Check upgraded deps
- [x] Test Deep links/Passkeys - Android
- [ ] Test Deep links/Passkeys - iOS
2025-08-12 16:22:09 +05:30
Neeraj Gupta
c46c009bee Update auth description 2025-08-12 16:18:55 +05:30
Prateek Sunal
e9786d8ee5 fix: bump remaining flutter sdk versions 2025-08-12 16:09:16 +05:30
Neeraj Gupta
dbc36c7129 Update assets 2025-08-12 16:05:15 +05:30
Prateek Sunal
e00c9795f0 chore: lint fix 2025-08-12 16:03:06 +05:30
Prateek Sunal
db7a7c3f7a chore: bump intl 2025-08-12 15:58:17 +05:30
Prateek Sunal
33b8039348 Merge remote-tracking branch 'origin/main' into flutter-upgrade 2025-08-12 15:46:31 +05:30
Neeraj Gupta
249206eadf [auth] Update assets for f-droid 2025-08-12 15:32:43 +05:30
Neeraj
2bf24be08e [auth] Fix path for auth workflows & delete oversized icons (#6830)
## Description

## Tests
2025-08-12 15:29:23 +05:30
Neeraj Gupta
7cc4ab57f3 Remove oversized assets 2025-08-12 15:24:38 +05:30
Manav Rathi
c84c29ed74 Caddy 2025-08-12 14:55:06 +05:30
Neeraj Gupta
cb03173c46 Fix path for auth linters 2025-08-12 14:52:05 +05:30
Neeraj
13a015434b [mob] Support for handling Custom domain (#6829)
## Description

## Tests
2025-08-12 14:49:30 +05:30
Neeraj Gupta
249009ae7e Clean up 2025-08-12 14:44:06 +05:30
Neeraj Gupta
b82956792a Separate change logs 2025-08-12 14:30:03 +05:30
Neeraj Gupta
4ba03d9a6a Update workflow 2025-08-12 13:53:21 +05:30
Neeraj Gupta
d6b4eec9b4 Merge remote-tracking branch 'origin/main' into custom_domain_handling 2025-08-12 13:50:26 +05:30
Neeraj Gupta
fb2743a8fe Update changelog 2025-08-12 13:50:16 +05:30
Prateek Sunal
c9c39b30ec chore: update changelog 2025-08-12 13:46:02 +05:30
Prateek Sunal
9eeb7efd4f [mob][photos] run ffmpeg in isolate (#5743)
## Description

- [x] Create a new service to use for FFmpeg in an isolate'ed
environment
- [x] Apply this service wherever we use FFmpeg Kit
- [x] Make FFMpeg accessible in an isolate (background)

## Tests

- [x] Test FFmpeg intergrations
2025-08-12 13:44:45 +05:30
Prateek Sunal
9fb52b8f95 fix: update changes 2025-08-12 13:44:01 +05:30
Prateek Sunal
8e7a6d2034 fix: rename variables 2025-08-12 13:43:38 +05:30
Prateek Sunal
9568c4819f chore: update timeout 2025-08-12 13:36:31 +05:30
Prateek Sunal
6e6ed7ea64 fix: logs 2025-08-12 13:31:25 +05:30
Neeraj Gupta
da590a643f Lint fixes 2025-08-12 13:28:00 +05:30
Neeraj Gupta
21c8af01a2 Update query 2025-08-12 13:25:39 +05:30
Prateek Sunal
00549d413e Merge remote-tracking branch 'origin/flutter-upgrade' into isolated-ffmpeg 2025-08-12 13:13:24 +05:30
Prateek Sunal
75e7fa5cde Merge remote-tracking branch 'origin/main' into flutter-upgrade 2025-08-12 13:13:09 +05:30
Prateek Sunal
1e81abf9d9 Merge branch 'flutter-upgrade' into isolated-ffmpeg 2025-08-12 13:12:58 +05:30
Neeraj Gupta
e9c41aed1e Alert for origin mismatch 2025-08-12 13:03:42 +05:30
Manav Rathi
0784da5b4e [web] Custom albums build for custom domains (#6826) 2025-08-12 12:39:01 +05:30
Manav Rathi
633caa7883 Custom albums build for custom domains 2025-08-12 12:29:09 +05:30
Manav Rathi
d4635c415b [web] Custom domains - WIP (#6825) 2025-08-12 12:02:27 +05:30
Neeraj Gupta
f3e5297878 Merge remote-tracking branch 'origin/main' into custom_domain_handling 2025-08-12 11:55:46 +05:30
Neeraj Gupta
5e993b9526 Support for custom domain url replacement 2025-08-12 11:55:24 +05:30
Neeraj Gupta
29d316349b Allow empty string 2025-08-12 11:49:32 +05:30
Manav Rathi
95ed8d23de Prep for merge 2025-08-12 11:31:46 +05:30
Manav Rathi
97d8d9fa8d Handle errors 2025-08-12 11:19:29 +05:30
Manav Rathi
149eb6c38d Not required 2025-08-12 11:19:29 +05:30
Manav Rathi
4c57c6b30f Tweak 2025-08-12 11:19:29 +05:30
Manav Rathi
3d12812671 Use 2025-08-12 11:19:29 +05:30
Manav Rathi
440818f1af Read from remote store 2025-08-12 11:19:29 +05:30
Manav Rathi
18e7a52848 Sketch 1 2025-08-12 11:19:28 +05:30
Manav Rathi
b099d16a32 Screen outline 2025-08-12 11:19:28 +05:30
Manav Rathi
46c588c512 Button 2025-08-12 11:19:28 +05:30
Neeraj Gupta
f248dbabe0 Refactor publicUrl construction logic 2025-08-12 11:10:34 +05:30
Neeraj Gupta
799e844de3 Parse fields for custom domain 2025-08-12 11:07:34 +05:30
Manav Rathi
5090e16d54 Make public 2025-08-12 10:25:24 +05:30
Neeraj Gupta
1d649c5a79 Store only domain 2025-08-12 10:01:32 +05:30
Neeraj Gupta
9d4474393e Merge branch 'main' into refactor_remote_store 2025-08-12 09:39:48 +05:30
Manav Rathi
073235c294 [web] New translations (#6807)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-web)
2025-08-12 09:26:28 +05:30
Neeraj
fe8da0b332 [mob] Use Github workflow's run_number for bumping up the versionCode (#6824)
## Description

## Tests
2025-08-12 09:03:05 +05:30
Neeraj Gupta
b98294c073 Update workflow 2025-08-12 09:01:48 +05:30
Neeraj
c962508987 [mobile] Fix Image editor (#6819)
## Description
- Fix bottom navigation bar color in light theme
- Fix initial color in paint editor
- Tap to reset tune adjustment value (brightness, exposure, etc..) and
add haptics when crossing zero
2025-08-12 08:55:22 +05:30
Neeraj Gupta
4ff211868e Update changes 2025-08-12 08:54:56 +05:30
Neeraj Gupta
527f2557b6 Merge remote-tracking branch 'origin/main' into fix-image-editor 2025-08-12 08:53:30 +05:30
Neeraj
a945753629 [auth] Remove hex from some multi-color icons (#6820)
This PR removes the hex value from some multi-color icons that were
added in #6694. Removing the hex will fix broken icons like this:
<img width="270" height="284" alt="image"
src="https://github.com/user-attachments/assets/8603ce89-b47d-4b4b-a809-5d67b7b30c6a"
/>
<img width="229" height="262" alt="image"
src="https://github.com/user-attachments/assets/c38a8bce-57c5-4607-ac7b-47c677ea3871"
/>
<img width="334" height="293" alt="image"
src="https://github.com/user-attachments/assets/fe1f95e5-66b6-49ce-9458-5fe17c98e0fa"
/>
<img width="302" height="269" alt="image"
src="https://github.com/user-attachments/assets/4c7f59d8-534a-47e2-95bc-b6f70a1f2921"
/>
2025-08-12 08:52:59 +05:30
Sven
22c60fb83e Remove hex from multi-color icons 2025-08-11 19:12:32 +02:00
Aman Raj Singh Mourya
740ba4a9bf [auth] Add allegro icon (#6814)
## Description
Added 1 new custom SVG icon:

- **allegro.svg**

-## Tests
2025-08-11 18:29:47 +05:30
Aman Raj Singh Mourya
229bfdc7ec Fix formatting 2025-08-11 18:28:20 +05:30
Neeraj
93b1af6ec0 [mob] FIx change log parsing (#6817)
## Description

## Tests
2025-08-11 17:37:01 +05:30
Neeraj Gupta
e8dde48688 Update workflow 2025-08-11 17:13:24 +05:30
Neeraj
d9145353b2 [mob] Modify daily build workflow (#6816)
## Description

## Tests
2025-08-11 17:04:39 +05:30
Neeraj Gupta
49c966f50c [mob] Modify daily build workflow 2025-08-11 17:03:58 +05:30
Neeraj
0ad83a3924 [mob] Add daily release workflow for photos (#6815)
## Description

## Tests
2025-08-11 16:33:02 +05:30
Neeraj Gupta
187a60ec3a Add daily release workflow for photos 2025-08-11 16:32:01 +05:30
Kremiorspokke
cabae4cca0 Update custom-icons.json 2025-08-11 12:32:39 +02:00
Kremiorspokke
cdfb9a7d0e Merge pull request #1 from Kremiorspokke/Kremiorspokke-patch-1
Add 1 new icon
2025-08-11 12:30:55 +02:00
Kremiorspokke
4860236f66 Add 1 new icon
Add polish e-commerce platfrom icon allegro
2025-08-11 12:22:41 +02:00
AmanRajSinghMourya
903762f283 fix: set initial color for painting editor 2025-08-11 15:34:02 +05:30
Neeraj
143d758b5b [auth] Fix "Copied to Clipboard" text behind clipboard (#6791)
## Description
This fixes https://github.com/ente-io/ente/issues/324
2025-08-11 13:39:08 +05:30
AmanRajSinghMourya
1d25f23053 fix: update haptic feedback when reached zero 2025-08-11 12:56:59 +05:30
Neeraj
67d661eeb6 [auth] New translations (#6809)
New translations from
[Crowdin](https://crowdin.com/project/ente-authenticator-app)
2025-08-11 12:25:08 +05:30
Neeraj Gupta
fe86363b1f Bump version 2025-08-11 12:22:38 +05:30
Neeraj Gupta
15967713a0 Merge branch 'flutter-upgrade' of https://github.com/ente-io/auth into flutter-upgrade 2025-08-11 12:22:21 +05:30
Neeraj Gupta
2dafd62e14 Merge remote-tracking branch 'origin/main' into flutter-upgrade 2025-08-11 12:22:00 +05:30
Neeraj
46865eff26 [mob] Gracefully handle decompress image exception (#6811)
## Description
On Android 16 with flutter upgrade, we are seeing `Could not decompress
image.` error for heic images taken from Iphone 16.
Instead of showing broken image, rendering the compressed version of the
image on UI.

Also, increased the minWidth/minWidth from default 1920/1080 to 8000/800

Refer:
https://pub.dev/packages/flutter_image_compress#minwidth-and-minheight
> If your image width is smaller than minWidth or height smaller than
minHeight, scale will be 1, that is, the size will not change.

```
E/FlutterJNI( 7914): Failed to decode image
E/FlutterJNI( 7914): java.io.IOException: getPixels failed with error invalid input
E/FlutterJNI( 7914):     at android.graphics.ImageDecoder.nDecodeBitmap(Native Method)
E/FlutterJNI( 7914):     at android.graphics.ImageDecoder.decodeBitmapInternal(ImageDecoder.java:1676)
E/FlutterJNI( 7914):     at android.graphics.ImageDecoder.decodeBitmapImpl(ImageDecoder.java:1865)
E/FlutterJNI( 7914):     at android.graphics.ImageDecoder.decodeBitmap(ImageDecoder.java:1850)
E/FlutterJNI( 7914):     at io.flutter.embedding.engine.FlutterJNI.decodeImage(FlutterJNI.java:571)
```

## Tests

Tested locally on Simulator with sample image.
2025-08-11 11:56:07 +05:30
Neeraj Gupta
36d45c7774 Change min Width/Height value during compress 2025-08-11 11:32:34 +05:30
Neeraj Gupta
fc0b86ffe6 Gracefully handle image decompress error 2025-08-11 11:32:07 +05:30
laurenspriem
1c75259e8f Merge branch 'isolate_issue' into flutter-upgrade 2025-08-11 11:28:53 +05:30
Crowdin Bot
6ac19de2af New Crowdin translations by GitHub Action 2025-08-11 01:18:24 +00:00
Crowdin Bot
a4e8a70c31 New Crowdin translations by GitHub Action 2025-08-11 01:05:16 +00:00
Crowdin Bot
4875ddf30c New Crowdin translations by GitHub Action 2025-08-11 00:44:23 +00:00
AmanRajSinghMourya
72f9d9e756 refactor: fix bottom navigation bar colors 2025-08-09 23:34:15 +05:30
AmanRajSinghMourya
e32698e4be update editor background color across image and video editor components 2025-08-09 23:33:36 +05:30
AmanRajSinghMourya
0b73388b0b fix search view background color 2025-08-09 11:35:00 +05:30
Neeraj
8fa63ba9fb [server] Fix typo in file link grouping (#6798) 2025-08-09 10:42:19 +05:30
Neeraj
15175a261a [mobile/photos] New translations (#6743)
New translations from
[Crowdin](https://crowdin.com/project/ente-photos-app)
2025-08-09 09:01:50 +05:30
Neeraj Gupta
b0eb362037 Fix typo in file link grouping 2025-08-09 06:19:54 +05:30
Neeraj Gupta
7996ab4a3e Minor fixes 2025-08-08 16:36:50 +05:30
eYdr1en
d4bfbbf04c fix comments 2025-08-08 12:40:51 +02:00
eYdr1en
92a03ce585 [auth] fix Copied to Clipboard text behind clipboard 2025-08-08 12:37:15 +02:00
Neeraj Gupta
1c37332f37 Endpoint to check domain claim 2025-08-08 15:40:05 +05:30
Neeraj Gupta
23103c3bcc Handle claimed domain error 2025-08-08 15:31:14 +05:30
Neeraj Gupta
920702c5dd Add validation 2025-08-08 15:31:02 +05:30
Neeraj Gupta
3167d85f06 Add index for customDomain 2025-08-08 15:25:04 +05:30
Neeraj Gupta
bc1ae62477 Ability to configure cname 2025-08-08 14:06:26 +05:30
Neeraj Gupta
1af834aa7a Remove unused field 2025-08-08 14:02:36 +05:30
Prateek Sunal
69f6fdc9c7 Merge branch 'main' into flutter-upgrade 2025-08-08 13:25:52 +05:30
Prateek Sunal
1327a1f8cf chore: bump version 2025-08-08 13:24:50 +05:30
Prateek Sunal
52d2577236 chore: bump version 2025-08-08 13:23:19 +05:30
Neeraj Gupta
f2dc157e8a Support for customDomain flag 2025-08-08 13:10:57 +05:30
Prateek Sunal
6c614f2649 fix: re-add pro_image_editor 2025-08-06 22:11:39 +05:30
Prateek Sunal
fc593e86ee chore: update locks 2025-08-06 17:38:15 +05:30
Prateek Sunal
5c489f3358 Merge remote-tracking branch 'origin/main' into flutter-upgrade 2025-08-06 17:37:16 +05:30
Prateek Sunal
899993a23b chore: bump everywhere 2025-08-06 17:07:07 +05:30
Prateek Sunal
6dd23fa5ff chore: bump things 2025-08-06 17:05:54 +05:30
Crowdin Bot
fa230333a4 New Crowdin translations by GitHub Action 2025-08-04 01:06:03 +00:00
laurenspriem
f47cff472a pragma entry point fo rother isolates 2025-07-24 17:20:27 +02:00
laurenspriem
8cc6bd6621 Fix potential isolate issue 2025-07-24 16:28:41 +02:00
Prateek Sunal
78055a25d0 Merge branch 'flutter-upgrade' into isolated-ffmpeg 2025-07-23 14:40:14 +05:30
Prateek Sunal
b050f683c8 Merge remote-tracking branch 'origin/main' into flutter-upgrade 2025-07-23 14:39:52 +05:30
Prateek Sunal
9141db8d47 Merge branch 'flutter-upgrade' into isolated-ffmpeg 2025-07-23 14:39:17 +05:30
Prateek Sunal
4ff77067dc chore: update flutter version for auth build 2025-07-21 00:36:21 +05:30
Prateek Sunal
437b3d028a chore: update locks 2025-07-21 00:34:27 +05:30
Prateek Sunal
8afc4bb0cb fix: switch to old version lock 2025-07-21 00:23:24 +05:30
Prateek Sunal
ecd3ce850f chore: update lock file 2025-07-21 00:04:34 +05:30
Prateek Sunal
bc61727e8b Merge branch 'flutter-upgrade' into isolated-ffmpeg 2025-07-21 00:04:06 +05:30
Prateek Sunal
32f987e551 chore: downgrade to 3.29.3 2025-07-21 00:03:27 +05:30
Prateek Sunal
3596d0e42d fix: downgrade flutter upgrade to 3.29.3 2025-07-21 00:02:34 +05:30
Prateek Sunal
99d84a1154 fix: remove log level 2025-07-14 14:43:00 +05:30
Prateek Sunal
126a96326f fix: don't use computer for ffmpeg isolate 2025-07-14 11:59:55 +05:30
Prateek Sunal
b7ead2004a fix: do isolate things without combine package 2025-07-14 11:39:25 +05:30
Prateek Sunal
87fad99863 Merge remote-tracking branch 'origin/flutter-upgrade' into isolated-ffmpeg 2025-07-14 09:00:19 +05:30
Prateek Sunal
9f727bb95d feat: upgrade auth to flutter 3.32 2025-07-11 20:28:43 +05:30
Prateek Sunal
bd42a4d1f6 Merge branch 'flutter-upgrade' into isolated-ffmpeg 2025-07-11 16:10:32 +05:30
Prateek Sunal
22e0cd2168 chore: update locks 2025-07-11 16:09:53 +05:30
Prateek Sunal
0662baac73 Merge remote-tracking branch 'origin/main' into flutter-upgrade 2025-07-11 16:09:12 +05:30
Prateek Sunal
ef3c561cf1 fix: no log output 2025-07-11 15:27:28 +05:30
Prateek Sunal
6f07399b5a Merge remote-tracking branch 'origin/flutter-upgrade' into isolated-ffmpeg 2025-07-11 12:31:11 +05:30
Prateek Sunal
8524742c92 Merge remote-tracking branch 'origin/main' into flutter-upgrade 2025-07-11 12:30:56 +05:30
Prateek Sunal
9125090a3d fix: bg changes 2025-07-10 19:04:32 +05:30
Prateek Sunal
4a552fbcb4 Merge remote-tracking branch 'origin/flutter-upgrade' into isolated-ffmpeg 2025-07-10 18:53:46 +05:30
Prateek Sunal
85ef085084 chore: lint fix 2025-07-10 18:53:23 +05:30
Prateek Sunal
f1d128f6b0 Merge remote-tracking branch 'origin/main' into flutter-upgrade 2025-07-10 18:53:07 +05:30
Prateek Sunal
c925ed2117 fix: issues 2025-07-10 18:52:46 +05:30
Prateek Sunal
142a5f9661 fix: issue 2025-07-10 18:52:36 +05:30
Prateek Sunal
ae0c83b1aa Merge branch 'flutter-upgrade' into isolated-ffmpeg 2025-07-08 18:47:50 +05:30
Prateek Sunal
8f1ee2ef15 Merge remote-tracking branch 'origin/main' into flutter-upgrade 2025-07-08 18:47:35 +05:30
Prateek Sunal
f1d978fbf7 fix: use combine for method channel communication 2025-07-08 18:46:51 +05:30
Prateek Sunal
4604280ef8 fix: move ffmpeg and ffprobe to isolate 2025-07-07 18:41:03 +05:30
Prateek Sunal
18ab4060b2 Merge remote-tracking branch 'origin/flutter-upgrade' into isolated-ffmpeg 2025-07-07 13:17:08 +05:30
Prateek Sunal
9a4d465672 chore: update runner scheme 2025-07-07 13:16:49 +05:30
Prateek Sunal
7ea9483cca fix: dependency 2025-07-07 13:10:59 +05:30
Prateek Sunal
d9add4f827 chore: update locks 2025-07-07 11:56:43 +05:30
Prateek Sunal
3c19c00a70 Merge remote-tracking branch 'origin/flutter-upgrade' into isolated-ffmpeg 2025-07-07 11:52:46 +05:30
Prateek Sunal
12c19d1ed1 Merge remote-tracking branch 'origin/main' into flutter-upgrade 2025-07-07 11:52:24 +05:30
Prateek Sunal
c757b837f1 fix: update flutter version in all sources 2025-07-07 11:44:42 +05:30
Prateek Sunal
a9f1c0dbd4 fix: fetch the ffmpeg source at first 2025-07-07 11:42:35 +05:30
Prateek Sunal
896d77a83e fix: upgrade plugins 2025-07-07 11:28:56 +05:30
Prateek Sunal
b1210e1d15 Merge remote-tracking branch 'origin/flutter-upgrade' into isolated-ffmpeg 2025-07-04 16:55:15 +05:30
Prateek Sunal
127df30242 fix: readd workmanager 2025-07-04 16:55:04 +05:30
Prateek Sunal
c0c17af51a Merge remote-tracking branch 'origin/flutter-upgrade' into isolated-ffmpeg 2025-07-04 16:48:16 +05:30
Prateek Sunal
d92ec2276e chore: update lock files 2025-07-04 16:44:43 +05:30
Prateek Sunal
1f99727ab9 fix: update git ignore 2025-07-04 16:43:52 +05:30
Prateek Sunal
85784920a9 fix: remove unwanted files 2025-07-04 16:41:12 +05:30
Prateek Sunal
d7b3af063b Merge remote-tracking branch 'origin/main' into flutter-upgrade 2025-07-04 16:38:37 +05:30
Prateek Sunal
baa3d49d4b fix: add desugaring for flutter_local_notifications to work 2025-06-18 16:00:27 +05:30
Prateek Sunal
d2c2062256 fix: upgeade gradle 2025-06-18 16:00:13 +05:30
Prateek Sunal
c646909765 fix: don't pin collection and path 2025-06-18 14:00:31 +05:30
Prateek Sunal
8b4f03b256 fix: temp commit, to revert 2025-06-17 14:44:25 +05:30
Prateek Sunal
976bd0134c fix: log string 2025-06-17 14:44:16 +05:30
Prateek Sunal
8a785aac8f Merge branch 'flutter-upgrade' into isolated-ffmpeg 2025-06-16 17:21:17 +05:30
Prateek Sunal
452812af11 chore(ios): update lock files 2025-06-16 17:18:49 +05:30
Prateek Sunal
44fb8fec1a Merge remote-tracking branch 'origin/main' into flutter-upgrade 2025-06-16 17:17:55 +05:30
Prateek Sunal
1d8fc7aba8 fix: revert back to old l10n 2025-06-16 17:08:51 +05:30
Prateek Sunal
654db76175 fix: format files 2025-06-16 17:06:50 +05:30
Prateek Sunal
364170f38d fix: DialogTheme 2025-06-16 17:04:10 +05:30
Prateek Sunal
0cd7c92672 fix: add intl based locals as well 2025-06-16 17:04:02 +05:30
Prateek Sunal
962aaa1b7a Merge remote-tracking branch 'origin/main' into flutter-upgrade 2025-06-16 14:54:37 +05:30
Prateek Sunal
6ec0c550a3 chore: lock deps 2025-06-16 14:53:25 +05:30
Prateek Sunal
b67fcdb9ed fix: map and image editor related issues 2025-06-16 14:46:51 +05:30
Prateek Sunal
2f4c3c7777 feat: upgrade deps (incomplete) 2025-06-16 12:58:13 +05:30
Prateek Sunal
cb84164466 Merge remote-tracking branch 'origin/main' into flutter-upgrade 2025-06-12 18:44:10 +05:30
Prateek Sunal
7b6aed426d Merge remote-tracking branch 'origin/main' into flutter-upgrade 2025-06-12 16:55:23 +05:30
Prateek Sunal
81c539979d Merge remote-tracking branch 'origin/main' into flutter-upgrade 2025-06-06 14:35:39 +05:30
Prateek Sunal
3cffd969b4 feat: bump flutter to 3.29 2025-06-06 14:35:30 +05:30
Prateek Sunal
fbb15adf11 Merge remote-tracking branch 'origin/main' into isolated-ffmpeg 2025-05-02 10:56:28 +05:30
Prateek Sunal
3efd36ab7b fix: statitify things and log error 2025-04-29 00:55:40 +05:30
Prateek Sunal
11cb355e98 fix: remove init from main 2025-04-29 00:54:14 +05:30
Prateek Sunal
caadca9a48 fix: reencode audio as aac 2025-04-29 00:54:04 +05:30
Prateek Sunal
0a50e33023 Merge remote-tracking branch 'origin/main' into isolated-ffmpeg 2025-04-28 13:09:03 +05:30
Prateek Sunal
5eef2a5816 fix: update isolated function 2025-04-28 13:08:42 +05:30
Prateek Sunal
fe4bf5c217 Merge remote-tracking branch 'origin/main' into isolated-ffmpeg 2025-04-28 12:10:47 +05:30
Prateek Sunal
912fc72600 Add ffmpeg framework support and refactor video processing to isolated service 2025-04-17 03:39:59 +05:30
267 changed files with 4051 additions and 2291 deletions

View File

@@ -5,7 +5,7 @@ on:
branches: [main]
paths:
# Run workflow when auth's intl_en.arb is changed
- "auth/lib/l10n/arb/app_en.arb"
- "mobile/apps/auth/lib/l10n/arb/app_en.arb"
# Or the workflow itself is changed
- ".github/workflows/auth-crowdin.yml"

View File

@@ -4,7 +4,7 @@ on:
workflow_dispatch: # Allow manually running the action
env:
FLUTTER_VERSION: "3.24.3"
FLUTTER_VERSION: "3.32.8"
permissions:
contents: write

View File

@@ -4,11 +4,11 @@ on:
# Run on every pull request (open or push to it) that changes auth/
pull_request:
paths:
- "auth/**"
- "mobile/apps/auth/**"
- ".github/workflows/auth-lint.yml"
env:
FLUTTER_VERSION: "3.24.3"
FLUTTER_VERSION: "3.32.8"
permissions:
contents: read

View File

@@ -29,7 +29,7 @@ on:
- "auth-v*"
env:
FLUTTER_VERSION: "3.24.3"
FLUTTER_VERSION: "3.32.8"
permissions:
contents: write

View File

@@ -0,0 +1,140 @@
name: "Internal release (photos)"
on:
schedule:
# Runs daily at 12:30 UTC (6:00 PM IST)
- cron: "30 12 * * *"
workflow_dispatch: # Allow manual trigger
env:
FLUTTER_VERSION: "3.32.8"
permissions:
contents: read
jobs:
build:
runs-on: ubuntu-latest
defaults:
run:
working-directory: mobile/apps/photos
steps:
- name: Checkout code and submodules
uses: actions/checkout@v4
with:
submodules: recursive
- name: Setup JDK 17
uses: actions/setup-java@v1
with:
java-version: 17
- name: Install Flutter ${{ env.FLUTTER_VERSION }}
uses: subosito/flutter-action@v2
with:
channel: "stable"
flutter-version: ${{ env.FLUTTER_VERSION }}
cache: true
- name: Increment version code for build
run: |
CURRENT_VERSION=$(grep '^version:' pubspec.yaml | sed 's/version: //')
VERSION_NAME=$(echo $CURRENT_VERSION | cut -d'+' -f1)
CURRENT_BUILD=$(echo $CURRENT_VERSION | cut -d'+' -f2)
NEW_BUILD=$((CURRENT_BUILD + ${{ github.run_number }}))
NEW_VERSION="${VERSION_NAME}+${NEW_BUILD}"
sed -i "s/^version: .*/version: $NEW_VERSION/" pubspec.yaml
echo "Building with version ${NEW_VERSION}"
# Store version for later use
echo "NEW_VERSION=${NEW_VERSION}" >> $GITHUB_ENV
- name: Prepare and validate changelog for Play Store
run: |
mkdir -p whatsnew
CHANGELOG_FILE="scripts/store_changes.txt"
DISCORD_FILE="scripts/internal_changes.txt"
OUTPUT_FILE="whatsnew/whatsnew-en-US"
# Use provided changelog or fallback
if [ -f "$CHANGELOG_FILE" ]; then
head -c 500 "$CHANGELOG_FILE" > "$OUTPUT_FILE"
else
echo "Bug fixes and improvements" > "$OUTPUT_FILE"
fi
# Validate: file exists
if [ ! -s "$OUTPUT_FILE" ]; then
echo "❌ Changelog is empty."
exit 1
fi
# Validate: <= 500 chars
LENGTH=$(wc -m < "$OUTPUT_FILE")
if [ "$LENGTH" -gt 500 ]; then
echo "❌ Changelog exceeds 500 characters ($LENGTH)."
exit 1
fi
# Validate: no markdown or HTML
if grep -Eq '[\*\_\<\>\[\]\(\)]' "$OUTPUT_FILE"; then
echo "❌ Changelog contains markdown/HTML formatting."
exit 1
fi
echo "✅ Changelog valid:"
cat "$OUTPUT_FILE"
# Store changelog for Play Store (with escaped newlines)
CHANGELOG_PLAYSTORE=$(cat "$OUTPUT_FILE" | sed ':a;N;$!ba;s/\n/\\n/g' | sed 's/"/\\"/g')
echo "CHANGELOG=${CHANGELOG_PLAYSTORE}" >> $GITHUB_ENV
# Store changelog for Discord (with proper newlines)
CHANGELOG_DISCORD=$(cat "$DISCORD_FILE" | sed 's/"/\\"/g')
echo "CHANGELOG_DISCORD<<EOF" >> $GITHUB_ENV
echo "$CHANGELOG_DISCORD" >> $GITHUB_ENV
echo "EOF" >> $GITHUB_ENV
- name: Setup keys
uses: timheuer/base64-to-file@v1
with:
fileName: "keystore/ente_photos_key.jks"
encodedString: ${{ secrets.SIGNING_KEY_PHOTOS }}
- name: Build PlayStore AAB
run: |
flutter build appbundle --dart-define=cronetHttpNoPlay=true --release --flavor playstore
env:
SIGNING_KEY_PATH: "/home/runner/work/_temp/keystore/ente_photos_key.jks"
SIGNING_KEY_ALIAS: ${{ secrets.SIGNING_KEY_ALIAS_PHOTOS }}
SIGNING_KEY_PASSWORD: ${{ secrets.SIGNING_KEY_PASSWORD_PHOTOS }}
SIGNING_STORE_PASSWORD: ${{ secrets.SIGNING_STORE_PASSWORD_PHOTOS }}
- name: Upload AAB to PlayStore
uses: r0adkll/upload-google-play@v1
with:
serviceAccountJsonPlainText: ${{ secrets.SERVICE_ACCOUNT_JSON }}
packageName: io.ente.photos
releaseFiles: mobile/apps/photos/build/app/outputs/bundle/playstoreRelease/app-playstore-release.aab
track: internal
whatsNewDirectory: mobile/apps/photos/whatsnew
mappingFile: mobile/apps/photos/build/app/outputs/mapping/playstoreRelease/mapping.txt
- name: Notify Discord
uses: sarisia/actions-status-discord@v1
with:
webhook: ${{ secrets.DISCORD_INTERNAL_RELEASE_WEBHOOK }}
nodetail: true
title: "🏆 Daily release Photos v${{ env.NEW_VERSION }} (Branch: ${{ github.ref_name }})"
description: |
**Version:** ${{ env.NEW_VERSION }}
**Flutter:** ${{ env.FLUTTER_VERSION }}
**Commit:** [${{ github.sha }}](${{ github.server_url }}/${{ github.repository }}/commit/${{ github.sha }})
**Download:** [Play Store](https://play.google.com/store/apps/details?id=io.ente.photos)
**Changes:**
${{ env.CHANGELOG_DISCORD }}
color: 0x00ff00

View File

@@ -1,10 +1,10 @@
name: "Internal release (photos)"
name: "Internal release (photos with rust)"
on:
workflow_dispatch: # Allow manually running the action
env:
FLUTTER_VERSION: "3.24.3"
FLUTTER_VERSION: "3.32.8"
RUST_VERSION: "1.85.1"
permissions:

View File

@@ -1,10 +1,10 @@
name: "Internal release (photos)"
name: "Old Internal release (photos)"
on:
workflow_dispatch: # Allow manually running the action
env:
FLUTTER_VERSION: "3.24.3"
FLUTTER_VERSION: "3.32.8"
permissions:
contents: write

View File

@@ -8,7 +8,7 @@ on:
- ".github/workflows/mobile-lint.yml"
env:
FLUTTER_VERSION: "3.24.3"
FLUTTER_VERSION: "3.32.8"
permissions:
contents: read

View File

@@ -9,7 +9,7 @@ on:
- "photos-v*"
env:
FLUTTER_VERSION: "3.24.3"
FLUTTER_VERSION: "3.32.8"
permissions:
contents: write

View File

@@ -4,7 +4,7 @@ on:
workflow_dispatch: # Manual trigger only
env:
FLUTTER_VERSION: "3.24.3"
FLUTTER_VERSION: "3.32.8"
ANDROID_KEYSTORE_PATH: "keystore/ente_photos_key.jks"
jobs:

View File

@@ -54,6 +54,18 @@ jobs:
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
command: pages deploy --project-name=ente --commit-dirty=true --branch=deploy/photos web/apps/photos/out
- name: Build custom-albums
run: yarn build:photos
env:
NEXT_PUBLIC_ENTE_ONLY_SERVE_ALBUMS_APP: 1
- name: Publish custom-albums
uses: cloudflare/wrangler-action@v3
with:
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
command: pages deploy --project-name=ente --commit-dirty=true --branch=deploy/custom-albums web/apps/photos/out
- name: Build accounts
run: yarn build:accounts

View File

@@ -0,0 +1,15 @@
{
email custom-domains@ente.io
on_demand_tls {
ask https://api.ente.io/custom-domain
}
}
https:// {
tls {
on_demand
}
reverse_proxy https://custom-albums.ente.io {
header_up Host {upstream_hostport}
}
}

View File

@@ -0,0 +1,19 @@
# Caddy
Caddy is used to terminate TLS and manage certificates for custom domains.
## Installation
```sh
sudo mkdir -p /root/caddy/conf
sudo mv Caddyfile /root/caddy/conf
sudo chown root:root /root/caddy/conf/Caddyfile
```
Rest of it works like our other systemd services.
If the Caddyfile changes, the running instance can be updated without restarts by using `sudo systemctl reload caddy`.
## Backups
The entire `/root/caddy` directory can be backed up and contains the everything needed to resurrect the same setup.

View File

@@ -0,0 +1,17 @@
[Unit]
Documentation=https://caddyserver.com/docs/running
Requires=docker.service
After=docker.service
[Service]
ExecStartPre=docker pull caddy
ExecStartPre=-docker stop caddy
ExecStartPre=-docker rm caddy
ExecStart=docker run --name caddy \
--cap-add NET_ADMIN \
-p 80:80 -p 443:443 -p 443:443/udp \
-v /root/caddy/conf:/etc/caddy \
-v /root/caddy/data:/data \
-v /root/caddy/config:/config \
caddy
ExecReload=docker exec -w /etc/caddy caddy caddy reload

View File

@@ -1,3 +1,3 @@
{
"flutter": "3.24.3"
"flutter": "3.32.8"
}

View File

@@ -44,4 +44,5 @@ android/key.properties
dist/
# FVM Version Cache
.fvm/
.fvm/
lib/l10n/arb/*.dart

View File

@@ -44,7 +44,7 @@ or managing your secrets, please use our mobile or desktop app.
## 🧑‍💻 Build from source
1. [Install Flutter](https://flutter.dev/docs/get-started/install)
1. [Install Flutter v3.32.8](https://flutter.dev/docs/get-started/install).
2. Pull in all submodules with `git submodule update --init --recursive`

View File

@@ -17,8 +17,7 @@
"uidai",
"UIDAI",
"Unique Identification Authority of India"
],
"hex": "FBB401"
]
},
{
"title": "Accredible",
@@ -57,8 +56,7 @@
},
{
"title": "Amtrak",
"slug": "amtrak",
"hex": "003A5D"
"slug": "amtrak"
},
{
"title": "Animal Crossing",
@@ -69,10 +67,6 @@
"BellTree Forums"
]
},
{
"title": "AnimeZ.to",
"slug": "animez"
},
{
"title": "Ankama",
"slug": "ankama"
@@ -94,13 +88,6 @@
"Docaposte AR24"
]
},
{
"title": "Art Fight",
"slug": "art_fight",
"altNames": [
"ArtFight"
]
},
{
"title": "Aruba",
"slug": "aruba",
@@ -169,14 +156,6 @@
"Blizzard"
]
},
{
"title": "BBS.NGA",
"slug": "bbs_nga",
"altNames": [
"NGA玩家社区",
"NGA社区"
]
},
{
"title": "Belo"
},
@@ -321,8 +300,7 @@
},
{
"title": "Caltrain",
"slug": "caltrain",
"hex": "E31837"
"slug": "caltrain"
},
{
"title": "Canva"
@@ -387,8 +365,7 @@
"ClipperCard",
"clipper-card",
"Clipper Card"
],
"hex": "006298"
]
},
{
"title": "CloudAMQP"
@@ -433,8 +410,7 @@
},
{
"title": "Coolify",
"slug": "coolify",
"hex": "8C52FF"
"slug": "coolify"
},
{
"title": "Crowdpear"
@@ -483,25 +459,6 @@
"cwallet.com"
]
},
{
"title": "U.S. Department of Homeland Security",
"slug": "us_dhs",
"altNames": [
"DHS",
"dhs",
"United States Department of Homeland Security",
"uscis",
"USCIS",
"U.S. Citizenship and Immigration Services",
"cbp",
"CBP",
"U.S. Customs and Border Protection",
"U.S. Immigration and Customs Enforcement",
"ice",
"ICE"
],
"hex": "005189"
},
{
"title": "DCS",
"altNames": [
@@ -547,8 +504,7 @@
"altNames": [
"Domino's",
"Domino's Pizza"
],
"hex": "0B648F"
]
},
{
"title": "Doppler"
@@ -571,8 +527,7 @@
"Dunkin'",
"Dunkin",
"Dunkin Donuts"
],
"hex": "C63663"
]
},
{
"title": "eBay"
@@ -638,8 +593,7 @@
},
{
"title": "Experian",
"slug": "experian",
"hex": "AF1685"
"slug": "experian"
},
{
"title": "Fanatical",
@@ -763,8 +717,7 @@
"altNames": [
"green man gaming",
"gmg"
],
"hex": "00E205"
]
},
{
"title": "Guideline"
@@ -891,8 +844,7 @@
},
{
"title": "Kayak",
"slug": "kayak",
"hex": "FF6900"
"slug": "kayak"
},
{
"title": "Keygen",
@@ -1193,8 +1145,7 @@
"slug": "njtransit",
"altNames": [
"NJ Transit"
],
"hex": "1A2B57"
]
},
{
"title": "nordvpn",
@@ -1299,8 +1250,7 @@
"slug": "pcpartpicker",
"altNames": [
"PC Part Picker"
],
"hex": "EDA920"
]
},
{
"title": "Peerberry"
@@ -1510,8 +1460,7 @@
"altNames": [
"onlinesbi",
"State Bank of India"
],
"hex": "12A8E0"
]
},
{
"title": "SEI",
@@ -1552,9 +1501,6 @@
{
"title": "Skinport"
},
{
"title": "Smogon"
},
{
"title": "SMSPool",
"slug": "sms_pool_net",
@@ -1612,8 +1558,7 @@
},
{
"title": "Supercell",
"slug": "supercell",
"hex": "000000"
"slug": "supercell"
},
{
"title": "Surfshark"
@@ -1696,8 +1641,7 @@
"altNames": [
"StoryGraph",
"TheStoryGraph"
],
"hex": "15919B"
]
},
{
"title": "tianyiyun",
@@ -1872,8 +1816,7 @@
"Washington Metro",
"DC Metro",
"Washington Metropolitan Area Transit Authority"
],
"hex": "2D2D2D"
]
},
{
"title": "Wolvesville"
@@ -1993,6 +1936,10 @@
{
"title": "ISC2",
"slug": "isc2"
},
{
"title": "Allegro",
"slug": "allegro"
}
]
}
}

View File

@@ -0,0 +1,8 @@
<svg version="1.2" baseProfile="tiny-ps" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1386 1594" width="1386" height="1594">
<title>logo (15)-svg copy-svg</title>
<style>
tspan { white-space:pre }
.shp0 { fill: #ff5a00 }
</style>
<path id="Layer" fill-rule="evenodd" class="shp0" d="M1385.14 634.99L1385.14 1547.13C1385.14 1553.03 1384.01 1558.88 1381.76 1564.35C1379.45 1569.82 1376.13 1574.75 1372 1578.93C1367.82 1583.11 1362.83 1586.44 1357.36 1588.69C1351.89 1590.94 1346.04 1592.12 1340.14 1592.12L570.51 1592.12C534.63 1594.16 498.65 1593.2 462.98 1589.23C427.26 1585.26 391.98 1578.29 357.44 1568.42C322.9 1558.55 289.28 1545.79 256.88 1530.35C224.49 1514.85 193.44 1496.67 164.05 1475.97C137.02 1453.77 112.73 1428.52 91.6 1400.63C70.47 1372.8 52.66 1342.56 38.61 1310.54C24.56 1278.53 14.32 1244.96 8.1 1210.59C1.82 1176.16 -0.32 1141.14 1.61 1106.29L1.61 1101.41C1.61 641.05 502.94 580.24 666.61 580.24L1046.9 580.24L1046.9 546.83C1047.7 524.84 1045.5 502.8 1040.36 481.41C1035.21 460.01 1027.22 439.42 1016.54 420.17C1005.87 400.92 992.63 383.17 977.23 367.51C961.79 351.8 944.25 338.28 925.21 327.29C785.88 256.77 512.11 282.89 283.91 423.38C278.5 428.1 271.85 431.32 264.77 432.66C257.69 434 250.34 433.47 243.53 431.05C236.72 428.64 230.66 424.46 225.99 418.93C221.38 413.41 218.27 406.76 216.98 399.63L202.99 171.03C202.99 168.08 203.31 165.18 204.06 162.34C204.76 159.5 205.88 156.77 207.33 154.19C208.73 151.67 210.5 149.31 212.53 147.22C214.62 145.13 216.93 143.31 219.45 141.8C259.67 118.58 301.4 97.99 344.3 80.24C387.26 62.49 431.29 47.59 476.17 35.63C521.12 23.67 566.75 14.71 612.82 8.76C658.89 2.86 705.33 -0.03 751.78 0.13C937.98 0.13 1138.77 54.24 1238.52 163.09C1338.32 271.95 1384.55 429.44 1384.55 636.81L1385.14 634.99ZM1046.9 858.76L687.31 858.76C410.48 858.76 355.13 1022.96 355.13 1105.05C354.87 1119.64 356.37 1134.17 359.64 1148.38C362.91 1162.59 367.9 1176.32 374.49 1189.3C381.09 1202.33 389.24 1214.45 398.84 1225.44C408.39 1236.49 419.22 1246.25 431.18 1254.61C442.71 1263.35 454.94 1271.18 467.7 1277.99C480.47 1284.8 493.71 1290.65 507.39 1295.47C521.01 1300.25 535.06 1304 549.27 1306.63C563.48 1309.26 577.91 1310.76 592.39 1311.19L1046.9 1311.19L1046.9 858.76Z" />
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 25 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 35 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 50 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 18 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 23 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 9.2 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View File

@@ -1,170 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" version="1.1" width="451.00259" height="507.332" viewBox="0 0 451.00259 507.332" id="svg2">
<defs id="defs4"/>
<metadata id="metadata7">
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
<dc:title/>
</cc:Work>
</rdf:RDF>
</metadata>
<g transform="translate(-197.35585,-58.696183)" id="layer1">
<g transform="translate(28.601602,6.2831826)" id="g2986">
<g id="g2988">
<g id="g2990">
<path d="m 284.953,425.625 c -41.441,-0.008 -74.219,-15.391 -94.77,-44.48 -23.637,-33.461 -28.066,-83.176 -11.559,-129.75 21.262,-60.016 68.266,-89.355 68.742,-89.641 l 2.801,-1.703 4.555,-14.98 21.422,4.02 14.844,29.734 -0.773,5.273 c -0.738,4.98 -1.48,9.875 -2.215,14.695 l -0.191,1.238 c -5.277,34.695 -9.832,64.66 -6.102,82.488 2.242,10.711 7.199,17.898 15.895,22.906 2.984,-3.594 5.02,-5.305 7.535,-5.305 h 0.812 l 0.98,0.34 c 3.582,1.434 4.047,5.508 3.922,10.246 0.348,0.098 0.703,0.199 1.07,0.289 6.363,1.621 11.062,5.375 13.602,10.852 4.191,9.082 0.234,17.125 -3.254,24.215 -2.578,5.238 -6.379,12.953 -8.754,23.418 3.586,6.008 4.141,11.75 3.934,15.641 -0.297,5.516 -2.406,11.066 -5.996,15.848 1.102,4.875 0.484,9.473 -1.844,13.688 -5.285,9.566 -15.68,10.465 -19.094,10.754 -1.574,0.137 -3.34,0.215 -5.262,0.215 h -0.3 z" id="path2992" style="fill:#260859"/>
</g>
<g id="g2994">
<path d="m 506.766,425.695 c -6.77,0 -12.57,-2.73 -16.773,-7.902 -8.246,-10.133 -6.812,-26.621 -3.918,-41.938 -3.145,-2.297 -7.34,-5.594 -9.633,-10.934 l -5.355,-12.438 11.875,-6.527 c 24.914,-13.723 34.227,-39.723 27.668,-77.289 -2.957,-4.148 -7.086,-11.844 -10.824,-25.562 -2.727,-10.008 -13.16,-72.691 -7.508,-83.227 1.012,-1.898 5.035,-8.109 14.039,-8.109 5.695,0 19.23,3.664 28.004,12.398 0.246,-0.012 0.488,-0.016 0.734,-0.016 5.488,0 9.648,2.668 13.672,5.242 l 0.477,0.301 c 1.07,0.68 2.219,1.41 3.492,2.164 2.246,1.336 6.668,3.961 10.598,9.719 6.301,1.035 11.359,5.949 20.273,15.086 0.207,0.219 0.996,1.027 1.203,1.227 2.219,2.195 3.977,5.051 5.602,9.125 11.438,4.383 18.34,21.609 19.629,27.852 l 0.508,1.938 c 15.383,58.23 11.477,106.727 -11.297,140.25 -18.512,27.266 -48.637,43.574 -89.535,48.465 -1.045,0.117 -1.994,0.175 -2.931,0.175 l 0,0 z" id="path2996" style="fill:#260859"/>
</g>
</g>
<path d="M 382.699,555.371 C 362.824,548.375 188.613,484.344 188.613,390.375 l 0.012,-281.641 c 0,-25.367 21.531,-46.004 47.996,-46.004 16.855,0 32.289,8.32 40.957,21.902 31.453,-3.801 73.332,-11.934 99.66,-23.809 l 2.559,-1.129 15.438,-7.281 16.172,7.629 c 26.121,12.301 69,20.699 101.461,24.602 8.672,-13.59 24.102,-21.914 40.949,-21.914 26.473,0 48.008,20.551 48.008,45.812 l -0.027,281.832 c 0,94.301 -174.176,158.012 -194.039,164.965 l -12.523,4.406 -12.537,-4.374 z" id="path2998" style="fill:#260859"/>
<path d="M 389.637,535.469 C 371.207,528.989 209.688,469.871 209.688,390.375 L 209.7,108.734 c 0,-13.93 12.086,-24.93 26.922,-24.93 14.336,0 26.137,10.309 26.867,23.469 l 0.004,0.012 c 35.363,-3.055 88.648,-12.023 122.41,-27.25 l 2.426,-1.07 6.906,-3.254 7.176,3.387 c 33.441,15.754 87.988,25.031 124.539,28.188 h 0.004 c 0.73,-13.168 12.527,-23.48 26.863,-23.48 14.852,0 26.934,11.098 26.934,24.738 l -0.027,281.832 c 0,79.676 -161.52,138.625 -179.938,145.082 l -5.57,1.961 -5.579,-1.95 z" id="path3000" style="fill:#7c3a00"/>
<path d="m 395.156,112.82 -1.527,0.621 c -37.711,15.406 -92.113,24.406 -127.242,27.43 l -22.969,1.984 -0.008,130.859 H 395.156 V 112.82 z" id="path3002" style="fill:#ffef6f"/>
<path d="m 395.223,75.715 -6.895,3.25 -2.426,1.07 c -33.762,15.227 -87.047,24.195 -122.41,27.25 l -0.004,-0.012 c -0.73,-13.16 -12.531,-23.469 -26.867,-23.469 -14.836,0 -26.922,11 -26.922,24.93 l -0.012,281.641 c 0,79.496 161.52,138.613 179.949,145.094 l 5.578,1.949 0.008,-0.004 V 75.715 z" id="path3004" style="fill:#e8941a"/>
<g id="g3006">
<path d="m 553.816,100.664 c -5.395,0 -9.801,3.312 -10.035,7.539 l -0.941,17.375 -17.34,-1.5 c -38.246,-3.301 -94.871,-13.051 -130.277,-29.734 -0.773,0.363 -1.609,0.707 -2.402,1.062 0.016,-0.004 0.031,-0.012 0.043,-0.016 v 307.098 l 171.008,-126.707 0.02,-167.238 c -0.001,-4.27 -4.615,-7.879 -10.076,-7.879 z" id="path3008" style="fill:#e8941a"/>
</g>
<path d="M 392.863,397.402 V 95.391 c -35.527,16.031 -90.5,25.457 -127.926,28.688 l -17.336,1.5 -0.941,-17.367 c -0.234,-4.234 -4.645,-7.547 -10.039,-7.547 -5.766,0 -10.082,3.891 -10.09,7.219 l 0.027,0.852 -0.004,152.738 166.309,135.928 z" id="path3010" style="fill:#ffef6f"/>
<path d="m 525.5,124.078 c -38.246,-3.301 -94.871,-13.051 -130.277,-29.734 -0.492,0.23 -1.031,0.449 -1.527,0.676 v 41.531 l 30.055,-1.555 113.195,21.496 10.082,-13.633 -4.188,-17.281 -17.34,-1.5 z" id="path3012" style="fill:#e8941a"/>
<path d="m 393.695,95.02 c -35.492,16.262 -91.043,25.805 -128.758,29.059 l -17.336,1.5 -4.184,17.277 19.438,6.918 102.445,-11.754 28.395,-1.469 V 95.02 z" id="path3014" style="fill:#ffffff"/>
<path d="m 226.555,243.211 -0.008,147.652 c 0,55.215 105.336,106.918 168.656,129.176 63.324,-22.238 168.66,-73.918 168.66,-129.176 l 0.016,-147.652 H 226.555 z" id="path3016" style="fill:#ffd26c"/>
<path d="M 393.746,508.047 C 318.914,480.473 243.406,435.543 243.406,397.313 l 0.012,-254.457 22.969,-1.984 c 35.129,-3.023 89.531,-12.023 127.242,-27.43 l 1.594,-0.648 1.59,0.648 c 37.711,15.406 92.109,24.406 127.242,27.43 l 22.973,1.988 -0.023,254.453 c 0,38.266 -75.508,83.188 -150.344,110.734 l -1.457,0.535 -1.458,-0.535 z" id="path3018" style="fill:#ffffff"/>
<path d="m 524.055,140.871 c -35.133,-3.023 -89.531,-12.023 -127.242,-27.43 l -1.59,-0.648 -1.594,0.648 1.527,-0.621 v 160.895 h 151.859 l 0.012,-130.855 -22.972,-1.989 z" id="path3020" style="fill:#ffd26c"/>
<path d="m 395.156,112.82 -1.527,0.621 c -37.711,15.406 -92.113,24.406 -127.242,27.43 l -22.969,1.984 -0.008,130.859 H 395.156 V 112.82 z" id="path3022" style="fill:#ffef6f"/>
<linearGradient x1="395.21631" y1="132.92529" x2="395.21631" y2="491.23761" id="SVGID_1_" gradientUnits="userSpaceOnUse">
<stop id="stop3025" style="stop-color:#e8941a;stop-opacity:1" offset="0"/>
<stop id="stop3027" style="stop-color:#ffef6f;stop-opacity:1" offset="1"/>
</linearGradient>
<path d="M 395.203,494.371 C 315.765,464.609 256.051,422.691 256.051,396.586 l 0.012,-242.137 11.41,-0.984 c 34.82,-2.996 88.879,-11.863 127.75,-27.043 38.859,15.18 92.914,24.047 127.742,27.043 l 11.418,0.988 -0.023,242.133 c -10e-4,26.133 -59.715,68.051 -139.157,97.785 l 0,0 z" id="path3029" style="fill:url(#SVGID_1_)"/>
<path d="m 534.359,377.328 c 0,26.133 -59.715,68.051 -139.156,97.785 C 315.777,445.355 256.07,403.449 256.051,377.34 v 23.805 c 0,26.102 59.715,68.02 139.152,97.785 79.441,-29.734 139.156,-71.652 139.156,-97.785 l 0.023,-246.691 0,0 -0.023,222.874 z" id="path3031" style="fill:#260859"/>
<path d="m 395.156,126.445 c -38.867,15.164 -92.883,24.023 -127.684,27.02 l -11.41,0.984 v 16.746 l 10.133,-0.867 c 35.152,-2.996 89.707,-11.855 128.961,-27.02 v -16.863 z" id="path3033" style="fill:#a84d10"/>
<path d="m 522.965,153.465 c -34.828,-2.996 -88.883,-11.863 -127.742,-27.043 -0.223,0.086 -0.457,0.164 -0.68,0.25 0.199,-0.074 0.41,-0.148 0.613,-0.227 v 16.863 c 0.02,-0.008 0.043,-0.016 0.066,-0.023 39.25,15.18 93.844,24.047 129.023,27.043 l 10.137,0.871 v -16.746 l -11.417,-0.988 z" id="path3035" style="fill:#a84d10"/>
<path d="m 256.062,158.086 -0.012,238.5 c 0,7.613 5.105,16.57 14.262,26.176 1.164,0.109 2.312,0.242 3.492,0.328 0.074,1.215 0.168,2.344 0.277,3.438 23.133,22.137 66.586,47.148 118.852,66.977 l -0.059,-1.766 c -0.59,-18.352 -2.348,-35.594 -4.691,-46.121 -5.438,-24.406 -22.613,-48.82 -37.359,-62.367 -6.184,-15.457 -1.742,-25.371 4.391,-39.07 1.871,-4.168 3.992,-8.887 5.699,-13.855 5.145,-14.93 4.266,-38.211 -1.984,-53.98 -2.898,-9.637 -9.184,-16.973 -16.832,-19.625 -2.328,-0.777 -5.027,-1.312 -8.23,-1.625 -3.215,-10.938 -1.609,-22.059 -1.598,-22.148 l 1.754,-10.398 -9.758,-3.961 c -0.977,-0.398 -9.941,-3.902 -23.02,-3.902 -6.027,0 -12.105,0.785 -18.117,2.34 0.82,-5.617 1.695,-11.391 2.598,-17.309 0,0 1.664,-10.949 2.402,-15.922 l 0.676,-4.617 -15.496,-26.328 c 0,0 -3.242,0.398 -5.836,0.617 l -11.411,4.618 z" id="path3037" style="fill:#260859"/>
<path d="m 514.695,428.105 c 0.016,-1.758 0.035,-3.516 -0.082,-5.402 2.242,-0.328 4.438,-0.699 6.609,-1.102 8.461,-9.164 13.137,-17.707 13.137,-25.016 l -1.562,-226.52 c 0,0 2.516,-0.133 2.234,-0.102 -3.75,-10.566 -23.34,-16.086 -28.695,-16.086 -7.617,0 -11.059,4.895 -12.184,6.996 -5.09,9.496 4.488,69.965 7.688,81.676 0.309,1.141 0.621,2.191 0.938,3.234 l -1.672,8.418 c -14.316,-13.652 -32.395,-28.645 -42.766,-28.645 -0.656,0 -1.289,0.055 -1.898,0.156 -2.648,0.461 -4.789,1.961 -6.016,4.215 -1.777,3.258 -1.703,7.801 0.27,14.133 -5.043,-1.027 -11.129,-1.98 -16.34,-1.98 -6.387,0 -10.586,1.453 -12.836,4.434 -4.473,5.934 -2.328,15.238 6.367,27.66 2.562,3.668 5.789,7.285 8.969,10.848 0.66,0.746 1.328,1.492 1.992,2.242 -9.152,14.402 -11.535,36.027 -6.352,58.285 2.27,9.738 5.41,16.656 8.188,22.77 1.766,3.883 3.203,7.047 4.09,10.273 -21.77,18.578 -37.285,42.938 -42.648,67.016 -2.184,9.785 -3.836,25.16 -4.547,42.199 l -0.23,5.742 c 51.096,-19.35 93.811,-43.674 117.346,-65.444 z" id="path3039" style="fill:#260859"/>
<g id="g3041">
<path d="m 321.699,323.621 c -1.984,-4.289 -5.723,-7.242 -10.809,-8.539 -19.477,-4.91 -29.746,-14.688 -33.309,-31.699 -3.887,-18.574 0.723,-48.887 6.062,-83.988 l 0.188,-1.234 c 0.734,-4.816 1.477,-9.707 2.211,-14.672 l 0.582,-3.965 -13.316,-26.676 -15.652,-2.938 -3.922,12.906 -4.168,2.527 c -0.457,0.281 -46.105,28.566 -66.969,87.457 -16.059,45.312 -11.832,93.551 11.023,125.91 19.73,27.922 51.32,42.691 91.348,42.699 1.902,0.008 3.645,-0.066 5.184,-0.195 4.969,-0.43 12.004,-1.789 15.77,-8.598 2.121,-3.844 2.418,-7.98 0.891,-12.609 3.871,-4.461 6.141,-9.797 6.426,-15.113 0.195,-3.613 -0.395,-9.031 -4.211,-14.613 2.449,-11.852 6.652,-20.379 9.449,-26.062 3.375,-6.86 6.57,-13.344 3.222,-20.598 z" id="path3043" style="fill:#260859"/>
<g id="g3045">
<path d="m 199.93,259.562 c 14.34,-66.531 55.953,-77.508 55.953,-77.508 l -1.012,36.066 0.816,76.336 c 0,0 -2.602,60.848 30.262,73.891 32.863,13.039 6.941,42.215 -36.23,31.109 C 208.5,389.602 184.465,330.16 199.93,259.562 z" id="path3047" style="fill:#ffffff"/>
<g id="g3049">
<path d="m 228.879,317.406 c -10.066,-45.742 11.844,-91.457 22.941,-105.285 l 13.945,-45.91 7.914,15.453 c -4.523,30.586 -9.375,58.598 -9.957,80.766 -0.121,4.418 0.922,20.125 1.629,23.516 3.336,15.93 11.039,27.066 24.359,34.395 2.242,1.234 13.094,-16.984 15.656,-15.965 3.352,1.344 -1.461,21.836 2.469,22.828 9.133,2.305 -6.898,13.684 -11.938,45.445 -21.198,1.91 -56.975,-9.61 -67.018,-55.243 z" id="path3051" style="fill:#f26531"/>
</g>
<path d="m 194.371,256.984 c 19.648,-55.469 61.68,-80.957 61.68,-80.957 l -0.434,15.422 c -15.742,12.766 -62.27,71.184 -44.375,141.27 13.469,48.656 52.797,63.223 80.523,57.949 -4.102,9.059 14.18,18.254 -6.789,18.254 -91.675,-0.02 -114.8,-83.645 -90.605,-151.938 z" id="path3053" style="fill:#7ac143"/>
</g>
<polygon points="213.434,210.594 205.309,222.129 239.594,232.855 " id="polygon3055" style="fill:#260859"/>
<polygon points="191.312,240.535 186.168,257.379 230.988,256.758 " id="polygon3057" style="fill:#260859"/>
<polygon points="183.648,279.039 183.082,296.645 226.18,284.332 " id="polygon3059" style="fill:#260859"/>
<polygon points="180.789,326.434 186,346.004 229.383,318.148 " id="polygon3061" style="fill:#260859"/>
<polygon points="201.324,373.969 214.367,389.453 241.773,345.785 " id="polygon3063" style="fill:#260859"/>
<polygon points="241.258,405.695 259.137,409.742 267.953,367.039 " id="polygon3065" style="fill:#260859"/>
</g>
<path d="m 324.59,268.086 c 0.148,0.016 0.281,0.008 0.438,0.023 -9.18,-17.043 -5.715,-37.352 -5.715,-37.352 0,0 -16.691,-6.77 -37.332,0.254 -24.391,8.301 -27.098,26.691 -24.246,32.094 2.688,5.09 9.637,6.027 15.934,2.34 3.547,9.219 8,15.848 18.32,24.191 l 34.66,-20.137 c -10e-4,10e-4 -0.837,-0.394 -2.059,-1.413 z" id="path3067" style="fill:#fff200"/>
<path d="m 274.98,347.574 c -5.398,0 -8.523,-1.82 -9.355,-2.379 l -9.891,-6.449 12.168,-6.41 c 5.203,-1.285 10.617,-7.621 15.832,-14.719 -1.098,0.18 -2.164,0.363 -3.195,0.535 -6.023,1.031 -11.086,1.895 -14.895,1.895 -0.688,0 -1.328,-0.031 -1.918,-0.082 -0.203,-0.02 -0.395,-0.027 -0.59,-0.027 -4.445,0 -10.258,3.727 -12.125,5.164 l -6.609,5.445 -4.531,-8.77 c -0.234,-0.688 -2.207,-6.969 1.93,-14.664 3.105,-5.758 12.41,-13.875 23.41,-13.875 1.82,0 3.633,0.219 5.387,0.652 0.594,0.148 1.184,0.223 1.734,0.223 2.828,0 5.781,-1.98 8.781,-5.883 0.738,-1.004 1.242,-1.891 1.648,-2.598 0.473,-0.82 0.875,-1.5 1.395,-2.191 1.762,-2.109 4.008,-3.098 6.93,-3.098 5.004,0 11.262,2.648 13.82,10.074 l 0,0 c 0.008,0 0.719,1.465 4.141,4.703 3.637,0.766 6.613,2.043 8.863,3.809 3.297,2.598 5.059,6.297 4.953,10.43 -0.207,8.285 -7.871,17.668 -23.434,28.684 -11.148,7.875 -19.449,9.531 -24.449,9.531 l 0,0 z" id="path3069" style="fill:#260859"/>
<path d="m 285.051,298.215 c -8.113,-6.562 -13.383,-12.48 -17.387,-19.559 -0.559,0.035 -1.121,0.059 -1.676,0.059 -7.941,0 -14.508,-3.812 -18.008,-10.461 -2.953,-5.582 -2.887,-13.828 0.176,-21.527 2.715,-6.844 10.266,-19.348 30.266,-26.16 7.363,-2.504 15.043,-3.773 22.824,-3.773 12.699,0 21.285,3.363 22.227,3.746 l 8.191,3.324 -1.473,8.734 c -0.02,0.137 -2.246,15.293 3.441,28.035 l 16.324,8.004 -17.734,10.391 -41.266,23.961 -5.905,-4.774 z" id="path3071" style="fill:#260859"/>
<path d="m 313.297,327.484 c -4.66,0 -5.777,-4.406 -6.758,-8.293 -0.754,-2.98 -1.535,-6.062 -3.594,-8.117 -7.707,-7.703 -18.688,-12.191 -18.801,-12.238 l -1.008,-0.406 -0.25,-1.062 c -1.91,-8.031 -0.074,-15.875 5.312,-22.695 8.305,-10.508 25,-17.848 40.602,-17.848 4.613,0 8.863,0.637 12.629,1.895 11.438,3.969 18.797,19.078 16.785,34.398 -2.59,19.672 -19.195,32.516 -44.418,34.352 l -0.499,0.014 z" id="path3073" style="fill:#260859"/>
<path d="m 390.77,491.805 c -0.586,-18.211 -2.32,-35.305 -4.645,-45.73 -5.391,-24.207 -22.441,-48.285 -37.074,-61.586 -6.785,-16.547 -1.922,-27.41 4.227,-41.141 1.859,-4.137 3.961,-8.82 5.645,-13.711 6.371,-18.496 3.301,-52.016 -9.367,-64.766 l -0.875,-0.883 -17.277,4.875 -0.285,1.207 c -3.629,15.34 -12.52,35.328 -19.969,40.625 l -5.223,3.711 0.672,6.355 c 1.371,13.16 -5.613,28.898 -23.094,64.328 -6.949,14.074 -9.164,28.023 -7.043,43.664 23.328,21.27 64.762,44.902 114.336,63.93 l -0.028,-0.878 z" id="path3075" style="fill:#260859"/>
<path d="m 286.379,296.578 c -8.293,-6.707 -13.605,-12.801 -17.535,-20.16 -0.957,0.125 -1.914,0.188 -2.855,0.188 -7.129,0 -13.016,-3.398 -16.145,-9.336 -2.672,-5.051 -2.57,-12.621 0.27,-19.766 2.586,-6.512 9.793,-18.406 28.988,-24.941 7.148,-2.434 14.594,-3.664 22.145,-3.664 12.223,0 20.52,3.219 21.426,3.59 l 6.637,2.691 -1.195,7.066 c -0.023,0.141 -2.43,16.492 3.918,29.945 l 13.477,6.609 -14.352,8.406 -40,23.23 -4.779,-3.858 z" id="path3077" style="fill:#260859"/>
<path d="m 324.59,268.086 c 0.148,0.016 0.281,0.008 0.438,0.023 -9.18,-17.043 -5.715,-37.352 -5.715,-37.352 0,0 -16.691,-6.77 -37.332,0.254 -24.391,8.301 -27.098,26.691 -24.246,32.094 2.688,5.09 9.637,6.027 15.934,2.34 3.547,9.219 8,15.848 18.32,24.191 l 34.66,-20.137 c -10e-4,10e-4 -0.837,-0.394 -2.059,-1.413 z" id="path3079" style="fill:#fff200"/>
<path d="m 291.426,228.664 c -3.023,0.5 -6.176,1.234 -9.445,2.348 -1.793,0.609 -3.449,1.281 -5.012,1.988 0.133,0.762 0.27,1.52 0.402,2.305 2.273,13.105 5.395,30.973 23.766,49.016 l 3.77,-2.191 4.488,-4.691 c -0.477,-0.453 -0.945,-0.914 -1.398,-1.371 -15.052,-15.072 -17.841,-27.463 -16.571,-47.404 z" id="path3081" style="fill:#f26531"/>
<path d="m 319.312,230.758 c 0,0 -4.73,-1.898 -12.234,-2.641 -2.945,19.641 0.68,32.223 5.871,43.66 2.867,-2.016 6.352,-4.246 12.078,-3.668 -9.179,-17.043 -5.715,-37.351 -5.715,-37.351 z" id="path3083" style="fill:#f26531"/>
<path d="m 340.762,260.719 c -22.492,-7.508 -62.18,9.445 -55.824,36.164 0,0 11.375,4.582 19.496,12.699 5.488,5.477 3.191,16.223 9.211,15.781 55.078,-4.008 48.554,-57.203 27.117,-64.644 z" id="path3085" style="fill:#260859"/>
<path d="m 384.066,446.531 c -5.324,-23.91 -22.367,-47.836 -36.781,-60.797 -7.402,-17.637 -2.094,-29.484 4.07,-43.25 1.84,-4.102 3.926,-8.746 5.574,-13.535 6.051,-17.562 3.086,-50.559 -8.871,-62.594 l -14.891,4.199 c -3.703,15.652 -12.715,36.105 -20.797,41.855 l -4.219,3 0.543,5.133 c 1.426,13.711 -5.629,29.66 -23.301,65.484 -7.051,14.281 -9.199,28.594 -6.531,44.879 23.355,20.395 62.828,42.727 109.797,60.965 -0.671,-20.983 -2.706,-36.886 -4.593,-45.339 z" id="path3087" style="fill:#260859"/>
<path d="m 375.43,448.457 c -4.688,-21.027 -20.555,-44.578 -35.52,-57.488 -0.02,-0.051 -0.031,-0.094 -0.059,-0.145 -12.793,-28.352 1.895,-44.961 8.711,-64.754 5.188,-15.062 2.301,-44.332 -6.785,-53.473 -2.863,12.109 -12.199,38.438 -24.281,47.027 1.711,16.387 -6.383,34.281 -24.168,70.316 -7.707,15.625 -8.574,31.184 -3.348,49.906 22.02,16.477 53.324,33.613 89.688,48.441 -0.727,-17.475 -2.406,-31.607 -4.238,-39.83 z" id="path3089" style="fill:#f26531"/>
<path d="m 336.758,268.195 c -10.891,-5.066 -39.801,0.785 -49.402,24.723 0,0 8.891,5.105 14.688,12.75 3.91,5.168 3.672,14.082 8.707,14.211 42.866,1.105 42.554,-43.981 26.007,-51.684 z" id="path3091" style="fill:#f26531"/>
<path d="m 272.738,340.402 c -1.93,0 -3.652,-0.895 -4.738,-2.457 -1.965,-2.816 -0.754,-6.086 -0.109,-7.84 3.441,-9.297 12.891,-18.176 21.5,-20.219 l 16.016,-4.246 1.781,0.863 c 4.453,2.152 2.496,-3.094 5.336,-1.969 11.52,4.566 5.867,13.898 4.336,16.051 -3.465,4.875 -7.785,4.871 -10.066,5.266 -9.285,1.57 -14.492,4.105 -18.293,5.965 -1.504,0.734 -2.801,1.367 -4.184,1.898 -0.977,0.379 -3.066,2.02 -4.32,3 -2.829,2.224 -4.7,3.688 -7.259,3.688 l 0,0 z" id="path3093" style="fill:#260859"/>
<path d="m 304.859,311.324 -14.234,3.773 c -6.875,1.625 -14.824,9.062 -17.707,16.859 -2.891,7.805 4.785,-1.43 9.469,-3.234 4.668,-1.812 10.121,-5.887 23.5,-8.156 13.379,-2.265 -1.028,-9.242 -1.028,-9.242 z" id="path3095" style="fill:#f26531"/>
<path d="m 290.859,310.074 c 0,0 -11.062,22.945 -25.168,28.18 l 10.75,1.375 c 0,0 15.59,-9.383 18.441,-19.707 2.852,-10.312 2.551,-15.832 2.551,-15.832 l -6.574,5.984 z" id="path3097" style="fill:#260859"/>
<path d="m 313.492,304.547 c -6.148,-4.84 -21.82,-2.699 -21.82,-2.699 l 8.758,5.172 c -8.391,9.762 -18.191,29.141 -30.828,32.25 0,0 8.082,5.398 25.703,-7.062 17.621,-12.46 24.347,-22.825 18.187,-27.661 z" id="path3099" style="fill:#fff200"/>
<path d="m 289.879,287.703 c -0.773,1.035 -1.34,2.477 -3.102,4.871 -2.613,3.402 -8.828,10.496 -17.902,8.246 -9.074,-2.25 -18.012,4.523 -20.785,9.676 -2.77,5.152 -1.465,8.965 -1.465,8.965 0,0 9.391,-7.359 17.73,-6.609 8.348,0.758 32.059,-6.914 50.258,-4.016 0,0 -14.355,-10.16 -16.457,-16.086 -2.011,-5.848 -7.902,-5.488 -8.277,-5.047 z" id="path3101" style="fill:#fff200"/>
<g id="g3103">
<path d="m 318.129,275.305 c -8.238,10.934 -12.203,12.973 -19.973,17.445 18.227,33.57 52.637,-9.355 19.973,-17.445 z" id="path3105" style="fill:#260859"/>
</g>
<g id="g3107">
<path d="m 315.082,300.051 c -3.988,0 -7.168,-2.73 -9.383,-5.508 5.203,-3.199 9.039,-6.363 14.363,-13.004 4.559,1.859 6.637,4.664 6.188,8.344 -0.574,4.703 -5.578,10.168 -11.168,10.168 l 0,0 z" id="path3109" style="fill:#ffffff"/>
</g>
<path d="m 317.875,282.395 c -2.621,1.168 -5.152,2.633 -7.699,3.727 -1.414,0.609 -3.875,2.562 -3.633,3.16 1.148,2.824 3.023,5.551 6.082,6.75 0.297,0.117 0.602,0.211 0.906,0.289 0.695,-1.246 1.336,-2.582 1.898,-4.008 1.118,-2.86 2.009,-6.751 2.446,-9.918 z" id="path3111" style="fill:#260859"/>
<path d="m 313.707,296.379 c 0,-2.535 -0.289,-4.934 -0.781,-7.129 -2.305,2.059 -4.594,3.672 -7.227,5.293 1.91,2.398 4.551,4.75 7.801,5.352 0.125,-1.137 0.207,-2.305 0.207,-3.516 z" id="path3113" style="fill:#f37344"/>
<path d="m 280.828,251.062 c 0.438,9.141 4.355,19.59 12.043,29.02 l 4.793,-4.211 c -11.609,-7.101 -16.836,-24.809 -16.836,-24.809 z" id="path3115" style="fill:#260859"/>
<path d="m 291.141,238.789 c -1.156,10.66 1.484,23.461 8.672,35.766 l 6.305,-4 c -12.141,-10.336 -14.977,-31.766 -14.977,-31.766 z" id="path3117" style="fill:#260859"/>
<path d="m 306.738,231.996 c -2.785,10.348 -2.152,23.402 3.047,36.672 l 6.844,-2.973 c -10.399,-12.082 -9.891,-33.699 -9.891,-33.699 z" id="path3119" style="fill:#260859"/>
<path d="m 334.832,367.363 c 0.266,-6.996 2.133,-13.312 4.527,-19.387 0.395,-1.004 -7.34,5.734 -15.191,7.973 -7.262,2.07 -14.66,-0.41 -14.953,0.293 -2.434,5.727 -5.387,12.094 -8.852,19.297 19.012,1.656 27.176,-2.223 34.469,-8.176 z" id="path3121" style="fill:#7ac143"/>
<path d="m 337.445,353.391 c 1.25,-3.918 2.812,-7.699 4.465,-11.438 -12.93,7.711 -20.523,10.559 -30.961,10.07 -1.262,3.164 -2.719,6.547 -4.34,10.152 13.114,1.403 24.301,-3.511 30.836,-8.784 z" id="path3123" style="fill:#ffffff"/>
<path d="m 293.305,389.996 c -7.684,15.605 -8.547,31.148 -3.324,49.852 12.047,9.012 26.852,18.227 43.773,27.152 12.125,-36.82 -2.57,-65.309 -8.16,-75.688 -8.168,2.25 -33.199,11.153 -32.289,-1.316 z" id="path3125" style="fill:#ffffff"/>
<g id="g3127">
<path d="m 426.086,226.523 c -3.566,0 -6.266,-1.336 -7.719,-2.051 -0.879,-0.445 -2,-1.012 -7.145,-4.84 -5.227,1.496 -10.617,2.254 -16.043,2.254 -5.52,0 -10.984,-0.777 -16.266,-2.309 -5.227,3.891 -6.375,4.465 -7.148,4.855 -1.371,0.684 -4.199,2.09 -7.797,2.09 -4.008,0 -7.691,-1.621 -10.949,-4.805 -4.895,-4.824 -6.535,-9.34 -5.664,-15.602 0.137,-0.996 0.441,-2.527 1.691,-6.785 -1.613,-2.074 -3.102,-4.285 -4.441,-6.59 -9.844,-3.238 -12.664,-4.578 -14.113,-5.461 -4.582,-2.82 -6.859,-8.195 -6.98,-16.441 -0.117,-8.219 1.965,-13.617 6.363,-16.496 0.707,-0.461 1.859,-1.211 8.289,-4.105 0.246,-1.074 0.527,-2.141 0.832,-3.195 -5.164,-7.422 -5.906,-9.02 -6.309,-9.887 -1.41,-3.07 -2.191,-8.109 2.059,-14.746 1.551,-2.414 7.227,-10.281 15.102,-10.281 h 0.797 l 1.406,0.211 c 0.941,0.184 2.262,0.449 9.582,3.125 4.242,-2.965 8.844,-5.352 13.707,-7.109 2.277,-5.695 3.047,-6.969 3.422,-7.594 2.812,-4.617 8.301,-6.957 16.328,-6.957 8.25,0 13.824,2.352 16.57,6.988 0.398,0.676 1.055,1.781 3.363,7.566 4.855,1.758 9.449,4.141 13.676,7.098 7.227,-2.648 8.523,-2.91 9.391,-3.09 l 0.734,-0.148 1.395,-0.086 c 7.91,0 13.363,7.188 15.348,10.277 4.25,6.629 3.473,11.66 2.07,14.715 -0.418,0.906 -1.176,2.527 -6.289,9.871 0.312,1.074 0.594,2.156 0.844,3.246 6.473,2.906 7.566,3.625 8.297,4.105 4.398,2.875 6.48,8.273 6.359,16.496 -0.113,8.125 -2.453,13.648 -6.957,16.414 -1.016,0.625 -2.891,1.785 -14.141,5.484 -1.391,2.406 -2.957,4.711 -4.656,6.879 1.348,4.625 1.508,5.785 1.605,6.496 0.871,6.266 -0.762,10.777 -5.645,15.582 -3.269,3.201 -6.956,4.826 -10.968,4.826 l 0,0 z" id="path3129" style="fill:#260859"/>
<path d="m 426.086,224.414 c -3.094,0 -5.512,-1.203 -6.812,-1.844 -0.746,-0.379 -1.895,-0.953 -7.633,-5.262 -5.348,1.641 -10.875,2.473 -16.461,2.473 -5.676,0 -11.273,-0.848 -16.676,-2.527 -5.824,4.367 -6.977,4.941 -7.691,5.301 -1.324,0.656 -3.75,1.859 -6.844,1.859 -3.438,0 -6.621,-1.41 -9.477,-4.203 -4.41,-4.344 -5.828,-8.211 -5.051,-13.801 0.137,-1 0.48,-2.645 1.938,-7.531 -1.992,-2.461 -3.781,-5.105 -5.344,-7.887 -10.289,-3.363 -13.133,-4.711 -14.441,-5.512 -3.922,-2.41 -5.867,-7.207 -5.973,-14.668 -0.109,-7.441 1.664,-12.254 5.41,-14.707 0.672,-0.438 1.848,-1.199 8.965,-4.375 0.359,-1.711 0.801,-3.402 1.309,-5.059 -5.598,-8.008 -6.336,-9.613 -6.707,-10.41 -1.188,-2.582 -1.816,-6.879 1.922,-12.715 1.41,-2.195 6.527,-9.309 13.328,-9.309 h 0.797 l 1.051,0.18 c 0.832,0.164 2.242,0.457 10.258,3.406 4.551,-3.312 9.668,-5.977 14.992,-7.801 2.492,-6.301 3.273,-7.594 3.621,-8.176 2.402,-3.941 7.281,-5.934 14.523,-5.934 7.453,0 12.418,2.004 14.754,5.953 0.371,0.625 1.039,1.754 3.574,8.16 5.312,1.828 10.418,4.48 14.965,7.789 8.012,-2.953 9.32,-3.219 10.129,-3.383 l 0.738,-0.152 1.047,-0.039 c 7.012,0 12.098,7.125 13.496,9.305 3.738,5.828 3.109,10.125 1.93,12.703 -0.387,0.828 -1.137,2.441 -6.684,10.375 0.52,1.68 0.957,3.387 1.32,5.109 7.172,3.195 8.281,3.922 8.969,4.375 3.746,2.449 5.52,7.262 5.414,14.707 -0.105,7.359 -2.109,12.285 -5.953,14.648 -0.922,0.566 -2.789,1.711 -14.469,5.527 -1.621,2.895 -3.48,5.625 -5.559,8.168 1.59,5.371 1.758,6.566 1.852,7.25 0.777,5.59 -0.633,9.457 -5.035,13.785 -2.863,2.808 -6.055,4.222 -9.492,4.222 l 0,0 z" id="path3131" style="fill:#260859"/>
<path d="m 409.34,122.93 c 0,0 -5.383,-14.453 -6.75,-16.773 -1.375,-2.324 -13.246,-2.52 -14.793,0.031 -1.535,2.566 -6.75,16.742 -6.75,16.742 h 28.293 z" id="path3133" style="fill:#7f3f98"/>
<path d="m 380.41,205.176 c 0,0 -11.297,8.801 -13.367,9.836 -2.066,1.031 -3.934,1.836 -6.656,-0.824 -2.676,-2.637 -2.969,-3.941 -2.598,-6.621 0.371,-2.668 4.875,-16.578 4.875,-16.578 l 17.746,14.187 z" id="path3135" style="fill:#7f3f98"/>
<path d="m 409.645,205.176 c 0,0 11.297,8.801 13.367,9.836 2.066,1.031 3.938,1.836 6.656,-0.824 2.676,-2.637 2.969,-3.941 2.598,-6.621 -0.371,-2.668 -4.875,-16.578 -4.875,-16.578 l -17.746,14.187 z" id="path3137" style="fill:#7f3f98"/>
<path d="m 352.539,155.469 c 0,0 -14.668,6.238 -16.891,7.691 -2.211,1.449 -2.164,13.59 0.336,15.125 2.5,1.531 17.105,6.121 17.105,6.121 l -0.55,-28.937 z" id="path3139" style="fill:#7f3f98"/>
<path d="m 437.82,155.469 c 0,0 14.668,6.238 16.891,7.691 2.215,1.449 2.164,13.59 -0.336,15.125 -2.5,1.531 -17.105,6.121 -17.105,6.121 l 0.55,-28.937 z" id="path3141" style="fill:#7f3f98"/>
<path d="m 348.719,153.543 -7.418,3.023 c -0.465,4.172 0.828,11.812 6.457,16.184 5.629,4.359 0.961,-19.207 0.961,-19.207 z" id="path3143" style="fill:#260859"/>
<path d="m 441.246,153.543 7.418,3.023 c 0.465,4.172 -0.828,11.812 -6.457,16.184 -5.629,4.359 -0.961,-19.207 -0.961,-19.207 z" id="path3145" style="fill:#260859"/>
<path d="m 367.875,129.066 c 0,0 -15.164,-5.836 -17.758,-6.371 -2.598,-0.547 -9.082,7.383 -7.863,10.039 1.223,2.66 10.508,15.508 10.508,15.508 l 15.113,-19.176 z" id="path3147" style="fill:#7f3f98"/>
<path d="m 422.438,129.066 c 0,0 15.164,-5.836 17.754,-6.371 2.598,-0.547 9.086,7.383 7.867,10.039 -1.223,2.66 -10.508,15.508 -10.508,15.508 l -15.113,-19.176 z" id="path3149" style="fill:#7f3f98"/>
<path d="m 359.793,121.949 c -2.27,3.754 -6.828,9.09 -3.359,17.332 2.875,-3.961 11.133,-15.062 11.43,-16.781 l -8.071,-0.551 z" id="path3151" style="fill:#260859"/>
<path d="m 423.164,198.848 10.629,-4.398 3.391,4.844 c -4.156,3.188 -7.762,6.547 -14.637,6.121 -8.692,-0.552 0.617,-6.567 0.617,-6.567 z" id="path3153" style="fill:#260859"/>
<path d="m 366.891,198.848 -10.629,-4.398 -3.391,4.844 c 4.156,3.188 7.762,6.547 14.637,6.121 8.695,-0.552 -0.617,-6.567 -0.617,-6.567 z" id="path3155" style="fill:#260859"/>
<path d="m 430.566,121.949 c 2.266,3.754 6.824,9.09 3.352,17.332 -2.867,-3.961 -11.133,-15.062 -11.43,-16.781 l 8.078,-0.551 z" id="path3157" style="fill:#260859"/>
<path d="m 443.168,163.367 c 0,26.504 -21.488,47.984 -47.988,47.984 -26.508,0 -47.992,-21.48 -47.992,-47.984 0,-26.504 21.484,-47.996 47.992,-47.996 26.5,0 47.988,21.492 47.988,47.996 z" id="path3159" style="fill:#7f3f98"/>
</g>
<path d="m 499.035,379.352 c -24.148,-14.574 -50.754,-40.875 -46.246,-67.043 1.824,-10.57 -6.406,-19.781 -14.363,-28.688 -3.098,-3.477 -6.305,-7.066 -8.812,-10.648 -5.574,-7.969 -11.219,-18.809 -6.41,-25.188 1.828,-2.426 5.477,-3.598 11.152,-3.598 6.438,0 14.301,1.52 19.57,2.734 -2.094,-5.496 -3.824,-12.004 -1.652,-15.984 0.93,-1.707 2.5,-2.793 4.531,-3.148 0.484,-0.082 1,-0.121 1.535,-0.121 10.691,0 31.27,18.254 44.082,30.727 l 2.691,-13.578 1.098,2.488 c 0.855,0.215 21,5.586 31.73,37.02 15.328,14.332 30.715,37.719 28.375,60.863 l -1.391,13.645 -24.707,-4.203 -10.504,-1.258 10.469,12.742 -6.188,10.285 -10.91,2.156 c -4.785,0.953 -10.098,1.809 -15.793,2.543 l -4.441,0.562 -3.816,-2.308 z" id="path3161" style="fill:#260859"/>
<path d="m 499.883,380.711 c -8.453,-18.031 -15.75,-33.605 -11.617,-49.598 5.477,-21.191 4.926,-37.324 -1.633,-47.938 -5.246,-8.492 -12.496,-10.414 -13.895,-10.715 l -2.395,-0.512 -14.07,3.293 -0.402,0.141 c -17.102,5.828 -29.754,33.488 -21.32,69.688 2.219,9.543 5.305,16.332 8.051,22.375 2.02,4.445 3.656,8.047 4.535,11.91 -21.969,18.406 -37.598,42.656 -42.953,66.711 -2.16,9.668 -3.797,24.91 -4.496,41.824 l -0.195,4.844 c 48.699,-18.664 89.555,-41.785 113.125,-62.766 0.469,-12.918 -2.551,-27.004 -8.867,-40.922 -1.278,-2.812 -2.579,-5.585 -3.868,-8.335 z" id="path3163" style="fill:#260859"/>
<path d="m 506.766,421.48 c -5.457,0 -10.125,-2.191 -13.5,-6.348 -7.531,-9.25 -5.598,-25.848 -2.543,-41.09 -0.52,-0.402 -1.082,-0.809 -1.566,-1.16 -2.887,-2.09 -6.832,-4.945 -8.84,-9.621 l -3.844,-8.93 8.52,-4.684 c 26.812,-14.766 36.797,-42.465 29.68,-82.332 -0.055,-0.164 -0.105,-0.328 -0.164,-0.488 -2.809,-3.723 -6.871,-11.012 -10.637,-24.828 -3.523,-12.914 -12.309,-71.832 -7.859,-80.129 0.945,-1.77 3.852,-5.887 10.324,-5.887 4.68,0 18.578,3.645 26.375,12.609 0.766,-0.152 1.562,-0.227 2.363,-0.227 4.25,0 7.562,2.121 11.398,4.578 1.246,0.789 2.582,1.645 4.094,2.543 2.199,1.305 6.66,3.945 10.301,10.102 5.594,0.066 9.668,3.734 19.703,14.016 0.09,0.102 1.055,1.09 1.293,1.32 2.059,2.035 3.676,4.914 5.316,9.516 10.035,2.156 17.312,18.496 18.711,25.281 0.051,0.262 0.152,0.633 0.289,1.145 l 0.273,1.02 c 15.062,57.008 11.363,104.316 -10.707,136.801 -17.801,26.219 -46.922,41.906 -86.551,46.645 -0.859,0.102 -1.648,0.148 -2.429,0.148 l 0,0 z" id="path3165" style="fill:#260859"/>
<path d="m 595.402,237.887 c -1.785,-8.676 -10.664,-20.074 -11.051,-16.191 -0.199,2.031 1.609,13.535 2.16,20.777 -0.961,-0.691 -2.066,-1.449 -2.703,-1.969 -2.98,-14.074 -6.547,-29.066 -9.473,-31.961 -2.211,-2.176 -14.605,-15.398 -13.977,-11.551 2.879,17.59 7.48,30.176 11.324,39.035 -3.078,-2.262 -4.473,-3.328 -6.055,-4.422 -6.062,-4.195 -8.738,-30.359 -13.359,-39.422 -2.363,-4.652 -5.629,-6.57 -7.172,-7.484 -9.922,-5.895 -12.629,-9.863 -10.863,2.387 1.348,9.336 2.344,21.816 14.742,47.855 l -8.207,-6.227 c -6.785,-5.465 -11.07,-36.008 -13.523,-48.082 -2.031,-10.043 -21.027,-15.141 -21.797,-13.699 -1.18,2.203 3.742,53.883 8.754,72.25 5.008,18.359 10.426,24.254 10.836,25.301 3.816,20.711 5.387,47.844 -8.359,70.012 -2.25,3.625 -31.09,-18.539 -34.219,-15.227 -3.129,3.312 19.469,32.105 15.348,34.992 -2.375,1.672 -4.922,3.262 -7.656,4.766 1.898,4.414 10.406,6.801 11.91,12.598 0.566,0 -11.004,41.09 5.863,39.07 136.755,-16.336 89.27,-164.133 87.477,-172.808 z" id="path3167" style="fill:#ffffff"/>
<path d="m 519.477,379.414 c -7.062,-21.422 -20.711,-50.16 -20.711,-50.16 l -28.637,-11.207 19.031,63.051 -6.086,-5.641 -1.121,4.543 10.562,19.551 c 0,0 27.895,4.254 31.422,-6.102 -1.546,-5.48 -2.132,-6.969 -4.46,-14.035 z" id="path3169" style="fill:#aaa4c4"/>
<path d="m 506.004,389.176 c -3.055,0.156 -3.531,-6.988 -5.977,-6.602 -1.98,12.016 -3.234,29.453 7.898,28.121 105.012,-12.539 101.387,-102.594 93.238,-147.656 -1.339,28.816 1.314,121.039 -95.159,126.137 z" id="path3171" style="fill:#aaa4c4"/>
<path d="m 499.363,403.242 c 1.051,4.82 3.543,8.055 8.562,7.453 48.184,-5.754 73.453,-27.84 85.957,-54.395 -20.577,34.462 -64.964,42.055 -94.519,46.942 z" id="path3173" style="fill:#f2f1f8"/>
<path d="m 536.113,285.504 c -10.438,-31.156 -30.414,-36.156 -30.414,-36.156 l -1.723,13.531 c -1.992,-1.926 -34.645,-35.117 -46.812,-33.012 -8.293,1.434 -0.457,18.242 0.266,20.086 -6.105,-1.598 -28.066,-6.832 -32.543,-0.898 -4.473,5.93 2.891,17.617 6.457,22.711 8.84,12.648 26.277,24.93 23.523,40.898 -4.41,25.586 22.328,51.047 45.258,64.883 l 3.191,1.93 3.703,-0.469 c 5.539,-0.715 10.805,-1.555 15.66,-2.52 l 9.992,-1.977 4.938,-8.211 -12.848,-15.648 15.812,1.898 22.48,3.824 1.168,-11.398 c 2.088,-20.64 -11.045,-43.691 -28.108,-59.472 z" id="path3175" style="fill:#260859"/>
<path d="m 511.441,262.371 0.492,25.715 20.984,8.66 C 522.91,277.422 511.441,262.371 511.441,262.371 z" id="path3177" style="fill:#6b5f91"/>
<path d="m 497.977,381.613 c -8.625,-18.406 -16.074,-34.297 -11.754,-51.027 5.328,-20.621 4.859,-36.199 -1.383,-46.305 -4.797,-7.758 -11.289,-9.492 -12.543,-9.758 l -1.934,-0.414 -13.398,3.125 -0.414,0.145 c -16.215,5.523 -28.109,32.18 -19.945,67.215 2.172,9.352 5.219,16.047 7.902,21.953 2.297,5.055 4.102,9.027 4.949,13.617 -21.887,18.016 -37.902,42.508 -43.219,66.363 -2.129,9.539 -3.754,24.648 -4.445,41.449 l -0.16,3.938 c 46.297,-17.949 85.312,-39.887 108.82,-60.047 0.855,-12.961 -2.055,-27.484 -8.621,-41.949 -1.273,-2.801 -2.57,-5.566 -3.855,-8.305 z" id="path3179" style="fill:#260859"/>
<path d="m 414.879,448.457 c -1.84,8.227 -3.52,22.379 -4.238,39.879 36.367,-14.809 67.703,-31.938 89.738,-48.418 3.441,-14 0.355,-31.008 -6.609,-46.34 -10.18,-22.418 -21.957,-42.605 -16.117,-65.207 10.691,-41.363 -7.207,-45.191 -7.207,-45.191 l -11.039,2.574 c -11.812,4.027 -21.172,26.828 -14.184,56.836 4.383,18.836 12.867,26.305 13.566,41.469 -24.969,19.054 -39.453,44.386 -43.91,64.398 z" id="path3181" style="fill:#ffffff"/>
<polygon points="524.949,339.023 553.559,343.895 540.949,327.73 497.863,316.172 478.828,322.18 505.211,341.258 515.43,341.129 518.512,346.129 " id="polygon3183" style="fill:#42316f"/>
<path d="m 512.535,370.281 c -0.336,-0.113 -1.629,-0.211 -2.324,-0.262 -3.934,-0.297 -11.246,-0.84 -16.621,-8.176 -9.293,-12.676 -18.852,-30.539 -18.945,-30.719 l -1.918,-3.586 16.203,-15.387 3.598,2.605 c 10.914,7.887 31.23,22.578 27.18,51.25 l -0.93,6.586 -6.243,-2.311 z" id="path3185" style="fill:#260859"/>
<path d="m 507.996,273.875 c -8.719,-4.91 -1.633,8.113 -1.633,8.113 l 17.391,8.082 c 0,0 -7.035,-11.285 -15.758,-16.195 z" id="path3187" style="fill:#260859"/>
<path d="m 497.902,358.684 c 5.445,7.418 12.918,5.246 16.504,6.578 3.41,-24.145 -12.492,-37.109 -25.016,-46.168 l -10.02,9.52 c 10e-4,-10e-4 9.341,17.515 18.532,30.07 z" id="path3189" style="fill:#f6a0a6"/>
<polygon points="494.504,330.309 504.152,329.352 500.211,320.141 490.449,320.98 " id="polygon3191" style="fill:#260859"/>
<path d="m 477.652,328.371 c 0.344,-1.586 0.645,-3.094 0.914,-4.574 l -0.824,-32.625 -7.129,-5.695 -4.527,-1.277 -6.68,1.555 c -3.07,1.051 -5.98,3.387 -8.48,6.777 4.602,7.199 9.676,10.191 8.43,22.199 -1.32,12.793 10.867,25.336 16.84,28.691 -0.165,-4.742 0.284,-9.649 1.456,-15.051 z" id="path3193" style="fill:#aaa4c4"/>
<path d="m 515.441,362.789 c 2.875,-0.449 5.562,-0.922 8.031,-1.41 -11.984,-10.055 -24.457,-25.418 -30.348,-40.766 1.129,-0.16 2.285,-0.285 3.461,-0.387 l -12.074,-9.066 -1.441,17.137 20.973,26.426 11.398,8.066 z" id="path3195" style="fill:#260859"/>
<g id="g3197">
<path d="m 520.594,365.984 c -11.988,-10.059 -24.457,-25.414 -30.348,-40.773 14.125,-2 31.789,-0.09 63.312,18.684 2.402,-23.664 -8.188,-64.223 -120.211,-88.75 19.531,31.617 35.305,33.953 32.133,58.875 -2.477,19.504 17.742,40.82 40.18,54.359 5.613,-0.715 10.582,-1.535 14.934,-2.395 z" id="path3199" style="fill:#ffffff"/>
</g>
<polygon points="502.367,321.293 514.109,336.367 528.445,325.293 " id="polygon3201" style="fill:#ffffff"/>
<polygon points="474.906,256.566 459.891,260.328 490.523,302.746 " id="polygon3203" style="fill:#260859"/>
<polygon points="519.023,350.121 506.781,357.129 514.066,363.012 " id="polygon3205" style="fill:#ffffff"/>
<polygon points="515.023,361.746 520.594,365.984 523.348,358.102 " id="polygon3207" style="fill:#ffffff"/>
<g id="g3209">
<path d="m 462.426,239.809 c 11.012,28.695 21.609,50.254 24.316,56.68 3.309,7.875 6.352,11.246 16.789,16.836 6.863,3.676 19.824,10.402 31.555,10.422 -8.766,-21.824 -16.195,-32.91 -38.211,-53.188 -11.328,-10.43 -24.145,-21.758 -34.449,-30.75 z" id="path3211" style="fill:#594c82"/>
</g>
<g id="g3213">
<path d="M 521.926,322.051 C 505.781,318.36 496.391,306.5 495.473,288.668 l -0.387,-7.441 6.039,4.363 c 20.16,14.57 24.406,26.645 25.137,32.543 l 0.633,5.062 -4.969,-1.144 z" id="path3215" style="fill:#260859"/>
</g>
<g id="g3217">
<path d="m 504.73,294.418 c 0.742,14.297 7.789,26.453 23.688,30.094 -0.844,-6.774 -6.383,-17.582 -23.688,-30.094 z" id="path3219" style="fill:#ffffff"/>
</g>
<path d="m 521.02,307.242 -1.926,-0.84 c -0.336,0.574 -0.645,1.184 -0.918,1.844 -1.785,4.355 -1.414,8.625 0.836,9.559 1.629,0.664 3.961,-0.762 5.711,-3.18 l -3.703,-7.383 z" id="path3221" style="fill:#260859"/>
<path d="m 493.77,393.578 c -0.039,-0.094 -0.086,-0.184 -0.125,-0.273 -1.496,2.672 -2.945,5.547 -2.945,5.547 0,0 -19.02,-6.207 -25.148,-7.895 -5.867,10.895 -20.238,38.785 -8.461,75.781 16.672,-8.82 31.375,-17.91 43.289,-26.82 3.44,-14 0.354,-31.008 -6.61,-46.34 z" id="path3223" style="fill:#6b5f91"/>
<path d="m 282.871,437.34 c 22.973,18.836 59.043,39.004 101.59,55.91 v -12.582 c -45.699,-18.512 -81.504,-40.121 -101.59,-58.043 v 14.715 z" id="path3225" style="fill:#260859"/>
<path d="m 406.188,493.156 c 42.293,-16.809 78.164,-36.848 101.102,-55.594 v -14.703 c -19.926,17.703 -55.094,38.953 -99.949,57.25 l -1.153,13.047 z" id="path3227" style="fill:#260859"/>
<path d="m 403.402,148.789 c -0.047,-0.816 0.004,-1.645 0.133,-2.477 1.031,-5.996 6.719,-10.016 12.719,-8.984 5.887,1.008 9.855,6.508 9.039,12.367 -7.613,-1.144 -14.949,-1.629 -21.891,-0.906 z" id="path3229" style="fill:#ffffff"/>
<path d="m 365.43,162.512 c 6.816,9.141 17.707,15.051 29.973,15.051 12.27,0 23.16,-5.91 29.973,-15.051 H 365.43 z" id="path3231" style="fill:#260859"/>
<path d="m 416.684,170.902 c -4.809,-1.645 -12.762,-2.707 -21.766,-2.707 -8.594,0 -16.242,0.969 -21.102,2.484 6.102,4.32 13.543,6.883 21.586,6.883 7.907,0 15.239,-2.472 21.282,-6.66 z" id="path3233" style="fill:#b30838"/>
<path d="m 359.141,162.512 0.438,1.328 c 3.145,9.539 4.848,12.016 8.293,12.043 h 0.027 c 3.363,0 5.168,-2.57 8.371,-11.938 l 0.496,-1.434 h -17.625 z" id="path3235" style="fill:#260859"/>
<g id="g3237">
<path d="m 363.828,162.43 c 0,0 2.953,8.965 4.055,8.973 1.102,0.012 4.156,-8.914 4.156,-8.914 l -8.211,-0.059 z" id="path3239" style="fill:#ffffff"/>
</g>
<path d="m 414.266,162.512 0.438,1.328 c 3.145,9.539 4.848,12.016 8.293,12.043 h 0.027 c 3.363,0 5.168,-2.57 8.375,-11.938 l 0.492,-1.434 h -17.625 z" id="path3241" style="fill:#260859"/>
<g id="g3243">
<path d="m 418.953,162.43 c 0,0 2.953,8.965 4.055,8.973 1.105,0.012 4.156,-8.914 4.156,-8.914 l -8.211,-0.059 z" id="path3245" style="fill:#ffffff"/>
</g>
<path d="m 411.148,196.828 c 0,4.668 -7.133,8.449 -15.926,8.449 -8.797,0 -15.93,-3.781 -15.93,-8.449 0,-4.668 7.133,-8.449 15.93,-8.449 8.794,0 15.926,3.781 15.926,8.449 z" id="path3247" style="fill:#ffef6f"/>
<path d="m 400.66,196.828 c 0,1.594 -2.434,2.883 -5.438,2.883 -3,0 -5.438,-1.289 -5.438,-2.883 0,-1.598 2.438,-2.891 5.438,-2.891 3.005,10e-4 5.438,1.293 5.438,2.891 z" id="path3249" style="fill:#7f3f98"/>
<path d="m 410.676,141.695 c 0.078,2.168 1.301,3.871 2.711,3.816 1.422,-0.066 2.496,-1.863 2.402,-4.031 -0.082,-2.176 -1.309,-3.895 -2.727,-3.832 -1.414,0.059 -2.492,1.868 -2.386,4.047 z" id="path3251" style="fill:#260859"/>
<path d="m 386.906,148.789 c 0.051,-0.816 -0.004,-1.645 -0.133,-2.477 -1.027,-5.996 -6.715,-10.016 -12.715,-8.984 -5.887,1.008 -9.855,6.508 -9.039,12.367 7.614,-1.144 14.95,-1.629 21.887,-0.906 z" id="path3253" style="fill:#ffffff"/>
<path d="m 379.633,141.695 c -0.082,2.168 -1.301,3.871 -2.707,3.816 -1.426,-0.066 -2.504,-1.863 -2.402,-4.031 0.082,-2.176 1.309,-3.895 2.723,-3.832 1.417,0.059 2.495,1.868 2.386,4.047 z" id="path3255" style="fill:#260859"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 39 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 30 KiB

View File

@@ -1,31 +1,51 @@
ente's Authenticator app helps you generate and store 2 step verification (2FA) tokens on your mobile devices.
Ente Auth is the best and the only 2FA authenticator app you will ever need. It provides secure, end-to-end encrypted backup to your codes, works across devices whether its Android, iOS, Mac, Windows, Linux or Web. It also offers quality of life features like Tap to Copy, Next Code, and even allows you to share your codes securely with others.
Our customers absolutely love it.
FEATURES
- It works everywhere and can either be used in the cloud with end-to-end encryption or on a single device without the need for an account. Entes UI is well thought out and easy to use. Plus it even shows you the next code if the current one is about to expire so you dont have to wait for it to roll over before your start typing. You can even pin, tag, and search your codes which makes it a lot easier to manage a big list compared to Google Authenticator. They call it a labour of love on their Github page, and it really looks like one. - Linus Tech Tips
- Secure Backups
ente provides end-to-end encrypted cloud backups so that you don't have to worry about losing your tokens. We use the same protocols Ente Photos uses to encrypt and preserve your data.
- Underrated but great authenticator app. Free, open source, and offers cloud backup. Very stable, has nice QoL features like the preview for the next code and the search bar. Overall, the best 2FA app I've used yet. - Luna Lometta
- Multi Device Synchronization
ente will automatically sync the 2FA tokens you add to your account, across all your devices. Every new device you sign into will have access to these tokens.
- Fantastic, fluid, has a dark theme, is open source, and also has a PC program. I switched from Authy to Ente Auth precisely for this reason, and I was surprised since the app as a whole is better and faster. - Daniel Ramos
- Web access
You can access your 2FA code from any web browser by visiting https://auth.ente.io .
- Better than Google Authenticator. - Piaw Piaw Kittens
- Offline Mode
ente generates 2FA tokens offline, so your network connectivity will not get in the way of your workflow.
- Authy's best replacement. Open source, desktop support, synchronization, convenient token export. Huge thanks to the developers, I hope your product will become popular and famous. - Sergey Tverye
- Import and Export Tokens
You can add tokens to ente by one of the following methods:
1. Scanning a QR code
2. Manually entering (copy-pasting) a 2FA secret
3. Bulk importing from a file that contains a list of codes in the following format:
- By far my favourite 2FA app. Over the years I've moved from Google Authenticator to Authy and have now happily "settled" with Ente Auth. - Dan Walsh
otpauth://totp/provider.com:you@email.com?secret=YOUR_SECRET
- The best MFA app I ever used. I will never go back to Google Authenticator. - Pierre-Philippe Lessard
The codes maybe separated by new lines or commas.
Ente Auth is recommended by Linus Tech Tips, CERN, Zerodha and many others.
You can also export the codes you have added to ente, to an **unencrypted** text file, that adheres to the above format.
✨ Features
EASY IMPORT
Add TOTP 2FA Codes to Ente Auth easily. You can either scan a QR code, or import from other authenticator apps to make sure you never lose a code while migrating
CROSS PLATFORM
Ente Auth is available cross platform and supports all major devices and OS - including Android, iOS, Mac, Windows, Linux and Web.
SECURE E2EE BACKUP
Ente Auth provides end-to-end encrypted cloud backups so that you don't have to worry about losing your tokens. We use the same protocols Ente Photos uses to encrypt and preserve your data.
OFFLINE MODE - NO SIGNUP REQUIRED
Ente Auth generates 2FA tokens offline, so your network connectivity will not get in the way of your workflow. You can even use Ente Auth without signing up for backups and use it locally for as long as you want
INTUITIVE SEARCH
Ente Auth allows you to find your 2FA codes through one tap search. No more scrolling through a long list to find the right codes. Just tap on search and start typing.
CUSTOMISE YOUR EXPERIENCE
Customise your experience of Ente Auth to make it like you want. Reorder your 2FA codes so that your most frequently used services are always on top. Change the icons by choosing from our massive icon library. Add tags so that you can filter codes like you want
SEE NEXT CODE
Ever had to pause for the timer to run out on the current code, so you can type in the new 2FA code? Ente Auth makes your workflow extremely fast by displaying the next code prominently. Say goodbye to waiting
SHARE 2FA CODE
We all have sent multiple messages to that colleague who keeps asking for the 2FA code to a shared account. Such a waste of productive time. With Ente Auth, you can securely share your 2FA tokens as a link. You can even set an expiry time for the link as well.
ADD NOTES
Use notes to save any additional information including recovery codes. All notes are backed up with end to end encryption so you dont have to worry about losing them.
SUPPORT

View File

@@ -0,0 +1,81 @@
<svg width="1024" height="1024" viewBox="0 0 1024 1024" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_41060_128753)">
<rect width="1024" height="1024" rx="234" fill="url(#paint0_linear_41060_128753)"/>
<g opacity="0.8" filter="url(#filter0_dii_41060_128753)">
<path d="M512.364 162L226 289.273V480.182C226 656.773 348.182 821.909 512.364 862C676.545 821.909 798.727 656.773 798.727 480.182V289.273L512.364 162ZM512.364 352.909C556.909 352.909 601.455 387.909 601.455 432.455V480.182C620.546 480.182 639.636 499.273 639.636 521.545V632.909C639.636 652 620.545 671.091 598.273 671.091H423.273C404.182 671.091 385.091 652 385.091 629.727V518.364C385.091 499.273 404.182 480.182 423.273 480.182V432.455C423.273 387.909 467.818 352.909 512.364 352.909ZM512.364 391.091C486.909 391.091 464.636 407 464.636 432.455V480.182H560.091V432.455C560.091 407 537.818 391.091 512.364 391.091Z" fill="white"/>
</g>
<g opacity="0.8" filter="url(#filter1_dii_41060_128753)">
<path d="M512.364 162L226 289.273V480.182C226 656.773 348.182 821.909 512.364 862C676.545 821.909 798.727 656.773 798.727 480.182V289.273L512.364 162ZM512.364 352.909C556.909 352.909 601.455 387.909 601.455 432.455V480.182C620.546 480.182 639.636 499.273 639.636 521.545V632.909C639.636 652 620.545 671.091 598.273 671.091H423.273C404.182 671.091 385.091 652 385.091 629.727V518.364C385.091 499.273 404.182 480.182 423.273 480.182V432.455C423.273 387.909 467.818 352.909 512.364 352.909ZM512.364 391.091C486.909 391.091 464.636 407 464.636 432.455V480.182H560.091V432.455C560.091 407 537.818 391.091 512.364 391.091Z" fill="white"/>
</g>
<g opacity="0.8" filter="url(#filter2_ii_41060_128753)">
<path d="M512.364 162L226 289.273V480.182C226 656.773 348.182 821.909 512.364 862C676.545 821.909 798.727 656.773 798.727 480.182V289.273L512.364 162ZM512.364 352.909C556.909 352.909 601.455 387.909 601.455 432.455V480.182C620.546 480.182 639.636 499.273 639.636 521.545V632.909C639.636 652 620.545 671.091 598.273 671.091H423.273C404.182 671.091 385.091 652 385.091 629.727V518.364C385.091 499.273 404.182 480.182 423.273 480.182V432.455C423.273 387.909 467.818 352.909 512.364 352.909ZM512.364 391.091C486.909 391.091 464.636 407 464.636 432.455V480.182H560.091V432.455C560.091 407 537.818 391.091 512.364 391.091Z" fill="white"/>
</g>
</g>
<defs>
<filter id="filter0_dii_41060_128753" x="46.613" y="90.2452" width="931.502" height="1058.77" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset dy="107.632"/>
<feGaussianBlur stdDeviation="89.6935"/>
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.35 0"/>
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_41060_128753"/>
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_41060_128753" result="shape"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset dy="17.9387"/>
<feGaussianBlur stdDeviation="8.96935"/>
<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/>
<feColorMatrix type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.25 0"/>
<feBlend mode="normal" in2="shape" result="effect2_innerShadow_41060_128753"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset dy="-8.96935"/>
<feGaussianBlur stdDeviation="4.48467"/>
<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/>
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/>
<feBlend mode="normal" in2="effect2_innerShadow_41060_128753" result="effect3_innerShadow_41060_128753"/>
</filter>
<filter id="filter1_dii_41060_128753" x="46.613" y="90.2452" width="931.502" height="1058.77" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset dy="107.632"/>
<feGaussianBlur stdDeviation="89.6935"/>
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0"/>
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_41060_128753"/>
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_41060_128753" result="shape"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset dy="17.9387"/>
<feGaussianBlur stdDeviation="8.96935"/>
<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/>
<feColorMatrix type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.25 0"/>
<feBlend mode="normal" in2="shape" result="effect2_innerShadow_41060_128753"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset dy="-8.96935"/>
<feGaussianBlur stdDeviation="4.48467"/>
<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/>
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/>
<feBlend mode="normal" in2="effect2_innerShadow_41060_128753" result="effect3_innerShadow_41060_128753"/>
</filter>
<filter id="filter2_ii_41060_128753" x="226" y="153.031" width="572.728" height="726.908" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset dy="17.9387"/>
<feGaussianBlur stdDeviation="8.96935"/>
<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/>
<feColorMatrix type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.25 0"/>
<feBlend mode="normal" in2="shape" result="effect1_innerShadow_41060_128753"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset dy="-8.96935"/>
<feGaussianBlur stdDeviation="4.48467"/>
<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/>
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/>
<feBlend mode="normal" in2="effect1_innerShadow_41060_128753" result="effect2_innerShadow_41060_128753"/>
</filter>
<linearGradient id="paint0_linear_41060_128753" x1="96.5" y1="71" x2="985" y2="977.5" gradientUnits="userSpaceOnUse">
<stop stop-color="#C373F2"/>
<stop offset="1" stop-color="#9610D6"/>
</linearGradient>
<clipPath id="clip0_41060_128753">
<rect width="1024" height="1024" rx="234" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 123 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 810 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 828 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 825 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 950 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 760 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 811 KiB

View File

@@ -1 +1 @@
ente is an end-to-end encrypted authenticator app
Free, Cross Platform, Private, Open Source Two Factor Authenticator App

View File

@@ -1 +1 @@
Ente Authenticator
Ente Auth - 2FA Authenticator

View File

@@ -0,0 +1,32 @@
#
# Generated file, do not edit.
#
import lldb
def handle_new_rx_page(frame: lldb.SBFrame, bp_loc, extra_args, intern_dict):
"""Intercept NOTIFY_DEBUGGER_ABOUT_RX_PAGES and touch the pages."""
base = frame.register["x0"].GetValueAsAddress()
page_len = frame.register["x1"].GetValueAsUnsigned()
# Note: NOTIFY_DEBUGGER_ABOUT_RX_PAGES will check contents of the
# first page to see if handled it correctly. This makes diagnosing
# misconfiguration (e.g. missing breakpoint) easier.
data = bytearray(page_len)
data[0:8] = b'IHELPED!'
error = lldb.SBError()
frame.GetThread().GetProcess().WriteMemory(base, data, error)
if not error.Success():
print(f'Failed to write into {base}[+{page_len}]', error)
return
def __lldb_init_module(debugger: lldb.SBDebugger, _):
target = debugger.GetDummyTarget()
# Caveat: must use BreakpointCreateByRegEx here and not
# BreakpointCreateByName. For some reasons callback function does not
# get carried over from dummy target for the later.
bp = target.BreakpointCreateByRegex("^NOTIFY_DEBUGGER_ABOUT_RX_PAGES$")
bp.SetScriptCallbackFunction('{}.handle_new_rx_page'.format(__name__))
bp.SetAutoContinue(True)
print("-- LLDB integration loaded --")

View File

@@ -0,0 +1,5 @@
#
# Generated file, do not edit.
#
command script import --relative-to-command-file flutter_lldb_helper.py

View File

@@ -26,6 +26,7 @@
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
customLLDBInitFile = "$(SRCROOT)/Flutter/ephemeral/flutter_lldbinit"
shouldUseLaunchSchemeArgsEnv = "YES">
<MacroExpansion>
<BuildableReference
@@ -43,11 +44,13 @@
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
customLLDBInitFile = "$(SRCROOT)/Flutter/ephemeral/flutter_lldbinit"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
enableGPUValidationMode = "1"
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">

View File

@@ -40,7 +40,7 @@ class _AppState extends State<App>
late StreamSubscription<SignedOutEvent> _signedOutEvent;
late StreamSubscription<SignedInEvent> _signedInEvent;
Locale? locale;
setLocale(Locale newLocale) {
void setLocale(Locale newLocale) {
setState(() {
locale = newLocale;
});
@@ -82,7 +82,7 @@ class _AppState extends State<App>
UpdateService.instance.getLatestVersionInfo(),
);
},
barrierColor: Colors.black.withOpacity(0.85),
barrierColor: Colors.black.withValues(alpha: 0.85),
);
});
}

View File

@@ -27,10 +27,8 @@ Future<void> bootstrap(FutureOr<Widget> Function() builder) async {
await runZonedGuarded(
() async {
await BlocOverrides.runZoned(
() async => runApp(await builder()),
blocObserver: AppBlocObserver(),
);
Bloc.observer = AppBlocObserver();
runApp(await builder());
},
(error, stackTrace) => log(error.toString(), stackTrace: stackTrace),
);

View File

@@ -39,7 +39,7 @@ final lightThemeData = ThemeData(
bodyLarge: const TextStyle(color: Colors.orange),
),
cardColor: const Color.fromRGBO(250, 250, 250, 1.0),
dialogTheme: const DialogTheme().copyWith(
dialogTheme: const DialogThemeData().copyWith(
backgroundColor: const Color.fromRGBO(250, 250, 250, 1.0), //
titleTextStyle: const TextStyle(
color: Colors.black,
@@ -150,7 +150,7 @@ final darkThemeData = ThemeData(
elevation: 0,
),
cardColor: const Color.fromRGBO(10, 15, 15, 1.0),
dialogTheme: const DialogTheme().copyWith(
dialogTheme: const DialogThemeData().copyWith(
backgroundColor: const Color.fromRGBO(15, 15, 15, 1.0),
titleTextStyle: const TextStyle(
color: Colors.white,
@@ -275,7 +275,7 @@ TextTheme _buildTextTheme(Color textColor) {
fontWeight: FontWeight.w500,
),
bodySmall: TextStyle(
color: textColor.withOpacity(0.4),
color: textColor.withValues(alpha: 0.4),
fontSize: 10,
fontWeight: FontWeight.w500,
),
@@ -343,7 +343,7 @@ extension CustomColorScheme on ColorScheme {
: const Color.fromRGBO(48, 48, 48, 0.5);
Color get iconColor => brightness == Brightness.light
? const Color.fromRGBO(0, 0, 0, 1).withOpacity(0.75)
? const Color.fromRGBO(0, 0, 0, 1).withValues(alpha: 0.75)
: const Color.fromRGBO(255, 255, 255, 1);
Color get bgColorForQuestions => brightness == Brightness.light
@@ -354,7 +354,7 @@ extension CustomColorScheme on ColorScheme {
Color get cupertinoPickerTopColor => brightness == Brightness.light
? const Color.fromARGB(255, 238, 238, 238)
: const Color.fromRGBO(255, 255, 255, 1).withOpacity(0.1);
: const Color.fromRGBO(255, 255, 255, 1).withValues(alpha: 0.1);
Color get stepProgressUnselectedColor => brightness == Brightness.light
? const Color.fromRGBO(196, 196, 196, 0.6)
@@ -381,20 +381,20 @@ extension CustomColorScheme on ColorScheme {
: const Color.fromRGBO(20, 20, 20, 1);
Color get galleryThumbDrawColor => brightness == Brightness.light
? const Color.fromRGBO(0, 0, 0, 1).withOpacity(0.8)
: const Color.fromRGBO(255, 255, 255, 1).withOpacity(0.5);
? const Color.fromRGBO(0, 0, 0, 1).withValues(alpha: 0.8)
: const Color.fromRGBO(255, 255, 255, 1).withValues(alpha: 0.5);
Color get backupEnabledBgColor => brightness == Brightness.light
? const Color.fromRGBO(230, 230, 230, 0.95)
: const Color.fromRGBO(10, 40, 40, 0.3);
Color get dotsIndicatorActiveColor => brightness == Brightness.light
? const Color.fromRGBO(0, 0, 0, 1).withOpacity(0.5)
: const Color.fromRGBO(255, 255, 255, 1).withOpacity(0.5);
? const Color.fromRGBO(0, 0, 0, 1).withValues(alpha: 0.5)
: const Color.fromRGBO(255, 255, 255, 1).withValues(alpha: 0.5);
Color get dotsIndicatorInactiveColor => brightness == Brightness.light
? const Color.fromRGBO(0, 0, 0, 1).withOpacity(0.12)
: const Color.fromRGBO(255, 255, 255, 1).withOpacity(0.12);
? const Color.fromRGBO(0, 0, 0, 1).withValues(alpha: 0.12)
: const Color.fromRGBO(255, 255, 255, 1).withValues(alpha: 0.12);
Color get toastTextColor => brightness == Brightness.light
? const Color.fromRGBO(255, 255, 255, 1)
@@ -409,8 +409,8 @@ extension CustomColorScheme on ColorScheme {
: const Color.fromRGBO(100, 100, 100, 1);
Color get themeSwitchInactiveIconColor => brightness == Brightness.light
? const Color.fromRGBO(0, 0, 0, 1).withOpacity(0.5)
: const Color.fromRGBO(255, 255, 255, 1).withOpacity(0.5);
? const Color.fromRGBO(0, 0, 0, 1).withValues(alpha: 0.5)
: const Color.fromRGBO(255, 255, 255, 1).withValues(alpha: 0.5);
Color get searchResultsColor => brightness == Brightness.light
? const Color.fromRGBO(245, 245, 245, 1.0)
@@ -421,8 +421,8 @@ extension CustomColorScheme on ColorScheme {
: const Color.fromRGBO(150, 150, 150, 1);
Color get searchResultsBackgroundColor => brightness == Brightness.light
? Colors.black.withOpacity(0.32)
: Colors.black.withOpacity(0.64);
? Colors.black.withValues(alpha: 0.32)
: Colors.black.withValues(alpha: 0.64);
Color get codeCardBackgroundColor => brightness == Brightness.light
? const Color.fromRGBO(246, 246, 246, 1)

View File

@@ -45,7 +45,7 @@
"timeBasedKeyType": "Oparte na czasie (TOTP)",
"counterBasedKeyType": "Oparte na liczniku (HOTP)",
"saveAction": "Zapisz",
"nextTotpTitle": "dalej",
"nextTotpTitle": "następny",
"deleteCodeTitle": "Usunąć kod?",
"deleteCodeMessage": "Czy na pewno chcesz usunąć ten kod? Ta akcja jest nieodwracalna.",
"trashCode": "Przenieść kod do kosza?",

View File

@@ -19,7 +19,7 @@
"pleaseVerifyDetails": "Kontrollera dina detaljer och försök igen",
"codeIssuerHint": "Utfärdare",
"codeSecretKeyHint": "Secret Key",
"secret": "Säkerhets nyckel",
"secret": "Säkerhetsnyckel",
"all": "Alla",
"notes": "Anteckningar",
"notesLengthLimit": "Anteckningar kan vara högst {count} tecken långa",

View File

@@ -10,7 +10,7 @@
"onBoardingGetStarted": "ጀምር",
"setupFirstAccount": "ናይ መጀመርታ ሕሳብካ ኣዳል",
"importScanQrCode": "QR ኮድ ስካን ግበር",
"qrCode": "ኪዊኣር ስርዓት",
"qrCode": "ኪዊኣር ኮድ",
"importEnterSetupKey": "ምድላው መፍትሕ ኣእቱ",
"importAccountPageTitle": "ዝርዝር ሕሳብ ኣእትዉ",
"secretCanNotBeEmpty": "ምስጢር ባዶ ኪኸውን ኣይክእልን እዩ",
@@ -19,6 +19,8 @@
"pleaseVerifyDetails": "በጃኹም ዝርዝር-ሓበሬታ ኣረጋግጹ እሞ እንደገና ፈትኑ",
"codeIssuerHint": "ኣዋጂ",
"codeSecretKeyHint": "ምስጢራዊ መፍትሕ",
"all": "ኩሉ",
"notes": "መዘኻኸሪታት",
"codeAccountHint": "ሕሳብ (you@domain.com)",
"codeTagHint": "ልጣፍ",
"accountKeyType": "ዓይነት ቁልፊ",
@@ -30,12 +32,12 @@
"loggingOut": "ወጸ...",
"timeBasedKeyType": "ግዜ እተመስረተ (TOTP)",
"counterBasedKeyType": "ቆጻሪ እተመስረተ (TOTP)",
"saveAction": "",
"saveAction": "ዓቅብ",
"nextTotpTitle": "ቀጽሊ",
"deleteCodeTitle": "ኮድ ምድምሳስ፧",
"deleteCodeMessage": "ነዚ ኮድ ክትድምስሶ ከም እትደሊ ርግጸኛ ዲኻ፧ እዚ ተግባር ንድሕሪት ዘይምለስ እዩ።",
"deleteCodeTitle": "ኮድ ይደምሰሰ፧",
"deleteCodeMessage": "ነዚ ኮድ ክትድምስሶ ከም እትደሊ ርግጸኛ ዲኻ፧ እዚ ተግባር ንድሕሪት ዘይምለስ ኣይኮነን።",
"viewLogsAction": "ምዝገባታት ርአ",
"sendLogsDescription": "",
"sendLogsDescription": "This will send across logs to help us debug your issue. While we take precautions to ensure that sensitive information is not logged, we encourage you to view these logs before sharing them.",
"preparingLogsTitle": "ምዝገባ ድላው...",
"emailLogsTitle": "መዝገብ ኢ-መይል",
"emailLogsMessage": "በጃኹም ነቲ መዝገብ ናብ {email} ስደዱሉ",
@@ -67,7 +69,7 @@
"pleaseWait": "በጃኻ ተጸበ...",
"generatingEncryptionKeysTitle": "ናይ ምስጢራዊ ቁልፊ ዪፍጠር...",
"recreatePassword": "ቃለ-ምስጢር እንደገና ፍጠር",
"recreatePasswordMessage": "እዛ ሕጂ ዘላ ኤለክትሮኒካዊት መሳርሒት ነቲ passwordካ ንምርግጋጽ እኹል ሓይሊ ስለ ዘይብላ ምስ ኵሉ መሳርሒታት ብዚሰማማዕ መገዲ ሓንሳእ እንደገና ኸነሐድሶ ኣሎና ።\n\nበጃኻ በቲ ምሕዋይ-መፍትሕ ኣቲኻ ቃለ-ምስጢር ኣሐድሶ (እንተ ደሊኻ ነታ ቃለ-ምስጢር እንደገና ኽትጥቀመላ ትኽእል ኢኻ)።",
"recreatePasswordMessage": "እዛ ሕጂ ዘላ ኤለክትሮኒካዊት መሳርሒት ነቲ passwordካ ንምርግጋጽ እኹል ሓይሊ ስለ ዘይብላ ምስ ኵሉ መሳርሒታት ብዚሰማማዕ መገዲ ሓንሳእ እንደገና ኸነሐድሶ ኣሎና። \n\nበጃኻ በቲ ምሕዋይ-መፍትሕ ኣቲኻ ቃለ-ምስጢር ኣሐድሶ (እንተ ደሊኻ ነታ ቃለ-ምስጢር እንደገና ኽትጥቀመላ ትኽእል ኢኻ)።",
"useRecoveryKey": "ምሕዋይ መፍትሕ ተጠቐም",
"incorrectPasswordTitle": "ግጉይ ቃለ-ምስጢር",
"welcomeBack": "እንኳዕ ብደሓን ተመለስካ!",

View File

@@ -1,7 +1,8 @@
import "package:ente_auth/l10n/arb/app_localizations.dart"
show AppLocalizations;
import "package:flutter/widgets.dart";
import "package:flutter_gen/gen_l10n/app_localizations.dart";
export "package:flutter_gen/gen_l10n/app_localizations.dart";
export "package:ente_auth/l10n/arb/app_localizations.dart"
show AppLocalizations;
extension AppLocalizationsX on BuildContext {
AppLocalizations get l10n => AppLocalizations.of(this);

View File

@@ -2,7 +2,7 @@ import 'dart:convert';
class BillingPlans {
final List<BillingPlan> plans;
final FreePlan freePlan;
final FreePlan? freePlan;
BillingPlans({
required this.plans,
@@ -12,12 +12,12 @@ class BillingPlans {
Map<String, dynamic> toMap() {
return {
'plans': plans.map((x) => x.toMap()).toList(),
'freePlan': freePlan.toMap(),
'freePlan': freePlan?.toMap(),
};
}
static fromMap(Map<String, dynamic>? map) {
if (map == null) return null;
static BillingPlans fromMap(Map<String, dynamic>? map) {
if (map == null) return BillingPlans(plans: [], freePlan: null);
return BillingPlans(
plans: List<BillingPlan>.from(
@@ -49,7 +49,7 @@ class FreePlan {
};
}
static fromMap(Map<String, dynamic>? map) {
static FreePlan? fromMap(Map<String, dynamic>? map) {
if (map == null) return null;
return FreePlan(
@@ -91,7 +91,7 @@ class BillingPlan {
};
}
static fromMap(Map<String, dynamic>? map) {
static BillingPlan? fromMap(Map<String, dynamic>? map) {
if (map == null) return null;
return BillingPlan(

View File

@@ -332,7 +332,7 @@ class _SetupEnterSecretKeyPageState extends State<SetupEnterSecretKeyPage> {
},
);
},
barrierColor: Colors.black.withOpacity(0.85),
barrierColor: Colors.black.withValues(alpha: 0.85),
barrierDismissible: false,
);
},

View File

@@ -75,7 +75,7 @@ class CodeDisplayStore {
builder: (BuildContext context) {
return EditTagDialog(tag: tag);
},
barrierColor: Colors.black.withOpacity(0.85),
barrierColor: Colors.black.withValues(alpha: 0.85),
barrierDismissible: false,
);
}

View File

@@ -147,12 +147,13 @@ class _RecoveryKeyPageState extends State<RecoveryKeyPage> {
),
),
child: DottedBorder(
padding: EdgeInsets.zero,
borderType: BorderType.RRect,
strokeWidth: 1,
color: const Color(0xFF6B6B6B),
dashPattern: const [6, 6],
radius: const Radius.circular(8),
options: const RoundedRectDottedBorderOptions(
padding: EdgeInsets.zero,
strokeWidth: 1,
color: Color(0xFF6B6B6B),
dashPattern: [6, 6],
radius: Radius.circular(8),
),
child: SizedBox(
width: double.infinity,
child: Stack(
@@ -314,7 +315,13 @@ class _RecoveryKeyPageState extends State<RecoveryKeyPage> {
await _recoveryKeyFile.delete();
}
_recoveryKeyFile.writeAsStringSync(recoveryKey);
await Share.shareXFiles([XFile(_recoveryKeyFile.path)]);
await SharePlus.instance.share(
ShareParams(
files: [
XFile(_recoveryKeyFile.path),
],
),
);
Future.delayed(const Duration(milliseconds: 500), () {
if (mounted) {
setState(() {

View File

@@ -82,7 +82,7 @@ class _SessionsPageState extends State<SessionsPage> {
color: Theme.of(context)
.colorScheme
.onSurface
.withOpacity(0.8),
.withValues(alpha: 0.8),
fontSize: 14,
),
),
@@ -95,7 +95,7 @@ class _SessionsPageState extends State<SessionsPage> {
color: Theme.of(context)
.colorScheme
.onSurface
.withOpacity(0.8),
.withValues(alpha: 0.8),
fontSize: 12,
),
),

View File

@@ -54,12 +54,12 @@ class BannerWidget extends StatelessWidget {
dashColor = const Color.fromRGBO(255, 191, 12, 1);
boxShadow = [
BoxShadow(
color: const Color(0xFFFDB816).withOpacity(0.1),
color: const Color(0xFFFDB816).withValues(alpha: 0.1),
blurRadius: 50,
spreadRadius: 80,
),
BoxShadow(
color: const Color(0xFFFDB816).withOpacity(0.2),
color: const Color(0xFFFDB816).withValues(alpha: 0.2),
blurRadius: 25,
),
];
@@ -71,12 +71,13 @@ class BannerWidget extends StatelessWidget {
dashColor = const Color.fromRGBO(233, 233, 233, 1);
boxShadow = [
BoxShadow(
color: const Color.fromRGBO(78, 78, 78, 1).withOpacity(0.2),
color: const Color.fromRGBO(78, 78, 78, 1).withValues(alpha: 0.2),
blurRadius: 50,
spreadRadius: 100,
),
BoxShadow(
color: const Color.fromRGBO(23, 22, 22, 0.30).withOpacity(0.1),
color:
const Color.fromRGBO(23, 22, 22, 0.30).withValues(alpha: 0.1),
blurRadius: 25,
),
];
@@ -87,12 +88,12 @@ class BannerWidget extends StatelessWidget {
dashColor = const Color.fromRGBO(29, 185, 84, 1);
boxShadow = [
BoxShadow(
color: const Color.fromRGBO(38, 203, 95, 1).withOpacity(0.08),
color: const Color.fromRGBO(38, 203, 95, 1).withValues(alpha: 0.08),
blurRadius: 50,
spreadRadius: 100,
),
BoxShadow(
color: const Color.fromRGBO(0, 0, 0, 0.50).withOpacity(0.08),
color: const Color.fromRGBO(0, 0, 0, 0.50).withValues(alpha: 0.08),
blurRadius: 25,
),
];
@@ -103,12 +104,12 @@ class BannerWidget extends StatelessWidget {
imagePath = "assets/discount.png";
boxShadow = [
BoxShadow(
color: const Color.fromRGBO(38, 203, 95, 1).withOpacity(0.08),
color: const Color.fromRGBO(38, 203, 95, 1).withValues(alpha: 0.08),
blurRadius: 50,
spreadRadius: 100,
),
BoxShadow(
color: const Color.fromRGBO(0, 0, 0, 0.50).withOpacity(0.08),
color: const Color.fromRGBO(0, 0, 0, 0.50).withValues(alpha: 0.08),
blurRadius: 25,
),
];
@@ -121,10 +122,11 @@ class BannerWidget extends StatelessWidget {
child: ClipRRect(
borderRadius: const BorderRadius.all(Radius.circular(50)),
child: DottedBorder(
borderType: BorderType.RRect,
radius: const Radius.circular(50),
dashPattern: const <double>[3, 3],
color: dashColor,
options: RoundedRectDottedBorderOptions(
radius: const Radius.circular(50),
dashPattern: <double>[3, 3],
color: dashColor,
),
child: Stack(
children: [
if (BannerType.starUs == type)

View File

@@ -28,7 +28,7 @@ class CustomIconWidget extends StatelessWidget {
width: 1.5,
color: getEnteColorScheme(context)
.tagChipSelectedColor
.withOpacity(0.5),
.withValues(alpha: 0.5),
),
borderRadius: SmoothBorderRadius(
cornerRadius: 15.5,
@@ -102,7 +102,7 @@ class CustomIconWidget extends StatelessWidget {
child: Icon(
Icons.edit,
size: 16,
color: Colors.black.withOpacity(0.9),
color: Colors.black.withValues(alpha: 0.9),
),
),
),

View File

@@ -52,7 +52,7 @@ class NotificationWidget extends StatelessWidget {
subTextStyle = textTheme.miniMuted;
strokeColorScheme = colorScheme;
boxShadow = [
BoxShadow(color: Colors.black.withOpacity(0.25), blurRadius: 1),
BoxShadow(color: Colors.black.withValues(alpha: 0.25), blurRadius: 1),
];
break;

View File

@@ -123,7 +123,7 @@ class TitleBarWidget extends StatelessWidget {
);
}
_actionsWithPaddingInBetween() {
List<Widget> _actionsWithPaddingInBetween() {
if (actionIcons == null) {
return <Widget>[const SizedBox.shrink()];
}
@@ -135,7 +135,7 @@ class TitleBarWidget extends StatelessWidget {
return <Widget>[const SizedBox.shrink()];
}
if (length == 1) {
return actionIcons;
return actionIcons!;
}
while (index < length) {
if (!addWhiteSpace) {

View File

@@ -1,6 +1,7 @@
import 'package:ente_auth/ente_theme_data.dart';
import 'package:ente_auth/models/execution_states.dart';
import 'package:ente_auth/models/typedefs.dart';
import 'package:ente_auth/theme/colors.dart';
import 'package:ente_auth/ui/common/loading_widget.dart';
import 'package:ente_auth/utils/debouncer.dart';
import 'package:flutter/material.dart';
@@ -104,7 +105,7 @@ class _ToggleSwitchWidgetState extends State<ToggleSwitchWidget> {
);
}
Widget _stateIcon(enteColorScheme) {
Widget _stateIcon(EnteColorScheme enteColorScheme) {
if (executionState == ExecutionState.idle) {
return const SizedBox(width: 24);
} else if (executionState == ExecutionState.inProgress) {

View File

@@ -23,7 +23,8 @@ class CoachMarkWidget extends StatelessWidget {
Expanded(
child: Container(
width: double.infinity,
color: Theme.of(context).colorScheme.surface.withOpacity(0.1),
color:
Theme.of(context).colorScheme.surface.withValues(alpha: 0.1),
child: BackdropFilter(
filter: ImageFilter.blur(sigmaX: 8, sigmaY: 8),
child: Row(

View File

@@ -77,7 +77,7 @@ class AboutSectionWidget extends StatelessWidget {
UpdateService.instance.getLatestVersionInfo(),
);
},
barrierColor: Colors.black.withOpacity(0.85),
barrierColor: Colors.black.withValues(alpha: 0.85),
);
} else {
showShortToast(

View File

@@ -56,7 +56,7 @@ class AccountSectionWidget extends StatelessWidget {
builder: (BuildContext context) {
return const ChangeEmailDialog();
},
barrierColor: Colors.black.withOpacity(0.85),
barrierColor: Colors.black.withValues(alpha: 0.85),
barrierDismissible: false,
);
}

View File

@@ -83,7 +83,7 @@ class _DuplicateCodePageState extends State<DuplicateCodePage> {
color: Theme.of(context)
.iconTheme
.color!
.withOpacity(0.7),
.withValues(alpha: 0.7),
),
),
const Padding(padding: EdgeInsets.only(left: 4)),

View File

@@ -170,9 +170,14 @@ Future<void> _exportCodes(
}
codeFile.writeAsStringSync(fileContent);
final Size size = MediaQuery.of(context).size;
await Share.shareXFiles(
[XFile(codeFile.path)],
sharePositionOrigin: Rect.fromLTWH(0, 0, size.width, size.height / 2),
await SharePlus.instance.share(
ShareParams(
files: <XFile>[
XFile(codeFile.path, mimeType: 'text/plain'),
],
sharePositionOrigin:
Rect.fromLTWH(0, 0, size.width, size.height / 2),
),
);
Future.delayed(const Duration(seconds: 30), () async {
if (codeFile.existsSync()) {

View File

@@ -116,10 +116,10 @@ class _LockScreenConfirmPasswordState extends State<LockScreenConfirmPassword> {
shape: BoxShape.circle,
gradient: LinearGradient(
colors: [
Colors.grey.shade500.withOpacity(0.2),
Colors.grey.shade50.withOpacity(0.1),
Colors.grey.shade400.withOpacity(0.2),
Colors.grey.shade300.withOpacity(0.4),
Colors.grey.shade500.withValues(alpha: 0.2),
Colors.grey.shade50.withValues(alpha: 0.1),
Colors.grey.shade400.withValues(alpha: 0.2),
Colors.grey.shade300.withValues(alpha: 0.4),
],
begin: Alignment.topCenter,
end: Alignment.bottomCenter,

View File

@@ -1,7 +1,9 @@
import "dart:io";
import "package:ente_auth/l10n/l10n.dart";
import "package:ente_auth/theme/colors.dart";
import "package:ente_auth/theme/ente_theme.dart";
import "package:ente_auth/theme/text_style.dart";
import "package:ente_auth/ui/settings/lock_screen/custom_pin_keypad.dart";
import "package:ente_auth/utils/lock_screen_settings.dart";
import "package:flutter/material.dart";
@@ -89,7 +91,7 @@ class _LockScreenConfirmPinState extends State<LockScreenConfirmPin> {
);
}
Widget _getBody(colorTheme, textTheme) {
Widget _getBody(EnteColorScheme colorTheme, EnteTextTheme textTheme) {
return Center(
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
@@ -107,10 +109,10 @@ class _LockScreenConfirmPinState extends State<LockScreenConfirmPin> {
shape: BoxShape.circle,
gradient: LinearGradient(
colors: [
Colors.grey.shade500.withOpacity(0.2),
Colors.grey.shade50.withOpacity(0.1),
Colors.grey.shade400.withOpacity(0.2),
Colors.grey.shade300.withOpacity(0.4),
Colors.grey.shade500.withValues(alpha: 0.2),
Colors.grey.shade50.withValues(alpha: 0.1),
Colors.grey.shade400.withValues(alpha: 0.2),
Colors.grey.shade300.withValues(alpha: 0.4),
],
begin: Alignment.topCenter,
end: Alignment.bottomCenter,

View File

@@ -127,10 +127,10 @@ class _LockScreenPasswordState extends State<LockScreenPassword> {
shape: BoxShape.circle,
gradient: LinearGradient(
colors: [
Colors.grey.shade500.withOpacity(0.2),
Colors.grey.shade50.withOpacity(0.1),
Colors.grey.shade400.withOpacity(0.2),
Colors.grey.shade300.withOpacity(0.4),
Colors.grey.shade500.withValues(alpha: 0.2),
Colors.grey.shade50.withValues(alpha: 0.1),
Colors.grey.shade400.withValues(alpha: 0.2),
Colors.grey.shade300.withValues(alpha: 0.4),
],
begin: Alignment.topCenter,
end: Alignment.bottomCenter,

View File

@@ -178,10 +178,10 @@ class _LockScreenPinState extends State<LockScreenPin> {
shape: BoxShape.circle,
gradient: LinearGradient(
colors: [
Colors.grey.shade500.withOpacity(0.2),
Colors.grey.shade50.withOpacity(0.1),
Colors.grey.shade400.withOpacity(0.2),
Colors.grey.shade300.withOpacity(0.4),
Colors.grey.shade500.withValues(alpha: 0.2),
Colors.grey.shade50.withValues(alpha: 0.1),
Colors.grey.shade400.withValues(alpha: 0.2),
Colors.grey.shade300.withValues(alpha: 0.4),
],
begin: Alignment.topCenter,
end: Alignment.bottomCenter,

View File

@@ -43,7 +43,7 @@ class _SupportSectionWidgetState extends State<SupportSectionWidget> {
trailingIconIsMuted: true,
onTap: () async {
try {
PlatformUtil.openWebView(
await PlatformUtil.openWebView(
context,
context.l10n.faq,
"https://help.ente.io/auth/faq",

View File

@@ -35,7 +35,7 @@ class SortCodeMenuWidget extends StatelessWidget {
text,
style: Theme.of(context).textTheme.titleMedium!.copyWith(
fontSize: 14,
color: Theme.of(context).iconTheme.color!.withOpacity(0.7),
color: Theme.of(context).iconTheme.color!.withValues(alpha: 0.7),
),
);
}

View File

@@ -1,9 +1,9 @@
import 'dart:async';
import 'package:ente_auth/l10n/l10n.dart';
import 'package:ente_auth/locale.dart';
import 'package:ente_auth/utils/lock_screen_settings.dart';
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
/// A widget which handles app lifecycle events for showing and hiding a lock screen.
/// This should wrap around a `MyApp` widget (or equivalent).

View File

@@ -96,10 +96,10 @@ class _LockScreenState extends State<LockScreen> with WidgetsBindingObserver {
shape: BoxShape.circle,
gradient: LinearGradient(
colors: [
Colors.grey.shade500.withOpacity(0.2),
Colors.grey.shade50.withOpacity(0.1),
Colors.grey.shade400.withOpacity(0.2),
Colors.grey.shade300.withOpacity(0.4),
Colors.grey.shade500.withValues(alpha: 0.2),
Colors.grey.shade50.withValues(alpha: 0.1),
Colors.grey.shade400.withValues(alpha: 0.2),
Colors.grey.shade300.withValues(alpha: 0.4),
],
begin: Alignment.topCenter,
end: Alignment.bottomCenter,

View File

@@ -98,8 +98,9 @@ class _TwoFactorRecoveryPageState extends State<TwoFactorRecoveryPage> {
style: TextStyle(
decoration: TextDecoration.underline,
fontSize: 12,
color:
getEnteColorScheme(context).textBase.withOpacity(0.9),
color: getEnteColorScheme(context)
.textBase
.withValues(alpha: 0.9),
),
),
),

View File

@@ -180,7 +180,7 @@ Future<ButtonResult?> showGenericErrorDialog({
context,
context.l10n.faq,
"https://help.ente.io/auth/troubleshooting/windows-login",
);
).ignore();
},
),
ButtonWidget(

View File

@@ -34,7 +34,7 @@ class DirectoryUtils {
}
static String migratedNamingChanges = "migrated_naming_changes.b5";
static migrateNamingChanges() async {
static Future<void> migrateNamingChanges() async {
try {
final sharedPrefs = await SharedPreferences.getInstance();
if (sharedPrefs.containsKey(migratedNamingChanges)) {
@@ -57,7 +57,7 @@ class DirectoryUtils {
Directory oldDataDir;
Directory newDataDir = await getApplicationSupportDirectory();
await newDataDir.create(recursive: true);
if (Platform.isLinux) {
oldDataDir = Directory(
p.join(dataHome.path, "ente_auth"),

View File

@@ -232,9 +232,13 @@ Future<void> exportLogs(
MimeType.zip,
);
} else {
await Share.shareXFiles(
[XFile(zipFilePath, mimeType: 'application/zip')],
sharePositionOrigin: Rect.fromLTWH(0, 0, size.width, size.height / 2),
await SharePlus.instance.share(
ShareParams(
files: <XFile>[
XFile(zipFilePath, mimeType: 'application/zip'),
],
sharePositionOrigin: Rect.fromLTWH(0, 0, size.width, size.height / 2),
),
);
}
}

View File

@@ -28,7 +28,11 @@ class PlatformUtil {
? cupertinoTextSelectionControls
: desktopTextSelectionControls;
static openWebView(BuildContext context, String title, String url) async {
static Future<void> openWebView(
BuildContext context,
String title,
String url,
) async {
if (PlatformUtil.isDesktop()) {
await launchUrlString(url);
return;

View File

@@ -91,9 +91,11 @@ Future<ShareResult> shareText(
}) async {
try {
final sharePosOrigin = _sharePosOrigin(context, key);
return Share.share(
text,
sharePositionOrigin: sharePosOrigin,
return SharePlus.instance.share(
ShareParams(
text: text,
sharePositionOrigin: sharePosOrigin,
),
);
} catch (e, s) {
Logger("ShareUtil").severe("failed to share text", e, s);

View File

@@ -1,4 +1,5 @@
import 'package:ente_auth/ente_theme_data.dart';
import 'package:ente_auth/utils/platform_util.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:fluttertoast/fluttertoast.dart';
@@ -9,6 +10,58 @@ void showToast(
toastLength = Toast.LENGTH_LONG,
iOSDismissOnTap = true,
}) async {
// If on mobile render toast above the keyboard using FToast.
final bool isMobile = PlatformUtil.isMobile();
if (isMobile) {
final baseToast = Container(
padding: const EdgeInsets.symmetric(horizontal: 24.0, vertical: 12.0),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(25.0),
color: Theme.of(context).colorScheme.toastBackgroundColor,
),
child: Text(
message,
textAlign: TextAlign.center,
style: TextStyle(
color: Theme.of(context).colorScheme.toastTextColor,
fontSize: 16.0,
),
),
);
final fToast = FToast()..init(context);
Widget toastChild = baseToast;
if (iOSDismissOnTap == true) {
toastChild = GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: () {
fToast.removeCustomToast();
fToast.removeQueuedCustomToasts();
},
child: baseToast,
);
}
fToast.showToast(
child: toastChild,
gravity: ToastGravity.BOTTOM,
toastDuration: const Duration(seconds: 2),
positionedToastBuilder: (context, child, _) {
final double currentInset = MediaQuery.of(context).viewInsets.bottom;
return Positioned(
left: 16,
right: 16,
bottom: currentInset + 16,
child: child,
);
},
);
return;
}
// Default path (desktop)
try {
await Fluttertoast.cancel();
await Fluttertoast.showToast(
@@ -21,7 +74,8 @@ void showToast(
fontSize: 16.0,
);
} on MissingPluginException catch (_) {
Widget toast = Container(
final fToast = FToast()..init(context);
final Widget baseToast = Container(
padding: const EdgeInsets.symmetric(horizontal: 24.0, vertical: 12.0),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(25.0),
@@ -36,17 +90,14 @@ void showToast(
),
);
final fToast = FToast();
fToast.init(context);
fToast.showToast(
child: toast,
child: baseToast,
gravity: ToastGravity.BOTTOM,
toastDuration: const Duration(seconds: 2),
);
}
}
void showShortToast(context, String message) {
void showShortToast(BuildContext context, String message) {
showToast(context, message, toastLength: Toast.LENGTH_SHORT);
}

View File

@@ -36,7 +36,7 @@ class WindowsProtocolHandler {
hKey,
txtKey,
txtValue,
REG_VALUE_TYPE.REG_SZ,
REG_SZ,
txtData,
txtData.length * 2 + 2,
);

View File

@@ -10,7 +10,7 @@
#include <flutter_local_authentication/flutter_local_authentication_plugin.h>
#include <flutter_secure_storage_linux/flutter_secure_storage_linux_plugin.h>
#include <gtk/gtk_plugin.h>
#include <screen_retriever/screen_retriever_plugin.h>
#include <screen_retriever_linux/screen_retriever_linux_plugin.h>
#include <sentry_flutter/sentry_flutter_plugin.h>
#include <sodium_libs/sodium_libs_plugin.h>
#include <sqlite3_flutter_libs/sqlite3_flutter_libs_plugin.h>
@@ -31,9 +31,9 @@ void fl_register_plugins(FlPluginRegistry* registry) {
g_autoptr(FlPluginRegistrar) gtk_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "GtkPlugin");
gtk_plugin_register_with_registrar(gtk_registrar);
g_autoptr(FlPluginRegistrar) screen_retriever_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "ScreenRetrieverPlugin");
screen_retriever_plugin_register_with_registrar(screen_retriever_registrar);
g_autoptr(FlPluginRegistrar) screen_retriever_linux_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "ScreenRetrieverLinuxPlugin");
screen_retriever_linux_plugin_register_with_registrar(screen_retriever_linux_registrar);
g_autoptr(FlPluginRegistrar) sentry_flutter_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "SentryFlutterPlugin");
sentry_flutter_plugin_register_with_registrar(sentry_flutter_registrar);

View File

@@ -7,7 +7,7 @@ list(APPEND FLUTTER_PLUGIN_LIST
flutter_local_authentication
flutter_secure_storage_linux
gtk
screen_retriever
screen_retriever_linux
sentry_flutter
sodium_libs
sqlite3_flutter_libs

View File

@@ -8,6 +8,7 @@ import Foundation
import app_links
import connectivity_plus
import device_info_plus
import file_picker
import file_saver
import flutter_inappwebview_macos
import flutter_local_authentication
@@ -16,12 +17,12 @@ import flutter_secure_storage_macos
import local_auth_darwin
import package_info_plus
import path_provider_foundation
import screen_retriever
import screen_retriever_macos
import sentry_flutter
import share_plus
import shared_preferences_foundation
import sodium_libs
import sqflite
import sqflite_darwin
import sqlite3_flutter_libs
import tray_manager
import url_launcher_macos
@@ -31,15 +32,16 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
AppLinksMacosPlugin.register(with: registry.registrar(forPlugin: "AppLinksMacosPlugin"))
ConnectivityPlusPlugin.register(with: registry.registrar(forPlugin: "ConnectivityPlusPlugin"))
DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin"))
FilePickerPlugin.register(with: registry.registrar(forPlugin: "FilePickerPlugin"))
FileSaverPlugin.register(with: registry.registrar(forPlugin: "FileSaverPlugin"))
InAppWebViewFlutterPlugin.register(with: registry.registrar(forPlugin: "InAppWebViewFlutterPlugin"))
FlutterLocalAuthenticationPlugin.register(with: registry.registrar(forPlugin: "FlutterLocalAuthenticationPlugin"))
FlutterLocalNotificationsPlugin.register(with: registry.registrar(forPlugin: "FlutterLocalNotificationsPlugin"))
FlutterSecureStoragePlugin.register(with: registry.registrar(forPlugin: "FlutterSecureStoragePlugin"))
FLALocalAuthPlugin.register(with: registry.registrar(forPlugin: "FLALocalAuthPlugin"))
LocalAuthPlugin.register(with: registry.registrar(forPlugin: "LocalAuthPlugin"))
FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin"))
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
ScreenRetrieverPlugin.register(with: registry.registrar(forPlugin: "ScreenRetrieverPlugin"))
ScreenRetrieverMacosPlugin.register(with: registry.registrar(forPlugin: "ScreenRetrieverMacosPlugin"))
SentryFlutterPlugin.register(with: registry.registrar(forPlugin: "SentryFlutterPlugin"))
SharePlusMacosPlugin.register(with: registry.registrar(forPlugin: "SharePlusMacosPlugin"))
SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))

View File

@@ -2,13 +2,14 @@ PODS:
- app_links (1.0.0):
- FlutterMacOS
- connectivity_plus (0.0.1):
- Flutter
- FlutterMacOS
- cupertino_http (0.0.1):
- Flutter
- FlutterMacOS
- device_info_plus (0.0.1):
- FlutterMacOS
- file_picker (0.0.1):
- FlutterMacOS
- file_saver (0.0.1):
- FlutterMacOS
- flutter_inappwebview_macos (0.0.1):
@@ -18,7 +19,7 @@ PODS:
- FlutterMacOS
- flutter_local_notifications (0.0.1):
- FlutterMacOS
- flutter_secure_storage_macos (6.1.1):
- flutter_secure_storage_macos (6.1.3):
- FlutterMacOS
- FlutterMacOS (1.0.0)
- local_auth_darwin (0.0.1):
@@ -32,7 +33,7 @@ PODS:
- path_provider_foundation (0.0.1):
- Flutter
- FlutterMacOS
- screen_retriever (0.0.1):
- screen_retriever_macos (0.0.1):
- FlutterMacOS
- Sentry/HybridSDK (8.46.0)
- sentry_flutter (8.14.2):
@@ -46,39 +47,44 @@ PODS:
- FlutterMacOS
- sodium_libs (2.2.1):
- FlutterMacOS
- sqflite (0.0.3):
- sqflite_darwin (0.0.4):
- Flutter
- FlutterMacOS
- "sqlite3 (3.46.1+1)":
- "sqlite3/common (= 3.46.1+1)"
- "sqlite3/common (3.46.1+1)"
- "sqlite3/dbstatvtab (3.46.1+1)":
- sqlite3 (3.50.1):
- sqlite3/common (= 3.50.1)
- sqlite3/common (3.50.1)
- sqlite3/dbstatvtab (3.50.1):
- sqlite3/common
- "sqlite3/fts5 (3.46.1+1)":
- sqlite3/fts5 (3.50.1):
- sqlite3/common
- "sqlite3/perf-threadsafe (3.46.1+1)":
- sqlite3/math (3.50.1):
- sqlite3/common
- "sqlite3/rtree (3.46.1+1)":
- sqlite3/perf-threadsafe (3.50.1):
- sqlite3/common
- sqlite3/rtree (3.50.1):
- sqlite3/common
- sqlite3_flutter_libs (0.0.1):
- Flutter
- FlutterMacOS
- "sqlite3 (~> 3.46.0+1)"
- sqlite3 (~> 3.50.1)
- sqlite3/dbstatvtab
- sqlite3/fts5
- sqlite3/math
- sqlite3/perf-threadsafe
- sqlite3/rtree
- tray_manager (0.0.1):
- FlutterMacOS
- url_launcher_macos (0.0.1):
- FlutterMacOS
- window_manager (0.2.0):
- window_manager (0.5.0):
- FlutterMacOS
DEPENDENCIES:
- app_links (from `Flutter/ephemeral/.symlinks/plugins/app_links/macos`)
- connectivity_plus (from `Flutter/ephemeral/.symlinks/plugins/connectivity_plus/darwin`)
- connectivity_plus (from `Flutter/ephemeral/.symlinks/plugins/connectivity_plus/macos`)
- cupertino_http (from `Flutter/ephemeral/.symlinks/plugins/cupertino_http/darwin`)
- device_info_plus (from `Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos`)
- file_picker (from `Flutter/ephemeral/.symlinks/plugins/file_picker/macos`)
- file_saver (from `Flutter/ephemeral/.symlinks/plugins/file_saver/macos`)
- flutter_inappwebview_macos (from `Flutter/ephemeral/.symlinks/plugins/flutter_inappwebview_macos/macos`)
- flutter_local_authentication (from `Flutter/ephemeral/.symlinks/plugins/flutter_local_authentication/macos`)
@@ -89,13 +95,13 @@ DEPENDENCIES:
- objective_c (from `Flutter/ephemeral/.symlinks/plugins/objective_c/macos`)
- package_info_plus (from `Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos`)
- path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`)
- screen_retriever (from `Flutter/ephemeral/.symlinks/plugins/screen_retriever/macos`)
- screen_retriever_macos (from `Flutter/ephemeral/.symlinks/plugins/screen_retriever_macos/macos`)
- sentry_flutter (from `Flutter/ephemeral/.symlinks/plugins/sentry_flutter/macos`)
- share_plus (from `Flutter/ephemeral/.symlinks/plugins/share_plus/macos`)
- shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin`)
- sodium_libs (from `Flutter/ephemeral/.symlinks/plugins/sodium_libs/macos`)
- sqflite (from `Flutter/ephemeral/.symlinks/plugins/sqflite/darwin`)
- sqlite3_flutter_libs (from `Flutter/ephemeral/.symlinks/plugins/sqlite3_flutter_libs/macos`)
- sqflite_darwin (from `Flutter/ephemeral/.symlinks/plugins/sqflite_darwin/darwin`)
- sqlite3_flutter_libs (from `Flutter/ephemeral/.symlinks/plugins/sqlite3_flutter_libs/darwin`)
- tray_manager (from `Flutter/ephemeral/.symlinks/plugins/tray_manager/macos`)
- url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`)
- window_manager (from `Flutter/ephemeral/.symlinks/plugins/window_manager/macos`)
@@ -110,11 +116,13 @@ EXTERNAL SOURCES:
app_links:
:path: Flutter/ephemeral/.symlinks/plugins/app_links/macos
connectivity_plus:
:path: Flutter/ephemeral/.symlinks/plugins/connectivity_plus/darwin
:path: Flutter/ephemeral/.symlinks/plugins/connectivity_plus/macos
cupertino_http:
:path: Flutter/ephemeral/.symlinks/plugins/cupertino_http/darwin
device_info_plus:
:path: Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos
file_picker:
:path: Flutter/ephemeral/.symlinks/plugins/file_picker/macos
file_saver:
:path: Flutter/ephemeral/.symlinks/plugins/file_saver/macos
flutter_inappwebview_macos:
@@ -135,8 +143,8 @@ EXTERNAL SOURCES:
:path: Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos
path_provider_foundation:
:path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin
screen_retriever:
:path: Flutter/ephemeral/.symlinks/plugins/screen_retriever/macos
screen_retriever_macos:
:path: Flutter/ephemeral/.symlinks/plugins/screen_retriever_macos/macos
sentry_flutter:
:path: Flutter/ephemeral/.symlinks/plugins/sentry_flutter/macos
share_plus:
@@ -145,10 +153,10 @@ EXTERNAL SOURCES:
:path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin
sodium_libs:
:path: Flutter/ephemeral/.symlinks/plugins/sodium_libs/macos
sqflite:
:path: Flutter/ephemeral/.symlinks/plugins/sqflite/darwin
sqflite_darwin:
:path: Flutter/ephemeral/.symlinks/plugins/sqflite_darwin/darwin
sqlite3_flutter_libs:
:path: Flutter/ephemeral/.symlinks/plugins/sqlite3_flutter_libs/macos
:path: Flutter/ephemeral/.symlinks/plugins/sqlite3_flutter_libs/darwin
tray_manager:
:path: Flutter/ephemeral/.symlinks/plugins/tray_manager/macos
url_launcher_macos:
@@ -157,33 +165,34 @@ EXTERNAL SOURCES:
:path: Flutter/ephemeral/.symlinks/plugins/window_manager/macos
SPEC CHECKSUMS:
app_links: 9028728e32c83a0831d9db8cf91c526d16cc5468
connectivity_plus: 3f6c9057f4cd64198dc826edfb0542892f825343
app_links: afe860c55c7ef176cea7fb630a2b7d7736de591d
connectivity_plus: 4adf20a405e25b42b9c9f87feff8f4b6fde18a4e
cupertino_http: 94ac07f5ff090b8effa6c5e2c47871d48ab7c86c
device_info_plus: b0fafc687fb901e2af612763340f1b0d4352f8e5
file_picker: 7584aae6fa07a041af2b36a2655122d42f578c1a
file_saver: e35bd97de451dde55ff8c38862ed7ad0f3418d0f
flutter_inappwebview_macos: c2d68649f9f8f1831bfcd98d73fd6256366d9d1d
flutter_local_authentication: 2f9a2682f498abcc12d7e9729b5007a947170fdc
flutter_local_notifications: 453432cd6399a07d072885bc7828fb2307868856
flutter_secure_storage_macos: b2d62a774c23b060f0b99d0173b0b36abb4a8632
flutter_local_notifications: 13862b132e32eb858dea558a86d45d08daeacfe7
flutter_secure_storage_macos: 7f45e30f838cf2659862a4e4e3ee1c347c2b3b54
FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24
local_auth_darwin: 553ce4f9b16d3fdfeafce9cf042e7c9f77c1c391
local_auth_darwin: d2e8c53ef0c4f43c646462e3415432c4dab3ae19
objective_c: ec13431e45ba099cb734eb2829a5c1cd37986cba
OrderedSet: e539b66b644ff081c73a262d24ad552a69be3a94
package_info_plus: a8a591e70e87ce97ce5d21b2594f69cea9e0312f
package_info_plus: f0052d280d17aa382b932f399edf32507174e870
path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564
screen_retriever: 4f97c103641aab8ce183fa5af3b87029df167936
screen_retriever_macos: 452e51764a9e1cdb74b3c541238795849f21557f
Sentry: da60d980b197a46db0b35ea12cb8f39af48d8854
sentry_flutter: 27892878729f42701297c628eb90e7c6529f3684
share_plus: 11c7b7fa7020465584eca3ff6392c5bc1e399d6e
share_plus: 510bf0af1a42cd602274b4629920c9649c52f4cc
shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7
sodium_libs: b9459e5bfc1185349f43472e79fc5d8e526b2bda
sqflite: c35dad70033b8862124f8337cc994a809fcd9fa3
sqlite3: 0bb0e6389d824e40296f531b858a2a0b71c0d2fb
sqlite3_flutter_libs: 03311aede9d32fb2d24e32bebb8cd01c3b2e6239
sqflite_darwin: 20b2a3a3b70e43edae938624ce550a3cbf66a3d0
sqlite3: 1d85290c3321153511f6e900ede7a1608718bbd5
sqlite3_flutter_libs: e7fc8c9ea2200ff3271f08f127842131746b70e2
tray_manager: a104b5c81b578d83f3c3d0f40a997c8b10810166
url_launcher_macos: 0fba8ddabfc33ce0a9afe7c5fef5aab3d8d2d673
window_manager: 1d01fa7ac65a6e6f83b965471b1a7fdd3f06166c
window_manager: b729e31d38fb04905235df9ea896128991cad99e
PODFILE CHECKSUM: 6ff827273ace187339fc5d3684072a26ad85c298

View File

@@ -48,6 +48,7 @@
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
enableGPUValidationMode = "1"
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">

File diff suppressed because it is too large Load Diff

View File

@@ -10,11 +10,11 @@ environment:
dependencies:
adaptive_theme: ^3.1.0 # done
app_links: ^6.3.3
archive: ^3.3.7
archive: ^4.0.7
auto_size_text: ^3.0.0
base32: ^2.1.3
bip39: ^1.0.6 #done
bloc: ^8.1.2
bloc: ^9.0.0
clipboard: ^0.1.3
collection: ^1.18.0 # dart
confetti: ^0.8.0
@@ -22,7 +22,7 @@ dependencies:
convert: ^3.1.1
device_info_plus: ^9.1.1
dio: ^5.8.0+1
dotted_border: ^2.0.0+2
dotted_border: ^3.1.0
dropdown_button2: ^2.3.9
email_validator: ^3.0.0
ente_crypto_dart:
@@ -32,19 +32,19 @@ dependencies:
expandable: ^5.0.1
expansion_tile_card: ^3.0.0
ffi: ^2.1.0
figma_squircle: ^0.5.3
file_picker: ^8.1.7
figma_squircle: ^0.6.3
file_picker: ^10.2.0
# https://github.com/incrediblezayed/file_saver/issues/86
file_saver: ^0.2.11
file_saver: ^0.3.0
fixnum: ^1.1.0
fk_user_agent: ^2.1.0
flutter:
sdk: flutter
flutter_animate: ^4.1.0
flutter_bloc: ^8.0.1
flutter_bloc: ^9.1.1
flutter_context_menu: ^0.2.0
flutter_displaymode: ^0.6.0
flutter_email_sender: ^6.0.2
flutter_email_sender: ^7.0.0
# revert to pub.dev when merged
# https://github.com/pichillilorenzo/flutter_inappwebview/pull/2548
flutter_inappwebview:
@@ -57,7 +57,7 @@ dependencies:
git:
url: https://github.com/eaceto/flutter_local_authentication
ref: 1ac346a04592a05fd75acccf2e01fa3c7e955d96
flutter_local_notifications: ^17.2.2
flutter_local_notifications: ^18.0.1
flutter_localizations:
sdk: flutter
flutter_native_splash: ^2.2.13
@@ -69,7 +69,7 @@ dependencies:
google_nav_bar: ^5.0.5 #supported
gradient_borders: ^1.0.0
http: ^1.1.0
intl: ^0.19.0
intl: ^0.20.2
io: ^1.0.4
json_annotation: ^4.5.0
local_auth: ^2.3.0
@@ -87,30 +87,27 @@ dependencies:
pinput: ^5.0.0
pointycastle: ^3.7.3
privacy_screen: ^0.0.6
protobuf: ^3.0.0
protobuf: ^4.1.0
qr_code_scanner: ^1.0.1
qr_flutter: ^4.1.0
sentry: ^8.14.2
sentry_flutter: ^8.14.2
share_plus: ^10.0.2
share_plus: ^11.0.0
shared_preferences: ^2.0.5
sqflite:
git:
url: https://github.com/tekartik/sqflite
path: sqflite
sqflite: ^2.4.2
sqflite_common_ffi: ^2.3.0+4
sqlite3: ^2.4.3
sqlite3_flutter_libs: ^0.5.24
steam_totp: ^0.0.1
step_progress_indicator: ^1.0.2
styled_text: ^8.1.0
tray_manager: ^0.2.1
tray_manager: ^0.5.0
tuple: ^2.0.0
url_launcher: ^6.3.1
url_launcher_ios: ^6.3.1
uuid: ^4.2.2
win32: ^5.1.1
window_manager: ^0.4.2
window_manager: ^0.5.0
xdg_directories: ^1.0.4
dev_dependencies:
@@ -118,7 +115,7 @@ dev_dependencies:
flutter_test:
sdk: flutter
json_serializable: ^6.2.0
lints: ^5.0.0
lints: ^5.1.1
mocktail: ^1.0.3
# The following section is specific to Flutter.

View File

@@ -1,4 +1,4 @@
import "package:ente_auth/l10n/l10n.dart";
import "package:ente_auth/l10n/arb/app_localizations.dart";
import "package:flutter/material.dart";
import "package:flutter_localizations/flutter_localizations.dart";
import "package:flutter_test/flutter_test.dart";
@@ -8,7 +8,6 @@ extension PumpApp on WidgetTester {
return pumpWidget(
MaterialApp(
localizationsDelegates: const [
AppLocalizations.delegate,
GlobalMaterialLocalizations.delegate,
],
supportedLocales: AppLocalizations.supportedLocales,

View File

@@ -13,7 +13,7 @@
#include <flutter_local_authentication/flutter_local_authentication_plugin_c_api.h>
#include <flutter_secure_storage_windows/flutter_secure_storage_windows_plugin.h>
#include <local_auth_windows/local_auth_plugin.h>
#include <screen_retriever/screen_retriever_plugin.h>
#include <screen_retriever_windows/screen_retriever_windows_plugin_c_api.h>
#include <sentry_flutter/sentry_flutter_plugin.h>
#include <share_plus/share_plus_windows_plugin_c_api.h>
#include <sodium_libs/sodium_libs_plugin_c_api.h>
@@ -37,8 +37,8 @@ void RegisterPlugins(flutter::PluginRegistry* registry) {
registry->GetRegistrarForPlugin("FlutterSecureStorageWindowsPlugin"));
LocalAuthPluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("LocalAuthPlugin"));
ScreenRetrieverPluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("ScreenRetrieverPlugin"));
ScreenRetrieverWindowsPluginCApiRegisterWithRegistrar(
registry->GetRegistrarForPlugin("ScreenRetrieverWindowsPluginCApi"));
SentryFlutterPluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("SentryFlutterPlugin"));
SharePlusWindowsPluginCApiRegisterWithRegistrar(

View File

@@ -10,7 +10,7 @@ list(APPEND FLUTTER_PLUGIN_LIST
flutter_local_authentication
flutter_secure_storage_windows
local_auth_windows
screen_retriever
screen_retriever_windows
sentry_flutter
share_plus
sodium_libs

View File

@@ -0,0 +1,3 @@
{
"flutter": "3.32.8"
}

Some files were not shown because too many files have changed in this diff Show More