[udev/f12/master] - backported the upstream cdrom_id bugfixes and enhancements (bug #533643) - backported the upstre

Harald Hoyer harald at fedoraproject.org
Tue Sep 21 11:43:40 UTC 2010


commit eeb28fb1718e5061ff5736683b9941f701084d18
Author: Harald Hoyer <harald at redhat.com>
Date:   Tue Sep 21 13:43:32 2010 +0200

    - backported the upstream cdrom_id bugfixes and enhancements
      (bug #533643)
    - backported the upstream keymaps bugfixes and enhancements
      (bug #444440)
    - fixed floppy devices (bug#492404)

 udev-145-cdrom_id-backport.patch                   |  298 ++
 udev-145-floppy.patch                              |   14 +
 udev-145-keymap-backport.patch                     | 4134 ++++++++++++++++++++
 ...al-drives-use-ID_CDROM_MEDIA_TRACK_COUNT_.patch |   14 +
 udev-145.tar.bz2.sign                              |    8 -
 udev.spec                                          |   27 +-
 6 files changed, 4483 insertions(+), 12 deletions(-)
---
diff --git a/udev-145-cdrom_id-backport.patch b/udev-145-cdrom_id-backport.patch
new file mode 100644
index 0000000..baa5d8a
--- /dev/null
+++ b/udev-145-cdrom_id-backport.patch
@@ -0,0 +1,298 @@
+diff -urN udev-145-orig/extras/cdrom_id/60-cdrom_id.rules udev-145/extras/cdrom_id/60-cdrom_id.rules
+--- udev-145-orig/extras/cdrom_id/60-cdrom_id.rules	2010-09-21 12:05:03.025750002 +0200
++++ udev-145/extras/cdrom_id/60-cdrom_id.rules	2010-06-11 10:52:56.000000000 +0200
+@@ -1,7 +1,6 @@
+ # do not edit this file, it will be overwritten on update
+ 
+-# import optical drive properties
+-ACTION!="add|change", GOTO="cdrom_end"
++ACTION=="remove", GOTO="cdrom_end"
+ SUBSYSTEM!="block", GOTO="cdrom_end"
+ KERNEL!="sr[0-9]*|xvd*", GOTO="cdrom_end"
+ ENV{DEVTYPE}!="disk", GOTO="cdrom_end"
+Binary files udev-145-orig/extras/cdrom_id/cdrom_id and udev-145/extras/cdrom_id/cdrom_id differ
+diff -urN udev-145-orig/extras/cdrom_id/cdrom_id.c udev-145/extras/cdrom_id/cdrom_id.c
+--- udev-145-orig/extras/cdrom_id/cdrom_id.c	2010-09-21 12:05:03.024750002 +0200
++++ udev-145/extras/cdrom_id/cdrom_id.c	2010-08-31 10:35:41.000000000 +0200
+@@ -85,6 +85,8 @@
+ static unsigned int cd_media_dvd_rom = 0;
+ static unsigned int cd_media_dvd_r = 0;
+ static unsigned int cd_media_dvd_rw = 0;
++static unsigned int cd_media_dvd_rw_ro = 0; /* restricted overwrite mode */
++static unsigned int cd_media_dvd_rw_seq = 0; /* sequential mode */
+ static unsigned int cd_media_dvd_ram = 0;
+ static unsigned int cd_media_dvd_plus_r = 0;
+ static unsigned int cd_media_dvd_plus_rw = 0;
+@@ -200,27 +202,27 @@
+ 
+ static int cd_capability_compat(struct udev *udev, int fd)
+ {
+-	int capabilty;
++	int capability;
+ 
+-	capabilty = ioctl(fd, CDROM_GET_CAPABILITY, NULL);
+-	if (capabilty < 0) {
++	capability = ioctl(fd, CDROM_GET_CAPABILITY, NULL);
++	if (capability < 0) {
+ 		info(udev, "CDROM_GET_CAPABILITY failed\n");
+ 		return -1;
+ 	}
+ 
+-	if (capabilty & CDC_CD_R)
++	if (capability & CDC_CD_R)
+ 		cd_cd_r = 1;
+-	if (capabilty & CDC_CD_RW)
++	if (capability & CDC_CD_RW)
+ 		cd_cd_rw = 1;
+-	if (capabilty & CDC_DVD)
++	if (capability & CDC_DVD)
+ 		cd_dvd_rom = 1;
+-	if (capabilty & CDC_DVD_R)
++	if (capability & CDC_DVD_R)
+ 		cd_dvd_r = 1;
+-	if (capabilty & CDC_DVD_RAM)
++	if (capability & CDC_DVD_RAM)
+ 		cd_dvd_ram = 1;
+-	if (capabilty & CDC_MRW)
++	if (capability & CDC_MRW)
+ 		cd_mrw = 1;
+-	if (capabilty & CDC_MRW_W)
++	if (capability & CDC_MRW_W)
+ 		cd_mrw_w = 1;
+ 	return 0;
+ }
+@@ -348,6 +350,39 @@
+ 	return 0;
+ }
+ 
++static int cd_profiles_old_mmc(struct udev *udev, int fd)
++{
++	struct scsi_cmd sc;
++	int err;
++
++	unsigned char header[32];
++
++	scsi_cmd_init(udev, &sc, header, sizeof(header));
++	scsi_cmd_set(udev, &sc, 0, 0x51);
++	scsi_cmd_set(udev, &sc, 8, sizeof(header));
++	scsi_cmd_set(udev, &sc, 9, 0);
++	err = scsi_cmd_run(udev, &sc, fd, header, sizeof(header));
++	if ((err != 0)) {
++		info_scsi_cmd_err(udev, "READ DISC INFORMATION", err);
++		info(udev, "no current profile, assuming no media\n");
++		return -1;
++	};
++
++	cd_media = 1;
++
++	if (header[2] & 16) {
++		cd_media_cd_rw = 1;
++		info(udev, "profile 0x0a media_cd_rw\n");
++	} else if ((header[2] & 3) < 2 && cd_cd_r) {
++		cd_media_cd_r = 1;
++		info(udev, "profile 0x09 media_cd_r\n");
++	} else {
++		cd_media_cd_rom = 1;
++		info(udev, "profile 0x08 media_cd_rom\n");
++	}
++	return 0;
++}
++
+ static int cd_profiles(struct udev *udev, int fd)
+ {
+ 	struct scsi_cmd sc;
+@@ -365,6 +400,12 @@
+ 	err = scsi_cmd_run(udev, &sc, fd, features, sizeof(features));
+ 	if ((err != 0)) {
+ 		info_scsi_cmd_err(udev, "GET CONFIGURATION", err);
++		/* handle pre-MMC2 drives which do not support GET CONFIGURATION */
++		if (SK(err) == 0x5 && ASC(err) == 0x20) {
++			info(udev, "drive is pre-MMC2 and does not support 46h get configuration command\n");
++			info(udev, "trying to work around the problem\n");
++			return cd_profiles_old_mmc(udev, fd);
++		}
+ 		return -1;
+ 	}
+ 
+@@ -440,10 +481,16 @@
+ 		cd_media_dvd_ram = 1;
+ 		break;
+ 	case 0x13:
++		info(udev, "profile 0x%02x media_dvd_rw_ro\n", cur_profile);
++		cd_media = 1;
++		cd_media_dvd_rw = 1;
++		cd_media_dvd_rw_ro = 1;
++		break;
+ 	case 0x14:
+-		info(udev, "profile 0x%02x media_dvd_rw\n", cur_profile);
++		info(udev, "profile 0x%02x media_dvd_rw_seq\n", cur_profile);
+ 		cd_media = 1;
+ 		cd_media_dvd_rw = 1;
++		cd_media_dvd_rw_seq = 1;
+ 		break;
+ 	case 0x1B:
+ 		info(udev, "profile 0x%02x media_dvd_plus_r\n", cur_profile);
+@@ -527,12 +574,126 @@
+ 
+ 	cd_media = 1;
+ 	info(udev, "disk type %02x\n", header[8]);
++	info(udev, "hardware reported media status: %s\n", media_status[header[2] & 3]);
+ 
+ 	/* exclude plain CDROM, some fake cdroms return 0 for "blank" media here */
+ 	if (!cd_media_cd_rom)
+ 		cd_media_state = media_status[header[2] & 3];
+ 
+-	if ((header[2] & 3) != 2)
++	/* fresh DVD-RW in restricted overwite mode reports itself as
++	 * "appendable"; change it to "blank" to make it consistent with what
++	 * gets reported after blanking, and what userspace expects  */
++	if (cd_media_dvd_rw_ro && (header[2] & 3) == 1)
++		cd_media_state = media_status[0];
++
++	/* DVD+RW discs (and DVD-RW in restricted mode) once formatted are
++	 * always "complete", DVD-RAM are "other" or "complete" if the disc is
++	 * write protected; we need to check the contents if it is blank */
++	if ((cd_media_dvd_rw_ro || cd_media_dvd_plus_rw || cd_media_dvd_plus_rw_dl || cd_media_dvd_ram) && (header[2] & 3) > 1) {
++		unsigned char buffer[32 * 2048];
++		unsigned char result, len;
++		int block, offset;
++
++		if (cd_media_dvd_ram) {
++			/* a write protected dvd-ram may report "complete" status */
++
++			unsigned char dvdstruct[8];
++			unsigned char format[12];
++
++			scsi_cmd_init(udev, &sc, dvdstruct, sizeof(dvdstruct));
++			scsi_cmd_set(udev, &sc, 0, 0xAD);
++			scsi_cmd_set(udev, &sc, 7, 0xC0);
++			scsi_cmd_set(udev, &sc, 9, sizeof(dvdstruct));
++			scsi_cmd_set(udev, &sc, 11, 0);
++			err = scsi_cmd_run(udev, &sc, fd, dvdstruct, sizeof(dvdstruct));
++			if ((err != 0)) {
++				info_scsi_cmd_err(udev, "READ DVD STRUCTURE", err);
++				return -1;
++			}
++			if (dvdstruct[4] & 0x02) {
++				cd_media_state = media_status[2];
++				info(udev, "write-protected DVD-RAM media inserted\n");
++				goto determined;
++			}
++
++			/* let's make sure we don't try to read unformatted media */
++			scsi_cmd_init(udev, &sc, format, sizeof(format));
++			scsi_cmd_set(udev, &sc, 0, 0x23);
++			scsi_cmd_set(udev, &sc, 8, sizeof(format));
++			scsi_cmd_set(udev, &sc, 9, 0);
++			err = scsi_cmd_run(udev, &sc, fd, format, sizeof(format));
++			if ((err != 0)) {
++				info_scsi_cmd_err(udev, "READ DVD FORMAT CAPACITIES", err);
++				return -1;
++			}
++
++			len = format[3];
++			if (len & 7 || len < 16) {
++				info(udev, "invalid format capacities length\n");
++				return -1;
++			}
++
++			switch(format[8] & 3) {
++			    case 1:
++				info(udev, "unformatted DVD-RAM media inserted\n");
++				/* This means that last format was interrupted
++				 * or failed, blank dvd-ram discs are factory
++				 * formatted. Take no action here as it takes
++				 * quite a while to reformat a dvd-ram and it's
++				 * not automatically started */
++				goto determined;
++
++			    case 2:
++				info(udev, "formatted DVD-RAM media inserted\n");
++				break;
++
++			    case 3:
++				cd_media = 0; //return no media
++				info(udev, "format capacities returned no media\n");
++				return -1;
++			}
++		}
++
++		/* Take a closer look at formatted media (unformatted DVD+RW
++		 * has "blank" status", DVD-RAM was examined earlier) and check
++		 * for ISO and UDF PVDs or a fs superblock presence and do it
++		 * in one ioctl (we need just sectors 0 and 16) */
++		scsi_cmd_init(udev, &sc, buffer, sizeof(buffer));
++		scsi_cmd_set(udev, &sc, 0, 0x28);
++		scsi_cmd_set(udev, &sc, 5, 0);
++		scsi_cmd_set(udev, &sc, 8, 32);
++		scsi_cmd_set(udev, &sc, 9, 0);
++		err = scsi_cmd_run(udev, &sc, fd, buffer, sizeof(buffer));
++		if ((err != 0)) {
++			info_scsi_cmd_err(udev, "READ FIRST 32 BLOCKS", err);
++			return -1;
++		}
++
++		/* if any non-zero data is found in sector 16 (iso and udf) or
++		 * eventually 0 (fat32 boot sector, ext2 superblock, etc), disc
++		 * is assumed non-blank */
++		result = 0;
++
++		for (block = 32768; block >= 0 && !result; block -= 32768) {
++			offset = block;
++			while (offset < (block + 2048) && !result) {
++				result = buffer [offset];
++				offset++;
++			}
++		}
++
++		if (!result) {
++			cd_media_state = media_status[0];
++			info(udev, "no data in blocks 0 or 16, assuming blank\n");
++		} else {
++			info(udev, "data in blocks 0 or 16, assuming complete\n");
++		}
++	}
++
++determined:
++	/* "other" is e. g. DVD-RAM, can't append sessions there; DVDs in
++	 * restricted overwrite mode can never append, only in sequential mode */
++	if ((header[2] & 3) < 2 && !cd_media_dvd_rw_ro)
+ 		cd_media_session_next = header[10] << 8 | header[5];
+ 	cd_media_session_count = header[9] << 8 | header[4];
+ 	cd_media_track_count = header[11] << 8 | header[6];
+@@ -710,13 +871,11 @@
+ 	if (cd_profiles(udev, fd) < 0)
+ 		goto print;
+ 
+-	/* get writable media state */
+-	if (cd_media_info(udev, fd) < 0)
+-		goto print;
+-
+ 	/* get session/track info */
+-	if (cd_media_toc(udev, fd) < 0)
+-		goto print;
++	cd_media_toc(udev, fd);
++
++	/* get writable media state */
++	cd_media_info(udev, fd);
+ 
+ print:
+ 	printf("ID_CDROM=1\n");
+@@ -810,14 +969,14 @@
+ 		printf("ID_CDROM_MEDIA_SESSION_NEXT=%d\n", cd_media_session_next);
+ 	if (cd_media_session_count > 0)
+ 		printf("ID_CDROM_MEDIA_SESSION_COUNT=%d\n", cd_media_session_count);
++	if (cd_media_session_count > 1 && cd_media_session_last_offset > 0)
++		printf("ID_CDROM_MEDIA_SESSION_LAST_OFFSET=%llu\n", cd_media_session_last_offset);
+ 	if (cd_media_track_count > 0)
+ 		printf("ID_CDROM_MEDIA_TRACK_COUNT=%d\n", cd_media_track_count);
+ 	if (cd_media_track_count_audio > 0)
+ 		printf("ID_CDROM_MEDIA_TRACK_COUNT_AUDIO=%d\n", cd_media_track_count_audio);
+ 	if (cd_media_track_count_data > 0)
+ 		printf("ID_CDROM_MEDIA_TRACK_COUNT_DATA=%d\n", cd_media_track_count_data);
+-	if (cd_media_session_last_offset > 0)
+-		printf("ID_CDROM_MEDIA_SESSION_LAST_OFFSET=%llu\n", cd_media_session_last_offset);
+ exit:
+ 	if (fd >= 0)
+ 		close(fd);
+
diff --git a/udev-145-floppy.patch b/udev-145-floppy.patch
new file mode 100644
index 0000000..1d5c45b
--- /dev/null
+++ b/udev-145-floppy.patch
@@ -0,0 +1,14 @@
+diff -up udev-145/rules/rules.d/50-udev-default.rules.floppy udev-145/rules/rules.d/50-udev-default.rules
+--- udev-145/rules/rules.d/50-udev-default.rules.floppy	2010-09-21 12:16:36.562750009 +0200
++++ udev-145/rules/rules.d/50-udev-default.rules	2010-09-21 12:17:48.201750065 +0200
+@@ -69,7 +69,9 @@ SUBSYSTEM=="block", GROUP="disk"
+ 
+ # floppy
+ KERNEL=="fd[0-9]", GROUP="floppy"
+-KERNEL=="fd[0-9]", ACTION=="add", ATTRS{cmos}=="?*", RUN+="create_floppy_devices -c -t $attr{cmos} -m %M -M 0640 -G floppy $root/%k"
++KERNEL=="fd[0-9]", ACTION=="add", ATTRS{cmos}=="?*", ENV{CMOS_TYPE}="$attr{cmos}", \
++	RUN+="create_floppy_devices -c -t $env{CMOS_TYPE} -m %M -M 0640 -G floppy $root/%k"
++
+ KERNEL=="hd*", SUBSYSTEMS=="ide", ATTRS{media}=="floppy", OPTIONS+="all_partitions"
+ 
+ # cdrom
diff --git a/udev-145-keymap-backport.patch b/udev-145-keymap-backport.patch
new file mode 100644
index 0000000..76b96a3
--- /dev/null
+++ b/udev-145-keymap-backport.patch
@@ -0,0 +1,4134 @@
+diff -urN udev-145-orig/extras/keymap/95-keyboard-force-release.rules udev-145/extras/keymap/95-keyboard-force-release.rules
+--- udev-145-orig/extras/keymap/95-keyboard-force-release.rules	1970-01-01 01:00:00.000000000 +0100
++++ udev-145/extras/keymap/95-keyboard-force-release.rules	2010-08-04 14:23:27.000000000 +0200
+@@ -0,0 +1,38 @@
++# Set model specific atkbd force_release quirk
++#
++# Several laptops have hotkeys which don't generate release events,
++# which can cause problems with software key repeat.
++# The atkbd driver has a quirk handler for generating synthetic
++# release events, which can be configured via sysfs since 2.6.32.
++# Simply add a file with a list of scancodes for your laptop model
++# in /lib/udev/keymaps, and add a rule here.
++# If the hotkeys also need a keymap assignment you can copy the
++# scancodes from the keymap file, otherwise you can run
++# /lib/udev/keymap -i /dev/input/eventX
++# on a Linux vt to find out.
++
++ACTION=="remove", GOTO="force_release_end"
++SUBSYSTEM!="serio", GOTO="force_release_end"
++KERNEL!="serio*", GOTO="force_release_end"
++DRIVER!="atkbd", GOTO="force_release_end"
++
++ENV{DMI_VENDOR}="$attr{[dmi/id]sys_vendor}"
++
++
++ENV{DMI_VENDOR}=="[sS][aA][mM][sS][uU][nN][gG]*", ATTR{[dmi/id]product_name}=="*E252*|*N120*|*N128*|*N130*|*N140*|*N148/N208*|*N150*|*N150/N210/N220*|*N220*|*N308*|*N310*|*N510*|*NB30*|*NC10/N110*|*ND10*|*Q210/P210*|*R410P*|*R425/R525*|*R428/P428*|*R460*|*R463*|*R468/R418*|*R480/R431/R481*|*R509*|*R518*|*R519/R719*|*R520/R522/R620*|*R528/R728*|*R530/R730*|*R530/R730/P590*|*R560*|*R580*|*R580/R590*|*R59/R60/R61*|*R59P/R60P/R61P*|*R710*|*R720*|*R780/R778*|*SR58P*|*SR700*|*SR70S/SR71S*|*SX22S*|*X118*|*X120*|*X460*", RUN+="keyboard-force-release.sh $devpath samsung-other"
++
++ENV{DMI_VENDOR}=="Dell Inc.", ATTR{[dmi/id]product_name}=="Studio 1557|Studio 1558", RUN+="keyboard-force-release.sh $devpath common-volume-keys"
++
++ENV{DMI_VENDOR}=="FUJITSU SIEMENS", ATTR{[dmi/id]product_name}=="AMILO Si 1848+u", RUN+="keyboard-force-release.sh $devpath common-volume-keys"
++
++ENV{DMI_VENDOR}=="FOXCONN", ATTR{[dmi/id]product_name}=="QBOOK", RUN+="keyboard-force-release.sh $devpath common-volume-keys"
++
++ENV{DMI_VENDOR}=="MTC", ATTR{[dmi/id]product_version}=="A0", RUN+="keyboard-force-release.sh $devpath common-volume-keys"
++
++ENV{DMI_VENDOR}=="PEGATRON CORP.", ATTR{[dmi/id]product_name}=="Spring Peak", RUN+="keyboard-force-release.sh $devpath common-volume-keys"
++
++ENV{DMI_VENDOR}=="TOSHIBA", ATTR{[dmi/id]product_name}=="Satellite U300|Satellite Pro U300|Satellite U305", RUN+="keyboard-force-release.sh $devpath common-volume-keys"
++
++ENV{DMI_VENDOR}=="Viooo Corporation", ATTR{[dmi/id]product_name}=="PT17", RUN+="keyboard-force-release.sh $devpath common-volume-keys"
++
++LABEL="force_release_end"
+diff -urN udev-145-orig/extras/keymap/95-keymap.rules udev-145/extras/keymap/95-keymap.rules
+--- udev-145-orig/extras/keymap/95-keymap.rules	2010-09-21 11:38:12.791750001 +0200
++++ udev-145/extras/keymap/95-keymap.rules	2010-09-21 12:02:18.722750001 +0200
+@@ -1,22 +1,52 @@
+-ACTION!="add", GOTO="keyboard_end"
++# Set model specific hotkey keycodes.
++#
++# Key map overrides can be specified by either giving scancode/keyname pairs
++# directly as keymap arguments (if there are just one or two to change), or as
++# a file name (in /lib/udev/keymaps), which has to contain scancode/keyname
++# pairs.
++
++ACTION=="remove", GOTO="keyboard_end"
+ SUBSYSTEM!="input", GOTO="keyboard_end"
+ KERNEL!="event*", GOTO="keyboard_end"
+ 
+-ENV{DMI_VENDOR}="$attr{[dmi/id]sys_vendor}"
+-ENV{DMI_VENDOR}=="", GOTO="keyboard_end"
++SUBSYSTEMS=="usb", ENV{ID_VENDOR}=="", IMPORT{program}="usb_id --export %p"
++SUBSYSTEMS=="usb", GOTO="keyboard_usbcheck"
++GOTO="keyboard_modulecheck"
++
++#
++# The following are external USB keyboards
++#
++
++LABEL="keyboard_usbcheck"
++
++ENV{ID_VENDOR}=="Logitech*", ATTRS{name}=="Logitech USB Multimedia Keyboard", RUN+="keymap $name logitech-wave"
++ENV{ID_VENDOR}=="Logitech*", ATTRS{name}=="Logitech USB Receiver", RUN+="keymap $name logitech-wave-cordless"
++# Logitech Cordless Wave Pro looks slightly weird; some hotkeys are coming through the mouse interface
++ENV{ID_VENDOR_ID}=="046d", ENV{ID_MODEL_ID}=="c529", ATTRS{name}=="Logitech USB Receiver", RUN+="keymap $name logitech-wave-pro-cordless"
++
++ENV{ID_VENDOR}=="Lite-On_Technology_Corp*", ATTRS{name}=="Lite-On Technology Corp. ThinkPad USB Keyboard with TrackPoint", RUN+="keymap $name lenovo-thinkpad-usb-keyboard-trackpoint"
++ENV{ID_VENDOR_ID}=="04b3", ENV{ID_MODEL_ID}=="301[89]", RUN+="keymap $name ibm-thinkpad-usb-keyboard-trackpoint"
++
++GOTO="keyboard_end"
+ 
+ #
+ # The following are exposed as separate input devices with low key codes, thus
+ # we need to check their input device product name
+ #
+ 
++LABEL="keyboard_modulecheck"
++
++ENV{DMI_VENDOR}="$attr{[dmi/id]sys_vendor}"
++ENV{DMI_VENDOR}=="", GOTO="keyboard_end"
++
+ ENV{DMI_VENDOR}=="IBM*", KERNELS=="input*", ATTRS{name}=="ThinkPad Extra Buttons", RUN+="keymap $name module-ibm"
+ ENV{DMI_VENDOR}=="LENOVO*", KERNELS=="input*", ATTRS{name}=="ThinkPad Extra Buttons", RUN+="keymap $name module-lenovo"
++ENV{DMI_VENDOR}=="LENOVO*", KERNELS=="input*", ATTRS{name}=="Lenovo ThinkPad SL Series extra buttons", RUN+="keymap $name 0x0E bluetooth"
+ ENV{DMI_VENDOR}=="ASUS*", KERNELS=="input*", ATTRS{name}=="Asus Extra Buttons", ATTR{[dmi/id]product_name}=="W3J", RUN+="keymap $name module-asus-w3j"
+ ENV{DMI_VENDOR}=="Sony*", KERNELS=="input*", ATTRS{name}=="Sony Vaio Keys", RUN+="keymap $name module-sony"
+ 
+ # Older Vaios have some different keys
+-ENV{DMI_VENDOR}=="Sony*", ATTR{[dmi/id]product_name}=="*PCG-C1*|*PCG-K25*|*PCG-F1*|*PCG-F2*|*PCG-F3*|*PCG-F4*|*PCG-F5*|*PCG-F6*|*PCG-FX*|*PCG-FRV*|*PCG-GR*|*PCG-TR*|*PCG-NV*|*PCG-Z*|*VGN-S360*|*VGN-SZ2HP_B*", ATTRS{name}=="Sony Vaio Keys", RUN+="keymap $name module-sony-old"
++ENV{DMI_VENDOR}=="Sony*", ATTR{[dmi/id]product_name}=="*PCG-C1*|*PCG-K25*|*PCG-F1*|*PCG-F2*|*PCG-F3*|*PCG-F4*|*PCG-F5*|*PCG-F6*|*PCG-FX*|*PCG-FRV*|*PCG-GR*|*PCG-TR*|*PCG-NV*|*PCG-Z*|*VGN-S360*", ATTRS{name}=="Sony Vaio Keys", RUN+="keymap $name module-sony-old"
+ 
+ #
+ # The following rules belong to standard i8042 AT keyboard with high key codes.
+@@ -28,26 +58,41 @@
+ LABEL="keyboard_vendorcheck"
+ 
+ ENV{DMI_VENDOR}=="Dell*", RUN+="keymap $name dell"
+-ENV{DMI_VENDOR}=="Compaq*", ATTR{[dmi/id]product_name}=="*E500*|*Evo N610c*|*Evo N600c*", RUN+="keymap $name compaq-e_evo"
++ENV{DMI_VENDOR}=="Dell*", ATTR{[dmi/id]product_name}=="Inspiron 910|Inspiron 1010|Inspiron 1011|Inspiron 1012|Inspiron 1110|Inspiron 1210", RUN+="keymap $name 0x84 wlan"
++
++ENV{DMI_VENDOR}=="Compaq*", ATTR{[dmi/id]product_name}=="*E500*|*Evo N*", RUN+="keymap $name compaq-e_evo"
+ 
+ ENV{DMI_VENDOR}=="LENOVO*", ATTR{[dmi/id]product_version}=="*3000*", RUN+="keymap $name lenovo-3000"
+ ENV{DMI_VENDOR}=="LENOVO*", ATTR{[dmi/id]product_version}=="ThinkPad X6*", ATTR{[dmi/id]product_version}=="* Tablet" RUN+="keymap $name lenovo-thinkpad_x6_tablet"
+ ENV{DMI_VENDOR}=="LENOVO*", ATTR{[dmi/id]product_version}=="ThinkPad X200 Tablet*", ATTR{[dmi/id]product_version}=="* Tablet" RUN+="keymap $name lenovo-thinkpad_x200_tablet"
++ENV{DMI_VENDOR}=="LENOVO*", ATTR{[dmi/id]product_version}=="*IdeaPad*", RUN+="keymap $name lenovo-ideapad"
++ENV{DMI_VENDOR}=="LENOVO*", ATTR{[dmi/id]product_name}=="S10-*", RUN+="keymap $name lenovo-ideapad"
++ENV{DMI_VENDOR}=="LENOVO", ATTR{[dmi/id]product_version}=="*IdeaPad Y550*", RUN+="keymap $name 0x95 media 0xA3 play"
+ 
+ ENV{DMI_VENDOR}=="Hewlett-Packard*", RUN+="keymap $name hewlett-packard"
+ ENV{DMI_VENDOR}=="Hewlett-Packard*", ATTR{[dmi/id]product_name}=="*[tT][aA][bB][lL][eE][tT]*", RUN+="keymap $name hewlett-packard-tablet"
+ ENV{DMI_VENDOR}=="Hewlett-Packard*", ATTR{[dmi/id]product_name}=="*[pP][aA][vV][iI][lL][iI][oO][nN]*", RUN+="keymap $name hewlett-packard-pavilion"
+-ENV{DMI_VENDOR}=="Hewlett-Packard*", ATTR{[dmi/id]product_name}=="*Compaq*|*EliteBook*", RUN+="keymap $name hewlett-packard-compaq_elitebook"
+-ENV{DMI_VENDOR}=="Hewlett-Packard*", ATTR{[dmi/id]product_name}=="*2510p*|*2530p*", RUN+="keymap $name hewlett-packard-2510p_2530p"
++ENV{DMI_VENDOR}=="Hewlett-Packard*", ATTR{[dmi/id]product_name}=="*Compaq*|*EliteBook*|*2230s*", RUN+="keymap $name hewlett-packard-compaq_elitebook"
++ENV{DMI_VENDOR}=="Hewlett-Packard*", ATTR{[dmi/id]product_name}=="*2510p*|*2530p*|HP G60 Notebook PC", RUN+="keymap $name hewlett-packard-2510p_2530p"
+ ENV{DMI_VENDOR}=="Hewlett-Packard*", ATTR{[dmi/id]product_name}=="*[tT][xX]2*", RUN+="keymap $name hewlett-packard-tx2"
++ENV{DMI_VENDOR}=="Hewlett-Packard", ATTR{[dmi/id]product_name}=="Presario 2100*", RUN+="keymap $name hewlett-packard-presario-2100"
++# HP Pavillion dv6315ea has empty DMI_VENDOR
++ATTR{[dmi/id]board_vendor}=="Quanta", ATTR{[dmi/id]board_name}=="30B7", ATTR{[dmi/id]board_version}=="65.2B", RUN+="keymap $name 0x88 media" # "quick play
++
++# Gateway clone of Acer Aspire One AOA110/AOA150
++ENV{DMI_VENDOR}=="Gateway*", ATTR{[dmi/id]product_name}=="*AOA1*", RUN+="keymap $name acer"
+ 
+ ENV{DMI_VENDOR}=="Acer*", RUN+="keymap $name acer"
+-ENV{DMI_VENDOR}=="Acer*", ATTR{[dmi/id]product_name}=="Extensa*", ATTR{[dmi/id]product_name}=="*5210*|*5220*|*5610*|*5620*|*5720*", RUN+="keymap $name acer-extensa_5xxx"
++ENV{DMI_VENDOR}=="Acer*", ATTR{[dmi/id]product_name}=="Extensa*", ATTR{[dmi/id]product_name}=="*5210*|*5220*|*5610*|*5620*|*5720*", RUN+="keymap $name 0xEE screenlock"
+ ENV{DMI_VENDOR}=="Acer*", ATTR{[dmi/id]product_name}=="TravelMate*C300*", RUN+="keymap $name acer-travelmate_c300"
+-ENV{DMI_VENDOR}=="Acer*", ATTR{[dmi/id]product_name}=="TravelMate*6292*", RUN+="keymap $name acer-travelmate_6292"
++ENV{DMI_VENDOR}=="Acer*", ATTR{[dmi/id]product_name}=="TravelMate*6292*|TravelMate*8471*|TravelMate*4720*|Aspire 1810T*|AO751h|AO531h", RUN+="keymap $name 0xD9 bluetooth"
++ENV{DMI_VENDOR}=="Acer*", ATTR{[dmi/id]product_name}=="TravelMate*4720*", RUN+="keymap $name 0xB2 www 0xEE screenlock"
++ENV{DMI_VENDOR}=="Acer*", ATTR{[dmi/id]product_name}=="TravelMate 6593|Aspire 1640", RUN+="keymap $name 0xB2 www 0xEE screenlock"
++ENV{DMI_VENDOR}=="Acer*", ATTR{[dmi/id]product_name}=="Aspire 6920", RUN+="keymap $name acer-aspire_6920"
+ ENV{DMI_VENDOR}=="Acer*", ATTR{[dmi/id]product_name}=="Aspire 5920G", RUN+="keymap $name acer-aspire_5920g"
++ENV{DMI_VENDOR}=="Acer*", ATTR{[dmi/id]product_name}=="Aspire 5720*", RUN+="keymap $name acer-aspire_5720"
+ 
+-ENV{DMI_VENDOR}=="*BenQ*", ATTR{[dmi/id]product_name}=="*Joybook R22*", RUN+="keymap $name benq-joybook_r22"
++ENV{DMI_VENDOR}=="*BenQ*", ATTR{[dmi/id]product_name}=="*Joybook R22*", RUN+="keymap $name 0x6E wlan"
+ 
+ ENV{DMI_VENDOR}=="FUJITSU*", ATTR{[dmi/id]product_name}=="*AMILO Pro V3205*", RUN+="keymap $name fujitsu-amilo_pro_v3205"
+ ENV{DMI_VENDOR}=="FUJITSU*", ATTR{[dmi/id]product_name}=="*AMILO Pa 2548*", RUN+="keymap $name fujitsu-amilo_pa_2548"
+@@ -55,6 +100,10 @@
+ ENV{DMI_VENDOR}=="FUJITSU*", ATTR{[dmi/id]product_name}=="*ESPRIMO Mobile V6*", RUN+="keymap $name fujitsu-esprimo_mobile_v6"
+ ENV{DMI_VENDOR}=="FUJITSU*", ATTR{[dmi/id]product_name}=="*AMILO Pro Edition V3505*", RUN+="keymap $name fujitsu-amilo_pro_edition_v3505"
+ ENV{DMI_VENDOR}=="FUJITSU*", ATTR{[dmi/id]product_name}=="*Amilo Si 1520*", RUN+="keymap $name fujitsu-amilo_si_1520"
++ENV{DMI_VENDOR}=="FUJITSU*", ATTR{[dmi/id]product_name}=="AMILO*M*", RUN+="keymap $name 0x97 prog2 0x9F prog1"
++ENV{DMI_VENDOR}=="FUJITSU*", ATTR{[dmi/id]product_name}=="Amilo Li 1718", RUN+="keymap $name 0xD6 wlan"
++
++ENV{DMI_VENDOR}=="LG*", ATTR{[dmi/id]product_name}=="*X110*", RUN+="keymap $name lg-x110"
+ 
+ ENV{DMI_VENDOR}=="MEDION*", ATTR{[dmi/id]product_name}=="*FID2060*", RUN+="keymap $name medion-fid2060"
+ ENV{DMI_VENDOR}=="MEDIONNB", ATTR{[dmi/id]product_name}=="A555*", RUN+="keymap $name medionnb-a555"
+@@ -70,15 +119,28 @@
+ 
+ ENV{DMI_VENDOR}=="MAXDATA", ATTR{[dmi/id]product_name}=="Pro 7000*", RUN+="keymap $name maxdata-pro_7000"
+ 
+-ENV{DMI_VENDOR}=="[sS][aA][mM][sS][uU][nN][gG]*", ATTR{[dmi/id]product_name}=="*NC10*|*SP55S*|*SQ45S70S*|*SX60P*|*SX30S*|*R59P/R60P/R61P*|*Q210*|*Q310*|*X05*|*P560*|*R560*", RUN+="keymap $name samsung-other"
++ENV{DMI_VENDOR}=="[sS][aA][mM][sS][uU][nN][gG]*", RUN+="keymap $name samsung-other"
+ ENV{DMI_VENDOR}=="[sS][aA][mM][sS][uU][nN][gG]*", ATTR{[dmi/id]product_name}=="*SX20S*", RUN+="keymap $name samsung-sx20s"
+ ENV{DMI_VENDOR}=="[sS][aA][mM][sS][uU][nN][gG]*", ATTR{[dmi/id]product_name}=="SQ1US", RUN+="keymap $name samsung-sq1us"
+ 
+ ENV{DMI_VENDOR}=="TOSHIBA", ATTR{[dmi/id]product_name}=="SATELLITE A100", RUN+="keymap $name toshiba-satellite_a100"
+ ENV{DMI_VENDOR}=="TOSHIBA", ATTR{[dmi/id]product_name}=="Satellite A110", RUN+="keymap $name toshiba-satellite_a110"
++ENV{DMI_VENDOR}=="TOSHIBA", ATTR{[dmi/id]product_name}=="Satellite M30X", RUN+="keymap $name toshiba-satellite_m30x"
+ 
+ ENV{DMI_VENDOR}=="OQO Inc.*", ATTR{[dmi/id]product_name}=="OQO Model 2*", RUN+="keymap $name oqo-model2"
+ 
++ENV{DMI_VENDOR}=="ONKYO CORPORATION", ATTR{[dmi/id]product_name}=="ONKYOPC", RUN+="keymap $name onkyo"
++
+ ENV{DMI_VENDOR}=="ASUS", RUN+="keymap $name asus"
+ 
++ENV{DMI_VENDOR}=="VIA", ATTR{[dmi/id]product_name}=="K8N800", ATTR{[dmi/id]product_version}=="VT8204B", RUN+="keymap $name 0x81 prog1"
++
++ENV{DMI_VENDOR}=="Zepto", ATTR{[dmi/id]product_name}=="Znote", ATTR{[dmi/id]product_version}=="62*|63*", RUN+="keymap $name zepto-znote"
++
++ENV{DMI_VENDOR}=="Everex", ATTR{[dmi/id]product_name}=="XT5000*", RUN+="keymap $name everex-xt5000"
++
++ENV{DMI_VENDOR}=="COMPAL", ATTR{[dmi/id]product_name}=="HEL80I", RUN+="keymap $name 0x84 wlan"
++
++ENV{DMI_VENDOR}=="OLPC", ATTR{[dmi/id]product_name}=="XO", RUN+="keymap $name olpc-xo"
++
+ LABEL="keyboard_end"
+diff -urN udev-145-orig/extras/keymap/check-keymaps.sh udev-145/extras/keymap/check-keymaps.sh
+--- udev-145-orig/extras/keymap/check-keymaps.sh	2009-05-16 16:06:31.000000000 +0200
++++ udev-145/extras/keymap/check-keymaps.sh	2010-06-11 10:52:56.000000000 +0200
+@@ -1,29 +1,37 @@
+ #!/bin/bash
+ 
+ # check that all key names in keymaps/* are known in <linux/input.h>
+-KEYLIST=./keys.txt
+-RULES=95-keymap.rules
++# and that all key maps listed in the rules are valid and present in
++# Makefile.am
++SRCDIR=$1
++KEYLIST=$2
++KEYMAPS_DIR=$SRCDIR/extras/keymap/keymaps #extras/keymap/keymaps
++RULES=$SRCDIR/extras/keymap/95-keymap.rules
+ 
+ [ -e "$KEYLIST" ] || {
+     echo "need $KEYLIST please build first" >&2
+     exit 1
+ }
+ 
+-missing=$(join -v 2 <(awk '{print tolower(substr($1,5))}' $KEYLIST | sort -u) <(awk '{print $2}' keymaps/*|sort -u))
++missing=$(join -v 2 <(awk '{print tolower(substr($1,5))}' $KEYLIST | sort -u) \
++                    <(grep -hv '^#' ${KEYMAPS_DIR}/*| awk '{print $2}' | sort -u))
+ [ -z "$missing" ] || {
+-    echo "ERROR: unknown key names in keymaps/*:" >&2
++    echo "ERROR: unknown key names in extras/keymap/keymaps/*:" >&2
+     echo "$missing" >&2
+     exit 1
+ }
+ 
+ # check that all maps referred to in $RULES exist
+-maps=$(sed -rn '/keymap \$name/ { s/^.*\$name ([^"]+).*$/\1/; p }' $RULES)
++maps=$(sed -rn '/keymap \$name/ { s/^.*\$name ([^"[:space:]]+).*$/\1/; p }' $RULES)
+ for m in $maps; do
+-    [ -e keymaps/$m ] || {
++    # ignore inline mappings
++    [ "$m" = "${m#0x}" ] || continue
++
++    [ -e ${KEYMAPS_DIR}/$m ] || {
+ 	echo "ERROR: unknown map name in $RULES: $m" >&2
+ 	exit 1
+     }
+-    grep -q "keymaps/$m\>" Makefile.am || {
++    grep -q "extras/keymap/keymaps/$m\>" $SRCDIR/Makefile.am || {
+ 	echo "ERROR: map file $m is not added to Makefile.am" >&2
+ 	exit 1
+     }
+diff -urN udev-145-orig/extras/keymap/.deps/extras_keymap_keymap-keymap.Po udev-145/extras/keymap/.deps/extras_keymap_keymap-keymap.Po
+--- udev-145-orig/extras/keymap/.deps/extras_keymap_keymap-keymap.Po	1970-01-01 01:00:00.000000000 +0100
++++ udev-145/extras/keymap/.deps/extras_keymap_keymap-keymap.Po	2010-08-11 15:14:22.000000000 +0200
+@@ -0,0 +1,208 @@
++extras/keymap/extras_keymap_keymap-keymap.o: extras/keymap/keymap.c \
++ config.h /usr/include/stdio.h /usr/include/features.h \
++ /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h \
++ /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h \
++ /usr/lib/gcc/x86_64-redhat-linux/4.5.0/include/stddef.h \
++ /usr/include/bits/types.h /usr/include/bits/typesizes.h \
++ /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \
++ /usr/lib/gcc/x86_64-redhat-linux/4.5.0/include/stdarg.h \
++ /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \
++ /usr/include/bits/stdio.h /usr/include/stdlib.h \
++ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \
++ /usr/include/endian.h /usr/include/bits/endian.h \
++ /usr/include/bits/byteswap.h /usr/include/xlocale.h \
++ /usr/include/sys/types.h /usr/include/time.h /usr/include/sys/select.h \
++ /usr/include/bits/select.h /usr/include/bits/sigset.h \
++ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \
++ /usr/include/bits/pthreadtypes.h /usr/include/alloca.h \
++ /usr/include/string.h /usr/include/bits/string.h \
++ /usr/include/bits/string2.h /usr/include/ctype.h /usr/include/unistd.h \
++ /usr/include/bits/posix_opt.h /usr/include/bits/environments.h \
++ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/errno.h \
++ /usr/include/bits/errno.h /usr/include/linux/errno.h \
++ /usr/include/asm/errno.h /usr/include/asm-generic/errno.h \
++ /usr/include/asm-generic/errno-base.h \
++ /usr/lib/gcc/x86_64-redhat-linux/4.5.0/include/limits.h \
++ /usr/lib/gcc/x86_64-redhat-linux/4.5.0/include/syslimits.h \
++ /usr/include/limits.h /usr/include/bits/posix1_lim.h \
++ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \
++ /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \
++ /usr/include/fcntl.h /usr/include/bits/fcntl.h /usr/include/bits/uio.h \
++ /usr/include/bits/stat.h /usr/include/sys/ioctl.h \
++ /usr/include/bits/ioctls.h /usr/include/asm/ioctls.h \
++ /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h \
++ /usr/include/asm/ioctl.h /usr/include/asm-generic/ioctl.h \
++ /usr/include/bits/ioctl-types.h /usr/include/sys/ttydefaults.h \
++ /usr/include/linux/input.h /usr/include/sys/time.h \
++ /usr/include/linux/types.h /usr/include/asm/types.h \
++ /usr/include/asm-generic/types.h /usr/include/asm-generic/int-ll64.h \
++ /usr/include/asm/bitsperlong.h /usr/include/asm-generic/bitsperlong.h \
++ /usr/include/linux/posix_types.h /usr/include/linux/stddef.h \
++ /usr/include/asm/posix_types.h /usr/include/asm/posix_types_64.h \
++ extras/keymap/keys-from-name.h extras/keymap/keys-to-name.h
++
++config.h:
++
++/usr/include/stdio.h:
++
++/usr/include/features.h:
++
++/usr/include/sys/cdefs.h:
++
++/usr/include/bits/wordsize.h:
++
++/usr/include/gnu/stubs.h:
++
++/usr/include/gnu/stubs-64.h:
++
++/usr/lib/gcc/x86_64-redhat-linux/4.5.0/include/stddef.h:
++
++/usr/include/bits/types.h:
++
++/usr/include/bits/typesizes.h:
++
++/usr/include/libio.h:
++
++/usr/include/_G_config.h:
++
++/usr/include/wchar.h:
++
++/usr/lib/gcc/x86_64-redhat-linux/4.5.0/include/stdarg.h:
++
++/usr/include/bits/stdio_lim.h:
++
++/usr/include/bits/sys_errlist.h:
++
++/usr/include/bits/stdio.h:
++
++/usr/include/stdlib.h:
++
++/usr/include/bits/waitflags.h:
++
++/usr/include/bits/waitstatus.h:
++
++/usr/include/endian.h:
++
++/usr/include/bits/endian.h:
++
++/usr/include/bits/byteswap.h:
++
++/usr/include/xlocale.h:
++
++/usr/include/sys/types.h:
++
++/usr/include/time.h:
++
++/usr/include/sys/select.h:
++
++/usr/include/bits/select.h:
++
++/usr/include/bits/sigset.h:
++
++/usr/include/bits/time.h:
++
++/usr/include/sys/sysmacros.h:
++
++/usr/include/bits/pthreadtypes.h:
++
++/usr/include/alloca.h:
++
++/usr/include/string.h:
++
++/usr/include/bits/string.h:
++
++/usr/include/bits/string2.h:
++
++/usr/include/ctype.h:
++
++/usr/include/unistd.h:
++
++/usr/include/bits/posix_opt.h:
++
++/usr/include/bits/environments.h:
++
++/usr/include/bits/confname.h:
++
++/usr/include/getopt.h:
++
++/usr/include/errno.h:
++
++/usr/include/bits/errno.h:
++
++/usr/include/linux/errno.h:
++
++/usr/include/asm/errno.h:
++
++/usr/include/asm-generic/errno.h:
++
++/usr/include/asm-generic/errno-base.h:
++
++/usr/lib/gcc/x86_64-redhat-linux/4.5.0/include/limits.h:
++
++/usr/lib/gcc/x86_64-redhat-linux/4.5.0/include/syslimits.h:
++
++/usr/include/limits.h:
++
++/usr/include/bits/posix1_lim.h:
++
++/usr/include/bits/local_lim.h:
++
++/usr/include/linux/limits.h:
++
++/usr/include/bits/posix2_lim.h:
++
++/usr/include/bits/xopen_lim.h:
++
++/usr/include/fcntl.h:
++
++/usr/include/bits/fcntl.h:
++
++/usr/include/bits/uio.h:
++
++/usr/include/bits/stat.h:
++
++/usr/include/sys/ioctl.h:
++
++/usr/include/bits/ioctls.h:
++
++/usr/include/asm/ioctls.h:
++
++/usr/include/asm-generic/ioctls.h:
++
++/usr/include/linux/ioctl.h:
++
++/usr/include/asm/ioctl.h:
++
++/usr/include/asm-generic/ioctl.h:
++
++/usr/include/bits/ioctl-types.h:
++
++/usr/include/sys/ttydefaults.h:
++
++/usr/include/linux/input.h:
++
++/usr/include/sys/time.h:
++
++/usr/include/linux/types.h:
++
++/usr/include/asm/types.h:
++
++/usr/include/asm-generic/types.h:
++
++/usr/include/asm-generic/int-ll64.h:
++
++/usr/include/asm/bitsperlong.h:
++
++/usr/include/asm-generic/bitsperlong.h:
++
++/usr/include/linux/posix_types.h:
++
++/usr/include/linux/stddef.h:
++
++/usr/include/asm/posix_types.h:
++
++/usr/include/asm/posix_types_64.h:
++
++extras/keymap/keys-from-name.h:
++
++extras/keymap/keys-to-name.h:
+Binary files udev-145-orig/extras/keymap/extras_keymap_keymap-keymap.o and udev-145/extras/keymap/extras_keymap_keymap-keymap.o differ
+diff -urN udev-145-orig/extras/keymap/findkeyboards udev-145/extras/keymap/findkeyboards
+--- udev-145-orig/extras/keymap/findkeyboards	2009-05-16 16:06:31.000000000 +0200
++++ udev-145/extras/keymap/findkeyboards	2010-07-08 11:37:47.000000000 +0200
+@@ -17,21 +17,25 @@
+ 
+ # print a list of input devices which are keyboard-like
+ keyboard_devices() {
+-    input_devs=`udevadm trigger --dry-run --verbose --subsystem-match=input --attr-match=dev`
+-
+     # standard AT keyboard
+-    for dev in $input_devs; do
+-        info=`udevadm info --attribute-walk --path=$dev`
+-        
+-        if echo "$info" | grep -q 'DRIVERS=="atkbd"'; then
++    for dev in `udevadm trigger --dry-run --verbose --property-match=ID_INPUT_KEYBOARD=1`; do
++        walk=`udevadm info --attribute-walk --path=$dev`
++	env=`udevadm info --query=env --path=$dev`
++        if echo "$walk" | grep -q 'DRIVERS=="atkbd"'; then
+             echo -n 'AT keyboard: '
+-            udevadm info --query=name --path=$dev
++	elif echo "$env" | grep -q '^ID_USB_DRIVER=usbhid'; then
++            echo -n 'USB keyboard: '
++	else
++	    echo -n 'Unknown type: '
+         fi
++	udevadm info --query=name --path=$dev
+     done
+ 
+     # modules
+     module=`udevadm trigger --verbose --dry-run --subsystem-match=input --attr-match=name='*Extra Buttons'`
+     module="$module
++`udevadm trigger --verbose --dry-run --subsystem-match=input --attr-match=name='*extra buttons'`"
++    module="$module
+ `udevadm trigger --verbose --dry-run --subsystem-match=input --attr-match=name='Sony Vaio Keys'`"
+     for m in $module; do
+ 	evdev=`ls -d $m/event* 2>/dev/null`
+diff -urN udev-145-orig/extras/keymap/force-release-maps/common-volume-keys udev-145/extras/keymap/force-release-maps/common-volume-keys
+--- udev-145-orig/extras/keymap/force-release-maps/common-volume-keys	1970-01-01 01:00:00.000000000 +0100
++++ udev-145/extras/keymap/force-release-maps/common-volume-keys	2010-06-11 10:52:56.000000000 +0200
+@@ -0,0 +1,3 @@
++0xa0 #mute
++0xae #volume down
++0xb0 #volume up
+diff -urN udev-145-orig/extras/keymap/force-release-maps/samsung-other udev-145/extras/keymap/force-release-maps/samsung-other
+--- udev-145-orig/extras/keymap/force-release-maps/samsung-other	1970-01-01 01:00:00.000000000 +0100
++++ udev-145/extras/keymap/force-release-maps/samsung-other	2010-06-11 10:52:56.000000000 +0200
+@@ -0,0 +1,10 @@
++# list of scancodes (hex or decimal), optional comment
++0x82 # Fn+F4 CRT/LCD
++0x83 # Fn+F2 battery
++0x84 # Fn+F5 backlight on/off
++0x86 # Fn+F9 WLAN
++0x88 # Fn-Up brightness up
++0x89 # Fn-Down brightness down
++0xB3 # Fn+F8 switch power mode (battery/dynamic/performance)
++0xF7 # Fn+F10 Touchpad on
++0xF9 # Fn+F10 Touchpad off
+diff -urN udev-145-orig/extras/keymap/.gitignore udev-145/extras/keymap/.gitignore
+--- udev-145-orig/extras/keymap/.gitignore	1970-01-01 01:00:00.000000000 +0100
++++ udev-145/extras/keymap/.gitignore	2010-03-18 16:44:52.000000000 +0100
+@@ -0,0 +1,6 @@
++keymap
++keys-from-name.gperf
++keys-from-name.h
++keys-to-name.h
++keys.txt
++
+diff -urN udev-145-orig/extras/keymap/keyboard-force-release.sh udev-145/extras/keymap/keyboard-force-release.sh
+--- udev-145-orig/extras/keymap/keyboard-force-release.sh	1970-01-01 01:00:00.000000000 +0100
++++ udev-145/extras/keymap/keyboard-force-release.sh	2010-06-11 10:52:56.000000000 +0200
+@@ -0,0 +1,22 @@
++#!/bin/sh -e
++# read list of scancodes, convert hex to decimal and
++# append to the atkbd force_release sysfs attribute
++# $1 sysfs devpath for serioX
++# $2 file with scancode list (hex or dec)
++
++case "$2" in
++	/*) scf="$2" ;;
++	*)  scf="/lib/udev/keymaps/force-release/$2" ;;
++esac
++
++read attr <"/sys/$1/force_release"
++while read scancode dummy; do
++	case "$scancode" in
++		\#*) ;;
++		*)
++			scancode=$(($scancode))
++			attr="$attr${attr:+,}$scancode"
++			;;
++	esac
++done <"$scf"
++echo "$attr" >"/sys/$1/force_release"
+Binary files udev-145-orig/extras/keymap/keymap and udev-145/extras/keymap/keymap differ
+diff -urN udev-145-orig/extras/keymap/keymap.c udev-145/extras/keymap/keymap.c
+--- udev-145-orig/extras/keymap/keymap.c	2009-06-17 16:14:33.000000000 +0200
++++ udev-145/extras/keymap/keymap.c	2010-06-11 10:52:56.000000000 +0200
+@@ -32,6 +32,7 @@
+ #include <fcntl.h>
+ #include <getopt.h>
+ #include <sys/ioctl.h>
++#include <linux/limits.h>
+ #include <linux/input.h>
+ 
+ const struct key* lookup_key (const char *str, unsigned int len);
+@@ -153,6 +154,34 @@
+ 	return r;
+ }
+ 
++static void set_key(int fd, const char* scancode_str, const char* keyname)
++{
++	unsigned scancode;
++	char *endptr;
++	char t[105] = "KEY_UNKNOWN";
++	const struct key *k;
++
++	scancode = (unsigned) strtol(scancode_str, &endptr, 0);
++	if (*endptr != '\0') {
++		fprintf(stderr, "ERROR: Invalid scancode\n");
++		exit(1);
++	}
++
++	snprintf(t, sizeof(t), "KEY_%s", keyname);
++
++	if (!(k = lookup_key(t, strlen(t)))) {
++		fprintf(stderr, "ERROR: Unknown key name '%s'\n", keyname);
++		exit(1);
++	}
++
++	if (evdev_set_keycode(fd, scancode, k->id) < 0)
++		fprintf(stderr, "setting scancode 0x%2X to key code %i failed\n", 
++			scancode, k->id);
++	else
++		printf("setting scancode 0x%2X to key code %i\n", 
++			scancode, k->id);
++}
++
+ static int merge_table(int fd, const char *filename) {
+ 	int r = 0;
+ 	int line = 0;
+@@ -219,7 +248,7 @@
+ {
+ 	static char result[PATH_MAX];
+ 
+-	/* If keymap file is given without a path, assume udev diretory; must end with '/' * */
++	/* If keymap file is given without a path, assume udev directory; must end with '/' * */
+ 	if (!strchr(path, '/')) {
+ 		snprintf(result, sizeof(result), "%s%s", LIBEXECDIR "/keymaps/", path);
+ 		return result;
+@@ -230,15 +259,22 @@
+ static void print_key(struct input_event *event)
+ {
+ 	static int cur_scancode = 0;
++	const char *keyname;
+ 
+ 	/* save scan code for next EV_KEY event */
+ 	if (event->type == EV_MSC && event->code == MSC_SCAN)
+ 	    cur_scancode = event->value;
+ 
+ 	/* key press */
+-	if (event->type == EV_KEY && event->value)
+-	    printf("scan code: 0x%02X   key code: %s\n", cur_scancode,
+-		    format_keyname(key_names[event->code]));
++	if (event->type == EV_KEY && event->value) {
++		keyname = key_names[event->code];
++		if (keyname != NULL)
++			printf("scan code: 0x%02X   key code: %s\n", cur_scancode,
++			    format_keyname(key_names[event->code]));
++		else
++			printf("scan code: 0x%02X   key code: %03X\n", cur_scancode,
++			    event->code);
++	}
+ }
+ 
+ static void interactive(int fd)
+@@ -272,6 +308,20 @@
+ 	ioctl(fd, EVIOCGRAB, 0);
+ }
+ 
++static void help(int error)
++{
++	const char* h = "Usage: keymap <event device> [<map file>]\n"
++	                "       keymap <event device> scancode keyname [...]\n"
++		        "       keymap -i <event device>\n";
++	if (error) {
++		fputs(h, stderr);
++		exit(2);
++	} else {
++		fputs(h, stdout);
++		exit(0);
++	}
++}
++
+ int main(int argc, char **argv)
+ {
+ 	static const struct option options[] = {
+@@ -281,6 +331,7 @@
+ 	};
+ 	int fd = -1;
+ 	int opt_interactive = 0;
++	int i;
+ 
+ 	while (1) {
+ 		int option;
+@@ -291,8 +342,7 @@
+ 
+ 		switch (option) {
+ 		case 'h':
+-			printf("Usage: keymap <event device> [<map file>]\n\n");
+-			return 0;
++		        help(0);
+ 
+ 		case 'i':
+ 			opt_interactive = 1;
+@@ -302,21 +352,35 @@
+ 		}
+ 	}
+ 
+-	if (argc < optind+1 || argc > optind+2) {
+-		fprintf(stderr, "Usage: keymap <event device> [<map file>]\n\n");
+-		return 2;
+-	}
++	if (argc < optind+1)
++		help (1);
+ 
+ 	if ((fd = evdev_open(argv[optind])) < 0)
+ 		return 3;
+ 
+-	if (argc == optind+2)
+-		merge_table(fd, default_keymap_path(argv[optind+1]));
+-	else {
++	/* one argument (device): dump or interactive */
++	if (argc == optind+1) {
+ 		if (opt_interactive)
+ 			interactive(fd);
+ 		else
+ 			dump_table(fd);
++		return 0;
+ 	}
+-	return 0;
++
++	/* two arguments (device, mapfile): set map file */
++	if (argc == optind+2) {
++		merge_table(fd, default_keymap_path(argv[optind+1]));
++		return 0;
++	}
++
++	/* more arguments (device, scancode/keyname pairs): set keys directly */
++	if ((argc - optind - 1) % 2 == 0) {
++		for (i = optind+1; i < argc; i += 2)
++			set_key(fd, argv[i], argv[i+1]);	
++		return 0;
++	}
++
++	/* invalid number of arguments */
++	help(1);
++	return 1; /* not reached */
+ }
+Binary files udev-145-orig/extras/keymap/keymap-keymap.o and udev-145/extras/keymap/keymap-keymap.o differ
+diff -urN udev-145-orig/extras/keymap/keymaps/acer-aspire_5720 udev-145/extras/keymap/keymaps/acer-aspire_5720
+--- udev-145-orig/extras/keymap/keymaps/acer-aspire_5720	1970-01-01 01:00:00.000000000 +0100
++++ udev-145/extras/keymap/keymaps/acer-aspire_5720	2010-03-18 16:44:52.000000000 +0100
+@@ -0,0 +1,5 @@
++0x84 bluetooth  # sent when bluetooth module missing, and key pressed
++0x92 media	# acer arcade
++0xD4 bluetooth  # bluetooth on
++0xD9 bluetooth  # bluetooth off
++
+diff -urN udev-145-orig/extras/keymap/keymaps/acer-aspire_6920 udev-145/extras/keymap/keymaps/acer-aspire_6920
+--- udev-145-orig/extras/keymap/keymaps/acer-aspire_6920	1970-01-01 01:00:00.000000000 +0100
++++ udev-145/extras/keymap/keymaps/acer-aspire_6920	2010-03-18 16:44:52.000000000 +0100
+@@ -0,0 +1,5 @@
++0xD9 bluetooth # (toggle) on-to-off
++0x92 media
++0x9E back
++0x83 rewind
++0x89 fastforward
+diff -urN udev-145-orig/extras/keymap/keymaps/dell udev-145/extras/keymap/keymaps/dell
+--- udev-145-orig/extras/keymap/keymaps/dell	2009-05-09 12:41:34.000000000 +0200
++++ udev-145/extras/keymap/keymaps/dell	2010-06-11 10:52:56.000000000 +0200
+@@ -21,7 +21,9 @@
+ 0x99 nextsong # Front panel next song
+ 0x9A setup # Tablet tools button
+ 0x9B switchvideomode # Display Toggle button
++0x9E f22 #touchpad toggle
+ 0xA2 playpause # Front panel play/pause
+ 0xA4 stopcd # Front panel stop
+-0xD8 screenlock # FIXME: Tablet lock button
+ 0xED media # MediaDirect button
++0xD8 screenlock # FIXME: Tablet lock button
++0xD9 f22 # touchpad toggle
+diff -urN udev-145-orig/extras/keymap/keymaps/everex-xt5000 udev-145/extras/keymap/keymaps/everex-xt5000
+--- udev-145-orig/extras/keymap/keymaps/everex-xt5000	1970-01-01 01:00:00.000000000 +0100
++++ udev-145/extras/keymap/keymaps/everex-xt5000	2010-03-18 16:44:52.000000000 +0100
+@@ -0,0 +1,7 @@
++0x5C media
++0x65 f22 # Fn+F5 Touchpad toggle
++0x67 prog3 # Fan Speed Control button
++0x6F brightnessup
++0x7F brightnessdown
++0xB2 www
++0xEC mail
+diff -urN udev-145-orig/extras/keymap/keymaps/hewlett-packard-presario-2100 udev-145/extras/keymap/keymaps/hewlett-packard-presario-2100
+--- udev-145-orig/extras/keymap/keymaps/hewlett-packard-presario-2100	1970-01-01 01:00:00.000000000 +0100
++++ udev-145/extras/keymap/keymaps/hewlett-packard-presario-2100	2010-03-18 16:44:52.000000000 +0100
+@@ -0,0 +1,3 @@
++0xF0 help
++0xF1 screenlock
++0xF3 search
+diff -urN udev-145-orig/extras/keymap/keymaps/ibm-thinkpad-usb-keyboard-trackpoint udev-145/extras/keymap/keymaps/ibm-thinkpad-usb-keyboard-trackpoint
+--- udev-145-orig/extras/keymap/keymaps/ibm-thinkpad-usb-keyboard-trackpoint	1970-01-01 01:00:00.000000000 +0100
++++ udev-145/extras/keymap/keymaps/ibm-thinkpad-usb-keyboard-trackpoint	2010-07-07 10:58:29.000000000 +0200
+@@ -0,0 +1,7 @@
++0x900f0 screenlock
++0x900f1 wlan
++0x900f2 switchvideomode
++0x900f3 suspend
++0x900f4 brightnessup
++0x900f5 brightnessdown
++0x900f8 zoom
+diff -urN udev-145-orig/extras/keymap/keymaps/lenovo-ideapad udev-145/extras/keymap/keymaps/lenovo-ideapad
+--- udev-145-orig/extras/keymap/keymaps/lenovo-ideapad	1970-01-01 01:00:00.000000000 +0100
++++ udev-145/extras/keymap/keymaps/lenovo-ideapad	2010-08-17 16:31:27.000000000 +0200
+@@ -0,0 +1,7 @@
++# Key codes observed on S10-3, assumed valid on other IdeaPad models
++0x81 rfkill			# does nothing in BIOS
++0x83 display_off		# BIOS toggles screen state
++0xB9 brightnessup		# does nothing in BIOS
++0xBA brightnessdown		# does nothing in BIOS
++0xF1 camera			# BIOS toggles camera power
++0xf2 unknown			# trackpad enable/disable (does nothing in BIOS)
+diff -urN udev-145-orig/extras/keymap/keymaps/lenovo-thinkpad-usb-keyboard-trackpoint udev-145/extras/keymap/keymaps/lenovo-thinkpad-usb-keyboard-trackpoint
+--- udev-145-orig/extras/keymap/keymaps/lenovo-thinkpad-usb-keyboard-trackpoint	1970-01-01 01:00:00.000000000 +0100
++++ udev-145/extras/keymap/keymaps/lenovo-thinkpad-usb-keyboard-trackpoint	2010-06-11 10:52:56.000000000 +0200
+@@ -0,0 +1,13 @@
++0x90012 screenlock # Fn+F2
++0x90013 battery # Fn+F3
++0x90014 wlan # Fn+F5
++0x90016 switchvideomode # Fn+F7
++0x90017 f22 # Fn+F8  touchpadtoggle
++0x90019 suspend # Fn+F12
++0x9001A brightnessup # Fn+Home
++0x9001B brightnessdown # Fn+End
++0x9001D zoom # Fn+Space
++0x90011 prog1 # Thinkvantage button
++
++0x90015 camera # Fn+F6 headset/camera VoIP key  ??
++# 0x90010 # Microphone mute button  ??
+diff -urN udev-145-orig/extras/keymap/keymaps/lg-x110 udev-145/extras/keymap/keymaps/lg-x110
+--- udev-145-orig/extras/keymap/keymaps/lg-x110	1970-01-01 01:00:00.000000000 +0100
++++ udev-145/extras/keymap/keymaps/lg-x110	2010-06-11 10:52:56.000000000 +0200
+@@ -0,0 +1,12 @@
++0xA0 mute # Fn-F9
++0xAE volumedown # Fn-Left
++0xAF search # Fn-F3
++0xB0 volumeup # Fn-Right
++0xB1 battery # Fn-F10 Info
++0xB3 suspend # Fn-F12
++0xDF sleep # Fn-F4
++# 0xE2 bluetooth # satellite dish2
++0xE4 f22 # Fn-F5   Touchpad disable
++0xF6 wlan # Fn-F6
++0xF7 reserved # brightnessdown # Fn-Down
++0xF8 reserved # brightnessup # Fn-Up
+\ No newline at end of file
+diff -urN udev-145-orig/extras/keymap/keymaps/logitech-wave udev-145/extras/keymap/keymaps/logitech-wave
+--- udev-145-orig/extras/keymap/keymaps/logitech-wave	1970-01-01 01:00:00.000000000 +0100
++++ udev-145/extras/keymap/keymaps/logitech-wave	2010-03-18 16:44:52.000000000 +0100
+@@ -0,0 +1,16 @@
++0x9001C scale #expo
++0x9001F zoomout #zoom out
++0x90020 zoomin #zoom in
++0x9003D prog1 #gadget
++0x90005 camera #camera
++0x90018 media #media center
++0x90041 wordprocessor #fn+f1 (word)
++0x90042 spreadsheet #fn+f2 (excel)
++0x90043 calendar #fn+f3 (calendar)
++0x90044 prog2 #fn+f4 (program a)
++0x90045 prog3 #fn+f5 (program b)
++0x90046 prog4 #fn+f6 (program c)
++0x90048 messenger #fn+f8 (msn messenger)
++0x9002D find #fn+f10 (search www)
++0x9004B search #fn+f11 (search pc)
++0x9004C ejectclosecd #fn+f12 (eject)
+diff -urN udev-145-orig/extras/keymap/keymaps/logitech-wave-cordless udev-145/extras/keymap/keymaps/logitech-wave-cordless
+--- udev-145-orig/extras/keymap/keymaps/logitech-wave-cordless	1970-01-01 01:00:00.000000000 +0100
++++ udev-145/extras/keymap/keymaps/logitech-wave-cordless	2010-06-11 10:52:56.000000000 +0200
+@@ -0,0 +1,15 @@
++0xD4 zoomin
++0xCC zoomout
++0xC0183 media
++0xC1005 camera
++0xC101F zoomout
++0xC1020 zoomin
++0xC1041 wordprocessor
++0xC1042 spreadsheet
++0xC1043 calendar
++0xC1044 prog2 #fn+f4 (program a)
++0xC1045 prog3 #fn+f5 (program b)
++0xC1046 prog4 #fn+f6 (program c)
++0xC1048 messenger
++0xC104A find #fn+f10 (search www)
++0xC104C ejectclosecd
+diff -urN udev-145-orig/extras/keymap/keymaps/logitech-wave-pro-cordless udev-145/extras/keymap/keymaps/logitech-wave-pro-cordless
+--- udev-145-orig/extras/keymap/keymaps/logitech-wave-pro-cordless	1970-01-01 01:00:00.000000000 +0100
++++ udev-145/extras/keymap/keymaps/logitech-wave-pro-cordless	2010-07-07 10:58:29.000000000 +0200
+@@ -0,0 +1,12 @@
++0xC01B6 camera
++0xC0183 media
++0xC0184 wordprocessor
++0xC0186 spreadsheet
++0xC018E calendar
++0xC0223 homepage
++0xC01BC messenger
++0xC018A mail
++0xC0221 search
++0xC00B8 ejectcd
++0xC022D zoomin
++0xC022E zoomout
+diff -urN udev-145-orig/extras/keymap/keymaps/micro-star udev-145/extras/keymap/keymaps/micro-star
+--- udev-145-orig/extras/keymap/keymaps/micro-star	2009-05-09 12:41:34.000000000 +0200
++++ udev-145/extras/keymap/keymaps/micro-star	2010-06-11 10:52:56.000000000 +0200
+@@ -6,6 +6,7 @@
+ 0xE2 bluetooth # satellite dish2
+ 0xE4 f22 # Fn-F3   Touchpad disable
+ 0xEC email # envelope button
++0xEE camera # Fn-F6 camera disable
+ 0xF6 wlan # satellite dish1
+ 0xF7 brightnessdown # Fn-F4
+ 0xF8 brightnessup # Fn-F5
+diff -urN udev-145-orig/extras/keymap/keymaps/olpc-xo udev-145/extras/keymap/keymaps/olpc-xo
+--- udev-145-orig/extras/keymap/keymaps/olpc-xo	1970-01-01 01:00:00.000000000 +0100
++++ udev-145/extras/keymap/keymaps/olpc-xo	2010-06-11 10:52:56.000000000 +0200
+@@ -0,0 +1,60 @@
++0x59 fn
++0x81 fn_esc
++0xF9 camera
++0xF8 sound # Fn-CAMERA = Mic
++0xBB fn_f1
++0xBC fn_f2
++0xBD fn_f3
++0xBE fn_f4
++0xBF fn_f5
++0xC0 fn_f6
++0xC1 fn_f7
++0xC2 fn_f8
++0xC3 fn_f9
++0xC4 fn_f10
++0xD7 fn_f11
++0xD8 fn_f12
++
++# Using F13-F21 for the .5 F keys right now.
++0xF7 f13
++0xF6 f14
++0xF5 f15
++0xF4 f16
++0xF3 f17
++0xF2 f18
++0xF1 f19
++0xF0 f20
++0xEF f21
++
++0xEE chat
++0xE4 chat # Just mapping Fn-Chat to Chat for now
++0xDD menu # Frame
++0xDA prog1 # Fn-Frame
++
++# The FN of some keys is other keys
++0xD3 delete
++0xD2 insert
++0xC9 pageup
++0xD1 pagedown
++0xC7 home
++0xCF end
++
++# Language key - don't ask what they are doing as KEY_HP
++0x73 hp
++0x7E hp
++
++0xDB leftmeta # left grab
++0xDC rightmeta # right grab
++0x85 rightmeta # Right grab releases on a different scancode
++0xD6 kbdillumtoggle # Fn-space
++0x69 switchvideomode # Brightness key
++
++# Game keys
++0x65 kp8 # up
++0x66 kp2 # down
++0x67 kp4 # left
++0x68 kp6 # right
++0xE5 kp9 # pgup
++0xE6 kp3 # pgdn
++0xE7 kp7 # home
++0xE8 kp1 # end
+diff -urN udev-145-orig/extras/keymap/keymaps/onkyo udev-145/extras/keymap/keymaps/onkyo
+--- udev-145-orig/extras/keymap/keymaps/onkyo	1970-01-01 01:00:00.000000000 +0100
++++ udev-145/extras/keymap/keymaps/onkyo	2010-08-31 10:35:41.000000000 +0200
+@@ -0,0 +1,14 @@
++0xA0 mute # Fn+D
++0xAE volumedown # Fn+F
++0xB0 volumeup # Fn+G
++0xDF sleep # Fn+W
++0xE0 bluetooth # Fn+H
++0xE2 cyclewindows # Fn+Esc
++0xEE battery # Fn+Q
++0xF0 media # Fn+R
++0xF5 switchvideomode # Fn+E
++0xF6 camera # Fn+T
++0xF7 f22 # Fn+Y (touchpad toggle)
++0xF8 brightnessup # Fn+S
++0xF9 brightnessdown # Fn+A
++0xFB wlan # Fn+J
+diff -urN udev-145-orig/extras/keymap/keymaps/toshiba-satellite_m30x udev-145/extras/keymap/keymaps/toshiba-satellite_m30x
+--- udev-145-orig/extras/keymap/keymaps/toshiba-satellite_m30x	1970-01-01 01:00:00.000000000 +0100
++++ udev-145/extras/keymap/keymaps/toshiba-satellite_m30x	2010-06-11 10:52:56.000000000 +0200
+@@ -0,0 +1,7 @@
++0xef brightnessdown
++0xd9 brightnessup
++0xee screenlock
++0x93 media
++0x9e prog1 #touchpad_enable
++0x9f prog2 #touchpad_disable
++
+diff -urN udev-145-orig/extras/keymap/keymaps/zepto-znote udev-145/extras/keymap/keymaps/zepto-znote
+--- udev-145-orig/extras/keymap/keymaps/zepto-znote	1970-01-01 01:00:00.000000000 +0100
++++ udev-145/extras/keymap/keymaps/zepto-znote	2010-03-18 16:44:52.000000000 +0100
+@@ -0,0 +1,11 @@
++0x93 switchvideomode    # Fn+F3 Toggle Video Output
++0x95 brightnessdown     # Fn+F4 Brightness Down
++0x91 brightnessup       # Fn+F5 Brightness Up
++0xA5 f22                # Fn+F6 Disable Touchpad
++0xA6 f22                # Fn+F6 Enable Touchpad
++0xA7 bluetooth          # Fn+F10 Enable Bluetooth
++0XA9 bluetooth          # Fn+F10 Disable Bluetooth
++0xF1 wlan               # RF Switch Off
++0xF2 wlan               # RF Switch On
++0xF4 prog1              # P1 Button
++0xF3 prog2              # P2 Button
+diff -urN udev-145-orig/extras/keymap/keys-from-name.gperf udev-145/extras/keymap/keys-from-name.gperf
+--- udev-145-orig/extras/keymap/keys-from-name.gperf	1970-01-01 01:00:00.000000000 +0100
++++ udev-145/extras/keymap/keys-from-name.gperf	2010-08-10 16:45:45.000000000 +0200
+@@ -0,0 +1,382 @@
++struct key { const char* name; unsigned short id; };
++%null-strings
++%%
++KEY_RESERVED, KEY_RESERVED
++KEY_ESC, KEY_ESC
++KEY_1, KEY_1
++KEY_2, KEY_2
++KEY_3, KEY_3
++KEY_4, KEY_4
++KEY_5, KEY_5
++KEY_6, KEY_6
++KEY_7, KEY_7
++KEY_8, KEY_8
++KEY_9, KEY_9
++KEY_0, KEY_0
++KEY_MINUS, KEY_MINUS
++KEY_EQUAL, KEY_EQUAL
++KEY_BACKSPACE, KEY_BACKSPACE
++KEY_TAB, KEY_TAB
++KEY_Q, KEY_Q
++KEY_W, KEY_W
++KEY_E, KEY_E
++KEY_R, KEY_R
++KEY_T, KEY_T
++KEY_Y, KEY_Y
++KEY_U, KEY_U
++KEY_I, KEY_I
++KEY_O, KEY_O
++KEY_P, KEY_P
++KEY_LEFTBRACE, KEY_LEFTBRACE
++KEY_RIGHTBRACE, KEY_RIGHTBRACE
++KEY_ENTER, KEY_ENTER
++KEY_LEFTCTRL, KEY_LEFTCTRL
++KEY_A, KEY_A
++KEY_S, KEY_S
++KEY_D, KEY_D
++KEY_F, KEY_F
++KEY_G, KEY_G
++KEY_H, KEY_H
++KEY_J, KEY_J
++KEY_K, KEY_K
++KEY_L, KEY_L
++KEY_SEMICOLON, KEY_SEMICOLON
++KEY_APOSTROPHE, KEY_APOSTROPHE
++KEY_GRAVE, KEY_GRAVE
++KEY_LEFTSHIFT, KEY_LEFTSHIFT
++KEY_BACKSLASH, KEY_BACKSLASH
++KEY_Z, KEY_Z
++KEY_X, KEY_X
++KEY_C, KEY_C
++KEY_V, KEY_V
++KEY_B, KEY_B
++KEY_N, KEY_N
++KEY_M, KEY_M
++KEY_COMMA, KEY_COMMA
++KEY_DOT, KEY_DOT
++KEY_SLASH, KEY_SLASH
++KEY_RIGHTSHIFT, KEY_RIGHTSHIFT
++KEY_KPASTERISK, KEY_KPASTERISK
++KEY_LEFTALT, KEY_LEFTALT
++KEY_SPACE, KEY_SPACE
++KEY_CAPSLOCK, KEY_CAPSLOCK
++KEY_F1, KEY_F1
++KEY_F2, KEY_F2
++KEY_F3, KEY_F3
++KEY_F4, KEY_F4
++KEY_F5, KEY_F5
++KEY_F6, KEY_F6
++KEY_F7, KEY_F7
++KEY_F8, KEY_F8
++KEY_F9, KEY_F9
++KEY_F10, KEY_F10
++KEY_NUMLOCK, KEY_NUMLOCK
++KEY_SCROLLLOCK, KEY_SCROLLLOCK
++KEY_KP7, KEY_KP7
++KEY_KP8, KEY_KP8
++KEY_KP9, KEY_KP9
++KEY_KPMINUS, KEY_KPMINUS
++KEY_KP4, KEY_KP4
++KEY_KP5, KEY_KP5
++KEY_KP6, KEY_KP6
++KEY_KPPLUS, KEY_KPPLUS
++KEY_KP1, KEY_KP1
++KEY_KP2, KEY_KP2
++KEY_KP3, KEY_KP3
++KEY_KP0, KEY_KP0
++KEY_KPDOT, KEY_KPDOT
++KEY_ZENKAKUHANKAKU, KEY_ZENKAKUHANKAKU
++KEY_102ND, KEY_102ND
++KEY_F11, KEY_F11
++KEY_F12, KEY_F12
++KEY_RO, KEY_RO
++KEY_KATAKANA, KEY_KATAKANA
++KEY_HIRAGANA, KEY_HIRAGANA
++KEY_HENKAN, KEY_HENKAN
++KEY_KATAKANAHIRAGANA, KEY_KATAKANAHIRAGANA
++KEY_MUHENKAN, KEY_MUHENKAN
++KEY_KPJPCOMMA, KEY_KPJPCOMMA
++KEY_KPENTER, KEY_KPENTER
++KEY_RIGHTCTRL, KEY_RIGHTCTRL
++KEY_KPSLASH, KEY_KPSLASH
++KEY_SYSRQ, KEY_SYSRQ
++KEY_RIGHTALT, KEY_RIGHTALT
++KEY_LINEFEED, KEY_LINEFEED
++KEY_HOME, KEY_HOME
++KEY_UP, KEY_UP
++KEY_PAGEUP, KEY_PAGEUP
++KEY_LEFT, KEY_LEFT
++KEY_RIGHT, KEY_RIGHT
++KEY_END, KEY_END
++KEY_DOWN, KEY_DOWN
++KEY_PAGEDOWN, KEY_PAGEDOWN
++KEY_INSERT, KEY_INSERT
++KEY_DELETE, KEY_DELETE
++KEY_MACRO, KEY_MACRO
++KEY_MUTE, KEY_MUTE
++KEY_VOLUMEDOWN, KEY_VOLUMEDOWN
++KEY_VOLUMEUP, KEY_VOLUMEUP
++KEY_POWER, KEY_POWER
++KEY_KPEQUAL, KEY_KPEQUAL
++KEY_KPPLUSMINUS, KEY_KPPLUSMINUS
++KEY_PAUSE, KEY_PAUSE
++KEY_SCALE, KEY_SCALE
++KEY_KPCOMMA, KEY_KPCOMMA
++KEY_HANGEUL, KEY_HANGEUL
++KEY_HANJA, KEY_HANJA
++KEY_YEN, KEY_YEN
++KEY_LEFTMETA, KEY_LEFTMETA
++KEY_RIGHTMETA, KEY_RIGHTMETA
++KEY_COMPOSE, KEY_COMPOSE
++KEY_STOP, KEY_STOP
++KEY_AGAIN, KEY_AGAIN
++KEY_PROPS, KEY_PROPS
++KEY_UNDO, KEY_UNDO
++KEY_FRONT, KEY_FRONT
++KEY_COPY, KEY_COPY
++KEY_OPEN, KEY_OPEN
++KEY_PASTE, KEY_PASTE
++KEY_FIND, KEY_FIND
++KEY_CUT, KEY_CUT
++KEY_HELP, KEY_HELP
++KEY_MENU, KEY_MENU
++KEY_CALC, KEY_CALC
++KEY_SETUP, KEY_SETUP
++KEY_SLEEP, KEY_SLEEP
++KEY_WAKEUP, KEY_WAKEUP
++KEY_FILE, KEY_FILE
++KEY_SENDFILE, KEY_SENDFILE
++KEY_DELETEFILE, KEY_DELETEFILE
++KEY_XFER, KEY_XFER
++KEY_PROG1, KEY_PROG1
++KEY_PROG2, KEY_PROG2
++KEY_WWW, KEY_WWW
++KEY_MSDOS, KEY_MSDOS
++KEY_SCREENLOCK, KEY_SCREENLOCK
++KEY_DIRECTION, KEY_DIRECTION
++KEY_CYCLEWINDOWS, KEY_CYCLEWINDOWS
++KEY_MAIL, KEY_MAIL
++KEY_BOOKMARKS, KEY_BOOKMARKS
++KEY_COMPUTER, KEY_COMPUTER
++KEY_BACK, KEY_BACK
++KEY_FORWARD, KEY_FORWARD
++KEY_CLOSECD, KEY_CLOSECD
++KEY_EJECTCD, KEY_EJECTCD
++KEY_EJECTCLOSECD, KEY_EJECTCLOSECD
++KEY_NEXTSONG, KEY_NEXTSONG
++KEY_PLAYPAUSE, KEY_PLAYPAUSE
++KEY_PREVIOUSSONG, KEY_PREVIOUSSONG
++KEY_STOPCD, KEY_STOPCD
++KEY_RECORD, KEY_RECORD
++KEY_REWIND, KEY_REWIND
++KEY_PHONE, KEY_PHONE
++KEY_ISO, KEY_ISO
++KEY_CONFIG, KEY_CONFIG
++KEY_HOMEPAGE, KEY_HOMEPAGE
++KEY_REFRESH, KEY_REFRESH
++KEY_EXIT, KEY_EXIT
++KEY_MOVE, KEY_MOVE
++KEY_EDIT, KEY_EDIT
++KEY_SCROLLUP, KEY_SCROLLUP
++KEY_SCROLLDOWN, KEY_SCROLLDOWN
++KEY_KPLEFTPAREN, KEY_KPLEFTPAREN
++KEY_KPRIGHTPAREN, KEY_KPRIGHTPAREN
++KEY_NEW, KEY_NEW
++KEY_REDO, KEY_REDO
++KEY_F13, KEY_F13
++KEY_F14, KEY_F14
++KEY_F15, KEY_F15
++KEY_F16, KEY_F16
++KEY_F17, KEY_F17
++KEY_F18, KEY_F18
++KEY_F19, KEY_F19
++KEY_F20, KEY_F20
++KEY_F21, KEY_F21
++KEY_F22, KEY_F22
++KEY_F23, KEY_F23
++KEY_F24, KEY_F24
++KEY_PLAYCD, KEY_PLAYCD
++KEY_PAUSECD, KEY_PAUSECD
++KEY_PROG3, KEY_PROG3
++KEY_PROG4, KEY_PROG4
++KEY_DASHBOARD, KEY_DASHBOARD
++KEY_SUSPEND, KEY_SUSPEND
++KEY_CLOSE, KEY_CLOSE
++KEY_PLAY, KEY_PLAY
++KEY_FASTFORWARD, KEY_FASTFORWARD
++KEY_BASSBOOST, KEY_BASSBOOST
++KEY_PRINT, KEY_PRINT
++KEY_HP, KEY_HP
++KEY_CAMERA, KEY_CAMERA
++KEY_SOUND, KEY_SOUND
++KEY_QUESTION, KEY_QUESTION
++KEY_EMAIL, KEY_EMAIL
++KEY_CHAT, KEY_CHAT
++KEY_SEARCH, KEY_SEARCH
++KEY_CONNECT, KEY_CONNECT
++KEY_FINANCE, KEY_FINANCE
++KEY_SPORT, KEY_SPORT
++KEY_SHOP, KEY_SHOP
++KEY_ALTERASE, KEY_ALTERASE
++KEY_CANCEL, KEY_CANCEL
++KEY_BRIGHTNESSDOWN, KEY_BRIGHTNESSDOWN
++KEY_BRIGHTNESSUP, KEY_BRIGHTNESSUP
++KEY_MEDIA, KEY_MEDIA
++KEY_SWITCHVIDEOMODE, KEY_SWITCHVIDEOMODE
++KEY_KBDILLUMTOGGLE, KEY_KBDILLUMTOGGLE
++KEY_KBDILLUMDOWN, KEY_KBDILLUMDOWN
++KEY_KBDILLUMUP, KEY_KBDILLUMUP
++KEY_SEND, KEY_SEND
++KEY_REPLY, KEY_REPLY
++KEY_FORWARDMAIL, KEY_FORWARDMAIL
++KEY_SAVE, KEY_SAVE
++KEY_DOCUMENTS, KEY_DOCUMENTS
++KEY_BATTERY, KEY_BATTERY
++KEY_BLUETOOTH, KEY_BLUETOOTH
++KEY_WLAN, KEY_WLAN
++KEY_UWB, KEY_UWB
++KEY_UNKNOWN, KEY_UNKNOWN
++KEY_VIDEO_NEXT, KEY_VIDEO_NEXT
++KEY_VIDEO_PREV, KEY_VIDEO_PREV
++KEY_BRIGHTNESS_CYCLE, KEY_BRIGHTNESS_CYCLE
++KEY_BRIGHTNESS_ZERO, KEY_BRIGHTNESS_ZERO
++KEY_DISPLAY_OFF, KEY_DISPLAY_OFF
++KEY_WIMAX, KEY_WIMAX
++KEY_RFKILL, KEY_RFKILL
++KEY_OK, KEY_OK
++KEY_SELECT, KEY_SELECT
++KEY_GOTO, KEY_GOTO
++KEY_CLEAR, KEY_CLEAR
++KEY_POWER2, KEY_POWER2
++KEY_OPTION, KEY_OPTION
++KEY_INFO, KEY_INFO
++KEY_TIME, KEY_TIME
++KEY_VENDOR, KEY_VENDOR
++KEY_ARCHIVE, KEY_ARCHIVE
++KEY_PROGRAM, KEY_PROGRAM
++KEY_CHANNEL, KEY_CHANNEL
++KEY_FAVORITES, KEY_FAVORITES
++KEY_EPG, KEY_EPG
++KEY_PVR, KEY_PVR
++KEY_MHP, KEY_MHP
++KEY_LANGUAGE, KEY_LANGUAGE
++KEY_TITLE, KEY_TITLE
++KEY_SUBTITLE, KEY_SUBTITLE
++KEY_ANGLE, KEY_ANGLE
++KEY_ZOOM, KEY_ZOOM
++KEY_MODE, KEY_MODE
++KEY_KEYBOARD, KEY_KEYBOARD
++KEY_SCREEN, KEY_SCREEN
++KEY_PC, KEY_PC
++KEY_TV, KEY_TV
++KEY_TV2, KEY_TV2
++KEY_VCR, KEY_VCR
++KEY_VCR2, KEY_VCR2
++KEY_SAT, KEY_SAT
++KEY_SAT2, KEY_SAT2
++KEY_CD, KEY_CD
++KEY_TAPE, KEY_TAPE
++KEY_RADIO, KEY_RADIO
++KEY_TUNER, KEY_TUNER
++KEY_PLAYER, KEY_PLAYER
++KEY_TEXT, KEY_TEXT
++KEY_DVD, KEY_DVD
++KEY_AUX, KEY_AUX
++KEY_MP3, KEY_MP3
++KEY_AUDIO, KEY_AUDIO
++KEY_VIDEO, KEY_VIDEO
++KEY_DIRECTORY, KEY_DIRECTORY
++KEY_LIST, KEY_LIST
++KEY_MEMO, KEY_MEMO
++KEY_CALENDAR, KEY_CALENDAR
++KEY_RED, KEY_RED
++KEY_GREEN, KEY_GREEN
++KEY_YELLOW, KEY_YELLOW
++KEY_BLUE, KEY_BLUE
++KEY_CHANNELUP, KEY_CHANNELUP
++KEY_CHANNELDOWN, KEY_CHANNELDOWN
++KEY_FIRST, KEY_FIRST
++KEY_LAST, KEY_LAST
++KEY_AB, KEY_AB
++KEY_NEXT, KEY_NEXT
++KEY_RESTART, KEY_RESTART
++KEY_SLOW, KEY_SLOW
++KEY_SHUFFLE, KEY_SHUFFLE
++KEY_BREAK, KEY_BREAK
++KEY_PREVIOUS, KEY_PREVIOUS
++KEY_DIGITS, KEY_DIGITS
++KEY_TEEN, KEY_TEEN
++KEY_TWEN, KEY_TWEN
++KEY_VIDEOPHONE, KEY_VIDEOPHONE
++KEY_GAMES, KEY_GAMES
++KEY_ZOOMIN, KEY_ZOOMIN
++KEY_ZOOMOUT, KEY_ZOOMOUT
++KEY_ZOOMRESET, KEY_ZOOMRESET
++KEY_WORDPROCESSOR, KEY_WORDPROCESSOR
++KEY_EDITOR, KEY_EDITOR
++KEY_SPREADSHEET, KEY_SPREADSHEET
++KEY_GRAPHICSEDITOR, KEY_GRAPHICSEDITOR
++KEY_PRESENTATION, KEY_PRESENTATION
++KEY_DATABASE, KEY_DATABASE
++KEY_NEWS, KEY_NEWS
++KEY_VOICEMAIL, KEY_VOICEMAIL
++KEY_ADDRESSBOOK, KEY_ADDRESSBOOK
++KEY_MESSENGER, KEY_MESSENGER
++KEY_DISPLAYTOGGLE, KEY_DISPLAYTOGGLE
++KEY_SPELLCHECK, KEY_SPELLCHECK
++KEY_LOGOFF, KEY_LOGOFF
++KEY_DOLLAR, KEY_DOLLAR
++KEY_EURO, KEY_EURO
++KEY_FRAMEBACK, KEY_FRAMEBACK
++KEY_FRAMEFORWARD, KEY_FRAMEFORWARD
++KEY_CONTEXT_MENU, KEY_CONTEXT_MENU
++KEY_MEDIA_REPEAT, KEY_MEDIA_REPEAT
++KEY_DEL_EOL, KEY_DEL_EOL
++KEY_DEL_EOS, KEY_DEL_EOS
++KEY_INS_LINE, KEY_INS_LINE
++KEY_DEL_LINE, KEY_DEL_LINE
++KEY_FN, KEY_FN
++KEY_FN_ESC, KEY_FN_ESC
++KEY_FN_F1, KEY_FN_F1
++KEY_FN_F2, KEY_FN_F2
++KEY_FN_F3, KEY_FN_F3
++KEY_FN_F4, KEY_FN_F4
++KEY_FN_F5, KEY_FN_F5
++KEY_FN_F6, KEY_FN_F6
++KEY_FN_F7, KEY_FN_F7
++KEY_FN_F8, KEY_FN_F8
++KEY_FN_F9, KEY_FN_F9
++KEY_FN_F10, KEY_FN_F10
++KEY_FN_F11, KEY_FN_F11
++KEY_FN_F12, KEY_FN_F12
++KEY_FN_1, KEY_FN_1
++KEY_FN_2, KEY_FN_2
++KEY_FN_D, KEY_FN_D
++KEY_FN_E, KEY_FN_E
++KEY_FN_F, KEY_FN_F
++KEY_FN_S, KEY_FN_S
++KEY_FN_B, KEY_FN_B
++KEY_BRL_DOT1, KEY_BRL_DOT1
++KEY_BRL_DOT2, KEY_BRL_DOT2
++KEY_BRL_DOT3, KEY_BRL_DOT3
++KEY_BRL_DOT4, KEY_BRL_DOT4
++KEY_BRL_DOT5, KEY_BRL_DOT5
++KEY_BRL_DOT6, KEY_BRL_DOT6
++KEY_BRL_DOT7, KEY_BRL_DOT7
++KEY_BRL_DOT8, KEY_BRL_DOT8
++KEY_BRL_DOT9, KEY_BRL_DOT9
++KEY_BRL_DOT10, KEY_BRL_DOT10
++KEY_NUMERIC_0, KEY_NUMERIC_0
++KEY_NUMERIC_1, KEY_NUMERIC_1
++KEY_NUMERIC_2, KEY_NUMERIC_2
++KEY_NUMERIC_3, KEY_NUMERIC_3
++KEY_NUMERIC_4, KEY_NUMERIC_4
++KEY_NUMERIC_5, KEY_NUMERIC_5
++KEY_NUMERIC_6, KEY_NUMERIC_6
++KEY_NUMERIC_7, KEY_NUMERIC_7
++KEY_NUMERIC_8, KEY_NUMERIC_8
++KEY_NUMERIC_9, KEY_NUMERIC_9
++KEY_NUMERIC_STAR, KEY_NUMERIC_STAR
++KEY_NUMERIC_POUND, KEY_NUMERIC_POUND
++KEY_CAMERA_FOCUS, KEY_CAMERA_FOCUS
++KEY_WPS_BUTTON, KEY_WPS_BUTTON
+diff -urN udev-145-orig/extras/keymap/keys-from-name.h udev-145/extras/keymap/keys-from-name.h
+--- udev-145-orig/extras/keymap/keys-from-name.h	1970-01-01 01:00:00.000000000 +0100
++++ udev-145/extras/keymap/keys-from-name.h	2010-08-11 15:14:09.000000000 +0200
+@@ -0,0 +1,1064 @@
++/* ANSI-C code produced by gperf version 3.0.4 */
++/* Command-line: /usr/bin/gperf -L ANSI-C -t --ignore-case -N lookup_key -H hash_key_name -p -C  */
++/* Computed positions: -k'5-8,$' */
++
++#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
++      && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
++      && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \
++      && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \
++      && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \
++      && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \
++      && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \
++      && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \
++      && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \
++      && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \
++      && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \
++      && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \
++      && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \
++      && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \
++      && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \
++      && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \
++      && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \
++      && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \
++      && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \
++      && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \
++      && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \
++      && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
++      && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126))
++/* The character set is not based on ISO-646.  */
++#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf at gnu.org>."
++#endif
++
++struct key { const char* name; unsigned short id; };
++
++#define TOTAL_KEYWORDS 379
++#define MIN_WORD_LENGTH 5
++#define MAX_WORD_LENGTH 20
++#define MIN_HASH_VALUE 5
++#define MAX_HASH_VALUE 1967
++/* maximum key range = 1963, duplicates = 0 */
++
++#ifndef GPERF_DOWNCASE
++#define GPERF_DOWNCASE 1
++static unsigned char gperf_downcase[256] =
++  {
++      0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,
++     15,  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,
++     30,  31,  32,  33,  34,  35,  36,  37,  38,  39,  40,  41,  42,  43,  44,
++     45,  46,  47,  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,
++     60,  61,  62,  63,  64,  97,  98,  99, 100, 101, 102, 103, 104, 105, 106,
++    107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
++    122,  91,  92,  93,  94,  95,  96,  97,  98,  99, 100, 101, 102, 103, 104,
++    105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
++    120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
++    135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
++    150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
++    165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179,
++    180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
++    195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209,
++    210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224,
++    225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
++    240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254,
++    255
++  };
++#endif
++
++#ifndef GPERF_CASE_STRCMP
++#define GPERF_CASE_STRCMP 1
++static int
++gperf_case_strcmp (register const char *s1, register const char *s2)
++{
++  for (;;)
++    {
++      unsigned char c1 = gperf_downcase[(unsigned char)*s1++];
++      unsigned char c2 = gperf_downcase[(unsigned char)*s2++];
++      if (c1 != 0 && c1 == c2)
++        continue;
++      return (int)c1 - (int)c2;
++    }
++}
++#endif
++
++#ifdef __GNUC__
++__inline
++#else
++#ifdef __cplusplus
++inline
++#endif
++#endif
++static unsigned int
++hash_key_name (register const char *str, register unsigned int len)
++{
++  static const unsigned short asso_values[] =
++    {
++      1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968,
++      1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968,
++      1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968,
++      1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968,
++      1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968,  170,  245,
++       160,  265,  275,  390,  380,  315,  225,   35, 1968, 1968,
++      1968, 1968, 1968, 1968, 1968,   40,  200,   70,    5,    0,
++       310,  185,  250,  105,  270,  260,  115,  150,   95,   15,
++        30,   65,   10,   20,   25,  220,  485,  490,   55,  375,
++       410, 1968, 1968, 1968, 1968,  305, 1968,   40,  200,   70,
++         5,    0,  310,  185,  250,  105,  270,  260,  115,  150,
++        95,   15,   30,   65,   10,   20,   25,  220,  485,  490,
++        55,  375,  410, 1968, 1968, 1968, 1968, 1968, 1968, 1968,
++      1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968,
++      1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968,
++      1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968,
++      1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968,
++      1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968,
++      1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968,
++      1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968,
++      1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968,
++      1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968,
++      1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968,
++      1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968,
++      1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968,
++      1968, 1968, 1968, 1968, 1968, 1968
++    };
++  register int hval = len;
++
++  switch (hval)
++    {
++      default:
++        hval += asso_values[(unsigned char)str[7]];
++      /*FALLTHROUGH*/
++      case 7:
++        hval += asso_values[(unsigned char)str[6]];
++      /*FALLTHROUGH*/
++      case 6:
++        hval += asso_values[(unsigned char)str[5]];
++      /*FALLTHROUGH*/
++      case 5:
++        hval += asso_values[(unsigned char)str[4]];
++        break;
++    }
++  return hval + asso_values[(unsigned char)str[len - 1]];
++}
++
++#ifdef __GNUC__
++__inline
++#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__
++__attribute__ ((__gnu_inline__))
++#endif
++#endif
++const struct key *
++lookup_key (register const char *str, register unsigned int len)
++{
++  static const struct key wordlist[] =
++    {
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0},
++      {"KEY_E", KEY_E},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0},
++      {"KEY_D", KEY_D},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0},
++      {"KEY_R", KEY_R},
++      {(char*)0},
++      {"KEY_RED", KEY_RED},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_O", KEY_O},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0},
++      {"KEY_S", KEY_S},
++      {"KEY_RO", KEY_RO},
++      {"KEY_RESERVED", KEY_RESERVED},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0},
++      {"KEY_REDO", KEY_REDO},
++      {(char*)0},
++      {"KEY_T", KEY_T},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0},
++      {"KEY_P", KEY_P},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0},
++      {"KEY_9", KEY_9},
++      {(char*)0},
++      {"KEY_DOT", KEY_DOT},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_A", KEY_A},
++      {"KEY_CD", KEY_CD},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_RESTART", KEY_RESTART},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_SPREADSHEET", KEY_SPREADSHEET},
++      {(char*)0}, {(char*)0},
++      {"KEY_TAPE", KEY_TAPE},
++      {(char*)0},
++      {"KEY_STOPCD", KEY_STOPCD},
++      {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_SPORT", KEY_SPORT},
++      {"KEY_RECORD", KEY_RECORD},
++      {(char*)0},
++      {"KEY_END", KEY_END},
++      {(char*)0},
++      {"KEY_PROPS", KEY_PROPS},
++      {"KEY_X", KEY_X},
++      {(char*)0},
++      {"KEY_SAT", KEY_SAT},
++      {(char*)0},
++      {"KEY_APOSTROPHE", KEY_APOSTROPHE},
++      {(char*)0}, {(char*)0},
++      {"KEY_DATABASE", KEY_DATABASE},
++      {(char*)0},
++      {"KEY_PASTE", KEY_PASTE},
++      {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_STOP", KEY_STOP},
++      {(char*)0},
++      {"KEY_DELETE", KEY_DELETE},
++      {(char*)0},
++      {"KEY_SENDFILE", KEY_SENDFILE},
++      {"KEY_SEND", KEY_SEND},
++      {"KEY_DELETEFILE", KEY_DELETEFILE},
++      {"KEY_Q", KEY_Q},
++      {(char*)0}, {(char*)0},
++      {"KEY_TEXT", KEY_TEXT},
++      {"KEY_ENTER", KEY_ENTER},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0},
++      {"KEY_C", KEY_C},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0},
++      {"KEY_EDITOR", KEY_EDITOR},
++      {(char*)0},
++      {"KEY_SCROLLUP", KEY_SCROLLUP},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_ISO", KEY_ISO},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_ESC", KEY_ESC},
++      {"KEY_EDIT", KEY_EDIT},
++      {"KEY_SPACE", KEY_SPACE},
++      {"KEY_SELECT", KEY_SELECT},
++      {"KEY_PRESENTATION", KEY_PRESENTATION},
++      {(char*)0}, {(char*)0},
++      {"KEY_SLEEP", KEY_SLEEP},
++      {(char*)0},
++      {"KEY_PC", KEY_PC},
++      {"KEY_DISPLAYTOGGLE", KEY_DISPLAYTOGGLE},
++      {"KEY_MODE", KEY_MODE},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0},
++      {"KEY_RADIO", KEY_RADIO},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_ALTERASE", KEY_ALTERASE},
++      {(char*)0}, {(char*)0},
++      {"KEY_N", KEY_N},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0},
++      {"KEY_SCREEN", KEY_SCREEN},
++      {(char*)0}, {(char*)0},
++      {"KEY_NEXT", KEY_NEXT},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_MESSENGER", KEY_MESSENGER},
++      {(char*)0},
++      {"KEY_I", KEY_I},
++      {(char*)0}, {(char*)0},
++      {"KEY_EXIT", KEY_EXIT},
++      {"KEY_MSDOS", KEY_MSDOS},
++      {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_TEEN", KEY_TEEN},
++      {"KEY_SCROLLDOWN", KEY_SCROLLDOWN},
++      {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_DIRECTION", KEY_DIRECTION},
++      {"KEY_CLOSE", KEY_CLOSE},
++      {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_LAST", KEY_LAST},
++      {(char*)0},
++      {"KEY_L", KEY_L},
++      {"KEY_CLOSECD", KEY_CLOSECD},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0},
++      {"KEY_OPEN", KEY_OPEN},
++      {"KEY_CLEAR", KEY_CLEAR},
++      {(char*)0}, {(char*)0},
++      {"KEY_CALENDAR", KEY_CALENDAR},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0},
++      {"KEY_SCALE", KEY_SCALE},
++      {"KEY_INSERT", KEY_INSERT},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_GOTO", KEY_GOTO},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_EURO", KEY_EURO},
++      {(char*)0},
++      {"KEY_DOLLAR", KEY_DOLLAR},
++      {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_PRINT", KEY_PRINT},
++      {(char*)0},
++      {"KEY_COMPOSE", KEY_COMPOSE},
++      {(char*)0}, {(char*)0},
++      {"KEY_TITLE", KEY_TITLE},
++      {"KEY_OPTION", KEY_OPTION},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0},
++      {"KEY_UP", KEY_UP},
++      {"KEY_COMPUTER", KEY_COMPUTER},
++      {"KEY_TIME", KEY_TIME},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_GRAPHICSEDITOR", KEY_GRAPHICSEDITOR},
++      {"KEY_MACRO", KEY_MACRO},
++      {"KEY_PAGEUP", KEY_PAGEUP},
++      {"KEY_CAMERA_FOCUS", KEY_CAMERA_FOCUS},
++      {(char*)0},
++      {"KEY_LIST", KEY_LIST},
++      {"KEY_GREEN", KEY_GREEN},
++      {(char*)0},
++      {"KEY_MEDIA_REPEAT", KEY_MEDIA_REPEAT},
++      {(char*)0}, {(char*)0},
++      {"KEY_SETUP", KEY_SETUP},
++      {"KEY_M", KEY_M},
++      {"KEY_SUSPEND", KEY_SUSPEND},
++      {(char*)0}, {(char*)0},
++      {"KEY_MEDIA", KEY_MEDIA},
++      {"KEY_CAMERA", KEY_CAMERA},
++      {"KEY_CONNECT", KEY_CONNECT},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_HP", KEY_HP},
++      {(char*)0},
++      {"KEY_BASSBOOST", KEY_BASSBOOST},
++      {"KEY_PAUSE", KEY_PAUSE},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0},
++      {"KEY_2", KEY_2},
++      {"KEY_PAUSECD", KEY_PAUSECD},
++      {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_SEARCH", KEY_SEARCH},
++      {(char*)0},
++      {"KEY_LINEFEED", KEY_LINEFEED},
++      {"KEY_DASHBOARD", KEY_DASHBOARD},
++      {(char*)0},
++      {"KEY_ADDRESSBOOK", KEY_ADDRESSBOOK},
++      {(char*)0}, {(char*)0},
++      {"KEY_MEMO", KEY_MEMO},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_DOCUMENTS", KEY_DOCUMENTS},
++      {"KEY_KPDOT", KEY_KPDOT},
++      {"KEY_0", KEY_0},
++      {(char*)0},
++      {"KEY_CUT", KEY_CUT},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0},
++      {"KEY_SHOP", KEY_SHOP},
++      {(char*)0}, {(char*)0},
++      {"KEY_EJECTCD", KEY_EJECTCD},
++      {(char*)0},
++      {"KEY_UNDO", KEY_UNDO},
++      {"KEY_TUNER", KEY_TUNER},
++      {(char*)0},
++      {"KEY_EJECTCLOSECD", KEY_EJECTCLOSECD},
++      {"KEY_PAGEDOWN", KEY_PAGEDOWN},
++      {(char*)0},
++      {"KEY_SOUND", KEY_SOUND},
++      {(char*)0}, {(char*)0},
++      {"KEY_KP9", KEY_KP9},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_NEXTSONG", KEY_NEXTSONG},
++      {"KEY_CALC", KEY_CALC},
++      {"KEY_SCREENLOCK", KEY_SCREENLOCK},
++      {"KEY_G", KEY_G},
++      {(char*)0},
++      {"KEY_AUX", KEY_AUX},
++      {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_ARCHIVE", KEY_ARCHIVE},
++      {(char*)0},
++      {"KEY_SEMICOLON", KEY_SEMICOLON},
++      {(char*)0}, {(char*)0},
++      {"KEY_F9", KEY_F9},
++      {(char*)0}, {(char*)0},
++      {"KEY_SCROLLLOCK", KEY_SCROLLLOCK},
++      {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_XFER", KEY_XFER},
++      {"KEY_AUDIO", KEY_AUDIO},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_PHONE", KEY_PHONE},
++      {"KEY_CANCEL", KEY_CANCEL},
++      {"KEY_PROGRAM", KEY_PROGRAM},
++      {(char*)0},
++      {"KEY_MUTE", KEY_MUTE},
++      {"KEY_GAMES", KEY_GAMES},
++      {"KEY_B", KEY_B},
++      {"KEY_KPENTER", KEY_KPENTER},
++      {"KEY_EPG", KEY_EPG},
++      {(char*)0},
++      {"KEY_PROG2", KEY_PROG2},
++      {(char*)0}, {(char*)0},
++      {"KEY_QUESTION", KEY_QUESTION},
++      {"KEY_SAT2", KEY_SAT2},
++      {(char*)0},
++      {"KEY_FASTFORWARD", KEY_FASTFORWARD},
++      {(char*)0},
++      {"KEY_KATAKANA", KEY_KATAKANA},
++      {"KEY_CHAT", KEY_CHAT},
++      {"KEY_EMAIL", KEY_EMAIL},
++      {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_HOME", KEY_HOME},
++      {(char*)0},
++      {"KEY_KATAKANAHIRAGANA", KEY_KATAKANAHIRAGANA},
++      {"KEY_KPCOMMA", KEY_KPCOMMA},
++      {"KEY_HOMEPAGE", KEY_HOMEPAGE},
++      {(char*)0}, {(char*)0},
++      {"KEY_DIGITS", KEY_DIGITS},
++      {(char*)0},
++      {"KEY_CAPSLOCK", KEY_CAPSLOCK},
++      {"KEY_HELP", KEY_HELP},
++      {"KEY_COMMA", KEY_COMMA},
++      {(char*)0}, {(char*)0},
++      {"KEY_DEL_LINE", KEY_DEL_LINE},
++      {(char*)0},
++      {"KEY_SPELLCHECK", KEY_SPELLCHECK},
++      {(char*)0},
++      {"KEY_CONTEXT_MENU", KEY_CONTEXT_MENU},
++      {(char*)0}, {(char*)0},
++      {"KEY_ANGLE", KEY_ANGLE},
++      {"KEY_U", KEY_U},
++      {"KEY_AB", KEY_AB},
++      {"KEY_LANGUAGE", KEY_LANGUAGE},
++      {(char*)0},
++      {"KEY_EQUAL", KEY_EQUAL},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_SLASH", KEY_SLASH},
++      {"KEY_8", KEY_8},
++      {"KEY_DEL_EOS", KEY_DEL_EOS},
++      {"KEY_HIRAGANA", KEY_HIRAGANA},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0},
++      {"KEY_LEFTBRACE", KEY_LEFTBRACE},
++      {"KEY_FRONT", KEY_FRONT},
++      {"KEY_KPPLUS", KEY_KPPLUS},
++      {(char*)0},
++      {"KEY_MHP", KEY_MHP},
++      {(char*)0}, {(char*)0},
++      {"KEY_KPPLUSMINUS", KEY_KPPLUSMINUS},
++      {(char*)0},
++      {"KEY_TAB", KEY_TAB},
++      {(char*)0},
++      {"KEY_AGAIN", KEY_AGAIN},
++      {(char*)0}, {(char*)0},
++      {"KEY_SUBTITLE", KEY_SUBTITLE},
++      {(char*)0},
++      {"KEY_FIRST", KEY_FIRST},
++      {(char*)0},
++      {"KEY_KPEQUAL", KEY_KPEQUAL},
++      {(char*)0},
++      {"KEY_LEFT", KEY_LEFT},
++      {(char*)0},
++      {"KEY_DISPLAY_OFF", KEY_DISPLAY_OFF},
++      {"KEY_LEFTALT", KEY_LEFTALT},
++      {"KEY_NUMERIC_POUND", KEY_NUMERIC_POUND},
++      {"KEY_LEFTSHIFT", KEY_LEFTSHIFT},
++      {(char*)0}, {(char*)0},
++      {"KEY_NUMERIC_STAR", KEY_NUMERIC_STAR},
++      {(char*)0}, {(char*)0},
++      {"KEY_PROG1", KEY_PROG1},
++      {"KEY_1", KEY_1},
++      {(char*)0}, {(char*)0},
++      {"KEY_CHANNELUP", KEY_CHANNELUP},
++      {"KEY_SYSRQ", KEY_SYSRQ},
++      {(char*)0}, {(char*)0},
++      {"KEY_LEFTMETA", KEY_LEFTMETA},
++      {(char*)0}, {(char*)0},
++      {"KEY_H", KEY_H},
++      {"KEY_FN", KEY_FN},
++      {"KEY_DVD", KEY_DVD},
++      {"KEY_DIRECTORY", KEY_DIRECTORY},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_NUMERIC_9", KEY_NUMERIC_9},
++      {"KEY_PROG3", KEY_PROG3},
++      {"KEY_KPLEFTPAREN", KEY_KPLEFTPAREN},
++      {"KEY_KPRIGHTPAREN", KEY_KPRIGHTPAREN},
++      {(char*)0}, {(char*)0},
++      {"KEY_BREAK", KEY_BREAK},
++      {"KEY_BRIGHTNESS_CYCLE", KEY_BRIGHTNESS_CYCLE},
++      {(char*)0}, {(char*)0},
++      {"KEY_BOOKMARKS", KEY_BOOKMARKS},
++      {"KEY_PROG4", KEY_PROG4},
++      {"KEY_K", KEY_K},
++      {(char*)0}, {(char*)0},
++      {"KEY_FIND", KEY_FIND},
++      {(char*)0}, {(char*)0},
++      {"KEY_FRAMEFORWARD", KEY_FRAMEFORWARD},
++      {(char*)0},
++      {"KEY_MAIL", KEY_MAIL},
++      {"KEY_BRIGHTNESS_ZERO", KEY_BRIGHTNESS_ZERO},
++      {"KEY_3", KEY_3},
++      {(char*)0},
++      {"KEY_INS_LINE", KEY_INS_LINE},
++      {"KEY_FILE", KEY_FILE},
++      {"KEY_REPLY", KEY_REPLY},
++      {(char*)0},
++      {"KEY_OK", KEY_OK},
++      {"KEY_PVR", KEY_PVR},
++      {"KEY_BLUE", KEY_BLUE},
++      {(char*)0},
++      {"KEY_J", KEY_J},
++      {"KEY_BRIGHTNESSUP", KEY_BRIGHTNESSUP},
++      {"KEY_WORDPROCESSOR", KEY_WORDPROCESSOR},
++      {"KEY_INFO", KEY_INFO},
++      {(char*)0}, {(char*)0},
++      {"KEY_DEL_EOL", KEY_DEL_EOL},
++      {(char*)0},
++      {"KEY_SAVE", KEY_SAVE},
++      {"KEY_POWER", KEY_POWER},
++      {"KEY_4", KEY_4},
++      {(char*)0},
++      {"KEY_PREVIOUS", KEY_PREVIOUS},
++      {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_FINANCE", KEY_FINANCE},
++      {(char*)0}, {(char*)0},
++      {"KEY_RIGHTBRACE", KEY_RIGHTBRACE},
++      {"KEY_CHANNELDOWN", KEY_CHANNELDOWN},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0},
++      {"KEY_YEN", KEY_YEN},
++      {"KEY_PLAYPAUSE", KEY_PLAYPAUSE},
++      {(char*)0},
++      {"KEY_PLAYCD", KEY_PLAYCD},
++      {"KEY_KPMINUS", KEY_KPMINUS},
++      {"KEY_LEFTCTRL", KEY_LEFTCTRL},
++      {(char*)0}, {(char*)0},
++      {"KEY_PLAYER", KEY_PLAYER},
++      {"KEY_CHANNEL", KEY_CHANNEL},
++      {"KEY_VCR", KEY_VCR},
++      {"KEY_BACKSPACE", KEY_BACKSPACE},
++      {"KEY_RIGHT", KEY_RIGHT},
++      {(char*)0}, {(char*)0},
++      {"KEY_RIGHTALT", KEY_RIGHTALT},
++      {"KEY_KBDILLUMTOGGLE", KEY_KBDILLUMTOGGLE},
++      {"KEY_RIGHTSHIFT", KEY_RIGHTSHIFT},
++      {(char*)0},
++      {"KEY_REFRESH", KEY_REFRESH},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_MINUS", KEY_MINUS},
++      {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_RIGHTMETA", KEY_RIGHTMETA},
++      {(char*)0},
++      {"KEY_VENDOR", KEY_VENDOR},
++      {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_VIDEOPHONE", KEY_VIDEOPHONE},
++      {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_BRIGHTNESSDOWN", KEY_BRIGHTNESSDOWN},
++      {"KEY_KBDILLUMUP", KEY_KBDILLUMUP},
++      {(char*)0}, {(char*)0},
++      {"KEY_KP2", KEY_KP2},
++      {(char*)0},
++      {"KEY_VIDEO", KEY_VIDEO},
++      {"KEY_REWIND", KEY_REWIND},
++      {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_KPASTERISK", KEY_KPASTERISK},
++      {"KEY_F", KEY_F},
++      {"KEY_ZOOMOUT", KEY_ZOOMOUT},
++      {(char*)0},
++      {"KEY_ZOOMRESET", KEY_ZOOMRESET},
++      {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_F19", KEY_F19},
++      {"KEY_NEWS", KEY_NEWS},
++      {"KEY_VIDEO_NEXT", KEY_VIDEO_NEXT},
++      {"KEY_7", KEY_7},
++      {"KEY_F2", KEY_F2},
++      {"KEY_KP0", KEY_KP0},
++      {"KEY_NUMERIC_2", KEY_NUMERIC_2},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_KPJPCOMMA", KEY_KPJPCOMMA},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_NUMERIC_0", KEY_NUMERIC_0},
++      {(char*)0},
++      {"KEY_LOGOFF", KEY_LOGOFF},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_MOVE", KEY_MOVE},
++      {"KEY_SWITCHVIDEOMODE", KEY_SWITCHVIDEOMODE},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0},
++      {"KEY_CYCLEWINDOWS", KEY_CYCLEWINDOWS},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0},
++      {"KEY_BATTERY", KEY_BATTERY},
++      {"KEY_BRL_DOT9", KEY_BRL_DOT9},
++      {"KEY_RIGHTCTRL", KEY_RIGHTCTRL},
++      {(char*)0}, {(char*)0},
++      {"KEY_KBDILLUMDOWN", KEY_KBDILLUMDOWN},
++      {(char*)0}, {(char*)0},
++      {"KEY_102ND", KEY_102ND},
++      {"KEY_CONFIG", KEY_CONFIG},
++      {"KEY_KPSLASH", KEY_KPSLASH},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0},
++      {"KEY_MENU", KEY_MENU},
++      {(char*)0},
++      {"KEY_ZOOMIN", KEY_ZOOMIN},
++      {"KEY_HANGEUL", KEY_HANGEUL},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0},
++      {"KEY_NUMERIC_8", KEY_NUMERIC_8},
++      {"KEY_HANJA", KEY_HANJA},
++      {"KEY_POWER2", KEY_POWER2},
++      {(char*)0}, {(char*)0},
++      {"KEY_DOWN", KEY_DOWN},
++      {(char*)0},
++      {"KEY_HENKAN", KEY_HENKAN},
++      {(char*)0}, {(char*)0},
++      {"KEY_TWEN", KEY_TWEN},
++      {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_MP3", KEY_MP3},
++      {"KEY_FN_E", KEY_FN_E},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_NUMERIC_1", KEY_NUMERIC_1},
++      {(char*)0}, {(char*)0},
++      {"KEY_PREVIOUSSONG", KEY_PREVIOUSSONG},
++      {"KEY_MUHENKAN", KEY_MUHENKAN},
++      {"KEY_FN_D", KEY_FN_D},
++      {"KEY_GRAVE", KEY_GRAVE},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0},
++      {"KEY_NUMERIC_3", KEY_NUMERIC_3},
++      {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_KP8", KEY_KP8},
++      {"KEY_ZOOM", KEY_ZOOM},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_NUMERIC_4", KEY_NUMERIC_4},
++      {(char*)0},
++      {"KEY_Y", KEY_Y},
++      {(char*)0}, {(char*)0},
++      {"KEY_FN_S", KEY_FN_S},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0},
++      {"KEY_6", KEY_6},
++      {"KEY_F8", KEY_F8},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0},
++      {"KEY_UNKNOWN", KEY_UNKNOWN},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0},
++      {"KEY_FRAMEBACK", KEY_FRAMEBACK},
++      {(char*)0},
++      {"KEY_5", KEY_5},
++      {(char*)0},
++      {"KEY_KP1", KEY_KP1},
++      {(char*)0}, {(char*)0},
++      {"KEY_FN_ESC", KEY_FN_ESC},
++      {(char*)0}, {(char*)0},
++      {"KEY_NUMERIC_7", KEY_NUMERIC_7},
++      {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_F22", KEY_F22},
++      {"KEY_BLUETOOTH", KEY_BLUETOOTH},
++      {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_BRL_DOT2", KEY_BRL_DOT2},
++      {"KEY_VOICEMAIL", KEY_VOICEMAIL},
++      {(char*)0}, {(char*)0},
++      {"KEY_F1", KEY_F1},
++      {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_RFKILL", KEY_RFKILL},
++      {"KEY_SHUFFLE", KEY_SHUFFLE},
++      {(char*)0},
++      {"KEY_BRL_DOT10", KEY_BRL_DOT10},
++      {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_F20", KEY_F20},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_Z", KEY_Z},
++      {(char*)0},
++      {"KEY_KP3", KEY_KP3},
++      {(char*)0}, {(char*)0},
++      {"KEY_WAKEUP", KEY_WAKEUP},
++      {(char*)0}, {(char*)0},
++      {"KEY_BACKSLASH", KEY_BACKSLASH},
++      {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_TV2", KEY_TV2},
++      {"KEY_BACK", KEY_BACK},
++      {(char*)0}, {(char*)0},
++      {"KEY_FORWARD", KEY_FORWARD},
++      {(char*)0},
++      {"KEY_WLAN", KEY_WLAN},
++      {(char*)0}, {(char*)0},
++      {"KEY_F3", KEY_F3},
++      {"KEY_KP4", KEY_KP4},
++      {(char*)0},
++      {"KEY_WIMAX", KEY_WIMAX},
++      {(char*)0},
++      {"KEY_NUMLOCK", KEY_NUMLOCK},
++      {"KEY_KEYBOARD", KEY_KEYBOARD},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0},
++      {"KEY_NUMERIC_6", KEY_NUMERIC_6},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_F4", KEY_F4},
++      {"KEY_BRL_DOT8", KEY_BRL_DOT8},
++      {"KEY_NUMERIC_5", KEY_NUMERIC_5},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_COPY", KEY_COPY},
++      {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_VOLUMEUP", KEY_VOLUMEUP},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_F12", KEY_F12},
++      {"KEY_FAVORITES", KEY_FAVORITES},
++      {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_BRL_DOT1", KEY_BRL_DOT1},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0},
++      {"KEY_VCR2", KEY_VCR2},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_F10", KEY_F10},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_BRL_DOT3", KEY_BRL_DOT3},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0},
++      {"KEY_BRL_DOT4", KEY_BRL_DOT4},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0},
++      {"KEY_KP7", KEY_KP7},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_PLAY", KEY_PLAY},
++      {"KEY_VOLUMEDOWN", KEY_VOLUMEDOWN},
++      {(char*)0},
++      {"KEY_F7", KEY_F7},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_WPS_BUTTON", KEY_WPS_BUTTON},
++      {"KEY_FORWARDMAIL", KEY_FORWARDMAIL},
++      {(char*)0},
++      {"KEY_BRL_DOT7", KEY_BRL_DOT7},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0},
++      {"KEY_F21", KEY_F21},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_V", KEY_V},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0},
++      {"KEY_W", KEY_W},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_TV", KEY_TV},
++      {(char*)0},
++      {"KEY_ZENKAKUHANKAKU", KEY_ZENKAKUHANKAKU},
++      {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_F23", KEY_F23},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_F18", KEY_F18},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0},
++      {"KEY_BRL_DOT6", KEY_BRL_DOT6},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_F24", KEY_F24},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_BRL_DOT5", KEY_BRL_DOT5},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0},
++      {"KEY_FN_2", KEY_FN_2},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0},
++      {"KEY_F11", KEY_F11},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_KP6", KEY_KP6},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0},
++      {"KEY_FN_F9", KEY_FN_F9},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_F6", KEY_F6},
++      {"KEY_KP5", KEY_KP5},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_NEW", KEY_NEW},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0},
++      {"KEY_F13", KEY_F13},
++      {(char*)0},
++      {"KEY_VIDEO_PREV", KEY_VIDEO_PREV},
++      {(char*)0},
++      {"KEY_F5", KEY_F5},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_YELLOW", KEY_YELLOW},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0},
++      {"KEY_F14", KEY_F14},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_UWB", KEY_UWB},
++      {"KEY_FN_B", KEY_FN_B},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_SLOW", KEY_SLOW},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0},
++      {"KEY_FN_F2", KEY_FN_F2},
++      {"KEY_FN_F12", KEY_FN_F12},
++      {(char*)0},
++      {"KEY_F17", KEY_F17},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_FN_F10", KEY_FN_F10},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_FN_1", KEY_FN_1},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0},
++      {"KEY_FN_F8", KEY_FN_F8},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_FN_F1", KEY_FN_F1},
++      {"KEY_FN_F11", KEY_FN_F11},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0},
++      {"KEY_FN_F3", KEY_FN_F3},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0},
++      {"KEY_FN_F4", KEY_FN_F4},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0},
++      {"KEY_F16", KEY_F16},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_FN_F", KEY_FN_F},
++      {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_F15", KEY_F15},
++      {(char*)0},
++      {"KEY_FN_F7", KEY_FN_F7},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_FN_F6", KEY_FN_F6},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0},
++      {"KEY_FN_F5", KEY_FN_F5},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
++      {(char*)0}, {(char*)0}, {(char*)0},
++      {"KEY_WWW", KEY_WWW}
++    };
++
++  if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
++    {
++      register int key = hash_key_name (str, len);
++
++      if (key <= MAX_HASH_VALUE && key >= 0)
++        {
++          register const char *s = wordlist[key].name;
++
++          if (s && (((unsigned char)*str ^ (unsigned char)*s) & ~32) == 0 && !gperf_case_strcmp (str, s))
++            return &wordlist[key];
++        }
++    }
++  return 0;
++}
+diff -urN udev-145-orig/extras/keymap/keys-to-name.h udev-145/extras/keymap/keys-to-name.h
+--- udev-145-orig/extras/keymap/keys-to-name.h	1970-01-01 01:00:00.000000000 +0100
++++ udev-145/extras/keymap/keys-to-name.h	2010-08-11 15:14:10.000000000 +0200
+@@ -0,0 +1,381 @@
++const char* const key_names[KEY_CNT] = { 
++[KEY_RESERVED] = "KEY_RESERVED",
++[KEY_ESC] = "KEY_ESC",
++[KEY_1] = "KEY_1",
++[KEY_2] = "KEY_2",
++[KEY_3] = "KEY_3",
++[KEY_4] = "KEY_4",
++[KEY_5] = "KEY_5",
++[KEY_6] = "KEY_6",
++[KEY_7] = "KEY_7",
++[KEY_8] = "KEY_8",
++[KEY_9] = "KEY_9",
++[KEY_0] = "KEY_0",
++[KEY_MINUS] = "KEY_MINUS",
++[KEY_EQUAL] = "KEY_EQUAL",
++[KEY_BACKSPACE] = "KEY_BACKSPACE",
++[KEY_TAB] = "KEY_TAB",
++[KEY_Q] = "KEY_Q",
++[KEY_W] = "KEY_W",
++[KEY_E] = "KEY_E",
++[KEY_R] = "KEY_R",
++[KEY_T] = "KEY_T",
++[KEY_Y] = "KEY_Y",
++[KEY_U] = "KEY_U",
++[KEY_I] = "KEY_I",
++[KEY_O] = "KEY_O",
++[KEY_P] = "KEY_P",
++[KEY_LEFTBRACE] = "KEY_LEFTBRACE",
++[KEY_RIGHTBRACE] = "KEY_RIGHTBRACE",
++[KEY_ENTER] = "KEY_ENTER",
++[KEY_LEFTCTRL] = "KEY_LEFTCTRL",
++[KEY_A] = "KEY_A",
++[KEY_S] = "KEY_S",
++[KEY_D] = "KEY_D",
++[KEY_F] = "KEY_F",
++[KEY_G] = "KEY_G",
++[KEY_H] = "KEY_H",
++[KEY_J] = "KEY_J",
++[KEY_K] = "KEY_K",
++[KEY_L] = "KEY_L",
++[KEY_SEMICOLON] = "KEY_SEMICOLON",
++[KEY_APOSTROPHE] = "KEY_APOSTROPHE",
++[KEY_GRAVE] = "KEY_GRAVE",
++[KEY_LEFTSHIFT] = "KEY_LEFTSHIFT",
++[KEY_BACKSLASH] = "KEY_BACKSLASH",
++[KEY_Z] = "KEY_Z",
++[KEY_X] = "KEY_X",
++[KEY_C] = "KEY_C",
++[KEY_V] = "KEY_V",
++[KEY_B] = "KEY_B",
++[KEY_N] = "KEY_N",
++[KEY_M] = "KEY_M",
++[KEY_COMMA] = "KEY_COMMA",
++[KEY_DOT] = "KEY_DOT",
++[KEY_SLASH] = "KEY_SLASH",
++[KEY_RIGHTSHIFT] = "KEY_RIGHTSHIFT",
++[KEY_KPASTERISK] = "KEY_KPASTERISK",
++[KEY_LEFTALT] = "KEY_LEFTALT",
++[KEY_SPACE] = "KEY_SPACE",
++[KEY_CAPSLOCK] = "KEY_CAPSLOCK",
++[KEY_F1] = "KEY_F1",
++[KEY_F2] = "KEY_F2",
++[KEY_F3] = "KEY_F3",
++[KEY_F4] = "KEY_F4",
++[KEY_F5] = "KEY_F5",
++[KEY_F6] = "KEY_F6",
++[KEY_F7] = "KEY_F7",
++[KEY_F8] = "KEY_F8",
++[KEY_F9] = "KEY_F9",
++[KEY_F10] = "KEY_F10",
++[KEY_NUMLOCK] = "KEY_NUMLOCK",
++[KEY_SCROLLLOCK] = "KEY_SCROLLLOCK",
++[KEY_KP7] = "KEY_KP7",
++[KEY_KP8] = "KEY_KP8",
++[KEY_KP9] = "KEY_KP9",
++[KEY_KPMINUS] = "KEY_KPMINUS",
++[KEY_KP4] = "KEY_KP4",
++[KEY_KP5] = "KEY_KP5",
++[KEY_KP6] = "KEY_KP6",
++[KEY_KPPLUS] = "KEY_KPPLUS",
++[KEY_KP1] = "KEY_KP1",
++[KEY_KP2] = "KEY_KP2",
++[KEY_KP3] = "KEY_KP3",
++[KEY_KP0] = "KEY_KP0",
++[KEY_KPDOT] = "KEY_KPDOT",
++[KEY_ZENKAKUHANKAKU] = "KEY_ZENKAKUHANKAKU",
++[KEY_102ND] = "KEY_102ND",
++[KEY_F11] = "KEY_F11",
++[KEY_F12] = "KEY_F12",
++[KEY_RO] = "KEY_RO",
++[KEY_KATAKANA] = "KEY_KATAKANA",
++[KEY_HIRAGANA] = "KEY_HIRAGANA",
++[KEY_HENKAN] = "KEY_HENKAN",
++[KEY_KATAKANAHIRAGANA] = "KEY_KATAKANAHIRAGANA",
++[KEY_MUHENKAN] = "KEY_MUHENKAN",
++[KEY_KPJPCOMMA] = "KEY_KPJPCOMMA",
++[KEY_KPENTER] = "KEY_KPENTER",
++[KEY_RIGHTCTRL] = "KEY_RIGHTCTRL",
++[KEY_KPSLASH] = "KEY_KPSLASH",
++[KEY_SYSRQ] = "KEY_SYSRQ",
++[KEY_RIGHTALT] = "KEY_RIGHTALT",
++[KEY_LINEFEED] = "KEY_LINEFEED",
++[KEY_HOME] = "KEY_HOME",
++[KEY_UP] = "KEY_UP",
++[KEY_PAGEUP] = "KEY_PAGEUP",
++[KEY_LEFT] = "KEY_LEFT",
++[KEY_RIGHT] = "KEY_RIGHT",
++[KEY_END] = "KEY_END",
++[KEY_DOWN] = "KEY_DOWN",
++[KEY_PAGEDOWN] = "KEY_PAGEDOWN",
++[KEY_INSERT] = "KEY_INSERT",
++[KEY_DELETE] = "KEY_DELETE",
++[KEY_MACRO] = "KEY_MACRO",
++[KEY_MUTE] = "KEY_MUTE",
++[KEY_VOLUMEDOWN] = "KEY_VOLUMEDOWN",
++[KEY_VOLUMEUP] = "KEY_VOLUMEUP",
++[KEY_POWER] = "KEY_POWER",
++[KEY_KPEQUAL] = "KEY_KPEQUAL",
++[KEY_KPPLUSMINUS] = "KEY_KPPLUSMINUS",
++[KEY_PAUSE] = "KEY_PAUSE",
++[KEY_SCALE] = "KEY_SCALE",
++[KEY_KPCOMMA] = "KEY_KPCOMMA",
++[KEY_HANGEUL] = "KEY_HANGEUL",
++[KEY_HANJA] = "KEY_HANJA",
++[KEY_YEN] = "KEY_YEN",
++[KEY_LEFTMETA] = "KEY_LEFTMETA",
++[KEY_RIGHTMETA] = "KEY_RIGHTMETA",
++[KEY_COMPOSE] = "KEY_COMPOSE",
++[KEY_STOP] = "KEY_STOP",
++[KEY_AGAIN] = "KEY_AGAIN",
++[KEY_PROPS] = "KEY_PROPS",
++[KEY_UNDO] = "KEY_UNDO",
++[KEY_FRONT] = "KEY_FRONT",
++[KEY_COPY] = "KEY_COPY",
++[KEY_OPEN] = "KEY_OPEN",
++[KEY_PASTE] = "KEY_PASTE",
++[KEY_FIND] = "KEY_FIND",
++[KEY_CUT] = "KEY_CUT",
++[KEY_HELP] = "KEY_HELP",
++[KEY_MENU] = "KEY_MENU",
++[KEY_CALC] = "KEY_CALC",
++[KEY_SETUP] = "KEY_SETUP",
++[KEY_SLEEP] = "KEY_SLEEP",
++[KEY_WAKEUP] = "KEY_WAKEUP",
++[KEY_FILE] = "KEY_FILE",
++[KEY_SENDFILE] = "KEY_SENDFILE",
++[KEY_DELETEFILE] = "KEY_DELETEFILE",
++[KEY_XFER] = "KEY_XFER",
++[KEY_PROG1] = "KEY_PROG1",
++[KEY_PROG2] = "KEY_PROG2",
++[KEY_WWW] = "KEY_WWW",
++[KEY_MSDOS] = "KEY_MSDOS",
++[KEY_SCREENLOCK] = "KEY_SCREENLOCK",
++[KEY_DIRECTION] = "KEY_DIRECTION",
++[KEY_CYCLEWINDOWS] = "KEY_CYCLEWINDOWS",
++[KEY_MAIL] = "KEY_MAIL",
++[KEY_BOOKMARKS] = "KEY_BOOKMARKS",
++[KEY_COMPUTER] = "KEY_COMPUTER",
++[KEY_BACK] = "KEY_BACK",
++[KEY_FORWARD] = "KEY_FORWARD",
++[KEY_CLOSECD] = "KEY_CLOSECD",
++[KEY_EJECTCD] = "KEY_EJECTCD",
++[KEY_EJECTCLOSECD] = "KEY_EJECTCLOSECD",
++[KEY_NEXTSONG] = "KEY_NEXTSONG",
++[KEY_PLAYPAUSE] = "KEY_PLAYPAUSE",
++[KEY_PREVIOUSSONG] = "KEY_PREVIOUSSONG",
++[KEY_STOPCD] = "KEY_STOPCD",
++[KEY_RECORD] = "KEY_RECORD",
++[KEY_REWIND] = "KEY_REWIND",
++[KEY_PHONE] = "KEY_PHONE",
++[KEY_ISO] = "KEY_ISO",
++[KEY_CONFIG] = "KEY_CONFIG",
++[KEY_HOMEPAGE] = "KEY_HOMEPAGE",
++[KEY_REFRESH] = "KEY_REFRESH",
++[KEY_EXIT] = "KEY_EXIT",
++[KEY_MOVE] = "KEY_MOVE",
++[KEY_EDIT] = "KEY_EDIT",
++[KEY_SCROLLUP] = "KEY_SCROLLUP",
++[KEY_SCROLLDOWN] = "KEY_SCROLLDOWN",
++[KEY_KPLEFTPAREN] = "KEY_KPLEFTPAREN",
++[KEY_KPRIGHTPAREN] = "KEY_KPRIGHTPAREN",
++[KEY_NEW] = "KEY_NEW",
++[KEY_REDO] = "KEY_REDO",
++[KEY_F13] = "KEY_F13",
++[KEY_F14] = "KEY_F14",
++[KEY_F15] = "KEY_F15",
++[KEY_F16] = "KEY_F16",
++[KEY_F17] = "KEY_F17",
++[KEY_F18] = "KEY_F18",
++[KEY_F19] = "KEY_F19",
++[KEY_F20] = "KEY_F20",
++[KEY_F21] = "KEY_F21",
++[KEY_F22] = "KEY_F22",
++[KEY_F23] = "KEY_F23",
++[KEY_F24] = "KEY_F24",
++[KEY_PLAYCD] = "KEY_PLAYCD",
++[KEY_PAUSECD] = "KEY_PAUSECD",
++[KEY_PROG3] = "KEY_PROG3",
++[KEY_PROG4] = "KEY_PROG4",
++[KEY_DASHBOARD] = "KEY_DASHBOARD",
++[KEY_SUSPEND] = "KEY_SUSPEND",
++[KEY_CLOSE] = "KEY_CLOSE",
++[KEY_PLAY] = "KEY_PLAY",
++[KEY_FASTFORWARD] = "KEY_FASTFORWARD",
++[KEY_BASSBOOST] = "KEY_BASSBOOST",
++[KEY_PRINT] = "KEY_PRINT",
++[KEY_HP] = "KEY_HP",
++[KEY_CAMERA] = "KEY_CAMERA",
++[KEY_SOUND] = "KEY_SOUND",
++[KEY_QUESTION] = "KEY_QUESTION",
++[KEY_EMAIL] = "KEY_EMAIL",
++[KEY_CHAT] = "KEY_CHAT",
++[KEY_SEARCH] = "KEY_SEARCH",
++[KEY_CONNECT] = "KEY_CONNECT",
++[KEY_FINANCE] = "KEY_FINANCE",
++[KEY_SPORT] = "KEY_SPORT",
++[KEY_SHOP] = "KEY_SHOP",
++[KEY_ALTERASE] = "KEY_ALTERASE",
++[KEY_CANCEL] = "KEY_CANCEL",
++[KEY_BRIGHTNESSDOWN] = "KEY_BRIGHTNESSDOWN",
++[KEY_BRIGHTNESSUP] = "KEY_BRIGHTNESSUP",
++[KEY_MEDIA] = "KEY_MEDIA",
++[KEY_SWITCHVIDEOMODE] = "KEY_SWITCHVIDEOMODE",
++[KEY_KBDILLUMTOGGLE] = "KEY_KBDILLUMTOGGLE",
++[KEY_KBDILLUMDOWN] = "KEY_KBDILLUMDOWN",
++[KEY_KBDILLUMUP] = "KEY_KBDILLUMUP",
++[KEY_SEND] = "KEY_SEND",
++[KEY_REPLY] = "KEY_REPLY",
++[KEY_FORWARDMAIL] = "KEY_FORWARDMAIL",
++[KEY_SAVE] = "KEY_SAVE",
++[KEY_DOCUMENTS] = "KEY_DOCUMENTS",
++[KEY_BATTERY] = "KEY_BATTERY",
++[KEY_BLUETOOTH] = "KEY_BLUETOOTH",
++[KEY_WLAN] = "KEY_WLAN",
++[KEY_UWB] = "KEY_UWB",
++[KEY_UNKNOWN] = "KEY_UNKNOWN",
++[KEY_VIDEO_NEXT] = "KEY_VIDEO_NEXT",
++[KEY_VIDEO_PREV] = "KEY_VIDEO_PREV",
++[KEY_BRIGHTNESS_CYCLE] = "KEY_BRIGHTNESS_CYCLE",
++[KEY_BRIGHTNESS_ZERO] = "KEY_BRIGHTNESS_ZERO",
++[KEY_DISPLAY_OFF] = "KEY_DISPLAY_OFF",
++[KEY_WIMAX] = "KEY_WIMAX",
++[KEY_RFKILL] = "KEY_RFKILL",
++[KEY_OK] = "KEY_OK",
++[KEY_SELECT] = "KEY_SELECT",
++[KEY_GOTO] = "KEY_GOTO",
++[KEY_CLEAR] = "KEY_CLEAR",
++[KEY_POWER2] = "KEY_POWER2",
++[KEY_OPTION] = "KEY_OPTION",
++[KEY_INFO] = "KEY_INFO",
++[KEY_TIME] = "KEY_TIME",
++[KEY_VENDOR] = "KEY_VENDOR",
++[KEY_ARCHIVE] = "KEY_ARCHIVE",
++[KEY_PROGRAM] = "KEY_PROGRAM",
++[KEY_CHANNEL] = "KEY_CHANNEL",
++[KEY_FAVORITES] = "KEY_FAVORITES",
++[KEY_EPG] = "KEY_EPG",
++[KEY_PVR] = "KEY_PVR",
++[KEY_MHP] = "KEY_MHP",
++[KEY_LANGUAGE] = "KEY_LANGUAGE",
++[KEY_TITLE] = "KEY_TITLE",
++[KEY_SUBTITLE] = "KEY_SUBTITLE",
++[KEY_ANGLE] = "KEY_ANGLE",
++[KEY_ZOOM] = "KEY_ZOOM",
++[KEY_MODE] = "KEY_MODE",
++[KEY_KEYBOARD] = "KEY_KEYBOARD",
++[KEY_SCREEN] = "KEY_SCREEN",
++[KEY_PC] = "KEY_PC",
++[KEY_TV] = "KEY_TV",
++[KEY_TV2] = "KEY_TV2",
++[KEY_VCR] = "KEY_VCR",
++[KEY_VCR2] = "KEY_VCR2",
++[KEY_SAT] = "KEY_SAT",
++[KEY_SAT2] = "KEY_SAT2",
++[KEY_CD] = "KEY_CD",
++[KEY_TAPE] = "KEY_TAPE",
++[KEY_RADIO] = "KEY_RADIO",
++[KEY_TUNER] = "KEY_TUNER",
++[KEY_PLAYER] = "KEY_PLAYER",
++[KEY_TEXT] = "KEY_TEXT",
++[KEY_DVD] = "KEY_DVD",
++[KEY_AUX] = "KEY_AUX",
++[KEY_MP3] = "KEY_MP3",
++[KEY_AUDIO] = "KEY_AUDIO",
++[KEY_VIDEO] = "KEY_VIDEO",
++[KEY_DIRECTORY] = "KEY_DIRECTORY",
++[KEY_LIST] = "KEY_LIST",
++[KEY_MEMO] = "KEY_MEMO",
++[KEY_CALENDAR] = "KEY_CALENDAR",
++[KEY_RED] = "KEY_RED",
++[KEY_GREEN] = "KEY_GREEN",
++[KEY_YELLOW] = "KEY_YELLOW",
++[KEY_BLUE] = "KEY_BLUE",
++[KEY_CHANNELUP] = "KEY_CHANNELUP",
++[KEY_CHANNELDOWN] = "KEY_CHANNELDOWN",
++[KEY_FIRST] = "KEY_FIRST",
++[KEY_LAST] = "KEY_LAST",
++[KEY_AB] = "KEY_AB",
++[KEY_NEXT] = "KEY_NEXT",
++[KEY_RESTART] = "KEY_RESTART",
++[KEY_SLOW] = "KEY_SLOW",
++[KEY_SHUFFLE] = "KEY_SHUFFLE",
++[KEY_BREAK] = "KEY_BREAK",
++[KEY_PREVIOUS] = "KEY_PREVIOUS",
++[KEY_DIGITS] = "KEY_DIGITS",
++[KEY_TEEN] = "KEY_TEEN",
++[KEY_TWEN] = "KEY_TWEN",
++[KEY_VIDEOPHONE] = "KEY_VIDEOPHONE",
++[KEY_GAMES] = "KEY_GAMES",
++[KEY_ZOOMIN] = "KEY_ZOOMIN",
++[KEY_ZOOMOUT] = "KEY_ZOOMOUT",
++[KEY_ZOOMRESET] = "KEY_ZOOMRESET",
++[KEY_WORDPROCESSOR] = "KEY_WORDPROCESSOR",
++[KEY_EDITOR] = "KEY_EDITOR",
++[KEY_SPREADSHEET] = "KEY_SPREADSHEET",
++[KEY_GRAPHICSEDITOR] = "KEY_GRAPHICSEDITOR",
++[KEY_PRESENTATION] = "KEY_PRESENTATION",
++[KEY_DATABASE] = "KEY_DATABASE",
++[KEY_NEWS] = "KEY_NEWS",
++[KEY_VOICEMAIL] = "KEY_VOICEMAIL",
++[KEY_ADDRESSBOOK] = "KEY_ADDRESSBOOK",
++[KEY_MESSENGER] = "KEY_MESSENGER",
++[KEY_DISPLAYTOGGLE] = "KEY_DISPLAYTOGGLE",
++[KEY_SPELLCHECK] = "KEY_SPELLCHECK",
++[KEY_LOGOFF] = "KEY_LOGOFF",
++[KEY_DOLLAR] = "KEY_DOLLAR",
++[KEY_EURO] = "KEY_EURO",
++[KEY_FRAMEBACK] = "KEY_FRAMEBACK",
++[KEY_FRAMEFORWARD] = "KEY_FRAMEFORWARD",
++[KEY_CONTEXT_MENU] = "KEY_CONTEXT_MENU",
++[KEY_MEDIA_REPEAT] = "KEY_MEDIA_REPEAT",
++[KEY_DEL_EOL] = "KEY_DEL_EOL",
++[KEY_DEL_EOS] = "KEY_DEL_EOS",
++[KEY_INS_LINE] = "KEY_INS_LINE",
++[KEY_DEL_LINE] = "KEY_DEL_LINE",
++[KEY_FN] = "KEY_FN",
++[KEY_FN_ESC] = "KEY_FN_ESC",
++[KEY_FN_F1] = "KEY_FN_F1",
++[KEY_FN_F2] = "KEY_FN_F2",
++[KEY_FN_F3] = "KEY_FN_F3",
++[KEY_FN_F4] = "KEY_FN_F4",
++[KEY_FN_F5] = "KEY_FN_F5",
++[KEY_FN_F6] = "KEY_FN_F6",
++[KEY_FN_F7] = "KEY_FN_F7",
++[KEY_FN_F8] = "KEY_FN_F8",
++[KEY_FN_F9] = "KEY_FN_F9",
++[KEY_FN_F10] = "KEY_FN_F10",
++[KEY_FN_F11] = "KEY_FN_F11",
++[KEY_FN_F12] = "KEY_FN_F12",
++[KEY_FN_1] = "KEY_FN_1",
++[KEY_FN_2] = "KEY_FN_2",
++[KEY_FN_D] = "KEY_FN_D",
++[KEY_FN_E] = "KEY_FN_E",
++[KEY_FN_F] = "KEY_FN_F",
++[KEY_FN_S] = "KEY_FN_S",
++[KEY_FN_B] = "KEY_FN_B",
++[KEY_BRL_DOT1] = "KEY_BRL_DOT1",
++[KEY_BRL_DOT2] = "KEY_BRL_DOT2",
++[KEY_BRL_DOT3] = "KEY_BRL_DOT3",
++[KEY_BRL_DOT4] = "KEY_BRL_DOT4",
++[KEY_BRL_DOT5] = "KEY_BRL_DOT5",
++[KEY_BRL_DOT6] = "KEY_BRL_DOT6",
++[KEY_BRL_DOT7] = "KEY_BRL_DOT7",
++[KEY_BRL_DOT8] = "KEY_BRL_DOT8",
++[KEY_BRL_DOT9] = "KEY_BRL_DOT9",
++[KEY_BRL_DOT10] = "KEY_BRL_DOT10",
++[KEY_NUMERIC_0] = "KEY_NUMERIC_0",
++[KEY_NUMERIC_1] = "KEY_NUMERIC_1",
++[KEY_NUMERIC_2] = "KEY_NUMERIC_2",
++[KEY_NUMERIC_3] = "KEY_NUMERIC_3",
++[KEY_NUMERIC_4] = "KEY_NUMERIC_4",
++[KEY_NUMERIC_5] = "KEY_NUMERIC_5",
++[KEY_NUMERIC_6] = "KEY_NUMERIC_6",
++[KEY_NUMERIC_7] = "KEY_NUMERIC_7",
++[KEY_NUMERIC_8] = "KEY_NUMERIC_8",
++[KEY_NUMERIC_9] = "KEY_NUMERIC_9",
++[KEY_NUMERIC_STAR] = "KEY_NUMERIC_STAR",
++[KEY_NUMERIC_POUND] = "KEY_NUMERIC_POUND",
++[KEY_CAMERA_FOCUS] = "KEY_CAMERA_FOCUS",
++[KEY_WPS_BUTTON] = "KEY_WPS_BUTTON",
++};
+diff -urN udev-145-orig/extras/keymap/keys.txt udev-145/extras/keymap/keys.txt
+--- udev-145-orig/extras/keymap/keys.txt	1970-01-01 01:00:00.000000000 +0100
++++ udev-145/extras/keymap/keys.txt	2010-08-10 16:45:45.000000000 +0200
+@@ -0,0 +1,379 @@
++KEY_RESERVED
++KEY_ESC
++KEY_1
++KEY_2
++KEY_3
++KEY_4
++KEY_5
++KEY_6
++KEY_7
++KEY_8
++KEY_9
++KEY_0
++KEY_MINUS
++KEY_EQUAL
++KEY_BACKSPACE
++KEY_TAB
++KEY_Q
++KEY_W
++KEY_E
++KEY_R
++KEY_T
++KEY_Y
++KEY_U
++KEY_I
++KEY_O
++KEY_P
++KEY_LEFTBRACE
++KEY_RIGHTBRACE
++KEY_ENTER
++KEY_LEFTCTRL
++KEY_A
++KEY_S
++KEY_D
++KEY_F
++KEY_G
++KEY_H
++KEY_J
++KEY_K
++KEY_L
++KEY_SEMICOLON
++KEY_APOSTROPHE
++KEY_GRAVE
++KEY_LEFTSHIFT
++KEY_BACKSLASH
++KEY_Z
++KEY_X
++KEY_C
++KEY_V
++KEY_B
++KEY_N
++KEY_M
++KEY_COMMA
++KEY_DOT
++KEY_SLASH
++KEY_RIGHTSHIFT
++KEY_KPASTERISK
++KEY_LEFTALT
++KEY_SPACE
++KEY_CAPSLOCK
++KEY_F1
++KEY_F2
++KEY_F3
++KEY_F4
++KEY_F5
++KEY_F6
++KEY_F7
++KEY_F8
++KEY_F9
++KEY_F10
++KEY_NUMLOCK
++KEY_SCROLLLOCK
++KEY_KP7
++KEY_KP8
++KEY_KP9
++KEY_KPMINUS
++KEY_KP4
++KEY_KP5
++KEY_KP6
++KEY_KPPLUS
++KEY_KP1
++KEY_KP2
++KEY_KP3
++KEY_KP0
++KEY_KPDOT
++KEY_ZENKAKUHANKAKU
++KEY_102ND
++KEY_F11
++KEY_F12
++KEY_RO
++KEY_KATAKANA
++KEY_HIRAGANA
++KEY_HENKAN
++KEY_KATAKANAHIRAGANA
++KEY_MUHENKAN
++KEY_KPJPCOMMA
++KEY_KPENTER
++KEY_RIGHTCTRL
++KEY_KPSLASH
++KEY_SYSRQ
++KEY_RIGHTALT
++KEY_LINEFEED
++KEY_HOME
++KEY_UP
++KEY_PAGEUP
++KEY_LEFT
++KEY_RIGHT
++KEY_END
++KEY_DOWN
++KEY_PAGEDOWN
++KEY_INSERT
++KEY_DELETE
++KEY_MACRO
++KEY_MUTE
++KEY_VOLUMEDOWN
++KEY_VOLUMEUP
++KEY_POWER
++KEY_KPEQUAL
++KEY_KPPLUSMINUS
++KEY_PAUSE
++KEY_SCALE
++KEY_KPCOMMA
++KEY_HANGEUL
++KEY_HANJA
++KEY_YEN
++KEY_LEFTMETA
++KEY_RIGHTMETA
++KEY_COMPOSE
++KEY_STOP
++KEY_AGAIN
++KEY_PROPS
++KEY_UNDO
++KEY_FRONT
++KEY_COPY
++KEY_OPEN
++KEY_PASTE
++KEY_FIND
++KEY_CUT
++KEY_HELP
++KEY_MENU
++KEY_CALC
++KEY_SETUP
++KEY_SLEEP
++KEY_WAKEUP
++KEY_FILE
++KEY_SENDFILE
++KEY_DELETEFILE
++KEY_XFER
++KEY_PROG1
++KEY_PROG2
++KEY_WWW
++KEY_MSDOS
++KEY_SCREENLOCK
++KEY_DIRECTION
++KEY_CYCLEWINDOWS
++KEY_MAIL
++KEY_BOOKMARKS
++KEY_COMPUTER
++KEY_BACK
++KEY_FORWARD
++KEY_CLOSECD
++KEY_EJECTCD
++KEY_EJECTCLOSECD
++KEY_NEXTSONG
++KEY_PLAYPAUSE
++KEY_PREVIOUSSONG
++KEY_STOPCD
++KEY_RECORD
++KEY_REWIND
++KEY_PHONE
++KEY_ISO
++KEY_CONFIG
++KEY_HOMEPAGE
++KEY_REFRESH
++KEY_EXIT
++KEY_MOVE
++KEY_EDIT
++KEY_SCROLLUP
++KEY_SCROLLDOWN
++KEY_KPLEFTPAREN
++KEY_KPRIGHTPAREN
++KEY_NEW
++KEY_REDO
++KEY_F13
++KEY_F14
++KEY_F15
++KEY_F16
++KEY_F17
++KEY_F18
++KEY_F19
++KEY_F20
++KEY_F21
++KEY_F22
++KEY_F23
++KEY_F24
++KEY_PLAYCD
++KEY_PAUSECD
++KEY_PROG3
++KEY_PROG4
++KEY_DASHBOARD
++KEY_SUSPEND
++KEY_CLOSE
++KEY_PLAY
++KEY_FASTFORWARD
++KEY_BASSBOOST
++KEY_PRINT
++KEY_HP
++KEY_CAMERA
++KEY_SOUND
++KEY_QUESTION
++KEY_EMAIL
++KEY_CHAT
++KEY_SEARCH
++KEY_CONNECT
++KEY_FINANCE
++KEY_SPORT
++KEY_SHOP
++KEY_ALTERASE
++KEY_CANCEL
++KEY_BRIGHTNESSDOWN
++KEY_BRIGHTNESSUP
++KEY_MEDIA
++KEY_SWITCHVIDEOMODE
++KEY_KBDILLUMTOGGLE
++KEY_KBDILLUMDOWN
++KEY_KBDILLUMUP
++KEY_SEND
++KEY_REPLY
++KEY_FORWARDMAIL
++KEY_SAVE
++KEY_DOCUMENTS
++KEY_BATTERY
++KEY_BLUETOOTH
++KEY_WLAN
++KEY_UWB
++KEY_UNKNOWN
++KEY_VIDEO_NEXT
++KEY_VIDEO_PREV
++KEY_BRIGHTNESS_CYCLE
++KEY_BRIGHTNESS_ZERO
++KEY_DISPLAY_OFF
++KEY_WIMAX
++KEY_RFKILL
++KEY_OK
++KEY_SELECT
++KEY_GOTO
++KEY_CLEAR
++KEY_POWER2
++KEY_OPTION
++KEY_INFO
++KEY_TIME
++KEY_VENDOR
++KEY_ARCHIVE
++KEY_PROGRAM
++KEY_CHANNEL
++KEY_FAVORITES
++KEY_EPG
++KEY_PVR
++KEY_MHP
++KEY_LANGUAGE
++KEY_TITLE
++KEY_SUBTITLE
++KEY_ANGLE
++KEY_ZOOM
++KEY_MODE
++KEY_KEYBOARD
++KEY_SCREEN
++KEY_PC
++KEY_TV
++KEY_TV2
++KEY_VCR
++KEY_VCR2
++KEY_SAT
++KEY_SAT2
++KEY_CD
++KEY_TAPE
++KEY_RADIO
++KEY_TUNER
++KEY_PLAYER
++KEY_TEXT
++KEY_DVD
++KEY_AUX
++KEY_MP3
++KEY_AUDIO
++KEY_VIDEO
++KEY_DIRECTORY
++KEY_LIST
++KEY_MEMO
++KEY_CALENDAR
++KEY_RED
++KEY_GREEN
++KEY_YELLOW
++KEY_BLUE
++KEY_CHANNELUP
++KEY_CHANNELDOWN
++KEY_FIRST
++KEY_LAST
++KEY_AB
++KEY_NEXT
++KEY_RESTART
++KEY_SLOW
++KEY_SHUFFLE
++KEY_BREAK
++KEY_PREVIOUS
++KEY_DIGITS
++KEY_TEEN
++KEY_TWEN
++KEY_VIDEOPHONE
++KEY_GAMES
++KEY_ZOOMIN
++KEY_ZOOMOUT
++KEY_ZOOMRESET
++KEY_WORDPROCESSOR
++KEY_EDITOR
++KEY_SPREADSHEET
++KEY_GRAPHICSEDITOR
++KEY_PRESENTATION
++KEY_DATABASE
++KEY_NEWS
++KEY_VOICEMAIL
++KEY_ADDRESSBOOK
++KEY_MESSENGER
++KEY_DISPLAYTOGGLE
++KEY_SPELLCHECK
++KEY_LOGOFF
++KEY_DOLLAR
++KEY_EURO
++KEY_FRAMEBACK
++KEY_FRAMEFORWARD
++KEY_CONTEXT_MENU
++KEY_MEDIA_REPEAT
++KEY_DEL_EOL
++KEY_DEL_EOS
++KEY_INS_LINE
++KEY_DEL_LINE
++KEY_FN
++KEY_FN_ESC
++KEY_FN_F1
++KEY_FN_F2
++KEY_FN_F3
++KEY_FN_F4
++KEY_FN_F5
++KEY_FN_F6
++KEY_FN_F7
++KEY_FN_F8
++KEY_FN_F9
++KEY_FN_F10
++KEY_FN_F11
++KEY_FN_F12
++KEY_FN_1
++KEY_FN_2
++KEY_FN_D
++KEY_FN_E
++KEY_FN_F
++KEY_FN_S
++KEY_FN_B
++KEY_BRL_DOT1
++KEY_BRL_DOT2
++KEY_BRL_DOT3
++KEY_BRL_DOT4
++KEY_BRL_DOT5
++KEY_BRL_DOT6
++KEY_BRL_DOT7
++KEY_BRL_DOT8
++KEY_BRL_DOT9
++KEY_BRL_DOT10
++KEY_NUMERIC_0
++KEY_NUMERIC_1
++KEY_NUMERIC_2
++KEY_NUMERIC_3
++KEY_NUMERIC_4
++KEY_NUMERIC_5
++KEY_NUMERIC_6
++KEY_NUMERIC_7
++KEY_NUMERIC_8
++KEY_NUMERIC_9
++KEY_NUMERIC_STAR
++KEY_NUMERIC_POUND
++KEY_CAMERA_FOCUS
++KEY_WPS_BUTTON
+diff -urN udev-145-orig/extras/keymap/Makefile udev-145/extras/keymap/Makefile
+--- udev-145-orig/extras/keymap/Makefile	1970-01-01 01:00:00.000000000 +0100
++++ udev-145/extras/keymap/Makefile	2010-09-21 11:57:16.449750002 +0200
+@@ -0,0 +1,882 @@
++# Makefile.in generated by automake 1.11.1 from Makefile.am.
++# extras/keymap/Makefile.  Generated from Makefile.in by configure.
++
++# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
++# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
++# Inc.
++# This Makefile.in is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
++
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
++# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
++# PARTICULAR PURPOSE.
++
++
++
++
++
++
++pkgdatadir = $(datadir)/udev
++pkgincludedir = $(includedir)/udev
++pkglibdir = $(libdir)/udev
++pkglibexecdir = $(libexecdir)/udev
++am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
++install_sh_DATA = $(install_sh) -c -m 644
++install_sh_PROGRAM = $(install_sh) -c
++install_sh_SCRIPT = $(install_sh) -c
++INSTALL_HEADER = $(INSTALL_DATA)
++transform = $(program_transform_name)
++NORMAL_INSTALL = :
++PRE_INSTALL = :
++POST_INSTALL = :
++NORMAL_UNINSTALL = :
++PRE_UNINSTALL = :
++POST_UNINSTALL = :
++build_triplet = x86_64-unknown-linux-gnu
++host_triplet = x86_64-unknown-linux-gnu
++DIST_COMMON = $(dist_doc_DATA) $(dist_libexec_SCRIPTS) \
++	$(dist_udevrules_DATA) $(srcdir)/Makefile.am \
++	$(srcdir)/Makefile.in $(top_srcdir)/Makefile.am.inc
++libexec_PROGRAMS = keymap$(EXEEXT)
++subdir = extras/keymap
++ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
++am__aclocal_m4_deps = $(top_srcdir)/m4/gtk-doc.m4 \
++	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
++	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
++	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
++am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
++	$(ACLOCAL_M4)
++mkinstalldirs = $(install_sh) -d
++CONFIG_HEADER = $(top_builddir)/config.h
++CONFIG_CLEAN_FILES =
++CONFIG_CLEAN_VPATH_FILES =
++am__installdirs = "$(DESTDIR)$(libexecdir)" "$(DESTDIR)$(libexecdir)" \
++	"$(DESTDIR)$(docdir)" "$(DESTDIR)$(udevrulesdir)" \
++	"$(DESTDIR)$(udevkeymapdir)"
++PROGRAMS = $(libexec_PROGRAMS)
++am_keymap_OBJECTS = keymap-keymap.$(OBJEXT)
++nodist_keymap_OBJECTS =
++keymap_OBJECTS = $(am_keymap_OBJECTS) $(nodist_keymap_OBJECTS)
++keymap_LDADD = $(LDADD)
++AM_V_lt = $(am__v_lt_$(V))
++am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
++am__v_lt_0 = --silent
++am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
++am__vpath_adj = case $$p in \
++    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
++    *) f=$$p;; \
++  esac;
++am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
++am__install_max = 40
++am__nobase_strip_setup = \
++  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
++am__nobase_strip = \
++  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
++am__nobase_list = $(am__nobase_strip_setup); \
++  for p in $$list; do echo "$$p $$p"; done | \
++  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
++  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
++    if (++n[$$2] == $(am__install_max)) \
++      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
++    END { for (dir in files) print dir, files[dir] }'
++am__base_list = \
++  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
++  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
++SCRIPTS = $(dist_libexec_SCRIPTS)
++DEFAULT_INCLUDES = -I. -I$(top_builddir)
++depcomp = $(SHELL) $(top_srcdir)/depcomp
++am__depfiles_maybe = depfiles
++am__mv = mv -f
++COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
++	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
++LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
++	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
++	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
++	$(AM_CFLAGS) $(CFLAGS)
++AM_V_CC = $(am__v_CC_$(V))
++am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
++am__v_CC_0 = @echo "  CC    " $@;
++AM_V_at = $(am__v_at_$(V))
++am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
++am__v_at_0 = @
++CCLD = $(CC)
++LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
++	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
++	$(AM_LDFLAGS) $(LDFLAGS) -o $@
++AM_V_CCLD = $(am__v_CCLD_$(V))
++am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
++am__v_CCLD_0 = @echo "  CCLD  " $@;
++AM_V_GEN = $(am__v_GEN_$(V))
++am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
++am__v_GEN_0 = @echo "  GEN   " $@;
++SOURCES = $(keymap_SOURCES) $(nodist_keymap_SOURCES)
++DIST_SOURCES = $(keymap_SOURCES)
++DATA = $(dist_doc_DATA) $(dist_udevrules_DATA) $(udevkeymap_DATA)
++ETAGS = etags
++CTAGS = ctags
++am__tty_colors = \
++red=; grn=; lgn=; blu=; std=
++DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
++ACLOCAL = ${SHELL} /home/harald/git/fedora/harald/udev/f12/udev-145/missing --run aclocal-1.11
++AMTAR = ${SHELL} /home/harald/git/fedora/harald/udev/f12/udev-145/missing --run tar
++AM_DEFAULT_VERBOSITY = 0
++AR = ar
++AUTOCONF = ${SHELL} /home/harald/git/fedora/harald/udev/f12/udev-145/missing --run autoconf
++AUTOHEADER = ${SHELL} /home/harald/git/fedora/harald/udev/f12/udev-145/missing --run autoheader
++AUTOMAKE = ${SHELL} /home/harald/git/fedora/harald/udev/f12/udev-145/missing --run automake-1.11
++AWK = gawk
++CC = gcc
++CCDEPMODE = depmode=none
++CFLAGS = -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic
++CPP = gcc -E
++CPPFLAGS = 
++CYGPATH_W = echo
++DEFS = -DHAVE_CONFIG_H
++DEPDIR = .deps
++DSYMUTIL = 
++DUMPBIN = 
++ECHO_C = 
++ECHO_N = -n
++ECHO_T = 
++EGREP = /bin/grep -E
++EXEEXT = 
++FGREP = /bin/grep -F
++GIRDIR = /usr/share/gir-1.0
++GIRTYPELIBDIR = /usr/lib64/girepository-1.0
++GLIB_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include  
++GLIB_LIBS = -pthread -lgobject-2.0 -lgthread-2.0 -lrt -lglib-2.0  
++GPERF = /usr/bin/gperf
++GREP = /bin/grep
++GTKDOC_CHECK = /usr/bin/gtkdoc-check
++G_IR_COMPILER = /usr/bin/g-ir-compiler
++G_IR_GENERATE = /usr/bin/g-ir-generate
++G_IR_SCANNER = /usr/bin/g-ir-scanner
++HTML_DIR = ${datadir}/gtk-doc/html
++INSTALL = /usr/bin/install -c
++INSTALL_DATA = ${INSTALL} -m 644
++INSTALL_PROGRAM = ${INSTALL}
++INSTALL_SCRIPT = ${INSTALL}
++INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
++INTROSPECTION_CFLAGS = -pthread -I/usr/include/gobject-introspection-1.0 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/lib64/libffi-3.0.9/include  
++INTROSPECTION_LIBS = -Wl,--export-dynamic -pthread -lgirepository-1.0 -lgobject-2.0 -lgmodule-2.0 -lffi -lgthread-2.0 -lrt -lglib-2.0  
++LD = /usr/bin/ld -m elf_x86_64
++LDFLAGS = 
++LIBOBJS = 
++LIBS = 
++LIBTOOL = $(SHELL) $(top_builddir)/libtool
++LIBUSB_CFLAGS =  
++LIBUSB_LIBS = -lusb  
++LIPO = 
++LN_S = ln -s
++LTLIBOBJS = 
++MAKEINFO = ${SHELL} /home/harald/git/fedora/harald/udev/f12/udev-145/missing --run makeinfo
++MKDIR_P = /bin/mkdir -p
++NM = /usr/bin/nm -B
++NMEDIT = 
++OBJDUMP = objdump
++OBJEXT = o
++OTOOL = 
++OTOOL64 = 
++PACKAGE = udev
++PACKAGE_BUGREPORT = linux-hotplug at vger.kernel.org
++PACKAGE_NAME = udev
++PACKAGE_STRING = udev 145
++PACKAGE_TARNAME = udev
++PACKAGE_URL = 
++PACKAGE_VERSION = 145
++PATH_SEPARATOR = :
++PCI_DATABASE = /usr/share/hwdata/pci.ids
++PKG_CONFIG = /usr/bin/pkg-config
++PKG_CONFIG_LIBDIR = 
++PKG_CONFIG_PATH = /usr/lib64/pkgconfig:/usr/share/pkgconfig
++RANLIB = ranlib
++SED = /bin/sed
++SELINUX_LIBS = -lselinux -lsepol
++SET_MAKE = 
++SHELL = /bin/sh
++STRIP = strip
++USBUTILS_CFLAGS =  
++USBUTILS_LIBS =  
++USB_DATABASE = /usr/share/hwdata/usb.ids
++VERSION = 145
++XSLTPROC = /usr/bin/xsltproc
++abs_builddir = /home/harald/git/fedora/harald/udev/f12/udev-145/extras/keymap
++abs_srcdir = /home/harald/git/fedora/harald/udev/f12/udev-145/extras/keymap
++abs_top_builddir = /home/harald/git/fedora/harald/udev/f12/udev-145
++abs_top_srcdir = /home/harald/git/fedora/harald/udev/f12/udev-145
++ac_ct_CC = gcc
++ac_ct_DUMPBIN = 
++am__include = include
++am__leading_dot = .
++am__quote = 
++am__tar = ${AMTAR} chof - "$$tardir"
++am__untar = ${AMTAR} xf -
++bindir = /usr/bin
++build = x86_64-unknown-linux-gnu
++build_alias = x86_64-unknown-linux-gnu
++build_cpu = x86_64
++build_os = linux-gnu
++build_vendor = unknown
++builddir = .
++datadir = /usr/share
++datarootdir = ${prefix}/share
++docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
++dvidir = ${docdir}
++exec_prefix = 
++host = x86_64-unknown-linux-gnu
++host_alias = x86_64-unknown-linux-gnu
++host_cpu = x86_64
++host_os = linux-gnu
++host_vendor = unknown
++htmldir = ${docdir}
++includedir = /usr/include
++infodir = /usr/share/info
++install_sh = ${SHELL} /home/harald/git/fedora/harald/udev/f12/udev-145/install-sh
++libdir = /usr/lib64
++libexecdir = /lib/udev
++localedir = ${datarootdir}/locale
++localstatedir = /var
++mandir = /usr/share/man
++mkdir_p = /bin/mkdir -p
++oldincludedir = /usr/include
++pdfdir = ${docdir}
++prefix = /usr
++program_transform_name = s&^&&
++psdir = ${docdir}
++rootlib_execdir = /lib64
++sbindir = /sbin
++sharedstatedir = /var/lib
++srcdir = .
++sysconfdir = /etc
++target_alias = 
++top_build_prefix = ../../
++top_builddir = ../..
++top_srcdir = ../..
++AM_CPPFLAGS = \
++	-include $(top_builddir)/config.h \
++	-I$(top_srcdir)/libudev \
++	-DSYSCONFDIR=\""$(sysconfdir)"\" \
++	-DLIBEXECDIR=\""$(libexecdir)"\"
++
++AM_CFLAGS = 
++AM_LDFLAGS = \
++	-Wl,--as-needed
++
++udevrulesdir = \
++	$(libexecdir)/rules.d
++
++dist_udevrules_DATA = 95-keymap.rules
++udevkeymapdir = $(libexecdir)/keymaps
++udevkeymap_DATA = \
++keymaps/acer \
++	keymaps/acer-aspire_5920g \
++	keymaps/acer-extensa_5xxx \
++	keymaps/acer-travelmate_6292 \
++	keymaps/acer-travelmate_c300 \
++	keymaps/asus \
++	keymaps/benq-joybook_r22 \
++	keymaps/compaq-e_evo \
++	keymaps/dell \
++	keymaps/fujitsu-amilo_pa_2548 \
++	keymaps/fujitsu-amilo_pro_edition_v3505 \
++	keymaps/fujitsu-amilo_pro_v3205 \
++	keymaps/fujitsu-amilo_si_1520 \
++	keymaps/fujitsu-esprimo_mobile_v5 \
++	keymaps/fujitsu-esprimo_mobile_v6 \
++	keymaps/hewlett-packard \
++	keymaps/hewlett-packard-2510p_2530p \
++	keymaps/hewlett-packard-compaq_elitebook \
++	keymaps/hewlett-packard-pavilion \
++	keymaps/hewlett-packard-tablet \
++	keymaps/hewlett-packard-tx2 \
++	keymaps/inventec-symphony_6.0_7.0 \
++	keymaps/lenovo-3000 \
++	keymaps/lenovo-thinkpad_x6_tablet \
++	keymaps/lenovo-thinkpad_x200_tablet \
++	keymaps/maxdata-pro_7000 \
++	keymaps/medion-fid2060 \
++	keymaps/medionnb-a555 \
++	keymaps/micro-star \
++	keymaps/module-asus-w3j \
++	keymaps/module-ibm \
++	keymaps/module-lenovo \
++	keymaps/module-sony \
++	keymaps/module-sony-old \
++	keymaps/oqo-model2 \
++	keymaps/samsung-other \
++	keymaps/samsung-sq1us \
++	keymaps/samsung-sx20s \
++	keymaps/toshiba-satellite_a100 \
++	keymaps/toshiba-satellite_a110
++
++dist_libexec_SCRIPTS = findkeyboards
++keymap_SOURCES = keymap.c
++nodist_keymap_SOURCES = keys-from-name.h keys-to-name.h
++keymap_CPPFLAGS = $(AM_CPPFLAGS)
++dist_doc_DATA = README.keymap.txt
++EXTRA_DIST = \
++	keymaps \
++	check-keymaps.sh
++
++BUILT_SOURCES = \
++	keys-from-name.h \
++	keys-to-name.h
++
++CLEANFILES = \
++	keys.txt keys-from-name.gperf \
++	keys-from-name.h keys-to-name.h
++
++TESTS = check-keymaps.sh
++all: $(BUILT_SOURCES)
++	$(MAKE) $(AM_MAKEFLAGS) all-am
++
++.SUFFIXES:
++.SUFFIXES: .c .lo .o .obj
++$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(top_srcdir)/Makefile.am.inc $(am__configure_deps)
++	@for dep in $?; do \
++	  case '$(am__configure_deps)' in \
++	    *$$dep*) \
++	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
++	        && { if test -f $@; then exit 0; else break; fi; }; \
++	      exit 1;; \
++	  esac; \
++	done; \
++	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extras/keymap/Makefile'; \
++	$(am__cd) $(top_srcdir) && \
++	  $(AUTOMAKE) --foreign extras/keymap/Makefile
++.PRECIOUS: Makefile
++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
++	@case '$?' in \
++	  *config.status*) \
++	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
++	  *) \
++	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
++	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
++	esac;
++
++$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
++	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
++
++$(top_srcdir)/configure:  $(am__configure_deps)
++	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
++$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
++	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
++$(am__aclocal_m4_deps):
++install-libexecPROGRAMS: $(libexec_PROGRAMS)
++	@$(NORMAL_INSTALL)
++	test -z "$(libexecdir)" || $(MKDIR_P) "$(DESTDIR)$(libexecdir)"
++	@list='$(libexec_PROGRAMS)'; test -n "$(libexecdir)" || list=; \
++	for p in $$list; do echo "$$p $$p"; done | \
++	sed 's/$(EXEEXT)$$//' | \
++	while read p p1; do if test -f $$p || test -f $$p1; \
++	  then echo "$$p"; echo "$$p"; else :; fi; \
++	done | \
++	sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
++	    -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
++	sed 'N;N;N;s,\n, ,g' | \
++	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
++	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
++	    if ($$2 == $$4) files[d] = files[d] " " $$1; \
++	    else { print "f", $$3 "/" $$4, $$1; } } \
++	  END { for (d in files) print "f", d, files[d] }' | \
++	while read type dir files; do \
++	    if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
++	    test -z "$$files" || { \
++	    echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(libexecdir)$$dir'"; \
++	    $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(libexecdir)$$dir" || exit $$?; \
++	    } \
++	; done
++
++uninstall-libexecPROGRAMS:
++	@$(NORMAL_UNINSTALL)
++	@list='$(libexec_PROGRAMS)'; test -n "$(libexecdir)" || list=; \
++	files=`for p in $$list; do echo "$$p"; done | \
++	  sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
++	      -e 's/$$/$(EXEEXT)/' `; \
++	test -n "$$list" || exit 0; \
++	echo " ( cd '$(DESTDIR)$(libexecdir)' && rm -f" $$files ")"; \
++	cd "$(DESTDIR)$(libexecdir)" && rm -f $$files
++
++clean-libexecPROGRAMS:
++	@list='$(libexec_PROGRAMS)'; test -n "$$list" || exit 0; \
++	echo " rm -f" $$list; \
++	rm -f $$list || exit $$?; \
++	test -n "$(EXEEXT)" || exit 0; \
++	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
++	echo " rm -f" $$list; \
++	rm -f $$list
++keymap$(EXEEXT): $(keymap_OBJECTS) $(keymap_DEPENDENCIES) 
++	@rm -f keymap$(EXEEXT)
++	$(AM_V_CCLD)$(LINK) $(keymap_OBJECTS) $(keymap_LDADD) $(LIBS)
++install-dist_libexecSCRIPTS: $(dist_libexec_SCRIPTS)
++	@$(NORMAL_INSTALL)
++	test -z "$(libexecdir)" || $(MKDIR_P) "$(DESTDIR)$(libexecdir)"
++	@list='$(dist_libexec_SCRIPTS)'; test -n "$(libexecdir)" || list=; \
++	for p in $$list; do \
++	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
++	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
++	done | \
++	sed -e 'p;s,.*/,,;n' \
++	    -e 'h;s|.*|.|' \
++	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
++	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
++	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
++	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
++	      if (++n[d] == $(am__install_max)) { \
++		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
++	    else { print "f", d "/" $$4, $$1 } } \
++	  END { for (d in files) print "f", d, files[d] }' | \
++	while read type dir files; do \
++	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
++	     test -z "$$files" || { \
++	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(libexecdir)$$dir'"; \
++	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(libexecdir)$$dir" || exit $$?; \
++	     } \
++	; done
++
++uninstall-dist_libexecSCRIPTS:
++	@$(NORMAL_UNINSTALL)
++	@list='$(dist_libexec_SCRIPTS)'; test -n "$(libexecdir)" || exit 0; \
++	files=`for p in $$list; do echo "$$p"; done | \
++	       sed -e 's,.*/,,;$(transform)'`; \
++	test -n "$$list" || exit 0; \
++	echo " ( cd '$(DESTDIR)$(libexecdir)' && rm -f" $$files ")"; \
++	cd "$(DESTDIR)$(libexecdir)" && rm -f $$files
++
++mostlyclean-compile:
++	-rm -f *.$(OBJEXT)
++
++distclean-compile:
++	-rm -f *.tab.c
++
++#include ./$(DEPDIR)/keymap-keymap.Po
++
++.c.o:
++#	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
++#	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
++	$(AM_V_CC) \
++#	source='$<' object='$@' libtool=no 
++#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) 
++	$(COMPILE) -c $<
++
++.c.obj:
++#	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
++#	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
++	$(AM_V_CC) \
++#	source='$<' object='$@' libtool=no 
++#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) 
++	$(COMPILE) -c `$(CYGPATH_W) '$<'`
++
++.c.lo:
++#	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
++#	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
++	$(AM_V_CC) \
++#	source='$<' object='$@' libtool=yes 
++#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) 
++	$(LTCOMPILE) -c -o $@ $<
++
++keymap-keymap.o: keymap.c
++#	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(keymap_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT keymap-keymap.o -MD -MP -MF $(DEPDIR)/keymap-keymap.Tpo -c -o keymap-keymap.o `test -f 'keymap.c' || echo '$(srcdir)/'`keymap.c
++#	$(AM_V_at)$(am__mv) $(DEPDIR)/keymap-keymap.Tpo $(DEPDIR)/keymap-keymap.Po
++	$(AM_V_CC) \
++#	source='keymap.c' object='keymap-keymap.o' libtool=no 
++#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) 
++	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(keymap_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o keymap-keymap.o `test -f 'keymap.c' || echo '$(srcdir)/'`keymap.c
++
++keymap-keymap.obj: keymap.c
++#	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(keymap_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT keymap-keymap.obj -MD -MP -MF $(DEPDIR)/keymap-keymap.Tpo -c -o keymap-keymap.obj `if test -f 'keymap.c'; then $(CYGPATH_W) 'keymap.c'; else $(CYGPATH_W) '$(srcdir)/keymap.c'; fi`
++#	$(AM_V_at)$(am__mv) $(DEPDIR)/keymap-keymap.Tpo $(DEPDIR)/keymap-keymap.Po
++	$(AM_V_CC) \
++#	source='keymap.c' object='keymap-keymap.obj' libtool=no 
++#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) 
++	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(keymap_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o keymap-keymap.obj `if test -f 'keymap.c'; then $(CYGPATH_W) 'keymap.c'; else $(CYGPATH_W) '$(srcdir)/keymap.c'; fi`
++
++mostlyclean-libtool:
++	-rm -f *.lo
++
++clean-libtool:
++	-rm -rf .libs _libs
++install-dist_docDATA: $(dist_doc_DATA)
++	@$(NORMAL_INSTALL)
++	test -z "$(docdir)" || $(MKDIR_P) "$(DESTDIR)$(docdir)"
++	@list='$(dist_doc_DATA)'; test -n "$(docdir)" || list=; \
++	for p in $$list; do \
++	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
++	  echo "$$d$$p"; \
++	done | $(am__base_list) | \
++	while read files; do \
++	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docdir)'"; \
++	  $(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \
++	done
++
++uninstall-dist_docDATA:
++	@$(NORMAL_UNINSTALL)
++	@list='$(dist_doc_DATA)'; test -n "$(docdir)" || list=; \
++	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
++	test -n "$$files" || exit 0; \
++	echo " ( cd '$(DESTDIR)$(docdir)' && rm -f" $$files ")"; \
++	cd "$(DESTDIR)$(docdir)" && rm -f $$files
++install-dist_udevrulesDATA: $(dist_udevrules_DATA)
++	@$(NORMAL_INSTALL)
++	test -z "$(udevrulesdir)" || $(MKDIR_P) "$(DESTDIR)$(udevrulesdir)"
++	@list='$(dist_udevrules_DATA)'; test -n "$(udevrulesdir)" || list=; \
++	for p in $$list; do \
++	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
++	  echo "$$d$$p"; \
++	done | $(am__base_list) | \
++	while read files; do \
++	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(udevrulesdir)'"; \
++	  $(INSTALL_DATA) $$files "$(DESTDIR)$(udevrulesdir)" || exit $$?; \
++	done
++
++uninstall-dist_udevrulesDATA:
++	@$(NORMAL_UNINSTALL)
++	@list='$(dist_udevrules_DATA)'; test -n "$(udevrulesdir)" || list=; \
++	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
++	test -n "$$files" || exit 0; \
++	echo " ( cd '$(DESTDIR)$(udevrulesdir)' && rm -f" $$files ")"; \
++	cd "$(DESTDIR)$(udevrulesdir)" && rm -f $$files
++install-udevkeymapDATA: $(udevkeymap_DATA)
++	@$(NORMAL_INSTALL)
++	test -z "$(udevkeymapdir)" || $(MKDIR_P) "$(DESTDIR)$(udevkeymapdir)"
++	@list='$(udevkeymap_DATA)'; test -n "$(udevkeymapdir)" || list=; \
++	for p in $$list; do \
++	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
++	  echo "$$d$$p"; \
++	done | $(am__base_list) | \
++	while read files; do \
++	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(udevkeymapdir)'"; \
++	  $(INSTALL_DATA) $$files "$(DESTDIR)$(udevkeymapdir)" || exit $$?; \
++	done
++
++uninstall-udevkeymapDATA:
++	@$(NORMAL_UNINSTALL)
++	@list='$(udevkeymap_DATA)'; test -n "$(udevkeymapdir)" || list=; \
++	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
++	test -n "$$files" || exit 0; \
++	echo " ( cd '$(DESTDIR)$(udevkeymapdir)' && rm -f" $$files ")"; \
++	cd "$(DESTDIR)$(udevkeymapdir)" && rm -f $$files
++
++ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
++	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
++	unique=`for i in $$list; do \
++	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
++	  done | \
++	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
++	      END { if (nonempty) { for (i in files) print i; }; }'`; \
++	mkid -fID $$unique
++tags: TAGS
++
++TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
++		$(TAGS_FILES) $(LISP)
++	set x; \
++	here=`pwd`; \
++	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
++	unique=`for i in $$list; do \
++	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
++	  done | \
++	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
++	      END { if (nonempty) { for (i in files) print i; }; }'`; \
++	shift; \
++	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
++	  test -n "$$unique" || unique=$$empty_fix; \
++	  if test $$# -gt 0; then \
++	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
++	      "$$@" $$unique; \
++	  else \
++	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
++	      $$unique; \
++	  fi; \
++	fi
++ctags: CTAGS
++CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
++		$(TAGS_FILES) $(LISP)
++	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
++	unique=`for i in $$list; do \
++	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
++	  done | \
++	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
++	      END { if (nonempty) { for (i in files) print i; }; }'`; \
++	test -z "$(CTAGS_ARGS)$$unique" \
++	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
++	     $$unique
++
++GTAGS:
++	here=`$(am__cd) $(top_builddir) && pwd` \
++	  && $(am__cd) $(top_srcdir) \
++	  && gtags -i $(GTAGS_ARGS) "$$here"
++
++distclean-tags:
++	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
++
++check-TESTS: $(TESTS)
++	@failed=0; all=0; xfail=0; xpass=0; skip=0; \
++	srcdir=$(srcdir); export srcdir; \
++	list=' $(TESTS) '; \
++	$(am__tty_colors); \
++	if test -n "$$list"; then \
++	  for tst in $$list; do \
++	    if test -f ./$$tst; then dir=./; \
++	    elif test -f $$tst; then dir=; \
++	    else dir="$(srcdir)/"; fi; \
++	    if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
++	      all=`expr $$all + 1`; \
++	      case " $(XFAIL_TESTS) " in \
++	      *[\ \	]$$tst[\ \	]*) \
++		xpass=`expr $$xpass + 1`; \
++		failed=`expr $$failed + 1`; \
++		col=$$red; res=XPASS; \
++	      ;; \
++	      *) \
++		col=$$grn; res=PASS; \
++	      ;; \
++	      esac; \
++	    elif test $$? -ne 77; then \
++	      all=`expr $$all + 1`; \
++	      case " $(XFAIL_TESTS) " in \
++	      *[\ \	]$$tst[\ \	]*) \
++		xfail=`expr $$xfail + 1`; \
++		col=$$lgn; res=XFAIL; \
++	      ;; \
++	      *) \
++		failed=`expr $$failed + 1`; \
++		col=$$red; res=FAIL; \
++	      ;; \
++	      esac; \
++	    else \
++	      skip=`expr $$skip + 1`; \
++	      col=$$blu; res=SKIP; \
++	    fi; \
++	    echo "$${col}$$res$${std}: $$tst"; \
++	  done; \
++	  if test "$$all" -eq 1; then \
++	    tests="test"; \
++	    All=""; \
++	  else \
++	    tests="tests"; \
++	    All="All "; \
++	  fi; \
++	  if test "$$failed" -eq 0; then \
++	    if test "$$xfail" -eq 0; then \
++	      banner="$$All$$all $$tests passed"; \
++	    else \
++	      if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
++	      banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
++	    fi; \
++	  else \
++	    if test "$$xpass" -eq 0; then \
++	      banner="$$failed of $$all $$tests failed"; \
++	    else \
++	      if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
++	      banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
++	    fi; \
++	  fi; \
++	  dashes="$$banner"; \
++	  skipped=""; \
++	  if test "$$skip" -ne 0; then \
++	    if test "$$skip" -eq 1; then \
++	      skipped="($$skip test was not run)"; \
++	    else \
++	      skipped="($$skip tests were not run)"; \
++	    fi; \
++	    test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
++	      dashes="$$skipped"; \
++	  fi; \
++	  report=""; \
++	  if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
++	    report="Please report to $(PACKAGE_BUGREPORT)"; \
++	    test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
++	      dashes="$$report"; \
++	  fi; \
++	  dashes=`echo "$$dashes" | sed s/./=/g`; \
++	  if test "$$failed" -eq 0; then \
++	    echo "$$grn$$dashes"; \
++	  else \
++	    echo "$$red$$dashes"; \
++	  fi; \
++	  echo "$$banner"; \
++	  test -z "$$skipped" || echo "$$skipped"; \
++	  test -z "$$report" || echo "$$report"; \
++	  echo "$$dashes$$std"; \
++	  test "$$failed" -eq 0; \
++	else :; fi
++
++distdir: $(DISTFILES)
++	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
++	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
++	list='$(DISTFILES)'; \
++	  dist_files=`for file in $$list; do echo $$file; done | \
++	  sed -e "s|^$$srcdirstrip/||;t" \
++	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
++	case $$dist_files in \
++	  */*) $(MKDIR_P) `echo "$$dist_files" | \
++			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
++			   sort -u` ;; \
++	esac; \
++	for file in $$dist_files; do \
++	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
++	  if test -d $$d/$$file; then \
++	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
++	    if test -d "$(distdir)/$$file"; then \
++	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
++	    fi; \
++	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
++	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
++	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
++	    fi; \
++	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
++	  else \
++	    test -f "$(distdir)/$$file" \
++	    || cp -p $$d/$$file "$(distdir)/$$file" \
++	    || exit 1; \
++	  fi; \
++	done
++check-am: all-am
++	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
++check: $(BUILT_SOURCES)
++	$(MAKE) $(AM_MAKEFLAGS) check-am
++all-am: Makefile $(PROGRAMS) $(SCRIPTS) $(DATA)
++installdirs:
++	for dir in "$(DESTDIR)$(libexecdir)" "$(DESTDIR)$(libexecdir)" "$(DESTDIR)$(docdir)" "$(DESTDIR)$(udevrulesdir)" "$(DESTDIR)$(udevkeymapdir)"; do \
++	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
++	done
++install: $(BUILT_SOURCES)
++	$(MAKE) $(AM_MAKEFLAGS) install-am
++install-exec: install-exec-am
++install-data: install-data-am
++uninstall: uninstall-am
++
++install-am: all-am
++	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
++
++installcheck: installcheck-am
++install-strip:
++	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
++	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
++	  `test -z '$(STRIP)' || \
++	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
++mostlyclean-generic:
++
++clean-generic:
++	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
++
++distclean-generic:
++	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
++	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
++
++maintainer-clean-generic:
++	@echo "This command is intended for maintainers to use"
++	@echo "it deletes files that may require special tools to rebuild."
++	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
++clean: clean-am
++
++clean-am: clean-generic clean-libexecPROGRAMS clean-libtool \
++	mostlyclean-am
++
++distclean: distclean-am
++	-rm -rf ./$(DEPDIR)
++	-rm -f Makefile
++distclean-am: clean-am distclean-compile distclean-generic \
++	distclean-tags
++
++dvi: dvi-am
++
++dvi-am:
++
++html: html-am
++
++html-am:
++
++info: info-am
++
++info-am:
++
++install-data-am: install-dist_docDATA install-dist_udevrulesDATA \
++	install-udevkeymapDATA
++
++install-dvi: install-dvi-am
++
++install-dvi-am:
++
++install-exec-am: install-dist_libexecSCRIPTS install-libexecPROGRAMS
++
++install-html: install-html-am
++
++install-html-am:
++
++install-info: install-info-am
++
++install-info-am:
++
++install-man:
++
++install-pdf: install-pdf-am
++
++install-pdf-am:
++
++install-ps: install-ps-am
++
++install-ps-am:
++
++installcheck-am:
++
++maintainer-clean: maintainer-clean-am
++	-rm -rf ./$(DEPDIR)
++	-rm -f Makefile
++maintainer-clean-am: distclean-am maintainer-clean-generic
++
++mostlyclean: mostlyclean-am
++
++mostlyclean-am: mostlyclean-compile mostlyclean-generic \
++	mostlyclean-libtool
++
++pdf: pdf-am
++
++pdf-am:
++
++ps: ps-am
++
++ps-am:
++
++uninstall-am: uninstall-dist_docDATA uninstall-dist_libexecSCRIPTS \
++	uninstall-dist_udevrulesDATA uninstall-libexecPROGRAMS \
++	uninstall-udevkeymapDATA
++
++.MAKE: all check check-am install install-am install-strip
++
++.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
++	clean-generic clean-libexecPROGRAMS clean-libtool ctags \
++	distclean distclean-compile distclean-generic \
++	distclean-libtool distclean-tags distdir dvi dvi-am html \
++	html-am info info-am install install-am install-data \
++	install-data-am install-dist_docDATA \
++	install-dist_libexecSCRIPTS install-dist_udevrulesDATA \
++	install-dvi install-dvi-am install-exec install-exec-am \
++	install-html install-html-am install-info install-info-am \
++	install-libexecPROGRAMS install-man install-pdf install-pdf-am \
++	install-ps install-ps-am install-strip install-udevkeymapDATA \
++	installcheck installcheck-am installdirs maintainer-clean \
++	maintainer-clean-generic mostlyclean mostlyclean-compile \
++	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
++	tags uninstall uninstall-am uninstall-dist_docDATA \
++	uninstall-dist_libexecSCRIPTS uninstall-dist_udevrulesDATA \
++	uninstall-libexecPROGRAMS uninstall-udevkeymapDATA
++
++
++keys.txt: /usr/include/linux/input.h
++	$(AWK) '/^#define.*KEY_/ { if ($$2 != "KEY_MAX" && $$2 != "KEY_CNT") { print $$2 } }' < $< > $@
++
++keys-from-name.gperf: keys.txt
++	$(AWK) 'BEGIN{ print "struct key { const char* name; unsigned short id; };"; print "%null-strings"; print "%%";} { print $$1 ", " $$1 }' < $< > $@
++
++keys-from-name.h: keys-from-name.gperf Makefile
++	$(GPERF) -t --ignore-case -N lookup_key -H hash_key_name -p -C < $< > $@
++
++keys-to-name.h: keys.txt Makefile
++	$(AWK) 'BEGIN{ print "const char* const key_names[KEY_CNT] = { "} { print "[" $$1 "] = \"" $$1 "\"," } END{print "};"}' < $< > $@
++
++# Tell versions [3.59,3.63) of GNU make to not export all variables.
++# Otherwise a system limit (for SysV at least) may be exceeded.
++.NOEXPORT:
+diff -urN udev-145-orig/extras/keymap/README.keymap.txt udev-145/extras/keymap/README.keymap.txt
+--- udev-145-orig/extras/keymap/README.keymap.txt	2009-06-19 19:21:26.000000000 +0200
++++ udev-145/extras/keymap/README.keymap.txt	2010-06-11 10:52:56.000000000 +0200
+@@ -48,7 +48,8 @@
+  keyboard" and possibly a "module". Some laptops (notably Thinkpads, Sonys, and
+  Acers) have multimedia/function keys on a separate input device instead of the
+  primary keyboard. The keyboard device should have a name like "input/event3".
+- In the following commands, the name will be written as "input/eventX".
++ In the following commands, the name will be written as "input/eventX" (replace
++ X with the appropriate number).
+ 
+  2. Dump current mapping:
+ 
+@@ -73,6 +74,12 @@
+  /lib/udev/keymaps/ for existing key map files and make sure that you use the
+  same structure.
+ 
++ If the key only ever works once and then your keyboard (or the entire desktop)
++ gets stuck for a long time, then it is likely that the BIOS fails to send a
++ corresponding "key release" event after the key press event. Please note down
++ this case as well, as it can be worked around in
++ /lib/udev/keymaps/95-keyboard-force-release.rules .
++
+  4. Find out your system vendor and product:
+ 
+  cat /sys/class/dmi/id/sys_vendor
+@@ -84,7 +91,7 @@
+  /tmp/orig-map.txt from step 2, and /tmp/udev-db.txt from step 5
+  to the bug tracker, so that they can be included in the next release:
+ 
+-   https://bugs.launchpad.net/udev-extras/+bugs
++   https://bugs.launchpad.net/udev/+bugs
+ 
+ For local testing, copy your map file to /lib/udev/keymaps/ with an appropriate
+ name, and add an appropriate udev rule to /lib/udev/rules.d/95-keymap.rules:
diff --git a/udev-145-rules-optical-drives-use-ID_CDROM_MEDIA_TRACK_COUNT_.patch b/udev-145-rules-optical-drives-use-ID_CDROM_MEDIA_TRACK_COUNT_.patch
new file mode 100644
index 0000000..cacc5cb
--- /dev/null
+++ b/udev-145-rules-optical-drives-use-ID_CDROM_MEDIA_TRACK_COUNT_.patch
@@ -0,0 +1,14 @@
+--- udev-145/rules/rules.d/60-persistent-storage.rules.orig	2010-09-21 10:56:28.992750001 +0200
++++ udev-145/rules/rules.d/60-persistent-storage.rules	2010-09-21 11:36:11.395750000 +0200
+@@ -61,9 +61,9 @@
+ ENV{DEVTYPE}=="disk", KERNEL!="sd*|sr*", ATTR{removable}=="1", GOTO="persistent_storage_end"
+ 
+ # probe filesystem metadata of optical drives which have a media inserted
+-KERNEL=="sr*", ENV{ID_CDROM_MEDIA}=="?*", ENV{ID_CDROM_MEDIA_SESSION_LAST_OFFSET}=="?*", IMPORT{program}="/sbin/blkid -o udev -p -u noraid -O $env{ID_CDROM_MEDIA_SESSION_LAST_OFFSET} $tempnode"
++KERNEL=="sr*", ENV{ID_CDROM_MEDIA_TRACK_COUNT_DATA}=="?*", ENV{ID_CDROM_MEDIA_SESSION_LAST_OFFSET}=="?*", IMPORT{program}="/sbin/blkid -o udev -p -u noraid -O $env{ID_CDROM_MEDIA_SESSION_LAST_OFFSET} $tempnode"
+ # single-session CDs do not have ID_CDROM_MEDIA_SESSION_LAST_OFFSET
+-KERNEL=="sr*", ENV{ID_CDROM_MEDIA}=="?*", ENV{ID_CDROM_MEDIA_SESSION_LAST_OFFSET}=="", IMPORT{program}="/sbin/blkid -o udev -p -u noraid $tempnode"
++KERNEL=="sr*", ENV{ID_CDROM_MEDIA_TRACK_COUNT_DATA}=="?*", ENV{ID_CDROM_MEDIA_SESSION_LAST_OFFSET}=="", IMPORT{program}="/sbin/blkid -o udev -p -u noraid $tempnode"
+ 
+ # probe filesystem metadata of disks
+ KERNEL!="sr*", IMPORT{program}="/sbin/blkid -o udev -p $tempnode"
diff --git a/udev.spec b/udev.spec
index f2aa3d2..c9bf04a 100644
--- a/udev.spec
+++ b/udev.spec
@@ -5,7 +5,7 @@
 Summary: A userspace implementation of devfs
 Name: udev
 Version: 145
