Hello community,

here is the log from the commit of package pcsc-acsccid for openSUSE:Factory 
checked in at 2016-06-23 13:37:29
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/pcsc-acsccid (Old)
 and      /work/SRC/openSUSE:Factory/.pcsc-acsccid.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "pcsc-acsccid"

Changes:
--------
--- /work/SRC/openSUSE:Factory/pcsc-acsccid/pcsc-acsccid.changes        
2016-02-22 08:57:56.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.pcsc-acsccid.new/pcsc-acsccid.changes   
2016-06-23 13:37:39.000000000 +0200
@@ -1,0 +2,5 @@
+Thu Jun 23 07:27:59 UTC 2016 - [email protected]
+
+- Updated to version 1.1.3.
+
+-------------------------------------------------------------------

Old:
----
  acsccid-1.1.2.tar.bz2

New:
----
  acsccid-1.1.3.tar.bz2

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ pcsc-acsccid.spec ++++++
--- /var/tmp/diff_new_pack.NCFGJv/_old  2016-06-23 13:37:40.000000000 +0200
+++ /var/tmp/diff_new_pack.NCFGJv/_new  2016-06-23 13:37:40.000000000 +0200
@@ -34,7 +34,7 @@
 %if 0%{?suse_version} >= 1140
 BuildRequires:  udev
 %endif
-Version:        1.1.2
+Version:        1.1.3
 Release:        0
 Url:            http://acsccid.sourceforge.net/
 Summary:        PCSC Driver for ACS CCID Based Smart Card Readers
@@ -58,6 +58,7 @@
 Enhances:       modalias(usb:v072fpb101d*dc*dsc*dp*ic*isc*ip*)
 Enhances:       modalias(usb:v072fpb102d*dc*dsc*dp*ic*isc*ip*)
 Enhances:       modalias(usb:v072fpb103d*dc*dsc*dp*ic*isc*ip*)
+Enhances:       modalias(usb:v072fpb10cd*dc*dsc*dp*ic*isc*ip*)
 Enhances:       modalias(usb:v072fpb104d*dc*dsc*dp*ic*isc*ip*)
 Enhances:       modalias(usb:v072fpb000d*dc*dsc*dp*ic*isc*ip*)
 Enhances:       modalias(usb:v072fp90d2d*dc*dsc*dp*ic*isc*ip*)
@@ -87,6 +88,7 @@
 Enhances:       modalias(usb:v072fp2232d*dc*dsc*dp*ic*isc*ip*)
 Enhances:       modalias(usb:v072fp2242d*dc*dsc*dp*ic*isc*ip*)
 Enhances:       modalias(usb:v072fp2238d*dc*dsc*dp*ic*isc*ip*)
+Enhances:       modalias(usb:v072fp224fd*dc*dsc*dp*ic*isc*ip*)
 Enhances:       modalias(usb:v072fp223bd*dc*dsc*dp*ic*isc*ip*)
 Enhances:       modalias(usb:v072fp223ed*dc*dsc*dp*ic*isc*ip*)
 Enhances:       modalias(usb:v072fp223dd*dc*dsc*dp*ic*isc*ip*)

++++++ acsccid-1.1.2.tar.bz2 -> acsccid-1.1.3.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/acsccid-1.1.2/ChangeLog new/acsccid-1.1.3/ChangeLog
--- old/acsccid-1.1.2/ChangeLog 2016-02-18 04:39:07.000000000 +0100
+++ new/acsccid-1.1.3/ChangeLog 2016-06-22 07:49:56.000000000 +0200
@@ -1,3 +1,115 @@
+2016-06-22  Godfrey Chung <[email protected]>
+
+       * README: Update README for v1.1.3.
+
+2016-06-22  Godfrey Chung <[email protected]>
+
+       * configure.ac: Update the version to 1.1.3 in configure.ac.
+
+2016-06-21  Godfrey Chung <[email protected]>
+
+       * src/ccid_usb.c: Fix random order of interfaces in OpenUSBByName().  
The value of static_interface should be increased for composite
+       devices only.
+
+2016-06-21  Godfrey Chung <[email protected]>
+
+       * src/ifdhandler.c: Avoid libusb timeout on Mac OS X in
+       CreateChannelByNameOrChannel().
+
+2016-06-07  Godfrey Chung <[email protected]>
+
+       * src/ccid_usb.c: Fix a race condition in CardDetectionThread().  
Replace libusb_handle_events() with
+       libusb_handle_events_completed().
+
+2016-06-07  Godfrey Chung <[email protected]>
+
+       * src/ifdhandler.c: IFDHGetCapabilities: fix
+       SCARD_ATTR_VENDOR_IFD_SERIAL_NO size.  Merge from ccid 1.4.24.
+
+2016-06-07  Godfrey Chung <[email protected]>
+
+       * src/ccid.c, src/ccid.h: Fix support of HID Aviator generic.  Merge 
from ccid 1.4.24.
+
+2016-06-07  Godfrey Chung <[email protected]>
+
+       * src/ccid.c, src/ccid.h: SCM SCL011: use a 400 ms timeout instead
+       of 100 ms.  Merge from ccid 1.4.24.
+
+2016-06-07  Godfrey Chung <[email protected]>
+
+       * src/ccid.c, src/ccid.h: ElatecTWN4: use a 400 ms timeout instead
+       of 100 ms.  Merge from ccid 1.4.24.
+
+2016-06-07  Godfrey Chung <[email protected]>
+
+       * src/ifdhandler.c: CreateChannel: allow to use a non default
+       timeout.  Merge from 1.4.24.
+
+2016-06-07  Godfrey Chung <[email protected]>
+
+       * src/ccid_usb.c: ccid_usb.c: fix a race condition on multi reader.  
Merge from ccid 1.4.24.
+
+2016-04-21  Godfrey Chung <[email protected]>
+
+       * src/ifdhandler.c: Update the copyright in ifdhandler.c
+
+2016-04-21  Godfrey Chung <[email protected]>
+
+       * src/ccid_ifdhandler.h: Update the copyright in ccid_ifdhandler.h.
+
+2016-04-21  Godfrey Chung <[email protected]>
+
+       * src/ccid_ifdhandler.h, src/ifdhandler.c: Add control codes for
+       Windows compatibility.
+
+2016-04-21  Godfrey Chung <[email protected]>
+
+       * src/ccid_usb.c: Update the copyright in src/ccid_usb.c.
+
+2016-04-21  Godfrey Chung <[email protected]>
+
+       * src/ccid_usb.c: get_end_points(): be more strict for
+       bInterfaceClass = 255.  Merge from ccid 1.4.15.
+
+2016-04-21  Godfrey Chung <[email protected]>
+
+       * src/ccid_usb.c: Fix a busy loop consuming 100% of CPU.  Merge from 
ccid 1.4.23.
+
+2016-04-21  Godfrey Chung <[email protected]>
+
+       * src/ccid_usb.c: ccid_usb.c: improve close_libusb_if_needed().  Merge 
from ccid 1.4.23.
+
+2016-04-21  Godfrey Chung <[email protected]>
+
+       * src/ccid.c: Update URL in a comment.  Merge from ccid 1.4.23.
+
+2016-04-21  Godfrey Chung <[email protected]>
+
+       * src/Info.plist.src, src/ccid_ifdhandler.h, src/ccid_usb.c: Remove
+       support of DRIVER_OPTION_RESET_ON_CLOSE.  Merge from ccid 1.4.23.
+
+2016-04-21  Godfrey Chung <[email protected]>
+
+       * src/ccid_usb.c: InterruptRead(): log libusb error name.  Merge from 
ccid 1.4.23.
+
+2016-04-21  Godfrey Chung <[email protected]>
+
+       * MacOSX/configure: MacOSX/configure: exit in error if configure
+       failed.  Merge from ccid 1.4.23.
+
+2016-04-18  Godfrey Chung <[email protected]>
+
+       * src/ccid_usb.c: Break if the device was disconnected in
+       Multi_PollingProc().
+
+2016-04-01  Godfrey Chung <[email protected]>
+
+       * src/supported_readers.txt: Add supported readers.  ACR1251 CL Reader 
(ACM1251U-Z2)
+
+2016-01-14  Godfrey Chung <[email protected]>
+
+       * src/supported_readers.txt: Add supported readers.  ACR39U ID1 Card 
Reader
+
 2016-02-18  Godfrey Chung <[email protected]>
 
        * README: Update README for v1.1.2.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/acsccid-1.1.2/MacOSX/configure 
