#!/usr/bin/perl -w
use strict;

my @pints = <data/pint/*>;

use DateTime;

my $pintwebpath = "smash/pintdata/publiccloudimagechangeinfo.suse.com/";

#system("rm -f $pintwebpath/*/*.1");
#system("rmdir $pintwebpath/*/*");

sub
map_provider($) {
	my ($provider) = @_;

	return "OCI" if ($provider eq "oracle");
	return "Azure" if ($provider eq "microsoft");
	return "GCE" if ($provider eq "google");
	return "EC2-HVM" if ($provider eq "amazon");
	return "Ali" if ($provider eq "alibaba");
}
#data/pint/amazon suse-sles-15-chost-byos-vDATE-hvm-ssd-x86_64
#data/pint/amazon suse-sles-15-sp1-chost-byos-vDATE-hvm-ssd-x86_64
#data/pint/amazon suse-sles-15-sp2-chost-byos-vDATE-hvm-ssd-x86_64
#data/pint/google sles-15-sp1-chost-byos-vDATE
#data/pint/google sles-15-sp2-chost-byos-vDATE
#data/pint/microsoft suse-sles-15-sp1-chost-byos-vDATE-gen2
#data/pint/microsoft suse-sles-15-sp2-chost-byos-vDATE-gen2

my @allchangelogs = ();