-Release: 21%{?dist}
+Release: 22%{?dist}
 License: GPLv2
 Group: System Environment/Base
 Provides: udev-persistent = %{version}-%{release}
@@ -14,8 +14,6 @@ Obsoletes: udev-extras < 20090618
 Provides: udev-extras = 20090618-1
 Source: ftp://ftp.kernel.org/pub/linux/utils/kernel/hotplug/%{name}-%{version}.tar.bz2
 
-BuildRequires: libtool automake autoconf
-
 Patch1: 0001-enumeration-move-ALSA-control-devices-to-the-end-of-.patch
 Patch2: 0002-udevd-add-timestamp-to-debug-output.patch
 Patch3: 0003-fix-wrong-parameter-size-on-ioctl-FIONREAD.patch
@@ -30,6 +28,9 @@ Patch10: 0001-cdrom_id-Still-check-profiles-even-if-there-is-no-me.patch
 Patch11: udev-145-rename.patch
 Patch13: udev.git-d7e2d38c1f0ead2239808dd117577a99a3ad3cde.patch
 Patch14: udev.git-fa0612104ad30d4228aa7782308a77e21b7f6fb5.patch
+Patch15: udev-145-rules-optical-drives-use-ID_CDROM_MEDIA_TRACK_COUNT_.patch
+Patch16: udev-145-keymap-backport.patch
+Patch17: udev-145-floppy.patch
 
 Patch35: 0035-cdrom_id-open-non-mounted-optical-media-with-O_EXCL.patch
 Patch48: 0048-cdrom_id-remove-debugging-code.patch