new/acsccid-1.1.3/MacOSX/configure
--- old/acsccid-1.1.2/MacOSX/configure  2016-02-17 10:28:38.000000000 +0100
+++ new/acsccid-1.1.3/MacOSX/configure  2016-04-21 04:46:11.000000000 +0200
@@ -129,6 +129,10 @@
        $CONFIGURE_ARGS \
        "$@"
 
+r=$?
+
 # force a regeneration of Info.plist
 rm -f src/Info.plist
 
+# exit with the return code from ./configure
+exit $r
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/acsccid-1.1.2/README new/acsccid-1.1.3/README
--- old/acsccid-1.1.2/README    2016-02-18 04:26:41.000000000 +0100
+++ new/acsccid-1.1.3/README    2016-06-22 06:40:27.000000000 +0200
@@ -61,6 +61,7 @@
 072F B102 ACR39T              ACS ACR39T ICC Reader
 072F B103 ACR39F              ACS ACR39F ICC Reader
 072F B104 ACR39U-SAM          ACS ACR39U-SAM ICC Reader
+072F B10C ACR39U-U1           ACS ACR39U ID1 Card Reader
 072F B000 ACR3901U            ACS ACR3901U ICC Reader
 072F 90D2 ACR83U-A1           ACS ACR83U
 072F 8306 ACR85               ACS ACR85 PINPad Reader
@@ -91,6 +92,7 @@
 072F 2232 ACR1251UK           ACS ACR1251K Dual Reader
 072F 2242 ACR1251U-C3         ACS ACR1251 1S Dual Reader
 072F 2238 ACR1251U-C9         ACS ACR1251 Reader
+072F 224F ACM1251U-Z2         ACS ACR1251 CL Reader
 072F 223B ACR1252U-A1         ACS ACR1252 1S CL Reader
 072F 223E ACR1252U-A2         ACS ACR1252 CL Reader
 072F 223D ACR1252U BL         ACS ACR1252 USB FW_Upgrade v100
@@ -139,6 +141,29 @@
 History
 -------
 
+v1.1.3 (22/6/2016)
+- Add the following readers support:
+  ACR39U ID1 Card Reader
+  ACR1251 CL Reader (ACM1251U-Z2)
+- Break if the device was disconnected in Multi_PollingProc().
+- Merge with ccid 1.4.23.
+  - MacOSX/configure: exit in error if configure failed.
+  - InterruptRead(): log libusb error name.
+  - Remove support of DRIVER_OPTION_RESET_ON_CLOSE.
+  - Update URL in a comment.
+  - ccid_usb.c: improve close_libusb_if_needed().
+  - Fix a busy loop consuming 100% of CPU.
+- Merge with ccid 1.4.15.
+  - get_end_points(): be more strict for bInterfaceClass = 255.
+- Add control codes for Windows compatibility.
+- Merge with ccid 1.4.24.
+  - ccid_usb.c: fix a race condition on multi reader.
+  - CreateChannel: allow to use a non default timeout.
+  - IFDHGetCapabilities: fix SCARD_ATTR_VENDOR_IFD_SERIAL_NO size.
+- Fix a race condition in CardDetectionThread().
+- Avoid libusb timeout on Mac OS X in CreateChannelByNameOrChannel().
+- Fix random order of interfaces in OpenUSBByName().
+
 v1.1.2 (18/2/2016)
 - Return the second version in ACR83_GetFirmwareVersion().
 - Disable SetParameters for OEM Reader (VID: 072F, PID: 8205) v029Z in
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/acsccid-1.1.2/config/config.guess 
new/acsccid-1.1.3/config/config.guess
--- old/acsccid-1.1.2/config/config.guess       2016-02-18 04:37:55.000000000 
+0100
+++ new/acsccid-1.1.3/config/config.guess       2016-06-22 07:49:14.000000000 
+0200
@@ -1,8 +1,8 @@
 #! /bin/sh
 # Attempt to guess a canonical system name.
-#   Copyright 1992-2015 Free Software Foundation, Inc.
+#   Copyright 1992-2016 Free Software Foundation, Inc.
 
-timestamp='2015-08-20'
+timestamp='2016-04-02'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -27,7 +27,7 @@
 # Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
 #
 # You can get the latest version of this script from:
-# 
http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
 #
 # Please send patches to <[email protected]>.
 
@@ -50,7 +50,7 @@
 GNU config.guess ($timestamp)
 
 Originally written by Per Bothner.
-Copyright 1992-2015 Free Software Foundation, Inc.
+Copyright 1992-2016 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -237,6 +237,10 @@
        UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
        echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
        exit ;;
+    *:LibertyBSD:*:*)
+       UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'`
+       echo ${UNAME_MACHINE_ARCH}-unknown-libertybsd${UNAME_RELEASE}
+       exit ;;
     *:ekkoBSD:*:*)
        echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
        exit ;;
@@ -268,42 +272,42 @@
        ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) 
processor.*$/\1/p' | head -n 1`
        case "$ALPHA_CPU_TYPE" in
            "EV4 (21064)")
-               UNAME_MACHINE="alpha" ;;
+               UNAME_MACHINE=alpha ;;
            "EV4.5 (21064)")
-               UNAME_MACHINE="alpha" ;;
+               UNAME_MACHINE=alpha ;;
            "LCA4 (21066/21068)")
-               UNAME_MACHINE="alpha" ;;
+               UNAME_MACHINE=alpha ;;
            "EV5 (21164)")
-               UNAME_MACHINE="alphaev5" ;;
+               UNAME_MACHINE=alphaev5 ;;
            "EV5.6 (21164A)")
-               UNAME_MACHINE="alphaev56" ;;
+               UNAME_MACHINE=alphaev56 ;;
            "EV5.6 (21164PC)")
-               UNAME_MACHINE="alphapca56" ;;
+               UNAME_MACHINE=alphapca56 ;;
            "EV5.7 (21164PC)")
-               UNAME_MACHINE="alphapca57" ;;
+               UNAME_MACHINE=alphapca57 ;;
            "EV6 (21264)")
-               UNAME_MACHINE="alphaev6" ;;
+               UNAME_MACHINE=alphaev6 ;;
            "EV6.7 (21264A)")
-               UNAME_MACHINE="alphaev67" ;;
+               UNAME_MACHINE=alphaev67 ;;
            "EV6.8CB (21264C)")
-               UNAME_MACHINE="alphaev68" ;;
+               UNAME_MACHINE=alphaev68 ;;
            "EV6.8AL (21264B)")
-               UNAME_MACHINE="alphaev68" ;;
+               UNAME_MACHINE=alphaev68 ;;
            "EV6.8CX (21264D)")
-               UNAME_MACHINE="alphaev68" ;;
+               UNAME_MACHINE=alphaev68 ;;
            "EV6.9A (21264/EV69A)")
