From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 10283 invoked by alias); 17 Jul 2009 08:48:53 -0000 Received: (qmail 10234 invoked by uid 22791); 17 Jul 2009 08:48:31 -0000 X-SWARE-Spam-Status: No, hits=-0.2 required=5.0 tests=AWL,BAYES_40,J_CHICKENPOX_46,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from mail-pz0-f203.google.com (HELO mail-pz0-f203.google.com) (209.85.222.203) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 17 Jul 2009 08:48:10 +0000 Received: by pzk41 with SMTP id 41so506490pzk.12 for ; Fri, 17 Jul 2009 01:48:07 -0700 (PDT) MIME-Version: 1.0 Received: by 10.142.155.7 with SMTP id c7mr214817wfe.41.1247820487283; Fri, 17 Jul 2009 01:48:07 -0700 (PDT) In-Reply-To: <4A5A82F9.5050503@vmware.com> References: <4A5A82F9.5050503@vmware.com> From: Hui Zhu Date: Fri, 17 Jul 2009 12:03:00 -0000 Message-ID: Subject: Re: [RFA/RFC Prec] Add Linux AMD64 process record support second version, (64 bits system call support) 2/3 To: Michael Snyder Cc: gdb-patches ml Content-Type: multipart/mixed; boundary=000e0cd2de14e355a2046ee2d839 X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2009-07/txt/msg00423.txt.bz2 --000e0cd2de14e355a2046ee2d839 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 124188 On Mon, Jul 13, 2009 at 08:42, Michael Snyder wrote: > Hui Zhu wrote: >> >> The old linux-record.c just support 32 bits system call and some other >> problem. =A0This patch fix them all. >> >> 2009-07-07 =A0Hui Zhu =A0 >> >> =A0 =A0 =A0 =A0Add process record Linux system call 64 bits support. >> >> =A0 =A0 =A0 =A0* linux-record.h (linux_record_tdep): Add size_pointer, >> =A0 =A0 =A0 =A0size_size_t, size_iovec and arg6. >> =A0 =A0 =A0 =A0* i386-linux-tdep.c (i386_linux_init_abi): Ditto. >> =A0 =A0 =A0 =A0(i386_linux_intx80_sysenter_record): Add a check for syst= em >> =A0 =A0 =A0 =A0call number. >> =A0 =A0 =A0 =A0* linux-record.c (record_linux_system_call): Make this >> =A0 =A0 =A0 =A0function support 64 bits. > > Again, preliminary, mostly whitespace formatting comments. > >> @@ -371,8 +371,15 @@ i386_linux_intx80_sysenter_record (struc >> >> =A0 regcache_raw_read (regcache, I386_EAX_REGNUM, (gdb_byte *)&tmpu32); >> >> + =A0if (tmpu32 > 499) >> + =A0 =A0{ >> + =A0 =A0 =A0printf_unfiltered (_("Process record and replay target does= n't " >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 "support syscall n= umber %u\n"), tmpu32); >> + =A0 =A0 =A0return -1; >> + =A0 =A0} >> + >> =A0 ret =3D record_linux_system_call (tmpu32, regcache, >> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 &i386_= linux_record_tdep); >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0&i3= 86_linux_record_tdep); > > This line is just a change between spaces and tabs. > We like to have whitespace-only changes submitted separately. > > Just add -w and/or -b to your diff flags, and these will disappear. > >> @@ -481,6 +488,7 @@ i386_linux_init_abi (struct gdbarch_info >> =A0 /* Initialize the i386_linux_record_tdep. =A0*/ >> =A0 /* These values are the size of the type that will be used in a syst= em >> =A0 =A0 =A0call. =A0They are obtained from Linux Kernel source. =A0*/ >> + =A0i386_linux_record_tdep.size_pointer =3D 4; > > Can't you use gdbarch_ptr_bit(gdbarch) for this? > Just trying to avoid duplication. > >> + >> + =A0a =3D alloca (tdep->size_int); >> + >> + =A0if (record_arch_list_add_mem ((CORE_ADDR)len, tdep->size_int)) >> + =A0 =A0return -1; >> + >> + =A0/* Get the addrlen. =A0*/ >> + =A0if (target_read_memory ((CORE_ADDR)len, a, tdep->size_int)) > > Space after cast. =A0There are a whole lot like this in this file. > >> + =A0 =A0{ >> + =A0 =A0 =A0if (record_debug) >> + =A0 =A0 =A0 =A0fprintf_unfiltered (gdb_stdlog, >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0"Process record= : error reading " >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0"memory at addr= =3D 0x%s len =3D %d.\n", >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0phex_nz (len, t= dep->size_pointer), >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0tdep->size_int); >> + =A0 =A0 =A0 =A0return -1; >> + =A0 =A0} >> + =A0addrlen =3D (int)extract_unsigned_integer(a, tdep->size_int, byte_o= rder); > > Space after function name. =A0And after cast. > Search for "extract_unsigned_integer", there are several like this. > 2009-07-17 Hui Zhu Add process record Linux system call 64 bits support. * linux-record.h (linux_record_tdep): Add size_pointer, size_size_t, size_iovec and arg6. Change the values of size_int, size_long and size_ulong to gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT, gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT, gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT. * i386-linux-tdep.c (i386_linux_init_abi): Ditto. (i386_linux_intx80_sysenter_record): Add a check for system call number. * linux-record.c (record_linux_system_call): Make this function support 64 bits. --- i386-linux-tdep.c | 26 linux-record.c | 2563 ++++++++++++++++++++++++++++++-------------------= ----- linux-record.h | 5 3 files changed, 1482 insertions(+), 1112 deletions(-) --- a/i386-linux-tdep.c +++ b/i386-linux-tdep.c @@ -369,7 +369,14 @@ i386_linux_intx80_sysenter_record (struc int ret; uint32_t tmpu32; - regcache_raw_read (regcache, I386_EAX_REGNUM, (gdb_byte *)&tmpu32); + regcache_raw_read (regcache, I386_EAX_REGNUM, (gdb_byte *) &tmpu32); + + if (tmpu32 > 499) + { + printf_unfiltered (_("Process record and replay target doesn't " + "support syscall number %u\n"), tmpu32); + return -1; + } ret =3D record_linux_system_call (tmpu32, regcache, &i386_linux_record_tdep); @@ -481,6 +488,8 @@ i386_linux_init_abi (struct gdbarch_info /* Initialize the i386_linux_record_tdep. */ /* These values are the size of the type that will be used in a system call. They are obtained from Linux Kernel source. */ + i386_linux_record_tdep.size_pointer + =3D gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT; i386_linux_record_tdep.size__old_kernel_stat =3D 32; i386_linux_record_tdep.size_tms =3D 16; i386_linux_record_tdep.size_loff_t =3D 8; @@ -501,9 +510,12 @@ i386_linux_init_abi (struct gdbarch_info i386_linux_record_tdep.size_statfs =3D 64; i386_linux_record_tdep.size_statfs64 =3D 84; i386_linux_record_tdep.size_sockaddr =3D 16; - i386_linux_record_tdep.size_int =3D 4; - i386_linux_record_tdep.size_long =3D 4; - i386_linux_record_tdep.size_ulong =3D 4; + i386_linux_record_tdep.size_int + =3D gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT; + i386_linux_record_tdep.size_long + =3D gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT; + i386_linux_record_tdep.size_ulong + =3D gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT; i386_linux_record_tdep.size_msghdr =3D 28; i386_linux_record_tdep.size_itimerval =3D 16; i386_linux_record_tdep.size_stat =3D 88; @@ -536,7 +548,8 @@ i386_linux_init_abi (struct gdbarch_info i386_linux_record_tdep.size_io_event =3D 32; i386_linux_record_tdep.size_iocb =3D 64; i386_linux_record_tdep.size_epoll_event =3D 12; - i386_linux_record_tdep.size_itimerspec =3D i386_linux_record_tdep.size_timespec * 2; + i386_linux_record_tdep.size_itimerspec + =3D i386_linux_record_tdep.size_timespec * 2; i386_linux_record_tdep.size_mq_attr =3D 32; i386_linux_record_tdep.size_siginfo =3D 128; i386_linux_record_tdep.size_termios =3D 36; @@ -546,6 +559,8 @@ i386_linux_init_abi (struct gdbarch_info i386_linux_record_tdep.size_serial_struct =3D 60; i386_linux_record_tdep.size_serial_icounter_struct =3D 80; i386_linux_record_tdep.size_hayes_esp_config =3D 12; + i386_linux_record_tdep.size_size_t =3D 4; + i386_linux_record_tdep.size_iovec =3D 8; /* These values are the second argument of system call "sys_ioctl". They are obtained from Linux Kernel source. */ @@ -627,6 +642,7 @@ i386_linux_init_abi (struct gdbarch_info i386_linux_record_tdep.arg3 =3D I386_EDX_REGNUM; i386_linux_record_tdep.arg4 =3D I386_ESI_REGNUM; i386_linux_record_tdep.arg5 =3D I386_EDI_REGNUM; + i386_linux_record_tdep.arg6 =3D I386_EBP_REGNUM; tdep->i386_intx80_record =3D i386_linux_intx80_sysenter_record; tdep->i386_sysenter_record =3D i386_linux_intx80_sysenter_record; --- a/linux-record.c +++ b/linux-record.c @@ -19,6 +19,7 @@ #include "defs.h" #include "target.h" +#include "gdbtypes.h" #include "regcache.h" #include "record.h" #include "linux-record.h" @@ -80,6 +81,133 @@ #define RECORD_Q_XGETQSTAT (('5' << 8) + 5) #define RECORD_Q_XGETQUOTA (('3' << 8) + 3) +#define OUTPUT_REG(val, num) phex_nz ((val), \ + TYPE_LENGTH (gdbarch_register_type (get_regcache_arch (regcache), (num= )))) + +static int +record_linux_sockaddr (struct regcache *regcache, + struct linux_record_tdep *tdep, ULONGEST addr, + ULONGEST len) +{ + gdb_byte *a; + int addrlen; + struct gdbarch *gdbarch =3D get_regcache_arch (regcache); + enum bfd_endian byte_order =3D gdbarch_byte_order (gdbarch); + + if (!addr) + return 0; + + a =3D alloca (tdep->size_int); + + if (record_arch_list_add_mem ((CORE_ADDR) len, tdep->size_int)) + return -1; + + /* Get the addrlen. */ + if (target_read_memory ((CORE_ADDR) len, a, tdep->size_int)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading " + "memory at addr =3D 0x%s len =3D %d.\n", + phex_nz (len, tdep->size_pointer), + tdep->size_int); + return -1; + } + addrlen =3D (int) extract_unsigned_integer(a, tdep->size_int, byte_order= ); + if (addrlen <=3D 0 || addrlen > tdep->size_sockaddr) + addrlen =3D tdep->size_sockaddr; + + if (record_arch_list_add_mem ((CORE_ADDR) addr, addrlen)) + return -1; + + return 0; +} + +static int +record_linux_msghdr (struct regcache *regcache, + struct linux_record_tdep *tdep, ULONGEST addr) +{ + gdb_byte *a; + struct gdbarch *gdbarch =3D get_regcache_arch (regcache); + enum bfd_endian byte_order =3D gdbarch_byte_order (gdbarch); + + if (!addr) + return 0; + + if (record_arch_list_add_mem ((CORE_ADDR) addr, tdep->size_msghdr)) + return -1; + + a =3D alloca (tdep->size_msghdr); + if (target_read_memory ((CORE_ADDR) addr, a, tdep->size_msghdr)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading " + "memory at addr =3D 0x%s " + "len =3D %d.\n", + phex_nz (addr, tdep->size_pointer), + tdep->size_msghdr); + return -1; + } + + /* msg_name msg_namelen */ + addr =3D extract_unsigned_integer (a, tdep->size_pointer, byte_order); + a +=3D tdep->size_pointer; + if (record_arch_list_add_mem ((CORE_ADDR) addr, + (int) extract_unsigned_integer (a, + tdep->size_int, + byte_order))) + return -1; + a +=3D tdep->size_int; + + /* msg_iov msg_iovlen */ + addr =3D extract_unsigned_integer (a, tdep->size_pointer, byte_order); + a +=3D tdep->size_pointer; + if (addr) + { + ULONGEST i; + ULONGEST len =3D extract_unsigned_integer (a, tdep->size_size_t, + byte_order); + gdb_byte *iov =3D alloca (tdep->size_iovec); + + for (i =3D 0; i < len; i++) + { + if (target_read_memory ((CORE_ADDR) addr, iov, tdep->size_iovec)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error " + "reading memory at " + "addr =3D 0x%s " + "len =3D %d.\n", + phex_nz (addr,tdep->size_pointer), + tdep->size_iovec); + return -1; + } + if (record_arch_list_add_mem ((CORE_ADDR) extract_unsigned_integ= er + (iov, tdep->size_poi= nter, + byte_order), + (int) extract_unsigned_integer + (iov + tdep->size_pointer, + tdep->size_size_t, + byte_order))) + return -1; + addr +=3D tdep->size_iovec; + } + } + a +=3D tdep->size_size_t; + + /* msg_control msg_controllen */ + addr =3D extract_unsigned_integer (a, tdep->size_pointer, byte_order); + a +=3D tdep->size_pointer; + if (record_arch_list_add_mem ((CORE_ADDR) addr, + (int) extract_unsigned_integer + (a, tdep->size_size_t, byte_order)= )) + return -1; + + return 0; +} + /* When the architecture process record get a Linux syscall instruction, it will get a Linux syscall number of this architecture and convert it to the Linux syscall number "num" which @@ -94,10 +222,11 @@ int record_linux_system_call (int num, struct regcache *regcache, - struct linux_record_tdep *tdep) + struct linux_record_tdep *tdep) { struct gdbarch *gdbarch =3D get_regcache_arch (regcache); - uint32_t tmpu32; + enum bfd_endian byte_order =3D gdbarch_byte_order (gdbarch); + ULONGEST tmpulongest; switch (num) { @@ -108,15 +237,15 @@ record_linux_system_call (int num, struc /* sys_exit */ case 1: { - int q; - target_terminal_ours (); - q =3D - yquery (_ ("The next instruction is syscall exit. " - "It will make the program exit. " - "Do you want to stop the program?")); - target_terminal_inferior (); - if (q) - return 1; + int q; + target_terminal_ours (); + q =3D + yquery (_ ("The next instruction is syscall exit. " + "It will make the program exit. " + "Do you want to stop the program?")); + target_terminal_inferior (); + if (q) + return 1; } break; @@ -127,11 +256,11 @@ record_linux_system_call (int num, struc /* sys_read */ case 3: { - uint32_t addr, count; - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & addr); - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & count); - if (record_arch_list_add_mem (addr, count)) - return -1; + ULONGEST addr, count; + regcache_raw_read_unsigned (regcache, tdep->arg2, &addr); + regcache_raw_read_unsigned (regcache, tdep->arg3, &count); + if (record_arch_list_add_mem ((CORE_ADDR) addr, (int) count)) + return -1; } break; @@ -171,9 +300,10 @@ record_linux_system_call (int num, struc case 28: /* sys_lstat */ case 84: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size__old_kernel_stat)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size__old_kernel_stat)) + return -1; break; /* sys_lseek */ @@ -194,16 +324,16 @@ record_linux_system_call (int num, struc /* sys_ptrace */ case 26: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (tmpu32 =3D=3D RECORD_PTRACE_PEEKTEXT - || tmpu32 =3D=3D RECORD_PTRACE_PEEKDATA - || tmpu32 =3D=3D RECORD_PTRACE_PEEKUSR) - { - regcache_raw_read (regcache, tdep->arg4, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, 4)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (tmpulongest =3D=3D RECORD_PTRACE_PEEKTEXT + || tmpulongest =3D=3D RECORD_PTRACE_PEEKDATA + || tmpulongest =3D=3D RECORD_PTRACE_PEEKUSR) + { + regcache_raw_read_unsigned (regcache, tdep->arg4, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, 4)) + return -1; + } break; /* sys_alarm */ @@ -240,9 +370,9 @@ record_linux_system_call (int num, struc /* sys_times */ case 43: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_tms)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_tm= s)) + return -1; break; /* sys_ni_syscall */ @@ -270,149 +400,172 @@ record_linux_system_call (int num, struc /* sys_ioctl */ case 54: /* XXX Need to add a lot of support of other ioctl requests. */ - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (tmpu32 =3D=3D tdep->ioctl_FIOCLEX || tmpu32 =3D=3D tdep->ioctl_F= IONCLEX - || tmpu32 =3D=3D tdep->ioctl_FIONBIO || tmpu32 =3D=3D tdep->ioctl_FIOAS= YNC - || tmpu32 =3D=3D tdep->ioctl_TCSETS || tmpu32 =3D=3D tdep->ioctl_TCSETSW - || tmpu32 =3D=3D tdep->ioctl_TCSETSF || tmpu32 =3D=3D tdep->ioctl_TCSETA - || tmpu32 =3D=3D tdep->ioctl_TCSETAW || tmpu32 =3D=3D tdep->ioctl_TCSET= AF - || tmpu32 =3D=3D tdep->ioctl_TCSBRK || tmpu32 =3D=3D tdep->ioctl_TCXONC - || tmpu32 =3D=3D tdep->ioctl_TCFLSH || tmpu32 =3D=3D tdep->ioctl_TIOCEX= CL - || tmpu32 =3D=3D tdep->ioctl_TIOCNXCL - || tmpu32 =3D=3D tdep->ioctl_TIOCSCTTY - || tmpu32 =3D=3D tdep->ioctl_TIOCSPGRP || tmpu32 =3D=3D tdep->ioctl_TIO= CSTI - || tmpu32 =3D=3D tdep->ioctl_TIOCSWINSZ - || tmpu32 =3D=3D tdep->ioctl_TIOCMBIS || tmpu32 =3D=3D tdep->ioctl_TIOC= MBIC - || tmpu32 =3D=3D tdep->ioctl_TIOCMSET - || tmpu32 =3D=3D tdep->ioctl_TIOCSSOFTCAR - || tmpu32 =3D=3D tdep->ioctl_TIOCCONS - || tmpu32 =3D=3D tdep->ioctl_TIOCSSERIAL - || tmpu32 =3D=3D tdep->ioctl_TIOCPKT || tmpu32 =3D=3D tdep->ioctl_TIOCN= OTTY - || tmpu32 =3D=3D tdep->ioctl_TIOCSETD || tmpu32 =3D=3D tdep->ioctl_TCSB= RKP - || tmpu32 =3D=3D tdep->ioctl_TIOCTTYGSTRUCT - || tmpu32 =3D=3D tdep->ioctl_TIOCSBRK || tmpu32 =3D=3D tdep->ioctl_TIOC= CBRK - || tmpu32 =3D=3D tdep->ioctl_TCSETS2 || tmpu32 =3D=3D tdep->ioctl_TCSET= SW2 - || tmpu32 =3D=3D tdep->ioctl_TCSETSF2 - || tmpu32 =3D=3D tdep->ioctl_TIOCSPTLCK - || tmpu32 =3D=3D tdep->ioctl_TIOCSERCONFIG - || tmpu32 =3D=3D tdep->ioctl_TIOCSERGWILD - || tmpu32 =3D=3D tdep->ioctl_TIOCSERSWILD - || tmpu32 =3D=3D tdep->ioctl_TIOCSLCKTRMIOS - || tmpu32 =3D=3D tdep->ioctl_TIOCSERGETMULTI - || tmpu32 =3D=3D tdep->ioctl_TIOCSERSETMULTI - || tmpu32 =3D=3D tdep->ioctl_TIOCMIWAIT - || tmpu32 =3D=3D tdep->ioctl_TIOCSHAYESESP) - { - /* Nothing to do. */ - } - else if (tmpu32 =3D=3D tdep->ioctl_TCGETS || tmpu32 =3D=3D tdep->ioc= tl_TCGETA - || tmpu32 =3D=3D tdep->ioctl_TIOCGLCKTRMIOS) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_termios)) - return -1; - } - else if (tmpu32 =3D=3D tdep->ioctl_TIOCGPGRP - || tmpu32 =3D=3D tdep->ioctl_TIOCGSID) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_pid_t)) - return -1; - } - else if (tmpu32 =3D=3D tdep->ioctl_TIOCOUTQ - || tmpu32 =3D=3D tdep->ioctl_TIOCMGET - || tmpu32 =3D=3D tdep->ioctl_TIOCGSOFTCAR - || tmpu32 =3D=3D tdep->ioctl_FIONREAD - || tmpu32 =3D=3D tdep->ioctl_TIOCINQ - || tmpu32 =3D=3D tdep->ioctl_TIOCGETD - || tmpu32 =3D=3D tdep->ioctl_TIOCGPTN - || tmpu32 =3D=3D tdep->ioctl_TIOCSERGETLSR) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_int)) - return -1; - } - else if (tmpu32 =3D=3D tdep->ioctl_TIOCGWINSZ) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_winsize)) - return -1; - } - else if (tmpu32 =3D=3D tdep->ioctl_TIOCLINUX) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (tmpulongest =3D=3D tdep->ioctl_FIOCLEX + || tmpulongest =3D=3D tdep->ioctl_FIONCLEX + || tmpulongest =3D=3D tdep->ioctl_FIONBIO + || tmpulongest =3D=3D tdep->ioctl_FIOASYNC + || tmpulongest =3D=3D tdep->ioctl_TCSETS + || tmpulongest =3D=3D tdep->ioctl_TCSETSW + || tmpulongest =3D=3D tdep->ioctl_TCSETSF + || tmpulongest =3D=3D tdep->ioctl_TCSETA + || tmpulongest =3D=3D tdep->ioctl_TCSETAW + || tmpulongest =3D=3D tdep->ioctl_TCSETAF + || tmpulongest =3D=3D tdep->ioctl_TCSBRK + || tmpulongest =3D=3D tdep->ioctl_TCXONC + || tmpulongest =3D=3D tdep->ioctl_TCFLSH + || tmpulongest =3D=3D tdep->ioctl_TIOCEXCL + || tmpulongest =3D=3D tdep->ioctl_TIOCNXCL + || tmpulongest =3D=3D tdep->ioctl_TIOCSCTTY + || tmpulongest =3D=3D tdep->ioctl_TIOCSPGRP + || tmpulongest =3D=3D tdep->ioctl_TIOCSTI + || tmpulongest =3D=3D tdep->ioctl_TIOCSWINSZ + || tmpulongest =3D=3D tdep->ioctl_TIOCMBIS + || tmpulongest =3D=3D tdep->ioctl_TIOCMBIC + || tmpulongest =3D=3D tdep->ioctl_TIOCMSET + || tmpulongest =3D=3D tdep->ioctl_TIOCSSOFTCAR + || tmpulongest =3D=3D tdep->ioctl_TIOCCONS + || tmpulongest =3D=3D tdep->ioctl_TIOCSSERIAL + || tmpulongest =3D=3D tdep->ioctl_TIOCPKT + || tmpulongest =3D=3D tdep->ioctl_TIOCNOTTY + || tmpulongest =3D=3D tdep->ioctl_TIOCSETD + || tmpulongest =3D=3D tdep->ioctl_TCSBRKP + || tmpulongest =3D=3D tdep->ioctl_TIOCTTYGSTRUCT + || tmpulongest =3D=3D tdep->ioctl_TIOCSBRK + || tmpulongest =3D=3D tdep->ioctl_TIOCCBRK + || tmpulongest =3D=3D tdep->ioctl_TCSETS2 + || tmpulongest =3D=3D tdep->ioctl_TCSETSW2 + || tmpulongest =3D=3D tdep->ioctl_TCSETSF2 + || tmpulongest =3D=3D tdep->ioctl_TIOCSPTLCK + || tmpulongest =3D=3D tdep->ioctl_TIOCSERCONFIG + || tmpulongest =3D=3D tdep->ioctl_TIOCSERGWILD + || tmpulongest =3D=3D tdep->ioctl_TIOCSERSWILD + || tmpulongest =3D=3D tdep->ioctl_TIOCSLCKTRMIOS + || tmpulongest =3D=3D tdep->ioctl_TIOCSERGETMULTI + || tmpulongest =3D=3D tdep->ioctl_TIOCSERSETMULTI + || tmpulongest =3D=3D tdep->ioctl_TIOCMIWAIT + || tmpulongest =3D=3D tdep->ioctl_TIOCSHAYESESP) + { + /* Nothing to do. */ + } + else if (tmpulongest =3D=3D tdep->ioctl_TCGETS + || tmpulongest =3D=3D tdep->ioctl_TCGETA + || tmpulongest =3D=3D tdep->ioctl_TIOCGLCKTRMIOS) + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_termios)) + return -1; + } + else if (tmpulongest =3D=3D tdep->ioctl_TIOCGPGRP + || tmpulongest =3D=3D tdep->ioctl_TIOCGSID) + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_pid_t)) + return -1; + } + else if (tmpulongest =3D=3D tdep->ioctl_TIOCOUTQ + || tmpulongest =3D=3D tdep->ioctl_TIOCMGET + || tmpulongest =3D=3D tdep->ioctl_TIOCGSOFTCAR + || tmpulongest =3D=3D tdep->ioctl_FIONREAD + || tmpulongest =3D=3D tdep->ioctl_TIOCINQ + || tmpulongest =3D=3D tdep->ioctl_TIOCGETD + || tmpulongest =3D=3D tdep->ioctl_TIOCGPTN + || tmpulongest =3D=3D tdep->ioctl_TIOCSERGETLSR) + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_int)) + return -1; + } + else if (tmpulongest =3D=3D tdep->ioctl_TIOCGWINSZ) + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_winsize)) + return -1; + } + else if (tmpulongest =3D=3D tdep->ioctl_TIOCLINUX) + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); /* This syscall affect a char size memory. */ - if (record_arch_list_add_mem (tmpu32, 1)) - return -1; - } - else if (tmpu32 =3D=3D tdep->ioctl_TIOCGSERIAL) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_serial_struct)) - return -1; - } - else if (tmpu32 =3D=3D tdep->ioctl_TCGETS2) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_termios2)) - return -1; - } - else if (tmpu32 =3D=3D tdep->ioctl_FIOQSIZE) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_loff_t)) - return -1; - } - else if (tmpu32 =3D=3D tdep->ioctl_TIOCGICOUNT) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem - (tmpu32, tdep->size_serial_icounter_struct)) - return -1; - } - else if (tmpu32 =3D=3D tdep->ioctl_TIOCGHAYESESP) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_hayes_esp_config)) - return -1; - } - else if (tmpu32 =3D=3D tdep->ioctl_TIOCSERGSTRUCT) - { - printf_unfiltered (_("Process record and replay target doesn't " - "support ioctl request TIOCSERGSTRUCT\n")); - return 1; - } + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, 1)) + return -1; + } + else if (tmpulongest =3D=3D tdep->ioctl_TIOCGSERIAL) + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_serial_struct)) + return -1; + } + else if (tmpulongest =3D=3D tdep->ioctl_TCGETS2) + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_termios2)) + return -1; + } + else if (tmpulongest =3D=3D tdep->ioctl_FIOQSIZE) + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_loff_t)) + return -1; + } + else if (tmpulongest =3D=3D tdep->ioctl_TIOCGICOUNT) + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_serial_icounter_struct)) + return -1; + } + else if (tmpulongest =3D=3D tdep->ioctl_TIOCGHAYESESP) + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_hayes_esp_config)) + return -1; + } + else if (tmpulongest =3D=3D tdep->ioctl_TIOCSERGSTRUCT) + { + printf_unfiltered (_("Process record and replay target doesn't " + "support ioctl request TIOCSERGSTRUCT\n")); + return 1; + } else - { - printf_unfiltered (_("Process record and replay target doesn't " - "support ioctl request 0x%s.\n"), - phex_nz (tmpu32, 4)); - return 1; - } + { + printf_unfiltered (_("Process record and replay target doesn't " + "support ioctl request 0x%s.\n"), + OUTPUT_REG (tmpulongest, tdep->arg2)); + return 1; + } break; /* sys_fcntl */ case 55: /* XXX */ - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); sys_fcntl: - if (tmpu32 =3D=3D tdep->fcntl_F_GETLK) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_flock)) - return -1; - } + if (tmpulongest =3D=3D tdep->fcntl_F_GETLK) + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_flock)) + return -1; + } break; /* sys_ni_syscall */ @@ -425,9 +578,10 @@ record_linux_system_call (int num, struc /* sys_olduname */ case 59: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_oldold_utsname)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_oldold_utsname)) + return -1; break; /* sys_umask */ @@ -438,9 +592,10 @@ record_linux_system_call (int num, struc /* sys_ustat */ case 62: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_ustat)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_ustat)) + return -1; break; /* sys_dup2 */ @@ -455,9 +610,10 @@ record_linux_system_call (int num, struc /* sys_sigaction */ case 67: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_old_sigaction)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_old_sigaction)) + return -1; break; /* sys_sgetmask */ @@ -474,9 +630,10 @@ record_linux_system_call (int num, struc /* sys_sigpending */ case 73: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_old_sigset_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_old_sigset_t)) + return -1; break; /* sys_sethostname */ @@ -487,26 +644,30 @@ record_linux_system_call (int num, struc /* sys_old_getrlimit */ case 76: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_rlimit)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_rlimit)) + return -1; break; /* sys_getrusage */ case 77: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_rusage)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_rusage)) + return -1; break; /* sys_gettimeofday */ case 78: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_timeval)) - return -1; - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_timezone)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_timeval)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_timezone)) + return -1; break; /* sys_settimeofday */ @@ -515,53 +676,56 @@ record_linux_system_call (int num, struc /* sys_getgroups16 */ case 80: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_old_gid_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_old_gid_t)) + return -1; break; /* sys_setgroups16 */ case 81: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_old_gid_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_old_gid_t)) + return -1; break; /* old_select */ case 82: { - struct sel_arg_struct - { - CORE_ADDR n; - CORE_ADDR inp; - CORE_ADDR outp; - CORE_ADDR exp; - CORE_ADDR tvp; - } sel; + struct sel_arg_struct + { + CORE_ADDR n; + CORE_ADDR inp; + CORE_ADDR outp; + CORE_ADDR exp; + CORE_ADDR tvp; + } sel; - regcache_raw_read (regcache, tdep->arg1, - (gdb_byte *) & tmpu32); - if (tmpu32) - { - if (target_read_memory (tmpu32, (gdb_byte *) & sel, sizeof (sel))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading memory " - "at addr =3D %s len =3D %lu.\n", - paddress (gdbarch, tmpu32), - (unsigned long)sizeof (sel)); - return -1; - } - if (record_arch_list_add_mem (sel.inp, tdep->size_fd_set)) - return -1; - if (record_arch_list_add_mem (sel.outp, tdep->size_fd_set)) - return -1; - if (record_arch_list_add_mem (sel.exp, tdep->size_fd_set)) - return -1; - if (record_arch_list_add_mem (sel.tvp, tdep->size_timeval)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg1, + &tmpulongest); + if (tmpulongest) + { + if (target_read_memory (tmpulongest, (gdb_byte *) &sel, + sizeof(sel))) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading memor= y " + "at addr =3D 0x%s len =3D %lu.\n", + OUTPUT_REG (tmpulongest, tdep->arg1), + (unsigned long) sizeof (sel)); + return -1; + } + if (record_arch_list_add_mem (sel.inp, tdep->size_fd_set)) + return -1; + if (record_arch_list_add_mem (sel.outp, tdep->size_fd_set)) + return -1; + if (record_arch_list_add_mem (sel.exp, tdep->size_fd_set)) + return -1; + if (record_arch_list_add_mem (sel.tvp, tdep->size_timeval)) + return -1; + } } break; @@ -572,12 +736,12 @@ record_linux_system_call (int num, struc /* sys_readlink */ case 85: { - uint32_t len; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & tmpu32); - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & len); - if (record_arch_list_add_mem (tmpu32, len)) - return -1; + ULONGEST len; + regcache_raw_read_unsigned (regcache, tdep->arg2, + &tmpulongest); + regcache_raw_read_unsigned (regcache, tdep->arg3, &len); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) len)) + return -1; } break; @@ -590,23 +754,24 @@ record_linux_system_call (int num, struc /* sys_reboot */ case 88: { - int q; - target_terminal_ours (); - q =3D - yquery (_("The next instruction is syscall reboot. " - "It will restart the computer. " - "Do you want to stop the program?")); - target_terminal_inferior (); - if (q) - return 1; + int q; + target_terminal_ours (); + q =3D + yquery (_("The next instruction is syscall reboot. " + "It will restart the computer. " + "Do you want to stop the program?")); + target_terminal_inferior (); + if (q) + return 1; } break; /* old_readdir */ case 89: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_dirent)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_dirent)) + return -1; break; /* old_mmap */ @@ -616,22 +781,21 @@ record_linux_system_call (int num, struc /* sys_munmap */ case 91: { - int q; - uint32_t len; + int q; + ULONGEST len; - regcache_raw_read (regcache, tdep->arg1, - (gdb_byte *) & tmpu32); - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & len); - target_terminal_ours (); - q =3D - yquery (_("The next instruction is syscall munmap. " - "It will free the memory addr =3D %s len =3D %u. " - "It will make record target get error. " - "Do you want to stop the program?"), - paddress (gdbarch, tmpu32), (int)len); - target_terminal_inferior (); - if (q) - return 1; + regcache_raw_read_unsigned (regcache, tdep->arg1, + &tmpulongest); + regcache_raw_read_unsigned (regcache, tdep->arg2, &len); + target_terminal_ours (); + q =3D yquery (_("The next instruction is syscall munmap. " + "It will free the memory addr =3D 0x%s len =3D %u. " + "It will make record target get error. " + "Do you want to stop the program?"), + OUTPUT_REG (tmpulongest, tdep->arg1), (int) len); + target_terminal_inferior (); + if (q) + return 1; } break; @@ -655,292 +819,347 @@ record_linux_system_call (int num, struc case 99: /* sys_fstatfs */ case 100: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_statfs)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_statfs)) + return -1; break; /* sys_ioperm */ case 101: break; + /* sys_socket */ + case 500: + /* sys_sendto */ + case 503: + /* sys_sendmsg */ + case 505: + /* sys_shutdown */ + case 507: + /* sys_bind */ + case 508: + /* sys_connect */ + case 501: + /* sys_listen */ + case 509: + /* sys_setsockopt */ + case 513: + break; + + /* sys_accept */ + case 502: + /* sys_getsockname */ + case 510: + /* sys_getpeername */ + case 511: + { + ULONGEST len; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + regcache_raw_read_unsigned (regcache, tdep->arg3, &len); + if (record_linux_sockaddr (regcache, tdep, tmpulongest, len)) + return -1; + } + break; + + /* sys_recvfrom */ + case 504: + { + ULONGEST len; + regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); + regcache_raw_read_unsigned (regcache, tdep->arg5, &len); + if (record_linux_sockaddr (regcache, tdep, tmpulongest, len)) + return -1; + } + /* sys_recv */ + case 515: + { + ULONGEST size; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + regcache_raw_read_unsigned (regcache, tdep->arg3, &size); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) size)) + return -1; + } + break; + + /* sys_recvmsg */ + case 506: + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_linux_msghdr (regcache, tdep, tmpulongest)) + return -1; + break; + + /* sys_socketpair */ + case 512: + regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_in= t)) + return -1; + break; + + /* sys_getsockopt */ + case 514: + regcache_raw_read_unsigned (regcache, tdep->arg5, &tmpulongest); + if (tmpulongest) + { + ULONGEST optvalp; + gdb_byte *optlenp =3D alloca (tdep->size_int); + if (target_read_memory ((CORE_ADDR) tmpulongest, optlenp, + tdep->size_int)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading " + "memory at addr =3D 0x%s " + "len =3D %d.\n", + OUTPUT_REG (tmpulongest, tdep->arg5), + tdep->size_int); + return -1; + } + regcache_raw_read_unsigned (regcache, tdep->arg4, &optvalp); + if (record_arch_list_add_mem ((CORE_ADDR) optvalp, + (int) extract_signed_integer + (optlenp, tdep->size_int, + byte_order))) + return -1; + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_int)) + return -1; + } + break; + /* sys_socketcall */ case 102: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - switch (tmpu32) - { - case RECORD_SYS_SOCKET: - case RECORD_SYS_BIND: - case RECORD_SYS_CONNECT: - case RECORD_SYS_LISTEN: - break; - case RECORD_SYS_ACCEPT: - case RECORD_SYS_GETSOCKNAME: - case RECORD_SYS_GETPEERNAME: - { - uint32_t a[3]; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & tmpu32); - if (tmpu32) - { - if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr =3D %s len =3D %lu.\n", - paddress (gdbarch, tmpu32), - (unsigned long)sizeof (a)); - return -1; - } - if (record_arch_list_add_mem (a[1], tdep->size_sockaddr)) - return -1; - if (record_arch_list_add_mem (a[2], tdep->size_int)) - return -1; - } - } - break; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + switch (tmpulongest) + { + case RECORD_SYS_SOCKET: + case RECORD_SYS_BIND: + case RECORD_SYS_CONNECT: + case RECORD_SYS_LISTEN: + break; + case RECORD_SYS_ACCEPT: + case RECORD_SYS_GETSOCKNAME: + case RECORD_SYS_GETPEERNAME: + { + regcache_raw_read_unsigned (regcache, tdep->arg2, + &tmpulongest); + if (tmpulongest) + { + gdb_byte *a =3D alloca (tdep->size_ulong * 2); + int addrlen; + gdb_byte *addrlenp; - case RECORD_SYS_SOCKETPAIR: - { - uint32_t a[4]; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & tmpu32); - if (tmpu32) - { - if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr =3D %s len =3D %lu.\n", - paddress (gdbarch, tmpu32), - (unsigned long)sizeof (a)); - return -1; - } - if (record_arch_list_add_mem (a[3], tdep->size_int)) - return -1; - } - } - break; - case RECORD_SYS_SEND: - case RECORD_SYS_SENDTO: - break; - case RECORD_SYS_RECV: - { - uint32_t a[3]; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & tmpu32); - if (tmpu32) - { - if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr =3D %s len =3D %lu.\n", - paddress (gdbarch, tmpu32), - (unsigned long)sizeof (a)); - return -1; - } - if (a[2]) - { - if (target_read_memory - (a[2], (gdb_byte *) & (a[2]), sizeof (a[2]))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr =3D %s " - "len =3D %lu.\n", - paddress (gdbarch, a[2]), - (unsigned long)sizeof (a[2])); - return -1; - } - if (record_arch_list_add_mem (a[1], a[2])) - return -1; - } - } - } - break; - case RECORD_SYS_RECVFROM: - { - uint32_t a[6]; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & tmpu32); - if (tmpu32) - { - if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr =3D %s len =3D %lu.\n", - paddress (gdbarch, tmpu32), - (unsigned long)sizeof (a)); - return -1; - } - if (a[2]) - { - if (target_read_memory - (a[2], (gdb_byte *) & (a[2]), sizeof (a[2]))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr =3D %s " - "len =3D %lu.\n", - paddress (gdbarch, a[2]), - (unsigned long)sizeof (a[2])); - return -1; - } - if (record_arch_list_add_mem (a[1], a[2])) - return -1; - if (record_arch_list_add_mem (a[4], tdep->size_sockaddr)) - return -1; - if (record_arch_list_add_mem (a[5], tdep->size_int)) - return -1; - } - } - } - break; - case RECORD_SYS_SHUTDOWN: - case RECORD_SYS_SETSOCKOPT: - break; - case RECORD_SYS_GETSOCKOPT: - { - uint32_t a[5]; - uint32_t av; + tmpulongest +=3D tdep->size_ulong; + if (target_read_memory ((CORE_ADDR) tmpulongest, a, + tdep->size_ulong * 2)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading " + "memory at addr =3D 0x%s len =3D= %d.\n", + OUTPUT_REG (tmpulongest, tdep->a= rg2), + tdep->size_ulong * 2); + return -1; + } + if (record_linux_sockaddr (regcache, tdep, + extract_unsigned_integer + (a, tdep->size_ulong, byte_or= der), + extract_unsigned_integer + (a + tdep->size_ulong, + tdep->size_ulong, byte_order= ))) + return -1; + } + } + break; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & tmpu32); - if (tmpu32) - { - if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr =3D %s len =3D %lu.\n", - paddress (gdbarch, tmpu32), - (unsigned long)sizeof (a)); - return -1; - } - if (a[4]) - { - if (target_read_memory - (a[4], (gdb_byte *) & av, sizeof (av))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr =3D %s " - "len =3D %lu.\n", - paddress (gdbarch, a[4]), - (unsigned long)sizeof (av)); - return -1; - } - if (record_arch_list_add_mem (a[3], av)) - return -1; - if (record_arch_list_add_mem (a[4], tdep->size_int)) - return -1; - } - } - } - break; - case RECORD_SYS_SENDMSG: - break; - case RECORD_SYS_RECVMSG: - { - uint32_t a[2], i; - struct record_msghdr - { - uint32_t msg_name; - uint32_t msg_namelen; - uint32_t msg_iov; - uint32_t msg_iovlen; - uint32_t msg_control; - uint32_t msg_controllen; - uint32_t msg_flags; - } rec; - struct record_iovec - { - uint32_t iov_base; - uint32_t iov_len; - } iov; + case RECORD_SYS_SOCKETPAIR: + { + gdb_byte *a =3D alloca (tdep->size_ulong); + regcache_raw_read_unsigned (regcache, tdep->arg2, + &tmpulongest); + if (tmpulongest) + { + tmpulongest +=3D tdep->size_ulong * 3; + if (target_read_memory ((CORE_ADDR) tmpulongest, a, + tdep->size_ulong)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading " + "memory at addr =3D 0x%s len =3D= %d.\n", + OUTPUT_REG (tmpulongest, tdep->a= rg2), + tdep->size_ulong); + return -1; + } + if (record_arch_list_add_mem ((CORE_ADDR) extract_unsigned_integer + (a, + tdep->size_ulo= ng, + byte_order), + tdep->size_int)) + return -1; + } + } + break; + case RECORD_SYS_SEND: + case RECORD_SYS_SENDTO: + break; + case RECORD_SYS_RECVFROM: + regcache_raw_read_unsigned (regcache, tdep->arg2, + &tmpulongest); + if (tmpulongest) + { + gdb_byte *a =3D alloca (tdep->size_ulong * 2); + int addrlen; + gdb_byte *addrlenp; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & tmpu32); - if (tmpu32) - { - if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr =3D %s len =3D %lu.\n", - paddress (gdbarch, tmpu32), - (unsigned long)sizeof (a)); - return -1; - } - if (record_arch_list_add_mem (a[1], tdep->size_msghdr)) - return -1; - if (a[1]) - { - if (target_read_memory - (a[1], (gdb_byte *) & rec, sizeof (rec))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr =3D %s " - "len =3D %lu.\n", - paddress (gdbarch, a[1]), - (unsigned long)sizeof (rec)); - return -1; - } - if (record_arch_list_add_mem - (rec.msg_name, rec.msg_namelen)) - return -1; - if (record_arch_list_add_mem - (rec.msg_control, rec.msg_controllen)) - return -1; - if (rec.msg_iov) - { - for (i =3D 0; i < rec.msg_iovlen; i++) - { - if (target_read_memory - (rec.msg_iov, (gdb_byte *) & iov, - sizeof (iov))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error " - "reading memory at " - "addr =3D %s " - "len =3D %lu.\n", - paddress (gdbarch, - rec.msg_iov), - (unsigned long)sizeof (iov)); - return -1; - } - if (record_arch_list_add_mem - (iov.iov_base, iov.iov_len)) - return -1; - rec.msg_iov +=3D sizeof (struct record_iovec); - } - } - } - } - } - break; - default: - printf_unfiltered (_("Process record and replay target " - "doesn't support socketcall call 0x%s\n"), - phex_nz (tmpu32, 4)); - return -1; - break; - } + tmpulongest +=3D tdep->size_ulong * 4; + if (target_read_memory ((CORE_ADDR) tmpulongest, a, + tdep->size_ulong * 2)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading " + "memory at addr =3D 0x%s len =3D %= d.\n", + OUTPUT_REG (tmpulongest, tdep->arg= 2), + tdep->size_ulong * 2); + return -1; + } + if (record_linux_sockaddr (regcache, tdep, + extract_unsigned_integer + (a, tdep->size_ulong, byte_orde= r), + extract_unsigned_integer + (a + tdep->size_ulong, + tdep->size_ulong, byte_order))) + return -1; + } + case RECORD_SYS_RECV: + regcache_raw_read_unsigned (regcache, tdep->arg2, + &tmpulongest); + if (tmpulongest) + { + gdb_byte *a =3D alloca (tdep->size_ulong * 2); + + tmpulongest +=3D tdep->size_ulong; + if (target_read_memory ((CORE_ADDR) tmpulongest, a, + tdep->size_ulong)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading " + "memory at addr =3D 0x%s len =3D %= d.\n", + OUTPUT_REG (tmpulongest, tdep->arg= 2), + tdep->size_ulong); + return -1; + } + tmpulongest =3D extract_unsigned_integer (a, tdep->size_ulon= g, + byte_order); + if (tmpulongest) + { + a +=3D tdep->size_ulong; + if (record_arch_list_add_mem + ((CORE_ADDR) tmpulongest, + (int) extract_unsigned_integer (a, tdep->size_ulo= ng, + byte_order))) + return -1; + } + } + break; + case RECORD_SYS_SHUTDOWN: + case RECORD_SYS_SETSOCKOPT: + break; + case RECORD_SYS_GETSOCKOPT: + { + gdb_byte *a =3D alloca (tdep->size_ulong * 2); + gdb_byte *av =3D alloca (tdep->size_int); + + regcache_raw_read_unsigned (regcache, tdep->arg2, + &tmpulongest); + if (tmpulongest) + { + tmpulongest +=3D tdep->size_ulong * 3; + if (target_read_memory ((CORE_ADDR) tmpulongest, a, + tdep->size_ulong * 2)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading " + "memory at addr =3D 0x%s len =3D= %d.\n", + OUTPUT_REG (tmpulongest, tdep->a= rg2), + tdep->size_ulong * 2); + return -1; + } + tmpulongest =3D extract_unsigned_integer (a + tdep->size_u= long, + tdep->size_ulong, + byte_order); + if (tmpulongest) + { + if (target_read_memory ((CORE_ADDR) tmpulongest, av, + tdep->size_int)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error readi= ng " + "memory at addr =3D 0x%s " + "len =3D %d.\n", + phex_nz (tmpulongest, + tdep->size_ulong), + tdep->size_int); + return -1; + } + if (record_arch_list_add_mem + ((CORE_ADDR) extract_unsigned_integer + (a, tdep->size_ulong, byte_order), + (int) extract_unsigned_integer (av, tdep->size_= int, + byte_order))) + return -1; + a +=3D tdep->size_ulong; + if (record_arch_list_add_mem + ((CORE_ADDR) extract_unsigned_integer + (a, tdep->size_ulong, byte_order), + tdep->size_int)) + return -1; + } + } + } + break; + case RECORD_SYS_SENDMSG: + break; + case RECORD_SYS_RECVMSG: + { + gdb_byte *a =3D alloca (tdep->size_ulong); + + regcache_raw_read_unsigned (regcache, tdep->arg2, + &tmpulongest); + if (tmpulongest) + { + tmpulongest +=3D tdep->size_ulong; + if (target_read_memory ((CORE_ADDR) tmpulongest, a, + tdep->size_ulong)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading " + "memory at addr =3D 0x%s len =3D= %d.\n", + OUTPUT_REG (tmpulongest, tdep->a= rg2), + tdep->size_ulong); + return -1; + } + tmpulongest =3D extract_unsigned_integer (a, tdep->size_ul= ong, + byte_order); + if (record_linux_msghdr (regcache, tdep, + extract_unsigned_integer + (a, tdep->size_ulong, byte_orde= r))) + return -1; + } + } + break; + default: + printf_unfiltered (_("Process record and replay target " + "doesn't support socketcall call 0x%s\n"), + OUTPUT_REG (tmpulongest, tdep->arg1)); + return -1; + break; + } break; /* sys_syslog */ @@ -949,16 +1168,18 @@ record_linux_system_call (int num, struc /* sys_setitimer */ case 104: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_itimerval)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_itimerval)) + return -1; break; /* sys_getitimer */ case 105: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_itimerval)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_itimerval)) + return -1; break; /* sys_newstat */ @@ -967,16 +1188,19 @@ record_linux_system_call (int num, struc case 107: /* sys_newfstat */ case 108: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_stat)) - return -1; + /* sys_newfstatat */ + case 540: + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_st= at)) + return -1; break; /* sys_uname */ case 109: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_old_utsname)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_old_utsname)) + return -1; break; /* sys_iopl */ @@ -991,12 +1215,14 @@ record_linux_system_call (int num, struc /* sys_wait4 */ case 114: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_int)) - return -1; - regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_rusage)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_int)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_rusage)) + return -1; break; /* sys_swapoff */ @@ -1005,47 +1231,121 @@ record_linux_system_call (int num, struc /* sys_sysinfo */ case 116: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_sysinfo)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_sysinfo)) + return -1; + break; + + /* sys_shmget */ + case 520: + /* sys_semget */ + case 523: + /* sys_semop */ + case 524: + /* sys_msgget */ + case 528: + /* sys_shmdt */ + /* XXX maybe need do some record works wiht sys_shmdt. */ + case 527: + /* sys_msgsnd */ + case 529: + /* sys_semtimedop */ + case 532: + break; + + /* sys_shmat */ + case 521: + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_ulong)) + return -1; + break; + + /* sys_shmctl */ + case 522: + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_shmid_ds)) + return -1; + break; + + /* sys_semctl */ + /* XXX sys_semctl 525 still not support. */ + + /* sys_msgrcv */ + case 530: + { + ULONGEST msgp; + regcache_raw_read_signed (regcache, tdep->arg3, &tmpulongest); + regcache_raw_read_unsigned (regcache, tdep->arg2, &msgp); + if (record_arch_list_add_mem ((CORE_ADDR) msgp, + (int) tmpulongest + tdep->size_long)) + return -1; + } + break; + + /* sys_msgctl */ + case 531: + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_msqid_ds)) + return -1; break; /* sys_ipc */ case 117: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - switch (tmpu32) - { - case RECORD_MSGRCV: - { - int32_t second; - uint32_t ptr; - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & second); - regcache_raw_read (regcache, tdep->arg5, - (gdb_byte *) & ptr); - if (record_arch_list_add_mem (ptr, second + tdep->size_long)) - return -1; - } - break; - case RECORD_MSGCTL: - regcache_raw_read (regcache, tdep->arg5, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_msqid_ds)) - return -1; - break; - case RECORD_SHMAT: - regcache_raw_read (regcache, tdep->arg4, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_ulong)) - return -1; - break; - case RECORD_SHMCTL: - regcache_raw_read (regcache, tdep->arg5, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_shmid_ds)) - return -1; - break; - } + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + tmpulongest &=3D 0xffff; + switch (tmpulongest) + { + case RECORD_SEMOP: + case RECORD_SEMGET: + case RECORD_SEMTIMEDOP: + case RECORD_MSGSND: + case RECORD_MSGGET: + /* XXX maybe need do some record works wiht RECORD_SHMDT. */ + case RECORD_SHMDT: + case RECORD_SHMGET: + break; + case RECORD_MSGRCV: + { + ULONGEST second; + ULONGEST ptr; + regcache_raw_read_signed (regcache, tdep->arg3, &second); + regcache_raw_read_unsigned (regcache, tdep->arg5, &ptr); + if (record_arch_list_add_mem ((CORE_ADDR) ptr, + (int) second + tdep->size_long)) + return -1; + } + break; + case RECORD_MSGCTL: + regcache_raw_read_unsigned (regcache, tdep->arg5, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_msqid_ds)) + return -1; + break; + case RECORD_SHMAT: + regcache_raw_read_unsigned (regcache, tdep->arg4, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_ulong)) + return -1; + break; + case RECORD_SHMCTL: + regcache_raw_read_unsigned (regcache, tdep->arg5, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_shmid_ds)) + return -1; + break; + default: + /* XXX RECORD_SEMCTL still not support. */ + printf_unfiltered (_("Process record and replay target doesn't " + "support ipc number %d\n"), (int) tmpulonge= st); + break; + } break; /* sys_fsync */ @@ -1060,30 +1360,30 @@ record_linux_system_call (int num, struc /* sys_newuname */ case 122: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_new_utsname)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_new_utsname)) + return -1; break; /* sys_modify_ldt */ case 123: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (tmpu32 =3D=3D 0 || tmpu32 =3D=3D 2) - { - uint32_t ptr, bytecount; - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & ptr); - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & bytecount); - if (record_arch_list_add_mem (ptr, bytecount)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (tmpulongest =3D=3D 0 || tmpulongest =3D=3D 2) + { + ULONGEST ptr, bytecount; + regcache_raw_read_unsigned (regcache, tdep->arg2, &ptr); + regcache_raw_read_unsigned (regcache, tdep->arg3, &bytecount); + if (record_arch_list_add_mem ((CORE_ADDR) ptr, (int) bytecount)) + return -1; + } break; /* sys_adjtimex */ case 124: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_timex)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_ti= mex)) + return -1; break; /* sys_mprotect */ @@ -1092,9 +1392,10 @@ record_linux_system_call (int num, struc /* sys_sigprocmask */ case 126: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_old_sigset_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_old_sigset_t)) + return -1; break; /* sys_ni_syscall */ @@ -1109,35 +1410,39 @@ record_linux_system_call (int num, struc /* sys_quotactl */ case 131: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - switch (tmpu32) - { - case RECORD_Q_GETFMT: - regcache_raw_read (regcache, tdep->arg4, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, 4)) - return -1; - break; - case RECORD_Q_GETINFO: - regcache_raw_read (regcache, tdep->arg4, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_mem_dqinfo)) - return -1; - break; - case RECORD_Q_GETQUOTA: - regcache_raw_read (regcache, tdep->arg4, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_if_dqblk)) - return -1; - break; - case RECORD_Q_XGETQSTAT: - case RECORD_Q_XGETQUOTA: - regcache_raw_read (regcache, tdep->arg4, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_fs_quota_stat)) - return -1; - break; - } + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + switch (tmpulongest) + { + case RECORD_Q_GETFMT: + regcache_raw_read_unsigned (regcache, tdep->arg4, + &tmpulongest); + /* __u32 */ + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, 4)) + return -1; + break; + case RECORD_Q_GETINFO: + regcache_raw_read_unsigned (regcache, tdep->arg4, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_mem_dqinfo)) + return -1; + break; + case RECORD_Q_GETQUOTA: + regcache_raw_read_unsigned (regcache, tdep->arg4, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_if_dqblk)) + return -1; + break; + case RECORD_Q_XGETQSTAT: + case RECORD_Q_XGETQUOTA: + regcache_raw_read_unsigned (regcache, tdep->arg4, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_fs_quota_stat)) + return -1; + break; + } break; /* sys_getpgid */ @@ -1150,15 +1455,15 @@ record_linux_system_call (int num, struc /* sys_sysfs */ case 135: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (tmpu32 =3D=3D 2) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - /*XXX the size of memory is not very clear. */ - if (record_arch_list_add_mem (tmpu32, 10)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (tmpulongest =3D=3D 2) + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + /*XXX the size of memory is not very clear. */ + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, 10)) + return -1; + } break; /* sys_personality */ @@ -1173,37 +1478,43 @@ record_linux_system_call (int num, struc /* sys_llseek */ case 140: - regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_loff_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_loff_t)) + return -1; break; /* sys_getdents */ case 141: { - uint32_t count; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & tmpu32); - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & count); - if (record_arch_list_add_mem (tmpu32, tdep->size_dirent * count)) - return -1; + ULONGEST count; + regcache_raw_read_unsigned (regcache, tdep->arg2, + &tmpulongest); + regcache_raw_read_unsigned (regcache, tdep->arg3, &count); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_dirent * count)) + return -1; } break; /* sys_select */ case 142: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_fd_set)) - return -1; - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_fd_set)) - return -1; - regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_fd_set)) - return -1; - regcache_raw_read (regcache, tdep->arg5, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_timeval)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_fd_set)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_fd_set)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_fd_set)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg5, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_timeval)) + return -1; break; /* sys_flock */ @@ -1215,36 +1526,37 @@ record_linux_system_call (int num, struc /* sys_readv */ case 145: { - uint32_t vec; - uint32_t vlen; - struct record_iovec - { - uint32_t iov_base; - uint32_t iov_len; - } iov; - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & vec); - if (vec) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & vlen); - for (tmpu32 =3D 0; tmpu32 < vlen; tmpu32++) - { - if (target_read_memory - (vec, (gdb_byte *) & iov, sizeof (struct record_iovec))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr =3D %s len =3D %lu.\n", - paddress (gdbarch, vec), - (unsigned long)sizeof (struct record_iovec)); - return -1; - } - if (record_arch_list_add_mem (iov.iov_base, iov.iov_len)) - return -1; - vec +=3D sizeof (struct record_iovec); - } - } + ULONGEST vec, vlen; + + regcache_raw_read_unsigned (regcache, tdep->arg2, &vec); + if (vec) + { + gdb_byte *iov =3D alloca (tdep->size_iovec); + + regcache_raw_read_unsigned (regcache, tdep->arg3, &vlen); + for (tmpulongest =3D 0; tmpulongest < vlen; tmpulongest++) + { + if (target_read_memory ((CORE_ADDR) vec, iov, + tdep->size_iovec)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading " + "memory at addr =3D 0x%s len =3D= %d.\n", + OUTPUT_REG (vec, tdep->arg2), + tdep->size_iovec); + return -1; + } + if (record_arch_list_add_mem + ((CORE_ADDR) extract_unsigned_integer + (iov, tdep->size_pointer, byte_order), + (int) extract_unsigned_integer + (iov + tdep->size_pointer, tdep->size_size_= t, + byte_order))) + return -1; + vec +=3D tdep->size_iovec; + } + } } break; @@ -1270,9 +1582,9 @@ record_linux_system_call (int num, struc /* sys_sched_getparam */ case 155: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_int)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_in= t)) + return -1; break; /* sys_sched_setscheduler */ @@ -1291,9 +1603,10 @@ record_linux_system_call (int num, struc case 161: /* sys_nanosleep */ case 162: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_timespec)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_timespec)) + return -1; break; /* sys_mremap */ @@ -1304,15 +1617,17 @@ record_linux_system_call (int num, struc /* sys_getresuid16 */ case 165: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_old_uid_t)) - return -1; - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_old_uid_t)) - return -1; - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_old_uid_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_old_uid_t)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_old_uid_t)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_old_uid_t)) + return -1; break; /* sys_vm86 */ @@ -1323,32 +1638,32 @@ record_linux_system_call (int num, struc /* sys_poll */ case 168: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (tmpu32) - { - uint32_t nfds; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & nfds); - if (record_arch_list_add_mem (tmpu32, tdep->size_pollfd * nfds)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (tmpulongest) + { + ULONGEST nfds; + regcache_raw_read_unsigned (regcache, tdep->arg2, &nfds); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_pollfd * nfds)) + return -1; + } break; /* sys_nfsservctl */ case 169: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (tmpu32 =3D=3D 7 || tmpu32 =3D=3D 8) - { - uint32_t rsize; - if (tmpu32 =3D=3D 7) - rsize =3D tdep->size_NFS_FHSIZE; - else - rsize =3D tdep->size_knfsd_fh; - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, rsize)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (tmpulongest =3D=3D 7 || tmpulongest =3D=3D 8) + { + int rsize; + if (tmpulongest =3D=3D 7) + rsize =3D tdep->size_NFS_FHSIZE; + else + rsize =3D tdep->size_knfsd_fh; + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, rsize)) + return -1; + } break; /* sys_setresgid16 */ @@ -1357,35 +1672,40 @@ record_linux_system_call (int num, struc /* sys_getresgid16 */ case 171: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_old_gid_t)) - return -1; - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_old_gid_t)) - return -1; - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_old_gid_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_old_gid_t)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_old_gid_t)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_old_gid_t)) + return -1; break; /* sys_prctl */ case 172: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - switch (tmpu32) - { - case 2: - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_int)) - return -1; - break; - case 16: - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_TASK_COMM_LEN)) - return -1; - break; - } + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + switch (tmpulongest) + { + case 2: + regcache_raw_read_unsigned (regcache, tdep->arg2, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_int)) + return -1; + break; + case 16: + regcache_raw_read_unsigned (regcache, tdep->arg2, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_TASK_COMM_LEN)) + return -1; + break; + } break; /* sys_rt_sigreturn */ @@ -1394,36 +1714,39 @@ record_linux_system_call (int num, struc /* sys_rt_sigaction */ case 174: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_sigaction)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_sigaction)) + return -1; break; /* sys_rt_sigprocmask */ case 175: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_sigset_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_sigset_t)) + return -1; break; /* sys_rt_sigpending */ case 176: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (tmpu32) - { - uint32_t sigsetsize; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & sigsetsize); - if (record_arch_list_add_mem (tmpu32, sigsetsize)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (tmpulongest) + { + ULONGEST sigsetsize; + regcache_raw_read_unsigned (regcache, tdep->arg2,&sigsetsize); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + (int) sigsetsize)) + return -1; + } break; /* sys_rt_sigtimedwait */ case 177: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_siginfo_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_siginfo_t)) + return -1; break; /* sys_rt_sigqueueinfo */ @@ -1434,15 +1757,14 @@ record_linux_system_call (int num, struc /* sys_pread64 */ case 180: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (tmpu32) - { - uint32_t count; - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & count); - if (record_arch_list_add_mem (tmpu32, count)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (tmpulongest) + { + ULONGEST count; + regcache_raw_read_unsigned (regcache, tdep->arg3,&count); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) cou= nt)) + return -1; + } break; /* sys_pwrite64 */ @@ -1453,22 +1775,22 @@ record_linux_system_call (int num, struc /* sys_getcwd */ case 183: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (tmpu32) - { - uint32_t size; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & size); - if (record_arch_list_add_mem (tmpu32, size)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (tmpulongest) + { + ULONGEST size; + regcache_raw_read_unsigned (regcache, tdep->arg2, &size); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) siz= e)) + return -1; + } break; /* sys_capget */ case 184: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_cap_user_data_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_cap_user_data_t)) + return -1; break; /* sys_capset */ @@ -1477,16 +1799,18 @@ record_linux_system_call (int num, struc /* sys_sigaltstack */ case 186: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_stack_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_stack_t)) + return -1; break; /* sys_sendfile */ case 187: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_off_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_off_t)) + return -1; break; /* sys_ni_syscall */ @@ -1499,9 +1823,10 @@ record_linux_system_call (int num, struc /* sys_getrlimit */ case 191: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_rlimit)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_rlimit)) + return -1; break; /* sys_mmap2 */ @@ -1520,9 +1845,10 @@ record_linux_system_call (int num, struc case 196: /* sys_fstat64 */ case 197: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_stat64)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_stat64)) + return -1; break; /* sys_lchown */ @@ -1543,16 +1869,16 @@ record_linux_system_call (int num, struc /* sys_getgroups */ case 205: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (tmpu32) - { - int gidsetsize; - regcache_raw_read (regcache, tdep->arg1, - (gdb_byte *) & gidsetsize); - if (record_arch_list_add_mem - (tmpu32, tdep->size_gid_t * gidsetsize)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (tmpulongest) + { + ULONGEST gidsetsize; + regcache_raw_read_unsigned (regcache, tdep->arg1, + &gidsetsize); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_gid_t * (int) gidsetsiz= e)) + return -1; + } break; /* sys_setgroups */ @@ -1565,15 +1891,15 @@ record_linux_system_call (int num, struc /* sys_getresuid */ case 209: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_uid_t)) - return -1; - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_uid_t)) - return -1; - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_uid_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_ui= d_t)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_ui= d_t)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_ui= d_t)) + return -1; break; /* sys_setresgid */ @@ -1582,15 +1908,15 @@ record_linux_system_call (int num, struc /* sys_getresgid */ case 211: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_gid_t)) - return -1; - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_gid_t)) - return -1; - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_gid_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_gi= d_t)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_gi= d_t)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_gi= d_t)) + return -1; break; /* sys_chown */ @@ -1609,9 +1935,10 @@ record_linux_system_call (int num, struc /* sys_mincore */ case 218: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_PAGE_SIZE)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_PAGE_SIZE)) + return -1; break; /* sys_madvise */ @@ -1621,30 +1948,32 @@ record_linux_system_call (int num, struc /* sys_getdents64 */ case 220: { - uint32_t count; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & tmpu32); - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & count); - if (record_arch_list_add_mem (tmpu32, tdep->size_dirent64 * count)) - return -1; + ULONGEST count; + regcache_raw_read_unsigned (regcache, tdep->arg2, + &tmpulongest); + regcache_raw_read_unsigned (regcache, tdep->arg3, &count); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_dirent64 * count)) + return -1; } break; /* sys_fcntl64 */ case 221: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (tmpu32 =3D=3D tdep->fcntl_F_GETLK64) + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (tmpulongest =3D=3D tdep->fcntl_F_GETLK64) { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_flock64)) - return -1; - } - else if (tmpu32 !=3D tdep->fcntl_F_SETLK64 - && tmpu32 !=3D tdep->fcntl_F_SETLKW64) + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_flock64)) + return -1; + } + else if (tmpulongest !=3D tdep->fcntl_F_SETLK64 + && tmpulongest !=3D tdep->fcntl_F_SETLKW64) { - goto sys_fcntl; - } + goto sys_fcntl; + } break; /* sys_ni_syscall */ @@ -1669,15 +1998,14 @@ record_linux_system_call (int num, struc case 230: /* sys_fgetxattr */ case 231: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (tmpu32) - { - uint32_t size; - regcache_raw_read (regcache, tdep->arg4, - (gdb_byte *) & size); - if (record_arch_list_add_mem (tmpu32, size)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (tmpulongest) + { + ULONGEST size; + regcache_raw_read_unsigned (regcache, tdep->arg4, &size); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) siz= e)) + return -1; + } break; /* sys_listxattr */ @@ -1686,15 +2014,14 @@ record_linux_system_call (int num, struc case 233: /* sys_flistxattr */ case 234: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (tmpu32) - { - uint32_t size; - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & size); - if (record_arch_list_add_mem (tmpu32, size)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (tmpulongest) + { + ULONGEST size; + regcache_raw_read_unsigned (regcache, tdep->arg3, &size); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) siz= e)) + return -1; + } break; /* sys_removexattr */ @@ -1709,9 +2036,10 @@ record_linux_system_call (int num, struc /* sys_sendfile64 */ case 239: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_loff_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_loff_t)) + return -1; break; /* sys_futex */ @@ -1722,35 +2050,36 @@ record_linux_system_call (int num, struc /* sys_sched_getaffinity */ case 242: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (tmpu32) - { - uint32_t len; - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & len); - if (record_arch_list_add_mem (tmpu32, len)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (tmpulongest) + { + ULONGEST len; + regcache_raw_read_unsigned (regcache, tdep->arg2, &len); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) len= )) + return -1; + } break; /* sys_set_thread_area */ case 243: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_int)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_in= t)) + return -1; break; /* sys_get_thread_area */ case 244: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_user_desc)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_user_desc)) + return -1; break; /* sys_io_setup */ case 245: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_long)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_lo= ng)) + return -1; break; /* sys_io_destroy */ @@ -1759,49 +2088,57 @@ record_linux_system_call (int num, struc /* sys_io_getevents */ case 247: - regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); - if (tmpu32) - { - int32_t nr; - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & nr); - if (record_arch_list_add_mem (tmpu32, nr * tdep->size_io_event)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); + if (tmpulongest) + { + ULONGEST nr; + regcache_raw_read_unsigned (regcache, tdep->arg3, &nr); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + nr * tdep->size_io_event)) + return -1; + } break; /* sys_io_submit */ case 248: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (tmpu32) - { - int32_t i, nr; - uint32_t *iocbp; - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & nr); - iocbp =3D (uint32_t *) alloca (nr * tdep->size_int); - if (target_read_memory - (tmpu32, (gdb_byte *) iocbp, nr * tdep->size_int)) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading memory " - "at addr =3D %s len =3D %u.\n", - paddress (gdbarch, tmpu32), - (int)(nr * tdep->size_int)); - return -1; - } - for (i =3D 0; i < nr; i++) - { - if (record_arch_list_add_mem (iocbp[i], tdep->size_iocb)) - return -1; - } - } + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (tmpulongest) + { + ULONGEST nr, i; + gdb_byte *iocbp; + + regcache_raw_read_unsigned (regcache, tdep->arg2, &nr); + iocbp =3D alloca (nr * tdep->size_pointer); + if (target_read_memory ((CORE_ADDR) tmpulongest, iocbp, + nr * tdep->size_pointer)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading memory " + "at addr =3D 0x%s len =3D %u.\n", + OUTPUT_REG (tmpulongest, tdep->arg2), + (int) (nr * tdep->size_pointer)); + return -1; + } + for (i =3D 0; i < nr; i++) + { + if (record_arch_list_add_mem + ((CORE_ADDR) extract_unsigned_integer (iocbp, + tdep->size_poin= ter, + byte_order), + tdep->size_iocb)) + return -1; + iocbp +=3D tdep->size_pointer; + } + } break; /* sys_io_cancel */ case 249: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_io_event)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_io_event)) + return -1; break; /* sys_fadvise64 */ @@ -1813,28 +2150,28 @@ record_linux_system_call (int num, struc /* sys_exit_group */ case 252: { - int q; - target_terminal_ours (); - q =3D - yquery (_("The next instruction is syscall exit_group. " - "It will make the program exit. " - "Do you want to stop the program?")); - target_terminal_inferior (); - if (q) - return 1; + int q; + target_terminal_ours (); + q =3D + yquery (_("The next instruction is syscall exit_group. " + "It will make the program exit. " + "Do you want to stop the program?")); + target_terminal_inferior (); + if (q) + return 1; } break; /* sys_lookup_dcookie */ case 253: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (tmpu32) - { - uint32_t len; - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & len); - if (record_arch_list_add_mem (tmpu32, len)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (tmpulongest) + { + ULONGEST len; + regcache_raw_read_unsigned (regcache, tdep->arg3, &len); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) len= )) + return -1; + } break; /* sys_epoll_create */ @@ -1845,16 +2182,15 @@ record_linux_system_call (int num, struc /* sys_epoll_wait */ case 256: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (tmpu32) - { - int32_t maxevents; - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & maxevents); - if (record_arch_list_add_mem - (tmpu32, maxevents * tdep->size_epoll_event)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (tmpulongest) + { + ULONGEST maxevents; + regcache_raw_read_unsigned (regcache, tdep->arg3, &maxevents); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + maxevents * tdep->size_epoll_event= )) + return -1; + } break; /* sys_remap_file_pages */ @@ -1865,23 +2201,25 @@ record_linux_system_call (int num, struc /* sys_timer_create */ case 259: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_int)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_in= t)) + return -1; break; /* sys_timer_settime */ case 260: - regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_itimerspec)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_itimerspec)) + return -1; break; /* sys_timer_gettime */ case 261: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_itimerspec)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_itimerspec)) + return -1; break; /* sys_timer_getoverrun */ @@ -1894,32 +2232,36 @@ record_linux_system_call (int num, struc /* sys_clock_gettime */ case 265: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_timespec)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_timespec)) + return -1; break; /* sys_clock_getres */ case 266: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_timespec)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_timespec)) + return -1; break; /* sys_clock_nanosleep */ case 267: - regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_timespec)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_timespec)) + return -1; break; /* sys_statfs64 */ case 268: /* sys_fstatfs64 */ case 269: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_statfs64)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_statfs64)) + return -1; break; /* sys_tgkill */ @@ -1936,18 +2278,18 @@ record_linux_system_call (int num, struc /* sys_get_mempolicy */ case 275: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_int)) - return -1; - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (tmpu32) - { - uint32_t maxnode; - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & maxnode); - if (record_arch_list_add_mem (tmpu32, maxnode * tdep->size_long)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_in= t)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (tmpulongest) + { + ULONGEST maxnode; + regcache_raw_read_unsigned (regcache, tdep->arg3, &maxnode); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + maxnode * tdep->size_long)) + return -1; + } break; /* sys_set_mempolicy */ @@ -1962,18 +2304,18 @@ record_linux_system_call (int num, struc /* sys_mq_timedreceive */ case 280: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (tmpu32) - { - uint32_t msg_len; - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & msg_len); - if (record_arch_list_add_mem (tmpu32, msg_len)) - return -1; - } - regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_int)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (tmpulongest) + { + ULONGEST msg_len; + regcache_raw_read_unsigned (regcache, tdep->arg3, &msg_len); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + (int) msg_len)) + return -1; + } + regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_in= t)) + return -1; break; /* sys_mq_notify */ @@ -1982,9 +2324,10 @@ record_linux_system_call (int num, struc /* sys_mq_getsetattr */ case 282: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_mq_attr)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_mq_attr)) + return -1; break; /* sys_kexec_load */ @@ -1993,12 +2336,14 @@ record_linux_system_call (int num, struc /* sys_waitid */ case 284: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_siginfo)) - return -1; - regcache_raw_read (regcache, tdep->arg5, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_rusage)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_siginfo)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg5, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_rusage)) + return -1; break; /* sys_ni_syscall */ @@ -2011,20 +2356,20 @@ record_linux_system_call (int num, struc /* sys_keyctl */ case 288: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (tmpu32 =3D=3D 6 || tmpu32 =3D=3D 11) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - if (tmpu32) - { - uint32_t buflen; - regcache_raw_read (regcache, tdep->arg4, - (gdb_byte *) & buflen); - if (record_arch_list_add_mem (tmpu32, buflen)) - return -1; - } - } + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (tmpulongest =3D=3D 6 || tmpulongest =3D=3D 11) + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (tmpulongest) + { + ULONGEST buflen; + regcache_raw_read_unsigned (regcache, tdep->arg4, &buflen); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + (int) buflen)) + return -1; + } + } break; /* sys_ioprio_set */ @@ -2053,9 +2398,10 @@ record_linux_system_call (int num, struc /* sys_fstatat64 */ case 300: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_stat64)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_stat64)) + return -1; break; /* sys_unlinkat */ @@ -2070,15 +2416,14 @@ record_linux_system_call (int num, struc /* sys_readlinkat */ case 305: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (tmpu32) - { - int32_t bufsiz; - regcache_raw_read (regcache, tdep->arg4, - (gdb_byte *) & bufsiz); - if (record_arch_list_add_mem (tmpu32, bufsiz)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (tmpulongest) + { + ULONGEST bufsiz; + regcache_raw_read_unsigned (regcache, tdep->arg4, &bufsiz); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, (int) buf= siz)) + return -1; + } break; /* sys_fchmodat */ @@ -2089,34 +2434,39 @@ record_linux_system_call (int num, struc /* sys_pselect6 */ case 308: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_fd_set)) - return -1; - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_fd_set)) - return -1; - regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_fd_set)) - return -1; - regcache_raw_read (regcache, tdep->arg5, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_timespec)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_fd_set)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_fd_set)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_fd_set)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg5, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_timespec)) + return -1; break; /* sys_ppoll */ case 309: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (tmpu32) - { - uint32_t nfds; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & nfds); - if (record_arch_list_add_mem (tmpu32, tdep->size_pollfd * nfds)) - return -1; - } - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_timespec)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (tmpulongest) + { + ULONGEST nfds; + regcache_raw_read_unsigned (regcache, tdep->arg2, &nfds); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_pollfd * nfds)) + return -1; + } + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_timespec)) + return -1; break; /* sys_unshare */ @@ -2127,22 +2477,24 @@ record_linux_system_call (int num, struc /* sys_get_robust_list */ case 312: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_int)) - return -1; - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_int)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_in= t)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_in= t)) + return -1; break; /* sys_splice */ case 313: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_loff_t)) - return -1; - regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_loff_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_loff_t)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_loff_t)) + return -1; break; /* sys_sync_file_range */ @@ -2155,48 +2507,47 @@ record_linux_system_call (int num, struc /* sys_move_pages */ case 317: - regcache_raw_read (regcache, tdep->arg5, (gdb_byte *) & tmpu32); - if (tmpu32) - { - uint32_t nr_pages; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & nr_pages); - if (record_arch_list_add_mem (tmpu32, nr_pages * tdep->size_int)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg5, &tmpulongest); + if (tmpulongest) + { + ULONGEST nr_pages; + regcache_raw_read_unsigned (regcache, tdep->arg2, &nr_pages); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + nr_pages * tdep->size_int)) + return -1; + } break; /* sys_getcpu */ case 318: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_int)) - return -1; - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_int)) - return -1; - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_ulong * 2)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_in= t)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, tdep->size_in= t)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + tdep->size_ulong * 2)) + return -1; break; /* sys_epoll_pwait */ case 319: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (tmpu32) - { - int32_t maxevents; - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & maxevents); - if (record_arch_list_add_mem - (tmpu32, maxevents * tdep->size_epoll_event)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (tmpulongest) + { + ULONGEST maxevents; + regcache_raw_read_unsigned (regcache, tdep->arg3, &maxevents); + if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, + (int) maxevents * tdep->size_epoll_event)) + return -1; + } break; default: printf_unfiltered (_("Process record and replay target doesn't " - "support syscall number %u\n"), - (int)tmpu32); + "support syscall number %u\n"), num); return -1; break; } --- a/linux-record.h +++ b/linux-record.h @@ -23,6 +23,7 @@ struct linux_record_tdep { /* The size of the type that will be used in a system call. */ + int size_pointer; int size__old_kernel_stat; int size_tms; int size_loff_t; @@ -81,7 +82,6 @@ struct linux_record_tdep int size_itimerspec; int size_mq_attr; int size_siginfo; - int size_termios; int size_termios2; int size_pid_t; @@ -89,6 +89,8 @@ struct linux_record_tdep int size_serial_struct; int size_serial_icounter_struct; int size_hayes_esp_config; + int size_size_t; + int size_iovec; /* The values of the second argument of system call "sys_ioctl". */ int ioctl_TCGETS; @@ -171,6 +173,7 @@ struct linux_record_tdep int arg3; int arg4; int arg5; + int arg6; }; extern int record_linux_system_call (int num, struct regcache *regcache, --000e0cd2de14e355a2046ee2d839 Content-Type: text/plain; charset=US-ASCII; name="prec_syscall_64bits.txt" Content-Disposition: attachment; filename="prec_syscall_64bits.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fx8o751e0 Content-length: 161939 LS0tCiBpMzg2LWxpbnV4LXRkZXAuYyB8ICAgMjYgCiBsaW51eC1yZWNvcmQu YyAgICB8IDI1NjMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBsaW51eC1yZWNvcmQuaCAgICB8ICAg IDUgCiAzIGZpbGVzIGNoYW5nZWQsIDE0ODIgaW5zZXJ0aW9ucygrKSwgMTEx MiBkZWxldGlvbnMoLSkKCi0tLSBhL2kzODYtbGludXgtdGRlcC5jCisrKyBi L2kzODYtbGludXgtdGRlcC5jCkBAIC0zNjksNyArMzY5LDE0IEBAIGkzODZf bGludXhfaW50eDgwX3N5c2VudGVyX3JlY29yZCAoc3RydWMKICAgaW50IHJl dDsKICAgdWludDMyX3QgdG1wdTMyOwogCi0gIHJlZ2NhY2hlX3Jhd19yZWFk IChyZWdjYWNoZSwgSTM4Nl9FQVhfUkVHTlVNLCAoZ2RiX2J5dGUgKikmdG1w dTMyKTsKKyAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCBJMzg2X0VB WF9SRUdOVU0sIChnZGJfYnl0ZSAqKSAmdG1wdTMyKTsKKworICBpZiAodG1w dTMyID4gNDk5KQorICAgIHsKKyAgICAgIHByaW50Zl91bmZpbHRlcmVkIChf KCJQcm9jZXNzIHJlY29yZCBhbmQgcmVwbGF5IHRhcmdldCBkb2Vzbid0ICIK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdXBwb3J0IHN5c2NhbGwg bnVtYmVyICV1XG4iKSwgdG1wdTMyKTsKKyAgICAgIHJldHVybiAtMTsKKyAg ICB9CiAKICAgcmV0ID0gcmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxsICh0bXB1 MzIsIHJlZ2NhY2hlLAogCQkJCSAgJmkzODZfbGludXhfcmVjb3JkX3RkZXAp OwpAQCAtNDgxLDYgKzQ4OCw4IEBAIGkzODZfbGludXhfaW5pdF9hYmkgKHN0 cnVjdCBnZGJhcmNoX2luZm8KICAgLyogSW5pdGlhbGl6ZSB0aGUgaTM4Nl9s aW51eF9yZWNvcmRfdGRlcC4gICovCiAgIC8qIFRoZXNlIHZhbHVlcyBhcmUg dGhlIHNpemUgb2YgdGhlIHR5cGUgdGhhdCB3aWxsIGJlIHVzZWQgaW4gYSBz eXN0ZW0KICAgICAgY2FsbC4gIFRoZXkgYXJlIG9idGFpbmVkIGZyb20gTGlu dXggS2VybmVsIHNvdXJjZS4gICovCisgIGkzODZfbGludXhfcmVjb3JkX3Rk ZXAuc2l6ZV9wb2ludGVyCisgICAgPSBnZGJhcmNoX3B0cl9iaXQgKGdkYmFy Y2gpIC8gVEFSR0VUX0NIQVJfQklUOwogICBpMzg2X2xpbnV4X3JlY29yZF90 ZGVwLnNpemVfX29sZF9rZXJuZWxfc3RhdCA9IDMyOwogICBpMzg2X2xpbnV4 X3JlY29yZF90ZGVwLnNpemVfdG1zID0gMTY7CiAgIGkzODZfbGludXhfcmVj b3JkX3RkZXAuc2l6ZV9sb2ZmX3QgPSA4OwpAQCAtNTAxLDkgKzUxMCwxMiBA QCBpMzg2X2xpbnV4X2luaXRfYWJpIChzdHJ1Y3QgZ2RiYXJjaF9pbmZvCiAg IGkzODZfbGludXhfcmVjb3JkX3RkZXAuc2l6ZV9zdGF0ZnMgPSA2NDsKICAg aTM4Nl9saW51eF9yZWNvcmRfdGRlcC5zaXplX3N0YXRmczY0ID0gODQ7CiAg IGkzODZfbGludXhfcmVjb3JkX3RkZXAuc2l6ZV9zb2NrYWRkciA9IDE2Owot ICBpMzg2X2xpbnV4X3JlY29yZF90ZGVwLnNpemVfaW50ID0gNDsKLSAgaTM4 Nl9saW51eF9yZWNvcmRfdGRlcC5zaXplX2xvbmcgPSA0OwotICBpMzg2X2xp bnV4X3JlY29yZF90ZGVwLnNpemVfdWxvbmcgPSA0OworICBpMzg2X2xpbnV4 X3JlY29yZF90ZGVwLnNpemVfaW50CisgICAgPSBnZGJhcmNoX2ludF9iaXQg KGdkYmFyY2gpIC8gVEFSR0VUX0NIQVJfQklUOworICBpMzg2X2xpbnV4X3Jl Y29yZF90ZGVwLnNpemVfbG9uZworICAgID0gZ2RiYXJjaF9sb25nX2JpdCAo Z2RiYXJjaCkgLyBUQVJHRVRfQ0hBUl9CSVQ7CisgIGkzODZfbGludXhfcmVj b3JkX3RkZXAuc2l6ZV91bG9uZworICAgID0gZ2RiYXJjaF9sb25nX2JpdCAo Z2RiYXJjaCkgLyBUQVJHRVRfQ0hBUl9CSVQ7CiAgIGkzODZfbGludXhfcmVj b3JkX3RkZXAuc2l6ZV9tc2doZHIgPSAyODsKICAgaTM4Nl9saW51eF9yZWNv cmRfdGRlcC5zaXplX2l0aW1lcnZhbCA9IDE2OwogICBpMzg2X2xpbnV4X3Jl Y29yZF90ZGVwLnNpemVfc3RhdCA9IDg4OwpAQCAtNTM2LDcgKzU0OCw4IEBA IGkzODZfbGludXhfaW5pdF9hYmkgKHN0cnVjdCBnZGJhcmNoX2luZm8KICAg aTM4Nl9saW51eF9yZWNvcmRfdGRlcC5zaXplX2lvX2V2ZW50ID0gMzI7CiAg IGkzODZfbGludXhfcmVjb3JkX3RkZXAuc2l6ZV9pb2NiID0gNjQ7CiAgIGkz ODZfbGludXhfcmVjb3JkX3RkZXAuc2l6ZV9lcG9sbF9ldmVudCA9IDEyOwot ICBpMzg2X2xpbnV4X3JlY29yZF90ZGVwLnNpemVfaXRpbWVyc3BlYyA9IGkz ODZfbGludXhfcmVjb3JkX3RkZXAuc2l6ZV90aW1lc3BlYyAqIDI7CisgIGkz ODZfbGludXhfcmVjb3JkX3RkZXAuc2l6ZV9pdGltZXJzcGVjCisgICAgPSBp Mzg2X2xpbnV4X3JlY29yZF90ZGVwLnNpemVfdGltZXNwZWMgKiAyOwogICBp Mzg2X2xpbnV4X3JlY29yZF90ZGVwLnNpemVfbXFfYXR0ciA9IDMyOwogICBp Mzg2X2xpbnV4X3JlY29yZF90ZGVwLnNpemVfc2lnaW5mbyA9IDEyODsKICAg aTM4Nl9saW51eF9yZWNvcmRfdGRlcC5zaXplX3Rlcm1pb3MgPSAzNjsKQEAg LTU0Niw2ICs1NTksOCBAQCBpMzg2X2xpbnV4X2luaXRfYWJpIChzdHJ1Y3Qg Z2RiYXJjaF9pbmZvCiAgIGkzODZfbGludXhfcmVjb3JkX3RkZXAuc2l6ZV9z ZXJpYWxfc3RydWN0ID0gNjA7CiAgIGkzODZfbGludXhfcmVjb3JkX3RkZXAu c2l6ZV9zZXJpYWxfaWNvdW50ZXJfc3RydWN0ID0gODA7CiAgIGkzODZfbGlu dXhfcmVjb3JkX3RkZXAuc2l6ZV9oYXllc19lc3BfY29uZmlnID0gMTI7Cisg IGkzODZfbGludXhfcmVjb3JkX3RkZXAuc2l6ZV9zaXplX3QgPSA0OworICBp Mzg2X2xpbnV4X3JlY29yZF90ZGVwLnNpemVfaW92ZWMgPSA4OwogCiAgIC8q IFRoZXNlIHZhbHVlcyBhcmUgdGhlIHNlY29uZCBhcmd1bWVudCBvZiBzeXN0 ZW0gY2FsbCAic3lzX2lvY3RsIi4KICAgICAgVGhleSBhcmUgb2J0YWluZWQg ZnJvbSBMaW51eCBLZXJuZWwgc291cmNlLiAgKi8KQEAgLTYyNyw2ICs2NDIs NyBAQCBpMzg2X2xpbnV4X2luaXRfYWJpIChzdHJ1Y3QgZ2RiYXJjaF9pbmZv CiAgIGkzODZfbGludXhfcmVjb3JkX3RkZXAuYXJnMyA9IEkzODZfRURYX1JF R05VTTsKICAgaTM4Nl9saW51eF9yZWNvcmRfdGRlcC5hcmc0ID0gSTM4Nl9F U0lfUkVHTlVNOwogICBpMzg2X2xpbnV4X3JlY29yZF90ZGVwLmFyZzUgPSBJ Mzg2X0VESV9SRUdOVU07CisgIGkzODZfbGludXhfcmVjb3JkX3RkZXAuYXJn NiA9IEkzODZfRUJQX1JFR05VTTsKIAogICB0ZGVwLT5pMzg2X2ludHg4MF9y ZWNvcmQgPSBpMzg2X2xpbnV4X2ludHg4MF9zeXNlbnRlcl9yZWNvcmQ7CiAg IHRkZXAtPmkzODZfc3lzZW50ZXJfcmVjb3JkID0gaTM4Nl9saW51eF9pbnR4 ODBfc3lzZW50ZXJfcmVjb3JkOwotLS0gYS9saW51eC1yZWNvcmQuYworKysg Yi9saW51eC1yZWNvcmQuYwpAQCAtMTksNiArMTksNyBAQAogCiAjaW5jbHVk ZSAiZGVmcy5oIgogI2luY2x1ZGUgInRhcmdldC5oIgorI2luY2x1ZGUgImdk YnR5cGVzLmgiCiAjaW5jbHVkZSAicmVnY2FjaGUuaCIKICNpbmNsdWRlICJy ZWNvcmQuaCIKICNpbmNsdWRlICJsaW51eC1yZWNvcmQuaCIKQEAgLTgwLDYg KzgxLDEzMyBAQAogI2RlZmluZSBSRUNPUkRfUV9YR0VUUVNUQVQJKCgnNScg PDwgOCkgKyA1KQogI2RlZmluZSBSRUNPUkRfUV9YR0VUUVVPVEEJKCgnMycg PDwgOCkgKyAzKQogCisjZGVmaW5lIE9VVFBVVF9SRUcodmFsLCBudW0pICAg ICAgcGhleF9ueiAoKHZhbCksIFwKKyAgICBUWVBFX0xFTkdUSCAoZ2RiYXJj aF9yZWdpc3Rlcl90eXBlIChnZXRfcmVnY2FjaGVfYXJjaCAocmVnY2FjaGUp LCAobnVtKSkpKQorCitzdGF0aWMgaW50CityZWNvcmRfbGludXhfc29ja2Fk ZHIgKHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsCisgICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCBsaW51eF9yZWNvcmRfdGRlcCAqdGRlcCwgVUxP TkdFU1QgYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgVUxPTkdFU1Qg bGVuKQoreworICBnZGJfYnl0ZSAqYTsKKyAgaW50IGFkZHJsZW47CisgIHN0 cnVjdCBnZGJhcmNoICpnZGJhcmNoID0gZ2V0X3JlZ2NhY2hlX2FyY2ggKHJl Z2NhY2hlKTsKKyAgZW51bSBiZmRfZW5kaWFuIGJ5dGVfb3JkZXIgPSBnZGJh cmNoX2J5dGVfb3JkZXIgKGdkYmFyY2gpOworCisgIGlmICghYWRkcikKKyAg ICByZXR1cm4gMDsKKworICBhID0gYWxsb2NhICh0ZGVwLT5zaXplX2ludCk7 CisKKyAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQURE UikgbGVuLCB0ZGVwLT5zaXplX2ludCkpCisgICAgcmV0dXJuIC0xOworCisg IC8qIEdldCB0aGUgYWRkcmxlbi4gICovCisgIGlmICh0YXJnZXRfcmVhZF9t ZW1vcnkgKChDT1JFX0FERFIpIGxlbiwgYSwgdGRlcC0+c2l6ZV9pbnQpKQor ICAgIHsKKyAgICAgIGlmIChyZWNvcmRfZGVidWcpCisgICAgICAgIGZwcmlu dGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiUHJvY2VzcyByZWNvcmQ6IGVycm9yIHJlYWRpbmcgIgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtZW1vcnkgYXQgYWRkciA9 IDB4JXMgbGVuID0gJWQuXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHBoZXhfbnogKGxlbiwgdGRlcC0+c2l6ZV9wb2ludGVyKSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX2ludCk7CisgICAg ICAgIHJldHVybiAtMTsKKyAgICB9CisgIGFkZHJsZW4gPSAoaW50KSBleHRy YWN0X3Vuc2lnbmVkX2ludGVnZXIoYSwgdGRlcC0+c2l6ZV9pbnQsIGJ5dGVf b3JkZXIpOworICBpZiAoYWRkcmxlbiA8PSAwIHx8IGFkZHJsZW4gPiB0ZGVw LT5zaXplX3NvY2thZGRyKQorICAgIGFkZHJsZW4gPSB0ZGVwLT5zaXplX3Nv Y2thZGRyOworCisgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChD T1JFX0FERFIpIGFkZHIsIGFkZHJsZW4pKQorICAgIHJldHVybiAtMTsKKwor ICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorcmVjb3JkX2xpbnV4X21z Z2hkciAoc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwKKyAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCBsaW51eF9yZWNvcmRfdGRlcCAqdGRlcCwgVUxP TkdFU1QgYWRkcikKK3sKKyAgZ2RiX2J5dGUgKmE7CisgIHN0cnVjdCBnZGJh cmNoICpnZGJhcmNoID0gZ2V0X3JlZ2NhY2hlX2FyY2ggKHJlZ2NhY2hlKTsK KyAgZW51bSBiZmRfZW5kaWFuIGJ5dGVfb3JkZXIgPSBnZGJhcmNoX2J5dGVf b3JkZXIgKGdkYmFyY2gpOworCisgIGlmICghYWRkcikKKyAgICByZXR1cm4g MDsKKworICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9B RERSKSBhZGRyLCB0ZGVwLT5zaXplX21zZ2hkcikpCisgICAgcmV0dXJuIC0x OworCisgIGEgPSBhbGxvY2EgKHRkZXAtPnNpemVfbXNnaGRyKTsKKyAgaWYg KHRhcmdldF9yZWFkX21lbW9yeSAoKENPUkVfQUREUikgYWRkciwgYSwgdGRl cC0+c2l6ZV9tc2doZHIpKQorICAgIHsKKyAgICAgIGlmIChyZWNvcmRfZGVi dWcpCisgICAgICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJvY2VzcyByZWNvcmQ6 IGVycm9yIHJlYWRpbmcgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJtZW1vcnkgYXQgYWRkciA9IDB4JXMgIgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJsZW4gPSAlZC5cbiIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcGhleF9ueiAoYWRkciwgdGRlcC0+c2l6ZV9wb2ludGVyKSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX21zZ2hk cik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgLyogbXNnX25h bWUgbXNnX25hbWVsZW4gKi8KKyAgYWRkciA9IGV4dHJhY3RfdW5zaWduZWRf aW50ZWdlciAoYSwgdGRlcC0+c2l6ZV9wb2ludGVyLCBieXRlX29yZGVyKTsK KyAgYSArPSB0ZGVwLT5zaXplX3BvaW50ZXI7CisgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIGFkZHIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChpbnQpIGV4dHJhY3RfdW5zaWduZWRf aW50ZWdlciAoYSwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRkZXAtPnNpemVfaW50LAorCQkJCSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYnl0ZV9vcmRlcikpKQorICAgIHJldHVybiAtMTsKKyAg YSArPSB0ZGVwLT5zaXplX2ludDsKKworICAvKiBtc2dfaW92IG1zZ19pb3Zs ZW4gKi8KKyAgYWRkciA9IGV4dHJhY3RfdW5zaWduZWRfaW50ZWdlciAoYSwg dGRlcC0+c2l6ZV9wb2ludGVyLCBieXRlX29yZGVyKTsKKyAgYSArPSB0ZGVw LT5zaXplX3BvaW50ZXI7CisgIGlmIChhZGRyKQorICAgIHsKKyAgICAgIFVM T05HRVNUIGk7CisgICAgICBVTE9OR0VTVCBsZW4gPSBleHRyYWN0X3Vuc2ln bmVkX2ludGVnZXIgKGEsIHRkZXAtPnNpemVfc2l6ZV90LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlX29y ZGVyKTsKKyAgICAgIGdkYl9ieXRlICppb3YgPSBhbGxvY2EgKHRkZXAtPnNp emVfaW92ZWMpOworCisgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKysp CisgICAgICAgIHsKKyAgICAgICAgICBpZiAodGFyZ2V0X3JlYWRfbWVtb3J5 ICgoQ09SRV9BRERSKSBhZGRyLCBpb3YsIHRkZXAtPnNpemVfaW92ZWMpKQor ICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAocmVjb3JkX2RlYnVn KQorICAgICAgICAgICAgICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0 ZGxvZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQ cm9jZXNzIHJlY29yZDogZXJyb3IgIgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgInJlYWRpbmcgbWVtb3J5IGF0ICIKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhZGRyID0gMHglcyAiCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGVuID0gJWQu XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGhl eF9ueiAoYWRkcix0ZGVwLT5zaXplX3BvaW50ZXIpLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9pb3ZlYyk7Cisg ICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAg ICAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FE RFIpIGV4dHJhY3RfdW5zaWduZWRfaW50ZWdlcgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlvdiwg dGRlcC0+c2l6ZV9wb2ludGVyLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVfb3JkZXIpLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQp IGV4dHJhY3RfdW5zaWduZWRfaW50ZWdlcgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlvdiArIHRkZXAtPnNp emVfcG9pbnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX3NpemVfdCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRl X29yZGVyKSkpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAg YWRkciArPSB0ZGVwLT5zaXplX2lvdmVjOworICAgICAgICB9CisgICAgfQor ICBhICs9IHRkZXAtPnNpemVfc2l6ZV90OworCisgIC8qIG1zZ19jb250cm9s IG1zZ19jb250cm9sbGVuICovCisgIGFkZHIgPSBleHRyYWN0X3Vuc2lnbmVk X2ludGVnZXIgKGEsIHRkZXAtPnNpemVfcG9pbnRlciwgYnl0ZV9vcmRlcik7 CisgIGEgKz0gdGRlcC0+c2l6ZV9wb2ludGVyOworICBpZiAocmVjb3JkX2Fy Y2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSBhZGRyLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoaW50KSBleHRyYWN0X3Vuc2lnbmVk X2ludGVnZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoYSwgdGRlcC0+c2l6ZV9zaXplX3QsIGJ5dGVfb3JkZXIpKSkKKyAg ICByZXR1cm4gLTE7CisKKyAgcmV0dXJuIDA7Cit9CisKIC8qIFdoZW4gdGhl IGFyY2hpdGVjdHVyZSBwcm9jZXNzIHJlY29yZCBnZXQgYSBMaW51eCBzeXNj YWxsCiAgICBpbnN0cnVjdGlvbiwgaXQgd2lsbCBnZXQgYSBMaW51eCBzeXNj YWxsIG51bWJlciBvZiB0aGlzCiAgICBhcmNoaXRlY3R1cmUgYW5kIGNvbnZl cnQgaXQgdG8gdGhlIExpbnV4IHN5c2NhbGwgbnVtYmVyICJudW0iIHdoaWNo CkBAIC05NCwxMCArMjIyLDExIEBACiAKIGludAogcmVjb3JkX2xpbnV4X3N5 c3RlbV9jYWxsIChpbnQgbnVtLCBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hl LAotCQkJICBzdHJ1Y3QgbGludXhfcmVjb3JkX3RkZXAgKnRkZXApCisgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBsaW51eF9yZWNvcmRfdGRl cCAqdGRlcCkKIHsKICAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2ggPSBnZXRf cmVnY2FjaGVfYXJjaCAocmVnY2FjaGUpOwotICB1aW50MzJfdCB0bXB1MzI7 CisgIGVudW0gYmZkX2VuZGlhbiBieXRlX29yZGVyID0gZ2RiYXJjaF9ieXRl X29yZGVyIChnZGJhcmNoKTsKKyAgVUxPTkdFU1QgdG1wdWxvbmdlc3Q7CiAK ICAgc3dpdGNoIChudW0pCiAgICAgewpAQCAtMTA4LDE1ICsyMzcsMTUgQEAg cmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxsIChpbnQgbnVtLCBzdHJ1YwogICAg ICAgLyogc3lzX2V4aXQgKi8KICAgICBjYXNlIDE6CiAgICAgICB7Ci0JaW50 IHE7Ci0JdGFyZ2V0X3Rlcm1pbmFsX291cnMgKCk7Ci0JcSA9Ci0JICB5cXVl cnkgKF8gKCJUaGUgbmV4dCBpbnN0cnVjdGlvbiBpcyBzeXNjYWxsIGV4aXQu ICAiCi0JCSAgICAgIkl0IHdpbGwgbWFrZSB0aGUgcHJvZ3JhbSBleGl0LiAg IgotCQkgICAgICJEbyB5b3Ugd2FudCB0byBzdG9wIHRoZSBwcm9ncmFtPyIp KTsKLQl0YXJnZXRfdGVybWluYWxfaW5mZXJpb3IgKCk7Ci0JaWYgKHEpCi0J ICByZXR1cm4gMTsKKyAgICAgICAgaW50IHE7CisgICAgICAgIHRhcmdldF90 ZXJtaW5hbF9vdXJzICgpOworICAgICAgICBxID0KKyAgICAgICAgICB5cXVl cnkgKF8gKCJUaGUgbmV4dCBpbnN0cnVjdGlvbiBpcyBzeXNjYWxsIGV4aXQu ICAiCisgICAgICAgICAgICAgICAgICAgICAiSXQgd2lsbCBtYWtlIHRoZSBw cm9ncmFtIGV4aXQuICAiCisgICAgICAgICAgICAgICAgICAgICAiRG8geW91 IHdhbnQgdG8gc3RvcCB0aGUgcHJvZ3JhbT8iKSk7CisgICAgICAgIHRhcmdl dF90ZXJtaW5hbF9pbmZlcmlvciAoKTsKKyAgICAgICAgaWYgKHEpCisgICAg ICAgICAgcmV0dXJuIDE7CiAgICAgICB9CiAgICAgICBicmVhazsKIApAQCAt MTI3LDExICsyNTYsMTEgQEAgcmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxsIChp bnQgbnVtLCBzdHJ1YwogICAgICAgLyogc3lzX3JlYWQgKi8KICAgICBjYXNl IDM6CiAgICAgICB7Ci0JdWludDMyX3QgYWRkciwgY291bnQ7Ci0JcmVnY2Fj aGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUg KikgJiBhZGRyKTsKLQlyZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRk ZXAtPmFyZzMsIChnZGJfYnl0ZSAqKSAmIGNvdW50KTsKLQlpZiAocmVjb3Jk X2FyY2hfbGlzdF9hZGRfbWVtIChhZGRyLCBjb3VudCkpCi0JICByZXR1cm4g LTE7CisgICAgICAgIFVMT05HRVNUIGFkZHIsIGNvdW50OworICAgICAgICBy ZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFy ZzIsICZhZGRyKTsKKyAgICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWdu ZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAmY291bnQpOworICAgICAgICBp ZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSBhZGRy LCAoaW50KSBjb3VudCkpCisgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAg fQogICAgICAgYnJlYWs7CiAKQEAgLTE3MSw5ICszMDAsMTAgQEAgcmVjb3Jk X2xpbnV4X3N5c3RlbV9jYWxsIChpbnQgbnVtLCBzdHJ1YwogICAgIGNhc2Ug Mjg6CiAgICAgICAvKiBzeXNfbHN0YXQgKi8KICAgICBjYXNlIDg0OgotICAg ICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAo Z2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX19vbGRfa2VybmVs X3N0YXQpKQotCXJldHVybiAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFk X3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgJnRtcHVsb25nZXN0 KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JF X0FERFIpIHRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdGRlcC0+c2l6ZV9fb2xkX2tlcm5lbF9zdGF0KSkKKyAg ICAgICAgcmV0dXJuIC0xOwogICAgICAgYnJlYWs7CiAKICAgICAgIC8qIHN5 c19sc2VlayAqLwpAQCAtMTk0LDE2ICszMjQsMTYgQEAgcmVjb3JkX2xpbnV4 X3N5c3RlbV9jYWxsIChpbnQgbnVtLCBzdHJ1YwogCiAgICAgICAvKiBzeXNf cHRyYWNlICovCiAgICAgY2FzZSAyNjoKLSAgICAgIHJlZ2NhY2hlX3Jhd19y ZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMSwgKGdkYl9ieXRlICopICYgdG1w dTMyKTsKLSAgICAgIGlmICh0bXB1MzIgPT0gUkVDT1JEX1BUUkFDRV9QRUVL VEVYVAotCSAgfHwgdG1wdTMyID09IFJFQ09SRF9QVFJBQ0VfUEVFS0RBVEEK LQkgIHx8IHRtcHUzMiA9PSBSRUNPUkRfUFRSQUNFX1BFRUtVU1IpCi0Jewot CSAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmc0LAot CQkJICAgICAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotCSAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCA0KSkKLQkgICAgcmV0dXJu IC0xOwotCX0KKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChy ZWdjYWNoZSwgdGRlcC0+YXJnMSwgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlm ICh0bXB1bG9uZ2VzdCA9PSBSRUNPUkRfUFRSQUNFX1BFRUtURVhUCisgICAg ICAgICAgfHwgdG1wdWxvbmdlc3QgPT0gUkVDT1JEX1BUUkFDRV9QRUVLREFU QQorICAgICAgICAgIHx8IHRtcHVsb25nZXN0ID09IFJFQ09SRF9QVFJBQ0Vf UEVFS1VTUikKKyAgICAgICAgeworICAgICAgICAgIHJlZ2NhY2hlX3Jhd19y ZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnNCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRtcHVsb25nZXN0KTsK KyAgICAgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09S RV9BRERSKSB0bXB1bG9uZ2VzdCwgNCkpCisgICAgICAgICAgICByZXR1cm4g LTE7CisgICAgICAgIH0KICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNf YWxhcm0gKi8KQEAgLTI0MCw5ICszNzAsOSBAQCByZWNvcmRfbGludXhfc3lz dGVtX2NhbGwgKGludCBudW0sIHN0cnVjCiAKICAgICAgIC8qIHN5c190aW1l cyAqLwogICAgIGNhc2UgNDM6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAo cmVnY2FjaGUsIHRkZXAtPmFyZzEsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7 Ci0gICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIs IHRkZXAtPnNpemVfdG1zKSkKLQlyZXR1cm4gLTE7CisgICAgICByZWdjYWNo ZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzEsICZ0 bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRf bWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwgdGRlcC0+c2l6ZV90bXMp KQorICAgICAgICByZXR1cm4gLTE7CiAgICAgICBicmVhazsKIAogICAgICAg Lyogc3lzX25pX3N5c2NhbGwgKi8KQEAgLTI3MCwxNDkgKzQwMCwxNzIgQEAg cmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxsIChpbnQgbnVtLCBzdHJ1YwogICAg ICAgLyogc3lzX2lvY3RsICovCiAgICAgY2FzZSA1NDoKICAgICAgIC8qIFhY WCBOZWVkIHRvIGFkZCBhIGxvdCBvZiBzdXBwb3J0IG9mIG90aGVyIGlvY3Rs IHJlcXVlc3RzLiAgKi8KLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdj YWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAg ICAgIGlmICh0bXB1MzIgPT0gdGRlcC0+aW9jdGxfRklPQ0xFWCB8fCB0bXB1 MzIgPT0gdGRlcC0+aW9jdGxfRklPTkNMRVgKLQkgIHx8IHRtcHUzMiA9PSB0 ZGVwLT5pb2N0bF9GSU9OQklPIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9G SU9BU1lOQwotCSAgfHwgdG1wdTMyID09IHRkZXAtPmlvY3RsX1RDU0VUUyB8 fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVENTRVRTVwotCSAgfHwgdG1wdTMy ID09IHRkZXAtPmlvY3RsX1RDU0VUU0YgfHwgdG1wdTMyID09IHRkZXAtPmlv Y3RsX1RDU0VUQQotCSAgfHwgdG1wdTMyID09IHRkZXAtPmlvY3RsX1RDU0VU QVcgfHwgdG1wdTMyID09IHRkZXAtPmlvY3RsX1RDU0VUQUYKLQkgIHx8IHRt cHUzMiA9PSB0ZGVwLT5pb2N0bF9UQ1NCUksgfHwgdG1wdTMyID09IHRkZXAt PmlvY3RsX1RDWE9OQwotCSAgfHwgdG1wdTMyID09IHRkZXAtPmlvY3RsX1RD RkxTSCB8fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVElPQ0VYQ0wKLQkgIHx8 IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9USU9DTlhDTAotCSAgfHwgdG1wdTMy ID09IHRkZXAtPmlvY3RsX1RJT0NTQ1RUWQotCSAgfHwgdG1wdTMyID09IHRk ZXAtPmlvY3RsX1RJT0NTUEdSUCB8fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxf VElPQ1NUSQotCSAgfHwgdG1wdTMyID09IHRkZXAtPmlvY3RsX1RJT0NTV0lO U1oKLQkgIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9USU9DTUJJUyB8fCB0 bXB1MzIgPT0gdGRlcC0+aW9jdGxfVElPQ01CSUMKLQkgIHx8IHRtcHUzMiA9 PSB0ZGVwLT5pb2N0bF9USU9DTVNFVAotCSAgfHwgdG1wdTMyID09IHRkZXAt PmlvY3RsX1RJT0NTU09GVENBUgotCSAgfHwgdG1wdTMyID09IHRkZXAtPmlv Y3RsX1RJT0NDT05TCi0JICB8fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVElP Q1NTRVJJQUwKLQkgIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9USU9DUEtU IHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9USU9DTk9UVFkKLQkgIHx8IHRt cHUzMiA9PSB0ZGVwLT5pb2N0bF9USU9DU0VURCB8fCB0bXB1MzIgPT0gdGRl cC0+aW9jdGxfVENTQlJLUAotCSAgfHwgdG1wdTMyID09IHRkZXAtPmlvY3Rs X1RJT0NUVFlHU1RSVUNUCi0JICB8fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxf VElPQ1NCUksgfHwgdG1wdTMyID09IHRkZXAtPmlvY3RsX1RJT0NDQlJLCi0J ICB8fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVENTRVRTMiB8fCB0bXB1MzIg PT0gdGRlcC0+aW9jdGxfVENTRVRTVzIKLQkgIHx8IHRtcHUzMiA9PSB0ZGVw LT5pb2N0bF9UQ1NFVFNGMgotCSAgfHwgdG1wdTMyID09IHRkZXAtPmlvY3Rs X1RJT0NTUFRMQ0sKLQkgIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9USU9D U0VSQ09ORklHCi0JICB8fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVElPQ1NF UkdXSUxECi0JICB8fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVElPQ1NFUlNX SUxECi0JICB8fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVElPQ1NMQ0tUUk1J T1MKLQkgIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9USU9DU0VSR0VUTVVM VEkKLQkgIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9USU9DU0VSU0VUTVVM VEkKLQkgIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9USU9DTUlXQUlUCi0J ICB8fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVElPQ1NIQVlFU0VTUCkKLQl7 Ci0JICAvKiBOb3RoaW5nIHRvIGRvLiAgKi8KLQl9Ci0gICAgICBlbHNlIGlm ICh0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVENHRVRTIHx8IHRtcHUzMiA9PSB0 ZGVwLT5pb2N0bF9UQ0dFVEEKLQkgICAgICAgfHwgdG1wdTMyID09IHRkZXAt PmlvY3RsX1RJT0NHTENLVFJNSU9TKQotCXsKLQkgIHJlZ2NhY2hlX3Jhd19y ZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywKLQkJCSAgICAgKGdkYl9ieXRl ICopICYgdG1wdTMyKTsKLQkgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9t ZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV90ZXJtaW9zKSkKLQkgICAgcmV0dXJu IC0xOwotCX0KLSAgICAgIGVsc2UgaWYgKHRtcHUzMiA9PSB0ZGVwLT5pb2N0 bF9USU9DR1BHUlAKLQkgICAgICAgfHwgdG1wdTMyID09IHRkZXAtPmlvY3Rs X1RJT0NHU0lEKQotCXsKLQkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNo ZSwgdGRlcC0+YXJnMywKLQkJCSAgICAgKGdkYl9ieXRlICopICYgdG1wdTMy KTsKLQkgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwg dGRlcC0+c2l6ZV9waWRfdCkpCi0JICAgIHJldHVybiAtMTsKLQl9Ci0gICAg ICBlbHNlIGlmICh0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVElPQ09VVFEKLQkg ICAgICAgfHwgdG1wdTMyID09IHRkZXAtPmlvY3RsX1RJT0NNR0VUCi0JICAg ICAgIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9USU9DR1NPRlRDQVIKLQkg ICAgICAgfHwgdG1wdTMyID09IHRkZXAtPmlvY3RsX0ZJT05SRUFECi0JICAg ICAgIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9USU9DSU5RCi0JICAgICAg IHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9USU9DR0VURAotCSAgICAgICB8 fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVElPQ0dQVE4KLQkgICAgICAgfHwg dG1wdTMyID09IHRkZXAtPmlvY3RsX1RJT0NTRVJHRVRMU1IpCi0JewotCSAg cmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLAotCQkJ ICAgICAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotCSAgaWYgKHJlY29yZF9h cmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX2ludCkpCi0J ICAgIHJldHVybiAtMTsKLQl9Ci0gICAgICBlbHNlIGlmICh0bXB1MzIgPT0g dGRlcC0+aW9jdGxfVElPQ0dXSU5TWikKLQl7Ci0JICByZWdjYWNoZV9yYXdf cmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsCi0JCQkgICAgIChnZGJfYnl0 ZSAqKSAmIHRtcHUzMik7Ci0JICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRf bWVtICh0bXB1MzIsIHRkZXAtPnNpemVfd2luc2l6ZSkpCi0JICAgIHJldHVy biAtMTsKLQl9Ci0gICAgICBlbHNlIGlmICh0bXB1MzIgPT0gdGRlcC0+aW9j dGxfVElPQ0xJTlVYKQotCXsKLQkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdj YWNoZSwgdGRlcC0+YXJnMywKLQkJCSAgICAgKGdkYl9ieXRlICopICYgdG1w dTMyKTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdj YWNoZSwgdGRlcC0+YXJnMiwgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmICh0 bXB1bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0bF9GSU9DTEVYCisgICAgICAgICAg fHwgdG1wdWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxfRklPTkNMRVgKKyAgICAg ICAgICB8fCB0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0bF9GSU9OQklPCisg ICAgICAgICAgfHwgdG1wdWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxfRklPQVNZ TkMKKyAgICAgICAgICB8fCB0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0bF9U Q1NFVFMKKyAgICAgICAgICB8fCB0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0 bF9UQ1NFVFNXCisgICAgICAgICAgfHwgdG1wdWxvbmdlc3QgPT0gdGRlcC0+ aW9jdGxfVENTRVRTRgorICAgICAgICAgIHx8IHRtcHVsb25nZXN0ID09IHRk ZXAtPmlvY3RsX1RDU0VUQQorICAgICAgICAgIHx8IHRtcHVsb25nZXN0ID09 IHRkZXAtPmlvY3RsX1RDU0VUQVcKKyAgICAgICAgICB8fCB0bXB1bG9uZ2Vz dCA9PSB0ZGVwLT5pb2N0bF9UQ1NFVEFGCisgICAgICAgICAgfHwgdG1wdWxv bmdlc3QgPT0gdGRlcC0+aW9jdGxfVENTQlJLCisgICAgICAgICAgfHwgdG1w dWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxfVENYT05DCisgICAgICAgICAgfHwg dG1wdWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxfVENGTFNICisgICAgICAgICAg fHwgdG1wdWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxfVElPQ0VYQ0wKKyAgICAg ICAgICB8fCB0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0bF9USU9DTlhDTAor ICAgICAgICAgIHx8IHRtcHVsb25nZXN0ID09IHRkZXAtPmlvY3RsX1RJT0NT Q1RUWQorICAgICAgICAgIHx8IHRtcHVsb25nZXN0ID09IHRkZXAtPmlvY3Rs X1RJT0NTUEdSUAorICAgICAgICAgIHx8IHRtcHVsb25nZXN0ID09IHRkZXAt PmlvY3RsX1RJT0NTVEkKKyAgICAgICAgICB8fCB0bXB1bG9uZ2VzdCA9PSB0 ZGVwLT5pb2N0bF9USU9DU1dJTlNaCisgICAgICAgICAgfHwgdG1wdWxvbmdl c3QgPT0gdGRlcC0+aW9jdGxfVElPQ01CSVMKKyAgICAgICAgICB8fCB0bXB1 bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0bF9USU9DTUJJQworICAgICAgICAgIHx8 IHRtcHVsb25nZXN0ID09IHRkZXAtPmlvY3RsX1RJT0NNU0VUCisgICAgICAg ICAgfHwgdG1wdWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxfVElPQ1NTT0ZUQ0FS CisgICAgICAgICAgfHwgdG1wdWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxfVElP Q0NPTlMKKyAgICAgICAgICB8fCB0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0 bF9USU9DU1NFUklBTAorICAgICAgICAgIHx8IHRtcHVsb25nZXN0ID09IHRk ZXAtPmlvY3RsX1RJT0NQS1QKKyAgICAgICAgICB8fCB0bXB1bG9uZ2VzdCA9 PSB0ZGVwLT5pb2N0bF9USU9DTk9UVFkKKyAgICAgICAgICB8fCB0bXB1bG9u Z2VzdCA9PSB0ZGVwLT5pb2N0bF9USU9DU0VURAorICAgICAgICAgIHx8IHRt cHVsb25nZXN0ID09IHRkZXAtPmlvY3RsX1RDU0JSS1AKKyAgICAgICAgICB8 fCB0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0bF9USU9DVFRZR1NUUlVDVAor ICAgICAgICAgIHx8IHRtcHVsb25nZXN0ID09IHRkZXAtPmlvY3RsX1RJT0NT QlJLCisgICAgICAgICAgfHwgdG1wdWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxf VElPQ0NCUksKKyAgICAgICAgICB8fCB0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5p b2N0bF9UQ1NFVFMyCisgICAgICAgICAgfHwgdG1wdWxvbmdlc3QgPT0gdGRl cC0+aW9jdGxfVENTRVRTVzIKKyAgICAgICAgICB8fCB0bXB1bG9uZ2VzdCA9 PSB0ZGVwLT5pb2N0bF9UQ1NFVFNGMgorICAgICAgICAgIHx8IHRtcHVsb25n ZXN0ID09IHRkZXAtPmlvY3RsX1RJT0NTUFRMQ0sKKyAgICAgICAgICB8fCB0 bXB1bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0bF9USU9DU0VSQ09ORklHCisgICAg ICAgICAgfHwgdG1wdWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxfVElPQ1NFUkdX SUxECisgICAgICAgICAgfHwgdG1wdWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxf VElPQ1NFUlNXSUxECisgICAgICAgICAgfHwgdG1wdWxvbmdlc3QgPT0gdGRl cC0+aW9jdGxfVElPQ1NMQ0tUUk1JT1MKKyAgICAgICAgICB8fCB0bXB1bG9u Z2VzdCA9PSB0ZGVwLT5pb2N0bF9USU9DU0VSR0VUTVVMVEkKKyAgICAgICAg ICB8fCB0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0bF9USU9DU0VSU0VUTVVM VEkKKyAgICAgICAgICB8fCB0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0bF9U SU9DTUlXQUlUCisgICAgICAgICAgfHwgdG1wdWxvbmdlc3QgPT0gdGRlcC0+ aW9jdGxfVElPQ1NIQVlFU0VTUCkKKyAgICAgICAgeworICAgICAgICAgIC8q IE5vdGhpbmcgdG8gZG8uICAqLworICAgICAgICB9CisgICAgICBlbHNlIGlm ICh0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0bF9UQ0dFVFMKKyAgICAgICAg ICAgICAgIHx8IHRtcHVsb25nZXN0ID09IHRkZXAtPmlvY3RsX1RDR0VUQQor ICAgICAgICAgICAgICAgfHwgdG1wdWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxf VElPQ0dMQ0tUUk1JT1MpCisgICAgICAgIHsKKyAgICAgICAgICByZWdjYWNo ZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0bXB1bG9u Z2VzdCk7CisgICAgICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21l bSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV90ZXJtaW9zKSkK KyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgZWxz ZSBpZiAodG1wdWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxfVElPQ0dQR1JQCisg ICAgICAgICAgICAgICB8fCB0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0bF9U SU9DR1NJRCkKKyAgICAgICAgeworICAgICAgICAgIHJlZ2NhY2hlX3Jhd19y ZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRtcHVsb25nZXN0KTsK KyAgICAgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09S RV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX3BpZF90KSkKKyAgICAgICAg ICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAodG1w dWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxfVElPQ09VVFEKKyAgICAgICAgICAg ICAgIHx8IHRtcHVsb25nZXN0ID09IHRkZXAtPmlvY3RsX1RJT0NNR0VUCisg ICAgICAgICAgICAgICB8fCB0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0bF9U SU9DR1NPRlRDQVIKKyAgICAgICAgICAgICAgIHx8IHRtcHVsb25nZXN0ID09 IHRkZXAtPmlvY3RsX0ZJT05SRUFECisgICAgICAgICAgICAgICB8fCB0bXB1 bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0bF9USU9DSU5RCisgICAgICAgICAgICAg ICB8fCB0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0bF9USU9DR0VURAorICAg ICAgICAgICAgICAgfHwgdG1wdWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxfVElP Q0dQVE4KKyAgICAgICAgICAgICAgIHx8IHRtcHVsb25nZXN0ID09IHRkZXAt PmlvY3RsX1RJT0NTRVJHRVRMU1IpCisgICAgICAgIHsKKyAgICAgICAgICBy ZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFy ZzMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0 bXB1bG9uZ2VzdCk7CisgICAgICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3Rf YWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3QsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9pbnQp KQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICBl bHNlIGlmICh0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0bF9USU9DR1dJTlNa KQorICAgICAgICB7CisgICAgICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5z aWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmdG1wdWxvbmdlc3QpOworICAgICAg ICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIp IHRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRkZXAtPnNpemVfd2luc2l6ZSkpCisgICAgICAgICAgICBy ZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKHRtcHVsb25n ZXN0ID09IHRkZXAtPmlvY3RsX1RJT0NMSU5VWCkKKyAgICAgICAgeworICAg ICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwg dGRlcC0+YXJnMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJnRtcHVsb25nZXN0KTsKICAgICAgICAgICAvKiBUaGlzIHN5c2Nh bGwgYWZmZWN0IGEgY2hhciBzaXplIG1lbW9yeS4gICovCi0JICBpZiAocmVj b3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIDEpKQotCSAgICByZXR1 cm4gLTE7Ci0JfQotICAgICAgZWxzZSBpZiAodG1wdTMyID09IHRkZXAtPmlv Y3RsX1RJT0NHU0VSSUFMKQotCXsKLQkgIHJlZ2NhY2hlX3Jhd19yZWFkIChy ZWdjYWNoZSwgdGRlcC0+YXJnMywKLQkJCSAgICAgKGdkYl9ieXRlICopICYg dG1wdTMyKTsKLQkgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRt cHUzMiwgdGRlcC0+c2l6ZV9zZXJpYWxfc3RydWN0KSkKLQkgICAgcmV0dXJu IC0xOwotCX0KLSAgICAgIGVsc2UgaWYgKHRtcHUzMiA9PSB0ZGVwLT5pb2N0 bF9UQ0dFVFMyKQotCXsKLQkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNo ZSwgdGRlcC0+YXJnMywKLQkJCSAgICAgKGdkYl9ieXRlICopICYgdG1wdTMy KTsKLQkgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwg dGRlcC0+c2l6ZV90ZXJtaW9zMikpCi0JICAgIHJldHVybiAtMTsKLQl9Ci0g ICAgICBlbHNlIGlmICh0bXB1MzIgPT0gdGRlcC0+aW9jdGxfRklPUVNJWkUp Ci0JewotCSAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5h cmczLAotCQkJICAgICAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotCSAgaWYg KHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXpl X2xvZmZfdCkpCi0JICAgIHJldHVybiAtMTsKLQl9Ci0gICAgICBlbHNlIGlm ICh0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVElPQ0dJQ09VTlQpCi0JewotCSAg cmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLAotCQkJ ICAgICAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotCSAgaWYgKHJlY29yZF9h cmNoX2xpc3RfYWRkX21lbQotCSAgICAgICh0bXB1MzIsIHRkZXAtPnNpemVf c2VyaWFsX2ljb3VudGVyX3N0cnVjdCkpCi0JICAgIHJldHVybiAtMTsKLQl9 Ci0gICAgICBlbHNlIGlmICh0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVElPQ0dI QVlFU0VTUCkKLQl7Ci0JICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUs IHRkZXAtPmFyZzMsCi0JCQkgICAgIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7 Ci0JICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRk ZXAtPnNpemVfaGF5ZXNfZXNwX2NvbmZpZykpCi0JICAgIHJldHVybiAtMTsK LQl9Ci0gICAgICBlbHNlIGlmICh0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVElP Q1NFUkdTVFJVQ1QpCi0JewotCSAgcHJpbnRmX3VuZmlsdGVyZWQgKF8oIlBy b2Nlc3MgcmVjb3JkIGFuZCByZXBsYXkgdGFyZ2V0IGRvZXNuJ3QgIgotCQkJ ICAgICAgICJzdXBwb3J0IGlvY3RsIHJlcXVlc3QgVElPQ1NFUkdTVFJVQ1Rc biIpKTsKLQkgIHJldHVybiAxOwotCX0KKyAgICAgICAgICBpZiAocmVjb3Jk X2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwg MSkpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAg IGVsc2UgaWYgKHRtcHVsb25nZXN0ID09IHRkZXAtPmlvY3RsX1RJT0NHU0VS SUFMKQorICAgICAgICB7CisgICAgICAgICAgcmVnY2FjaGVfcmF3X3JlYWRf dW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmdG1wdWxvbmdlc3QpOworICAg ICAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FE RFIpIHRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRkZXAtPnNpemVfc2VyaWFsX3N0cnVjdCkpCisgICAg ICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYg KHRtcHVsb25nZXN0ID09IHRkZXAtPmlvY3RsX1RDR0VUUzIpCisgICAgICAg IHsKKyAgICAgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVn Y2FjaGUsIHRkZXAtPmFyZzMsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZ0bXB1bG9uZ2VzdCk7CisgICAgICAgICAgaWYgKHJl Y29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdl c3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dGRlcC0+c2l6ZV90ZXJtaW9zMikpCisgICAgICAgICAgICByZXR1cm4gLTE7 CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKHRtcHVsb25nZXN0ID09IHRk ZXAtPmlvY3RsX0ZJT1FTSVpFKQorICAgICAgICB7CisgICAgICAgICAgcmVn Y2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcz LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdG1w dWxvbmdlc3QpOworICAgICAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2Fk ZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfbG9mZl90 KSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAg ZWxzZSBpZiAodG1wdWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxfVElPQ0dJQ09V TlQpCisgICAgICAgIHsKKyAgICAgICAgICByZWdjYWNoZV9yYXdfcmVhZF91 bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZ0bXB1bG9uZ2VzdCk7CisgICAg ICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQURE UikgdG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdGRlcC0+c2l6ZV9zZXJpYWxfaWNvdW50ZXJfc3RydWN0 KSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAg ZWxzZSBpZiAodG1wdWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxfVElPQ0dIQVlF U0VTUCkKKyAgICAgICAgeworICAgICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFk X3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRtcHVsb25nZXN0KTsKKyAg ICAgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9B RERSKSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB0ZGVwLT5zaXplX2hheWVzX2VzcF9jb25maWcpKQor ICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICBlbHNl IGlmICh0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0bF9USU9DU0VSR1NUUlVD VCkKKyAgICAgICAgeworICAgICAgICAgIHByaW50Zl91bmZpbHRlcmVkIChf KCJQcm9jZXNzIHJlY29yZCBhbmQgcmVwbGF5IHRhcmdldCBkb2Vzbid0ICIK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3VwcG9ydCBpb2N0 bCByZXF1ZXN0IFRJT0NTRVJHU1RSVUNUXG4iKSk7CisgICAgICAgICAgcmV0 dXJuIDE7CisgICAgICAgIH0KICAgICAgIGVsc2UKLQl7Ci0JICBwcmludGZf dW5maWx0ZXJlZCAoXygiUHJvY2VzcyByZWNvcmQgYW5kIHJlcGxheSB0YXJn ZXQgZG9lc24ndCAiCi0JCQkgICAgICAgInN1cHBvcnQgaW9jdGwgcmVxdWVz dCAweCVzLlxuIiksCi0JCQkgICAgIHBoZXhfbnogKHRtcHUzMiwgNCkpOwot CSAgcmV0dXJuIDE7Ci0JfQorICAgICAgICB7CisgICAgICAgICAgcHJpbnRm X3VuZmlsdGVyZWQgKF8oIlByb2Nlc3MgcmVjb3JkIGFuZCByZXBsYXkgdGFy Z2V0IGRvZXNuJ3QgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJzdXBwb3J0IGlvY3RsIHJlcXVlc3QgMHglcy5cbiIpLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBPVVRQVVRfUkVHICh0bXB1bG9uZ2VzdCwg dGRlcC0+YXJnMikpOworICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9 CiAgICAgICBicmVhazsKIAogICAgICAgLyogc3lzX2ZjbnRsICovCiAgICAg Y2FzZSA1NToKICAgICAgIC8qIFhYWCAqLwotICAgICAgcmVnY2FjaGVfcmF3 X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikgJiB0 bXB1MzIpOworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJl Z2NhY2hlLCB0ZGVwLT5hcmcyLCAmdG1wdWxvbmdlc3QpOwogICAgIHN5c19m Y250bDoKLSAgICAgIGlmICh0bXB1MzIgPT0gdGRlcC0+ZmNudGxfRl9HRVRM SykKLQl7Ci0JICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAt PmFyZzMsCi0JCQkgICAgIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0JICBp ZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNp emVfZmxvY2spKQotCSAgICByZXR1cm4gLTE7Ci0JfQorICAgICAgaWYgKHRt cHVsb25nZXN0ID09IHRkZXAtPmZjbnRsX0ZfR0VUTEspCisgICAgICAgIHsK KyAgICAgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2Fj aGUsIHRkZXAtPmFyZzMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZ0bXB1bG9uZ2VzdCk7CisgICAgICAgICAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3Qs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRl cC0+c2l6ZV9mbG9jaykpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAg ICAgIH0KICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNfbmlfc3lzY2Fs bCAqLwpAQCAtNDI1LDkgKzU3OCwxMCBAQCByZWNvcmRfbGludXhfc3lzdGVt X2NhbGwgKGludCBudW0sIHN0cnVjCiAKICAgICAgIC8qIHN5c19vbGR1bmFt ZSAqLwogICAgIGNhc2UgNTk6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAo cmVnY2FjaGUsIHRkZXAtPmFyZzEsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7 Ci0gICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIs IHRkZXAtPnNpemVfb2xkb2xkX3V0c25hbWUpKQotCXJldHVybiAtMTsKKyAg ICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRl cC0+YXJnMSwgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9v bGRvbGRfdXRzbmFtZSkpCisgICAgICAgIHJldHVybiAtMTsKICAgICAgIGJy ZWFrOwogCiAgICAgICAvKiBzeXNfdW1hc2sgKi8KQEAgLTQzOCw5ICs1OTIs MTAgQEAgcmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxsIChpbnQgbnVtLCBzdHJ1 YwogCiAgICAgICAvKiBzeXNfdXN0YXQgKi8KICAgICBjYXNlIDYyOgotICAg ICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAo Z2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX3VzdGF0KSkKLQly ZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAo cmVnY2FjaGUsIHRkZXAtPmFyZzIsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBp ZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1 bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRkZXAtPnNpemVfdXN0YXQpKQorICAgICAgICByZXR1cm4gLTE7CiAgICAg ICBicmVhazsKIAogICAgICAgLyogc3lzX2R1cDIgKi8KQEAgLTQ1NSw5ICs2 MTAsMTAgQEAgcmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxsIChpbnQgbnVtLCBz dHJ1YwogCiAgICAgICAvKiBzeXNfc2lnYWN0aW9uICovCiAgICAgY2FzZSA2 NzoKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+ YXJnMywgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChyZWNv cmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9vbGRf c2lnYWN0aW9uKSkKLQlyZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9yYXdf cmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsICZ0bXB1bG9u Z2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgo Q09SRV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfb2xkX3NpZ2FjdGlvbikpCisg ICAgICAgIHJldHVybiAtMTsKICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBz eXNfc2dldG1hc2sgKi8KQEAgLTQ3NCw5ICs2MzAsMTAgQEAgcmVjb3JkX2xp bnV4X3N5c3RlbV9jYWxsIChpbnQgbnVtLCBzdHJ1YwogCiAgICAgICAvKiBz eXNfc2lncGVuZGluZyAqLwogICAgIGNhc2UgNzM6Ci0gICAgICByZWdjYWNo ZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzEsIChnZGJfYnl0ZSAq KSAmIHRtcHUzMik7Ci0gICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRf bWVtICh0bXB1MzIsIHRkZXAtPnNpemVfb2xkX3NpZ3NldF90KSkKLQlyZXR1 cm4gLTE7CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVn Y2FjaGUsIHRkZXAtPmFyZzEsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAo cmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9u Z2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRk ZXAtPnNpemVfb2xkX3NpZ3NldF90KSkKKyAgICAgICAgcmV0dXJuIC0xOwog ICAgICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c19zZXRob3N0bmFtZSAqLwpA QCAtNDg3LDI2ICs2NDQsMzAgQEAgcmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxs IChpbnQgbnVtLCBzdHJ1YwogCiAgICAgICAvKiBzeXNfb2xkX2dldHJsaW1p dCAqLwogICAgIGNhc2UgNzY6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAo cmVnY2FjaGUsIHRkZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7 Ci0gICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIs IHRkZXAtPnNpemVfcmxpbWl0KSkKLQlyZXR1cm4gLTE7CisgICAgICByZWdj YWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIs ICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9h ZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfcmxpbWl0KSkK KyAgICAgICAgcmV0dXJuIC0xOwogICAgICAgYnJlYWs7CiAKICAgICAgIC8q IHN5c19nZXRydXNhZ2UgKi8KICAgICBjYXNlIDc3OgotICAgICAgcmVnY2Fj aGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUg KikgJiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRk X21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX3J1c2FnZSkpCi0JcmV0dXJuIC0x OworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hl LCB0ZGVwLT5hcmcyLCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3Qs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5z aXplX3J1c2FnZSkpCisgICAgICAgIHJldHVybiAtMTsKICAgICAgIGJyZWFr OwogCiAgICAgICAvKiBzeXNfZ2V0dGltZW9mZGF5ICovCiAgICAgY2FzZSA3 ODoKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+ YXJnMSwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChyZWNv cmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV90aW1l dmFsKSkKLQlyZXR1cm4gLTE7Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAo cmVnY2FjaGUsIHRkZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7 Ci0gICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIs IHRkZXAtPnNpemVfdGltZXpvbmUpKQotCXJldHVybiAtMTsKKyAgICAgIHJl Z2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJn MSwgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0 X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV90aW1ldmFs KSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3X3Jl YWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAmdG1wdWxvbmdl c3QpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENP UkVfQUREUikgdG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB0ZGVwLT5zaXplX3RpbWV6b25lKSkKKyAgICAgICAg cmV0dXJuIC0xOwogICAgICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c19zZXR0 aW1lb2ZkYXkgKi8KQEAgLTUxNSw1MyArNjc2LDU2IEBAIHJlY29yZF9saW51 eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwgc3RydWMKIAogICAgICAgLyogc3lz X2dldGdyb3VwczE2ICovCiAgICAgY2FzZSA4MDoKLSAgICAgIHJlZ2NhY2hl X3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRlICop ICYgdG1wdTMyKTsKLSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9t ZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9vbGRfZ2lkX3QpKQotCXJldHVybiAt MTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNo ZSwgdGRlcC0+YXJnMiwgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChyZWNv cmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+ c2l6ZV9vbGRfZ2lkX3QpKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgICBi cmVhazsKIAogICAgICAgLyogc3lzX3NldGdyb3VwczE2ICovCiAgICAgY2Fz ZSA4MToKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRl cC0+YXJnMiwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChy ZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9v bGRfZ2lkX3QpKQotCXJldHVybiAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19y ZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgJnRtcHVsb25n ZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChD T1JFX0FERFIpIHRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9vbGRfZ2lkX3QpKQorICAgICAg ICByZXR1cm4gLTE7CiAgICAgICBicmVhazsKIAogICAgICAgLyogb2xkX3Nl bGVjdCAqLwogICAgIGNhc2UgODI6CiAgICAgICB7Ci0Jc3RydWN0IHNlbF9h cmdfc3RydWN0Ci0JewotCSAgQ09SRV9BRERSIG47Ci0JICBDT1JFX0FERFIg aW5wOwotCSAgQ09SRV9BRERSIG91dHA7Ci0JICBDT1JFX0FERFIgZXhwOwot CSAgQ09SRV9BRERSIHR2cDsKLQl9IHNlbDsKKyAgICAgICAgc3RydWN0IHNl bF9hcmdfc3RydWN0CisgICAgICAgIHsKKyAgICAgICAgICBDT1JFX0FERFIg bjsKKyAgICAgICAgICBDT1JFX0FERFIgaW5wOworICAgICAgICAgIENPUkVf QUREUiBvdXRwOworICAgICAgICAgIENPUkVfQUREUiBleHA7CisgICAgICAg ICAgQ09SRV9BRERSIHR2cDsKKyAgICAgICAgfSBzZWw7CiAKLQlyZWdjYWNo ZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzEsCi0JCQkgICAoZ2Ri X2J5dGUgKikgJiB0bXB1MzIpOwotCWlmICh0bXB1MzIpCi0JICB7Ci0JICAg IGlmICh0YXJnZXRfcmVhZF9tZW1vcnkgKHRtcHUzMiwgKGdkYl9ieXRlICop ICYgc2VsLCBzaXplb2YgKHNlbCkpKQotCSAgICAgIHsKLQkJaWYgKHJlY29y ZF9kZWJ1ZykKLQkJICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2cs Ci0JCQkJICAgICAgIlByb2Nlc3MgcmVjb3JkOiBlcnJvciByZWFkaW5nIG1l bW9yeSAiCi0JCQkJICAgICAgImF0IGFkZHIgPSAlcyBsZW4gPSAlbHUuXG4i LAotCQkJCSAgICAgIHBhZGRyZXNzIChnZGJhcmNoLCB0bXB1MzIpLAotCQkJ CSAgICAgICh1bnNpZ25lZCBsb25nKXNpemVvZiAoc2VsKSk7Ci0JCXJldHVy biAtMTsKLQkgICAgICB9Ci0JICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2Fk ZF9tZW0gKHNlbC5pbnAsIHRkZXAtPnNpemVfZmRfc2V0KSkKLQkgICAgICBy ZXR1cm4gLTE7Ci0JICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0g KHNlbC5vdXRwLCB0ZGVwLT5zaXplX2ZkX3NldCkpCi0JICAgICAgcmV0dXJu IC0xOwotCSAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtIChzZWwu ZXhwLCB0ZGVwLT5zaXplX2ZkX3NldCkpCi0JICAgICAgcmV0dXJuIC0xOwot CSAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtIChzZWwudHZwLCB0 ZGVwLT5zaXplX3RpbWV2YWwpKQotCSAgICAgIHJldHVybiAtMTsKLQkgIH0K KyAgICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hl LCB0ZGVwLT5hcmcxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJnRtcHVsb25nZXN0KTsKKyAgICAgICAgaWYgKHRtcHVsb25nZXN0 KQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh0YXJnZXRfcmVhZF9t ZW1vcnkgKHRtcHVsb25nZXN0LCAoZ2RiX2J5dGUgKikgJnNlbCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzZWwpKSkK KyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChyZWNvcmRf ZGVidWcpCisgICAgICAgICAgICAgICAgICBmcHJpbnRmX3VuZmlsdGVyZWQg KGdkYl9zdGRsb2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJQcm9jZXNzIHJlY29yZDogZXJyb3IgcmVhZGluZyBtZW1vcnkg IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXQg YWRkciA9IDB4JXMgbGVuID0gJWx1LlxuIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgT1VUUFVUX1JFRyAodG1wdWxvbmdlc3Qs IHRkZXAtPmFyZzEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAodW5zaWduZWQgbG9uZykgc2l6ZW9mIChzZWwpKTsKKyAgICAg ICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHNlbC5pbnAs IHRkZXAtPnNpemVfZmRfc2V0KSkKKyAgICAgICAgICAgICAgcmV0dXJuIC0x OworICAgICAgICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAo c2VsLm91dHAsIHRkZXAtPnNpemVfZmRfc2V0KSkKKyAgICAgICAgICAgICAg cmV0dXJuIC0xOworICAgICAgICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3Rf YWRkX21lbSAoc2VsLmV4cCwgdGRlcC0+c2l6ZV9mZF9zZXQpKQorICAgICAg ICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBpZiAocmVjb3JkX2Fy Y2hfbGlzdF9hZGRfbWVtIChzZWwudHZwLCB0ZGVwLT5zaXplX3RpbWV2YWwp KQorICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgfQogICAg ICAgfQogICAgICAgYnJlYWs7CiAKQEAgLTU3MiwxMiArNzM2LDEyIEBAIHJl Y29yZF9saW51eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwgc3RydWMKICAgICAg IC8qIHN5c19yZWFkbGluayAqLwogICAgIGNhc2UgODU6CiAgICAgICB7Ci0J dWludDMyX3QgbGVuOwotCXJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwg dGRlcC0+YXJnMiwKLQkJCSAgIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0J cmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAoZ2Ri X2J5dGUgKikgJiBsZW4pOwotCWlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9t ZW0gKHRtcHUzMiwgbGVuKSkKLQkgIHJldHVybiAtMTsKKyAgICAgICAgVUxP TkdFU1QgbGVuOworICAgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25l ZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmdG1wdWxvbmdlc3QpOworICAgICAgICByZWdj YWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMs ICZsZW4pOworICAgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVt ICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwgKGludCkgbGVuKSkKKyAgICAg ICAgICByZXR1cm4gLTE7CiAgICAgICB9CiAgICAgICBicmVhazsKIApAQCAt NTkwLDIzICs3NTQsMjQgQEAgcmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxsIChp bnQgbnVtLCBzdHJ1YwogICAgICAgLyogc3lzX3JlYm9vdCAqLwogICAgIGNh c2UgODg6CiAgICAgICB7Ci0JaW50IHE7Ci0JdGFyZ2V0X3Rlcm1pbmFsX291 cnMgKCk7Ci0JcSA9Ci0JICB5cXVlcnkgKF8oIlRoZSBuZXh0IGluc3RydWN0 aW9uIGlzIHN5c2NhbGwgcmVib290LiAgIgotCQkgICAgIkl0IHdpbGwgcmVz dGFydCB0aGUgY29tcHV0ZXIuICAiCi0JCSAgICAiRG8geW91IHdhbnQgdG8g c3RvcCB0aGUgcHJvZ3JhbT8iKSk7Ci0JdGFyZ2V0X3Rlcm1pbmFsX2luZmVy aW9yICgpOwotCWlmIChxKQotCSAgcmV0dXJuIDE7CisgICAgICAgIGludCBx OworICAgICAgICB0YXJnZXRfdGVybWluYWxfb3VycyAoKTsKKyAgICAgICAg cSA9CisgICAgICAgICAgeXF1ZXJ5IChfKCJUaGUgbmV4dCBpbnN0cnVjdGlv biBpcyBzeXNjYWxsIHJlYm9vdC4gICIKKyAgICAgICAgICAgICAgICAgICAg Ikl0IHdpbGwgcmVzdGFydCB0aGUgY29tcHV0ZXIuICAiCisgICAgICAgICAg ICAgICAgICAgICJEbyB5b3Ugd2FudCB0byBzdG9wIHRoZSBwcm9ncmFtPyIp KTsKKyAgICAgICAgdGFyZ2V0X3Rlcm1pbmFsX2luZmVyaW9yICgpOworICAg ICAgICBpZiAocSkKKyAgICAgICAgICByZXR1cm4gMTsKICAgICAgIH0KICAg ICAgIGJyZWFrOwogCiAgICAgICAvKiBvbGRfcmVhZGRpciAqLwogICAgIGNh c2UgODk6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRk ZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAo cmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVf ZGlyZW50KSkKLQlyZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9yYXdfcmVh ZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsICZ0bXB1bG9uZ2Vz dCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09S RV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRkZXAtPnNpemVfZGlyZW50KSkKKyAgICAgICAgcmV0 dXJuIC0xOwogICAgICAgYnJlYWs7CiAKICAgICAgIC8qIG9sZF9tbWFwICov CkBAIC02MTYsMjIgKzc4MSwyMSBAQCByZWNvcmRfbGludXhfc3lzdGVtX2Nh bGwgKGludCBudW0sIHN0cnVjCiAgICAgICAvKiBzeXNfbXVubWFwICovCiAg ICAgY2FzZSA5MToKICAgICAgIHsKLQlpbnQgcTsKLQl1aW50MzJfdCBsZW47 CisgICAgICAgIGludCBxOworICAgICAgICBVTE9OR0VTVCBsZW47CiAKLQly ZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzEsCi0JCQkg ICAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotCXJlZ2NhY2hlX3Jhd19yZWFk IChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRlICopICYgbGVuKTsK LQl0YXJnZXRfdGVybWluYWxfb3VycyAoKTsKLQlxID0KLQkgIHlxdWVyeSAo XygiVGhlIG5leHQgaW5zdHJ1Y3Rpb24gaXMgc3lzY2FsbCBtdW5tYXAuICAi Ci0JCSAgICAiSXQgd2lsbCBmcmVlIHRoZSBtZW1vcnkgYWRkciA9ICVzIGxl biA9ICV1LiAgIgotCQkgICAgIkl0IHdpbGwgbWFrZSByZWNvcmQgdGFyZ2V0 IGdldCBlcnJvci4gICIKLQkJICAgICJEbyB5b3Ugd2FudCB0byBzdG9wIHRo ZSBwcm9ncmFtPyIpLAotCQkgIHBhZGRyZXNzIChnZGJhcmNoLCB0bXB1MzIp LCAoaW50KWxlbik7Ci0JdGFyZ2V0X3Rlcm1pbmFsX2luZmVyaW9yICgpOwot CWlmIChxKQotCSAgcmV0dXJuIDE7CisgICAgICAgIHJlZ2NhY2hlX3Jhd19y ZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0bXB1bG9uZ2VzdCk7Cisg ICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwg dGRlcC0+YXJnMiwgJmxlbik7CisgICAgICAgIHRhcmdldF90ZXJtaW5hbF9v dXJzICgpOworICAgICAgICBxID0geXF1ZXJ5IChfKCJUaGUgbmV4dCBpbnN0 cnVjdGlvbiBpcyBzeXNjYWxsIG11bm1hcC4gICIKKyAgICAgICAgICAgICAg ICAgICAgICAiSXQgd2lsbCBmcmVlIHRoZSBtZW1vcnkgYWRkciA9IDB4JXMg bGVuID0gJXUuICAiCisgICAgICAgICAgICAgICAgICAgICAgIkl0IHdpbGwg bWFrZSByZWNvcmQgdGFyZ2V0IGdldCBlcnJvci4gICIKKyAgICAgICAgICAg ICAgICAgICAgICAiRG8geW91IHdhbnQgdG8gc3RvcCB0aGUgcHJvZ3JhbT8i KSwKKyAgICAgICAgICAgICAgICAgICAgT1VUUFVUX1JFRyAodG1wdWxvbmdl c3QsIHRkZXAtPmFyZzEpLCAoaW50KSBsZW4pOworICAgICAgICB0YXJnZXRf dGVybWluYWxfaW5mZXJpb3IgKCk7CisgICAgICAgIGlmIChxKQorICAgICAg ICAgIHJldHVybiAxOwogICAgICAgfQogICAgICAgYnJlYWs7CiAKQEAgLTY1 NSwyOTIgKzgxOSwzNDcgQEAgcmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxsIChp bnQgbnVtLCBzdHJ1YwogICAgIGNhc2UgOTk6CiAgICAgICAvKiBzeXNfZnN0 YXRmcyAqLwogICAgIGNhc2UgMTAwOgotICAgICAgcmVnY2FjaGVfcmF3X3Jl YWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikgJiB0bXB1 MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1w dTMyLCB0ZGVwLT5zaXplX3N0YXRmcykpCi0JcmV0dXJuIC0xOworICAgICAg cmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5h cmcyLCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xp c3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3QsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX3N0YXRm cykpCisgICAgICAgIHJldHVybiAtMTsKICAgICAgIGJyZWFrOwogCiAgICAg ICAvKiBzeXNfaW9wZXJtICovCiAgICAgY2FzZSAxMDE6CiAgICAgICBicmVh azsKIAorICAgICAgLyogc3lzX3NvY2tldCAqLworICAgIGNhc2UgNTAwOgor ICAgICAgLyogc3lzX3NlbmR0byAqLworICAgIGNhc2UgNTAzOgorICAgICAg Lyogc3lzX3NlbmRtc2cgKi8KKyAgICBjYXNlIDUwNToKKyAgICAgIC8qIHN5 c19zaHV0ZG93biAqLworICAgIGNhc2UgNTA3OgorICAgICAgLyogc3lzX2Jp bmQgKi8KKyAgICBjYXNlIDUwODoKKyAgICAgIC8qIHN5c19jb25uZWN0ICov CisgICAgY2FzZSA1MDE6CisgICAgICAvKiBzeXNfbGlzdGVuICovCisgICAg Y2FzZSA1MDk6CisgICAgICAvKiBzeXNfc2V0c29ja29wdCAqLworICAgIGNh c2UgNTEzOgorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19hY2NlcHQg Ki8KKyAgICBjYXNlIDUwMjoKKyAgICAgIC8qIHN5c19nZXRzb2NrbmFtZSAq LworICAgIGNhc2UgNTEwOgorICAgICAgLyogc3lzX2dldHBlZXJuYW1lICov CisgICAgY2FzZSA1MTE6CisgICAgICB7CisgICAgICAgIFVMT05HRVNUIGxl bjsKKyAgICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2Nh Y2hlLCB0ZGVwLT5hcmcyLCAmdG1wdWxvbmdlc3QpOworICAgICAgICByZWdj YWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMs ICZsZW4pOworICAgICAgICBpZiAocmVjb3JkX2xpbnV4X3NvY2thZGRyIChy ZWdjYWNoZSwgdGRlcCwgdG1wdWxvbmdlc3QsIGxlbikpCisgICAgICAgICAg cmV0dXJuIC0xOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8q IHN5c19yZWN2ZnJvbSAqLworICAgIGNhc2UgNTA0OgorICAgICAgeworICAg ICAgICBVTE9OR0VTVCBsZW47CisgICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFk X3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnNCwgJnRtcHVsb25nZXN0 KTsKKyAgICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2Nh Y2hlLCB0ZGVwLT5hcmc1LCAmbGVuKTsKKyAgICAgICAgaWYgKHJlY29yZF9s aW51eF9zb2NrYWRkciAocmVnY2FjaGUsIHRkZXAsIHRtcHVsb25nZXN0LCBs ZW4pKQorICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgIH0KKyAgICAgIC8q IHN5c19yZWN2ICovCisgICAgY2FzZSA1MTU6CisgICAgICB7CisgICAgICAg IFVMT05HRVNUIHNpemU7CisgICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vu c2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgJnRtcHVsb25nZXN0KTsK KyAgICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hl LCB0ZGVwLT5hcmczLCAmc2l6ZSk7CisgICAgICAgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LCAoaW50 KSBzaXplKSkKKyAgICAgICAgICByZXR1cm4gLTE7CisgICAgICB9CisgICAg ICBicmVhazsKKworICAgICAgLyogc3lzX3JlY3Ztc2cgKi8KKyAgICBjYXNl IDUwNjoKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdj YWNoZSwgdGRlcC0+YXJnMiwgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChy ZWNvcmRfbGludXhfbXNnaGRyIChyZWdjYWNoZSwgdGRlcCwgdG1wdWxvbmdl c3QpKQorICAgICAgICByZXR1cm4gLTE7CisgICAgICBicmVhazsKKworICAg ICAgLyogc3lzX3NvY2tldHBhaXIgKi8KKyAgICBjYXNlIDUxMjoKKyAgICAg IHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+ YXJnNCwgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9s aXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LCB0ZGVwLT5z aXplX2ludCkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICAgIGJyZWFrOwor CisgICAgICAvKiBzeXNfZ2V0c29ja29wdCAqLworICAgIGNhc2UgNTE0Ogor ICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0 ZGVwLT5hcmc1LCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHRtcHVsb25n ZXN0KQorICAgICAgICB7CisgICAgICAgICAgVUxPTkdFU1Qgb3B0dmFscDsK KyAgICAgICAgICBnZGJfYnl0ZSAqb3B0bGVucCA9IGFsbG9jYSAodGRlcC0+ c2l6ZV9pbnQpOworICAgICAgICAgIGlmICh0YXJnZXRfcmVhZF9tZW1vcnkg KChDT1JFX0FERFIpIHRtcHVsb25nZXN0LCBvcHRsZW5wLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfaW50KSkKKyAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKHJlY29yZF9kZWJ1ZykK KyAgICAgICAgICAgICAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRs b2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJv Y2VzcyByZWNvcmQ6IGVycm9yIHJlYWRpbmcgIgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIm1lbW9yeSBhdCBhZGRyID0gMHglcyAi CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGVuID0g JWQuXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg T1VUUFVUX1JFRyAodG1wdWxvbmdlc3QsIHRkZXAtPmFyZzUpLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9pbnQp OworICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9Cisg ICAgICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hl LCB0ZGVwLT5hcmc0LCAmb3B0dmFscCk7CisgICAgICAgICAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgb3B0dmFscCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSBl eHRyYWN0X3NpZ25lZF9pbnRlZ2VyCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAob3B0bGVucCwgdGRlcC0+c2l6 ZV9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYnl0ZV9vcmRlcikpKQorICAgICAgICAgICAgcmV0dXJu IC0xOworICAgICAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0g KChDT1JFX0FERFIpIHRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfaW50KSkKKyAgICAg ICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgYnJlYWs7CisK ICAgICAgIC8qIHN5c19zb2NrZXRjYWxsICovCiAgICAgY2FzZSAxMDI6Ci0g ICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzEs IChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBzd2l0Y2ggKHRtcHUz MikKLQl7Ci0JY2FzZSBSRUNPUkRfU1lTX1NPQ0tFVDoKLQljYXNlIFJFQ09S RF9TWVNfQklORDoKLQljYXNlIFJFQ09SRF9TWVNfQ09OTkVDVDoKLQljYXNl IFJFQ09SRF9TWVNfTElTVEVOOgotCSAgYnJlYWs7Ci0JY2FzZSBSRUNPUkRf U1lTX0FDQ0VQVDoKLQljYXNlIFJFQ09SRF9TWVNfR0VUU09DS05BTUU6Ci0J Y2FzZSBSRUNPUkRfU1lTX0dFVFBFRVJOQU1FOgotCSAgewotCSAgICB1aW50 MzJfdCBhWzNdOwotCSAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUs IHRkZXAtPmFyZzIsCi0JCQkgICAgICAgKGdkYl9ieXRlICopICYgdG1wdTMy KTsKLQkgICAgaWYgKHRtcHUzMikKLQkgICAgICB7Ci0JCWlmICh0YXJnZXRf cmVhZF9tZW1vcnkgKHRtcHUzMiwgKGdkYl9ieXRlICopIGEsIHNpemVvZiAo YSkpKQotCQkgIHsKLQkJICAgIGlmIChyZWNvcmRfZGVidWcpCi0JCSAgICAg IGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKLQkJCQkJICAiUHJv Y2VzcyByZWNvcmQ6IGVycm9yIHJlYWRpbmcgIgotCQkJCQkgICJtZW1vcnkg YXQgYWRkciA9ICVzIGxlbiA9ICVsdS5cbiIsCi0JCQkJCSAgcGFkZHJlc3Mg KGdkYmFyY2gsIHRtcHUzMiksCi0JCQkJCSAgKHVuc2lnbmVkIGxvbmcpc2l6 ZW9mIChhKSk7Ci0JCSAgICByZXR1cm4gLTE7Ci0JCSAgfQotCQlpZiAocmVj b3JkX2FyY2hfbGlzdF9hZGRfbWVtIChhWzFdLCB0ZGVwLT5zaXplX3NvY2th ZGRyKSkKLQkJICByZXR1cm4gLTE7Ci0JCWlmIChyZWNvcmRfYXJjaF9saXN0 X2FkZF9tZW0gKGFbMl0sIHRkZXAtPnNpemVfaW50KSkKLQkJICByZXR1cm4g LTE7Ci0JICAgICAgfQotCSAgfQotCSAgYnJlYWs7CisgICAgICByZWdjYWNo ZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzEsICZ0 bXB1bG9uZ2VzdCk7CisgICAgICBzd2l0Y2ggKHRtcHVsb25nZXN0KQorICAg ICAgICB7CisgICAgICAgIGNhc2UgUkVDT1JEX1NZU19TT0NLRVQ6CisgICAg ICAgIGNhc2UgUkVDT1JEX1NZU19CSU5EOgorICAgICAgICBjYXNlIFJFQ09S RF9TWVNfQ09OTkVDVDoKKyAgICAgICAgY2FzZSBSRUNPUkRfU1lTX0xJU1RF TjoKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSRUNPUkRfU1lT X0FDQ0VQVDoKKyAgICAgICAgY2FzZSBSRUNPUkRfU1lTX0dFVFNPQ0tOQU1F OgorICAgICAgICBjYXNlIFJFQ09SRF9TWVNfR0VUUEVFUk5BTUU6CisgICAg ICAgICAgeworICAgICAgICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWdu ZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZ0bXB1bG9uZ2VzdCk7CisgICAgICAg ICAgICBpZiAodG1wdWxvbmdlc3QpCisgICAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgICBnZGJfYnl0ZSAqYSA9IGFsbG9jYSAodGRlcC0+c2l6ZV91 bG9uZyAqIDIpOworICAgICAgICAgICAgICAgIGludCBhZGRybGVuOworICAg ICAgICAgICAgICAgIGdkYl9ieXRlICphZGRybGVucDsKIAotCWNhc2UgUkVD T1JEX1NZU19TT0NLRVRQQUlSOgotCSAgewotCSAgICB1aW50MzJfdCBhWzRd OwotCSAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFy ZzIsCi0JCQkgICAgICAgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLQkgICAg aWYgKHRtcHUzMikKLQkgICAgICB7Ci0JCWlmICh0YXJnZXRfcmVhZF9tZW1v cnkgKHRtcHUzMiwgKGdkYl9ieXRlICopIGEsIHNpemVvZiAoYSkpKQotCQkg IHsKLQkJICAgIGlmIChyZWNvcmRfZGVidWcpCi0JCSAgICAgIGZwcmludGZf dW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKLQkJCQkJICAiUHJvY2VzcyByZWNv cmQ6IGVycm9yIHJlYWRpbmcgIgotCQkJCQkgICJtZW1vcnkgYXQgYWRkciA9 ICVzIGxlbiA9ICVsdS5cbiIsCi0JCQkJCSAgcGFkZHJlc3MgKGdkYmFyY2gs IHRtcHUzMiksCi0JCQkJICAgICAgICAgICh1bnNpZ25lZCBsb25nKXNpemVv ZiAoYSkpOwotCQkgICAgcmV0dXJuIC0xOwotCQkgIH0KLQkJaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX21lbSAoYVszXSwgdGRlcC0+c2l6ZV9pbnQpKQot CQkgIHJldHVybiAtMTsKLQkgICAgICB9Ci0JICB9Ci0JICBicmVhazsKLQlj YXNlIFJFQ09SRF9TWVNfU0VORDoKLQljYXNlIFJFQ09SRF9TWVNfU0VORFRP OgotCSAgYnJlYWs7Ci0JY2FzZSBSRUNPUkRfU1lTX1JFQ1Y6Ci0JICB7Ci0J ICAgIHVpbnQzMl90IGFbM107Ci0JICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChy ZWdjYWNoZSwgdGRlcC0+YXJnMiwKLQkJCSAgICAgICAoZ2RiX2J5dGUgKikg JiB0bXB1MzIpOwotCSAgICBpZiAodG1wdTMyKQotCSAgICAgIHsKLQkJaWYg KHRhcmdldF9yZWFkX21lbW9yeSAodG1wdTMyLCAoZ2RiX2J5dGUgKikgYSwg c2l6ZW9mIChhKSkpCi0JCSAgewotCQkgICAgaWYgKHJlY29yZF9kZWJ1ZykK LQkJICAgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAotCQkJ CQkgICJQcm9jZXNzIHJlY29yZDogZXJyb3IgcmVhZGluZyAiCi0JCQkJCSAg Im1lbW9yeSBhdCBhZGRyID0gJXMgbGVuID0gJWx1LlxuIiwKLQkJCQkJICBw YWRkcmVzcyAoZ2RiYXJjaCwgdG1wdTMyKSwKLQkJCQkJICAodW5zaWduZWQg bG9uZylzaXplb2YgKGEpKTsKLQkJICAgIHJldHVybiAtMTsKLQkJICB9Ci0J CWlmIChhWzJdKQotCQkgIHsKLQkJICAgIGlmICh0YXJnZXRfcmVhZF9tZW1v cnkKLQkJCShhWzJdLCAoZ2RiX2J5dGUgKikgJiAoYVsyXSksIHNpemVvZiAo YVsyXSkpKQotCQkgICAgICB7Ci0JCQlpZiAocmVjb3JkX2RlYnVnKQotCQkJ ICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCi0JCQkJCSAgICAg ICJQcm9jZXNzIHJlY29yZDogZXJyb3IgcmVhZGluZyAiCi0JCQkJCSAgICAg ICJtZW1vcnkgYXQgYWRkciA9ICVzICIKLQkJCQkJICAgICAgImxlbiA9ICVs dS5cbiIsCi0JCQkJCSAgICAgIHBhZGRyZXNzIChnZGJhcmNoLCBhWzJdKSwK LQkJCQkJICAgICAgKHVuc2lnbmVkIGxvbmcpc2l6ZW9mIChhWzJdKSk7Ci0J CQlyZXR1cm4gLTE7Ci0JCSAgICAgIH0KLQkJICAgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9tZW0gKGFbMV0sIGFbMl0pKQotCQkgICAgICByZXR1cm4g LTE7Ci0JCSAgfQotCSAgICAgIH0KLQkgIH0KLQkgIGJyZWFrOwotCWNhc2Ug UkVDT1JEX1NZU19SRUNWRlJPTToKLQkgIHsKLQkgICAgdWludDMyX3QgYVs2 XTsKLQkgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5h cmcyLAotCQkJICAgICAgIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0JICAg IGlmICh0bXB1MzIpCi0JICAgICAgewotCQlpZiAodGFyZ2V0X3JlYWRfbWVt b3J5ICh0bXB1MzIsIChnZGJfYnl0ZSAqKSBhLCBzaXplb2YgKGEpKSkKLQkJ ICB7Ci0JCSAgICBpZiAocmVjb3JkX2RlYnVnKQotCQkgICAgICBmcHJpbnRm X3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCi0JCQkJCSAgIlByb2Nlc3MgcmVj b3JkOiBlcnJvciByZWFkaW5nICIKLQkJCQkJICAibWVtb3J5IGF0IGFkZHIg PSAlcyBsZW4gPSAlbHUuXG4iLAotCQkJCQkgIHBhZGRyZXNzIChnZGJhcmNo LCB0bXB1MzIpLAotCQkJCQkgICh1bnNpZ25lZCBsb25nKXNpemVvZiAoYSkp OwotCQkgICAgcmV0dXJuIC0xOwotCQkgIH0KLQkJaWYgKGFbMl0pCi0JCSAg ewotCQkgICAgaWYgKHRhcmdldF9yZWFkX21lbW9yeQotCQkJKGFbMl0sIChn ZGJfYnl0ZSAqKSAmIChhWzJdKSwgc2l6ZW9mIChhWzJdKSkpCi0JCSAgICAg IHsKLQkJCWlmIChyZWNvcmRfZGVidWcpCi0JCQkgIGZwcmludGZfdW5maWx0 ZXJlZCAoZ2RiX3N0ZGxvZywKLQkJCQkJICAgICAgIlByb2Nlc3MgcmVjb3Jk OiBlcnJvciByZWFkaW5nICIKLQkJCQkJICAgICAgIm1lbW9yeSBhdCBhZGRy ID0gJXMgIgotCQkJCQkgICAgICAibGVuID0gJWx1LlxuIiwKLQkJCQkJICAg ICAgcGFkZHJlc3MgKGdkYmFyY2gsIGFbMl0pLAotCQkJCQkgICAgICAodW5z aWduZWQgbG9uZylzaXplb2YgKGFbMl0pKTsKLQkJCXJldHVybiAtMTsKLQkJ ICAgICAgfQotCQkgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAo YVsxXSwgYVsyXSkpCi0JCSAgICAgIHJldHVybiAtMTsKLQkJICAgIGlmIChy ZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKGFbNF0sIHRkZXAtPnNpemVfc29j a2FkZHIpKQotCQkgICAgICByZXR1cm4gLTE7Ci0JCSAgICBpZiAocmVjb3Jk X2FyY2hfbGlzdF9hZGRfbWVtIChhWzVdLCB0ZGVwLT5zaXplX2ludCkpCi0J CSAgICAgIHJldHVybiAtMTsKLQkJICB9Ci0JICAgICAgfQotCSAgfQotCSAg YnJlYWs7Ci0JY2FzZSBSRUNPUkRfU1lTX1NIVVRET1dOOgotCWNhc2UgUkVD T1JEX1NZU19TRVRTT0NLT1BUOgotCSAgYnJlYWs7Ci0JY2FzZSBSRUNPUkRf U1lTX0dFVFNPQ0tPUFQ6Ci0JICB7Ci0JICAgIHVpbnQzMl90IGFbNV07Ci0J ICAgIHVpbnQzMl90IGF2OworICAgICAgICAgICAgICAgIHRtcHVsb25nZXN0 ICs9IHRkZXAtPnNpemVfdWxvbmc7CisgICAgICAgICAgICAgICAgaWYgKHRh cmdldF9yZWFkX21lbW9yeSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3QsIGEs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRl cC0+c2l6ZV91bG9uZyAqIDIpKQorICAgICAgICAgICAgICAgICAgeworICAg ICAgICAgICAgICAgICAgICBpZiAocmVjb3JkX2RlYnVnKQorICAgICAgICAg ICAgICAgICAgICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQ cm9jZXNzIHJlY29yZDogZXJyb3IgcmVhZGluZyAiCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWVtb3J5IGF0IGFkZHIg PSAweCVzIGxlbiA9ICVkLlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE9VVFBVVF9SRUcgKHRtcHVsb25nZXN0LCB0 ZGVwLT5hcmcyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRkZXAtPnNpemVfdWxvbmcgKiAyKTsKKyAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgIGlmIChyZWNvcmRfbGludXhfc29ja2FkZHIgKHJlZ2Nh Y2hlLCB0ZGVwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGV4dHJhY3RfdW5zaWduZWRfaW50ZWdlcgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGEsIHRkZXAt PnNpemVfdWxvbmcsIGJ5dGVfb3JkZXIpLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhY3RfdW5zaWduZWRfaW50 ZWdlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGEgKyB0ZGVwLT5zaXplX3Vsb25nLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfdWxv bmcsIGJ5dGVfb3JkZXIpKSkKKyAgICAgICAgICAgICAgICAgIHJldHVybiAt MTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBi cmVhazsKIAotCSAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRk ZXAtPmFyZzIsCi0JCQkgICAgICAgKGdkYl9ieXRlICopICYgdG1wdTMyKTsK LQkgICAgaWYgKHRtcHUzMikKLQkgICAgICB7Ci0JCWlmICh0YXJnZXRfcmVh ZF9tZW1vcnkgKHRtcHUzMiwgKGdkYl9ieXRlICopIGEsIHNpemVvZiAoYSkp KQotCQkgIHsKLQkJICAgIGlmIChyZWNvcmRfZGVidWcpCi0JCSAgICAgIGZw cmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKLQkJCQkJICAiUHJvY2Vz cyByZWNvcmQ6IGVycm9yIHJlYWRpbmcgIgotCQkJCQkgICJtZW1vcnkgYXQg YWRkciA9ICVzIGxlbiA9ICVsdS5cbiIsCi0JCQkJCSAgcGFkZHJlc3MgKGdk YmFyY2gsIHRtcHUzMiksCi0JCQkJCSAgKHVuc2lnbmVkIGxvbmcpc2l6ZW9m IChhKSk7Ci0JCSAgICByZXR1cm4gLTE7Ci0JCSAgfQotCQlpZiAoYVs0XSkK LQkJICB7Ci0JCSAgICBpZiAodGFyZ2V0X3JlYWRfbWVtb3J5Ci0JCQkoYVs0 XSwgKGdkYl9ieXRlICopICYgYXYsIHNpemVvZiAoYXYpKSkKLQkJICAgICAg ewotCQkJaWYgKHJlY29yZF9kZWJ1ZykKLQkJCSAgZnByaW50Zl91bmZpbHRl cmVkIChnZGJfc3RkbG9nLAotCQkJCQkgICAgICAiUHJvY2VzcyByZWNvcmQ6 IGVycm9yIHJlYWRpbmcgIgotCQkJCQkgICAgICAibWVtb3J5IGF0IGFkZHIg PSAlcyAiCi0JCQkJCSAgICAgICJsZW4gPSAlbHUuXG4iLAotCQkJCQkgICAg ICBwYWRkcmVzcyAoZ2RiYXJjaCwgYVs0XSksCi0JCQkJCSAgICAgICh1bnNp Z25lZCBsb25nKXNpemVvZiAoYXYpKTsKLQkJCXJldHVybiAtMTsKLQkJICAg ICAgfQotCQkgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoYVsz XSwgYXYpKQotCQkgICAgICByZXR1cm4gLTE7Ci0JCSAgICBpZiAocmVjb3Jk X2FyY2hfbGlzdF9hZGRfbWVtIChhWzRdLCB0ZGVwLT5zaXplX2ludCkpCi0J CSAgICAgIHJldHVybiAtMTsKLQkJICB9Ci0JICAgICAgfQotCSAgfQotCSAg YnJlYWs7Ci0JY2FzZSBSRUNPUkRfU1lTX1NFTkRNU0c6Ci0JICBicmVhazsK LQljYXNlIFJFQ09SRF9TWVNfUkVDVk1TRzoKLQkgIHsKLQkgICAgdWludDMy X3QgYVsyXSwgaTsKLQkgICAgc3RydWN0IHJlY29yZF9tc2doZHIKLQkgICAg ewotCSAgICAgIHVpbnQzMl90IG1zZ19uYW1lOwotCSAgICAgIHVpbnQzMl90 IG1zZ19uYW1lbGVuOwotCSAgICAgIHVpbnQzMl90IG1zZ19pb3Y7Ci0JICAg ICAgdWludDMyX3QgbXNnX2lvdmxlbjsKLQkgICAgICB1aW50MzJfdCBtc2df Y29udHJvbDsKLQkgICAgICB1aW50MzJfdCBtc2dfY29udHJvbGxlbjsKLQkg ICAgICB1aW50MzJfdCBtc2dfZmxhZ3M7Ci0JICAgIH0gcmVjOwotCSAgICBz dHJ1Y3QgcmVjb3JkX2lvdmVjCi0JICAgIHsKLQkgICAgICB1aW50MzJfdCBp b3ZfYmFzZTsKLQkgICAgICB1aW50MzJfdCBpb3ZfbGVuOwotCSAgICB9IGlv djsKKyAgICAgICAgY2FzZSBSRUNPUkRfU1lTX1NPQ0tFVFBBSVI6CisgICAg ICAgICAgeworICAgICAgICAgICAgZ2RiX2J5dGUgKmEgPSBhbGxvY2EgKHRk ZXAtPnNpemVfdWxvbmcpOworICAgICAgICAgICAgcmVnY2FjaGVfcmF3X3Jl YWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0bXB1bG9uZ2VzdCk7 CisgICAgICAgICAgICBpZiAodG1wdWxvbmdlc3QpCisgICAgICAgICAgICAg IHsKKyAgICAgICAgICAgICAgICB0bXB1bG9uZ2VzdCArPSB0ZGVwLT5zaXpl X3Vsb25nICogMzsKKyAgICAgICAgICAgICAgICBpZiAodGFyZ2V0X3JlYWRf bWVtb3J5ICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwgYSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX3Vs b25nKSkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg ICAgaWYgKHJlY29yZF9kZWJ1ZykKKyAgICAgICAgICAgICAgICAgICAgICBm cHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJvY2VzcyByZWNvcmQ6 IGVycm9yIHJlYWRpbmcgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIm1lbW9yeSBhdCBhZGRyID0gMHglcyBsZW4gPSAl ZC5cbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBPVVRQVVRfUkVHICh0bXB1bG9uZ2VzdCwgdGRlcC0+YXJnMiksCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVw LT5zaXplX3Vsb25nKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0x OworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChy ZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIGV4dHJhY3Rf dW5zaWduZWRfaW50ZWdlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRkZXAtPnNpemVfdWxvbmcsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRl X29yZGVyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB0ZGVwLT5zaXplX2ludCkpCisgICAgICAgICAgICAgICAg ICByZXR1cm4gLTE7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9Cisg ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUkVDT1JEX1NZU19TRU5E OgorICAgICAgICBjYXNlIFJFQ09SRF9TWVNfU0VORFRPOgorICAgICAgICAg IGJyZWFrOworICAgICAgICBjYXNlIFJFQ09SRF9TWVNfUkVDVkZST006Cisg ICAgICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hl LCB0ZGVwLT5hcmcyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmdG1wdWxvbmdlc3QpOworICAgICAgICAgIGlmICh0bXB1bG9u Z2VzdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZ2RiX2J5dGUg KmEgPSBhbGxvY2EgKHRkZXAtPnNpemVfdWxvbmcgKiAyKTsKKyAgICAgICAg ICAgICAgaW50IGFkZHJsZW47CisgICAgICAgICAgICAgIGdkYl9ieXRlICph ZGRybGVucDsKIAotCSAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUs IHRkZXAtPmFyZzIsCi0JCQkgICAgICAgKGdkYl9ieXRlICopICYgdG1wdTMy KTsKLQkgICAgaWYgKHRtcHUzMikKLQkgICAgICB7Ci0JCWlmICh0YXJnZXRf cmVhZF9tZW1vcnkgKHRtcHUzMiwgKGdkYl9ieXRlICopIGEsIHNpemVvZiAo YSkpKQotCQkgIHsKLQkJICAgIGlmIChyZWNvcmRfZGVidWcpCi0JCSAgICAg IGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKLQkJCQkJICAiUHJv Y2VzcyByZWNvcmQ6IGVycm9yIHJlYWRpbmcgIgotCQkJCQkgICJtZW1vcnkg YXQgYWRkciA9ICVzIGxlbiA9ICVsdS5cbiIsCi0JCQkJCSAgcGFkZHJlc3Mg KGdkYmFyY2gsIHRtcHUzMiksCi0JCQkJCSAgKHVuc2lnbmVkIGxvbmcpc2l6 ZW9mIChhKSk7Ci0JCSAgICByZXR1cm4gLTE7Ci0JCSAgfQotCQlpZiAocmVj b3JkX2FyY2hfbGlzdF9hZGRfbWVtIChhWzFdLCB0ZGVwLT5zaXplX21zZ2hk cikpCi0JCSAgcmV0dXJuIC0xOwotCQlpZiAoYVsxXSkKLQkJICB7Ci0JCSAg ICBpZiAodGFyZ2V0X3JlYWRfbWVtb3J5Ci0JCQkoYVsxXSwgKGdkYl9ieXRl ICopICYgcmVjLCBzaXplb2YgKHJlYykpKQotCQkgICAgICB7Ci0JCQlpZiAo cmVjb3JkX2RlYnVnKQotCQkJICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9z dGRsb2csCi0JCQkJCSAgICAgICJQcm9jZXNzIHJlY29yZDogZXJyb3IgcmVh ZGluZyAiCi0JCQkJCSAgICAgICJtZW1vcnkgYXQgYWRkciA9ICVzICIKLQkJ CQkJICAgICAgImxlbiA9ICVsdS5cbiIsCi0JCQkJCSAgICAgIHBhZGRyZXNz IChnZGJhcmNoLCBhWzFdKSwKLQkJCQkJICAgICAgKHVuc2lnbmVkIGxvbmcp c2l6ZW9mIChyZWMpKTsKLQkJCXJldHVybiAtMTsKLQkJICAgICAgfQotCQkg ICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbQotCQkJKHJlYy5tc2df bmFtZSwgcmVjLm1zZ19uYW1lbGVuKSkKLQkJICAgICAgcmV0dXJuIC0xOwot CQkgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbQotCQkJKHJlYy5t c2dfY29udHJvbCwgcmVjLm1zZ19jb250cm9sbGVuKSkKLQkJICAgICAgcmV0 dXJuIC0xOwotCQkgICAgaWYgKHJlYy5tc2dfaW92KQotCQkgICAgICB7Ci0J CQlmb3IgKGkgPSAwOyBpIDwgcmVjLm1zZ19pb3ZsZW47IGkrKykKLQkJCSAg ewotCQkJICAgIGlmICh0YXJnZXRfcmVhZF9tZW1vcnkKLQkJCQkocmVjLm1z Z19pb3YsIChnZGJfYnl0ZSAqKSAmIGlvdiwKLQkJCQkgc2l6ZW9mIChpb3Yp KSkKLQkJCSAgICAgIHsKLQkJCQlpZiAocmVjb3JkX2RlYnVnKQotCQkJCSAg ZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAotCQkJCQkJICAgICAg IlByb2Nlc3MgcmVjb3JkOiBlcnJvciAiCi0JCQkJCQkgICAgICAicmVhZGlu ZyBtZW1vcnkgYXQgIgotCQkJCQkJICAgICAgImFkZHIgPSAlcyAiCi0JCQkJ CQkgICAgICAibGVuID0gJWx1LlxuIiwKLQkJCQkJCSAgICAgIHBhZGRyZXNz IChnZGJhcmNoLAotCQkJCQkJCQlyZWMubXNnX2lvdiksCi0JCQkJCQkgICAg ICAodW5zaWduZWQgbG9uZylzaXplb2YgKGlvdikpOwotCQkJCXJldHVybiAt MTsKLQkJCSAgICAgIH0KLQkJCSAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9h ZGRfbWVtCi0JCQkJKGlvdi5pb3ZfYmFzZSwgaW92Lmlvdl9sZW4pKQotCQkJ ICAgICAgcmV0dXJuIC0xOwotCQkJICAgIHJlYy5tc2dfaW92ICs9IHNpemVv ZiAoc3RydWN0IHJlY29yZF9pb3ZlYyk7Ci0JCQkgIH0KLQkJICAgICAgfQot CQkgIH0KLQkgICAgICB9Ci0JICB9Ci0JICBicmVhazsKLQlkZWZhdWx0Ogot CSAgcHJpbnRmX3VuZmlsdGVyZWQgKF8oIlByb2Nlc3MgcmVjb3JkIGFuZCBy ZXBsYXkgdGFyZ2V0ICIKLQkJCSAgICAgICAiZG9lc24ndCBzdXBwb3J0IHNv Y2tldGNhbGwgY2FsbCAweCVzXG4iKSwKLQkJCSAgICAgcGhleF9ueiAodG1w dTMyLCA0KSk7Ci0JICByZXR1cm4gLTE7Ci0JICBicmVhazsKLQl9CisgICAg ICAgICAgICAgIHRtcHVsb25nZXN0ICs9IHRkZXAtPnNpemVfdWxvbmcgKiA0 OworICAgICAgICAgICAgICBpZiAodGFyZ2V0X3JlYWRfbWVtb3J5ICgoQ09S RV9BRERSKSB0bXB1bG9uZ2VzdCwgYSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV91bG9uZyAqIDIpKQorICAg ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGlmIChyZWNvcmRf ZGVidWcpCisgICAgICAgICAgICAgICAgICAgIGZwcmludGZfdW5maWx0ZXJl ZCAoZ2RiX3N0ZGxvZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiUHJvY2VzcyByZWNvcmQ6IGVycm9yIHJlYWRpbmcgIgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtZW1v cnkgYXQgYWRkciA9IDB4JXMgbGVuID0gJWQuXG4iLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9VVFBVVF9SRUcgKHRtcHVs b25nZXN0LCB0ZGVwLT5hcmcyKSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX3Vsb25nICogMik7CisgICAg ICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICBpZiAocmVjb3JkX2xpbnV4X3NvY2thZGRyIChyZWdj YWNoZSwgdGRlcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZXh0cmFjdF91bnNpZ25lZF9pbnRlZ2VyCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGEsIHRkZXAtPnNp emVfdWxvbmcsIGJ5dGVfb3JkZXIpLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBleHRyYWN0X3Vuc2lnbmVkX2ludGVnZXIK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo YSArIHRkZXAtPnNpemVfdWxvbmcsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfdWxvbmcsIGJ5dGVf b3JkZXIpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAg ICAgICB9CisgICAgICAgIGNhc2UgUkVDT1JEX1NZU19SRUNWOgorICAgICAg ICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRl cC0+YXJnMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJnRtcHVsb25nZXN0KTsKKyAgICAgICAgICBpZiAodG1wdWxvbmdlc3Qp CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGdkYl9ieXRlICphID0g YWxsb2NhICh0ZGVwLT5zaXplX3Vsb25nICogMik7CisKKyAgICAgICAgICAg ICAgdG1wdWxvbmdlc3QgKz0gdGRlcC0+c2l6ZV91bG9uZzsKKyAgICAgICAg ICAgICAgaWYgKHRhcmdldF9yZWFkX21lbW9yeSAoKENPUkVfQUREUikgdG1w dWxvbmdlc3QsIGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRkZXAtPnNpemVfdWxvbmcpKQorICAgICAgICAgICAgICAgIHsK KyAgICAgICAgICAgICAgICAgIGlmIChyZWNvcmRfZGVidWcpCisgICAgICAg ICAgICAgICAgICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJv Y2VzcyByZWNvcmQ6IGVycm9yIHJlYWRpbmcgIgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJtZW1vcnkgYXQgYWRkciA9IDB4 JXMgbGVuID0gJWQuXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE9VVFBVVF9SRUcgKHRtcHVsb25nZXN0LCB0ZGVwLT5h cmcyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0ZGVwLT5zaXplX3Vsb25nKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgdG1w dWxvbmdlc3QgPSBleHRyYWN0X3Vuc2lnbmVkX2ludGVnZXIgKGEsIHRkZXAt PnNpemVfdWxvbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBieXRlX29yZGVyKTsKKyAgICAgICAg ICAgICAgaWYgKHRtcHVsb25nZXN0KQorICAgICAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgICAgIGEgKz0gdGRlcC0+c2l6ZV91bG9uZzsKKyAgICAg ICAgICAgICAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0KKyAg ICAgICAgICAgICAgICAgICAgICAgICgoQ09SRV9BRERSKSB0bXB1bG9uZ2Vz dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSBleHRyYWN0X3Vu c2lnbmVkX2ludGVnZXIgKGEsIHRkZXAtPnNpemVfdWxvbmcsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBieXRlX29yZGVyKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVy biAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUkVDT1JEX1NZU19TSFVURE9X TjoKKyAgICAgICAgY2FzZSBSRUNPUkRfU1lTX1NFVFNPQ0tPUFQ6CisgICAg ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUkVDT1JEX1NZU19HRVRTT0NL T1BUOgorICAgICAgICAgIHsKKyAgICAgICAgICAgIGdkYl9ieXRlICphID0g YWxsb2NhICh0ZGVwLT5zaXplX3Vsb25nICogMik7CisgICAgICAgICAgICBn ZGJfYnl0ZSAqYXYgPSBhbGxvY2EgKHRkZXAtPnNpemVfaW50KTsKKworICAg ICAgICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hl LCB0ZGVwLT5hcmcyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZ0bXB1bG9uZ2VzdCk7CisgICAgICAgICAgICBpZiAodG1w dWxvbmdlc3QpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0 bXB1bG9uZ2VzdCArPSB0ZGVwLT5zaXplX3Vsb25nICogMzsKKyAgICAgICAg ICAgICAgICBpZiAodGFyZ2V0X3JlYWRfbWVtb3J5ICgoQ09SRV9BRERSKSB0 bXB1bG9uZ2VzdCwgYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB0ZGVwLT5zaXplX3Vsb25nICogMikpCisgICAgICAgICAg ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZWNvcmRfZGVi dWcpCisgICAgICAgICAgICAgICAgICAgICAgZnByaW50Zl91bmZpbHRlcmVk IChnZGJfc3RkbG9nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIlByb2Nlc3MgcmVjb3JkOiBlcnJvciByZWFkaW5nICIK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJt ZW1vcnkgYXQgYWRkciA9IDB4JXMgbGVuID0gJWQuXG4iLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1VUUFVUX1JFRyAo dG1wdWxvbmdlc3QsIHRkZXAtPmFyZzIpLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV91bG9uZyAqIDIp OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgdG1wdWxvbmdlc3QgPSBleHRy YWN0X3Vuc2lnbmVkX2ludGVnZXIgKGEgKyB0ZGVwLT5zaXplX3Vsb25nLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB0ZGVwLT5zaXplX3Vsb25nLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRl X29yZGVyKTsKKyAgICAgICAgICAgICAgICBpZiAodG1wdWxvbmdlc3QpCisg ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0 YXJnZXRfcmVhZF9tZW1vcnkgKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LCBh diwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdGRlcC0+c2l6ZV9pbnQpKQorICAgICAgICAgICAgICAgICAgICAgIHsK KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWNvcmRfZGVidWcpCisg ICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGZfdW5maWx0ZXJlZCAo Z2RiX3N0ZGxvZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiUHJvY2VzcyByZWNvcmQ6IGVycm9yIHJlYWRpbmcg IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJtZW1vcnkgYXQgYWRkciA9IDB4JXMgIgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsZW4gPSAlZC5cbiIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcGhleF9ueiAodG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6 ZV91bG9uZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdGRlcC0+c2l6ZV9pbnQpOworICAgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRk X21lbQorICAgICAgICAgICAgICAgICAgICAgICAgICAoKENPUkVfQUREUikg ZXh0cmFjdF91bnNpZ25lZF9pbnRlZ2VyCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChhLCB0ZGVwLT5zaXplX3Vsb25nLCBi eXRlX29yZGVyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQp IGV4dHJhY3RfdW5zaWduZWRfaW50ZWdlciAoYXYsIHRkZXAtPnNpemVfaW50 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBieXRlX29yZGVyKSkpCisgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgICAgICBhICs9 IHRkZXAtPnNpemVfdWxvbmc7CisgICAgICAgICAgICAgICAgICAgIGlmIChy ZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgKChDT1JFX0FERFIpIGV4dHJhY3RfdW5zaWduZWRfaW50ZWdlcgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYSwg dGRlcC0+c2l6ZV91bG9uZywgYnl0ZV9vcmRlciksCisgICAgICAgICAgICAg ICAgICAgICAgICAgICB0ZGVwLT5zaXplX2ludCkpCisgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOwor ICAgICAgICBjYXNlIFJFQ09SRF9TWVNfU0VORE1TRzoKKyAgICAgICAgICBi cmVhazsKKyAgICAgICAgY2FzZSBSRUNPUkRfU1lTX1JFQ1ZNU0c6CisgICAg ICAgICAgeworICAgICAgICAgICAgZ2RiX2J5dGUgKmEgPSBhbGxvY2EgKHRk ZXAtPnNpemVfdWxvbmcpOworCisgICAgICAgICAgICByZWdjYWNoZV9yYXdf cmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRtcHVsb25nZXN0 KTsKKyAgICAgICAgICAgIGlmICh0bXB1bG9uZ2VzdCkKKyAgICAgICAgICAg ICAgeworICAgICAgICAgICAgICAgIHRtcHVsb25nZXN0ICs9IHRkZXAtPnNp emVfdWxvbmc7CisgICAgICAgICAgICAgICAgaWYgKHRhcmdldF9yZWFkX21l bW9yeSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3QsIGEsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV91bG9u ZykpCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg IGlmIChyZWNvcmRfZGVidWcpCisgICAgICAgICAgICAgICAgICAgICAgZnBy aW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByb2Nlc3MgcmVjb3JkOiBl cnJvciByZWFkaW5nICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJtZW1vcnkgYXQgYWRkciA9IDB4JXMgbGVuID0gJWQu XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgT1VUUFVUX1JFRyAodG1wdWxvbmdlc3QsIHRkZXAtPmFyZzIpLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+ c2l6ZV91bG9uZyk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsK KyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0bXB1bG9u Z2VzdCA9IGV4dHJhY3RfdW5zaWduZWRfaW50ZWdlciAoYSwgdGRlcC0+c2l6 ZV91bG9uZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYnl0ZV9vcmRlcik7CisgICAgICAgICAg ICAgICAgaWYgKHJlY29yZF9saW51eF9tc2doZHIgKHJlZ2NhY2hlLCB0ZGVw LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl eHRyYWN0X3Vuc2lnbmVkX2ludGVnZXIKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoYSwgdGRlcC0+c2l6ZV91bG9uZywg Ynl0ZV9vcmRlcikpKQorICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwor ICAgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFr OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIHByaW50Zl91bmZpbHRl cmVkIChfKCJQcm9jZXNzIHJlY29yZCBhbmQgcmVwbGF5IHRhcmdldCAiCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRvZXNuJ3Qgc3VwcG9y dCBzb2NrZXRjYWxsIGNhbGwgMHglc1xuIiksCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE9VVFBVVF9SRUcgKHRtcHVsb25nZXN0LCB0ZGVwLT5h cmcxKSk7CisgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgIGJyZWFr OworICAgICAgICB9CiAgICAgICBicmVhazsKIAogICAgICAgLyogc3lzX3N5 c2xvZyAqLwpAQCAtOTQ5LDE2ICsxMTY4LDE4IEBAIHJlY29yZF9saW51eF9z eXN0ZW1fY2FsbCAoaW50IG51bSwgc3RydWMKIAogICAgICAgLyogc3lzX3Nl dGl0aW1lciAqLwogICAgIGNhc2UgMTA0OgotICAgICAgcmVnY2FjaGVfcmF3 X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAoZ2RiX2J5dGUgKikgJiB0 bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAo dG1wdTMyLCB0ZGVwLT5zaXplX2l0aW1lcnZhbCkpCi0JcmV0dXJuIC0xOwor ICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0 ZGVwLT5hcmczLCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHJlY29yZF9h cmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3QsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXpl X2l0aW1lcnZhbCkpCisgICAgICAgIHJldHVybiAtMTsKICAgICAgIGJyZWFr OwogCiAgICAgICAvKiBzeXNfZ2V0aXRpbWVyICovCiAgICAgY2FzZSAxMDU6 Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFy ZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAocmVjb3Jk X2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfaXRpbWVy dmFsKSkKLQlyZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91 bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsICZ0bXB1bG9uZ2VzdCk7 CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9B RERSKSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRkZXAtPnNpemVfaXRpbWVydmFsKSkKKyAgICAgICAgcmV0 dXJuIC0xOwogICAgICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c19uZXdzdGF0 ICovCkBAIC05NjcsMTYgKzExODgsMTkgQEAgcmVjb3JkX2xpbnV4X3N5c3Rl bV9jYWxsIChpbnQgbnVtLCBzdHJ1YwogICAgIGNhc2UgMTA3OgogICAgICAg Lyogc3lzX25ld2ZzdGF0ICovCiAgICAgY2FzZSAxMDg6Ci0gICAgICByZWdj YWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsIChnZGJfYnl0 ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9h ZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfc3RhdCkpCi0JcmV0dXJuIC0x OworICAgICAgLyogc3lzX25ld2ZzdGF0YXQgKi8KKyAgICBjYXNlIDU0MDoK KyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwg dGRlcC0+YXJnMiwgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRf YXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LCB0 ZGVwLT5zaXplX3N0YXQpKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgICBi cmVhazsKIAogICAgICAgLyogc3lzX3VuYW1lICovCiAgICAgY2FzZSAxMDk6 Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFy ZzEsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAocmVjb3Jk X2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfb2xkX3V0 c25hbWUpKQotCXJldHVybiAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFk X3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMSwgJnRtcHVsb25nZXN0 KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JF X0FERFIpIHRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdGRlcC0+c2l6ZV9vbGRfdXRzbmFtZSkpCisgICAgICAg IHJldHVybiAtMTsKICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNfaW9w bCAqLwpAQCAtOTkxLDEyICsxMjE1LDE0IEBAIHJlY29yZF9saW51eF9zeXN0 ZW1fY2FsbCAoaW50IG51bSwgc3RydWMKIAogICAgICAgLyogc3lzX3dhaXQ0 ICovCiAgICAgY2FzZSAxMTQ6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAo cmVnY2FjaGUsIHRkZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7 Ci0gICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIs IHRkZXAtPnNpemVfaW50KSkKLQlyZXR1cm4gLTE7Ci0gICAgICByZWdjYWNo ZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzQsIChnZGJfYnl0ZSAq KSAmIHRtcHUzMik7Ci0gICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRf bWVtICh0bXB1MzIsIHRkZXAtPnNpemVfcnVzYWdlKSkKLQlyZXR1cm4gLTE7 CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUs IHRkZXAtPmFyZzIsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3Jk X2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNp emVfaW50KSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVf cmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmc0LCAmdG1w dWxvbmdlc3QpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21l bSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX3J1c2FnZSkpCisgICAg ICAgIHJldHVybiAtMTsKICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNf c3dhcG9mZiAqLwpAQCAtMTAwNSw0NyArMTIzMSwxMjEgQEAgcmVjb3JkX2xp bnV4X3N5c3RlbV9jYWxsIChpbnQgbnVtLCBzdHJ1YwogCiAgICAgICAvKiBz eXNfc3lzaW5mbyAqLwogICAgIGNhc2UgMTE2OgotICAgICAgcmVnY2FjaGVf cmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcxLCAoZ2RiX2J5dGUgKikg JiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21l bSAodG1wdTMyLCB0ZGVwLT5zaXplX3N5c2luZm8pKQotCXJldHVybiAtMTsK KyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwg dGRlcC0+YXJnMSwgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRf YXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6 ZV9zeXNpbmZvKSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgICAgYnJlYWs7 CisKKyAgICAgIC8qIHN5c19zaG1nZXQgKi8KKyAgICBjYXNlIDUyMDoKKyAg ICAgIC8qIHN5c19zZW1nZXQgKi8KKyAgICBjYXNlIDUyMzoKKyAgICAgIC8q IHN5c19zZW1vcCAqLworICAgIGNhc2UgNTI0OgorICAgICAgLyogc3lzX21z Z2dldCAqLworICAgIGNhc2UgNTI4OgorICAgICAgLyogc3lzX3NobWR0ICov CisgICAgICAvKiBYWFggbWF5YmUgbmVlZCBkbyBzb21lIHJlY29yZCB3b3Jr cyB3aWh0IHN5c19zaG1kdC4gICovCisgICAgY2FzZSA1Mjc6CisgICAgICAv KiBzeXNfbXNnc25kICovCisgICAgY2FzZSA1Mjk6CisgICAgICAvKiBzeXNf c2VtdGltZWRvcCAqLworICAgIGNhc2UgNTMyOgorICAgICAgYnJlYWs7CisK KyAgICAgIC8qIHN5c19zaG1hdCAqLworICAgIGNhc2UgNTIxOgorICAgICAg cmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5h cmczLCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xp c3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3QsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX3Vsb25n KSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgICAgYnJlYWs7CisKKyAgICAg IC8qIHN5c19zaG1jdGwgKi8KKyAgICBjYXNlIDUyMjoKKyAgICAgIHJlZ2Nh Y2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywg JnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2Fk ZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9zaG1pZF9kcykp CisgICAgICAgIHJldHVybiAtMTsKKyAgICAgIGJyZWFrOworCisgICAgICAv KiBzeXNfc2VtY3RsICovCisgICAgICAvKiBYWFggc3lzX3NlbWN0bCA1MjUg c3RpbGwgbm90IHN1cHBvcnQuICAqLworCisgICAgICAvKiBzeXNfbXNncmN2 ICovCisgICAgY2FzZSA1MzA6CisgICAgICB7CisgICAgICAgIFVMT05HRVNU IG1zZ3A7CisgICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3NpZ25lZCAocmVn Y2FjaGUsIHRkZXAtPmFyZzMsICZ0bXB1bG9uZ2VzdCk7CisgICAgICAgIHJl Z2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJn MiwgJm1zZ3ApOworICAgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRf bWVtICgoQ09SRV9BRERSKSBtc2dwLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoaW50KSB0bXB1bG9uZ2VzdCArIHRkZXAtPnNp emVfbG9uZykpCisgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgfQorICAg ICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19tc2djdGwgKi8KKyAgICBjYXNl IDUzMToKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdj YWNoZSwgdGRlcC0+YXJnMywgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChy ZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25n ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRl cC0+c2l6ZV9tc3FpZF9kcykpCisgICAgICAgIHJldHVybiAtMTsKICAgICAg IGJyZWFrOwogCiAgICAgICAvKiBzeXNfaXBjICovCiAgICAgY2FzZSAxMTc6 Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFy ZzEsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBzd2l0Y2ggKHRt cHUzMikKLQl7Ci0JY2FzZSBSRUNPUkRfTVNHUkNWOgotCSAgewotCSAgICBp bnQzMl90IHNlY29uZDsKLQkgICAgdWludDMyX3QgcHRyOwotCSAgICByZWdj YWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsCi0JCQkgICAg ICAgKGdkYl9ieXRlICopICYgc2Vjb25kKTsKLQkgICAgcmVnY2FjaGVfcmF3 X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmc1LAotCQkJICAgICAgIChnZGJf Ynl0ZSAqKSAmIHB0cik7Ci0JICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2Fk ZF9tZW0gKHB0ciwgc2Vjb25kICsgdGRlcC0+c2l6ZV9sb25nKSkKLQkgICAg ICByZXR1cm4gLTE7Ci0JICB9Ci0JICBicmVhazsKLQljYXNlIFJFQ09SRF9N U0dDVEw6Ci0JICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAt PmFyZzUsCi0JCQkgICAgIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0JICBp ZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNp emVfbXNxaWRfZHMpKQotCSAgICByZXR1cm4gLTE7Ci0JICBicmVhazsKLQlj YXNlIFJFQ09SRF9TSE1BVDoKLQkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdj YWNoZSwgdGRlcC0+YXJnNCwKLQkJCSAgICAgKGdkYl9ieXRlICopICYgdG1w dTMyKTsKLQkgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUz MiwgdGRlcC0+c2l6ZV91bG9uZykpCi0JICAgIHJldHVybiAtMTsKLQkgIGJy ZWFrOwotCWNhc2UgUkVDT1JEX1NITUNUTDoKLQkgIHJlZ2NhY2hlX3Jhd19y ZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnNSwKLQkJCSAgICAgKGdkYl9ieXRl ICopICYgdG1wdTMyKTsKLQkgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9t ZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9zaG1pZF9kcykpCi0JICAgIHJldHVy biAtMTsKLQkgIGJyZWFrOwotCX0KKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFk X3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMSwgJnRtcHVsb25nZXN0 KTsKKyAgICAgIHRtcHVsb25nZXN0ICY9IDB4ZmZmZjsKKyAgICAgIHN3aXRj aCAodG1wdWxvbmdlc3QpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBSRUNP UkRfU0VNT1A6CisgICAgICAgIGNhc2UgUkVDT1JEX1NFTUdFVDoKKyAgICAg ICAgY2FzZSBSRUNPUkRfU0VNVElNRURPUDoKKyAgICAgICAgY2FzZSBSRUNP UkRfTVNHU05EOgorICAgICAgICBjYXNlIFJFQ09SRF9NU0dHRVQ6CisgICAg ICAgICAgLyogWFhYIG1heWJlIG5lZWQgZG8gc29tZSByZWNvcmQgd29ya3Mg d2lodCBSRUNPUkRfU0hNRFQuICAqLworICAgICAgICBjYXNlIFJFQ09SRF9T SE1EVDoKKyAgICAgICAgY2FzZSBSRUNPUkRfU0hNR0VUOgorICAgICAgICAg IGJyZWFrOworICAgICAgICBjYXNlIFJFQ09SRF9NU0dSQ1Y6CisgICAgICAg ICAgeworICAgICAgICAgICAgVUxPTkdFU1Qgc2Vjb25kOworICAgICAgICAg ICAgVUxPTkdFU1QgcHRyOworICAgICAgICAgICAgcmVnY2FjaGVfcmF3X3Jl YWRfc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywgJnNlY29uZCk7Cisg ICAgICAgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2Fj aGUsIHRkZXAtPmFyZzUsICZwdHIpOworICAgICAgICAgICAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgcHRyLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkgc2Vj b25kICsgdGRlcC0+c2l6ZV9sb25nKSkKKyAgICAgICAgICAgICAgcmV0dXJu IC0xOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgICAg Y2FzZSBSRUNPUkRfTVNHQ1RMOgorICAgICAgICAgIHJlZ2NhY2hlX3Jhd19y ZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnNSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRtcHVsb25nZXN0KTsK KyAgICAgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09S RV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX21zcWlkX2RzKSkKKyAgICAg ICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAg Y2FzZSBSRUNPUkRfU0hNQVQ6CisgICAgICAgICAgcmVnY2FjaGVfcmF3X3Jl YWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmc0LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdG1wdWxvbmdlc3QpOwor ICAgICAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JF X0FERFIpIHRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfdWxvbmcpKQorICAgICAgICAg ICAgcmV0dXJuIC0xOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl IFJFQ09SRF9TSE1DVEw6CisgICAgICAgICAgcmVnY2FjaGVfcmF3X3JlYWRf dW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmc1LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmdG1wdWxvbmdlc3QpOworICAg ICAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FE RFIpIHRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRkZXAtPnNpemVfc2htaWRfZHMpKQorICAgICAgICAg ICAgcmV0dXJuIC0xOworICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZh dWx0OgorICAgICAgICAgIC8qIFhYWCBSRUNPUkRfU0VNQ1RMIHN0aWxsIG5v dCBzdXBwb3J0LiAgKi8KKyAgICAgICAgICBwcmludGZfdW5maWx0ZXJlZCAo XygiUHJvY2VzcyByZWNvcmQgYW5kIHJlcGxheSB0YXJnZXQgZG9lc24ndCAi CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1cHBvcnQgaXBj IG51bWJlciAlZFxuIiksIChpbnQpIHRtcHVsb25nZXN0KTsKKyAgICAgICAg ICBicmVhazsKKyAgICAgICAgfQogICAgICAgYnJlYWs7CiAKICAgICAgIC8q IHN5c19mc3luYyAqLwpAQCAtMTA2MCwzMCArMTM2MCwzMCBAQCByZWNvcmRf bGludXhfc3lzdGVtX2NhbGwgKGludCBudW0sIHN0cnVjCiAKICAgICAgIC8q IHN5c19uZXd1bmFtZSAqLwogICAgIGNhc2UgMTIyOgotICAgICAgcmVnY2Fj aGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcxLCAoZ2RiX2J5dGUg KikgJiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRk X21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX25ld191dHNuYW1lKSkKLQlyZXR1 cm4gLTE7CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVn Y2FjaGUsIHRkZXAtPmFyZzEsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAo cmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9u Z2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRk ZXAtPnNpemVfbmV3X3V0c25hbWUpKQorICAgICAgICByZXR1cm4gLTE7CiAg ICAgICBicmVhazsKIAogICAgICAgLyogc3lzX21vZGlmeV9sZHQgKi8KICAg ICBjYXNlIDEyMzoKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNo ZSwgdGRlcC0+YXJnMSwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAg IGlmICh0bXB1MzIgPT0gMCB8fCB0bXB1MzIgPT0gMikKLQl7Ci0JICB1aW50 MzJfdCBwdHIsIGJ5dGVjb3VudDsKLQkgIHJlZ2NhY2hlX3Jhd19yZWFkIChy ZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRlICopICYgcHRyKTsKLQkg IHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywKLQkJ CSAgICAgKGdkYl9ieXRlICopICYgYnl0ZWNvdW50KTsKLQkgIGlmIChyZWNv cmRfYXJjaF9saXN0X2FkZF9tZW0gKHB0ciwgYnl0ZWNvdW50KSkKLQkgICAg cmV0dXJuIC0xOwotCX0KKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2ln bmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMSwgJnRtcHVsb25nZXN0KTsKKyAg ICAgIGlmICh0bXB1bG9uZ2VzdCA9PSAwIHx8IHRtcHVsb25nZXN0ID09IDIp CisgICAgICAgIHsKKyAgICAgICAgICBVTE9OR0VTVCBwdHIsIGJ5dGVjb3Vu dDsKKyAgICAgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVn Y2FjaGUsIHRkZXAtPmFyZzIsICZwdHIpOworICAgICAgICAgIHJlZ2NhY2hl X3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywgJmJ5 dGVjb3VudCk7CisgICAgICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRk X21lbSAoKENPUkVfQUREUikgcHRyLCAoaW50KSBieXRlY291bnQpKQorICAg ICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CiAgICAgICBicmVhazsK IAogICAgICAgLyogc3lzX2FkanRpbWV4ICovCiAgICAgY2FzZSAxMjQ6Ci0g ICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzEs IChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAocmVjb3JkX2Fy Y2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfdGltZXgpKQot CXJldHVybiAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVk IChyZWdjYWNoZSwgdGRlcC0+YXJnMSwgJnRtcHVsb25nZXN0KTsKKyAgICAg IGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRt cHVsb25nZXN0LCB0ZGVwLT5zaXplX3RpbWV4KSkKKyAgICAgICAgcmV0dXJu IC0xOwogICAgICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c19tcHJvdGVjdCAq LwpAQCAtMTA5Miw5ICsxMzkyLDEwIEBAIHJlY29yZF9saW51eF9zeXN0ZW1f Y2FsbCAoaW50IG51bSwgc3RydWMKIAogICAgICAgLyogc3lzX3NpZ3Byb2Nt YXNrICovCiAgICAgY2FzZSAxMjY6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVh ZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsIChnZGJfYnl0ZSAqKSAmIHRtcHUz Mik7Ci0gICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1 MzIsIHRkZXAtPnNpemVfb2xkX3NpZ3NldF90KSkKLQlyZXR1cm4gLTE7Cisg ICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRk ZXAtPmFyZzMsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2Fy Y2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVf b2xkX3NpZ3NldF90KSkKKyAgICAgICAgcmV0dXJuIC0xOwogICAgICAgYnJl YWs7CiAKICAgICAgIC8qIHN5c19uaV9zeXNjYWxsICovCkBAIC0xMTA5LDM1 ICsxNDEwLDM5IEBAIHJlY29yZF9saW51eF9zeXN0ZW1fY2FsbCAoaW50IG51 bSwgc3RydWMKIAogICAgICAgLyogc3lzX3F1b3RhY3RsICovCiAgICAgY2Fz ZSAxMzE6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRk ZXAtPmFyZzEsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBzd2l0 Y2ggKHRtcHUzMikKLQl7Ci0JY2FzZSBSRUNPUkRfUV9HRVRGTVQ6Ci0JICBy ZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzQsCi0JCQkg ICAgIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0JICBpZiAocmVjb3JkX2Fy Y2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIDQpKQotCSAgICByZXR1cm4gLTE7 Ci0JICBicmVhazsKLQljYXNlIFJFQ09SRF9RX0dFVElORk86Ci0JICByZWdj YWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzQsCi0JCQkgICAg IChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0JICBpZiAocmVjb3JkX2FyY2hf bGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfbWVtX2RxaW5mbykp Ci0JICAgIHJldHVybiAtMTsKLQkgIGJyZWFrOwotCWNhc2UgUkVDT1JEX1Ff R0VUUVVPVEE6Ci0JICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRk ZXAtPmFyZzQsCi0JCQkgICAgIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0J ICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAt PnNpemVfaWZfZHFibGspKQotCSAgICByZXR1cm4gLTE7Ci0JICBicmVhazsK LQljYXNlIFJFQ09SRF9RX1hHRVRRU1RBVDoKLQljYXNlIFJFQ09SRF9RX1hH RVRRVU9UQToKLQkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRl cC0+YXJnNCwKLQkJCSAgICAgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLQkg IGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+ c2l6ZV9mc19xdW90YV9zdGF0KSkKLQkgICAgcmV0dXJuIC0xOwotCSAgYnJl YWs7Ci0JfQorICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJl Z2NhY2hlLCB0ZGVwLT5hcmcxLCAmdG1wdWxvbmdlc3QpOworICAgICAgc3dp dGNoICh0bXB1bG9uZ2VzdCkKKyAgICAgICAgeworICAgICAgICBjYXNlIFJF Q09SRF9RX0dFVEZNVDoKKyAgICAgICAgICByZWdjYWNoZV9yYXdfcmVhZF91 bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzQsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZ0bXB1bG9uZ2VzdCk7CisgICAg ICAgICAgLyogX191MzIgKi8KKyAgICAgICAgICBpZiAocmVjb3JkX2FyY2hf bGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwgNCkpCisg ICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgYnJlYWs7CisgICAg ICAgIGNhc2UgUkVDT1JEX1FfR0VUSU5GTzoKKyAgICAgICAgICByZWdjYWNo ZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0bXB1bG9u Z2VzdCk7CisgICAgICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21l bSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9tZW1fZHFpbmZv KSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICBicmVhazsK KyAgICAgICAgY2FzZSBSRUNPUkRfUV9HRVRRVU9UQToKKyAgICAgICAgICBy ZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFy ZzQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0 bXB1bG9uZ2VzdCk7CisgICAgICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3Rf YWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3QsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9pZl9k cWJsaykpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgYnJl YWs7CisgICAgICAgIGNhc2UgUkVDT1JEX1FfWEdFVFFTVEFUOgorICAgICAg ICBjYXNlIFJFQ09SRF9RX1hHRVRRVU9UQToKKyAgICAgICAgICByZWdjYWNo ZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0bXB1bG9u Z2VzdCk7CisgICAgICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21l bSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9mc19xdW90YV9z dGF0KSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICBicmVh azsKKyAgICAgICAgfQogICAgICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c19n ZXRwZ2lkICovCkBAIC0xMTUwLDE1ICsxNDU1LDE1IEBAIHJlY29yZF9saW51 eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwgc3RydWMKIAogICAgICAgLyogc3lz X3N5c2ZzICovCiAgICAgY2FzZSAxMzU6Ci0gICAgICByZWdjYWNoZV9yYXdf cmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzEsIChnZGJfYnl0ZSAqKSAmIHRt cHUzMik7Ci0gICAgICBpZiAodG1wdTMyID09IDIpCi0JewotCSAgcmVnY2Fj aGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLAotCQkJICAgICAo Z2RiX2J5dGUgKikgJiB0bXB1MzIpOwotCSAgLypYWFggdGhlIHNpemUgb2Yg bWVtb3J5IGlzIG5vdCB2ZXJ5IGNsZWFyLiAgKi8KLQkgIGlmIChyZWNvcmRf YXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgMTApKQotCSAgICByZXR1cm4g LTE7Ci0JfQorICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJl Z2NhY2hlLCB0ZGVwLT5hcmcxLCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYg KHRtcHVsb25nZXN0ID09IDIpCisgICAgICAgIHsKKyAgICAgICAgICByZWdj YWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0bXB1 bG9uZ2VzdCk7CisgICAgICAgICAgLypYWFggdGhlIHNpemUgb2YgbWVtb3J5 IGlzIG5vdCB2ZXJ5IGNsZWFyLiAgKi8KKyAgICAgICAgICBpZiAocmVjb3Jk X2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwg MTApKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CiAgICAg ICBicmVhazsKIAogICAgICAgLyogc3lzX3BlcnNvbmFsaXR5ICovCkBAIC0x MTczLDM3ICsxNDc4LDQzIEBAIHJlY29yZF9saW51eF9zeXN0ZW1fY2FsbCAo aW50IG51bSwgc3RydWMKIAogICAgICAgLyogc3lzX2xsc2VlayAqLwogICAg IGNhc2UgMTQwOgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hl LCB0ZGVwLT5hcmc0LCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAg aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5z aXplX2xvZmZfdCkpCi0JcmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3 X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmc0LCAmdG1wdWxv bmdlc3QpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAo KENPUkVfQUREUikgdG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX2xvZmZfdCkpCisgICAgICAg IHJldHVybiAtMTsKICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNfZ2V0 ZGVudHMgKi8KICAgICBjYXNlIDE0MToKICAgICAgIHsKLQl1aW50MzJfdCBj b3VudDsKLQlyZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFy ZzIsCi0JCQkgICAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotCXJlZ2NhY2hl X3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywgKGdkYl9ieXRlICop ICYgY291bnQpOwotCWlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRt cHUzMiwgdGRlcC0+c2l6ZV9kaXJlbnQgKiBjb3VudCkpCi0JICByZXR1cm4g LTE7CisgICAgICAgIFVMT05HRVNUIGNvdW50OworICAgICAgICByZWdjYWNo ZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdG1wdWxvbmdl c3QpOworICAgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVn Y2FjaGUsIHRkZXAtPmFyZzMsICZjb3VudCk7CisgICAgICAgIGlmIChyZWNv cmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVw LT5zaXplX2RpcmVudCAqIGNvdW50KSkKKyAgICAgICAgICByZXR1cm4gLTE7 CiAgICAgICB9CiAgICAgICBicmVhazsKIAogICAgICAgLyogc3lzX3NlbGVj dCAqLwogICAgIGNhc2UgMTQyOgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQg KHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIp OwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMy LCB0ZGVwLT5zaXplX2ZkX3NldCkpCi0JcmV0dXJuIC0xOwotICAgICAgcmVn Y2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAoZ2RiX2J5 dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3Rf YWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX2ZkX3NldCkpCi0JcmV0dXJu IC0xOwotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVw LT5hcmc0LCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYgKHJl Y29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX2Zk X3NldCkpCi0JcmV0dXJuIC0xOwotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQg KHJlZ2NhY2hlLCB0ZGVwLT5hcmc1LCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIp OwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMy LCB0ZGVwLT5zaXplX3RpbWV2YWwpKQotCXJldHVybiAtMTsKKyAgICAgIHJl Z2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJn MiwgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0 X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9mZF9zZXQp KQorICAgICAgICByZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9yYXdfcmVh ZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsICZ0bXB1bG9uZ2Vz dCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09S RV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRkZXAtPnNpemVfZmRfc2V0KSkKKyAgICAgICAgcmV0 dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJl Z2NhY2hlLCB0ZGVwLT5hcmc0LCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYg KHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxv bmdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0 ZGVwLT5zaXplX2ZkX3NldCkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICAg IHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+ YXJnNSwgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9s aXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV90aW1l dmFsKSkKKyAgICAgICAgcmV0dXJuIC0xOwogICAgICAgYnJlYWs7CiAKICAg ICAgIC8qIHN5c19mbG9jayAqLwpAQCAtMTIxNSwzNiArMTUyNiwzNyBAQCBy ZWNvcmRfbGludXhfc3lzdGVtX2NhbGwgKGludCBudW0sIHN0cnVjCiAgICAg ICAvKiBzeXNfcmVhZHYgKi8KICAgICBjYXNlIDE0NToKICAgICAgIHsKLQl1 aW50MzJfdCB2ZWM7Ci0JdWludDMyX3QgdmxlbjsKLQlzdHJ1Y3QgcmVjb3Jk X2lvdmVjCi0JewotCSAgdWludDMyX3QgaW92X2Jhc2U7Ci0JICB1aW50MzJf dCBpb3ZfbGVuOwotCX0gaW92OwotCXJlZ2NhY2hlX3Jhd19yZWFkIChyZWdj YWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRlICopICYgdmVjKTsKLQlpZiAo dmVjKQotCSAgewotCSAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUs IHRkZXAtPmFyZzMsCi0JCQkgICAgICAgKGdkYl9ieXRlICopICYgdmxlbik7 Ci0JICAgIGZvciAodG1wdTMyID0gMDsgdG1wdTMyIDwgdmxlbjsgdG1wdTMy KyspCi0JICAgICAgewotCQlpZiAodGFyZ2V0X3JlYWRfbWVtb3J5Ci0JCSAg ICAodmVjLCAoZ2RiX2J5dGUgKikgJiBpb3YsIHNpemVvZiAoc3RydWN0IHJl Y29yZF9pb3ZlYykpKQotCQkgIHsKLQkJICAgIGlmIChyZWNvcmRfZGVidWcp Ci0JCSAgICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKLQkJ CQkJICAiUHJvY2VzcyByZWNvcmQ6IGVycm9yIHJlYWRpbmcgIgotCQkJCQkg ICJtZW1vcnkgYXQgYWRkciA9ICVzIGxlbiA9ICVsdS5cbiIsCi0JCQkJCSAg cGFkZHJlc3MgKGdkYmFyY2gsIHZlYyksCi0JCQkJCSAgKHVuc2lnbmVkIGxv bmcpc2l6ZW9mIChzdHJ1Y3QgcmVjb3JkX2lvdmVjKSk7Ci0JCSAgICByZXR1 cm4gLTE7Ci0JCSAgfQotCQlpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVt IChpb3YuaW92X2Jhc2UsIGlvdi5pb3ZfbGVuKSkKLQkJICByZXR1cm4gLTE7 Ci0JCXZlYyArPSBzaXplb2YgKHN0cnVjdCByZWNvcmRfaW92ZWMpOwotCSAg ICAgIH0KLQkgIH0KKyAgICAgICAgVUxPTkdFU1QgdmVjLCB2bGVuOworCisg ICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwg dGRlcC0+YXJnMiwgJnZlYyk7CisgICAgICAgIGlmICh2ZWMpCisgICAgICAg ICAgeworICAgICAgICAgICAgZ2RiX2J5dGUgKmlvdiA9IGFsbG9jYSAodGRl cC0+c2l6ZV9pb3ZlYyk7CisKKyAgICAgICAgICAgIHJlZ2NhY2hlX3Jhd19y ZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywgJnZsZW4pOwor ICAgICAgICAgICAgZm9yICh0bXB1bG9uZ2VzdCA9IDA7IHRtcHVsb25nZXN0 IDwgdmxlbjsgdG1wdWxvbmdlc3QrKykKKyAgICAgICAgICAgICAgeworICAg ICAgICAgICAgICAgIGlmICh0YXJnZXRfcmVhZF9tZW1vcnkgKChDT1JFX0FE RFIpIHZlYywgaW92LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRkZXAtPnNpemVfaW92ZWMpKQorICAgICAgICAgICAgICAg ICAgeworICAgICAgICAgICAgICAgICAgICBpZiAocmVjb3JkX2RlYnVnKQor ICAgICAgICAgICAgICAgICAgICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2Ri X3N0ZGxvZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJQcm9jZXNzIHJlY29yZDogZXJyb3IgcmVhZGluZyAiCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWVtb3J5 IGF0IGFkZHIgPSAweCVzIGxlbiA9ICVkLlxuIiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9VVFBVVF9SRUcgKHZlYywg dGRlcC0+YXJnMiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB0ZGVwLT5zaXplX2lvdmVjKTsKKyAgICAgICAgICAgICAg ICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0KKyAgICAg ICAgICAgICAgICAgICAgICAoKENPUkVfQUREUikgZXh0cmFjdF91bnNpZ25l ZF9pbnRlZ2VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGlvdiwgdGRlcC0+c2l6ZV9wb2ludGVyLCBieXRlX29yZGVyKSwKKyAg ICAgICAgICAgICAgICAgICAgICAgKGludCkgZXh0cmFjdF91bnNpZ25lZF9p bnRlZ2VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlvdiAr IHRkZXAtPnNpemVfcG9pbnRlciwgdGRlcC0+c2l6ZV9zaXplX3QsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVfb3JkZXIpKSkKKyAg ICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB2 ZWMgKz0gdGRlcC0+c2l6ZV9pb3ZlYzsKKyAgICAgICAgICAgICAgfQorICAg ICAgICAgIH0KICAgICAgIH0KICAgICAgIGJyZWFrOwogCkBAIC0xMjcwLDkg KzE1ODIsOSBAQCByZWNvcmRfbGludXhfc3lzdGVtX2NhbGwgKGludCBudW0s IHN0cnVjCiAKICAgICAgIC8qIHN5c19zY2hlZF9nZXRwYXJhbSAqLwogICAg IGNhc2UgMTU1OgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hl LCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAg aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5z aXplX2ludCkpCi0JcmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3X3Jl YWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAmdG1wdWxvbmdl c3QpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENP UkVfQUREUikgdG1wdWxvbmdlc3QsIHRkZXAtPnNpemVfaW50KSkKKyAgICAg ICAgcmV0dXJuIC0xOwogICAgICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c19z Y2hlZF9zZXRzY2hlZHVsZXIgKi8KQEAgLTEyOTEsOSArMTYwMywxMCBAQCBy ZWNvcmRfbGludXhfc3lzdGVtX2NhbGwgKGludCBudW0sIHN0cnVjCiAgICAg Y2FzZSAxNjE6CiAgICAgICAvKiBzeXNfbmFub3NsZWVwICovCiAgICAgY2Fz ZSAxNjI6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRk ZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAo cmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVf dGltZXNwZWMpKQotCXJldHVybiAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19y ZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgJnRtcHVsb25n ZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChD T1JFX0FERFIpIHRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV90aW1lc3BlYykpCisgICAgICAg IHJldHVybiAtMTsKICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNfbXJl bWFwICovCkBAIC0xMzA0LDE1ICsxNjE3LDE3IEBAIHJlY29yZF9saW51eF9z eXN0ZW1fY2FsbCAoaW50IG51bSwgc3RydWMKIAogICAgICAgLyogc3lzX2dl dHJlc3VpZDE2ICovCiAgICAgY2FzZSAxNjU6Ci0gICAgICByZWdjYWNoZV9y YXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzEsIChnZGJfYnl0ZSAqKSAm IHRtcHUzMik7Ci0gICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVt ICh0bXB1MzIsIHRkZXAtPnNpemVfb2xkX3VpZF90KSkKLQlyZXR1cm4gLTE7 Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFy ZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAocmVjb3Jk X2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfb2xkX3Vp ZF90KSkKLQlyZXR1cm4gLTE7Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAo cmVnY2FjaGUsIHRkZXAtPmFyZzMsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7 Ci0gICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIs IHRkZXAtPnNpemVfb2xkX3VpZF90KSkKLQlyZXR1cm4gLTE7CisgICAgICBy ZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFy ZzEsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlz dF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfb2xkX3Vp ZF90KSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3 X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAmdG1wdWxv bmdlc3QpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAo KENPUkVfQUREUikgdG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX29sZF91aWRfdCkpCisgICAg ICAgIHJldHVybiAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2ln bmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywgJnRtcHVsb25nZXN0KTsKKyAg ICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIp IHRtcHVsb25nZXN0LCB0ZGVwLT5zaXplX29sZF91aWRfdCkpCisgICAgICAg IHJldHVybiAtMTsKICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNfdm04 NiAqLwpAQCAtMTMyMywzMiArMTYzOCwzMiBAQCByZWNvcmRfbGludXhfc3lz dGVtX2NhbGwgKGludCBudW0sIHN0cnVjCiAKICAgICAgIC8qIHN5c19wb2xs ICovCiAgICAgY2FzZSAxNjg6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAo cmVnY2FjaGUsIHRkZXAtPmFyZzEsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7 Ci0gICAgICBpZiAodG1wdTMyKQotCXsKLQkgIHVpbnQzMl90IG5mZHM7Ci0J ICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsCi0J CQkgICAgIChnZGJfYnl0ZSAqKSAmIG5mZHMpOwotCSAgaWYgKHJlY29yZF9h cmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX3BvbGxmZCAq IG5mZHMpKQotCSAgICByZXR1cm4gLTE7Ci0JfQorICAgICAgcmVnY2FjaGVf cmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcxLCAmdG1w dWxvbmdlc3QpOworICAgICAgaWYgKHRtcHVsb25nZXN0KQorICAgICAgICB7 CisgICAgICAgICAgVUxPTkdFU1QgbmZkczsKKyAgICAgICAgICByZWdjYWNo ZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsICZu ZmRzKTsKKyAgICAgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVt ICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX3BvbGxmZCAqIG5m ZHMpKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CiAgICAg ICBicmVhazsKIAogICAgICAgLyogc3lzX25mc3NlcnZjdGwgKi8KICAgICBj YXNlIDE2OToKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwg dGRlcC0+YXJnMSwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlm ICh0bXB1MzIgPT0gNyB8fCB0bXB1MzIgPT0gOCkKLQl7Ci0JICB1aW50MzJf dCByc2l6ZTsKLQkgIGlmICh0bXB1MzIgPT0gNykKLQkgICAgcnNpemUgPSB0 ZGVwLT5zaXplX05GU19GSFNJWkU7Ci0JICBlbHNlCi0JICAgIHJzaXplID0g dGRlcC0+c2l6ZV9rbmZzZF9maDsKLQkgIHJlZ2NhY2hlX3Jhd19yZWFkIChy ZWdjYWNoZSwgdGRlcC0+YXJnMywKLQkJCSAgICAgKGdkYl9ieXRlICopICYg dG1wdTMyKTsKLQkgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRt cHUzMiwgcnNpemUpKQotCSAgICByZXR1cm4gLTE7Ci0JfQorICAgICAgcmVn Y2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcx LCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHRtcHVsb25nZXN0ID09IDcg fHwgdG1wdWxvbmdlc3QgPT0gOCkKKyAgICAgICAgeworICAgICAgICAgIGlu dCByc2l6ZTsKKyAgICAgICAgICBpZiAodG1wdWxvbmdlc3QgPT0gNykKKyAg ICAgICAgICAgIHJzaXplID0gdGRlcC0+c2l6ZV9ORlNfRkhTSVpFOworICAg ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJzaXplID0gdGRlcC0+c2l6ZV9r bmZzZF9maDsKKyAgICAgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25l ZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZ0bXB1bG9uZ2VzdCk7CisgICAgICAgICAg aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1w dWxvbmdlc3QsIHJzaXplKSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAg ICAgICAgfQogICAgICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c19zZXRyZXNn aWQxNiAqLwpAQCAtMTM1NywzNSArMTY3Miw0MCBAQCByZWNvcmRfbGludXhf c3lzdGVtX2NhbGwgKGludCBudW0sIHN0cnVjCiAKICAgICAgIC8qIHN5c19n ZXRyZXNnaWQxNiAqLwogICAgIGNhc2UgMTcxOgotICAgICAgcmVnY2FjaGVf cmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcxLCAoZ2RiX2J5dGUgKikg JiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21l bSAodG1wdTMyLCB0ZGVwLT5zaXplX29sZF9naWRfdCkpCi0JcmV0dXJuIC0x OwotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5h cmcyLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX29sZF9n aWRfdCkpCi0JcmV0dXJuIC0xOwotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQg KHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIp OwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMy LCB0ZGVwLT5zaXplX29sZF9naWRfdCkpCi0JcmV0dXJuIC0xOworICAgICAg cmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5h cmcxLCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xp c3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3QsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX29sZF9n aWRfdCkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jh d19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgJnRtcHVs b25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0g KChDT1JFX0FERFIpIHRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9vbGRfZ2lkX3QpKQorICAg ICAgICByZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNp Z25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsICZ0bXB1bG9uZ2VzdCk7Cisg ICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERS KSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRkZXAtPnNpemVfb2xkX2dpZF90KSkKKyAgICAgICAgcmV0dXJu IC0xOwogICAgICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c19wcmN0bCAqLwog ICAgIGNhc2UgMTcyOgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2Nh Y2hlLCB0ZGVwLT5hcmcxLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAg ICAgc3dpdGNoICh0bXB1MzIpCi0JewotCWNhc2UgMjoKLQkgIHJlZ2NhY2hl X3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwKLQkJCSAgICAgKGdk Yl9ieXRlICopICYgdG1wdTMyKTsKLQkgIGlmIChyZWNvcmRfYXJjaF9saXN0 X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9pbnQpKQotCSAgICByZXR1 cm4gLTE7Ci0JICBicmVhazsKLQljYXNlIDE2OgotCSAgcmVnY2FjaGVfcmF3 X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLAotCQkJICAgICAoZ2RiX2J5 dGUgKikgJiB0bXB1MzIpOwotCSAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRk X21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX1RBU0tfQ09NTV9MRU4pKQotCSAg ICByZXR1cm4gLTE7Ci0JICBicmVhazsKLQl9CisgICAgICByZWdjYWNoZV9y YXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzEsICZ0bXB1 bG9uZ2VzdCk7CisgICAgICBzd2l0Y2ggKHRtcHVsb25nZXN0KQorICAgICAg ICB7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICByZWdjYWNoZV9yYXdf cmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0bXB1bG9uZ2VzdCk7 CisgICAgICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENP UkVfQUREUikgdG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9pbnQpKQorICAgICAgICAg ICAgcmV0dXJuIC0xOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl IDE2OgorICAgICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChy ZWdjYWNoZSwgdGRlcC0+YXJnMiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJnRtcHVsb25nZXN0KTsKKyAgICAgICAgICBpZiAo cmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9u Z2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0ZGVwLT5zaXplX1RBU0tfQ09NTV9MRU4pKQorICAgICAgICAgICAgcmV0 dXJuIC0xOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICBi cmVhazsKIAogICAgICAgLyogc3lzX3J0X3NpZ3JldHVybiAqLwpAQCAtMTM5 NCwzNiArMTcxNCwzOSBAQCByZWNvcmRfbGludXhfc3lzdGVtX2NhbGwgKGlu dCBudW0sIHN0cnVjCiAKICAgICAgIC8qIHN5c19ydF9zaWdhY3Rpb24gKi8K ICAgICBjYXNlIDE3NDoKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdj YWNoZSwgdGRlcC0+YXJnMywgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAg ICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRl cC0+c2l6ZV9zaWdhY3Rpb24pKQotCXJldHVybiAtMTsKKyAgICAgIHJlZ2Nh Y2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywg JnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2Fk ZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9zaWdhY3Rpb24p KQorICAgICAgICByZXR1cm4gLTE7CiAgICAgICBicmVhazsKIAogICAgICAg Lyogc3lzX3J0X3NpZ3Byb2NtYXNrICovCiAgICAgY2FzZSAxNzU6Ci0gICAg ICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsIChn ZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAocmVjb3JkX2FyY2hf bGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfc2lnc2V0X3QpKQot CXJldHVybiAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVk IChyZWdjYWNoZSwgdGRlcC0+YXJnMywgJnRtcHVsb25nZXN0KTsKKyAgICAg IGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRt cHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdGRlcC0+c2l6ZV9zaWdzZXRfdCkpCisgICAgICAgIHJldHVybiAtMTsK ICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNfcnRfc2lncGVuZGluZyAq LwogICAgIGNhc2UgMTc2OgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJl Z2NhY2hlLCB0ZGVwLT5hcmcxLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwot ICAgICAgaWYgKHRtcHUzMikKLQl7Ci0JICB1aW50MzJfdCBzaWdzZXRzaXpl OwotCSAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcy LAotCQkJICAgICAoZ2RiX2J5dGUgKikgJiBzaWdzZXRzaXplKTsKLQkgIGlm IChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgc2lnc2V0c2l6 ZSkpCi0JICAgIHJldHVybiAtMTsKLQl9CisgICAgICByZWdjYWNoZV9yYXdf cmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzEsICZ0bXB1bG9u Z2VzdCk7CisgICAgICBpZiAodG1wdWxvbmdlc3QpCisgICAgICAgIHsKKyAg ICAgICAgICBVTE9OR0VTVCBzaWdzZXRzaXplOworICAgICAgICAgIHJlZ2Nh Y2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwm c2lnc2V0c2l6ZSk7CisgICAgICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3Rf YWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3QsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkgc2lnc2V0c2l6 ZSkpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KICAgICAg IGJyZWFrOwogCiAgICAgICAvKiBzeXNfcnRfc2lndGltZWR3YWl0ICovCiAg ICAgY2FzZSAxNzc6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2Fj aGUsIHRkZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAg ICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAt PnNpemVfc2lnaW5mb190KSkKLQlyZXR1cm4gLTE7CisgICAgICByZWdjYWNo ZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsICZ0 bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRf bWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfc2lnaW5mb190KSkK KyAgICAgICAgcmV0dXJuIC0xOwogICAgICAgYnJlYWs7CiAKICAgICAgIC8q IHN5c19ydF9zaWdxdWV1ZWluZm8gKi8KQEAgLTE0MzQsMTUgKzE3NTcsMTQg QEAgcmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxsIChpbnQgbnVtLCBzdHJ1Ywog CiAgICAgICAvKiBzeXNfcHJlYWQ2NCAqLwogICAgIGNhc2UgMTgwOgotICAg ICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAo Z2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYgKHRtcHUzMikKLQl7 Ci0JICB1aW50MzJfdCBjb3VudDsKLQkgIHJlZ2NhY2hlX3Jhd19yZWFkIChy ZWdjYWNoZSwgdGRlcC0+YXJnMywKLQkJCSAgICAgKGdkYl9ieXRlICopICYg Y291bnQpOwotCSAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1w dTMyLCBjb3VudCkpCi0JICAgIHJldHVybiAtMTsKLQl9CisgICAgICByZWdj YWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIs ICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAodG1wdWxvbmdlc3QpCisgICAg ICAgIHsKKyAgICAgICAgICBVTE9OR0VTVCBjb3VudDsKKyAgICAgICAgICBy ZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFy ZzMsJmNvdW50KTsKKyAgICAgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9h ZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwgKGludCkgY291bnQp KQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CiAgICAgICBi cmVhazsKIAogICAgICAgLyogc3lzX3B3cml0ZTY0ICovCkBAIC0xNDUzLDIy ICsxNzc1LDIyIEBAIHJlY29yZF9saW51eF9zeXN0ZW1fY2FsbCAoaW50IG51 bSwgc3RydWMKIAogICAgICAgLyogc3lzX2dldGN3ZCAqLwogICAgIGNhc2Ug MTgzOgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVw LT5hcmcxLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYgKHRt cHUzMikKLQl7Ci0JICB1aW50MzJfdCBzaXplOwotCSAgcmVnY2FjaGVfcmF3 X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLAotCQkJICAgICAoZ2RiX2J5 dGUgKikgJiBzaXplKTsKLQkgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9t ZW0gKHRtcHUzMiwgc2l6ZSkpCi0JICAgIHJldHVybiAtMTsKLQl9CisgICAg ICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAt PmFyZzEsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAodG1wdWxvbmdlc3Qp CisgICAgICAgIHsKKyAgICAgICAgICBVTE9OR0VTVCBzaXplOworICAgICAg ICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRl cC0+YXJnMiwgJnNpemUpOworICAgICAgICAgIGlmIChyZWNvcmRfYXJjaF9s aXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LCAoaW50KSBz aXplKSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQogICAg ICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c19jYXBnZXQgKi8KICAgICBjYXNl IDE4NDoKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRl cC0+YXJnMiwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChy ZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9j YXBfdXNlcl9kYXRhX3QpKQotCXJldHVybiAtMTsKKyAgICAgIHJlZ2NhY2hl X3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgJnRt cHVsb25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9t ZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9jYXBfdXNlcl9kYXRh X3QpKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgICBicmVhazsKIAogICAg ICAgLyogc3lzX2NhcHNldCAqLwpAQCAtMTQ3NywxNiArMTc5OSwxOCBAQCBy ZWNvcmRfbGludXhfc3lzdGVtX2NhbGwgKGludCBudW0sIHN0cnVjCiAKICAg ICAgIC8qIHN5c19zaWdhbHRzdGFjayAqLwogICAgIGNhc2UgMTg2OgotICAg ICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAo Z2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX3N0YWNrX3QpKQot CXJldHVybiAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVk IChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgJnRtcHVsb25nZXN0KTsKKyAgICAg IGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRt cHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdGRlcC0+c2l6ZV9zdGFja190KSkKKyAgICAgICAgcmV0dXJuIC0xOwog ICAgICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c19zZW5kZmlsZSAqLwogICAg IGNhc2UgMTg3OgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hl LCB0ZGVwLT5hcmczLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAg aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5z aXplX29mZl90KSkKLQlyZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9yYXdf cmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsICZ0bXB1bG9u Z2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgo Q09SRV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfb2ZmX3QpKQorICAgICAgICBy ZXR1cm4gLTE7CiAgICAgICBicmVhazsKIAogICAgICAgLyogc3lzX25pX3N5 c2NhbGwgKi8KQEAgLTE0OTksOSArMTgyMywxMCBAQCByZWNvcmRfbGludXhf c3lzdGVtX2NhbGwgKGludCBudW0sIHN0cnVjCiAKICAgICAgIC8qIHN5c19n ZXRybGltaXQgKi8KICAgICBjYXNlIDE5MToKLSAgICAgIHJlZ2NhY2hlX3Jh d19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRlICopICYg dG1wdTMyKTsKLSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0g KHRtcHUzMiwgdGRlcC0+c2l6ZV9ybGltaXQpKQotCXJldHVybiAtMTsKKyAg ICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRl cC0+YXJnMiwgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9y bGltaXQpKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgICBicmVhazsKIAog ICAgICAgLyogc3lzX21tYXAyICovCkBAIC0xNTIwLDkgKzE4NDUsMTAgQEAg cmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxsIChpbnQgbnVtLCBzdHJ1YwogICAg IGNhc2UgMTk2OgogICAgICAgLyogc3lzX2ZzdGF0NjQgKi8KICAgICBjYXNl IDE5NzoKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRl cC0+YXJnMiwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChy ZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9z dGF0NjQpKQotCXJldHVybiAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFk X3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgJnRtcHVsb25nZXN0 KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JF X0FERFIpIHRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdGRlcC0+c2l6ZV9zdGF0NjQpKQorICAgICAgICByZXR1 cm4gLTE7CiAgICAgICBicmVhazsKIAogICAgICAgLyogc3lzX2xjaG93biAq LwpAQCAtMTU0MywxNiArMTg2OSwxNiBAQCByZWNvcmRfbGludXhfc3lzdGVt X2NhbGwgKGludCBudW0sIHN0cnVjCiAKICAgICAgIC8qIHN5c19nZXRncm91 cHMgKi8KICAgICBjYXNlIDIwNToKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFk IChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRlICopICYgdG1wdTMy KTsKLSAgICAgIGlmICh0bXB1MzIpCi0JewotCSAgaW50IGdpZHNldHNpemU7 Ci0JICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzEs Ci0JCQkgICAgIChnZGJfYnl0ZSAqKSAmIGdpZHNldHNpemUpOwotCSAgaWYg KHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbQotCSAgICAgICh0bXB1MzIsIHRk ZXAtPnNpemVfZ2lkX3QgKiBnaWRzZXRzaXplKSkKLQkgICAgcmV0dXJuIC0x OwotCX0KKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdj YWNoZSwgdGRlcC0+YXJnMiwgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmICh0 bXB1bG9uZ2VzdCkKKyAgICAgICAgeworICAgICAgICAgIFVMT05HRVNUIGdp ZHNldHNpemU7CisgICAgICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWdu ZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcxLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmZ2lkc2V0c2l6ZSk7CisgICAgICAgICAg aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1w dWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGRlcC0+c2l6ZV9naWRfdCAqIChpbnQpIGdpZHNldHNpemUpKQor ICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CiAgICAgICBicmVh azsKIAogICAgICAgLyogc3lzX3NldGdyb3VwcyAqLwpAQCAtMTU2NSwxNSAr MTg5MSwxNSBAQCByZWNvcmRfbGludXhfc3lzdGVtX2NhbGwgKGludCBudW0s IHN0cnVjCiAKICAgICAgIC8qIHN5c19nZXRyZXN1aWQgKi8KICAgICBjYXNl IDIwOToKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRl cC0+YXJnMSwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChy ZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV91 aWRfdCkpCi0JcmV0dXJuIC0xOwotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQg KHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIp OwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMy LCB0ZGVwLT5zaXplX3VpZF90KSkKLQlyZXR1cm4gLTE7Ci0gICAgICByZWdj YWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsIChnZGJfYnl0 ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9h ZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfdWlkX3QpKQotCXJldHVybiAt MTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNo ZSwgdGRlcC0+YXJnMSwgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChyZWNv cmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0 LCB0ZGVwLT5zaXplX3VpZF90KSkKKyAgICAgICAgcmV0dXJuIC0xOworICAg ICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVw LT5hcmcyLCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3QsIHRkZXAt PnNpemVfdWlkX3QpKQorICAgICAgICByZXR1cm4gLTE7CisgICAgICByZWdj YWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMs ICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9h ZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwgdGRlcC0+c2l6ZV91 aWRfdCkpCisgICAgICAgIHJldHVybiAtMTsKICAgICAgIGJyZWFrOwogCiAg ICAgICAvKiBzeXNfc2V0cmVzZ2lkICovCkBAIC0xNTgyLDE1ICsxOTA4LDE1 IEBAIHJlY29yZF9saW51eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwgc3RydWMK IAogICAgICAgLyogc3lzX2dldHJlc2dpZCAqLwogICAgIGNhc2UgMjExOgot ICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcx LCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9h cmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX2dpZF90KSkK LQlyZXR1cm4gLTE7Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2Fj aGUsIHRkZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAg ICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAt PnNpemVfZ2lkX3QpKQotCXJldHVybiAtMTsKLSAgICAgIHJlZ2NhY2hlX3Jh d19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywgKGdkYl9ieXRlICopICYg dG1wdTMyKTsKLSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0g KHRtcHUzMiwgdGRlcC0+c2l6ZV9naWRfdCkpCi0JcmV0dXJuIC0xOworICAg ICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVw LT5hcmcxLCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3QsIHRkZXAt PnNpemVfZ2lkX3QpKQorICAgICAgICByZXR1cm4gLTE7CisgICAgICByZWdj YWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIs ICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9h ZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwgdGRlcC0+c2l6ZV9n aWRfdCkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jh d19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywgJnRtcHVs b25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0g KChDT1JFX0FERFIpIHRtcHVsb25nZXN0LCB0ZGVwLT5zaXplX2dpZF90KSkK KyAgICAgICAgcmV0dXJuIC0xOwogICAgICAgYnJlYWs7CiAKICAgICAgIC8q IHN5c19jaG93biAqLwpAQCAtMTYwOSw5ICsxOTM1LDEwIEBAIHJlY29yZF9s aW51eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwgc3RydWMKIAogICAgICAgLyog c3lzX21pbmNvcmUgKi8KICAgICBjYXNlIDIxODoKLSAgICAgIHJlZ2NhY2hl X3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywgKGdkYl9ieXRlICop ICYgdG1wdTMyKTsKLSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9t ZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9QQUdFX1NJWkUpKQotCXJldHVybiAt MTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNo ZSwgdGRlcC0+YXJnMywgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChyZWNv cmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+ c2l6ZV9QQUdFX1NJWkUpKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgICBi cmVhazsKIAogICAgICAgLyogc3lzX21hZHZpc2UgKi8KQEAgLTE2MjEsMzAg KzE5NDgsMzIgQEAgcmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxsIChpbnQgbnVt LCBzdHJ1YwogICAgICAgLyogc3lzX2dldGRlbnRzNjQgKi8KICAgICBjYXNl IDIyMDoKICAgICAgIHsKLQl1aW50MzJfdCBjb3VudDsKLQlyZWdjYWNoZV9y YXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsCi0JCQkgICAoZ2RiX2J5 dGUgKikgJiB0bXB1MzIpOwotCXJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNo ZSwgdGRlcC0+YXJnMywgKGdkYl9ieXRlICopICYgY291bnQpOwotCWlmIChy ZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9k aXJlbnQ2NCAqIGNvdW50KSkKLQkgIHJldHVybiAtMTsKKyAgICAgICAgVUxP TkdFU1QgY291bnQ7CisgICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2ln bmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZ0bXB1bG9uZ2VzdCk7CisgICAgICAgIHJl Z2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJn MywgJmNvdW50KTsKKyAgICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRk X21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3QsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfZGlyZW50NjQg KiBjb3VudCkpCisgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgfQogICAg ICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c19mY250bDY0ICovCiAgICAgY2Fz ZSAyMjE6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRk ZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAo dG1wdTMyID09IHRkZXAtPmZjbnRsX0ZfR0VUTEs2NCkKKyAgICAgIHJlZ2Nh Y2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwg JnRtcHVsb25nZXN0KTsKKyAgICAgIGlmICh0bXB1bG9uZ2VzdCA9PSB0ZGVw LT5mY250bF9GX0dFVExLNjQpCiAgICAgICAgIHsKLQkgIHJlZ2NhY2hlX3Jh d19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywKLQkJCSAgICAgKGdkYl9i eXRlICopICYgdG1wdTMyKTsKLQkgIGlmIChyZWNvcmRfYXJjaF9saXN0X2Fk ZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9mbG9jazY0KSkKLQkgICAgcmV0 dXJuIC0xOwotCX0KLSAgICAgIGVsc2UgaWYgKHRtcHUzMiAhPSB0ZGVwLT5m Y250bF9GX1NFVExLNjQKLQkgICAgICAgJiYgdG1wdTMyICE9IHRkZXAtPmZj bnRsX0ZfU0VUTEtXNjQpCisgICAgICAgICAgcmVnY2FjaGVfcmF3X3JlYWRf dW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmdG1wdWxvbmdlc3QpOworICAg ICAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FE RFIpIHRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRkZXAtPnNpemVfZmxvY2s2NCkpCisgICAgICAgICAg ICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKHRtcHVs b25nZXN0ICE9IHRkZXAtPmZjbnRsX0ZfU0VUTEs2NAorICAgICAgICAgICAg ICAgJiYgdG1wdWxvbmdlc3QgIT0gdGRlcC0+ZmNudGxfRl9TRVRMS1c2NCkK ICAgICAgICAgewotCSAgZ290byBzeXNfZmNudGw7Ci0JfQorICAgICAgICAg IGdvdG8gc3lzX2ZjbnRsOworICAgICAgICB9CiAgICAgICBicmVhazsKIAog ICAgICAgLyogc3lzX25pX3N5c2NhbGwgKi8KQEAgLTE2NjksMTUgKzE5OTgs MTQgQEAgcmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxsIChpbnQgbnVtLCBzdHJ1 YwogICAgIGNhc2UgMjMwOgogICAgICAgLyogc3lzX2ZnZXR4YXR0ciAqLwog ICAgIGNhc2UgMjMxOgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2Nh Y2hlLCB0ZGVwLT5hcmczLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAg ICAgaWYgKHRtcHUzMikKLQl7Ci0JICB1aW50MzJfdCBzaXplOwotCSAgcmVn Y2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmc0LAotCQkJICAg ICAoZ2RiX2J5dGUgKikgJiBzaXplKTsKLQkgIGlmIChyZWNvcmRfYXJjaF9s aXN0X2FkZF9tZW0gKHRtcHUzMiwgc2l6ZSkpCi0JICAgIHJldHVybiAtMTsK LQl9CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2Fj aGUsIHRkZXAtPmFyZzMsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAodG1w dWxvbmdlc3QpCisgICAgICAgIHsKKyAgICAgICAgICBVTE9OR0VTVCBzaXpl OworICAgICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdj YWNoZSwgdGRlcC0+YXJnNCwgJnNpemUpOworICAgICAgICAgIGlmIChyZWNv cmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0 LCAoaW50KSBzaXplKSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAg ICAgfQogICAgICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c19saXN0eGF0dHIg Ki8KQEAgLTE2ODYsMTUgKzIwMTQsMTQgQEAgcmVjb3JkX2xpbnV4X3N5c3Rl bV9jYWxsIChpbnQgbnVtLCBzdHJ1YwogICAgIGNhc2UgMjMzOgogICAgICAg Lyogc3lzX2ZsaXN0eGF0dHIgKi8KICAgICBjYXNlIDIzNDoKLSAgICAgIHJl Z2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9i eXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmICh0bXB1MzIpCi0JewotCSAg dWludDMyX3Qgc2l6ZTsKLQkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNo ZSwgdGRlcC0+YXJnMywKLQkJCSAgICAgKGdkYl9ieXRlICopICYgc2l6ZSk7 Ci0JICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHNp emUpKQotCSAgICByZXR1cm4gLTE7Ci0JfQorICAgICAgcmVnY2FjaGVfcmF3 X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAmdG1wdWxv bmdlc3QpOworICAgICAgaWYgKHRtcHVsb25nZXN0KQorICAgICAgICB7Cisg ICAgICAgICAgVUxPTkdFU1Qgc2l6ZTsKKyAgICAgICAgICByZWdjYWNoZV9y YXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsICZzaXpl KTsKKyAgICAgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgo Q09SRV9BRERSKSB0bXB1bG9uZ2VzdCwgKGludCkgc2l6ZSkpCisgICAgICAg ICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KICAgICAgIGJyZWFrOwogCiAg ICAgICAvKiBzeXNfcmVtb3ZleGF0dHIgKi8KQEAgLTE3MDksOSArMjAzNiwx MCBAQCByZWNvcmRfbGludXhfc3lzdGVtX2NhbGwgKGludCBudW0sIHN0cnVj CiAKICAgICAgIC8qIHN5c19zZW5kZmlsZTY0ICovCiAgICAgY2FzZSAyMzk6 Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFy ZzMsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAocmVjb3Jk X2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfbG9mZl90 KSkKLQlyZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNp Z25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsICZ0bXB1bG9uZ2VzdCk7Cisg ICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERS KSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRkZXAtPnNpemVfbG9mZl90KSkKKyAgICAgICAgcmV0dXJuIC0x OwogICAgICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c19mdXRleCAqLwpAQCAt MTcyMiwzNSArMjA1MCwzNiBAQCByZWNvcmRfbGludXhfc3lzdGVtX2NhbGwg KGludCBudW0sIHN0cnVjCiAKICAgICAgIC8qIHN5c19zY2hlZF9nZXRhZmZp bml0eSAqLwogICAgIGNhc2UgMjQyOgotICAgICAgcmVnY2FjaGVfcmF3X3Jl YWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAoZ2RiX2J5dGUgKikgJiB0bXB1 MzIpOwotICAgICAgaWYgKHRtcHUzMikKLQl7Ci0JICB1aW50MzJfdCBsZW47 Ci0JICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIs IChnZGJfYnl0ZSAqKSAmIGxlbik7Ci0JICBpZiAocmVjb3JkX2FyY2hfbGlz dF9hZGRfbWVtICh0bXB1MzIsIGxlbikpCi0JICAgIHJldHVybiAtMTsKLQl9 CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUs IHRkZXAtPmFyZzMsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAodG1wdWxv bmdlc3QpCisgICAgICAgIHsKKyAgICAgICAgICBVTE9OR0VTVCBsZW47Cisg ICAgICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hl LCB0ZGVwLT5hcmcyLCAmbGVuKTsKKyAgICAgICAgICBpZiAocmVjb3JkX2Fy Y2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwgKGlu dCkgbGVuKSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQog ICAgICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c19zZXRfdGhyZWFkX2FyZWEg Ki8KICAgICBjYXNlIDI0MzoKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChy ZWdjYWNoZSwgdGRlcC0+YXJnMSwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsK LSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwg dGRlcC0+c2l6ZV9pbnQpKQotCXJldHVybiAtMTsKKyAgICAgIHJlZ2NhY2hl X3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMSwgJnRt cHVsb25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9t ZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LCB0ZGVwLT5zaXplX2ludCkp CisgICAgICAgIHJldHVybiAtMTsKICAgICAgIGJyZWFrOwogCiAgICAgICAv KiBzeXNfZ2V0X3RocmVhZF9hcmVhICovCiAgICAgY2FzZSAyNDQ6Ci0gICAg ICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzEsIChn ZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAocmVjb3JkX2FyY2hf bGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfdXNlcl9kZXNjKSkK LQlyZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25l ZCAocmVnY2FjaGUsIHRkZXAtPmFyZzEsICZ0bXB1bG9uZ2VzdCk7CisgICAg ICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0 bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRkZXAtPnNpemVfdXNlcl9kZXNjKSkKKyAgICAgICAgcmV0dXJuIC0x OwogICAgICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c19pb19zZXR1cCAqLwog ICAgIGNhc2UgMjQ1OgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2Nh Y2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAg ICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVw LT5zaXplX2xvbmcpKQotCXJldHVybiAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jh d19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgJnRtcHVs b25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0g KChDT1JFX0FERFIpIHRtcHVsb25nZXN0LCB0ZGVwLT5zaXplX2xvbmcpKQor ICAgICAgICByZXR1cm4gLTE7CiAgICAgICBicmVhazsKIAogICAgICAgLyog c3lzX2lvX2Rlc3Ryb3kgKi8KQEAgLTE3NTksNDkgKzIwODgsNTcgQEAgcmVj b3JkX2xpbnV4X3N5c3RlbV9jYWxsIChpbnQgbnVtLCBzdHJ1YwogCiAgICAg ICAvKiBzeXNfaW9fZ2V0ZXZlbnRzICovCiAgICAgY2FzZSAyNDc6Ci0gICAg ICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzQsIChn ZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAodG1wdTMyKQotCXsK LQkgIGludDMyX3QgbnI7Ci0JICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2Fj aGUsIHRkZXAtPmFyZzMsIChnZGJfYnl0ZSAqKSAmIG5yKTsKLQkgIGlmIChy ZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgbnIgKiB0ZGVwLT5z aXplX2lvX2V2ZW50KSkKLQkgICAgcmV0dXJuIC0xOwotCX0KKyAgICAgIHJl Z2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJn NCwgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmICh0bXB1bG9uZ2VzdCkKKyAg ICAgICAgeworICAgICAgICAgIFVMT05HRVNUIG5yOworICAgICAgICAgIHJl Z2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJn MywgJm5yKTsKKyAgICAgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRf bWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBuciAqIHRkZXAtPnNpemVfaW9f ZXZlbnQpKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CiAg ICAgICBicmVhazsKIAogICAgICAgLyogc3lzX2lvX3N1Ym1pdCAqLwogICAg IGNhc2UgMjQ4OgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hl LCB0ZGVwLT5hcmczLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAg aWYgKHRtcHUzMikKLQl7Ci0JICBpbnQzMl90IGksIG5yOwotCSAgdWludDMy X3QgKmlvY2JwOwotCSAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0 ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikgJiBucik7Ci0JICBpb2NicCA9ICh1 aW50MzJfdCAqKSBhbGxvY2EgKG5yICogdGRlcC0+c2l6ZV9pbnQpOwotCSAg aWYgKHRhcmdldF9yZWFkX21lbW9yeQotCSAgICAgICh0bXB1MzIsIChnZGJf Ynl0ZSAqKSBpb2NicCwgbnIgKiB0ZGVwLT5zaXplX2ludCkpCi0JICAgIHsK LQkgICAgICBpZiAocmVjb3JkX2RlYnVnKQotCQlmcHJpbnRmX3VuZmlsdGVy ZWQgKGdkYl9zdGRsb2csCi0JCQkJICAgICJQcm9jZXNzIHJlY29yZDogZXJy b3IgcmVhZGluZyBtZW1vcnkgIgotCQkJCSAgICAiYXQgYWRkciA9ICVzIGxl biA9ICV1LlxuIiwKLQkJCQkgICAgcGFkZHJlc3MgKGdkYmFyY2gsIHRtcHUz MiksCi0JCQkJICAgIChpbnQpKG5yICogdGRlcC0+c2l6ZV9pbnQpKTsKLQkg ICAgICByZXR1cm4gLTE7Ci0JICAgIH0KLQkgIGZvciAoaSA9IDA7IGkgPCBu cjsgaSsrKQotCSAgICB7Ci0JICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3Rf YWRkX21lbSAoaW9jYnBbaV0sIHRkZXAtPnNpemVfaW9jYikpCi0JCXJldHVy biAtMTsKLQkgICAgfQotCX0KKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vu c2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywgJnRtcHVsb25nZXN0KTsK KyAgICAgIGlmICh0bXB1bG9uZ2VzdCkKKyAgICAgICAgeworICAgICAgICAg IFVMT05HRVNUIG5yLCBpOworICAgICAgICAgIGdkYl9ieXRlICppb2NicDsK KworICAgICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdj YWNoZSwgdGRlcC0+YXJnMiwgJm5yKTsKKyAgICAgICAgICBpb2NicCA9IGFs bG9jYSAobnIgKiB0ZGVwLT5zaXplX3BvaW50ZXIpOworICAgICAgICAgIGlm ICh0YXJnZXRfcmVhZF9tZW1vcnkgKChDT1JFX0FERFIpIHRtcHVsb25nZXN0 LCBpb2NicCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu ciAqIHRkZXAtPnNpemVfcG9pbnRlcikpCisgICAgICAgICAgICB7CisgICAg ICAgICAgICAgIGlmIChyZWNvcmRfZGVidWcpCisgICAgICAgICAgICAgICAg ZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIlByb2Nlc3MgcmVjb3JkOiBlcnJv ciByZWFkaW5nIG1lbW9yeSAiCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiYXQgYWRkciA9IDB4JXMgbGVuID0gJXUuXG4iLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1VUUFVUX1JFRyAo dG1wdWxvbmdlc3QsIHRkZXAtPmFyZzIpLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGludCkgKG5yICogdGRlcC0+c2l6ZV9wb2lu dGVyKSk7CisgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykKKyAgICAg ICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3Rf YWRkX21lbQorICAgICAgICAgICAgICAgICAgICAoKENPUkVfQUREUikgZXh0 cmFjdF91bnNpZ25lZF9pbnRlZ2VyIChpb2NicCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dGRlcC0+c2l6ZV9wb2ludGVyLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlX29yZGVy KSwKKyAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfaW9jYikpCisg ICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICBpb2Ni cCArPSB0ZGVwLT5zaXplX3BvaW50ZXI7CisgICAgICAgICAgICB9CisgICAg ICAgIH0KICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNfaW9fY2FuY2Vs ICovCiAgICAgY2FzZSAyNDk6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAo cmVnY2FjaGUsIHRkZXAtPmFyZzMsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7 Ci0gICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIs IHRkZXAtPnNpemVfaW9fZXZlbnQpKQotCXJldHVybiAtMTsKKyAgICAgIHJl Z2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJn MywgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0 X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9pb19ldmVu dCkpCisgICAgICAgIHJldHVybiAtMTsKICAgICAgIGJyZWFrOwogCiAgICAg ICAvKiBzeXNfZmFkdmlzZTY0ICovCkBAIC0xODEzLDI4ICsyMTUwLDI4IEBA IHJlY29yZF9saW51eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwgc3RydWMKICAg ICAgIC8qIHN5c19leGl0X2dyb3VwICovCiAgICAgY2FzZSAyNTI6CiAgICAg ICB7Ci0JaW50IHE7Ci0JdGFyZ2V0X3Rlcm1pbmFsX291cnMgKCk7Ci0JcSA9 Ci0JICB5cXVlcnkgKF8oIlRoZSBuZXh0IGluc3RydWN0aW9uIGlzIHN5c2Nh bGwgZXhpdF9ncm91cC4gICIKLQkJICAgICJJdCB3aWxsIG1ha2UgdGhlIHBy b2dyYW0gZXhpdC4gICIKLQkJICAgICJEbyB5b3Ugd2FudCB0byBzdG9wIHRo ZSBwcm9ncmFtPyIpKTsKLQl0YXJnZXRfdGVybWluYWxfaW5mZXJpb3IgKCk7 Ci0JaWYgKHEpCi0JICByZXR1cm4gMTsKKyAgICAgICAgaW50IHE7CisgICAg ICAgIHRhcmdldF90ZXJtaW5hbF9vdXJzICgpOworICAgICAgICBxID0KKyAg ICAgICAgICB5cXVlcnkgKF8oIlRoZSBuZXh0IGluc3RydWN0aW9uIGlzIHN5 c2NhbGwgZXhpdF9ncm91cC4gICIKKyAgICAgICAgICAgICAgICAgICAgIkl0 IHdpbGwgbWFrZSB0aGUgcHJvZ3JhbSBleGl0LiAgIgorICAgICAgICAgICAg ICAgICAgICAiRG8geW91IHdhbnQgdG8gc3RvcCB0aGUgcHJvZ3JhbT8iKSk7 CisgICAgICAgIHRhcmdldF90ZXJtaW5hbF9pbmZlcmlvciAoKTsKKyAgICAg ICAgaWYgKHEpCisgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICB9CiAgICAg ICBicmVhazsKIAogICAgICAgLyogc3lzX2xvb2t1cF9kY29va2llICovCiAg ICAgY2FzZSAyNTM6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2Fj aGUsIHRkZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAg ICBpZiAodG1wdTMyKQotCXsKLQkgIHVpbnQzMl90IGxlbjsKLQkgIHJlZ2Nh Y2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywgKGdkYl9ieXRl ICopICYgbGVuKTsKLQkgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0g KHRtcHUzMiwgbGVuKSkKLQkgICAgcmV0dXJuIC0xOwotCX0KKyAgICAgIHJl Z2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJn MiwgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmICh0bXB1bG9uZ2VzdCkKKyAg ICAgICAgeworICAgICAgICAgIFVMT05HRVNUIGxlbjsKKyAgICAgICAgICBy ZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFy ZzMsICZsZW4pOworICAgICAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2Fk ZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LCAoaW50KSBsZW4pKQor ICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CiAgICAgICBicmVh azsKIAogICAgICAgLyogc3lzX2Vwb2xsX2NyZWF0ZSAqLwpAQCAtMTg0NSwx NiArMjE4MiwxNSBAQCByZWNvcmRfbGludXhfc3lzdGVtX2NhbGwgKGludCBu dW0sIHN0cnVjCiAKICAgICAgIC8qIHN5c19lcG9sbF93YWl0ICovCiAgICAg Y2FzZSAyNTY6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUs IHRkZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBp ZiAodG1wdTMyKQotCXsKLQkgIGludDMyX3QgbWF4ZXZlbnRzOwotCSAgcmVn Y2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLAotCQkJICAg ICAoZ2RiX2J5dGUgKikgJiBtYXhldmVudHMpOwotCSAgaWYgKHJlY29yZF9h cmNoX2xpc3RfYWRkX21lbQotCSAgICAgICh0bXB1MzIsIG1heGV2ZW50cyAq IHRkZXAtPnNpemVfZXBvbGxfZXZlbnQpKQotCSAgICByZXR1cm4gLTE7Ci0J fQorICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hl LCB0ZGVwLT5hcmcyLCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHRtcHVs b25nZXN0KQorICAgICAgICB7CisgICAgICAgICAgVUxPTkdFU1QgbWF4ZXZl bnRzOworICAgICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChy ZWdjYWNoZSwgdGRlcC0+YXJnMywgJm1heGV2ZW50cyk7CisgICAgICAgICAg aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1w dWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbWF4ZXZlbnRzICogdGRlcC0+c2l6ZV9lcG9sbF9ldmVudCkpCisg ICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KICAgICAgIGJyZWFr OwogCiAgICAgICAvKiBzeXNfcmVtYXBfZmlsZV9wYWdlcyAqLwpAQCAtMTg2 NSwyMyArMjIwMSwyNSBAQCByZWNvcmRfbGludXhfc3lzdGVtX2NhbGwgKGlu dCBudW0sIHN0cnVjCiAKICAgICAgIC8qIHN5c190aW1lcl9jcmVhdGUgKi8K ICAgICBjYXNlIDI1OToKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdj YWNoZSwgdGRlcC0+YXJnMywgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAg ICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRl cC0+c2l6ZV9pbnQpKQotCXJldHVybiAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jh d19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywgJnRtcHVs b25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0g KChDT1JFX0FERFIpIHRtcHVsb25nZXN0LCB0ZGVwLT5zaXplX2ludCkpCisg ICAgICAgIHJldHVybiAtMTsKICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBz eXNfdGltZXJfc2V0dGltZSAqLwogICAgIGNhc2UgMjYwOgotICAgICAgcmVn Y2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmc0LCAoZ2RiX2J5 dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3Rf YWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX2l0aW1lcnNwZWMpKQotCXJl dHVybiAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChy ZWdjYWNoZSwgdGRlcC0+YXJnNCwgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlm IChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVs b25nZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dGRlcC0+c2l6ZV9pdGltZXJzcGVjKSkKKyAgICAgICAgcmV0dXJuIC0xOwog ICAgICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c190aW1lcl9nZXR0aW1lICov CiAgICAgY2FzZSAyNjE6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVn Y2FjaGUsIHRkZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0g ICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRk ZXAtPnNpemVfaXRpbWVyc3BlYykpCi0JcmV0dXJuIC0xOworICAgICAgcmVn Y2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcy LCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3Rf YWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3QsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX2l0aW1lcnNw ZWMpKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgICBicmVhazsKIAogICAg ICAgLyogc3lzX3RpbWVyX2dldG92ZXJydW4gKi8KQEAgLTE4OTQsMzIgKzIy MzIsMzYgQEAgcmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxsIChpbnQgbnVtLCBz dHJ1YwogCiAgICAgICAvKiBzeXNfY2xvY2tfZ2V0dGltZSAqLwogICAgIGNh c2UgMjY1OgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0 ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYg KHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXpl X3RpbWVzcGVjKSkKLQlyZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9yYXdf cmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsICZ0bXB1bG9u Z2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgo Q09SRV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfdGltZXNwZWMpKQorICAgICAg ICByZXR1cm4gLTE7CiAgICAgICBicmVhazsKIAogICAgICAgLyogc3lzX2Ns b2NrX2dldHJlcyAqLwogICAgIGNhc2UgMjY2OgotICAgICAgcmVnY2FjaGVf cmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikg JiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21l bSAodG1wdTMyLCB0ZGVwLT5zaXplX3RpbWVzcGVjKSkKLQlyZXR1cm4gLTE7 CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUs IHRkZXAtPmFyZzIsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3Jk X2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNp emVfdGltZXNwZWMpKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgICBicmVh azsKIAogICAgICAgLyogc3lzX2Nsb2NrX25hbm9zbGVlcCAqLwogICAgIGNh c2UgMjY3OgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0 ZGVwLT5hcmc0LCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYg KHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXpl X3RpbWVzcGVjKSkKLQlyZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9yYXdf cmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzQsICZ0bXB1bG9u Z2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgo Q09SRV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfdGltZXNwZWMpKQorICAgICAg ICByZXR1cm4gLTE7CiAgICAgICBicmVhazsKIAogICAgICAgLyogc3lzX3N0 YXRmczY0ICovCiAgICAgY2FzZSAyNjg6CiAgICAgICAvKiBzeXNfZnN0YXRm czY0ICovCiAgICAgY2FzZSAyNjk6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVh ZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsIChnZGJfYnl0ZSAqKSAmIHRtcHUz Mik7Ci0gICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1 MzIsIHRkZXAtPnNpemVfc3RhdGZzNjQpKQotCXJldHVybiAtMTsKKyAgICAg IHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+ YXJnMywgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9s aXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9zdGF0 ZnM2NCkpCisgICAgICAgIHJldHVybiAtMTsKICAgICAgIGJyZWFrOwogCiAg ICAgICAvKiBzeXNfdGdraWxsICovCkBAIC0xOTM2LDE4ICsyMjc4LDE4IEBA IHJlY29yZF9saW51eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwgc3RydWMKIAog ICAgICAgLyogc3lzX2dldF9tZW1wb2xpY3kgKi8KICAgICBjYXNlIDI3NToK LSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJn MSwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChyZWNvcmRf YXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9pbnQpKQot CXJldHVybiAtMTsKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNo ZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAg IGlmICh0bXB1MzIpCi0JewotCSAgdWludDMyX3QgbWF4bm9kZTsKLQkgIHJl Z2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywKLQkJCSAg ICAgKGdkYl9ieXRlICopICYgbWF4bm9kZSk7Ci0JICBpZiAocmVjb3JkX2Fy Y2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIG1heG5vZGUgKiB0ZGVwLT5zaXpl X2xvbmcpKQotCSAgICByZXR1cm4gLTE7Ci0JfQorICAgICAgcmVnY2FjaGVf cmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcxLCAmdG1w dWxvbmdlc3QpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21l bSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3QsIHRkZXAtPnNpemVfaW50KSkK KyAgICAgICAgcmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRf dW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAmdG1wdWxvbmdlc3Qp OworICAgICAgaWYgKHRtcHVsb25nZXN0KQorICAgICAgICB7CisgICAgICAg ICAgVUxPTkdFU1QgbWF4bm9kZTsKKyAgICAgICAgICByZWdjYWNoZV9yYXdf cmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsICZtYXhub2Rl KTsKKyAgICAgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgo Q09SRV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBtYXhub2RlICogdGRlcC0+c2l6ZV9sb25n KSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQogICAgICAg YnJlYWs7CiAKICAgICAgIC8qIHN5c19zZXRfbWVtcG9saWN5ICovCkBAIC0x OTYyLDE4ICsyMzA0LDE4IEBAIHJlY29yZF9saW51eF9zeXN0ZW1fY2FsbCAo aW50IG51bSwgc3RydWMKIAogICAgICAgLyogc3lzX21xX3RpbWVkcmVjZWl2 ZSAqLwogICAgIGNhc2UgMjgwOgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQg KHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIp OwotICAgICAgaWYgKHRtcHUzMikKLQl7Ci0JICB1aW50MzJfdCBtc2dfbGVu OwotCSAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcz LAotCQkJICAgICAoZ2RiX2J5dGUgKikgJiBtc2dfbGVuKTsKLQkgIGlmIChy ZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgbXNnX2xlbikpCi0J ICAgIHJldHVybiAtMTsKLQl9Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAo cmVnY2FjaGUsIHRkZXAtPmFyZzQsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7 Ci0gICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIs IHRkZXAtPnNpemVfaW50KSkKLQlyZXR1cm4gLTE7CisgICAgICByZWdjYWNo ZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsICZ0 bXB1bG9uZ2VzdCk7CisgICAgICBpZiAodG1wdWxvbmdlc3QpCisgICAgICAg IHsKKyAgICAgICAgICBVTE9OR0VTVCBtc2dfbGVuOworICAgICAgICAgIHJl Z2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJn MywgJm1zZ19sZW4pOworICAgICAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0 X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpIG1zZ19sZW4p KQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICBy ZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFy ZzQsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlz dF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwgdGRlcC0+c2l6 ZV9pbnQpKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgICBicmVhazsKIAog ICAgICAgLyogc3lzX21xX25vdGlmeSAqLwpAQCAtMTk4Miw5ICsyMzI0LDEw IEBAIHJlY29yZF9saW51eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwgc3RydWMK IAogICAgICAgLyogc3lzX21xX2dldHNldGF0dHIgKi8KICAgICBjYXNlIDI4 MjoKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+ YXJnMywgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChyZWNv cmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9tcV9h dHRyKSkKLQlyZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91 bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsICZ0bXB1bG9uZ2VzdCk7 CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9B RERSKSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRkZXAtPnNpemVfbXFfYXR0cikpCisgICAgICAgIHJldHVy biAtMTsKICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNfa2V4ZWNfbG9h ZCAqLwpAQCAtMTk5MywxMiArMjMzNiwxNCBAQCByZWNvcmRfbGludXhfc3lz dGVtX2NhbGwgKGludCBudW0sIHN0cnVjCiAKICAgICAgIC8qIHN5c193YWl0 aWQgKi8KICAgICBjYXNlIDI4NDoKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFk IChyZWdjYWNoZSwgdGRlcC0+YXJnMywgKGdkYl9ieXRlICopICYgdG1wdTMy KTsKLSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUz MiwgdGRlcC0+c2l6ZV9zaWdpbmZvKSkKLQlyZXR1cm4gLTE7Ci0gICAgICBy ZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzUsIChnZGJf Ynl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAocmVjb3JkX2FyY2hfbGlz dF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfcnVzYWdlKSkKLQlyZXR1 cm4gLTE7CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVn Y2FjaGUsIHRkZXAtPmFyZzMsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAo cmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9u Z2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRk ZXAtPnNpemVfc2lnaW5mbykpCisgICAgICAgIHJldHVybiAtMTsKKyAgICAg IHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+ YXJnNSwgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9s aXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9ydXNh Z2UpKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgICBicmVhazsKIAogICAg ICAgLyogc3lzX25pX3N5c2NhbGwgKi8KQEAgLTIwMTEsMjAgKzIzNTYsMjAg QEAgcmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxsIChpbnQgbnVtLCBzdHJ1Ywog CiAgICAgICAvKiBzeXNfa2V5Y3RsICovCiAgICAgY2FzZSAyODg6Ci0gICAg ICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzEsIChn ZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAodG1wdTMyID09IDYg fHwgdG1wdTMyID09IDExKQotCXsKLQkgIHJlZ2NhY2hlX3Jhd19yZWFkIChy ZWdjYWNoZSwgdGRlcC0+YXJnMywKLQkJCSAgICAgKGdkYl9ieXRlICopICYg dG1wdTMyKTsKLQkgIGlmICh0bXB1MzIpCi0JICAgIHsKLQkgICAgICB1aW50 MzJfdCBidWZsZW47Ci0JICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2Nh Y2hlLCB0ZGVwLT5hcmc0LAotCQkJCSAoZ2RiX2J5dGUgKikgJiBidWZsZW4p OwotCSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUz MiwgYnVmbGVuKSkKLQkJcmV0dXJuIC0xOwotCSAgICB9Ci0JfQorICAgICAg cmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5h cmcxLCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHRtcHVsb25nZXN0ID09 IDYgfHwgdG1wdWxvbmdlc3QgPT0gMTEpCisgICAgICAgIHsKKyAgICAgICAg ICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAt PmFyZzMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZ0bXB1bG9uZ2VzdCk7CisgICAgICAgICAgaWYgKHRtcHVsb25nZXN0KQor ICAgICAgICAgICAgeworICAgICAgICAgICAgICBVTE9OR0VTVCBidWZsZW47 CisgICAgICAgICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChy ZWdjYWNoZSwgdGRlcC0+YXJnNCwgJmJ1Zmxlbik7CisgICAgICAgICAgICAg IGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRt cHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoaW50KSBidWZsZW4pKQorICAgICAgICAgICAgICAgIHJl dHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgYnJl YWs7CiAKICAgICAgIC8qIHN5c19pb3ByaW9fc2V0ICovCkBAIC0yMDUzLDkg KzIzOTgsMTAgQEAgcmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxsIChpbnQgbnVt LCBzdHJ1YwogCiAgICAgICAvKiBzeXNfZnN0YXRhdDY0ICovCiAgICAgY2Fz ZSAzMDA6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRk ZXAtPmFyZzMsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAo cmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVf c3RhdDY0KSkKLQlyZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9yYXdfcmVh ZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsICZ0bXB1bG9uZ2Vz dCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09S RV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRkZXAtPnNpemVfc3RhdDY0KSkKKyAgICAgICAgcmV0 dXJuIC0xOwogICAgICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c191bmxpbmth dCAqLwpAQCAtMjA3MCwxNSArMjQxNiwxNCBAQCByZWNvcmRfbGludXhfc3lz dGVtX2NhbGwgKGludCBudW0sIHN0cnVjCiAKICAgICAgIC8qIHN5c19yZWFk bGlua2F0ICovCiAgICAgY2FzZSAzMDU6Ci0gICAgICByZWdjYWNoZV9yYXdf cmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsIChnZGJfYnl0ZSAqKSAmIHRt cHUzMik7Ci0gICAgICBpZiAodG1wdTMyKQotCXsKLQkgIGludDMyX3QgYnVm c2l6OwotCSAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5h cmc0LAotCQkJICAgICAoZ2RiX2J5dGUgKikgJiBidWZzaXopOwotCSAgaWYg KHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCBidWZzaXopKQot CSAgICByZXR1cm4gLTE7Ci0JfQorICAgICAgcmVnY2FjaGVfcmF3X3JlYWRf dW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAmdG1wdWxvbmdlc3Qp OworICAgICAgaWYgKHRtcHVsb25nZXN0KQorICAgICAgICB7CisgICAgICAg ICAgVUxPTkdFU1QgYnVmc2l6OworICAgICAgICAgIHJlZ2NhY2hlX3Jhd19y ZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnNCwgJmJ1ZnNpeik7 CisgICAgICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENP UkVfQUREUikgdG1wdWxvbmdlc3QsIChpbnQpIGJ1ZnNpeikpCisgICAgICAg ICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KICAgICAgIGJyZWFrOwogCiAg ICAgICAvKiBzeXNfZmNobW9kYXQgKi8KQEAgLTIwODksMzQgKzI0MzQsMzkg QEAgcmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxsIChpbnQgbnVtLCBzdHJ1Ywog CiAgICAgICAvKiBzeXNfcHNlbGVjdDYgKi8KICAgICBjYXNlIDMwODoKLSAg ICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwg KGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9mZF9zZXQpKQot CXJldHVybiAtMTsKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNo ZSwgdGRlcC0+YXJnMywgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAg IGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+ c2l6ZV9mZF9zZXQpKQotCXJldHVybiAtMTsKLSAgICAgIHJlZ2NhY2hlX3Jh d19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnNCwgKGdkYl9ieXRlICopICYg dG1wdTMyKTsKLSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0g KHRtcHUzMiwgdGRlcC0+c2l6ZV9mZF9zZXQpKQotCXJldHVybiAtMTsKLSAg ICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnNSwg KGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV90aW1lc3BlYykp Ci0JcmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWdu ZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAmdG1wdWxvbmdlc3QpOworICAg ICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikg dG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0ZGVwLT5zaXplX2ZkX3NldCkpCisgICAgICAgIHJldHVybiAtMTsK KyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwg dGRlcC0+YXJnMywgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRf YXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6 ZV9mZF9zZXQpKQorICAgICAgICByZXR1cm4gLTE7CisgICAgICByZWdjYWNo ZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzQsICZ0 bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRf bWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfZmRfc2V0KSkKKyAg ICAgICAgcmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5z aWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmc1LCAmdG1wdWxvbmdlc3QpOwor ICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQURE UikgdG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0ZGVwLT5zaXplX3RpbWVzcGVjKSkKKyAgICAgICAgcmV0dXJu IC0xOwogICAgICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c19wcG9sbCAqLwog ICAgIGNhc2UgMzA5OgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2Nh Y2hlLCB0ZGVwLT5hcmcxLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAg ICAgaWYgKHRtcHUzMikKLQl7Ci0JICB1aW50MzJfdCBuZmRzOwotCSAgcmVn Y2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLAotCQkJICAg ICAoZ2RiX2J5dGUgKikgJiBuZmRzKTsKLQkgIGlmIChyZWNvcmRfYXJjaF9s aXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9wb2xsZmQgKiBuZmRz KSkKLQkgICAgcmV0dXJuIC0xOwotCX0KLSAgICAgIHJlZ2NhY2hlX3Jhd19y ZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywgKGdkYl9ieXRlICopICYgdG1w dTMyKTsKLSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRt cHUzMiwgdGRlcC0+c2l6ZV90aW1lc3BlYykpCi0JcmV0dXJuIC0xOworICAg ICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVw LT5hcmcxLCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHRtcHVsb25nZXN0 KQorICAgICAgICB7CisgICAgICAgICAgVUxPTkdFU1QgbmZkczsKKyAgICAg ICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRk ZXAtPmFyZzIsICZuZmRzKTsKKyAgICAgICAgICBpZiAocmVjb3JkX2FyY2hf bGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXpl X3BvbGxmZCAqIG5mZHMpKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAg ICAgICB9CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVn Y2FjaGUsIHRkZXAtPmFyZzMsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAo cmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9u Z2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRk ZXAtPnNpemVfdGltZXNwZWMpKQorICAgICAgICByZXR1cm4gLTE7CiAgICAg ICBicmVhazsKIAogICAgICAgLyogc3lzX3Vuc2hhcmUgKi8KQEAgLTIxMjcs MjIgKzI0NzcsMjQgQEAgcmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxsIChpbnQg bnVtLCBzdHJ1YwogCiAgICAgICAvKiBzeXNfZ2V0X3JvYnVzdF9saXN0ICov CiAgICAgY2FzZSAzMTI6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVn Y2FjaGUsIHRkZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0g ICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRk ZXAtPnNpemVfaW50KSkKLQlyZXR1cm4gLTE7Ci0gICAgICByZWdjYWNoZV9y YXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsIChnZGJfYnl0ZSAqKSAm IHRtcHUzMik7Ci0gICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVt ICh0bXB1MzIsIHRkZXAtPnNpemVfaW50KSkKLQlyZXR1cm4gLTE7CisgICAg ICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAt PmFyZzIsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hf bGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwgdGRlcC0+ c2l6ZV9pbnQpKQorICAgICAgICByZXR1cm4gLTE7CisgICAgICByZWdjYWNo ZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsICZ0 bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRf bWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwgdGRlcC0+c2l6ZV9pbnQp KQorICAgICAgICByZXR1cm4gLTE7CiAgICAgICBicmVhazsKIAogICAgICAg Lyogc3lzX3NwbGljZSAqLwogICAgIGNhc2UgMzEzOgotICAgICAgcmVnY2Fj aGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUg KikgJiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRk X21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX2xvZmZfdCkpCi0JcmV0dXJuIC0x OwotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5h cmc0LCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX2xvZmZf dCkpCi0JcmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5z aWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAmdG1wdWxvbmdlc3QpOwor ICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQURE UikgdG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0ZGVwLT5zaXplX2xvZmZfdCkpCisgICAgICAgIHJldHVybiAt MTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNo ZSwgdGRlcC0+YXJnNCwgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChyZWNv cmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+ c2l6ZV9sb2ZmX3QpKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgICBicmVh azsKIAogICAgICAgLyogc3lzX3N5bmNfZmlsZV9yYW5nZSAqLwpAQCAtMjE1 NSw0OCArMjUwNyw0NyBAQCByZWNvcmRfbGludXhfc3lzdGVtX2NhbGwgKGlu dCBudW0sIHN0cnVjCiAKICAgICAgIC8qIHN5c19tb3ZlX3BhZ2VzICovCiAg ICAgY2FzZSAzMTc6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2Fj aGUsIHRkZXAtPmFyZzUsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAg ICBpZiAodG1wdTMyKQotCXsKLQkgIHVpbnQzMl90IG5yX3BhZ2VzOwotCSAg cmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLAotCQkJ ICAgICAoZ2RiX2J5dGUgKikgJiBucl9wYWdlcyk7Ci0JICBpZiAocmVjb3Jk X2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIG5yX3BhZ2VzICogdGRlcC0+ c2l6ZV9pbnQpKQotCSAgICByZXR1cm4gLTE7Ci0JfQorICAgICAgcmVnY2Fj aGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmc1LCAm dG1wdWxvbmdlc3QpOworICAgICAgaWYgKHRtcHVsb25nZXN0KQorICAgICAg ICB7CisgICAgICAgICAgVUxPTkdFU1QgbnJfcGFnZXM7CisgICAgICAgICAg cmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5h cmcyLCAmbnJfcGFnZXMpOworICAgICAgICAgIGlmIChyZWNvcmRfYXJjaF9s aXN0X2FkZF9tZW0gKChDT1JFX0FERFIpIHRtcHVsb25nZXN0LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5yX3BhZ2VzICog dGRlcC0+c2l6ZV9pbnQpKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAg ICAgICB9CiAgICAgICBicmVhazsKIAogICAgICAgLyogc3lzX2dldGNwdSAq LwogICAgIGNhc2UgMzE4OgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJl Z2NhY2hlLCB0ZGVwLT5hcmcxLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwot ICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0 ZGVwLT5zaXplX2ludCkpCi0JcmV0dXJuIC0xOwotICAgICAgcmVnY2FjaGVf cmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikg JiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21l bSAodG1wdTMyLCB0ZGVwLT5zaXplX2ludCkpCi0JcmV0dXJuIC0xOwotICAg ICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAo Z2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX3Vsb25nICogMikp Ci0JcmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWdu ZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcxLCAmdG1wdWxvbmdlc3QpOworICAg ICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikg dG1wdWxvbmdlc3QsIHRkZXAtPnNpemVfaW50KSkKKyAgICAgICAgcmV0dXJu IC0xOworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2Nh Y2hlLCB0ZGVwLT5hcmcyLCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHJl Y29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdl c3QsIHRkZXAtPnNpemVfaW50KSkKKyAgICAgICAgcmV0dXJuIC0xOworICAg ICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVw LT5hcmczLCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX21lbSAoKENPUkVfQUREUikgdG1wdWxvbmdlc3QsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX3Vs b25nICogMikpCisgICAgICAgIHJldHVybiAtMTsKICAgICAgIGJyZWFrOwog CiAgICAgICAvKiBzeXNfZXBvbGxfcHdhaXQgKi8KICAgICBjYXNlIDMxOToK LSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJn MiwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmICh0bXB1MzIp Ci0JewotCSAgaW50MzJfdCBtYXhldmVudHM7Ci0JICByZWdjYWNoZV9yYXdf cmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsCi0JCQkgICAgIChnZGJfYnl0 ZSAqKSAmIG1heGV2ZW50cyk7Ci0JICBpZiAocmVjb3JkX2FyY2hfbGlzdF9h ZGRfbWVtCi0JICAgICAgKHRtcHUzMiwgbWF4ZXZlbnRzICogdGRlcC0+c2l6 ZV9lcG9sbF9ldmVudCkpCi0JICAgIHJldHVybiAtMTsKLQl9CisgICAgICBy ZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFy ZzIsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAodG1wdWxvbmdlc3QpCisg ICAgICAgIHsKKyAgICAgICAgICBVTE9OR0VTVCBtYXhldmVudHM7CisgICAg ICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0 ZGVwLT5hcmczLCAmbWF4ZXZlbnRzKTsKKyAgICAgICAgICBpZiAocmVjb3Jk X2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKSB0bXB1bG9uZ2VzdCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50 KSBtYXhldmVudHMgKiB0ZGVwLT5zaXplX2Vwb2xsX2V2ZW50KSkKKyAgICAg ICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQogICAgICAgYnJlYWs7CiAK ICAgICBkZWZhdWx0OgogICAgICAgcHJpbnRmX3VuZmlsdGVyZWQgKF8oIlBy b2Nlc3MgcmVjb3JkIGFuZCByZXBsYXkgdGFyZ2V0IGRvZXNuJ3QgIgotCQkJ ICAgInN1cHBvcnQgc3lzY2FsbCBudW1iZXIgJXVcbiIpLAotCQkJIChpbnQp dG1wdTMyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdXBwb3J0 IHN5c2NhbGwgbnVtYmVyICV1XG4iKSwgbnVtKTsKICAgICAgIHJldHVybiAt MTsKICAgICAgIGJyZWFrOwogICAgIH0KLS0tIGEvbGludXgtcmVjb3JkLmgK KysrIGIvbGludXgtcmVjb3JkLmgKQEAgLTIzLDYgKzIzLDcgQEAKIHN0cnVj dCBsaW51eF9yZWNvcmRfdGRlcAogewogICAvKiBUaGUgc2l6ZSBvZiB0aGUg dHlwZSB0aGF0IHdpbGwgYmUgdXNlZCBpbiBhIHN5c3RlbSBjYWxsLiAgKi8K KyAgaW50IHNpemVfcG9pbnRlcjsKICAgaW50IHNpemVfX29sZF9rZXJuZWxf c3RhdDsKICAgaW50IHNpemVfdG1zOwogICBpbnQgc2l6ZV9sb2ZmX3Q7CkBA IC04MSw3ICs4Miw2IEBAIHN0cnVjdCBsaW51eF9yZWNvcmRfdGRlcAogICBp bnQgc2l6ZV9pdGltZXJzcGVjOwogICBpbnQgc2l6ZV9tcV9hdHRyOwogICBp bnQgc2l6ZV9zaWdpbmZvOwotCiAgIGludCBzaXplX3Rlcm1pb3M7CiAgIGlu dCBzaXplX3Rlcm1pb3MyOwogICBpbnQgc2l6ZV9waWRfdDsKQEAgLTg5LDYg Kzg5LDggQEAgc3RydWN0IGxpbnV4X3JlY29yZF90ZGVwCiAgIGludCBzaXpl X3NlcmlhbF9zdHJ1Y3Q7CiAgIGludCBzaXplX3NlcmlhbF9pY291bnRlcl9z dHJ1Y3Q7CiAgIGludCBzaXplX2hheWVzX2VzcF9jb25maWc7CisgIGludCBz aXplX3NpemVfdDsKKyAgaW50IHNpemVfaW92ZWM7CiAKICAgLyogVGhlIHZh bHVlcyBvZiB0aGUgc2Vjb25kIGFyZ3VtZW50IG9mIHN5c3RlbSBjYWxsICJz eXNfaW9jdGwiLiAgKi8KICAgaW50IGlvY3RsX1RDR0VUUzsKQEAgLTE3MSw2 ICsxNzMsNyBAQCBzdHJ1Y3QgbGludXhfcmVjb3JkX3RkZXAKICAgaW50IGFy ZzM7CiAgIGludCBhcmc0OwogICBpbnQgYXJnNTsKKyAgaW50IGFyZzY7CiB9 OwogCiBleHRlcm4gaW50IHJlY29yZF9saW51eF9zeXN0ZW1fY2FsbCAoaW50 IG51bSwgc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwK --000e0cd2de14e355a2046ee2d839--