sub
map_name($$) {
	my ($provider,$xname) = @_;

	my $name;
	my $version;

	if ($provider =~ "amazon") {
		if (	($xname =~ /suse-liberty-linux-7-9-byos-v([0-9]*)-x86_64/i) ||
			($xname =~ /suse-liberty-7-9-byos-v([0-9]*)-x86_64/i)) {
			return ();
		}
		if ($xname =~ /suse-liberty-linux-8-9-byos-v([0-9]*)-x86_64/i) {
			return ();
		}
		if ($xname =~ /suse-rancher-setup-byos-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLES15-SP4-SUSE-Rancher-Setup-BYOS:EC2",$1);
		}
		if ($xname =~ /suse-sle-micro-5-1-byos-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLES15-SP3-Micro-5-1-BYOS:EC2-HVM",$1);
		}
		if ($xname =~ /suse-sle-micro-5-2-byos-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLES15-SP3-Micro-5-2-BYOS:EC2-HVM",$1);
		}
		if ($xname =~ /suse-sle-micro-5-3-byos-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLES15-SP4-Micro-5-3-BYOS:EC2",$1);
		}
		if ($xname =~ /suse-sle-micro-5-3-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLES15-SP4-Micro-5-3:EC2",$1);
		}
		if ($xname =~ /suse-sle-micro-5-4-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLES15-SP4-Micro-5-4:EC2",$1);
		}
		if ($xname =~ /suse-sle-micro-5-5-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLES15-SP5-Micro-5-5:EC2",$1);
		}
		if ($xname =~ /suse-sle-micro-6-0-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLE-Micro:EC2",$1);
		}
		if ($xname =~ /suse-sle-micro-6-0-byos-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLE-Micro-BYOS:EC2",$1);
		}
		if ($xname =~ /suse-sle-micro-6-0-byos-v([0-9]*)-hvm-ssd-arm64/i) {
			return ();
		}
		if ($xname =~ /suse-sle-micro-6-0-v([0-9]*)-hvm-ssd-arm64/i) {
			return ();
		}
		if ($xname =~ /suse-sle-micro-5-3-v([0-9]*)-hvm-ssd-arm64/i) {
			return ();
		}
		if ($xname =~ /suse-sle-micro-5-4-v([0-9]*)-hvm-ssd-arm64/i) {
			return ();
		}
		if ($xname =~ /suse-sle-micro-5-5-v([0-9]*)-hvm-ssd-arm64/i) {
			return ();
		}
		if ($xname =~ /suse-sle-micro-5-4-byos-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLES15-SP4-Micro-5-4-BYOS:EC2",$1);
		}
		if ($xname =~ /suse-sle-micro-5-5-byos-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLES15-SP5-Micro-5-5-BYOS:EC2",$1);
		}
		if ($xname =~ /suse-sle-micro-5-1-byos-v([0-9]*)-hvm-ssd-arm/i) {	# FIXME: Arm skipped for now.
			return ();
		}
		if ($xname =~ /suse-sle-micro-5-2-byos-v([0-9]*)-hvm-ssd-arm/i) {	# FIXME: Arm skipped for now.
			return ();
		}
		if ($xname =~ /suse-sle-micro-5-3-byos-v([0-9]*)-hvm-ssd-arm/i) {	# FIXME: Arm skipped for now.
			return ();
		}
		if ($xname =~ /suse-sle-micro-5-4-byos-v([0-9]*)-hvm-ssd-arm/i) {	# FIXME: Arm skipped for now.
			return ();
		}
		if ($xname =~ /suse-sle-micro-5-5-byos-v([0-9]*)-hvm-ssd-arm/i) {	# FIXME: Arm skipped for now.
			return ();
		}
		if ($xname =~ /suse-sles-15-chost-byos-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLES15-EC2-CHOST-HVM-BYOS",$1);
		}
		if ($xname =~ /suse-sles-15-sp1-chost-byos-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLES15-SP1-CHOST-BYOS:EC2",$1);
		}
		if ($xname =~ /suse-sles-15-sp2-chost-byos-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLES15-SP2-CHOST-BYOS:EC2",$1);
		}
		if ($xname =~ /suse-sles-15-sp(\d)-chost-byos-v([0-9]*)-hvm-ssd-arm64/i) {
			return ();
		}
		if ($xname =~ /suse-sles-15-sp(\d)-chost-byos-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLES15-SP$1-CHOST-BYOS:EC2",$2);
		}
		if ($xname =~ /suse-sles-15-sp(\d)-hardened-byos-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLES15-SP$1-Hardened-BYOS:EC2",$2);
		}
		if ($xname =~ /suse-sles-sap-15-sp(\d)-hardened-byos-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLES15-SP$1-SAP-Hardened-BYOS:EC2",$2);
		}
		if ($xname =~ /suse-manager-3-2-proxy-byos-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLES12-SP4-Manager-3-2-Proxy-EC2-HVM-BYOS",$1);
		}
		if ($xname =~ /suse-manager-3-2-server-byos-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLES12-SP4-Manager-3-2-Server-EC2-HVM-BYOS",$1);
		}
		if ($xname =~ /suse-manager-4-0-proxy-byos-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLES15-SP1-Manager-4-0-EC2-HVM-BYOS:Proxy",$1);
		}
		if ($xname =~ /suse-manager-4-0-server-byos-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLES15-SP1-Manager-4-0-EC2-HVM-BYOS:Server",$1);
		}
		if ($xname =~ /suse-manager-4-1-proxy-byos-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLES15-SP2-Manager-4-1-Proxy-BYOS:EC2-HVM",$1);
		}
		if ($xname =~ /suse-manager-4-1-server-byos-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLES15-SP2-Manager-4-1-Server-BYOS:EC2-HVM",$1);
		}
		if (	($xname =~ /suse-manager-4-2-server-byos-v([0-9]*)-hvm-ssd-x86_64/i) ||
			($xname =~ /suse-manager-server-4-2-byos-v([0-9]*)-hvm-ssd-x86_64/i)
		) {
			return ("SLES15-SP3-Manager-4-2-Server-BYOS:EC2-HVM",$1);
		}
		if (	($xname =~ /suse-manager-4-2-proxy-byos-v([0-9]*)-hvm-ssd-x86_64/i) ||
			($xname =~ /suse-manager-proxy-4-2-byos-v([0-9]*)-hvm-ssd-x86_64/i)
		) {
			return ("SLES15-SP3-Manager-4-2-Proxy-BYOS:EC2-HVM",$1);
		}

		if ($xname =~ /suse-manager-server-4-3-byos-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLES15-SP4-Manager-Server-4-3-BYOS:EC2",$1);
		}
		if ($xname =~ /suse-manager-proxy-4-3-byos-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLES15-SP4-Manager-Proxy-4-3-BYOS:EC2",$1);
		}

		if ($xname =~ /suse-manager-server-5-0-byos-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLES15-SP5-Manager-Server-5-0-BYOS:EC2",$1);
		}
		if ($xname =~ /suse-manager-proxy-5-0-byos-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLES15-SP5-Manager-Proxy-5-0-BYOS:EC2",$1);
		}
		if ($xname =~ /suse-manager-(proxy|server)-5-0-byos-v([0-9]*)-hvm-ssd-arm64/i) {
			return ();
		}
		if ($xname =~ /suse-manager-server-4-3-v([0-9]*)-hvm-ssd-x86_64-llc/i) {
			return ("SLES15-SP4-Manager-Server-4-3:EC2-llc",$1);
		}
		if ($xname =~ /suse-manager-server-4-3-v([0-9]*)-hvm-ssd-x86_64-ltd/i) {
			return ("SLES15-SP4-Manager-Server-4-3:EC2-ltd",$1);
		}

		if ($xname =~ /suse-sles-11-sp4-byos-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLES11-SP4-EC2-HVM-BYOS",$1);
		}
		if ($xname =~ /suse-sles-11-sp4-sapcal-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLES11-SP4-EC2-SAPCAL-HVM",$1);
		}
		if ($xname =~ /suse-sles-15-sp([123])-sapcal-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLES15-SP$1-SAPCAL:EC2-HVM",$2);
		}
		if ($xname =~ /suse-sles-15-sp(\d)-sapcal-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLES15-SP$1-SAPCAL:EC2",$2);
		}

		if ($xname =~ /suse-sles-12-v([0-9]*)-pv-ssd-x86_64/i) {
			#return ("SLES12-EC2",$1);
			return ();
		}
		if ($xname =~ /suse-sles-12-v([0-9]*)-hvm-ssd-x86_64/i) {
			#return ("SLES12-EC2-HVM",$1);
			return ();
		}
		if ($xname =~ /suse-sles-12-v([0-9]*)-ecs-hvm-ssd-x86_64/i) {
			#return ("SLES12-EC2-ECS-HVM",$1);
			return ();
		}
		if ($xname =~ /suse-sles-12-byos-v([0-9]*)-hvm-ssd-x86_64/i) {
			#return ("SLES12-EC2-HVM-BYOS",$1);
			return ();
		}
		if ($xname =~ /suse-sles-sap-12-v([0-9]*)-hvm-ssd-x86_64/i) {
			#return ("SLES12-SAP-EC2-HVM-BYOS",$1);
			return ();
		}
		if ($xname =~ /suse-sles-12-byos-v([0-9]*)-pv-ssd-x86_64/i) {
			#return ("SLES12-EC2-BYOS",$1);
			return ();
		}

		if ($xname =~ /suse-sles-12-sp1-sapcal-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLES12-SP1-EC2-SAPCAL-HVM",$1);
		}
		if ($xname =~ /suse-sles-12-sp1-v([0-9]*)-pv-ssd-x86_64/i) {
			return ("SLES12-SP1-EC2",$1);
		}
		if ($xname =~ /suse-sles-12-sp1-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLES12-SP1-EC2-HVM",$1);
		}
		if ($xname =~ /suse-sles-12-sp1-v([0-9]*)-ecs-hvm-ssd-x86_64/i) {
			return ("SLES12-SP1-EC2-ECS-HVM",$1);
		}
		if ($xname =~ /suse-sles-12-sp1-byos-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLES12-SP1-EC2-HVM-BYOS",$1);
		}
		if ($xname =~ /suse-sles-sap-12-sp1-byos-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLES12-SP1-SAP-EC2-HVM-BYOS",$1);
		}
		if ($xname =~ /suse-sles-sap-12-sp1-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLES12-SP1-SAP-EC2-HVM",$1);
		}
		if ($xname =~ /suse-sles-12-sp1-byos-v([0-9]*)-pv-ssd-x86_64/i) {
			return ("SLES12-SP1-EC2-BYOS",$1);
		}

		if ($xname =~ /suse-sles-12-sp2-v([0-9]*)-pv-ssd-x86_64/i) {
			return ("SLES12-SP2-EC2",$1);
		}
		if ($xname =~ /suse-sles-12-sp2-byos-v([0-9]*)-pv-ssd-x86_64/i) {
			return ("SLES12-SP2-EC2-BYOS",$1);
		}
		if ($xname =~ /suse-sles-12-sp2-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLES12-SP2-EC2-HVM",$1);
		}
		if ($xname =~ /suse-sles-12-sp2-v([0-9]*)-ecs-hvm-ssd-x86_64/i) {
			return ("SLES12-SP2-EC2-ECS-HVM",$1);
		}
		if ($xname =~ /suse-sles-12-sp2-byos-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLES12-SP2-EC2-HVM-BYOS",$1);
		}
		if ($xname =~ /suse-sles-sap-12-sp2-byos-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLES12-SP2-SAP-EC2-HVM-BYOS",$1);
		}
		if ($xname =~ /suse-sles-sap-12-sp2-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLES12-SP2-SAP-EC2-HVM",$1);
		}

		if ($xname =~ /suse-sles-12-sp3-byos-v([0-9]*)-pv-ssd-x86_64/i) {
			return ("SLES12-SP3-EC2-BYOS",$1);
		}
		if ($xname =~ /suse-sles-12-sp3-byos-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLES12-SP3-EC2-HVM-BYOS",$1);
		}
		if ($xname =~ /suse-sles-12-sp3-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLES12-SP3-EC2-HVM",$1);
		}
		if ($xname =~ /suse-sles-12-sp3-v([0-9]*)-ecs-hvm-ssd-x86_64/i) {
			return ("SLES12-SP3-EC2-ECS-HVM",$1);
		}
		if ($xname =~ /suse-sles-12-sp3-sapcal-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLES12-SP3-EC2-SAPCAL-HVM",$1);
		}
		if ($xname =~ /suse-sles-sap-12-sp3-byos-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLES12-SP3-SAP-EC2-HVM-BYOS",$1);
		}
		if ($xname =~ /suse-sles-sap-12-sp3-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLES12-SP3-SAP-EC2-HVM",$1);
		}
		if ($xname =~ /suse-sles-12-sp3-v([0-9]*)-pv-ssd-x86_64/i) {
			return ("SLES12-SP3-EC2",$1);
		}

		if ($xname =~ /suse-sles-12-sp4-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLES12-SP4-EC2-HVM",$1);
		}
		if ($xname =~ /suse-sles-12-sp4-byos-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLES12-SP4-EC2-HVM-BYOS",$1);
		}
		if ($xname =~ /suse-sles-sap-12-sp4-byos-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLES12-SP4-SAP-EC2-HVM-BYOS",$1);
		}
		if ($xname =~ /suse-sles-sap-12-sp4-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLES12-SP4-SAP-EC2-HVM",$1);
		}
		if ($xname =~ /suse-sles-12-sp4-v([0-9]*)-ecs-hvm-ssd-x86_64/i) {
			return ("SLES12-SP4-EC2-ECS-HVM",$1);
		}

		if ($xname =~ /suse-sles-12-sp5-byos-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLES12-SP5-EC2:BYOS",$1);
		}
		if ($xname =~ /suse-sles-sap-12-sp5-byos-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLES12-SP5-EC2:SAP-BYOS",$1);
		}
		if ($xname =~ /suse-sles-sap-12-sp5-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLES12-SP5-EC2:SAP-On-Demand",$1);
		}
		if ($xname =~ /suse-sles-12-sp5-v([0-9]*)-ecs-hvm-ssd-x86_64/i) {
			return ("SLES12-SP5-EC2:ECS-On-Demand",$1);
		}
		if ($xname =~ /suse-sles-12-sp5-v([0-9]*)-hvm-ssd-x86_64/i) {
			return ("SLES12-SP5-EC2:On-Demand",$1);
		}

		if ($xname =~ /suse-sles-15-byos-v([0-9]*)-hvm-ssd-/i) {
			return ("SLES15-EC2-HVM-BYOS",$1);
		}
		if ($xname =~ /suse-sles-15-v([0-9]*)-hvm-ssd-/i) {
			return ("SLES15-EC2-HVM",$1);
		}
		if ($xname =~ /suse-sles-15-v([0-9]*)-ecs-hvm-ssd-/i) {
			return ("SLES15-EC2-ECS-HVM",$1);
		}
		if ($xname =~ /suse-sles-sap-15-byos-v([0-9]*)-hvm-ssd-/i) {
			return ("SLES15-SAP-EC2-HVM-BYOS",$1);
		}
		if ($xname =~ /suse-sles-sap-15-v([0-9]*)-hvm-ssd-/i) {
			return ("SLES15-SAP-EC2-HVM",$1);
		}

		if ($xname =~ /suse-sles-15-sp1-byos-v([0-9]*)-hvm-ssd-/i) {	# ARM
			return ("SLES15-SP1-EC2-HVM-BYOS",$1);
		}
		if ($xname =~ /suse-sles-sap-15-sp1-byos-v([0-9]*)-hvm-ssd-/i) {	# ARM
			return ("SLES15-SP1-SAP-EC2-HVM-BYOS",$1);
		}
		if ($xname =~ /suse-sles-sap-15-sp1-v([0-9]*)-hvm-ssd-/i) {	# ARM
			return ("SLES15-SP1-SAP-EC2-HVM",$1);
		}
		if ($xname =~ /suse-sles-15-sp1-v([0-9]*)-hvm-ssd-/i) {	# ARM
			return ("SLES15-SP1-EC2-HVM",$1);
		}
		if ($xname =~ /suse-sles-15-sp1-v([0-9]*)-ecs-hvm-ssd-/i) {	# ARM
			return ("SLES15-SP1-EC2-ECS-HVM",$1);
		}
		if ($xname =~ /suse-sles-15-sp1-sapcal-v([0-9]*)-hvm-ssd-/i) {	# ARM
			return ("SLES15-SP1-SAPCAL:EC2-HVM",$1);
		}
		if ($xname =~ /suse-sles-15-sp3-sapcal-v([0-9]*)-hvm-ssd-/i) {	# ARM
			return ("SLES15-SP3-SAPCAL:EC2-HVM",$1);
		}
		if ($xname =~ /suse-sles-hpc-15-sp1-byos-v([0-9]*)-hvm-ssd-/i) {	# ARM
			return ("SLES15-SP1-EC2-HPC-HVM-BYOS",$1);
		}
		if ($xname =~ /suse-sles-15-sp([23])-byos-v([0-9]*)-hvm-ssd-/i) {	# ARM
			return ("SLES15-SP$1-BYOS:EC2-HVM",$2);
		}
		if ($xname =~ /suse-sles-15-sp(\d)-byos-v([0-9]*)-hvm-ssd-/i) {
			return ("SLES15-SP$1-BYOS:EC2",$2);
		}
		if ($xname =~ /suse-sles-sap-15-sp([23])-byos-v([0-9]*)-hvm-ssd-/i) {	# ARM
			return ("SLES15-SP$1-SAP-BYOS:EC2-HVM",$2);
		}
		if ($xname =~ /suse-sles-sap-15-sp(\d)-byos-v([0-9]*)-hvm-ssd-/i) {	# ARM
			return ("SLES15-SP$1-SAP-BYOS:EC2",$2);
		}
		if ($xname =~ /suse-sles-15-sp(\d)-v([0-9]*)-ecs-hvm-ssd-/i) {	# ARM
			return ("SLES15-SP$1-EC2-ECS-HVM",$2);
		}
		if ($xname =~ /suse-sles-15-sp2-v([0-9]*)-hvm-ssd-/i) {	# ARM
			return ("SLES15-SP2:EC2-HVM",$1);
		}
		if ($xname =~ /suse-sles-15-sp3-v([0-9]*)-hvm-ssd-/i) {	# ARM
			return ("SLES15-SP3:EC2-HVM",$1);
		}
		if ($xname =~ /suse-sles-15-sp(\d)-v([0-9]*)-hvm-ssd-/i) {
			return ("SLES15-SP$1:EC2",$2);
		}
		if ($xname =~ /suse-sle-hpc-15-sp1-byos-v([0-9]*)-hvm-ssd-/i) {
			return ("SLES15-SP1-EC2-HPC-HVM-BYOS",$1);
		}
		if (	($xname =~ /suse-sles-hpc-15-sp([23])-byos-v([0-9]*)-hvm-ssd-/i) ||
			($xname =~ /suse-sle-hpc-15-sp([23])-byos-v([0-9]*)-hvm-ssd-/i)
		) {
			return ("SLES15-SP$1-HPC-BYOS:EC2-HVM",$2);
		}
		if ($xname =~ /suse-sle-hpc-15-sp(\d)-byos-v([0-9]*)-hvm-ssd-/i) {
			return ("SLES15-SP$1-HPC-BYOS:EC2",$2);
		}
		if ($xname =~ /suse-sles-sap-15-sp([23])-v([0-9]*)-hvm-ssd-/i) {
			return ("SLES15-SP$1-SAP:EC2-HVM",$2);
		}
		if ($xname =~ /suse-sles-sap-15-sp(\d)-v([0-9]*)-hvm-ssd-/i) {
			return ("SLES15-SP$1-SAP:EC2",$2);
		}

		if ($xname =~ /suse-sles-11-sp4-byos-v([0-9]*)-pv-ssd-/i) {	# ARM
			return ("SLES11-SP4-EC2-BYOS",$1);
		}
		if ($xname =~ /suse-sles-11-sp4-v([0-9]*)-pv-ssd-/i) {	# ARM
			return ("SLES11-SP4-EC2",$1);
		}
		if ($xname =~ /suse-sles-11-sp4-rightscale-v([0-9]*)-pv-ssd-/i) {	# ARM
			return ("SLES11-SP4-EC2-RightScale",$1);
		}
		if ($xname =~ /suse-sles-11-sp4-rightscale-v([0-9]*)-hvm-ssd-/i) {	# ARM
			return ("SLES11-SP4-EC2-RightScale-HVM",$1);
		}
		if ($xname =~ /suse-sles-11-sp4-v([0-9]*)-hvm-ssd-/i) {	# ARM
			return ("SLES11-SP4-EC2-HVM",$1);
		}
		if ($xname =~ /suse-sles-11-sp4-sapcal-v?([0-9]*)-/i) {	# ARM
			return ("SLES11-SP4-EC2-SAPCAL-HVM",$1);
		}
		if ($xname =~ /suse-cap-deploy-byos-v([0-9]*)/i) {	# suse-cap-deploy-byos-v20201016-hvm-ssd-x86_64
			return ("SLES15-SP1-CAP-Deployment-BYOS:EC2-HVM",$1);
		}
		if ($xname =~ /sles-10-sp3/) { return (); }
		if ($xname =~ /sles-11-sp[123]/) { return (); }
		if ($xname =~ /suse-sles-11-manager-/) { return (); }
		if ($xname =~ /manager-3.0/) { return (); }
		if ($xname =~ /manager-3.1/) { return (); }
		if ($xname =~ /suse-caasp-2/) { return (); }
		if ($xname =~ /suse-caasp-3/) { return (); }
		if ($xname =~ /openSUSE-Leap-15-\d-v([0-9]*)/i) { return (); }

		warn "Unmapped $xname\n";
		return ();

	}

	if ($provider =~ "alibaba") {
		if ($xname =~ /sles-15-sp2-chost-byos-v([0-9]*)/i) {
			return ("SLES15-SP2-CHOST-BYOS:Ali",$1);
		}
		if ($xname =~ /sles-15-sp(\d)-chost-byos-v([0-9]*)/i) {
			return ("SLES15-SP$1-CHOST-BYOS:Aliyun",$2);
		}
		warn "Unmapped $xname\n";
		return ();
	}

	if ($provider =~ "google") {
		if ($xname =~ /suse-liberty-7-9-byos-v([0-9]*)-x86-64/i) {
			return ();
		}
		if ($xname =~ /suse-liberty-linux-7-9-byos-v([0-9]*)-x86-64/i) {
			return ();
		}
		if ($xname =~ /suse-liberty-linux-8-9-byos-v([0-9]*)-x86-64/i) {
			return ();
		}
		if ($xname =~ /sle-micro-5-1-byos-v([0-9]*)/i) {
			return ("SLES15-SP3-Micro-5-1-BYOS:GCE",$1);
		}
		if ($xname =~ /sle-micro-5-2-byos-v([0-9]*)/i) {
			return ("SLES15-SP3-Micro-5-2-BYOS:GCE",$1);
		}
		if ($xname =~ /sle-micro-5-3-byos-v([0-9]*)-x86-64/i) {
			return ("SLES15-SP4-Micro-5-3-BYOS:GCE",$1);
		}
		if ($xname =~ /sle-micro-5-4-byos-v([0-9]*)-x86-64/i) {
			return ("SLES15-SP4-Micro-5-4-BYOS:GCE",$1);
		}
		if ($xname =~ /sle-micro-5-5-byos-v([0-9]*)-x86-64/i) {
			return ("SLES15-SP5-Micro-5-5-BYOS:GCE",$1);
		}
		if ($xname =~ /sle-micro-6-0-byos-v([0-9]*)-x86-64/i) {
			return ("SLE-Micro-BYOS:GCE",$1);
		}
		if ($xname =~ /sle-micro-6-0-byos-v([0-9]*)-arm64/i) {
			return ();
		}
		if ($xname =~ /sle-micro-5-3-byos-v([0-9]*)-arm64/i) {
			return ();
		}
		if ($xname =~ /sle-micro-5-4-byos-v([0-9]*)-arm64/i) {
			return ();
		}
		if ($xname =~ /sle-micro-5-5-byos-v([0-9]*)-arm64/i) {
			return ();
		}
		if ($xname =~ /sles-15-sp(\d)-chost-byos-v([0-9]*)/i) {
			return ("SLES15-SP$1-CHOST-BYOS:GCE",$2);
		}
		if ($xname =~ /sles-15-sp(\d)-hardened-byos-v([0-9]*)/i) {
			return ("SLES15-SP$1-Hardened-BYOS:GCE",$2);
		}
		if ($xname =~ /sles-sap-15-sp(\d)-hardened-v([0-9]*)/i) {
			return ("SLES15-SP$1-SAP-Hardened:GCE",$2);
		}
		if ($xname =~ /sles-sap-15-sp(\d)-hardened-byos-v([0-9]*)/i) {
			return ("SLES15-SP$1-SAP-Hardened-BYOS:GCE",$2);
		}
		if ($xname =~ /sles-11-sp3/) { return (); }
		if ($xname =~ /suse-caasp-2-1/) { return (); }
		if ($xname =~ /suse-caasp-3-0/) { return (); }
		if ($xname =~ /suse-sles-11-manager/) { return (); }
		if ($xname =~ /suse-manager-3-0-/) { return (); }
		if ($xname =~ /sles-11-sp4-v([0-9]*)/) {
			return ("SLES11-SP4-GCE",$1);
		}
		if ($xname =~ /sles-12-v([0-9]*)/i) {
			#return ("SLES12-GCE",$1);
			return ();
		}
		if ($xname =~ /sles-12-byos-v([0-9]*)/i) {
			#return ("SLES12-GCE",$1);
			return ();
		}
		if ($xname =~ /sles-12-sp1-v([0-9]*)/i) {
			#return ("SLES12-SP1-GCE",$1);
			return ();
		}
		if ($xname =~ /sles-12-sp1-byos-v([0-9]*)/i) {
			return ("SLES12-SP1-GCE-BYOS",$1);
		}
		if ($xname =~ /sles-12-sp1-sap-v([0-9]*)/i) {
			return ("SLES12-SP1-SAP-GCE",$1);
		}
		if ($xname =~ /sles-12-sp1-sapcal-v([0-9]*)/i) {
			return ("SLES12-SP1-GCE-SAPCAL",$1);
		}
		if ($xname =~ /sles-12-sp1-sap-byos-v([0-9]*)/i) {
			return ("SLES12-SP1-SAP-GCE-BYOS",$1);
		}
		if ($xname =~ /sles-12-sp2-v([0-9]*)/i) {
			return ("SLES12-SP2-GCE",$1);
		}
		if ($xname =~ /sles-12-sp2-sap-v([0-9]*)/i) {
			return ("SLES12-SP2-SAP-GCE",$1);
		}
		if ($xname =~ /sles-12-sp2-sap-byos-v([0-9]*)/i) {
			return ("SLES12-SP2-SAP-GCE-BYOS",$1);
		}
		if ($xname =~ /sles-12-sp2-byos-v([0-9]*)/i) {
			return ("SLES12-SP2-GCE-BYOS",$1);
		}
		if ($xname =~ /sles-12-sp3-v([0-9]*)/i) {
			return ("SLES12-SP3-GCE",$1);
		}
		if ($xname =~ /sles-12-sp3-sap-v([0-9]*)/i) {
			return ("SLES12-SP3-SAP-GCE",$1);
		}
		if ($xname =~ /sles-12-sp3-sapcal-v([0-9]*)/i) {
			return ("SLES12-SP3-GCE-SAPCAL",$1);
		}
		if ($xname =~ /sles-12-sp3-sap-byos-v([0-9]*)/i) {
			return ("SLES12-SP3-SAP-GCE-BYOS",$1);
		}
		if ($xname =~ /sles-12-sp3-byos-v([0-9]*)/i) {
			return ("SLES12-SP3-GCE-BYOS",$1);
		}
		if ($xname =~ /sles-12-sp4-v([0-9]*)/i) {
			return ("SLES12-SP4-GCE",$1);
		}
		if ($xname =~ /sles-12-sp4-sap-v([0-9]*)/i) {
			return ("SLES12-SP4-SAP-GCE",$1);
		}
		if ($xname =~ /sles-12-sp4-sap-byos-v([0-9]*)/i) {
			return ("SLES12-SP4-SAP-GCE-BYOS",$1);
		}
		if ($xname =~ /sles-12-sp4-byos-v([0-9]*)/i) {
			return ("SLES12-SP4-GCE-BYOS",$1);
		}
		if ($xname =~ /sles-12-sp5-v([0-9]*)/i) {
			return ("SLES12-SP5-GCE:On-Demand",$1);
		}
		if ($xname =~ /sles-12-sp5-byos-v([0-9]*)/i) {
			return ("SLES12-SP5-GCE:BYOS",$1);
		}
		if ($xname =~ /sles-12-sp5-sap-v([0-9][0-9]*)/i) {
			return ("SLES12-SP5-GCE:SAP-On-Demand",$1);
		}
		if ($xname =~ /sles-12-sp5-sap-byos-v([0-9]*)/i) {
			return ("SLES12-SP5-GCE:SAP-BYOS",$1);
		}
		if ($xname =~ /sles-15-v([0-9]*)/i) {
			return ("SLES15-GCE",$1);
		}
		if ($xname =~ /sles-15-sap-v([0-9]*)/i) {
			return ("SLES15-SAP-GCE",$1);
		}
		if ($xname =~ /sles-15-sap-byos-v([0-9]*)/i) {
			return ("SLES15-SAP-GCE-BYOS",$1);
		}
		if ($xname =~ /sles-15-byos-v([0-9]*)/i) {
			return ("SLES15-GCE-BYOS",$1);
		}

		if ($xname =~ /sles-15-sp(\d)-sapcal-v([0-9]*)/i) {
			return ("SLES15-SP$1-SAPCAL:GCE",$2);
		}

		if ($xname =~ /sles-15-sp1-v([0-9]*)/i) {
			return ("SLES15-SP1-GCE",$1);
		}
		if ($xname =~ /sles-15-sp(\d)-v([0-9]*)/i) {
			print STDERR "$xname -> sp$1 id $2\n";
			return ("SLES15-SP$1:GCE",$2);
		}

		if ($xname =~ /sles-15-sp1-byos-v([0-9]*)/i) {
			return ("SLES15-SP1-GCE-BYOS",$1);
		}
		if ($xname =~ /sles-15-sp(\d)-byos-v([0-9]*)/i) {
			return ("SLES15-SP$1-BYOS:GCE",$2);
		}


		if ($xname =~ /sles-15-sp1-sap-v([0-9]*)/i) {
			return ("SLES15-SP1-SAP-GCE",$1);
		}
		if ($xname =~ /sles-15-sp(\d)-sap-v([0-9]*)/i) {
			return ("SLES15-SP$1-SAP:GCE",$2);
		}


		# cannot be merged to generic (name changed to multibuild)
		if ($xname =~ /sles-15-sp1-sap-byos-v([0-9]*)/i) {
			return ("SLES15-SP1-SAP-GCE-BYOS",$1);
		}
		if ($xname =~ /sles-15-sp(\d)-sap-byos-v([0-9]*)/i) {
			return ("SLES15-SP$1-SAP-BYOS:GCE",$2);
		}

		if (	($xname =~ /sles-15-sp(\d)-hpc-byos-v([0-9]*)/i) ||
			($xname =~ /sle-hpc-15-sp(\d)-byos-v([0-9]*)/i)
		) {
			return ("SLES15-SP$1-HPC-BYOS:GCE",$2);
		}
		if ($xname =~ /suse-manager-3-1-server-byos-v([0-9]*)/i) {
			#return ("SLES12-SP2-Manager-3-1-Server-GCE-BYOS",$1);
			return ();
		}
		if ($xname =~ /suse-manager-3-1-proxy-byos-v([0-9]*)/i) {
			#return ("SLES12-SP2-Manager-3-1-Proxy-GCE-BYOS",$1);
			return ();
		}
		if ($xname =~ /suse-manager-3-2-server-byos-v([0-9]*)/i) {
			return ("SLES12-SP4-Manager-3-2-Server-GCE-BYOS",$1);
		}
		if ($xname =~ /suse-manager-3-2-proxy-byos-v([0-9]*)/i) {
			return ("SLES12-SP4-Manager-3-2-Proxy-GCE-BYOS",$1);
		}
		if ($xname =~ /suse-manager-4-0-server-byos-v([0-9]*)/i) {
			return ("SLES15-SP1-Manager-4-0-GCE-BYOS:Server",$1);
		}
		if ($xname =~ /suse-manager-4-0-proxy-byos-v([0-9]*)/i) {
			return ("SLES15-SP1-Manager-4-0-GCE-BYOS:Proxy",$1);
		}
		if ($xname =~ /suse-manager-4-1-server-byos-v([0-9]*)/i) {
			return ("SLES15-SP2-Manager-4-1-Server-BYOS:GCE",$1);
		}
		if (	($xname =~ /suse-manager-4-2-server-byos-v([0-9]*)/i) ||
			($xname =~ /suse-manager-server-4-2-byos-v([0-9]*)/i)
		) {
			return ("SLES15-SP3-Manager-4-2-Server-BYOS:GCE",$1);
		}
		if ($xname =~ /suse-manager-4-1-proxy-byos-v([0-9]*)/i) {
			return ("SLES15-SP2-Manager-4-1-Proxy-BYOS:GCE",$1);
		}
		if (	($xname =~ /suse-manager-4-2-proxy-byos-v([0-9]*)/i) ||
			($xname =~ /suse-manager-proxy-4-2-byos-v([0-9]*)/i)
		) {
			return ("SLES15-SP3-Manager-4-2-Proxy-BYOS:GCE",$1);
		}
		if ($xname =~ /suse-manager-proxy-4-3-byos-v([0-9]*)/i) {
			return ("SLES15-SP4-Manager-Proxy-4-3-BYOS:GCE",$1);
		}
		if ($xname =~ /suse-manager-server-4-3-byos-v([0-9]*)/i) {
			return ("SLES15-SP4-Manager-Server-4-3-BYOS:GCE",$1);
		}
		if ($xname =~ /suse-manager-proxy-5-0-byos-v([0-9]*)/i) {
			return ("SLES15-SP5-Manager-Proxy-5-0-BYOS:GCE",$1);
		}
		if ($xname =~ /suse-manager-server-5-0-byos-v([0-9]*)/i) {
			return ("SLES15-SP5-Manager-Server-5-0-BYOS:GCE",$1);
		}
		if ($xname =~ /sles-11-sp4-byos-v([0-9]*)/i) {
			return ("SLES11-SP4-GCE-BYOS",$1);
		}
		if ($xname =~ /suse-cap-deploy-byos-v([0-9]*)/i) {
			return ("SLES15-SP1-CAP-Deployment-BYOS:GCE",$1);
		}
		if ($xname =~ /opensuse-leap-15-\d-v([0-9]*)/i) {
			return ();
		}
		warn "Unmapped $xname\n";
		return ();
	}
	if ($provider =~ "microsoft") {
		if ($xname =~ /^[0-9a-f]*_/) {
			return ();
		}
		if (	($xname =~ /suse-sle-micro-5-1-byos-v([0-9]*)-gen2/i) ||
			($xname =~ /suse-sle-micro-5-1-byos-v([0-9]*)-x86_64-gen2/i)
		) {
			return ("SLES15-SP3-Micro-5-1-BYOS:Azure",$1);
		}
		if (	($xname =~ /suse-sle-micro-5-2-byos-v([0-9]*)-x86_64-gen2/i)) {
			return ("SLES15-SP3-Micro-5-2-BYOS:Azure",$1);
		}
		if (	($xname =~ /suse-sle-micro-5-3-byos-v([0-9]*)-x86_64-gen2/i)) {
			return ("SLES15-SP4-Micro-5-3-BYOS:Azure",$1);
		}
		if (	($xname =~ /suse-sle-micro-5-4-v([0-9]*)-x86_64-llc-gen2/i)) {
			return ("SLES15-SP4-Micro-5-4:Azure",$1);
		}
		if (	($xname =~ /suse-sle-micro-5-5-v([0-9]*)-x86_64-llc-gen2/i)) {
			return ("SLES15-SP5-Micro-5-5:Azure",$1);
		}
		if (	($xname =~ /suse-sle-micro-5-5-v([0-9]*)-x86_64-ltd-gen2/i)) {
			return ("SLES15-SP5-Micro-5-5:Azure",$1);
		}
		if (	($xname =~ /suse-sle-micro-5-5-v([0-9]*)-arm64-llc-gen2/i)) {
			return ();
		}
		if (	($xname =~ /suse-sle-micro-5-5-v([0-9]*)-arm64-ltd-gen2/i)) {
			return ();
		}
		if (	($xname =~ /suse-sle-micro-6-0-v([0-9]*)-x86_64-ltd-gen2/i)) {
			return ("SLE-Micro:Azure",$1);
		}
		if (	($xname =~ /suse-sle-micro-6-0-v([0-9]*)-arm64-ltd-gen2/i)) {
			return ();
		}
		if (	($xname =~ /suse-sle-micro-6-0-v([0-9]*)-x86_64-llc-gen2/i)) {
			return ("SLE-Micro:Azure",$1);
		}
		if (	($xname =~ /suse-sle-micro-6-0-byos-v([0-9]*)-x86_64-gen2/i)) {
			return ("SLE-Micro-BYOS:Azure",$1);
		}
		if (	($xname =~ /suse-sle-micro-5-4-byos-v([0-9]*)-x86_64-gen2/i)) {
			return ("SLES15-SP4-Micro-5-4-BYOS:Azure",$1);
		}
		if (	($xname =~ /suse-sle-micro-5-5-byos-v([0-9]*)-x86_64-gen2/i)) {
			return ("SLES15-SP5-Micro-5-5-BYOS:Azure",$1);
		}
		if (	($xname =~ /suse-sle-micro-5-3-byos-v([0-9]*)-arm64-gen2/i)) {
			return ();
		}
		if (	($xname =~ /suse-sle-micro-5-4-byos-v([0-9]*)-arm64-gen2/i)) {
			return ();
		}
		if (	($xname =~ /suse-sle-micro-5-5-byos-v([0-9]*)-arm64-gen2/i)) {
			return ();
		}
		if (	($xname =~ /suse-sle-micro-6-0-byos-v([0-9]*)-arm64-gen2/i)) {
			return ();
		}
		if (	($xname =~ /suse-sle-micro-6-0-byos-v([0-9]*)-arm64-gen2/i)) {
			return ();
		}
		if (	($xname =~ /suse-sle-micro-6-0-byos-v([0-9]*)-arm64-llc-gen2/i)) {
			return ();
		}
		if (	($xname =~ /suse-sle-micro-6-0-v([0-9]*)-arm64-llc-gen2/i)) {
			return ();
		}
		if ($xname =~ /suse-sles-15-sp1-chost-byos-v([0-9]*)-gen2/i) {
			return ("SLES15-SP1-CHOST-BYOS:Azure",$1);
		}
		if ($xname =~ /suse-sles-15-sp2-chost-byos-v([0-9]*)-gen2/i) {
			return ("SLES15-SP2-CHOST-BYOS:Azure",$1);
		}
		if (	($xname =~ /suse-sles-15-sp(\d)-chost-byos-v([0-9]*)-gen2/i) ||
			($xname =~ /suse-sles-15-sp(\d)-chost-byos-v([0-9]*)-x86_64-gen2/i)
		) {
			return ("SLES15-SP$1-CHOST-BYOS:Azure",$2);
		}
		if ($xname =~ /suse-sles-15-sp(\d)-chost-byos-v([0-9]*)-arm64-gen2/i) {
			return ();
		}
		if ($xname =~ /suse-sles-15-sp(\d)-hardened-byos-v([0-9]*)-x86_64-gen2/i) {
			return ("SLES15-SP$1-Hardened-BYOS:Azure",$2);
		}
		if ($xname =~ /suse-sles-sap-15-sp(\d)-hardened-byos-v([0-9]*)-x86_64-gen2/i) {
			return ("SLES15-SP$1-SAP-Hardened-BYOS:Azure",$2);
		}
		if ($xname =~ /suse-sles-sap-15-sp(\d)-hardened-v([0-9]*)-x86_64-gen2/i) {
			return ("SLES15-SP$1-SAP-Hardened:Azure",$2);
		}
		if ($xname =~ /suse-sles-12-sp4-standard-gen2-v([0-9]*)/i) {
			return ("SLES12-SP4-Azure-Standard",$1);
		}
		if ($xname =~ /suse-sles-12-sp4-gen2-v([0-9]*)/i) {
			return ("SLES12-SP4-Azure",$1);
		}
		if (	($xname =~ /suse-sles-12-sp5-v([0-9]*)-gen2/i) ||
			($xname =~ /suse-sles-12-sp5-v([0-9]*)-x86_64-gen2/i)
		) {
			return ("SLES12-SP5-Azure:Standard-On-Demand",$1);
		}
		if (	($xname =~ /suse-sles-12-sp5-basic-v([0-9]*)-gen2/i) ||
			($xname =~ /suse-sles-12-sp5-basic-v([0-9]*)-x86_64-gen2/i)
		) {
			return ("SLES12-SP5-Azure:Basic-On-Demand",$1);
		}
		if (	($xname =~ /suse-sles-12-sp5-byos-v([0-9]*)-gen2/i) ||
			($xname =~ /suse-sles-12-sp5-byos-v([0-9]*)-x86_64-gen2/i)
		) {
			return ("SLES12-SP5-Azure:BYOS",$1);
		}
		if (	($xname =~ /suse-sles-12-sp5-hpc-byos-v([0-9]*)-gen2/i)		||
			($xname =~ /suse-sles-12-sp5-hpc-byos-v([0-9]*)-x86_64-gen2/i)	||
                        ($xname =~ /suse-sle-hpc-12-sp5-byos-v([0-9]*)-x86_64-gen2/i)
		) {
			return ("SLES12-SP5-Azure:HPC-BYOS",$1);
		}
		if (	($xname =~ /suse-sles-12-sp5-hpc-v([0-9]*)-gen2/i) ||
			($xname =~ /suse-sles-12-sp5-hpc-v([0-9]*)-x86_64-gen2/i)  ||
			($xname =~ /suse-sle-hpc-12-sp5-v([0-9]*)-x86_64-gen2/i)
		) {
			return ("SLES12-SP5-Azure:HPC-On-Demand",$1);
		}
		if (	($xname =~ /suse-sles-sap-12-sp5-byos-v([0-9]*)-x86_64-gen2/i) ||
		    	($xname =~ /suse-sles-sap-12-sp5-byos-v([0-9]*)-gen2/i)
		) {
			return ("SLES12-SP5-Azure:SAP-BYOS",$1);
		}
		if (	($xname =~ /suse-sles-sap-12-sp5-v([0-9]*)-gen2/i) ||
			($xname =~ /suse-sles-sap-12-sp5-v([0-9]*)-x86_64-gen2/i)
		) {
			return ("SLES12-SP5-Azure:SAP-On-Demand",$1);
		}
		if ($xname =~ /suse-sles-12-sp4-byos-gen2-v([0-9]*)/i) {
			return ("SLES12-SP4-Azure-BYOS",$1);
		}
		if ($xname =~ /suse-sles-12-sp4-byos-v([0-9]*)/i) {
			return ("SLES12-SP4-Azure-BYOS",$1);
		}
		if ($xname =~ /suse-sles-sap-12-sp4-byos-gen2-v([0-9]*)/i) {
			return ("SLES12-SP4-SAP-Azure-BYOS",$1);
		}
		if ($xname =~ /suse-sles-sap-12-sp4-byos-v([0-9]*)-12-sp4-gen2/i) {
			return ("SLES12-SP4-SAP-Azure-BYOS",$1);
		}
		if (	($xname =~ /suse-sles-sap-12-sp4-byos-v([0-9]*)-gen2/i) ||
			($xname =~ /suse-sles-sap-12-sp4-byos-v([0-9]*)-x86_64-gen2/i)
		) {
			return ("SLES12-SP4-SAP-Azure-BYOS",$1);
		}
		if ($xname =~ /suse-sles-sap-12-sp4-gen2-v([0-9]*)/i) {
			return ("SLES12-SP4-SAP-Azure",$1);
		}
		if ($xname =~ /suse-sles-sap-12-sp4-v([0-9]*)-12-sp4-gen2/i) {
			return ("SLES12-SP4-SAP-Azure",$1);
		}
		if (	($xname =~ /suse-sles-sap-12-sp4-v([0-9]*)-gen2/i) ||
			($xname =~ /suse-sles-sap-12-sp4-v([0-9]*)-x86_64-gen2/i)
		) {
			return ("SLES12-SP4-SAP-Azure",$1);
		}
		if ($xname =~ /suse-sles-15-sp1-basic-gen2-v([0-9]*)/i) {
			return ("SLES15-SP1-Azure",$1);
		}
		if ($xname =~ /suse-sles-15-sp1-basic-v([0-9]*)-gen2/i) {
			return ("SLES15-SP1-Azure",$1);
		}
		if ($xname =~ /suse-sles-15-sp1-hpc-gen2-v([0-9]*)/i) {
			return ("SLES15-SP1-Azure-HPC",$1);
		}
		if ($xname =~ /suse-sles-15-sp1-hpc-v([0-9]*)-gen2/i) {
			return ("SLES15-SP1-Azure-HPC",$1);
		}
		if ($xname =~ /suse-sles-15-sp1-gen2-v([0-9]*)/i) {
			return ("SLES15-SP1-Azure-Standard",$1);
		}
		if ($xname =~ /suse-sles-15-sp1-v([0-9]*)-gen2/i) {
			return ("SLES15-SP1-Azure-Standard",$1);
		}
		if ($xname =~ /suse-sles-sap-15-gen2-v([0-9]*)/i) {
			return ("SLES15-SAP-Azure",$1);
		}
		if ($xname =~ /suse-sles-sap-15-v([0-9]*)/i) {
			return ("SLES15-SAP-Azure",$1);
		}
		if ($xname =~ /suse-sles-sap-15-v([0-9]*)-gen2/i) {
			return ("SLES15-SAP-Azure",$1);
		}
		if ($xname =~ /suse-sles-sap-15-sp1-gen2-v([0-9]*)/i) {
			return ("SLES15-SP1-SAP-Azure",$1);
		}
		if ($xname =~ /suse-sles-sap-15-sp1-v([0-9]*)-gen2/i) {
			return ("SLES15-SP1-SAP-Azure",$1);
		}
		if ($xname =~ /suse-sles-sap-15-byos-gen2-v([0-9]*)/i) {
			return ("SLES15-SAP-Azure-BYOS",$1);
		}
		if ($xname =~ /suse-sles-sap-15-byos-v([0-9]*)/i) {
			return ("SLES15-SAP-Azure-BYOS",$1);
		}
		if ($xname =~ /suse-sles-sap-15-byos-v([0-9]*)-gen2/i) {
			return ("SLES15-SAP-Azure-BYOS",$1);
		}
		if ($xname =~ /suse-sles-sap-15-sp1-byos-gen2-v([0-9]*)/i) {
			return ("SLES15-SP1-SAP-Azure-BYOS",$1);
		}
		if (	($xname =~ /suse-sles-sap-15-sp1-byos-v([0-9]*)-gen2/i) ||
			($xname =~ /suse-sles-sap-15-sp1-byos-v([0-9]*)-x86_64-gen2/i)
		) {
			return ("SLES15-SP1-SAP-Azure-BYOS",$1);
		}
		if (	$xname =~ /suse-sles-15-byos-gen2-v([0-9]*)/	||
			$xname =~ /suse-sles-15-byos-v([0-9]*)-15-gen2/ ||
			$xname =~ /suse-sles-15-byos-v([0-9]*)-gen2/	||
			$xname =~ /suse-sles-15-byos-v([0-9]*)-x86_64-gen2/
		) {
			return ("SLES15-Azure-BYOS",$1);
		}
		if ($xname =~ /suse-sles-15-sp1-byos-gen2-v([0-9]*)/i) {
			return ("SLES15-SP1-Azure-BYOS",$1);
		}
		if (	($xname =~ /suse-sles-15-sp1-byos-v([0-9]*)-gen2/i) ||
			($xname =~ /suse-sles-15-sp1-byos-v([0-9]*)-x86_64-gen2/i)
		) {
			return ("SLES15-SP1-Azure-BYOS",$1);
		}
		if (	($xname =~ /suse-sles-15-sp(\d)-byos-v([0-9]*)-gen2/i) ||
			($xname =~ /suse-sles-15-sp(\d)-byos-v([0-9]*)-x86_64-gen2/i)
		) {
			return ("SLES15-SP$1-BYOS:Azure",$2);
		}

		if ($xname =~ /suse-sles-15-sp(\d)-byos-v([0-9]*)-arm64-gen2/i)  {
			return ();
		}

		if (	($xname =~ /suse-sles-15-sp(\d)-v([0-9]*)-gen2/i) ||
			($xname =~ /suse-sles-15-sp(\d)-v([0-9]*)-x86_64-gen2/i)
		) {
			return ("SLES15-SP$1:Azure-Standard",$2);
		}
		if  ($xname =~ /suse-sles-15-sp(\d)-v([0-9]*)-arm64-gen2/i) {
			return ();
		}

		if (	($xname =~ /suse-sles-15-sp(\d)-basic-v([0-9]*)-gen2/i) ||
			($xname =~ /suse-sles-15-sp(\d)-basic-v([0-9]*)-x86_64-gen2/i)
		) {
			return ("SLES15-SP$1:Azure-Basic",$2);
		}
		if (	($xname =~ /suse-sles-15-sp2-hpc-byos-v([0-9]*)-gen2/i) ||
			($xname =~ /suse-sles-15-sp2-hpc-byos-v([0-9]*)-x86_64-gen2/i) ||
			($xname =~ /suse-sle-hpc-15-sp2-byos-v([0-9]*)-x86_64-gen2/i)
		) {
			return ("SLES15-SP2-HPC-BYOS:Azure",$1);
		}
		if (	($xname =~ /suse-sles-15-sp1-hpc-byos-v([0-9]*)-gen2/i) ||
			($xname =~ /suse-sle-hpc-15-sp1-byos-v([0-9]*)-x86_64-gen2/i)
		) {
			return ("SLES15-SP1-Azure-HPC-BYOS",$1);
		}
		if (	($xname =~ /suse-sles-15-sp(\d)-hpc-byos-v([0-9]*)-gen2/i) ||
			($xname =~ /suse-sle-hpc-15-sp(\d)-byos-v([0-9]*)-x86_64-gen2/i)
		) {
			return ("SLES15-SP$1-HPC-BYOS:Azure",$2);
		}
		if ($xname =~ /suse-sles-15-sp2-hpc-v([0-9]*)-gen2/i) {
			return ("SLES15-SP2-HPC:Azure",$1);
		}
		if (	($xname =~ /suse-sles-15-sp3-hpc-v([0-9]*)-gen2/i) ||
			($xname =~ /suse-sles-15-sp3-hpc-v([0-9]*)-x86_64-gen2/i)
		) {
			return ("SLES15-SP3-HPC:Azure",$1);
		}
		if ($xname =~ /suse-sle-hpc-15-sp(\d)-v([0-9]*)-x86_64-gen2/i) {
			return ("SLES15-SP$1-HPC:Azure",$2);
		}
		if (	($xname =~ /suse-sles-sap-15-sp(\d)-byos-v([0-9]*)-gen2/i) ||
			($xname =~ /suse-sles-sap-15-sp(\d)-byos-v([0-9]*)-x86_64-gen2/i)
		) {
			return ("SLES15-SP$1-SAP-BYOS:Azure",$2);
		}
		if (	($xname =~ /suse-sles-sap-15-sp(\d)-v([0-9]*)-gen2/i) ||
			($xname =~ /suse-sles-sap-15-sp(\d)-v([0-9]*)-x86_64-gen2/i)
		) {
			return ("SLES15-SP$1-SAP:Azure",$2);
		}

		if ($xname =~ /suse-sles-15-sp1-sapcal-v([0-9]*)/i) {
			return ("SLES15-SP1-SAPCAL:Azure",$1);
		}
		if ($xname =~ /suse-sles-15-sp(\d)-sapcal-v([0-9]*)/i) {
			return ("SLES15-SP$1-SAPCAL:Azure",$2);
		}
		if (	($xname =~ /suse-sles-15-sp1-hpc-byos-gen2-v([0-9]*)/i) 	||
			($xname =~ /suse-sles-15-sp1-hpc-byos-v([0-9]*)-gen2/i)		||
			($xname =~ /suse-sles-15-sp1-hpc-byos-v([0-9]*)-x86_64-gen2/i)	||
			($xname =~ /suse-sle-hpc-15-sp1-byos-v([0-9]*)-x86_64-gen2/i)
		) {
			return ("SLES15-SP1-Azure-HPC-BYOS",$1);
		}
		if ($xname =~ /suse-sles-15-sp3-hpc-byos-v([0-9]*)-x86_64-gen2/i) {
			return ("SLES15-SP3-HPC-BYOS:Azure",$1);
		}
		if ($xname =~ /suse-manager-4-0-proxy-byos-gen2-v([0-9]*)/i) {
			return ("SLES15-SP1-Manager-4-0-Azure-BYOS:Proxy",$1);
		}
		if ($xname =~ /suse-manager-4-0-proxy-byos-v([0-9]*)-gen2/i) {
			return ("SLES15-SP1-Manager-4-0-Azure-BYOS:Proxy",$1);
		}
		if (	($xname =~ /suse-manager-4-1-proxy-byos-v([0-9]*)-gen2/i) ||
			($xname =~ /suse-manager-4-1-proxy-byos-v([0-9]*)-x86_64-gen2/i)
		) {
			return ("SLES15-SP2-Manager-4-1-Proxy-BYOS:Azure",$1);
		}
		if (	($xname =~ /suse-manager-4-1-server-byos-v([0-9]*)-gen2/i) ||
			($xname =~ /suse-manager-4-1-server-byos-v([0-9]*)-x86_64-gen2/i)
		) {
			return ("SLES15-SP2-Manager-4-1-Server-BYOS:Azure",$1);
		}
		if (	($xname =~ /suse-manager-4-2-proxy-byos-v([0-9]*)-gen2/i) ||
			($xname =~ /suse-manager-4-2-proxy-byos-v([0-9]*)-x86_64-gen2/i) ||
			($xname =~ /suse-manager-proxy-4-2-byos-v([0-9]*)-x86_64-gen2/i)
		) {
			return ("SLES15-SP3-Manager-4-2-Proxy-BYOS:Azure",$1);
		}
		if ($xname =~ /suse-manager-proxy-4-3-byos-v([0-9]*)-x86_64-gen2/i) {
			return ("SLES15-SP4-Manager-Proxy-4-3-BYOS:Azure",$1);
		}
		if ($xname =~ /suse-manager-proxy-5-0-byos-v([0-9]*)-x86_64-gen2/i) {
			return ("SLES15-SP5-Manager-Proxy-5-0-BYOS:Azure",$1);
		}

		if (	($xname =~ /suse-manager-4-2-server-byos-v([0-9]*)-gen2/i) ||
			($xname =~ /suse-manager-4-2-server-byos-v([0-9]*)-x86_64-gen2/i) ||
			($xname =~ /suse-manager-server-4-2-byos-v([0-9]*)-x86_64-gen2/i)
		) {
			return ("SLES15-SP3-Manager-4-2-Server-BYOS:Azure",$1);
		}
		if ($xname =~ /suse-manager-server-5-0-byos-v([0-9]*)-x86_64-gen2/i) {
			return ("SLES15-SP5-Manager-Server-5-0-BYOS:Azure",$1);
		}
		if ($xname =~ /suse-manager-server-4-3-byos-v([0-9]*)-x86_64-gen2/i) {
			return ("SLES15-SP4-Manager-Server-4-3-BYOS:Azure",$1);
		}
		if ($xname =~ /suse-manager-server-4-3-v([0-9]*)-x86_64-ltd/i) {
			return ("SLES15-SP4-Manager-Server-4-3:Azure-ltd",$1);
		}
		if ($xname =~ /suse-manager-server-4-3-v([0-9]*)-x86_64-llc/i) {
			return ("SLES15-SP4-Manager-Server-4-3:Azure-llc",$1);
		}
		if ($xname =~ /suse-manager-4-0-server-byos-gen2-v([0-9]*)/i) {
			return ("SLES15-SP1-Manager-4-0-Azure-BYOS:Server",$1);
		}
		if ($xname =~ /suse-manager-4-0-server-byos-v([0-9]*)-gen2/i) {
			return ("SLES15-SP1-Manager-4-0-Azure-BYOS:Server",$1);
		}
		if ($xname =~ /suse-cap-deploy-byos-v([0-9]*)/i) {
			return ("SLES15-SP1-CAP-Deployment-BYOS:Azure",$1);
		}
		if ($xname =~ /suse-opensuse-leap-15-\d-v([0-9]*)/i) {
			return ();
		}
		warn "Unmapped $xname\n";
		return ();
	}
	if ($provider =~ "oracle") {
		if ($xname =~ /sles-12-sp4-byos-v([0-9]*)/i) {
			return ("SLES12-SP4-OCI-BYOS",$1);
		}
		if ($xname =~ /sles-12-sp4-sap-byos-v([0-9]*)/i) {
			return ("SLES12-SP4-SAP-OCI-BYOS",$1);
		}
		if ($xname =~ /sles-12-sp5-byos-v([0-9]*)/i) {
			return ("SLES12-SP5-OCI-BYOS:BYOS",$1);
		}
		if ($xname =~ /sles-12-sp5-sap-byos-v([0-9]*)/i) {
			return ("SLES12-SP5-OCI-BYOS:SAP-BYOS",$1);
		}
		if ($xname =~ /sles-15-byos-v([0-9]*)/i) {
			return ("SLES15-OCI-BYOS",$1);
		}
		if ($xname =~ /sles-15-sap-byos-v([0-9]*)/i) {
			return ("SLES15-SAP-OCI-BYOS",$1);
		}
		if ($xname =~ /sles-15-sp1-sap-byos-v([0-9]*)/i) {
			return ("SLES15-SP1-SAP-OCI-BYOS",$1);
		}
		if ($xname =~ /sles-15-sp1-byos-v([0-9]*)/i) {
			return ("SLES15-SP1-OCI-BYOS",$1);
		}
		if ($xname =~ /sles-15-sp2-byos-v([0-9]*)/i) {
			return ("SLES15-SP2-BYOS:OCI",$1);
		}
		if ($xname =~ /sles-15-sp3-byos-v([0-9]*)/i) {
			return ("SLES15-SP3-BYOS:OCI",$1);
		}
		if ($xname =~ /sles-15-sp2-sap-byos-v([0-9]*)/i) {
			return ("SLES15-SP2-SAP-BYOS:OCI",$1);
		}
		if ($xname =~ /sles-15-sp3-sap-byos-v([0-9]*)/i) {
			return ("SLES15-SP3-SAP-BYOS:OCI",$1);
		}
		warn "Unmapped $xname\n";
		return ();
	}

	print STDERR "$provider: $xname = $name / $version\n";
	return ();
}