-               UNAME_MACHINE="alphaev69" ;;
+               UNAME_MACHINE=alphaev69 ;;
            "EV7 (21364)")
-               UNAME_MACHINE="alphaev7" ;;
+               UNAME_MACHINE=alphaev7 ;;
            "EV7.9 (21364A)")
-               UNAME_MACHINE="alphaev79" ;;
+               UNAME_MACHINE=alphaev79 ;;
        esac
        # A Pn.n version is a patched version.
        # A Vn.n version is a released version.
        # A Tn.n version is a released field test version.
        # A Xn.n version is an unreleased experimental baselevel.
        # 1.2 uses "1.2" for uname -r.
-       echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 
's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+       echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 
's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
        # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
        exitcode=$?
        trap '' 0
@@ -376,16 +380,16 @@
        exit ;;
     i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
        eval $set_cc_for_build
-       SUN_ARCH="i386"
+       SUN_ARCH=i386
        # If there is a compiler, see if it is configured for 64-bit objects.
        # Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
        # This test works for both compilers.
-       if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+       if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
            if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
-               (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+               (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
                grep IS_64BIT_ARCH >/dev/null
            then
-               SUN_ARCH="x86_64"
+               SUN_ARCH=x86_64
            fi
        fi
        echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
@@ -410,7 +414,7 @@
        exit ;;
     sun*:*:4.2BSD:*)
        UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 
2>/dev/null`
-       test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+       test "x${UNAME_RELEASE}" = x && UNAME_RELEASE=3
        case "`/bin/arch`" in
            sun3)
                echo m68k-sun-sunos${UNAME_RELEASE}
@@ -635,13 +639,13 @@
                    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
                    case "${sc_cpu_version}" in
-                     523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
-                     528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+                     523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0
+                     528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1
                      532)                      # CPU_PA_RISC2_0
                        case "${sc_kernel_bits}" in
-                         32) HP_ARCH="hppa2.0n" ;;
-                         64) HP_ARCH="hppa2.0w" ;;
-                         '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
+                         32) HP_ARCH=hppa2.0n ;;
+                         64) HP_ARCH=hppa2.0w ;;
+                         '') HP_ARCH=hppa2.0 ;;   # HP-UX 10.20
                        esac ;;
                    esac
                fi
@@ -680,11 +684,11 @@
                    exit (0);
                }
 EOF
-                   (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && 
HP_ARCH=`$dummy`
+                   (CCOPTS="" $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && 
HP_ARCH=`$dummy`
                    test -z "$HP_ARCH" && HP_ARCH=hppa
                fi ;;
        esac
-       if [ ${HP_ARCH} = "hppa2.0w" ]
+       if [ ${HP_ARCH} = hppa2.0w ]
        then
            eval $set_cc_for_build
 
@@ -697,12 +701,12 @@
            # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
            # => hppa64-hp-hpux11.23
 
-           if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
+           if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) |
                grep -q __LP64__
            then
-               HP_ARCH="hppa2.0w"
+               HP_ARCH=hppa2.0w
            else
-               HP_ARCH="hppa64"
+               HP_ARCH=hppa64
            fi
        fi
        echo ${HP_ARCH}-hp-hpux${HPUX_REV}
@@ -807,14 +811,14 @@
        echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
        exit ;;
     F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
-       FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 
'abcdefghijklmnopqrstuvwxyz'`
-       FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 
'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+       FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ 
abcdefghijklmnopqrstuvwxyz`
+       FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ 
abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
        exit ;;
     5000:UNIX_System_V:4.*:*)
-       FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 
'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-       FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 
'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+       FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ 
abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
+       FUJITSU_REL=`echo ${UNAME_RELEASE} | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ 
abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'`
        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
        exit ;;
     i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
@@ -896,7 +900,7 @@
        exit ;;
     *:GNU/*:*:*)
        # other systems with GNU libc and userland
-       echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' 
| tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}
+       echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' 
| tr "[:upper:]" "[:lower:]"``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}
        exit ;;
     i*86:Minix:*:*)
        echo ${UNAME_MACHINE}-pc-minix
@@ -919,7 +923,7 @@
          EV68*) UNAME_MACHINE=alphaev68 ;;
        esac
        objdump --private-headers /bin/sh | grep -q ld.so.1
-       if test "$?" = 0 ; then LIBC="gnulibc1" ; fi
+       if test "$?" = 0 ; then LIBC=gnulibc1 ; fi
        echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
        exit ;;
     arc:Linux:*:* | arceb:Linux:*:*)
@@ -965,6 +969,9 @@
     ia64:Linux:*:*)
        echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
        exit ;;
+    k1om:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       exit ;;
     m32r*:Linux:*:*)
        echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
        exit ;;
@@ -1120,7 +1127,7 @@
        # uname -m prints for DJGPP always 'pc', but it prints nothing about
        # the processor, so we play safe by assuming i586.
        # Note: whatever this is, it MUST be the same as what config.sub
-       # prints for the "djgpp" host, or else GDB configury will decide that
+       # prints for the "djgpp" host, or else GDB configure will decide that
        # this is a cross-build.
        echo i586-pc-msdosdjgpp
        exit ;;
@@ -1269,6 +1276,9 @@
     SX-8R:SUPER-UX:*:*)
        echo sx8r-nec-superux${UNAME_RELEASE}
        exit ;;
+    SX-ACE:SUPER-UX:*:*)
+       echo sxace-nec-superux${UNAME_RELEASE}
+       exit ;;
     Power*:Rhapsody:*:*)
        echo powerpc-apple-rhapsody${UNAME_RELEASE}
        exit ;;
@@ -1282,9 +1292,9 @@
            UNAME_PROCESSOR=powerpc
        fi
        if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then
-           if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+           if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
                if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') 
| \
-                   (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+                   (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
                    grep IS_64BIT_ARCH >/dev/null
                then
                    case $UNAME_PROCESSOR in
@@ -1306,7 +1316,7 @@
        exit ;;
     *:procnto*:*:* | *:QNX:[0123456789]*:*)
        UNAME_PROCESSOR=`uname -p`
-       if test "$UNAME_PROCESSOR" = "x86"; then
+       if test "$UNAME_PROCESSOR" = x86; then
                UNAME_PROCESSOR=i386
                UNAME_MACHINE=pc
        fi
@@ -1337,7 +1347,7 @@
        # "uname -m" is not consistent, so use $cputype instead. 386
        # is converted to i386 for consistency with other x86
        # operating systems.
-       if test "$cputype" = "386"; then
+       if test "$cputype" = 386; then
            UNAME_MACHINE=i386
        else
            UNAME_MACHINE="$cputype"
@@ -1379,7 +1389,7 @@
        echo i386-pc-xenix
        exit ;;
     i*86:skyos:*:*)
-       echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ 
.*$//'
+       echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE} | sed -e 's/ 
.*$//'`
        exit ;;
     i*86:rdos:*:*)
        echo ${UNAME_MACHINE}-pc-rdos
@@ -1390,6 +1400,9 @@
     x86_64:VMkernel:*:*)
        echo ${UNAME_MACHINE}-unknown-esx
        exit ;;
+    amd64:Isilon\ OneFS:*:*)
+       echo x86_64-unknown-onefs
+       exit ;;
 esac
 
 cat >&2 <<EOF
@@ -1399,9 +1412,9 @@
 the operating system you are using. It is advised that you
 download the most up to date version of the config scripts from
 
-  
http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
 and
-  
http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
 
 If the version you run ($0) is already up to date, please
 send the following data and any information you think might be
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/acsccid-1.1.2/config/config.sub 
new/acsccid-1.1.3/config/config.sub
--- old/acsccid-1.1.2/config/config.sub 2016-02-18 04:37:55.000000000 +0100
+++ new/acsccid-1.1.3/config/config.sub 2016-06-22 07:49:14.000000000 +0200
@@ -1,8 +1,8 @@
 #! /bin/sh
 # Configuration validation subroutine script.
-#   Copyright 1992-2015 Free Software Foundation, Inc.
+#   Copyright 1992-2016 Free Software Foundation, Inc.
 
-timestamp='2015-08-20'
+timestamp='2016-03-30'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -33,7 +33,7 @@
 # Otherwise, we print the canonical config type on stdout and succeed.
 
 # You can get the latest version of this script from:
-# 
http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
 
 # This file is supposed to be the same for all GNU packages
 # and recognize all the CPU types, system types and aliases
@@ -53,8 +53,7 @@
 me=`echo "$0" | sed -e 's,.*/,,'`
 
 usage="\
-Usage: $0 [OPTION] CPU-MFR-OPSYS
-       $0 [OPTION] ALIAS
+Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
 
 Canonicalize a configuration name.
 
@@ -68,7 +67,7 @@
 version="\
 GNU config.sub ($timestamp)
 
-Copyright 1992-2015 Free Software Foundation, Inc.
+Copyright 1992-2016 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -521,7 +520,7 @@
                basic_machine=i386-pc
                os=-aros
                ;;
-        asmjs)
+       asmjs)
                basic_machine=asmjs-unknown
                ;;
        aux)
