diff --git a/.gitignore b/.gitignore index 55b902b..3ff85af 100644 --- a/.gitignore +++ b/.gitignore @@ -12,4 +12,6 @@ /maven-bundle-plugin-3.4.0-source-release.tar.gz /maven-bundle-plugin-3.5.0-source-release.tar.gz /maven-bundle-plugin-3.5.1-source-release.tar.gz +/maven-bundle-plugin-4.2.0-source-release.tar.gz /maven-bundle-plugin-4.2.1-source-release.tar.gz +/maven-bundle-plugin-5.1.1-source-release.tar.gz diff --git a/0001-Port-to-current-maven-dependency-tree.patch b/0001-Port-to-current-maven-dependency-tree.patch deleted file mode 100644 index 34d86ea..0000000 --- a/0001-Port-to-current-maven-dependency-tree.patch +++ /dev/null @@ -1,248 +0,0 @@ -From bdd09969d3719b18875ab0f2078baec48c5154b2 Mon Sep 17 00:00:00 2001 -From: Michael Simacek -Date: Sun, 7 Jun 2020 20:41:17 +0200 -Subject: [PATCH 1/4] Port to current maven-dependency-tree - ---- - pom.xml | 2 +- - .../felix/bundleplugin/BundleAllPlugin.java | 54 ++++++++++--------- - .../felix/bundleplugin/BundlePlugin.java | 30 +++++++---- - 3 files changed, 49 insertions(+), 37 deletions(-) - -diff --git a/pom.xml b/pom.xml -index 8f017c6..284f909 100644 ---- a/pom.xml -+++ b/pom.xml -@@ -212,7 +212,7 @@ - - org.apache.maven.shared - maven-dependency-tree -- 2.1 -+ 3.0 - - - org.codehaus.plexus -diff --git a/src/main/java/org/apache/felix/bundleplugin/BundleAllPlugin.java b/src/main/java/org/apache/felix/bundleplugin/BundleAllPlugin.java -index 8c7b254..8f38eee 100644 ---- a/src/main/java/org/apache/felix/bundleplugin/BundleAllPlugin.java -+++ b/src/main/java/org/apache/felix/bundleplugin/BundleAllPlugin.java -@@ -21,8 +21,10 @@ package org.apache.felix.bundleplugin; - - import java.io.File; - import java.io.FilenameFilter; -+import java.util.ArrayDeque; - import java.util.Arrays; - import java.util.Collection; -+import java.util.Deque; - import java.util.HashSet; - import java.util.Iterator; - import java.util.LinkedHashMap; -@@ -37,7 +39,6 @@ import org.apache.maven.artifact.Artifact; - import org.apache.maven.artifact.factory.ArtifactFactory; - import org.apache.maven.artifact.metadata.ArtifactMetadataSource; - import org.apache.maven.artifact.repository.ArtifactRepository; --import org.apache.maven.artifact.resolver.ArtifactCollector; - import org.apache.maven.artifact.resolver.ArtifactNotFoundException; - import org.apache.maven.artifact.resolver.ArtifactResolutionException; - import org.apache.maven.artifact.resolver.ArtifactResolver; -@@ -48,13 +49,14 @@ import org.apache.maven.plugins.annotations.LifecyclePhase; - import org.apache.maven.plugins.annotations.Mojo; - import org.apache.maven.plugins.annotations.Parameter; - import org.apache.maven.plugins.annotations.ResolutionScope; -+import org.apache.maven.project.DefaultProjectBuildingRequest; - import org.apache.maven.project.MavenProject; - import org.apache.maven.project.MavenProjectBuilder; - import org.apache.maven.project.ProjectBuildingException; -+import org.apache.maven.project.ProjectBuildingRequest; - import org.apache.maven.project.artifact.InvalidDependencyVersionException; --import org.apache.maven.shared.dependency.tree.DependencyNode; --import org.apache.maven.shared.dependency.tree.DependencyTreeBuilder; --import org.apache.maven.shared.dependency.tree.DependencyTreeBuilderException; -+import org.apache.maven.shared.dependency.graph.DependencyGraphBuilderException; -+import org.apache.maven.shared.dependency.graph.DependencyNode; - import org.codehaus.plexus.util.FileUtils; - - import aQute.bnd.osgi.Analyzer; -@@ -91,24 +93,18 @@ public class BundleAllPlugin extends ManifestPlugin - */ - @Parameter( property = "wrapImportPackage", defaultValue = "*" ) - private String wrapImportPackage; -- - @Component - private ArtifactFactory m_factory; - - @Component - private ArtifactMetadataSource m_artifactMetadataSource; - -- @Component -- private ArtifactCollector m_collector; -- - /** - * Artifact resolver, needed to download jars. - */ - @Component - private ArtifactResolver m_artifactResolver; - -- @Component -- private DependencyTreeBuilder m_dependencyTreeBuilder; - - @Component - private MavenProjectBuilder m_mavenProjectBuilder; -@@ -179,17 +175,19 @@ public class BundleAllPlugin extends ManifestPlugin - - try - { -- dependencyTree = m_dependencyTreeBuilder.buildDependencyTree( project, localRepository, m_factory, -- m_artifactMetadataSource, null, m_collector ); -+ ProjectBuildingRequest request = new DefaultProjectBuildingRequest(); -+ request.setProject(getProject()); -+ request.setRepositorySession(session.getRepositorySession()); -+ dependencyTree = m_dependencyGraphBuilder.buildDependencyGraph(request, null); - } -- catch ( DependencyTreeBuilderException e ) -+ catch ( DependencyGraphBuilderException e ) - { - throw new MojoExecutionException( "Unable to build dependency tree", e ); - } - - BundleInfo bundleInfo = new BundleInfo(); - -- if ( !dependencyTree.hasChildren() ) -+ if ( dependencyTree.getChildren().isEmpty()) - { - /* no need to traverse the tree */ - return bundleRoot( project, bundleInfo ); -@@ -197,20 +195,27 @@ public class BundleAllPlugin extends ManifestPlugin - - getLog().debug( "Will bundle the following dependency tree" + LS + dependencyTree ); - -- for ( Iterator it = dependencyTree.inverseIterator(); it.hasNext(); ) -+ Deque stack = new ArrayDeque(); -+ stack.push(dependencyTree); -+ Set visited = new HashSet(); -+ while (!stack.isEmpty()) - { -- DependencyNode node = ( DependencyNode ) it.next(); -- if ( !it.hasNext() ) -+ DependencyNode node = stack.pop(); -+ if (visited.contains(node)) - { -- /* this is the root, current project */ -- break; -+ continue; - } -- -- if ( node.getState() != DependencyNode.INCLUDED ) -+ visited.add(node); -+ if (node.getChildren() != null) - { -- continue; -+ stack.addAll(node.getChildren()); - } - -+ //if ( node.getState() != DependencyNode.INCLUDED ) -+ //{ -+ // continue; -+ //} -+ - if ( Artifact.SCOPE_SYSTEM.equals( node.getArtifact().getScope() ) ) - { - getLog().debug( "Ignoring system scoped artifact " + node.getArtifact() ); -@@ -234,12 +239,11 @@ public class BundleAllPlugin extends ManifestPlugin - - node.getArtifact().setFile( artifact.getFile() ); - -- int nodeDepth = node.getDepth(); -- if ( nodeDepth > maxDepth ) -+ if ( stack.size() > maxDepth ) - { - /* node is deeper than we want */ - getLog().debug( -- "Ignoring " + node.getArtifact() + ", depth is " + nodeDepth + ", bigger than " + maxDepth ); -+ "Ignoring " + node.getArtifact() + ", depth is " + stack.size() + ", bigger than " + maxDepth ); - continue; - } - -diff --git a/src/main/java/org/apache/felix/bundleplugin/BundlePlugin.java b/src/main/java/org/apache/felix/bundleplugin/BundlePlugin.java -index c07637a..7844ead 100644 ---- a/src/main/java/org/apache/felix/bundleplugin/BundlePlugin.java -+++ b/src/main/java/org/apache/felix/bundleplugin/BundlePlugin.java -@@ -73,12 +73,15 @@ import org.apache.maven.plugins.annotations.LifecyclePhase; - import org.apache.maven.plugins.annotations.Mojo; - import org.apache.maven.plugins.annotations.Parameter; - import org.apache.maven.plugins.annotations.ResolutionScope; -+import org.apache.maven.project.DefaultProjectBuildingRequest; - import org.apache.maven.project.MavenProject; - import org.apache.maven.project.MavenProjectBuilder; - import org.apache.maven.project.MavenProjectHelper; - import org.apache.maven.project.ProjectBuildingException; --import org.apache.maven.shared.dependency.tree.DependencyTreeBuilder; --import org.apache.maven.shared.dependency.tree.DependencyTreeBuilderException; -+import org.apache.maven.project.ProjectBuildingRequest; -+import org.apache.maven.shared.dependency.graph.DependencyGraphBuilder; -+import org.apache.maven.shared.dependency.graph.DependencyGraphBuilderException; -+import org.apache.maven.shared.dependency.graph.DependencyNode; - import org.apache.maven.shared.osgi.DefaultMaven2OsgiConverter; - import org.apache.maven.shared.osgi.Maven2OsgiConverter; - import org.codehaus.plexus.archiver.UnArchiver; -@@ -209,6 +212,9 @@ public class BundlePlugin extends AbstractMojo - @Component - private ArtifactHandlerManager m_artifactHandlerManager; - -+ @Component -+ protected DependencyGraphBuilder m_dependencyGraphBuilder; -+ - /* The current Maven session. */ - @Parameter( defaultValue = "${session}", readonly = true ) - protected MavenSession session; -@@ -221,7 +227,7 @@ public class BundlePlugin extends AbstractMojo - protected MavenProjectBuilder mavenProjectBuilder; - - @Component -- private DependencyTreeBuilder dependencyTreeBuilder; -+ private DependencyGraphBuilder dependencyGraphBuilder; - - @Component - private ArtifactMetadataSource artifactMetadataSource; -@@ -737,7 +743,7 @@ public class BundlePlugin extends AbstractMojo - // We need to find the direct dependencies that have been included in the uber JAR so that we can modify the - // POM accordingly. - private void createDependencyReducedPom( Set artifactsToRemove ) -- throws IOException, ProjectBuildingException, DependencyTreeBuilderException { -+ throws IOException, ProjectBuildingException, DependencyGraphBuilderException { - Model model = project.getOriginalModel(); - List dependencies = new ArrayList(); - -@@ -875,20 +881,22 @@ public class BundlePlugin extends AbstractMojo - } - - public boolean updateExcludesInDeps( MavenProject project, List dependencies, List transitiveDeps ) -- throws DependencyTreeBuilderException -+ throws DependencyGraphBuilderException - { -- org.apache.maven.shared.dependency.tree.DependencyNode node = dependencyTreeBuilder.buildDependencyTree(project, localRepository, artifactFactory, -- artifactMetadataSource, null, -- artifactCollector); -+ ProjectBuildingRequest request = new DefaultProjectBuildingRequest(); -+ request.setProject(project); -+ request.setRepositorySession(session.getRepositorySession()); -+ DependencyNode node = dependencyGraphBuilder.buildDependencyGraph(request, null); - boolean modified = false; -- for (org.apache.maven.shared.dependency.tree.DependencyNode n2 : node.getChildren()) -+ for (org.apache.maven.shared.dependency.graph.DependencyNode n2 : node.getChildren()) - { -- for (org.apache.maven.shared.dependency.tree.DependencyNode n3 : n2.getChildren()) -+ for (org.apache.maven.shared.dependency.graph.DependencyNode n3 : n2.getChildren()) - { - //anything two levels deep that is marked "included" - //is stuff that was excluded by the original poms, make sure it - //remains excluded IF promoting transitives. -- if (n3.getState() == org.apache.maven.shared.dependency.tree.DependencyNode.INCLUDED) -+ //if (n3.getState() == org.apache.maven.shared.dependency.tree.DependencyNode.INCLUDED) -+ if (true) - { - //check if it really isn't in the list of original dependencies. Maven - //prior to 2.0.8 may grab versions from transients instead of --- -2.26.2 - diff --git a/0002-Fix-for-new-maven-archiver.patch b/0002-Fix-for-new-maven-archiver.patch deleted file mode 100644 index 6d66af2..0000000 --- a/0002-Fix-for-new-maven-archiver.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 187b8754f9276ec9702b16f9211b63bb107dbd68 Mon Sep 17 00:00:00 2001 -From: Mat Booth -Date: Sun, 7 Jun 2020 20:41:45 +0200 -Subject: [PATCH 2/4] Fix for new maven archiver - ---- - src/main/java/org/apache/felix/bundleplugin/BundlePlugin.java | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/main/java/org/apache/felix/bundleplugin/BundlePlugin.java b/src/main/java/org/apache/felix/bundleplugin/BundlePlugin.java -index 7844ead..b8cf9e2 100644 ---- a/src/main/java/org/apache/felix/bundleplugin/BundlePlugin.java -+++ b/src/main/java/org/apache/felix/bundleplugin/BundlePlugin.java -@@ -1075,7 +1075,7 @@ public class BundlePlugin extends AbstractMojo - * Grab customized manifest entries from the maven-jar-plugin configuration - */ - MavenArchiveConfiguration archiveConfig = JarPluginConfiguration.getArchiveConfiguration( currentProject ); -- String mavenManifestText = new MavenArchiver().getManifest( currentProject, archiveConfig ).toString(); -+ String mavenManifestText = new MavenArchiver().getManifest( m_mavenSession, currentProject, archiveConfig ).toString(); - addMavenDescriptor = addMavenDescriptor && archiveConfig.isAddMavenDescriptor(); - - Manifest mavenManifest = new Manifest(); --- -2.26.2 - diff --git a/0003-Port-to-plexus-utils-3.0.24.patch b/0003-Port-to-plexus-utils-3.0.24.patch deleted file mode 100644 index 4149865..0000000 --- a/0003-Port-to-plexus-utils-3.0.24.patch +++ /dev/null @@ -1,46 +0,0 @@ -From 1103a4e6745131039d701f3dd760352066c159f9 Mon Sep 17 00:00:00 2001 -From: Mikolaj Izdebski -Date: Sun, 7 Jun 2020 20:42:06 +0200 -Subject: [PATCH 3/4] Port to plexus-utils 3.0.24 - ---- - pom.xml | 2 +- - .../java/org/apache/felix/bundleplugin/BundlePlugin.java | 9 ++++++++- - 2 files changed, 9 insertions(+), 2 deletions(-) - -diff --git a/pom.xml b/pom.xml -index 284f909..fd2cad3 100644 ---- a/pom.xml -+++ b/pom.xml -@@ -217,7 +217,7 @@ - - org.codehaus.plexus - plexus-utils -- 3.0.10 -+ 3.0.24 - - - org.sonatype.plexus -diff --git a/src/main/java/org/apache/felix/bundleplugin/BundlePlugin.java b/src/main/java/org/apache/felix/bundleplugin/BundlePlugin.java -index b8cf9e2..5530ca7 100644 ---- a/src/main/java/org/apache/felix/bundleplugin/BundlePlugin.java -+++ b/src/main/java/org/apache/felix/bundleplugin/BundlePlugin.java -@@ -1781,7 +1781,14 @@ public class BundlePlugin extends AbstractMojo - File filterFile = new File( i.next() ); - if ( filterFile.isFile() ) - { -- properties.putAll( PropertyUtils.loadProperties( filterFile ) ); -+ try -+ { -+ properties.putAll( PropertyUtils.loadProperties( filterFile ) ); -+ } -+ catch ( IOException exc ) -+ { -+ // Ignore -+ } - } - } - --- -2.26.2 - diff --git a/0004-Use-Maven-3-APIs.patch b/0004-Use-Maven-3-APIs.patch deleted file mode 100644 index 7915c34..0000000 --- a/0004-Use-Maven-3-APIs.patch +++ /dev/null @@ -1,58 +0,0 @@ -From 8c6e31d293e86bc2713bd29c57741d8abc9cb621 Mon Sep 17 00:00:00 2001 -From: Mikolaj Izdebski -Date: Sun, 7 Jun 2020 20:42:29 +0200 -Subject: [PATCH 4/4] Use Maven 3 APIs - ---- - pom.xml | 5 ----- - .../java/org/apache/felix/bundleplugin/BundlePlugin.java | 4 ++-- - 2 files changed, 2 insertions(+), 7 deletions(-) - -diff --git a/pom.xml b/pom.xml -index fd2cad3..7ed4773 100644 ---- a/pom.xml -+++ b/pom.xml -@@ -252,11 +252,6 @@ - 1.1.0 - test - -- -- org.jdom -- jdom -- 1.1 -- - - junit - junit -diff --git a/src/main/java/org/apache/felix/bundleplugin/BundlePlugin.java b/src/main/java/org/apache/felix/bundleplugin/BundlePlugin.java -index 5530ca7..21adb1a 100644 ---- a/src/main/java/org/apache/felix/bundleplugin/BundlePlugin.java -+++ b/src/main/java/org/apache/felix/bundleplugin/BundlePlugin.java -@@ -47,7 +47,6 @@ import java.util.TreeMap; - import java.util.jar.Attributes; - import java.util.jar.Manifest; - --import org.apache.felix.bundleplugin.pom.PomWriter; - import org.apache.maven.archiver.ManifestSection; - import org.apache.maven.archiver.MavenArchiveConfiguration; - import org.apache.maven.archiver.MavenArchiver; -@@ -64,6 +63,7 @@ import org.apache.maven.model.Exclusion; - import org.apache.maven.model.License; - import org.apache.maven.model.Model; - import org.apache.maven.model.Resource; -+import org.apache.maven.model.io.xpp3.MavenXpp3Writer; - import org.apache.maven.plugin.AbstractMojo; - import org.apache.maven.plugin.MojoExecutionException; - import org.apache.maven.plugin.MojoFailureException; -@@ -844,7 +844,7 @@ public class BundlePlugin extends AbstractMojo - - try - { -- PomWriter.write( w, model, true ); -+ new MavenXpp3Writer().write( w, model ); - } - finally - { --- -2.26.2 - diff --git a/maven-plugin-bundle.spec b/maven-plugin-bundle.spec index 4c4b877..8e8c8dd 100644 --- a/maven-plugin-bundle.spec +++ b/maven-plugin-bundle.spec @@ -1,29 +1,19 @@ -%bcond_with obr -%bcond_without reporting - -%global srcname maven-bundle-plugin +%bcond_with bootstrap Name: maven-plugin-bundle -Version: 4.2.1 -Release: 4%{?dist} +Version: 5.1.1 +Release: 1%{?dist} Summary: Maven Bundle Plugin License: ASL 2.0 - URL: https://felix.apache.org -Source0: https://repo1.maven.org/maven2/org/apache/felix/%{srcname}/%{version}/%{srcname}-%{version}-source-release.tar.gz - -# Needs polishing to be sent upstream -Patch0: 0001-Port-to-current-maven-dependency-tree.patch -# New maven-archiver removed some deprecated methods we were using -Patch1: 0002-Fix-for-new-maven-archiver.patch -# Port to newer Plexus utils -Patch2: 0003-Port-to-plexus-utils-3.0.24.patch -# Port to newer Maven -Patch3: 0004-Use-Maven-3-APIs.patch - BuildArch: noarch +Source0: https://repo1.maven.org/maven2/org/apache/felix/maven-bundle-plugin/%{version}/maven-bundle-plugin-%{version}-source-release.tar.gz + BuildRequires: maven-local +%if %{with bootstrap} +BuildRequires: javapackages-bootstrap +%else BuildRequires: mvn(biz.aQute.bnd:biz.aQute.bndlib) BuildRequires: mvn(org.apache.felix:felix-parent:pom:) BuildRequires: mvn(org.apache.felix:org.apache.felix.utils) @@ -34,18 +24,7 @@ BuildRequires: mvn(org.apache.maven.plugins:maven-plugin-plugin) BuildRequires: mvn(org.apache.maven.plugin-tools:maven-plugin-annotations) BuildRequires: mvn(org.apache.maven.shared:maven-dependency-tree) BuildRequires: mvn(org.codehaus.plexus:plexus-utils) -BuildRequires: mvn(org.osgi:osgi.core) -BuildRequires: mvn(org.slf4j:slf4j-api) BuildRequires: mvn(org.sonatype.plexus:plexus-build-api) -%if %{with obr} -BuildRequires: mvn(net.sf.kxml:kxml2) -BuildRequires: mvn(org.apache.felix:org.apache.felix.bundlerepository) -BuildRequires: mvn(xpp3:xpp3) -%endif -%if %{with reporting} -BuildRequires: mvn(org.apache.maven.doxia:doxia-sink-api) -BuildRequires: mvn(org.apache.maven.doxia:doxia-site-renderer) -BuildRequires: mvn(org.apache.maven.reporting:maven-reporting-api) %endif %description @@ -60,40 +39,25 @@ Summary: Javadoc for %{name} API documentation for %{name}. %prep -%setup -q -n %{srcname}-%{version} - -%patch0 -p1 -%patch1 -p1 -%patch2 -p1 -%patch3 -p1 +%setup -q -n maven-bundle-plugin-%{version} find -name '*.jar' -delete -%pom_change_dep :org.osgi.core :osgi.core - -# Bundled class from old maven-dependency-tree -rm -r src/main/java/org/apache/maven/shared/dependency - -# Bundled classes from old maven -rm -r src/main/java/org/apache/felix/bundleplugin/pom - # There is forked version of maven-osgi in # src/{main,test}/java/org/apache/maven -%if %{with obr} -# Deps unbundled from felix-bundlerepository -%pom_add_dep xpp3:xpp3 -%pom_add_dep net.sf.kxml:kxml2 -%else -rm -r src/main/java/org/apache/felix/obrplugin/ +rm -rf src/main/java/org/apache/felix/obrplugin/ %pom_remove_dep :org.apache.felix.bundlerepository -%endif -%if %{without reporting} -rm src/main/java/org/apache/felix/bundleplugin/baseline/BaselineReport.java +rm -f src/main/java/org/apache/felix/bundleplugin/baseline/BaselineReport.java %pom_remove_dep :doxia-sink-api %pom_remove_dep :doxia-site-renderer -%endif +%pom_remove_dep :maven-reporting-api + +%pom_remove_dep :org.osgi.core +%pom_remove_dep :jdom + +%pom_remove_plugin :maven-invoker-plugin %build # Tests depend on bundled JARs @@ -112,6 +76,9 @@ rm src/main/java/org/apache/felix/bundleplugin/baseline/BaselineReport.java * Tue Jan 26 2021 Fedora Release Engineering - 4.2.1-4 - Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild +* Wed Aug 26 2020 Marian Koncek - 5.1.1-1 +- Update to upstream version 5.1.1 + * Tue Jul 28 2020 Fedora Release Engineering - 4.2.1-3 - Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild @@ -124,9 +91,21 @@ rm src/main/java/org/apache/felix/bundleplugin/baseline/BaselineReport.java * Wed Jan 29 2020 Fedora Release Engineering - 3.5.1-4 - Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild +* Tue Nov 05 2019 Mikolaj Izdebski - 4.2.1-2 +- Mass rebuild for javapackages-tools 201902 + +* Mon Aug 19 2019 Marian Koncek - 4.2.1-1 +- Update to upstream version 4.2.1 + * Thu Jul 25 2019 Fedora Release Engineering - 3.5.1-3 - Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild +* Tue Jun 04 2019 Marian Koncek - 4.2.0-1 +- Update to upstream version 4.2.0 + +* Fri May 24 2019 Mikolaj Izdebski - 3.5.0-3 +- Mass rebuild for javapackages-tools 201901 + * Fri Feb 01 2019 Fedora Release Engineering - 3.5.1-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild diff --git a/sources b/sources index eda8dad..fa11b66 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (maven-bundle-plugin-4.2.1-source-release.tar.gz) = c1d9ec95c6b96d47e4e63be6652356f0f3b7a48f351bcc72f4b844d1e95ec7b52c1583d7d425c1e8466e87619a1f50592d6a763e8dea146c64608f94192994b4 +SHA512 (maven-bundle-plugin-5.1.1-source-release.tar.gz) = 69fb74db85db435a9bb6c035ed1fe736e4e7bb2c7ad0f219000113052b83247cad3c165eaed45e12da2cdd4e522320ee5fcf55b86147f142f96e60a060598a59