@@ -47,8 +48,12 @@ Patch71: 0071-cdrom_id-Do-not-ignore-errors-from-scsi_cmd_run.patch
 Patch72: 0072-cdrom_id-Swap-media-state-and-TOC-info-probing.patch
 Patch74: 0074-cdrom_id-add-missing-profiles-to-feature_profiles.patch
 Patch75: 0075-cdrom_id-set-ID_CDROM_MEDIA-1-only-for-known-media.patch
+
+Patch80: udev-145-cdrom_id-backport.patch
+
 Patch110: 0110-cdrom_id-only-mark-sr-0-9-as-ID_CDROM.patch
 
+
 Patch101: udev-147-virtio.patch
 
 Source1: start_udev
@@ -64,9 +69,10 @@ Requires(pre): /usr/bin/stat /sbin/pidof
 Requires(pre): MAKEDEV >= 0:3.11 /usr/bin/getent /usr/sbin/groupadd
 Requires: hwdata
 
+BuildRequires: automake autoconf
 BuildRequires: sed libselinux-devel >= 0:1.17.9-2 flex libsepol-devel
 BuildRequires: glib2-devel bison findutils MAKEDEV
-BuildRequires: gperf libtool
+BuildRequires: gperf 
 BuildRequires: libusb-devel libacl-devel
 BuildRequires: libxslt
 BuildRequires: hwdata