@@ -1383,7 +1382,7 @@
              | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
              | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
              | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
-             | -bitrig* | -openbsd* | -solidbsd* \
+             | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \
              | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
              | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
              | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
@@ -1399,7 +1398,8 @@
              | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
              | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
              | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
-             | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | 
-tirtos*)
+             | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \
+             | -onefs* | -tirtos*)
        # Remember, each alternative MUST END IN *, to match a version number.
                ;;
        -qnx*)
@@ -1531,6 +1531,8 @@
                ;;
        -nacl*)
                ;;
+       -ios)
+               ;;
        -none)
                ;;
        *)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/acsccid-1.1.2/configure new/acsccid-1.1.3/configure
--- old/acsccid-1.1.2/configure 2016-02-18 04:37:54.000000000 +0100
+++ new/acsccid-1.1.3/configure 2016-06-22 07:49:13.000000000 +0200
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for acsccid 1.1.2.
+# Generated by GNU Autoconf 2.69 for acsccid 1.1.3.
 #
 #
 # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
@@ -587,8 +587,8 @@
 # Identity of this package.
 PACKAGE_NAME='acsccid'
 PACKAGE_TARNAME='acsccid'
-PACKAGE_VERSION='1.1.2'
-PACKAGE_STRING='acsccid 1.1.2'
+PACKAGE_VERSION='1.1.3'
+PACKAGE_STRING='acsccid 1.1.3'
 PACKAGE_BUGREPORT=''
 PACKAGE_URL=''
 
