Skip to content

Commit c6260be

Browse files
chore: simplify maui project by removing dependency repetitions (#451)
## Summary Simplify maui project by removing dependency repetitions. Test on Starbucks app ## How did you test this change? <!-- Frontend - Leave a screencast or a screenshot to visually describe the changes. --> ## Are there any deployment considerations? <!-- Backend - Do we need to consider migrations or backfilling data? --> <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Medium Risk** > Medium risk because it changes how native AAR/JAR artifacts are selected, packaged, and auto-wired into consuming Android projects, which could break build/pack behavior if patterns or paths miss/over-include files. > > **Overview** > Bumps the `LaunchDarkly.SessionReplay` package version to `0.5.5` and refactors Android native artifact handling to a single shared MSBuild manifest (`NativeAndroidDeps.props`) used by both local builds (`LDObservability.csproj`) and the packaging project (`LDObservability.Fat.csproj`). > > Simplifies the NuGet `buildTransitive` wiring by glob-including packaged `*.aar`/`*.jar` and removing the separate `LDObservability.android.targets`/`LDObservability.ios.targets` files. The MAUI sample project now enables `EmbedAssembliesIntoApk` for Android. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 5e74560. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
1 parent b59fbd4 commit c6260be

File tree

8 files changed

+78
-302
lines changed

8 files changed

+78
-302
lines changed

sdk/@launchdarkly/mobile-dotnet/observability/Directory.Build.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project>
22
<PropertyGroup>
33
<PackageId>LaunchDarkly.SessionReplay</PackageId>
4-
<Version>0.5.3</Version>
4+
<Version>0.5.5</Version>
55
<UseLocalClientSdk>false</UseLocalClientSdk>
66
<Authors>LaunchDarkly</Authors>
77
<Owners>LaunchDarkly</Owners>

sdk/@launchdarkly/mobile-dotnet/observability/LDObservability.Fat.csproj

Lines changed: 5 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -76,47 +76,14 @@
7676
Pack="true" PackagePath="lib/net9.0-ios18.0/" />
7777
</ItemGroup>
7878

79-
<!-- Package native artifacts -->
80-
<ItemGroup>
81-
<!-- LD specific AARs -->
82-
<None Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\android-agent-*.aar" Pack="true" PackagePath="runtimes/android/native/" />
83-
<None Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\android-instrumentation-*.aar" Pack="true" PackagePath="runtimes/android/native/" />
84-
<!-- Use more specific patterns to avoid duplicates -->
85-
<None Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\common-0*.aar" Pack="true" PackagePath="runtimes/android/native/" />
86-
<None Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\common-api-*.aar" Pack="true" PackagePath="runtimes/android/native/" />
87-
<None Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\core-*-alpha.aar" Pack="true" PackagePath="runtimes/android/native/" />
88-
<None Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\crash-*-alpha.aar" Pack="true" PackagePath="runtimes/android/native/" />
89-
<None Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\anr-*-alpha.aar" Pack="true" PackagePath="runtimes/android/native/" />
90-
<None Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\activity-*-alpha.aar" Pack="true" PackagePath="runtimes/android/native/" />
91-
<None Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\fragment-*-alpha.aar" Pack="true" PackagePath="runtimes/android/native/" />
92-
<None Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\network-*-alpha.aar" Pack="true" PackagePath="runtimes/android/native/" />
93-
<None Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\services-*-alpha.aar" Pack="true" PackagePath="runtimes/android/native/" />
94-
<None Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\session-*-alpha.aar" Pack="true" PackagePath="runtimes/android/native/" />
95-
<None Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\slowrendering-*-alpha.aar" Pack="true" PackagePath="runtimes/android/native/" />
96-
<None Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\startup-*-alpha.aar" Pack="true" PackagePath="runtimes/android/native/" />
97-
<None Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\launchdarkly-android-client-sdk-*.aar" Pack="true" PackagePath="runtimes/android/native/" />
98-
<None Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\lib-release.aar" Pack="true" PackagePath="runtimes/android/native/" />
99-
100-
<!-- Exclude all opentelemetry-sdk-extension-autoconfigure-*.jar, then re-include *-spi-* only: the main
101-
autoconfigure jar must not be packaged, but autoconfigure-spi must. A single exclude cannot use
102-
autoconfigure-* without dropping SPI; autoconfigure-1* was tied to OTel 1.x and broke after a 2.x bump. -->
103-
<None Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\opentelemetry-*.jar"
104-
Exclude="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\opentelemetry-sdk-extension-incubator-*.jar;..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\opentelemetry-sdk-extension-autoconfigure-*.jar"
105-
Pack="true" PackagePath="runtimes/android/native/" />
106-
<None Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\opentelemetry-sdk-extension-autoconfigure-spi-*.jar"
107-
Pack="true" PackagePath="runtimes/android/native/" />
108-
<None Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\jackson-*.jar" Pack="true" PackagePath="runtimes/android/native/" />
109-
<None Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\launchdarkly-*.jar" Pack="true" PackagePath="runtimes/android/native/" />
110-
<None Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\okhttp-*.jar" Pack="true" PackagePath="runtimes/android/native/" />
111-
<None Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\okio-*.jar" Pack="true" PackagePath="runtimes/android/native/" />
112-
<None Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\timber-*.aar" Pack="true" PackagePath="runtimes/android/native/" />
79+
<!-- Package native Android artifacts (shared artifact list) -->
80+
<Import Project="NativeAndroidDeps.props" />
11381

114-
<!-- Android module AAR containing ObservabilityBridge -->
115-
<None Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\aar\LDObserve-release.aar"
116-
Pack="true" PackagePath="runtimes/android/native/" />
82+
<ItemGroup>
83+
<None Include="@(_LDNativeAAR)" Pack="true" PackagePath="runtimes/android/native/" />
84+
<None Include="@(_LDNativeJAR)" Pack="true" PackagePath="runtimes/android/native/" />
11785

11886
<!-- iOS XCFramework -->
119-
<!-- Exclude Swift module metadata (very long paths; not needed for .NET binding consumption) -->
12087
<None Include="..\macios\native\LDObserve\build\outputs\LDObserveBridge.xcframework\**\*"
12188
Exclude="..\macios\native\LDObserve\build\outputs\LDObserveBridge.xcframework\**\Modules\**\*"
12289
Pack="true" PackagePath="runtimes/ios/native/LDObserveBridge.xcframework" />

sdk/@launchdarkly/mobile-dotnet/observability/LDObservability.csproj

Lines changed: 7 additions & 139 deletions
Original file line numberDiff line numberDiff line change
@@ -80,150 +80,18 @@
8080
<ProjectReference Include="..\android\LDObserve.Android.Binding\LDObserve.Android.Binding.csproj" />
8181
</ItemGroup>
8282

83-
<!-- Reference the Android binding dependencies (optional: only if built locally) -->
84-
<ItemGroup Condition="$(TargetFramework.Contains('android')) and '$(LD_INCLUDE_NATIVE_DEPS)' == 'true' and '$(Configuration)' == 'Release' and Exists('..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps')">
85-
<AndroidLibrary Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\launchdarkly-android-client-sdk-*.aar">
86-
<Bind>false</Bind>
87-
<Visible>false</Visible>
88-
</AndroidLibrary>
89-
<AndroidLibrary Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\lib-release.aar">
90-
<Bind>false</Bind>
91-
<Visible>false</Visible>
92-
</AndroidLibrary>
93-
<AndroidJavaLibrary Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\*launchdarkly*.jar">
94-
<Bind>false</Bind>
95-
<Visible>false</Visible>
96-
</AndroidJavaLibrary>
97-
<AndroidJavaLibrary Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\ok*.jar">
98-
<Bind>false</Bind>
99-
<Visible>false</Visible>
100-
</AndroidJavaLibrary>
101-
<AndroidLibrary Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\*timber*.aar">
102-
<Bind>false</Bind>
103-
<Visible>false</Visible>
104-
</AndroidLibrary>
105-
<AndroidJavaLibrary Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\opentelemetry*.jar">
106-
<Bind>false</Bind>
107-
<Visible>false</Visible>
108-
</AndroidJavaLibrary>
109-
<AndroidJavaLibrary Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\jackson*.jar">
110-
<Bind>false</Bind>
111-
<Visible>false</Visible>
112-
</AndroidJavaLibrary>
113-
<!-- Allowlist specific LD AARs to avoid pulling AndroidX -->
114-
<AndroidLibrary Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\android-agent-*.aar">
115-
<Bind>false</Bind>
116-
<Visible>false</Visible>
117-
</AndroidLibrary>
118-
<AndroidLibrary Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\common-*.aar">
119-
<Bind>false</Bind>
120-
<Visible>false</Visible>
121-
</AndroidLibrary>
122-
<AndroidLibrary Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\core-0.11.0-alpha.aar">
123-
<Bind>false</Bind>
124-
<Visible>false</Visible>
125-
</AndroidLibrary>
126-
<AndroidLibrary Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\crash-0.11.0-alpha.aar">
127-
<Bind>false</Bind>
128-
<Visible>false</Visible>
129-
</AndroidLibrary>
130-
<AndroidLibrary Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\anr-*.aar">
131-
<Bind>false</Bind>
132-
<Visible>false</Visible>
133-
</AndroidLibrary>
134-
<AndroidLibrary Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\activity-*-alpha.aar">
135-
<Bind>false</Bind>
136-
<Visible>false</Visible>
137-
</AndroidLibrary>
138-
<AndroidLibrary Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\android-instrumentation-*.aar">
139-
<Bind>false</Bind>
140-
<Visible>false</Visible>
141-
</AndroidLibrary>
142-
<AndroidLibrary Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\session-0.11.0-alpha.aar">
143-
<Bind>false</Bind>
144-
<Visible>false</Visible>
145-
</AndroidLibrary>
146-
<AndroidLibrary Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\services-0.11.0-alpha.aar">
147-
<Bind>false</Bind>
148-
<Visible>false</Visible>
149-
</AndroidLibrary>
150-
</ItemGroup>
151-
<ItemGroup Condition="$(TargetFramework.Contains('android')) and '$(LD_INCLUDE_NATIVE_DEPS)' == 'true' and '$(Configuration)' == 'Debug' and Exists('..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps')">
152-
<AndroidLibrary Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\launchdarkly-android-client-sdk-*.aar">
153-
<Bind>false</Bind>
154-
<Visible>false</Visible>
155-
</AndroidLibrary>
156-
<AndroidLibrary Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\lib-release.aar">
157-
<Bind>false</Bind>
158-
<Visible>false</Visible>
159-
</AndroidLibrary>
160-
<AndroidJavaLibrary Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\*launchdarkly*.jar">
161-
<Bind>false</Bind>
162-
<Visible>false</Visible>
163-
</AndroidJavaLibrary>
164-
<AndroidJavaLibrary Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\ok*.jar">
165-
<Bind>false</Bind>
166-
<Visible>false</Visible>
167-
</AndroidJavaLibrary>
168-
<AndroidLibrary Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\*timber*.aar">
83+
<!-- Native Android deps: import shared artifact list and wire as AndroidLibrary / AndroidJavaLibrary -->
84+
<Import Project="NativeAndroidDeps.props"
85+
Condition="$(TargetFramework.Contains('android')) and '$(LD_INCLUDE_NATIVE_DEPS)' == 'true' and Exists('..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps')" />
86+
87+
<ItemGroup Condition="$(TargetFramework.Contains('android')) and '$(LD_INCLUDE_NATIVE_DEPS)' == 'true' and Exists('..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps')">
88+
<AndroidLibrary Include="@(_LDNativeAAR)">
16989
<Bind>false</Bind>
17090
<Visible>false</Visible>
17191
</AndroidLibrary>
172-
<AndroidJavaLibrary Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\opentelemetry*.jar">
92+
<AndroidJavaLibrary Include="@(_LDNativeJAR)">
17393
<Bind>false</Bind>
17494
<Visible>false</Visible>
17595
</AndroidJavaLibrary>
176-
<AndroidJavaLibrary Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\jackson*.jar">
177-
<Bind>false</Bind>
178-
<Visible>false</Visible>
179-
</AndroidJavaLibrary>
180-
<!-- Allowlist specific LD AARs to avoid pulling AndroidX -->
181-
<AndroidLibrary Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\android-agent-*.aar">
182-
<Bind>false</Bind>
183-
<Visible>false</Visible>
184-
</AndroidLibrary>
185-
<AndroidLibrary Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\common-*.aar">
186-
<Bind>false</Bind>
187-
<Visible>false</Visible>
188-
</AndroidLibrary>
189-
<AndroidLibrary Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\core-0.11.0-alpha.aar">
190-
<Bind>false</Bind>
191-
<Visible>false</Visible>
192-
</AndroidLibrary>
193-
<AndroidLibrary Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\crash-0.11.0-alpha.aar">
194-
<Bind>false</Bind>
195-
<Visible>false</Visible>
196-
</AndroidLibrary>
197-
<AndroidLibrary Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\anr-*.aar">
198-
<Bind>false</Bind>
199-
<Visible>false</Visible>
200-
</AndroidLibrary>
201-
<AndroidLibrary Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\activity-*-alpha.aar">
202-
<Bind>false</Bind>
203-
<Visible>false</Visible>
204-
</AndroidLibrary>
205-
<AndroidLibrary Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\android-instrumentation-*.aar">
206-
<Bind>false</Bind>
207-
<Visible>false</Visible>
208-
</AndroidLibrary>
209-
<AndroidLibrary Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\session-0.11.0-alpha.aar">
210-
<Bind>false</Bind>
211-
<Visible>false</Visible>
212-
</AndroidLibrary>
213-
<AndroidLibrary Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\services-0.11.0-alpha.aar">
214-
<Bind>false</Bind>
215-
<Visible>false</Visible>
216-
</AndroidLibrary>
217-
</ItemGroup>
218-
<!-- Include the module AAR containing ObservabilityBridge (guard per path) -->
219-
<ItemGroup Condition="$(TargetFramework.Contains('android')) and '$(LD_INCLUDE_NATIVE_DEPS)' == 'true' and '$(Configuration)' == 'Release' and Exists('..\android\native\LDObserve\bin\Release\net9.0-android\outputs\aar\LDObserve-release.aar')">
220-
<AndroidLibrary Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\aar\LDObserve-release.aar">
221-
<Bind>false</Bind>
222-
</AndroidLibrary>
223-
</ItemGroup>
224-
<ItemGroup Condition="$(TargetFramework.Contains('android')) and '$(LD_INCLUDE_NATIVE_DEPS)' == 'true' and '$(Configuration)' == 'Debug' and Exists('..\android\native\LDObserve\bin\Release\net9.0-android\outputs\aar\LDObserve-release.aar')">
225-
<AndroidLibrary Include="..\android\native\LDObserve\bin\Release\net9.0-android\outputs\aar\LDObserve-release.aar">
226-
<Bind>false</Bind>
227-
</AndroidLibrary>
22896
</ItemGroup>
22997
</Project>
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
<Project>
2+
<!--
3+
Single source of truth for native Android artifacts (AARs / JARs) that
4+
must travel with the observability SDK. Both LDObservability.csproj
5+
(local dev builds) and LDObservability.Fat.csproj (NuGet packaging)
6+
import this file and transform the items into the appropriate MSBuild
7+
item types.
8+
9+
Callers may override _LDNativeDepsDir / _LDNativeAarDir before this
10+
import to point at a different output location.
11+
12+
Items are split into _LDNativeAAR and _LDNativeJAR because MSBuild
13+
does not allow %(Extension) metadata filtering in Include conditions.
14+
-->
15+
<PropertyGroup>
16+
<_LDNativeDepsDir Condition="'$(_LDNativeDepsDir)' == ''">$(MSBuildThisFileDirectory)..\android\native\LDObserve\bin\Release\net9.0-android\outputs\deps\</_LDNativeDepsDir>
17+
<_LDNativeAarDir Condition="'$(_LDNativeAarDir)' == ''">$(MSBuildThisFileDirectory)..\android\native\LDObserve\bin\Release\net9.0-android\outputs\aar\</_LDNativeAarDir>
18+
</PropertyGroup>
19+
20+
<ItemGroup>
21+
<!-- OTel Android AARs -->
22+
<_LDNativeAAR Include="$(_LDNativeDepsDir)android-agent-*.aar" />
23+
<_LDNativeAAR Include="$(_LDNativeDepsDir)android-instrumentation-*.aar" />
24+
<_LDNativeAAR Include="$(_LDNativeDepsDir)common-0*.aar" />
25+
<_LDNativeAAR Include="$(_LDNativeDepsDir)common-api-*.aar" />
26+
<_LDNativeAAR Include="$(_LDNativeDepsDir)core-*-alpha.aar" />
27+
<_LDNativeAAR Include="$(_LDNativeDepsDir)crash-*-alpha.aar" />
28+
<_LDNativeAAR Include="$(_LDNativeDepsDir)anr-*-alpha.aar" />
29+
<_LDNativeAAR Include="$(_LDNativeDepsDir)activity-*-alpha.aar" />
30+
<_LDNativeAAR Include="$(_LDNativeDepsDir)fragment-*-alpha.aar" />
31+
<_LDNativeAAR Include="$(_LDNativeDepsDir)network-*-alpha.aar" />
32+
<_LDNativeAAR Include="$(_LDNativeDepsDir)services-*-alpha.aar" />
33+
<_LDNativeAAR Include="$(_LDNativeDepsDir)session-*-alpha.aar" />
34+
<_LDNativeAAR Include="$(_LDNativeDepsDir)slowrendering-*-alpha.aar" />
35+
<_LDNativeAAR Include="$(_LDNativeDepsDir)startup-*-alpha.aar" />
36+
37+
<!-- LD native SDK AAR -->
38+
<_LDNativeAAR Include="$(_LDNativeDepsDir)launchdarkly-android-client-sdk-*.aar" />
39+
40+
<!-- Observability Android library AAR -->
41+
<_LDNativeAAR Include="$(_LDNativeDepsDir)lib-release.aar" />
42+
43+
<!-- Third-party AARs -->
44+
<_LDNativeAAR Include="$(_LDNativeDepsDir)timber-*.aar" />
45+
46+
<!-- Bridge module AAR -->
47+
<_LDNativeAAR Include="$(_LDNativeAarDir)LDObserve-release.aar" />
48+
49+
<!-- JARs: exclude all opentelemetry-sdk-extension-autoconfigure-*.jar, then add *-spi-* back (main autoconfigure
50+
must not ship; SPI must). autoconfigure-1* only matched OTel 1.x filenames and failed silently on 2.x. -->
51+
<_LDNativeJAR Include="$(_LDNativeDepsDir)opentelemetry-*.jar"
52+
Exclude="$(_LDNativeDepsDir)opentelemetry-sdk-extension-incubator-*.jar;$(_LDNativeDepsDir)opentelemetry-sdk-extension-autoconfigure-*.jar;$(_LDNativeDepsDir)opentelemetry-sdk-testing-*.jar" />
53+
<_LDNativeJAR Include="$(_LDNativeDepsDir)opentelemetry-sdk-extension-autoconfigure-spi-*.jar" />
54+
<_LDNativeJAR Include="$(_LDNativeDepsDir)jackson-*.jar" />
55+
<_LDNativeJAR Include="$(_LDNativeDepsDir)launchdarkly-*.jar" />
56+
<_LDNativeJAR Include="$(_LDNativeDepsDir)okhttp-*.jar" />
57+
<_LDNativeJAR Include="$(_LDNativeDepsDir)okio-*.jar" />
58+
</ItemGroup>
59+
</Project>

0 commit comments

Comments
 (0)