@@ -153,6 +159,9 @@ glib-based applications using libudev functionality.
 %patch11 -p1
 %patch13 -p1
 %patch14 -p1
+%patch15 -p1 
+%patch16 -p1 
+%patch17 -p1 -b .floppy
 
 %patch35 -p1 -b .git35
 %patch48 -p1 -b .git48
@@ -171,6 +180,9 @@ glib-based applications using libudev functionality.
 %patch72 -p1 -b .git72
 %patch74 -p1 -b .git74
 %patch75 -p1 -b .git75
+
+%patch80 -p1 
+
 %patch110 -p1 -b .git110
 
 
@@ -418,6 +430,13 @@ rm -rf $RPM_BUILD_ROOT
 %attr(0644,root,root) %{_libdir}/pkgconfig/gudev-1.0*
 
 %changelog
+* Tue Sep 21 2010 Harald Hoyer <harald at redhat.com> 145-22
+- backported the upstream cdrom_id bugfixes and enhancements
+  (bug #533643)
+- backported the upstream keymaps bugfixes and enhancements 
+  (bug #444440)
+- fixed floppy devices (bug#492404)
+
 * Tue Apr 27 2010 Harald Hoyer <harald at redhat.com> 145-21
 - more cdrom_id bugfixes which can prevent autoclose of 
   some cdroms


More information about the scm-commits mailing list