@@ -1366,7 +1366,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures acsccid 1.1.2 to adapt to many kinds of systems.
+\`configure' configures acsccid 1.1.3 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1437,7 +1437,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of acsccid 1.1.2:";;
+     short | recursive ) echo "Configuration of acsccid 1.1.3:";;
    esac
   cat <<\_ACEOF
 
@@ -1570,7 +1570,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-acsccid configure 1.1.2
+acsccid configure 1.1.3
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1989,7 +1989,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by acsccid $as_me 1.1.2, which was
+It was created by acsccid $as_me 1.1.3, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2853,7 +2853,7 @@
 
 # Define the identity of the package.
  PACKAGE='acsccid'
- VERSION='1.1.2'
+ VERSION='1.1.3'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -14546,7 +14546,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by acsccid $as_me 1.1.2, which was
+This file was extended by acsccid $as_me 1.1.3, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -14612,7 +14612,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; 
s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-acsccid config.status 1.1.2
+acsccid config.status 1.1.3
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/acsccid-1.1.2/configure.ac 
new/acsccid-1.1.3/configure.ac
--- old/acsccid-1.1.2/configure.ac      2016-02-18 04:15:43.000000000 +0100
+++ new/acsccid-1.1.3/configure.ac      2016-06-22 06:18:15.000000000 +0200
@@ -4,7 +4,7 @@
 # Require autoconf 2.61
 AC_PREREQ([2.69])
 
-AC_INIT([acsccid], [1.1.2])
+AC_INIT([acsccid], [1.1.3])
 AC_CONFIG_SRCDIR(src/ifdhandler.c)
 AC_CONFIG_AUX_DIR([config])
 AM_INIT_AUTOMAKE(1.8 dist-bzip2 no-dist-gzip foreign subdir-objects)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/acsccid-1.1.2/src/Info.plist.src 
new/acsccid-1.1.3/src/Info.plist.src
--- old/acsccid-1.1.2/src/Info.plist.src        2015-10-27 10:46:14.000000000 
+0100
+++ new/acsccid-1.1.3/src/Info.plist.src        2016-04-21 04:59:58.000000000 
+0200
@@ -77,11 +77,7 @@
                - activate this option but you will have problems depending on
                  the bug
 
-       0x08: DRIVER_OPTION_RESET_ON_CLOSE
-               This option may be required on Linux 2.4 so that the
-               device reset if sequencial (bSeq) counter and can be
-               reused if pcscd restart. Otherwise the reader needs to
-               be unplugged/replugged.
+       0x08: free
 
        bits 4 & 5: (values 0x00, 0x10, 0x20, 0x30)
         0x00: power on the card at 5V (default value)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/acsccid-1.1.2/src/ccid.c new/acsccid-1.1.3/src/ccid.c
--- old/acsccid-1.1.2/src/ccid.c        2016-02-17 10:28:38.000000000 +0100
+++ new/acsccid-1.1.3/src/ccid.c        2016-06-07 05:58:23.000000000 +0200
@@ -79,6 +79,15 @@
                        ccid_descriptor->dwMaxDataRate = 9600;
                        break;
 
+               case ElatecTWN4:
+                       /* use a timeout of 400 ms instead of 100 ms in 
CmdGetSlotStatus()
+                        * used by CreateChannelByNameOrChannel()
+                        * The reader answers after 280 ms if no tag is present 
*/
+               case SCM_SCL011:
+                       /* The SCM SCL011 reader needs 350 ms to answer */
+                       ccid_descriptor->readTimeout = DEFAULT_COM_READ_TIMEOUT 
* 4;
+                       break;
+
                case ACS_ACR122U:
                case ACS_AET62_PICC_READER:
                case ACS_AET62_1SAM_PICC_READER:
@@ -478,10 +487,20 @@
                case HP_CCIDSMARTCARDKEYBOARD:
                case FUJITSUSMARTKEYB:
                        /* the Secure Pin Entry is bogus so disable it
-                        * 
http://martinpaljak.net/2011/03/19/insecure-hp-usb-smart-card-keyboard/
+                        * 
https://web.archive.org/web/20120320001756/http://martinpaljak.net/2011/03/19/insecure-hp-usb-smart-card-keyboard/
+                        *
+                        * The problem is that the PIN code entered using the 
Secure
+                        * Pin Entry function is also sent to the host.
                         */
                        ccid_descriptor->bPINSupport = 0;
                        break;
+               case HID_AVIATOR:
+                       /* The chip advertises pinpad but actually doesn't have 
one */
+                       ccid_descriptor->bPINSupport = 0;
+                       /* Firmware uses chaining */
+                       ccid_descriptor->dwFeatures &= 
~CCID_CLASS_EXCHANGE_MASK;
+                       ccid_descriptor->dwFeatures |= CCID_CLASS_EXTENDED_APDU;
+                       break;
 
 #if 0
                /* SCM SCR331-DI contactless */
@@ -536,6 +555,12 @@
                        }
                        break;
 
+               case ElatecTWN4:
+               case SCM_SCL011:
+                       /* restore default timeout (modified in 
ccid_open_hack_pre()) */
+                       ccid_descriptor->readTimeout = DEFAULT_COM_READ_TIMEOUT;
+                       break;
+
                case ACS_ACR33U_A1_3SAM_ICC_READER:
                case ACS_ACR33U_A2_3SAM_ICC_READER:
                case ACS_ACR33U_A3_3SAM_ICC_READER:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/acsccid-1.1.2/src/ccid.h new/acsccid-1.1.3/src/ccid.h
--- old/acsccid-1.1.2/src/ccid.h        2016-02-17 10:28:38.000000000 +0100
+++ new/acsccid-1.1.3/src/ccid.h        2016-06-07 05:58:48.000000000 +0200
@@ -244,6 +244,9 @@
 #define FEITIANR502DUAL 0x096E060D
 #define MICROCHIP_SEC1100 0x04241104
 #define CHERRY_KC1000SC 0x046A00A1
+#define ElatecTWN4     0x09D80427
+#define SCM_SCL011 0x04E65293
+#define HID_AVIATOR    0x076B3A21
 
 // CCID readers
 #define ACS_ACR32_ICC_READER                   0x072fb301
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/acsccid-1.1.2/src/ccid_ifdhandler.h 
new/acsccid-1.1.3/src/ccid_ifdhandler.h
--- old/acsccid-1.1.2/src/ccid_ifdhandler.h     2016-02-17 10:28:38.000000000 
+0100
+++ new/acsccid-1.1.3/src/ccid_ifdhandler.h     2016-04-21 09:20:39.000000000 
+0200
@@ -1,7 +1,7 @@
 /*
     ccid_ifdhandler.h: non-generic ifdhandler functions
     Copyright (C) 2004-2010   Ludovic Rousseau
-    Copyright (C) 2010-2014   Advanced Card Systems Ltd.
+    Copyright (C) 2010-2016   Advanced Card Systems Ltd.
 
     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Lesser General Public
@@ -50,10 +50,19 @@
 // ACR128 I/O control code for escape command
 #define IOCTL_ACR128_READER_COMMAND    SCARD_CTL_CODE(2079)
 
+/* Control codes for Windows compatibility. */
+#define WINSCARD_CTL_CODE(code)                                        
(0x310000 | (code << 2))
+#define WINIOCTL_CCID_ESCAPE                                   
WINSCARD_CTL_CODE(3500)
+#define WINIOCTL_SMARTCARD_GET_FIRMWARE_VERSION        WINSCARD_CTL_CODE(2078)
+#define WINIOCTL_SMARTCARD_DISPLAY_LCD_MESSAGE WINSCARD_CTL_CODE(2079)
+#define WINIOCTL_SMARTCARD_READ_KEY                            
WINSCARD_CTL_CODE(2080)
+#define WINIOCTL_SMARTCARD_SET_CARD_TYPE               WINSCARD_CTL_CODE(2060)
+#define WINIOCTL_SMARTCARD_SET_CARD_VOLTAGE            WINSCARD_CTL_CODE(2074)
+#define WINIOCTL_ACR128_READER_COMMAND                 WINSCARD_CTL_CODE(2079)
+
 #define DRIVER_OPTION_CCID_EXCHANGE_AUTHORIZED 1
 #define DRIVER_OPTION_GEMPC_TWIN_KEY_APDU 2
 #define DRIVER_OPTION_USE_BOGUS_FIRMWARE 4
-#define DRIVER_OPTION_RESET_ON_CLOSE 8
 #define DRIVER_OPTION_DISABLE_PIN_RETRIES (1 << 6)
 
 // ACS driver option
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/acsccid-1.1.2/src/ccid_usb.c 
new/acsccid-1.1.3/src/ccid_usb.c
--- old/acsccid-1.1.2/src/ccid_usb.c    2016-02-17 10:28:38.000000000 +0100
+++ new/acsccid-1.1.3/src/ccid_usb.c    2016-06-21 10:02:43.000000000 +0200
@@ -1,7 +1,7 @@
 /*
        ccid_usb.c: USB access routines using the libusb library
        Copyright (C) 2003-2010 Ludovic Rousseau
-       Copyright (C) 2009-2015 Advanced Card Systems Ltd.
+       Copyright (C) 2009-2016 Advanced Card Systems Ltd.
 
        This library is free software; you can redistribute it and/or
        modify it under the terms of the GNU Lesser General Public
@@ -200,6 +200,9 @@
 {
        int i, to_exit = TRUE;
 
+       if (NULL == ctx)
+               return;
+
        /* if at least 1 reader is still in use we do not exit libusb */
        for (i=0; i<CCID_DRIVER_MAX_READERS; i++)
        {
@@ -713,12 +716,24 @@
                                }
 
 #ifdef USE_COMPOSITE_AS_MULTISLOT
-                               /* use the next interface for the next "slot" */
-                               static_interface++;
-
-                               /* reset for a next reader */
-                               if (static_interface > 2)
-                                       static_interface = (FEITIANR502DUAL == 
readerID) ? 0: 1;
+                               if ((GEMALTOPROXDU == readerID)
+                                       || (GEMALTOPROXSU == readerID)
+                                       || (FEITIANR502DUAL == readerID)
+                                       || (ACS_ACR1281_DUAL_READER_QPBOC == 
readerID)
+                                       || (ACS_ACR1281_DUAL_READER_BSI == 
readerID)
+                                       || (ACS_ACR1281_1S_PICC_READER == 
readerID)
+                                       || (ACS_ACR1251_1S_CL_READER == 
readerID)
+                                       || (ACS_ACR1251U_C == readerID)
+                                       || (ACS_ACR1251K_DUAL_READER == 
readerID)
+                                       || (ACS_ACR1252_1S_CL_READER == 
readerID))
+                               {
+                                       /* use the next interface for the next 
"slot" */
+                                       static_interface++;
+
+                                       /* reset for a next reader */
+                                       if (static_interface > 2)
+                                               static_interface = 
(FEITIANR502DUAL == readerID) ? 0: 1;
+                               }
 #endif
 
                                /* Get Endpoints values*/
@@ -1029,6 +1044,9 @@
                        goto again_libusb;
                }
 #endif
+               /* failed */
+               close_libusb_if_needed();
+
                if (claim_failed)
                        return STATUS_COMM_ERROR;
                DEBUG_INFO1("Device not found?");
@@ -1047,6 +1065,9 @@
        /* free bundle list */
        bundleRelease(&plist);
 
+       if (return_value != STATUS_SUCCESS)
+               close_libusb_if_needed();
+
        return return_value;
 } /* OpenUSBByName */
 
@@ -1343,10 +1364,6 @@
                if (usbDevice[reader_index].ccid.sIFD_iManufacturer)
                        free(usbDevice[reader_index].ccid.sIFD_iManufacturer);
 
-               /* reset so that bSeq starts at 0 again */
-               if (DriverOptions & DRIVER_OPTION_RESET_ON_CLOSE)
-                       
(void)libusb_reset_device(usbDevice[reader_index].dev_handle);
-
                if (usbDevice[reader_index].ccid.arrayOfSupportedDataRates)
                        
free(usbDevice[reader_index].ccid.arrayOfSupportedDataRates);
 
@@ -1486,7 +1503,8 @@
                /* CCID Class? */
                if (desc->interface[i].altsetting->bInterfaceClass == 0xb
 #ifdef ALLOW_PROPRIETARY_CLASS
-                       || desc->interface[i].altsetting->bInterfaceClass == 
0xff
+                       || (desc->interface[i].altsetting->bInterfaceClass == 
0xff
+                       && 54 == desc->interface[i].altsetting->extra_length)
 
                        // bInterfaceClass is 0x00 in ACR83U, ACR88U and ACR128U
                        || desc->interface[i].altsetting->bInterfaceClass == 
0x00
@@ -1690,7 +1708,8 @@
        ret = libusb_submit_transfer(transfer);
        if (ret < 0) {
                libusb_free_transfer(transfer);
-               DEBUG_CRITICAL2("libusb_submit_transfer failed: %d", ret);
+               DEBUG_CRITICAL2("libusb_submit_transfer failed: %s",
+                       libusb_error_name(ret));
                return ret;
        }
 
@@ -1698,17 +1717,18 @@
 
        while (!completed)
        {
-               ret = libusb_handle_events(ctx);
+               ret = libusb_handle_events_completed(ctx, &completed);
                if (ret < 0)
                {
                        if (ret == LIBUSB_ERROR_INTERRUPTED)
                                continue;
                        libusb_cancel_transfer(transfer);
                        while (!completed)
-                               if (libusb_handle_events(ctx) < 0)
+                               if (libusb_handle_events_completed(ctx, 
&completed) < 0)
                                        break;
                        libusb_free_transfer(transfer);
-                       DEBUG_CRITICAL2("libusb_handle_events failed: %d", ret);
+                       DEBUG_CRITICAL2("libusb_handle_events failed: %s",
+                               libusb_error_name(ret));
                        return ret;
                }
        }
@@ -1852,7 +1872,7 @@
                completed = 0;
                while (!completed && !msExt->terminated)
                {
-                       rv = libusb_handle_events(ctx);
+                       rv = libusb_handle_events_completed(ctx, &completed);
                        if (rv < 0)
                        {
                                DEBUG_COMM2("libusb_handle_events err %d", rv);
@@ -1864,7 +1884,7 @@
 
                                while (!completed && !msExt->terminated)
                                {
-                                       if (libusb_handle_events(ctx) < 0)
+                                       if (libusb_handle_events_completed(ctx, 
&completed) < 0)
                                                break;
                                }
 
@@ -1885,6 +1905,15 @@
 
                        libusb_free_transfer(transfer);
 
+                       /* Break if the device was disconnected. */
+                       if (status == LIBUSB_TRANSFER_NO_DEVICE)
+                       {
+                               DEBUG_COMM3("Multi_PollingProc (%d/%d): Device 
disconnected",
+                                       
usbDevice[msExt->reader_index].bus_number,
+                                       
usbDevice[msExt->reader_index].device_address);
+                               break;
+                       }
+
                        switch (status)
                        {
                                case LIBUSB_TRANSFER_COMPLETED:
@@ -2231,7 +2260,7 @@
                completed = 0;
                while (!completed && !usbDevice[reader_index].terminated)
                {
-                       rv = libusb_handle_events(ctx);
+                       rv = libusb_handle_events_completed(ctx, &completed);
                        if (rv < 0)
                        {
                                DEBUG_COMM2("libusb_handle_events err %d", rv);
@@ -2243,7 +2272,7 @@
 
                                while (!completed && 
!usbDevice[reader_index].terminated)
                                {
-                                       if (libusb_handle_events(ctx) < 0)
+                                       if (libusb_handle_events_completed(ctx, 
&completed) < 0)
                                                break;
                                }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/acsccid-1.1.2/src/ifdhandler.c 
new/acsccid-1.1.3/src/ifdhandler.c
--- old/acsccid-1.1.2/src/ifdhandler.c  2016-02-17 10:28:38.000000000 +0100
+++ new/acsccid-1.1.3/src/ifdhandler.c  2016-06-21 05:24:00.000000000 +0200
@@ -1,7 +1,7 @@
 /*
     ifdhandler.c: IFDH API
     Copyright (C) 2003-2010   Ludovic Rousseau
-    Copyright (C) 2009-2015   Advanced Card Systems Ltd.
+    Copyright (C) 2009-2016   Advanced Card Systems Ltd.
 
     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Lesser General Public
@@ -223,7 +223,13 @@
                oldReadTimeout = ccid_descriptor->readTimeout;
 
                /* 100 ms just to resync the USB toggle bits */
-               ccid_descriptor->readTimeout = 100;
+               /* Do not use a fixed 100 ms value but compute it from the
+                * default timeout. It is now possible to use a different value
+                * by changing readTimeout in ccid_open_hack_pre()
+                * ccid_descriptor->readTimeout = ccid_descriptor->readTimeout 
* 100.0 / DEFAULT_COM_READ_TIMEOUT; */
+
+               /* Avoid libusb timeout on Mac OS X. */
+               ccid_descriptor->readTimeout = 1000;
 
                if ((IFD_COMMUNICATION_ERROR == 
CcidSlots[reader_index].pGetSlotStatus(reader_index, pcbuffer))
                        && (IFD_COMMUNICATION_ERROR == 
CcidSlots[reader_index].pGetSlotStatus(reader_index, pcbuffer)))
@@ -665,7 +671,7 @@
                                if (ccid_desc->sIFD_serial_number)
                                {
                                        strlcpy((char *)Value, 
ccid_desc->sIFD_serial_number, *Length);
-                                       *Length = strlen((char *)Value);
+                                       *Length = strlen((char *)Value)+1;
                                }
                                else
                                {
@@ -1764,7 +1770,8 @@
                (ACS_AET65_1SAM_ICC_READER == ccid_descriptor -> readerID))
        {
                // Set card voltage
-               if (IOCTL_SMARTCARD_SET_CARD_VOLTAGE == dwControlCode)
+               if ((IOCTL_SMARTCARD_SET_CARD_VOLTAGE == dwControlCode)
+                       || (WINIOCTL_SMARTCARD_SET_CARD_VOLTAGE == 
dwControlCode))
                {
                        unsigned int iBytesReturned;
 
@@ -1775,7 +1782,8 @@
                }
 
                // Set card type
-               if (IOCTL_SMARTCARD_SET_CARD_TYPE == dwControlCode)
+               if ((IOCTL_SMARTCARD_SET_CARD_TYPE == dwControlCode)
+                       || (WINIOCTL_SMARTCARD_SET_CARD_TYPE == dwControlCode))
                {
                        unsigned int iBytesReturned;
 
@@ -2195,7 +2203,8 @@
        }
 
        // MS CCID I/O control code for escape command
-       if (IOCTL_CCID_ESCAPE == dwControlCode)
+       if ((IOCTL_CCID_ESCAPE == dwControlCode)
+               || (WINIOCTL_CCID_ESCAPE == dwControlCode))
        {
                unsigned int iBytesReturned;
 
@@ -2213,7 +2222,8 @@
                (ACS_APG8201Z2 == ccid_descriptor -> readerID))
        {
                // Get firmware version
-               if (IOCTL_SMARTCARD_GET_FIRMWARE_VERSION == dwControlCode)
+               if ((IOCTL_SMARTCARD_GET_FIRMWARE_VERSION == dwControlCode)
+                       || (WINIOCTL_SMARTCARD_GET_FIRMWARE_VERSION == 
dwControlCode))
                {
                        unsigned char command[] = { 0x04, 0x00, 0x00, 0x00, 
0x00 };
                        unsigned int commandLen = sizeof(command);
@@ -2238,7 +2248,8 @@
                }
 
                // Display LCD message
-               if (IOCTL_SMARTCARD_DISPLAY_LCD_MESSAGE == dwControlCode)
+               if ((IOCTL_SMARTCARD_DISPLAY_LCD_MESSAGE == dwControlCode)
+                       || (WINIOCTL_SMARTCARD_DISPLAY_LCD_MESSAGE == 
dwControlCode))
                {
                        unsigned char command[5 + 32] = { 0x05, 0x00, 0x20, 
0x00, 0x00 };
                        unsigned int commandLen = sizeof(command);
@@ -2272,7 +2283,8 @@
                }
 
                // Read key
-               if (IOCTL_SMARTCARD_READ_KEY == dwControlCode)
+               if ((IOCTL_SMARTCARD_READ_KEY == dwControlCode)
+                       || (WINIOCTL_SMARTCARD_READ_KEY == dwControlCode))
                {
                        unsigned char command[5 + 6] = { 0x06, 0x00, 0x06, 
0x00, 0x00 };
                        unsigned int commandLen = sizeof(command);
@@ -2305,7 +2317,8 @@
        else
        {
                // ACR128 I/O control code for escape command
-               if (IOCTL_ACR128_READER_COMMAND == dwControlCode)
+               if ((IOCTL_ACR128_READER_COMMAND == dwControlCode)
+                       || (WINIOCTL_ACR128_READER_COMMAND == dwControlCode))
                {
                        unsigned char *command;
                        unsigned int commandLen = 3 + TxLength;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/acsccid-1.1.2/src/supported_readers.txt 
new/acsccid-1.1.3/src/supported_readers.txt
--- old/acsccid-1.1.2/src/supported_readers.txt 2016-02-17 02:51:16.000000000 
+0100
+++ new/acsccid-1.1.3/src/supported_readers.txt 2016-04-01 10:38:56.000000000 
+0200
@@ -40,6 +40,9 @@
 # ACR39F
 0x072f:0xb103:ACS ACR39F ICC Reader
 
+# ACR39U-U1
+0x072f:0xb10c:ACS ACR39U ID1 Card Reader
+
 # ACR39U-SAM
 0x072f:0xb104:ACS ACR39U-SAM ICC Reader
 
@@ -123,6 +126,9 @@
 # ACR1251U-C9
 0x072f:0x2238:ACS ACR1251 Reader
 
+# ACM1251U-Z2
+0x072f:0x224f:ACS ACR1251 CL Reader
+
 # ACR1252U-A1
 0x072f:0x223b:ACS ACR1252 1S CL Reader
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/acsccid-1.1.2/src/tokenparser.c 
new/acsccid-1.1.3/src/tokenparser.c
--- old/acsccid-1.1.2/src/tokenparser.c 2016-02-18 04:39:07.000000000 +0100
+++ new/acsccid-1.1.3/src/tokenparser.c 2016-06-22 07:49:45.000000000 +0200
@@ -7,8 +7,8 @@
 
 #define FLEX_SCANNER
 #define YY_FLEX_MAJOR_VERSION 2
-#define YY_FLEX_MINOR_VERSION 5
-#define YY_FLEX_SUBMINOR_VERSION 39
+#define YY_FLEX_MINOR_VERSION 6
+#define YY_FLEX_SUBMINOR_VERSION 0
 #if YY_FLEX_SUBMINOR_VERSION > 0
 #define FLEX_BETA
 #endif
@@ -210,7 +210,7 @@
        /* Number of characters read into yy_ch_buf, not including EOB
         * characters.
         */
-       yy_size_t yy_n_chars;
+       int yy_n_chars;
 
        /* Whether we "own" the buffer - i.e., we know we created it,
         * and can realloc() it to grow it, and should free() it to
@@ -280,7 +280,7 @@
 
 /* yy_hold_char holds the character lost when yytext is formed. */
 static char yy_hold_char;
-static yy_size_t yy_n_chars;           /* number of characters read into 
yy_ch_buf */
+static int yy_n_chars;         /* number of characters read into yy_ch_buf */
 yy_size_t yyleng;
 
 /* Points to current character in buffer. */
@@ -341,7 +341,7 @@
 
 /* Begin user sect3 */
 
-#define yywrap() 1
+#define yywrap() (/*CONSTCOND*/1)
 #define YY_SKIP_YYWRAP
 
 typedef unsigned char YY_CHAR;
@@ -355,11 +355,17 @@
 int yylineno = 1;
 
 extern char *yytext;
+#ifdef yytext_ptr
+#undef yytext_ptr
+#endif
 #define yytext_ptr yytext
 
 static yy_state_type yy_get_previous_state (void );
 static yy_state_type yy_try_NUL_trans (yy_state_type current_state  );
 static int yy_get_next_buffer (void );
+#if defined(__GNUC__) && __GNUC__ >= 3
+__attribute__((__noreturn__))
+#endif
 static void yy_fatal_error (yyconst char msg[]  );
 
 /* Done after the current pattern has been matched and before the
@@ -389,7 +395,7 @@
         0,    0,    0,    0,    0,    0,    5,    0
     } ;
 
-static yyconst flex_int32_t yy_ec[256] =
+static yyconst YY_CHAR yy_ec[256] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -421,13 +427,13 @@
         1,    1,    1,    1,    1
     } ;
 
-static yyconst flex_int32_t yy_meta[21] =
+static yyconst YY_CHAR yy_meta[21] =
     {   0,
         1,    2,    3,    4,    4,    4,    2,    1,    1,    2,
         2,    2,    2,    2,    2,    2,    2,    2,    2,    2
     } ;
 
-static yyconst flex_int16_t yy_base[43] =
+static yyconst flex_uint16_t yy_base[43] =
     {   0,
         0,    7,   49,   50,   50,   50,    0,    1,    0,   36,
        28,   26,   28,   35,   29,    0,   26,   33,   27,   33,
@@ -445,7 +451,7 @@
        38,   38
     } ;
 
-static yyconst flex_int16_t yy_nxt[71] =
+static yyconst flex_uint16_t yy_nxt[71] =
     {   0,
        38,    5,    6,   18,    7,   38,   38,    8,    5,    6,
        37,    7,   36,   38,    8,   10,   35,   34,   11,    4,
@@ -541,7 +547,7 @@
 static list_t *ListValues;
 
 #define YY_NO_INPUT 1
-#line 545 "tokenparser.c"
+#line 551 "tokenparser.c"
 
 #define INITIAL 0
 
@@ -574,11 +580,11 @@
 
 FILE *yyget_in (void );
 
-void yyset_in  (FILE * in_str  );
+void yyset_in  (FILE * _in_str  );
 
 FILE *yyget_out (void );
 
-void yyset_out  (FILE * out_str  );
+void yyset_out  (FILE * _out_str  );
 
 yy_size_t yyget_leng (void );
 
@@ -586,7 +592,7 @@
 
 int yyget_lineno (void );
 
-void yyset_lineno (int line_number  );
+void yyset_lineno (int _line_number  );
 
 /* Macros after this point can all be overridden by user definitions in
  * section 1.
@@ -600,6 +606,10 @@
 #endif
 #endif
 
+#ifndef YY_NO_UNPUT
+    
+#endif
+
 #ifndef yytext_ptr
 static void yy_flex_strncpy (char *,yyconst char *,int );
 #endif
@@ -712,7 +722,7 @@
 
 /* Code executed at the end of each rule. */
 #ifndef YY_BREAK
-#define YY_BREAK break;
+#define YY_BREAK /*LINTED*/break;
 #endif
 
 #define YY_RULE_SETUP \
@@ -722,9 +732,9 @@
  */
 YY_DECL
 {
-       register yy_state_type yy_current_state;
-       register char *yy_cp, *yy_bp;
-       register int yy_act;
+       yy_state_type yy_current_state;
+       char *yy_cp, *yy_bp;
+       int yy_act;
     
        if ( !(yy_init) )
                {
@@ -756,9 +766,9 @@
 #line 67 "tokenparser.l"
 
 
-#line 760 "tokenparser.c"
+#line 770 "tokenparser.c"
 
-       while ( 1 )             /* loops until end-of-file is reached */
+       while ( /*CONSTCOND*/1 )                /* loops until end-of-file is 
reached */
                {
                yy_cp = (yy_c_buf_p);
 
@@ -774,7 +784,7 @@
 yy_match:
                do
                        {
-                       register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ;
+                       YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ;
                        if ( yy_accept[yy_current_state] )
                                {
                                (yy_last_accepting_state) = yy_current_state;
@@ -849,7 +859,7 @@
 #line 75 "tokenparser.l"
 ECHO;
        YY_BREAK
-#line 853 "tokenparser.c"
+#line 863 "tokenparser.c"
 case YY_STATE_EOF(INITIAL):
        yyterminate();
 
@@ -992,9 +1002,9 @@
  */
 static int yy_get_next_buffer (void)
 {
-       register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
-       register char *source = (yytext_ptr);
-       register int number_to_move, i;
+       char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+       char *source = (yytext_ptr);
+       yy_size_t number_to_move, i;
        int ret_val;
 
        if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 
1] )
@@ -1023,7 +1033,7 @@
        /* Try to read more data. */
 
        /* First move last chars to start of buffer. */
-       number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
+       number_to_move = (yy_size_t) ((yy_c_buf_p) - (yytext_ptr)) - 1;
 
        for ( i = 0; i < number_to_move; ++i )
                *(dest++) = *(source++);
@@ -1105,9 +1115,9 @@
        else
                ret_val = EOB_ACT_CONTINUE_SCAN;
 
-       if ((yy_size_t) ((yy_n_chars) + number_to_move) > 
YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+       if ((int) ((yy_n_chars) + number_to_move) > 
YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
                /* Extend the array by 50%, plus the number we really need. */
-               yy_size_t new_size = (yy_n_chars) + number_to_move + 
((yy_n_chars) >> 1);
+               int new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 
1);
                YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void 
*) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size  );
                if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
                        YY_FATAL_ERROR( "out of dynamic memory in 
yy_get_next_buffer()" );
@@ -1126,14 +1136,14 @@
 
     static yy_state_type yy_get_previous_state (void)
 {
-       register yy_state_type yy_current_state;
-       register char *yy_cp;
+       yy_state_type yy_current_state;
+       char *yy_cp;
     
        yy_current_state = (yy_start);
 
        for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp 
)
                {
-               register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 
1);
+               YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
                if ( yy_accept[yy_current_state] )
                        {
                        (yy_last_accepting_state) = yy_current_state;
@@ -1158,10 +1168,10 @@
  */
     static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state )
 {
-       register int yy_is_jam;
-       register char *yy_cp = (yy_c_buf_p);
+       int yy_is_jam;
+       char *yy_cp = (yy_c_buf_p);
 
-       register YY_CHAR yy_c = 1;
+       YY_CHAR yy_c = 1;
        if ( yy_accept[yy_current_state] )
                {
                (yy_last_accepting_state) = yy_current_state;
@@ -1179,6 +1189,10 @@
                return yy_is_jam ? 0 : yy_current_state;
 }
 
+#ifndef YY_NO_UNPUT
+
+#endif
+
 #ifndef YY_NO_INPUT
 #ifdef __cplusplus
     static int yyinput (void)
@@ -1328,7 +1342,7 @@
        if ( ! b )
                YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
 
-       b->yy_buf_size = size;
+       b->yy_buf_size = (yy_size_t)size;
 
        /* yy_ch_buf has to be 2 characters longer than the size given because
         * we need to put in 2 end-of-buffer characters.
@@ -1483,7 +1497,7 @@
                 * scanner will even need a stack. We use 2 instead of 1 to 
avoid an
                 * immediate realloc on the next call.
          */
-               num_to_alloc = 1;
+               num_to_alloc = 1; /* After all that talk, this was set to 1 
anyways... */
                (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc
                                                                (num_to_alloc * 
sizeof(struct yy_buffer_state*)
                                                                );
@@ -1500,7 +1514,7 @@
        if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
 
                /* Increase the buffer to prepare for a possible push. */
-               int grow_size = 8 /* arbitrary grow size */;
+               yy_size_t grow_size = 8 /* arbitrary grow size */;
 
                num_to_alloc = (yy_buffer_stack_max) + grow_size;
                (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc
@@ -1608,7 +1622,7 @@
 
 static void yy_fatal_error (yyconst char* msg )
 {
-       (void) fprintf( stderr, "%s\n", msg );
+                       (void) fprintf( stderr, "%s\n", msg );
        exit( YY_EXIT_FAILURE );
 }
 
@@ -1674,29 +1688,29 @@
 }
 
 /** Set the current line number.
- * @param line_number
+ * @param _line_number line number
  * 
  */
-void yyset_lineno (int  line_number )
+void yyset_lineno (int  _line_number )
 {
     
-    yylineno = line_number;
+    yylineno = _line_number;
 }
 
 /** Set the input stream. This does not discard the current
  * input buffer.
- * @param in_str A readable stream.
+ * @param _in_str A readable stream.
  * 
  * @see yy_switch_to_buffer
  */
-void yyset_in (FILE *  in_str )
+void yyset_in (FILE *  _in_str )
 {
-        yyin = in_str ;
+        yyin = _in_str ;
 }
 
-void yyset_out (FILE *  out_str )
+void yyset_out (FILE *  _out_str )
 {
-        yyout = out_str ;
+        yyout = _out_str ;
 }
 
 int yyget_debug  (void)
@@ -1704,9 +1718,9 @@
         return yy_flex_debug;
 }
 
-void yyset_debug (int  bdebug )
+void yyset_debug (int  _bdebug )
 {
-        yy_flex_debug = bdebug ;
+        yy_flex_debug = _bdebug ;
 }
 
 static int yy_init_globals (void)
@@ -1766,7 +1780,8 @@
 #ifndef yytext_ptr
 static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
 {
-       register int i;
+               
+       int i;
        for ( i = 0; i < n; ++i )
                s1[i] = s2[i];
 }
@@ -1775,7 +1790,7 @@
 #ifdef YY_NEED_STRLEN
 static int yy_flex_strlen (yyconst char * s )
 {
-       register int n;
+       int n;
        for ( n = 0; s[n]; ++n )
                ;
 
@@ -1785,11 +1800,12 @@
 
 void *yyalloc (yy_size_t  size )
 {
-       return (void *) malloc( size );
+                       return (void *) malloc( size );
 }
 
 void *yyrealloc  (void * ptr, yy_size_t  size )
 {
+               
        /* The cast to (char *) in the following accommodates both
         * implementations that use char* generic pointers, and those
         * that use void* generic pointers.  It works with the latter
@@ -1802,12 +1818,12 @@
 
 void yyfree (void * ptr )
 {
-       free( (char *) ptr );   /* see yyrealloc() for (char *) cast */
+                       free( (char *) ptr );   /* see yyrealloc() for (char *) 
cast */
 }
 
 #define YYTABLES_NAME "yytables"
 
-#line 74 "tokenparser.l"
+#line 75 "tokenparser.l"
 
 
 


Reply via email to