my %knownfails = ();

foreach my $pint (@pints) {
	next unless (open(PINT,"<$pint"));

	$pint =~ /\/([^\/]*)$/;
	my $provider = $1;

	print STDERR "Provider $provider\n";

	my $name;
	my $publishedon;

	my %havedone = ();

	my $changelog;

	while (<PINT>) {
		next unless /image /;
		#next unless /deprecatedon="" /;

		next unless (/name="([^"]*)"/);
		$name = $1;

		my $loc;
		if (/changeinfo="([^"][^"]*)"/) {
			push @allchangelogs,$1;
			$changelog = $1;

			$loc = $changelog;
			$loc =~ s#https://publiccloudimagechangeinfo.suse.com/##;
			$changelog =~ s/\/$//g;	# hates leading /es
		#} else {
		#	$changelog = "https://publiccloudimagechangeinfo.suse.com/$provider/$name/";
		#	$loc = "$provider/$name/";
		#}

			# print STDERR "getting webinfo of $name / $loc / $changelog\n" if -t STDERR;
			if (! -f "$pintwebpath/$loc/package_changelogs.html" && ! -f "$pintwebpath/$loc/index.html" && !defined($knownfails{$loc})) {
				system("rm -rf $pintwebpath/$loc/");
				mkdir("$pintwebpath/$loc/");
				print "getting $changelog into $pintwebpath/$loc\n";
				if (system("cd $pintwebpath/../; wget --reject-regex \".json\" -q -m $changelog/ -I /$loc")) {
					print STDERR "FAILED? $changelog\n";
					$knownfails{$loc} = 1;
					unlink("$pintwebpath/$loc/");
				}
			}
		}

		if (defined($havedone{$name})) {
			# print STDERR "have already done $name\n" if -t STDERR;
		}
		$havedone{$name} = 1;
		unless (/publishedon="([^"]*)"/) {
			# print STDERR "$name / $loc is not published\n";
		}
		$publishedon = $1;
		#print;
		my ($ibsname,$version) = map_name($provider,$name);
		next unless ($ibsname);

		unless ($version =~ /(\d\d\d\d)(\d\d)(\d\d)/) {
			print STDERR "bad version is $version for $provider / $name?\n";
		}
		my $year = $1;
		my $month = $2;
		my $day = $3;

		my $dt = DateTime->new(
			year => $year,
			month => $month,
			day => $day,
			hour => 23,
			minute => 59
		);
		# print STDERR "$version - " . $dt->ymd . "\n";

		#unless (-d "smash/buildinfo/$ibsname") {
		#	 warn "no directory smash/buildinfo/$ibsname:$!\n";
		#}

		my @buildinfos = <smash/buildinfo/$ibsname/*>;

		if ($ibsname =~ /(.*):(.*)/) {
			push @buildinfos , <smash/buildinfo/$1.*:$2/*>;
		} else {
			push @buildinfos , <smash/buildinfo/$ibsname.*/*>;
		}

		#print "$ibsname -> " . join(",",@buildinfos) . "\n";
		# only allow 5 days of diff.
		my $diff = 5*24*3600;
		my $closestbi =  "none";
		foreach my $bi (@buildinfos) {
			my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size, $atime,$mtime,$ctime,$blksize,$blocks) = stat($bi);

			my $newdiff = abs($ctime - $dt->epoch);

			if ($newdiff < $diff) {
				$diff = $newdiff;
				$closestbi = $bi;
			}

			#my $dt2=DateTime->from_epoch (epoch => $ctime);
			#print STDERR "$bi - " . $dt2->ymd . "\n";
		}
		#print "name = $name, $ibsname, $version, publishedon = $publishedon, $closestbi\n" if -t STDERR;
		mkdir("smash/pint/$ibsname");
		if (! -f "smash/pint/$ibsname/$name") {
			if ($closestbi ne "none") {
				print "linking $closestbi smash/pint/$ibsname/$name\n";
				link("$closestbi","smash/pint/$ibsname/$name");
			} else {
				print "smash/pint/$ibsname/$name not yet linked, as none inside 1 day range\n";
			}
		}
	}
	close(PINT);
}
