From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 2843 invoked by alias); 12 May 2003 15:26:03 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 2713 invoked by uid 71); 12 May 2003 15:26:02 -0000 Resent-Date: 12 May 2003 15:26:02 -0000 Resent-Message-ID: <20030512152602.2711.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, enrio@online.no Received: (qmail 15065 invoked by uid 48); 12 May 2003 15:22:38 -0000 Message-Id: <20030512152238.15063.qmail@sources.redhat.com> Date: Mon, 12 May 2003 15:26:00 -0000 From: enrio@online.no Reply-To: enrio@online.no To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: optimization/10752: -O2 generates loop assembly instruction with label too far away X-SW-Source: 2003-05/txt/msg01236.txt.bz2 List-Id: >Number: 10752 >Category: optimization >Synopsis: -O2 generates loop assembly instruction with label too far away >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Mon May 12 15:26:01 UTC 2003 >Closed-Date: >Last-Modified: >Originator: Enrique Perez-Terron >Release: unknown-1.0 >Organization: >Environment: AMD-K6(tm) 3D processor stepping 0c/VIA chipset motherboard Redhat 9.0 fresh install. gcc version 3.2.2 20030222 (Red Hat Linux 3.2.2-5) Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-checking --with-system-zlib --enable-__cxa_atexit --host=i386-redhat-linux Thread model: posix >Description: Compiling Redhat 9.0's standard kernel-source rpm, file drivers/net/sk98lin/skgepnmi.c produces message {standard input}: Assembler messages: {standard input}:10554: Error: value of -141 too large for field of 1 bytes at 27023 The message refers to an assembly instruction "loop .L1827" where the label .L1827 occurs more than 128 bytes earlier in the instruction stream. This does not happen if -O2 is replaced with -O. It also does not happen if -O2 is used but the other compiler flags are removed. >How-To-Repeat: Included file attachment is the output of gcc -E with other flags the same. Save as skgepnmi.i and compile with gcc -O2 -fno-strict-aliasing -fno-common -fomit-frame-pointer -pipe -mpreferred-stack-boundary=2 -march=k6 -c skgepnmi.c Here I paste a script that I used to verify my own steps. #!/bin/bash # #Just in case the environment variables have something to do with this, # I have done "export > script". Edit to suit your needs. if [ "$HOME" != "" ] then exec env --ignore-environment /bin/bash "$0" "$@" echo "Exec failed!?!?!?" fi declare -x BASH_ENV="/root/.bashrc" declare -x DISPLAY=":0.0" declare -x G_BROKEN_FILENAMES="1" declare -x HISTSIZE="1000" declare -x HOME="/root" declare -x HOSTNAME="arabia.home.lan" declare -x INPUTRC="/etc/inputrc" declare -x LANG="en_US.UTF-8" declare -x LESSOPEN="|/usr/bin/lesspipe.sh %s" declare -x LOGNAME="root" declare -x LS_COLORS="no=00:fi=00:di=00;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=00;32:*.cmd=00;32:*.exe=00;32:*.com=00;32:*.btm=00;32:*.bat=00;32:*.sh=00;32:*.csh=00;32:*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.bz=00;31:*.tz=00;31:*.rpm=00;31:*.cpio=00;31:*.jpg=00;35:*.gif=00;35:*.bmp=00;35:*.xbm=00;35:*.xpm=00;35:*.png=00;35:*.tif=00;35:" declare -x MAIL="/var/spool/mail/root" declare -x OLDPWD="/usr/src/linux-2.4.20-8" declare -x PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin/X11:/usr/X11R6/bin:/root/bin" declare -x PWD="/usr/src/linux-2.4.20-8/drivers/net/sk98lin" declare -x QTDIR="/usr/lib/qt-3.1" declare -x SHELL="/bin/bash" declare -x SHLVL="1" declare -x SSH_ASKPASS="/usr/libexec/openssh/gnome-ssh-askpass" declare -x TERM="xterm" declare -x USER="root" declare -x USERNAME="root" declare -x XAUTHORITY="/root/.xauthRlyoLo" # So you can coordinate the output with the commands that produces it: set -x # These are the compiler flags in the outpu from 'make'. # Vertical stacking makes it easier to read. FLAGS=" -D__KERNEL__ -I/usr/src/linux-2.4.20-8/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common -fomit-frame-pointer -pipe -mpreferred-stack-boundary=2 -march=k6 -DMODULE -DMODVERSIONS -include /usr/src/linux-2.4.20-8/include/linux/modversions.h -I. -DSK_USE_CSUM -nostdinc -iwithprefix include -DKBUILD_BASENAME=skgepnmi" # This fails as follows: (I have added '# ' in front of the output lines.) gcc $FLAGS -c skgepnmi.c # {standard input}: Assembler messages: # {standard input}:10554: Error: value of -141 too large for field of 1 bytes at 27023 # So I try to get the assembly and look at it. # Substitute -S for -c gcc $FLAGS -S skgepnmi.c # and check that the error is still there gcc $FLAGS -c skgepnmi.s # {standard input}: Assembler messages: # {standard input}:10554: Error: value of -141 too large for field of 1 bytes at 27023 # and look at line 10554 of the resulting skgepnmi.s file. # It says "loop .L1876". The label .L1876 appears on line 10520. # It is hard for me to see if the intervening instructions really # occupy 141 bytes of memory. I tried later to assemble a modified version # and then disassemble it to see. # But first, produce a verion of the input file that I can send to you # with all #include files included gcc $FLAGS -E skgepnmi.c > skgepnmi.i # and check that the error is still there gcc $FLAGS -c skgepnmi.i # {standard input}: Assembler messages: # {standard input}:10554: Error: value of -141 too large for field of 1 bytes at 27023 # Now an experiment. What happens if we suppress the -O2 flag? FLAGS_NO_O2=`echo "$FLAGS" | sed -e 's/-O2$/-O/'` gcc $FLAGS_NO_O2 -c skgepnmi.c gcc $FLAGS_NO_O2 -c skgepnmi.i gcc $FLAGS_NO_O2 -S skgepnmi.i -o skgepnmi_no_O2.s gcc $FLAGS_NO_O2 -c skgepnmi_no_O2.s # No errors! # I first tried to remove -O2 alltogether (grep -v -e -O2) # But then it turns out that one of the headers have the following # code: #if !defined(__OPTIMIZE__) || !defined(__KERNEL__) #warning You must compile this file with the correct options! #warning See the last lines of the source file. #error You must compile this driver with "-O". #endif >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="skgepnmi.i" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="skgepnmi.i" IyAxICJza2dlcG5taS5jIgojIDEgIjxidWlsdC1pbj4iCiMgMSAiPGNvbW1hbmQgbGluZT4iCiMg MSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAx CgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHNldHZlci5o IiAxCiMgNCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9u cy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVz LzUzYzcwMC52ZXIiIDEKIyA1ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4 L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xp bnV4L21vZHVsZXMvODM5MC52ZXIiIDEKIyA2ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNs dWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9p bmNsdWRlL2xpbnV4L21vZHVsZXMvYWM5N19jb2RlYy52ZXIiIDEKIyA3ICIvdXNyL3NyYy9saW51 eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9s aW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvYWM5Ny52ZXIiIDEKIyA4ICIvdXNy L3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIv dXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvYWNpLnZlciIgMQoj IDkgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIg MgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxlcy9hY3Bp X2tzeW1zLnZlciIgMQojIDEwICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4 L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xp bnV4L21vZHVsZXMvYWQxODQ4LnZlciIgMQojIDExICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9p bmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAt OC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvYWRiLnZlciIgMQojIDEyICIvdXNyL3NyYy9saW51eC0y LjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51 eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvYWZfYXgyNS52ZXIiIDEKIyAxMyAiL3Vz ci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAi L3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL2FmX2lweC52ZXIi IDEKIyAxNCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9u cy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVz L2FmX25ldGxpbmsudmVyIiAxCiMgMTUgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUv bGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1 ZGUvbGludXgvbW9kdWxlcy9hZl9zcHgudmVyIiAxCiMgMTYgIi91c3Ivc3JjL2xpbnV4LTIuNC4y MC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIu NC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxlcy9hZnMudmVyIiAxCiMgMTcgIi91c3Ivc3JjL2xp bnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3Jj L2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxlcy9hZ3BnYXJ0X2JlLnZlciIgMQoj IDE4ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgi IDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvYWly b25ldDQ1MDBfY2FyZC52ZXIiIDEKIyAxOSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVk ZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5j bHVkZS9saW51eC9tb2R1bGVzL2Fpcm9uZXQ0NTAwX2NvcmUudmVyIiAxCiMgMjAgIi91c3Ivc3Jj L2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Iv c3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxlcy9haXJvLnZlciIgMQojIDIx ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIK IyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvYW1kNzkz MC52ZXIiIDEKIyAyMiAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2 ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9t b2R1bGVzL2FwbS52ZXIiIDEKIyAyMyAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9s aW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVk ZS9saW51eC9tb2R1bGVzL2FyY25ldC52ZXIiIDEKIyAyNCAiL3Vzci9zcmMvbGludXgtMi40LjIw LTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40 LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL2FybGFuLnZlciIgMQojIDI1ICIvdXNyL3NyYy9s aW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3Ny Yy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvYXJwX3RhYmxlcy52ZXIiIDEK IyAyNiAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5o IiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL2F0 YXJhaWQudmVyIiAxCiMgMjcgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgv bW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGlu dXgvbW9kdWxlcy9hdG1fbWlzYy52ZXIiIDEKIyAyOCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgv aW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIw LTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL2F0eWZiX2Jhc2UudmVyIiAxCiMgMjkgIi91c3Ivc3Jj L2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Iv c3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxlcy9hdTEwMDBfZ3Bpby52ZXIi IDEKIyAzMCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9u cy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVz L2F1ZGlvX3N5bXMudmVyIiAxCiMgMzEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUv bGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1 ZGUvbGludXgvbW9kdWxlcy9hdWRpby52ZXIiIDEKIyAzMiAiL3Vzci9zcmMvbGludXgtMi40LjIw LTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40 LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL2F1dG9faXJxLnZlciIgMQojIDMzICIvdXNyL3Ny Yy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNy L3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvYjFkbWEudmVyIiAxCiMg MzQgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIg MgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxlcy9iMXBj bWNpYS52ZXIiIDEKIyAzNSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9t b2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51 eC9tb2R1bGVzL2IxLnZlciIgMQojIDM2ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRl L2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNs dWRlL2xpbnV4L21vZHVsZXMvYmFzZS52ZXIiIDEKIyAzNyAiL3Vzci9zcmMvbGludXgtMi40LjIw LTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40 LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL2JiY19pMmMudmVyIiAxCiMgMzggIi91c3Ivc3Jj L2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Iv c3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxlcy9ibGtwZy52ZXIiIDEKIyAz OSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAy CiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL2JtX29z bC52ZXIiIDEKIyA0MCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2 ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9t b2R1bGVzL2Jvb3RsZHIudmVyIiAxCiMgNDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1 ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2lu Y2x1ZGUvbGludXgvbW9kdWxlcy9icGNrNi52ZXIiIDEKIyA0MiAiL3Vzci9zcmMvbGludXgtMi40 LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgt Mi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL2J0dHYtaWYudmVyIiAxCiMgNDMgIi91c3Iv c3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEgIi91 c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxlcy9idWZmZXIudmVyIiAx CiMgNDQgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMu aCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxlcy9i dXNtb3VzZS52ZXIiIDEKIyA0NSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51 eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9s aW51eC9tb2R1bGVzL2NhcGlmcy52ZXIiIDEKIyA0NiAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgv aW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIw LTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL2NhcGl1dGlsLnZlciIgMQojIDQ3ICIvdXNyL3NyYy9s aW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3Ny Yy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvY2Ryb20udmVyIiAxCiMgNDgg Ii91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIgMgoj IDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxlcy9jaGVjay52 ZXIiIDEKIyA0OSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJz aW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1 bGVzL2NoaXByZWcudmVyIiAxCiMgNTAgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUv bGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1 ZGUvbGludXgvbW9kdWxlcy9jbWRsaW5lLnZlciIgMQojIDUxICIvdXNyL3NyYy9saW51eC0yLjQu MjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0y LjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvY21wLnZlciIgMQojIDUyICIvdXNyL3NyYy9s aW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3Ny Yy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvY29tMjAwMjAudmVyIiAxCiMg NTMgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIg MgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxlcy9jb21t b24udmVyIiAxCiMgNTQgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9k dmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgv bW9kdWxlcy9jb214LnZlciIgMQojIDU1ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRl L2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNs dWRlL2xpbnV4L21vZHVsZXMvY29uZmlnLnZlciIgMQojIDU2ICIvdXNyL3NyYy9saW51eC0yLjQu MjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0y LjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvY29uc29sZS52ZXIiIDEKIyA1NyAiL3Vzci9z cmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vz ci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL2NvbnRleHQudmVyIiAx CiMgNTggIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMu aCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxlcy9j cGlhLnZlciIgMQojIDU5ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21v ZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4 L21vZHVsZXMvY3B1ZnJlcS52ZXIiIDEKIyA2MCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5j bHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgv aW5jbHVkZS9saW51eC9tb2R1bGVzL2NwdWlkLnZlciIgMQojIDYxICIvdXNyL3NyYy9saW51eC0y LjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51 eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvY3J5cHRvYXBpLnZlciIgMQojIDYyICIv dXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAx ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvY3MudmVyIiAx CiMgNjMgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMu aCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxlcy9j eWJlcjIwMDBmYi52ZXIiIDEKIyA2NCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9s aW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVk ZS9saW51eC9tb2R1bGVzL2N5Y3hfZHJ2LnZlciIgMQojIDY1ICIvdXNyL3NyYy9saW51eC0yLjQu MjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0y LjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvREFDOTYwLnZlciIgMQojIDY2ICIvdXNyL3Ny Yy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNy L3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvZGJyaS52ZXIiIDEKIyA2 NyAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAy CiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL2RjYWNo ZS52ZXIiIDEKIyA2OCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2 ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9t b2R1bGVzL2Rjb29raWVzLnZlciIgMQojIDY5ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNs dWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9p bmNsdWRlL2xpbnV4L21vZHVsZXMvZGRwLnZlciIgMQojIDcwICIvdXNyL3NyYy9saW51eC0yLjQu MjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0y LjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvZGVjX2FuZF9sb2NrLnZlciIgMQojIDcxICIv dXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAx ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvZGVmbGF0ZV9z eW1zLnZlciIgMQojIDcyICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21v ZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4 L21vZHVsZXMvRGl2YXNfbW9kLnZlciIgMQojIDczICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9p bmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAt OC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvZG1hc291bmRfY29yZS52ZXIiIDEKIyA3NCAiL3Vzci9z cmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vz ci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL2RtaV9zY2FuLnZlciIg MQojIDc1ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25z LmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMv ZHF1b3QudmVyIiAxCiMgNzYgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgv bW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGlu dXgvbW9kdWxlcy9kcy52ZXIiIDEKIyA3NyAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVk ZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5j bHVkZS9saW51eC9tb2R1bGVzL2VpY29uX21vZC52ZXIiIDEKIyA3OCAiL3Vzci9zcmMvbGludXgt Mi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGlu dXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL2V4ZWNfZG9tYWluLnZlciIgMQojIDc5 ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIK IyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvZmFzMjE2 LnZlciIgMQojIDgwICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZl cnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21v ZHVsZXMvZmF0ZnNfc3ltcy52ZXIiIDEKIyA4MSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5j bHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgv aW5jbHVkZS9saW51eC9tb2R1bGVzL2ZiY21hcC52ZXIiIDEKIyA4MiAiL3Vzci9zcmMvbGludXgt Mi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGlu dXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL2ZiY29uLWFmYi52ZXIiIDEKIyA4MyAi L3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMg MSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL2ZiY29uLWNm YjE2LnZlciIgMQojIDg0ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21v ZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4 L21vZHVsZXMvZmJjb24tY2ZiMjQudmVyIiAxCiMgODUgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04 L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4y MC04L2luY2x1ZGUvbGludXgvbW9kdWxlcy9mYmNvbi1jZmIyLnZlciIgMQojIDg2ICIvdXNyL3Ny Yy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNy L3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvZmJjb24tY2ZiMzIudmVy IiAxCiMgODcgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lv bnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxl cy9mYmNvbi1jZmI0LnZlciIgMQojIDg4ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRl L2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNs dWRlL2xpbnV4L21vZHVsZXMvZmJjb24tY2ZiOC52ZXIiIDEKIyA4OSAiL3Vzci9zcmMvbGludXgt Mi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGlu dXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL2ZiY29uLWhnYS52ZXIiIDEKIyA5MCAi L3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMg MSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL2ZiY29uLWls Ym0udmVyIiAxCiMgOTEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9k dmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgv bW9kdWxlcy9mYmNvbi1pcGxhbjJwMi52ZXIiIDEKIyA5MiAiL3Vzci9zcmMvbGludXgtMi40LjIw LTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40 LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL2ZiY29uLWlwbGFuMnA0LnZlciIgMQojIDkzICIv dXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAx ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvZmJjb24taXBs YW4ycDgudmVyIiAxCiMgOTQgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgv bW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGlu dXgvbW9kdWxlcy9mYmNvbi1tYWMudmVyIiAxCiMgOTUgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04 L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4y MC04L2luY2x1ZGUvbGludXgvbW9kdWxlcy9mYmNvbi1tZmIudmVyIiAxCiMgOTYgIi91c3Ivc3Jj L2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Iv c3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxlcy9mYmNvbi52ZXIiIDEKIyA5 NyAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAy CiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL2ZiY29u LXZnYS1wbGFuZXMudmVyIiAxCiMgOTggIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUv bGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1 ZGUvbGludXgvbW9kdWxlcy9mYmNvbi12Z2EudmVyIiAxCiMgOTkgIi91c3Ivc3JjL2xpbnV4LTIu NC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4 LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxlcy9mYmdlbi52ZXIiIDEKIyAxMDAgIi91c3Iv c3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEgIi91 c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxlcy9mYm1lbS52ZXIiIDEK IyAxMDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMu aCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxlcy9m Ym1vbi52ZXIiIDEKIyAxMDIgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgv bW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGlu dXgvbW9kdWxlcy9mY19zeW1zLnZlciIgMQojIDEwMyAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgv aW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIw LTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL2ZpbGVtYXAudmVyIiAxCiMgMTA0ICIvdXNyL3NyYy9s aW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3Ny Yy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvZmlsZXN5c3RlbXMudmVyIiAx CiMgMTA1ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25z LmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMv ZnRhcGVfc3ltcy52ZXIiIDEKIyAxMDYgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUv bGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1 ZGUvbGludXgvbW9kdWxlcy9nNDUwX3BsbC52ZXIiIDEKIyAxMDcgIi91c3Ivc3JjL2xpbnV4LTIu NC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4 LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxlcy9nYW1lcG9ydC52ZXIiIDEKIyAxMDggIi91 c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxlcy9nZW5lcmljX3Nl cmlhbC52ZXIiIDEKIyAxMDkgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgv bW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGlu dXgvbW9kdWxlcy9nZW5oZC52ZXIiIDEKIyAxMTAgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2lu Y2x1ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04 L2luY2x1ZGUvbGludXgvbW9kdWxlcy9nZW5fcHJvYmUudmVyIiAxCiMgMTExICIvdXNyL3NyYy9s aW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3Ny Yy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvaGNkLnZlciIgMQojIDExMiAi L3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMg MSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL2hkbGNkcnYu dmVyIiAxCiMgMTEzICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZl cnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21v ZHVsZXMvaGRsY19nZW5lcmljLnZlciIgMQojIDExNCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgv aW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIw LTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL2hlcm1lcy52ZXIiIDEKIyAxMTUgIi91c3Ivc3JjL2xp bnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3Jj L2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxlcy9oaWxfbWxjLnZlciIgMQojIDEx NiAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAy CiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL2hpc2F4 X2lzYWMudmVyIiAxCiMgMTE3ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4 L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xp bnV4L21vZHVsZXMvaHBfcHNhdXgudmVyIiAxCiMgMTE4ICIvdXNyL3NyYy9saW51eC0yLjQuMjAt OC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQu MjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvaHBfc2RjLnZlciIgMQojIDExOSAiL3Vzci9zcmMv bGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9z cmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL2kyYy1hbGdvLWJpdC52ZXIi IDEKIyAxMjAgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lv bnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxl cy9pMmMtYWxnby1pdGUudmVyIiAxCiMgMTIxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNs dWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9p bmNsdWRlL2xpbnV4L21vZHVsZXMvaTJjLWFsZ28tcGNmLnZlciIgMQojIDEyMiAiL3Vzci9zcmMv bGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9z cmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL2kyYy1jb3JlLnZlciIgMQoj IDEyMyAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5o IiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL2ky Yy1vbGQudmVyIiAxCiMgMTI0ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4 L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xp bnV4L21vZHVsZXMvaTJjLXByb2MudmVyIiAxCiMgMTI1ICIvdXNyL3NyYy9saW51eC0yLjQuMjAt OC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQu MjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvaTJvX2Jsb2NrLnZlciIgMQojIDEyNiAiL3Vzci9z cmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vz ci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL2kyb19jb25maWcudmVy IiAxCiMgMTI3ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNp b25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVs ZXMvaTJvX2NvcmUudmVyIiAxCiMgMTI4ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRl L2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNs dWRlL2xpbnV4L21vZHVsZXMvaTJvX2xhbi52ZXIiIDEKIyAxMjkgIi91c3Ivc3JjL2xpbnV4LTIu NC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4 LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxlcy9pMm9fcGNpLnZlciIgMQojIDEzMCAiL3Vz ci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAi L3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL2kyb19wcm9jLnZl ciIgMQojIDEzMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJz aW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1 bGVzL2kyb19zY3NpLnZlciIgMQojIDEzMiAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVk ZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5j bHVkZS9saW51eC9tb2R1bGVzL2kzODZfa3N5bXMudmVyIiAxCiMgMTMzICIvdXNyL3NyYy9saW51 eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9s aW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvaWRlLWRtYS52ZXIiIDEKIyAxMzQg Ii91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIgMgoj IDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxlcy9pZGUtaW9w cy52ZXIiIDEKIyAxMzUgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9k dmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgv bW9kdWxlcy9pZGUtaW8udmVyIiAxCiMgMTM2ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNs dWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9p bmNsdWRlL2xpbnV4L21vZHVsZXMvaWRlLWxpYi52ZXIiIDEKIyAxMzcgIi91c3Ivc3JjL2xpbnV4 LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xp bnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxlcy9pZGUtcHJvYmUudmVyIiAxCiMgMTM4 ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIK IyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvaWRlLXBy b2MudmVyIiAxCiMgMTM5ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21v ZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4 L21vZHVsZXMvaWRlLXRhc2tmaWxlLnZlciIgMQojIDE0MCAiL3Vzci9zcmMvbGludXgtMi40LjIw LTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40 LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL2lkZS52ZXIiIDEKIyAxNDEgIi91c3Ivc3JjL2xp bnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3Jj L2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxlcy9pZHQ3NzEwNS52ZXIiIDEKIyAx NDIgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIg MgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxlcy9pZWVl MTM5NF9jb3JlLnZlciIgMQojIDE0MyAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9s aW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVk ZS9saW51eC9tb2R1bGVzL2luZmxhdGVfc3ltcy52ZXIiIDEKIyAxNDQgIi91c3Ivc3JjL2xpbnV4 LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xp bnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxlcy9pbml0LnZlciIgMQojIDE0NSAiL3Vz ci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAi L3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL2lucHV0LnZlciIg MQojIDE0NiAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9u cy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVz L2lwNl90YWJsZXMudmVyIiAxCiMgMTQ3ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRl L2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNs dWRlL2xpbnV4L21vZHVsZXMvaXBjb21tb24udmVyIiAxCiMgMTQ4ICIvdXNyL3NyYy9saW51eC0y LjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51 eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvaXBfY29ubnRyYWNrX2Z0cC52ZXIiIDEK IyAxNDkgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMu aCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxlcy9p cF9jb25udHJhY2tfaXJjLnZlciIgMQojIDE1MCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5j bHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgv aW5jbHVkZS9saW51eC9tb2R1bGVzL2lwX2Nvbm50cmFja19zdGFuZGFsb25lLnZlciIgMQojIDE1 MSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAy CiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL2lwX2Z3 X2NvbXBhdC52ZXIiIDEKIyAxNTIgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGlu dXgvbW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUv bGludXgvbW9kdWxlcy9pcF9ncmUudmVyIiAxCiMgMTUzICIvdXNyL3NyYy9saW51eC0yLjQuMjAt OC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQu MjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvaXBpcC52ZXIiIDEKIyAxNTQgIi91c3Ivc3JjL2xp bnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3Jj L2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxlcy9pcG1pX21zZ2hhbmRsZXIudmVy IiAxCiMgMTU1ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNp b25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVs ZXMvaXBtaV93YXRjaGRvZy52ZXIiIDEKIyAxNTYgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2lu Y2x1ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04 L2luY2x1ZGUvbGludXgvbW9kdWxlcy9pcF9uYXRfc3RhbmRhbG9uZS52ZXIiIDEKIyAxNTcgIi91 c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxlcy9pcF90YWJsZXMu dmVyIiAxCiMgMTU4ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZl cnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21v ZHVsZXMvaXJwb3J0LnZlciIgMQojIDE1OSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVk ZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5j bHVkZS9saW51eC9tb2R1bGVzL2lyc3ltcy52ZXIiIDEKIyAxNjAgIi91c3Ivc3JjL2xpbnV4LTIu NC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4 LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxlcy9pc2FwbnAudmVyIiAxCiMgMTYxICIvdXNy L3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIv dXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvaXNkbl9jb21tb24u dmVyIiAxCiMgMTYyICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZl cnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21v ZHVsZXMvaXNlbnNlLnZlciIgMQojIDE2MyAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVk ZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5j bHVkZS9saW51eC9tb2R1bGVzL2l4ai52ZXIiIDEKIyAxNjQgIi91c3Ivc3JjL2xpbnV4LTIuNC4y MC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIu NC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxlcy9qb3VybmFsLnZlciIgMQojIDE2NSAiL3Vzci9z cmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vz ci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL2tjYXBpLnZlciIgMQoj IDE2NiAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5o IiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL2tl eWJvYXJkLnZlciIgMQojIDE2NyAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51 eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9s aW51eC9tb2R1bGVzL2ttb2QudmVyIiAxCiMgMTY4ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9p bmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAt OC9pbmNsdWRlL2xpbnV4L21vZHVsZXMva3N5bXMudmVyIiAxCiMgMTY5ICIvdXNyL3NyYy9saW51 eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9s aW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvbGFwYl9pZmFjZS52ZXIiIDEKIyAx NzAgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIg MgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxlcy9sbGNf bWFjaW5pdC52ZXIiIDEKIyAxNzEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGlu dXgvbW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUv bGludXgvbW9kdWxlcy9sbF9yd19ibGsudmVyIiAxCiMgMTcyICIvdXNyL3NyYy9saW51eC0yLjQu MjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0y LjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvbG9ja2Rfc3ltcy52ZXIiIDEKIyAxNzMgIi91 c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxlcy9sb29wLnZlciIg MQojIDE3NCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9u cy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVz L21hY2g2NF9hY2NlbC52ZXIiIDEKIyAxNzUgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1 ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2lu Y2x1ZGUvbGludXgvbW9kdWxlcy9tYWNfaGlkLnZlciIgMQojIDE3NiAiL3Vzci9zcmMvbGludXgt Mi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGlu dXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL21hdHJveGZiX2FjY2VsLnZlciIgMQoj IDE3NyAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5o IiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL21h dHJveGZiX2Jhc2UudmVyIiAxCiMgMTc4ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRl L2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNs dWRlL2xpbnV4L21vZHVsZXMvbWF0cm94ZmJfREFDMTA2NC52ZXIiIDEKIyAxNzkgIi91c3Ivc3Jj L2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Iv c3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxlcy9tYXRyb3hmYl9nNDUwLnZl ciIgMQojIDE4MCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJz aW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1 bGVzL21hdHJveGZiX21pc2MudmVyIiAxCiMgMTgxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9p bmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAt OC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvbWF0cm94ZmJfVGkzMDI2LnZlciIgMQojIDE4MiAiL3Vz ci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAi L3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL21jYS52ZXIiIDEK IyAxODMgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMu aCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxlcy9t ZC52ZXIiIDEKIyAxODQgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9k dmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgv bW9kdWxlcy9tZW1vcnkudmVyIiAxCiMgMTg1ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNs dWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9p bmNsdWRlL2xpbnV4L21vZHVsZXMvbWVtcG9vbC52ZXIiIDEKIyAxODYgIi91c3Ivc3JjL2xpbnV4 LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xp bnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxlcy9taWNyb2NvZGUudmVyIiAxCiMgMTg3 ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIK IyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvbWlkaV9z eW1zLnZlciIgMQojIDE4OCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9t b2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51 eC9tb2R1bGVzL21paS52ZXIiIDEKIyAxODkgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1 ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2lu Y2x1ZGUvbGludXgvbW9kdWxlcy9taXJvcGNtMjAtcmRzLWNvcmUudmVyIiAxCiMgMTkwICIvdXNy L3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIv dXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvbWlzYy52ZXIiIDEK IyAxOTEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMu aCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxlcy9t b2RlZGIudmVyIiAxCiMgMTkyICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4 L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xp bnV4L21vZHVsZXMvbXB0YmFzZS52ZXIiIDEKIyAxOTMgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04 L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4y MC04L2luY2x1ZGUvbGludXgvbW9kdWxlcy9tcHRjdGwudmVyIiAxCiMgMTk0ICIvdXNyL3NyYy9s aW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3Ny Yy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvbXB0bGFuLnZlciIgMQojIDE5 NSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAy CiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL21wdHNj c2loLnZlciIgMQojIDE5NiAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9t b2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51 eC9tb2R1bGVzL21wdTQwMS52ZXIiIDEKIyAxOTcgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2lu Y2x1ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04 L2luY2x1ZGUvbGludXgvbW9kdWxlcy9tc2Rvc2ZzX3N5bXMudmVyIiAxCiMgMTk4ICIvdXNyL3Ny Yy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNy L3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvbXNkb3MudmVyIiAxCiMg MTk5ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgi IDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvbXNn cXVldWUudmVyIiAxCiMgMjAwICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4 L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xp bnV4L21vZHVsZXMvbXNuZC52ZXIiIDEKIyAyMDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2lu Y2x1ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04 L2luY2x1ZGUvbGludXgvbW9kdWxlcy9tc3IudmVyIiAxCiMgMjAyICIvdXNyL3NyYy9saW51eC0y LjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51 eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvbXRkY29uY2F0LnZlciIgMQojIDIwMyAi L3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMg MSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL210ZGNvcmUu dmVyIiAxCiMgMjA0ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZl cnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21v ZHVsZXMvbXRkcGFydC52ZXIiIDEKIyAyMDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1 ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2lu Y2x1ZGUvbGludXgvbW9kdWxlcy9tdHJyLnZlciIgMQojIDIwNiAiL3Vzci9zcmMvbGludXgtMi40 LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgt Mi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL25hbmRfZWNjLnZlciIgMQojIDIwNyAiL3Vz ci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAi L3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL25hbmQudmVyIiAx CiMgMjA4ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25z LmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMv bmV0ZmlsdGVyLnZlciIgMQojIDIwOSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9s aW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVk ZS9saW51eC9tb2R1bGVzL25ldF9pbml0LnZlciIgMQojIDIxMCAiL3Vzci9zcmMvbGludXgtMi40 LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgt Mi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL25ldHN5bXMudmVyIiAxCiMgMjExICIvdXNy L3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIv dXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvbmV3cG9ydC52ZXIi IDEKIyAyMTIgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lv bnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxl cy9ubHNfYmFzZS52ZXIiIDEKIyAyMTMgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUv bGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1 ZGUvbGludXgvbW9kdWxlcy9ubTI1Nl9hdWRpby52ZXIiIDEKIyAyMTQgIi91c3Ivc3JjL2xpbnV4 LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xp bnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxlcy9udWJ1c19zeW1zLnZlciIgMQojIDIx NSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAy CiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL252cmFt LnZlciIgMQojIDIxNiAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2 ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9t b2R1bGVzL29oY2kxMzk0LnZlciIgMQojIDIxNyAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5j bHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgv aW5jbHVkZS9saW51eC9tb2R1bGVzL29wZW4udmVyIiAxCiMgMjE4ICIvdXNyL3NyYy9saW51eC0y LjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51 eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvb3BsMy52ZXIiIDEKIyAyMTkgIi91c3Iv c3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEgIi91 c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxlcy9vcmlub2NvLnZlciIg MQojIDIyMCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9u cy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVz L292NTExLnZlciIgMQojIDIyMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51 eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9s aW51eC9tb2R1bGVzL3A4MDIyLnZlciIgMQojIDIyMiAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgv aW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIw LTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL3BhZ2VfYWxsb2MudmVyIiAxCiMgMjIzICIvdXNyL3Ny Yy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNy L3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvcGFnZWF0dHIudmVyIiAx CiMgMjI0ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25z LmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMv cGFycG9ydF9wYy52ZXIiIDEKIyAyMjUgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUv bGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1 ZGUvbGludXgvbW9kdWxlcy9wY2lnYW1lLnZlciIgMQojIDIyNiAiL3Vzci9zcmMvbGludXgtMi40 LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgt Mi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL3BjaV9ob3RwbHVnX2NvcmUudmVyIiAxCiMg MjI3ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgi IDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvcGNp X2hvdHBsdWdfdXRpbC52ZXIiIDEKIyAyMjggIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1 ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2lu Y2x1ZGUvbGludXgvbW9kdWxlcy9wY2lfc29ja2V0LnZlciIgMQojIDIyOSAiL3Vzci9zcmMvbGlu dXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMv bGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL3BjaS52ZXIiIDEKIyAyMzAgIi91 c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxlcy9waG9uZWRldi52 ZXIiIDEKIyAyMzEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVy c2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9k dWxlcy9wbS52ZXIiIDEKIyAyMzIgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGlu dXgvbW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUv bGludXgvbW9kdWxlcy9wcHBfYXN5bmMudmVyIiAxCiMgMjMzICIvdXNyL3NyYy9saW51eC0yLjQu MjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0y LjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvcHBwX2dlbmVyaWMudmVyIiAxCiMgMjM0ICIv dXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAx ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvcHBwb3gudmVy IiAxCiMgMjM1ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNp b25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVs ZXMvcHJpbnRrLnZlciIgMQojIDIzNiAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9s aW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVk ZS9saW51eC9tb2R1bGVzL3Byb2MudmVyIiAxCiMgMjM3ICIvdXNyL3NyYy9saW51eC0yLjQuMjAt OC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQu MjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvcHJvZmlsZS52ZXIiIDEKIyAyMzggIi91c3Ivc3Jj L2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Iv c3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxlcy9wc25hcC52ZXIiIDEKIyAy MzkgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIg MgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxlcy9wdHku dmVyIiAxCiMgMjQwICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZl cnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21v ZHVsZXMvcHdjLXVuY29tcHJlc3MudmVyIiAxCiMgMjQxICIvdXNyL3NyYy9saW51eC0yLjQuMjAt OC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQu MjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvcXVldWUudmVyIiAxCiMgMjQyICIvdXNyL3NyYy9s aW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3Ny Yy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvcmFuZG9tLnZlciIgMQojIDI0 MyAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAy CiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL3Jhdy52 ZXIiIDEKIyAyNDQgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVy c2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9k dWxlcy9yYXlfY3MudmVyIiAxCiMgMjQ1ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRl L2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNs dWRlL2xpbnV4L21vZHVsZXMvcmJ0cmVlLnZlciIgMQojIDI0NiAiL3Vzci9zcmMvbGludXgtMi40 LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgt Mi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL3JlZGJvb3QudmVyIiAxCiMgMjQ3ICIvdXNy L3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIv dXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvcmVzb3VyY2VzLnZl ciIgMQojIDI0OCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJz aW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1 bGVzL3Jvb3QudmVyIiAxCiMgMjQ5ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xp bnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRl L2xpbnV4L21vZHVsZXMvcnJtLnZlciIgMQojIDI1MCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgv aW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIw LTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL3J0Yy52ZXIiIDEKIyAyNTEgIi91c3Ivc3JjL2xpbnV4 LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xp bnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxlcy9yd3NlbS1zcGlubG9jay52ZXIiIDEK IyAyNTIgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMu aCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxlcy9y d3NlbS52ZXIiIDEKIyAyNTMgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgv bW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGlu dXgvbW9kdWxlcy9yeHJwY19zeW1zLnZlciIgMQojIDI1NCAiL3Vzci9zcmMvbGludXgtMi40LjIw LTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40 LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL3NhMTEwMGZiLnZlciIgMQojIDI1NSAiL3Vzci9z cmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vz ci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL3NiX2NvbW1vbi52ZXIi IDEKIyAyNTYgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lv bnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxl cy9zY3NpX3N5bXMudmVyIiAxCiMgMjU3ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRl L2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNs dWRlL2xpbnV4L21vZHVsZXMvc2RsYWRydi52ZXIiIDEKIyAyNTggIi91c3Ivc3JjL2xpbnV4LTIu NC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4 LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxlcy9zZWxlY3Rpb24udmVyIiAxCiMgMjU5ICIv dXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAx ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvc2Vuc29ycy52 ZXIiIDEKIyAyNjAgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVy c2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9k dWxlcy9zZXF1ZW5jZXJfc3ltcy52ZXIiIDEKIyAyNjEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04 L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4y MC04L2luY2x1ZGUvbGludXgvbW9kdWxlcy9zZXJpYWwudmVyIiAxCiMgMjYyICIvdXNyL3NyYy9s aW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3Ny Yy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvc2VyaW8udmVyIiAxCiMgMjYz ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIK IyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvc2V0dXAt cGNpLnZlciIgMQojIDI2NCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9t b2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51 eC9tb2R1bGVzL3NnaWNvbnMudmVyIiAxCiMgMjY1ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9p bmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAt OC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvc2htZW0udmVyIiAxCiMgMjY2ICIvdXNyL3NyYy9saW51 eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9s aW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvc2htaXEudmVyIiAxCiMgMjY3ICIv dXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAx ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvc2lnbmFsLnZl ciIgMQojIDI2OCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJz aW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1 bGVzL3Npc19tYWluLnZlciIgMQojIDI2OSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVk ZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5j bHVkZS9saW51eC9tb2R1bGVzL3NsaGMudmVyIiAxCiMgMjcwICIvdXNyL3NyYy9saW51eC0yLjQu MjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0y LjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvc29ueXBpLnZlciIgMQojIDI3MSAiL3Vzci9z cmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vz ci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL3NvdW5kX2NvcmUudmVy IiAxCiMgMjcyICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNp b25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVs ZXMvc291bmRfc3ltcy52ZXIiIDEKIyAyNzMgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1 ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2lu Y2x1ZGUvbGludXgvbW9kdWxlcy9zdGljb24udmVyIiAxCiMgMjc0ICIvdXNyL3NyYy9saW51eC0y LjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51 eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvc3RpY29yZS52ZXIiIDEKIyAyNzUgIi91 c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxlcy9zdGlmYi52ZXIi IDEKIyAyNzYgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lv bnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxl cy9zdW5pLnZlciIgMQojIDI3NyAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51 eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9s aW51eC9tb2R1bGVzL3N1bnJwY19zeW1zLnZlciIgMQojIDI3OCAiL3Vzci9zcmMvbGludXgtMi40 LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgt Mi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL3N1LnZlciIgMQojIDI3OSAiL3Vzci9zcmMv bGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9z cmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL3N5bXMudmVyIiAxCiMgMjgw ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIK IyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvc3luY3Bw cC52ZXIiIDEKIyAyODEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9k dmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgv bW9kdWxlcy9zeXNycS52ZXIiIDEKIyAyODIgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1 ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2lu Y2x1ZGUvbGludXgvbW9kdWxlcy9zeXMudmVyIiAxCiMgMjgzICIvdXNyL3NyYy9saW51eC0yLjQu MjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0y LjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvdGMudmVyIiAxCiMgMjg0ICIvdXNyL3NyYy9s aW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3Ny Yy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvdGltZS52ZXIiIDEKIyAyODUg Ii91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIgMgoj IDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxlcy90bXMzODB0 ci52ZXIiIDEKIyAyODYgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9k dmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgv bW9kdWxlcy90cmFwcy52ZXIiIDEKIyAyODcgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1 ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2lu Y2x1ZGUvbGludXgvbW9kdWxlcy90dHlfaW9jdGwudmVyIiAxCiMgMjg4ICIvdXNyL3NyYy9saW51 eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9s aW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvdHR5X2lvLnZlciIgMQojIDI4OSAi L3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMg MSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL3VhcnQ0MDEu dmVyIiAxCiMgMjkwICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZl cnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21v ZHVsZXMvdVBEOTg0MDIudmVyIiAxCiMgMjkxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNs dWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9p bmNsdWRlL2xpbnV4L21vZHVsZXMvdXNic2VyaWFsLnZlciIgMQojIDI5MiAiL3Vzci9zcmMvbGlu dXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMv bGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL3VzYi52ZXIiIDEKIyAyOTMgIi91 c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxlcy91c2VtYS52ZXIi IDEKIyAyOTQgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdmVyc2lv bnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW9kdWxl cy91dGlsLnZlciIgMQojIDI5NSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51 eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9s aW51eC9tb2R1bGVzL3ZmYXRmc19zeW1zLnZlciIgMQojIDI5NiAiL3Vzci9zcmMvbGludXgtMi40 LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgt Mi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL3ZpYS1wbXUudmVyIiAxCiMgMjk3ICIvdXNy L3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIv dXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvdmlkZW9kZXYudmVy IiAxCiMgMjk4ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNp b25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVs ZXMvd2FubWFpbi52ZXIiIDEKIyAyOTkgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUv bGludXgvbW9kdmVyc2lvbnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1 ZGUvbGludXgvbW9kdWxlcy94b3IudmVyIiAxCiMgMzAwICIvdXNyL3NyYy9saW51eC0yLjQuMjAt OC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQu MjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMveWVudGEudmVyIiAxCiMgMzAxICIvdXNyL3NyYy9s aW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHZlcnNpb25zLmgiIDIKIyAxICIvdXNyL3Ny Yy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21vZHVsZXMvejg1MjMwLnZlciIgMQojIDMw MiAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAy CiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tb2R1bGVzL3pmdGFw ZV9zeW1zLnZlciIgMQojIDMwMyAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51 eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9s aW51eC9tb2R1bGVzL3pvcnJvLnZlciIgMQojIDMwNCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgv aW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oIiAyCiMgMiAiPGNvbW1hbmQgbGluZT4iIDIKIyAx ICJza2dlcG5taS5jIgojIDQzNSAic2tnZXBubWkuYyIKc3RhdGljIGNvbnN0IGNoYXIgU3lzS29u bmVjdEZpbGVJZFtdID0KICAgICAgICAiQCgjKSAkSWQ6IHNrZ2Vwbm1pLmMsdiAxLjEwMiAyMDAy LzEyLzE2IDE0OjAzOjI0IHRzY2hpbGxpIEV4cCAkIgogICAgICAgICIgKEMpIFN5c0tvbm5lY3Qu IjsKCiMgMSAiaC9za2RydjFzdC5oIiAxCiMgOTEgImgvc2tkcnYxc3QuaCIKIyAxICIvdXNyL3Ny Yy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3ZlcnNpb24uaCIgMQojIDkyICJoL3NrZHJ2 MXN0LmgiIDIKCgoKdHlwZWRlZiBzdHJ1Y3Qgc19BQyBTS19BQzsKIyAxMTcgImgvc2tkcnYxc3Qu aCIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3ZlcnNpb24uaCIg MQojIDExOCAiaC9za2RydjFzdC5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5j bHVkZS9saW51eC90eXBlcy5oIiAxCgoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2lu Y2x1ZGUvbGludXgvY29uZmlnLmgiIDEKCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9p bmNsdWRlL2xpbnV4L2F1dG9jb25mLmgiIDEKIyA1ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9p bmNsdWRlL2xpbnV4L2NvbmZpZy5oIiAyCiMgNiAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5j bHVkZS9saW51eC90eXBlcy5oIiAyCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNs dWRlL2xpbnV4L3Bvc2l4X3R5cGVzLmgiIDEKCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAt OC9pbmNsdWRlL2xpbnV4L3N0ZGRlZi5oIiAxCiMgNSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgv aW5jbHVkZS9saW51eC9wb3NpeF90eXBlcy5oIiAyCiMgMzYgIi91c3Ivc3JjL2xpbnV4LTIuNC4y MC04L2luY2x1ZGUvbGludXgvcG9zaXhfdHlwZXMuaCIKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAg IHVuc2lnbmVkIGxvbmcgZmRzX2JpdHMgWygxMDI0Lyg4ICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcp KSldOwp9IF9fa2VybmVsX2ZkX3NldDsKCgp0eXBlZGVmIHZvaWQgKCpfX2tlcm5lbF9zaWdoYW5k bGVyX3QpKGludCk7CgoKdHlwZWRlZiBpbnQgX19rZXJuZWxfa2V5X3Q7CgojIDEgIi91c3Ivc3Jj L2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvYXNtL3Bvc2l4X3R5cGVzLmgiIDEKIyAxMCAiL3Vzci9z cmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9hc20vcG9zaXhfdHlwZXMuaCIKdHlwZWRlZiB1bnNp Z25lZCBzaG9ydCBfX2tlcm5lbF9kZXZfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fa2VybmVs X2lub190Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fa2VybmVsX21vZGVfdDsKdHlwZWRlZiB1 bnNpZ25lZCBzaG9ydCBfX2tlcm5lbF9ubGlua190Owp0eXBlZGVmIGxvbmcgX19rZXJuZWxfb2Zm X3Q7CnR5cGVkZWYgaW50IF9fa2VybmVsX3BpZF90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9f a2VybmVsX2lwY19waWRfdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX2tlcm5lbF91aWRfdDsK dHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX2tlcm5lbF9naWRfdDsKdHlwZWRlZiB1bnNpZ25lZCBp bnQgX19rZXJuZWxfc2l6ZV90Owp0eXBlZGVmIGludCBfX2tlcm5lbF9zc2l6ZV90Owp0eXBlZGVm IGludCBfX2tlcm5lbF9wdHJkaWZmX3Q7CnR5cGVkZWYgbG9uZyBfX2tlcm5lbF90aW1lX3Q7CnR5 cGVkZWYgbG9uZyBfX2tlcm5lbF9zdXNlY29uZHNfdDsKdHlwZWRlZiBsb25nIF9fa2VybmVsX2Ns b2NrX3Q7CnR5cGVkZWYgaW50IF9fa2VybmVsX2RhZGRyX3Q7CnR5cGVkZWYgY2hhciAqIF9fa2Vy bmVsX2NhZGRyX3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX19rZXJuZWxfdWlkMTZfdDsKdHlw ZWRlZiB1bnNpZ25lZCBzaG9ydCBfX2tlcm5lbF9naWQxNl90Owp0eXBlZGVmIHVuc2lnbmVkIGlu dCBfX2tlcm5lbF91aWQzMl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX2tlcm5lbF9naWQzMl90 OwoKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX2tlcm5lbF9vbGRfdWlkX3Q7CnR5cGVkZWYgdW5z aWduZWQgc2hvcnQgX19rZXJuZWxfb2xkX2dpZF90OwoKCnR5cGVkZWYgbG9uZyBsb25nIF9fa2Vy bmVsX2xvZmZfdDsKCgp0eXBlZGVmIHN0cnVjdCB7CgogICAgICAgIGludCB2YWxbMl07CgoKCn0g X19rZXJuZWxfZnNpZF90OwojIDQ3ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xp bnV4L3Bvc2l4X3R5cGVzLmgiIDIKIyA5ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRl L2xpbnV4L3R5cGVzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2Fz bS90eXBlcy5oIiAxCgoKCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdW1vZGVfdDsKCgoKCgoKdHlw ZWRlZiBfX3NpZ25lZF9fIGNoYXIgX19zODsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdTg7Cgp0 eXBlZGVmIF9fc2lnbmVkX18gc2hvcnQgX19zMTY7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX191 MTY7Cgp0eXBlZGVmIF9fc2lnbmVkX18gaW50IF9fczMyOwp0eXBlZGVmIHVuc2lnbmVkIGludCBf X3UzMjsKCgp0eXBlZGVmIF9fc2lnbmVkX18gbG9uZyBsb25nIF9fczY0Owp0eXBlZGVmIHVuc2ln bmVkIGxvbmcgbG9uZyBfX3U2NDsKIyAzMiAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVk ZS9hc20vdHlwZXMuaCIKdHlwZWRlZiBzaWduZWQgY2hhciBzODsKdHlwZWRlZiB1bnNpZ25lZCBj aGFyIHU4OwoKdHlwZWRlZiBzaWduZWQgc2hvcnQgczE2Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0 IHUxNjsKCnR5cGVkZWYgc2lnbmVkIGludCBzMzI7CnR5cGVkZWYgdW5zaWduZWQgaW50IHUzMjsK CnR5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyBzNjQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25n IHU2NDsKIyA1MSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9hc20vdHlwZXMuaCIK dHlwZWRlZiB1MzIgZG1hX2FkZHJfdDsKCnR5cGVkZWYgdTY0IGRtYTY0X2FkZHJfdDsKIyAxMCAi L3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC90eXBlcy5oIiAyCgoKCnR5cGVk ZWYgX19rZXJuZWxfZmRfc2V0IGZkX3NldDsKdHlwZWRlZiBfX2tlcm5lbF9kZXZfdCBkZXZfdDsK dHlwZWRlZiBfX2tlcm5lbF9pbm9fdCBpbm9fdDsKdHlwZWRlZiBfX2tlcm5lbF9tb2RlX3QgbW9k ZV90Owp0eXBlZGVmIF9fa2VybmVsX25saW5rX3QgbmxpbmtfdDsKdHlwZWRlZiBfX2tlcm5lbF9v ZmZfdCBvZmZfdDsKdHlwZWRlZiBfX2tlcm5lbF9waWRfdCBwaWRfdDsKdHlwZWRlZiBfX2tlcm5l bF9kYWRkcl90IGRhZGRyX3Q7CnR5cGVkZWYgX19rZXJuZWxfa2V5X3Qga2V5X3Q7CnR5cGVkZWYg X19rZXJuZWxfc3VzZWNvbmRzX3Qgc3VzZWNvbmRzX3Q7CgoKdHlwZWRlZiBfX2tlcm5lbF91aWQz Ml90IHVpZF90Owp0eXBlZGVmIF9fa2VybmVsX2dpZDMyX3QgZ2lkX3Q7CnR5cGVkZWYgX19rZXJu ZWxfdWlkMTZfdCB1aWQxNl90Owp0eXBlZGVmIF9fa2VybmVsX2dpZDE2X3QgZ2lkMTZfdDsKCgoK dHlwZWRlZiBfX2tlcm5lbF9vbGRfdWlkX3Qgb2xkX3VpZF90Owp0eXBlZGVmIF9fa2VybmVsX29s ZF9naWRfdCBvbGRfZ2lkX3Q7CiMgNDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUv bGludXgvdHlwZXMuaCIKdHlwZWRlZiBfX2tlcm5lbF9sb2ZmX3QgbG9mZl90OwojIDU0ICIvdXNy L3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3R5cGVzLmgiCnR5cGVkZWYgX19rZXJu ZWxfc2l6ZV90IHNpemVfdDsKCgoKCnR5cGVkZWYgX19rZXJuZWxfc3NpemVfdCBzc2l6ZV90OwoK CgoKdHlwZWRlZiBfX2tlcm5lbF9wdHJkaWZmX3QgcHRyZGlmZl90OwoKCgoKdHlwZWRlZiBfX2tl cm5lbF90aW1lX3QgdGltZV90OwoKCgoKdHlwZWRlZiBfX2tlcm5lbF9jbG9ja190IGNsb2NrX3Q7 CgoKCgp0eXBlZGVmIF9fa2VybmVsX2NhZGRyX3QgY2FkZHJfdDsKCgoKdHlwZWRlZiB1bnNpZ25l ZCBjaGFyIHVfY2hhcjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1X3Nob3J0Owp0eXBlZGVmIHVu c2lnbmVkIGludCB1X2ludDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIHVfbG9uZzsKCgp0eXBlZGVm IHVuc2lnbmVkIGNoYXIgdW5jaGFyOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVzaG9ydDsKdHlw ZWRlZiB1bnNpZ25lZCBpbnQgdWludDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIHVsb25nOwoKCgoK dHlwZWRlZiBfX3U4IHVfaW50OF90Owp0eXBlZGVmIF9fczggaW50OF90Owp0eXBlZGVmIF9fdTE2 IHVfaW50MTZfdDsKdHlwZWRlZiBfX3MxNiBpbnQxNl90Owp0eXBlZGVmIF9fdTMyIHVfaW50MzJf dDsKdHlwZWRlZiBfX3MzMiBpbnQzMl90OwoKCgp0eXBlZGVmIF9fdTggdWludDhfdDsKdHlwZWRl ZiBfX3UxNiB1aW50MTZfdDsKdHlwZWRlZiBfX3UzMiB1aW50MzJfdDsKCgp0eXBlZGVmIF9fdTY0 IHVpbnQ2NF90Owp0eXBlZGVmIF9fdTY0IHVfaW50NjRfdDsKdHlwZWRlZiBfX3M2NCBpbnQ2NF90 OwojIDEyMyAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC90eXBlcy5oIgpz dHJ1Y3QgdXN0YXQgewogICAgICAgIF9fa2VybmVsX2RhZGRyX3QgZl90ZnJlZTsKICAgICAgICBf X2tlcm5lbF9pbm9fdCBmX3Rpbm9kZTsKICAgICAgICBjaGFyIGZfZm5hbWVbNl07CiAgICAgICAg Y2hhciBmX2ZwYWNrWzZdOwp9OwojIDExOSAiaC9za2RydjFzdC5oIiAyCiMgMSAiL3Vzci9zcmMv bGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9rZXJuZWwuaCIgMQojIDEwICIvdXNyL3NyYy9s aW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oIgojIDEgIi91c3IvbGliL2djYy1s aWIvaTM4Ni1yZWRoYXQtbGludXgvMy4yLjIvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCiMgNDMgIi91 c3IvbGliL2djYy1saWIvaTM4Ni1yZWRoYXQtbGludXgvMy4yLjIvaW5jbHVkZS9zdGRhcmcuaCIg Mwp0eXBlZGVmIF9fYnVpbHRpbl92YV9saXN0IF9fZ251Y192YV9saXN0OwojIDExMCAiL3Vzci9s aWIvZ2NjLWxpYi9pMzg2LXJlZGhhdC1saW51eC8zLjIuMi9pbmNsdWRlL3N0ZGFyZy5oIiAzCnR5 cGVkZWYgX19nbnVjX3ZhX2xpc3QgdmFfbGlzdDsKIyAxMSAiL3Vzci9zcmMvbGludXgtMi40LjIw LTgvaW5jbHVkZS9saW51eC9rZXJuZWwuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04 L2luY2x1ZGUvbGludXgvbGlua2FnZS5oIiAxCiMgMTIgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04 L2luY2x1ZGUvbGludXgva2VybmVsLmgiIDIKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04 L2luY2x1ZGUvbGludXgvY29tcGlsZXIuaCIgMQojIDE1ICIvdXNyL3NyYy9saW51eC0yLjQuMjAt OC9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgv aW5jbHVkZS9hc20vYnl0ZW9yZGVyLmgiIDEKIyAxMyAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgv aW5jbHVkZS9hc20vYnl0ZW9yZGVyLmgiCnN0YXRpYyBfX2lubGluZV9fIF9fY29uc3RfXyBfX3Uz MiBfX19hcmNoX19zd2FiMzIoX191MzIgeCkKewoKICAgICAgICBfX2FzbV9fKCJic3dhcCAlMCIg OiAiPXIiICh4KSA6ICIwIiAoeCkpOwoKCgoKCgoKICAgICAgICByZXR1cm4geDsKfQoKc3RhdGlj IF9faW5saW5lX18gX19jb25zdF9fIF9fdTE2IF9fX2FyY2hfX3N3YWIxNihfX3UxNiB4KQp7CiAg ICAgICAgX19hc21fXygieGNoZ2IgJWIwLCVoMCIgOiAiPXEiICh4KSA6ICIwIiAoeCkpOyByZXR1 cm4geDsKCgoKfQojIDQ1ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2FzbS9ieXRl b3JkZXIuaCIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2J5dGVv cmRlci9saXR0bGVfZW5kaWFuLmgiIDEKIyAxMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5j bHVkZS9saW51eC9ieXRlb3JkZXIvbGl0dGxlX2VuZGlhbi5oIgojIDEgIi91c3Ivc3JjL2xpbnV4 LTIuNC4yMC04L2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL3N3YWIuaCIgMQojIDE1OSAiL3Vzci9z cmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvc3dhYi5oIgpzdGF0aWMg X19pbmxpbmVfXyBfX2NvbnN0X18gX191MTYgX19mc3dhYjE2KF9fdTE2IHgpCnsKICAgICAgICBy ZXR1cm4gX19fYXJjaF9fc3dhYjE2KHgpOwp9CnN0YXRpYyBfX2lubGluZV9fIF9fdTE2IF9fc3dh YjE2cChfX3UxNiAqeCkKewogICAgICAgIHJldHVybiBfX19hcmNoX19zd2FiMTYoKih4KSk7Cn0K c3RhdGljIF9faW5saW5lX18gdm9pZCBfX3N3YWIxNnMoX191MTYgKmFkZHIpCnsKICAgICAgICBk byB7ICooYWRkcikgPSBfX19hcmNoX19zd2FiMTYoKigoYWRkcikpKTsgfSB3aGlsZSAoMCk7Cn0K CnN0YXRpYyBfX2lubGluZV9fIF9fY29uc3RfXyBfX3UzMiBfX2Zzd2FiMjQoX191MzIgeCkKewog ICAgICAgIHJldHVybiAoeyBfX3UzMiBfX3RtcCA9ICh4KSA7ICh7IF9fdTMyIF9feCA9IChfX3Rt cCk7ICgoX191MzIpKCAoKF9feCAmIChfX3UzMikweDAwMDAwMGZmVUwpIDw8IDE2KSB8IChfX3gg JiAoX191MzIpMHgwMDAwZmYwMFVMKSB8ICgoX194ICYgKF9fdTMyKTB4MDBmZjAwMDBVTCkgPj4g MTYpICkpOyB9KTsgfSk7Cn0Kc3RhdGljIF9faW5saW5lX18gX191MzIgX19zd2FiMjRwKF9fdTMy ICp4KQp7CiAgICAgICAgcmV0dXJuICh7IF9fdTMyIF9fdG1wID0gKCooeCkpIDsgKHsgX191MzIg X194ID0gKF9fdG1wKTsgKChfX3UzMikoICgoX194ICYgKF9fdTMyKTB4MDAwMDAwZmZVTCkgPDwg MTYpIHwgKF9feCAmIChfX3UzMikweDAwMDBmZjAwVUwpIHwgKChfX3ggJiAoX191MzIpMHgwMGZm MDAwMFVMKSA+PiAxNikgKSk7IH0pOyB9KTsKfQpzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fc3dh YjI0cyhfX3UzMiAqYWRkcikKewogICAgICAgIGRvIHsgKihhZGRyKSA9ICh7IF9fdTMyIF9fdG1w ID0gKCooKGFkZHIpKSkgOyAoeyBfX3UzMiBfX3ggPSAoX190bXApOyAoKF9fdTMyKSggKChfX3gg JiAoX191MzIpMHgwMDAwMDBmZlVMKSA8PCAxNikgfCAoX194ICYgKF9fdTMyKTB4MDAwMGZmMDBV TCkgfCAoKF9feCAmIChfX3UzMikweDAwZmYwMDAwVUwpID4+IDE2KSApKTsgfSk7IH0pOyB9IHdo aWxlICgwKTsKfQoKc3RhdGljIF9faW5saW5lX18gX19jb25zdF9fIF9fdTMyIF9fZnN3YWIzMihf X3UzMiB4KQp7CiAgICAgICAgcmV0dXJuIF9fX2FyY2hfX3N3YWIzMih4KTsKfQpzdGF0aWMgX19p bmxpbmVfXyBfX3UzMiBfX3N3YWIzMnAoX191MzIgKngpCnsKICAgICAgICByZXR1cm4gX19fYXJj aF9fc3dhYjMyKCooeCkpOwp9CnN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19zd2FiMzJzKF9fdTMy ICphZGRyKQp7CiAgICAgICAgZG8geyAqKGFkZHIpID0gX19fYXJjaF9fc3dhYjMyKCooKGFkZHIp KSk7IH0gd2hpbGUgKDApOwp9CgoKc3RhdGljIF9faW5saW5lX18gX19jb25zdF9fIF9fdTY0IF9f ZnN3YWI2NChfX3U2NCB4KQp7CgogICAgICAgIF9fdTMyIGggPSB4ID4+IDMyOwogICAgICAgIF9f dTMyIGwgPSB4ICYgKCgxVUxMPDwzMiktMSk7CiAgICAgICAgcmV0dXJuICgoKF9fdTY0KShfX2J1 aWx0aW5fY29uc3RhbnRfcCgoX191MzIpKGwpKSA/ICh7IF9fdTMyIF9feCA9ICgobCkpOyAoKF9f dTMyKSggKCgoX191MzIpKF9feCkgJiAoX191MzIpMHgwMDAwMDBmZlVMKSA8PCAyNCkgfCAoKChf X3UzMikoX194KSAmIChfX3UzMikweDAwMDBmZjAwVUwpIDw8IDgpIHwgKCgoX191MzIpKF9feCkg JiAoX191MzIpMHgwMGZmMDAwMFVMKSA+PiA4KSB8ICgoKF9fdTMyKShfX3gpICYgKF9fdTMyKTB4 ZmYwMDAwMDBVTCkgPj4gMjQpICkpOyB9KSA6IF9fZnN3YWIzMigobCkpKSkgPDwgMzIpIHwgKChf X3U2NCkoKF9fYnVpbHRpbl9jb25zdGFudF9wKChfX3UzMikoaCkpID8gKHsgX191MzIgX194ID0g KChoKSk7ICgoX191MzIpKCAoKChfX3UzMikoX194KSAmIChfX3UzMikweDAwMDAwMGZmVUwpIDw8 IDI0KSB8ICgoKF9fdTMyKShfX3gpICYgKF9fdTMyKTB4MDAwMGZmMDBVTCkgPDwgOCkgfCAoKChf X3UzMikoX194KSAmIChfX3UzMikweDAwZmYwMDAwVUwpID4+IDgpIHwgKCgoX191MzIpKF9feCkg JiAoX191MzIpMHhmZjAwMDAwMFVMKSA+PiAyNCkgKSk7IH0pIDogX19mc3dhYjMyKChoKSkpKSk7 CgoKCn0Kc3RhdGljIF9faW5saW5lX18gX191NjQgX19zd2FiNjRwKF9fdTY0ICp4KQp7CiAgICAg ICAgcmV0dXJuICh7IF9fdTY0IF9fdG1wID0gKCooeCkpIDsgKHsgX191NjQgX194ID0gKF9fdG1w KTsgKChfX3U2NCkoIChfX3U2NCkoKChfX3U2NCkoX194KSAmIChfX3U2NCkweDAwMDAwMDAwMDAw MDAwZmZVTEwpIDw8IDU2KSB8IChfX3U2NCkoKChfX3U2NCkoX194KSAmIChfX3U2NCkweDAwMDAw MDAwMDAwMGZmMDBVTEwpIDw8IDQwKSB8IChfX3U2NCkoKChfX3U2NCkoX194KSAmIChfX3U2NCkw eDAwMDAwMDAwMDBmZjAwMDBVTEwpIDw8IDI0KSB8IChfX3U2NCkoKChfX3U2NCkoX194KSAmIChf X3U2NCkweDAwMDAwMDAwZmYwMDAwMDBVTEwpIDw8IDgpIHwgKF9fdTY0KSgoKF9fdTY0KShfX3gp ICYgKF9fdTY0KTB4MDAwMDAwZmYwMDAwMDAwMFVMTCkgPj4gOCkgfCAoX191NjQpKCgoX191NjQp KF9feCkgJiAoX191NjQpMHgwMDAwZmYwMDAwMDAwMDAwVUxMKSA+PiAyNCkgfCAoX191NjQpKCgo X191NjQpKF9feCkgJiAoX191NjQpMHgwMGZmMDAwMDAwMDAwMDAwVUxMKSA+PiA0MCkgfCAoX191 NjQpKCgoX191NjQpKF9feCkgJiAoX191NjQpMHhmZjAwMDAwMDAwMDAwMDAwVUxMKSA+PiA1Nikg KSk7IH0pOyB9KTsKfQpzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fc3dhYjY0cyhfX3U2NCAqYWRk cikKewogICAgICAgIGRvIHsgKihhZGRyKSA9ICh7IF9fdTY0IF9fdG1wID0gKCooKGFkZHIpKSkg OyAoeyBfX3U2NCBfX3ggPSAoX190bXApOyAoKF9fdTY0KSggKF9fdTY0KSgoKF9fdTY0KShfX3gp ICYgKF9fdTY0KTB4MDAwMDAwMDAwMDAwMDBmZlVMTCkgPDwgNTYpIHwgKF9fdTY0KSgoKF9fdTY0 KShfX3gpICYgKF9fdTY0KTB4MDAwMDAwMDAwMDAwZmYwMFVMTCkgPDwgNDApIHwgKF9fdTY0KSgo KF9fdTY0KShfX3gpICYgKF9fdTY0KTB4MDAwMDAwMDAwMGZmMDAwMFVMTCkgPDwgMjQpIHwgKF9f dTY0KSgoKF9fdTY0KShfX3gpICYgKF9fdTY0KTB4MDAwMDAwMDBmZjAwMDAwMFVMTCkgPDwgOCkg fCAoX191NjQpKCgoX191NjQpKF9feCkgJiAoX191NjQpMHgwMDAwMDBmZjAwMDAwMDAwVUxMKSA+ PiA4KSB8IChfX3U2NCkoKChfX3U2NCkoX194KSAmIChfX3U2NCkweDAwMDBmZjAwMDAwMDAwMDBV TEwpID4+IDI0KSB8IChfX3U2NCkoKChfX3U2NCkoX194KSAmIChfX3U2NCkweDAwZmYwMDAwMDAw MDAwMDBVTEwpID4+IDQwKSB8IChfX3U2NCkoKChfX3U2NCkoX194KSAmIChfX3U2NCkweGZmMDAw MDAwMDAwMDAwMDBVTEwpID4+IDU2KSApKTsgfSk7IH0pOyB9IHdoaWxlICgwKTsKfQojIDEyICIv dXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2J5dGVvcmRlci9saXR0bGVfZW5k aWFuLmgiIDIKIyA4MiAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9ieXRl b3JkZXIvbGl0dGxlX2VuZGlhbi5oIgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1 ZGUvbGludXgvYnl0ZW9yZGVyL2dlbmVyaWMuaCIgMQojIDE1MCAiL3Vzci9zcmMvbGludXgtMi40 LjIwLTgvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvZ2VuZXJpYy5oIgpleHRlcm4gX191MzIgbnRv aGwoX191MzIpOwpleHRlcm4gX191MzIgaHRvbmwoX191MzIpOwoKCgoKZXh0ZXJuIHVuc2lnbmVk IHNob3J0IGludCBudG9ocyh1bnNpZ25lZCBzaG9ydCBpbnQpOwpleHRlcm4gdW5zaWduZWQgc2hv cnQgaW50IGh0b25zKHVuc2lnbmVkIHNob3J0IGludCk7CiMgODMgIi91c3Ivc3JjL2xpbnV4LTIu NC4yMC04L2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL2xpdHRsZV9lbmRpYW4uaCIgMgojIDQ2ICIv dXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2FzbS9ieXRlb3JkZXIuaCIgMgojIDE2ICIv dXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oIiAyCiMgNDEgIi91 c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgva2VybmVsLmgiCmV4dGVybiBpbnQg Y29uc29sZV9wcmludGtbXTsKIyA1OCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9s aW51eC9rZXJuZWwuaCIKc3RydWN0IGNvbXBsZXRpb247CgpleHRlcm4gc3RydWN0IG5vdGlmaWVy X2Jsb2NrICpwYW5pY19ub3RpZmllcl9saXN0X1IwZDVlZWIyNTsKIHZvaWQgcGFuaWNfUjAxMDc1 YmYwKGNvbnN0IGNoYXIgKiBmbXQsIC4uLikKICAgICAgICBfX2F0dHJpYnV0ZV9fICgobm9yZXR1 cm4sIGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpOwogX19hdHRyaWJ1dGVfXygocmVncGFybSgwKSkp IHZvaWQgZG9fZXhpdChsb25nIGVycm9yX2NvZGUpCiAgICAgICAgX19hdHRyaWJ1dGVfXygobm9y ZXR1cm4pKTsKIHZvaWQgY29tcGxldGVfYW5kX2V4aXRfUjk1ZGVmZmI3KHN0cnVjdCBjb21wbGV0 aW9uICosIGxvbmcpCiAgICAgICAgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKTsKZXh0ZXJuIGlu dCBhYnMoaW50KTsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2ltcGxlX3N0cnRvdWxfUjIwMDAwMzI5 KGNvbnN0IGNoYXIgKixjaGFyICoqLHVuc2lnbmVkIGludCk7CmV4dGVybiBsb25nIHNpbXBsZV9z dHJ0b2xfUjBiNzQyZmQ3KGNvbnN0IGNoYXIgKixjaGFyICoqLHVuc2lnbmVkIGludCk7CmV4dGVy biB1bnNpZ25lZCBsb25nIGxvbmcgc2ltcGxlX3N0cnRvdWxsX1I2MWI3YjEyNihjb25zdCBjaGFy ICosY2hhciAqKix1bnNpZ25lZCBpbnQpOwpleHRlcm4gbG9uZyBsb25nIHNpbXBsZV9zdHJ0b2xs KGNvbnN0IGNoYXIgKixjaGFyICoqLHVuc2lnbmVkIGludCk7CmV4dGVybiBpbnQgc3ByaW50Zl9S MWQyNmFhOTgoY2hhciAqIGJ1ZiwgY29uc3QgY2hhciAqIGZtdCwgLi4uKQogICAgICAgIF9fYXR0 cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKTsKZXh0ZXJuIGludCB2c3ByaW50Zl9S OTU0Y2JiMjYoY2hhciAqYnVmLCBjb25zdCBjaGFyICosIHZhX2xpc3QpOwpleHRlcm4gaW50IHNu cHJpbnRmX1IwMjVkYTA3MChjaGFyICogYnVmLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqIGZt dCwgLi4uKQogICAgICAgIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMywgNCkpKTsK ZXh0ZXJuIGludCB2c25wcmludGZfUjU3YTY1MDRlKGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIGNv bnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKTsKCmV4dGVybiBpbnQgc3NjYW5mX1I4NTkyMDRh Zihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKQogICAgICAgIF9fYXR0cmlidXRlX18g KChmb3JtYXQgKHNjYW5mLDIsMykpKTsKZXh0ZXJuIGludCB2c3NjYW5mX1JiNTA0NDI3MShjb25z dCBjaGFyICosIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCk7CgpleHRlcm4gaW50IGdldF9vcHRpb25f UmIwZTEwNzgxKGNoYXIgKipzdHIsIGludCAqcGludCk7CmV4dGVybiBjaGFyICpnZXRfb3B0aW9u c19SMGZiZmY5YjkoY2hhciAqc3RyLCBpbnQgbmludHMsIGludCAqaW50cyk7CmV4dGVybiB1bnNp Z25lZCBsb25nIGxvbmcgbWVtcGFyc2VfUjIzZjJkMzZmKGNoYXIgKnB0ciwgY2hhciAqKnJldHB0 cik7CmV4dGVybiB2b2lkIGRldl9wcm9iZV9sb2NrKHZvaWQpOwpleHRlcm4gdm9pZCBkZXZfcHJv YmVfdW5sb2NrKHZvaWQpOwoKZXh0ZXJuIGludCBzZXNzaW9uX29mX3BncnAoaW50IHBncnApOwoK IF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkpKSBpbnQgcHJpbnRrX1IxYjdkNDA3NChjb25zdCBj aGFyICogZm10LCAuLi4pCiAgICAgICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAx LCAyKSkpOwoKc3RhdGljIGlubGluZSB2b2lkIGNvbnNvbGVfc2lsZW50KHZvaWQpCnsKICAgICAg ICAoY29uc29sZV9wcmludGtbMF0pID0gMDsKfQoKc3RhdGljIGlubGluZSB2b2lkIGNvbnNvbGVf dmVyYm9zZSh2b2lkKQp7CiAgICAgICAgaWYgKChjb25zb2xlX3ByaW50a1swXSkpCiAgICAgICAg ICAgICAgICAoY29uc29sZV9wcmludGtbMF0pID0gMTU7Cn0KCmV4dGVybiB2b2lkIGJ1c3Rfc3Bp bmxvY2tzKGludCB5ZXMpOwpleHRlcm4gaW50IG9vcHNfaW5fcHJvZ3Jlc3M7CnN0cnVjdCBwdF9y ZWdzOwpleHRlcm4gdm9pZCAoKm5ldGR1bXBfZnVuY19SMTJlMzE1MjEpIChzdHJ1Y3QgcHRfcmVn cyAqcmVncyk7CmV4dGVybiBpbnQgbmV0ZHVtcF9tb2RlX1JkZjlmMDc1ZTsKCmV4dGVybiBpbnQg dGFpbnRlZDsKZXh0ZXJuIGNvbnN0IGNoYXIgKnByaW50X3RhaW50ZWQodm9pZCk7CgpleHRlcm4g dm9pZCBkdW1wX3N0YWNrX1I2YjJkYzA2MCh2b2lkKTsKCmV4dGVybiBpbnQgbG9va3VwX3N5bWJv bCh1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGNoYXIgKmJ1ZmZlciwgaW50IGJ1Zmxlbik7CiMgMTkx ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oIgpleHRlcm4g dm9pZCBfX291dF9vZl9saW5lX2J1Z19SOGIwZmQzYzUoaW50IGxpbmUpIF9fYXR0cmlidXRlX18o KG5vcmV0dXJuKSk7CgoKCgoKc3RydWN0IHN5c2luZm8gewogICAgICAgIGxvbmcgdXB0aW1lOwog ICAgICAgIHVuc2lnbmVkIGxvbmcgbG9hZHNbM107CiAgICAgICAgdW5zaWduZWQgbG9uZyB0b3Rh bHJhbTsKICAgICAgICB1bnNpZ25lZCBsb25nIGZyZWVyYW07CiAgICAgICAgdW5zaWduZWQgbG9u ZyBzaGFyZWRyYW07CiAgICAgICAgdW5zaWduZWQgbG9uZyBidWZmZXJyYW07CiAgICAgICAgdW5z aWduZWQgbG9uZyB0b3RhbHN3YXA7CiAgICAgICAgdW5zaWduZWQgbG9uZyBmcmVlc3dhcDsKICAg ICAgICB1bnNpZ25lZCBzaG9ydCBwcm9jczsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBwYWQ7CiAg ICAgICAgdW5zaWduZWQgbG9uZyB0b3RhbGhpZ2g7CiAgICAgICAgdW5zaWduZWQgbG9uZyBmcmVl aGlnaDsKICAgICAgICB1bnNpZ25lZCBpbnQgbWVtX3VuaXQ7CiAgICAgICAgY2hhciBfZlsyMC0y KnNpemVvZihsb25nKS1zaXplb2YoaW50KV07Cn07CiMgMTIwICJoL3NrZHJ2MXN0LmgiIDIKIyAx ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3N0cmluZy5oIiAxCiMgMTUg Ii91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvc3RyaW5nLmgiCmV4dGVybiBj aGFyICogX19fc3RydG9rX1IyOTgwNWMxMzsKZXh0ZXJuIGNoYXIgKiBzdHJwYnJrX1I5YTFkZmQ2 NShjb25zdCBjaGFyICosY29uc3QgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKiBzdHJ0b2tfUmVlOWMx YmQ0KGNoYXIgKixjb25zdCBjaGFyICopOwpleHRlcm4gY2hhciAqIHN0cnNlcF9SODVkZjliNmMo Y2hhciAqKixjb25zdCBjaGFyICopOwpleHRlcm4gX19rZXJuZWxfc2l6ZV90IHN0cnNwbl9SYzdl YzZjMjcoY29uc3QgY2hhciAqLGNvbnN0IGNoYXIgKik7CgoKCgoKIyAxICIvdXNyL3NyYy9saW51 eC0yLjQuMjAtOC9pbmNsdWRlL2FzbS9zdHJpbmcuaCIgMQojIDMzICIvdXNyL3NyYy9saW51eC0y LjQuMjAtOC9pbmNsdWRlL2FzbS9zdHJpbmcuaCIKc3RhdGljIGlubGluZSBjaGFyICogc3RyY3B5 KGNoYXIgKiBkZXN0LGNvbnN0IGNoYXIgKnNyYykKewppbnQgZDAsIGQxLCBkMjsKX19hc21fXyBf X3ZvbGF0aWxlX18oCiAgICAgICAgIjE6XHRsb2RzYlxuXHQiCiAgICAgICAgInN0b3NiXG5cdCIK ICAgICAgICAidGVzdGIgJSVhbCwlJWFsXG5cdCIKICAgICAgICAiam5lIDFiIgogICAgICAgIDog Ij0mUyIgKGQwKSwgIj0mRCIgKGQxKSwgIj0mYSIgKGQyKQogICAgICAgIDoiMCIgKHNyYyksIjEi IChkZXN0KSA6ICJtZW1vcnkiKTsKcmV0dXJuIGRlc3Q7Cn0KCgpzdGF0aWMgaW5saW5lIGNoYXIg KiBzdHJuY3B5KGNoYXIgKiBkZXN0LGNvbnN0IGNoYXIgKnNyYyxzaXplX3QgY291bnQpCnsKaW50 IGQwLCBkMSwgZDIsIGQzOwpfX2FzbV9fIF9fdm9sYXRpbGVfXygKICAgICAgICAiMTpcdGRlY2wg JTJcblx0IgogICAgICAgICJqcyAyZlxuXHQiCiAgICAgICAgImxvZHNiXG5cdCIKICAgICAgICAi c3Rvc2Jcblx0IgogICAgICAgICJ0ZXN0YiAlJWFsLCUlYWxcblx0IgogICAgICAgICJqbmUgMWJc blx0IgogICAgICAgICJyZXBcblx0IgogICAgICAgICJzdG9zYlxuIgogICAgICAgICIyOiIKICAg ICAgICA6ICI9JlMiIChkMCksICI9JkQiIChkMSksICI9JmMiIChkMiksICI9JmEiIChkMykKICAg ICAgICA6IjAiIChzcmMpLCIxIiAoZGVzdCksIjIiIChjb3VudCkgOiAibWVtb3J5Iik7CnJldHVy biBkZXN0Owp9CgoKc3RhdGljIGlubGluZSBjaGFyICogc3RyY2F0KGNoYXIgKiBkZXN0LGNvbnN0 IGNoYXIgKiBzcmMpCnsKaW50IGQwLCBkMSwgZDIsIGQzOwpfX2FzbV9fIF9fdm9sYXRpbGVfXygK ICAgICAgICAicmVwbmVcblx0IgogICAgICAgICJzY2FzYlxuXHQiCiAgICAgICAgImRlY2wgJTFc biIKICAgICAgICAiMTpcdGxvZHNiXG5cdCIKICAgICAgICAic3Rvc2Jcblx0IgogICAgICAgICJ0 ZXN0YiAlJWFsLCUlYWxcblx0IgogICAgICAgICJqbmUgMWIiCiAgICAgICAgOiAiPSZTIiAoZDAp LCAiPSZEIiAoZDEpLCAiPSZhIiAoZDIpLCAiPSZjIiAoZDMpCiAgICAgICAgOiAiMCIgKHNyYyks ICIxIiAoZGVzdCksICIyIiAoMCksICIzIiAoMHhmZmZmZmZmZik6Im1lbW9yeSIpOwpyZXR1cm4g ZGVzdDsKfQoKCnN0YXRpYyBpbmxpbmUgY2hhciAqIHN0cm5jYXQoY2hhciAqIGRlc3QsY29uc3Qg Y2hhciAqIHNyYyxzaXplX3QgY291bnQpCnsKaW50IGQwLCBkMSwgZDIsIGQzOwpfX2FzbV9fIF9f dm9sYXRpbGVfXygKICAgICAgICAicmVwbmVcblx0IgogICAgICAgICJzY2FzYlxuXHQiCiAgICAg ICAgImRlY2wgJTFcblx0IgogICAgICAgICJtb3ZsICU4LCUzXG4iCiAgICAgICAgIjE6XHRkZWNs ICUzXG5cdCIKICAgICAgICAianMgMmZcblx0IgogICAgICAgICJsb2RzYlxuXHQiCiAgICAgICAg InN0b3NiXG5cdCIKICAgICAgICAidGVzdGIgJSVhbCwlJWFsXG5cdCIKICAgICAgICAiam5lIDFi XG4iCiAgICAgICAgIjI6XHR4b3JsICUyLCUyXG5cdCIKICAgICAgICAic3Rvc2IiCiAgICAgICAg OiAiPSZTIiAoZDApLCAiPSZEIiAoZDEpLCAiPSZhIiAoZDIpLCAiPSZjIiAoZDMpCiAgICAgICAg OiAiMCIgKHNyYyksIjEiIChkZXN0KSwiMiIgKDApLCIzIiAoMHhmZmZmZmZmZiksICJnIiAoY291 bnQpCiAgICAgICAgOiAibWVtb3J5Iik7CnJldHVybiBkZXN0Owp9CgoKc3RhdGljIGlubGluZSBp bnQgc3RyY21wKGNvbnN0IGNoYXIgKiBjcyxjb25zdCBjaGFyICogY3QpCnsKaW50IGQwLCBkMTsK cmVnaXN0ZXIgaW50IF9fcmVzOwpfX2FzbV9fIF9fdm9sYXRpbGVfXygKICAgICAgICAiMTpcdGxv ZHNiXG5cdCIKICAgICAgICAic2Nhc2Jcblx0IgogICAgICAgICJqbmUgMmZcblx0IgogICAgICAg ICJ0ZXN0YiAlJWFsLCUlYWxcblx0IgogICAgICAgICJqbmUgMWJcblx0IgogICAgICAgICJ4b3Js ICUlZWF4LCUlZWF4XG5cdCIKICAgICAgICAiam1wIDNmXG4iCiAgICAgICAgIjI6XHRzYmJsICUl ZWF4LCUlZWF4XG5cdCIKICAgICAgICAib3JiICQxLCUlYWxcbiIKICAgICAgICAiMzoiCiAgICAg ICAgOiI9YSIgKF9fcmVzKSwgIj0mUyIgKGQwKSwgIj0mRCIgKGQxKQogICAgICAgICAgICAgICAg ICAgICA6IjEiIChjcyksIjIiIChjdCkpOwpyZXR1cm4gX19yZXM7Cn0KCgpzdGF0aWMgaW5saW5l IGludCBzdHJuY21wKGNvbnN0IGNoYXIgKiBjcyxjb25zdCBjaGFyICogY3Qsc2l6ZV90IGNvdW50 KQp7CnJlZ2lzdGVyIGludCBfX3JlczsKaW50IGQwLCBkMSwgZDI7Cl9fYXNtX18gX192b2xhdGls ZV9fKAogICAgICAgICIxOlx0ZGVjbCAlM1xuXHQiCiAgICAgICAgImpzIDJmXG5cdCIKICAgICAg ICAibG9kc2Jcblx0IgogICAgICAgICJzY2FzYlxuXHQiCiAgICAgICAgImpuZSAzZlxuXHQiCiAg ICAgICAgInRlc3RiICUlYWwsJSVhbFxuXHQiCiAgICAgICAgImpuZSAxYlxuIgogICAgICAgICIy Olx0eG9ybCAlJWVheCwlJWVheFxuXHQiCiAgICAgICAgImptcCA0ZlxuIgogICAgICAgICIzOlx0 c2JibCAlJWVheCwlJWVheFxuXHQiCiAgICAgICAgIm9yYiAkMSwlJWFsXG4iCiAgICAgICAgIjQ6 IgogICAgICAgICAgICAgICAgICAgICA6Ij1hIiAoX19yZXMpLCAiPSZTIiAoZDApLCAiPSZEIiAo ZDEpLCAiPSZjIiAoZDIpCiAgICAgICAgICAgICAgICAgICAgIDoiMSIgKGNzKSwiMiIgKGN0KSwi MyIgKGNvdW50KSk7CnJldHVybiBfX3JlczsKfQoKCnN0YXRpYyBpbmxpbmUgY2hhciAqIHN0cmNo cihjb25zdCBjaGFyICogcywgaW50IGMpCnsKaW50IGQwOwpyZWdpc3RlciBjaGFyICogX19yZXM7 Cl9fYXNtX18gX192b2xhdGlsZV9fKAogICAgICAgICJtb3ZiICUlYWwsJSVhaFxuIgogICAgICAg ICIxOlx0bG9kc2Jcblx0IgogICAgICAgICJjbXBiICUlYWgsJSVhbFxuXHQiCiAgICAgICAgImpl IDJmXG5cdCIKICAgICAgICAidGVzdGIgJSVhbCwlJWFsXG5cdCIKICAgICAgICAiam5lIDFiXG5c dCIKICAgICAgICAibW92bCAkMSwlMVxuIgogICAgICAgICIyOlx0bW92bCAlMSwlMFxuXHQiCiAg ICAgICAgImRlY2wgJTAiCiAgICAgICAgOiI9YSIgKF9fcmVzKSwgIj0mUyIgKGQwKSA6ICIxIiAo cyksIjAiIChjKSk7CnJldHVybiBfX3JlczsKfQoKCnN0YXRpYyBpbmxpbmUgY2hhciAqIHN0cnJj aHIoY29uc3QgY2hhciAqIHMsIGludCBjKQp7CmludCBkMCwgZDE7CnJlZ2lzdGVyIGNoYXIgKiBf X3JlczsKX19hc21fXyBfX3ZvbGF0aWxlX18oCiAgICAgICAgIm1vdmIgJSVhbCwlJWFoXG4iCiAg ICAgICAgIjE6XHRsb2RzYlxuXHQiCiAgICAgICAgImNtcGIgJSVhaCwlJWFsXG5cdCIKICAgICAg ICAiam5lIDJmXG5cdCIKICAgICAgICAibGVhbCAtMSglJWVzaSksJTBcbiIKICAgICAgICAiMjpc dHRlc3RiICUlYWwsJSVhbFxuXHQiCiAgICAgICAgImpuZSAxYiIKICAgICAgICA6Ij1nIiAoX19y ZXMpLCAiPSZTIiAoZDApLCAiPSZhIiAoZDEpIDoiMCIgKDApLCIxIiAocyksIjIiIChjKSk7CnJl dHVybiBfX3JlczsKfQoKCnN0YXRpYyBpbmxpbmUgc2l6ZV90IHN0cmxlbihjb25zdCBjaGFyICog cykKewppbnQgZDA7CnJlZ2lzdGVyIGludCBfX3JlczsKX19hc21fXyBfX3ZvbGF0aWxlX18oCiAg ICAgICAgInJlcG5lXG5cdCIKICAgICAgICAic2Nhc2Jcblx0IgogICAgICAgICJub3RsICUwXG5c dCIKICAgICAgICAiZGVjbCAlMCIKICAgICAgICA6Ij1jIiAoX19yZXMpLCAiPSZEIiAoZDApIDoi MSIgKHMpLCJhIiAoMCksICIwIiAoMHhmZmZmZmZmZikpOwpyZXR1cm4gX19yZXM7Cn0KCnN0YXRp YyBpbmxpbmUgdm9pZCAqIF9fbWVtY3B5KHZvaWQgKiB0bywgY29uc3Qgdm9pZCAqIGZyb20sIHNp emVfdCBuKQp7CmludCBkMCwgZDEsIGQyOwpfX2FzbV9fIF9fdm9sYXRpbGVfXygKICAgICAgICAi cmVwIDsgbW92c2xcblx0IgogICAgICAgICJ0ZXN0YiAkMiwlYjRcblx0IgogICAgICAgICJqZSAx ZlxuXHQiCiAgICAgICAgIm1vdnN3XG4iCiAgICAgICAgIjE6XHR0ZXN0YiAkMSwlYjRcblx0Igog ICAgICAgICJqZSAyZlxuXHQiCiAgICAgICAgIm1vdnNiXG4iCiAgICAgICAgIjI6IgogICAgICAg IDogIj0mYyIgKGQwKSwgIj0mRCIgKGQxKSwgIj0mUyIgKGQyKQogICAgICAgIDoiMCIgKG4vNCks ICJxIiAobiksIjEiICgobG9uZykgdG8pLCIyIiAoKGxvbmcpIGZyb20pCiAgICAgICAgOiAibWVt b3J5Iik7CnJldHVybiAodG8pOwp9CgoKCgoKc3RhdGljIGlubGluZSB2b2lkICogX19jb25zdGFu dF9tZW1jcHkodm9pZCAqIHRvLCBjb25zdCB2b2lkICogZnJvbSwgc2l6ZV90IG4pCnsKICAgICAg ICBzd2l0Y2ggKG4pIHsKICAgICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuIHRvOwogICAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAg ICAgICAgICAqKHVuc2lnbmVkIGNoYXIgKil0byA9ICooY29uc3QgdW5zaWduZWQgY2hhciAqKWZy b207CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0bzsKICAgICAgICAgICAgICAgIGNh c2UgMjoKICAgICAgICAgICAgICAgICAgICAgICAgKih1bnNpZ25lZCBzaG9ydCAqKXRvID0gKihj b25zdCB1bnNpZ25lZCBzaG9ydCAqKWZyb207CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy biB0bzsKICAgICAgICAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgICAgICAgICAgICAgKih1 bnNpZ25lZCBzaG9ydCAqKXRvID0gKihjb25zdCB1bnNpZ25lZCBzaG9ydCAqKWZyb207CiAgICAg ICAgICAgICAgICAgICAgICAgICooMisodW5zaWduZWQgY2hhciAqKXRvKSA9ICooMisoY29uc3Qg dW5zaWduZWQgY2hhciAqKWZyb20pOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG87 CiAgICAgICAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgICAgICAgICAgICAgICoodW5zaWdu ZWQgbG9uZyAqKXRvID0gKihjb25zdCB1bnNpZ25lZCBsb25nICopZnJvbTsKICAgICAgICAgICAg ICAgICAgICAgICAgcmV0dXJuIHRvOwogICAgICAgICAgICAgICAgY2FzZSA2OgogICAgICAgICAg ICAgICAgICAgICAgICAqKHVuc2lnbmVkIGxvbmcgKil0byA9ICooY29uc3QgdW5zaWduZWQgbG9u ZyAqKWZyb207CiAgICAgICAgICAgICAgICAgICAgICAgICooMisodW5zaWduZWQgc2hvcnQgKil0 bykgPSAqKDIrKGNvbnN0IHVuc2lnbmVkIHNob3J0ICopZnJvbSk7CiAgICAgICAgICAgICAgICAg ICAgICAgIHJldHVybiB0bzsKICAgICAgICAgICAgICAgIGNhc2UgODoKICAgICAgICAgICAgICAg ICAgICAgICAgKih1bnNpZ25lZCBsb25nICopdG8gPSAqKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilm cm9tOwogICAgICAgICAgICAgICAgICAgICAgICAqKDErKHVuc2lnbmVkIGxvbmcgKil0bykgPSAq KDErKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilmcm9tKTsKICAgICAgICAgICAgICAgICAgICAgICAg cmV0dXJuIHRvOwogICAgICAgICAgICAgICAgY2FzZSAxMjoKICAgICAgICAgICAgICAgICAgICAg ICAgKih1bnNpZ25lZCBsb25nICopdG8gPSAqKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilmcm9tOwog ICAgICAgICAgICAgICAgICAgICAgICAqKDErKHVuc2lnbmVkIGxvbmcgKil0bykgPSAqKDErKGNv bnN0IHVuc2lnbmVkIGxvbmcgKilmcm9tKTsKICAgICAgICAgICAgICAgICAgICAgICAgKigyKyh1 bnNpZ25lZCBsb25nICopdG8pID0gKigyKyhjb25zdCB1bnNpZ25lZCBsb25nICopZnJvbSk7CiAg ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0bzsKICAgICAgICAgICAgICAgIGNhc2UgMTY6 CiAgICAgICAgICAgICAgICAgICAgICAgICoodW5zaWduZWQgbG9uZyAqKXRvID0gKihjb25zdCB1 bnNpZ25lZCBsb25nICopZnJvbTsKICAgICAgICAgICAgICAgICAgICAgICAgKigxKyh1bnNpZ25l ZCBsb25nICopdG8pID0gKigxKyhjb25zdCB1bnNpZ25lZCBsb25nICopZnJvbSk7CiAgICAgICAg ICAgICAgICAgICAgICAgICooMisodW5zaWduZWQgbG9uZyAqKXRvKSA9ICooMisoY29uc3QgdW5z aWduZWQgbG9uZyAqKWZyb20pOwogICAgICAgICAgICAgICAgICAgICAgICAqKDMrKHVuc2lnbmVk IGxvbmcgKil0bykgPSAqKDMrKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilmcm9tKTsKICAgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIHRvOwogICAgICAgICAgICAgICAgY2FzZSAyMDoKICAgICAg ICAgICAgICAgICAgICAgICAgKih1bnNpZ25lZCBsb25nICopdG8gPSAqKGNvbnN0IHVuc2lnbmVk IGxvbmcgKilmcm9tOwogICAgICAgICAgICAgICAgICAgICAgICAqKDErKHVuc2lnbmVkIGxvbmcg Kil0bykgPSAqKDErKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilmcm9tKTsKICAgICAgICAgICAgICAg ICAgICAgICAgKigyKyh1bnNpZ25lZCBsb25nICopdG8pID0gKigyKyhjb25zdCB1bnNpZ25lZCBs b25nICopZnJvbSk7CiAgICAgICAgICAgICAgICAgICAgICAgICooMysodW5zaWduZWQgbG9uZyAq KXRvKSA9ICooMysoY29uc3QgdW5zaWduZWQgbG9uZyAqKWZyb20pOwogICAgICAgICAgICAgICAg ICAgICAgICAqKDQrKHVuc2lnbmVkIGxvbmcgKil0bykgPSAqKDQrKGNvbnN0IHVuc2lnbmVkIGxv bmcgKilmcm9tKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvOwogICAgICAgIH0K CgoKCgoKCnsKICAgICAgICBpbnQgZDAsIGQxLCBkMjsKICAgICAgICBzd2l0Y2ggKG4gJSA0KSB7 CiAgICAgICAgICAgICAgICBjYXNlIDA6IF9fYXNtX18gX192b2xhdGlsZV9fKCAicmVwIDsgbW92 c2wiICIiIDogIj0mYyIgKGQwKSwgIj0mRCIgKGQxKSwgIj0mUyIgKGQyKSA6ICIwIiAobi80KSwi MSIgKChsb25nKSB0byksIjIiICgobG9uZykgZnJvbSkgOiAibWVtb3J5Iik7OyByZXR1cm4gdG87 CiAgICAgICAgICAgICAgICBjYXNlIDE6IF9fYXNtX18gX192b2xhdGlsZV9fKCAicmVwIDsgbW92 c2wiICJcblx0bW92c2IiIDogIj0mYyIgKGQwKSwgIj0mRCIgKGQxKSwgIj0mUyIgKGQyKSA6ICIw IiAobi80KSwiMSIgKChsb25nKSB0byksIjIiICgobG9uZykgZnJvbSkgOiAibWVtb3J5Iik7OyBy ZXR1cm4gdG87CiAgICAgICAgICAgICAgICBjYXNlIDI6IF9fYXNtX18gX192b2xhdGlsZV9fKCAi cmVwIDsgbW92c2wiICJcblx0bW92c3ciIDogIj0mYyIgKGQwKSwgIj0mRCIgKGQxKSwgIj0mUyIg KGQyKSA6ICIwIiAobi80KSwiMSIgKChsb25nKSB0byksIjIiICgobG9uZykgZnJvbSkgOiAibWVt b3J5Iik7OyByZXR1cm4gdG87CiAgICAgICAgICAgICAgICBkZWZhdWx0OiBfX2FzbV9fIF9fdm9s YXRpbGVfXyggInJlcCA7IG1vdnNsIiAiXG5cdG1vdnN3XG5cdG1vdnNiIiA6ICI9JmMiIChkMCks ICI9JkQiIChkMSksICI9JlMiIChkMikgOiAiMCIgKG4vNCksIjEiICgobG9uZykgdG8pLCIyIiAo KGxvbmcpIGZyb20pIDogIm1lbW9yeSIpOzsgcmV0dXJuIHRvOwogICAgICAgIH0KfQoKCn0KIyAz MDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvYXNtL3N0cmluZy5oIgpleHRlcm4g dm9pZCBfX3N0cnVjdF9jcHlfYnVnICh2b2lkKTsKIyAzMTEgIi91c3Ivc3JjL2xpbnV4LTIuNC4y MC04L2luY2x1ZGUvYXNtL3N0cmluZy5oIgpzdGF0aWMgaW5saW5lIHZvaWQgKiBtZW1tb3ZlKHZv aWQgKiBkZXN0LGNvbnN0IHZvaWQgKiBzcmMsIHNpemVfdCBuKQp7CmludCBkMCwgZDEsIGQyOwpp ZiAoZGVzdDxzcmMpCl9fYXNtX18gX192b2xhdGlsZV9fKAogICAgICAgICJyZXBcblx0IgogICAg ICAgICJtb3ZzYiIKICAgICAgICA6ICI9JmMiIChkMCksICI9JlMiIChkMSksICI9JkQiIChkMikK ICAgICAgICA6IjAiIChuKSwiMSIgKHNyYyksIjIiIChkZXN0KQogICAgICAgIDogIm1lbW9yeSIp OwplbHNlCl9fYXNtX18gX192b2xhdGlsZV9fKAogICAgICAgICJzdGRcblx0IgogICAgICAgICJy ZXBcblx0IgogICAgICAgICJtb3ZzYlxuXHQiCiAgICAgICAgImNsZCIKICAgICAgICA6ICI9JmMi IChkMCksICI9JlMiIChkMSksICI9JkQiIChkMikKICAgICAgICA6IjAiIChuKSwKICAgICAgICAg IjEiIChuLTErKGNvbnN0IGNoYXIgKilzcmMpLAogICAgICAgICAiMiIgKG4tMSsoY2hhciAqKWRl c3QpCiAgICAgICAgOiJtZW1vcnkiKTsKcmV0dXJuIGRlc3Q7Cn0KCgoKCnN0YXRpYyBpbmxpbmUg dm9pZCAqIG1lbWNocihjb25zdCB2b2lkICogY3MsaW50IGMsc2l6ZV90IGNvdW50KQp7CmludCBk MDsKcmVnaXN0ZXIgdm9pZCAqIF9fcmVzOwppZiAoIWNvdW50KQogICAgICAgIHJldHVybiAoKHZv aWQgKikwKTsKX19hc21fXyBfX3ZvbGF0aWxlX18oCiAgICAgICAgInJlcG5lXG5cdCIKICAgICAg ICAic2Nhc2Jcblx0IgogICAgICAgICJqZSAxZlxuXHQiCiAgICAgICAgIm1vdmwgJDEsJTBcbiIK ICAgICAgICAiMTpcdGRlY2wgJTAiCiAgICAgICAgOiI9RCIgKF9fcmVzKSwgIj0mYyIgKGQwKSA6 ICJhIiAoYyksIjAiIChjcyksIjEiIChjb3VudCkpOwpyZXR1cm4gX19yZXM7Cn0KCnN0YXRpYyBp bmxpbmUgdm9pZCAqIF9fbWVtc2V0X2dlbmVyaWModm9pZCAqIHMsIGNoYXIgYyxzaXplX3QgY291 bnQpCnsKaW50IGQwLCBkMTsKX19hc21fXyBfX3ZvbGF0aWxlX18oCiAgICAgICAgInJlcFxuXHQi CiAgICAgICAgInN0b3NiIgogICAgICAgIDogIj0mYyIgKGQwKSwgIj0mRCIgKGQxKQogICAgICAg IDoiYSIgKGMpLCIxIiAocyksIjAiIChjb3VudCkKICAgICAgICA6Im1lbW9yeSIpOwpyZXR1cm4g czsKfQojIDM3NCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9hc20vc3RyaW5nLmgi CnN0YXRpYyBpbmxpbmUgdm9pZCAqIF9fY29uc3RhbnRfY19tZW1zZXQodm9pZCAqIHMsIHVuc2ln bmVkIGxvbmcgYywgc2l6ZV90IGNvdW50KQp7CmludCBkMCwgZDE7Cl9fYXNtX18gX192b2xhdGls ZV9fKAogICAgICAgICJyZXAgOyBzdG9zbFxuXHQiCiAgICAgICAgInRlc3RiICQyLCViM1xuXHQi CiAgICAgICAgImplIDFmXG5cdCIKICAgICAgICAic3Rvc3dcbiIKICAgICAgICAiMTpcdHRlc3Ri ICQxLCViM1xuXHQiCiAgICAgICAgImplIDJmXG5cdCIKICAgICAgICAic3Rvc2JcbiIKICAgICAg ICAiMjoiCiAgICAgICAgOiAiPSZjIiAoZDApLCAiPSZEIiAoZDEpCiAgICAgICAgOiJhIiAoYyks ICJxIiAoY291bnQpLCAiMCIgKGNvdW50LzQpLCAiMSIgKChsb25nKSBzKQogICAgICAgIDoibWVt b3J5Iik7CnJldHVybiAocyk7Cn0KCgoKc3RhdGljIGlubGluZSBzaXplX3Qgc3Rybmxlbihjb25z dCBjaGFyICogcywgc2l6ZV90IGNvdW50KQp7CmludCBkMDsKcmVnaXN0ZXIgaW50IF9fcmVzOwpf X2FzbV9fIF9fdm9sYXRpbGVfXygKICAgICAgICAibW92bCAlMiwlMFxuXHQiCiAgICAgICAgImpt cCAyZlxuIgogICAgICAgICIxOlx0Y21wYiAkMCwoJTApXG5cdCIKICAgICAgICAiamUgM2Zcblx0 IgogICAgICAgICJpbmNsICUwXG4iCiAgICAgICAgIjI6XHRkZWNsICUxXG5cdCIKICAgICAgICAi Y21wbCAkLTEsJTFcblx0IgogICAgICAgICJqbmUgMWJcbiIKICAgICAgICAiMzpcdHN1YmwgJTIs JTAiCiAgICAgICAgOiI9YSIgKF9fcmVzKSwgIj0mZCIgKGQwKQogICAgICAgIDoiYyIgKHMpLCIx IiAoY291bnQpKTsKcmV0dXJuIF9fcmVzOwp9CgoKCgpleHRlcm4gY2hhciAqc3Ryc3RyX1IxZTZk MjZhOChjb25zdCBjaGFyICpjcywgY29uc3QgY2hhciAqY3QpOwoKCgoKCnN0YXRpYyBpbmxpbmUg dm9pZCAqIF9fY29uc3RhbnRfY19hbmRfY291bnRfbWVtc2V0KHZvaWQgKiBzLCB1bnNpZ25lZCBs b25nIHBhdHRlcm4sIHNpemVfdCBjb3VudCkKewogICAgICAgIHN3aXRjaCAoY291bnQpIHsKICAg ICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHM7CiAg ICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgICAgICoodW5zaWduZWQg Y2hhciAqKXMgPSBwYXR0ZXJuOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gczsKICAg ICAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICAgICAgICAgICAgKih1bnNpZ25lZCBz aG9ydCAqKXMgPSBwYXR0ZXJuOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gczsKICAg ICAgICAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgICAgICAgICAgICAgKih1bnNpZ25lZCBz aG9ydCAqKXMgPSBwYXR0ZXJuOwogICAgICAgICAgICAgICAgICAgICAgICAqKDIrKHVuc2lnbmVk IGNoYXIgKilzKSA9IHBhdHRlcm47CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzOwog ICAgICAgICAgICAgICAgY2FzZSA0OgogICAgICAgICAgICAgICAgICAgICAgICAqKHVuc2lnbmVk IGxvbmcgKilzID0gcGF0dGVybjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHM7CiAg ICAgICAgfQoKCgoKCgoKewogICAgICAgIGludCBkMCwgZDE7CiAgICAgICAgc3dpdGNoIChjb3Vu dCAlIDQpIHsKICAgICAgICAgICAgICAgIGNhc2UgMDogX19hc21fXyBfX3ZvbGF0aWxlX18oICJy ZXAgOyBzdG9zbCIgIiIgOiAiPSZjIiAoZDApLCAiPSZEIiAoZDEpIDogImEiIChwYXR0ZXJuKSwi MCIgKGNvdW50LzQpLCIxIiAoKGxvbmcpIHMpIDogIm1lbW9yeSIpOyByZXR1cm4gczsKICAgICAg ICAgICAgICAgIGNhc2UgMTogX19hc21fXyBfX3ZvbGF0aWxlX18oICJyZXAgOyBzdG9zbCIgIlxu XHRzdG9zYiIgOiAiPSZjIiAoZDApLCAiPSZEIiAoZDEpIDogImEiIChwYXR0ZXJuKSwiMCIgKGNv dW50LzQpLCIxIiAoKGxvbmcpIHMpIDogIm1lbW9yeSIpOyByZXR1cm4gczsKICAgICAgICAgICAg ICAgIGNhc2UgMjogX19hc21fXyBfX3ZvbGF0aWxlX18oICJyZXAgOyBzdG9zbCIgIlxuXHRzdG9z dyIgOiAiPSZjIiAoZDApLCAiPSZEIiAoZDEpIDogImEiIChwYXR0ZXJuKSwiMCIgKGNvdW50LzQp LCIxIiAoKGxvbmcpIHMpIDogIm1lbW9yeSIpOyByZXR1cm4gczsKICAgICAgICAgICAgICAgIGRl ZmF1bHQ6IF9fYXNtX18gX192b2xhdGlsZV9fKCAicmVwIDsgc3Rvc2wiICJcblx0c3Rvc3dcblx0 c3Rvc2IiIDogIj0mYyIgKGQwKSwgIj0mRCIgKGQxKSA6ICJhIiAocGF0dGVybiksIjAiIChjb3Vu dC80KSwiMSIgKChsb25nKSBzKSA6ICJtZW1vcnkiKTsgcmV0dXJuIHM7CiAgICAgICAgfQp9CgoK fQojIDQ4MSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9hc20vc3RyaW5nLmgiCnN0 YXRpYyBpbmxpbmUgdm9pZCAqIG1lbXNjYW4odm9pZCAqIGFkZHIsIGludCBjLCBzaXplX3Qgc2l6 ZSkKewogICAgICAgIGlmICghc2l6ZSkKICAgICAgICAgICAgICAgIHJldHVybiBhZGRyOwogICAg ICAgIF9fYXNtX18oInJlcG56OyBzY2FzYlxuXHQiCiAgICAgICAgICAgICAgICAiam56IDFmXG5c dCIKICAgICAgICAgICAgICAgICJkZWMgJSVlZGlcbiIKICAgICAgICAgICAgICAgICIxOiIKICAg ICAgICAgICAgICAgIDogIj1EIiAoYWRkciksICI9YyIgKHNpemUpCiAgICAgICAgICAgICAgICA6 ICIwIiAoYWRkciksICIxIiAoc2l6ZSksICJhIiAoYykpOwogICAgICAgIHJldHVybiBhZGRyOwp9 CiMgMjYgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvc3RyaW5nLmgiIDIK IyA0NiAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9zdHJpbmcuaCIKZXh0 ZXJuIGludCBzdHJuaWNtcF9SNGU4MzBhM2UoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIF9f a2VybmVsX3NpemVfdCk7CiMgNzcgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGlu dXgvc3RyaW5nLmgiCmV4dGVybiBpbnQgX19idWlsdGluX21lbWNtcChjb25zdCB2b2lkICosY29u c3Qgdm9pZCAqLF9fa2VybmVsX3NpemVfdCk7CiMgMTIxICJoL3NrZHJ2MXN0LmgiIDIKIyAxICIv dXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2Vycm5vLmgiIDEKCgoKIyAxICIv dXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2FzbS9lcnJuby5oIiAxCiMgNSAiL3Vzci9z cmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9lcnJuby5oIiAyCiMgMTIyICJoL3NrZHJ2 MXN0LmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2lvcG9y dC5oIiAxCiMgMTUgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvaW9wb3J0 LmgiCnN0cnVjdCByZXNvdXJjZSB7CiAgICAgICAgY29uc3QgY2hhciAqbmFtZTsKICAgICAgICB1 bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKICAg ICAgICBzdHJ1Y3QgcmVzb3VyY2UgKnBhcmVudCwgKnNpYmxpbmcsICpjaGlsZDsKfTsKCnN0cnVj dCByZXNvdXJjZV9saXN0IHsKICAgICAgICBzdHJ1Y3QgcmVzb3VyY2VfbGlzdCAqbmV4dDsKICAg ICAgICBzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKICAgICAgICBzdHJ1Y3QgcGNpX2RldiAqZGV2Owp9 OwojIDgzICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2lvcG9ydC5oIgpl eHRlcm4gc3RydWN0IHJlc291cmNlIGlvcG9ydF9yZXNvdXJjZV9SODY1ZWJjY2Q7CmV4dGVybiBz dHJ1Y3QgcmVzb3VyY2UgaW9tZW1fcmVzb3VyY2VfUjllZmVkNWFmOwoKZXh0ZXJuIGludCBnZXRf cmVzb3VyY2VfbGlzdChzdHJ1Y3QgcmVzb3VyY2UgKiwgY2hhciAqYnVmLCBpbnQgc2l6ZSk7Cgpl eHRlcm4gaW50IGNoZWNrX3Jlc291cmNlX1JkOGQ3OGFhYShzdHJ1Y3QgcmVzb3VyY2UgKnJvb3Qs IHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwpleHRlcm4gaW50IHJlcXVlc3RfcmVzb3Vy Y2VfUjQxNjg1Y2ZiKHN0cnVjdCByZXNvdXJjZSAqcm9vdCwgc3RydWN0IHJlc291cmNlICpuZXcp OwpleHRlcm4gaW50IHJlbGVhc2VfcmVzb3VyY2VfUjgxNGU4NDA3KHN0cnVjdCByZXNvdXJjZSAq bmV3KTsKZXh0ZXJuIGludCBhbGxvY2F0ZV9yZXNvdXJjZV9SYjg1OWMzZDAoc3RydWN0IHJlc291 cmNlICpyb290LCBzdHJ1Y3QgcmVzb3VyY2UgKm5ldywKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1bnNpZ25lZCBsb25nIHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z aWduZWQgbG9uZyBtaW4sIHVuc2lnbmVkIGxvbmcgbWF4LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHVuc2lnbmVkIGxvbmcgYWxpZ24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dm9pZCAoKmFsaWduZikodm9pZCAqLCBzdHJ1Y3QgcmVzb3VyY2UgKiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25n KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICphbGlnbmZfZGF0YSk7CgoKCgoK ZXh0ZXJuIHN0cnVjdCByZXNvdXJjZSAqIF9fcmVxdWVzdF9yZWdpb25fUjFhMWE0ZjA5KHN0cnVj dCByZXNvdXJjZSAqLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIG4sIGNvbnN0 IGNoYXIgKm5hbWUpOwoKCgoKCgoKZXh0ZXJuIGludCBfX2NoZWNrX3JlZ2lvbl9SZjFkMGNkYWIo c3RydWN0IHJlc291cmNlICosIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwpleHRlcm4g dm9pZCBfX3JlbGVhc2VfcmVnaW9uX1JkNDk1MDFkNChzdHJ1Y3QgcmVzb3VyY2UgKiwgdW5zaWdu ZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CgoKCgoKZXh0ZXJuIHZvaWQgYXV0b2lycV9zZXR1cF9S NWE1YTIyODAoaW50IHdhaXR0aW1lKTsKZXh0ZXJuIGludCBhdXRvaXJxX3JlcG9ydF9SODQ1MzBj NTMoaW50IHdhaXR0aW1lKTsKIyAxMjMgImgvc2tkcnYxc3QuaCIgMgojIDEgIi91c3Ivc3JjL2xp bnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvc2xhYi5oIiAxCiMgMTIgIi91c3Ivc3JjL2xpbnV4 LTIuNC4yMC04L2luY2x1ZGUvbGludXgvc2xhYi5oIgp0eXBlZGVmIHN0cnVjdCBrbWVtX2NhY2hl X3Mga21lbV9jYWNoZV90OwoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xp bnV4L21tLmgiIDEKIyAyMiAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9t bS5oIgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvc2NoZWQuaCIg MQoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvYXNtL3BhcmFtLmgiIDEK IyA1ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiIDIKCmV4 dGVybiB1bnNpZ25lZCBsb25nIGV2ZW50X1I3YjE2YzM0NDsKCgoKIyAxICIvdXNyL3NyYy9saW51 eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaCIgMQoKCgojIDEgIi91c3Ivc3JjL2xp bnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvY2FwYWJpbGl0eS5oIiAxCiMgMTcgIi91c3Ivc3Jj L2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvY2FwYWJpbGl0eS5oIgojIDEgIi91c3Ivc3Jj L2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvZnMuaCIgMQojIDExICIvdXNyL3NyYy9saW51 eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2ZzLmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIw LTgvaW5jbHVkZS9saW51eC9saW1pdHMuaCIgMQojIDEyICIvdXNyL3NyYy9saW51eC0yLjQuMjAt OC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNs dWRlL2xpbnV4L3dhaXQuaCIgMQojIDE0ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRl L2xpbnV4L3dhaXQuaCIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4 L2xpc3QuaCIgMQoKCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51 eC9wcmVmZXRjaC5oIiAxCiMgMTMgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGlu dXgvcHJlZmV0Y2guaCIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2FzbS9w cm9jZXNzb3IuaCIgMQojIDEwICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2FzbS9w cm9jZXNzb3IuaCIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2FzbS92bTg2 LmgiIDEKIyA2OCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9hc20vdm04Ni5oIgpz dHJ1Y3Qgdm04Nl9yZWdzIHsKCgoKICAgICAgICBsb25nIGVieDsKICAgICAgICBsb25nIGVjeDsK ICAgICAgICBsb25nIGVkeDsKICAgICAgICBsb25nIGVzaTsKICAgICAgICBsb25nIGVkaTsKICAg ICAgICBsb25nIGVicDsKICAgICAgICBsb25nIGVheDsKICAgICAgICBsb25nIF9fbnVsbF9kczsK ICAgICAgICBsb25nIF9fbnVsbF9lczsKICAgICAgICBsb25nIF9fbnVsbF9mczsKICAgICAgICBs b25nIF9fbnVsbF9nczsKICAgICAgICBsb25nIG9yaWdfZWF4OwogICAgICAgIGxvbmcgZWlwOwog ICAgICAgIHVuc2lnbmVkIHNob3J0IGNzLCBfX2NzaDsKICAgICAgICBsb25nIGVmbGFnczsKICAg ICAgICBsb25nIGVzcDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzcywgX19zc2g7CgoKCiAgICAg ICAgdW5zaWduZWQgc2hvcnQgZXMsIF9fZXNoOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGRzLCBf X2RzaDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBmcywgX19mc2g7CiAgICAgICAgdW5zaWduZWQg c2hvcnQgZ3MsIF9fZ3NoOwp9OwoKc3RydWN0IHJldmVjdG9yZWRfc3RydWN0IHsKICAgICAgICB1 bnNpZ25lZCBsb25nIF9fbWFwWzhdOwp9OwoKc3RydWN0IHZtODZfc3RydWN0IHsKICAgICAgICBz dHJ1Y3Qgdm04Nl9yZWdzIHJlZ3M7CiAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKICAgICAg ICB1bnNpZ25lZCBsb25nIHNjcmVlbl9iaXRtYXA7CiAgICAgICAgdW5zaWduZWQgbG9uZyBjcHVf dHlwZTsKICAgICAgICBzdHJ1Y3QgcmV2ZWN0b3JlZF9zdHJ1Y3QgaW50X3JldmVjdG9yZWQ7CiAg ICAgICAgc3RydWN0IHJldmVjdG9yZWRfc3RydWN0IGludDIxX3JldmVjdG9yZWQ7Cn07CgoKCgoK CnN0cnVjdCB2bTg2cGx1c19pbmZvX3N0cnVjdCB7CiAgICAgICAgdW5zaWduZWQgbG9uZyBmb3Jj ZV9yZXR1cm5fZm9yX3BpYzoxOwogICAgICAgIHVuc2lnbmVkIGxvbmcgdm04NmRiZ19hY3RpdmU6 MTsKICAgICAgICB1bnNpZ25lZCBsb25nIHZtODZkYmdfVEZwZW5kaWc6MTsKICAgICAgICB1bnNp Z25lZCBsb25nIHVudXNlZDoyODsKICAgICAgICB1bnNpZ25lZCBsb25nIGlzX3ZtODZwdXM6MTsK ICAgICAgICB1bnNpZ25lZCBjaGFyIHZtODZkYmdfaW50eHh0YWJbMzJdOwp9OwoKc3RydWN0IHZt ODZwbHVzX3N0cnVjdCB7CiAgICAgICAgc3RydWN0IHZtODZfcmVncyByZWdzOwogICAgICAgIHVu c2lnbmVkIGxvbmcgZmxhZ3M7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzY3JlZW5fYml0bWFwOwog ICAgICAgIHVuc2lnbmVkIGxvbmcgY3B1X3R5cGU7CiAgICAgICAgc3RydWN0IHJldmVjdG9yZWRf c3RydWN0IGludF9yZXZlY3RvcmVkOwogICAgICAgIHN0cnVjdCByZXZlY3RvcmVkX3N0cnVjdCBp bnQyMV9yZXZlY3RvcmVkOwogICAgICAgIHN0cnVjdCB2bTg2cGx1c19pbmZvX3N0cnVjdCB2bTg2 cGx1czsKfTsKIyAxNDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvYXNtL3ZtODYu aCIKc3RydWN0IGtlcm5lbF92bTg2X3JlZ3MgewoKCgogICAgICAgIGxvbmcgZWJ4OwogICAgICAg IGxvbmcgZWN4OwogICAgICAgIGxvbmcgZWR4OwogICAgICAgIGxvbmcgZXNpOwogICAgICAgIGxv bmcgZWRpOwogICAgICAgIGxvbmcgZWJwOwogICAgICAgIGxvbmcgZWF4OwogICAgICAgIGxvbmcg X19udWxsX2RzOwogICAgICAgIGxvbmcgX19udWxsX2VzOwogICAgICAgIGxvbmcgb3JpZ19lYXg7 CiAgICAgICAgbG9uZyBlaXA7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgY3MsIF9fY3NoOwogICAg ICAgIGxvbmcgZWZsYWdzOwogICAgICAgIGxvbmcgZXNwOwogICAgICAgIHVuc2lnbmVkIHNob3J0 IHNzLCBfX3NzaDsKCgoKICAgICAgICB1bnNpZ25lZCBzaG9ydCBlcywgX19lc2g7CiAgICAgICAg dW5zaWduZWQgc2hvcnQgZHMsIF9fZHNoOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGZzLCBfX2Zz aDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBncywgX19nc2g7Cn07CgpzdHJ1Y3Qga2VybmVsX3Zt ODZfc3RydWN0IHsKICAgICAgICBzdHJ1Y3Qga2VybmVsX3ZtODZfcmVncyByZWdzOwojIDE4NCAi L3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9hc20vdm04Ni5oIgogICAgICAgIHVuc2ln bmVkIGxvbmcgZmxhZ3M7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzY3JlZW5fYml0bWFwOwogICAg ICAgIHVuc2lnbmVkIGxvbmcgY3B1X3R5cGU7CiAgICAgICAgc3RydWN0IHJldmVjdG9yZWRfc3Ry dWN0IGludF9yZXZlY3RvcmVkOwogICAgICAgIHN0cnVjdCByZXZlY3RvcmVkX3N0cnVjdCBpbnQy MV9yZXZlY3RvcmVkOwogICAgICAgIHN0cnVjdCB2bTg2cGx1c19pbmZvX3N0cnVjdCB2bTg2cGx1 czsKICAgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVnczMyOwojIDIwMSAiL3Vzci9zcmMvbGludXgt Mi40LjIwLTgvaW5jbHVkZS9hc20vdm04Ni5oIgp9OwoKdm9pZCBoYW5kbGVfdm04Nl9mYXVsdChz dHJ1Y3Qga2VybmVsX3ZtODZfcmVncyAqLCBsb25nKTsKaW50IGhhbmRsZV92bTg2X3RyYXAoc3Ry dWN0IGtlcm5lbF92bTg2X3JlZ3MgKiwgbG9uZywgaW50KTsKIyAxMSAiL3Vzci9zcmMvbGludXgt Mi40LjIwLTgvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0y LjQuMjAtOC9pbmNsdWRlL2FzbS9tYXRoX2VtdS5oIiAxCgoKCiMgMSAiL3Vzci9zcmMvbGludXgt Mi40LjIwLTgvaW5jbHVkZS9hc20vc2lnY29udGV4dC5oIiAxCiMgMTggIi91c3Ivc3JjL2xpbnV4 LTIuNC4yMC04L2luY2x1ZGUvYXNtL3NpZ2NvbnRleHQuaCIKc3RydWN0IF9mcHJlZyB7CiAgICAg ICAgdW5zaWduZWQgc2hvcnQgc2lnbmlmaWNhbmRbNF07CiAgICAgICAgdW5zaWduZWQgc2hvcnQg ZXhwb25lbnQ7Cn07CgpzdHJ1Y3QgX2ZweHJlZyB7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc2ln bmlmaWNhbmRbNF07CiAgICAgICAgdW5zaWduZWQgc2hvcnQgZXhwb25lbnQ7CiAgICAgICAgdW5z aWduZWQgc2hvcnQgcGFkZGluZ1szXTsKfTsKCnN0cnVjdCBfeG1tcmVnIHsKICAgICAgICB1bnNp Z25lZCBsb25nIGVsZW1lbnRbNF07Cn07CgpzdHJ1Y3QgX2Zwc3RhdGUgewoKICAgICAgICB1bnNp Z25lZCBsb25nIGN3OwogICAgICAgIHVuc2lnbmVkIGxvbmcgc3c7CiAgICAgICAgdW5zaWduZWQg bG9uZyB0YWc7CiAgICAgICAgdW5zaWduZWQgbG9uZyBpcG9mZjsKICAgICAgICB1bnNpZ25lZCBs b25nIGNzc2VsOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZGF0YW9mZjsKICAgICAgICB1bnNpZ25l ZCBsb25nIGRhdGFzZWw7CiAgICAgICAgc3RydWN0IF9mcHJlZyBfc3RbOF07CiAgICAgICAgdW5z aWduZWQgc2hvcnQgc3RhdHVzOwogICAgICAgIHVuc2lnbmVkIHNob3J0IG1hZ2ljOwoKCiAgICAg ICAgdW5zaWduZWQgbG9uZyBfZnhzcl9lbnZbNl07CiAgICAgICAgdW5zaWduZWQgbG9uZyBteGNz cjsKICAgICAgICB1bnNpZ25lZCBsb25nIHJlc2VydmVkOwogICAgICAgIHN0cnVjdCBfZnB4cmVn IF9meHNyX3N0WzhdOwogICAgICAgIHN0cnVjdCBfeG1tcmVnIF94bW1bOF07CiAgICAgICAgdW5z aWduZWQgbG9uZyBwYWRkaW5nWzU2XTsKfTsKCgoKc3RydWN0IHNpZ2NvbnRleHQgewogICAgICAg IHVuc2lnbmVkIHNob3J0IGdzLCBfX2dzaDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBmcywgX19m c2g7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgZXMsIF9fZXNoOwogICAgICAgIHVuc2lnbmVkIHNo b3J0IGRzLCBfX2RzaDsKICAgICAgICB1bnNpZ25lZCBsb25nIGVkaTsKICAgICAgICB1bnNpZ25l ZCBsb25nIGVzaTsKICAgICAgICB1bnNpZ25lZCBsb25nIGVicDsKICAgICAgICB1bnNpZ25lZCBs b25nIGVzcDsKICAgICAgICB1bnNpZ25lZCBsb25nIGVieDsKICAgICAgICB1bnNpZ25lZCBsb25n IGVkeDsKICAgICAgICB1bnNpZ25lZCBsb25nIGVjeDsKICAgICAgICB1bnNpZ25lZCBsb25nIGVh eDsKICAgICAgICB1bnNpZ25lZCBsb25nIHRyYXBubzsKICAgICAgICB1bnNpZ25lZCBsb25nIGVy cjsKICAgICAgICB1bnNpZ25lZCBsb25nIGVpcDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBjcywg X19jc2g7CiAgICAgICAgdW5zaWduZWQgbG9uZyBlZmxhZ3M7CiAgICAgICAgdW5zaWduZWQgbG9u ZyBlc3BfYXRfc2lnbmFsOwogICAgICAgIHVuc2lnbmVkIHNob3J0IHNzLCBfX3NzaDsKICAgICAg ICBzdHJ1Y3QgX2Zwc3RhdGUgKiBmcHN0YXRlOwogICAgICAgIHVuc2lnbmVkIGxvbmcgb2xkbWFz azsKICAgICAgICB1bnNpZ25lZCBsb25nIGNyMjsKfTsKIyA1ICIvdXNyL3NyYy9saW51eC0yLjQu MjAtOC9pbmNsdWRlL2FzbS9tYXRoX2VtdS5oIiAyCgppbnQgcmVzdG9yZV9pMzg3X3NvZnQodm9p ZCAqczM4Nywgc3RydWN0IF9mcHN0YXRlICpidWYpOwppbnQgc2F2ZV9pMzg3X3NvZnQodm9pZCAq czM4Nywgc3RydWN0IF9mcHN0YXRlICogYnVmKTsKCgoKCgpzdHJ1Y3QgaW5mbyB7CiAgICAgICAg bG9uZyBfX19vcmlnX2VpcDsKICAgICAgICBsb25nIF9fX2VieDsKICAgICAgICBsb25nIF9fX2Vj eDsKICAgICAgICBsb25nIF9fX2VkeDsKICAgICAgICBsb25nIF9fX2VzaTsKICAgICAgICBsb25n IF9fX2VkaTsKICAgICAgICBsb25nIF9fX2VicDsKICAgICAgICBsb25nIF9fX2VheDsKICAgICAg ICBsb25nIF9fX2RzOwogICAgICAgIGxvbmcgX19fZXM7CiAgICAgICAgbG9uZyBfX19vcmlnX2Vh eDsKICAgICAgICBsb25nIF9fX2VpcDsKICAgICAgICBsb25nIF9fX2NzOwogICAgICAgIGxvbmcg X19fZWZsYWdzOwogICAgICAgIGxvbmcgX19fZXNwOwogICAgICAgIGxvbmcgX19fc3M7CiAgICAg ICAgbG9uZyBfX192bTg2X2VzOwogICAgICAgIGxvbmcgX19fdm04Nl9kczsKICAgICAgICBsb25n IF9fX3ZtODZfZnM7CiAgICAgICAgbG9uZyBfX192bTg2X2dzOwp9OwojIDEyICIvdXNyL3NyYy9s aW51eC0yLjQuMjAtOC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCIgMgojIDEgIi91c3Ivc3JjL2xp bnV4LTIuNC4yMC04L2luY2x1ZGUvYXNtL3NlZ21lbnQuaCIgMQojIDEzICIvdXNyL3NyYy9saW51 eC0yLjQuMjAtOC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4 LTIuNC4yMC04L2luY2x1ZGUvYXNtL3BhZ2UuaCIgMQojIDQ1ICIvdXNyL3NyYy9saW51eC0yLjQu MjAtOC9pbmNsdWRlL2FzbS9wYWdlLmgiCnR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBw dGVfbG93OyB9IHB0ZV90Owp0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcG1kOyB9IHBt ZF90Owp0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcGdkOyB9IHBnZF90OwoKCgoKdHlw ZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHBncHJvdDsgfSBwZ3Byb3RfdDsKIyAxMTMgIi91 c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvYXNtL3BhZ2UuaCIKc3RhdGljIF9faW5saW5l X18gaW50IGdldF9vcmRlcih1bnNpZ25lZCBsb25nIHNpemUpCnsKICAgICAgICBpbnQgb3JkZXI7 CgogICAgICAgIHNpemUgPSAoc2l6ZS0xKSA+PiAoMTIgLTEpOwogICAgICAgIG9yZGVyID0gLTE7 CiAgICAgICAgZG8gewogICAgICAgICAgICAgICAgc2l6ZSA+Pj0gMTsKICAgICAgICAgICAgICAg IG9yZGVyKys7CiAgICAgICAgfSB3aGlsZSAoc2l6ZSk7CiAgICAgICAgcmV0dXJuIG9yZGVyOwp9 CiMgMTQgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIiAy CgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmgi IDEKIyAxNyAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgi IDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2NhY2hlLmgiIDEK CgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9hc20vY2FjaGUuaCIgMQoj IDYgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvY2FjaGUuaCIgMgojIDE4 ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCIgMgoKIyAx ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3RocmVhZHMuaCIgMQojIDIw ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCIgMgoKc3Ry dWN0IGRlc2Nfc3RydWN0IHsKICAgICAgICB1bnNpZ25lZCBsb25nIGEsYjsKfTsKIyA0MiAiL3Vz ci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgiCnN0cnVjdCBjcHVp bmZvX3g4NiB7CiAgICAgICAgX191OCB4ODY7CiAgICAgICAgX191OCB4ODZfdmVuZG9yOwogICAg ICAgIF9fdTggeDg2X21vZGVsOwogICAgICAgIF9fdTggeDg2X21hc2s7CiAgICAgICAgY2hhciB3 cF93b3Jrc19vazsKICAgICAgICBjaGFyIGhsdF93b3Jrc19vazsKICAgICAgICBjaGFyIGhhcmRf bWF0aDsKICAgICAgICBjaGFyIHJmdTsKICAgICAgICBpbnQgY3B1aWRfbGV2ZWw7CiAgICAgICAg X191MzIgeDg2X2NhcGFiaWxpdHlbNF07CiAgICAgICAgY2hhciB4ODZfdmVuZG9yX2lkWzE2XTsK ICAgICAgICBjaGFyIHg4Nl9tb2RlbF9pZFs2NF07CiAgICAgICAgaW50IHg4Nl9jYWNoZV9zaXpl OwoKICAgICAgICBpbnQgZmRpdl9idWc7CiAgICAgICAgaW50IGYwMGZfYnVnOwogICAgICAgIGlu dCBjb21hX2J1ZzsKICAgICAgICB1bnNpZ25lZCBsb25nIGxvb3BzX3Blcl9qaWZmeV9SYmE0OTdm MTM7CiAgICAgICAgdW5zaWduZWQgbG9uZyAqcGdkX3F1aWNrOwogICAgICAgIHVuc2lnbmVkIGxv bmcgKnBtZF9xdWljazsKICAgICAgICB1bnNpZ25lZCBsb25nICpwdGVfcXVpY2s7CiAgICAgICAg dW5zaWduZWQgbG9uZyBwZ3RhYmxlX2NhY2hlX3N6Owp9IF9fYXR0cmlidXRlX18oKF9fYWxpZ25l ZF9fKCgxIDw8ICgoNSkpKSkpKTsKIyA4MiAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVk ZS9hc20vcHJvY2Vzc29yLmgiCmV4dGVybiBzdHJ1Y3QgY3B1aW5mb194ODYgYm9vdF9jcHVfZGF0 YV9SMDY1N2QwMzc7CmV4dGVybiBzdHJ1Y3QgdHNzX3N0cnVjdCBpbml0X3Rzc1sxXTsKIyAxMDQg Ii91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIgpleHRlcm4g Y2hhciBpZ25vcmVfaXJxMTM7CgpleHRlcm4gdm9pZCBpZGVudGlmeV9jcHUoc3RydWN0IGNwdWlu Zm9feDg2ICopOwpleHRlcm4gdm9pZCBwcmludF9jcHVfaW5mbyhzdHJ1Y3QgY3B1aW5mb194ODYg Kik7CmV4dGVybiB2b2lkIGRvZGd5X3RzYyh2b2lkKTsKIyAxMzQgIi91c3Ivc3JjL2xpbnV4LTIu NC4yMC04L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIgpzdGF0aWMgaW5saW5lIHZvaWQgY3B1aWQo aW50IG9wLCBpbnQgKmVheCwgaW50ICplYngsIGludCAqZWN4LCBpbnQgKmVkeCkKewogICAgICAg IF9fYXNtX18oImNwdWlkIgogICAgICAgICAgICAgICAgOiAiPWEiICgqZWF4KSwKICAgICAgICAg ICAgICAgICAgIj1iIiAoKmVieCksCiAgICAgICAgICAgICAgICAgICI9YyIgKCplY3gpLAogICAg ICAgICAgICAgICAgICAiPWQiICgqZWR4KQogICAgICAgICAgICAgICAgOiAiMCIgKG9wKSk7Cn0K CgoKCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNwdWlkX2VheCh1bnNpZ25lZCBpbnQgb3Ap CnsKICAgICAgICB1bnNpZ25lZCBpbnQgZWF4OwoKICAgICAgICBfX2FzbV9fKCJjcHVpZCIKICAg ICAgICAgICAgICAgIDogIj1hIiAoZWF4KQogICAgICAgICAgICAgICAgOiAiMCIgKG9wKQogICAg ICAgICAgICAgICAgOiAiYngiLCAiY3giLCAiZHgiKTsKICAgICAgICByZXR1cm4gZWF4Owp9CnN0 YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNwdWlkX2VieCh1bnNpZ25lZCBpbnQgb3ApCnsKICAg ICAgICB1bnNpZ25lZCBpbnQgZWF4LCBlYng7CgogICAgICAgIF9fYXNtX18oImNwdWlkIgogICAg ICAgICAgICAgICAgOiAiPWEiIChlYXgpLCAiPWIiIChlYngpCiAgICAgICAgICAgICAgICA6ICIw IiAob3ApCiAgICAgICAgICAgICAgICA6ICJjeCIsICJkeCIgKTsKICAgICAgICByZXR1cm4gZWJ4 Owp9CnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNwdWlkX2VjeCh1bnNpZ25lZCBpbnQgb3Ap CnsKICAgICAgICB1bnNpZ25lZCBpbnQgZWF4LCBlY3g7CgogICAgICAgIF9fYXNtX18oImNwdWlk IgogICAgICAgICAgICAgICAgOiAiPWEiIChlYXgpLCAiPWMiIChlY3gpCiAgICAgICAgICAgICAg ICA6ICIwIiAob3ApCiAgICAgICAgICAgICAgICA6ICJieCIsICJkeCIgKTsKICAgICAgICByZXR1 cm4gZWN4Owp9CnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNwdWlkX2VkeCh1bnNpZ25lZCBp bnQgb3ApCnsKICAgICAgICB1bnNpZ25lZCBpbnQgZWF4LCBlZHg7CgogICAgICAgIF9fYXNtX18o ImNwdWlkIgogICAgICAgICAgICAgICAgOiAiPWEiIChlYXgpLCAiPWQiIChlZHgpCiAgICAgICAg ICAgICAgICA6ICIwIiAob3ApCiAgICAgICAgICAgICAgICA6ICJieCIsICJjeCIpOwogICAgICAg IHJldHVybiBlZHg7Cn0KIyAyMTIgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvYXNt L3Byb2Nlc3Nvci5oIgpleHRlcm4gdW5zaWduZWQgbG9uZyBtbXVfY3I0X2ZlYXR1cmVzOwoKc3Rh dGljIGlubGluZSB2b2lkIHNldF9pbl9jcjQgKHVuc2lnbmVkIGxvbmcgbWFzaykKewogICAgICAg IG1tdV9jcjRfZmVhdHVyZXMgfD0gbWFzazsKICAgICAgICBfX2FzbV9fKCJtb3ZsICUlY3I0LCUl ZWF4XG5cdCIKICAgICAgICAgICAgICAgICJvcmwgJTAsJSVlYXhcblx0IgogICAgICAgICAgICAg ICAgIm1vdmwgJSVlYXgsJSVjcjRcbiIKICAgICAgICAgICAgICAgIDogOiAiaXJnIiAobWFzaykK ICAgICAgICAgICAgICAgIDoiYXgiKTsKfQoKc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX2luX2Ny NCAodW5zaWduZWQgbG9uZyBtYXNrKQp7CiAgICAgICAgbW11X2NyNF9mZWF0dXJlcyAmPSB+bWFz azsKICAgICAgICBfX2FzbV9fKCJtb3ZsICUlY3I0LCUlZWF4XG5cdCIKICAgICAgICAgICAgICAg ICJhbmRsICUwLCUlZWF4XG5cdCIKICAgICAgICAgICAgICAgICJtb3ZsICUlZWF4LCUlY3I0XG4i CiAgICAgICAgICAgICAgICA6IDogImlyZyIgKH5tYXNrKQogICAgICAgICAgICAgICAgOiJheCIp Owp9CiMgMjY1ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2FzbS9wcm9jZXNzb3Iu aCIKZXh0ZXJuIGludCBFSVNBX2J1c19SNzQxMzc5M2E7CgoKCmV4dGVybiBpbnQgTUNBX2J1c19S ZjQ4YTJjNGM7CgoKCmV4dGVybiB1bnNpZ25lZCBpbnQgbWFjaGluZV9pZDsKZXh0ZXJuIHVuc2ln bmVkIGludCBtYWNoaW5lX3N1Ym1vZGVsX2lkOwpleHRlcm4gdW5zaWduZWQgaW50IEJJT1NfcmV2 aXNpb247CmV4dGVybiB1bnNpZ25lZCBpbnQgbWNhX3BlbnRpdW1fZmxhZzsKIyAyOTUgIi91c3Iv c3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIgpzdHJ1Y3QgaTM4N19m c2F2ZV9zdHJ1Y3QgewogICAgICAgIGxvbmcgY3dkOwogICAgICAgIGxvbmcgc3dkOwogICAgICAg IGxvbmcgdHdkOwogICAgICAgIGxvbmcgZmlwOwogICAgICAgIGxvbmcgZmNzOwogICAgICAgIGxv bmcgZm9vOwogICAgICAgIGxvbmcgZm9zOwogICAgICAgIGxvbmcgc3Rfc3BhY2VbMjBdOwogICAg ICAgIGxvbmcgc3RhdHVzOwp9OwoKc3RydWN0IGkzODdfZnhzYXZlX3N0cnVjdCB7CiAgICAgICAg dW5zaWduZWQgc2hvcnQgY3dkOwogICAgICAgIHVuc2lnbmVkIHNob3J0IHN3ZDsKICAgICAgICB1 bnNpZ25lZCBzaG9ydCB0d2Q7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgZm9wOwogICAgICAgIGxv bmcgZmlwOwogICAgICAgIGxvbmcgZmNzOwogICAgICAgIGxvbmcgZm9vOwogICAgICAgIGxvbmcg Zm9zOwogICAgICAgIGxvbmcgbXhjc3I7CiAgICAgICAgbG9uZyByZXNlcnZlZDsKICAgICAgICBs b25nIHN0X3NwYWNlWzMyXTsKICAgICAgICBsb25nIHhtbV9zcGFjZVszMl07CiAgICAgICAgbG9u ZyBwYWRkaW5nWzU2XTsKfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoMTYpKSk7CgpzdHJ1Y3Qg aTM4N19zb2Z0X3N0cnVjdCB7CiAgICAgICAgbG9uZyBjd2Q7CiAgICAgICAgbG9uZyBzd2Q7CiAg ICAgICAgbG9uZyB0d2Q7CiAgICAgICAgbG9uZyBmaXA7CiAgICAgICAgbG9uZyBmY3M7CiAgICAg ICAgbG9uZyBmb287CiAgICAgICAgbG9uZyBmb3M7CiAgICAgICAgbG9uZyBzdF9zcGFjZVsyMF07 CiAgICAgICAgdW5zaWduZWQgY2hhciBmdG9wLCBjaGFuZ2VkLCBsb29rYWhlYWQsIG5vX3VwZGF0 ZSwgcm0sIGFsaW1pdDsKICAgICAgICBzdHJ1Y3QgaW5mbyAqaW5mbzsKICAgICAgICB1bnNpZ25l ZCBsb25nIGVudHJ5X2VpcDsKfTsKCnVuaW9uIGkzODdfdW5pb24gewogICAgICAgIHN0cnVjdCBp Mzg3X2ZzYXZlX3N0cnVjdCBmc2F2ZTsKICAgICAgICBzdHJ1Y3QgaTM4N19meHNhdmVfc3RydWN0 IGZ4c2F2ZTsKICAgICAgICBzdHJ1Y3QgaTM4N19zb2Z0X3N0cnVjdCBzb2Z0Owp9OwoKdHlwZWRl ZiBzdHJ1Y3QgewogICAgICAgIHVuc2lnbmVkIGxvbmcgc2VnOwp9IG1tX3NlZ21lbnRfdDsKCnN0 cnVjdCB0c3Nfc3RydWN0IHsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBiYWNrX2xpbmssX19ibGg7 CiAgICAgICAgdW5zaWduZWQgbG9uZyBlc3AwOwogICAgICAgIHVuc2lnbmVkIHNob3J0IHNzMCxf X3NzMGg7CiAgICAgICAgdW5zaWduZWQgbG9uZyBlc3AxOwogICAgICAgIHVuc2lnbmVkIHNob3J0 IHNzMSxfX3NzMWg7CiAgICAgICAgdW5zaWduZWQgbG9uZyBlc3AyOwogICAgICAgIHVuc2lnbmVk IHNob3J0IHNzMixfX3NzMmg7CiAgICAgICAgdW5zaWduZWQgbG9uZyBfX2NyMzsKICAgICAgICB1 bnNpZ25lZCBsb25nIGVpcDsKICAgICAgICB1bnNpZ25lZCBsb25nIGVmbGFnczsKICAgICAgICB1 bnNpZ25lZCBsb25nIGVheCxlY3gsZWR4LGVieDsKICAgICAgICB1bnNpZ25lZCBsb25nIGVzcDsK ICAgICAgICB1bnNpZ25lZCBsb25nIGVicDsKICAgICAgICB1bnNpZ25lZCBsb25nIGVzaTsKICAg ICAgICB1bnNpZ25lZCBsb25nIGVkaTsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBlcywgX19lc2g7 CiAgICAgICAgdW5zaWduZWQgc2hvcnQgY3MsIF9fY3NoOwogICAgICAgIHVuc2lnbmVkIHNob3J0 IHNzLCBfX3NzaDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBkcywgX19kc2g7CiAgICAgICAgdW5z aWduZWQgc2hvcnQgZnMsIF9fZnNoOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGdzLCBfX2dzaDsK ICAgICAgICB1bnNpZ25lZCBzaG9ydCBsZHQsIF9fbGR0aDsKICAgICAgICB1bnNpZ25lZCBzaG9y dCB0cmFjZSwgYml0bWFwOwogICAgICAgIHVuc2lnbmVkIGxvbmcgaW9fYml0bWFwWzMyICsxXTsK CgoKICAgICAgICB1bnNpZ25lZCBsb25nIF9fY2FjaGVsaW5lX2ZpbGxlcls1XTsKfTsKCnN0cnVj dCB0aHJlYWRfc3RydWN0IHsKCiAgICAgICAgc3RydWN0IGRlc2Nfc3RydWN0IHRsc19hcnJheVsz XTsKICAgICAgICB1bnNpZ25lZCBsb25nIGVzcDA7CiAgICAgICAgdW5zaWduZWQgbG9uZyBlaXA7 CiAgICAgICAgdW5zaWduZWQgbG9uZyBlc3A7CiAgICAgICAgdW5zaWduZWQgbG9uZyBmczsKICAg ICAgICB1bnNpZ25lZCBsb25nIGdzOwoKICAgICAgICB1bnNpZ25lZCBsb25nIGRlYnVncmVnWzhd OwoKICAgICAgICB1bnNpZ25lZCBsb25nIGNyMiwgdHJhcF9ubywgZXJyb3JfY29kZTsKCiAgICAg ICAgdW5pb24gaTM4N191bmlvbiBpMzg3OwoKICAgICAgICBzdHJ1Y3Qgdm04Nl9zdHJ1Y3QgKiB2 bTg2X2luZm87CiAgICAgICAgdW5zaWduZWQgbG9uZyBzY3JlZW5fYml0bWFwOwogICAgICAgIHVu c2lnbmVkIGxvbmcgdjg2ZmxhZ3MsIHY4Nm1hc2ssIHNhdmVkX2VzcDA7CiAgICAgICAgdW5zaWdu ZWQgaW50IHNhdmVkX2ZzLCBzYXZlZF9nczsKCiAgICAgICAgaW50IGlvcGVybTsKICAgICAgICB1 bnNpZ25lZCBsb25nIGlvX2JpdG1hcFszMiArMV07Cn07CiMgNDQyICIvdXNyL3NyYy9saW51eC0y LjQuMjAtOC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCIKc3RydWN0IHRhc2tfc3RydWN0OwpzdHJ1 Y3QgbW1fc3RydWN0OwoKCmV4dGVybiB2b2lkIHJlbGVhc2VfdGhyZWFkKHN0cnVjdCB0YXNrX3N0 cnVjdCAqKTsKCgoKZXh0ZXJuIGludCBhcmNoX2tlcm5lbF90aHJlYWQoaW50ICgqZm4pKHZvaWQg KiksIHZvaWQgKiBhcmcsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwoKCgoKCnN0YXRpYyBpbmxpbmUg dm9pZCBjb3B5X3NlZ21lbnRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IG1tX3N0cnVj dCAqIG1tKSB7IH0Kc3RhdGljIGlubGluZSB2b2lkIHJlbGVhc2Vfc2VnbWVudHMoc3RydWN0IG1t X3N0cnVjdCAqIG1tKSB7IH0KCgoKCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0aHJlYWRf c2F2ZWRfcGMoc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnQpCnsKICAgICAgICByZXR1cm4gKCh1bnNp Z25lZCBsb25nICopdC0+ZXNwKVszXTsKfQoKdW5zaWduZWQgbG9uZyBnZXRfd2NoYW5fUjA5ZjBj ZGY1KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CiMgNDc4ICIvdXNyL3NyYy9saW51eC0yLjQuMjAt OC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCIKc3RydWN0IG1pY3JvY29kZSB7CiAgICAgICAgdW5z aWduZWQgaW50IGhkcnZlcjsKICAgICAgICB1bnNpZ25lZCBpbnQgcmV2OwogICAgICAgIHVuc2ln bmVkIGludCBkYXRlOwogICAgICAgIHVuc2lnbmVkIGludCBzaWc7CiAgICAgICAgdW5zaWduZWQg aW50IGNrc3VtOwogICAgICAgIHVuc2lnbmVkIGludCBsZHJ2ZXI7CiAgICAgICAgdW5zaWduZWQg aW50IHBmOwogICAgICAgIHVuc2lnbmVkIGludCByZXNlcnZlZFs1XTsKICAgICAgICB1bnNpZ25l ZCBpbnQgYml0c1s1MDBdOwp9OwoKCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCByZXBfbm9wKHZvaWQp CnsKICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygicmVwO25vcCIpOwp9CiMgMTQgIi91c3Iv c3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvcHJlZmV0Y2guaCIgMgojIDQzICIvdXNy L3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3ByZWZldGNoLmgiCnN0YXRpYyBpbmxp bmUgdm9pZCBwcmVmZXRjaChjb25zdCB2b2lkICp4KSB7O30KCgoKCnN0YXRpYyBpbmxpbmUgdm9p ZCBwcmVmZXRjaHcoY29uc3Qgdm9pZCAqeCkgezt9CiMgNyAiL3Vzci9zcmMvbGludXgtMi40LjIw LTgvaW5jbHVkZS9saW51eC9saXN0LmgiIDIKIyAxOCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgv aW5jbHVkZS9saW51eC9saXN0LmgiCnR5cGVkZWYgc3RydWN0IGxpc3RfaGVhZCB7CiAgICAgICAg c3RydWN0IGxpc3RfaGVhZCAqbmV4dCwgKnByZXY7Cn0gbGlzdF90OwojIDM3ICIvdXNyL3NyYy9s aW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2xpc3QuaCIKc3RhdGljIGlubGluZSB2b2lkIF9f bGlzdF9hZGQoc3RydWN0IGxpc3RfaGVhZCAqbmV3LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpwcmV2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3QgbGlzdF9oZWFkICpuZXh0KQp7CiAgICAgICAgbmV4dC0+cHJldiA9IG5ldzsKICAg ICAgICBuZXctPm5leHQgPSBuZXh0OwogICAgICAgIG5ldy0+cHJldiA9IHByZXY7CiAgICAgICAg cHJldi0+bmV4dCA9IG5ldzsKfQojIDU1ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRl L2xpbnV4L2xpc3QuaCIKc3RhdGljIGlubGluZSB2b2lkIGxpc3RfYWRkKHN0cnVjdCBsaXN0X2hl YWQgKm5ldywgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKewogICAgICAgIF9fbGlzdF9hZGQobmV3 LCBoZWFkLCBoZWFkLT5uZXh0KTsKfQojIDY4ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNs dWRlL2xpbnV4L2xpc3QuaCIKc3RhdGljIGlubGluZSB2b2lkIGxpc3RfYWRkX3RhaWwoc3RydWN0 IGxpc3RfaGVhZCAqbmV3LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQp7CiAgICAgICAgX19saXN0 X2FkZChuZXcsIGhlYWQtPnByZXYsIGhlYWQpOwp9CiMgODAgIi91c3Ivc3JjL2xpbnV4LTIuNC4y MC04L2luY2x1ZGUvbGludXgvbGlzdC5oIgpzdGF0aWMgaW5saW5lIHZvaWQgX19saXN0X2RlbChz dHJ1Y3QgbGlzdF9oZWFkICpwcmV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpuZXh0KQp7CiAgICAgICAg bmV4dC0+cHJldiA9IHByZXY7CiAgICAgICAgcHJldi0+bmV4dCA9IG5leHQ7Cn0KCgoKCgoKc3Rh dGljIGlubGluZSB2b2lkIGxpc3RfZGVsKHN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5KQp7CiAgICAg ICAgX19saXN0X2RlbChlbnRyeS0+cHJldiwgZW50cnktPm5leHQpOwogICAgICAgIGVudHJ5LT5u ZXh0ID0gKHZvaWQgKikgMDsKICAgICAgICBlbnRyeS0+cHJldiA9ICh2b2lkICopIDA7Cn0KCgoK CgpzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9kZWxfaW5pdChzdHJ1Y3QgbGlzdF9oZWFkICplbnRy eSkKewogICAgICAgIF9fbGlzdF9kZWwoZW50cnktPnByZXYsIGVudHJ5LT5uZXh0KTsKICAgICAg ICBkbyB7IChlbnRyeSktPm5leHQgPSAoZW50cnkpOyAoZW50cnkpLT5wcmV2ID0gKGVudHJ5KTsg fSB3aGlsZSAoMCk7Cn0KCgoKCgoKc3RhdGljIGlubGluZSB2b2lkIGxpc3RfbW92ZShzdHJ1Y3Qg bGlzdF9oZWFkICpsaXN0LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQp7CiAgICAgICAgX19saXN0 X2RlbChsaXN0LT5wcmV2LCBsaXN0LT5uZXh0KTsKICAgICAgICBsaXN0X2FkZChsaXN0LCBoZWFk KTsKfQoKCgoKCgpzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9tb3ZlX3RhaWwoc3RydWN0IGxpc3Rf aGVhZCAqbGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBsaXN0 X2hlYWQgKmhlYWQpCnsKICAgICAgICBfX2xpc3RfZGVsKGxpc3QtPnByZXYsIGxpc3QtPm5leHQp OwogICAgICAgIGxpc3RfYWRkX3RhaWwobGlzdCwgaGVhZCk7Cn0KCgoKCgpzdGF0aWMgaW5saW5l IGludCBsaXN0X2VtcHR5KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCnsKICAgICAgICByZXR1cm4g aGVhZC0+bmV4dCA9PSBoZWFkOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgX19saXN0X3NwbGljZShz dHJ1Y3QgbGlzdF9oZWFkICpsaXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQp7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqZmlyc3Qg PSBsaXN0LT5uZXh0OwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxhc3QgPSBsaXN0LT5wcmV2 OwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmF0ID0gaGVhZC0+bmV4dDsKCiAgICAgICAgZmly c3QtPnByZXYgPSBoZWFkOwogICAgICAgIGhlYWQtPm5leHQgPSBmaXJzdDsKCiAgICAgICAgbGFz dC0+bmV4dCA9IGF0OwogICAgICAgIGF0LT5wcmV2ID0gbGFzdDsKfQoKCgoKCgpzdGF0aWMgaW5s aW5lIHZvaWQgbGlzdF9zcGxpY2Uoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgc3RydWN0IGxpc3Rf aGVhZCAqaGVhZCkKewogICAgICAgIGlmICghbGlzdF9lbXB0eShsaXN0KSkKICAgICAgICAgICAg ICAgIF9fbGlzdF9zcGxpY2UobGlzdCwgaGVhZCk7Cn0KIyAxNzIgIi91c3Ivc3JjL2xpbnV4LTIu NC4yMC04L2luY2x1ZGUvbGludXgvbGlzdC5oIgpzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9zcGxp Y2VfaW5pdChzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQp7CiAgICAgICAgaWYgKCFsaXN0X2Vt cHR5KGxpc3QpKSB7CiAgICAgICAgICAgICAgICBfX2xpc3Rfc3BsaWNlKGxpc3QsIGhlYWQpOwog ICAgICAgICAgICAgICAgZG8geyAobGlzdCktPm5leHQgPSAobGlzdCk7IChsaXN0KS0+cHJldiA9 IChsaXN0KTsgfSB3aGlsZSAoMCk7CiAgICAgICAgfQp9CiMgMTUgIi91c3Ivc3JjL2xpbnV4LTIu NC4yMC04L2luY2x1ZGUvbGludXgvd2FpdC5oIiAyCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4y MC04L2luY2x1ZGUvbGludXgvc3BpbmxvY2suaCIgMQojIDQwICIvdXNyL3NyYy9saW51eC0yLjQu MjAtOC9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrLmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIw LTgvaW5jbHVkZS9saW51eC9zdHJpbmdpZnkuaCIgMQojIDQxICIvdXNyL3NyYy9saW51eC0yLjQu MjAtOC9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrLmgiIDIKIyA3NSAiL3Vzci9zcmMvbGludXgtMi40 LjIwLTgvaW5jbHVkZS9saW51eC9zcGlubG9jay5oIgogIHR5cGVkZWYgc3RydWN0IHsgfSBzcGlu bG9ja190OwojIDEzOSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9zcGlu bG9jay5oIgogIHR5cGVkZWYgc3RydWN0IHsgfSByd2xvY2tfdDsKIyAxNzAgIi91c3Ivc3JjL2xp bnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvc3BpbmxvY2suaCIKdHlwZWRlZiBzdHJ1Y3Qgewog ICAgc3BpbmxvY2tfdCBsb2NrOwp9IHNwaW5sb2NrX2NhY2hlbGluZV90OwojIDE3ICIvdXNyL3Ny Yy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3dhaXQuaCIgMgojIDMxICIvdXNyL3NyYy9s aW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3dhaXQuaCIKc3RydWN0IF9fd2FpdF9xdWV1ZSB7 CiAgICAgICAgdW5zaWduZWQgaW50IGZsYWdzOwoKICAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3Qg KiB0YXNrOwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgdGFza19saXN0OwoKCgoKfTsKdHlwZWRl ZiBzdHJ1Y3QgX193YWl0X3F1ZXVlIHdhaXRfcXVldWVfdDsKIyA4MSAiL3Vzci9zcmMvbGludXgt Mi40LjIwLTgvaW5jbHVkZS9saW51eC93YWl0LmgiCnN0cnVjdCBfX3dhaXRfcXVldWVfaGVhZCB7 CiAgICAgICAgc3BpbmxvY2tfdCBsb2NrOwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgdGFza19s aXN0OwoKCgoKfTsKdHlwZWRlZiBzdHJ1Y3QgX193YWl0X3F1ZXVlX2hlYWQgd2FpdF9xdWV1ZV9o ZWFkX3Q7CiMgMTU5ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3dhaXQu aCIKc3RhdGljIGlubGluZSB2b2lkIGluaXRfd2FpdHF1ZXVlX2hlYWQod2FpdF9xdWV1ZV9oZWFk X3QgKnEpCnsKCgoKCiAgICAgICAgcS0+bG9jayA9IChzcGlubG9ja190KSB7IH07CiAgICAgICAg ZG8geyAoJnEtPnRhc2tfbGlzdCktPm5leHQgPSAoJnEtPnRhc2tfbGlzdCk7ICgmcS0+dGFza19s aXN0KS0+cHJldiA9ICgmcS0+dGFza19saXN0KTsgfSB3aGlsZSAoMCk7CgoKCgp9CgpzdGF0aWMg aW5saW5lIHZvaWQgaW5pdF93YWl0cXVldWVfZW50cnkod2FpdF9xdWV1ZV90ICpxLCBzdHJ1Y3Qg dGFza19zdHJ1Y3QgKnApCnsKCgoKCiAgICAgICAgcS0+ZmxhZ3MgPSAwOwogICAgICAgIHEtPnRh c2sgPSBwOwoKCgp9CgpzdGF0aWMgaW5saW5lIGludCB3YWl0cXVldWVfYWN0aXZlKHdhaXRfcXVl dWVfaGVhZF90ICpxKQp7CgoKCgoKCiAgICAgICAgcmV0dXJuICFsaXN0X2VtcHR5KCZxLT50YXNr X2xpc3QpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgX19hZGRfd2FpdF9xdWV1ZSh3YWl0X3F1ZXVl X2hlYWRfdCAqaGVhZCwgd2FpdF9xdWV1ZV90ICpuZXcpCnsKIyAyMDcgIi91c3Ivc3JjL2xpbnV4 LTIuNC4yMC04L2luY2x1ZGUvbGludXgvd2FpdC5oIgogICAgICAgIGxpc3RfYWRkKCZuZXctPnRh c2tfbGlzdCwgJmhlYWQtPnRhc2tfbGlzdCk7Cn0KCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBfX2Fk ZF93YWl0X3F1ZXVlX3RhaWwod2FpdF9xdWV1ZV9oZWFkX3QgKmhlYWQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhaXRfcXVldWVfdCAqbmV3KQp7CiMg MjI0ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3dhaXQuaCIKICAgICAg ICBsaXN0X2FkZF90YWlsKCZuZXctPnRhc2tfbGlzdCwgJmhlYWQtPnRhc2tfbGlzdCk7Cn0KCnN0 YXRpYyBpbmxpbmUgdm9pZCBfX3JlbW92ZV93YWl0X3F1ZXVlKHdhaXRfcXVldWVfaGVhZF90ICpo ZWFkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHdhaXRfcXVldWVfdCAqb2xkKQp7CgoKCgoKICAgICAgICBsaXN0X2RlbCgmb2xkLT50YXNr X2xpc3QpOwp9CiMgMTMgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvZnMu aCIgMgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3Zmcy5oIiAx CgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9hc20vc3RhdGZzLmgiIDEK CgoKCgoKCnR5cGVkZWYgX19rZXJuZWxfZnNpZF90IGZzaWRfdDsKCgoKc3RydWN0IHN0YXRmcyB7 CiAgICAgICAgbG9uZyBmX3R5cGU7CiAgICAgICAgbG9uZyBmX2JzaXplOwogICAgICAgIGxvbmcg Zl9ibG9ja3M7CiAgICAgICAgbG9uZyBmX2JmcmVlOwogICAgICAgIGxvbmcgZl9iYXZhaWw7CiAg ICAgICAgbG9uZyBmX2ZpbGVzOwogICAgICAgIGxvbmcgZl9mZnJlZTsKICAgICAgICBfX2tlcm5l bF9mc2lkX3QgZl9mc2lkOwogICAgICAgIGxvbmcgZl9uYW1lbGVuOwogICAgICAgIGxvbmcgZl9z cGFyZVs2XTsKfTsKIyA1ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3Zm cy5oIiAyCiMgMTUgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvZnMuaCIg MgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbmV0LmgiIDEKIyAy MiAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9uZXQuaCIKIyAxICIvdXNy L3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3NvY2tldC5oIiAxCgoKCgoKIyAxICIv dXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2FzbS9zb2NrZXQuaCIgMQoKCgojIDEgIi91 c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvYXNtL3NvY2tpb3MuaCIgMQojIDUgIi91c3Iv c3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvYXNtL3NvY2tldC5oIiAyCiMgNyAiL3Vzci9zcmMv bGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9zb2NrZXQuaCIgMgojIDEgIi91c3Ivc3JjL2xp bnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvc29ja2lvcy5oIiAxCiMgOCAiL3Vzci9zcmMvbGlu dXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9zb2NrZXQuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4 LTIuNC4yMC04L2luY2x1ZGUvbGludXgvdWlvLmgiIDEKIyAxOSAiL3Vzci9zcmMvbGludXgtMi40 LjIwLTgvaW5jbHVkZS9saW51eC91aW8uaCIKc3RydWN0IGlvdmVjCnsKICAgICAgICB2b2lkICpp b3ZfYmFzZTsKICAgICAgICBfX2tlcm5lbF9zaXplX3QgaW92X2xlbjsKfTsKIyA5ICIvdXNyL3Ny Yy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3NvY2tldC5oIiAyCgoKdHlwZWRlZiB1bnNp Z25lZCBzaG9ydCBzYV9mYW1pbHlfdDsKCgoKCgpzdHJ1Y3Qgc29ja2FkZHIgewogICAgICAgIHNh X2ZhbWlseV90IHNhX2ZhbWlseTsKICAgICAgICBjaGFyIHNhX2RhdGFbMTRdOwp9OwoKc3RydWN0 IGxpbmdlciB7CiAgICAgICAgaW50IGxfb25vZmY7CiAgICAgICAgaW50IGxfbGluZ2VyOwp9OwoK CgoKCgoKc3RydWN0IG1zZ2hkciB7CiAgICAgICAgdm9pZCAqIG1zZ19uYW1lOwogICAgICAgIGlu dCBtc2dfbmFtZWxlbjsKICAgICAgICBzdHJ1Y3QgaW92ZWMgKiBtc2dfaW92OwogICAgICAgIF9f a2VybmVsX3NpemVfdCBtc2dfaW92bGVuOwogICAgICAgIHZvaWQgKiBtc2dfY29udHJvbDsKICAg ICAgICBfX2tlcm5lbF9zaXplX3QgbXNnX2NvbnRyb2xsZW47CiAgICAgICAgdW5zaWduZWQgbXNn X2ZsYWdzOwp9OwoKCgoKCgoKc3RydWN0IGNtc2doZHIgewogICAgICAgIF9fa2VybmVsX3NpemVf dCBjbXNnX2xlbjsKICAgICAgICBpbnQgY21zZ19sZXZlbDsKICAgICAgICBpbnQgY21zZ190eXBl Owp9OwojIDEwMiAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9zb2NrZXQu aCIKc3RhdGljIGlubGluZSBzdHJ1Y3QgY21zZ2hkciAqIF9fY21zZ19ueHRoZHIodm9pZCAqX19j dGwsIF9fa2VybmVsX3NpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RydWN0IGNtc2doZHIgKl9fY21zZykKewogICAgICAgIHN0cnVj dCBjbXNnaGRyICogX19wdHI7CgogICAgICAgIF9fcHRyID0gKHN0cnVjdCBjbXNnaGRyKikoKCh1 bnNpZ25lZCBjaGFyICopIF9fY21zZykgKyAoICgoX19jbXNnLT5jbXNnX2xlbikrc2l6ZW9mKGxv bmcpLTEpICYgfihzaXplb2YobG9uZyktMSkgKSk7CiAgICAgICAgaWYgKCh1bnNpZ25lZCBsb25n KSgoY2hhciopKF9fcHRyKzEpIC0gKGNoYXIgKikgX19jdGwpID4gX19zaXplKQogICAgICAgICAg ICAgICAgcmV0dXJuIChzdHJ1Y3QgY21zZ2hkciAqKTA7CgogICAgICAgIHJldHVybiBfX3B0cjsK fQoKc3RhdGljIGlubGluZSBzdHJ1Y3QgY21zZ2hkciAqIGNtc2dfbnh0aGRyIChzdHJ1Y3QgbXNn aGRyICpfX21zZywgc3RydWN0IGNtc2doZHIgKl9fY21zZykKewogICAgICAgIHJldHVybiBfX2Nt c2dfbnh0aGRyKF9fbXNnLT5tc2dfY29udHJvbCwgX19tc2ctPm1zZ19jb250cm9sbGVuLCBfX2Nt c2cpOwp9CgoKCgoKCgpzdHJ1Y3QgdWNyZWQgewogICAgICAgIF9fdTMyIHBpZDsKICAgICAgICBf X3UzMiB1aWQ7CiAgICAgICAgX191MzIgZ2lkOwp9OwojIDI0OSAiL3Vzci9zcmMvbGludXgtMi40 LjIwLTgvaW5jbHVkZS9saW51eC9zb2NrZXQuaCIKZXh0ZXJuIGludCBtZW1jcHlfZnJvbWlvdmVj X1I5ZmIzZGQzMCh1bnNpZ25lZCBjaGFyICprZGF0YSwgc3RydWN0IGlvdmVjICppb3YsIGludCBs ZW4pOwpleHRlcm4gaW50IG1lbWNweV9mcm9taW92ZWNlbmRfUjZlNDQwYjU4KHVuc2lnbmVkIGNo YXIgKmtkYXRhLCBzdHJ1Y3QgaW92ZWMgKmlvdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgb2Zmc2V0LCBpbnQgbGVuKTsKZXh0ZXJuIGludCBjc3VtX3BhcnRpYWxfY29weV9m cm9taW92ZWNlbmRfUjAyODc2NjU3KHVuc2lnbmVkIGNoYXIgKmtkYXRhLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaW92ZWMgKmlvdiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxlbiwgaW50ICpjc3Vt cCk7CgpleHRlcm4gaW50IHZlcmlmeV9pb3ZlYyhzdHJ1Y3QgbXNnaGRyICptLCBzdHJ1Y3QgaW92 ZWMgKmlvdiwgY2hhciAqYWRkcmVzcywgaW50IG1vZGUpOwpleHRlcm4gaW50IG1lbWNweV90b2lv dmVjX1I5Y2ViMTYzYyhzdHJ1Y3QgaW92ZWMgKnYsIHVuc2lnbmVkIGNoYXIgKmtkYXRhLCBpbnQg bGVuKTsKZXh0ZXJuIHZvaWQgbWVtY3B5X3Rva2VybmVsaW92ZWNfUmMxMjVlMDg4KHN0cnVjdCBp b3ZlYyAqaW92LCB1bnNpZ25lZCBjaGFyICprZGF0YSwgaW50IGxlbik7CmV4dGVybiBpbnQgbW92 ZV9hZGRyX3RvX3VzZXJfUjM4Yzk5MDkzKHZvaWQgKmthZGRyLCBpbnQga2xlbiwgdm9pZCAqdWFk ZHIsIGludCAqdWxlbik7CmV4dGVybiBpbnQgbW92ZV9hZGRyX3RvX2tlcm5lbF9SNWRmYTQ2OTYo dm9pZCAqdWFkZHIsIGludCB1bGVuLCB2b2lkICprYWRkcik7CmV4dGVybiBpbnQgcHV0X2Ntc2df UmYzOWJmNGQ5KHN0cnVjdCBtc2doZHIqLCBpbnQgbGV2ZWwsIGludCB0eXBlLCBpbnQgbGVuLCB2 b2lkICpkYXRhKTsKc3RydWN0IHNvY2tldDsKc3RydWN0IGZpbGUgKiBzb2NrX21hcF9maWxlKHN0 cnVjdCBzb2NrZXQgKnNvY2spOwpleHRlcm4gaW50IHNvY2tfbWFwX2ZkX1IyNDAxYzQ2OChzdHJ1 Y3Qgc29ja2V0ICpzb2NrKTsKZXh0ZXJuIHN0cnVjdCBzb2NrZXQgKnNvY2tmZF9sb29rdXBfUjgz NmJlNDgwKGludCBmZCwgaW50ICplcnIpOwojIDIzICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9p bmNsdWRlL2xpbnV4L25ldC5oIiAyCgoKc3RydWN0IHBvbGxfdGFibGVfc3RydWN0OwojIDQ5ICIv dXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L25ldC5oIgp0eXBlZGVmIGVudW0g ewogIFNTX0ZSRUUgPSAwLAogIFNTX1VOQ09OTkVDVEVELAogIFNTX0NPTk5FQ1RJTkcsCiAgU1Nf Q09OTkVDVEVELAogIFNTX0RJU0NPTk5FQ1RJTkcKfSBzb2NrZXRfc3RhdGU7CiMgNjUgIi91c3Iv c3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbmV0LmgiCnN0cnVjdCBzb2NrZXQKewog ICAgICAgIHNvY2tldF9zdGF0ZSBzdGF0ZTsKCiAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsK ICAgICAgICBzdHJ1Y3QgcHJvdG9fb3BzICpvcHM7CiAgICAgICAgc3RydWN0IGlub2RlICppbm9k ZTsKICAgICAgICBzdHJ1Y3QgZmFzeW5jX3N0cnVjdCAqZmFzeW5jX2xpc3Q7CiAgICAgICAgc3Ry dWN0IGZpbGUgKmZpbGU7CiAgICAgICAgc3RydWN0IHNvY2sgKnNrOwogICAgICAgIHdhaXRfcXVl dWVfaGVhZF90IHdhaXQ7CgogICAgICAgIHNob3J0IHR5cGU7CiAgICAgICAgdW5zaWduZWQgY2hh ciBwYXNzY3JlZDsKfTsKCgoKc3RydWN0IHNjbV9jb29raWU7CnN0cnVjdCB2bV9hcmVhX3N0cnVj dDsKc3RydWN0IHBhZ2U7CgpzdHJ1Y3QgcHJvdG9fb3BzIHsKICBpbnQgZmFtaWx5OwoKICBpbnQg KCpyZWxlYXNlKSAoc3RydWN0IHNvY2tldCAqc29jayk7CiAgaW50ICgqYmluZCkgKHN0cnVjdCBz b2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqdW15YWRkciwKICAgICAgICAgICAgICAgICAg ICAgICAgIGludCBzb2NrYWRkcl9sZW4pOwogIGludCAoKmNvbm5lY3QpIChzdHJ1Y3Qgc29ja2V0 ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVzZXJ2YWRkciwKICAgICAgICAgICAgICAgICAgICAg ICAgIGludCBzb2NrYWRkcl9sZW4sIGludCBmbGFncyk7CiAgaW50ICgqc29ja2V0cGFpcikgKHN0 cnVjdCBzb2NrZXQgKnNvY2sxLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrMik7CiAgaW50ICgqYWNjZXB0 KSAoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jaywKICAgICAgICAg ICAgICAgICAgICAgICAgIGludCBmbGFncyk7CiAgaW50ICgqZ2V0bmFtZV9SN2M2MGQ2NmUpIChz dHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVhZGRyLAogICAgICAgICAgICAg ICAgICAgICAgICAgaW50ICp1c29ja2FkZHJfbGVuLCBpbnQgcGVlcik7CiAgdW5zaWduZWQgaW50 ICgqcG9sbCkgKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qg cG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpOwogIGludCAoKmlvY3RsKSAoc3RydWN0IHNvY2tldCAq c29jaywgdW5zaWduZWQgaW50IGNtZCwKICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk IGxvbmcgYXJnKTsKICBpbnQgKCpsaXN0ZW4pIChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGVu KTsKICBpbnQgKCpzaHV0ZG93bikgKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBmbGFncyk7CiAg aW50ICgqc2V0c29ja29wdCkgKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9w dG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpvcHR2YWwsIGludCBvcHRsZW4p OwogIGludCAoKmdldHNvY2tvcHQpIChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGlu dCBvcHRuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqb3B0dmFsLCBpbnQgKm9w dGxlbik7CiAgaW50ICgqc2VuZG1zZykgKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2do ZHIgKm0sIGludCB0b3RhbF9sZW4sIHN0cnVjdCBzY21fY29va2llICpzY20pOwogIGludCAoKnJl Y3Ztc2cpIChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBpbnQgdG90YWxf bGVuLCBpbnQgZmxhZ3MsIHN0cnVjdCBzY21fY29va2llICpzY20pOwogIGludCAoKm1tYXApIChz dHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHZtX2FyZWFfc3Ry dWN0ICogdm1hKTsKICBzc2l6ZV90ICgqc2VuZHBhZ2UpIChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBz dHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9mZnNldCwgc2l6ZV90IHNpemUsIGludCBmbGFncyk7Cn07 CgpzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseQp7CiAgICAgICAgaW50IGZhbWlseTsKICAgICAgICBp bnQgKCpjcmVhdGUpKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCk7CgoKICAgICAg ICBzaG9ydCBhdXRoZW50aWNhdGlvbjsKICAgICAgICBzaG9ydCBlbmNyeXB0aW9uOwogICAgICAg IHNob3J0IGVuY3J5cHRfbmV0Owp9OwoKc3RydWN0IG5ldF9wcm90bwp7CiAgICAgICAgY29uc3Qg Y2hhciAqbmFtZTsKICAgICAgICB2b2lkICgqaW5pdF9mdW5jKShzdHJ1Y3QgbmV0X3Byb3RvICop Owp9OwoKZXh0ZXJuIGludCBzb2NrX3dha2VfYXN5bmNfUmJhOTUwYzg2KHN0cnVjdCBzb2NrZXQg KnNrLCBpbnQgaG93LCBpbnQgYmFuZCk7CmV4dGVybiBpbnQgc29ja19yZWdpc3Rlcl9SZTFjMWQ4 ODIoc3RydWN0IG5ldF9wcm90b19mYW1pbHkgKmZhbSk7CmV4dGVybiBpbnQgc29ja191bnJlZ2lz dGVyX1IyMzk0YTA2MihpbnQgZmFtaWx5KTsKZXh0ZXJuIHN0cnVjdCBzb2NrZXQgKnNvY2tfYWxs b2NfUmZlMjg2NzJlKHZvaWQpOwpleHRlcm4gaW50IHNvY2tfY3JlYXRlX1IxMzE3OGI3MihpbnQg ZmFtaWx5LCBpbnQgdHlwZSwgaW50IHByb3RvLCBzdHJ1Y3Qgc29ja2V0ICoqKTsKZXh0ZXJuIHZv aWQgc29ja19yZWxlYXNlX1I2OWJjZWM5ZihzdHJ1Y3Qgc29ja2V0ICopOwpleHRlcm4gaW50IHNv Y2tfc2VuZG1zZ19SNTdjZTMxYzUoc3RydWN0IHNvY2tldCAqLCBzdHJ1Y3QgbXNnaGRyICptLCBp bnQgbGVuKTsKZXh0ZXJuIGludCBzb2NrX3JlY3Ztc2dfUjEyNDRhMGMyKHN0cnVjdCBzb2NrZXQg Kiwgc3RydWN0IG1zZ2hkciAqbSwgaW50IGxlbiwgaW50IGZsYWdzKTsKZXh0ZXJuIGludCBzb2Nr X3JlYWR2X3dyaXRldihpbnQgdHlwZSwgc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxl ICogZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBp b3ZlYyAqIGlvdiwgbG9uZyBjb3VudCwgbG9uZyBzaXplKTsKCmV4dGVybiBpbnQgbmV0X3JhdGVs aW1pdF9SZjZlYmMwM2Iodm9pZCk7CmV4dGVybiB1bnNpZ25lZCBsb25nIG5ldF9yYW5kb21fUjFj NjZmNjRjKHZvaWQpOwpleHRlcm4gdm9pZCBuZXRfc3JhbmRvbV9SZmY5NjNlZDgodW5zaWduZWQg bG9uZyk7CiMgMTYgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvZnMuaCIg MgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgva2Rldl90LmgiIDEK IyA2NyAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9rZGV2X3QuaCIKdHlw ZWRlZiB1bnNpZ25lZCBzaG9ydCBrZGV2X3Q7CiMgNzYgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04 L2luY2x1ZGUvbGludXgva2Rldl90LmgiCmV4dGVybiBjb25zdCBjaGFyICoga2Rldm5hbWVfUmMy NThjOTA2KGtkZXZfdCk7CiMgOTIgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGlu dXgva2Rldl90LmgiCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGtkZXZfdF90b19ucihrZGV2 X3QgZGV2KSB7CiAgICAgICAgcmV0dXJuICgoKHVuc2lnbmVkIGludCkgKChkZXYpID4+IDgpKTw8 OCkgfCAoKHVuc2lnbmVkIGludCkgKChkZXYpICYgKCgxVSA8PCA4KSAtIDEpKSk7Cn0KCnN0YXRp YyBpbmxpbmUga2Rldl90IHRvX2tkZXZfdChpbnQgZGV2KQp7CiAgICAgICAgaW50IG1ham9yLCBt aW5vcjsKIyAxMDcgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgva2Rldl90 LmgiCiAgICAgICAgbWFqb3IgPSAoZGV2ID4+IDgpOwogICAgICAgIG1pbm9yID0gKGRldiAmIDB4 ZmYpOwoKICAgICAgICByZXR1cm4gKCgobWFqb3IpIDw8IDgpIHwgKG1pbm9yKSk7Cn0KIyAxNyAi L3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9z cmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9pb2N0bC5oIiAxCgoKCiMgMSAiL3Vzci9z cmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9hc20vaW9jdGwuaCIgMQojIDUgIi91c3Ivc3JjL2xp bnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvaW9jdGwuaCIgMgojIDE4ICIvdXNyL3NyYy9saW51 eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40 LjIwLTgvaW5jbHVkZS9saW51eC9kY2FjaGUuaCIgMQoKCgoKCiMgMSAiL3Vzci9zcmMvbGludXgt Mi40LjIwLTgvaW5jbHVkZS9hc20vYXRvbWljLmgiIDEKIyAyMiAiL3Vzci9zcmMvbGludXgtMi40 LjIwLTgvaW5jbHVkZS9hc20vYXRvbWljLmgiCnR5cGVkZWYgc3RydWN0IHsgdm9sYXRpbGUgaW50 IGNvdW50ZXI7IH0gYXRvbWljX3Q7CiMgNTMgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1 ZGUvYXNtL2F0b21pYy5oIgpzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGF0b21pY19hZGQoaW50IGks IGF0b21pY190ICp2KQp7CiAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oCiAgICAgICAgICAg ICAgICAiIiAiYWRkbCAlMSwlMCIKICAgICAgICAgICAgICAgIDoiPW0iICh2LT5jb3VudGVyKQog ICAgICAgICAgICAgICAgOiJpciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpKTsKfQojIDY5ICIvdXNy L3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2FzbS9hdG9taWMuaCIKc3RhdGljIF9faW5saW5l X18gdm9pZCBhdG9taWNfc3ViKGludCBpLCBhdG9taWNfdCAqdikKewogICAgICAgIF9fYXNtX18g X192b2xhdGlsZV9fKAogICAgICAgICAgICAgICAgIiIgInN1YmwgJTEsJTAiCiAgICAgICAgICAg ICAgICA6Ij1tIiAodi0+Y291bnRlcikKICAgICAgICAgICAgICAgIDoiaXIiIChpKSwgIm0iICh2 LT5jb3VudGVyKSk7Cn0KIyA4NyAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9hc20v YXRvbWljLmgiCnN0YXRpYyBfX2lubGluZV9fIGludCBhdG9taWNfc3ViX2FuZF90ZXN0KGludCBp LCBhdG9taWNfdCAqdikKewogICAgICAgIHVuc2lnbmVkIGNoYXIgYzsKCiAgICAgICAgX19hc21f XyBfX3ZvbGF0aWxlX18oCiAgICAgICAgICAgICAgICAiIiAic3VibCAlMiwlMDsgc2V0ZSAlMSIK ICAgICAgICAgICAgICAgIDoiPW0iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCiAgICAgICAgICAg ICAgICA6ImlyIiAoaSksICJtIiAodi0+Y291bnRlcikgOiAibWVtb3J5Iik7CiAgICAgICAgcmV0 dXJuIGM7Cn0KIyAxMDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvYXNtL2F0b21p Yy5oIgpzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGF0b21pY19pbmMoYXRvbWljX3QgKnYpCnsKICAg ICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygKICAgICAgICAgICAgICAgICIiICJpbmNsICUwIgog ICAgICAgICAgICAgICAgOiI9bSIgKHYtPmNvdW50ZXIpCiAgICAgICAgICAgICAgICA6Im0iICh2 LT5jb3VudGVyKSk7Cn0KIyAxMjAgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvYXNt L2F0b21pYy5oIgpzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGF0b21pY19kZWMoYXRvbWljX3QgKnYp CnsKICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygKICAgICAgICAgICAgICAgICIiICJkZWNs ICUwIgogICAgICAgICAgICAgICAgOiI9bSIgKHYtPmNvdW50ZXIpCiAgICAgICAgICAgICAgICA6 Im0iICh2LT5jb3VudGVyKSk7Cn0KIyAxMzcgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1 ZGUvYXNtL2F0b21pYy5oIgpzdGF0aWMgX19pbmxpbmVfXyBpbnQgYXRvbWljX2RlY19hbmRfdGVz dChhdG9taWNfdCAqdikKewogICAgICAgIHVuc2lnbmVkIGNoYXIgYzsKCiAgICAgICAgX19hc21f XyBfX3ZvbGF0aWxlX18oCiAgICAgICAgICAgICAgICAiIiAiZGVjbCAlMDsgc2V0ZSAlMSIKICAg ICAgICAgICAgICAgIDoiPW0iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCiAgICAgICAgICAgICAg ICA6Im0iICh2LT5jb3VudGVyKSA6ICJtZW1vcnkiKTsKICAgICAgICByZXR1cm4gYyAhPSAwOwp9 CiMgMTU3ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2FzbS9hdG9taWMuaCIKc3Rh dGljIF9faW5saW5lX18gaW50IGF0b21pY19pbmNfYW5kX3Rlc3QoYXRvbWljX3QgKnYpCnsKICAg ICAgICB1bnNpZ25lZCBjaGFyIGM7CgogICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKAogICAg ICAgICAgICAgICAgIiIgImluY2wgJTA7IHNldGUgJTEiCiAgICAgICAgICAgICAgICA6Ij1tIiAo di0+Y291bnRlciksICI9cW0iIChjKQogICAgICAgICAgICAgICAgOiJtIiAodi0+Y291bnRlcikg OiAibWVtb3J5Iik7CiAgICAgICAgcmV0dXJuIGMgIT0gMDsKfQojIDE3OCAiL3Vzci9zcmMvbGlu dXgtMi40LjIwLTgvaW5jbHVkZS9hc20vYXRvbWljLmgiCnN0YXRpYyBfX2lubGluZV9fIGludCBh dG9taWNfYWRkX25lZ2F0aXZlKGludCBpLCBhdG9taWNfdCAqdikKewogICAgICAgIHVuc2lnbmVk IGNoYXIgYzsKCiAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oCiAgICAgICAgICAgICAgICAi IiAiYWRkbCAlMiwlMDsgc2V0cyAlMSIKICAgICAgICAgICAgICAgIDoiPW0iICh2LT5jb3VudGVy KSwgIj1xbSIgKGMpCiAgICAgICAgICAgICAgICA6ImlyIiAoaSksICJtIiAodi0+Y291bnRlcikg OiAibWVtb3J5Iik7CiAgICAgICAgcmV0dXJuIGM7Cn0KIyA3ICIvdXNyL3NyYy9saW51eC0yLjQu MjAtOC9pbmNsdWRlL2xpbnV4L2RjYWNoZS5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIw LTgvaW5jbHVkZS9saW51eC9tb3VudC5oIiAxCiMgMTkgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04 L2luY2x1ZGUvbGludXgvbW91bnQuaCIKc3RydWN0IHZmc21vdW50CnsKICAgICAgICBzdHJ1Y3Qg bGlzdF9oZWFkIG1udF9oYXNoOwogICAgICAgIHN0cnVjdCB2ZnNtb3VudCAqbW50X3BhcmVudDsK ICAgICAgICBzdHJ1Y3QgZGVudHJ5ICptbnRfbW91bnRwb2ludDsKICAgICAgICBzdHJ1Y3QgZGVu dHJ5ICptbnRfcm9vdDsKICAgICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKm1udF9zYjsKICAgICAg ICBzdHJ1Y3QgbGlzdF9oZWFkIG1udF9tb3VudHM7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBt bnRfY2hpbGQ7CiAgICAgICAgYXRvbWljX3QgbW50X2NvdW50OwogICAgICAgIGludCBtbnRfZmxh Z3M7CiAgICAgICAgY2hhciAqbW50X2Rldm5hbWU7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBt bnRfbGlzdDsKfTsKCnN0YXRpYyBpbmxpbmUgc3RydWN0IHZmc21vdW50ICptbnRnZXQoc3RydWN0 IHZmc21vdW50ICptbnQpCnsKICAgICAgICBpZiAobW50KQogICAgICAgICAgICAgICAgYXRvbWlj X2luYygmbW50LT5tbnRfY291bnQpOwogICAgICAgIHJldHVybiBtbnQ7Cn0KCmV4dGVybiB2b2lk IF9fbW50cHV0X1JlMTQzNjU1MihzdHJ1Y3QgdmZzbW91bnQgKm1udCk7CgpzdGF0aWMgaW5saW5l IHZvaWQgbW50cHV0KHN0cnVjdCB2ZnNtb3VudCAqbW50KQp7CiAgICAgICAgaWYgKG1udCkgewog ICAgICAgICAgICAgICAgaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJm1udC0+bW50X2NvdW50KSkK ICAgICAgICAgICAgICAgICAgICAgICAgX19tbnRwdXRfUmUxNDM2NTUyKG1udCk7CiAgICAgICAg fQp9CiMgOCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9kY2FjaGUuaCIg MgojIDI1ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2RjYWNoZS5oIgpz dHJ1Y3QgcXN0ciB7CiAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqIG5hbWU7CiAgICAgICAg dW5zaWduZWQgaW50IGxlbjsKICAgICAgICB1bnNpZ25lZCBpbnQgaGFzaDsKfTsKCnN0cnVjdCBk ZW50cnlfc3RhdF90IHsKICAgICAgICBpbnQgbnJfZGVudHJ5OwogICAgICAgIGludCBucl91bnVz ZWQ7CiAgICAgICAgaW50IGFnZV9saW1pdDsKICAgICAgICBpbnQgd2FudF9wYWdlczsKICAgICAg ICBpbnQgZHVtbXlbMl07Cn07CmV4dGVybiBzdHJ1Y3QgZGVudHJ5X3N0YXRfdCBkZW50cnlfc3Rh dDsKCgoKCgoKc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBwYXJ0aWFsX25hbWVfaGFz aCh1bnNpZ25lZCBsb25nIGMsIHVuc2lnbmVkIGxvbmcgcHJldmhhc2gpCnsKICAgICAgICByZXR1 cm4gKHByZXZoYXNoICsgKGMgPDwgNCkgKyAoYyA+PiA0KSkgKiAxMTsKfQoKCnN0YXRpYyBfX2lu bGluZV9fIHVuc2lnbmVkIGxvbmcgZW5kX25hbWVfaGFzaCh1bnNpZ25lZCBsb25nIGhhc2gpCnsK ICAgICAgICByZXR1cm4gKHVuc2lnbmVkIGludCkgaGFzaDsKfQoKCnN0YXRpYyBfX2lubGluZV9f IHVuc2lnbmVkIGludCBmdWxsX25hbWVfaGFzaChjb25zdCB1bnNpZ25lZCBjaGFyICogbmFtZSwg dW5zaWduZWQgaW50IGxlbikKewogICAgICAgIHVuc2lnbmVkIGxvbmcgaGFzaCA9IDA7CiAgICAg ICAgd2hpbGUgKGxlbi0tKQogICAgICAgICAgICAgICAgaGFzaCA9IHBhcnRpYWxfbmFtZV9oYXNo KCpuYW1lKyssIGhhc2gpOwogICAgICAgIHJldHVybiBlbmRfbmFtZV9oYXNoKGhhc2gpOwp9CgoK CgpzdHJ1Y3QgZGNvb2tpZV9zdHJ1Y3Q7CgpzdHJ1Y3QgZGVudHJ5IHsKICAgICAgICBhdG9taWNf dCBkX2NvdW50OwogICAgICAgIHVuc2lnbmVkIGludCBkX2ZsYWdzOwogICAgICAgIHN0cnVjdCBp bm9kZSAqIGRfaW5vZGU7CiAgICAgICAgc3RydWN0IGRlbnRyeSAqIGRfcGFyZW50OwogICAgICAg IHN0cnVjdCBsaXN0X2hlYWQgZF9oYXNoOwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgZF9scnU7 CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBkX2NoaWxkOwogICAgICAgIHN0cnVjdCBsaXN0X2hl YWQgZF9zdWJkaXJzOwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgZF9hbGlhczsKICAgICAgICBp bnQgZF9tb3VudGVkOwogICAgICAgIHN0cnVjdCBxc3RyIGRfbmFtZTsKICAgICAgICB1bnNpZ25l ZCBsb25nIGRfdGltZTsKICAgICAgICBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgKmRfb3A7CiAg ICAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICogZF9zYjsKICAgICAgICB1bnNpZ25lZCBsb25nIGRf dmZzX2ZsYWdzOwogICAgICAgIHZvaWQgKiBkX2ZzZGF0YTsKICAgICAgICB2b2lkICogZF9leHRy YV9hdHRyaWJ1dGVzOwogICAgICAgIHVuc2lnbmVkIGNoYXIgZF9pbmFtZVsyNF07CiAgICAgICAg c3RydWN0IGRjb29raWVfc3RydWN0ICogZF9jb29raWU7Cn07CgpzdHJ1Y3QgZGVudHJ5X29wZXJh dGlvbnMgewogICAgICAgIGludCAoKmRfcmV2YWxpZGF0ZSkoc3RydWN0IGRlbnRyeSAqLCBpbnQp OwogICAgICAgIGludCAoKmRfaGFzaCkgKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IHFzdHIgKik7 CiAgICAgICAgaW50ICgqZF9jb21wYXJlKSAoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgcXN0ciAq LCBzdHJ1Y3QgcXN0ciAqKTsKICAgICAgICBpbnQgKCpkX2RlbGV0ZV9SMzc3YjViN2MpKHN0cnVj dCBkZW50cnkgKik7CiAgICAgICAgdm9pZCAoKmRfcmVsZWFzZSkoc3RydWN0IGRlbnRyeSAqKTsK ICAgICAgICB2b2lkICgqZF9pcHV0KShzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpbm9kZSAqKTsK fTsKIyAxMzMgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvZGNhY2hlLmgi CmV4dGVybiBzcGlubG9ja190IGRjYWNoZV9sb2NrX1I3MzQ2M2NlZjsKIyAxNTIgIi91c3Ivc3Jj L2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvZGNhY2hlLmgiCnN0YXRpYyBfX2lubGluZV9f IHZvaWQgZF9kcm9wKHN0cnVjdCBkZW50cnkgKiBkZW50cnkpCnsKICAgICAgICAodm9pZCkoJmRj YWNoZV9sb2NrX1I3MzQ2M2NlZik7CiAgICAgICAgbGlzdF9kZWwoJmRlbnRyeS0+ZF9oYXNoKTsK ICAgICAgICBkbyB7ICgmZGVudHJ5LT5kX2hhc2gpLT5uZXh0ID0gKCZkZW50cnktPmRfaGFzaCk7 ICgmZGVudHJ5LT5kX2hhc2gpLT5wcmV2ID0gKCZkZW50cnktPmRfaGFzaCk7IH0gd2hpbGUgKDAp OwogICAgICAgIGRvIHsgfSB3aGlsZSgwKTsKfQoKc3RhdGljIF9faW5saW5lX18gaW50IGRuYW1l X2V4dGVybmFsKHN0cnVjdCBkZW50cnkgKmQpCnsKICAgICAgICByZXR1cm4gZC0+ZF9uYW1lLm5h bWUgIT0gZC0+ZF9pbmFtZTsKfQoKCgoKZXh0ZXJuIHZvaWQgZF9pbnN0YW50aWF0ZV9SYjQ4MThh M2Qoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaW5vZGUgKik7CmV4dGVybiB2b2lkIGRfZGVsZXRl X1IzNzdiNWI3YyhzdHJ1Y3QgZGVudHJ5ICopOwoKCmV4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9h bGxvY19SMDY3ZDJjNDAoc3RydWN0IGRlbnRyeSAqLCBjb25zdCBzdHJ1Y3QgcXN0ciAqKTsKZXh0 ZXJuIHZvaWQgc2hyaW5rX2RjYWNoZV9zYl9SZGE5ZDRjNzgoc3RydWN0IHN1cGVyX2Jsb2NrICop OwpleHRlcm4gdm9pZCBzaHJpbmtfZGNhY2hlX3BhcmVudF9SOTgwMWM0OTAoc3RydWN0IGRlbnRy eSAqKTsKZXh0ZXJuIGludCBkX2ludmFsaWRhdGVfUjIyNGI5Njc5KHN0cnVjdCBkZW50cnkgKik7 CmV4dGVybiB2b2lkIGZsdXNoX2RlbnRyeV9hdHRyaWJ1dGVzX1JkNDZjNDY5MSh2b2lkKTsKCgpz dHJ1Y3Qgem9uZV9zdHJ1Y3Q7CgpleHRlcm4gaW50IHNocmlua19kY2FjaGVfbWVtb3J5KGludCwg dW5zaWduZWQgaW50KTsKZXh0ZXJuIHZvaWQgcHJ1bmVfZGNhY2hlX1I2Y2YyOGY3NyhpbnQpOwoK CmV4dGVybiBpbnQgc2hyaW5rX2ljYWNoZV9tZW1vcnkoaW50LCBpbnQpOwpleHRlcm4gdm9pZCBw cnVuZV9pY2FjaGUoaW50KTsKCgpleHRlcm4gaW50IHNocmlua19kcWNhY2hlX21lbW9yeShpbnQs IHVuc2lnbmVkIGludCk7CgoKZXh0ZXJuIHN0cnVjdCBkZW50cnkgKiBkX2FsbG9jX3Jvb3RfUmVh Yzk5ZGU4KHN0cnVjdCBpbm9kZSAqKTsKCgpleHRlcm4gdm9pZCBkX2dlbm9jaWRlKHN0cnVjdCBk ZW50cnkgKik7CgpleHRlcm4gc3RydWN0IGRlbnRyeSAqZF9maW5kX2FsaWFzX1JiZWU4ZDEyZihz dHJ1Y3QgaW5vZGUgKik7CmV4dGVybiB2b2lkIGRfcHJ1bmVfYWxpYXNlc19SMTAxODcwMDYoc3Ry dWN0IGlub2RlICopOwoKCmV4dGVybiBpbnQgaGF2ZV9zdWJtb3VudHNfUjI3YzFhN2JlKHN0cnVj dCBkZW50cnkgKik7CgoKCgpleHRlcm4gdm9pZCBkX3JlaGFzaF9SMTY2ZmFlMWMoc3RydWN0IGRl bnRyeSAqKTsKIyAyMTcgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvZGNh Y2hlLmgiCnN0YXRpYyBfX2lubGluZV9fIHZvaWQgZF9hZGQoc3RydWN0IGRlbnRyeSAqIGVudHJ5 LCBzdHJ1Y3QgaW5vZGUgKiBpbm9kZSkKewogICAgICAgIGRfaW5zdGFudGlhdGVfUmI0ODE4YTNk KGVudHJ5LCBpbm9kZSk7CiAgICAgICAgZF9yZWhhc2hfUjE2NmZhZTFjKGVudHJ5KTsKfQoKCmV4 dGVybiB2b2lkIGRfbW92ZV9SZmJjYjI4NzQoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgZGVudHJ5 ICopOwoKCmV4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9sb29rdXBfUjQzMzM4NmEzKHN0cnVjdCBk ZW50cnkgKiwgc3RydWN0IHFzdHIgKik7CgoKZXh0ZXJuIGludCBkX3ZhbGlkYXRlX1I1MDUxZmE3 OShzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBkZW50cnkgKik7CgpleHRlcm4gY2hhciAqIF9fZF9w YXRoX1JiN2JmOTAzNihzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCB2ZnNtb3VudCAqLCBzdHJ1Y3Qg ZGVudHJ5ICosCiAgICAgICAgc3RydWN0IHZmc21vdW50ICosIGNoYXIgKiwgaW50KTsKIyAyNTAg Ii91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvZGNhY2hlLmgiCnN0YXRpYyBf X2lubGluZV9fIHN0cnVjdCBkZW50cnkgKiBkZ2V0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKewog ICAgICAgIGlmIChkZW50cnkpIHsKICAgICAgICAgICAgICAgIGlmICghKCgmZGVudHJ5LT5kX2Nv dW50KS0+Y291bnRlcikpCiAgICAgICAgICAgICAgICAgICAgICAgIF9fb3V0X29mX2xpbmVfYnVn X1I4YjBmZDNjNSgyNTQpOwogICAgICAgICAgICAgICAgYXRvbWljX2luYygmZGVudHJ5LT5kX2Nv dW50KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGRlbnRyeTsKfQoKZXh0ZXJuIHN0cnVjdCBk ZW50cnkgKiBkZ2V0X2xvY2tlZF9SZGE2ZmUxMmEoc3RydWN0IGRlbnRyeSAqKTsKIyAyNjkgIi91 c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvZGNhY2hlLmgiCnN0YXRpYyBfX2lu bGluZV9fIGludCBkX3VuaGFzaGVkKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKewogICAgICAgIHJl dHVybiBsaXN0X2VtcHR5KCZkZW50cnktPmRfaGFzaCk7Cn0KCmV4dGVybiB2b2lkIGRwdXRfUjNk ZTgxM2E2KHN0cnVjdCBkZW50cnkgKik7CgpzdGF0aWMgX19pbmxpbmVfXyBpbnQgZF9tb3VudHBv aW50KHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKewogICAgICAgIHJldHVybiBkZW50cnktPmRfbW91 bnRlZDsKfQoKZXh0ZXJuIHN0cnVjdCB2ZnNtb3VudCAqbG9va3VwX21udF9SN2Y5ZjJmZjIoc3Ry dWN0IHZmc21vdW50ICosIHN0cnVjdCBkZW50cnkgKik7CiMgMjAgIi91c3Ivc3JjL2xpbnV4LTIu NC4yMC04L2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04 L2luY2x1ZGUvbGludXgvc3RhdC5oIiAxCgoKCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAt OC9pbmNsdWRlL2FzbS9zdGF0LmgiIDEKCgoKc3RydWN0IF9fb2xkX2tlcm5lbF9zdGF0IHsKICAg ICAgICB1bnNpZ25lZCBzaG9ydCBzdF9kZXY7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc3RfaW5v OwogICAgICAgIHVuc2lnbmVkIHNob3J0IHN0X21vZGU7CiAgICAgICAgdW5zaWduZWQgc2hvcnQg c3Rfbmxpbms7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc3RfdWlkOwogICAgICAgIHVuc2lnbmVk IHNob3J0IHN0X2dpZDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzdF9yZGV2OwogICAgICAgIHVu c2lnbmVkIGxvbmcgc3Rfc2l6ZTsKICAgICAgICB1bnNpZ25lZCBsb25nIHN0X2F0aW1lOwogICAg ICAgIHVuc2lnbmVkIGxvbmcgc3RfbXRpbWU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzdF9jdGlt ZTsKfTsKCnN0cnVjdCBzdGF0IHsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzdF9kZXY7CiAgICAg ICAgdW5zaWduZWQgc2hvcnQgX19wYWQxOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc3RfaW5vOwog ICAgICAgIHVuc2lnbmVkIHNob3J0IHN0X21vZGU7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc3Rf bmxpbms7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc3RfdWlkOwogICAgICAgIHVuc2lnbmVkIHNo b3J0IHN0X2dpZDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzdF9yZGV2OwogICAgICAgIHVuc2ln bmVkIHNob3J0IF9fcGFkMjsKICAgICAgICB1bnNpZ25lZCBsb25nIHN0X3NpemU7CiAgICAgICAg dW5zaWduZWQgbG9uZyBzdF9ibGtzaXplOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc3RfYmxvY2tz OwogICAgICAgIHVuc2lnbmVkIGxvbmcgc3RfYXRpbWU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBf X3VudXNlZDE7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzdF9tdGltZTsKICAgICAgICB1bnNpZ25l ZCBsb25nIF9fdW51c2VkMjsKICAgICAgICB1bnNpZ25lZCBsb25nIHN0X2N0aW1lOwogICAgICAg IHVuc2lnbmVkIGxvbmcgX191bnVzZWQzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgX191bnVzZWQ0 OwogICAgICAgIHVuc2lnbmVkIGxvbmcgX191bnVzZWQ1Owp9OwoKCgoKc3RydWN0IHN0YXQ2NCB7 CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc3RfZGV2OwogICAgICAgIHVuc2lnbmVkIGNoYXIgX19w YWQwWzEwXTsKCgogICAgICAgIHVuc2lnbmVkIGxvbmcgX19zdF9pbm87CgogICAgICAgIHVuc2ln bmVkIGludCBzdF9tb2RlOwogICAgICAgIHVuc2lnbmVkIGludCBzdF9ubGluazsKCiAgICAgICAg dW5zaWduZWQgbG9uZyBzdF91aWQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzdF9naWQ7CgogICAg ICAgIHVuc2lnbmVkIHNob3J0IHN0X3JkZXY7CiAgICAgICAgdW5zaWduZWQgY2hhciBfX3BhZDNb MTBdOwoKICAgICAgICBsb25nIGxvbmcgc3Rfc2l6ZTsKICAgICAgICB1bnNpZ25lZCBsb25nIHN0 X2Jsa3NpemU7CgogICAgICAgIHVuc2lnbmVkIGxvbmcgc3RfYmxvY2tzOwogICAgICAgIHVuc2ln bmVkIGxvbmcgX19wYWQ0OwoKICAgICAgICB1bnNpZ25lZCBsb25nIHN0X2F0aW1lOwogICAgICAg IHVuc2lnbmVkIGxvbmcgX19wYWQ1OwoKICAgICAgICB1bnNpZ25lZCBsb25nIHN0X210aW1lOwog ICAgICAgIHVuc2lnbmVkIGxvbmcgX19wYWQ2OwoKICAgICAgICB1bnNpZ25lZCBsb25nIHN0X2N0 aW1lOwogICAgICAgIHVuc2lnbmVkIGxvbmcgX19wYWQ3OwoKICAgICAgICB1bnNpZ25lZCBsb25n IGxvbmcgc3RfaW5vOwp9OwojIDcgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGlu dXgvc3RhdC5oIiAyCiMgNTggIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgv c3RhdC5oIgpzdHJ1Y3Qga3N0YXRfUjU2ODZiNmRlIHsKICAgICAgICB1bnNpZ25lZCBsb25nIGlu bzsKICAgICAgICBkZXZfdCBkZXY7CiAgICAgICAgdW1vZGVfdCBtb2RlOwogICAgICAgIG5saW5r X3Qgbmxpbms7CiAgICAgICAgdWlkX3QgdWlkOwogICAgICAgIGdpZF90IGdpZDsKICAgICAgICBk ZXZfdCByZGV2OwogICAgICAgIGxvZmZfdCBzaXplOwogICAgICAgIHRpbWVfdCBhdGltZTsKICAg ICAgICB0aW1lX3QgbXRpbWU7CiAgICAgICAgdGltZV90IGN0aW1lOwogICAgICAgIHVuc2lnbmVk IGxvbmcgYmxrc2l6ZTsKICAgICAgICB1bnNpZ25lZCBsb25nIGJsb2NrczsKfTsKIyAyMSAiL3Vz ci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9mcy5oIiAyCgoKCgoKIyAxICIvdXNy L3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2FzbS9iaXRvcHMuaCIgMQojIDM3ICIvdXNyL3Ny Yy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2FzbS9iaXRvcHMuaCIKc3RhdGljIF9faW5saW5lX18g dm9pZCBzZXRfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCnsKICAgICAgICBfX2Fz bV9fIF9fdm9sYXRpbGVfXyggIiIKICAgICAgICAgICAgICAgICJidHNsICUxLCUwIgogICAgICAg ICAgICAgICAgOiI9bSIgKCgqKHZvbGF0aWxlIGxvbmcgKikgYWRkcikpCiAgICAgICAgICAgICAg ICA6IklyIiAobnIpKTsKfQojIDU0ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2Fz bS9iaXRvcHMuaCIKc3RhdGljIF9faW5saW5lX18gdm9pZCBfX3NldF9iaXQoaW50IG5yLCB2b2xh dGlsZSB2b2lkICogYWRkcikKewogICAgICAgIF9fYXNtX18oCiAgICAgICAgICAgICAgICAiYnRz bCAlMSwlMCIKICAgICAgICAgICAgICAgIDoiPW0iICgoKih2b2xhdGlsZSBsb25nICopIGFkZHIp KQogICAgICAgICAgICAgICAgOiJJciIgKG5yKSk7Cn0KIyA3MiAiL3Vzci9zcmMvbGludXgtMi40 LjIwLTgvaW5jbHVkZS9hc20vYml0b3BzLmgiCnN0YXRpYyBfX2lubGluZV9fIHZvaWQgY2xlYXJf Yml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCnsKICAgICAgICBfX2FzbV9fIF9fdm9s YXRpbGVfXyggIiIKICAgICAgICAgICAgICAgICJidHJsICUxLCUwIgogICAgICAgICAgICAgICAg OiI9bSIgKCgqKHZvbGF0aWxlIGxvbmcgKikgYWRkcikpCiAgICAgICAgICAgICAgICA6IklyIiAo bnIpKTsKfQoKc3RhdGljIF9faW5saW5lX18gdm9pZCBfX2NsZWFyX2JpdChpbnQgbnIsIHZvbGF0 aWxlIHZvaWQgKiBhZGRyKQp7CiAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oCiAgICAgICAg ICAgICAgICAiYnRybCAlMSwlMCIKICAgICAgICAgICAgICAgIDoiPW0iICgoKih2b2xhdGlsZSBs b25nICopIGFkZHIpKQogICAgICAgICAgICAgICAgOiJJciIgKG5yKSk7Cn0KIyA5OSAiL3Vzci9z cmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9hc20vYml0b3BzLmgiCnN0YXRpYyBfX2lubGluZV9f IHZvaWQgX19jaGFuZ2VfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCnsKICAgICAg ICBfX2FzbV9fIF9fdm9sYXRpbGVfXygKICAgICAgICAgICAgICAgICJidGNsICUxLCUwIgogICAg ICAgICAgICAgICAgOiI9bSIgKCgqKHZvbGF0aWxlIGxvbmcgKikgYWRkcikpCiAgICAgICAgICAg ICAgICA6IklyIiAobnIpKTsKfQojIDExNiAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVk ZS9hc20vYml0b3BzLmgiCnN0YXRpYyBfX2lubGluZV9fIHZvaWQgY2hhbmdlX2JpdChpbnQgbnIs IHZvbGF0aWxlIHZvaWQgKiBhZGRyKQp7CiAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oICIi CiAgICAgICAgICAgICAgICAiYnRjbCAlMSwlMCIKICAgICAgICAgICAgICAgIDoiPW0iICgoKih2 b2xhdGlsZSBsb25nICopIGFkZHIpKQogICAgICAgICAgICAgICAgOiJJciIgKG5yKSk7Cn0KIyAx MzIgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvYXNtL2JpdG9wcy5oIgpzdGF0aWMg X19pbmxpbmVfXyBpbnQgdGVzdF9hbmRfc2V0X2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBh ZGRyKQp7CiAgICAgICAgaW50IG9sZGJpdDsKCiAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18o ICIiCiAgICAgICAgICAgICAgICAiYnRzbCAlMiwlMVxuXHRzYmJsICUwLCUwIgogICAgICAgICAg ICAgICAgOiI9ciIgKG9sZGJpdCksIj1tIiAoKCoodm9sYXRpbGUgbG9uZyAqKSBhZGRyKSkKICAg ICAgICAgICAgICAgIDoiSXIiIChucikgOiAibWVtb3J5Iik7CiAgICAgICAgcmV0dXJuIG9sZGJp dDsKfQojIDE1MiAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9hc20vYml0b3BzLmgi CnN0YXRpYyBfX2lubGluZV9fIGludCBfX3Rlc3RfYW5kX3NldF9iaXQoaW50IG5yLCB2b2xhdGls ZSB2b2lkICogYWRkcikKewogICAgICAgIGludCBvbGRiaXQ7CgogICAgICAgIF9fYXNtX18oCiAg ICAgICAgICAgICAgICAiYnRzbCAlMiwlMVxuXHRzYmJsICUwLCUwIgogICAgICAgICAgICAgICAg OiI9ciIgKG9sZGJpdCksIj1tIiAoKCoodm9sYXRpbGUgbG9uZyAqKSBhZGRyKSkKICAgICAgICAg ICAgICAgIDoiSXIiIChucikpOwogICAgICAgIHJldHVybiBvbGRiaXQ7Cn0KIyAxNzEgIi91c3Iv c3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvYXNtL2JpdG9wcy5oIgpzdGF0aWMgX19pbmxpbmVf XyBpbnQgdGVzdF9hbmRfY2xlYXJfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCnsK ICAgICAgICBpbnQgb2xkYml0OwoKICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIiIKICAg ICAgICAgICAgICAgICJidHJsICUyLCUxXG5cdHNiYmwgJTAsJTAiCiAgICAgICAgICAgICAgICA6 Ij1yIiAob2xkYml0KSwiPW0iICgoKih2b2xhdGlsZSBsb25nICopIGFkZHIpKQogICAgICAgICAg ICAgICAgOiJJciIgKG5yKSA6ICJtZW1vcnkiKTsKICAgICAgICByZXR1cm4gb2xkYml0Owp9CiMg MTkxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2FzbS9iaXRvcHMuaCIKc3RhdGlj IF9faW5saW5lX18gaW50IF9fdGVzdF9hbmRfY2xlYXJfYml0KGludCBuciwgdm9sYXRpbGUgdm9p ZCAqIGFkZHIpCnsKICAgICAgICBpbnQgb2xkYml0OwoKICAgICAgICBfX2FzbV9fKAogICAgICAg ICAgICAgICAgImJ0cmwgJTIsJTFcblx0c2JibCAlMCwlMCIKICAgICAgICAgICAgICAgIDoiPXIi IChvbGRiaXQpLCI9bSIgKCgqKHZvbGF0aWxlIGxvbmcgKikgYWRkcikpCiAgICAgICAgICAgICAg ICA6IklyIiAobnIpKTsKICAgICAgICByZXR1cm4gb2xkYml0Owp9CgoKc3RhdGljIF9faW5saW5l X18gaW50IF9fdGVzdF9hbmRfY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRy KQp7CiAgICAgICAgaW50IG9sZGJpdDsKCiAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oCiAg ICAgICAgICAgICAgICAiYnRjbCAlMiwlMVxuXHRzYmJsICUwLCUwIgogICAgICAgICAgICAgICAg OiI9ciIgKG9sZGJpdCksIj1tIiAoKCoodm9sYXRpbGUgbG9uZyAqKSBhZGRyKSkKICAgICAgICAg ICAgICAgIDoiSXIiIChucikgOiAibWVtb3J5Iik7CiAgICAgICAgcmV0dXJuIG9sZGJpdDsKfQoj IDIyMiAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9hc20vYml0b3BzLmgiCnN0YXRp YyBfX2lubGluZV9fIGludCB0ZXN0X2FuZF9jaGFuZ2VfYml0KGludCBuciwgdm9sYXRpbGUgdm9p ZCAqIGFkZHIpCnsKICAgICAgICBpbnQgb2xkYml0OwoKICAgICAgICBfX2FzbV9fIF9fdm9sYXRp bGVfXyggIiIKICAgICAgICAgICAgICAgICJidGNsICUyLCUxXG5cdHNiYmwgJTAsJTAiCiAgICAg ICAgICAgICAgICA6Ij1yIiAob2xkYml0KSwiPW0iICgoKih2b2xhdGlsZSBsb25nICopIGFkZHIp KQogICAgICAgICAgICAgICAgOiJJciIgKG5yKSA6ICJtZW1vcnkiKTsKICAgICAgICByZXR1cm4g b2xkYml0Owp9CiMgMjQyICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2FzbS9iaXRv cHMuaCIKc3RhdGljIF9faW5saW5lX18gaW50IGNvbnN0YW50X3Rlc3RfYml0KGludCBuciwgY29u c3Qgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCnsKICAgICAgICByZXR1cm4gKCgxVUwgPDwgKG5yICYg MzEpKSAmICgoKGNvbnN0IHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSBhZGRyKVtuciA+PiA1XSkp ICE9IDA7Cn0KCnN0YXRpYyBfX2lubGluZV9fIGludCB2YXJpYWJsZV90ZXN0X2JpdChpbnQgbnIs IHZvbGF0aWxlIHZvaWQgKiBhZGRyKQp7CiAgICAgICAgaW50IG9sZGJpdDsKCiAgICAgICAgX19h c21fXyBfX3ZvbGF0aWxlX18oCiAgICAgICAgICAgICAgICAiYnRsICUyLCUxXG5cdHNiYmwgJTAs JTAiCiAgICAgICAgICAgICAgICA6Ij1yIiAob2xkYml0KQogICAgICAgICAgICAgICAgOiJtIiAo KCoodm9sYXRpbGUgbG9uZyAqKSBhZGRyKSksIklyIiAobnIpKTsKICAgICAgICByZXR1cm4gb2xk Yml0Owp9CiMgMjcxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2FzbS9iaXRvcHMu aCIKc3RhdGljIF9faW5saW5lX18gaW50IGZpbmRfZmlyc3RfemVyb19iaXQodm9pZCAqIGFkZHIs IHVuc2lnbmVkIHNpemUpCnsKICAgICAgICBpbnQgZDAsIGQxLCBkMjsKICAgICAgICBpbnQgcmVz OwoKICAgICAgICBpZiAoIXNpemUpCiAgICAgICAgICAgICAgICByZXR1cm4gMDsKCiAgICAgICAg X19hc21fXyBfX3ZvbGF0aWxlX18oCiAgICAgICAgICAgICAgICAibW92bCAkLTEsJSVlYXhcblx0 IgogICAgICAgICAgICAgICAgInhvcmwgJSVlZHgsJSVlZHhcblx0IgogICAgICAgICAgICAgICAg InJlcGU7IHNjYXNsXG5cdCIKICAgICAgICAgICAgICAgICJqZSAxZlxuXHQiCiAgICAgICAgICAg ICAgICAieG9ybCAtNCglJWVkaSksJSVlYXhcblx0IgogICAgICAgICAgICAgICAgInN1YmwgJDQs JSVlZGlcblx0IgogICAgICAgICAgICAgICAgImJzZmwgJSVlYXgsJSVlZHhcbiIKICAgICAgICAg ICAgICAgICIxOlx0c3VibCAlJWVieCwlJWVkaVxuXHQiCiAgICAgICAgICAgICAgICAic2hsbCAk MywlJWVkaVxuXHQiCiAgICAgICAgICAgICAgICAiYWRkbCAlJWVkaSwlJWVkeCIKICAgICAgICAg ICAgICAgIDoiPWQiIChyZXMpLCAiPSZjIiAoZDApLCAiPSZEIiAoZDEpLCAiPSZhIiAoZDIpCiAg ICAgICAgICAgICAgICA6IjEiICgoc2l6ZSArIDMxKSA+PiA1KSwgIjIiIChhZGRyKSwgImIiIChh ZGRyKSk7CiAgICAgICAgcmV0dXJuIHJlczsKfQojIDMwMyAiL3Vzci9zcmMvbGludXgtMi40LjIw LTgvaW5jbHVkZS9hc20vYml0b3BzLmgiCnN0YXRpYyBfX2lubGluZV9fIGludCBmaW5kX2ZpcnN0 X2JpdCh2b2lkICogYWRkciwgdW5zaWduZWQgc2l6ZSkKewogICAgICAgIGludCBkMCwgZDE7CiAg ICAgICAgaW50IHJlczsKCgogICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKAogICAgICAgICAg ICAgICAgInhvcmwgJSVlYXgsJSVlYXhcblx0IgogICAgICAgICAgICAgICAgInJlcGU7IHNjYXNs XG5cdCIKICAgICAgICAgICAgICAgICJqeiAxZlxuXHQiCiAgICAgICAgICAgICAgICAibGVhbCAt NCglJWVkaSksJSVlZGlcblx0IgogICAgICAgICAgICAgICAgImJzZmwgKCUlZWRpKSwlJWVheFxu IgogICAgICAgICAgICAgICAgIjE6XHRzdWJsICUlZWJ4LCUlZWRpXG5cdCIKICAgICAgICAgICAg ICAgICJzaGxsICQzLCUlZWRpXG5cdCIKICAgICAgICAgICAgICAgICJhZGRsICUlZWRpLCUlZWF4 IgogICAgICAgICAgICAgICAgOiI9YSIgKHJlcyksICI9JmMiIChkMCksICI9JkQiIChkMSkKICAg ICAgICAgICAgICAgIDoiMSIgKChzaXplICsgMzEpID4+IDUpLCAiMiIgKGFkZHIpLCAiYiIgKGFk ZHIpKTsKICAgICAgICByZXR1cm4gcmVzOwp9CgoKCgoKCgpzdGF0aWMgX19pbmxpbmVfXyBpbnQg ZmluZF9uZXh0X3plcm9fYml0ICh2b2lkICogYWRkciwgaW50IHNpemUsIGludCBvZmZzZXQpCnsK ICAgICAgICB1bnNpZ25lZCBsb25nICogcCA9ICgodW5zaWduZWQgbG9uZyAqKSBhZGRyKSArIChv ZmZzZXQgPj4gNSk7CiAgICAgICAgaW50IHNldCA9IDAsIGJpdCA9IG9mZnNldCAmIDMxLCByZXM7 CgogICAgICAgIGlmIChiaXQpIHsKCgoKICAgICAgICAgICAgICAgIF9fYXNtX18oImJzZmwgJTEs JTBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAiam5lIDFmXG5cdCIKICAgICAgICAgICAg ICAgICAgICAgICAgIm1vdmwgJDMyLCAlMFxuIgogICAgICAgICAgICAgICAgICAgICAgICAiMToi CiAgICAgICAgICAgICAgICAgICAgICAgIDogIj1yIiAoc2V0KQogICAgICAgICAgICAgICAgICAg ICAgICA6ICJyIiAofigqcCA+PiBiaXQpKSk7CiAgICAgICAgICAgICAgICBpZiAoc2V0IDwgKDMy IC0gYml0KSkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldCArIG9mZnNldDsKICAg ICAgICAgICAgICAgIHNldCA9IDMyIC0gYml0OwogICAgICAgICAgICAgICAgcCsrOwogICAgICAg IH0KCgoKICAgICAgICByZXMgPSBmaW5kX2ZpcnN0X3plcm9fYml0IChwLCBzaXplIC0gMzIgKiAo cCAtICh1bnNpZ25lZCBsb25nICopIGFkZHIpKTsKICAgICAgICByZXR1cm4gKG9mZnNldCArIHNl dCArIHJlcyk7Cn0KCgoKCgoKCnN0YXRpYyBfX2lubGluZV9fIGludCBmaW5kX25leHRfYml0ICh2 b2lkICogYWRkciwgaW50IHNpemUsIGludCBvZmZzZXQpCnsKICAgICAgICB1bnNpZ25lZCBsb25n ICogcCA9ICgodW5zaWduZWQgbG9uZyAqKSBhZGRyKSArIChvZmZzZXQgPj4gNSk7CiAgICAgICAg aW50IHNldCA9IDAsIGJpdCA9IG9mZnNldCAmIDMxLCByZXM7CgogICAgICAgIGlmIChiaXQpIHsK CgoKICAgICAgICAgICAgICAgIF9fYXNtX18oImJzZmwgJTEsJTBcblx0IgogICAgICAgICAgICAg ICAgICAgICAgICAiam5lIDFmXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgIm1vdmwgJDMy LCAlMFxuIgogICAgICAgICAgICAgICAgICAgICAgICAiMToiCiAgICAgICAgICAgICAgICAgICAg ICAgIDogIj1yIiAoc2V0KQogICAgICAgICAgICAgICAgICAgICAgICA6ICJyIiAoKnAgPj4gYml0 KSk7CiAgICAgICAgICAgICAgICBpZiAoc2V0IDwgKDMyIC0gYml0KSkKICAgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIHNldCArIG9mZnNldDsKICAgICAgICAgICAgICAgIHNldCA9IDMyIC0g Yml0OwogICAgICAgICAgICAgICAgcCsrOwogICAgICAgIH0KCgoKICAgICAgICByZXMgPSBmaW5k X2ZpcnN0X2JpdCAocCwgc2l6ZSAtIDMyICogKHAgLSAodW5zaWduZWQgbG9uZyAqKSBhZGRyKSk7 CiAgICAgICAgcmV0dXJuIChvZmZzZXQgKyBzZXQgKyByZXMpOwp9CgoKCgoKCgpzdGF0aWMgX19p bmxpbmVfXyB1bnNpZ25lZCBsb25nIGZmeih1bnNpZ25lZCBsb25nIHdvcmQpCnsKICAgICAgICBf X2FzbV9fKCJic2ZsICUxLCUwIgogICAgICAgICAgICAgICAgOiI9ciIgKHdvcmQpCiAgICAgICAg ICAgICAgICA6InIiICh+d29yZCkpOwogICAgICAgIHJldHVybiB3b3JkOwp9CgoKCgoKCgpzdGF0 aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIF9fZmZzKHVuc2lnbmVkIGxvbmcgd29yZCkKewog ICAgICAgIF9fYXNtX18oImJzZmwgJTEsJTAiCiAgICAgICAgICAgICAgICA6Ij1yIiAod29yZCkK ICAgICAgICAgICAgICAgIDoicm0iICh3b3JkKSk7CiAgICAgICAgcmV0dXJuIHdvcmQ7Cn0KIyA0 MjUgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvYXNtL2JpdG9wcy5oIgpzdGF0aWMg aW5saW5lIGludCBzY2hlZF9maW5kX2ZpcnN0X2JpdCh1bnNpZ25lZCBsb25nICpiKQp7CiAgICAg ICAgaWYgKF9fYnVpbHRpbl9leHBlY3QoKGJbMF0pLDApKQogICAgICAgICAgICAgICAgcmV0dXJu IF9fZmZzKGJbMF0pOwogICAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0KChiWzFdKSwwKSkKICAg ICAgICAgICAgICAgIHJldHVybiBfX2ZmcyhiWzFdKSArIDMyOwogICAgICAgIGlmIChfX2J1aWx0 aW5fZXhwZWN0KChiWzJdKSwwKSkKICAgICAgICAgICAgICAgIHJldHVybiBfX2ZmcyhiWzJdKSAr IDY0OwogICAgICAgIGlmIChiWzNdKQogICAgICAgICAgICAgICAgcmV0dXJuIF9fZmZzKGJbM10p ICsgOTY7CiAgICAgICAgcmV0dXJuIF9fZmZzKGJbNF0pICsgMTI4Owp9CiMgNDQ2ICIvdXNyL3Ny Yy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2FzbS9iaXRvcHMuaCIKc3RhdGljIF9faW5saW5lX18g aW50IGZmcyhpbnQgeCkKewogICAgICAgIGludCByOwoKICAgICAgICBfX2FzbV9fKCJic2ZsICUx LCUwXG5cdCIKICAgICAgICAgICAgICAgICJqbnogMWZcblx0IgogICAgICAgICAgICAgICAgIm1v dmwgJC0xLCUwXG4iCiAgICAgICAgICAgICAgICAiMToiIDogIj1yIiAocikgOiAicm0iICh4KSk7 CiAgICAgICAgcmV0dXJuIHIrMTsKfQojIDI3ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNs dWRlL2xpbnV4L2ZzLmgiIDIKCnN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdDsKIyA1MCAiL3Vzci9z cmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9mcy5oIgpzdHJ1Y3QgZmlsZXNfc3RhdF9z dHJ1Y3QgewogICAgICAgIGludCBucl9maWxlczsKICAgICAgICBpbnQgbnJfZnJlZV9maWxlczsK ICAgICAgICBpbnQgbWF4X2ZpbGVzOwp9OwpleHRlcm4gc3RydWN0IGZpbGVzX3N0YXRfc3RydWN0 IGZpbGVzX3N0YXRfUjAzY2FkYTI3OwoKc3RydWN0IGlub2Rlc19zdGF0X3QgewogICAgICAgIGlu dCBucl9pbm9kZXM7CiAgICAgICAgaW50IG5yX3VudXNlZDsKICAgICAgICBpbnQgZHVtbXlbNV07 Cn07CmV4dGVybiBzdHJ1Y3QgaW5vZGVzX3N0YXRfdCBpbm9kZXNfc3RhdDsKCmV4dGVybiBpbnQg bGVhc2VzX2VuYWJsZSwgZGlyX25vdGlmeV9lbmFibGUsIGxlYXNlX2JyZWFrX3RpbWU7CiMgMjAw ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2ZzLmgiCiMgMSAiL3Vzci9z cmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9hc20vc2VtYXBob3JlLmgiIDEKIyAzOSAiL3Vzci9z cmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9hc20vc2VtYXBob3JlLmgiCiMgMSAiL3Vzci9zcmMv bGludXgtMi40LjIwLTgvaW5jbHVkZS9hc20vc3lzdGVtLmgiIDEKCgoKCgojIDEgIi91c3Ivc3Jj L2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvaW5pdC5oIiAxCiMgMTMxICIvdXNyL3NyYy9s aW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2luaXQuaCIKdHlwZWRlZiBpbnQgKCpfX2luaXRf bW9kdWxlX2Z1bmNfdCkodm9pZCk7CnR5cGVkZWYgdm9pZCAoKl9fY2xlYW51cF9tb2R1bGVfZnVu Y190KSh2b2lkKTsKIyA3ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2FzbS9zeXN0 ZW0uaCIgMgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2JpdG9w cy5oIiAxCiMgMTEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvYml0b3Bz LmgiCnN0YXRpYyBpbmxpbmUgaW50IGdlbmVyaWNfZmZzKGludCB4KQp7CiAgICAgICAgaW50IHIg PSAxOwoKICAgICAgICBpZiAoIXgpCiAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICBp ZiAoISh4ICYgMHhmZmZmKSkgewogICAgICAgICAgICAgICAgeCA+Pj0gMTY7CiAgICAgICAgICAg ICAgICByICs9IDE2OwogICAgICAgIH0KICAgICAgICBpZiAoISh4ICYgMHhmZikpIHsKICAgICAg ICAgICAgICAgIHggPj49IDg7CiAgICAgICAgICAgICAgICByICs9IDg7CiAgICAgICAgfQogICAg ICAgIGlmICghKHggJiAweGYpKSB7CiAgICAgICAgICAgICAgICB4ID4+PSA0OwogICAgICAgICAg ICAgICAgciArPSA0OwogICAgICAgIH0KICAgICAgICBpZiAoISh4ICYgMykpIHsKICAgICAgICAg ICAgICAgIHggPj49IDI7CiAgICAgICAgICAgICAgICByICs9IDI7CiAgICAgICAgfQogICAgICAg IGlmICghKHggJiAxKSkgewogICAgICAgICAgICAgICAgeCA+Pj0gMTsKICAgICAgICAgICAgICAg IHIgKz0gMTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHI7Cn0KCgoKCgoKc3RhdGljIGlubGlu ZSB1bnNpZ25lZCBpbnQgZ2VuZXJpY19od2VpZ2h0MzIodW5zaWduZWQgaW50IHcpCnsKICAgICAg ICB1bnNpZ25lZCBpbnQgcmVzID0gKHcgJiAweDU1NTU1NTU1KSArICgodyA+PiAxKSAmIDB4NTU1 NTU1NTUpOwogICAgICAgIHJlcyA9IChyZXMgJiAweDMzMzMzMzMzKSArICgocmVzID4+IDIpICYg MHgzMzMzMzMzMyk7CiAgICAgICAgcmVzID0gKHJlcyAmIDB4MEYwRjBGMEYpICsgKChyZXMgPj4g NCkgJiAweDBGMEYwRjBGKTsKICAgICAgICByZXMgPSAocmVzICYgMHgwMEZGMDBGRikgKyAoKHJl cyA+PiA4KSAmIDB4MDBGRjAwRkYpOwogICAgICAgIHJldHVybiAocmVzICYgMHgwMDAwRkZGRikg KyAoKHJlcyA+PiAxNikgJiAweDAwMDBGRkZGKTsKfQoKc3RhdGljIGlubGluZSB1bnNpZ25lZCBp bnQgZ2VuZXJpY19od2VpZ2h0MTYodW5zaWduZWQgaW50IHcpCnsKICAgICAgICB1bnNpZ25lZCBp bnQgcmVzID0gKHcgJiAweDU1NTUpICsgKCh3ID4+IDEpICYgMHg1NTU1KTsKICAgICAgICByZXMg PSAocmVzICYgMHgzMzMzKSArICgocmVzID4+IDIpICYgMHgzMzMzKTsKICAgICAgICByZXMgPSAo cmVzICYgMHgwRjBGKSArICgocmVzID4+IDQpICYgMHgwRjBGKTsKICAgICAgICByZXR1cm4gKHJl cyAmIDB4MDBGRikgKyAoKHJlcyA+PiA4KSAmIDB4MDBGRik7Cn0KCnN0YXRpYyBpbmxpbmUgdW5z aWduZWQgaW50IGdlbmVyaWNfaHdlaWdodDgodW5zaWduZWQgaW50IHcpCnsKICAgICAgICB1bnNp Z25lZCBpbnQgcmVzID0gKHcgJiAweDU1KSArICgodyA+PiAxKSAmIDB4NTUpOwogICAgICAgIHJl cyA9IChyZXMgJiAweDMzKSArICgocmVzID4+IDIpICYgMHgzMyk7CiAgICAgICAgcmV0dXJuIChy ZXMgJiAweDBGKSArICgocmVzID4+IDQpICYgMHgwRik7Cn0KIyA5ICIvdXNyL3NyYy9saW51eC0y LjQuMjAtOC9pbmNsdWRlL2FzbS9zeXN0ZW0uaCIgMgoKCgpzdHJ1Y3QgdGFza19zdHJ1Y3Q7CmV4 dGVybiB2b2lkIF9fc3dpdGNoX3RvKHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldiwgc3RydWN0IHRh c2tfc3RydWN0ICpuZXh0KSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CiMgNjEgIi91c3Iv c3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvYXNtL3N5c3RlbS5oIgpzdGF0aWMgaW5saW5lIHVu c2lnbmVkIGxvbmcgX2dldF9iYXNlKGNoYXIgKiBhZGRyKQp7CiAgICAgICAgdW5zaWduZWQgbG9u ZyBfX2Jhc2U7CiAgICAgICAgX19hc21fXygibW92YiAlMywlJWRoXG5cdCIKICAgICAgICAgICAg ICAgICJtb3ZiICUyLCUlZGxcblx0IgogICAgICAgICAgICAgICAgInNobGwgJDE2LCUlZWR4XG5c dCIKICAgICAgICAgICAgICAgICJtb3Z3ICUxLCUlZHgiCiAgICAgICAgICAgICAgICA6Ij0mZCIg KF9fYmFzZSkKICAgICAgICAgICAgICAgIDoibSIgKCooKGFkZHIpKzIpKSwKICAgICAgICAgICAg ICAgICAibSIgKCooKGFkZHIpKzQpKSwKICAgICAgICAgICAgICAgICAibSIgKCooKGFkZHIpKzcp KSk7CiAgICAgICAgcmV0dXJuIF9fYmFzZTsKfQojIDEyOCAiL3Vzci9zcmMvbGludXgtMi40LjIw LTgvaW5jbHVkZS9hc20vc3lzdGVtLmgiCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRf bGltaXQodW5zaWduZWQgbG9uZyBzZWdtZW50KQp7CiAgICAgICAgdW5zaWduZWQgbG9uZyBfX2xp bWl0OwogICAgICAgIF9fYXNtX18oImxzbGwgJTEsJTAiCiAgICAgICAgICAgICAgICA6Ij1yIiAo X19saW1pdCk6InIiIChzZWdtZW50KSk7CiAgICAgICAgcmV0dXJuIF9fbGltaXQrMTsKfQoKCgoK CgoKc3RydWN0IF9feGNoZ19kdW1teSB7IHVuc2lnbmVkIGxvbmcgYVsxMDBdOyB9OwojIDE2MCAi L3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9hc20vc3lzdGVtLmgiCnN0YXRpYyBpbmxp bmUgdm9pZCBfX3NldF82NGJpdCAodW5zaWduZWQgbG9uZyBsb25nICogcHRyLAogICAgICAgICAg ICAgICAgdW5zaWduZWQgaW50IGxvdywgdW5zaWduZWQgaW50IGhpZ2gpCnsKICAgICAgICBfX2Fz bV9fIF9fdm9sYXRpbGVfXyAoCiAgICAgICAgICAgICAgICAiXG4xOlx0IgogICAgICAgICAgICAg ICAgIm1vdmwgKCUwKSwgJSVlYXhcblx0IgogICAgICAgICAgICAgICAgIm1vdmwgNCglMCksICUl ZWR4XG5cdCIKICAgICAgICAgICAgICAgICJsb2NrIGNtcHhjaGc4YiAoJTApXG5cdCIKICAgICAg ICAgICAgICAgICJqbnogMWIiCiAgICAgICAgICAgICAgICA6CiAgICAgICAgICAgICAgICA6ICJE IihwdHIpLAogICAgICAgICAgICAgICAgICAgICAgICAiYiIobG93KSwKICAgICAgICAgICAgICAg ICAgICAgICAgImMiKGhpZ2gpCiAgICAgICAgICAgICAgICA6ICJheCIsImR4IiwibWVtb3J5Iik7 Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF82NGJpdF9jb25zdGFudCAodW5zaWduZWQgbG9u ZyBsb25nICpwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWUpCnsKICAgICAgICBfX3NldF82NGJpdChwdHIs KHVuc2lnbmVkIGludCkodmFsdWUpLCAodW5zaWduZWQgaW50KSgodmFsdWUpPj4zMlVMTCkpOwp9 CgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF82NGJpdF92YXIgKHVuc2lnbmVkIGxvbmcgbG9u ZyAqcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHZhbHVl KQp7CiAgICAgICAgX19zZXRfNjRiaXQocHRyLCooKCh1bnNpZ25lZCBpbnQqKSYodmFsdWUpKSsw KSwgKigoKHVuc2lnbmVkIGludCopJih2YWx1ZSkpKzEpKTsKfQojIDIwNSAiL3Vzci9zcmMvbGlu dXgtMi40LjIwLTgvaW5jbHVkZS9hc20vc3lzdGVtLmgiCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQg bG9uZyBfX3hjaGcodW5zaWduZWQgbG9uZyB4LCB2b2xhdGlsZSB2b2lkICogcHRyLCBpbnQgc2l6 ZSkKewogICAgICAgIHN3aXRjaCAoc2l6ZSkgewogICAgICAgICAgICAgICAgY2FzZSAxOgogICAg ICAgICAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygieGNoZ2IgJWIwLCUxIgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoiPXEiICh4KQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDoibSIgKCooKHN0cnVjdCBfX3hjaGdfZHVtbXkgKikocHRyKSkpLCAi MCIgKHgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiJtZW1vcnkiKTsKICAgICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIDI6CiAgICAgICAg ICAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJ4Y2hndyAldzAsJTEiCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiI9ciIgKHgpCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOiJtIiAoKigoc3RydWN0IF9feGNoZ19kdW1teSAqKShwdHIpKSksICIwIiAo eCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Im1lbW9yeSIpOwogICAgICAgICAg ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgNDoKICAgICAgICAgICAg ICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInhjaGdsICUwLCUxIgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDoiPXIiICh4KQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDoibSIgKCooKHN0cnVjdCBfX3hjaGdfZHVtbXkgKikocHRyKSkpLCAiMCIgKHgpCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiJtZW1vcnkiKTsKICAgICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHJldHVybiB4Owp9CiMgMjM5ICIvdXNy L3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2FzbS9zeXN0ZW0uaCIKc3RhdGljIGlubGluZSB1 bnNpZ25lZCBsb25nIF9fY21weGNoZyh2b2xhdGlsZSB2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcg b2xkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcg bmV3LCBpbnQgc2l6ZSkKewogICAgICAgIHVuc2lnbmVkIGxvbmcgcHJldjsKICAgICAgICBzd2l0 Y2ggKHNpemUpIHsKICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9s YXRpbGVfXygiIiAiY21weGNoZ2IgJWIxLCUyIgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOiAiPWEiKHByZXYpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA6ICJxIihuZXcpLCAibSIoKigoc3RydWN0IF9feGNoZ19kdW1teSAqKShwdHIpKSksICIwIihv bGQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJtZW1vcnkiKTsKICAg ICAgICAgICAgICAgIHJldHVybiBwcmV2OwogICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICAg IF9fYXNtX18gX192b2xhdGlsZV9fKCIiICJjbXB4Y2hndyAldzEsJTIiCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA6ICI9YSIocHJldikKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDogInEiKG5ldyksICJtIigqKChzdHJ1Y3QgX194Y2hnX2R1bW15ICop KHB0cikpKSwgIjAiKG9sZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDog Im1lbW9yeSIpOwogICAgICAgICAgICAgICAgcmV0dXJuIHByZXY7CiAgICAgICAgY2FzZSA0Ogog ICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIiIgImNtcHhjaGdsICUxLCUyIgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiPWEiKHByZXYpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJxIihuZXcpLCAibSIoKigoc3RydWN0IF9f eGNoZ19kdW1teSAqKShwdHIpKSksICIwIihvbGQpCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA6ICJtZW1vcnkiKTsKICAgICAgICAgICAgICAgIHJldHVybiBwcmV2OwogICAg ICAgIH0KICAgICAgICByZXR1cm4gb2xkOwp9CiMgMzczICIvdXNyL3NyYy9saW51eC0yLjQuMjAt OC9pbmNsdWRlL2FzbS9zeXN0ZW0uaCIKdm9pZCBkaXNhYmxlX2hsdF9SNzk0NDg3ZWUodm9pZCk7 CnZvaWQgZW5hYmxlX2hsdF9SOWM3MDc3YmQodm9pZCk7CgpleHRlcm4gdW5zaWduZWQgbG9uZyBk bWlfYnJva2VuOwpleHRlcm4gaW50IGlzX3NvbnlfdmFpb19sYXB0b3BfUjc0NjJkNWU0OwojIDQw ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2FzbS9zZW1hcGhvcmUuaCIgMgoKCiMg MSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9yd3NlbS5oIiAxCiMgMjQg Ii91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvcndzZW0uaCIKc3RydWN0IHJ3 X3NlbWFwaG9yZTsKCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9hc20v cndzZW0uaCIgMQojIDQ3ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2FzbS9yd3Nl bS5oIgpzdHJ1Y3QgcndzZW1fd2FpdGVyOwoKZXh0ZXJuIHN0cnVjdCByd19zZW1hcGhvcmUgKnJ3 c2VtX2Rvd25fcmVhZF9mYWlsZWQoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKSBfX2F0dHJpYnV0 ZV9fKChyZWdwYXJtKDMpKSk7CmV4dGVybiBzdHJ1Y3Qgcndfc2VtYXBob3JlICpyd3NlbV9kb3du X3dyaXRlX2ZhaWxlZChzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pIF9fYXR0cmlidXRlX18oKHJl Z3Bhcm0oMykpKTsKZXh0ZXJuIHN0cnVjdCByd19zZW1hcGhvcmUgKnJ3c2VtX3dha2Uoc3RydWN0 IHJ3X3NlbWFwaG9yZSAqKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CgoKCgpzdHJ1Y3Qg cndfc2VtYXBob3JlIHsKICAgICAgICBzaWduZWQgbG9uZyBjb3VudDsKCgoKCgoKICAgICAgICBz cGlubG9ja190IHdhaXRfbG9jazsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIHdhaXRfbGlzdDsK CgoKfTsKIyA4NyAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9hc20vcndzZW0uaCIK c3RhdGljIGlubGluZSB2b2lkIGluaXRfcndzZW1fUmFjNDU4Mzc1KHN0cnVjdCByd19zZW1hcGhv cmUgKnNlbSkKewogICAgICAgIHNlbS0+Y291bnQgPSAweDAwMDAwMDAwOwogICAgICAgIGRvIHsg fSB3aGlsZSgwKTsKICAgICAgICBkbyB7ICgmc2VtLT53YWl0X2xpc3QpLT5uZXh0ID0gKCZzZW0t PndhaXRfbGlzdCk7ICgmc2VtLT53YWl0X2xpc3QpLT5wcmV2ID0gKCZzZW0tPndhaXRfbGlzdCk7 IH0gd2hpbGUgKDApOwoKCgp9CgoKCgpzdGF0aWMgaW5saW5lIHZvaWQgX19kb3duX3JlYWRfUjZl YmQ0NmE1KHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKewogICAgICAgIF9fYXNtX18gX192b2xh dGlsZV9fKAogICAgICAgICAgICAgICAgIiMgYmVnaW5uaW5nIGRvd25fcmVhZFxuXHQiCiIiICIg IGluY2wgICAgICAoJSVlYXgpXG5cdCIKICAgICAgICAgICAgICAgICIgIGpzICAgICAgICAyZlxu XHQiCiAgICAgICAgICAgICAgICAiMTpcblx0IgogICAgICAgICAgICAgICAgIi5zdWJzZWN0aW9u IDFcblx0IiAiIiAiLmlmbmRlZiAiICIudGV4dC5sb2NrLiIgInNrZ2Vwbm1pIiAiXG5cdCIgIi50 ZXh0LmxvY2suIiAic2tnZXBubWkiICI6XG5cdCIgIi5lbmRpZlxuXHQiCiAgICAgICAgICAgICAg ICAiMjpcblx0IgogICAgICAgICAgICAgICAgIiAgcHVzaGwgICAgICUlZWN4XG5cdCIKICAgICAg ICAgICAgICAgICIgIHB1c2hsICAgICAlJWVkeFxuXHQiCiAgICAgICAgICAgICAgICAiICBjYWxs ICAgICAgcndzZW1fZG93bl9yZWFkX2ZhaWxlZFxuXHQiCiAgICAgICAgICAgICAgICAiICBwb3Bs ICAgICAgJSVlZHhcblx0IgogICAgICAgICAgICAgICAgIiAgcG9wbCAgICAgICUlZWN4XG5cdCIK ICAgICAgICAgICAgICAgICIgIGptcCAgICAgICAxYlxuIgogICAgICAgICAgICAgICAgIi5wcmV2 aW91c1xuXHQiCiAgICAgICAgICAgICAgICAiIyBlbmRpbmcgZG93bl9yZWFkXG5cdCIKICAgICAg ICAgICAgICAgIDogIittIihzZW0tPmNvdW50KQogICAgICAgICAgICAgICAgOiAiYSIoc2VtKQog ICAgICAgICAgICAgICAgOiAibWVtb3J5IiwgImNjIik7Cn0KCgoKCnN0YXRpYyBpbmxpbmUgaW50 IF9fZG93bl9yZWFkX3RyeWxvY2tfUmExNTI5ZGNjKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkK ewogICAgICAgIF9fczMyIHJlc3VsdCwgdG1wOwogICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9f KAogICAgICAgICAgICAgICAgIiMgYmVnaW5uaW5nIF9fZG93bl9yZWFkX3RyeWxvY2tcblx0Igog ICAgICAgICAgICAgICAgIiAgbW92bCAgICAgICUwLCUxXG5cdCIKICAgICAgICAgICAgICAgICIx OlxuXHQiCiAgICAgICAgICAgICAgICAiICBtb3ZsCSAgICAgJTEsJTJcblx0IgogICAgICAgICAg ICAgICAgIiAgYWRkbCAgICAgICUzLCUyXG5cdCIKICAgICAgICAgICAgICAgICIgIGpsZQkgICAg IDJmXG5cdCIKIiIgIiAgY21weGNoZ2wgICUyLCUwXG5cdCIKICAgICAgICAgICAgICAgICIgIGpu egkgICAgIDFiXG5cdCIKICAgICAgICAgICAgICAgICIyOlxuXHQiCiAgICAgICAgICAgICAgICAi IyBlbmRpbmcgX19kb3duX3JlYWRfdHJ5bG9ja1xuXHQiCiAgICAgICAgICAgICAgICA6ICIrbSIo c2VtLT5jb3VudCksICI9JmEiKHJlc3VsdCksICI9JnIiKHRtcCkKICAgICAgICAgICAgICAgIDog ImkiKDB4MDAwMDAwMDEpCiAgICAgICAgICAgICAgICA6ICJtZW1vcnkiLCAiY2MiKTsKICAgICAg ICByZXR1cm4gcmVzdWx0Pj0wID8gMSA6IDA7Cn0KCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBfX2Rv d25fd3JpdGVfUjdmZDU0YzVjKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKewogICAgICAgIGlu dCB0bXA7CgogICAgICAgIHRtcCA9ICgoLTB4MDAwMTAwMDApICsgMHgwMDAwMDAwMSk7CiAgICAg ICAgX19hc21fXyBfX3ZvbGF0aWxlX18oCiAgICAgICAgICAgICAgICAiIyBiZWdpbm5pbmcgZG93 bl93cml0ZVxuXHQiCiIiICIgIHhhZGQgICAgICAlMCwoJSVlYXgpXG5cdCIKICAgICAgICAgICAg ICAgICIgIHRlc3RsICAgICAlMCwlMFxuXHQiCiAgICAgICAgICAgICAgICAiICBqbnogICAgICAg MmZcblx0IgogICAgICAgICAgICAgICAgIjE6XG5cdCIKICAgICAgICAgICAgICAgICIuc3Vic2Vj dGlvbiAxXG5cdCIgIiIgIi5pZm5kZWYgIiAiLnRleHQubG9jay4iICJza2dlcG5taSIgIlxuXHQi ICIudGV4dC5sb2NrLiIgInNrZ2Vwbm1pIiAiOlxuXHQiICIuZW5kaWZcblx0IgogICAgICAgICAg ICAgICAgIjI6XG5cdCIKICAgICAgICAgICAgICAgICIgIHB1c2hsICAgICAlJWVjeFxuXHQiCiAg ICAgICAgICAgICAgICAiICBjYWxsICAgICAgcndzZW1fZG93bl93cml0ZV9mYWlsZWRcblx0Igog ICAgICAgICAgICAgICAgIiAgcG9wbCAgICAgICUlZWN4XG5cdCIKICAgICAgICAgICAgICAgICIg IGptcCAgICAgICAxYlxuIgogICAgICAgICAgICAgICAgIi5wcmV2aW91c1xuXHQiCiAgICAgICAg ICAgICAgICAiIyBlbmRpbmcgZG93bl93cml0ZSIKICAgICAgICAgICAgICAgIDogIitkIih0bXAp LCAiK20iKHNlbS0+Y291bnQpCiAgICAgICAgICAgICAgICA6ICJhIihzZW0pCiAgICAgICAgICAg ICAgICA6ICJtZW1vcnkiLCAiY2MiKTsKfQoKCgoKc3RhdGljIGlubGluZSBpbnQgX19kb3duX3dy aXRlX3RyeWxvY2tfUjk5YzVkZTJhKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKewogICAgICAg IHNpZ25lZCBsb25nIHJldCA9ICgoX190eXBlb2ZfXygqKCZzZW0tPmNvdW50KSkpX19jbXB4Y2hn KCgmc2VtLT5jb3VudCksKHVuc2lnbmVkIGxvbmcpKDB4MDAwMDAwMDApLCAodW5zaWduZWQgbG9u ZykoKCgtMHgwMDAxMDAwMCkgKyAweDAwMDAwMDAxKSksc2l6ZW9mKCooJnNlbS0+Y291bnQpKSkp OwoKCiAgICAgICAgaWYgKHJldCA9PSAweDAwMDAwMDAwKQogICAgICAgICAgICAgICAgcmV0dXJu IDE7CiAgICAgICAgcmV0dXJuIDA7Cn0KCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBfX3VwX3JlYWRf UjU3ODNlOGVjKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKewogICAgICAgIF9fczMyIHRtcCA9 IC0weDAwMDAwMDAxOwogICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKAogICAgICAgICAgICAg ICAgIiMgYmVnaW5uaW5nIF9fdXBfcmVhZFxuXHQiCiIiICIgIHhhZGQgICAgICAlJWVkeCwoJSVl YXgpXG5cdCIKICAgICAgICAgICAgICAgICIgIGpzICAgICAgICAyZlxuXHQiCiAgICAgICAgICAg ICAgICAiMTpcblx0IgogICAgICAgICAgICAgICAgIi5zdWJzZWN0aW9uIDFcblx0IiAiIiAiLmlm bmRlZiAiICIudGV4dC5sb2NrLiIgInNrZ2Vwbm1pIiAiXG5cdCIgIi50ZXh0LmxvY2suIiAic2tn ZXBubWkiICI6XG5cdCIgIi5lbmRpZlxuXHQiCiAgICAgICAgICAgICAgICAiMjpcblx0IgogICAg ICAgICAgICAgICAgIiAgZGVjdyAgICAgICUlZHhcblx0IgogICAgICAgICAgICAgICAgIiAgam56 ICAgICAgIDFiXG5cdCIKICAgICAgICAgICAgICAgICIgIHB1c2hsICAgICAlJWVjeFxuXHQiCiAg ICAgICAgICAgICAgICAiICBjYWxsICAgICAgcndzZW1fd2FrZVxuXHQiCiAgICAgICAgICAgICAg ICAiICBwb3BsICAgICAgJSVlY3hcblx0IgogICAgICAgICAgICAgICAgIiAgam1wICAgICAgIDFi XG4iCiAgICAgICAgICAgICAgICAiLnByZXZpb3VzXG5cdCIKICAgICAgICAgICAgICAgICIjIGVu ZGluZyBfX3VwX3JlYWRcbiIKICAgICAgICAgICAgICAgIDogIittIihzZW0tPmNvdW50KSwgIitk Iih0bXApCiAgICAgICAgICAgICAgICA6ICJhIihzZW0pCiAgICAgICAgICAgICAgICA6ICJtZW1v cnkiLCAiY2MiKTsKfQoKCgoKc3RhdGljIGlubGluZSB2b2lkIF9fdXBfd3JpdGVfUjcwZWM4YmM2 KHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKewogICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9f KAogICAgICAgICAgICAgICAgIiMgYmVnaW5uaW5nIF9fdXBfd3JpdGVcblx0IgogICAgICAgICAg ICAgICAgIiAgbW92bCAgICAgICUyLCUlZWR4XG5cdCIKIiIgIiAgeGFkZGwgICAgICUlZWR4LCgl JWVheClcblx0IgogICAgICAgICAgICAgICAgIiAgam56ICAgICAgIDJmXG5cdCIKICAgICAgICAg ICAgICAgICIxOlxuXHQiCiAgICAgICAgICAgICAgICAiLnN1YnNlY3Rpb24gMVxuXHQiICIiICIu aWZuZGVmICIgIi50ZXh0LmxvY2suIiAic2tnZXBubWkiICJcblx0IiAiLnRleHQubG9jay4iICJz a2dlcG5taSIgIjpcblx0IiAiLmVuZGlmXG5cdCIKICAgICAgICAgICAgICAgICIyOlxuXHQiCiAg ICAgICAgICAgICAgICAiICBkZWN3ICAgICAgJSVkeFxuXHQiCiAgICAgICAgICAgICAgICAiICBq bnogICAgICAgMWJcblx0IgogICAgICAgICAgICAgICAgIiAgcHVzaGwgICAgICUlZWN4XG5cdCIK ICAgICAgICAgICAgICAgICIgIGNhbGwgICAgICByd3NlbV93YWtlXG5cdCIKICAgICAgICAgICAg ICAgICIgIHBvcGwgICAgICAlJWVjeFxuXHQiCiAgICAgICAgICAgICAgICAiICBqbXAgICAgICAg MWJcbiIKICAgICAgICAgICAgICAgICIucHJldmlvdXNcblx0IgogICAgICAgICAgICAgICAgIiMg ZW5kaW5nIF9fdXBfd3JpdGVcbiIKICAgICAgICAgICAgICAgIDogIittIihzZW0tPmNvdW50KQog ICAgICAgICAgICAgICAgOiAiYSIoc2VtKSwgImkiKC0oKC0weDAwMDEwMDAwKSArIDB4MDAwMDAw MDEpKQogICAgICAgICAgICAgICAgOiAibWVtb3J5IiwgImNjIiwgImVkeCIpOwp9CgoKCgpzdGF0 aWMgaW5saW5lIHZvaWQgcndzZW1fYXRvbWljX2FkZChpbnQgZGVsdGEsIHN0cnVjdCByd19zZW1h cGhvcmUgKnNlbSkKewogICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKAoiIiAiYWRkbCAlMSwl MCIKICAgICAgICAgICAgICAgIDoiPW0iKHNlbS0+Y291bnQpCiAgICAgICAgICAgICAgICA6Imly IihkZWx0YSksICJtIihzZW0tPmNvdW50KSk7Cn0KCgoKCnN0YXRpYyBpbmxpbmUgaW50IHJ3c2Vt X2F0b21pY191cGRhdGUoaW50IGRlbHRhLCBzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCnsKICAg ICAgICBpbnQgdG1wID0gZGVsdGE7CgogICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKAoiIiAi eGFkZCAlMCwoJTIpIgogICAgICAgICAgICAgICAgOiAiK3IiKHRtcCksICI9bSIoc2VtLT5jb3Vu dCkKICAgICAgICAgICAgICAgIDogInIiKHNlbSksICJtIihzZW0tPmNvdW50KQogICAgICAgICAg ICAgICAgOiAibWVtb3J5Iik7CgogICAgICAgIHJldHVybiB0bXArZGVsdGE7Cn0KIyAzMCAiL3Vz ci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9yd3NlbS5oIiAyCiMgNDMgIi91c3Iv c3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvcndzZW0uaCIKc3RhdGljIGlubGluZSB2 b2lkIGRvd25fcmVhZChzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCnsKICAgICAgICA7CiAgICAg ICAgX19kb3duX3JlYWRfUjZlYmQ0NmE1KHNlbSk7CiAgICAgICAgOwp9CgoKCgpzdGF0aWMgaW5s aW5lIGludCBkb3duX3JlYWRfdHJ5bG9jayhzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCnsKICAg ICAgICBpbnQgcmV0OwogICAgICAgIDsKICAgICAgICByZXQgPSBfX2Rvd25fcmVhZF90cnlsb2Nr X1JhMTUyOWRjYyhzZW0pOwogICAgICAgIDsKICAgICAgICByZXR1cm4gcmV0Owp9CgoKCgpzdGF0 aWMgaW5saW5lIHZvaWQgZG93bl93cml0ZShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCnsKICAg ICAgICA7CiAgICAgICAgX19kb3duX3dyaXRlX1I3ZmQ1NGM1YyhzZW0pOwogICAgICAgIDsKfQoK CgoKc3RhdGljIGlubGluZSBpbnQgZG93bl93cml0ZV90cnlsb2NrKHN0cnVjdCByd19zZW1hcGhv cmUgKnNlbSkKewogICAgICAgIGludCByZXQ7CiAgICAgICAgOwogICAgICAgIHJldCA9IF9fZG93 bl93cml0ZV90cnlsb2NrX1I5OWM1ZGUyYShzZW0pOwogICAgICAgIDsKICAgICAgICByZXR1cm4g cmV0Owp9CgoKCgpzdGF0aWMgaW5saW5lIHZvaWQgdXBfcmVhZChzdHJ1Y3Qgcndfc2VtYXBob3Jl ICpzZW0pCnsKICAgICAgICA7CiAgICAgICAgX191cF9yZWFkX1I1NzgzZThlYyhzZW0pOwogICAg ICAgIDsKfQoKCgoKc3RhdGljIGlubGluZSB2b2lkIHVwX3dyaXRlKHN0cnVjdCByd19zZW1hcGhv cmUgKnNlbSkKewogICAgICAgIDsKICAgICAgICBfX3VwX3dyaXRlX1I3MGVjOGJjNihzZW0pOwog ICAgICAgIDsKfQojIDQzICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2FzbS9zZW1h cGhvcmUuaCIgMgoKc3RydWN0IHNlbWFwaG9yZSB7CiAgICAgICAgYXRvbWljX3QgY291bnQ7CiAg ICAgICAgaW50IHNsZWVwZXJzOwogICAgICAgIHdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CgoKCn07 CiMgNzMgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvYXNtL3NlbWFwaG9yZS5oIgpz dGF0aWMgaW5saW5lIHZvaWQgc2VtYV9pbml0IChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0sIGludCB2 YWwpCnsKCgoKCgoKICAgICAgICAoKCgmc2VtLT5jb3VudCktPmNvdW50ZXIpID0gKHZhbCkpOwog ICAgICAgIHNlbS0+c2xlZXBlcnMgPSAwOwogICAgICAgIGluaXRfd2FpdHF1ZXVlX2hlYWQoJnNl bS0+d2FpdCk7CgoKCn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X01VVEVYIChzdHJ1Y3Qgc2Vt YXBob3JlICpzZW0pCnsKICAgICAgICBzZW1hX2luaXQoc2VtLCAxKTsKfQoKc3RhdGljIGlubGlu ZSB2b2lkIGluaXRfTVVURVhfTE9DS0VEIChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCnsKICAgICAg ICBzZW1hX2luaXQoc2VtLCAwKTsKfQoKIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkpKSB2b2lk IF9fZG93bl9mYWlsZWQodm9pZCApOwogX19hdHRyaWJ1dGVfXygocmVncGFybSgwKSkpIGludCBf X2Rvd25fZmFpbGVkX2ludGVycnVwdGlibGUodm9pZCApOwogX19hdHRyaWJ1dGVfXygocmVncGFy bSgwKSkpIGludCBfX2Rvd25fZmFpbGVkX3RyeWxvY2sodm9pZCApOwogX19hdHRyaWJ1dGVfXygo cmVncGFybSgwKSkpIHZvaWQgX191cF93YWtldXAodm9pZCApOwoKIF9fYXR0cmlidXRlX18oKHJl Z3Bhcm0oMCkpKSB2b2lkIF9fZG93bihzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKTsKIF9fYXR0cmli dXRlX18oKHJlZ3Bhcm0oMCkpKSBpbnQgX19kb3duX2ludGVycnVwdGlibGUoc3RydWN0IHNlbWFw aG9yZSAqIHNlbSk7CiBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDApKSkgaW50IF9fZG93bl90cnls b2NrKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pOwogX19hdHRyaWJ1dGVfXygocmVncGFybSgwKSkp IHZvaWQgX191cChzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKTsKCgoKCgoKc3RhdGljIGlubGluZSB2 b2lkIGRvd24oc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKewoKCgoKICAgICAgICBfX2FzbV9fIF9f dm9sYXRpbGVfXygKICAgICAgICAgICAgICAgICIjIGF0b21pYyBkb3duIG9wZXJhdGlvblxuXHQi CiAgICAgICAgICAgICAgICAiIiAiZGVjbCAlMFxuXHQiCiAgICAgICAgICAgICAgICAianMgMmZc biIKICAgICAgICAgICAgICAgICIxOlxuIgogICAgICAgICAgICAgICAgIi5zdWJzZWN0aW9uIDFc blx0IiAiIiAiLmlmbmRlZiAiICIudGV4dC5sb2NrLiIgInNrZ2Vwbm1pIiAiXG5cdCIgIi50ZXh0 LmxvY2suIiAic2tnZXBubWkiICI6XG5cdCIgIi5lbmRpZlxuXHQiCiAgICAgICAgICAgICAgICAi MjpcdGNhbGwgX19kb3duX2ZhaWxlZFxuXHQiCiAgICAgICAgICAgICAgICAiam1wIDFiXG4iCiAg ICAgICAgICAgICAgICAiLnByZXZpb3VzXG5cdCIKICAgICAgICAgICAgICAgIDoiPW0iIChzZW0t PmNvdW50KQogICAgICAgICAgICAgICAgOiJjIiAoc2VtKQogICAgICAgICAgICAgICAgOiJtZW1v cnkiKTsKfQoKCgoKCnN0YXRpYyBpbmxpbmUgaW50IGRvd25faW50ZXJydXB0aWJsZShzdHJ1Y3Qg c2VtYXBob3JlICogc2VtKQp7CiAgICAgICAgaW50IHJlc3VsdDsKCgoKCgogICAgICAgIF9fYXNt X18gX192b2xhdGlsZV9fKAogICAgICAgICAgICAgICAgIiMgYXRvbWljIGludGVycnVwdGlibGUg ZG93biBvcGVyYXRpb25cblx0IgogICAgICAgICAgICAgICAgIiIgImRlY2wgJTFcblx0IgogICAg ICAgICAgICAgICAgImpzIDJmXG5cdCIKICAgICAgICAgICAgICAgICJ4b3JsICUwLCUwXG4iCiAg ICAgICAgICAgICAgICAiMTpcbiIKICAgICAgICAgICAgICAgICIuc3Vic2VjdGlvbiAxXG5cdCIg IiIgIi5pZm5kZWYgIiAiLnRleHQubG9jay4iICJza2dlcG5taSIgIlxuXHQiICIudGV4dC5sb2Nr LiIgInNrZ2Vwbm1pIiAiOlxuXHQiICIuZW5kaWZcblx0IgogICAgICAgICAgICAgICAgIjI6XHRj YWxsIF9fZG93bl9mYWlsZWRfaW50ZXJydXB0aWJsZVxuXHQiCiAgICAgICAgICAgICAgICAiam1w IDFiXG4iCiAgICAgICAgICAgICAgICAiLnByZXZpb3VzXG5cdCIKICAgICAgICAgICAgICAgIDoi PWEiIChyZXN1bHQpLCAiPW0iIChzZW0tPmNvdW50KQogICAgICAgICAgICAgICAgOiJjIiAoc2Vt KQogICAgICAgICAgICAgICAgOiJtZW1vcnkiKTsKICAgICAgICByZXR1cm4gcmVzdWx0Owp9CgoK CgoKc3RhdGljIGlubGluZSBpbnQgZG93bl90cnlsb2NrKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0p CnsKICAgICAgICBpbnQgcmVzdWx0OwoKCgoKCiAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18o CiAgICAgICAgICAgICAgICAiIyBhdG9taWMgaW50ZXJydXB0aWJsZSBkb3duIG9wZXJhdGlvblxu XHQiCiAgICAgICAgICAgICAgICAiIiAiZGVjbCAlMVxuXHQiCiAgICAgICAgICAgICAgICAianMg MmZcblx0IgogICAgICAgICAgICAgICAgInhvcmwgJTAsJTBcbiIKICAgICAgICAgICAgICAgICIx OlxuIgogICAgICAgICAgICAgICAgIi5zdWJzZWN0aW9uIDFcblx0IiAiIiAiLmlmbmRlZiAiICIu dGV4dC5sb2NrLiIgInNrZ2Vwbm1pIiAiXG5cdCIgIi50ZXh0LmxvY2suIiAic2tnZXBubWkiICI6 XG5cdCIgIi5lbmRpZlxuXHQiCiAgICAgICAgICAgICAgICAiMjpcdGNhbGwgX19kb3duX2ZhaWxl ZF90cnlsb2NrXG5cdCIKICAgICAgICAgICAgICAgICJqbXAgMWJcbiIKICAgICAgICAgICAgICAg ICIucHJldmlvdXNcblx0IgogICAgICAgICAgICAgICAgOiI9YSIgKHJlc3VsdCksICI9bSIgKHNl bS0+Y291bnQpCiAgICAgICAgICAgICAgICA6ImMiIChzZW0pCiAgICAgICAgICAgICAgICA6Im1l bW9yeSIpOwogICAgICAgIHJldHVybiByZXN1bHQ7Cn0KCgoKCgoKCnN0YXRpYyBpbmxpbmUgdm9p ZCB1cChzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQp7CgoKCiAgICAgICAgX19hc21fXyBfX3ZvbGF0 aWxlX18oCiAgICAgICAgICAgICAgICAiIyBhdG9taWMgdXAgb3BlcmF0aW9uXG5cdCIKICAgICAg ICAgICAgICAgICIiICJpbmNsICUwXG5cdCIKICAgICAgICAgICAgICAgICJqbGUgMmZcbiIKICAg ICAgICAgICAgICAgICIxOlxuIgogICAgICAgICAgICAgICAgIi5zdWJzZWN0aW9uIDFcblx0IiAi IiAiLmlmbmRlZiAiICIudGV4dC5sb2NrLiIgInNrZ2Vwbm1pIiAiXG5cdCIgIi50ZXh0LmxvY2su IiAic2tnZXBubWkiICI6XG5cdCIgIi5lbmRpZlxuXHQiCiAgICAgICAgICAgICAgICAiMjpcdGNh bGwgX191cF93YWtldXBcblx0IgogICAgICAgICAgICAgICAgImptcCAxYlxuIgogICAgICAgICAg ICAgICAgIi5wcmV2aW91c1xuXHQiCiAgICAgICAgICAgICAgICAiLnN1YnNlY3Rpb24gMFxuIgog ICAgICAgICAgICAgICAgOiI9bSIgKHNlbS0+Y291bnQpCiAgICAgICAgICAgICAgICA6ImMiIChz ZW0pCiAgICAgICAgICAgICAgICA6Im1lbW9yeSIpOwp9CgpzdGF0aWMgaW5saW5lIGludCBzZW1f Z2V0Y291bnQoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQp7CiAgICAgICAgcmV0dXJuICgoJnNlbS0+ Y291bnQpLT5jb3VudGVyKTsKfQojIDIwMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVk ZS9saW51eC9mcy5oIiAyCgoKZXh0ZXJuIHZvaWQgdXBkYXRlX2F0aW1lX1I0ZGUyZDBmMSAoc3Ry dWN0IGlub2RlICopOwoKCmV4dGVybiB2b2lkIGJ1ZmZlcl9pbml0KHVuc2lnbmVkIGxvbmcpOwpl eHRlcm4gdm9pZCBpbm9kZV9pbml0KHVuc2lnbmVkIGxvbmcpOwpleHRlcm4gdm9pZCBtbnRfaW5p dCh1bnNpZ25lZCBsb25nKTsKZXh0ZXJuIHZvaWQgZmlsZXNfaW5pdCh1bnNpZ25lZCBsb25nIG1l bXBhZ2VzKTsKZXh0ZXJuIHZvaWQgbWFqb3Job2dfaW5pdCh2b2lkKTsKCgplbnVtIGJoX3N0YXRl X2JpdHMgewogICAgICAgIEJIX1VwdG9kYXRlLAogICAgICAgIEJIX0RpcnR5LAogICAgICAgIEJI X0xvY2ssCiAgICAgICAgQkhfUmVxLAogICAgICAgIEJIX01hcHBlZCwKICAgICAgICBCSF9OZXcs CiAgICAgICAgQkhfQXN5bmMsCiAgICAgICAgQkhfV2FpdF9JTywKICAgICAgICBCSF9MYXVuZGVy LAogICAgICAgIEJIX0F0dGFjaGVkLAogICAgICAgIEJIX0pCRCwKCiAgICAgICAgQkhfUHJpdmF0 ZVN0YXJ0LAoKCn07CiMgMjQ0ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4 L2ZzLmgiCnN0cnVjdCBidWZmZXJfaGVhZCB7CgogICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAq Yl9uZXh0OwogICAgICAgIHVuc2lnbmVkIGxvbmcgYl9ibG9ja25yOwogICAgICAgIHVuc2lnbmVk IHNob3J0IGJfc2l6ZTsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBiX2xpc3Q7CiAgICAgICAga2Rl dl90IGJfZGV2OwoKICAgICAgICBhdG9taWNfdCBiX2NvdW50OwogICAgICAgIGtkZXZfdCBiX3Jk ZXY7CiAgICAgICAgdW5zaWduZWQgbG9uZyBiX3N0YXRlOwogICAgICAgIHVuc2lnbmVkIGxvbmcg Yl9mbHVzaHRpbWU7CgogICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYl9uZXh0X2ZyZWU7CiAg ICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiX3ByZXZfZnJlZTsKICAgICAgICBzdHJ1Y3QgYnVm ZmVyX2hlYWQgKmJfdGhpc19wYWdlOwogICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYl9yZXFu ZXh0OwoKICAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiX3BwcmV2OwogICAgICAgIGNoYXIg KiBiX2RhdGE7CiAgICAgICAgc3RydWN0IHBhZ2UgKmJfcGFnZTsKICAgICAgICB2b2lkICgqYl9l bmRfaW8pKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCB1cHRvZGF0ZSk7CiAgICAgICAgdm9p ZCAqYl9wcml2YXRlOwogICAgICAgIHZvaWQgKmJfam91cm5hbF9oZWFkOwogICAgICAgIHVuc2ln bmVkIGxvbmcgYl9yc2VjdG9yOwogICAgICAgIHdhaXRfcXVldWVfaGVhZF90IGJfd2FpdDsKCiAg ICAgICAgc3RydWN0IGxpc3RfaGVhZCBiX2lub2RlX2J1ZmZlcnM7Cn07Cgp0eXBlZGVmIHZvaWQg KGJoX2VuZF9pb190KShzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBpbnQgdXB0b2RhdGUpOwp2b2lk IGluaXRfYnVmZmVyX1I4ZDVhYzYwMShzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgYmhfZW5kX2lvX3Qg Kiwgdm9pZCAqKTsKIyAyOTAgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgv ZnMuaCIKZXh0ZXJuIHZvaWQgc2V0X2JoX3BhZ2VfUjI4NjM0ODQ1KHN0cnVjdCBidWZmZXJfaGVh ZCAqYmgsIHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG9mZnNldCk7CgoKCgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvcGlwZV9mc19pLmgiIDEKCgoK CnN0cnVjdCBwaXBlX2lub2RlX2luZm8gewogICAgICAgIHdhaXRfcXVldWVfaGVhZF90IHdhaXQ7 CiAgICAgICAgY2hhciAqYmFzZTsKICAgICAgICB1bnNpZ25lZCBpbnQgbGVuOwogICAgICAgIHVu c2lnbmVkIGludCBzdGFydDsKICAgICAgICB1bnNpZ25lZCBpbnQgcmVhZGVyczsKICAgICAgICB1 bnNpZ25lZCBpbnQgd3JpdGVyczsKICAgICAgICB1bnNpZ25lZCBpbnQgd2FpdGluZ19yZWFkZXJz OwogICAgICAgIHVuc2lnbmVkIGludCB3YWl0aW5nX3dyaXRlcnM7CiAgICAgICAgdW5zaWduZWQg aW50IHJfY291bnRlcjsKICAgICAgICB1bnNpZ25lZCBpbnQgd19jb3VudGVyOwp9OwojIDQyICIv dXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3BpcGVfZnNfaS5oIgp2b2lkIHBp cGVfd2FpdChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSk7CgpzdHJ1Y3QgaW5vZGUqIHBpcGVfbmV3KHN0 cnVjdCBpbm9kZSogaW5vZGUpOwojIDI5NiAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVk ZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51 eC9taW5peF9mc19pLmgiIDEKCgoKCgoKc3RydWN0IG1pbml4X2lub2RlX2luZm8gewogICAgICAg IHVuaW9uIHsKICAgICAgICAgICAgICAgIF9fdTE2IGkxX2RhdGFbMTZdOwogICAgICAgICAgICAg ICAgX191MzIgaTJfZGF0YVsxNl07CiAgICAgICAgfSB1Owp9OwojIDI5NyAiL3Vzci9zcmMvbGlu dXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40 LjIwLTgvaW5jbHVkZS9saW51eC9leHQyX2ZzX2kuaCIgMQojIDIyICIvdXNyL3NyYy9saW51eC0y LjQuMjAtOC9pbmNsdWRlL2xpbnV4L2V4dDJfZnNfaS5oIgpzdHJ1Y3QgZXh0Ml9pbm9kZV9pbmZv IHsKICAgICAgICBfX3UzMiBpX2RhdGFbMTVdOwogICAgICAgIF9fdTMyIGlfZmxhZ3M7CiAgICAg ICAgX191MzIgaV9mYWRkcjsKICAgICAgICBfX3U4IGlfZnJhZ19ubzsKICAgICAgICBfX3U4IGlf ZnJhZ19zaXplOwogICAgICAgIF9fdTMyIGlfZmlsZV9hY2w7CiAgICAgICAgX191MzIgaV9kaXJf YWNsOwogICAgICAgIF9fdTMyIGlfZHRpbWU7CiAgICAgICAgX191MzIgaV9ibG9ja19ncm91cDsK ICAgICAgICBfX3UzMiBpX25leHRfYWxsb2NfYmxvY2s7CiAgICAgICAgX191MzIgaV9uZXh0X2Fs bG9jX2dvYWw7CiAgICAgICAgX191MzIgaV9wcmVhbGxvY19ibG9jazsKICAgICAgICBfX3UzMiBp X3ByZWFsbG9jX2NvdW50OwogICAgICAgIF9fdTMyIGlfZGlyX3N0YXJ0X2xvb2t1cDsKICAgICAg ICBpbnQgaV9uZXdfaW5vZGU6MTsKfTsKIyAyOTggIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2lu Y2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUv bGludXgvZXh0M19mc19pLmgiIDEKIyAyNCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVk ZS9saW51eC9leHQzX2ZzX2kuaCIKc3RydWN0IGV4dDNfaW5vZGVfaW5mbyB7CiAgICAgICAgX191 MzIgaV9kYXRhWzE1XTsKICAgICAgICBfX3UzMiBpX2ZsYWdzOwoKCgoKCgogICAgICAgIF9fdTMy IGlfZmlsZV9hY2w7CiAgICAgICAgX191MzIgaV9kaXJfYWNsOwogICAgICAgIF9fdTMyIGlfZHRp bWU7CiAgICAgICAgX191MzIgaV9ibG9ja19ncm91cDsKICAgICAgICBfX3UzMiBpX3N0YXRlOwog ICAgICAgIF9fdTMyIGlfbmV4dF9hbGxvY19ibG9jazsKICAgICAgICBfX3UzMiBpX25leHRfYWxs b2NfZ29hbDsKCgoKCiAgICAgICAgX191MzIgaV9kaXJfc3RhcnRfbG9va3VwOwoKICAgICAgICBz dHJ1Y3QgbGlzdF9oZWFkIGlfb3JwaGFuOwojIDYzICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9p bmNsdWRlL2xpbnV4L2V4dDNfZnNfaS5oIgogICAgICAgIGxvZmZfdCBpX2Rpc2tzaXplOwojIDc1 ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2V4dDNfZnNfaS5oIgogICAg ICAgIHN0cnVjdCByd19zZW1hcGhvcmUgdHJ1bmNhdGVfc2VtOwp9OwojIDI5OSAiL3Vzci9zcmMv bGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgt Mi40LjIwLTgvaW5jbHVkZS9saW51eC9ocGZzX2ZzX2kuaCIgMQoKCgpzdHJ1Y3QgaHBmc19pbm9k ZV9pbmZvIHsKICAgICAgICB1bnNpZ25lZCBsb25nIG1tdV9wcml2YXRlOwogICAgICAgIGlub190 IGlfcGFyZW50X2RpcjsKICAgICAgICB1bnNpZ25lZCBpX2RubzsKICAgICAgICB1bnNpZ25lZCBp X2Rwb3M7CiAgICAgICAgdW5zaWduZWQgaV9kc3ViZG5vOwogICAgICAgIHVuc2lnbmVkIGlfZmls ZV9zZWM7CiAgICAgICAgdW5zaWduZWQgaV9kaXNrX3NlYzsKICAgICAgICB1bnNpZ25lZCBpX25f c2VjczsKICAgICAgICB1bnNpZ25lZCBpX2VhX3NpemU7CiAgICAgICAgdW5zaWduZWQgaV9jb252 IDogMjsKICAgICAgICB1bnNpZ25lZCBpX2VhX21vZGUgOiAxOwogICAgICAgIHVuc2lnbmVkIGlf ZWFfdWlkIDogMTsKICAgICAgICB1bnNpZ25lZCBpX2VhX2dpZCA6IDE7CiAgICAgICAgdW5zaWdu ZWQgaV9kaXJ0eSA6IDE7CiAgICAgICAgc3RydWN0IHNlbWFwaG9yZSBpX3NlbTsKICAgICAgICBs b2ZmX3QgKippX3JkZGlyX29mZjsKfTsKIyAzMDAgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2lu Y2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUv bGludXgvbnRmc19mc19pLmgiIDEKCgoKCgoKc3RydWN0IG50ZnNfYXR0cmlidXRlOwpzdHJ1Y3Qg bnRmc19zYl9pbmZvOwoKCgoKdHlwZWRlZiB1OCBudGZzX3U4Owp0eXBlZGVmIHUxNiBudGZzX3Ux NjsKdHlwZWRlZiB1MzIgbnRmc191MzI7CnR5cGVkZWYgdTY0IG50ZnNfdTY0Owp0eXBlZGVmIHM4 IG50ZnNfczg7CnR5cGVkZWYgczE2IG50ZnNfczE2Owp0eXBlZGVmIHMzMiBudGZzX3MzMjsKdHlw ZWRlZiBzNjQgbnRmc19zNjQ7CgoKCgp0eXBlZGVmIF9fa2VybmVsX21vZGVfdCBudG1vZGVfdDsK CgoKdHlwZWRlZiB1aWRfdCBudGZzX3VpZF90OwoKCgp0eXBlZGVmIGdpZF90IG50ZnNfZ2lkX3Q7 CgoKCnR5cGVkZWYgX19rZXJuZWxfc2l6ZV90IG50ZnNfc2l6ZV90OwoKCgp0eXBlZGVmIF9fa2Vy bmVsX3RpbWVfdCBudGZzX3RpbWVfdDsKCgoKCgp0eXBlZGVmIHUxNiBudGZzX3djaGFyX3Q7CgoK Cgp0eXBlZGVmIHM2NCBudGZzX29mZnNldF90OwoKCgoKdHlwZWRlZiB1NjQgbnRmc190aW1lNjRf dDsKIyA2OSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9udGZzX2ZzX2ku aCIKdHlwZWRlZiBzMzIgbnRmc19jbHVzdGVyX3Q7CgoKCnN0cnVjdCBudGZzX2lub2RlX2luZm8g ewogICAgICAgIHN0cnVjdCBudGZzX3NiX2luZm8gKnZvbDsKICAgICAgICB1bnNpZ25lZCBsb25n IGlfbnVtYmVyOwogICAgICAgIF9fdTE2IHNlcXVlbmNlX251bWJlcjsKICAgICAgICB1bnNpZ25l ZCBjaGFyICphdHRyOwogICAgICAgIGludCBhdHRyX2NvdW50OwogICAgICAgIHN0cnVjdCBudGZz X2F0dHJpYnV0ZSAqYXR0cnM7CiAgICAgICAgaW50IHJlY29yZF9jb3VudDsKICAgICAgICBpbnQg KnJlY29yZHM7CgogICAgICAgIHVuaW9uIHsKICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAg ICAgICAgICAgICAgICAgICAgIGludCByZWNvcmRzaXplOwogICAgICAgICAgICAgICAgICAgICAg ICBpbnQgY2x1c3RlcnNfcGVyX3JlY29yZDsKICAgICAgICAgICAgICAgIH0gaW5kZXg7CiAgICAg ICAgfSB1Owp9OwojIDMwMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9m cy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tc2Rvc19m c19pLmgiIDEKCgoKCgoKCnN0cnVjdCBtc2Rvc19pbm9kZV9pbmZvIHsKICAgICAgICB1bnNpZ25l ZCBsb25nIG1tdV9wcml2YXRlOwogICAgICAgIGludCBpX3N0YXJ0OwogICAgICAgIGludCBpX2xv Z3N0YXJ0OwogICAgICAgIGludCBpX2F0dHJzOwogICAgICAgIGludCBpX2N0aW1lX21zOwogICAg ICAgIGludCBpX2xvY2F0aW9uOwogICAgICAgIHN0cnVjdCBpbm9kZSAqaV9mYXRfaW5vZGU7CiAg ICAgICAgc3RydWN0IGxpc3RfaGVhZCBpX2ZhdF9oYXNoOwp9OwojIDMwMiAiL3Vzci9zcmMvbGlu dXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40 LjIwLTgvaW5jbHVkZS9saW51eC91bXNkb3NfZnNfaS5oIiAxCiMgMzkgIi91c3Ivc3JjL2xpbnV4 LTIuNC4yMC04L2luY2x1ZGUvbGludXgvdW1zZG9zX2ZzX2kuaCIKc3RydWN0IGRpcl9sb2NraW5n X2luZm8gewogICAgICAgIHdhaXRfcXVldWVfaGVhZF90IHA7CiAgICAgICAgc2hvcnQgaW50IGxv b2tpbmc7CiAgICAgICAgc2hvcnQgaW50IGNyZWF0aW5nOwoKCgogICAgICAgIGxvbmcgcGlkOwoK fTsKCnN0cnVjdCB1bXNkb3NfaW5vZGVfaW5mbyB7CiAgICAgICAgc3RydWN0IG1zZG9zX2lub2Rl X2luZm8gbXNkb3NfaW5mbzsKICAgICAgICBzdHJ1Y3QgZGlyX2xvY2tpbmdfaW5mbyBkaXJfaW5m bzsKICAgICAgICBpbnQgaV9wYXRjaGVkOwogICAgICAgIGludCBpX2lzX2hsaW5rOwogICAgICAg IG9mZl90IHBvczsKfTsKIyAzMDMgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGlu dXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvaXNv X2ZzX2kuaCIgMQoKCgplbnVtIGlzb2ZzX2ZpbGVfZm9ybWF0IHsKICAgICAgICBpc29mc19maWxl X25vcm1hbCA9IDAsCiAgICAgICAgaXNvZnNfZmlsZV9zcGFyc2UgPSAxLAogICAgICAgIGlzb2Zz X2ZpbGVfY29tcHJlc3NlZCA9IDIsCn07CgoKCgpzdHJ1Y3QgaXNvX2lub2RlX2luZm8gewogICAg ICAgIHVuc2lnbmVkIGludCBpX2ZpcnN0X2V4dGVudDsKICAgICAgICB1bnNpZ25lZCBjaGFyIGlf ZmlsZV9mb3JtYXQ7CiAgICAgICAgdW5zaWduZWQgY2hhciBpX2Zvcm1hdF9wYXJtWzNdOwogICAg ICAgIHVuc2lnbmVkIGxvbmcgaV9uZXh0X3NlY3Rpb25faW5vOwogICAgICAgIG9mZl90IGlfc2Vj dGlvbl9zaXplOwp9OwojIDMwNCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51 eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9uZnNf ZnNfaS5oIiAxCgoKCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4 L25mcy5oIiAxCiMgMTAgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbmZz LmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9zdW5ycGMvbXNn X3Byb3QuaCIgMQojIDE0ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3N1 bnJwYy9tc2dfcHJvdC5oIgplbnVtIHJwY19hdXRoX2ZsYXZvciB7CiAgICAgICAgUlBDX0FVVEhf TlVMTCA9IDAsCiAgICAgICAgUlBDX0FVVEhfVU5JWCA9IDEsCiAgICAgICAgUlBDX0FVVEhfU0hP UlQgPSAyLAogICAgICAgIFJQQ19BVVRIX0RFUyA9IDMsCiAgICAgICAgUlBDX0FVVEhfS1JCID0g NCwKfTsKCmVudW0gcnBjX21zZ190eXBlIHsKICAgICAgICBSUENfQ0FMTCA9IDAsCiAgICAgICAg UlBDX1JFUExZID0gMQp9OwoKZW51bSBycGNfcmVwbHlfc3RhdCB7CiAgICAgICAgUlBDX01TR19B Q0NFUFRFRCA9IDAsCiAgICAgICAgUlBDX01TR19ERU5JRUQgPSAxCn07CgplbnVtIHJwY19hY2Nl cHRfc3RhdCB7CiAgICAgICAgUlBDX1NVQ0NFU1MgPSAwLAogICAgICAgIFJQQ19QUk9HX1VOQVZB SUwgPSAxLAogICAgICAgIFJQQ19QUk9HX01JU01BVENIID0gMiwKICAgICAgICBSUENfUFJPQ19V TkFWQUlMID0gMywKICAgICAgICBSUENfR0FSQkFHRV9BUkdTID0gNCwKICAgICAgICBSUENfU1lT VEVNX0VSUiA9IDUKfTsKCmVudW0gcnBjX3JlamVjdF9zdGF0IHsKICAgICAgICBSUENfTUlTTUFU Q0ggPSAwLAogICAgICAgIFJQQ19BVVRIX0VSUk9SID0gMQp9OwoKZW51bSBycGNfYXV0aF9zdGF0 IHsKICAgICAgICBSUENfQVVUSF9PSyA9IDAsCiAgICAgICAgUlBDX0FVVEhfQkFEQ1JFRCA9IDEs CiAgICAgICAgUlBDX0FVVEhfUkVKRUNURURDUkVEID0gMiwKICAgICAgICBSUENfQVVUSF9CQURW RVJGID0gMywKICAgICAgICBSUENfQVVUSF9SRUpFQ1RFRFZFUkYgPSA0LAogICAgICAgIFJQQ19B VVRIX1RPT1dFQUsgPSA1Cn07CiMgMTEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUv bGludXgvbmZzLmgiIDIKIyA0MSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51 eC9uZnMuaCIKIGVudW0gbmZzX3N0YXQgewogICAgICAgIE5GU19PSyA9IDAsCiAgICAgICAgTkZT RVJSX1BFUk0gPSAxLAogICAgICAgIE5GU0VSUl9OT0VOVCA9IDIsCiAgICAgICAgTkZTRVJSX0lP ID0gNSwKICAgICAgICBORlNFUlJfTlhJTyA9IDYsCiAgICAgICAgTkZTRVJSX0VBR0FJTiA9IDEx LAogICAgICAgIE5GU0VSUl9BQ0NFUyA9IDEzLAogICAgICAgIE5GU0VSUl9FWElTVCA9IDE3LAog ICAgICAgIE5GU0VSUl9YREVWID0gMTgsCiAgICAgICAgTkZTRVJSX05PREVWID0gMTksCiAgICAg ICAgTkZTRVJSX05PVERJUiA9IDIwLAogICAgICAgIE5GU0VSUl9JU0RJUiA9IDIxLAogICAgICAg IE5GU0VSUl9JTlZBTCA9IDIyLAogICAgICAgIE5GU0VSUl9GQklHID0gMjcsCiAgICAgICAgTkZT RVJSX05PU1BDID0gMjgsCiAgICAgICAgTkZTRVJSX1JPRlMgPSAzMCwKICAgICAgICBORlNFUlJf TUxJTksgPSAzMSwKICAgICAgICBORlNFUlJfT1BOT1RTVVBQID0gNDUsCiAgICAgICAgTkZTRVJS X05BTUVUT09MT05HID0gNjMsCiAgICAgICAgTkZTRVJSX05PVEVNUFRZID0gNjYsCiAgICAgICAg TkZTRVJSX0RRVU9UID0gNjksCiAgICAgICAgTkZTRVJSX1NUQUxFID0gNzAsCiAgICAgICAgTkZT RVJSX1JFTU9URSA9IDcxLAogICAgICAgIE5GU0VSUl9XRkxVU0ggPSA5OSwKICAgICAgICBORlNF UlJfQkFESEFORExFID0gMTAwMDEsCiAgICAgICAgTkZTRVJSX05PVF9TWU5DID0gMTAwMDIsCiAg ICAgICAgTkZTRVJSX0JBRF9DT09LSUUgPSAxMDAwMywKICAgICAgICBORlNFUlJfTk9UU1VQUCA9 IDEwMDA0LAogICAgICAgIE5GU0VSUl9UT09TTUFMTCA9IDEwMDA1LAogICAgICAgIE5GU0VSUl9T RVJWRVJGQVVMVCA9IDEwMDA2LAogICAgICAgIE5GU0VSUl9CQURUWVBFID0gMTAwMDcsCiAgICAg ICAgTkZTRVJSX0pVS0VCT1ggPSAxMDAwOAogfTsKCgoKZW51bSBuZnNfZnR5cGUgewogICAgICAg IE5GTk9OID0gMCwKICAgICAgICBORlJFRyA9IDEsCiAgICAgICAgTkZESVIgPSAyLAogICAgICAg IE5GQkxLID0gMywKICAgICAgICBORkNIUiA9IDQsCiAgICAgICAgTkZMTksgPSA1LAogICAgICAg IE5GU09DSyA9IDYsCiAgICAgICAgTkZCQUQgPSA3LAogICAgICAgIE5GRklGTyA9IDgKfTsKCgoK CgoKc3RydWN0IG5mc19maCB7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc2l6ZTsKICAgICAgICB1 bnNpZ25lZCBjaGFyIGRhdGFbNjRdOwp9OwojIDEwNyAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgv aW5jbHVkZS9saW51eC9uZnMuaCIKZW51bSBuZnMzX3N0YWJsZV9ob3cgewogICAgICAgIE5GU19V TlNUQUJMRSA9IDAsCiAgICAgICAgTkZTX0RBVEFfU1lOQyA9IDEsCiAgICAgICAgTkZTX0ZJTEVf U1lOQyA9IDIKfTsKIyA3ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L25m c19mc19pLmgiIDIKCgoKCnN0cnVjdCBuZnNfaW5vZGVfaW5mbyB7CgoKCiAgICAgICAgX191NjQg ZmlsZWlkOwoKCgoKICAgICAgICBzdHJ1Y3QgbmZzX2ZoIGZoOwoKCgoKICAgICAgICB1bnNpZ25l ZCBzaG9ydCBmbGFnczsKIyA0NCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51 eC9uZnNfZnNfaS5oIgogICAgICAgIHVuc2lnbmVkIGxvbmcgcmVhZF9jYWNoZV9qaWZmaWVzOwog ICAgICAgIF9fdTY0IHJlYWRfY2FjaGVfY3RpbWU7CiAgICAgICAgX191NjQgcmVhZF9jYWNoZV9t dGltZTsKICAgICAgICBfX3U2NCByZWFkX2NhY2hlX2lzaXplOwogICAgICAgIHVuc2lnbmVkIGxv bmcgYXR0cnRpbWVvOwogICAgICAgIHVuc2lnbmVkIGxvbmcgYXR0cnRpbWVvX3RpbWVzdGFtcDsK CgoKCgogICAgICAgIHVuc2lnbmVkIGxvbmcgY2FjaGVfbXRpbWVfamlmZmllczsKCgoKCgogICAg ICAgIF9fdTMyIGNvb2tpZXZlcmZbMl07CgoKCgogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgcmVh ZDsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGRpcnR5OwogICAgICAgIHN0cnVjdCBsaXN0X2hl YWQgY29tbWl0OwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgd3JpdGViYWNrOwoKICAgICAgICB1 bnNpZ25lZCBpbnQgbnJlYWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmRpcnR5 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb21taXQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbnBhZ2VzOwoKCiAgICAgICAgc3RydWN0IHJwY19jcmVkICptbV9j cmVkOwp9OwojIDkyICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L25mc19m c19pLmgiCnN0cnVjdCBuZnNfbG9ja19pbmZvIHsKICAgICAgICB1MzIgc3RhdGU7CiAgICAgICAg dTMyIGZsYWdzOwogICAgICAgIHN0cnVjdCBubG1faG9zdCAqaG9zdDsKfTsKIyAzMDUgIi91c3Iv c3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xp bnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvc3lzdl9mc19pLmgiIDEKCgoKCgoKc3RydWN0IHN5 c3ZfaW5vZGVfaW5mbyB7CiAgICAgICAgdTMyIGlfZGF0YVsxMCsxKzErMV07CgoKCgogICAgICAg IHUzMiBpX2Rpcl9zdGFydF9sb29rdXA7Cn07CiMgMzA2ICIvdXNyL3NyYy9saW51eC0yLjQuMjAt OC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNs dWRlL2xpbnV4L2FmZnNfZnNfaS5oIiAxCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgv aW5jbHVkZS9saW51eC9hLm91dC5oIiAxCgoKCgoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4y MC04L2luY2x1ZGUvYXNtL2Eub3V0LmgiIDEKCgoKc3RydWN0IGV4ZWMKewogIHVuc2lnbmVkIGxv bmcgYV9pbmZvOwogIHVuc2lnbmVkIGFfdGV4dDsKICB1bnNpZ25lZCBhX2RhdGE7CiAgdW5zaWdu ZWQgYV9ic3M7CiAgdW5zaWduZWQgYV9zeW1zOwogIHVuc2lnbmVkIGFfZW50cnk7CiAgdW5zaWdu ZWQgYV90cnNpemU7CiAgdW5zaWduZWQgYV9kcnNpemU7Cn07CiMgOSAiL3Vzci9zcmMvbGludXgt Mi40LjIwLTgvaW5jbHVkZS9saW51eC9hLm91dC5oIiAyCgoKCgplbnVtIG1hY2hpbmVfdHlwZSB7 CgoKCiAgTV9PTERTVU4yID0gMCwKCgoKCiAgTV82ODAxMCA9IDEsCgoKCgogIE1fNjgwMjAgPSAy LAoKCgoKICBNX1NQQVJDID0gMywKCgogIE1fMzg2ID0gMTAwLAogIE1fTUlQUzEgPSAxNTEsCiAg TV9NSVBTMiA9IDE1Mgp9OwojIDE1NyAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9s aW51eC9hLm91dC5oIgpzdHJ1Y3Qgbmxpc3QgewogIHVuaW9uIHsKICAgIGNoYXIgKm5fbmFtZTsK ICAgIHN0cnVjdCBubGlzdCAqbl9uZXh0OwogICAgbG9uZyBuX3N0cng7CiAgfSBuX3VuOwogIHVu c2lnbmVkIGNoYXIgbl90eXBlOwogIGNoYXIgbl9vdGhlcjsKICBzaG9ydCBuX2Rlc2M7CiAgdW5z aWduZWQgbG9uZyBuX3ZhbHVlOwp9OwojIDIzNSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5j bHVkZS9saW51eC9hLm91dC5oIgpzdHJ1Y3QgcmVsb2NhdGlvbl9pbmZvCnsKCiAgaW50IHJfYWRk cmVzczsKCiAgdW5zaWduZWQgaW50IHJfc3ltYm9sbnVtOjI0OwoKCgogIHVuc2lnbmVkIGludCBy X3BjcmVsOjE7CgoKICB1bnNpZ25lZCBpbnQgcl9sZW5ndGg6MjsKCgoKCgoKICB1bnNpZ25lZCBp bnQgcl9leHRlcm46MTsKCgoKCgoKCiAgdW5zaWduZWQgaW50IHJfcGFkOjQ7Cgp9OwojIDUgIi91 c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvYWZmc19mc19pLmgiIDIKCgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvdGltZS5oIiAxCiMgOSAiL3Vz ci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC90aW1lLmgiCnN0cnVjdCB0aW1lc3Bl YyB7CiAgICAgICAgdGltZV90IHR2X3NlYzsKICAgICAgICBsb25nIHR2X25zZWM7Cn07CiMgMzEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvdGltZS5oIgpzdGF0aWMgX19p bmxpbmVfXyB1bnNpZ25lZCBsb25nCnRpbWVzcGVjX3RvX2ppZmZpZXMoc3RydWN0IHRpbWVzcGVj ICp2YWx1ZSkKewogICAgICAgIHVuc2lnbmVkIGxvbmcgc2VjID0gdmFsdWUtPnR2X3NlYzsKICAg ICAgICBsb25nIG5zZWMgPSB2YWx1ZS0+dHZfbnNlYzsKCiAgICAgICAgaWYgKHNlYyA+PSAoKCh+ MFVMID4+IDEpLTEpIC8gMTAwKSkKICAgICAgICAgICAgICAgIHJldHVybiAoKH4wVUwgPj4gMSkt MSk7CiAgICAgICAgbnNlYyArPSAxMDAwMDAwMDAwTCAvIDEwMCAtIDE7CiAgICAgICAgbnNlYyAv PSAxMDAwMDAwMDAwTCAvIDEwMDsKICAgICAgICByZXR1cm4gMTAwICogc2VjICsgbnNlYzsKfQoK c3RhdGljIF9faW5saW5lX18gdm9pZApqaWZmaWVzX3RvX3RpbWVzcGVjKHVuc2lnbmVkIGxvbmcg amlmZmllc19SMGRhMDJkNjcsIHN0cnVjdCB0aW1lc3BlYyAqdmFsdWUpCnsKICAgICAgICB2YWx1 ZS0+dHZfbnNlYyA9IChqaWZmaWVzX1IwZGEwMmQ2NyAlIDEwMCkgKiAoMTAwMDAwMDAwMEwgLyAx MDApOwogICAgICAgIHZhbHVlLT50dl9zZWMgPSBqaWZmaWVzX1IwZGEwMmQ2NyAvIDEwMDsKfQoj IDY3ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3RpbWUuaCIKc3RhdGlj IGlubGluZSB1bnNpZ25lZCBsb25nCm1rdGltZSAodW5zaWduZWQgaW50IHllYXIsIHVuc2lnbmVk IGludCBtb24sCiAgICAgICAgdW5zaWduZWQgaW50IGRheSwgdW5zaWduZWQgaW50IGhvdXIsCiAg ICAgICAgdW5zaWduZWQgaW50IG1pbiwgdW5zaWduZWQgaW50IHNlYykKewogICAgICAgIGlmICgw ID49IChpbnQpIChtb24gLT0gMikpIHsKICAgICAgICAgICAgICAgIG1vbiArPSAxMjsKICAgICAg ICAgICAgICAgIHllYXIgLT0gMTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAoKCgKICAgICAg ICAgICAgICAgICh1bnNpZ25lZCBsb25nKSAoeWVhci80IC0geWVhci8xMDAgKyB5ZWFyLzQwMCAr IDM2Nyptb24vMTIgKyBkYXkpICsKICAgICAgICAgICAgICAgICAgICAgICAgeWVhciozNjUgLSA3 MTk0OTkKICAgICAgICAgICAgKSoyNCArIGhvdXIKICAgICAgICAgICkqNjAgKyBtaW4KICAgICAg ICApKjYwICsgc2VjOwp9CgoKCgpzdHJ1Y3QgdGltZXZhbCB7CiAgICAgICAgdGltZV90IHR2X3Nl YzsKICAgICAgICBzdXNlY29uZHNfdCB0dl91c2VjOwp9OwoKc3RydWN0IHRpbWV6b25lIHsKICAg ICAgICBpbnQgdHpfbWludXRlc3dlc3Q7CiAgICAgICAgaW50IHR6X2RzdHRpbWU7Cn07CgoKCgpl eHRlcm4gdm9pZCBkb19nZXR0aW1lb2ZkYXlfUjcyMjcwZTM1KHN0cnVjdCB0aW1ldmFsICp0dik7 CmV4dGVybiB2b2lkIGRvX3NldHRpbWVvZmRheV9SMTlkN2IxZmYoc3RydWN0IHRpbWV2YWwgKnR2 KTsKIyAxMTkgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvdGltZS5oIgpz dHJ1Y3QgaXRpbWVyc3BlYyB7CiAgICAgICAgc3RydWN0IHRpbWVzcGVjIGl0X2ludGVydmFsOwog ICAgICAgIHN0cnVjdCB0aW1lc3BlYyBpdF92YWx1ZTsKfTsKCnN0cnVjdCBpdGltZXJ2YWwgewog ICAgICAgIHN0cnVjdCB0aW1ldmFsIGl0X2ludGVydmFsOwogICAgICAgIHN0cnVjdCB0aW1ldmFs IGl0X3ZhbHVlOwp9OwojIDggIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgv YWZmc19mc19pLmgiIDIKIyAxNyAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51 eC9hZmZzX2ZzX2kuaCIKc3RydWN0IGFmZnNfZXh0X2tleSB7CiAgICAgICAgdTMyIGV4dDsKICAg ICAgICB1MzIga2V5Owp9OwoKCgoKc3RydWN0IGFmZnNfaW5vZGVfaW5mbyB7CiAgICAgICAgdTMy IGlfb3BlbmNudDsKICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlIGlfbGlua19sb2NrOwogICAgICAg IHN0cnVjdCBzZW1hcGhvcmUgaV9leHRfbG9jazsKCiAgICAgICAgdTMyIGlfYmxrY250OwogICAg ICAgIHUzMiBpX2V4dGNudDsKICAgICAgICB1MzIgKmlfbGM7CiAgICAgICAgdTMyIGlfbGNfc2l6 ZTsKICAgICAgICB1MzIgaV9sY19zaGlmdDsKICAgICAgICB1MzIgaV9sY19tYXNrOwogICAgICAg IHN0cnVjdCBhZmZzX2V4dF9rZXkgKmlfYWM7CiAgICAgICAgdTMyIGlfZXh0X2xhc3Q7CiAgICAg ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICppX2V4dF9iaDsKICAgICAgICB1bnNpZ25lZCBsb25nIG1t dV9wcml2YXRlOwogICAgICAgIHUzMiBpX3Byb3RlY3Q7CiAgICAgICAgdTMyIGlfbGFzdGFsbG9j OwogICAgICAgIGludCBpX3BhX2NudDsKIyA1MSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5j bHVkZS9saW51eC9hZmZzX2ZzX2kuaCIKfTsKIyAzMDcgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04 L2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1 ZGUvbGludXgvdWZzX2ZzX2kuaCIgMQojIDE2ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNs dWRlL2xpbnV4L3Vmc19mc19pLmgiCnN0cnVjdCB1ZnNfaW5vZGVfaW5mbyB7CiAgICAgICAgdW5p b24gewogICAgICAgICAgICAgICAgX191MzIgaV9kYXRhWzE1XTsKICAgICAgICAgICAgICAgIF9f dTggaV9zeW1saW5rWzQqMTVdOwogICAgICAgIH0gaV91MTsKICAgICAgICBfX3UzMiBpX2ZsYWdz OwogICAgICAgIF9fdTMyIGlfZ2VuOwogICAgICAgIF9fdTMyIGlfc2hhZG93OwogICAgICAgIF9f dTMyIGlfdW51c2VkMTsKICAgICAgICBfX3UzMiBpX3VudXNlZDI7CiAgICAgICAgX191MzIgaV9v ZWZ0ZmxhZzsKICAgICAgICBfX3UxNiBpX29zeW5jOwogICAgICAgIF9fdTMyIGlfbGFzdGZyYWc7 Cn07CiMgMzA4ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIK IyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2Vmc19mc19pLmgiIDEK IyAxMiAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9lZnNfZnNfaS5oIgp0 eXBlZGVmIGludDMyX3QgZWZzX2Jsb2NrX3Q7CnR5cGVkZWYgdWludDMyX3QgZWZzX2lub190OwoK CgoKCgp0eXBlZGVmIHVuaW9uIGV4dGVudF91IHsKICAgICAgICB1bnNpZ25lZCBjaGFyIHJhd1s4 XTsKICAgICAgICBzdHJ1Y3QgZXh0ZW50X3MgewogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50 IGV4X21hZ2ljOjg7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZXhfYm46MjQ7CiAgICAg ICAgICAgICAgICB1bnNpZ25lZCBpbnQgZXhfbGVuZ3RoOjg7CiAgICAgICAgICAgICAgICB1bnNp Z25lZCBpbnQgZXhfb2Zmc2V0OjI0OwogICAgICAgIH0gY29va2VkOwp9IGVmc19leHRlbnQ7Cgp0 eXBlZGVmIHN0cnVjdCBlZGV2cyB7CiAgICAgICAgc2hvcnQgb2RldjsKICAgICAgICB1bnNpZ25l ZCBpbnQgbmRldjsKfSBlZnNfZGV2czsKCgoKCgpzdHJ1Y3QgZWZzX2Rpbm9kZSB7CiAgICAgICAg dV9zaG9ydCBkaV9tb2RlOwogICAgICAgIHNob3J0IGRpX25saW5rOwogICAgICAgIHVfc2hvcnQg ZGlfdWlkOwogICAgICAgIHVfc2hvcnQgZGlfZ2lkOwogICAgICAgIGludDMyX3QgZGlfc2l6ZTsK ICAgICAgICBpbnQzMl90IGRpX2F0aW1lOwogICAgICAgIGludDMyX3QgZGlfbXRpbWU7CiAgICAg ICAgaW50MzJfdCBkaV9jdGltZTsKICAgICAgICB1aW50MzJfdCBkaV9nZW47CiAgICAgICAgc2hv cnQgZGlfbnVtZXh0ZW50czsKICAgICAgICB1X2NoYXIgZGlfdmVyc2lvbjsKICAgICAgICB1X2No YXIgZGlfc3BhcmU7CiAgICAgICAgdW5pb24gZGlfYWRkciB7CiAgICAgICAgICAgICAgICBlZnNf ZXh0ZW50IGRpX2V4dGVudHNbMTJdOwogICAgICAgICAgICAgICAgZWZzX2RldnMgZGlfZGV2Owog ICAgICAgIH0gZGlfdTsKfTsKCgpzdHJ1Y3QgZWZzX2lub2RlX2luZm8gewogICAgICAgIGludCBu dW1leHRlbnRzOwogICAgICAgIGludCBsYXN0ZXh0ZW50OwoKICAgICAgICBlZnNfZXh0ZW50IGV4 dGVudHNbMTJdOwp9OwojIDMwOSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51 eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9jb2Rh X2ZzX2kuaCIgMQojIDE0ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2Nv ZGFfZnNfaS5oIgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvY29k YS5oIiAxCiMgMTA5ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2NvZGEu aCIKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdV9xdWFkX3Q7CiMgMTY0ICIvdXNyL3NyYy9s aW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2NvZGEuaCIKc3RydWN0IHZlbnVzX2RpcmVudCB7 CiAgICAgICAgdW5zaWduZWQgbG9uZyBkX2ZpbGVubzsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBk X3JlY2xlbjsKICAgICAgICB1bnNpZ25lZCBjaGFyIGRfdHlwZTsKICAgICAgICB1bnNpZ25lZCBj aGFyIGRfbmFtbGVuOwogICAgICAgIGNoYXIgZF9uYW1lWzI1NSArIDFdOwp9OwojIDE5OCAiL3Vz ci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9jb2RhLmgiCnR5cGVkZWYgdV9sb25n IFZvbHVtZUlkOwp0eXBlZGVmIHVfbG9uZyBWbm9kZUlkOwp0eXBlZGVmIHVfbG9uZyBVbmlxdWVf dDsKdHlwZWRlZiB1X2xvbmcgRmlsZVZlcnNpb247CgoKCgp0eXBlZGVmIHN0cnVjdCBWaWNlRmlk IHsKICAgIFZvbHVtZUlkIFZvbHVtZTsKICAgIFZub2RlSWQgVm5vZGU7CiAgICBVbmlxdWVfdCBV bmlxdWU7Cn0gVmljZUZpZDsKCgoKCnN0YXRpYyBfX2lubGluZV9fIGlub190IGNvZGFfZjJpKHN0 cnVjdCBWaWNlRmlkICpmaWQpCnsKICAgICAgICBpZiAoICEgZmlkICkKICAgICAgICAgICAgICAg IHJldHVybiAwOwogICAgICAgIGlmIChmaWQtPlZub2RlID09IDB4ZmZmZmZmZmUgfHwgZmlkLT5W bm9kZSA9PSAweGZmZmZmZmZmKQogICAgICAgICAgICAgICAgcmV0dXJuICgoZmlkLT5Wb2x1bWUg PDwgMjApIHwgKGZpZC0+VW5pcXVlICYgMHhmZmZmZikpOwogICAgICAgIGVsc2UKICAgICAgICAg ICAgICAgIHJldHVybiAoZmlkLT5VbmlxdWUgKyAoZmlkLT5Wbm9kZTw8MTApICsgKGZpZC0+Vm9s dW1lPDwyMCkpOwp9CiMgMjMzICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4 L2NvZGEuaCIKdHlwZWRlZiB1X2ludDMyX3QgdnVpZF90Owp0eXBlZGVmIHVfaW50MzJfdCB2Z2lk X3Q7CgoKCgpzdHJ1Y3QgY29kYV9jcmVkIHsKICAgIHZ1aWRfdCBjcl91aWQsIGNyX2V1aWQsIGNy X3N1aWQsIGNyX2ZzdWlkOwogICAgdmdpZF90IGNyX2dyb3VwaWQsIGNyX2VnaWQsIGNyX3NnaWQs IGNyX2ZzZ2lkOwp9OwoKCgoKCgoKZW51bSBjb2RhX3Z0eXBlIHsgQ19WTk9OLCBDX1ZSRUcsIENf VkRJUiwgQ19WQkxLLCBDX1ZDSFIsIENfVkxOSywgQ19WU09DSywgQ19WRklGTywgQ19WQkFEIH07 CgpzdHJ1Y3QgY29kYV92YXR0ciB7CiAgICAgICAgbG9uZyB2YV90eXBlOwogICAgICAgIHVfc2hv cnQgdmFfbW9kZTsKICAgICAgICBzaG9ydCB2YV9ubGluazsKICAgICAgICB2dWlkX3QgdmFfdWlk OwogICAgICAgIHZnaWRfdCB2YV9naWQ7CiAgICAgICAgbG9uZyB2YV9maWxlaWQ7CiAgICAgICAg dV9xdWFkX3QgdmFfc2l6ZTsKICAgICAgICBsb25nIHZhX2Jsb2Nrc2l6ZTsKICAgICAgICBzdHJ1 Y3QgdGltZXNwZWMgdmFfYXRpbWU7CiAgICAgICAgc3RydWN0IHRpbWVzcGVjIHZhX210aW1lOwog ICAgICAgIHN0cnVjdCB0aW1lc3BlYyB2YV9jdGltZTsKICAgICAgICB1X2xvbmcgdmFfZ2VuOwog ICAgICAgIHVfbG9uZyB2YV9mbGFnczsKICAgICAgICB1X3F1YWRfdCB2YV9yZGV2OwogICAgICAg IHVfcXVhZF90IHZhX2J5dGVzOwogICAgICAgIHVfcXVhZF90IHZhX2ZpbGVyZXY7Cn07CgoKCgpz dHJ1Y3QgY29kYV9zdGF0ZnMgewogICAgaW50MzJfdCBmX2Jsb2NrczsKICAgIGludDMyX3QgZl9i ZnJlZTsKICAgIGludDMyX3QgZl9iYXZhaWw7CiAgICBpbnQzMl90IGZfZmlsZXM7CiAgICBpbnQz Ml90IGZfZmZyZWU7Cn07CiMgMzM3ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xp bnV4L2NvZGEuaCIKc3RydWN0IGNvZGFfaW5faGRyIHsKICAgIHVuc2lnbmVkIGxvbmcgb3Bjb2Rl OwogICAgdW5zaWduZWQgbG9uZyB1bmlxdWU7CiAgICB1X3Nob3J0IHBpZDsKICAgIHVfc2hvcnQg cGdpZDsKICAgIHVfc2hvcnQgc2lkOwogICAgc3RydWN0IGNvZGFfY3JlZCBjcmVkOwp9OwoKCnN0 cnVjdCBjb2RhX291dF9oZHIgewogICAgdW5zaWduZWQgbG9uZyBvcGNvZGU7CiAgICB1bnNpZ25l ZCBsb25nIHVuaXF1ZTsKICAgIHVuc2lnbmVkIGxvbmcgcmVzdWx0Owp9OwoKCnN0cnVjdCBjb2Rh X3Jvb3Rfb3V0IHsKICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7CiAgICBWaWNlRmlkIFZGaWQ7 Cn07CgpzdHJ1Y3QgY29kYV9yb290X2luIHsKICAgIHN0cnVjdCBjb2RhX2luX2hkciBpbjsKfTsK CgpzdHJ1Y3QgY29kYV9vcGVuX2luIHsKICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKICAgIFZp Y2VGaWQgVkZpZDsKICAgIGludCBmbGFnczsKfTsKCnN0cnVjdCBjb2RhX29wZW5fb3V0IHsKICAg IHN0cnVjdCBjb2RhX291dF9oZHIgb2g7CiAgICB1X3F1YWRfdCBkZXY7CiAgICBpbm9fdCBpbm9k ZTsKfTsKCgoKc3RydWN0IGNvZGFfc3RvcmVfaW4gewogICAgc3RydWN0IGNvZGFfaW5faGRyIGlo OwogICAgVmljZUZpZCBWRmlkOwogICAgaW50IGZsYWdzOwp9OwoKc3RydWN0IGNvZGFfc3RvcmVf b3V0IHsKICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb3V0Owp9OwoKCnN0cnVjdCBjb2RhX3JlbGVh c2VfaW4gewogICAgc3RydWN0IGNvZGFfaW5faGRyIGloOwogICAgVmljZUZpZCBWRmlkOwogICAg aW50IGZsYWdzOwp9OwoKc3RydWN0IGNvZGFfcmVsZWFzZV9vdXQgewogICAgc3RydWN0IGNvZGFf b3V0X2hkciBvdXQ7Cn07CgoKc3RydWN0IGNvZGFfY2xvc2VfaW4gewogICAgc3RydWN0IGNvZGFf aW5faGRyIGloOwogICAgVmljZUZpZCBWRmlkOwogICAgaW50IGZsYWdzOwp9OwoKc3RydWN0IGNv ZGFfY2xvc2Vfb3V0IHsKICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb3V0Owp9OwoKCnN0cnVjdCBj b2RhX2lvY3RsX2luIHsKICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKICAgIFZpY2VGaWQgVkZp ZDsKICAgIGludCBjbWQ7CiAgICBpbnQgbGVuOwogICAgaW50IHJ3ZmxhZzsKICAgIGNoYXIgKmRh dGE7Cn07CgpzdHJ1Y3QgY29kYV9pb2N0bF9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBv aDsKICAgIGludCBsZW47CiAgICBjYWRkcl90IGRhdGE7Cn07CgoKCnN0cnVjdCBjb2RhX2dldGF0 dHJfaW4gewogICAgc3RydWN0IGNvZGFfaW5faGRyIGloOwogICAgVmljZUZpZCBWRmlkOwp9OwoK c3RydWN0IGNvZGFfZ2V0YXR0cl9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKICAg IHN0cnVjdCBjb2RhX3ZhdHRyIGF0dHI7Cn07CgoKCnN0cnVjdCBjb2RhX3NldGF0dHJfaW4gewog ICAgc3RydWN0IGNvZGFfaW5faGRyIGloOwogICAgVmljZUZpZCBWRmlkOwogICAgc3RydWN0IGNv ZGFfdmF0dHIgYXR0cjsKfTsKCnN0cnVjdCBjb2RhX3NldGF0dHJfb3V0IHsKICAgIHN0cnVjdCBj b2RhX291dF9oZHIgb3V0Owp9OwoKCnN0cnVjdCBjb2RhX2FjY2Vzc19pbiB7CiAgICBzdHJ1Y3Qg Y29kYV9pbl9oZHIgaWg7CiAgICBWaWNlRmlkIFZGaWQ7CiAgICBpbnQgZmxhZ3M7Cn07CgpzdHJ1 Y3QgY29kYV9hY2Nlc3Nfb3V0IHsKICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb3V0Owp9OwoKCgoK CgoKc3RydWN0IGNvZGFfbG9va3VwX2luIHsKICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKICAg IFZpY2VGaWQgVkZpZDsKICAgIGludCBuYW1lOwogICAgaW50IGZsYWdzOwp9OwoKc3RydWN0IGNv ZGFfbG9va3VwX291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOwogICAgVmljZUZpZCBW RmlkOwogICAgaW50IHZ0eXBlOwp9OwoKCgpzdHJ1Y3QgY29kYV9jcmVhdGVfaW4gewogICAgc3Ry dWN0IGNvZGFfaW5faGRyIGloOwogICAgVmljZUZpZCBWRmlkOwogICAgc3RydWN0IGNvZGFfdmF0 dHIgYXR0cjsKICAgIGludCBleGNsOwogICAgaW50IG1vZGU7CiAgICBpbnQgbmFtZTsKfTsKCnN0 cnVjdCBjb2RhX2NyZWF0ZV9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKICAgIFZp Y2VGaWQgVkZpZDsKICAgIHN0cnVjdCBjb2RhX3ZhdHRyIGF0dHI7Cn07CgoKCnN0cnVjdCBjb2Rh X3JlbW92ZV9pbiB7CiAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CiAgICBWaWNlRmlkIFZGaWQ7 CiAgICBpbnQgbmFtZTsKfTsKCnN0cnVjdCBjb2RhX3JlbW92ZV9vdXQgewogICAgc3RydWN0IGNv ZGFfb3V0X2hkciBvdXQ7Cn07CgoKc3RydWN0IGNvZGFfbGlua19pbiB7CiAgICBzdHJ1Y3QgY29k YV9pbl9oZHIgaWg7CiAgICBWaWNlRmlkIHNvdXJjZUZpZDsKICAgIFZpY2VGaWQgZGVzdEZpZDsK ICAgIGludCB0bmFtZTsKfTsKCnN0cnVjdCBjb2RhX2xpbmtfb3V0IHsKICAgIHN0cnVjdCBjb2Rh X291dF9oZHIgb3V0Owp9OwoKCgpzdHJ1Y3QgY29kYV9yZW5hbWVfaW4gewogICAgc3RydWN0IGNv ZGFfaW5faGRyIGloOwogICAgVmljZUZpZCBzb3VyY2VGaWQ7CiAgICBpbnQgc3JjbmFtZTsKICAg IFZpY2VGaWQgZGVzdEZpZDsKICAgIGludCBkZXN0bmFtZTsKfTsKCnN0cnVjdCBjb2RhX3JlbmFt ZV9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvdXQ7Cn07CgoKc3RydWN0IGNvZGFfbWtk aXJfaW4gewogICAgc3RydWN0IGNvZGFfaW5faGRyIGloOwogICAgVmljZUZpZCBWRmlkOwogICAg c3RydWN0IGNvZGFfdmF0dHIgYXR0cjsKICAgIGludCBuYW1lOwp9OwoKc3RydWN0IGNvZGFfbWtk aXJfb3V0IHsKICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7CiAgICBWaWNlRmlkIFZGaWQ7CiAg ICBzdHJ1Y3QgY29kYV92YXR0ciBhdHRyOwp9OwoKCgpzdHJ1Y3QgY29kYV9ybWRpcl9pbiB7CiAg ICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CiAgICBWaWNlRmlkIFZGaWQ7CiAgICBpbnQgbmFtZTsK fTsKCnN0cnVjdCBjb2RhX3JtZGlyX291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG91dDsK fTsKCgpzdHJ1Y3QgY29kYV9zeW1saW5rX2luIHsKICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsK ICAgIFZpY2VGaWQgVkZpZDsKICAgIGludCBzcmNuYW1lOwogICAgc3RydWN0IGNvZGFfdmF0dHIg YXR0cjsKICAgIGludCB0bmFtZTsKfTsKCnN0cnVjdCBjb2RhX3N5bWxpbmtfb3V0IHsKICAgIHN0 cnVjdCBjb2RhX291dF9oZHIgb3V0Owp9OwoKCnN0cnVjdCBjb2RhX3JlYWRsaW5rX2luIHsKICAg IHN0cnVjdCBjb2RhX2luX2hkciBpaDsKICAgIFZpY2VGaWQgVkZpZDsKfTsKCnN0cnVjdCBjb2Rh X3JlYWRsaW5rX291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOwogICAgaW50IGNvdW50 OwogICAgY2FkZHJfdCBkYXRhOwp9OwoKCgpzdHJ1Y3QgY29kYV9mc3luY19pbiB7CiAgICBzdHJ1 Y3QgY29kYV9pbl9oZHIgaWg7CiAgICBWaWNlRmlkIFZGaWQ7Cn07CgpzdHJ1Y3QgY29kYV9mc3lu Y19vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvdXQ7Cn07CgoKc3RydWN0IGNvZGFfdmdl dF9pbiB7CiAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CiAgICBWaWNlRmlkIFZGaWQ7Cn07Cgpz dHJ1Y3QgY29kYV92Z2V0X291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOwogICAgVmlj ZUZpZCBWRmlkOwogICAgaW50IHZ0eXBlOwp9OwojIDYxNiAiL3Vzci9zcmMvbGludXgtMi40LjIw LTgvaW5jbHVkZS9saW51eC9jb2RhLmgiCnN0cnVjdCBjb2RhX3B1cmdldXNlcl9vdXQgewogICAg c3RydWN0IGNvZGFfb3V0X2hkciBvaDsKICAgIHN0cnVjdCBjb2RhX2NyZWQgY3JlZDsKfTsKCgoK c3RydWN0IGNvZGFfemFwZmlsZV9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKICAg IFZpY2VGaWQgQ29kYUZpZDsKfTsKCgoKc3RydWN0IGNvZGFfemFwZGlyX291dCB7CiAgICBzdHJ1 Y3QgY29kYV9vdXRfaGRyIG9oOwogICAgVmljZUZpZCBDb2RhRmlkOwp9OwoKCgpzdHJ1Y3QgY29k YV96YXB2bm9kZV9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKICAgIHN0cnVjdCBj b2RhX2NyZWQgY3JlZDsKICAgIFZpY2VGaWQgVkZpZDsKfTsKCgoKc3RydWN0IGNvZGFfcHVyZ2Vm aWRfb3V0IHsKICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7CiAgICBWaWNlRmlkIENvZGFGaWQ7 Cn07CgoKCnN0cnVjdCBjb2RhX3JlcGxhY2Vfb3V0IHsKICAgIHN0cnVjdCBjb2RhX291dF9oZHIg b2g7CiAgICBWaWNlRmlkIE5ld0ZpZDsKICAgIFZpY2VGaWQgT2xkRmlkOwp9OwoKCnN0cnVjdCBj b2RhX29wZW5fYnlfZmRfaW4gewogICAgc3RydWN0IGNvZGFfaW5faGRyIGloOwogICAgVmljZUZp ZCBWRmlkOwogICAgaW50IGZsYWdzOwp9OwoKc3RydWN0IGNvZGFfb3Blbl9ieV9mZF9vdXQgewog ICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKICAgIGludCBmZDsKCgogICAgc3RydWN0IGZpbGUg KmZoOwoKfTsKCgpzdHJ1Y3QgY29kYV9vcGVuX2J5X3BhdGhfaW4gewogICAgc3RydWN0IGNvZGFf aW5faGRyIGloOwogICAgVmljZUZpZCBWRmlkOwogICAgaW50IGZsYWdzOwp9OwoKc3RydWN0IGNv ZGFfb3Blbl9ieV9wYXRoX291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOwogICAgICAg IGludCBwYXRoOwp9OwoKCnN0cnVjdCBjb2RhX3N0YXRmc19pbiB7CiAgICBzdHJ1Y3QgY29kYV9p bl9oZHIgaW47Cn07CgpzdHJ1Y3QgY29kYV9zdGF0ZnNfb3V0IHsKICAgIHN0cnVjdCBjb2RhX291 dF9oZHIgb2g7CiAgICBzdHJ1Y3QgY29kYV9zdGF0ZnMgc3RhdDsKfTsKIyA3MDMgIi91c3Ivc3Jj L2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvY29kYS5oIgp1bmlvbiBpbnB1dEFyZ3Mgewog ICAgc3RydWN0IGNvZGFfaW5faGRyIGloOwogICAgc3RydWN0IGNvZGFfb3Blbl9pbiBjb2RhX29w ZW47CiAgICBzdHJ1Y3QgY29kYV9zdG9yZV9pbiBjb2RhX3N0b3JlOwogICAgc3RydWN0IGNvZGFf cmVsZWFzZV9pbiBjb2RhX3JlbGVhc2U7CiAgICBzdHJ1Y3QgY29kYV9jbG9zZV9pbiBjb2RhX2Ns b3NlOwogICAgc3RydWN0IGNvZGFfaW9jdGxfaW4gY29kYV9pb2N0bDsKICAgIHN0cnVjdCBjb2Rh X2dldGF0dHJfaW4gY29kYV9nZXRhdHRyOwogICAgc3RydWN0IGNvZGFfc2V0YXR0cl9pbiBjb2Rh X3NldGF0dHI7CiAgICBzdHJ1Y3QgY29kYV9hY2Nlc3NfaW4gY29kYV9hY2Nlc3M7CiAgICBzdHJ1 Y3QgY29kYV9sb29rdXBfaW4gY29kYV9sb29rdXA7CiAgICBzdHJ1Y3QgY29kYV9jcmVhdGVfaW4g Y29kYV9jcmVhdGU7CiAgICBzdHJ1Y3QgY29kYV9yZW1vdmVfaW4gY29kYV9yZW1vdmU7CiAgICBz dHJ1Y3QgY29kYV9saW5rX2luIGNvZGFfbGluazsKICAgIHN0cnVjdCBjb2RhX3JlbmFtZV9pbiBj b2RhX3JlbmFtZTsKICAgIHN0cnVjdCBjb2RhX21rZGlyX2luIGNvZGFfbWtkaXI7CiAgICBzdHJ1 Y3QgY29kYV9ybWRpcl9pbiBjb2RhX3JtZGlyOwogICAgc3RydWN0IGNvZGFfc3ltbGlua19pbiBj b2RhX3N5bWxpbms7CiAgICBzdHJ1Y3QgY29kYV9yZWFkbGlua19pbiBjb2RhX3JlYWRsaW5rOwog ICAgc3RydWN0IGNvZGFfZnN5bmNfaW4gY29kYV9mc3luYzsKICAgIHN0cnVjdCBjb2RhX3ZnZXRf aW4gY29kYV92Z2V0OwogICAgc3RydWN0IGNvZGFfb3Blbl9ieV9mZF9pbiBjb2RhX29wZW5fYnlf ZmQ7CiAgICBzdHJ1Y3QgY29kYV9vcGVuX2J5X3BhdGhfaW4gY29kYV9vcGVuX2J5X3BhdGg7CiAg ICBzdHJ1Y3QgY29kYV9zdGF0ZnNfaW4gY29kYV9zdGF0ZnM7Cn07Cgp1bmlvbiBvdXRwdXRBcmdz IHsKICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7CiAgICBzdHJ1Y3QgY29kYV9yb290X291dCBj b2RhX3Jvb3Q7CiAgICBzdHJ1Y3QgY29kYV9vcGVuX291dCBjb2RhX29wZW47CiAgICBzdHJ1Y3Qg Y29kYV9pb2N0bF9vdXQgY29kYV9pb2N0bDsKICAgIHN0cnVjdCBjb2RhX2dldGF0dHJfb3V0IGNv ZGFfZ2V0YXR0cjsKICAgIHN0cnVjdCBjb2RhX2xvb2t1cF9vdXQgY29kYV9sb29rdXA7CiAgICBz dHJ1Y3QgY29kYV9jcmVhdGVfb3V0IGNvZGFfY3JlYXRlOwogICAgc3RydWN0IGNvZGFfbWtkaXJf b3V0IGNvZGFfbWtkaXI7CiAgICBzdHJ1Y3QgY29kYV9yZWFkbGlua19vdXQgY29kYV9yZWFkbGlu azsKICAgIHN0cnVjdCBjb2RhX3ZnZXRfb3V0IGNvZGFfdmdldDsKICAgIHN0cnVjdCBjb2RhX3B1 cmdldXNlcl9vdXQgY29kYV9wdXJnZXVzZXI7CiAgICBzdHJ1Y3QgY29kYV96YXBmaWxlX291dCBj b2RhX3phcGZpbGU7CiAgICBzdHJ1Y3QgY29kYV96YXBkaXJfb3V0IGNvZGFfemFwZGlyOwogICAg c3RydWN0IGNvZGFfemFwdm5vZGVfb3V0IGNvZGFfemFwdm5vZGU7CiAgICBzdHJ1Y3QgY29kYV9w dXJnZWZpZF9vdXQgY29kYV9wdXJnZWZpZDsKICAgIHN0cnVjdCBjb2RhX3JlcGxhY2Vfb3V0IGNv ZGFfcmVwbGFjZTsKICAgIHN0cnVjdCBjb2RhX29wZW5fYnlfZmRfb3V0IGNvZGFfb3Blbl9ieV9m ZDsKICAgIHN0cnVjdCBjb2RhX29wZW5fYnlfcGF0aF9vdXQgY29kYV9vcGVuX2J5X3BhdGg7CiAg ICBzdHJ1Y3QgY29kYV9zdGF0ZnNfb3V0IGNvZGFfc3RhdGZzOwp9OwoKdW5pb24gY29kYV9kb3du Y2FsbHMgewoKCiAgICBzdHJ1Y3QgY29kYV9wdXJnZXVzZXJfb3V0IHB1cmdldXNlcjsKICAgIHN0 cnVjdCBjb2RhX3phcGZpbGVfb3V0IHphcGZpbGU7CiAgICBzdHJ1Y3QgY29kYV96YXBkaXJfb3V0 IHphcGRpcjsKICAgIHN0cnVjdCBjb2RhX3phcHZub2RlX291dCB6YXB2bm9kZTsKICAgIHN0cnVj dCBjb2RhX3B1cmdlZmlkX291dCBwdXJnZWZpZDsKICAgIHN0cnVjdCBjb2RhX3JlcGxhY2Vfb3V0 IHJlcGxhY2U7Cn07CgoKCgoKCgpzdHJ1Y3QgVmljZUlvY3RsIHsKICAgICAgICBjYWRkcl90IGlu LCBvdXQ7CiAgICAgICAgc2hvcnQgaW5fc2l6ZTsKICAgICAgICBzaG9ydCBvdXRfc2l6ZTsKfTsK CnN0cnVjdCBQaW9jdGxEYXRhIHsKICAgICAgICBjb25zdCBjaGFyICpwYXRoOwogICAgICAgIGlu dCBmb2xsb3c7CiAgICAgICAgc3RydWN0IFZpY2VJb2N0bCB2aTsKfTsKIyA3OTcgIi91c3Ivc3Jj L2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvY29kYS5oIgpzdHJ1Y3QgY29kYV9tb3VudF9k YXRhIHsKICAgICAgICBpbnQgdmVyc2lvbjsKICAgICAgICBpbnQgZmQ7Cn07CiMgMTUgIi91c3Iv c3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvY29kYV9mc19pLmgiIDIKCgoKCnN0cnVj dCBjb2RhX2lub2RlX2luZm8gewogICAgICAgIHN0cnVjdCBWaWNlRmlkIGNfZmlkOwogICAgICAg IHVfc2hvcnQgY19mbGFnczsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGNfY2lsaXN0OwogICAg ICAgIGludCBjX21hcGNvdW50OwogICAgICAgIHN0cnVjdCBjb2RhX2NyZWQgY19jYWNoZWRfY3Jl ZDsKICAgICAgICB1bnNpZ25lZCBpbnQgY19jYWNoZWRfcGVybTsKfTsKCgoKCgpzdHJ1Y3QgY29k YV9maWxlX2luZm8gewogICAgICAgIGludCBjZmlfbWFnaWM7CiAgICAgICAgaW50IGNmaV9tYXBj b3VudDsKICAgICAgICBzdHJ1Y3QgZmlsZSAqY2ZpX2NvbnRhaW5lcjsKICAgICAgICBzdHJ1Y3Qg Y29kYV9jcmVkIGNmaV9jcmVkOwp9OwojIDQ3ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNs dWRlL2xpbnV4L2NvZGFfZnNfaS5oIgppbnQgY29kYV9jbm9kZV9tYWtlKHN0cnVjdCBpbm9kZSAq Kiwgc3RydWN0IFZpY2VGaWQgKiwgc3RydWN0IHN1cGVyX2Jsb2NrICopOwpzdHJ1Y3QgaW5vZGUg KmNvZGFfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgVmljZUZpZCAqZmlkLCBz dHJ1Y3QgY29kYV92YXR0ciAqYXR0cik7CmludCBjb2RhX2Nub2RlX21ha2VjdGwoc3RydWN0IGlu b2RlICoqaW5vZGUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwpzdHJ1Y3QgaW5vZGUgKmNvZGFf ZmlkX3RvX2lub2RlKFZpY2VGaWQgKmZpZCwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CnZvaWQg Y29kYV9yZXBsYWNlX2ZpZChzdHJ1Y3QgaW5vZGUgKiwgVmljZUZpZCAqLCBWaWNlRmlkICopOwoj IDMxMCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAi L3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9yb21mc19mc19pLmgiIDEKCgoK CgpzdHJ1Y3Qgcm9tZnNfaW5vZGVfaW5mbyB7CiAgICAgICAgdW5zaWduZWQgbG9uZyBpX21ldGFz aXplOwogICAgICAgIHVuc2lnbmVkIGxvbmcgaV9kYXRhb2Zmc2V0Owp9OwojIDMxMSAiL3Vzci9z cmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGlu dXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oIiAxCiMgMTYgIi91c3Ivc3JjL2xp bnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvc2htZW1fZnMuaCIKdHlwZWRlZiBzdHJ1Y3Qgewog ICAgICAgIHVuc2lnbmVkIGxvbmcgdmFsOwp9IHN3cF9lbnRyeV90OwoKZXh0ZXJuIGF0b21pY190 IHNobWVtX25ycGFnZXM7CgpzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyB7CiAgICAgICAgc3Bpbmxv Y2tfdCBsb2NrOwogICAgICAgIHN0cnVjdCBzZW1hcGhvcmUgc2VtOwogICAgICAgIHVuc2lnbmVk IGxvbmcgbmV4dF9pbmRleDsKICAgICAgICBzd3BfZW50cnlfdCBpX2RpcmVjdFsxNl07CiAgICAg ICAgdm9pZCAqKmlfaW5kaXJlY3Q7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzd2FwcGVkOwogICAg ICAgIGludCBsb2NrZWQ7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogICAgICAgIHN0 cnVjdCBpbm9kZSAqaW5vZGU7Cn07CgpzdHJ1Y3Qgc2htZW1fc2JfaW5mbyB7CiAgICAgICAgdW5z aWduZWQgbG9uZyBtYXhfYmxvY2tzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZnJlZV9ibG9ja3M7 CiAgICAgICAgdW5zaWduZWQgbG9uZyBtYXhfaW5vZGVzOwogICAgICAgIHVuc2lnbmVkIGxvbmcg ZnJlZV9pbm9kZXM7CiAgICAgICAgc3BpbmxvY2tfdCBzdGF0X2xvY2s7Cn07CiMgMzEyICIvdXNy L3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9s aW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3NtYl9mc19pLmgiIDEKIyAxOCAiL3Vzci9zcmMv bGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9zbWJfZnNfaS5oIgpzdHJ1Y3Qgc21iX2lub2Rl X2luZm8gewoKCgoKCiAgICAgICAgdW5zaWduZWQgaW50IG9wZW47CiAgICAgICAgX191MTYgZmls ZWlkOwogICAgICAgIF9fdTE2IGF0dHI7CgogICAgICAgIF9fdTE2IGFjY2VzczsKICAgICAgICBf X3UxNiBmbGFnczsKICAgICAgICB1bnNpZ25lZCBsb25nIG9sZG10aW1lOwogICAgICAgIHVuc2ln bmVkIGxvbmcgY2xvc2VkOwogICAgICAgIHVuc2lnbmVkIG9wZW5lcnM7Cn07CiMgMzEzICIvdXNy L3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9s aW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2hmc19mc19pLmgiIDEKIyAxOSAiL3Vzci9zcmMv bGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9oZnNfZnNfaS5oIgpzdHJ1Y3QgaGZzX2lub2Rl X2luZm8gewogICAgICAgIGludCBtYWdpYzsKCiAgICAgICAgdW5zaWduZWQgbG9uZyBtbXVfcHJp dmF0ZTsKICAgICAgICBzdHJ1Y3QgaGZzX2NhdF9lbnRyeSAqZW50cnk7CgoKICAgICAgICBzdHJ1 Y3QgaGZzX2ZvcmsgKmZvcms7CiAgICAgICAgaW50IGNvbnZlcnQ7CgoKICAgICAgICBpbm9fdCBm aWxlX3R5cGU7CiAgICAgICAgY2hhciBkaXJfc2l6ZTsKCgogICAgICAgIGNvbnN0IHN0cnVjdCBo ZnNfaGRyX2xheW91dCAqZGVmYXVsdF9sYXlvdXQ7CiAgICAgICAgc3RydWN0IGhmc19oZHJfbGF5 b3V0ICpsYXlvdXQ7CgoKICAgICAgICBpbnQgdHpfc2Vjb25kc3dlc3Q7CgoKICAgICAgICB2b2lk ICgqZF9kcm9wX29wKShzdHJ1Y3QgZGVudHJ5ICosIGNvbnN0IGlub190KTsKfTsKIyAzMTQgIi91 c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3Jj L2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvYWRmc19mc19pLmgiIDEKIyAxMyAiL3Vzci9z cmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9hZGZzX2ZzX2kuaCIKc3RydWN0IGFkZnNf aW5vZGVfaW5mbyB7CiAgICAgICAgdW5zaWduZWQgbG9uZyBtbXVfcHJpdmF0ZTsKICAgICAgICB1 bnNpZ25lZCBsb25nIHBhcmVudF9pZDsKICAgICAgICBfX3UzMiBsb2FkYWRkcjsKICAgICAgICBf X3UzMiBleGVjYWRkcjsKICAgICAgICB1bnNpZ25lZCBpbnQgZmlsZXR5cGU7CiAgICAgICAgdW5z aWduZWQgaW50IGF0dHI7CiAgICAgICAgaW50IHN0YW1wZWQ6MTsKfTsKIyAzMTUgIi91c3Ivc3Jj L2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4 LTIuNC4yMC04L2luY2x1ZGUvbGludXgvcW54NF9mc19pLmgiIDEKIyAxNCAiL3Vzci9zcmMvbGlu dXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9xbng0X2ZzX2kuaCIKIyAxICIvdXNyL3NyYy9saW51 eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3FueHR5cGVzLmgiIDEKIyAxNSAiL3Vzci9zcmMvbGlu dXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9xbnh0eXBlcy5oIgp0eXBlZGVmIF9fdTE2IHFueDRf bnh0bnRfdDsKdHlwZWRlZiBfX3U4IHFueDRfZnR5cGVfdDsKCnR5cGVkZWYgc3RydWN0IHsKICAg ICAgICBfX3UzMiB4dG50X2JsazsKICAgICAgICBfX3UzMiB4dG50X3NpemU7Cn0gcW54NF94dG50 X3Q7Cgp0eXBlZGVmIF9fdTE2IHFueDRfbW9kZV90Owp0eXBlZGVmIF9fdTE2IHFueDRfbXVpZF90 Owp0eXBlZGVmIF9fdTE2IHFueDRfbWdpZF90Owp0eXBlZGVmIF9fdTMyIHFueDRfb2ZmX3Q7CnR5 cGVkZWYgX191MTYgcW54NF9ubGlua190OwojIDE1ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9p bmNsdWRlL2xpbnV4L3FueDRfZnNfaS5oIiAyCgoKCgpzdHJ1Y3QgcW54NF9pbm9kZV9pbmZvIHsK ICAgICAgICBjaGFyIGlfcmVzZXJ2ZWRbMTZdOwogICAgICAgIHFueDRfb2ZmX3QgaV9zaXplOwog ICAgICAgIHFueDRfeHRudF90IGlfZmlyc3RfeHRudDsKICAgICAgICBfX3UzMiBpX3hibGs7CiAg ICAgICAgX19zMzIgaV9mdGltZTsKICAgICAgICBfX3MzMiBpX210aW1lOwogICAgICAgIF9fczMy IGlfYXRpbWU7CiAgICAgICAgX19zMzIgaV9jdGltZTsKICAgICAgICBxbng0X254dG50X3QgaV9u dW1feHRudHM7CiAgICAgICAgcW54NF9tb2RlX3QgaV9tb2RlOwogICAgICAgIHFueDRfbXVpZF90 IGlfdWlkOwogICAgICAgIHFueDRfbWdpZF90IGlfZ2lkOwogICAgICAgIHFueDRfbmxpbmtfdCBp X25saW5rOwogICAgICAgIF9fdTggaV96ZXJvWzRdOwogICAgICAgIHFueDRfZnR5cGVfdCBpX3R5 cGU7CiAgICAgICAgX191OCBpX3N0YXR1czsKICAgICAgICB1bnNpZ25lZCBsb25nIG1tdV9wcml2 YXRlOwp9OwojIDMxNiAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9mcy5o IiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9yZWlzZXJmc19m c19pLmgiIDEKIyAxMCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9yZWlz ZXJmc19mc19pLmgiCnR5cGVkZWYgZW51bSB7CgoKCiAgICBpX2l0ZW1fa2V5X3ZlcnNpb25fbWFz ayA9IDB4MDAwMSwKCgogICAgaV9zdGF0X2RhdGFfdmVyc2lvbl9tYXNrID0gMHgwMDAyLAoKICAg IGlfcGFja19vbl9jbG9zZV9tYXNrID0gMHgwMDA0LAoKICAgIGlfbm9wYWNrX21hc2sgPSAweDAw MDgsCgoKCiAgICBpX2xpbmtfc2F2ZWRfdW5saW5rX21hc2sgPSAweDAwMTAsCiAgICBpX2xpbmtf c2F2ZWRfdHJ1bmNhdGVfbWFzayA9IDB4MDAyMAp9IHJlaXNlcmZzX2lub2RlX2ZsYWdzOwoKCnN0 cnVjdCByZWlzZXJmc19pbm9kZV9pbmZvIHsKICAgIF9fdTMyIGlfa2V5IFs0XTsKCgoKICAgIF9f dTMyIGlfZmxhZ3M7CgogICAgX191MzIgaV9maXJzdF9kaXJlY3RfYnl0ZTsKCgogICAgX191MzIg aV9hdHRyczsKCiAgICBpbnQgaV9wcmVhbGxvY19ibG9jazsKICAgIGludCBpX3ByZWFsbG9jX2Nv dW50OwogICAgc3RydWN0IGxpc3RfaGVhZCBpX3ByZWFsbG9jX2xpc3Q7CgoKICAgIGludCBuZXdf cGFja2luZ19sb2NhbGl0eToxOwoKCgoKCgogICAgdW5zaWduZWQgbG9uZyBpX3RyYW5zX2lkIDsK ICAgIHVuc2lnbmVkIGxvbmcgaV90cmFuc19pbmRleCA7Cn07CiMgMzE3ICIvdXNyL3NyYy9saW51 eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQu MjAtOC9pbmNsdWRlL2xpbnV4L2Jmc19mc19pLmgiIDEKIyAxMiAiL3Vzci9zcmMvbGludXgtMi40 LjIwLTgvaW5jbHVkZS9saW51eC9iZnNfZnNfaS5oIgpzdHJ1Y3QgYmZzX2lub2RlX2luZm8gewog ICAgICAgIHVuc2lnbmVkIGxvbmcgaV9kc2tfaW5vOwogICAgICAgIHVuc2lnbmVkIGxvbmcgaV9z YmxvY2s7CiAgICAgICAgdW5zaWduZWQgbG9uZyBpX2VibG9jazsKfTsKIyAzMTggIi91c3Ivc3Jj L2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4 LTIuNC4yMC04L2luY2x1ZGUvbGludXgvdWRmX2ZzX2kuaCIgMQojIDI0ICIvdXNyL3NyYy9saW51 eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3VkZl9mc19pLmgiCnR5cGVkZWYgc3RydWN0CnsKICAg ICAgICBfX3UzMiBsb2dpY2FsQmxvY2tOdW07CiAgICAgICAgX191MTYgcGFydGl0aW9uUmVmZXJl bmNlTnVtOwp9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBsYl9hZGRyOwoKCnN0cnVjdCB1ZGZf aW5vZGVfaW5mbwp7CiAgICAgICAgbG9uZyBpX3VtdGltZTsKICAgICAgICBsb25nIGlfdWN0aW1l OwogICAgICAgIGxvbmcgaV9jcnRpbWU7CiAgICAgICAgbG9uZyBpX3VjcnRpbWU7CgogICAgICAg IGxiX2FkZHIgaV9sb2NhdGlvbjsKICAgICAgICBfX3U2NCBpX3VuaXF1ZTsKICAgICAgICBfX3Uz MiBpX2xlbkVBdHRyOwogICAgICAgIF9fdTMyIGlfbGVuQWxsb2M7CiAgICAgICAgX191NjQgaV9s ZW5FeHRlbnRzOwogICAgICAgIF9fdTMyIGlfbmV4dF9hbGxvY19ibG9jazsKICAgICAgICBfX3Uz MiBpX25leHRfYWxsb2NfZ29hbDsKICAgICAgICB1bnNpZ25lZCBpX2FsbG9jX3R5cGUgOiAzOwog ICAgICAgIHVuc2lnbmVkIGlfZXh0ZW5kZWRfZmUgOiAxOwogICAgICAgIHVuc2lnbmVkIGlfc3Ry YXRfNDA5NiA6IDE7CiAgICAgICAgdW5zaWduZWQgaV9uZXdfaW5vZGUgOiAxOwogICAgICAgIHVu c2lnbmVkIHJlc2VydmVkIDogMjY7Cn07CiMgMzE5ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9p bmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRl L2xpbnV4L25jcF9mc19pLmgiIDEKIyAxNyAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVk ZS9saW51eC9uY3BfZnNfaS5oIgpzdHJ1Y3QgbmNwX2lub2RlX2luZm8gewogICAgICAgIF9fdTMy IGRpckVudE51bSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3UzMiBEb3NEaXJO dW0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191MzIgdm9sTnVtYmVyIF9fYXR0 cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTMyIG53YXR0cjsKICAgICAgICBzdHJ1Y3Qg c2VtYXBob3JlIG9wZW5fc2VtOwogICAgICAgIGF0b21pY190IG9wZW5lZDsKICAgICAgICBpbnQg YWNjZXNzOwogICAgICAgIF9fdTMyIHNlcnZlcl9maWxlX2hhbmRsZSBfX2F0dHJpYnV0ZV9fKChw YWNrZWQpKTsKICAgICAgICBfX3U4IG9wZW5fY3JlYXRlX2FjdGlvbiBfX2F0dHJpYnV0ZV9fKChw YWNrZWQpKTsKICAgICAgICBfX3U4IGZpbGVfaGFuZGxlWzZdIF9fYXR0cmlidXRlX18oKHBhY2tl ZCkpOwp9OwojIDMyMCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9mcy5o IiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9wcm9jX2ZzX2ku aCIgMQpzdHJ1Y3QgcHJvY19pbm9kZV9pbmZvIHsKICAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3Qg KnRhc2s7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5pb24gewogICAgICAgICAgICAgICAg aW50ICgqcHJvY19nZXRfbGluaykoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKiosIHN0 cnVjdCB2ZnNtb3VudCAqKik7CiAgICAgICAgICAgICAgICBpbnQgKCpwcm9jX3JlYWQpKHN0cnVj dCB0YXNrX3N0cnVjdCAqdGFzaywgY2hhciAqcGFnZSk7CiAgICAgICAgfSBvcDsKICAgICAgICBz dHJ1Y3QgZmlsZSAqZmlsZTsKfTsKIyAzMjEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1 ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGlu dXgvdXNiZGV2X2ZzX2kuaCIgMQpzdHJ1Y3QgdXNiX2RldmljZTsKc3RydWN0IHVzYl9idXM7Cgpz dHJ1Y3QgdXNiZGV2X2lub2RlX2luZm8gewogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgZGxpc3Q7 CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBzbGlzdDsKICAgICAgICB1bmlvbiB7CiAgICAgICAg ICAgICAgICBzdHJ1Y3QgdXNiX2RldmljZSAqZGV2OwogICAgICAgICAgICAgICAgc3RydWN0IHVz Yl9idXMgKmJ1czsKICAgICAgICB9IHA7Cn07CiMgMzIyICIvdXNyL3NyYy9saW51eC0yLjQuMjAt OC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNs dWRlL2xpbnV4L2pmZnMyX2ZzX2kuaCIgMQojIDE2ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9p bmNsdWRlL2xpbnV4L2pmZnMyX2ZzX2kuaCIKc3RydWN0IGpmZnMyX2lub2RlX2luZm8gewojIDI2 ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2pmZnMyX2ZzX2kuaCIKICAg ICAgICBzdHJ1Y3Qgc2VtYXBob3JlIHNlbTsKCgogICAgICAgIF9fdTMyIGhpZ2hlc3RfdmVyc2lv bjsKCgogICAgICAgIHN0cnVjdCBqZmZzMl9ub2RlX2ZyYWcgKmZyYWdsaXN0OwoKCgoKCgogICAg ICAgIHN0cnVjdCBqZmZzMl9mdWxsX2Rub2RlICptZXRhZGF0YTsKCgogICAgICAgIHN0cnVjdCBq ZmZzMl9mdWxsX2RpcmVudCAqZGVudHM7CgoKICAgICAgICBzdHJ1Y3QgamZmczJfaW5vZGVfY2Fj aGUgKmlub2NhY2hlOwoKCgoKCiAgICAgICAgX191MTYgZmxhZ3M7CiAgICAgICAgX191OCB1c2Vy Y29tcHI7Cn07CiMgMzIzICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2Zz LmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2NyYW1mc19m c19zYi5oIiAxCgoKCgoKCnN0cnVjdCBjcmFtZnNfc2JfaW5mbyB7CiAgICAgICAgICAgICAgICAg ICAgICAgIHVuc2lnbmVkIGxvbmcgbWFnaWM7CiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln bmVkIGxvbmcgc2l6ZTsKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBibG9j a3M7CiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmlsZXM7CiAgICAgICAg ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Cn07CiMgMzI0ICIvdXNyL3NyYy9s aW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAzNTAgIi91c3Ivc3JjL2xpbnV4 LTIuNC4yMC04L2luY2x1ZGUvbGludXgvZnMuaCIKc3RydWN0IGlhdHRyIHsKICAgICAgICB1bnNp Z25lZCBpbnQgaWFfdmFsaWQ7CiAgICAgICAgdW1vZGVfdCBpYV9tb2RlOwogICAgICAgIHVpZF90 IGlhX3VpZDsKICAgICAgICBnaWRfdCBpYV9naWQ7CiAgICAgICAgbG9mZl90IGlhX3NpemU7CiAg ICAgICAgdGltZV90IGlhX2F0aW1lOwogICAgICAgIHRpbWVfdCBpYV9tdGltZTsKICAgICAgICB0 aW1lX3QgaWFfY3RpbWU7CiAgICAgICAgdW5zaWduZWQgaW50IGlhX2F0dHJfZmxhZ3M7Cn07CiMg Mzc0ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2ZzLmgiCiMgMSAiL3Vz ci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9xdW90YS5oIiAxCiMgNDggIi91c3Iv c3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvcXVvdGEuaCIKdHlwZWRlZiBfX2tlcm5l bF91aWQzMl90IHFpZF90Owp0eXBlZGVmIF9fdTY0IHFzaXplX3Q7CiMgMTA3ICIvdXNyL3NyYy9s aW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3F1b3RhLmgiCnN0cnVjdCBpZl9kcWJsayB7CiAg ICAgICAgX191NjQgZHFiX2JoYXJkbGltaXQ7CiAgICAgICAgX191NjQgZHFiX2Jzb2Z0bGltaXQ7 CiAgICAgICAgX191NjQgZHFiX2N1cnNwYWNlOwogICAgICAgIF9fdTY0IGRxYl9paGFyZGxpbWl0 OwogICAgICAgIF9fdTY0IGRxYl9pc29mdGxpbWl0OwogICAgICAgIF9fdTY0IGRxYl9jdXJpbm9k ZXM7CiAgICAgICAgX191NjQgZHFiX2J0aW1lOwogICAgICAgIF9fdTY0IGRxYl9pdGltZTsKICAg ICAgICBfX3UzMiBkcWJfdmFsaWQ7Cn07CiMgMTI4ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9p bmNsdWRlL2xpbnV4L3F1b3RhLmgiCnN0cnVjdCBpZl9kcWluZm8gewogICAgICAgIF9fdTY0IGRx aV9iZ3JhY2U7CiAgICAgICAgX191NjQgZHFpX2lncmFjZTsKICAgICAgICBfX3UzMiBkcWlfZmxh Z3M7CiAgICAgICAgX191MzIgZHFpX3ZhbGlkOwp9OwoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIu NC4yMC04L2luY2x1ZGUvbGludXgvZHFibGtfeGZzLmgiIDEKIyA1OCAiL3Vzci9zcmMvbGludXgt Mi40LjIwLTgvaW5jbHVkZS9saW51eC9kcWJsa194ZnMuaCIKdHlwZWRlZiBzdHJ1Y3QgZnNfZGlz a19xdW90YSB7CiAgICAgICAgX19zOCBkX3ZlcnNpb247CiAgICAgICAgX19zOCBkX2ZsYWdzOwog ICAgICAgIF9fdTE2IGRfZmllbGRtYXNrOwogICAgICAgIF9fdTMyIGRfaWQ7CiAgICAgICAgX191 NjQgZF9ibGtfaGFyZGxpbWl0OwogICAgICAgIF9fdTY0IGRfYmxrX3NvZnRsaW1pdDsKICAgICAg ICBfX3U2NCBkX2lub19oYXJkbGltaXQ7CiAgICAgICAgX191NjQgZF9pbm9fc29mdGxpbWl0Owog ICAgICAgIF9fdTY0IGRfYmNvdW50OwogICAgICAgIF9fdTY0IGRfaWNvdW50OwogICAgICAgIF9f czMyIGRfaXRpbWVyOwoKICAgICAgICBfX3MzMiBkX2J0aW1lcjsKICAgICAgICBfX3UxNiBkX2l3 YXJuczsKICAgICAgICBfX3UxNiBkX2J3YXJuczsKICAgICAgICBfX3MzMiBkX3BhZGRpbmcyOwog ICAgICAgIF9fdTY0IGRfcnRiX2hhcmRsaW1pdDsKICAgICAgICBfX3U2NCBkX3J0Yl9zb2Z0bGlt aXQ7CiAgICAgICAgX191NjQgZF9ydGJjb3VudDsKICAgICAgICBfX3MzMiBkX3J0YnRpbWVyOwog ICAgICAgIF9fdTE2IGRfcnRid2FybnM7CiAgICAgICAgX19zMTYgZF9wYWRkaW5nMzsKICAgICAg ICBjaGFyIGRfcGFkZGluZzRbOF07Cn0gZnNfZGlza19xdW90YV90OwojIDEzOSAiL3Vzci9zcmMv bGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9kcWJsa194ZnMuaCIKdHlwZWRlZiBzdHJ1Y3Qg ZnNfcWZpbGVzdGF0IHsKICAgICAgICBfX3U2NCBxZnNfaW5vOwogICAgICAgIF9fdTY0IHFmc19u YmxrczsKICAgICAgICBfX3UzMiBxZnNfbmV4dGVudHM7Cn0gZnNfcWZpbGVzdGF0X3Q7Cgp0eXBl ZGVmIHN0cnVjdCBmc19xdW90YV9zdGF0IHsKICAgICAgICBfX3M4IHFzX3ZlcnNpb247CiAgICAg ICAgX191MTYgcXNfZmxhZ3M7CiAgICAgICAgX19zOCBxc19wYWQ7CiAgICAgICAgZnNfcWZpbGVz dGF0X3QgcXNfdXF1b3RhOwogICAgICAgIGZzX3FmaWxlc3RhdF90IHFzX2dxdW90YTsKICAgICAg ICBfX3UzMiBxc19pbmNvcmVkcXM7CiAgICAgICAgX19zMzIgcXNfYnRpbWVsaW1pdDsKICAgICAg ICBfX3MzMiBxc19pdGltZWxpbWl0OwogICAgICAgIF9fczMyIHFzX3J0YnRpbWVsaW1pdDsKICAg ICAgICBfX3UxNiBxc19id2FybmxpbWl0OwogICAgICAgIF9fdTE2IHFzX2l3YXJubGltaXQ7Cn0g ZnNfcXVvdGFfc3RhdF90OwojIDEzOCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9s aW51eC9xdW90YS5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51 eC9kcWJsa192MS5oIiAxCiMgMTUgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGlu dXgvZHFibGtfdjEuaCIKc3RydWN0IHYxX21lbV9kcWluZm8gewp9OwojIDEzOSAiL3Vzci9zcmMv bGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9xdW90YS5oIiAyCiMgMSAiL3Vzci9zcmMvbGlu dXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9kcWJsa192Mi5oIiAxCiMgMTQgIi91c3Ivc3JjL2xp bnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvZHFibGtfdjIuaCIKc3RydWN0IHYyX21lbV9kcWlu Zm8gewogICAgICAgIHVuc2lnbmVkIGludCBkcWlfYmxvY2tzOwogICAgICAgIHVuc2lnbmVkIGlu dCBkcWlfZnJlZV9ibGs7CiAgICAgICAgdW5zaWduZWQgaW50IGRxaV9mcmVlX2VudHJ5Owp9Owoj IDE0MCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9xdW90YS5oIiAyCgoK CgpzdHJ1Y3QgbWVtX2RxYmxrIHsKICAgICAgICBfX3UzMiBkcWJfYmhhcmRsaW1pdDsKICAgICAg ICBfX3UzMiBkcWJfYnNvZnRsaW1pdDsKICAgICAgICBxc2l6ZV90IGRxYl9jdXJzcGFjZTsKICAg ICAgICBfX3UzMiBkcWJfaWhhcmRsaW1pdDsKICAgICAgICBfX3UzMiBkcWJfaXNvZnRsaW1pdDsK ICAgICAgICBfX3UzMiBkcWJfY3VyaW5vZGVzOwogICAgICAgIHRpbWVfdCBkcWJfYnRpbWU7CiAg ICAgICAgdGltZV90IGRxYl9pdGltZTsKfTsKCgoKCnN0cnVjdCBxdW90YV9mb3JtYXRfdHlwZTsK CnN0cnVjdCBtZW1fZHFpbmZvIHsKICAgICAgICBzdHJ1Y3QgcXVvdGFfZm9ybWF0X3R5cGUgKmRx aV9mb3JtYXQ7CiAgICAgICAgaW50IGRxaV9mbGFnczsKICAgICAgICB1bnNpZ25lZCBpbnQgZHFp X2JncmFjZTsKICAgICAgICB1bnNpZ25lZCBpbnQgZHFpX2lncmFjZTsKICAgICAgICB1bmlvbiB7 CiAgICAgICAgICAgICAgICBzdHJ1Y3QgdjFfbWVtX2RxaW5mbyB2MV9pOwogICAgICAgICAgICAg ICAgc3RydWN0IHYyX21lbV9kcWluZm8gdjJfaTsKICAgICAgICB9IHU7Cn07CgoKCgoKZXh0ZXJu IGlubGluZSB2b2lkIG1hcmtfaW5mb19kaXJ0eShzdHJ1Y3QgbWVtX2RxaW5mbyAqaW5mbykKewog ICAgICAgIGluZm8tPmRxaV9mbGFncyB8PSAweDEwMDAwOwp9CiMgMTg3ICIvdXNyL3NyYy9saW51 eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3F1b3RhLmgiCnN0cnVjdCBkcXN0YXRzX1JmNGY1MmY5 MyB7CiAgICAgICAgaW50IGxvb2t1cHM7CiAgICAgICAgaW50IGRyb3BzOwogICAgICAgIGludCBy ZWFkczsKICAgICAgICBpbnQgd3JpdGVzOwogICAgICAgIGludCBjYWNoZV9oaXRzOwogICAgICAg IGludCBhbGxvY2F0ZWRfZHF1b3RzOwogICAgICAgIGludCBmcmVlX2RxdW90czsKICAgICAgICBp bnQgc3luY3M7Cn07CgpleHRlcm4gc3RydWN0IGRxc3RhdHNfUmY0ZjUyZjkzIGRxc3RhdHNfUmY0 ZjUyZjkzOwojIDIwOSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9xdW90 YS5oIgpzdHJ1Y3QgZHF1b3QgewogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgZHFfaGFzaDsKICAg ICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGRxX2ludXNlOwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQg ZHFfZnJlZTsKICAgICAgICB3YWl0X3F1ZXVlX2hlYWRfdCBkcV93YWl0X2xvY2s7CiAgICAgICAg d2FpdF9xdWV1ZV9oZWFkX3QgZHFfd2FpdF9mcmVlOwogICAgICAgIGludCBkcV9jb3VudDsKICAg ICAgICBpbnQgZHFfZHVwX3JlZjsKCgogICAgICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqZHFfc2I7 CiAgICAgICAgdW5zaWduZWQgaW50IGRxX2lkOwogICAgICAgIGtkZXZfdCBkcV9kZXY7CiAgICAg ICAgbG9mZl90IGRxX29mZjsKICAgICAgICBzaG9ydCBkcV90eXBlOwogICAgICAgIHNob3J0IGRx X2ZsYWdzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZHFfcmVmZXJlbmNlZDsKCiAgICAgICAgc3Ry dWN0IG1lbV9kcWJsayBkcV9kcWI7Cn07CgoKCgoKCgpzdHJ1Y3QgcXVvdGFfZm9ybWF0X29wcyB7 CiAgICAgICAgaW50ICgqY2hlY2tfcXVvdGFfZmlsZSkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwg aW50IHR5cGUpOwogICAgICAgIGludCAoKnJlYWRfZmlsZV9pbmZvKShzdHJ1Y3Qgc3VwZXJfYmxv Y2sgKnNiLCBpbnQgdHlwZSk7CiAgICAgICAgaW50ICgqd3JpdGVfZmlsZV9pbmZvKShzdHJ1Y3Qg c3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSk7CiAgICAgICAgaW50ICgqZnJlZV9maWxlX2luZm8p KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKTsKICAgICAgICBpbnQgKCpyZWFkX2Rx YmxrKShzdHJ1Y3QgZHF1b3QgKmRxdW90KTsKICAgICAgICBpbnQgKCpjb21taXRfZHFibGspKHN0 cnVjdCBkcXVvdCAqZHF1b3QpOwp9OwoKCnN0cnVjdCBkcXVvdF9vcGVyYXRpb25zIHsKICAgICAg ICB2b2lkICgqaW5pdGlhbGl6ZSkgKHN0cnVjdCBpbm9kZSAqLCBpbnQpOwogICAgICAgIHZvaWQg KCpkcm9wKSAoc3RydWN0IGlub2RlICopOwogICAgICAgIGludCAoKmFsbG9jX3NwYWNlKSAoc3Ry dWN0IGlub2RlICosIHFzaXplX3QsIGludCk7CiAgICAgICAgaW50ICgqYWxsb2NfaW5vZGUpIChj b25zdCBzdHJ1Y3QgaW5vZGUgKiwgdW5zaWduZWQgbG9uZyk7CiAgICAgICAgdm9pZCAoKmZyZWVf c3BhY2UpIChzdHJ1Y3QgaW5vZGUgKiwgcXNpemVfdCk7CiAgICAgICAgdm9pZCAoKmZyZWVfaW5v ZGUpIChjb25zdCBzdHJ1Y3QgaW5vZGUgKiwgdW5zaWduZWQgbG9uZyk7CiAgICAgICAgaW50ICgq dHJhbnNmZXIpIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGlhdHRyICopOwp9OwoKCnN0cnVjdCBx dW90YWN0bF9vcHMgewogICAgICAgIGludCAoKnF1b3RhX29uKShzdHJ1Y3Qgc3VwZXJfYmxvY2sg KiwgaW50LCBpbnQsIGNoYXIgKik7CiAgICAgICAgaW50ICgqcXVvdGFfb2ZmKShzdHJ1Y3Qgc3Vw ZXJfYmxvY2sgKiwgaW50KTsKICAgICAgICBpbnQgKCpxdW90YV9zeW5jKShzdHJ1Y3Qgc3VwZXJf YmxvY2sgKiwgaW50KTsKICAgICAgICBpbnQgKCpnZXRfaW5mbykoc3RydWN0IHN1cGVyX2Jsb2Nr ICosIGludCwgc3RydWN0IGlmX2RxaW5mbyAqKTsKICAgICAgICBpbnQgKCpzZXRfaW5mbykoc3Ry dWN0IHN1cGVyX2Jsb2NrICosIGludCwgc3RydWN0IGlmX2RxaW5mbyAqKTsKICAgICAgICBpbnQg KCpnZXRfZHFibGspKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbnQsIHFpZF90LCBzdHJ1Y3QgaWZf ZHFibGsgKik7CiAgICAgICAgaW50ICgqc2V0X2RxYmxrKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwg aW50LCBxaWRfdCwgc3RydWN0IGlmX2RxYmxrICopOwogICAgICAgIGludCAoKmdldF94c3RhdGUp KHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3QgZnNfcXVvdGFfc3RhdCAqKTsKICAgICAgICBp bnQgKCpzZXRfeHN0YXRlKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdW5zaWduZWQgaW50LCBpbnQp OwogICAgICAgIGludCAoKmdldF94cXVvdGEpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbnQsIHFp ZF90LCBzdHJ1Y3QgZnNfZGlza19xdW90YSAqKTsKICAgICAgICBpbnQgKCpzZXRfeHF1b3RhKShz dHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgaW50LCBxaWRfdCwgc3RydWN0IGZzX2Rpc2tfcXVvdGEgKik7 Cn07CgpzdHJ1Y3QgcXVvdGFfZm9ybWF0X3R5cGUgewogICAgICAgIGludCBxZl9mbXRfaWQ7CiAg ICAgICAgc3RydWN0IHF1b3RhX2Zvcm1hdF9vcHMgKnFmX29wczsKICAgICAgICBzdHJ1Y3QgbW9k dWxlICpxZl9vd25lcjsKICAgICAgICBzdHJ1Y3QgcXVvdGFfZm9ybWF0X3R5cGUgKnFmX25leHQ7 Cn07CgoKCgpzdHJ1Y3QgcXVvdGFfaW5mbyB7CiAgICAgICAgdW5zaWduZWQgaW50IGZsYWdzOwog ICAgICAgIHN0cnVjdCBzZW1hcGhvcmUgZHFpb19zZW07CiAgICAgICAgc3RydWN0IHNlbWFwaG9y ZSBkcW9mZl9zZW07CiAgICAgICAgc3RydWN0IGZpbGUgKmZpbGVzWzJdOwogICAgICAgIHN0cnVj dCBtZW1fZHFpbmZvIGluZm9bMl07CiAgICAgICAgc3RydWN0IHF1b3RhX2Zvcm1hdF9vcHMgKm9w c1syXTsKfTsKIyAyOTggIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvcXVv dGEuaCIKc3RhdGljIGlubGluZSBpbnQgaXNfZW5hYmxlZChzdHJ1Y3QgcXVvdGFfaW5mbyAqZHFv cHQsIGludCB0eXBlKQp7CiAgICAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgICAgICAgICBj YXNlIDA6CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkcW9wdC0+ZmxhZ3MgJiAweDAx OwogICAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g ZHFvcHQtPmZsYWdzICYgMHgwMjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIDA7Cn0KCgoKCgpp bnQgcmVnaXN0ZXJfcXVvdGFfZm9ybWF0X1IyNmYyMmMwYihzdHJ1Y3QgcXVvdGFfZm9ybWF0X3R5 cGUgKmZtdCk7CnZvaWQgdW5yZWdpc3Rlcl9xdW90YV9mb3JtYXRfUjNkY2IxMjY0KHN0cnVjdCBx dW90YV9mb3JtYXRfdHlwZSAqZm10KTsKIyAzNzUgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2lu Y2x1ZGUvbGludXgvZnMuaCIgMgoKCgoKCnN0cnVjdCBwYWdlOwpzdHJ1Y3QgYWRkcmVzc19zcGFj ZTsKc3RydWN0IGtpb2J1ZjsKCnN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgewogICAg ICAgIGludCAoKndyaXRlcGFnZSkoc3RydWN0IHBhZ2UgKik7CiAgICAgICAgaW50ICgqcmVhZHBh Z2UpKHN0cnVjdCBmaWxlICosIHN0cnVjdCBwYWdlICopOwogICAgICAgIGludCAoKnN5bmNfcGFn ZSkoc3RydWN0IHBhZ2UgKik7CgoKCgogICAgICAgIGludCAoKnByZXBhcmVfd3JpdGUpKHN0cnVj dCBmaWxlICosIHN0cnVjdCBwYWdlICosIHVuc2lnbmVkLCB1bnNpZ25lZCk7CiAgICAgICAgaW50 ICgqY29tbWl0X3dyaXRlKShzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgcGFnZSAqLCB1bnNpZ25lZCwg dW5zaWduZWQpOwoKICAgICAgICBpbnQgKCpibWFwX1I4Y2MzMGY3NSkoc3RydWN0IGFkZHJlc3Nf c3BhY2UgKiwgbG9uZyk7CiAgICAgICAgaW50ICgqZmx1c2hwYWdlKSAoc3RydWN0IHBhZ2UgKiwg dW5zaWduZWQgbG9uZyk7CiAgICAgICAgaW50ICgqcmVsZWFzZXBhZ2UpIChzdHJ1Y3QgcGFnZSAq LCBpbnQpOwoKICAgICAgICBpbnQgKCpkaXJlY3RfSU8pKGludCwgc3RydWN0IGlub2RlICosIHN0 cnVjdCBraW9idWYgKiwgdW5zaWduZWQgbG9uZywgaW50KTsKICAgICAgICB2b2lkICgqcmVtb3Zl cGFnZSkoc3RydWN0IHBhZ2UgKik7Cn07CgpzdHJ1Y3QgYWRkcmVzc19zcGFjZSB7CiAgICAgICAg c3RydWN0IGxpc3RfaGVhZCBjbGVhbl9wYWdlczsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGRp cnR5X3BhZ2VzOwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgbG9ja2VkX3BhZ2VzOwogICAgICAg IHVuc2lnbmVkIGxvbmcgbnJwYWdlczsKICAgICAgICBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVy YXRpb25zICphX29wczsKICAgICAgICBzdHJ1Y3QgaW5vZGUgKmhvc3Q7CiAgICAgICAgc3RydWN0 IHZtX2FyZWFfc3RydWN0ICppX21tYXA7CiAgICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpp X21tYXBfc2hhcmVkOwogICAgICAgIHNwaW5sb2NrX3QgaV9zaGFyZWRfbG9jazsKICAgICAgICBp bnQgZ2ZwX21hc2s7Cn07CgpzdHJ1Y3QgY2hhcl9kZXZpY2UgewogICAgICAgIHN0cnVjdCBsaXN0 X2hlYWQgaGFzaDsKICAgICAgICBhdG9taWNfdCBjb3VudDsKICAgICAgICBkZXZfdCBkZXY7CiAg ICAgICAgYXRvbWljX3Qgb3BlbmVyczsKICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlIHNlbTsKfTsK CnN0cnVjdCBibG9ja19kZXZpY2UgewogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgYmRfaGFzaDsK ICAgICAgICBhdG9taWNfdCBiZF9jb3VudDsKICAgICAgICBzdHJ1Y3QgaW5vZGUgKiBiZF9pbm9k ZTsKICAgICAgICBkZXZfdCBiZF9kZXY7CiAgICAgICAgaW50IGJkX29wZW5lcnM7CiAgICAgICAg Y29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zICpiZF9vcDsKICAgICAgICBzdHJ1 Y3Qgc2VtYXBob3JlIGJkX3NlbTsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGJkX2lub2RlczsK fTsKCnN0cnVjdCBpbm9kZSB7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBpX2hhc2g7CiAgICAg ICAgc3RydWN0IGxpc3RfaGVhZCBpX2xpc3Q7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBpX2Rl bnRyeTsKCiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBpX2RpcnR5X2J1ZmZlcnM7CiAgICAgICAg c3RydWN0IGxpc3RfaGVhZCBpX2RpcnR5X2RhdGFfYnVmZmVyczsKCiAgICAgICAgdW5zaWduZWQg bG9uZyBpX2lubzsKICAgICAgICBhdG9taWNfdCBpX2NvdW50OwogICAgICAgIGtkZXZfdCBpX2Rl djsKICAgICAgICB1bW9kZV90IGlfbW9kZTsKICAgICAgICB1bnNpZ25lZCBpbnQgaV9ubGluazsK ICAgICAgICB1aWRfdCBpX3VpZDsKICAgICAgICBnaWRfdCBpX2dpZDsKICAgICAgICBrZGV2X3Qg aV9yZGV2OwogICAgICAgIGxvZmZfdCBpX3NpemU7CiAgICAgICAgdGltZV90IGlfYXRpbWU7CiAg ICAgICAgdGltZV90IGlfbXRpbWU7CiAgICAgICAgdGltZV90IGlfY3RpbWU7CiAgICAgICAgdW5z aWduZWQgaW50IGlfYmxrYml0czsKICAgICAgICB1bnNpZ25lZCBsb25nIGlfYmxrc2l6ZTsKICAg ICAgICB1bnNpZ25lZCBsb25nIGlfYmxvY2tzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgaV92ZXJz aW9uOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGlfYnl0ZXM7CiAgICAgICAgc3RydWN0IHNlbWFw aG9yZSBpX3NlbTsKICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlIGlfem9tYmllOwogICAgICAgIHN0 cnVjdCBpbm9kZV9vcGVyYXRpb25zICppX29wOwogICAgICAgIHN0cnVjdCBmaWxlX29wZXJhdGlv bnMgKmlfZm9wOwogICAgICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqaV9zYjsKICAgICAgICB3YWl0 X3F1ZXVlX2hlYWRfdCBpX3dhaXQ7CiAgICAgICAgc3RydWN0IGZpbGVfbG9jayAqaV9mbG9jazsK ICAgICAgICBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaV9tYXBwaW5nOwogICAgICAgIHN0cnVjdCBh ZGRyZXNzX3NwYWNlIGlfZGF0YTsKICAgICAgICBzdHJ1Y3QgZHF1b3QgKmlfZHF1b3RbMl07Cgog ICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgaV9kZXZpY2VzOwogICAgICAgIHN0cnVjdCBwaXBlX2lu b2RlX2luZm8gKmlfcGlwZTsKICAgICAgICBzdHJ1Y3QgYmxvY2tfZGV2aWNlICppX2JkZXY7CiAg ICAgICAgc3RydWN0IGNoYXJfZGV2aWNlICppX2NkZXY7CgogICAgICAgIHVuc2lnbmVkIGxvbmcg aV9kbm90aWZ5X21hc2s7CiAgICAgICAgc3RydWN0IGRub3RpZnlfc3RydWN0ICppX2Rub3RpZnk7 CgogICAgICAgIHVuc2lnbmVkIGxvbmcgaV9zdGF0ZTsKCiAgICAgICAgdW5zaWduZWQgaW50IGlf ZmxhZ3M7CiAgICAgICAgdW5zaWduZWQgY2hhciBpX3NvY2s7CgogICAgICAgIGF0b21pY190IGlf d3JpdGVjb3VudDsKICAgICAgICB1bnNpZ25lZCBpbnQgaV9hdHRyX2ZsYWdzOwogICAgICAgIF9f dTMyIGlfZ2VuZXJhdGlvbjsKICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICAgICBzdHJ1Y3Qg bWluaXhfaW5vZGVfaW5mbyBtaW5peF9pOwogICAgICAgICAgICAgICAgc3RydWN0IGV4dDJfaW5v ZGVfaW5mbyBleHQyX2k7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgZXh0M19pbm9kZV9pbmZvIGV4 dDNfaTsKICAgICAgICAgICAgICAgIHN0cnVjdCBocGZzX2lub2RlX2luZm8gaHBmc19pOwogICAg ICAgICAgICAgICAgc3RydWN0IG50ZnNfaW5vZGVfaW5mbyBudGZzX2k7CiAgICAgICAgICAgICAg ICBzdHJ1Y3QgbXNkb3NfaW5vZGVfaW5mbyBtc2Rvc19pOwogICAgICAgICAgICAgICAgc3RydWN0 IHVtc2Rvc19pbm9kZV9pbmZvIHVtc2Rvc19pOwogICAgICAgICAgICAgICAgc3RydWN0IGlzb19p bm9kZV9pbmZvIGlzb2ZzX2k7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgbmZzX2lub2RlX2luZm8g bmZzX2k7CiAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3lzdl9pbm9kZV9pbmZvIHN5c3ZfaTsKICAg ICAgICAgICAgICAgIHN0cnVjdCBhZmZzX2lub2RlX2luZm8gYWZmc19pOwogICAgICAgICAgICAg ICAgc3RydWN0IHVmc19pbm9kZV9pbmZvIHVmc19pOwogICAgICAgICAgICAgICAgc3RydWN0IGVm c19pbm9kZV9pbmZvIGVmc19pOwogICAgICAgICAgICAgICAgc3RydWN0IHJvbWZzX2lub2RlX2lu Zm8gcm9tZnNfaTsKICAgICAgICAgICAgICAgIHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvIHNobWVt X2k7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgY29kYV9pbm9kZV9pbmZvIGNvZGFfaTsKICAgICAg ICAgICAgICAgIHN0cnVjdCBzbWJfaW5vZGVfaW5mbyBzbWJmc19pOwogICAgICAgICAgICAgICAg c3RydWN0IGhmc19pbm9kZV9pbmZvIGhmc19pOwogICAgICAgICAgICAgICAgc3RydWN0IGFkZnNf aW5vZGVfaW5mbyBhZGZzX2k7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgcW54NF9pbm9kZV9pbmZv IHFueDRfaTsKICAgICAgICAgICAgICAgIHN0cnVjdCByZWlzZXJmc19pbm9kZV9pbmZvIHJlaXNl cmZzX2k7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgYmZzX2lub2RlX2luZm8gYmZzX2k7CiAgICAg ICAgICAgICAgICBzdHJ1Y3QgdWRmX2lub2RlX2luZm8gdWRmX2k7CiAgICAgICAgICAgICAgICBz dHJ1Y3QgbmNwX2lub2RlX2luZm8gbmNwZnNfaTsKICAgICAgICAgICAgICAgIHN0cnVjdCBwcm9j X2lub2RlX2luZm8gcHJvY19pOwogICAgICAgICAgICAgICAgc3RydWN0IHNvY2tldCBzb2NrZXRf aTsKICAgICAgICAgICAgICAgIHN0cnVjdCB1c2JkZXZfaW5vZGVfaW5mbyB1c2JkZXZfaTsKICAg ICAgICAgICAgICAgIHN0cnVjdCBqZmZzMl9pbm9kZV9pbmZvIGpmZnMyX2k7CiAgICAgICAgICAg ICAgICB2b2lkICpnZW5lcmljX2lwOwogICAgICAgIH0gdTsKfTsKCnN0YXRpYyBpbmxpbmUgdm9p ZCBpbm9kZV9hZGRfYnl0ZXMoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGJ5dGVzKQp7CiAg ICAgICAgaW5vZGUtPmlfYmxvY2tzICs9IGJ5dGVzID4+IDk7CiAgICAgICAgYnl0ZXMgJj0gNTEx OwogICAgICAgIGlub2RlLT5pX2J5dGVzICs9IGJ5dGVzOwogICAgICAgIGlmIChpbm9kZS0+aV9i eXRlcyA+PSA1MTIpIHsKICAgICAgICAgICAgICAgIGlub2RlLT5pX2Jsb2NrcysrOwogICAgICAg ICAgICAgICAgaW5vZGUtPmlfYnl0ZXMgLT0gNTEyOwogICAgICAgIH0KfQoKc3RhdGljIGlubGlu ZSB2b2lkIGlub2RlX3N1Yl9ieXRlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgYnl0ZXMp CnsKICAgICAgICBpbm9kZS0+aV9ibG9ja3MgLT0gYnl0ZXMgPj4gOTsKICAgICAgICBieXRlcyAm PSA1MTE7CiAgICAgICAgaWYgKGlub2RlLT5pX2J5dGVzIDwgYnl0ZXMpIHsKICAgICAgICAgICAg ICAgIGlub2RlLT5pX2Jsb2Nrcy0tOwogICAgICAgICAgICAgICAgaW5vZGUtPmlfYnl0ZXMgKz0g NTEyOwogICAgICAgIH0KICAgICAgICBpbm9kZS0+aV9ieXRlcyAtPSBieXRlczsKfQoKc3RhdGlj IGlubGluZSBsb2ZmX3QgaW5vZGVfZ2V0X2J5dGVzKHN0cnVjdCBpbm9kZSAqaW5vZGUpCnsKICAg ICAgICByZXR1cm4gKCgobG9mZl90KWlub2RlLT5pX2Jsb2NrcykgPDwgOSkgKyBpbm9kZS0+aV9i eXRlczsKfQoKc3RhdGljIGlubGluZSB2b2lkIGlub2RlX3NldF9ieXRlcyhzdHJ1Y3QgaW5vZGUg Kmlub2RlLCBsb2ZmX3QgYnl0ZXMpCnsKICAgICAgICBpbm9kZS0+aV9ibG9ja3MgPSBieXRlcyA+ PiA5OwogICAgICAgIGlub2RlLT5pX2J5dGVzID0gYnl0ZXMgJiA1MTE7Cn0KCnN0cnVjdCBmb3du X3N0cnVjdCB7CiAgICAgICAgaW50IHBpZDsKICAgICAgICB1aWRfdCB1aWQsIGV1aWQ7CiAgICAg ICAgaW50IHNpZ251bTsKfTsKCnN0cnVjdCBmaWxlIHsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFk IGZfbGlzdDsKICAgICAgICBzdHJ1Y3QgZGVudHJ5ICpmX2RlbnRyeTsKICAgICAgICBzdHJ1Y3Qg dmZzbW91bnQgKmZfdmZzbW50OwogICAgICAgIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZfb3A7 CiAgICAgICAgYXRvbWljX3QgZl9jb3VudDsKICAgICAgICB1bnNpZ25lZCBpbnQgZl9mbGFnczsK ICAgICAgICBtb2RlX3QgZl9tb2RlOwogICAgICAgIGxvZmZfdCBmX3BvczsKICAgICAgICB1bnNp Z25lZCBsb25nIGZfcmVhZGEsIGZfcmFtYXgsIGZfcmFlbmQsIGZfcmFsZW4sIGZfcmF3aW47CiAg ICAgICAgc3RydWN0IGZvd25fc3RydWN0IGZfb3duZXI7CiAgICAgICAgdW5zaWduZWQgaW50IGZf dWlkLCBmX2dpZDsKICAgICAgICBpbnQgZl9lcnJvcjsKCiAgICAgICAgdW5zaWduZWQgbG9uZyBm X3ZlcnNpb247CgoKICAgICAgICB2b2lkICpwcml2YXRlX2RhdGE7CgoKICAgICAgICBzdHJ1Y3Qg a2lvYnVmICpmX2lvYnVmOwogICAgICAgIGxvbmcgZl9pb2J1Zl9sb2NrOwp9OwpleHRlcm4gc3Bp bmxvY2tfdCBmaWxlc19sb2NrX1JmOWVmYjE2YTsKCgoKCgoKZXh0ZXJuIGludCBpbml0X3ByaXZh dGVfZmlsZV9SYjQxZDFiZWQoc3RydWN0IGZpbGUgKiwgc3RydWN0IGRlbnRyeSAqLCBpbnQpOwoj IDYxNSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9mcy5oIgp0eXBlZGVm IHN0cnVjdCBmaWxlc19zdHJ1Y3QgKmZsX293bmVyX3Q7CgpzdHJ1Y3QgZmlsZV9sb2NrIHsKICAg ICAgICBzdHJ1Y3QgZmlsZV9sb2NrICpmbF9uZXh0OwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQg ZmxfbGluazsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGZsX2Jsb2NrOwogICAgICAgIGZsX293 bmVyX3QgZmxfb3duZXI7CiAgICAgICAgdW5zaWduZWQgaW50IGZsX3BpZDsKICAgICAgICB3YWl0 X3F1ZXVlX2hlYWRfdCBmbF93YWl0OwogICAgICAgIHN0cnVjdCBmaWxlICpmbF9maWxlOwogICAg ICAgIHVuc2lnbmVkIGNoYXIgZmxfZmxhZ3M7CiAgICAgICAgdW5zaWduZWQgY2hhciBmbF90eXBl OwogICAgICAgIGxvZmZfdCBmbF9zdGFydDsKICAgICAgICBsb2ZmX3QgZmxfZW5kOwoKICAgICAg ICB2b2lkICgqZmxfbm90aWZ5KShzdHJ1Y3QgZmlsZV9sb2NrICopOwogICAgICAgIHZvaWQgKCpm bF9pbnNlcnQpKHN0cnVjdCBmaWxlX2xvY2sgKik7CiAgICAgICAgdm9pZCAoKmZsX3JlbW92ZSko c3RydWN0IGZpbGVfbG9jayAqKTsKCiAgICAgICAgc3RydWN0IGZhc3luY19zdHJ1Y3QgKiBmbF9m YXN5bmM7CiAgICAgICAgdW5zaWduZWQgbG9uZyBmbF9icmVha190aW1lOwoKICAgICAgICB1bmlv biB7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgbmZzX2xvY2tfaW5mbyBuZnNfZmw7CiAgICAgICAg fSBmbF91Owp9OwojIDY0OSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9m cy5oIgpleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBmaWxlX2xvY2tfbGlzdF9SNmU4NTExOWQ7Cgoj IDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvZmNudGwuaCIgMQoKCgoj IDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvYXNtL2ZjbnRsLmgiIDEKIyA3MCAi L3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9hc20vZmNudGwuaCIKc3RydWN0IGZsb2Nr IHsKICAgICAgICBzaG9ydCBsX3R5cGU7CiAgICAgICAgc2hvcnQgbF93aGVuY2U7CiAgICAgICAg b2ZmX3QgbF9zdGFydDsKICAgICAgICBvZmZfdCBsX2xlbjsKICAgICAgICBwaWRfdCBsX3BpZDsK fTsKCnN0cnVjdCBmbG9jazY0IHsKICAgICAgICBzaG9ydCBsX3R5cGU7CiAgICAgICAgc2hvcnQg bF93aGVuY2U7CiAgICAgICAgbG9mZl90IGxfc3RhcnQ7CiAgICAgICAgbG9mZl90IGxfbGVuOwog ICAgICAgIHBpZF90IGxfcGlkOwp9OwojIDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1 ZGUvbGludXgvZmNudGwuaCIgMgojIDY1MiAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVk ZS9saW51eC9mcy5oIiAyCgpleHRlcm4gaW50IGZjbnRsX2dldGxrKHVuc2lnbmVkIGludCwgc3Ry dWN0IGZsb2NrICopOwpleHRlcm4gaW50IGZjbnRsX3NldGxrKHVuc2lnbmVkIGludCwgdW5zaWdu ZWQgaW50LCBzdHJ1Y3QgZmxvY2sgKik7CmV4dGVybiBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDAp KSkgbG9uZyBzeXNfZmNudGxfUmM5NDQ2MzFmKHVuc2lnbmVkIGludCBmZCwgdW5zaWduZWQgaW50 IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwpleHRlcm4gX19hdHRyaWJ1dGVfXygocmVncGFybSgw KSkpIGxvbmcgc3lzX2R1cF9SNzNkYTNlOWEodW5zaWduZWQgaW50IGZpbGRlcyk7CmV4dGVybiBf X2F0dHJpYnV0ZV9fKChyZWdwYXJtKDApKSkgbG9uZyBzeXNfZHVwMih1bnNpZ25lZCBpbnQgb2xk ZmQsIHVuc2lnbmVkIGludCBuZXdmZCk7CmV4dGVybiBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDAp KSkgc3NpemVfdCBzeXNfcmVhZF9SMTZiZDM5NDgodW5zaWduZWQgaW50IGZkLCBjaGFyICogYnVm LCBzaXplX3QgY291bnQpOwpleHRlcm4gX19hdHRyaWJ1dGVfXygocmVncGFybSgwKSkpIHNzaXpl X3Qgc3lzX3dyaXRlX1JkYzJkZjBhMCh1bnNpZ25lZCBpbnQgZmQsIGNvbnN0IGNoYXIgKiBidWYs IHNpemVfdCBjb3VudCk7CmV4dGVybiBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDApKSkgbG9uZyBz eXNfY2hyb290X1IwNjViNDRlOChjb25zdCBjaGFyICogZmlsZW5hbWUpOwpleHRlcm4gX19hdHRy aWJ1dGVfXygocmVncGFybSgwKSkpIGxvbmcgc3lzX2NoZGlyX1JmMDUzZTdhZihjb25zdCBjaGFy ICogZmlsZW5hbWUpOwoKCmV4dGVybiBpbnQgZmNudGxfZ2V0bGs2NCh1bnNpZ25lZCBpbnQsIHN0 cnVjdCBmbG9jazY0ICopOwpleHRlcm4gaW50IGZjbnRsX3NldGxrNjQodW5zaWduZWQgaW50LCB1 bnNpZ25lZCBpbnQsIHN0cnVjdCBmbG9jazY0ICopOwoKCmV4dGVybiB2b2lkIGxvY2tzX2luaXRf bG9ja19SZGM4ZWMxYTIoc3RydWN0IGZpbGVfbG9jayAqKTsKZXh0ZXJuIHZvaWQgbG9ja3NfY29w eV9sb2NrX1JmNWMyMjdmZihzdHJ1Y3QgZmlsZV9sb2NrICosIHN0cnVjdCBmaWxlX2xvY2sgKik7 CmV4dGVybiB2b2lkIGxvY2tzX3JlbW92ZV9wb3NpeChzdHJ1Y3QgZmlsZSAqLCBmbF9vd25lcl90 KTsKZXh0ZXJuIHZvaWQgbG9ja3NfcmVtb3ZlX2Zsb2NrKHN0cnVjdCBmaWxlICopOwpleHRlcm4g c3RydWN0IGZpbGVfbG9jayAqcG9zaXhfdGVzdF9sb2NrX1IxOTExZjYxZShzdHJ1Y3QgZmlsZSAq LCBzdHJ1Y3QgZmlsZV9sb2NrICopOwpleHRlcm4gaW50IHBvc2l4X2xvY2tfZmlsZV9SMDE0Nzlk ZDIoc3RydWN0IGZpbGUgKiwgc3RydWN0IGZpbGVfbG9jayAqLCB1bnNpZ25lZCBpbnQpOwpleHRl cm4gdm9pZCBwb3NpeF9ibG9ja19sb2NrX1I2MzQ3NTViMShzdHJ1Y3QgZmlsZV9sb2NrICosIHN0 cnVjdCBmaWxlX2xvY2sgKik7CmV4dGVybiB2b2lkIHBvc2l4X3VuYmxvY2tfbG9ja19SMDQzMzdk M2Eoc3RydWN0IGZpbGVfbG9jayAqKTsKZXh0ZXJuIGludCBwb3NpeF9sb2Nrc19kZWFkbG9ja19S NmJjZjFjYjkoc3RydWN0IGZpbGVfbG9jayAqLCBzdHJ1Y3QgZmlsZV9sb2NrICopOwpleHRlcm4g aW50IF9fZ2V0X2xlYXNlX1I0YWQ0NDI5MihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBp bnQgZmxhZ3MpOwpleHRlcm4gdGltZV90IGxlYXNlX2dldF9tdGltZV9SMDE2ZmQ4Yjkoc3RydWN0 IGlub2RlICopOwpleHRlcm4gaW50IGxvY2tfbWF5X3JlYWRfUmY2NTRiNmQzKHN0cnVjdCBpbm9k ZSAqLCBsb2ZmX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgY291bnQpOwpleHRlcm4gaW50IGxvY2tf bWF5X3dyaXRlX1JjMjRjZTViZChzdHJ1Y3QgaW5vZGUgKiwgbG9mZl90IHN0YXJ0LCB1bnNpZ25l ZCBsb25nIGNvdW50KTsKCnN0cnVjdCBmYXN5bmNfc3RydWN0IHsKICAgICAgICBpbnQgbWFnaWM7 CiAgICAgICAgaW50IGZhX2ZkOwogICAgICAgIHN0cnVjdCBmYXN5bmNfc3RydWN0ICpmYV9uZXh0 OwogICAgICAgIHN0cnVjdCBmaWxlICpmYV9maWxlOwp9OwoKCgoKZXh0ZXJuIGludCBmYXN5bmNf aGVscGVyX1I1MzE2M2JiNyhpbnQsIHN0cnVjdCBmaWxlICosIGludCwgc3RydWN0IGZhc3luY19z dHJ1Y3QgKiopOwoKZXh0ZXJuIHZvaWQga2lsbF9mYXN5bmNfUjIzODNjZDhhKHN0cnVjdCBmYXN5 bmNfc3RydWN0ICoqLCBpbnQsIGludCk7CgpleHRlcm4gdm9pZCBfX2tpbGxfZmFzeW5jX1IzNmQ3 MGE3ZChzdHJ1Y3QgZmFzeW5jX3N0cnVjdCAqLCBpbnQsIGludCk7CgpzdHJ1Y3QgbmFtZWlkYXRh IHsKICAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CiAgICAgICAgc3RydWN0IHZmc21vdW50 ICptbnQ7CiAgICAgICAgc3RydWN0IHFzdHIgbGFzdDsKICAgICAgICB1bnNpZ25lZCBpbnQgZmxh Z3M7CiAgICAgICAgaW50IGxhc3RfdHlwZTsKfTsKIyA3MTMgIi91c3Ivc3JjL2xpbnV4LTIuNC4y MC04L2luY2x1ZGUvbGludXgvZnMuaCIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNs dWRlL2xpbnV4L21pbml4X2ZzX3NiLmgiIDEKCgoKCgoKc3RydWN0IG1pbml4X3NiX2luZm8gewog ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHNfbmlub2RlczsKICAgICAgICAg ICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBzX256b25lczsKICAgICAgICAgICAgICAgICAg ICAgICAgdW5zaWduZWQgbG9uZyBzX2ltYXBfYmxvY2tzOwogICAgICAgICAgICAgICAgICAgICAg ICB1bnNpZ25lZCBsb25nIHNfem1hcF9ibG9ja3M7CiAgICAgICAgICAgICAgICAgICAgICAgIHVu c2lnbmVkIGxvbmcgc19maXJzdGRhdGF6b25lOwogICAgICAgICAgICAgICAgICAgICAgICB1bnNp Z25lZCBsb25nIHNfbG9nX3pvbmVfc2l6ZTsKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu ZWQgbG9uZyBzX21heF9zaXplOwogICAgICAgICAgICAgICAgICAgICAgICBpbnQgc19kaXJzaXpl OwogICAgICAgICAgICAgICAgICAgICAgICBpbnQgc19uYW1lbGVuOwogICAgICAgICAgICAgICAg ICAgICAgICBpbnQgc19saW5rX21heDsKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGJ1 ZmZlcl9oZWFkICoqIHNfaW1hcDsKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGJ1ZmZl cl9oZWFkICoqIHNfem1hcDsKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGJ1ZmZlcl9o ZWFkICogc19zYmg7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtaW5peF9zdXBlcl9i bG9jayAqIHNfbXM7CiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHNfbW91 bnRfc3RhdGU7CiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHNfdmVyc2lv bjsKfTsKIyA3MTQgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvZnMuaCIg MgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvZXh0Ml9mc19zYi5o IiAxCiMgMzAgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvZXh0Ml9mc19z Yi5oIgpzdHJ1Y3QgZXh0Ml9zYl9pbmZvIHsKICAgICAgICB1bnNpZ25lZCBsb25nIHNfZnJhZ19z aXplOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc19mcmFnc19wZXJfYmxvY2s7CiAgICAgICAgdW5z aWduZWQgbG9uZyBzX2lub2Rlc19wZXJfYmxvY2s7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzX2Zy YWdzX3Blcl9ncm91cDsKICAgICAgICB1bnNpZ25lZCBsb25nIHNfYmxvY2tzX3Blcl9ncm91cDsK ICAgICAgICB1bnNpZ25lZCBsb25nIHNfaW5vZGVzX3Blcl9ncm91cDsKICAgICAgICB1bnNpZ25l ZCBsb25nIHNfaXRiX3Blcl9ncm91cDsKICAgICAgICB1bnNpZ25lZCBsb25nIHNfZ2RiX2NvdW50 OwogICAgICAgIHVuc2lnbmVkIGxvbmcgc19kZXNjX3Blcl9ibG9jazsKICAgICAgICB1bnNpZ25l ZCBsb25nIHNfZ3JvdXBzX2NvdW50OwogICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqIHNfc2Jo OwogICAgICAgIHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICogc19lczsKICAgICAgICBzdHJ1Y3Qg YnVmZmVyX2hlYWQgKiogc19ncm91cF9kZXNjOwogICAgICAgIHVuc2lnbmVkIHNob3J0IHNfbG9h ZGVkX2lub2RlX2JpdG1hcHM7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc19sb2FkZWRfYmxvY2tf Yml0bWFwczsKICAgICAgICB1bnNpZ25lZCBsb25nIHNfaW5vZGVfYml0bWFwX251bWJlclszMl07 CiAgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICogc19pbm9kZV9iaXRtYXBbMzJdOwogICAgICAg IHVuc2lnbmVkIGxvbmcgc19ibG9ja19iaXRtYXBfbnVtYmVyWzMyXTsKICAgICAgICBzdHJ1Y3Qg YnVmZmVyX2hlYWQgKiBzX2Jsb2NrX2JpdG1hcFszMl07CiAgICAgICAgdW5zaWduZWQgbG9uZyBz X21vdW50X29wdDsKICAgICAgICB1aWRfdCBzX3Jlc3VpZDsKICAgICAgICBnaWRfdCBzX3Jlc2dp ZDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzX21vdW50X3N0YXRlOwogICAgICAgIHVuc2lnbmVk IHNob3J0IHNfcGFkOwogICAgICAgIGludCBzX2FkZHJfcGVyX2Jsb2NrX2JpdHM7CiAgICAgICAg aW50IHNfZGVzY19wZXJfYmxvY2tfYml0czsKICAgICAgICBpbnQgc19pbm9kZV9zaXplOwogICAg ICAgIGludCBzX2ZpcnN0X2lubzsKfTsKIyA3MTUgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2lu Y2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUv bGludXgvZXh0M19mc19zYi5oIiAxCiMgMjAgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1 ZGUvbGludXgvZXh0M19mc19zYi5oIgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1 ZGUvbGludXgvdGltZXIuaCIgMQojIDE2ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRl L2xpbnV4L3RpbWVyLmgiCnN0cnVjdCB0aW1lcl9saXN0IHsKICAgICAgICBzdHJ1Y3QgbGlzdF9o ZWFkIGxpc3Q7CiAgICAgICAgdW5zaWduZWQgbG9uZyBleHBpcmVzOwogICAgICAgIHVuc2lnbmVk IGxvbmcgZGF0YTsKICAgICAgICB2b2lkICgqZnVuY3Rpb24pKHVuc2lnbmVkIGxvbmcpOwp9OwoK ZXh0ZXJuIHZvaWQgYWRkX3RpbWVyX1JhMTllYWNmOChzdHJ1Y3QgdGltZXJfbGlzdCAqIHRpbWVy KTsKZXh0ZXJuIGludCBkZWxfdGltZXJfUmZjNjJmMTZkKHN0cnVjdCB0aW1lcl9saXN0ICogdGlt ZXIpOwojIDQxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3RpbWVyLmgi CmludCBtb2RfdGltZXJfUjFmMTNkMzA5KHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwgdW5zaWdu ZWQgbG9uZyBleHBpcmVzKTsKCmV4dGVybiB2b2lkIGl0X3JlYWxfZm4odW5zaWduZWQgbG9uZyk7 CgpzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqIHRpbWVy KQp7CiAgICAgICAgdGltZXItPmxpc3QubmV4dCA9IHRpbWVyLT5saXN0LnByZXYgPSAoKHZvaWQg KikwKTsKfQoKc3RhdGljIGlubGluZSBpbnQgdGltZXJfcGVuZGluZyAoY29uc3Qgc3RydWN0IHRp bWVyX2xpc3QgKiB0aW1lcikKewogICAgICAgIHJldHVybiB0aW1lci0+bGlzdC5uZXh0ICE9ICgo dm9pZCAqKTApOwp9CiMgMjEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgv ZXh0M19mc19zYi5oIiAyCiMgMzUgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGlu dXgvZXh0M19mc19zYi5oIgpzdHJ1Y3QgZXh0M19zYl9pbmZvIHsKICAgICAgICB1bnNpZ25lZCBs b25nIHNfZnJhZ19zaXplOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc19mcmFnc19wZXJfYmxvY2s7 CiAgICAgICAgdW5zaWduZWQgbG9uZyBzX2lub2Rlc19wZXJfYmxvY2s7CiAgICAgICAgdW5zaWdu ZWQgbG9uZyBzX2ZyYWdzX3Blcl9ncm91cDsKICAgICAgICB1bnNpZ25lZCBsb25nIHNfYmxvY2tz X3Blcl9ncm91cDsKICAgICAgICB1bnNpZ25lZCBsb25nIHNfaW5vZGVzX3Blcl9ncm91cDsKICAg ICAgICB1bnNpZ25lZCBsb25nIHNfaXRiX3Blcl9ncm91cDsKICAgICAgICB1bnNpZ25lZCBsb25n IHNfZ2RiX2NvdW50OwogICAgICAgIHVuc2lnbmVkIGxvbmcgc19kZXNjX3Blcl9ibG9jazsKICAg ICAgICB1bnNpZ25lZCBsb25nIHNfZ3JvdXBzX2NvdW50OwogICAgICAgIHN0cnVjdCBidWZmZXJf aGVhZCAqIHNfc2JoOwogICAgICAgIHN0cnVjdCBleHQzX3N1cGVyX2Jsb2NrICogc19lczsKICAg ICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiogc19ncm91cF9kZXNjOwogICAgICAgIHVuc2lnbmVk IHNob3J0IHNfbG9hZGVkX2lub2RlX2JpdG1hcHM7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc19s b2FkZWRfYmxvY2tfYml0bWFwczsKICAgICAgICB1bnNpZ25lZCBsb25nIHNfaW5vZGVfYml0bWFw X251bWJlclszMl07CiAgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICogc19pbm9kZV9iaXRtYXBb MzJdOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc19ibG9ja19iaXRtYXBfbnVtYmVyWzMyXTsKICAg ICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBzX2Jsb2NrX2JpdG1hcFszMl07CiAgICAgICAgdW5z aWduZWQgbG9uZyBzX21vdW50X29wdDsKICAgICAgICB1aWRfdCBzX3Jlc3VpZDsKICAgICAgICBn aWRfdCBzX3Jlc2dpZDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzX21vdW50X3N0YXRlOwogICAg ICAgIHVuc2lnbmVkIHNob3J0IHNfcGFkOwogICAgICAgIGludCBzX2FkZHJfcGVyX2Jsb2NrX2Jp dHM7CiAgICAgICAgaW50IHNfZGVzY19wZXJfYmxvY2tfYml0czsKICAgICAgICBpbnQgc19pbm9k ZV9zaXplOwogICAgICAgIGludCBzX2ZpcnN0X2lubzsKICAgICAgICB1MzIgc19uZXh0X2dlbmVy YXRpb247CgoKICAgICAgICBzdHJ1Y3QgaW5vZGUgKiBzX2pvdXJuYWxfaW5vZGU7CiAgICAgICAg c3RydWN0IGpvdXJuYWxfcyAqIHNfam91cm5hbDsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIHNf b3JwaGFuOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc19jb21taXRfaW50ZXJ2YWw7CiAgICAgICAg c3RydWN0IGJsb2NrX2RldmljZSAqam91cm5hbF9iZGV2OwoKCgoKfTsKIyA3MTYgIi91c3Ivc3Jj L2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4 LTIuNC4yMC04L2luY2x1ZGUvbGludXgvaHBmc19mc19zYi5oIiAxCgoKCnN0cnVjdCBocGZzX3Ni X2luZm8gewogICAgICAgIGlub190IHNiX3Jvb3Q7CiAgICAgICAgdW5zaWduZWQgc2JfZnNfc2l6 ZTsKICAgICAgICB1bnNpZ25lZCBzYl9iaXRtYXBzOwogICAgICAgIHVuc2lnbmVkIHNiX2RpcmJh bmRfc3RhcnQ7CiAgICAgICAgdW5zaWduZWQgc2JfZGlyYmFuZF9zaXplOwogICAgICAgIHVuc2ln bmVkIHNiX2RtYXA7CiAgICAgICAgdW5zaWduZWQgc2Jfbl9mcmVlOwogICAgICAgIHVuc2lnbmVk IHNiX25fZnJlZV9kbm9kZXM7CiAgICAgICAgdWlkX3Qgc2JfdWlkOwogICAgICAgIGdpZF90IHNi X2dpZDsKICAgICAgICB1bW9kZV90IHNiX21vZGU7CiAgICAgICAgdW5zaWduZWQgc2JfY29udiA6 IDI7CiAgICAgICAgdW5zaWduZWQgc2JfZWFzIDogMjsKICAgICAgICB1bnNpZ25lZCBzYl9lcnIg OiAyOwogICAgICAgIHVuc2lnbmVkIHNiX2NoayA6IDI7CiAgICAgICAgdW5zaWduZWQgc2JfbG93 ZXJjYXNlIDogMTsKICAgICAgICB1bnNpZ25lZCBzYl93YXNfZXJyb3IgOiAxOwogICAgICAgIHVu c2lnbmVkIHNiX2Noa2RzayA6IDI7CiAgICAgICAgdW5zaWduZWQgc2JfcmRfZm5vZGUgOiAyOwog ICAgICAgIHVuc2lnbmVkIHNiX3JkX2lub2RlIDogMjsKCgogICAgICAgIHdhaXRfcXVldWVfaGVh ZF90IHNiX2lnZXRfcTsKICAgICAgICB1bnNpZ25lZCBjaGFyICpzYl9jcF90YWJsZTsKCgogICAg ICAgIHVuc2lnbmVkICpzYl9ibXBfZGlyOwogICAgICAgIHVuc2lnbmVkIHNiX2NfYml0bWFwOwog ICAgICAgIHdhaXRfcXVldWVfaGVhZF90IHNiX2NyZWF0aW9uX2RlOwoKICAgICAgICB1bnNpZ25l ZCBzYl9jcmVhdGlvbl9kZV9sb2NrIDogMTsKCiAgICAgICAgaW50IHNiX3RpbWVzaGlmdDsKfTsK IyA3MTcgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbnRmc19mc19zYi5oIiAxCgoK CgoKc3RydWN0IG50ZnNfc2JfaW5mb3sKCiAgICAgICAgbnRmc191aWRfdCB1aWQ7CiAgICAgICAg bnRmc19naWRfdCBnaWQ7CiAgICAgICAgbnRtb2RlX3QgdW1hc2s7CiAgICAgICAgdm9pZCAqbmxz X21hcDsKICAgICAgICB1bnNpZ25lZCBpbnQgbmd0OwogICAgICAgIGNoYXIgbWZ0X3pvbmVfbXVs dGlwbGllcjsKICAgICAgICB1bnNpZ25lZCBsb25nIG1mdF9kYXRhX3BvczsKICAgICAgICBudGZz X2NsdXN0ZXJfdCBtZnRfem9uZV9wb3M7CiAgICAgICAgbnRmc19jbHVzdGVyX3QgbWZ0X3pvbmVf c3RhcnQ7CiAgICAgICAgbnRmc19jbHVzdGVyX3QgbWZ0X3pvbmVfZW5kOwogICAgICAgIG50ZnNf Y2x1c3Rlcl90IGRhdGExX3pvbmVfcG9zOwogICAgICAgIG50ZnNfY2x1c3Rlcl90IGRhdGEyX3pv bmVfcG9zOwoKCiAgICAgICAgbnRmc19zaXplX3QgcGFydGl0aW9uX2JpYXM7CgogICAgICAgIG50 ZnNfdTMyIGF0X3N0YW5kYXJkX2luZm9ybWF0aW9uOwogICAgICAgIG50ZnNfdTMyIGF0X2F0dHJp YnV0ZV9saXN0OwogICAgICAgIG50ZnNfdTMyIGF0X2ZpbGVfbmFtZTsKICAgICAgICBudGZzX3Uz MiBhdF92b2x1bWVfdmVyc2lvbjsKICAgICAgICBudGZzX3UzMiBhdF9zZWN1cml0eV9kZXNjcmlw dG9yOwogICAgICAgIG50ZnNfdTMyIGF0X3ZvbHVtZV9uYW1lOwogICAgICAgIG50ZnNfdTMyIGF0 X3ZvbHVtZV9pbmZvcm1hdGlvbjsKICAgICAgICBudGZzX3UzMiBhdF9kYXRhOwogICAgICAgIG50 ZnNfdTMyIGF0X2luZGV4X3Jvb3Q7CiAgICAgICAgbnRmc191MzIgYXRfaW5kZXhfYWxsb2NhdGlv bjsKICAgICAgICBudGZzX3UzMiBhdF9iaXRtYXA7CiAgICAgICAgbnRmc191MzIgYXRfc3ltbGlu azsKCiAgICAgICAgaW50IHNlY3Rvcl9zaXplOwogICAgICAgIGludCBjbHVzdGVyX3NpemU7CiAg ICAgICAgaW50IGNsdXN0ZXJfc2l6ZV9iaXRzOwogICAgICAgIGludCBtZnRfY2x1c3RlcnNfcGVy X3JlY29yZDsKICAgICAgICBpbnQgbWZ0X3JlY29yZF9zaXplOwogICAgICAgIGludCBtZnRfcmVj b3JkX3NpemVfYml0czsKICAgICAgICBpbnQgaW5kZXhfY2x1c3RlcnNfcGVyX3JlY29yZDsKICAg ICAgICBpbnQgaW5kZXhfcmVjb3JkX3NpemU7CiAgICAgICAgaW50IGluZGV4X3JlY29yZF9zaXpl X2JpdHM7CiAgICAgICAgbnRmc19jbHVzdGVyX3QgbnJfY2x1c3RlcnM7CiAgICAgICAgbnRmc19j bHVzdGVyX3QgbWZ0X2xjbjsKICAgICAgICBudGZzX2NsdXN0ZXJfdCBtZnRfbWlycl9sY247Cgog ICAgICAgIHVuc2lnbmVkIGNoYXIgKm1mdDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCAqdXBjYXNl OwogICAgICAgIHVuc2lnbmVkIGludCB1cGNhc2VfbGVuZ3RoOwoKICAgICAgICBzdHJ1Y3QgbnRm c19pbm9kZV9pbmZvICptZnRfaW5vOwogICAgICAgIHN0cnVjdCBudGZzX2lub2RlX2luZm8gKm1m dG1pcnI7CiAgICAgICAgc3RydWN0IG50ZnNfaW5vZGVfaW5mbyAqYml0bWFwOwogICAgICAgIHN0 cnVjdCBzdXBlcl9ibG9jayAqc2I7CiAgICAgICAgdW5zaWduZWQgY2hhciBpbm9fZmxhZ3M7Cn07 CiMgNzE4ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAx ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21zZG9zX2ZzX3NiLmgiIDEK CgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvZmF0X2N2Zi5oIiAx CgoKCgoKc3RydWN0IGN2Zl9mb3JtYXQKeyBpbnQgY3ZmX3ZlcnNpb247CiAgY2hhciogY3ZmX3Zl cnNpb25fdGV4dDsKICB1bnNpZ25lZCBsb25nIGZsYWdzOwogIGludCAoKmRldGVjdF9jdmYpIChz dHJ1Y3Qgc3VwZXJfYmxvY2sqc2IpOwogIGludCAoKm1vdW50X2N2ZikgKHN0cnVjdCBzdXBlcl9i bG9jaypzYixjaGFyKm9wdGlvbnMpOwogIGludCAoKnVubW91bnRfY3ZmKSAoc3RydWN0IHN1cGVy X2Jsb2NrKnNiKTsKICBzdHJ1Y3QgYnVmZmVyX2hlYWQqICgqY3ZmX2JyZWFkKSAoc3RydWN0IHN1 cGVyX2Jsb2NrKnNiLGludCBibG9jayk7CiAgc3RydWN0IGJ1ZmZlcl9oZWFkKiAoKmN2Zl9nZXRi bGspIChzdHJ1Y3Qgc3VwZXJfYmxvY2sqc2IsaW50IGJsb2NrKTsKICB2b2lkICgqY3ZmX2JyZWxz ZSkgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2Isc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCk7CiAgdm9p ZCAoKmN2Zl9tYXJrX2J1ZmZlcl9kaXJ0eSkgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpOwogIHZvaWQg KCpjdmZfc2V0X3VwdG9kYXRlKSAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsCiAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgdmFsKTsKICBpbnQgKCpjdmZfaXNfdXB0b2RhdGUpIChzdHJ1Y3Qgc3VwZXJfYmxv Y2sgKnNiLHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpOwogIHZvaWQgKCpjdmZfbGxfcndfYmxvY2sp IChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogICAgICAgICAgICAgICAgICAgICAgICBpbnQgb3By LAogICAgICAgICAgICAgICAgICAgICAgICBpbnQgbmJyZXEsCiAgICAgICAgICAgICAgICAgICAg ICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhbMzJdKTsKICBpbnQgKCpmYXRfYWNjZXNzKSAoc3Ry dWN0IHN1cGVyX2Jsb2NrICpzYixpbnQgbnIsaW50IG5ld192YWx1ZSk7CiAgaW50ICgqY3ZmX3N0 YXRmcykgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2Isc3RydWN0IHN0YXRmcyAqYnVmLCBpbnQgYnVm c2l6KTsKICBpbnQgKCpjdmZfYm1hcCkgKHN0cnVjdCBpbm9kZSAqaW5vZGUsaW50IGJsb2NrKTsK ICBzc2l6ZV90ICgqY3ZmX2ZpbGVfcmVhZCkgKCBzdHJ1Y3QgZmlsZSAqLCBjaGFyICosIHNpemVf dCwgbG9mZl90ICopOwogIHNzaXplX3QgKCpjdmZfZmlsZV93cml0ZSkgKCBzdHJ1Y3QgZmlsZSAq LCBjb25zdCBjaGFyICosIHNpemVfdCwgbG9mZl90ICopOwogIGludCAoKmN2Zl9tbWFwKSAoc3Ry dWN0IGZpbGUgKiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICopOwogIGludCAoKmN2Zl9yZWFkcGFn ZSkgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgcGFnZSAqKTsKICBpbnQgKCpjdmZfd3JpdGVwYWdl KSAoc3RydWN0IGlub2RlICosIHN0cnVjdCBwYWdlICopOwogIGludCAoKmN2Zl9kaXJfaW9jdGwp IChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxwLAogICAgICAgICAgICAg ICAgICAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiAgdm9pZCAo Knplcm9fb3V0X2NsdXN0ZXIpIChzdHJ1Y3QgaW5vZGUqLCBpbnQgY2x1c3Rlcm5yKTsKfTsKCmlu dCByZWdpc3Rlcl9jdmZfZm9ybWF0X1JiYWYzZDk2MShzdHJ1Y3QgY3ZmX2Zvcm1hdCpjdmZfZm9y bWF0KTsKaW50IHVucmVnaXN0ZXJfY3ZmX2Zvcm1hdF9SZmM0ZDBhYTUoc3RydWN0IGN2Zl9mb3Jt YXQqY3ZmX2Zvcm1hdCk7CnZvaWQgZGVjX2N2Zl9mb3JtYXRfdXNlX2NvdW50X2J5X3ZlcnNpb24o aW50IHZlcnNpb24pOwppbnQgZGV0ZWN0X2N2ZihzdHJ1Y3Qgc3VwZXJfYmxvY2sqc2IsY2hhcipm b3JjZSk7CgpleHRlcm4gc3RydWN0IGN2Zl9mb3JtYXQgKmN2Zl9mb3JtYXRzW107CmV4dGVybiBp bnQgY3ZmX2Zvcm1hdF91c2VfY291bnRbXTsKIyA0ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9p bmNsdWRlL2xpbnV4L21zZG9zX2ZzX3NiLmgiIDIKCgoKCgpzdHJ1Y3QgZmF0X21vdW50X29wdGlv bnMgewogICAgICAgIHVpZF90IGZzX3VpZDsKICAgICAgICBnaWRfdCBmc19naWQ7CiAgICAgICAg dW5zaWduZWQgc2hvcnQgZnNfdW1hc2s7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgY29kZXBhZ2U7 CiAgICAgICAgY2hhciAqaW9jaGFyc2V0OwogICAgICAgIHVuc2lnbmVkIHNob3J0IHNob3J0bmFt ZTsKICAgICAgICB1bnNpZ25lZCBjaGFyIG5hbWVfY2hlY2s7CiAgICAgICAgdW5zaWduZWQgY2hh ciBjb252ZXJzaW9uOwogICAgICAgIHVuc2lnbmVkIHF1aWV0OjEsCiAgICAgICAgICAgICAgICAg c2hvd2V4ZWM6MSwKICAgICAgICAgICAgICAgICBzeXNfaW1tdXRhYmxlOjEsCiAgICAgICAgICAg ICAgICAgZG90c09LOjEsCiAgICAgICAgICAgICAgICAgaXN2ZmF0OjEsCiAgICAgICAgICAgICAg ICAgdXRmODoxLAogICAgICAgICAgICAgICAgIHVuaWNvZGVfeGxhdGU6MSwKICAgICAgICAgICAg ICAgICBwb3NpeGZzOjEsCiAgICAgICAgICAgICAgICAgbnVtdGFpbDoxLAogICAgICAgICAgICAg ICAgIGF0YXJpOjEsCiAgICAgICAgICAgICAgICAgZmF0MzI6MSwKICAgICAgICAgICAgICAgICBu b2Nhc2U6MTsKfTsKCnN0cnVjdCBtc2Rvc19zYl9pbmZvIHsKICAgICAgICB1bnNpZ25lZCBzaG9y dCBjbHVzdGVyX3NpemU7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgY2x1c3Rlcl9iaXRzOwogICAg ICAgIHVuc2lnbmVkIGNoYXIgZmF0cyxmYXRfYml0czsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBm YXRfc3RhcnQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyBmYXRfbGVuZ3RoOwogICAgICAgIHVuc2ln bmVkIGxvbmcgZGlyX3N0YXJ0OwogICAgICAgIHVuc2lnbmVkIHNob3J0IGRpcl9lbnRyaWVzOwog ICAgICAgIHVuc2lnbmVkIGxvbmcgZGF0YV9zdGFydDsKICAgICAgICB1bnNpZ25lZCBsb25nIGNs dXN0ZXJzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgcm9vdF9jbHVzdGVyOwogICAgICAgIHVuc2ln bmVkIGxvbmcgZnNpbmZvX3NlY3RvcjsKICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlIGZhdF9sb2Nr OwogICAgICAgIGludCBwcmV2X2ZyZWU7CiAgICAgICAgaW50IGZyZWVfY2x1c3RlcnM7CiAgICAg ICAgc3RydWN0IGZhdF9tb3VudF9vcHRpb25zIG9wdGlvbnM7CiAgICAgICAgc3RydWN0IG5sc190 YWJsZSAqbmxzX2Rpc2s7CiAgICAgICAgc3RydWN0IG5sc190YWJsZSAqbmxzX2lvOwogICAgICAg IHN0cnVjdCBjdmZfZm9ybWF0KiBjdmZfZm9ybWF0OwogICAgICAgIHZvaWQgKmRpcl9vcHM7CiAg ICAgICAgdm9pZCAqcHJpdmF0ZV9kYXRhOwogICAgICAgIGludCBkaXJfcGVyX2Jsb2NrOwogICAg ICAgIGludCBkaXJfcGVyX2Jsb2NrX2JpdHM7Cn07CiMgNzE5ICIvdXNyL3NyYy9saW51eC0yLjQu MjAtOC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9p bmNsdWRlL2xpbnV4L2lzb19mc19zYi5oIiAxCgoKCgoKCnN0cnVjdCBpc29mc19zYl9pbmZvIHsK ICAgICAgICB1bnNpZ25lZCBsb25nIHNfbmlub2RlczsKICAgICAgICB1bnNpZ25lZCBsb25nIHNf bnpvbmVzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc19maXJzdGRhdGF6b25lOwogICAgICAgIHVu c2lnbmVkIGxvbmcgc19sb2dfem9uZV9zaXplOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc19tYXhf c2l6ZTsKCiAgICAgICAgdW5zaWduZWQgY2hhciBzX2hpZ2hfc2llcnJhOwogICAgICAgIHVuc2ln bmVkIGNoYXIgc19tYXBwaW5nOwogICAgICAgIGludCBzX3JvY2tfb2Zmc2V0OwogICAgICAgIHVu c2lnbmVkIGNoYXIgc19yb2NrOwogICAgICAgIHVuc2lnbmVkIGNoYXIgc19qb2xpZXRfbGV2ZWw7 CiAgICAgICAgdW5zaWduZWQgY2hhciBzX3V0Zjg7CiAgICAgICAgdW5zaWduZWQgY2hhciBzX2Ny dWZ0OwoKCiAgICAgICAgdW5zaWduZWQgY2hhciBzX3VuaGlkZTsKICAgICAgICB1bnNpZ25lZCBj aGFyIHNfbm9zdWlkOwogICAgICAgIHVuc2lnbmVkIGNoYXIgc19ub2RldjsKICAgICAgICB1bnNp Z25lZCBjaGFyIHNfbm9jb21wcmVzczsKCiAgICAgICAgbW9kZV90IHNfbW9kZTsKICAgICAgICBn aWRfdCBzX2dpZDsKICAgICAgICB1aWRfdCBzX3VpZDsKICAgICAgICBzdHJ1Y3QgbmxzX3RhYmxl ICpzX25sc19pb2NoYXJzZXQ7Cn07CiMgNzIwICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNs dWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xp bnV4L25mc19mc19zYi5oIiAxCiMgOSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9s aW51eC9uZnNfZnNfc2IuaCIKc3RydWN0IG5mc19zZXJ2ZXIgewogICAgICAgIHN0cnVjdCBycGNf Y2xudCAqIGNsaWVudDsKICAgICAgICBzdHJ1Y3QgbmZzX3JwY19vcHMgKiBycGNfb3BzOwogICAg ICAgIGludCBmbGFnczsKICAgICAgICB1bnNpZ25lZCBpbnQgcnNpemU7CiAgICAgICAgdW5zaWdu ZWQgaW50IHJwYWdlczsKICAgICAgICB1bnNpZ25lZCBpbnQgd3NpemU7CiAgICAgICAgdW5zaWdu ZWQgaW50IHdwYWdlczsKICAgICAgICB1bnNpZ25lZCBpbnQgZHRzaXplOwogICAgICAgIHVuc2ln bmVkIGludCBic2l6ZTsKICAgICAgICB1bnNpZ25lZCBpbnQgYWNyZWdtaW47CiAgICAgICAgdW5z aWduZWQgaW50IGFjcmVnbWF4OwogICAgICAgIHVuc2lnbmVkIGludCBhY2Rpcm1pbjsKICAgICAg ICB1bnNpZ25lZCBpbnQgYWNkaXJtYXg7CiAgICAgICAgdW5zaWduZWQgaW50IG5hbWVsZW47CiAg ICAgICAgY2hhciAqIGhvc3RuYW1lOwogICAgICAgIHN0cnVjdCBuZnNfcmVxbGlzdCAqIHJ3X3Jl cXVlc3RzOwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgbHJ1X3JlYWQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbHJ1X2RpcnR5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGxydV9jb21taXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHJ1X2J1c3k7 Cn07CgoKCgpzdHJ1Y3QgbmZzX3NiX2luZm8gewogICAgICAgIHN0cnVjdCBuZnNfc2VydmVyIHNf c2VydmVyOwp9OwojIDcyMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9m cy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9zeXN2X2Zz X3NiLmgiIDEKIyAxMyAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9zeXN2 X2ZzX3NiLmgiCnN0cnVjdCBzeXN2X3NiX2luZm8gewogICAgICAgIGludCBzX3R5cGU7CiAgICAg ICAgY2hhciBzX2J5dGVzZXg7CiAgICAgICAgY2hhciBzX3RydW5jYXRlOwoKICAgICAgICBubGlu a190IHNfbGlua19tYXg7CiAgICAgICAgdW5zaWduZWQgaW50IHNfaW5vZGVzX3Blcl9ibG9jazsK ICAgICAgICB1bnNpZ25lZCBpbnQgc19pbm9kZXNfcGVyX2Jsb2NrXzE7CiAgICAgICAgdW5zaWdu ZWQgaW50IHNfaW5vZGVzX3Blcl9ibG9ja19iaXRzOwogICAgICAgIHVuc2lnbmVkIGludCBzX2lu ZF9wZXJfYmxvY2s7CiAgICAgICAgdW5zaWduZWQgaW50IHNfaW5kX3Blcl9ibG9ja19iaXRzOwog ICAgICAgIHVuc2lnbmVkIGludCBzX2luZF9wZXJfYmxvY2tfMjsKICAgICAgICB1bnNpZ25lZCBp bnQgc190b29iaWdfYmxvY2s7CiAgICAgICAgdW5zaWduZWQgaW50IHNfYmxvY2tfYmFzZTsKICAg ICAgICB1bnNpZ25lZCBzaG9ydCBzX2ZpY19zaXplOwogICAgICAgIHVuc2lnbmVkIHNob3J0IHNf ZmxjX3NpemU7CgogICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqc19iaDE7CiAgICAgICAgc3Ry dWN0IGJ1ZmZlcl9oZWFkICpzX2JoMjsKCgogICAgICAgIGNoYXIgKiBzX3NiZDE7CiAgICAgICAg Y2hhciAqIHNfc2JkMjsKICAgICAgICB1MTYgKnNfc2JfZmljX2NvdW50OwogICAgICAgIHUxNiAq c19zYl9maWNfaW5vZGVzOwogICAgICAgIHUxNiAqc19zYl90b3RhbF9mcmVlX2lub2RlczsKICAg ICAgICB1MTYgKnNfYmNhY2hlX2NvdW50OwogICAgICAgIHUzMiAqc19iY2FjaGU7CiAgICAgICAg dTMyICpzX2ZyZWVfYmxvY2tzOwogICAgICAgIHUzMiAqc19zYl90aW1lOwogICAgICAgIHUzMiAq c19zYl9zdGF0ZTsKCgogICAgICAgIHUzMiBzX2ZpcnN0aW5vZGV6b25lOwogICAgICAgIHUzMiBz X2ZpcnN0ZGF0YXpvbmU7CiAgICAgICAgdTMyIHNfbmlub2RlczsKICAgICAgICB1MzIgc19uZGF0 YXpvbmVzOwogICAgICAgIHUzMiBzX256b25lczsKICAgICAgICB1MTYgc19uYW1lbGVuOwp9Owoj IDcyMiAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAi L3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9hZmZzX2ZzX3NiLmgiIDEKIyAx MSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9hZmZzX2ZzX3NiLmgiCnN0 cnVjdCBhZmZzX2JtX2luZm8gewogICAgICAgIHUzMiBibV9rZXk7CiAgICAgICAgdTMyIGJtX2Zy ZWU7Cn07CgpzdHJ1Y3QgYWZmc19zYl9pbmZvIHsKICAgICAgICBpbnQgc19wYXJ0aXRpb25fc2l6 ZTsKICAgICAgICBpbnQgc19yZXNlcnZlZDsKCiAgICAgICAgdTMyIHNfZGF0YV9ibGtzaXplOwog ICAgICAgIHUzMiBzX3Jvb3RfYmxvY2s7CiAgICAgICAgaW50IHNfaGFzaHNpemU7CiAgICAgICAg dW5zaWduZWQgbG9uZyBzX2ZsYWdzOwogICAgICAgIHVpZF90IHNfdWlkOwogICAgICAgIGdpZF90 IHNfZ2lkOwogICAgICAgIHVtb2RlX3Qgc19tb2RlOwogICAgICAgIHN0cnVjdCBidWZmZXJfaGVh ZCAqc19yb290X2JoOwogICAgICAgIHN0cnVjdCBzZW1hcGhvcmUgc19ibWxvY2s7CiAgICAgICAg c3RydWN0IGFmZnNfYm1faW5mbyAqc19iaXRtYXA7CiAgICAgICAgdTMyIHNfYm1hcF9jb3VudDsK ICAgICAgICB1MzIgc19ibWFwX2JpdHM7CiAgICAgICAgdTMyIHNfbGFzdF9ibWFwOwogICAgICAg IHN0cnVjdCBidWZmZXJfaGVhZCAqc19ibWFwX2JoOwogICAgICAgIGNoYXIgKnNfcHJlZml4Owog ICAgICAgIGludCBzX3ByZWZpeF9sZW47CiAgICAgICAgY2hhciBzX3ZvbHVtZVszMl07Cn07CiMg NzIzICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIv dXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3Vmc19mc19zYi5oIiAxCiMgMTcg Ii91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvdWZzX2ZzX3NiLmgiCiMgMSAi L3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC91ZnNfZnMuaCIgMQojIDIzNyAi L3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC91ZnNfZnMuaCIKc3RydWN0IHVm c190aW1ldmFsIHsKICAgICAgICBfX3MzMiB0dl9zZWM7CiAgICAgICAgX19zMzIgdHZfdXNlYzsK fTsKCnN0cnVjdCB1ZnNfZGlyX2VudHJ5IHsKICAgICAgICBfX3UzMiBkX2lubzsKICAgICAgICBf X3UxNiBkX3JlY2xlbjsKICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICAgICBfX3UxNiBkX25h bWxlbjsKICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9f dTggZF90eXBlOwogICAgICAgICAgICAgICAgICAgICAgICBfX3U4IGRfbmFtbGVuOwogICAgICAg ICAgICAgICAgfSBkXzQ0OwogICAgICAgIH0gZF91OwogICAgICAgIF9fdTggZF9uYW1lWzI1NSAr IDFdOwp9OwoKc3RydWN0IHVmc19jc3VtIHsKICAgICAgICBfX3UzMiBjc19uZGlyOwogICAgICAg IF9fdTMyIGNzX25iZnJlZTsKICAgICAgICBfX3UzMiBjc19uaWZyZWU7CiAgICAgICAgX191MzIg Y3NfbmZmcmVlOwp9OwoKCgoKc3RydWN0IHVmc19zdXBlcl9ibG9jayB7CiAgICAgICAgX191MzIg ZnNfbGluazsKICAgICAgICBfX3UzMiBmc19ybGluazsKICAgICAgICBfX3UzMiBmc19zYmxrbm87 CiAgICAgICAgX191MzIgZnNfY2Jsa25vOwogICAgICAgIF9fdTMyIGZzX2libGtubzsKICAgICAg ICBfX3UzMiBmc19kYmxrbm87CiAgICAgICAgX191MzIgZnNfY2dvZmZzZXQ7CiAgICAgICAgX191 MzIgZnNfY2dtYXNrOwogICAgICAgIF9fdTMyIGZzX3RpbWU7CiAgICAgICAgX191MzIgZnNfc2l6 ZTsKICAgICAgICBfX3UzMiBmc19kc2l6ZTsKICAgICAgICBfX3UzMiBmc19uY2c7CiAgICAgICAg X191MzIgZnNfYnNpemU7CiAgICAgICAgX191MzIgZnNfZnNpemU7CiAgICAgICAgX191MzIgZnNf ZnJhZzsKCiAgICAgICAgX191MzIgZnNfbWluZnJlZTsKICAgICAgICBfX3UzMiBmc19yb3RkZWxh eTsKICAgICAgICBfX3UzMiBmc19ycHM7CgogICAgICAgIF9fdTMyIGZzX2JtYXNrOwogICAgICAg IF9fdTMyIGZzX2ZtYXNrOwogICAgICAgIF9fdTMyIGZzX2JzaGlmdDsKICAgICAgICBfX3UzMiBm c19mc2hpZnQ7CgogICAgICAgIF9fdTMyIGZzX21heGNvbnRpZzsKICAgICAgICBfX3UzMiBmc19t YXhicGc7CgogICAgICAgIF9fdTMyIGZzX2ZyYWdzaGlmdDsKICAgICAgICBfX3UzMiBmc19mc2J0 b2RiOwogICAgICAgIF9fdTMyIGZzX3Nic2l6ZTsKICAgICAgICBfX3UzMiBmc19jc21hc2s7CiAg ICAgICAgX191MzIgZnNfY3NzaGlmdDsKICAgICAgICBfX3UzMiBmc19uaW5kaXI7CiAgICAgICAg X191MzIgZnNfaW5vcGI7CiAgICAgICAgX191MzIgZnNfbnNwZjsKCiAgICAgICAgX191MzIgZnNf b3B0aW07CgogICAgICAgIHVuaW9uIHsKICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAg ICAgICAgICAgICAgICAgIF9fdTMyIGZzX25wc2VjdDsKICAgICAgICAgICAgICAgIH0gZnNfc3Vu OwogICAgICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICAgICAgICAgX19zMzIg ZnNfc3RhdGU7CiAgICAgICAgICAgICAgICB9IGZzX3N1bng4NjsKICAgICAgICB9IGZzX3UxOwog ICAgICAgIF9fdTMyIGZzX2ludGVybGVhdmU7CiAgICAgICAgX191MzIgZnNfdHJhY2tza2V3OwoK CgoKICAgICAgICBfX3UzMiBmc19pZFsyXTsKCiAgICAgICAgX191MzIgZnNfY3NhZGRyOwogICAg ICAgIF9fdTMyIGZzX2Nzc2l6ZTsKICAgICAgICBfX3UzMiBmc19jZ3NpemU7CgogICAgICAgIF9f dTMyIGZzX250cmFrOwogICAgICAgIF9fdTMyIGZzX25zZWN0OwogICAgICAgIF9fdTMyIGZzX3Nw YzsKCiAgICAgICAgX191MzIgZnNfbmN5bDsKCiAgICAgICAgX191MzIgZnNfY3BnOwogICAgICAg IF9fdTMyIGZzX2lwZzsKICAgICAgICBfX3UzMiBmc19mcGc7CgogICAgICAgIHN0cnVjdCB1ZnNf Y3N1bSBmc19jc3RvdGFsOwoKICAgICAgICBfX3M4IGZzX2Ztb2Q7CiAgICAgICAgX19zOCBmc19j bGVhbjsKICAgICAgICBfX3M4IGZzX3Jvbmx5OwogICAgICAgIF9fczggZnNfZmxhZ3M7CiAgICAg ICAgX19zOCBmc19mc21udFs1MTJdOwoKICAgICAgICBfX3UzMiBmc19jZ3JvdG9yOwogICAgICAg IF9fdTMyIGZzX2NzcFszMV07CiAgICAgICAgX191MzIgZnNfbWF4Y2x1c3RlcjsKICAgICAgICBf X3UzMiBmc19jcGM7CiAgICAgICAgX191MTYgZnNfb3Bvc3RibFsxNl1bOF07CiAgICAgICAgdW5p b24gewogICAgICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICAgICAgICAgX19z MzIgZnNfc3BhcmVjb25bNTNdOwogICAgICAgICAgICAgICAgICAgICAgICBfX3MzMiBmc19yZWNs YWltOwogICAgICAgICAgICAgICAgICAgICAgICBfX3MzMiBmc19zcGFyZWNvbjJbMV07CiAgICAg ICAgICAgICAgICAgICAgICAgIF9fczMyIGZzX3N0YXRlOwogICAgICAgICAgICAgICAgICAgICAg ICBfX3UzMiBmc19xYm1hc2tbMl07CiAgICAgICAgICAgICAgICAgICAgICAgIF9fdTMyIGZzX3Fm bWFza1syXTsKICAgICAgICAgICAgICAgIH0gZnNfc3VuOwogICAgICAgICAgICAgICAgc3RydWN0 IHsKICAgICAgICAgICAgICAgICAgICAgICAgX19zMzIgZnNfc3BhcmVjb25bNTNdOwogICAgICAg ICAgICAgICAgICAgICAgICBfX3MzMiBmc19yZWNsYWltOwogICAgICAgICAgICAgICAgICAgICAg ICBfX3MzMiBmc19zcGFyZWNvbjJbMV07CiAgICAgICAgICAgICAgICAgICAgICAgIF9fdTMyIGZz X25wc2VjdDsKICAgICAgICAgICAgICAgICAgICAgICAgX191MzIgZnNfcWJtYXNrWzJdOwogICAg ICAgICAgICAgICAgICAgICAgICBfX3UzMiBmc19xZm1hc2tbMl07CiAgICAgICAgICAgICAgICB9 IGZzX3N1bng4NjsKICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgICAg ICAgIF9fczMyIGZzX3NwYXJlY29uWzUwXTsKICAgICAgICAgICAgICAgICAgICAgICAgX19zMzIg ZnNfY29udGlnc3Vtc2l6ZTsKICAgICAgICAgICAgICAgICAgICAgICAgX19zMzIgZnNfbWF4c3lt bGlua2xlbjsKICAgICAgICAgICAgICAgICAgICAgICAgX19zMzIgZnNfaW5vZGVmbXQ7CiAgICAg ICAgICAgICAgICAgICAgICAgIF9fdTMyIGZzX21heGZpbGVzaXplWzJdOwogICAgICAgICAgICAg ICAgICAgICAgICBfX3UzMiBmc19xYm1hc2tbMl07CiAgICAgICAgICAgICAgICAgICAgICAgIF9f dTMyIGZzX3FmbWFza1syXTsKICAgICAgICAgICAgICAgICAgICAgICAgX19zMzIgZnNfc3RhdGU7 CiAgICAgICAgICAgICAgICB9IGZzXzQ0OwogICAgICAgIH0gZnNfdTI7CiAgICAgICAgX19zMzIg ZnNfcG9zdGJsZm9ybWF0OwogICAgICAgIF9fczMyIGZzX25ycG9zOwogICAgICAgIF9fczMyIGZz X3Bvc3RibG9mZjsKICAgICAgICBfX3MzMiBmc19yb3RibG9mZjsKICAgICAgICBfX3MzMiBmc19t YWdpYzsKICAgICAgICBfX3U4IGZzX3NwYWNlWzFdOwp9OwojIDQxNSAiL3Vzci9zcmMvbGludXgt Mi40LjIwLTgvaW5jbHVkZS9saW51eC91ZnNfZnMuaCIKc3RydWN0IHVmc19jeWxpbmRlcl9ncm91 cCB7CiAgICAgICAgX191MzIgY2dfbGluazsKICAgICAgICBfX3UzMiBjZ19tYWdpYzsKICAgICAg ICBfX3UzMiBjZ190aW1lOwogICAgICAgIF9fdTMyIGNnX2NneDsKICAgICAgICBfX3UxNiBjZ19u Y3lsOwogICAgICAgIF9fdTE2IGNnX25pYmxrOwogICAgICAgIF9fdTMyIGNnX25kYmxrOwogICAg ICAgIHN0cnVjdCB1ZnNfY3N1bSBjZ19jczsKICAgICAgICBfX3UzMiBjZ19yb3RvcjsKICAgICAg ICBfX3UzMiBjZ19mcm90b3I7CiAgICAgICAgX191MzIgY2dfaXJvdG9yOwogICAgICAgIF9fdTMy IGNnX2Zyc3VtWyg4MTkyIC8gMTAyNCldOwogICAgICAgIF9fdTMyIGNnX2J0b3RvZmY7CiAgICAg ICAgX191MzIgY2dfYm9mZjsKICAgICAgICBfX3UzMiBjZ19pdXNlZG9mZjsKICAgICAgICBfX3Uz MiBjZ19mcmVlb2ZmOwogICAgICAgIF9fdTMyIGNnX25leHRmcmVlb2ZmOwogICAgICAgIHVuaW9u IHsKICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fdTMy IGNnX2NsdXN0ZXJzdW1vZmY7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fdTMyIGNnX2NsdXN0 ZXJvZmY7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fdTMyIGNnX25jbHVzdGVyYmxrczsKICAg ICAgICAgICAgICAgICAgICAgICAgX191MzIgY2dfc3BhcmVjb25bMTNdOwogICAgICAgICAgICAg ICAgfSBjZ180NDsKICAgICAgICAgICAgICAgIF9fdTMyIGNnX3NwYXJlY29uWzE2XTsKICAgICAg ICB9IGNnX3U7CiAgICAgICAgX191OCBjZ19zcGFjZVsxXTsKCn07CgoKCgpzdHJ1Y3QgdWZzX2lu b2RlIHsKICAgICAgICBfX3UxNiB1aV9tb2RlOwogICAgICAgIF9fdTE2IHVpX25saW5rOwogICAg ICAgIHVuaW9uIHsKICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgICAg ICAgIF9fdTE2IHVpX3N1aWQ7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fdTE2IHVpX3NnaWQ7 CiAgICAgICAgICAgICAgICB9IG9sZGlkczsKICAgICAgICAgICAgICAgIF9fdTMyIHVpX2ludW1i ZXI7CiAgICAgICAgICAgICAgICBfX3UzMiB1aV9hdXRob3I7CiAgICAgICAgfSB1aV91MTsKICAg ICAgICBfX3U2NCB1aV9zaXplOwogICAgICAgIHN0cnVjdCB1ZnNfdGltZXZhbCB1aV9hdGltZTsK ICAgICAgICBzdHJ1Y3QgdWZzX3RpbWV2YWwgdWlfbXRpbWU7CiAgICAgICAgc3RydWN0IHVmc190 aW1ldmFsIHVpX2N0aW1lOwogICAgICAgIHVuaW9uIHsKICAgICAgICAgICAgICAgIHN0cnVjdCB7 CiAgICAgICAgICAgICAgICAgICAgICAgIF9fdTMyIHVpX2RiWzEyXTsKICAgICAgICAgICAgICAg ICAgICAgICAgX191MzIgdWlfaWJbM107CiAgICAgICAgICAgICAgICB9IHVpX2FkZHI7CiAgICAg ICAgICAgICAgICBfX3U4IHVpX3N5bWxpbmtbNCooMTIgKzMpXTsKICAgICAgICB9IHVpX3UyOwog ICAgICAgIF9fdTMyIHVpX2ZsYWdzOwogICAgICAgIF9fdTMyIHVpX2Jsb2NrczsKICAgICAgICBf X3UzMiB1aV9nZW47CiAgICAgICAgdW5pb24gewogICAgICAgICAgICAgICAgc3RydWN0IHsKICAg ICAgICAgICAgICAgICAgICAgICAgX191MzIgdWlfc2hhZG93OwogICAgICAgICAgICAgICAgICAg ICAgICBfX3UzMiB1aV91aWQ7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fdTMyIHVpX2dpZDsK ICAgICAgICAgICAgICAgICAgICAgICAgX191MzIgdWlfb2VmdGZsYWc7CiAgICAgICAgICAgICAg ICB9IHVpX3N1bjsKICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgICAg ICAgIF9fdTMyIHVpX3VpZDsKICAgICAgICAgICAgICAgICAgICAgICAgX191MzIgdWlfZ2lkOwog ICAgICAgICAgICAgICAgICAgICAgICBfX3MzMiB1aV9zcGFyZVsyXTsKICAgICAgICAgICAgICAg IH0gdWlfNDQ7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgICAgICAg ICBfX3UzMiB1aV91aWQ7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fdTMyIHVpX2dpZDsKICAg ICAgICAgICAgICAgICAgICAgICAgX191MTYgdWlfbW9kZWg7CiAgICAgICAgICAgICAgICAgICAg ICAgIF9fdTE2IHVpX3NwYXJlOwogICAgICAgICAgICAgICAgICAgICAgICBfX3UzMiB1aV90cmFu czsKICAgICAgICAgICAgICAgIH0gdWlfaHVyZDsKICAgICAgICB9IHVpX3UzOwp9OwojIDUxNCAi L3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC91ZnNfZnMuaCIKZXh0ZXJuIHZv aWQgdWZzX2ZyZWVfZnJhZ21lbnRzIChzdHJ1Y3QgaW5vZGUgKiwgdW5zaWduZWQsIHVuc2lnbmVk KTsKZXh0ZXJuIHZvaWQgdWZzX2ZyZWVfYmxvY2tzIChzdHJ1Y3QgaW5vZGUgKiwgdW5zaWduZWQs IHVuc2lnbmVkKTsKZXh0ZXJuIHVuc2lnbmVkIHVmc19uZXdfZnJhZ21lbnRzIChzdHJ1Y3QgaW5v ZGUgKiwgdTMyICosIHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQsIGludCAqKTsKCgpleHRl cm4gc3RydWN0IHVmc19jZ19wcml2YXRlX2luZm8gKiB1ZnNfbG9hZF9jeWxpbmRlciAoc3RydWN0 IHN1cGVyX2Jsb2NrICosIHVuc2lnbmVkKTsKZXh0ZXJuIHZvaWQgdWZzX3B1dF9jeWxpbmRlciAo c3RydWN0IHN1cGVyX2Jsb2NrICosIHVuc2lnbmVkKTsKCgpleHRlcm4gc3RydWN0IGlub2RlX29w ZXJhdGlvbnMgdWZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zOwpleHRlcm4gaW50IHVmc19jaGVja19k aXJfZW50cnkgKGNvbnN0IGNoYXIgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCB1ZnNfZGlyX2Vu dHJ5ICosIHN0cnVjdCBidWZmZXJfaGVhZCAqLCB1bnNpZ25lZCBsb25nKTsKZXh0ZXJuIGludCB1 ZnNfYWRkX2xpbmsgKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlub2RlICopOwpleHRlcm4gaW5v X3QgdWZzX2lub2RlX2J5X25hbWUoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKik7CmV4 dGVybiBpbnQgdWZzX21ha2VfZW1wdHkoc3RydWN0IGlub2RlICosIHN0cnVjdCBpbm9kZSAqKTsK ZXh0ZXJuIHN0cnVjdCB1ZnNfZGlyX2VudHJ5ICogdWZzX2ZpbmRfZW50cnkgKHN0cnVjdCBkZW50 cnkgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICoqKTsKZXh0ZXJuIGludCB1ZnNfZGVsZXRlX2VudHJ5 IChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHVmc19kaXJfZW50cnkgKiwgc3RydWN0IGJ1ZmZlcl9o ZWFkICopOwpleHRlcm4gaW50IHVmc19lbXB0eV9kaXIgKHN0cnVjdCBpbm9kZSAqKTsKZXh0ZXJu IHN0cnVjdCB1ZnNfZGlyX2VudHJ5ICogdWZzX2RvdGRvdCAoc3RydWN0IGlub2RlICosIHN0cnVj dCBidWZmZXJfaGVhZCAqKik7CmV4dGVybiB2b2lkIHVmc19zZXRfbGluayhzdHJ1Y3QgaW5vZGUg Kiwgc3RydWN0IHVmc19kaXJfZW50cnkgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICosIHN0cnVjdCBp bm9kZSAqKTsKCgpleHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdWZzX2ZpbGVfaW5vZGVf b3BlcmF0aW9uczsKZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdWZzX2ZpbGVfb3BlcmF0 aW9uczsKCmV4dGVybiBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHVmc19hb3BzOwoK CmV4dGVybiB2b2lkIHVmc19mcmVlX2lub2RlIChzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKZXh0ZXJu IHN0cnVjdCBpbm9kZSAqIHVmc19uZXdfaW5vZGUgKGNvbnN0IHN0cnVjdCBpbm9kZSAqLCBpbnQp OwoKCmV4dGVybiBpbnQgdWZzX2ZyYWdfbWFwIChzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKZXh0ZXJu IHZvaWQgdWZzX3JlYWRfaW5vZGUgKHN0cnVjdCBpbm9kZSAqKTsKZXh0ZXJuIHZvaWQgdWZzX3B1 dF9pbm9kZSAoc3RydWN0IGlub2RlICopOwpleHRlcm4gdm9pZCB1ZnNfd3JpdGVfaW5vZGUgKHN0 cnVjdCBpbm9kZSAqLCBpbnQpOwpleHRlcm4gaW50IHVmc19zeW5jX2lub2RlIChzdHJ1Y3QgaW5v ZGUgKik7CmV4dGVybiB2b2lkIHVmc19kZWxldGVfaW5vZGUgKHN0cnVjdCBpbm9kZSAqKTsKZXh0 ZXJuIHN0cnVjdCBidWZmZXJfaGVhZCAqIHVmc19nZXRmcmFnIChzdHJ1Y3QgaW5vZGUgKiwgdW5z aWduZWQsIGludCwgaW50ICopOwpleHRlcm4gc3RydWN0IGJ1ZmZlcl9oZWFkICogdWZzX2JyZWFk IChzdHJ1Y3QgaW5vZGUgKiwgdW5zaWduZWQsIGludCwgaW50ICopOwoKCmV4dGVybiBzdHJ1Y3Qg ZmlsZV9vcGVyYXRpb25zIHVmc19kaXJfb3BlcmF0aW9uczsKCgpleHRlcm4gc3RydWN0IGZpbGVf c3lzdGVtX3R5cGUgdWZzX2ZzX3R5cGU7CmV4dGVybiB2b2lkIHVmc193YXJuaW5nIChzdHJ1Y3Qg c3VwZXJfYmxvY2sgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIC4uLikgX19hdHRyaWJ1 dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpOwpleHRlcm4gdm9pZCB1ZnNfZXJyb3IgKHN0 cnVjdCBzdXBlcl9ibG9jayAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKSBfX2F0 dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDMsIDQpKSk7CmV4dGVybiB2b2lkIHVmc19wYW5p YyAoc3RydWN0IHN1cGVyX2Jsb2NrICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4p IF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMywgNCkpKTsKZXh0ZXJuIHZvaWQgdWZz X3dyaXRlX3N1cGVyIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CgoKZXh0ZXJuIHN0cnVjdCBpbm9k ZV9vcGVyYXRpb25zIHVmc19mYXN0X3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9uczsKCgpleHRlcm4g dm9pZCB1ZnNfdHJ1bmNhdGUgKHN0cnVjdCBpbm9kZSAqKTsKIyAxOCAiL3Vzci9zcmMvbGludXgt Mi40LjIwLTgvaW5jbHVkZS9saW51eC91ZnNfZnNfc2IuaCIgMgoKCgoKCnN0cnVjdCB1ZnNfYnVm ZmVyX2hlYWQgewogICAgICAgIHVuc2lnbmVkIGZyYWdtZW50OwogICAgICAgIHVuc2lnbmVkIGNv dW50OwogICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqIGJoWyg4MTkyIC8gMTAyNCldOwp9OwoK c3RydWN0IHVmc19jZ19wcml2YXRlX2luZm8gewogICAgICAgIHN0cnVjdCB1ZnNfY3lsaW5kZXJf Z3JvdXAgdWNnOwogICAgICAgIF9fdTMyIGNfY2d4OwogICAgICAgIF9fdTE2IGNfbmN5bDsKICAg ICAgICBfX3UxNiBjX25pYmxrOwogICAgICAgIF9fdTMyIGNfbmRibGs7CiAgICAgICAgX191MzIg Y19yb3RvcjsKICAgICAgICBfX3UzMiBjX2Zyb3RvcjsKICAgICAgICBfX3UzMiBjX2lyb3RvcjsK ICAgICAgICBfX3UzMiBjX2J0b3RvZmY7CiAgICAgICAgX191MzIgY19ib2ZmOwogICAgICAgIF9f dTMyIGNfaXVzZWRvZmY7CiAgICAgICAgX191MzIgY19mcmVlb2ZmOwogICAgICAgIF9fdTMyIGNf bmV4dGZyZWVvZmY7CiAgICAgICAgX191MzIgY19jbHVzdGVyc3Vtb2ZmOwogICAgICAgIF9fdTMy IGNfY2x1c3Rlcm9mZjsKICAgICAgICBfX3UzMiBjX25jbHVzdGVyYmxrczsKfTsKCnN0cnVjdCB1 ZnNfc2JfcHJpdmF0ZV9pbmZvIHsKICAgICAgICBzdHJ1Y3QgdWZzX2J1ZmZlcl9oZWFkIHNfdWJo OwogICAgICAgIF9fdTMyIHNfc2Jsa25vOwogICAgICAgIF9fdTMyIHNfY2Jsa25vOwogICAgICAg IF9fdTMyIHNfaWJsa25vOwogICAgICAgIF9fdTMyIHNfZGJsa25vOwogICAgICAgIF9fdTMyIHNf Y2dvZmZzZXQ7CiAgICAgICAgX191MzIgc19jZ21hc2s7CiAgICAgICAgX191MzIgc19zaXplOwog ICAgICAgIF9fdTMyIHNfZHNpemU7CiAgICAgICAgX191MzIgc19uY2c7CiAgICAgICAgX191MzIg c19ic2l6ZTsKICAgICAgICBfX3UzMiBzX2ZzaXplOwogICAgICAgIF9fdTMyIHNfZnBiOwogICAg ICAgIF9fdTMyIHNfbWluZnJlZTsKICAgICAgICBfX3UzMiBzX2JtYXNrOwogICAgICAgIF9fdTMy IHNfZm1hc2s7CiAgICAgICAgX191MzIgc19ic2hpZnQ7CiAgICAgICAgX191MzIgc19mc2hpZnQ7 CiAgICAgICAgX191MzIgc19mcGJzaGlmdDsKICAgICAgICBfX3UzMiBzX2ZzYnRvZGI7CiAgICAg ICAgX191MzIgc19zYnNpemU7CiAgICAgICAgX191MzIgc19jc21hc2s7CiAgICAgICAgX191MzIg c19jc3NoaWZ0OwogICAgICAgIF9fdTMyIHNfbmluZGlyOwogICAgICAgIF9fdTMyIHNfaW5vcGI7 CiAgICAgICAgX191MzIgc19uc3BmOwogICAgICAgIF9fdTMyIHNfbnBzZWN0OwogICAgICAgIF9f dTMyIHNfaW50ZXJsZWF2ZTsKICAgICAgICBfX3UzMiBzX3RyYWNrc2tldzsKICAgICAgICBfX3Uz MiBzX2NzYWRkcjsKICAgICAgICBfX3UzMiBzX2Nzc2l6ZTsKICAgICAgICBfX3UzMiBzX2Nnc2l6 ZTsKICAgICAgICBfX3UzMiBzX250cmFrOwogICAgICAgIF9fdTMyIHNfbnNlY3Q7CiAgICAgICAg X191MzIgc19zcGM7CiAgICAgICAgX191MzIgc19pcGc7CiAgICAgICAgX191MzIgc19mcGc7CiAg ICAgICAgX191MzIgc19jcGM7CiAgICAgICAgX19zMzIgc19jb250aWdzdW1zaXplOwogICAgICAg IF9fczY0IHNfcWJtYXNrOwogICAgICAgIF9fczY0IHNfcWZtYXNrOwogICAgICAgIF9fczMyIHNf cG9zdGJsZm9ybWF0OwogICAgICAgIF9fczMyIHNfbnJwb3M7CiAgICAgICAgX19zMzIgc19wb3N0 YmxvZmY7CiAgICAgICAgX19zMzIgc19yb3RibG9mZjsKCiAgICAgICAgX191MzIgc19mcGJtYXNr OwogICAgICAgIF9fdTMyIHNfYXBiOwogICAgICAgIF9fdTMyIHNfMmFwYjsKICAgICAgICBfX3Uz MiBzXzNhcGI7CiAgICAgICAgX191MzIgc19hcGJtYXNrOwogICAgICAgIF9fdTMyIHNfYXBic2hp ZnQ7CiAgICAgICAgX191MzIgc18yYXBic2hpZnQ7CiAgICAgICAgX191MzIgc18zYXBic2hpZnQ7 CiAgICAgICAgX191MzIgc19uc3Bmc2hpZnQ7CiAgICAgICAgX191MzIgc19uc3BiOwogICAgICAg IF9fdTMyIHNfaW5vcGY7CiAgICAgICAgX191MzIgc19zYmJhc2U7CiAgICAgICAgX191MzIgc19i cGY7CiAgICAgICAgX191MzIgc19icGZzaGlmdDsKICAgICAgICBfX3UzMiBzX2JwZm1hc2s7Cgog ICAgICAgIF9fdTMyIHNfbWF4c3ltbGlua2xlbjsKfTsKCgoKCgpzdHJ1Y3QgdWZzX3NiX2luZm8g ewogICAgICAgIHN0cnVjdCB1ZnNfc2JfcHJpdmF0ZV9pbmZvICogc191c3BpOwogICAgICAgIHN0 cnVjdCB1ZnNfY3N1bSAqIHNfY3NwWzMxXTsKICAgICAgICB1bnNpZ25lZCBzX2J5dGVzZXg7CiAg ICAgICAgdW5zaWduZWQgc19mbGFnczsKICAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiogc191 Y2c7CiAgICAgICAgc3RydWN0IHVmc19jZ19wcml2YXRlX2luZm8gKiBzX3VjcGlbOF07CiAgICAg ICAgdW5zaWduZWQgc19jZ25vWzhdOwogICAgICAgIHVuc2lnbmVkIHNob3J0IHNfY2dfbG9hZGVk OwogICAgICAgIHVuc2lnbmVkIHNfbW91bnRfb3B0Owp9OwoKCgoKCgoKc3RydWN0IHVmc19zdXBl cl9ibG9ja19maXJzdCB7CiAgICAgICAgX191MzIgZnNfbGluazsKICAgICAgICBfX3UzMiBmc19y bGluazsKICAgICAgICBfX3UzMiBmc19zYmxrbm87CiAgICAgICAgX191MzIgZnNfY2Jsa25vOwog ICAgICAgIF9fdTMyIGZzX2libGtubzsKICAgICAgICBfX3UzMiBmc19kYmxrbm87CiAgICAgICAg X191MzIgZnNfY2dvZmZzZXQ7CiAgICAgICAgX191MzIgZnNfY2dtYXNrOwogICAgICAgIF9fdTMy IGZzX3RpbWU7CiAgICAgICAgX191MzIgZnNfc2l6ZTsKICAgICAgICBfX3UzMiBmc19kc2l6ZTsK ICAgICAgICBfX3UzMiBmc19uY2c7CiAgICAgICAgX191MzIgZnNfYnNpemU7CiAgICAgICAgX191 MzIgZnNfZnNpemU7CiAgICAgICAgX191MzIgZnNfZnJhZzsKICAgICAgICBfX3UzMiBmc19taW5m cmVlOwogICAgICAgIF9fdTMyIGZzX3JvdGRlbGF5OwogICAgICAgIF9fdTMyIGZzX3JwczsKICAg ICAgICBfX3UzMiBmc19ibWFzazsKICAgICAgICBfX3UzMiBmc19mbWFzazsKICAgICAgICBfX3Uz MiBmc19ic2hpZnQ7CiAgICAgICAgX191MzIgZnNfZnNoaWZ0OwogICAgICAgIF9fdTMyIGZzX21h eGNvbnRpZzsKICAgICAgICBfX3UzMiBmc19tYXhicGc7CiAgICAgICAgX191MzIgZnNfZnJhZ3No aWZ0OwogICAgICAgIF9fdTMyIGZzX2ZzYnRvZGI7CiAgICAgICAgX191MzIgZnNfc2JzaXplOwog ICAgICAgIF9fdTMyIGZzX2NzbWFzazsKICAgICAgICBfX3UzMiBmc19jc3NoaWZ0OwogICAgICAg IF9fdTMyIGZzX25pbmRpcjsKICAgICAgICBfX3UzMiBmc19pbm9wYjsKICAgICAgICBfX3UzMiBm c19uc3BmOwogICAgICAgIF9fdTMyIGZzX29wdGltOwogICAgICAgIHVuaW9uIHsKICAgICAgICAg ICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fdTMyIGZzX25wc2VjdDsK ICAgICAgICAgICAgICAgIH0gZnNfc3VuOwogICAgICAgICAgICAgICAgc3RydWN0IHsKICAgICAg ICAgICAgICAgICAgICAgICAgX19zMzIgZnNfc3RhdGU7CiAgICAgICAgICAgICAgICB9IGZzX3N1 bng4NjsKICAgICAgICB9IGZzX3UxOwogICAgICAgIF9fdTMyIGZzX2ludGVybGVhdmU7CiAgICAg ICAgX191MzIgZnNfdHJhY2tza2V3OwogICAgICAgIF9fdTMyIGZzX2lkWzJdOwogICAgICAgIF9f dTMyIGZzX2NzYWRkcjsKICAgICAgICBfX3UzMiBmc19jc3NpemU7CiAgICAgICAgX191MzIgZnNf Y2dzaXplOwogICAgICAgIF9fdTMyIGZzX250cmFrOwogICAgICAgIF9fdTMyIGZzX25zZWN0Owog ICAgICAgIF9fdTMyIGZzX3NwYzsKICAgICAgICBfX3UzMiBmc19uY3lsOwogICAgICAgIF9fdTMy IGZzX2NwZzsKICAgICAgICBfX3UzMiBmc19pcGc7CiAgICAgICAgX191MzIgZnNfZnBnOwogICAg ICAgIHN0cnVjdCB1ZnNfY3N1bSBmc19jc3RvdGFsOwogICAgICAgIF9fczggZnNfZm1vZDsKICAg ICAgICBfX3M4IGZzX2NsZWFuOwogICAgICAgIF9fczggZnNfcm9ubHk7CiAgICAgICAgX19zOCBm c19mbGFnczsKICAgICAgICBfX3M4IGZzX2ZzbW50WzUxMiAtIDIxMl07Cgp9OwoKc3RydWN0IHVm c19zdXBlcl9ibG9ja19zZWNvbmQgewogICAgICAgIF9fczggZnNfZnNtbnRbMjEyXTsKICAgICAg ICBfX3UzMiBmc19jZ3JvdG9yOwogICAgICAgIF9fdTMyIGZzX2NzcFszMV07CiAgICAgICAgX191 MzIgZnNfbWF4Y2x1c3RlcjsKICAgICAgICBfX3UzMiBmc19jcGM7CiAgICAgICAgX191MTYgZnNf b3Bvc3RibFs4Ml07Cn07CgpzdHJ1Y3QgdWZzX3N1cGVyX2Jsb2NrX3RoaXJkIHsKICAgICAgICBf X3UxNiBmc19vcG9zdGJsWzQ2XTsKICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICAgICBzdHJ1 Y3QgewogICAgICAgICAgICAgICAgICAgICAgICBfX3MzMiBmc19zcGFyZWNvbls1M107CiAgICAg ICAgICAgICAgICAgICAgICAgIF9fczMyIGZzX3JlY2xhaW07CiAgICAgICAgICAgICAgICAgICAg ICAgIF9fczMyIGZzX3NwYXJlY29uMlsxXTsKICAgICAgICAgICAgICAgICAgICAgICAgX19zMzIg ZnNfc3RhdGU7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fdTMyIGZzX3FibWFza1syXTsKICAg ICAgICAgICAgICAgICAgICAgICAgX191MzIgZnNfcWZtYXNrWzJdOwogICAgICAgICAgICAgICAg fSBmc19zdW47CiAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgICAgICAg ICBfX3MzMiBmc19zcGFyZWNvbls1M107CiAgICAgICAgICAgICAgICAgICAgICAgIF9fczMyIGZz X3JlY2xhaW07CiAgICAgICAgICAgICAgICAgICAgICAgIF9fczMyIGZzX3NwYXJlY29uMlsxXTsK ICAgICAgICAgICAgICAgICAgICAgICAgX191MzIgZnNfbnBzZWN0OwogICAgICAgICAgICAgICAg ICAgICAgICBfX3UzMiBmc19xYm1hc2tbMl07CiAgICAgICAgICAgICAgICAgICAgICAgIF9fdTMy IGZzX3FmbWFza1syXTsKICAgICAgICAgICAgICAgIH0gZnNfc3VueDg2OwogICAgICAgICAgICAg ICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICAgICAgICAgX19zMzIgZnNfc3BhcmVjb25bNTBd OwogICAgICAgICAgICAgICAgICAgICAgICBfX3MzMiBmc19jb250aWdzdW1zaXplOwogICAgICAg ICAgICAgICAgICAgICAgICBfX3MzMiBmc19tYXhzeW1saW5rbGVuOwogICAgICAgICAgICAgICAg ICAgICAgICBfX3MzMiBmc19pbm9kZWZtdDsKICAgICAgICAgICAgICAgICAgICAgICAgX191MzIg ZnNfbWF4ZmlsZXNpemVbMl07CiAgICAgICAgICAgICAgICAgICAgICAgIF9fdTMyIGZzX3FibWFz a1syXTsKICAgICAgICAgICAgICAgICAgICAgICAgX191MzIgZnNfcWZtYXNrWzJdOwogICAgICAg ICAgICAgICAgICAgICAgICBfX3MzMiBmc19zdGF0ZTsKICAgICAgICAgICAgICAgIH0gZnNfNDQ7 CiAgICAgICAgfSBmc191MjsKICAgICAgICBfX3MzMiBmc19wb3N0Ymxmb3JtYXQ7CiAgICAgICAg X19zMzIgZnNfbnJwb3M7CiAgICAgICAgX19zMzIgZnNfcG9zdGJsb2ZmOwogICAgICAgIF9fczMy IGZzX3JvdGJsb2ZmOwogICAgICAgIF9fczMyIGZzX21hZ2ljOwogICAgICAgIF9fdTggZnNfc3Bh Y2VbMV07Cn07CiMgNzI0ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2Zz LmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2Vmc19mc19z Yi5oIiAxCiMgMjUgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvZWZzX2Zz X3NiLmgiCnN0cnVjdCBlZnNfc3VwZXIgewogICAgICAgIGludDMyX3QgZnNfc2l6ZTsKICAgICAg ICBpbnQzMl90IGZzX2ZpcnN0Y2c7CiAgICAgICAgaW50MzJfdCBmc19jZ2ZzaXplOwogICAgICAg IHNob3J0IGZzX2NnaXNpemU7CiAgICAgICAgc2hvcnQgZnNfc2VjdG9yczsKICAgICAgICBzaG9y dCBmc19oZWFkczsKICAgICAgICBzaG9ydCBmc19uY2c7CiAgICAgICAgc2hvcnQgZnNfZGlydHk7 CiAgICAgICAgaW50MzJfdCBmc190aW1lOwogICAgICAgIGludDMyX3QgZnNfbWFnaWM7CiAgICAg ICAgY2hhciBmc19mbmFtZVs2XTsKICAgICAgICBjaGFyIGZzX2ZwYWNrWzZdOwogICAgICAgIGlu dDMyX3QgZnNfYm1zaXplOwogICAgICAgIGludDMyX3QgZnNfdGZyZWU7CiAgICAgICAgaW50MzJf dCBmc190aW5vZGU7CiAgICAgICAgaW50MzJfdCBmc19ibWJsb2NrOwogICAgICAgIGludDMyX3Qg ZnNfcmVwbHNiOwogICAgICAgIGludDMyX3QgZnNfbGFzdGlhbGxvYzsKICAgICAgICBjaGFyIGZz X3NwYXJlWzIwXTsKICAgICAgICBpbnQzMl90IGZzX2NoZWNrc3VtOwp9OwoKCnN0cnVjdCBlZnNf c2JfaW5mbyB7CiAgICAgICAgaW50MzJfdCBmc19tYWdpYzsKICAgICAgICBpbnQzMl90IGZzX3N0 YXJ0OwogICAgICAgIGludDMyX3QgZmlyc3RfYmxvY2s7CiAgICAgICAgaW50MzJfdCB0b3RhbF9i bG9ja3M7CiAgICAgICAgaW50MzJfdCBncm91cF9zaXplOwogICAgICAgIGludDMyX3QgZGF0YV9m cmVlOwogICAgICAgIGludDMyX3QgaW5vZGVfZnJlZTsKICAgICAgICBzaG9ydCBpbm9kZV9ibG9j a3M7CiAgICAgICAgc2hvcnQgdG90YWxfZ3JvdXBzOwp9OwojIDcyNSAiL3Vzci9zcmMvbGludXgt Mi40LjIwLTgvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIw LTgvaW5jbHVkZS9saW51eC9yb21mc19mc19zYi5oIiAxCgoKCgoKc3RydWN0IHJvbWZzX3NiX2lu Zm8gewogICAgICAgIHVuc2lnbmVkIGxvbmcgc19tYXhzaXplOwp9OwojIDcyNiAiL3Vzci9zcmMv bGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgt Mi40LjIwLTgvaW5jbHVkZS9saW51eC9zbWJfZnNfc2IuaCIgMQojIDE1ICIvdXNyL3NyYy9saW51 eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3NtYl9mc19zYi5oIgojIDEgIi91c3Ivc3JjL2xpbnV4 LTIuNC4yMC04L2luY2x1ZGUvbGludXgvc21iLmgiIDEKIyAxNCAiL3Vzci9zcmMvbGludXgtMi40 LjIwLTgvaW5jbHVkZS9saW51eC9zbWIuaCIKZW51bSBzbWJfcHJvdG9jb2wgewogICAgICAgIFNN Ql9QUk9UT0NPTF9OT05FLAogICAgICAgIFNNQl9QUk9UT0NPTF9DT1JFLAogICAgICAgIFNNQl9Q Uk9UT0NPTF9DT1JFUExVUywKICAgICAgICBTTUJfUFJPVE9DT0xfTEFOTUFOMSwKICAgICAgICBT TUJfUFJPVE9DT0xfTEFOTUFOMiwKICAgICAgICBTTUJfUFJPVE9DT0xfTlQxCn07CgplbnVtIHNt Yl9jYXNlX2huZGwgewogICAgICAgIFNNQl9DQVNFX0RFRkFVTFQsCiAgICAgICAgU01CX0NBU0Vf TE9XRVIsCiAgICAgICAgU01CX0NBU0VfVVBQRVIKfTsKCnN0cnVjdCBzbWJfZHNrYXR0ciB7CiAg ICAgICAgX191MTYgdG90YWw7CiAgICAgICAgX191MTYgYWxsb2NibG9ja3M7CiAgICAgICAgX191 MTYgYmxvY2tzaXplOwogICAgICAgIF9fdTE2IGZyZWU7Cn07CgpzdHJ1Y3Qgc21iX2Nvbm5fb3B0 IHsKCgogICAgICAgIHVuc2lnbmVkIGludCBmZDsKCiAgICAgICAgZW51bSBzbWJfcHJvdG9jb2wg cHJvdG9jb2w7CiAgICAgICAgZW51bSBzbWJfY2FzZV9obmRsIGNhc2VfaGFuZGxpbmc7CgoKCiAg ICAgICAgX191MzIgbWF4X3htaXQ7CiAgICAgICAgX191MTYgc2VydmVyX3VpZDsKICAgICAgICBf X3UxNiB0aWQ7CgoKICAgICAgICBfX3UxNiBzZWNtb2RlOwogICAgICAgIF9fdTE2IG1heG11eDsK ICAgICAgICBfX3UxNiBtYXh2Y3M7CiAgICAgICAgX191MTYgcmF3bW9kZTsKICAgICAgICBfX3Uz MiBzZXNza2V5OwoKCiAgICAgICAgX191MzIgbWF4cmF3OwogICAgICAgIF9fdTMyIGNhcGFiaWxp dGllczsKICAgICAgICBfX3MxNiBzZXJ2ZXJ6b25lOwp9OwoKCgoKc3RydWN0IHNtYl9ubHNfY29k ZXBhZ2UgewogICAgICAgIGNoYXIgbG9jYWxfbmFtZVsyMF07CiAgICAgICAgY2hhciByZW1vdGVf bmFtZVsyMF07Cn07CiMgNzggIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgv c21iLmgiCnN0cnVjdCBzbWJfZmF0dHIgewoKICAgICAgICBfX3UxNiBhdHRyOwoKICAgICAgICB1 bnNpZ25lZCBsb25nIGZfaW5vOwogICAgICAgIHVtb2RlX3QgZl9tb2RlOwogICAgICAgIG5saW5r X3QgZl9ubGluazsKICAgICAgICB1aWRfdCBmX3VpZDsKICAgICAgICBnaWRfdCBmX2dpZDsKICAg ICAgICBrZGV2X3QgZl9yZGV2OwogICAgICAgIG9mZl90IGZfc2l6ZTsKICAgICAgICB0aW1lX3Qg Zl9hdGltZTsKICAgICAgICB0aW1lX3QgZl9tdGltZTsKICAgICAgICB0aW1lX3QgZl9jdGltZTsK ICAgICAgICB1bnNpZ25lZCBsb25nIGZfYmxrc2l6ZTsKICAgICAgICB1bnNpZ25lZCBsb25nIGZf YmxvY2tzOwp9OwoKZW51bSBzbWJfY29ubl9zdGF0ZSB7CiAgICAgICAgQ09OTl9WQUxJRCwKICAg ICAgICBDT05OX0lOVkFMSUQsCgogICAgICAgIENPTk5fUkVUUklFRCwKICAgICAgICBDT05OX1JF VFJZSU5HCn07CiMgMTYgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvc21i X2ZzX3NiLmgiIDIKCgoKCgoKCnN0cnVjdCBzbWJfc2JfaW5mbyB7CiAgICAgICAgZW51bSBzbWJf Y29ubl9zdGF0ZSBzdGF0ZTsKICAgICAgICBzdHJ1Y3QgZmlsZSAqIHNvY2tfZmlsZTsKCiAgICAg ICAgc3RydWN0IHNtYl9tb3VudF9kYXRhX2tlcm5lbCAqbW50OwogICAgICAgIHVuc2lnbmVkIGNo YXIgKnRlbXBfYnVmOwoKCgoKICAgICAgICB1bnNpZ25lZCBpbnQgZ2VuZXJhdGlvbjsKICAgICAg ICBwaWRfdCBjb25uX3BpZDsKICAgICAgICBzdHJ1Y3Qgc21iX2Nvbm5fb3B0IG9wdDsKCiAgICAg ICAgc3RydWN0IHNlbWFwaG9yZSBzZW07CiAgICAgICAgd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsK CiAgICAgICAgX191MzIgcGFja2V0X3NpemU7CiAgICAgICAgdW5zaWduZWQgY2hhciAqIHBhY2tl dDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCByY2xzOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGVy cjsKCgogICAgICAgIHZvaWQgKmRhdGFfcmVhZHk7CgoKICAgICAgICBzdHJ1Y3QgbmxzX3RhYmxl ICpyZW1vdGVfbmxzOwogICAgICAgIHN0cnVjdCBubHNfdGFibGUgKmxvY2FsX25sczsKCgoKCiAg ICAgICAgY2hhciAqbmFtZV9idWY7CgogICAgICAgIGludCAoKmNvbnZlcnQpKGNoYXIgKiwgaW50 LCBjb25zdCBjaGFyICosIGludCwKICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmxzX3Rh YmxlICosIHN0cnVjdCBubHNfdGFibGUgKik7Cn07CgoKc3RhdGljIGlubGluZSB2b2lkCnNtYl9s b2NrX3NlcnZlcihzdHJ1Y3Qgc21iX3NiX2luZm8gKnNlcnZlcikKewogICAgICAgIGRvd24oJihz ZXJ2ZXItPnNlbSkpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQKc21iX3VubG9ja19zZXJ2ZXIoc3Ry dWN0IHNtYl9zYl9pbmZvICpzZXJ2ZXIpCnsKICAgICAgICB1cCgmKHNlcnZlci0+c2VtKSk7Cn0K IyA3MjcgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvaGZzX2ZzX3NiLmgiIDEKIyAx NSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9oZnNfZnNfc2IuaCIKc3Ry dWN0IGhmc19uYW1lOwoKdHlwZWRlZiBpbnQgKCpoZnNfbmFtZWluX2ZuKSAoY2hhciAqLCBjb25z dCBzdHJ1Y3QgaGZzX25hbWUgKik7CnR5cGVkZWYgdm9pZCAoKmhmc19uYW1lb3V0X2ZuKSAoc3Ry dWN0IGhmc19uYW1lICosIGNvbnN0IGNoYXIgKiwgaW50KTsKdHlwZWRlZiB2b2lkICgqaGZzX2lm aWxsX2ZuKSAoc3RydWN0IGlub2RlICosIGlub190LCBjb25zdCBpbnQpOwoKCgoKCgpzdHJ1Y3Qg aGZzX3NiX2luZm8gewogICAgICAgIGludCBtYWdpYzsKICAgICAgICBzdHJ1Y3QgaGZzX21kYiAq c19tZGI7CiAgICAgICAgaW50IHNfcXVpZXQ7CgogICAgICAgIGludCBzX2xvd2VyY2FzZTsKICAg ICAgICBpbnQgc19hZnBkOwogICAgICAgIGludCBzX3ZlcnNpb247CiAgICAgICAgaGZzX25hbWVp bl9mbiBzX25hbWVpbjsKCgogICAgICAgIGhmc19uYW1lb3V0X2ZuIHNfbmFtZW91dDsKCgogICAg ICAgIGhmc19pZmlsbF9mbiBzX2lmaWxsOwoKICAgICAgICBjb25zdCBzdHJ1Y3QgaGZzX25hbWUg KnNfcmVzZXJ2ZWQxOwogICAgICAgIGNvbnN0IHN0cnVjdCBoZnNfbmFtZSAqc19yZXNlcnZlZDI7 CiAgICAgICAgX191MzIgc190eXBlOwogICAgICAgIF9fdTMyIHNfY3JlYXRvcjsKICAgICAgICB1 bW9kZV90IHNfdW1hc2s7CgogICAgICAgIHVpZF90IHNfdWlkOwogICAgICAgIGdpZF90IHNfZ2lk OwogICAgICAgIGNoYXIgc19jb252Owp9OwojIDcyOCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgv aW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVk ZS9saW51eC9hZGZzX2ZzX3NiLmgiIDEKIyAxMyAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5j bHVkZS9saW51eC9hZGZzX2ZzX3NiLmgiCnN0cnVjdCBhZGZzX2Rpc2NtYXA7CnN0cnVjdCBhZGZz X2Rpcl9vcHM7CgoKCgpzdHJ1Y3QgYWRmc19zYl9pbmZvIHsKICAgICAgICBzdHJ1Y3QgYWRmc19k aXNjbWFwICpzX21hcDsKICAgICAgICBzdHJ1Y3QgYWRmc19kaXJfb3BzICpzX2RpcjsKCiAgICAg ICAgdWlkX3Qgc191aWQ7CiAgICAgICAgZ2lkX3Qgc19naWQ7CiAgICAgICAgdW1vZGVfdCBzX293 bmVyX21hc2s7CiAgICAgICAgdW1vZGVfdCBzX290aGVyX21hc2s7CgogICAgICAgIF9fdTMyIHNf aWRzX3Blcl96b25lOwogICAgICAgIF9fdTMyIHNfaWRsZW47CiAgICAgICAgX191MzIgc19tYXBf c2l6ZTsKICAgICAgICB1bnNpZ25lZCBsb25nIHNfc2l6ZTsKICAgICAgICBzaWduZWQgaW50IHNf bWFwMmJsazsKICAgICAgICB1bnNpZ25lZCBpbnQgc19sb2cyc2hhcmVzaXplOwogICAgICAgIHVu c2lnbmVkIGludCBzX3ZlcnNpb247CiAgICAgICAgdW5zaWduZWQgaW50IHNfbmFtZWxlbjsKfTsK IyA3MjkgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvcW54NF9mc19zYi5oIiAxCiMg MTQgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvcW54NF9mc19zYi5oIgoj IDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvcW54NF9mcy5oIiAxCiMg NDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvcW54NF9mcy5oIgpzdHJ1 Y3QgcW54NF9pbm9kZV9lbnRyeSB7CiAgICAgICAgY2hhciBkaV9mbmFtZVsxNl07CiAgICAgICAg cW54NF9vZmZfdCBkaV9zaXplOwogICAgICAgIHFueDRfeHRudF90IGRpX2ZpcnN0X3h0bnQ7CiAg ICAgICAgX191MzIgZGlfeGJsazsKICAgICAgICBfX3MzMiBkaV9mdGltZTsKICAgICAgICBfX3Mz MiBkaV9tdGltZTsKICAgICAgICBfX3MzMiBkaV9hdGltZTsKICAgICAgICBfX3MzMiBkaV9jdGlt ZTsKICAgICAgICBxbng0X254dG50X3QgZGlfbnVtX3h0bnRzOwogICAgICAgIHFueDRfbW9kZV90 IGRpX21vZGU7CiAgICAgICAgcW54NF9tdWlkX3QgZGlfdWlkOwogICAgICAgIHFueDRfbWdpZF90 IGRpX2dpZDsKICAgICAgICBxbng0X25saW5rX3QgZGlfbmxpbms7CiAgICAgICAgX191OCBkaV96 ZXJvWzRdOwogICAgICAgIHFueDRfZnR5cGVfdCBkaV90eXBlOwogICAgICAgIF9fdTggZGlfc3Rh dHVzOwp9OwoKc3RydWN0IHFueDRfbGlua19pbmZvIHsKICAgICAgICBjaGFyIGRsX2ZuYW1lWzQ4 XTsKICAgICAgICBfX3UzMiBkbF9pbm9kZV9ibGs7CiAgICAgICAgX191OCBkbF9pbm9kZV9uZHg7 CiAgICAgICAgX191OCBkbF9zcGFyZVsxMF07CiAgICAgICAgX191OCBkbF9zdGF0dXM7Cn07Cgpz dHJ1Y3QgcW54NF94YmxrIHsKICAgICAgICBfX3UzMiB4YmxrX25leHRfeGJsazsKICAgICAgICBf X3UzMiB4YmxrX3ByZXZfeGJsazsKICAgICAgICBfX3U4IHhibGtfbnVtX3h0bnRzOwogICAgICAg IF9fdTggeGJsa19zcGFyZVszXTsKICAgICAgICBfX3MzMiB4YmxrX251bV9ibG9ja3M7CiAgICAg ICAgcW54NF94dG50X3QgeGJsa194dG50c1s2MF07CiAgICAgICAgY2hhciB4YmxrX3NpZ25hdHVy ZVs4XTsKICAgICAgICBxbng0X3h0bnRfdCB4YmxrX2ZpcnN0X3h0bnQ7Cn07CgpzdHJ1Y3QgcW54 NF9zdXBlcl9ibG9jayB7CiAgICAgICAgc3RydWN0IHFueDRfaW5vZGVfZW50cnkgUm9vdERpcjsK ICAgICAgICBzdHJ1Y3QgcW54NF9pbm9kZV9lbnRyeSBJbm9kZTsKICAgICAgICBzdHJ1Y3QgcW54 NF9pbm9kZV9lbnRyeSBCb290OwogICAgICAgIHN0cnVjdCBxbng0X2lub2RlX2VudHJ5IEFsdEJv b3Q7Cn07CiMgMTAwICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3FueDRf ZnMuaCIKZXh0ZXJuIHN0cnVjdCBkZW50cnkgKnFueDRfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGly LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwpleHRlcm4gdW5zaWduZWQgbG9uZyBxbng0X2NvdW50 X2ZyZWVfYmxvY2tzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwpleHRlcm4gdW5zaWduZWQgbG9u ZyBxbng0X2Jsb2NrX21hcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb25nIGlibG9jayk7CgpleHRl cm4gc3RydWN0IGJ1ZmZlcl9oZWFkICpxbng0X2dldGJsayhzdHJ1Y3QgaW5vZGUgKiwgaW50LCBp bnQpOwpleHRlcm4gc3RydWN0IGJ1ZmZlcl9oZWFkICpxbng0X2JyZWFkKHN0cnVjdCBpbm9kZSAq LCBpbnQsIGludCk7CgpleHRlcm4gaW50IHFueDRfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBz dHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBtb2RlKTsKZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVy YXRpb25zIHFueDRfZmlsZV9pbm9kZV9vcGVyYXRpb25zOwpleHRlcm4gc3RydWN0IGlub2RlX29w ZXJhdGlvbnMgcW54NF9kaXJfaW5vZGVfb3BlcmF0aW9uczsKZXh0ZXJuIHN0cnVjdCBmaWxlX29w ZXJhdGlvbnMgcW54NF9maWxlX29wZXJhdGlvbnM7CmV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRp b25zIHFueDRfZGlyX29wZXJhdGlvbnM7CmV4dGVybiBpbnQgcW54NF9pc19mcmVlKHN0cnVjdCBz dXBlcl9ibG9jayAqc2IsIGxvbmcgYmxvY2spOwpleHRlcm4gaW50IHFueDRfc2V0X2JpdG1hcChz dHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBsb25nIGJsb2NrLCBpbnQgYnVzeSk7CmV4dGVybiBpbnQg cW54NF9jcmVhdGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBp bnQgbW9kZSk7CmV4dGVybiB2b2lkIHFueDRfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSk7 CmV4dGVybiB2b2lkIHFueDRfZnJlZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKZXh0ZXJu IGludCBxbng0X3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5 KTsKZXh0ZXJuIGludCBxbng0X3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5 ICpkZW50cnkpOwpleHRlcm4gaW50IHFueDRfc3luY19maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBz dHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCk7CmV4dGVybiBpbnQgcW54NF9zeW5jX2lub2RlKHN0 cnVjdCBpbm9kZSAqaW5vZGUpOwpleHRlcm4gaW50IHFueDRfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9k ZSAqaW5vZGUsIGxvbmcgaWJsb2NrLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBpbnQgY3JlYXRl KTsKIyAxNSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9xbng0X2ZzX3Ni LmgiIDIKCgoKCgpzdHJ1Y3QgcW54NF9zYl9pbmZvIHsKICAgICAgICBzdHJ1Y3QgYnVmZmVyX2hl YWQgKnNiX2J1ZjsKICAgICAgICBzdHJ1Y3QgcW54NF9zdXBlcl9ibG9jayAqc2I7CiAgICAgICAg dW5zaWduZWQgaW50IFZlcnNpb247CiAgICAgICAgc3RydWN0IHFueDRfaW5vZGVfZW50cnkgKkJp dE1hcDsKfTsKIyA3MzAgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvZnMu aCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvcmVpc2VyZnNf ZnNfc2IuaCIgMQoKCgoKCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xp bnV4L3RxdWV1ZS5oIiAxCiMgMzggIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGlu dXgvdHF1ZXVlLmgiCnN0cnVjdCB0cV9zdHJ1Y3QgewogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQg bGlzdDsKICAgICAgICB1bnNpZ25lZCBsb25nIHN5bmM7CiAgICAgICAgdm9pZCAoKnJvdXRpbmUp KHZvaWQgKik7CiAgICAgICAgdm9pZCAqZGF0YTsKfTsKIyA2NCAiL3Vzci9zcmMvbGludXgtMi40 LjIwLTgvaW5jbHVkZS9saW51eC90cXVldWUuaCIKdHlwZWRlZiBzdHJ1Y3QgbGlzdF9oZWFkIHRh c2tfcXVldWU7CgoKCgpleHRlcm4gdGFza19xdWV1ZSB0cV90aW1lcl9SZmEzZTlhY2MsIHRxX2lt bWVkaWF0ZV9SMGRhMGRjZDEsIHRxX2Rpc2tfUjUzNzNkYmI2OwojIDk0ICIvdXNyL3NyYy9saW51 eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3RxdWV1ZS5oIgpleHRlcm4gc3BpbmxvY2tfdCB0cXVl dWVfbG9jazsKCgoKCgpzdGF0aWMgaW5saW5lIGludCBxdWV1ZV90YXNrKHN0cnVjdCB0cV9zdHJ1 Y3QgKmJoX3BvaW50ZXIsIHRhc2tfcXVldWUgKmJoX2xpc3QpCnsKICAgICAgICBpbnQgcmV0ID0g MDsKICAgICAgICBpZiAoIXRlc3RfYW5kX3NldF9iaXQoMCwmYmhfcG9pbnRlci0+c3luYykpIHsK ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAgICAgICAgICAgICAgICBkbyB7 IGRvIHsgX19hc21fXyBfX3ZvbGF0aWxlX18oInB1c2hmbCA7IHBvcGwgJTAiOiI9ZyIgKGZsYWdz KTogKTsgX19hc21fXyBfX3ZvbGF0aWxlX18oImNsaSI6IDogOiJtZW1vcnkiKTsgfSB3aGlsZSgw KTs7ICh2b2lkKSgmdHF1ZXVlX2xvY2spOyB9IHdoaWxlICgwKTsKICAgICAgICAgICAgICAgIGxp c3RfYWRkX3RhaWwoJmJoX3BvaW50ZXItPmxpc3QsIGJoX2xpc3QpOwogICAgICAgICAgICAgICAg ZG8geyBkbyB7IH0gd2hpbGUoMCk7IF9fYXNtX18gX192b2xhdGlsZV9fKCJwdXNobCAlMCA7IHBv cGZsIjogOiJnIiAoZmxhZ3MpOiJtZW1vcnkiLCAiY2MiKTsgfSB3aGlsZSAoMCk7CiAgICAgICAg ICAgICAgICByZXQgPSAxOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmV0Owp9CgoKCgoKZXh0 ZXJuIHZvaWQgX19ydW5fdGFza19xdWV1ZV9SMzg4OWIxMWModGFza19xdWV1ZSAqbGlzdCk7Cgpz dGF0aWMgaW5saW5lIHZvaWQgcnVuX3Rhc2tfcXVldWUodGFza19xdWV1ZSAqbGlzdCkKewogICAg ICAgIGlmICgoIWxpc3RfZW1wdHkoJipsaXN0KSkpCiAgICAgICAgICAgICAgICBfX3J1bl90YXNr X3F1ZXVlX1IzODg5YjExYyhsaXN0KTsKfQojIDkgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2lu Y2x1ZGUvbGludXgvcmVpc2VyZnNfZnNfc2IuaCIgMgojIDI2ICIvdXNyL3NyYy9saW51eC0yLjQu MjAtOC9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzX3NiLmgiCnN0cnVjdCByZWlzZXJmc19zdXBl cl9ibG9jawp7CiAgX191MzIgc19ibG9ja19jb3VudDsKICBfX3UzMiBzX2ZyZWVfYmxvY2tzOwog IF9fdTMyIHNfcm9vdF9ibG9jazsKICBfX3UzMiBzX2pvdXJuYWxfYmxvY2s7CiAgX191MzIgc19q b3VybmFsX2RldjsKIyA0MyAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9y ZWlzZXJmc19mc19zYi5oIgogIF9fdTMyIHNfb3JpZ19qb3VybmFsX3NpemU7CiAgX191MzIgc19q b3VybmFsX3RyYW5zX21heCA7CiAgX191MzIgc19qb3VybmFsX2Jsb2NrX2NvdW50IDsKICBfX3Uz MiBzX2pvdXJuYWxfbWF4X2JhdGNoIDsKICBfX3UzMiBzX2pvdXJuYWxfbWF4X2NvbW1pdF9hZ2Ug OwogIF9fdTMyIHNfam91cm5hbF9tYXhfdHJhbnNfYWdlIDsKICBfX3UxNiBzX2Jsb2Nrc2l6ZTsK ICBfX3UxNiBzX29pZF9tYXhzaXplOwogIF9fdTE2IHNfb2lkX2N1cnNpemU7CiAgX191MTYgc19z dGF0ZTsKICBjaGFyIHNfbWFnaWNbMTJdOwogIF9fdTMyIHNfaGFzaF9mdW5jdGlvbl9jb2RlOwog IF9fdTE2IHNfdHJlZV9oZWlnaHQ7CiAgX191MTYgc19ibWFwX25yOwogIF9fdTE2IHNfdmVyc2lv bjsKCgoKCiAgX191MTYgc19yZXNlcnZlZDsKICBfX3UzMiBzX2lub2RlX2dlbmVyYXRpb247CiAg X191MzIgc19mbGFnczsKICB1bnNpZ25lZCBjaGFyIHNfdXVpZFsxNl07CiAgdW5zaWduZWQgY2hh ciBzX2xhYmVsWzE2XTsKICBjaGFyIHNfdW51c2VkWzg4XSA7CgoKCn0gX19hdHRyaWJ1dGVfXyAo KF9fcGFja2VkX18pKTsKCnR5cGVkZWYgZW51bSB7CiAgcmVpc2VyZnNfYXR0cnNfY2xlYXJlZCA9 IDB4MDAwMDAwMDEsCn0gcmVpc2VyZnNfc3VwZXJfYmxvY2tfZmxhZ3M7CiMgMTMxICIvdXNyL3Ny Yy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzX3NiLmgiCnN0cnVjdCBy ZWlzZXJmc19zdXBlcl9ibG9ja192MQp7CiAgX191MzIgc19ibG9ja19jb3VudDsKICBfX3UzMiBz X2ZyZWVfYmxvY2tzOwogIF9fdTMyIHNfcm9vdF9ibG9jazsKICBfX3UzMiBzX2pvdXJuYWxfYmxv Y2s7CiAgX191MzIgc19qb3VybmFsX2RldjsKICBfX3UzMiBzX29yaWdfam91cm5hbF9zaXplOwog IF9fdTMyIHNfam91cm5hbF90cmFuc19tYXggOwogIF9fdTMyIHNfam91cm5hbF9ibG9ja19jb3Vu dCA7CiAgX191MzIgc19qb3VybmFsX21heF9iYXRjaCA7CiAgX191MzIgc19qb3VybmFsX21heF9j b21taXRfYWdlIDsKICBfX3UzMiBzX2pvdXJuYWxfbWF4X3RyYW5zX2FnZSA7CiAgX191MTYgc19i bG9ja3NpemU7CiAgX191MTYgc19vaWRfbWF4c2l6ZTsKICBfX3UxNiBzX29pZF9jdXJzaXplOwog IF9fdTE2IHNfc3RhdGU7CiAgY2hhciBzX21hZ2ljWzE2XTsKICBfX3UxNiBzX3RyZWVfaGVpZ2h0 OwogIF9fdTE2IHNfYm1hcF9ucjsKICBfX3UzMiBzX3Jlc2VydmVkOwp9IF9fYXR0cmlidXRlX18g KChfX3BhY2tlZF9fKSk7CiMgMjEwICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xp bnV4L3JlaXNlcmZzX2ZzX3NiLmgiCnN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Nub2RlIHsKICBz dHJ1Y3QgYnVmZmVyX2hlYWQgKmJoIDsKICBrZGV2X3QgZGV2IDsKICB1bnNpZ25lZCBsb25nIGJs b2NrbnIgOwogIGxvbmcgc3RhdGUgOwogIHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2xpc3QgKmps aXN0IDsKICBzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jbm9kZSAqbmV4dCA7CiAgc3RydWN0IHJl aXNlcmZzX2pvdXJuYWxfY25vZGUgKnByZXYgOwogIHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Nu b2RlICpocHJldiA7CiAgc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY25vZGUgKmhuZXh0IDsKfTsK CnN0cnVjdCByZWlzZXJmc19iaXRtYXBfbm9kZSB7CiAgaW50IGlkIDsKICBjaGFyICpkYXRhIDsK ICBzdHJ1Y3QgbGlzdF9oZWFkIGxpc3QgOwp9IDsKCnN0cnVjdCByZWlzZXJmc19saXN0X2JpdG1h cCB7CiAgc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfbGlzdCAqam91cm5hbF9saXN0IDsKICBzdHJ1 Y3QgcmVpc2VyZnNfYml0bWFwX25vZGUgKipiaXRtYXBzIDsKfSA7CgoKCgpzdHJ1Y3QgcmVpc2Vy ZnNfdHJhbnNhY3Rpb25faGFuZGxlIHsKCiAgY2hhciAqdF9jYWxsZXIgOwogIGludCB0X2Jsb2Nr c19sb2dnZWQgOwogIGludCB0X2Jsb2Nrc19hbGxvY2F0ZWQgOwogIHVuc2lnbmVkIGxvbmcgdF90 cmFuc19pZCA7CiAgc3RydWN0IHN1cGVyX2Jsb2NrICp0X3N1cGVyIDsKCiAgaW50IGRpc3BsYWNl X25ld19ibG9ja3M6MTsKCn0gOwoKCgoKCgoKc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfbGlzdCB7 CiAgdW5zaWduZWQgbG9uZyBqX3N0YXJ0IDsKICB1bnNpZ25lZCBsb25nIGpfbGVuIDsKICBhdG9t aWNfdCBqX25vbnplcm9sZW4gOwogIGF0b21pY190IGpfY29tbWl0X2xlZnQgOwogIGF0b21pY190 IGpfZmx1c2hpbmcgOwogIGF0b21pY190IGpfY29tbWl0X2ZsdXNoaW5nIDsKICBhdG9taWNfdCBq X29sZGVyX2NvbW1pdHNfZG9uZSA7CiAgdW5zaWduZWQgbG9uZyBqX3RyYW5zX2lkIDsKICB0aW1l X3Qgal90aW1lc3RhbXAgOwogIHN0cnVjdCByZWlzZXJmc19saXN0X2JpdG1hcCAqal9saXN0X2Jp dG1hcCA7CiAgc3RydWN0IGJ1ZmZlcl9oZWFkICpqX2NvbW1pdF9iaCA7CiAgc3RydWN0IHJlaXNl cmZzX2pvdXJuYWxfY25vZGUgKmpfcmVhbGJsb2NrIDsKICBzdHJ1Y3QgcmVpc2VyZnNfam91cm5h bF9jbm9kZSAqal9mcmVlZGxpc3QgOwogIHdhaXRfcXVldWVfaGVhZF90IGpfY29tbWl0X3dhaXQg OwogIHdhaXRfcXVldWVfaGVhZF90IGpfZmx1c2hfd2FpdCA7Cn0gOwoKc3RydWN0IHJlaXNlcmZz X3BhZ2VfbGlzdCA7CgpzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCB7CiAgc3RydWN0IGJ1ZmZlcl9o ZWFkICoqIGpfYXBfYmxvY2tzIDsKICBzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jbm9kZSAqal9s YXN0IDsKICBzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jbm9kZSAqal9maXJzdCA7CgogIGxvbmcg al9zdGF0ZSA7CiAgdW5zaWduZWQgbG9uZyBqX3RyYW5zX2lkIDsKICB1bnNpZ25lZCBsb25nIGpf bW91bnRfaWQgOwogIHVuc2lnbmVkIGxvbmcgal9zdGFydCA7CiAgdW5zaWduZWQgbG9uZyBqX2xl biA7CiAgdW5zaWduZWQgbG9uZyBqX2xlbl9hbGxvYyA7CiAgYXRvbWljX3Qgal93Y291bnQgOwog IHVuc2lnbmVkIGxvbmcgal9iY291bnQgOwogIHVuc2lnbmVkIGxvbmcgal9maXJzdF91bmZsdXNo ZWRfb2Zmc2V0IDsKICB1bnNpZ25lZCBsb25nIGpfbGFzdF9mbHVzaF90cmFuc19pZCA7CiAgc3Ry dWN0IGJ1ZmZlcl9oZWFkICpqX2hlYWRlcl9iaCA7CgoKCgogIHN0cnVjdCByZWlzZXJmc19wYWdl X2xpc3QgKmpfZmx1c2hfcGFnZXMgOwogIHRpbWVfdCBqX3RyYW5zX3N0YXJ0X3RpbWUgOwogIHdh aXRfcXVldWVfaGVhZF90IGpfd2FpdCA7CiAgYXRvbWljX3Qgal93bG9jayA7CiAgd2FpdF9xdWV1 ZV9oZWFkX3Qgal9qb2luX3dhaXQgOwogIGF0b21pY190IGpfamxvY2sgOwogIGludCBqX2pvdXJu YWxfbGlzdF9pbmRleCA7CiAgaW50IGpfbGlzdF9iaXRtYXBfaW5kZXggOwogIGludCBqX211c3Rf d2FpdCA7CiAgaW50IGpfbmV4dF9mdWxsX2ZsdXNoIDsKICBpbnQgal9uZXh0X2FzeW5jX2ZsdXNo IDsKCiAgaW50IGpfY25vZGVfdXNlZCA7CiAgaW50IGpfY25vZGVfZnJlZSA7CgogIHN0cnVjdCBy ZWlzZXJmc19qb3VybmFsX2Nub2RlICpqX2Nub2RlX2ZyZWVfbGlzdCA7CiAgc3RydWN0IHJlaXNl cmZzX2pvdXJuYWxfY25vZGUgKmpfY25vZGVfZnJlZV9vcmlnIDsKCiAgaW50IGpfZnJlZV9iaXRt YXBfbm9kZXMgOwogIGludCBqX3VzZWRfYml0bWFwX25vZGVzIDsKICBzdHJ1Y3QgbGlzdF9oZWFk IGpfYml0bWFwX25vZGVzIDsKICBzdHJ1Y3QgbGlzdF9oZWFkIGpfZGlydHlfYnVmZmVycyA7CiAg c3RydWN0IHJlaXNlcmZzX2xpc3RfYml0bWFwIGpfbGlzdF9iaXRtYXBbNV0gOwogIHN0cnVjdCBy ZWlzZXJmc19qb3VybmFsX2xpc3Qgal9qb3VybmFsX2xpc3RbNjRdIDsKICBzdHJ1Y3QgcmVpc2Vy ZnNfam91cm5hbF9jbm9kZSAqal9oYXNoX3RhYmxlWzgxOTJdIDsKICBzdHJ1Y3QgcmVpc2VyZnNf am91cm5hbF9jbm9kZSAqal9saXN0X2hhc2hfdGFibGVbODE5Ml0gOwoKICBzdHJ1Y3QgbGlzdF9o ZWFkIGpfcHJlYWxsb2NfbGlzdDsKfTsKCgoKCnR5cGVkZWYgX191MzIgKCpoYXNoZl90KSAoY29u c3Qgc2lnbmVkIGNoYXIgKiwgaW50KTsKCnN0cnVjdCByZWlzZXJmc19iaXRtYXBfaW5mbwp7Cgog ICAgX191MTYgZmlyc3RfemVyb19oaW50OwogICAgX191MTYgZnJlZV9jb3VudDsKICAgIHN0cnVj dCBidWZmZXJfaGVhZCAqYmg7Cn07CgpzdHJ1Y3QgcHJvY19kaXJfZW50cnk7CgoKdHlwZWRlZiB1 bnNpZ25lZCBsb25nIGludCBzdGF0X2NudF90Owp0eXBlZGVmIHN0cnVjdCByZWlzZXJmc19wcm9j X2luZm9fZGF0YQp7CiAgc3BpbmxvY2tfdCBsb2NrOwogIGludCBleGl0aW5nOwogIGludCBtYXhf aGFzaF9jb2xsaXNpb25zOwoKICBzdGF0X2NudF90IGJyZWFkczsKICBzdGF0X2NudF90IGJyZWFk X21pc3M7CiAgc3RhdF9jbnRfdCBzZWFyY2hfYnlfa2V5OwogIHN0YXRfY250X3Qgc2VhcmNoX2J5 X2tleV9mc19jaGFuZ2VkOwogIHN0YXRfY250X3Qgc2VhcmNoX2J5X2tleV9yZXN0YXJ0ZWQ7Cgog IHN0YXRfY250X3QgaW5zZXJ0X2l0ZW1fcmVzdGFydGVkOwogIHN0YXRfY250X3QgcGFzdGVfaW50 b19pdGVtX3Jlc3RhcnRlZDsKICBzdGF0X2NudF90IGN1dF9mcm9tX2l0ZW1fcmVzdGFydGVkOwog IHN0YXRfY250X3QgZGVsZXRlX3NvbGlkX2l0ZW1fcmVzdGFydGVkOwogIHN0YXRfY250X3QgZGVs ZXRlX2l0ZW1fcmVzdGFydGVkOwoKICBzdGF0X2NudF90IGxlYWtlZF9vaWQ7CiAgc3RhdF9jbnRf dCBsZWF2ZXNfcmVtb3ZhYmxlOwoKCiAgc3RhdF9jbnRfdCBiYWxhbmNlX2F0WyA1IF07CgogIHN0 YXRfY250X3Qgc2JrX3JlYWRfYXRbIDUgXTsKICBzdGF0X2NudF90IHNia19mc19jaGFuZ2VkWyA1 IF07CiAgc3RhdF9jbnRfdCBzYmtfcmVzdGFydGVkWyA1IF07CiAgc3RhdF9jbnRfdCBpdGVtc19h dFsgNSBdOwogIHN0YXRfY250X3QgZnJlZV9hdFsgNSBdOwogIHN0YXRfY250X3QgY2FuX25vZGVf YmVfcmVtb3ZlZFsgNSBdOwogIGxvbmcgaW50IGxudW1bIDUgXTsKICBsb25nIGludCBybnVtWyA1 IF07CiAgbG9uZyBpbnQgbGJ5dGVzWyA1IF07CiAgbG9uZyBpbnQgcmJ5dGVzWyA1IF07CiAgc3Rh dF9jbnRfdCBnZXRfbmVpZ2hib3JzWyA1IF07CiAgc3RhdF9jbnRfdCBnZXRfbmVpZ2hib3JzX3Jl c3RhcnRbIDUgXTsKICBzdGF0X2NudF90IG5lZWRfbF9uZWlnaGJvclsgNSBdOwogIHN0YXRfY250 X3QgbmVlZF9yX25laWdoYm9yWyA1IF07CgogIHN0YXRfY250X3QgZnJlZV9ibG9jazsKICBzdHJ1 Y3QgX19zY2FuX2JpdG1hcF9zdGF0cyB7CiAgICAgICAgc3RhdF9jbnRfdCBjYWxsOwogICAgICAg IHN0YXRfY250X3Qgd2FpdDsKICAgICAgICBzdGF0X2NudF90IGJtYXBfUjhjYzMwZjc1OwogICAg ICAgIHN0YXRfY250X3QgcmV0cnk7CiAgICAgICAgc3RhdF9jbnRfdCBpbl9qb3VybmFsX2hpbnQ7 CiAgICAgICAgc3RhdF9jbnRfdCBpbl9qb3VybmFsX25vaGludDsKICAgICAgICBzdGF0X2NudF90 IHN0b2xlbjsKICB9IHNjYW5fYml0bWFwOwogIHN0cnVjdCBfX2pvdXJuYWxfc3RhdHMgewogICAg ICAgIHN0YXRfY250X3QgaW5fam91cm5hbDsKICAgICAgICBzdGF0X2NudF90IGluX2pvdXJuYWxf Yml0bWFwOwogICAgICAgIHN0YXRfY250X3QgaW5fam91cm5hbF9yZXVzYWJsZTsKICAgICAgICBz dGF0X2NudF90IGxvY2tfam91cm5hbDsKICAgICAgICBzdGF0X2NudF90IGxvY2tfam91cm5hbF93 YWl0OwogICAgICAgIHN0YXRfY250X3Qgam91cm5hbF9iZWluZzsKICAgICAgICBzdGF0X2NudF90 IGpvdXJuYWxfcmVsb2NrX3dyaXRlcnM7CiAgICAgICAgc3RhdF9jbnRfdCBqb3VybmFsX3JlbG9j a193Y291bnQ7CiAgICAgICAgc3RhdF9jbnRfdCBtYXJrX2RpcnR5OwogICAgICAgIHN0YXRfY250 X3QgbWFya19kaXJ0eV9hbHJlYWR5OwogICAgICAgIHN0YXRfY250X3QgbWFya19kaXJ0eV9ub3Rq b3VybmFsOwogICAgICAgIHN0YXRfY250X3QgcmVzdG9yZV9wcmVwYXJlZDsKICAgICAgICBzdGF0 X2NudF90IHByZXBhcmU7CiAgICAgICAgc3RhdF9jbnRfdCBwcmVwYXJlX3JldHJ5OwogIH0gam91 cm5hbDsKfSByZWlzZXJmc19wcm9jX2luZm9fZGF0YV90OwoKCgoKCgpzdHJ1Y3QgcmVpc2VyZnNf c2JfaW5mbwp7CiAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBzX3NiaDsKCgogICAgc3RydWN0IHJl aXNlcmZzX3N1cGVyX2Jsb2NrICogc19yczsKICAgIHN0cnVjdCByZWlzZXJmc19iaXRtYXBfaW5m byAqIHNfYXBfYml0bWFwOwogICAgc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKnNfam91cm5hbCA7 CiAgICB1bnNpZ25lZCBzaG9ydCBzX21vdW50X3N0YXRlOwoKCiAgICB2b2lkICgqZW5kX2lvX2hh bmRsZXIpKHN0cnVjdCBidWZmZXJfaGVhZCAqLCBpbnQpOwogICAgaGFzaGZfdCBzX2hhc2hfZnVu Y3Rpb247CgoKICAgIHVuc2lnbmVkIGxvbmcgc19tb3VudF9vcHQ7CgoKCiAgICBzdHJ1Y3Qgewog ICAgICAgIHVuc2lnbmVkIGxvbmcgYml0czsKICAgICAgICB1bnNpZ25lZCBsb25nIGxhcmdlX2Zp bGVfc2l6ZTsKICAgICAgICBpbnQgYm9yZGVyOwogICAgICAgIGludCBwcmVhbGxvY21pbjsKICAg ICAgICBpbnQgcHJlYWxsb2NzaXplOwoKCiAgICB9IHNfYWxsb2Nfb3B0aW9uczsKCgogICAgd2Fp dF9xdWV1ZV9oZWFkX3Qgc193YWl0OwoKICAgIGF0b21pY190IHNfZ2VuZXJhdGlvbl9jb3VudGVy OwoKICAgIHVuc2lnbmVkIGxvbmcgc19wcm9wZXJ0aWVzOwoKCgogICAgaW50IHNfa21hbGxvY3M7 CiAgICBpbnQgc19kaXNrX3JlYWRzOwogICAgaW50IHNfZGlza193cml0ZXM7CiAgICBpbnQgc19m aXhfbm9kZXM7CiAgICBpbnQgc19kb19iYWxhbmNlOwogICAgaW50IHNfdW5uZWVkZWRfbGVmdF9u ZWlnaGJvcjsKICAgIGludCBzX2dvb2Rfc2VhcmNoX2J5X2tleV9yZWFkYTsKICAgIGludCBzX2Jt YXBzOwogICAgaW50IHNfYm1hcHNfd2l0aG91dF9zZWFyY2g7CiAgICBpbnQgc19kaXJlY3QyaW5k aXJlY3Q7CiAgICBpbnQgc19pbmRpcmVjdDJkaXJlY3Q7CgoKCiAgICBpbnQgc19pc191bmxpbmtl ZF9vazsKICAgIHJlaXNlcmZzX3Byb2NfaW5mb19kYXRhX3Qgc19wcm9jX2luZm9fZGF0YTsKICAg IHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY2RpcjsKICAgIGludCByZXNlcnZlZF9ibG9ja3M7 Cn07CiMgNTM0ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3JlaXNlcmZz X2ZzX3NiLmgiCnZvaWQgcmVpc2VyZnNfZmlsZV9idWZmZXIgKHN0cnVjdCBidWZmZXJfaGVhZCAq IGJoLCBpbnQgbGlzdCk7CmludCByZWlzZXJmc19pc19zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sg KnMpIDsKaW50IGpvdXJuYWxfbWFya19kaXJ0eShzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25f aGFuZGxlICosIHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKSA7 CmludCBmbHVzaF9vbGRfY29tbWl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIGludCkgOwppbnQg c2hvd19yZWlzZXJmc19sb2Nrcyh2b2lkKSA7CmludCByZWlzZXJmc19yZXNpemUoc3RydWN0IHN1 cGVyX2Jsb2NrICosIHVuc2lnbmVkIGxvbmcpIDsKIyA3MzEgIi91c3Ivc3JjL2xpbnV4LTIuNC4y MC04L2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2lu Y2x1ZGUvbGludXgvYmZzX2ZzX3NiLmgiIDEKIyAxMiAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgv aW5jbHVkZS9saW51eC9iZnNfZnNfc2IuaCIKc3RydWN0IGJmc19zYl9pbmZvIHsKICAgICAgICB1 bnNpZ25lZCBsb25nIHNpX2Jsb2NrczsKICAgICAgICB1bnNpZ25lZCBsb25nIHNpX2ZyZWViOwog ICAgICAgIHVuc2lnbmVkIGxvbmcgc2lfZnJlZWk7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzaV9s Zl9pb2ZmOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2lfbGZfc2JsazsKICAgICAgICB1bnNpZ25l ZCBsb25nIHNpX2xmX2VibGs7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzaV9sYXN0aTsKICAgICAg ICBjaGFyICogc2lfaW1hcDsKICAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBzaV9zYmg7CiAg ICAgICAgc3RydWN0IGJmc19zdXBlcl9ibG9jayAqIHNpX2Jmc19zYjsKfTsKIyA3MzIgIi91c3Iv c3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xp bnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvdWRmX2ZzX3NiLmgiIDEKIyAyMSAiL3Vzci9zcmMv bGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC91ZGZfZnNfc2IuaCIKI3ByYWdtYSBwYWNrKDEp CiMgMzAgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvdWRmX2ZzX3NiLmgi CnN0cnVjdCB1ZGZfc3BhcmluZ19kYXRhCnsKICAgICAgICBfX3UxNiBzX3BhY2tldF9sZW47CiAg ICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpzX3NwYXJfbWFwWzRdOwp9OwoKc3RydWN0IHVkZl92 aXJ0dWFsX2RhdGEKewogICAgICAgIF9fdTMyIHNfbnVtX2VudHJpZXM7CiAgICAgICAgX191MTYg c19zdGFydF9vZmZzZXQ7Cn07CgpzdHJ1Y3QgdWRmX2JpdG1hcAp7CiAgICAgICAgX191MzIgc19l eHRMZW5ndGg7CiAgICAgICAgX191MzIgc19leHRQb3NpdGlvbjsKICAgICAgICBfX3UxNiBzX25y X2dyb3VwczsKICAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipzX2Jsb2NrX2JpdG1hcDsKfTsK CnN0cnVjdCB1ZGZfcGFydF9tYXAKewogICAgICAgIHVuaW9uCiAgICAgICAgewogICAgICAgICAg ICAgICAgc3RydWN0IHVkZl9iaXRtYXAgKnNfYml0bWFwOwogICAgICAgICAgICAgICAgc3RydWN0 IGlub2RlICpzX3RhYmxlOwogICAgICAgIH0gc191c3BhY2U7CiAgICAgICAgdW5pb24KICAgICAg ICB7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgdWRmX2JpdG1hcCAqc19iaXRtYXA7CiAgICAgICAg ICAgICAgICBzdHJ1Y3QgaW5vZGUgKnNfdGFibGU7CiAgICAgICAgfSBzX2ZzcGFjZTsKICAgICAg ICBfX3UzMiBzX3BhcnRpdGlvbl9yb290OwogICAgICAgIF9fdTMyIHNfcGFydGl0aW9uX2xlbjsK ICAgICAgICBfX3UxNiBzX3BhcnRpdGlvbl90eXBlOwogICAgICAgIF9fdTE2IHNfcGFydGl0aW9u X251bTsKICAgICAgICB1bmlvbgogICAgICAgIHsKICAgICAgICAgICAgICAgIHN0cnVjdCB1ZGZf c3BhcmluZ19kYXRhIHNfc3BhcmluZzsKICAgICAgICAgICAgICAgIHN0cnVjdCB1ZGZfdmlydHVh bF9kYXRhIHNfdmlydHVhbDsKICAgICAgICB9IHNfdHlwZV9zcGVjaWZpYzsKICAgICAgICBfX3Uz MiAoKnNfcGFydGl0aW9uX2Z1bmMpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBfX3UzMiwgX191MTYs IF9fdTMyKTsKICAgICAgICBfX3UxNiBzX3ZvbHVtZXNlcW51bTsKICAgICAgICBfX3UxNiBzX3Bh cnRpdGlvbl9mbGFnczsKfTsKCiNwcmFnbWEgcGFjaygpCgpzdHJ1Y3QgdWRmX3NiX2luZm8Kewog ICAgICAgIHN0cnVjdCB1ZGZfcGFydF9tYXAgKnNfcGFydG1hcHM7CiAgICAgICAgX191OCBzX3Zv bGlkZW50WzMyXTsKCgogICAgICAgIF9fdTE2IHNfcGFydGl0aW9uczsKICAgICAgICBfX3UxNiBz X3BhcnRpdGlvbjsKCgogICAgICAgIF9fczMyIHNfc2Vzc2lvbjsKICAgICAgICBfX3UzMiBzX2Fu Y2hvcls0XTsKICAgICAgICBfX3UzMiBzX2xhc3RibG9jazsKCiAgICAgICAgc3RydWN0IGJ1ZmZl cl9oZWFkICpzX2x2aWRiaDsKCgogICAgICAgIG1vZGVfdCBzX3VtYXNrOwogICAgICAgIGdpZF90 IHNfZ2lkOwogICAgICAgIHVpZF90IHNfdWlkOwoKCiAgICAgICAgdGltZV90IHNfcmVjb3JkdGlt ZTsKCgogICAgICAgIF9fdTE2IHNfc2VyaWFsbnVtOwoKCiAgICAgICAgX191MTYgc191ZGZyZXY7 CgoKICAgICAgICBfX3UzMiBzX2ZsYWdzOwoKCiAgICAgICAgc3RydWN0IG5sc190YWJsZSAqc19u bHNfbWFwOwoKCiAgICAgICAgc3RydWN0IGlub2RlICpzX3ZhdDsKfTsKIyA3MzMgIi91c3Ivc3Jj L2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4 LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbmNwX2ZzX3NiLmgiIDEKIyAxMiAiL3Vzci9zcmMvbGlu dXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9uY3BfZnNfc2IuaCIKIyAxICIvdXNyL3NyYy9saW51 eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L25jcF9tb3VudC5oIiAxCiMgMTIgIi91c3Ivc3JjL2xp bnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbmNwX21vdW50LmgiCiMgMSAiL3Vzci9zcmMvbGlu dXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9uY3AuaCIgMQojIDIyICIvdXNyL3NyYy9saW51eC0y LjQuMjAtOC9pbmNsdWRlL2xpbnV4L25jcC5oIgpzdHJ1Y3QgbmNwX3JlcXVlc3RfaGVhZGVyIHsK ICAgICAgICBfX3UxNiB0eXBlIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTgg c2VxdWVuY2UgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191OCBjb25uX2xvdyBf X2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3U4IHRhc2sgX19hdHRyaWJ1dGVfXygo cGFja2VkKSk7CiAgICAgICAgX191OCBjb25uX2hpZ2ggX19hdHRyaWJ1dGVfXygocGFja2VkKSk7 CiAgICAgICAgX191OCBmdW5jdGlvbiBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBf X3U4IGRhdGFbMF0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cn07CgoKCgpzdHJ1Y3QgbmNwX3Jl cGx5X2hlYWRlciB7CiAgICAgICAgX191MTYgdHlwZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsK ICAgICAgICBfX3U4IHNlcXVlbmNlIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9f dTggY29ubl9sb3cgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191OCB0YXNrIF9f YXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTggY29ubl9oaWdoIF9fYXR0cmlidXRl X18oKHBhY2tlZCkpOwogICAgICAgIF9fdTggY29tcGxldGlvbl9jb2RlIF9fYXR0cmlidXRlX18o KHBhY2tlZCkpOwogICAgICAgIF9fdTggY29ubmVjdGlvbl9zdGF0ZSBfX2F0dHJpYnV0ZV9fKChw YWNrZWQpKTsKICAgICAgICBfX3U4IGRhdGFbMF0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cn07 CgoKCnN0cnVjdCBuY3Bfdm9sdW1lX2luZm8gewogICAgICAgIF9fdTMyIHRvdGFsX2Jsb2NrczsK ICAgICAgICBfX3UzMiBmcmVlX2Jsb2NrczsKICAgICAgICBfX3UzMiBwdXJnZWFibGVfYmxvY2tz OwogICAgICAgIF9fdTMyIG5vdF95ZXRfcHVyZ2VhYmxlX2Jsb2NrczsKICAgICAgICBfX3UzMiB0 b3RhbF9kaXJfZW50cmllczsKICAgICAgICBfX3UzMiBhdmFpbGFibGVfZGlyX2VudHJpZXM7CiAg ICAgICAgX191OCBzZWN0b3JzX3Blcl9ibG9jazsKICAgICAgICBjaGFyIHZvbHVtZV9uYW1lWygx NikgKyAxXTsKfTsKIyAxMTIgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgv bmNwLmgiCnN0cnVjdCBud19pbmZvX3N0cnVjdCB7CiAgICAgICAgX191MzIgc3BhY2VBbGxvYyBf X2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3UzMiBhdHRyaWJ1dGVzIF9fYXR0cmli dXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTE2IGZsYWdzIF9fYXR0cmlidXRlX18oKHBhY2tl ZCkpOwogICAgICAgIF9fdTMyIGRhdGFTdHJlYW1TaXplIF9fYXR0cmlidXRlX18oKHBhY2tlZCkp OwogICAgICAgIF9fdTMyIHRvdGFsU3RyZWFtU2l6ZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsK ICAgICAgICBfX3UxNiBudW1iZXJPZlN0cmVhbXMgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAg ICAgICAgX191MTYgY3JlYXRpb25UaW1lIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAg IF9fdTE2IGNyZWF0aW9uRGF0ZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3Uz MiBjcmVhdG9ySUQgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191MTYgbW9kaWZ5 VGltZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3UxNiBtb2RpZnlEYXRlIF9f YXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTMyIG1vZGlmaWVySUQgX19hdHRyaWJ1 dGVfXygocGFja2VkKSk7CiAgICAgICAgX191MTYgbGFzdEFjY2Vzc0RhdGUgX19hdHRyaWJ1dGVf XygocGFja2VkKSk7CiAgICAgICAgX191MTYgYXJjaGl2ZVRpbWUgX19hdHRyaWJ1dGVfXygocGFj a2VkKSk7CiAgICAgICAgX191MTYgYXJjaGl2ZURhdGUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7 CiAgICAgICAgX191MzIgYXJjaGl2ZXJJRCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAg ICBfX3UxNiBpbmhlcml0ZWRSaWdodHNNYXNrIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAg ICAgIF9fdTMyIGRpckVudE51bSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3Uz MiBEb3NEaXJOdW0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191MzIgdm9sTnVt YmVyIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTMyIEVBRGF0YVNpemUgX19h dHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191MzIgRUFLZXlDb3VudCBfX2F0dHJpYnV0 ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3UzMiBFQUtleVNpemUgX19hdHRyaWJ1dGVfXygocGFj a2VkKSk7CiAgICAgICAgX191MzIgTlNDcmVhdG9yIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwog ICAgICAgIF9fdTggbmFtZUxlbiBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3U4 IGVudHJ5TmFtZVsyNTZdIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwp9OwojIDE1NiAiL3Vzci9z cmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9uY3AuaCIKc3RydWN0IG53X21vZGlmeV9k b3NfaW5mbyB7CiAgICAgICAgX191MzIgYXR0cmlidXRlcyBfX2F0dHJpYnV0ZV9fKChwYWNrZWQp KTsKICAgICAgICBfX3UxNiBjcmVhdGlvbkRhdGUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAg ICAgICAgX191MTYgY3JlYXRpb25UaW1lIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAg IF9fdTMyIGNyZWF0b3JJRCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3UxNiBt b2RpZnlEYXRlIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTE2IG1vZGlmeVRp bWUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191MzIgbW9kaWZpZXJJRCBfX2F0 dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3UxNiBhcmNoaXZlRGF0ZSBfX2F0dHJpYnV0 ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3UxNiBhcmNoaXZlVGltZSBfX2F0dHJpYnV0ZV9fKChw YWNrZWQpKTsKICAgICAgICBfX3UzMiBhcmNoaXZlcklEIF9fYXR0cmlidXRlX18oKHBhY2tlZCkp OwogICAgICAgIF9fdTE2IGxhc3RBY2Nlc3NEYXRlIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwog ICAgICAgIF9fdTE2IGluaGVyaXRhbmNlR3JhbnRNYXNrIF9fYXR0cmlidXRlX18oKHBhY2tlZCkp OwogICAgICAgIF9fdTE2IGluaGVyaXRhbmNlUmV2b2tlTWFzayBfX2F0dHJpYnV0ZV9fKChwYWNr ZWQpKTsKICAgICAgICBfX3UzMiBtYXhpbXVtU3BhY2UgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7 Cn07CgpzdHJ1Y3Qgbndfc2VhcmNoX3NlcXVlbmNlIHsKICAgICAgICBfX3U4IHZvbE51bWJlciBf X2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3UzMiBkaXJCYXNlIF9fYXR0cmlidXRl X18oKHBhY2tlZCkpOwogICAgICAgIF9fdTMyIHNlcXVlbmNlIF9fYXR0cmlidXRlX18oKHBhY2tl ZCkpOwp9OwojIDEzICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L25jcF9t b3VudC5oIiAyCiMgMjUgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbmNw X21vdW50LmgiCnN0cnVjdCBuY3BfbW91bnRfZGF0YSB7CiAgICAgICAgaW50IHZlcnNpb247CiAg ICAgICAgdW5zaWduZWQgaW50IG5jcF9mZDsKICAgICAgICBfX2tlcm5lbF91aWRfdCBtb3VudGVk X3VpZDsKICAgICAgICBfX2tlcm5lbF9waWRfdCB3ZG9nX3BpZDsKCiAgICAgICAgdW5zaWduZWQg Y2hhciBtb3VudGVkX3ZvbFsoMTYpICsgMV07CiAgICAgICAgdW5zaWduZWQgaW50IHRpbWVfb3V0 OwoKICAgICAgICB1bnNpZ25lZCBpbnQgcmV0cnlfY291bnQ7CiAgICAgICAgdW5zaWduZWQgaW50 IGZsYWdzOwoKICAgICAgICBfX2tlcm5lbF91aWRfdCB1aWQ7CiAgICAgICAgX19rZXJuZWxfZ2lk X3QgZ2lkOwogICAgICAgIF9fa2VybmVsX21vZGVfdCBmaWxlX21vZGU7CiAgICAgICAgX19rZXJu ZWxfbW9kZV90IGRpcl9tb2RlOwp9OwoKCgpzdHJ1Y3QgbmNwX21vdW50X2RhdGFfdjQgewogICAg ICAgIGludCB2ZXJzaW9uOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CgoKICAgICAgICB1 bnNpZ25lZCBsb25nIG1vdW50ZWRfdWlkOwoKICAgICAgICBsb25nIHdkb2dfcGlkOwoKICAgICAg ICB1bnNpZ25lZCBpbnQgbmNwX2ZkOwogICAgICAgIHVuc2lnbmVkIGludCB0aW1lX291dDsKCiAg ICAgICAgdW5zaWduZWQgaW50IHJldHJ5X2NvdW50OwoKCgogICAgICAgIHVuc2lnbmVkIGxvbmcg dWlkOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZ2lkOwoKICAgICAgICB1bnNpZ25lZCBsb25nIGZp bGVfbW9kZTsKICAgICAgICB1bnNpZ25lZCBsb25nIGRpcl9tb2RlOwp9OwoKCgpzdHJ1Y3QgbmNw X21vdW50X2RhdGFfa2VybmVsIHsKICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogICAgICAg IHVuc2lnbmVkIGludCBpbnRfZmxhZ3M7CgogICAgICAgIF9fa2VybmVsX3VpZDMyX3QgbW91bnRl ZF91aWQ7CiAgICAgICAgX19rZXJuZWxfcGlkX3Qgd2RvZ19waWQ7CiAgICAgICAgdW5zaWduZWQg aW50IG5jcF9mZDsKICAgICAgICB1bnNpZ25lZCBpbnQgdGltZV9vdXQ7CgogICAgICAgIHVuc2ln bmVkIGludCByZXRyeV9jb3VudDsKICAgICAgICB1bnNpZ25lZCBjaGFyIG1vdW50ZWRfdm9sWygx NikgKyAxXTsKICAgICAgICBfX2tlcm5lbF91aWQzMl90IHVpZDsKICAgICAgICBfX2tlcm5lbF9n aWQzMl90IGdpZDsKICAgICAgICBfX2tlcm5lbF9tb2RlX3QgZmlsZV9tb2RlOwogICAgICAgIF9f a2VybmVsX21vZGVfdCBkaXJfbW9kZTsKfTsKIyAxMyAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgv aW5jbHVkZS9saW51eC9uY3BfZnNfc2IuaCIgMgoKCgoKCnN0cnVjdCBuY3Bfc2VydmVyIHsKCiAg ICAgICAgc3RydWN0IG5jcF9tb3VudF9kYXRhX2tlcm5lbCBtOwoKCgogICAgICAgIF9fdTggbmFt ZV9zcGFjZVsoNjQpICsgMl07CgogICAgICAgIHN0cnVjdCBmaWxlICpuY3BfZmlscDsKCiAgICAg ICAgdTggc2VxdWVuY2U7CiAgICAgICAgdTggdGFzazsKICAgICAgICB1MTYgY29ubmVjdGlvbjsK CiAgICAgICAgdTggY29tcGxldGlvbjsKICAgICAgICB1OCBjb25uX3N0YXR1czsKCgoKICAgICAg ICBpbnQgYnVmZmVyX3NpemU7CgogICAgICAgIGludCByZXBseV9zaXplOwoKICAgICAgICBpbnQg cGFja2V0X3NpemU7CiAgICAgICAgdW5zaWduZWQgY2hhciAqcGFja2V0OwoKCiAgICAgICAgaW50 IGxvY2s7CiAgICAgICAgc3RydWN0IHNlbWFwaG9yZSBzZW07CgogICAgICAgIGludCBjdXJyZW50 X3NpemU7CiAgICAgICAgaW50IGhhc19zdWJmdW5jdGlvbjsKICAgICAgICBpbnQgbmNwX3JlcGx5 X3NpemU7CgogICAgICAgIGludCByb290X3NldHVwZWQ7CgoKICAgICAgICBpbnQgc2lnbl93YW50 ZWQ7CiAgICAgICAgaW50IHNpZ25fYWN0aXZlOwogICAgICAgIGNoYXIgc2lnbl9yb290WzhdOwog ICAgICAgIGNoYXIgc2lnbl9sYXN0WzE2XTsKCgogICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAg ICAgICBpbnQgYXV0aF90eXBlOwogICAgICAgICAgICAgICAgc2l6ZV90IG9iamVjdF9uYW1lX2xl bjsKICAgICAgICAgICAgICAgIHZvaWQqIG9iamVjdF9uYW1lOwogICAgICAgICAgICAgICAgaW50 IG9iamVjdF90eXBlOwogICAgICAgIH0gYXV0aDsKCiAgICAgICAgc3RydWN0IHsKICAgICAgICAg ICAgICAgIHNpemVfdCBsZW47CiAgICAgICAgICAgICAgICB2b2lkKiBkYXRhOwogICAgICAgIH0g cHJpdjsKCgogICAgICAgIHN0cnVjdCBubHNfdGFibGUgKm5sc192b2w7CiAgICAgICAgc3RydWN0 IG5sc190YWJsZSAqbmxzX2lvOwoKCiAgICAgICAgaW50IGRlbnRyeV90dGw7CgoKICAgICAgICB1 bnNpZ25lZCBpbnQgZmxhZ3M7Cn07CiMgOTIgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1 ZGUvbGludXgvbmNwX2ZzX3NiLmgiCnN0YXRpYyBpbmxpbmUgaW50IG5jcF9jb25uX3ZhbGlkKHN0 cnVjdCBuY3Bfc2VydmVyICpzZXJ2ZXIpCnsKICAgICAgICByZXR1cm4gKChzZXJ2ZXItPmNvbm5f c3RhdHVzICYgMHgxMSkgPT0gMCk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBuY3BfaW52YWxpZGF0 ZV9jb25uKHN0cnVjdCBuY3Bfc2VydmVyICpzZXJ2ZXIpCnsKICAgICAgICBzZXJ2ZXItPmNvbm5f c3RhdHVzIHw9IDB4MDE7Cn0KIyA3MzQgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUv bGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgv dXNiZGV2X2ZzX3NiLmgiIDEKc3RydWN0IHVzYmRldl9zYl9pbmZvIHsKICAgICAgICBzdHJ1Y3Qg bGlzdF9oZWFkIHNsaXN0OwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgaWxpc3Q7CiAgICAgICAg dWlkX3QgZGV2dWlkOwogICAgICAgIGdpZF90IGRldmdpZDsKICAgICAgICB1bW9kZV90IGRldm1v ZGU7CiAgICAgICAgdWlkX3QgYnVzdWlkOwogICAgICAgIGdpZF90IGJ1c2dpZDsKICAgICAgICB1 bW9kZV90IGJ1c21vZGU7CiAgICAgICAgdWlkX3QgbGlzdHVpZDsKICAgICAgICBnaWRfdCBsaXN0 Z2lkOwogICAgICAgIHVtb2RlX3QgbGlzdG1vZGU7Cn07CiMgNzM1ICIvdXNyL3NyYy9saW51eC0y LjQuMjAtOC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIw LTgvaW5jbHVkZS9saW51eC9qZmZzMl9mc19zYi5oIiAxCgoKCgoKCgojIDEgIi91c3Ivc3JjL2xp bnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvY29tcGxldGlvbi5oIiAxCiMgMTMgIi91c3Ivc3Jj L2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvY29tcGxldGlvbi5oIgpzdHJ1Y3QgY29tcGxl dGlvbiB7CiAgICAgICAgdW5zaWduZWQgaW50IGRvbmU7CiAgICAgICAgd2FpdF9xdWV1ZV9oZWFk X3Qgd2FpdDsKfTsKCgoKCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2NvbXBsZXRpb24oc3Ry dWN0IGNvbXBsZXRpb24gKngpCnsKICAgICAgICB4LT5kb25lID0gMDsKICAgICAgICBpbml0X3dh aXRxdWV1ZV9oZWFkKCZ4LT53YWl0KTsKfQoKZXh0ZXJuIHZvaWQgd2FpdF9mb3JfY29tcGxldGlv bl9SZGMwMTY0ODgoc3RydWN0IGNvbXBsZXRpb24gKikgX19hdHRyaWJ1dGVfXygocmVncGFybSgz KSkpOwpleHRlcm4gdm9pZCBjb21wbGV0ZV9SOTQyNjEzYWQoc3RydWN0IGNvbXBsZXRpb24gKikg X19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkpOwpleHRlcm4gdm9pZCBjb21wbGV0ZV9hbGwoc3Ry dWN0IGNvbXBsZXRpb24gKikgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkpOwojIDkgIi91c3Iv c3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvamZmczJfZnNfc2IuaCIgMgojIDIxICIv dXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2pmZnMyX2ZzX3NiLmgiCnN0cnVj dCBqZmZzMl9zYl9pbmZvIHsKICAgICAgICBzdHJ1Y3QgbXRkX2luZm8gKm10ZDsKCiAgICAgICAg X191MzIgaGlnaGVzdF9pbm87CiAgICAgICAgdW5zaWduZWQgaW50IGZsYWdzOwogICAgICAgIHNw aW5sb2NrX3Qgbm9kZWxpc3RfbG9jazsKCgogICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqZ2Nf dGFzazsKICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlIGdjX3RocmVhZF9zdGFydDsKICAgICAgICBz dHJ1Y3QgY29tcGxldGlvbiBnY190aHJlYWRfZXhpdDsKCgoKICAgICAgICBzdHJ1Y3Qgc2VtYXBo b3JlIGFsbG9jX3NlbTsKCgoKCiAgICAgICAgX191MzIgZmxhc2hfc2l6ZTsKICAgICAgICBfX3Uz MiB1c2VkX3NpemU7CiAgICAgICAgX191MzIgZGlydHlfc2l6ZTsKICAgICAgICBfX3UzMiBmcmVl X3NpemU7CiAgICAgICAgX191MzIgZXJhc2luZ19zaXplOwogICAgICAgIF9fdTMyIGJhZF9zaXpl OwogICAgICAgIF9fdTMyIHNlY3Rvcl9zaXplOwoKCgogICAgICAgIF9fdTMyIG5yX2ZyZWVfYmxv Y2tzOwogICAgICAgIF9fdTMyIG5yX2VyYXNpbmdfYmxvY2tzOwoKICAgICAgICBfX3UzMiBucl9i bG9ja3M7CiAgICAgICAgc3RydWN0IGpmZnMyX2VyYXNlYmxvY2sgKmJsb2NrczsKCiAgICAgICAg c3RydWN0IGpmZnMyX2VyYXNlYmxvY2sgKm5leHRibG9jazsKCiAgICAgICAgc3RydWN0IGpmZnMy X2VyYXNlYmxvY2sgKmdjYmxvY2s7CgogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgY2xlYW5fbGlz dDsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGRpcnR5X2xpc3Q7CiAgICAgICAgc3RydWN0IGxp c3RfaGVhZCBlcmFzaW5nX2xpc3Q7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBlcmFzZV9wZW5k aW5nX2xpc3Q7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBlcmFzZV9jb21wbGV0ZV9saXN0Owog ICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgZnJlZV9saXN0OwogICAgICAgIHN0cnVjdCBsaXN0X2hl YWQgYmFkX2xpc3Q7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBiYWRfdXNlZF9saXN0OwoKICAg ICAgICBzcGlubG9ja190IGVyYXNlX2NvbXBsZXRpb25fbG9jazsKCiAgICAgICAgd2FpdF9xdWV1 ZV9oZWFkX3QgZXJhc2Vfd2FpdDsKICAgICAgICBzdHJ1Y3QgamZmczJfaW5vZGVfY2FjaGUgKmlu b2NhY2hlX2xpc3RbMV07CiAgICAgICAgc3BpbmxvY2tfdCBpbm9jYWNoZV9sb2NrOwp9OwojIDcz NyAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9mcy5oIiAyCgpleHRlcm4g c3RydWN0IGxpc3RfaGVhZCBzdXBlcl9ibG9ja3M7CmV4dGVybiBzcGlubG9ja190IHNiX2xvY2s7 CgoKCnN0cnVjdCBzdXBlcl9ibG9jayB7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBzX2xpc3Q7 CiAgICAgICAga2Rldl90IHNfZGV2OwogICAgICAgIHVuc2lnbmVkIGxvbmcgc19ibG9ja3NpemU7 CiAgICAgICAgdW5zaWduZWQgY2hhciBzX2Jsb2Nrc2l6ZV9iaXRzOwogICAgICAgIHVuc2lnbmVk IGNoYXIgc19kaXJ0OwogICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBzX21heGJ5dGVzOwogICAg ICAgIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpzX3R5cGU7CiAgICAgICAgc3RydWN0IHN1cGVy X29wZXJhdGlvbnMgKnNfb3A7CiAgICAgICAgc3RydWN0IGRxdW90X29wZXJhdGlvbnMgKmRxX29w OwogICAgICAgIHN0cnVjdCBxdW90YWN0bF9vcHMgKnNfcWNvcDsKICAgICAgICB1bnNpZ25lZCBs b25nIHNfZmxhZ3M7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzX21hZ2ljOwogICAgICAgIHN0cnVj dCBkZW50cnkgKnNfcm9vdDsKICAgICAgICBzdHJ1Y3Qgcndfc2VtYXBob3JlIHNfdW1vdW50Owog ICAgICAgIHN0cnVjdCBzZW1hcGhvcmUgc19sb2NrOwogICAgICAgIGludCBzX2NvdW50OwogICAg ICAgIGF0b21pY190IHNfYWN0aXZlOwoKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIHNfZGlydHk7 CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBzX2xvY2tlZF9pbm9kZXM7CiAgICAgICAgc3RydWN0 IGxpc3RfaGVhZCBzX2ZpbGVzOwoKICAgICAgICBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpzX2JkZXY7 CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBzX2luc3RhbmNlczsKICAgICAgICBzdHJ1Y3QgcXVv dGFfaW5mbyBzX2RxdW90OwoKICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICAgICBzdHJ1Y3Qg bWluaXhfc2JfaW5mbyBtaW5peF9zYjsKICAgICAgICAgICAgICAgIHN0cnVjdCBleHQyX3NiX2lu Zm8gZXh0Ml9zYjsKICAgICAgICAgICAgICAgIHN0cnVjdCBleHQzX3NiX2luZm8gZXh0M19zYjsK ICAgICAgICAgICAgICAgIHN0cnVjdCBocGZzX3NiX2luZm8gaHBmc19zYjsKICAgICAgICAgICAg ICAgIHN0cnVjdCBudGZzX3NiX2luZm8gbnRmc19zYjsKICAgICAgICAgICAgICAgIHN0cnVjdCBt c2Rvc19zYl9pbmZvIG1zZG9zX3NiOwogICAgICAgICAgICAgICAgc3RydWN0IGlzb2ZzX3NiX2lu Zm8gaXNvZnNfc2I7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgbmZzX3NiX2luZm8gbmZzX3NiOwog ICAgICAgICAgICAgICAgc3RydWN0IHN5c3Zfc2JfaW5mbyBzeXN2X3NiOwogICAgICAgICAgICAg ICAgc3RydWN0IGFmZnNfc2JfaW5mbyBhZmZzX3NiOwogICAgICAgICAgICAgICAgc3RydWN0IHVm c19zYl9pbmZvIHVmc19zYjsKICAgICAgICAgICAgICAgIHN0cnVjdCBlZnNfc2JfaW5mbyBlZnNf c2I7CiAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2htZW1fc2JfaW5mbyBzaG1lbV9zYjsKICAgICAg ICAgICAgICAgIHN0cnVjdCByb21mc19zYl9pbmZvIHJvbWZzX3NiOwogICAgICAgICAgICAgICAg c3RydWN0IHNtYl9zYl9pbmZvIHNtYmZzX3NiOwogICAgICAgICAgICAgICAgc3RydWN0IGhmc19z Yl9pbmZvIGhmc19zYjsKICAgICAgICAgICAgICAgIHN0cnVjdCBhZGZzX3NiX2luZm8gYWRmc19z YjsKICAgICAgICAgICAgICAgIHN0cnVjdCBxbng0X3NiX2luZm8gcW54NF9zYjsKICAgICAgICAg ICAgICAgIHN0cnVjdCByZWlzZXJmc19zYl9pbmZvIHJlaXNlcmZzX3NiOwogICAgICAgICAgICAg ICAgc3RydWN0IGJmc19zYl9pbmZvIGJmc19zYjsKICAgICAgICAgICAgICAgIHN0cnVjdCB1ZGZf c2JfaW5mbyB1ZGZfc2I7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgbmNwX3NlcnZlciBuY3Bmc19z YjsKICAgICAgICAgICAgICAgIHN0cnVjdCB1c2JkZXZfc2JfaW5mbyB1c2JkZXZmc19zYjsKICAg ICAgICAgICAgICAgIHN0cnVjdCBqZmZzMl9zYl9pbmZvIGpmZnMyX3NiOwogICAgICAgICAgICAg ICAgc3RydWN0IGNyYW1mc19zYl9pbmZvIGNyYW1mc19zYjsKICAgICAgICAgICAgICAgIHZvaWQg KmdlbmVyaWNfc2JwOwogICAgICAgIH0gdTsKCgoKCiAgICAgICAgc3RydWN0IHNlbWFwaG9yZSBz X3Zmc19yZW5hbWVfc2VtOwojIDgxMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9s aW51eC9mcy5oIgogICAgICAgIHN0cnVjdCBzZW1hcGhvcmUgc19uZnNkX2ZyZWVfcGF0aF9zZW07 Cn07CgoKCgpleHRlcm4gaW50IHZmc19jcmVhdGVfUmU4YjUyYmU1KHN0cnVjdCBpbm9kZSAqLCBz dHJ1Y3QgZGVudHJ5ICosIGludCk7CmV4dGVybiBpbnQgdmZzX21rZGlyX1IzYzllNzVjYShzdHJ1 Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqLCBpbnQpOwpleHRlcm4gaW50IHZmc19ta25vZF9S OThmNTZlMjcoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKiwgaW50LCBkZXZfdCk7CmV4 dGVybiBpbnQgdmZzX3N5bWxpbmtfUjZlNjJkMTVlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVu dHJ5ICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgdmZzX2xpbmtfUjNmODVlZDNmKHN0cnVj dCBkZW50cnkgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKik7CmV4dGVybiBpbnQg dmZzX3JtZGlyX1I5YjAzMmVjZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqKTsKZXh0 ZXJuIGludCB2ZnNfdW5saW5rX1IzMjE2MzhmZChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRy eSAqKTsKZXh0ZXJuIGludCB2ZnNfcmVuYW1lX1IyNTQ5M2I0YyhzdHJ1Y3QgaW5vZGUgKiwgc3Ry dWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqKTsKIyA4NDUgIi91 c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvZnMuaCIKdHlwZWRlZiBpbnQgKCpm aWxsZGlyX3QpKHZvaWQgKiwgY29uc3QgY2hhciAqLCBpbnQsIGxvZmZfdCwgaW5vX3QsIHVuc2ln bmVkKTsKCnN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyB7CiAgICAgICAgaW50ICgqb3Bl bikgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKICAgICAgICBpbnQgKCpyZWxlYXNl KSAoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOwogICAgICAgIGludCAoKmlvY3RsKSAo c3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICosIHVuc2lnbmVkLCB1bnNpZ25lZCBsb25nKTsK ICAgICAgICBpbnQgKCpjaGVja19tZWRpYV9jaGFuZ2UpIChrZGV2X3QpOwogICAgICAgIGludCAo KnJldmFsaWRhdGUpIChrZGV2X3QpOwogICAgICAgIHN0cnVjdCBtb2R1bGUgKm93bmVyOwp9OwoK CgoKCgpzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHsKICAgICAgICBzdHJ1Y3QgbW9kdWxlICpvd25l cjsKICAgICAgICBsb2ZmX3QgKCpsbHNlZWspIChzdHJ1Y3QgZmlsZSAqLCBsb2ZmX3QsIGludCk7 CiAgICAgICAgc3NpemVfdCAoKnJlYWQpIChzdHJ1Y3QgZmlsZSAqLCBjaGFyICosIHNpemVfdCwg bG9mZl90ICopOwogICAgICAgIHNzaXplX3QgKCp3cml0ZSkgKHN0cnVjdCBmaWxlICosIGNvbnN0 IGNoYXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7CiAgICAgICAgaW50ICgqcmVhZGRpcikgKHN0cnVj dCBmaWxlICosIHZvaWQgKiwgZmlsbGRpcl90KTsKICAgICAgICB1bnNpZ25lZCBpbnQgKCpwb2xs KSAoc3RydWN0IGZpbGUgKiwgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICopOwogICAgICAgIGlu dCAoKmlvY3RsKSAoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwg dW5zaWduZWQgbG9uZyk7CiAgICAgICAgaW50ICgqbW1hcCkgKHN0cnVjdCBmaWxlICosIHN0cnVj dCB2bV9hcmVhX3N0cnVjdCAqKTsKICAgICAgICBpbnQgKCpvcGVuKSAoc3RydWN0IGlub2RlICos IHN0cnVjdCBmaWxlICopOwogICAgICAgIGludCAoKmZsdXNoKSAoc3RydWN0IGZpbGUgKik7CiAg ICAgICAgaW50ICgqcmVsZWFzZSkgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKICAg ICAgICBpbnQgKCpmc3luYykgKHN0cnVjdCBmaWxlICosIHN0cnVjdCBkZW50cnkgKiwgaW50IGRh dGFzeW5jKTsKICAgICAgICBpbnQgKCpmYXN5bmMpIChpbnQsIHN0cnVjdCBmaWxlICosIGludCk7 CiAgICAgICAgaW50ICgqbG9jaykgKHN0cnVjdCBmaWxlICosIGludCwgc3RydWN0IGZpbGVfbG9j ayAqKTsKICAgICAgICBzc2l6ZV90ICgqcmVhZHYpIChzdHJ1Y3QgZmlsZSAqLCBjb25zdCBzdHJ1 Y3QgaW92ZWMgKiwgdW5zaWduZWQgbG9uZywgbG9mZl90ICopOwogICAgICAgIHNzaXplX3QgKCp3 cml0ZXYpIChzdHJ1Y3QgZmlsZSAqLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKiwgdW5zaWduZWQgbG9u ZywgbG9mZl90ICopOwogICAgICAgIHNzaXplX3QgKCpzZW5kcGFnZSkgKHN0cnVjdCBmaWxlICos IHN0cnVjdCBwYWdlICosIGludCwgc2l6ZV90LCBsb2ZmX3QgKiwgaW50KTsKICAgICAgICB1bnNp Z25lZCBsb25nICgqZ2V0X3VubWFwcGVkX2FyZWFfUjUxNDdlNDIzKShzdHJ1Y3QgZmlsZSAqLCB1 bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25n KTsKfTsKCnN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHsKICAgICAgICBpbnQgKCpjcmVhdGUpIChz dHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5ICosaW50KTsKICAgICAgICBzdHJ1Y3QgZGVudHJ5 ICogKCpsb29rdXApIChzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5ICopOwogICAgICAgIGlu dCAoKmxpbmspIChzdHJ1Y3QgZGVudHJ5ICosc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAq KTsKICAgICAgICBpbnQgKCp1bmxpbmspIChzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5ICop OwogICAgICAgIGludCAoKnN5bWxpbmspIChzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5ICos Y29uc3QgY2hhciAqKTsKICAgICAgICBpbnQgKCpta2RpcikgKHN0cnVjdCBpbm9kZSAqLHN0cnVj dCBkZW50cnkgKixpbnQpOwogICAgICAgIGludCAoKnJtZGlyKSAoc3RydWN0IGlub2RlICosc3Ry dWN0IGRlbnRyeSAqKTsKICAgICAgICBpbnQgKCpta25vZCkgKHN0cnVjdCBpbm9kZSAqLHN0cnVj dCBkZW50cnkgKixpbnQsaW50KTsKICAgICAgICBpbnQgKCpyZW5hbWUpIChzdHJ1Y3QgaW5vZGUg Kiwgc3RydWN0IGRlbnRyeSAqLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaW5vZGUg Kiwgc3RydWN0IGRlbnRyeSAqKTsKICAgICAgICBpbnQgKCpyZWFkbGluaykgKHN0cnVjdCBkZW50 cnkgKiwgY2hhciAqLGludCk7CiAgICAgICAgaW50ICgqZm9sbG93X2xpbmspIChzdHJ1Y3QgZGVu dHJ5ICosIHN0cnVjdCBuYW1laWRhdGEgKik7CiAgICAgICAgdm9pZCAoKnRydW5jYXRlKSAoc3Ry dWN0IGlub2RlICopOwogICAgICAgIGludCAoKnBlcm1pc3Npb25fUmM0MzI1ODQ5KSAoc3RydWN0 IGlub2RlICosIGludCk7CiAgICAgICAgaW50ICgqcmV2YWxpZGF0ZSkgKHN0cnVjdCBkZW50cnkg Kik7CiAgICAgICAgaW50ICgqc2V0YXR0cikgKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlhdHRy ICopOwogICAgICAgIGludCAoKmdldGF0dHIpIChzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpYXR0 ciAqKTsKICAgICAgICBpbnQgKCpzZXR4YXR0cikgKHN0cnVjdCBkZW50cnkgKiwgY29uc3QgY2hh ciAqLCB2b2lkICosIHNpemVfdCwgaW50KTsKICAgICAgICBzc2l6ZV90ICgqZ2V0eGF0dHIpIChz dHJ1Y3QgZGVudHJ5ICosIGNvbnN0IGNoYXIgKiwgdm9pZCAqLCBzaXplX3QpOwogICAgICAgIHNz aXplX3QgKCpsaXN0eGF0dHIpIChzdHJ1Y3QgZGVudHJ5ICosIGNoYXIgKiwgc2l6ZV90KTsKICAg ICAgICBpbnQgKCpyZW1vdmV4YXR0cikgKHN0cnVjdCBkZW50cnkgKiwgY29uc3QgY2hhciAqKTsK fTsKCnN0cnVjdCBzZXFfZmlsZTsKCgoKCgpzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyB7CiAgICAg ICAgc3RydWN0IGlub2RlICooKmFsbG9jX2lub2RlKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsK ICAgICAgICB2b2lkICgqZGVzdHJveV9pbm9kZSkoc3RydWN0IGlub2RlICopOwoKICAgICAgICB2 b2lkICgqcmVhZF9pbm9kZSkgKHN0cnVjdCBpbm9kZSAqKTsKCgoKCgoKCiAgICAgICAgdm9pZCAo KnJlYWRfaW5vZGUyKSAoc3RydWN0IGlub2RlICosIHZvaWQgKikgOwogICAgICAgIHZvaWQgKCpk aXJ0eV9pbm9kZSkgKHN0cnVjdCBpbm9kZSAqKTsKICAgICAgICB2b2lkICgqd3JpdGVfaW5vZGUp IChzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKICAgICAgICB2b2lkICgqcHV0X2lub2RlKSAoc3RydWN0 IGlub2RlICopOwogICAgICAgIHZvaWQgKCpkZWxldGVfaW5vZGUpIChzdHJ1Y3QgaW5vZGUgKik7 CiAgICAgICAgdm9pZCAoKnB1dF9zdXBlcikgKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKICAgICAg ICB2b2lkICgqd3JpdGVfc3VwZXIpIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CiAgICAgICAgaW50 ICgqc3luY19mcykgKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKICAgICAgICB2b2lkICgqd3JpdGVf c3VwZXJfbG9ja2ZzKSAoc3RydWN0IHN1cGVyX2Jsb2NrICopOwogICAgICAgIHZvaWQgKCp1bmxv Y2tmc19SMmNlYjFiZGIpIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CiAgICAgICAgaW50ICgqc3Rh dGZzKSAoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBzdGF0ZnMgKik7CiAgICAgICAgaW50 ICgqcmVtb3VudF9mcykgKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbnQgKiwgY2hhciAqKTsKICAg ICAgICB2b2lkICgqY2xlYXJfaW5vZGVfUjNiZDNhZmI4KSAoc3RydWN0IGlub2RlICopOwogICAg ICAgIHZvaWQgKCp1bW91bnRfYmVnaW4pIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CiMgOTYxICIv dXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2ZzLmgiCiAgICAgICAgc3RydWN0 IGRlbnRyeSAqICgqZmhfdG9fZGVudHJ5KShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBfX3UzMiAq ZmgsIGludCBsZW4sIGludCBmaHR5cGUsIGludCBwYXJlbnQpOwogICAgICAgIGludCAoKmRlbnRy eV90b19maCkoc3RydWN0IGRlbnRyeSAqLCBfX3UzMiAqZmgsIGludCAqbGVucCwgaW50IG5lZWRf cGFyZW50KTsKICAgICAgICBpbnQgKCpzaG93X29wdGlvbnMpKHN0cnVjdCBzZXFfZmlsZSAqLCBz dHJ1Y3QgdmZzbW91bnQgKik7Cn07CiMgOTc2ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNs dWRlL2xpbnV4L2ZzLmgiCmV4dGVybiB2b2lkIF9fbWFya19pbm9kZV9kaXJ0eV9SNzM2NDdiYWEo c3RydWN0IGlub2RlICosIGludCk7CnN0YXRpYyBpbmxpbmUgdm9pZCBtYXJrX2lub2RlX2RpcnR5 KHN0cnVjdCBpbm9kZSAqaW5vZGUpCnsKICAgICAgICBfX21hcmtfaW5vZGVfZGlydHlfUjczNjQ3 YmFhKGlub2RlLCAoMSB8IDIgfCA0KSk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBtYXJrX2lub2Rl X2RpcnR5X3N5bmMoc3RydWN0IGlub2RlICppbm9kZSkKewogICAgICAgIF9fbWFya19pbm9kZV9k aXJ0eV9SNzM2NDdiYWEoaW5vZGUsIDEpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgbWFya19pbm9k ZV9kaXJ0eV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQp7CiAgICAgICAgX19tYXJrX2lub2Rl X2RpcnR5X1I3MzY0N2JhYShpbm9kZSwgNCk7Cn0KCnN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIHsK ICAgICAgICBjb25zdCBjaGFyICpuYW1lOwogICAgICAgIGludCBmc19mbGFnczsKICAgICAgICBz dHJ1Y3Qgc3VwZXJfYmxvY2sgKigqcmVhZF9zdXBlcikgKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB2 b2lkICosIGludCk7CiAgICAgICAgc3RydWN0IG1vZHVsZSAqb3duZXI7CiAgICAgICAgc3RydWN0 IGZpbGVfc3lzdGVtX3R5cGUgKiBuZXh0OwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgZnNfc3Vw ZXJzOwp9OwojIDEwMjQgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvZnMu aCIKZXh0ZXJuIGludCByZWdpc3Rlcl9maWxlc3lzdGVtX1I4MGMxMDEyOShzdHJ1Y3QgZmlsZV9z eXN0ZW1fdHlwZSAqKTsKZXh0ZXJuIGludCB1bnJlZ2lzdGVyX2ZpbGVzeXN0ZW1fUjFkMTI0YTZh KHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICopOwpleHRlcm4gc3RydWN0IHZmc21vdW50ICprZXJu X21vdW50X1IxY2E5ZWUyOChzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqKTsKZXh0ZXJuIGludCBt YXlfdW1vdW50X1I2MTliNWQ2NihzdHJ1Y3QgdmZzbW91bnQgKik7CmV4dGVybiBsb25nIGRvX21v dW50KGNoYXIgKiwgY2hhciAqLCBjaGFyICosIHVuc2lnbmVkIGxvbmcsIHZvaWQgKik7CgoKCmV4 dGVybiBpbnQgdmZzX3N0YXRmc19SYzJlNjBkZWUoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVj dCBzdGF0ZnMgKik7CiMgMTA0MiAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51 eC9mcy5oIgpleHRlcm4gaW50IGxvY2tzX21hbmRhdG9yeV9sb2NrZWQoc3RydWN0IGlub2RlICop OwpleHRlcm4gaW50IGxvY2tzX21hbmRhdG9yeV9hcmVhX1I2ZmY3MzZjMihpbnQsIHN0cnVjdCBp bm9kZSAqLCBzdHJ1Y3QgZmlsZSAqLCBsb2ZmX3QsIHNpemVfdCk7CiMgMTA1MiAiL3Vzci9zcmMv bGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9mcy5oIgpzdGF0aWMgaW5saW5lIGludCBsb2Nr c192ZXJpZnlfbG9ja2VkKHN0cnVjdCBpbm9kZSAqaW5vZGUpCnsKICAgICAgICBpZiAoKCgoaW5v ZGUpLT5pX3NiLT5zX2ZsYWdzICYgKDY0KSkgJiYgKChpbm9kZSktPmlfbW9kZSAmICgwMDAyMDAw IHwgMDAwMTApKSA9PSAwMDAyMDAwKSkKICAgICAgICAgICAgICAgIHJldHVybiBsb2Nrc19tYW5k YXRvcnlfbG9ja2VkKGlub2RlKTsKICAgICAgICByZXR1cm4gMDsKfQoKc3RhdGljIGlubGluZSBp bnQgbG9ja3NfdmVyaWZ5X2FyZWEoaW50IHJlYWRfd3JpdGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBmaWxlICpmaWxwLCBs b2ZmX3Qgb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg Y291bnQpCnsKICAgICAgICBpZiAoaW5vZGUtPmlfZmxvY2sgJiYgKCgoaW5vZGUpLT5pX3NiLT5z X2ZsYWdzICYgKDY0KSkgJiYgKChpbm9kZSktPmlfbW9kZSAmICgwMDAyMDAwIHwgMDAwMTApKSA9 PSAwMDAyMDAwKSkKICAgICAgICAgICAgICAgIHJldHVybiBsb2Nrc19tYW5kYXRvcnlfYXJlYV9S NmZmNzM2YzIocmVhZF93cml0ZSwgaW5vZGUsIGZpbHAsIG9mZnNldCwgY291bnQpOwogICAgICAg IHJldHVybiAwOwp9CgpzdGF0aWMgaW5saW5lIGludCBsb2Nrc192ZXJpZnlfdHJ1bmNhdGUoc3Ry dWN0IGlub2RlICppbm9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IGZpbGUgKmZpbHAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZmZf dCBzaXplKQp7CiAgICAgICAgaWYgKGlub2RlLT5pX2Zsb2NrICYmICgoKGlub2RlKS0+aV9zYi0+ c19mbGFncyAmICg2NCkpICYmICgoaW5vZGUpLT5pX21vZGUgJiAoMDAwMjAwMCB8IDAwMDEwKSkg PT0gMDAwMjAwMCkpCiAgICAgICAgICAgICAgICByZXR1cm4gbG9ja3NfbWFuZGF0b3J5X2FyZWFf UjZmZjczNmMyKAogICAgICAgICAgICAgICAgICAgICAgICAyLCBpbm9kZSwgZmlscCwKICAgICAg ICAgICAgICAgICAgICAgICAgc2l6ZSA8IGlub2RlLT5pX3NpemUgPyBzaXplIDogaW5vZGUtPmlf c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgKHNpemUgPCBpbm9kZS0+aV9zaXplID8gaW5v ZGUtPmlfc2l6ZSAtIHNpemUKICAgICAgICAgICAgICAgICAgICAgICAgIDogc2l6ZSAtIGlub2Rl LT5pX3NpemUpCiAgICAgICAgICAgICAgICApOwogICAgICAgIHJldHVybiAwOwp9CgpzdGF0aWMg aW5saW5lIGludCBnZXRfbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgaW50IG1v ZGUpCnsKICAgICAgICBpZiAoaW5vZGUtPmlfZmxvY2spCiAgICAgICAgICAgICAgICByZXR1cm4g X19nZXRfbGVhc2VfUjRhZDQ0MjkyKGlub2RlLCBtb2RlKTsKICAgICAgICByZXR1cm4gMDsKfQoK CgogX19hdHRyaWJ1dGVfXygocmVncGFybSgwKSkpIGxvbmcgc3lzX29wZW4oY29uc3QgY2hhciAq LCBpbnQsIGludCk7CiBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDApKSkgbG9uZyBzeXNfY2xvc2Vf UjI2OGNjNmEyKHVuc2lnbmVkIGludCk7CmV4dGVybiBpbnQgZG9fdHJ1bmNhdGUoc3RydWN0IGRl bnRyeSAqLCBsb2ZmX3Qgc3RhcnQpOwoKZXh0ZXJuIHN0cnVjdCBmaWxlICpmaWxwX29wZW5fUmZh NjBjNTViKGNvbnN0IGNoYXIgKiwgaW50LCBpbnQpOwpleHRlcm4gc3RydWN0IGZpbGUgKiBkZW50 cnlfb3Blbl9SMjEzMzJmYTUoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgdmZzbW91bnQgKiwgaW50 KTsKZXh0ZXJuIGludCBmaWxwX2Nsb3NlX1JjZDdjYzRkZChzdHJ1Y3QgZmlsZSAqLCBmbF9vd25l cl90IGlkKTsKZXh0ZXJuIGNoYXIgKiBnZXRuYW1lX1I3YzYwZDY2ZShjb25zdCBjaGFyICopOwoK CmV4dGVybiB2b2lkIHZmc19jYWNoZXNfaW5pdCh1bnNpZ25lZCBsb25nKTsKCgoKCmVudW0ge0JE RVZfRklMRSwgQkRFVl9TV0FQLCBCREVWX0ZTLCBCREVWX1JBV307CmV4dGVybiBpbnQgcmVnaXN0 ZXJfYmxrZGV2X1I0ZTQ1MDUzZSh1bnNpZ25lZCBpbnQsIGNvbnN0IGNoYXIgKiwgc3RydWN0IGJs b2NrX2RldmljZV9vcGVyYXRpb25zICopOwpleHRlcm4gaW50IHVucmVnaXN0ZXJfYmxrZGV2X1Jl YWMxYzRhZih1bnNpZ25lZCBpbnQsIGNvbnN0IGNoYXIgKik7CmV4dGVybiBzdHJ1Y3QgYmxvY2tf ZGV2aWNlICpiZGdldF9SYzIwOWU3YTIoZGV2X3QpOwpleHRlcm4gaW50IGJkX2FjcXVpcmUoc3Ry dWN0IGlub2RlICppbm9kZSk7CmV4dGVybiB2b2lkIGJkX2ZvcmdldChzdHJ1Y3QgaW5vZGUgKmlu b2RlKTsKZXh0ZXJuIHZvaWQgYmRwdXRfUjk1NjRjY2NkKHN0cnVjdCBibG9ja19kZXZpY2UgKik7 CmV4dGVybiBzdHJ1Y3QgY2hhcl9kZXZpY2UgKmNkZ2V0X1JkZWU3MGYzZShkZXZfdCk7CmV4dGVy biB2b2lkIGNkcHV0X1JkN2FiNGYxZChzdHJ1Y3QgY2hhcl9kZXZpY2UgKik7CmV4dGVybiBpbnQg YmxrZGV2X29wZW5fUmQwNGJmMWM5KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKZXh0 ZXJuIGludCBibGtkZXZfY2xvc2Uoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOwpleHRl cm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWZfYmxrX2ZvcHNfUmYwMzBmYjQwOwpleHRlcm4g c3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBkZWZfYmxrX2FvcHM7CmV4dGVybiBzdHJ1 Y3QgZmlsZV9vcGVyYXRpb25zIGRlZl9maWZvX2ZvcHM7CmV4dGVybiBpbnQgaW9jdGxfYnlfYmRl dl9SNWE4YTI3MTAoc3RydWN0IGJsb2NrX2RldmljZSAqLCB1bnNpZ25lZCwgdW5zaWduZWQgbG9u Zyk7CmV4dGVybiBpbnQgYmxrZGV2X2dldF9SZTQ5OGI1YzUoc3RydWN0IGJsb2NrX2RldmljZSAq LCBtb2RlX3QsIHVuc2lnbmVkLCBpbnQpOwpleHRlcm4gaW50IGJsa2Rldl9wdXRfUjgzNjNkODA2 KHN0cnVjdCBibG9ja19kZXZpY2UgKiwgaW50KTsKCgpleHRlcm4gY29uc3Qgc3RydWN0IGJsb2Nr X2RldmljZV9vcGVyYXRpb25zICpnZXRfYmxrZm9wcyh1bnNpZ25lZCBpbnQpOwpleHRlcm4gaW50 IHJlZ2lzdGVyX2NocmRldl9SODFhYWI2M2EodW5zaWduZWQgaW50LCBjb25zdCBjaGFyICosIHN0 cnVjdCBmaWxlX29wZXJhdGlvbnMgKik7CmV4dGVybiBpbnQgdW5yZWdpc3Rlcl9jaHJkZXZfUmMx OTJkNDkxKHVuc2lnbmVkIGludCwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCBjaHJkZXZfb3Bl bihzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CmV4dGVybiBjb25zdCBjaGFyICogYmRl dm5hbWVfUmQwNDc4MmU2KGtkZXZfdCk7CmV4dGVybiBjb25zdCBjaGFyICogY2Rldm5hbWVfUjk3 NTQ3NDFkKGtkZXZfdCk7CmV4dGVybiBjb25zdCBjaGFyICoga2Rldm5hbWVfUmMyNThjOTA2KGtk ZXZfdCk7CmV4dGVybiB2b2lkIGluaXRfc3BlY2lhbF9pbm9kZV9SYTU0ZTc5ZDQoc3RydWN0IGlu b2RlICosIHVtb2RlX3QsIGludCk7CgoKZXh0ZXJuIHZvaWQgbWFrZV9iYWRfaW5vZGVfUmU5Zjcy YjU0KHN0cnVjdCBpbm9kZSAqKTsKZXh0ZXJuIGludCBpc19iYWRfaW5vZGVfUjAzODg3ODIyKHN0 cnVjdCBpbm9kZSAqKTsKCmV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJlYWRfZmlmb19m b3BzOwpleHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB3cml0ZV9maWZvX2ZvcHM7CmV4dGVy biBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJkd3JfZmlmb19mb3BzOwpleHRlcm4gc3RydWN0IGZp bGVfb3BlcmF0aW9ucyByZWFkX3BpcGVfZm9wczsKZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlv bnMgd3JpdGVfcGlwZV9mb3BzOwpleHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByZHdyX3Bp cGVfZm9wczsKCmV4dGVybiBpbnQgZnNfbWF5X3JlbW91bnRfcm8oc3RydWN0IHN1cGVyX2Jsb2Nr ICopOwoKZXh0ZXJuIGludCB0cnlfdG9fZnJlZV9idWZmZXJzX1JkZjM1MTUwMChzdHJ1Y3QgcGFn ZSAqLCB1bnNpZ25lZCBpbnQpIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKZXh0ZXJuIHZv aWQgcmVmaWxlX2J1ZmZlcl9SZTYzMjY2NjAoc3RydWN0IGJ1ZmZlcl9oZWFkICogYnVmKTsKZXh0 ZXJuIHZvaWQgY3JlYXRlX2VtcHR5X2J1ZmZlcnNfUjUxMWVkZjViKHN0cnVjdCBwYWdlICosIGtk ZXZfdCwgdW5zaWduZWQgbG9uZyk7CmV4dGVybiB2b2lkIGVuZF9idWZmZXJfaW9fc3luYyhzdHJ1 Y3QgYnVmZmVyX2hlYWQgKmJoLCBpbnQgdXB0b2RhdGUpOwoKCmV4dGVybiB2b2lkIHNldF9idWZm ZXJfYXN5bmNfaW9fUjZhMTkwODA4KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpIDsKCgoKCgoKc3Rh dGljIGlubGluZSB2b2lkIGdldF9iaChzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBiaCkKewogICAgICAg IGF0b21pY19pbmMoJihiaCktPmJfY291bnQpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgcHV0X2Jo KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCnsKICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygi IjogOiA6Im1lbW9yeSIpOwogICAgICAgIGF0b21pY19kZWMoJmJoLT5iX2NvdW50KTsKfQoKCgoK c3RhdGljIGlubGluZSB2b2lkIG1hcmtfYnVmZmVyX3VwdG9kYXRlKHN0cnVjdCBidWZmZXJfaGVh ZCAqIGJoLCBpbnQgb24pCnsKICAgICAgICBpZiAob24pCiAgICAgICAgICAgICAgICBzZXRfYml0 KEJIX1VwdG9kYXRlLCAmYmgtPmJfc3RhdGUpOwogICAgICAgIGVsc2UKICAgICAgICAgICAgICAg IGNsZWFyX2JpdChCSF9VcHRvZGF0ZSwgJmJoLT5iX3N0YXRlKTsKfQoKCgpzdGF0aWMgaW5saW5l IHZvaWQgX19tYXJrX2J1ZmZlcl9jbGVhbihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQp7CiAgICAg ICAgcmVmaWxlX2J1ZmZlcl9SZTYzMjY2NjAoYmgpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgbWFy a19idWZmZXJfY2xlYW4oc3RydWN0IGJ1ZmZlcl9oZWFkICogYmgpCnsKICAgICAgICBpZiAodGVz dF9hbmRfY2xlYXJfYml0KEJIX0RpcnR5LCAmKGJoKS0+Yl9zdGF0ZSkpCiAgICAgICAgICAgICAg ICBfX21hcmtfYnVmZmVyX2NsZWFuKGJoKTsKfQoKZXh0ZXJuIHZvaWQgX19tYXJrX2RpcnR5KHN0 cnVjdCBidWZmZXJfaGVhZCAqYmgpIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKZXh0ZXJu IHZvaWQgX19tYXJrX2J1ZmZlcl9kaXJ0eV9SYmFiMDk1NWMoc3RydWN0IGJ1ZmZlcl9oZWFkICpi aCkgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkpOwpleHRlcm4gdm9pZCBtYXJrX2J1ZmZlcl9k aXJ0eV9SYWM0NTZlZjQoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkgX19hdHRyaWJ1dGVfXygocmVn cGFybSgzKSkpOwoKZXh0ZXJuIHZvaWQgYnVmZmVyX2luc2VydF9saXN0X1I0MmJjODMwYShzdHJ1 Y3QgYnVmZmVyX2hlYWQgKiwgc3RydWN0IGxpc3RfaGVhZCAqKSBfX2F0dHJpYnV0ZV9fKChyZWdw YXJtKDMpKSk7CgpzdGF0aWMgaW5saW5lIHZvaWQgYnVmZmVyX2luc2VydF9pbm9kZV9xdWV1ZShz dHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQp7CiAgICAgICAgYnVm ZmVyX2luc2VydF9saXN0X1I0MmJjODMwYShiaCwgJmlub2RlLT5pX2RpcnR5X2J1ZmZlcnMpOwp9 CgpzdGF0aWMgaW5saW5lIHZvaWQgYnVmZmVyX2luc2VydF9pbm9kZV9kYXRhX3F1ZXVlKHN0cnVj dCBidWZmZXJfaGVhZCAqYmgsIHN0cnVjdCBpbm9kZSAqaW5vZGUpCnsKICAgICAgICBidWZmZXJf aW5zZXJ0X2xpc3RfUjQyYmM4MzBhKGJoLCAmaW5vZGUtPmlfZGlydHlfZGF0YV9idWZmZXJzKTsK fQoKc3RhdGljIGlubGluZSBpbnQgYXRvbWljX3NldF9idWZmZXJfZGlydHkoc3RydWN0IGJ1ZmZl cl9oZWFkICpiaCkKewogICAgICAgIHJldHVybiB0ZXN0X2FuZF9zZXRfYml0KEJIX0RpcnR5LCAm YmgtPmJfc3RhdGUpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgbWFya19idWZmZXJfYXN5bmMoc3Ry dWN0IGJ1ZmZlcl9oZWFkICogYmgsIGludCBvbikKewogICAgICAgIGlmIChvbikKICAgICAgICAg ICAgICAgIHNldF9iaXQoQkhfQXN5bmMsICZiaC0+Yl9zdGF0ZSk7CiAgICAgICAgZWxzZQogICAg ICAgICAgICAgICAgY2xlYXJfYml0KEJIX0FzeW5jLCAmYmgtPmJfc3RhdGUpOwp9CgpzdGF0aWMg aW5saW5lIHZvaWQgc2V0X2J1ZmZlcl9hdHRhY2hlZChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQp7 CiAgICAgICAgc2V0X2JpdChCSF9BdHRhY2hlZCwgJmJoLT5iX3N0YXRlKTsKfQoKc3RhdGljIGlu bGluZSB2b2lkIGNsZWFyX2J1ZmZlcl9hdHRhY2hlZChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQp7 CiAgICAgICAgY2xlYXJfYml0KEJIX0F0dGFjaGVkLCAmYmgtPmJfc3RhdGUpOwp9CgpzdGF0aWMg aW5saW5lIGludCBidWZmZXJfYXR0YWNoZWQoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKewogICAg ICAgIHJldHVybiAoX19idWlsdGluX2NvbnN0YW50X3AoQkhfQXR0YWNoZWQpID8gY29uc3RhbnRf dGVzdF9iaXQoKEJIX0F0dGFjaGVkKSwoJmJoLT5iX3N0YXRlKSkgOiB2YXJpYWJsZV90ZXN0X2Jp dCgoQkhfQXR0YWNoZWQpLCgmYmgtPmJfc3RhdGUpKSk7Cn0KCgoKCgoKCnN0YXRpYyBpbmxpbmUg dm9pZCBidWZmZXJfSU9fZXJyb3Ioc3RydWN0IGJ1ZmZlcl9oZWFkICogYmgpCnsKICAgICAgICBt YXJrX2J1ZmZlcl9jbGVhbihiaCk7CgoKCiAgICAgICAgYmgtPmJfZW5kX2lvKGJoLCAwKTsKfQoK c3RhdGljIGlubGluZSB2b2lkIG1hcmtfYnVmZmVyX2RpcnR5X2lub2RlKHN0cnVjdCBidWZmZXJf aGVhZCAqYmgsIHN0cnVjdCBpbm9kZSAqaW5vZGUpCnsKICAgICAgICBtYXJrX2J1ZmZlcl9kaXJ0 eV9SYWM0NTZlZjQoYmgpOwogICAgICAgIGJ1ZmZlcl9pbnNlcnRfaW5vZGVfcXVldWUoYmgsIGlu b2RlKTsKfQoKZXh0ZXJuIHZvaWQgc2V0X2J1ZmZlcl9mbHVzaHRpbWVfUmYyNDg2MjFmKHN0cnVj dCBidWZmZXJfaGVhZCAqKTsKZXh0ZXJuIHZvaWQgYmFsYW5jZV9kaXJ0eSh2b2lkKTsKZXh0ZXJu IGludCBjaGVja19kaXNrX2NoYW5nZV9SMTFkNDA3NmQoa2Rldl90KTsKZXh0ZXJuIGludCBpbnZh bGlkYXRlX2lub2Rlc19SNTQ1ZmE4ODkoc3RydWN0IHN1cGVyX2Jsb2NrICopOwpleHRlcm4gaW50 IGludmFsaWRhdGVfZGV2aWNlX1IyNWE0YjBiMihrZGV2X3QsIGludCk7CmV4dGVybiB2b2lkIGlu dmFsaWRhdGVfaW5vZGVfcGFnZXNfUjU1MmMzYjVhKHN0cnVjdCBpbm9kZSAqKTsKZXh0ZXJuIHZv aWQgaW52YWxpZGF0ZV9pbm9kZV9wYWdlczIoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKik7CmV4dGVy biB2b2lkIGludmFsaWRhdGVfaW5vZGVfYnVmZmVycyhzdHJ1Y3QgaW5vZGUgKik7CgoKZXh0ZXJu IHZvaWQgaW52YWxpZGF0ZV9iZGV2X1JlZDk0NjM1NyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICosIGlu dCk7CmV4dGVybiB2b2lkIF9faW52YWxpZGF0ZV9idWZmZXJzX1I5OGY1MTUzOChrZGV2X3QgZGV2 LCBpbnQpOwpleHRlcm4gdm9pZCBzeW5jX2lub2RlcyhrZGV2X3QpOwpleHRlcm4gdm9pZCBzeW5j X3VubG9ja2VkX2lub2Rlcyh2b2lkKTsKZXh0ZXJuIHZvaWQgd3JpdGVfaW5vZGVfbm93X1I1MzZl MGNmZChzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKZXh0ZXJuIGludCBzeW5jX2J1ZmZlcnMoa2Rldl90 LCBpbnQpOwpleHRlcm4gdm9pZCBzeW5jX2Rldl9SZmMwYjBmNDkoa2Rldl90KTsKZXh0ZXJuIGlu dCBmc3luY19kZXZfUjhlYTEyOGUyKGtkZXZfdCk7CmV4dGVybiBpbnQgZnN5bmNfZGV2X2xvY2tm c19SMWI0YmY0NDEoa2Rldl90KTsKZXh0ZXJuIGludCBmc3luY19zdXBlcihzdHJ1Y3Qgc3VwZXJf YmxvY2sgKik7CmV4dGVybiBpbnQgZnN5bmNfbm9fc3VwZXJfUjU3NTIwNjQ0KGtkZXZfdCk7CmV4 dGVybiB2b2lkIHN5bmNfaW5vZGVzX3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKZXh0ZXJuIGlu dCBmc3luY19idWZmZXJzX2xpc3RfUmQyZTllYWI4KHN0cnVjdCBsaXN0X2hlYWQgKik7CnN0YXRp YyBpbmxpbmUgaW50IGZzeW5jX2lub2RlX2J1ZmZlcnMoc3RydWN0IGlub2RlICppbm9kZSkKewog ICAgICAgIHJldHVybiBmc3luY19idWZmZXJzX2xpc3RfUmQyZTllYWI4KCZpbm9kZS0+aV9kaXJ0 eV9idWZmZXJzKTsKfQpzdGF0aWMgaW5saW5lIGludCBmc3luY19pbm9kZV9kYXRhX2J1ZmZlcnMo c3RydWN0IGlub2RlICppbm9kZSkKewogICAgICAgIHJldHVybiBmc3luY19idWZmZXJzX2xpc3Rf UmQyZTllYWI4KCZpbm9kZS0+aV9kaXJ0eV9kYXRhX2J1ZmZlcnMpOwp9CmV4dGVybiBpbnQgaW5v ZGVfaGFzX2J1ZmZlcnMoc3RydWN0IGlub2RlICopOwpleHRlcm4gaW50IGZpbGVtYXBfZmRhdGFz eW5jX1JlMGJjYWUxNyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqKTsKZXh0ZXJuIGludCBmaWxlbWFw X2ZkYXRhd2FpdF9SOTY4ZDZkMDEoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKik7CmV4dGVybiB2b2lk IHN5bmNfc3VwZXJzKGtkZXZfdCBkZXYsIGludCB3YWl0KTsKZXh0ZXJuIHZvaWQgc3luY19zdXBl cnNfbG9ja2ZzKGtkZXZfdCk7CmV4dGVybiB2b2lkIHVubG9ja2ZzX1IyY2ViMWJkYihrZGV2X3Qp OwpleHRlcm4gaW50IGJtYXBfUjhjYzMwZjc1KHN0cnVjdCBpbm9kZSAqLCBpbnQpOwpleHRlcm4g aW50IG5vdGlmeV9jaGFuZ2VfUjIyMmQxOWY0KHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlhdHRy ICopOwpleHRlcm4gaW50IHBlcm1pc3Npb25fUmM0MzI1ODQ5KHN0cnVjdCBpbm9kZSAqLCBpbnQp OwpleHRlcm4gaW50IHZmc19wZXJtaXNzaW9uX1I4ODE4ZTY5OShzdHJ1Y3QgaW5vZGUgKiwgaW50 KTsKZXh0ZXJuIGludCBnZXRfd3JpdGVfYWNjZXNzX1JjYjg5NTliNChzdHJ1Y3QgaW5vZGUgKik7 CmV4dGVybiBpbnQgZGVueV93cml0ZV9hY2Nlc3Moc3RydWN0IGZpbGUgKik7CnN0YXRpYyBpbmxp bmUgdm9pZCBwdXRfd3JpdGVfYWNjZXNzKHN0cnVjdCBpbm9kZSAqIGlub2RlKQp7CiAgICAgICAg YXRvbWljX2RlYygmaW5vZGUtPmlfd3JpdGVjb3VudCk7Cn0Kc3RhdGljIGlubGluZSB2b2lkIGFs bG93X3dyaXRlX2FjY2VzcyhzdHJ1Y3QgZmlsZSAqZmlsZSkKewogICAgICAgIGlmIChmaWxlKQog ICAgICAgICAgICAgICAgYXRvbWljX2luYygmZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfd3Jp dGVjb3VudCk7Cn0KZXh0ZXJuIGludCBkb19waXBlX1JmN2U5ZWQ3MChpbnQgKik7CgpleHRlcm4g aW50IG9wZW5fbmFtZWkoY29uc3QgY2hhciAqLCBpbnQsIGludCwgc3RydWN0IG5hbWVpZGF0YSAq KTsKCmV4dGVybiBpbnQga2VybmVsX3JlYWRfUjI1OTI0NDg2KHN0cnVjdCBmaWxlICosIHVuc2ln bmVkIGxvbmcsIGNoYXIgKiwgdW5zaWduZWQgbG9uZyk7CmV4dGVybiBzdHJ1Y3QgZmlsZSAqIG9w ZW5fZXhlY19SZmFhNmQ2YjcoY29uc3QgY2hhciAqKTsKCgpleHRlcm4gaW50IGlzX3N1YmRpcl9S ODRiMTQ2Zjkoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgZGVudHJ5ICopOwpleHRlcm4gaW5vX3Qg ZmluZF9pbm9kZV9udW1iZXJfUjFmYmYxM2Y5KHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IHFzdHIg Kik7CiMgMTMzMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9mcy5oIgpz dGF0aWMgaW5saW5lIHZvaWQgKkVSUl9QVFIobG9uZyBlcnJvcikKewogICAgICAgIHJldHVybiAo dm9pZCAqKSBlcnJvcjsKfQoKc3RhdGljIGlubGluZSBsb25nIFBUUl9FUlIoY29uc3Qgdm9pZCAq cHRyKQp7CiAgICAgICAgcmV0dXJuIChsb25nKSBwdHI7Cn0KCnN0YXRpYyBpbmxpbmUgbG9uZyBJ U19FUlIoY29uc3Qgdm9pZCAqcHRyKQp7CiAgICAgICAgcmV0dXJuICh1bnNpZ25lZCBsb25nKXB0 ciA+ICh1bnNpZ25lZCBsb25nKS0xMDAwTDsKfQojIDEzNjMgIi91c3Ivc3JjL2xpbnV4LTIuNC4y MC04L2luY2x1ZGUvbGludXgvZnMuaCIKZW51bSB7TEFTVF9OT1JNLCBMQVNUX1JPT1QsIExBU1Rf RE9ULCBMQVNUX0RPVERPVCwgTEFTVF9CSU5EfTsKIyAxMzc0ICIvdXNyL3NyYy9saW51eC0yLjQu MjAtOC9pbmNsdWRlL2xpbnV4L2ZzLmgiCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBzaXplX3Qg d3JpdHRlbjsKICAgICAgICBzaXplX3QgY291bnQ7CiAgICAgICAgY2hhciAqIGJ1ZjsKICAgICAg ICBpbnQgZXJyb3I7Cn0gcmVhZF9kZXNjcmlwdG9yX3Q7Cgp0eXBlZGVmIGludCAoKnJlYWRfYWN0 b3JfdCkocmVhZF9kZXNjcmlwdG9yX3QgKiwgc3RydWN0IHBhZ2UgKiwgdW5zaWduZWQgbG9uZywg dW5zaWduZWQgbG9uZyk7CgoKZXh0ZXJuIGxvZmZfdCBkZWZhdWx0X2xsc2Vla19SNDUxYmQyZDgo c3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGludCBvcmlnaW4pOwoKZXh0ZXJuIGlu dCBfX3VzZXJfd2Fsa19SOTRhNjI0NzkoY29uc3QgY2hhciAqLCB1bnNpZ25lZCwgc3RydWN0IG5h bWVpZGF0YSAqKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CmV4dGVybiBpbnQgcGF0aF9p bml0X1JhNzQ3NWYyYihjb25zdCBjaGFyICosIHVuc2lnbmVkLCBzdHJ1Y3QgbmFtZWlkYXRhICop IF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKZXh0ZXJuIGludCBwYXRoX3dhbGtfUjkyNTQ0 Yzk0KGNvbnN0IGNoYXIgKiwgc3RydWN0IG5hbWVpZGF0YSAqKSBfX2F0dHJpYnV0ZV9fKChyZWdw YXJtKDMpKSk7CmV4dGVybiBpbnQgcGF0aF9sb29rdXAoY29uc3QgY2hhciAqLCB1bnNpZ25lZCwg c3RydWN0IG5hbWVpZGF0YSAqKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CmV4dGVybiBp bnQgbGlua19wYXRoX3dhbGsoY29uc3QgY2hhciAqLCBzdHJ1Y3QgbmFtZWlkYXRhICopIF9fYXR0 cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKZXh0ZXJuIHZvaWQgcGF0aF9yZWxlYXNlX1IyNTNjMjQ2 ZChzdHJ1Y3QgbmFtZWlkYXRhICopOwpleHRlcm4gaW50IGZvbGxvd19kb3duX1JlMmM3MGRkNShz dHJ1Y3QgdmZzbW91bnQgKiosIHN0cnVjdCBkZW50cnkgKiopOwpleHRlcm4gaW50IGZvbGxvd191 cF9SMGU1NDU4ZjQoc3RydWN0IHZmc21vdW50ICoqLCBzdHJ1Y3QgZGVudHJ5ICoqKTsKZXh0ZXJu IHN0cnVjdCBkZW50cnkgKiBsb29rdXBfb25lX2xlbl9SMjE4YmY1OTIoY29uc3QgY2hhciAqLCBz dHJ1Y3QgZGVudHJ5ICosIGludCk7CmV4dGVybiBzdHJ1Y3QgZGVudHJ5ICogbG9va3VwX2hhc2hf UmUwYzU4YzJiKHN0cnVjdCBxc3RyICosIHN0cnVjdCBkZW50cnkgKik7CgoKCmV4dGVybiB2b2lk IGlub2RlX2luaXRfb25jZV9SYTVmOGYyMmUoc3RydWN0IGlub2RlICopOwpleHRlcm4gdm9pZCBp cHV0X1I0ZTEwMzE0ZihzdHJ1Y3QgaW5vZGUgKik7CmV4dGVybiB2b2lkIGZvcmNlX2RlbGV0ZV9S NjM5YWIyOTEoc3RydWN0IGlub2RlICopOwpleHRlcm4gc3RydWN0IGlub2RlICogaWdyYWJfUjgx NTNiYmY1KHN0cnVjdCBpbm9kZSAqKTsKZXh0ZXJuIGlub190IGl1bmlxdWVfUjI2ZjI5YmYxKHN0 cnVjdCBzdXBlcl9ibG9jayAqLCBpbm9fdCk7Cgp0eXBlZGVmIGludCAoKmZpbmRfaW5vZGVfdCko c3RydWN0IGlub2RlICosIHVuc2lnbmVkIGxvbmcsIHZvaWQgKik7CmV4dGVybiBzdHJ1Y3QgaW5v ZGUgKiBpZ2V0NF9SN2IzNjk0MzIoc3RydWN0IHN1cGVyX2Jsb2NrICosIHVuc2lnbmVkIGxvbmcs IGZpbmRfaW5vZGVfdCwgdm9pZCAqKTsKc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5vZGUgKmlnZXQo c3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8pCnsKICAgICAgICByZXR1 cm4gaWdldDRfUjdiMzY5NDMyKHNiLCBpbm8sICgodm9pZCAqKTApLCAoKHZvaWQgKikwKSk7Cn0K CmV4dGVybiB2b2lkIGNsZWFyX2lub2RlX1IzYmQzYWZiOChzdHJ1Y3QgaW5vZGUgKik7CmV4dGVy biBzdHJ1Y3QgaW5vZGUgKm5ld19pbm9kZV9SNDMyMzZiM2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpz Yik7CmV4dGVybiB2b2lkIHJlbW92ZV9zdWlkKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwoKZXh0ZXJu IHZvaWQgaW5zZXJ0X2lub2RlX2hhc2hfUjQ3MTk1OThjKHN0cnVjdCBpbm9kZSAqKTsKZXh0ZXJu IHZvaWQgcmVtb3ZlX2lub2RlX2hhc2hfUjc0MGIyZTdhKHN0cnVjdCBpbm9kZSAqKTsKZXh0ZXJu IHN0cnVjdCBmaWxlICogZ2V0X2VtcHR5X2ZpbHBfUmE1ZjY5YmE3KHZvaWQpOwpleHRlcm4gdm9p ZCBmaWxlX21vdmUoc3RydWN0IGZpbGUgKmYsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpOwpleHRl cm4gc3RydWN0IGJ1ZmZlcl9oZWFkICogZ2V0X2hhc2hfdGFibGVfUmY3MjAxNmE4KGtkZXZfdCwg aW50LCBpbnQpOwpleHRlcm4gc3RydWN0IGJ1ZmZlcl9oZWFkICogZ2V0YmxrX1JlNzdkYWZmNShr ZGV2X3QsIGludCwgaW50KTsKZXh0ZXJuIHZvaWQgbGxfcndfYmxvY2tfUjhjNDkzMDk2KGludCwg aW50LCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBiaFtdKTsKZXh0ZXJuIHZvaWQgc3VibWl0X2JoX1I3 MzQ5MWI1YihpbnQsIHN0cnVjdCBidWZmZXJfaGVhZCAqKTsKZXh0ZXJuIGludCBpc19yZWFkX29u bHlfUjc0MDI3NGNhKGtkZXZfdCk7CmV4dGVybiB2b2lkIF9fYnJlbHNlX1I5ZmY0Mjk2MihzdHJ1 Y3QgYnVmZmVyX2hlYWQgKik7CnN0YXRpYyBpbmxpbmUgdm9pZCBicmVsc2Uoc3RydWN0IGJ1ZmZl cl9oZWFkICpidWYpCnsKICAgICAgICBpZiAoYnVmKQogICAgICAgICAgICAgICAgX19icmVsc2Vf UjlmZjQyOTYyKGJ1Zik7Cn0KZXh0ZXJuIHZvaWQgX19iZm9yZ2V0X1I3NWY4M2E4OShzdHJ1Y3Qg YnVmZmVyX2hlYWQgKik7CnN0YXRpYyBpbmxpbmUgdm9pZCBiZm9yZ2V0KHN0cnVjdCBidWZmZXJf aGVhZCAqYnVmKQp7CiAgICAgICAgaWYgKGJ1ZikKICAgICAgICAgICAgICAgIF9fYmZvcmdldF9S NzVmODNhODkoYnVmKTsKfQpleHRlcm4gaW50IHNldF9ibG9ja3NpemVfUmM3NWQ4NTdjKGtkZXZf dCwgaW50KTsKZXh0ZXJuIGludCBzYl9zZXRfYmxvY2tzaXplX1JhYWE0NjIzMihzdHJ1Y3Qgc3Vw ZXJfYmxvY2sgKiwgaW50KTsKZXh0ZXJuIGludCBzYl9taW5fYmxvY2tzaXplX1JjYzZhMzVlMihz dHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgaW50KTsKZXh0ZXJuIHN0cnVjdCBidWZmZXJfaGVhZCAqIGJy ZWFkX1IwNGZjNzQ2YihrZGV2X3QsIGludCwgaW50KTsKc3RhdGljIGlubGluZSBzdHJ1Y3QgYnVm ZmVyX2hlYWQgKiBzYl9icmVhZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgYmxvY2spCnsK ICAgICAgICByZXR1cm4gYnJlYWRfUjA0ZmM3NDZiKHNiLT5zX2RldiwgYmxvY2ssIHNiLT5zX2Js b2Nrc2l6ZSk7Cn0Kc3RhdGljIGlubGluZSBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBzYl9nZXRibGso c3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGJsb2NrKQp7CiAgICAgICAgcmV0dXJuIGdldGJs a19SZTc3ZGFmZjUoc2ItPnNfZGV2LCBibG9jaywgc2ItPnNfYmxvY2tzaXplKTsKfQpzdGF0aWMg aW5saW5lIHN0cnVjdCBidWZmZXJfaGVhZCAqIHNiX2dldF9oYXNoX3RhYmxlKHN0cnVjdCBzdXBl cl9ibG9jayAqc2IsIGludCBibG9jaykKewogICAgICAgIHJldHVybiBnZXRfaGFzaF90YWJsZV9S ZjcyMDE2YTgoc2ItPnNfZGV2LCBibG9jaywgc2ItPnNfYmxvY2tzaXplKTsKfQpleHRlcm4gdm9p ZCB3YWtldXBfYmRmbHVzaCh2b2lkKTsKZXh0ZXJuIHZvaWQgcHV0X3VudXNlZF9idWZmZXJfaGVh ZF9SOGY4YzNlOGEoc3RydWN0IGJ1ZmZlcl9oZWFkICogYmgpOwpleHRlcm4gc3RydWN0IGJ1ZmZl cl9oZWFkICogZ2V0X3VudXNlZF9idWZmZXJfaGVhZF9SYTUxYzFkOGEoaW50IGFzeW5jKTsKCmV4 dGVybiBpbnQgYnJ3X3BhZ2VfUmQzZDIzYmZjKGludCwgc3RydWN0IHBhZ2UgKiwga2Rldl90LCBp bnQgW10sIGludCk7Cgp0eXBlZGVmIGludCAoZ2V0X2Jsb2NrX3QpKHN0cnVjdCBpbm9kZSosbG9u ZyxzdHJ1Y3QgYnVmZmVyX2hlYWQqLGludCk7CgoKZXh0ZXJuIGludCB0cnlfdG9fcmVsZWFzZV9w YWdlKHN0cnVjdCBwYWdlICogcGFnZSwgaW50IGdmcF9tYXNrKTsKZXh0ZXJuIGludCBkaXNjYXJk X2JoX3BhZ2VfUjgwOTZlYWQ0KHN0cnVjdCBwYWdlICosIHVuc2lnbmVkIGxvbmcsIGludCk7CgoK ZXh0ZXJuIGludCBibG9ja19zeW1saW5rX1JlYTczZWFmNChzdHJ1Y3QgaW5vZGUgKiwgY29uc3Qg Y2hhciAqLCBpbnQpOwpleHRlcm4gaW50IGJsb2NrX3dyaXRlX2Z1bGxfcGFnZV9SNDFhMTk1NTYo c3RydWN0IHBhZ2UqLCBnZXRfYmxvY2tfdCopOwpleHRlcm4gaW50IGJsb2NrX3JlYWRfZnVsbF9w YWdlX1IwM2M1MzI0ZChzdHJ1Y3QgcGFnZSosIGdldF9ibG9ja190Kik7CmV4dGVybiBpbnQgYmxv Y2tfcHJlcGFyZV93cml0ZV9SOWQ1ZDk4YTUoc3RydWN0IHBhZ2UqLCB1bnNpZ25lZCwgdW5zaWdu ZWQsIGdldF9ibG9ja190Kik7CmV4dGVybiBpbnQgY29udF9wcmVwYXJlX3dyaXRlX1JmZTVjNjZk ZShzdHJ1Y3QgcGFnZSosIHVuc2lnbmVkLCB1bnNpZ25lZCwgZ2V0X2Jsb2NrX3QqLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKik7CmV4dGVybiBpbnQgZ2Vu ZXJpY19jb250X2V4cGFuZF9SZmJhZmEzN2Yoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHNp emUpIDsKZXh0ZXJuIGludCBibG9ja19jb21taXRfd3JpdGUoc3RydWN0IHBhZ2UgKnBhZ2UsIHVu c2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKTsKZXh0ZXJuIGludCBibG9ja19zeW5jX3BhZ2VfUjgx NWU2YjdlKHN0cnVjdCBwYWdlICopOwoKaW50IGdlbmVyaWNfYmxvY2tfYm1hcF9SM2Y5YzM2YzQo c3RydWN0IGFkZHJlc3Nfc3BhY2UgKiwgbG9uZywgZ2V0X2Jsb2NrX3QgKik7CmludCBnZW5lcmlj X2NvbW1pdF93cml0ZV9SY2U3MjNmZTMoc3RydWN0IGZpbGUgKiwgc3RydWN0IHBhZ2UgKiwgdW5z aWduZWQsIHVuc2lnbmVkKTsKaW50IGJsb2NrX3RydW5jYXRlX3BhZ2VfUmIxYTBmODY1KHN0cnVj dCBhZGRyZXNzX3NwYWNlICosIGxvZmZfdCwgZ2V0X2Jsb2NrX3QgKik7CmV4dGVybiBpbnQgZ2Vu ZXJpY19kaXJlY3RfSU9fUjVmZTU1ZTFkKGludCwgc3RydWN0IGlub2RlICosIHN0cnVjdCBraW9i dWYgKiwgdW5zaWduZWQgbG9uZywgaW50LCBnZXRfYmxvY2tfdCAqKTsKZXh0ZXJuIGludCB3YWl0 Zm9yX29uZV9wYWdlX1JhNmE3OGM1MyhzdHJ1Y3QgcGFnZSAqKTsKZXh0ZXJuIGludCB3cml0ZW91 dF9vbmVfcGFnZV9SNDY4NmE2Mzgoc3RydWN0IHBhZ2UgKik7CgpleHRlcm4gaW50IGdlbmVyaWNf ZmlsZV9tbWFwX1JmZGJiMmFlYShzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qg Kik7CmV4dGVybiBpbnQgZmlsZV9yZWFkX2FjdG9yKHJlYWRfZGVzY3JpcHRvcl90ICogZGVzYywg c3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNp emUpOwpleHRlcm4gc3NpemVfdCBnZW5lcmljX2ZpbGVfcmVhZF9SMTQ0MWU2OTQoc3RydWN0IGZp bGUgKiwgY2hhciAqLCBzaXplX3QsIGxvZmZfdCAqKTsKZXh0ZXJuIHNzaXplX3QgZ2VuZXJpY19m aWxlX3dyaXRlX1I5YmJjNjg5NihzdHJ1Y3QgZmlsZSAqLCBjb25zdCBjaGFyICosIHNpemVfdCwg bG9mZl90ICopOwpleHRlcm4gdm9pZCBkb19nZW5lcmljX2ZpbGVfcmVhZF9SN2Q1ZjI0NjQoc3Ry dWN0IGZpbGUgKiwgbG9mZl90ICosIHJlYWRfZGVzY3JpcHRvcl90ICosIHJlYWRfYWN0b3JfdCwg aW50KTsKZXh0ZXJuIGxvZmZfdCBub19sbHNlZWtfUmI5ZTIyYjg3KHN0cnVjdCBmaWxlICpmaWxl LCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgb3JpZ2luKTsKZXh0ZXJuIGxvZmZfdCBnZW5lcmljX2ZpbGVf bGxzZWVrX1JkOTBhNjJmNyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IG9y aWdpbik7CmV4dGVybiBzc2l6ZV90IGdlbmVyaWNfcmVhZF9kaXJfUjRlYTNlOGQxKHN0cnVjdCBm aWxlICosIGNoYXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7CmV4dGVybiBpbnQgZ2VuZXJpY19maWxl X29wZW5fUjUzMzhmY2Y1KHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbHAp OwoKZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZ2VuZXJpY19yb19mb3BzX1IxOTk0YzY3 OTsKCmV4dGVybiBpbnQgdmZzX3JlYWRsaW5rX1IyMTY4MWNiZihzdHJ1Y3QgZGVudHJ5ICosIGNo YXIgKiwgaW50LCBjb25zdCBjaGFyICopOwpleHRlcm4gaW50IHZmc19mb2xsb3dfbGlua19SOGRj NTJjYzIoc3RydWN0IG5hbWVpZGF0YSAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gaW50IHBhZ2Vf cmVhZGxpbmtfUjMxMjlmZjhkKHN0cnVjdCBkZW50cnkgKiwgY2hhciAqLCBpbnQpOwpleHRlcm4g aW50IHBhZ2VfZm9sbG93X2xpbmtfUjVjOThjODhmKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IG5h bWVpZGF0YSAqKTsKZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHBhZ2Vfc3ltbGlua19p bm9kZV9vcGVyYXRpb25zX1JmNTFlZmI5OTsKCmV4dGVybiBpbnQgdmZzX3JlYWRkaXJfUjc0MWU3 MzcwKHN0cnVjdCBmaWxlICosIGZpbGxkaXJfdCwgdm9pZCAqKTsKZXh0ZXJuIGludCBkY2FjaGVf ZGlyX29wZW5fUjI5N2ZkOTk4KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKZXh0ZXJu IGludCBkY2FjaGVfZGlyX2Nsb3NlX1I3MmJmMTA4OShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZp bGUgKik7CmV4dGVybiBsb2ZmX3QgZGNhY2hlX2Rpcl9sc2Vla19SYmJiMTc2ZDkoc3RydWN0IGZp bGUgKiwgbG9mZl90LCBpbnQpOwpleHRlcm4gaW50IGRjYWNoZV9kaXJfZnN5bmNfUmYxM2ZjZjQ3 KHN0cnVjdCBmaWxlICosIHN0cnVjdCBkZW50cnkgKiwgaW50KTsKZXh0ZXJuIGludCBkY2FjaGVf cmVhZGRpcl9SNTJmYjdmNGQoc3RydWN0IGZpbGUgKiwgdm9pZCAqLCBmaWxsZGlyX3QpOwpleHRl cm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkY2FjaGVfZGlyX29wc19SZjkwMzA4OWQ7CgpleHRl cm4gaW50IHZmc19zdGF0KGNoYXIgKiwgc3RydWN0IGtzdGF0X1I1Njg2YjZkZSAqKTsKZXh0ZXJu IGludCB2ZnNfbHN0YXQoY2hhciAqLCBzdHJ1Y3Qga3N0YXRfUjU2ODZiNmRlICopOwpleHRlcm4g aW50IHZmc19mc3RhdCh1bnNpZ25lZCBpbnQsIHN0cnVjdCBrc3RhdF9SNTY4NmI2ZGUgKik7Cgpl eHRlcm4gc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmdldF9mc190eXBlX1I3NTY1YjQ5OShjb25z dCBjaGFyICpuYW1lKTsKZXh0ZXJuIHN0cnVjdCBzdXBlcl9ibG9jayAqZ2V0X3N1cGVyX1JjZjdi NzlhNyhrZGV2X3QpOwpleHRlcm4gdm9pZCBkcm9wX3N1cGVyX1I1M2EzMTVkOShzdHJ1Y3Qgc3Vw ZXJfYmxvY2sgKnNiKTsKc3RhdGljIGlubGluZSBpbnQgaXNfbW91bnRlZChrZGV2X3QgZGV2KQp7 CiAgICAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGdldF9zdXBlcl9SY2Y3Yjc5YTcoZGV2 KTsKICAgICAgICBpZiAoc2IpIHsKICAgICAgICAgICAgICAgIGRyb3Bfc3VwZXJfUjUzYTMxNWQ5 KHNiKTsKICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgIH0KICAgICAgICByZXR1cm4g MDsKfQpleHRlcm4ga2Rldl90IFJPT1RfREVWX1JiMzI0OTZlODsKZXh0ZXJuIGNoYXIgcm9vdF9k ZXZpY2VfbmFtZVtdOwoKCmV4dGVybiB2b2lkIHNob3dfYnVmZmVycyh2b2lkKTsKCgpleHRlcm4g dW5zaWduZWQgaW50IHJlYWxfcm9vdF9kZXY7CgoKZXh0ZXJuIHNzaXplX3QgY2hhcl9yZWFkKHN0 cnVjdCBmaWxlICosIGNoYXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7CmV4dGVybiBzc2l6ZV90IGJs b2NrX3JlYWQoc3RydWN0IGZpbGUgKiwgY2hhciAqLCBzaXplX3QsIGxvZmZfdCAqKTsKZXh0ZXJu IGludCByZWFkX2FoZWFkX1IwYWJiN2IwN1tdOwoKZXh0ZXJuIHNzaXplX3QgY2hhcl93cml0ZShz dHJ1Y3QgZmlsZSAqLCBjb25zdCBjaGFyICosIHNpemVfdCwgbG9mZl90ICopOwpleHRlcm4gc3Np emVfdCBibG9ja193cml0ZShzdHJ1Y3QgZmlsZSAqLCBjb25zdCBjaGFyICosIHNpemVfdCwgbG9m Zl90ICopOwoKZXh0ZXJuIGludCBmaWxlX2ZzeW5jX1I5OGY5ZTQ0NyhzdHJ1Y3QgZmlsZSAqLCBz dHJ1Y3QgZGVudHJ5ICosIGludCk7CmV4dGVybiBpbnQgZ2VuZXJpY19idWZmZXJfZmRhdGFzeW5j X1JkMzQ0NmQ5OChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBsb25nIHN0YXJ0X2lkeCwg dW5zaWduZWQgbG9uZyBlbmRfaWR4KTsKZXh0ZXJuIGludCBnZW5lcmljX29zeW5jX2lub2RlKHN0 cnVjdCBpbm9kZSAqLCBpbnQpOwoKCgoKZXh0ZXJuIGludCBpbm9kZV9jaGFuZ2Vfb2tfUjZjZDg1 MmZjKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaWF0dHIgKik7CmV4dGVybiBpbnQgaW5vZGVfc2V0 YXR0cl9SY2JiNzk5ZGIoc3RydWN0IGlub2RlICosIHN0cnVjdCBpYXR0ciAqKTsKIyAxNTcxICIv dXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2ZzLmgiCnN0YXRpYyBpbmxpbmUg c3RydWN0IGRlbnRyeSAqbG9ja19wYXJlbnQoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQp7CiAgICAg ICAgc3RydWN0IGRlbnRyeSAqZGlyID0gZGdldChkZW50cnktPmRfcGFyZW50KTsKCiAgICAgICAg ZG93bigmZGlyLT5kX2lub2RlLT5pX3NlbSk7CiAgICAgICAgcmV0dXJuIGRpcjsKfQoKc3RhdGlj IGlubGluZSBzdHJ1Y3QgZGVudHJ5ICpnZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmRlbnRyeSkK ewogICAgICAgIHJldHVybiBkZ2V0KGRlbnRyeS0+ZF9wYXJlbnQpOwp9CgpzdGF0aWMgaW5saW5l IHZvaWQgdW5sb2NrX2RpcihzdHJ1Y3QgZGVudHJ5ICpkaXIpCnsKICAgICAgICB1cCgmZGlyLT5k X2lub2RlLT5pX3NlbSk7CiAgICAgICAgZHB1dF9SM2RlODEzYTYoZGlyKTsKfQoKCgoKCnN0YXRp YyBpbmxpbmUgdm9pZCBkb3VibGVfZG93bihzdHJ1Y3Qgc2VtYXBob3JlICpzMSwgc3RydWN0IHNl bWFwaG9yZSAqczIpCnsKICAgICAgICBpZiAoczEgIT0gczIpIHsKICAgICAgICAgICAgICAgIGlm ICgodW5zaWduZWQgbG9uZykgczEgPCAodW5zaWduZWQgbG9uZykgczIpIHsKICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IHNlbWFwaG9yZSAqdG1wID0gczI7CiAgICAgICAgICAgICAgICAg ICAgICAgIHMyID0gczE7IHMxID0gdG1wOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg ICAgZG93bihzMSk7CiAgICAgICAgfQogICAgICAgIGRvd24oczIpOwp9CiMgMTYxNSAiL3Vzci9z cmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9mcy5oIgpzdGF0aWMgaW5saW5lIHZvaWQg dHJpcGxlX2Rvd24oc3RydWN0IHNlbWFwaG9yZSAqczEsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlICpzMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN0cnVjdCBzZW1hcGhvcmUgKnMzKQp7CiAgICAgICAgaWYgKHMxICE9IHMyKSB7CiAgICAg ICAgICAgICAgICBpZiAoKHVuc2lnbmVkIGxvbmcpIHMxIDwgKHVuc2lnbmVkIGxvbmcpIHMyKSB7 CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodW5zaWduZWQgbG9uZykgczEgPCAodW5zaWdu ZWQgbG9uZykgczMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2Vt YXBob3JlICp0bXAgPSBzMzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMyA9IHMx OyBzMSA9IHRtcDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg ICAgICBpZiAoKHVuc2lnbmVkIGxvbmcpIHMxIDwgKHVuc2lnbmVkIGxvbmcpIHMyKSB7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNlbWFwaG9yZSAqdG1wID0gczI7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczIgPSBzMTsgczEgPSB0bXA7CiAgICAgICAg ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg ICAgICAgICAgIGlmICgodW5zaWduZWQgbG9uZykgczEgPCAodW5zaWduZWQgbG9uZykgczMpIHsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlICp0bXAgPSBz MzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMyA9IHMxOyBzMSA9IHRtcDsKICAg ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHVuc2ln bmVkIGxvbmcpIHMyIDwgKHVuc2lnbmVkIGxvbmcpIHMzKSB7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IHNlbWFwaG9yZSAqdG1wID0gczM7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgczMgPSBzMjsgczIgPSB0bXA7CiAgICAgICAgICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGRvd24oczEpOwogICAgICAgIH0g ZWxzZSBpZiAoKHVuc2lnbmVkIGxvbmcpIHMyIDwgKHVuc2lnbmVkIGxvbmcpIHMzKSB7CiAgICAg ICAgICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlICp0bXAgPSBzMzsKICAgICAgICAgICAgICAgIHMz ID0gczI7IHMyID0gdG1wOwogICAgICAgIH0KICAgICAgICBkb3duKHMyKTsKICAgICAgICBkb3du KHMzKTsKfQoKc3RhdGljIGlubGluZSB2b2lkIGRvdWJsZV91cChzdHJ1Y3Qgc2VtYXBob3JlICpz MSwgc3RydWN0IHNlbWFwaG9yZSAqczIpCnsKICAgICAgICB1cChzMSk7CiAgICAgICAgaWYgKHMx ICE9IHMyKQogICAgICAgICAgICAgICAgdXAoczIpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgdHJp cGxlX3VwKHN0cnVjdCBzZW1hcGhvcmUgKnMxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCBzZW1hcGhvcmUgKnMyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCBzZW1hcGhvcmUgKnMzKQp7CiAgICAgICAgdXAoczEpOwogICAgICAgIGlmIChzMSAhPSBzMikK ICAgICAgICAgICAgICAgIHVwKHMyKTsKICAgICAgICB1cChzMyk7Cn0KCnN0YXRpYyBpbmxpbmUg dm9pZCBkb3VibGVfbG9jayhzdHJ1Y3QgZGVudHJ5ICpkMSwgc3RydWN0IGRlbnRyeSAqZDIpCnsK ICAgICAgICBkb3VibGVfZG93bigmZDEtPmRfaW5vZGUtPmlfc2VtLCAmZDItPmRfaW5vZGUtPmlf c2VtKTsKfQoKc3RhdGljIGlubGluZSB2b2lkIGRvdWJsZV91bmxvY2soc3RydWN0IGRlbnRyeSAq ZDEsIHN0cnVjdCBkZW50cnkgKmQyKQp7CiAgICAgICAgZG91YmxlX3VwKCZkMS0+ZF9pbm9kZS0+ aV9zZW0sJmQyLT5kX2lub2RlLT5pX3NlbSk7CiAgICAgICAgZHB1dF9SM2RlODEzYTYoZDEpOwog ICAgICAgIGRwdXRfUjNkZTgxM2E2KGQyKTsKfQojIDE4ICIvdXNyL3NyYy9saW51eC0yLjQuMjAt OC9pbmNsdWRlL2xpbnV4L2NhcGFiaWxpdHkuaCIgMgojIDMyICIvdXNyL3NyYy9saW51eC0yLjQu MjAtOC9pbmNsdWRlL2xpbnV4L2NhcGFiaWxpdHkuaCIKdHlwZWRlZiBzdHJ1Y3QgX191c2VyX2Nh cF9oZWFkZXJfc3RydWN0IHsKICAgICAgICBfX3UzMiB2ZXJzaW9uOwogICAgICAgIGludCBwaWQ7 Cn0gKmNhcF91c2VyX2hlYWRlcl90OwoKdHlwZWRlZiBzdHJ1Y3QgX191c2VyX2NhcF9kYXRhX3N0 cnVjdCB7CiAgICAgICAgX191MzIgZWZmZWN0aXZlOwogICAgICAgIF9fdTMyIHBlcm1pdHRlZDsK ICAgICAgICBfX3UzMiBpbmhlcml0YWJsZTsKfSAqY2FwX3VzZXJfZGF0YV90OwojIDU1ICIvdXNy L3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2NhcGFiaWxpdHkuaCIKdHlwZWRlZiBf X3UzMiBrZXJuZWxfY2FwX3Q7CiMgMjg2ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRl L2xpbnV4L2NhcGFiaWxpdHkuaCIKZXh0ZXJuIGtlcm5lbF9jYXBfdCBjYXBfYnNldF9SNTlhYjQw ODA7CiMgMzE0ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2NhcGFiaWxp dHkuaCIKc3RhdGljIGlubGluZSBrZXJuZWxfY2FwX3QgY2FwX2NvbWJpbmUoa2VybmVsX2NhcF90 IGEsIGtlcm5lbF9jYXBfdCBiKQp7CiAgICAga2VybmVsX2NhcF90IGRlc3Q7CiAgICAgKGRlc3Qp ID0gKGEpIHwgKGIpOwogICAgIHJldHVybiBkZXN0Owp9CgpzdGF0aWMgaW5saW5lIGtlcm5lbF9j YXBfdCBjYXBfaW50ZXJzZWN0KGtlcm5lbF9jYXBfdCBhLCBrZXJuZWxfY2FwX3QgYikKewogICAg IGtlcm5lbF9jYXBfdCBkZXN0OwogICAgIChkZXN0KSA9IChhKSAmIChiKTsKICAgICByZXR1cm4g ZGVzdDsKfQoKc3RhdGljIGlubGluZSBrZXJuZWxfY2FwX3QgY2FwX2Ryb3Aoa2VybmVsX2NhcF90 IGEsIGtlcm5lbF9jYXBfdCBkcm9wKQp7CiAgICAga2VybmVsX2NhcF90IGRlc3Q7CiAgICAgKGRl c3QpID0gKGEpICYgfihkcm9wKTsKICAgICByZXR1cm4gZGVzdDsKfQoKc3RhdGljIGlubGluZSBr ZXJuZWxfY2FwX3QgY2FwX2ludmVydChrZXJuZWxfY2FwX3QgYykKewogICAgIGtlcm5lbF9jYXBf dCBkZXN0OwogICAgIChkZXN0KSA9IH4oYyk7CiAgICAgcmV0dXJuIGRlc3Q7Cn0KIyA1ICIvdXNy L3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaCIgMgojIDE4ICIvdXNy L3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaCIKc3RydWN0IGZpbGU7 CgpzdHJ1Y3QgbW1fc3RydWN0OwoKCgoKc3RydWN0IGxpbnV4X2JpbnBybXsKICAgICAgICBjaGFy IGJ1ZlsxMjhdOwogICAgICAgIHN0cnVjdCBwYWdlICpwYWdlWzMyXTsKICAgICAgICB1bnNpZ25l ZCBsb25nIHA7CiAgICAgICAgaW50IHNoX2Jhbmc7CiAgICAgICAgc3RydWN0IGZpbGUgKiBmaWxl OwogICAgICAgIGludCBlX3VpZCwgZV9naWQ7CiAgICAgICAga2VybmVsX2NhcF90IGNhcF9pbmhl cml0YWJsZSwgY2FwX3Blcm1pdHRlZCwgY2FwX2VmZmVjdGl2ZTsKICAgICAgICBpbnQgYXJnYywg ZW52YzsKICAgICAgICBjaGFyICogZmlsZW5hbWU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBsb2Fk ZXIsIGV4ZWM7Cn07CgoKCgoKc3RydWN0IGxpbnV4X2JpbmZtdCB7CiAgICAgICAgc3RydWN0IGxp bnV4X2JpbmZtdCAqIG5leHQ7CiAgICAgICAgc3RydWN0IG1vZHVsZSAqbW9kdWxlOwogICAgICAg IGludCAoKmxvYWRfYmluYXJ5KShzdHJ1Y3QgbGludXhfYmlucHJtICosIHN0cnVjdCBwdF9yZWdz ICogcmVncyk7CiAgICAgICAgaW50ICgqbG9hZF9zaGxpYikoc3RydWN0IGZpbGUgKik7CiAgICAg ICAgaW50ICgqY29yZV9kdW1wKShsb25nIHNpZ25yLCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MsIHN0 cnVjdCBmaWxlICogZmlsZSk7CiAgICAgICAgdW5zaWduZWQgbG9uZyBtaW5fY29yZWR1bXA7Cn07 CgpleHRlcm4gaW50IHJlZ2lzdGVyX2JpbmZtdF9SODY4ZTAwYjEoc3RydWN0IGxpbnV4X2JpbmZt dCAqKTsKZXh0ZXJuIGludCB1bnJlZ2lzdGVyX2JpbmZtdF9SNjc4NGIyMDQoc3RydWN0IGxpbnV4 X2JpbmZtdCAqKTsKCmV4dGVybiBpbnQgcHJlcGFyZV9iaW5wcm1fUmZjNWZiMWFiKHN0cnVjdCBs aW51eF9iaW5wcm0gKik7CmV4dGVybiB2b2lkIHJlbW92ZV9hcmdfemVyb19SYjY4ZTcwMzQoc3Ry dWN0IGxpbnV4X2JpbnBybSAqKTsKZXh0ZXJuIGludCBzZWFyY2hfYmluYXJ5X2hhbmRsZXJfUjYy NmZmYTA1KHN0cnVjdCBsaW51eF9iaW5wcm0gKixzdHJ1Y3QgcHRfcmVncyAqKTsKZXh0ZXJuIGlu dCBmbHVzaF9vbGRfZXhlY19SN2VmYzJjNmEoc3RydWN0IGxpbnV4X2JpbnBybSAqIGJwcm0pOwpl eHRlcm4gaW50IHNldHVwX2FyZ19wYWdlc19SNTJkZjRiZTYoc3RydWN0IGxpbnV4X2JpbnBybSAq IGJwcm0pOwpleHRlcm4gaW50IGNvcHlfc3RyaW5ncyhpbnQgYXJnYyxjaGFyICoqIGFyZ3Ysc3Ry dWN0IGxpbnV4X2JpbnBybSAqYnBybSk7CmV4dGVybiBpbnQgY29weV9zdHJpbmdzX2tlcm5lbF9S ODk1Zjk2MmEoaW50IGFyZ2MsY2hhciAqKiBhcmd2LHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0p OwpleHRlcm4gdm9pZCBjb21wdXRlX2NyZWRzX1I5MzI0YzU1OChzdHJ1Y3QgbGludXhfYmlucHJt ICpiaW5wcm0pOwpleHRlcm4gaW50IGRvX2NvcmVkdW1wKGxvbmcgc2lnbnIsIGludCBleGl0X2Nv ZGUsIHN0cnVjdCBwdF9yZWdzICogcmVncyk7CmV4dGVybiB2b2lkIHNldF9iaW5mbXRfUmI3MTkz YzA3KHN0cnVjdCBsaW51eF9iaW5mbXQgKm5ldyk7CiMgMTEgIi91c3Ivc3JjL2xpbnV4LTIuNC4y MC04L2luY2x1ZGUvbGludXgvc2NoZWQuaCIgMgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAt OC9pbmNsdWRlL2xpbnV4L2xvdy1sYXRlbmN5LmgiIDEKIyAyNCAiL3Vzci9zcmMvbGludXgtMi40 LjIwLTgvaW5jbHVkZS9saW51eC9sb3ctbGF0ZW5jeS5oIgp2b2lkIHNldF9ydW5uaW5nX2FuZF9z Y2hlZHVsZV9SMjk1NzQxNTEodm9pZCk7CiMgMzYgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2lu Y2x1ZGUvbGludXgvbG93LWxhdGVuY3kuaCIKZXh0ZXJuIGludCBsbF9jb3B5X3RvX3VzZXIodm9p ZCAqdG9fdXNlciwgY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyBsZW4pOwpleHRlcm4g aW50IGxsX2NvcHlfZnJvbV91c2VyKHZvaWQgKnRvLCBjb25zdCB2b2lkICpmcm9tX3VzZXIsIHVu c2lnbmVkIGxvbmcgbGVuKTsKIyAxMyAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9s aW51eC9zY2hlZC5oIiAyCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xp bnV4L3RpbWVzLmgiIDEKCgoKc3RydWN0IHRtcyB7CiAgICAgICAgY2xvY2tfdCB0bXNfdXRpbWU7 CiAgICAgICAgY2xvY2tfdCB0bXNfc3RpbWU7CiAgICAgICAgY2xvY2tfdCB0bXNfY3V0aW1lOwog ICAgICAgIGNsb2NrX3QgdG1zX2NzdGltZTsKfTsKIyAxNiAiL3Vzci9zcmMvbGludXgtMi40LjIw LTgvaW5jbHVkZS9saW51eC9zY2hlZC5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgv aW5jbHVkZS9saW51eC90aW1leC5oIiAxCiMgMTUyICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9p bmNsdWRlL2xpbnV4L3RpbWV4LmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVk ZS9hc20vdGltZXguaCIgMQojIDEwICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2Fz bS90aW1leC5oIgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvYXNtL21zci5o IiAxCiMgMTEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvYXNtL3RpbWV4LmgiIDIK IyAzNyAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9hc20vdGltZXguaCIKdHlwZWRl ZiB1bnNpZ25lZCBsb25nIGxvbmcgY3ljbGVzX3Q7CgpleHRlcm4gY3ljbGVzX3QgY2FjaGVmbHVz aF90aW1lOwoKc3RhdGljIGlubGluZSBjeWNsZXNfdCBnZXRfY3ljbGVzICh2b2lkKQp7CgoKCiAg ICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHJldDsKCiAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxl X18oInJkdHNjIiA6ICI9QSIgKHJldCkpOwogICAgICAgIHJldHVybiByZXQ7Cgp9CgpleHRlcm4g dW5zaWduZWQgbG9uZyBjcHVfa2h6X1I3NWM0ZjVmNzsKIyAxNTMgIi91c3Ivc3JjL2xpbnV4LTIu NC4yMC04L2luY2x1ZGUvbGludXgvdGltZXguaCIgMgojIDE2MSAiL3Vzci9zcmMvbGludXgtMi40 LjIwLTgvaW5jbHVkZS9saW51eC90aW1leC5oIgpzdHJ1Y3QgdGltZXggewogICAgICAgIHVuc2ln bmVkIGludCBtb2RlczsKICAgICAgICBsb25nIG9mZnNldDsKICAgICAgICBsb25nIGZyZXE7CiAg ICAgICAgbG9uZyBtYXhlcnJvcjsKICAgICAgICBsb25nIGVzdGVycm9yOwogICAgICAgIGludCBz dGF0dXM7CiAgICAgICAgbG9uZyBjb25zdGFudDsKICAgICAgICBsb25nIHByZWNpc2lvbjsKICAg ICAgICBsb25nIHRvbGVyYW5jZTsKCgogICAgICAgIHN0cnVjdCB0aW1ldmFsIHRpbWU7CiAgICAg ICAgbG9uZyB0aWNrOwoKICAgICAgICBsb25nIHBwc2ZyZXE7CiAgICAgICAgbG9uZyBqaXR0ZXI7 CiAgICAgICAgaW50IHNoaWZ0OwogICAgICAgIGxvbmcgc3RhYmlsOwogICAgICAgIGxvbmcgaml0 Y250OwogICAgICAgIGxvbmcgY2FsY250OwogICAgICAgIGxvbmcgZXJyY250OwogICAgICAgIGxv bmcgc3RiY250OwoKICAgICAgICBpbnQgOjMyOyBpbnQgOjMyOyBpbnQgOjMyOyBpbnQgOjMyOwog ICAgICAgIGludCA6MzI7IGludCA6MzI7IGludCA6MzI7IGludCA6MzI7CiAgICAgICAgaW50IDoz MjsgaW50IDozMjsgaW50IDozMjsgaW50IDozMjsKfTsKIyAyNTMgIi91c3Ivc3JjL2xpbnV4LTIu NC4yMC04L2luY2x1ZGUvbGludXgvdGltZXguaCIKZXh0ZXJuIGxvbmcgdGljazsKZXh0ZXJuIGlu dCB0aWNrYWRqOwoKCgoKZXh0ZXJuIGludCB0aW1lX3N0YXRlOwpleHRlcm4gaW50IHRpbWVfc3Rh dHVzOwpleHRlcm4gbG9uZyB0aW1lX29mZnNldDsKZXh0ZXJuIGxvbmcgdGltZV9jb25zdGFudDsK ZXh0ZXJuIGxvbmcgdGltZV90b2xlcmFuY2U7CmV4dGVybiBsb25nIHRpbWVfcHJlY2lzaW9uOwpl eHRlcm4gbG9uZyB0aW1lX21heGVycm9yOwpleHRlcm4gbG9uZyB0aW1lX2VzdGVycm9yOwoKZXh0 ZXJuIGxvbmcgdGltZV9waGFzZTsKZXh0ZXJuIGxvbmcgdGltZV9mcmVxOwpleHRlcm4gbG9uZyB0 aW1lX2FkajsKZXh0ZXJuIGxvbmcgdGltZV9yZWZ0aW1lOwoKZXh0ZXJuIGxvbmcgdGltZV9hZGp1 c3Q7CgoKZXh0ZXJuIGxvbmcgcHBzX29mZnNldDsKZXh0ZXJuIGxvbmcgcHBzX2ppdHRlcjsKZXh0 ZXJuIGxvbmcgcHBzX2ZyZXE7CmV4dGVybiBsb25nIHBwc19zdGFiaWw7CmV4dGVybiBsb25nIHBw c192YWxpZDsKCgpleHRlcm4gaW50IHBwc19zaGlmdDsKZXh0ZXJuIGxvbmcgcHBzX2ppdGNudDsK ZXh0ZXJuIGxvbmcgcHBzX2NhbGNudDsKZXh0ZXJuIGxvbmcgcHBzX2VycmNudDsKZXh0ZXJuIGxv bmcgcHBzX3N0YmNudDsKIyAxNyAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51 eC9zY2hlZC5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9y YnRyZWUuaCIgMQojIDEwMCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9y YnRyZWUuaCIKdHlwZWRlZiBzdHJ1Y3QgcmJfbm9kZV9zCnsKICAgICAgICBzdHJ1Y3QgcmJfbm9k ZV9zICogcmJfcGFyZW50OwogICAgICAgIGludCByYl9jb2xvcjsKCgogICAgICAgIHN0cnVjdCBy Yl9ub2RlX3MgKiByYl9yaWdodDsKICAgICAgICBzdHJ1Y3QgcmJfbm9kZV9zICogcmJfbGVmdDsK fQpyYl9ub2RlX3Q7Cgp0eXBlZGVmIHN0cnVjdCByYl9yb290X3MKewogICAgICAgIHN0cnVjdCBy Yl9ub2RlX3MgKiByYl9ub2RlOwp9CnJiX3Jvb3RfdDsKCgoKCgpleHRlcm4gdm9pZCByYl9pbnNl cnRfY29sb3JfUmFhMmI1YTIyKHJiX25vZGVfdCAqLCByYl9yb290X3QgKik7CmV4dGVybiB2b2lk IHJiX2VyYXNlX1JkYTIyNmE4MChyYl9ub2RlX3QgKiwgcmJfcm9vdF90ICopOwoKc3RhdGljIGlu bGluZSB2b2lkIHJiX2xpbmtfbm9kZShyYl9ub2RlX3QgKiBub2RlLCByYl9ub2RlX3QgKiBwYXJl bnQsIHJiX25vZGVfdCAqKiByYl9saW5rKQp7CiAgICAgICAgbm9kZS0+cmJfcGFyZW50ID0gcGFy ZW50OwogICAgICAgIG5vZGUtPnJiX2NvbG9yID0gMDsKICAgICAgICBub2RlLT5yYl9sZWZ0ID0g bm9kZS0+cmJfcmlnaHQgPSAoKHZvaWQgKikwKTsKCiAgICAgICAgKnJiX2xpbmsgPSBub2RlOwp9 CiMgMTggIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvc2NoZWQuaCIgMgoK CgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2FzbS9wdHJhY2UuaCIgMQoj IDI2ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2FzbS9wdHJhY2UuaCIKc3RydWN0 IHB0X3JlZ3MgewogICAgICAgIGxvbmcgZWJ4OwogICAgICAgIGxvbmcgZWN4OwogICAgICAgIGxv bmcgZWR4OwogICAgICAgIGxvbmcgZXNpOwogICAgICAgIGxvbmcgZWRpOwogICAgICAgIGxvbmcg ZWJwOwogICAgICAgIGxvbmcgZWF4OwogICAgICAgIGludCB4ZHM7CiAgICAgICAgaW50IHhlczsK ICAgICAgICBsb25nIG9yaWdfZWF4OwogICAgICAgIGxvbmcgZWlwOwogICAgICAgIGludCB4Y3M7 CiAgICAgICAgbG9uZyBlZmxhZ3M7CiAgICAgICAgbG9uZyBlc3A7CiAgICAgICAgaW50IHhzczsK fTsKIyA2MCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9hc20vcHRyYWNlLmgiCmV4 dGVybiB2b2lkIHNob3dfcmVnc19SNmFiMWFmOTgoc3RydWN0IHB0X3JlZ3MgKik7CiMgMjMgIi91 c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvc2NoZWQuaCIgMgojIDEgIi91c3Iv c3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvYXNtL21tdS5oIiAxCiMgMTAgIi91c3Ivc3JjL2xp bnV4LTIuNC4yMC04L2luY2x1ZGUvYXNtL21tdS5oIgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAg aW50IHNpemU7CiAgICAgICAgc3RydWN0IHNlbWFwaG9yZSBzZW07CiAgICAgICAgdm9pZCAqIGxk dDsKfSBtbV9jb250ZXh0X3Q7CiMgMjQgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUv bGludXgvc2NoZWQuaCIgMgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xp bnV4L3NtcC5oIiAxCiMgOTAgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgv c21wLmgiCnN0YXRpYyBpbmxpbmUgdm9pZCBzbXBfc2VuZF9yZXNjaGVkdWxlKGludCBjcHUpIHsg fQpzdGF0aWMgaW5saW5lIHZvaWQgc21wX3NlbmRfcmVzY2hlZHVsZV9hbGwodm9pZCkgeyB9CiMg MjYgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvc2NoZWQuaCIgMgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvdHR5LmgiIDEKIyAyMSAiL3Vz ci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC90dHkuaCIKIyAxICIvdXNyL3NyYy9s aW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21ham9yLmgiIDEKIyAxOTAgIi91c3Ivc3JjL2xp bnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbWFqb3IuaCIKc3RhdGljIF9faW5saW5lX18gaW50 IHNjc2lfYmxrX21ham9yKGludCBtKSB7CiAgICAgICAgcmV0dXJuICgoKG0pID09IDggfHwgKCht KSA+PSA2NSAmJiAobSkgPD0gNzEpIHx8ICgobSkgPj0gMTI4ICYmIChtKSA8PSAxMzUpKSB8fCAo bSkgPT0gMTEpOwp9CiMgMjAzICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4 L21ham9yLmgiCnN0YXRpYyBfX2lubGluZV9fIGludCBpZGVfYmxrX21ham9yKGludCBtKQp7CiAg ICAgICAgcmV0dXJuICgobSkgPT0gMyB8fCAobSkgPT0gMjIgfHwgKG0pID09IDMzIHx8IChtKSA9 PSAzNCB8fCAobSkgPT0gNTYgfHwgKG0pID09IDU3IHx8IChtKSA9PSA4OCB8fCAobSkgPT0gODkg fHwgKG0pID09IDkwIHx8IChtKSA9PSA5MSk7Cn0KIyAyMiAiL3Vzci9zcmMvbGludXgtMi40LjIw LTgvaW5jbHVkZS9saW51eC90dHkuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2lu Y2x1ZGUvbGludXgvdGVybWlvcy5oIiAxCgoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04 L2luY2x1ZGUvYXNtL3Rlcm1pb3MuaCIgMQoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04 L2luY2x1ZGUvYXNtL3Rlcm1iaXRzLmgiIDEKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgY2Nf dDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgc3BlZWRfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdGNm bGFnX3Q7CgoKc3RydWN0IHRlcm1pb3MgewogICAgICAgIHRjZmxhZ190IGNfaWZsYWc7CiAgICAg ICAgdGNmbGFnX3QgY19vZmxhZzsKICAgICAgICB0Y2ZsYWdfdCBjX2NmbGFnOwogICAgICAgIHRj ZmxhZ190IGNfbGZsYWc7CiAgICAgICAgY2NfdCBjX2xpbmU7CiAgICAgICAgY2NfdCBjX2NjWzE5 XTsKfTsKIyA1ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2FzbS90ZXJtaW9zLmgi IDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2FzbS9pb2N0bHMuaCIgMQoj IDYgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvYXNtL3Rlcm1pb3MuaCIgMgoKc3Ry dWN0IHdpbnNpemUgewogICAgICAgIHVuc2lnbmVkIHNob3J0IHdzX3JvdzsKICAgICAgICB1bnNp Z25lZCBzaG9ydCB3c19jb2w7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgd3NfeHBpeGVsOwogICAg ICAgIHVuc2lnbmVkIHNob3J0IHdzX3lwaXhlbDsKfTsKCgpzdHJ1Y3QgdGVybWlvIHsKICAgICAg ICB1bnNpZ25lZCBzaG9ydCBjX2lmbGFnOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGNfb2ZsYWc7 CiAgICAgICAgdW5zaWduZWQgc2hvcnQgY19jZmxhZzsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBj X2xmbGFnOwogICAgICAgIHVuc2lnbmVkIGNoYXIgY19saW5lOwogICAgICAgIHVuc2lnbmVkIGNo YXIgY19jY1s4XTsKfTsKIyA2ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4 L3Rlcm1pb3MuaCIgMgojIDIzICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4 L3R0eS5oIiAyCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvdHR5 X2RyaXZlci5oIiAxCiMgMTIwICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4 L3R0eV9kcml2ZXIuaCIKc3RydWN0IHR0eV9kcml2ZXIgewogICAgICAgIGludCBtYWdpYzsKICAg ICAgICBjb25zdCBjaGFyICpkcml2ZXJfbmFtZTsKICAgICAgICBjb25zdCBjaGFyICpuYW1lOwog ICAgICAgIGludCBuYW1lX2Jhc2U7CiAgICAgICAgc2hvcnQgbWFqb3I7CiAgICAgICAgc2hvcnQg bWlub3Jfc3RhcnQ7CiAgICAgICAgc2hvcnQgbnVtOwogICAgICAgIHNob3J0IHR5cGU7CiAgICAg ICAgc2hvcnQgc3VidHlwZTsKICAgICAgICBzdHJ1Y3QgdGVybWlvcyBpbml0X3Rlcm1pb3M7CiAg ICAgICAgaW50IGZsYWdzOwogICAgICAgIGludCAqcmVmY291bnQ7CiAgICAgICAgc3RydWN0IHBy b2NfZGlyX2VudHJ5ICpwcm9jX2VudHJ5OwogICAgICAgIHN0cnVjdCB0dHlfZHJpdmVyICpvdGhl cjsKCgoKCiAgICAgICAgc3RydWN0IHR0eV9zdHJ1Y3QgKip0YWJsZTsKICAgICAgICBzdHJ1Y3Qg dGVybWlvcyAqKnRlcm1pb3M7CiAgICAgICAgc3RydWN0IHRlcm1pb3MgKip0ZXJtaW9zX2xvY2tl ZDsKICAgICAgICB2b2lkICpkcml2ZXJfc3RhdGU7CgoKCgoKICAgICAgICBpbnQgKCpvcGVuKShz dHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSwgc3RydWN0IGZpbGUgKiBmaWxwKTsKICAgICAgICB2b2lk ICgqY2xvc2UpKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbHApOwog ICAgICAgIGludCAoKndyaXRlKShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSwgaW50IGZyb21fdXNl ciwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNv dW50KTsKICAgICAgICB2b2lkICgqcHV0X2NoYXIpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHVu c2lnbmVkIGNoYXIgY2gpOwogICAgICAgIHZvaWQgKCpmbHVzaF9jaGFycykoc3RydWN0IHR0eV9z dHJ1Y3QgKnR0eSk7CiAgICAgICAgaW50ICgqd3JpdGVfcm9vbSkoc3RydWN0IHR0eV9zdHJ1Y3Qg KnR0eSk7CiAgICAgICAgaW50ICgqY2hhcnNfaW5fYnVmZmVyKShzdHJ1Y3QgdHR5X3N0cnVjdCAq dHR5KTsKICAgICAgICBpbnQgKCppb2N0bCkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0 IGZpbGUgKiBmaWxlLAogICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2ln bmVkIGxvbmcgYXJnKTsKICAgICAgICB2b2lkICgqc2V0X3Rlcm1pb3MpKHN0cnVjdCB0dHlfc3Ry dWN0ICp0dHksIHN0cnVjdCB0ZXJtaW9zICogb2xkKTsKICAgICAgICB2b2lkICgqdGhyb3R0bGUp KHN0cnVjdCB0dHlfc3RydWN0ICogdHR5KTsKICAgICAgICB2b2lkICgqdW50aHJvdHRsZSkoc3Ry dWN0IHR0eV9zdHJ1Y3QgKiB0dHkpOwogICAgICAgIHZvaWQgKCpzdG9wKShzdHJ1Y3QgdHR5X3N0 cnVjdCAqdHR5KTsKICAgICAgICB2b2lkICgqc3RhcnQpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkp OwogICAgICAgIHZvaWQgKCpoYW5ndXApKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogICAgICAg IHZvaWQgKCpicmVha19jdGwpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBzdGF0ZSk7CiAg ICAgICAgdm9pZCAoKmZsdXNoX2J1ZmZlcikoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiAgICAg ICAgdm9pZCAoKnNldF9sZGlzYykoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiAgICAgICAgdm9p ZCAoKndhaXRfdW50aWxfc2VudCkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IHRpbWVvdXQp OwogICAgICAgIHZvaWQgKCpzZW5kX3hjaGFyKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjaGFy IGNoKTsKICAgICAgICBpbnQgKCpyZWFkX3Byb2MpKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwg b2ZmX3Qgb2ZmLAogICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb3VudCwgaW50ICplb2Ys IHZvaWQgKmRhdGEpOwogICAgICAgIGludCAoKndyaXRlX3Byb2MpKHN0cnVjdCBmaWxlICpmaWxl LCBjb25zdCBjaGFyICpidWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg bG9uZyBjb3VudCwgdm9pZCAqZGF0YSk7CgoKCgogICAgICAgIHN0cnVjdCB0dHlfZHJpdmVyICpu ZXh0OwogICAgICAgIHN0cnVjdCB0dHlfZHJpdmVyICpwcmV2Owp9OwojIDI1ICIvdXNyL3NyYy9s aW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3R0eS5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgt Mi40LjIwLTgvaW5jbHVkZS9saW51eC90dHlfbGRpc2MuaCIgMQojIDEwMyAiL3Vzci9zcmMvbGlu dXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC90dHlfbGRpc2MuaCIKc3RydWN0IHR0eV9sZGlzYyB7 CiAgICAgICAgaW50IG1hZ2ljOwogICAgICAgIGNoYXIgKm5hbWU7CiAgICAgICAgaW50IG51bTsK ICAgICAgICBpbnQgZmxhZ3M7CgoKCiAgICAgICAgaW50ICgqb3Blbikoc3RydWN0IHR0eV9zdHJ1 Y3QgKik7CiAgICAgICAgdm9pZCAoKmNsb3NlKShzdHJ1Y3QgdHR5X3N0cnVjdCAqKTsKICAgICAg ICB2b2lkICgqZmx1c2hfYnVmZmVyKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKICAgICAgICBz c2l6ZV90ICgqY2hhcnNfaW5fYnVmZmVyKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKICAgICAg ICBzc2l6ZV90ICgqcmVhZCkoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHksIHN0cnVjdCBmaWxlICog ZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqIGJ1Ziwgc2l6ZV90 IG5yKTsKICAgICAgICBzc2l6ZV90ICgqd3JpdGUpKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCBz dHJ1Y3QgZmlsZSAqIGZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25l ZCBjaGFyICogYnVmLCBzaXplX3QgbnIpOwogICAgICAgIGludCAoKmlvY3RsKShzdHJ1Y3QgdHR5 X3N0cnVjdCAqIHR0eSwgc3RydWN0IGZpbGUgKiBmaWxlLAogICAgICAgICAgICAgICAgICAgICAg ICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogICAgICAgIHZvaWQgKCpz ZXRfdGVybWlvcykoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHRlcm1pb3MgKiBvbGQp OwogICAgICAgIHVuc2lnbmVkIGludCAoKnBvbGwpKHN0cnVjdCB0dHlfc3RydWN0ICosIHN0cnVj dCBmaWxlICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHBvbGxfdGFibGVf c3RydWN0ICopOwoKCgoKICAgICAgICB2b2lkICgqcmVjZWl2ZV9idWYpKHN0cnVjdCB0dHlfc3Ry dWN0ICosIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNwLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY2hhciAqZnAsIGludCBjb3VudCk7CiAgICAgICAgaW50ICgqcmVjZWl2ZV9yb29tKShz dHJ1Y3QgdHR5X3N0cnVjdCAqKTsKICAgICAgICB2b2lkICgqd3JpdGVfd2FrZXVwKShzdHJ1Y3Qg dHR5X3N0cnVjdCAqKTsKfTsKIyAyNiAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9s aW51eC90dHkuaCIgMgojIDU5ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4 L3R0eS5oIgpzdHJ1Y3Qgc2NyZWVuX2luZm9fUjdlMjM5MjQ3IHsKICAgICAgICB1OCBvcmlnX3g7 CiAgICAgICAgdTggb3JpZ195OwogICAgICAgIHUxNiBkb250dXNlMTsKICAgICAgICB1MTYgb3Jp Z192aWRlb19wYWdlOwogICAgICAgIHU4IG9yaWdfdmlkZW9fbW9kZTsKICAgICAgICB1OCBvcmln X3ZpZGVvX2NvbHM7CiAgICAgICAgdTE2IHVudXNlZDI7CiAgICAgICAgdTE2IG9yaWdfdmlkZW9f ZWdhX2J4OwogICAgICAgIHUxNiB1bnVzZWQzOwogICAgICAgIHU4IG9yaWdfdmlkZW9fbGluZXM7 CiAgICAgICAgdTggb3JpZ192aWRlb19pc1ZHQTsKICAgICAgICB1MTYgb3JpZ192aWRlb19wb2lu dHM7CgoKICAgICAgICB1MTYgbGZiX3dpZHRoOwogICAgICAgIHUxNiBsZmJfaGVpZ2h0OwogICAg ICAgIHUxNiBsZmJfZGVwdGg7CiAgICAgICAgdTMyIGxmYl9iYXNlOwogICAgICAgIHUzMiBsZmJf c2l6ZTsKICAgICAgICB1MTYgZG9udHVzZTIsIGRvbnR1c2UzOwogICAgICAgIHUxNiBsZmJfbGlu ZWxlbmd0aDsKICAgICAgICB1OCByZWRfc2l6ZTsKICAgICAgICB1OCByZWRfcG9zOwogICAgICAg IHU4IGdyZWVuX3NpemU7CiAgICAgICAgdTggZ3JlZW5fcG9zOwogICAgICAgIHU4IGJsdWVfc2l6 ZTsKICAgICAgICB1OCBibHVlX3BvczsKICAgICAgICB1OCByc3ZkX3NpemU7CiAgICAgICAgdTgg cnN2ZF9wb3M7CiAgICAgICAgdTE2IHZlc2FwbV9zZWc7CiAgICAgICAgdTE2IHZlc2FwbV9vZmY7 CiAgICAgICAgdTE2IHBhZ2VzOwoKfTsKCmV4dGVybiBzdHJ1Y3Qgc2NyZWVuX2luZm9fUjdlMjM5 MjQ3IHNjcmVlbl9pbmZvX1I3ZTIzOTI0NzsKIyAxMzkgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04 L2luY2x1ZGUvbGludXgvdHR5LmgiCnN0cnVjdCB0dHlfZmxpcF9idWZmZXIgewogICAgICAgIHN0 cnVjdCB0cV9zdHJ1Y3QgdHF1ZXVlOwogICAgICAgIHN0cnVjdCBzZW1hcGhvcmUgcHR5X3NlbTsK ICAgICAgICBjaGFyICpjaGFyX2J1Zl9wdHI7CiAgICAgICAgdW5zaWduZWQgY2hhciAqZmxhZ19i dWZfcHRyOwogICAgICAgIGludCBjb3VudDsKICAgICAgICBpbnQgYnVmX251bTsKICAgICAgICB1 bnNpZ25lZCBjaGFyIGNoYXJfYnVmWzIqNTEyXTsKICAgICAgICBjaGFyIGZsYWdfYnVmWzIqNTEy XTsKICAgICAgICB1bnNpZ25lZCBjaGFyIHNsb3BbNF07Cn07CiMgMjU5ICIvdXNyL3NyYy9saW51 eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3R0eS5oIgpzdHJ1Y3QgdHR5X3N0cnVjdCB7CiAgICAg ICAgaW50IG1hZ2ljOwogICAgICAgIHN0cnVjdCB0dHlfZHJpdmVyIGRyaXZlcjsKICAgICAgICBz dHJ1Y3QgdHR5X2xkaXNjIGxkaXNjOwogICAgICAgIHN0cnVjdCB0ZXJtaW9zICp0ZXJtaW9zLCAq dGVybWlvc19sb2NrZWQ7CiAgICAgICAgaW50IHBncnA7CiAgICAgICAgaW50IHNlc3Npb247CiAg ICAgICAga2Rldl90IGRldmljZTsKICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogICAgICAg IGludCBjb3VudDsKICAgICAgICBzdHJ1Y3Qgd2luc2l6ZSB3aW5zaXplOwogICAgICAgIHVuc2ln bmVkIGNoYXIgc3RvcHBlZDoxLCBod19zdG9wcGVkOjEsIGZsb3dfc3RvcHBlZDoxLCBwYWNrZXQ6 MTsKICAgICAgICB1bnNpZ25lZCBjaGFyIGxvd19sYXRlbmN5OjEsIHdhcm5lZDoxOwogICAgICAg IHVuc2lnbmVkIGNoYXIgY3RybF9zdGF0dXM7CgogICAgICAgIHN0cnVjdCB0dHlfc3RydWN0ICps aW5rOwogICAgICAgIHN0cnVjdCBmYXN5bmNfc3RydWN0ICpmYXN5bmM7CiAgICAgICAgc3RydWN0 IHR0eV9mbGlwX2J1ZmZlciBmbGlwOwogICAgICAgIGludCBtYXhfZmxpcF9jbnQ7CiAgICAgICAg aW50IGFsdF9zcGVlZDsKICAgICAgICB3YWl0X3F1ZXVlX2hlYWRfdCB3cml0ZV93YWl0OwogICAg ICAgIHdhaXRfcXVldWVfaGVhZF90IHJlYWRfd2FpdDsKICAgICAgICBzdHJ1Y3QgdHFfc3RydWN0 IHRxX2hhbmd1cDsKICAgICAgICB2b2lkICpkaXNjX2RhdGE7CiAgICAgICAgdm9pZCAqZHJpdmVy X2RhdGE7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCB0dHlfZmlsZXM7CgoKCgoKCgogICAgICAg IHVuc2lnbmVkIGludCBjb2x1bW47CiAgICAgICAgdW5zaWduZWQgY2hhciBsbmV4dDoxLCBlcmFz aW5nOjEsIHJhdzoxLCByZWFsX3JhdzoxLCBpY2Fub246MTsKICAgICAgICB1bnNpZ25lZCBjaGFy IGNsb3Npbmc6MTsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBtaW5pbXVtX3RvX3dha2U7CiAgICAg ICAgdW5zaWduZWQgb3ZlcnJ1bl90aW1lOwogICAgICAgIGludCBudW1fb3ZlcnJ1bjsKICAgICAg ICB1bnNpZ25lZCBsb25nIHByb2Nlc3NfY2hhcl9tYXBbMjU2Lyg4KnNpemVvZih1bnNpZ25lZCBs b25nKSldOwogICAgICAgIGNoYXIgKnJlYWRfYnVmOwogICAgICAgIGludCByZWFkX2hlYWQ7CiAg ICAgICAgaW50IHJlYWRfdGFpbDsKICAgICAgICBpbnQgcmVhZF9jbnQ7CiAgICAgICAgdW5zaWdu ZWQgbG9uZyByZWFkX2ZsYWdzWzQwOTYvKDgqc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKV07CiAgICAg ICAgaW50IGNhbm9uX2RhdGE7CiAgICAgICAgdW5zaWduZWQgbG9uZyBjYW5vbl9oZWFkOwogICAg ICAgIHVuc2lnbmVkIGludCBjYW5vbl9jb2x1bW47CiAgICAgICAgc3RydWN0IHNlbWFwaG9yZSBh dG9taWNfcmVhZDsKICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlIGF0b21pY193cml0ZTsKICAgICAg ICBzcGlubG9ja190IHJlYWRfbG9jazsKCiAgICAgICAgc3RydWN0IHRxX3N0cnVjdCBTQUtfdHE7 Cn07CiMgMzQxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3R0eS5oIgpl eHRlcm4gdm9pZCB0dHlfd3JpdGVfZmx1c2goc3RydWN0IHR0eV9zdHJ1Y3QgKik7CgpleHRlcm4g c3RydWN0IHRlcm1pb3MgdHR5X3N0ZF90ZXJtaW9zX1I4OWFjNTI1NDsKZXh0ZXJuIHN0cnVjdCB0 dHlfc3RydWN0ICogcmVkaXJlY3Q7CmV4dGVybiBzdHJ1Y3QgdHR5X2xkaXNjIGxkaXNjc1tdOwpl eHRlcm4gaW50IGZnX2NvbnNvbGVfUjRlNmU4ZWE3LCBsYXN0X2NvbnNvbGUsIHdhbnRfY29uc29s ZTsKCmV4dGVybiBpbnQga21zZ19yZWRpcmVjdDsKCmV4dGVybiB2b2lkIGNvbl9pbml0KHZvaWQp OwpleHRlcm4gdm9pZCBjb25zb2xlX2luaXQodm9pZCk7CgpleHRlcm4gaW50IGxwX2luaXQodm9p ZCk7CmV4dGVybiBpbnQgcHR5X2luaXQodm9pZCk7CmV4dGVybiB2b2lkIHR0eV9pbml0KHZvaWQp OwpleHRlcm4gaW50IG14c2VyX2luaXQodm9pZCk7CmV4dGVybiBpbnQgbW94YV9pbml0KHZvaWQp OwpleHRlcm4gaW50IGlwMl9pbml0KHZvaWQpOwpleHRlcm4gaW50IHBjeGVfaW5pdCh2b2lkKTsK ZXh0ZXJuIGludCBwY19pbml0KHZvaWQpOwpleHRlcm4gaW50IHZjc19pbml0KHZvaWQpOwpleHRl cm4gaW50IHJwX2luaXQodm9pZCk7CmV4dGVybiBpbnQgY3lfaW5pdCh2b2lkKTsKZXh0ZXJuIGlu dCBzdGxfaW5pdCh2b2lkKTsKZXh0ZXJuIGludCBzdGxpX2luaXQodm9pZCk7CmV4dGVybiBpbnQg c3BlY2lhbGl4X2luaXQodm9pZCk7CmV4dGVybiBpbnQgZXNwc2VyaWFsX2luaXQodm9pZCk7CmV4 dGVybiBpbnQgbWFjc2VyaWFsX2luaXQodm9pZCk7CmV4dGVybiBpbnQgYTIyMzJib2FyZF9pbml0 KHZvaWQpOwoKZXh0ZXJuIGludCB0dHlfcGFyYW5vaWFfY2hlY2soc3RydWN0IHR0eV9zdHJ1Y3Qg KnR0eSwga2Rldl90IGRldmljZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg Y2hhciAqcm91dGluZSk7CmV4dGVybiBjaGFyICp0dHlfbmFtZShzdHJ1Y3QgdHR5X3N0cnVjdCAq dHR5LCBjaGFyICpidWYpOwpleHRlcm4gdm9pZCB0dHlfd2FpdF91bnRpbF9zZW50X1I5YTQzNmEz NyhzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSwgbG9uZyB0aW1lb3V0KTsKZXh0ZXJuIGludCB0dHlf Y2hlY2tfY2hhbmdlX1I1ODM3NWE1OChzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSk7CmV4dGVybiB2 b2lkIHN0b3BfdHR5KHN0cnVjdCB0dHlfc3RydWN0ICogdHR5KTsKZXh0ZXJuIHZvaWQgc3RhcnRf dHR5KHN0cnVjdCB0dHlfc3RydWN0ICogdHR5KTsKZXh0ZXJuIGludCB0dHlfcmVnaXN0ZXJfbGRp c2NfUjMzMjgwNjg5KGludCBkaXNjLCBzdHJ1Y3QgdHR5X2xkaXNjICpuZXdfbGRpc2MpOwpleHRl cm4gaW50IHR0eV9yZWdpc3Rlcl9kcml2ZXJfUjA0ZmU0OWE3KHN0cnVjdCB0dHlfZHJpdmVyICpk cml2ZXIpOwpleHRlcm4gaW50IHR0eV91bnJlZ2lzdGVyX2RyaXZlcl9SM2Q2OGVmNjAoc3RydWN0 IHR0eV9kcml2ZXIgKmRyaXZlcik7CmV4dGVybiB2b2lkIHR0eV9yZWdpc3Rlcl9kZXZmc19SNzg0 MjE4MTggKHN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIsIHVuc2lnbmVkIGludCBmbGFncywKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBtaW5vcik7CmV4dGVybiB2b2lk IHR0eV91bnJlZ2lzdGVyX2RldmZzX1I0ZmQ0YWRiZCAoc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZl ciwgdW5zaWduZWQgbWlub3IpOwpleHRlcm4gaW50IHR0eV9yZWFkX3Jhd19kYXRhKHN0cnVjdCB0 dHlfc3RydWN0ICp0dHksIHVuc2lnbmVkIGNoYXIgKmJ1ZnAsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50IGJ1Zmxlbik7CmV4dGVybiB2b2lkIHR0eV93cml0ZV9tZXNzYWdlKHN0cnVj dCB0dHlfc3RydWN0ICp0dHksIGNoYXIgKm1zZyk7CgpleHRlcm4gaW50IGlzX29ycGhhbmVkX3Bn cnAoaW50IHBncnApOwpleHRlcm4gaW50IGlzX2lnbm9yZWQoaW50IHNpZyk7CmV4dGVybiBpbnQg dHR5X3NpZ25hbChpbnQgc2lnLCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKZXh0ZXJuIHZvaWQg dHR5X2hhbmd1cF9SNTM1YjYxZTAoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHkpOwpleHRlcm4gdm9p ZCB0dHlfdmhhbmd1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSk7CmV4dGVybiB2b2lkIHR0eV91 bmhhbmd1cChzdHJ1Y3QgZmlsZSAqZmlscCk7CmV4dGVybiBpbnQgdHR5X2h1bmdfdXBfcF9SY2Nl NGMxNDIoc3RydWN0IGZpbGUgKiBmaWxwKTsKZXh0ZXJuIHZvaWQgZG9fU0FLX1IzMWVjNmU2Nihz dHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKZXh0ZXJuIHZvaWQgZGlzYXNzb2NpYXRlX2N0dHkoaW50 IHByaXYpOwpleHRlcm4gdm9pZCB0dHlfZmxpcF9idWZmZXJfcHVzaF9SNDk5NzZkMTcoc3RydWN0 IHR0eV9zdHJ1Y3QgKnR0eSk7CmV4dGVybiBpbnQgdHR5X2dldF9iYXVkX3JhdGVfUmEyNWFlYjQ1 KHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwoKCmV4dGVybiBzdHJ1Y3QgdHR5X2xkaXNjIHR0eV9s ZGlzY19OX1RUWTsKCgpleHRlcm4gaW50IG5fdHR5X2lvY3RsX1IzNjg1YjM0ZShzdHJ1Y3QgdHR5 X3N0cnVjdCAqIHR0eSwgc3RydWN0IGZpbGUgKiBmaWxlLAogICAgICAgICAgICAgICAgICAgICAg IHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKCgoKZXh0ZXJuIHZvaWQgc2Vy aWFsX2NvbnNvbGVfaW5pdCh2b2lkKTsKCgoKZXh0ZXJuIGludCBwY3hlX29wZW4oc3RydWN0IHR0 eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApOwoKCgpleHRlcm4gdm9pZCBjb25zb2xl X3ByaW50X1JiNzE0YTk4MShjb25zdCBjaGFyICopOwoKCgpleHRlcm4gaW50IHZ0X2lvY3RsKHN0 cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICogZmlsZSwKICAgICAgICAgICAgICAg ICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiMgMjcgIi91c3Ivc3Jj L2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvc2NoZWQuaCIgMgojIDEgIi91c3Ivc3JjL2xp bnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvc2VtLmgiIDEKCgoKIyAxICIvdXNyL3NyYy9saW51 eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2lwYy5oIiAxCiMgOSAiL3Vzci9zcmMvbGludXgtMi40 LjIwLTgvaW5jbHVkZS9saW51eC9pcGMuaCIKc3RydWN0IGlwY19wZXJtCnsKICAgICAgICBfX2tl cm5lbF9rZXlfdCBrZXk7CiAgICAgICAgX19rZXJuZWxfdWlkX3QgdWlkOwogICAgICAgIF9fa2Vy bmVsX2dpZF90IGdpZDsKICAgICAgICBfX2tlcm5lbF91aWRfdCBjdWlkOwogICAgICAgIF9fa2Vy bmVsX2dpZF90IGNnaWQ7CiAgICAgICAgX19rZXJuZWxfbW9kZV90IG1vZGU7CiAgICAgICAgdW5z aWduZWQgc2hvcnQgc2VxOwp9OwoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVk ZS9hc20vaXBjYnVmLmgiIDEKIyAxNCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9h c20vaXBjYnVmLmgiCnN0cnVjdCBpcGM2NF9wZXJtCnsKICAgICAgICBfX2tlcm5lbF9rZXlfdCBr ZXk7CiAgICAgICAgX19rZXJuZWxfdWlkMzJfdCB1aWQ7CiAgICAgICAgX19rZXJuZWxfZ2lkMzJf dCBnaWQ7CiAgICAgICAgX19rZXJuZWxfdWlkMzJfdCBjdWlkOwogICAgICAgIF9fa2VybmVsX2dp ZDMyX3QgY2dpZDsKICAgICAgICBfX2tlcm5lbF9tb2RlX3QgbW9kZTsKICAgICAgICB1bnNpZ25l ZCBzaG9ydCBfX3BhZDE7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc2VxOwogICAgICAgIHVuc2ln bmVkIHNob3J0IF9fcGFkMjsKICAgICAgICB1bnNpZ25lZCBsb25nIF9fdW51c2VkMTsKICAgICAg ICB1bnNpZ25lZCBsb25nIF9fdW51c2VkMjsKfTsKIyAyMiAiL3Vzci9zcmMvbGludXgtMi40LjIw LTgvaW5jbHVkZS9saW51eC9pcGMuaCIgMgojIDU3ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9p bmNsdWRlL2xpbnV4L2lwYy5oIgpzdHJ1Y3Qga2Vybl9pcGNfcGVybQp7CiAgICAgICAga2V5X3Qg a2V5OwogICAgICAgIHVpZF90IHVpZDsKICAgICAgICBnaWRfdCBnaWQ7CiAgICAgICAgdWlkX3Qg Y3VpZDsKICAgICAgICBnaWRfdCBjZ2lkOwogICAgICAgIG1vZGVfdCBtb2RlOwogICAgICAgIHVu c2lnbmVkIGxvbmcgc2VxOwp9OwojIDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUv bGludXgvc2VtLmgiIDIKIyAyMyAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51 eC9zZW0uaCIKc3RydWN0IHNlbWlkX2RzIHsKICAgICAgICBzdHJ1Y3QgaXBjX3Blcm0gc2VtX3Bl cm07CiAgICAgICAgX19rZXJuZWxfdGltZV90IHNlbV9vdGltZTsKICAgICAgICBfX2tlcm5lbF90 aW1lX3Qgc2VtX2N0aW1lOwogICAgICAgIHN0cnVjdCBzZW0gKnNlbV9iYXNlOwogICAgICAgIHN0 cnVjdCBzZW1fcXVldWUgKnNlbV9wZW5kaW5nOwogICAgICAgIHN0cnVjdCBzZW1fcXVldWUgKipz ZW1fcGVuZGluZ19sYXN0OwogICAgICAgIHN0cnVjdCBzZW1fdW5kbyAqdW5kbzsKICAgICAgICB1 bnNpZ25lZCBzaG9ydCBzZW1fbnNlbXM7Cn07CgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAt OC9pbmNsdWRlL2FzbS9zZW1idWYuaCIgMQojIDE0ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9p bmNsdWRlL2FzbS9zZW1idWYuaCIKc3RydWN0IHNlbWlkNjRfZHMgewogICAgICAgIHN0cnVjdCBp cGM2NF9wZXJtIHNlbV9wZXJtOwogICAgICAgIF9fa2VybmVsX3RpbWVfdCBzZW1fb3RpbWU7CiAg ICAgICAgdW5zaWduZWQgbG9uZyBfX3VudXNlZDE7CiAgICAgICAgX19rZXJuZWxfdGltZV90IHNl bV9jdGltZTsKICAgICAgICB1bnNpZ25lZCBsb25nIF9fdW51c2VkMjsKICAgICAgICB1bnNpZ25l ZCBsb25nIHNlbV9uc2VtczsKICAgICAgICB1bnNpZ25lZCBsb25nIF9fdW51c2VkMzsKICAgICAg ICB1bnNpZ25lZCBsb25nIF9fdW51c2VkNDsKfTsKIyAzNiAiL3Vzci9zcmMvbGludXgtMi40LjIw LTgvaW5jbHVkZS9saW51eC9zZW0uaCIgMgoKCnN0cnVjdCBzZW1idWYgewogICAgICAgIHVuc2ln bmVkIHNob3J0IHNlbV9udW07CiAgICAgICAgc2hvcnQgc2VtX29wOwogICAgICAgIHNob3J0IHNl bV9mbGc7Cn07CgoKdW5pb24gc2VtdW4gewogICAgICAgIGludCB2YWw7CiAgICAgICAgc3RydWN0 IHNlbWlkX2RzICpidWY7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgKmFycmF5OwogICAgICAgIHN0 cnVjdCBzZW1pbmZvICpfX2J1ZjsKICAgICAgICB2b2lkICpfX3BhZDsKfTsKCnN0cnVjdCBzZW1p bmZvIHsKICAgICAgICBpbnQgc2VtbWFwOwogICAgICAgIGludCBzZW1tbmk7CiAgICAgICAgaW50 IHNlbW1uczsKICAgICAgICBpbnQgc2VtbW51OwogICAgICAgIGludCBzZW1tc2w7CiAgICAgICAg aW50IHNlbW9wbTsKICAgICAgICBpbnQgc2VtdW1lOwogICAgICAgIGludCBzZW11c3o7CiAgICAg ICAgaW50IHNlbXZteDsKICAgICAgICBpbnQgc2VtYWVtOwp9OwojIDgyICIvdXNyL3NyYy9saW51 eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3NlbS5oIgpzdHJ1Y3Qgc2VtIHsKICAgICAgICBpbnQg c2VtdmFsOwogICAgICAgIGludCBzZW1waWQ7Cn07CgoKc3RydWN0IHNlbV9hcnJheSB7CiAgICAg ICAgc3RydWN0IGtlcm5faXBjX3Blcm0gc2VtX3Blcm07CiAgICAgICAgdGltZV90IHNlbV9vdGlt ZTsKICAgICAgICB0aW1lX3Qgc2VtX2N0aW1lOwogICAgICAgIHN0cnVjdCBzZW0gKnNlbV9iYXNl OwogICAgICAgIHN0cnVjdCBzZW1fcXVldWUgKnNlbV9wZW5kaW5nOwogICAgICAgIHN0cnVjdCBz ZW1fcXVldWUgKipzZW1fcGVuZGluZ19sYXN0OwogICAgICAgIHN0cnVjdCBzZW1fdW5kbyAqdW5k bzsKICAgICAgICB1bnNpZ25lZCBsb25nIHNlbV9uc2VtczsKfTsKCgpzdHJ1Y3Qgc2VtX3F1ZXVl IHsKICAgICAgICBzdHJ1Y3Qgc2VtX3F1ZXVlICogbmV4dDsKICAgICAgICBzdHJ1Y3Qgc2VtX3F1 ZXVlICoqIHByZXY7CiAgICAgICAgc3RydWN0IHRhc2tfc3RydWN0KiBzbGVlcGVyOwogICAgICAg IHN0cnVjdCBzZW1fdW5kbyAqIHVuZG87CiAgICAgICAgaW50IHBpZDsKICAgICAgICBpbnQgc3Rh dHVzOwogICAgICAgIHN0cnVjdCBzZW1fYXJyYXkgKiBzbWE7CiAgICAgICAgaW50IGlkOwogICAg ICAgIHN0cnVjdCBzZW1idWYgKiBzb3BzOwogICAgICAgIGludCBuc29wczsKICAgICAgICBpbnQg YWx0ZXI7Cn07CgoKCgpzdHJ1Y3Qgc2VtX3VuZG8gewogICAgICAgIHN0cnVjdCBzZW1fdW5kbyAq IHByb2NfbmV4dDsKICAgICAgICBzdHJ1Y3Qgc2VtX3VuZG8gKiBpZF9uZXh0OwogICAgICAgIGlu dCBzZW1pZDsKICAgICAgICBzaG9ydCAqIHNlbWFkajsKfTsKCiBfX2F0dHJpYnV0ZV9fKChyZWdw YXJtKDApKSkgbG9uZyBzeXNfc2VtZ2V0IChrZXlfdCBrZXksIGludCBuc2VtcywgaW50IHNlbWZs Zyk7CiBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDApKSkgbG9uZyBzeXNfc2Vtb3AgKGludCBzZW1p ZCwgc3RydWN0IHNlbWJ1ZiAqc29wcywgdW5zaWduZWQgbnNvcHMpOwogX19hdHRyaWJ1dGVfXygo cmVncGFybSgwKSkpIGxvbmcgc3lzX3NlbWN0bCAoaW50IHNlbWlkLCBpbnQgc2VtbnVtLCBpbnQg Y21kLCB1bmlvbiBzZW11biBhcmcpOwojIDI4ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNs dWRlL2xpbnV4L3NjaGVkLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRl L2xpbnV4L3NpZ25hbC5oIiAxCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVk ZS9hc20vc2lnbmFsLmgiIDEKCgoKCgoKc3RydWN0IHNpZ2luZm87CiMgMTcgIi91c3Ivc3JjL2xp bnV4LTIuNC4yMC04L2luY2x1ZGUvYXNtL3NpZ25hbC5oIgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcg b2xkX3NpZ3NldF90OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIHVuc2lnbmVkIGxvbmcgc2ln Wyg2NCAvIDMyKV07Cn0gc2lnc2V0X3Q7CiMgMTI5ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9p bmNsdWRlL2FzbS9zaWduYWwuaCIKdHlwZWRlZiB2b2lkICgqX19zaWdoYW5kbGVyX3QpKGludCk7 CgoKCgoKCnN0cnVjdCBvbGRfc2lnYWN0aW9uIHsKICAgICAgICBfX3NpZ2hhbmRsZXJfdCBzYV9o YW5kbGVyOwogICAgICAgIG9sZF9zaWdzZXRfdCBzYV9tYXNrOwogICAgICAgIHVuc2lnbmVkIGxv bmcgc2FfZmxhZ3M7CiAgICAgICAgdm9pZCAoKnNhX3Jlc3RvcmVyKSh2b2lkKTsKfTsKCnN0cnVj dCBzaWdhY3Rpb24gewogICAgICAgIF9fc2lnaGFuZGxlcl90IHNhX2hhbmRsZXI7CiAgICAgICAg dW5zaWduZWQgbG9uZyBzYV9mbGFnczsKICAgICAgICB2b2lkICgqc2FfcmVzdG9yZXIpKHZvaWQp OwogICAgICAgIHNpZ3NldF90IHNhX21hc2s7Cn07CgpzdHJ1Y3Qga19zaWdhY3Rpb24gewogICAg ICAgIHN0cnVjdCBzaWdhY3Rpb24gc2E7Cn07CiMgMTcxICIvdXNyL3NyYy9saW51eC0yLjQuMjAt OC9pbmNsdWRlL2FzbS9zaWduYWwuaCIKdHlwZWRlZiBzdHJ1Y3Qgc2lnYWx0c3RhY2sgewogICAg ICAgIHZvaWQgKnNzX3NwOwogICAgICAgIGludCBzc19mbGFnczsKICAgICAgICBzaXplX3Qgc3Nf c2l6ZTsKfSBzdGFja190OwoKCgoKCgpzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNpZ2FkZHNldChz aWdzZXRfdCAqc2V0LCBpbnQgX3NpZykKewogICAgICAgIF9fYXNtX18oImJ0c2wgJTEsJTAiIDog Ij1tIigqc2V0KSA6ICJJciIoX3NpZyAtIDEpIDogImNjIik7Cn0KCnN0YXRpYyBfX2lubGluZV9f IHZvaWQgc2lnZGVsc2V0KHNpZ3NldF90ICpzZXQsIGludCBfc2lnKQp7CiAgICAgICAgX19hc21f XygiYnRybCAlMSwlMCIgOiAiPW0iKCpzZXQpIDogIklyIihfc2lnIC0gMSkgOiAiY2MiKTsKfQoK c3RhdGljIF9faW5saW5lX18gaW50IF9fY29uc3Rfc2lnaXNtZW1iZXIoc2lnc2V0X3QgKnNldCwg aW50IF9zaWcpCnsKICAgICAgICB1bnNpZ25lZCBsb25nIHNpZyA9IF9zaWcgLSAxOwogICAgICAg IHJldHVybiAxICYgKHNldC0+c2lnW3NpZyAvIDMyXSA+PiAoc2lnICUgMzIpKTsKfQoKc3RhdGlj IF9faW5saW5lX18gaW50IF9fZ2VuX3NpZ2lzbWVtYmVyKHNpZ3NldF90ICpzZXQsIGludCBfc2ln KQp7CiAgICAgICAgaW50IHJldDsKICAgICAgICBfX2FzbV9fKCJidGwgJTIsJTFcblx0c2JibCAl MCwlMCIKICAgICAgICAgICAgICAgIDogIj1yIihyZXQpIDogIm0iKCpzZXQpLCAiSXIiKF9zaWct MSkgOiAiY2MiKTsKICAgICAgICByZXR1cm4gcmV0Owp9CiMgMjEzICIvdXNyL3NyYy9saW51eC0y LjQuMjAtOC9pbmNsdWRlL2FzbS9zaWduYWwuaCIKc3RhdGljIF9faW5saW5lX18gaW50IHNpZ2Zp bmRpbndvcmQodW5zaWduZWQgbG9uZyB3b3JkKQp7CiAgICAgICAgX19hc21fXygiYnNmbCAlMSwl MCIgOiAiPXIiKHdvcmQpIDogInJtIih3b3JkKSA6ICJjYyIpOwogICAgICAgIHJldHVybiB3b3Jk Owp9CiMgNSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9zaWduYWwuaCIg MgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvYXNtL3NpZ2luZm8uaCIgMQoK CgoKCgoKdHlwZWRlZiB1bmlvbiBzaWd2YWwgewogICAgICAgIGludCBzaXZhbF9pbnQ7CiAgICAg ICAgdm9pZCAqc2l2YWxfcHRyOwp9IHNpZ3ZhbF90OwoKCgoKdHlwZWRlZiBzdHJ1Y3Qgc2lnaW5m byB7CiAgICAgICAgaW50IHNpX3NpZ25vOwogICAgICAgIGludCBzaV9lcnJubzsKICAgICAgICBp bnQgc2lfY29kZTsKCiAgICAgICAgdW5pb24gewogICAgICAgICAgICAgICAgaW50IF9wYWRbKCgx Mjgvc2l6ZW9mKGludCkpIC0gMyldOwoKCiAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAg ICAgICAgICAgICAgICAgICBwaWRfdCBfcGlkOwogICAgICAgICAgICAgICAgICAgICAgICB1aWRf dCBfdWlkOwogICAgICAgICAgICAgICAgfSBfa2lsbDsKCgogICAgICAgICAgICAgICAgc3RydWN0 IHsKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF90aW1lcjE7CiAgICAgICAg ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfdGltZXIyOwogICAgICAgICAgICAgICAgfSBf dGltZXI7CgoKICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgICAgICAg IHBpZF90IF9waWQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHVpZF90IF91aWQ7CiAgICAgICAg ICAgICAgICAgICAgICAgIHNpZ3ZhbF90IF9zaWd2YWw7CiAgICAgICAgICAgICAgICB9IF9ydDsK CgogICAgICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICAgICAgICAgcGlkX3Qg X3BpZDsKICAgICAgICAgICAgICAgICAgICAgICAgdWlkX3QgX3VpZDsKICAgICAgICAgICAgICAg ICAgICAgICAgaW50IF9zdGF0dXM7CiAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrX3QgX3V0 aW1lOwogICAgICAgICAgICAgICAgICAgICAgICBjbG9ja190IF9zdGltZTsKICAgICAgICAgICAg ICAgIH0gX3NpZ2NobGQ7CgoKICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAg ICAgICAgICAgIHZvaWQgKl9hZGRyOwogICAgICAgICAgICAgICAgfSBfc2lnZmF1bHQ7CgoKICAg ICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgICAgICAgIGludCBfYmFuZDsK ICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9mZDsKICAgICAgICAgICAgICAgIH0gX3NpZ3Bv bGw7CiAgICAgICAgfSBfc2lmaWVsZHM7Cn0gc2lnaW5mb190OwojIDIwMCAiL3Vzci9zcmMvbGlu dXgtMi40LjIwLTgvaW5jbHVkZS9hc20vc2lnaW5mby5oIgp0eXBlZGVmIHN0cnVjdCBzaWdldmVu dCB7CiAgICAgICAgc2lndmFsX3Qgc2lnZXZfdmFsdWU7CiAgICAgICAgaW50IHNpZ2V2X3NpZ25v OwogICAgICAgIGludCBzaWdldl9ub3RpZnk7CiAgICAgICAgdW5pb24gewogICAgICAgICAgICAg ICAgaW50IF9wYWRbKCg2NC9zaXplb2YoaW50KSkgLSAzKV07CgogICAgICAgICAgICAgICAgc3Ry dWN0IHsKICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9mdW5jdGlvbikoc2lndmFsX3Qp OwogICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfYXR0cmlidXRlOwogICAgICAgICAgICAg ICAgfSBfc2lnZXZfdGhyZWFkOwogICAgICAgIH0gX3NpZ2V2X3VuOwp9IHNpZ2V2ZW50X3Q7CgoK CgoKCgpzdGF0aWMgaW5saW5lIHZvaWQgY29weV9zaWdpbmZvKHNpZ2luZm9fdCAqdG8sIHNpZ2lu Zm9fdCAqZnJvbSkKewogICAgICAgIGlmIChmcm9tLT5zaV9jb2RlIDwgMCkKICAgICAgICAgICAg ICAgIChfX2J1aWx0aW5fY29uc3RhbnRfcChzaXplb2Yoc2lnaW5mb190KSkgPyBfX2NvbnN0YW50 X21lbWNweSgodG8pLChmcm9tKSwoc2l6ZW9mKHNpZ2luZm9fdCkpKSA6IF9fbWVtY3B5KCh0byks KGZyb20pLChzaXplb2Yoc2lnaW5mb190KSkpKTsKICAgICAgICBlbHNlCgogICAgICAgICAgICAg ICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKDMqc2l6ZW9mKGludCkgKyBzaXplb2YoZnJvbS0+X3Np ZmllbGRzLl9zaWdjaGxkKSkgPyBfX2NvbnN0YW50X21lbWNweSgodG8pLChmcm9tKSwoMypzaXpl b2YoaW50KSArIHNpemVvZihmcm9tLT5fc2lmaWVsZHMuX3NpZ2NobGQpKSkgOiBfX21lbWNweSgo dG8pLChmcm9tKSwoMypzaXplb2YoaW50KSArIHNpemVvZihmcm9tLT5fc2lmaWVsZHMuX3NpZ2No bGQpKSkpOwp9CgpleHRlcm4gaW50IGNvcHlfc2lnaW5mb190b191c2VyKHNpZ2luZm9fdCAqdG8s IHNpZ2luZm9fdCAqZnJvbSk7CiMgNiAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9s aW51eC9zaWduYWwuaCIgMgoKCgoKCgpzdHJ1Y3Qgc2lncXVldWUgewogICAgICAgIHN0cnVjdCBz aWdxdWV1ZSAqbmV4dDsKICAgICAgICBzaWdpbmZvX3QgaW5mbzsKfTsKCnN0cnVjdCBzaWdwZW5k aW5nIHsKICAgICAgICBzdHJ1Y3Qgc2lncXVldWUgKmhlYWQsICoqdGFpbDsKICAgICAgICBzaWdz ZXRfdCBzaWduYWw7Cn07CiMgMTA4ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xp bnV4L3NpZ25hbC5oIgpzdGF0aWMgaW5saW5lIHZvaWQgc2lnb3JzZXRzKHNpZ3NldF90ICpyLCBj b25zdCBzaWdzZXRfdCAqYSwgY29uc3Qgc2lnc2V0X3QgKmIpIHsgdW5zaWduZWQgbG9uZyBhMCwg YTEsIGEyLCBhMywgYjAsIGIxLCBiMiwgYjM7IHVuc2lnbmVkIGxvbmcgaTsgZm9yIChpID0gMDsg aSA8ICg2NCAvIDMyKS80OyArK2kpIHsgYTAgPSBhLT5zaWdbNCppKzBdOyBhMSA9IGEtPnNpZ1s0 KmkrMV07IGEyID0gYS0+c2lnWzQqaSsyXTsgYTMgPSBhLT5zaWdbNCppKzNdOyBiMCA9IGItPnNp Z1s0KmkrMF07IGIxID0gYi0+c2lnWzQqaSsxXTsgYjIgPSBiLT5zaWdbNCppKzJdOyBiMyA9IGIt PnNpZ1s0KmkrM107IHItPnNpZ1s0KmkrMF0gPSAoKGEwKSB8IChiMCkpOyByLT5zaWdbNCppKzFd ID0gKChhMSkgfCAoYjEpKTsgci0+c2lnWzQqaSsyXSA9ICgoYTIpIHwgKGIyKSk7IHItPnNpZ1s0 KmkrM10gPSAoKGEzKSB8IChiMykpOyB9IHN3aXRjaCAoKDY0IC8gMzIpICUgNCkgeyBjYXNlIDM6 IGEwID0gYS0+c2lnWzQqaSswXTsgYTEgPSBhLT5zaWdbNCppKzFdOyBhMiA9IGEtPnNpZ1s0Kmkr Ml07IGIwID0gYi0+c2lnWzQqaSswXTsgYjEgPSBiLT5zaWdbNCppKzFdOyBiMiA9IGItPnNpZ1s0 KmkrMl07IHItPnNpZ1s0KmkrMF0gPSAoKGEwKSB8IChiMCkpOyByLT5zaWdbNCppKzFdID0gKChh MSkgfCAoYjEpKTsgci0+c2lnWzQqaSsyXSA9ICgoYTIpIHwgKGIyKSk7IGJyZWFrOyBjYXNlIDI6 IGEwID0gYS0+c2lnWzQqaSswXTsgYTEgPSBhLT5zaWdbNCppKzFdOyBiMCA9IGItPnNpZ1s0Kmkr MF07IGIxID0gYi0+c2lnWzQqaSsxXTsgci0+c2lnWzQqaSswXSA9ICgoYTApIHwgKGIwKSk7IHIt PnNpZ1s0KmkrMV0gPSAoKGExKSB8IChiMSkpOyBicmVhazsgY2FzZSAxOiBhMCA9IGEtPnNpZ1s0 KmkrMF07IGIwID0gYi0+c2lnWzQqaSswXTsgci0+c2lnWzQqaSswXSA9ICgoYTApIHwgKGIwKSk7 IGJyZWFrOyB9IH0KCgpzdGF0aWMgaW5saW5lIHZvaWQgc2lnYW5kc2V0cyhzaWdzZXRfdCAqciwg Y29uc3Qgc2lnc2V0X3QgKmEsIGNvbnN0IHNpZ3NldF90ICpiKSB7IHVuc2lnbmVkIGxvbmcgYTAs IGExLCBhMiwgYTMsIGIwLCBiMSwgYjIsIGIzOyB1bnNpZ25lZCBsb25nIGk7IGZvciAoaSA9IDA7 IGkgPCAoNjQgLyAzMikvNDsgKytpKSB7IGEwID0gYS0+c2lnWzQqaSswXTsgYTEgPSBhLT5zaWdb NCppKzFdOyBhMiA9IGEtPnNpZ1s0KmkrMl07IGEzID0gYS0+c2lnWzQqaSszXTsgYjAgPSBiLT5z aWdbNCppKzBdOyBiMSA9IGItPnNpZ1s0KmkrMV07IGIyID0gYi0+c2lnWzQqaSsyXTsgYjMgPSBi LT5zaWdbNCppKzNdOyByLT5zaWdbNCppKzBdID0gKChhMCkgJiAoYjApKTsgci0+c2lnWzQqaSsx XSA9ICgoYTEpICYgKGIxKSk7IHItPnNpZ1s0KmkrMl0gPSAoKGEyKSAmIChiMikpOyByLT5zaWdb NCppKzNdID0gKChhMykgJiAoYjMpKTsgfSBzd2l0Y2ggKCg2NCAvIDMyKSAlIDQpIHsgY2FzZSAz OiBhMCA9IGEtPnNpZ1s0KmkrMF07IGExID0gYS0+c2lnWzQqaSsxXTsgYTIgPSBhLT5zaWdbNCpp KzJdOyBiMCA9IGItPnNpZ1s0KmkrMF07IGIxID0gYi0+c2lnWzQqaSsxXTsgYjIgPSBiLT5zaWdb NCppKzJdOyByLT5zaWdbNCppKzBdID0gKChhMCkgJiAoYjApKTsgci0+c2lnWzQqaSsxXSA9ICgo YTEpICYgKGIxKSk7IHItPnNpZ1s0KmkrMl0gPSAoKGEyKSAmIChiMikpOyBicmVhazsgY2FzZSAy OiBhMCA9IGEtPnNpZ1s0KmkrMF07IGExID0gYS0+c2lnWzQqaSsxXTsgYjAgPSBiLT5zaWdbNCpp KzBdOyBiMSA9IGItPnNpZ1s0KmkrMV07IHItPnNpZ1s0KmkrMF0gPSAoKGEwKSAmIChiMCkpOyBy LT5zaWdbNCppKzFdID0gKChhMSkgJiAoYjEpKTsgYnJlYWs7IGNhc2UgMTogYTAgPSBhLT5zaWdb NCppKzBdOyBiMCA9IGItPnNpZ1s0KmkrMF07IHItPnNpZ1s0KmkrMF0gPSAoKGEwKSAmIChiMCkp OyBicmVhazsgfSB9CgoKc3RhdGljIGlubGluZSB2b2lkIHNpZ25hbmRzZXRzKHNpZ3NldF90ICpy LCBjb25zdCBzaWdzZXRfdCAqYSwgY29uc3Qgc2lnc2V0X3QgKmIpIHsgdW5zaWduZWQgbG9uZyBh MCwgYTEsIGEyLCBhMywgYjAsIGIxLCBiMiwgYjM7IHVuc2lnbmVkIGxvbmcgaTsgZm9yIChpID0g MDsgaSA8ICg2NCAvIDMyKS80OyArK2kpIHsgYTAgPSBhLT5zaWdbNCppKzBdOyBhMSA9IGEtPnNp Z1s0KmkrMV07IGEyID0gYS0+c2lnWzQqaSsyXTsgYTMgPSBhLT5zaWdbNCppKzNdOyBiMCA9IGIt PnNpZ1s0KmkrMF07IGIxID0gYi0+c2lnWzQqaSsxXTsgYjIgPSBiLT5zaWdbNCppKzJdOyBiMyA9 IGItPnNpZ1s0KmkrM107IHItPnNpZ1s0KmkrMF0gPSAoKGEwKSAmIH4oYjApKTsgci0+c2lnWzQq aSsxXSA9ICgoYTEpICYgfihiMSkpOyByLT5zaWdbNCppKzJdID0gKChhMikgJiB+KGIyKSk7IHIt PnNpZ1s0KmkrM10gPSAoKGEzKSAmIH4oYjMpKTsgfSBzd2l0Y2ggKCg2NCAvIDMyKSAlIDQpIHsg Y2FzZSAzOiBhMCA9IGEtPnNpZ1s0KmkrMF07IGExID0gYS0+c2lnWzQqaSsxXTsgYTIgPSBhLT5z aWdbNCppKzJdOyBiMCA9IGItPnNpZ1s0KmkrMF07IGIxID0gYi0+c2lnWzQqaSsxXTsgYjIgPSBi LT5zaWdbNCppKzJdOyByLT5zaWdbNCppKzBdID0gKChhMCkgJiB+KGIwKSk7IHItPnNpZ1s0Kmkr MV0gPSAoKGExKSAmIH4oYjEpKTsgci0+c2lnWzQqaSsyXSA9ICgoYTIpICYgfihiMikpOyBicmVh azsgY2FzZSAyOiBhMCA9IGEtPnNpZ1s0KmkrMF07IGExID0gYS0+c2lnWzQqaSsxXTsgYjAgPSBi LT5zaWdbNCppKzBdOyBiMSA9IGItPnNpZ1s0KmkrMV07IHItPnNpZ1s0KmkrMF0gPSAoKGEwKSAm IH4oYjApKTsgci0+c2lnWzQqaSsxXSA9ICgoYTEpICYgfihiMSkpOyBicmVhazsgY2FzZSAxOiBh MCA9IGEtPnNpZ1s0KmkrMF07IGIwID0gYi0+c2lnWzQqaSswXTsgci0+c2lnWzQqaSswXSA9ICgo YTApICYgfihiMCkpOyBicmVhazsgfSB9CiMgMTQwICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9p bmNsdWRlL2xpbnV4L3NpZ25hbC5oIgpzdGF0aWMgaW5saW5lIHZvaWQgc2lnbm90c2V0KHNpZ3Nl dF90ICpzZXQpIHsgdW5zaWduZWQgbG9uZyBpOyBmb3IgKGkgPSAwOyBpIDwgKDY0IC8gMzIpLzQ7 ICsraSkgeyBzZXQtPnNpZ1s0KmkrMF0gPSAofihzZXQtPnNpZ1s0KmkrMF0pKTsgc2V0LT5zaWdb NCppKzFdID0gKH4oc2V0LT5zaWdbNCppKzFdKSk7IHNldC0+c2lnWzQqaSsyXSA9ICh+KHNldC0+ c2lnWzQqaSsyXSkpOyBzZXQtPnNpZ1s0KmkrM10gPSAofihzZXQtPnNpZ1s0KmkrM10pKTsgfSBz d2l0Y2ggKCg2NCAvIDMyKSAlIDQpIHsgY2FzZSAzOiBzZXQtPnNpZ1s0KmkrMl0gPSAofihzZXQt PnNpZ1s0KmkrMl0pKTsgY2FzZSAyOiBzZXQtPnNpZ1s0KmkrMV0gPSAofihzZXQtPnNpZ1s0Kmkr MV0pKTsgY2FzZSAxOiBzZXQtPnNpZ1s0KmkrMF0gPSAofihzZXQtPnNpZ1s0KmkrMF0pKTsgfSB9 CgoKCgpzdGF0aWMgaW5saW5lIHZvaWQgc2lnZW1wdHlzZXQoc2lnc2V0X3QgKnNldCkKewogICAg ICAgIHN3aXRjaCAoKDY0IC8gMzIpKSB7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAg IChfX2J1aWx0aW5fY29uc3RhbnRfcCgwKSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCgoc2l6ZW9m KHNpZ3NldF90KSkpID8gX19jb25zdGFudF9jX2FuZF9jb3VudF9tZW1zZXQoKChzZXQpKSwoKDB4 MDEwMTAxMDFVTCoodW5zaWduZWQgY2hhcikoMCkpKSwoKHNpemVvZihzaWdzZXRfdCkpKSkgOiBf X2NvbnN0YW50X2NfbWVtc2V0KCgoc2V0KSksKCgweDAxMDEwMTAxVUwqKHVuc2lnbmVkIGNoYXIp KDApKSksKChzaXplb2Yoc2lnc2V0X3QpKSkpKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCgoc2l6 ZW9mKHNpZ3NldF90KSkpID8gX19tZW1zZXRfZ2VuZXJpYygoKChzZXQpKSksKCgoMCkpKSwoKChz aXplb2Yoc2lnc2V0X3QpKSkpKSA6IF9fbWVtc2V0X2dlbmVyaWMoKChzZXQpKSwoKDApKSwoKHNp emVvZihzaWdzZXRfdCkpKSkpKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2Ug Mjogc2V0LT5zaWdbMV0gPSAwOwogICAgICAgIGNhc2UgMTogc2V0LT5zaWdbMF0gPSAwOwogICAg ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQp9CgpzdGF0aWMgaW5saW5lIHZvaWQgc2lnZmls bHNldChzaWdzZXRfdCAqc2V0KQp7CiAgICAgICAgc3dpdGNoICgoNjQgLyAzMikpIHsKICAgICAg ICBkZWZhdWx0OgogICAgICAgICAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKC0xKSA/IChf X2J1aWx0aW5fY29uc3RhbnRfcCgoc2l6ZW9mKHNpZ3NldF90KSkpID8gX19jb25zdGFudF9jX2Fu ZF9jb3VudF9tZW1zZXQoKChzZXQpKSwoKDB4MDEwMTAxMDFVTCoodW5zaWduZWQgY2hhcikoLTEp KSksKChzaXplb2Yoc2lnc2V0X3QpKSkpIDogX19jb25zdGFudF9jX21lbXNldCgoKHNldCkpLCgo MHgwMTAxMDEwMVVMKih1bnNpZ25lZCBjaGFyKSgtMSkpKSwoKHNpemVvZihzaWdzZXRfdCkpKSkp IDogKF9fYnVpbHRpbl9jb25zdGFudF9wKChzaXplb2Yoc2lnc2V0X3QpKSkgPyBfX21lbXNldF9n ZW5lcmljKCgoKHNldCkpKSwoKCgtMSkpKSwoKChzaXplb2Yoc2lnc2V0X3QpKSkpKSA6IF9fbWVt c2V0X2dlbmVyaWMoKChzZXQpKSwoKC0xKSksKChzaXplb2Yoc2lnc2V0X3QpKSkpKSk7CiAgICAg ICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDI6IHNldC0+c2lnWzFdID0gLTE7CiAgICAg ICAgY2FzZSAxOiBzZXQtPnNpZ1swXSA9IC0xOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg ICAgfQp9CgpleHRlcm4gY2hhciAqIHJlbmRlcl9zaWdzZXRfdChzaWdzZXRfdCAqc2V0LCBjaGFy ICpidWZmZXIpOwoKCgpzdGF0aWMgaW5saW5lIHZvaWQgc2lnYWRkc2V0bWFzayhzaWdzZXRfdCAq c2V0LCB1bnNpZ25lZCBsb25nIG1hc2spCnsKICAgICAgICBzZXQtPnNpZ1swXSB8PSBtYXNrOwp9 CgpzdGF0aWMgaW5saW5lIHZvaWQgc2lnZGVsc2V0bWFzayhzaWdzZXRfdCAqc2V0LCB1bnNpZ25l ZCBsb25nIG1hc2spCnsKICAgICAgICBzZXQtPnNpZ1swXSAmPSB+bWFzazsKfQoKc3RhdGljIGlu bGluZSBpbnQgc2lndGVzdHNldG1hc2soc2lnc2V0X3QgKnNldCwgdW5zaWduZWQgbG9uZyBtYXNr KQp7CiAgICAgICAgcmV0dXJuIChzZXQtPnNpZ1swXSAmIG1hc2spICE9IDA7Cn0KCnN0YXRpYyBp bmxpbmUgdm9pZCBzaWdpbml0c2V0KHNpZ3NldF90ICpzZXQsIHVuc2lnbmVkIGxvbmcgbWFzaykK ewogICAgICAgIHNldC0+c2lnWzBdID0gbWFzazsKICAgICAgICBzd2l0Y2ggKCg2NCAvIDMyKSkg ewogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAoX19idWlsdGluX2NvbnN0YW50X3Ao MCkgPyAoX19idWlsdGluX2NvbnN0YW50X3AoKHNpemVvZihsb25nKSooKDY0IC8gMzIpLTEpKSkg PyBfX2NvbnN0YW50X2NfYW5kX2NvdW50X21lbXNldCgoKCZzZXQtPnNpZ1sxXSkpLCgoMHgwMTAx MDEwMVVMKih1bnNpZ25lZCBjaGFyKSgwKSkpLCgoc2l6ZW9mKGxvbmcpKigoNjQgLyAzMiktMSkp KSkgOiBfX2NvbnN0YW50X2NfbWVtc2V0KCgoJnNldC0+c2lnWzFdKSksKCgweDAxMDEwMTAxVUwq KHVuc2lnbmVkIGNoYXIpKDApKSksKChzaXplb2YobG9uZykqKCg2NCAvIDMyKS0xKSkpKSkgOiAo X19idWlsdGluX2NvbnN0YW50X3AoKHNpemVvZihsb25nKSooKDY0IC8gMzIpLTEpKSkgPyBfX21l bXNldF9nZW5lcmljKCgoKCZzZXQtPnNpZ1sxXSkpKSwoKCgwKSkpLCgoKHNpemVvZihsb25nKSoo KDY0IC8gMzIpLTEpKSkpKSA6IF9fbWVtc2V0X2dlbmVyaWMoKCgmc2V0LT5zaWdbMV0pKSwoKDAp KSwoKHNpemVvZihsb25nKSooKDY0IC8gMzIpLTEpKSkpKSk7CiAgICAgICAgICAgICAgICBicmVh azsKICAgICAgICBjYXNlIDI6IHNldC0+c2lnWzFdID0gMDsKICAgICAgICBjYXNlIDE6IDsKICAg ICAgICB9Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBzaWdpbml0c2V0aW52KHNpZ3NldF90ICpzZXQs IHVuc2lnbmVkIGxvbmcgbWFzaykKewogICAgICAgIHNldC0+c2lnWzBdID0gfm1hc2s7CiAgICAg ICAgc3dpdGNoICgoNjQgLyAzMikpIHsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAg KF9fYnVpbHRpbl9jb25zdGFudF9wKC0xKSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCgoc2l6ZW9m KGxvbmcpKigoNjQgLyAzMiktMSkpKSA/IF9fY29uc3RhbnRfY19hbmRfY291bnRfbWVtc2V0KCgo JnNldC0+c2lnWzFdKSksKCgweDAxMDEwMTAxVUwqKHVuc2lnbmVkIGNoYXIpKC0xKSkpLCgoc2l6 ZW9mKGxvbmcpKigoNjQgLyAzMiktMSkpKSkgOiBfX2NvbnN0YW50X2NfbWVtc2V0KCgoJnNldC0+ c2lnWzFdKSksKCgweDAxMDEwMTAxVUwqKHVuc2lnbmVkIGNoYXIpKC0xKSkpLCgoc2l6ZW9mKGxv bmcpKigoNjQgLyAzMiktMSkpKSkpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wKChzaXplb2YobG9u ZykqKCg2NCAvIDMyKS0xKSkpID8gX19tZW1zZXRfZ2VuZXJpYygoKCgmc2V0LT5zaWdbMV0pKSks KCgoLTEpKSksKCgoc2l6ZW9mKGxvbmcpKigoNjQgLyAzMiktMSkpKSkpIDogX19tZW1zZXRfZ2Vu ZXJpYygoKCZzZXQtPnNpZ1sxXSkpLCgoLTEpKSwoKHNpemVvZihsb25nKSooKDY0IC8gMzIpLTEp KSkpKSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDI6IHNldC0+c2lnWzFd ID0gLTE7CiAgICAgICAgY2FzZSAxOiA7CiAgICAgICAgfQp9CgoKCnN0YXRpYyBpbmxpbmUgdm9p ZCBpbml0X3NpZ3BlbmRpbmcoc3RydWN0IHNpZ3BlbmRpbmcgKnNpZykKewogICAgICAgIHNpZ2Vt cHR5c2V0KCZzaWctPnNpZ25hbCk7CiAgICAgICAgc2lnLT5oZWFkID0gKCh2b2lkICopMCk7CiAg ICAgICAgc2lnLT50YWlsID0gJnNpZy0+aGVhZDsKfQoKZXh0ZXJuIGxvbmcgZG9fc2lncGVuZGlu Zyh2b2lkICosIHVuc2lnbmVkIGxvbmcpOwoKCnN0cnVjdCBwdF9yZWdzOwpleHRlcm4gaW50IGdl dF9zaWduYWxfdG9fZGVsaXZlcihzaWdpbmZvX3QgKmluZm8sIHN0cnVjdCBwdF9yZWdzICpyZWdz KTsKIyAyOSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9zY2hlZC5oIiAy CiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9zZWN1cmViaXRzLmgi IDEKCgoKCgpleHRlcm4gdW5zaWduZWQgc2VjdXJlYml0c19SYWJlNzc0ODQ7CiMgMzAgIi91c3Iv c3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvc2NoZWQuaCIgMgojIDEgIi91c3Ivc3Jj L2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvZnNfc3RydWN0LmgiIDEKCgoKCgoKCnN0cnVj dCBmc19zdHJ1Y3QgewogICAgICAgIGF0b21pY190IGNvdW50OwogICAgICAgIHJ3bG9ja190IGxv Y2s7CiAgICAgICAgaW50IHVtYXNrOwogICAgICAgIHN0cnVjdCBkZW50cnkgKiByb290LCAqIHB3 ZCwgKiBhbHRyb290OwogICAgICAgIHN0cnVjdCB2ZnNtb3VudCAqIHJvb3RtbnQsICogcHdkbW50 LCAqIGFsdHJvb3RtbnQ7Cn07CiMgMjMgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUv bGludXgvZnNfc3RydWN0LmgiCmV4dGVybiB2b2lkIGV4aXRfZnNfUmVkMDcxZTMxKHN0cnVjdCB0 YXNrX3N0cnVjdCAqKTsKZXh0ZXJuIHZvaWQgc2V0X2ZzX2FsdHJvb3Qodm9pZCk7CgoKCgoKCnN0 YXRpYyBpbmxpbmUgdm9pZCBzZXRfZnNfcm9vdChzdHJ1Y3QgZnNfc3RydWN0ICpmcywKICAgICAg ICBzdHJ1Y3QgdmZzbW91bnQgKm1udCwKICAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCnsK ICAgICAgICBzdHJ1Y3QgZGVudHJ5ICpvbGRfcm9vdDsKICAgICAgICBzdHJ1Y3QgdmZzbW91bnQg Km9sZF9yb290bW50OwogICAgICAgICh2b2lkKSgmZnMtPmxvY2spOwogICAgICAgIG9sZF9yb290 ID0gZnMtPnJvb3Q7CiAgICAgICAgb2xkX3Jvb3RtbnQgPSBmcy0+cm9vdG1udDsKICAgICAgICBm cy0+cm9vdG1udCA9IG1udGdldChtbnQpOwogICAgICAgIGZzLT5yb290ID0gZGdldChkZW50cnkp OwogICAgICAgIGRvIHsgfSB3aGlsZSgwKTsKICAgICAgICBpZiAob2xkX3Jvb3QpIHsKICAgICAg ICAgICAgICAgIGRwdXRfUjNkZTgxM2E2KG9sZF9yb290KTsKICAgICAgICAgICAgICAgIG1udHB1 dChvbGRfcm9vdG1udCk7CiAgICAgICAgfQp9CgoKCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBzZXRf ZnNfcHdkKHN0cnVjdCBmc19zdHJ1Y3QgKmZzLAogICAgICAgIHN0cnVjdCB2ZnNtb3VudCAqbW50 LAogICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKewogICAgICAgIHN0cnVjdCBkZW50cnkg Km9sZF9wd2Q7CiAgICAgICAgc3RydWN0IHZmc21vdW50ICpvbGRfcHdkbW50OwogICAgICAgICh2 b2lkKSgmZnMtPmxvY2spOwogICAgICAgIG9sZF9wd2QgPSBmcy0+cHdkOwogICAgICAgIG9sZF9w d2RtbnQgPSBmcy0+cHdkbW50OwogICAgICAgIGZzLT5wd2RtbnQgPSBtbnRnZXQobW50KTsKICAg ICAgICBmcy0+cHdkID0gZGdldChkZW50cnkpOwogICAgICAgIGRvIHsgfSB3aGlsZSgwKTsKICAg ICAgICBpZiAob2xkX3B3ZCkgewogICAgICAgICAgICAgICAgZHB1dF9SM2RlODEzYTYob2xkX3B3 ZCk7CiAgICAgICAgICAgICAgICBtbnRwdXQob2xkX3B3ZG1udCk7CiAgICAgICAgfQp9CgpzdHJ1 Y3QgZnNfc3RydWN0ICpjb3B5X2ZzX3N0cnVjdChzdHJ1Y3QgZnNfc3RydWN0ICpvbGQpOwp2b2lk IHB1dF9mc19zdHJ1Y3Qoc3RydWN0IGZzX3N0cnVjdCAqZnMpOwojIDMxICIvdXNyL3NyYy9saW51 eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0y LjQuMjAtOC9pbmNsdWRlL2xpbnV4L3BpZC5oIiAxCgoKCmVudW0gcGlkX3R5cGUKewogICAgICAg IFBJRFRZUEVfUElELAogICAgICAgIFBJRFRZUEVfVEdJRCwKICAgICAgICBQSURUWVBFX1BHSUQs CiAgICAgICAgUElEVFlQRV9TSUQsCiAgICAgICAgUElEVFlQRV9NQVgKfTsKCnN0cnVjdCBwaWQK ewogICAgICAgIGludCBucjsKICAgICAgICBhdG9taWNfdCBjb3VudDsKICAgICAgICBzdHJ1Y3Qg dGFza19zdHJ1Y3QgKnRhc2s7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCB0YXNrX2xpc3Q7CiAg ICAgICAgc3RydWN0IGxpc3RfaGVhZCBoYXNoX2NoYWluOwp9OwoKc3RydWN0IHBpZF9saW5rCnsK ICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIHBpZF9jaGFpbjsKICAgICAgICBzdHJ1Y3QgcGlkICpw aWRwdHI7CiAgICAgICAgc3RydWN0IHBpZCBwaWQ7Cn07CiMgMzYgIi91c3Ivc3JjL2xpbnV4LTIu NC4yMC04L2luY2x1ZGUvbGludXgvcGlkLmgiCmV4dGVybiBpbnQgYXR0YWNoX3BpZChzdHJ1Y3Qg dGFza19zdHJ1Y3QgKnRhc2ssIGVudW0gcGlkX3R5cGUgdHlwZSwgaW50IG5yKSBfX2F0dHJpYnV0 ZV9fKChyZWdwYXJtKDMpKSk7CgpleHRlcm4gdm9pZCBsaW5rX3BpZChzdHJ1Y3QgdGFza19zdHJ1 Y3QgKnRhc2ssIHN0cnVjdCBwaWRfbGluayAqbGluaywgc3RydWN0IHBpZCAqcGlkKSBfX2F0dHJp YnV0ZV9fKChyZWdwYXJtKDMpKSk7CgoKCgpleHRlcm4gdm9pZCBkZXRhY2hfcGlkKHN0cnVjdCB0 YXNrX3N0cnVjdCAqdGFzaywgZW51bSBwaWRfdHlwZSkgX19hdHRyaWJ1dGVfXygocmVncGFybSgz KSkpOwoKCgoKCmV4dGVybiBzdHJ1Y3QgcGlkICpmaW5kX3BpZChlbnVtIHBpZF90eXBlLCBpbnQp IF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKCmV4dGVybiBpbnQgYWxsb2NfcGlkbWFwKHZv aWQpOwpleHRlcm4gdm9pZCBmcmVlX3BpZG1hcChpbnQpIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0o MykpKTsKZXh0ZXJuIHZvaWQgc3dpdGNoX2V4ZWNfcGlkcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmxl YWRlciwgc3RydWN0IHRhc2tfc3RydWN0ICp0aHJlYWQpOwojIDMyICIvdXNyL3NyYy9saW51eC0y LjQuMjAtOC9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiIDIKCnN0cnVjdCBleGVjX2RvbWFpbjsKZXh0 ZXJuIGludCBwYW5pY190aW1lb3V0X1IxZjg1NDRiODsKIyA3NCAiL3Vzci9zcmMvbGludXgtMi40 LjIwLTgvaW5jbHVkZS9saW51eC9zY2hlZC5oIgpleHRlcm4gdW5zaWduZWQgbG9uZyBhdmVucnVu W107CiMgOTEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvc2NoZWQuaCIK ZXh0ZXJuIGludCBucl90aHJlYWRzOwpleHRlcm4gaW50IGxhc3RfcGlkOwpleHRlcm4gdW5zaWdu ZWQgbG9uZyBucl9ydW5uaW5nKHZvaWQpOwpleHRlcm4gdW5zaWduZWQgbG9uZyBucl91bmludGVy cnVwdGlibGUodm9pZCk7CgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9s aW51eC9wYXJhbS5oIiAxCiMgOTkgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGlu dXgvc2NoZWQuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgv cmVzb3VyY2UuaCIgMQojIDIxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4 L3Jlc291cmNlLmgiCnN0cnVjdCBydXNhZ2UgewogICAgICAgIHN0cnVjdCB0aW1ldmFsIHJ1X3V0 aW1lOwogICAgICAgIHN0cnVjdCB0aW1ldmFsIHJ1X3N0aW1lOwogICAgICAgIGxvbmcgcnVfbWF4 cnNzOwogICAgICAgIGxvbmcgcnVfaXhyc3M7CiAgICAgICAgbG9uZyBydV9pZHJzczsKICAgICAg ICBsb25nIHJ1X2lzcnNzOwogICAgICAgIGxvbmcgcnVfbWluZmx0OwogICAgICAgIGxvbmcgcnVf bWFqZmx0OwogICAgICAgIGxvbmcgcnVfbnN3YXA7CiAgICAgICAgbG9uZyBydV9pbmJsb2NrOwog ICAgICAgIGxvbmcgcnVfb3VibG9jazsKICAgICAgICBsb25nIHJ1X21zZ3NuZDsKICAgICAgICBs b25nIHJ1X21zZ3JjdjsKICAgICAgICBsb25nIHJ1X25zaWduYWxzOwogICAgICAgIGxvbmcgcnVf bnZjc3c7CiAgICAgICAgbG9uZyBydV9uaXZjc3c7Cn07CgpzdHJ1Y3QgcmxpbWl0IHsKICAgICAg ICB1bnNpZ25lZCBsb25nIHJsaW1fY3VyOwogICAgICAgIHVuc2lnbmVkIGxvbmcgcmxpbV9tYXg7 Cn07CiMgNTYgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvcmVzb3VyY2Uu aCIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2FzbS9yZXNvdXJjZS5oIiAx CiMgNTcgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvcmVzb3VyY2UuaCIg MgojIDEwMCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9zY2hlZC5oIiAy CiMgMTQwICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiCnN0 cnVjdCBzY2hlZF9wYXJhbSB7CiAgICAgICAgaW50IHNjaGVkX3ByaW9yaXR5Owp9OwoKc3RydWN0 IGNvbXBsZXRpb247CiMgMTU2ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4 L3NjaGVkLmgiCmV4dGVybiByd2xvY2tfdCB0YXNrbGlzdF9sb2NrX1I5OTljODBhMjsKZXh0ZXJu IHNwaW5sb2NrX3QgbW1saXN0X2xvY2s7Cgp0eXBlZGVmIHN0cnVjdCB0YXNrX3N0cnVjdCB0YXNr X3Q7CgpleHRlcm4gdm9pZCBfX3B1dF90YXNrX3N0cnVjdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRz ayk7CgoKCgpleHRlcm4gdm9pZCBzY2hlZF9pbml0KHZvaWQpOwpleHRlcm4gdm9pZCBpbml0X2lk bGUodGFza190ICppZGxlLCBpbnQgY3B1KTsKZXh0ZXJuIHZvaWQgc2hvd19zdGF0ZV9SNDE3NjVl NWUodm9pZCk7CmV4dGVybiB2b2lkIHNob3dfc3RhY2sodW5zaWduZWQgbG9uZyAqIGVzcCk7CmV4 dGVybiB2b2lkIGNwdV9pbml0ICh2b2lkKTsKZXh0ZXJuIHZvaWQgdHJhcF9pbml0KHZvaWQpOwpl eHRlcm4gdm9pZCB1cGRhdGVfcHJvY2Vzc190aW1lcyhpbnQgdXNlcik7CmV4dGVybiB2b2lkIHVw ZGF0ZV9vbmVfcHJvY2Vzcyh0YXNrX3QgKnAsIHVuc2lnbmVkIGxvbmcgdXNlciwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc3lzdGVtLCBpbnQgY3B1KTsKZXh0 ZXJuIHZvaWQgc2NoZWR1bGVyX3RpY2soaW50IHVzZXJfdGljaywgaW50IHN5c3RlbSk7CmV4dGVy biBpbnQgbWlncmF0aW9uX2luaXQodm9pZCk7CmV4dGVybiB1bnNpZ25lZCBsb25nIGNhY2hlX2Rl Y2F5X3RpY2tzOwoKCmV4dGVybiBzaWduZWQgbG9uZyBzY2hlZHVsZV90aW1lb3V0X1IxN2Q1OWQw MShzaWduZWQgbG9uZyB0aW1lb3V0KSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CiBfX2F0 dHJpYnV0ZV9fKChyZWdwYXJtKDApKSkgdm9pZCBzY2hlZHVsZV9SNDI5MjM2NGModm9pZCk7Cgpl eHRlcm4gaW50IHNjaGVkdWxlX3Rhc2tfUjJkNmMzZDA0KHN0cnVjdCB0cV9zdHJ1Y3QgKnRhc2sp OwpleHRlcm4gdm9pZCBmbHVzaF9zY2hlZHVsZWRfdGFza3NfUjdjMzI0MmI0KHZvaWQpOwpleHRl cm4gaW50IHN0YXJ0X2NvbnRleHRfdGhyZWFkKHZvaWQpOwpleHRlcm4gaW50IGN1cnJlbnRfaXNf a2V2ZW50ZCh2b2lkKTsKIyAyMTIgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGlu dXgvc2NoZWQuaCIKc3RydWN0IG5hbWVzcGFjZTsKCgoKc3RydWN0IGZpbGVzX3N0cnVjdCB7CiAg ICAgICAgYXRvbWljX3QgY291bnQ7CiAgICAgICAgcndsb2NrX3QgZmlsZV9sb2NrOwogICAgICAg IGludCBtYXhfZmRzOwogICAgICAgIGludCBtYXhfZmRzZXQ7CiAgICAgICAgaW50IG5leHRfZmQ7 CiAgICAgICAgc3RydWN0IGZpbGUgKiogZmQ7CiAgICAgICAgZmRfc2V0ICpjbG9zZV9vbl9leGVj OwogICAgICAgIGZkX3NldCAqb3Blbl9mZHM7CiAgICAgICAgZmRfc2V0IGNsb3NlX29uX2V4ZWNf aW5pdDsKICAgICAgICBmZF9zZXQgb3Blbl9mZHNfaW5pdDsKICAgICAgICBzdHJ1Y3QgZmlsZSAq IGZkX2FycmF5WzMyXTsKfTsKIyAyNDggIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUv bGludXgvc2NoZWQuaCIKZXh0ZXJuIGludCBtYXhfbWFwX2NvdW50OwoKc3RydWN0IG1tX3N0cnVj dCB7CiAgICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICogbW1hcDsKICAgICAgICByYl9yb290 X3QgbW1fcmI7CiAgICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICogbW1hcF9jYWNoZTsKICAg ICAgICB1bnNpZ25lZCBsb25nIGZyZWVfYXJlYV9jYWNoZTsKICAgICAgICBwZ2RfdCAqIHBnZDsK ICAgICAgICBhdG9taWNfdCBtbV91c2VyczsKICAgICAgICBhdG9taWNfdCBtbV9jb3VudDsKICAg ICAgICBpbnQgbWFwX2NvdW50OwogICAgICAgIHN0cnVjdCByd19zZW1hcGhvcmUgbW1hcF9zZW07 CiAgICAgICAgc3BpbmxvY2tfdCBwYWdlX3RhYmxlX2xvY2s7CgogICAgICAgIHN0cnVjdCBsaXN0 X2hlYWQgbW1saXN0OwoKCgoKICAgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0X2NvZGUsIGVuZF9j b2RlLCBzdGFydF9kYXRhLCBlbmRfZGF0YTsKICAgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0X2Jy aywgYnJrLCBzdGFydF9zdGFjazsKICAgICAgICB1bnNpZ25lZCBsb25nIGFyZ19zdGFydCwgYXJn X2VuZCwgZW52X3N0YXJ0LCBlbnZfZW5kOwogICAgICAgIHVuc2lnbmVkIGxvbmcgcnNzLCB0b3Rh bF92bSwgbG9ja2VkX3ZtOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZGVmX2ZsYWdzOwogICAgICAg IHVuc2lnbmVkIGxvbmcgY3B1X3ZtX21hc2s7CiAgICAgICAgdW5zaWduZWQgbG9uZyBybGltaXRf cnNzOwoKICAgICAgICB1bnNpZ25lZCBkdW1wYWJsZToxOwoKICAgICAgICBzdHJ1Y3QgewogICAg ICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBscnM7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBs b25nIGRyczsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdHJzOwogICAgICAgICAgICAg ICAgdW5zaWduZWQgbG9uZyByc3M7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIG5vdHBy ZXNlbnQ7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHByZXNlbnQ7CiAgICAgICAgICAg ICAgICB1bnNpZ25lZCBsb25nIHNoYXJhYmxlOwogICAgICAgICAgICAgICAgdW5zaWduZWQgbG9u ZyB3cml0YWJsZTsKICAgICAgICB9IG1tX3N0YXQ7CgoKICAgICAgICBtbV9jb250ZXh0X3QgY29u dGV4dDsKCgogICAgICAgIGludCBjb3JlX3dhaXRlcnM7CiAgICAgICAgc3RydWN0IGNvbXBsZXRp b24gKmNvcmVfc3RhcnR1cF9kb25lLCBjb3JlX2RvbmU7Cn07CgpleHRlcm4gaW50IG1tbGlzdF9u cjsKIyAzMTAgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvc2NoZWQuaCIK ZXh0ZXJuIHZvaWQgc2hvd19zdGFjayh1bnNpZ25lZCBsb25nICplc3ApOwoKZXh0ZXJuIGludCBf X2Jyb2FkY2FzdF90aHJlYWRfZ3JvdXAoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgc2lnKTsK CnN0cnVjdCBzaWdoYW5kX3N0cnVjdCB7CiAgICAgICAgYXRvbWljX3QgY291bnQ7CiAgICAgICAg c3RydWN0IGtfc2lnYWN0aW9uIGFjdGlvbls2NF07CiAgICAgICAgc3BpbmxvY2tfdCBzaWdsb2Nr Owp9OwojIDMyNyAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9zY2hlZC5o IgpzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCB7CiAgICAgICAgYXRvbWljX3QgY291bnQ7CgoKICAgICAg ICB0YXNrX3QgKmN1cnJfdGFyZ2V0OwoKCiAgICAgICAgc3RydWN0IHNpZ3BlbmRpbmcgc2hhcmVk X3BlbmRpbmc7CgoKICAgICAgICBpbnQgZ3JvdXBfZXhpdDsKICAgICAgICBpbnQgZ3JvdXBfZXhp dF9jb2RlOwogICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqZ3JvdXBfZXhpdF90YXNrOwoKCiAg ICAgICAgaW50IGdyb3VwX3N0b3BfY291bnQ7Cn07CiMgMzYwICIvdXNyL3NyYy9saW51eC0yLjQu MjAtOC9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiCnN0cnVjdCB1c2VyX3N0cnVjdCB7CiAgICAgICAg YXRvbWljX3QgX19jb3VudDsKICAgICAgICBhdG9taWNfdCBwcm9jZXNzZXM7CiAgICAgICAgYXRv bWljX3QgZmlsZXM7CgoKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIHVpZGhhc2hfbGlzdDsKICAg ICAgICB1aWRfdCB1aWQ7Cn07CgoKCgoKCmV4dGVybiBzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKmZpbmRf dXNlcih1aWRfdCk7CgpleHRlcm4gc3RydWN0IHVzZXJfc3RydWN0IHJvb3RfdXNlcjsKCgp0eXBl ZGVmIHN0cnVjdCBwcmlvX2FycmF5IHByaW9fYXJyYXlfdDsKCnN0cnVjdCB0YXNrX3N0cnVjdCB7 CgoKCiAgICAgICAgdm9sYXRpbGUgbG9uZyBzdGF0ZTsKICAgICAgICB1bnNpZ25lZCBsb25nIGZs YWdzOwogICAgICAgIGludCBzaWdwZW5kaW5nOwogICAgICAgIG1tX3NlZ21lbnRfdCBhZGRyX2xp bWl0OwoKCgogICAgICAgIHN0cnVjdCBleGVjX2RvbWFpbiAqZXhlY19kb21haW47CiAgICAgICAg dm9sYXRpbGUgbG9uZyBuZWVkX3Jlc2NoZWQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyBwdHJhY2U7 CgogICAgICAgIGludCBsb2NrX2RlcHRoOwoKCgoKICAgICAgICB1bnNpZ25lZCBpbnQgY3B1Owog ICAgICAgIGludCBwcmlvLCBzdGF0aWNfcHJpbzsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIHJ1 bl9saXN0OwogICAgICAgIHByaW9fYXJyYXlfdCAqYXJyYXk7CgogICAgICAgIHVuc2lnbmVkIGxv bmcgc2xlZXBfYXZnOwogICAgICAgIHVuc2lnbmVkIGxvbmcgbGFzdF9ydW47CgogICAgICAgIHVu c2lnbmVkIGxvbmcgcG9saWN5OwogICAgICAgIHVuc2lnbmVkIGxvbmcgY3B1c19hbGxvd2VkOwog ICAgICAgIHVuc2lnbmVkIGludCB0aW1lX3NsaWNlLCBmaXJzdF90aW1lX3NsaWNlOwoKICAgICAg ICBhdG9taWNfdCB1c2FnZTsKCiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCB0YXNrczsKICAgICAg ICBzdHJ1Y3QgbGlzdF9oZWFkIHB0cmFjZV9jaGlsZHJlbjsKICAgICAgICBzdHJ1Y3QgbGlzdF9o ZWFkIHB0cmFjZV9saXN0OwoKICAgICAgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgKmFjdGl2ZV9t bTsKCgogICAgICAgIHN0cnVjdCBsaW51eF9iaW5mbXQgKmJpbmZtdDsKICAgICAgICBpbnQgZXhp dF9jb2RlLCBleGl0X3NpZ25hbDsKICAgICAgICBpbnQgcGRlYXRoX3NpZ25hbDsKCiAgICAgICAg dW5zaWduZWQgbG9uZyBwZXJzb25hbGl0eTsKICAgICAgICBpbnQgZGlkX2V4ZWM6MTsKICAgICAg ICB1bnNpZ25lZCB0YXNrX2R1bXBhYmxlOjE7CiAgICAgICAgcGlkX3QgcGlkOwogICAgICAgIHBp ZF90IHBncnA7CiAgICAgICAgcGlkX3QgdHR5X29sZF9wZ3JwOwogICAgICAgIHBpZF90IHNlc3Np b247CiAgICAgICAgcGlkX3QgdGdpZDsKCiAgICAgICAgaW50IGxlYWRlcjsKCgoKCgogICAgICAg IHN0cnVjdCB0YXNrX3N0cnVjdCAqcmVhbF9wYXJlbnQ7CiAgICAgICAgc3RydWN0IHRhc2tfc3Ry dWN0ICpwYXJlbnQ7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBjaGlsZHJlbjsKICAgICAgICBz dHJ1Y3QgbGlzdF9oZWFkIHNpYmxpbmc7CiAgICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICpncm91 cF9sZWFkZXI7CgoKICAgICAgICBzdHJ1Y3QgcGlkX2xpbmsgcGlkc1tQSURUWVBFX01BWF07Cgog ICAgICAgIHdhaXRfcXVldWVfaGVhZF90IHdhaXRfY2hsZGV4aXQ7CiAgICAgICAgc3RydWN0IGNv bXBsZXRpb24gKnZmb3JrX2RvbmU7CiAgICAgICAgaW50ICpzZXRfY2hpbGRfdGlkOwogICAgICAg IGludCAqY2xlYXJfY2hpbGRfdGlkOwoKICAgICAgICB1bnNpZ25lZCBsb25nIHJ0X3ByaW9yaXR5 OwogICAgICAgIHVuc2lnbmVkIGxvbmcgaXRfcmVhbF92YWx1ZSwgaXRfcHJvZl92YWx1ZSwgaXRf dmlydF92YWx1ZTsKICAgICAgICB1bnNpZ25lZCBsb25nIGl0X3JlYWxfaW5jciwgaXRfcHJvZl9p bmNyLCBpdF92aXJ0X2luY3I7CiAgICAgICAgc3RydWN0IHRpbWVyX2xpc3QgcmVhbF90aW1lcjsK ICAgICAgICBzdHJ1Y3QgdG1zIHRpbWVzOwogICAgICAgIHN0cnVjdCB0bXMgZ3JvdXBfdGltZXM7 CiAgICAgICAgdW5zaWduZWQgbG9uZyBzdGFydF90aW1lOwogICAgICAgIGxvbmcgcGVyX2NwdV91 dGltZVsxXSwgcGVyX2NwdV9zdGltZVsxXTsKCiAgICAgICAgdW5zaWduZWQgbG9uZyBtaW5fZmx0 LCBtYWpfZmx0LCBuc3dhcCwgY21pbl9mbHQsIGNtYWpfZmx0LCBjbnN3YXA7CiAgICAgICAgaW50 IHN3YXBwYWJsZToxOwoKICAgICAgICB1aWRfdCB1aWQsZXVpZCxzdWlkLGZzdWlkOwogICAgICAg IGdpZF90IGdpZCxlZ2lkLHNnaWQsZnNnaWQ7CiAgICAgICAgaW50IG5ncm91cHM7CiAgICAgICAg Z2lkX3QgZ3JvdXBzWzMyXTsKICAgICAgICBrZXJuZWxfY2FwX3QgY2FwX2VmZmVjdGl2ZSwgY2Fw X2luaGVyaXRhYmxlLCBjYXBfcGVybWl0dGVkOwogICAgICAgIGludCBrZWVwX2NhcGFiaWxpdGll czoxOwogICAgICAgIHN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlcjsKCiAgICAgICAgc3RydWN0IHJs aW1pdCBybGltWzExXTsKICAgICAgICB1bnNpZ25lZCBzaG9ydCB1c2VkX21hdGg7CiAgICAgICAg Y2hhciBjb21tWzE2XTsKCiAgICAgICAgaW50IGxpbmtfY291bnQsIHRvdGFsX2xpbmtfY291bnQ7 CiAgICAgICAgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKICAgICAgICB1bnNpZ25lZCBpbnQgbG9j a3M7CgogICAgICAgIHN0cnVjdCBzZW1fdW5kbyAqc2VtdW5kbzsKICAgICAgICBzdHJ1Y3Qgc2Vt X3F1ZXVlICpzZW1zbGVlcGluZzsKCiAgICAgICAgc3RydWN0IHRocmVhZF9zdHJ1Y3QgdGhyZWFk OwoKICAgICAgICBzdHJ1Y3QgZnNfc3RydWN0ICpmczsKCiAgICAgICAgc3RydWN0IGZpbGVzX3N0 cnVjdCAqZmlsZXM7CgogICAgICAgIHN0cnVjdCBuYW1lc3BhY2UgKm5hbWVzcGFjZTsKCiAgICAg ICAgc3RydWN0IHNpZ25hbF9zdHJ1Y3QgKnNpZ25hbDsKICAgICAgICBzdHJ1Y3Qgc2lnaGFuZF9z dHJ1Y3QgKnNpZ2hhbmQ7CgogICAgICAgIHNpZ3NldF90IGJsb2NrZWQsIHJlYWxfYmxvY2tlZDsK ICAgICAgICBzdHJ1Y3Qgc2lncGVuZGluZyBwZW5kaW5nOwoKICAgICAgICB1bnNpZ25lZCBsb25n IHNhc19zc19zcDsKICAgICAgICBzaXplX3Qgc2FzX3NzX3NpemU7CiAgICAgICAgaW50ICgqbm90 aWZpZXIpKHZvaWQgKnByaXYpOwogICAgICAgIHZvaWQgKm5vdGlmaWVyX2RhdGE7CiAgICAgICAg c2lnc2V0X3QgKm5vdGlmaWVyX21hc2s7CgoKICAgICAgICB2b2lkICp0dXhfaW5mbzsKICAgICAg ICB2b2lkICgqdHV4X2V4aXQpKHZvaWQpOwoKCgogICAgICAgIHUzMiBwYXJlbnRfZXhlY19pZDsK ICAgICAgICB1MzIgc2VsZl9leGVjX2lkOwoKICAgICAgICBzcGlubG9ja190IGFsbG9jX2xvY2s7 CgogICAgICAgIHNwaW5sb2NrX3Qgc3dpdGNoX2xvY2s7CgoKICAgICAgICB2b2lkICpqb3VybmFs X2luZm87CgogICAgICAgIHVuc2lnbmVkIGxvbmcgcHRyYWNlX21lc3NhZ2U7CiAgICAgICAgc2ln aW5mb190ICpsYXN0X3NpZ2luZm87Cn07CiMgNTc1ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9p bmNsdWRlL2xpbnV4L3NjaGVkLmgiCmV4dGVybiB2b2lkIHNldF91c2VyX25pY2VfUjg0NjZiOGRj KHRhc2tfdCAqcCwgbG9uZyBuaWNlKTsKZXh0ZXJuIGludCB0YXNrX3ByaW8odGFza190ICpwKTsK ZXh0ZXJuIGludCB0YXNrX25pY2UodGFza190ICpwKTsKZXh0ZXJuIGludCB0YXNrX2N1cnIodGFz a190ICpwKTsKCgoKCgpleHRlcm4gdm9pZCByZWNhbGNfc2lncGVuZGluZ190c2soc3RydWN0IHRh c2tfc3RydWN0ICp0KSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CmV4dGVybiB2b2lkIHJl Y2FsY19zaWdwZW5kaW5nX1JmYjZhZjU4ZCh2b2lkKTsKZXh0ZXJuIHZvaWQgc2lnbmFsX3dha2Vf dXAoc3RydWN0IHRhc2tfc3RydWN0ICp0LCBpbnQgcmVzdW1lX3N0b3BwZWQpOwpleHRlcm4gdm9p ZCBwcmludF9zaWduYWxzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCk7CiMgNjA5ICIvdXNyL3NyYy9s aW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiCnN0YXRpYyBpbmxpbmUgdW5zaWdu ZWQgaW50IHRhc2tfY3B1KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKewogICAgICAgIHJldHVybiAw Owp9CgpzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3Rhc2tfY3B1KHN0cnVjdCB0YXNrX3N0cnVjdCAq cCwgdW5zaWduZWQgaW50IGNwdSkKewp9CgoKCgpleHRlcm4gdm9pZCB5aWVsZF9SNzYwYTBmNGYo dm9pZCk7CgoKCgpleHRlcm4gc3RydWN0IGV4ZWNfZG9tYWluIGRlZmF1bHRfZXhlY19kb21haW47 CiMgNjg0ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiCnVu aW9uIHRhc2tfdW5pb24gewogICAgICAgIHRhc2tfdCB0YXNrOwogICAgICAgIHVuc2lnbmVkIGxv bmcgc3RhY2tbMjA0OCpzaXplb2YobG9uZykvc2l6ZW9mKGxvbmcpXTsKfTsKCmV4dGVybiB1bmlv biB0YXNrX3VuaW9uIGluaXRfdGFza191bmlvbl9SYTI1NTE3MjI7CgpleHRlcm4gc3RydWN0IG1t X3N0cnVjdCBpbml0X21tX1JkODQ4NjllNjsKCmV4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmZp bmRfdGFza19ieV9waWRfUmQzYzlhYjQxKGludCBwaWQpOwoKCmV4dGVybiBzdHJ1Y3QgdXNlcl9z dHJ1Y3QgKiBhbGxvY191aWQodWlkX3QpOwpleHRlcm4gdm9pZCBmcmVlX3VpZChzdHJ1Y3QgdXNl cl9zdHJ1Y3QgKik7CgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvYXNtL2N1 cnJlbnQuaCIgMQoKCgpzdHJ1Y3QgdGFza19zdHJ1Y3Q7CgpzdGF0aWMgaW5saW5lIHN0cnVjdCB0 YXNrX3N0cnVjdCAqIGdldF9jdXJyZW50KHZvaWQpCnsKICAgICAgICBzdHJ1Y3QgdGFza19zdHJ1 Y3QgKmN1cnJlbnQ7CiAgICAgICAgX19hc21fXygiYW5kbCAlJWVzcCwlMDsgIjoiPXIiIChjdXJy ZW50KSA6ICIwIiAofjgxOTFVTCkpOwogICAgICAgIHJldHVybiBjdXJyZW50OwogfQojIDcwMCAi L3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9zY2hlZC5oIiAyCgpleHRlcm4g dW5zaWduZWQgbG9uZyB2b2xhdGlsZSBqaWZmaWVzX1IwZGEwMmQ2NzsKZXh0ZXJuIHVuc2lnbmVk IGxvbmcgaXRpbWVyX3RpY2tzOwpleHRlcm4gdW5zaWduZWQgbG9uZyBpdGltZXJfbmV4dDsKZXh0 ZXJuIHN0cnVjdCB0aW1ldmFsIHh0aW1lX1JmMzFkZGY4MzsKZXh0ZXJuIHZvaWQgZG9fdGltZXIo c3RydWN0IHB0X3JlZ3MgKik7CgoKCmV4dGVybiBpbnQgd2FrZV91cF9zdGF0ZShzdHJ1Y3QgdGFz a19zdHJ1Y3QgKiB0c2ssIHVuc2lnbmVkIGludCBzdGF0ZSkgX19hdHRyaWJ1dGVfXygocmVncGFy bSgzKSkpOwpleHRlcm4gdm9pZCBfX3dha2VfdXBfUmI3NmM1ZjFlKHdhaXRfcXVldWVfaGVhZF90 ICpxLCB1bnNpZ25lZCBpbnQgbW9kZSwgaW50IG5yKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMp KSk7CmV4dGVybiB2b2lkIF9fd2FrZV91cF9zeW5jKHdhaXRfcXVldWVfaGVhZF90ICpxLCB1bnNp Z25lZCBpbnQgbW9kZSwgaW50IG5yKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CmV4dGVy biB2b2lkIHNsZWVwX29uX1JlMDY3OWEzZih3YWl0X3F1ZXVlX2hlYWRfdCAqcSkgX19hdHRyaWJ1 dGVfXygocmVncGFybSgzKSkpOwpleHRlcm4gbG9uZyBzbGVlcF9vbl90aW1lb3V0X1I3NWM4ZTM5 NCh3YWl0X3F1ZXVlX2hlYWRfdCAqcSwgc2lnbmVkIGxvbmcgdGltZW91dCkgX19hdHRyaWJ1dGVf XygocmVncGFybSgzKSkpOwoKZXh0ZXJuIHZvaWQgaW50ZXJydXB0aWJsZV9zbGVlcF9vbl9SN2U0 Zjg5YzMod2FpdF9xdWV1ZV9oZWFkX3QgKnEpIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsK ZXh0ZXJuIGxvbmcgaW50ZXJydXB0aWJsZV9zbGVlcF9vbl90aW1lb3V0X1I0MDdhMjhkOCh3YWl0 X3F1ZXVlX2hlYWRfdCAqcSwgc2lnbmVkIGxvbmcgdGltZW91dCkgX19hdHRyaWJ1dGVfXygocmVn cGFybSgzKSkpOwoKZXh0ZXJuIGludCB3YWtlX3VwX3Byb2Nlc3NfUjdjNjBlM2VhKHRhc2tfdCAq IHApIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKZXh0ZXJuIHZvaWQgd2FrZV91cF9mb3Jr ZWRfcHJvY2Vzcyh0YXNrX3QgKiBwKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CmV4dGVy biB2b2lkIHNjaGVkX2V4aXQodGFza190ICogcCkgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkp OwojIDczNCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9zY2hlZC5oIgog X19hdHRyaWJ1dGVfXygocmVncGFybSgwKSkpIGxvbmcgc3lzX3dhaXQ0X1JhMmMyMTgyMShwaWRf dCBwaWQsdW5zaWduZWQgaW50ICogc3RhdF9hZGRyLCBpbnQgb3B0aW9ucywgc3RydWN0IHJ1c2Fn ZSAqIHJ1KTsKCmV4dGVybiBpbnQgaW5fZ3JvdXBfcF9SYzNjZjExMjgoZ2lkX3QpOwpleHRlcm4g aW50IGluX2Vncm91cF9wX1JkOGEyYWI5NShnaWRfdCk7CgpleHRlcm4gdm9pZCBwcm9jX2NhY2hl c19pbml0KHZvaWQpOwpleHRlcm4gdm9pZCBmbHVzaF9zaWduYWxzX1I0ZGU5N2Q3Nyh0YXNrX3Qg Kik7CmV4dGVybiB2b2lkIGZsdXNoX3NpZ25hbF9oYW5kbGVyc19SOTlkM2JiNzAodGFza190ICop OwpleHRlcm4gaW50IGRlcXVldWVfc2lnbmFsX1I4ZTM5MzE5YihzaWdzZXRfdCAqLCBzaWdpbmZv X3QgKik7CmV4dGVybiB2b2lkIGJsb2NrX2FsbF9zaWduYWxzX1I0YjM0ZmJmNShpbnQgKCpub3Rp Zmllcikodm9pZCAqcHJpdiksIHZvaWQgKnByaXYsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNpZ3NldF90ICptYXNrKTsKZXh0ZXJuIHZvaWQgdW5ibG9ja19hbGxfc2lnbmFsc19SMGEy NDg3ZTAodm9pZCk7CmV4dGVybiBpbnQgc2VuZF9zaWdfaW5mb19SNzA4MjZjZmMoaW50LCBzdHJ1 Y3Qgc2lnaW5mbyAqLCB0YXNrX3QgKik7CmV4dGVybiBpbnQgZm9yY2Vfc2lnX2luZm9fUmEzYTI3 MjBmKGludCwgc3RydWN0IHNpZ2luZm8gKiwgdGFza190ICopOwpleHRlcm4gaW50IF9fa2lsbF9w Z19pbmZvKGludCBzaWcsIHN0cnVjdCBzaWdpbmZvICppbmZvLCBwaWRfdCBwZ3JwKTsKZXh0ZXJu IGludCBraWxsX3BnX2luZm9fUjhlMmQ0OTkwKGludCwgc3RydWN0IHNpZ2luZm8gKiwgcGlkX3Qp OwpleHRlcm4gaW50IGtpbGxfc2xfaW5mb19SMTk4OGQyMWUoaW50LCBzdHJ1Y3Qgc2lnaW5mbyAq LCBwaWRfdCk7CmV4dGVybiBpbnQga2lsbF9wcm9jX2luZm9fUmZiNjhiMjY0KGludCwgc3RydWN0 IHNpZ2luZm8gKiwgcGlkX3QpOwpleHRlcm4gdm9pZCBub3RpZnlfcGFyZW50X1JmNTczY2QzYSh0 YXNrX3QgKiwgaW50KTsKZXh0ZXJuIHZvaWQgZG9fbm90aWZ5X3BhcmVudCh0YXNrX3QgKiwgaW50 KTsKZXh0ZXJuIHZvaWQgZm9yY2Vfc2lnX1JkYWEyMzE5OShpbnQsIHRhc2tfdCAqKTsKZXh0ZXJu IHZvaWQgZm9yY2Vfc2lnX3NwZWNpZmljKGludCwgc3RydWN0IHRhc2tfc3RydWN0ICopOwpleHRl cm4gaW50IHNlbmRfc2lnX1IxMzFiMTQ2YyhpbnQsIHRhc2tfdCAqLCBpbnQpOwpleHRlcm4gdm9p ZCB6YXBfb3RoZXJfdGhyZWFkcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOwpleHRlcm4gaW50IGtp bGxfcGdfUjM4ZjI5NzE5KHBpZF90LCBpbnQsIGludCk7CmV4dGVybiBpbnQga2lsbF9zbF9SZmJh MTJmZDAocGlkX3QsIGludCwgaW50KTsKZXh0ZXJuIGludCBraWxsX3Byb2NfUjkzMmRhNjdlKHBp ZF90LCBpbnQsIGludCk7CmV4dGVybiBpbnQgZG9fc2lnYWN0aW9uKGludCwgY29uc3Qgc3RydWN0 IGtfc2lnYWN0aW9uICosIHN0cnVjdCBrX3NpZ2FjdGlvbiAqKTsKZXh0ZXJuIGludCBkb19zaWdh bHRzdGFjayhjb25zdCBzdGFja190ICosIHN0YWNrX3QgKiwgdW5zaWduZWQgbG9uZyk7CgpzdGF0 aWMgaW5saW5lIGludCBzaWduYWxfcGVuZGluZyh0YXNrX3QgKnApCnsKICAgICAgICByZXR1cm4g KHAtPnNpZ3BlbmRpbmcgIT0gMCk7Cn0KCgoKc3RhdGljIGlubGluZSBpbnQgb25fc2lnX3N0YWNr KHVuc2lnbmVkIGxvbmcgc3ApCnsKICAgICAgICByZXR1cm4gKHNwIC0gZ2V0X2N1cnJlbnQoKS0+ c2FzX3NzX3NwIDwgZ2V0X2N1cnJlbnQoKS0+c2FzX3NzX3NpemUpOwp9CgpzdGF0aWMgaW5saW5l IGludCBzYXNfc3NfZmxhZ3ModW5zaWduZWQgbG9uZyBzcCkKewogICAgICAgIHJldHVybiAoZ2V0 X2N1cnJlbnQoKS0+c2FzX3NzX3NpemUgPT0gMCA/IDIKICAgICAgICAgICAgICAgIDogb25fc2ln X3N0YWNrKHNwKSA/IDEgOiAwKTsKfQoKZXh0ZXJuIGludCByZXF1ZXN0X2lycV9SMGM2MGYyZTAo dW5zaWduZWQgaW50LAogICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpoYW5kbGVyKShpbnQs IHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksCiAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu ZWQgbG9uZywgY29uc3QgY2hhciAqLCB2b2lkICopOwpleHRlcm4gdm9pZCBmcmVlX2lycV9SZjIw ZGFiZDgodW5zaWduZWQgaW50LCB2b2lkICopOwojIDgwMSAiL3Vzci9zcmMvbGludXgtMi40LjIw LTgvaW5jbHVkZS9saW51eC9zY2hlZC5oIgpzdGF0aWMgaW5saW5lIGludCBzdXNlcih2b2lkKQp7 CiAgICAgICAgaWYgKCEoICgxIDw8ICgwICsxKSkgJiAweDAwMDAwMDAwID8gKDEgPDwgKDApKSAm IDB4MDAwMDAwMDAgOiAoMSA8PCAoMCkpICYgc2VjdXJlYml0c19SYWJlNzc0ODQgKSAmJiBnZXRf Y3VycmVudCgpLT5ldWlkID09IDApIHsKICAgICAgICAgICAgICAgIGdldF9jdXJyZW50KCktPmZs YWdzIHw9IDB4MDAwMDAxMDA7CiAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9CiAg ICAgICAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbmxpbmUgaW50IGZzdXNlcih2b2lkKQp7CiAgICAg ICAgaWYgKCEoICgxIDw8ICgwICsxKSkgJiAweDAwMDAwMDAwID8gKDEgPDwgKDApKSAmIDB4MDAw MDAwMDAgOiAoMSA8PCAoMCkpICYgc2VjdXJlYml0c19SYWJlNzc0ODQgKSAmJiBnZXRfY3VycmVu dCgpLT5mc3VpZCA9PSAwKSB7CiAgICAgICAgICAgICAgICBnZXRfY3VycmVudCgpLT5mbGFncyB8 PSAweDAwMDAwMTAwOwogICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfQogICAgICAg IHJldHVybiAwOwp9CgoKCgoKCgpzdGF0aWMgaW5saW5lIGludCBjYXBhYmxlKGludCBjYXApCnsK CiAgICAgICAgaWYgKCgoZ2V0X2N1cnJlbnQoKS0+Y2FwX2VmZmVjdGl2ZSkgJiAoMSA8PCAoY2Fw KSkpKQoKCgogICAgICAgIHsKICAgICAgICAgICAgICAgIGdldF9jdXJyZW50KCktPmZsYWdzIHw9 IDB4MDAwMDAxMDA7CiAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9CiAgICAgICAg cmV0dXJuIDA7Cn0KCgoKCmV4dGVybiBzdHJ1Y3QgbW1fc3RydWN0ICogbW1fYWxsb2Modm9pZCk7 CgpleHRlcm4gc3RydWN0IG1tX3N0cnVjdCAqIHN0YXJ0X2xhenlfdGxiKHZvaWQpOwpleHRlcm4g dm9pZCBlbmRfbGF6eV90bGIoc3RydWN0IG1tX3N0cnVjdCAqbW0pOwoKCmV4dGVybiBpbmxpbmUg dm9pZCBfX21tZHJvcChzdHJ1Y3QgbW1fc3RydWN0ICopIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0o MykpKTsKc3RhdGljIGlubGluZSB2b2lkIG1tZHJvcChzdHJ1Y3QgbW1fc3RydWN0ICogbW0pCnsK ICAgICAgICBpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmbW0tPm1tX2NvdW50KSkKICAgICAgICAg ICAgICAgIF9fbW1kcm9wKG1tKTsKfQoKCmV4dGVybiB2b2lkIG1tcHV0KHN0cnVjdCBtbV9zdHJ1 Y3QgKik7CgpleHRlcm4gdm9pZCBtbV9yZWxlYXNlKHZvaWQpOwoKCgoKZXh0ZXJuIHN0cnVjdCBm aWxlICoqIGFsbG9jX2ZkX2FycmF5KGludCk7CmV4dGVybiBpbnQgZXhwYW5kX2ZkX2FycmF5KHN0 cnVjdCBmaWxlc19zdHJ1Y3QgKiwgaW50IG5yKTsKZXh0ZXJuIHZvaWQgZnJlZV9mZF9hcnJheShz dHJ1Y3QgZmlsZSAqKiwgaW50KTsKCmV4dGVybiBmZF9zZXQgKmFsbG9jX2Zkc2V0KGludCk7CmV4 dGVybiBpbnQgZXhwYW5kX2Zkc2V0KHN0cnVjdCBmaWxlc19zdHJ1Y3QgKiwgaW50IG5yKTsKZXh0 ZXJuIHZvaWQgZnJlZV9mZHNldChmZF9zZXQgKiwgaW50KTsKCmV4dGVybiBpbnQgY29weV90aHJl YWQoaW50LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB0YXNr X3QgKiwgc3RydWN0IHB0X3JlZ3MgKik7CmV4dGVybiB2b2lkIGZsdXNoX3RocmVhZCh2b2lkKTsK ZXh0ZXJuIHZvaWQgZXhpdF90aHJlYWQodm9pZCk7CgpleHRlcm4gdm9pZCBleGl0X21tX1JiZGUx MGFkMSh0YXNrX3QgKik7CmV4dGVybiB2b2lkIGV4aXRfZmlsZXNfUjlhZjhhYjE3KHRhc2tfdCAq KTsKZXh0ZXJuIHZvaWQgZXhpdF9zaWduYWwoc3RydWN0IHRhc2tfc3RydWN0ICopOwpleHRlcm4g dm9pZCBfX2V4aXRfc2lnbmFsKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKZXh0ZXJuIHZvaWQgZXhp dF9zaWdoYW5kX1JhMTc2ZDMzZihzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CmV4dGVybiB2b2lkIF9f ZXhpdF9zaWdoYW5kKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKCmV4dGVybiB2b2lkIGRvX2dyb3Vw X2V4aXQoaW50KTsKCmV4dGVybiB2b2lkIHJlcGFyZW50X3RvX2luaXRfUmVjNjE1OGQwKHZvaWQp OwpleHRlcm4gdm9pZCBkYWVtb25pemVfUmQ2NmEzNTRhKHZvaWQpOwpleHRlcm4gdm9pZCBfX3Nl dF9zcGVjaWFsX3BpZHMocGlkX3Qgc2Vzc2lvbiwgcGlkX3QgcGdycCk7CmV4dGVybiB2b2lkIHNl dF9zcGVjaWFsX3BpZHNfUmFjOTQzZTc5KHBpZF90IHNlc3Npb24sIHBpZF90IHBncnApOwpleHRl cm4gdGFza190ICpjaGlsZF9yZWFwZXI7CgpleHRlcm4gaW50IGRvX2V4ZWN2ZV9SOWM2MjA5OGYo Y2hhciAqLCBjaGFyICoqLCBjaGFyICoqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKZXh0ZXJuIHN0cnVj dCB0YXNrX3N0cnVjdCAqZG9fZm9yayh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBzdHJ1 Y3QgcHRfcmVncyAqLCB1bnNpZ25lZCBsb25nLCBpbnQgKiwgaW50ICopOwpleHRlcm4gdm9pZCBy ZWFwX3RocmVhZCh0YXNrX3QgKnApOwpleHRlcm4gdm9pZCByZWxlYXNlX3Rhc2soc3RydWN0IHRh c2tfc3RydWN0ICogcCk7CgoKZXh0ZXJuIHZvaWQgYWRkX3dhaXRfcXVldWVfUmQ5MWZiMjYzKHdh aXRfcXVldWVfaGVhZF90ICpxLCB3YWl0X3F1ZXVlX3QgKiB3YWl0KSBfX2F0dHJpYnV0ZV9fKChy ZWdwYXJtKDMpKSk7CmV4dGVybiB2b2lkIGFkZF93YWl0X3F1ZXVlX2V4Y2x1c2l2ZV9SMDQxNGIw Zjgod2FpdF9xdWV1ZV9oZWFkX3QgKnEsIHdhaXRfcXVldWVfdCAqIHdhaXQpIF9fYXR0cmlidXRl X18oKHJlZ3Bhcm0oMykpKTsKZXh0ZXJuIHZvaWQgcmVtb3ZlX3dhaXRfcXVldWVfUmIyYzQ0NDI1 KHdhaXRfcXVldWVfaGVhZF90ICpxLCB3YWl0X3F1ZXVlX3QgKiB3YWl0KSBfX2F0dHJpYnV0ZV9f KChyZWdwYXJtKDMpKSk7CiMgOTA3ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xp bnV4L3NjaGVkLmgiCmV4dGVybiBsb25nIGtlcm5lbF90aHJlYWRfUjdjYTM0MWFmKGludCAoKmZu KSh2b2lkICopLCB2b2lkICogYXJnLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKIyA5OTkgIi91c3Iv c3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvc2NoZWQuaCIKZXh0ZXJuIHZvaWQgY2hl Y2tfdGFza2xpc3RfbG9ja2VkX1IxNWJiNTg5Myh2b2lkKTsKIyAxMDMwICIvdXNyL3NyYy9saW51 eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiCmV4dGVybiB0YXNrX3QgKiBuZXh0X3Ro cmVhZF9SNTNhNmQ4NjIodGFza190ICpwKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CgoK CnN0YXRpYyBpbmxpbmUgaW50IHRocmVhZF9ncm91cF9lbXB0eSh0YXNrX3QgKnApCnsKICAgICAg ICBzdHJ1Y3QgcGlkICpwaWQgPSBwLT5waWRzW1BJRFRZUEVfVEdJRF0ucGlkcHRyOwoKICAgICAg ICByZXR1cm4gcGlkLT50YXNrX2xpc3QubmV4dC0+bmV4dCA9PSAmcGlkLT50YXNrX2xpc3Q7Cn0K CgoKCmV4dGVybiB2b2lkIHVuaGFzaF9wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CgoK c3RhdGljIGlubGluZSB2b2lkIHRhc2tfbG9jayh0YXNrX3QgKnApCnsKICAgICAgICAodm9pZCko JnAtPmFsbG9jX2xvY2spOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgdGFza191bmxvY2sodGFza190 ICpwKQp7CiAgICAgICAgZG8geyB9IHdoaWxlKDApOwp9CgoKCgoKCgpzdGF0aWMgaW5saW5lIHN0 cnVjdCBtbV9zdHJ1Y3QgKiBnZXRfdGFza19tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiB0YXNrKQp7 CiAgICAgICAgc3RydWN0IG1tX3N0cnVjdCAqIG1tOwoKICAgICAgICB0YXNrX2xvY2sodGFzayk7 CiAgICAgICAgbW0gPSB0YXNrLT5tbTsKICAgICAgICBpZiAobW0pCiAgICAgICAgICAgICAgICBh dG9taWNfaW5jKCZtbS0+bW1fdXNlcnMpOwogICAgICAgIHRhc2tfdW5sb2NrKHRhc2spOwoKICAg ICAgICByZXR1cm4gbW07Cn0KCgpzdGF0aWMgaW5saW5lIGNoYXIgKiBkX3BhdGgoc3RydWN0IGRl bnRyeSAqZGVudHJ5LCBzdHJ1Y3QgdmZzbW91bnQgKnZmc21udCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjaGFyICpidWYsIGludCBidWZsZW4pCnsKICAgICAgICBjaGFyICpyZXM7 CiAgICAgICAgc3RydWN0IHZmc21vdW50ICpyb290bW50OwogICAgICAgIHN0cnVjdCBkZW50cnkg KnJvb3Q7CiAgICAgICAgKHZvaWQpKCZnZXRfY3VycmVudCgpLT5mcy0+bG9jayk7CiAgICAgICAg cm9vdG1udCA9IG1udGdldChnZXRfY3VycmVudCgpLT5mcy0+cm9vdG1udCk7CiAgICAgICAgcm9v dCA9IGRnZXQoZ2V0X2N1cnJlbnQoKS0+ZnMtPnJvb3QpOwogICAgICAgIGRvIHsgfSB3aGlsZSgw KTsKICAgICAgICAodm9pZCkoJmRjYWNoZV9sb2NrX1I3MzQ2M2NlZik7CiAgICAgICAgcmVzID0g X19kX3BhdGhfUmI3YmY5MDM2KGRlbnRyeSwgdmZzbW50LCByb290LCByb290bW50LCBidWYsIGJ1 Zmxlbik7CiAgICAgICAgZG8geyB9IHdoaWxlKDApOwogICAgICAgIGRwdXRfUjNkZTgxM2E2KHJv b3QpOwogICAgICAgIG1udHB1dChyb290bW50KTsKICAgICAgICByZXR1cm4gcmVzOwp9CgpzdGF0 aWMgaW5saW5lIHZvaWQgc2V0X25lZWRfcmVzY2hlZCh2b2lkKQp7CiAgICAgICAgZ2V0X2N1cnJl bnQoKS0+bmVlZF9yZXNjaGVkID0gMTsKfQoKc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX25lZWRf cmVzY2hlZCh2b2lkKQp7CiAgICAgICAgZ2V0X2N1cnJlbnQoKS0+bmVlZF9yZXNjaGVkID0gMDsK fQoKc3RhdGljIGlubGluZSB2b2lkIHNldF90c2tfbmVlZF9yZXNjaGVkKHRhc2tfdCAqdHNrKQp7 CiAgICAgICAgdHNrLT5uZWVkX3Jlc2NoZWQgPSAxOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgY2xl YXJfdHNrX25lZWRfcmVzY2hlZCh0YXNrX3QgKnRzaykKewogICAgICAgIHRzay0+bmVlZF9yZXNj aGVkID0gMDsKfQoKc3RhdGljIGlubGluZSBpbnQgbmVlZF9yZXNjaGVkKHZvaWQpCnsKICAgICAg ICByZXR1cm4gKF9fYnVpbHRpbl9leHBlY3QoKGdldF9jdXJyZW50KCktPm5lZWRfcmVzY2hlZCks MCkpOwp9CgpleHRlcm4gdm9pZCBfX2NvbmRfcmVzY2hlZF9SNDllNzk5NDAodm9pZCk7CnN0YXRp YyBpbmxpbmUgdm9pZCBjb25kX3Jlc2NoZWQodm9pZCkKewogICAgICAgIGlmIChuZWVkX3Jlc2No ZWQoKSkKICAgICAgICAgICAgICAgIF9fY29uZF9yZXNjaGVkX1I0OWU3OTk0MCgpOwp9CiMgMjMg Ii91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW0uaCIgMgoKCgoKCgoKIyAx ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21tem9uZS5oIiAxCiMgMTkg Ii91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW16b25lLmgiCnR5cGVkZWYg c3RydWN0IGZyZWVfYXJlYV9zdHJ1Y3QgewogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgZnJlZV9s aXN0OwogICAgICAgIHVuc2lnbmVkIGxvbmcgKm1hcDsKfSBmcmVlX2FyZWFfdDsKCnN0cnVjdCBw Z2xpc3RfZGF0YTsKc3RydWN0IHB0ZV9jaGFpbjsKCgoKCgp0eXBlZGVmIHN0cnVjdCBwZXJfY3B1 X3BhZ2VzX3MgewogICAgICAgIGludCBucl9wYWdlcywgbWF4X25yX3BhZ2VzOwogICAgICAgIHN0 cnVjdCBsaXN0X2hlYWQgaGVhZDsKfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKCgxIDw8ICgoNSkp KSkpKSBwZXJfY3B1X3Q7CiMgNDQgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGlu dXgvbW16b25lLmgiCnR5cGVkZWYgc3RydWN0IHpvbmVfc3RydWN0IHsKCgoKICAgICAgICBwZXJf Y3B1X3QgY3B1X3BhZ2VzWzFdOwogICAgICAgIHNwaW5sb2NrX3QgbG9jazsKICAgICAgICB1bnNp Z25lZCBsb25nIGZyZWVfcGFnZXNfUjk5NDFjY2I4OwogICAgICAgIHVuc2lnbmVkIGxvbmcgYWN0 aXZlX2Fub25fcGFnZXM7CiAgICAgICAgdW5zaWduZWQgbG9uZyBhY3RpdmVfY2FjaGVfcGFnZXM7 CiAgICAgICAgdW5zaWduZWQgbG9uZyBpbmFjdGl2ZV9kaXJ0eV9wYWdlczsKICAgICAgICB1bnNp Z25lZCBsb25nIGluYWN0aXZlX2xhdW5kcnlfcGFnZXM7CiAgICAgICAgdW5zaWduZWQgbG9uZyBp bmFjdGl2ZV9jbGVhbl9wYWdlczsKICAgICAgICB1bnNpZ25lZCBsb25nIHBhZ2VzX21pbiwgcGFn ZXNfbG93LCBwYWdlc19oaWdoLCBwYWdlc19wbGVudHk7CiAgICAgICAgaW50IG5lZWRfYmFsYW5j ZTsKICAgICAgICBpbnQgbmVlZF9zY2FuOwogICAgICAgIGludCBhY3RpdmVfYW5vbl9jb3VudFsx NSArMV07CiAgICAgICAgaW50IGFjdGl2ZV9jYWNoZV9jb3VudFsxNSArMV07CiAgICAgICAgdW5z aWduZWQgY2hhciBhbm9uX2FnZV9iaWFzLCBjYWNoZV9hZ2VfYmlhczsKCgoKCiAgICAgICAgc3Ry dWN0IGxpc3RfaGVhZCBhY3RpdmVfYW5vbl9saXN0WzE1ICsxXTsKICAgICAgICBzdHJ1Y3QgbGlz dF9oZWFkIGFjdGl2ZV9jYWNoZV9saXN0WzE1ICsxXTsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFk IGluYWN0aXZlX2RpcnR5X2xpc3Q7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBpbmFjdGl2ZV9s YXVuZHJ5X2xpc3Q7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBpbmFjdGl2ZV9jbGVhbl9saXN0 OwogICAgICAgIGZyZWVfYXJlYV90IGZyZWVfYXJlYVsxMF07CiAgICAgICAgc3BpbmxvY2tfdCBs cnVfbG9jazsKIyA5OSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tbXpv bmUuaCIKICAgICAgICB3YWl0X3F1ZXVlX2hlYWRfdCAqIHdhaXRfdGFibGU7CiAgICAgICAgdW5z aWduZWQgbG9uZyB3YWl0X3RhYmxlX3NpemU7CiAgICAgICAgdW5zaWduZWQgbG9uZyB3YWl0X3Rh YmxlX3NoaWZ0OwoKCgoKICAgICAgICBzdHJ1Y3QgcGdsaXN0X2RhdGEgKnpvbmVfcGdkYXQ7CiAg ICAgICAgc3RydWN0IHBhZ2UgKnpvbmVfbWVtX21hcDsKICAgICAgICB1bnNpZ25lZCBsb25nIHpv bmVfc3RhcnRfcGFkZHI7CiAgICAgICAgdW5zaWduZWQgbG9uZyB6b25lX3N0YXJ0X21hcG5yOwoK CgoKICAgICAgICBjaGFyICpuYW1lOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZTsKfSB6b25l X3Q7CiMgMTM0ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21tem9uZS5o Igp0eXBlZGVmIHN0cnVjdCB6b25lbGlzdF9zdHJ1Y3QgewogICAgICAgIHpvbmVfdCAqIHpvbmVz IFszICsxXTsKfSB6b25lbGlzdF90OwojIDE1MSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5j bHVkZS9saW51eC9tbXpvbmUuaCIKc3RydWN0IGJvb3RtZW1fZGF0YTsKdHlwZWRlZiBzdHJ1Y3Qg cGdsaXN0X2RhdGEgewogICAgICAgIHpvbmVfdCBub2RlX3pvbmVzWzNdOwogICAgICAgIHpvbmVs aXN0X3Qgbm9kZV96b25lbGlzdHNbMHgwZiArMV07CiAgICAgICAgaW50IG5yX3pvbmVzOwogICAg ICAgIHN0cnVjdCBwYWdlICpub2RlX21lbV9tYXA7CiAgICAgICAgdW5zaWduZWQgbG9uZyAqdmFs aWRfYWRkcl9iaXRtYXA7CiAgICAgICAgc3RydWN0IGJvb3RtZW1fZGF0YSAqYmRhdGE7CiAgICAg ICAgdW5zaWduZWQgbG9uZyBub2RlX3N0YXJ0X3BhZGRyOwogICAgICAgIHVuc2lnbmVkIGxvbmcg bm9kZV9zdGFydF9tYXBucjsKICAgICAgICB1bnNpZ25lZCBsb25nIG5vZGVfc2l6ZTsKICAgICAg ICBpbnQgbm9kZV9pZDsKICAgICAgICBzdHJ1Y3QgcGdsaXN0X2RhdGEgKm5vZGVfbmV4dDsKfSBw Z19kYXRhX3Q7CgpleHRlcm4gaW50IG51bW5vZGVzOwpleHRlcm4gcGdfZGF0YV90ICpwZ2RhdF9s aXN0OwoKCgoKCnN0cnVjdCBwYWdlOwpleHRlcm4gdm9pZCBzaG93X2ZyZWVfYXJlYXNfY29yZShw Z19kYXRhX3QgKnBnZGF0KTsKZXh0ZXJuIHZvaWQgZnJlZV9hcmVhX2luaXRfY29yZShpbnQgbmlk LCBwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3QgcGFnZSAqKmdtYXAsCiAgdW5zaWduZWQgbG9uZyAq em9uZXNfc2l6ZSwgdW5zaWduZWQgbG9uZyBwYWRkciwgdW5zaWduZWQgbG9uZyAqemhvbGVzX3Np emUsCiAgc3RydWN0IHBhZ2UgKnBtYXApOwoKZXh0ZXJuIHBnX2RhdGFfdCBjb250aWdfcGFnZV9k YXRhOwojIDIwMCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tbXpvbmUu aCIKc3RhdGljIGlubGluZSB6b25lX3QgKm5leHRfem9uZSh6b25lX3QgKnpvbmUpCnsKICAgICAg ICBwZ19kYXRhX3QgKnBnZGF0ID0gem9uZS0+em9uZV9wZ2RhdDsKCiAgICAgICAgaWYgKHpvbmUg LSBwZ2RhdC0+bm9kZV96b25lcyA8IDMgLSAxKQogICAgICAgICAgICAgICAgem9uZSsrOwoKICAg ICAgICBlbHNlIGlmIChwZ2RhdC0+bm9kZV9uZXh0KSB7CiAgICAgICAgICAgICAgICBwZ2RhdCA9 IHBnZGF0LT5ub2RlX25leHQ7CiAgICAgICAgICAgICAgICB6b25lID0gcGdkYXQtPm5vZGVfem9u ZXM7CiAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICB6b25lID0gKCh2b2lkICopMCk7Cgog ICAgICAgIHJldHVybiB6b25lOwp9CiMgMzEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1 ZGUvbGludXgvbW0uaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGlu dXgvc3dhcC5oIiAxCiMgMjUgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgv c3dhcC5oIgp1bmlvbiBzd2FwX2hlYWRlciB7CiAgICAgICAgc3RydWN0CiAgICAgICAgewogICAg ICAgICAgICAgICAgY2hhciByZXNlcnZlZFsoMVVMIDw8IDEyKSAtIDEwXTsKICAgICAgICAgICAg ICAgIGNoYXIgbWFnaWNbMTBdOwogICAgICAgIH0gbWFnaWM7CiAgICAgICAgc3RydWN0CiAgICAg ICAgewogICAgICAgICAgICAgICAgY2hhciBib290Yml0c1sxMDI0XTsKICAgICAgICAgICAgICAg IHVuc2lnbmVkIGludCB2ZXJzaW9uOwogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxhc3Rf cGFnZTsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBucl9iYWRwYWdlczsKICAgICAgICAg ICAgICAgIHVuc2lnbmVkIGludCBwYWRkaW5nWzEyNV07CiAgICAgICAgICAgICAgICB1bnNpZ25l ZCBpbnQgYmFkcGFnZXNbMV07CiAgICAgICAgfSBpbmZvOwp9OwojIDY0ICIvdXNyL3NyYy9saW51 eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3N3YXAuaCIKc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3Qg ewogICAgICAgIHVuc2lnbmVkIGludCBmbGFnczsKICAgICAgICBrZGV2X3Qgc3dhcF9kZXZpY2U7 CiAgICAgICAgc3BpbmxvY2tfdCBzZGV2X2xvY2s7CiAgICAgICAgc3RydWN0IGRlbnRyeSAqIHN3 YXBfZmlsZTsKICAgICAgICBzdHJ1Y3QgdmZzbW91bnQgKnN3YXBfdmZzbW50OwogICAgICAgIHVu c2lnbmVkIHNob3J0ICogc3dhcF9tYXA7CiAgICAgICAgdW5zaWduZWQgaW50IGxvd2VzdF9iaXQ7 CiAgICAgICAgdW5zaWduZWQgaW50IGhpZ2hlc3RfYml0OwogICAgICAgIHVuc2lnbmVkIGludCBj bHVzdGVyX25leHQ7CiAgICAgICAgdW5zaWduZWQgaW50IGNsdXN0ZXJfbnI7CiAgICAgICAgaW50 IHByaW87CiAgICAgICAgaW50IHBhZ2VzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgbWF4OwogICAg ICAgIGludCBuZXh0Owp9OwoKZXh0ZXJuIGludCBucl9zd2FwX3BhZ2VzOwoKCgoKZXh0ZXJuIHVu c2lnbmVkIGludCBucl9mcmVlX3BhZ2VzKHZvaWQpOwpleHRlcm4gdW5zaWduZWQgaW50IG5yX2Zy ZWVfYnVmZmVyX3BhZ2VzKHZvaWQpOwpleHRlcm4gdW5zaWduZWQgaW50IG5yX2FjdGl2ZV9hbm9u X3BhZ2VzKHZvaWQpOwpleHRlcm4gdW5zaWduZWQgaW50IG5yX2FjdGl2ZV9jYWNoZV9wYWdlcyh2 b2lkKTsKZXh0ZXJuIHVuc2lnbmVkIGludCBucl9pbmFjdGl2ZV9kaXJ0eV9wYWdlcyh2b2lkKTsK ZXh0ZXJuIHVuc2lnbmVkIGludCBucl9pbmFjdGl2ZV9sYXVuZHJ5X3BhZ2VzKHZvaWQpOwpleHRl cm4gdW5zaWduZWQgaW50IG5yX2luYWN0aXZlX2NsZWFuX3BhZ2VzKHZvaWQpOwpleHRlcm4gYXRv bWljX3QgcGFnZV9jYWNoZV9zaXplOwpleHRlcm4gYXRvbWljX3QgYnVmZmVybWVtX3BhZ2VzOwoK ZXh0ZXJuIHNwaW5sb2NrX2NhY2hlbGluZV90IHBhZ2VjYWNoZV9sb2NrX2NhY2hlbGluZTsKCgpl eHRlcm4gdm9pZCBfX3JlbW92ZV9pbm9kZV9wYWdlKHN0cnVjdCBwYWdlICopOwoKCnN0cnVjdCB0 YXNrX3N0cnVjdDsKc3RydWN0IHZtX2FyZWFfc3RydWN0OwpzdHJ1Y3Qgc3lzaW5mbzsKCnN0cnVj dCB6b25lX3Q7CgoKc3RydWN0IHB0ZV9jaGFpbjsKZXh0ZXJuIGludCBwYWdlX3JlZmVyZW5jZWQo c3RydWN0IHBhZ2UgKiwgaW50ICopIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKZXh0ZXJu IHN0cnVjdCBwdGVfY2hhaW4gKiBwYWdlX2FkZF9ybWFwKHN0cnVjdCBwYWdlICosIHB0ZV90ICos IHN0cnVjdCBwdGVfY2hhaW4gKikgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkpOwoKZXh0ZXJu IHZvaWQgcGFnZV9yZW1vdmVfcm1hcChzdHJ1Y3QgcGFnZSAqLCBwdGVfdCAqKSBfX2F0dHJpYnV0 ZV9fKChyZWdwYXJtKDMpKSk7CmV4dGVybiBpbnQgdHJ5X3RvX3VubWFwKHN0cnVjdCBwYWdlICop IF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKc3RydWN0IHB0ZV9jaGFpbiAqIHB0ZV9jaGFp bl9hbGxvYyhpbnQpOwp2b2lkIF9fcHRlX2NoYWluX2ZyZWUoc3RydWN0IHB0ZV9jaGFpbiAqKTsK CnN0YXRpYyBpbmxpbmUgdm9pZCBwdGVfY2hhaW5fZnJlZShzdHJ1Y3QgcHRlX2NoYWluICogcHRl X2NoYWluKQp7CiAgICAgICAgaWYgKHB0ZV9jaGFpbikKICAgICAgICAgICAgICAgIF9fcHRlX2No YWluX2ZyZWUocHRlX2NoYWluKTsKfQojIDEzMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5j bHVkZS9saW51eC9zd2FwLmgiCmV4dGVybiB2b2lkIGxydV9jYWNoZV9hZGQoc3RydWN0IHBhZ2Ug KikgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkpOwpleHRlcm4gdm9pZCBscnVfY2FjaGVfYWRk X2RpcnR5KHN0cnVjdCBwYWdlICopIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKZXh0ZXJu IHZvaWQgX19scnVfY2FjaGVfZGVsKHN0cnVjdCBwYWdlICopIF9fYXR0cmlidXRlX18oKHJlZ3Bh cm0oMykpKTsKZXh0ZXJuIHZvaWQgbHJ1X2NhY2hlX2RlbChzdHJ1Y3QgcGFnZSAqKSBfX2F0dHJp YnV0ZV9fKChyZWdwYXJtKDMpKSk7CgpleHRlcm4gdm9pZCBhY3RpdmF0ZV9wYWdlKHN0cnVjdCBw YWdlICopIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKZXh0ZXJuIHZvaWQgYWN0aXZhdGVf cGFnZV9ub2xvY2soc3RydWN0IHBhZ2UgKikgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkpOwpl eHRlcm4gdm9pZCBkZWFjdGl2YXRlX3BhZ2Uoc3RydWN0IHBhZ2UgKikgX19hdHRyaWJ1dGVfXygo cmVncGFybSgzKSkpOwpleHRlcm4gdm9pZCBkZWFjdGl2YXRlX3BhZ2Vfbm9sb2NrKHN0cnVjdCBw YWdlICopIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKZXh0ZXJuIHZvaWQgZHJvcF9wYWdl KHN0cnVjdCBwYWdlICopIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKCmV4dGVybiB2b2lk IHN3YXBfc2V0dXAodm9pZCk7CgoKZXh0ZXJuIHN0cnVjdCBwYWdlICogcmVjbGFpbV9wYWdlKHpv bmVfdCAqKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CmV4dGVybiB3YWl0X3F1ZXVlX2hl YWRfdCBrc3dhcGRfd2FpdDsKZXh0ZXJuIGludCB0cnlfdG9fZnJlZV9wYWdlcyh1bnNpZ25lZCBp bnQgZ2ZwX21hc2spIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKZXh0ZXJuIGludCByZWJh bGFuY2VfbGF1bmRyeV96b25lKHN0cnVjdCB6b25lX3N0cnVjdCAqLCBpbnQsIHVuc2lnbmVkIGlu dCk7CmV4dGVybiB2b2lkIHdha2V1cF9rc3dhcGQodW5zaWduZWQgaW50KTsKZXh0ZXJuIHZvaWQg cnNzX2ZyZWVfcGFnZXModW5zaWduZWQgaW50KTsKCgoKCgoKCnN0cnVjdCBjYWNoZV9saW1pdHMg ewogICAgICAgIGludCBtaW47CiAgICAgICAgaW50IGJvcnJvdzsKICAgICAgICBpbnQgbWF4Owp9 OwpleHRlcm4gc3RydWN0IGNhY2hlX2xpbWl0cyBjYWNoZV9saW1pdHM7CgoKZXh0ZXJuIHZvaWQg cndfc3dhcF9wYWdlKGludCwgc3RydWN0IHBhZ2UgKik7CmV4dGVybiB2b2lkIHJ3X3N3YXBfcGFn ZV9ub2xvY2soaW50LCBzd3BfZW50cnlfdCwgY2hhciAqKTsKCgoKCgoKZXh0ZXJuIHZvaWQgc2hv d19zd2FwX2NhY2hlX2luZm8odm9pZCk7CgpleHRlcm4gaW50IGFkZF90b19zd2FwX2NhY2hlKHN0 cnVjdCBwYWdlICosIHN3cF9lbnRyeV90KTsKZXh0ZXJuIGludCBhZGRfdG9fc3dhcChzdHJ1Y3Qg cGFnZSAqKTsKZXh0ZXJuIHZvaWQgX19kZWxldGVfZnJvbV9zd2FwX2NhY2hlKHN0cnVjdCBwYWdl ICpwYWdlKTsKZXh0ZXJuIHZvaWQgZGVsZXRlX2Zyb21fc3dhcF9jYWNoZShzdHJ1Y3QgcGFnZSAq cGFnZSk7CmV4dGVybiB2b2lkIGZyZWVfcGFnZV9hbmRfc3dhcF9jYWNoZShzdHJ1Y3QgcGFnZSAq cGFnZSk7CmV4dGVybiBzdHJ1Y3QgcGFnZSAqIGxvb2t1cF9zd2FwX2NhY2hlKHN3cF9lbnRyeV90 KTsKZXh0ZXJuIHN0cnVjdCBwYWdlICogcmVhZF9zd2FwX2NhY2hlX2FzeW5jKHN3cF9lbnRyeV90 KTsKCgpleHRlcm4gdm9pZCBvdXRfb2ZfbWVtb3J5KHZvaWQpOwoKCmV4dGVybiBpbnQgdG90YWxf c3dhcF9wYWdlczsKZXh0ZXJuIHVuc2lnbmVkIGludCBucl9zd2FwZmlsZXM7CmV4dGVybiBzdHJ1 Y3Qgc3dhcF9pbmZvX3N0cnVjdCBzd2FwX2luZm9bXTsKZXh0ZXJuIGludCBpc19zd2FwX3BhcnRp dGlvbihrZGV2X3QpOwpleHRlcm4gdm9pZCBzaV9zd2FwaW5mbyhzdHJ1Y3Qgc3lzaW5mbyAqKTsK ZXh0ZXJuIHN3cF9lbnRyeV90IGdldF9zd2FwX3BhZ2Uodm9pZCk7CmV4dGVybiB2b2lkIGdldF9z d2FwaGFuZGxlX2luZm8oc3dwX2VudHJ5X3QsIHVuc2lnbmVkIGxvbmcgKiwga2Rldl90ICosCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaW5vZGUgKiopOwpl eHRlcm4gaW50IHN3YXBfZHVwbGljYXRlKHN3cF9lbnRyeV90KTsKZXh0ZXJuIGludCB2YWxpZF9z d2FwaGFuZGxlcyhzd3BfZW50cnlfdCwgdW5zaWduZWQgbG9uZyAqKTsKZXh0ZXJuIHZvaWQgc3dh cF9mcmVlKHN3cF9lbnRyeV90KTsKZXh0ZXJuIHZvaWQgZnJlZV9zd2FwX2FuZF9jYWNoZShzd3Bf ZW50cnlfdCk7CnN0cnVjdCBzd2FwX2xpc3RfdCB7CiAgICAgICAgaW50IGhlYWQ7CiAgICAgICAg aW50IG5leHQ7Cn07CmV4dGVybiBzdHJ1Y3Qgc3dhcF9saXN0X3Qgc3dhcF9saXN0OwogX19hdHRy aWJ1dGVfXygocmVncGFybSgwKSkpIGxvbmcgc3lzX3N3YXBvZmYoY29uc3QgY2hhciAqKTsKIF9f YXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkpKSBsb25nIHN5c19zd2Fwb24oY29uc3QgY2hhciAqLCBp bnQpOwoKCmV4dGVybiB2b2lkIG1hcmtfcGFnZV9hY2Nlc3NlZChzdHJ1Y3QgcGFnZSAqKSBfX2F0 dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CiMgMjM4ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9p bmNsdWRlL2xpbnV4L3N3YXAuaCIKZXh0ZXJuIHNwaW5sb2NrX3Qgc3dhcGxvY2s7CgoKCgoKCmV4 dGVybiB2b2lkIHNobWVtX3VudXNlKHN3cF9lbnRyeV90IGVudHJ5LCBzdHJ1Y3QgcGFnZSAqcGFn ZSk7CiMgMzIgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW0uaCIgMgoK CmV4dGVybiB1bnNpZ25lZCBsb25nIG1heF9tYXBucl9SMDExMzlmZmM7CmV4dGVybiB1bnNpZ25l ZCBsb25nIG51bV9waHlzcGFnZXNfUjA5NDhjZGU5OwpleHRlcm4gdW5zaWduZWQgbG9uZyBudW1f bWFwcGVkcGFnZXM7CmV4dGVybiB2b2lkICogaGlnaF9tZW1vcnlfUjhhN2QxYzMxOwpleHRlcm4g aW50IHBhZ2VfY2x1c3RlcjsKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUv YXNtL3BndGFibGUuaCIgMQojIDE3ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2Fz bS9wZ3RhYmxlLmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9hc20vZml4 bWFwLmgiIDEKIyAxOCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9hc20vZml4bWFw LmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9hc20vYXBpY2RlZi5oIiAx CiMgMTM3ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2FzbS9hcGljZGVmLmgiCnN0 cnVjdCBsb2NhbF9hcGljIHsKCiAgICAgICAgc3RydWN0IHsgdW5zaWduZWQgaW50IF9fcmVzZXJ2 ZWRbNF07IH0gX19yZXNlcnZlZF8wMTsKCiAgICAgICAgc3RydWN0IHsgdW5zaWduZWQgaW50IF9f cmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8wMjsKCiAgICAgICAgc3RydWN0IHsKICAgICAgICAg ICAgICAgIHVuc2lnbmVkIGludCBfX3Jlc2VydmVkXzEgOiAyNCwKICAgICAgICAgICAgICAgICAg ICAgICAgcGh5c19hcGljX2lkIDogNCwKICAgICAgICAgICAgICAgICAgICAgICAgX19yZXNlcnZl ZF8yIDogNDsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX3Jlc2VydmVkWzNdOwogICAg ICAgIH0gaWQ7CgogICAgICAgIGNvbnN0CiAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAg IHVuc2lnbmVkIGludCB2ZXJzaW9uIDogOCwKICAgICAgICAgICAgICAgICAgICAgICAgX19yZXNl cnZlZF8xIDogOCwKICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2x2dCA6IDgsCiAgICAgICAg ICAgICAgICAgICAgICAgIF9fcmVzZXJ2ZWRfMiA6IDg7CiAgICAgICAgICAgICAgICB1bnNpZ25l ZCBpbnQgX19yZXNlcnZlZFszXTsKICAgICAgICB9IHZlcnNpb247CgogICAgICAgIHN0cnVjdCB7 IHVuc2lnbmVkIGludCBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMDM7CgogICAgICAgIHN0 cnVjdCB7IHVuc2lnbmVkIGludCBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMDQ7CgogICAg ICAgIHN0cnVjdCB7IHVuc2lnbmVkIGludCBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMDU7 CgogICAgICAgIHN0cnVjdCB7IHVuc2lnbmVkIGludCBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2 ZWRfMDY7CgogICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcHJp b3JpdHkgOiA4LAogICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc2VydmVkXzEgOiAyNDsKICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX3Jlc2VydmVkXzJbM107CiAgICAgICAgfSB0cHI7 CgogICAgICAgIGNvbnN0CiAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgIHVuc2lnbmVk IGludCBwcmlvcml0eSA6IDgsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzZXJ2ZWRfMSA6 IDI0OwogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRfMlszXTsKICAgICAg ICB9IGFwcjsKCiAgICAgICAgY29uc3QKICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAg dW5zaWduZWQgaW50IHByaW9yaXR5IDogOCwKICAgICAgICAgICAgICAgICAgICAgICAgX19yZXNl cnZlZF8xIDogMjQ7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZF8yWzNd OwogICAgICAgIH0gcHByOwoKICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgdW5zaWdu ZWQgaW50IGVvaTsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX3Jlc2VydmVkWzNdOwog ICAgICAgIH0gZW9pOwoKICAgICAgICBzdHJ1Y3QgeyB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZFs0 XTsgfSBfX3Jlc2VydmVkXzA3OwoKICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgdW5z aWduZWQgaW50IF9fcmVzZXJ2ZWRfMSA6IDI0LAogICAgICAgICAgICAgICAgICAgICAgICBsb2dp Y2FsX2Rlc3QgOiA4OwogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRfMlsz XTsKICAgICAgICB9IGxkcjsKCiAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgIHVuc2ln bmVkIGludCBfX3Jlc2VydmVkXzEgOiAyOCwKICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWwg OiA0OwogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRfMlszXTsKICAgICAg ICB9IGRmcjsKCiAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBz cHVyaW91c192ZWN0b3IgOiA4LAogICAgICAgICAgICAgICAgICAgICAgICBhcGljX2VuYWJsZWQg OiAxLAogICAgICAgICAgICAgICAgICAgICAgICBmb2N1c19jcHUgOiAxLAogICAgICAgICAgICAg ICAgICAgICAgICBfX3Jlc2VydmVkXzIgOiAyMjsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu dCBfX3Jlc2VydmVkXzNbM107CiAgICAgICAgfSBzdnI7CgogICAgICAgIHN0cnVjdCB7CiAgICAg ICAgICAgICAgICB1bnNpZ25lZCBpbnQgYml0ZmllbGQ7CiAgICAgICAgICAgICAgICB1bnNpZ25l ZCBpbnQgX19yZXNlcnZlZFszXTsKICAgICAgICB9IGlzciBbOF07CgogICAgICAgIHN0cnVjdCB7 CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYml0ZmllbGQ7CiAgICAgICAgICAgICAgICB1 bnNpZ25lZCBpbnQgX19yZXNlcnZlZFszXTsKICAgICAgICB9IHRtciBbOF07CgogICAgICAgIHN0 cnVjdCB7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYml0ZmllbGQ7CiAgICAgICAgICAg ICAgICB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZFszXTsKICAgICAgICB9IGlyciBbOF07CgogICAg ICAgIHVuaW9uIHsKICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGludCBzZW5kX2NzX2Vycm9yIDogMSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICByZWNlaXZlX2NzX2Vycm9yIDogMSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzZW5kX2FjY2VwdF9lcnJvciA6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcmVjZWl2ZV9hY2NlcHRfZXJyb3IgOiAxLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fcmVzZXJ2ZWRfMSA6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2VuZF9pbGxlZ2FsX3ZlY3RvciA6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cmVjZWl2ZV9pbGxlZ2FsX3ZlY3RvciA6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaWxsZWdhbF9yZWdpc3Rlcl9hZGRyZXNzIDogMSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX3Jlc2VydmVkXzIgOiAyNDsKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu ZWQgaW50IF9fcmVzZXJ2ZWRfM1szXTsKICAgICAgICAgICAgICAgIH0gZXJyb3JfYml0czsKICAg ICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu dCBlcnJvcnM7CiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX3Jlc2VydmVk XzNbM107CiAgICAgICAgICAgICAgICB9IGFsbF9lcnJvcnM7CiAgICAgICAgfSBlc3I7CgogICAg ICAgIHN0cnVjdCB7IHVuc2lnbmVkIGludCBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMDg7 CgogICAgICAgIHN0cnVjdCB7IHVuc2lnbmVkIGludCBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2 ZWRfMDk7CgogICAgICAgIHN0cnVjdCB7IHVuc2lnbmVkIGludCBfX3Jlc2VydmVkWzRdOyB9IF9f cmVzZXJ2ZWRfMTA7CgogICAgICAgIHN0cnVjdCB7IHVuc2lnbmVkIGludCBfX3Jlc2VydmVkWzRd OyB9IF9fcmVzZXJ2ZWRfMTE7CgogICAgICAgIHN0cnVjdCB7IHVuc2lnbmVkIGludCBfX3Jlc2Vy dmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMTI7CgogICAgICAgIHN0cnVjdCB7IHVuc2lnbmVkIGludCBf X3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMTM7CgogICAgICAgIHN0cnVjdCB7IHVuc2lnbmVk IGludCBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMTQ7CgogICAgICAgIHN0cnVjdCB7CiAg ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdmVjdG9yIDogOCwKICAgICAgICAgICAgICAgICAg ICAgICAgZGVsaXZlcnlfbW9kZSA6IDMsCiAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0 aW9uX21vZGUgOiAxLAogICAgICAgICAgICAgICAgICAgICAgICBkZWxpdmVyeV9zdGF0dXMgOiAx LAogICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc2VydmVkXzEgOiAxLAogICAgICAgICAgICAg ICAgICAgICAgICBsZXZlbCA6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXIgOiAx LAogICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc2VydmVkXzIgOiAyLAogICAgICAgICAgICAg ICAgICAgICAgICBzaG9ydGhhbmQgOiAyLAogICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc2Vy dmVkXzMgOiAxMjsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX3Jlc2VydmVkXzRbM107 CiAgICAgICAgfSBpY3IxOwoKICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgdW5pb24g ewogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZF8xIDogMjQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGh5c19kZXN0IDogNCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc2VydmVkXzIgOiA0OwogICAgICAgICAgICAgICAg ICAgICAgICB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZF8zIDogMjQsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbG9naWNhbF9kZXN0IDogODsKICAgICAgICAgICAgICAgIH0gZGVzdDsK ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX3Jlc2VydmVkXzRbM107CiAgICAgICAgfSBp Y3IyOwoKICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHZlY3Rv ciA6IDgsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzZXJ2ZWRfMSA6IDQsCiAgICAgICAg ICAgICAgICAgICAgICAgIGRlbGl2ZXJ5X3N0YXR1cyA6IDEsCiAgICAgICAgICAgICAgICAgICAg ICAgIF9fcmVzZXJ2ZWRfMiA6IDMsCiAgICAgICAgICAgICAgICAgICAgICAgIG1hc2sgOiAxLAog ICAgICAgICAgICAgICAgICAgICAgICB0aW1lcl9tb2RlIDogMSwKICAgICAgICAgICAgICAgICAg ICAgICAgX19yZXNlcnZlZF8zIDogMTQ7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19y ZXNlcnZlZF80WzNdOwogICAgICAgIH0gbHZ0X3RpbWVyOwoKICAgICAgICBzdHJ1Y3QgeyB1bnNp Z25lZCBpbnQgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzE1OwoKICAgICAgICBzdHJ1Y3Qg ewogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHZlY3RvciA6IDgsCiAgICAgICAgICAgICAg ICAgICAgICAgIGRlbGl2ZXJ5X21vZGUgOiAzLAogICAgICAgICAgICAgICAgICAgICAgICBfX3Jl c2VydmVkXzEgOiAxLAogICAgICAgICAgICAgICAgICAgICAgICBkZWxpdmVyeV9zdGF0dXMgOiAx LAogICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc2VydmVkXzIgOiAzLAogICAgICAgICAgICAg ICAgICAgICAgICBtYXNrIDogMSwKICAgICAgICAgICAgICAgICAgICAgICAgX19yZXNlcnZlZF8z IDogMTU7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZF80WzNdOwogICAg ICAgIH0gbHZ0X3BjOwoKICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgdW5zaWduZWQg aW50IHZlY3RvciA6IDgsCiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGl2ZXJ5X21vZGUgOiAz LAogICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc2VydmVkXzEgOiAxLAogICAgICAgICAgICAg ICAgICAgICAgICBkZWxpdmVyeV9zdGF0dXMgOiAxLAogICAgICAgICAgICAgICAgICAgICAgICBw b2xhcml0eSA6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZV9pcnIgOiAxLAogICAg ICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyIDogMSwKICAgICAgICAgICAgICAgICAgICAgICAg bWFzayA6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzZXJ2ZWRfMiA6IDE1OwogICAg ICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRfM1szXTsKICAgICAgICB9IGx2dF9s aW50MDsKCiAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB2ZWN0 b3IgOiA4LAogICAgICAgICAgICAgICAgICAgICAgICBkZWxpdmVyeV9tb2RlIDogMywKICAgICAg ICAgICAgICAgICAgICAgICAgX19yZXNlcnZlZF8xIDogMSwKICAgICAgICAgICAgICAgICAgICAg ICAgZGVsaXZlcnlfc3RhdHVzIDogMSwKICAgICAgICAgICAgICAgICAgICAgICAgcG9sYXJpdHkg OiAxLAogICAgICAgICAgICAgICAgICAgICAgICByZW1vdGVfaXJyIDogMSwKICAgICAgICAgICAg ICAgICAgICAgICAgdHJpZ2dlciA6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIG1hc2sgOiAx LAogICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc2VydmVkXzIgOiAxNTsKICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGludCBfX3Jlc2VydmVkXzNbM107CiAgICAgICAgfSBsdnRfbGludDE7Cgog ICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdmVjdG9yIDogOCwK ICAgICAgICAgICAgICAgICAgICAgICAgX19yZXNlcnZlZF8xIDogNCwKICAgICAgICAgICAgICAg ICAgICAgICAgZGVsaXZlcnlfc3RhdHVzIDogMSwKICAgICAgICAgICAgICAgICAgICAgICAgX19y ZXNlcnZlZF8yIDogMywKICAgICAgICAgICAgICAgICAgICAgICAgbWFzayA6IDEsCiAgICAgICAg ICAgICAgICAgICAgICAgIF9fcmVzZXJ2ZWRfMyA6IDE1OwogICAgICAgICAgICAgICAgdW5zaWdu ZWQgaW50IF9fcmVzZXJ2ZWRfNFszXTsKICAgICAgICB9IGx2dF9lcnJvcjsKCiAgICAgICAgc3Ry dWN0IHsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbml0aWFsX2NvdW50OwogICAgICAg ICAgICAgICAgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRfMlszXTsKICAgICAgICB9IHRpbWVyX2lj cjsKCiAgICAgICAgY29uc3QKICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgdW5zaWdu ZWQgaW50IGN1cnJfY291bnQ7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19yZXNlcnZl ZF8yWzNdOwogICAgICAgIH0gdGltZXJfY2NyOwoKICAgICAgICBzdHJ1Y3QgeyB1bnNpZ25lZCBp bnQgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzE2OwoKICAgICAgICBzdHJ1Y3QgeyB1bnNp Z25lZCBpbnQgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzE3OwoKICAgICAgICBzdHJ1Y3Qg eyB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzE4OwoKICAgICAgICBz dHJ1Y3QgeyB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzE5OwoKICAg ICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGRpdmlzb3IgOiA0LAog ICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc2VydmVkXzEgOiAyODsKICAgICAgICAgICAgICAg IHVuc2lnbmVkIGludCBfX3Jlc2VydmVkXzJbM107CiAgICAgICAgfSB0aW1lcl9kY3I7CgogICAg ICAgIHN0cnVjdCB7IHVuc2lnbmVkIGludCBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMjA7 Cgp9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIyAxOSAiL3Vzci9zcmMvbGludXgtMi40LjIw LTgvaW5jbHVkZS9hc20vZml4bWFwLmgiIDIKIyA1MCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgv aW5jbHVkZS9hc20vZml4bWFwLmgiCmVudW0gZml4ZWRfYWRkcmVzc2VzIHsKICAgICAgICBGSVhf SE9MRSwKICAgICAgICBGSVhfVlNZU0NBTEwsCiMgNjcgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04 L2luY2x1ZGUvYXNtL2ZpeG1hcC5oIgogICAgICAgIEZJWF9GMDBGLAojIDc2ICIvdXNyL3NyYy9s aW51eC0yLjQuMjAtOC9pbmNsdWRlL2FzbS9maXhtYXAuaCIKICAgICAgICBfX2VuZF9vZl9wZXJt YW5lbnRfZml4ZWRfYWRkcmVzc2VzLAoKCiAgICAgICAgRklYX0JUTUFQX0VORCA9IF9fZW5kX29m X3Blcm1hbmVudF9maXhlZF9hZGRyZXNzZXMsCiAgICAgICAgRklYX0JUTUFQX0JFR0lOID0gRklY X0JUTUFQX0VORCArIDE2IC0gMSwKICAgICAgICBfX2VuZF9vZl9maXhlZF9hZGRyZXNzZXMKfTsK CmV4dGVybiB2b2lkIF9fc2V0X2ZpeG1hcCAoZW51bSBmaXhlZF9hZGRyZXNzZXMgaWR4LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBwaHlzLCBw Z3Byb3RfdCBmbGFncyk7CiMgMTA3ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2Fz bS9maXhtYXAuaCIKZXh0ZXJuIHZvaWQgX190aGlzX2ZpeG1hcF9kb2VzX25vdF9leGlzdCh2b2lk KTsKCgoKCgoKc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGZpeF90b192aXJ0KGNvbnN0IHVu c2lnbmVkIGludCBpZHgpCnsKIyAxMjUgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUv YXNtL2ZpeG1hcC5oIgogICAgICAgIGlmIChpZHggPj0gX19lbmRfb2ZfZml4ZWRfYWRkcmVzc2Vz KQogICAgICAgICAgICAgICAgX190aGlzX2ZpeG1hcF9kb2VzX25vdF9leGlzdCgpOwoKICAgICAg ICByZXR1cm4gKCgweGZmZmZmMDAwVUwpIC0gKChpZHgpIDw8IDEyKSk7Cn0KCnN0YXRpYyBpbmxp bmUgdW5zaWduZWQgbG9uZyB2aXJ0X3RvX2ZpeChjb25zdCB1bnNpZ25lZCBsb25nIHZhZGRyKQp7 CiAgICAgICAgZG8geyBpZiAoX19idWlsdGluX2V4cGVjdCgoKHZhZGRyID49ICgweGZmZmZmMDAw VUwpIHx8IHZhZGRyIDwgKCgweGZmZmZmMDAwVUwpIC0gKF9fZW5kX29mX3Blcm1hbmVudF9maXhl ZF9hZGRyZXNzZXMgPDwgMTIpKSkhPTApLDApKSBfX2FzbV9fIF9fdm9sYXRpbGVfXyggInVkMlxu IiAiXHQud29yZCAlYzBcbiIgIlx0LmxvbmcgJWMxXG4iIDogOiAiaSIgKDEzMyksICJpIiAoIi91 c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvYXNtL2ZpeG1hcC5oIikpOyB9IHdoaWxlKDAp OwogICAgICAgIHJldHVybiAoKCgweGZmZmZmMDAwVUwpIC0gKCh2YWRkcikmKH4oKDFVTCA8PCAx MiktMSkpKSkgPj4gMTIpOwp9CiMgMTggIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUv YXNtL3BndGFibGUuaCIgMgoKCgoKCgpleHRlcm4gcGdkX3Qgc3dhcHBlcl9wZ19kaXJbMTAyNF07 CmV4dGVybiB2b2lkIHBhZ2luZ19pbml0KHZvaWQpOwojIDY4ICIvdXNyL3NyYy9saW51eC0yLjQu MjAtOC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgiCmV4dGVybiB1bnNpZ25lZCBsb25nIHBna2Vybl9t YXNrOwojIDEwNCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9hc20vcGd0YWJsZS5o IgpleHRlcm4gdW5zaWduZWQgbG9uZyBlbXB0eV96ZXJvX3BhZ2VfUjg0ZGFhYmFiWzEwMjRdOwoj IDEyNCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9hc20vcGd0YWJsZS5oIgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvYXNtL3BndGFibGUtMmxldmVsLmgiIDEK IyAzMiAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9hc20vcGd0YWJsZS0ybGV2ZWwu aCIKc3RhdGljIGlubGluZSBpbnQgcGdkX25vbmUocGdkX3QgcGdkKSB7IHJldHVybiAwOyB9CnN0 YXRpYyBpbmxpbmUgaW50IHBnZF9iYWQocGdkX3QgcGdkKSB7IHJldHVybiAwOyB9CnN0YXRpYyBp bmxpbmUgaW50IHBnZF9wcmVzZW50KHBnZF90IHBnZCkgeyByZXR1cm4gMTsgfQojIDU1ICIvdXNy L3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC5oIgpzdGF0aWMg aW5saW5lIHBtZF90ICogcG1kX29mZnNldChwZ2RfdCAqIGRpciwgdW5zaWduZWQgbG9uZyBhZGRy ZXNzKQp7CiAgICAgICAgcmV0dXJuIChwbWRfdCAqKSBkaXI7Cn0KIyAxMjUgIi91c3Ivc3JjL2xp bnV4LTIuNC4yMC04L2luY2x1ZGUvYXNtL3BndGFibGUuaCIgMgojIDI2NSAiL3Vzci9zcmMvbGlu dXgtMi40LjIwLTgvaW5jbHVkZS9hc20vcGd0YWJsZS5oIgpleHRlcm4gdW5zaWduZWQgbG9uZyBw ZzBbMTAyNF07CiMgMjgyICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2FzbS9wZ3Rh YmxlLmgiCnN0YXRpYyBpbmxpbmUgaW50IHB0ZV9yZWFkKHB0ZV90IHB0ZSkgeyByZXR1cm4gKHB0 ZSkucHRlX2xvdyAmIDB4MDA0OyB9CnN0YXRpYyBpbmxpbmUgaW50IHB0ZV9leGVjKHB0ZV90IHB0 ZSkgeyByZXR1cm4gKHB0ZSkucHRlX2xvdyAmIDB4MDA0OyB9CnN0YXRpYyBpbmxpbmUgaW50IHB0 ZV9kaXJ0eShwdGVfdCBwdGUpIHsgcmV0dXJuIChwdGUpLnB0ZV9sb3cgJiAweDA0MDsgfQpzdGF0 aWMgaW5saW5lIGludCBwdGVfeW91bmcocHRlX3QgcHRlKSB7IHJldHVybiAocHRlKS5wdGVfbG93 ICYgMHgwMjA7IH0Kc3RhdGljIGlubGluZSBpbnQgcHRlX3dyaXRlKHB0ZV90IHB0ZSkgeyByZXR1 cm4gKHB0ZSkucHRlX2xvdyAmIDB4MDAyOyB9CgpzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9yZHBy b3RlY3QocHRlX3QgcHRlKSB7IChwdGUpLnB0ZV9sb3cgJj0gfjB4MDA0OyByZXR1cm4gcHRlOyB9 CnN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX2V4cHJvdGVjdChwdGVfdCBwdGUpIHsgKHB0ZSkucHRl X2xvdyAmPSB+MHgwMDQ7IHJldHVybiBwdGU7IH0Kc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtj bGVhbihwdGVfdCBwdGUpIHsgKHB0ZSkucHRlX2xvdyAmPSB+MHgwNDA7IHJldHVybiBwdGU7IH0K c3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtvbGQocHRlX3QgcHRlKSB7IChwdGUpLnB0ZV9sb3cg Jj0gfjB4MDIwOyByZXR1cm4gcHRlOyB9CnN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX3dycHJvdGVj dChwdGVfdCBwdGUpIHsgKHB0ZSkucHRlX2xvdyAmPSB+MHgwMDI7IHJldHVybiBwdGU7IH0Kc3Rh dGljIGlubGluZSBwdGVfdCBwdGVfbWtyZWFkKHB0ZV90IHB0ZSkgeyAocHRlKS5wdGVfbG93IHw9 IDB4MDA0OyByZXR1cm4gcHRlOyB9CnN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rZXhlYyhwdGVf dCBwdGUpIHsgKHB0ZSkucHRlX2xvdyB8PSAweDAwNDsgcmV0dXJuIHB0ZTsgfQpzdGF0aWMgaW5s aW5lIHB0ZV90IHB0ZV9ta2RpcnR5KHB0ZV90IHB0ZSkgeyAocHRlKS5wdGVfbG93IHw9IDB4MDQw OyByZXR1cm4gcHRlOyB9CnN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21reW91bmcocHRlX3QgcHRl KSB7IChwdGUpLnB0ZV9sb3cgfD0gMHgwMjA7IHJldHVybiBwdGU7IH0Kc3RhdGljIGlubGluZSBw dGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUpIHsgKHB0ZSkucHRlX2xvdyB8PSAweDAwMjsgcmV0 dXJuIHB0ZTsgfQoKc3RhdGljIGlubGluZSBpbnQgcHRlcF90ZXN0X2FuZF9jbGVhcl9kaXJ0eShw dGVfdCAqcHRlcCkgeyByZXR1cm4gdGVzdF9hbmRfY2xlYXJfYml0KDYsIHB0ZXApOyB9CnN0YXRp YyBpbmxpbmUgaW50IHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcocHRlX3QgKnB0ZXApIHsgcmV0 dXJuIHRlc3RfYW5kX2NsZWFyX2JpdCg1LCBwdGVwKTsgfQpzdGF0aWMgaW5saW5lIGludCBwdGVw X3Rlc3RfeW91bmcocHRlX3QgKnB0ZXApIHsgcmV0dXJuIChfX2J1aWx0aW5fY29uc3RhbnRfcCg1 KSA/IGNvbnN0YW50X3Rlc3RfYml0KCg1KSwocHRlcCkpIDogdmFyaWFibGVfdGVzdF9iaXQoKDUp LChwdGVwKSkpOyB9CnN0YXRpYyBpbmxpbmUgdm9pZCBwdGVwX3NldF93cnByb3RlY3QocHRlX3Qg KnB0ZXApIHsgY2xlYXJfYml0KDEsIHB0ZXApOyB9CnN0YXRpYyBpbmxpbmUgdm9pZCBwdGVwX21r ZGlydHkocHRlX3QgKnB0ZXApIHsgc2V0X2JpdCg2LCBwdGVwKTsgfQojIDMxNSAiL3Vzci9zcmMv bGludXgtMi40LjIwLTgvaW5jbHVkZS9hc20vcGd0YWJsZS5oIgpzdGF0aWMgaW5saW5lIHB0ZV90 IHB0ZV9tb2RpZnkocHRlX3QgcHRlLCBwZ3Byb3RfdCBuZXdwcm90KQp7CiAgICAgICAgcHRlLnB0 ZV9sb3cgJj0gKCh+KCgxVUwgPDwgMTIpLTEpKSB8IDB4MDIwIHwgMHgwNDApOwogICAgICAgIHB0 ZS5wdGVfbG93IHw9ICgobmV3cHJvdCkucGdwcm90KTsKICAgICAgICByZXR1cm4gcHRlOwp9CiMg Mzc0ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgiCnR5cGVk ZWYgcHRlX3QgKnB0ZV9hZGRyX3Q7CiMgMzkwICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNs dWRlL2FzbS9wZ3RhYmxlLmgiCnN0cnVjdCBwYWdlOwppbnQgY2hhbmdlX3BhZ2VfYXR0cl9SN2Jh MTlmYTYoc3RydWN0IHBhZ2UgKiwgaW50LCBwZ3Byb3RfdCBwcm90KTsKIyA0MiAiL3Vzci9zcmMv bGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tbS5oIiAyCiMgNTkgIi91c3Ivc3JjL2xpbnV4 LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW0uaCIKc3RydWN0IHZtX2FyZWFfc3RydWN0IHsKICAg ICAgICBzdHJ1Y3QgbW1fc3RydWN0ICogdm1fbW07CiAgICAgICAgdW5zaWduZWQgbG9uZyB2bV9z dGFydDsKICAgICAgICB1bnNpZ25lZCBsb25nIHZtX2VuZDsKCgoKICAgICAgICBzdHJ1Y3Qgdm1f YXJlYV9zdHJ1Y3QgKnZtX25leHQ7CgogICAgICAgIHBncHJvdF90IHZtX3BhZ2VfcHJvdDsKICAg ICAgICB1bnNpZ25lZCBsb25nIHZtX2ZsYWdzOwoKICAgICAgICByYl9ub2RlX3Qgdm1fcmI7CgoK CgoKCiAgICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bV9uZXh0X3NoYXJlOwogICAgICAg IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtX3BwcmV2X3NoYXJlOwoKCiAgICAgICAgc3RydWN0 IHZtX29wZXJhdGlvbnNfc3RydWN0ICogdm1fb3BzOwoKCiAgICAgICAgdW5zaWduZWQgbG9uZyB2 bV9wZ29mZjsKCiAgICAgICAgc3RydWN0IGZpbGUgKiB2bV9maWxlOwogICAgICAgIHVuc2lnbmVk IGxvbmcgdm1fcmFlbmQ7CiAgICAgICAgdm9pZCAqIHZtX3ByaXZhdGVfZGF0YTsKfTsKIyAxMzEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbW0uaCIKZXh0ZXJuIGludCB2 bV9taW5fcmVhZGFoZWFkX1I0MWVmMzE0ZDsKZXh0ZXJuIGludCB2bV9tYXhfcmVhZGFoZWFkX1Jm OGM5YWEzYzsKCgoKCgpleHRlcm4gcGdwcm90X3QgcHJvdGVjdGlvbl9tYXBbMTZdOwoKCgoKCgoK c3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHsKICAgICAgICB2b2lkICgqb3Blbikoc3RydWN0 IHZtX2FyZWFfc3RydWN0ICogYXJlYSk7CiAgICAgICAgdm9pZCAoKmNsb3NlKShzdHJ1Y3Qgdm1f YXJlYV9zdHJ1Y3QgKiBhcmVhKTsKICAgICAgICBzdHJ1Y3QgcGFnZSAqICgqbm9wYWdlKShzdHJ1 Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiBhcmVhLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGludCB1bnVz ZWQpOwp9OwoKCnN0cnVjdCBwdGVfY2hhaW47CiMgMTcwICIvdXNyL3NyYy9saW51eC0yLjQuMjAt OC9pbmNsdWRlL2xpbnV4L21tLmgiCnR5cGVkZWYgc3RydWN0IHBhZ2UgewogICAgICAgIHN0cnVj dCBsaXN0X2hlYWQgbGlzdDsKICAgICAgICBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsK CgoKCiAgICAgICAgdW5zaWduZWQgbG9uZyBpbmRleDsKICAgICAgICBzdHJ1Y3QgcGFnZSAqbmV4 dF9oYXNoOwoKICAgICAgICBhdG9taWNfdCBjb3VudDsKICAgICAgICB1bnNpZ25lZCBsb25nIGZs YWdzOwoKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGxydTsKCiAgICAgICAgdW5pb24gewogICAg ICAgICAgICAgICAgc3RydWN0IHB0ZV9jaGFpbiAqY2hhaW47CgogICAgICAgICAgICAgICAgcHRl X2FkZHJfdCBkaXJlY3Q7CiAgICAgICAgfSBwdGU7CiAgICAgICAgdW5zaWduZWQgY2hhciBhZ2U7 CiAgICAgICAgc3RydWN0IHBhZ2UgKipwcHJldl9oYXNoOwogICAgICAgIHN0cnVjdCBidWZmZXJf aGVhZCAqIGJ1ZmZlcnM7CiMgMjA4ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xp bnV4L21tLmgiCn0gbWVtX21hcF90OwojIDM1NSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5j bHVkZS9saW51eC9tbS5oIgpzdGF0aWMgaW5saW5lIHZvaWQgcHRlX2NoYWluX2xvY2soc3RydWN0 IHBhZ2UgKnBhZ2UpCnsKIyAzNzAgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGlu dXgvbW0uaCIKfQoKc3RhdGljIGlubGluZSB2b2lkIHB0ZV9jaGFpbl91bmxvY2soc3RydWN0IHBh Z2UgKnBhZ2UpCnsKCgoKfQojIDM4NiAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9s aW51eC9tbS5oIgpzdHJ1Y3Qgem9uZV9zdHJ1Y3Q7CmV4dGVybiBzdHJ1Y3Qgem9uZV9zdHJ1Y3Qg KnpvbmVfdGFibGVfUjRiNzZhNmVkW107CgpzdGF0aWMgaW5saW5lIHpvbmVfdCAqcGFnZV96b25l KHN0cnVjdCBwYWdlICpwYWdlKQp7CiAgICAgICAgcmV0dXJuIHpvbmVfdGFibGVfUjRiNzZhNmVk W3BhZ2UtPmZsYWdzID4+ICgzMiAtIDgpXTsKfQoKc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdl X3pvbmUoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgem9uZV9udW0pCnsKICAgICAg ICBwYWdlLT5mbGFncyAmPSB+KH4wVUwgPDwgKDMyIC0gOCkpOwogICAgICAgIHBhZ2UtPmZsYWdz IHw9IHpvbmVfbnVtIDw8ICgzMiAtIDgpOwp9CiMgNDMzICIvdXNyL3NyYy9saW51eC0yLjQuMjAt OC9pbmNsdWRlL2xpbnV4L21tLmgiCmV4dGVybiB2b2lkIHNldF9wYWdlX2RpcnR5X1JiZGY5MGY0 YihzdHJ1Y3QgcGFnZSAqKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CiMgNDk5ICIvdXNy L3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L21tLmgiCnN0YXRpYyBpbmxpbmUgaW50 IHBhZ2VfbWFwcGVkKHN0cnVjdCBwYWdlICpwYWdlKQp7CiAgICAgICAgcmV0dXJuIHBhZ2UtPnB0 ZS5kaXJlY3QgIT0gMDsKfQojIDUxMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9s aW51eC9tbS5oIgpleHRlcm4gbWVtX21hcF90ICogbWVtX21hcF9SNDExZmUyZjA7CgoKCgoKCgpl eHRlcm4gc3RydWN0IHBhZ2UgKiBfYWxsb2NfcGFnZXNfUmM1NzgzMmIzKHVuc2lnbmVkIGludCBn ZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7 CmV4dGVybiBzdHJ1Y3QgcGFnZSAqIF9fYWxsb2NfcGFnZXNfUmNkMDUwY2NlKHVuc2lnbmVkIGlu dCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLCB6b25lbGlzdF90ICp6b25lbGlzdCkgX19h dHRyaWJ1dGVfXygocmVncGFybSgzKSkpOwpleHRlcm4gc3RydWN0IHBhZ2UgKiBhbGxvY19wYWdl c19ub2RlX1I1YjA4Y2RiNShpbnQgbmlkLCB1bnNpZ25lZCBpbnQgZ2ZwX21hc2ssIHVuc2lnbmVk IGludCBvcmRlcik7CgpzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICogYWxsb2NfcGFnZXModW5z aWduZWQgaW50IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpCnsKCgoKICAgICAgICBpZiAo b3JkZXIgPj0gMTApCiAgICAgICAgICAgICAgICByZXR1cm4gKCh2b2lkICopMCk7CiAgICAgICAg cmV0dXJuIF9hbGxvY19wYWdlc19SYzU3ODMyYjMoZ2ZwX21hc2ssIG9yZGVyKTsKfQoKCgpleHRl cm4gdW5zaWduZWQgbG9uZyBfX2dldF9mcmVlX3BhZ2VzX1I0Nzg0ZTQyNCh1bnNpZ25lZCBpbnQg Z2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcikgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkp OwpleHRlcm4gdW5zaWduZWQgbG9uZyBnZXRfemVyb2VkX3BhZ2VfUjBjMjE4OGM3KHVuc2lnbmVk IGludCBnZnBfbWFzaykgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkpOwojIDU1MiAiL3Vzci9z cmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9tbS5oIgpleHRlcm4gdm9pZCBfX2ZyZWVf cGFnZXNfUjhiNWJhYzgzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpIF9f YXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKZXh0ZXJuIHZvaWQgZnJlZV9wYWdlc19SOTk0MWNj YjgodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgb3JkZXIpIF9fYXR0cmlidXRlX18o KHJlZ3Bhcm0oMykpKTsKCgoKCmV4dGVybiB2b2lkIGZpeHVwX2ZyZWVzcGFjZShzdHJ1Y3Qgem9u ZV9zdHJ1Y3QgKiwgaW50KSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CmV4dGVybiB2b2lk IHNob3dfZnJlZV9hcmVhcyh2b2lkKTsKZXh0ZXJuIHZvaWQgc2hvd19mcmVlX2FyZWFzX25vZGUo cGdfZGF0YV90ICpwZ2RhdCk7CgpleHRlcm4gdm9pZCBjbGVhcl9wYWdlX3RhYmxlcyhzdHJ1Y3Qg bW1fc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsIGludCk7CgpleHRlcm4gaW50IGZhaWxfd3JpdGVw YWdlX1JlOTI5NDMyMChzdHJ1Y3QgcGFnZSAqKTsKc3RydWN0IHBhZ2UgKiBzaG1lbV9ub3BhZ2Uo c3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGludCB1 bnVzZWQpOwpzdHJ1Y3QgZmlsZSAqc2htZW1fZmlsZV9zZXR1cF9SYWI2YzI4ZjgoY2hhciAqIG5h bWUsIGxvZmZfdCBzaXplKTsKZXh0ZXJuIHZvaWQgc2htZW1fbG9jayhzdHJ1Y3QgZmlsZSAqIGZp bGUsIGludCBsb2NrKTsKZXh0ZXJuIGludCBzaG1lbV96ZXJvX3NldHVwKHN0cnVjdCB2bV9hcmVh X3N0cnVjdCAqKTsKCmV4dGVybiB2b2lkIHphcF9wYWdlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0 cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CmV4 dGVybiBpbnQgY29weV9wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdCwgc3RydWN0IG1t X3N0cnVjdCAqc3JjLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CmV4dGVybiBpbnQgcmVt YXBfcGFnZV9yYW5nZV9SNDE1MTg4ZDEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2ln bmVkIGxvbmcgZnJvbSwgdW5zaWduZWQgbG9uZyB0bywgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3By b3RfdCBwcm90KTsKZXh0ZXJuIGludCB6ZXJvbWFwX3BhZ2VfcmFuZ2Uoc3RydWN0IHZtX2FyZWFf c3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgZnJvbSwgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3By b3RfdCBwcm90KTsKCmV4dGVybiBpbnQgdm10cnVuY2F0ZV9SYjY2MTNiNTMoc3RydWN0IGlub2Rl ICogaW5vZGUsIGxvZmZfdCBvZmZzZXQpOwpleHRlcm4gcG1kX3QgKl9fcG1kX2FsbG9jKHN0cnVj dCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpIF9fYXR0 cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKZXh0ZXJuIHB0ZV90ICpwdGVfYWxsb2Nfa2VybmVsKHN0 cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpIF9f YXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKZXh0ZXJuIHB0ZV90ICpwdGVfYWxsb2NfbWFwKHN0 cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpIF9f YXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKZXh0ZXJuIGludCBoYW5kbGVfbW1fZmF1bHQoc3Ry dWN0IG1tX3N0cnVjdCAqbW0sc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxv bmcgYWRkcmVzcywgaW50IHdyaXRlX2FjY2Vzcyk7CmV4dGVybiBpbnQgbWFrZV9wYWdlc19wcmVz ZW50KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQpOwpleHRlcm4gaW50IGFj Y2Vzc19wcm9jZXNzX3ZtKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFk ZHIsIHZvaWQgKmJ1ZiwgaW50IGxlbiwgaW50IHdyaXRlKTsKCmV4dGVybiBzdHJ1Y3QgcGFnZSAq IGZvbGxvd19wYWdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3Ms IGludCB3cml0ZSk7CmludCBnZXRfdXNlcl9wYWdlc19SYzA5NWExMzIoc3RydWN0IHRhc2tfc3Ry dWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAogICAg ICAgICAgICAgICAgaW50IGxlbiwgaW50IHdyaXRlLCBpbnQgZm9yY2UsIHN0cnVjdCBwYWdlICoq cGFnZXMsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXMpOwoKCgoKCgpzdGF0aWMgaW5saW5l IHBtZF90ICpwbWRfYWxsb2Moc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QsIHVuc2ln bmVkIGxvbmcgYWRkcmVzcykKewogICAgICAgIGlmIChwZ2Rfbm9uZSgqcGdkKSkKICAgICAgICAg ICAgICAgIHJldHVybiBfX3BtZF9hbGxvYyhtbSwgcGdkLCBhZGRyZXNzKTsKICAgICAgICByZXR1 cm4gcG1kX29mZnNldChwZ2QsIGFkZHJlc3MpOwp9CgpleHRlcm4gaW50IHBndF9jYWNoZV93YXRl clsyXTsKZXh0ZXJuIGludCBjaGVja19wZ3RfY2FjaGUodm9pZCk7CgpleHRlcm4gdm9pZCBmcmVl X2FyZWFfaW5pdCh1bnNpZ25lZCBsb25nICogem9uZXNfc2l6ZSk7CmV4dGVybiB2b2lkIGZyZWVf YXJlYV9pbml0X25vZGUoaW50IG5pZCwgcGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHBhZ2UgKnBt YXAsCiAgICAgICAgdW5zaWduZWQgbG9uZyAqIHpvbmVzX3NpemUsIHVuc2lnbmVkIGxvbmcgem9u ZV9zdGFydF9wYWRkciwKICAgICAgICB1bnNpZ25lZCBsb25nICp6aG9sZXNfc2l6ZSk7CmV4dGVy biB2b2lkIG1lbV9pbml0KHZvaWQpOwpleHRlcm4gdm9pZCBzaG93X21lbV9SODgxNzFkZGEodm9p ZCk7CmV4dGVybiB2b2lkIHNpX21lbWluZm9fUmIzYTMwN2M2KHN0cnVjdCBzeXNpbmZvICogdmFs KTsKZXh0ZXJuIHZvaWQgc3dhcGluX3JlYWRhaGVhZChzd3BfZW50cnlfdCk7CgpleHRlcm4gc3Ry dWN0IGFkZHJlc3Nfc3BhY2Ugc3dhcHBlcl9zcGFjZTsKCgpzdGF0aWMgaW5saW5lIGludCBpc19w YWdlX2NhY2hlX2ZyZWVhYmxlKHN0cnVjdCBwYWdlICogcGFnZSkKewogICAgICAgIHJldHVybiAo KCYocGFnZSktPmNvdW50KS0+Y291bnRlcikgLSAhIXBhZ2UtPmJ1ZmZlcnMgPT0gMTsKfQoKZXh0 ZXJuIGludCBjYW5fc2hhcmVfc3dhcF9wYWdlKHN0cnVjdCBwYWdlICopOwpleHRlcm4gaW50IHJl bW92ZV9leGNsdXNpdmVfc3dhcF9wYWdlKHN0cnVjdCBwYWdlICopOwoKCmV4dGVybiB2b2lkIHZt X3B0ZXBfc2V0X3dycHJvdGVjdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcHRlX3QgKnB0ZXApIF9f YXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKZXh0ZXJuIHZvaWQgdm1fc2V0X3B0ZShzdHJ1Y3Qg dm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgcHRl X3QgcHRlKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CmV4dGVybiBwdGVfdCB2bV9wdGVw X2dldF9hbmRfY2xlYXIoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcg YWRkciwgcHRlX3QgKnB0ZXApIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKZXh0ZXJuIHZv aWQgdm1fcHRlX2NsZWFyKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25n IGFkZHJlc3MsIHB0ZV90ICpwdGVwKTsKZXh0ZXJuIHZvaWQgX19mcmVlX3B0ZShwdGVfdCBwdGUp IF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKCgoKZXh0ZXJuIHZvaWQgbG9ja192bWFfbWFw cGluZ3Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICopOwpleHRlcm4gdm9pZCB1bmxvY2tfdm1hX21h cHBpbmdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTsKZXh0ZXJuIHZvaWQgaW5zZXJ0X3ZtX3N0 cnVjdChzdHJ1Y3QgbW1fc3RydWN0ICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTsKZXh0ZXJu IHZvaWQgX19pbnNlcnRfdm1fc3RydWN0KHN0cnVjdCBtbV9zdHJ1Y3QgKiwgc3RydWN0IHZtX2Fy ZWFfc3RydWN0ICopOwpleHRlcm4gdm9pZCBidWlsZF9tbWFwX3JiKHN0cnVjdCBtbV9zdHJ1Y3Qg Kik7CmV4dGVybiB2b2lkIGV4aXRfbW1hcChzdHJ1Y3QgbW1fc3RydWN0ICopOwoKZXh0ZXJuIHVu c2lnbmVkIGxvbmcgZ2V0X3VubWFwcGVkX2FyZWFfUjUxNDdlNDIzKHN0cnVjdCBmaWxlICosIHVu c2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcp OwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZG9fbW1hcF9wZ29mZl9SNDM3YzExNWYoc3RydWN0IGZp bGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkciwKICAgICAgICB1bnNpZ25lZCBsb25nIGxlbiwg dW5zaWduZWQgbG9uZyBwcm90LAogICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZywgdW5zaWduZWQg bG9uZyBwZ29mZik7CgpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZG9fbW1hcChzdHJ1Y3Qg ZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLAogICAgICAgIHVuc2lnbmVkIGxvbmcgbGVu LCB1bnNpZ25lZCBsb25nIHByb3QsCiAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnLCB1bnNpZ25l ZCBsb25nIG9mZnNldCkKewogICAgICAgIHVuc2lnbmVkIGxvbmcgcmV0ID0gLTIyOwogICAgICAg IGlmICgob2Zmc2V0ICsgKCgobGVuKSsoMVVMIDw8IDEyKS0xKSYofigoMVVMIDw8IDEyKS0xKSkp KSA8IG9mZnNldCkKICAgICAgICAgICAgICAgIGdvdG8gb3V0OwogICAgICAgIGlmICghKG9mZnNl dCAmIH4ofigoMVVMIDw8IDEyKS0xKSkpKQogICAgICAgICAgICAgICAgcmV0ID0gZG9fbW1hcF9w Z29mZl9SNDM3YzExNWYoZmlsZSwgYWRkciwgbGVuLCBwcm90LCBmbGFnLCBvZmZzZXQgPj4gMTIp OwpvdXQ6CiAgICAgICAgcmV0dXJuIHJldDsKfQoKZXh0ZXJuIGludCBkb19tdW5tYXBfUjgxYTI1 ZWMzKHN0cnVjdCBtbV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgc2l6ZV90KTsKCmV4dGVybiB1 bnNpZ25lZCBsb25nIGRvX2Jya19SOWVlY2RlMTYodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9u Zyk7CgpzdGF0aWMgaW5saW5lIHZvaWQgX192bWFfdW5saW5rKHN0cnVjdCBtbV9zdHJ1Y3QgKiBt bSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiBw cmV2KQp7CiAgICAgICAgcHJldi0+dm1fbmV4dCA9IHZtYS0+dm1fbmV4dDsKICAgICAgICByYl9l cmFzZV9SZGEyMjZhODAoJnZtYS0+dm1fcmIsICZtbS0+bW1fcmIpOwogICAgICAgIGlmIChtbS0+ bW1hcF9jYWNoZSA9PSB2bWEpCiAgICAgICAgICAgICAgICBtbS0+bW1hcF9jYWNoZSA9IHByZXY7 Cn0KCnN0YXRpYyBpbmxpbmUgaW50IGNhbl92bWFfbWVyZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0 ICogdm1hLCB1bnNpZ25lZCBsb25nIHZtX2ZsYWdzKQp7CiAgICAgICAgaWYgKCF2bWEtPnZtX2Zp bGUgJiYgdm1hLT52bV9mbGFncyA9PSB2bV9mbGFncykKICAgICAgICAgICAgICAgIHJldHVybiAx OwogICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHJldHVybiAwOwp9CgpzdHJ1Y3Qgem9uZV90 OwoKZXh0ZXJuIHZvaWQgcmVtb3ZlX2lub2RlX3BhZ2Uoc3RydWN0IHBhZ2UgKik7CmV4dGVybiB1 bnNpZ25lZCBsb25nIHBhZ2VfdW51c2Uoc3RydWN0IHBhZ2UgKik7CmV4dGVybiB2b2lkIHRydW5j YXRlX2lub2RlX3BhZ2VzX1JlYWExNzE5ZChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqLCBsb2ZmX3Qp OwoKCmV4dGVybiBpbnQgZmlsZW1hcF9zeW5jX1JjYzg2ODQ0NyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1 Y3QgKiwgdW5zaWduZWQgbG9uZywgc2l6ZV90LCB1bnNpZ25lZCBpbnQpOwpleHRlcm4gc3RydWN0 IHBhZ2UgKmZpbGVtYXBfbm9wYWdlX1I1M2VmOTU5NihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwg dW5zaWduZWQgbG9uZywgaW50KTsKIyA3MTYgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1 ZGUvbGludXgvbW0uaCIKc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcGZfZ2ZwX21hc2sodW5z aWduZWQgaW50IGdmcF9tYXNrKQp7CgogICAgICAgIGlmIChnZXRfY3VycmVudCgpLT5mbGFncyAm IDB4MDAwMDQwMDApCiAgICAgICAgICAgICAgICBnZnBfbWFzayAmPSB+KDB4NDAgfCAweDgwIHwg MHgxMDApOwoKICAgICAgICByZXR1cm4gZ2ZwX21hc2s7Cn0KCgoKc3RhdGljIGlubGluZSBpbnQg ZXhwYW5kX3N0YWNrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYSwgdW5zaWduZWQgbG9uZyBh ZGRyZXNzKQp7CiAgICAgICAgdW5zaWduZWQgbG9uZyBncm93OwoKCgoKCgogICAgICAgIGFkZHJl c3MgJj0gKH4oKDFVTCA8PCAxMiktMSkpOwogICAgICAgICh2b2lkKSgmdm1hLT52bV9tbS0+cGFn ZV90YWJsZV9sb2NrKTsKICAgICAgICBncm93ID0gKHZtYS0+dm1fc3RhcnQgLSBhZGRyZXNzKSA+ PiAxMjsKICAgICAgICBpZiAodm1hLT52bV9lbmQgLSBhZGRyZXNzID4gZ2V0X2N1cnJlbnQoKS0+ cmxpbVszXS5ybGltX2N1ciB8fAogICAgICAgICAgICAoKHZtYS0+dm1fbW0tPnRvdGFsX3ZtICsg Z3JvdykgPDwgMTIpID4gZ2V0X2N1cnJlbnQoKS0+cmxpbVs5XS5ybGltX2N1cikgewogICAgICAg ICAgICAgICAgZG8geyB9IHdoaWxlKDApOwogICAgICAgICAgICAgICAgcmV0dXJuIC0xMjsKICAg ICAgICB9CiAgICAgICAgdm1hLT52bV9zdGFydCA9IGFkZHJlc3M7CiAgICAgICAgdm1hLT52bV9w Z29mZiAtPSBncm93OwogICAgICAgIHZtYS0+dm1fbW0tPnRvdGFsX3ZtICs9IGdyb3c7CiAgICAg ICAgaWYgKHZtYS0+dm1fZmxhZ3MgJiAweDAwMDAyMDAwKQogICAgICAgICAgICAgICAgdm1hLT52 bV9tbS0+bG9ja2VkX3ZtICs9IGdyb3c7CiAgICAgICAgZG8geyB9IHdoaWxlKDApOwogICAgICAg IHJldHVybiAwOwp9CgoKZXh0ZXJuIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIGZpbmRfdm1hX1I3 OTljZDRiNShzdHJ1Y3QgbW1fc3RydWN0ICogbW0sIHVuc2lnbmVkIGxvbmcgYWRkcik7CmV4dGVy biBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiBmaW5kX3ZtYV9wcmV2KHN0cnVjdCBtbV9zdHJ1Y3Qg KiBtbSwgdW5zaWduZWQgbG9uZyBhZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKipwcHJldik7CgoKCnN0YXRpYyBp bmxpbmUgc3RydWN0IHZtX2FyZWFfc3RydWN0ICogZmluZF92bWFfaW50ZXJzZWN0aW9uKHN0cnVj dCBtbV9zdHJ1Y3QgKiBtbSwgdW5zaWduZWQgbG9uZyBzdGFydF9hZGRyLCB1bnNpZ25lZCBsb25n IGVuZF9hZGRyKQp7CiAgICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1hID0gZmluZF92 bWFfUjc5OWNkNGI1KG1tLHN0YXJ0X2FkZHIpOwoKICAgICAgICBpZiAodm1hICYmIGVuZF9hZGRy IDw9IHZtYS0+dm1fc3RhcnQpCiAgICAgICAgICAgICAgICB2bWEgPSAoKHZvaWQgKikwKTsKICAg ICAgICByZXR1cm4gdm1hOwp9CgpleHRlcm4gc3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX2V4 dGVuZF92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcik7CgpleHRl cm4gc3RydWN0IHBhZ2UgKiB2bWFsbG9jX3RvX3BhZ2VfUjRmYWI1MmNkKHZvaWQgKmFkZHIpOwoj IDE1ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3NsYWIuaCIgMgojIDQ5 ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3NsYWIuaCIKZXh0ZXJuIHZv aWQga21lbV9jYWNoZV9pbml0KHZvaWQpOwpleHRlcm4gdm9pZCBrbWVtX2NhY2hlX3NpemVzX2lu aXQodm9pZCk7CgpleHRlcm4ga21lbV9jYWNoZV90ICprbWVtX2ZpbmRfZ2VuZXJhbF9jYWNoZXBf UjUyYmI2ODkxKHNpemVfdCwgaW50IGdmcGZsYWdzKTsKZXh0ZXJuIGttZW1fY2FjaGVfdCAqa21l bV9jYWNoZV9jcmVhdGVfUmQxYzBiNGU2KGNvbnN0IGNoYXIgKiwgc2l6ZV90LCBzaXplX3QsIHVu c2lnbmVkIGxvbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQg KCopKHZvaWQgKiwga21lbV9jYWNoZV90ICosIHVuc2lnbmVkIGxvbmcpLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqKSh2b2lkICosIGttZW1fY2FjaGVfdCAq LCB1bnNpZ25lZCBsb25nKSk7CmV4dGVybiBpbnQga21lbV9jYWNoZV9kZXN0cm95X1JkZjgzYzY5 MihrbWVtX2NhY2hlX3QgKik7CmV4dGVybiBpbnQga21lbV9jYWNoZV9zaHJpbmtfUjEyZjdjZjA0 KGttZW1fY2FjaGVfdCAqKTsKZXh0ZXJuIHZvaWQgKmttZW1fY2FjaGVfYWxsb2NfUjc1ODEwOTU2 KGttZW1fY2FjaGVfdCAqLCBpbnQpOwpleHRlcm4gdm9pZCBrbWVtX2NhY2hlX2ZyZWVfUjg5MWYy Njg2KGttZW1fY2FjaGVfdCAqLCB2b2lkICopOwpleHRlcm4gdW5zaWduZWQgaW50IGttZW1fY2Fj aGVfc2l6ZV9SMTZhM2M3NDkoa21lbV9jYWNoZV90ICopOwoKZXh0ZXJuIHZvaWQgKmttYWxsb2Nf UjkzZDRjZmU2KHNpemVfdCwgaW50KTsKZXh0ZXJuIHZvaWQga2ZyZWVfUjAzN2EwY2JhKGNvbnN0 IHZvaWQgKik7CgpleHRlcm4gaW50IGttZW1fY2FjaGVfcmVhcChpbnQpIF9fYXR0cmlidXRlX18o KHJlZ3Bhcm0oMykpKTsKCgpleHRlcm4ga21lbV9jYWNoZV90ICp2bV9hcmVhX2NhY2hlcDsKZXh0 ZXJuIGttZW1fY2FjaGVfdCAqbW1fY2FjaGVwOwpleHRlcm4ga21lbV9jYWNoZV90ICpuYW1lc19j YWNoZXBfUmQyNTQ2OWI0OwpleHRlcm4ga21lbV9jYWNoZV90ICpmaWxlc19jYWNoZXA7CmV4dGVy biBrbWVtX2NhY2hlX3QgKmZpbHBfY2FjaGVwOwpleHRlcm4ga21lbV9jYWNoZV90ICpkcXVvdF9j YWNoZXA7CmV4dGVybiBrbWVtX2NhY2hlX3QgKmJoX2NhY2hlcF9SZGNjMGJiMzc7CmV4dGVybiBr bWVtX2NhY2hlX3QgKmZzX2NhY2hlcDsKZXh0ZXJuIGttZW1fY2FjaGVfdCAqc2lnbmFsX2NhY2hl cDsKZXh0ZXJuIGttZW1fY2FjaGVfdCAqc2lnaGFuZF9jYWNoZXA7CiMgMTI0ICJoL3NrZHJ2MXN0 LmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2ludGVycnVw dC5oIiAxCiMgMTUgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvaW50ZXJy dXB0LmgiCnN0cnVjdCBpcnFhY3Rpb24gewogICAgICAgIHZvaWQgKCpoYW5kbGVyKShpbnQsIHZv aWQgKiwgc3RydWN0IHB0X3JlZ3MgKik7CiAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKICAg ICAgICB1bnNpZ25lZCBsb25nIG1hc2s7CiAgICAgICAgY29uc3QgY2hhciAqbmFtZTsKICAgICAg ICB2b2lkICpkZXZfaWQ7CiAgICAgICAgc3RydWN0IGlycWFjdGlvbiAqbmV4dDsKfTsKCgoKCgpl bnVtIHsKICAgICAgICBUSU1FUl9CSCA9IDAsCiAgICAgICAgVFFVRVVFX0JILAogICAgICAgIERJ R0lfQkgsCiAgICAgICAgU0VSSUFMX0JILAogICAgICAgIFJJU0NPTThfQkgsCiAgICAgICAgU1BF Q0lBTElYX0JILAogICAgICAgIEFVUk9SQV9CSCwKICAgICAgICBFU1BfQkgsCiAgICAgICAgU0NT SV9CSCwKICAgICAgICBJTU1FRElBVEVfQkgsCiAgICAgICAgQ1lDTEFERVNfQkgsCiAgICAgICAg Q00yMDZfQkgsCiAgICAgICAgSlNfQkgsCiAgICAgICAgTUFDU0VSSUFMX0JILAogICAgICAgIElT SUNPTV9CSAp9OwoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2FzbS9oYXJk aXJxLmgiIDEKCgoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgv aXJxLmgiIDEKIyAxOSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9pcnEu aCIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2FzbS9pcnEuaCIgMQojIDMy ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2FzbS9pcnEuaCIKc3RhdGljIF9faW5s aW5lX18gaW50IGlycV9jYW5ub25pY2FsaXplKGludCBpcnEpCnsKICAgICAgICByZXR1cm4gKChp cnEgPT0gMikgPyA5IDogaXJxKTsKfQoKZXh0ZXJuIHZvaWQgZGlzYWJsZV9pcnFfUjNjZTRjYTZm KHVuc2lnbmVkIGludCk7CmV4dGVybiB2b2lkIGRpc2FibGVfaXJxX25vc3luY19SMjdiYmYyMjEo dW5zaWduZWQgaW50KTsKZXh0ZXJuIHZvaWQgZW5hYmxlX2lycV9SZmNlYzA5ODcodW5zaWduZWQg aW50KTsKZXh0ZXJuIHZvaWQgcmVsZWFzZV94ODZfaXJxcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7 CiMgMjAgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvaXJxLmgiIDIKIyAz OSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9pcnEuaCIKc3RydWN0IGh3 X2ludGVycnVwdF90eXBlIHsKICAgICAgICBjb25zdCBjaGFyICogdHlwZW5hbWU7CiAgICAgICAg dW5zaWduZWQgaW50ICgqc3RhcnR1cCkodW5zaWduZWQgaW50IGlycSk7CiAgICAgICAgdm9pZCAo KnNodXRkb3duKSh1bnNpZ25lZCBpbnQgaXJxKTsKICAgICAgICB2b2lkICgqZW5hYmxlKSh1bnNp Z25lZCBpbnQgaXJxKTsKICAgICAgICB2b2lkICgqZGlzYWJsZSkodW5zaWduZWQgaW50IGlycSk7 CiAgICAgICAgdm9pZCAoKmFjaykodW5zaWduZWQgaW50IGlycSk7CiAgICAgICAgdm9pZCAoKmVu ZCkodW5zaWduZWQgaW50IGlycSk7CiAgICAgICAgdm9pZCAoKnNldF9hZmZpbml0eSkodW5zaWdu ZWQgaW50IGlycSwgdW5zaWduZWQgbG9uZyBtYXNrKTsKfTsKCnR5cGVkZWYgc3RydWN0IGh3X2lu dGVycnVwdF90eXBlIGh3X2lycV9jb250cm9sbGVyOwojIDU5ICIvdXNyL3NyYy9saW51eC0yLjQu MjAtOC9pbmNsdWRlL2xpbnV4L2lycS5oIgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgdW5zaWdu ZWQgaW50IHN0YXR1czsKICAgICAgICBod19pcnFfY29udHJvbGxlciAqaGFuZGxlcjsKICAgICAg ICBzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb247CiAgICAgICAgdW5zaWduZWQgaW50IGRlcHRoOwog ICAgICAgIHNwaW5sb2NrX3QgbG9jazsKfSBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXygoMSA8 PCAoKDUpKSkpKSkgaXJxX2Rlc2NfdDsKCmV4dGVybiBpcnFfZGVzY190IGlycV9kZXNjIFsxNl07 CgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvYXNtL2h3X2lycS5oIiAxCiMg MTYgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvYXNtL2h3X2lycS5oIgojIDEgIi91 c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvc21wX2xvY2suaCIgMQojIDE3ICIv dXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2FzbS9od19pcnEuaCIgMgojIDEgIi91c3Iv c3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvcHJvZmlsZS5oIiAxCiMgMTIgIi91c3Iv c3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvcHJvZmlsZS5oIgppbnQgcHJvZmlsZV9z ZXR1cChjaGFyICogc3RyKTsKCgp2b2lkIHByb2ZpbGVfaW5pdCh2b2lkKTsKCmV4dGVybiB1bnNp Z25lZCBpbnQgKiBwcm9mX2J1ZmZlcjsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcHJvZl9sZW47CmV4 dGVybiB1bnNpZ25lZCBsb25nIHByb2Zfc2hpZnQ7CgplbnVtIHByb2ZpbGVfdHlwZSB7CiAgICAg ICAgRVhJVF9UQVNLLAogICAgICAgIEVYSVRfTU1BUCwKICAgICAgICBFWEVDX1VOTUFQCn07CiMg NDggIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvcHJvZmlsZS5oIgpzdGF0 aWMgaW5saW5lIGludCBwcm9maWxlX2V2ZW50X3JlZ2lzdGVyX1IwYmI3MWJjZShlbnVtIHByb2Zp bGVfdHlwZSB0LCBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKiBuKQp7CiAgICAgICAgcmV0dXJuIC0z ODsKfQoKc3RhdGljIGlubGluZSBpbnQgcHJvZmlsZV9ldmVudF91bnJlZ2lzdGVyX1JhNjdhODE3 MChlbnVtIHByb2ZpbGVfdHlwZSB0LCBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKiBuKQp7CiAgICAg ICAgcmV0dXJuIC0zODsKfQojIDE4ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2Fz bS9od19pcnEuaCIgMgojIDY0ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2FzbS9o d19pcnEuaCIKZXh0ZXJuIGludCBpcnFfdmVjdG9yWzE2XTsKIyA3NCAiL3Vzci9zcmMvbGludXgt Mi40LjIwLTgvaW5jbHVkZS9hc20vaHdfaXJxLmgiCmV4dGVybiB2b2lkIG1hc2tfaXJxKHVuc2ln bmVkIGludCBpcnEpOwpleHRlcm4gdm9pZCB1bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpOwpl eHRlcm4gdm9pZCBkaXNhYmxlXzgyNTlBX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKZXh0ZXJuIHZv aWQgZW5hYmxlXzgyNTlBX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKZXh0ZXJuIGludCBpODI1OUFf aXJxX3BlbmRpbmcodW5zaWduZWQgaW50IGlycSk7CmV4dGVybiB2b2lkIG1ha2VfODI1OUFfaXJx KHVuc2lnbmVkIGludCBpcnEpOwpleHRlcm4gdm9pZCBpbml0XzgyNTlBKGludCBhZW9pKTsKZXh0 ZXJuIHZvaWQgc2VuZF9JUElfc2VsZihpbnQgdmVjdG9yKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJt KDMpKSk7CmV4dGVybiB2b2lkIGluaXRfVklTV1NfQVBJQ19pcnFzKHZvaWQpOwpleHRlcm4gdm9p ZCBzZXR1cF9JT19BUElDKHZvaWQpOwpleHRlcm4gdm9pZCBkaXNhYmxlX0lPX0FQSUModm9pZCk7 CmV4dGVybiB2b2lkIHByaW50X0lPX0FQSUModm9pZCk7CmV4dGVybiBpbnQgSU9fQVBJQ19nZXRf UENJX2lycV92ZWN0b3IoaW50IGJ1cywgaW50IHNsb3QsIGludCBmbik7CmV4dGVybiB2b2lkIHNl bmRfSVBJKGludCBkZXN0LCBpbnQgdmVjdG9yKTsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGlvX2Fw aWNfaXJxczsKCmV4dGVybiBhdG9taWNfdCBpcnFfZXJyX2NvdW50OwpleHRlcm4gYXRvbWljX3Qg aXJxX21pc19jb3VudDsKCmV4dGVybiBjaGFyIF9zdGV4dCwgX2V0ZXh0OwojIDE5MiAiL3Vzci9z cmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9hc20vaHdfaXJxLmgiCnN0YXRpYyBpbmxpbmUgdm9p ZCB4ODZfZG9fcHJvZmlsZShzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpCnsKICAgICAgICB1bnNpZ25l ZCBsb25nIGVpcDsKICAgICAgICBleHRlcm4gdW5zaWduZWQgbG9uZyBwcm9mX2NwdV9tYXNrOwog ICAgICAgIGV4dGVybiBjaGFyIF9zdGV4dDsKCgoKCgoKICAgICAgICBpZiAoKCgweDAwMDIwMDAw ICYgKHJlZ3MpLT5lZmxhZ3MpIHx8ICgzICYgKHJlZ3MpLT54Y3MpKSkKICAgICAgICAgICAgICAg IHJldHVybjsKCiAgICAgICAgaWYgKCFwcm9mX2J1ZmZlcikKICAgICAgICAgICAgICAgIHJldHVy bjsKCiAgICAgICAgZWlwID0gcmVncy0+ZWlwOwoKCgoKCiAgICAgICAgaWYgKCEoKDE8PDApICYg cHJvZl9jcHVfbWFzaykpCiAgICAgICAgICAgICAgICByZXR1cm47CgogICAgICAgIGVpcCAtPSAo dW5zaWduZWQgbG9uZykgJl9zdGV4dDsKICAgICAgICBlaXAgPj49IHByb2Zfc2hpZnQ7CgoKCgoK ICAgICAgICBpZiAoZWlwID4gcHJvZl9sZW4tMSkKICAgICAgICAgICAgICAgIGVpcCA9IHByb2Zf bGVuLTE7CiAgICAgICAgYXRvbWljX2luYygoYXRvbWljX3QgKikmcHJvZl9idWZmZXJbZWlwXSk7 Cn0KCnN0cnVjdCBub3RpZmllcl9ibG9jazsKIyAyMzkgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04 L2luY2x1ZGUvYXNtL2h3X2lycS5oIgpzdGF0aWMgaW5saW5lIGludCByZWdpc3Rlcl9wcm9maWxl X25vdGlmaWVyX1I4MzgwNDU1MyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKiBuYikKewogICAgICAg IHJldHVybiAtMzg7Cn0KCnN0YXRpYyBpbmxpbmUgaW50IHVucmVnaXN0ZXJfcHJvZmlsZV9ub3Rp Zmllcl9SZjhiOGU2ZTIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICogbmIpCnsKICAgICAgICByZXR1 cm4gLTM4Owp9CiMgMjU3ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2FzbS9od19p cnEuaCIKc3RhdGljIGlubGluZSB2b2lkIGh3X3Jlc2VuZF9pcnEoc3RydWN0IGh3X2ludGVycnVw dF90eXBlICpoLCB1bnNpZ25lZCBpbnQgaSkge30KIyA3MCAiL3Vzci9zcmMvbGludXgtMi40LjIw LTgvaW5jbHVkZS9saW51eC9pcnEuaCIgMgoKZXh0ZXJuIGludCBoYW5kbGVfSVJRX2V2ZW50KHVu c2lnbmVkIGludCwgc3RydWN0IHB0X3JlZ3MgKiwgc3RydWN0IGlycWFjdGlvbiAqKTsKZXh0ZXJu IGludCBzZXR1cF9pcnEodW5zaWduZWQgaW50ICwgc3RydWN0IGlycWFjdGlvbiAqICk7CgpleHRl cm4gaHdfaXJxX2NvbnRyb2xsZXIgbm9faXJxX3R5cGU7CmV4dGVybiB2b2lkIG5vX2FjdGlvbihp bnQgY3BsLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIyA3ICIvdXNyL3Ny Yy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2FzbS9oYXJkaXJxLmgiIDIKCgp0eXBlZGVmIHN0cnVj dCB7CiAgICAgICAgdW5zaWduZWQgaW50IF9fc29mdGlycV9wZW5kaW5nOwogICAgICAgIHVuc2ln bmVkIGludCBfX2xvY2FsX2lycV9jb3VudDsKICAgICAgICB1bnNpZ25lZCBpbnQgX19sb2NhbF9i aF9jb3VudDsKICAgICAgICB1bnNpZ25lZCBpbnQgX19zeXNjYWxsX2NvdW50OwogICAgICAgIHN0 cnVjdCB0YXNrX3N0cnVjdCAqIF9fa3NvZnRpcnFkX3Rhc2s7CiAgICAgICAgdW5zaWduZWQgbG9u ZyBpZGxlX3RpbWVzdGFtcDsKICAgICAgICB1bnNpZ25lZCBpbnQgX19ubWlfY291bnQ7CgoKCn0g X19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oKDEgPDwgKCg1KSkpKSkpIGlycV9jcHVzdGF0X3Q7 CgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvaXJxX2NwdXN0YXQu aCIgMQojIDIwICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2lycV9jcHVz dGF0LmgiCmV4dGVybiBpcnFfY3B1c3RhdF90IGlycV9zdGF0X1JjYTAyODNiMFtdOwojIDIzICIv dXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2FzbS9oYXJkaXJxLmgiIDIKIyA0NyAiL3Vz ci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaCIgMgojIDEgIi91 c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvYXNtL3NvZnRpcnEuaCIgMQojIDQ4ICIvdXNy L3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oIiAyCiMgNTcgIi91 c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgiCmVudW0Kewog ICAgICAgIEhJX1NPRlRJUlE9MCwKICAgICAgICBORVRfVFhfU09GVElSUSwKICAgICAgICBORVRf UlhfU09GVElSUSwKICAgICAgICBUQVNLTEVUX1NPRlRJUlEKfTsKCgoKCgpzdHJ1Y3Qgc29mdGly cV9hY3Rpb24KewogICAgICAgIHZvaWQgKCphY3Rpb24pKHN0cnVjdCBzb2Z0aXJxX2FjdGlvbiAq KTsKICAgICAgICB2b2lkICpkYXRhOwp9OwoKIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkpKSB2 b2lkIGRvX3NvZnRpcnFfUmYwYTUyOWI3KHZvaWQpOwpleHRlcm4gdm9pZCBvcGVuX3NvZnRpcnEo aW50IG5yLCB2b2lkICgqYWN0aW9uKShzdHJ1Y3Qgc29mdGlycV9hY3Rpb24qKSwgdm9pZCAqZGF0 YSk7CmV4dGVybiB2b2lkIHNvZnRpcnFfaW5pdCh2b2lkKTsKCmV4dGVybiB2b2lkIGNwdV9yYWlz ZV9zb2Z0aXJxX1JkMDFmM2VlOCh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgbnIpIF9f YXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKZXh0ZXJuIHZvaWQgcmFpc2Vfc29mdGlycV9SZDhl NGZhMWModW5zaWduZWQgaW50IG5yKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CiMgMTA0 ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oIgpzdHJ1 Y3QgdGFza2xldF9zdHJ1Y3QKewogICAgICAgIHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqbmV4dDsK ICAgICAgICB1bnNpZ25lZCBsb25nIHN0YXRlOwogICAgICAgIGF0b21pY190IGNvdW50OwogICAg ICAgIHZvaWQgKCpmdW5jKSh1bnNpZ25lZCBsb25nKTsKICAgICAgICB1bnNpZ25lZCBsb25nIGRh dGE7Cn07CiMgMTIwICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2ludGVy cnVwdC5oIgplbnVtCnsKICAgICAgICBUQVNLTEVUX1NUQVRFX1NDSEVELAogICAgICAgIFRBU0tM RVRfU1RBVEVfUlVOCn07CgpzdHJ1Y3QgdGFza2xldF9oZWFkCnsKICAgICAgICBzdHJ1Y3QgdGFz a2xldF9zdHJ1Y3QgKmxpc3Q7Cn0gX19hdHRyaWJ1dGVfXyAoKF9fYWxpZ25lZF9fKCgxIDw8ICgo NSkpKSkpKTsKCmV4dGVybiBzdHJ1Y3QgdGFza2xldF9oZWFkIHRhc2tsZXRfdmVjX1I0MWQzYjM2 N1sxXTsKZXh0ZXJuIHN0cnVjdCB0YXNrbGV0X2hlYWQgdGFza2xldF9oaV92ZWNfUmJiMDY1NzVm WzFdOwojIDE1NiAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9pbnRlcnJ1 cHQuaCIKZXh0ZXJuIHZvaWQgX190YXNrbGV0X3NjaGVkdWxlX1JlZDVjNzNiZihzdHJ1Y3QgdGFz a2xldF9zdHJ1Y3QgKnQpIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKCnN0YXRpYyBpbmxp bmUgdm9pZCB0YXNrbGV0X3NjaGVkdWxlKHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdCkKewogICAg ICAgIGlmICghdGVzdF9hbmRfc2V0X2JpdChUQVNLTEVUX1NUQVRFX1NDSEVELCAmdC0+c3RhdGUp KQogICAgICAgICAgICAgICAgX190YXNrbGV0X3NjaGVkdWxlX1JlZDVjNzNiZih0KTsKfQoKZXh0 ZXJuIHZvaWQgX190YXNrbGV0X2hpX3NjaGVkdWxlX1I2MGVhNWZlNyhzdHJ1Y3QgdGFza2xldF9z dHJ1Y3QgKnQpIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKCnN0YXRpYyBpbmxpbmUgdm9p ZCB0YXNrbGV0X2hpX3NjaGVkdWxlKHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdCkKewogICAgICAg IGlmICghdGVzdF9hbmRfc2V0X2JpdChUQVNLTEVUX1NUQVRFX1NDSEVELCAmdC0+c3RhdGUpKQog ICAgICAgICAgICAgICAgX190YXNrbGV0X2hpX3NjaGVkdWxlX1I2MGVhNWZlNyh0KTsKfQoKCnN0 YXRpYyBpbmxpbmUgdm9pZCB0YXNrbGV0X2Rpc2FibGVfbm9zeW5jKHN0cnVjdCB0YXNrbGV0X3N0 cnVjdCAqdCkKewogICAgICAgIGF0b21pY19pbmMoJnQtPmNvdW50KTsKICAgICAgICBfX2FzbV9f IF9fdm9sYXRpbGVfXygiIjogOiA6Im1lbW9yeSIpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgdGFz a2xldF9kaXNhYmxlKHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdCkKewogICAgICAgIHRhc2tsZXRf ZGlzYWJsZV9ub3N5bmModCk7CiAgICAgICAgZG8geyB9IHdoaWxlICgwKTsKICAgICAgICBfX2Fz bV9fIF9fdm9sYXRpbGVfXygiIjogOiA6Im1lbW9yeSIpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQg dGFza2xldF9lbmFibGUoc3RydWN0IHRhc2tsZXRfc3RydWN0ICp0KQp7CiAgICAgICAgX19hc21f XyBfX3ZvbGF0aWxlX18oIiI6IDogOiJtZW1vcnkiKTsKICAgICAgICBhdG9taWNfZGVjKCZ0LT5j b3VudCk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrbGV0X2hpX2VuYWJsZShzdHJ1Y3QgdGFz a2xldF9zdHJ1Y3QgKnQpCnsKICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiIjogOiA6Im1l bW9yeSIpOwogICAgICAgIGF0b21pY19kZWMoJnQtPmNvdW50KTsKfQoKZXh0ZXJuIHZvaWQgdGFz a2xldF9raWxsX1I3OWFkMjI0YihzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpOwpleHRlcm4gdm9p ZCB0YXNrbGV0X2luaXRfUmE1ODA4YmJmKHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdCwKICAgICAg ICAgICAgICAgICAgICAgICAgIHZvaWQgKCpmdW5jKSh1bnNpZ25lZCBsb25nKSwgdW5zaWduZWQg bG9uZyBkYXRhKTsKIyAyMjMgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgv aW50ZXJydXB0LmgiCmV4dGVybiBzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgYmhfdGFza192ZWNfUjI4 NDE3N2I4W107CgoKZXh0ZXJuIHNwaW5sb2NrX3QgZ2xvYmFsX2JoX2xvY2s7CgpzdGF0aWMgaW5s aW5lIHZvaWQgbWFya19iaChpbnQgbnIpCnsKICAgICAgICB0YXNrbGV0X2hpX3NjaGVkdWxlKGJo X3Rhc2tfdmVjX1IyODQxNzdiOCtucik7Cn0KCmV4dGVybiB2b2lkIGluaXRfYmhfUmY2Y2YyN2Nj KGludCBuciwgdm9pZCAoKnJvdXRpbmUpKHZvaWQpKTsKZXh0ZXJuIHZvaWQgcmVtb3ZlX2JoX1Ji YzUyNGEzMihpbnQgbnIpOwojIDI2NCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9s aW51eC9pbnRlcnJ1cHQuaCIKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcHJvYmVfaXJxX29uX1JiMTIx MzkwYSh2b2lkKTsKZXh0ZXJuIGludCBwcm9iZV9pcnFfb2ZmX1JhYjYwMDQyMSh1bnNpZ25lZCBs b25nKTsKZXh0ZXJuIHVuc2lnbmVkIGludCBwcm9iZV9pcnFfbWFza19SMzYwYjFhZmUodW5zaWdu ZWQgbG9uZyk7CiMgMTI1ICJoL3NrZHJ2MXN0LmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQu MjAtOC9pbmNsdWRlL2xpbnV4L3BjaS5oIiAxCiMgMzA4ICIvdXNyL3NyYy9saW51eC0yLjQuMjAt OC9pbmNsdWRlL2xpbnV4L3BjaS5oIgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1 ZGUvbGludXgvcGNpX2lkcy5oIiAxCiMgMzA5ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNs dWRlL2xpbnV4L3BjaS5oIiAyCiMgMzM4ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRl L2xpbnV4L3BjaS5oIgplbnVtIHBjaV9tbWFwX3N0YXRlIHsKICAgICAgICBwY2lfbW1hcF9pbywK ICAgICAgICBwY2lfbW1hcF9tZW0KfTsKIyAzNjggIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2lu Y2x1ZGUvbGludXgvcGNpLmgiCnN0cnVjdCBwY2lfZGV2IHsKICAgICAgICBzdHJ1Y3QgbGlzdF9o ZWFkIGdsb2JhbF9saXN0OwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgYnVzX2xpc3Q7CiAgICAg ICAgc3RydWN0IHBjaV9idXMgKmJ1czsKICAgICAgICBzdHJ1Y3QgcGNpX2J1cyAqc3Vib3JkaW5h dGU7CgogICAgICAgIHZvaWQgKnN5c2RhdGE7CiAgICAgICAgc3RydWN0IHByb2NfZGlyX2VudHJ5 ICpwcm9jZW50OwoKICAgICAgICB1bnNpZ25lZCBpbnQgZGV2Zm47CiAgICAgICAgdW5zaWduZWQg c2hvcnQgdmVuZG9yOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGRldmljZTsKICAgICAgICB1bnNp Z25lZCBzaG9ydCBzdWJzeXN0ZW1fdmVuZG9yOwogICAgICAgIHVuc2lnbmVkIHNob3J0IHN1YnN5 c3RlbV9kZXZpY2U7CiAgICAgICAgdW5zaWduZWQgaW50IGNsYXNzOwogICAgICAgIHU4IGhkcl90 eXBlOwogICAgICAgIHU4IHJvbV9iYXNlX3JlZzsKCiAgICAgICAgc3RydWN0IHBjaV9kcml2ZXIg KmRyaXZlcjsKICAgICAgICB2b2lkICpkcml2ZXJfZGF0YTsKICAgICAgICB1NjQgZG1hX21hc2s7 CgoKCgoKICAgICAgICB1MzIgY3VycmVudF9zdGF0ZTsKCgoKCiAgICAgICAgdW5zaWduZWQgc2hv cnQgdmVuZG9yX2NvbXBhdGlibGVbNF07CiAgICAgICAgdW5zaWduZWQgc2hvcnQgZGV2aWNlX2Nv bXBhdGlibGVbNF07CgoKCgoKICAgICAgICB1bnNpZ25lZCBpbnQgaXJxOwogICAgICAgIHN0cnVj dCByZXNvdXJjZSByZXNvdXJjZVsxMl07CiAgICAgICAgc3RydWN0IHJlc291cmNlIGRtYV9yZXNv dXJjZVsyXTsKICAgICAgICBzdHJ1Y3QgcmVzb3VyY2UgaXJxX3Jlc291cmNlWzJdOwoKICAgICAg ICBjaGFyIG5hbWVbOTBdOwogICAgICAgIGNoYXIgc2xvdF9uYW1lWzhdOwogICAgICAgIHUzMiBz YXZlZF9zdGF0ZVsxNl07CiAgICAgICAgaW50IGFjdGl2ZTsKICAgICAgICBpbnQgcm87CiAgICAg ICAgdW5zaWduZWQgc2hvcnQgcmVnczsKCgogICAgICAgIHVuc2lnbmVkIHNob3J0IHRyYW5zcGFy ZW50OjE7CgogICAgICAgIGludCAoKnByZXBhcmUpKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogICAg ICAgIGludCAoKmFjdGl2YXRlKShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKICAgICAgICBpbnQgKCpk ZWFjdGl2YXRlKShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKfTsKIyA0NDMgIi91c3Ivc3JjL2xpbnV4 LTIuNC4yMC04L2luY2x1ZGUvbGludXgvcGNpLmgiCnN0cnVjdCBwY2lfYnVzIHsKICAgICAgICBz dHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CiAgICAgICAgc3RydWN0IHBjaV9idXMgKnBhcmVudDsKICAg ICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGNoaWxkcmVuOwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQg ZGV2aWNlczsKICAgICAgICBzdHJ1Y3QgcGNpX2RldiAqc2VsZjsKICAgICAgICBzdHJ1Y3QgcmVz b3VyY2UgKnJlc291cmNlWzRdOwoKICAgICAgICBzdHJ1Y3QgcGNpX29wcyAqb3BzOwogICAgICAg IHZvaWQgKnN5c2RhdGE7CiAgICAgICAgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jZGlyOwoK ICAgICAgICB1bnNpZ25lZCBjaGFyIG51bWJlcjsKICAgICAgICB1bnNpZ25lZCBjaGFyIHByaW1h cnk7CiAgICAgICAgdW5zaWduZWQgY2hhciBzZWNvbmRhcnk7CiAgICAgICAgdW5zaWduZWQgY2hh ciBzdWJvcmRpbmF0ZTsKCiAgICAgICAgY2hhciBuYW1lWzQ4XTsKICAgICAgICB1bnNpZ25lZCBz aG9ydCB2ZW5kb3I7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgZGV2aWNlOwogICAgICAgIHVuc2ln bmVkIGludCBzZXJpYWw7CiAgICAgICAgdW5zaWduZWQgY2hhciBwbnB2ZXI7CiAgICAgICAgdW5z aWduZWQgY2hhciBwcm9kdWN0dmVyOwogICAgICAgIHVuc2lnbmVkIGNoYXIgY2hlY2tzdW07CiAg ICAgICAgdW5zaWduZWQgY2hhciBwYWQxOwp9OwoKCgpleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBw Y2lfcm9vdF9idXNlc19SMDgyYzMyMTM7CmV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIHBjaV9kZXZp Y2VzX1I3YTg0YjEwMjsKCmV4dGVybiBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfYnVzX3Bj aV9kaXJfUmMxYmI3OWVlOwojIDQ4OSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9s aW51eC9wY2kuaCIKc3RydWN0IHBjaV9vcHMgewogICAgICAgIGludCAoKnJlYWRfYnl0ZSkoc3Ry dWN0IHBjaV9kZXYgKiwgaW50IHdoZXJlLCB1OCAqdmFsKTsKICAgICAgICBpbnQgKCpyZWFkX3dv cmQpKHN0cnVjdCBwY2lfZGV2ICosIGludCB3aGVyZSwgdTE2ICp2YWwpOwogICAgICAgIGludCAo KnJlYWRfZHdvcmQpKHN0cnVjdCBwY2lfZGV2ICosIGludCB3aGVyZSwgdTMyICp2YWwpOwogICAg ICAgIGludCAoKndyaXRlX2J5dGUpKHN0cnVjdCBwY2lfZGV2ICosIGludCB3aGVyZSwgdTggdmFs KTsKICAgICAgICBpbnQgKCp3cml0ZV93b3JkKShzdHJ1Y3QgcGNpX2RldiAqLCBpbnQgd2hlcmUs IHUxNiB2YWwpOwogICAgICAgIGludCAoKndyaXRlX2R3b3JkKShzdHJ1Y3QgcGNpX2RldiAqLCBp bnQgd2hlcmUsIHUzMiB2YWwpOwp9OwoKc3RydWN0IHBidXNfc2V0X3Jhbmdlc19kYXRhCnsKICAg ICAgICB1bnNpZ25lZCBsb25nIGlvX3N0YXJ0LCBpb19lbmQ7CiAgICAgICAgdW5zaWduZWQgbG9u ZyBtZW1fc3RhcnQsIG1lbV9lbmQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyBwcmVmZXRjaF9zdGFy dCwgcHJlZmV0Y2hfZW5kOwp9OwoKc3RydWN0IHBjaV9kZXZpY2VfaWQgewogICAgICAgIHVuc2ln bmVkIGludCB2ZW5kb3IsIGRldmljZTsKICAgICAgICB1bnNpZ25lZCBpbnQgc3VidmVuZG9yLCBz dWJkZXZpY2U7CiAgICAgICAgdW5zaWduZWQgaW50IGNsYXNzLCBjbGFzc19tYXNrOwogICAgICAg IHVuc2lnbmVkIGxvbmcgZHJpdmVyX2RhdGE7Cn07CgpzdHJ1Y3QgcGNpX2RyaXZlciB7CiAgICAg ICAgc3RydWN0IGxpc3RfaGVhZCBub2RlOwogICAgICAgIGNoYXIgKm5hbWU7CiAgICAgICAgY29u c3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkX3RhYmxlOwogICAgICAgIGludCAoKnByb2JlKSAo c3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKTsKICAg ICAgICB2b2lkICgqcmVtb3ZlKSAoc3RydWN0IHBjaV9kZXYgKmRldik7CiAgICAgICAgaW50ICgq c2F2ZV9zdGF0ZSkgKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHUzMiBzdGF0ZSk7CiAgICAgICAgaW50 ICgqc3VzcGVuZCkgKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHUzMiBzdGF0ZSk7CiAgICAgICAgaW50 ICgqcmVzdW1lKSAoc3RydWN0IHBjaV9kZXYgKmRldik7CiAgICAgICAgaW50ICgqZW5hYmxlX3dh a2UpIChzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1MzIgc3RhdGUsIGludCBlbmFibGUpOwp9OwojIDUz MSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9wY2kuaCIKdm9pZCBwY2li aW9zX2luaXQodm9pZCk7CnZvaWQgcGNpYmlvc19maXh1cF9idXMoc3RydWN0IHBjaV9idXMgKik7 CmludCBwY2liaW9zX2VuYWJsZV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKiwgaW50IG1hc2spOwpj aGFyICpwY2liaW9zX3NldHVwIChjaGFyICpzdHIpOwoKCnZvaWQgcGNpYmlvc19hbGlnbl9yZXNv dXJjZSh2b2lkICosIHN0cnVjdCByZXNvdXJjZSAqLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CnZvaWQgcGNpYmlvc191cGRhdGVfcmVz b3VyY2Uoc3RydWN0IHBjaV9kZXYgKiwgc3RydWN0IHJlc291cmNlICosCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3RydWN0IHJlc291cmNlICosIGludCk7CnZvaWQgcGNpYmlvc191cGRh dGVfaXJxKHN0cnVjdCBwY2lfZGV2ICosIGludCBpcnEpOwp2b2lkIHBjaWJpb3NfZml4dXBfcGJ1 c19yYW5nZXMoc3RydWN0IHBjaV9idXMgKiwgc3RydWN0IHBidXNfc2V0X3Jhbmdlc19kYXRhICop OwoKCgppbnQgcGNpYmlvc19wcmVzZW50X1I1MjBhNzViOSh2b2lkKTsKaW50IHBjaWJpb3NfcmVh ZF9jb25maWdfYnl0ZV9SZDgwMTE1ZTEgKHVuc2lnbmVkIGNoYXIgYnVzLCB1bnNpZ25lZCBjaGFy IGRldl9mbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciB3aGVy ZSwgdW5zaWduZWQgY2hhciAqdmFsKTsKaW50IHBjaWJpb3NfcmVhZF9jb25maWdfd29yZF9SYWE5 ZWZmZDcgKHVuc2lnbmVkIGNoYXIgYnVzLCB1bnNpZ25lZCBjaGFyIGRldl9mbiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciB3aGVyZSwgdW5zaWduZWQgc2hvcnQg KnZhbCk7CmludCBwY2liaW9zX3JlYWRfY29uZmlnX2R3b3JkX1IzOGFlNjY4OSAodW5zaWduZWQg Y2hhciBidXMsIHVuc2lnbmVkIGNoYXIgZGV2X2ZuLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdW5zaWduZWQgY2hhciB3aGVyZSwgdW5zaWduZWQgaW50ICp2YWwpOwppbnQgcGNpYmlv c193cml0ZV9jb25maWdfYnl0ZV9SNzE5ODU2ZWUgKHVuc2lnbmVkIGNoYXIgYnVzLCB1bnNpZ25l ZCBjaGFyIGRldl9mbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNo YXIgd2hlcmUsIHVuc2lnbmVkIGNoYXIgdmFsKTsKaW50IHBjaWJpb3Nfd3JpdGVfY29uZmlnX3dv cmRfUjRmMWMyZTMzICh1bnNpZ25lZCBjaGFyIGJ1cywgdW5zaWduZWQgY2hhciBkZXZfZm4sCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHdoZXJlLCB1bnNpZ25l ZCBzaG9ydCB2YWwpOwppbnQgcGNpYmlvc193cml0ZV9jb25maWdfZHdvcmRfUjgxYjRmNDY1ICh1 bnNpZ25lZCBjaGFyIGJ1cywgdW5zaWduZWQgY2hhciBkZXZfZm4sCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciB3aGVyZSwgdW5zaWduZWQgaW50IHZhbCk7Cmlu dCBwY2liaW9zX2ZpbmRfY2xhc3NfUmVmMzMzZjdiICh1bnNpZ25lZCBpbnQgY2xhc3NfY29kZSwg dW5zaWduZWQgc2hvcnQgaW5kZXgsIHVuc2lnbmVkIGNoYXIgKmJ1cywgdW5zaWduZWQgY2hhciAq ZGV2X2ZuKTsKaW50IHBjaWJpb3NfZmluZF9kZXZpY2VfUjk3ZDQ5YzRkICh1bnNpZ25lZCBzaG9y dCB2ZW5kb3IsIHVuc2lnbmVkIHNob3J0IGRldl9pZCwKICAgICAgICAgICAgICAgICAgICAgICAg IHVuc2lnbmVkIHNob3J0IGluZGV4LCB1bnNpZ25lZCBjaGFyICpidXMsCiAgICAgICAgICAgICAg ICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpkZXZfZm4pOwoKCgp2b2lkIHBjaV9pbml0KHZvaWQp OwppbnQgcGNpX2J1c19leGlzdHMoY29uc3Qgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgaW50IG5y KTsKc3RydWN0IHBjaV9idXMgKnBjaV9zY2FuX2J1c19SYmQ0NTllMDkoaW50IGJ1cywgc3RydWN0 IHBjaV9vcHMgKm9wcywgdm9pZCAqc3lzZGF0YSk7CnN0cnVjdCBwY2lfYnVzICpwY2lfYWxsb2Nf cHJpbWFyeV9idXMoaW50IGJ1cyk7CnN0cnVjdCBwY2lfZGV2ICpwY2lfc2Nhbl9zbG90X1I2ODZh ZDk5YihzdHJ1Y3QgcGNpX2RldiAqdGVtcCk7CmludCBwY2lfcHJvY19hdHRhY2hfZGV2aWNlX1I5 NjZjNjg1OShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKaW50IHBjaV9wcm9jX2RldGFjaF9kZXZpY2Vf UmI0YzUyNDdmKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwppbnQgcGNpX3Byb2NfYXR0YWNoX2J1c19S NmEwMGNlMmUoc3RydWN0IHBjaV9idXMgKmJ1cyk7CmludCBwY2lfcHJvY19kZXRhY2hfYnVzX1I3 NjU3MGI3NChzdHJ1Y3QgcGNpX2J1cyAqYnVzKTsKdm9pZCBwY2lfbmFtZV9kZXZpY2Uoc3RydWN0 IHBjaV9kZXYgKmRldik7CmNoYXIgKnBjaV9jbGFzc19uYW1lKHUzMiBjbGFzcyk7CnZvaWQgcGNp X3JlYWRfYnJpZGdlX2Jhc2VzX1I2ZDhhNWE3YihzdHJ1Y3QgcGNpX2J1cyAqY2hpbGQpOwpzdHJ1 Y3QgcmVzb3VyY2UgKnBjaV9maW5kX3BhcmVudF9yZXNvdXJjZV9SOGY5ZmU1NTkoY29uc3Qgc3Ry dWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHJlc291cmNlICpyZXMpOwppbnQgcGNpX3NldHVwX2Rl dmljZV9SMTBjNTc2YjUoc3RydWN0IHBjaV9kZXYgKmRldik7CmludCBwY2lfZ2V0X2ludGVycnVw dF9waW4oc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHBjaV9kZXYgKipicmlkZ2UpOwoKCgpz dHJ1Y3QgcGNpX2RldiAqcGNpX2ZpbmRfZGV2aWNlX1IyZWM5MDVkNyAodW5zaWduZWQgaW50IHZl bmRvciwgdW5zaWduZWQgaW50IGRldmljZSwgY29uc3Qgc3RydWN0IHBjaV9kZXYgKmZyb20pOwpz dHJ1Y3QgcGNpX2RldiAqcGNpX2ZpbmRfc3Vic3lzX1I3NzM4MWMyYyAodW5zaWduZWQgaW50IHZl bmRvciwgdW5zaWduZWQgaW50IGRldmljZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdW5zaWduZWQgaW50IHNzX3ZlbmRvciwgdW5zaWduZWQgaW50IHNzX2RldmljZSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXYgKmZyb20pOwpz dHJ1Y3QgcGNpX2RldiAqcGNpX2ZpbmRfY2xhc3NfUmY2YmExNTU5ICh1bnNpZ25lZCBpbnQgY2xh c3MsIGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpmcm9tKTsKc3RydWN0IHBjaV9kZXYgKnBjaV9maW5k X3Nsb3RfUjFkZTg3NDdjICh1bnNpZ25lZCBpbnQgYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4pOwpp bnQgcGNpX2ZpbmRfY2FwYWJpbGl0eV9SZmQ2YTZjMzkgKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGlu dCBjYXApOwoKaW50IHBjaV9yZWFkX2NvbmZpZ19ieXRlX1IwZTQyNWE5ZShzdHJ1Y3QgcGNpX2Rl diAqZGV2LCBpbnQgd2hlcmUsIHU4ICp2YWwpOwppbnQgcGNpX3JlYWRfY29uZmlnX3dvcmRfUmQy NWYzMjQwKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCB3aGVyZSwgdTE2ICp2YWwpOwppbnQgcGNp X3JlYWRfY29uZmlnX2R3b3JkX1I0M2UzMThkZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgd2hl cmUsIHUzMiAqdmFsKTsKaW50IHBjaV93cml0ZV9jb25maWdfYnl0ZV9SNjJjOTliYzMoc3RydWN0 IHBjaV9kZXYgKmRldiwgaW50IHdoZXJlLCB1OCB2YWwpOwppbnQgcGNpX3dyaXRlX2NvbmZpZ193 b3JkX1I5N2QwNGUxMShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgd2hlcmUsIHUxNiB2YWwpOwpp bnQgcGNpX3dyaXRlX2NvbmZpZ19kd29yZF9SN2ZiZjYxYmEoc3RydWN0IHBjaV9kZXYgKmRldiwg aW50IHdoZXJlLCB1MzIgdmFsKTsKCmludCBwY2lfZW5hYmxlX2RldmljZV9SMzBhZjQxZTIoc3Ry dWN0IHBjaV9kZXYgKmRldik7CmludCBwY2lfZW5hYmxlX2RldmljZV9iYXJzX1I5NzdhMzQxNShz dHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgbWFzayk7CnZvaWQgcGNpX2Rpc2FibGVfZGV2aWNlX1Iz ODZjYjY3MShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKdm9pZCBwY2lfc2V0X21hc3Rlcl9SYzRkOWNl ZDUoc3RydWN0IHBjaV9kZXYgKmRldik7CgppbnQgcGNpX3NldF9td2lfUmNhYTFmYTg0KHN0cnVj dCBwY2lfZGV2ICpkZXYpOwp2b2lkIHBjaV9jbGVhcl9td2lfUmMxMzU0MGU5KHN0cnVjdCBwY2lf ZGV2ICpkZXYpOwppbnQgcGRldl9zZXRfbXdpX1I0ZDRjNWFkNihzdHJ1Y3QgcGNpX2RldiAqZGV2 KTsKaW50IHBjaV9zZXRfZG1hX21hc2tfUjk3NTUzMzg0KHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU2 NCBtYXNrKTsKaW50IHBjaV9kYWNfc2V0X2RtYV9tYXNrX1IwMDhkZDM4YShzdHJ1Y3QgcGNpX2Rl diAqZGV2LCB1NjQgbWFzayk7CmludCBwY2lfYXNzaWduX3Jlc291cmNlX1IzNDA3Njk3NShzdHJ1 Y3QgcGNpX2RldiAqZGV2LCBpbnQgaSk7CgoKaW50IHBjaV9zYXZlX3N0YXRlX1IwZmZjZTM3Nyhz dHJ1Y3QgcGNpX2RldiAqZGV2LCB1MzIgKmJ1ZmZlcik7CmludCBwY2lfcmVzdG9yZV9zdGF0ZV9S NWMzZDFiMGQoc3RydWN0IHBjaV9kZXYgKmRldiwgdTMyICpidWZmZXIpOwppbnQgcGNpX3NldF9w b3dlcl9zdGF0ZV9SMjI0MjE1YTAoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHN0YXRlKTsKaW50 IHBjaV9lbmFibGVfd2FrZV9SZmU0YmIxY2Eoc3RydWN0IHBjaV9kZXYgKmRldiwgdTMyIHN0YXRl LCBpbnQgZW5hYmxlKTsKaW50IHBjaV9nZW5lcmljX3N1c3BlbmRfc2F2ZV9SN2FjNGEwNzIoc3Ry dWN0IHBjaV9kZXYgKnBkZXYsIHUzMiBzdGF0ZSk7CmludCBwY2lfZ2VuZXJpY19yZXN1bWVfcmVz dG9yZV9SM2IwOTZlMWQoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwoKCgppbnQgcGNpX2NsYWltX3Jl c291cmNlKHN0cnVjdCBwY2lfZGV2ICosIGludCk7CnZvaWQgcGNpX2Fzc2lnbl91bmFzc2lnbmVk X3Jlc291cmNlcyh2b2lkKTsKdm9pZCBwZGV2X2VuYWJsZV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYg Kik7CnZvaWQgcGRldl9zb3J0X3Jlc291cmNlcyhzdHJ1Y3QgcGNpX2RldiAqLCBzdHJ1Y3QgcmVz b3VyY2VfbGlzdCAqKTsKdW5zaWduZWQgbG9uZyBwY2lfYnJpZGdlX2NoZWNrX2lvKHN0cnVjdCBw Y2lfZGV2ICopOwp2b2lkIHBjaV9maXh1cF9pcnFzKHU4ICgqKShzdHJ1Y3QgcGNpX2RldiAqLCB1 OCAqKSwKICAgICAgICAgICAgICAgICAgICBpbnQgKCopKHN0cnVjdCBwY2lfZGV2ICosIHU4LCB1 OCkpOwoKaW50IHBjaV9yZXF1ZXN0X3JlZ2lvbnNfUjlkMDFkNjA0KHN0cnVjdCBwY2lfZGV2ICos IGNoYXIgKik7CnZvaWQgcGNpX3JlbGVhc2VfcmVnaW9uc19SMzRlZDUyNzgoc3RydWN0IHBjaV9k ZXYgKik7CmludCBwY2lfcmVxdWVzdF9yZWdpb25fUjQ2YWQyM2ZjKHN0cnVjdCBwY2lfZGV2ICos IGludCwgY2hhciAqKTsKdm9pZCBwY2lfcmVsZWFzZV9yZWdpb25fUjlkYjMxM2QyKHN0cnVjdCBw Y2lfZGV2ICosIGludCk7CgoKaW50IHBjaV9yZWdpc3Rlcl9kcml2ZXJfUjE0Y2M5OTBhKHN0cnVj dCBwY2lfZHJpdmVyICopOwp2b2lkIHBjaV91bnJlZ2lzdGVyX2RyaXZlcl9SZGE0MTMwMGUoc3Ry dWN0IHBjaV9kcml2ZXIgKik7CnZvaWQgcGNpX2luc2VydF9kZXZpY2VfUmRjYWZkYjE3KHN0cnVj dCBwY2lfZGV2ICosIHN0cnVjdCBwY2lfYnVzICopOwp2b2lkIHBjaV9yZW1vdmVfZGV2aWNlX1Jk ZDJjNDU4YyhzdHJ1Y3QgcGNpX2RldiAqKTsKc3RydWN0IHBjaV9kcml2ZXIgKnBjaV9kZXZfZHJp dmVyX1I1YmYzYzI3Nyhjb25zdCBzdHJ1Y3QgcGNpX2RldiAqKTsKY29uc3Qgc3RydWN0IHBjaV9k ZXZpY2VfaWQgKnBjaV9tYXRjaF9kZXZpY2VfUjNjMDY0YmFhKGNvbnN0IHN0cnVjdCBwY2lfZGV2 aWNlX2lkICppZHMsIGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYpOwp2b2lkIHBjaV9hbm5vdW5j ZV9kZXZpY2VfdG9fZHJpdmVyc19SZDUyY2JlYjUoc3RydWN0IHBjaV9kZXYgKik7CnVuc2lnbmVk IGludCBwY2lfZG9fc2Nhbl9idXNfUmQwOTFkMzAyKHN0cnVjdCBwY2lfYnVzICpidXMpOwpzdHJ1 Y3QgcGNpX2J1cyAqIHBjaV9hZGRfbmV3X2J1c19SZTYzOGViYTAoc3RydWN0IHBjaV9idXMgKnBh cmVudCwgc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGJ1c25yKTsKCgpzdHJ1Y3QgcGNpX3Bvb2wg KnBjaV9wb29sX2NyZWF0ZV9SNTc0NzY2MmUgKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBwY2lf ZGV2ICpkZXYsCiAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWduLCBzaXpl X3QgYWxsb2NhdGlvbiwgaW50IGZsYWdzKTsKdm9pZCBwY2lfcG9vbF9kZXN0cm95X1I2NGMwNGEw ZCAoc3RydWN0IHBjaV9wb29sICpwb29sKTsKCnZvaWQgKnBjaV9wb29sX2FsbG9jX1JkOWNkNjEy OSAoc3RydWN0IHBjaV9wb29sICpwb29sLCBpbnQgZmxhZ3MsIGRtYV9hZGRyX3QgKmhhbmRsZSk7 CnZvaWQgcGNpX3Bvb2xfZnJlZV9SMGM1YWIzNDEgKHN0cnVjdCBwY2lfcG9vbCAqcG9vbCwgdm9p ZCAqdmFkZHIsIGRtYV9hZGRyX3QgYWRkcik7CgoKCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQu MjAtOC9pbmNsdWRlL2FzbS9wY2kuaCIgMQojIDEzICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9p bmNsdWRlL2FzbS9wY2kuaCIKZXh0ZXJuIHVuc2lnbmVkIGludCBwY2liaW9zX2Fzc2lnbl9hbGxf YnVzc2VzKHZvaWQpOwoKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGNpX21lbV9zdGFydF9SM2Rh MTcxZjk7CgoKCnZvaWQgcGNpYmlvc19zZXRfbWFzdGVyKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwp2 b2lkIHBjaWJpb3NfcGVuYWxpemVfaXNhX2lycV9SNTIxMWM4YmYoaW50IGlycSk7CnN0cnVjdCBp cnFfcm91dGluZ190YWJsZSAqcGNpYmlvc19nZXRfaXJxX3JvdXRpbmdfdGFibGVfUjI5NGE3NmU1 KHZvaWQpOwppbnQgcGNpYmlvc19zZXRfaXJxX3JvdXRpbmdfUjFhZjUzOGEzKHN0cnVjdCBwY2lf ZGV2ICpkZXYsIGludCBwaW4sIGludCBpcnEpOwoKCgoKCgoKIyAxICIvdXNyL3NyYy9saW51eC0y LjQuMjAtOC9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdC5oIiAxCiMgMjIgIi91c3Ivc3JjL2xpbnV4 LTIuNC4yMC04L2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0LmgiCnN0cnVjdCBzY2F0dGVybGlzdCB7 CiAgICBjaGFyICogYWRkcmVzczsKCiAgICBzdHJ1Y3QgcGFnZSAqIHBhZ2U7CiAgICB1bnNpZ25l ZCBpbnQgb2Zmc2V0OwoKICAgIGRtYV9hZGRyX3QgZG1hX2FkZHJlc3M7CiAgICB1bnNpZ25lZCBp bnQgbGVuZ3RoOwp9OwojIDM0ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2FzbS9w Y2kuaCIgMgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2FzbS9pby5oIiAx CiMgNDcgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvYXNtL2lvLmgiCiMgMSAiL3Vz ci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC92bWFsbG9jLmgiIDEKCgoKCgoKCiMg MSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9oaWdobWVtLmgiIDEKCgoK CiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9hc20vcGdhbGxvYy5oIiAxCiMg MTggIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvYXNtL3BnYWxsb2MuaCIKc3RhdGlj IGlubGluZSB2b2lkIHBtZF9wb3B1bGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBt ZCwgc3RydWN0IHBhZ2UgKnB0ZSkKewogICAgICAgICgqKHBtZCkgPSAoKHBtZF90KSB7ICgoMHgw MDEgfCAweDAwMiB8IDB4MDA0IHwgMHgwMjAgfCAweDA0MCkgKyAoKHVuc2lnbmVkIGxvbmcgbG9u ZykoKHVuc2lnbmVkIGxvbmcpKChwdGUpIC0gbWVtX21hcF9SNDExZmUyZjApKSA8PCAodW5zaWdu ZWQgbG9uZyBsb25nKSAxMikpIH0gKSk7CgoKfQoKCgoKZXh0ZXJuIHBnZF90ICpwZ2RfYWxsb2Mo c3RydWN0IG1tX3N0cnVjdCAqKTsKZXh0ZXJuIHZvaWQgcGdkX2ZyZWUocGdkX3QgKnBnZCk7Cgpl eHRlcm4gcHRlX3QgKnB0ZV9hbGxvY19vbmVfa2VybmVsKHN0cnVjdCBtbV9zdHJ1Y3QgKiwgdW5z aWduZWQgbG9uZyk7CmV4dGVybiBzdHJ1Y3QgcGFnZSAqcHRlX2FsbG9jX29uZShzdHJ1Y3QgbW1f c3RydWN0ICosIHVuc2lnbmVkIGxvbmcpOwoKCgoKc3RhdGljIGlubGluZSB2b2lkIHB0ZV9mcmVl X2tlcm5lbChwdGVfdCAqcHRlKQp7CiAgICAgICAgZnJlZV9wYWdlc19SOTk0MWNjYjgoKCh1bnNp Z25lZCBsb25nKXB0ZSksMCk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBwdGVfZnJlZShzdHJ1Y3Qg cGFnZSAqcHRlKQp7CiAgICAgICAgX19mcmVlX3BhZ2VzX1I4YjViYWM4MygocHRlKSwgMCk7Cn0K IyA2MSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9hc20vcGdhbGxvYy5oIgpleHRl cm4gaW50IGRvX2NoZWNrX3BndF9jYWNoZShpbnQsIGludCk7CiMgODMgIi91c3Ivc3JjL2xpbnV4 LTIuNC4yMC04L2luY2x1ZGUvYXNtL3BnYWxsb2MuaCIKc3RhdGljIGlubGluZSB2b2lkIGZsdXNo X3RsYl9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKewogICAgICAgIGlmIChtbSA9PSBnZXRfY3Vy cmVudCgpLT5hY3RpdmVfbW0pCiAgICAgICAgICAgICAgICBkbyB7IHVuc2lnbmVkIGludCB0bXBy ZWc7IF9fYXNtX18gX192b2xhdGlsZV9fKCAibW92bCAlJWNyMywgJTA7ICAjIGZsdXNoIFRMQiBc biIgIm1vdmwgJTAsICUlY3IzOyAgICAgICAgICAgICAgXG4iIDogIj1yIiAodG1wcmVnKSA6OiAi bWVtb3J5Iik7IH0gd2hpbGUgKDApOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX3Bh Z2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAgICAgICAgdW5zaWduZWQgbG9uZyBhZGRy KQp7CiAgICAgICAgaWYgKHZtYS0+dm1fbW0gPT0gZ2V0X2N1cnJlbnQoKS0+YWN0aXZlX21tKQog ICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oImludmxwZyAlMCI6IDoibSIgKCoo Y2hhciAqKSBhZGRyKSk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcmFuZ2Uoc3Ry dWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAgICAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5z aWduZWQgbG9uZyBlbmQpCnsKICAgICAgICBpZiAodm1hLT52bV9tbSA9PSBnZXRfY3VycmVudCgp LT5hY3RpdmVfbW0pCiAgICAgICAgICAgICAgICBkbyB7IHVuc2lnbmVkIGludCB0bXByZWc7IF9f YXNtX18gX192b2xhdGlsZV9fKCAibW92bCAlJWNyMywgJTA7ICAjIGZsdXNoIFRMQiBcbiIgIm1v dmwgJTAsICUlY3IzOyAgICAgICAgICAgICAgXG4iIDogIj1yIiAodG1wcmVnKSA6OiAibWVtb3J5 Iik7IH0gd2hpbGUgKDApOwp9CiMgMTM0ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRl L2FzbS9wZ2FsbG9jLmgiCnN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcGd0YWJsZXMoc3Ry dWN0IG1tX3N0cnVjdCAqbW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCnsKICAgICAgICBmbHVzaF90 bGJfbW0obW0pOwp9CiMgNiAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9o aWdobWVtLmgiIDIKIyA2NiAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9o aWdobWVtLmgiCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG5yX2ZyZWVfaGlnaHBhZ2VzKHZv aWQpIHsgcmV0dXJuIDA7IH0KCnN0YXRpYyBpbmxpbmUgdm9pZCAqa21hcChzdHJ1Y3QgcGFnZSAq cGFnZSkgeyByZXR1cm4gKCh2b2lkICopKCh1bnNpZ25lZCBsb25nKSgoKChwYWdlKSAtIHBhZ2Vf em9uZShwYWdlKS0+em9uZV9tZW1fbWFwKSA8PCAxMikgKyBwYWdlX3pvbmUocGFnZSktPnpvbmVf c3RhcnRfcGFkZHIpKygodW5zaWduZWQgbG9uZykoMHhDMDAwMDAwMCkpKSk7IH0KIyA4NCAiL3Vz ci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9oaWdobWVtLmgiCnN0YXRpYyBpbmxp bmUgdm9pZCBjbGVhcl91c2VyX2hpZ2hwYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBs b25nIHZhZGRyKQp7CiAgICAgICAgdm9pZCAqYWRkciA9IGttYXAocGFnZSk7CiAgICAgICAgKF9f YnVpbHRpbl9jb25zdGFudF9wKDApID8gKF9fYnVpbHRpbl9jb25zdGFudF9wKCgoMVVMIDw8IDEy KSkpID8gX19jb25zdGFudF9jX2FuZF9jb3VudF9tZW1zZXQoKCgodm9pZCAqKShhZGRyKSkpLCgo MHgwMTAxMDEwMVVMKih1bnNpZ25lZCBjaGFyKSgwKSkpLCgoKDFVTCA8PCAxMikpKSkgOiBfX2Nv bnN0YW50X2NfbWVtc2V0KCgoKHZvaWQgKikoYWRkcikpKSwoKDB4MDEwMTAxMDFVTCoodW5zaWdu ZWQgY2hhcikoMCkpKSwoKCgxVUwgPDwgMTIpKSkpKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCgo KDFVTCA8PCAxMikpKSA/IF9fbWVtc2V0X2dlbmVyaWMoKCgoKHZvaWQgKikoYWRkcikpKSksKCgo MCkpKSwoKCgoMVVMIDw8IDEyKSkpKSkgOiBfX21lbXNldF9nZW5lcmljKCgoKHZvaWQgKikoYWRk cikpKSwoKDApKSwoKCgxVUwgPDwgMTIpKSkpKSk7CiAgICAgICAgZG8geyB9IHdoaWxlICgwKTsK fQoKc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX2hpZ2hwYWdlKHN0cnVjdCBwYWdlICpwYWdlKQp7 CiAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKDApID8gKF9fYnVpbHRpbl9jb25zdGFudF9w KCgoMVVMIDw8IDEyKSkpID8gX19jb25zdGFudF9jX2FuZF9jb3VudF9tZW1zZXQoKCgodm9pZCAq KShrbWFwKHBhZ2UpKSkpLCgoMHgwMTAxMDEwMVVMKih1bnNpZ25lZCBjaGFyKSgwKSkpLCgoKDFV TCA8PCAxMikpKSkgOiBfX2NvbnN0YW50X2NfbWVtc2V0KCgoKHZvaWQgKikoa21hcChwYWdlKSkp KSwoKDB4MDEwMTAxMDFVTCoodW5zaWduZWQgY2hhcikoMCkpKSwoKCgxVUwgPDwgMTIpKSkpKSA6 IChfX2J1aWx0aW5fY29uc3RhbnRfcCgoKDFVTCA8PCAxMikpKSA/IF9fbWVtc2V0X2dlbmVyaWMo KCgoKHZvaWQgKikoa21hcChwYWdlKSkpKSksKCgoMCkpKSwoKCgoMVVMIDw8IDEyKSkpKSkgOiBf X21lbXNldF9nZW5lcmljKCgoKHZvaWQgKikoa21hcChwYWdlKSkpKSwoKDApKSwoKCgxVUwgPDwg MTIpKSkpKSk7CiAgICAgICAgZG8geyB9IHdoaWxlICgwKTsKfQoKCgoKc3RhdGljIGlubGluZSB2 b2lkIG1lbWNsZWFyX2hpZ2hwYWdlX2ZsdXNoKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBp bnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgc2l6ZSkKewogICAgICAgIGNoYXIgKmthZGRyOwoKICAg ICAgICBpZiAob2Zmc2V0ICsgc2l6ZSA+ICgxVUwgPDwgMTIpKQogICAgICAgICAgICAgICAgX19v dXRfb2ZfbGluZV9idWdfUjhiMGZkM2M1KDEwNSk7CiAgICAgICAga2FkZHIgPSBrbWFwKHBhZ2Up OwogICAgICAgIChfX2J1aWx0aW5fY29uc3RhbnRfcCgwKSA/IChfX2J1aWx0aW5fY29uc3RhbnRf cCgoc2l6ZSkpID8gX19jb25zdGFudF9jX2FuZF9jb3VudF9tZW1zZXQoKChrYWRkciArIG9mZnNl dCkpLCgoMHgwMTAxMDEwMVVMKih1bnNpZ25lZCBjaGFyKSgwKSkpLCgoc2l6ZSkpKSA6IF9fY29u c3RhbnRfY19tZW1zZXQoKChrYWRkciArIG9mZnNldCkpLCgoMHgwMTAxMDEwMVVMKih1bnNpZ25l ZCBjaGFyKSgwKSkpLCgoc2l6ZSkpKSkgOiAoX19idWlsdGluX2NvbnN0YW50X3AoKHNpemUpKSA/ IF9fbWVtc2V0X2dlbmVyaWMoKCgoa2FkZHIgKyBvZmZzZXQpKSksKCgoMCkpKSwoKChzaXplKSkp KSA6IF9fbWVtc2V0X2dlbmVyaWMoKChrYWRkciArIG9mZnNldCkpLCgoMCkpLCgoc2l6ZSkpKSkp OwogICAgICAgIGRvIHsgfSB3aGlsZSAoMCk7CiAgICAgICAgZG8geyB9IHdoaWxlICgwKTsKICAg ICAgICBkbyB7IH0gd2hpbGUgKDApOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgY29weV91c2VyX2hp Z2hwYWdlKHN0cnVjdCBwYWdlICp0bywgc3RydWN0IHBhZ2UgKmZyb20sIHVuc2lnbmVkIGxvbmcg dmFkZHIpCnsKICAgICAgICBjaGFyICp2ZnJvbSwgKnZ0bzsKCiAgICAgICAgdmZyb20gPSBrbWFw KGZyb20pOwogICAgICAgIHZ0byA9IGttYXAodG8pOwogICAgICAgIChfX2J1aWx0aW5fY29uc3Rh bnRfcCgoMVVMIDw8IDEyKSkgPyBfX2NvbnN0YW50X21lbWNweSgoKHZvaWQgKikodnRvKSksKCh2 b2lkICopKHZmcm9tKSksKCgxVUwgPDwgMTIpKSkgOiBfX21lbWNweSgoKHZvaWQgKikodnRvKSks KCh2b2lkICopKHZmcm9tKSksKCgxVUwgPDwgMTIpKSkpOwogICAgICAgIGRvIHsgfSB3aGlsZSAo MCk7CiAgICAgICAgZG8geyB9IHdoaWxlICgwKTsKfQojIDkgIi91c3Ivc3JjL2xpbnV4LTIuNC4y MC04L2luY2x1ZGUvbGludXgvdm1hbGxvYy5oIiAyCgoKCgoKCnN0cnVjdCB2bV9zdHJ1Y3Qgewog ICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAgICAgICAgdm9pZCAqIGFkZHI7CiAgICAgICAg dW5zaWduZWQgbG9uZyBzaXplOwogICAgICAgIHN0cnVjdCB2bV9zdHJ1Y3QgKiBuZXh0Owp9OwoK ZXh0ZXJuIHN0cnVjdCB2bV9zdHJ1Y3QgKiBnZXRfdm1fYXJlYSAodW5zaWduZWQgbG9uZyBzaXpl LCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKZXh0ZXJuIHZvaWQgdmZyZWVfUjJmZDFkODFjKHZvaWQg KiBhZGRyKTsKZXh0ZXJuIHZvaWQgKiBfX3ZtYWxsb2NfUjc5OTk1YzViICh1bnNpZ25lZCBsb25n IHNpemUsIGludCBnZnBfbWFzaywgcGdwcm90X3QgcHJvdCk7CmV4dGVybiBsb25nIHZyZWFkKGNo YXIgKmJ1ZiwgY2hhciAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7CmV4dGVybiB2b2lkIHZt ZnJlZV9hcmVhX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdW5zaWduZWQgbG9uZyBzaXpl KTsKZXh0ZXJuIGludCB2bWFsbG9jX2FyZWFfcGFnZXModW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1 bnNpZ25lZCBsb25nIHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBnZnBf bWFzaywgcGdwcm90X3QgcHJvdCk7CgoKCgoKc3RhdGljIGlubGluZSB2b2lkICogdm1hbGxvYyAo dW5zaWduZWQgbG9uZyBzaXplKQp7CiAgICAgICAgcmV0dXJuIF9fdm1hbGxvY19SNzk5OTVjNWIo c2l6ZSwgKDB4MjAgfCAweDEwIHwgMHg0MCB8IDB4ODAgfCAweDEwMCkgfCAweDAyLCAoeyBwZ3By b3RfdCBfX3JldDsgaWYgKCgoX19idWlsdGluX2NvbnN0YW50X3AoKDAqMzIrMTMpKSA/IGNvbnN0 YW50X3Rlc3RfYml0KCgoMCozMisxMykpLChib290X2NwdV9kYXRhX1IwNjU3ZDAzNy54ODZfY2Fw YWJpbGl0eSkpIDogdmFyaWFibGVfdGVzdF9iaXQoKCgwKjMyKzEzKSksKGJvb3RfY3B1X2RhdGFf UjA2NTdkMDM3Lng4Nl9jYXBhYmlsaXR5KSkpKSkgX19yZXQgPSAoKHBncHJvdF90KSB7ICgoKDB4 MDAxIHwgMHgwMDIgfCAweDA0MCB8IDB4MDIwKSkgfCAweDEwMCkgfSApOyBlbHNlIF9fcmV0ID0g KChwZ3Byb3RfdCkgeyAoKDB4MDAxIHwgMHgwMDIgfCAweDA0MCB8IDB4MDIwKSkgfSApOyBfX3Jl dDsgfSkpOwp9CgoKCgoKc3RhdGljIGlubGluZSB2b2lkICogdm1hbGxvY19kbWEgKHVuc2lnbmVk IGxvbmcgc2l6ZSkKewogICAgICAgIHJldHVybiBfX3ZtYWxsb2NfUjc5OTk1YzViKHNpemUsICgw eDIwIHwgMHgxMCB8IDB4NDAgfCAweDgwIHwgMHgxMDApfDB4MDEsICh7IHBncHJvdF90IF9fcmV0 OyBpZiAoKChfX2J1aWx0aW5fY29uc3RhbnRfcCgoMCozMisxMykpID8gY29uc3RhbnRfdGVzdF9i aXQoKCgwKjMyKzEzKSksKGJvb3RfY3B1X2RhdGFfUjA2NTdkMDM3Lng4Nl9jYXBhYmlsaXR5KSkg OiB2YXJpYWJsZV90ZXN0X2JpdCgoKDAqMzIrMTMpKSwoYm9vdF9jcHVfZGF0YV9SMDY1N2QwMzcu eDg2X2NhcGFiaWxpdHkpKSkpKSBfX3JldCA9ICgocGdwcm90X3QpIHsgKCgoMHgwMDEgfCAweDAw MiB8IDB4MDQwIHwgMHgwMjApKSB8IDB4MTAwKSB9ICk7IGVsc2UgX19yZXQgPSAoKHBncHJvdF90 KSB7ICgoMHgwMDEgfCAweDAwMiB8IDB4MDQwIHwgMHgwMjApKSB9ICk7IF9fcmV0OyB9KSk7Cn0K CgoKCgpzdGF0aWMgaW5saW5lIHZvaWQgKiB2bWFsbG9jXzMyKHVuc2lnbmVkIGxvbmcgc2l6ZSkK ewogICAgICAgIHJldHVybiBfX3ZtYWxsb2NfUjc5OTk1YzViKHNpemUsICgweDIwIHwgMHgxMCB8 IDB4NDAgfCAweDgwIHwgMHgxMDApLCAoeyBwZ3Byb3RfdCBfX3JldDsgaWYgKCgoX19idWlsdGlu X2NvbnN0YW50X3AoKDAqMzIrMTMpKSA/IGNvbnN0YW50X3Rlc3RfYml0KCgoMCozMisxMykpLChi b290X2NwdV9kYXRhX1IwNjU3ZDAzNy54ODZfY2FwYWJpbGl0eSkpIDogdmFyaWFibGVfdGVzdF9i aXQoKCgwKjMyKzEzKSksKGJvb3RfY3B1X2RhdGFfUjA2NTdkMDM3Lng4Nl9jYXBhYmlsaXR5KSkp KSkgX19yZXQgPSAoKHBncHJvdF90KSB7ICgoKDB4MDAxIHwgMHgwMDIgfCAweDA0MCB8IDB4MDIw KSkgfCAweDEwMCkgfSApOyBlbHNlIF9fcmV0ID0gKChwZ3Byb3RfdCkgeyAoKDB4MDAxIHwgMHgw MDIgfCAweDA0MCB8IDB4MDIwKSkgfSApOyBfX3JldDsgfSkpOwp9CgoKCgoKZXh0ZXJuIHJ3bG9j a190IHZtbGlzdF9sb2NrOwoKZXh0ZXJuIHN0cnVjdCB2bV9zdHJ1Y3QgKiB2bWxpc3Q7CiMgNDgg Ii91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvYXNtL2lvLmgiIDIKIyA3NiAiL3Vzci9z cmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9hc20vaW8uaCIKc3RhdGljIGlubGluZSB1bnNpZ25l ZCBsb25nIHZpcnRfdG9fcGh5cyh2b2xhdGlsZSB2b2lkICogYWRkcmVzcykKewogICAgICAgIHJl dHVybiAoKHVuc2lnbmVkIGxvbmcpKGFkZHJlc3MpLSgodW5zaWduZWQgbG9uZykoMHhDMDAwMDAw MCkpKTsKfQojIDk0ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2FzbS9pby5oIgpz dGF0aWMgaW5saW5lIHZvaWQgKiBwaHlzX3RvX3ZpcnQodW5zaWduZWQgbG9uZyBhZGRyZXNzKQp7 CiAgICAgICAgcmV0dXJuICgodm9pZCAqKSgodW5zaWduZWQgbG9uZykoYWRkcmVzcykrKCh1bnNp Z25lZCBsb25nKSgweEMwMDAwMDAwKSkpKTsKfQojIDEwOCAiL3Vzci9zcmMvbGludXgtMi40LjIw LTgvaW5jbHVkZS9hc20vaW8uaCIKZXh0ZXJuIHZvaWQgKiBfX2lvcmVtYXBfUjllYWMwNDJhKHVu c2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxh Z3MpOwojIDEyMiAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9hc20vaW8uaCIKc3Rh dGljIGlubGluZSB2b2lkICogaW9yZW1hcCAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVk IGxvbmcgc2l6ZSkKewogICAgICAgIHJldHVybiBfX2lvcmVtYXBfUjllYWMwNDJhKG9mZnNldCwg c2l6ZSwgMCk7Cn0KIyAxNDcgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvYXNtL2lv LmgiCnN0YXRpYyBpbmxpbmUgdm9pZCAqIGlvcmVtYXBfbm9jYWNoZSAodW5zaWduZWQgbG9uZyBv ZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKewogICAgICAgIHJldHVybiBfX2lvcmVtYXBfUjll YWMwNDJhKG9mZnNldCwgc2l6ZSwgMHgwMTApOwp9CgpleHRlcm4gdm9pZCBpb3VubWFwX1I1ZmIx OTZkNCh2b2lkICphZGRyKTsKCgoKCgoKZXh0ZXJuIHZvaWQgKmJ0X2lvcmVtYXAodW5zaWduZWQg bG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CmV4dGVybiB2b2lkIGJ0X2lvdW5tYXAo dm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKTsKIyAyMzMgIi91c3Ivc3JjL2xpbnV4LTIu NC4yMC04L2luY2x1ZGUvYXNtL2lvLmgiCnN0YXRpYyBpbmxpbmUgaW50IGNoZWNrX3NpZ25hdHVy ZSh1bnNpZ25lZCBsb25nIGlvX2FkZHIsCiAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2ln bmF0dXJlLCBpbnQgbGVuZ3RoKQp7CiAgICAgICAgaW50IHJldHZhbCA9IDA7CiAgICAgICAgZG8g ewogICAgICAgICAgICAgICAgaWYgKCgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKCh2b2lk ICopKGlvX2FkZHIpKSkgIT0gKnNpZ25hdHVyZSkKICAgICAgICAgICAgICAgICAgICAgICAgZ290 byBvdXQ7CiAgICAgICAgICAgICAgICBpb19hZGRyKys7CiAgICAgICAgICAgICAgICBzaWduYXR1 cmUrKzsKICAgICAgICAgICAgICAgIGxlbmd0aC0tOwogICAgICAgIH0gd2hpbGUgKGxlbmd0aCk7 CiAgICAgICAgcmV0dmFsID0gMTsKb3V0OgogICAgICAgIHJldHVybiByZXR2YWw7Cn0KIyAyNjMg Ii91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvYXNtL2lvLmgiCnN0YXRpYyBpbmxpbmUg aW50IGlzYV9jaGVja19zaWduYXR1cmUodW5zaWduZWQgbG9uZyBpb19hZGRyLAogICAgICAgIGNv bnN0IHVuc2lnbmVkIGNoYXIgKnNpZ25hdHVyZSwgaW50IGxlbmd0aCkKewogICAgICAgIGludCBy ZXR2YWwgPSAwOwogICAgICAgIGRvIHsKICAgICAgICAgICAgICAgIGlmICgoKih2b2xhdGlsZSB1 bnNpZ25lZCBjaGFyICopICgodm9pZCAqKSgoKGNoYXIgKikoKCh1bnNpZ25lZCBsb25nKSgweEMw MDAwMDAwKSkpKSArIChpb19hZGRyKSkpKSAhPSAqc2lnbmF0dXJlKQogICAgICAgICAgICAgICAg ICAgICAgICBnb3RvIG91dDsKICAgICAgICAgICAgICAgIGlvX2FkZHIrKzsKICAgICAgICAgICAg ICAgIHNpZ25hdHVyZSsrOwogICAgICAgICAgICAgICAgbGVuZ3RoLS07CiAgICAgICAgfSB3aGls ZSAobGVuZ3RoKTsKICAgICAgICByZXR2YWwgPSAxOwpvdXQ6CiAgICAgICAgcmV0dXJuIHJldHZh bDsKfQojIDQwOSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9hc20vaW8uaCIKc3Rh dGljIGlubGluZSB1bnNpZ25lZCBjaGFyIGluYih1bnNpZ25lZCBzaG9ydCBwb3J0KSB7IHVuc2ln bmVkIGNoYXIgX3Y7IF9fYXNtX18gX192b2xhdGlsZV9fICgiaW4iICJiIiAiICUiICJ3IiAiMSwl IiAiIiAiMCIgOiAiPWEiIChfdikgOiAiTmQiIChwb3J0KSApOyByZXR1cm4gX3Y7IH0gc3RhdGlj IGlubGluZSB1bnNpZ25lZCBjaGFyIGluYl9wKHVuc2lnbmVkIHNob3J0IHBvcnQpIHsgdW5zaWdu ZWQgY2hhciBfdjsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJpbiIgImIiICIgJSIgInciICIxLCUi ICIiICIwIiAiXG5vdXRiICUlYWwsJDB4ODAiIDogIj1hIiAoX3YpIDogIk5kIiAocG9ydCkgKTsg cmV0dXJuIF92OyB9CgoKc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBpbncodW5zaWduZWQg c2hvcnQgcG9ydCkgeyB1bnNpZ25lZCBzaG9ydCBfdjsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJp biIgInciICIgJSIgInciICIxLCUiICIiICIwIiA6ICI9YSIgKF92KSA6ICJOZCIgKHBvcnQpICk7 IHJldHVybiBfdjsgfSBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGlud19wKHVuc2lnbmVk IHNob3J0IHBvcnQpIHsgdW5zaWduZWQgc2hvcnQgX3Y7IF9fYXNtX18gX192b2xhdGlsZV9fICgi aW4iICJ3IiAiICUiICJ3IiAiMSwlIiAiIiAiMCIgIlxub3V0YiAlJWFsLCQweDgwIiA6ICI9YSIg KF92KSA6ICJOZCIgKHBvcnQpICk7IHJldHVybiBfdjsgfQoKCnN0YXRpYyBpbmxpbmUgdW5zaWdu ZWQgaW50IGlubCh1bnNpZ25lZCBzaG9ydCBwb3J0KSB7IHVuc2lnbmVkIGludCBfdjsgX19hc21f XyBfX3ZvbGF0aWxlX18gKCJpbiIgImwiICIgJSIgInciICIxLCUiICIiICIwIiA6ICI9YSIgKF92 KSA6ICJOZCIgKHBvcnQpICk7IHJldHVybiBfdjsgfSBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGlu dCBpbmxfcCh1bnNpZ25lZCBzaG9ydCBwb3J0KSB7IHVuc2lnbmVkIGludCBfdjsgX19hc21fXyBf X3ZvbGF0aWxlX18gKCJpbiIgImwiICIgJSIgInciICIxLCUiICIiICIwIiAiXG5vdXRiICUlYWws JDB4ODAiIDogIj1hIiAoX3YpIDogIk5kIiAocG9ydCkgKTsgcmV0dXJuIF92OyB9CgoKc3RhdGlj IGlubGluZSB2b2lkIG91dGIodW5zaWduZWQgY2hhciB2YWx1ZSwgdW5zaWduZWQgc2hvcnQgcG9y dCkgeyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm91dCIgImIiICIgJSIgImIiICIwLCUiICJ3IiAi MSIgOiA6ICJhIiAodmFsdWUpLCAiTmQiIChwb3J0KSk7IH0gc3RhdGljIGlubGluZSB2b2lkIG91 dGJfcCh1bnNpZ25lZCBjaGFyIHZhbHVlLCB1bnNpZ25lZCBzaG9ydCBwb3J0KSB7IF9fYXNtX18g X192b2xhdGlsZV9fICgib3V0IiAiYiIgIiAlIiAiYiIgIjAsJSIgInciICIxIiAiXG5vdXRiICUl YWwsJDB4ODAiIDogOiAiYSIgKHZhbHVlKSwgIk5kIiAocG9ydCkpO30Kc3RhdGljIGlubGluZSB2 b2lkIG91dHcodW5zaWduZWQgc2hvcnQgdmFsdWUsIHVuc2lnbmVkIHNob3J0IHBvcnQpIHsgX19h c21fXyBfX3ZvbGF0aWxlX18gKCJvdXQiICJ3IiAiICUiICJ3IiAiMCwlIiAidyIgIjEiIDogOiAi YSIgKHZhbHVlKSwgIk5kIiAocG9ydCkpOyB9IHN0YXRpYyBpbmxpbmUgdm9pZCBvdXR3X3AodW5z aWduZWQgc2hvcnQgdmFsdWUsIHVuc2lnbmVkIHNob3J0IHBvcnQpIHsgX19hc21fXyBfX3ZvbGF0 aWxlX18gKCJvdXQiICJ3IiAiICUiICJ3IiAiMCwlIiAidyIgIjEiICJcbm91dGIgJSVhbCwkMHg4 MCIgOiA6ICJhIiAodmFsdWUpLCAiTmQiIChwb3J0KSk7fQpzdGF0aWMgaW5saW5lIHZvaWQgb3V0 bCh1bnNpZ25lZCBpbnQgdmFsdWUsIHVuc2lnbmVkIHNob3J0IHBvcnQpIHsgX19hc21fXyBfX3Zv bGF0aWxlX18gKCJvdXQiICJsIiAiICUiICIwLCUiICJ3IiAiMSIgOiA6ICJhIiAodmFsdWUpLCAi TmQiIChwb3J0KSk7IH0gc3RhdGljIGlubGluZSB2b2lkIG91dGxfcCh1bnNpZ25lZCBpbnQgdmFs dWUsIHVuc2lnbmVkIHNob3J0IHBvcnQpIHsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJvdXQiICJs IiAiICUiICIwLCUiICJ3IiAiMSIgIlxub3V0YiAlJWFsLCQweDgwIiA6IDogImEiICh2YWx1ZSks ICJOZCIgKHBvcnQpKTt9CgpzdGF0aWMgaW5saW5lIHZvaWQgaW5zYih1bnNpZ25lZCBzaG9ydCBw b3J0LCB2b2lkICogYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCkgeyBfX2FzbV9fIF9fdm9sYXRp bGVfXyAoInJlcCA7IGlucyIgImIiIDogIj1EIiAoYWRkciksICI9YyIgKGNvdW50KSA6ICJkIiAo cG9ydCksIjAiIChhZGRyKSwiMSIgKGNvdW50KSk7IH0Kc3RhdGljIGlubGluZSB2b2lkIGluc3co dW5zaWduZWQgc2hvcnQgcG9ydCwgdm9pZCAqIGFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpIHsg X19hc21fXyBfX3ZvbGF0aWxlX18gKCJyZXAgOyBpbnMiICJ3IiA6ICI9RCIgKGFkZHIpLCAiPWMi IChjb3VudCkgOiAiZCIgKHBvcnQpLCIwIiAoYWRkciksIjEiIChjb3VudCkpOyB9CnN0YXRpYyBp bmxpbmUgdm9pZCBpbnNsKHVuc2lnbmVkIHNob3J0IHBvcnQsIHZvaWQgKiBhZGRyLCB1bnNpZ25l ZCBsb25nIGNvdW50KSB7IF9fYXNtX18gX192b2xhdGlsZV9fICgicmVwIDsgaW5zIiAibCIgOiAi PUQiIChhZGRyKSwgIj1jIiAoY291bnQpIDogImQiIChwb3J0KSwiMCIgKGFkZHIpLCIxIiAoY291 bnQpKTsgfQoKc3RhdGljIGlubGluZSB2b2lkIG91dHNiKHVuc2lnbmVkIHNob3J0IHBvcnQsIGNv bnN0IHZvaWQgKiBhZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KSB7IF9fYXNtX18gX192b2xhdGls ZV9fICgicmVwIDsgb3V0cyIgImIiIDogIj1TIiAoYWRkciksICI9YyIgKGNvdW50KSA6ICJkIiAo cG9ydCksIjAiIChhZGRyKSwiMSIgKGNvdW50KSk7IH0Kc3RhdGljIGlubGluZSB2b2lkIG91dHN3 KHVuc2lnbmVkIHNob3J0IHBvcnQsIGNvbnN0IHZvaWQgKiBhZGRyLCB1bnNpZ25lZCBsb25nIGNv dW50KSB7IF9fYXNtX18gX192b2xhdGlsZV9fICgicmVwIDsgb3V0cyIgInciIDogIj1TIiAoYWRk ciksICI9YyIgKGNvdW50KSA6ICJkIiAocG9ydCksIjAiIChhZGRyKSwiMSIgKGNvdW50KSk7IH0K c3RhdGljIGlubGluZSB2b2lkIG91dHNsKHVuc2lnbmVkIHNob3J0IHBvcnQsIGNvbnN0IHZvaWQg KiBhZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KSB7IF9fYXNtX18gX192b2xhdGlsZV9fICgicmVw IDsgb3V0cyIgImwiIDogIj1TIiAoYWRkciksICI9YyIgKGNvdW50KSA6ICJkIiAocG9ydCksIjAi IChhZGRyKSwiMSIgKGNvdW50KSk7IH0KIyAzNiAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5j bHVkZS9hc20vcGNpLmgiIDIKCnN0cnVjdCBwY2lfZGV2OwojIDUyICIvdXNyL3NyYy9saW51eC0y LjQuMjAtOC9pbmNsdWRlL2FzbS9wY2kuaCIKZXh0ZXJuIHZvaWQgKnBjaV9hbGxvY19jb25zaXN0 ZW50X1I3YzEyNTZiYyhzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIHNpemVfdCBzaXplLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSk7CiMgNjMg Ii91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvYXNtL3BjaS5oIgpleHRlcm4gdm9pZCBw Y2lfZnJlZV9jb25zaXN0ZW50X1I2MzM1NmZhMChzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIHNpemVf dCBzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnZhZGRyLCBkbWFf YWRkcl90IGRtYV9oYW5kbGUpOwoKCgoKCgoKc3RhdGljIGlubGluZSBkbWFfYWRkcl90IHBjaV9t YXBfc2luZ2xlKHN0cnVjdCBwY2lfZGV2ICpod2Rldiwgdm9pZCAqcHRyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCnsK ICAgICAgICBpZiAoZGlyZWN0aW9uID09IDMpCiAgICAgICAgICAgICAgICBfX291dF9vZl9saW5l X2J1Z19SOGIwZmQzYzUoNzYpOwogICAgICAgIDsKICAgICAgICByZXR1cm4gdmlydF90b19waHlz KHB0cik7Cn0KIyA4OCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9hc20vcGNpLmgi CnN0YXRpYyBpbmxpbmUgdm9pZCBwY2lfdW5tYXBfc2luZ2xlKHN0cnVjdCBwY2lfZGV2ICpod2Rl diwgZG1hX2FkZHJfdCBkbWFfYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCnsKICAgICAgICBpZiAoZGlyZWN0aW9uID09 IDMpCiAgICAgICAgICAgICAgICBfX291dF9vZl9saW5lX2J1Z19SOGIwZmQzYzUoOTIpOwoKfQoK CgoKCnN0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdCBwY2lfbWFwX3BhZ2Uoc3RydWN0IHBjaV9kZXYg Kmh3ZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24p CnsKICAgICAgICBpZiAoZGlyZWN0aW9uID09IDMpCiAgICAgICAgICAgICAgICBfX291dF9vZl9s aW5lX2J1Z19SOGIwZmQzYzUoMTA0KTsKCiAgICAgICAgcmV0dXJuICgoZG1hX2FkZHJfdCkocGFn ZSAtIG1lbV9tYXBfUjQxMWZlMmYwKSAqCiAgICAgICAgICAgICAgICAoZG1hX2FkZHJfdCkgKDFV TCA8PCAxMikgKwogICAgICAgICAgICAgICAgKGRtYV9hZGRyX3QpIG9mZnNldCk7Cn0KCnN0YXRp YyBpbmxpbmUgdm9pZCBwY2lfdW5tYXBfcGFnZShzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIGRtYV9h ZGRyX3QgZG1hX2FkZHJlc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl X3Qgc2l6ZSwgaW50IGRpcmVjdGlvbikKewogICAgICAgIGlmIChkaXJlY3Rpb24gPT0gMykKICAg ICAgICAgICAgICAgIF9fb3V0X29mX2xpbmVfYnVnX1I4YjBmZDNjNSgxMTUpOwoKfQojIDE0MiAi L3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9hc20vcGNpLmgiCnN0YXRpYyBpbmxpbmUg aW50IHBjaV9tYXBfc2coc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3Qg KnNnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuZW50cywgaW50IGRpcmVjdGlv bikKewogICAgICAgIGludCBpOwoKICAgICAgICBpZiAoZGlyZWN0aW9uID09IDMpCiAgICAgICAg ICAgICAgICBfX291dF9vZl9saW5lX2J1Z19SOGIwZmQzYzUoMTQ4KTsKCgoKCiAgICAgICAgZm9y IChpID0gMDsgaSA8IG5lbnRzOyBpKysgKSB7CiAgICAgICAgICAgICAgICBpZiAoc2dbaV0uYWRk cmVzcyAmJiBzZ1tpXS5wYWdlKQogICAgICAgICAgICAgICAgICAgICAgICBfX291dF9vZl9saW5l X2J1Z19SOGIwZmQzYzUoMTU1KTsKICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFzZ1tpXS5hZGRy ZXNzICYmICFzZ1tpXS5wYWdlKQogICAgICAgICAgICAgICAgICAgICAgICBfX291dF9vZl9saW5l X2J1Z19SOGIwZmQzYzUoMTU3KTsKCiAgICAgICAgICAgICAgICBpZiAoc2dbaV0uYWRkcmVzcykK ICAgICAgICAgICAgICAgICAgICAgICAgc2dbaV0uZG1hX2FkZHJlc3MgPSB2aXJ0X3RvX3BoeXMo c2dbaV0uYWRkcmVzcyk7CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAg ICAgIHNnW2ldLmRtYV9hZGRyZXNzID0gKChzZ1tpXS5wYWdlIC0gbWVtX21hcF9SNDExZmUyZjAp IDw8IDEyKSArIHNnW2ldLm9mZnNldDsKICAgICAgICB9CgogICAgICAgIDsKICAgICAgICByZXR1 cm4gbmVudHM7Cn0KCgoKCgpzdGF0aWMgaW5saW5lIHZvaWQgcGNpX3VubWFwX3NnKHN0cnVjdCBw Y2lfZGV2ICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgbmVudHMsIGludCBkaXJlY3Rpb24pCnsKICAgICAgICBpZiAoZGly ZWN0aW9uID09IDMpCiAgICAgICAgICAgICAgICBfX291dF9vZl9saW5lX2J1Z19SOGIwZmQzYzUo MTc3KTsKCn0KIyAxOTAgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvYXNtL3BjaS5o IgpzdGF0aWMgaW5saW5lIHZvaWQgcGNpX2RtYV9zeW5jX3NpbmdsZShzdHJ1Y3QgcGNpX2RldiAq aHdkZXYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtYV9hZGRyX3Qg ZG1hX2hhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90 IHNpemUsIGludCBkaXJlY3Rpb24pCnsKICAgICAgICBpZiAoZGlyZWN0aW9uID09IDMpCiAgICAg ICAgICAgICAgICBfX291dF9vZl9saW5lX2J1Z19SOGIwZmQzYzUoMTk1KTsKICAgICAgICA7Cn0K CgoKCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBwY2lfZG1hX3N5bmNfc2coc3RydWN0IHBjaV9kZXYg Kmh3ZGV2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY2F0dGVy bGlzdCAqc2csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5lbGVtcywg aW50IGRpcmVjdGlvbikKewogICAgICAgIGlmIChkaXJlY3Rpb24gPT0gMykKICAgICAgICAgICAg ICAgIF9fb3V0X29mX2xpbmVfYnVnX1I4YjBmZDNjNSgyMTApOwogICAgICAgIDsKfQoKCgoKCgpz dGF0aWMgaW5saW5lIGludCBwY2lfZG1hX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqaHdkZXYs IHU2NCBtYXNrKQp7CgoKCgoKICAgICAgICBpZihtYXNrIDwgMHgwMGZmZmZmZikKICAgICAgICAg ICAgICAgIHJldHVybiAwOwoKICAgICAgICByZXR1cm4gMTsKfQoKCgoKc3RhdGljIF9faW5saW5l X18gZG1hNjRfYWRkcl90CnBjaV9kYWNfcGFnZV90b19kbWEoc3RydWN0IHBjaV9kZXYgKnBkZXYs IHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgaW50IGRpcmVjdGlvbikK ewogICAgICAgIHJldHVybiAoKGRtYTY0X2FkZHJfdCkgKChwYWdlIC0gbWVtX21hcF9SNDExZmUy ZjApIDw8IDEyKSArCiAgICAgICAgICAgICAgICAoZG1hNjRfYWRkcl90KSBvZmZzZXQpOwp9Cgpz dGF0aWMgX19pbmxpbmVfXyBzdHJ1Y3QgcGFnZSAqCnBjaV9kYWNfZG1hX3RvX3BhZ2Uoc3RydWN0 IHBjaV9kZXYgKnBkZXYsIGRtYTY0X2FkZHJfdCBkbWFfYWRkcikKewogICAgICAgIHVuc2lnbmVk IGxvbmcgcG9mZiA9IChkbWFfYWRkciA+PiAxMik7CgogICAgICAgIHJldHVybiBtZW1fbWFwX1I0 MTFmZTJmMCArIHBvZmY7Cn0KCnN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcKcGNpX2Rh Y19kbWFfdG9fb2Zmc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBkbWE2NF9hZGRyX3QgZG1hX2Fk ZHIpCnsKICAgICAgICByZXR1cm4gKGRtYV9hZGRyICYgfih+KCgxVUwgPDwgMTIpLTEpKSk7Cn0K CnN0YXRpYyBfX2lubGluZV9fIHZvaWQKcGNpX2RhY19kbWFfc3luY19zaW5nbGUoc3RydWN0IHBj aV9kZXYgKnBkZXYsIGRtYTY0X2FkZHJfdCBkbWFfYWRkciwgc2l6ZV90IGxlbiwgaW50IGRpcmVj dGlvbikKewogICAgICAgIDsKfQojIDI3MSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVk ZS9hc20vcGNpLmgiCnN0YXRpYyBpbmxpbmUgaW50IHBjaV9jb250cm9sbGVyX251bShzdHJ1Y3Qg cGNpX2RldiAqZGV2KQp7CiAgICAgICAgcmV0dXJuIDA7Cn0KCgpleHRlcm4gaW50IHBjaV9tbWFw X3BhZ2VfcmFuZ2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2 bWEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIHBjaV9tbWFwX3N0YXRlIG1t YXBfc3RhdGUsIGludCB3cml0ZV9jb21iaW5lKTsKIyA2NTggIi91c3Ivc3JjL2xpbnV4LTIuNC4y MC04L2luY2x1ZGUvbGludXgvcGNpLmgiIDIKIyA3MjUgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04 L2luY2x1ZGUvbGludXgvcGNpLmgiCnN0YXRpYyBpbmxpbmUgaW50IHBjaV9tb2R1bGVfaW5pdChz dHJ1Y3QgcGNpX2RyaXZlciAqZHJ2KQp7CiAgICAgICAgaW50IHJjID0gcGNpX3JlZ2lzdGVyX2Ry aXZlcl9SMTRjYzk5MGEgKGRydik7CgogICAgICAgIGlmIChyYyA+IDApCiAgICAgICAgICAgICAg ICByZXR1cm4gMDsKIyA3NDAgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgv cGNpLmgiCiAgICAgICAgaWYgKHJjID09IDApCiAgICAgICAgICAgICAgICByYyA9IC0xOTsKCgoK CiAgICAgICAgcGNpX3VucmVnaXN0ZXJfZHJpdmVyX1JkYTQxMzAwZSAoZHJ2KTsKCiAgICAgICAg cmV0dXJuIHJjOwp9CiMgNzcwICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4 L3BjaS5oIgpzdGF0aWMgaW5saW5lIHZvaWQgKnBjaV9nZXRfZHJ2ZGF0YSAoc3RydWN0IHBjaV9k ZXYgKnBkZXYpCnsKICAgICAgICByZXR1cm4gcGRldi0+ZHJpdmVyX2RhdGE7Cn0KCnN0YXRpYyBp bmxpbmUgdm9pZCBwY2lfc2V0X2RydmRhdGEgKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB2b2lkICpk YXRhKQp7CiAgICAgICAgcGRldi0+ZHJpdmVyX2RhdGEgPSBkYXRhOwp9CiMgNzg3ICIvdXNyL3Ny Yy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3BjaS5oIgpzdHJ1Y3QgcGNpX2ZpeHVwIHsK ICAgICAgICBpbnQgcGFzczsKICAgICAgICB1MTYgdmVuZG9yLCBkZXZpY2U7CiAgICAgICAgdm9p ZCAoKmhvb2spKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwp9OwoKZXh0ZXJuIHN0cnVjdCBwY2lfZml4 dXAgcGNpYmlvc19maXh1cHNbXTsKCgoKCnZvaWQgcGNpX2ZpeHVwX2RldmljZShpbnQgcGFzcywg c3RydWN0IHBjaV9kZXYgKmRldik7CgpleHRlcm4gaW50IHBjaV9wY2lfcHJvYmxlbXNfUmRjMTRl ZGE3OwojIDEyNiAiaC9za2RydjFzdC5oIiAyCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIw LTgvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCIgMQojIDI4ICIvdXNyL3NyYy9saW51eC0yLjQu MjAtOC9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4y MC04L2luY2x1ZGUvbGludXgvaWYuaCIgMQojIDI0ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9p bmNsdWRlL2xpbnV4L2lmLmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9s aW51eC9oZGxjL2lvY3RsLmgiIDEKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIHVuc2lnbmVk IGludCBjbG9ja19yYXRlOwogICAgICAgIHVuc2lnbmVkIGludCBjbG9ja190eXBlOwogICAgICAg IHVuc2lnbmVkIHNob3J0IGxvb3BiYWNrOwp9IHN5bmNfc2VyaWFsX3NldHRpbmdzOwoKdHlwZWRl ZiBzdHJ1Y3QgewogICAgICAgIHVuc2lnbmVkIGludCBjbG9ja19yYXRlOwogICAgICAgIHVuc2ln bmVkIGludCBjbG9ja190eXBlOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGxvb3BiYWNrOwogICAg ICAgIHVuc2lnbmVkIGludCBzbG90X21hcDsKfSB0ZTFfc2V0dGluZ3M7Cgp0eXBlZGVmIHN0cnVj dCB7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgZW5jb2Rpbmc7CiAgICAgICAgdW5zaWduZWQgc2hv cnQgcGFyaXR5Owp9IHJhd19oZGxjX3Byb3RvOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIHVu c2lnbmVkIGludCB0MzkxOwogICAgICAgIHVuc2lnbmVkIGludCB0MzkyOwogICAgICAgIHVuc2ln bmVkIGludCBuMzkxOwogICAgICAgIHVuc2lnbmVkIGludCBuMzkyOwogICAgICAgIHVuc2lnbmVk IGludCBuMzkzOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGxtaTsKICAgICAgICB1bnNpZ25lZCBz aG9ydCBkY2U7Cn0gZnJfcHJvdG87Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgdW5zaWduZWQg aW50IGRsY2k7Cn0gZnJfcHJvdG9fcHZjOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgdW5zaWduZWQg aW50IGludGVydmFsOwogICAgdW5zaWduZWQgaW50IHRpbWVvdXQ7Cn0gY2lzY29fcHJvdG87CgoK CnVuaW9uIGhkbGNfc2V0dGluZ3MgewogICAgICAgIHJhd19oZGxjX3Byb3RvIHJhd19oZGxjOwog ICAgICAgIGNpc2NvX3Byb3RvIGNpc2NvOwogICAgICAgIGZyX3Byb3RvIGZyOwogICAgICAgIGZy X3Byb3RvX3B2YyBmcl9wdmM7Cn07Cgp1bmlvbiBsaW5lX3NldHRpbmdzIHsKICAgICAgICBzeW5j X3NlcmlhbF9zZXR0aW5ncyBzeW5jOwogICAgICAgIHRlMV9zZXR0aW5ncyB0ZTE7Cn07CiMgMjUg Ii91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvaWYuaCIgMgojIDg1ICIvdXNy L3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2lmLmgiCnN0cnVjdCBpZm1hcAp7CiAg ICAgICAgdW5zaWduZWQgbG9uZyBtZW1fc3RhcnQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyBtZW1f ZW5kOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGJhc2VfYWRkcjsKICAgICAgICB1bnNpZ25lZCBj aGFyIGlycTsKICAgICAgICB1bnNpZ25lZCBjaGFyIGRtYTsKICAgICAgICB1bnNpZ25lZCBjaGFy IHBvcnQ7Cgp9OwoKc3RydWN0IGlmX3NldHRpbmdzCnsKICAgICAgICB1bnNpZ25lZCBpbnQgdHlw ZTsKICAgICAgICB1bnNpZ25lZCBpbnQgc2l6ZTsKICAgICAgICB1bmlvbiB7CgogICAgICAgICAg ICAgICAgcmF3X2hkbGNfcHJvdG8gKnJhd19oZGxjOwogICAgICAgICAgICAgICAgY2lzY29fcHJv dG8gKmNpc2NvOwogICAgICAgICAgICAgICAgZnJfcHJvdG8gKmZyOwogICAgICAgICAgICAgICAg ZnJfcHJvdG9fcHZjICpmcl9wdmM7CgoKICAgICAgICAgICAgICAgIHN5bmNfc2VyaWFsX3NldHRp bmdzICpzeW5jOwogICAgICAgICAgICAgICAgdGUxX3NldHRpbmdzICp0ZTE7CiAgICAgICAgfSBp ZnNfaWZzdTsKfTsKIyAxMjAgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgv aWYuaCIKc3RydWN0IGlmcmVxCnsKCgogICAgICAgIHVuaW9uCiAgICAgICAgewogICAgICAgICAg ICAgICAgY2hhciBpZnJuX25hbWVbMTZdOwogICAgICAgIH0gaWZyX2lmcm47CgogICAgICAgIHVu aW9uIHsKICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciBpZnJ1X2FkZHI7CiAgICAgICAg ICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgaWZydV9kc3RhZGRyOwogICAgICAgICAgICAgICAgc3Ry dWN0IHNvY2thZGRyIGlmcnVfYnJvYWRhZGRyOwogICAgICAgICAgICAgICAgc3RydWN0IHNvY2th ZGRyIGlmcnVfbmV0bWFzazsKICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciBpZnJ1X2h3 YWRkcjsKICAgICAgICAgICAgICAgIHNob3J0IGlmcnVfZmxhZ3M7CiAgICAgICAgICAgICAgICBp bnQgaWZydV9pdmFsdWU7CiAgICAgICAgICAgICAgICBpbnQgaWZydV9tdHU7CiAgICAgICAgICAg ICAgICBzdHJ1Y3QgaWZtYXAgaWZydV9tYXA7CiAgICAgICAgICAgICAgICBjaGFyIGlmcnVfc2xh dmVbMTZdOwogICAgICAgICAgICAgICAgY2hhciBpZnJ1X25ld25hbWVbMTZdOwogICAgICAgICAg ICAgICAgY2hhciAqIGlmcnVfZGF0YTsKICAgICAgICAgICAgICAgIHN0cnVjdCBpZl9zZXR0aW5n cyBpZnJ1X3NldHRpbmdzOwogICAgICAgIH0gaWZyX2lmcnU7Cn07CiMgMTcxICIvdXNyL3NyYy9s aW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2lmLmgiCnN0cnVjdCBpZmNvbmYKewogICAgICAg IGludCBpZmNfbGVuOwogICAgICAgIHVuaW9uCiAgICAgICAgewogICAgICAgICAgICAgICAgY2hh ciAqIGlmY3VfYnVmOwogICAgICAgICAgICAgICAgc3RydWN0IGlmcmVxICppZmN1X3JlcTsKICAg ICAgICB9IGlmY19pZmN1Owp9OwojIDI5ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRl L2xpbnV4L25ldGRldmljZS5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVk ZS9saW51eC9pZl9ldGhlci5oIiAxCiMgOTQgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1 ZGUvbGludXgvaWZfZXRoZXIuaCIKc3RydWN0IGV0aGhkcgp7CiAgICAgICAgdW5zaWduZWQgY2hh ciBoX2Rlc3RbNl07CiAgICAgICAgdW5zaWduZWQgY2hhciBoX3NvdXJjZVs2XTsKICAgICAgICB1 bnNpZ25lZCBzaG9ydCBoX3Byb3RvOwp9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwojIDMwICIv dXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIiAyCiMgMSAi L3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9pZl9wYWNrZXQuaCIgMQoKCgpz dHJ1Y3Qgc29ja2FkZHJfcGt0CnsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzcGt0X2ZhbWlseTsK ICAgICAgICB1bnNpZ25lZCBjaGFyIHNwa3RfZGV2aWNlWzE0XTsKICAgICAgICB1bnNpZ25lZCBz aG9ydCBzcGt0X3Byb3RvY29sOwp9OwoKc3RydWN0IHNvY2thZGRyX2xsCnsKICAgICAgICB1bnNp Z25lZCBzaG9ydCBzbGxfZmFtaWx5OwogICAgICAgIHVuc2lnbmVkIHNob3J0IHNsbF9wcm90b2Nv bDsKICAgICAgICBpbnQgc2xsX2lmaW5kZXg7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc2xsX2hh dHlwZTsKICAgICAgICB1bnNpZ25lZCBjaGFyIHNsbF9wa3R0eXBlOwogICAgICAgIHVuc2lnbmVk IGNoYXIgc2xsX2hhbGVuOwogICAgICAgIHVuc2lnbmVkIGNoYXIgc2xsX2FkZHJbOF07Cn07CiMg NDMgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvaWZfcGFja2V0LmgiCnN0 cnVjdCB0cGFja2V0X3N0YXRzCnsKICAgICAgICB1bnNpZ25lZCBpbnQgdHBfcGFja2V0czsKICAg ICAgICB1bnNpZ25lZCBpbnQgdHBfZHJvcHM7Cn07CgpzdHJ1Y3QgdHBhY2tldF9oZHIKewogICAg ICAgIHVuc2lnbmVkIGxvbmcgdHBfc3RhdHVzOwoKCgoKCiAgICAgICAgdW5zaWduZWQgaW50IHRw X2xlbjsKICAgICAgICB1bnNpZ25lZCBpbnQgdHBfc25hcGxlbjsKICAgICAgICB1bnNpZ25lZCBz aG9ydCB0cF9tYWM7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgdHBfbmV0OwogICAgICAgIHVuc2ln bmVkIGludCB0cF9zZWM7CiAgICAgICAgdW5zaWduZWQgaW50IHRwX3VzZWM7Cn07CiMgODIgIi91 c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvaWZfcGFja2V0LmgiCnN0cnVjdCB0 cGFja2V0X3JlcQp7CiAgICAgICAgdW5zaWduZWQgaW50IHRwX2Jsb2NrX3NpemU7CiAgICAgICAg dW5zaWduZWQgaW50IHRwX2Jsb2NrX25yOwogICAgICAgIHVuc2lnbmVkIGludCB0cF9mcmFtZV9z aXplOwogICAgICAgIHVuc2lnbmVkIGludCB0cF9mcmFtZV9ucjsKfTsKCnN0cnVjdCBwYWNrZXRf bXJlcQp7CiAgICAgICAgaW50IG1yX2lmaW5kZXg7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgbXJf dHlwZTsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBtcl9hbGVuOwogICAgICAgIHVuc2lnbmVkIGNo YXIgbXJfYWRkcmVzc1s4XTsKfTsKIyAzMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVk ZS9saW51eC9uZXRkZXZpY2UuaCIgMgojIDQyICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNs dWRlL2xpbnV4L25ldGRldmljZS5oIgpzdHJ1Y3QgZGl2ZXJ0X2JsazsKc3RydWN0IHZsYW5fZ3Jv dXA7CiMgOTcgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbmV0ZGV2aWNl LmgiCnN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzCnsKICAgICAgICB1bnNpZ25lZCBsb25nIHJ4X3Bh Y2tldHM7CiAgICAgICAgdW5zaWduZWQgbG9uZyB0eF9wYWNrZXRzOwogICAgICAgIHVuc2lnbmVk IGxvbmcgcnhfYnl0ZXM7CiAgICAgICAgdW5zaWduZWQgbG9uZyB0eF9ieXRlczsKICAgICAgICB1 bnNpZ25lZCBsb25nIHJ4X2Vycm9yczsKICAgICAgICB1bnNpZ25lZCBsb25nIHR4X2Vycm9yczsK ICAgICAgICB1bnNpZ25lZCBsb25nIHJ4X2Ryb3BwZWQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyB0 eF9kcm9wcGVkOwogICAgICAgIHVuc2lnbmVkIGxvbmcgbXVsdGljYXN0OwogICAgICAgIHVuc2ln bmVkIGxvbmcgY29sbGlzaW9uczsKCgogICAgICAgIHVuc2lnbmVkIGxvbmcgcnhfbGVuZ3RoX2Vy cm9yczsKICAgICAgICB1bnNpZ25lZCBsb25nIHJ4X292ZXJfZXJyb3JzOwogICAgICAgIHVuc2ln bmVkIGxvbmcgcnhfY3JjX2Vycm9yczsKICAgICAgICB1bnNpZ25lZCBsb25nIHJ4X2ZyYW1lX2Vy cm9yczsKICAgICAgICB1bnNpZ25lZCBsb25nIHJ4X2ZpZm9fZXJyb3JzOwogICAgICAgIHVuc2ln bmVkIGxvbmcgcnhfbWlzc2VkX2Vycm9yczsKCgogICAgICAgIHVuc2lnbmVkIGxvbmcgdHhfYWJv cnRlZF9lcnJvcnM7CiAgICAgICAgdW5zaWduZWQgbG9uZyB0eF9jYXJyaWVyX2Vycm9yczsKICAg ICAgICB1bnNpZ25lZCBsb25nIHR4X2ZpZm9fZXJyb3JzOwogICAgICAgIHVuc2lnbmVkIGxvbmcg dHhfaGVhcnRiZWF0X2Vycm9yczsKICAgICAgICB1bnNpZ25lZCBsb25nIHR4X3dpbmRvd19lcnJv cnM7CgoKICAgICAgICB1bnNpZ25lZCBsb25nIHJ4X2NvbXByZXNzZWQ7CiAgICAgICAgdW5zaWdu ZWQgbG9uZyB0eF9jb21wcmVzc2VkOwp9OwoKCgplbnVtIHsKICAgICAgICBJRl9QT1JUX1VOS05P V04gPSAwLAogICAgICAgIElGX1BPUlRfMTBCQVNFMiwKICAgICAgICBJRl9QT1JUXzEwQkFTRVQs CiAgICAgICAgSUZfUE9SVF9BVUksCiAgICAgICAgSUZfUE9SVF8xMDBCQVNFVCwKICAgICAgICBJ Rl9QT1JUXzEwMEJBU0VUWCwKICAgICAgICBJRl9QT1JUXzEwMEJBU0VGWAp9OwoKCgpleHRlcm4g Y29uc3QgY2hhciAqaWZfcG9ydF90ZXh0X1I5Y2YwYzY0ZltdOwoKCiMgMSAiL3Vzci9zcmMvbGlu dXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9za2J1ZmYuaCIgMQojIDg3ICIvdXNyL3NyYy9saW51 eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIgpzdHJ1Y3QgbmZfY29ubnRyYWNrIHsK ICAgICAgICBhdG9taWNfdCB1c2U7CiAgICAgICAgdm9pZCAoKmRlc3Ryb3kpKHN0cnVjdCBuZl9j b25udHJhY2sgKik7Cn07CgpzdHJ1Y3QgbmZfY3RfaW5mbyB7CiAgICAgICAgc3RydWN0IG5mX2Nv bm50cmFjayAqbWFzdGVyOwp9OwoKCnN0cnVjdCBza19idWZmX2hlYWQgewoKICAgICAgICBzdHJ1 Y3Qgc2tfYnVmZiAqIG5leHQ7CiAgICAgICAgc3RydWN0IHNrX2J1ZmYgKiBwcmV2OwoKICAgICAg ICBfX3UzMiBxbGVuOwogICAgICAgIHNwaW5sb2NrX3QgbG9jazsKfTsKCnN0cnVjdCBza19idWZm OwoKCgp0eXBlZGVmIHN0cnVjdCBza2JfZnJhZ19zdHJ1Y3Qgc2tiX2ZyYWdfdDsKCnN0cnVjdCBz a2JfZnJhZ19zdHJ1Y3QKewogICAgICAgIHN0cnVjdCBwYWdlICpwYWdlOwogICAgICAgIF9fdTE2 IHBhZ2Vfb2Zmc2V0OwogICAgICAgIF9fdTE2IHNpemU7Cn07CgoKCgpzdHJ1Y3Qgc2tiX3NoYXJl ZF9pbmZvIHsKICAgICAgICBhdG9taWNfdCBkYXRhcmVmOwogICAgICAgIHVuc2lnbmVkIGludCBu cl9mcmFnczsKICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqZnJhZ19saXN0OwogICAgICAgIHNrYl9m cmFnX3QgZnJhZ3NbNl07Cn07CgpzdHJ1Y3Qgc2tfYnVmZiB7CgogICAgICAgIHN0cnVjdCBza19i dWZmICogbmV4dDsKICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqIHByZXY7CgogICAgICAgIHN0cnVj dCBza19idWZmX2hlYWQgKiBsaXN0OwogICAgICAgIHN0cnVjdCBzb2NrICpzazsKICAgICAgICBz dHJ1Y3QgdGltZXZhbCBzdGFtcDsKICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwoKCiAg ICAgICAgdW5pb24KICAgICAgICB7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgdGNwaGRyICp0aDsK ICAgICAgICAgICAgICAgIHN0cnVjdCB1ZHBoZHIgKnVoOwogICAgICAgICAgICAgICAgc3RydWN0 IGljbXBoZHIgKmljbXBoOwogICAgICAgICAgICAgICAgc3RydWN0IGlnbXBoZHIgKmlnbXBoOwog ICAgICAgICAgICAgICAgc3RydWN0IGlwaGRyICppcGlwaDsKICAgICAgICAgICAgICAgIHN0cnVj dCBzcHhoZHIgKnNweGg7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpyYXc7CiAgICAg ICAgfSBoOwoKCiAgICAgICAgdW5pb24KICAgICAgICB7CiAgICAgICAgICAgICAgICBzdHJ1Y3Qg aXBoZHIgKmlwaDsKICAgICAgICAgICAgICAgIHN0cnVjdCBpcHY2aGRyICppcHY2aDsKICAgICAg ICAgICAgICAgIHN0cnVjdCBhcnBoZHIgKmFycGg7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgaXB4 aGRyICppcHhoOwogICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqcmF3OwogICAgICAgIH0g bmg7CgoKICAgICAgICB1bmlvbgogICAgICAgIHsKICAgICAgICAgICAgICAgIHN0cnVjdCBldGho ZHIgKmV0aGVybmV0OwogICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqcmF3OwogICAgICAg IH0gbWFjOwoKICAgICAgICBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7CgoKCgoKCgogICAgICAgIGNo YXIgY2JbNDhdOwoKICAgICAgICB1bnNpZ25lZCBpbnQgbGVuOwogICAgICAgIHVuc2lnbmVkIGlu dCBkYXRhX2xlbjsKICAgICAgICB1bnNpZ25lZCBpbnQgY3N1bTsKICAgICAgICB1bnNpZ25lZCBj aGFyIF9fdW51c2VkLAogICAgICAgICAgICAgICAgICAgICAgICBjbG9uZWQsCiAgICAgICAgICAg ICAgICAgICAgICAgIHBrdF90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICBpcF9zdW1tZWQ7 CiAgICAgICAgX191MzIgcHJpb3JpdHk7CiAgICAgICAgYXRvbWljX3QgdXNlcnM7CiAgICAgICAg dW5zaWduZWQgc2hvcnQgcHJvdG9jb2w7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc2VjdXJpdHk7 CiAgICAgICAgdW5zaWduZWQgaW50IHRydWVzaXplOwoKICAgICAgICB1bnNpZ25lZCBjaGFyICpo ZWFkOwogICAgICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7CiAgICAgICAgdW5zaWduZWQgY2hhciAq dGFpbDsKICAgICAgICB1bnNpZ25lZCBjaGFyICplbmQ7CgogICAgICAgIHZvaWQgKCpkZXN0cnVj dG9yKShzdHJ1Y3Qgc2tfYnVmZiAqKTsKCgogICAgICAgIHVuc2lnbmVkIGxvbmcgbmZtYXJrOwoK ICAgICAgICBfX3UzMiBuZmNhY2hlOwoKICAgICAgICBzdHJ1Y3QgbmZfY3RfaW5mbyAqbmZjdDsK IyAyMTYgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvc2tidWZmLmgiCiAg ICAgICBfX3UzMiB0Y19pbmRleDsKCn07CiMgMjMxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9p bmNsdWRlL2xpbnV4L3NrYnVmZi5oIgpleHRlcm4gdm9pZCBfX2tmcmVlX3NrYl9SMzY0ZTc4ODIo c3RydWN0IHNrX2J1ZmYgKnNrYik7CmV4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAqIGFsbG9jX3NrYl9S Y2ZmMDIzYTgodW5zaWduZWQgaW50IHNpemUsIGludCBwcmlvcml0eSk7CmV4dGVybiB2b2lkIGtm cmVlX3NrYm1lbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKZXh0ZXJuIHN0cnVjdCBza19idWZmICog c2tiX2Nsb25lX1I1OWY2NWY0MihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcHJpb3JpdHkpOwpl eHRlcm4gc3RydWN0IHNrX2J1ZmYgKiBza2JfY29weV9SMmViMDVmNTUoY29uc3Qgc3RydWN0IHNr X2J1ZmYgKnNrYiwgaW50IHByaW9yaXR5KTsKZXh0ZXJuIHN0cnVjdCBza19idWZmICogcHNrYl9j b3B5X1I1M2JmMTE2MShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZ2ZwX21hc2spOwpleHRlcm4g aW50IHBza2JfZXhwYW5kX2hlYWRfUmI4MThiZDUyKHN0cnVjdCBza19idWZmICpza2IsIGludCBu aGVhZCwgaW50IG50YWlsLCBpbnQgZ2ZwX21hc2spOwpleHRlcm4gc3RydWN0IHNrX2J1ZmYgKiBz a2JfcmVhbGxvY19oZWFkcm9vbV9SZmNmN2Y5MDgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWdu ZWQgaW50IGhlYWRyb29tKTsKZXh0ZXJuIHN0cnVjdCBza19idWZmICogc2tiX2NvcHlfZXhwYW5k X1JhMjBkNWViOShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbmV3aGVhZHJvb20sCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuZXd0YWlscm9vbSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHByaW9yaXR5 KTsKZXh0ZXJuIHN0cnVjdCBza19idWZmICogc2tiX3BhZF9SYjA4ZDNmN2Qoc3RydWN0IHNrX2J1 ZmYgKnNrYiwgaW50IHBhZCk7CgpleHRlcm4gdm9pZCBza2Jfb3Zlcl9wYW5pY19SMmM4OGQ1MzMo c3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbiwgdm9pZCAqaGVyZSk7CmV4dGVybiB2b2lkIHNr Yl91bmRlcl9wYW5pY19SNGFhYjEwZGQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbiwgdm9p ZCAqaGVyZSk7CiMgMjU4ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3Nr YnVmZi5oIgpzdGF0aWMgaW5saW5lIGludCBza2JfcXVldWVfZW1wdHkoc3RydWN0IHNrX2J1ZmZf aGVhZCAqbGlzdCkKewogICAgICAgIHJldHVybiAobGlzdC0+bmV4dCA9PSAoc3RydWN0IHNrX2J1 ZmYgKikgbGlzdCk7Cn0KIyAyNzEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGlu dXgvc2tidWZmLmgiCnN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnNrYl9nZXQoc3RydWN0 IHNrX2J1ZmYgKnNrYikKewogICAgICAgIGF0b21pY19pbmMoJnNrYi0+dXNlcnMpOwogICAgICAg IHJldHVybiBza2I7Cn0KIyAyOTAgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGlu dXgvc2tidWZmLmgiCnN0YXRpYyBpbmxpbmUgdm9pZCBrZnJlZV9za2Ioc3RydWN0IHNrX2J1ZmYg KnNrYikKewogICAgICAgIGlmICgoKCZza2ItPnVzZXJzKS0+Y291bnRlcikgPT0gMSB8fCBhdG9t aWNfZGVjX2FuZF90ZXN0KCZza2ItPnVzZXJzKSkKICAgICAgICAgICAgICAgIF9fa2ZyZWVfc2ti X1IzNjRlNzg4Mihza2IpOwp9CgoKc3RhdGljIGlubGluZSB2b2lkIGtmcmVlX3NrYl9mYXN0KHN0 cnVjdCBza19idWZmICpza2IpCnsKICAgICAgICBpZiAoKCgmc2tiLT51c2VycyktPmNvdW50ZXIp ID09IDEgfHwgYXRvbWljX2RlY19hbmRfdGVzdCgmc2tiLT51c2VycykpCiAgICAgICAgICAgICAg ICBrZnJlZV9za2JtZW0oc2tiKTsKfQojIDMxMiAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5j bHVkZS9saW51eC9za2J1ZmYuaCIKc3RhdGljIGlubGluZSBpbnQgc2tiX2Nsb25lZChzdHJ1Y3Qg c2tfYnVmZiAqc2tiKQp7CiAgICAgICAgcmV0dXJuIHNrYi0+Y2xvbmVkICYmICgoJigoc3RydWN0 IHNrYl9zaGFyZWRfaW5mbyAqKSgoc2tiKS0+ZW5kKSktPmRhdGFyZWYpLT5jb3VudGVyKSAhPSAx Owp9CiMgMzI1ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3NrYnVmZi5o IgpzdGF0aWMgaW5saW5lIGludCBza2Jfc2hhcmVkKHN0cnVjdCBza19idWZmICpza2IpCnsKICAg ICAgICByZXR1cm4gKCgoJnNrYi0+dXNlcnMpLT5jb3VudGVyKSAhPSAxKTsKfQojIDM0NCAiL3Vz ci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9za2J1ZmYuaCIKc3RhdGljIGlubGlu ZSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NoYXJlX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IsIGlu dCBwcmkpCnsKICAgICAgICBpZiAoc2tiX3NoYXJlZChza2IpKSB7CiAgICAgICAgICAgICAgICBz dHJ1Y3Qgc2tfYnVmZiAqbnNrYjsKICAgICAgICAgICAgICAgIG5za2IgPSBza2JfY2xvbmVfUjU5 ZjY1ZjQyKHNrYiwgcHJpKTsKICAgICAgICAgICAgICAgIGtmcmVlX3NrYihza2IpOwogICAgICAg ICAgICAgICAgcmV0dXJuIG5za2I7CiAgICAgICAgfQogICAgICAgIHJldHVybiBza2I7Cn0KIyAz NzcgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvc2tidWZmLmgiCnN0YXRp YyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnNrYl91bnNoYXJlKHN0cnVjdCBza19idWZmICpza2Is IGludCBwcmkpCnsKICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjsKICAgICAgICBpZighc2ti X2Nsb25lZChza2IpKQogICAgICAgICAgICAgICAgcmV0dXJuIHNrYjsKICAgICAgICBuc2tiPXNr Yl9jb3B5X1IyZWIwNWY1NShza2IsIHByaSk7CiAgICAgICAga2ZyZWVfc2tiKHNrYik7CiAgICAg ICAgcmV0dXJuIG5za2I7Cn0KIyA0MDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUv bGludXgvc2tidWZmLmgiCnN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnNrYl9wZWVrKHN0 cnVjdCBza19idWZmX2hlYWQgKmxpc3RfKQp7CiAgICAgICAgc3RydWN0IHNrX2J1ZmYgKmxpc3Qg PSAoKHN0cnVjdCBza19idWZmICopbGlzdF8pLT5uZXh0OwogICAgICAgIGlmIChsaXN0ID09IChz dHJ1Y3Qgc2tfYnVmZiAqKWxpc3RfKQogICAgICAgICAgICAgICAgbGlzdCA9ICgodm9pZCAqKTAp OwogICAgICAgIHJldHVybiBsaXN0Owp9CiMgNDIzICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9p bmNsdWRlL2xpbnV4L3NrYnVmZi5oIgpzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpza2Jf cGVla190YWlsKHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3RfKQp7CiAgICAgICAgc3RydWN0IHNr X2J1ZmYgKmxpc3QgPSAoKHN0cnVjdCBza19idWZmICopbGlzdF8pLT5wcmV2OwogICAgICAgIGlm IChsaXN0ID09IChzdHJ1Y3Qgc2tfYnVmZiAqKWxpc3RfKQogICAgICAgICAgICAgICAgbGlzdCA9 ICgodm9pZCAqKTApOwogICAgICAgIHJldHVybiBsaXN0Owp9CiMgNDM4ICIvdXNyL3NyYy9saW51 eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIgpzdGF0aWMgaW5saW5lIF9fdTMyIHNr Yl9xdWV1ZV9sZW4oc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdF8pCnsKICAgICAgICByZXR1cm4o bGlzdF8tPnFsZW4pOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3F1ZXVlX2hlYWRfaW5pdChz dHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0KQp7CiAgICAgICAgZG8geyB9IHdoaWxlKDApOwogICAg ICAgIGxpc3QtPnByZXYgPSAoc3RydWN0IHNrX2J1ZmYgKilsaXN0OwogICAgICAgIGxpc3QtPm5l eHQgPSAoc3RydWN0IHNrX2J1ZmYgKilsaXN0OwogICAgICAgIGxpc3QtPnFsZW4gPSAwOwp9CiMg NDY5ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIgpzdGF0 aWMgaW5saW5lIHZvaWQgX19za2JfcXVldWVfaGVhZChzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0 LCBzdHJ1Y3Qgc2tfYnVmZiAqbmV3c2spCnsKICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqcHJldiwg Km5leHQ7CgogICAgICAgIG5ld3NrLT5saXN0ID0gbGlzdDsKICAgICAgICBsaXN0LT5xbGVuKys7 CiAgICAgICAgcHJldiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKWxpc3Q7CiAgICAgICAgbmV4dCA9IHBy ZXYtPm5leHQ7CiAgICAgICAgbmV3c2stPm5leHQgPSBuZXh0OwogICAgICAgIG5ld3NrLT5wcmV2 ID0gcHJldjsKICAgICAgICBuZXh0LT5wcmV2ID0gbmV3c2s7CiAgICAgICAgcHJldi0+bmV4dCA9 IG5ld3NrOwp9CiMgNDk2ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3Nr YnVmZi5oIgpzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3F1ZXVlX2hlYWQoc3RydWN0IHNrX2J1ZmZf aGVhZCAqbGlzdCwgc3RydWN0IHNrX2J1ZmYgKm5ld3NrKQp7CiAgICAgICAgdW5zaWduZWQgbG9u ZyBmbGFnczsKCiAgICAgICAgZG8geyBkbyB7IF9fYXNtX18gX192b2xhdGlsZV9fKCJwdXNoZmwg OyBwb3BsICUwIjoiPWciIChmbGFncyk6ICk7IF9fYXNtX18gX192b2xhdGlsZV9fKCJjbGkiOiA6 IDoibWVtb3J5Iik7IH0gd2hpbGUoMCk7OyAodm9pZCkoJmxpc3QtPmxvY2spOyB9IHdoaWxlICgw KTsKICAgICAgICBfX3NrYl9xdWV1ZV9oZWFkKGxpc3QsIG5ld3NrKTsKICAgICAgICBkbyB7IGRv IHsgfSB3aGlsZSgwKTsgX19hc21fXyBfX3ZvbGF0aWxlX18oInB1c2hsICUwIDsgcG9wZmwiOiA6 ImciIChmbGFncyk6Im1lbW9yeSIsICJjYyIpOyB9IHdoaWxlICgwKTsKfQojIDUxNyAiL3Vzci9z cmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9za2J1ZmYuaCIKc3RhdGljIGlubGluZSB2 b2lkIF9fc2tiX3F1ZXVlX3RhaWwoc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCwgc3RydWN0IHNr X2J1ZmYgKm5ld3NrKQp7CiAgICAgICAgc3RydWN0IHNrX2J1ZmYgKnByZXYsICpuZXh0OwoKICAg ICAgICBuZXdzay0+bGlzdCA9IGxpc3Q7CiAgICAgICAgbGlzdC0+cWxlbisrOwogICAgICAgIG5l eHQgPSAoc3RydWN0IHNrX2J1ZmYgKilsaXN0OwogICAgICAgIHByZXYgPSBuZXh0LT5wcmV2Owog ICAgICAgIG5ld3NrLT5uZXh0ID0gbmV4dDsKICAgICAgICBuZXdzay0+cHJldiA9IHByZXY7CiAg ICAgICAgbmV4dC0+cHJldiA9IG5ld3NrOwogICAgICAgIHByZXYtPm5leHQgPSBuZXdzazsKfQoj IDU0MyAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9za2J1ZmYuaCIKc3Rh dGljIGlubGluZSB2b2lkIHNrYl9xdWV1ZV90YWlsKHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3Qs IHN0cnVjdCBza19idWZmICpuZXdzaykKewogICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Cgog ICAgICAgIGRvIHsgZG8geyBfX2FzbV9fIF9fdm9sYXRpbGVfXygicHVzaGZsIDsgcG9wbCAlMCI6 Ij1nIiAoZmxhZ3MpOiApOyBfX2FzbV9fIF9fdm9sYXRpbGVfXygiY2xpIjogOiA6Im1lbW9yeSIp OyB9IHdoaWxlKDApOzsgKHZvaWQpKCZsaXN0LT5sb2NrKTsgfSB3aGlsZSAoMCk7CiAgICAgICAg X19za2JfcXVldWVfdGFpbChsaXN0LCBuZXdzayk7CiAgICAgICAgZG8geyBkbyB7IH0gd2hpbGUo MCk7IF9fYXNtX18gX192b2xhdGlsZV9fKCJwdXNobCAlMCA7IHBvcGZsIjogOiJnIiAoZmxhZ3Mp OiJtZW1vcnkiLCAiY2MiKTsgfSB3aGlsZSAoMCk7Cn0KIyA1NjEgIi91c3Ivc3JjL2xpbnV4LTIu NC4yMC04L2luY2x1ZGUvbGludXgvc2tidWZmLmgiCnN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1 ZmYgKl9fc2tiX2RlcXVldWUoc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCkKewogICAgICAgIHN0 cnVjdCBza19idWZmICpuZXh0LCAqcHJldiwgKnJlc3VsdDsKCiAgICAgICAgcHJldiA9IChzdHJ1 Y3Qgc2tfYnVmZiAqKSBsaXN0OwogICAgICAgIG5leHQgPSBwcmV2LT5uZXh0OwogICAgICAgIHJl c3VsdCA9ICgodm9pZCAqKTApOwogICAgICAgIGlmIChuZXh0ICE9IHByZXYpIHsKICAgICAgICAg ICAgICAgIHJlc3VsdCA9IG5leHQ7CiAgICAgICAgICAgICAgICBuZXh0ID0gbmV4dC0+bmV4dDsK ICAgICAgICAgICAgICAgIGxpc3QtPnFsZW4tLTsKICAgICAgICAgICAgICAgIG5leHQtPnByZXYg PSBwcmV2OwogICAgICAgICAgICAgICAgcHJldi0+bmV4dCA9IG5leHQ7CiAgICAgICAgICAgICAg ICByZXN1bHQtPm5leHQgPSAoKHZvaWQgKikwKTsKICAgICAgICAgICAgICAgIHJlc3VsdC0+cHJl diA9ICgodm9pZCAqKTApOwogICAgICAgICAgICAgICAgcmVzdWx0LT5saXN0ID0gKCh2b2lkICop MCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXN1bHQ7Cn0KIyA1OTAgIi91c3Ivc3JjL2xp bnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvc2tidWZmLmgiCnN0YXRpYyBpbmxpbmUgc3RydWN0 IHNrX2J1ZmYgKnNrYl9kZXF1ZXVlKHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpCnsKICAgICAg ICB1bnNpZ25lZCBsb25nIGZsYWdzOwogICAgICAgIHN0cnVjdCBza19idWZmICpyZXN1bHQ7Cgog ICAgICAgIGRvIHsgZG8geyBfX2FzbV9fIF9fdm9sYXRpbGVfXygicHVzaGZsIDsgcG9wbCAlMCI6 Ij1nIiAoZmxhZ3MpOiApOyBfX2FzbV9fIF9fdm9sYXRpbGVfXygiY2xpIjogOiA6Im1lbW9yeSIp OyB9IHdoaWxlKDApOzsgKHZvaWQpKCZsaXN0LT5sb2NrKTsgfSB3aGlsZSAoMCk7CiAgICAgICAg cmVzdWx0ID0gX19za2JfZGVxdWV1ZShsaXN0KTsKICAgICAgICBkbyB7IGRvIHsgfSB3aGlsZSgw KTsgX19hc21fXyBfX3ZvbGF0aWxlX18oInB1c2hsICUwIDsgcG9wZmwiOiA6ImciIChmbGFncyk6 Im1lbW9yeSIsICJjYyIpOyB9IHdoaWxlICgwKTsKICAgICAgICByZXR1cm4gcmVzdWx0Owp9CgoK CgoKc3RhdGljIGlubGluZSB2b2lkIF9fc2tiX2luc2VydChzdHJ1Y3Qgc2tfYnVmZiAqbmV3c2ss CiAgICAgICAgc3RydWN0IHNrX2J1ZmYgKiBwcmV2LCBzdHJ1Y3Qgc2tfYnVmZiAqbmV4dCwKICAg ICAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICogbGlzdCkKewogICAgICAgIG5ld3NrLT5uZXh0ID0g bmV4dDsKICAgICAgICBuZXdzay0+cHJldiA9IHByZXY7CiAgICAgICAgbmV4dC0+cHJldiA9IG5l d3NrOwogICAgICAgIHByZXYtPm5leHQgPSBuZXdzazsKICAgICAgICBuZXdzay0+bGlzdCA9IGxp c3Q7CiAgICAgICAgbGlzdC0+cWxlbisrOwp9CiMgNjI3ICIvdXNyL3NyYy9saW51eC0yLjQuMjAt OC9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIgpzdGF0aWMgaW5saW5lIHZvaWQgc2tiX2luc2VydChz dHJ1Y3Qgc2tfYnVmZiAqb2xkLCBzdHJ1Y3Qgc2tfYnVmZiAqbmV3c2spCnsKICAgICAgICB1bnNp Z25lZCBsb25nIGZsYWdzOwoKICAgICAgICBkbyB7IGRvIHsgX19hc21fXyBfX3ZvbGF0aWxlX18o InB1c2hmbCA7IHBvcGwgJTAiOiI9ZyIgKGZsYWdzKTogKTsgX19hc21fXyBfX3ZvbGF0aWxlX18o ImNsaSI6IDogOiJtZW1vcnkiKTsgfSB3aGlsZSgwKTs7ICh2b2lkKSgmb2xkLT5saXN0LT5sb2Nr KTsgfSB3aGlsZSAoMCk7CiAgICAgICAgX19za2JfaW5zZXJ0KG5ld3NrLCBvbGQtPnByZXYsIG9s ZCwgb2xkLT5saXN0KTsKICAgICAgICBkbyB7IGRvIHsgfSB3aGlsZSgwKTsgX19hc21fXyBfX3Zv bGF0aWxlX18oInB1c2hsICUwIDsgcG9wZmwiOiA6ImciIChmbGFncyk6Im1lbW9yeSIsICJjYyIp OyB9IHdoaWxlICgwKTsKfQoKCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBfX3NrYl9hcHBlbmQoc3Ry dWN0IHNrX2J1ZmYgKm9sZCwgc3RydWN0IHNrX2J1ZmYgKm5ld3NrKQp7CiAgICAgICAgX19za2Jf aW5zZXJ0KG5ld3NrLCBvbGQsIG9sZC0+bmV4dCwgb2xkLT5saXN0KTsKfQojIDY1NiAiL3Vzci9z cmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9za2J1ZmYuaCIKc3RhdGljIGlubGluZSB2 b2lkIHNrYl9hcHBlbmQoc3RydWN0IHNrX2J1ZmYgKm9sZCwgc3RydWN0IHNrX2J1ZmYgKm5ld3Nr KQp7CiAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKCiAgICAgICAgZG8geyBkbyB7IF9fYXNt X18gX192b2xhdGlsZV9fKCJwdXNoZmwgOyBwb3BsICUwIjoiPWciIChmbGFncyk6ICk7IF9fYXNt X18gX192b2xhdGlsZV9fKCJjbGkiOiA6IDoibWVtb3J5Iik7IH0gd2hpbGUoMCk7OyAodm9pZCko Jm9sZC0+bGlzdC0+bG9jayk7IH0gd2hpbGUgKDApOwogICAgICAgIF9fc2tiX2FwcGVuZChvbGQs IG5ld3NrKTsKICAgICAgICBkbyB7IGRvIHsgfSB3aGlsZSgwKTsgX19hc21fXyBfX3ZvbGF0aWxl X18oInB1c2hsICUwIDsgcG9wZmwiOiA6ImciIChmbGFncyk6Im1lbW9yeSIsICJjYyIpOyB9IHdo aWxlICgwKTsKfQoKCgoKCgpzdGF0aWMgaW5saW5lIHZvaWQgX19za2JfdW5saW5rKHN0cnVjdCBz a19idWZmICpza2IsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpCnsKICAgICAgICBzdHJ1Y3Qg c2tfYnVmZiAqIG5leHQsICogcHJldjsKCiAgICAgICAgbGlzdC0+cWxlbi0tOwogICAgICAgIG5l eHQgPSBza2ItPm5leHQ7CiAgICAgICAgcHJldiA9IHNrYi0+cHJldjsKICAgICAgICBza2ItPm5l eHQgPSAoKHZvaWQgKikwKTsKICAgICAgICBza2ItPnByZXYgPSAoKHZvaWQgKikwKTsKICAgICAg ICBza2ItPmxpc3QgPSAoKHZvaWQgKikwKTsKICAgICAgICBuZXh0LT5wcmV2ID0gcHJldjsKICAg ICAgICBwcmV2LT5uZXh0ID0gbmV4dDsKfQojIDY5NyAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgv aW5jbHVkZS9saW51eC9za2J1ZmYuaCIKc3RhdGljIGlubGluZSB2b2lkIHNrYl91bmxpbmsoc3Ry dWN0IHNrX2J1ZmYgKnNrYikKewogICAgICAgIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QgPSBz a2ItPmxpc3Q7CgogICAgICAgIGlmKGxpc3QpIHsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxv bmcgZmxhZ3M7CgogICAgICAgICAgICAgICAgZG8geyBkbyB7IF9fYXNtX18gX192b2xhdGlsZV9f KCJwdXNoZmwgOyBwb3BsICUwIjoiPWciIChmbGFncyk6ICk7IF9fYXNtX18gX192b2xhdGlsZV9f KCJjbGkiOiA6IDoibWVtb3J5Iik7IH0gd2hpbGUoMCk7OyAodm9pZCkoJmxpc3QtPmxvY2spOyB9 IHdoaWxlICgwKTsKICAgICAgICAgICAgICAgIGlmKHNrYi0+bGlzdCA9PSBsaXN0KQogICAgICAg ICAgICAgICAgICAgICAgICBfX3NrYl91bmxpbmsoc2tiLCBza2ItPmxpc3QpOwogICAgICAgICAg ICAgICAgZG8geyBkbyB7IH0gd2hpbGUoMCk7IF9fYXNtX18gX192b2xhdGlsZV9fKCJwdXNobCAl MCA7IHBvcGZsIjogOiJnIiAoZmxhZ3MpOiJtZW1vcnkiLCAiY2MiKTsgfSB3aGlsZSAoMCk7CiAg ICAgICAgfQp9CiMgNzIyICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3Nr YnVmZi5oIgpzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpfX3NrYl9kZXF1ZXVlX3RhaWwo c3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCkKewogICAgICAgIHN0cnVjdCBza19idWZmICpza2Ig PSBza2JfcGVla190YWlsKGxpc3QpOwogICAgICAgIGlmIChza2IpCiAgICAgICAgICAgICAgICBf X3NrYl91bmxpbmsoc2tiLCBsaXN0KTsKICAgICAgICByZXR1cm4gc2tiOwp9CiMgNzM5ICIvdXNy L3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIgpzdGF0aWMgaW5saW5l IHN0cnVjdCBza19idWZmICpza2JfZGVxdWV1ZV90YWlsKHN0cnVjdCBza19idWZmX2hlYWQgKmxp c3QpCnsKICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogICAgICAgIHN0cnVjdCBza19idWZm ICpyZXN1bHQ7CgogICAgICAgIGRvIHsgZG8geyBfX2FzbV9fIF9fdm9sYXRpbGVfXygicHVzaGZs IDsgcG9wbCAlMCI6Ij1nIiAoZmxhZ3MpOiApOyBfX2FzbV9fIF9fdm9sYXRpbGVfXygiY2xpIjog OiA6Im1lbW9yeSIpOyB9IHdoaWxlKDApOzsgKHZvaWQpKCZsaXN0LT5sb2NrKTsgfSB3aGlsZSAo MCk7CiAgICAgICAgcmVzdWx0ID0gX19za2JfZGVxdWV1ZV90YWlsKGxpc3QpOwogICAgICAgIGRv IHsgZG8geyB9IHdoaWxlKDApOyBfX2FzbV9fIF9fdm9sYXRpbGVfXygicHVzaGwgJTAgOyBwb3Bm bCI6IDoiZyIgKGZsYWdzKToibWVtb3J5IiwgImNjIik7IH0gd2hpbGUgKDApOwogICAgICAgIHJl dHVybiByZXN1bHQ7Cn0KCnN0YXRpYyBpbmxpbmUgaW50IHNrYl9pc19ub25saW5lYXIoY29uc3Qg c3RydWN0IHNrX2J1ZmYgKnNrYikKewogICAgICAgIHJldHVybiBza2ItPmRhdGFfbGVuOwp9Cgpz dGF0aWMgaW5saW5lIGludCBza2JfaGVhZGxlbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQp7 CiAgICAgICAgcmV0dXJuIHNrYi0+bGVuIC0gc2tiLT5kYXRhX2xlbjsKfQojIDc2OCAiL3Vzci9z cmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9za2J1ZmYuaCIKc3RhdGljIGlubGluZSB1 bnNpZ25lZCBjaGFyICpfX3NrYl9wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50 IGxlbikKewogICAgICAgIHVuc2lnbmVkIGNoYXIgKnRtcD1za2ItPnRhaWw7CiAgICAgICAgZG8g eyBpZiAoc2tiX2lzX25vbmxpbmVhcihza2IpKSBfX291dF9vZl9saW5lX2J1Z19SOGIwZmQzYzUo NzcxKTsgfSB3aGlsZSAoMCk7CiAgICAgICAgc2tiLT50YWlsKz1sZW47CiAgICAgICAgc2tiLT5s ZW4rPWxlbjsKICAgICAgICByZXR1cm4gdG1wOwp9CiMgNzg3ICIvdXNyL3NyYy9saW51eC0yLjQu MjAtOC9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIgpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIg KnNrYl9wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbikKewogICAgICAg IHVuc2lnbmVkIGNoYXIgKnRtcD1za2ItPnRhaWw7CiAgICAgICAgZG8geyBpZiAoc2tiX2lzX25v bmxpbmVhcihza2IpKSBfX291dF9vZl9saW5lX2J1Z19SOGIwZmQzYzUoNzkwKTsgfSB3aGlsZSAo MCk7CiAgICAgICAgc2tiLT50YWlsKz1sZW47CiAgICAgICAgc2tiLT5sZW4rPWxlbjsKICAgICAg ICBpZihza2ItPnRhaWw+c2tiLT5lbmQpIHsKICAgICAgICAgICAgICAgIHNrYl9vdmVyX3Bhbmlj X1IyYzg4ZDUzMyhza2IsIGxlbiwgKHsgdm9pZCAqcGM7IF9fYXNtX18oIm1vdmwgJDFmLCUwXG4x OiI6Ij1nIiAocGMpKTsgcGM7IH0pKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRtcDsKfQoK c3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyICpfX3NrYl9wdXNoKHN0cnVjdCBza19idWZmICpz a2IsIHVuc2lnbmVkIGludCBsZW4pCnsKICAgICAgICBza2ItPmRhdGEtPWxlbjsKICAgICAgICBz a2ItPmxlbis9bGVuOwogICAgICAgIHJldHVybiBza2ItPmRhdGE7Cn0KIyA4MTYgIi91c3Ivc3Jj L2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvc2tidWZmLmgiCnN0YXRpYyBpbmxpbmUgdW5z aWduZWQgY2hhciAqc2tiX3B1c2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxl bikKewogICAgICAgIHNrYi0+ZGF0YS09bGVuOwogICAgICAgIHNrYi0+bGVuKz1sZW47CiAgICAg ICAgaWYoc2tiLT5kYXRhPHNrYi0+aGVhZCkgewogICAgICAgICAgICAgICAgc2tiX3VuZGVyX3Bh bmljX1I0YWFiMTBkZChza2IsIGxlbiwgKHsgdm9pZCAqcGM7IF9fYXNtX18oIm1vdmwgJDFmLCUw XG4xOiI6Ij1nIiAocGMpKTsgcGM7IH0pKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHNrYi0+ ZGF0YTsKfQoKc3RhdGljIGlubGluZSBjaGFyICpfX3NrYl9wdWxsKHN0cnVjdCBza19idWZmICpz a2IsIHVuc2lnbmVkIGludCBsZW4pCnsKICAgICAgICBza2ItPmxlbi09bGVuOwogICAgICAgIGlm IChza2ItPmxlbiA8IHNrYi0+ZGF0YV9sZW4pCiAgICAgICAgICAgICAgICBfX291dF9vZl9saW5l X2J1Z19SOGIwZmQzYzUoODMwKTsKICAgICAgICByZXR1cm4gc2tiLT5kYXRhKz1sZW47Cn0KIyA4 NDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvc2tidWZmLmgiCnN0YXRp YyBpbmxpbmUgdW5zaWduZWQgY2hhciAqIHNrYl9wdWxsKHN0cnVjdCBza19idWZmICpza2IsIHVu c2lnbmVkIGludCBsZW4pCnsKICAgICAgICBpZiAobGVuID4gc2tiLT5sZW4pCiAgICAgICAgICAg ICAgICByZXR1cm4gKCh2b2lkICopMCk7CiAgICAgICAgcmV0dXJuIF9fc2tiX3B1bGwoc2tiLGxl bik7Cn0KCmV4dGVybiB1bnNpZ25lZCBjaGFyICogX19wc2tiX3B1bGxfdGFpbF9SNDNjYjc5YzMo c3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGRlbHRhKTsKCnN0YXRpYyBpbmxpbmUgY2hhciAqX19w c2tiX3B1bGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbikKewogICAgICAg IGlmIChsZW4gPiBza2JfaGVhZGxlbihza2IpICYmCiAgICAgICAgICAgIF9fcHNrYl9wdWxsX3Rh aWxfUjQzY2I3OWMzKHNrYiwgbGVuLXNrYl9oZWFkbGVuKHNrYikpID09ICgodm9pZCAqKTApKQog ICAgICAgICAgICAgICAgcmV0dXJuICgodm9pZCAqKTApOwogICAgICAgIHNrYi0+bGVuIC09IGxl bjsKICAgICAgICByZXR1cm4gc2tiLT5kYXRhICs9IGxlbjsKfQoKc3RhdGljIGlubGluZSB1bnNp Z25lZCBjaGFyICogcHNrYl9wdWxsKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBs ZW4pCnsKICAgICAgICBpZiAobGVuID4gc2tiLT5sZW4pCiAgICAgICAgICAgICAgICByZXR1cm4g KCh2b2lkICopMCk7CiAgICAgICAgcmV0dXJuIF9fcHNrYl9wdWxsKHNrYixsZW4pOwp9CgpzdGF0 aWMgaW5saW5lIGludCBwc2tiX21heV9wdWxsKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVk IGludCBsZW4pCnsKICAgICAgICBpZiAobGVuIDw9IHNrYl9oZWFkbGVuKHNrYikpCiAgICAgICAg ICAgICAgICByZXR1cm4gMTsKICAgICAgICBpZiAobGVuID4gc2tiLT5sZW4pCiAgICAgICAgICAg ICAgICByZXR1cm4gMDsKICAgICAgICByZXR1cm4gKF9fcHNrYl9wdWxsX3RhaWxfUjQzY2I3OWMz KHNrYiwgbGVuLXNrYl9oZWFkbGVuKHNrYikpICE9ICgodm9pZCAqKTApKTsKfQojIDg4NiAiL3Vz ci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9za2J1ZmYuaCIKc3RhdGljIGlubGlu ZSBpbnQgc2tiX2hlYWRyb29tKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCnsKICAgICAgICBy ZXR1cm4gc2tiLT5kYXRhLXNrYi0+aGVhZDsKfQojIDg5OCAiL3Vzci9zcmMvbGludXgtMi40LjIw LTgvaW5jbHVkZS9saW51eC9za2J1ZmYuaCIKc3RhdGljIGlubGluZSBpbnQgc2tiX3RhaWxyb29t KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCnsKICAgICAgICByZXR1cm4gc2tiX2lzX25vbmxp bmVhcihza2IpID8gMCA6IHNrYi0+ZW5kLXNrYi0+dGFpbDsKfQojIDkxMiAiL3Vzci9zcmMvbGlu dXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9za2J1ZmYuaCIKc3RhdGljIGlubGluZSB2b2lkIHNr Yl9yZXNlcnZlKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pCnsKICAgICAg ICBza2ItPmRhdGErPWxlbjsKICAgICAgICBza2ItPnRhaWwrPWxlbjsKfQoKZXh0ZXJuIGludCBf X19wc2tiX3RyaW1fUjU4YzBkN2VkKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBs ZW4sIGludCByZWFsbG9jKTsKCnN0YXRpYyBpbmxpbmUgdm9pZCBfX3NrYl90cmltKHN0cnVjdCBz a19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pCnsKICAgICAgICBpZiAoIXNrYi0+ZGF0YV9s ZW4pIHsKICAgICAgICAgICAgICAgIHNrYi0+bGVuID0gbGVuOwogICAgICAgICAgICAgICAgc2ti LT50YWlsID0gc2tiLT5kYXRhK2xlbjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg X19fcHNrYl90cmltX1I1OGMwZDdlZChza2IsIGxlbiwgMCk7CiAgICAgICAgfQp9CiMgOTM5ICIv dXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIgpzdGF0aWMgaW5s aW5lIHZvaWQgc2tiX3RyaW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbikK ewogICAgICAgIGlmIChza2ItPmxlbiA+IGxlbikgewogICAgICAgICAgICAgICAgX19za2JfdHJp bShza2IsIGxlbik7CiAgICAgICAgfQp9CgoKc3RhdGljIGlubGluZSBpbnQgX19wc2tiX3RyaW0o c3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbikKewogICAgICAgIGlmICghc2ti LT5kYXRhX2xlbikgewogICAgICAgICAgICAgICAgc2tiLT5sZW4gPSBsZW47CiAgICAgICAgICAg ICAgICBza2ItPnRhaWwgPSBza2ItPmRhdGErbGVuOwogICAgICAgICAgICAgICAgcmV0dXJuIDA7 CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiBfX19wc2tiX3RyaW1fUjU4 YzBkN2VkKHNrYiwgbGVuLCAxKTsKICAgICAgICB9Cn0KCnN0YXRpYyBpbmxpbmUgaW50IHBza2Jf dHJpbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuKQp7CiAgICAgICAgaWYg KGxlbiA8IHNrYi0+bGVuKQogICAgICAgICAgICAgICAgcmV0dXJuIF9fcHNrYl90cmltKHNrYiwg bGVuKTsKICAgICAgICByZXR1cm4gMDsKfQojIDk3NSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgv aW5jbHVkZS9saW51eC9za2J1ZmYuaCIKc3RhdGljIGlubGluZSB2b2lkIHNrYl9vcnBoYW4oc3Ry dWN0IHNrX2J1ZmYgKnNrYikKewogICAgICAgIGlmIChza2ItPmRlc3RydWN0b3IpCiAgICAgICAg ICAgICAgICBza2ItPmRlc3RydWN0b3Ioc2tiKTsKICAgICAgICBza2ItPmRlc3RydWN0b3IgPSAo KHZvaWQgKikwKTsKICAgICAgICBza2ItPnNrID0gKCh2b2lkICopMCk7Cn0KIyA5OTMgIi91c3Iv c3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvc2tidWZmLmgiCnN0YXRpYyBpbmxpbmUg dm9pZCBza2JfcXVldWVfcHVyZ2Uoc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCkKewogICAgICAg IHN0cnVjdCBza19idWZmICpza2I7CiAgICAgICAgd2hpbGUgKChza2I9c2tiX2RlcXVldWUobGlz dCkpIT0oKHZvaWQgKikwKSkKICAgICAgICAgICAgICAgIGtmcmVlX3NrYihza2IpOwp9CiMgMTAx MCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9za2J1ZmYuaCIKc3RhdGlj IGlubGluZSB2b2lkIF9fc2tiX3F1ZXVlX3B1cmdlKHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3Qp CnsKICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogICAgICAgIHdoaWxlICgoc2tiPV9fc2ti X2RlcXVldWUobGlzdCkpIT0oKHZvaWQgKikwKSkKICAgICAgICAgICAgICAgIGtmcmVlX3NrYihz a2IpOwp9CiMgMTAzMCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9za2J1 ZmYuaCIKc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqX19kZXZfYWxsb2Nfc2tiKHVuc2ln bmVkIGludCBsZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgZ2ZwX21hc2spCnsKICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwoKICAgICAg ICBza2IgPSBhbGxvY19za2JfUmNmZjAyM2E4KGxlbmd0aCsxNiwgZ2ZwX21hc2spOwogICAgICAg IGlmIChza2IpCiAgICAgICAgICAgICAgICBza2JfcmVzZXJ2ZShza2IsMTYpOwogICAgICAgIHJl dHVybiBza2I7Cn0KIyAxMDU0ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4 L3NrYnVmZi5oIgpzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpkZXZfYWxsb2Nfc2tiKHVu c2lnbmVkIGludCBsZW5ndGgpCnsKICAgICAgICByZXR1cm4gX19kZXZfYWxsb2Nfc2tiKGxlbmd0 aCwgKDB4MjApKTsKfQojIDEwNzIgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGlu dXgvc2tidWZmLmgiCnN0YXRpYyBpbmxpbmUgaW50CnNrYl9jb3coc3RydWN0IHNrX2J1ZmYgKnNr YiwgdW5zaWduZWQgaW50IGhlYWRyb29tKQp7CiAgICAgICAgaW50IGRlbHRhID0gKGhlYWRyb29t ID4gMTYgPyBoZWFkcm9vbSA6IDE2KSAtIHNrYl9oZWFkcm9vbShza2IpOwoKICAgICAgICBpZiAo ZGVsdGEgPCAwKQogICAgICAgICAgICAgICAgZGVsdGEgPSAwOwoKICAgICAgICBpZiAoZGVsdGEg fHwgc2tiX2Nsb25lZChza2IpKQogICAgICAgICAgICAgICAgcmV0dXJuIHBza2JfZXhwYW5kX2hl YWRfUmI4MThiZDUyKHNrYiwgKGRlbHRhKzE1KSZ+MTUsIDAsICgweDIwKSk7CiAgICAgICAgcmV0 dXJuIDA7Cn0KIyAxMDk3ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3Nr YnVmZi5oIgpzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpza2JfcGFkdG8oc3RydWN0IHNr X2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbikKewogICAgICAgIHVuc2lnbmVkIGludCBzaXpl ID0gc2tiLT5sZW4gKyBza2ItPmRhdGFfbGVuOwogICAgICAgIGlmKF9fYnVpbHRpbl9leHBlY3Qo KHNpemUgPj0gbGVuKSwxKSkKICAgICAgICAgICAgICAgIHJldHVybiBza2I7CiAgICAgICAgcmV0 dXJuIHNrYl9wYWRfUmIwOGQzZjdkKHNrYiwgbGVuLXNpemUpOwp9CiMgMTExMiAiL3Vzci9zcmMv bGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9za2J1ZmYuaCIKaW50IHNrYl9saW5lYXJpemVf UjZhMzZkMTYwKHN0cnVjdCBza19idWZmICpza2IsIGludCBnZnApOwoKc3RhdGljIGlubGluZSB2 b2lkICprbWFwX3NrYl9mcmFnKGNvbnN0IHNrYl9mcmFnX3QgKmZyYWcpCnsKCgoKCgoKICAgICAg ICByZXR1cm4ga21hcChmcmFnLT5wYWdlKTsKfQoKc3RhdGljIGlubGluZSB2b2lkIGt1bm1hcF9z a2JfZnJhZyh2b2lkICp2YWRkcikKewogICAgICAgIGRvIHsgfSB3aGlsZSAoMCk7CgoKCn0KCgoK CgoKCmV4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAqIHNrYl9yZWN2X2RhdGFncmFtX1IzZDFiNTZiNihz dHJ1Y3Qgc29jayAqc2ssdW5zaWduZWQgZmxhZ3MsaW50IG5vYmxvY2ssIGludCAqZXJyKTsKZXh0 ZXJuIHVuc2lnbmVkIGludCBkYXRhZ3JhbV9wb2xsX1JjY2JkNDYzYihzdHJ1Y3QgZmlsZSAqZmls ZSwgc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICp3YWl0KTsK ZXh0ZXJuIGludCBza2JfY29weV9kYXRhZ3JhbV9SMjc1NWZmNGUoY29uc3Qgc3RydWN0IHNrX2J1 ZmYgKmZyb20sIGludCBvZmZzZXQsIGNoYXIgKnRvLGludCBzaXplKTsKZXh0ZXJuIGludCBza2Jf Y29weV9kYXRhZ3JhbV9pb3ZlY19SODQzOTk4NzIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKmZyb20s IGludCBvZmZzZXQsIHN0cnVjdCBpb3ZlYyAqdG8saW50IHNpemUpOwpleHRlcm4gaW50IHNrYl9j b3B5X2FuZF9jc3VtX2RhdGFncmFtKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZz ZXQsIHU4ICp0bywgaW50IGxlbiwgdW5zaWduZWQgaW50ICpjc3VtcCk7CmV4dGVybiBpbnQgc2ti X2NvcHlfYW5kX2NzdW1fZGF0YWdyYW1faW92ZWNfUjMxN2M1Nzg2KGNvbnN0IHN0cnVjdCBza19i dWZmICpza2IsIGludCBobGVuLCBzdHJ1Y3QgaW92ZWMgKmlvdik7CmV4dGVybiB2b2lkIHNrYl9m cmVlX2RhdGFncmFtX1IzZTUyMThmZChzdHJ1Y3Qgc29jayAqIHNrLCBzdHJ1Y3Qgc2tfYnVmZiAq c2tiKTsKCmV4dGVybiB1bnNpZ25lZCBpbnQgc2tiX2NoZWNrc3VtX1JkMGJiMTcyNihjb25zdCBz dHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgY3N1 bSk7CmV4dGVybiBpbnQgc2tiX2NvcHlfYml0c19SYjVjNzI4YWEoY29uc3Qgc3RydWN0IHNrX2J1 ZmYgKnNrYiwgaW50IG9mZnNldCwgdm9pZCAqdG8sIGludCBsZW4pOwpleHRlcm4gdW5zaWduZWQg aW50IHNrYl9jb3B5X2FuZF9jc3VtX2JpdHNfUjYxOWRmYjcwKGNvbnN0IHN0cnVjdCBza19idWZm ICpza2IsIGludCBvZmZzZXQsIHU4ICp0bywgaW50IGxlbiwgdW5zaWduZWQgaW50IGNzdW0pOwpl eHRlcm4gdm9pZCBza2JfY29weV9hbmRfY3N1bV9kZXZfUjdkOWE4YWMzKGNvbnN0IHN0cnVjdCBz a19idWZmICpza2IsIHU4ICp0byk7CgpleHRlcm4gdm9pZCBza2JfaW5pdCh2b2lkKTsKZXh0ZXJu IHZvaWQgc2tiX2FkZF9tdHUoaW50IG10dSk7CgpzdHJ1Y3QgdHV4X3JlcV9zdHJ1Y3Q7CgoKc3Rh dGljIGlubGluZSB2b2lkCm5mX2Nvbm50cmFja19wdXQoc3RydWN0IG5mX2N0X2luZm8gKm5mY3Qp CnsKICAgICAgICBpZiAobmZjdCAmJiBhdG9taWNfZGVjX2FuZF90ZXN0KCZuZmN0LT5tYXN0ZXIt PnVzZSkpCiAgICAgICAgICAgICAgICBuZmN0LT5tYXN0ZXItPmRlc3Ryb3kobmZjdC0+bWFzdGVy KTsKfQpzdGF0aWMgaW5saW5lIHZvaWQKbmZfY29ubnRyYWNrX2dldChzdHJ1Y3QgbmZfY3RfaW5m byAqbmZjdCkKewogICAgICAgIGlmIChuZmN0KQogICAgICAgICAgICAgICAgYXRvbWljX2luYygm bmZjdC0+bWFzdGVyLT51c2UpOwp9CiMgMTQ4ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNs dWRlL2xpbnV4L25ldGRldmljZS5oIiAyCgpzdHJ1Y3QgbmVpZ2hib3VyOwpzdHJ1Y3QgbmVpZ2hf cGFybXM7CnN0cnVjdCBza19idWZmOwoKc3RydWN0IG5ldGlmX3J4X3N0YXRzCnsKICAgICAgICB1 bnNpZ25lZCB0b3RhbDsKICAgICAgICB1bnNpZ25lZCBkcm9wcGVkOwogICAgICAgIHVuc2lnbmVk IHRpbWVfc3F1ZWV6ZTsKICAgICAgICB1bnNpZ25lZCB0aHJvdHRsZWQ7CiAgICAgICAgdW5zaWdu ZWQgZmFzdHJvdXRlX2hpdDsKICAgICAgICB1bnNpZ25lZCBmYXN0cm91dGVfc3VjY2VzczsKICAg ICAgICB1bnNpZ25lZCBmYXN0cm91dGVfZGVmZXI7CiAgICAgICAgdW5zaWduZWQgZmFzdHJvdXRl X2RlZmVycmVkX291dDsKICAgICAgICB1bnNpZ25lZCBmYXN0cm91dGVfbGF0ZW5jeV9yZWR1Y3Rp b247CiAgICAgICAgdW5zaWduZWQgY3B1X2NvbGxpc2lvbjsKfSBfX2F0dHJpYnV0ZV9fKChfX2Fs aWduZWRfXygoMSA8PCAoKDUpKSkpKSk7CgpleHRlcm4gc3RydWN0IG5ldGlmX3J4X3N0YXRzIG5l dGRldl9yeF9zdGF0W107CgoKCgoKCnN0cnVjdCBkZXZfbWNfbGlzdAp7CiAgICAgICAgc3RydWN0 IGRldl9tY19saXN0ICpuZXh0OwogICAgICAgIF9fdTggZG1pX2FkZHJbOF07CiAgICAgICAgdW5z aWduZWQgY2hhciBkbWlfYWRkcmxlbjsKICAgICAgICBpbnQgZG1pX3VzZXJzOwogICAgICAgIGlu dCBkbWlfZ3VzZXJzOwp9OwoKc3RydWN0IGhoX2NhY2hlCnsKICAgICAgICBzdHJ1Y3QgaGhfY2Fj aGUgKmhoX25leHQ7CiAgICAgICAgYXRvbWljX3QgaGhfcmVmY250OwogICAgICAgIHVuc2lnbmVk IHNob3J0IGhoX3R5cGU7CgoKCiAgICAgICAgaW50IGhoX2xlbjsKICAgICAgICBpbnQgKCpoaF9v dXRwdXQpKHN0cnVjdCBza19idWZmICpza2IpOwogICAgICAgIHJ3bG9ja190IGhoX2xvY2s7Cgog ICAgICAgIHVuc2lnbmVkIGxvbmcgaGhfZGF0YVsxNi9zaXplb2YodW5zaWduZWQgbG9uZyldOwp9 OwoKCgoKCgplbnVtIG5ldGRldl9zdGF0ZV90CnsKICAgICAgICBfX0xJTktfU1RBVEVfWE9GRj0w LAogICAgICAgIF9fTElOS19TVEFURV9TVEFSVCwKICAgICAgICBfX0xJTktfU1RBVEVfUFJFU0VO VCwKICAgICAgICBfX0xJTktfU1RBVEVfU0NIRUQsCiAgICAgICAgX19MSU5LX1NUQVRFX05PQ0FS UklFUiwKICAgICAgICBfX0xJTktfU1RBVEVfUlhfU0NIRUQKfTsKCgoKCgoKc3RydWN0IG5ldGRl dl9ib290X3NldHVwIHsKICAgICAgICBjaGFyIG5hbWVbMTZdOwogICAgICAgIHN0cnVjdCBpZm1h cCBtYXA7Cn07CiMgMjM1ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L25l dGRldmljZS5oIgpzdHJ1Y3QgbmV0X2RldmljZQp7CgoKCgoKCiAgICAgICAgY2hhciBuYW1lWzE2 XTsKCgoKCgogICAgICAgIHVuc2lnbmVkIGxvbmcgcm1lbV9lbmQ7CiAgICAgICAgdW5zaWduZWQg bG9uZyBybWVtX3N0YXJ0OwogICAgICAgIHVuc2lnbmVkIGxvbmcgbWVtX2VuZDsKICAgICAgICB1 bnNpZ25lZCBsb25nIG1lbV9zdGFydDsKICAgICAgICB1bnNpZ25lZCBsb25nIGJhc2VfYWRkcjsK ICAgICAgICB1bnNpZ25lZCBpbnQgaXJxOwoKCgoKCgogICAgICAgIHVuc2lnbmVkIGNoYXIgaWZf cG9ydDsKICAgICAgICB1bnNpZ25lZCBjaGFyIGRtYTsKCiAgICAgICAgdW5zaWduZWQgbG9uZyBz dGF0ZTsKCiAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5leHQ7CgoKICAgICAgICBpbnQgKCpp bml0KShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKCgoKICAgICAgICBzdHJ1Y3QgbmV0X2Rldmlj ZSAqbmV4dF9zY2hlZDsKCgogICAgICAgIGludCBpZmluZGV4OwogICAgICAgIGludCBpZmxpbms7 CgoKICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyogKCpnZXRfc3RhdHMpKHN0cnVjdCBu ZXRfZGV2aWNlICpkZXYpOwogICAgICAgIHN0cnVjdCBpd19zdGF0aXN0aWNzKiAoKmdldF93aXJl bGVzc19zdGF0cykoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CgoKCiAgICAgICAgc3RydWN0IGl3 X2hhbmRsZXJfZGVmICogd2lyZWxlc3NfaGFuZGxlcnM7CiMgMjk0ICIvdXNyL3NyYy9saW51eC0y LjQuMjAtOC9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIgogICAgICAgIHVuc2lnbmVkIGxvbmcg dHJhbnNfc3RhcnQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyBsYXN0X3J4OwoKICAgICAgICB1bnNp Z25lZCBzaG9ydCBmbGFnczsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBnZmxhZ3M7CiAgICAgICAg dW5zaWduZWQgc2hvcnQgcHJpdl9mbGFnczsKICAgICAgICB1bnNpZ25lZCBzaG9ydCB1bnVzZWRf YWxpZ25tZW50X2ZpeGVyOwoKCgogICAgICAgIHVuc2lnbmVkIG10dTsKICAgICAgICB1bnNpZ25l ZCBzaG9ydCB0eXBlOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGhhcmRfaGVhZGVyX2xlbjsKICAg ICAgICB2b2lkICpwcml2OwoKICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbWFzdGVyOwoKCgoK ICAgICAgICB1bnNpZ25lZCBjaGFyIGJyb2FkY2FzdFs4XTsKICAgICAgICB1bnNpZ25lZCBjaGFy IGRldl9hZGRyWzhdOwogICAgICAgIHVuc2lnbmVkIGNoYXIgYWRkcl9sZW47CgogICAgICAgIHN0 cnVjdCBkZXZfbWNfbGlzdCAqbWNfbGlzdDsKICAgICAgICBpbnQgbWNfY291bnQ7CiAgICAgICAg aW50IHByb21pc2N1aXR5OwogICAgICAgIGludCBhbGxtdWx0aTsKCiAgICAgICAgaW50IHdhdGNo ZG9nX3RpbWVvOwogICAgICAgIHN0cnVjdCB0aW1lcl9saXN0IHdhdGNoZG9nX3RpbWVyOwoKCgog ICAgICAgIHZvaWQgKmF0YWxrX3B0cjsKICAgICAgICB2b2lkICppcF9wdHI7CiAgICAgICAgdm9p ZCAqZG5fcHRyOwogICAgICAgIHZvaWQgKmlwNl9wdHI7CiAgICAgICAgdm9pZCAqZWNfcHRyOwoK ICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIHBvbGxfbGlzdDsKICAgICAgICBpbnQgcXVvdGE7CiAg ICAgICAgaW50IHdlaWdodDsKCiAgICAgICAgc3RydWN0IFFkaXNjICpxZGlzYzsKICAgICAgICBz dHJ1Y3QgUWRpc2MgKnFkaXNjX3NsZWVwaW5nOwogICAgICAgIHN0cnVjdCBRZGlzYyAqcWRpc2Nf bGlzdDsKICAgICAgICBzdHJ1Y3QgUWRpc2MgKnFkaXNjX2luZ3Jlc3M7CiAgICAgICAgdW5zaWdu ZWQgbG9uZyB0eF9xdWV1ZV9sZW47CgoKICAgICAgICBzcGlubG9ja190IHhtaXRfbG9jazsKCgoK ICAgICAgICBpbnQgeG1pdF9sb2NrX293bmVyOwoKICAgICAgICBzcGlubG9ja190IHF1ZXVlX2xv Y2s7CgogICAgICAgIGF0b21pY190IHJlZmNudDsKCiAgICAgICAgaW50IGRlYWRiZWFmOwoKCiAg ICAgICAgaW50IGZlYXR1cmVzOwojIDM3MiAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVk ZS9saW51eC9uZXRkZXZpY2UuaCIKICAgICAgICB2b2lkICgqdW5pbml0KShzdHJ1Y3QgbmV0X2Rl dmljZSAqZGV2KTsKCiAgICAgICAgdm9pZCAoKmRlc3RydWN0b3IpKHN0cnVjdCBuZXRfZGV2aWNl ICpkZXYpOwoKCiAgICAgICAgaW50ICgqb3Blbikoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAg ICAgICAgaW50ICgqc3RvcCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAgICAgICAgaW50ICgq aGFyZF9zdGFydF94bWl0KSAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYp OwoKICAgICAgICBpbnQgKCpwb2xsKSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50ICpxdW90 YSk7CiAgICAgICAgaW50ICgqaGFyZF9oZWFkZXIpIChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0X2Rl dmljZSAqZGV2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1bnNpZ25lZCBzaG9ydCB0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB2b2lkICpkYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdm9pZCAqc2FkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxlbik7CiAgICAgICAgaW50ICgqcmVidWls ZF9oZWFkZXIpKHN0cnVjdCBza19idWZmICpza2IpOwoKICAgICAgICB2b2lkICgqc2V0X211bHRp Y2FzdF9saXN0KShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKCiAgICAgICAgaW50ICgqc2V0X21h Y19hZGRyZXNzKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICphZGRyKTsKCiAgICAgICAgaW50ICgq ZG9faW9jdGwpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpOwoKICAgICAg ICBpbnQgKCpzZXRfY29uZmlnKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGlmbWFwICptYXApOwoKICAg ICAgICBpbnQgKCpoYXJkX2hlYWRlcl9jYWNoZSkoc3RydWN0IG5laWdoYm91ciAqbmVpZ2gsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IGhoX2NhY2hlICpoaCk7CiAgICAgICAgdm9pZCAoKmhlYWRlcl9jYWNoZV91cGRhdGUpKHN0cnVj dCBoaF9jYWNoZSAqaGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqIGhhZGRy KTsKCiAgICAgICAgaW50ICgqY2hhbmdlX210dSkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50 IG5ld19tdHUpOwoKCiAgICAgICAgdm9pZCAoKnR4X3RpbWVvdXQpIChzdHJ1Y3QgbmV0X2Rldmlj ZSAqZGV2KTsKCiAgICAgICAgdm9pZCAoKnZsYW5fcnhfcmVnaXN0ZXIpKHN0cnVjdCBuZXRfZGV2 aWNlICpkZXYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3Qgdmxhbl9ncm91cCAqZ3JwKTsKICAgICAgICB2b2lkICgqdmxhbl9yeF9hZGRf dmlkKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCB2aWQpOwogICAgICAgIHZvaWQg KCp2bGFuX3J4X2tpbGxfdmlkKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgdmlk KTsKCiAgICAgICAgaW50ICgqaGFyZF9oZWFkZXJfcGFyc2UpKHN0cnVjdCBza19idWZmICpza2Is CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z aWduZWQgY2hhciAqaGFkZHIpOwogICAgICAgIGludCAoKm5laWdoX3NldHVwKShzdHJ1Y3QgbmV0 X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmVpZ2hfcGFybXMgKik7CiAgICAgICAgaW50ICgqYWNjZXB0 X2Zhc3RwYXRoKShzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgZHN0X2VudHJ5Kik7CgogICAg ICAgIHZvaWQgKCpwb2xsX2NvbnRyb2xsZXIpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogICAg ICAgIGludCAoKnJ4X2hvb2spKHN0cnVjdCBza19idWZmICpza2IpOwoKCiAgICAgICAgc3RydWN0 IG1vZHVsZSAqb3duZXI7CgoKICAgICAgICBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpicl9wb3J0 OwojIDQ0MiAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9uZXRkZXZpY2Uu aCIKICAgICAgICBzdHJ1Y3QgZGl2ZXJ0X2JsayAqZGl2ZXJ0OwoKfTsKCgpzdHJ1Y3QgcGFja2V0 X3R5cGUKewogICAgICAgIHVuc2lnbmVkIHNob3J0IHR5cGU7CiAgICAgICAgc3RydWN0IG5ldF9k ZXZpY2UgKmRldjsKICAgICAgICBpbnQgKCpmdW5jKSAoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0 IG5ldF9kZXZpY2UgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgcGFja2V0X3R5cGUgKik7CiAgICAgICAgdm9pZCAqZGF0YTsKICAgICAgICBzdHJ1Y3Qg cGFja2V0X3R5cGUgKm5leHQ7Cn07CgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5j bHVkZS9saW51eC9ub3RpZmllci5oIiAxCiMgMTQgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2lu Y2x1ZGUvbGludXgvbm90aWZpZXIuaCIKc3RydWN0IG5vdGlmaWVyX2Jsb2NrCnsKICAgICAgICBp bnQgKCpub3RpZmllcl9jYWxsKShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsIHVuc2lnbmVk IGxvbmcsIHZvaWQgKik7CiAgICAgICAgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZXh0OwogICAg ICAgIGludCBwcmlvcml0eTsKfTsKCgoKCmV4dGVybiBpbnQgbm90aWZpZXJfY2hhaW5fcmVnaXN0 ZXJfUjYwY2VjM2I5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqKmxpc3QsIHN0cnVjdCBub3RpZmll cl9ibG9jayAqbik7CmV4dGVybiBpbnQgbm90aWZpZXJfY2hhaW5fdW5yZWdpc3Rlcl9SZjA5OTY3 OWMoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICoqbmwsIHN0cnVjdCBub3RpZmllcl9ibG9jayAqbik7 CmV4dGVybiBpbnQgbm90aWZpZXJfY2FsbF9jaGFpbl9SMjg4NDY5NjIoc3RydWN0IG5vdGlmaWVy X2Jsb2NrICoqbiwgdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKnYpOwojIDQ2MCAiL3Vzci9zcmMv bGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCIgMgoKZXh0ZXJuIHN0cnVj dCBuZXRfZGV2aWNlIGxvb3BiYWNrX2Rldl9SZDliODQ3ZjQ7CmV4dGVybiBzdHJ1Y3QgbmV0X2Rl dmljZSAqZGV2X2Jhc2VfUjI1NDk0ZTkzOwpleHRlcm4gcndsb2NrX3QgZGV2X2Jhc2VfbG9ja19S NWIzZjljMDc7CgpleHRlcm4gaW50IG5ldGRldl9ib290X3NldHVwX2FkZChjaGFyICpuYW1lLCBz dHJ1Y3QgaWZtYXAgKm1hcCk7CmV4dGVybiBpbnQgbmV0ZGV2X2Jvb3Rfc2V0dXBfY2hlY2soc3Ry dWN0IG5ldF9kZXZpY2UgKmRldik7CmV4dGVybiBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2X2dldGJ5 aHdhZGRyX1I4OTQ2MjE5Nih1bnNpZ25lZCBzaG9ydCB0eXBlLCBjaGFyICpod2FkZHIpOwpleHRl cm4gdm9pZCBkZXZfYWRkX3BhY2tfUmQxZWIyMmQ5KHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQpOwpl eHRlcm4gdm9pZCBkZXZfcmVtb3ZlX3BhY2tfUjE3MjVlNDZlKHN0cnVjdCBwYWNrZXRfdHlwZSAq cHQpOwpleHRlcm4gaW50IGRldl9nZXRfUjc5MjU5ZmJjKGNvbnN0IGNoYXIgKm5hbWUpOwpleHRl cm4gc3RydWN0IG5ldF9kZXZpY2UgKmRldl9nZXRfYnlfbmFtZV9SMjdjYmUzYTQoY29uc3QgY2hh ciAqbmFtZSk7CmV4dGVybiBzdHJ1Y3QgbmV0X2RldmljZSAqX19kZXZfZ2V0X2J5X25hbWVfUmEz N2Q0N2U2KGNvbnN0IGNoYXIgKm5hbWUpOwpleHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKmRldl9h bGxvY19SY2YzMTk2OTEoY29uc3QgY2hhciAqbmFtZSwgaW50ICplcnIpOwpleHRlcm4gaW50IGRl dl9hbGxvY19uYW1lX1JjNDk2MDJkOShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCBjaGFy ICpuYW1lKTsKZXh0ZXJuIGludCBkZXZfb3Blbl9SN2Y0ODdlOWUoc3RydWN0IG5ldF9kZXZpY2Ug KmRldik7CmV4dGVybiBpbnQgZGV2X2Nsb3NlX1JlMGEzNDc4NihzdHJ1Y3QgbmV0X2RldmljZSAq ZGV2KTsKZXh0ZXJuIGludCBkZXZfcXVldWVfeG1pdF9SMzc5OWZmOTEoc3RydWN0IHNrX2J1ZmYg KnNrYik7CmV4dGVybiBpbnQgcmVnaXN0ZXJfbmV0ZGV2aWNlX1I2MjJlNDUwYihzdHJ1Y3QgbmV0 X2RldmljZSAqZGV2KTsKZXh0ZXJuIGludCB1bnJlZ2lzdGVyX25ldGRldmljZV9SMGY2NTQ4YWEo c3RydWN0IG5ldF9kZXZpY2UgKmRldik7CmV4dGVybiBpbnQgcmVnaXN0ZXJfbmV0ZGV2aWNlX25v dGlmaWVyX1I2M2VjYWQ1MyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKZXh0ZXJuIGludCB1 bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcl9SZmU3Njk0NTYoc3RydWN0IG5vdGlmaWVyX2Js b2NrICpuYik7CmV4dGVybiBpbnQgZGV2X25ld19pbmRleF9SOGZkZGM4NGModm9pZCk7CmV4dGVy biBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2X2dldF9ieV9pbmRleF9SNTRiMDgzZDUoaW50IGlmaW5k ZXgpOwpleHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKl9fZGV2X2dldF9ieV9pbmRleF9SMDE2M2I5 ZmIoaW50IGlmaW5kZXgpOwpleHRlcm4gaW50IGRldl9yZXN0YXJ0KHN0cnVjdCBuZXRfZGV2aWNl ICpkZXYpOwoKdHlwZWRlZiBpbnQgZ2lmY29uZl9mdW5jX3Qoc3RydWN0IG5ldF9kZXZpY2UgKiBk ZXYsIGNoYXIgKiBidWZwdHIsIGludCBsZW4pOwpleHRlcm4gaW50IHJlZ2lzdGVyX2dpZmNvbmZf UmQyNjg1MThhKHVuc2lnbmVkIGludCBmYW1pbHksIGdpZmNvbmZfZnVuY190ICogZ2lmY29uZik7 CnN0YXRpYyBpbmxpbmUgaW50IHVucmVnaXN0ZXJfZ2lmY29uZih1bnNpZ25lZCBpbnQgZmFtaWx5 KQp7CiAgICAgICAgcmV0dXJuIHJlZ2lzdGVyX2dpZmNvbmZfUmQyNjg1MThhKGZhbWlseSwgMCk7 Cn0KCgoKCgoKc3RydWN0IHNvZnRuZXRfZGF0YV9SNTAxZDFiNzEKewogICAgICAgIGludCB0aHJv dHRsZTsKICAgICAgICBpbnQgY25nX2xldmVsOwogICAgICAgIGludCBhdmdfYmxvZzsKICAgICAg ICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGlucHV0X3BrdF9xdWV1ZTsKICAgICAgICBzdHJ1Y3QgbGlz dF9oZWFkIHBvbGxfbGlzdDsKICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0cHV0X3F1ZXVl OwogICAgICAgIHN0cnVjdCBza19idWZmICpjb21wbGV0aW9uX3F1ZXVlOwoKICAgICAgICBzdHJ1 Y3QgbmV0X2RldmljZSBibG9nX2RldjsKfSBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXygoMSA8 PCAoKDUpKSkpKSk7CgoKZXh0ZXJuIHN0cnVjdCBzb2Z0bmV0X2RhdGFfUjUwMWQxYjcxIHNvZnRu ZXRfZGF0YV9SNTAxZDFiNzFbMV07CgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBfX25ldGlmX3NjaGVk dWxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCnsKICAgICAgICBpZiAoIXRlc3RfYW5kX3NldF9i aXQoX19MSU5LX1NUQVRFX1NDSEVELCAmZGV2LT5zdGF0ZSkpIHsKICAgICAgICAgICAgICAgIHVu c2lnbmVkIGxvbmcgZmxhZ3M7CiAgICAgICAgICAgICAgICBpbnQgY3B1ID0gMDsKCiAgICAgICAg ICAgICAgICBkbyB7IF9fYXNtX18gX192b2xhdGlsZV9fKCJwdXNoZmwgOyBwb3BsICUwIjoiPWci IChmbGFncyk6ICk7IF9fYXNtX18gX192b2xhdGlsZV9fKCJjbGkiOiA6IDoibWVtb3J5Iik7IH0g d2hpbGUoMCk7OwogICAgICAgICAgICAgICAgZGV2LT5uZXh0X3NjaGVkID0gc29mdG5ldF9kYXRh X1I1MDFkMWI3MVtjcHVdLm91dHB1dF9xdWV1ZTsKICAgICAgICAgICAgICAgIHNvZnRuZXRfZGF0 YV9SNTAxZDFiNzFbY3B1XS5vdXRwdXRfcXVldWUgPSBkZXY7CiAgICAgICAgICAgICAgICBjcHVf cmFpc2Vfc29mdGlycV9SZDAxZjNlZTgoY3B1LCBORVRfVFhfU09GVElSUSk7CiAgICAgICAgICAg ICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygicHVzaGwgJTAgOyBwb3BmbCI6IDoiZyIgKGZsYWdz KToibWVtb3J5IiwgImNjIik7CiAgICAgICAgfQp9CgpzdGF0aWMgaW5saW5lIHZvaWQgbmV0aWZf c2NoZWR1bGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKewogICAgICAgIGlmICghKF9fYnVpbHRp bl9jb25zdGFudF9wKF9fTElOS19TVEFURV9YT0ZGKSA/IGNvbnN0YW50X3Rlc3RfYml0KChfX0xJ TktfU1RBVEVfWE9GRiksKCZkZXYtPnN0YXRlKSkgOiB2YXJpYWJsZV90ZXN0X2JpdCgoX19MSU5L X1NUQVRFX1hPRkYpLCgmZGV2LT5zdGF0ZSkpKSkKICAgICAgICAgICAgICAgIF9fbmV0aWZfc2No ZWR1bGUoZGV2KTsKfQoKc3RhdGljIGlubGluZSB2b2lkIG5ldGlmX3N0YXJ0X3F1ZXVlKHN0cnVj dCBuZXRfZGV2aWNlICpkZXYpCnsKICAgICAgICBjbGVhcl9iaXQoX19MSU5LX1NUQVRFX1hPRkYs ICZkZXYtPnN0YXRlKTsKfQoKc3RhdGljIGlubGluZSB2b2lkIG5ldGlmX3dha2VfcXVldWUoc3Ry dWN0IG5ldF9kZXZpY2UgKmRldikKewogICAgICAgIGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoX19M SU5LX1NUQVRFX1hPRkYsICZkZXYtPnN0YXRlKSkKICAgICAgICAgICAgICAgIF9fbmV0aWZfc2No ZWR1bGUoZGV2KTsKfQoKc3RhdGljIGlubGluZSB2b2lkIG5ldGlmX3N0b3BfcXVldWUoc3RydWN0 IG5ldF9kZXZpY2UgKmRldikKewogICAgICAgIHNldF9iaXQoX19MSU5LX1NUQVRFX1hPRkYsICZk ZXYtPnN0YXRlKTsKfQoKc3RhdGljIGlubGluZSBpbnQgbmV0aWZfcXVldWVfc3RvcHBlZChzdHJ1 Y3QgbmV0X2RldmljZSAqZGV2KQp7CiAgICAgICAgcmV0dXJuIChfX2J1aWx0aW5fY29uc3RhbnRf cChfX0xJTktfU1RBVEVfWE9GRikgPyBjb25zdGFudF90ZXN0X2JpdCgoX19MSU5LX1NUQVRFX1hP RkYpLCgmZGV2LT5zdGF0ZSkpIDogdmFyaWFibGVfdGVzdF9iaXQoKF9fTElOS19TVEFURV9YT0ZG KSwoJmRldi0+c3RhdGUpKSk7Cn0KCnN0YXRpYyBpbmxpbmUgaW50IG5ldGlmX3J1bm5pbmcoc3Ry dWN0IG5ldF9kZXZpY2UgKmRldikKewogICAgICAgIHJldHVybiAoX19idWlsdGluX2NvbnN0YW50 X3AoX19MSU5LX1NUQVRFX1NUQVJUKSA/IGNvbnN0YW50X3Rlc3RfYml0KChfX0xJTktfU1RBVEVf U1RBUlQpLCgmZGV2LT5zdGF0ZSkpIDogdmFyaWFibGVfdGVzdF9iaXQoKF9fTElOS19TVEFURV9T VEFSVCksKCZkZXYtPnN0YXRlKSkpOwp9CgoKCgoKc3RhdGljIGlubGluZSB2b2lkIGRldl9rZnJl ZV9za2JfaXJxKHN0cnVjdCBza19idWZmICpza2IpCnsKICAgICAgICBpZiAoYXRvbWljX2RlY19h bmRfdGVzdCgmc2tiLT51c2VycykpIHsKICAgICAgICAgICAgICAgIGludCBjcHUgPTA7CiAgICAg ICAgICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwoKICAgICAgICAgICAgICAgIGRvIHsgX19h c21fXyBfX3ZvbGF0aWxlX18oInB1c2hmbCA7IHBvcGwgJTAiOiI9ZyIgKGZsYWdzKTogKTsgX19h c21fXyBfX3ZvbGF0aWxlX18oImNsaSI6IDogOiJtZW1vcnkiKTsgfSB3aGlsZSgwKTs7CiAgICAg ICAgICAgICAgICBza2ItPm5leHQgPSBzb2Z0bmV0X2RhdGFfUjUwMWQxYjcxW2NwdV0uY29tcGxl dGlvbl9xdWV1ZTsKICAgICAgICAgICAgICAgIHNvZnRuZXRfZGF0YV9SNTAxZDFiNzFbY3B1XS5j b21wbGV0aW9uX3F1ZXVlID0gc2tiOwogICAgICAgICAgICAgICAgY3B1X3JhaXNlX3NvZnRpcnFf UmQwMWYzZWU4KGNwdSwgTkVUX1RYX1NPRlRJUlEpOwogICAgICAgICAgICAgICAgX19hc21fXyBf X3ZvbGF0aWxlX18oInB1c2hsICUwIDsgcG9wZmwiOiA6ImciIChmbGFncyk6Im1lbW9yeSIsICJj YyIpOwogICAgICAgIH0KfQoKCgoKc3RhdGljIGlubGluZSB2b2lkIGRldl9rZnJlZV9za2JfYW55 KHN0cnVjdCBza19idWZmICpza2IpCnsKICAgICAgICBpZiAoKCgodm9pZCkoKDApKSwgaXJxX3N0 YXRfUmNhMDI4M2IwWzBdLl9fbG9jYWxfaXJxX2NvdW50KSAhPSAwKSkKICAgICAgICAgICAgICAg IGRldl9rZnJlZV9za2JfaXJxKHNrYik7CiAgICAgICAgZWxzZQogICAgICAgICAgICAgICAga2Zy ZWVfc2tiKHNrYik7Cn0KCgpleHRlcm4gaW50IG5ldGlmX3J4X1IyNzVjYzU4ZihzdHJ1Y3Qgc2tf YnVmZiAqc2tiKTsKCmV4dGVybiBpbnQgbmV0aWZfcmVjZWl2ZV9za2JfUmU2Njc4YzcxKHN0cnVj dCBza19idWZmICpza2IpOwpleHRlcm4gaW50IGRldl9pb2N0bF9SMzg3Yzc4YTUodW5zaWduZWQg aW50IGNtZCwgdm9pZCAqKTsKZXh0ZXJuIGludCBkZXZfY2hhbmdlX2ZsYWdzX1JmMmQ0YmZjZihz dHJ1Y3QgbmV0X2RldmljZSAqLCB1bnNpZ25lZCk7CmV4dGVybiB2b2lkIGRldl9xdWV1ZV94bWl0 X25pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKCmV4dGVy biB2b2lkIGRldl9pbml0KHZvaWQpOwoKZXh0ZXJuIGludCBuZXRkZXZfbml0OwoKCgoKc3RhdGlj IGlubGluZSBpbnQgbmV0aWZfcnhfbmkoc3RydWN0IHNrX2J1ZmYgKnNrYikKewogICAgICAgaW50 IGVyciA9IG5ldGlmX3J4X1IyNzVjYzU4Zihza2IpOwogICAgICAgaWYgKCgodm9pZCkoKDApKSwg aXJxX3N0YXRfUmNhMDI4M2IwWzBdLl9fc29mdGlycV9wZW5kaW5nKSkKICAgICAgICAgICAgICAg ZG9fc29mdGlycV9SZjBhNTI5YjcoKTsKICAgICAgIHJldHVybiBlcnI7Cn0KCnN0YXRpYyBpbmxp bmUgdm9pZCBkZXZfaW5pdF9idWZmZXJzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCnsKCn0KCmV4 dGVybiBpbnQgbmV0ZGV2X2ZpbmlzaF91bnJlZ2lzdGVyX1I1MjEwZjAwNyhzdHJ1Y3QgbmV0X2Rl dmljZSAqZGV2KTsKCnN0YXRpYyBpbmxpbmUgdm9pZCBkZXZfcHV0KHN0cnVjdCBuZXRfZGV2aWNl ICpkZXYpCnsKICAgICAgICBpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmZGV2LT5yZWZjbnQpKQog ICAgICAgICAgICAgICAgbmV0ZGV2X2ZpbmlzaF91bnJlZ2lzdGVyX1I1MjEwZjAwNyhkZXYpOwp9 CiMgNjM2ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5o IgpzdGF0aWMgaW5saW5lIGludCBuZXRpZl9jYXJyaWVyX29rKHN0cnVjdCBuZXRfZGV2aWNlICpk ZXYpCnsKICAgICAgICByZXR1cm4gIShfX2J1aWx0aW5fY29uc3RhbnRfcChfX0xJTktfU1RBVEVf Tk9DQVJSSUVSKSA/IGNvbnN0YW50X3Rlc3RfYml0KChfX0xJTktfU1RBVEVfTk9DQVJSSUVSKSwo JmRldi0+c3RhdGUpKSA6IHZhcmlhYmxlX3Rlc3RfYml0KChfX0xJTktfU1RBVEVfTk9DQVJSSUVS KSwoJmRldi0+c3RhdGUpKSk7Cn0KCmV4dGVybiB2b2lkIF9fbmV0ZGV2X3dhdGNoZG9nX3VwX1Jk Zjg4MDQ0NShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKCnN0YXRpYyBpbmxpbmUgdm9pZCBuZXRp Zl9jYXJyaWVyX29uKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCnsKICAgICAgICBjbGVhcl9iaXQo X19MSU5LX1NUQVRFX05PQ0FSUklFUiwgJmRldi0+c3RhdGUpOwogICAgICAgIGlmIChuZXRpZl9y dW5uaW5nKGRldikpCiAgICAgICAgICAgICAgICBfX25ldGRldl93YXRjaGRvZ191cF9SZGY4ODA0 NDUoZGV2KTsKfQoKc3RhdGljIGlubGluZSB2b2lkIG5ldGlmX2NhcnJpZXJfb2ZmKHN0cnVjdCBu ZXRfZGV2aWNlICpkZXYpCnsKICAgICAgICBzZXRfYml0KF9fTElOS19TVEFURV9OT0NBUlJJRVIs ICZkZXYtPnN0YXRlKTsKfQoKCnN0YXRpYyBpbmxpbmUgaW50IG5ldGlmX2RldmljZV9wcmVzZW50 KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCnsKICAgICAgICByZXR1cm4gKF9fYnVpbHRpbl9jb25z dGFudF9wKF9fTElOS19TVEFURV9QUkVTRU5UKSA/IGNvbnN0YW50X3Rlc3RfYml0KChfX0xJTktf U1RBVEVfUFJFU0VOVCksKCZkZXYtPnN0YXRlKSkgOiB2YXJpYWJsZV90ZXN0X2JpdCgoX19MSU5L X1NUQVRFX1BSRVNFTlQpLCgmZGV2LT5zdGF0ZSkpKTsKfQoKc3RhdGljIGlubGluZSB2b2lkIG5l dGlmX2RldmljZV9kZXRhY2goc3RydWN0IG5ldF9kZXZpY2UgKmRldikKewogICAgICAgIGlmICh0 ZXN0X2FuZF9jbGVhcl9iaXQoX19MSU5LX1NUQVRFX1BSRVNFTlQsICZkZXYtPnN0YXRlKSAmJgog ICAgICAgICAgICBuZXRpZl9ydW5uaW5nKGRldikpIHsKICAgICAgICAgICAgICAgIG5ldGlmX3N0 b3BfcXVldWUoZGV2KTsKICAgICAgICB9Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBuZXRpZl9kZXZp Y2VfYXR0YWNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCnsKICAgICAgICBpZiAoIXRlc3RfYW5k X3NldF9iaXQoX19MSU5LX1NUQVRFX1BSRVNFTlQsICZkZXYtPnN0YXRlKSAmJgogICAgICAgICAg ICBuZXRpZl9ydW5uaW5nKGRldikpIHsKICAgICAgICAgICAgICAgIG5ldGlmX3dha2VfcXVldWUo ZGV2KTsKICAgICAgICAgICAgICAgIF9fbmV0ZGV2X3dhdGNoZG9nX3VwX1JkZjg4MDQ0NShkZXYp OwogICAgICAgIH0KfQoKCgoKCgplbnVtIHsKICAgICAgICBORVRJRl9NU0dfRFJWID0gMHgwMDAx LAogICAgICAgIE5FVElGX01TR19QUk9CRSA9IDB4MDAwMiwKICAgICAgICBORVRJRl9NU0dfTElO SyA9IDB4MDAwNCwKICAgICAgICBORVRJRl9NU0dfVElNRVIgPSAweDAwMDgsCiAgICAgICAgTkVU SUZfTVNHX0lGRE9XTiA9IDB4MDAxMCwKICAgICAgICBORVRJRl9NU0dfSUZVUCA9IDB4MDAyMCwK ICAgICAgICBORVRJRl9NU0dfUlhfRVJSID0gMHgwMDQwLAogICAgICAgIE5FVElGX01TR19UWF9F UlIgPSAweDAwODAsCiAgICAgICAgTkVUSUZfTVNHX1RYX1FVRVVFRCA9IDB4MDEwMCwKICAgICAg ICBORVRJRl9NU0dfSU5UUiA9IDB4MDIwMCwKICAgICAgICBORVRJRl9NU0dfVFhfRE9ORSA9IDB4 MDQwMCwKICAgICAgICBORVRJRl9NU0dfUlhfU1RBVFVTID0gMHgwODAwLAogICAgICAgIE5FVElG X01TR19QS1REQVRBID0gMHgxMDAwLAogICAgICAgIE5FVElGX01TR19IVyA9IDB4MjAwMCwKICAg ICAgICBORVRJRl9NU0dfV09MID0gMHg0MDAwLAp9OwojIDcxOSAiL3Vzci9zcmMvbGludXgtMi40 LjIwLTgvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCIKc3RhdGljIGlubGluZSBpbnQgbmV0aWZf cnhfc2NoZWR1bGVfcHJlcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQp7CiAgICAgICAgcmV0dXJu IG5ldGlmX3J1bm5pbmcoZGV2KSAmJgogICAgICAgICAgICAgICAgIXRlc3RfYW5kX3NldF9iaXQo X19MSU5LX1NUQVRFX1JYX1NDSEVELCAmZGV2LT5zdGF0ZSk7Cn0KCgoKCgpzdGF0aWMgaW5saW5l IHZvaWQgX19uZXRpZl9yeF9zY2hlZHVsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQp7CiAgICAg ICAgdW5zaWduZWQgbG9uZyBmbGFnczsKICAgICAgICBpbnQgY3B1ID0gMDsKCiAgICAgICAgZG8g eyBfX2FzbV9fIF9fdm9sYXRpbGVfXygicHVzaGZsIDsgcG9wbCAlMCI6Ij1nIiAoZmxhZ3MpOiAp OyBfX2FzbV9fIF9fdm9sYXRpbGVfXygiY2xpIjogOiA6Im1lbW9yeSIpOyB9IHdoaWxlKDApOzsK ICAgICAgICBhdG9taWNfaW5jKCYoZGV2KS0+cmVmY250KTsKICAgICAgICBsaXN0X2FkZF90YWls KCZkZXYtPnBvbGxfbGlzdCwgJnNvZnRuZXRfZGF0YV9SNTAxZDFiNzFbY3B1XS5wb2xsX2xpc3Qp OwogICAgICAgIGlmIChkZXYtPnF1b3RhIDwgMCkKICAgICAgICAgICAgICAgIGRldi0+cXVvdGEg Kz0gZGV2LT53ZWlnaHQ7CiAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgZGV2LT5xdW90YSA9 IGRldi0+d2VpZ2h0OwogICAgICAgIGRvIHsgKCh2b2lkKSgoY3B1KSksIGlycV9zdGF0X1JjYTAy ODNiMFswXS5fX3NvZnRpcnFfcGVuZGluZykgfD0gMVVMIDw8IChORVRfUlhfU09GVElSUSk7IH0g d2hpbGUgKDApOwogICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJwdXNobCAlMCA7IHBvcGZs IjogOiJnIiAoZmxhZ3MpOiJtZW1vcnkiLCAiY2MiKTsKfQoKCgpzdGF0aWMgaW5saW5lIHZvaWQg bmV0aWZfcnhfc2NoZWR1bGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKewogICAgICAgIGlmIChu ZXRpZl9yeF9zY2hlZHVsZV9wcmVwKGRldikpCiAgICAgICAgICAgICAgICBfX25ldGlmX3J4X3Nj aGVkdWxlKGRldik7Cn0KCgoKCnN0YXRpYyBpbmxpbmUgaW50IG5ldGlmX3J4X3Jlc2NoZWR1bGUo c3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHVuZG8pCnsKICAgICAgICBpZiAobmV0aWZfcnhf c2NoZWR1bGVfcHJlcChkZXYpKSB7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdz OwogICAgICAgICAgICAgICAgaW50IGNwdSA9IDA7CgogICAgICAgICAgICAgICAgZGV2LT5xdW90 YSArPSB1bmRvOwoKICAgICAgICAgICAgICAgIGRvIHsgX19hc21fXyBfX3ZvbGF0aWxlX18oInB1 c2hmbCA7IHBvcGwgJTAiOiI9ZyIgKGZsYWdzKTogKTsgX19hc21fXyBfX3ZvbGF0aWxlX18oImNs aSI6IDogOiJtZW1vcnkiKTsgfSB3aGlsZSgwKTs7CiAgICAgICAgICAgICAgICBsaXN0X2FkZF90 YWlsKCZkZXYtPnBvbGxfbGlzdCwgJnNvZnRuZXRfZGF0YV9SNTAxZDFiNzFbY3B1XS5wb2xsX2xp c3QpOwogICAgICAgICAgICAgICAgZG8geyAoKHZvaWQpKChjcHUpKSwgaXJxX3N0YXRfUmNhMDI4 M2IwWzBdLl9fc29mdGlycV9wZW5kaW5nKSB8PSAxVUwgPDwgKE5FVF9SWF9TT0ZUSVJRKTsgfSB3 aGlsZSAoMCk7CiAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygicHVzaGwgJTAg OyBwb3BmbCI6IDoiZyIgKGZsYWdzKToibWVtb3J5IiwgImNjIik7CiAgICAgICAgICAgICAgICBy ZXR1cm4gMTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIDA7Cn0KCgoKCgoKc3RhdGljIGlubGlu ZSB2b2lkIG5ldGlmX3J4X2NvbXBsZXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCnsKICAgICAg ICB1bnNpZ25lZCBsb25nIGZsYWdzOwoKICAgICAgICBkbyB7IF9fYXNtX18gX192b2xhdGlsZV9f KCJwdXNoZmwgOyBwb3BsICUwIjoiPWciIChmbGFncyk6ICk7IF9fYXNtX18gX192b2xhdGlsZV9f KCJjbGkiOiA6IDoibWVtb3J5Iik7IH0gd2hpbGUoMCk7OwogICAgICAgIGlmICghKF9fYnVpbHRp bl9jb25zdGFudF9wKF9fTElOS19TVEFURV9SWF9TQ0hFRCkgPyBjb25zdGFudF90ZXN0X2JpdCgo X19MSU5LX1NUQVRFX1JYX1NDSEVEKSwoJmRldi0+c3RhdGUpKSA6IHZhcmlhYmxlX3Rlc3RfYml0 KChfX0xJTktfU1RBVEVfUlhfU0NIRUQpLCgmZGV2LT5zdGF0ZSkpKSkgX19hc21fXyBfX3ZvbGF0 aWxlX18oICJ1ZDJcbiIgIlx0LndvcmQgJWMwXG4iICJcdC5sb25nICVjMVxuIiA6IDogImkiICg3 ODMpLCAiaSIgKCIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L25ldGRldmlj ZS5oIikpOwogICAgICAgIGxpc3RfZGVsKCZkZXYtPnBvbGxfbGlzdCk7CiAgICAgICAgY2xlYXJf Yml0KF9fTElOS19TVEFURV9SWF9TQ0hFRCwgJmRldi0+c3RhdGUpOwogICAgICAgIF9fYXNtX18g X192b2xhdGlsZV9fKCJwdXNobCAlMCA7IHBvcGZsIjogOiJnIiAoZmxhZ3MpOiJtZW1vcnkiLCAi Y2MiKTsKfQoKCgpleHRlcm4gdm9pZCBldGhlcl9zZXR1cF9SNzU3ODg5Zjcoc3RydWN0IG5ldF9k ZXZpY2UgKmRldik7CmV4dGVybiB2b2lkIGZkZGlfc2V0dXBfUjFjYmIxYTkwKHN0cnVjdCBuZXRf ZGV2aWNlICpkZXYpOwpleHRlcm4gdm9pZCB0cl9zZXR1cF9SMjFkMjI1ZGIoc3RydWN0IG5ldF9k ZXZpY2UgKmRldik7CmV4dGVybiB2b2lkIGZjX3NldHVwX1JhYzEwMzA3YihzdHJ1Y3QgbmV0X2Rl dmljZSAqZGV2KTsKZXh0ZXJuIHZvaWQgZmNfZnJlZWRldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2 KTsKCmV4dGVybiBpbnQgcmVnaXN0ZXJfbmV0ZGV2X1JmODFiYTZlYyhzdHJ1Y3QgbmV0X2Rldmlj ZSAqZGV2KTsKZXh0ZXJuIHZvaWQgdW5yZWdpc3Rlcl9uZXRkZXZfUmZiNGViYWQ5KHN0cnVjdCBu ZXRfZGV2aWNlICpkZXYpOwoKZXh0ZXJuIHZvaWQgZGV2X21jX3VwbG9hZF9SMWM5MDY4ZTYoc3Ry dWN0IG5ldF9kZXZpY2UgKmRldik7CmV4dGVybiBpbnQgZGV2X21jX2RlbGV0ZV9SNDY1ZWM2YmIo c3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqYWRkciwgaW50IGFsZW4sIGludCBhbGwpOwpl eHRlcm4gaW50IGRldl9tY19hZGRfUjBkYjQwZDQzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZv aWQgKmFkZHIsIGludCBhbGVuLCBpbnQgbmV3b25seSk7CmV4dGVybiB2b2lkIGRldl9tY19kaXNj YXJkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpleHRlcm4gdm9pZCBkZXZfc2V0X3Byb21pc2N1 aXR5X1I3NGIzYjA0ZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaW5jKTsKZXh0ZXJuIHZv aWQgZGV2X3NldF9hbGxtdWx0aV9SNDJjZTE3ZjMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50 IGluYyk7CmV4dGVybiB2b2lkIG5ldGRldl9zdGF0ZV9jaGFuZ2VfUmE1ODY0MjAzKHN0cnVjdCBu ZXRfZGV2aWNlICpkZXYpOwoKZXh0ZXJuIHZvaWQgZGV2X2xvYWRfUmE5MGZkM2I3KGNvbnN0IGNo YXIgKm5hbWUpOwpleHRlcm4gdm9pZCBkZXZfbWNhc3RfaW5pdCh2b2lkKTsKZXh0ZXJuIGludCBu ZXRkZXZfcmVnaXN0ZXJfZmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAoKnN0aW11bCko c3RydWN0IG5ldF9kZXZpY2UgKmRldikpOwpleHRlcm4gdm9pZCBuZXRkZXZfdW5yZWdpc3Rlcl9m YyhpbnQgYml0KTsKZXh0ZXJuIGludCBuZXRkZXZfbWF4X2JhY2tsb2c7CmV4dGVybiBpbnQgd2Vp Z2h0X3A7CmV4dGVybiB1bnNpZ25lZCBsb25nIG5ldGRldl9mY194b2ZmOwpleHRlcm4gYXRvbWlj X3QgbmV0ZGV2X2Ryb3BwaW5nOwpleHRlcm4gaW50IG5ldGRldl9zZXRfbWFzdGVyX1IyYTA3Mjg3 ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqbWFzdGVyKTsKZXh0 ZXJuIHN0cnVjdCBza19idWZmICogc2tiX2NoZWNrc3VtX2hlbHBfUjA0MThhOTUwKHN0cnVjdCBz a19idWZmICpza2IpOwojIDEzMCAiaC9za2RydjFzdC5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgt Mi40LjIwLTgvaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oIiAxCiMgMzAgIi91c3Ivc3JjL2xp bnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaCIKZXh0ZXJuIGludCBldGhf aGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgdHlwZSwgdm9pZCAq ZGFkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc2FkZHIsIHVu c2lnbmVkIGxlbik7CmV4dGVybiBpbnQgZXRoX3JlYnVpbGRfaGVhZGVyKHN0cnVjdCBza19idWZm ICpza2IpOwpleHRlcm4gdW5zaWduZWQgc2hvcnQgZXRoX3R5cGVfdHJhbnNfUmU5MjQ3NTkyKHN0 cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpleHRlcm4gdm9pZCBl dGhfaGVhZGVyX2NhY2hlX3VwZGF0ZShzdHJ1Y3QgaGhfY2FjaGUgKmhoLCBzdHJ1Y3QgbmV0X2Rl dmljZSAqZGV2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1bnNpZ25lZCBjaGFyICogaGFkZHIpOwpleHRlcm4gaW50IGV0aF9oZWFkZXJfY2FjaGUoc3Ry dWN0IG5laWdoYm91ciAqbmVpZ2gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IGhoX2NhY2hlICpoaCk7CmV4dGVybiBpbnQgZXRoX2hlYWRlcl9wYXJzZShz dHJ1Y3Qgc2tfYnVmZiAqc2tiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGNoYXIgKmhhZGRyKTsKZXh0ZXJuIHN0cnVjdCBuZXRfZGV2aWNlICppbml0 X2V0aGVyZGV2X1I4NzBkOGRjMChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgc2l6ZW9mX3By aXYpOwpleHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX2V0aGVyZGV2X1I1ZDY5NDZjZShp bnQgc2l6ZW9mX3ByaXYpOwoKc3RhdGljIGlubGluZSB2b2lkIGV0aF9jb3B5X2FuZF9zdW0gKHN0 cnVjdCBza19idWZmICpkZXN0LCB1bnNpZ25lZCBjaGFyICpzcmMsIGludCBsZW4sIGludCBiYXNl KQp7CiAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKGxlbikgPyBfX2NvbnN0YW50X21lbWNw eSgoZGVzdC0+ZGF0YSksKHNyYyksKGxlbikpIDogX19tZW1jcHkoKGRlc3QtPmRhdGEpLChzcmMp LChsZW4pKSk7Cn0KIyA1OSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9l dGhlcmRldmljZS5oIgpzdGF0aWMgaW5saW5lIGludCBpc192YWxpZF9ldGhlcl9hZGRyKCB1OCAq YWRkciApCnsKICAgICAgICBjb25zdCBjaGFyIHphZGRyWzZdID0gezAsfTsKCiAgICAgICAgcmV0 dXJuICEoYWRkclswXSYxKSAmJiBfX2J1aWx0aW5fbWVtY21wKCBhZGRyLCB6YWRkciwgNik7Cn0K IyAxMzEgImgvc2tkcnYxc3QuaCIgMgoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2lu Y2x1ZGUvYXNtL3VhY2Nlc3MuaCIgMQojIDM1ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNs dWRlL2FzbS91YWNjZXNzLmgiCmV4dGVybiBpbnQgX192ZXJpZnlfd3JpdGVfUjIwM2FmYmViKGNv bnN0IHZvaWQgKiwgdW5zaWduZWQgbG9uZyk7CiMgNjIgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04 L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaCIKc3RhdGljIGlubGluZSBpbnQgdmVyaWZ5X2FyZWEoaW50 IHR5cGUsIGNvbnN0IHZvaWQgKiBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCnsKICAgICAgICBy ZXR1cm4gKCh7IHVuc2lnbmVkIGxvbmcgZmxhZyxzdW07IGFzbSgiYWRkbCAlMywlMSA7IHNiYmwg JTAsJTA7IGNtcGwgJTEsJTQ7IHNiYmwgJDAsJTAiIDoiPSZyIiAoZmxhZyksICI9ciIgKHN1bSkg OiIxIiAoYWRkciksImciICgoaW50KShzaXplKSksImciIChnZXRfY3VycmVudCgpLT5hZGRyX2xp bWl0LnNlZykpOyBmbGFnOyB9KSA9PSAwKSA/IDAgOiAtMTQ7Cn0KIyA4MSAiL3Vzci9zcmMvbGlu dXgtMi40LjIwLTgvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIgpzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxl X2VudHJ5CnsKICAgICAgICB1bnNpZ25lZCBsb25nIGluc24sIGZpeHVwOwp9OwoKCmV4dGVybiB1 bnNpZ25lZCBsb25nIHNlYXJjaF9leGNlcHRpb25fdGFibGUodW5zaWduZWQgbG9uZyk7CiMgMTA1 ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2FzbS91YWNjZXNzLmgiCmV4dGVybiB2 b2lkIF9fZ2V0X3VzZXJfMSh2b2lkKTsKZXh0ZXJuIHZvaWQgX19nZXRfdXNlcl8yKHZvaWQpOwpl eHRlcm4gdm9pZCBfX2dldF91c2VyXzQodm9pZCk7CiMgMTI3ICIvdXNyL3NyYy9saW51eC0yLjQu MjAtOC9pbmNsdWRlL2FzbS91YWNjZXNzLmgiCmV4dGVybiB2b2lkIF9fcHV0X3VzZXJfMSh2b2lk KTsKZXh0ZXJuIHZvaWQgX19wdXRfdXNlcl8yKHZvaWQpOwpleHRlcm4gdm9pZCBfX3B1dF91c2Vy XzQodm9pZCk7CmV4dGVybiB2b2lkIF9fcHV0X3VzZXJfOCh2b2lkKTsKCmV4dGVybiB2b2lkIF9f cHV0X3VzZXJfYmFkKHZvaWQpOwojIDE4OCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVk ZS9hc20vdWFjY2Vzcy5oIgpzdHJ1Y3QgX19sYXJnZV9zdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIGJ1 ZlsxMDBdOyB9OwojIDIyMCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9hc20vdWFj Y2Vzcy5oIgpleHRlcm4gbG9uZyBfX2dldF91c2VyX2JhZCh2b2lkKTsKIyAzMDggIi91c3Ivc3Jj L2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaCIKc3RhdGljIGlubGluZSB1bnNp Z25lZCBsb25nCl9fZ2VuZXJpY19jb3B5X2Zyb21fdXNlcl9ub2NoZWNrKHZvaWQgKnRvLCBjb25z dCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pCnsKICAgICAgICBkbyB7IGludCBfX2QwLCBf X2QxOyBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIjA6CXJlcDsgbW92c2xcbiIgIgltb3ZsICUzLCUw XG4iICIxOglyZXA7IG1vdnNiXG4iICIyOlxuIiAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIiAi MzoJbGVhIDAoJTMsJTAsNCksJTBcbiIgIjQ6CXB1c2hsICUwXG4iICIJcHVzaGwgJSVlYXhcbiIg Igl4b3JsICUlZWF4LCUlZWF4XG4iICIJcmVwOyBzdG9zYlxuIiAiCXBvcGwgJSVlYXhcbiIgIglw b3BsICUwXG4iICIJam1wIDJiXG4iICIucHJldmlvdXNcbiIgIi5zZWN0aW9uIF9fZXhfdGFibGUs XCJhXCJcbiIgIgkuYWxpZ24gNFxuIiAiCS5sb25nIDBiLDNiXG4iICIJLmxvbmcgMWIsNGJcbiIg Ii5wcmV2aW91cyIgOiAiPSZjIihuKSwgIj0mRCIgKF9fZDApLCAiPSZTIiAoX19kMSkgOiAiciIo biAmIDMpLCAiMCIobiAvIDQpLCAiMSIodG8pLCAiMiIoZnJvbSkgOiAibWVtb3J5Iik7IH0gd2hp bGUgKDApOwogICAgICAgIHJldHVybiBuOwp9CgpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcK X19nZW5lcmljX2NvcHlfdG9fdXNlcl9ub2NoZWNrKHZvaWQgKnRvLCBjb25zdCB2b2lkICpmcm9t LCB1bnNpZ25lZCBsb25nIG4pCnsKICAgICAgICBkbyB7IGludCBfX2QwLCBfX2QxOyBfX2FzbV9f IF9fdm9sYXRpbGVfXyggIjA6CXJlcDsgbW92c2xcbiIgIgltb3ZsICUzLCUwXG4iICIxOglyZXA7 IG1vdnNiXG4iICIyOlxuIiAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIiAiMzoJbGVhIDAoJTMs JTAsNCksJTBcbiIgIglqbXAgMmJcbiIgIi5wcmV2aW91c1xuIiAiLnNlY3Rpb24gX19leF90YWJs ZSxcImFcIlxuIiAiCS5hbGlnbiA0XG4iICIJLmxvbmcgMGIsM2JcbiIgIgkubG9uZyAxYiwyYlxu IiAiLnByZXZpb3VzIiA6ICI9JmMiKG4pLCAiPSZEIiAoX19kMCksICI9JlMiIChfX2QxKSA6ICJy IihuICYgMyksICIwIihuIC8gNCksICIxIih0byksICIyIihmcm9tKSA6ICJtZW1vcnkiKTsgfSB3 aGlsZSAoMCk7CiAgICAgICAgcmV0dXJuIG47Cn0KIyA1NDMgIi91c3Ivc3JjL2xpbnV4LTIuNC4y MC04L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaCIKdW5zaWduZWQgbG9uZyBfX2dlbmVyaWNfY29weV90 b191c2VyX1JkNTIzZmRkMyh2b2lkICosIGNvbnN0IHZvaWQgKiwgdW5zaWduZWQgbG9uZyk7CnVu c2lnbmVkIGxvbmcgX19nZW5lcmljX2NvcHlfZnJvbV91c2VyX1IxMTYxNjZhYSh2b2lkICosIGNv bnN0IHZvaWQgKiwgdW5zaWduZWQgbG9uZyk7CgpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcK X19jb25zdGFudF9jb3B5X3RvX3VzZXIodm9pZCAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2ln bmVkIGxvbmcgbikKewogICAgICAgIHByZWZldGNoKGZyb20pOwogICAgICAgIGlmICgoKHsgdW5z aWduZWQgbG9uZyBmbGFnLHN1bTsgYXNtKCJhZGRsICUzLCUxIDsgc2JibCAlMCwlMDsgY21wbCAl MSwlNDsgc2JibCAkMCwlMCIgOiI9JnIiIChmbGFnKSwgIj1yIiAoc3VtKSA6IjEiICh0byksImci ICgoaW50KShuKSksImciIChnZXRfY3VycmVudCgpLT5hZGRyX2xpbWl0LnNlZykpOyBmbGFnOyB9 KSA9PSAwKSkKICAgICAgICAgICAgICAgIGRvIHsgaW50IF9fZDAsIF9fZDE7IHN3aXRjaCAobiAm IDMpIHsgZGVmYXVsdDogX19hc21fXyBfX3ZvbGF0aWxlX18oICIwOglyZXA7IG1vdnNsXG4iICIx OlxuIiAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIiAiMjoJc2hsICQyLCUwXG4iICIJam1wIDFi XG4iICIucHJldmlvdXNcbiIgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIgIgkuYWxpZ24g NFxuIiAiCS5sb25nIDBiLDJiXG4iICIucHJldmlvdXMiIDogIj1jIihuKSwgIj0mUyIgKF9fZDAp LCAiPSZEIiAoX19kMSkgOiAiMSIoZnJvbSksICIyIih0byksICIwIihuLzQpIDogIm1lbW9yeSIp OyBicmVhazsgY2FzZSAxOiBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIjA6CXJlcDsgbW92c2xcbiIg IjE6CW1vdnNiXG4iICIyOlxuIiAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIiAiMzoJc2hsICQy LCUwXG4iICI0OglpbmNsICUwXG4iICIJam1wIDJiXG4iICIucHJldmlvdXNcbiIgIi5zZWN0aW9u IF9fZXhfdGFibGUsXCJhXCJcbiIgIgkuYWxpZ24gNFxuIiAiCS5sb25nIDBiLDNiXG4iICIJLmxv bmcgMWIsNGJcbiIgIi5wcmV2aW91cyIgOiAiPWMiKG4pLCAiPSZTIiAoX19kMCksICI9JkQiIChf X2QxKSA6ICIxIihmcm9tKSwgIjIiKHRvKSwgIjAiKG4vNCkgOiAibWVtb3J5Iik7IGJyZWFrOyBj YXNlIDI6IF9fYXNtX18gX192b2xhdGlsZV9fKCAiMDoJcmVwOyBtb3ZzbFxuIiAiMToJbW92c3dc biIgIjI6XG4iICIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iICIzOglzaGwgJDIsJTBcbiIgIjQ6 CWFkZGwgJDIsJTBcbiIgIglqbXAgMmJcbiIgIi5wcmV2aW91c1xuIiAiLnNlY3Rpb24gX19leF90 YWJsZSxcImFcIlxuIiAiCS5hbGlnbiA0XG4iICIJLmxvbmcgMGIsM2JcbiIgIgkubG9uZyAxYiw0 YlxuIiAiLnByZXZpb3VzIiA6ICI9YyIobiksICI9JlMiIChfX2QwKSwgIj0mRCIgKF9fZDEpIDog IjEiKGZyb20pLCAiMiIodG8pLCAiMCIobi80KSA6ICJtZW1vcnkiKTsgYnJlYWs7IGNhc2UgMzog X19hc21fXyBfX3ZvbGF0aWxlX18oICIwOglyZXA7IG1vdnNsXG4iICIxOgltb3Zzd1xuIiAiMjoJ bW92c2JcbiIgIjM6XG4iICIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iICI0OglzaGwgJDIsJTBc biIgIjU6CWFkZGwgJDIsJTBcbiIgIjY6CWluY2wgJTBcbiIgIglqbXAgM2JcbiIgIi5wcmV2aW91 c1xuIiAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIiAiCS5hbGlnbiA0XG4iICIJLmxvbmcg MGIsNGJcbiIgIgkubG9uZyAxYiw1YlxuIiAiCS5sb25nIDJiLDZiXG4iICIucHJldmlvdXMiIDog Ij1jIihuKSwgIj0mUyIgKF9fZDApLCAiPSZEIiAoX19kMSkgOiAiMSIoZnJvbSksICIyIih0byks ICIwIihuLzQpIDogIm1lbW9yeSIpOyBicmVhazsgfSB9IHdoaWxlICgwKTsKICAgICAgICByZXR1 cm4gbjsKfQoKc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCl9fY29uc3RhbnRfY29weV9mcm9t X3VzZXIodm9pZCAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKewogICAg ICAgIGlmICgoKHsgdW5zaWduZWQgbG9uZyBmbGFnLHN1bTsgYXNtKCJhZGRsICUzLCUxIDsgc2Ji bCAlMCwlMDsgY21wbCAlMSwlNDsgc2JibCAkMCwlMCIgOiI9JnIiIChmbGFnKSwgIj1yIiAoc3Vt KSA6IjEiIChmcm9tKSwiZyIgKChpbnQpKG4pKSwiZyIgKGdldF9jdXJyZW50KCktPmFkZHJfbGlt aXQuc2VnKSk7IGZsYWc7IH0pID09IDApKQogICAgICAgICAgICAgICAgZG8geyBpbnQgX19kMCwg X19kMTsgc3dpdGNoIChuICYgMykgeyBkZWZhdWx0OiBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIjA6 CXJlcDsgbW92c2xcbiIgIjE6XG4iICIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iICIyOglwdXNo bCAlMFxuIiAiCXB1c2hsICUlZWF4XG4iICIJeG9ybCAlJWVheCwlJWVheFxuIiAiCXJlcDsgc3Rv c2xcbiIgIglwb3BsICUlZWF4XG4iICIJcG9wbCAlMFxuIiAiCXNobCAkMiwlMFxuIiAiCWptcCAx YlxuIiAiLnByZXZpb3VzXG4iICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iICIJLmFsaWdu IDRcbiIgIgkubG9uZyAwYiwyYlxuIiAiLnByZXZpb3VzIiA6ICI9YyIobiksICI9JlMiIChfX2Qw KSwgIj0mRCIgKF9fZDEpIDogIjEiKGZyb20pLCAiMiIodG8pLCAiMCIobi80KSA6ICJtZW1vcnki KTsgYnJlYWs7IGNhc2UgMTogX19hc21fXyBfX3ZvbGF0aWxlX18oICIwOglyZXA7IG1vdnNsXG4i ICIxOgltb3ZzYlxuIiAiMjpcbiIgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIgIjM6CXB1c2hs ICUwXG4iICIJcHVzaGwgJSVlYXhcbiIgIgl4b3JsICUlZWF4LCUlZWF4XG4iICIJcmVwOyBzdG9z bFxuIiAiCXN0b3NiXG4iICIJcG9wbCAlJWVheFxuIiAiCXBvcGwgJTBcbiIgIglzaGwgJDIsJTBc biIgIglpbmNsICUwXG4iICIJam1wIDJiXG4iICI0OglwdXNobCAlJWVheFxuIiAiCXhvcmwgJSVl YXgsJSVlYXhcbiIgIglzdG9zYlxuIiAiCXBvcGwgJSVlYXhcbiIgIglpbmNsICUwXG4iICIJam1w IDJiXG4iICIucHJldmlvdXNcbiIgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIgIgkuYWxp Z24gNFxuIiAiCS5sb25nIDBiLDNiXG4iICIJLmxvbmcgMWIsNGJcbiIgIi5wcmV2aW91cyIgOiAi PWMiKG4pLCAiPSZTIiAoX19kMCksICI9JkQiIChfX2QxKSA6ICIxIihmcm9tKSwgIjIiKHRvKSwg IjAiKG4vNCkgOiAibWVtb3J5Iik7IGJyZWFrOyBjYXNlIDI6IF9fYXNtX18gX192b2xhdGlsZV9f KCAiMDoJcmVwOyBtb3ZzbFxuIiAiMToJbW92c3dcbiIgIjI6XG4iICIuc2VjdGlvbiAuZml4dXAs XCJheFwiXG4iICIzOglwdXNobCAlMFxuIiAiCXB1c2hsICUlZWF4XG4iICIJeG9ybCAlJWVheCwl JWVheFxuIiAiCXJlcDsgc3Rvc2xcbiIgIglzdG9zd1xuIiAiCXBvcGwgJSVlYXhcbiIgIglwb3Bs ICUwXG4iICIJc2hsICQyLCUwXG4iICIJYWRkbCAkMiwlMFxuIiAiCWptcCAyYlxuIiAiNDoJcHVz aGwgJSVlYXhcbiIgIgl4b3JsICUlZWF4LCUlZWF4XG4iICIJc3Rvc3dcbiIgIglwb3BsICUlZWF4 XG4iICIJYWRkbCAkMiwlMFxuIiAiCWptcCAyYlxuIiAiLnByZXZpb3VzXG4iICIuc2VjdGlvbiBf X2V4X3RhYmxlLFwiYVwiXG4iICIJLmFsaWduIDRcbiIgIgkubG9uZyAwYiwzYlxuIiAiCS5sb25n IDFiLDRiXG4iICIucHJldmlvdXMiIDogIj1jIihuKSwgIj0mUyIgKF9fZDApLCAiPSZEIiAoX19k MSkgOiAiMSIoZnJvbSksICIyIih0byksICIwIihuLzQpIDogIm1lbW9yeSIpOyBicmVhazsgY2Fz ZSAzOiBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIjA6CXJlcDsgbW92c2xcbiIgIjE6CW1vdnN3XG4i ICIyOgltb3ZzYlxuIiAiMzpcbiIgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIgIjQ6CXB1c2hs ICUwXG4iICIJcHVzaGwgJSVlYXhcbiIgIgl4b3JsICUlZWF4LCUlZWF4XG4iICIJcmVwOyBzdG9z bFxuIiAiCXN0b3N3XG4iICIJc3Rvc2JcbiIgIglwb3BsICUlZWF4XG4iICIJcG9wbCAlMFxuIiAi CXNobCAkMiwlMFxuIiAiCWFkZGwgJDMsJTBcbiIgIglqbXAgMmJcbiIgIjU6CXB1c2hsICUlZWF4 XG4iICIJeG9ybCAlJWVheCwlJWVheFxuIiAiCXN0b3N3XG4iICIJc3Rvc2JcbiIgIglwb3BsICUl ZWF4XG4iICIJYWRkbCAkMywlMFxuIiAiCWptcCAyYlxuIiAiNjoJcHVzaGwgJSVlYXhcbiIgIgl4 b3JsICUlZWF4LCUlZWF4XG4iICIJc3Rvc2JcbiIgIglwb3BsICUlZWF4XG4iICIJaW5jbCAlMFxu IiAiCWptcCAzYlxuIiAiLnByZXZpb3VzXG4iICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4i ICIJLmFsaWduIDRcbiIgIgkubG9uZyAwYiw0YlxuIiAiCS5sb25nIDFiLDViXG4iICIJLmxvbmcg MmIsNmJcbiIgIi5wcmV2aW91cyIgOiAiPWMiKG4pLCAiPSZTIiAoX19kMCksICI9JkQiIChfX2Qx KSA6ICIxIihmcm9tKSwgIjIiKHRvKSwgIjAiKG4vNCkgOiAibWVtb3J5Iik7IGJyZWFrOyB9IH0g d2hpbGUgKDApOwogICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIChfX2J1aWx0aW5fY29uc3Rh bnRfcCgwKSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCgobikpID8gX19jb25zdGFudF9jX2FuZF9j b3VudF9tZW1zZXQoKCh0bykpLCgoMHgwMTAxMDEwMVVMKih1bnNpZ25lZCBjaGFyKSgwKSkpLCgo bikpKSA6IF9fY29uc3RhbnRfY19tZW1zZXQoKCh0bykpLCgoMHgwMTAxMDEwMVVMKih1bnNpZ25l ZCBjaGFyKSgwKSkpLCgobikpKSkgOiAoX19idWlsdGluX2NvbnN0YW50X3AoKG4pKSA/IF9fbWVt c2V0X2dlbmVyaWMoKCgodG8pKSksKCgoMCkpKSwoKChuKSkpKSA6IF9fbWVtc2V0X2dlbmVyaWMo KCh0bykpLCgoMCkpLCgobikpKSkpOwogICAgICAgIHJldHVybiBuOwp9CgpzdGF0aWMgaW5saW5l IHVuc2lnbmVkIGxvbmcKX19jb25zdGFudF9jb3B5X3RvX3VzZXJfbm9jaGVjayh2b2lkICp0bywg Y29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKQp7CiAgICAgICAgZG8geyBpbnQgX19k MCwgX19kMTsgc3dpdGNoIChuICYgMykgeyBkZWZhdWx0OiBfX2FzbV9fIF9fdm9sYXRpbGVfXygg IjA6CXJlcDsgbW92c2xcbiIgIjE6XG4iICIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iICIyOglz aGwgJDIsJTBcbiIgIglqbXAgMWJcbiIgIi5wcmV2aW91c1xuIiAiLnNlY3Rpb24gX19leF90YWJs ZSxcImFcIlxuIiAiCS5hbGlnbiA0XG4iICIJLmxvbmcgMGIsMmJcbiIgIi5wcmV2aW91cyIgOiAi PWMiKG4pLCAiPSZTIiAoX19kMCksICI9JkQiIChfX2QxKSA6ICIxIihmcm9tKSwgIjIiKHRvKSwg IjAiKG4vNCkgOiAibWVtb3J5Iik7IGJyZWFrOyBjYXNlIDE6IF9fYXNtX18gX192b2xhdGlsZV9f KCAiMDoJcmVwOyBtb3ZzbFxuIiAiMToJbW92c2JcbiIgIjI6XG4iICIuc2VjdGlvbiAuZml4dXAs XCJheFwiXG4iICIzOglzaGwgJDIsJTBcbiIgIjQ6CWluY2wgJTBcbiIgIglqbXAgMmJcbiIgIi5w cmV2aW91c1xuIiAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIiAiCS5hbGlnbiA0XG4iICIJ LmxvbmcgMGIsM2JcbiIgIgkubG9uZyAxYiw0YlxuIiAiLnByZXZpb3VzIiA6ICI9YyIobiksICI9 JlMiIChfX2QwKSwgIj0mRCIgKF9fZDEpIDogIjEiKGZyb20pLCAiMiIodG8pLCAiMCIobi80KSA6 ICJtZW1vcnkiKTsgYnJlYWs7IGNhc2UgMjogX19hc21fXyBfX3ZvbGF0aWxlX18oICIwOglyZXA7 IG1vdnNsXG4iICIxOgltb3Zzd1xuIiAiMjpcbiIgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIg IjM6CXNobCAkMiwlMFxuIiAiNDoJYWRkbCAkMiwlMFxuIiAiCWptcCAyYlxuIiAiLnByZXZpb3Vz XG4iICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iICIJLmFsaWduIDRcbiIgIgkubG9uZyAw YiwzYlxuIiAiCS5sb25nIDFiLDRiXG4iICIucHJldmlvdXMiIDogIj1jIihuKSwgIj0mUyIgKF9f ZDApLCAiPSZEIiAoX19kMSkgOiAiMSIoZnJvbSksICIyIih0byksICIwIihuLzQpIDogIm1lbW9y eSIpOyBicmVhazsgY2FzZSAzOiBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIjA6CXJlcDsgbW92c2xc biIgIjE6CW1vdnN3XG4iICIyOgltb3ZzYlxuIiAiMzpcbiIgIi5zZWN0aW9uIC5maXh1cCxcImF4 XCJcbiIgIjQ6CXNobCAkMiwlMFxuIiAiNToJYWRkbCAkMiwlMFxuIiAiNjoJaW5jbCAlMFxuIiAi CWptcCAzYlxuIiAiLnByZXZpb3VzXG4iICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iICIJ LmFsaWduIDRcbiIgIgkubG9uZyAwYiw0YlxuIiAiCS5sb25nIDFiLDViXG4iICIJLmxvbmcgMmIs NmJcbiIgIi5wcmV2aW91cyIgOiAiPWMiKG4pLCAiPSZTIiAoX19kMCksICI9JkQiIChfX2QxKSA6 ICIxIihmcm9tKSwgIjIiKHRvKSwgIjAiKG4vNCkgOiAibWVtb3J5Iik7IGJyZWFrOyB9IH0gd2hp bGUgKDApOwogICAgICAgIHJldHVybiBuOwp9CgpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcK X19jb25zdGFudF9jb3B5X2Zyb21fdXNlcl9ub2NoZWNrKHZvaWQgKnRvLCBjb25zdCB2b2lkICpm cm9tLCB1bnNpZ25lZCBsb25nIG4pCnsKICAgICAgICBkbyB7IGludCBfX2QwLCBfX2QxOyBzd2l0 Y2ggKG4gJiAzKSB7IGRlZmF1bHQ6IF9fYXNtX18gX192b2xhdGlsZV9fKCAiMDoJcmVwOyBtb3Zz bFxuIiAiMTpcbiIgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIgIjI6CXB1c2hsICUwXG4iICIJ cHVzaGwgJSVlYXhcbiIgIgl4b3JsICUlZWF4LCUlZWF4XG4iICIJcmVwOyBzdG9zbFxuIiAiCXBv cGwgJSVlYXhcbiIgIglwb3BsICUwXG4iICIJc2hsICQyLCUwXG4iICIJam1wIDFiXG4iICIucHJl dmlvdXNcbiIgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIgIgkuYWxpZ24gNFxuIiAiCS5s b25nIDBiLDJiXG4iICIucHJldmlvdXMiIDogIj1jIihuKSwgIj0mUyIgKF9fZDApLCAiPSZEIiAo X19kMSkgOiAiMSIoZnJvbSksICIyIih0byksICIwIihuLzQpIDogIm1lbW9yeSIpOyBicmVhazsg Y2FzZSAxOiBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIjA6CXJlcDsgbW92c2xcbiIgIjE6CW1vdnNi XG4iICIyOlxuIiAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIiAiMzoJcHVzaGwgJTBcbiIgIglw dXNobCAlJWVheFxuIiAiCXhvcmwgJSVlYXgsJSVlYXhcbiIgIglyZXA7IHN0b3NsXG4iICIJc3Rv c2JcbiIgIglwb3BsICUlZWF4XG4iICIJcG9wbCAlMFxuIiAiCXNobCAkMiwlMFxuIiAiCWluY2wg JTBcbiIgIglqbXAgMmJcbiIgIjQ6CXB1c2hsICUlZWF4XG4iICIJeG9ybCAlJWVheCwlJWVheFxu IiAiCXN0b3NiXG4iICIJcG9wbCAlJWVheFxuIiAiCWluY2wgJTBcbiIgIglqbXAgMmJcbiIgIi5w cmV2aW91c1xuIiAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIiAiCS5hbGlnbiA0XG4iICIJ LmxvbmcgMGIsM2JcbiIgIgkubG9uZyAxYiw0YlxuIiAiLnByZXZpb3VzIiA6ICI9YyIobiksICI9 JlMiIChfX2QwKSwgIj0mRCIgKF9fZDEpIDogIjEiKGZyb20pLCAiMiIodG8pLCAiMCIobi80KSA6 ICJtZW1vcnkiKTsgYnJlYWs7IGNhc2UgMjogX19hc21fXyBfX3ZvbGF0aWxlX18oICIwOglyZXA7 IG1vdnNsXG4iICIxOgltb3Zzd1xuIiAiMjpcbiIgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIg IjM6CXB1c2hsICUwXG4iICIJcHVzaGwgJSVlYXhcbiIgIgl4b3JsICUlZWF4LCUlZWF4XG4iICIJ cmVwOyBzdG9zbFxuIiAiCXN0b3N3XG4iICIJcG9wbCAlJWVheFxuIiAiCXBvcGwgJTBcbiIgIglz aGwgJDIsJTBcbiIgIglhZGRsICQyLCUwXG4iICIJam1wIDJiXG4iICI0OglwdXNobCAlJWVheFxu IiAiCXhvcmwgJSVlYXgsJSVlYXhcbiIgIglzdG9zd1xuIiAiCXBvcGwgJSVlYXhcbiIgIglhZGRs ICQyLCUwXG4iICIJam1wIDJiXG4iICIucHJldmlvdXNcbiIgIi5zZWN0aW9uIF9fZXhfdGFibGUs XCJhXCJcbiIgIgkuYWxpZ24gNFxuIiAiCS5sb25nIDBiLDNiXG4iICIJLmxvbmcgMWIsNGJcbiIg Ii5wcmV2aW91cyIgOiAiPWMiKG4pLCAiPSZTIiAoX19kMCksICI9JkQiIChfX2QxKSA6ICIxIihm cm9tKSwgIjIiKHRvKSwgIjAiKG4vNCkgOiAibWVtb3J5Iik7IGJyZWFrOyBjYXNlIDM6IF9fYXNt X18gX192b2xhdGlsZV9fKCAiMDoJcmVwOyBtb3ZzbFxuIiAiMToJbW92c3dcbiIgIjI6CW1vdnNi XG4iICIzOlxuIiAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIiAiNDoJcHVzaGwgJTBcbiIgIglw dXNobCAlJWVheFxuIiAiCXhvcmwgJSVlYXgsJSVlYXhcbiIgIglyZXA7IHN0b3NsXG4iICIJc3Rv c3dcbiIgIglzdG9zYlxuIiAiCXBvcGwgJSVlYXhcbiIgIglwb3BsICUwXG4iICIJc2hsICQyLCUw XG4iICIJYWRkbCAkMywlMFxuIiAiCWptcCAyYlxuIiAiNToJcHVzaGwgJSVlYXhcbiIgIgl4b3Js ICUlZWF4LCUlZWF4XG4iICIJc3Rvc3dcbiIgIglzdG9zYlxuIiAiCXBvcGwgJSVlYXhcbiIgIglh ZGRsICQzLCUwXG4iICIJam1wIDJiXG4iICI2OglwdXNobCAlJWVheFxuIiAiCXhvcmwgJSVlYXgs JSVlYXhcbiIgIglzdG9zYlxuIiAiCXBvcGwgJSVlYXhcbiIgIglpbmNsICUwXG4iICIJam1wIDNi XG4iICIucHJldmlvdXNcbiIgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIgIgkuYWxpZ24g NFxuIiAiCS5sb25nIDBiLDRiXG4iICIJLmxvbmcgMWIsNWJcbiIgIgkubG9uZyAyYiw2YlxuIiAi LnByZXZpb3VzIiA6ICI9YyIobiksICI9JlMiIChfX2QwKSwgIj0mRCIgKF9fZDEpIDogIjEiKGZy b20pLCAiMiIodG8pLCAiMCIobi80KSA6ICJtZW1vcnkiKTsgYnJlYWs7IH0gfSB3aGlsZSAoMCk7 CiAgICAgICAgcmV0dXJuIG47Cn0KIyA1OTkgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1 ZGUvYXNtL3VhY2Nlc3MuaCIKbG9uZyBzdHJuY3B5X2Zyb21fdXNlcl9SMjQ0MjhiZTUoY2hhciAq ZHN0LCBjb25zdCBjaGFyICpzcmMsIGxvbmcgY291bnQpOwpsb25nIF9fc3RybmNweV9mcm9tX3Vz ZXJfUmMwMDNjNjM3KGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBsb25nIGNvdW50KTsKCmxv bmcgc3Rybmxlbl91c2VyX1JiY2MzMDhiYihjb25zdCBjaGFyICpzdHIsIGxvbmcgbik7CnVuc2ln bmVkIGxvbmcgY2xlYXJfdXNlcl9SN2FlYzkwODkodm9pZCAqbWVtLCB1bnNpZ25lZCBsb25nIGxl bik7CnVuc2lnbmVkIGxvbmcgX19jbGVhcl91c2VyX1JmMzM0MTI2OCh2b2lkICptZW0sIHVuc2ln bmVkIGxvbmcgbGVuKTsKIyAxMzUgImgvc2tkcnYxc3QuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4 LTIuNC4yMC04L2luY2x1ZGUvbmV0L2NoZWNrc3VtLmgiIDEKIyAzMSAiL3Vzci9zcmMvbGludXgt Mi40LjIwLTgvaW5jbHVkZS9uZXQvY2hlY2tzdW0uaCIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQu MjAtOC9pbmNsdWRlL25ldC9pcC5oIiAxCiMgMjggIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2lu Y2x1ZGUvbmV0L2lwLmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51 eC9pcC5oIiAxCiMgOTMgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvaXAu aCIKc3RydWN0IGlwX29wdGlvbnMgewogIF9fdTMyIGZhZGRyOwogIHVuc2lnbmVkIGNoYXIgb3B0 bGVuOwogIHVuc2lnbmVkIGNoYXIgc3JyOwogIHVuc2lnbmVkIGNoYXIgcnI7CiAgdW5zaWduZWQg Y2hhciB0czsKICB1bnNpZ25lZCBjaGFyIGlzX3NldGJ5dXNlcjoxLAogICAgICAgICAgICAgICAg aXNfZGF0YToxLAogICAgICAgICAgICAgICAgaXNfc3RyaWN0cm91dGU6MSwKICAgICAgICAgICAg ICAgIHNycl9pc19oaXQ6MSwKICAgICAgICAgICAgICAgIGlzX2NoYW5nZWQ6MSwKICAgICAgICAg ICAgICAgIHJyX25lZWRhZGRyOjEsCiAgICAgICAgICAgICAgICB0c19uZWVkdGltZToxLAogICAg ICAgICAgICAgICAgdHNfbmVlZGFkZHI6MTsKICB1bnNpZ25lZCBjaGFyIHJvdXRlcl9hbGVydDsK ICB1bnNpZ25lZCBjaGFyIF9fcGFkMTsKICB1bnNpZ25lZCBjaGFyIF9fcGFkMjsKICB1bnNpZ25l ZCBjaGFyIF9fZGF0YVswXTsKfTsKCgoKCnN0cnVjdCBpcGhkciB7CgogICAgICAgIF9fdTggaWhs OjQsCiAgICAgICAgICAgICAgICB2ZXJzaW9uOjQ7CgoKCgoKCiAgICAgICAgX191OCB0b3M7CiAg ICAgICAgX191MTYgdG90X2xlbjsKICAgICAgICBfX3UxNiBpZDsKICAgICAgICBfX3UxNiBmcmFn X29mZjsKICAgICAgICBfX3U4IHR0bDsKICAgICAgICBfX3U4IHByb3RvY29sOwogICAgICAgIF9f dTE2IGNoZWNrOwogICAgICAgIF9fdTMyIHNhZGRyOwogICAgICAgIF9fdTMyIGRhZGRyOwoKfTsK IyAyOSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9uZXQvaXAuaCIgMgoKIyAxICIv dXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaCIgMQoKCgoK CnN0cnVjdCBpcHY0X2RldmNvbmYKewogICAgICAgIGludCBhY2NlcHRfcmVkaXJlY3RzOwogICAg ICAgIGludCBzZW5kX3JlZGlyZWN0czsKICAgICAgICBpbnQgc2VjdXJlX3JlZGlyZWN0czsKICAg ICAgICBpbnQgc2hhcmVkX21lZGlhOwogICAgICAgIGludCBhY2NlcHRfc291cmNlX3JvdXRlOwog ICAgICAgIGludCBycF9maWx0ZXI7CiAgICAgICAgaW50IHByb3h5X2FycDsKICAgICAgICBpbnQg Ym9vdHBfcmVsYXk7CiAgICAgICAgaW50IGxvZ19tYXJ0aWFuczsKICAgICAgICBpbnQgZm9yd2Fy ZGluZzsKICAgICAgICBpbnQgbWNfZm9yd2FyZGluZzsKICAgICAgICBpbnQgdGFnOwogICAgICAg IGludCBhcnBfZmlsdGVyOwogICAgICAgIGludCBtZWRpdW1faWQ7CiAgICAgICAgdm9pZCAqc3lz Y3RsOwp9OwoKZXh0ZXJuIHN0cnVjdCBpcHY0X2RldmNvbmYgaXB2NF9kZXZjb25mOwoKc3RydWN0 IGluX2RldmljZQp7CiAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKICAgICAgICBhdG9t aWNfdCByZWZjbnQ7CiAgICAgICAgcndsb2NrX3QgbG9jazsKICAgICAgICBpbnQgZGVhZDsKICAg ICAgICBzdHJ1Y3QgaW5faWZhZGRyICppZmFfbGlzdDsKICAgICAgICBzdHJ1Y3QgaXBfbWNfbGlz dCAqbWNfbGlzdDsKICAgICAgICB1bnNpZ25lZCBsb25nIG1yX3YxX3NlZW47CiAgICAgICAgc3Ry dWN0IG5laWdoX3Bhcm1zICphcnBfcGFybXM7CiAgICAgICAgc3RydWN0IGlwdjRfZGV2Y29uZiBj bmY7Cn07CiMgNjIgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvaW5ldGRl dmljZS5oIgpzdHJ1Y3QgaW5faWZhZGRyCnsKICAgICAgICBzdHJ1Y3QgaW5faWZhZGRyICppZmFf bmV4dDsKICAgICAgICBzdHJ1Y3QgaW5fZGV2aWNlICppZmFfZGV2OwogICAgICAgIHUzMiBpZmFf bG9jYWw7CiAgICAgICAgdTMyIGlmYV9hZGRyZXNzOwogICAgICAgIHUzMiBpZmFfbWFzazsKICAg ICAgICB1MzIgaWZhX2Jyb2FkY2FzdDsKICAgICAgICB1MzIgaWZhX2FueWNhc3Q7CiAgICAgICAg dW5zaWduZWQgY2hhciBpZmFfc2NvcGU7CiAgICAgICAgdW5zaWduZWQgY2hhciBpZmFfZmxhZ3M7 CiAgICAgICAgdW5zaWduZWQgY2hhciBpZmFfcHJlZml4bGVuOwogICAgICAgIGNoYXIgaWZhX2xh YmVsWzE2XTsKfTsKCmV4dGVybiBpbnQgcmVnaXN0ZXJfaW5ldGFkZHJfbm90aWZpZXJfUjNlNDVl OWZmKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOwpleHRlcm4gaW50IHVucmVnaXN0ZXJfaW5l dGFkZHJfbm90aWZpZXJfUjc2MGI0MzdhKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOwoKZXh0 ZXJuIHN0cnVjdCBuZXRfZGV2aWNlICppcF9kZXZfZmluZF9SMTI1MTRiYzYodTMyIGFkZHIpOwpl eHRlcm4gaW50IGluZXRfYWRkcl9vbmxpbmsoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCB1MzIg YSwgdTMyIGIpOwpleHRlcm4gaW50IGRldmluZXRfaW9jdGxfUjg2OWM4MGVhKHVuc2lnbmVkIGlu dCBjbWQsIHZvaWQgKik7CmV4dGVybiB2b2lkIGRldmluZXRfaW5pdCh2b2lkKTsKZXh0ZXJuIHN0 cnVjdCBpbl9kZXZpY2UgKmluZXRkZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKZXh0 ZXJuIHN0cnVjdCBpbl9kZXZpY2UgKmluZXRkZXZfYnlfaW5kZXhfUjFjZmNlOTQzKGludCk7CmV4 dGVybiB1MzIgaW5ldF9zZWxlY3RfYWRkcl9SNmJhNDAzYjIoY29uc3Qgc3RydWN0IG5ldF9kZXZp Y2UgKmRldiwgdTMyIGRzdCwgaW50IHNjb3BlKTsKZXh0ZXJuIHN0cnVjdCBpbl9pZmFkZHIgKmlu ZXRfaWZhX2J5cHJlZml4KHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiwgdTMyIHByZWZpeCwgdTMy IG1hc2spOwpleHRlcm4gdm9pZCBpbmV0X2ZvcndhcmRfY2hhbmdlKHZvaWQpOwoKc3RhdGljIF9f aW5saW5lX18gaW50IGluZXRfaWZhX21hdGNoKHUzMiBhZGRyLCBzdHJ1Y3QgaW5faWZhZGRyICpp ZmEpCnsKICAgICAgICByZXR1cm4gISgoYWRkcl5pZmEtPmlmYV9hZGRyZXNzKSZpZmEtPmlmYV9t YXNrKTsKfQoKCgoKCnN0YXRpYyBfX2lubGluZV9fIGludCBiYWRfbWFzayh1MzIgbWFzaywgdTMy IGFkZHIpCnsKICAgICAgICBpZiAoYWRkciAmIChtYXNrID0gfm1hc2spKQogICAgICAgICAgICAg ICAgcmV0dXJuIDE7CiAgICAgICAgbWFzayA9IChfX2J1aWx0aW5fY29uc3RhbnRfcCgoX191MzIp KChtYXNrKSkpID8gKHsgX191MzIgX194ID0gKCgobWFzaykpKTsgKChfX3UzMikoICgoKF9fdTMy KShfX3gpICYgKF9fdTMyKTB4MDAwMDAwZmZVTCkgPDwgMjQpIHwgKCgoX191MzIpKF9feCkgJiAo X191MzIpMHgwMDAwZmYwMFVMKSA8PCA4KSB8ICgoKF9fdTMyKShfX3gpICYgKF9fdTMyKTB4MDBm ZjAwMDBVTCkgPj4gOCkgfCAoKChfX3UzMikoX194KSAmIChfX3UzMikweGZmMDAwMDAwVUwpID4+ IDI0KSApKTsgfSkgOiBfX2Zzd2FiMzIoKChtYXNrKSkpKTsKICAgICAgICBpZiAobWFzayAmICht YXNrKzEpKQogICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgcmV0dXJuIDA7Cn0KIyAx MTggIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvaW5ldGRldmljZS5oIgpl eHRlcm4gcndsb2NrX3QgaW5ldGRldl9sb2NrX1I4YzNmMGVmNDsKCgpzdGF0aWMgX19pbmxpbmVf XyBzdHJ1Y3QgaW5fZGV2aWNlICoKaW5fZGV2X2dldChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAq ZGV2KQp7CiAgICAgICAgc3RydWN0IGluX2RldmljZSAqaW5fZGV2OwoKICAgICAgICAodm9pZCko JmluZXRkZXZfbG9ja19SOGMzZjBlZjQpOwogICAgICAgIGluX2RldiA9IGRldi0+aXBfcHRyOwog ICAgICAgIGlmIChpbl9kZXYpCiAgICAgICAgICAgICAgICBhdG9taWNfaW5jKCZpbl9kZXYtPnJl ZmNudCk7CiAgICAgICAgZG8geyB9IHdoaWxlKDApOwogICAgICAgIHJldHVybiBpbl9kZXY7Cn0K CnN0YXRpYyBfX2lubGluZV9fIHN0cnVjdCBpbl9kZXZpY2UgKgpfX2luX2Rldl9nZXQoY29uc3Qg c3RydWN0IG5ldF9kZXZpY2UgKmRldikKewogICAgICAgIHJldHVybiAoc3RydWN0IGluX2Rldmlj ZSopZGV2LT5pcF9wdHI7Cn0KCmV4dGVybiB2b2lkIGluX2Rldl9maW5pc2hfZGVzdHJveV9SOTZm ZTA2ZDAoc3RydWN0IGluX2RldmljZSAqaWRldik7CgpzdGF0aWMgX19pbmxpbmVfXyB2b2lkCmlu X2Rldl9wdXQoc3RydWN0IGluX2RldmljZSAqaWRldikKewogICAgICAgIGlmIChhdG9taWNfZGVj X2FuZF90ZXN0KCZpZGV2LT5yZWZjbnQpKQogICAgICAgICAgICAgICAgaW5fZGV2X2ZpbmlzaF9k ZXN0cm95X1I5NmZlMDZkMChpZGV2KTsKfQoKCgoKCgpzdGF0aWMgX19pbmxpbmVfXyBfX3UzMiBp bmV0X21ha2VfbWFzayhpbnQgbG9nbWFzaykKewogICAgICAgIGlmIChsb2dtYXNrKQogICAgICAg ICAgICAgICAgcmV0dXJuIChfX2J1aWx0aW5fY29uc3RhbnRfcCgoX191MzIpKCh+KCgxPDwoMzIt bG9nbWFzaykpLTEpKSkpID8gKHsgX191MzIgX194ID0gKCgofigoMTw8KDMyLWxvZ21hc2spKS0x KSkpKTsgKChfX3UzMikoICgoKF9fdTMyKShfX3gpICYgKF9fdTMyKTB4MDAwMDAwZmZVTCkgPDwg MjQpIHwgKCgoX191MzIpKF9feCkgJiAoX191MzIpMHgwMDAwZmYwMFVMKSA8PCA4KSB8ICgoKF9f dTMyKShfX3gpICYgKF9fdTMyKTB4MDBmZjAwMDBVTCkgPj4gOCkgfCAoKChfX3UzMikoX194KSAm IChfX3UzMikweGZmMDAwMDAwVUwpID4+IDI0KSApKTsgfSkgOiBfX2Zzd2FiMzIoKCh+KCgxPDwo MzItbG9nbWFzaykpLTEpKSkpKTsKICAgICAgICByZXR1cm4gMDsKfQoKc3RhdGljIF9faW5saW5l X18gaW50IGluZXRfbWFza19sZW4oX191MzIgbWFzaykKewogICAgICAgIGlmICghKG1hc2sgPSAo X19idWlsdGluX2NvbnN0YW50X3AoKF9fdTMyKSgobWFzaykpKSA/ICh7IF9fdTMyIF9feCA9ICgo KG1hc2spKSk7ICgoX191MzIpKCAoKChfX3UzMikoX194KSAmIChfX3UzMikweDAwMDAwMGZmVUwp IDw8IDI0KSB8ICgoKF9fdTMyKShfX3gpICYgKF9fdTMyKTB4MDAwMGZmMDBVTCkgPDwgOCkgfCAo KChfX3UzMikoX194KSAmIChfX3UzMikweDAwZmYwMDAwVUwpID4+IDgpIHwgKCgoX191MzIpKF9f eCkgJiAoX191MzIpMHhmZjAwMDAwMFVMKSA+PiAyNCkgKSk7IH0pIDogX19mc3dhYjMyKCgobWFz aykpKSkpKQogICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgcmV0dXJuIDMyIC0gZmZ6 KH5tYXNrKTsKfQojIDMxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL25ldC9pcC5o IiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9pbl9yb3V0ZS5o IiAxCiMgMzIgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbmV0L2lwLmgiIDIKIyAx ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL25ldC9yb3V0ZS5oIiAxCiMgMjggIi91 c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbmV0L3JvdXRlLmgiCiMgMSAiL3Vzci9zcmMv bGludXgtMi40LjIwLTgvaW5jbHVkZS9uZXQvZHN0LmgiIDEKIyAxMiAiL3Vzci9zcmMvbGludXgt Mi40LjIwLTgvaW5jbHVkZS9uZXQvZHN0LmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgv aW5jbHVkZS9uZXQvbmVpZ2hib3VyLmgiIDEKIyA1MyAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgv aW5jbHVkZS9uZXQvbmVpZ2hib3VyLmgiCnN0cnVjdCBuZWlnaF9wYXJtcwp7CiAgICAgICAgc3Ry dWN0IG5laWdoX3Bhcm1zICpuZXh0OwogICAgICAgIGludCAoKm5laWdoX3NldHVwKShzdHJ1Y3Qg bmVpZ2hib3VyICopOwogICAgICAgIHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsOwogICAgICAgIGlu dCBlbnRyaWVzOwogICAgICAgIHZvaWQgKnByaXY7CgogICAgICAgIHZvaWQgKnN5c2N0bF90YWJs ZTsKCiAgICAgICAgaW50IGJhc2VfcmVhY2hhYmxlX3RpbWU7CiAgICAgICAgaW50IHJldHJhbnNf dGltZTsKICAgICAgICBpbnQgZ2Nfc3RhbGV0aW1lOwogICAgICAgIGludCByZWFjaGFibGVfdGlt ZTsKICAgICAgICBpbnQgZGVsYXlfcHJvYmVfdGltZTsKCiAgICAgICAgaW50IHF1ZXVlX2xlbjsK ICAgICAgICBpbnQgdWNhc3RfcHJvYmVzOwogICAgICAgIGludCBhcHBfcHJvYmVzOwogICAgICAg IGludCBtY2FzdF9wcm9iZXM7CiAgICAgICAgaW50IGFueWNhc3RfZGVsYXk7CiAgICAgICAgaW50 IHByb3h5X2RlbGF5OwogICAgICAgIGludCBwcm94eV9xbGVuOwogICAgICAgIGludCBsb2NrdGlt ZTsKfTsKCnN0cnVjdCBuZWlnaF9zdGF0aXN0aWNzCnsKICAgICAgICB1bnNpZ25lZCBsb25nIGFs bG9jczsKICAgICAgICB1bnNpZ25lZCBsb25nIHJlc19mYWlsZWQ7CiAgICAgICAgdW5zaWduZWQg bG9uZyByY3ZfcHJvYmVzX21jYXN0OwogICAgICAgIHVuc2lnbmVkIGxvbmcgcmN2X3Byb2Jlc191 Y2FzdDsKfTsKCnN0cnVjdCBuZWlnaGJvdXIKewogICAgICAgIHN0cnVjdCBuZWlnaGJvdXIgKm5l eHQ7CiAgICAgICAgc3RydWN0IG5laWdoX3RhYmxlICp0Ymw7CiAgICAgICAgc3RydWN0IG5laWdo X3Bhcm1zICpwYXJtczsKICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogICAgICAgIHVu c2lnbmVkIGxvbmcgdXNlZDsKICAgICAgICB1bnNpZ25lZCBsb25nIGNvbmZpcm1lZDsKICAgICAg ICB1bnNpZ25lZCBsb25nIHVwZGF0ZWQ7CiAgICAgICAgX191OCBmbGFnczsKICAgICAgICBfX3U4 IG51ZF9zdGF0ZTsKICAgICAgICBfX3U4IHR5cGU7CiAgICAgICAgX191OCBkZWFkOwogICAgICAg IGF0b21pY190IHByb2JlczsKICAgICAgICByd2xvY2tfdCBsb2NrOwogICAgICAgIHVuc2lnbmVk IGNoYXIgaGFbKDggK3NpemVvZih1bnNpZ25lZCBsb25nKS0xKSZ+KHNpemVvZih1bnNpZ25lZCBs b25nKS0xKV07CiAgICAgICAgc3RydWN0IGhoX2NhY2hlICpoaDsKICAgICAgICBhdG9taWNfdCBy ZWZjbnQ7CiAgICAgICAgaW50ICgqb3V0cHV0KShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKICAgICAg ICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGFycF9xdWV1ZTsKICAgICAgICBzdHJ1Y3QgdGltZXJfbGlz dCB0aW1lcjsKICAgICAgICBzdHJ1Y3QgbmVpZ2hfb3BzICpvcHM7CiAgICAgICAgdTggcHJpbWFy eV9rZXlbMF07Cn07CgpzdHJ1Y3QgbmVpZ2hfb3BzCnsKICAgICAgICBpbnQgZmFtaWx5OwogICAg ICAgIHZvaWQgKCpkZXN0cnVjdG9yKShzdHJ1Y3QgbmVpZ2hib3VyICopOwogICAgICAgIHZvaWQg KCpzb2xpY2l0KShzdHJ1Y3QgbmVpZ2hib3VyICosIHN0cnVjdCBza19idWZmKik7CiAgICAgICAg dm9pZCAoKmVycm9yX3JlcG9ydCkoc3RydWN0IG5laWdoYm91ciAqLCBzdHJ1Y3Qgc2tfYnVmZiop OwogICAgICAgIGludCAoKm91dHB1dCkoc3RydWN0IHNrX2J1ZmYqKTsKICAgICAgICBpbnQgKCpj b25uZWN0ZWRfb3V0cHV0KShzdHJ1Y3Qgc2tfYnVmZiopOwogICAgICAgIGludCAoKmhoX291dHB1 dCkoc3RydWN0IHNrX2J1ZmYqKTsKICAgICAgICBpbnQgKCpxdWV1ZV94bWl0KShzdHJ1Y3Qgc2tf YnVmZiopOwp9OwoKc3RydWN0IHBuZWlnaF9lbnRyeQp7CiAgICAgICAgc3RydWN0IHBuZWlnaF9l bnRyeSAqbmV4dDsKICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogICAgICAgIHU4IGtl eVswXTsKfTsKIyAxMzkgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbmV0L25laWdo Ym91ci5oIgpzdHJ1Y3QgbmVpZ2hfdGFibGUKewogICAgICAgIHN0cnVjdCBuZWlnaF90YWJsZSAq bmV4dDsKICAgICAgICBpbnQgZmFtaWx5OwogICAgICAgIGludCBlbnRyeV9zaXplOwogICAgICAg IGludCBrZXlfbGVuOwogICAgICAgIF9fdTMyICgqaGFzaCkoY29uc3Qgdm9pZCAqcGtleSwgY29u c3Qgc3RydWN0IG5ldF9kZXZpY2UgKik7CiAgICAgICAgaW50ICgqY29uc3RydWN0b3IpKHN0cnVj dCBuZWlnaGJvdXIgKik7CiAgICAgICAgaW50ICgqcGNvbnN0cnVjdG9yKShzdHJ1Y3QgcG5laWdo X2VudHJ5ICopOwogICAgICAgIHZvaWQgKCpwZGVzdHJ1Y3Rvcikoc3RydWN0IHBuZWlnaF9lbnRy eSAqKTsKICAgICAgICB2b2lkICgqcHJveHlfcmVkbykoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAg ICAgICAgY2hhciAqaWQ7CiAgICAgICAgc3RydWN0IG5laWdoX3Bhcm1zIHBhcm1zOwoKICAgICAg ICBpbnQgZ2NfaW50ZXJ2YWw7CiAgICAgICAgaW50IGdjX3RocmVzaDE7CiAgICAgICAgaW50IGdj X3RocmVzaDI7CiAgICAgICAgaW50IGdjX3RocmVzaDM7CiAgICAgICAgdW5zaWduZWQgbG9uZyBs YXN0X2ZsdXNoOwogICAgICAgIHN0cnVjdCB0aW1lcl9saXN0IGdjX3RpbWVyOwogICAgICAgIHN0 cnVjdCB0aW1lcl9saXN0IHByb3h5X3RpbWVyOwogICAgICAgIHN0cnVjdCBza19idWZmX2hlYWQg cHJveHlfcXVldWU7CiAgICAgICAgaW50IGVudHJpZXM7CiAgICAgICAgcndsb2NrX3QgbG9jazsK ICAgICAgICB1bnNpZ25lZCBsb25nIGxhc3RfcmFuZDsKICAgICAgICBzdHJ1Y3QgbmVpZ2hfcGFy bXMgKnBhcm1zX2xpc3Q7CiAgICAgICAga21lbV9jYWNoZV90ICprbWVtX2NhY2hlcDsKICAgICAg ICBzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgZ2NfdGFzazsKICAgICAgICBzdHJ1Y3QgbmVpZ2hfc3Rh dGlzdGljcyBzdGF0czsKICAgICAgICBzdHJ1Y3QgbmVpZ2hib3VyICpoYXNoX2J1Y2tldHNbMHgx RiArMV07CiAgICAgICAgc3RydWN0IHBuZWlnaF9lbnRyeSAqcGhhc2hfYnVja2V0c1sweEYgKzFd Owp9OwoKZXh0ZXJuIHZvaWQgbmVpZ2hfdGFibGVfaW5pdF9SZTUwZTQ5OTUoc3RydWN0IG5laWdo X3RhYmxlICp0YmwpOwpleHRlcm4gaW50IG5laWdoX3RhYmxlX2NsZWFyX1IwMzliYTkzYyhzdHJ1 Y3QgbmVpZ2hfdGFibGUgKnRibCk7CmV4dGVybiBzdHJ1Y3QgbmVpZ2hib3VyICogbmVpZ2hfbG9v a3VwX1JjMDhiNmUwMyhzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqcGtleSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7 CmV4dGVybiBzdHJ1Y3QgbmVpZ2hib3VyICogbmVpZ2hfY3JlYXRlX1JjOTY1YjU0NihzdHJ1Y3Qg bmVpZ2hfdGFibGUgKnRibCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3Qgdm9pZCAqcGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CmV4dGVybiB2b2lkIG5laWdoX2Rl c3Ryb3lfUmM1MTBhNDA3KHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoKTsKZXh0ZXJuIGludCBfX25l aWdoX2V2ZW50X3NlbmRfUmFmNWNiNTQ5KHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoLCBzdHJ1Y3Qg c2tfYnVmZiAqc2tiKTsKZXh0ZXJuIGludCBuZWlnaF91cGRhdGVfUjAzZWZmY2U4KHN0cnVjdCBu ZWlnaGJvdXIgKm5laWdoLCBjb25zdCB1OCAqbGxhZGRyLCB1OCBuZXcsIGludCBvdmVycmlkZSwg aW50IGFycCk7CmV4dGVybiBpbnQgbmVpZ2hfaWZkb3duX1JjNjNiMTRhNyhzdHJ1Y3QgbmVpZ2hf dGFibGUgKnRibCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CmV4dGVybiBpbnQgbmVpZ2hfcmVz b2x2ZV9vdXRwdXRfUjQyNWVhY2YxKHN0cnVjdCBza19idWZmICpza2IpOwpleHRlcm4gaW50IG5l aWdoX2Nvbm5lY3RlZF9vdXRwdXRfUjhmODVkNDkzKHN0cnVjdCBza19idWZmICpza2IpOwpleHRl cm4gaW50IG5laWdoX2NvbXBhdF9vdXRwdXRfUmU4MTljY2FiKHN0cnVjdCBza19idWZmICpza2Ip OwpleHRlcm4gc3RydWN0IG5laWdoYm91ciAqbmVpZ2hfZXZlbnRfbnNfUmNiNDU3YTU3KHN0cnVj dCBuZWlnaF90YWJsZSAqdGJsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB1OCAqbGxhZGRyLCB2b2lkICpzYWRkciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CgpleHRl cm4gc3RydWN0IG5laWdoX3Bhcm1zICpuZWlnaF9wYXJtc19hbGxvY19SNDUzZTRjNTUoc3RydWN0 IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5laWdoX3RhYmxlICp0YmwpOwpleHRlcm4gdm9pZCBu ZWlnaF9wYXJtc19yZWxlYXNlX1JiOTU5ZWJkMChzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwgc3Ry dWN0IG5laWdoX3Bhcm1zICpwYXJtcyk7CmV4dGVybiB1bnNpZ25lZCBsb25nIG5laWdoX3JhbmRf cmVhY2hfdGltZV9SNDE4OGQ0MzkodW5zaWduZWQgbG9uZyBiYXNlKTsKCmV4dGVybiB2b2lkIHBu ZWlnaF9lbnF1ZXVlX1I4NmU2M2FlNShzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwgc3RydWN0IG5l aWdoX3Bhcm1zICpwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN0cnVjdCBza19idWZmICpza2IpOwpleHRlcm4gc3RydWN0IHBuZWlnaF9lbnRyeSAqcG5l aWdoX2xvb2t1cF9SNGI0MTQwMmYoc3RydWN0IG5laWdoX3RhYmxlICp0YmwsIGNvbnN0IHZvaWQg KmtleSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGNyZWF0KTsKZXh0ZXJuIGludCBwbmVp Z2hfZGVsZXRlKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLCBjb25zdCB2b2lkICprZXksIHN0cnVj dCBuZXRfZGV2aWNlICpkZXYpOwoKc3RydWN0IG5ldGxpbmtfY2FsbGJhY2s7CnN0cnVjdCBubG1z Z2hkcjsKZXh0ZXJuIGludCBuZWlnaF9kdW1wX2luZm9fUmU5MTNhN2ZiKHN0cnVjdCBza19idWZm ICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7CmV4dGVybiBpbnQgbmVpZ2hfYWRk X1IzYTM0NDk4OChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdm9p ZCAqYXJnKTsKZXh0ZXJuIGludCBuZWlnaF9kZWxldGVfUjBlMGJjNWNjKHN0cnVjdCBza19idWZm ICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLCB2b2lkICphcmcpOwpleHRlcm4gdm9pZCBuZWln aF9hcHBfbnMoc3RydWN0IG5laWdoYm91ciAqbik7CgpleHRlcm4gaW50IG5laWdoX3N5c2N0bF9y ZWdpc3Rlcl9SZDM5YWFjODcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5laWdoX3Bh cm1zICpwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgcF9pZCwgaW50IHBkZXZfaWQsIGNoYXIgKnBfbmFtZSk7CmV4dGVybiB2b2lkIG5l aWdoX3N5c2N0bF91bnJlZ2lzdGVyKHN0cnVjdCBuZWlnaF9wYXJtcyAqcCk7CgoKCgoKc3RhdGlj IGlubGluZSB2b2lkIG5laWdoX3JlbGVhc2Uoc3RydWN0IG5laWdoYm91ciAqbmVpZ2gpCnsKICAg ICAgICBpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmbmVpZ2gtPnJlZmNudCkpCiAgICAgICAgICAg ICAgICBuZWlnaF9kZXN0cm95X1JjNTEwYTQwNyhuZWlnaCk7Cn0KCnN0YXRpYyBpbmxpbmUgc3Ry dWN0IG5laWdoYm91ciAqIG5laWdoX2Nsb25lKHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoKQp7CiAg ICAgICAgaWYgKG5laWdoKQogICAgICAgICAgICAgICAgYXRvbWljX2luYygmbmVpZ2gtPnJlZmNu dCk7CiAgICAgICAgcmV0dXJuIG5laWdoOwp9CgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBuZWlnaF9j b25maXJtKHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoKQp7CiAgICAgICAgaWYgKG5laWdoKQogICAg ICAgICAgICAgICAgbmVpZ2gtPmNvbmZpcm1lZCA9IGppZmZpZXNfUjBkYTAyZDY3Owp9CgpzdGF0 aWMgaW5saW5lIGludCBuZWlnaF9pc19jb25uZWN0ZWQoc3RydWN0IG5laWdoYm91ciAqbmVpZ2gp CnsKICAgICAgICByZXR1cm4gbmVpZ2gtPm51ZF9zdGF0ZSYoMHg4MHwweDQwfDB4MDIpOwp9Cgpz dGF0aWMgaW5saW5lIGludCBuZWlnaF9pc192YWxpZChzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCkK ewogICAgICAgIHJldHVybiBuZWlnaC0+bnVkX3N0YXRlJigweDgwfDB4NDB8MHgwMnwweDEwfDB4 MDR8MHgwOCk7Cn0KCnN0YXRpYyBpbmxpbmUgaW50IG5laWdoX2V2ZW50X3NlbmQoc3RydWN0IG5l aWdoYm91ciAqbmVpZ2gsIHN0cnVjdCBza19idWZmICpza2IpCnsKICAgICAgICBuZWlnaC0+dXNl ZCA9IGppZmZpZXNfUjBkYTAyZDY3OwogICAgICAgIGlmICghKG5laWdoLT5udWRfc3RhdGUmKCgw eDgwfDB4NDB8MHgwMil8MHgwOHwweDEwKSkpCiAgICAgICAgICAgICAgICByZXR1cm4gX19uZWln aF9ldmVudF9zZW5kX1JhZjVjYjU0OShuZWlnaCwgc2tiKTsKICAgICAgICByZXR1cm4gMDsKfQoK c3RhdGljIGlubGluZSBzdHJ1Y3QgbmVpZ2hib3VyICoKX19uZWlnaF9sb29rdXAoc3RydWN0IG5l aWdoX3RhYmxlICp0YmwsIGNvbnN0IHZvaWQgKnBrZXksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYs IGludCBjcmVhdCkKewogICAgICAgIHN0cnVjdCBuZWlnaGJvdXIgKm4gPSBuZWlnaF9sb29rdXBf UmMwOGI2ZTAzKHRibCwgcGtleSwgZGV2KTsKCiAgICAgICAgaWYgKG4gfHwgIWNyZWF0KQogICAg ICAgICAgICAgICAgcmV0dXJuIG47CgogICAgICAgIG4gPSBuZWlnaF9jcmVhdGVfUmM5NjViNTQ2 KHRibCwgcGtleSwgZGV2KTsKICAgICAgICByZXR1cm4gSVNfRVJSKG4pID8gKCh2b2lkICopMCkg OiBuOwp9CgpzdGF0aWMgaW5saW5lIHN0cnVjdCBuZWlnaGJvdXIgKgpfX25laWdoX2xvb2t1cF9l cnJubyhzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwgY29uc3Qgdm9pZCAqcGtleSwKICBzdHJ1Y3Qg bmV0X2RldmljZSAqZGV2KQp7CiAgICAgICAgc3RydWN0IG5laWdoYm91ciAqbiA9IG5laWdoX2xv b2t1cF9SYzA4YjZlMDModGJsLCBwa2V5LCBkZXYpOwoKICAgICAgICBpZiAobikKICAgICAgICAg ICAgICAgIHJldHVybiBuOwoKICAgICAgICByZXR1cm4gbmVpZ2hfY3JlYXRlX1JjOTY1YjU0Nih0 YmwsIHBrZXksIGRldik7Cn0KIyAxMyAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9u ZXQvZHN0LmgiIDIKIyAyNSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9uZXQvZHN0 LmgiCnN0cnVjdCBza19idWZmOwoKc3RydWN0IGRzdF9lbnRyeQp7CiAgICAgICAgc3RydWN0IGRz dF9lbnRyeSAqbmV4dDsKICAgICAgICBhdG9taWNfdCBfX3JlZmNudDsKICAgICAgICBpbnQgX191 c2U7CiAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKICAgICAgICBpbnQgb2Jzb2xldGU7 CiAgICAgICAgaW50IGZsYWdzOwoKICAgICAgICB1bnNpZ25lZCBsb25nIGxhc3R1c2U7CiAgICAg ICAgdW5zaWduZWQgbG9uZyBleHBpcmVzOwoKICAgICAgICB1bnNpZ25lZCBteGxvY2s7CiAgICAg ICAgdW5zaWduZWQgcG10dTsKICAgICAgICB1bnNpZ25lZCB3aW5kb3c7CiAgICAgICAgdW5zaWdu ZWQgcnR0OwogICAgICAgIHVuc2lnbmVkIHJ0dHZhcjsKICAgICAgICB1bnNpZ25lZCBzc3RocmVz aDsKICAgICAgICB1bnNpZ25lZCBjd25kOwogICAgICAgIHVuc2lnbmVkIGFkdm1zczsKICAgICAg ICB1bnNpZ25lZCByZW9yZGVyaW5nOwoKICAgICAgICB1bnNpZ25lZCBsb25nIHJhdGVfbGFzdDsK ICAgICAgICB1bnNpZ25lZCBsb25nIHJhdGVfdG9rZW5zOwoKICAgICAgICBpbnQgZXJyb3I7Cgog ICAgICAgIHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoYm91cjsKICAgICAgICBzdHJ1Y3QgaGhfY2Fj aGUgKmhoOwoKICAgICAgICBpbnQgKCppbnB1dCkoc3RydWN0IHNrX2J1ZmYqKTsKICAgICAgICBp bnQgKCpvdXRwdXQpKHN0cnVjdCBza19idWZmKik7CgoKICAgICAgICBfX3UzMiB0Y2xhc3NpZDsK CgogICAgICAgIHN0cnVjdCBkc3Rfb3BzICpvcHM7CgogICAgICAgIGNoYXIgaW5mb1swXTsKfTsK CgpzdHJ1Y3QgZHN0X29wcwp7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgZmFtaWx5OwogICAgICAg IHVuc2lnbmVkIHNob3J0IHByb3RvY29sOwogICAgICAgIHVuc2lnbmVkIGdjX3RocmVzaDsKCiAg ICAgICAgaW50ICgqZ2MpKHZvaWQpOwogICAgICAgIHN0cnVjdCBkc3RfZW50cnkgKiAoKmNoZWNr KShzdHJ1Y3QgZHN0X2VudHJ5ICosIF9fdTMyIGNvb2tpZSk7CiAgICAgICAgc3RydWN0IGRzdF9l bnRyeSAqICgqcmVyb3V0ZSkoc3RydWN0IGRzdF9lbnRyeSAqLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNrX2J1ZmYgKik7CiAgICAgICAgdm9pZCAo KmRlc3Ryb3kpKHN0cnVjdCBkc3RfZW50cnkgKik7CiAgICAgICAgc3RydWN0IGRzdF9lbnRyeSAq ICgqbmVnYXRpdmVfYWR2aWNlKShzdHJ1Y3QgZHN0X2VudHJ5ICopOwogICAgICAgIHZvaWQgKCps aW5rX2ZhaWx1cmUpKHN0cnVjdCBza19idWZmICopOwogICAgICAgIGludCBlbnRyeV9zaXplOwoK ICAgICAgICBhdG9taWNfdCBlbnRyaWVzOwogICAgICAgIGttZW1fY2FjaGVfdCAqa21lbV9jYWNo ZXA7Cn07CgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBkc3RfaG9sZChzdHJ1Y3QgZHN0X2VudHJ5ICog ZHN0KQp7CiAgICAgICAgYXRvbWljX2luYygmZHN0LT5fX3JlZmNudCk7Cn0KCnN0YXRpYyBpbmxp bmUKc3RydWN0IGRzdF9lbnRyeSAqIGRzdF9jbG9uZShzdHJ1Y3QgZHN0X2VudHJ5ICogZHN0KQp7 CiAgICAgICAgaWYgKGRzdCkKICAgICAgICAgICAgICAgIGF0b21pY19pbmMoJmRzdC0+X19yZWZj bnQpOwogICAgICAgIHJldHVybiBkc3Q7Cn0KCnN0YXRpYyBpbmxpbmUKdm9pZCBkc3RfcmVsZWFz ZShzdHJ1Y3QgZHN0X2VudHJ5ICogZHN0KQp7CiAgICAgICAgaWYgKGRzdCkKICAgICAgICAgICAg ICAgIGF0b21pY19kZWMoJmRzdC0+X19yZWZjbnQpOwp9CgpleHRlcm4gdm9pZCAqIGRzdF9hbGxv Y19SOTAzOWViMWIoc3RydWN0IGRzdF9vcHMgKiBvcHMpOwpleHRlcm4gdm9pZCBfX2RzdF9mcmVl X1JjNjEzYjdjNChzdHJ1Y3QgZHN0X2VudHJ5ICogZHN0KTsKZXh0ZXJuIHZvaWQgZHN0X2Rlc3Ry b3lfUjY0NjQxYWU2KHN0cnVjdCBkc3RfZW50cnkgKiBkc3QpOwoKc3RhdGljIGlubGluZQp2b2lk IGRzdF9mcmVlKHN0cnVjdCBkc3RfZW50cnkgKiBkc3QpCnsKICAgICAgICBpZiAoZHN0LT5vYnNv bGV0ZSA+IDEpCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgaWYgKCEoKCZkc3QtPl9f cmVmY250KS0+Y291bnRlcikpIHsKICAgICAgICAgICAgICAgIGRzdF9kZXN0cm95X1I2NDY0MWFl Nihkc3QpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBfX2RzdF9m cmVlX1JjNjEzYjdjNChkc3QpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgZHN0X2NvbmZpcm0oc3Ry dWN0IGRzdF9lbnRyeSAqZHN0KQp7CiAgICAgICAgaWYgKGRzdCkKICAgICAgICAgICAgICAgIG5l aWdoX2NvbmZpcm0oZHN0LT5uZWlnaGJvdXIpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgZHN0X25l Z2F0aXZlX2FkdmljZShzdHJ1Y3QgZHN0X2VudHJ5ICoqZHN0X3ApCnsKICAgICAgICBzdHJ1Y3Qg ZHN0X2VudHJ5ICogZHN0ID0gKmRzdF9wOwogICAgICAgIGlmIChkc3QgJiYgZHN0LT5vcHMtPm5l Z2F0aXZlX2FkdmljZSkKICAgICAgICAgICAgICAgICpkc3RfcCA9IGRzdC0+b3BzLT5uZWdhdGl2 ZV9hZHZpY2UoZHN0KTsKfQoKc3RhdGljIGlubGluZSB2b2lkIGRzdF9saW5rX2ZhaWx1cmUoc3Ry dWN0IHNrX2J1ZmYgKnNrYikKewogICAgICAgIHN0cnVjdCBkc3RfZW50cnkgKiBkc3QgPSBza2It PmRzdDsKICAgICAgICBpZiAoZHN0ICYmIGRzdC0+b3BzICYmIGRzdC0+b3BzLT5saW5rX2ZhaWx1 cmUpCiAgICAgICAgICAgICAgICBkc3QtPm9wcy0+bGlua19mYWlsdXJlKHNrYik7Cn0KCnN0YXRp YyBpbmxpbmUgdm9pZCBkc3Rfc2V0X2V4cGlyZXMoc3RydWN0IGRzdF9lbnRyeSAqZHN0LCBpbnQg dGltZW91dCkKewogICAgICAgIHVuc2lnbmVkIGxvbmcgZXhwaXJlcyA9IGppZmZpZXNfUjBkYTAy ZDY3ICsgdGltZW91dDsKCiAgICAgICAgaWYgKGV4cGlyZXMgPT0gMCkKICAgICAgICAgICAgICAg IGV4cGlyZXMgPSAxOwoKICAgICAgICBpZiAoZHN0LT5leHBpcmVzID09IDAgfHwgKGxvbmcpKGRz dC0+ZXhwaXJlcyAtIGV4cGlyZXMpID4gMCkKICAgICAgICAgICAgICAgIGRzdC0+ZXhwaXJlcyA9 IGV4cGlyZXM7Cn0KCmV4dGVybiB2b2lkIGRzdF9pbml0KHZvaWQpOwojIDI5ICIvdXNyL3NyYy9s aW51eC0yLjQuMjAtOC9pbmNsdWRlL25ldC9yb3V0ZS5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgt Mi40LjIwLTgvaW5jbHVkZS9uZXQvaW5ldHBlZXIuaCIgMQojIDE4ICIvdXNyL3NyYy9saW51eC0y LjQuMjAtOC9pbmNsdWRlL25ldC9pbmV0cGVlci5oIgpzdHJ1Y3QgaW5ldF9wZWVyCnsKICAgICAg ICBzdHJ1Y3QgaW5ldF9wZWVyICphdmxfbGVmdCwgKmF2bF9yaWdodDsKICAgICAgICBzdHJ1Y3Qg aW5ldF9wZWVyICp1bnVzZWRfbmV4dCwgKip1bnVzZWRfcHJldnA7CiAgICAgICAgYXRvbWljX3Qg cmVmY250OwogICAgICAgIHVuc2lnbmVkIGxvbmcgZHRpbWU7CgogICAgICAgIF9fdTMyIHY0ZGFk ZHI7CiAgICAgICAgX191MTYgYXZsX2hlaWdodDsKICAgICAgICBfX3UxNiBpcF9pZF9jb3VudDsK ICAgICAgICBfX3UzMiB0Y3BfdHM7CiAgICAgICAgdW5zaWduZWQgbG9uZyB0Y3BfdHNfc3RhbXA7 Cn07Cgp2b2lkIGluZXRfaW5pdHBlZXJzKHZvaWQpIDsKCgpzdHJ1Y3QgaW5ldF9wZWVyICppbmV0 X2dldHBlZXIoX191MzIgZGFkZHIsIGludCBjcmVhdGUpOwoKZXh0ZXJuIHNwaW5sb2NrX3QgaW5l dF9wZWVyX3VudXNlZF9sb2NrOwpleHRlcm4gc3RydWN0IGluZXRfcGVlciAqaW5ldF9wZWVyX3Vu dXNlZF9oZWFkOwpleHRlcm4gc3RydWN0IGluZXRfcGVlciAqKmluZXRfcGVlcl91bnVzZWRfdGFp bHA7CgpzdGF0aWMgaW5saW5lIHZvaWQgaW5ldF9wdXRwZWVyKHN0cnVjdCBpbmV0X3BlZXIgKnAp CnsKICAgICAgICBkbyB7IGRvIHsgKCh2b2lkKSgoMCkpLCBpcnFfc3RhdF9SY2EwMjgzYjBbMF0u X19sb2NhbF9iaF9jb3VudCkrKzsgX19hc21fXyBfX3ZvbGF0aWxlX18oIiI6IDogOiJtZW1vcnki KTsgfSB3aGlsZSAoMCk7ICh2b2lkKSgmaW5ldF9wZWVyX3VudXNlZF9sb2NrKTsgfSB3aGlsZSAo MCk7CiAgICAgICAgaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnAtPnJlZmNudCkpIHsKICAgICAg ICAgICAgICAgIHAtPnVudXNlZF9wcmV2cCA9IGluZXRfcGVlcl91bnVzZWRfdGFpbHA7CiAgICAg ICAgICAgICAgICBwLT51bnVzZWRfbmV4dCA9ICgodm9pZCAqKTApOwogICAgICAgICAgICAgICAg KmluZXRfcGVlcl91bnVzZWRfdGFpbHAgPSBwOwogICAgICAgICAgICAgICAgaW5ldF9wZWVyX3Vu dXNlZF90YWlscCA9ICZwLT51bnVzZWRfbmV4dDsKICAgICAgICAgICAgICAgIHAtPmR0aW1lID0g amlmZmllc19SMGRhMDJkNjc7CiAgICAgICAgfQogICAgICAgIGRvIHsgZG8geyB9IHdoaWxlKDAp OyBkbyB7IHVuc2lnbmVkIGludCAqcHRyID0gJigodm9pZCkoKDApKSwgaXJxX3N0YXRfUmNhMDI4 M2IwWzBdLl9fbG9jYWxfYmhfY291bnQpOyBfX2FzbV9fIF9fdm9sYXRpbGVfXygiIjogOiA6Im1l bW9yeSIpOyBpZiAoIS0tKnB0cikgX19hc21fXyBfX3ZvbGF0aWxlX18gKCAiY21wbCAkMCwgLTgo JTApOyIgImpueiAyZjsiICIxOjsiICIuc3Vic2VjdGlvbiAxXG5cdCIgIiIgIi5pZm5kZWYgIiAi LnRleHQubG9jay4iICJza2dlcG5taSIgIlxuXHQiICIudGV4dC5sb2NrLiIgInNrZ2Vwbm1pIiAi OlxuXHQiICIuZW5kaWZcblx0IiAiMjogcHVzaGwgJSVlYXg7IHB1c2hsICUlZWN4OyBwdXNobCAl JWVkeDsiICJjYWxsICVjMTsiICJwb3BsICUlZWR4OyBwb3BsICUlZWN4OyBwb3BsICUlZWF4OyIg ImptcCAxYjsiICIucHJldmlvdXNcblx0IiA6IDogInIiIChwdHIpLCAiaSIgKGRvX3NvZnRpcnFf UmYwYTUyOWI3KSApOyB9IHdoaWxlICgwKTsgfSB3aGlsZSAoMCk7Cn0KCmV4dGVybiBzcGlubG9j a190IGluZXRfcGVlcl9pZGxvY2s7CgpzdGF0aWMgaW5saW5lIF9fdTE2IGluZXRfZ2V0aWQoc3Ry dWN0IGluZXRfcGVlciAqcCkKewogICAgICAgIF9fdTE2IGlkOwoKICAgICAgICBkbyB7IGRvIHsg KCh2b2lkKSgoMCkpLCBpcnFfc3RhdF9SY2EwMjgzYjBbMF0uX19sb2NhbF9iaF9jb3VudCkrKzsg X19hc21fXyBfX3ZvbGF0aWxlX18oIiI6IDogOiJtZW1vcnkiKTsgfSB3aGlsZSAoMCk7ICh2b2lk KSgmaW5ldF9wZWVyX2lkbG9jayk7IH0gd2hpbGUgKDApOwogICAgICAgIGlkID0gcC0+aXBfaWRf Y291bnQrKzsKICAgICAgICBkbyB7IGRvIHsgfSB3aGlsZSgwKTsgZG8geyB1bnNpZ25lZCBpbnQg KnB0ciA9ICYoKHZvaWQpKCgwKSksIGlycV9zdGF0X1JjYTAyODNiMFswXS5fX2xvY2FsX2JoX2Nv dW50KTsgX19hc21fXyBfX3ZvbGF0aWxlX18oIiI6IDogOiJtZW1vcnkiKTsgaWYgKCEtLSpwdHIp IF9fYXNtX18gX192b2xhdGlsZV9fICggImNtcGwgJDAsIC04KCUwKTsiICJqbnogMmY7IiAiMTo7 IiAiLnN1YnNlY3Rpb24gMVxuXHQiICIiICIuaWZuZGVmICIgIi50ZXh0LmxvY2suIiAic2tnZXBu bWkiICJcblx0IiAiLnRleHQubG9jay4iICJza2dlcG5taSIgIjpcblx0IiAiLmVuZGlmXG5cdCIg IjI6IHB1c2hsICUlZWF4OyBwdXNobCAlJWVjeDsgcHVzaGwgJSVlZHg7IiAiY2FsbCAlYzE7IiAi cG9wbCAlJWVkeDsgcG9wbCAlJWVjeDsgcG9wbCAlJWVheDsiICJqbXAgMWI7IiAiLnByZXZpb3Vz XG5cdCIgOiA6ICJyIiAocHRyKSwgImkiIChkb19zb2Z0aXJxX1JmMGE1MjliNykgKTsgfSB3aGls ZSAoMCk7IH0gd2hpbGUgKDApOwogICAgICAgIHJldHVybiBpZDsKfQojIDMwICIvdXNyL3NyYy9s aW51eC0yLjQuMjAtOC9pbmNsdWRlL25ldC9yb3V0ZS5oIiAyCgojIDEgIi91c3Ivc3JjL2xpbnV4 LTIuNC4yMC04L2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgiIDEKCgoKIyAxICIvdXNyL3NyYy9s aW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L25ldGxpbmsuaCIgMQojIDE4ICIvdXNyL3NyYy9s aW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L25ldGxpbmsuaCIKc3RydWN0IHNvY2thZGRyX25s CnsKICAgICAgICBzYV9mYW1pbHlfdCBubF9mYW1pbHk7CiAgICAgICAgdW5zaWduZWQgc2hvcnQg bmxfcGFkOwogICAgICAgIF9fdTMyIG5sX3BpZDsKICAgICAgICBfX3UzMiBubF9ncm91cHM7Cn07 CgpzdHJ1Y3Qgbmxtc2doZHIKewogICAgICAgIF9fdTMyIG5sbXNnX2xlbjsKICAgICAgICBfX3Ux NiBubG1zZ190eXBlOwogICAgICAgIF9fdTE2IG5sbXNnX2ZsYWdzOwogICAgICAgIF9fdTMyIG5s bXNnX3NlcTsKICAgICAgICBfX3UzMiBubG1zZ19waWQ7Cn07CiMgNzkgIi91c3Ivc3JjL2xpbnV4 LTIuNC4yMC04L2luY2x1ZGUvbGludXgvbmV0bGluay5oIgpzdHJ1Y3Qgbmxtc2dlcnIKewogICAg ICAgIGludCBlcnJvcjsKICAgICAgICBzdHJ1Y3Qgbmxtc2doZHIgbXNnOwp9OwoKCgoKCnN0cnVj dCBuZXRsaW5rX3NrYl9wYXJtcwp7CiAgICAgICAgc3RydWN0IHVjcmVkIGNyZWRzOwogICAgICAg IF9fdTMyIHBpZDsKICAgICAgICBfX3UzMiBncm91cHM7CiAgICAgICAgX191MzIgZHN0X3BpZDsK ICAgICAgICBfX3UzMiBkc3RfZ3JvdXBzOwogICAgICAgIGtlcm5lbF9jYXBfdCBlZmZfY2FwOwp9 OwoKCgoKCmV4dGVybiBpbnQgbmV0bGlua19hdHRhY2hfUjcxOTFhYmQyKGludCB1bml0LCBpbnQg KCpmdW5jdGlvbikoaW50LHN0cnVjdCBza19idWZmICpza2IpKTsKZXh0ZXJuIHZvaWQgbmV0bGlu a19kZXRhY2hfUjFkNzQyNDk1KGludCB1bml0KTsKZXh0ZXJuIGludCBuZXRsaW5rX3Bvc3RfUjcy OGQ0MDBiKGludCB1bml0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKZXh0ZXJuIGludCBpbml0X25l dGxpbmsodm9pZCk7CmV4dGVybiBzdHJ1Y3Qgc29jayAqbmV0bGlua19rZXJuZWxfY3JlYXRlX1Ix MGFkZDhlYihpbnQgdW5pdCwgdm9pZCAoKmlucHV0KShzdHJ1Y3Qgc29jayAqc2ssIGludCBsZW4p KTsKZXh0ZXJuIHZvaWQgbmV0bGlua19hY2tfUjljZDg4M2FkKHN0cnVjdCBza19idWZmICppbl9z a2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLCBpbnQgZXJyKTsKZXh0ZXJuIGludCBuZXRsaW5rX3Vu aWNhc3RfUjE5M2Y0ZjAxKHN0cnVjdCBzb2NrICpzc2ssIHN0cnVjdCBza19idWZmICpza2IsIF9f dTMyIHBpZCwgaW50IG5vbmJsb2NrKTsKZXh0ZXJuIHZvaWQgbmV0bGlua19icm9hZGNhc3RfUmZl MjAwNDNjKHN0cnVjdCBzb2NrICpzc2ssIHN0cnVjdCBza19idWZmICpza2IsIF9fdTMyIHBpZCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191MzIgZ3JvdXAsIGludCBhbGxvY2F0aW9u KTsKZXh0ZXJuIHZvaWQgbmV0bGlua19zZXRfZXJyX1JmNTZlNmU3ZChzdHJ1Y3Qgc29jayAqc3Nr LCBfX3UzMiBwaWQsIF9fdTMyIGdyb3VwLCBpbnQgY29kZSk7CmV4dGVybiBpbnQgbmV0bGlua19y ZWdpc3Rlcl9ub3RpZmllcl9SZjc4ZDA0YWIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7CmV4 dGVybiBpbnQgbmV0bGlua191bnJlZ2lzdGVyX25vdGlmaWVyX1JmMzM4ZDRjMyhzdHJ1Y3Qgbm90 aWZpZXJfYmxvY2sgKm5iKTsKIyAxMjQgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUv bGludXgvbmV0bGluay5oIgpzdHJ1Y3QgbmV0bGlua19jYWxsYmFjawp7CiAgICAgICAgc3RydWN0 IHNrX2J1ZmYgKnNrYjsKICAgICAgICBzdHJ1Y3Qgbmxtc2doZHIgKm5saDsKICAgICAgICBpbnQg KCpkdW1wKShzdHJ1Y3Qgc2tfYnVmZiAqIHNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNi KTsKICAgICAgICBpbnQgKCpkb25lKShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpOwogICAg ICAgIGludCBmYW1pbHk7CiAgICAgICAgbG9uZyBhcmdzWzRdOwp9OwoKc3RydWN0IG5ldGxpbmtf bm90aWZ5CnsKICAgICAgICBpbnQgcGlkOwogICAgICAgIGludCBwcm90b2NvbDsKfTsKCnN0YXRp YyBfX2lubGluZV9fIHN0cnVjdCBubG1zZ2hkciAqCl9fbmxtc2dfcHV0KHN0cnVjdCBza19idWZm ICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsIGludCB0eXBlLCBpbnQgbGVuKQp7CiAgICAgICAgc3Ry dWN0IG5sbXNnaGRyICpubGg7CiAgICAgICAgaW50IHNpemUgPSAoKGxlbikrKCAoKHNpemVvZihz dHJ1Y3Qgbmxtc2doZHIpKSs0IC0xKSAmIH4oNCAtMSkgKSk7CgogICAgICAgIG5saCA9IChzdHJ1 Y3Qgbmxtc2doZHIqKXNrYl9wdXQoc2tiLCAoICgoc2l6ZSkrNCAtMSkgJiB+KDQgLTEpICkpOwog ICAgICAgIG5saC0+bmxtc2dfdHlwZSA9IHR5cGU7CiAgICAgICAgbmxoLT5ubG1zZ19sZW4gPSBz aXplOwogICAgICAgIG5saC0+bmxtc2dfZmxhZ3MgPSAwOwogICAgICAgIG5saC0+bmxtc2dfcGlk ID0gcGlkOwogICAgICAgIG5saC0+bmxtc2dfc2VxID0gc2VxOwogICAgICAgIHJldHVybiBubGg7 Cn0KCgoKCgpleHRlcm4gaW50IG5ldGxpbmtfZHVtcF9zdGFydF9SNWExODI1NWMoc3RydWN0IHNv Y2sgKnNzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IG5sbXNnaGRyICpubGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCAoKmR1bXApKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrKiks CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmRvbmUpKHN0cnVjdCBuZXRsaW5r X2NhbGxiYWNrKikpOwoKCgpleHRlcm4gdm9pZCBuZXRsaW5rX3NldF9ub25yb290X1I1YTc0NGI4 NihpbnQgcHJvdG9jb2wsIHVuc2lnbmVkIGZsYWcpOwojIDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4y MC04L2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgiIDIKIyA1NyAiL3Vzci9zcmMvbGludXgtMi40 LjIwLTgvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaCIKc3RydWN0IHJ0YXR0cgp7CiAgICAgICAg dW5zaWduZWQgc2hvcnQgcnRhX2xlbjsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBydGFfdHlwZTsK fTsKIyA4MyAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsu aCIKc3RydWN0IHJ0bXNnCnsKICAgICAgICB1bnNpZ25lZCBjaGFyIHJ0bV9mYW1pbHk7CiAgICAg ICAgdW5zaWduZWQgY2hhciBydG1fZHN0X2xlbjsKICAgICAgICB1bnNpZ25lZCBjaGFyIHJ0bV9z cmNfbGVuOwogICAgICAgIHVuc2lnbmVkIGNoYXIgcnRtX3RvczsKCiAgICAgICAgdW5zaWduZWQg Y2hhciBydG1fdGFibGU7CiAgICAgICAgdW5zaWduZWQgY2hhciBydG1fcHJvdG9jb2w7CiAgICAg ICAgdW5zaWduZWQgY2hhciBydG1fc2NvcGU7CiAgICAgICAgdW5zaWduZWQgY2hhciBydG1fdHlw ZTsKCiAgICAgICAgdW5zaWduZWQgcnRtX2ZsYWdzOwp9OwoKCgplbnVtCnsKICAgICAgICBSVE5f VU5TUEVDLAogICAgICAgIFJUTl9VTklDQVNULAogICAgICAgIFJUTl9MT0NBTCwKICAgICAgICBS VE5fQlJPQURDQVNULAoKICAgICAgICBSVE5fQU5ZQ0FTVCwKCiAgICAgICAgUlROX01VTFRJQ0FT VCwKICAgICAgICBSVE5fQkxBQ0tIT0xFLAogICAgICAgIFJUTl9VTlJFQUNIQUJMRSwKICAgICAg ICBSVE5fUFJPSElCSVQsCiAgICAgICAgUlROX1RIUk9XLAogICAgICAgIFJUTl9OQVQsCiAgICAg ICAgUlROX1hSRVNPTFZFLAp9OwojIDE1NSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVk ZS9saW51eC9ydG5ldGxpbmsuaCIKZW51bSBydF9zY29wZV90CnsKICAgICAgICBSVF9TQ09QRV9V TklWRVJTRT0wLAoKICAgICAgICBSVF9TQ09QRV9TSVRFPTIwMCwKICAgICAgICBSVF9TQ09QRV9M SU5LPTI1MywKICAgICAgICBSVF9TQ09QRV9IT1NUPTI1NCwKICAgICAgICBSVF9TQ09QRV9OT1dI RVJFPTI1NQp9OwojIDE3MyAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9y dG5ldGxpbmsuaCIKZW51bSBydF9jbGFzc190CnsKICAgICAgICBSVF9UQUJMRV9VTlNQRUM9MCwK CiAgICAgICAgUlRfVEFCTEVfREVGQVVMVD0yNTMsCiAgICAgICAgUlRfVEFCTEVfTUFJTj0yNTQs CiAgICAgICAgUlRfVEFCTEVfTE9DQUw9MjU1Cn07CgoKCgoKCmVudW0gcnRhdHRyX3R5cGVfdAp7 CiAgICAgICAgUlRBX1VOU1BFQywKICAgICAgICBSVEFfRFNULAogICAgICAgIFJUQV9TUkMsCiAg ICAgICAgUlRBX0lJRiwKICAgICAgICBSVEFfT0lGLAogICAgICAgIFJUQV9HQVRFV0FZLAogICAg ICAgIFJUQV9QUklPUklUWSwKICAgICAgICBSVEFfUFJFRlNSQywKICAgICAgICBSVEFfTUVUUklD UywKICAgICAgICBSVEFfTVVMVElQQVRILAogICAgICAgIFJUQV9QUk9UT0lORk8sCiAgICAgICAg UlRBX0ZMT1csCiAgICAgICAgUlRBX0NBQ0hFSU5GTwp9OwojIDIxOCAiL3Vzci9zcmMvbGludXgt Mi40LjIwLTgvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaCIKc3RydWN0IHJ0bmV4dGhvcAp7CiAg ICAgICAgdW5zaWduZWQgc2hvcnQgcnRuaF9sZW47CiAgICAgICAgdW5zaWduZWQgY2hhciBydG5o X2ZsYWdzOwogICAgICAgIHVuc2lnbmVkIGNoYXIgcnRuaF9ob3BzOwogICAgICAgIGludCBydG5o X2lmaW5kZXg7Cn07CiMgMjQ1ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4 L3J0bmV0bGluay5oIgpzdHJ1Y3QgcnRhX2NhY2hlaW5mbwp7CiAgICAgICAgX191MzIgcnRhX2Ns bnRyZWY7CiAgICAgICAgX191MzIgcnRhX2xhc3R1c2U7CiAgICAgICAgX19zMzIgcnRhX2V4cGly ZXM7CiAgICAgICAgX191MzIgcnRhX2Vycm9yOwogICAgICAgIF9fdTMyIHJ0YV91c2VkOwoKCiAg ICAgICAgX191MzIgcnRhX2lkOwogICAgICAgIF9fdTMyIHJ0YV90czsKICAgICAgICBfX3UzMiBy dGFfdHNhZ2U7Cn07CgoKCmVudW0KewogICAgICAgIFJUQVhfVU5TUEVDLAoKICAgICAgICBSVEFY X0xPQ0ssCgogICAgICAgIFJUQVhfTVRVLAoKICAgICAgICBSVEFYX1dJTkRPVywKCiAgICAgICAg UlRBWF9SVFQsCgogICAgICAgIFJUQVhfUlRUVkFSLAoKICAgICAgICBSVEFYX1NTVEhSRVNILAoK ICAgICAgICBSVEFYX0NXTkQsCgogICAgICAgIFJUQVhfQURWTVNTLAoKICAgICAgICBSVEFYX1JF T1JERVJJTkcsCgp9OwojIDI5MyAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51 eC9ydG5ldGxpbmsuaCIKc3RydWN0IGlmYWRkcm1zZwp7CiAgICAgICAgdW5zaWduZWQgY2hhciBp ZmFfZmFtaWx5OwogICAgICAgIHVuc2lnbmVkIGNoYXIgaWZhX3ByZWZpeGxlbjsKICAgICAgICB1 bnNpZ25lZCBjaGFyIGlmYV9mbGFnczsKICAgICAgICB1bnNpZ25lZCBjaGFyIGlmYV9zY29wZTsK ICAgICAgICBpbnQgaWZhX2luZGV4Owp9OwoKZW51bQp7CiAgICAgICAgSUZBX1VOU1BFQywKICAg ICAgICBJRkFfQUREUkVTUywKICAgICAgICBJRkFfTE9DQUwsCiAgICAgICAgSUZBX0xBQkVMLAog ICAgICAgIElGQV9CUk9BRENBU1QsCiAgICAgICAgSUZBX0FOWUNBU1QsCiAgICAgICAgSUZBX0NB Q0hFSU5GTwp9OwojIDMyMyAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9y dG5ldGxpbmsuaCIKc3RydWN0IGlmYV9jYWNoZWluZm8KewogICAgICAgIF9fczMyIGlmYV9wcmVm ZXJlZDsKICAgICAgICBfX3MzMiBpZmFfdmFsaWQ7Cn07CiMgMzQ1ICIvdXNyL3NyYy9saW51eC0y LjQuMjAtOC9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oIgpzdHJ1Y3QgbmRtc2cKewogICAgICAg IHVuc2lnbmVkIGNoYXIgbmRtX2ZhbWlseTsKICAgICAgICB1bnNpZ25lZCBjaGFyIG5kbV9wYWQx OwogICAgICAgIHVuc2lnbmVkIHNob3J0IG5kbV9wYWQyOwogICAgICAgIGludCBuZG1faWZpbmRl eDsKICAgICAgICBfX3UxNiBuZG1fc3RhdGU7CiAgICAgICAgX191OCBuZG1fZmxhZ3M7CiAgICAg ICAgX191OCBuZG1fdHlwZTsKfTsKCmVudW0KewogICAgICAgIE5EQV9VTlNQRUMsCiAgICAgICAg TkRBX0RTVCwKICAgICAgICBOREFfTExBRERSLAogICAgICAgIE5EQV9DQUNIRUlORk8KfTsKIyAz OTMgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgiCnN0 cnVjdCBuZGFfY2FjaGVpbmZvCnsKICAgICAgICBfX3UzMiBuZG1fY29uZmlybWVkOwogICAgICAg IF9fdTMyIG5kbV91c2VkOwogICAgICAgIF9fdTMyIG5kbV91cGRhdGVkOwogICAgICAgIF9fdTMy IG5kbV9yZWZjbnQ7Cn07CgoKCgoKc3RydWN0IHJ0Z2VubXNnCnsKICAgICAgICB1bnNpZ25lZCBj aGFyIHJ0Z2VuX2ZhbWlseTsKfTsKIyA0MTkgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1 ZGUvbGludXgvcnRuZXRsaW5rLmgiCnN0cnVjdCBpZmluZm9tc2cKewogICAgICAgIHVuc2lnbmVk IGNoYXIgaWZpX2ZhbWlseTsKICAgICAgICB1bnNpZ25lZCBjaGFyIF9faWZpX3BhZDsKICAgICAg ICB1bnNpZ25lZCBzaG9ydCBpZmlfdHlwZTsKICAgICAgICBpbnQgaWZpX2luZGV4OwogICAgICAg IHVuc2lnbmVkIGlmaV9mbGFnczsKICAgICAgICB1bnNpZ25lZCBpZmlfY2hhbmdlOwp9OwoKZW51 bQp7CiAgICAgICAgSUZMQV9VTlNQRUMsCiAgICAgICAgSUZMQV9BRERSRVNTLAogICAgICAgIElG TEFfQlJPQURDQVNULAogICAgICAgIElGTEFfSUZOQU1FLAogICAgICAgIElGTEFfTVRVLAogICAg ICAgIElGTEFfTElOSywKICAgICAgICBJRkxBX1FESVNDLAogICAgICAgIElGTEFfU1RBVFMsCiAg ICAgICAgSUZMQV9DT1NULAoKICAgICAgICBJRkxBX1BSSU9SSVRZLAoKICAgICAgICBJRkxBX01B U1RFUiwKCiAgICAgICAgSUZMQV9XSVJFTEVTUywKCn07CiMgNDg4ICIvdXNyL3NyYy9saW51eC0y LjQuMjAtOC9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oIgpzdHJ1Y3QgdGNtc2cKewogICAgICAg IHVuc2lnbmVkIGNoYXIgdGNtX2ZhbWlseTsKICAgICAgICB1bnNpZ25lZCBjaGFyIHRjbV9fcGFk MTsKICAgICAgICB1bnNpZ25lZCBzaG9ydCB0Y21fX3BhZDI7CiAgICAgICAgaW50IHRjbV9pZmlu ZGV4OwogICAgICAgIF9fdTMyIHRjbV9oYW5kbGU7CiAgICAgICAgX191MzIgdGNtX3BhcmVudDsK ICAgICAgICBfX3UzMiB0Y21faW5mbzsKfTsKCmVudW0KewogICAgICAgIFRDQV9VTlNQRUMsCiAg ICAgICAgVENBX0tJTkQsCiAgICAgICAgVENBX09QVElPTlMsCiAgICAgICAgVENBX1NUQVRTLAog ICAgICAgIFRDQV9YU1RBVFMsCiAgICAgICAgVENBX1JBVEUsCn07CiMgNTQzICIvdXNyL3NyYy9s aW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oIgpzdGF0aWMgX19pbmxpbmVf XyBpbnQgcnRhdHRyX3N0cmNtcChzdHJ1Y3QgcnRhdHRyICpydGEsIGNoYXIgKnN0cikKewogICAg ICAgIGludCBsZW4gPSBzdHJsZW4oc3RyKSArIDE7CiAgICAgICAgcmV0dXJuIGxlbiA+IHJ0YS0+ cnRhX2xlbiB8fCBfX2J1aWx0aW5fbWVtY21wKCgodm9pZCopKCgoY2hhciopKHJ0YSkpICsgKCgg KChzaXplb2Yoc3RydWN0IHJ0YXR0cikpKzQgLTEpICYgfig0IC0xKSApICsgKDApKSkpLCBzdHIs IGxlbik7Cn0KCmV4dGVybiBpbnQgcnRhdHRyX3BhcnNlX1JlNDk0MTRlOShzdHJ1Y3QgcnRhdHRy ICp0YltdLCBpbnQgbWF4YXR0ciwgc3RydWN0IHJ0YXR0ciAqcnRhLCBpbnQgbGVuKTsKCmV4dGVy biBzdHJ1Y3Qgc29jayAqcnRubF9SN2I2NzFlYmU7CgpzdHJ1Y3QgcnRuZXRsaW5rX2xpbmsKewog ICAgICAgIGludCAoKmRvaXQpKHN0cnVjdCBza19idWZmICosIHN0cnVjdCBubG1zZ2hkciosIHZv aWQgKmF0dHIpOwogICAgICAgIGludCAoKmR1bXBpdCkoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0 IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTsKfTsKCmV4dGVybiBzdHJ1Y3QgcnRuZXRsaW5rX2xpbmsg KiBydG5ldGxpbmtfbGlua3NfUjBkNTVjMDhiWzMyXTsKZXh0ZXJuIGludCBydG5ldGxpbmtfZHVt cF9pZmluZm9fUjVhMTE1OWU1KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2Nh bGxiYWNrICpjYik7CmV4dGVybiBpbnQgcnRuZXRsaW5rX3NlbmQoc3RydWN0IHNrX2J1ZmYgKnNr YiwgdTMyIHBpZCwgdTMyIGdyb3VwLCBpbnQgZWNobyk7CmV4dGVybiBpbnQgcnRuZXRsaW5rX3B1 dF9tZXRyaWNzX1JkZWY3ZjVmMShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCAqbWV0cmlj cyk7CgpleHRlcm4gdm9pZCBfX3J0YV9maWxsX1IxMTdlMzQ3OChzdHJ1Y3Qgc2tfYnVmZiAqc2ti LCBpbnQgYXR0cnR5cGUsIGludCBhdHRybGVuLCBjb25zdCB2b2lkICpkYXRhKTsKCgoKCgpleHRl cm4gdm9pZCBydG1zZ19pZmluZm8oaW50IHR5cGUsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVu c2lnbmVkIGNoYW5nZSk7CgpleHRlcm4gc3RydWN0IHNlbWFwaG9yZSBydG5sX3NlbV9SNTExZDBl YmU7CiMgNTg2ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3J0bmV0bGlu ay5oIgpleHRlcm4gdm9pZCBydG5sX2xvY2tfUmM3YTRmYmVkKHZvaWQpOwpleHRlcm4gdm9pZCBy dG5sX3VubG9ja19SNmU3MjBmZjIodm9pZCk7CmV4dGVybiB2b2lkIHJ0bmV0bGlua19pbml0KHZv aWQpOwojIDMyICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL25ldC9yb3V0ZS5oIiAy CiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9yb3V0ZS5oIiAxCiMg MzAgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvcm91dGUuaCIKc3RydWN0 IHJ0ZW50cnkKewogICAgICAgIHVuc2lnbmVkIGxvbmcgcnRfcGFkMTsKICAgICAgICBzdHJ1Y3Qg c29ja2FkZHIgcnRfZHN0OwogICAgICAgIHN0cnVjdCBzb2NrYWRkciBydF9nYXRld2F5OwogICAg ICAgIHN0cnVjdCBzb2NrYWRkciBydF9nZW5tYXNrOwogICAgICAgIHVuc2lnbmVkIHNob3J0IHJ0 X2ZsYWdzOwogICAgICAgIHNob3J0IHJ0X3BhZDI7CiAgICAgICAgdW5zaWduZWQgbG9uZyBydF9w YWQzOwogICAgICAgIHZvaWQgKnJ0X3BhZDQ7CiAgICAgICAgc2hvcnQgcnRfbWV0cmljOwogICAg ICAgIGNoYXIgKnJ0X2RldjsKICAgICAgICB1bnNpZ25lZCBsb25nIHJ0X210dTsKCgoKICAgICAg ICB1bnNpZ25lZCBsb25nIHJ0X3dpbmRvdzsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBydF9pcnR0 Owp9OwojIDMzICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL25ldC9yb3V0ZS5oIiAy CiMgNDggIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbmV0L3JvdXRlLmgiCnN0cnVj dCBydF9rZXkKewogICAgICAgIF9fdTMyIGRzdDsKICAgICAgICBfX3UzMiBzcmM7CiAgICAgICAg aW50IGlpZjsKICAgICAgICBpbnQgb2lmOwoKICAgICAgICBfX3UzMiBmd21hcms7CgogICAgICAg IF9fdTggdG9zOwogICAgICAgIF9fdTggc2NvcGU7Cn07CgpzdHJ1Y3QgaW5ldF9wZWVyOwpzdHJ1 Y3QgcnRhYmxlCnsKICAgICAgICB1bmlvbgogICAgICAgIHsKICAgICAgICAgICAgICAgIHN0cnVj dCBkc3RfZW50cnkgZHN0OwogICAgICAgICAgICAgICAgc3RydWN0IHJ0YWJsZSAqcnRfbmV4dDsK ICAgICAgICB9IHU7CgogICAgICAgIHVuc2lnbmVkIHJ0X2ZsYWdzOwogICAgICAgIHVuc2lnbmVk IHJ0X3R5cGU7CgogICAgICAgIF9fdTMyIHJ0X2RzdDsKICAgICAgICBfX3UzMiBydF9zcmM7CiAg ICAgICAgaW50IHJ0X2lpZjsKCgogICAgICAgIF9fdTMyIHJ0X2dhdGV3YXk7CgoKICAgICAgICBz dHJ1Y3QgcnRfa2V5IGtleTsKCgogICAgICAgIF9fdTMyIHJ0X3NwZWNfZHN0OwogICAgICAgIHN0 cnVjdCBpbmV0X3BlZXIgKnBlZXI7CgoKICAgICAgICBfX3UzMiBydF9zcmNfbWFwOwogICAgICAg IF9fdTMyIHJ0X2RzdF9tYXA7Cgp9OwoKc3RydWN0IGlwX3J0X2FjY3QKewogICAgICAgIF9fdTMy IG9fYnl0ZXM7CiAgICAgICAgX191MzIgb19wYWNrZXRzOwogICAgICAgIF9fdTMyIGlfYnl0ZXM7 CiAgICAgICAgX191MzIgaV9wYWNrZXRzOwp9OwoKc3RydWN0IHJ0X2NhY2hlX3N0YXQKewogICAg ICAgIHVuc2lnbmVkIGludCBpbl9oaXQ7CiAgICAgICAgdW5zaWduZWQgaW50IGluX3Nsb3dfdG90 OwogICAgICAgIHVuc2lnbmVkIGludCBpbl9zbG93X21jOwogICAgICAgIHVuc2lnbmVkIGludCBp bl9ub19yb3V0ZTsKICAgICAgICB1bnNpZ25lZCBpbnQgaW5fYnJkOwogICAgICAgIHVuc2lnbmVk IGludCBpbl9tYXJ0aWFuX2RzdDsKICAgICAgICB1bnNpZ25lZCBpbnQgaW5fbWFydGlhbl9zcmM7 CiAgICAgICAgdW5zaWduZWQgaW50IG91dF9oaXQ7CiAgICAgICAgdW5zaWduZWQgaW50IG91dF9z bG93X3RvdDsKICAgICAgICB1bnNpZ25lZCBpbnQgb3V0X3Nsb3dfbWM7CiAgICAgICAgdW5zaWdu ZWQgaW50IGdjX3RvdGFsOwogICAgICAgIHVuc2lnbmVkIGludCBnY19pZ25vcmVkOwogICAgICAg IHVuc2lnbmVkIGludCBnY19nb2FsX21pc3M7CiAgICAgICAgdW5zaWduZWQgaW50IGdjX2RzdF9v dmVyZmxvdzsKfSA7CgpleHRlcm4gc3RydWN0IGlwX3J0X2FjY3QgKmlwX3J0X2FjY3Q7CgpzdHJ1 Y3QgaW5fZGV2aWNlOwpleHRlcm4gdm9pZCBpcF9ydF9pbml0KHZvaWQpOwpleHRlcm4gdm9pZCBp cF9ydF9yZWRpcmVjdCh1MzIgb2xkX2d3LCB1MzIgZHN0LCB1MzIgbmV3X2d3LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgc3JjLCB1OCB0b3MsIHN0cnVjdCBuZXRf ZGV2aWNlICpkZXYpOwpleHRlcm4gdm9pZCBpcF9ydF9hZHZpY2Uoc3RydWN0IHJ0YWJsZSAqKnJw LCBpbnQgYWR2aWNlKTsKZXh0ZXJuIHZvaWQgcnRfY2FjaGVfZmx1c2goaW50IGhvdyk7CmV4dGVy biBpbnQgaXBfcm91dGVfb3V0cHV0X2tleV9SYzg2ZmNhYjQoc3RydWN0IHJ0YWJsZSAqKiwgY29u c3Qgc3RydWN0IHJ0X2tleSAqa2V5KTsKZXh0ZXJuIGludCBpcF9yb3V0ZV9pbnB1dF9SMmE4YmI0 ZTgoc3RydWN0IHNrX2J1ZmYqLCB1MzIgZHN0LCB1MzIgc3JjLCB1OCB0b3MsIHN0cnVjdCBuZXRf ZGV2aWNlICpkZXZpbik7CmV4dGVybiB1bnNpZ25lZCBzaG9ydCBpcF9ydF9mcmFnX25lZWRlZChz dHJ1Y3QgaXBoZHIgKmlwaCwgdW5zaWduZWQgc2hvcnQgbmV3X210dSk7CmV4dGVybiB2b2lkIGlw X3J0X3VwZGF0ZV9wbXR1KHN0cnVjdCBkc3RfZW50cnkgKmRzdCwgdW5zaWduZWQgbXR1KTsKZXh0 ZXJuIHZvaWQgaXBfcnRfc2VuZF9yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKCmV4dGVy biB1bnNpZ25lZCBpbmV0X2FkZHJfdHlwZV9SZThjZjNhZTcodTMyIGFkZHIpOwpleHRlcm4gdm9p ZCBpcF9ydF9tdWx0aWNhc3RfZXZlbnQoc3RydWN0IGluX2RldmljZSAqKTsKZXh0ZXJuIGludCBp cF9ydF9pb2N0bF9SOTQyMDhlODQodW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKZXh0ZXJu IHZvaWQgaXBfcnRfZ2V0X3NvdXJjZSh1OCAqc3JjLCBzdHJ1Y3QgcnRhYmxlICpydCk7CmV4dGVy biBpbnQgaXBfcnRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxs YmFjayAqY2IpOwoKCnN0YXRpYyBpbmxpbmUgaW50IGlwX3JvdXRlX291dHB1dChzdHJ1Y3QgcnRh YmxlICoqcnAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIGRhZGRy LCB1MzIgc2FkZHIsIHUzMiB0b3MsIGludCBvaWYpCnsKICAgICAgICBzdHJ1Y3QgcnRfa2V5IGtl eSA9IHsgZHN0OmRhZGRyLCBzcmM6c2FkZHIsIG9pZjpvaWYsIHRvczp0b3MgfTsKCiAgICAgICAg cmV0dXJuIGlwX3JvdXRlX291dHB1dF9rZXlfUmM4NmZjYWI0KHJwLCAma2V5KTsKfQoKCnN0YXRp YyBpbmxpbmUgdm9pZCBpcF9ydF9wdXQoc3RydWN0IHJ0YWJsZSAqIHJ0KQp7CiAgICAgICAgaWYg KHJ0KQogICAgICAgICAgICAgICAgZHN0X3JlbGVhc2UoJnJ0LT51LmRzdCk7Cn0KCgoKZXh0ZXJu IF9fdTggaXBfdG9zMnByaW9bMTZdOwoKc3RhdGljIGlubGluZSBjaGFyIHJ0X3RvczJwcmlvcml0 eSh1OCB0b3MpCnsKICAgICAgICByZXR1cm4gaXBfdG9zMnByaW9bKCh0b3MpJjB4MUUpPj4xXTsK fQoKc3RhdGljIGlubGluZSBpbnQgaXBfcm91dGVfY29ubmVjdChzdHJ1Y3QgcnRhYmxlICoqcnAs IHUzMiBkc3QsIHUzMiBzcmMsIHUzMiB0b3MsIGludCBvaWYpCnsKICAgICAgICBpbnQgZXJyOwog ICAgICAgIGVyciA9IGlwX3JvdXRlX291dHB1dChycCwgZHN0LCBzcmMsIHRvcywgb2lmKTsKICAg ICAgICBpZiAoZXJyIHx8IChkc3QgJiYgc3JjKSkKICAgICAgICAgICAgICAgIHJldHVybiBlcnI7 CiAgICAgICAgZHN0ID0gKCpycCktPnJ0X2RzdDsKICAgICAgICBzcmMgPSAoKnJwKS0+cnRfc3Jj OwogICAgICAgIGlwX3J0X3B1dCgqcnApOwogICAgICAgICpycCA9ICgodm9pZCAqKTApOwogICAg ICAgIHJldHVybiBpcF9yb3V0ZV9vdXRwdXQocnAsIGRzdCwgc3JjLCB0b3MsIG9pZik7Cn0KCmV4 dGVybiB2b2lkIHJ0X2JpbmRfcGVlcihzdHJ1Y3QgcnRhYmxlICpydCwgaW50IGNyZWF0ZSk7Cgpz dGF0aWMgaW5saW5lIHN0cnVjdCBpbmV0X3BlZXIgKnJ0X2dldF9wZWVyKHN0cnVjdCBydGFibGUg KnJ0KQp7CiAgICAgICAgaWYgKHJ0LT5wZWVyKQogICAgICAgICAgICAgICAgcmV0dXJuIHJ0LT5w ZWVyOwoKICAgICAgICBydF9iaW5kX3BlZXIocnQsIDApOwogICAgICAgIHJldHVybiBydC0+cGVl cjsKfQojIDMzICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL25ldC9pcC5oIiAyCiMg MSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9uZXQvYXJwLmgiIDEKCgoKCiMgMSAi L3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9pZl9hcnAuaCIgMQojIDEwMCAi L3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9pZl9hcnAuaCIKc3RydWN0IGFy cHJlcSB7CiAgc3RydWN0IHNvY2thZGRyIGFycF9wYTsKICBzdHJ1Y3Qgc29ja2FkZHIgYXJwX2hh OwogIGludCBhcnBfZmxhZ3M7CiAgc3RydWN0IHNvY2thZGRyIGFycF9uZXRtYXNrOwogIGNoYXIg YXJwX2RldlsxNl07Cn07CgpzdHJ1Y3QgYXJwcmVxX29sZCB7CiAgc3RydWN0IHNvY2thZGRyIGFy cF9wYTsKICBzdHJ1Y3Qgc29ja2FkZHIgYXJwX2hhOwogIGludCBhcnBfZmxhZ3M7CiAgc3RydWN0 IHNvY2thZGRyIGFycF9uZXRtYXNrOwp9OwojIDEyOCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgv aW5jbHVkZS9saW51eC9pZl9hcnAuaCIKc3RydWN0IGFycGhkcgp7CiAgICAgICAgdW5zaWduZWQg c2hvcnQgYXJfaHJkOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGFyX3BybzsKICAgICAgICB1bnNp Z25lZCBjaGFyIGFyX2hsbjsKICAgICAgICB1bnNpZ25lZCBjaGFyIGFyX3BsbjsKICAgICAgICB1 bnNpZ25lZCBzaG9ydCBhcl9vcDsKIyAxNDYgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1 ZGUvbGludXgvaWZfYXJwLmgiCn07CiMgNiAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVk ZS9uZXQvYXJwLmgiIDIKCgpleHRlcm4gc3RydWN0IG5laWdoX3RhYmxlIGFycF90YmxfUjIyYjU5 NGFhOwoKZXh0ZXJuIHZvaWQgYXJwX2luaXQodm9pZCk7CmV4dGVybiBpbnQgYXJwX3Jjdl9SNjZh NmExOTAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKICAgICAg ICAgICAgICAgICAgICAgICAgc3RydWN0IHBhY2tldF90eXBlICpwdCk7CmV4dGVybiBpbnQgYXJw X2ZpbmRfUjRmMzJhNGQyKHVuc2lnbmVkIGNoYXIgKmhhZGRyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2ti KTsKZXh0ZXJuIGludCBhcnBfaW9jdGwodW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKZXh0 ZXJuIHZvaWQgYXJwX3NlbmRfUmFjN2JmNmI0KGludCB0eXBlLCBpbnQgcHR5cGUsIHUzMiBkZXN0 X2lwLAogICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMy IHNyY19pcCwKICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3RfaHcs IHVuc2lnbmVkIGNoYXIgKnNyY19odywgdW5zaWduZWQgY2hhciAqdGgpOwpleHRlcm4gaW50IGFy cF9iaW5kX25laWdoYm91cihzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpOwpleHRlcm4gaW50IGFycF9t Y19tYXAodTMyIGFkZHIsIHU4ICpoYWRkciwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGRp cik7CmV4dGVybiB2b2lkIGFycF9pZmRvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CgpleHRl cm4gc3RydWN0IG5laWdoX29wcyBhcnBfYnJva2VuX29wc19SNzY1OTgwMjE7CiMgMzQgIi91c3Iv c3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbmV0L2lwLmgiIDIKCgojIDEgIi91c3Ivc3JjL2xp bnV4LTIuNC4yMC04L2luY2x1ZGUvbmV0L3NubXAuaCIgMQojIDQ1ICIvdXNyL3NyYy9saW51eC0y LjQuMjAtOC9pbmNsdWRlL25ldC9zbm1wLmgiCnN0cnVjdCBpcF9taWIKewogICAgICAgIHVuc2ln bmVkIGxvbmcgSXBJblJlY2VpdmVzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgSXBJbkhkckVycm9y czsKICAgICAgICB1bnNpZ25lZCBsb25nIElwSW5BZGRyRXJyb3JzOwogICAgICAgIHVuc2lnbmVk IGxvbmcgSXBGb3J3RGF0YWdyYW1zOwogICAgICAgIHVuc2lnbmVkIGxvbmcgSXBJblVua25vd25Q cm90b3M7CiAgICAgICAgdW5zaWduZWQgbG9uZyBJcEluRGlzY2FyZHM7CiAgICAgICAgdW5zaWdu ZWQgbG9uZyBJcEluRGVsaXZlcnM7CiAgICAgICAgdW5zaWduZWQgbG9uZyBJcE91dFJlcXVlc3Rz OwogICAgICAgIHVuc2lnbmVkIGxvbmcgSXBPdXREaXNjYXJkczsKICAgICAgICB1bnNpZ25lZCBs b25nIElwT3V0Tm9Sb3V0ZXM7CiAgICAgICAgdW5zaWduZWQgbG9uZyBJcFJlYXNtVGltZW91dDsK ICAgICAgICB1bnNpZ25lZCBsb25nIElwUmVhc21SZXFkczsKICAgICAgICB1bnNpZ25lZCBsb25n IElwUmVhc21PS3M7CiAgICAgICAgdW5zaWduZWQgbG9uZyBJcFJlYXNtRmFpbHM7CiAgICAgICAg dW5zaWduZWQgbG9uZyBJcEZyYWdPS3M7CiAgICAgICAgdW5zaWduZWQgbG9uZyBJcEZyYWdGYWls czsKICAgICAgICB1bnNpZ25lZCBsb25nIElwRnJhZ0NyZWF0ZXM7CiAgICAgICAgdW5zaWduZWQg bG9uZyBfX3BhZFswXTsKfSBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXygoMSA8PCAoKDUpKSkp KSk7CgpzdHJ1Y3QgaXB2Nl9taWIKewogICAgICAgIHVuc2lnbmVkIGxvbmcgSXA2SW5SZWNlaXZl czsKICAgICAgICB1bnNpZ25lZCBsb25nIElwNkluSGRyRXJyb3JzOwogICAgICAgIHVuc2lnbmVk IGxvbmcgSXA2SW5Ub29CaWdFcnJvcnM7CiAgICAgICAgdW5zaWduZWQgbG9uZyBJcDZJbk5vUm91 dGVzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgSXA2SW5BZGRyRXJyb3JzOwogICAgICAgIHVuc2ln bmVkIGxvbmcgSXA2SW5Vbmtub3duUHJvdG9zOwogICAgICAgIHVuc2lnbmVkIGxvbmcgSXA2SW5U cnVuY2F0ZWRQa3RzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgSXA2SW5EaXNjYXJkczsKICAgICAg ICB1bnNpZ25lZCBsb25nIElwNkluRGVsaXZlcnM7CiAgICAgICAgdW5zaWduZWQgbG9uZyBJcDZP dXRGb3J3RGF0YWdyYW1zOwogICAgICAgIHVuc2lnbmVkIGxvbmcgSXA2T3V0UmVxdWVzdHM7CiAg ICAgICAgdW5zaWduZWQgbG9uZyBJcDZPdXREaXNjYXJkczsKICAgICAgICB1bnNpZ25lZCBsb25n IElwNk91dE5vUm91dGVzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgSXA2UmVhc21UaW1lb3V0Owog ICAgICAgIHVuc2lnbmVkIGxvbmcgSXA2UmVhc21SZXFkczsKICAgICAgICB1bnNpZ25lZCBsb25n IElwNlJlYXNtT0tzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgSXA2UmVhc21GYWlsczsKICAgICAg ICB1bnNpZ25lZCBsb25nIElwNkZyYWdPS3M7CiAgICAgICAgdW5zaWduZWQgbG9uZyBJcDZGcmFn RmFpbHM7CiAgICAgICAgdW5zaWduZWQgbG9uZyBJcDZGcmFnQ3JlYXRlczsKICAgICAgICB1bnNp Z25lZCBsb25nIElwNkluTWNhc3RQa3RzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgSXA2T3V0TWNh c3RQa3RzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgX19wYWRbMF07Cn0gX19hdHRyaWJ1dGVfXygo X19hbGlnbmVkX18oKDEgPDwgKCg1KSkpKSkpOwoKc3RydWN0IGljbXBfbWliCnsKICAgICAgICB1 bnNpZ25lZCBsb25nIEljbXBJbk1zZ3M7CiAgICAgICAgdW5zaWduZWQgbG9uZyBJY21wSW5FcnJv cnM7CiAgICAgICAgdW5zaWduZWQgbG9uZyBJY21wSW5EZXN0VW5yZWFjaHM7CiAgICAgICAgdW5z aWduZWQgbG9uZyBJY21wSW5UaW1lRXhjZHM7CiAgICAgICAgdW5zaWduZWQgbG9uZyBJY21wSW5Q YXJtUHJvYnM7CiAgICAgICAgdW5zaWduZWQgbG9uZyBJY21wSW5TcmNRdWVuY2hzOwogICAgICAg IHVuc2lnbmVkIGxvbmcgSWNtcEluUmVkaXJlY3RzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgSWNt cEluRWNob3M7CiAgICAgICAgdW5zaWduZWQgbG9uZyBJY21wSW5FY2hvUmVwczsKICAgICAgICB1 bnNpZ25lZCBsb25nIEljbXBJblRpbWVzdGFtcHM7CiAgICAgICAgdW5zaWduZWQgbG9uZyBJY21w SW5UaW1lc3RhbXBSZXBzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgSWNtcEluQWRkck1hc2tzOwog ICAgICAgIHVuc2lnbmVkIGxvbmcgSWNtcEluQWRkck1hc2tSZXBzOwogICAgICAgIHVuc2lnbmVk IGxvbmcgSWNtcE91dE1zZ3M7CiAgICAgICAgdW5zaWduZWQgbG9uZyBJY21wT3V0RXJyb3JzOwog ICAgICAgIHVuc2lnbmVkIGxvbmcgSWNtcE91dERlc3RVbnJlYWNoczsKICAgICAgICB1bnNpZ25l ZCBsb25nIEljbXBPdXRUaW1lRXhjZHM7CiAgICAgICAgdW5zaWduZWQgbG9uZyBJY21wT3V0UGFy bVByb2JzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgSWNtcE91dFNyY1F1ZW5jaHM7CiAgICAgICAg dW5zaWduZWQgbG9uZyBJY21wT3V0UmVkaXJlY3RzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgSWNt cE91dEVjaG9zOwogICAgICAgIHVuc2lnbmVkIGxvbmcgSWNtcE91dEVjaG9SZXBzOwogICAgICAg IHVuc2lnbmVkIGxvbmcgSWNtcE91dFRpbWVzdGFtcHM7CiAgICAgICAgdW5zaWduZWQgbG9uZyBJ Y21wT3V0VGltZXN0YW1wUmVwczsKICAgICAgICB1bnNpZ25lZCBsb25nIEljbXBPdXRBZGRyTWFz a3M7CiAgICAgICAgdW5zaWduZWQgbG9uZyBJY21wT3V0QWRkck1hc2tSZXBzOwogICAgICAgIHVu c2lnbmVkIGxvbmcgZHVtbXk7CiAgICAgICAgdW5zaWduZWQgbG9uZyBfX3BhZFswXTsKfSBfX2F0 dHJpYnV0ZV9fKChfX2FsaWduZWRfXygoMSA8PCAoKDUpKSkpKSk7CgpzdHJ1Y3QgaWNtcHY2X21p Ygp7CiAgICAgICAgdW5zaWduZWQgbG9uZyBJY21wNkluTXNnczsKICAgICAgICB1bnNpZ25lZCBs b25nIEljbXA2SW5FcnJvcnM7CgogICAgICAgIHVuc2lnbmVkIGxvbmcgSWNtcDZJbkRlc3RVbnJl YWNoczsKICAgICAgICB1bnNpZ25lZCBsb25nIEljbXA2SW5Qa3RUb29CaWdzOwogICAgICAgIHVu c2lnbmVkIGxvbmcgSWNtcDZJblRpbWVFeGNkczsKICAgICAgICB1bnNpZ25lZCBsb25nIEljbXA2 SW5QYXJtUHJvYmxlbXM7CgogICAgICAgIHVuc2lnbmVkIGxvbmcgSWNtcDZJbkVjaG9zOwogICAg ICAgIHVuc2lnbmVkIGxvbmcgSWNtcDZJbkVjaG9SZXBsaWVzOwogICAgICAgIHVuc2lnbmVkIGxv bmcgSWNtcDZJbkdyb3VwTWVtYlF1ZXJpZXM7CiAgICAgICAgdW5zaWduZWQgbG9uZyBJY21wNklu R3JvdXBNZW1iUmVzcG9uc2VzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgSWNtcDZJbkdyb3VwTWVt YlJlZHVjdGlvbnM7CiAgICAgICAgdW5zaWduZWQgbG9uZyBJY21wNkluUm91dGVyU29saWNpdHM7 CiAgICAgICAgdW5zaWduZWQgbG9uZyBJY21wNkluUm91dGVyQWR2ZXJ0aXNlbWVudHM7CiAgICAg ICAgdW5zaWduZWQgbG9uZyBJY21wNkluTmVpZ2hib3JTb2xpY2l0czsKICAgICAgICB1bnNpZ25l ZCBsb25nIEljbXA2SW5OZWlnaGJvckFkdmVydGlzZW1lbnRzOwogICAgICAgIHVuc2lnbmVkIGxv bmcgSWNtcDZJblJlZGlyZWN0czsKCiAgICAgICAgdW5zaWduZWQgbG9uZyBJY21wNk91dE1zZ3M7 CgogICAgICAgIHVuc2lnbmVkIGxvbmcgSWNtcDZPdXREZXN0VW5yZWFjaHM7CiAgICAgICAgdW5z aWduZWQgbG9uZyBJY21wNk91dFBrdFRvb0JpZ3M7CiAgICAgICAgdW5zaWduZWQgbG9uZyBJY21w Nk91dFRpbWVFeGNkczsKICAgICAgICB1bnNpZ25lZCBsb25nIEljbXA2T3V0UGFybVByb2JsZW1z OwoKICAgICAgICB1bnNpZ25lZCBsb25nIEljbXA2T3V0RWNob1JlcGxpZXM7CiAgICAgICAgdW5z aWduZWQgbG9uZyBJY21wNk91dFJvdXRlclNvbGljaXRzOwogICAgICAgIHVuc2lnbmVkIGxvbmcg SWNtcDZPdXROZWlnaGJvclNvbGljaXRzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgSWNtcDZPdXRO ZWlnaGJvckFkdmVydGlzZW1lbnRzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgSWNtcDZPdXRSZWRp cmVjdHM7CiAgICAgICAgdW5zaWduZWQgbG9uZyBJY21wNk91dEdyb3VwTWVtYlJlc3BvbnNlczsK ICAgICAgICB1bnNpZ25lZCBsb25nIEljbXA2T3V0R3JvdXBNZW1iUmVkdWN0aW9uczsKICAgICAg ICB1bnNpZ25lZCBsb25nIF9fcGFkWzBdOwp9IF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKCgx IDw8ICgoNSkpKSkpKTsKCnN0cnVjdCB0Y3BfbWliCnsKICAgICAgICB1bnNpZ25lZCBsb25nIFRj cFJ0b0FsZ29yaXRobTsKICAgICAgICB1bnNpZ25lZCBsb25nIFRjcFJ0b01pbjsKICAgICAgICB1 bnNpZ25lZCBsb25nIFRjcFJ0b01heDsKICAgICAgICB1bnNpZ25lZCBsb25nIFRjcE1heENvbm47 CiAgICAgICAgdW5zaWduZWQgbG9uZyBUY3BBY3RpdmVPcGVuczsKICAgICAgICB1bnNpZ25lZCBs b25nIFRjcFBhc3NpdmVPcGVuczsKICAgICAgICB1bnNpZ25lZCBsb25nIFRjcEF0dGVtcHRGYWls czsKICAgICAgICB1bnNpZ25lZCBsb25nIFRjcEVzdGFiUmVzZXRzOwogICAgICAgIHVuc2lnbmVk IGxvbmcgVGNwQ3VyckVzdGFiOwogICAgICAgIHVuc2lnbmVkIGxvbmcgVGNwSW5TZWdzOwogICAg ICAgIHVuc2lnbmVkIGxvbmcgVGNwT3V0U2VnczsKICAgICAgICB1bnNpZ25lZCBsb25nIFRjcFJl dHJhbnNTZWdzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgVGNwSW5FcnJzOwogICAgICAgIHVuc2ln bmVkIGxvbmcgVGNwT3V0UnN0czsKICAgICAgICB1bnNpZ25lZCBsb25nIF9fcGFkWzBdOwp9IF9f YXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKCgxIDw8ICgoNSkpKSkpKTsKCnN0cnVjdCB1ZHBfbWli CnsKICAgICAgICB1bnNpZ25lZCBsb25nIFVkcEluRGF0YWdyYW1zOwogICAgICAgIHVuc2lnbmVk IGxvbmcgVWRwTm9Qb3J0czsKICAgICAgICB1bnNpZ25lZCBsb25nIFVkcEluRXJyb3JzOwogICAg ICAgIHVuc2lnbmVkIGxvbmcgVWRwT3V0RGF0YWdyYW1zOwogICAgICAgIHVuc2lnbmVkIGxvbmcg X19wYWRbMF07Cn0gX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oKDEgPDwgKCg1KSkpKSkpOwoK c3RydWN0IGxpbnV4X21pYgp7CiAgICAgICAgdW5zaWduZWQgbG9uZyBTeW5jb29raWVzU2VudDsK ICAgICAgICB1bnNpZ25lZCBsb25nIFN5bmNvb2tpZXNSZWN2OwogICAgICAgIHVuc2lnbmVkIGxv bmcgU3luY29va2llc0ZhaWxlZDsKICAgICAgICB1bnNpZ25lZCBsb25nIEVtYnJ5b25pY1JzdHM7 CiAgICAgICAgdW5zaWduZWQgbG9uZyBQcnVuZUNhbGxlZDsKICAgICAgICB1bnNpZ25lZCBsb25n IFJjdlBydW5lZDsKICAgICAgICB1bnNpZ25lZCBsb25nIE9mb1BydW5lZDsKICAgICAgICB1bnNp Z25lZCBsb25nIE91dE9mV2luZG93SWNtcHM7CiAgICAgICAgdW5zaWduZWQgbG9uZyBMb2NrRHJv cHBlZEljbXBzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgQXJwRmlsdGVyOwogICAgICAgIHVuc2ln bmVkIGxvbmcgVGltZVdhaXRlZDsKICAgICAgICB1bnNpZ25lZCBsb25nIFRpbWVXYWl0UmVjeWNs ZWQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyBUaW1lV2FpdEtpbGxlZDsKICAgICAgICB1bnNpZ25l ZCBsb25nIFBBV1NQYXNzaXZlUmVqZWN0ZWQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyBQQVdTQWN0 aXZlUmVqZWN0ZWQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyBQQVdTRXN0YWJSZWplY3RlZDsKICAg ICAgICB1bnNpZ25lZCBsb25nIERlbGF5ZWRBQ0tzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgRGVs YXllZEFDS0xvY2tlZDsKICAgICAgICB1bnNpZ25lZCBsb25nIERlbGF5ZWRBQ0tMb3N0OwogICAg ICAgIHVuc2lnbmVkIGxvbmcgTGlzdGVuT3ZlcmZsb3dzOwogICAgICAgIHVuc2lnbmVkIGxvbmcg TGlzdGVuRHJvcHM7CiAgICAgICAgdW5zaWduZWQgbG9uZyBUQ1BQcmVxdWV1ZWQ7CiAgICAgICAg dW5zaWduZWQgbG9uZyBUQ1BEaXJlY3RDb3B5RnJvbUJhY2tsb2c7CiAgICAgICAgdW5zaWduZWQg bG9uZyBUQ1BEaXJlY3RDb3B5RnJvbVByZXF1ZXVlOwogICAgICAgIHVuc2lnbmVkIGxvbmcgVENQ UHJlcXVldWVEcm9wcGVkOwogICAgICAgIHVuc2lnbmVkIGxvbmcgVENQSFBIaXRzOwogICAgICAg IHVuc2lnbmVkIGxvbmcgVENQSFBIaXRzVG9Vc2VyOwogICAgICAgIHVuc2lnbmVkIGxvbmcgVENQ UHVyZUFja3M7CiAgICAgICAgdW5zaWduZWQgbG9uZyBUQ1BIUEFja3M7CiAgICAgICAgdW5zaWdu ZWQgbG9uZyBUQ1BSZW5vUmVjb3Zlcnk7CiAgICAgICAgdW5zaWduZWQgbG9uZyBUQ1BTYWNrUmVj b3Zlcnk7CiAgICAgICAgdW5zaWduZWQgbG9uZyBUQ1BTQUNLUmVuZWdpbmc7CiAgICAgICAgdW5z aWduZWQgbG9uZyBUQ1BGQUNLUmVvcmRlcjsKICAgICAgICB1bnNpZ25lZCBsb25nIFRDUFNBQ0tS ZW9yZGVyOwogICAgICAgIHVuc2lnbmVkIGxvbmcgVENQUmVub1Jlb3JkZXI7CiAgICAgICAgdW5z aWduZWQgbG9uZyBUQ1BUU1Jlb3JkZXI7CiAgICAgICAgdW5zaWduZWQgbG9uZyBUQ1BGdWxsVW5k bzsKICAgICAgICB1bnNpZ25lZCBsb25nIFRDUFBhcnRpYWxVbmRvOwogICAgICAgIHVuc2lnbmVk IGxvbmcgVENQRFNBQ0tVbmRvOwogICAgICAgIHVuc2lnbmVkIGxvbmcgVENQTG9zc1VuZG87CiAg ICAgICAgdW5zaWduZWQgbG9uZyBUQ1BMb3NzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgVENQTG9z dFJldHJhbnNtaXQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyBUQ1BSZW5vRmFpbHVyZXM7CiAgICAg ICAgdW5zaWduZWQgbG9uZyBUQ1BTYWNrRmFpbHVyZXM7CiAgICAgICAgdW5zaWduZWQgbG9uZyBU Q1BMb3NzRmFpbHVyZXM7CiAgICAgICAgdW5zaWduZWQgbG9uZyBUQ1BGYXN0UmV0cmFuczsKICAg ICAgICB1bnNpZ25lZCBsb25nIFRDUEZvcndhcmRSZXRyYW5zOwogICAgICAgIHVuc2lnbmVkIGxv bmcgVENQU2xvd1N0YXJ0UmV0cmFuczsKICAgICAgICB1bnNpZ25lZCBsb25nIFRDUFRpbWVvdXRz OwogICAgICAgIHVuc2lnbmVkIGxvbmcgVENQUmVub1JlY292ZXJ5RmFpbDsKICAgICAgICB1bnNp Z25lZCBsb25nIFRDUFNhY2tSZWNvdmVyeUZhaWw7CiAgICAgICAgdW5zaWduZWQgbG9uZyBUQ1BT Y2hlZHVsZXJGYWlsZWQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyBUQ1BSY3ZDb2xsYXBzZWQ7CiAg ICAgICAgdW5zaWduZWQgbG9uZyBUQ1BEU0FDS09sZFNlbnQ7CiAgICAgICAgdW5zaWduZWQgbG9u ZyBUQ1BEU0FDS09mb1NlbnQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyBUQ1BEU0FDS1JlY3Y7CiAg ICAgICAgdW5zaWduZWQgbG9uZyBUQ1BEU0FDS09mb1JlY3Y7CiAgICAgICAgdW5zaWduZWQgbG9u ZyBUQ1BBYm9ydE9uU3luOwogICAgICAgIHVuc2lnbmVkIGxvbmcgVENQQWJvcnRPbkRhdGE7CiAg ICAgICAgdW5zaWduZWQgbG9uZyBUQ1BBYm9ydE9uQ2xvc2U7CiAgICAgICAgdW5zaWduZWQgbG9u ZyBUQ1BBYm9ydE9uTWVtb3J5OwogICAgICAgIHVuc2lnbmVkIGxvbmcgVENQQWJvcnRPblRpbWVv dXQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyBUQ1BBYm9ydE9uTGluZ2VyOwogICAgICAgIHVuc2ln bmVkIGxvbmcgVENQQWJvcnRGYWlsZWQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyBUQ1BNZW1vcnlQ cmVzc3VyZXM7CiAgICAgICAgdW5zaWduZWQgbG9uZyBfX3BhZFswXTsKfSBfX2F0dHJpYnV0ZV9f KChfX2FsaWduZWRfXygoMSA8PCAoKDUpKSkpKSk7CiMgMzcgIi91c3Ivc3JjL2xpbnV4LTIuNC4y MC04L2luY2x1ZGUvbmV0L2lwLmgiIDIKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2lu Y2x1ZGUvbmV0L3NvY2suaCIgMQojIDM5ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRl L25ldC9zb2NrLmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9p bi5oIiAxCiMgMjQgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvaW4uaCIK ZW51bSB7CiAgSVBQUk9UT19JUCA9IDAsCiAgSVBQUk9UT19JQ01QID0gMSwKICBJUFBST1RPX0lH TVAgPSAyLAogIElQUFJPVE9fSVBJUCA9IDQsCiAgSVBQUk9UT19UQ1AgPSA2LAogIElQUFJPVE9f RUdQID0gOCwKICBJUFBST1RPX1BVUCA9IDEyLAogIElQUFJPVE9fVURQID0gMTcsCiAgSVBQUk9U T19JRFAgPSAyMiwKICBJUFBST1RPX1JTVlAgPSA0NiwKICBJUFBST1RPX0dSRSA9IDQ3LAoKICBJ UFBST1RPX0lQVjYgPSA0MSwKCiAgSVBQUk9UT19QSU0gPSAxMDMsCgogIElQUFJPVE9fRVNQID0g NTAsCiAgSVBQUk9UT19BSCA9IDUxLAogIElQUFJPVE9fQ09NUCA9IDEwOCwKCiAgSVBQUk9UT19S QVcgPSAyNTUsCiAgSVBQUk9UT19NQVgKfTsKCgoKc3RydWN0IGluX2FkZHIgewogICAgICAgIF9f dTMyIHNfYWRkcjsKfTsKIyA5MSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51 eC9pbi5oIgpzdHJ1Y3QgaXBfbXJlcQp7CiAgICAgICAgc3RydWN0IGluX2FkZHIgaW1yX211bHRp YWRkcjsKICAgICAgICBzdHJ1Y3QgaW5fYWRkciBpbXJfaW50ZXJmYWNlOwp9OwoKc3RydWN0IGlw X21yZXFuCnsKICAgICAgICBzdHJ1Y3QgaW5fYWRkciBpbXJfbXVsdGlhZGRyOwogICAgICAgIHN0 cnVjdCBpbl9hZGRyIGltcl9hZGRyZXNzOwogICAgICAgIGludCBpbXJfaWZpbmRleDsKfTsKCnN0 cnVjdCBpbl9wa3RpbmZvCnsKICAgICAgICBpbnQgaXBpX2lmaW5kZXg7CiAgICAgICAgc3RydWN0 IGluX2FkZHIgaXBpX3NwZWNfZHN0OwogICAgICAgIHN0cnVjdCBpbl9hZGRyIGlwaV9hZGRyOwp9 OwoKCgpzdHJ1Y3Qgc29ja2FkZHJfaW4gewogIHNhX2ZhbWlseV90IHNpbl9mYW1pbHk7CiAgdW5z aWduZWQgc2hvcnQgaW50IHNpbl9wb3J0OwogIHN0cnVjdCBpbl9hZGRyIHNpbl9hZGRyOwoKCiAg dW5zaWduZWQgY2hhciBfX3BhZFsxNiAtIHNpemVvZihzaG9ydCBpbnQpIC0KICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZW9mKHVuc2lnbmVkIHNob3J0IGludCkgLSBzaXplb2Yoc3RydWN0IGlu X2FkZHIpXTsKfTsKIyA0MCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9uZXQvc29j ay5oIiAyCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2luNi5o IiAxCiMgMzAgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvaW42LmgiCnN0 cnVjdCBpbjZfYWRkcgp7CiAgICAgICAgdW5pb24KICAgICAgICB7CiAgICAgICAgICAgICAgICBf X3U4IHU2X2FkZHI4WzE2XTsKICAgICAgICAgICAgICAgIF9fdTE2IHU2X2FkZHIxNls4XTsKICAg ICAgICAgICAgICAgIF9fdTMyIHU2X2FkZHIzMls0XTsKICAgICAgICB9IGluNl91OwoKCgp9OwoK c3RydWN0IHNvY2thZGRyX2luNiB7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgaW50IHNpbjZfZmFt aWx5OwogICAgICAgIF9fdTE2IHNpbjZfcG9ydDsKICAgICAgICBfX3UzMiBzaW42X2Zsb3dpbmZv OwogICAgICAgIHN0cnVjdCBpbjZfYWRkciBzaW42X2FkZHI7CiAgICAgICAgX191MzIgc2luNl9z Y29wZV9pZDsKfTsKCnN0cnVjdCBpcHY2X21yZXEgewoKICAgICAgICBzdHJ1Y3QgaW42X2FkZHIg aXB2Nm1yX211bHRpYWRkcjsKCgogICAgICAgIGludCBpcHY2bXJfaWZpbmRleDsKfTsKCnN0cnVj dCBpbjZfZmxvd2xhYmVsX3JlcQp7CiAgICAgICAgc3RydWN0IGluNl9hZGRyIGZscl9kc3Q7CiAg ICAgICAgX191MzIgZmxyX2xhYmVsOwogICAgICAgIF9fdTggZmxyX2FjdGlvbjsKICAgICAgICBf X3U4IGZscl9zaGFyZTsKICAgICAgICBfX3UxNiBmbHJfZmxhZ3M7CiAgICAgICAgX191MTYgZmxy X2V4cGlyZXM7CiAgICAgICAgX191MTYgZmxyX2xpbmdlcjsKICAgICAgICBfX3UzMiBfX2Zscl9w YWQ7Cgp9OwojIDQzICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL25ldC9zb2NrLmgi IDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2lwdjYuaCIgMQoj IDE4ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2lwdjYuaCIKc3RydWN0 IGluNl9wa3RpbmZvIHsKICAgICAgICBzdHJ1Y3QgaW42X2FkZHIgaXBpNl9hZGRyOwogICAgICAg IGludCBpcGk2X2lmaW5kZXg7Cn07CgoKc3RydWN0IGluNl9pZnJlcSB7CiAgICAgICAgc3RydWN0 IGluNl9hZGRyIGlmcjZfYWRkcjsKICAgICAgICBfX3UzMiBpZnI2X3ByZWZpeGxlbjsKICAgICAg ICBpbnQgaWZyNl9pZmluZGV4Owp9OwoKCgoKCgoKc3RydWN0IGlwdjZfcnRfaGRyIHsKICAgICAg ICBfX3U4IG5leHRoZHI7CiAgICAgICAgX191OCBoZHJsZW47CiAgICAgICAgX191OCB0eXBlOwog ICAgICAgIF9fdTggc2VnbWVudHNfbGVmdDsKCgoKCgp9OwoKCnN0cnVjdCBpcHY2X29wdF9oZHIg ewogICAgICAgIF9fdTggbmV4dGhkcjsKICAgICAgICBfX3U4IGhkcmxlbjsKCgoKfTsKIyA2OCAi L3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9pcHY2LmgiCnN0cnVjdCBydDBf aGRyIHsKICAgICAgICBzdHJ1Y3QgaXB2Nl9ydF9oZHIgcnRfaGRyOwogICAgICAgIF9fdTMyIGJp dG1hcDsKICAgICAgICBzdHJ1Y3QgaW42X2FkZHIgYWRkclswXTsKCgp9OwojIDgzICIvdXNyL3Ny Yy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2lwdjYuaCIKc3RydWN0IGlwdjZoZHIgewoK ICAgICAgICBfX3U4IHByaW9yaXR5OjQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dmVyc2lvbjo0OwoKCgoKCgogICAgICAgIF9fdTggZmxvd19sYmxbM107CgogICAgICAgIF9fdTE2 IHBheWxvYWRfbGVuOwogICAgICAgIF9fdTggbmV4dGhkcjsKICAgICAgICBfX3U4IGhvcF9saW1p dDsKCiAgICAgICAgc3RydWN0IGluNl9hZGRyIHNhZGRyOwogICAgICAgIHN0cnVjdCBpbjZfYWRk ciBkYWRkcjsKfTsKIyAxMTAgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgv aXB2Ni5oIgpzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0KewogICAgICAgIGludCBpaWY7CiAgICAgICAg X191MTYgcmE7CiAgICAgICAgX191MTYgaG9wOwogICAgICAgIF9fdTE2IGF1dGg7CiAgICAgICAg X191MTYgZHN0MDsKICAgICAgICBfX3UxNiBzcmNydDsKICAgICAgICBfX3UxNiBkc3QxOwp9Owoj IDQ0ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL25ldC9zb2NrLmgiIDIKIyAxICIv dXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2ljbXB2Ni5oIiAxCgoKCgoKc3Ry dWN0IGljbXA2aGRyIHsKCiAgICAgICAgX191OCBpY21wNl90eXBlOwogICAgICAgIF9fdTggaWNt cDZfY29kZTsKICAgICAgICBfX3UxNiBpY21wNl9ja3N1bTsKCgogICAgICAgIHVuaW9uIHsKICAg ICAgICAgICAgICAgIF9fdTMyIHVuX2RhdGEzMlsxXTsKICAgICAgICAgICAgICAgIF9fdTE2IHVu X2RhdGExNlsyXTsKICAgICAgICAgICAgICAgIF9fdTggdW5fZGF0YThbNF07CgogICAgICAgICAg ICAgICAgc3RydWN0IGljbXB2Nl9lY2hvIHsKICAgICAgICAgICAgICAgICAgICAgICAgX191MTYg aWRlbnRpZmllcjsKICAgICAgICAgICAgICAgICAgICAgICAgX191MTYgc2VxdWVuY2U7CiAgICAg ICAgICAgICAgICB9IHVfZWNobzsKCiAgICAgICAgICAgICAgICBzdHJ1Y3QgaWNtcHY2X25kX2Fk dnQgewoKICAgICAgICAgICAgICAgICAgICAgICAgX191MzIgcmVzZXJ2ZWQ6NSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlOjEsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzb2xpY2l0ZWQ6MSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJvdXRlcjoxLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcmVzZXJ2ZWQyOjI0OwojIDM4ICIvdXNyL3NyYy9saW51eC0yLjQuMjAt OC9pbmNsdWRlL2xpbnV4L2ljbXB2Ni5oIgogICAgICAgICAgICAgICAgfSB1X25kX2FkdnQ7Cgog ICAgICAgICAgICAgICAgc3RydWN0IGljbXB2Nl9uZF9yYSB7CiAgICAgICAgICAgICAgICAgICAg ICAgIF9fdTggaG9wX2xpbWl0OwoKICAgICAgICAgICAgICAgICAgICAgICAgX191OCByZXNlcnZl ZDo2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXI6MSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hbmFnZWQ6MTsKIyA1NCAiL3Vz ci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9pY21wdjYuaCIKICAgICAgICAgICAg ICAgICAgICAgICAgX191MTYgcnRfbGlmZXRpbWU7CiAgICAgICAgICAgICAgICB9IHVfbmRfcmE7 CgogICAgICAgIH0gaWNtcDZfZGF0YXVuOwojIDczICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9p bmNsdWRlL2xpbnV4L2ljbXB2Ni5oIgp9OwojIDEyNiAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgv aW5jbHVkZS9saW51eC9pY21wdjYuaCIKc3RydWN0IGljbXA2X2ZpbHRlciB7CiAgICAgICAgX191 MzIgZGF0YVs4XTsKfTsKCgoKCgoKCmV4dGVybiB2b2lkIGljbXB2Nl9zZW5kKHN0cnVjdCBza19i dWZmICpza2IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgdHlwZSwgaW50IGNvZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX3UzMiBpbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CgpleHRl cm4gaW50IGljbXB2Nl9pbml0KHN0cnVjdCBuZXRfcHJvdG9fZmFtaWx5ICpvcHMpOwpleHRlcm4g aW50IGljbXB2Nl9lcnJfY29udmVydChpbnQgdHlwZSwgaW50IGNvZGUsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICplcnIpOwpl eHRlcm4gdm9pZCBpY21wdjZfY2xlYW51cCh2b2lkKTsKZXh0ZXJuIHZvaWQgaWNtcHY2X3BhcmFt X3Byb2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb2RlLCBpbnQgcG9zKTsKIyA0NSAiL3Vz ci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9uZXQvc29jay5oIiAyCiMgMSAiL3Vzci9zcmMv bGludXgtMi40LjIwLTgvaW5jbHVkZS9uZXQvaWZfaW5ldDYuaCIgMQojIDIzICIvdXNyL3NyYy9s aW51eC0yLjQuMjAtOC9pbmNsdWRlL25ldC9pZl9pbmV0Ni5oIgpzdHJ1Y3QgaW5ldDZfaWZhZGRy CnsKICAgICAgICBzdHJ1Y3QgaW42X2FkZHIgYWRkcjsKICAgICAgICBfX3UzMiBwcmVmaXhfbGVu OwoKICAgICAgICBfX3UzMiB2YWxpZF9sZnQ7CiAgICAgICAgX191MzIgcHJlZmVyZWRfbGZ0Owog ICAgICAgIHVuc2lnbmVkIGxvbmcgdHN0YW1wOwogICAgICAgIGF0b21pY190IHJlZmNudDsKICAg ICAgICBzcGlubG9ja190IGxvY2s7CgogICAgICAgIF9fdTggcHJvYmVzOwogICAgICAgIF9fdTgg ZmxhZ3M7CgogICAgICAgIF9fdTE2IHNjb3BlOwoKICAgICAgICBzdHJ1Y3QgdGltZXJfbGlzdCB0 aW1lcjsKCiAgICAgICAgc3RydWN0IGluZXQ2X2RldiAqaWRldjsKCiAgICAgICAgc3RydWN0IGlu ZXQ2X2lmYWRkciAqbHN0X25leHQ7CiAgICAgICAgc3RydWN0IGluZXQ2X2lmYWRkciAqaWZfbmV4 dDsKCiAgICAgICAgaW50IGRlYWQ7Cn07CgpzdHJ1Y3QgaXB2Nl9tY19zb2NrbGlzdAp7CiAgICAg ICAgc3RydWN0IGluNl9hZGRyIGFkZHI7CiAgICAgICAgaW50IGlmaW5kZXg7CiAgICAgICAgc3Ry dWN0IGlwdjZfbWNfc29ja2xpc3QgKm5leHQ7Cn07CgoKCgoKc3RydWN0IGlmbWNhZGRyNgp7CiAg ICAgICAgc3RydWN0IGluNl9hZGRyIG1jYV9hZGRyOwogICAgICAgIHN0cnVjdCBpbmV0Nl9kZXYg KmlkZXY7CiAgICAgICAgc3RydWN0IGlmbWNhZGRyNiAqbmV4dDsKICAgICAgICBzdHJ1Y3QgdGlt ZXJfbGlzdCBtY2FfdGltZXI7CiAgICAgICAgdW5zaWduZWQgbWNhX2ZsYWdzOwogICAgICAgIGlu dCBtY2FfdXNlcnM7CiAgICAgICAgYXRvbWljX3QgbWNhX3JlZmNudDsKICAgICAgICBzcGlubG9j a190IG1jYV9sb2NrOwp9OwoKCgoKCgpzdHJ1Y3QgaXB2Nl9kZXZjb25mCnsKICAgICAgICBpbnQg Zm9yd2FyZGluZzsKICAgICAgICBpbnQgaG9wX2xpbWl0OwogICAgICAgIGludCBtdHU2OwogICAg ICAgIGludCBhY2NlcHRfcmE7CiAgICAgICAgaW50IGFjY2VwdF9yZWRpcmVjdHM7CiAgICAgICAg aW50IGF1dG9jb25mOwogICAgICAgIGludCBkYWRfdHJhbnNtaXRzOwogICAgICAgIGludCBydHJf c29saWNpdHM7CiAgICAgICAgaW50IHJ0cl9zb2xpY2l0X2ludGVydmFsOwogICAgICAgIGludCBy dHJfc29saWNpdF9kZWxheTsKCiAgICAgICAgdm9pZCAqc3lzY3RsOwp9OwoKc3RydWN0IGluZXQ2 X2Rldgp7CiAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKCiAgICAgICAgc3RydWN0IGlu ZXQ2X2lmYWRkciAqYWRkcl9saXN0OwogICAgICAgIHN0cnVjdCBpZm1jYWRkcjYgKm1jX2xpc3Q7 CiAgICAgICAgcndsb2NrX3QgbG9jazsKICAgICAgICBhdG9taWNfdCByZWZjbnQ7CiAgICAgICAg X191MzIgaWZfZmxhZ3M7CiAgICAgICAgaW50IGRlYWQ7CgogICAgICAgIHN0cnVjdCBuZWlnaF9w YXJtcyAqbmRfcGFybXM7CiAgICAgICAgc3RydWN0IGluZXQ2X2RldiAqbmV4dDsKICAgICAgICBz dHJ1Y3QgaXB2Nl9kZXZjb25mIGNuZjsKfTsKCmV4dGVybiBzdHJ1Y3QgaXB2Nl9kZXZjb25mIGlw djZfZGV2Y29uZjsKCnN0YXRpYyBpbmxpbmUgdm9pZCBpcHY2X2V0aF9tY19tYXAoc3RydWN0IGlu Nl9hZGRyICphZGRyLCBjaGFyICpidWYpCnsKCgoKCgoKICAgICAgICBidWZbMF09IDB4MzM7CiAg ICAgICAgYnVmWzFdPSAweDMzOwoKICAgICAgICAoX19idWlsdGluX2NvbnN0YW50X3Aoc2l6ZW9m KF9fdTMyKSkgPyBfX2NvbnN0YW50X21lbWNweSgoYnVmICsgMiksKCZhZGRyLT5pbjZfdS51Nl9h ZGRyMzJbM10pLChzaXplb2YoX191MzIpKSkgOiBfX21lbWNweSgoYnVmICsgMiksKCZhZGRyLT5p bjZfdS51Nl9hZGRyMzJbM10pLChzaXplb2YoX191MzIpKSkpOwp9CgpzdGF0aWMgaW5saW5lIHZv aWQgaXB2Nl90cl9tY19tYXAoc3RydWN0IGluNl9hZGRyICphZGRyLCBjaGFyICpidWYpCnsKCgog ICAgICAgIGlmICgoKGFkZHItPmluNl91LnU2X2FkZHI4WzBdID09IDB4RkYpICYmCiAgICAgICAg ICAgICgoYWRkci0+aW42X3UudTZfYWRkcjhbMV0gPT0gMHgwMSkgfHwgKGFkZHItPmluNl91LnU2 X2FkZHI4WzFdID09IDB4MDIpKSAmJgogICAgICAgICAgICAgKGFkZHItPmluNl91LnU2X2FkZHIx NlsxXSA9PSAwKSAmJgogICAgICAgICAgICAgKGFkZHItPmluNl91LnU2X2FkZHIzMlsxXSA9PSAw KSAmJgogICAgICAgICAgICAgKGFkZHItPmluNl91LnU2X2FkZHIzMlsyXSA9PSAwKSAmJgogICAg ICAgICAgICAgKGFkZHItPmluNl91LnU2X2FkZHIxNls2XSA9PSAwKSAmJgogICAgICAgICAgICAg KGFkZHItPmluNl91LnU2X2FkZHI4WzE1XSA9PSAxKSkgfHwKICAgICAgICAgICAgKChhZGRyLT5p bjZfdS51Nl9hZGRyOFswXSA9PSAweEZGKSAmJgogICAgICAgICAgICAgKGFkZHItPmluNl91LnU2 X2FkZHI4WzFdID09IDB4MDIpICYmCiAgICAgICAgICAgICAoYWRkci0+aW42X3UudTZfYWRkcjE2 WzFdID09IDApICYmCiAgICAgICAgICAgICAoYWRkci0+aW42X3UudTZfYWRkcjMyWzFdID09IDAp ICYmCiAgICAgICAgICAgICAoYWRkci0+aW42X3UudTZfYWRkcjE2WzRdID09IDApICYmCiAgICAg ICAgICAgICAoYWRkci0+aW42X3UudTZfYWRkcjhbMTBdID09IDApICYmCiAgICAgICAgICAgICAo YWRkci0+aW42X3UudTZfYWRkcjhbMTFdID09IDEpICYmCiAgICAgICAgICAgICAoYWRkci0+aW42 X3UudTZfYWRkcjhbMTJdID09IDB4ZmYpKSkKICAgICAgICB7CiAgICAgICAgICAgICAgICBidWZb MF09MHhDMDsKICAgICAgICAgICAgICAgIGJ1ZlsxXT0weDAwOwogICAgICAgICAgICAgICAgYnVm WzJdPTB4MDE7CiAgICAgICAgICAgICAgICBidWZbM109MHgwMDsKICAgICAgICAgICAgICAgIGJ1 Zls0XT0weDAwOwogICAgICAgICAgICAgICAgYnVmWzVdPTB4MDA7CgogICAgICAgIH0gZWxzZSBp ZiAoKGFkZHItPmluNl91LnU2X2FkZHI4WzBdID09MHhmZikgJiYKICAgICAgICAgICAgICAgICgo YWRkci0+aW42X3UudTZfYWRkcjhbMV0gJiAweEYwKSA9PSAwKSAmJgogICAgICAgICAgICAgICAg KGFkZHItPmluNl91LnU2X2FkZHIxNlsxXSA9PSAwKSAmJgogICAgICAgICAgICAgICAgKGFkZHIt PmluNl91LnU2X2FkZHIzMlsxXSA9PSAwKSAmJgogICAgICAgICAgICAgICAgKGFkZHItPmluNl91 LnU2X2FkZHIzMlsyXSA9PSAwKSAmJgogICAgICAgICAgICAgICAgKGFkZHItPmluNl91LnU2X2Fk ZHIxNls2XSA9PSAwKSAmJgogICAgICAgICAgICAgICAgKGFkZHItPmluNl91LnU2X2FkZHI4WzE1 XSA9PSAyKSkKICAgICAgICB7CiAgICAgICAgICAgICAgICBidWZbMF09MHhDMDsKICAgICAgICAg ICAgICAgIGJ1ZlsxXT0weDAwOwogICAgICAgICAgICAgICAgYnVmWzJdPTB4MDI7CiAgICAgICAg ICAgICAgICBidWZbM109MHgwMDsKICAgICAgICAgICAgICAgIGJ1Zls0XT0weDAwOwogICAgICAg ICAgICAgICAgYnVmWzVdPTB4MDA7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHVu c2lnbmVkIGNoYXIgaSA7CgogICAgICAgICAgICAgICAgaSA9IGFkZHItPmluNl91LnU2X2FkZHI4 WzE1XSAmIDcgOwogICAgICAgICAgICAgICAgYnVmWzBdPTB4QzA7CiAgICAgICAgICAgICAgICBi dWZbMV09MHgwMDsKICAgICAgICAgICAgICAgIGJ1ZlsyXT0weDAwOwogICAgICAgICAgICAgICAg YnVmWzNdPTB4MDEgPDwgaSA7CiAgICAgICAgICAgICAgICBidWZbNF09MHgwMDsKICAgICAgICAg ICAgICAgIGJ1Zls1XT0weDAwOwogICAgICAgIH0KfQojIDQ2ICIvdXNyL3NyYy9saW51eC0yLjQu MjAtOC9pbmNsdWRlL25ldC9zb2NrLmgiIDIKCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMjAt OC9pbmNsdWRlL2xpbnV4L2ljbXAuaCIgMQojIDY2ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9p bmNsdWRlL2xpbnV4L2ljbXAuaCIKc3RydWN0IGljbXBoZHIgewogIF9fdTggdHlwZTsKICBfX3U4 IGNvZGU7CiAgX191MTYgY2hlY2tzdW07CiAgdW5pb24gewogICAgICAgIHN0cnVjdCB7CiAgICAg ICAgICAgICAgICBfX3UxNiBpZDsKICAgICAgICAgICAgICAgIF9fdTE2IHNlcXVlbmNlOwogICAg ICAgIH0gZWNobzsKICAgICAgICBfX3UzMiBnYXRld2F5OwogICAgICAgIHN0cnVjdCB7CiAgICAg ICAgICAgICAgICBfX3UxNiBfX3VudXNlZDsKICAgICAgICAgICAgICAgIF9fdTE2IG10dTsKICAg ICAgICB9IGZyYWc7CiAgfSB1bjsKfTsKCgoKCgoKCnN0cnVjdCBpY21wX2ZpbHRlciB7CiAgICAg ICAgX191MzIgZGF0YTsKfTsKIyA1MCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9u ZXQvc29jay5oIiAyCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgv dGNwLmgiIDEKIyAyMyAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC90Y3Au aCIKc3RydWN0IHRjcGhkciB7CiAgICAgICAgX191MTYgc291cmNlOwogICAgICAgIF9fdTE2IGRl c3Q7CiAgICAgICAgX191MzIgc2VxOwogICAgICAgIF9fdTMyIGFja19zZXE7CgogICAgICAgIF9f dTE2IHJlczE6NCwKICAgICAgICAgICAgICAgIGRvZmY6NCwKICAgICAgICAgICAgICAgIGZpbjox LAogICAgICAgICAgICAgICAgc3luOjEsCiAgICAgICAgICAgICAgICByc3Q6MSwKICAgICAgICAg ICAgICAgIHBzaDoxLAogICAgICAgICAgICAgICAgYWNrOjEsCiAgICAgICAgICAgICAgICB1cmc6 MSwKICAgICAgICAgICAgICAgIGVjZToxLAogICAgICAgICAgICAgICAgY3dyOjE7CiMgNTMgIi91 c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvdGNwLmgiCiAgICAgICAgX191MTYg d2luZG93OwogICAgICAgIF9fdTE2IGNoZWNrOwogICAgICAgIF9fdTE2IHVyZ19wdHI7Cn07CgoK ZW51bSB7CiAgVENQX0VTVEFCTElTSEVEID0gMSwKICBUQ1BfU1lOX1NFTlQsCiAgVENQX1NZTl9S RUNWLAogIFRDUF9GSU5fV0FJVDEsCiAgVENQX0ZJTl9XQUlUMiwKICBUQ1BfVElNRV9XQUlULAog IFRDUF9DTE9TRSwKICBUQ1BfQ0xPU0VfV0FJVCwKICBUQ1BfTEFTVF9BQ0ssCiAgVENQX0xJU1RF TiwKICBUQ1BfQ0xPU0lORywKCiAgVENQX01BWF9TVEFURVMKfTsKCgoKCmVudW0gewogIFRDUEZf RVNUQUJMSVNIRUQgPSAoMSA8PCAxKSwKICBUQ1BGX1NZTl9TRU5UID0gKDEgPDwgMiksCiAgVENQ Rl9TWU5fUkVDViA9ICgxIDw8IDMpLAogIFRDUEZfRklOX1dBSVQxID0gKDEgPDwgNCksCiAgVENQ Rl9GSU5fV0FJVDIgPSAoMSA8PCA1KSwKICBUQ1BGX1RJTUVfV0FJVCA9ICgxIDw8IDYpLAogIFRD UEZfQ0xPU0UgPSAoMSA8PCA3KSwKICBUQ1BGX0NMT1NFX1dBSVQgPSAoMSA8PCA4KSwKICBUQ1BG X0xBU1RfQUNLID0gKDEgPDwgOSksCiAgVENQRl9MSVNURU4gPSAoMSA8PCAxMCksCiAgVENQRl9D TE9TSU5HID0gKDEgPDwgMTEpCn07CgoKCgoKCnVuaW9uIHRjcF93b3JkX2hkciB7CiAgICAgICAg c3RydWN0IHRjcGhkciBoZHI7CiAgICAgICAgX191MzIgd29yZHNbNV07Cn07CgoKCmVudW0gewog ICAgICAgIFRDUF9GTEFHX0NXUiA9ICgoX191MzIpKCAoKChfX3UzMikoKDB4MDA4MDAwMDApKSAm IChfX3UzMikweDAwMDAwMGZmVUwpIDw8IDI0KSB8ICgoKF9fdTMyKSgoMHgwMDgwMDAwMCkpICYg KF9fdTMyKTB4MDAwMGZmMDBVTCkgPDwgOCkgfCAoKChfX3UzMikoKDB4MDA4MDAwMDApKSAmIChf X3UzMikweDAwZmYwMDAwVUwpID4+IDgpIHwgKCgoX191MzIpKCgweDAwODAwMDAwKSkgJiAoX191 MzIpMHhmZjAwMDAwMFVMKSA+PiAyNCkgKSksCiAgICAgICAgVENQX0ZMQUdfRUNFID0gKChfX3Uz MikoICgoKF9fdTMyKSgoMHgwMDQwMDAwMCkpICYgKF9fdTMyKTB4MDAwMDAwZmZVTCkgPDwgMjQp IHwgKCgoX191MzIpKCgweDAwNDAwMDAwKSkgJiAoX191MzIpMHgwMDAwZmYwMFVMKSA8PCA4KSB8 ICgoKF9fdTMyKSgoMHgwMDQwMDAwMCkpICYgKF9fdTMyKTB4MDBmZjAwMDBVTCkgPj4gOCkgfCAo KChfX3UzMikoKDB4MDA0MDAwMDApKSAmIChfX3UzMikweGZmMDAwMDAwVUwpID4+IDI0KSApKSwK ICAgICAgICBUQ1BfRkxBR19VUkcgPSAoKF9fdTMyKSggKCgoX191MzIpKCgweDAwMjAwMDAwKSkg JiAoX191MzIpMHgwMDAwMDBmZlVMKSA8PCAyNCkgfCAoKChfX3UzMikoKDB4MDAyMDAwMDApKSAm IChfX3UzMikweDAwMDBmZjAwVUwpIDw8IDgpIHwgKCgoX191MzIpKCgweDAwMjAwMDAwKSkgJiAo X191MzIpMHgwMGZmMDAwMFVMKSA+PiA4KSB8ICgoKF9fdTMyKSgoMHgwMDIwMDAwMCkpICYgKF9f dTMyKTB4ZmYwMDAwMDBVTCkgPj4gMjQpICkpLAogICAgICAgIFRDUF9GTEFHX0FDSyA9ICgoX191 MzIpKCAoKChfX3UzMikoKDB4MDAxMDAwMDApKSAmIChfX3UzMikweDAwMDAwMGZmVUwpIDw8IDI0 KSB8ICgoKF9fdTMyKSgoMHgwMDEwMDAwMCkpICYgKF9fdTMyKTB4MDAwMGZmMDBVTCkgPDwgOCkg fCAoKChfX3UzMikoKDB4MDAxMDAwMDApKSAmIChfX3UzMikweDAwZmYwMDAwVUwpID4+IDgpIHwg KCgoX191MzIpKCgweDAwMTAwMDAwKSkgJiAoX191MzIpMHhmZjAwMDAwMFVMKSA+PiAyNCkgKSks CiAgICAgICAgVENQX0ZMQUdfUFNIID0gKChfX3UzMikoICgoKF9fdTMyKSgoMHgwMDA4MDAwMCkp ICYgKF9fdTMyKTB4MDAwMDAwZmZVTCkgPDwgMjQpIHwgKCgoX191MzIpKCgweDAwMDgwMDAwKSkg JiAoX191MzIpMHgwMDAwZmYwMFVMKSA8PCA4KSB8ICgoKF9fdTMyKSgoMHgwMDA4MDAwMCkpICYg KF9fdTMyKTB4MDBmZjAwMDBVTCkgPj4gOCkgfCAoKChfX3UzMikoKDB4MDAwODAwMDApKSAmIChf X3UzMikweGZmMDAwMDAwVUwpID4+IDI0KSApKSwKICAgICAgICBUQ1BfRkxBR19SU1QgPSAoKF9f dTMyKSggKCgoX191MzIpKCgweDAwMDQwMDAwKSkgJiAoX191MzIpMHgwMDAwMDBmZlVMKSA8PCAy NCkgfCAoKChfX3UzMikoKDB4MDAwNDAwMDApKSAmIChfX3UzMikweDAwMDBmZjAwVUwpIDw8IDgp IHwgKCgoX191MzIpKCgweDAwMDQwMDAwKSkgJiAoX191MzIpMHgwMGZmMDAwMFVMKSA+PiA4KSB8 ICgoKF9fdTMyKSgoMHgwMDA0MDAwMCkpICYgKF9fdTMyKTB4ZmYwMDAwMDBVTCkgPj4gMjQpICkp LAogICAgICAgIFRDUF9GTEFHX1NZTiA9ICgoX191MzIpKCAoKChfX3UzMikoKDB4MDAwMjAwMDAp KSAmIChfX3UzMikweDAwMDAwMGZmVUwpIDw8IDI0KSB8ICgoKF9fdTMyKSgoMHgwMDAyMDAwMCkp ICYgKF9fdTMyKTB4MDAwMGZmMDBVTCkgPDwgOCkgfCAoKChfX3UzMikoKDB4MDAwMjAwMDApKSAm IChfX3UzMikweDAwZmYwMDAwVUwpID4+IDgpIHwgKCgoX191MzIpKCgweDAwMDIwMDAwKSkgJiAo X191MzIpMHhmZjAwMDAwMFVMKSA+PiAyNCkgKSksCiAgICAgICAgVENQX0ZMQUdfRklOID0gKChf X3UzMikoICgoKF9fdTMyKSgoMHgwMDAxMDAwMCkpICYgKF9fdTMyKTB4MDAwMDAwZmZVTCkgPDwg MjQpIHwgKCgoX191MzIpKCgweDAwMDEwMDAwKSkgJiAoX191MzIpMHgwMDAwZmYwMFVMKSA8PCA4 KSB8ICgoKF9fdTMyKSgoMHgwMDAxMDAwMCkpICYgKF9fdTMyKTB4MDBmZjAwMDBVTCkgPj4gOCkg fCAoKChfX3UzMikoKDB4MDAwMTAwMDApKSAmIChfX3UzMikweGZmMDAwMDAwVUwpID4+IDI0KSAp KSwKICAgICAgICBUQ1BfUkVTRVJWRURfQklUUyA9ICgoX191MzIpKCAoKChfX3UzMikoKDB4MEYw MDAwMDApKSAmIChfX3UzMikweDAwMDAwMGZmVUwpIDw8IDI0KSB8ICgoKF9fdTMyKSgoMHgwRjAw MDAwMCkpICYgKF9fdTMyKTB4MDAwMGZmMDBVTCkgPDwgOCkgfCAoKChfX3UzMikoKDB4MEYwMDAw MDApKSAmIChfX3UzMikweDAwZmYwMDAwVUwpID4+IDgpIHwgKCgoX191MzIpKCgweDBGMDAwMDAw KSkgJiAoX191MzIpMHhmZjAwMDAwMFVMKSA+PiAyNCkgKSksCiAgICAgICAgVENQX0RBVEFfT0ZG U0VUID0gKChfX3UzMikoICgoKF9fdTMyKSgoMHhGMDAwMDAwMCkpICYgKF9fdTMyKTB4MDAwMDAw ZmZVTCkgPDwgMjQpIHwgKCgoX191MzIpKCgweEYwMDAwMDAwKSkgJiAoX191MzIpMHgwMDAwZmYw MFVMKSA8PCA4KSB8ICgoKF9fdTMyKSgoMHhGMDAwMDAwMCkpICYgKF9fdTMyKTB4MDBmZjAwMDBV TCkgPj4gOCkgfCAoKChfX3UzMikoKDB4RjAwMDAwMDApKSAmIChfX3UzMikweGZmMDAwMDAwVUwp ID4+IDI0KSApKQp9OwojIDEzNiAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51 eC90Y3AuaCIKZW51bSB0Y3BfY2Ffc3RhdGUKewogICAgICAgIFRDUF9DQV9PcGVuID0gMCwKCiAg ICAgICAgVENQX0NBX0Rpc29yZGVyID0gMSwKCiAgICAgICAgVENQX0NBX0NXUiA9IDIsCgogICAg ICAgIFRDUF9DQV9SZWNvdmVyeSA9IDMsCgogICAgICAgIFRDUF9DQV9Mb3NzID0gNAoKfTsKCnN0 cnVjdCB0Y3BfaW5mbwp7CiAgICAgICAgX191OCB0Y3BpX3N0YXRlOwogICAgICAgIF9fdTggdGNw aV9jYV9zdGF0ZTsKICAgICAgICBfX3U4IHRjcGlfcmV0cmFuc21pdHM7CiAgICAgICAgX191OCB0 Y3BpX3Byb2JlczsKICAgICAgICBfX3U4IHRjcGlfYmFja29mZjsKICAgICAgICBfX3U4IHRjcGlf b3B0aW9uczsKICAgICAgICBfX3U4IHRjcGlfc25kX3dzY2FsZSA6IDQsIHRjcGlfcmN2X3dzY2Fs ZSA6IDQ7CgogICAgICAgIF9fdTMyIHRjcGlfcnRvOwogICAgICAgIF9fdTMyIHRjcGlfYXRvOwog ICAgICAgIF9fdTMyIHRjcGlfc25kX21zczsKICAgICAgICBfX3UzMiB0Y3BpX3Jjdl9tc3M7Cgog ICAgICAgIF9fdTMyIHRjcGlfdW5hY2tlZDsKICAgICAgICBfX3UzMiB0Y3BpX3NhY2tlZDsKICAg ICAgICBfX3UzMiB0Y3BpX2xvc3Q7CiAgICAgICAgX191MzIgdGNwaV9yZXRyYW5zOwogICAgICAg IF9fdTMyIHRjcGlfZmFja2V0czsKCgogICAgICAgIF9fdTMyIHRjcGlfbGFzdF9kYXRhX3NlbnQ7 CiAgICAgICAgX191MzIgdGNwaV9sYXN0X2Fja19zZW50OwogICAgICAgIF9fdTMyIHRjcGlfbGFz dF9kYXRhX3JlY3Y7CiAgICAgICAgX191MzIgdGNwaV9sYXN0X2Fja19yZWN2OwoKCiAgICAgICAg X191MzIgdGNwaV9wbXR1OwogICAgICAgIF9fdTMyIHRjcGlfcmN2X3NzdGhyZXNoOwogICAgICAg IF9fdTMyIHRjcGlfcnR0OwogICAgICAgIF9fdTMyIHRjcGlfcnR0dmFyOwogICAgICAgIF9fdTMy IHRjcGlfc25kX3NzdGhyZXNoOwogICAgICAgIF9fdTMyIHRjcGlfc25kX2N3bmQ7CiAgICAgICAg X191MzIgdGNwaV9hZHZtc3M7CiAgICAgICAgX191MzIgdGNwaV9yZW9yZGVyaW5nOwp9OwojIDUy ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL25ldC9zb2NrLmgiIDIKCgoKIyAxICIv dXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL25ldC9wcm90b2NvbC5oIiAxCiMgMzcgIi91 c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbmV0L3Byb3RvY29sLmgiCnN0cnVjdCBpbmV0 X3Byb3RvY29sCnsKICAgICAgICBpbnQgKCpoYW5kbGVyKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsK ICAgICAgICB2b2lkICgqZXJyX2hhbmRsZXIpKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBpbmZv KTsKICAgICAgICBzdHJ1Y3QgaW5ldF9wcm90b2NvbCAqbmV4dDsKICAgICAgICB1bnNpZ25lZCBj aGFyIHByb3RvY29sOwogICAgICAgIHVuc2lnbmVkIGNoYXIgY29weToxOwogICAgICAgIHZvaWQg KmRhdGE7CiAgICAgICAgY29uc3QgY2hhciAqbmFtZTsKfTsKCgpzdHJ1Y3QgaW5ldDZfcHJvdG9j b2wKewogICAgICAgIGludCAoKmhhbmRsZXIpKHN0cnVjdCBza19idWZmICpza2IpOwoKICAgICAg ICB2b2lkICgqZXJyX2hhbmRsZXIpKHN0cnVjdCBza19idWZmICpza2IsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCB0eXBlLCBpbnQgY29kZSwgaW50IG9mZnNldCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fdTMyIGluZm8pOwogICAgICAgIHN0cnVjdCBpbmV0 Nl9wcm90b2NvbCAqbmV4dDsKICAgICAgICB1bnNpZ25lZCBjaGFyIHByb3RvY29sOwogICAgICAg IHVuc2lnbmVkIGNoYXIgY29weToxOwogICAgICAgIHZvaWQgKmRhdGE7CiAgICAgICAgY29uc3Qg Y2hhciAqbmFtZTsKfTsKCgoKCnN0cnVjdCBpbmV0X3Byb3Rvc3cgewogICAgICAgIHN0cnVjdCBs aXN0X2hlYWQgbGlzdDsKCgogICAgICAgIHVuc2lnbmVkIHNob3J0IHR5cGU7CiAgICAgICAgaW50 IHByb3RvY29sOwoKICAgICAgICBzdHJ1Y3QgcHJvdG8gKnByb3Q7CiAgICAgICAgc3RydWN0IHBy b3RvX29wcyAqb3BzOwoKICAgICAgICBpbnQgY2FwYWJpbGl0eTsKCgoKICAgICAgICBjaGFyIG5v X2NoZWNrOwogICAgICAgIHVuc2lnbmVkIGNoYXIgZmxhZ3M7Cn07CgoKCmV4dGVybiBzdHJ1Y3Qg aW5ldF9wcm90b2NvbCAqaW5ldF9wcm90b2NvbF9iYXNlOwpleHRlcm4gc3RydWN0IGluZXRfcHJv dG9jb2wgKmluZXRfcHJvdG9zWzMyXTsKZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgaW5ldHN3Wygx MCArMSldOwoKCmV4dGVybiBzdHJ1Y3QgaW5ldDZfcHJvdG9jb2wgKmluZXQ2X3Byb3Rvc1szMl07 CmV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGluZXRzdzZbKDEwICsxKV07CgoKZXh0ZXJuIHZvaWQg aW5ldF9hZGRfcHJvdG9jb2xfUjdkNWRkYjU0KHN0cnVjdCBpbmV0X3Byb3RvY29sICpwcm90KTsK ZXh0ZXJuIGludCBpbmV0X2RlbF9wcm90b2NvbF9SOTAwNDE3MDAoc3RydWN0IGluZXRfcHJvdG9j b2wgKnByb3QpOwpleHRlcm4gdm9pZCBpbmV0X3JlZ2lzdGVyX3Byb3Rvc3dfUmY1MDRlNjQ3KHN0 cnVjdCBpbmV0X3Byb3Rvc3cgKnApOwpleHRlcm4gdm9pZCBpbmV0X3VucmVnaXN0ZXJfcHJvdG9z d19SN2YwMzU1OWUoc3RydWN0IGluZXRfcHJvdG9zdyAqcCk7CgoKZXh0ZXJuIHZvaWQgaW5ldDZf YWRkX3Byb3RvY29sKHN0cnVjdCBpbmV0Nl9wcm90b2NvbCAqcHJvdCk7CmV4dGVybiBpbnQgaW5l dDZfZGVsX3Byb3RvY29sKHN0cnVjdCBpbmV0Nl9wcm90b2NvbCAqcHJvdCk7CmV4dGVybiB2b2lk IGluZXQ2X3JlZ2lzdGVyX3Byb3Rvc3coc3RydWN0IGluZXRfcHJvdG9zdyAqcCk7CmV4dGVybiB2 b2lkIGluZXQ2X3VucmVnaXN0ZXJfcHJvdG9zdyhzdHJ1Y3QgaW5ldF9wcm90b3N3ICpwKTsKIyA1 NiAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9uZXQvc29jay5oIiAyCgoKCgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvaWZfd2FucGlwZS5oIiAxCiMg MjEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvaWZfd2FucGlwZS5oIgpz dHJ1Y3Qgd2FuX3NvY2thZGRyX2xsCnsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzbGxfZmFtaWx5 OwogICAgICAgIHVuc2lnbmVkIHNob3J0IHNsbF9wcm90b2NvbDsKICAgICAgICBpbnQgc2xsX2lm aW5kZXg7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc2xsX2hhdHlwZTsKICAgICAgICB1bnNpZ25l ZCBjaGFyIHNsbF9wa3R0eXBlOwogICAgICAgIHVuc2lnbmVkIGNoYXIgc2xsX2hhbGVuOwogICAg ICAgIHVuc2lnbmVkIGNoYXIgc2xsX2FkZHJbOF07CiAgICAgICAgdW5zaWduZWQgY2hhciBzbGxf ZGV2aWNlWzE0XTsKICAgICAgICB1bnNpZ25lZCBjaGFyIHNsbF9jYXJkWzE0XTsKfTsKCnR5cGVk ZWYgc3RydWN0CnsKICAgICAgICB1bnNpZ25lZCBjaGFyIGZyZWU7CiAgICAgICAgdW5zaWduZWQg Y2hhciBza19zdGF0ZTsKICAgICAgICBpbnQgcmN2YnVmOwogICAgICAgIGludCBzbmRidWY7CiAg ICAgICAgaW50IHJtZW07CiAgICAgICAgaW50IHdtZW07CiAgICAgICAgaW50IHNrX2NvdW50Owog ICAgICAgIHVuc2lnbmVkIGNoYXIgYm91bmQ7CiAgICAgICAgY2hhciBuYW1lWzE0XTsKICAgICAg ICB1bnNpZ25lZCBjaGFyIGRfc3RhdGU7CiAgICAgICAgdW5zaWduZWQgY2hhciBzdmM7CiAgICAg ICAgdW5zaWduZWQgc2hvcnQgbGNuOwogICAgICAgIHVuc2lnbmVkIGNoYXIgbWJveDsKICAgICAg ICB1bnNpZ25lZCBjaGFyIGNtZF9idXN5OwogICAgICAgIHVuc2lnbmVkIGNoYXIgY29tbWFuZDsK ICAgICAgICB1bnNpZ25lZCBwb2xsOwogICAgICAgIHVuc2lnbmVkIHBvbGxfY250OwogICAgICAg IGludCByYmxvY2s7Cn0gd2FuX2RlYnVnX2hkcl90OwoKCgoKCnR5cGVkZWYgc3RydWN0CnsKICAg ICAgICB3YW5fZGVidWdfaGRyX3QgZGVidWdbMTBdOwp9d2FuX2RlYnVnX3Q7CiMgMTA0ICIvdXNy L3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2lmX3dhbnBpcGUuaCIKIyAxICIvdXNy L3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L3ZlcnNpb24uaCIgMQojIDEwNSAiL3Vz ci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9pZl93YW5waXBlLmgiIDIKIyAxMTMg Ii91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvaWZfd2FucGlwZS5oIgpzdHJ1 Y3Qgd2FucGlwZV9vcHQKewogICAgICAgIHZvaWQgKm1ib3g7CiAgICAgICAgdm9pZCAqY2FyZDsK ICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogICAgICAgIHVuc2lnbmVkIHNob3J0IGxj bjsKICAgICAgICB1bnNpZ25lZCBjaGFyIHN2YzsKICAgICAgICB1bnNpZ25lZCBjaGFyIHRpbWVy OwogICAgICAgIHN0cnVjdCB0aW1lcl9saXN0IHR4X3RpbWVyOwogICAgICAgIHVuc2lnbmVkIHBv bGxfY250OwogICAgICAgIHVuc2lnbmVkIGNoYXIgZm9yY2U7CiAgICAgICAgYXRvbWljX3QgcGFj a2V0X3NlbnQ7Cn07CiMgNjEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbmV0L3Nv Y2suaCIgMgoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbmV0L2F4MjUu aCIgMQojIDEwICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL25ldC9heDI1LmgiCiMg MSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9heDI1LmgiIDEKIyA0MyAi L3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9heDI1LmgiCnR5cGVkZWYgc3Ry dWN0IHsKICAgICAgICBjaGFyIGF4MjVfY2FsbFs3XTsKfSBheDI1X2FkZHJlc3M7CgpzdHJ1Y3Qg c29ja2FkZHJfYXgyNSB7CiAgICAgICAgc2FfZmFtaWx5X3Qgc2F4MjVfZmFtaWx5OwogICAgICAg IGF4MjVfYWRkcmVzcyBzYXgyNV9jYWxsOwogICAgICAgIGludCBzYXgyNV9uZGlnaXM7Cgp9OwoK CgpzdHJ1Y3QgZnVsbF9zb2NrYWRkcl9heDI1IHsKICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfYXgy NSBmc2FfYXgyNTsKICAgICAgICBheDI1X2FkZHJlc3MgZnNhX2RpZ2lwZWF0ZXJbOF07Cn07Cgpz dHJ1Y3QgYXgyNV9yb3V0ZXNfc3RydWN0IHsKICAgICAgICBheDI1X2FkZHJlc3MgcG9ydF9hZGRy OwogICAgICAgIGF4MjVfYWRkcmVzcyBkZXN0X2FkZHI7CiAgICAgICAgdW5zaWduZWQgY2hhciBk aWdpX2NvdW50OwogICAgICAgIGF4MjVfYWRkcmVzcyBkaWdpX2FkZHJbOF07Cn07CgpzdHJ1Y3Qg YXgyNV9yb3V0ZV9vcHRfc3RydWN0IHsKICAgICAgICBheDI1X2FkZHJlc3MgcG9ydF9hZGRyOwog ICAgICAgIGF4MjVfYWRkcmVzcyBkZXN0X2FkZHI7CiAgICAgICAgaW50IGNtZDsKICAgICAgICBp bnQgYXJnOwp9OwoKc3RydWN0IGF4MjVfY3RsX3N0cnVjdCB7CiAgICAgICAgYXgyNV9hZGRyZXNz IHBvcnRfYWRkcjsKICAgICAgICBheDI1X2FkZHJlc3Mgc291cmNlX2FkZHI7CiAgICAgICAgYXgy NV9hZGRyZXNzIGRlc3RfYWRkcjsKICAgICAgICB1bnNpZ25lZCBpbnQgY21kOwogICAgICAgIHVu c2lnbmVkIGxvbmcgYXJnOwogICAgICAgIHVuc2lnbmVkIGNoYXIgZGlnaV9jb3VudDsKICAgICAg ICBheDI1X2FkZHJlc3MgZGlnaV9hZGRyWzhdOwp9OwoKCnN0cnVjdCBheDI1X2luZm9fc3RydWN0 X2RlcHJlY2lhdGVkIHsKICAgICAgICB1bnNpZ25lZCBpbnQgbjIsIG4yY291bnQ7CiAgICAgICAg dW5zaWduZWQgaW50IHQxLCB0MXRpbWVyOwogICAgICAgIHVuc2lnbmVkIGludCB0MiwgdDJ0aW1l cjsKICAgICAgICB1bnNpZ25lZCBpbnQgdDMsIHQzdGltZXI7CiAgICAgICAgdW5zaWduZWQgaW50 IGlkbGUsIGlkbGV0aW1lcjsKICAgICAgICB1bnNpZ25lZCBpbnQgc3RhdGU7CiAgICAgICAgdW5z aWduZWQgaW50IHJjdl9xLCBzbmRfcTsKfTsKCnN0cnVjdCBheDI1X2luZm9fc3RydWN0IHsKICAg ICAgICB1bnNpZ25lZCBpbnQgbjIsIG4yY291bnQ7CiAgICAgICAgdW5zaWduZWQgaW50IHQxLCB0 MXRpbWVyOwogICAgICAgIHVuc2lnbmVkIGludCB0MiwgdDJ0aW1lcjsKICAgICAgICB1bnNpZ25l ZCBpbnQgdDMsIHQzdGltZXI7CiAgICAgICAgdW5zaWduZWQgaW50IGlkbGUsIGlkbGV0aW1lcjsK ICAgICAgICB1bnNpZ25lZCBpbnQgc3RhdGU7CiAgICAgICAgdW5zaWduZWQgaW50IHJjdl9xLCBz bmRfcTsKICAgICAgICB1bnNpZ25lZCBpbnQgdnMsIHZyLCB2YSwgdnNfbWF4OwogICAgICAgIHVu c2lnbmVkIGludCBwYWNsZW47CiAgICAgICAgdW5zaWduZWQgaW50IHdpbmRvdzsKfTsKCnN0cnVj dCBheDI1X2Z3ZF9zdHJ1Y3QgewogICAgICAgIGF4MjVfYWRkcmVzcyBwb3J0X2Zyb207CiAgICAg ICAgYXgyNV9hZGRyZXNzIHBvcnRfdG87Cn07CiMgMTEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04 L2luY2x1ZGUvbmV0L2F4MjUuaCIgMgojIDg0ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNs dWRlL25ldC9heDI1LmgiCmVudW0gewogICAgICAgIEFYMjVfU1RBVEVfMCwKICAgICAgICBBWDI1 X1NUQVRFXzEsCiAgICAgICAgQVgyNV9TVEFURV8yLAogICAgICAgIEFYMjVfU1RBVEVfMywKICAg ICAgICBBWDI1X1NUQVRFXzQKfTsKCgoKCmVudW0gewogICAgICAgIEFYMjVfUFJPVE9fU1REX1NJ TVBMRVgsCiAgICAgICAgQVgyNV9QUk9UT19TVERfRFVQTEVYLAogICAgICAgIEFYMjVfUFJPVE9f REFNQV9TTEFWRSwKICAgICAgICBBWDI1X1BST1RPX0RBTUFfTUFTVEVSCn07CgplbnVtIHsKICAg ICAgICBBWDI1X1ZBTFVFU19JUERFRk1PREUsCiAgICAgICAgQVgyNV9WQUxVRVNfQVhERUZNT0RF LAogICAgICAgIEFYMjVfVkFMVUVTX0JBQ0tPRkYsCiAgICAgICAgQVgyNV9WQUxVRVNfQ09OTU9E RSwKICAgICAgICBBWDI1X1ZBTFVFU19XSU5ET1csCiAgICAgICAgQVgyNV9WQUxVRVNfRVdJTkRP VywKICAgICAgICBBWDI1X1ZBTFVFU19UMSwKICAgICAgICBBWDI1X1ZBTFVFU19UMiwKICAgICAg ICBBWDI1X1ZBTFVFU19UMywKICAgICAgICBBWDI1X1ZBTFVFU19JRExFLAogICAgICAgIEFYMjVf VkFMVUVTX04yLAogICAgICAgIEFYMjVfVkFMVUVTX1BBQ0xFTiwKICAgICAgICBBWDI1X1ZBTFVF U19QUk9UT0NPTCwKICAgICAgICBBWDI1X1ZBTFVFU19EU19USU1FT1VULAogICAgICAgIEFYMjVf TUFYX1ZBTFVFUwp9OwojIDEzNSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9uZXQv YXgyNS5oIgp0eXBlZGVmIHN0cnVjdCBheDI1X3VpZF9hc3NvYyB7CiAgICAgICAgc3RydWN0IGF4 MjVfdWlkX2Fzc29jICpuZXh0OwogICAgICAgIHVpZF90IHVpZDsKICAgICAgICBheDI1X2FkZHJl c3MgY2FsbDsKfSBheDI1X3VpZF9hc3NvYzsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBheDI1 X2FkZHJlc3MgY2FsbHNbOF07CiAgICAgICAgdW5zaWduZWQgY2hhciByZXBlYXRlZFs4XTsKICAg ICAgICB1bnNpZ25lZCBjaGFyIG5kaWdpOwogICAgICAgIGNoYXIgbGFzdHJlcGVhdDsKfSBheDI1 X2RpZ2k7Cgp0eXBlZGVmIHN0cnVjdCBheDI1X3JvdXRlIHsKICAgICAgICBzdHJ1Y3QgYXgyNV9y b3V0ZSAqbmV4dDsKICAgICAgICBheDI1X2FkZHJlc3MgY2FsbHNpZ247CiAgICAgICAgc3RydWN0 IG5ldF9kZXZpY2UgKmRldjsKICAgICAgICBheDI1X2RpZ2kgKmRpZ2lwZWF0OwogICAgICAgIGNo YXIgaXBfbW9kZTsKfSBheDI1X3JvdXRlOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIGNoYXIg c2xhdmU7CiAgICAgICAgc3RydWN0IHRpbWVyX2xpc3Qgc2xhdmVfdGltZXI7CiAgICAgICAgdW5z aWduZWQgc2hvcnQgc2xhdmVfdGltZW91dDsKfSBheDI1X2RhbWFfaW5mbzsKCnN0cnVjdCBjdGxf dGFibGU7Cgp0eXBlZGVmIHN0cnVjdCBheDI1X2RldiB7CiAgICAgICAgc3RydWN0IGF4MjVfZGV2 ICpuZXh0OwogICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAgICAgICAgc3RydWN0IG5l dF9kZXZpY2UgKmZvcndhcmQ7CiAgICAgICAgc3RydWN0IGN0bF90YWJsZSAqc3lzdGFibGU7CiAg ICAgICAgaW50IHZhbHVlc1tBWDI1X01BWF9WQUxVRVNdOwoKCgp9IGF4MjVfZGV2OwoKdHlwZWRl ZiBzdHJ1Y3QgYXgyNV9jYiB7CiAgICAgICAgc3RydWN0IGF4MjVfY2IgKm5leHQ7CiAgICAgICAg YXgyNV9hZGRyZXNzIHNvdXJjZV9hZGRyLCBkZXN0X2FkZHI7CiAgICAgICAgYXgyNV9kaWdpICpk aWdpcGVhdDsKICAgICAgICBheDI1X2RldiAqYXgyNV9kZXY7CiAgICAgICAgdW5zaWduZWQgY2hh ciBpYW1kaWdpOwogICAgICAgIHVuc2lnbmVkIGNoYXIgc3RhdGUsIG1vZHVsdXMsIHBpZGluY2w7 CiAgICAgICAgdW5zaWduZWQgc2hvcnQgdnMsIHZyLCB2YTsKICAgICAgICB1bnNpZ25lZCBjaGFy IGNvbmRpdGlvbiwgYmFja29mZjsKICAgICAgICB1bnNpZ25lZCBjaGFyIG4yLCBuMmNvdW50Owog ICAgICAgIHN0cnVjdCB0aW1lcl9saXN0IHQxdGltZXIsIHQydGltZXIsIHQzdGltZXIsIGlkbGV0 aW1lcjsKICAgICAgICB1bnNpZ25lZCBsb25nIHQxLCB0MiwgdDMsIGlkbGUsIHJ0dDsKICAgICAg ICB1bnNpZ25lZCBzaG9ydCBwYWNsZW4sIGZyYWdubywgZnJhZ2xlbjsKICAgICAgICBzdHJ1Y3Qg c2tfYnVmZl9oZWFkIHdyaXRlX3F1ZXVlOwogICAgICAgIHN0cnVjdCBza19idWZmX2hlYWQgcmVz ZXFfcXVldWU7CiAgICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCBhY2tfcXVldWU7CiAgICAgICAg c3RydWN0IHNrX2J1ZmZfaGVhZCBmcmFnX3F1ZXVlOwogICAgICAgIHVuc2lnbmVkIGNoYXIgd2lu ZG93OwogICAgICAgIHN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwogICAgICAgIHN0cnVjdCBzb2Nr ICpzazsKfSBheDI1X2NiOwoKCmV4dGVybiBheDI1X2NiICp2b2xhdGlsZSBheDI1X2xpc3Q7CmV4 dGVybiB2b2lkIGF4MjVfZnJlZV9jYihheDI1X2NiICopOwpleHRlcm4gdm9pZCBheDI1X2luc2Vy dF9zb2NrZXQoYXgyNV9jYiAqKTsKc3RydWN0IHNvY2sgKmF4MjVfZmluZF9saXN0ZW5lcihheDI1 X2FkZHJlc3MgKiwgaW50LCBzdHJ1Y3QgbmV0X2RldmljZSAqLCBpbnQpOwpzdHJ1Y3Qgc29jayAq YXgyNV9maW5kX3NvY2tldChheDI1X2FkZHJlc3MgKiwgYXgyNV9hZGRyZXNzICosIGludCk7CmV4 dGVybiBheDI1X2NiICpheDI1X2ZpbmRfY2JfUmJjNjRjODI4KGF4MjVfYWRkcmVzcyAqLCBheDI1 X2FkZHJlc3MgKiwgYXgyNV9kaWdpICosIHN0cnVjdCBuZXRfZGV2aWNlICopOwpleHRlcm4gc3Ry dWN0IHNvY2sgKmF4MjVfYWRkcl9tYXRjaChheDI1X2FkZHJlc3MgKik7CmV4dGVybiB2b2lkIGF4 MjVfc2VuZF90b19yYXcoc3RydWN0IHNvY2sgKiwgc3RydWN0IHNrX2J1ZmYgKiwgaW50KTsKZXh0 ZXJuIHZvaWQgYXgyNV9kZXN0cm95X3NvY2tldChheDI1X2NiICopOwpleHRlcm4gYXgyNV9jYiAq YXgyNV9jcmVhdGVfY2Iodm9pZCk7CmV4dGVybiB2b2lkIGF4MjVfZmlsbGluX2NiKGF4MjVfY2Ig KiwgYXgyNV9kZXYgKik7CmV4dGVybiBpbnQgYXgyNV9jcmVhdGUoc3RydWN0IHNvY2tldCAqLCBp bnQpOwpleHRlcm4gc3RydWN0IHNvY2sgKmF4MjVfbWFrZV9uZXcoc3RydWN0IHNvY2sgKiwgc3Ry dWN0IGF4MjVfZGV2ICopOwoKCmV4dGVybiBheDI1X2FkZHJlc3MgbnVsbF9heDI1X2FkZHJlc3Nf UjQzNjIxZTE4OwpleHRlcm4gY2hhciAqYXgyYXNjX1I5NzEyMzYwOChheDI1X2FkZHJlc3MgKik7 CmV4dGVybiBheDI1X2FkZHJlc3MgKmFzYzJheF9SNzllNzliMTYoY2hhciAqKTsKZXh0ZXJuIGlu dCBheDI1Y21wX1I1YjVmZWY0MShheDI1X2FkZHJlc3MgKiwgYXgyNV9hZGRyZXNzICopOwpleHRl cm4gaW50IGF4MjVkaWdpY21wKGF4MjVfZGlnaSAqLCBheDI1X2RpZ2kgKik7CmV4dGVybiB1bnNp Z25lZCBjaGFyICpheDI1X2FkZHJfcGFyc2UodW5zaWduZWQgY2hhciAqLCBpbnQsIGF4MjVfYWRk cmVzcyAqLCBheDI1X2FkZHJlc3MgKiwgYXgyNV9kaWdpICosIGludCAqLCBpbnQgKik7CmV4dGVy biBpbnQgYXgyNV9hZGRyX2J1aWxkKHVuc2lnbmVkIGNoYXIgKiwgYXgyNV9hZGRyZXNzICosIGF4 MjVfYWRkcmVzcyAqLCBheDI1X2RpZ2kgKiwgaW50LCBpbnQpOwpleHRlcm4gaW50IGF4MjVfYWRk cl9zaXplKGF4MjVfZGlnaSAqKTsKZXh0ZXJuIHZvaWQgYXgyNV9kaWdpX2ludmVydChheDI1X2Rp Z2kgKiwgYXgyNV9kaWdpICopOwoKCmV4dGVybiBheDI1X2RldiAqYXgyNV9kZXZfbGlzdDsKZXh0 ZXJuIGF4MjVfZGV2ICpheDI1X2Rldl9heDI1ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICopOwpleHRl cm4gYXgyNV9kZXYgKmF4MjVfYWRkcl9heDI1ZGV2KGF4MjVfYWRkcmVzcyAqKTsKZXh0ZXJuIHZv aWQgYXgyNV9kZXZfZGV2aWNlX3VwKHN0cnVjdCBuZXRfZGV2aWNlICopOwpleHRlcm4gdm9pZCBh eDI1X2Rldl9kZXZpY2VfZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqKTsKZXh0ZXJuIGludCBheDI1 X2Z3ZF9pb2N0bCh1bnNpZ25lZCBpbnQsIHN0cnVjdCBheDI1X2Z3ZF9zdHJ1Y3QgKik7CmV4dGVy biBzdHJ1Y3QgbmV0X2RldmljZSAqYXgyNV9md2RfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICopOwpl eHRlcm4gdm9pZCBheDI1X2Rldl9mcmVlKHZvaWQpOwoKCmV4dGVybiBpbnQgYXgyNV9kc19mcmFt ZV9pbihheDI1X2NiICosIHN0cnVjdCBza19idWZmICosIGludCk7CgoKZXh0ZXJuIHZvaWQgYXgy NV9kc19ucl9lcnJvcl9yZWNvdmVyeShheDI1X2NiICopOwpleHRlcm4gdm9pZCBheDI1X2RzX2Vu cXVpcnlfcmVzcG9uc2UoYXgyNV9jYiAqKTsKZXh0ZXJuIHZvaWQgYXgyNV9kc19lc3RhYmxpc2hf ZGF0YV9saW5rKGF4MjVfY2IgKik7CmV4dGVybiB2b2lkIGF4MjVfZGV2X2RhbWFfb24oYXgyNV9k ZXYgKik7CmV4dGVybiB2b2lkIGF4MjVfZGV2X2RhbWFfb2ZmKGF4MjVfZGV2ICopOwpleHRlcm4g dm9pZCBheDI1X2RhbWFfb24oYXgyNV9jYiAqKTsKZXh0ZXJuIHZvaWQgYXgyNV9kYW1hX29mZihh eDI1X2NiICopOwoKCmV4dGVybiB2b2lkIGF4MjVfZHNfc2V0X3RpbWVyKGF4MjVfZGV2ICopOwpl eHRlcm4gdm9pZCBheDI1X2RzX2RlbF90aW1lcihheDI1X2RldiAqKTsKZXh0ZXJuIHZvaWQgYXgy NV9kc190aW1lcihheDI1X2NiICopOwpleHRlcm4gdm9pZCBheDI1X2RzX3QxX3RpbWVvdXQoYXgy NV9jYiAqKTsKZXh0ZXJuIHZvaWQgYXgyNV9kc19oZWFydGJlYXRfZXhwaXJ5KGF4MjVfY2IgKik7 CmV4dGVybiB2b2lkIGF4MjVfZHNfdDN0aW1lcl9leHBpcnkoYXgyNV9jYiAqKTsKZXh0ZXJuIHZv aWQgYXgyNV9kc19pZGxldGltZXJfZXhwaXJ5KGF4MjVfY2IgKik7CgoKZXh0ZXJuIGludCBheDI1 X3Byb3RvY29sX3JlZ2lzdGVyX1I3ZWZiZDU4MSh1bnNpZ25lZCBpbnQsIGludCAoKikoc3RydWN0 IHNrX2J1ZmYgKiwgYXgyNV9jYiAqKSk7CmV4dGVybiB2b2lkIGF4MjVfcHJvdG9jb2xfcmVsZWFz ZV9SOGVkZTllMjYodW5zaWduZWQgaW50KTsKZXh0ZXJuIGludCBheDI1X2xpbmtmYWlsX3JlZ2lz dGVyX1JjNjljNDM1MSh2b2lkICgqKShheDI1X2NiICosIGludCkpOwpleHRlcm4gdm9pZCBheDI1 X2xpbmtmYWlsX3JlbGVhc2VfUjg5ODlhMmNjKHZvaWQgKCopKGF4MjVfY2IgKiwgaW50KSk7CmV4 dGVybiBpbnQgYXgyNV9saXN0ZW5fcmVnaXN0ZXJfUjU4ZTE0MzIzKGF4MjVfYWRkcmVzcyAqLCBz dHJ1Y3QgbmV0X2RldmljZSAqKTsKZXh0ZXJuIHZvaWQgYXgyNV9saXN0ZW5fcmVsZWFzZV9SNGRh YmJhNDIoYXgyNV9hZGRyZXNzICosIHN0cnVjdCBuZXRfZGV2aWNlICopOwpleHRlcm4gaW50ICgq YXgyNV9wcm90b2NvbF9mdW5jdGlvbih1bnNpZ25lZCBpbnQpKShzdHJ1Y3Qgc2tfYnVmZiAqLCBh eDI1X2NiICopOwpleHRlcm4gaW50IGF4MjVfbGlzdGVuX21pbmUoYXgyNV9hZGRyZXNzICosIHN0 cnVjdCBuZXRfZGV2aWNlICopOwpleHRlcm4gdm9pZCBheDI1X2xpbmtfZmFpbGVkKGF4MjVfY2Ig KiwgaW50KTsKZXh0ZXJuIGludCBheDI1X3Byb3RvY29sX2lzX3JlZ2lzdGVyZWQodW5zaWduZWQg aW50KTsKCgpleHRlcm4gaW50IGF4MjVfcnhfaWZyYW1lKGF4MjVfY2IgKiwgc3RydWN0IHNrX2J1 ZmYgKik7CmV4dGVybiBpbnQgYXgyNV9raXNzX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3Qg bmV0X2RldmljZSAqLCBzdHJ1Y3QgcGFja2V0X3R5cGUgKik7CgoKZXh0ZXJuIGludCBheDI1X2Vu Y2Fwc3VsYXRlX1JhMzRjZjhiMShzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgbmV0X2RldmljZSAq LCB1bnNpZ25lZCBzaG9ydCwgdm9pZCAqLCB2b2lkICosIHVuc2lnbmVkIGludCk7CmV4dGVybiBp bnQgYXgyNV9yZWJ1aWxkX2hlYWRlcl9SMDZhM2QzYmEoc3RydWN0IHNrX2J1ZmYgKik7CgoKZXh0 ZXJuIGF4MjVfY2IgKmF4MjVfc2VuZF9mcmFtZV9SMGQ1ODcwMDEoc3RydWN0IHNrX2J1ZmYgKiwg aW50LCBheDI1X2FkZHJlc3MgKiwgYXgyNV9hZGRyZXNzICosIGF4MjVfZGlnaSAqLCBzdHJ1Y3Qg bmV0X2RldmljZSAqKTsKZXh0ZXJuIHZvaWQgYXgyNV9vdXRwdXQoYXgyNV9jYiAqLCBpbnQsIHN0 cnVjdCBza19idWZmICopOwpleHRlcm4gdm9pZCBheDI1X2tpY2soYXgyNV9jYiAqKTsKZXh0ZXJu IHZvaWQgYXgyNV90cmFuc21pdF9idWZmZXIoYXgyNV9jYiAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBp bnQpOwpleHRlcm4gdm9pZCBheDI1X3F1ZXVlX3htaXQoc3RydWN0IHNrX2J1ZmYgKik7CmV4dGVy biBpbnQgYXgyNV9jaGVja19pZnJhbWVzX2Fja2VkKGF4MjVfY2IgKiwgdW5zaWduZWQgc2hvcnQp OwoKCmV4dGVybiB2b2lkIGF4MjVfcnRfZGV2aWNlX2Rvd24oc3RydWN0IG5ldF9kZXZpY2UgKik7 CmV4dGVybiBpbnQgYXgyNV9ydF9pb2N0bCh1bnNpZ25lZCBpbnQsIHZvaWQgKik7CmV4dGVybiBp bnQgYXgyNV9ydF9nZXRfaW5mbyhjaGFyICosIGNoYXIgKiosIG9mZl90LCBpbnQpOwpleHRlcm4g aW50IGF4MjVfcnRfYXV0b2JpbmQoYXgyNV9jYiAqLCBheDI1X2FkZHJlc3MgKik7CmV4dGVybiBh eDI1X3JvdXRlICpheDI1X3J0X2ZpbmRfcm91dGUoYXgyNV9hZGRyZXNzICosIHN0cnVjdCBuZXRf ZGV2aWNlICopOwpleHRlcm4gc3RydWN0IHNrX2J1ZmYgKmF4MjVfcnRfYnVpbGRfcGF0aChzdHJ1 Y3Qgc2tfYnVmZiAqLCBheDI1X2FkZHJlc3MgKiwgYXgyNV9hZGRyZXNzICosIGF4MjVfZGlnaSAq KTsKZXh0ZXJuIHZvaWQgYXgyNV9ydF9mcmVlKHZvaWQpOwoKCmV4dGVybiBpbnQgYXgyNV9zdGRf ZnJhbWVfaW4oYXgyNV9jYiAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBpbnQpOwoKCmV4dGVybiB2b2lk IGF4MjVfc3RkX25yX2Vycm9yX3JlY292ZXJ5KGF4MjVfY2IgKik7CmV4dGVybiB2b2lkIGF4MjVf c3RkX2VzdGFibGlzaF9kYXRhX2xpbmsoYXgyNV9jYiAqKTsKZXh0ZXJuIHZvaWQgYXgyNV9zdGRf dHJhbnNtaXRfZW5xdWlyeShheDI1X2NiICopOwpleHRlcm4gdm9pZCBheDI1X3N0ZF9lbnF1aXJ5 X3Jlc3BvbnNlKGF4MjVfY2IgKik7CmV4dGVybiB2b2lkIGF4MjVfc3RkX3RpbWVvdXRfcmVzcG9u c2UoYXgyNV9jYiAqKTsKCgpleHRlcm4gdm9pZCBheDI1X3N0ZF9oZWFydGJlYXRfZXhwaXJ5KGF4 MjVfY2IgKik7CmV4dGVybiB2b2lkIGF4MjVfc3RkX3QxdGltZXJfZXhwaXJ5KGF4MjVfY2IgKik7 CmV4dGVybiB2b2lkIGF4MjVfc3RkX3QydGltZXJfZXhwaXJ5KGF4MjVfY2IgKik7CmV4dGVybiB2 b2lkIGF4MjVfc3RkX3QzdGltZXJfZXhwaXJ5KGF4MjVfY2IgKik7CmV4dGVybiB2b2lkIGF4MjVf c3RkX2lkbGV0aW1lcl9leHBpcnkoYXgyNV9jYiAqKTsKCgpleHRlcm4gdm9pZCBheDI1X2NsZWFy X3F1ZXVlcyhheDI1X2NiICopOwpleHRlcm4gdm9pZCBheDI1X2ZyYW1lc19hY2tlZChheDI1X2Ni ICosIHVuc2lnbmVkIHNob3J0KTsKZXh0ZXJuIHZvaWQgYXgyNV9yZXF1ZXVlX2ZyYW1lcyhheDI1 X2NiICopOwpleHRlcm4gaW50IGF4MjVfdmFsaWRhdGVfbnIoYXgyNV9jYiAqLCB1bnNpZ25lZCBz aG9ydCk7CmV4dGVybiBpbnQgYXgyNV9kZWNvZGUoYXgyNV9jYiAqLCBzdHJ1Y3Qgc2tfYnVmZiAq LCBpbnQgKiwgaW50ICosIGludCAqKTsKZXh0ZXJuIHZvaWQgYXgyNV9zZW5kX2NvbnRyb2woYXgy NV9jYiAqLCBpbnQsIGludCwgaW50KTsKZXh0ZXJuIHZvaWQgYXgyNV9yZXR1cm5fZG0oc3RydWN0 IG5ldF9kZXZpY2UgKiwgYXgyNV9hZGRyZXNzICosIGF4MjVfYWRkcmVzcyAqLCBheDI1X2RpZ2kg Kik7CmV4dGVybiB2b2lkIGF4MjVfY2FsY3VsYXRlX3QxKGF4MjVfY2IgKik7CmV4dGVybiB2b2lk IGF4MjVfY2FsY3VsYXRlX3J0dChheDI1X2NiICopOwpleHRlcm4gdm9pZCBheDI1X2Rpc2Nvbm5l Y3QoYXgyNV9jYiAqLCBpbnQpOwoKCmV4dGVybiB2b2lkIGF4MjVfc3RhcnRfaGVhcnRiZWF0KGF4 MjVfY2IgKik7CmV4dGVybiB2b2lkIGF4MjVfc3RhcnRfdDF0aW1lcihheDI1X2NiICopOwpleHRl cm4gdm9pZCBheDI1X3N0YXJ0X3QydGltZXIoYXgyNV9jYiAqKTsKZXh0ZXJuIHZvaWQgYXgyNV9z dGFydF90M3RpbWVyKGF4MjVfY2IgKik7CmV4dGVybiB2b2lkIGF4MjVfc3RhcnRfaWRsZXRpbWVy KGF4MjVfY2IgKik7CmV4dGVybiB2b2lkIGF4MjVfc3RvcF9oZWFydGJlYXQoYXgyNV9jYiAqKTsK ZXh0ZXJuIHZvaWQgYXgyNV9zdG9wX3QxdGltZXIoYXgyNV9jYiAqKTsKZXh0ZXJuIHZvaWQgYXgy NV9zdG9wX3QydGltZXIoYXgyNV9jYiAqKTsKZXh0ZXJuIHZvaWQgYXgyNV9zdG9wX3QzdGltZXIo YXgyNV9jYiAqKTsKZXh0ZXJuIHZvaWQgYXgyNV9zdG9wX2lkbGV0aW1lcihheDI1X2NiICopOwpl eHRlcm4gaW50IGF4MjVfdDF0aW1lcl9ydW5uaW5nKGF4MjVfY2IgKik7CmV4dGVybiB1bnNpZ25l ZCBsb25nIGF4MjVfZGlzcGxheV90aW1lcl9SZTE5NjVlMzEoc3RydWN0IHRpbWVyX2xpc3QgKik7 CgoKZXh0ZXJuIGludCBheDI1X3VpZF9wb2xpY3lfUjI0Mjg1MmI5OwpleHRlcm4gYXgyNV9hZGRy ZXNzICpheDI1X2ZpbmRieXVpZF9SMzI3MWNlZTcodWlkX3QpOwpleHRlcm4gaW50IGF4MjVfdWlk X2lvY3RsKGludCwgc3RydWN0IHNvY2thZGRyX2F4MjUgKik7CmV4dGVybiBpbnQgYXgyNV91aWRf Z2V0X2luZm8oY2hhciAqLCBjaGFyICoqLCBvZmZfdCwgaW50KTsKZXh0ZXJuIHZvaWQgYXgyNV91 aWRfZnJlZSh2b2lkKTsKCgoKZXh0ZXJuIHZvaWQgYXgyNV9yZWdpc3Rlcl9zeXNjdGwodm9pZCk7 CmV4dGVybiB2b2lkIGF4MjVfdW5yZWdpc3Rlcl9zeXNjdGwodm9pZCk7CiMgNjUgIi91c3Ivc3Jj L2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbmV0L3NvY2suaCIgMgoKIyAxICIvdXNyL3NyYy9saW51 eC0yLjQuMjAtOC9pbmNsdWRlL25ldC9uZXRyb20uaCIgMQojIDkgIi91c3Ivc3JjL2xpbnV4LTIu NC4yMC04L2luY2x1ZGUvbmV0L25ldHJvbS5oIgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04 L2luY2x1ZGUvbGludXgvbmV0cm9tLmgiIDEKIyAyMCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgv aW5jbHVkZS9saW51eC9uZXRyb20uaCIKc3RydWN0IG5yX3JvdXRlX3N0cnVjdCB7CgoKICAgICAg ICBpbnQgdHlwZTsKICAgICAgICBheDI1X2FkZHJlc3MgY2FsbHNpZ247CiAgICAgICAgY2hhciBk ZXZpY2VbMTZdOwogICAgICAgIHVuc2lnbmVkIGludCBxdWFsaXR5OwogICAgICAgIGNoYXIgbW5l bW9uaWNbN107CiAgICAgICAgYXgyNV9hZGRyZXNzIG5laWdoYm91cjsKICAgICAgICB1bnNpZ25l ZCBpbnQgb2JzX2NvdW50OwogICAgICAgIHVuc2lnbmVkIGludCBuZGlnaXM7CiAgICAgICAgYXgy NV9hZGRyZXNzIGRpZ2lwZWF0ZXJzWzhdOwp9OwojIDEwICIvdXNyL3NyYy9saW51eC0yLjQuMjAt OC9pbmNsdWRlL25ldC9uZXRyb20uaCIgMgojIDI5ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9p bmNsdWRlL25ldC9uZXRyb20uaCIKZW51bSB7CiAgICAgICAgTlJfU1RBVEVfMCwKICAgICAgICBO Ul9TVEFURV8xLAogICAgICAgIE5SX1NUQVRFXzIsCiAgICAgICAgTlJfU1RBVEVfMwp9OwojIDU3 ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL25ldC9uZXRyb20uaCIKdHlwZWRlZiBz dHJ1Y3QgewogICAgICAgIGF4MjVfYWRkcmVzcyB1c2VyX2FkZHIsIHNvdXJjZV9hZGRyLCBkZXN0 X2FkZHI7CiAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldmljZTsKICAgICAgICB1bnNpZ25l ZCBjaGFyIG15X2luZGV4LCBteV9pZDsKICAgICAgICB1bnNpZ25lZCBjaGFyIHlvdXJfaW5kZXgs IHlvdXJfaWQ7CiAgICAgICAgdW5zaWduZWQgY2hhciBzdGF0ZSwgY29uZGl0aW9uLCBicHFleHQs IHdpbmRvdzsKICAgICAgICB1bnNpZ25lZCBzaG9ydCB2cywgdnIsIHZhLCB2bDsKICAgICAgICB1 bnNpZ25lZCBjaGFyIG4yLCBuMmNvdW50OwogICAgICAgIHVuc2lnbmVkIGxvbmcgdDEsIHQyLCB0 NCwgaWRsZTsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBmcmFnbGVuOwogICAgICAgIHN0cnVjdCB0 aW1lcl9saXN0IHQxdGltZXI7CiAgICAgICAgc3RydWN0IHRpbWVyX2xpc3QgdDJ0aW1lcjsKICAg ICAgICBzdHJ1Y3QgdGltZXJfbGlzdCB0NHRpbWVyOwogICAgICAgIHN0cnVjdCB0aW1lcl9saXN0 IGlkbGV0aW1lcjsKICAgICAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGFja19xdWV1ZTsKICAgICAg ICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHJlc2VxX3F1ZXVlOwogICAgICAgIHN0cnVjdCBza19idWZm X2hlYWQgZnJhZ19xdWV1ZTsKICAgICAgICBzdHJ1Y3Qgc29jayAqc2s7Cn0gbnJfY2I7CgpzdHJ1 Y3QgbnJfbmVpZ2ggewogICAgICAgIHN0cnVjdCBucl9uZWlnaCAqbmV4dDsKICAgICAgICBheDI1 X2FkZHJlc3MgY2FsbHNpZ247CiAgICAgICAgYXgyNV9kaWdpICpkaWdpcGVhdDsKICAgICAgICBh eDI1X2NiICpheDI1OwogICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAgICAgICAgdW5z aWduZWQgY2hhciBxdWFsaXR5OwogICAgICAgIHVuc2lnbmVkIGNoYXIgbG9ja2VkOwogICAgICAg IHVuc2lnbmVkIHNob3J0IGNvdW50OwogICAgICAgIHVuc2lnbmVkIGludCBudW1iZXI7CiAgICAg ICAgdW5zaWduZWQgY2hhciBmYWlsZWQ7Cn07CgpzdHJ1Y3QgbnJfcm91dGUgewogICAgICAgIHVu c2lnbmVkIGNoYXIgcXVhbGl0eTsKICAgICAgICB1bnNpZ25lZCBjaGFyIG9ic19jb3VudDsKICAg ICAgICBzdHJ1Y3QgbnJfbmVpZ2ggKm5laWdoYm91cjsKfTsKCnN0cnVjdCBucl9ub2RlIHsKICAg ICAgICBzdHJ1Y3QgbnJfbm9kZSAqbmV4dDsKICAgICAgICBheDI1X2FkZHJlc3MgY2FsbHNpZ247 CiAgICAgICAgY2hhciBtbmVtb25pY1s3XTsKICAgICAgICB1bnNpZ25lZCBjaGFyIHdoaWNoOwog ICAgICAgIHVuc2lnbmVkIGNoYXIgY291bnQ7CiAgICAgICAgc3RydWN0IG5yX3JvdXRlIHJvdXRl c1szXTsKfTsKCgpleHRlcm4gaW50IHN5c2N0bF9uZXRyb21fZGVmYXVsdF9wYXRoX3F1YWxpdHk7 CmV4dGVybiBpbnQgc3lzY3RsX25ldHJvbV9vYnNvbGVzY2VuY2VfY291bnRfaW5pdGlhbGlzZXI7 CmV4dGVybiBpbnQgc3lzY3RsX25ldHJvbV9uZXR3b3JrX3R0bF9pbml0aWFsaXNlcjsKZXh0ZXJu IGludCBzeXNjdGxfbmV0cm9tX3RyYW5zcG9ydF90aW1lb3V0OwpleHRlcm4gaW50IHN5c2N0bF9u ZXRyb21fdHJhbnNwb3J0X21heGltdW1fdHJpZXM7CmV4dGVybiBpbnQgc3lzY3RsX25ldHJvbV90 cmFuc3BvcnRfYWNrbm93bGVkZ2VfZGVsYXk7CmV4dGVybiBpbnQgc3lzY3RsX25ldHJvbV90cmFu c3BvcnRfYnVzeV9kZWxheTsKZXh0ZXJuIGludCBzeXNjdGxfbmV0cm9tX3RyYW5zcG9ydF9yZXF1 ZXN0ZWRfd2luZG93X3NpemU7CmV4dGVybiBpbnQgc3lzY3RsX25ldHJvbV90cmFuc3BvcnRfbm9f YWN0aXZpdHlfdGltZW91dDsKZXh0ZXJuIGludCBzeXNjdGxfbmV0cm9tX3JvdXRpbmdfY29udHJv bDsKZXh0ZXJuIGludCBzeXNjdGxfbmV0cm9tX2xpbmtfZmFpbHNfY291bnQ7CmV4dGVybiBpbnQg bnJfcnhfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5ldF9kZXZpY2UgKik7CmV4dGVy biB2b2lkIG5yX2Rlc3Ryb3lfc29ja2V0KHN0cnVjdCBzb2NrICopOwoKCmV4dGVybiBpbnQgbnJf cnhfaXAoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5ldF9kZXZpY2UgKik7CmV4dGVybiBpbnQg bnJfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqKTsKCgpleHRlcm4gaW50IG5yX3Byb2Nlc3Nfcnhf ZnJhbWUoc3RydWN0IHNvY2sgKiwgc3RydWN0IHNrX2J1ZmYgKik7CgoKZXh0ZXJuIHZvaWQgbnJf bG9vcGJhY2tfaW5pdCh2b2lkKTsKZXh0ZXJuIHZvaWQgbnJfbG9vcGJhY2tfY2xlYXIodm9pZCk7 CmV4dGVybiBpbnQgbnJfbG9vcGJhY2tfcXVldWUoc3RydWN0IHNrX2J1ZmYgKik7CgoKZXh0ZXJu IHZvaWQgbnJfb3V0cHV0KHN0cnVjdCBzb2NrICosIHN0cnVjdCBza19idWZmICopOwpleHRlcm4g dm9pZCBucl9zZW5kX25ha19mcmFtZShzdHJ1Y3Qgc29jayAqKTsKZXh0ZXJuIHZvaWQgbnJfa2lj ayhzdHJ1Y3Qgc29jayAqKTsKZXh0ZXJuIHZvaWQgbnJfdHJhbnNtaXRfYnVmZmVyKHN0cnVjdCBz b2NrICosIHN0cnVjdCBza19idWZmICopOwpleHRlcm4gdm9pZCBucl9lc3RhYmxpc2hfZGF0YV9s aW5rKHN0cnVjdCBzb2NrICopOwpleHRlcm4gdm9pZCBucl9lbnF1aXJ5X3Jlc3BvbnNlKHN0cnVj dCBzb2NrICopOwpleHRlcm4gdm9pZCBucl9jaGVja19pZnJhbWVzX2Fja2VkKHN0cnVjdCBzb2Nr ICosIHVuc2lnbmVkIHNob3J0KTsKCgpleHRlcm4gdm9pZCBucl9ydF9kZXZpY2VfZG93bihzdHJ1 Y3QgbmV0X2RldmljZSAqKTsKZXh0ZXJuIHN0cnVjdCBuZXRfZGV2aWNlICpucl9kZXZfZmlyc3Qo dm9pZCk7CmV4dGVybiBzdHJ1Y3QgbmV0X2RldmljZSAqbnJfZGV2X2dldChheDI1X2FkZHJlc3Mg Kik7CmV4dGVybiBpbnQgbnJfcnRfaW9jdGwodW5zaWduZWQgaW50LCB2b2lkICopOwpleHRlcm4g dm9pZCBucl9saW5rX2ZhaWxlZChheDI1X2NiICosIGludCk7CmV4dGVybiBpbnQgbnJfcm91dGVf ZnJhbWUoc3RydWN0IHNrX2J1ZmYgKiwgYXgyNV9jYiAqKTsKZXh0ZXJuIGludCBucl9ub2Rlc19n ZXRfaW5mbyhjaGFyICosIGNoYXIgKiosIG9mZl90LCBpbnQpOwpleHRlcm4gaW50IG5yX25laWdo X2dldF9pbmZvKGNoYXIgKiwgY2hhciAqKiwgb2ZmX3QsIGludCk7CmV4dGVybiB2b2lkIG5yX3J0 X2ZyZWUodm9pZCk7CgoKZXh0ZXJuIHZvaWQgbnJfY2xlYXJfcXVldWVzKHN0cnVjdCBzb2NrICop OwpleHRlcm4gdm9pZCBucl9mcmFtZXNfYWNrZWQoc3RydWN0IHNvY2sgKiwgdW5zaWduZWQgc2hv cnQpOwpleHRlcm4gdm9pZCBucl9yZXF1ZXVlX2ZyYW1lcyhzdHJ1Y3Qgc29jayAqKTsKZXh0ZXJu IGludCBucl92YWxpZGF0ZV9ucihzdHJ1Y3Qgc29jayAqLCB1bnNpZ25lZCBzaG9ydCk7CmV4dGVy biBpbnQgbnJfaW5fcnhfd2luZG93KHN0cnVjdCBzb2NrICosIHVuc2lnbmVkIHNob3J0KTsKZXh0 ZXJuIHZvaWQgbnJfd3JpdGVfaW50ZXJuYWwoc3RydWN0IHNvY2sgKiwgaW50KTsKZXh0ZXJuIHZv aWQgbnJfdHJhbnNtaXRfcmVmdXNhbChzdHJ1Y3Qgc2tfYnVmZiAqLCBpbnQpOwpleHRlcm4gdm9p ZCBucl9kaXNjb25uZWN0KHN0cnVjdCBzb2NrICosIGludCk7CgoKZXh0ZXJuIHZvaWQgbnJfc3Rh cnRfaGVhcnRiZWF0KHN0cnVjdCBzb2NrICopOwpleHRlcm4gdm9pZCBucl9zdGFydF90MXRpbWVy KHN0cnVjdCBzb2NrICopOwpleHRlcm4gdm9pZCBucl9zdGFydF90MnRpbWVyKHN0cnVjdCBzb2Nr ICopOwpleHRlcm4gdm9pZCBucl9zdGFydF90NHRpbWVyKHN0cnVjdCBzb2NrICopOwpleHRlcm4g dm9pZCBucl9zdGFydF9pZGxldGltZXIoc3RydWN0IHNvY2sgKik7CmV4dGVybiB2b2lkIG5yX3N0 b3BfaGVhcnRiZWF0KHN0cnVjdCBzb2NrICopOwpleHRlcm4gdm9pZCBucl9zdG9wX3QxdGltZXIo c3RydWN0IHNvY2sgKik7CmV4dGVybiB2b2lkIG5yX3N0b3BfdDJ0aW1lcihzdHJ1Y3Qgc29jayAq KTsKZXh0ZXJuIHZvaWQgbnJfc3RvcF90NHRpbWVyKHN0cnVjdCBzb2NrICopOwpleHRlcm4gdm9p ZCBucl9zdG9wX2lkbGV0aW1lcihzdHJ1Y3Qgc29jayAqKTsKZXh0ZXJuIGludCBucl90MXRpbWVy X3J1bm5pbmcoc3RydWN0IHNvY2sgKik7CgoKZXh0ZXJuIHZvaWQgbnJfcmVnaXN0ZXJfc3lzY3Rs KHZvaWQpOwpleHRlcm4gdm9pZCBucl91bnJlZ2lzdGVyX3N5c2N0bCh2b2lkKTsKIyA2NyAiL3Vz ci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9uZXQvc29jay5oIiAyCgoKIyAxICIvdXNyL3Ny Yy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL25ldC9yb3NlLmgiIDEKIyA5ICIvdXNyL3NyYy9saW51 eC0yLjQuMjAtOC9pbmNsdWRlL25ldC9yb3NlLmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIw LTgvaW5jbHVkZS9saW51eC9yb3NlLmgiIDEKIyA0MiAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgv aW5jbHVkZS9saW51eC9yb3NlLmgiCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBjaGFyIHJvc2Vf YWRkcls1XTsKfSByb3NlX2FkZHJlc3M7CgpzdHJ1Y3Qgc29ja2FkZHJfcm9zZSB7CiAgICAgICAg c2FfZmFtaWx5X3Qgc3Jvc2VfZmFtaWx5OwogICAgICAgIHJvc2VfYWRkcmVzcyBzcm9zZV9hZGRy OwogICAgICAgIGF4MjVfYWRkcmVzcyBzcm9zZV9jYWxsOwogICAgICAgIGludCBzcm9zZV9uZGln aXM7CiAgICAgICAgYXgyNV9hZGRyZXNzIHNyb3NlX2RpZ2k7Cn07CgpzdHJ1Y3QgZnVsbF9zb2Nr YWRkcl9yb3NlIHsKICAgICAgICBzYV9mYW1pbHlfdCBzcm9zZV9mYW1pbHk7CiAgICAgICAgcm9z ZV9hZGRyZXNzIHNyb3NlX2FkZHI7CiAgICAgICAgYXgyNV9hZGRyZXNzIHNyb3NlX2NhbGw7CiAg ICAgICAgdW5zaWduZWQgaW50IHNyb3NlX25kaWdpczsKICAgICAgICBheDI1X2FkZHJlc3Mgc3Jv c2VfZGlnaXNbNl07Cn07CgpzdHJ1Y3Qgcm9zZV9yb3V0ZV9zdHJ1Y3QgewogICAgICAgIHJvc2Vf YWRkcmVzcyBhZGRyZXNzOwogICAgICAgIHVuc2lnbmVkIHNob3J0IG1hc2s7CiAgICAgICAgYXgy NV9hZGRyZXNzIG5laWdoYm91cjsKICAgICAgICBjaGFyIGRldmljZVsxNl07CiAgICAgICAgdW5z aWduZWQgY2hhciBuZGlnaXM7CiAgICAgICAgYXgyNV9hZGRyZXNzIGRpZ2lwZWF0ZXJzWzhdOwp9 OwoKc3RydWN0IHJvc2VfY2F1c2Vfc3RydWN0IHsKICAgICAgICB1bnNpZ25lZCBjaGFyIGNhdXNl OwogICAgICAgIHVuc2lnbmVkIGNoYXIgZGlhZ25vc3RpYzsKfTsKCnN0cnVjdCByb3NlX2ZhY2ls aXRpZXNfc3RydWN0IHsKICAgICAgICByb3NlX2FkZHJlc3Mgc291cmNlX2FkZHIsIGRlc3RfYWRk cjsKICAgICAgICBheDI1X2FkZHJlc3Mgc291cmNlX2NhbGwsIGRlc3RfY2FsbDsKICAgICAgICB1 bnNpZ25lZCBjaGFyIHNvdXJjZV9uZGlnaXMsIGRlc3RfbmRpZ2lzOwogICAgICAgIGF4MjVfYWRk cmVzcyBzb3VyY2VfZGlnaXNbNl07CiAgICAgICAgYXgyNV9hZGRyZXNzIGRlc3RfZGlnaXNbNl07 CiAgICAgICAgdW5zaWduZWQgaW50IHJhbmQ7CiAgICAgICAgcm9zZV9hZGRyZXNzIGZhaWxfYWRk cjsKICAgICAgICBheDI1X2FkZHJlc3MgZmFpbF9jYWxsOwp9OwojIDEwICIvdXNyL3NyYy9saW51 eC0yLjQuMjAtOC9pbmNsdWRlL25ldC9yb3NlLmgiIDIKIyA0MSAiL3Vzci9zcmMvbGludXgtMi40 LjIwLTgvaW5jbHVkZS9uZXQvcm9zZS5oIgplbnVtIHsKICAgICAgICBST1NFX1NUQVRFXzAsCiAg ICAgICAgUk9TRV9TVEFURV8xLAogICAgICAgIFJPU0VfU1RBVEVfMiwKICAgICAgICBST1NFX1NU QVRFXzMsCiAgICAgICAgUk9TRV9TVEFURV80LAogICAgICAgIFJPU0VfU1RBVEVfNQp9OwojIDgy ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL25ldC9yb3NlLmgiCnN0cnVjdCByb3Nl X25laWdoIHsKICAgICAgICBzdHJ1Y3Qgcm9zZV9uZWlnaCAqbmV4dDsKICAgICAgICBheDI1X2Fk ZHJlc3MgY2FsbHNpZ247CiAgICAgICAgYXgyNV9kaWdpICpkaWdpcGVhdDsKICAgICAgICBheDI1 X2NiICpheDI1OwogICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAgICAgICAgdW5zaWdu ZWQgc2hvcnQgY291bnQ7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgdXNlOwogICAgICAgIHVuc2ln bmVkIGludCBudW1iZXI7CiAgICAgICAgY2hhciByZXN0YXJ0ZWQ7CiAgICAgICAgY2hhciBkY2Vf bW9kZTsKICAgICAgICBjaGFyIGxvb3BiYWNrOwogICAgICAgIHN0cnVjdCBza19idWZmX2hlYWQg cXVldWU7CiAgICAgICAgc3RydWN0IHRpbWVyX2xpc3QgdDB0aW1lcjsKICAgICAgICBzdHJ1Y3Qg dGltZXJfbGlzdCBmdGltZXI7Cn07CgpzdHJ1Y3Qgcm9zZV9ub2RlIHsKICAgICAgICBzdHJ1Y3Qg cm9zZV9ub2RlICpuZXh0OwogICAgICAgIHJvc2VfYWRkcmVzcyBhZGRyZXNzOwogICAgICAgIHVu c2lnbmVkIHNob3J0IG1hc2s7CiAgICAgICAgdW5zaWduZWQgY2hhciBjb3VudDsKICAgICAgICBj aGFyIGxvb3BiYWNrOwogICAgICAgIHN0cnVjdCByb3NlX25laWdoICpuZWlnaGJvdXJbM107Cn07 CgpzdHJ1Y3Qgcm9zZV9yb3V0ZSB7CiAgICAgICAgc3RydWN0IHJvc2Vfcm91dGUgKm5leHQ7CiAg ICAgICAgdW5zaWduZWQgaW50IGxjaTEsIGxjaTI7CiAgICAgICAgcm9zZV9hZGRyZXNzIHNyY19h ZGRyLCBkZXN0X2FkZHI7CiAgICAgICAgYXgyNV9hZGRyZXNzIHNyY19jYWxsLCBkZXN0X2NhbGw7 CiAgICAgICAgc3RydWN0IHJvc2VfbmVpZ2ggKm5laWdoMSwgKm5laWdoMjsKICAgICAgICB1bnNp Z25lZCBpbnQgcmFuZDsKfTsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICByb3NlX2FkZHJlc3Mg c291cmNlX2FkZHIsIGRlc3RfYWRkcjsKICAgICAgICBheDI1X2FkZHJlc3Mgc291cmNlX2NhbGws IGRlc3RfY2FsbDsKICAgICAgICB1bnNpZ25lZCBjaGFyIHNvdXJjZV9uZGlnaXMsIGRlc3RfbmRp Z2lzOwogICAgICAgIGF4MjVfYWRkcmVzcyBzb3VyY2VfZGlnaXNbNl07CiAgICAgICAgYXgyNV9h ZGRyZXNzIGRlc3RfZGlnaXNbNl07CiAgICAgICAgc3RydWN0IHJvc2VfbmVpZ2ggKm5laWdoYm91 cjsKICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2aWNlOwogICAgICAgIHVuc2lnbmVkIGlu dCBsY2ksIHJhbmQ7CiAgICAgICAgdW5zaWduZWQgY2hhciBzdGF0ZSwgY29uZGl0aW9uLCBxYml0 aW5jbCwgZGVmZXI7CiAgICAgICAgdW5zaWduZWQgY2hhciBjYXVzZSwgZGlhZ25vc3RpYzsKICAg ICAgICB1bnNpZ25lZCBzaG9ydCB2cywgdnIsIHZhLCB2bDsKICAgICAgICB1bnNpZ25lZCBsb25n IHQxLCB0MiwgdDMsIGhiLCBpZGxlOwoKCgoKICAgICAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGFj a19xdWV1ZTsKICAgICAgICBzdHJ1Y3Qgcm9zZV9mYWNpbGl0aWVzX3N0cnVjdCBmYWNpbGl0aWVz OwogICAgICAgIHN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwogICAgICAgIHN0cnVjdCB0aW1lcl9s aXN0IGlkbGV0aW1lcjsKICAgICAgICBzdHJ1Y3Qgc29jayAqc2s7Cn0gcm9zZV9jYjsKCgpleHRl cm4gYXgyNV9hZGRyZXNzIHJvc2VfY2FsbHNpZ247CmV4dGVybiBpbnQgc3lzY3RsX3Jvc2VfcmVz dGFydF9yZXF1ZXN0X3RpbWVvdXQ7CmV4dGVybiBpbnQgc3lzY3RsX3Jvc2VfY2FsbF9yZXF1ZXN0 X3RpbWVvdXQ7CmV4dGVybiBpbnQgc3lzY3RsX3Jvc2VfcmVzZXRfcmVxdWVzdF90aW1lb3V0Owpl eHRlcm4gaW50IHN5c2N0bF9yb3NlX2NsZWFyX3JlcXVlc3RfdGltZW91dDsKZXh0ZXJuIGludCBz eXNjdGxfcm9zZV9ub19hY3Rpdml0eV90aW1lb3V0OwpleHRlcm4gaW50IHN5c2N0bF9yb3NlX2Fj a19ob2xkX2JhY2tfdGltZW91dDsKZXh0ZXJuIGludCBzeXNjdGxfcm9zZV9yb3V0aW5nX2NvbnRy b2w7CmV4dGVybiBpbnQgc3lzY3RsX3Jvc2VfbGlua19mYWlsX3RpbWVvdXQ7CmV4dGVybiBpbnQg c3lzY3RsX3Jvc2VfbWF4aW11bV92Y3M7CmV4dGVybiBpbnQgc3lzY3RsX3Jvc2Vfd2luZG93X3Np emU7CmV4dGVybiBpbnQgcm9zZWNtcChyb3NlX2FkZHJlc3MgKiwgcm9zZV9hZGRyZXNzICopOwpl eHRlcm4gaW50IHJvc2VjbXBtKHJvc2VfYWRkcmVzcyAqLCByb3NlX2FkZHJlc3MgKiwgdW5zaWdu ZWQgc2hvcnQpOwpleHRlcm4gY2hhciAqcm9zZTJhc2Mocm9zZV9hZGRyZXNzICopOwpleHRlcm4g c3RydWN0IHNvY2sgKnJvc2VfZmluZF9zb2NrZXQodW5zaWduZWQgaW50LCBzdHJ1Y3Qgcm9zZV9u ZWlnaCAqKTsKZXh0ZXJuIHZvaWQgcm9zZV9raWxsX2J5X25laWdoKHN0cnVjdCByb3NlX25laWdo ICopOwpleHRlcm4gdW5zaWduZWQgaW50IHJvc2VfbmV3X2xjaShzdHJ1Y3Qgcm9zZV9uZWlnaCAq KTsKZXh0ZXJuIGludCByb3NlX3J4X2NhbGxfcmVxdWVzdChzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1 Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3Qgcm9zZV9uZWlnaCAqLCB1bnNpZ25lZCBpbnQpOwpleHRl cm4gdm9pZCByb3NlX2Rlc3Ryb3lfc29ja2V0KHN0cnVjdCBzb2NrICopOwoKCmV4dGVybiBpbnQg cm9zZV9yeF9pcChzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqKTsKZXh0ZXJu IGludCByb3NlX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKik7CgoKZXh0ZXJuIGludCByb3NlX3By b2Nlc3NfcnhfZnJhbWUoc3RydWN0IHNvY2sgKiwgc3RydWN0IHNrX2J1ZmYgKik7CgoKZXh0ZXJu IHZvaWQgcm9zZV9zdGFydF9mdGltZXIoc3RydWN0IHJvc2VfbmVpZ2ggKik7CmV4dGVybiB2b2lk IHJvc2Vfc3RhcnRfdDB0aW1lcihzdHJ1Y3Qgcm9zZV9uZWlnaCAqKTsKZXh0ZXJuIHZvaWQgcm9z ZV9zdG9wX2Z0aW1lcihzdHJ1Y3Qgcm9zZV9uZWlnaCAqKTsKZXh0ZXJuIHZvaWQgcm9zZV9zdG9w X3QwdGltZXIoc3RydWN0IHJvc2VfbmVpZ2ggKik7CmV4dGVybiBpbnQgcm9zZV9mdGltZXJfcnVu bmluZyhzdHJ1Y3Qgcm9zZV9uZWlnaCAqKTsKZXh0ZXJuIGludCByb3NlX3QwdGltZXJfcnVubmlu ZyhzdHJ1Y3Qgcm9zZV9uZWlnaCAqKTsKZXh0ZXJuIHZvaWQgcm9zZV9saW5rX3J4X3Jlc3RhcnQo c3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IHJvc2VfbmVpZ2ggKiwgdW5zaWduZWQgc2hvcnQpOwpl eHRlcm4gdm9pZCByb3NlX3RyYW5zbWl0X3Jlc3RhcnRfcmVxdWVzdChzdHJ1Y3Qgcm9zZV9uZWln aCAqKTsKZXh0ZXJuIHZvaWQgcm9zZV90cmFuc21pdF9yZXN0YXJ0X2NvbmZpcm1hdGlvbihzdHJ1 Y3Qgcm9zZV9uZWlnaCAqKTsKZXh0ZXJuIHZvaWQgcm9zZV90cmFuc21pdF9kaWFnbm9zdGljKHN0 cnVjdCByb3NlX25laWdoICosIHVuc2lnbmVkIGNoYXIpOwpleHRlcm4gdm9pZCByb3NlX3RyYW5z bWl0X2NsZWFyX3JlcXVlc3Qoc3RydWN0IHJvc2VfbmVpZ2ggKiwgdW5zaWduZWQgaW50LCB1bnNp Z25lZCBjaGFyLCB1bnNpZ25lZCBjaGFyKTsKZXh0ZXJuIHZvaWQgcm9zZV90cmFuc21pdF9saW5r KHN0cnVjdCBza19idWZmICosIHN0cnVjdCByb3NlX25laWdoICopOwoKCmV4dGVybiB2b2lkIHJv c2VfbG9vcGJhY2tfaW5pdCh2b2lkKTsKZXh0ZXJuIHZvaWQgcm9zZV9sb29wYmFja19jbGVhcih2 b2lkKTsKZXh0ZXJuIGludCByb3NlX2xvb3BiYWNrX3F1ZXVlKHN0cnVjdCBza19idWZmICosIHN0 cnVjdCByb3NlX25laWdoICopOwoKCmV4dGVybiB2b2lkIHJvc2Vfa2ljayhzdHJ1Y3Qgc29jayAq KTsKZXh0ZXJuIHZvaWQgcm9zZV9lbnF1aXJ5X3Jlc3BvbnNlKHN0cnVjdCBzb2NrICopOwoKCmV4 dGVybiBzdHJ1Y3Qgcm9zZV9uZWlnaCAqcm9zZV9sb29wYmFja19uZWlnaDsKCmV4dGVybiBpbnQg cm9zZV9hZGRfbG9vcGJhY2tfbmVpZ2godm9pZCk7CmV4dGVybiBpbnQgcm9zZV9hZGRfbG9vcGJh Y2tfbm9kZShyb3NlX2FkZHJlc3MgKik7CmV4dGVybiB2b2lkIHJvc2VfZGVsX2xvb3BiYWNrX25v ZGUocm9zZV9hZGRyZXNzICopOwpleHRlcm4gdm9pZCByb3NlX3J0X2RldmljZV9kb3duKHN0cnVj dCBuZXRfZGV2aWNlICopOwpleHRlcm4gdm9pZCByb3NlX2xpbmtfZGV2aWNlX2Rvd24oc3RydWN0 IG5ldF9kZXZpY2UgKik7CmV4dGVybiBzdHJ1Y3QgbmV0X2RldmljZSAqcm9zZV9kZXZfZmlyc3Qo dm9pZCk7CmV4dGVybiBzdHJ1Y3QgbmV0X2RldmljZSAqcm9zZV9kZXZfZ2V0KHJvc2VfYWRkcmVz cyAqKTsKZXh0ZXJuIHN0cnVjdCByb3NlX3JvdXRlICpyb3NlX3JvdXRlX2ZyZWVfbGNpKHVuc2ln bmVkIGludCwgc3RydWN0IHJvc2VfbmVpZ2ggKik7CmV4dGVybiBzdHJ1Y3QgbmV0X2RldmljZSAq cm9zZV9heDI1X2Rldl9nZXQoY2hhciAqKTsKZXh0ZXJuIHN0cnVjdCByb3NlX25laWdoICpyb3Nl X2dldF9uZWlnaChyb3NlX2FkZHJlc3MgKiwgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFy ICopOwpleHRlcm4gaW50IHJvc2VfcnRfaW9jdGwodW5zaWduZWQgaW50LCB2b2lkICopOwpleHRl cm4gdm9pZCByb3NlX2xpbmtfZmFpbGVkKGF4MjVfY2IgKiwgaW50KTsKZXh0ZXJuIGludCByb3Nl X3JvdXRlX2ZyYW1lKHN0cnVjdCBza19idWZmICosIGF4MjVfY2IgKik7CmV4dGVybiBpbnQgcm9z ZV9ub2Rlc19nZXRfaW5mbyhjaGFyICosIGNoYXIgKiosIG9mZl90LCBpbnQpOwpleHRlcm4gaW50 IHJvc2VfbmVpZ2hfZ2V0X2luZm8oY2hhciAqLCBjaGFyICoqLCBvZmZfdCwgaW50KTsKZXh0ZXJu IGludCByb3NlX3JvdXRlc19nZXRfaW5mbyhjaGFyICosIGNoYXIgKiosIG9mZl90LCBpbnQpOwpl eHRlcm4gdm9pZCByb3NlX3J0X2ZyZWUodm9pZCk7CgoKZXh0ZXJuIHZvaWQgcm9zZV9jbGVhcl9x dWV1ZXMoc3RydWN0IHNvY2sgKik7CmV4dGVybiB2b2lkIHJvc2VfZnJhbWVzX2Fja2VkKHN0cnVj dCBzb2NrICosIHVuc2lnbmVkIHNob3J0KTsKZXh0ZXJuIHZvaWQgcm9zZV9yZXF1ZXVlX2ZyYW1l cyhzdHJ1Y3Qgc29jayAqKTsKZXh0ZXJuIGludCByb3NlX3ZhbGlkYXRlX25yKHN0cnVjdCBzb2Nr ICosIHVuc2lnbmVkIHNob3J0KTsKZXh0ZXJuIHZvaWQgcm9zZV93cml0ZV9pbnRlcm5hbChzdHJ1 Y3Qgc29jayAqLCBpbnQpOwpleHRlcm4gaW50IHJvc2VfZGVjb2RlKHN0cnVjdCBza19idWZmICos IGludCAqLCBpbnQgKiwgaW50ICosIGludCAqLCBpbnQgKik7CmV4dGVybiBpbnQgcm9zZV9wYXJz ZV9mYWNpbGl0aWVzKHVuc2lnbmVkIGNoYXIgKiwgc3RydWN0IHJvc2VfZmFjaWxpdGllc19zdHJ1 Y3QgKik7CmV4dGVybiBpbnQgcm9zZV9jcmVhdGVfZmFjaWxpdGllcyh1bnNpZ25lZCBjaGFyICos IHJvc2VfY2IgKik7CmV4dGVybiB2b2lkIHJvc2VfZGlzY29ubmVjdChzdHJ1Y3Qgc29jayAqLCBp bnQsIGludCwgaW50KTsKCgpleHRlcm4gdm9pZCByb3NlX3N0YXJ0X2hlYXJ0YmVhdChzdHJ1Y3Qg c29jayAqKTsKZXh0ZXJuIHZvaWQgcm9zZV9zdGFydF90MXRpbWVyKHN0cnVjdCBzb2NrICopOwpl eHRlcm4gdm9pZCByb3NlX3N0YXJ0X3QydGltZXIoc3RydWN0IHNvY2sgKik7CmV4dGVybiB2b2lk IHJvc2Vfc3RhcnRfdDN0aW1lcihzdHJ1Y3Qgc29jayAqKTsKZXh0ZXJuIHZvaWQgcm9zZV9zdGFy dF9oYnRpbWVyKHN0cnVjdCBzb2NrICopOwpleHRlcm4gdm9pZCByb3NlX3N0YXJ0X2lkbGV0aW1l cihzdHJ1Y3Qgc29jayAqKTsKZXh0ZXJuIHZvaWQgcm9zZV9zdG9wX2hlYXJ0YmVhdChzdHJ1Y3Qg c29jayAqKTsKZXh0ZXJuIHZvaWQgcm9zZV9zdG9wX3RpbWVyKHN0cnVjdCBzb2NrICopOwpleHRl cm4gdm9pZCByb3NlX3N0b3BfaWRsZXRpbWVyKHN0cnVjdCBzb2NrICopOwoKCmV4dGVybiB2b2lk IHJvc2VfcmVnaXN0ZXJfc3lzY3RsKHZvaWQpOwpleHRlcm4gdm9pZCByb3NlX3VucmVnaXN0ZXJf c3lzY3RsKHZvaWQpOwojIDcwICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL25ldC9z b2NrLmgiIDIKIyA4MiAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9uZXQvc29jay5o IgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbmV0L2lweC5oIiAxCiMgMTQg Ii91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbmV0L2lweC5oIgojIDEgIi91c3Ivc3Jj L2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbmV0L2RhdGFsaW5rLmgiIDEKCgoKc3RydWN0IGRhdGFs aW5rX3Byb3RvIHsKICAgICAgICB1bnNpZ25lZCBzaG9ydCB0eXBlX2xlbjsKICAgICAgICB1bnNp Z25lZCBjaGFyIHR5cGVbOF07CiAgICAgICAgY29uc3QgY2hhciAqc3RyaW5nX25hbWU7CiAgICAg ICAgdW5zaWduZWQgc2hvcnQgaGVhZGVyX2xlbmd0aDsKICAgICAgICBpbnQgKCpyY3ZmdW5jKShz dHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqKTsKICAgICAgICB2b2lkICgqZGF0YWxp bmtfaGVhZGVyKShzdHJ1Y3QgZGF0YWxpbmtfcHJvdG8gKiwgc3RydWN0IHNrX2J1ZmYgKiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKik7CiAg ICAgICAgc3RydWN0IGRhdGFsaW5rX3Byb3RvICpuZXh0Owp9OwojIDE1ICIvdXNyL3NyYy9saW51 eC0yLjQuMjAtOC9pbmNsdWRlL25ldC9pcHguaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4y MC04L2luY2x1ZGUvbGludXgvaXB4LmgiIDEKCgoKCgoKCnN0cnVjdCBzb2NrYWRkcl9pcHgKewog ICAgICAgIHNhX2ZhbWlseV90IHNpcHhfZmFtaWx5OwogICAgICAgIF9fdTE2IHNpcHhfcG9ydDsK ICAgICAgICBfX3UzMiBzaXB4X25ldHdvcms7CiAgICAgICAgdW5zaWduZWQgY2hhciBzaXB4X25v ZGVbNl07CiAgICAgICAgX191OCBzaXB4X3R5cGU7CiAgICAgICAgdW5zaWduZWQgY2hhciBzaXB4 X3plcm87Cn07CiMgMjcgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvaXB4 LmgiCnR5cGVkZWYgc3RydWN0IGlweF9yb3V0ZV9kZWZpbml0aW9uCnsKICAgICAgICBfX3UzMiBp cHhfbmV0d29yazsKICAgICAgICBfX3UzMiBpcHhfcm91dGVyX25ldHdvcms7CiAgICAgICAgdW5z aWduZWQgY2hhciBpcHhfcm91dGVyX25vZGVbNl07Cn0gaXB4X3JvdXRlX2RlZmluaXRpb247Cgp0 eXBlZGVmIHN0cnVjdCBpcHhfaW50ZXJmYWNlX2RlZmluaXRpb24KewogICAgICAgIF9fdTMyIGlw eF9uZXR3b3JrOwogICAgICAgIHVuc2lnbmVkIGNoYXIgaXB4X2RldmljZVsxNl07CiAgICAgICAg dW5zaWduZWQgY2hhciBpcHhfZGxpbmtfdHlwZTsKCgoKCgoKICAgICAgICB1bnNpZ25lZCBjaGFy IGlweF9zcGVjaWFsOwoKCgogICAgICAgIHVuc2lnbmVkIGNoYXIgaXB4X25vZGVbNl07Cn0gaXB4 X2ludGVyZmFjZV9kZWZpbml0aW9uOwoKdHlwZWRlZiBzdHJ1Y3QgaXB4X2NvbmZpZ19kYXRhCnsK ICAgICAgICB1bnNpZ25lZCBjaGFyIGlweGNmZ19hdXRvX3NlbGVjdF9wcmltYXJ5OwogICAgICAg IHVuc2lnbmVkIGNoYXIgaXB4Y2ZnX2F1dG9fY3JlYXRlX2ludGVyZmFjZXM7Cn0gaXB4X2NvbmZp Z19kYXRhOwoKCgoKCnN0cnVjdCBpcHhfcm91dGVfZGVmCnsKICAgICAgICBfX3UzMiBpcHhfbmV0 d29yazsKICAgICAgICBfX3UzMiBpcHhfcm91dGVyX25ldHdvcms7CgogICAgICAgIHVuc2lnbmVk IGNoYXIgaXB4X3JvdXRlcl9ub2RlWzZdOwogICAgICAgIHVuc2lnbmVkIGNoYXIgaXB4X2Rldmlj ZVsxNl07CiAgICAgICAgdW5zaWduZWQgc2hvcnQgaXB4X2ZsYWdzOwoKCgoKfTsKIyA4NCAiL3Vz ci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9pcHguaCIKZXh0ZXJuIGludCBpcHhy dHJfcm91dGVfc2tiX1JlOTA5ZWI4OChzdHJ1Y3Qgc2tfYnVmZiAqKTsKZXh0ZXJuIGludCBpcHhf aWZfb2Zmc2V0X1IwOGRlNGYyYyh1bnNpZ25lZCBsb25nIGlweF9uZXRfbnVtYmVyKTsKZXh0ZXJu IHZvaWQgaXB4X3JlbW92ZV9zb2NrZXRfUmU0MTE5YjQ5KHN0cnVjdCBzb2NrICpzayk7CiMgMTYg Ii91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbmV0L2lweC5oIiAyCgp0eXBlZGVmIHN0 cnVjdAp7CiAgICAgICAgX191MzIgbmV0OwogICAgICAgIF9fdTggbm9kZVs2XTsKICAgICAgICBf X3UxNiBzb2NrOwp9IGlweF9hZGRyZXNzOwoKCgoKCgpzdHJ1Y3QgaXB4aGRyCnsKICAgICAgICBf X3UxNiBpcHhfY2hlY2tzdW0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwoKICAgICAgICBfX3Ux NiBpcHhfcGt0c2l6ZSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAgICAgICAgX191OCBpcHhf dGN0cmw7CiAgICAgICAgX191OCBpcHhfdHlwZTsKCgoKCgoKICAgICAgICBpcHhfYWRkcmVzcyBp cHhfZGVzdCBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAgICAgICAgaXB4X2FkZHJlc3MgaXB4 X3NvdXJjZSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cn07Cgp0eXBlZGVmIHN0cnVjdCBpcHhf aW50ZXJmYWNlIHsKCiAgICAgICAgX191MzIgaWZfbmV0bnVtOwogICAgICAgIHVuc2lnbmVkIGNo YXIgaWZfbm9kZVs2XTsKICAgICAgICBhdG9taWNfdCByZWZjbnQ7CgoKICAgICAgICBzdHJ1Y3Qg bmV0X2RldmljZSAqaWZfZGV2OwogICAgICAgIHN0cnVjdCBkYXRhbGlua19wcm90byAqaWZfZGxp bms7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgaWZfZGxpbmtfdHlwZTsKCgogICAgICAgIHVuc2ln bmVkIHNob3J0IGlmX3NrbnVtOwogICAgICAgIHN0cnVjdCBzb2NrICppZl9za2xpc3Q7CiAgICAg ICAgc3BpbmxvY2tfdCBpZl9za2xpc3RfbG9jazsKCgogICAgICAgIGludCBpZl9pcHhfb2Zmc2V0 OwogICAgICAgIHVuc2lnbmVkIGNoYXIgaWZfaW50ZXJuYWw7CiAgICAgICAgdW5zaWduZWQgY2hh ciBpZl9wcmltYXJ5OwoKICAgICAgICBzdHJ1Y3QgaXB4X2ludGVyZmFjZSAqaWZfbmV4dDsKfSBp cHhfaW50ZXJmYWNlOwoKdHlwZWRlZiBzdHJ1Y3QgaXB4X3JvdXRlIHsKICAgICAgICBfX3UzMiBp cl9uZXQ7CiAgICAgICAgaXB4X2ludGVyZmFjZSAqaXJfaW50cmZjOwogICAgICAgIHVuc2lnbmVk IGNoYXIgaXJfcm91dGVkOwogICAgICAgIHVuc2lnbmVkIGNoYXIgaXJfcm91dGVyX25vZGVbNl07 CiAgICAgICAgc3RydWN0IGlweF9yb3V0ZSAqaXJfbmV4dDsKICAgICAgICBhdG9taWNfdCByZWZj bnQ7Cn0gaXB4X3JvdXRlOwoKCnN0cnVjdCBpcHhfY2IgewogICAgICAgIHU4IGlweF90Y3RybDsK ICAgICAgICB1MzIgaXB4X2Rlc3RfbmV0OwogICAgICAgIHUzMiBpcHhfc291cmNlX25ldDsKICAg ICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgdTMyIG5ldG51bTsKICAgICAgICAgICAgICAg IGludCBpbmRleDsKICAgICAgICB9IGxhc3RfaG9wOwp9OwoKCgoKZXh0ZXJuIGludCBpcHhfcmVn aXN0ZXJfc3B4X1IxMjM0OGU2ZihzdHJ1Y3QgcHJvdG9fb3BzICoqLCBzdHJ1Y3QgbmV0X3Byb3Rv X2ZhbWlseSAqKTsKZXh0ZXJuIGludCBpcHhfdW5yZWdpc3Rlcl9zcHhfUmI1ZTM5ZTY0KHZvaWQp OwojIDgzICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL25ldC9zb2NrLmgiIDIKCgoK CiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9hdGFsay5oIiAxCiMg MjMgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbGludXgvYXRhbGsuaCIKc3RydWN0 IGF0X2FkZHIKewogICAgICAgIF9fdTE2IHNfbmV0OwogICAgICAgIF9fdTggc19ub2RlOwp9OwoK c3RydWN0IHNvY2thZGRyX2F0CnsKICAgICAgICBzYV9mYW1pbHlfdCBzYXRfZmFtaWx5OwogICAg ICAgIF9fdTggc2F0X3BvcnQ7CiAgICAgICAgc3RydWN0IGF0X2FkZHIgc2F0X2FkZHI7CiAgICAg ICAgY2hhciBzYXRfemVyb1sgOCBdOwp9OwoKc3RydWN0IG5ldHJhbmdlCnsKICAgICAgICBfX3U4 IG5yX3BoYXNlOwogICAgICAgIF9fdTE2IG5yX2ZpcnN0bmV0OwogICAgICAgIF9fdTE2IG5yX2xh c3RuZXQ7Cn07CgpzdHJ1Y3QgYXRhbGtfcm91dGUKewogICAgICAgIHN0cnVjdCBuZXRfZGV2aWNl ICpkZXY7CiAgICAgICAgc3RydWN0IGF0X2FkZHIgdGFyZ2V0OwogICAgICAgIHN0cnVjdCBhdF9h ZGRyIGdhdGV3YXk7CiAgICAgICAgaW50IGZsYWdzOwogICAgICAgIHN0cnVjdCBhdGFsa19yb3V0 ZSAqbmV4dDsKfTsKCnN0cnVjdCBhdGFsa19pZmFjZQp7CiAgICAgICAgc3RydWN0IG5ldF9kZXZp Y2UgKmRldjsKICAgICAgICBzdHJ1Y3QgYXRfYWRkciBhZGRyZXNzOwogICAgICAgIGludCBzdGF0 dXM7CgoKICAgICAgICBzdHJ1Y3QgbmV0cmFuZ2UgbmV0czsKICAgICAgICBzdHJ1Y3QgYXRhbGtf aWZhY2UgKm5leHQ7Cn07CgpzdHJ1Y3QgYXRhbGtfc29jawp7CiAgICAgICAgdW5zaWduZWQgc2hv cnQgZGVzdF9uZXQ7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc3JjX25ldDsKICAgICAgICB1bnNp Z25lZCBjaGFyIGRlc3Rfbm9kZTsKICAgICAgICB1bnNpZ25lZCBjaGFyIHNyY19ub2RlOwogICAg ICAgIHVuc2lnbmVkIGNoYXIgZGVzdF9wb3J0OwogICAgICAgIHVuc2lnbmVkIGNoYXIgc3JjX3Bv cnQ7Cn07CgoKCgoKc3RydWN0IGRkcGVoZHIKewoKICAgICAgICBfX3UxNiBkZWhfbGVuOjEwLCBk ZWhfaG9wczo0LCBkZWhfcGFkOjI7CgoKCiAgICAgICAgX191MTYgZGVoX3N1bTsKICAgICAgICBf X3UxNiBkZWhfZG5ldDsKICAgICAgICBfX3UxNiBkZWhfc25ldDsKICAgICAgICBfX3U4IGRlaF9k bm9kZTsKICAgICAgICBfX3U4IGRlaF9zbm9kZTsKICAgICAgICBfX3U4IGRlaF9kcG9ydDsKICAg ICAgICBfX3U4IGRlaF9zcG9ydDsKCn07CgoKCgoKCnN0cnVjdCBkZHBlYml0cwp7CgogICAgICAg IF9fdTE2IGRlaF9sZW46MTAsIGRlaF9ob3BzOjQsIGRlaF9wYWQ6MjsKCgoKfTsKCgoKCgpzdHJ1 Y3QgZGRwc2hkcgp7CgogICAgICAgIF9fdTE2IGRzaF9sZW46MTAsIGRzaF9wYWQ6NjsKCgoKICAg ICAgICBfX3U4IGRzaF9kcG9ydDsKICAgICAgICBfX3U4IGRzaF9zcG9ydDsKCn07CgoKCnN0cnVj dCBlbGFwYWFycAp7CiAgICAgICAgX191MTYgaHdfdHlwZTsKCgogICAgICAgIF9fdTE2IHBhX3R5 cGU7CiAgICAgICAgX191OCBod19sZW47CiAgICAgICAgX191OCBwYV9sZW47CgogICAgICAgIF9f dTE2IGZ1bmN0aW9uOwoKCgogICAgICAgIF9fdTggaHdfc3JjWzZdIF9fYXR0cmlidXRlX18gKChw YWNrZWQpKTsKICAgICAgICBfX3U4IHBhX3NyY196ZXJvIF9fYXR0cmlidXRlX18gKChwYWNrZWQp KTsKICAgICAgICBfX3UxNiBwYV9zcmNfbmV0IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKICAg ICAgICBfX3U4IHBhX3NyY19ub2RlIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKICAgICAgICBf X3U4IGh3X2RzdFs2XSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAgICAgICAgX191OCBwYV9k c3RfemVybyBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAgICAgICAgX191MTYgcGFfZHN0X25l dCBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAgICAgICAgX191OCBwYV9kc3Rfbm9kZSBfX2F0 dHJpYnV0ZV9fICgocGFja2VkKSk7Cn07CgoKCgoKCgpleHRlcm4gc3RydWN0IGRhdGFsaW5rX3By b3RvICpkZHBfZGwsICphYXJwX2RsOwpleHRlcm4gdm9pZCBhYXJwX3Byb3RvX2luaXQodm9pZCk7 CgoKCgoKCnN0YXRpYyBpbmxpbmUgc3RydWN0IGF0YWxrX2lmYWNlICphdGFsa19maW5kX2Rldihz dHJ1Y3QgbmV0X2RldmljZSAqZGV2KQp7CiAgICAgICAgcmV0dXJuIGRldi0+YXRhbGtfcHRyOwp9 CgpleHRlcm4gc3RydWN0IGF0X2FkZHIgKmF0YWxrX2ZpbmRfZGV2X2FkZHJfUmNjMjZkMmJlKHN0 cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpleHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKmF0cnRyX2dl dF9kZXZfUjY0NDExZTlhKHN0cnVjdCBhdF9hZGRyICpzYSk7CmV4dGVybiBpbnQgYWFycF9zZW5k X2RkcF9SNjZiMDQxMTEoc3RydWN0IG5ldF9kZXZpY2UgKmRldixzdHJ1Y3Qgc2tfYnVmZiAqc2ti LCBzdHJ1Y3QgYXRfYWRkciAqc2EsIHZvaWQgKmh3YWRkcik7CmV4dGVybiB2b2lkIGFhcnBfc2Vu ZF9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgYXRfYWRkciAqYWRkcik7CmV4 dGVybiB2b2lkIGFhcnBfZGV2aWNlX2Rvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CgoKZXh0 ZXJuIHZvaWQgYWFycF9jbGVhbnVwX21vZHVsZSh2b2lkKTsKIyA4OCAiL3Vzci9zcmMvbGludXgt Mi40LjIwLTgvaW5jbHVkZS9uZXQvc29jay5oIiAyCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40 LjIwLTgvaW5jbHVkZS9uZXQvZG4uaCIgMQoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04 L2luY2x1ZGUvbGludXgvZG4uaCIgMQojIDcyICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNs dWRlL2xpbnV4L2RuLmgiCnN0cnVjdCBkbl9uYWRkcgp7CiAgICAgICAgdW5zaWduZWQgc2hvcnQg YV9sZW47CiAgICAgICAgdW5zaWduZWQgY2hhciBhX2FkZHJbMl07Cn07CgpzdHJ1Y3Qgc29ja2Fk ZHJfZG4KewogICAgICAgIHVuc2lnbmVkIHNob3J0IHNkbl9mYW1pbHk7CiAgICAgICAgdW5zaWdu ZWQgY2hhciBzZG5fZmxhZ3M7CiAgICAgICAgdW5zaWduZWQgY2hhciBzZG5fb2JqbnVtOwogICAg ICAgIHVuc2lnbmVkIHNob3J0IHNkbl9vYmpuYW1lbDsKICAgICAgICB1bnNpZ25lZCBjaGFyIHNk bl9vYmpuYW1lWzE2XTsKICAgICAgICBzdHJ1Y3QgZG5fbmFkZHIgc2RuX2FkZDsKfTsKIyA5NSAi L3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9kbi5oIgpzdHJ1Y3Qgb3B0ZGF0 YV9kbiB7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgb3B0X3N0YXR1czsKCiAgICAgICAgdW5zaWdu ZWQgc2hvcnQgb3B0X29wdGw7CiAgICAgICAgdW5zaWduZWQgY2hhciBvcHRfZGF0YVsxNl07Cn07 CgpzdHJ1Y3QgYWNjZXNzZGF0YV9kbgp7CiAgICAgICAgdW5zaWduZWQgY2hhciBhY2NfYWNjbDsK ICAgICAgICB1bnNpZ25lZCBjaGFyIGFjY19hY2NbNDBdOwogICAgICAgIHVuc2lnbmVkIGNoYXIg YWNjX3Bhc3NsOwogICAgICAgIHVuc2lnbmVkIGNoYXIgYWNjX3Bhc3NbNDBdOwogICAgICAgIHVu c2lnbmVkIGNoYXIgYWNjX3VzZXJsOwogICAgICAgIHVuc2lnbmVkIGNoYXIgYWNjX3VzZXJbNDBd Owp9OwoKCgoKc3RydWN0IGxpbmtpbmZvX2RuIHsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBpZG5f c2Vnc2l6ZTsKICAgICAgICB1bnNpZ25lZCBjaGFyIGlkbl9saW5rc3RhdGU7Cn07CgoKCgp1bmlv biBldGhlcmFkZHJlc3MgewogICAgICAgIHVuc2lnbmVkIGNoYXIgZG5lX2FkZHJbNl07CiAgc3Ry dWN0IHsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgZG5lX2hpb3JkWzRdOwogICAgICAg ICAgICAgICAgdW5zaWduZWQgY2hhciBkbmVfbm9kZWFkZHJbMl07CiAgfSBkbmVfcmVtb3RlOwp9 OwoKCgoKCnN0cnVjdCBkbl9hZGRyIHsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBkbmFfZmFtaWx5 OwogICAgICAgIHVuaW9uIGV0aGVyYWRkcmVzcyBkbmFfbmV0YWRkcjsKfTsKIyA1ICIvdXNyL3Ny Yy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL25ldC9kbi5oIiAyCgoKdHlwZWRlZiB1bnNpZ25lZCBz aG9ydCBkbl9hZGRyZXNzOwoKCgoKCgpzdHJ1Y3QgZG5fc2NwCnsKICAgICAgICB1bnNpZ25lZCBj aGFyIHN0YXRlOwojIDM0ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL25ldC9kbi5o IgogICAgICAgIHVuc2lnbmVkIHNob3J0IGFkZHJsb2M7CiAgICAgICAgdW5zaWduZWQgc2hvcnQg YWRkcnJlbTsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBudW1kYXQ7CiAgICAgICAgdW5zaWduZWQg c2hvcnQgbnVtb3RoOwogICAgICAgIHVuc2lnbmVkIHNob3J0IG51bW90aF9yY3Y7CiAgICAgICAg dW5zaWduZWQgc2hvcnQgbnVtZGF0X3JjdjsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBhY2t4bXRf ZGF0OwogICAgICAgIHVuc2lnbmVkIHNob3J0IGFja3htdF9vdGg7CiAgICAgICAgdW5zaWduZWQg c2hvcnQgYWNrcmN2X2RhdDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBhY2tyY3Zfb3RoOwogICAg ICAgIHVuc2lnbmVkIGNoYXIgZmxvd3JlbV9zdzsKICAgICAgICB1bnNpZ25lZCBjaGFyIGZsb3ds b2Nfc3c7CgoKCiAgICAgICAgdW5zaWduZWQgc2hvcnQgZmxvd3JlbV9kYXQ7CiAgICAgICAgdW5z aWduZWQgc2hvcnQgZmxvd3JlbV9vdGg7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgZmxvd2xvY19k YXQ7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgZmxvd2xvY19vdGg7CiAgICAgICAgdW5zaWduZWQg Y2hhciBzZXJ2aWNlc19yZW07CiAgICAgICAgdW5zaWduZWQgY2hhciBzZXJ2aWNlc19sb2M7CiAg ICAgICAgdW5zaWduZWQgY2hhciBpbmZvX3JlbTsKICAgICAgICB1bnNpZ25lZCBjaGFyIGluZm9f bG9jOwoKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzZWdzaXplX3JlbTsKICAgICAgICB1bnNpZ25l ZCBzaG9ydCBzZWdzaXplX2xvYzsKCiAgICAgICAgdW5zaWduZWQgY2hhciBub25hZ2xlOwogICAg ICAgIHVuc2lnbmVkIGNoYXIgbXVsdGlfaXJlcTsKICAgICAgICB1bnNpZ25lZCBjaGFyIGFjY2Vw dF9tb2RlOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2VnX3RvdGFsOwoKICAgICAgICBzdHJ1Y3Qg b3B0ZGF0YV9kbiBjb25uZGF0YV9pbjsKICAgICAgICBzdHJ1Y3Qgb3B0ZGF0YV9kbiBjb25uZGF0 YV9vdXQ7CiAgICAgICAgc3RydWN0IG9wdGRhdGFfZG4gZGlzY2RhdGFfaW47CiAgICAgICAgc3Ry dWN0IG9wdGRhdGFfZG4gZGlzY2RhdGFfb3V0OwogICAgICAgIHN0cnVjdCBhY2Nlc3NkYXRhX2Ru IGFjY2Vzc2RhdGE7CgogICAgICAgIHN0cnVjdCBzb2NrYWRkcl9kbiBhZGRyOwogICAgICAgIHN0 cnVjdCBzb2NrYWRkcl9kbiBwZWVyOwojIDk5ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNs dWRlL25ldC9kbi5oIgogICAgICAgIHVuc2lnbmVkIGxvbmcgbWF4X3dpbmRvdzsKICAgICAgICB1 bnNpZ25lZCBsb25nIHNuZF93aW5kb3c7CgogICAgICAgIHVuc2lnbmVkIGxvbmcgbnNwX3NydHQ7 CgogICAgICAgIHVuc2lnbmVkIGxvbmcgbnNwX3J0dHZhcjsKCiAgICAgICAgdW5zaWduZWQgbG9u ZyBuc3Bfcnh0c2hpZnQ7CgoKCgogICAgICAgIHN0cnVjdCBza19idWZmX2hlYWQgZGF0YV94bWl0 X3F1ZXVlOwogICAgICAgIHN0cnVjdCBza19idWZmX2hlYWQgb3RoZXJfeG1pdF9xdWV1ZTsKCgoK CiAgICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCBvdGhlcl9yZWNlaXZlX3F1ZXVlOwogICAgICAg IGludCBvdGhlcl9yZXBvcnQ7CgoKCgogICAgICAgIHVuc2lnbmVkIGxvbmcgc3RhbXA7CiAgICAg ICAgdW5zaWduZWQgbG9uZyBwZXJzaXN0OwogICAgICAgIGludCAoKnBlcnNpc3RfZnhuKShzdHJ1 Y3Qgc29jayAqc2spOwogICAgICAgIHVuc2lnbmVkIGxvbmcga2VlcGFsaXZlOwogICAgICAgIHZv aWQgKCprZWVwYWxpdmVfZnhuKShzdHJ1Y3Qgc29jayAqc2spOwoKCgoKICAgICAgICBzdHJ1Y3Qg dGltZXJfbGlzdCBkZWxhY2tfdGltZXI7CiAgICAgICAgaW50IGRlbGFja19wZW5kaW5nOwogICAg ICAgIHZvaWQgKCpkZWxhY2tfZnhuKShzdHJ1Y3Qgc29jayAqc2spOwoKfTsKIyAxNTcgIi91c3Iv c3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbmV0L2RuLmgiCnN0cnVjdCBkbl9za2JfY2Igewog ICAgICAgIHVuc2lnbmVkIHNob3J0IGRzdDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzcmM7CiAg ICAgICAgdW5zaWduZWQgc2hvcnQgaG9wczsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBkc3RfcG9y dDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzcmNfcG9ydDsKICAgICAgICB1bnNpZ25lZCBjaGFy IHNlcnZpY2VzOwogICAgICAgIHVuc2lnbmVkIGNoYXIgaW5mbzsKICAgICAgICB1bnNpZ25lZCBj aGFyIHJ0X2ZsYWdzOwogICAgICAgIHVuc2lnbmVkIGNoYXIgbnNwX2ZsYWdzOwogICAgICAgIHVu c2lnbmVkIHNob3J0IHNlZ3NpemU7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc2VnbnVtOwogICAg ICAgIHVuc2lnbmVkIHNob3J0IHhtaXRfY291bnQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzdGFt cDsKICAgICAgICBpbnQgaWlmOwp9OwoKc3RhdGljIF9faW5saW5lX18gZG5fYWRkcmVzcyBkbl9l dGgyZG4odW5zaWduZWQgY2hhciAqZXRoYWRkcikKewogICAgICAgIHJldHVybiBldGhhZGRyWzRd IHwgKGV0aGFkZHJbNV0gPDwgOCk7Cn0KCnN0YXRpYyBfX2lubGluZV9fIGRuX2FkZHJlc3MgZG5f c2FkZHIyZG4oc3RydWN0IHNvY2thZGRyX2RuICpzYWRkcikKewogICAgICAgIHJldHVybiAqKGRu X2FkZHJlc3MgKilzYWRkci0+c2RuX2FkZC5hX2FkZHI7Cn0KCnN0YXRpYyBfX2lubGluZV9fIHZv aWQgZG5fZG4yZXRoKHVuc2lnbmVkIGNoYXIgKmV0aGFkZHIsIGRuX2FkZHJlc3MgYWRkcikKewog ICAgICAgIGV0aGFkZHJbMF0gPSAweEFBOwogICAgICAgIGV0aGFkZHJbMV0gPSAweDAwOwogICAg ICAgIGV0aGFkZHJbMl0gPSAweDA0OwogICAgICAgIGV0aGFkZHJbM10gPSAweDAwOwogICAgICAg IGV0aGFkZHJbNF0gPSAodW5zaWduZWQgY2hhcikoYWRkciAmIDB4ZmYpOwogICAgICAgIGV0aGFk ZHJbNV0gPSAodW5zaWduZWQgY2hhcikoYWRkciA+PiA4KTsKfQoKCgoKCgpleHRlcm4gc3RydWN0 IHNvY2sgKmRuX3NrbGlzdF9maW5kX2xpc3RlbmVyKHN0cnVjdCBzb2NrYWRkcl9kbiAqYWRkcik7 CmV4dGVybiBzdHJ1Y3Qgc29jayAqZG5fZmluZF9ieV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYik7 CgpleHRlcm4gY2hhciAqZG5fYWRkcjJhc2MoZG5fYWRkcmVzcywgY2hhciAqKTsKZXh0ZXJuIGlu dCBkbl9kZXN0cm95X3RpbWVyKHN0cnVjdCBzb2NrICpzayk7CgpleHRlcm4gaW50IGRuX3NvY2th ZGRyMnVzZXJuYW1lKHN0cnVjdCBzb2NrYWRkcl9kbiAqYWRkciwgdW5zaWduZWQgY2hhciAqYnVm LCB1bnNpZ25lZCBjaGFyIHR5cGUpOwpleHRlcm4gaW50IGRuX3VzZXJuYW1lMnNvY2thZGRyKHVu c2lnbmVkIGNoYXIgKmRhdGEsIGludCBsZW4sIHN0cnVjdCBzb2NrYWRkcl9kbiAqYWRkciwgdW5z aWduZWQgY2hhciAqdHlwZSk7CgpleHRlcm4gdm9pZCBkbl9zdGFydF9zbG93X3RpbWVyKHN0cnVj dCBzb2NrICpzayk7CmV4dGVybiB2b2lkIGRuX3N0b3Bfc2xvd190aW1lcihzdHJ1Y3Qgc29jayAq c2spOwpleHRlcm4gdm9pZCBkbl9zdGFydF9mYXN0X3RpbWVyKHN0cnVjdCBzb2NrICpzayk7CmV4 dGVybiB2b2lkIGRuX3N0b3BfZmFzdF90aW1lcihzdHJ1Y3Qgc29jayAqc2spOwoKZXh0ZXJuIGRu X2FkZHJlc3MgZGVjbmV0X2FkZHJlc3M7CmV4dGVybiB1bnNpZ25lZCBjaGFyIGRlY25ldF9ldGhl cl9hZGRyZXNzWzZdOwpleHRlcm4gaW50IGRlY25ldF9kZWJ1Z19sZXZlbDsKZXh0ZXJuIGludCBk ZWNuZXRfdGltZV93YWl0OwpleHRlcm4gaW50IGRlY25ldF9kbl9jb3VudDsKZXh0ZXJuIGludCBk ZWNuZXRfZGlfY291bnQ7CmV4dGVybiBpbnQgZGVjbmV0X2RyX2NvdW50OwpleHRlcm4gaW50IGRl Y25ldF9ub19mY19tYXhfY3duZDsKIyA5MiAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVk ZS9uZXQvc29jay5oIiAyCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9u ZXQvaXJkYS9pcmRhLmgiIDEKIyAzMyAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9u ZXQvaXJkYS9pcmRhLmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51 eC9pcmRhLmgiIDEKIyA2MCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9p cmRhLmgiCnR5cGVkZWYgZW51bSB7CiAgICAgICAgSVJEQV9URUtSQU1fRE9OR0xFID0gMCwKICAg ICAgICBJUkRBX0VTSV9ET05HTEUgPSAxLAogICAgICAgIElSREFfQUNUSVNZU19ET05HTEUgPSAy LAogICAgICAgIElSREFfQUNUSVNZU19QTFVTX0RPTkdMRSA9IDMsCiAgICAgICAgSVJEQV9HSVJC SUxfRE9OR0xFID0gNCwKICAgICAgICBJUkRBX0xJVEVMSU5LX0RPTkdMRSA9IDUsCiAgICAgICAg SVJEQV9BSVJQT1JUX0RPTkdMRSA9IDYsCiAgICAgICAgSVJEQV9PTERfQkVMS0lOX0RPTkdMRSA9 IDcsCiAgICAgICAgSVJEQV9FUDcyMTFfSVIgPSA4LAogICAgICAgIElSREFfTUNQMjEyMF9ET05H TEUgPSA5LAogICAgICAgIElSREFfQUNUMjAwTF9ET05HTEUgPSAxMCwKICAgICAgICBJUkRBX01B NjAwX0RPTkdMRSA9IDExLAp9IElSREFfRE9OR0xFOwoKCmVudW0gewogICAgICAgIElSREFQUk9U T19VTklUREFUQSA9IDAsCiAgICAgICAgSVJEQVBST1RPX1VMVFJBID0gMSwKICAgICAgICBJUkRB UFJPVE9fTUFYCn07CiMgMTE3ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4 L2lyZGEuaCIKc3RydWN0IHNvY2thZGRyX2lyZGEgewogICAgICAgIHNhX2ZhbWlseV90IHNpcl9m YW1pbHk7CiAgICAgICAgX191OCBzaXJfbHNhcF9zZWw7CiAgICAgICAgX191MzIgc2lyX2FkZHI7 CiAgICAgICAgY2hhciBzaXJfbmFtZVsyNV07Cn07CgpzdHJ1Y3QgaXJkYV9kZXZpY2VfaW5mbyB7 CiAgICAgICAgX191MzIgc2FkZHI7CiAgICAgICAgX191MzIgZGFkZHI7CiAgICAgICAgY2hhciBp bmZvWzIyXTsKICAgICAgICBfX3U4IGNoYXJzZXQ7CiAgICAgICAgX191OCBoaW50c1syXTsKfTsK CnN0cnVjdCBpcmRhX2RldmljZV9saXN0IHsKICAgICAgIF9fdTMyIGxlbjsKICAgICAgIHN0cnVj dCBpcmRhX2RldmljZV9pbmZvIGRldlsxXTsKfTsKCnN0cnVjdCBpcmRhX2lhc19zZXQgewogICAg ICAgIGNoYXIgaXJkYV9jbGFzc19uYW1lWzY0XTsKICAgICAgICBjaGFyIGlyZGFfYXR0cmliX25h bWVbMjU2XTsKICAgICAgICB1bnNpZ25lZCBpbnQgaXJkYV9hdHRyaWJfdHlwZTsKICAgICAgICB1 bmlvbiB7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaXJkYV9hdHRyaWJfaW50OwogICAg ICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hv cnQgbGVuOwogICAgICAgICAgICAgICAgICAgICAgICBfX3U4IG9jdGV0X3NlcVsxMDI0XTsKICAg ICAgICAgICAgICAgIH0gaXJkYV9hdHRyaWJfb2N0ZXRfc2VxOwogICAgICAgICAgICAgICAgc3Ry dWN0IHsKICAgICAgICAgICAgICAgICAgICAgICAgX191OCBsZW47CiAgICAgICAgICAgICAgICAg ICAgICAgIF9fdTggY2hhcnNldDsKICAgICAgICAgICAgICAgICAgICAgICAgX191OCBzdHJpbmdb MjU2XTsKICAgICAgICAgICAgICAgIH0gaXJkYV9hdHRyaWJfc3RyaW5nOwogICAgICAgIH0gYXR0 cmlidXRlOwogICAgICAgIF9fdTMyIGRhZGRyOwp9OwojIDE3MiAiL3Vzci9zcmMvbGludXgtMi40 LjIwLTgvaW5jbHVkZS9saW51eC9pcmRhLmgiCnN0cnVjdCBpZl9pcmRhX3FvcyB7CiAgICAgICAg dW5zaWduZWQgbG9uZyBiYXVkcmF0ZTsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBkYXRhX3NpemU7 CiAgICAgICAgdW5zaWduZWQgc2hvcnQgd2luZG93X3NpemU7CiAgICAgICAgdW5zaWduZWQgc2hv cnQgbWluX3R1cm5fdGltZTsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBtYXhfdHVybl90aW1lOwog ICAgICAgIHVuc2lnbmVkIGNoYXIgYWRkX2JvZnM7CiAgICAgICAgdW5zaWduZWQgY2hhciBsaW5r X2Rpc2M7Cn07CgoKc3RydWN0IGlmX2lyZGFfbGluZSB7CiAgICAgICAgX191OCBkdHI7CiAgICAg ICAgX191OCBydHM7Cn07CgoKc3RydWN0IGlmX2lyZGFfcmVxIHsKICAgICAgICB1bmlvbiB7CiAg ICAgICAgICAgICAgICBjaGFyIGlmcm5fbmFtZVsxNl07CiAgICAgICAgfSBpZnJfaWZybjsKCgog ICAgICAgIHVuaW9uIHsKICAgICAgICAgICAgICAgIHN0cnVjdCBpZl9pcmRhX2xpbmUgaWZydV9s aW5lOwogICAgICAgICAgICAgICAgc3RydWN0IGlmX2lyZGFfcW9zIGlmcnVfcW9zOwogICAgICAg ICAgICAgICAgdW5zaWduZWQgc2hvcnQgaWZydV9mbGFnczsKICAgICAgICAgICAgICAgIHVuc2ln bmVkIGludCBpZnJ1X3JlY2VpdmluZzsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpZnJ1 X21vZGU7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaWZydV9kb25nbGU7CiAgICAgICAg fSBpZnJfaWZydTsKfTsKIyAzNCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9uZXQv aXJkYS9pcmRhLmgiIDIKCnR5cGVkZWYgX191MzIgbWFnaWNfdDsKCiMgMSAiL3Vzci9zcmMvbGlu dXgtMi40LjIwLTgvaW5jbHVkZS9uZXQvaXJkYS9xb3MuaCIgMQojIDM3ICIvdXNyL3NyYy9saW51 eC0yLjQuMjAtOC9pbmNsdWRlL25ldC9pcmRhL3Fvcy5oIgojIDEgIi91c3Ivc3JjL2xpbnV4LTIu NC4yMC04L2luY2x1ZGUvbmV0L2lyZGEvcGFyYW1ldGVycy5oIiAxCiMgNDEgIi91c3Ivc3JjL2xp bnV4LTIuNC4yMC04L2luY2x1ZGUvbmV0L2lyZGEvcGFyYW1ldGVycy5oIgp0eXBlZGVmIGVudW0g ewogICAgICAgIFBWX0lOVEVHRVIsCiAgICAgICAgUFZfSU5UXzhfQklUUywKICAgICAgICBQVl9J TlRfMTZfQklUUywKICAgICAgICBQVl9TVFJJTkcsCiAgICAgICAgUFZfSU5UXzMyX0JJVFMsCiAg ICAgICAgUFZfT0NUX1NFUSwKICAgICAgICBQVl9OT19WQUxVRQp9IFBWX1RZUEU7CiMgNTkgIi91 c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbmV0L2lyZGEvcGFyYW1ldGVycy5oIgp0eXBl ZGVmIHVuaW9uIHsKICAgICAgICBjaGFyICpjOwogICAgICAgIF9fdTMyIGk7CiAgICAgICAgX191 MzIgKmlwOwp9IGlyZGFfcHZfdDsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBfX3U4IHBpOwog ICAgICAgIF9fdTggcGw7CiAgICAgICAgaXJkYV9wdl90IHB2Owp9IGlyZGFfcGFyYW1fdDsKCnR5 cGVkZWYgaW50ICgqUElfSEFORExFUikodm9pZCAqc2VsZiwgaXJkYV9wYXJhbV90ICpwYXJhbSwg aW50IGdldCk7CnR5cGVkZWYgaW50ICgqUFZfSEFORExFUikodm9pZCAqc2VsZiwgX191OCAqYnVm LCBpbnQgbGVuLCBfX3U4IHBpLAogICAgICAgICAgICAgICAgICAgICAgICAgIFBWX1RZUEUgdHlw ZSwgUElfSEFORExFUiBmdW5jKTsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBQSV9IQU5ETEVS IGZ1bmM7CiAgICAgICAgUFZfVFlQRSB0eXBlOwp9IHBpX21pbm9yX2luZm9fdDsKCnR5cGVkZWYg c3RydWN0IHsKICAgICAgICBwaV9taW5vcl9pbmZvX3QgKnBpX21pbm9yX2NhbGxfdGFibGU7CiAg ICAgICAgaW50IGxlbjsKfSBwaV9tYWpvcl9pbmZvX3Q7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAg ICAgcGlfbWFqb3JfaW5mb190ICp0YWJsZXM7CiAgICAgICAgaW50IGxlbjsKICAgICAgICBfX3U4 IHBpX21hc2s7CiAgICAgICAgaW50IHBpX21ham9yX29mZnNldDsKfSBwaV9wYXJhbV9pbmZvX3Q7 CgppbnQgaXJkYV9wYXJhbV9wYWNrX1I5MTgxNTU4NihfX3U4ICpidWYsIGNoYXIgKmZtdCwgLi4u KTsKaW50IGlyZGFfcGFyYW1fdW5wYWNrX1I3MzBjMzVjZShfX3U4ICpidWYsIGNoYXIgKmZtdCwg Li4uKTsKCmludCBpcmRhX3BhcmFtX2luc2VydF9SMjAzNmFkMDYodm9pZCAqc2VsZiwgX191OCBw aSwgX191OCAqYnVmLCBpbnQgbGVuLAogICAgICAgICAgICAgICAgICAgICAgcGlfcGFyYW1faW5m b190ICppbmZvKTsKaW50IGlyZGFfcGFyYW1fZXh0cmFjdF9SNmVhZTc4ZWModm9pZCAqc2VsZiwg X191OCAqYnVmLCBpbnQgbGVuLCBwaV9wYXJhbV9pbmZvX3QgKmluZm8pOwppbnQgaXJkYV9wYXJh bV9leHRyYWN0X2FsbF9SOTkzYWQxNGIodm9pZCAqc2VsZiwgX191OCAqYnVmLCBpbnQgbGVuLAog ICAgICAgICAgICAgICAgICAgICAgICAgICBwaV9wYXJhbV9pbmZvX3QgKmluZm8pOwojIDM4ICIv dXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL25ldC9pcmRhL3Fvcy5oIiAyCiMgNjQgIi91 c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbmV0L2lyZGEvcW9zLmgiCnR5cGVkZWYgc3Ry dWN0IHsKICAgICAgICBfX3UzMiB2YWx1ZTsKICAgICAgICBfX3UxNiBiaXRzOwp9IHFvc192YWx1 ZV90OwoKc3RydWN0IHFvc19pbmZvIHsKICAgICAgICBtYWdpY190IG1hZ2ljOwoKICAgICAgICBx b3NfdmFsdWVfdCBiYXVkX3JhdGU7CiAgICAgICAgcW9zX3ZhbHVlX3QgbWF4X3R1cm5fdGltZTsK ICAgICAgICBxb3NfdmFsdWVfdCBkYXRhX3NpemU7CiAgICAgICAgcW9zX3ZhbHVlX3Qgd2luZG93 X3NpemU7CiAgICAgICAgcW9zX3ZhbHVlX3QgYWRkaXRpb25hbF9ib2ZzOwogICAgICAgIHFvc192 YWx1ZV90IG1pbl90dXJuX3RpbWU7CiAgICAgICAgcW9zX3ZhbHVlX3QgbGlua19kaXNjX3RpbWU7 CgogICAgICAgIHFvc192YWx1ZV90IHBvd2VyOwp9OwoKZXh0ZXJuIGludCBzeXNjdGxfbWF4X2Jh dWRfcmF0ZTsKZXh0ZXJuIGludCBzeXNjdGxfbWF4X2luYWN0aXZlX3RpbWU7CgpleHRlcm4gX191 MzIgYmF1ZF9yYXRlc1tdOwpleHRlcm4gX191MzIgZGF0YV9zaXplc1tdOwpleHRlcm4gX191MzIg bWluX3R1cm5fdGltZXNbXTsKZXh0ZXJuIF9fdTMyIGFkZF9ib2ZzW107CmV4dGVybiBfX3UzMiBj b21wcmVzc2lvbnNbXTsKCnZvaWQgaXJkYV9pbml0X21heF9xb3NfY2FwYWJpbGllc19SNmIwNDNl YmEoc3RydWN0IHFvc19pbmZvICpxb3MpOwp2b2lkIGlyZGFfcW9zX2NvbXB1dGVfaW50ZXJzZWN0 aW9uKHN0cnVjdCBxb3NfaW5mbyAqLCBzdHJ1Y3QgcW9zX2luZm8gKik7CgpfX3UzMiBpcmxhcF9t YXhfbGluZV9jYXBhY2l0eShfX3UzMiBzcGVlZCwgX191MzIgbWF4X3R1cm5fdGltZSk7Cl9fdTMy IGlybGFwX3JlcXVlc3RlZF9saW5lX2NhcGFjaXR5KHN0cnVjdCBxb3NfaW5mbyAqcW9zKTsKCmlu dCBtc2JfaW5kZXgoX191MTYgYnl0ZSk7CnZvaWQgaXJkYV9xb3NfYml0c190b192YWx1ZV9SNDQ4 YjhhYWEoc3RydWN0IHFvc19pbmZvICpxb3MpOwojIDM4ICIvdXNyL3NyYy9saW51eC0yLjQuMjAt OC9pbmNsdWRlL25ldC9pcmRhL2lyZGEuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04 L2luY2x1ZGUvbmV0L2lyZGEvaXJxdWV1ZS5oIiAxCiMgNTggIi91c3Ivc3JjL2xpbnV4LTIuNC4y MC04L2luY2x1ZGUvbmV0L2lyZGEvaXJxdWV1ZS5oIgp0eXBlZGVmIHZvaWQgKCpGUkVFX0ZVTkMp KHZvaWQgKmFyZyk7CgoKCgoKCnN0cnVjdCBpcmRhX3F1ZXVlIHsKICAgICAgICBzdHJ1Y3QgaXJk YV9xdWV1ZSAqcV9uZXh0OwogICAgICAgIHN0cnVjdCBpcmRhX3F1ZXVlICpxX3ByZXY7CgogICAg ICAgIGNoYXIgcV9uYW1lWzMyXTsKICAgICAgICBfX3UzMiBxX2hhc2g7Cn07CnR5cGVkZWYgc3Ry dWN0IGlyZGFfcXVldWUgaXJkYV9xdWV1ZV90OwoKdHlwZWRlZiBzdHJ1Y3QgaGFzaGJpbl90IHsK ICAgICAgICBfX3UzMiBtYWdpYzsKICAgICAgICBpbnQgaGJfdHlwZTsKICAgICAgICBpbnQgaGJf c2l6ZTsKICAgICAgICBzcGlubG9ja190IGhiX211dGV4WzhdIF9fYXR0cmlidXRlX18oKGFsaWdu ZWQpKTsKICAgICAgICBpcmRhX3F1ZXVlX3QgKmhiX3F1ZXVlWzhdIF9fYXR0cmlidXRlX18oKGFs aWduZWQpKTsKCiAgICAgICAgaXJkYV9xdWV1ZV90KiBoYl9jdXJyZW50Owp9IGhhc2hiaW5fdDsK Cmhhc2hiaW5fdCAqaGFzaGJpbl9uZXdfUmYxZGQ3M2JjKGludCB0eXBlKTsKaW50IGhhc2hiaW5f ZGVsZXRlX1JmZGY4OTY4NShoYXNoYmluX3QqIGhhc2hiaW4sIEZSRUVfRlVOQyBmdW5jKTsKaW50 IGhhc2hiaW5fY2xlYXIoaGFzaGJpbl90KiBoYXNoYmluLCBGUkVFX0ZVTkMgZnJlZV9mdW5jKTsK dm9pZCBoYXNoYmluX2luc2VydF9SYTQxMGQwMzYoaGFzaGJpbl90KiBoYXNoYmluLCBpcmRhX3F1 ZXVlX3QqIGVudHJ5LCBfX3UzMiBoYXNodiwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciog bmFtZSk7CnZvaWQqIGhhc2hiaW5fZmluZF9SNjEzNjQ2NWMoaGFzaGJpbl90KiBoYXNoYmluLCBf X3UzMiBoYXNodiwgY2hhciogbmFtZSk7CnZvaWQqIGhhc2hiaW5fcmVtb3ZlX1I3MDljYjU2Yyho YXNoYmluX3QqIGhhc2hiaW4sIF9fdTMyIGhhc2h2LCBjaGFyKiBuYW1lKTsKdm9pZCogaGFzaGJp bl9yZW1vdmVfZmlyc3QoaGFzaGJpbl90ICpoYXNoYmluKTsKdm9pZCogaGFzaGJpbl9yZW1vdmVf dGhpc19SZjg4MjkzNWIoIGhhc2hiaW5fdCogaGFzaGJpbiwgaXJkYV9xdWV1ZV90KiBlbnRyeSk7 CmlyZGFfcXVldWVfdCAqaGFzaGJpbl9nZXRfZmlyc3RfUmJkNzcxMTQzKGhhc2hiaW5fdCAqaGFz aGJpbik7CmlyZGFfcXVldWVfdCAqaGFzaGJpbl9nZXRfbmV4dF9SNDZkNzJmMmEoaGFzaGJpbl90 ICpoYXNoYmluKTsKCnZvaWQgZW5xdWV1ZV9sYXN0KGlyZGFfcXVldWVfdCAqKnF1ZXVlLCBpcmRh X3F1ZXVlX3QqIGVsZW1lbnQpOwp2b2lkIGVucXVldWVfZmlyc3QoaXJkYV9xdWV1ZV90ICoqcXVl dWUsIGlyZGFfcXVldWVfdCogZWxlbWVudCk7CmlyZGFfcXVldWVfdCAqZGVxdWV1ZV9maXJzdChp cmRhX3F1ZXVlX3QgKipxdWV1ZSk7CiMgMzkgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1 ZGUvbmV0L2lyZGEvaXJkYS5oIiAyCiMgMTE5ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNs dWRlL25ldC9pcmRhL2lyZGEuaCIKdHlwZWRlZiBlbnVtIHsgRkxPV19TVE9QLCBGTE9XX1NUQVJU IH0gTE9DQUxfRkxPVzsKCgpzdHJ1Y3QgdHNhcF9jYjsKc3RydWN0IGxzYXBfY2I7CnN0cnVjdCBp cmlhcF9jYjsKc3RydWN0IGlhc192YWx1ZTsKc3RydWN0IGRpc2NvdmVyeV90OwoKCnN0cnVjdCBp cmRhX3NvY2sgewogICAgICAgIF9fdTMyIHNhZGRyOwogICAgICAgIF9fdTMyIGRhZGRyOwoKICAg ICAgICBzdHJ1Y3QgbHNhcF9jYiAqbHNhcDsKICAgICAgICBfX3U4IHBpZDsKCiAgICAgICAgc3Ry dWN0IHRzYXBfY2IgKnRzYXA7CiAgICAgICAgX191OCBkdHNhcF9zZWw7CiAgICAgICAgX191OCBz dHNhcF9zZWw7CgogICAgICAgIF9fdTMyIG1heF9zZHVfc2l6ZV9yeDsKICAgICAgICBfX3UzMiBt YXhfc2R1X3NpemVfdHg7CiAgICAgICAgX191MzIgbWF4X2RhdGFfc2l6ZTsKICAgICAgICBfX3U4 IG1heF9oZWFkZXJfc2l6ZTsKICAgICAgICBzdHJ1Y3QgcW9zX2luZm8gcW9zX3R4OwoKICAgICAg ICBfX3UxNiBtYXNrOwogICAgICAgIF9fdTE2IGhpbnRzOwoKICAgICAgICBfX3UzMiBja2V5Owog ICAgICAgIF9fdTMyIHNrZXk7CgogICAgICAgIHN0cnVjdCBpYXNfb2JqZWN0ICppYXNfb2JqOwog ICAgICAgIHN0cnVjdCBpcmlhcF9jYiAqaXJpYXA7CiAgICAgICAgc3RydWN0IGlhc192YWx1ZSAq aWFzX3Jlc3VsdDsKCiAgICAgICAgaGFzaGJpbl90ICpjYWNoZWxvZzsKICAgICAgICBzdHJ1Y3Qg ZGlzY292ZXJ5X3QgKmNhY2hlZGlzY292ZXJ5OwoKICAgICAgICBpbnQgbnNsb3RzOwoKICAgICAg ICBpbnQgZXJybm87CgogICAgICAgIHN0cnVjdCBzb2NrICpzazsKICAgICAgICB3YWl0X3F1ZXVl X2hlYWRfdCBxdWVyeV93YWl0OwogICAgICAgIHN0cnVjdCB0aW1lcl9saXN0IHdhdGNoZG9nOwoK ICAgICAgICBMT0NBTF9GTE9XIHR4X2Zsb3c7CiAgICAgICAgTE9DQUxfRkxPVyByeF9mbG93Owp9 OwoKCgoKCgoKdHlwZWRlZiB1bmlvbiB7CiAgICAgICAgX191MTYgd29yZDsKICAgICAgICBfX3U4 IGJ5dGVbMl07Cn0gX191MTZfaG9zdF9vcmRlcjsKCgoKCgpzdHJ1Y3QgaXJkYV9za2JfY2Igewog ICAgICAgIG1hZ2ljX3QgbWFnaWM7CiAgICAgICAgX191MzIgbmV4dF9zcGVlZDsKICAgICAgICBf X3UxNiBtdHQ7CiAgICAgICAgX191MTYgeGJvZnM7CiAgICAgICAgX191MTYgbmV4dF94Ym9mczsK ICAgICAgICB2b2lkICpjb250ZXh0OwogICAgICAgIHZvaWQgKCpkZXN0cnVjdG9yKShzdHJ1Y3Qg c2tfYnVmZiAqc2tiKTsKICAgICAgICBfX3UxNiB4Ym9mc19kZWxheTsKICAgICAgICBfX3U4IGxp bmU7Cn07CgoKdHlwZWRlZiBlbnVtIHsKICAgICAgICBTVEFUVVNfT0ssCiAgICAgICAgU1RBVFVT X0FCT1JURUQsCiAgICAgICAgU1RBVFVTX05PX0FDVElWSVRZLAogICAgICAgIFNUQVRVU19OT0lT WSwKICAgICAgICBTVEFUVVNfUkVNT1RFLAp9IExJTktfU1RBVFVTOwoKdHlwZWRlZiBlbnVtIHsK ICAgICAgICBMT0NLX05PX0NIQU5HRSwKICAgICAgICBMT0NLX0xPQ0tFRCwKICAgICAgICBMT0NL X1VOTE9DS0VELAp9IExPQ0tfU1RBVFVTOwoKdHlwZWRlZiBlbnVtIHsKICAgICAgICBMQVBfRElT Q19JTkRJQ0FUSU9OPTEsCiAgICAgICAgTEFQX05PX1JFU1BPTlNFLAogICAgICAgIExBUF9SRVNF VF9JTkRJQ0FUSU9OLAogICAgICAgIExBUF9GT1VORF9OT05FLAogICAgICAgIExBUF9NRURJQV9C VVNZLAogICAgICAgIExBUF9QUklNQVJZX0NPTkZMSUNULAp9IExBUF9SRUFTT047CgoKCgoKCnR5 cGVkZWYgZW51bSB7CiAgICAgICAgTE1fVVNFUl9SRVFVRVNUID0gMSwKICAgICAgICBMTV9MQVBf RElTQ09OTkVDVCwKICAgICAgICBMTV9DT05ORUNUX0ZBSUxVUkUsCiAgICAgICAgTE1fTEFQX1JF U0VULAogICAgICAgIExNX0lOSVRfRElTQ09OTkVDVCwKICAgICAgICBMTV9MU0FQX05PVENPTk4s CiAgICAgICAgTE1fTk9OX1JFU1BfQ0xJRU5ULAogICAgICAgIExNX05PX0FWQUlMX0NMSUVOVCwK ICAgICAgICBMTV9DT05OX0hBTEZfT1BFTiwKICAgICAgICBMTV9CQURfU09VUkNFX0FERFIsCn0g TE1fUkVBU09OOwoKCgoKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQgKCpkYXRhX2luZGlj YXRpb24pKHZvaWQgKnByaXYsIHZvaWQgKnNhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAgICAg ICAgaW50ICgqdWRhdGFfaW5kaWNhdGlvbikodm9pZCAqcHJpdiwgdm9pZCAqc2FwLCBzdHJ1Y3Qg c2tfYnVmZiAqc2tiKTsKICAgICAgICB2b2lkICgqY29ubmVjdF9jb25maXJtKSh2b2lkICppbnN0 YW5jZSwgdm9pZCAqc2FwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBx b3NfaW5mbyAqcW9zLCBfX3UzMiBtYXhfc2R1X3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX191OCBtYXhfaGVhZGVyX3NpemUsIHN0cnVjdCBza19idWZmICpza2IpOwogICAg ICAgIHZvaWQgKCpjb25uZWN0X2luZGljYXRpb24pKHZvaWQgKmluc3RhbmNlLCB2b2lkICpzYXAs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHFvc19pbmZvICpxb3Ms IF9fdTMyIG1heF9zZHVfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X3U4IG1heF9oZWFkZXJfc2l6ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAgICAgICAgdm9pZCAo KmRpc2Nvbm5lY3RfaW5kaWNhdGlvbikodm9pZCAqaW5zdGFuY2UsIHZvaWQgKnNhcCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMTV9SRUFTT04gcmVhc29uLCBzdHJ1Y3Qg c2tfYnVmZiAqKTsKICAgICAgICB2b2lkICgqZmxvd19pbmRpY2F0aW9uKSh2b2lkICppbnN0YW5j ZSwgdm9pZCAqc2FwLCBMT0NBTF9GTE9XIGZsb3cpOwogICAgICAgIHZvaWQgKCpzdGF0dXNfaW5k aWNhdGlvbikodm9pZCAqaW5zdGFuY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBMSU5LX1NUQVRVUyBsaW5rLCBMT0NLX1NUQVRVUyBsb2NrKTsKICAgICAgICB2b2lkICppbnN0 YW5jZTsKICAgICAgICBjaGFyIG5hbWVbMTZdOwp9IG5vdGlmeV90OwojIDk2ICIvdXNyL3NyYy9s aW51eC0yLjQuMjAtOC9pbmNsdWRlL25ldC9zb2NrLmgiIDIKCgoKc3RydWN0IGF0bV92Y2M7CgoK CiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9saW51eC9maWx0ZXIuaCIgMQoj IDE5ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oIgpzdHJ1 Y3Qgc29ja19maWx0ZXIKewogICAgICAgIF9fdTE2IGNvZGU7CiAgICAgICAgX191OCBqdDsKICAg ICAgICBfX3U4IGpmOwogICAgICAgIF9fdTMyIGs7Cn07CgpzdHJ1Y3Qgc29ja19mcHJvZwp7CiAg ICAgICAgdW5zaWduZWQgc2hvcnQgbGVuOwogICAgICAgIHN0cnVjdCBzb2NrX2ZpbHRlciAqZmls dGVyOwp9OwoKCnN0cnVjdCBza19maWx0ZXIKewogICAgICAgIGF0b21pY190IHJlZmNudDsKICAg ICAgICB1bnNpZ25lZCBpbnQgbGVuOwogICAgICAgIHN0cnVjdCBzb2NrX2ZpbHRlciBpbnNuc1sw XTsKfTsKCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNrX2ZpbHRlcl9sZW4oc3RydWN0IHNr X2ZpbHRlciAqZnApCnsKICAgICAgICByZXR1cm4gZnAtPmxlbipzaXplb2Yoc3RydWN0IHNvY2tf ZmlsdGVyKSArIHNpemVvZigqZnApOwp9CiMgMTM2ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9p bmNsdWRlL2xpbnV4L2ZpbHRlci5oIgpleHRlcm4gaW50IHNrX3J1bl9maWx0ZXJfUjg4ZGE3Yzdm KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrX2ZpbHRlciAqZmlsdGVyLCBpbnQgZmxl bik7CmV4dGVybiBpbnQgc2tfYXR0YWNoX2ZpbHRlcihzdHJ1Y3Qgc29ja19mcHJvZyAqZnByb2cs IHN0cnVjdCBzb2NrICpzayk7CmV4dGVybiBpbnQgc2tfY2hrX2ZpbHRlcl9SNTNjMDc2N2Moc3Ry dWN0IHNvY2tfZmlsdGVyICpmaWx0ZXIsIGludCBmbGVuKTsKIyAxMDQgIi91c3Ivc3JjL2xpbnV4 LTIuNC4yMC04L2luY2x1ZGUvbmV0L3NvY2suaCIgMgoKCgoKCgoKc3RydWN0IHVuaXhfb3B0IHsK ICAgICAgICBzdHJ1Y3QgdW5peF9hZGRyZXNzICphZGRyOwogICAgICAgIHN0cnVjdCBkZW50cnkg KiBkZW50cnk7CiAgICAgICAgc3RydWN0IHZmc21vdW50ICogbW50OwogICAgICAgIHN0cnVjdCBz ZW1hcGhvcmUgcmVhZHNlbTsKICAgICAgICBzdHJ1Y3Qgc29jayAqIG90aGVyOwogICAgICAgIHN0 cnVjdCBzb2NrICoqIGxpc3Q7CiAgICAgICAgc3RydWN0IHNvY2sgKiBnY190cmVlOwogICAgICAg IGF0b21pY190IGluZmxpZ2h0OwogICAgICAgIHJ3bG9ja190IGxvY2s7CiAgICAgICAgd2FpdF9x dWV1ZV9oZWFkX3QgcGVlcl93YWl0Owp9OwoKCgoKc3RydWN0IGlweF9vcHQgewogICAgICAgIGlw eF9hZGRyZXNzIGRlc3RfYWRkcjsKICAgICAgICBpcHhfaW50ZXJmYWNlICppbnRyZmM7CiAgICAg ICAgdW5zaWduZWQgc2hvcnQgcG9ydDsKCgoKICAgICAgICB1bnNpZ25lZCBzaG9ydCB0eXBlOwoK CgoKICAgICAgICB1bnNpZ25lZCBzaG9ydCBpcHhfbmNwX2Nvbm47Cn07CgoKCnN0cnVjdCBpcHY2 X3BpbmZvIHsKICAgICAgICBzdHJ1Y3QgaW42X2FkZHIgc2FkZHI7CiAgICAgICAgc3RydWN0IGlu Nl9hZGRyIHJjdl9zYWRkcjsKICAgICAgICBzdHJ1Y3QgaW42X2FkZHIgZGFkZHI7CiAgICAgICAg c3RydWN0IGluNl9hZGRyICpkYWRkcl9jYWNoZTsKCiAgICAgICAgX191MzIgZmxvd19sYWJlbDsK ICAgICAgICBfX3UzMiBmcmFnX3NpemU7CiAgICAgICAgaW50IGhvcF9saW1pdDsKICAgICAgICBp bnQgbWNhc3RfaG9wczsKICAgICAgICBpbnQgbWNhc3Rfb2lmOwoKCiAgICAgICAgdW5pb24gewog ICAgICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICAgICAgICAgX191OCBzcmNy dDoyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ4aW5mbzoxLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJ4aGxpbToxLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGhvcG9wdHM6MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RvcHRz OjEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aGhkcjoxLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJ4ZmxvdzoxOwogICAgICAgICAgICAgICAgfSBiaXRzOwog ICAgICAgICAgICAgICAgX191OCBhbGw7CiAgICAgICAgfSByeG9wdDsKCgogICAgICAgIF9fdTgg bWNfbG9vcDoxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3ZlcnI6MSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmRmbG93OjEsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcG10dWRpc2M6MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpcHY2b25seToxOwoKICAgICAgICBzdHJ1Y3QgaXB2Nl9tY19zb2NrbGlzdCAqaXB2Nl9tY19s aXN0OwogICAgICAgIHN0cnVjdCBpcHY2X2ZsX3NvY2tsaXN0ICppcHY2X2ZsX2xpc3Q7CiAgICAg ICAgX191MzIgZHN0X2Nvb2tpZTsKCiAgICAgICAgc3RydWN0IGlwdjZfdHhvcHRpb25zICpvcHQ7 CiAgICAgICAgc3RydWN0IHNrX2J1ZmYgKnBrdG9wdGlvbnM7Cn07CgpzdHJ1Y3QgcmF3Nl9vcHQg ewogICAgICAgIF9fdTMyIGNoZWNrc3VtOwogICAgICAgIF9fdTMyIG9mZnNldDsKCiAgICAgICAg c3RydWN0IGljbXA2X2ZpbHRlciBmaWx0ZXI7Cn07CiMgMjAxICIvdXNyL3NyYy9saW51eC0yLjQu MjAtOC9pbmNsdWRlL25ldC9zb2NrLmgiCnN0cnVjdCByYXdfb3B0IHsKICAgICAgICBzdHJ1Y3Qg aWNtcF9maWx0ZXIgZmlsdGVyOwp9OwoKCgpzdHJ1Y3QgaW5ldF9vcHQKewogICAgICAgIGludCB0 dGw7CiAgICAgICAgaW50IHRvczsKICAgICAgICB1bnNpZ25lZCBjbXNnX2ZsYWdzOwogICAgICAg IHN0cnVjdCBpcF9vcHRpb25zICpvcHQ7CiAgICAgICAgdW5zaWduZWQgY2hhciBoZHJpbmNsOwog ICAgICAgIF9fdTggbWNfdHRsOwogICAgICAgIF9fdTggbWNfbG9vcDsKICAgICAgICB1bnNpZ25l ZCByZWN2ZXJyIDogMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlYmluZCA6 IDE7CiAgICAgICAgX191MTYgaWQ7CiAgICAgICAgX191OCBwbXR1ZGlzYzsKICAgICAgICBpbnQg bWNfaW5kZXg7CiAgICAgICAgX191MzIgbWNfYWRkcjsKICAgICAgICBzdHJ1Y3QgaXBfbWNfc29j a2xpc3QgKm1jX2xpc3Q7Cn07CiMgMjUwICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRl L25ldC9zb2NrLmgiCnN0cnVjdCB0Y3Bfc2Fja19ibG9jayB7CiAgICAgICAgX191MzIgc3RhcnRf c2VxOwogICAgICAgIF9fdTMyIGVuZF9zZXE7Cn07CgpzdHJ1Y3QgdGNwX29wdCB7CiAgICAgICAg aW50IHRjcF9oZWFkZXJfbGVuOwoKCgoKCiAgICAgICAgX191MzIgcHJlZF9mbGFnczsKCgoKCgoK ICAgICAgICBfX3UzMiByY3Zfbnh0OwogICAgICAgIF9fdTMyIHNuZF9ueHQ7CgogICAgICAgIF9f dTMyIHNuZF91bmE7CiAgICAgICAgX191MzIgc25kX3NtbDsKICAgICAgICBfX3UzMiByY3ZfdHN0 YW1wOwogICAgICAgIF9fdTMyIGxzbmR0aW1lOwoKCiAgICAgICAgc3RydWN0IHsKICAgICAgICAg ICAgICAgIF9fdTggcGVuZGluZzsKICAgICAgICAgICAgICAgIF9fdTggcXVpY2s7CiAgICAgICAg ICAgICAgICBfX3U4IHBpbmdwb25nOwogICAgICAgICAgICAgICAgX191OCBibG9ja2VkOwogICAg ICAgICAgICAgICAgX191MzIgYXRvOwogICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB0aW1l b3V0OwogICAgICAgICAgICAgICAgX191MzIgbHJjdnRpbWU7CiAgICAgICAgICAgICAgICBfX3Ux NiBsYXN0X3NlZ19zaXplOwogICAgICAgICAgICAgICAgX191MTYgcmN2X21zczsKICAgICAgICB9 IGFjazsKCgogICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2tfYnVmZl9o ZWFkIHByZXF1ZXVlOwogICAgICAgICAgICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwog ICAgICAgICAgICAgICAgc3RydWN0IGlvdmVjICppb3Y7CiAgICAgICAgICAgICAgICBpbnQgbWVt b3J5OwogICAgICAgICAgICAgICAgaW50IGxlbjsKICAgICAgICB9IHVjb3B5OwoKICAgICAgICBf X3UzMiBzbmRfd2wxOwogICAgICAgIF9fdTMyIHNuZF93bmQ7CiAgICAgICAgX191MzIgbWF4X3dp bmRvdzsKICAgICAgICBfX3UzMiBwbXR1X2Nvb2tpZTsKICAgICAgICBfX3UxNiBtc3NfY2FjaGU7 CiAgICAgICAgX191MTYgbXNzX2NsYW1wOwogICAgICAgIF9fdTE2IGV4dF9oZWFkZXJfbGVuOwog ICAgICAgIF9fdTggY2Ffc3RhdGU7CiAgICAgICAgX191OCByZXRyYW5zbWl0czsKCiAgICAgICAg X191OCByZW9yZGVyaW5nOwogICAgICAgIF9fdTggcXVldWVfc2hydW5rOwogICAgICAgIF9fdTgg ZGVmZXJfYWNjZXB0OwoKCiAgICAgICAgX191OCBiYWNrb2ZmOwogICAgICAgIF9fdTMyIHNydHQ7 CiAgICAgICAgX191MzIgbWRldjsKICAgICAgICBfX3UzMiBtZGV2X21heDsKICAgICAgICBfX3Uz MiBydHR2YXI7CiAgICAgICAgX191MzIgcnR0X3NlcTsKICAgICAgICBfX3UzMiBydG87CgogICAg ICAgIF9fdTMyIHBhY2tldHNfb3V0OwogICAgICAgIF9fdTMyIGxlZnRfb3V0OwogICAgICAgIF9f dTMyIHJldHJhbnNfb3V0OwoKCgoKCiAgICAgICAgX191MzIgc25kX3NzdGhyZXNoOwogICAgICAg IF9fdTMyIHNuZF9jd25kOwogICAgICAgIF9fdTE2IHNuZF9jd25kX2NudDsKICAgICAgICBfX3Ux NiBzbmRfY3duZF9jbGFtcDsKICAgICAgICBfX3UzMiBzbmRfY3duZF91c2VkOwogICAgICAgIF9f dTMyIHNuZF9jd25kX3N0YW1wOwoKCiAgICAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0OwogICAg ICAgIHN0cnVjdCB0aW1lcl9saXN0IHJldHJhbnNtaXRfdGltZXI7CiAgICAgICAgc3RydWN0IHRp bWVyX2xpc3QgZGVsYWNrX3RpbWVyOwoKICAgICAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkIG91dF9v Zl9vcmRlcl9xdWV1ZTsKCiAgICAgICAgc3RydWN0IHRjcF9mdW5jICphZl9zcGVjaWZpYzsKICAg ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2VuZF9oZWFkOwogICAgICAgIHN0cnVjdCBwYWdlICpzbmRt c2dfcGFnZTsKICAgICAgICB1MzIgc25kbXNnX29mZjsKCiAgICAgICAgX191MzIgcmN2X3duZDsK ICAgICAgICBfX3UzMiByY3Zfd3VwOwogICAgICAgIF9fdTMyIHdyaXRlX3NlcTsKICAgICAgICBf X3UzMiBwdXNoZWRfc2VxOwogICAgICAgIF9fdTMyIGNvcGllZF9zZXE7CgoKCiAgICAgICAgY2hh ciB0c3RhbXBfb2ssCiAgICAgICAgICAgICAgICB3c2NhbGVfb2ssCiAgICAgICAgICAgICAgICBz YWNrX29rOwogICAgICAgIGNoYXIgc2F3X3RzdGFtcDsKICAgICAgICBfX3U4IHNuZF93c2NhbGU7 CiAgICAgICAgX191OCByY3Zfd3NjYWxlOwogICAgICAgIF9fdTggbm9uYWdsZTsKICAgICAgICBf X3U4IGtlZXBhbGl2ZV9wcm9iZXM7CgoKICAgICAgICBfX3UzMiByY3ZfdHN2YWw7CiAgICAgICAg X191MzIgcmN2X3RzZWNyOwogICAgICAgIF9fdTMyIHRzX3JlY2VudDsKICAgICAgICBsb25nIHRz X3JlY2VudF9zdGFtcDsKCgogICAgICAgIF9fdTE2IHVzZXJfbXNzOwogICAgICAgIF9fdTggZHNh Y2s7CiAgICAgICAgX191OCBlZmZfc2Fja3M7CiAgICAgICAgc3RydWN0IHRjcF9zYWNrX2Jsb2Nr IGR1cGxpY2F0ZV9zYWNrWzFdOwogICAgICAgIHN0cnVjdCB0Y3Bfc2Fja19ibG9jayBzZWxlY3Rp dmVfYWNrc1s0XTsKCiAgICAgICAgX191MzIgd2luZG93X2NsYW1wOwogICAgICAgIF9fdTMyIHJj dl9zc3RocmVzaDsKICAgICAgICBfX3U4IHByb2Jlc19vdXQ7CiAgICAgICAgX191OCBudW1fc2Fj a3M7CiAgICAgICAgX191MTYgYWR2bXNzOwoKICAgICAgICBfX3U4IHN5bl9yZXRyaWVzOwogICAg ICAgIF9fdTggZWNuX2ZsYWdzOwogICAgICAgIF9fdTE2IHByaW9yX3NzdGhyZXNoOwogICAgICAg IF9fdTMyIGxvc3Rfb3V0OwogICAgICAgIF9fdTMyIHNhY2tlZF9vdXQ7CiAgICAgICAgX191MzIg ZmFja2V0c19vdXQ7CiAgICAgICAgX191MzIgaGlnaF9zZXE7CgogICAgICAgIF9fdTMyIHJldHJh bnNfc3RhbXA7CgoKICAgICAgICBfX3UzMiB1bmRvX21hcmtlcjsKICAgICAgICBpbnQgdW5kb19y ZXRyYW5zOwogICAgICAgIF9fdTMyIHVyZ19zZXE7CiAgICAgICAgX191MTYgdXJnX2RhdGE7CiAg ICAgICAgX191OCBwZW5kaW5nOwogICAgICAgIF9fdTggdXJnX21vZGU7CiAgICAgICAgX191MzIg c25kX3VwOwojIDQxNCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9uZXQvc29jay5o IgogICAgICAgIHJ3bG9ja190IHN5bl93YWl0X2xvY2s7CiAgICAgICAgc3RydWN0IHRjcF9saXN0 ZW5fb3B0ICpsaXN0ZW5fb3B0OwoKCiAgICAgICAgc3RydWN0IG9wZW5fcmVxdWVzdCAqYWNjZXB0 X3F1ZXVlOwogICAgICAgIHN0cnVjdCBvcGVuX3JlcXVlc3QgKmFjY2VwdF9xdWV1ZV90YWlsOwoK ICAgICAgICBpbnQgd3JpdGVfcGVuZGluZzsKCiAgICAgICAgdW5zaWduZWQgaW50IGtlZXBhbGl2 ZV90aW1lOwogICAgICAgIHVuc2lnbmVkIGludCBrZWVwYWxpdmVfaW50dmw7CiAgICAgICAgaW50 IGxpbmdlcjI7CgogICAgICAgIGludCBmcnRvX2NvdW50ZXI7CiAgICAgICAgX191MzIgZnJ0b19o aWdobWFyazsKCiAgICAgICAgdW5zaWduZWQgbG9uZyBsYXN0X3N5bnFfb3ZlcmZsb3c7Cn07CiMg NDg3ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL25ldC9zb2NrLmgiCnR5cGVkZWYg c3RydWN0IHsKICAgICAgICBzcGlubG9ja190IHNsb2NrOwogICAgICAgIHVuc2lnbmVkIGludCB1 c2VyczsKICAgICAgICB3YWl0X3F1ZXVlX2hlYWRfdCB3cTsKfSBzb2NrZXRfbG9ja190OwoKCgoK CgoKc3RydWN0IHNvY2sgewoKICAgICAgICBfX3UzMiBkYWRkcjsKICAgICAgICBfX3UzMiByY3Zf c2FkZHI7CiAgICAgICAgX191MTYgZHBvcnQ7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgbnVtOwog ICAgICAgIGludCBib3VuZF9kZXZfaWY7CgoKICAgICAgICBzdHJ1Y3Qgc29jayAqbmV4dDsKICAg ICAgICBzdHJ1Y3Qgc29jayAqKnBwcmV2OwogICAgICAgIHN0cnVjdCBzb2NrICpiaW5kX25leHQ7 CiAgICAgICAgc3RydWN0IHNvY2sgKipiaW5kX3BwcmV2OwoKICAgICAgICB2b2xhdGlsZSB1bnNp Z25lZCBjaGFyIHN0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHphcHBlZDsK ICAgICAgICBfX3UxNiBzcG9ydDsKCiAgICAgICAgdW5zaWduZWQgc2hvcnQgZmFtaWx5OwogICAg ICAgIHVuc2lnbmVkIGNoYXIgcmV1c2U7CiAgICAgICAgdW5zaWduZWQgY2hhciBzaHV0ZG93bjsK ICAgICAgICBhdG9taWNfdCByZWZjbnQ7CgogICAgICAgIHNvY2tldF9sb2NrX3QgbG9jazsKICAg ICAgICBpbnQgcmN2YnVmOwoKICAgICAgICB3YWl0X3F1ZXVlX2hlYWRfdCAqc2xlZXA7CiAgICAg ICAgc3RydWN0IGRzdF9lbnRyeSAqZHN0X2NhY2hlOwogICAgICAgIHJ3bG9ja190IGRzdF9sb2Nr OwogICAgICAgIGF0b21pY190IHJtZW1fYWxsb2M7CiAgICAgICAgc3RydWN0IHNrX2J1ZmZfaGVh ZCByZWNlaXZlX3F1ZXVlOwogICAgICAgIGF0b21pY190IHdtZW1fYWxsb2M7CiAgICAgICAgc3Ry dWN0IHNrX2J1ZmZfaGVhZCB3cml0ZV9xdWV1ZTsKICAgICAgICBhdG9taWNfdCBvbWVtX2FsbG9j OwogICAgICAgIGludCB3bWVtX3F1ZXVlZDsKICAgICAgICBpbnQgZm9yd2FyZF9hbGxvYzsKICAg ICAgICBfX3UzMiBzYWRkcjsKICAgICAgICB1bnNpZ25lZCBpbnQgYWxsb2NhdGlvbjsKICAgICAg ICBpbnQgc25kYnVmOwogICAgICAgIHN0cnVjdCBzb2NrICpwcmV2OwoKCgoKICAgICAgICB2b2xh dGlsZSBjaGFyIGRlYWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmdpbmxpbmUsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAga2VlcG9wZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bGluZ2VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Ryb3ksCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbm9fY2hlY2ssCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYnJvYWRjYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJzZGlz bTsKICAgICAgICB1bnNpZ25lZCBjaGFyIGRlYnVnOwogICAgICAgIHVuc2lnbmVkIGNoYXIgcmN2 dHN0YW1wOwogICAgICAgIHVuc2lnbmVkIGNoYXIgdXNlX3dyaXRlX3F1ZXVlOwogICAgICAgIHVu c2lnbmVkIGNoYXIgdXNlcmxvY2tzOwoKICAgICAgICBpbnQgcm91dGVfY2FwczsKICAgICAgICBp bnQgcHJvYzsKICAgICAgICB1bnNpZ25lZCBsb25nIGxpbmdlcnRpbWU7CgogICAgICAgIGludCBo YXNoZW50OwogICAgICAgIHN0cnVjdCBzb2NrICpwYWlyOwoKCgoKCiAgICAgICAgc3RydWN0IHsK ICAgICAgICAgICAgICAgIHN0cnVjdCBza19idWZmICpoZWFkOwogICAgICAgICAgICAgICAgc3Ry dWN0IHNrX2J1ZmYgKnRhaWw7CiAgICAgICAgfSBiYWNrbG9nOwoKICAgICAgICByd2xvY2tfdCBj YWxsYmFja19sb2NrOwoKCiAgICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCBlcnJvcl9xdWV1ZTsK CiAgICAgICAgc3RydWN0IHByb3RvICpwcm90OwoKCiAgICAgICAgdW5pb24gewogICAgICAgICAg ICAgICAgc3RydWN0IGlwdjZfcGluZm8gYWZfaW5ldDY7CiAgICAgICAgfSBuZXRfcGluZm87CgoK ICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgdGNwX29wdCBhZl90Y3A7Cgog ICAgICAgICAgICAgICAgc3RydWN0IHJhd19vcHQgdHBfcmF3NDsKCgogICAgICAgICAgICAgICAg c3RydWN0IHJhdzZfb3B0IHRwX3JhdzsKCgoKCgogICAgICAgIH0gdHBfcGluZm87CgogICAgICAg IGludCBlcnIsIGVycl9zb2Z0OwoKCgogICAgICAgIHVuc2lnbmVkIHNob3J0IGFja19iYWNrbG9n OwogICAgICAgIHVuc2lnbmVkIHNob3J0IG1heF9hY2tfYmFja2xvZzsKICAgICAgICBfX3UzMiBw cmlvcml0eTsKICAgICAgICB1bnNpZ25lZCBzaG9ydCB0eXBlOwogICAgICAgIHVuc2lnbmVkIGNo YXIgbG9jYWxyb3V0ZTsKICAgICAgICB1bnNpZ25lZCBjaGFyIHByb3RvY29sOwogICAgICAgIHN0 cnVjdCB1Y3JlZCBwZWVyY3JlZDsKICAgICAgICBpbnQgcmN2bG93YXQ7CiAgICAgICAgbG9uZyBy Y3Z0aW1lbzsKICAgICAgICBsb25nIHNuZHRpbWVvOwoKCgogICAgICAgIHN0cnVjdCBza19maWx0 ZXIgKmZpbHRlcjsKCgoKCgogICAgICAgIHVuaW9uIHsKICAgICAgICAgICAgICAgIHZvaWQgKmRl c3RydWN0X2hvb2s7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgdW5peF9vcHQgYWZfdW5peDsKCiAg ICAgICAgICAgICAgICBzdHJ1Y3QgaW5ldF9vcHQgYWZfaW5ldDsKCgogICAgICAgICAgICAgICAg c3RydWN0IGF0YWxrX3NvY2sgYWZfYXQ7CgoKICAgICAgICAgICAgICAgIHN0cnVjdCBpcHhfb3B0 IGFmX2lweDsKCgogICAgICAgICAgICAgICAgc3RydWN0IGRuX3NjcCBkbjsKCgogICAgICAgICAg ICAgICAgc3RydWN0IHBhY2tldF9vcHQgKmFmX3BhY2tldDsKCgoKCgogICAgICAgICAgICAgICAg YXgyNV9jYiAqYXgyNTsKCgogICAgICAgICAgICAgICAgbnJfY2IgKm5yOwoKCiAgICAgICAgICAg ICAgICByb3NlX2NiICpyb3NlOwoKCgoKICAgICAgICAgICAgICAgIHN0cnVjdCBuZXRsaW5rX29w dCAqYWZfbmV0bGluazsKCgoKCiAgICAgICAgICAgICAgICBzdHJ1Y3QgYXRtX3ZjYyAqYWZfYXRt OwoKCiAgICAgICAgICAgICAgICBzdHJ1Y3QgaXJkYV9zb2NrICppcmRhOwoKCiAgICAgICAgICAg ICAgIHN0cnVjdCB3YW5waXBlX29wdCAqYWZfd2FucGlwZTsKCiAgICAgICAgfSBwcm90aW5mbzsK CgoKICAgICAgICBzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKICAgICAgICBzdHJ1Y3QgdGltZXZh bCBzdGFtcDsKCgogICAgICAgIHN0cnVjdCBzb2NrZXQgKnNvY2tldDsKCgogICAgICAgIHZvaWQg KnVzZXJfZGF0YTsKCgogICAgICAgIHZvaWQgKCpzdGF0ZV9jaGFuZ2UpKHN0cnVjdCBzb2NrICpz ayk7CiAgICAgICAgdm9pZCAoKmRhdGFfcmVhZHkpKHN0cnVjdCBzb2NrICpzayxpbnQgYnl0ZXMp OwogICAgICAgIHZvaWQgKCp3cml0ZV9zcGFjZSkoc3RydWN0IHNvY2sgKnNrKTsKICAgICAgICB2 b2lkICgqZXJyb3JfcmVwb3J0KShzdHJ1Y3Qgc29jayAqc2spOwoKICAgICAgICBpbnQgKCpiYWNr bG9nX3JjdikgKHN0cnVjdCBzb2NrICpzaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAgICAgICAgdm9pZCAoKmNy ZWF0ZV9jaGlsZCkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqbmV3c2spOwogICAgICAg IHZvaWQgKCpkZXN0cnVjdCkoc3RydWN0IHNvY2sgKnNrKTsKfTsKIyA3MTAgIi91c3Ivc3JjL2xp bnV4LTIuNC4yMC04L2luY2x1ZGUvbmV0L3NvY2suaCIKc3RydWN0IHByb3RvIHsKICAgICAgICB2 b2lkICgqY2xvc2UpKHN0cnVjdCBzb2NrICpzaywKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGxvbmcgdGltZW91dCk7CiAgICAgICAgaW50ICgqY29ubmVjdCkoc3RydWN0 IHNvY2sgKnNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IHNvY2thZGRyICp1YWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCBhZGRyX2xlbik7CiAgICAgICAgaW50ICgqZGlzY29ubmVjdCkoc3RydWN0IHNvY2sgKnNr LCBpbnQgZmxhZ3MpOwoKICAgICAgICBzdHJ1Y3Qgc29jayAqICgqYWNjZXB0KSAoc3RydWN0IHNv Y2sgKnNrLCBpbnQgZmxhZ3MsIGludCAqZXJyKTsKCiAgICAgICAgaW50ICgqaW9jdGwpKHN0cnVj dCBzb2NrICpzaywgaW50IGNtZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1bnNpZ25lZCBsb25nIGFyZyk7CiAgICAgICAgaW50ICgqaW5pdCkoc3RydWN0IHNvY2sg KnNrKTsKICAgICAgICBpbnQgKCpkZXN0cm95KShzdHJ1Y3Qgc29jayAqc2spOwogICAgICAgIHZv aWQgKCpzaHV0ZG93bikoc3RydWN0IHNvY2sgKnNrLCBpbnQgaG93KTsKICAgICAgICBpbnQgKCpz ZXRzb2Nrb3B0KShzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBvcHRuYW1lLCBjaGFyICpvcHR2YWwsIGludCBvcHRs ZW4pOwogICAgICAgIGludCAoKmdldHNvY2tvcHQpKHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVs LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9wdG5hbWUsIGNo YXIgKm9wdHZhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAq b3B0aW9uKTsKICAgICAgICBpbnQgKCpzZW5kbXNnKShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBt c2doZHIgKm1zZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCBsZW4pOwogICAgICAgIGludCAoKnJlY3Ztc2cpKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1z Z2hkciAqbXNnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxl biwgaW50IG5vYmxvY2ssIGludCBmbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCAqYWRkcl9sZW4pOwogICAgICAgIGludCAoKmJpbmQpKHN0cnVjdCBzb2Nr ICpzaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2Nr YWRkciAqdWFkZHIsIGludCBhZGRyX2xlbik7CgogICAgICAgIGludCAoKmJhY2tsb2dfcmN2KSAo c3RydWN0IHNvY2sgKnNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKCgogICAgICAgIHZvaWQgKCpoYXNoKShzdHJ1 Y3Qgc29jayAqc2spOwogICAgICAgIHZvaWQgKCp1bmhhc2gpKHN0cnVjdCBzb2NrICpzayk7CiAg ICAgICAgaW50ICgqZ2V0X3BvcnQpKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgc251 bSk7CgogICAgICAgIGNoYXIgbmFtZVszMl07CgogICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAg ICAgICBpbnQgaW51c2U7CiAgICAgICAgICAgICAgICB1OCBfX3BhZFsoMSA8PCAoKDUpKSkgLSBz aXplb2YoaW50KV07CiAgICAgICAgfSBzdGF0c1sxXTsKfTsKCgpzdGF0aWMgX19pbmxpbmVfXyB2 b2lkIHNvY2tfcHJvdF9pbmNfdXNlKHN0cnVjdCBwcm90byAqcHJvdCkKewogICAgICAgIHByb3Qt PnN0YXRzWzBdLmludXNlKys7Cn0KCnN0YXRpYyBfX2lubGluZV9fIHZvaWQgc29ja19wcm90X2Rl Y191c2Uoc3RydWN0IHByb3RvICpwcm90KQp7CiAgICAgICAgcHJvdC0+c3RhdHNbMF0uaW51c2Ut LTsKfQojIDc5NCAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9uZXQvc29jay5oIgpl eHRlcm4gdm9pZCBfX2xvY2tfc29ja19SZGVhY2ZhYmMoc3RydWN0IHNvY2sgKnNrKTsKZXh0ZXJu IHZvaWQgX19yZWxlYXNlX3NvY2tfUjhjNDcyMjAyKHN0cnVjdCBzb2NrICpzayk7CiMgODE3ICIv dXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL25ldC9zb2NrLmgiCmV4dGVybiBzdHJ1Y3Qg c29jayAqIHNrX2FsbG9jX1IxZDNlNTU5OShpbnQgZmFtaWx5LCBpbnQgcHJpb3JpdHksIGludCB6 ZXJvX2l0KTsKZXh0ZXJuIHZvaWQgc2tfZnJlZV9SNzE3NzE4MDEoc3RydWN0IHNvY2sgKnNrKTsK CmV4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAqc29ja193bWFsbG9jX1JhNjlhNDY4MyhzdHJ1Y3Qgc29j ayAqc2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp Z25lZCBsb25nIHNpemUsIGludCBmb3JjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCBwcmlvcml0eSk7CmV4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAqc29j a19ybWFsbG9jX1JhMWE5NDllZChzdHJ1Y3Qgc29jayAqc2ssCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHNpemUsIGludCBmb3JjZSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwcmlvcml0 eSk7CmV4dGVybiB2b2lkIHNvY2tfd2ZyZWVfUjYwNDViYzBkKHN0cnVjdCBza19idWZmICpza2Ip OwpleHRlcm4gdm9pZCBzb2NrX3JmcmVlX1I3M2VmZmIwNChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsK CmV4dGVybiBpbnQgc29ja19zZXRzb2Nrb3B0X1IyOThhYjZjNihzdHJ1Y3Qgc29ja2V0ICpzb2Nr LCBpbnQgbGV2ZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCBvcCwgY2hhciAqb3B0dmFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgb3B0bGVuKTsKCmV4dGVybiBpbnQgc29ja19nZXRzb2Nrb3B0 X1I2NjlkMmU3MyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvcCwgY2hhciAqb3B0dmFsLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKm9wdGxl bik7CmV4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAqc29ja19hbGxvY19zZW5kX3NrYl9SOWM1NTBkMTUo c3RydWN0IHNvY2sgKnNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbm9ibG9jaywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmVycmNvZGUpOwpleHRl cm4gc3RydWN0IHNrX2J1ZmYgKnNvY2tfYWxsb2Nfc2VuZF9wc2tiX1JiOTMxZTk5YShzdHJ1Y3Qg c29jayAqc2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHVuc2lnbmVkIGxvbmcgaGVhZGVyX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBkYXRhX2xlbiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5v YmxvY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCAqZXJyY29kZSk7CmV4dGVybiB2b2lkICpzb2NrX2ttYWxsb2NfUmRlNDJmNGQ0KHN0 cnVjdCBzb2NrICpzaywgaW50IHNpemUsIGludCBwcmlvcml0eSk7CmV4dGVybiB2b2lkIHNvY2tf a2ZyZWVfc19SM2RhOTA0N2Ioc3RydWN0IHNvY2sgKnNrLCB2b2lkICptZW0sIGludCBzaXplKTsK CgoKCgpleHRlcm4gaW50IHNvY2tfbm9fcmVsZWFzZV9SZTRmZDBmMTIoc3RydWN0IHNvY2tldCAq KTsKZXh0ZXJuIGludCBzb2NrX25vX2JpbmRfUjIxMjliYWI5KHN0cnVjdCBzb2NrZXQgKiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRy ICosIGludCk7CmV4dGVybiBpbnQgc29ja19ub19jb25uZWN0X1I4YmQ5NmVjNyhzdHJ1Y3Qgc29j a2V0ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCBzb2NrYWRkciAqLCBpbnQsIGludCk7CmV4dGVybiBpbnQgc29ja19ub19zb2NrZXRwYWly X1I5Njk0OWE3NyhzdHJ1Y3Qgc29ja2V0ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrZXQgKik7CmV4dGVybiBpbnQgc29ja19u b19hY2NlcHRfUmYwY2IzNjZhKHN0cnVjdCBzb2NrZXQgKiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2V0ICosIGludCk7CmV4dGVybiBp bnQgc29ja19ub19nZXRuYW1lX1IwOTU1YmIzNihzdHJ1Y3Qgc29ja2V0ICosCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqLCBp bnQgKiwgaW50KTsKZXh0ZXJuIHVuc2lnbmVkIGludCBzb2NrX25vX3BvbGxfUmExMTkzMmEwKHN0 cnVjdCBmaWxlICosIHN0cnVjdCBzb2NrZXQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICopOwpleHRlcm4gaW50 IHNvY2tfbm9faW9jdGxfUjMyMGU3ZGQwKHN0cnVjdCBzb2NrZXQgKiwgdW5zaWduZWQgaW50LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9u Zyk7CmV4dGVybiBpbnQgc29ja19ub19saXN0ZW5fUjIwMDM5ZTMxKHN0cnVjdCBzb2NrZXQgKiwg aW50KTsKZXh0ZXJuIGludCBzb2NrX25vX3NodXRkb3duX1JlZjFmZmIwZShzdHJ1Y3Qgc29ja2V0 ICosIGludCk7CmV4dGVybiBpbnQgc29ja19ub19nZXRzb2Nrb3B0X1IzNmM4MjUyNChzdHJ1Y3Qg c29ja2V0ICosIGludCAsIGludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY2hhciAqLCBpbnQgKik7CmV4dGVybiBpbnQgc29ja19ub19zZXRzb2Nr b3B0X1I1NjkwZmFiNihzdHJ1Y3Qgc29ja2V0ICosIGludCwgaW50LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICosIGludCk7CmV4dGVybiBp bnQgc29ja19ub19mY250bChzdHJ1Y3Qgc29ja2V0ICosCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOwpleHRl cm4gaW50IHNvY2tfbm9fc2VuZG1zZ19SNDljNjJhZGMoc3RydWN0IHNvY2tldCAqLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbXNnaGRyICos IGludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IHNjbV9jb29raWUgKik7CmV4dGVybiBpbnQgc29ja19ub19yZWN2bXNnX1I1OGQzMzA5MShz dHJ1Y3Qgc29ja2V0ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCBtc2doZHIgKiwgaW50LCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY21fY29va2llICopOwpleHRlcm4gaW50 IHNvY2tfbm9fbW1hcF9SN2I3OWU2NTUoc3RydWN0IGZpbGUgKmZpbGUsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrZXQgKnNvY2ssCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2bV9hcmVhX3N0 cnVjdCAqdm1hKTsKZXh0ZXJuIHNzaXplX3Qgc29ja19ub19zZW5kcGFnZV9SZmY0MjBiN2Yoc3Ry dWN0IHNvY2tldCAqc29jaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IHBhZ2UgKnBhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCBvZmZzZXQsIHNpemVfdCBzaXplLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MpOwoKCgoKCmV4dGVy biB2b2lkIHNvY2tfZGVmX2Rlc3RydWN0KHN0cnVjdCBzb2NrICopOwoKCmV4dGVybiB2b2lkIHNv Y2tfaW5pdF9kYXRhX1IyNTNmMGY3MyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29jayAq c2spOwoKZXh0ZXJuIHZvaWQgc2tsaXN0X3JlbW92ZV9zb2NrZXRfUjkxYWU3YzBhKHN0cnVjdCBz b2NrICoqbGlzdCwgc3RydWN0IHNvY2sgKnNrKTsKZXh0ZXJuIHZvaWQgc2tsaXN0X2luc2VydF9z b2NrZXRfUmI5ZjFkYTNiKHN0cnVjdCBzb2NrICoqbGlzdCwgc3RydWN0IHNvY2sgKnNrKTsKZXh0 ZXJuIHZvaWQgc2tsaXN0X2Rlc3Ryb3lfc29ja2V0X1JiMjFjZGRmNyhzdHJ1Y3Qgc29jayAqKmxp c3QsIHN0cnVjdCBzb2NrICpzayk7CiMgOTE2ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNs dWRlL25ldC9zb2NrLmgiCnN0YXRpYyBpbmxpbmUgaW50IHNrX2ZpbHRlcihzdHJ1Y3Qgc2tfYnVm ZiAqc2tiLCBzdHJ1Y3Qgc2tfZmlsdGVyICpmaWx0ZXIpCnsKICAgICAgICBpbnQgcGt0X2xlbjsK CiAgICAgICAgcGt0X2xlbiA9IHNrX3J1bl9maWx0ZXJfUjg4ZGE3YzdmKHNrYiwgZmlsdGVyLT5p bnNucywgZmlsdGVyLT5sZW4pOwogICAgICAgIGlmKCFwa3RfbGVuKQogICAgICAgICAgICAgICAg cmV0dXJuIDE7CiAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgc2tiX3RyaW0oc2tiLCBwa3Rf bGVuKTsKCiAgICAgICAgcmV0dXJuIDA7Cn0KIyA5MzcgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04 L2luY2x1ZGUvbmV0L3NvY2suaCIKc3RhdGljIGlubGluZSB2b2lkIHNrX2ZpbHRlcl9yZWxlYXNl KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2ZpbHRlciAqZnApCnsKICAgICAgICB1bnNpZ25l ZCBpbnQgc2l6ZSA9IHNrX2ZpbHRlcl9sZW4oZnApOwoKICAgICAgICBhdG9taWNfc3ViKHNpemUs ICZzay0+b21lbV9hbGxvYyk7CgogICAgICAgIGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZmcC0+ cmVmY250KSkKICAgICAgICAgICAgICAgIGtmcmVlX1IwMzdhMGNiYShmcCk7Cn0KCnN0YXRpYyBp bmxpbmUgdm9pZCBza19maWx0ZXJfY2hhcmdlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2Zp bHRlciAqZnApCnsKICAgICAgICBhdG9taWNfaW5jKCZmcC0+cmVmY250KTsKICAgICAgICBhdG9t aWNfYWRkKHNrX2ZpbHRlcl9sZW4oZnApLCAmc2stPm9tZW1fYWxsb2MpOwp9CiMgOTg2ICIvdXNy L3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL25ldC9zb2NrLmgiCnN0YXRpYyBpbmxpbmUgdm9p ZCBzb2NrX2hvbGQoc3RydWN0IHNvY2sgKnNrKQp7CiAgICAgICAgYXRvbWljX2luYygmc2stPnJl ZmNudCk7Cn0KCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBfX3NvY2tfcHV0KHN0cnVjdCBzb2NrICpz aykKewogICAgICAgIGF0b21pY19kZWMoJnNrLT5yZWZjbnQpOwp9CgoKc3RhdGljIGlubGluZSB2 b2lkIHNvY2tfcHV0KHN0cnVjdCBzb2NrICpzaykKewogICAgICAgIGlmIChhdG9taWNfZGVjX2Fu ZF90ZXN0KCZzay0+cmVmY250KSkKICAgICAgICAgICAgICAgIHNrX2ZyZWVfUjcxNzcxODAxKHNr KTsKfQojIDEwMTMgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbmV0L3NvY2suaCIK c3RhdGljIGlubGluZSB2b2lkIHNvY2tfb3JwaGFuKHN0cnVjdCBzb2NrICpzaykKewogICAgICAg IGRvIHsgZG8geyAoKHZvaWQpKCgwKSksIGlycV9zdGF0X1JjYTAyODNiMFswXS5fX2xvY2FsX2Jo X2NvdW50KSsrOyBfX2FzbV9fIF9fdm9sYXRpbGVfXygiIjogOiA6Im1lbW9yeSIpOyB9IHdoaWxl ICgwKTsgKHZvaWQpKCZzay0+Y2FsbGJhY2tfbG9jayk7IH0gd2hpbGUgKDApOwogICAgICAgIHNr LT5kZWFkID0gMTsKICAgICAgICBzay0+c29ja2V0ID0gKCh2b2lkICopMCk7CiAgICAgICAgc2st PnNsZWVwID0gKCh2b2lkICopMCk7CiAgICAgICAgZG8geyBkbyB7IH0gd2hpbGUoMCk7IGRvIHsg dW5zaWduZWQgaW50ICpwdHIgPSAmKCh2b2lkKSgoMCkpLCBpcnFfc3RhdF9SY2EwMjgzYjBbMF0u X19sb2NhbF9iaF9jb3VudCk7IF9fYXNtX18gX192b2xhdGlsZV9fKCIiOiA6IDoibWVtb3J5Iik7 IGlmICghLS0qcHRyKSBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICJjbXBsICQwLCAtOCglMCk7IiAi am56IDJmOyIgIjE6OyIgIi5zdWJzZWN0aW9uIDFcblx0IiAiIiAiLmlmbmRlZiAiICIudGV4dC5s b2NrLiIgInNrZ2Vwbm1pIiAiXG5cdCIgIi50ZXh0LmxvY2suIiAic2tnZXBubWkiICI6XG5cdCIg Ii5lbmRpZlxuXHQiICIyOiBwdXNobCAlJWVheDsgcHVzaGwgJSVlY3g7IHB1c2hsICUlZWR4OyIg ImNhbGwgJWMxOyIgInBvcGwgJSVlZHg7IHBvcGwgJSVlY3g7IHBvcGwgJSVlYXg7IiAiam1wIDFi OyIgIi5wcmV2aW91c1xuXHQiIDogOiAiciIgKHB0ciksICJpIiAoZG9fc29mdGlycV9SZjBhNTI5 YjcpICk7IH0gd2hpbGUgKDApOyB9IHdoaWxlICgwKTsKfQoKc3RhdGljIGlubGluZSB2b2lkIHNv Y2tfZ3JhZnQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2V0ICpwYXJlbnQpCnsKICAgICAg ICBkbyB7IGRvIHsgKCh2b2lkKSgoMCkpLCBpcnFfc3RhdF9SY2EwMjgzYjBbMF0uX19sb2NhbF9i aF9jb3VudCkrKzsgX19hc21fXyBfX3ZvbGF0aWxlX18oIiI6IDogOiJtZW1vcnkiKTsgfSB3aGls ZSAoMCk7ICh2b2lkKSgmc2stPmNhbGxiYWNrX2xvY2spOyB9IHdoaWxlICgwKTsKICAgICAgICBz ay0+c2xlZXAgPSAmcGFyZW50LT53YWl0OwogICAgICAgIHBhcmVudC0+c2sgPSBzazsKICAgICAg ICBzay0+c29ja2V0ID0gcGFyZW50OwogICAgICAgIGRvIHsgZG8geyB9IHdoaWxlKDApOyBkbyB7 IHVuc2lnbmVkIGludCAqcHRyID0gJigodm9pZCkoKDApKSwgaXJxX3N0YXRfUmNhMDI4M2IwWzBd Ll9fbG9jYWxfYmhfY291bnQpOyBfX2FzbV9fIF9fdm9sYXRpbGVfXygiIjogOiA6Im1lbW9yeSIp OyBpZiAoIS0tKnB0cikgX19hc21fXyBfX3ZvbGF0aWxlX18gKCAiY21wbCAkMCwgLTgoJTApOyIg ImpueiAyZjsiICIxOjsiICIuc3Vic2VjdGlvbiAxXG5cdCIgIiIgIi5pZm5kZWYgIiAiLnRleHQu bG9jay4iICJza2dlcG5taSIgIlxuXHQiICIudGV4dC5sb2NrLiIgInNrZ2Vwbm1pIiAiOlxuXHQi ICIuZW5kaWZcblx0IiAiMjogcHVzaGwgJSVlYXg7IHB1c2hsICUlZWN4OyBwdXNobCAlJWVkeDsi ICJjYWxsICVjMTsiICJwb3BsICUlZWR4OyBwb3BsICUlZWN4OyBwb3BsICUlZWF4OyIgImptcCAx YjsiICIucHJldmlvdXNcblx0IiA6IDogInIiIChwdHIpLCAiaSIgKGRvX3NvZnRpcnFfUmYwYTUy OWI3KSApOyB9IHdoaWxlICgwKTsgfSB3aGlsZSAoMCk7Cn0KCnN0YXRpYyBpbmxpbmUgaW50IHNv Y2tfaV91aWQoc3RydWN0IHNvY2sgKnNrKQp7CiAgICAgICAgaW50IHVpZDsKCiAgICAgICAgKHZv aWQpKCZzay0+Y2FsbGJhY2tfbG9jayk7CiAgICAgICAgdWlkID0gc2stPnNvY2tldCA/IHNrLT5z b2NrZXQtPmlub2RlLT5pX3VpZCA6IDA7CiAgICAgICAgZG8geyB9IHdoaWxlKDApOwogICAgICAg IHJldHVybiB1aWQ7Cn0KCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzb2NrX2lfaW5vKHN0 cnVjdCBzb2NrICpzaykKewogICAgICAgIHVuc2lnbmVkIGxvbmcgaW5vOwoKICAgICAgICAodm9p ZCkoJnNrLT5jYWxsYmFja19sb2NrKTsKICAgICAgICBpbm8gPSBzay0+c29ja2V0ID8gc2stPnNv Y2tldC0+aW5vZGUtPmlfaW5vIDogMDsKICAgICAgICBkbyB7IH0gd2hpbGUoMCk7CiAgICAgICAg cmV0dXJuIGlubzsKfQoKc3RhdGljIGlubGluZSBzdHJ1Y3QgZHN0X2VudHJ5ICoKX19za19kc3Rf Z2V0KHN0cnVjdCBzb2NrICpzaykKewogICAgICAgIHJldHVybiBzay0+ZHN0X2NhY2hlOwp9Cgpz dGF0aWMgaW5saW5lIHN0cnVjdCBkc3RfZW50cnkgKgpza19kc3RfZ2V0KHN0cnVjdCBzb2NrICpz aykKewogICAgICAgIHN0cnVjdCBkc3RfZW50cnkgKmRzdDsKCiAgICAgICAgKHZvaWQpKCZzay0+ ZHN0X2xvY2spOwogICAgICAgIGRzdCA9IHNrLT5kc3RfY2FjaGU7CiAgICAgICAgaWYgKGRzdCkK ICAgICAgICAgICAgICAgIGRzdF9ob2xkKGRzdCk7CiAgICAgICAgZG8geyB9IHdoaWxlKDApOwog ICAgICAgIHJldHVybiBkc3Q7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZApfX3NrX2RzdF9zZXQoc3Ry dWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpCnsKICAgICAgICBzdHJ1Y3QgZHN0 X2VudHJ5ICpvbGRfZHN0OwoKICAgICAgICBvbGRfZHN0ID0gc2stPmRzdF9jYWNoZTsKICAgICAg ICBzay0+ZHN0X2NhY2hlID0gZHN0OwogICAgICAgIGRzdF9yZWxlYXNlKG9sZF9kc3QpOwp9Cgpz dGF0aWMgaW5saW5lIHZvaWQKc2tfZHN0X3NldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3Rf ZW50cnkgKmRzdCkKewogICAgICAgICh2b2lkKSgmc2stPmRzdF9sb2NrKTsKICAgICAgICBfX3Nr X2RzdF9zZXQoc2ssIGRzdCk7CiAgICAgICAgZG8geyB9IHdoaWxlKDApOwp9CgpzdGF0aWMgaW5s aW5lIHZvaWQKX19za19kc3RfcmVzZXQoc3RydWN0IHNvY2sgKnNrKQp7CiAgICAgICAgc3RydWN0 IGRzdF9lbnRyeSAqb2xkX2RzdDsKCiAgICAgICAgb2xkX2RzdCA9IHNrLT5kc3RfY2FjaGU7CiAg ICAgICAgc2stPmRzdF9jYWNoZSA9ICgodm9pZCAqKTApOwogICAgICAgIGRzdF9yZWxlYXNlKG9s ZF9kc3QpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQKc2tfZHN0X3Jlc2V0KHN0cnVjdCBzb2NrICpz aykKewogICAgICAgICh2b2lkKSgmc2stPmRzdF9sb2NrKTsKICAgICAgICBfX3NrX2RzdF9yZXNl dChzayk7CiAgICAgICAgZG8geyB9IHdoaWxlKDApOwp9CgpzdGF0aWMgaW5saW5lIHN0cnVjdCBk c3RfZW50cnkgKgpfX3NrX2RzdF9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHUzMiBjb29raWUpCnsK ICAgICAgICBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBzay0+ZHN0X2NhY2hlOwoKICAgICAgICBp ZiAoZHN0ICYmIGRzdC0+b2Jzb2xldGUgJiYgZHN0LT5vcHMtPmNoZWNrKGRzdCwgY29va2llKSA9 PSAoKHZvaWQgKikwKSkgewogICAgICAgICAgICAgICAgc2stPmRzdF9jYWNoZSA9ICgodm9pZCAq KTApOwogICAgICAgICAgICAgICAgcmV0dXJuICgodm9pZCAqKTApOwogICAgICAgIH0KCiAgICAg ICAgcmV0dXJuIGRzdDsKfQoKc3RhdGljIGlubGluZSBzdHJ1Y3QgZHN0X2VudHJ5ICoKc2tfZHN0 X2NoZWNrKHN0cnVjdCBzb2NrICpzaywgdTMyIGNvb2tpZSkKewogICAgICAgIHN0cnVjdCBkc3Rf ZW50cnkgKmRzdCA9IHNrX2RzdF9nZXQoc2spOwoKICAgICAgICBpZiAoZHN0ICYmIGRzdC0+b2Jz b2xldGUgJiYgZHN0LT5vcHMtPmNoZWNrKGRzdCwgY29va2llKSA9PSAoKHZvaWQgKikwKSkgewog ICAgICAgICAgICAgICAgc2tfZHN0X3Jlc2V0KHNrKTsKICAgICAgICAgICAgICAgIHJldHVybiAo KHZvaWQgKikwKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBkc3Q7Cn0KIyAxMTQyICIvdXNy L3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL25ldC9zb2NrLmgiCnN0YXRpYyBpbmxpbmUgdm9p ZCBza2Jfc2V0X293bmVyX3coc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKQp7 CiAgICAgICAgc29ja19ob2xkKHNrKTsKICAgICAgICBza2ItPnNrID0gc2s7CiAgICAgICAgc2ti LT5kZXN0cnVjdG9yID0gc29ja193ZnJlZV9SNjA0NWJjMGQ7CiAgICAgICAgYXRvbWljX2FkZChz a2ItPnRydWVzaXplLCAmc2stPndtZW1fYWxsb2MpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgc2ti X3NldF9vd25lcl9yKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaykKewogICAg ICAgIHNrYi0+c2sgPSBzazsKICAgICAgICBza2ItPmRlc3RydWN0b3IgPSBzb2NrX3JmcmVlX1I3 M2VmZmIwNDsKICAgICAgICBhdG9taWNfYWRkKHNrYi0+dHJ1ZXNpemUsICZzay0+cm1lbV9hbGxv Yyk7Cn0KCnN0YXRpYyBpbmxpbmUgaW50IHNvY2tfcXVldWVfcmN2X3NrYihzdHJ1Y3Qgc29jayAq c2ssIHN0cnVjdCBza19idWZmICpza2IpCnsKCgoKICAgICAgICBpZiAoKCgmc2stPnJtZW1fYWxs b2MpLT5jb3VudGVyKSArIHNrYi0+dHJ1ZXNpemUgPj0gKHVuc2lnbmVkKXNrLT5yY3ZidWYpCiAg ICAgICAgICAgICAgICByZXR1cm4gLTEyOwoKCiAgICAgICAgaWYgKHNrLT5maWx0ZXIpIHsKICAg ICAgICAgICAgICAgIGludCBlcnIgPSAwOwogICAgICAgICAgICAgICAgc3RydWN0IHNrX2ZpbHRl ciAqZmlsdGVyOwoKCgoKCiAgICAgICAgICAgICAgICAodm9pZCkoJigoc2spLT5sb2NrLnNsb2Nr KSk7CiAgICAgICAgICAgICAgICBpZiAoKGZpbHRlciA9IHNrLT5maWx0ZXIpICE9ICgodm9pZCAq KTApICYmIHNrX2ZpbHRlcihza2IsIGZpbHRlcikpCiAgICAgICAgICAgICAgICAgICAgICAgIGVy ciA9IC0xOwogICAgICAgICAgICAgICAgZG8geyB9IHdoaWxlKDApOwogICAgICAgICAgICAgICAg aWYgKGVycikKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKICAgICAgICB9CgoK ICAgICAgICBza2ItPmRldiA9ICgodm9pZCAqKTApOwogICAgICAgIHNrYl9zZXRfb3duZXJfcihz a2IsIHNrKTsKICAgICAgICBza2JfcXVldWVfdGFpbCgmc2stPnJlY2VpdmVfcXVldWUsIHNrYik7 CiAgICAgICAgaWYgKCFzay0+ZGVhZCkKICAgICAgICAgICAgICAgIHNrLT5kYXRhX3JlYWR5KHNr LHNrYi0+bGVuKTsKICAgICAgICByZXR1cm4gMDsKfQoKc3RhdGljIGlubGluZSBpbnQgc29ja19x dWV1ZV9lcnJfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKewoKCgog ICAgICAgIGlmICgoKCZzay0+cm1lbV9hbGxvYyktPmNvdW50ZXIpICsgc2tiLT50cnVlc2l6ZSA+ PSAodW5zaWduZWQpc2stPnJjdmJ1ZikKICAgICAgICAgICAgICAgIHJldHVybiAtMTI7CiAgICAg ICAgc2tiX3NldF9vd25lcl9yKHNrYiwgc2spOwogICAgICAgIHNrYl9xdWV1ZV90YWlsKCZzay0+ ZXJyb3JfcXVldWUsc2tiKTsKICAgICAgICBpZiAoIXNrLT5kZWFkKQogICAgICAgICAgICAgICAg c2stPmRhdGFfcmVhZHkoc2ssc2tiLT5sZW4pOwogICAgICAgIHJldHVybiAwOwp9CgoKCgoKc3Rh dGljIGlubGluZSBpbnQgc29ja19lcnJvcihzdHJ1Y3Qgc29jayAqc2spCnsKICAgICAgICBpbnQg ZXJyPSgoX190eXBlb2ZfXygqKCZzay0+ZXJyKSkpX194Y2hnKCh1bnNpZ25lZCBsb25nKSgwKSwo JnNrLT5lcnIpLHNpemVvZigqKCZzay0+ZXJyKSkpKTsKICAgICAgICByZXR1cm4gLWVycjsKfQoK c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHNvY2tfd3NwYWNlKHN0cnVjdCBzb2NrICpzaykK ewogICAgICAgIGludCBhbXQgPSAwOwoKICAgICAgICBpZiAoIShzay0+c2h1dGRvd24gJiAyKSkg ewogICAgICAgICAgICAgICAgYW10ID0gc2stPnNuZGJ1ZiAtICgoJnNrLT53bWVtX2FsbG9jKS0+ Y291bnRlcik7CiAgICAgICAgICAgICAgICBpZiAoYW10IDwgMCkKICAgICAgICAgICAgICAgICAg ICAgICAgYW10ID0gMDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGFtdDsKfQoKc3RhdGljIGlu bGluZSB2b2lkIHNrX3dha2VfYXN5bmMoc3RydWN0IHNvY2sgKnNrLCBpbnQgaG93LCBpbnQgYmFu ZCkKewogICAgICAgIGlmIChzay0+c29ja2V0ICYmIHNrLT5zb2NrZXQtPmZhc3luY19saXN0KQog ICAgICAgICAgICAgICAgc29ja193YWtlX2FzeW5jX1JiYTk1MGM4Nihzay0+c29ja2V0LCBob3cs IGJhbmQpOwp9CgoKCgoKCgpzdGF0aWMgaW5saW5lIGludCBzb2NrX3dyaXRlYWJsZShzdHJ1Y3Qg c29jayAqc2spCnsKICAgICAgICByZXR1cm4gKCgmc2stPndtZW1fYWxsb2MpLT5jb3VudGVyKSA8 IChzay0+c25kYnVmIC8gMik7Cn0KCnN0YXRpYyBpbmxpbmUgaW50IGdmcF9hbnkodm9pZCkKewog ICAgICAgIHJldHVybiAoKCh2b2lkKSgoMCkpLCBpcnFfc3RhdF9SY2EwMjgzYjBbMF0uX19sb2Nh bF9iaF9jb3VudCkgIT0gMCkgPyAoMHgyMCkgOiAoMHgyMCB8IDB4MTAgfCAweDQwIHwgMHg4MCB8 IDB4MTAwKTsKfQoKc3RhdGljIGlubGluZSBsb25nIHNvY2tfcmN2dGltZW8oc3RydWN0IHNvY2sg KnNrLCBpbnQgbm9ibG9jaykKewogICAgICAgIHJldHVybiBub2Jsb2NrID8gMCA6IHNrLT5yY3Z0 aW1lbzsKfQoKc3RhdGljIGlubGluZSBsb25nIHNvY2tfc25kdGltZW8oc3RydWN0IHNvY2sgKnNr LCBpbnQgbm9ibG9jaykKewogICAgICAgIHJldHVybiBub2Jsb2NrID8gMCA6IHNrLT5zbmR0aW1l bzsKfQoKc3RhdGljIGlubGluZSBpbnQgc29ja19yY3Zsb3dhdChzdHJ1Y3Qgc29jayAqc2ssIGlu dCB3YWl0YWxsLCBpbnQgbGVuKQp7CiAgICAgICAgcmV0dXJuICh3YWl0YWxsID8gbGVuIDogKHsg aW50IF9feCA9IChzay0+cmN2bG93YXQpOyBpbnQgX195ID0gKGxlbik7IF9feCA8IF9feSA/IF9f eDogX195OyB9KSkgPyA6IDE7Cn0KCgoKCnN0YXRpYyBpbmxpbmUgaW50IHNvY2tfaW50cl9lcnJu byhsb25nIHRpbWVvKQp7CiAgICAgICAgcmV0dXJuIHRpbWVvID09ICgobG9uZykofjBVTD4+MSkp ID8gLTUxMiA6IC00Owp9CgpzdGF0aWMgX19pbmxpbmVfXyB2b2lkCnNvY2tfcmVjdl90aW1lc3Rh bXAoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpz a2IpCnsKICAgICAgICBpZiAoc2stPnJjdnRzdGFtcCkKICAgICAgICAgICAgICAgIHB1dF9jbXNn X1JmMzliZjRkOShtc2csIDEsIDI5LCBzaXplb2Yoc2tiLT5zdGFtcCksICZza2ItPnN0YW1wKTsK ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBzay0+c3RhbXAgPSBza2ItPnN0YW1wOwp9CiMg MTMxMiAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9uZXQvc29jay5oIgpleHRlcm4g X191MzIgc3lzY3RsX3dtZW1fbWF4X1JmYWM4ODY1ZjsKZXh0ZXJuIF9fdTMyIHN5c2N0bF9ybWVt X21heF9SYjA1ZmMzMTA7CiMgNDAgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbmV0 L2lwLmgiIDIKCnN0cnVjdCBpbmV0X3NrYl9wYXJtCnsKICAgICAgICBzdHJ1Y3QgaXBfb3B0aW9u cyBvcHQ7CiAgICAgICAgdW5zaWduZWQgY2hhciBmbGFnczsKCgoKCn07CgpzdHJ1Y3QgaXBjbV9j b29raWUKewogICAgICAgIHUzMiBhZGRyOwogICAgICAgIGludCBvaWY7CiAgICAgICAgc3RydWN0 IGlwX29wdGlvbnMgKm9wdDsKfTsKCgoKc3RydWN0IGlwX3JhX2NoYWluCnsKICAgICAgICBzdHJ1 Y3QgaXBfcmFfY2hhaW4gKm5leHQ7CiAgICAgICAgc3RydWN0IHNvY2sgKnNrOwogICAgICAgIHZv aWQgKCpkZXN0cnVjdG9yKShzdHJ1Y3Qgc29jayAqKTsKfTsKCmV4dGVybiBzdHJ1Y3QgaXBfcmFf Y2hhaW4gKmlwX3JhX2NoYWluOwpleHRlcm4gcndsb2NrX3QgaXBfcmFfbG9jazsKIyA3OCAiL3Vz ci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9uZXQvaXAuaCIKZXh0ZXJuIHZvaWQgaXBfbWNf ZHJvcHNvY2tldChzdHJ1Y3Qgc29jayAqKTsKZXh0ZXJuIHZvaWQgaXBfbWNfZHJvcGRldmljZShz dHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKZXh0ZXJuIGludCBpcF9tY19wcm9jaW5mbyhjaGFyICos IGNoYXIgKiosIG9mZl90LCBpbnQpOwoKCgoKCmV4dGVybiBpbnQgaXBfYnVpbGRfYW5kX3NlbmRf cGt0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBzYWRkciwgdTMyIGRhZGRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGlwX29wdGlv bnMgKm9wdCk7CmV4dGVybiBpbnQgaXBfcmN2X1I5NjBkOGY5YShzdHJ1Y3Qgc2tfYnVmZiAqc2ti LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c3RydWN0IHBhY2tldF90eXBlICpwdCk7CmV4dGVybiBpbnQgaXBfbG9jYWxfZGVsaXZlcihzdHJ1 Y3Qgc2tfYnVmZiAqc2tiKTsKZXh0ZXJuIGludCBpcF9tcl9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAq c2tiKTsKZXh0ZXJuIGludCBpcF9vdXRwdXQoc3RydWN0IHNrX2J1ZmYgKnNrYik7CmV4dGVybiBp bnQgaXBfbWNfb3V0cHV0KHN0cnVjdCBza19idWZmICpza2IpOwpleHRlcm4gaW50IGlwX2ZyYWdt ZW50X1I4ZDMzYjc0MShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKCpvdXQpKHN0cnVjdCBza19i dWZmKikpOwpleHRlcm4gaW50IGlwX2RvX25hdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKZXh0ZXJu IHZvaWQgaXBfc2VuZF9jaGVja19SYTM3Yjc0NDEoc3RydWN0IGlwaGRyICppcCk7CmV4dGVybiBp bnQgaXBfcXVldWVfeG1pdF9SMjk3YzBmZTAoc3RydWN0IHNrX2J1ZmYgKnNrYik7CmV4dGVybiB2 b2lkIGlwX2luaXQodm9pZCk7CmV4dGVybiBpbnQgaXBfYnVpbGRfeG1pdChzdHJ1Y3Qgc29jayAq c2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGdldGZyYWcgKGNv bnN0IHZvaWQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1bnNpZ25lZCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3Qgdm9pZCAqZnJhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IGlwY21fY29va2llICppcGMsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3RydWN0IHJ0YWJsZSAqcnQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IGZsYWdzKTsKIyAxMTggIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04 L2luY2x1ZGUvbmV0L2lwLmgiCnN0YXRpYyBpbmxpbmUgdm9pZCBpcF90cl9tY19tYXAodTMyIGFk ZHIsIGNoYXIgKmJ1ZikKewogICAgICAgIGJ1ZlswXT0weEMwOwogICAgICAgIGJ1ZlsxXT0weDAw OwogICAgICAgIGJ1ZlsyXT0weDAwOwogICAgICAgIGJ1ZlszXT0weDA0OwogICAgICAgIGJ1Zls0 XT0weDAwOwogICAgICAgIGJ1Zls1XT0weDAwOwp9CgpzdHJ1Y3QgaXBfcmVwbHlfYXJnIHsKICAg ICAgICBzdHJ1Y3QgaW92ZWMgaW92WzJdOwogICAgICAgIGludCBuX2lvdjsKICAgICAgICB1MzIg Y3N1bTsKICAgICAgICBpbnQgY3N1bW9mZnNldDsKCn07Cgp2b2lkIGlwX3NlbmRfcmVwbHkoc3Ry dWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfcmVwbHlfYXJnICph cmcsCiAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGVuKTsKCmV4dGVybiBfX2lubGlu ZV9fIGludCBpcF9maW5pc2hfb3V0cHV0X1I5NGJlNDAzNChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsK CnN0cnVjdCBpcHY0X2NvbmZpZ19SMjZiOTk3ODIKewogICAgICAgIGludCBsb2dfbWFydGlhbnM7 CiAgICAgICAgaW50IGF1dG9jb25maWc7CiAgICAgICAgaW50IG5vX3BtdHVfZGlzYzsKfTsKCmV4 dGVybiBzdHJ1Y3QgaXB2NF9jb25maWdfUjI2Yjk5NzgyIGlwdjRfY29uZmlnX1IyNmI5OTc4MjsK ZXh0ZXJuIHN0cnVjdCBpcF9taWIgaXBfc3RhdGlzdGljc19SYjE1NzllYmVbMSoyXTsKCgoKZXh0 ZXJuIHN0cnVjdCBsaW51eF9taWIgbmV0X3N0YXRpc3RpY3NfUmM0NjMwMzgxWzEqMl07CgoKCgpl eHRlcm4gaW50IHN5c2N0bF9sb2NhbF9wb3J0X3JhbmdlX1JlZTA4MDA2ZlsyXTsKZXh0ZXJuIGlu dCBzeXNjdGxfaXBfZGVmYXVsdF90dGxfUmY2Mzg4YzU2OwoKCnN0YXRpYyBpbmxpbmUgaW50IGlw X3NlbmQoc3RydWN0IHNrX2J1ZmYgKnNrYikKewogICAgICAgIGlmIChza2ItPmxlbiA+IHNrYi0+ ZHN0LT5wbXR1KQogICAgICAgICAgICAgICAgcmV0dXJuIGlwX2ZyYWdtZW50X1I4ZDMzYjc0MShz a2IsIGlwX2ZpbmlzaF9vdXRwdXRfUjk0YmU0MDM0KTsKICAgICAgICBlbHNlCiAgICAgICAgICAg ICAgICByZXR1cm4gaXBfZmluaXNoX291dHB1dF9SOTRiZTQwMzQoc2tiKTsKfQoKCgpzdGF0aWMg aW5saW5lCmludCBpcF9kZWNyZWFzZV90dGwoc3RydWN0IGlwaGRyICppcGgpCnsKICAgICAgICB1 MzIgY2hlY2sgPSBpcGgtPmNoZWNrOwogICAgICAgIGNoZWNrICs9ICgoX191MTYpKCAoKChfX3Ux NikoKDB4MDEwMCkpICYgKF9fdTE2KTB4MDBmZlUpIDw8IDgpIHwgKCgoX191MTYpKCgweDAxMDAp KSAmIChfX3UxNikweGZmMDBVKSA+PiA4KSApKTsKICAgICAgICBpcGgtPmNoZWNrID0gY2hlY2sg KyAoY2hlY2s+PTB4RkZGRik7CiAgICAgICAgcmV0dXJuIC0taXBoLT50dGw7Cn0KCnN0YXRpYyBp bmxpbmUKaW50IGlwX2RvbnRfZnJhZ21lbnQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZHN0X2Vu dHJ5ICpkc3QpCnsKICAgICAgICByZXR1cm4gKHNrLT5wcm90aW5mby5hZl9pbmV0LnBtdHVkaXNj ID09IDIgfHwKICAgICAgICAgICAgICAgIChzay0+cHJvdGluZm8uYWZfaW5ldC5wbXR1ZGlzYyA9 PSAxICYmCiAgICAgICAgICAgICAgICAgIShkc3QtPm14bG9jayYoMTw8UlRBWF9NVFUpKSkpOwp9 CgpleHRlcm4gdm9pZCBfX2lwX3NlbGVjdF9pZGVudF9SYzAzYjE4M2Eoc3RydWN0IGlwaGRyICpp cGgsIHN0cnVjdCBkc3RfZW50cnkgKmRzdCk7CgpzdGF0aWMgaW5saW5lIHZvaWQgaXBfc2VsZWN0 X2lkZW50KHN0cnVjdCBpcGhkciAqaXBoLCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsIHN0cnVjdCBz b2NrICpzaykKewogICAgICAgIGlmIChpcGgtPmZyYWdfb2ZmJigoX191MTYpKCAoKChfX3UxNiko KDB4NDAwMCkpICYgKF9fdTE2KTB4MDBmZlUpIDw8IDgpIHwgKCgoX191MTYpKCgweDQwMDApKSAm IChfX3UxNikweGZmMDBVKSA+PiA4KSApKSkgewoKCgoKCiAgICAgICAgICAgICAgICBpcGgtPmlk ID0gKChzayAmJiBzay0+ZGFkZHIpID8gKF9fYnVpbHRpbl9jb25zdGFudF9wKChfX3UxNikoKHNr LT5wcm90aW5mby5hZl9pbmV0LmlkKyspKSkgPyAoeyBfX3UxNiBfX3ggPSAoKChzay0+cHJvdGlu Zm8uYWZfaW5ldC5pZCsrKSkpOyAoKF9fdTE2KSggKCgoX191MTYpKF9feCkgJiAoX191MTYpMHgw MGZmVSkgPDwgOCkgfCAoKChfX3UxNikoX194KSAmIChfX3UxNikweGZmMDBVKSA+PiA4KSApKTsg fSkgOiBfX2Zzd2FiMTYoKChzay0+cHJvdGluZm8uYWZfaW5ldC5pZCsrKSkpKSA6IDApOwogICAg ICAgIH0gZWxzZQogICAgICAgICAgICAgICAgX19pcF9zZWxlY3RfaWRlbnRfUmMwM2IxODNhKGlw aCwgZHN0KTsKfQoKCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBpcF9ldGhfbWNfbWFwKHUzMiBhZGRy LCBjaGFyICpidWYpCnsKICAgICAgICBhZGRyPShfX2J1aWx0aW5fY29uc3RhbnRfcCgoX191MzIp KChhZGRyKSkpID8gKHsgX191MzIgX194ID0gKCgoYWRkcikpKTsgKChfX3UzMikoICgoKF9fdTMy KShfX3gpICYgKF9fdTMyKTB4MDAwMDAwZmZVTCkgPDwgMjQpIHwgKCgoX191MzIpKF9feCkgJiAo X191MzIpMHgwMDAwZmYwMFVMKSA8PCA4KSB8ICgoKF9fdTMyKShfX3gpICYgKF9fdTMyKTB4MDBm ZjAwMDBVTCkgPj4gOCkgfCAoKChfX3UzMikoX194KSAmIChfX3UzMikweGZmMDAwMDAwVUwpID4+ IDI0KSApKTsgfSkgOiBfX2Zzd2FiMzIoKChhZGRyKSkpKTsKICAgICAgICBidWZbMF09MHgwMTsK ICAgICAgICBidWZbMV09MHgwMDsKICAgICAgICBidWZbMl09MHg1ZTsKICAgICAgICBidWZbNV09 YWRkciYweEZGOwogICAgICAgIGFkZHI+Pj04OwogICAgICAgIGJ1Zls0XT1hZGRyJjB4RkY7CiAg ICAgICAgYWRkcj4+PTg7CiAgICAgICAgYnVmWzNdPWFkZHImMHg3RjsKfQoKCgpleHRlcm4gaW50 IGlwX2NhbGxfcmFfY2hhaW4oc3RydWN0IHNrX2J1ZmYgKnNrYik7CgoKCgoKc3RydWN0IHNrX2J1 ZmYgKmlwX2RlZnJhZ19SNjg0ODRkNjAoc3RydWN0IHNrX2J1ZmYgKnNrYik7CmV4dGVybiBpbnQg aXBfZnJhZ19ucXVldWVzOwpleHRlcm4gYXRvbWljX3QgaXBfZnJhZ19tZW07CgoKCgoKZXh0ZXJu IGludCBpcF9mb3J3YXJkKHN0cnVjdCBza19idWZmICpza2IpOwpleHRlcm4gaW50IGlwX25ldF91 bnJlYWNoYWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKCgoKCgpleHRlcm4gdm9pZCBpcF9vcHRp b25zX2J1aWxkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF9vcHRpb25zICpvcHQsIHUz MiBkYWRkciwgc3RydWN0IHJ0YWJsZSAqcnQsIGludCBpc19mcmFnKTsKZXh0ZXJuIGludCBpcF9v cHRpb25zX2VjaG8oc3RydWN0IGlwX29wdGlvbnMgKmRvcHQsIHN0cnVjdCBza19idWZmICpza2Ip OwpleHRlcm4gdm9pZCBpcF9vcHRpb25zX2ZyYWdtZW50KHN0cnVjdCBza19idWZmICpza2IpOwpl eHRlcm4gaW50IGlwX29wdGlvbnNfY29tcGlsZV9SNDMxOWY5MWQoc3RydWN0IGlwX29wdGlvbnMg Km9wdCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CmV4dGVybiBpbnQgaXBfb3B0aW9uc19nZXQoc3Ry dWN0IGlwX29wdGlvbnMgKipvcHRwLCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgb3B0bGVuLCBp bnQgdXNlcik7CmV4dGVybiB2b2lkIGlwX29wdGlvbnNfdW5kb19SOTcyMWYxMmYoc3RydWN0IGlw X29wdGlvbnMgKiBvcHQpOwpleHRlcm4gdm9pZCBpcF9mb3J3YXJkX29wdGlvbnMoc3RydWN0IHNr X2J1ZmYgKnNrYik7CmV4dGVybiBpbnQgaXBfb3B0aW9uc19yY3Zfc3JyKHN0cnVjdCBza19idWZm ICpza2IpOwoKCgoKCmV4dGVybiB2b2lkIGlwX2Ntc2dfcmVjdl9SNjc4MzAxZTcoc3RydWN0IG1z Z2hkciAqbXNnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKZXh0ZXJuIGludCBpcF9jbXNnX3NlbmQo c3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3QgaXBjbV9jb29raWUgKmlwYyk7CmV4dGVybiBpbnQg aXBfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIGNo YXIgKm9wdHZhbCwgaW50IG9wdGxlbik7CmV4dGVybiBpbnQgaXBfZ2V0c29ja29wdChzdHJ1Y3Qg c29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIGNoYXIgKm9wdHZhbCwgaW50ICpvcHRs ZW4pOwpleHRlcm4gaW50IGlwX3JhX2NvbnRyb2woc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBj aGFyIG9uLCB2b2lkICgqZGVzdHJ1Y3Rvcikoc3RydWN0IHNvY2sgKikpOwoKZXh0ZXJuIGludCBp cF9yZWN2X2Vycm9yKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVu KTsKZXh0ZXJuIHZvaWQgaXBfaWNtcF9lcnJvcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19i dWZmICpza2IsIGludCBlcnIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiBwb3J0 LCB1MzIgaW5mbywgdTggKnBheWxvYWQpOwpleHRlcm4gdm9pZCBpcF9sb2NhbF9lcnJvcihzdHJ1 Y3Qgc29jayAqc2ssIGludCBlcnIsIHUzMiBkYWRkciwgdTE2IGRwb3J0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdTMyIGluZm8pOwojIDMyICIvdXNyL3NyYy9saW51eC0yLjQuMjAt OC9pbmNsdWRlL25ldC9jaGVja3N1bS5oIiAyCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04 L2luY2x1ZGUvYXNtL2NoZWNrc3VtLmgiIDEKIyAxNyAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgv aW5jbHVkZS9hc20vY2hlY2tzdW0uaCIKIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkpKSB1bnNp Z25lZCBpbnQgY3N1bV9wYXJ0aWFsX1I5YTNkZThmOChjb25zdCB1bnNpZ25lZCBjaGFyICogYnVm ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IHN1bSk7CiMgMjcgIi91c3Ivc3JjL2xpbnV4LTIuNC4y MC04L2luY2x1ZGUvYXNtL2NoZWNrc3VtLmgiCiBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDApKSkg dW5zaWduZWQgaW50IGNzdW1fcGFydGlhbF9jb3B5X2dlbmVyaWNfUmU4YWE5YTk2KCBjb25zdCBj aGFyICpzcmMsIGNoYXIgKmRzdCwgaW50IGxlbiwgaW50IHN1bSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpzcmNfZXJyX3B0ciwgaW50ICpk c3RfZXJyX3B0cik7CiMgMzcgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvYXNtL2No ZWNrc3VtLmgiCnN0YXRpYyBfX2lubGluZV9fCnVuc2lnbmVkIGludCBjc3VtX3BhcnRpYWxfY29w eV9ub2NoZWNrICggY29uc3QgY2hhciAqc3JjLCBjaGFyICpkc3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuLCBpbnQgc3VtKQp7CiAgICAgICAgcmV0dXJu IGNzdW1fcGFydGlhbF9jb3B5X2dlbmVyaWNfUmU4YWE5YTk2ICggc3JjLCBkc3QsIGxlbiwgc3Vt LCAoKHZvaWQgKikwKSwgKCh2b2lkICopMCkpOwp9CgpzdGF0aWMgX19pbmxpbmVfXwp1bnNpZ25l ZCBpbnQgY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbV91c2VyICggY29uc3QgY2hhciAqc3JjLCBjaGFy ICpkc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCBsZW4sIGludCBzdW0sIGludCAqZXJyX3B0cikKewogICAgICAgIHJldHVybiBjc3VtX3BhcnRp YWxfY29weV9nZW5lcmljX1JlOGFhOWE5NiAoIHNyYywgZHN0LCBsZW4sIHN1bSwgZXJyX3B0ciwg KCh2b2lkICopMCkpOwp9CiMgNTkgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvYXNt L2NoZWNrc3VtLmgiCnVuc2lnbmVkIGludCBjc3VtX3BhcnRpYWxfY29weSggY29uc3QgY2hhciAq c3JjLCBjaGFyICpkc3QsIGludCBsZW4sIGludCBzdW0pOwojIDY4ICIvdXNyL3NyYy9saW51eC0y LjQuMjAtOC9pbmNsdWRlL2FzbS9jaGVja3N1bS5oIgpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNo b3J0IGlwX2Zhc3RfY3N1bSh1bnNpZ25lZCBjaGFyICogaXBoLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaWhsKQp7CiAgICAgICAgdW5zaWdu ZWQgaW50IHN1bTsKCiAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oCiAgICAgICAgICAgICJt b3ZsICglMSksICUwCTtcbiIKICAgICAgICAgICAgInN1YmwgJDQsICUyCTtcbiIKICAgICAgICAg ICAgImpiZSAyZgkJO1xuIgogICAgICAgICAgICAiYWRkbCA0KCUxKSwgJTAJO1xuIgogICAgICAg ICAgICAiYWRjbCA4KCUxKSwgJTAJO1xuIgogICAgICAgICAgICAiYWRjbCAxMiglMSksICUwCTtc biIKIjE6CSAgICBhZGNsIDE2KCUxKSwgJTAJO1xuIgogICAgICAgICAgICAibGVhIDQoJTEpLCAl MQk7XG4iCiAgICAgICAgICAgICJkZWNsICUyCQk7XG4iCiAgICAgICAgICAgICJqbmUgMWIJCTtc biIKICAgICAgICAgICAgImFkY2wgJDAsICUwCTtcbiIKICAgICAgICAgICAgIm1vdmwgJTAsICUy CTtcbiIKICAgICAgICAgICAgInNocmwgJDE2LCAlMAk7XG4iCiAgICAgICAgICAgICJhZGR3ICV3 MiwgJXcwCTtcbiIKICAgICAgICAgICAgImFkY2wgJDAsICUwCTtcbiIKICAgICAgICAgICAgIm5v dGwgJTAJCTtcbiIKIjI6CQkJCTtcbiIKCgoKICAgICAgICA6ICI9ciIgKHN1bSksICI9ciIgKGlw aCksICI9ciIgKGlobCkKICAgICAgICA6ICIxIiAoaXBoKSwgIjIiIChpaGwpKTsKICAgICAgICBy ZXR1cm4oc3VtKTsKfQoKCgoKCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNzdW1fZm9sZCh1 bnNpZ25lZCBpbnQgc3VtKQp7CiAgICAgICAgX19hc21fXygKICAgICAgICAgICAgICAgICJhZGRs ICUxLCAlMAkJO1xuIgogICAgICAgICAgICAgICAgImFkY2wgJDB4ZmZmZiwgJTAJO1xuIgogICAg ICAgICAgICAgICAgOiAiPXIiIChzdW0pCiAgICAgICAgICAgICAgICA6ICJyIiAoc3VtIDw8IDE2 KSwgIjAiIChzdW0gJiAweGZmZmYwMDAwKQogICAgICAgICk7CiAgICAgICAgcmV0dXJuICh+c3Vt KSA+PiAxNjsKfQoKc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNzdW1fdGNwdWRwX25vZm9s ZCh1bnNpZ25lZCBsb25nIHNhZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGRhZGRyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBsZW4sCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNo b3J0IHByb3RvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1bnNpZ25lZCBpbnQgc3VtKQp7CiAgICBfX2FzbV9fKAogICAgICAgICJhZGRsICUxLCAl MAk7XG4iCiAgICAgICAgImFkY2wgJTIsICUwCTtcbiIKICAgICAgICAiYWRjbCAlMywgJTAJO1xu IgogICAgICAgICJhZGNsICQwLCAlMAk7XG4iCiAgICAgICAgOiAiPXIiIChzdW0pCiAgICAgICAg OiAiZyIgKGRhZGRyKSwgImciKHNhZGRyKSwgImciKCgoX19idWlsdGluX2NvbnN0YW50X3AoKF9f dTE2KSgobGVuKSkpID8gKHsgX191MTYgX194ID0gKCgobGVuKSkpOyAoKF9fdTE2KSggKCgoX191 MTYpKF9feCkgJiAoX191MTYpMHgwMGZmVSkgPDwgOCkgfCAoKChfX3UxNikoX194KSAmIChfX3Ux NikweGZmMDBVKSA+PiA4KSApKTsgfSkgOiBfX2Zzd2FiMTYoKChsZW4pKSkpPDwxNikrcHJvdG8q MjU2KSwgIjAiKHN1bSkpOwogICAgcmV0dXJuIHN1bTsKfQoKCgoKCnN0YXRpYyBpbmxpbmUgdW5z aWduZWQgc2hvcnQgaW50IGNzdW1fdGNwdWRwX21hZ2ljKHVuc2lnbmVkIGxvbmcgc2FkZHIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk IGxvbmcgZGFkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHVuc2lnbmVkIHNob3J0IGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcHJvdG8sCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzdW0pCnsK ICAgICAgICByZXR1cm4gY3N1bV9mb2xkKGNzdW1fdGNwdWRwX25vZm9sZChzYWRkcixkYWRkcixs ZW4scHJvdG8sc3VtKSk7Cn0KCgoKCgoKc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBpcF9j b21wdXRlX2NzdW0odW5zaWduZWQgY2hhciAqIGJ1ZmYsIGludCBsZW4pCnsKICAgIHJldHVybiBj c3VtX2ZvbGQgKGNzdW1fcGFydGlhbF9SOWEzZGU4ZjgoYnVmZiwgbGVuLCAwKSk7Cn0KCgpzdGF0 aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBzaG9ydCBpbnQgY3N1bV9pcHY2X21hZ2ljKHN0cnVjdCBp bjZfYWRkciAqc2FkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IGluNl9hZGRyICpkYWRkciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3UzMiBsZW4sCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcHJv dG8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dW5zaWduZWQgaW50IHN1bSkKewogICAgICAgIF9fYXNtX18oCiAgICAgICAgICAgICAgICAiYWRk bCAwKCUxKSwgJTAJCTtcbiIKICAgICAgICAgICAgICAgICJhZGNsIDQoJTEpLCAlMAkJO1xuIgog ICAgICAgICAgICAgICAgImFkY2wgOCglMSksICUwCQk7XG4iCiAgICAgICAgICAgICAgICAiYWRj bCAxMiglMSksICUwCTtcbiIKICAgICAgICAgICAgICAgICJhZGNsIDAoJTIpLCAlMAkJO1xuIgog ICAgICAgICAgICAgICAgImFkY2wgNCglMiksICUwCQk7XG4iCiAgICAgICAgICAgICAgICAiYWRj bCA4KCUyKSwgJTAJCTtcbiIKICAgICAgICAgICAgICAgICJhZGNsIDEyKCUyKSwgJTAJO1xuIgog ICAgICAgICAgICAgICAgImFkY2wgJTMsICUwCQk7XG4iCiAgICAgICAgICAgICAgICAiYWRjbCAl NCwgJTAJCTtcbiIKICAgICAgICAgICAgICAgICJhZGNsICQwLCAlMAkJO1xuIgogICAgICAgICAg ICAgICAgOiAiPSZyIiAoc3VtKQogICAgICAgICAgICAgICAgOiAiciIgKHNhZGRyKSwgInIiIChk YWRkciksCiAgICAgICAgICAgICAgICAgICJyIigoX19idWlsdGluX2NvbnN0YW50X3AoKF9fdTMy KSgobGVuKSkpID8gKHsgX191MzIgX194ID0gKCgobGVuKSkpOyAoKF9fdTMyKSggKCgoX191MzIp KF9feCkgJiAoX191MzIpMHgwMDAwMDBmZlVMKSA8PCAyNCkgfCAoKChfX3UzMikoX194KSAmIChf X3UzMikweDAwMDBmZjAwVUwpIDw8IDgpIHwgKCgoX191MzIpKF9feCkgJiAoX191MzIpMHgwMGZm MDAwMFVMKSA+PiA4KSB8ICgoKF9fdTMyKShfX3gpICYgKF9fdTMyKTB4ZmYwMDAwMDBVTCkgPj4g MjQpICkpOyB9KSA6IF9fZnN3YWIzMigoKGxlbikpKSkpLCAiciIoKF9fYnVpbHRpbl9jb25zdGFu dF9wKChfX3UzMikoKHByb3RvKSkpID8gKHsgX191MzIgX194ID0gKCgocHJvdG8pKSk7ICgoX191 MzIpKCAoKChfX3UzMikoX194KSAmIChfX3UzMikweDAwMDAwMGZmVUwpIDw8IDI0KSB8ICgoKF9f dTMyKShfX3gpICYgKF9fdTMyKTB4MDAwMGZmMDBVTCkgPDwgOCkgfCAoKChfX3UzMikoX194KSAm IChfX3UzMikweDAwZmYwMDAwVUwpID4+IDgpIHwgKCgoX191MzIpKF9feCkgJiAoX191MzIpMHhm ZjAwMDAwMFVMKSA+PiAyNCkgKSk7IH0pIDogX19mc3dhYjMyKCgocHJvdG8pKSkpKSwgIjAiKHN1 bSkpOwoKICAgICAgICByZXR1cm4gY3N1bV9mb2xkKHN1bSk7Cn0KCgoKCgpzdGF0aWMgX19pbmxp bmVfXyB1bnNpZ25lZCBpbnQgY3N1bV9hbmRfY29weV90b191c2VyKGNvbnN0IGNoYXIgKnNyYywg Y2hhciAqZHN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuLCBp bnQgc3VtLCBpbnQgKmVycl9wdHIpCnsKICAgICAgICBpZiAoKCh7IHVuc2lnbmVkIGxvbmcgZmxh ZyxzdW07IGFzbSgiYWRkbCAlMywlMSA7IHNiYmwgJTAsJTA7IGNtcGwgJTEsJTQ7IHNiYmwgJDAs JTAiIDoiPSZyIiAoZmxhZyksICI9ciIgKHN1bSkgOiIxIiAoZHN0KSwiZyIgKChpbnQpKGxlbikp LCJnIiAoZ2V0X2N1cnJlbnQoKS0+YWRkcl9saW1pdC5zZWcpKTsgZmxhZzsgfSkgPT0gMCkpCiAg ICAgICAgICAgICAgICByZXR1cm4gY3N1bV9wYXJ0aWFsX2NvcHlfZ2VuZXJpY19SZThhYTlhOTYo c3JjLCBkc3QsIGxlbiwgc3VtLCAoKHZvaWQgKikwKSwgZXJyX3B0cik7CgogICAgICAgIGlmIChs ZW4pCiAgICAgICAgICAgICAgICAqZXJyX3B0ciA9IC0xNDsKCiAgICAgICAgcmV0dXJuIC0xOwp9 CiMgMzQgIi91c3Ivc3JjL2xpbnV4LTIuNC4yMC04L2luY2x1ZGUvbmV0L2NoZWNrc3VtLmgiIDIK IyA5NiAiL3Vzci9zcmMvbGludXgtMi40LjIwLTgvaW5jbHVkZS9uZXQvY2hlY2tzdW0uaCIKc3Rh dGljIGlubGluZQp1bnNpZ25lZCBpbnQgY3N1bV9hbmRfY29weV9mcm9tX3VzZXIgKGNvbnN0IGNo YXIgKnNyYywgY2hhciAqZHN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCBsZW4sIGludCBzdW0sIGludCAqZXJyX3B0cikKewogICAgICAgIGlmICh2ZXJpZnlfYXJl YSgwLCBzcmMsIGxlbikgPT0gMCkKICAgICAgICAgICAgICAgIHJldHVybiBjc3VtX3BhcnRpYWxf Y29weV9mcm9tX3VzZXIoc3JjLCBkc3QsIGxlbiwgc3VtLCBlcnJfcHRyKTsKCiAgICAgICAgaWYg KGxlbikKICAgICAgICAgICAgICAgICplcnJfcHRyID0gLTE0OwoKICAgICAgICByZXR1cm4gc3Vt Owp9CiMgMTI3ICIvdXNyL3NyYy9saW51eC0yLjQuMjAtOC9pbmNsdWRlL25ldC9jaGVja3N1bS5o IgpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjc3VtX2FkZCh1bnNpZ25lZCBpbnQgY3N1bSwg dW5zaWduZWQgaW50IGFkZGVuZCkKewogICAgICAgIGNzdW0gKz0gYWRkZW5kOwogICAgICAgIHJl dHVybiBjc3VtICsgKGNzdW0gPCBhZGRlbmQpOwp9CgpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGlu dCBjc3VtX3N1Yih1bnNpZ25lZCBpbnQgY3N1bSwgdW5zaWduZWQgaW50IGFkZGVuZCkKewogICAg ICAgIHJldHVybiBjc3VtX2FkZChjc3VtLCB+YWRkZW5kKTsKfQoKc3RhdGljIGlubGluZSB1bnNp Z25lZCBpbnQKY3N1bV9ibG9ja19hZGQodW5zaWduZWQgaW50IGNzdW0sIHVuc2lnbmVkIGludCBj c3VtMiwgaW50IG9mZnNldCkKewogICAgICAgIGlmIChvZmZzZXQmMSkKICAgICAgICAgICAgICAg IGNzdW0yID0gKChjc3VtMiYweEZGMDBGRik8PDgpKygoY3N1bTI+PjgpJjB4RkYwMEZGKTsKICAg ICAgICByZXR1cm4gY3N1bV9hZGQoY3N1bSwgY3N1bTIpOwp9CgpzdGF0aWMgaW5saW5lIHVuc2ln bmVkIGludApjc3VtX2Jsb2NrX3N1Yih1bnNpZ25lZCBpbnQgY3N1bSwgdW5zaWduZWQgaW50IGNz dW0yLCBpbnQgb2Zmc2V0KQp7CiAgICAgICAgaWYgKG9mZnNldCYxKQogICAgICAgICAgICAgICAg Y3N1bTIgPSAoKGNzdW0yJjB4RkYwMEZGKTw8OCkrKChjc3VtMj4+OCkmMHhGRjAwRkYpOwogICAg ICAgIHJldHVybiBjc3VtX3N1Yihjc3VtLCBjc3VtMik7Cn0KIyAxMzYgImgvc2tkcnYxc3QuaCIg MgoKIyAxICJoL3NrdHlwZXMuaCIgMQojIDEzOCAiaC9za2RydjFzdC5oIiAyCiMgMSAiaC9za2Vy cm9yLmgiIDEKIyAxMzkgImgvc2tkcnYxc3QuaCIgMgojIDEgImgvc2tkZWJ1Zy5oIiAxCiMgMTQw ICJoL3NrZHJ2MXN0LmgiIDIKIyAxICJoL2xtODAuaCIgMQojIDE0MSAiaC9za2RydjFzdC5oIiAy CiMgMSAiaC94bWFjX2lpLmgiIDEKIyAxNDIgImgvc2tkcnYxc3QuaCIgMgojIDE2NCAiaC9za2Ry djFzdC5oIgp0eXBlZGVmIHN0cnVjdCBzX0RydlJsbXRNYnVmIFNLX01CVUY7CiMgMjM3ICJoL3Nr ZHJ2MXN0LmgiCmV4dGVybiB2b2lkIFNrRXJyb3JMb2coU0tfQUMqLCBpbnQsIGludCwgY2hhciop OwojIDQ0MCAic2tnZXBubWkuYyIgMgoKCgojIDEgImgvc2txdWV1ZS5oIiAxCiMgMTExICJoL3Nr cXVldWUuaCIKdHlwZWRlZiB1bmlvbiB1X0V2UGFyYSB7CiAgICAgICAgdm9pZCAqcFBhcmFQdHI7 CiAgICAgICAgdTY0IFBhcmE2NDsKICAgICAgICB1MzIgUGFyYTMyWzJdOwp9IFNLX0VWUEFSQTsK IyAxMjQgImgvc2txdWV1ZS5oIgp0eXBlZGVmIHN0cnVjdCBzX0V2ZW50RWxlbSB7CiAgICAgICAg dTMyIENsYXNzIDsKICAgICAgICB1MzIgRXZlbnQgOwogICAgICAgIFNLX0VWUEFSQSBQYXJhIDsK fSBTS19FVkVOVEVMRU07Cgp0eXBlZGVmIHN0cnVjdCBzX1F1ZXVlIHsKICAgICAgICBTS19FVkVO VEVMRU0gRXZRdWV1ZVs2NF07CiAgICAgICAgU0tfRVZFTlRFTEVNICpFdlB1dCA7CiAgICAgICAg U0tfRVZFTlRFTEVNICpFdkdldCA7Cn0gU0tfUVVFVUU7CgpleHRlcm4gdm9pZCBTa0V2ZW50SW5p dChTS19BQyAqcEFDLCBjaGFyKiBJb2MsIGludCBMZXZlbCk7CmV4dGVybiB2b2lkIFNrRXZlbnRR dWV1ZShTS19BQyAqcEFDLCB1MzIgQ2xhc3MsIHUzMiBFdmVudCwKICAgICAgICBTS19FVlBBUkEg UGFyYSk7CmV4dGVybiBpbnQgU2tFdmVudERpc3BhdGNoZXIoU0tfQUMgKnBBQyxjaGFyKiBJb2Mp OwojIDQ0NCAic2tnZXBubWkuYyIgMgojIDEgImgvc2tnZXBubWkuaCIgMQojIDI0MSAiaC9za2dl cG5taS5oIgojIDEgImgvc2t0aW1lci5oIiAxCiMgNzUgImgvc2t0aW1lci5oIgp0eXBlZGVmIHN0 cnVjdCBzX1RpbWVyIFNLX1RJTUVSOwoKc3RydWN0IHNfVGltZXIgewogICAgICAgIFNLX1RJTUVS ICpUbU5leHQgOwogICAgICAgIHUzMiBUbUNsYXNzIDsKICAgICAgICB1MzIgVG1FdmVudCA7CiAg ICAgICAgU0tfRVZQQVJBIFRtUGFyYSA7CiAgICAgICAgdTMyIFRtRGVsdGEgOwogICAgICAgIGlu dCBUbUFjdGl2ZSA7Cn0gOwoKCgoKCnR5cGVkZWYgc3RydWN0IHNfVGltQ3RybCB7CiAgICAgICAg U0tfVElNRVIgKlN0UXVldWUgOwp9IFNLX1RJTUNUUkwgOwoKZXh0ZXJuIHZvaWQgU2tUaW1lcklu aXQoU0tfQUMgKnBBQyxjaGFyKiBJb2MsIGludCBMZXZlbCk7CmV4dGVybiB2b2lkIFNrVGltZXJT dG9wKFNLX0FDICpwQUMsY2hhciogSW9jLFNLX1RJTUVSICpwVGltZXIpOwpleHRlcm4gdm9pZCBT a1RpbWVyU3RhcnQoU0tfQUMgKnBBQyxjaGFyKiBJb2MsU0tfVElNRVIgKnBUaW1lciwKICAgICAg ICB1MzIgVGltZSx1MzIgQ2xhc3MsdTMyIEV2ZW50LFNLX0VWUEFSQSBQYXJhKTsKZXh0ZXJuIHZv aWQgU2tUaW1lckRvbmUoU0tfQUMgKnBBQyxjaGFyKiBJb2MpOwojIDI0MiAiaC9za2dlcG5taS5o IiAyCiMgMSAiaC9za2kyYy5oIiAxCiMgMTQ5ICJoL3NraTJjLmgiCnR5cGVkZWYgc3RydWN0IHNf U2Vuc29yIFNLX1NFTlNPUjsKCiMgMSAiaC9za2dlaTJjLmgiIDEKIyAyOTggImgvc2tnZWkyYy5o IgpleHRlcm4gaW50IFNrTG04MFJlYWRTZW5zb3IoU0tfQUMgKnBBQywgY2hhciogSW9DLCBTS19T RU5TT1IgKnBTZW4pOwojIDE1MiAiaC9za2kyYy5oIiAyCiMgMjQ0ICJoL3NraTJjLmgiCnN0cnVj dCBzX1NlbnNvciB7CiAgICAgICAgY2hhciAqU2VuRGVzYzsKICAgICAgICBpbnQgU2VuVHlwZTsK ICAgICAgICBzMzIgU2VuVmFsdWU7CiAgICAgICAgczMyIFNlblRocmVFcnJIaWdoOwogICAgICAg IHMzMiBTZW5UaHJlV2FybkhpZ2g7CiAgICAgICAgczMyIFNlblRocmVFcnJMb3c7CiAgICAgICAg czMyIFNlblRocmVXYXJuTG93OwogICAgICAgIGludCBTZW5FcnJGbGFnOwogICAgICAgIHU4IFNl bkluaXQ7CiAgICAgICAgdTY0IFNlbkVyckN0czsKICAgICAgICB1NjQgU2VuV2FybkN0czsKICAg ICAgICB1NjQgU2VuQmVnRXJyVFM7CiAgICAgICAgdTY0IFNlbkJlZ1dhcm5UUzsKICAgICAgICB1 NjQgU2VuTGFzdEVyclRyYXBUUzsKICAgICAgICB1NjQgU2VuTGFzdEVyckxvZ1RTOwogICAgICAg IHU2NCBTZW5MYXN0V2FyblRyYXBUUzsKICAgICAgICB1NjQgU2VuTGFzdFdhcm5Mb2dUUzsKICAg ICAgICBpbnQgU2VuU3RhdGU7CiAgICAgICAgaW50ICgqU2VuUmVhZCkoU0tfQUMgKnBBQywgY2hh ciogSW9DLCBzdHJ1Y3Qgc19TZW5zb3IgKnBTZW4pOwoKICAgICAgICB1MTYgU2VuUmVnOwogICAg ICAgIHU4IFNlbkRldjsKfTsKCnR5cGVkZWYgc3RydWN0IHNfSTJjIHsKICAgICAgICBTS19TRU5T T1IgU2VuVGFibGVbOF07CiAgICAgICAgaW50IEN1cnJTZW5zOwogICAgICAgIGludCBNYXhTZW5z OwogICAgICAgIGludCBUaW1lck1vZGU7CiAgICAgICAgaW50IEluaXRMZXZlbDsKCiAgICAgICAg aW50IER1bW15UmVhZHM7CiAgICAgICAgU0tfVElNRVIgU2VuVGltZXI7Cgp9IFNLX0kyQzsKCmV4 dGVybiBpbnQgU2tJMmNSZWFkU2Vuc29yKFNLX0FDICpwQUMsIGNoYXIqIElvQywgU0tfU0VOU09S ICpwU2VuKTsKCmV4dGVybiBpbnQgU2tJMmNFdmVudChTS19BQyAqcEFDLCBjaGFyKiBJb0MsIHUz MiBFdmVudCwgU0tfRVZQQVJBIFBhcmEpOwpleHRlcm4gaW50IFNrSTJjSW5pdChTS19BQyAqcEFD LCBjaGFyKiBJb0MsIGludCBMZXZlbCk7CmV4dGVybiB2b2lkIFNrSTJjV2FpdElycShTS19BQyAq cEFDLCBjaGFyKiBJb0MpOwpleHRlcm4gdm9pZCBTa0kyY0lzcihTS19BQyAqcEFDLCBjaGFyKiBJ b0MpOwojIDI0MyAiaC9za2dlcG5taS5oIiAyCiMgMSAiaC9za2FkZHIuaCIgMQojIDI0OSAiaC9z a2FkZHIuaCIKdHlwZWRlZiBzdHJ1Y3Qgc19NYWNBZGRyIHsKICAgICAgICB1OCBhWzZdOwp9IFNL X01BQ19BRERSOwoKCgp0eXBlZGVmIHVuaW9uIHNfSW5leGFjdEZpbHRlciB7CiAgICAgICAgdTgg Qnl0ZXNbOF07CiAgICAgICAgdTY0IFZhbDsKfSBTS19GSUxURVI2NDsKCgp0eXBlZGVmIHN0cnVj dCBzX0FkZHJOZXQgU0tfQUREUl9ORVQ7CgoKdHlwZWRlZiBzdHJ1Y3Qgc19BZGRyUG9ydCB7CgoK CiAgICAgICAgU0tfTUFDX0FERFIgQ3VycmVudE1hY0FkZHJlc3M7CiAgICAgICAgU0tfTUFDX0FE RFIgUGVybWFuZW50TWFjQWRkcmVzczsKICAgICAgICBpbnQgUHJvbU1vZGU7CgoKCiAgICAgICAg U0tfTUFDX0FERFIgUHJldmlvdXNNYWNBZGRyZXNzOwogICAgICAgIHU4IEN1cnJlbnRNYWNBZGRy ZXNzU2V0OwogICAgICAgIHU4IEFsaWduMDE7CgogICAgICAgIHUzMiBGaXJzdEV4YWN0TWF0Y2hS bG10OwogICAgICAgIHUzMiBOZXh0RXhhY3RNYXRjaFJsbXQ7CiAgICAgICAgdTMyIEZpcnN0RXhh Y3RNYXRjaERydjsKICAgICAgICB1MzIgTmV4dEV4YWN0TWF0Y2hEcnY7CiAgICAgICAgU0tfTUFD X0FERFIgRXhhY3RbMTZdOwogICAgICAgIFNLX0ZJTFRFUjY0IEluZXhhY3RGaWx0ZXI7CiAgICAg ICAgU0tfRklMVEVSNjQgSW5leGFjdFJsbXRGaWx0ZXI7CiAgICAgICAgU0tfRklMVEVSNjQgSW5l eGFjdERydkZpbHRlcjsKfSBTS19BRERSX1BPUlQ7CgoKc3RydWN0IHNfQWRkck5ldCB7CgoKICAg ICAgICBTS19NQUNfQUREUiBDdXJyZW50TWFjQWRkcmVzczsKICAgICAgICBTS19NQUNfQUREUiBQ ZXJtYW5lbnRNYWNBZGRyZXNzOwoKCgogICAgICAgIHUzMiBBY3RpdmVQb3J0OwogICAgICAgIHU4 IEN1cnJlbnRNYWNBZGRyZXNzU2V0OwogICAgICAgIHU4IEFsaWduMDE7CiAgICAgICAgdTE2IEFs aWduMDI7Cn07CgoKdHlwZWRlZiBzdHJ1Y3Qgc19BZGRyIHsKCgoKICAgICAgICBTS19BRERSX05F VCBOZXRbMl07CiAgICAgICAgU0tfQUREUl9QT1JUIFBvcnRbMl07CgoKfSBTS19BRERSOwojIDMy MiAiaC9za2FkZHIuaCIKZXh0ZXJuIGludCBTa0FkZHJJbml0KAogICAgICAgIFNLX0FDICpwQUMs CiAgICAgICAgY2hhciogSW9DLAogICAgICAgIGludCBMZXZlbCk7CgpleHRlcm4gaW50IFNrQWRk ck1jQ2xlYXIoCiAgICAgICAgU0tfQUMgKnBBQywKICAgICAgICBjaGFyKiBJb0MsCiAgICAgICAg dTMyIFBvcnROdW1iZXIsCiAgICAgICAgaW50IEZsYWdzKTsKCmV4dGVybiBpbnQgU2tBZGRyWG1h Y01jQ2xlYXIoCiAgICAgICAgU0tfQUMgKnBBQywKICAgICAgICBjaGFyKiBJb0MsCiAgICAgICAg dTMyIFBvcnROdW1iZXIsCiAgICAgICAgaW50IEZsYWdzKTsKCmV4dGVybiBpbnQgU2tBZGRyR21h Y01jQ2xlYXIoCiAgICAgICAgU0tfQUMgKnBBQywKICAgICAgICBjaGFyKiBJb0MsCiAgICAgICAg dTMyIFBvcnROdW1iZXIsCiAgICAgICAgaW50IEZsYWdzKTsKCmV4dGVybiBpbnQgU2tBZGRyTWNB ZGQoCiAgICAgICAgU0tfQUMgKnBBQywKICAgICAgICBjaGFyKiBJb0MsCiAgICAgICAgdTMyIFBv cnROdW1iZXIsCiAgICAgICAgU0tfTUFDX0FERFIgKnBNYywKICAgICAgICBpbnQgRmxhZ3MpOwoK ZXh0ZXJuIGludCBTa0FkZHJYbWFjTWNBZGQoCiAgICAgICAgU0tfQUMgKnBBQywKICAgICAgICBj aGFyKiBJb0MsCiAgICAgICAgdTMyIFBvcnROdW1iZXIsCiAgICAgICAgU0tfTUFDX0FERFIgKnBN YywKICAgICAgICBpbnQgRmxhZ3MpOwoKZXh0ZXJuIGludCBTa0FkZHJHbWFjTWNBZGQoCiAgICAg ICAgU0tfQUMgKnBBQywKICAgICAgICBjaGFyKiBJb0MsCiAgICAgICAgdTMyIFBvcnROdW1iZXIs CiAgICAgICAgU0tfTUFDX0FERFIgKnBNYywKICAgICAgICBpbnQgRmxhZ3MpOwoKZXh0ZXJuIGlu dCBTa0FkZHJNY1VwZGF0ZSgKICAgICAgICBTS19BQyAqcEFDLAogICAgICAgIGNoYXIqIElvQywK ICAgICAgICB1MzIgUG9ydE51bWJlcik7CgpleHRlcm4gaW50IFNrQWRkclhtYWNNY1VwZGF0ZSgK ICAgICAgICBTS19BQyAqcEFDLAogICAgICAgIGNoYXIqIElvQywKICAgICAgICB1MzIgUG9ydE51 bWJlcik7CgpleHRlcm4gaW50IFNrQWRkckdtYWNNY1VwZGF0ZSgKICAgICAgICBTS19BQyAqcEFD LAogICAgICAgIGNoYXIqIElvQywKICAgICAgICB1MzIgUG9ydE51bWJlcik7CgpleHRlcm4gaW50 IFNrQWRkck92ZXJyaWRlKAogICAgICAgIFNLX0FDICpwQUMsCiAgICAgICAgY2hhciogSW9DLAog ICAgICAgIHUzMiBQb3J0TnVtYmVyLAogICAgICAgIFNLX01BQ19BRERSICpwTmV3QWRkciwKICAg ICAgICBpbnQgRmxhZ3MpOwoKZXh0ZXJuIGludCBTa0FkZHJQcm9taXNjdW91c0NoYW5nZSgKICAg ICAgICBTS19BQyAqcEFDLAogICAgICAgIGNoYXIqIElvQywKICAgICAgICB1MzIgUG9ydE51bWJl ciwKICAgICAgICBpbnQgTmV3UHJvbU1vZGUpOwoKZXh0ZXJuIGludCBTa0FkZHJYbWFjUHJvbWlz Y3VvdXNDaGFuZ2UoCiAgICAgICAgU0tfQUMgKnBBQywKICAgICAgICBjaGFyKiBJb0MsCiAgICAg ICAgdTMyIFBvcnROdW1iZXIsCiAgICAgICAgaW50IE5ld1Byb21Nb2RlKTsKCmV4dGVybiBpbnQg U2tBZGRyR21hY1Byb21pc2N1b3VzQ2hhbmdlKAogICAgICAgIFNLX0FDICpwQUMsCiAgICAgICAg Y2hhciogSW9DLAogICAgICAgIHUzMiBQb3J0TnVtYmVyLAogICAgICAgIGludCBOZXdQcm9tTW9k ZSk7CgpleHRlcm4gaW50IFNrQWRkclN3YXAoCiAgICAgICAgU0tfQUMgKnBBQywKICAgICAgICBj aGFyKiBJb0MsCiAgICAgICAgdTMyIEZyb21Qb3J0TnVtYmVyLAogICAgICAgIHUzMiBUb1BvcnRO dW1iZXIpOwojIDI0NCAiaC9za2dlcG5taS5oIiAyCiMgMSAiaC9za3JsbXQuaCIgMQojIDM5OSAi aC9za3JsbXQuaCIKdHlwZWRlZiBzdHJ1Y3Qgc19Sb290SWQgewogICAgICAgIHU4IElkWzhdOwp9 IFNLX1JMTVRfUk9PVF9JRDsKCgp0eXBlZGVmIHN0cnVjdCBzX3BvcnQgewogICAgICAgIFNLX01B Q19BRERSIENoZWNrQWRkcjsKICAgICAgICB1OCBTdXNwZWN0VHg7Cn0gU0tfUE9SVF9DSEVDSzsK Cgp0eXBlZGVmIHN0cnVjdCBzX1JsbXROZXQgU0tfUkxNVF9ORVQ7CgoKdHlwZWRlZiBzdHJ1Y3Qg c19SbG10UG9ydCB7CgoKCiAgICAgICAgdTggUG9ydFN0YXRlOwoKCiAgICAgICAgdTggTGlua0Rv d247CiAgICAgICAgdTggUG9ydERvd247CiAgICAgICAgdTggQWxpZ24wMTsKCiAgICAgICAgdTMy IFBvcnROdW1iZXI7CiAgICAgICAgU0tfUkxNVF9ORVQgKiBOZXQ7CgogICAgICAgIHU2NCBUeEhl bGxvQ3RzOwogICAgICAgIHU2NCBSeEhlbGxvQ3RzOwogICAgICAgIHU2NCBUeFNwSGVsbG9SZXFD dHM7CiAgICAgICAgdTY0IFJ4U3BIZWxsb0N0czsKCgoKCiAgICAgICAgdTMyIFBhY2tldHNQZXJU aW1lU2xvdDsKCiAgICAgICAgdTMyIEJwZHVQYWNrZXRzUGVyVGltZVNsb3Q7CiAgICAgICAgdTY0 IEJjVGltZVN0YW1wOwogICAgICAgIHU2NCBHdVRpbWVTdGFtcDsKCiAgICAgICAgU0tfVElNRVIg VXBUaW1lcjsKICAgICAgICBTS19USU1FUiBEb3duUnhUaW1lcjsKICAgICAgICBTS19USU1FUiBE b3duVHhUaW1lcjsKCiAgICAgICAgdTMyIENoZWNraW5nU3RhdGU7CgogICAgICAgIFNLX0FERFJf UE9SVCAqIEFkZHJQb3J0OwoKICAgICAgICB1OCBSYW5kb21bNF07CiAgICAgICAgdW5zaWduZWQg UG9ydHNDaGVja2VkOwogICAgICAgIHVuc2lnbmVkIFBvcnRzU3VzcGVjdDsKICAgICAgICBTS19Q T1JUX0NIRUNLIFBvcnRDaGVja1sxXTsKCgogICAgICAgIHU4IFBvcnRTdGFydGVkOwogICAgICAg IHU4IFBvcnROb1J4OwogICAgICAgIHU4IFJvb3RJZFNldDsKICAgICAgICBTS19STE1UX1JPT1Rf SUQgUm9vdDsKfSBTS19STE1UX1BPUlQ7CgoKc3RydWN0IHNfUmxtdE5ldCB7CgoKCiAgICAgICAg dTMyIE5ldE51bWJlcjsKCiAgICAgICAgU0tfUkxNVF9QT1JUICogUG9ydFsyXTsKICAgICAgICB1 MzIgTnVtUG9ydHM7CiAgICAgICAgdTMyIFByZWZQb3J0OwoKCgogICAgICAgIHUzMiBDaGdCY1By aW87CiAgICAgICAgdTMyIFJsbXRNb2RlOwogICAgICAgIHUzMiBBY3RpdmVQb3J0OwogICAgICAg IHUzMiBQcmVmZXJlbmNlOwoKICAgICAgICB1OCBSbG10U3RhdGU7CgoKICAgICAgICB1OCBSb290 SWRTZXQ7CiAgICAgICAgdTE2IEFsaWduMDE7CgogICAgICAgIGludCBMaW5rc1VwOwogICAgICAg IGludCBQb3J0c1VwOwogICAgICAgIHUzMiBUaW1lb3V0VmFsdWU7CgogICAgICAgIHUzMiBDaGVj a2luZ1N0YXRlOwogICAgICAgIFNLX1JMTVRfUk9PVF9JRCBSb290OwoKICAgICAgICBTS19USU1F UiBMb2NUaW1lcjsKICAgICAgICBTS19USU1FUiBTZWdUaW1lcjsKfTsKCgp0eXBlZGVmIHN0cnVj dCBzX1JsbXQgewoKCgogICAgICAgIHUzMiBOdW1OZXRzOwogICAgICAgIHUzMiBOZXRzU3RhcnRl ZDsKICAgICAgICBTS19STE1UX05FVCBOZXRbMl07CiAgICAgICAgU0tfUkxNVF9QT1JUIFBvcnRb Ml07CgoKICAgICAgICB1OCBDaGVja1N3aXRjaDsKICAgICAgICB1OCBBbGlnbjAxOwogICAgICAg IHUxNiBBbGlnbjAyOwoKfSBTS19STE1UOwoKCmV4dGVybiBTS19NQUNfQUREUiBCcmlkZ2VNY0Fk ZHI7CmV4dGVybiBTS19NQUNfQUREUiBTa1JsbXRNY0FkZHI7CiMgNTI2ICJoL3NrcmxtdC5oIgpl eHRlcm4gdm9pZCBTa1JsbXRJbml0KAogICAgICAgIFNLX0FDICpwQUMsCiAgICAgICAgY2hhciog SW9DLAogICAgICAgIGludCBMZXZlbCk7CgpleHRlcm4gaW50IFNrUmxtdEV2ZW50KAogICAgICAg IFNLX0FDICpwQUMsCiAgICAgICAgY2hhciogSW9DLAogICAgICAgIHUzMiBFdmVudCwKICAgICAg ICBTS19FVlBBUkEgUGFyYSk7CiMgMjQ1ICJoL3NrZ2Vwbm1pLmgiIDIKIyAxICJoL3NrdnBkLmgi IDEKIyAxNDcgImgvc2t2cGQuaCIKdHlwZWRlZiBzdHJ1Y3Qgc192cGRfc3RhdHVzIHsKICAgICAg ICB1bnNpZ25lZCBzaG9ydCBBbGlnbjAxOwogICAgICAgIHVuc2lnbmVkIHNob3J0IHZwZF9zdGF0 dXM7CiAgICAgICAgaW50IHZwZF9mcmVlX3JvOwogICAgICAgIGludCB2cGRfZnJlZV9ydzsKfSBT S19WUERfU1RBVFVTOwoKdHlwZWRlZiBzdHJ1Y3Qgc192cGQgewogICAgICAgIFNLX1ZQRF9TVEFU VVMgdjsKICAgICAgICBjaGFyIHZwZF9idWZbNTEyXTsKICAgICAgICBpbnQgcm9tX3NpemU7CiAg ICAgICAgaW50IHZwZF9zaXplOwp9IFNLX1ZQRDsKCnR5cGVkZWYgc3RydWN0IHNfdnBkX3BhcmEg ewogICAgICAgIHVuc2lnbmVkIGludCBwX2xlbjsKICAgICAgICBjaGFyICpwX3ZhbDsKfSBTS19W UERfUEFSQTsKIyAxNzUgImgvc2t2cGQuaCIKdHlwZWRlZiBzdHJ1Y3Qgc192cGRfa2V5IHsKICAg ICAgICBjaGFyIHBfa2V5WzJdOwogICAgICAgIHVuc2lnbmVkIGNoYXIgcF9sZW47CiAgICAgICAg Y2hhciBwX3ZhbDsKfSBTS19WUERfS0VZOwojIDI1MCAiaC9za3ZwZC5oIgpleHRlcm4gaW50IFZw ZFNldHVwUGFyYSgKICAgICAgICBTS19BQyAqcEFDLAogICAgICAgIGNoYXIgKmtleSwKICAgICAg ICBjaGFyICpidWYsCiAgICAgICAgaW50IGxlbiwKICAgICAgICBpbnQgdHlwZSwKICAgICAgICBp bnQgb3ApOwoKZXh0ZXJuIFNLX1ZQRF9TVEFUVVMgKlZwZFN0YXQoCiAgICAgICAgU0tfQUMgKnBB QywKICAgICAgICBjaGFyKiBJb0MpOwoKZXh0ZXJuIGludCBWcGRLZXlzKAogICAgICAgIFNLX0FD ICpwQUMsCiAgICAgICAgY2hhciogSW9DLAogICAgICAgIGNoYXIgKmJ1ZiwKICAgICAgICBpbnQg KmxlbiwKICAgICAgICBpbnQgKmVsZW1lbnRzKTsKCmV4dGVybiBpbnQgVnBkUmVhZCgKICAgICAg ICBTS19BQyAqcEFDLAogICAgICAgIGNoYXIqIElvQywKICAgICAgICBjaGFyICprZXksCiAgICAg ICAgY2hhciAqYnVmLAogICAgICAgIGludCAqbGVuKTsKCmV4dGVybiB1OCBWcGRNYXlXcml0ZSgK ICAgICAgICBjaGFyICprZXkpOwoKZXh0ZXJuIGludCBWcGRXcml0ZSgKICAgICAgICBTS19BQyAq cEFDLAogICAgICAgIGNoYXIqIElvQywKICAgICAgICBjaGFyICprZXksCiAgICAgICAgY2hhciAq YnVmKTsKCmV4dGVybiBpbnQgVnBkRGVsZXRlKAogICAgICAgIFNLX0FDICpwQUMsCiAgICAgICAg Y2hhciogSW9DLAogICAgICAgIGNoYXIgKmtleSk7CgpleHRlcm4gaW50IFZwZFVwZGF0ZSgKICAg ICAgICBTS19BQyAqcEFDLAogICAgICAgIGNoYXIqIElvQyk7CgpleHRlcm4gdm9pZCBWcGRFcnJM b2coCiAgICAgICAgU0tfQUMgKnBBQywKICAgICAgICBjaGFyKiBJb0MsCiAgICAgICAgY2hhciAq bXNnKTsKIyAyNDYgImgvc2tnZXBubWkuaCIgMgojIDU2MyAiaC9za2dlcG5taS5oIgp0eXBlZGVm IHN0cnVjdCBzX1BubWlWY3QgewogICAgICAgIHU4IFZjdFN0YXR1czsKICAgICAgICB1OCBQQ2Fi bGVMZW47CiAgICAgICAgdTMyIFBNZGlQYWlyTGVuWzRdOwogICAgICAgIHU4IFBNZGlQYWlyU3Rz WzRdOwp9IFNLX1BOTUlfVkNUOwojIDc5NCAiaC9za2dlcG5taS5oIgp0eXBlZGVmIHN0cnVjdCBz X1BubWlWcGQgewogICAgICAgIGNoYXIgVnBkS2V5WzVdOwogICAgICAgIGNoYXIgVnBkVmFsdWVb MTI4XTsKICAgICAgICB1OCBWcGRBY2Nlc3M7CiAgICAgICAgdTggVnBkQWN0aW9uOwp9IFNLX1BO TUlfVlBEOwoKdHlwZWRlZiBzdHJ1Y3Qgc19Qbm1pU2Vuc29yIHsKICAgICAgICB1OCBTZW5zb3JJ bmRleDsKICAgICAgICBjaGFyIFNlbnNvckRlc2NyWzI1XTsKICAgICAgICB1OCBTZW5zb3JUeXBl OwogICAgICAgIHUzMiBTZW5zb3JWYWx1ZTsKICAgICAgICB1MzIgU2Vuc29yV2FybmluZ1RocmVz aG9sZExvdzsKICAgICAgICB1MzIgU2Vuc29yV2FybmluZ1RocmVzaG9sZEhpZ2g7CiAgICAgICAg dTMyIFNlbnNvckVycm9yVGhyZXNob2xkTG93OwogICAgICAgIHUzMiBTZW5zb3JFcnJvclRocmVz aG9sZEhpZ2g7CiAgICAgICAgdTggU2Vuc29yU3RhdHVzOwogICAgICAgIHU2NCBTZW5zb3JXYXJu aW5nQ3RzOwogICAgICAgIHU2NCBTZW5zb3JFcnJvckN0czsKICAgICAgICB1NjQgU2Vuc29yV2Fy bmluZ1RpbWVzdGFtcDsKICAgICAgICB1NjQgU2Vuc29yRXJyb3JUaW1lc3RhbXA7Cn0gU0tfUE5N SV9TRU5TT1I7Cgp0eXBlZGVmIHN0cnVjdCBzX1BubWlDaGVja3N1bSB7CiAgICAgICAgdTY0IENo ZWNrc3VtUnhPa0N0czsKICAgICAgICB1NjQgQ2hlY2tzdW1SeFVuYWJsZUN0czsKICAgICAgICB1 NjQgQ2hlY2tzdW1SeEVyckN0czsKICAgICAgICB1NjQgQ2hlY2tzdW1UeE9rQ3RzOwogICAgICAg IHU2NCBDaGVja3N1bVR4VW5hYmxlQ3RzOwp9IFNLX1BOTUlfQ0hFQ0tTVU07Cgp0eXBlZGVmIHN0 cnVjdCBzX1BubWlTdGF0IHsKICAgICAgICB1NjQgU3RhdFR4T2tDdHM7CiAgICAgICAgdTY0IFN0 YXRUeE9jdGV0c09rQ3RzOwogICAgICAgIHU2NCBTdGF0VHhCcm9hZGNhc3RPa0N0czsKICAgICAg ICB1NjQgU3RhdFR4TXVsdGljYXN0T2tDdHM7CiAgICAgICAgdTY0IFN0YXRUeFVuaWNhc3RPa0N0 czsKICAgICAgICB1NjQgU3RhdFR4TG9uZ0ZyYW1lc0N0czsKICAgICAgICB1NjQgU3RhdFR4QnVy c3RDdHM7CiAgICAgICAgdTY0IFN0YXRUeFBhdXNlTWFjQ3RybEN0czsKICAgICAgICB1NjQgU3Rh dFR4TWFjQ3RybEN0czsKICAgICAgICB1NjQgU3RhdFR4U2luZ2xlQ29sbGlzaW9uQ3RzOwogICAg ICAgIHU2NCBTdGF0VHhNdWx0aXBsZUNvbGxpc2lvbkN0czsKICAgICAgICB1NjQgU3RhdFR4RXhj ZXNzaXZlQ29sbGlzaW9uQ3RzOwogICAgICAgIHU2NCBTdGF0VHhMYXRlQ29sbGlzaW9uQ3RzOwog ICAgICAgIHU2NCBTdGF0VHhEZWZlcnJhbEN0czsKICAgICAgICB1NjQgU3RhdFR4RXhjZXNzaXZl RGVmZXJyYWxDdHM7CiAgICAgICAgdTY0IFN0YXRUeEZpZm9VbmRlcnJ1bkN0czsKICAgICAgICB1 NjQgU3RhdFR4Q2FycmllckN0czsKICAgICAgICB1NjQgRHVtbXkxOwogICAgICAgIHU2NCBTdGF0 VHg2NEN0czsKICAgICAgICB1NjQgU3RhdFR4MTI3Q3RzOwogICAgICAgIHU2NCBTdGF0VHgyNTVD dHM7CiAgICAgICAgdTY0IFN0YXRUeDUxMUN0czsKICAgICAgICB1NjQgU3RhdFR4MTAyM0N0czsK ICAgICAgICB1NjQgU3RhdFR4TWF4Q3RzOwogICAgICAgIHU2NCBTdGF0VHhTeW5jQ3RzOwogICAg ICAgIHU2NCBTdGF0VHhTeW5jT2N0ZXRzQ3RzOwogICAgICAgIHU2NCBTdGF0UnhPa0N0czsKICAg ICAgICB1NjQgU3RhdFJ4T2N0ZXRzT2tDdHM7CiAgICAgICAgdTY0IFN0YXRSeEJyb2FkY2FzdE9r Q3RzOwogICAgICAgIHU2NCBTdGF0UnhNdWx0aWNhc3RPa0N0czsKICAgICAgICB1NjQgU3RhdFJ4 VW5pY2FzdE9rQ3RzOwogICAgICAgIHU2NCBTdGF0UnhMb25nRnJhbWVzQ3RzOwogICAgICAgIHU2 NCBTdGF0UnhQYXVzZU1hY0N0cmxDdHM7CiAgICAgICAgdTY0IFN0YXRSeE1hY0N0cmxDdHM7CiAg ICAgICAgdTY0IFN0YXRSeFBhdXNlTWFjQ3RybEVycm9yQ3RzOwogICAgICAgIHU2NCBTdGF0UnhN YWNDdHJsVW5rbm93bkN0czsKICAgICAgICB1NjQgU3RhdFJ4QnVyc3RDdHM7CiAgICAgICAgdTY0 IFN0YXRSeE1pc3NlZEN0czsKICAgICAgICB1NjQgU3RhdFJ4RnJhbWluZ0N0czsKICAgICAgICB1 NjQgU3RhdFJ4Rmlmb092ZXJmbG93Q3RzOwogICAgICAgIHU2NCBTdGF0UnhKYWJiZXJDdHM7CiAg ICAgICAgdTY0IFN0YXRSeENhcnJpZXJDdHM7CiAgICAgICAgdTY0IFN0YXRSeElSTGVuZ3RoQ3Rz OwogICAgICAgIHU2NCBTdGF0UnhTeW1ib2xDdHM7CiAgICAgICAgdTY0IFN0YXRSeFNob3J0c0N0 czsKICAgICAgICB1NjQgU3RhdFJ4UnVudEN0czsKICAgICAgICB1NjQgU3RhdFJ4Q2V4dEN0czsK ICAgICAgICB1NjQgU3RhdFJ4VG9vTG9uZ0N0czsKICAgICAgICB1NjQgU3RhdFJ4RmNzQ3RzOwog ICAgICAgIHU2NCBEdW1teTI7CiAgICAgICAgdTY0IFN0YXRSeDY0Q3RzOwogICAgICAgIHU2NCBT dGF0UngxMjdDdHM7CiAgICAgICAgdTY0IFN0YXRSeDI1NUN0czsKICAgICAgICB1NjQgU3RhdFJ4 NTExQ3RzOwogICAgICAgIHU2NCBTdGF0UngxMDIzQ3RzOwogICAgICAgIHU2NCBTdGF0UnhNYXhD dHM7Cn0gU0tfUE5NSV9TVEFUOwoKdHlwZWRlZiBzdHJ1Y3Qgc19Qbm1pQ29uZiB7CiAgICAgICAg Y2hhciBDb25mTWFjQ3VycmVudEFkZHJbNl07CiAgICAgICAgY2hhciBDb25mTWFjRmFjdG9yeUFk ZHJbNl07CiAgICAgICAgdTggQ29uZlBNRDsKICAgICAgICB1OCBDb25mQ29ubmVjdG9yOwogICAg ICAgIHU4IENvbmZMaW5rQ2FwYWJpbGl0eTsKICAgICAgICB1OCBDb25mTGlua01vZGU7CiAgICAg ICAgdTggQ29uZkxpbmtNb2RlU3RhdHVzOwogICAgICAgIHU4IENvbmZMaW5rU3RhdHVzOwogICAg ICAgIHU4IENvbmZGbG93Q3RybENhcGFiaWxpdHk7CiAgICAgICAgdTggQ29uZkZsb3dDdHJsTW9k ZTsKICAgICAgICB1OCBDb25mRmxvd0N0cmxTdGF0dXM7CiAgICAgICAgdTggQ29uZlBoeU9wZXJh dGlvbkNhcGFiaWxpdHk7CiAgICAgICAgdTggQ29uZlBoeU9wZXJhdGlvbk1vZGU7CiAgICAgICAg dTggQ29uZlBoeU9wZXJhdGlvblN0YXR1czsKICAgICAgICB1OCBDb25mU3BlZWRDYXBhYmlsaXR5 OwogICAgICAgIHU4IENvbmZTcGVlZE1vZGU7CiAgICAgICAgdTggQ29uZlNwZWVkU3RhdHVzOwp9 IFNLX1BOTUlfQ09ORjsKCnR5cGVkZWYgc3RydWN0IHNfUG5taVJsbXQgewogICAgICAgIHUzMiBS bG10SW5kZXg7CiAgICAgICAgdTMyIFJsbXRTdGF0dXM7CiAgICAgICAgdTY0IFJsbXRUeEhlbGxv Q3RzOwogICAgICAgIHU2NCBSbG10UnhIZWxsb0N0czsKICAgICAgICB1NjQgUmxtdFR4U3BIZWxs b1JlcUN0czsKICAgICAgICB1NjQgUmxtdFJ4U3BIZWxsb0N0czsKfSBTS19QTk1JX1JMTVQ7Cgp0 eXBlZGVmIHN0cnVjdCBzX1BubWlSbG10TW9uaXRvciB7CiAgICAgICAgdTMyIFJsbXRNb25pdG9y SW5kZXg7CiAgICAgICAgY2hhciBSbG10TW9uaXRvckFkZHJbNl07CiAgICAgICAgdTY0IFJsbXRN b25pdG9yRXJyb3JDdHM7CiAgICAgICAgdTY0IFJsbXRNb25pdG9yVGltZXN0YW1wOwogICAgICAg IHU4IFJsbXRNb25pdG9yQWRtaW47Cn0gU0tfUE5NSV9STE1UX01PTklUT1I7Cgp0eXBlZGVmIHN0 cnVjdCBzX1BubWlSZXF1ZXN0U3RhdHVzIHsKICAgICAgICB1MzIgRXJyb3JTdGF0dXM7CiAgICAg ICAgdTMyIEVycm9yT2Zmc2V0Owp9IFNLX1BOTUlfUkVRVUVTVF9TVEFUVVM7Cgp0eXBlZGVmIHN0 cnVjdCBzX1BubWlTdHJ1Y0RhdGEgewogICAgICAgIHUzMiBNZ210REJWZXJzaW9uOwogICAgICAg IFNLX1BOTUlfUkVRVUVTVF9TVEFUVVMgUmV0dXJuU3RhdHVzOwogICAgICAgIHUzMiBWcGRGcmVl Qnl0ZXM7CiAgICAgICAgY2hhciBWcGRFbnRyaWVzTGlzdFsoNTEyIC8gNCkgKiA1XTsKICAgICAg ICB1MzIgVnBkRW50cmllc051bWJlcjsKICAgICAgICBTS19QTk1JX1ZQRCBWcGRbKDUxMiAvIDQp XTsKICAgICAgICB1MzIgUG9ydE51bWJlcjsKICAgICAgICB1MzIgRGV2aWNlVHlwZTsKICAgICAg ICBjaGFyIERyaXZlckRlc2NyWzgwXTsKICAgICAgICBjaGFyIERyaXZlclZlcnNpb25bMjVdOwog ICAgICAgIGNoYXIgSHdEZXNjcls4MF07CiAgICAgICAgY2hhciBId1ZlcnNpb25bMjVdOwogICAg ICAgIHUxNiBDaGlwc2V0OwogICAgICAgIHUzMiBNdHVTaXplOwogICAgICAgIHUzMiBBY3Rpb247 CiAgICAgICAgdTMyIFRlc3RSZXN1bHQ7CiAgICAgICAgdTggQnVzVHlwZTsKICAgICAgICB1OCBC dXNTcGVlZDsKICAgICAgICB1OCBCdXNXaWR0aDsKICAgICAgICB1OCBTZW5zb3JOdW1iZXI7CiAg ICAgICAgU0tfUE5NSV9TRU5TT1IgU2Vuc29yWyg4KV07CiAgICAgICAgdTggQ2hlY2tzdW1OdW1i ZXI7CiAgICAgICAgU0tfUE5NSV9DSEVDS1NVTSBDaGVja3N1bVszXTsKICAgICAgICBTS19QTk1J X1NUQVQgU3RhdFsoMiArIDEpXTsKICAgICAgICBTS19QTk1JX0NPTkYgQ29uZlsoMiArIDEpXTsK ICAgICAgICB1OCBSbG10TW9kZTsKICAgICAgICB1MzIgUmxtdFBvcnROdW1iZXI7CiAgICAgICAg dTggUmxtdFBvcnRBY3RpdmU7CiAgICAgICAgdTggUmxtdFBvcnRQcmVmZXJyZWQ7CiAgICAgICAg dTY0IFJsbXRDaGFuZ2VDdHM7CiAgICAgICAgdTY0IFJsbXRDaGFuZ2VUaW1lOwogICAgICAgIHU2 NCBSbG10Q2hhbmdlRXN0aW1hdGU7CiAgICAgICAgdTY0IFJsbXRDaGFuZ2VUaHJlc2hvbGQ7CiAg ICAgICAgU0tfUE5NSV9STE1UIFJsbXRbMl07CiAgICAgICAgdTMyIFJsbXRNb25pdG9yTnVtYmVy OwogICAgICAgIFNLX1BOTUlfUkxNVF9NT05JVE9SIFJsbXRNb25pdG9yWzIwXTsKICAgICAgICB1 MzIgVHJhcE51bWJlcjsKICAgICAgICB1OCBUcmFwWzUxMl07CiAgICAgICAgdTY0IFR4U3dRdWV1 ZUxlbjsKICAgICAgICB1NjQgVHhTd1F1ZXVlTWF4OwogICAgICAgIHU2NCBUeFJldHJ5Q3RzOwog ICAgICAgIHU2NCBSeEludHJDdHM7CiAgICAgICAgdTY0IFR4SW50ckN0czsKICAgICAgICB1NjQg UnhOb0J1ZkN0czsKICAgICAgICB1NjQgVHhOb0J1ZkN0czsKICAgICAgICB1NjQgVHhVc2VkRGVz Y3JObzsKICAgICAgICB1NjQgUnhEZWxpdmVyZWRDdHM7CiAgICAgICAgdTY0IFJ4T2N0ZXRzRGVs aXZlcmVkQ3RzOwogICAgICAgIHU2NCBSeEh3RXJyb3JzQ3RzOwogICAgICAgIHU2NCBUeEh3RXJy b3JzQ3RzOwogICAgICAgIHU2NCBJbkVycm9yc0N0czsKICAgICAgICB1NjQgT3V0RXJyb3JzQ3Rz OwogICAgICAgIHU2NCBFcnJSZWNvdmVyeUN0czsKICAgICAgICB1NjQgU3lzVXBUaW1lOwp9IFNL X1BOTUlfU1RSVUNUX0RBVEE7CiMgMTAwNSAiaC9za2dlcG5taS5oIgp0eXBlZGVmIHN0cnVjdCBz X1BubWlFc3RpbWF0ZSB7CiAgICAgICAgdW5zaWduZWQgaW50IEVzdFZhbHVlSW5kZXg7CiAgICAg ICAgdTY0IEVzdFZhbHVlWzddOwogICAgICAgIHU2NCBFc3RpbWF0ZTsKICAgICAgICBTS19USU1F UiBFc3RUaW1lcjsKfSBTS19QTk1JX0VTVElNQVRFOwoKCgoKCnR5cGVkZWYgc3RydWN0IHNfVmN0 VGltZXIgewogICAgICAgIFNLX1RJTUVSIFZjdFRpbWVyOwp9IFNLX1BOTUlfVkNUX1RJTUVSOwoK CgoKCnR5cGVkZWYgc3RydWN0IHNfUG5taVBvcnQgewogICAgICAgIHU2NCBTdGF0U3luY0N0czsK ICAgICAgICB1NjQgU3RhdFN5bmNPY3RldHNDdHM7CiAgICAgICAgdTY0IFN0YXRSeExvbmdGcmFt ZUN0czsKICAgICAgICB1NjQgU3RhdFJ4RnJhbWVUb29Mb25nQ3RzOwogICAgICAgIHU2NCBTdGF0 UnhQTWFjY0VycjsKICAgICAgICB1NjQgVHhTd1F1ZXVlTGVuOwogICAgICAgIHU2NCBUeFN3UXVl dWVNYXg7CiAgICAgICAgdTY0IFR4UmV0cnlDdHM7CiAgICAgICAgdTY0IFJ4SW50ckN0czsKICAg ICAgICB1NjQgVHhJbnRyQ3RzOwogICAgICAgIHU2NCBSeE5vQnVmQ3RzOwogICAgICAgIHU2NCBU eE5vQnVmQ3RzOwogICAgICAgIHU2NCBUeFVzZWREZXNjck5vOwogICAgICAgIHU2NCBSeERlbGl2 ZXJlZEN0czsKICAgICAgICB1NjQgUnhPY3RldHNEZWxpdmVyZWRDdHM7CiAgICAgICAgdTY0IFJ4 SHdFcnJvcnNDdHM7CiAgICAgICAgdTY0IFR4SHdFcnJvcnNDdHM7CiAgICAgICAgdTY0IEluRXJy b3JzQ3RzOwogICAgICAgIHU2NCBPdXRFcnJvcnNDdHM7CiAgICAgICAgdTY0IEVyclJlY292ZXJ5 Q3RzOwogICAgICAgIHU2NCBSeFNob3J0WmVyb01hcms7CiAgICAgICAgdTY0IENvdW50ZXJPZmZz ZXRbNjZdOwogICAgICAgIHUzMiBDb3VudGVySGlnaFs2Nl07CiAgICAgICAgdTggQWN0aXZlRmxh ZzsKICAgICAgICB1OCBBbGlnblszXTsKfSBTS19QTk1JX1BPUlQ7CgoKdHlwZWRlZiBzdHJ1Y3Qg c19Qbm1pRGF0YSB7CiAgICAgICAgU0tfUE5NSV9QT1JUIFBvcnQgWzJdOwogICAgICAgIFNLX1BO TUlfUE9SVCBCdWZQb3J0IFsyXTsKICAgICAgICB1NjQgVmlydHVhbENvdW50ZXJPZmZzZXRbNjZd OwogICAgICAgIHUzMiBUZXN0UmVzdWx0OwogICAgICAgIGNoYXIgSHdWZXJzaW9uWzEwXTsKICAg ICAgICB1MTYgQWxpZ24wMTsKCiAgICAgICAgY2hhciAqcERyaXZlckRlc2NyaXB0aW9uOwogICAg ICAgIGNoYXIgKnBEcml2ZXJWZXJzaW9uOwoKICAgICAgICBpbnQgTWFjVXBkYXRlZEZsYWc7CiAg ICAgICAgaW50IFJsbXRVcGRhdGVkRmxhZzsKICAgICAgICBpbnQgU2lycVVwZGF0ZWRGbGFnOwoK ICAgICAgICB1NjQgUmxtdENoYW5nZUN0czsKICAgICAgICB1NjQgUmxtdENoYW5nZVRpbWU7CiAg ICAgICAgU0tfUE5NSV9FU1RJTUFURSBSbG10Q2hhbmdlRXN0aW1hdGU7CiAgICAgICAgdTY0IFJs bXRDaGFuZ2VUaHJlc2hvbGQ7CgogICAgICAgIHU2NCBTdGFydFVwVGltZTsKICAgICAgICB1MzIg RGV2aWNlVHlwZTsKICAgICAgICBjaGFyIFBjaUJ1c1NwZWVkOwogICAgICAgIGNoYXIgUGNpQnVz V2lkdGg7CiAgICAgICAgY2hhciBDaGlwc2V0OwogICAgICAgIGNoYXIgUE1EOwogICAgICAgIGNo YXIgQ29ubmVjdG9yOwogICAgICAgIHU4IER1YWxOZXRBY3RpdmVGbGFnOwogICAgICAgIHUxNiBB bGlnbjAyOwoKICAgICAgICBjaGFyIFRyYXBCdWZbNTEyXTsKICAgICAgICB1bnNpZ25lZCBpbnQg VHJhcEJ1ZkZyZWU7CiAgICAgICAgdW5zaWduZWQgaW50IFRyYXBRdWV1ZUJlZzsKICAgICAgICB1 bnNpZ25lZCBpbnQgVHJhcFF1ZXVlRW5kOwogICAgICAgIHVuc2lnbmVkIGludCBUcmFwQnVmUGFk OwogICAgICAgIHVuc2lnbmVkIGludCBUcmFwVW5pcXVlOwogICAgICAgIHU4IFZjdFN0YXR1c1sy XTsKICAgICAgICBTS19QTk1JX1ZDVCBWY3RCYWNrdXBbMl07CiAgICAgICAgU0tfUE5NSV9WQ1Rf VElNRVIgVmN0VGltZW91dFsyXTsKfSBTS19QTk1JOwoKCgoKCmV4dGVybiBpbnQgU2tQbm1pSW5p dChTS19BQyAqcEFjLCBjaGFyKiBJb0MsIGludCBsZXZlbCk7CmV4dGVybiBpbnQgU2tQbm1pR2V0 VmFyKFNLX0FDICpwQWMsIGNoYXIqIElvQywgdTMyIElkLCB2b2lkKiBwQnVmLAogICAgICAgIHVu c2lnbmVkIGludCogcExlbiwgdTMyIEluc3RhbmNlLCB1MzIgTmV0SW5kZXgpOwpleHRlcm4gaW50 IFNrUG5taVByZVNldFZhcihTS19BQyAqcEFjLCBjaGFyKiBJb0MsIHUzMiBJZCwKICAgICAgICB2 b2lkKiBwQnVmLCB1bnNpZ25lZCBpbnQgKnBMZW4sIHUzMiBJbnN0YW5jZSwgdTMyIE5ldEluZGV4 KTsKZXh0ZXJuIGludCBTa1BubWlTZXRWYXIoU0tfQUMgKnBBYywgY2hhciogSW9DLCB1MzIgSWQs IHZvaWQqIHBCdWYsCiAgICAgICAgdW5zaWduZWQgaW50ICpwTGVuLCB1MzIgSW5zdGFuY2UsIHUz MiBOZXRJbmRleCk7CmV4dGVybiBpbnQgU2tQbm1pR2V0U3RydWN0KFNLX0FDICpwQWMsIGNoYXIq IElvQywgdm9pZCogcEJ1ZiwKICAgICAgICB1bnNpZ25lZCBpbnQgKnBMZW4sIHUzMiBOZXRJbmRl eCk7CmV4dGVybiBpbnQgU2tQbm1pUHJlU2V0U3RydWN0KFNLX0FDICpwQWMsIGNoYXIqIElvQywg dm9pZCogcEJ1ZiwKICAgICAgICB1bnNpZ25lZCBpbnQgKnBMZW4sIHUzMiBOZXRJbmRleCk7CmV4 dGVybiBpbnQgU2tQbm1pU2V0U3RydWN0KFNLX0FDICpwQWMsIGNoYXIqIElvQywgdm9pZCogcEJ1 ZiwKICAgICAgICB1bnNpZ25lZCBpbnQgKnBMZW4sIHUzMiBOZXRJbmRleCk7CmV4dGVybiBpbnQg U2tQbm1pRXZlbnQoU0tfQUMgKnBBYywgY2hhciogSW9DLCB1MzIgRXZlbnQsCiAgICAgICAgU0tf RVZQQVJBIFBhcmFtKTsKIyA0NDUgInNrZ2Vwbm1pLmMiIDIKIyAxICJoL3NrZ2VzaXJxLmgiIDEK IyAxODkgImgvc2tnZXNpcnEuaCIKZXh0ZXJuIHZvaWQgU2tHZVNpcnFJc3IoU0tfQUMgKnBBQywg Y2hhciogSW9DLCB1MzIgSXN0YXR1cyk7CmV4dGVybiBpbnQgU2tHZVNpcnFFdmVudChTS19BQyAq cEFDLCBjaGFyKiBJb0MsIHUzMiBFdmVudCwgU0tfRVZQQVJBIFBhcmEpOwpleHRlcm4gdm9pZCBT a0hXTGlua1VwKFNLX0FDICpwQUMsIGNoYXIqIElvQywgaW50IFBvcnQpOwpleHRlcm4gdm9pZCBT a0hXTGlua0Rvd24oU0tfQUMgKnBBQywgY2hhciogSW9DLCBpbnQgUG9ydCk7CiMgNDQ2ICJza2dl cG5taS5jIiAyCiMgMSAiaC9za2NzdW0uaCIgMQojIDE4OCAiaC9za2NzdW0uaCIKdHlwZWRlZiBz dHJ1Y3Qgc19Dc1Byb3RvY29sU3RhdGlzdGljcyB7CiAgICAgICAgdTY0IFJ4T2tDdHM7CiAgICAg ICAgdTY0IFJ4VW5hYmxlQ3RzOwogICAgICAgIHU2NCBSeEVyckN0czsKICAgICAgICB1NjQgVHhP a0N0czsKICAgICAgICB1NjQgVHhVbmFibGVDdHM7Cn0gU0tDU19QUk9UT19TVEFUUzsKCgoKCnR5 cGVkZWYgc3RydWN0IHNfQ3N1bSB7CgogICAgICAgIHVuc2lnbmVkIFJlY2VpdmVGbGFnc1syXTsK CgoKCgogICAgICAgIFNLQ1NfUFJPVE9fU1RBVFMgUHJvdG9TdGF0c1syXVszXTsKfSBTS19DU1VN OwoKCgoKdHlwZWRlZiBzdHJ1Y3Qgc19Dc1BhY2tldEluZm8gewoKICAgICAgICB1bnNpZ25lZCBQ cm90b2NvbEZsYWdzOwoKCiAgICAgICAgdW5zaWduZWQgSXBIZWFkZXJMZW5ndGg7CgoKICAgICAg ICB1bnNpZ25lZCBJcEhlYWRlckNoZWNrc3VtOwoKCiAgICAgICAgdW5zaWduZWQgUHNldWRvSGVh ZGVyQ2hlY2tzdW07Cn0gU0tDU19QQUNLRVRfSU5GTzsKIyAyMzUgImgvc2tjc3VtLmgiCmV4dGVy biBpbnQgU2tDc0V2ZW50KAogICAgICAgIFNLX0FDICpwQWMsCiAgICAgICAgY2hhciogSW9jLAog ICAgICAgIHUzMiBFdmVudCwKICAgICAgICBTS19FVlBBUkEgUGFyYW0pOwoKZXh0ZXJuIGludCBT a0NzR2V0UmVjZWl2ZUluZm8oCiAgICAgICAgU0tfQUMgKnBBYywKICAgICAgICB2b2lkICpwSXBI ZWFkZXIsCiAgICAgICAgdW5zaWduZWQgQ2hlY2tzdW0xLAogICAgICAgIHVuc2lnbmVkIENoZWNr c3VtMiwKICAgICAgICBpbnQgTmV0TnVtYmVyKTsKCmV4dGVybiB2b2lkIFNrQ3NHZXRTZW5kSW5m bygKICAgICAgICBTS19BQyAqcEFjLAogICAgICAgIHZvaWQgKnBJcEhlYWRlciwKICAgICAgICBT S0NTX1BBQ0tFVF9JTkZPICpwUGFja2V0SW5mbywKICAgICAgICBpbnQgTmV0TnVtYmVyKTsKCmV4 dGVybiB2b2lkIFNrQ3NTZXRSZWNlaXZlRmxhZ3MoCiAgICAgICAgU0tfQUMgKnBBYywKICAgICAg ICB1bnNpZ25lZCBSZWNlaXZlRmxhZ3MsCiAgICAgICAgdW5zaWduZWQgKnBDaGVja3N1bTFPZmZz ZXQsCiAgICAgICAgdW5zaWduZWQgKnBDaGVja3N1bTJPZmZzZXQsCiAgICAgICAgaW50IE5ldE51 bWJlcik7CiMgNDQ3ICJza2dlcG5taS5jIiAyCgojIDEgImgvc2tnZWh3LmgiIDEKIyAxNzg2ICJo L3NrZ2Vody5oIgp0eXBlZGVmIHN0cnVjdCBzX0h3VHhkIHsKICAgICAgICB1MzIgdm9sYXRpbGUg VHhDdHJsOwogICAgICAgIHUzMiBUeE5leHQ7CiAgICAgICAgdTMyIFR4QWRyTG87CiAgICAgICAg dTMyIFR4QWRySGk7CiAgICAgICAgdTMyIFR4U3RhdDsKCiAgICAgICAgdTE2IFR4VGNwT2ZmczsK ICAgICAgICB1MTYgVHhSZXMxOwogICAgICAgIHUxNiBUeFRjcFdwOwogICAgICAgIHUxNiBUeFRj cFNwOwoKCgoKCgogICAgICAgIHUzMiBUeFJlczI7Cn0gU0tfSFdUWEQ7CgoKdHlwZWRlZiBzdHJ1 Y3Qgc19Id1J4ZCB7CiAgICAgICAgdTMyIHZvbGF0aWxlIFJ4Q3RybDsKICAgICAgICB1MzIgUnhO ZXh0OwogICAgICAgIHUzMiBSeEFkckxvOwogICAgICAgIHUzMiBSeEFkckhpOwogICAgICAgIHUz MiBSeFN0YXQ7CiAgICAgICAgdTMyIFJ4VGlTdDsKCiAgICAgICAgdTE2IFJ4VGNwU3VtMTsKICAg ICAgICB1MTYgUnhUY3BTdW0yOwogICAgICAgIHUxNiBSeFRjcFNwMTsKICAgICAgICB1MTYgUnhU Y3BTcDI7CgoKCgoKCn0gU0tfSFdSWEQ7CiMgNDQ5ICJza2dlcG5taS5jIiAyCiMgMSAiaC9za2dl aW5pdC5oIiAxCiMgNTk4ICJoL3NrZ2Vpbml0LmgiCnR5cGVkZWYgc3RydWN0IHNfR2VNYWNGdW5j IHsKICAgICAgICBpbnQgKCpwRm5NYWNVcGRhdGVTdGF0cykoU0tfQUMgKnBBQywgY2hhciogSW9D LCB1bnNpZ25lZCBpbnQgUG9ydCk7CiAgICAgICAgaW50ICgqcEZuTWFjU3RhdGlzdGljKShTS19B QyAqcEFDLCBjaGFyKiBJb0MsIHVuc2lnbmVkIGludCBQb3J0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiBTdGF0QWRkciwgdTMyICpw VmFsKTsKICAgICAgICBpbnQgKCpwRm5NYWNSZXNldENvdW50ZXIpKFNLX0FDICpwQUMsIGNoYXIq IElvQywgdW5zaWduZWQgaW50IFBvcnQpOwogICAgICAgIGludCAoKnBGbk1hY092ZXJmbG93KShT S19BQyAqcEFDLCBjaGFyKiBJb0MsIHVuc2lnbmVkIGludCBQb3J0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgSVN0YXR1cywgdTY0ICpwVmFs KTsKfSBTS19HRU1BQ0ZVTkM7CgoKCgp0eXBlZGVmIHN0cnVjdCBzX0dlUG9ydCB7CgogICAgICAg IFNLX1RJTUVSIFBXYVRpbWVyOwogICAgICAgIFNLX1RJTUVSIEhhbGZEdXBDaGtUaW1lcjsKCiAg ICAgICAgdTMyIFBQcmV2U2hvcnRzOwogICAgICAgIHUzMiBQUHJldkZjczsKICAgICAgICB1NjQg UFByZXZSeDsKICAgICAgICB1NjQgUFJ4TGltOwogICAgICAgIHU2NCBMYXN0T2N0ZXRzOwogICAg ICAgIGludCBQTGlua1Jlc0N0OwogICAgICAgIGludCBQQXV0b05lZ1RpbWVPdXQ7CiAgICAgICAg aW50IFBBdXRvTmVnVE9DdDsKICAgICAgICBpbnQgUFJ4UVNpemU7CiAgICAgICAgaW50IFBYU1FT aXplOwogICAgICAgIGludCBQWEFRU2l6ZTsKICAgICAgICB1MzIgUFJ4UVJhbVN0YXJ0OwogICAg ICAgIHUzMiBQUnhRUmFtRW5kOwogICAgICAgIHUzMiBQWHNRUmFtU3RhcnQ7CiAgICAgICAgdTMy IFBYc1FSYW1FbmQ7CiAgICAgICAgdTMyIFBYYVFSYW1TdGFydDsKICAgICAgICB1MzIgUFhhUVJh bUVuZDsKICAgICAgICB1MzIgUFJ4T3ZlckNudDsKICAgICAgICBpbnQgUFJ4UU9mZjsKICAgICAg ICBpbnQgUFhzUU9mZjsKICAgICAgICBpbnQgUFhhUU9mZjsKICAgICAgICBpbnQgUGh5VHlwZTsK ICAgICAgICB1MTYgUGh5SWQxOwogICAgICAgIHUxNiBQaHlBZGRyOwogICAgICAgIHUxNiBQSXNh dmU7CiAgICAgICAgdTE2IFBTc2F2ZTsKICAgICAgICB1OCBQSFdMaW5rVXA7CiAgICAgICAgdTgg UFN0YXRlOwogICAgICAgIHU4IFBMaW5rQnJva2VuOwogICAgICAgIHU4IFBDaGVja1BhcjsKICAg ICAgICB1OCBIYWxmRHVwVGltZXJBY3RpdmU7CiAgICAgICAgdTggUExpbmtDYXA7CiAgICAgICAg dTggUExpbmtNb2RlQ29uZjsKICAgICAgICB1OCBQTGlua01vZGU7CiAgICAgICAgdTggUExpbmtN b2RlU3RhdHVzOwogICAgICAgIHU4IFBMaW5rU3BlZWRDYXA7CiAgICAgICAgdTggUExpbmtTcGVl ZDsKICAgICAgICB1OCBQTGlua1NwZWVkVXNlZDsKICAgICAgICB1OCBQRmxvd0N0cmxDYXA7CiAg ICAgICAgdTggUEZsb3dDdHJsTW9kZTsKICAgICAgICB1OCBQRmxvd0N0cmxTdGF0dXM7CiAgICAg ICAgdTggUE1TQ2FwOwogICAgICAgIHU4IFBNU01vZGU7CiAgICAgICAgdTggUE1TU3RhdHVzOwog ICAgICAgIHU4IFBBdXRvTmVnRmFpbDsKICAgICAgICB1OCBQTGlwYUF1dG9OZWc7CiAgICAgICAg dTggUENhYmxlTGVuOwogICAgICAgIHU4IFBNZGlQYWlyTGVuWzRdOwogICAgICAgIHU4IFBNZGlQ YWlyU3RzWzRdOwp9IFNLX0dFUE9SVDsKCgoKCgp0eXBlZGVmIHN0cnVjdCBzX0dlSW5pdCB7CiAg ICAgICAgdTggR0lQY2lId1JldjsKICAgICAgICB1OCBHSUNoaXBJZDsKICAgICAgICB1OCBHSUNo aXBSZXY7CiAgICAgICAgdTggR0lHZW5lc2lzOwogICAgICAgIHU4IEdJQ29wcGVyVHlwZTsKICAg ICAgICB1OCBHSVBjaVNsb3Q2NDsKICAgICAgICB1OCBHSVBjaUNsb2NrNjY7CiAgICAgICAgdTgg R0lWYXV4QXZhaWw7CiAgICAgICAgdTggR0lZdWtvbjMyQml0OwogICAgICAgIGludCBHSU1hY3NG b3VuZDsKICAgICAgICBpbnQgR0lNYWNUeXBlOwogICAgICAgIGludCBHSUhzdENsa0ZhY3Q7CiAg ICAgICAgaW50IEdJUG9ydFVzYWdlOwogICAgICAgIGludCBHSUxldmVsOwogICAgICAgIGludCBH SVJhbVNpemU7CiAgICAgICAgaW50IEdJV29sT2ZmczsKICAgICAgICB1MzIgR0lSYW1PZmZzOwog ICAgICAgIHUzMiBHSVBvbGxUaW1lclZhbDsKICAgICAgICBTS19HRVBPUlQgR1BbMl07CiAgICAg ICAgU0tfR0VNQUNGVU5DIEdJRnVuYzsKfSBTS19HRUlOSVQ7CiMgNzU0ICJoL3NrZ2Vpbml0Lmgi CmV4dGVybiB2b2lkIFNrR2VQb2xsUnhEKAogICAgICAgIFNLX0FDICpwQUMsCiAgICAgICAgY2hh ciogSW9DLAogICAgICAgIGludCBQb3J0LAogICAgICAgIHU4IFBvbGxSeEQpOwoKZXh0ZXJuIHZv aWQgU2tHZVBvbGxUeEQoCiAgICAgICAgU0tfQUMgKnBBQywKICAgICAgICBjaGFyKiBJb0MsCiAg ICAgICAgaW50IFBvcnQsCiAgICAgICAgdTggUG9sbFR4RCk7CgpleHRlcm4gdm9pZCBTa0dlWWVs bG93TEVEKAogICAgICAgIFNLX0FDICpwQUMsCiAgICAgICAgY2hhciogSW9DLAogICAgICAgIGlu dCBTdGF0ZSk7CgpleHRlcm4gaW50IFNrR2VDZmdTeW5jKAogICAgICAgIFNLX0FDICpwQUMsCiAg ICAgICAgY2hhciogSW9DLAogICAgICAgIGludCBQb3J0LAogICAgICAgIHUzMiBJbnRUaW1lLAog ICAgICAgIHUzMiBMaW1Db3VudCwKICAgICAgICBpbnQgU3luY01vZGUpOwoKZXh0ZXJuIHZvaWQg U2tHZUxvYWRMbmtTeW5jQ250KAogICAgICAgIFNLX0FDICpwQUMsCiAgICAgICAgY2hhciogSW9D LAogICAgICAgIGludCBQb3J0LAogICAgICAgIHUzMiBDbnRWYWwpOwoKZXh0ZXJuIHZvaWQgU2tH ZVN0b3BQb3J0KAogICAgICAgIFNLX0FDICpwQUMsCiAgICAgICAgY2hhciogSW9DLAogICAgICAg IGludCBQb3J0LAogICAgICAgIGludCBEaXIsCiAgICAgICAgaW50IFJzdE1vZGUpOwoKZXh0ZXJu IGludCBTa0dlSW5pdCgKICAgICAgICBTS19BQyAqcEFDLAogICAgICAgIGNoYXIqIElvQywKICAg ICAgICBpbnQgTGV2ZWwpOwoKZXh0ZXJuIHZvaWQgU2tHZURlSW5pdCgKICAgICAgICBTS19BQyAq cEFDLAogICAgICAgIGNoYXIqIElvQyk7CgpleHRlcm4gaW50IFNrR2VJbml0UG9ydCgKICAgICAg ICBTS19BQyAqcEFDLAogICAgICAgIGNoYXIqIElvQywKICAgICAgICBpbnQgUG9ydCk7CgpleHRl cm4gdm9pZCBTa0dlWG1pdExFRCgKICAgICAgICBTS19BQyAqcEFDLAogICAgICAgIGNoYXIqIElv QywKICAgICAgICBpbnQgTGVkLAogICAgICAgIGludCBNb2RlKTsKCmV4dGVybiB2b2lkIFNrR2VJ bml0UmFtSWZhY2UoCiAgICAgICAgU0tfQUMgKnBBQywKICAgICAgICBjaGFyKiBJb0MpOwoKZXh0 ZXJuIGludCBTa0dlSW5pdEFzc2lnblJhbVRvUXVldWVzKAogICAgICAgIFNLX0FDICpwQUMsCiAg ICAgICAgaW50IEFjdGl2ZVBvcnQsCiAgICAgICAgdTggRHVhbE5ldCk7CgoKCgpleHRlcm4gdm9p ZCBTa01hY1J4VHhEaXNhYmxlKAogICAgICAgIFNLX0FDICpwQUMsCiAgICAgICAgY2hhciogSW9D LAogICAgICAgIGludCBQb3J0KTsKCmV4dGVybiB2b2lkIFNrTWFjU29mdFJzdCgKICAgICAgICBT S19BQyAqcEFDLAogICAgICAgIGNoYXIqIElvQywKICAgICAgICBpbnQgUG9ydCk7CgpleHRlcm4g dm9pZCBTa01hY0hhcmRSc3QoCiAgICAgICAgU0tfQUMgKnBBQywKICAgICAgICBjaGFyKiBJb0Ms CiAgICAgICAgaW50IFBvcnQpOwoKZXh0ZXJuIHZvaWQgU2tYbUluaXRNYWMoCiAgICAgICAgU0tf QUMgKnBBQywKICAgICAgICBjaGFyKiBJb0MsCiAgICAgICAgaW50IFBvcnQpOwoKZXh0ZXJuIHZv aWQgU2tHbUluaXRNYWMoCiAgICAgICAgU0tfQUMgKnBBQywKICAgICAgICBjaGFyKiBJb0MsCiAg ICAgICAgaW50IFBvcnQpOwoKZXh0ZXJuIHZvaWQgU2tNYWNJbml0UGh5KAogICAgICAgIFNLX0FD ICpwQUMsCiAgICAgICAgY2hhciogSW9DLAogICAgICAgIGludCBQb3J0LAogICAgICAgIHU4IERv TG9vcCk7CgpleHRlcm4gdm9pZCBTa01hY0lycURpc2FibGUoCiAgICAgICAgU0tfQUMgKnBBQywK ICAgICAgICBjaGFyKiBJb0MsCiAgICAgICAgaW50IFBvcnQpOwoKZXh0ZXJuIHZvaWQgU2tNYWNG bHVzaFR4RmlmbygKICAgICAgICBTS19BQyAqcEFDLAogICAgICAgIGNoYXIqIElvQywKICAgICAg ICBpbnQgUG9ydCk7CgpleHRlcm4gdm9pZCBTa01hY0ZsdXNoUnhGaWZvKAogICAgICAgIFNLX0FD ICpwQUMsCiAgICAgICAgY2hhciogSW9DLAogICAgICAgIGludCBQb3J0KTsKCmV4dGVybiB2b2lk IFNrTWFjSXJxKAogICAgICAgIFNLX0FDICpwQUMsCiAgICAgICAgY2hhciogSW9DLAogICAgICAg IGludCBQb3J0KTsKCmV4dGVybiBpbnQgU2tNYWNBdXRvTmVnRG9uZSgKICAgICAgICBTS19BQyAq cEFDLAogICAgICAgIGNoYXIqIElvQywKICAgICAgICBpbnQgUG9ydCk7CgpleHRlcm4gdm9pZCBT a01hY0F1dG9OZWdMaXBhUGh5KAogICAgICAgIFNLX0FDICpwQUMsCiAgICAgICAgY2hhciogSW9D LAogICAgICAgIGludCBQb3J0LAogICAgICAgIHUxNiBJU3RhdHVzKTsKCmV4dGVybiB2b2lkIFNr TWFjU2V0UnhUeEVuKAogICAgICAgIFNLX0FDICpwQUMsCiAgICAgICAgY2hhciogSW9DLAogICAg ICAgIGludCBQb3J0LAogICAgICAgIGludCBQYXJhKTsKCmV4dGVybiBpbnQgU2tNYWNSeFR4RW5h YmxlKAogICAgICAgIFNLX0FDICpwQUMsCiAgICAgICAgY2hhciogSW9DLAogICAgICAgIGludCBQ b3J0KTsKCmV4dGVybiB2b2lkIFNrTWFjUHJvbWlzY01vZGUoCiAgICAgICAgU0tfQUMgKnBBQywK ICAgICAgICBjaGFyKiBJb0MsCiAgICAgICAgaW50IFBvcnQsCiAgICAgICAgdTggRW5hYmxlKTsK CmV4dGVybiB2b2lkIFNrTWFjSGFzaGluZygKICAgICAgICBTS19BQyAqcEFDLAogICAgICAgIGNo YXIqIElvQywKICAgICAgICBpbnQgUG9ydCwKICAgICAgICB1OCBFbmFibGUpOwoKZXh0ZXJuIHZv aWQgU2tYbVBoeVJlYWQoCiAgICAgICAgU0tfQUMgKnBBQywKICAgICAgICBjaGFyKiBJb0MsCiAg ICAgICAgaW50IFBvcnQsCiAgICAgICAgaW50IEFkZHIsCiAgICAgICAgdTE2ICpwVmFsKTsKCmV4 dGVybiB2b2lkIFNrWG1QaHlXcml0ZSgKICAgICAgICBTS19BQyAqcEFDLAogICAgICAgIGNoYXIq IElvQywKICAgICAgICBpbnQgUG9ydCwKICAgICAgICBpbnQgQWRkciwKICAgICAgICB1MTYgVmFs KTsKCmV4dGVybiB2b2lkIFNrR21QaHlSZWFkKAogICAgICAgIFNLX0FDICpwQUMsCiAgICAgICAg Y2hhciogSW9DLAogICAgICAgIGludCBQb3J0LAogICAgICAgIGludCBBZGRyLAogICAgICAgIHUx NiAqcFZhbCk7CgpleHRlcm4gdm9pZCBTa0dtUGh5V3JpdGUoCiAgICAgICAgU0tfQUMgKnBBQywK ICAgICAgICBjaGFyKiBJb0MsCiAgICAgICAgaW50IFBvcnQsCiAgICAgICAgaW50IEFkZHIsCiAg ICAgICAgdTE2IFZhbCk7CgpleHRlcm4gdm9pZCBTa0dlUGh5UmVhZCgKICAgICAgICBTS19BQyAq cEFDLAogICAgICAgIGNoYXIqIElvQywKICAgICAgICBpbnQgUG9ydCwKICAgICAgICBpbnQgQWRk ciwKICAgICAgICB1MTYgKnBWYWwpOwoKZXh0ZXJuIHZvaWQgU2tHZVBoeVdyaXRlKAogICAgICAg IFNLX0FDICpwQUMsCiAgICAgICAgY2hhciogSW9DLAogICAgICAgIGludCBQb3J0LAogICAgICAg IGludCBBZGRyLAogICAgICAgIHUxNiBWYWwpOwoKZXh0ZXJuIHZvaWQgU2tYbUNsckV4YWN0QWRk cigKICAgICAgICBTS19BQyAqcEFDLAogICAgICAgIGNoYXIqIElvQywKICAgICAgICBpbnQgUG9y dCwKICAgICAgICBpbnQgU3RhcnROdW0sCiAgICAgICAgaW50IFN0b3BOdW0pOwoKZXh0ZXJuIHZv aWQgU2tYbUluaXREdXBNZCgKICAgICAgICBTS19BQyAqcEFDLAogICAgICAgIGNoYXIqIElvQywK ICAgICAgICBpbnQgUG9ydCk7CgpleHRlcm4gdm9pZCBTa1htSW5pdFBhdXNlTWQoCiAgICAgICAg U0tfQUMgKnBBQywKICAgICAgICBjaGFyKiBJb0MsCiAgICAgICAgaW50IFBvcnQpOwoKZXh0ZXJu IHZvaWQgU2tYbUF1dG9OZWdMaXBhWG1hYygKICAgICAgICBTS19BQyAqcEFDLAogICAgICAgIGNo YXIqIElvQywKICAgICAgICBpbnQgUG9ydCwKICAgICAgICB1MTYgSVN0YXR1cyk7CgpleHRlcm4g aW50IFNrWG1VcGRhdGVTdGF0cygKICAgICAgICBTS19BQyAqcEFDLAogICAgICAgIGNoYXIqIElv QywKICAgICAgICB1bnNpZ25lZCBpbnQgUG9ydCk7CgpleHRlcm4gaW50IFNrR21VcGRhdGVTdGF0 cygKICAgICAgICBTS19BQyAqcEFDLAogICAgICAgIGNoYXIqIElvQywKICAgICAgICB1bnNpZ25l ZCBpbnQgUG9ydCk7CgpleHRlcm4gaW50IFNrWG1NYWNTdGF0aXN0aWMoCiAgICAgICAgU0tfQUMg KnBBQywKICAgICAgICBjaGFyKiBJb0MsCiAgICAgICAgdW5zaWduZWQgaW50IFBvcnQsCiAgICAg ICAgdTE2IFN0YXRBZGRyLAogICAgICAgIHUzMiAqcFZhbCk7CgpleHRlcm4gaW50IFNrR21NYWNT dGF0aXN0aWMoCiAgICAgICAgU0tfQUMgKnBBQywKICAgICAgICBjaGFyKiBJb0MsCiAgICAgICAg dW5zaWduZWQgaW50IFBvcnQsCiAgICAgICAgdTE2IFN0YXRBZGRyLAogICAgICAgIHUzMiAqcFZh bCk7CgpleHRlcm4gaW50IFNrWG1SZXNldENvdW50ZXIoCiAgICAgICAgU0tfQUMgKnBBQywKICAg ICAgICBjaGFyKiBJb0MsCiAgICAgICAgdW5zaWduZWQgaW50IFBvcnQpOwoKZXh0ZXJuIGludCBT a0dtUmVzZXRDb3VudGVyKAogICAgICAgIFNLX0FDICpwQUMsCiAgICAgICAgY2hhciogSW9DLAog ICAgICAgIHVuc2lnbmVkIGludCBQb3J0KTsKCmV4dGVybiBpbnQgU2tYbU92ZXJmbG93U3RhdHVz KAogICAgICAgIFNLX0FDICpwQUMsCiAgICAgICAgY2hhciogSW9DLAogICAgICAgIHVuc2lnbmVk IGludCBQb3J0LAogICAgICAgIHUxNiBJU3RhdHVzLAogICAgICAgIHU2NCAqcFN0YXR1cyk7Cgpl eHRlcm4gaW50IFNrR21PdmVyZmxvd1N0YXR1cygKICAgICAgICBTS19BQyAqcEFDLAogICAgICAg IGNoYXIqIElvQywKICAgICAgICB1bnNpZ25lZCBpbnQgUG9ydCwKICAgICAgICB1MTYgTWFjU3Rh dHVzLAogICAgICAgIHU2NCAqcFN0YXR1cyk7CgpleHRlcm4gaW50IFNrR21DYWJsZURpYWdTdGF0 dXMoCiAgICAgICAgU0tfQUMgKnBBQywKICAgICAgICBjaGFyKiBJb0MsCiAgICAgICAgaW50IFBv cnQsCiAgICAgICAgdTggU3RhcnRUZXN0KTsKIyA0NTAgInNrZ2Vwbm1pLmMiIDIKIyAxICJoL3Nr ZHJ2Mm5kLmgiIDEKIyAxMDQgImgvc2tkcnYybmQuaCIKIyAxICJoL3NrZ2Vod3QuaCIgMQojIDYz ICJoL3NrZ2Vod3QuaCIKdHlwZWRlZiBzdHJ1Y3Qgc19Id3QgewogICAgICAgIHUzMiBUU3RhcnQg OwogICAgICAgIHUzMiBUU3RvcCA7CiAgICAgICAgaW50IFRBY3RpdmUgOwp9IFNLX0hXVDsKCmV4 dGVybiB2b2lkIFNrSHd0SW5pdChTS19BQyAqcEFDLCBjaGFyKiBJb2MpOwpleHRlcm4gdm9pZCBT a0h3dFN0YXJ0KFNLX0FDICpwQUMsIGNoYXIqIElvYywgdTMyIFRpbWUpOwpleHRlcm4gdm9pZCBT a0h3dFN0b3AoU0tfQUMgKnBBQywgY2hhciogSW9jKTsKZXh0ZXJuIHUzMiBTa0h3dFJlYWQoU0tf QUMgKnBBQyxjaGFyKiBJb2MpOwpleHRlcm4gdm9pZCBTa0h3dElzcihTS19BQyAqcEFDLCBjaGFy KiBJb2MpOwojIDEwNSAiaC9za2RydjJuZC5oIiAyCiMgMTE1ICJoL3NrZHJ2Mm5kLmgiCiMgMSAi aC9za2dlZHJ2LmgiIDEKIyAxMTYgImgvc2tkcnYybmQuaCIgMgoKCmV4dGVybiBTS19NQlVGICpT a0RydkFsbG9jUmxtdE1idWYoU0tfQUMqLCBjaGFyKiwgdW5zaWduZWQpOwpleHRlcm4gdm9pZCBT a0RydkZyZWVSbG10TWJ1ZihTS19BQyosIGNoYXIqLCBTS19NQlVGKik7CmV4dGVybiB1NjQgU2tP c0dldFRpbWUoU0tfQUMqKTsKZXh0ZXJuIGludCBTa1BjaVJlYWRDZmdEV29yZChTS19BQyosIGlu dCwgdTMyKik7CmV4dGVybiBpbnQgU2tQY2lSZWFkQ2ZnV29yZChTS19BQyosIGludCwgdTE2Kik7 CmV4dGVybiBpbnQgU2tQY2lSZWFkQ2ZnQnl0ZShTS19BQyosIGludCwgdTgqKTsKZXh0ZXJuIGlu dCBTa1BjaVdyaXRlQ2ZnRFdvcmQoU0tfQUMqLCBpbnQsIHUzMik7CmV4dGVybiBpbnQgU2tQY2lX cml0ZUNmZ1dvcmQoU0tfQUMqLCBpbnQsIHUxNik7CmV4dGVybiBpbnQgU2tQY2lXcml0ZUNmZ0J5 dGUoU0tfQUMqLCBpbnQsIHU4KTsKZXh0ZXJuIGludCBTa0RydkV2ZW50KFNLX0FDKiwgY2hhciog SW9DLCB1MzIsIFNLX0VWUEFSQSk7CgpzdHJ1Y3Qgc19EcnZSbG10TWJ1ZiB7CiAgICAgICAgU0tf TUJVRiAqcE5leHQ7CiAgICAgICAgdTggKnBEYXRhOwogICAgICAgIHVuc2lnbmVkIFNpemU7CiAg ICAgICAgdW5zaWduZWQgTGVuZ3RoOwogICAgICAgIHUzMiBQb3J0SWR4OwoKCgogICAgICAgIHN0 cnVjdCBza19idWZmICpwT3M7Cn07CiMgMTUxICJoL3NrZHJ2Mm5kLmgiCnR5cGVkZWYgc3RydWN0 IHNfSU9DVEwgU0tfR0VfSU9DVEw7CgpzdHJ1Y3Qgc19JT0NUTCB7CiAgICAgICAgY2hhciogcERh dGE7CiAgICAgICAgdW5zaWduZWQgaW50IExlbjsKfTsKIyAyMDAgImgvc2tkcnYybmQuaCIKdHlw ZWRlZiBzdHJ1Y3Qgc19SeEQgUlhEOwoKc3RydWN0IHNfUnhEIHsKICAgICAgICB2b2xhdGlsZSB1 MzIgUkJDb250cm9sOwogICAgICAgIHUzMiBWTmV4dFJ4ZDsKICAgICAgICB1MzIgVkRhdGFMb3c7 CiAgICAgICAgdTMyIFZEYXRhSGlnaDsKICAgICAgICB1MzIgRnJhbWVTdGF0OwogICAgICAgIHUz MiBUaW1lU3RhbXA7CiAgICAgICAgdTMyIFRjcFN1bXM7CiAgICAgICAgdTMyIFRjcFN1bVN0YXJ0 czsKICAgICAgICBSWEQgKnBOZXh0UnhkOwogICAgICAgIHN0cnVjdCBza19idWZmICpwTUJ1ZjsK fTsKCnR5cGVkZWYgc3RydWN0IHNfVHhEIFRYRDsKCnN0cnVjdCBzX1R4RCB7CiAgICAgICAgdm9s YXRpbGUgdTMyIFRCQ29udHJvbDsKICAgICAgICB1MzIgVk5leHRUeGQ7CiAgICAgICAgdTMyIFZE YXRhTG93OwogICAgICAgIHUzMiBWRGF0YUhpZ2g7CiAgICAgICAgdTMyIEZyYW1lU3RhdDsKICAg ICAgICB1MzIgVGNwU3VtT2ZzOwogICAgICAgIHUxNiBUY3BTdW1TdDsKICAgICAgICB1MTYgVGNw U3VtV3I7CiAgICAgICAgdTMyIFRjcFJlc2VydmVkOwogICAgICAgIFRYRCAqcE5leHRUeGQ7CiAg ICAgICAgc3RydWN0IHNrX2J1ZmYgKnBNQnVmOwp9OwojIDM4MiAiaC9za2RydjJuZC5oIgp0eXBl ZGVmIHN0cnVjdCBzX0Rldk5ldCBERVZfTkVUOwoKc3RydWN0IHNfRGV2TmV0IHsKICAgICAgICBp bnQgUG9ydE5yOwogICAgICAgIGludCBOZXROcjsKICAgICAgICBpbnQgTXR1OwogICAgICAgIGlu dCBVcDsKICAgICAgICBTS19BQyAqcEFDOwp9OwoKdHlwZWRlZiBzdHJ1Y3Qgc19UeFBvcnQgVFhf UE9SVDsKCnN0cnVjdCBzX1R4UG9ydCB7CgogICAgICAgIGNhZGRyX3QgcFR4RGVzY3JSaW5nOwog ICAgICAgIHU2NCBWVHhEZXNjclJpbmc7CiAgICAgICAgVFhEICpwVHhkUmluZ0hlYWQ7CiAgICAg ICAgVFhEICpwVHhkUmluZ1RhaWw7CiAgICAgICAgVFhEICpwVHhkUmluZ1ByZXY7CiAgICAgICAg aW50IFR4ZFJpbmdGcmVlOwogICAgICAgIHNwaW5sb2NrX3QgVHhEZXNSaW5nTG9jazsKICAgICAg ICBjYWRkcl90IEh3QWRkcjsKICAgICAgICBpbnQgUG9ydEluZGV4Owp9OwoKdHlwZWRlZiBzdHJ1 Y3Qgc19SeFBvcnQgUlhfUE9SVDsKCnN0cnVjdCBzX1J4UG9ydCB7CgogICAgICAgIGNhZGRyX3Qg cFJ4RGVzY3JSaW5nOwogICAgICAgIHU2NCBWUnhEZXNjclJpbmc7CiAgICAgICAgUlhEICpwUnhk UmluZ0hlYWQ7CiAgICAgICAgUlhEICpwUnhkUmluZ1RhaWw7CiAgICAgICAgUlhEICpwUnhkUmlu Z1ByZXY7CiAgICAgICAgaW50IFJ4ZFJpbmdGcmVlOwogICAgICAgIHNwaW5sb2NrX3QgUnhEZXNS aW5nTG9jazsKICAgICAgICBpbnQgUnhGaWxsTGltaXQ7CiAgICAgICAgY2FkZHJfdCBId0FkZHI7 CiAgICAgICAgaW50IFBvcnRJbmRleDsKfTsKCnR5cGVkZWYgc3RydWN0IHNfUGVyU3RybSBQRVJf U1RSTTsKIyA0MzIgImgvc2tkcnYybmQuaCIKc3RydWN0IHNfQUMgewogICAgICAgIFNLX0dFSU5J VCBHSW5pOwogICAgICAgIFNLX1BOTUkgUG5taTsKICAgICAgICBTS19WUEQgdnBkOwogICAgICAg IFNLX1FVRVVFIEV2ZW50OwogICAgICAgIFNLX0hXVCBId3Q7CiAgICAgICAgU0tfVElNQ1RSTCBU aW07CiAgICAgICAgU0tfSTJDIEkyYzsKICAgICAgICBTS19BRERSIEFkZHI7CiAgICAgICAgU0tf Q1NVTSBDc3VtOwogICAgICAgIFNLX1JMTVQgUmxtdDsKICAgICAgICBzcGlubG9ja190IFNsb3dQ YXRoTG9jazsKICAgICAgICBTS19QTk1JX1NUUlVDVF9EQVRBIFBubWlTdHJ1Y3Q7CiAgICAgICAg aW50IFJsbXRNb2RlOwogICAgICAgIGludCBSbG10TmV0czsKCiAgICAgICAgY2hhciogSW9CYXNl OwogICAgICAgIGludCBCb2FyZExldmVsOwogICAgICAgIGNoYXIgRGV2aWNlU3RyWzgwXTsKICAg ICAgICB1MzIgQWxsb2NGbGFnOwogICAgICAgIHN0cnVjdCBwY2lfZGV2ICpQY2lEZXY7CiAgICAg ICAgdTMyIFBjaURldklkOwogICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXZbMl07CiAgICAg ICAgY2hhciBOYW1lWzMwXTsKICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqTmV4dDsKICAgICAg ICBpbnQgUnhCdWZTaXplOwogICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwog ICAgICAgIGludCBJbmRleDsKCgogICAgICAgIGludCBSeFF1ZXVlU2l6ZTsKICAgICAgICBpbnQg VHhTUXVldWVTaXplOwogICAgICAgIGludCBUeEFRdWV1ZVNpemU7CgogICAgICAgIGludCBQcm9t aXNjQ291bnQ7CiAgICAgICAgaW50IEFsbE11bHRpQ291bnQ7CiAgICAgICAgaW50IE11bHRpY0Nv dW50OwoKCgogICAgICAgIGludCBIV1JldmlzaW9uOwogICAgICAgIGludCBBY3RpdmVQb3J0Owog ICAgICAgIGludCBNYXhQb3J0czsKICAgICAgICBpbnQgVHhEZXNjclBlclJpbmc7CiAgICAgICAg aW50IFJ4RGVzY3JQZXJSaW5nOwoKICAgICAgICBjYWRkcl90IHBEZXNjck1lbTsKICAgICAgICBk bWFfYWRkcl90IHBEZXNjck1lbURNQTsKCgogICAgICAgIFRYX1BPUlQgVHhQb3J0WzJdWzJdOwog ICAgICAgIFJYX1BPUlQgUnhQb3J0WzJdOwoKICAgICAgICB1bnNpZ25lZCBpbnQgQ3NPZnMxOwog ICAgICAgIHVuc2lnbmVkIGludCBDc09mczI7CiAgICAgICAgdTMyIENzT2ZzOwoKICAgICAgICB1 OCBDaGVja1F1ZXVlOwoKCiAgICAgICAgaW50IFBvcnRVcDsKICAgICAgICBpbnQgUG9ydERvd247 Cgp9OwojIDQ1MSAic2tnZXBubWkuYyIgMgojIDEgImgvc2tnZXBubTIuaCIgMQojIDIxOCAiaC9z a2dlcG5tMi5oIgp0eXBlZGVmIHN0cnVjdCBzX09pZFRhYkVudHJ5IHsKICAgICAgICB1MzIgSWQ7 CiAgICAgICAgdTMyIEluc3RhbmNlTm87CiAgICAgICAgdW5zaWduZWQgaW50IFN0cnVjdFNpemU7 CiAgICAgICAgdW5zaWduZWQgaW50IE9mZnNldDsKICAgICAgICBpbnQgQWNjZXNzOwogICAgICAg IGludCAoKiBGdW5jKShTS19BQyAqcEFjLCBjaGFyKiBwSW8sIGludCBhY3Rpb24sCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBJZCwg Y2hhciogcEJ1ZiwgdW5zaWduZWQgaW50KiBwTGVuLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgSW5zdGFuY2UsIHVuc2lnbmVkIGlu dCBUYWJsZUluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB1MzIgTmV0TnVtYmVyKTsKICAgICAgICB1MTYgUGFyYW07Cn0gU0tfUE5N SV9UQUJfRU5UUlk7CiMgMjQ4ICJoL3NrZ2Vwbm0yLmgiCmVudW0gU0tfTUFDU1RBVFMgewogICAg ICAgIFNLX1BOTUlfSFRYID0gMCwKICAgICAgICBTS19QTk1JX0hUWF9PQ1RFVCwKICAgICAgICBT S19QTk1JX0hUWF9PQ1RFVEhJR0ggPSBTS19QTk1JX0hUWF9PQ1RFVCwKICAgICAgICBTS19QTk1J X0hUWF9PQ1RFVExPVywKICAgICAgICBTS19QTk1JX0hUWF9CUk9BRENBU1QsCiAgICAgICAgU0tf UE5NSV9IVFhfTVVMVElDQVNULAogICAgICAgIFNLX1BOTUlfSFRYX1VOSUNBU1QsCiAgICAgICAg U0tfUE5NSV9IVFhfQlVSU1QsCiAgICAgICAgU0tfUE5NSV9IVFhfUE1BQ0MsCiAgICAgICAgU0tf UE5NSV9IVFhfTUFDQywKICAgICAgICBTS19QTk1JX0hUWF9DT0wsCiAgICAgICAgU0tfUE5NSV9I VFhfU0lOR0xFX0NPTCwKICAgICAgICBTS19QTk1JX0hUWF9NVUxUSV9DT0wsCiAgICAgICAgU0tf UE5NSV9IVFhfRVhDRVNTX0NPTCwKICAgICAgICBTS19QTk1JX0hUWF9MQVRFX0NPTCwKICAgICAg ICBTS19QTk1JX0hUWF9ERUZGRVJBTCwKICAgICAgICBTS19QTk1JX0hUWF9FWENFU1NfREVGLAog ICAgICAgIFNLX1BOTUlfSFRYX1VOREVSUlVOLAogICAgICAgIFNLX1BOTUlfSFRYX0NBUlJJRVIs CiAgICAgICAgU0tfUE5NSV9IVFhfVVRJTFVOREVSLAogICAgICAgIFNLX1BOTUlfSFRYX1VUSUxP VkVSLAogICAgICAgIFNLX1BOTUlfSFRYXzY0LAogICAgICAgIFNLX1BOTUlfSFRYXzEyNywKICAg ICAgICBTS19QTk1JX0hUWF8yNTUsCiAgICAgICAgU0tfUE5NSV9IVFhfNTExLAogICAgICAgIFNL X1BOTUlfSFRYXzEwMjMsCiAgICAgICAgU0tfUE5NSV9IVFhfTUFYLAogICAgICAgIFNLX1BOTUlf SFRYX0xPTkdGUkFNRVMsCiAgICAgICAgU0tfUE5NSV9IVFhfU1lOQywKICAgICAgICBTS19QTk1J X0hUWF9TWU5DX09DVEVULAogICAgICAgIFNLX1BOTUlfSFRYX1JFU0VSVkVELAoKICAgICAgICBT S19QTk1JX0hSWCwKICAgICAgICBTS19QTk1JX0hSWF9PQ1RFVCwKICAgICAgICBTS19QTk1JX0hS WF9PQ1RFVEhJR0ggPSBTS19QTk1JX0hSWF9PQ1RFVCwKICAgICAgICBTS19QTk1JX0hSWF9PQ1RF VExPVywKICAgICAgICBTS19QTk1JX0hSWF9CQURPQ1RFVCwKICAgICAgICBTS19QTk1JX0hSWF9C QURPQ1RFVEhJR0ggPSBTS19QTk1JX0hSWF9CQURPQ1RFVCwKICAgICAgICBTS19QTk1JX0hSWF9C QURPQ1RFVExPVywKICAgICAgICBTS19QTk1JX0hSWF9CUk9BRENBU1QsCiAgICAgICAgU0tfUE5N SV9IUlhfTVVMVElDQVNULAogICAgICAgIFNLX1BOTUlfSFJYX1VOSUNBU1QsCiAgICAgICAgU0tf UE5NSV9IUlhfUE1BQ0MsCiAgICAgICAgU0tfUE5NSV9IUlhfTUFDQywKICAgICAgICBTS19QTk1J X0hSWF9QTUFDQ19FUlIsCiAgICAgICAgU0tfUE5NSV9IUlhfTUFDQ19VTktXTiwKICAgICAgICBT S19QTk1JX0hSWF9CVVJTVCwKICAgICAgICBTS19QTk1JX0hSWF9NSVNTRUQsCiAgICAgICAgU0tf UE5NSV9IUlhfRlJBTUlORywKICAgICAgICBTS19QTk1JX0hSWF9VTkRFUlNJWkUsCiAgICAgICAg U0tfUE5NSV9IUlhfT1ZFUkZMT1csCiAgICAgICAgU0tfUE5NSV9IUlhfSkFCQkVSLAogICAgICAg IFNLX1BOTUlfSFJYX0NBUlJJRVIsCiAgICAgICAgU0tfUE5NSV9IUlhfSVJMRU5HVEgsCiAgICAg ICAgU0tfUE5NSV9IUlhfU1lNQk9MLAogICAgICAgIFNLX1BOTUlfSFJYX1NIT1JUUywKICAgICAg ICBTS19QTk1JX0hSWF9SVU5ULAogICAgICAgIFNLX1BOTUlfSFJYX1RPT19MT05HLAogICAgICAg IFNLX1BOTUlfSFJYX0ZDUywKICAgICAgICBTS19QTk1JX0hSWF9DRVhULAogICAgICAgIFNLX1BO TUlfSFJYX1VUSUxVTkRFUiwKICAgICAgICBTS19QTk1JX0hSWF9VVElMT1ZFUiwKICAgICAgICBT S19QTk1JX0hSWF82NCwKICAgICAgICBTS19QTk1JX0hSWF8xMjcsCiAgICAgICAgU0tfUE5NSV9I UlhfMjU1LAogICAgICAgIFNLX1BOTUlfSFJYXzUxMSwKICAgICAgICBTS19QTk1JX0hSWF8xMDIz LAogICAgICAgIFNLX1BOTUlfSFJYX01BWCwKICAgICAgICBTS19QTk1JX0hSWF9MT05HRlJBTUVT LAoKICAgICAgICBTS19QTk1JX0hSWF9SRVNFUlZFRCwKCiAgICAgICAgU0tfUE5NSV9NQVhfSURY Cn07CgoKCgp0eXBlZGVmIHN0cnVjdCBzX1BubWlTdGF0QWRkciB7CiAgICAgICAgdTE2IFJlZzsK ICAgICAgICB1OCBHZXRPZmZzZXQ7Cn0gU0tfUE5NSV9TVEFUQUREUjsKIyA0NTIgInNrZ2Vwbm1p LmMiIDIKIyA0NjYgInNrZ2Vwbm1pLmMiCmludCBTa1BubWlJbml0KFNLX0FDICpwQUMsIGNoYXIq IElvQywgaW50IGxldmVsKTsKaW50IFNrUG5taUdldFZhcihTS19BQyAqcEFDLCBjaGFyKiBJb0Ms IHUzMiBJZCwgdm9pZCAqcEJ1ZiwKICAgICAgICB1bnNpZ25lZCBpbnQgKnBMZW4sIHUzMiBJbnN0 YW5jZSwgdTMyIE5ldEluZGV4KTsKaW50IFNrUG5taVByZVNldFZhcihTS19BQyAqcEFDLCBjaGFy KiBJb0MsIHUzMiBJZCwgdm9pZCAqcEJ1ZiwKICAgICAgICB1bnNpZ25lZCBpbnQgKnBMZW4sIHUz MiBJbnN0YW5jZSwgdTMyIE5ldEluZGV4KTsKaW50IFNrUG5taVNldFZhcihTS19BQyAqcEFDLCBj aGFyKiBJb0MsIHUzMiBJZCwgdm9pZCAqcEJ1ZiwKICAgICAgICB1bnNpZ25lZCBpbnQgKnBMZW4s IHUzMiBJbnN0YW5jZSwgdTMyIE5ldEluZGV4KTsKaW50IFNrUG5taUdldFN0cnVjdChTS19BQyAq cEFDLCBjaGFyKiBJb0MsIHZvaWQgKnBCdWYsCiAgICAgICAgdW5zaWduZWQgaW50ICpwTGVuLCB1 MzIgTmV0SW5kZXgpOwppbnQgU2tQbm1pUHJlU2V0U3RydWN0KFNLX0FDICpwQUMsIGNoYXIqIElv Qywgdm9pZCAqcEJ1ZiwKICAgICAgICB1bnNpZ25lZCBpbnQgKnBMZW4sIHUzMiBOZXRJbmRleCk7 CmludCBTa1BubWlTZXRTdHJ1Y3QoU0tfQUMgKnBBQywgY2hhciogSW9DLCB2b2lkICpwQnVmLAog ICAgICAgIHVuc2lnbmVkIGludCAqcExlbiwgdTMyIE5ldEluZGV4KTsKaW50IFNrUG5taUV2ZW50 KFNLX0FDICpwQUMsIGNoYXIqIElvQywgdTMyIEV2ZW50LCBTS19FVlBBUkEgUGFyYW0pOwoKCgoK CgpzdGF0aWMgdTggQ2FsY3VsYXRlTGlua01vZGVTdGF0dXMoU0tfQUMgKnBBQywgY2hhciogSW9D LCB1bnNpZ25lZCBpbnQKICAgICAgICBQaHlzUG9ydEluZGV4KTsKc3RhdGljIHU4IENhbGN1bGF0 ZUxpbmtTdGF0dXMoU0tfQUMgKnBBQywgY2hhciogSW9DLCB1bnNpZ25lZCBpbnQKICAgICAgICBQ aHlzUG9ydEluZGV4KTsKc3RhdGljIHZvaWQgQ29weU1hYyhjaGFyICpwRHN0LCBTS19NQUNfQURE UiAqcE1hYyk7CnN0YXRpYyB2b2lkIENvcHlUcmFwUXVldWUoU0tfQUMgKnBBQywgY2hhciAqcERz dEJ1Zik7CnN0YXRpYyB1NjQgR2V0UGh5c1N0YXRWYWwoU0tfQUMgKnBBQywgY2hhciogSW9DLAog ICAgICAgIHVuc2lnbmVkIGludCBQaHlzUG9ydEluZGV4LCB1bnNpZ25lZCBpbnQgU3RhdEluZGV4 KTsKc3RhdGljIHU2NCBHZXRTdGF0VmFsKFNLX0FDICpwQUMsIGNoYXIqIElvQywgdW5zaWduZWQg aW50IExvZ1BvcnRJbmRleCwKICAgICAgICB1bnNpZ25lZCBpbnQgU3RhdEluZGV4LCB1MzIgTmV0 SW5kZXgpOwpzdGF0aWMgY2hhciogR2V0VHJhcEVudHJ5KFNLX0FDICpwQUMsIHUzMiBUcmFwSWQs IHVuc2lnbmVkIGludCBTaXplKTsKc3RhdGljIHZvaWQgR2V0VHJhcFF1ZXVlTGVuKFNLX0FDICpw QUMsIHVuc2lnbmVkIGludCAqcExlbiwKICAgICAgICB1bnNpZ25lZCBpbnQgKnBFbnRyaWVzKTsK c3RhdGljIGludCBHZXRWcGRLZXlBcnIoU0tfQUMgKnBBQywgY2hhciogSW9DLCBjaGFyICpwS2V5 QXJyLAogICAgICAgIHVuc2lnbmVkIGludCBLZXlBcnJMZW4sIHVuc2lnbmVkIGludCAqcEtleU5v KTsKc3RhdGljIGludCBMb29rdXBJZCh1MzIgSWQpOwpzdGF0aWMgaW50IE1hY1VwZGF0ZShTS19B QyAqcEFDLCBjaGFyKiBJb0MsIHVuc2lnbmVkIGludCBGaXJzdE1hYywKICAgICAgICB1bnNpZ25l ZCBpbnQgTGFzdE1hYyk7CnN0YXRpYyBpbnQgUG5taVN0cnVjdChTS19BQyAqcEFDLCBjaGFyKiBJ b0MsIGludCBBY3Rpb24sIGNoYXIgKnBCdWYsCiAgICAgICAgdW5zaWduZWQgaW50ICpwTGVuLCB1 MzIgTmV0SW5kZXgpOwpzdGF0aWMgaW50IFBubWlWYXIoU0tfQUMgKnBBQywgY2hhciogSW9DLCBp bnQgQWN0aW9uLCB1MzIgSWQsCiAgICAgICAgY2hhciAqcEJ1ZiwgdW5zaWduZWQgaW50ICpwTGVu LCB1MzIgSW5zdGFuY2UsIHUzMiBOZXRJbmRleCk7CnN0YXRpYyB2b2lkIFF1ZXVlUmxtdE5ld01h Y1RyYXAoU0tfQUMgKnBBQywgdW5zaWduZWQgaW50IEFjdGl2ZU1hYyk7CnN0YXRpYyB2b2lkIFF1 ZXVlUmxtdFBvcnRUcmFwKFNLX0FDICpwQUMsIHUzMiBUcmFwSWQsCiAgICAgICAgdW5zaWduZWQg aW50IFBvcnRJbmRleCk7CnN0YXRpYyB2b2lkIFF1ZXVlU2Vuc29yVHJhcChTS19BQyAqcEFDLCB1 MzIgVHJhcElkLAogICAgICAgIHVuc2lnbmVkIGludCBTZW5zb3JJbmRleCk7CnN0YXRpYyB2b2lk IFF1ZXVlU2ltcGxlVHJhcChTS19BQyAqcEFDLCB1MzIgVHJhcElkKTsKc3RhdGljIHZvaWQgUmVz ZXRDb3VudGVyKFNLX0FDICpwQUMsIGNoYXIqIElvQywgdTMyIE5ldEluZGV4KTsKc3RhdGljIGlu dCBSbG10VXBkYXRlKFNLX0FDICpwQUMsIGNoYXIqIElvQywgdTMyIE5ldEluZGV4KTsKc3RhdGlj IGludCBTaXJxVXBkYXRlKFNLX0FDICpwQUMsIGNoYXIqIElvQyk7CnN0YXRpYyB2b2lkIFZpcnR1 YWxDb25mKFNLX0FDICpwQUMsIGNoYXIqIElvQywgdTMyIElkLCBjaGFyICpwQnVmKTsKc3RhdGlj IGludCBWY3QoU0tfQUMgKnBBQywgY2hhciogSW9DLCBpbnQgQWN0aW9uLCB1MzIgSWQsIGNoYXIg KnBCdWYsCiAgICAgICAgdW5zaWduZWQgaW50ICpwTGVuLCB1MzIgSW5zdGFuY2UsIHVuc2lnbmVk IGludCBUYWJsZUluZGV4LCB1MzIgTmV0SW5kZXgpOwpzdGF0aWMgdm9pZCBDaGVja1ZjdFN0YXR1 cyhTS19BQyAqLCBjaGFyKiwgY2hhciAqLCB1MzIsIHUzMik7CgoKCgoKIyAxICJza2dlbWliLmMi IDEKIyA1NiAic2tnZW1pYi5jIgpzdGF0aWMgaW50IEFkZHIoU0tfQUMgKnBBQywgY2hhciogSW9D LCBpbnQgYWN0aW9uLAogICAgICAgIHUzMiBJZCwgY2hhciAqcEJ1ZiwgdW5zaWduZWQgaW50ICpw TGVuLCB1MzIgSW5zdGFuY2UsCiAgICAgICAgdW5zaWduZWQgaW50IFRhYmxlSW5kZXgsIHUzMiBO ZXRJbmRleCk7CnN0YXRpYyBpbnQgQ3N1bVN0YXQoU0tfQUMgKnBBQywgY2hhciogSW9DLCBpbnQg YWN0aW9uLCB1MzIgSWQsCiAgICAgICAgY2hhciAqcEJ1ZiwgdW5zaWduZWQgaW50ICpwTGVuLCB1 MzIgSW5zdGFuY2UsCiAgICAgICAgdW5zaWduZWQgaW50IFRhYmxlSW5kZXgsIHUzMiBOZXRJbmRl eCk7CnN0YXRpYyBpbnQgR2VuZXJhbChTS19BQyAqcEFDLCBjaGFyKiBJb0MsIGludCBhY3Rpb24s IHUzMiBJZCwKICAgICAgICBjaGFyICpwQnVmLCB1bnNpZ25lZCBpbnQgKnBMZW4sIHUzMiBJbnN0 YW5jZSwKICAgICAgICB1bnNpZ25lZCBpbnQgVGFibGVJbmRleCwgdTMyIE5ldEluZGV4KTsKc3Rh dGljIGludCBNYWM4MDIzU3RhdChTS19BQyAqcEFDLCBjaGFyKiBJb0MsIGludCBhY3Rpb24sIHUz MiBJZCwKICAgICAgICBjaGFyICpwQnVmLCB1bnNpZ25lZCBpbnQgKnBMZW4sIHUzMiBJbnN0YW5j ZSwKICAgICAgICB1bnNpZ25lZCBpbnQgVGFibGVJbmRleCwgdTMyIE5ldEluZGV4KTsKc3RhdGlj IGludCBNYWNQcml2YXRlQ29uZihTS19BQyAqcEFDLCBjaGFyKiBJb0MsIGludCBhY3Rpb24sIHUz MiBJZCwKICAgICAgICBjaGFyICpwQnVmLCB1bnNpZ25lZCBpbnQgKnBMZW4sIHUzMiBJbnN0YW5j ZSwKICAgICAgICB1bnNpZ25lZCBpbnQgVGFibGVJbmRleCwgdTMyIE5ldEluZGV4KTsKc3RhdGlj IGludCBNYWNQcml2YXRlU3RhdChTS19BQyAqcEFDLCBjaGFyKiBJb0MsIGludCBhY3Rpb24sIHUz MiBJZCwKICAgICAgICBjaGFyICpwQnVmLCB1bnNpZ25lZCBpbnQgKnBMZW4sIHUzMiBJbnN0YW5j ZSwKICAgICAgICB1bnNpZ25lZCBpbnQgVGFibGVJbmRleCwgdTMyIE5ldEluZGV4KTsKc3RhdGlj IGludCBNb25pdG9yKFNLX0FDICpwQUMsIGNoYXIqIElvQywgaW50IGFjdGlvbiwKICAgICAgICB1 MzIgSWQsIGNoYXIgKnBCdWYsIHVuc2lnbmVkIGludCAqcExlbiwgdTMyIEluc3RhbmNlLAogICAg ICAgIHVuc2lnbmVkIGludCBUYWJsZUluZGV4LCB1MzIgTmV0SW5kZXgpOwpzdGF0aWMgaW50IE9p ZFN0cnVjdChTS19BQyAqcEFDLCBjaGFyKiBJb0MsIGludCBhY3Rpb24sIHUzMiBJZCwKICAgICAg ICBjaGFyICpwQnVmLCB1bnNpZ25lZCBpbnQgKnBMZW4sIHUzMiBJbnN0YW5jZSwKICAgICAgICB1 bnNpZ25lZCBpbnQgVGFibGVJbmRleCwgdTMyIE5ldEluZGV4KTsKc3RhdGljIGludCBQZXJmb3Jt KFNLX0FDICpwQUMsIGNoYXIqIElvQywgaW50IGFjdGlvbiwgdTMyIElkLAogICAgICAgIGNoYXIg KnBCdWYsIHVuc2lnbmVkIGludCogcExlbiwgdTMyIEluc3RhbmNlLAogICAgICAgIHVuc2lnbmVk IGludCBUYWJsZUluZGV4LCB1MzIgTmV0SW5kZXgpOwpzdGF0aWMgaW50IFJsbXQoU0tfQUMgKnBB QywgY2hhciogSW9DLCBpbnQgYWN0aW9uLCB1MzIgSWQsCiAgICAgICAgY2hhciAqcEJ1ZiwgdW5z aWduZWQgaW50ICpwTGVuLCB1MzIgSW5zdGFuY2UsCiAgICAgICAgdW5zaWduZWQgaW50IFRhYmxl SW5kZXgsIHUzMiBOZXRJbmRleCk7CnN0YXRpYyBpbnQgUmxtdFN0YXQoU0tfQUMgKnBBQywgY2hh ciogSW9DLCBpbnQgYWN0aW9uLCB1MzIgSWQsCiAgICAgICAgY2hhciAqcEJ1ZiwgdW5zaWduZWQg aW50ICpwTGVuLCB1MzIgSW5zdGFuY2UsCiAgICAgICAgdW5zaWduZWQgaW50IFRhYmxlSW5kZXgs IHUzMiBOZXRJbmRleCk7CnN0YXRpYyBpbnQgU2Vuc29yU3RhdChTS19BQyAqcEFDLCBjaGFyKiBJ b0MsIGludCBhY3Rpb24sIHUzMiBJZCwKICAgICAgICBjaGFyICpwQnVmLCB1bnNpZ25lZCBpbnQg KnBMZW4sIHUzMiBJbnN0YW5jZSwKICAgICAgICB1bnNpZ25lZCBpbnQgVGFibGVJbmRleCwgdTMy IE5ldEluZGV4KTsKc3RhdGljIGludCBWcGQoU0tfQUMgKnBBQywgY2hhciogSW9DLCBpbnQgYWN0 aW9uLCB1MzIgSWQsCiAgICAgICAgY2hhciAqcEJ1ZiwgdW5zaWduZWQgaW50ICpwTGVuLCB1MzIg SW5zdGFuY2UsCiAgICAgICAgdW5zaWduZWQgaW50IFRhYmxlSW5kZXgsIHUzMiBOZXRJbmRleCk7 CnN0YXRpYyBpbnQgVmN0KFNLX0FDICpwQUMsIGNoYXIqIElvQywgaW50IGFjdGlvbiwgdTMyIElk LAogICAgICAgIGNoYXIgKnBCdWYsIHVuc2lnbmVkIGludCAqcExlbiwgdTMyIEluc3RhbmNlLAog ICAgICAgIHVuc2lnbmVkIGludCBUYWJsZUluZGV4LCB1MzIgTmV0SW5kZXgpOwojIDExNyAic2tn ZW1pYi5jIgpzdGF0aWMgY29uc3QgU0tfUE5NSV9UQUJfRU5UUlkgSWRUYWJsZVtdID0gewogICAg ICAgIHsweDAwMDIwMTAxLAogICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgIDAsCiAg ICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgMCwgTWFjODAyM1N0YXQsIFNLX1BOTUlf SFRYfSwKICAgICAgICB7MHgwMDAyMDEwMiwKICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAg ICAgICAwLAogICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgIDAsIE1hYzgwMjNTdGF0 LCBTS19QTk1JX0hSWH0sCiAgICAgICAgezB4MDAwMjAxMDMsCiAgICAgICAgICAgICAgICAwLAog ICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAwLCBH ZW5lcmFsLCAwfSwKICAgICAgICB7MHgwMDAyMDEwNCwKICAgICAgICAgICAgICAgIDAsCiAgICAg ICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgIDAsIEdlbmVy YWwsIDB9LAogICAgICAgIHsweDAwMDIwMTA1LAogICAgICAgICAgICAgICAgMCwKICAgICAgICAg ICAgICAgIDAsCiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgMCwgR2VuZXJhbCwg MH0sCiAgICAgICAgezB4MDAwMjAyMDIsCiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAg ICAgMCwKICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAwLCBNYWM4MDIzU3RhdCwg U0tfUE5NSV9IVFhfVU5JQ0FTVH0sCiAgICAgICAgezB4MDAwMjAyMDQsCiAgICAgICAgICAgICAg ICAwLAogICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAg ICAwLCBNYWM4MDIzU3RhdCwgU0tfUE5NSV9IVFhfTVVMVElDQVNUfSwKICAgICAgICB7MHgwMDAy MDIwNiwKICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAg ICAgMCwKICAgICAgICAgICAgICAgIDAsIE1hYzgwMjNTdGF0LCBTS19QTk1JX0hUWF9CUk9BRENB U1R9LAogICAgICAgIHsweDAwMDIwMjA4LAogICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAg ICAgIDAsCiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgMCwgTWFjODAyM1N0YXQs IFNLX1BOTUlfSFJYX1VOSUNBU1R9LAogICAgICAgIHsweDAwMDIwMjBBLAogICAgICAgICAgICAg ICAgMCwKICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAg ICAgMCwgTWFjODAyM1N0YXQsIFNLX1BOTUlfSFJYX01VTFRJQ0FTVH0sCiAgICAgICAgezB4MDAw MjAyMEMsCiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAg ICAgIDAsCiAgICAgICAgICAgICAgICAwLCBNYWM4MDIzU3RhdCwgU0tfUE5NSV9IUlhfQlJPQURD QVNUfSwKICAgICAgICB7MHgwMDAyMDIwRCwKICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAg ICAgICAwLAogICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgIDAsIE1hYzgwMjNTdGF0 LCBTS19QTk1JX0hSWF9GQ1N9LAogICAgICAgIHsweDAwMDIwMjBFLAogICAgICAgICAgICAgICAg MCwKICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAg MCwgR2VuZXJhbCwgMH0sCiAgICAgICAgezB4MDEwMTAxMDEsCiAgICAgICAgICAgICAgICAwLAog ICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAwLCBN YWM4MDIzU3RhdCwgMH0sCiAgICAgICAgezB4MDEwMTAxMDIsCiAgICAgICAgICAgICAgICAwLAog ICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAwLCBN YWM4MDIzU3RhdCwgMH0sCiAgICAgICAgezB4MDEwMjAxMDEsCiAgICAgICAgICAgICAgICAwLAog ICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAwLCBN YWM4MDIzU3RhdCwgU0tfUE5NSV9IUlhfRlJBTUlOR30sCiAgICAgICAgezB4MDEwMjAxMDIsCiAg ICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgIDAsCiAg ICAgICAgICAgICAgICAwLCBNYWM4MDIzU3RhdCwgU0tfUE5NSV9IVFhfU0lOR0xFX0NPTH0sCiAg ICAgICAgezB4MDEwMjAxMDMsCiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgMCwK ICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAwLCBNYWM4MDIzU3RhdCwgU0tfUE5N SV9IVFhfTVVMVElfQ09MfSwKICAgICAgICB7MHgwMTAyMDIwMSwKICAgICAgICAgICAgICAgIDAs CiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgIDAs IE1hYzgwMjNTdGF0LCBTS19QTk1JX0hUWF9ERUZGRVJBTH0sCiAgICAgICAgezB4MDEwMjAyMDIs CiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgIDAs CiAgICAgICAgICAgICAgICAwLCBNYWM4MDIzU3RhdCwgU0tfUE5NSV9IVFhfRVhDRVNTX0NPTH0s CiAgICAgICAgezB4MDEwMjAyMDMsCiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAg MCwKICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAwLCBNYWM4MDIzU3RhdCwgU0tf UE5NSV9IUlhfT1ZFUkZMT1d9LAogICAgICAgIHsweDAxMDIwMjA0LAogICAgICAgICAgICAgICAg MCwKICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAg MCwgTWFjODAyM1N0YXQsIFNLX1BOTUlfSFRYX1VOREVSUlVOfSwKICAgICAgICB7MHgwMTAyMDIw NiwKICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAg MCwKICAgICAgICAgICAgICAgIDAsIE1hYzgwMjNTdGF0LCBTS19QTk1JX0hUWF9DQVJSSUVSfSwK ICAgICAgICB7MHgwMTAyMDIwNywKICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAw LAogICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgIDAsIE1hYzgwMjNTdGF0LCBTS19Q Tk1JX0hUWF9MQVRFX0NPTH0sCiMgMjcwICJza2dlbWliLmMiCiAgICAgICAgezB4RkYwMTAxMDAs CiAgICAgICAgICAgICAgICAxLAogICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgICgo dTMyKSh1bG9uZykmKCgoU0tfUE5NSV9TVFJVQ1RfREFUQSAqKTApLT5NZ210REJWZXJzaW9uKSks CiAgICAgICAgICAgICAgICAwLCBHZW5lcmFsLCAwfSwKICAgICAgICB7MHhGRjAxMDEwMSwKICAg ICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgMCwKICAg ICAgICAgICAgICAgIDAsIEdlbmVyYWwsIDB9LAogICAgICAgIHsweEZGMDIwMTkwLAogICAgICAg ICAgICAgICAgMCwKICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAwLAogICAgICAg ICAgICAgICAgMSwgT2lkU3RydWN0LCAwfSwKICAgICAgICB7MHhGRjAxMDEwMiwKICAgICAgICAg ICAgICAgIDEsCiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgKCh1MzIpKHVsb25n KSYoKChTS19QTk1JX1NUUlVDVF9EQVRBICopMCktPlZwZEZyZWVCeXRlcykpLAogICAgICAgICAg ICAgICAgMCwgVnBkLCAwfSwKICAgICAgICB7MHhGRjAxMDEwMywKICAgICAgICAgICAgICAgIDEs CiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgKCh1MzIpKHVsb25nKSYoKChTS19Q Tk1JX1NUUlVDVF9EQVRBICopMCktPlZwZEVudHJpZXNMaXN0KSksCiAgICAgICAgICAgICAgICAw LCBWcGQsIDB9LAogICAgICAgIHsweEZGMDEwMTA0LAogICAgICAgICAgICAgICAgMSwKICAgICAg ICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAoKHUzMikodWxvbmcpJigoKFNLX1BOTUlfU1RS VUNUX0RBVEEgKikwKS0+VnBkRW50cmllc051bWJlcikpLAogICAgICAgICAgICAgICAgMCwgVnBk LCAwfSwKICAgICAgICB7MHhGRjAxMDEwNSwKICAgICAgICAgICAgICAgICg1MTIgLyA0KSwKICAg ICAgICAgICAgICAgIHNpemVvZihTS19QTk1JX1ZQRCksCiAgICAgICAgICAgICAgICAoKHUzMiko dWxvbmcpJigoKFNLX1BOTUlfU1RSVUNUX0RBVEEgKikwKS0+VnBkKSkgKyAoKHUzMikodWxvbmcp JigoKFNLX1BOTUlfVlBEICopMCktPlZwZEtleSkpLAogICAgICAgICAgICAgICAgMCwgVnBkLCAw fSwKICAgICAgICB7MHhGRjAxMDEwNiwKICAgICAgICAgICAgICAgICg1MTIgLyA0KSwKICAgICAg ICAgICAgICAgIHNpemVvZihTS19QTk1JX1ZQRCksCiAgICAgICAgICAgICAgICAoKHUzMikodWxv bmcpJigoKFNLX1BOTUlfU1RSVUNUX0RBVEEgKikwKS0+VnBkKSkgKyAoKHUzMikodWxvbmcpJigo KFNLX1BOTUlfVlBEICopMCktPlZwZFZhbHVlKSksCiAgICAgICAgICAgICAgICAwLCBWcGQsIDB9 LAogICAgICAgIHsweEZGMDEwMTA3LAogICAgICAgICAgICAgICAgKDUxMiAvIDQpLAogICAgICAg ICAgICAgICAgc2l6ZW9mKFNLX1BOTUlfVlBEKSwKICAgICAgICAgICAgICAgICgodTMyKSh1bG9u ZykmKCgoU0tfUE5NSV9TVFJVQ1RfREFUQSAqKTApLT5WcGQpKSArICgodTMyKSh1bG9uZykmKCgo U0tfUE5NSV9WUEQgKikwKS0+VnBkQWNjZXNzKSksCiAgICAgICAgICAgICAgICAwLCBWcGQsIDB9 LAogICAgICAgIHsweEZGMDEwMTA4LAogICAgICAgICAgICAgICAgKDUxMiAvIDQpLAogICAgICAg ICAgICAgICAgc2l6ZW9mKFNLX1BOTUlfVlBEKSwKICAgICAgICAgICAgICAgICgodTMyKSh1bG9u ZykmKCgoU0tfUE5NSV9TVFJVQ1RfREFUQSAqKTApLT5WcGQpKSArICgodTMyKSh1bG9uZykmKCgo U0tfUE5NSV9WUEQgKikwKS0+VnBkQWN0aW9uKSksCiAgICAgICAgICAgICAgICAxLCBWcGQsIDB9 LAogICAgICAgIHsweEZGMDEwMTEwLAogICAgICAgICAgICAgICAgMSwKICAgICAgICAgICAgICAg IDAsCiAgICAgICAgICAgICAgICAoKHUzMikodWxvbmcpJigoKFNLX1BOTUlfU1RSVUNUX0RBVEEg KikwKS0+UG9ydE51bWJlcikpLAogICAgICAgICAgICAgICAgMCwgR2VuZXJhbCwgMH0sCiAgICAg ICAgezB4RkYwMTAxMTEsCiAgICAgICAgICAgICAgICAxLAogICAgICAgICAgICAgICAgMCwKICAg ICAgICAgICAgICAgICgodTMyKSh1bG9uZykmKCgoU0tfUE5NSV9TVFJVQ1RfREFUQSAqKTApLT5E ZXZpY2VUeXBlKSksCiAgICAgICAgICAgICAgICAwLCBHZW5lcmFsLCAwfSwKICAgICAgICB7MHhG RjAxMDExMiwKICAgICAgICAgICAgICAgIDEsCiAgICAgICAgICAgICAgICAwLAogICAgICAgICAg ICAgICAgKCh1MzIpKHVsb25nKSYoKChTS19QTk1JX1NUUlVDVF9EQVRBICopMCktPkRyaXZlckRl c2NyKSksCiAgICAgICAgICAgICAgICAwLCBHZW5lcmFsLCAwfSwKICAgICAgICB7MHhGRjAxMDEx MywKICAgICAgICAgICAgICAgIDEsCiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAg KCh1MzIpKHVsb25nKSYoKChTS19QTk1JX1NUUlVDVF9EQVRBICopMCktPkRyaXZlclZlcnNpb24p KSwKICAgICAgICAgICAgICAgIDAsIEdlbmVyYWwsIDB9LAogICAgICAgIHsweEZGMDEwMTE0LAog ICAgICAgICAgICAgICAgMSwKICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAoKHUz MikodWxvbmcpJigoKFNLX1BOTUlfU1RSVUNUX0RBVEEgKikwKS0+SHdEZXNjcikpLAogICAgICAg ICAgICAgICAgMCwgR2VuZXJhbCwgMH0sCiAgICAgICAgezB4RkYwMTAxMTUsCiAgICAgICAgICAg ICAgICAxLAogICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgICgodTMyKSh1bG9uZykm KCgoU0tfUE5NSV9TVFJVQ1RfREFUQSAqKTApLT5Id1ZlcnNpb24pKSwKICAgICAgICAgICAgICAg IDAsIEdlbmVyYWwsIDB9LAogICAgICAgIHsweEZGMDEwMTE2LAogICAgICAgICAgICAgICAgMSwK ICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAoKHUzMikodWxvbmcpJigoKFNLX1BO TUlfU1RSVUNUX0RBVEEgKikwKS0+Q2hpcHNldCkpLAogICAgICAgICAgICAgICAgMCwgR2VuZXJh bCwgMH0sCiAgICAgICAgezB4RkYwMTAxMTcsCiAgICAgICAgICAgICAgICAxLAogICAgICAgICAg ICAgICAgMCwKICAgICAgICAgICAgICAgICgodTMyKSh1bG9uZykmKCgoU0tfUE5NSV9TVFJVQ1Rf REFUQSAqKTApLT5BY3Rpb24pKSwKICAgICAgICAgICAgICAgIDEsIFBlcmZvcm0sIDB9LAogICAg ICAgIHsweEZGMDEwMTE4LAogICAgICAgICAgICAgICAgMSwKICAgICAgICAgICAgICAgIDAsCiAg ICAgICAgICAgICAgICAoKHUzMikodWxvbmcpJigoKFNLX1BOTUlfU1RSVUNUX0RBVEEgKikwKS0+ VGVzdFJlc3VsdCkpLAogICAgICAgICAgICAgICAgMCwgR2VuZXJhbCwgMH0sCiAgICAgICAgezB4 RkYwMTAxMTksCiAgICAgICAgICAgICAgICAxLAogICAgICAgICAgICAgICAgMCwKICAgICAgICAg ICAgICAgICgodTMyKSh1bG9uZykmKCgoU0tfUE5NSV9TVFJVQ1RfREFUQSAqKTApLT5CdXNUeXBl KSksCiAgICAgICAgICAgICAgICAwLCBHZW5lcmFsLCAwfSwKICAgICAgICB7MHhGRjAxMDExQSwK ICAgICAgICAgICAgICAgIDEsCiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgKCh1 MzIpKHVsb25nKSYoKChTS19QTk1JX1NUUlVDVF9EQVRBICopMCktPkJ1c1NwZWVkKSksCiAgICAg ICAgICAgICAgICAwLCBHZW5lcmFsLCAwfSwKICAgICAgICB7MHhGRjAxMDExQiwKICAgICAgICAg ICAgICAgIDEsCiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgKCh1MzIpKHVsb25n KSYoKChTS19QTk1JX1NUUlVDVF9EQVRBICopMCktPkJ1c1dpZHRoKSksCiAgICAgICAgICAgICAg ICAwLCBHZW5lcmFsLCAwfSwKICAgICAgICB7MHhGRjAyMDE3MCwKICAgICAgICAgICAgICAgIDEs CiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgKCh1MzIpKHVsb25nKSYoKChTS19Q Tk1JX1NUUlVDVF9EQVRBICopMCktPlR4U3dRdWV1ZUxlbikpLAogICAgICAgICAgICAgICAgMCwg R2VuZXJhbCwgMH0sCiAgICAgICAgezB4RkYwMjAxNzEsCiAgICAgICAgICAgICAgICAxLAogICAg ICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgICgodTMyKSh1bG9uZykmKCgoU0tfUE5NSV9T VFJVQ1RfREFUQSAqKTApLT5UeFN3UXVldWVNYXgpKSwKICAgICAgICAgICAgICAgIDAsIEdlbmVy YWwsIDB9LAogICAgICAgIHsweEZGMDIwMTcyLAogICAgICAgICAgICAgICAgMSwKICAgICAgICAg ICAgICAgIDAsCiAgICAgICAgICAgICAgICAoKHUzMikodWxvbmcpJigoKFNLX1BOTUlfU1RSVUNU X0RBVEEgKikwKS0+VHhSZXRyeUN0cykpLAogICAgICAgICAgICAgICAgMCwgR2VuZXJhbCwgMH0s CiAgICAgICAgezB4RkYwMjAxNzMsCiAgICAgICAgICAgICAgICAxLAogICAgICAgICAgICAgICAg MCwKICAgICAgICAgICAgICAgICgodTMyKSh1bG9uZykmKCgoU0tfUE5NSV9TVFJVQ1RfREFUQSAq KTApLT5SeEludHJDdHMpKSwKICAgICAgICAgICAgICAgIDAsIEdlbmVyYWwsIDB9LAogICAgICAg IHsweEZGMDIwMTc0LAogICAgICAgICAgICAgICAgMSwKICAgICAgICAgICAgICAgIDAsCiAgICAg ICAgICAgICAgICAoKHUzMikodWxvbmcpJigoKFNLX1BOTUlfU1RSVUNUX0RBVEEgKikwKS0+VHhJ bnRyQ3RzKSksCiAgICAgICAgICAgICAgICAwLCBHZW5lcmFsLCAwfSwKICAgICAgICB7MHhGRjAy MDE3NSwKICAgICAgICAgICAgICAgIDEsCiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAg ICAgKCh1MzIpKHVsb25nKSYoKChTS19QTk1JX1NUUlVDVF9EQVRBICopMCktPlJ4Tm9CdWZDdHMp KSwKICAgICAgICAgICAgICAgIDAsIEdlbmVyYWwsIDB9LAogICAgICAgIHsweEZGMDIwMTc2LAog ICAgICAgICAgICAgICAgMSwKICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAoKHUz MikodWxvbmcpJigoKFNLX1BOTUlfU1RSVUNUX0RBVEEgKikwKS0+VHhOb0J1ZkN0cykpLAogICAg ICAgICAgICAgICAgMCwgR2VuZXJhbCwgMH0sCiAgICAgICAgezB4RkYwMjAxNzcsCiAgICAgICAg ICAgICAgICAxLAogICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgICgodTMyKSh1bG9u ZykmKCgoU0tfUE5NSV9TVFJVQ1RfREFUQSAqKTApLT5UeFVzZWREZXNjck5vKSksCiAgICAgICAg ICAgICAgICAwLCBHZW5lcmFsLCAwfSwKICAgICAgICB7MHhGRjAyMDE3OCwKICAgICAgICAgICAg ICAgIDEsCiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgKCh1MzIpKHVsb25nKSYo KChTS19QTk1JX1NUUlVDVF9EQVRBICopMCktPlJ4RGVsaXZlcmVkQ3RzKSksCiAgICAgICAgICAg ICAgICAwLCBHZW5lcmFsLCAwfSwKICAgICAgICB7MHhGRjAyMDE3OSwKICAgICAgICAgICAgICAg IDEsCiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgKCh1MzIpKHVsb25nKSYoKChT S19QTk1JX1NUUlVDVF9EQVRBICopMCktPlJ4T2N0ZXRzRGVsaXZlcmVkQ3RzKSksCiAgICAgICAg ICAgICAgICAwLCBHZW5lcmFsLCAwfSwKICAgICAgICB7MHhGRjAyMDE3QSwKICAgICAgICAgICAg ICAgIDEsCiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgKCh1MzIpKHVsb25nKSYo KChTS19QTk1JX1NUUlVDVF9EQVRBICopMCktPlJ4SHdFcnJvcnNDdHMpKSwKICAgICAgICAgICAg ICAgIDAsIEdlbmVyYWwsIDB9LAogICAgICAgIHsweEZGMDIwMTdCLAogICAgICAgICAgICAgICAg MSwKICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAoKHUzMikodWxvbmcpJigoKFNL X1BOTUlfU1RSVUNUX0RBVEEgKikwKS0+VHhId0Vycm9yc0N0cykpLAogICAgICAgICAgICAgICAg MCwgR2VuZXJhbCwgMH0sCiAgICAgICAgezB4RkYwMjAxN0MsCiAgICAgICAgICAgICAgICAxLAog ICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgICgodTMyKSh1bG9uZykmKCgoU0tfUE5N SV9TVFJVQ1RfREFUQSAqKTApLT5JbkVycm9yc0N0cykpLAogICAgICAgICAgICAgICAgMCwgR2Vu ZXJhbCwgMH0sCiAgICAgICAgezB4RkYwMjAxN0QsCiAgICAgICAgICAgICAgICAxLAogICAgICAg ICAgICAgICAgMCwKICAgICAgICAgICAgICAgICgodTMyKSh1bG9uZykmKCgoU0tfUE5NSV9TVFJV Q1RfREFUQSAqKTApLT5PdXRFcnJvcnNDdHMpKSwKICAgICAgICAgICAgICAgIDAsIEdlbmVyYWws IDB9LAogICAgICAgIHsweEZGMDIwMTdFLAogICAgICAgICAgICAgICAgMSwKICAgICAgICAgICAg ICAgIDAsCiAgICAgICAgICAgICAgICAoKHUzMikodWxvbmcpJigoKFNLX1BOTUlfU1RSVUNUX0RB VEEgKikwKS0+RXJyUmVjb3ZlcnlDdHMpKSwKICAgICAgICAgICAgICAgIDAsIEdlbmVyYWwsIDB9 LAogICAgICAgIHsweEZGMDIwMTdGLAogICAgICAgICAgICAgICAgMSwKICAgICAgICAgICAgICAg IDAsCiAgICAgICAgICAgICAgICAoKHUzMikodWxvbmcpJigoKFNLX1BOTUlfU1RSVUNUX0RBVEEg KikwKS0+U3lzVXBUaW1lKSksCiAgICAgICAgICAgICAgICAwLCBHZW5lcmFsLCAwfSwKICAgICAg ICB7MHhGRjAyMDEwMCwKICAgICAgICAgICAgICAgIDEsCiAgICAgICAgICAgICAgICAwLAogICAg ICAgICAgICAgICAgKCh1MzIpKHVsb25nKSYoKChTS19QTk1JX1NUUlVDVF9EQVRBICopMCktPlNl bnNvck51bWJlcikpLAogICAgICAgICAgICAgICAgMCwgR2VuZXJhbCwgMH0sCiAgICAgICAgezB4 RkYwMjAxMDEsCiAgICAgICAgICAgICAgICAoOCksCiAgICAgICAgICAgICAgICBzaXplb2YoU0tf UE5NSV9TRU5TT1IpLAogICAgICAgICAgICAgICAgKCh1MzIpKHVsb25nKSYoKChTS19QTk1JX1NU UlVDVF9EQVRBICopMCktPlNlbnNvcikpICsgKCh1MzIpKHVsb25nKSYoKChTS19QTk1JX1NFTlNP UiAqKTApLT5TZW5zb3JJbmRleCkpLAogICAgICAgICAgICAgICAgMCwgU2Vuc29yU3RhdCwgMH0s CiAgICAgICAgezB4RkYwMjAxMDIsCiAgICAgICAgICAgICAgICAoOCksCiAgICAgICAgICAgICAg ICBzaXplb2YoU0tfUE5NSV9TRU5TT1IpLAogICAgICAgICAgICAgICAgKCh1MzIpKHVsb25nKSYo KChTS19QTk1JX1NUUlVDVF9EQVRBICopMCktPlNlbnNvcikpICsgKCh1MzIpKHVsb25nKSYoKChT S19QTk1JX1NFTlNPUiAqKTApLT5TZW5zb3JEZXNjcikpLAogICAgICAgICAgICAgICAgMCwgU2Vu c29yU3RhdCwgMH0sCiAgICAgICAgezB4RkYwMjAxMDMsCiAgICAgICAgICAgICAgICAoOCksCiAg ICAgICAgICAgICAgICBzaXplb2YoU0tfUE5NSV9TRU5TT1IpLAogICAgICAgICAgICAgICAgKCh1 MzIpKHVsb25nKSYoKChTS19QTk1JX1NUUlVDVF9EQVRBICopMCktPlNlbnNvcikpICsgKCh1MzIp KHVsb25nKSYoKChTS19QTk1JX1NFTlNPUiAqKTApLT5TZW5zb3JUeXBlKSksCiAgICAgICAgICAg ICAgICAwLCBTZW5zb3JTdGF0LCAwfSwKICAgICAgICB7MHhGRjAyMDEwNCwKICAgICAgICAgICAg ICAgICg4KSwKICAgICAgICAgICAgICAgIHNpemVvZihTS19QTk1JX1NFTlNPUiksCiAgICAgICAg ICAgICAgICAoKHUzMikodWxvbmcpJigoKFNLX1BOTUlfU1RSVUNUX0RBVEEgKikwKS0+U2Vuc29y KSkgKyAoKHUzMikodWxvbmcpJigoKFNLX1BOTUlfU0VOU09SICopMCktPlNlbnNvclZhbHVlKSks CiAgICAgICAgICAgICAgICAwLCBTZW5zb3JTdGF0LCAwfSwKICAgICAgICB7MHhGRjAyMDEwNSwK ICAgICAgICAgICAgICAgICg4KSwKICAgICAgICAgICAgICAgIHNpemVvZihTS19QTk1JX1NFTlNP UiksCiAgICAgICAgICAgICAgICAoKHUzMikodWxvbmcpJigoKFNLX1BOTUlfU1RSVUNUX0RBVEEg KikwKS0+U2Vuc29yKSkgKyAoKHUzMikodWxvbmcpJigoKFNLX1BOTUlfU0VOU09SICopMCktPlNl bnNvcldhcm5pbmdUaHJlc2hvbGRMb3cpKSwKICAgICAgICAgICAgICAgIDAsIFNlbnNvclN0YXQs IDB9LAogICAgICAgIHsweEZGMDIwMTA2LAogICAgICAgICAgICAgICAgKDgpLAogICAgICAgICAg ICAgICAgc2l6ZW9mKFNLX1BOTUlfU0VOU09SKSwKICAgICAgICAgICAgICAgICgodTMyKSh1bG9u ZykmKCgoU0tfUE5NSV9TVFJVQ1RfREFUQSAqKTApLT5TZW5zb3IpKSArICgodTMyKSh1bG9uZykm KCgoU0tfUE5NSV9TRU5TT1IgKikwKS0+U2Vuc29yV2FybmluZ1RocmVzaG9sZEhpZ2gpKSwKICAg ICAgICAgICAgICAgIDAsIFNlbnNvclN0YXQsIDB9LAogICAgICAgIHsweEZGMDIwMTA3LAogICAg ICAgICAgICAgICAgKDgpLAogICAgICAgICAgICAgICAgc2l6ZW9mKFNLX1BOTUlfU0VOU09SKSwK ICAgICAgICAgICAgICAgICgodTMyKSh1bG9uZykmKCgoU0tfUE5NSV9TVFJVQ1RfREFUQSAqKTAp LT5TZW5zb3IpKSArICgodTMyKSh1bG9uZykmKCgoU0tfUE5NSV9TRU5TT1IgKikwKS0+U2Vuc29y RXJyb3JUaHJlc2hvbGRMb3cpKSwKICAgICAgICAgICAgICAgIDAsIFNlbnNvclN0YXQsIDB9LAog ICAgICAgIHsweEZGMDIwMTA4LAogICAgICAgICAgICAgICAgKDgpLAogICAgICAgICAgICAgICAg c2l6ZW9mKFNLX1BOTUlfU0VOU09SKSwKICAgICAgICAgICAgICAgICgodTMyKSh1bG9uZykmKCgo U0tfUE5NSV9TVFJVQ1RfREFUQSAqKTApLT5TZW5zb3IpKSArICgodTMyKSh1bG9uZykmKCgoU0tf UE5NSV9TRU5TT1IgKikwKS0+U2Vuc29yRXJyb3JUaHJlc2hvbGRIaWdoKSksCiAgICAgICAgICAg ICAgICAwLCBTZW5zb3JTdGF0LCAwfSwKICAgICAgICB7MHhGRjAyMDEwOSwKICAgICAgICAgICAg ICAgICg4KSwKICAgICAgICAgICAgICAgIHNpemVvZihTS19QTk1JX1NFTlNPUiksCiAgICAgICAg ICAgICAgICAoKHUzMikodWxvbmcpJigoKFNLX1BOTUlfU1RSVUNUX0RBVEEgKikwKS0+U2Vuc29y KSkgKyAoKHUzMikodWxvbmcpJigoKFNLX1BOTUlfU0VOU09SICopMCktPlNlbnNvclN0YXR1cykp LAogICAgICAgICAgICAgICAgMCwgU2Vuc29yU3RhdCwgMH0sCiAgICAgICAgezB4RkYwMjAxMEEs CiAgICAgICAgICAgICAgICAoOCksCiAgICAgICAgICAgICAgICBzaXplb2YoU0tfUE5NSV9TRU5T T1IpLAogICAgICAgICAgICAgICAgKCh1MzIpKHVsb25nKSYoKChTS19QTk1JX1NUUlVDVF9EQVRB ICopMCktPlNlbnNvcikpICsgKCh1MzIpKHVsb25nKSYoKChTS19QTk1JX1NFTlNPUiAqKTApLT5T ZW5zb3JXYXJuaW5nQ3RzKSksCiAgICAgICAgICAgICAgICAwLCBTZW5zb3JTdGF0LCAwfSwKICAg ICAgICB7MHhGRjAyMDEwQiwKICAgICAgICAgICAgICAgICg4KSwKICAgICAgICAgICAgICAgIHNp emVvZihTS19QTk1JX1NFTlNPUiksCiAgICAgICAgICAgICAgICAoKHUzMikodWxvbmcpJigoKFNL X1BOTUlfU1RSVUNUX0RBVEEgKikwKS0+U2Vuc29yKSkgKyAoKHUzMikodWxvbmcpJigoKFNLX1BO TUlfU0VOU09SICopMCktPlNlbnNvckVycm9yQ3RzKSksCiAgICAgICAgICAgICAgICAwLCBTZW5z b3JTdGF0LCAwfSwKICAgICAgICB7MHhGRjAyMDEwQywKICAgICAgICAgICAgICAgICg4KSwKICAg ICAgICAgICAgICAgIHNpemVvZihTS19QTk1JX1NFTlNPUiksCiAgICAgICAgICAgICAgICAoKHUz MikodWxvbmcpJigoKFNLX1BOTUlfU1RSVUNUX0RBVEEgKikwKS0+U2Vuc29yKSkgKyAoKHUzMiko dWxvbmcpJigoKFNLX1BOTUlfU0VOU09SICopMCktPlNlbnNvcldhcm5pbmdUaW1lc3RhbXApKSwK ICAgICAgICAgICAgICAgIDAsIFNlbnNvclN0YXQsIDB9LAogICAgICAgIHsweEZGMDIwMTBELAog ICAgICAgICAgICAgICAgKDgpLAogICAgICAgICAgICAgICAgc2l6ZW9mKFNLX1BOTUlfU0VOU09S KSwKICAgICAgICAgICAgICAgICgodTMyKSh1bG9uZykmKCgoU0tfUE5NSV9TVFJVQ1RfREFUQSAq KTApLT5TZW5zb3IpKSArICgodTMyKSh1bG9uZykmKCgoU0tfUE5NSV9TRU5TT1IgKikwKS0+U2Vu c29yRXJyb3JUaW1lc3RhbXApKSwKICAgICAgICAgICAgICAgIDAsIFNlbnNvclN0YXQsIDB9LAog ICAgICAgIHsweEZGMDIwMTEwLAogICAgICAgICAgICAgICAgMSwKICAgICAgICAgICAgICAgIDAs CiAgICAgICAgICAgICAgICAoKHUzMikodWxvbmcpJigoKFNLX1BOTUlfU1RSVUNUX0RBVEEgKikw KS0+Q2hlY2tzdW1OdW1iZXIpKSwKICAgICAgICAgICAgICAgIDAsIEdlbmVyYWwsIDB9LAogICAg ICAgIHsweEZGMDIwMTExLAogICAgICAgICAgICAgICAgMywKICAgICAgICAgICAgICAgIHNpemVv ZihTS19QTk1JX0NIRUNLU1VNKSwKICAgICAgICAgICAgICAgICgodTMyKSh1bG9uZykmKCgoU0tf UE5NSV9TVFJVQ1RfREFUQSAqKTApLT5DaGVja3N1bSkpICsgKCh1MzIpKHVsb25nKSYoKChTS19Q Tk1JX0NIRUNLU1VNICopMCktPkNoZWNrc3VtUnhPa0N0cykpLAogICAgICAgICAgICAgICAgMCwg Q3N1bVN0YXQsIDB9LAogICAgICAgIHsweEZGMDIwMTEyLAogICAgICAgICAgICAgICAgMywKICAg ICAgICAgICAgICAgIHNpemVvZihTS19QTk1JX0NIRUNLU1VNKSwKICAgICAgICAgICAgICAgICgo dTMyKSh1bG9uZykmKCgoU0tfUE5NSV9TVFJVQ1RfREFUQSAqKTApLT5DaGVja3N1bSkpICsgKCh1 MzIpKHVsb25nKSYoKChTS19QTk1JX0NIRUNLU1VNICopMCktPkNoZWNrc3VtUnhVbmFibGVDdHMp KSwKICAgICAgICAgICAgICAgIDAsIENzdW1TdGF0LCAwfSwKICAgICAgICB7MHhGRjAyMDExMywK ICAgICAgICAgICAgICAgIDMsCiAgICAgICAgICAgICAgICBzaXplb2YoU0tfUE5NSV9DSEVDS1NV TSksCiAgICAgICAgICAgICAgICAoKHUzMikodWxvbmcpJigoKFNLX1BOTUlfU1RSVUNUX0RBVEEg KikwKS0+Q2hlY2tzdW0pKSArICgodTMyKSh1bG9uZykmKCgoU0tfUE5NSV9DSEVDS1NVTSAqKTAp LT5DaGVja3N1bVJ4RXJyQ3RzKSksCiAgICAgICAgICAgICAgICAwLCBDc3VtU3RhdCwgMH0sCiAg ICAgICAgezB4RkYwMjAxMTQsCiAgICAgICAgICAgICAgICAzLAogICAgICAgICAgICAgICAgc2l6 ZW9mKFNLX1BOTUlfQ0hFQ0tTVU0pLAogICAgICAgICAgICAgICAgKCh1MzIpKHVsb25nKSYoKChT S19QTk1JX1NUUlVDVF9EQVRBICopMCktPkNoZWNrc3VtKSkgKyAoKHUzMikodWxvbmcpJigoKFNL X1BOTUlfQ0hFQ0tTVU0gKikwKS0+Q2hlY2tzdW1UeE9rQ3RzKSksCiAgICAgICAgICAgICAgICAw LCBDc3VtU3RhdCwgMH0sCiAgICAgICAgezB4RkYwMjAxMTUsCiAgICAgICAgICAgICAgICAzLAog ICAgICAgICAgICAgICAgc2l6ZW9mKFNLX1BOTUlfQ0hFQ0tTVU0pLAogICAgICAgICAgICAgICAg KCh1MzIpKHVsb25nKSYoKChTS19QTk1JX1NUUlVDVF9EQVRBICopMCktPkNoZWNrc3VtKSkgKyAo KHUzMikodWxvbmcpJigoKFNLX1BOTUlfQ0hFQ0tTVU0gKikwKS0+Q2hlY2tzdW1UeFVuYWJsZUN0 cykpLAogICAgICAgICAgICAgICAgMCwgQ3N1bVN0YXQsIDB9LAogICAgICAgIHsweEZGMDIwMTIw LAogICAgICAgICAgICAgICAgKDIgKyAxKSwKICAgICAgICAgICAgICAgIHNpemVvZihTS19QTk1J X1NUQVQpLAogICAgICAgICAgICAgICAgKCh1MzIpKHVsb25nKSYoKChTS19QTk1JX1NUUlVDVF9E QVRBICopMCktPlN0YXQpKSArICgodTMyKSh1bG9uZykmKCgoU0tfUE5NSV9TVEFUICopMCktPlN0 YXRUeE9rQ3RzKSksCiAgICAgICAgICAgICAgICAwLCBNYWNQcml2YXRlU3RhdCwgU0tfUE5NSV9I VFh9LAogICAgICAgIHsweEZGMDIwMTIxLAogICAgICAgICAgICAgICAgKDIgKyAxKSwKICAgICAg ICAgICAgICAgIHNpemVvZihTS19QTk1JX1NUQVQpLAogICAgICAgICAgICAgICAgKCh1MzIpKHVs b25nKSYoKChTS19QTk1JX1NUUlVDVF9EQVRBICopMCktPlN0YXQpKSArICgodTMyKSh1bG9uZykm KCgoU0tfUE5NSV9TVEFUICopMCktPlN0YXRUeE9jdGV0c09rQ3RzKSksCiAgICAgICAgICAgICAg ICAwLCBNYWNQcml2YXRlU3RhdCwgU0tfUE5NSV9IVFhfT0NURVR9LAogICAgICAgIHsweEZGMDIw MTIyLAogICAgICAgICAgICAgICAgKDIgKyAxKSwKICAgICAgICAgICAgICAgIHNpemVvZihTS19Q Tk1JX1NUQVQpLAogICAgICAgICAgICAgICAgKCh1MzIpKHVsb25nKSYoKChTS19QTk1JX1NUUlVD VF9EQVRBICopMCktPlN0YXQpKSArICgodTMyKSh1bG9uZykmKCgoU0tfUE5NSV9TVEFUICopMCkt PlN0YXRUeEJyb2FkY2FzdE9rQ3RzKSksCiAgICAgICAgICAgICAgICAwLCBNYWNQcml2YXRlU3Rh dCwgU0tfUE5NSV9IVFhfQlJPQURDQVNUfSwKICAgICAgICB7MHhGRjAyMDEyMywKICAgICAgICAg ICAgICAgICgyICsgMSksCiAgICAgICAgICAgICAgICBzaXplb2YoU0tfUE5NSV9TVEFUKSwKICAg ICAgICAgICAgICAgICgodTMyKSh1bG9uZykmKCgoU0tfUE5NSV9TVFJVQ1RfREFUQSAqKTApLT5T dGF0KSkgKyAoKHUzMikodWxvbmcpJigoKFNLX1BOTUlfU1RBVCAqKTApLT5TdGF0VHhNdWx0aWNh c3RPa0N0cykpLAogICAgICAgICAgICAgICAgMCwgTWFjUHJpdmF0ZVN0YXQsIFNLX1BOTUlfSFRY X01VTFRJQ0FTVH0sCiAgICAgICAgezB4RkYwMjAxMjQsCiAgICAgICAgICAgICAgICAoMiArIDEp LAogICAgICAgICAgICAgICAgc2l6ZW9mKFNLX1BOTUlfU1RBVCksCiAgICAgICAgICAgICAgICAo KHUzMikodWxvbmcpJigoKFNLX1BOTUlfU1RSVUNUX0RBVEEgKikwKS0+U3RhdCkpICsgKCh1MzIp KHVsb25nKSYoKChTS19QTk1JX1NUQVQgKikwKS0+U3RhdFR4VW5pY2FzdE9rQ3RzKSksCiAgICAg ICAgICAgICAgICAwLCBNYWNQcml2YXRlU3RhdCwgU0tfUE5NSV9IVFhfVU5JQ0FTVH0sCiAgICAg ICAgezB4RkYwMjAxMjUsCiAgICAgICAgICAgICAgICAoMiArIDEpLAogICAgICAgICAgICAgICAg c2l6ZW9mKFNLX1BOTUlfU1RBVCksCiAgICAgICAgICAgICAgICAoKHUzMikodWxvbmcpJigoKFNL X1BOTUlfU1RSVUNUX0RBVEEgKikwKS0+U3RhdCkpICsgKCh1MzIpKHVsb25nKSYoKChTS19QTk1J X1NUQVQgKikwKS0+U3RhdFR4TG9uZ0ZyYW1lc0N0cykpLAogICAgICAgICAgICAgICAgMCwgTWFj UHJpdmF0ZVN0YXQsIFNLX1BOTUlfSFRYX0xPTkdGUkFNRVN9LAogICAgICAgIHsweEZGMDIwMTI2 LAogICAgICAgICAgICAgICAgKDIgKyAxKSwKICAgICAgICAgICAgICAgIHNpemVvZihTS19QTk1J X1NUQVQpLAogICAgICAgICAgICAgICAgKCh1MzIpKHVsb25nKSYoKChTS19QTk1JX1NUUlVDVF9E QVRBICopMCktPlN0YXQpKSArICgodTMyKSh1bG9uZykmKCgoU0tfUE5NSV9TVEFUICopMCktPlN0 YXRUeEJ1cnN0Q3RzKSksCiAgICAgICAgICAgICAgICAwLCBNYWNQcml2YXRlU3RhdCwgU0tfUE5N SV9IVFhfQlVSU1R9LAogICAgICAgIHsweEZGMDIwMTI3LAogICAgICAgICAgICAgICAgKDIgKyAx KSwKICAgICAgICAgICAgICAgIHNpemVvZihTS19QTk1JX1NUQVQpLAogICAgICAgICAgICAgICAg KCh1MzIpKHVsb25nKSYoKChTS19QTk1JX1NUUlVDVF9EQVRBICopMCktPlN0YXQpKSArICgodTMy KSh1bG9uZykmKCgoU0tfUE5NSV9TVEFUICopMCktPlN0YXRUeFBhdXNlTWFjQ3RybEN0cykpLAog ICAgICAgICAgICAgICAgMCwgTWFjUHJpdmF0ZVN0YXQsIFNLX1BOTUlfSFRYX1BNQUNDfSwKICAg ICAgICB7MHhGRjAyMDEyOCwKICAgICAgICAgICAgICAgICgyICsgMSksCiAgICAgICAgICAgICAg ICBzaXplb2YoU0tfUE5NSV9TVEFUKSwKICAgICAgICAgICAgICAgICgodTMyKSh1bG9uZykmKCgo U0tfUE5NSV9TVFJVQ1RfREFUQSAqKTApLT5TdGF0KSkgKyAoKHUzMikodWxvbmcpJigoKFNLX1BO TUlfU1RBVCAqKTApLT5TdGF0VHhNYWNDdHJsQ3RzKSksCiAgICAgICAgICAgICAgICAwLCBNYWNQ cml2YXRlU3RhdCwgU0tfUE5NSV9IVFhfTUFDQ30sCiAgICAgICAgezB4RkYwMjAxMjksCiAgICAg ICAgICAgICAgICAoMiArIDEpLAogICAgICAgICAgICAgICAgc2l6ZW9mKFNLX1BOTUlfU1RBVCks CiAgICAgICAgICAgICAgICAoKHUzMikodWxvbmcpJigoKFNLX1BOTUlfU1RSVUNUX0RBVEEgKikw KS0+U3RhdCkpICsgKCh1MzIpKHVsb25nKSYoKChTS19QTk1JX1NUQVQgKikwKS0+U3RhdFR4U2lu Z2xlQ29sbGlzaW9uQ3RzKSksCiAgICAgICAgICAgICAgICAwLCBNYWNQcml2YXRlU3RhdCwgU0tf UE5NSV9IVFhfU0lOR0xFX0NPTH0sCiAgICAgICAgezB4RkYwMjAxMkEsCiAgICAgICAgICAgICAg ICAoMiArIDEpLAogICAgICAgICAgICAgICAgc2l6ZW9mKFNLX1BOTUlfU1RBVCksCiAgICAgICAg ICAgICAgICAoKHUzMikodWxvbmcpJigoKFNLX1BOTUlfU1RSVUNUX0RBVEEgKikwKS0+U3RhdCkp ICsgKCh1MzIpKHVsb25nKSYoKChTS19QTk1JX1NUQVQgKikwKS0+U3RhdFR4TXVsdGlwbGVDb2xs aXNpb25DdHMpKSwKICAgICAgICAgICAgICAgIDAsIE1hY1ByaXZhdGVTdGF0LCBTS19QTk1JX0hU WF9NVUxUSV9DT0x9LAogICAgICAgIHsweEZGMDIwMTJCLAogICAgICAgICAgICAgICAgKDIgKyAx KSwKICAgICAgICAgICAgICAgIHNpemVvZihTS19QTk1JX1NUQVQpLAogICAgICAgICAgICAgICAg KCh1MzIpKHVsb25nKSYoKChTS19QTk1JX1NUUlVDVF9EQVRBICopMCktPlN0YXQpKSArICgodTMy KSh1bG9uZykmKCgoU0tfUE5NSV9TVEFUICopMCktPlN0YXRUeEV4Y2Vzc2l2ZUNvbGxpc2lvbkN0 cykpLAogICAgICAgICAgICAgICAgMCwgTWFjUHJpdmF0ZVN0YXQsIFNLX1BOTUlfSFRYX0VYQ0VT U19DT0x9LAogICAgICAgIHsweEZGMDIwMTJDLAogICAgICAgICAgICAgICAgKDIgKyAxKSwKICAg ICAgICAgICAgICAgIHNpemVvZihTS19QTk1JX1NUQVQpLAogICAgICAgICAgICAgICAgKCh1MzIp KHVsb25nKSYoKChTS19QTk1JX1NUUlVDVF9EQVRBICopMCktPlN0YXQpKSArICgodTMyKSh1bG9u ZykmKCgoU0tfUE5NSV9TVEFUICopMCktPlN0YXRUeExhdGVDb2xsaXNpb25DdHMpKSwKICAgICAg ICAgICAgICAgIDAsIE1hY1ByaXZhdGVTdGF0LCBTS19QTk1JX0hUWF9MQVRFX0NPTH0sCiAgICAg ICAgezB4RkYwMjAxMkQsCiAgICAgICAgICAgICAgICAoMiArIDEpLAogICAgICAgICAgICAgICAg c2l6ZW9mKFNLX1BOTUlfU1RBVCksCiAgICAgICAgICAgICAgICAoKHUzMikodWxvbmcpJigoKFNL X1BOTUlfU1RSVUNUX0RBVEEgKikwKS0+U3RhdCkpICsgKCh1MzIpKHVsb25nKSYoKChTS19QTk1J X1NUQVQgKikwKS0+U3RhdFR4RGVmZXJyYWxDdHMpKSwKICAgICAgICAgICAgICAgIDAsIE1hY1By aXZhdGVTdGF0LCBTS19QTk1JX0hUWF9ERUZGRVJBTH0sCiAgICAgICAgezB4RkYwMjAxMkUsCiAg ICAgICAgICAgICAgICAoMiArIDEpLAogICAgICAgICAgICAgICAgc2l6ZW9mKFNLX1BOTUlfU1RB VCksCiAgICAgICAgICAgICAgICAoKHUzMikodWxvbmcpJigoKFNLX1BOTUlfU1RSVUNUX0RBVEEg KikwKS0+U3RhdCkpICsgKCh1MzIpKHVsb25nKSYoKChTS19QTk1JX1NUQVQgKikwKS0+U3RhdFR4 RXhjZXNzaXZlRGVmZXJyYWxDdHMpKSwKICAgICAgICAgICAgICAgIDAsIE1hY1ByaXZhdGVTdGF0 LCBTS19QTk1JX0hUWF9FWENFU1NfREVGfSwKICAgICAgICB7MHhGRjAyMDEyRiwKICAgICAgICAg ICAgICAgICgyICsgMSksCiAgICAgICAgICAgICAgICBzaXplb2YoU0tfUE5NSV9TVEFUKSwKICAg ICAgICAgICAgICAgICgodTMyKSh1bG9uZykmKCgoU0tfUE5NSV9TVFJVQ1RfREFUQSAqKTApLT5T dGF0KSkgKyAoKHUzMikodWxvbmcpJigoKFNLX1BOTUlfU1RBVCAqKTApLT5TdGF0VHhGaWZvVW5k ZXJydW5DdHMpKSwKICAgICAgICAgICAgICAgIDAsIE1hY1ByaXZhdGVTdGF0LCBTS19QTk1JX0hU WF9VTkRFUlJVTn0sCiAgICAgICAgezB4RkYwMjAxMzAsCiAgICAgICAgICAgICAgICAoMiArIDEp LAogICAgICAgICAgICAgICAgc2l6ZW9mKFNLX1BOTUlfU1RBVCksCiAgICAgICAgICAgICAgICAo KHUzMikodWxvbmcpJigoKFNLX1BOTUlfU1RSVUNUX0RBVEEgKikwKS0+U3RhdCkpICsgKCh1MzIp KHVsb25nKSYoKChTS19QTk1JX1NUQVQgKikwKS0+U3RhdFR4Q2FycmllckN0cykpLAogICAgICAg ICAgICAgICAgMCwgTWFjUHJpdmF0ZVN0YXQsIFNLX1BOTUlfSFRYX0NBUlJJRVJ9LAoKCgoKCiAg ICAgICAgezB4RkYwMjAxMzIsCiAgICAgICAgICAgICAgICAoMiArIDEpLAogICAgICAgICAgICAg ICAgc2l6ZW9mKFNLX1BOTUlfU1RBVCksCiAgICAgICAgICAgICAgICAoKHUzMikodWxvbmcpJigo KFNLX1BOTUlfU1RSVUNUX0RBVEEgKikwKS0+U3RhdCkpICsgKCh1MzIpKHVsb25nKSYoKChTS19Q Tk1JX1NUQVQgKikwKS0+U3RhdFR4NjRDdHMpKSwKICAgICAgICAgICAgICAgIDAsIE1hY1ByaXZh dGVTdGF0LCBTS19QTk1JX0hUWF82NH0sCiAgICAgICAgezB4RkYwMjAxMzMsCiAgICAgICAgICAg ICAgICAoMiArIDEpLAogICAgICAgICAgICAgICAgc2l6ZW9mKFNLX1BOTUlfU1RBVCksCiAgICAg ICAgICAgICAgICAoKHUzMikodWxvbmcpJigoKFNLX1BOTUlfU1RSVUNUX0RBVEEgKikwKS0+U3Rh dCkpICsgKCh1MzIpKHVsb25nKSYoKChTS19QTk1JX1NUQVQgKikwKS0+U3RhdFR4MTI3Q3RzKSks CiAgICAgICAgICAgICAgICAwLCBNYWNQcml2YXRlU3RhdCwgU0tfUE5NSV9IVFhfMTI3fSwKICAg ICAgICB7MHhGRjAyMDEzNCwKICAgICAgICAgICAgICAgICgyICsgMSksCiAgICAgICAgICAgICAg ICBzaXplb2YoU0tfUE5NSV9TVEFUKSwKICAgICAgICAgICAgICAgICgodTMyKSh1bG9uZykmKCgo U0tfUE5NSV9TVFJVQ1RfREFUQSAqKTApLT5TdGF0KSkgKyAoKHUzMikodWxvbmcpJigoKFNLX1BO TUlfU1RBVCAqKTApLT5TdGF0VHgyNTVDdHMpKSwKICAgICAgICAgICAgICAgIDAsIE1hY1ByaXZh dGVTdGF0LCBTS19QTk1JX0hUWF8yNTV9LAogICAgICAgIHsweEZGMDIwMTM1LAogICAgICAgICAg ICAgICAgKDIgKyAxKSwKICAgICAgICAgICAgICAgIHNpemVvZihTS19QTk1JX1NUQVQpLAogICAg ICAgICAgICAgICAgKCh1MzIpKHVsb25nKSYoKChTS19QTk1JX1NUUlVDVF9EQVRBICopMCktPlN0 YXQpKSArICgodTMyKSh1bG9uZykmKCgoU0tfUE5NSV9TVEFUICopMCktPlN0YXRUeDUxMUN0cykp LAogICAgICAgICAgICAgICAgMCwgTWFjUHJpdmF0ZVN0YXQsIFNLX1BOTUlfSFRYXzUxMX0sCiAg ICAgICAgezB4RkYwMjAxMzYsCiAgICAgICAgICAgICAgICAoMiArIDEpLAogICAgICAgICAgICAg ICAgc2l6ZW9mKFNLX1BOTUlfU1RBVCksCiAgICAgICAgICAgICAgICAoKHUzMikodWxvbmcpJigo KFNLX1BOTUlfU1RSVUNUX0RBVEEgKikwKS0+U3RhdCkpICsgKCh1MzIpKHVsb25nKSYoKChTS19Q Tk1JX1NUQVQgKikwKS0+U3RhdFR4MTAyM0N0cykpLAogICAgICAgICAgICAgICAgMCwgTWFjUHJp dmF0ZVN0YXQsIFNLX1BOTUlfSFRYXzEwMjN9LAogICAgICAgIHsweEZGMDIwMTM3LAogICAgICAg ICAgICAgICAgKDIgKyAxKSwKICAgICAgICAgICAgICAgIHNpemVvZihTS19QTk1JX1NUQVQpLAog ICAgICAgICAgICAgICAgKCh1MzIpKHVsb25nKSYoKChTS19QTk1JX1NUUlVDVF9EQVRBICopMCkt PlN0YXQpKSArICgodTMyKSh1bG9uZykmKCgoU0tfUE5NSV9TVEFUICopMCktPlN0YXRUeE1heEN0 cykpLAogICAgICAgICAgICAgICAgMCwgTWFjUHJpdmF0ZVN0YXQsIFNLX1BOTUlfSFRYX01BWH0s CiAgICAgICAgezB4RkYwMjAxMzgsCiAgICAgICAgICAgICAgICAoMiArIDEpLAogICAgICAgICAg ICAgICAgc2l6ZW9mKFNLX1BOTUlfU1RBVCksCiAgICAgICAgICAgICAgICAoKHUzMikodWxvbmcp JigoKFNLX1BOTUlfU1RSVUNUX0RBVEEgKikwKS0+U3RhdCkpICsgKCh1MzIpKHVsb25nKSYoKChT S19QTk1JX1NUQVQgKikwKS0+U3RhdFR4U3luY0N0cykpLAogICAgICAgICAgICAgICAgMCwgTWFj UHJpdmF0ZVN0YXQsIFNLX1BOTUlfSFRYX1NZTkN9LAogICAgICAgIHsweEZGMDIwMTM5LAogICAg ICAgICAgICAgICAgKDIgKyAxKSwKICAgICAgICAgICAgICAgIHNpemVvZihTS19QTk1JX1NUQVQp LAogICAgICAgICAgICAgICAgKCh1MzIpKHVsb25nKSYoKChTS19QTk1JX1NUUlVDVF9EQVRBICop MCktPlN0YXQpKSArICgodTMyKSh1bG9uZykmKCgoU0tfUE5NSV9TVEFUICopMCktPlN0YXRUeFN5 bmNPY3RldHNDdHMpKSwKICAgICAgICAgICAgICAgIDAsIE1hY1ByaXZhdGVTdGF0LCBTS19QTk1J X0hUWF9TWU5DX09DVEVUfSwKICAgICAgICB7MHhGRjAyMDEzQSwKICAgICAgICAgICAgICAgICgy ICsgMSksCiAgICAgICAgICAgICAgICBzaXplb2YoU0tfUE5NSV9TVEFUKSwKICAgICAgICAgICAg ICAgICgodTMyKSh1bG9uZykmKCgoU0tfUE5NSV9TVFJVQ1RfREFUQSAqKTApLT5TdGF0KSkgKyAo KHUzMikodWxvbmcpJigoKFNLX1BOTUlfU1RBVCAqKTApLT5TdGF0UnhPa0N0cykpLAogICAgICAg ICAgICAgICAgMCwgTWFjUHJpdmF0ZVN0YXQsIFNLX1BOTUlfSFJYfSwKICAgICAgICB7MHhGRjAy MDEzQiwKICAgICAgICAgICAgICAgICgyICsgMSksCiAgICAgICAgICAgICAgICBzaXplb2YoU0tf UE5NSV9TVEFUKSwKICAgICAgICAgICAgICAgICgodTMyKSh1bG9uZykmKCgoU0tfUE5NSV9TVFJV Q1RfREFUQSAqKTApLT5TdGF0KSkgKyAoKHUzMikodWxvbmcpJigoKFNLX1BOTUlfU1RBVCAqKTAp LT5TdGF0UnhPY3RldHNPa0N0cykpLAogICAgICAgICAgICAgICAgMCwgTWFjUHJpdmF0ZVN0YXQs IFNLX1BOTUlfSFJYX09DVEVUfSwKICAgICAgICB7MHhGRjAyMDEzQywKICAgICAgICAgICAgICAg ICgyICsgMSksCiAgICAgICAgICAgICAgICBzaXplb2YoU0tfUE5NSV9TVEFUKSwKICAgICAgICAg ICAgICAgICgodTMyKSh1bG9uZykmKCgoU0tfUE5NSV9TVFJVQ1RfREFUQSAqKTApLT5TdGF0KSkg KyAoKHUzMikodWxvbmcpJigoKFNLX1BOTUlfU1RBVCAqKTApLT5TdGF0UnhCcm9hZGNhc3RPa0N0 cykpLAogICAgICAgICAgICAgICAgMCwgTWFjUHJpdmF0ZVN0YXQsIFNLX1BOTUlfSFJYX0JST0FE Q0FTVH0sCiAgICAgICAgezB4RkYwMjAxM0QsCiAgICAgICAgICAgICAgICAoMiArIDEpLAogICAg ICAgICAgICAgICAgc2l6ZW9mKFNLX1BOTUlfU1RBVCksCiAgICAgICAgICAgICAgICAoKHUzMiko dWxvbmcpJigoKFNLX1BOTUlfU1RSVUNUX0RBVEEgKikwKS0+U3RhdCkpICsgKCh1MzIpKHVsb25n KSYoKChTS19QTk1JX1NUQVQgKikwKS0+U3RhdFJ4TXVsdGljYXN0T2tDdHMpKSwKICAgICAgICAg ICAgICAgIDAsIE1hY1ByaXZhdGVTdGF0LCBTS19QTk1JX0hSWF9NVUxUSUNBU1R9LAogICAgICAg IHsweEZGMDIwMTNFLAogICAgICAgICAgICAgICAgKDIgKyAxKSwKICAgICAgICAgICAgICAgIHNp emVvZihTS19QTk1JX1NUQVQpLAogICAgICAgICAgICAgICAgKCh1MzIpKHVsb25nKSYoKChTS19Q Tk1JX1NUUlVDVF9EQVRBICopMCktPlN0YXQpKSArICgodTMyKSh1bG9uZykmKCgoU0tfUE5NSV9T VEFUICopMCktPlN0YXRSeFVuaWNhc3RPa0N0cykpLAogICAgICAgICAgICAgICAgMCwgTWFjUHJp dmF0ZVN0YXQsIFNLX1BOTUlfSFJYX1VOSUNBU1R9LAogICAgICAgIHsweEZGMDIwMTU3LAogICAg ICAgICAgICAgICAgKDIgKyAxKSwKICAgICAgICAgICAgICAgIHNpemVvZihTS19QTk1JX1NUQVQp LAogICAgICAgICAgICAgICAgKCh1MzIpKHVsb25nKSYoKChTS19QTk1JX1NUUlVDVF9EQVRBICop MCktPlN0YXQpKSArICgodTMyKSh1bG9uZykmKCgoU0tfUE5NSV9TVEFUICopMCktPlN0YXRSeExv bmdGcmFtZXNDdHMpKSwKICAgICAgICAgICAgICAgIDAsIE1hY1ByaXZhdGVTdGF0LCBTS19QTk1J X0hSWF9MT05HRlJBTUVTfSwKICAgICAgICB7MHhGRjAyMDEzRiwKICAgICAgICAgICAgICAgICgy ICsgMSksCiAgICAgICAgICAgICAgICBzaXplb2YoU0tfUE5NSV9TVEFUKSwKICAgICAgICAgICAg ICAgICgodTMyKSh1bG9uZykmKCgoU0tfUE5NSV9TVFJVQ1RfREFUQSAqKTApLT5TdGF0KSkgKyAo KHUzMikodWxvbmcpJigoKFNLX1BOTUlfU1RBVCAqKTApLT5TdGF0UnhQYXVzZU1hY0N0cmxDdHMp KSwKICAgICAgICAgICAgICAgIDAsIE1hY1ByaXZhdGVTdGF0LCBTS19QTk1JX0hSWF9QTUFDQ30s CiAgICAgICAgezB4RkYwMjAxNDAsCiAgICAgICAgICAgICAgICAoMiArIDEpLAogICAgICAgICAg ICAgICAgc2l6ZW9mKFNLX1BOTUlfU1RBVCksCiAgICAgICAgICAgICAgICAoKHUzMikodWxvbmcp JigoKFNLX1BOTUlfU1RSVUNUX0RBVEEgKikwKS0+U3RhdCkpICsgKCh1MzIpKHVsb25nKSYoKChT S19QTk1JX1NUQVQgKikwKS0+U3RhdFJ4TWFjQ3RybEN0cykpLAogICAgICAgICAgICAgICAgMCwg TWFjUHJpdmF0ZVN0YXQsIFNLX1BOTUlfSFJYX01BQ0N9LAogICAgICAgIHsweEZGMDIwMTQxLAog ICAgICAgICAgICAgICAgKDIgKyAxKSwKICAgICAgICAgICAgICAgIHNpemVvZihTS19QTk1JX1NU QVQpLAogICAgICAgICAgICAgICAgKCh1MzIpKHVsb25nKSYoKChTS19QTk1JX1NUUlVDVF9EQVRB ICopMCktPlN0YXQpKSArICgodTMyKSh1bG9uZykmKCgoU0tfUE5NSV9TVEFUICopMCktPlN0YXRS eFBhdXNlTWFjQ3RybEVycm9yQ3RzKSksCiAgICAgICAgICAgICAgICAwLCBNYWNQcml2YXRlU3Rh dCwgU0tfUE5NSV9IUlhfUE1BQ0NfRVJSfSwKICAgICAgICB7MHhGRjAyMDE0MiwKICAgICAgICAg ICAgICAgICgyICsgMSksCiAgICAgICAgICAgICAgICBzaXplb2YoU0tfUE5NSV9TVEFUKSwKICAg ICAgICAgICAgICAgICgodTMyKSh1bG9uZykmKCgoU0tfUE5NSV9TVFJVQ1RfREFUQSAqKTApLT5T dGF0KSkgKyAoKHUzMikodWxvbmcpJigoKFNLX1BOTUlfU1RBVCAqKTApLT5TdGF0UnhNYWNDdHJs VW5rbm93bkN0cykpLAogICAgICAgICAgICAgICAgMCwgTWFjUHJpdmF0ZVN0YXQsIFNLX1BOTUlf SFJYX01BQ0NfVU5LV059LAogICAgICAgIHsweEZGMDIwMTQzLAogICAgICAgICAgICAgICAgKDIg KyAxKSwKICAgICAgICAgICAgICAgIHNpemVvZihTS19QTk1JX1NUQVQpLAogICAgICAgICAgICAg ICAgKCh1MzIpKHVsb25nKSYoKChTS19QTk1JX1NUUlVDVF9EQVRBICopMCktPlN0YXQpKSArICgo dTMyKSh1bG9uZykmKCgoU0tfUE5NSV9TVEFUICopMCktPlN0YXRSeEJ1cnN0Q3RzKSksCiAgICAg ICAgICAgICAgICAwLCBNYWNQcml2YXRlU3RhdCwgU0tfUE5NSV9IUlhfQlVSU1R9LAogICAgICAg IHsweEZGMDIwMTQ0LAogICAgICAgICAgICAgICAgKDIgKyAxKSwKICAgICAgICAgICAgICAgIHNp emVvZihTS19QTk1JX1NUQVQpLAogICAgICAgICAgICAgICAgKCh1MzIpKHVsb25nKSYoKChTS19Q Tk1JX1NUUlVDVF9EQVRBICopMCktPlN0YXQpKSArICgodTMyKSh1bG9uZykmKCgoU0tfUE5NSV9T VEFUICopMCktPlN0YXRSeE1pc3NlZEN0cykpLAogICAgICAgICAgICAgICAgMCwgTWFjUHJpdmF0 ZVN0YXQsIFNLX1BOTUlfSFJYX01JU1NFRH0sCiAgICAgICAgezB4RkYwMjAxNDUsCiAgICAgICAg ICAgICAgICAoMiArIDEpLAogICAgICAgICAgICAgICAgc2l6ZW9mKFNLX1BOTUlfU1RBVCksCiAg ICAgICAgICAgICAgICAoKHUzMikodWxvbmcpJigoKFNLX1BOTUlfU1RSVUNUX0RBVEEgKikwKS0+ U3RhdCkpICsgKCh1MzIpKHVsb25nKSYoKChTS19QTk1JX1NUQVQgKikwKS0+U3RhdFJ4RnJhbWlu Z0N0cykpLAogICAgICAgICAgICAgICAgMCwgTWFjUHJpdmF0ZVN0YXQsIFNLX1BOTUlfSFJYX0ZS QU1JTkd9LAogICAgICAgIHsweEZGMDIwMTQ2LAogICAgICAgICAgICAgICAgKDIgKyAxKSwKICAg ICAgICAgICAgICAgIHNpemVvZihTS19QTk1JX1NUQVQpLAogICAgICAgICAgICAgICAgKCh1MzIp KHVsb25nKSYoKChTS19QTk1JX1NUUlVDVF9EQVRBICopMCktPlN0YXQpKSArICgodTMyKSh1bG9u ZykmKCgoU0tfUE5NSV9TVEFUICopMCktPlN0YXRSeEZpZm9PdmVyZmxvd0N0cykpLAogICAgICAg ICAgICAgICAgMCwgTWFjUHJpdmF0ZVN0YXQsIFNLX1BOTUlfSFJYX09WRVJGTE9XfSwKICAgICAg ICB7MHhGRjAyMDE0NywKICAgICAgICAgICAgICAgICgyICsgMSksCiAgICAgICAgICAgICAgICBz aXplb2YoU0tfUE5NSV9TVEFUKSwKICAgICAgICAgICAgICAgICgodTMyKSh1bG9uZykmKCgoU0tf UE5NSV9TVFJVQ1RfREFUQSAqKTApLT5TdGF0KSkgKyAoKHUzMikodWxvbmcpJigoKFNLX1BOTUlf U1RBVCAqKTApLT5TdGF0UnhKYWJiZXJDdHMpKSwKICAgICAgICAgICAgICAgIDAsIE1hY1ByaXZh dGVTdGF0LCBTS19QTk1JX0hSWF9KQUJCRVJ9LAogICAgICAgIHsweEZGMDIwMTQ4LAogICAgICAg ICAgICAgICAgKDIgKyAxKSwKICAgICAgICAgICAgICAgIHNpemVvZihTS19QTk1JX1NUQVQpLAog ICAgICAgICAgICAgICAgKCh1MzIpKHVsb25nKSYoKChTS19QTk1JX1NUUlVDVF9EQVRBICopMCkt PlN0YXQpKSArICgodTMyKSh1bG9uZykmKCgoU0tfUE5NSV9TVEFUICopMCktPlN0YXRSeENhcnJp ZXJDdHMpKSwKICAgICAgICAgICAgICAgIDAsIE1hY1ByaXZhdGVTdGF0LCBTS19QTk1JX0hSWF9D QVJSSUVSfSwKICAgICAgICB7MHhGRjAyMDE0OSwKICAgICAgICAgICAgICAgICgyICsgMSksCiAg ICAgICAgICAgICAgICBzaXplb2YoU0tfUE5NSV9TVEFUKSwKICAgICAgICAgICAgICAgICgodTMy KSh1bG9uZykmKCgoU0tfUE5NSV9TVFJVQ1RfREFUQSAqKTApLT5TdGF0KSkgKyAoKHUzMikodWxv bmcpJigoKFNLX1BOTUlfU1RBVCAqKTApLT5TdGF0UnhJUkxlbmd0aEN0cykpLAogICAgICAgICAg ICAgICAgMCwgTWFjUHJpdmF0ZVN0YXQsIFNLX1BOTUlfSFJYX0lSTEVOR1RIfSwKICAgICAgICB7 MHhGRjAyMDE0QSwKICAgICAgICAgICAgICAgICgyICsgMSksCiAgICAgICAgICAgICAgICBzaXpl b2YoU0tfUE5NSV9TVEFUKSwKICAgICAgICAgICAgICAgICgodTMyKSh1bG9uZykmKCgoU0tfUE5N SV9TVFJVQ1RfREFUQSAqKTApLT5TdGF0KSkgKyAoKHUzMikodWxvbmcpJigoKFNLX1BOTUlfU1RB VCAqKTApLT5TdGF0UnhTeW1ib2xDdHMpKSwKICAgICAgICAgICAgICAgIDAsIE1hY1ByaXZhdGVT dGF0LCBTS19QTk1JX0hSWF9TWU1CT0x9LAogICAgICAgIHsweEZGMDIwMTRCLAogICAgICAgICAg ICAgICAgKDIgKyAxKSwKICAgICAgICAgICAgICAgIHNpemVvZihTS19QTk1JX1NUQVQpLAogICAg ICAgICAgICAgICAgKCh1MzIpKHVsb25nKSYoKChTS19QTk1JX1NUUlVDVF9EQVRBICopMCktPlN0 YXQpKSArICgodTMyKSh1bG9uZykmKCgoU0tfUE5NSV9TVEFUICopMCktPlN0YXRSeFNob3J0c0N0 cykpLAogICAgICAgICAgICAgICAgMCwgTWFjUHJpdmF0ZVN0YXQsIFNLX1BOTUlfSFJYX1NIT1JU U30sCiAgICAgICAgezB4RkYwMjAxNEMsCiAgICAgICAgICAgICAgICAoMiArIDEpLAogICAgICAg ICAgICAgICAgc2l6ZW9mKFNLX1BOTUlfU1RBVCksCiAgICAgICAgICAgICAgICAoKHUzMikodWxv bmcpJigoKFNLX1BOTUlfU1RSVUNUX0RBVEEgKikwKS0+U3RhdCkpICsgKCh1MzIpKHVsb25nKSYo KChTS19QTk1JX1NUQVQgKikwKS0+U3RhdFJ4UnVudEN0cykpLAogICAgICAgICAgICAgICAgMCwg TWFjUHJpdmF0ZVN0YXQsIFNLX1BOTUlfSFJYX1JVTlR9LAogICAgICAgIHsweEZGMDIwMTRELAog ICAgICAgICAgICAgICAgKDIgKyAxKSwKICAgICAgICAgICAgICAgIHNpemVvZihTS19QTk1JX1NU QVQpLAogICAgICAgICAgICAgICAgKCh1MzIpKHVsb25nKSYoKChTS19QTk1JX1NUUlVDVF9EQVRB ICopMCktPlN0YXQpKSArICgodTMyKSh1bG9uZykmKCgoU0tfUE5NSV9TVEFUICopMCktPlN0YXRS eENleHRDdHMpKSwKICAgICAgICAgICAgICAgIDAsIE1hY1ByaXZhdGVTdGF0LCBTS19QTk1JX0hS WF9DRVhUfSwKICAgICAgICB7MHhGRjAyMDE0RSwKICAgICAgICAgICAgICAgICgyICsgMSksCiAg ICAgICAgICAgICAgICBzaXplb2YoU0tfUE5NSV9TVEFUKSwKICAgICAgICAgICAgICAgICgodTMy KSh1bG9uZykmKCgoU0tfUE5NSV9TVFJVQ1RfREFUQSAqKTApLT5TdGF0KSkgKyAoKHUzMikodWxv bmcpJigoKFNLX1BOTUlfU1RBVCAqKTApLT5TdGF0UnhUb29Mb25nQ3RzKSksCiAgICAgICAgICAg ICAgICAwLCBNYWNQcml2YXRlU3RhdCwgU0tfUE5NSV9IUlhfVE9PX0xPTkd9LAogICAgICAgIHsw eEZGMDIwMTRGLAogICAgICAgICAgICAgICAgKDIgKyAxKSwKICAgICAgICAgICAgICAgIHNpemVv ZihTS19QTk1JX1NUQVQpLAogICAgICAgICAgICAgICAgKCh1MzIpKHVsb25nKSYoKChTS19QTk1J X1NUUlVDVF9EQVRBICopMCktPlN0YXQpKSArICgodTMyKSh1bG9uZykmKCgoU0tfUE5NSV9TVEFU ICopMCktPlN0YXRSeEZjc0N0cykpLAogICAgICAgICAgICAgICAgMCwgTWFjUHJpdmF0ZVN0YXQs IFNLX1BOTUlfSFJYX0ZDU30sCgoKCgoKICAgICAgICB7MHhGRjAyMDE1MSwKICAgICAgICAgICAg ICAgICgyICsgMSksCiAgICAgICAgICAgICAgICBzaXplb2YoU0tfUE5NSV9TVEFUKSwKICAgICAg ICAgICAgICAgICgodTMyKSh1bG9uZykmKCgoU0tfUE5NSV9TVFJVQ1RfREFUQSAqKTApLT5TdGF0 KSkgKyAoKHUzMikodWxvbmcpJigoKFNLX1BOTUlfU1RBVCAqKTApLT5TdGF0Ung2NEN0cykpLAog ICAgICAgICAgICAgICAgMCwgTWFjUHJpdmF0ZVN0YXQsIFNLX1BOTUlfSFJYXzY0fSwKICAgICAg ICB7MHhGRjAyMDE1MiwKICAgICAgICAgICAgICAgICgyICsgMSksCiAgICAgICAgICAgICAgICBz aXplb2YoU0tfUE5NSV9TVEFUKSwKICAgICAgICAgICAgICAgICgodTMyKSh1bG9uZykmKCgoU0tf UE5NSV9TVFJVQ1RfREFUQSAqKTApLT5TdGF0KSkgKyAoKHUzMikodWxvbmcpJigoKFNLX1BOTUlf U1RBVCAqKTApLT5TdGF0UngxMjdDdHMpKSwKICAgICAgICAgICAgICAgIDAsIE1hY1ByaXZhdGVT dGF0LCBTS19QTk1JX0hSWF8xMjd9LAogICAgICAgIHsweEZGMDIwMTUzLAogICAgICAgICAgICAg ICAgKDIgKyAxKSwKICAgICAgICAgICAgICAgIHNpemVvZihTS19QTk1JX1NUQVQpLAogICAgICAg ICAgICAgICAgKCh1MzIpKHVsb25nKSYoKChTS19QTk1JX1NUUlVDVF9EQVRBICopMCktPlN0YXQp KSArICgodTMyKSh1bG9uZykmKCgoU0tfUE5NSV9TVEFUICopMCktPlN0YXRSeDI1NUN0cykpLAog ICAgICAgICAgICAgICAgMCwgTWFjUHJpdmF0ZVN0YXQsIFNLX1BOTUlfSFJYXzI1NX0sCiAgICAg ICAgezB4RkYwMjAxNTQsCiAgICAgICAgICAgICAgICAoMiArIDEpLAogICAgICAgICAgICAgICAg c2l6ZW9mKFNLX1BOTUlfU1RBVCksCiAgICAgICAgICAgICAgICAoKHUzMikodWxvbmcpJigoKFNL X1BOTUlfU1RSVUNUX0RBVEEgKikwKS0+U3RhdCkpICsgKCh1MzIpKHVsb25nKSYoKChTS19QTk1J X1NUQVQgKikwKS0+U3RhdFJ4NTExQ3RzKSksCiAgICAgICAgICAgICAgICAwLCBNYWNQcml2YXRl U3RhdCwgU0tfUE5NSV9IUlhfNTExfSwKICAgICAgICB7MHhGRjAyMDE1NSwKICAgICAgICAgICAg ICAgICgyICsgMSksCiAgICAgICAgICAgICAgICBzaXplb2YoU0tfUE5NSV9TVEFUKSwKICAgICAg ICAgICAgICAgICgodTMyKSh1bG9uZykmKCgoU0tfUE5NSV9TVFJVQ1RfREFUQSAqKTApLT5TdGF0 KSkgKyAoKHUzMikodWxvbmcpJigoKFNLX1BOTUlfU1RBVCAqKTApLT5TdGF0UngxMDIzQ3RzKSks CiAgICAgICAgICAgICAgICAwLCBNYWNQcml2YXRlU3RhdCwgU0tfUE5NSV9IUlhfMTAyM30sCiAg ICAgICAgezB4RkYwMjAxNTYsCiAgICAgICAgICAgICAgICAoMiArIDEpLAogICAgICAgICAgICAg ICAgc2l6ZW9mKFNLX1BOTUlfU1RBVCksCiAgICAgICAgICAgICAgICAoKHUzMikodWxvbmcpJigo KFNLX1BOTUlfU1RSVUNUX0RBVEEgKikwKS0+U3RhdCkpICsgKCh1MzIpKHVsb25nKSYoKChTS19Q Tk1JX1NUQVQgKikwKS0+U3RhdFJ4TWF4Q3RzKSksCiAgICAgICAgICAgICAgICAwLCBNYWNQcml2 YXRlU3RhdCwgU0tfUE5NSV9IUlhfTUFYfSwKICAgICAgICB7MHhGRjAxMDEyMCwKICAgICAgICAg ICAgICAgICgyICsgMSksCiAgICAgICAgICAgICAgICBzaXplb2YoU0tfUE5NSV9DT05GKSwKICAg ICAgICAgICAgICAgICgodTMyKSh1bG9uZykmKCgoU0tfUE5NSV9TVFJVQ1RfREFUQSAqKTApLT5D b25mKSkgKyAoKHUzMikodWxvbmcpJigoKFNLX1BOTUlfQ09ORiAqKTApLT5Db25mTWFjQ3VycmVu dEFkZHIpKSwKICAgICAgICAgICAgICAgIDEsIEFkZHIsIDB9LAogICAgICAgIHsweEZGMDEwMTIx LAogICAgICAgICAgICAgICAgKDIgKyAxKSwKICAgICAgICAgICAgICAgIHNpemVvZihTS19QTk1J X0NPTkYpLAogICAgICAgICAgICAgICAgKCh1MzIpKHVsb25nKSYoKChTS19QTk1JX1NUUlVDVF9E QVRBICopMCktPkNvbmYpKSArICgodTMyKSh1bG9uZykmKCgoU0tfUE5NSV9DT05GICopMCktPkNv bmZNYWNGYWN0b3J5QWRkcikpLAogICAgICAgICAgICAgICAgMCwgQWRkciwgMH0sCiAgICAgICAg ezB4RkYwMTAxMjIsCiAgICAgICAgICAgICAgICAoMiArIDEpLAogICAgICAgICAgICAgICAgc2l6 ZW9mKFNLX1BOTUlfQ09ORiksCiAgICAgICAgICAgICAgICAoKHUzMikodWxvbmcpJigoKFNLX1BO TUlfU1RSVUNUX0RBVEEgKikwKS0+Q29uZikpICsgKCh1MzIpKHVsb25nKSYoKChTS19QTk1JX0NP TkYgKikwKS0+Q29uZlBNRCkpLAogICAgICAgICAgICAgICAgMCwgTWFjUHJpdmF0ZUNvbmYsIDB9 LAogICAgICAgIHsweEZGMDEwMTIzLAogICAgICAgICAgICAgICAgKDIgKyAxKSwKICAgICAgICAg ICAgICAgIHNpemVvZihTS19QTk1JX0NPTkYpLAogICAgICAgICAgICAgICAgKCh1MzIpKHVsb25n KSYoKChTS19QTk1JX1NUUlVDVF9EQVRBICopMCktPkNvbmYpKSArICgodTMyKSh1bG9uZykmKCgo U0tfUE5NSV9DT05GICopMCktPkNvbmZDb25uZWN0b3IpKSwKICAgICAgICAgICAgICAgIDAsIE1h Y1ByaXZhdGVDb25mLCAwfSwKICAgICAgICB7MHhGRjAxMDEyNCwKICAgICAgICAgICAgICAgICgy ICsgMSksCiAgICAgICAgICAgICAgICBzaXplb2YoU0tfUE5NSV9DT05GKSwKICAgICAgICAgICAg ICAgICgodTMyKSh1bG9uZykmKCgoU0tfUE5NSV9TVFJVQ1RfREFUQSAqKTApLT5Db25mKSkgKyAo KHUzMikodWxvbmcpJigoKFNLX1BOTUlfQ09ORiAqKTApLT5Db25mTGlua0NhcGFiaWxpdHkpKSwK ICAgICAgICAgICAgICAgIDAsIE1hY1ByaXZhdGVDb25mLCAwfSwKICAgICAgICB7MHhGRjAxMDEy NSwKICAgICAgICAgICAgICAgICgyICsgMSksCiAgICAgICAgICAgICAgICBzaXplb2YoU0tfUE5N SV9DT05GKSwKICAgICAgICAgICAgICAgICgodTMyKSh1bG9uZykmKCgoU0tfUE5NSV9TVFJVQ1Rf REFUQSAqKTApLT5Db25mKSkgKyAoKHUzMikodWxvbmcpJigoKFNLX1BOTUlfQ09ORiAqKTApLT5D b25mTGlua01vZGUpKSwKICAgICAgICAgICAgICAgIDEsIE1hY1ByaXZhdGVDb25mLCAwfSwKICAg ICAgICB7MHhGRjAxMDEyNiwKICAgICAgICAgICAgICAgICgyICsgMSksCiAgICAgICAgICAgICAg ICBzaXplb2YoU0tfUE5NSV9DT05GKSwKICAgICAgICAgICAgICAgICgodTMyKSh1bG9uZykmKCgo U0tfUE5NSV9TVFJVQ1RfREFUQSAqKTApLT5Db25mKSkgKyAoKHUzMikodWxvbmcpJigoKFNLX1BO TUlfQ09ORiAqKTApLT5Db25mTGlua01vZGVTdGF0dXMpKSwKICAgICAgICAgICAgICAgIDAsIE1h Y1ByaXZhdGVDb25mLCAwfSwKICAgICAgICB7MHhGRjAxMDEyNywKICAgICAgICAgICAgICAgICgy ICsgMSksCiAgICAgICAgICAgICAgICBzaXplb2YoU0tfUE5NSV9DT05GKSwKICAgICAgICAgICAg ICAgICgodTMyKSh1bG9uZykmKCgoU0tfUE5NSV9TVFJVQ1RfREFUQSAqKTApLT5Db25mKSkgKyAo KHUzMikodWxvbmcpJigoKFNLX1BOTUlfQ09ORiAqKTApLT5Db25mTGlua1N0YXR1cykpLAogICAg ICAgICAgICAgICAgMCwgTWFjUHJpdmF0ZUNvbmYsIDB9LAogICAgICAgIHsweEZGMDEwMTI4LAog ICAgICAgICAgICAgICAgKDIgKyAxKSwKICAgICAgICAgICAgICAgIHNpemVvZihTS19QTk1JX0NP TkYpLAogICAgICAgICAgICAgICAgKCh1MzIpKHVsb25nKSYoKChTS19QTk1JX1NUUlVDVF9EQVRB ICopMCktPkNvbmYpKSArICgodTMyKSh1bG9uZykmKCgoU0tfUE5NSV9DT05GICopMCktPkNvbmZG bG93Q3RybENhcGFiaWxpdHkpKSwKICAgICAgICAgICAgICAgIDAsIE1hY1ByaXZhdGVDb25mLCAw fSwKICAgICAgICB7MHhGRjAxMDEyOSwKICAgICAgICAgICAgICAgICgyICsgMSksCiAgICAgICAg ICAgICAgICBzaXplb2YoU0tfUE5NSV9DT05GKSwKICAgICAgICAgICAgICAgICgodTMyKSh1bG9u ZykmKCgoU0tfUE5NSV9TVFJVQ1RfREFUQSAqKTApLT5Db25mKSkgKyAoKHUzMikodWxvbmcpJigo KFNLX1BOTUlfQ09ORiAqKTApLT5Db25mRmxvd0N0cmxNb2RlKSksCiAgICAgICAgICAgICAgICAx LCBNYWNQcml2YXRlQ29uZiwgMH0sCiAgICAgICAgezB4RkYwMTAxMkEsCiAgICAgICAgICAgICAg ICAoMiArIDEpLAogICAgICAgICAgICAgICAgc2l6ZW9mKFNLX1BOTUlfQ09ORiksCiAgICAgICAg ICAgICAgICAoKHUzMikodWxvbmcpJigoKFNLX1BOTUlfU1RSVUNUX0RBVEEgKikwKS0+Q29uZikp ICsgKCh1MzIpKHVsb25nKSYoKChTS19QTk1JX0NPTkYgKikwKS0+Q29uZkZsb3dDdHJsU3RhdHVz KSksCiAgICAgICAgICAgICAgICAwLCBNYWNQcml2YXRlQ29uZiwgMH0sCiAgICAgICAgezB4RkYw MTAxMkIsCiAgICAgICAgICAgICAgICAoMiArIDEpLAogICAgICAgICAgICAgICAgc2l6ZW9mKFNL X1BOTUlfQ09ORiksCiAgICAgICAgICAgICAgICAoKHUzMikodWxvbmcpJigoKFNLX1BOTUlfU1RS VUNUX0RBVEEgKikwKS0+Q29uZikpICsgKCh1MzIpKHVsb25nKSYoKChTS19QTk1JX0NPTkYgKikw KS0+Q29uZlBoeU9wZXJhdGlvbkNhcGFiaWxpdHkpKSwKICAgICAgICAgICAgICAgIDAsIE1hY1By aXZhdGVDb25mLCAwfSwKICAgICAgICB7MHhGRjAxMDEyQywKICAgICAgICAgICAgICAgICgyICsg MSksCiAgICAgICAgICAgICAgICBzaXplb2YoU0tfUE5NSV9DT05GKSwKICAgICAgICAgICAgICAg ICgodTMyKSh1bG9uZykmKCgoU0tfUE5NSV9TVFJVQ1RfREFUQSAqKTApLT5Db25mKSkgKyAoKHUz MikodWxvbmcpJigoKFNLX1BOTUlfQ09ORiAqKTApLT5Db25mUGh5T3BlcmF0aW9uTW9kZSkpLAog ICAgICAgICAgICAgICAgMSwgTWFjUHJpdmF0ZUNvbmYsIDB9LAogICAgICAgIHsweEZGMDEwMTJE LAogICAgICAgICAgICAgICAgKDIgKyAxKSwKICAgICAgICAgICAgICAgIHNpemVvZihTS19QTk1J X0NPTkYpLAogICAgICAgICAgICAgICAgKCh1MzIpKHVsb25nKSYoKChTS19QTk1JX1NUUlVDVF9E QVRBICopMCktPkNvbmYpKSArICgodTMyKSh1bG9uZykmKCgoU0tfUE5NSV9DT05GICopMCktPkNv bmZQaHlPcGVyYXRpb25TdGF0dXMpKSwKICAgICAgICAgICAgICAgIDAsIE1hY1ByaXZhdGVDb25m LCAwfSwKICAgICAgICB7MHhGRjAxMDE3MCwKICAgICAgICAgICAgICAgICgyICsgMSksCiAgICAg ICAgICAgICAgICBzaXplb2YoU0tfUE5NSV9DT05GKSwKICAgICAgICAgICAgICAgICgodTMyKSh1 bG9uZykmKCgoU0tfUE5NSV9TVFJVQ1RfREFUQSAqKTApLT5Db25mKSkgKyAoKHUzMikodWxvbmcp JigoKFNLX1BOTUlfQ09ORiAqKTApLT5Db25mU3BlZWRDYXBhYmlsaXR5KSksCiAgICAgICAgICAg ICAgICAwLCBNYWNQcml2YXRlQ29uZiwgMH0sCiAgICAgICAgezB4RkYwMTAxNzEsCiAgICAgICAg ICAgICAgICAoMiArIDEpLAogICAgICAgICAgICAgICAgc2l6ZW9mKFNLX1BOTUlfQ09ORiksCiAg ICAgICAgICAgICAgICAoKHUzMikodWxvbmcpJigoKFNLX1BOTUlfU1RSVUNUX0RBVEEgKikwKS0+ Q29uZikpICsgKCh1MzIpKHVsb25nKSYoKChTS19QTk1JX0NPTkYgKikwKS0+Q29uZlNwZWVkTW9k ZSkpLAogICAgICAgICAgICAgICAgMSwgTWFjUHJpdmF0ZUNvbmYsIDB9LAogICAgICAgIHsweEZG MDEwMTcyLAogICAgICAgICAgICAgICAgKDIgKyAxKSwKICAgICAgICAgICAgICAgIHNpemVvZihT S19QTk1JX0NPTkYpLAogICAgICAgICAgICAgICAgKCh1MzIpKHVsb25nKSYoKChTS19QTk1JX1NU UlVDVF9EQVRBICopMCktPkNvbmYpKSArICgodTMyKSh1bG9uZykmKCgoU0tfUE5NSV9DT05GICop MCktPkNvbmZTcGVlZFN0YXR1cykpLAogICAgICAgICAgICAgICAgMCwgTWFjUHJpdmF0ZUNvbmYs IDB9LAogICAgICAgIHsweEZGMDEwMTMwLAogICAgICAgICAgICAgICAgMSwKICAgICAgICAgICAg ICAgIDAsCiAgICAgICAgICAgICAgICAoKHUzMikodWxvbmcpJigoKFNLX1BOTUlfU1RSVUNUX0RB VEEgKikwKS0+VHJhcCkpLAogICAgICAgICAgICAgICAgMCwgR2VuZXJhbCwgMH0sCiAgICAgICAg ezB4RkYwMTAxMzEsCiAgICAgICAgICAgICAgICAxLAogICAgICAgICAgICAgICAgMCwKICAgICAg ICAgICAgICAgICgodTMyKSh1bG9uZykmKCgoU0tfUE5NSV9TVFJVQ1RfREFUQSAqKTApLT5UcmFw TnVtYmVyKSksCiAgICAgICAgICAgICAgICAwLCBHZW5lcmFsLCAwfSwKICAgICAgICB7MHhGRjAx MDE0MCwKICAgICAgICAgICAgICAgIDEsCiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAg ICAgKCh1MzIpKHVsb25nKSYoKChTS19QTk1JX1NUUlVDVF9EQVRBICopMCktPlJsbXRNb2RlKSks CiAgICAgICAgICAgICAgICAxLCBSbG10LCAwfSwKICAgICAgICB7MHhGRjAxMDE0MSwKICAgICAg ICAgICAgICAgIDEsCiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgKCh1MzIpKHVs b25nKSYoKChTS19QTk1JX1NUUlVDVF9EQVRBICopMCktPlJsbXRQb3J0TnVtYmVyKSksCiAgICAg ICAgICAgICAgICAwLCBSbG10LCAwfSwKICAgICAgICB7MHhGRjAxMDE0MiwKICAgICAgICAgICAg ICAgIDEsCiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgKCh1MzIpKHVsb25nKSYo KChTS19QTk1JX1NUUlVDVF9EQVRBICopMCktPlJsbXRQb3J0QWN0aXZlKSksCiAgICAgICAgICAg ICAgICAwLCBSbG10LCAwfSwKICAgICAgICB7MHhGRjAxMDE0MywKICAgICAgICAgICAgICAgIDEs CiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgKCh1MzIpKHVsb25nKSYoKChTS19Q Tk1JX1NUUlVDVF9EQVRBICopMCktPlJsbXRQb3J0UHJlZmVycmVkKSksCiAgICAgICAgICAgICAg ICAxLCBSbG10LCAwfSwKICAgICAgICB7MHhGRjAyMDE2MCwKICAgICAgICAgICAgICAgIDEsCiAg ICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgKCh1MzIpKHVsb25nKSYoKChTS19QTk1J X1NUUlVDVF9EQVRBICopMCktPlJsbXRDaGFuZ2VDdHMpKSwKICAgICAgICAgICAgICAgIDAsIFJs bXQsIDB9LAogICAgICAgIHsweEZGMDIwMTYxLAogICAgICAgICAgICAgICAgMSwKICAgICAgICAg ICAgICAgIDAsCiAgICAgICAgICAgICAgICAoKHUzMikodWxvbmcpJigoKFNLX1BOTUlfU1RSVUNU X0RBVEEgKikwKS0+UmxtdENoYW5nZVRpbWUpKSwKICAgICAgICAgICAgICAgIDAsIFJsbXQsIDB9 LAogICAgICAgIHsweEZGMDIwMTYyLAogICAgICAgICAgICAgICAgMSwKICAgICAgICAgICAgICAg IDAsCiAgICAgICAgICAgICAgICAoKHUzMikodWxvbmcpJigoKFNLX1BOTUlfU1RSVUNUX0RBVEEg KikwKS0+UmxtdENoYW5nZUVzdGltYXRlKSksCiAgICAgICAgICAgICAgICAwLCBSbG10LCAwfSwK ICAgICAgICB7MHhGRjAyMDE2MywKICAgICAgICAgICAgICAgIDEsCiAgICAgICAgICAgICAgICAw LAogICAgICAgICAgICAgICAgKCh1MzIpKHVsb25nKSYoKChTS19QTk1JX1NUUlVDVF9EQVRBICop MCktPlJsbXRDaGFuZ2VUaHJlc2hvbGQpKSwKICAgICAgICAgICAgICAgIDEsIFJsbXQsIDB9LAog ICAgICAgIHsweEZGMDIwMTY0LAogICAgICAgICAgICAgICAgKDIgKyAxKSwKICAgICAgICAgICAg ICAgIHNpemVvZihTS19QTk1JX1JMTVQpLAogICAgICAgICAgICAgICAgKCh1MzIpKHVsb25nKSYo KChTS19QTk1JX1NUUlVDVF9EQVRBICopMCktPlJsbXQpKSArICgodTMyKSh1bG9uZykmKCgoU0tf UE5NSV9STE1UICopMCktPlJsbXRJbmRleCkpLAogICAgICAgICAgICAgICAgMCwgUmxtdFN0YXQs IDB9LAogICAgICAgIHsweEZGMDIwMTY1LAogICAgICAgICAgICAgICAgKDIgKyAxKSwKICAgICAg ICAgICAgICAgIHNpemVvZihTS19QTk1JX1JMTVQpLAogICAgICAgICAgICAgICAgKCh1MzIpKHVs b25nKSYoKChTS19QTk1JX1NUUlVDVF9EQVRBICopMCktPlJsbXQpKSArICgodTMyKSh1bG9uZykm KCgoU0tfUE5NSV9STE1UICopMCktPlJsbXRTdGF0dXMpKSwKICAgICAgICAgICAgICAgIDAsIFJs bXRTdGF0LCAwfSwKICAgICAgICB7MHhGRjAyMDE2NiwKICAgICAgICAgICAgICAgICgyICsgMSks CiAgICAgICAgICAgICAgICBzaXplb2YoU0tfUE5NSV9STE1UKSwKICAgICAgICAgICAgICAgICgo dTMyKSh1bG9uZykmKCgoU0tfUE5NSV9TVFJVQ1RfREFUQSAqKTApLT5SbG10KSkgKyAoKHUzMiko dWxvbmcpJigoKFNLX1BOTUlfUkxNVCAqKTApLT5SbG10VHhIZWxsb0N0cykpLAogICAgICAgICAg ICAgICAgMCwgUmxtdFN0YXQsIDB9LAogICAgICAgIHsweEZGMDIwMTY3LAogICAgICAgICAgICAg ICAgKDIgKyAxKSwKICAgICAgICAgICAgICAgIHNpemVvZihTS19QTk1JX1JMTVQpLAogICAgICAg ICAgICAgICAgKCh1MzIpKHVsb25nKSYoKChTS19QTk1JX1NUUlVDVF9EQVRBICopMCktPlJsbXQp KSArICgodTMyKSh1bG9uZykmKCgoU0tfUE5NSV9STE1UICopMCktPlJsbXRSeEhlbGxvQ3RzKSks CiAgICAgICAgICAgICAgICAwLCBSbG10U3RhdCwgMH0sCiAgICAgICAgezB4RkYwMjAxNjgsCiAg ICAgICAgICAgICAgICAoMiArIDEpLAogICAgICAgICAgICAgICAgc2l6ZW9mKFNLX1BOTUlfUkxN VCksCiAgICAgICAgICAgICAgICAoKHUzMikodWxvbmcpJigoKFNLX1BOTUlfU1RSVUNUX0RBVEEg KikwKS0+UmxtdCkpICsgKCh1MzIpKHVsb25nKSYoKChTS19QTk1JX1JMTVQgKikwKS0+UmxtdFR4 U3BIZWxsb1JlcUN0cykpLAogICAgICAgICAgICAgICAgMCwgUmxtdFN0YXQsIDB9LAogICAgICAg IHsweEZGMDIwMTY5LAogICAgICAgICAgICAgICAgKDIgKyAxKSwKICAgICAgICAgICAgICAgIHNp emVvZihTS19QTk1JX1JMTVQpLAogICAgICAgICAgICAgICAgKCh1MzIpKHVsb25nKSYoKChTS19Q Tk1JX1NUUlVDVF9EQVRBICopMCktPlJsbXQpKSArICgodTMyKSh1bG9uZykmKCgoU0tfUE5NSV9S TE1UICopMCktPlJsbXRSeFNwSGVsbG9DdHMpKSwKICAgICAgICAgICAgICAgIDAsIFJsbXRTdGF0 LCAwfSwKICAgICAgICB7MHhGRjAxMDE1MCwKICAgICAgICAgICAgICAgIDEsCiAgICAgICAgICAg ICAgICAwLAogICAgICAgICAgICAgICAgKCh1MzIpKHVsb25nKSYoKChTS19QTk1JX1NUUlVDVF9E QVRBICopMCktPlJsbXRNb25pdG9yTnVtYmVyKSksCiAgICAgICAgICAgICAgICAwLCBHZW5lcmFs LCAwfSwKICAgICAgICB7MHhGRjAxMDE1MSwKICAgICAgICAgICAgICAgIDIwLAogICAgICAgICAg ICAgICAgc2l6ZW9mKFNLX1BOTUlfUkxNVF9NT05JVE9SKSwKICAgICAgICAgICAgICAgICgodTMy KSh1bG9uZykmKCgoU0tfUE5NSV9TVFJVQ1RfREFUQSAqKTApLT5SbG10TW9uaXRvcikpICsgKCh1 MzIpKHVsb25nKSYoKChTS19QTk1JX1JMTVRfTU9OSVRPUiAqKTApLT5SbG10TW9uaXRvckluZGV4 KSksCiAgICAgICAgICAgICAgICAwLCBNb25pdG9yLCAwfSwKICAgICAgICB7MHhGRjAxMDE1MiwK ICAgICAgICAgICAgICAgIDIwLAogICAgICAgICAgICAgICAgc2l6ZW9mKFNLX1BOTUlfUkxNVF9N T05JVE9SKSwKICAgICAgICAgICAgICAgICgodTMyKSh1bG9uZykmKCgoU0tfUE5NSV9TVFJVQ1Rf REFUQSAqKTApLT5SbG10TW9uaXRvcikpICsgKCh1MzIpKHVsb25nKSYoKChTS19QTk1JX1JMTVRf TU9OSVRPUiAqKTApLT5SbG10TW9uaXRvckFkZHIpKSwKICAgICAgICAgICAgICAgIDAsIE1vbml0 b3IsIDB9LAogICAgICAgIHsweEZGMDEwMTUzLAogICAgICAgICAgICAgICAgMjAsCiAgICAgICAg ICAgICAgICBzaXplb2YoU0tfUE5NSV9STE1UX01PTklUT1IpLAogICAgICAgICAgICAgICAgKCh1 MzIpKHVsb25nKSYoKChTS19QTk1JX1NUUlVDVF9EQVRBICopMCktPlJsbXRNb25pdG9yKSkgKyAo KHUzMikodWxvbmcpJigoKFNLX1BOTUlfUkxNVF9NT05JVE9SICopMCktPlJsbXRNb25pdG9yRXJy b3JDdHMpKSwKICAgICAgICAgICAgICAgIDAsIE1vbml0b3IsIDB9LAogICAgICAgIHsweEZGMDEw MTU0LAogICAgICAgICAgICAgICAgMjAsCiAgICAgICAgICAgICAgICBzaXplb2YoU0tfUE5NSV9S TE1UX01PTklUT1IpLAogICAgICAgICAgICAgICAgKCh1MzIpKHVsb25nKSYoKChTS19QTk1JX1NU UlVDVF9EQVRBICopMCktPlJsbXRNb25pdG9yKSkgKyAoKHUzMikodWxvbmcpJigoKFNLX1BOTUlf UkxNVF9NT05JVE9SICopMCktPlJsbXRNb25pdG9yVGltZXN0YW1wKSksCiAgICAgICAgICAgICAg ICAwLCBNb25pdG9yLCAwfSwKICAgICAgICB7MHhGRjAxMDE1NSwKICAgICAgICAgICAgICAgIDIw LAogICAgICAgICAgICAgICAgc2l6ZW9mKFNLX1BOTUlfUkxNVF9NT05JVE9SKSwKICAgICAgICAg ICAgICAgICgodTMyKSh1bG9uZykmKCgoU0tfUE5NSV9TVFJVQ1RfREFUQSAqKTApLT5SbG10TW9u aXRvcikpICsgKCh1MzIpKHVsb25nKSYoKChTS19QTk1JX1JMTVRfTU9OSVRPUiAqKTApLT5SbG10 TW9uaXRvckFkbWluKSksCiAgICAgICAgICAgICAgICAxLCBNb25pdG9yLCAwfSwKICAgICAgICB7 MHhGRjAxMDExRiwKICAgICAgICAgICAgICAgIDEsCiAgICAgICAgICAgICAgICAwLAogICAgICAg ICAgICAgICAgKCh1MzIpKHVsb25nKSYoKChTS19QTk1JX1NUUlVDVF9EQVRBICopMCktPk10dVNp emUpKSwKICAgICAgICAgICAgICAgIDEsIE1hY1ByaXZhdGVDb25mLCAwfSwKICAgICAgICB7MHhG RjAyMDIwMCwKICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAwLAogICAgICAgICAg ICAgICAgMCwKICAgICAgICAgICAgICAgIDAsIFZjdCwgMH0sCiAgICAgICAgezB4RkYwMjAyMDEs CiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgIDAs CiAgICAgICAgICAgICAgICAyLCBWY3QsIDB9LAogICAgICAgIHsweEZGMDIwMjAyLAogICAgICAg ICAgICAgICAgMCwKICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAwLAogICAgICAg ICAgICAgICAgMCwgVmN0LCAwfSwKfTsKIyA1MjcgInNrZ2Vwbm1pLmMiIDIKIyA1MzUgInNrZ2Vw bm1pLmMiCnN0YXRpYyBjb25zdCB1MTYgU3RhdE92cmZsd0JpdFtdWygxICsgMSldID0gewogICAg ICAgICAgICAgICAgeyBTS19QTk1JX0hUWCwgU0tfUE5NSV9IVFhfVU5JQ0FTVH0sCiAgICAgICAg ICAgICAgICB7IFNLX1BOTUlfSFRYX09DVEVUSElHSCwgU0tfUE5NSV9IVFhfQlJPQURDQVNUfSwK ICAgICAgICAgICAgICAgIHsgU0tfUE5NSV9IVFhfT0NURVRMT1csIFNLX1BOTUlfSFRYX1BNQUND fSwKICAgICAgICAgICAgICAgIHsgU0tfUE5NSV9IVFhfQlJPQURDQVNULCBTS19QTk1JX0hUWF9N VUxUSUNBU1R9LAogICAgICAgICAgICAgICAgeyBTS19QTk1JX0hUWF9NVUxUSUNBU1QsIFNLX1BO TUlfSFRYX09DVEVUTE9XfSwKICAgICAgICAgICAgICAgIHsgU0tfUE5NSV9IVFhfVU5JQ0FTVCwg U0tfUE5NSV9IVFhfT0NURVRISUdIfSwKICAgICAgICAgICAgICAgIHsgU0tfUE5NSV9IVFhfTE9O R0ZSQU1FUywgU0tfUE5NSV9IVFhfNjR9LAogICAgICAgICAgICAgICAgeyBTS19QTk1JX0hUWF9C VVJTVCwgU0tfUE5NSV9IVFhfMTI3fSwKICAgICAgICAgICAgICAgIHsgU0tfUE5NSV9IVFhfUE1B Q0MsIFNLX1BOTUlfSFRYXzI1NX0sCiAgICAgICAgICAgICAgICB7IFNLX1BOTUlfSFRYX01BQ0Ms IFNLX1BOTUlfSFRYXzUxMX0sCiAgICAgICAgICAgICAgICB7IFNLX1BOTUlfSFRYX1NJTkdMRV9D T0wsIFNLX1BOTUlfSFRYXzEwMjN9LAogICAgICAgICAgICAgICAgeyBTS19QTk1JX0hUWF9NVUxU SV9DT0wsIFNLX1BOTUlfSFRYX01BWH0sCiAgICAgICAgICAgICAgICB7IFNLX1BOTUlfSFRYX0VY Q0VTU19DT0wsIFNLX1BOTUlfSFRYX0xPTkdGUkFNRVN9LAogICAgICAgICAgICAgICAgeyBTS19Q Tk1JX0hUWF9MQVRFX0NPTCwgU0tfUE5NSV9IVFhfUkVTRVJWRUR9LAogICAgICAgICAgICAgICAg eyBTS19QTk1JX0hUWF9ERUZGRVJBTCwgU0tfUE5NSV9IVFhfQ09MfSwKICAgICAgICAgICAgICAg IHsgU0tfUE5NSV9IVFhfRVhDRVNTX0RFRiwgU0tfUE5NSV9IVFhfTEFURV9DT0x9LAogICAgICAg ICAgICAgICAgeyBTS19QTk1JX0hUWF9VTkRFUlJVTiwgU0tfUE5NSV9IVFhfRVhDRVNTX0NPTH0s CiAgICAgICAgICAgICAgICB7IFNLX1BOTUlfSFRYX0NBUlJJRVIsIFNLX1BOTUlfSFRYX01VTFRJ X0NPTH0sCiAgICAgICAgICAgICAgICB7IFNLX1BOTUlfSFRYX1VUSUxVTkRFUiwgU0tfUE5NSV9I VFhfU0lOR0xFX0NPTH0sCiAgICAgICAgICAgICAgICB7IFNLX1BOTUlfSFRYX1VUSUxPVkVSLCBT S19QTk1JX0hUWF9VTkRFUlJVTn0sCiAgICAgICAgICAgICAgICB7IFNLX1BOTUlfSFRYXzY0LCBT S19QTk1JX0hUWF9SRVNFUlZFRH0sCiAgICAgICAgICAgICAgICB7IFNLX1BOTUlfSFRYXzEyNywg U0tfUE5NSV9IVFhfUkVTRVJWRUR9LAogICAgICAgICAgICAgICAgeyBTS19QTk1JX0hUWF8yNTUs IFNLX1BOTUlfSFRYX1JFU0VSVkVEfSwKICAgICAgICAgICAgICAgIHsgU0tfUE5NSV9IVFhfNTEx LCBTS19QTk1JX0hUWF9SRVNFUlZFRH0sCiAgICAgICAgICAgICAgICB7IFNLX1BOTUlfSFRYXzEw MjMsIFNLX1BOTUlfSFRYX1JFU0VSVkVEfSwKICAgICAgICAgICAgICAgIHsgU0tfUE5NSV9IVFhf TUFYLCBTS19QTk1JX0hUWF9SRVNFUlZFRH0sCiAgICAgICAgICAgICAgICB7IFNLX1BOTUlfSFRY X1JFU0VSVkVELCBTS19QTk1JX0hUWF9SRVNFUlZFRH0sCiAgICAgICAgICAgICAgICB7IFNLX1BO TUlfSFRYX1JFU0VSVkVELCBTS19QTk1JX0hUWF9SRVNFUlZFRH0sCiAgICAgICAgICAgICAgICB7 IFNLX1BOTUlfSFRYX1JFU0VSVkVELCBTS19QTk1JX0hUWF9SRVNFUlZFRH0sCiAgICAgICAgICAg ICAgICB7IFNLX1BOTUlfSFRYX1JFU0VSVkVELCBTS19QTk1JX0hUWF9SRVNFUlZFRH0sCiAgICAg ICAgICAgICAgICB7IFNLX1BOTUlfSFRYX1JFU0VSVkVELCBTS19QTk1JX0hUWF9SRVNFUlZFRH0s CiAgICAgICAgICAgICAgICB7IFNLX1BOTUlfSFRYX1JFU0VSVkVELCBTS19QTk1JX0hUWF9SRVNF UlZFRH0sCiAgICAgICAgICAgICAgICB7IFNLX1BOTUlfSFJYLCBTS19QTk1JX0hSWF9VTklDQVNU fSwKICAgICAgICAgICAgICAgIHsgU0tfUE5NSV9IUlhfT0NURVRISUdILCBTS19QTk1JX0hSWF9C Uk9BRENBU1R9LAogICAgICAgICAgICAgICAgeyBTS19QTk1JX0hSWF9PQ1RFVExPVywgU0tfUE5N SV9IUlhfUE1BQ0N9LAogICAgICAgICAgICAgICAgeyBTS19QTk1JX0hSWF9CUk9BRENBU1QsIFNL X1BOTUlfSFJYX01VTFRJQ0FTVH0sCiAgICAgICAgICAgICAgICB7IFNLX1BOTUlfSFJYX01VTFRJ Q0FTVCwgU0tfUE5NSV9IUlhfRkNTfSwKICAgICAgICAgICAgICAgIHsgU0tfUE5NSV9IUlhfVU5J Q0FTVCwgU0tfUE5NSV9IUlhfUkVTRVJWRUR9LAogICAgICAgICAgICAgICAgeyBTS19QTk1JX0hS WF9QTUFDQywgU0tfUE5NSV9IUlhfT0NURVRMT1d9LAogICAgICAgICAgICAgICAgeyBTS19QTk1J X0hSWF9NQUNDLCBTS19QTk1JX0hSWF9PQ1RFVEhJR0h9LAogICAgICAgICAgICAgICAgeyBTS19Q Tk1JX0hSWF9QTUFDQ19FUlIsIFNLX1BOTUlfSFJYX0JBRE9DVEVUTE9XfSwKICAgICAgICAgICAg ICAgIHsgU0tfUE5NSV9IUlhfTUFDQ19VTktXTiwgU0tfUE5NSV9IUlhfQkFET0NURVRISUdIfSwK ICAgICAgICAgICAgICAgIHsgU0tfUE5NSV9IUlhfQlVSU1QsIFNLX1BOTUlfSFJYX1VOREVSU0la RX0sCiAgICAgICAgICAgICAgICB7IFNLX1BOTUlfSFJYX01JU1NFRCwgU0tfUE5NSV9IUlhfUlVO VH0sCiAgICAgICAgICAgICAgICB7IFNLX1BOTUlfSFJYX0ZSQU1JTkcsIFNLX1BOTUlfSFJYXzY0 fSwKICAgICAgICAgICAgICAgIHsgU0tfUE5NSV9IUlhfT1ZFUkZMT1csIFNLX1BOTUlfSFJYXzEy N30sCiAgICAgICAgICAgICAgICB7IFNLX1BOTUlfSFJYX0pBQkJFUiwgU0tfUE5NSV9IUlhfMjU1 fSwKICAgICAgICAgICAgICAgIHsgU0tfUE5NSV9IUlhfQ0FSUklFUiwgU0tfUE5NSV9IUlhfNTEx fSwKICAgICAgICAgICAgICAgIHsgU0tfUE5NSV9IUlhfSVJMRU5HVEgsIFNLX1BOTUlfSFJYXzEw MjN9LAogICAgICAgICAgICAgICAgeyBTS19QTk1JX0hSWF9TWU1CT0wsIFNLX1BOTUlfSFJYX01B WH0sCiAgICAgICAgICAgICAgICB7IFNLX1BOTUlfSFJYX1NIT1JUUywgU0tfUE5NSV9IUlhfTE9O R0ZSQU1FU30sCiAgICAgICAgICAgICAgICB7IFNLX1BOTUlfSFJYX1JVTlQsIFNLX1BOTUlfSFJY X1RPT19MT05HfSwKICAgICAgICAgICAgICAgIHsgU0tfUE5NSV9IUlhfVE9PX0xPTkcsIFNLX1BO TUlfSFJYX0pBQkJFUn0sCiAgICAgICAgICAgICAgICB7IFNLX1BOTUlfSFJYX0ZDUywgU0tfUE5N SV9IUlhfUkVTRVJWRUR9LAogICAgICAgICAgICAgICAgeyBTS19QTk1JX0hSWF9SRVNFUlZFRCwg U0tfUE5NSV9IUlhfT1ZFUkZMT1d9LAogICAgICAgICAgICAgICAgeyBTS19QTk1JX0hSWF9DRVhU LCBTS19QTk1JX0hSWF9SRVNFUlZFRH0sCiAgICAgICAgICAgICAgICB7IFNLX1BOTUlfSFJYX1VU SUxVTkRFUiwgU0tfUE5NSV9IUlhfUkVTRVJWRUR9LAogICAgICAgICAgICAgICAgeyBTS19QTk1J X0hSWF9VVElMT1ZFUiwgU0tfUE5NSV9IUlhfUkVTRVJWRUR9LAogICAgICAgICAgICAgICAgeyBT S19QTk1JX0hSWF82NCwgU0tfUE5NSV9IUlhfUkVTRVJWRUR9LAogICAgICAgICAgICAgICAgeyBT S19QTk1JX0hSWF8xMjcsIFNLX1BOTUlfSFJYX1JFU0VSVkVEfSwKICAgICAgICAgICAgICAgIHsg U0tfUE5NSV9IUlhfMjU1LCBTS19QTk1JX0hSWF9SRVNFUlZFRH0sCiAgICAgICAgICAgICAgICB7 IFNLX1BOTUlfSFJYXzUxMSwgU0tfUE5NSV9IUlhfUkVTRVJWRUR9LAogICAgICAgICAgICAgICAg eyBTS19QTk1JX0hSWF8xMDIzLCBTS19QTk1JX0hSWF9SRVNFUlZFRH0sCiAgICAgICAgICAgICAg ICB7IFNLX1BOTUlfSFJYX01BWCwgU0tfUE5NSV9IUlhfUkVTRVJWRUR9Cn07CgoKCgpzdGF0aWMg Y29uc3QgU0tfUE5NSV9TVEFUQUREUiBTdGF0QWRkcltTS19QTk1JX01BWF9JRFhdWygxICsgMSld ID0gewoKICAgICAgICB7ezB4MDI4MCwgKCEwKX0sIHswLCAwfX0sCgogICAgICAgIHt7MHgwMjg0 LCAoITApfSwgeygweDAxMDAgKyAyMzIpLCAoITApfX0sCgogICAgICAgIHt7MHgwMjg4LCAwfSwg eygweDAxMDAgKyAyMjQpLCAwfX0sCgogICAgICAgIHt7MHgwMjhjLCAoITApfSwgeygweDAxMDAg KyAyMDApLCAoITApfX0sCgogICAgICAgIHt7MHgwMjkwLCAoITApfSwgeygweDAxMDAgKyAyMTYp LCAoITApfX0sCgogICAgICAgIHt7MHgwMjk0LCAoITApfSwgeygweDAxMDAgKyAxOTIpLCAoITAp fX0sCgogICAgICAgIHt7MHgwMjljLCAoITApfSwgezAsIDB9fSwKCiAgICAgICAge3sweDAyYTAs ICghMCl9LCB7KDB4MDEwMCArIDIwOCksICghMCl9fSwKCiAgICAgICAge3sweDAyYTQsICghMCl9 LCB7MCwgMH19LAoKICAgICAgICB7ezAsIDB9LCB7KDB4MDEwMCArIDMwNCksICghMCl9fSwKCiAg ICAgICAge3sweDAyYTgsICghMCl9LCB7KDB4MDEwMCArIDMzNiksICghMCl9fSwKCiAgICAgICAg e3sweDAyYWMsICghMCl9LCB7KDB4MDEwMCArIDMyOCksICghMCl9fSwKCiAgICAgICAge3sweDAy YjAsICghMCl9LCB7KDB4MDEwMCArIDMyMCksICghMCl9fSwKCiAgICAgICAge3sweDAyYjQsICgh MCl9LCB7KDB4MDEwMCArIDMxMiksICghMCl9fSwKCiAgICAgICAge3sweDAyYjgsICghMCl9LCB7 MCwgMH19LAoKICAgICAgICB7ezB4MDJiYywgKCEwKX0sIHswLCAwfX0sCgogICAgICAgIHt7MHgw MmMwLCAoITApfSwgeygweDAxMDAgKyAzNDQpLCAoITApfX0sCgogICAgICAgIHt7MHgwMmM0LCAo ITApfSwgezAsIDB9fSwKCiAgICAgICAge3swLCAwfSwgezAsIDB9fSwKCiAgICAgICAge3swLCAw fSwgezAsIDB9fSwKCiAgICAgICAge3sweDAyZDAsICghMCl9LCB7KDB4MDEwMCArIDI0MCksICgh MCl9fSwKCiAgICAgICAge3sweDAyZDQsICghMCl9LCB7KDB4MDEwMCArIDI0OCksICghMCl9fSwK CiAgICAgICAge3sweDAyZDgsICghMCl9LCB7KDB4MDEwMCArIDI1NiksICghMCl9fSwKCiAgICAg ICAge3sweDAyZGMsICghMCl9LCB7KDB4MDEwMCArIDI2NCksICghMCl9fSwKCiAgICAgICAge3sw eDAyZTAsICghMCl9LCB7KDB4MDEwMCArIDI3MiksICghMCl9fSwKCiAgICAgICAge3sweDAyZTQs ICghMCl9LCB7KDB4MDEwMCArIDI4MCksICghMCl9fSwKCiAgICAgICAge3sweDAyOTgsICghMCl9 LCB7KDB4MDEwMCArIDI4OCksICghMCl9fSwKCiAgICAgICAge3swLCAwfSwgezAsIDB9fSwKCiAg ICAgICAge3swLCAwfSwgezAsIDB9fSwKCiAgICAgICAge3swLCAwfSwgezAsIDB9fSwKCiAgICAg ICAge3sweDAzMDAsICghMCl9LCB7MCwgMH19LAoKICAgICAgICB7ezB4MDMwNCwgKCEwKX0sIHso MHgwMTAwICsgNTYpLCAoITApfX0sCgogICAgICAgIHt7MHgwMzA4LCAwfSwgeygweDAxMDAgKyA0 OCksIDB9fSwKCiAgICAgICAge3swLCAwfSwgeygweDAxMDAgKyA3MiksICghMCl9fSwKCiAgICAg ICAge3swLCAwfSwgeygweDAxMDAgKyA2NCksICghMCl9fSwKCiAgICAgICAge3sweDAzMGMsICgh MCl9LCB7KDB4MDEwMCArIDgpLCAoITApfX0sCgogICAgICAgIHt7MHgwMzEwLCAoITApfSwgeygw eDAxMDAgKyAyNCksICghMCl9fSwKCiAgICAgICAge3sweDAzMTQsICghMCl9LCB7KDB4MDEwMCAr IDApLCAoITApfX0sCgogICAgICAgIHt7MHgwMzE4LCAoITApfSwgeygweDAxMDAgKyAxNiksICgh MCl9fSwKCiAgICAgICAge3sweDAzMWMsICghMCl9LCB7MCwgMH19LAoKICAgICAgICB7ezB4MDMy MCwgKCEwKX0sIHswLCAwfX0sCgogICAgICAgIHt7MHgwMzI0LCAoITApfSwgezAsIDB9fSwKCiAg ICAgICAge3sweDAzMjgsICghMCl9LCB7MCwgMH19LAoKICAgICAgICB7ezB4MDMyYywgKCEwKX0s IHswLCAwfX0sCgogICAgICAgIHt7MHgwMzMwLCAoITApfSwgezAsIDB9fSwKCiAgICAgICAge3sw LCAwfSx7KDB4MDEwMCArIDgwKSwgKCEwKX19LAoKICAgICAgICB7ezB4MDMzNCwgKCEwKX0sIHso MHgwMTAwICsgMTc2KSwgKCEwKX19LAoKICAgICAgICB7ezB4MDMzOCwgKCEwKX0sIHsoMHgwMTAw ICsgMTYwKSwgKCEwKX19LAoKICAgICAgICB7ezB4MDMzYywgKCEwKX0sIHswLCAwfX0sCgogICAg ICAgIHt7MHgwMzQwLCAoITApfSwgezAsIDB9fSwKCiAgICAgICAge3sweDAzNDQsICghMCl9LCB7 MCwgMH19LAoKICAgICAgICB7ezB4MDM0OCwgKCEwKX0sIHswLCAwfX0sCgogICAgICAgIHt7MHgw MzRjLCAoITApfSwgeygweDAxMDAgKyA4OCksICghMCl9fSwKCiAgICAgICAge3sweDAzNTAsICgh MCl9LCB7KDB4MDEwMCArIDE1MiksICghMCl9fSwKCiAgICAgICAge3sweDAzNTQsICghMCl9LCB7 KDB4MDEwMCArIDMyKSwgKCEwKX19LAoKICAgICAgICB7ezB4MDM1YywgKCEwKX0sIHswLCAwfX0s CgogICAgICAgIHt7MCwgMH0sIHswLCAwfX0sCgogICAgICAgIHt7MCwgMH0sIHswLCAwfX0sCgog ICAgICAgIHt7MHgwMzY4LCAoITApfSwgeygweDAxMDAgKyA5NiksICghMCl9fSwKCiAgICAgICAg e3sweDAzNmMsICghMCl9LCB7KDB4MDEwMCArIDEwNCksICghMCl9fSwKCiAgICAgICAge3sweDAz NzAsICghMCl9LCB7KDB4MDEwMCArIDExMiksICghMCl9fSwKCiAgICAgICAge3sweDAzNzQsICgh MCl9LCB7KDB4MDEwMCArIDEyMCksICghMCl9fSwKCiAgICAgICAge3sweDAzNzgsICghMCl9LCB7 KDB4MDEwMCArIDEyOCksICghMCl9fSwKCiAgICAgICAge3sweDAzN2MsICghMCl9LCB7KDB4MDEw MCArIDEzNiksICghMCl9fSwKCiAgICAgICAge3swLCAwfSwgeygweDAxMDAgKyAxNDQpLCAoITAp fX0sCgogICAgICAgIHt7MCwgMH0sIHswLCAwfX0KfTsKIyA3NjEgInNrZ2Vwbm1pLmMiCmludCBT a1BubWlJbml0KApTS19BQyAqcEFDLApjaGFyKiBJb0MsCmludCBMZXZlbCkKewogICAgICAgIHVu c2lnbmVkIGludCBQb3J0TWF4OwogICAgICAgIHVuc2lnbmVkIGludCBQb3J0SW5kZXg7CiAgICAg ICAgdTE2IFZhbDE2OwogICAgICAgIHU4IFZhbDg7CiAgICAgICAgU0tfRVZQQVJBIEV2ZW50UGFy YW07CiAgICAgICAgU0tfR0VQT1JUICpwUHJ0OwogICAgICAgIFNLX1BOTUlfVkNUICpwVmN0QmFj a3VwRGF0YTsKCgogICAgICAgIDsKCgogICAgICAgIHN3aXRjaCAoTGV2ZWwpIHsKCiAgICAgICAg Y2FzZSAwOgogICAgICAgICAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKDApID8gKF9fYnVp bHRpbl9jb25zdGFudF9wKChzaXplb2YocEFDLT5Qbm1pKSkpID8gX19jb25zdGFudF9jX2FuZF9j b3VudF9tZW1zZXQoKCgoY2hhciAqKSZwQUMtPlBubWkpKSwoKDB4MDEwMTAxMDFVTCoodW5zaWdu ZWQgY2hhcikoMCkpKSwoKHNpemVvZihwQUMtPlBubWkpKSkpIDogX19jb25zdGFudF9jX21lbXNl dCgoKChjaGFyICopJnBBQy0+UG5taSkpLCgoMHgwMTAxMDEwMVVMKih1bnNpZ25lZCBjaGFyKSgw KSkpLCgoc2l6ZW9mKHBBQy0+UG5taSkpKSkpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wKChzaXpl b2YocEFDLT5Qbm1pKSkpID8gX19tZW1zZXRfZ2VuZXJpYygoKCgoY2hhciAqKSZwQUMtPlBubWkp KSksKCgoMCkpKSwoKChzaXplb2YocEFDLT5Qbm1pKSkpKSkgOiBfX21lbXNldF9nZW5lcmljKCgo KGNoYXIgKikmcEFDLT5Qbm1pKSksKCgwKSksKChzaXplb2YocEFDLT5Qbm1pKSkpKSkpOwogICAg ICAgICAgICAgICAgcEFDLT5Qbm1pLlRyYXBCdWZGcmVlID0gNTEyOwogICAgICAgICAgICAgICAg cEFDLT5Qbm1pLlN0YXJ0VXBUaW1lID0gKFNrT3NHZXRUaW1lKHBBQykpOwogICAgICAgICAgICAg ICAgcEFDLT5Qbm1pLlJsbXRDaGFuZ2VUaHJlc2hvbGQgPSAyNDA7CiAgICAgICAgICAgICAgICBm b3IgKFBvcnRJbmRleCA9IDA7IFBvcnRJbmRleCA8IDI7IFBvcnRJbmRleCArKykgewoKICAgICAg ICAgICAgICAgICAgICAgICAgcEFDLT5Qbm1pLlBvcnRbUG9ydEluZGV4XS5BY3RpdmVGbGFnID0g MDsKICAgICAgICAgICAgICAgICAgICAgICAgcEFDLT5Qbm1pLkR1YWxOZXRBY3RpdmVGbGFnID0g MDsKICAgICAgICAgICAgICAgIH0KIyA4MTcgInNrZ2Vwbm1pLmMiCiAgICAgICAgICAgICAgICBi cmVhazsKCiAgICAgICAgY2FzZSAxOgoKCgogICAgICAgICAgICAgICAgUG9ydE1heCA9IHBBQy0+ R0luaS5HSU1hY3NGb3VuZDsKCiAgICAgICAgICAgICAgICBmb3IgKFBvcnRJbmRleCA9IDA7IFBv cnRJbmRleCA8IFBvcnRNYXg7IFBvcnRJbmRleCArKykgewoKICAgICAgICAgICAgICAgICAgICAg ICAgcEFDLT5HSW5pLkdJRnVuYy5wRm5NYWNSZXNldENvdW50ZXIocEFDLCBJb0MsIFBvcnRJbmRl eCk7CiAgICAgICAgICAgICAgICB9CgoKICAgICAgICAgICAgICAgIGZvciAoUG9ydEluZGV4ID0g MDsgUG9ydEluZGV4IDwgUG9ydE1heDsgUG9ydEluZGV4ICsrKSB7CiAgICAgICAgICAgICAgICAg ICAgICAgIHBQcnQgPSAmcEFDLT5HSW5pLkdQW1BvcnRJbmRleF07CiAgICAgICAgICAgICAgICAg ICAgICAgIHBQcnQtPlBDYWJsZUxlbiA9MHhmZjsKICAgICAgICAgICAgICAgICAgICAgICAgcFZj dEJhY2t1cERhdGEgPSAmcEFDLT5Qbm1pLlZjdEJhY2t1cFtQb3J0SW5kZXhdOwogICAgICAgICAg ICAgICAgICAgICAgICBwVmN0QmFja3VwRGF0YS0+UENhYmxlTGVuID0gMHhmZjsKICAgICAgICAg ICAgICAgIH0KCgoKCiAgICAgICAgICAgICAgICAoKigmVmFsMTYpID0gKCoodm9sYXRpbGUgdW5z aWduZWQgc2hvcnQgKikgKCh2b2lkICopKChJb0MpKygweDAwMDQpKSkpKTsKICAgICAgICAgICAg ICAgIGlmICgoVmFsMTYgJiAoMSA8PCA5KSkgPT0gMCkgewoKICAgICAgICAgICAgICAgICAgICAg ICAgcEFDLT5Qbm1pLlBjaUJ1c1NwZWVkID0gMzM7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgcEFDLT5Qbm1pLlBjaUJ1c1Nw ZWVkID0gNjY7CiAgICAgICAgICAgICAgICB9CgoKCgogICAgICAgICAgICAgICAgKCooJlZhbDE2 KSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopICgodm9pZCAqKSgoSW9DKSsoMHgwMDA0 KSkpKSk7CiAgICAgICAgICAgICAgICBpZiAoKFZhbDE2ICYgKDEgPDwgOCkpID09IDApIHsKCiAg ICAgICAgICAgICAgICAgICAgICAgIHBBQy0+UG5taS5QY2lCdXNXaWR0aCA9IDMyOwogICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAg IHBBQy0+UG5taS5QY2lCdXNXaWR0aCA9IDY0OwogICAgICAgICAgICAgICAgfQoKCgoKICAgICAg ICAgICAgICAgIHN3aXRjaCAocEFDLT5HSW5pLkdJQ2hpcElkKSB7CiAgICAgICAgICAgICAgICBj YXNlIDB4MGE6CiAgICAgICAgICAgICAgICAgICAgICAgIHBBQy0+UG5taS5DaGlwc2V0ID0gMTsK ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSAweGIw OgogICAgICAgICAgICAgICAgICAgICAgICBwQUMtPlBubWkuQ2hpcHNldCA9IDI7CiAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQoKCgoKICAgICAgICAgICAg ICAgICgqKCZWYWw4KSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKCh2b2lkICopKChJ b0MpKygweDAxMTkpKSkpKTsKICAgICAgICAgICAgICAgIHN3aXRjaCAoVmFsOCkgewogICAgICAg ICAgICAgICAgY2FzZSAnUyc6CiAgICAgICAgICAgICAgICAgICAgICAgIHBBQy0+UG5taS5QTUQg PSAzOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAocEFDLT5HSW5pLkdJTWFjc0ZvdW5kID4g MSkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQUMtPlBubWkuRGV2aWNlVHlw ZSA9IDB4MDAwMjAwMDI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg ICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFDLT5Qbm1p LkRldmljZVR5cGUgPSAweDAwMDIwMDAxOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgJ0wnOgogICAg ICAgICAgICAgICAgICAgICAgICBwQUMtPlBubWkuUE1EID0gMjsKICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKHBBQy0+R0luaS5HSU1hY3NGb3VuZCA+IDEpIHsKCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcEFDLT5Qbm1pLkRldmljZVR5cGUgPSAweDAwMDIwMDA0OwogICAgICAg ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHBBQy0+UG5taS5EZXZpY2VUeXBlID0gMHgwMDAyMDAw MzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBicmVh azsKCiAgICAgICAgICAgICAgICBjYXNlICdDJzoKICAgICAgICAgICAgICAgICAgICAgICAgcEFD LT5Qbm1pLlBNRCA9IDQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwQUMtPkdJbmkuR0lN YWNzRm91bmQgPiAxKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBQy0+UG5t aS5EZXZpY2VUeXBlID0gMHgwMDAyMDAwNjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwQUMtPlBubWkuRGV2aWNlVHlwZSA9IDB4MDAwMjAwMDU7CiAgICAgICAgICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2Fz ZSAnVCc6CiAgICAgICAgICAgICAgICAgICAgICAgIHBBQy0+UG5taS5QTUQgPSA1OwogICAgICAg ICAgICAgICAgICAgICAgICBpZiAocEFDLT5HSW5pLkdJTWFjc0ZvdW5kID4gMSkgewoKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwQUMtPlBubWkuRGV2aWNlVHlwZSA9IDB4MDAwMjAw MDg7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxz ZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFDLT5Qbm1pLkRldmljZVR5cGUg PSAweDAwMDIwMDA3OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGRlZmF1bHQgOgogICAgICAgICAgICAgICAg ICAgICAgICBwQUMtPlBubWkuUE1EID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgcEFDLT5Q bm1pLkRldmljZVR5cGUgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg ICAgICAgICAgIH0KCgoKCiAgICAgICAgICAgICAgICAoKigmVmFsOCkgPSAoKih2b2xhdGlsZSB1 bnNpZ25lZCBjaGFyICopICgodm9pZCAqKSgoSW9DKSsoMHgwMTE4KSkpKSk7CiAgICAgICAgICAg ICAgICBzd2l0Y2ggKFZhbDgpIHsKICAgICAgICAgICAgICAgIGNhc2UgJ0MnOgogICAgICAgICAg ICAgICAgICAgICAgICBwQUMtPlBubWkuQ29ubmVjdG9yID0gMjsKICAgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSAnRCc6CiAgICAgICAgICAgICAgICAg ICAgICAgIHBBQy0+UG5taS5Db25uZWN0b3IgPSAzOwogICAgICAgICAgICAgICAgICAgICAgICBi cmVhazsKCiAgICAgICAgICAgICAgICBjYXNlICdGJzoKICAgICAgICAgICAgICAgICAgICAgICAg cEFDLT5Qbm1pLkNvbm5lY3RvciA9IDQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoK ICAgICAgICAgICAgICAgIGNhc2UgJ0onOgogICAgICAgICAgICAgICAgICAgICAgICBwQUMtPlBu bWkuQ29ubmVjdG9yID0gNTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAg ICAgICAgICAgY2FzZSAnVic6CiAgICAgICAgICAgICAgICAgICAgICAgIHBBQy0+UG5taS5Db25u ZWN0b3IgPSA2OwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAg ICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICBwQUMtPlBubWkuQ29ubmVjdG9yID0g MTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAyOgoKCgogICAgICAgICAgICAgICAgKF9f YnVpbHRpbl9jb25zdGFudF9wKDApID8gKF9fYnVpbHRpbl9jb25zdGFudF9wKChzaXplb2YoRXZl bnRQYXJhbSkpKSA/IF9fY29uc3RhbnRfY19hbmRfY291bnRfbWVtc2V0KCgoKGNoYXIgKikgJkV2 ZW50UGFyYW0pKSwoKDB4MDEwMTAxMDFVTCoodW5zaWduZWQgY2hhcikoMCkpKSwoKHNpemVvZihF dmVudFBhcmFtKSkpKSA6IF9fY29uc3RhbnRfY19tZW1zZXQoKCgoY2hhciAqKSAmRXZlbnRQYXJh bSkpLCgoMHgwMTAxMDEwMVVMKih1bnNpZ25lZCBjaGFyKSgwKSkpLCgoc2l6ZW9mKEV2ZW50UGFy YW0pKSkpKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCgoc2l6ZW9mKEV2ZW50UGFyYW0pKSkgPyBf X21lbXNldF9nZW5lcmljKCgoKChjaGFyICopICZFdmVudFBhcmFtKSkpLCgoKDApKSksKCgoc2l6 ZW9mKEV2ZW50UGFyYW0pKSkpKSA6IF9fbWVtc2V0X2dlbmVyaWMoKCgoY2hhciAqKSAmRXZlbnRQ YXJhbSkpLCgoMCkpLCgoc2l6ZW9mKEV2ZW50UGFyYW0pKSkpKSk7CiAgICAgICAgICAgICAgICBT a1RpbWVyU3RhcnQocEFDLCBJb0MsICZwQUMtPlBubWkuUmxtdENoYW5nZUVzdGltYXRlLkVzdFRp bWVyLAogICAgICAgICAgICAgICAgICAgICAgICAyODEyNTAwMCwgNCwgNiwKICAgICAgICAgICAg ICAgICAgICAgICAgRXZlbnRQYXJhbSk7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAg ZGVmYXVsdDoKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJu ICgwKTsKfQojIDEwMDAgInNrZ2Vwbm1pLmMiCmludCBTa1BubWlHZXRWYXIoClNLX0FDICpwQUMs CmNoYXIqIElvQywKdTMyIElkLAp2b2lkICpwQnVmLAp1bnNpZ25lZCBpbnQgKnBMZW4sCnUzMiBJ bnN0YW5jZSwKdTMyIE5ldEluZGV4KQp7CiAgICAgICAgOwoKCgogICAgICAgIHJldHVybiAoUG5t aVZhcihwQUMsIElvQywgMCwgSWQsIChjaGFyICopcEJ1ZiwgcExlbiwKICAgICAgICAgICAgICAg IEluc3RhbmNlLCBOZXRJbmRleCkpOwp9CiMgMTA0MiAic2tnZXBubWkuYyIKaW50IFNrUG5taVBy ZVNldFZhcigKU0tfQUMgKnBBQywKY2hhciogSW9DLAp1MzIgSWQsCnZvaWQgKnBCdWYsCnVuc2ln bmVkIGludCAqcExlbiwKdTMyIEluc3RhbmNlLAp1MzIgTmV0SW5kZXgpCnsKICAgICAgICA7CgoK CgogICAgICAgIHJldHVybiAoUG5taVZhcihwQUMsIElvQywgMSwgSWQsIChjaGFyICopcEJ1Ziwg cExlbiwKICAgICAgICAgICAgICAgIEluc3RhbmNlLCBOZXRJbmRleCkpOwp9CiMgMTA4NSAic2tn ZXBubWkuYyIKaW50IFNrUG5taVNldFZhcigKU0tfQUMgKnBBQywKY2hhciogSW9DLAp1MzIgSWQs CnZvaWQgKnBCdWYsCnVuc2lnbmVkIGludCAqcExlbiwKdTMyIEluc3RhbmNlLAp1MzIgTmV0SW5k ZXgpCnsKICAgICAgICA7CgoKCiAgICAgICAgcmV0dXJuIChQbm1pVmFyKHBBQywgSW9DLCAyLCBJ ZCwgKGNoYXIgKilwQnVmLCBwTGVuLAogICAgICAgICAgICAgICAgSW5zdGFuY2UsIE5ldEluZGV4 KSk7Cn0KIyAxMTIxICJza2dlcG5taS5jIgppbnQgU2tQbm1pR2V0U3RydWN0KApTS19BQyAqcEFD LApjaGFyKiBJb0MsCnZvaWQgKnBCdWYsCnVuc2lnbmVkIGludCAqcExlbiwKdTMyIE5ldEluZGV4 KQp7CiAgICAgICAgaW50IFJldDsKICAgICAgICB1bnNpZ25lZCBpbnQgVGFibGVJbmRleDsKICAg ICAgICB1bnNpZ25lZCBpbnQgRHN0T2Zmc2V0OwogICAgICAgIHVuc2lnbmVkIGludCBJbnN0YW5j ZU5vOwogICAgICAgIHVuc2lnbmVkIGludCBJbnN0YW5jZUNudDsKICAgICAgICB1MzIgSW5zdGFu Y2U7CiAgICAgICAgdW5zaWduZWQgaW50IFRtcExlbjsKICAgICAgICBjaGFyIEtleUFyclsoNTEy IC8gNCldWzVdOwoKCiAgICAgICAgOwoKCgogICAgICAgIGlmICgqcExlbiA8IChzaXplb2YoU0tf UE5NSV9TVFJVQ1RfREFUQSkpKSB7CgogICAgICAgICAgICAgICAgaWYgKCpwTGVuID49ICgodW5z aWduZWQgaW50KSh1bG9uZykgJigoKFNLX1BOTUlfU1RSVUNUX0RBVEEgKikwKS0+VnBkRnJlZUJ5 dGVzKSkpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIHt1MzIgVmFsMzI7IGNoYXIgKnBWYWw7 IFZhbDMyID0gKDIpOyBwVmFsID0gKGNoYXIgKikocEJ1ZikgKyAoKHUzMikodWxvbmcpICYoKChT S19QTk1JX1NUUlVDVF9EQVRBICopMCktPiBSZXR1cm5TdGF0dXMuRXJyb3JTdGF0dXMpKTsgKF9f YnVpbHRpbl9jb25zdGFudF9wKDQpID8gX19jb25zdGFudF9tZW1jcHkoKChjaGFyKikocFZhbCkp LCgoY2hhciopJihWYWwzMikpLCg0KSkgOiBfX21lbWNweSgoKGNoYXIqKShwVmFsKSksKChjaGFy KikmKFZhbDMyKSksKDQpKSk7IFZhbDMyID0gKCh1MzIpKC0xKSk7IHBWYWwgPSAoY2hhciAqKShw QnVmKSArICgodTMyKSh1bG9uZykgJigoKFNLX1BOTUlfU1RSVUNUX0RBVEEgKikwKS0+IFJldHVy blN0YXR1cy5FcnJvck9mZnNldCkpOyAoX19idWlsdGluX2NvbnN0YW50X3AoNCkgPyBfX2NvbnN0 YW50X21lbWNweSgoKGNoYXIqKShwVmFsKSksKChjaGFyKikmKFZhbDMyKSksKDQpKSA6IF9fbWVt Y3B5KCgoY2hhciopKHBWYWwpKSwoKGNoYXIqKSYoVmFsMzIpKSwoNCkpKTt9OwoKICAgICAgICAg ICAgICAgIH0KCiAgICAgICAgICAgICAgICAqcExlbiA9IChzaXplb2YoU0tfUE5NSV9TVFJVQ1Rf REFUQSkpOwogICAgICAgICAgICAgICAgcmV0dXJuICgyKTsKICAgICAgICB9CgoKCgogICAgICAg IGlmIChOZXRJbmRleCA+PSBwQUMtPlJsbXQuTnVtTmV0cykgewogICAgICAgICAgICAgICAgcmV0 dXJuICg3KTsKICAgICAgICB9CgoKICAgICAgICA7CgogICAgICAgIGlmICgoUmV0ID0gTWFjVXBk YXRlKHBBQywgSW9DLCAwLCBwQUMtPkdJbmkuR0lNYWNzRm91bmQgLSAxKSkgIT0KICAgICAgICAg ICAgICAgIDApIHsKCiAgICAgICAgICAgICAgICB7dTMyIFZhbDMyOyBjaGFyICpwVmFsOyBWYWwz MiA9IChSZXQpOyBwVmFsID0gKGNoYXIgKikocEJ1ZikgKyAoKHUzMikodWxvbmcpICYoKChTS19Q Tk1JX1NUUlVDVF9EQVRBICopMCktPiBSZXR1cm5TdGF0dXMuRXJyb3JTdGF0dXMpKTsgKF9fYnVp bHRpbl9jb25zdGFudF9wKDQpID8gX19jb25zdGFudF9tZW1jcHkoKChjaGFyKikocFZhbCkpLCgo Y2hhciopJihWYWwzMikpLCg0KSkgOiBfX21lbWNweSgoKGNoYXIqKShwVmFsKSksKChjaGFyKikm KFZhbDMyKSksKDQpKSk7IFZhbDMyID0gKCh1MzIpKC0xKSk7IHBWYWwgPSAoY2hhciAqKShwQnVm KSArICgodTMyKSh1bG9uZykgJigoKFNLX1BOTUlfU1RSVUNUX0RBVEEgKikwKS0+IFJldHVyblN0 YXR1cy5FcnJvck9mZnNldCkpOyAoX19idWlsdGluX2NvbnN0YW50X3AoNCkgPyBfX2NvbnN0YW50 X21lbWNweSgoKGNoYXIqKShwVmFsKSksKChjaGFyKikmKFZhbDMyKSksKDQpKSA6IF9fbWVtY3B5 KCgoY2hhciopKHBWYWwpKSwoKGNoYXIqKSYoVmFsMzIpKSwoNCkpKTt9OwogICAgICAgICAgICAg ICAgKnBMZW4gPSAoKHVuc2lnbmVkIGludCkodWxvbmcpICYoKChTS19QTk1JX1NUUlVDVF9EQVRB ICopMCktPlZwZEZyZWVCeXRlcykpOwogICAgICAgICAgICAgICAgcmV0dXJuIChSZXQpOwogICAg ICAgIH0KCiAgICAgICAgaWYgKChSZXQgPSBSbG10VXBkYXRlKHBBQywgSW9DLCBOZXRJbmRleCkp ICE9IDApIHsKCiAgICAgICAgICAgICAgICB7dTMyIFZhbDMyOyBjaGFyICpwVmFsOyBWYWwzMiA9 IChSZXQpOyBwVmFsID0gKGNoYXIgKikocEJ1ZikgKyAoKHUzMikodWxvbmcpICYoKChTS19QTk1J X1NUUlVDVF9EQVRBICopMCktPiBSZXR1cm5TdGF0dXMuRXJyb3JTdGF0dXMpKTsgKF9fYnVpbHRp bl9jb25zdGFudF9wKDQpID8gX19jb25zdGFudF9tZW1jcHkoKChjaGFyKikocFZhbCkpLCgoY2hh ciopJihWYWwzMikpLCg0KSkgOiBfX21lbWNweSgoKGNoYXIqKShwVmFsKSksKChjaGFyKikmKFZh bDMyKSksKDQpKSk7IFZhbDMyID0gKCh1MzIpKC0xKSk7IHBWYWwgPSAoY2hhciAqKShwQnVmKSAr ICgodTMyKSh1bG9uZykgJigoKFNLX1BOTUlfU1RSVUNUX0RBVEEgKikwKS0+IFJldHVyblN0YXR1 cy5FcnJvck9mZnNldCkpOyAoX19idWlsdGluX2NvbnN0YW50X3AoNCkgPyBfX2NvbnN0YW50X21l bWNweSgoKGNoYXIqKShwVmFsKSksKChjaGFyKikmKFZhbDMyKSksKDQpKSA6IF9fbWVtY3B5KCgo Y2hhciopKHBWYWwpKSwoKGNoYXIqKSYoVmFsMzIpKSwoNCkpKTt9OwogICAgICAgICAgICAgICAg KnBMZW4gPSAoKHVuc2lnbmVkIGludCkodWxvbmcpICYoKChTS19QTk1JX1NUUlVDVF9EQVRBICop MCktPlZwZEZyZWVCeXRlcykpOwogICAgICAgICAgICAgICAgcmV0dXJuIChSZXQpOwogICAgICAg IH0KCiAgICAgICAgaWYgKChSZXQgPSBTaXJxVXBkYXRlKHBBQywgSW9DKSkgIT0gMCkgewoKICAg ICAgICAgICAgICAgIHt1MzIgVmFsMzI7IGNoYXIgKnBWYWw7IFZhbDMyID0gKFJldCk7IHBWYWwg PSAoY2hhciAqKShwQnVmKSArICgodTMyKSh1bG9uZykgJigoKFNLX1BOTUlfU1RSVUNUX0RBVEEg KikwKS0+IFJldHVyblN0YXR1cy5FcnJvclN0YXR1cykpOyAoX19idWlsdGluX2NvbnN0YW50X3Ao NCkgPyBfX2NvbnN0YW50X21lbWNweSgoKGNoYXIqKShwVmFsKSksKChjaGFyKikmKFZhbDMyKSks KDQpKSA6IF9fbWVtY3B5KCgoY2hhciopKHBWYWwpKSwoKGNoYXIqKSYoVmFsMzIpKSwoNCkpKTsg VmFsMzIgPSAoKHUzMikoLTEpKTsgcFZhbCA9IChjaGFyICopKHBCdWYpICsgKCh1MzIpKHVsb25n KSAmKCgoU0tfUE5NSV9TVFJVQ1RfREFUQSAqKTApLT4gUmV0dXJuU3RhdHVzLkVycm9yT2Zmc2V0 KSk7IChfX2J1aWx0aW5fY29uc3RhbnRfcCg0KSA/IF9fY29uc3RhbnRfbWVtY3B5KCgoY2hhciop KHBWYWwpKSwoKGNoYXIqKSYoVmFsMzIpKSwoNCkpIDogX19tZW1jcHkoKChjaGFyKikocFZhbCkp LCgoY2hhciopJihWYWwzMikpLCg0KSkpO307CiAgICAgICAgICAgICAgICAqcExlbiA9ICgodW5z aWduZWQgaW50KSh1bG9uZykgJigoKFNLX1BOTUlfU1RSVUNUX0RBVEEgKikwKS0+VnBkRnJlZUJ5 dGVzKSk7CiAgICAgICAgICAgICAgICByZXR1cm4gKFJldCk7CiAgICAgICAgfQoKCgoKCiAgICAg ICAgcEFDLT5Qbm1pLk1hY1VwZGF0ZWRGbGFnICsrOwogICAgICAgIHBBQy0+UG5taS5SbG10VXBk YXRlZEZsYWcgKys7CiAgICAgICAgcEFDLT5Qbm1pLlNpcnFVcGRhdGVkRmxhZyArKzsKCgogICAg ICAgIFJldCA9IEdldFZwZEtleUFycihwQUMsIElvQywgJktleUFyclswXVswXSwgc2l6ZW9mKEtl eUFyciksICZUbXBMZW4pOwogICAgICAgIGlmIChSZXQgIT0gMCkgewoKICAgICAgICAgICAgICAg IHBBQy0+UG5taS5NYWNVcGRhdGVkRmxhZyAtLTsKICAgICAgICAgICAgICAgIHBBQy0+UG5taS5S bG10VXBkYXRlZEZsYWcgLS07CiAgICAgICAgICAgICAgICBwQUMtPlBubWkuU2lycVVwZGF0ZWRG bGFnIC0tOwoKICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgIHt1MzIgVmFsMzI7IGNo YXIgKnBWYWw7IFZhbDMyID0gKFJldCk7IHBWYWwgPSAoY2hhciAqKShwQnVmKSArICgodTMyKSh1 bG9uZykgJigoKFNLX1BOTUlfU1RSVUNUX0RBVEEgKikwKS0+IFJldHVyblN0YXR1cy5FcnJvclN0 YXR1cykpOyAoX19idWlsdGluX2NvbnN0YW50X3AoNCkgPyBfX2NvbnN0YW50X21lbWNweSgoKGNo YXIqKShwVmFsKSksKChjaGFyKikmKFZhbDMyKSksKDQpKSA6IF9fbWVtY3B5KCgoY2hhciopKHBW YWwpKSwoKGNoYXIqKSYoVmFsMzIpKSwoNCkpKTsgVmFsMzIgPSAoKHUzMikoLTEpKTsgcFZhbCA9 IChjaGFyICopKHBCdWYpICsgKCh1MzIpKHVsb25nKSAmKCgoU0tfUE5NSV9TVFJVQ1RfREFUQSAq KTApLT4gUmV0dXJuU3RhdHVzLkVycm9yT2Zmc2V0KSk7IChfX2J1aWx0aW5fY29uc3RhbnRfcCg0 KSA/IF9fY29uc3RhbnRfbWVtY3B5KCgoY2hhciopKHBWYWwpKSwoKGNoYXIqKSYoVmFsMzIpKSwo NCkpIDogX19tZW1jcHkoKChjaGFyKikocFZhbCkpLCgoY2hhciopJihWYWwzMikpLCg0KSkpO307 CiAgICAgICAgICAgICAgICAqcExlbiA9ICgodW5zaWduZWQgaW50KSh1bG9uZykgJigoKFNLX1BO TUlfU1RSVUNUX0RBVEEgKikwKS0+VnBkRnJlZUJ5dGVzKSk7CiAgICAgICAgICAgICAgICByZXR1 cm4gKDEpOwogICAgICAgIH0KCgogICAgICAgIChfX2J1aWx0aW5fY29uc3RhbnRfcCgwKSA/IChf X2J1aWx0aW5fY29uc3RhbnRfcCgoKHNpemVvZihTS19QTk1JX1NUUlVDVF9EQVRBKSkpKSA/IF9f Y29uc3RhbnRfY19hbmRfY291bnRfbWVtc2V0KCgoKGNoYXIgKilwQnVmKSksKCgweDAxMDEwMTAx VUwqKHVuc2lnbmVkIGNoYXIpKDApKSksKCgoc2l6ZW9mKFNLX1BOTUlfU1RSVUNUX0RBVEEpKSkp KSA6IF9fY29uc3RhbnRfY19tZW1zZXQoKCgoY2hhciAqKXBCdWYpKSwoKDB4MDEwMTAxMDFVTCoo dW5zaWduZWQgY2hhcikoMCkpKSwoKChzaXplb2YoU0tfUE5NSV9TVFJVQ1RfREFUQSkpKSkpKSA6 IChfX2J1aWx0aW5fY29uc3RhbnRfcCgoKHNpemVvZihTS19QTk1JX1NUUlVDVF9EQVRBKSkpKSA/ IF9fbWVtc2V0X2dlbmVyaWMoKCgoKGNoYXIgKilwQnVmKSkpLCgoKDApKSksKCgoKHNpemVvZihT S19QTk1JX1NUUlVDVF9EQVRBKSkpKSkpIDogX19tZW1zZXRfZ2VuZXJpYygoKChjaGFyICopcEJ1 ZikpLCgoMCkpLCgoKHNpemVvZihTS19QTk1JX1NUUlVDVF9EQVRBKSkpKSkpKTsKICAgICAgICBm b3IgKFRhYmxlSW5kZXggPSAwOyBUYWJsZUluZGV4IDwgKHNpemVvZihJZFRhYmxlKS9zaXplb2Yo SWRUYWJsZVswXSkpOyBUYWJsZUluZGV4ICsrKSB7CgogICAgICAgICAgICAgICAgSW5zdGFuY2VO byA9IElkVGFibGVbVGFibGVJbmRleF0uSW5zdGFuY2VObzsKICAgICAgICAgICAgICAgIGZvciAo SW5zdGFuY2VDbnQgPSAxOyBJbnN0YW5jZUNudCA8PSBJbnN0YW5jZU5vOwogICAgICAgICAgICAg ICAgICAgICAgICBJbnN0YW5jZUNudCArKykgewoKICAgICAgICAgICAgICAgICAgICAgICAgRHN0 T2Zmc2V0ID0gSWRUYWJsZVtUYWJsZUluZGV4XS5PZmZzZXQgKwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChJbnN0YW5jZUNudCAtIDEpICoKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBJZFRhYmxlW1RhYmxlSW5kZXhdLlN0cnVjdFNpemU7CgoKCgoKCiAgICAgICAgICAg ICAgICAgICAgICAgIGlmIChJZFRhYmxlW1RhYmxlSW5kZXhdLklkID09IDB4RkYwMTAxMDUgfHwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZFRhYmxlW1RhYmxlSW5kZXhdLklkID09 IDB4RkYwMTAxMDYgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZFRhYmxlW1Rh YmxlSW5kZXhdLklkID09IDB4RkYwMTAxMDcgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBJZFRhYmxlW1RhYmxlSW5kZXhdLklkID09IDB4RkYwMTAxMDgpIHsKCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RybmNweSgoY2hhciopKChjaGFyICopJkluc3RhbmNlKSwo Y2hhciopKEtleUFycltJbnN0YW5jZUNudCAtIDFdKSw0KTsKICAgICAgICAgICAgICAgICAgICAg ICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBJbnN0YW5jZSA9ICh1MzIpSW5zdGFuY2VDbnQ7CiAgICAgICAgICAgICAgICAg ICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIFRtcExlbiA9ICpwTGVuIC0gRHN0T2Zm c2V0OwogICAgICAgICAgICAgICAgICAgICAgICBSZXQgPSBJZFRhYmxlW1RhYmxlSW5kZXhdLkZ1 bmMocEFDLCBJb0MsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWRUYWJsZVtU YWJsZUluZGV4XS5JZCwgKGNoYXIgKilwQnVmICsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBEc3RPZmZzZXQsICZUbXBMZW4sIEluc3RhbmNlLCBUYWJsZUluZGV4LCBOZXRJbmRleCk7 CgoKCgoKCgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoUmV0ID09IDYpIHsKCiAgICAgICAg ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKFJldCAhPSAwKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHBBQy0+UG5taS5NYWNVcGRhdGVkRmxhZyAtLTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwQUMtPlBubWkuUmxtdFVwZGF0ZWRGbGFnIC0tOwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHBBQy0+UG5taS5TaXJxVXBkYXRlZEZsYWcgLS07CgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dTMyIFZh bDMyOyBjaGFyICpwVmFsOyBWYWwzMiA9IChSZXQpOyBwVmFsID0gKGNoYXIgKikocEJ1ZikgKyAo KHUzMikodWxvbmcpICYoKChTS19QTk1JX1NUUlVDVF9EQVRBICopMCktPiBSZXR1cm5TdGF0dXMu RXJyb3JTdGF0dXMpKTsgKF9fYnVpbHRpbl9jb25zdGFudF9wKDQpID8gX19jb25zdGFudF9tZW1j cHkoKChjaGFyKikocFZhbCkpLCgoY2hhciopJihWYWwzMikpLCg0KSkgOiBfX21lbWNweSgoKGNo YXIqKShwVmFsKSksKChjaGFyKikmKFZhbDMyKSksKDQpKSk7IFZhbDMyID0gKERzdE9mZnNldCk7 IHBWYWwgPSAoY2hhciAqKShwQnVmKSArICgodTMyKSh1bG9uZykgJigoKFNLX1BOTUlfU1RSVUNU X0RBVEEgKikwKS0+IFJldHVyblN0YXR1cy5FcnJvck9mZnNldCkpOyAoX19idWlsdGluX2NvbnN0 YW50X3AoNCkgPyBfX2NvbnN0YW50X21lbWNweSgoKGNoYXIqKShwVmFsKSksKChjaGFyKikmKFZh bDMyKSksKDQpKSA6IF9fbWVtY3B5KCgoY2hhciopKHBWYWwpKSwoKGNoYXIqKSYoVmFsMzIpKSwo NCkpKTt9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwTGVuID0gKCh1bnNpZ25l ZCBpbnQpKHVsb25nKSAmKCgoU0tfUE5NSV9TVFJVQ1RfREFUQSAqKTApLT5WcGRGcmVlQnl0ZXMp KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFJldCk7CiAgICAgICAg ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHBB Qy0+UG5taS5NYWNVcGRhdGVkRmxhZyAtLTsKICAgICAgICBwQUMtPlBubWkuUmxtdFVwZGF0ZWRG bGFnIC0tOwogICAgICAgIHBBQy0+UG5taS5TaXJxVXBkYXRlZEZsYWcgLS07CgogICAgICAgICpw TGVuID0gKHNpemVvZihTS19QTk1JX1NUUlVDVF9EQVRBKSk7CiAgICAgICAgOwogICAgICAgIHt1 MzIgVmFsMzI7IGNoYXIgKnBWYWw7IFZhbDMyID0gKDApOyBwVmFsID0gKGNoYXIgKikocEJ1Zikg KyAoKHUzMikodWxvbmcpICYoKChTS19QTk1JX1NUUlVDVF9EQVRBICopMCktPiBSZXR1cm5TdGF0 dXMuRXJyb3JTdGF0dXMpKTsgKF9fYnVpbHRpbl9jb25zdGFudF9wKDQpID8gX19jb25zdGFudF9t ZW1jcHkoKChjaGFyKikocFZhbCkpLCgoY2hhciopJihWYWwzMikpLCg0KSkgOiBfX21lbWNweSgo KGNoYXIqKShwVmFsKSksKChjaGFyKikmKFZhbDMyKSksKDQpKSk7IFZhbDMyID0gKCh1MzIpKC0x KSk7IHBWYWwgPSAoY2hhciAqKShwQnVmKSArICgodTMyKSh1bG9uZykgJigoKFNLX1BOTUlfU1RS VUNUX0RBVEEgKikwKS0+IFJldHVyblN0YXR1cy5FcnJvck9mZnNldCkpOyAoX19idWlsdGluX2Nv bnN0YW50X3AoNCkgPyBfX2NvbnN0YW50X21lbWNweSgoKGNoYXIqKShwVmFsKSksKChjaGFyKikm KFZhbDMyKSksKDQpKSA6IF9fbWVtY3B5KCgoY2hhciopKHBWYWwpKSwoKGNoYXIqKSYoVmFsMzIp KSwoNCkpKTt9OwogICAgICAgIHJldHVybiAoMCk7Cn0KIyAxMjk5ICJza2dlcG5taS5jIgppbnQg U2tQbm1pUHJlU2V0U3RydWN0KApTS19BQyAqcEFDLApjaGFyKiBJb0MsCnZvaWQgKnBCdWYsCnVu c2lnbmVkIGludCAqcExlbiwKdTMyIE5ldEluZGV4KQp7CiAgICAgICAgOwoKCgogICAgICAgIHJl dHVybiAoUG5taVN0cnVjdChwQUMsIElvQywgMSwgKGNoYXIgKilwQnVmLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcExlbiwgTmV0SW5kZXgpKTsKfQojIDEzMzcgInNr Z2Vwbm1pLmMiCmludCBTa1BubWlTZXRTdHJ1Y3QoClNLX0FDICpwQUMsCmNoYXIqIElvQywKdm9p ZCAqcEJ1ZiwKdW5zaWduZWQgaW50ICpwTGVuLAp1MzIgTmV0SW5kZXgpCnsKICAgICAgICA7CgoK CiAgICAgICAgcmV0dXJuIChQbm1pU3RydWN0KHBBQywgSW9DLCAyLCAoY2hhciAqKXBCdWYsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTGVuLCBOZXRJbmRleCkpOwp9 CiMgMTQwMiAic2tnZXBubWkuYyIKaW50IFNrUG5taUV2ZW50KApTS19BQyAqcEFDLApjaGFyKiBJ b0MsCnUzMiBFdmVudCwKU0tfRVZQQVJBIFBhcmFtKQp7CiAgICAgICAgdW5zaWduZWQgaW50IFBo eXNQb3J0SW5kZXg7CiAgICAgICAgdW5zaWduZWQgaW50IE1heE5ldE51bWJlcjsKICAgICAgICBp bnQgQ291bnRlckluZGV4OwogICAgICAgIGludCBSZXQ7CiAgICAgICAgdTE2IE1hY1N0YXR1czsK ICAgICAgICB1NjQgT3ZlcmZsb3dTdGF0dXM7CiAgICAgICAgdTY0IE1hc2s7CiAgICAgICAgaW50 IE1hY1R5cGU7CiAgICAgICAgdTY0IFZhbHVlOwogICAgICAgIHUzMiBWYWwzMjsKICAgICAgICB1 MTYgUmVnaXN0ZXI7CiAgICAgICAgU0tfRVZQQVJBIEV2ZW50UGFyYW07CiAgICAgICAgdTY0IE5l d2VzdFZhbHVlOwogICAgICAgIHU2NCBPbGRlc3RWYWx1ZTsKICAgICAgICB1NjQgRGVsdGE7CiAg ICAgICAgU0tfUE5NSV9FU1RJTUFURSAqcEVzdDsKICAgICAgICB1MzIgTmV0SW5kZXg7CiAgICAg ICAgU0tfR0VQT1JUICpwUHJ0OwogICAgICAgIFNLX1BOTUlfVkNUICpwVmN0QmFja3VwRGF0YTsK ICAgICAgICB1MzIgUmV0Q29kZTsKICAgICAgICBpbnQgaTsKICAgICAgICB1MzIgQ2FibGVMZW5n dGg7CiMgMTQ0MCAic2tnZXBubWkuYyIKICAgICAgICA7CgogICAgICAgIE1hY1R5cGUgPSBwQUMt PkdJbmkuR0lNYWNUeXBlOwoKICAgICAgICBzd2l0Y2ggKEV2ZW50KSB7CgogICAgICAgIGNhc2Ug MToKICAgICAgICAgICAgICAgIFBoeXNQb3J0SW5kZXggPSAoaW50KVBhcmFtLlBhcmEzMlswXTsK ICAgICAgICAgICAgICAgIE1hY1N0YXR1cyA9ICh1MTYpUGFyYW0uUGFyYTMyWzFdOwojIDE0NTkg InNrZ2Vwbm1pLmMiCiAgICAgICAgICAgICAgICBPdmVyZmxvd1N0YXR1cyA9IDA7CgoKCgogICAg ICAgICAgICAgICAgaWYgKChwQUMtPkdJbmkuR0lGdW5jLnBGbk1hY092ZXJmbG93KAogICAgICAg ICAgICAgICAgICAgICAgICAgcEFDLCBJb0MsIFBoeXNQb3J0SW5kZXgsIE1hY1N0YXR1cywgJk92 ZXJmbG93U3RhdHVzKSAhPSAwKSB8fAogICAgICAgICAgICAgICAgICAgICAgICAoT3ZlcmZsb3dT dGF0dXMgPT0gMCkpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuICgwKTsKICAgICAgICAgICAgICAgIH0KCgoKCgogICAgICAgICAgICAg ICAgZm9yIChDb3VudGVySW5kZXggPSAwOyBDb3VudGVySW5kZXggPCBzaXplb2YoTWFzaykgKiA4 OwogICAgICAgICAgICAgICAgICAgICAgICBDb3VudGVySW5kZXggKyspIHsKCiAgICAgICAgICAg ICAgICAgICAgICAgIE1hc2sgPSAodTY0KTEgPDwgQ291bnRlckluZGV4OwogICAgICAgICAgICAg ICAgICAgICAgICBpZiAoKE92ZXJmbG93U3RhdHVzICYgTWFzaykgPT0gMCkgewoKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAg fQoKICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChTdGF0T3ZyZmx3Qml0W0NvdW50ZXJJ bmRleF1bTWFjVHlwZV0pIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU0tfUE5NSV9I VFhfVVRJTFVOREVSOgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNLX1BOTUlfSFRYX1VU SUxPVkVSOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKCgmUmVnaXN0ZXIpKSA9 ICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopICgodm9pZCAqKSgoKElvQykpKygoKDB4MjAw MCArICgoUGh5c1BvcnRJbmRleCkpICogKDB4MzAwMCAtIDB4MjAwMCkpIHwgKCgoMHgwMDIwKSkg PDwgMSkpKSkpKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHw9 ICgxPDw0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNp Z25lZCBzaG9ydCAqKSAoKHZvaWQgKikoKCgoSW9DKSkrKCgoMHgyMDAwICsgKChQaHlzUG9ydElu ZGV4KSkgKiAoMHgzMDAwIC0gMHgyMDAwKSkgfCAoKCgweDAwMjApKSA8PCAxKSkpKSkpID0gKCgo UmVnaXN0ZXIpKSkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAg ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU0tfUE5NSV9IUlhfVVRJTFVOREVSOgogICAgICAg ICAgICAgICAgICAgICAgICBjYXNlIFNLX1BOTUlfSFJYX1VUSUxPVkVSOgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICgqKCgmUmVnaXN0ZXIpKSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVk IHNob3J0ICopICgodm9pZCAqKSgoKElvQykpKygoKDB4MjAwMCArICgoUGh5c1BvcnRJbmRleCkp ICogKDB4MzAwMCAtIDB4MjAwMCkpIHwgKCgoMHgwMDMwKSkgPDwgMSkpKSkpKSk7CgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHw9ICgxPDwyKTsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSAoKHZvaWQg KikoKCgoSW9DKSkrKCgoMHgyMDAwICsgKChQaHlzUG9ydEluZGV4KSkgKiAoMHgzMDAwIC0gMHgy MDAwKSkgfCAoKCgweDAwMzApKSA8PCAxKSkpKSkpID0gKCgoUmVnaXN0ZXIpKSkpOwoKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgICAg IGNhc2UgU0tfUE5NSV9IVFhfT0NURVRISUdIOgogICAgICAgICAgICAgICAgICAgICAgICBjYXNl IFNLX1BOTUlfSFRYX09DVEVUTE9XOgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNLX1BO TUlfSFRYX1JFU0VSVkVEOgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNLX1BOTUlfSFJY X09DVEVUSElHSDoKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTS19QTk1JX0hSWF9PQ1RF VExPVzoKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTS19QTk1JX0hSWF9JUkxFTkdUSDoK ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTS19QTk1JX0hSWF9SRVNFUlZFRDoKCgoKCiAg ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU0tfUE5NSV9IVFhfU1lOQzoKICAgICAgICAgICAg ICAgICAgICAgICAgY2FzZSBTS19QTk1JX0hUWF9TWU5DX09DVEVUOgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTS19Q Tk1JX0hSWF9MT05HRlJBTUVTOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChN YWNUeXBlID09IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBB Qy0+UG5taS5Qb3J0W1BoeXNQb3J0SW5kZXhdLgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBDb3VudGVySGlnaFtDb3VudGVySW5kZXhdICsrOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcEFDLT5Qbm1pLlBvcnRbUGh5c1BvcnRJbmRleF0uCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3VudGVySGlnaFtDb3VudGVySW5kZXhd ICsrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAyOgojIDE1NDkgInNrZ2Vwbm1pLmMiCiAgICAg ICAgICAgICAgICBRdWV1ZVNlbnNvclRyYXAocEFDLCA1MDAsCiAgICAgICAgICAgICAgICAgICAg ICAgICh1bnNpZ25lZCBpbnQpUGFyYW0uUGFyYTY0KTsKICAgICAgICAgICAgICAgICh2b2lkKTA7 CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAzOgojIDE1NjkgInNrZ2Vwbm1p LmMiCiAgICAgICAgICAgICAgICBRdWV1ZVNlbnNvclRyYXAocEFDLCA1MDEsCiAgICAgICAgICAg ICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQpUGFyYW0uUGFyYTY0KTsKICAgICAgICAgICAgICAg ICh2b2lkKTA7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSA0OgojIDE1ODkg InNrZ2Vwbm1pLmMiCiAgICAgICAgICAgICAgICBRdWV1ZVNlbnNvclRyYXAocEFDLCA1MDIsCiAg ICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQpUGFyYW0uUGFyYTY0KTsKICAgICAg ICAgICAgICAgICh2b2lkKTA7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSA1 OgojIDE2MDkgInNrZ2Vwbm1pLmMiCiAgICAgICAgICAgICAgICBRdWV1ZVNlbnNvclRyYXAocEFD LCA1MDMsCiAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQpUGFyYW0uUGFyYTY0 KTsKICAgICAgICAgICAgICAgICh2b2lkKTA7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAg ICAgY2FzZSA2OgojIDE2MjggInNrZ2Vwbm1pLmMiCiAgICAgICAgICAgICAgICBwRXN0ID0gJnBB Qy0+UG5taS5SbG10Q2hhbmdlRXN0aW1hdGU7CiAgICAgICAgICAgICAgICBDb3VudGVySW5kZXgg PSBwRXN0LT5Fc3RWYWx1ZUluZGV4ICsgMTsKICAgICAgICAgICAgICAgIGlmIChDb3VudGVySW5k ZXggPT0gNykgewoKICAgICAgICAgICAgICAgICAgICAgICAgQ291bnRlckluZGV4ID0gMDsKICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHBFc3QtPkVzdFZhbHVlSW5kZXggPSBDb3Vu dGVySW5kZXg7CgogICAgICAgICAgICAgICAgTmV3ZXN0VmFsdWUgPSBwQUMtPlBubWkuUmxtdENo YW5nZUN0czsKICAgICAgICAgICAgICAgIE9sZGVzdFZhbHVlID0gcEVzdC0+RXN0VmFsdWVbQ291 bnRlckluZGV4XTsKICAgICAgICAgICAgICAgIHBFc3QtPkVzdFZhbHVlW0NvdW50ZXJJbmRleF0g PSBOZXdlc3RWYWx1ZTsKCgoKCgogICAgICAgICAgICAgICAgaWYgKE5ld2VzdFZhbHVlID49IE9s ZGVzdFZhbHVlKSB7CgogICAgICAgICAgICAgICAgICAgICAgICBEZWx0YSA9IE5ld2VzdFZhbHVl IC0gT2xkZXN0VmFsdWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsK CiAgICAgICAgICAgICAgICAgICAgICAgIERlbHRhID0gKHU2NCkoMCAtIE9sZGVzdFZhbHVlKSAr IE5ld2VzdFZhbHVlOwogICAgICAgICAgICAgICAgfQoKCgoKCgoKICAgICAgICAgICAgICAgIHBB Qy0+UG5taS5SbG10Q2hhbmdlRXN0aW1hdGUuRXN0aW1hdGUgPSBEZWx0YSA8PCA0OwoKCgoKCgog ICAgICAgICAgICAgICAgaWYgKChwQUMtPlBubWkuUmxtdENoYW5nZVRocmVzaG9sZCAhPSAwKSAm JgogICAgICAgICAgICAgICAgICAgICAgICAocEFDLT5Qbm1pLlJsbXRDaGFuZ2VFc3RpbWF0ZS5F c3RpbWF0ZSA+PQogICAgICAgICAgICAgICAgICAgICAgICBwQUMtPlBubWkuUmxtdENoYW5nZVRo cmVzaG9sZCkpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIFF1ZXVlU2ltcGxlVHJhcChwQUMs IDUyMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKTA7CiAgICAgICAgICAgICAgICB9 CgogICAgICAgICAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKDApID8gKF9fYnVpbHRpbl9j b25zdGFudF9wKChzaXplb2YoRXZlbnRQYXJhbSkpKSA/IF9fY29uc3RhbnRfY19hbmRfY291bnRf bWVtc2V0KCgoKGNoYXIgKikgJkV2ZW50UGFyYW0pKSwoKDB4MDEwMTAxMDFVTCoodW5zaWduZWQg Y2hhcikoMCkpKSwoKHNpemVvZihFdmVudFBhcmFtKSkpKSA6IF9fY29uc3RhbnRfY19tZW1zZXQo KCgoY2hhciAqKSAmRXZlbnRQYXJhbSkpLCgoMHgwMTAxMDEwMVVMKih1bnNpZ25lZCBjaGFyKSgw KSkpLCgoc2l6ZW9mKEV2ZW50UGFyYW0pKSkpKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCgoc2l6 ZW9mKEV2ZW50UGFyYW0pKSkgPyBfX21lbXNldF9nZW5lcmljKCgoKChjaGFyICopICZFdmVudFBh cmFtKSkpLCgoKDApKSksKCgoc2l6ZW9mKEV2ZW50UGFyYW0pKSkpKSA6IF9fbWVtc2V0X2dlbmVy aWMoKCgoY2hhciAqKSAmRXZlbnRQYXJhbSkpLCgoMCkpLCgoc2l6ZW9mKEV2ZW50UGFyYW0pKSkp KSk7CiAgICAgICAgICAgICAgICBTa1RpbWVyU3RhcnQocEFDLCBJb0MsICZwQUMtPlBubWkuUmxt dENoYW5nZUVzdGltYXRlLkVzdFRpbWVyLAogICAgICAgICAgICAgICAgICAgICAgICAyODEyNTAw MCwgNCwgNiwKICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnRQYXJhbSk7CiAgICAgICAgICAg ICAgICBicmVhazsKCiAgICAgICAgY2FzZSA4OgoKCgoKICAgICAgICAgICAgICAgIE5ldEluZGV4 ID0gKHUzMilQYXJhbS5QYXJhMzJbMF07CiMgMTcwMSAic2tnZXBubWkuYyIKICAgICAgICAgICAg ICAgIFJlc2V0Q291bnRlcihwQUMsIElvQywgTmV0SW5kZXgpOwoKICAgICAgICAgICAgICAgIGJy ZWFrOwoKICAgICAgICBjYXNlIDk6CiMgMTcyMCAic2tnZXBubWkuYyIKICAgICAgICAgICAgICAg IFBoeXNQb3J0SW5kZXggPSAodW5zaWduZWQgaW50KVBhcmFtLlBhcmE2NDsKCgoKCiAgICAgICAg ICAgICAgICBSZXQgPSBNYWNVcGRhdGUocEFDLCBJb0MsIDAsIHBBQy0+R0luaS5HSU1hY3NGb3Vu ZCAtIDEpOwogICAgICAgICAgICAgICAgaWYgKFJldCAhPSAwKSB7CgogICAgICAgICAgICAgICAg ICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCk7CiAgICAgICAgICAg ICAgICB9CgoKCgogICAgICAgICAgICAgICAgcEFDLT5Qbm1pLk1hY1VwZGF0ZWRGbGFnICsrOwoK ICAgICAgICAgICAgICAgIGZvciAoQ291bnRlckluZGV4ID0gMDsgQ291bnRlckluZGV4IDwgU0tf UE5NSV9NQVhfSURYOwogICAgICAgICAgICAgICAgICAgICAgICBDb3VudGVySW5kZXggKyspIHsK CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghU3RhdEFkZHJbQ291bnRlckluZGV4XVtNYWNU eXBlXS5HZXRPZmZzZXQpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu dWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHBB Qy0+UG5taS5Qb3J0W1BoeXNQb3J0SW5kZXhdLgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIENvdW50ZXJPZmZzZXRbQ291bnRlckluZGV4XSA9IEdldFBoeXNTdGF0VmFsKAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHBBQywgSW9DLCBQaHlzUG9ydEluZGV4LCBDb3VudGVy SW5kZXgpOwogICAgICAgICAgICAgICAgICAgICAgICBwQUMtPlBubWkuUG9ydFtQaHlzUG9ydElu ZGV4XS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3VudGVySGlnaFtDb3VudGVy SW5kZXhdID0gMDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBwQUMtPlBubWku TWFjVXBkYXRlZEZsYWcgLS07CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAx MDoKICAgICAgICAgICAgICAgIFBoeXNQb3J0SW5kZXggPSAodW5zaWduZWQgaW50KVBhcmFtLlBh cmEzMlswXTsKIyAxNzcxICJza2dlcG5taS5jIgogICAgICAgICAgICAgICAgUXVldWVSbG10UG9y dFRyYXAocEFDLCA1MjMsIFBoeXNQb3J0SW5kZXgpOwogICAgICAgICAgICAgICAgKHZvaWQpMDsK CgogICAgICAgICAgICAgICAgaWYgKHBBQy0+R0luaS5HSU1hY1R5cGUgPT0gMCl7CgoKICAgICAg ICAgICAgICAgICAgICAgICAgKHZvaWQpcEFDLT5HSW5pLkdJRnVuYy5wRm5NYWNTdGF0aXN0aWMo cEFDLCBJb0MsIFBoeXNQb3J0SW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg MHgwMzQ4LCAmVmFsMzIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgPSAoKCh1NjQp cEFDLT5Qbm1pLlBvcnRbUGh5c1BvcnRJbmRleF0uCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIENvdW50ZXJIaWdoW1NLX1BOTUlfSFJYX1NIT1JUU10gPDwgMzIpIHwgKHU2NClWYWwz Mik7CiAgICAgICAgICAgICAgICAgICAgICAgIHBBQy0+UG5taS5Qb3J0W1BoeXNQb3J0SW5kZXhd LkNvdW50ZXJPZmZzZXRbU0tfUE5NSV9IUlhfU0hPUlRTXSArPQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFZhbHVlIC0gcEFDLT5Qbm1pLlBvcnRbUGh5c1BvcnRJbmRleF0uUnhTaG9y dFplcm9NYXJrOwogICAgICAgICAgICAgICAgfQoKCiAgICAgICAgICAgICAgICBwQUMtPlBubWku VmN0U3RhdHVzW1BoeXNQb3J0SW5kZXhdIHw9IDEyODsKICAgICAgICAgICAgICAgIGJyZWFrOwoK ICAgIGNhc2UgMTE6CiAgICAgICAgICAgICAgICBQaHlzUG9ydEluZGV4ID0gKHVuc2lnbmVkIGlu dClQYXJhbS5QYXJhMzJbMF07CiMgMTgwOCAic2tnZXBubWkuYyIKICAgICAgICAgICAgICAgIFF1 ZXVlUmxtdFBvcnRUcmFwKHBBQywgNTIyLCBQaHlzUG9ydEluZGV4KTsKICAgICAgICAgICAgICAg ICh2b2lkKTA7CgoKICAgICAgICAgICAgICAgIGlmICgocEFDLT5HSW5pLkdJTWFjVHlwZSA9PSAw KSkgewoKICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpcEFDLT5HSW5pLkdJRnVuYy5wRm5N YWNTdGF0aXN0aWMocEFDLCBJb0MsIFBoeXNQb3J0SW5kZXgsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgMHgwMzQ4LCAmVmFsMzIpOwogICAgICAgICAgICAgICAgICAgICAgICBwQUMt PlBubWkuUG9ydFtQaHlzUG9ydEluZGV4XS5SeFNob3J0WmVyb01hcmsgPQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICgoKHU2NClwQUMtPlBubWkuUG9ydFtQaHlzUG9ydEluZGV4XS4K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ291bnRlckhpZ2hbU0tfUE5NSV9IUlhf U0hPUlRTXSA8PCAzMikgfCAodTY0KVZhbDMyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg ICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIDE0OgogICAgICAgICAgICAgICAgUGh5c1BvcnRJ bmRleCA9ICh1bnNpZ25lZCBpbnQpUGFyYW0uUGFyYTMyWzBdOwogICAgICAgICAgICAgICAgTmV0 SW5kZXggPSAodTMyKVBhcmFtLlBhcmEzMlsxXTsKIyAxODQ0ICJza2dlcG5taS5jIgogICAgICAg ICAgICAgICAgaWYgKFBhcmFtLlBhcmEzMlsxXSAhPSAwKSB7CgogICAgICAgICAgICAgICAgICAg ICAgICByZXR1cm4gKDApOwogICAgICAgICAgICAgICAgfQoKCgoKICAgICAgICAgICAgICAgIGlm ICghcEFDLT5Qbm1pLlBvcnRbUGh5c1BvcnRJbmRleF0uQWN0aXZlRmxhZykgewoKICAgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuICgwKTsKICAgICAgICAgICAgICAgIH0KCgoKCgoKICAgICAg ICAgICAgICAgIGlmIChNYWNVcGRhdGUocEFDLCBJb0MsIDAsIHBBQy0+R0luaS5HSU1hY3NGb3Vu ZCAtIDEpICE9CiAgICAgICAgICAgICAgICAgICAgICAgIDApIHsKCiAgICAgICAgICAgICAgICAg ICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwKTsKICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICAgIHBBQy0+UG5taS5NYWNVcGRhdGVkRmxhZyArKzsKIyAxODc4 ICJza2dlcG5taS5jIgogICAgICAgICAgICAgICAgZm9yIChDb3VudGVySW5kZXggPSAwOyBDb3Vu dGVySW5kZXggPCBTS19QTk1JX01BWF9JRFg7CiAgICAgICAgICAgICAgICAgICAgICAgIENvdW50 ZXJJbmRleCArKykgewoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFTdGF0QWRkcltDb3Vu dGVySW5kZXhdW01hY1R5cGVdLkdldE9mZnNldCkgewoKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg ICAgICAgICAgICAgVmFsdWUgPSBHZXRQaHlzU3RhdFZhbChwQUMsIElvQywgUGh5c1BvcnRJbmRl eCwgQ291bnRlckluZGV4KTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHBBQy0+UG5taS5WaXJ0 dWFsQ291bnRlck9mZnNldFtDb3VudGVySW5kZXhdICs9IFZhbHVlOwogICAgICAgICAgICAgICAg fQoKCgoKICAgICAgICAgICAgICAgIHBBQy0+UG5taS5Qb3J0W1BoeXNQb3J0SW5kZXhdLkFjdGl2 ZUZsYWcgPSAwOwoKICAgICAgICAgICAgICAgIHBBQy0+UG5taS5NYWNVcGRhdGVkRmxhZyAtLTsK ICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIDE1OgogICAgICAgICAgICAgICAg UGh5c1BvcnRJbmRleCA9ICh1bnNpZ25lZCBpbnQpUGFyYW0uUGFyYTMyWzBdOwogICAgICAgICAg ICAgICAgTmV0SW5kZXggPSAodTMyKVBhcmFtLlBhcmEzMlsxXTsKIyAxOTIxICJza2dlcG5taS5j IgogICAgICAgICAgICAgICAgaWYgKFBhcmFtLlBhcmEzMlsxXSAhPSAwKSB7CgogICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4gKDApOwogICAgICAgICAgICAgICAgfQoKCgoKICAgICAgICAg ICAgICAgIGlmIChwQUMtPlBubWkuUG9ydFtQaHlzUG9ydEluZGV4XS5BY3RpdmVGbGFnKSB7Cgog ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDApOwogICAgICAgICAgICAgICAgfQoKCgoK ICAgICAgICAgICAgICAgIHBBQy0+UG5taS5SbG10Q2hhbmdlQ3RzICsrOwogICAgICAgICAgICAg ICAgcEFDLT5Qbm1pLlJsbXRDaGFuZ2VUaW1lID0gKFNrT3NHZXRUaW1lKHBBQykpOwoKCgoKCiAg ICAgICAgICAgICAgICBRdWV1ZVJsbXROZXdNYWNUcmFwKHBBQywgUGh5c1BvcnRJbmRleCk7CiAg ICAgICAgICAgICAgICAodm9pZCkwOwoKCgoKCgogICAgICAgICAgICAgICAgaWYgKE1hY1VwZGF0 ZShwQUMsIElvQywgMCwgcEFDLT5HSW5pLkdJTWFjc0ZvdW5kIC0gMSkgIT0KICAgICAgICAgICAg ICAgICAgICAgICAgMCkgewoKICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAg ICAgICAgICAgICByZXR1cm4gKDApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg cEFDLT5Qbm1pLk1hY1VwZGF0ZWRGbGFnICsrOwoKCgoKCgoKICAgICAgICAgICAgICAgIGZvciAo Q291bnRlckluZGV4ID0gMDsgQ291bnRlckluZGV4IDwgU0tfUE5NSV9NQVhfSURYOwogICAgICAg ICAgICAgICAgICAgICAgICBDb3VudGVySW5kZXggKyspIHsKCiAgICAgICAgICAgICAgICAgICAg ICAgIGlmICghU3RhdEFkZHJbQ291bnRlckluZGV4XVtNYWNUeXBlXS5HZXRPZmZzZXQpIHsKCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAg ICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlID0gR2V0UGh5c1N0YXRWYWwo cEFDLCBJb0MsIFBoeXNQb3J0SW5kZXgsIENvdW50ZXJJbmRleCk7CgogICAgICAgICAgICAgICAg ICAgICAgICBwQUMtPlBubWkuVmlydHVhbENvdW50ZXJPZmZzZXRbQ291bnRlckluZGV4XSAtPSBW YWx1ZTsKICAgICAgICAgICAgICAgIH0KCgoKCiAgICAgICAgICAgICAgICBwQUMtPlBubWkuUG9y dFtQaHlzUG9ydEluZGV4XS5BY3RpdmVGbGFnID0gKCEwKTsKCiAgICAgICAgICAgICAgICBwQUMt PlBubWkuTWFjVXBkYXRlZEZsYWcgLS07CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAg Y2FzZSAxMzoKIyAxOTk2ICJza2dlcG5taS5jIgogICAgICAgICAgICAgICAgUXVldWVTaW1wbGVU cmFwKHBBQywgNTI0KTsKICAgICAgICAgICAgICAgICh2b2lkKTA7CiAgICAgICAgICAgICAgICBi cmVhazsKCiAgICBjYXNlIDE2OgoKCgoKCgoKICAgICAgICAgICAgICAgIE1heE5ldE51bWJlciA9 IHBBQy0+R0luaS5HSU1hY3NGb3VuZDsKICAgICAgICAgICAgICAgIGlmICgoKHVuc2lnbmVkIGlu dClQYXJhbS5QYXJhMzJbMF0gPCAxKQogICAgICAgICAgICAgICAgICAgICAgICB8fCAoKHVuc2ln bmVkIGludClQYXJhbS5QYXJhMzJbMF0gPiBNYXhOZXROdW1iZXIpKSB7CiAgICAgICAgICAgICAg ICAgICAgICAgIHJldHVybiAoNyk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgIGlmICgodW5z aWduZWQgaW50KVBhcmFtLlBhcmEzMlswXSA9PSAxKSB7CiAgICAgICAgICAgICAgICBwQUMtPlBu bWkuRHVhbE5ldEFjdGl2ZUZsYWcgPSAwOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAg ICAgICAgICAgIHBBQy0+UG5taS5EdWFsTmV0QWN0aXZlRmxhZyA9ICghMCk7CiAgICAgICAgfQog ICAgICAgIGJyZWFrOwoKICAgIGNhc2UgMTc6CiAgICAgICAgUGh5c1BvcnRJbmRleCA9IFBhcmFt LlBhcmEzMlswXTsKICAgICAgICBwUHJ0ID0gJnBBQy0+R0luaS5HUFtQaHlzUG9ydEluZGV4XTsK ICAgICAgICBwVmN0QmFja3VwRGF0YSA9ICZwQUMtPlBubWkuVmN0QmFja3VwW1BoeXNQb3J0SW5k ZXhdOwoKICAgICAgICBpZiAocEFDLT5Qbm1pLlZjdFN0YXR1c1tQaHlzUG9ydEluZGV4XSAmIDMy KSB7CiAgICAgICAgICAgICAgICBSZXRDb2RlID0gU2tHbUNhYmxlRGlhZ1N0YXR1cyhwQUMsIElv QywgUGh5c1BvcnRJbmRleCwgMCk7CiAgICAgICAgICAgICAgICBpZiAoUmV0Q29kZSA9PSAyKSB7 CgoKCgogICAgICAgICAgICAgICAgICAgICAgICAoX19idWlsdGluX2NvbnN0YW50X3AoMCkgPyAo X19idWlsdGluX2NvbnN0YW50X3AoKHNpemVvZihQYXJhbSkpKSA/IF9fY29uc3RhbnRfY19hbmRf Y291bnRfbWVtc2V0KCgoKGNoYXIgKikgJlBhcmFtKSksKCgweDAxMDEwMTAxVUwqKHVuc2lnbmVk IGNoYXIpKDApKSksKChzaXplb2YoUGFyYW0pKSkpIDogX19jb25zdGFudF9jX21lbXNldCgoKChj aGFyICopICZQYXJhbSkpLCgoMHgwMTAxMDEwMVVMKih1bnNpZ25lZCBjaGFyKSgwKSkpLCgoc2l6 ZW9mKFBhcmFtKSkpKSkgOiAoX19idWlsdGluX2NvbnN0YW50X3AoKHNpemVvZihQYXJhbSkpKSA/ IF9fbWVtc2V0X2dlbmVyaWMoKCgoKGNoYXIgKikgJlBhcmFtKSkpLCgoKDApKSksKCgoc2l6ZW9m KFBhcmFtKSkpKSkgOiBfX21lbXNldF9nZW5lcmljKCgoKGNoYXIgKikgJlBhcmFtKSksKCgwKSks KChzaXplb2YoUGFyYW0pKSkpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIFBhcmFtLlBhcmEz MlswXSA9IFBoeXNQb3J0SW5kZXg7CiAgICAgICAgICAgICAgICAgICAgICAgIFBhcmFtLlBhcmEz MlsxXSA9IC0xOwogICAgICAgICAgICAgICAgICAgICAgICBTa1RpbWVyU3RhcnQocEFDLCBJb0Ms ICZwQUMtPlBubWkuVmN0VGltZW91dFtQaHlzUG9ydEluZGV4XS5WY3RUaW1lciwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA0MDAwMDAwLCA0LCAxNywgUGFyYW0pOwogICAgICAgICAg ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHBB Qy0+UG5taS5WY3RTdGF0dXNbUGh5c1BvcnRJbmRleF0gJj0gfjMyOwogICAgICAgICAgICAgICAg cEFDLT5Qbm1pLlZjdFN0YXR1c1tQaHlzUG9ydEluZGV4XSB8PQogICAgICAgICAgICAgICAgICAg ICAgICAoMiB8IDY0KTsKCgogICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykg ewogICAgICAgICAgICAgICAgICAgICAgICBpZiAocFBydC0+UE1kaVBhaXJMZW5baV0gPiAzNSkg ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhYmxlTGVuZ3RoID0gMTAwMCAqICgo KDE3NSAqIHBQcnQtPlBNZGlQYWlyTGVuW2ldKSAvIDIxMCkgLSAyOCk7CiAgICAgICAgICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQ2FibGVMZW5ndGggPSAwOwogICAgICAgICAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHBWY3RCYWNrdXBEYXRhLT5QTWRpUGFpckxlbltp XSA9IENhYmxlTGVuZ3RoOwogICAgICAgICAgICAgICAgICAgICAgICBwVmN0QmFja3VwRGF0YS0+ UE1kaVBhaXJTdHNbaV0gPSBwUHJ0LT5QTWRpUGFpclN0c1tpXTsKICAgICAgICAgICAgICAgIH0K CiAgICAgICAgICAgICAgICBQYXJhbS5QYXJhMzJbMF0gPSBQaHlzUG9ydEluZGV4OwogICAgICAg ICAgICAgICAgUGFyYW0uUGFyYTMyWzFdID0gLTE7CiAgICAgICAgICAgICAgICBTa0V2ZW50UXVl dWUocEFDLCAxLCAxLCBQYXJhbSk7CiAgICAgICAgICAgICAgICBTa0V2ZW50RGlzcGF0Y2hlcihw QUMsIElvQyk7CiAgICAgICAgfQoKICAgICAgICBicmVhazsKCiAgICAgICAgZGVmYXVsdDoKICAg ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgOwogICAgICAgIHJldHVybiAo MCk7Cn0KIyAyMDk1ICJza2dlcG5taS5jIgpzdGF0aWMgaW50IFBubWlWYXIoClNLX0FDICpwQUMs CmNoYXIqIElvQywKaW50IEFjdGlvbiwKdTMyIElkLApjaGFyICpwQnVmLAp1bnNpZ25lZCBpbnQg KnBMZW4sCnUzMiBJbnN0YW5jZSwKdTMyIE5ldEluZGV4KQp7CiAgICAgICAgdW5zaWduZWQgaW50 IFRhYmxlSW5kZXg7CiAgICAgICAgaW50IFJldDsKCgogICAgICAgIGlmICgoVGFibGVJbmRleCA9 IExvb2t1cElkKElkKSkgPT0gKHVuc2lnbmVkIGludCkoLTEpKSB7CgogICAgICAgICAgICAgICAg KnBMZW4gPSAwOwogICAgICAgICAgICAgICAgcmV0dXJuICg1KTsKICAgICAgICB9CgoKCgogICAg ICAgIGlmIChOZXRJbmRleCA+PSBwQUMtPlJsbXQuTnVtTmV0cykgewogICAgICAgICAgICAgICAg cmV0dXJuICg3KTsKICAgICAgICB9CgogICAgICAgIDsKCiAgICAgICAgUmV0ID0gSWRUYWJsZVtU YWJsZUluZGV4XS5GdW5jKHBBQywgSW9DLCBBY3Rpb24sIElkLCBwQnVmLCBwTGVuLAogICAgICAg ICAgICAgICAgSW5zdGFuY2UsIFRhYmxlSW5kZXgsIE5ldEluZGV4KTsKCiAgICAgICAgOwoKICAg ICAgICByZXR1cm4gKFJldCk7Cn0KIyAyMTUwICJza2dlcG5taS5jIgpzdGF0aWMgaW50IFBubWlT dHJ1Y3QoClNLX0FDICpwQUMsCmNoYXIqIElvQywKaW50IEFjdGlvbiwKY2hhciAqcEJ1ZiwKdW5z aWduZWQgaW50ICpwTGVuLAp1MzIgTmV0SW5kZXgpCnsKICAgICAgICBpbnQgUmV0OwogICAgICAg IHVuc2lnbmVkIGludCBUYWJsZUluZGV4OwogICAgICAgIHVuc2lnbmVkIGludCBEc3RPZmZzZXQ7 CiAgICAgICAgdW5zaWduZWQgaW50IExlbjsKICAgICAgICB1bnNpZ25lZCBpbnQgSW5zdGFuY2VO bzsKICAgICAgICB1bnNpZ25lZCBpbnQgSW5zdGFuY2VDbnQ7CiAgICAgICAgdTMyIEluc3RhbmNl OwogICAgICAgIHUzMiBJZDsKCgoKICAgICAgICBpZiAoKnBMZW4gPCAoc2l6ZW9mKFNLX1BOTUlf U1RSVUNUX0RBVEEpKSkgewoKCiAgICAgICAgICAgICAgICBpZiAoKnBMZW4gPj0gKCh1bnNpZ25l ZCBpbnQpKHVsb25nKSAmKCgoU0tfUE5NSV9TVFJVQ1RfREFUQSAqKTApLT5WcGRGcmVlQnl0ZXMp KSkgewoKICAgICAgICAgICAgICAgICAgICAgICAge3UzMiBWYWwzMjsgY2hhciAqcFZhbDsgVmFs MzIgPSAoMik7IHBWYWwgPSAoY2hhciAqKShwQnVmKSArICgodTMyKSh1bG9uZykgJigoKFNLX1BO TUlfU1RSVUNUX0RBVEEgKikwKS0+IFJldHVyblN0YXR1cy5FcnJvclN0YXR1cykpOyAoX19idWls dGluX2NvbnN0YW50X3AoNCkgPyBfX2NvbnN0YW50X21lbWNweSgoKGNoYXIqKShwVmFsKSksKChj aGFyKikmKFZhbDMyKSksKDQpKSA6IF9fbWVtY3B5KCgoY2hhciopKHBWYWwpKSwoKGNoYXIqKSYo VmFsMzIpKSwoNCkpKTsgVmFsMzIgPSAoKHUzMikoLTEpKTsgcFZhbCA9IChjaGFyICopKHBCdWYp ICsgKCh1MzIpKHVsb25nKSAmKCgoU0tfUE5NSV9TVFJVQ1RfREFUQSAqKTApLT4gUmV0dXJuU3Rh dHVzLkVycm9yT2Zmc2V0KSk7IChfX2J1aWx0aW5fY29uc3RhbnRfcCg0KSA/IF9fY29uc3RhbnRf bWVtY3B5KCgoY2hhciopKHBWYWwpKSwoKGNoYXIqKSYoVmFsMzIpKSwoNCkpIDogX19tZW1jcHko KChjaGFyKikocFZhbCkpLCgoY2hhciopJihWYWwzMikpLCg0KSkpO307CgogICAgICAgICAgICAg ICAgfQoKICAgICAgICAgICAgICAgICpwTGVuID0gKHNpemVvZihTS19QTk1JX1NUUlVDVF9EQVRB KSk7CiAgICAgICAgICAgICAgICByZXR1cm4gKDIpOwogICAgICAgIH0KCgoKCiAgICAgICAgaWYg KE5ldEluZGV4ID49IHBBQy0+UmxtdC5OdW1OZXRzKSB7CiAgICAgICAgICAgICAgICByZXR1cm4g KDcpOwogICAgICAgIH0KCiAgICAgICAgOwoKCgoKCiAgICAgICAgaWYgKChSZXQgPSBSbG10VXBk YXRlKHBBQywgSW9DLCBOZXRJbmRleCkpICE9IDApIHsKCiAgICAgICAgICAgICAgICB7dTMyIFZh bDMyOyBjaGFyICpwVmFsOyBWYWwzMiA9IChSZXQpOyBwVmFsID0gKGNoYXIgKikocEJ1ZikgKyAo KHUzMikodWxvbmcpICYoKChTS19QTk1JX1NUUlVDVF9EQVRBICopMCktPiBSZXR1cm5TdGF0dXMu RXJyb3JTdGF0dXMpKTsgKF9fYnVpbHRpbl9jb25zdGFudF9wKDQpID8gX19jb25zdGFudF9tZW1j cHkoKChjaGFyKikocFZhbCkpLCgoY2hhciopJihWYWwzMikpLCg0KSkgOiBfX21lbWNweSgoKGNo YXIqKShwVmFsKSksKChjaGFyKikmKFZhbDMyKSksKDQpKSk7IFZhbDMyID0gKCh1MzIpKC0xKSk7 IHBWYWwgPSAoY2hhciAqKShwQnVmKSArICgodTMyKSh1bG9uZykgJigoKFNLX1BOTUlfU1RSVUNU X0RBVEEgKikwKS0+IFJldHVyblN0YXR1cy5FcnJvck9mZnNldCkpOyAoX19idWlsdGluX2NvbnN0 YW50X3AoNCkgPyBfX2NvbnN0YW50X21lbWNweSgoKGNoYXIqKShwVmFsKSksKChjaGFyKikmKFZh bDMyKSksKDQpKSA6IF9fbWVtY3B5KCgoY2hhciopKHBWYWwpKSwoKGNoYXIqKSYoVmFsMzIpKSwo NCkpKTt9OwogICAgICAgICAgICAgICAgKnBMZW4gPSAoKHVuc2lnbmVkIGludCkodWxvbmcpICYo KChTS19QTk1JX1NUUlVDVF9EQVRBICopMCktPlZwZEZyZWVCeXRlcykpOwogICAgICAgICAgICAg ICAgcmV0dXJuIChSZXQpOwogICAgICAgIH0KCiAgICAgICAgaWYgKChSZXQgPSBTaXJxVXBkYXRl KHBBQywgSW9DKSkgIT0gMCkgewoKICAgICAgICAgICAgICAgIHt1MzIgVmFsMzI7IGNoYXIgKnBW YWw7IFZhbDMyID0gKFJldCk7IHBWYWwgPSAoY2hhciAqKShwQnVmKSArICgodTMyKSh1bG9uZykg JigoKFNLX1BOTUlfU1RSVUNUX0RBVEEgKikwKS0+IFJldHVyblN0YXR1cy5FcnJvclN0YXR1cykp OyAoX19idWlsdGluX2NvbnN0YW50X3AoNCkgPyBfX2NvbnN0YW50X21lbWNweSgoKGNoYXIqKShw VmFsKSksKChjaGFyKikmKFZhbDMyKSksKDQpKSA6IF9fbWVtY3B5KCgoY2hhciopKHBWYWwpKSwo KGNoYXIqKSYoVmFsMzIpKSwoNCkpKTsgVmFsMzIgPSAoKHUzMikoLTEpKTsgcFZhbCA9IChjaGFy ICopKHBCdWYpICsgKCh1MzIpKHVsb25nKSAmKCgoU0tfUE5NSV9TVFJVQ1RfREFUQSAqKTApLT4g UmV0dXJuU3RhdHVzLkVycm9yT2Zmc2V0KSk7IChfX2J1aWx0aW5fY29uc3RhbnRfcCg0KSA/IF9f Y29uc3RhbnRfbWVtY3B5KCgoY2hhciopKHBWYWwpKSwoKGNoYXIqKSYoVmFsMzIpKSwoNCkpIDog X19tZW1jcHkoKChjaGFyKikocFZhbCkpLCgoY2hhciopJihWYWwzMikpLCg0KSkpO307CiAgICAg ICAgICAgICAgICAqcExlbiA9ICgodW5zaWduZWQgaW50KSh1bG9uZykgJigoKFNLX1BOTUlfU1RS VUNUX0RBVEEgKikwKS0+VnBkRnJlZUJ5dGVzKSk7CiAgICAgICAgICAgICAgICByZXR1cm4gKFJl dCk7CiAgICAgICAgfQoKICAgICAgICBwQUMtPlBubWkuUmxtdFVwZGF0ZWRGbGFnICsrOwogICAg ICAgIHBBQy0+UG5taS5TaXJxVXBkYXRlZEZsYWcgKys7CgoKICAgICAgICBmb3IgKFRhYmxlSW5k ZXggPSAwOyBUYWJsZUluZGV4IDwgKHNpemVvZihJZFRhYmxlKS9zaXplb2YoSWRUYWJsZVswXSkp OyBUYWJsZUluZGV4ICsrKSB7CgogICAgICAgICAgICAgICAgaWYgKChJZFRhYmxlW1RhYmxlSW5k ZXhdLkFjY2VzcyAhPSAxKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAoSWRUYWJsZVtUYWJs ZUluZGV4XS5BY2Nlc3MgIT0gMikpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIEluc3RhbmNlTm8gPSBJZFRhYmxl W1RhYmxlSW5kZXhdLkluc3RhbmNlTm87CiAgICAgICAgICAgICAgICBJZCA9IElkVGFibGVbVGFi bGVJbmRleF0uSWQ7CgogICAgICAgICAgICAgICAgZm9yIChJbnN0YW5jZUNudCA9IDE7IEluc3Rh bmNlQ250IDw9IEluc3RhbmNlTm87CiAgICAgICAgICAgICAgICAgICAgICAgIEluc3RhbmNlQ250 ICsrKSB7CgogICAgICAgICAgICAgICAgICAgICAgICBEc3RPZmZzZXQgPSBJZFRhYmxlW1RhYmxl SW5kZXhdLk9mZnNldCArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEluc3RhbmNl Q250IC0gMSkgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElkVGFibGVbVGFibGVJ bmRleF0uU3RydWN0U2l6ZTsKCgoKCgoKCiAgICAgICAgICAgICAgICAgICAgICAgIEluc3RhbmNl ID0gKHUzMilJbnN0YW5jZUNudDsKCgoKCiAgICAgICAgICAgICAgICAgICAgICAgIExlbiA9IDA7 CiAgICAgICAgICAgICAgICAgICAgICAgIFJldCA9IElkVGFibGVbVGFibGVJbmRleF0uRnVuYyhw QUMsIElvQywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBJZFRhYmxlW1RhYmxl SW5kZXhdLklkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodm9pZCAqKTApLCAm TGVuLCBJbnN0YW5jZSwgVGFibGVJbmRleCwgTmV0SW5kZXgpOwoKICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKFJldCA9PSA2KSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlm IChSZXQgIT0gMikgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQUMtPlBubWku UmxtdFVwZGF0ZWRGbGFnIC0tOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBQy0+ UG5taS5TaXJxVXBkYXRlZEZsYWcgLS07CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dTMyIFZhbDMyOyBjaGFyICpwVmFs OyBWYWwzMiA9ICgxKTsgcFZhbCA9IChjaGFyICopKHBCdWYpICsgKCh1MzIpKHVsb25nKSAmKCgo U0tfUE5NSV9TVFJVQ1RfREFUQSAqKTApLT4gUmV0dXJuU3RhdHVzLkVycm9yU3RhdHVzKSk7IChf X2J1aWx0aW5fY29uc3RhbnRfcCg0KSA/IF9fY29uc3RhbnRfbWVtY3B5KCgoY2hhciopKHBWYWwp KSwoKGNoYXIqKSYoVmFsMzIpKSwoNCkpIDogX19tZW1jcHkoKChjaGFyKikocFZhbCkpLCgoY2hh ciopJihWYWwzMikpLCg0KSkpOyBWYWwzMiA9IChEc3RPZmZzZXQpOyBwVmFsID0gKGNoYXIgKiko cEJ1ZikgKyAoKHUzMikodWxvbmcpICYoKChTS19QTk1JX1NUUlVDVF9EQVRBICopMCktPiBSZXR1 cm5TdGF0dXMuRXJyb3JPZmZzZXQpKTsgKF9fYnVpbHRpbl9jb25zdGFudF9wKDQpID8gX19jb25z dGFudF9tZW1jcHkoKChjaGFyKikocFZhbCkpLCgoY2hhciopJihWYWwzMikpLCg0KSkgOiBfX21l bWNweSgoKGNoYXIqKShwVmFsKSksKChjaGFyKikmKFZhbDMyKSksKDQpKSk7fTsKCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKnBMZW4gPSAoKHVuc2lnbmVkIGludCkodWxvbmcpICYo KChTS19QTk1JX1NUUlVDVF9EQVRBICopMCktPlZwZEZyZWVCeXRlcykpOwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHJldHVybiAoMSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElkID09IDB4RkYwMTAxMDgpIHsKCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICgqKHBCdWYgKyBEc3RPZmZzZXQpKSB7Cgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIExlbiA9IDMgKyAqKHBCdWYgKyBEc3RPZmZzZXQgKyAzKTsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBMZW4gPSAzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMZW4gPSAxOwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CgoKICAgICAgICAgICAgICAg ICAgICAgICAgUmV0ID0gSWRUYWJsZVtUYWJsZUluZGV4XS5GdW5jKHBBQywgSW9DLCBBY3Rpb24s CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWRUYWJsZVtUYWJsZUluZGV4XS5JZCwg cEJ1ZiArIERzdE9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmTGVuLCBJ bnN0YW5jZSwgVGFibGVJbmRleCwgTmV0SW5kZXgpOwoKICAgICAgICAgICAgICAgICAgICAgICAg aWYgKFJldCAhPSAwKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBQy0+UG5t aS5SbG10VXBkYXRlZEZsYWcgLS07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFD LT5Qbm1pLlNpcnFVcGRhdGVkRmxhZyAtLTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt1MzIgVmFsMzI7IGNoYXIgKnBW YWw7IFZhbDMyID0gKDMpOyBwVmFsID0gKGNoYXIgKikocEJ1ZikgKyAoKHUzMikodWxvbmcpICYo KChTS19QTk1JX1NUUlVDVF9EQVRBICopMCktPiBSZXR1cm5TdGF0dXMuRXJyb3JTdGF0dXMpKTsg KF9fYnVpbHRpbl9jb25zdGFudF9wKDQpID8gX19jb25zdGFudF9tZW1jcHkoKChjaGFyKikocFZh bCkpLCgoY2hhciopJihWYWwzMikpLCg0KSkgOiBfX21lbWNweSgoKGNoYXIqKShwVmFsKSksKChj aGFyKikmKFZhbDMyKSksKDQpKSk7IFZhbDMyID0gKERzdE9mZnNldCk7IHBWYWwgPSAoY2hhciAq KShwQnVmKSArICgodTMyKSh1bG9uZykgJigoKFNLX1BOTUlfU1RSVUNUX0RBVEEgKikwKS0+IFJl dHVyblN0YXR1cy5FcnJvck9mZnNldCkpOyAoX19idWlsdGluX2NvbnN0YW50X3AoNCkgPyBfX2Nv bnN0YW50X21lbWNweSgoKGNoYXIqKShwVmFsKSksKChjaGFyKikmKFZhbDMyKSksKDQpKSA6IF9f bWVtY3B5KCgoY2hhciopKHBWYWwpKSwoKGNoYXIqKSYoVmFsMzIpKSwoNCkpKTt9OwoKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAqcExlbiA9ICgodW5zaWduZWQgaW50KSh1bG9uZykg JigoKFNLX1BOTUlfU1RSVUNUX0RBVEEgKikwKS0+VnBkRnJlZUJ5dGVzKSk7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgzKTsKICAgICAgICAgICAgICAgICAgICAgICAg fQogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcEFDLT5Qbm1pLlJsbXRVcGRh dGVkRmxhZyAtLTsKICAgICAgICBwQUMtPlBubWkuU2lycVVwZGF0ZWRGbGFnIC0tOwoKICAgICAg ICA7CiAgICAgICAge3UzMiBWYWwzMjsgY2hhciAqcFZhbDsgVmFsMzIgPSAoMCk7IHBWYWwgPSAo Y2hhciAqKShwQnVmKSArICgodTMyKSh1bG9uZykgJigoKFNLX1BOTUlfU1RSVUNUX0RBVEEgKikw KS0+IFJldHVyblN0YXR1cy5FcnJvclN0YXR1cykpOyAoX19idWlsdGluX2NvbnN0YW50X3AoNCkg PyBfX2NvbnN0YW50X21lbWNweSgoKGNoYXIqKShwVmFsKSksKChjaGFyKikmKFZhbDMyKSksKDQp KSA6IF9fbWVtY3B5KCgoY2hhciopKHBWYWwpKSwoKGNoYXIqKSYoVmFsMzIpKSwoNCkpKTsgVmFs MzIgPSAoKHUzMikoLTEpKTsgcFZhbCA9IChjaGFyICopKHBCdWYpICsgKCh1MzIpKHVsb25nKSAm KCgoU0tfUE5NSV9TVFJVQ1RfREFUQSAqKTApLT4gUmV0dXJuU3RhdHVzLkVycm9yT2Zmc2V0KSk7 IChfX2J1aWx0aW5fY29uc3RhbnRfcCg0KSA/IF9fY29uc3RhbnRfbWVtY3B5KCgoY2hhciopKHBW YWwpKSwoKGNoYXIqKSYoVmFsMzIpKSwoNCkpIDogX19tZW1jcHkoKChjaGFyKikocFZhbCkpLCgo Y2hhciopJihWYWwzMikpLCg0KSkpO307CiAgICAgICAgcmV0dXJuICgwKTsKfQojIDIzMTcgInNr Z2Vwbm1pLmMiCnN0YXRpYyBpbnQgTG9va3VwSWQoCnUzMiBJZCkKewogICAgICAgIGludCBpOwoK ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgKHNpemVvZihJZFRhYmxlKS9zaXplb2YoSWRUYWJsZVsw XSkpOyBpKyspIHsKCiAgICAgICAgICAgICAgICBpZiAoSWRUYWJsZVtpXS5JZCA9PSBJZCkgewoK ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7CiAgICAgICAgICAgICAgICB9CiAgICAg ICAgfQoKICAgICAgICByZXR1cm4gKC0xKTsKfQojIDIzNTQgInNrZ2Vwbm1pLmMiCnN0YXRpYyBp bnQgT2lkU3RydWN0KApTS19BQyAqcEFDLApjaGFyKiBJb0MsCmludCBBY3Rpb24sCnUzMiBJZCwK Y2hhciAqcEJ1ZiwKdW5zaWduZWQgaW50ICpwTGVuLAp1MzIgSW5zdGFuY2UsCnVuc2lnbmVkIGlu dCBUYWJsZUluZGV4LAp1MzIgTmV0SW5kZXgpCnsKICAgICAgICBpZiAoSWQgIT0gMHhGRjAyMDE5 MCkgewoKICAgICAgICAgICAgICAgIFNrRXJyb3JMb2cocEFDLCAoMUw8PDMpLCAoNDAwICsgMyks CiAgICAgICAgICAgICAgICAgICAgICAgICJPaWRTdHJ1Y3Q6IENhbGxlZCB3aXRoIHdyb25nIE9J RCIpOwoKICAgICAgICAgICAgICAgICpwTGVuID0gMDsKICAgICAgICAgICAgICAgIHJldHVybiAo MSk7CiAgICAgICAgfQoKCgoKICAgICAgICBpZiAoSW5zdGFuY2UgIT0gKHUzMikoLTEpICYmIElu c3RhbmNlICE9IDEpIHsKCiAgICAgICAgICAgICAgICAqcExlbiA9IDA7CiAgICAgICAgICAgICAg ICByZXR1cm4gKDYpOwogICAgICAgIH0KCiAgICAgICAgc3dpdGNoIChBY3Rpb24pIHsKCiAgICAg ICAgY2FzZSAwOgogICAgICAgICAgICAgICAgcmV0dXJuIChTa1BubWlHZXRTdHJ1Y3QocEFDLCBJ b0MsIHBCdWYsIHBMZW4sIE5ldEluZGV4KSk7CgogICAgICAgIGNhc2UgMToKICAgICAgICAgICAg ICAgIHJldHVybiAoU2tQbm1pUHJlU2V0U3RydWN0KHBBQywgSW9DLCBwQnVmLCBwTGVuLCBOZXRJ bmRleCkpOwoKICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgICByZXR1cm4gKFNrUG5taVNl dFN0cnVjdChwQUMsIElvQywgcEJ1ZiwgcExlbiwgTmV0SW5kZXgpKTsKICAgICAgICB9CgogICAg ICAgIFNrRXJyb3JMb2cocEFDLCAoMUw8PDMpLCAoNDAwICsgNCksICJPaWRTdHJ1Y3Q6IENhbGxl ZCB3aXRoIHdyb25nIGFjdGlvbiIpOwoKICAgICAgICAqcExlbiA9IDA7CiAgICAgICAgcmV0dXJu ICgxKTsKfQojIDI0MjEgInNrZ2Vwbm1pLmMiCnN0YXRpYyBpbnQgUGVyZm9ybSgKU0tfQUMgKnBB QywKY2hhciogSW9DLAppbnQgQWN0aW9uLAp1MzIgSWQsCmNoYXIgKnBCdWYsCnVuc2lnbmVkIGlu dCAqcExlbiwKdTMyIEluc3RhbmNlLAp1bnNpZ25lZCBpbnQgVGFibGVJbmRleCwKdTMyIE5ldElu ZGV4KQp7CiAgICAgICAgaW50IFJldDsKICAgICAgICB1MzIgQWN0aW9uT3A7CgoKCgoKICAgICAg ICBpZiAoSW5zdGFuY2UgIT0gKHUzMikoLTEpICYmIEluc3RhbmNlICE9IDEpIHsKCiAgICAgICAg ICAgICAgICAqcExlbiA9IDA7CiAgICAgICAgICAgICAgICByZXR1cm4gKDYpOwogICAgICAgIH0K CiAgICAgICAgaWYgKCpwTGVuIDwgc2l6ZW9mKHUzMikpIHsKCiAgICAgICAgICAgICAgICAqcExl biA9IHNpemVvZih1MzIpOwogICAgICAgICAgICAgICAgcmV0dXJuICgyKTsKICAgICAgICB9CgoK ICAgICAgICBpZiAoQWN0aW9uID09IDApIHsKCgogICAgICAgICAgICAgICAgQWN0aW9uT3AgPSAo dTMyKTE7CiAgICAgICAgICAgICAgICAoX19idWlsdGluX2NvbnN0YW50X3AoNCkgPyBfX2NvbnN0 YW50X21lbWNweSgoKGNoYXIqKShwQnVmKSksKChjaGFyKikmKEFjdGlvbk9wKSksKDQpKSA6IF9f bWVtY3B5KCgoY2hhciopKHBCdWYpKSwoKGNoYXIqKSYoQWN0aW9uT3ApKSwoNCkpKTsKICAgICAg ICAgICAgICAgICpwTGVuID0gc2l6ZW9mKHUzMik7CgogICAgICAgICAgICAgICAgcmV0dXJuICgw KTsKICAgICAgICB9CgoKICAgICAgICBpZiAoKnBMZW4gPiBzaXplb2YodTMyKSkgewoKICAgICAg ICAgICAgICAgIHJldHVybiAoMyk7CiAgICAgICAgfQoKCiAgICAgICAgKF9fYnVpbHRpbl9jb25z dGFudF9wKDIpID8gX19jb25zdGFudF9tZW1jcHkoKChjaGFyKikmKEFjdGlvbk9wKSksKChjaGFy KikocEJ1ZikpLCgyKSkgOiBfX21lbWNweSgoKGNoYXIqKSYoQWN0aW9uT3ApKSwoKGNoYXIqKShw QnVmKSksKDIpKSk7CiAgICAgICAgaWYgKCpwTGVuID4gc2l6ZW9mKHUzMikgfHwKICAgICAgICAg ICAgICAgIChBY3Rpb25PcCAhPSAxICYmCiAgICAgICAgICAgICAgICBBY3Rpb25PcCAhPSAyICYm CiAgICAgICAgICAgICAgICBBY3Rpb25PcCAhPSAzICYmCiAgICAgICAgICAgICAgICBBY3Rpb25P cCAhPSA0KSkgewoKICAgICAgICAgICAgICAgICpwTGVuID0gMDsKICAgICAgICAgICAgICAgIHJl dHVybiAoMyk7CiAgICAgICAgfQoKCiAgICAgICAgaWYgKEFjdGlvbiA9PSAxKSB7CgogICAgICAg ICAgICAgICAgcmV0dXJuICgwKTsKICAgICAgICB9CgogICAgICAgIHN3aXRjaCAoQWN0aW9uT3Ap IHsKCiAgICAgICAgY2FzZSAxOgoKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNl IDI6CgoKCgogICAgICAgICAgICAgICAgUmV0ID0gMDsKICAgICAgICAgICAgICAgIGlmIChSZXQg IT0gMCkgewoKICAgICAgICAgICAgICAgICAgICAgICAgU2tFcnJvckxvZyhwQUMsICgxTDw8Myks ICg0MDAgKyA1KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGVyZm9ybTogQ2Fu bm90IHJlc2V0IGRyaXZlciIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgxKTsK ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIDM6 CgoKCgoKICAgICAgICAgICAgICAgIFJldCA9IDA7CiAgICAgICAgICAgICAgICBwQUMtPlBubWku VGVzdFJlc3VsdCA9IFJldDsKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIDQ6 CgogICAgICAgICAgICAgICAgUmVzZXRDb3VudGVyKHBBQywgSW9DLCBOZXRJbmRleCk7CiAgICAg ICAgICAgICAgICBicmVhazsKCiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIFNrRXJy b3JMb2cocEFDLCAoMUw8PDMpLCAoNDAwICsgNiksCiAgICAgICAgICAgICAgICAgICAgICAgICJQ ZXJmb3JtOiBVbmtub3duIE9JRCBhY3Rpb24gY29tbWFuZCIpOwoKICAgICAgICAgICAgICAgIHJl dHVybiAoMSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gKDApOwp9CiMgMjU1MiAic2tnZXBu bWkuYyIKc3RhdGljIGludCBNYWM4MDIzU3RhdCgKU0tfQUMgKnBBQywKY2hhciogSW9DLAppbnQg QWN0aW9uLAp1MzIgSWQsCmNoYXIgKnBCdWYsCnVuc2lnbmVkIGludCAqcExlbiwKdTMyIEluc3Rh bmNlLAp1bnNpZ25lZCBpbnQgVGFibGVJbmRleCwKdTMyIE5ldEluZGV4KQp7CiAgICAgICAgaW50 IFJldDsKICAgICAgICB1NjQgU3RhdFZhbDsKICAgICAgICB1MzIgU3RhdFZhbDMyOwogICAgICAg IHU4IElzNjRCaXRSZXEgPSAwOwoKCgoKICAgICAgICBpZiAoSW5zdGFuY2UgIT0gKHUzMikoLTEp ICYmIEluc3RhbmNlICE9IDEpIHsKCiAgICAgICAgICAgICAgICAqcExlbiA9IDA7CiAgICAgICAg ICAgICAgICByZXR1cm4gKDYpOwogICAgICAgIH0KCgoKCiAgICAgICAgaWYgKEFjdGlvbiAhPSAw KSB7CgogICAgICAgICAgICAgICAgKnBMZW4gPSAwOwogICAgICAgICAgICAgICAgcmV0dXJuICg0 KTsKICAgICAgICB9CgoKCgogICAgICAgIHN3aXRjaCAoSWQpIHsKCiAgICAgICAgY2FzZSAweDAx MDEwMTAxOgogICAgICAgIGNhc2UgMHgwMTAxMDEwMjoKICAgICAgICAgICAgICAgIGlmICgqcExl biA8IHNpemVvZihTS19NQUNfQUREUikpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICpwTGVu ID0gc2l6ZW9mKFNLX01BQ19BRERSKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgy KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBkZWZh dWx0OgoKICAgICAgICAgICAgICAgIGlmICgqcExlbiA8IHNpemVvZih1MzIpKSB7CiAgICAgICAg ICAgICAgICAgICAgICAgICpwTGVuID0gc2l6ZW9mKHUzMik7CiAgICAgICAgICAgICAgICAgICAg ICAgIHJldHVybiAoMik7CiAgICAgICAgICAgICAgICB9CiMgMjYyMyAic2tnZXBubWkuYyIKICAg ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCgoKCgoKICAgICAgICBSZXQgPSBNYWNVcGRh dGUocEFDLCBJb0MsIDAsIHBBQy0+R0luaS5HSU1hY3NGb3VuZCAtIDEpOwogICAgICAgIGlmICgg UmV0ICE9IDApIHsKCiAgICAgICAgICAgICAgICAqcExlbiA9IDA7CiAgICAgICAgICAgICAgICBy ZXR1cm4gKFJldCk7CiAgICAgICAgfQogICAgICAgIHBBQy0+UG5taS5NYWNVcGRhdGVkRmxhZyAr KzsKCgoKCiAgICAgICAgc3dpdGNoIChJZCkgewoKICAgICAgICBjYXNlIDB4MDEwMTAxMDE6CiAg ICAgICAgICAgICAgICBDb3B5TWFjKHBCdWYsICZwQUMtPkFkZHIuTmV0W05ldEluZGV4XS5QZXJt YW5lbnRNYWNBZGRyZXNzKTsKICAgICAgICAgICAgICAgICpwTGVuID0gc2l6ZW9mKFNLX01BQ19B RERSKTsKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIDB4MDEwMTAxMDI6CiAg ICAgICAgICAgICAgICBDb3B5TWFjKHBCdWYsICZwQUMtPkFkZHIuTmV0W05ldEluZGV4XS5DdXJy ZW50TWFjQWRkcmVzcyk7CiAgICAgICAgICAgICAgICAqcExlbiA9IHNpemVvZihTS19NQUNfQURE Uik7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAg ICAgIFN0YXRWYWwgPSBHZXRTdGF0VmFsKHBBQywgSW9DLCAwLCBJZFRhYmxlW1RhYmxlSW5kZXhd LlBhcmFtLCBOZXRJbmRleCk7CgoKCgogICAgICAgICAgICAgICAgaWYgKCFJczY0Qml0UmVxKSB7 CiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRWYWwzMiA9ICh1MzIpU3RhdFZhbDsKICAgICAg ICAgICAgICAgICAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKDQpID8gX19jb25zdGFudF9t ZW1jcHkoKChjaGFyKikocEJ1ZikpLCgoY2hhciopJihTdGF0VmFsMzIpKSwoNCkpIDogX19tZW1j cHkoKChjaGFyKikocEJ1ZikpLCgoY2hhciopJihTdGF0VmFsMzIpKSwoNCkpKTsKICAgICAgICAg ICAgICAgICAgICAgICAgKnBMZW4gPSBzaXplb2YodTMyKTsKICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAoX19idWlsdGluX2Nv bnN0YW50X3AoOCkgPyBfX2NvbnN0YW50X21lbWNweSgoKGNoYXIqKShwQnVmKSksKChjaGFyKikm KFN0YXRWYWwpKSwoOCkpIDogX19tZW1jcHkoKChjaGFyKikocEJ1ZikpLCgoY2hhciopJihTdGF0 VmFsKSksKDgpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICpwTGVuID0gc2l6ZW9mKHU2NCk7 CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CgogICAg ICAgIHBBQy0+UG5taS5NYWNVcGRhdGVkRmxhZyAtLTsKCiAgICAgICAgcmV0dXJuICgwKTsKfQoj IDI2OTQgInNrZ2Vwbm1pLmMiCnN0YXRpYyBpbnQgTWFjUHJpdmF0ZVN0YXQoClNLX0FDICpwQUMs CmNoYXIqIElvQywKaW50IEFjdGlvbiwKdTMyIElkLApjaGFyICpwQnVmLAp1bnNpZ25lZCBpbnQg KnBMZW4sCnUzMiBJbnN0YW5jZSwKdW5zaWduZWQgaW50IFRhYmxlSW5kZXgsCnUzMiBOZXRJbmRl eCkKewogICAgICAgIHVuc2lnbmVkIGludCBMb2dQb3J0TWF4OwogICAgICAgIHVuc2lnbmVkIGlu dCBMb2dQb3J0SW5kZXg7CiAgICAgICAgdW5zaWduZWQgaW50IFBoeXNQb3J0TWF4OwogICAgICAg IHVuc2lnbmVkIGludCBMaW1pdDsKICAgICAgICB1bnNpZ25lZCBpbnQgT2Zmc2V0OwogICAgICAg IGludCBSZXQ7CiAgICAgICAgdTY0IFN0YXRWYWw7CgoKCgoKCiAgICAgICAgUGh5c1BvcnRNYXgg PSBwQUMtPkdJbmkuR0lNYWNzRm91bmQ7CiAgICAgICAgTG9nUG9ydE1heCA9ICgodW5zaWduZWQg aW50KShQaHlzUG9ydE1heCkgKyAxKTsKCiAgICAgICAgaWYgKHBBQy0+UG5taS5EdWFsTmV0QWN0 aXZlRmxhZyA9PSAoITApKSB7CiAgICAgICAgICAgICAgICBMb2dQb3J0TWF4LS07CiAgICAgICAg fQoKICAgICAgICBpZiAoKEluc3RhbmNlICE9ICh1MzIpKC0xKSkpIHsKCiAgICAgICAgICAgICAg ICBpZiAoKEluc3RhbmNlIDwgMSkgfHwgKEluc3RhbmNlID4gTG9nUG9ydE1heCkpIHsKCiAgICAg ICAgICAgICAgICAgICAgICAgICpwTGVuID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuICg2KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIExvZ1BvcnRJbmRleCA9 ICgodW5zaWduZWQgaW50KShJbnN0YW5jZSkgLSAxKTsKICAgICAgICAgICAgICAgIExpbWl0ID0g TG9nUG9ydEluZGV4ICsgMTsKICAgICAgICB9CgogICAgICAgIGVsc2UgewoKICAgICAgICAgICAg ICAgIExvZ1BvcnRJbmRleCA9IDA7CiAgICAgICAgICAgICAgICBMaW1pdCA9IExvZ1BvcnRNYXg7 CiAgICAgICAgfQoKCgoKCiAgICAgICAgaWYgKEFjdGlvbiAhPSAwKSB7CgogICAgICAgICAgICAg ICAgKnBMZW4gPSAwOwogICAgICAgICAgICAgICAgcmV0dXJuICg0KTsKICAgICAgICB9CgoKCgog ICAgICAgIGlmICgqcExlbiA8IChMaW1pdCAtIExvZ1BvcnRJbmRleCkgKiBzaXplb2YodTY0KSkg ewoKICAgICAgICAgICAgICAgICpwTGVuID0gKExpbWl0IC0gTG9nUG9ydEluZGV4KSAqIHNpemVv Zih1NjQpOwogICAgICAgICAgICAgICAgcmV0dXJuICgyKTsKICAgICAgICB9CgoKCgoKICAgICAg ICBSZXQgPSBNYWNVcGRhdGUocEFDLCBJb0MsIDAsIHBBQy0+R0luaS5HSU1hY3NGb3VuZCAtIDEp OwogICAgICAgIGlmIChSZXQgIT0gMCkgewoKICAgICAgICAgICAgICAgICpwTGVuID0gMDsKICAg ICAgICAgICAgICAgIHJldHVybiAoUmV0KTsKICAgICAgICB9CiAgICAgICAgcEFDLT5Qbm1pLk1h Y1VwZGF0ZWRGbGFnICsrOwoKCgoKICAgICAgICBPZmZzZXQgPSAwOwogICAgICAgIGZvciAoOyBM b2dQb3J0SW5kZXggPCBMaW1pdDsgTG9nUG9ydEluZGV4ICsrKSB7CgogICAgICAgICAgICAgICAg c3dpdGNoIChJZCkgewojIDI3ODkgInNrZ2Vwbm1pLmMiCiAgICAgICAgICAgICAgICBjYXNlIDB4 RkYwMjAxM0E6CiAgICAgICAgICAgICAgICBjYXNlIDB4RkYwMjAxMjA6CiAgICAgICAgICAgICAg ICAgICAgICAgIHN3aXRjaCAocEFDLT5HSW5pLkdJTWFjVHlwZSkgewogICAgICAgICAgICAgICAg ICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdFZhbCA9 IEdldFN0YXRWYWwocEFDLCBJb0MsIExvZ1BvcnRJbmRleCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIElkVGFibGVbVGFibGVJbmRleF0uUGFyYW0sIE5ldEluZGV4KTsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAg ICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSWQgPT0g MHhGRjAyMDEyMCkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0 YXRWYWwgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH ZXRTdGF0VmFsKHBBQywgSW9DLCBMb2dQb3J0SW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTS19QTk1JX0hUWF9C Uk9BRENBU1QsIE5ldEluZGV4KSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEdldFN0YXRWYWwocEFDLCBJb0MsIExvZ1BvcnRJbmRleCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFNLX1BOTUlfSFRYX01VTFRJQ0FTVCwgTmV0SW5kZXgpICsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0U3RhdFZhbChwQUMsIElvQywgTG9nUG9ydElu ZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgU0tfUE5NSV9IVFhfVU5JQ0FTVCwgTmV0SW5kZXgpOwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl bHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRWYWwgPQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRTdGF0VmFs KHBBQywgSW9DLCBMb2dQb3J0SW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTS19QTk1JX0hSWF9CUk9BRENBU1Qs IE5ldEluZGV4KSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEdldFN0YXRWYWwocEFDLCBJb0MsIExvZ1BvcnRJbmRleCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNLX1BOTUlf SFJYX01VTFRJQ0FTVCwgTmV0SW5kZXgpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgR2V0U3RhdFZhbChwQUMsIElvQywgTG9nUG9ydEluZGV4LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgU0tfUE5NSV9IUlhfVU5JQ0FTVCwgTmV0SW5kZXgpICsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0U3RhdFZhbChwQUMsIElvQywgTG9nUG9y dEluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgU0tfUE5NSV9IUlhfVU5ERVJTSVpFLCBOZXRJbmRleCk7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBTdGF0VmFsID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg ICAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKDgpID8gX19jb25zdGFudF9tZW1jcHkoKChj aGFyKikocEJ1ZiArIE9mZnNldCkpLCgoY2hhciopJihTdGF0VmFsKSksKDgpKSA6IF9fbWVtY3B5 KCgoY2hhciopKHBCdWYgKyBPZmZzZXQpKSwoKGNoYXIqKSYoU3RhdFZhbCkpLCg4KSkpOwogICAg ICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAg ICAgICAgICAgICAgICAgICAgICBTdGF0VmFsID0gR2V0U3RhdFZhbChwQUMsIElvQywgTG9nUG9y dEluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElkVGFibGVbVGFibGVJbmRl eF0uUGFyYW0sIE5ldEluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgICAgKF9fYnVpbHRpbl9j b25zdGFudF9wKDgpID8gX19jb25zdGFudF9tZW1jcHkoKChjaGFyKikocEJ1ZiArIE9mZnNldCkp LCgoY2hhciopJihTdGF0VmFsKSksKDgpKSA6IF9fbWVtY3B5KCgoY2hhciopKHBCdWYgKyBPZmZz ZXQpKSwoKGNoYXIqKSYoU3RhdFZhbCkpLCg4KSkpOwogICAgICAgICAgICAgICAgICAgICAgICBi cmVhazsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBPZmZzZXQgKz0gc2l6ZW9m KHU2NCk7CiAgICAgICAgfQogICAgICAgICpwTGVuID0gT2Zmc2V0OwoKICAgICAgICBwQUMtPlBu bWkuTWFjVXBkYXRlZEZsYWcgLS07CgogICAgICAgIHJldHVybiAoMCk7Cn0KIyAyODY5ICJza2dl cG5taS5jIgpzdGF0aWMgaW50IEFkZHIoClNLX0FDICpwQUMsCmNoYXIqIElvQywKaW50IEFjdGlv biwKdTMyIElkLApjaGFyICpwQnVmLAp1bnNpZ25lZCBpbnQgKnBMZW4sCnUzMiBJbnN0YW5jZSwK dW5zaWduZWQgaW50IFRhYmxlSW5kZXgsCnUzMiBOZXRJbmRleCkKewogICAgICAgIGludCBSZXQ7 CiAgICAgICAgdW5zaWduZWQgaW50IExvZ1BvcnRNYXg7CiAgICAgICAgdW5zaWduZWQgaW50IFBo eXNQb3J0TWF4OwogICAgICAgIHVuc2lnbmVkIGludCBMb2dQb3J0SW5kZXg7CiAgICAgICAgdW5z aWduZWQgaW50IFBoeXNQb3J0SW5kZXg7CiAgICAgICAgdW5zaWduZWQgaW50IExpbWl0OwogICAg ICAgIHVuc2lnbmVkIGludCBPZmZzZXQgPSAwOwoKCgoKCiAgICAgICAgUGh5c1BvcnRNYXggPSBw QUMtPkdJbmkuR0lNYWNzRm91bmQ7CiAgICAgICAgTG9nUG9ydE1heCA9ICgodW5zaWduZWQgaW50 KShQaHlzUG9ydE1heCkgKyAxKTsKCiAgICAgICAgaWYgKHBBQy0+UG5taS5EdWFsTmV0QWN0aXZl RmxhZyA9PSAoITApKSB7CiAgICAgICAgICAgICAgICBMb2dQb3J0TWF4LS07CiAgICAgICAgfQoK ICAgICAgICBpZiAoKEluc3RhbmNlICE9ICh1MzIpKC0xKSkpIHsKCiAgICAgICAgICAgICAgICBp ZiAoKEluc3RhbmNlIDwgMSkgfHwgKEluc3RhbmNlID4gTG9nUG9ydE1heCkpIHsKCiAgICAgICAg ICAgICAgICAgICAgICAgICpwTGVuID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu ICg2KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIExvZ1BvcnRJbmRleCA9ICgo dW5zaWduZWQgaW50KShJbnN0YW5jZSkgLSAxKTsKICAgICAgICAgICAgICAgIExpbWl0ID0gTG9n UG9ydEluZGV4ICsgMTsKICAgICAgICB9CgogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAg IExvZ1BvcnRJbmRleCA9IDA7CiAgICAgICAgICAgICAgICBMaW1pdCA9IExvZ1BvcnRNYXg7CiAg ICAgICAgfQoKCgoKICAgICAgICBpZiAoQWN0aW9uID09IDApIHsKCgoKCiAgICAgICAgICAgICAg ICBpZiAoKnBMZW4gPCAoTGltaXQgLSBMb2dQb3J0SW5kZXgpICogNikgewoKICAgICAgICAgICAg ICAgICAgICAgICAgKnBMZW4gPSAoTGltaXQgLSBMb2dQb3J0SW5kZXgpICogNjsKICAgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuICgyKTsKICAgICAgICAgICAgICAgIH0KCgoKCiAgICAgICAg ICAgICAgICBmb3IgKDsgTG9nUG9ydEluZGV4IDwgTGltaXQ7IExvZ1BvcnRJbmRleCArKykgewoK ICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChJZCkgewoKICAgICAgICAgICAgICAgICAg ICAgICAgY2FzZSAweEZGMDEwMTIwOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm IChMb2dQb3J0SW5kZXggPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQ29weU1hYyhwQnVmICsgT2Zmc2V0LCAmcEFDLT5BZGRyLk5ldFtOZXRJbmRleF0uQ3Vy cmVudE1hY0FkZHJlc3MpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFBoeXNQb3J0SW5kZXggPSAoKHVuc2lnbmVkIGludCkoTG9nUG9ydElu ZGV4KSAtIDEpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcHlN YWMocEJ1ZiArIE9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJnBBQy0+QWRkci5Qb3J0W1BoeXNQb3J0SW5kZXhdLkN1cnJlbnRNYWNBZGRyZXNz KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgT2Zmc2V0ICs9IDY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7CgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4RkYwMTAxMjE6CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKExvZ1BvcnRJbmRleCA9PSAwKSB7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3B5TWFjKHBCdWYgKyBPZmZzZXQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwQUMtPkFkZHIu TmV0W05ldEluZGV4XS5QZXJtYW5lbnRNYWNBZGRyZXNzKTsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaHlzUG9ydEluZGV4ID0gKCh1bnNp Z25lZCBpbnQpKExvZ1BvcnRJbmRleCkgLSAxKTsKCgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgQ29weU1hYyhwQnVmICsgT2Zmc2V0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcEFDLT5BZGRyLlBvcnRbUGh5c1BvcnRJbmRl eF0uUGVybWFuZW50TWFjQWRkcmVzcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9mZnNldCArPSA2OwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICAgICAgZGVm YXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa0Vycm9yTG9nKHBBQywgKDFM PDwzKSwgKDQwMCArIDgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IkFkZHI6IFRyaWVkIHRvIGdldCB1bmtub3duIE9JRCIpOwoKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAqcExlbiA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuICgxKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAg ICAgICAgICAgICAgICpwTGVuID0gT2Zmc2V0OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKCgoK CiAgICAgICAgICAgICAgICBpZiAoSWQgPT0gMHhGRjAxMDEyMSkgewoKICAgICAgICAgICAgICAg ICAgICAgICAgKnBMZW4gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDQpOwog ICAgICAgICAgICAgICAgfQoKCgoKICAgICAgICAgICAgICAgIGlmIChJZCAhPSAweEZGMDEwMTIw KSB7CgogICAgICAgICAgICAgICAgICAgICAgICBTa0Vycm9yTG9nKHBBQywgKDFMPDwzKSwgKDQw MCArIDkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBZGRyOiBVbmtub3duIE9J RCIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgKnBMZW4gPSAwOwogICAgICAgICAgICAgICAg ICAgICAgICByZXR1cm4gKDEpOwogICAgICAgICAgICAgICAgfQoKCgoKICAgICAgICAgICAgICAg IGlmICgqcExlbiA8IChMaW1pdCAtIExvZ1BvcnRJbmRleCkgKiA2KSB7CgogICAgICAgICAgICAg ICAgICAgICAgICAqcExlbiA9IChMaW1pdCAtIExvZ1BvcnRJbmRleCkgKiA2OwogICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4gKDIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg ICAgaWYgKCpwTGVuID4gKExpbWl0IC0gTG9nUG9ydEluZGV4KSAqIDYpIHsKCiAgICAgICAgICAg ICAgICAgICAgICAgICpwTGVuID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgz KTsKICAgICAgICAgICAgICAgIH0KCgoKCiAgICAgICAgICAgICAgICBpZiAoQWN0aW9uID09IDEp IHsKCiAgICAgICAgICAgICAgICAgICAgICAgICpwTGVuID0gMDsKICAgICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuICgwKTsKICAgICAgICAgICAgICAgIH0KCgoKCiAgICAgICAgICAgICAgICBm b3IgKDsgTG9nUG9ydEluZGV4IDwgTGltaXQ7IExvZ1BvcnRJbmRleCArKywgT2Zmc2V0ICs9IDYp IHsKCgoKCgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoTG9nUG9ydEluZGV4ID09IDAgfHwg X19idWlsdGluX21lbWNtcChwQnVmICsgT2Zmc2V0LCJceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmYi LDYpID09IDApIHsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog ICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBQaHlzUG9y dEluZGV4ID0gKCh1bnNpZ25lZCBpbnQpKExvZ1BvcnRJbmRleCkgLSAxKTsKCgogICAgICAgICAg ICAgICAgICAgICAgICBSZXQgPSBTa0FkZHJPdmVycmlkZShwQUMsIElvQywgUGh5c1BvcnRJbmRl eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU0tfTUFDX0FERFIgKikocEJ1ZiAr IE9mZnNldCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKExvZ1BvcnRJbmRleCA9 PSAwID8gKDApIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxKSk7CiAgICAgICAg ICAgICAgICAgICAgICAgIGlmIChSZXQgIT0gKDApKSB7CgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHJldHVybiAoMSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgICAgICpwTGVuID0gT2Zmc2V0OwogICAgICAgIH0KCiAgICAg ICAgcmV0dXJuICgwKTsKfQojIDMwNzUgInNrZ2Vwbm1pLmMiCnN0YXRpYyBpbnQgQ3N1bVN0YXQo ClNLX0FDICpwQUMsCmNoYXIqIElvQywKaW50IEFjdGlvbiwKdTMyIElkLApjaGFyICpwQnVmLAp1 bnNpZ25lZCBpbnQgKnBMZW4sCnUzMiBJbnN0YW5jZSwKdW5zaWduZWQgaW50IFRhYmxlSW5kZXgs CnUzMiBOZXRJbmRleCkKewogICAgICAgIHVuc2lnbmVkIGludCBJbmRleDsKICAgICAgICB1bnNp Z25lZCBpbnQgTGltaXQ7CiAgICAgICAgdW5zaWduZWQgaW50IE9mZnNldCA9IDA7CiAgICAgICAg dTY0IFN0YXRWYWw7CgoKCgoKICAgICAgICBpZiAoSW5zdGFuY2UgIT0gKHUzMikoLTEpKSB7Cgog ICAgICAgICAgICAgICAgaWYgKChJbnN0YW5jZSA8IDEpIHx8IChJbnN0YW5jZSA+IDMpKSB7Cgog ICAgICAgICAgICAgICAgICAgICAgICAqcExlbiA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAg IHJldHVybiAoNik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBJbmRleCA9ICh1 bnNpZ25lZCBpbnQpSW5zdGFuY2UgLSAxOwogICAgICAgICAgICAgICAgTGltaXQgPSBJbmRleCAr IDE7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgSW5kZXggPSAwOwog ICAgICAgICAgICAgICAgTGltaXQgPSAzOwogICAgICAgIH0KCgoKCiAgICAgICAgaWYgKEFjdGlv biAhPSAwKSB7CgogICAgICAgICAgICAgICAgKnBMZW4gPSAwOwogICAgICAgICAgICAgICAgcmV0 dXJuICg0KTsKICAgICAgICB9CgoKCgogICAgICAgIGlmICgqcExlbiA8IChMaW1pdCAtIEluZGV4 KSAqIHNpemVvZih1NjQpKSB7CgogICAgICAgICAgICAgICAgKnBMZW4gPSAoTGltaXQgLSBJbmRl eCkgKiBzaXplb2YodTY0KTsKICAgICAgICAgICAgICAgIHJldHVybiAoMik7CiAgICAgICAgfQoK CgoKICAgICAgICBmb3IgKDsgSW5kZXggPCBMaW1pdDsgSW5kZXggKyspIHsKCiAgICAgICAgICAg ICAgICBzd2l0Y2ggKElkKSB7CgogICAgICAgICAgICAgICAgY2FzZSAweEZGMDIwMTExOgogICAg ICAgICAgICAgICAgICAgICAgICBTdGF0VmFsID0gcEFDLT5Dc3VtLlByb3RvU3RhdHNbTmV0SW5k ZXhdW0luZGV4XS5SeE9rQ3RzOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAg ICAgICAgICAgICBjYXNlIDB4RkYwMjAxMTI6CiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRW YWwgPSBwQUMtPkNzdW0uUHJvdG9TdGF0c1tOZXRJbmRleF1bSW5kZXhdLlJ4VW5hYmxlQ3RzOwog ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIDB4RkYw MjAxMTM6CiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRWYWwgPSBwQUMtPkNzdW0uUHJvdG9T dGF0c1tOZXRJbmRleF1bSW5kZXhdLlJ4RXJyQ3RzOwogICAgICAgICAgICAgICAgICAgICAgICBi cmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIDB4RkYwMjAxMTQ6CiAgICAgICAgICAgICAgICAg ICAgICAgIFN0YXRWYWwgPSBwQUMtPkNzdW0uUHJvdG9TdGF0c1tOZXRJbmRleF1bSW5kZXhdLlR4 T2tDdHM7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNh c2UgMHhGRjAyMDExNToKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdFZhbCA9IHBBQy0+Q3N1 bS5Qcm90b1N0YXRzW05ldEluZGV4XVtJbmRleF0uVHhVbmFibGVDdHM7CiAgICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAg ICAgICAgICAgIFNrRXJyb3JMb2cocEFDLCAoMUw8PDMpLCAoNDAwICsgMTApLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJDc3VtU3RhdDogVW5rbm93biBPSUQiKTsKCiAgICAgICAg ICAgICAgICAgICAgICAgICpwTGVuID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu ICgxKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAoX19idWlsdGluX2NvbnN0 YW50X3AoOCkgPyBfX2NvbnN0YW50X21lbWNweSgoKGNoYXIqKShwQnVmICsgT2Zmc2V0KSksKChj aGFyKikmKFN0YXRWYWwpKSwoOCkpIDogX19tZW1jcHkoKChjaGFyKikocEJ1ZiArIE9mZnNldCkp LCgoY2hhciopJihTdGF0VmFsKSksKDgpKSk7CiAgICAgICAgICAgICAgICBPZmZzZXQgKz0gc2l6 ZW9mKHU2NCk7CiAgICAgICAgfQoKCgoKICAgICAgICAqcExlbiA9IE9mZnNldDsKCiAgICAgICAg cmV0dXJuICgwKTsKfQojIDMxOTMgInNrZ2Vwbm1pLmMiCnN0YXRpYyBpbnQgU2Vuc29yU3RhdCgK U0tfQUMgKnBBQywKY2hhciogSW9DLAppbnQgQWN0aW9uLAp1MzIgSWQsCmNoYXIgKnBCdWYsCnVu c2lnbmVkIGludCAqcExlbiwKdTMyIEluc3RhbmNlLAp1bnNpZ25lZCBpbnQgVGFibGVJbmRleCwK dTMyIE5ldEluZGV4KQp7CiAgICAgICAgdW5zaWduZWQgaW50IGk7CiAgICAgICAgdW5zaWduZWQg aW50IEluZGV4OwogICAgICAgIHVuc2lnbmVkIGludCBMaW1pdDsKICAgICAgICB1bnNpZ25lZCBp bnQgT2Zmc2V0OwogICAgICAgIHVuc2lnbmVkIGludCBMZW47CiAgICAgICAgdTMyIFZhbDMyOwog ICAgICAgIHU2NCBWYWw2NDsKCgoKCgogICAgICAgIGlmICgoSW5zdGFuY2UgIT0gKHUzMikoLTEp KSkgewoKICAgICAgICAgICAgICAgIGlmICgoSW5zdGFuY2UgPCAxKSB8fCAoSW5zdGFuY2UgPiAo dTMyKXBBQy0+STJjLk1heFNlbnMpKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAqcExlbiA9 IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoNik7CiAgICAgICAgICAgICAgICB9 CgogICAgICAgICAgICAgICAgSW5kZXggPSAodW5zaWduZWQgaW50KUluc3RhbmNlIC0xOwogICAg ICAgICAgICAgICAgTGltaXQgPSAodW5zaWduZWQgaW50KUluc3RhbmNlOwogICAgICAgIH0KICAg ICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIEluZGV4ID0gMDsKICAgICAgICAgICAgICAgIExp bWl0ID0gKHVuc2lnbmVkIGludCkgcEFDLT5JMmMuTWF4U2VuczsKICAgICAgICB9CgoKCgogICAg ICAgIGlmIChBY3Rpb24gIT0gMCkgewoKICAgICAgICAgICAgICAgICpwTGVuID0gMDsKICAgICAg ICAgICAgICAgIHJldHVybiAoNCk7CiAgICAgICAgfQoKCgoKICAgICAgICBzd2l0Y2ggKElkKSB7 CgogICAgICAgIGNhc2UgMHhGRjAyMDEwNDoKICAgICAgICBjYXNlIDB4RkYwMjAxMDU6CiAgICAg ICAgY2FzZSAweEZGMDIwMTA2OgogICAgICAgIGNhc2UgMHhGRjAyMDEwNzoKICAgICAgICBjYXNl IDB4RkYwMjAxMDg6CiAgICAgICAgICAgICAgICBpZiAoKnBMZW4gPCAoTGltaXQgLSBJbmRleCkg KiBzaXplb2YodTMyKSkgewoKICAgICAgICAgICAgICAgICAgICAgICAgKnBMZW4gPSAoTGltaXQg LSBJbmRleCkgKiBzaXplb2YodTMyKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgy KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNl IDB4RkYwMjAxMDI6CiAgICAgICAgICAgICAgICBmb3IgKE9mZnNldCA9IDAsIGkgPSBJbmRleDsg aSA8IExpbWl0OyBpICsrKSB7CgogICAgICAgICAgICAgICAgICAgICAgICBMZW4gPSAodW5zaWdu ZWQgaW50KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbigoY2hhciopKHBB Qy0+STJjLlNlblRhYmxlW2ldLlNlbkRlc2MpKSArIDE7CiAgICAgICAgICAgICAgICAgICAgICAg IGlmIChMZW4gPj0gMjUpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tFcnJv ckxvZyhwQUMsICgxTDw8MyksICg0MDAgKyAxMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiU2Vuc29yU3RhdDogU2Vuc29yIGRlc2NyIHN0cmluZyB0b28gbG9uZyIp OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcExlbiA9IDA7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgxKTsKICAgICAgICAgICAgICAgICAgICAgICAg fQogICAgICAgICAgICAgICAgICAgICAgICBPZmZzZXQgKz0gTGVuOwogICAgICAgICAgICAgICAg fQogICAgICAgICAgICAgICAgaWYgKCpwTGVuIDwgT2Zmc2V0KSB7CgogICAgICAgICAgICAgICAg ICAgICAgICAqcExlbiA9IE9mZnNldDsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgy KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNl IDB4RkYwMjAxMDE6CiAgICAgICAgY2FzZSAweEZGMDIwMTAzOgogICAgICAgIGNhc2UgMHhGRjAy MDEwOToKICAgICAgICAgICAgICAgIGlmICgqcExlbiA8IExpbWl0IC0gSW5kZXgpIHsKCiAgICAg ICAgICAgICAgICAgICAgICAgICpwTGVuID0gTGltaXQgLSBJbmRleDsKICAgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuICgyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJy ZWFrOwoKICAgICAgICBjYXNlIDB4RkYwMjAxMEE6CiAgICAgICAgY2FzZSAweEZGMDIwMTBDOgog ICAgICAgIGNhc2UgMHhGRjAyMDEwQjoKICAgICAgICBjYXNlIDB4RkYwMjAxMEQ6CiAgICAgICAg ICAgICAgICBpZiAoKnBMZW4gPCAoTGltaXQgLSBJbmRleCkgKiBzaXplb2YodTY0KSkgewoKICAg ICAgICAgICAgICAgICAgICAgICAgKnBMZW4gPSAoTGltaXQgLSBJbmRleCkgKiBzaXplb2YodTY0 KTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgyKTsKICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAg U2tFcnJvckxvZyhwQUMsICgxTDw8MyksICg0MDAgKyAxMiksCiAgICAgICAgICAgICAgICAgICAg ICAgICJTZW5zb3JTdGF0OiBVbmtub3duIE9JRCIpOwoKICAgICAgICAgICAgICAgICpwTGVuID0g MDsKICAgICAgICAgICAgICAgIHJldHVybiAoMSk7CgogICAgICAgIH0KCgoKCiAgICAgICAgZm9y IChPZmZzZXQgPSAwOyBJbmRleCA8IExpbWl0OyBJbmRleCArKykgewoKICAgICAgICAgICAgICAg IHN3aXRjaCAoSWQpIHsKCiAgICAgICAgICAgICAgICBjYXNlIDB4RkYwMjAxMDE6CiAgICAgICAg ICAgICAgICAgICAgICAgICoocEJ1ZiArIE9mZnNldCkgPSAoY2hhcilJbmRleDsKICAgICAgICAg ICAgICAgICAgICAgICAgT2Zmc2V0ICs9IHNpemVvZihjaGFyKTsKICAgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSAweEZGMDIwMTAyOgogICAgICAgICAg ICAgICAgICAgICAgICBMZW4gPSBzdHJsZW4oKGNoYXIqKShwQUMtPkkyYy5TZW5UYWJsZVtJbmRl eF0uU2VuRGVzYykpOwogICAgICAgICAgICAgICAgICAgICAgICAoX19idWlsdGluX2NvbnN0YW50 X3AoTGVuKSA/IF9fY29uc3RhbnRfbWVtY3B5KChwQnVmICsgT2Zmc2V0ICsgMSksKHBBQy0+STJj LlNlblRhYmxlW0luZGV4XS5TZW5EZXNjKSwoTGVuKSkgOiBfX21lbWNweSgocEJ1ZiArIE9mZnNl dCArIDEpLChwQUMtPkkyYy5TZW5UYWJsZVtJbmRleF0uU2VuRGVzYyksKExlbikpKTsKCiAgICAg ICAgICAgICAgICAgICAgICAgICoocEJ1ZiArIE9mZnNldCkgPSAoY2hhcilMZW47CiAgICAgICAg ICAgICAgICAgICAgICAgIE9mZnNldCArPSBMZW4gKyAxOwogICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIDB4RkYwMjAxMDM6CiAgICAgICAgICAgICAg ICAgICAgICAgICoocEJ1ZiArIE9mZnNldCkgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChjaGFyKXBBQy0+STJjLlNlblRhYmxlW0luZGV4XS5TZW5UeXBlOwogICAgICAgICAgICAg ICAgICAgICAgICBPZmZzZXQgKz0gc2l6ZW9mKGNoYXIpOwogICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIDB4RkYwMjAxMDQ6CiAgICAgICAgICAgICAg ICAgICAgICAgIFZhbDMyID0gKHUzMilwQUMtPkkyYy5TZW5UYWJsZVtJbmRleF0uU2VuVmFsdWU7 CiAgICAgICAgICAgICAgICAgICAgICAgIChfX2J1aWx0aW5fY29uc3RhbnRfcCg0KSA/IF9fY29u c3RhbnRfbWVtY3B5KCgoY2hhciopKHBCdWYgKyBPZmZzZXQpKSwoKGNoYXIqKSYoVmFsMzIpKSwo NCkpIDogX19tZW1jcHkoKChjaGFyKikocEJ1ZiArIE9mZnNldCkpLCgoY2hhciopJihWYWwzMikp LCg0KSkpOwogICAgICAgICAgICAgICAgICAgICAgICBPZmZzZXQgKz0gc2l6ZW9mKHUzMik7CiAg ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgMHhGRjAy MDEwNToKICAgICAgICAgICAgICAgICAgICAgICAgVmFsMzIgPSAodTMyKXBBQy0+STJjLlNlblRh YmxlW0luZGV4XS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZW5UaHJlV2Fybkxv dzsKICAgICAgICAgICAgICAgICAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKDQpID8gX19j b25zdGFudF9tZW1jcHkoKChjaGFyKikocEJ1ZiArIE9mZnNldCkpLCgoY2hhciopJihWYWwzMikp LCg0KSkgOiBfX21lbWNweSgoKGNoYXIqKShwQnVmICsgT2Zmc2V0KSksKChjaGFyKikmKFZhbDMy KSksKDQpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIE9mZnNldCArPSBzaXplb2YodTMyKTsK ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSAweEZG MDIwMTA2OgogICAgICAgICAgICAgICAgICAgICAgICBWYWwzMiA9ICh1MzIpcEFDLT5JMmMuU2Vu VGFibGVbSW5kZXhdLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlblRocmVXYXJu SGlnaDsKICAgICAgICAgICAgICAgICAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKDQpID8g X19jb25zdGFudF9tZW1jcHkoKChjaGFyKikocEJ1ZiArIE9mZnNldCkpLCgoY2hhciopJihWYWwz MikpLCg0KSkgOiBfX21lbWNweSgoKGNoYXIqKShwQnVmICsgT2Zmc2V0KSksKChjaGFyKikmKFZh bDMyKSksKDQpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIE9mZnNldCArPSBzaXplb2YodTMy KTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSAw eEZGMDIwMTA3OgogICAgICAgICAgICAgICAgICAgICAgICBWYWwzMiA9ICh1MzIpcEFDLT5JMmMu U2VuVGFibGVbSW5kZXhdLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlblRocmVF cnJMb3c7CiAgICAgICAgICAgICAgICAgICAgICAgIChfX2J1aWx0aW5fY29uc3RhbnRfcCg0KSA/ IF9fY29uc3RhbnRfbWVtY3B5KCgoY2hhciopKHBCdWYgKyBPZmZzZXQpKSwoKGNoYXIqKSYoVmFs MzIpKSwoNCkpIDogX19tZW1jcHkoKChjaGFyKikocEJ1ZiArIE9mZnNldCkpLCgoY2hhciopJihW YWwzMikpLCg0KSkpOwogICAgICAgICAgICAgICAgICAgICAgICBPZmZzZXQgKz0gc2l6ZW9mKHUz Mik7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2Ug MHhGRjAyMDEwODoKICAgICAgICAgICAgICAgICAgICAgICAgVmFsMzIgPSBwQUMtPkkyYy5TZW5U YWJsZVtJbmRleF0uU2VuVGhyZUVyckhpZ2g7CiAgICAgICAgICAgICAgICAgICAgICAgIChfX2J1 aWx0aW5fY29uc3RhbnRfcCg0KSA/IF9fY29uc3RhbnRfbWVtY3B5KCgoY2hhciopKHBCdWYgKyBP ZmZzZXQpKSwoKGNoYXIqKSYoVmFsMzIpKSwoNCkpIDogX19tZW1jcHkoKChjaGFyKikocEJ1ZiAr IE9mZnNldCkpLCgoY2hhciopJihWYWwzMikpLCg0KSkpOwogICAgICAgICAgICAgICAgICAgICAg ICBPZmZzZXQgKz0gc2l6ZW9mKHUzMik7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoK ICAgICAgICAgICAgICAgIGNhc2UgMHhGRjAyMDEwOToKICAgICAgICAgICAgICAgICAgICAgICAg KihwQnVmICsgT2Zmc2V0KSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIp cEFDLT5JMmMuU2VuVGFibGVbSW5kZXhdLlNlbkVyckZsYWc7CiAgICAgICAgICAgICAgICAgICAg ICAgIE9mZnNldCArPSBzaXplb2YoY2hhcik7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OwoKICAgICAgICAgICAgICAgIGNhc2UgMHhGRjAyMDEwQToKICAgICAgICAgICAgICAgICAgICAg ICAgVmFsNjQgPSBwQUMtPkkyYy5TZW5UYWJsZVtJbmRleF0uU2VuV2FybkN0czsKICAgICAgICAg ICAgICAgICAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKDgpID8gX19jb25zdGFudF9tZW1j cHkoKChjaGFyKikocEJ1ZiArIE9mZnNldCkpLCgoY2hhciopJihWYWw2NCkpLCg4KSkgOiBfX21l bWNweSgoKGNoYXIqKShwQnVmICsgT2Zmc2V0KSksKChjaGFyKikmKFZhbDY0KSksKDgpKSk7CiAg ICAgICAgICAgICAgICAgICAgICAgIE9mZnNldCArPSBzaXplb2YodTY0KTsKICAgICAgICAgICAg ICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSAweEZGMDIwMTBCOgogICAg ICAgICAgICAgICAgICAgICAgICBWYWw2NCA9IHBBQy0+STJjLlNlblRhYmxlW0luZGV4XS5TZW5F cnJDdHM7CiAgICAgICAgICAgICAgICAgICAgICAgIChfX2J1aWx0aW5fY29uc3RhbnRfcCg4KSA/ IF9fY29uc3RhbnRfbWVtY3B5KCgoY2hhciopKHBCdWYgKyBPZmZzZXQpKSwoKGNoYXIqKSYoVmFs NjQpKSwoOCkpIDogX19tZW1jcHkoKChjaGFyKikocEJ1ZiArIE9mZnNldCkpLCgoY2hhciopJihW YWw2NCkpLCg4KSkpOwogICAgICAgICAgICAgICAgICAgICAgICBPZmZzZXQgKz0gc2l6ZW9mKHU2 NCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2Ug MHhGRjAyMDEwQzoKICAgICAgICAgICAgICAgICAgICAgICAgVmFsNjQgPSAocEFDLT5JMmMuU2Vu VGFibGVbSW5kZXhdLiBTZW5CZWdXYXJuVFMpOwoKICAgICAgICAgICAgICAgICAgICAgICAgKF9f YnVpbHRpbl9jb25zdGFudF9wKDgpID8gX19jb25zdGFudF9tZW1jcHkoKChjaGFyKikocEJ1ZiAr IE9mZnNldCkpLCgoY2hhciopJihWYWw2NCkpLCg4KSkgOiBfX21lbWNweSgoKGNoYXIqKShwQnVm ICsgT2Zmc2V0KSksKChjaGFyKikmKFZhbDY0KSksKDgpKSk7CiAgICAgICAgICAgICAgICAgICAg ICAgIE9mZnNldCArPSBzaXplb2YodTY0KTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 CgogICAgICAgICAgICAgICAgY2FzZSAweEZGMDIwMTBEOgogICAgICAgICAgICAgICAgICAgICAg ICBWYWw2NCA9IChwQUMtPkkyYy5TZW5UYWJsZVtJbmRleF0uIFNlbkJlZ0VyclRTKTsKCiAgICAg ICAgICAgICAgICAgICAgICAgIChfX2J1aWx0aW5fY29uc3RhbnRfcCg4KSA/IF9fY29uc3RhbnRf bWVtY3B5KCgoY2hhciopKHBCdWYgKyBPZmZzZXQpKSwoKGNoYXIqKSYoVmFsNjQpKSwoOCkpIDog X19tZW1jcHkoKChjaGFyKikocEJ1ZiArIE9mZnNldCkpLCgoY2hhciopJihWYWw2NCkpLCg4KSkp OwogICAgICAgICAgICAgICAgICAgICAgICBPZmZzZXQgKz0gc2l6ZW9mKHU2NCk7CiAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg ICAgICAgICAgICAgICAgIDsKCgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDEpOwog ICAgICAgICAgICAgICAgfQogICAgICAgIH0KCgoKCiAgICAgICAgKnBMZW4gPSBPZmZzZXQ7Cgog ICAgICAgIHJldHVybiAoMCk7Cn0KIyAzNDQwICJza2dlcG5taS5jIgpzdGF0aWMgaW50IFZwZCgK U0tfQUMgKnBBQywKY2hhciogSW9DLAppbnQgQWN0aW9uLAp1MzIgSWQsCmNoYXIgKnBCdWYsCnVu c2lnbmVkIGludCAqcExlbiwKdTMyIEluc3RhbmNlLAp1bnNpZ25lZCBpbnQgVGFibGVJbmRleCwK dTMyIE5ldEluZGV4KQp7CiAgICAgICAgU0tfVlBEX1NUQVRVUyAqcFZwZFN0YXR1czsKICAgICAg ICB1bnNpZ25lZCBpbnQgQnVmTGVuOwogICAgICAgIGNoYXIgQnVmWzI1Nl07CiAgICAgICAgY2hh ciBLZXlBcnJbKDUxMiAvIDQpXVs1XTsKICAgICAgICBjaGFyIEtleVN0cls1XTsKICAgICAgICB1 bnNpZ25lZCBpbnQgS2V5Tm87CiAgICAgICAgdW5zaWduZWQgaW50IE9mZnNldDsKICAgICAgICB1 bnNpZ25lZCBpbnQgSW5kZXg7CiAgICAgICAgdW5zaWduZWQgaW50IEZpcnN0SW5kZXg7CiAgICAg ICAgdW5zaWduZWQgaW50IExhc3RJbmRleDsKICAgICAgICB1bnNpZ25lZCBpbnQgTGVuOwogICAg ICAgIGludCBSZXQ7CiAgICAgICAgdTMyIFZhbDMyOwoKCgoKICAgICAgICBSZXQgPSBHZXRWcGRL ZXlBcnIocEFDLCBJb0MsICZLZXlBcnJbMF1bMF0sIHNpemVvZihLZXlBcnIpLAogICAgICAgICAg ICAgICAgJktleU5vKTsKICAgICAgICBpZiAoUmV0ICE9IDApIHsKICAgICAgICAgICAgICAgICpw TGVuID0gMDsKICAgICAgICAgICAgICAgIHJldHVybiAoUmV0KTsKICAgICAgICB9CgoKCgoKCgog ICAgICAgIEZpcnN0SW5kZXggPSAwOwogICAgICAgIExhc3RJbmRleCA9IEtleU5vOwoKICAgICAg ICBpZiAoKEluc3RhbmNlICE9ICh1MzIpKC0xKSkpIHsKCiAgICAgICAgICAgICAgICBpZiAoSWQg PT0gMHhGRjAxMDEwNSB8fCBJZCA9PSAweEZGMDEwMTA2IHx8CiAgICAgICAgICAgICAgICAgICAg ICAgIElkID09IDB4RkYwMTAxMDcpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm5jcHko KGNoYXIqKShLZXlTdHIpLChjaGFyKikoKGNoYXIgKikmSW5zdGFuY2UpLDQpOwogICAgICAgICAg ICAgICAgICAgICAgICBLZXlTdHJbNF0gPSAwOwoKICAgICAgICAgICAgICAgICAgICAgICAgZm9y IChJbmRleCA9IDA7IEluZGV4IDwgS2V5Tm87IEluZGV4ICsrKSB7CgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGlmIChzdHJjbXAoKGNoYXIqKShLZXlTdHIpLChjaGFyKikoS2V5QXJy W0luZGV4XSkpID09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZpcnN0SW5kZXggPSBJbmRleDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIExhc3RJbmRleCA9IEluZGV4KzE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEluZGV4ID09IEtl eU5vKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwTGVuID0gMDsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDYpOwogICAgICAgICAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0YW5j ZSAhPSAxKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAqcExlbiA9IDA7CiAgICAgICAgICAg ICAgICAgICAgICAgIHJldHVybiAoNik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKCgoK ICAgICAgICBpZiAoQWN0aW9uID09IDApIHsKCiAgICAgICAgICAgICAgICBzd2l0Y2ggKElkKSB7 CgogICAgICAgICAgICAgICAgY2FzZSAweEZGMDEwMTAyOgoKICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKCpwTGVuIDwgc2l6ZW9mKHUzMikpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKnBMZW4gPSBzaXplb2YodTMyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4gKDIpOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg ICAgICAgICBwVnBkU3RhdHVzID0gVnBkU3RhdChwQUMsIElvQyk7CiAgICAgICAgICAgICAgICAg ICAgICAgIGlmIChwVnBkU3RhdHVzID09ICgodm9pZCAqKTApKSB7CgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFNrRXJyb3JMb2cocEFDLCAoMUw8PDMpLCAoNDAwICsgMTcpLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlZwZDogSW52YWxpZCBWUEQgc3Rh dHVzIHBvaW50ZXIiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnBMZW4gPSAw OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMSk7CiAgICAgICAgICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChwVnBkU3RhdHVzLT52 cGRfc3RhdHVzICYgKDE8PDApKSA9PSAwKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFNrRXJyb3JMb2cocEFDLCAoMUw8PDMpLCAoNDAwICsgMTgpLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIlZwZDogVlBEIGRhdGEgbm90IHZhbGlkIik7CgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwTGVuID0gMDsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4gKDEpOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAg ICAgICAgICAgICAgICAgICAgICBWYWwzMiA9ICh1MzIpcFZwZFN0YXR1cy0+dnBkX2ZyZWVfcnc7 CiAgICAgICAgICAgICAgICAgICAgICAgIChfX2J1aWx0aW5fY29uc3RhbnRfcCg0KSA/IF9fY29u c3RhbnRfbWVtY3B5KCgoY2hhciopKHBCdWYpKSwoKGNoYXIqKSYoVmFsMzIpKSwoNCkpIDogX19t ZW1jcHkoKChjaGFyKikocEJ1ZikpLCgoY2hhciopJihWYWwzMikpLCg0KSkpOwogICAgICAgICAg ICAgICAgICAgICAgICAqcExlbiA9IHNpemVvZih1MzIpOwogICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIDB4RkYwMTAxMDM6CgogICAgICAgICAgICAg ICAgICAgICAgICBmb3IgKExlbiA9IDAsIEluZGV4ID0gMDsgSW5kZXggPCBLZXlObzsgSW5kZXgg KyspIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGVuICs9IHN0cmxlbigoY2hh ciopKEtleUFycltJbmRleF0pKSArIDE7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKCpwTGVuIDwgTGVuKSB7CgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICpwTGVuID0gTGVuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHJldHVybiAoMik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCgogICAgICAgICAgICAgICAg ICAgICAgICAqKHBCdWYpID0gKGNoYXIpTGVuIC0gMTsKICAgICAgICAgICAgICAgICAgICAgICAg Zm9yIChPZmZzZXQgPSAxLCBJbmRleCA9IDA7IEluZGV4IDwgS2V5Tm87IEluZGV4ICsrKSB7Cgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExlbiA9IHN0cmxlbigoY2hhciopKEtleUFy cltJbmRleF0pKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19idWlsdGluX2Nv bnN0YW50X3AoTGVuKSA/IF9fY29uc3RhbnRfbWVtY3B5KChwQnVmICsgT2Zmc2V0KSwoS2V5QXJy W0luZGV4XSksKExlbikpIDogX19tZW1jcHkoKHBCdWYgKyBPZmZzZXQpLChLZXlBcnJbSW5kZXhd KSwoTGVuKSkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPZmZzZXQgKz0gTGVu OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSW5kZXggPCBLZXlObyAtIDEp IHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKHBCdWYgKyBPZmZz ZXQpID0gJyAnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2Zmc2V0 ICsrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAqcExlbiA9IE9mZnNldDsKICAgICAgICAg ICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSAweEZGMDEwMTA0OgoK ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCpwTGVuIDwgc2l6ZW9mKHUzMikpIHsKCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKnBMZW4gPSBzaXplb2YodTMyKTsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDIpOwogICAgICAgICAgICAgICAgICAgICAg ICB9CgogICAgICAgICAgICAgICAgICAgICAgICBWYWwzMiA9ICh1MzIpS2V5Tm87CiAgICAgICAg ICAgICAgICAgICAgICAgIChfX2J1aWx0aW5fY29uc3RhbnRfcCg0KSA/IF9fY29uc3RhbnRfbWVt Y3B5KCgoY2hhciopKHBCdWYpKSwoKGNoYXIqKSYoVmFsMzIpKSwoNCkpIDogX19tZW1jcHkoKChj aGFyKikocEJ1ZikpLCgoY2hhciopJihWYWwzMikpLCg0KSkpOwogICAgICAgICAgICAgICAgICAg ICAgICAqcExlbiA9IHNpemVvZih1MzIpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK CiAgICAgICAgICAgICAgICBjYXNlIDB4RkYwMTAxMDU6CgogICAgICAgICAgICAgICAgICAgICAg ICBmb3IgKExlbiA9IDAsIEluZGV4ID0gRmlyc3RJbmRleDsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBJbmRleCA8IExhc3RJbmRleDsgSW5kZXggKyspIHsKCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTGVuICs9IHN0cmxlbigoY2hhciopKEtleUFycltJbmRleF0pKSAr IDE7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYg KCpwTGVuIDwgTGVuKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwTGVuID0g TGVuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMik7CiAgICAgICAg ICAgICAgICAgICAgICAgIH0KCgoKCgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKE9mZnNl dCA9IDAsIEluZGV4ID0gRmlyc3RJbmRleDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBJbmRleCA8IExhc3RJbmRleDsgSW5kZXggKyspIHsKCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTGVuID0gc3RybGVuKChjaGFyKikoS2V5QXJyW0luZGV4XSkpOwoKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqKHBCdWYgKyBPZmZzZXQpID0gKGNoYXIpTGVuOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX2J1aWx0aW5fY29uc3RhbnRfcChMZW4pID8g X19jb25zdGFudF9tZW1jcHkoKHBCdWYgKyBPZmZzZXQgKyAxKSwoS2V5QXJyW0luZGV4XSksKExl bikpIDogX19tZW1jcHkoKHBCdWYgKyBPZmZzZXQgKyAxKSwoS2V5QXJyW0luZGV4XSksKExlbikp KTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2Zmc2V0ICs9IExlbiArIDE7CiAg ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgKnBMZW4gPSBP ZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNh c2UgMHhGRjAxMDEwNjoKCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoT2Zmc2V0ID0gMCwg SW5kZXggPSBGaXJzdEluZGV4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4 IDwgTGFzdEluZGV4OyBJbmRleCArKykgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBCdWZMZW4gPSAyNTY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFZwZFJl YWQocEFDLCBJb0MsIEtleUFycltJbmRleF0sIEJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChpbnQgKikmQnVmTGVuKSA+IDAgfHwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEJ1ZkxlbiA+PSAxMjgpIHsKCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBTa0Vycm9yTG9nKHBBQywgKDFMPDwzKSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDQwMCArIDIxKSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlZwZDogVlBEIGRhdGEg c3RyaW5nIHRvbyBsb25nIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuICgxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgT2Zmc2V0ICs9IEJ1ZkxlbiArIDE7CiAgICAgICAgICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCpwTGVuIDwgT2Zmc2V0 KSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwTGVuID0gT2Zmc2V0OwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMik7CiAgICAgICAgICAgICAgICAg ICAgICAgIH0KCgoKCgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKE9mZnNldCA9IDAsIElu ZGV4ID0gRmlyc3RJbmRleDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCA8 IExhc3RJbmRleDsgSW5kZXggKyspIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg QnVmTGVuID0gMjU2OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChWcGRSZWFk KHBBQywgSW9DLCBLZXlBcnJbSW5kZXhdLCBCdWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoaW50ICopJkJ1ZkxlbikgPiAwIHx8CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBCdWZMZW4gPj0gMTI4KSB7CgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgU2tFcnJvckxvZyhwQUMsICgxTDw8MyksCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg0MDAgKyAyMiksCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJWcGQ6IFZQRCBkYXRhIHN0 cmluZyB0b28gbG9uZyBzaG91bGQgYmUgZXJyb3JlZCBiZWZvcmUiKTsKCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAqcExlbiA9IDA7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDEpOwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihwQnVmICsgT2Zmc2V0 KSA9IChjaGFyKUJ1ZkxlbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19idWls dGluX2NvbnN0YW50X3AoQnVmTGVuKSA/IF9fY29uc3RhbnRfbWVtY3B5KChwQnVmICsgT2Zmc2V0 ICsgMSksKEJ1ZiksKEJ1ZkxlbikpIDogX19tZW1jcHkoKHBCdWYgKyBPZmZzZXQgKyAxKSwoQnVm KSwoQnVmTGVuKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9mZnNldCArPSBC dWZMZW4gKyAxOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg ICAgICpwTGVuID0gT2Zmc2V0OwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAg ICAgICAgICAgICBjYXNlIDB4RkYwMTAxMDc6CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgq cExlbiA8IExhc3RJbmRleCAtIEZpcnN0SW5kZXgpIHsKCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKnBMZW4gPSBMYXN0SW5kZXggLSBGaXJzdEluZGV4OwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHJldHVybiAoMik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAg ICAgICAgICAgICAgICAgICAgICAgIGZvciAoT2Zmc2V0ID0gMCwgSW5kZXggPSBGaXJzdEluZGV4 OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4IDwgTGFzdEluZGV4OyBJbmRl eCArKykgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVnBkTWF5V3JpdGUo S2V5QXJyW0luZGV4XSkpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqKHBCdWYgKyBPZmZzZXQpID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqKHBCdWYgKyBPZmZzZXQpID0gMjsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2Zm c2V0ICsrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAg ICpwTGVuID0gT2Zmc2V0OwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAg ICAgICAgICBjYXNlIDB4RkYwMTAxMDg6CiAgICAgICAgICAgICAgICAgICAgICAgIE9mZnNldCA9 IExhc3RJbmRleCAtIEZpcnN0SW5kZXg7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgqcExl biA8IE9mZnNldCkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcExlbiA9IE9m ZnNldDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDIpOwogICAgICAg ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIChfX2J1aWx0aW5fY29u c3RhbnRfcCgwKSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCgoT2Zmc2V0KSkgPyBfX2NvbnN0YW50 X2NfYW5kX2NvdW50X21lbXNldCgoKHBCdWYpKSwoKDB4MDEwMTAxMDFVTCoodW5zaWduZWQgY2hh cikoMCkpKSwoKE9mZnNldCkpKSA6IF9fY29uc3RhbnRfY19tZW1zZXQoKChwQnVmKSksKCgweDAx MDEwMTAxVUwqKHVuc2lnbmVkIGNoYXIpKDApKSksKChPZmZzZXQpKSkpIDogKF9fYnVpbHRpbl9j b25zdGFudF9wKChPZmZzZXQpKSA/IF9fbWVtc2V0X2dlbmVyaWMoKCgocEJ1ZikpKSwoKCgwKSkp LCgoKE9mZnNldCkpKSkgOiBfX21lbXNldF9nZW5lcmljKCgocEJ1ZikpLCgoMCkpLCgoT2Zmc2V0 KSkpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICpwTGVuID0gT2Zmc2V0OwogICAgICAgICAg ICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAg ICAgICAgICAgICAgICBTa0Vycm9yTG9nKHBBQywgKDFMPDwzKSwgKDQwMCArIDIzKSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiVnBkOiBVbmtub3duIE9JRCBpbiBnZXQgYWN0aW9u Iik7CgogICAgICAgICAgICAgICAgICAgICAgICAqcExlbiA9IDA7CiAgICAgICAgICAgICAgICAg ICAgICAgIHJldHVybiAoMSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVs c2UgewoKICAgICAgICAgICAgICAgIGlmIChJZCAhPSAweEZGMDEwMTA4KSB7CgogICAgICAgICAg ICAgICAgICAgICAgICBpZiAoSWQgPT0gMHhGRjAxMDEwMiB8fAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIElkID09IDB4RkYwMTAxMDMgfHwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBJZCA9PSAweEZGMDEwMTA0IHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgSWQgPT0gMHhGRjAxMDEwNSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElk ID09IDB4RkYwMTAxMDYgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZCA9PSAw eEZGMDEwMTA3KSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwTGVuID0gMDsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDQpOwogICAgICAgICAgICAg ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBTa0Vycm9yTG9nKHBBQywgKDFM PDwzKSwgKDQwMCArIDI0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVnBkOiBV bmtub3duIE9JRCBpbiBwcmVzZXQvc2V0IGFjdGlvbiIpOwoKICAgICAgICAgICAgICAgICAgICAg ICAgKnBMZW4gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDEpOwogICAgICAg ICAgICAgICAgfQoKCgoKCiAgICAgICAgICAgICAgICBpZiAoKnBMZW4gPCAxKSB7CgogICAgICAg ICAgICAgICAgICAgICAgICAqcExlbiA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy biAoMik7CiAgICAgICAgICAgICAgICB9CgoKCgoKICAgICAgICAgICAgICAgIHN3aXRjaCAoKnBC dWYpIHsKCiAgICAgICAgICAgICAgICBjYXNlIDA6CgogICAgICAgICAgICAgICAgICAgICAgICBi cmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIDE6CgoKCgogICAgICAgICAgICAgICAgICAgICAg ICBpZiAoKnBMZW4gPCA0KSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwTGVu ID0gNDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDIpOwogICAgICAg ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIEtleVN0clswXSA9IHBC dWZbMV07CiAgICAgICAgICAgICAgICAgICAgICAgIEtleVN0clsxXSA9IHBCdWZbMl07CiAgICAg ICAgICAgICAgICAgICAgICAgIEtleVN0clsyXSA9IDA7CgoKCgoKICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKCFWcGRNYXlXcml0ZShLZXlTdHIpKSB7CgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICpwTGVuID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1 cm4gKDMpOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAg ICBPZmZzZXQgPSAoaW50KXBCdWZbM10gJiAweEZGOwoKICAgICAgICAgICAgICAgICAgICAgICAg KF9fYnVpbHRpbl9jb25zdGFudF9wKE9mZnNldCkgPyBfX2NvbnN0YW50X21lbWNweSgoQnVmKSwo cEJ1ZiArIDQpLChPZmZzZXQpKSA6IF9fbWVtY3B5KChCdWYpLChwQnVmICsgNCksKE9mZnNldCkp KTsKICAgICAgICAgICAgICAgICAgICAgICAgQnVmW09mZnNldF0gPSAwOwoKCiAgICAgICAgICAg ICAgICAgICAgICAgIGlmIChBY3Rpb24gPT0gMSkgewoKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICByZXR1cm4gKDApOwogICAgICAgICAgICAgICAgICAgICAgICB9CgoKICAgICAgICAg ICAgICAgICAgICAgICAgUmV0ID0gVnBkV3JpdGUocEFDLCBJb0MsIEtleVN0ciwgQnVmKTsKICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKFJldCA9PSA1ICkgewoKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqcExlbiA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cmV0dXJuICgzKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg ICAgICBlbHNlIGlmIChSZXQgIT0gMCkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBTa0Vycm9yTG9nKHBBQywgKDFMPDwzKSwgKDQwMCArIDI1KSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJWcGQ6IENhbm5vdCB3cml0ZSBWUEQgYWZ0ZXIgbW9kaWZ5 IGVudHJ5Iik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwTGVuID0gMDsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDEpOwogICAgICAgICAgICAgICAg ICAgICAgICB9CgoKCgoKICAgICAgICAgICAgICAgICAgICAgICAgUmV0ID0gVnBkVXBkYXRlKHBB QywgSW9DKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFJldCAhPSAwKSB7CgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFNrRXJyb3JMb2cocEFDLCAoMUw8PDMpLCAoNDAwICsg MjYpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlZwZDogQ2Fubm90 IHVwZGF0ZSBWUEQiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnBMZW4gPSAw OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMSk7CiAgICAgICAgICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAg ICAgICAgY2FzZSAyOgoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCpwTGVuIDwgMykgewoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcExlbiA9IDM7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuICgyKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgICAgICAgICAgICBpZiAoKnBMZW4gPiAzKSB7CgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICpwTGVuID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4gKDMpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg ICAgICAgIEtleVN0clswXSA9IHBCdWZbMV07CiAgICAgICAgICAgICAgICAgICAgICAgIEtleVN0 clsxXSA9IHBCdWZbMl07CiAgICAgICAgICAgICAgICAgICAgICAgIEtleVN0clsyXSA9IDA7CgoK ICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgS2V5Tm87IElu ZGV4ICsrKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJjbXAoKGNo YXIqKShLZXlTdHIpLChjaGFyKikoS2V5QXJyW0luZGV4XSkpID09IDApIHsKCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCgoKCiAgICAgICAgICAgICAg ICAgICAgICAgIGlmIChJbmRleCA9PSBLZXlObykgewoKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqcExlbiA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu ICgzKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAg aWYgKEFjdGlvbiA9PSAxKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy biAoMCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCgogICAgICAgICAgICAgICAgICAgICAg ICBSZXQgPSBWcGREZWxldGUocEFDLCBJb0MsIEtleVN0cik7CiAgICAgICAgICAgICAgICAgICAg ICAgIGlmIChSZXQgIT0gMCkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa0Vy cm9yTG9nKHBBQywgKDFMPDwzKSwgKDQwMCArIDI3KSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJWcGQ6IENhbm5vdCBkZWxldGUgVlBEIGVudHJ5Iik7CgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICpwTGVuID0gMDsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICByZXR1cm4gKDEpOwogICAgICAgICAgICAgICAgICAgICAgICB9CgoKCgoKICAg ICAgICAgICAgICAgICAgICAgICAgUmV0ID0gVnBkVXBkYXRlKHBBQywgSW9DKTsKICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKFJldCAhPSAwKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFNrRXJyb3JMb2cocEFDLCAoMUw8PDMpLCAoNDAwICsgMjgpLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIlZwZDogQ2Fubm90IHVwZGF0ZSBWUEQgYWZ0ZXIg ZGVsZXRlIGVudHJ5Iik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwTGVuID0g MDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDEpOwogICAgICAgICAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAg ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICpwTGVuID0gMDsKICAgICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuICgzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9 CgogICAgICAgIHJldHVybiAoMCk7Cn0KIyAzOTE1ICJza2dlcG5taS5jIgpzdGF0aWMgaW50IEdl bmVyYWwoClNLX0FDICpwQUMsCmNoYXIqIElvQywKaW50IEFjdGlvbiwKdTMyIElkLApjaGFyICpw QnVmLAp1bnNpZ25lZCBpbnQgKnBMZW4sCnUzMiBJbnN0YW5jZSwKdW5zaWduZWQgaW50IFRhYmxl SW5kZXgsCnUzMiBOZXRJbmRleCkKewogICAgICAgIGludCBSZXQ7CiAgICAgICAgdW5zaWduZWQg aW50IEluZGV4OwogICAgICAgIHVuc2lnbmVkIGludCBMZW47CiAgICAgICAgdW5zaWduZWQgaW50 IE9mZnNldDsKICAgICAgICB1bnNpZ25lZCBpbnQgVmFsOwogICAgICAgIHU4IFZhbDg7CiAgICAg ICAgdTE2IFZhbDE2OwogICAgICAgIHUzMiBWYWwzMjsKICAgICAgICB1NjQgVmFsNjQ7CiAgICAg ICAgdTY0IFZhbDY0UnhId0VycnMgPSAwOwogICAgICAgIHU2NCBWYWw2NFR4SHdFcnJzID0gMDsK ICAgICAgICB1OCBJczY0Qml0UmVxID0gMDsKICAgICAgICBjaGFyIEJ1ZlsyNTZdOwogICAgICAg IGludCBNYWNUeXBlOwoKCgoKICAgICAgICBpZiAoSW5zdGFuY2UgIT0gKHUzMikoLTEpICYmIElu c3RhbmNlICE9IDEpIHsKCiAgICAgICAgICAgICAgICAqcExlbiA9IDA7CiAgICAgICAgICAgICAg ICByZXR1cm4gKDYpOwogICAgICAgIH0KCgoKCiAgICAgICAgaWYgKEFjdGlvbiAhPSAwKSB7Cgog ICAgICAgICAgICAgICAgKnBMZW4gPSAwOwogICAgICAgICAgICAgICAgcmV0dXJuICg0KTsKICAg ICAgICB9CgogICAgICAgIE1hY1R5cGUgPSBwQUMtPkdJbmkuR0lNYWNUeXBlOwoKCgoKICAgICAg ICBzd2l0Y2ggKElkKSB7CgogICAgICAgIGNhc2UgMHgwMDAyMDEwMzoKICAgICAgICBjYXNlIDB4 MDAwMjAxMDQ6CiAgICAgICAgY2FzZSAweDAwMDIwMTA1OgoKICAgICAgICAgICAgICAgIGlmICgq cExlbiA8IHNpemVvZih1MzIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICpwTGVuID0gc2l6 ZW9mKHUzMik7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMik7CiAgICAgICAgICAg ICAgICB9CiMgMzk5MSAic2tnZXBubWkuYyIKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAg ICBjYXNlIDB4RkYwMTAxMTA6CiAgICAgICAgY2FzZSAweEZGMDEwMTExOgogICAgICAgIGNhc2Ug MHhGRjAxMDExODoKICAgICAgICBjYXNlIDB4RkYwMTAxNTA6CiAgICAgICAgY2FzZSAweDAwMDIw MjBFOgogICAgICAgIGNhc2UgMHhGRjAxMDEzMToKICAgICAgICBjYXNlIDB4RkYwMTAxMDA6CiAg ICAgICAgICAgICAgICBpZiAoKnBMZW4gPCBzaXplb2YodTMyKSkgewoKICAgICAgICAgICAgICAg ICAgICAgICAgKnBMZW4gPSBzaXplb2YodTMyKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuICgyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAg ICBjYXNlIDB4RkYwMTAxMTY6CiAgICAgICAgICAgICAgICBpZiAoKnBMZW4gPCBzaXplb2YodTE2 KSkgewoKICAgICAgICAgICAgICAgICAgICAgICAgKnBMZW4gPSBzaXplb2YodTE2KTsKICAgICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuICgyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg ICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIDB4RkYwMTAxMTk6CiAgICAgICAgY2FzZSAweEZG MDEwMTFBOgogICAgICAgIGNhc2UgMHhGRjAxMDExQjoKICAgICAgICBjYXNlIDB4RkYwMjAxMDA6 CiAgICAgICAgY2FzZSAweEZGMDIwMTEwOgogICAgICAgICAgICAgICAgaWYgKCpwTGVuIDwgc2l6 ZW9mKHU4KSkgewoKICAgICAgICAgICAgICAgICAgICAgICAgKnBMZW4gPSBzaXplb2YodTgpOwog ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDIpOwogICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgMHhGRjAyMDE3MDoKICAgICAgICBjYXNl IDB4RkYwMjAxNzE6CiAgICAgICAgY2FzZSAweEZGMDIwMTcyOgogICAgICAgIGNhc2UgMHhGRjAy MDE3MzoKICAgICAgICBjYXNlIDB4RkYwMjAxNzQ6CiAgICAgICAgY2FzZSAweEZGMDIwMTc1Ogog ICAgICAgIGNhc2UgMHhGRjAyMDE3NjoKICAgICAgICBjYXNlIDB4RkYwMjAxNzc6CiAgICAgICAg Y2FzZSAweEZGMDIwMTc4OgogICAgICAgIGNhc2UgMHhGRjAyMDE3OToKICAgICAgICBjYXNlIDB4 RkYwMjAxN0E6CiAgICAgICAgY2FzZSAweEZGMDIwMTdCOgogICAgICAgIGNhc2UgMHhGRjAyMDE3 QzoKICAgICAgICBjYXNlIDB4RkYwMjAxN0Q6CiAgICAgICAgY2FzZSAweEZGMDIwMTdFOgogICAg ICAgIGNhc2UgMHhGRjAyMDE3RjoKICAgICAgICAgICAgICAgIGlmICgqcExlbiA8IHNpemVvZih1 NjQpKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAqcExlbiA9IHNpemVvZih1NjQpOwogICAg ICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDIpOwogICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgYnJlYWs7CgogICAgICAgIGRlZmF1bHQ6CgogICAgICAgICAgICAgICAgYnJlYWs7 CiAgICAgICAgfQoKCiAgICAgICAgaWYgKElkID09IDB4RkYwMjAxN0EgfHwKICAgICAgICAgICAg ICAgIElkID09IDB4RkYwMjAxN0IgfHwKICAgICAgICAgICAgICAgIElkID09IDB4RkYwMjAxN0Mg fHwKICAgICAgICAgICAgICAgIElkID09IDB4RkYwMjAxN0QgfHwKICAgICAgICAgICAgICAgIElk ID09IDB4MDAwMjAxMDMgfHwKICAgICAgICAgICAgICAgIElkID09IDB4MDAwMjAxMDQpIHsKCgoK CgogICAgICAgICAgICAgICAgUmV0ID0gTWFjVXBkYXRlKHBBQywgSW9DLCAwLCBwQUMtPkdJbmku R0lNYWNzRm91bmQgLSAxKTsKICAgICAgICAgICAgICAgIGlmIChSZXQgIT0gMCkgewoKICAgICAg ICAgICAgICAgICAgICAgICAgKnBMZW4gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1 cm4gKFJldCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBwQUMtPlBubWkuTWFj VXBkYXRlZEZsYWcgKys7CgoKCgoKCiAgICAgICAgICAgICAgICBzd2l0Y2ggKElkKSB7CgogICAg ICAgICAgICAgICAgY2FzZSAweEZGMDIwMTdBOgogICAgICAgICAgICAgICAgY2FzZSAweEZGMDIw MTdDOgogICAgICAgICAgICAgICAgY2FzZSAweDAwMDIwMTA0OgogICAgICAgICAgICAgICAgICAg ICAgICBWYWw2NFJ4SHdFcnJzID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRT dGF0VmFsKHBBQywgSW9DLCAwLCBTS19QTk1JX0hSWF9NSVNTRUQsIE5ldEluZGV4KSArCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0U3RhdFZhbChwQUMsIElvQywgMCwgU0tfUE5N SV9IUlhfRlJBTUlORywgTmV0SW5kZXgpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBHZXRTdGF0VmFsKHBBQywgSW9DLCAwLCBTS19QTk1JX0hSWF9PVkVSRkxPVywgTmV0SW5kZXgp KwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldFN0YXRWYWwocEFDLCBJb0MsIDAs IFNLX1BOTUlfSFJYX0pBQkJFUiwgTmV0SW5kZXgpICsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBHZXRTdGF0VmFsKHBBQywgSW9DLCAwLCBTS19QTk1JX0hSWF9DQVJSSUVSLCBOZXRJ bmRleCkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldFN0YXRWYWwocEFDLCBJ b0MsIDAsIFNLX1BOTUlfSFJYX0lSTEVOR1RILCBOZXRJbmRleCkrCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgR2V0U3RhdFZhbChwQUMsIElvQywgMCwgU0tfUE5NSV9IUlhfU1lNQk9M LCBOZXRJbmRleCkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldFN0YXRWYWwo cEFDLCBJb0MsIDAsIFNLX1BOTUlfSFJYX1NIT1JUUywgTmV0SW5kZXgpICsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBHZXRTdGF0VmFsKHBBQywgSW9DLCAwLCBTS19QTk1JX0hSWF9S VU5ULCBOZXRJbmRleCkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldFN0YXRW YWwocEFDLCBJb0MsIDAsIFNLX1BOTUlfSFJYX1RPT19MT05HLCBOZXRJbmRleCkgKwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEdldFN0YXRWYWwocEFDLCBJb0MsIDAsIFNLX1BOTUlf SFJYX0ZDUywgTmV0SW5kZXgpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRT dGF0VmFsKHBBQywgSW9DLCAwLCBTS19QTk1JX0hSWF9DRVhULCBOZXRJbmRleCk7CiAgICAgICAg ICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIDB4RkYwMjAxN0I6CiAgICAgICAg ICAgICAgICBjYXNlIDB4RkYwMjAxN0Q6CiAgICAgICAgICAgICAgICBjYXNlIDB4MDAwMjAxMDM6 CiAgICAgICAgICAgICAgICAgICAgICAgIFZhbDY0VHhId0VycnMgPQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEdldFN0YXRWYWwocEFDLCBJb0MsIDAsIFNLX1BOTUlfSFRYX0VYQ0VT U19DT0wsIE5ldEluZGV4KSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0U3Rh dFZhbChwQUMsIElvQywgMCwgU0tfUE5NSV9IVFhfTEFURV9DT0wsIE5ldEluZGV4KSsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRTdGF0VmFsKHBBQywgSW9DLCAwLCBTS19QTk1J X0hUWF9VTkRFUlJVTiwgTmV0SW5kZXgpKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEdldFN0YXRWYWwocEFDLCBJb0MsIDAsIFNLX1BOTUlfSFRYX0NBUlJJRVIsIE5ldEluZGV4KTsK ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg fQoKCgoKICAgICAgICBzd2l0Y2ggKElkKSB7CgogICAgICAgIGNhc2UgMHhGRjAxMDEwMToKICAg ICAgICAgICAgICAgIExlbiA9IChzaXplb2YoSWRUYWJsZSkvc2l6ZW9mKElkVGFibGVbMF0pKSAq IHNpemVvZih1MzIpOwogICAgICAgICAgICAgICAgaWYgKCpwTGVuIDwgTGVuKSB7CgogICAgICAg ICAgICAgICAgICAgICAgICAqcExlbiA9IExlbjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuICgyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZvciAoT2Zmc2V0ID0g MCwgSW5kZXggPSAwOyBPZmZzZXQgPCBMZW47CiAgICAgICAgICAgICAgICAgICAgICAgIE9mZnNl dCArPSBzaXplb2YodTMyKSwgSW5kZXggKyspIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIFZh bDMyID0gKHUzMilJZFRhYmxlW0luZGV4XS5JZDsKICAgICAgICAgICAgICAgICAgICAgICAgKF9f YnVpbHRpbl9jb25zdGFudF9wKDQpID8gX19jb25zdGFudF9tZW1jcHkoKChjaGFyKikocEJ1ZiAr IE9mZnNldCkpLCgoY2hhciopJihWYWwzMikpLCg0KSkgOiBfX21lbWNweSgoKGNoYXIqKShwQnVm ICsgT2Zmc2V0KSksKChjaGFyKikmKFZhbDMyKSksKDQpKSk7CiAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgICAgICAqcExlbiA9IExlbjsKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAg ICBjYXNlIDB4RkYwMTAxMTA6CiAgICAgICAgICAgICAgICBWYWwzMiA9ICh1MzIpcEFDLT5HSW5p LkdJTWFjc0ZvdW5kOwogICAgICAgICAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKDQpID8g X19jb25zdGFudF9tZW1jcHkoKChjaGFyKikocEJ1ZikpLCgoY2hhciopJihWYWwzMikpLCg0KSkg OiBfX21lbWNweSgoKGNoYXIqKShwQnVmKSksKChjaGFyKikmKFZhbDMyKSksKDQpKSk7CiAgICAg ICAgICAgICAgICAqcExlbiA9IHNpemVvZih1MzIpOwogICAgICAgICAgICAgICAgYnJlYWs7Cgog ICAgICAgIGNhc2UgMHhGRjAxMDExMToKICAgICAgICAgICAgICAgIFZhbDMyID0gKHUzMilwQUMt PlBubWkuRGV2aWNlVHlwZTsKICAgICAgICAgICAgICAgIChfX2J1aWx0aW5fY29uc3RhbnRfcCg0 KSA/IF9fY29uc3RhbnRfbWVtY3B5KCgoY2hhciopKHBCdWYpKSwoKGNoYXIqKSYoVmFsMzIpKSwo NCkpIDogX19tZW1jcHkoKChjaGFyKikocEJ1ZikpLCgoY2hhciopJihWYWwzMikpLCg0KSkpOwog ICAgICAgICAgICAgICAgKnBMZW4gPSBzaXplb2YodTMyKTsKICAgICAgICAgICAgICAgIGJyZWFr OwoKICAgICAgICBjYXNlIDB4RkYwMTAxMTI6CiAgICAgICAgICAgICAgICBpZiAocEFDLT5Qbm1p LnBEcml2ZXJEZXNjcmlwdGlvbiA9PSAoKHZvaWQgKikwKSkgewoKICAgICAgICAgICAgICAgICAg ICAgICAgU2tFcnJvckxvZyhwQUMsICgxTDw8MyksICg0MDAgKyA3KSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiR2VuZXJhbDogRHJpdmVyIGRlc2NyaXB0aW9uIG5vdCBpbml0aWFs aXplZCIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgKnBMZW4gPSAwOwogICAgICAgICAgICAg ICAgICAgICAgICByZXR1cm4gKDEpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg IExlbiA9IHN0cmxlbigoY2hhciopKHBBQy0+UG5taS5wRHJpdmVyRGVzY3JpcHRpb24pKSArIDE7 CiAgICAgICAgICAgICAgICBpZiAoTGVuID4gODApIHsKCiAgICAgICAgICAgICAgICAgICAgICAg IFNrRXJyb3JMb2cocEFDLCAoMUw8PDMpLCAoNDAwICsgMjkpLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJHZW5lcmFsOiBEcml2ZXIgZGVzY3JpcHRpb24gc3RyaW5nIHRvbyBsb25n Iik7CgogICAgICAgICAgICAgICAgICAgICAgICAqcExlbiA9IDA7CiAgICAgICAgICAgICAgICAg ICAgICAgIHJldHVybiAoMSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYg KCpwTGVuIDwgTGVuKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAqcExlbiA9IExlbjsKICAg ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgyKTsKICAgICAgICAgICAgICAgIH0KICAgICAg ICAgICAgICAgICpwQnVmID0gKGNoYXIpKExlbiAtIDEpOwogICAgICAgICAgICAgICAgKF9fYnVp bHRpbl9jb25zdGFudF9wKExlbiAtIDEpID8gX19jb25zdGFudF9tZW1jcHkoKHBCdWYgKyAxKSwo cEFDLT5Qbm1pLnBEcml2ZXJEZXNjcmlwdGlvbiksKExlbiAtIDEpKSA6IF9fbWVtY3B5KChwQnVm ICsgMSksKHBBQy0+UG5taS5wRHJpdmVyRGVzY3JpcHRpb24pLChMZW4gLSAxKSkpOwogICAgICAg ICAgICAgICAgKnBMZW4gPSBMZW47CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2Fz ZSAweEZGMDEwMTEzOgogICAgICAgICAgICAgICAgaWYgKHBBQy0+UG5taS5wRHJpdmVyVmVyc2lv biA9PSAoKHZvaWQgKikwKSkgewoKICAgICAgICAgICAgICAgICAgICAgICAgU2tFcnJvckxvZyhw QUMsICgxTDw8MyksICg0MDAgKyAzMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IkdlbmVyYWw6IERyaXZlciB2ZXJzaW9uIG5vdCBpbml0aWFsaXplZCIpOwoKICAgICAgICAgICAg ICAgICAgICAgICAgKnBMZW4gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDEp OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIExlbiA9IHN0cmxlbigoY2hhciop KHBBQy0+UG5taS5wRHJpdmVyVmVyc2lvbikpICsgMTsKICAgICAgICAgICAgICAgIGlmIChMZW4g PiA4MCkgewoKICAgICAgICAgICAgICAgICAgICAgICAgU2tFcnJvckxvZyhwQUMsICgxTDw8Myks ICg0MDAgKyAzMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkdlbmVyYWw6IERy aXZlciB2ZXJzaW9uIHN0cmluZyB0b28gbG9uZyIpOwoKICAgICAgICAgICAgICAgICAgICAgICAg KnBMZW4gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDEpOwogICAgICAgICAg ICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICgqcExlbiA8IExlbikgewoKICAgICAgICAgICAg ICAgICAgICAgICAgKnBMZW4gPSBMZW47CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAo Mik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAqcEJ1ZiA9IChjaGFyKShMZW4g LSAxKTsKICAgICAgICAgICAgICAgIChfX2J1aWx0aW5fY29uc3RhbnRfcChMZW4gLSAxKSA/IF9f Y29uc3RhbnRfbWVtY3B5KChwQnVmICsgMSksKHBBQy0+UG5taS5wRHJpdmVyVmVyc2lvbiksKExl biAtIDEpKSA6IF9fbWVtY3B5KChwQnVmICsgMSksKHBBQy0+UG5taS5wRHJpdmVyVmVyc2lvbiks KExlbiAtIDEpKSk7CiAgICAgICAgICAgICAgICAqcExlbiA9IExlbjsKICAgICAgICAgICAgICAg IGJyZWFrOwoKICAgICAgICBjYXNlIDB4RkYwMTAxMTQ6CgoKCgoKCiAgICAgICAgICAgICAgICBM ZW4gPSAyNTY7CiAgICAgICAgICAgICAgICBpZiAoVnBkUmVhZChwQUMsIElvQywgIk5hbWUiLCBC dWYsIChpbnQgKikmTGVuKSA+IDApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIFNrRXJyb3JM b2cocEFDLCAoMUw8PDMpLCAoNDAwICsgMzIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJHZW5lcmFsOiBDYW5ub3QgcmVhZCBWUEQgTmFtZSBmb3IgSFcgZGVzY3IiKTsKCiAgICAg ICAgICAgICAgICAgICAgICAgICpwTGVuID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuICgxKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIExlbiArKzsKICAgICAg ICAgICAgICAgIGlmIChMZW4gPiA4MCkgewoKICAgICAgICAgICAgICAgICAgICAgICAgU2tFcnJv ckxvZyhwQUMsICgxTDw8MyksICg0MDAgKyAzMyksCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIkdlbmVyYWw6IEhXIGRlc2NyaXB0aW9uIHN0cmluZyB0b28gbG9uZyIpOwoKICAgICAg ICAgICAgICAgICAgICAgICAgKnBMZW4gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1 cm4gKDEpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCpwTGVuIDwgTGVu KSB7CgogICAgICAgICAgICAgICAgICAgICAgICAqcExlbiA9IExlbjsKICAgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuICgyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICpw QnVmID0gKGNoYXIpKExlbiAtIDEpOwogICAgICAgICAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFu dF9wKExlbiAtIDEpID8gX19jb25zdGFudF9tZW1jcHkoKHBCdWYgKyAxKSwoQnVmKSwoTGVuIC0g MSkpIDogX19tZW1jcHkoKHBCdWYgKyAxKSwoQnVmKSwoTGVuIC0gMSkpKTsKICAgICAgICAgICAg ICAgICpwTGVuID0gTGVuOwogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgMHhG RjAxMDExNToKCiAgICAgICAgICAgICAgICBpZiAoKnBMZW4gPCA1KSB7CgogICAgICAgICAgICAg ICAgICAgICAgICAqcExlbiA9IDU7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMik7 CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBWYWw4ID0gKHU4KXBBQy0+R0luaS5H SVBjaUh3UmV2OwogICAgICAgICAgICAgICAgcEJ1ZlswXSA9IDQ7CiAgICAgICAgICAgICAgICBw QnVmWzFdID0gJ3YnOwogICAgICAgICAgICAgICAgcEJ1ZlsyXSA9IChjaGFyKSgweDMwIHwgKChW YWw4ID4+IDQpICYgMHgwRikpOwogICAgICAgICAgICAgICAgcEJ1ZlszXSA9ICcuJzsKICAgICAg ICAgICAgICAgIHBCdWZbNF0gPSAoY2hhcikoMHgzMCB8IChWYWw4ICYgMHgwRikpOwogICAgICAg ICAgICAgICAgKnBMZW4gPSA1OwogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2Ug MHhGRjAxMDExNjoKICAgICAgICAgICAgICAgIFZhbDE2ID0gcEFDLT5Qbm1pLkNoaXBzZXQ7CiAg ICAgICAgICAgICAgICAoX19idWlsdGluX2NvbnN0YW50X3AoMikgPyBfX2NvbnN0YW50X21lbWNw eSgoKGNoYXIqKShwQnVmKSksKChjaGFyKikmKFZhbDE2KSksKDIpKSA6IF9fbWVtY3B5KCgoY2hh ciopKHBCdWYpKSwoKGNoYXIqKSYoVmFsMTYpKSwoMikpKTsKICAgICAgICAgICAgICAgICpwTGVu ID0gc2l6ZW9mKHUxNik7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAweEZG MDEwMTE5OgogICAgICAgICAgICAgICAgKnBCdWYgPSAoY2hhcikxOwogICAgICAgICAgICAgICAg KnBMZW4gPSBzaXplb2YoY2hhcik7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2Fz ZSAweEZGMDEwMTFBOgogICAgICAgICAgICAgICAgKnBCdWYgPSBwQUMtPlBubWkuUGNpQnVzU3Bl ZWQ7CiAgICAgICAgICAgICAgICAqcExlbiA9IHNpemVvZihjaGFyKTsKICAgICAgICAgICAgICAg IGJyZWFrOwoKICAgICAgICBjYXNlIDB4RkYwMTAxMUI6CiAgICAgICAgICAgICAgICAqcEJ1ZiA9 IHBBQy0+UG5taS5QY2lCdXNXaWR0aDsKICAgICAgICAgICAgICAgICpwTGVuID0gc2l6ZW9mKGNo YXIpOwogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgMHhGRjAxMDExODoKICAg ICAgICAgICAgICAgIFZhbDMyID0gcEFDLT5Qbm1pLlRlc3RSZXN1bHQ7CiAgICAgICAgICAgICAg ICAoX19idWlsdGluX2NvbnN0YW50X3AoNCkgPyBfX2NvbnN0YW50X21lbWNweSgoKGNoYXIqKShw QnVmKSksKChjaGFyKikmKFZhbDMyKSksKDQpKSA6IF9fbWVtY3B5KCgoY2hhciopKHBCdWYpKSwo KGNoYXIqKSYoVmFsMzIpKSwoNCkpKTsKICAgICAgICAgICAgICAgICpwTGVuID0gc2l6ZW9mKHUz Mik7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAweEZGMDIwMTAwOgogICAg ICAgICAgICAgICAgKnBCdWYgPSAoY2hhcilwQUMtPkkyYy5NYXhTZW5zOwogICAgICAgICAgICAg ICAgKnBMZW4gPSBzaXplb2YoY2hhcik7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAg Y2FzZSAweEZGMDIwMTEwOgogICAgICAgICAgICAgICAgKnBCdWYgPSAzOwogICAgICAgICAgICAg ICAgKnBMZW4gPSBzaXplb2YoY2hhcik7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAg Y2FzZSAweEZGMDEwMTMxOgogICAgICAgICAgICAgICAgR2V0VHJhcFF1ZXVlTGVuKHBBQywgJkxl biwgJlZhbCk7CiAgICAgICAgICAgICAgICBWYWwzMiA9ICh1MzIpVmFsOwogICAgICAgICAgICAg ICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKDQpID8gX19jb25zdGFudF9tZW1jcHkoKChjaGFyKiko cEJ1ZikpLCgoY2hhciopJihWYWwzMikpLCg0KSkgOiBfX21lbWNweSgoKGNoYXIqKShwQnVmKSks KChjaGFyKikmKFZhbDMyKSksKDQpKSk7CiAgICAgICAgICAgICAgICAqcExlbiA9IHNpemVvZih1 MzIpOwogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgMHhGRjAxMDEzMDoKICAg ICAgICAgICAgICAgIEdldFRyYXBRdWV1ZUxlbihwQUMsICZMZW4sICZWYWwpOwogICAgICAgICAg ICAgICAgaWYgKCpwTGVuIDwgTGVuKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAqcExlbiA9 IExlbjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgyKTsKICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgICAgIENvcHlUcmFwUXVldWUocEFDLCBwQnVmKTsKICAgICAgICAgICAg ICAgICpwTGVuID0gTGVuOwogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgMHhG RjAxMDE1MDoKCiAgICAgICAgICAgICAgICBWYWwzMiA9IDA7CiAgICAgICAgICAgICAgICAoX19i dWlsdGluX2NvbnN0YW50X3AoNCkgPyBfX2NvbnN0YW50X21lbWNweSgoKGNoYXIqKShwQnVmKSks KChjaGFyKikmKFZhbDMyKSksKDQpKSA6IF9fbWVtY3B5KCgoY2hhciopKHBCdWYpKSwoKGNoYXIq KSYoVmFsMzIpKSwoNCkpKTsKICAgICAgICAgICAgICAgICpwTGVuID0gc2l6ZW9mKHUzMik7CiAg ICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAweEZGMDIwMTcwOgoKICAgICAgICAg ICAgICAgIGlmIChNYWNUeXBlID09IDApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChw QUMtPlBubWkuRHVhbE5ldEFjdGl2ZUZsYWcgPT0gKCEwKSkgewogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFZhbDY0ID0gcEFDLT5Qbm1pLkJ1ZlBvcnRbTmV0SW5kZXhdLlR4U3dRdWV1 ZUxlbjsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAg ZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsNjQgPSBwQUMtPlBubWku QnVmUG9ydFswXS5UeFN3UXVldWVMZW4gKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcEFDLT5Qbm1pLkJ1ZlBvcnRbMV0uVHhTd1F1ZXVlTGVuOwogICAgICAgICAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKCiAg ICAgICAgICAgICAgICAgICAgICAgIGlmIChwQUMtPlBubWkuRHVhbE5ldEFjdGl2ZUZsYWcgPT0g KCEwKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbDY0ID0gcEFDLT5Qbm1p LlBvcnRbTmV0SW5kZXhdLlR4U3dRdWV1ZUxlbjsKICAgICAgICAgICAgICAgICAgICAgICAgfQoK ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgVmFsNjQgPSBwQUMtPlBubWkuUG9ydFswXS5UeFN3UXVldWVMZW4gKwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFDLT5Qbm1pLlBvcnRbMV0uVHhTd1F1ZXVl TGVuOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICAgICAoX19idWlsdGluX2NvbnN0YW50X3AoOCkgPyBfX2NvbnN0YW50X21lbWNweSgoKGNo YXIqKShwQnVmKSksKChjaGFyKikmKFZhbDY0KSksKDgpKSA6IF9fbWVtY3B5KCgoY2hhciopKHBC dWYpKSwoKGNoYXIqKSYoVmFsNjQpKSwoOCkpKTsKICAgICAgICAgICAgICAgICpwTGVuID0gc2l6 ZW9mKHU2NCk7CiAgICAgICAgICAgICAgICBicmVhazsKCgogICAgICAgIGNhc2UgMHhGRjAyMDE3 MToKCiAgICAgICAgICAgICAgICBpZiAoTWFjVHlwZSA9PSAwKSB7CgogICAgICAgICAgICAgICAg ICAgICAgICBpZiAocEFDLT5Qbm1pLkR1YWxOZXRBY3RpdmVGbGFnID09ICghMCkpIHsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBWYWw2NCA9IHBBQy0+UG5taS5CdWZQb3J0W05ldElu ZGV4XS5UeFN3UXVldWVNYXg7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAg ICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbDY0 ID0gcEFDLT5Qbm1pLkJ1ZlBvcnRbMF0uVHhTd1F1ZXVlTWF4ICsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHBBQy0+UG5taS5CdWZQb3J0WzFdLlR4U3dRdWV1ZU1heDsK ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg ICAgZWxzZSB7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAocEFDLT5Qbm1pLkR1YWxOZXRB Y3RpdmVGbGFnID09ICghMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWw2 NCA9IHBBQy0+UG5taS5Qb3J0W05ldEluZGV4XS5UeFN3UXVldWVNYXg7CiAgICAgICAgICAgICAg ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFZhbDY0ID0gcEFDLT5Qbm1pLlBvcnRbMF0uVHhTd1F1ZXVlTWF4 ICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBQy0+UG5taS5Qb3J0 WzFdLlR4U3dRdWV1ZU1heDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg ICAgfQogICAgICAgICAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKDgpID8gX19jb25zdGFu dF9tZW1jcHkoKChjaGFyKikocEJ1ZikpLCgoY2hhciopJihWYWw2NCkpLCg4KSkgOiBfX21lbWNw eSgoKGNoYXIqKShwQnVmKSksKChjaGFyKikmKFZhbDY0KSksKDgpKSk7CiAgICAgICAgICAgICAg ICAqcExlbiA9IHNpemVvZih1NjQpOwogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNh c2UgMHhGRjAyMDE3MjoKCiAgICAgICAgICAgICAgICBpZiAoTWFjVHlwZSA9PSAwKSB7CgogICAg ICAgICAgICAgICAgICAgICAgICBpZiAocEFDLT5Qbm1pLkR1YWxOZXRBY3RpdmVGbGFnID09ICgh MCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWw2NCA9IHBBQy0+UG5taS5C dWZQb3J0W05ldEluZGV4XS5UeFJldHJ5Q3RzOwogICAgICAgICAgICAgICAgICAgICAgICB9Cgog ICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBWYWw2NCA9IHBBQy0+UG5taS5CdWZQb3J0WzBdLlR4UmV0cnlDdHMgKwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFDLT5Qbm1pLkJ1ZlBvcnRbMV0uVHhSZXRy eUN0czsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAocEFDLT5Qbm1pLkR1 YWxOZXRBY3RpdmVGbGFnID09ICghMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBWYWw2NCA9IHBBQy0+UG5taS5Qb3J0W05ldEluZGV4XS5UeFJldHJ5Q3RzOwogICAgICAgICAg ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBWYWw2NCA9IHBBQy0+UG5taS5Qb3J0WzBdLlR4UmV0cnlD dHMgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFDLT5Qbm1pLlBv cnRbMV0uVHhSZXRyeUN0czsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg ICAgfQogICAgICAgICAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKDgpID8gX19jb25zdGFu dF9tZW1jcHkoKChjaGFyKikocEJ1ZikpLCgoY2hhciopJihWYWw2NCkpLCg4KSkgOiBfX21lbWNw eSgoKGNoYXIqKShwQnVmKSksKChjaGFyKikmKFZhbDY0KSksKDgpKSk7CiAgICAgICAgICAgICAg ICAqcExlbiA9IHNpemVvZih1NjQpOwogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNh c2UgMHhGRjAyMDE3MzoKCiAgICAgICAgICAgICAgICBpZiAoTWFjVHlwZSA9PSAwKSB7CgogICAg ICAgICAgICAgICAgICAgICAgICBpZiAocEFDLT5Qbm1pLkR1YWxOZXRBY3RpdmVGbGFnID09ICgh MCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWw2NCA9IHBBQy0+UG5taS5C dWZQb3J0W05ldEluZGV4XS5SeEludHJDdHM7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAg ICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFZhbDY0ID0gcEFDLT5Qbm1pLkJ1ZlBvcnRbMF0uUnhJbnRyQ3RzICsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBQy0+UG5taS5CdWZQb3J0WzFdLlJ4SW50ckN0 czsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAg ICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAocEFDLT5Qbm1pLkR1YWxO ZXRBY3RpdmVGbGFnID09ICghMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBW YWw2NCA9IHBBQy0+UG5taS5Qb3J0W05ldEluZGV4XS5SeEludHJDdHM7CiAgICAgICAgICAgICAg ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFZhbDY0ID0gcEFDLT5Qbm1pLlBvcnRbMF0uUnhJbnRyQ3RzICsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBQy0+UG5taS5Qb3J0WzFd LlJ4SW50ckN0czsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKDgpID8gX19jb25zdGFudF9tZW1j cHkoKChjaGFyKikocEJ1ZikpLCgoY2hhciopJihWYWw2NCkpLCg4KSkgOiBfX21lbWNweSgoKGNo YXIqKShwQnVmKSksKChjaGFyKikmKFZhbDY0KSksKDgpKSk7CiAgICAgICAgICAgICAgICAqcExl biA9IHNpemVvZih1NjQpOwogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgMHhG RjAyMDE3NDoKCiAgICAgICAgICAgICAgICBpZiAoTWFjVHlwZSA9PSAwKSB7CgogICAgICAgICAg ICAgICAgICAgICAgICBpZiAocEFDLT5Qbm1pLkR1YWxOZXRBY3RpdmVGbGFnID09ICghMCkpIHsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWw2NCA9IHBBQy0+UG5taS5CdWZQb3J0 W05ldEluZGV4XS5UeEludHJDdHM7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAg ICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZh bDY0ID0gcEFDLT5Qbm1pLkJ1ZlBvcnRbMF0uVHhJbnRyQ3RzICsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHBBQy0+UG5taS5CdWZQb3J0WzFdLlR4SW50ckN0czsKICAg ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg ZWxzZSB7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAocEFDLT5Qbm1pLkR1YWxOZXRBY3Rp dmVGbGFnID09ICghMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWw2NCA9 IHBBQy0+UG5taS5Qb3J0W05ldEluZGV4XS5UeEludHJDdHM7CiAgICAgICAgICAgICAgICAgICAg ICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFZhbDY0ID0gcEFDLT5Qbm1pLlBvcnRbMF0uVHhJbnRyQ3RzICsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBQy0+UG5taS5Qb3J0WzFdLlR4SW50 ckN0czsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKDgpID8gX19jb25zdGFudF9tZW1jcHkoKChj aGFyKikocEJ1ZikpLCgoY2hhciopJihWYWw2NCkpLCg4KSkgOiBfX21lbWNweSgoKGNoYXIqKShw QnVmKSksKChjaGFyKikmKFZhbDY0KSksKDgpKSk7CiAgICAgICAgICAgICAgICAqcExlbiA9IHNp emVvZih1NjQpOwogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgMHhGRjAyMDE3 NToKCiAgICAgICAgICAgICAgICBpZiAoTWFjVHlwZSA9PSAwKSB7CgogICAgICAgICAgICAgICAg ICAgICAgICBpZiAocEFDLT5Qbm1pLkR1YWxOZXRBY3RpdmVGbGFnID09ICghMCkpIHsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBWYWw2NCA9IHBBQy0+UG5taS5CdWZQb3J0W05ldElu ZGV4XS5SeE5vQnVmQ3RzOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg ICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWw2NCA9 IHBBQy0+UG5taS5CdWZQb3J0WzBdLlJ4Tm9CdWZDdHMgKwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcEFDLT5Qbm1pLkJ1ZlBvcnRbMV0uUnhOb0J1ZkN0czsKICAgICAg ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxz ZSB7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAocEFDLT5Qbm1pLkR1YWxOZXRBY3RpdmVG bGFnID09ICghMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWw2NCA9IHBB Qy0+UG5taS5Qb3J0W05ldEluZGV4XS5SeE5vQnVmQ3RzOwogICAgICAgICAgICAgICAgICAgICAg ICB9CgogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBWYWw2NCA9IHBBQy0+UG5taS5Qb3J0WzBdLlJ4Tm9CdWZDdHMgKwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFDLT5Qbm1pLlBvcnRbMV0uUnhOb0J1 ZkN0czsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKDgpID8gX19jb25zdGFudF9tZW1jcHkoKChj aGFyKikocEJ1ZikpLCgoY2hhciopJihWYWw2NCkpLCg4KSkgOiBfX21lbWNweSgoKGNoYXIqKShw QnVmKSksKChjaGFyKikmKFZhbDY0KSksKDgpKSk7CiAgICAgICAgICAgICAgICAqcExlbiA9IHNp emVvZih1NjQpOwogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgMHhGRjAyMDE3 NjoKCiAgICAgICAgICAgICAgICBpZiAoTWFjVHlwZSA9PSAwKSB7CgogICAgICAgICAgICAgICAg ICAgICAgICBpZiAocEFDLT5Qbm1pLkR1YWxOZXRBY3RpdmVGbGFnID09ICghMCkpIHsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBWYWw2NCA9IHBBQy0+UG5taS5CdWZQb3J0W05ldElu ZGV4XS5UeE5vQnVmQ3RzOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg ICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWw2NCA9 IHBBQy0+UG5taS5CdWZQb3J0WzBdLlR4Tm9CdWZDdHMgKwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcEFDLT5Qbm1pLkJ1ZlBvcnRbMV0uVHhOb0J1ZkN0czsKICAgICAg ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxz ZSB7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAocEFDLT5Qbm1pLkR1YWxOZXRBY3RpdmVG bGFnID09ICghMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWw2NCA9IHBB Qy0+UG5taS5Qb3J0W05ldEluZGV4XS5UeE5vQnVmQ3RzOwogICAgICAgICAgICAgICAgICAgICAg ICB9CgogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBWYWw2NCA9IHBBQy0+UG5taS5Qb3J0WzBdLlR4Tm9CdWZDdHMgKwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFDLT5Qbm1pLlBvcnRbMV0uVHhOb0J1 ZkN0czsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKDgpID8gX19jb25zdGFudF9tZW1jcHkoKChj aGFyKikocEJ1ZikpLCgoY2hhciopJihWYWw2NCkpLCg4KSkgOiBfX21lbWNweSgoKGNoYXIqKShw QnVmKSksKChjaGFyKikmKFZhbDY0KSksKDgpKSk7CiAgICAgICAgICAgICAgICAqcExlbiA9IHNp emVvZih1NjQpOwogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgMHhGRjAyMDE3 NzoKCiAgICAgICAgICAgICAgICBpZiAoTWFjVHlwZSA9PSAwKSB7CgogICAgICAgICAgICAgICAg ICAgICAgICBpZiAocEFDLT5Qbm1pLkR1YWxOZXRBY3RpdmVGbGFnID09ICghMCkpIHsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBWYWw2NCA9IHBBQy0+UG5taS5CdWZQb3J0W05ldElu ZGV4XS5UeFVzZWREZXNjck5vOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAg ICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWw2 NCA9IHBBQy0+UG5taS5CdWZQb3J0WzBdLlR4VXNlZERlc2NyTm8gKwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcEFDLT5Qbm1pLkJ1ZlBvcnRbMV0uVHhVc2VkRGVzY3JO bzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAg ICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAocEFDLT5Qbm1pLkR1YWxO ZXRBY3RpdmVGbGFnID09ICghMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBW YWw2NCA9IHBBQy0+UG5taS5Qb3J0W05ldEluZGV4XS5UeFVzZWREZXNjck5vOwogICAgICAgICAg ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBWYWw2NCA9IHBBQy0+UG5taS5Qb3J0WzBdLlR4VXNlZERl c2NyTm8gKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFDLT5Qbm1p LlBvcnRbMV0uVHhVc2VkRGVzY3JObzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKDgpID8gX19j b25zdGFudF9tZW1jcHkoKChjaGFyKikocEJ1ZikpLCgoY2hhciopJihWYWw2NCkpLCg4KSkgOiBf X21lbWNweSgoKGNoYXIqKShwQnVmKSksKChjaGFyKikmKFZhbDY0KSksKDgpKSk7CiAgICAgICAg ICAgICAgICAqcExlbiA9IHNpemVvZih1NjQpOwogICAgICAgICAgICAgICAgYnJlYWs7CgogICAg ICAgIGNhc2UgMHhGRjAyMDE3ODoKCiAgICAgICAgICAgICAgICBpZiAoTWFjVHlwZSA9PSAwKSB7 CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAocEFDLT5Qbm1pLkR1YWxOZXRBY3RpdmVGbGFn ID09ICghMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWw2NCA9IHBBQy0+ UG5taS5CdWZQb3J0W05ldEluZGV4XS5SeERlbGl2ZXJlZEN0czsKICAgICAgICAgICAgICAgICAg ICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgVmFsNjQgPSBwQUMtPlBubWkuQnVmUG9ydFswXS5SeERlbGl2ZXJlZEN0 cyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQUMtPlBubWkuQnVm UG9ydFsxXS5SeERlbGl2ZXJlZEN0czsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgICAgICAg ICBpZiAocEFDLT5Qbm1pLkR1YWxOZXRBY3RpdmVGbGFnID09ICghMCkpIHsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBWYWw2NCA9IHBBQy0+UG5taS5Qb3J0W05ldEluZGV4XS5SeERl bGl2ZXJlZEN0czsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAg ICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsNjQgPSBwQUMt PlBubWkuUG9ydFswXS5SeERlbGl2ZXJlZEN0cyArCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwQUMtPlBubWkuUG9ydFsxXS5SeERlbGl2ZXJlZEN0czsKICAgICAgICAg ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKF9fYnVp bHRpbl9jb25zdGFudF9wKDgpID8gX19jb25zdGFudF9tZW1jcHkoKChjaGFyKikocEJ1ZikpLCgo Y2hhciopJihWYWw2NCkpLCg4KSkgOiBfX21lbWNweSgoKGNoYXIqKShwQnVmKSksKChjaGFyKikm KFZhbDY0KSksKDgpKSk7CiAgICAgICAgICAgICAgICAqcExlbiA9IHNpemVvZih1NjQpOwogICAg ICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgMHhGRjAyMDE3OToKCiAgICAgICAgICAg ICAgICBpZiAoTWFjVHlwZSA9PSAwKSB7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAocEFD LT5Qbm1pLkR1YWxOZXRBY3RpdmVGbGFnID09ICghMCkpIHsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBWYWw2NCA9IHBBQy0+UG5taS5CdWZQb3J0W05ldEluZGV4XS5SeE9jdGV0c0Rl bGl2ZXJlZEN0czsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAg ICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsNjQgPSBwQUMt PlBubWkuQnVmUG9ydFswXS5SeE9jdGV0c0RlbGl2ZXJlZEN0cyArCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwQUMtPlBubWkuQnVmUG9ydFsxXS5SeE9jdGV0c0RlbGl2 ZXJlZEN0czsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAocEFDLT5Qbm1p LkR1YWxOZXRBY3RpdmVGbGFnID09ICghMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBWYWw2NCA9IHBBQy0+UG5taS5Qb3J0W05ldEluZGV4XS5SeE9jdGV0c0RlbGl2ZXJlZEN0 czsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgZWxz ZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsNjQgPSBwQUMtPlBubWkuUG9y dFswXS5SeE9jdGV0c0RlbGl2ZXJlZEN0cyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwQUMtPlBubWkuUG9ydFsxXS5SeE9jdGV0c0RlbGl2ZXJlZEN0czsKICAgICAg ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKF9f YnVpbHRpbl9jb25zdGFudF9wKDgpID8gX19jb25zdGFudF9tZW1jcHkoKChjaGFyKikocEJ1Zikp LCgoY2hhciopJihWYWw2NCkpLCg4KSkgOiBfX21lbWNweSgoKGNoYXIqKShwQnVmKSksKChjaGFy KikmKFZhbDY0KSksKDgpKSk7CiAgICAgICAgICAgICAgICAqcExlbiA9IHNpemVvZih1NjQpOwog ICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgMHhGRjAyMDE3QToKICAgICAgICAg ICAgICAgIChfX2J1aWx0aW5fY29uc3RhbnRfcCg4KSA/IF9fY29uc3RhbnRfbWVtY3B5KCgoY2hh ciopKHBCdWYpKSwoKGNoYXIqKSYoVmFsNjRSeEh3RXJycykpLCg4KSkgOiBfX21lbWNweSgoKGNo YXIqKShwQnVmKSksKChjaGFyKikmKFZhbDY0UnhId0VycnMpKSwoOCkpKTsKICAgICAgICAgICAg ICAgICpwTGVuID0gc2l6ZW9mKHU2NCk7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAg Y2FzZSAweEZGMDIwMTdCOgogICAgICAgICAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKDgp ID8gX19jb25zdGFudF9tZW1jcHkoKChjaGFyKikocEJ1ZikpLCgoY2hhciopJihWYWw2NFR4SHdF cnJzKSksKDgpKSA6IF9fbWVtY3B5KCgoY2hhciopKHBCdWYpKSwoKGNoYXIqKSYoVmFsNjRUeEh3 RXJycykpLCg4KSkpOwogICAgICAgICAgICAgICAgKnBMZW4gPSBzaXplb2YodTY0KTsKICAgICAg ICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIDB4RkYwMjAxN0M6CgogICAgICAgICAgICAg ICAgaWYgKE1hY1R5cGUgPT0gMCkgewoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBBQy0+ UG5taS5EdWFsTmV0QWN0aXZlRmxhZyA9PSAoITApKSB7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgVmFsNjQgPSBWYWw2NFJ4SHdFcnJzICsgcEFDLT5Qbm1pLkJ1ZlBvcnRbTmV0SW5k ZXhdLlJ4Tm9CdWZDdHM7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg ICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbDY0ID0g VmFsNjRSeEh3RXJycyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw QUMtPlBubWkuQnVmUG9ydFswXS5SeE5vQnVmQ3RzICsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHBBQy0+UG5taS5CdWZQb3J0WzFdLlJ4Tm9CdWZDdHM7CiAgICAgICAg ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2Ug ewoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBBQy0+UG5taS5EdWFsTmV0QWN0aXZlRmxh ZyA9PSAoITApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsNjQgPSBWYWw2 NFJ4SHdFcnJzICsgcEFDLT5Qbm1pLlBvcnRbTmV0SW5kZXhdLlJ4Tm9CdWZDdHM7CiAgICAgICAg ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFZhbDY0ID0gVmFsNjRSeEh3RXJycyArCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQUMtPlBubWkuUG9ydFswXS5SeE5vQnVm Q3RzICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBQy0+UG5taS5Q b3J0WzFdLlJ4Tm9CdWZDdHM7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICAgIChfX2J1aWx0aW5fY29uc3RhbnRfcCg4KSA/IF9fY29uc3Rh bnRfbWVtY3B5KCgoY2hhciopKHBCdWYpKSwoKGNoYXIqKSYoVmFsNjQpKSwoOCkpIDogX19tZW1j cHkoKChjaGFyKikocEJ1ZikpLCgoY2hhciopJihWYWw2NCkpLCg4KSkpOwogICAgICAgICAgICAg ICAgKnBMZW4gPSBzaXplb2YodTY0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBj YXNlIDB4RkYwMjAxN0Q6CgogICAgICAgICAgICAgICAgaWYgKE1hY1R5cGUgPT0gMCkgewoKICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKHBBQy0+UG5taS5EdWFsTmV0QWN0aXZlRmxhZyA9PSAo ITApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsNjQgPSBWYWw2NFR4SHdF cnJzICsgcEFDLT5Qbm1pLkJ1ZlBvcnRbTmV0SW5kZXhdLlR4Tm9CdWZDdHM7CiAgICAgICAgICAg ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFZhbDY0ID0gVmFsNjRUeEh3RXJycyArCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQUMtPlBubWkuQnVmUG9ydFswXS5UeE5vQnVm Q3RzICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBQy0+UG5taS5C dWZQb3J0WzFdLlR4Tm9CdWZDdHM7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICAgICAgICAg aWYgKHBBQy0+UG5taS5EdWFsTmV0QWN0aXZlRmxhZyA9PSAoITApKSB7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgVmFsNjQgPSBWYWw2NFR4SHdFcnJzICsgcEFDLT5Qbm1pLlBvcnRb TmV0SW5kZXhdLlR4Tm9CdWZDdHM7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAg ICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZh bDY0ID0gVmFsNjRUeEh3RXJycyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwQUMtPlBubWkuUG9ydFswXS5UeE5vQnVmQ3RzICsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBBQy0+UG5taS5Qb3J0WzFdLlR4Tm9CdWZDdHM7CiAgICAgICAg ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIChfX2J1 aWx0aW5fY29uc3RhbnRfcCg4KSA/IF9fY29uc3RhbnRfbWVtY3B5KCgoY2hhciopKHBCdWYpKSwo KGNoYXIqKSYoVmFsNjQpKSwoOCkpIDogX19tZW1jcHkoKChjaGFyKikocEJ1ZikpLCgoY2hhciop JihWYWw2NCkpLCg4KSkpOwogICAgICAgICAgICAgICAgKnBMZW4gPSBzaXplb2YodTY0KTsKICAg ICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIDB4RkYwMjAxN0U6CgogICAgICAgICAg ICAgICAgaWYgKE1hY1R5cGUgPT0gMCkgewoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBB Qy0+UG5taS5EdWFsTmV0QWN0aXZlRmxhZyA9PSAoITApKSB7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgVmFsNjQgPSBwQUMtPlBubWkuQnVmUG9ydFtOZXRJbmRleF0uRXJyUmVjb3Zl cnlDdHM7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAg IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbDY0ID0gcEFDLT5Qbm1p LkJ1ZlBvcnRbMF0uRXJyUmVjb3ZlcnlDdHMgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcEFDLT5Qbm1pLkJ1ZlBvcnRbMV0uRXJyUmVjb3ZlcnlDdHM7CiAgICAgICAg ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2Ug ewoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBBQy0+UG5taS5EdWFsTmV0QWN0aXZlRmxh ZyA9PSAoITApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsNjQgPSBwQUMt PlBubWkuUG9ydFtOZXRJbmRleF0uRXJyUmVjb3ZlcnlDdHM7CiAgICAgICAgICAgICAgICAgICAg ICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFZhbDY0ID0gcEFDLT5Qbm1pLlBvcnRbMF0uRXJyUmVjb3ZlcnlDdHMgKwog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFDLT5Qbm1pLlBvcnRbMV0u RXJyUmVjb3ZlcnlDdHM7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgICAgIChfX2J1aWx0aW5fY29uc3RhbnRfcCg4KSA/IF9fY29uc3RhbnRf bWVtY3B5KCgoY2hhciopKHBCdWYpKSwoKGNoYXIqKSYoVmFsNjQpKSwoOCkpIDogX19tZW1jcHko KChjaGFyKikocEJ1ZikpLCgoY2hhciopJihWYWw2NCkpLCg4KSkpOwogICAgICAgICAgICAgICAg KnBMZW4gPSBzaXplb2YodTY0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNl IDB4RkYwMjAxN0Y6CiAgICAgICAgICAgICAgICBWYWw2NCA9IChTa09zR2V0VGltZShwQUMpKTsK ICAgICAgICAgICAgICAgIFZhbDY0IC09IHBBQy0+UG5taS5TdGFydFVwVGltZTsKICAgICAgICAg ICAgICAgIChfX2J1aWx0aW5fY29uc3RhbnRfcCg4KSA/IF9fY29uc3RhbnRfbWVtY3B5KCgoY2hh ciopKHBCdWYpKSwoKGNoYXIqKSYoVmFsNjQpKSwoOCkpIDogX19tZW1jcHkoKChjaGFyKikocEJ1 ZikpLCgoY2hhciopJihWYWw2NCkpLCg4KSkpOwogICAgICAgICAgICAgICAgKnBMZW4gPSBzaXpl b2YodTY0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIDB4RkYwMTAxMDA6 CiAgICAgICAgICAgICAgICBWYWwzMiA9IDB4MDAwMzAwMDE7CiAgICAgICAgICAgICAgICAoX19i dWlsdGluX2NvbnN0YW50X3AoNCkgPyBfX2NvbnN0YW50X21lbWNweSgoKGNoYXIqKShwQnVmKSks KChjaGFyKikmKFZhbDMyKSksKDQpKSA6IF9fbWVtY3B5KCgoY2hhciopKHBCdWYpKSwoKGNoYXIq KSYoVmFsMzIpKSwoNCkpKTsKICAgICAgICAgICAgICAgICpwTGVuID0gc2l6ZW9mKHUzMik7CiAg ICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAweDAwMDIwMTA0OgoKICAgICAgICAg ICAgICAgIGlmIChNYWNUeXBlID09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgVmFsNjQg PSBWYWw2NFJ4SHdFcnJzICsgcEFDLT5Qbm1pLkJ1ZlBvcnRbTmV0SW5kZXhdLlJ4Tm9CdWZDdHM7 CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAg ICAgICAgICAgVmFsNjQgPSBWYWw2NFJ4SHdFcnJzICsgcEFDLT5Qbm1pLlBvcnRbTmV0SW5kZXhd LlJ4Tm9CdWZDdHM7CiAgICAgICAgICAgICAgICB9CgoKCgogICAgICAgICAgICAgICAgaWYgKCFJ czY0Qml0UmVxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIFZhbDMyID0gKHUzMilWYWw2NDsK ICAgICAgICAgICAgICAgICAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKDQpID8gX19jb25z dGFudF9tZW1jcHkoKChjaGFyKikocEJ1ZikpLCgoY2hhciopJihWYWwzMikpLCg0KSkgOiBfX21l bWNweSgoKGNoYXIqKShwQnVmKSksKChjaGFyKikmKFZhbDMyKSksKDQpKSk7CiAgICAgICAgICAg ICAgICAgICAgICAgICpwTGVuID0gc2l6ZW9mKHUzMik7CiAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgKF9fYnVpbHRpbl9jb25z dGFudF9wKDgpID8gX19jb25zdGFudF9tZW1jcHkoKChjaGFyKikocEJ1ZikpLCgoY2hhciopJihW YWw2NCkpLCg4KSkgOiBfX21lbWNweSgoKGNoYXIqKShwQnVmKSksKChjaGFyKikmKFZhbDY0KSks KDgpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICpwTGVuID0gc2l6ZW9mKHU2NCk7CiAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAweDAwMDIw MTAzOgoKICAgICAgICAgICAgICAgIGlmIChNYWNUeXBlID09IDApIHsKICAgICAgICAgICAgICAg ICAgICAgICAgVmFsNjQgPSBWYWw2NFR4SHdFcnJzICsgcEFDLT5Qbm1pLkJ1ZlBvcnRbTmV0SW5k ZXhdLlR4Tm9CdWZDdHM7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsK ICAgICAgICAgICAgICAgICAgICAgICAgVmFsNjQgPSBWYWw2NFR4SHdFcnJzICsgcEFDLT5Qbm1p LlBvcnRbTmV0SW5kZXhdLlR4Tm9CdWZDdHM7CiAgICAgICAgICAgICAgICB9CgoKCgogICAgICAg ICAgICAgICAgaWYgKCFJczY0Qml0UmVxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIFZhbDMy ID0gKHUzMilWYWw2NDsKICAgICAgICAgICAgICAgICAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFu dF9wKDQpID8gX19jb25zdGFudF9tZW1jcHkoKChjaGFyKikocEJ1ZikpLCgoY2hhciopJihWYWwz MikpLCg0KSkgOiBfX21lbWNweSgoKGNoYXIqKShwQnVmKSksKChjaGFyKikmKFZhbDMyKSksKDQp KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICpwTGVuID0gc2l6ZW9mKHUzMik7CiAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAg KF9fYnVpbHRpbl9jb25zdGFudF9wKDgpID8gX19jb25zdGFudF9tZW1jcHkoKChjaGFyKikocEJ1 ZikpLCgoY2hhciopJihWYWw2NCkpLCg4KSkgOiBfX21lbWNweSgoKGNoYXIqKShwQnVmKSksKChj aGFyKikmKFZhbDY0KSksKDgpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICpwTGVuID0gc2l6 ZW9mKHU2NCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAg ICAgY2FzZSAweDAwMDIwMTA1OgoKICAgICAgICAgICAgICAgIGlmIChNYWNUeXBlID09IDApIHsK ICAgICAgICAgICAgICAgICAgICAgICAgVmFsNjQgPSBwQUMtPlBubWkuQnVmUG9ydFtOZXRJbmRl eF0uUnhOb0J1ZkN0czsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2Ugewog ICAgICAgICAgICAgICAgICAgICAgICBWYWw2NCA9IHBBQy0+UG5taS5Qb3J0W05ldEluZGV4XS5S eE5vQnVmQ3RzOwogICAgICAgICAgICAgICAgfQoKCgoKICAgICAgICAgICAgICAgIGlmICghSXM2 NEJpdFJlcSkgewogICAgICAgICAgICAgICAgICAgICAgICBWYWwzMiA9ICh1MzIpVmFsNjQ7CiAg ICAgICAgICAgICAgICAgICAgICAgIChfX2J1aWx0aW5fY29uc3RhbnRfcCg0KSA/IF9fY29uc3Rh bnRfbWVtY3B5KCgoY2hhciopKHBCdWYpKSwoKGNoYXIqKSYoVmFsMzIpKSwoNCkpIDogX19tZW1j cHkoKChjaGFyKikocEJ1ZikpLCgoY2hhciopJihWYWwzMikpLCg0KSkpOwogICAgICAgICAgICAg ICAgICAgICAgICAqcExlbiA9IHNpemVvZih1MzIpOwogICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIChfX2J1aWx0aW5fY29uc3Rh bnRfcCg4KSA/IF9fY29uc3RhbnRfbWVtY3B5KCgoY2hhciopKHBCdWYpKSwoKGNoYXIqKSYoVmFs NjQpKSwoOCkpIDogX19tZW1jcHkoKChjaGFyKikocEJ1ZikpLCgoY2hhciopJihWYWw2NCkpLCg4 KSkpOwogICAgICAgICAgICAgICAgICAgICAgICAqcExlbiA9IHNpemVvZih1NjQpOwogICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgMHgwMDAyMDIw RToKICAgICAgICAgICAgICAgIFZhbDMyID0gKHUzMilwQUMtPlBubWkuUG9ydFtOZXRJbmRleF0u VHhTd1F1ZXVlTGVuOwogICAgICAgICAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKDQpID8g X19jb25zdGFudF9tZW1jcHkoKChjaGFyKikocEJ1ZikpLCgoY2hhciopJihWYWwzMikpLCg0KSkg OiBfX21lbWNweSgoKGNoYXIqKShwQnVmKSksKChjaGFyKikmKFZhbDMyKSksKDQpKSk7CiAgICAg ICAgICAgICAgICAqcExlbiA9IHNpemVvZih1MzIpOwogICAgICAgICAgICAgICAgYnJlYWs7Cgog ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICBTa0Vycm9yTG9nKHBBQywgKDFMPDwzKSwg KDQwMCArIDM0KSwKICAgICAgICAgICAgICAgICAgICAgICAgIkdlbmVyYWw6IFVua25vd24gT0lE Iik7CgogICAgICAgICAgICAgICAgKnBMZW4gPSAwOwogICAgICAgICAgICAgICAgcmV0dXJuICgx KTsKICAgICAgICB9CgogICAgICAgIGlmIChJZCA9PSAweEZGMDIwMTdBIHx8CiAgICAgICAgICAg ICAgICBJZCA9PSAweEZGMDIwMTdCIHx8CiAgICAgICAgICAgICAgICBJZCA9PSAweEZGMDIwMTdD IHx8CiAgICAgICAgICAgICAgICBJZCA9PSAweEZGMDIwMTdEIHx8CiAgICAgICAgICAgICAgICBJ ZCA9PSAweDAwMDIwMTAzIHx8CiAgICAgICAgICAgICAgICBJZCA9PSAweDAwMDIwMTA0KSB7Cgog ICAgICAgICAgICAgICAgcEFDLT5Qbm1pLk1hY1VwZGF0ZWRGbGFnIC0tOwogICAgICAgIH0KCiAg ICAgICAgcmV0dXJuICgwKTsKfQojIDQ4MjYgInNrZ2Vwbm1pLmMiCnN0YXRpYyBpbnQgUmxtdCgK U0tfQUMgKnBBQywKY2hhciogSW9DLAppbnQgQWN0aW9uLAp1MzIgSWQsCmNoYXIgKnBCdWYsCnVu c2lnbmVkIGludCAqcExlbiwKdTMyIEluc3RhbmNlLAp1bnNpZ25lZCBpbnQgVGFibGVJbmRleCwK dTMyIE5ldEluZGV4KQp7CiAgICAgICAgaW50IFJldDsKICAgICAgICB1bnNpZ25lZCBpbnQgUGh5 c1BvcnRJbmRleDsKICAgICAgICB1bnNpZ25lZCBpbnQgUGh5c1BvcnRNYXg7CiAgICAgICAgU0tf RVZQQVJBIEV2ZW50UGFyYW07CiAgICAgICAgdTMyIFZhbDMyOwogICAgICAgIHU2NCBWYWw2NDsK CgoKCgogICAgICAgIGlmIChJbnN0YW5jZSAhPSAodTMyKSgtMSkgJiYgSW5zdGFuY2UgIT0gMSkg ewoKICAgICAgICAgICAgICAgICpwTGVuID0gMDsKICAgICAgICAgICAgICAgIHJldHVybiAoNik7 CiAgICAgICAgfQoKCgoKICAgICAgICBpZiAoQWN0aW9uID09IDApIHsKCgoKCgogICAgICAgICAg ICAgICAgc3dpdGNoIChJZCkgewoKICAgICAgICAgICAgICAgIGNhc2UgMHhGRjAxMDE0MDoKICAg ICAgICAgICAgICAgIGNhc2UgMHhGRjAxMDE0MjoKICAgICAgICAgICAgICAgIGNhc2UgMHhGRjAx MDE0MzoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCpwTGVuIDwgc2l6ZW9mKHU4KSkgewoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcExlbiA9IHNpemVvZih1OCk7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgyKTsKICAgICAgICAgICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBj YXNlIDB4RkYwMTAxNDE6CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgqcExlbiA8IHNpemVv Zih1MzIpKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwTGVuID0gc2l6ZW9m KHUzMik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgyKTsKICAgICAg ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAg ICAgICAgICAgICBjYXNlIDB4RkYwMjAxNjA6CiAgICAgICAgICAgICAgICBjYXNlIDB4RkYwMjAx NjE6CiAgICAgICAgICAgICAgICBjYXNlIDB4RkYwMjAxNjI6CiAgICAgICAgICAgICAgICBjYXNl IDB4RkYwMjAxNjM6CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgqcExlbiA8IHNpemVvZih1 NjQpKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwTGVuID0gc2l6ZW9mKHU2 NCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgyKTsKICAgICAgICAg ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAg ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICBTa0Vycm9yTG9nKHBBQywg KDFMPDwzKSwgKDQwMCArIDM1KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmxt dDogVW5rbm93biBPSUQiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICpwTGVuID0gMDsKICAg ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgxKTsKICAgICAgICAgICAgICAgIH0KCgoKCgoK CiAgICAgICAgICAgICAgICBpZiAoKFJldCA9IFJsbXRVcGRhdGUocEFDLCBJb0MsIE5ldEluZGV4 KSkgIT0gMCkgewoKICAgICAgICAgICAgICAgICAgICAgICAgKnBMZW4gPSAwOwogICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4gKFJldCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg ICAgICBwQUMtPlBubWkuUmxtdFVwZGF0ZWRGbGFnICsrOwoKCgoKICAgICAgICAgICAgICAgIHN3 aXRjaCAoSWQpIHsKCiAgICAgICAgICAgICAgICBjYXNlIDB4RkYwMTAxNDA6CiAgICAgICAgICAg ICAgICAgICAgICAgICpwQnVmID0gKGNoYXIpcEFDLT5SbG10Lk5ldFswXS5SbG10TW9kZTsKICAg ICAgICAgICAgICAgICAgICAgICAgKnBMZW4gPSBzaXplb2YoY2hhcik7CiAgICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgMHhGRjAxMDE0MToKICAgICAg ICAgICAgICAgICAgICAgICAgVmFsMzIgPSAodTMyKXBBQy0+R0luaS5HSU1hY3NGb3VuZDsKICAg ICAgICAgICAgICAgICAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKDQpID8gX19jb25zdGFu dF9tZW1jcHkoKChjaGFyKikocEJ1ZikpLCgoY2hhciopJihWYWwzMikpLCg0KSkgOiBfX21lbWNw eSgoKGNoYXIqKShwQnVmKSksKChjaGFyKikmKFZhbDMyKSksKDQpKSk7CiAgICAgICAgICAgICAg ICAgICAgICAgICpwTGVuID0gc2l6ZW9mKHUzMik7CiAgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgMHhGRjAxMDE0MjoKICAgICAgICAgICAgICAgICAg ICAgICAgKnBCdWYgPSAwOwoKCgoKCgoKICAgICAgICAgICAgICAgICAgICAgICAgUGh5c1BvcnRN YXggPSBwQUMtPkdJbmkuR0lNYWNzRm91bmQ7CgogICAgICAgICAgICAgICAgICAgICAgICBmb3Ig KFBoeXNQb3J0SW5kZXggPSAwOyBQaHlzUG9ydEluZGV4IDwgUGh5c1BvcnRNYXg7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUGh5c1BvcnRJbmRleCArKykgewoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpZiAocEFDLT5Qbm1pLlBvcnRbUGh5c1BvcnRJbmRleF0uQWN0 aXZlRmxhZykgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwQnVm ID0gKGNoYXIpKCh1bnNpZ25lZCBpbnQpKFBoeXNQb3J0SW5kZXgpICsgMSk7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg ICAgICAgKnBMZW4gPSBzaXplb2YoY2hhcik7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OwoKICAgICAgICAgICAgICAgIGNhc2UgMHhGRjAxMDE0MzoKICAgICAgICAgICAgICAgICAgICAg ICAgKnBCdWYgPSAoY2hhcikoKHVuc2lnbmVkIGludCkocEFDLT5SbG10Lk5ldFtOZXRJbmRleF0u UHJlZmVyZW5jZSkgKyAxKTsKICAgICAgICAgICAgICAgICAgICAgICAgKnBMZW4gPSBzaXplb2Yo Y2hhcik7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNh c2UgMHhGRjAyMDE2MDoKICAgICAgICAgICAgICAgICAgICAgICAgVmFsNjQgPSBwQUMtPlBubWku UmxtdENoYW5nZUN0czsKICAgICAgICAgICAgICAgICAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFu dF9wKDgpID8gX19jb25zdGFudF9tZW1jcHkoKChjaGFyKikocEJ1ZikpLCgoY2hhciopJihWYWw2 NCkpLCg4KSkgOiBfX21lbWNweSgoKGNoYXIqKShwQnVmKSksKChjaGFyKikmKFZhbDY0KSksKDgp KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICpwTGVuID0gc2l6ZW9mKHU2NCk7CiAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgMHhGRjAyMDE2MToK ICAgICAgICAgICAgICAgICAgICAgICAgVmFsNjQgPSBwQUMtPlBubWkuUmxtdENoYW5nZVRpbWU7 CiAgICAgICAgICAgICAgICAgICAgICAgIChfX2J1aWx0aW5fY29uc3RhbnRfcCg4KSA/IF9fY29u c3RhbnRfbWVtY3B5KCgoY2hhciopKHBCdWYpKSwoKGNoYXIqKSYoVmFsNjQpKSwoOCkpIDogX19t ZW1jcHkoKChjaGFyKikocEJ1ZikpLCgoY2hhciopJihWYWw2NCkpLCg4KSkpOwogICAgICAgICAg ICAgICAgICAgICAgICAqcExlbiA9IHNpemVvZih1NjQpOwogICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIDB4RkYwMjAxNjI6CiAgICAgICAgICAgICAg ICAgICAgICAgIFZhbDY0ID0gcEFDLT5Qbm1pLlJsbXRDaGFuZ2VFc3RpbWF0ZS5Fc3RpbWF0ZTsK ICAgICAgICAgICAgICAgICAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKDgpID8gX19jb25z dGFudF9tZW1jcHkoKChjaGFyKikocEJ1ZikpLCgoY2hhciopJihWYWw2NCkpLCg4KSkgOiBfX21l bWNweSgoKGNoYXIqKShwQnVmKSksKChjaGFyKikmKFZhbDY0KSksKDgpKSk7CiAgICAgICAgICAg ICAgICAgICAgICAgICpwTGVuID0gc2l6ZW9mKHU2NCk7CiAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgMHhGRjAyMDE2MzoKICAgICAgICAgICAgICAg ICAgICAgICAgVmFsNjQgPSBwQUMtPlBubWkuUmxtdENoYW5nZVRocmVzaG9sZDsKICAgICAgICAg ICAgICAgICAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKDgpID8gX19jb25zdGFudF9tZW1j cHkoKChjaGFyKikocEJ1ZikpLCgoY2hhciopJihWYWw2NCkpLCg4KSkgOiBfX21lbWNweSgoKGNo YXIqKShwQnVmKSksKChjaGFyKikmKFZhbDY0KSksKDgpKSk7CiAgICAgICAgICAgICAgICAgICAg ICAgICpwTGVuID0gc2l6ZW9mKHU2NCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoK ICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogICAg ICAgICAgICAgICAgICAgICAgICBwQUMtPlBubWkuUmxtdFVwZGF0ZWRGbGFnIC0tOwogICAgICAg ICAgICAgICAgICAgICAgICAqcExlbiA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy biAoMSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcEFDLT5Qbm1pLlJsbXRV cGRhdGVkRmxhZyAtLTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAg c3dpdGNoIChJZCkgewoKICAgICAgICAgICAgICAgIGNhc2UgMHhGRjAxMDE0MDoKCiAgICAgICAg ICAgICAgICAgICAgICAgIGlmICgqcExlbiA8IHNpemVvZihjaGFyKSkgewoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqcExlbiA9IHNpemVvZihjaGFyKTsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICByZXR1cm4gKDIpOwogICAgICAgICAgICAgICAgICAgICAgICB9Cgog ICAgICAgICAgICAgICAgICAgICAgICBpZiAoKnBMZW4gIT0gc2l6ZW9mKGNoYXIpIHx8CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpwQnVmICYgKDEpKSA9PSAwIHx8CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKih1OCAqKXBCdWYgPiAxNSkgewoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqcExlbiA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuICgzKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKEFjdGlvbiA9PSAxKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICpwTGVuID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g KDApOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAo X19idWlsdGluX2NvbnN0YW50X3AoMCkgPyAoX19idWlsdGluX2NvbnN0YW50X3AoKHNpemVvZihF dmVudFBhcmFtKSkpID8gX19jb25zdGFudF9jX2FuZF9jb3VudF9tZW1zZXQoKCgoY2hhciAqKSZF dmVudFBhcmFtKSksKCgweDAxMDEwMTAxVUwqKHVuc2lnbmVkIGNoYXIpKDApKSksKChzaXplb2Yo RXZlbnRQYXJhbSkpKSkgOiBfX2NvbnN0YW50X2NfbWVtc2V0KCgoKGNoYXIgKikmRXZlbnRQYXJh bSkpLCgoMHgwMTAxMDEwMVVMKih1bnNpZ25lZCBjaGFyKSgwKSkpLCgoc2l6ZW9mKEV2ZW50UGFy YW0pKSkpKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCgoc2l6ZW9mKEV2ZW50UGFyYW0pKSkgPyBf X21lbXNldF9nZW5lcmljKCgoKChjaGFyICopJkV2ZW50UGFyYW0pKSksKCgoMCkpKSwoKChzaXpl b2YoRXZlbnRQYXJhbSkpKSkpIDogX19tZW1zZXRfZ2VuZXJpYygoKChjaGFyICopJkV2ZW50UGFy YW0pKSwoKDApKSwoKHNpemVvZihFdmVudFBhcmFtKSkpKSkpOwogICAgICAgICAgICAgICAgICAg ICAgICBFdmVudFBhcmFtLlBhcmEzMlswXSB8PSAodTMyKSgqcEJ1Zik7CiAgICAgICAgICAgICAg ICAgICAgICAgIEV2ZW50UGFyYW0uUGFyYTMyWzFdID0gMDsKICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKFNrUmxtdEV2ZW50KHBBQywgSW9DLCAyMDA3LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEV2ZW50UGFyYW0pID4gMCkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBTa0Vycm9yTG9nKHBBQywgKDFMPDwzKSwgKDQwMCArIDM3KSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJSbG10OiBTS19STE1UX01PREVfQ0hBTkdFIGV2ZW50 IHJldHVybiBub3QgMCIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcExlbiA9 IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgxKTsKICAgICAgICAg ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAg ICAgICAgICBjYXNlIDB4RkYwMTAxNDM6CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoKnBM ZW4gPCBzaXplb2YoY2hhcikpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnBM ZW4gPSBzaXplb2YoY2hhcik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu ICgyKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAg aWYgKCpwTGVuICE9IHNpemVvZihjaGFyKSB8fCAqKHU4ICopcEJ1ZiA+CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKHU4KXBBQy0+R0luaS5HSU1hY3NGb3VuZCkgewoKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqcExlbiA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuICgzKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKEFjdGlvbiA9PSAxKSB7CgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICpwTGVuID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1 cm4gKDApOwogICAgICAgICAgICAgICAgICAgICAgICB9CgoKCgoKCiAgICAgICAgICAgICAgICAg ICAgICAgIChfX2J1aWx0aW5fY29uc3RhbnRfcCgwKSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCgo c2l6ZW9mKEV2ZW50UGFyYW0pKSkgPyBfX2NvbnN0YW50X2NfYW5kX2NvdW50X21lbXNldCgoKChj aGFyICopJkV2ZW50UGFyYW0pKSwoKDB4MDEwMTAxMDFVTCoodW5zaWduZWQgY2hhcikoMCkpKSwo KHNpemVvZihFdmVudFBhcmFtKSkpKSA6IF9fY29uc3RhbnRfY19tZW1zZXQoKCgoY2hhciAqKSZF dmVudFBhcmFtKSksKCgweDAxMDEwMTAxVUwqKHVuc2lnbmVkIGNoYXIpKDApKSksKChzaXplb2Yo RXZlbnRQYXJhbSkpKSkpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wKChzaXplb2YoRXZlbnRQYXJh bSkpKSA/IF9fbWVtc2V0X2dlbmVyaWMoKCgoKGNoYXIgKikmRXZlbnRQYXJhbSkpKSwoKCgwKSkp LCgoKHNpemVvZihFdmVudFBhcmFtKSkpKSkgOiBfX21lbXNldF9nZW5lcmljKCgoKGNoYXIgKikm RXZlbnRQYXJhbSkpLCgoMCkpLCgoc2l6ZW9mKEV2ZW50UGFyYW0pKSkpKSk7CiAgICAgICAgICAg ICAgICAgICAgICAgIEV2ZW50UGFyYW0uUGFyYTMyWzBdID0gKHUzMikoKnBCdWYpIC0gMTsKICAg ICAgICAgICAgICAgICAgICAgICAgRXZlbnRQYXJhbS5QYXJhMzJbMV0gPSBOZXRJbmRleDsKICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKFNrUmxtdEV2ZW50KHBBQywgSW9DLCAyMDA2LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV2ZW50UGFyYW0pID4gMCkgewoKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBTa0Vycm9yTG9nKHBBQywgKDFMPDwzKSwgKDQwMCArIDM4 KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSbG10OiBTS19STE1U X1BSRUZQT1JUX0NIQU5HRSBldmVudCByZXR1cm4gbm90IDAiKTsKCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKnBMZW4gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHJldHVybiAoMSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSAweEZGMDIwMTYzOgoKICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKCpwTGVuIDwgc2l6ZW9mKHU2NCkpIHsKCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKnBMZW4gPSBzaXplb2YodTY0KTsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4gKDIpOwogICAgICAgICAgICAgICAgICAgICAgICB9CgoKCgog ICAgICAgICAgICAgICAgICAgICAgICBpZiAoKnBMZW4gIT0gc2l6ZW9mKHU2NCkpIHsKCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKnBMZW4gPSAwOwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHJldHVybiAoMyk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAg ICAgICAgICAgICAgICAgICAgIGlmIChBY3Rpb24gPT0gMSkgewoKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqcExlbiA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cmV0dXJuICgwKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKCgoKICAgICAgICAgICAgICAg ICAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKDIpID8gX19jb25zdGFudF9tZW1jcHkoKChj aGFyKikmKFZhbDY0KSksKChjaGFyKikocEJ1ZikpLCgyKSkgOiBfX21lbWNweSgoKGNoYXIqKSYo VmFsNjQpKSwoKGNoYXIqKShwQnVmKSksKDIpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHBB Qy0+UG5taS5SbG10Q2hhbmdlVGhyZXNob2xkID0gVmFsNjQ7CiAgICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGRlZmF1bHQ6CgogICAgICAgICAgICAgICAgICAg ICAgICAqcExlbiA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoNCk7CiAgICAg ICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gKDApOwp9CiMgNTEzMSAic2tn ZXBubWkuYyIKc3RhdGljIGludCBSbG10U3RhdCgKU0tfQUMgKnBBQywKY2hhciogSW9DLAppbnQg QWN0aW9uLAp1MzIgSWQsCmNoYXIgKnBCdWYsCnVuc2lnbmVkIGludCAqcExlbiwKdTMyIEluc3Rh bmNlLAp1bnNpZ25lZCBpbnQgVGFibGVJbmRleCwKdTMyIE5ldEluZGV4KQp7CiAgICAgICAgdW5z aWduZWQgaW50IFBoeXNQb3J0TWF4OwogICAgICAgIHVuc2lnbmVkIGludCBQaHlzUG9ydEluZGV4 OwogICAgICAgIHVuc2lnbmVkIGludCBMaW1pdDsKICAgICAgICB1bnNpZ25lZCBpbnQgT2Zmc2V0 OwogICAgICAgIGludCBSZXQ7CiAgICAgICAgdTMyIFZhbDMyOwogICAgICAgIHU2NCBWYWw2NDsK CgoKCiAgICAgICAgUGh5c1BvcnRNYXggPSBwQUMtPkdJbmkuR0lNYWNzRm91bmQ7CgogICAgICAg IGlmICgoSW5zdGFuY2UgIT0gKHUzMikoLTEpKSkgewoKICAgICAgICAgICAgICAgIGlmICgoSW5z dGFuY2UgPCAxKSB8fCAoSW5zdGFuY2UgPiBQaHlzUG9ydE1heCkpIHsKCiAgICAgICAgICAgICAg ICAgICAgICAgICpwTGVuID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICg2KTsK ICAgICAgICAgICAgICAgIH0KCgogICAgICAgICAgICAgICAgUGh5c1BvcnRJbmRleCA9IEluc3Rh bmNlIC0gMTsKCgogICAgICAgICAgICAgICAgaWYgKHBBQy0+UG5taS5EdWFsTmV0QWN0aXZlRmxh ZyA9PSAoITApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIFBoeXNQb3J0SW5kZXggPSBOZXRJ bmRleDsKICAgICAgICAgICAgICAgIH0KCgogICAgICAgICAgICAgICAgTGltaXQgPSBQaHlzUG9y dEluZGV4ICsgMTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgUGh5 c1BvcnRJbmRleCA9IDA7CiAgICAgICAgICAgICAgICBMaW1pdCA9IFBoeXNQb3J0TWF4OwoKCiAg ICAgICAgICAgICAgICBpZiAocEFDLT5Qbm1pLkR1YWxOZXRBY3RpdmVGbGFnID09ICghMCkpIHsK ICAgICAgICAgICAgICAgICAgICAgICAgUGh5c1BvcnRJbmRleCA9IE5ldEluZGV4OwogICAgICAg ICAgICAgICAgICAgICAgICBMaW1pdCA9IFBoeXNQb3J0SW5kZXggKyAxOwogICAgICAgICAgICAg ICAgfQogICAgICAgIH0KCgoKCiAgICAgICAgaWYgKEFjdGlvbiAhPSAwKSB7CgogICAgICAgICAg ICAgICAgKnBMZW4gPSAwOwogICAgICAgICAgICAgICAgcmV0dXJuICg0KTsKICAgICAgICB9CgoK CgogICAgICAgIHN3aXRjaCAoSWQpIHsKCiAgICAgICAgY2FzZSAweEZGMDIwMTY0OgogICAgICAg IGNhc2UgMHhGRjAyMDE2NToKICAgICAgICAgICAgICAgIGlmICgqcExlbiA8IChMaW1pdCAtIFBo eXNQb3J0SW5kZXgpICogc2l6ZW9mKHUzMikpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICpw TGVuID0gKExpbWl0IC0gUGh5c1BvcnRJbmRleCkgKiBzaXplb2YodTMyKTsKICAgICAgICAgICAg ICAgICAgICAgICAgcmV0dXJuICgyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg IGJyZWFrOwoKICAgICAgICBjYXNlIDB4RkYwMjAxNjY6CiAgICAgICAgY2FzZSAweEZGMDIwMTY3 OgogICAgICAgIGNhc2UgMHhGRjAyMDE2ODoKICAgICAgICBjYXNlIDB4RkYwMjAxNjk6CiAgICAg ICAgICAgICAgICBpZiAoKnBMZW4gPCAoTGltaXQgLSBQaHlzUG9ydEluZGV4KSAqIHNpemVvZih1 NjQpKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAqcExlbiA9IChMaW1pdCAtIFBoeXNQb3J0 SW5kZXgpICogc2l6ZW9mKHU2NCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMik7 CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgZGVmYXVs dDoKICAgICAgICAgICAgICAgIFNrRXJyb3JMb2cocEFDLCAoMUw8PDMpLCAoNDAwICsgMzkpLAog ICAgICAgICAgICAgICAgICAgICAgICAiUmxtdFN0YXQ6IFVua25vd24gT0lEIik7CgogICAgICAg ICAgICAgICAgKnBMZW4gPSAwOwogICAgICAgICAgICAgICAgcmV0dXJuICgxKTsKCiAgICAgICAg fQoKCgoKCiAgICAgICAgaWYgKChSZXQgPSBSbG10VXBkYXRlKHBBQywgSW9DLCBOZXRJbmRleCkp ICE9IDApIHsKCiAgICAgICAgICAgICAgICAqcExlbiA9IDA7CiAgICAgICAgICAgICAgICByZXR1 cm4gKFJldCk7CiAgICAgICAgfQogICAgICAgIHBBQy0+UG5taS5SbG10VXBkYXRlZEZsYWcgKys7 CgoKCgogICAgICAgIE9mZnNldCA9IDA7CiAgICAgICAgZm9yICg7IFBoeXNQb3J0SW5kZXggPCBM aW1pdDsgUGh5c1BvcnRJbmRleCArKykgewoKICAgICAgICAgICAgICAgIHN3aXRjaCAoSWQpIHsK CiAgICAgICAgICAgICAgICBjYXNlIDB4RkYwMjAxNjQ6CiAgICAgICAgICAgICAgICAgICAgICAg IFZhbDMyID0gUGh5c1BvcnRJbmRleDsKICAgICAgICAgICAgICAgICAgICAgICAgKF9fYnVpbHRp bl9jb25zdGFudF9wKDQpID8gX19jb25zdGFudF9tZW1jcHkoKChjaGFyKikocEJ1ZiArIE9mZnNl dCkpLCgoY2hhciopJihWYWwzMikpLCg0KSkgOiBfX21lbWNweSgoKGNoYXIqKShwQnVmICsgT2Zm c2V0KSksKChjaGFyKikmKFZhbDMyKSksKDQpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIE9m ZnNldCArPSBzaXplb2YodTMyKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAg ICAgICAgICAgICAgY2FzZSAweEZGMDIwMTY1OgogICAgICAgICAgICAgICAgICAgICAgICBpZiAo cEFDLT5SbG10LlBvcnRbUGh5c1BvcnRJbmRleF0uUG9ydFN0YXRlID09CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgMCB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBB Qy0+UmxtdC5Qb3J0W1BoeXNQb3J0SW5kZXhdLlBvcnRTdGF0ZSA9PQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDIpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFs MzIgPSAzOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAg IGVsc2UgaWYgKHBBQy0+UG5taS5Qb3J0W1BoeXNQb3J0SW5kZXhdLkFjdGl2ZUZsYWcpIHsKCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsMzIgPSAyOwogICAgICAgICAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFZhbDMyID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgICAgICAgICAgICAoX19idWlsdGluX2NvbnN0YW50X3AoNCkgPyBfX2NvbnN0YW50 X21lbWNweSgoKGNoYXIqKShwQnVmICsgT2Zmc2V0KSksKChjaGFyKikmKFZhbDMyKSksKDQpKSA6 IF9fbWVtY3B5KCgoY2hhciopKHBCdWYgKyBPZmZzZXQpKSwoKGNoYXIqKSYoVmFsMzIpKSwoNCkp KTsKICAgICAgICAgICAgICAgICAgICAgICAgT2Zmc2V0ICs9IHNpemVvZih1MzIpOwogICAgICAg ICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIDB4RkYwMjAxNjY6 CiAgICAgICAgICAgICAgICAgICAgICAgIFZhbDY0ID0gcEFDLT5SbG10LlBvcnRbUGh5c1BvcnRJ bmRleF0uVHhIZWxsb0N0czsKICAgICAgICAgICAgICAgICAgICAgICAgKF9fYnVpbHRpbl9jb25z dGFudF9wKDgpID8gX19jb25zdGFudF9tZW1jcHkoKChjaGFyKikocEJ1ZiArIE9mZnNldCkpLCgo Y2hhciopJihWYWw2NCkpLCg4KSkgOiBfX21lbWNweSgoKGNoYXIqKShwQnVmICsgT2Zmc2V0KSks KChjaGFyKikmKFZhbDY0KSksKDgpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIE9mZnNldCAr PSBzaXplb2YodTY0KTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAg ICAgICAgY2FzZSAweEZGMDIwMTY3OgogICAgICAgICAgICAgICAgICAgICAgICBWYWw2NCA9IHBB Qy0+UmxtdC5Qb3J0W1BoeXNQb3J0SW5kZXhdLlJ4SGVsbG9DdHM7CiAgICAgICAgICAgICAgICAg ICAgICAgIChfX2J1aWx0aW5fY29uc3RhbnRfcCg4KSA/IF9fY29uc3RhbnRfbWVtY3B5KCgoY2hh ciopKHBCdWYgKyBPZmZzZXQpKSwoKGNoYXIqKSYoVmFsNjQpKSwoOCkpIDogX19tZW1jcHkoKChj aGFyKikocEJ1ZiArIE9mZnNldCkpLCgoY2hhciopJihWYWw2NCkpLCg4KSkpOwogICAgICAgICAg ICAgICAgICAgICAgICBPZmZzZXQgKz0gc2l6ZW9mKHU2NCk7CiAgICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgMHhGRjAyMDE2ODoKICAgICAgICAgICAg ICAgICAgICAgICAgVmFsNjQgPSBwQUMtPlJsbXQuUG9ydFtQaHlzUG9ydEluZGV4XS5UeFNwSGVs bG9SZXFDdHM7CiAgICAgICAgICAgICAgICAgICAgICAgIChfX2J1aWx0aW5fY29uc3RhbnRfcCg4 KSA/IF9fY29uc3RhbnRfbWVtY3B5KCgoY2hhciopKHBCdWYgKyBPZmZzZXQpKSwoKGNoYXIqKSYo VmFsNjQpKSwoOCkpIDogX19tZW1jcHkoKChjaGFyKikocEJ1ZiArIE9mZnNldCkpLCgoY2hhciop JihWYWw2NCkpLCg4KSkpOwogICAgICAgICAgICAgICAgICAgICAgICBPZmZzZXQgKz0gc2l6ZW9m KHU2NCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNh c2UgMHhGRjAyMDE2OToKICAgICAgICAgICAgICAgICAgICAgICAgVmFsNjQgPSBwQUMtPlJsbXQu UG9ydFtQaHlzUG9ydEluZGV4XS5SeFNwSGVsbG9DdHM7CiAgICAgICAgICAgICAgICAgICAgICAg IChfX2J1aWx0aW5fY29uc3RhbnRfcCg4KSA/IF9fY29uc3RhbnRfbWVtY3B5KCgoY2hhciopKHBC dWYgKyBPZmZzZXQpKSwoKGNoYXIqKSYoVmFsNjQpKSwoOCkpIDogX19tZW1jcHkoKChjaGFyKiko cEJ1ZiArIE9mZnNldCkpLCgoY2hhciopJihWYWw2NCkpLCg4KSkpOwogICAgICAgICAgICAgICAg ICAgICAgICBPZmZzZXQgKz0gc2l6ZW9mKHU2NCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOwoKICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgIDsK CgogICAgICAgICAgICAgICAgICAgICAgICBwQUMtPlBubWkuUmxtdFVwZGF0ZWRGbGFnIC0tOwog ICAgICAgICAgICAgICAgICAgICAgICAqcExlbiA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAg IHJldHVybiAoMSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICpwTGVuID0g T2Zmc2V0OwoKICAgICAgICBwQUMtPlBubWkuUmxtdFVwZGF0ZWRGbGFnIC0tOwoKICAgICAgICBy ZXR1cm4gKDApOwp9CiMgNTMzMyAic2tnZXBubWkuYyIKc3RhdGljIGludCBNYWNQcml2YXRlQ29u ZigKU0tfQUMgKnBBQywKY2hhciogSW9DLAppbnQgQWN0aW9uLAp1MzIgSWQsCmNoYXIgKnBCdWYs CnVuc2lnbmVkIGludCAqcExlbiwKdTMyIEluc3RhbmNlLAp1bnNpZ25lZCBpbnQgVGFibGVJbmRl eCwKdTMyIE5ldEluZGV4KQp7CiAgICAgICAgdW5zaWduZWQgaW50IFBoeXNQb3J0TWF4OwogICAg ICAgIHVuc2lnbmVkIGludCBQaHlzUG9ydEluZGV4OwogICAgICAgIHVuc2lnbmVkIGludCBMb2dQ b3J0TWF4OwogICAgICAgIHVuc2lnbmVkIGludCBMb2dQb3J0SW5kZXg7CiAgICAgICAgdW5zaWdu ZWQgaW50IExpbWl0OwogICAgICAgIHVuc2lnbmVkIGludCBPZmZzZXQ7CiAgICAgICAgY2hhciBW YWw4OwogICAgICAgIGludCBSZXQ7CiAgICAgICAgU0tfRVZQQVJBIEV2ZW50UGFyYW07CiAgICAg ICAgdTMyIFZhbDMyOwoKCgoKCgogICAgICAgIFBoeXNQb3J0TWF4ID0gcEFDLT5HSW5pLkdJTWFj c0ZvdW5kOwogICAgICAgIExvZ1BvcnRNYXggPSAoKHVuc2lnbmVkIGludCkoUGh5c1BvcnRNYXgp ICsgMSk7CgogICAgICAgIGlmIChwQUMtPlBubWkuRHVhbE5ldEFjdGl2ZUZsYWcgPT0gKCEwKSkg ewogICAgICAgICAgICAgICAgTG9nUG9ydE1heC0tOwogICAgICAgIH0KCiAgICAgICAgaWYgKChJ bnN0YW5jZSAhPSAodTMyKSgtMSkpKSB7CgogICAgICAgICAgICAgICAgaWYgKChJbnN0YW5jZSA8 IDEpIHx8IChJbnN0YW5jZSA+IExvZ1BvcnRNYXgpKSB7CgogICAgICAgICAgICAgICAgICAgICAg ICAqcExlbiA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoNik7CiAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICAgICBMb2dQb3J0SW5kZXggPSAoKHVuc2lnbmVkIGludCko SW5zdGFuY2UpIC0gMSk7CiAgICAgICAgICAgICAgICBMaW1pdCA9IExvZ1BvcnRJbmRleCArIDE7 CiAgICAgICAgfQoKICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICBMb2dQb3J0SW5kZXgg PSAwOwogICAgICAgICAgICAgICAgTGltaXQgPSBMb2dQb3J0TWF4OwogICAgICAgIH0KCgoKCiAg ICAgICAgaWYgKEFjdGlvbiA9PSAwKSB7CgoKCgogICAgICAgICAgICAgICAgc3dpdGNoIChJZCkg ewoKICAgICAgICAgICAgICAgIGNhc2UgMHhGRjAxMDEyMjoKICAgICAgICAgICAgICAgIGNhc2Ug MHhGRjAxMDEyMzoKICAgICAgICAgICAgICAgIGNhc2UgMHhGRjAxMDEyNDoKICAgICAgICAgICAg ICAgIGNhc2UgMHhGRjAxMDEyNToKICAgICAgICAgICAgICAgIGNhc2UgMHhGRjAxMDEyNjoKICAg ICAgICAgICAgICAgIGNhc2UgMHhGRjAxMDEyNzoKICAgICAgICAgICAgICAgIGNhc2UgMHhGRjAx MDEyODoKICAgICAgICAgICAgICAgIGNhc2UgMHhGRjAxMDEyOToKICAgICAgICAgICAgICAgIGNh c2UgMHhGRjAxMDEyQToKICAgICAgICAgICAgICAgIGNhc2UgMHhGRjAxMDEyQjoKICAgICAgICAg ICAgICAgIGNhc2UgMHhGRjAxMDEyQzoKICAgICAgICAgICAgICAgIGNhc2UgMHhGRjAxMDEyRDoK ICAgICAgICAgICAgICAgIGNhc2UgMHhGRjAxMDE3MDoKICAgICAgICAgICAgICAgIGNhc2UgMHhG RjAxMDE3MToKICAgICAgICAgICAgICAgIGNhc2UgMHhGRjAxMDE3MjoKICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKCpwTGVuIDwgKExpbWl0IC0gTG9nUG9ydEluZGV4KSAqIHNpemVvZih1OCkp IHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnBMZW4gPSAoTGltaXQgLSBMb2dQ b3J0SW5kZXgpICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVv Zih1OCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgyKTsKICAgICAg ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAg ICAgY2FzZSAweEZGMDEwMTFGOgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoKnBMZW4gPCBz aXplb2YodTMyKSkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcExlbiA9IHNp emVvZih1MzIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMik7CiAg ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cgog ICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgU2tFcnJvckxv ZyhwQUMsICgxTDw8MyksICg0MDAgKyA0MSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIk1hY1ByaXZhdGVDb25mOiBVbmtub3duIE9JRCIpOwogICAgICAgICAgICAgICAgICAgICAg ICAqcExlbiA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMSk7CiAgICAgICAg ICAgICAgICB9CgoKCgoKICAgICAgICAgICAgICAgIGlmICgoUmV0ID0gU2lycVVwZGF0ZShwQUMs IElvQykpICE9IDApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICpwTGVuID0gMDsKICAgICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIChSZXQpOwogICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgcEFDLT5Qbm1pLlNpcnFVcGRhdGVkRmxhZyArKzsKCgoKCiAgICAgICAgICAgICAg ICBPZmZzZXQgPSAwOwogICAgICAgICAgICAgICAgZm9yICg7IExvZ1BvcnRJbmRleCA8IExpbWl0 OyBMb2dQb3J0SW5kZXggKyspIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoSWQp IHsKCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHhGRjAxMDEyMjoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqKHBCdWYgKyBPZmZzZXQpID0gcEFDLT5Qbm1pLlBNRDsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPZmZzZXQgKz0gc2l6ZW9mKGNoYXIpOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICAg ICAgY2FzZSAweEZGMDEwMTIzOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoocEJ1 ZiArIE9mZnNldCkgPSBwQUMtPlBubWkuQ29ubmVjdG9yOwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE9mZnNldCArPSBzaXplb2YoY2hhcik7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4RkYwMTAxMjQ6 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwQUMtPlBubWkuRHVhbE5ldEFj dGl2ZUZsYWcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChM b2dQb3J0SW5kZXggPT0gMCkgewoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFZpcnR1YWxDb25mKHBBQywgSW9DLCBJZCwgcEJ1ZiArCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2Zmc2V0KTsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUGh5c1BvcnRJbmRleCA9ICgodW5zaWduZWQgaW50KShMb2dQ b3J0SW5kZXgpIC0gMSk7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKihwQnVmICsgT2Zmc2V0KSA9IHBBQy0+R0luaS5HUFsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaHlzUG9ydEluZGV4XS5Q TGlua0NhcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9mZnNldCArPSBzaXplb2YoY2hhcik7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICoocEJ1ZiArIE9mZnNldCkgPSBwQUMtPkdJbmkuR1BbTmV0SW5kZXhdLlBMaW5rQ2FwOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2Zmc2V0ICs9IHNpemVvZihjaGFy KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4RkYwMTAx MjU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwQUMtPlBubWkuRHVhbE5l dEFjdGl2ZUZsYWcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm IChMb2dQb3J0SW5kZXggPT0gMCkgewoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFZpcnR1YWxDb25mKHBBQywgSW9DLCBJZCwgcEJ1ZiArCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9mZnNldCk7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFBoeXNQb3J0SW5kZXggPSAoKHVuc2lnbmVkIGludCkoTG9nUG9ydElu ZGV4KSAtIDEpOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICoocEJ1ZiArIE9mZnNldCkgPSBwQUMtPkdJbmkuR1BbCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGh5c1BvcnRJbmRleF0uUExpbmtN b2RlQ29uZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9mZnNldCArPSBzaXplb2YoY2hhcik7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICoocEJ1ZiArIE9mZnNldCkgPSBwQUMtPkdJbmkuR1BbTmV0SW5kZXhdLlBMaW5rTW9kZUNvbmY7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPZmZzZXQgKz0gc2l6ZW9m KGNoYXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHhG RjAxMDEyNjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBBQy0+UG5taS5E dWFsTmV0QWN0aXZlRmxhZykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKExvZ1BvcnRJbmRleCA9PSAwKSB7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgVmlydHVhbENvbmYocEFDLCBJb0MsIElkLCBwQnVmICsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPZmZz ZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaHlzUG9ydEluZGV4ID0gKCh1bnNpZ25lZCBp bnQpKExvZ1BvcnRJbmRleCkgLSAxKTsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqKHBCdWYgKyBPZmZzZXQpID0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYWxjdWxhdGVMaW5rTW9kZVN0YXR1 cyhwQUMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBJb0MsIFBoeXNQb3J0SW5kZXgpOwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgT2Zmc2V0ICs9IHNpemVvZihjaGFyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAqKHBCdWYgKyBPZmZzZXQpID0gQ2FsY3VsYXRlTGlu a01vZGVTdGF0dXMocEFDLCBJb0MsIE5ldEluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE9mZnNldCArPSBzaXplb2YoY2hhcik7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoK ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEZGMDEwMTI3OgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGlmICghcEFDLT5Qbm1pLkR1YWxOZXRBY3RpdmVGbGFnKSB7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTG9nUG9ydEluZGV4ID09IDAp IHsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0 dWFsQ29uZihwQUMsIElvQywgSWQsIHBCdWYgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9mZnNldCk7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFBoeXNQb3J0SW5kZXggPSAoKHVuc2lnbmVkIGludCkoTG9nUG9ydEluZGV4KSAtIDEpOwoK CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoocEJ1ZiAr IE9mZnNldCkgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIENhbGN1bGF0ZUxpbmtTdGF0dXMocEFDLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW9DLCBQaHlzUG9ydElu ZGV4KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9mZnNldCArPSBzaXplb2YoY2hhcik7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoo cEJ1ZiArIE9mZnNldCkgPSBDYWxjdWxhdGVMaW5rU3RhdHVzKHBBQywgSW9DLCBOZXRJbmRleCk7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPZmZzZXQgKz0gc2l6ZW9m KGNoYXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHhG RjAxMDEyODoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBBQy0+UG5taS5E dWFsTmV0QWN0aXZlRmxhZykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKExvZ1BvcnRJbmRleCA9PSAwKSB7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgVmlydHVhbENvbmYocEFDLCBJb0MsIElkLCBwQnVmICsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPZmZz ZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaHlzUG9ydEluZGV4ID0gKCh1bnNpZ25lZCBp bnQpKExvZ1BvcnRJbmRleCkgLSAxKTsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqKHBCdWYgKyBPZmZzZXQpID0gcEFDLT5HSW5pLkdQWwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBoeXNQb3J0 SW5kZXhdLlBGbG93Q3RybENhcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9mZnNldCArPSBz aXplb2YoY2hhcik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICoocEJ1ZiArIE9mZnNldCkgPSBwQUMtPkdJbmkuR1BbTmV0SW5kZXhdLlBG bG93Q3RybENhcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9mZnNl dCArPSBzaXplb2YoY2hhcik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICAg ICAgY2FzZSAweEZGMDEwMTI5OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh cEFDLT5Qbm1pLkR1YWxOZXRBY3RpdmVGbGFnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpZiAoTG9nUG9ydEluZGV4ID09IDApIHsKCgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsQ29uZihwQUMsIElvQywgSWQs IHBCdWYgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE9mZnNldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBoeXNQb3J0SW5kZXggPSAo KHVuc2lnbmVkIGludCkoTG9nUG9ydEluZGV4KSAtIDEpOwoKCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICoocEJ1ZiArIE9mZnNldCkgPSBwQUMtPkdJbmku R1BbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUGh5c1BvcnRJbmRleF0uUEZsb3dDdHJsTW9kZTsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE9mZnNldCArPSBzaXplb2YoY2hhcik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICoocEJ1ZiArIE9mZnNldCkgPSBwQUMtPkdJbmkuR1Bb TmV0SW5kZXhdLlBGbG93Q3RybE1vZGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBPZmZzZXQgKz0gc2l6ZW9mKGNoYXIpOwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAg ICAgICAgICAgICAgICAgIGNhc2UgMHhGRjAxMDEyQToKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpZiAoIXBBQy0+UG5taS5EdWFsTmV0QWN0aXZlRmxhZykgewogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKExvZ1BvcnRJbmRleCA9PSAwKSB7CgoKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbENvbmYo cEFDLCBJb0MsIElkLCBwQnVmICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBPZmZzZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxz ZSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaHlz UG9ydEluZGV4ID0gKCh1bnNpZ25lZCBpbnQpKExvZ1BvcnRJbmRleCkgLSAxKTsKCgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKHBCdWYgKyBPZmZzZXQp ID0gcEFDLT5HSW5pLkdQWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFBoeXNQb3J0SW5kZXhdLlBGbG93Q3RybFN0YXR1czsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE9mZnNldCArPSBzaXplb2YoY2hhcik7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoocEJ1ZiArIE9mZnNldCkg PSBwQUMtPkdJbmkuR1BbTmV0SW5kZXhdLlBGbG93Q3RybFN0YXR1czsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE9mZnNldCArPSBzaXplb2YoY2hhcik7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEZGMDEwMTJCOgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcEFDLT5Qbm1pLkR1YWxOZXRBY3RpdmVGbGFn KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTG9nUG9ydElu ZGV4ID09IDApIHsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBWaXJ0dWFsQ29uZihwQUMsIElvQywgSWQsIHBCdWYgKwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9mZnNldCk7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFBoeXNQb3J0SW5kZXggPSAoKHVuc2lnbmVkIGludCkoTG9nUG9ydEluZGV4 KSAtIDEpOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICoocEJ1ZiArIE9mZnNldCkgPSBwQUMtPkdJbmkuR1BbCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGh5c1BvcnRJbmRleF0uUE1TQ2FwOwog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgT2Zmc2V0ICs9IHNpemVvZihjaGFyKTsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZWxzZSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihwQnVmICsg T2Zmc2V0KSA9IHBBQy0+R0luaS5HUFtOZXRJbmRleF0uUE1TQ2FwOwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgT2Zmc2V0ICs9IHNpemVvZihjaGFyKTsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7CgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4RkYwMTAxMkM6CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwQUMtPlBubWkuRHVhbE5ldEFjdGl2ZUZsYWcp IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChMb2dQb3J0SW5k ZXggPT0gMCkgewoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFZpcnR1YWxDb25mKHBBQywgSW9DLCBJZCwgcEJ1ZiArIE9mZnNldCk7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFBoeXNQb3J0SW5kZXggPSAoKHVuc2lnbmVkIGludCkoTG9nUG9ydEluZGV4 KSAtIDEpOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICoocEJ1ZiArIE9mZnNldCkgPSBwQUMtPkdJbmkuR1BbCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGh5c1BvcnRJbmRleF0uUE1TTW9kZTsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE9mZnNldCArPSBzaXplb2YoY2hhcik7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGVsc2UgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoocEJ1ZiAr IE9mZnNldCkgPSBwQUMtPkdJbmkuR1BbTmV0SW5kZXhdLlBNU01vZGU7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBPZmZzZXQgKz0gc2l6ZW9mKGNoYXIpOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHhGRjAxMDEyRDoKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBBQy0+UG5taS5EdWFsTmV0QWN0aXZlRmxh ZykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKExvZ1BvcnRJ bmRleCA9PSAwKSB7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgVmlydHVhbENvbmYocEFDLCBJb0MsIElkLCBwQnVmICsgT2Zmc2V0KTsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUGh5c1BvcnRJbmRleCA9ICgodW5zaWduZWQgaW50KShMb2dQb3J0SW5k ZXgpIC0gMSk7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKihwQnVmICsgT2Zmc2V0KSA9IHBBQy0+R0luaS5HUFsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaHlzUG9ydEluZGV4XS5QTVNTdGF0 dXM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPZmZzZXQgKz0gc2l6ZW9mKGNoYXIpOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKHBC dWYgKyBPZmZzZXQpID0gcEFDLT5HSW5pLkdQW05ldEluZGV4XS5QTVNTdGF0dXM7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPZmZzZXQgKz0gc2l6ZW9mKGNoYXIpOwog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHhGRjAxMDE3MDoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBBQy0+UG5taS5EdWFsTmV0QWN0 aXZlRmxhZykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKExv Z1BvcnRJbmRleCA9PSAwKSB7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgVmlydHVhbENvbmYocEFDLCBJb0MsIElkLCBwQnVmICsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPZmZzZXQpOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQaHlzUG9ydEluZGV4ID0gKCh1bnNpZ25lZCBpbnQpKExvZ1Bv cnRJbmRleCkgLSAxKTsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqKHBCdWYgKyBPZmZzZXQpID0gcEFDLT5HSW5pLkdQWwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBoeXNQb3J0SW5kZXhdLlBM aW5rU3BlZWRDYXA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPZmZzZXQgKz0gc2l6ZW9mKGNo YXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAqKHBCdWYgKyBPZmZzZXQpID0gcEFDLT5HSW5pLkdQW05ldEluZGV4XS5QTGlua1NwZWVk Q2FwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2Zmc2V0ICs9IHNp emVvZihjaGFyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgICAgICBjYXNl IDB4RkYwMTAxNzE6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwQUMtPlBu bWkuRHVhbE5ldEFjdGl2ZUZsYWcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGlmIChMb2dQb3J0SW5kZXggPT0gMCkgewoKCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxDb25mKHBBQywgSW9DLCBJZCwgcEJ1ZiAr IE9mZnNldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBoeXNQb3J0SW5kZXggPSAoKHVuc2ln bmVkIGludCkoTG9nUG9ydEluZGV4KSAtIDEpOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICoocEJ1ZiArIE9mZnNldCkgPSBwQUMtPkdJbmkuR1BbCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGh5 c1BvcnRJbmRleF0uUExpbmtTcGVlZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9mZnNldCAr PSBzaXplb2YoY2hhcik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICoocEJ1ZiArIE9mZnNldCkgPSBwQUMtPkdJbmkuR1BbTmV0SW5kZXhd LlBMaW5rU3BlZWQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPZmZz ZXQgKz0gc2l6ZW9mKGNoYXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAg ICAgIGNhc2UgMHhGRjAxMDE3MjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo IXBBQy0+UG5taS5EdWFsTmV0QWN0aXZlRmxhZykgewogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKExvZ1BvcnRJbmRleCA9PSAwKSB7CgoKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbENvbmYocEFDLCBJb0MsIElk LCBwQnVmICsgT2Zmc2V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewoKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGh5c1BvcnRJbmRleCA9 ICgodW5zaWduZWQgaW50KShMb2dQb3J0SW5kZXgpIC0gMSk7CgoKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihwQnVmICsgT2Zmc2V0KSA9IHBBQy0+R0lu aS5HUFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQaHlzUG9ydEluZGV4XS5QTGlua1NwZWVkVXNlZDsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE9mZnNldCArPSBzaXplb2YoY2hhcik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICoocEJ1ZiArIE9mZnNldCkgPSBwQUMtPkdJbmku R1BbTmV0SW5kZXhdLlBMaW5rU3BlZWRVc2VkOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgT2Zmc2V0ICs9IHNpemVvZihjaGFyKTsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAg ICAgICAgICAgICAgICAgICAgICBjYXNlIDB4RkYwMTAxMUY6CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgVmFsMzIgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChf X2J1aWx0aW5fY29uc3RhbnRfcCg0KSA/IF9fY29uc3RhbnRfbWVtY3B5KCgoY2hhciopKHBCdWYg KyBPZmZzZXQpKSwoKGNoYXIqKSYoVmFsMzIpKSwoNCkpIDogX19tZW1jcHkoKChjaGFyKikocEJ1 ZiArIE9mZnNldCkpLCgoY2hhciopJihWYWwzMikpLCg0KSkpOwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE9mZnNldCArPSBzaXplb2YodTMyKTsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcEFDLT5Qbm1pLlNpcnFVcGRhdGVkRmxhZyAtLTsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICByZXR1cm4gKDEpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICAgICAqcExlbiA9IE9mZnNldDsKICAgICAgICAgICAgICAg IHBBQy0+UG5taS5TaXJxVXBkYXRlZEZsYWcgLS07CgogICAgICAgICAgICAgICAgcmV0dXJuICgw KTsKICAgICAgICB9CgoKCgoKICAgICAgICBzd2l0Y2ggKElkKSB7CgogICAgICAgIGNhc2UgMHhG RjAxMDEyNToKICAgICAgICBjYXNlIDB4RkYwMTAxMjk6CiAgICAgICAgY2FzZSAweEZGMDEwMTJD OgogICAgICAgIGNhc2UgMHhGRjAxMDE3MToKICAgICAgICAgICAgICAgIGlmICgqcExlbiA8IExp bWl0IC0gTG9nUG9ydEluZGV4KSB7CgogICAgICAgICAgICAgICAgICAgICAgICAqcExlbiA9IExp bWl0IC0gTG9nUG9ydEluZGV4OwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDIpOwog ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCpwTGVuICE9IExpbWl0IC0gTG9n UG9ydEluZGV4KSB7CgogICAgICAgICAgICAgICAgICAgICAgICAqcExlbiA9IDA7CiAgICAgICAg ICAgICAgICAgICAgICAgIHJldHVybiAoMyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg ICAgICBicmVhazsKCiAgICAgICAgY2FzZSAweEZGMDEwMTFGOgogICAgICAgICAgICAgICAgaWYg KCpwTGVuIDwgc2l6ZW9mKHUzMikpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICpwTGVuID0g c2l6ZW9mKHUzMik7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMik7CiAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoKnBMZW4gIT0gc2l6ZW9mKHUzMikpIHsKCiAg ICAgICAgICAgICAgICAgICAgICAgICpwTGVuID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAg cmV0dXJuICgzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwoKICAg IGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAqcExlbiA9IDA7CiAgICAgICAgICAgICAgICByZXR1 cm4gKDQpOwogICAgICAgIH0KCgoKCiAgICAgICAgT2Zmc2V0ID0gMDsKICAgICAgICBmb3IgKDsg TG9nUG9ydEluZGV4IDwgTGltaXQ7IExvZ1BvcnRJbmRleCArKykgewoKICAgICAgICAgICAgICAg IHN3aXRjaCAoSWQpIHsKCiAgICAgICAgICAgICAgICBjYXNlIDB4RkYwMTAxMjU6CgogICAgICAg ICAgICAgICAgICAgICAgICBWYWw4ID0gKihwQnVmICsgT2Zmc2V0KTsKICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKFZhbDggPT0gMCkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBPZmZzZXQgKz0gc2l6ZW9mKGNoYXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAg IGlmIChWYWw4IDwgMSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChMb2dQb3J0 SW5kZXggIT0gMCAmJiBWYWw4ID4gNikgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoTG9nUG9ydEluZGV4ID09IDAgJiYgVmFsOCA+IDcpKSB7CgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICpwTGVuID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gKDMpOwogICAgICAgICAgICAgICAgICAgICAgICB9CgoKICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKEFjdGlvbiA9PSAxKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHJldHVybiAoMCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAg ICAgICAgIGlmIChMb2dQb3J0SW5kZXggPT0gMCkgewoKCgoKCgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGZvciAoUGh5c1BvcnRJbmRleCA9IDA7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQaHlzUG9ydEluZGV4IDwgUGh5c1BvcnRNYXg7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaHlzUG9ydEluZGV4ICsrKSB7CgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwQUMtPlBubWkuUG9ydFtQ aHlzUG9ydEluZGV4XS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQWN0aXZlRmxhZykgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnRQYXJh bS5QYXJhMzJbMF0gPSBQaHlzUG9ydEluZGV4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRXZlbnRQYXJhbS5QYXJhMzJbMV0gPSAodTMyKVZhbDg7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoU2tHZVNpcnFFdmVudChwQUMsIElvQywK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnRQYXJhbSkgPiAw KSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa0Vy cm9yTG9nKHBBQywgKDFMPDwzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoNDAwICsgNDMpLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNYWNQcml2YXRlQ29uZjogU0tfSFdFVl9T RVRfTE1PREUgcmV0dXJuZWQgbm90IDAiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICpwTGVuID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgxKTsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CgoKCgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV2ZW50UGFyYW0uUGFyYTMyWzBdID0gKCh1 bnNpZ25lZCBpbnQpKExvZ1BvcnRJbmRleCkgLSAxKTsKCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRXZlbnRQYXJhbS5QYXJhMzJbMV0gPSAodTMyKVZhbDg7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKFNrR2VTaXJxRXZlbnQocEFDLCBJb0MsIDYsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFdmVudFBhcmFtKSA+IDApIHsKCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa0Vycm9yTG9nKHBBQywgKDFMPDwz KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDQwMCAr IDQzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1h Y1ByaXZhdGVDb25mOiBTS19IV0VWX1NFVF9MTU9ERSByZXR1cm5lZCBub3QgMCIpOwoKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwTGVuID0gMDsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMSk7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg ICAgICAgICAgIE9mZnNldCArPSBzaXplb2YoY2hhcik7CiAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgMHhGRjAxMDEyOToKCiAgICAgICAgICAgICAg ICAgICAgICAgIFZhbDggPSAqKHBCdWYgKyBPZmZzZXQpOwogICAgICAgICAgICAgICAgICAgICAg ICBpZiAoVmFsOCA9PSAwKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9mZnNl dCArPSBzaXplb2YoY2hhcik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFZh bDggPCAxIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKExvZ1BvcnRJbmRleCAh PSAwICYmIFZhbDggPiA0KSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChMb2dQ b3J0SW5kZXggPT0gMCAmJiBWYWw4ID4gNSkpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKnBMZW4gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAo Myk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCgogICAgICAgICAgICAgICAgICAgICAgICBp ZiAoQWN0aW9uID09IDEpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu ICgwKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAg aWYgKExvZ1BvcnRJbmRleCA9PSAwKSB7CgoKCgoKCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZm9yIChQaHlzUG9ydEluZGV4ID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFBoeXNQb3J0SW5kZXggPCBQaHlzUG9ydE1heDsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFBoeXNQb3J0SW5kZXggKyspIHsKCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBBQy0+UG5taS5Qb3J0W1BoeXNQb3J0 SW5kZXhdLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB Y3RpdmVGbGFnKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFdmVudFBhcmFtLlBhcmEz MlswXSA9IFBoeXNQb3J0SW5kZXg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBFdmVudFBhcmFtLlBhcmEzMlsxXSA9ICh1MzIpVmFsODsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGlmIChTa0dlU2lycUV2ZW50KHBBQywgSW9DLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFdmVudFBhcmFtKSA+IDApIHsKCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrRXJyb3JMb2co cEFDLCAoMUw8PDMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICg0MDAgKyA0NCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIk1hY1ByaXZhdGVDb25mOiBTS19IV0VWX1NFVF9GTE9X TU9ERSByZXR1cm5lZCBub3QgMCIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKnBMZW4gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICByZXR1cm4gKDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKCgoKCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnRQYXJhbS5QYXJhMzJbMF0gPSAoKHVuc2ln bmVkIGludCkoTG9nUG9ydEluZGV4KSAtIDEpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBFdmVudFBhcmFtLlBhcmEzMlsxXSA9ICh1MzIpVmFsODsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpZiAoU2tHZVNpcnFFdmVudChwQUMsIElvQywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDcsIEV2ZW50UGFyYW0pCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA+IDApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBTa0Vycm9yTG9nKHBBQywgKDFMPDwzKSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDQwMCArIDQ0KSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1hY1ByaXZhdGVDb25mOiBTS19IV0VW X1NFVF9GTE9XTU9ERSByZXR1cm5lZCBub3QgMCIpOwoKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICpwTGVuID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHJldHVybiAoMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIE9mZnNldCAr PSBzaXplb2YoY2hhcik7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAg ICAgICAgIGNhc2UgMHhGRjAxMDEyQyA6CgogICAgICAgICAgICAgICAgICAgICAgICBWYWw4ID0g KihwQnVmICsgT2Zmc2V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFZhbDggPT0gMCkg ewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPZmZzZXQgKz0gc2l6ZW9mKGNoYXIp OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChWYWw4IDwgMSB8fAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChMb2dQb3J0SW5kZXggIT0gMCAmJiBWYWw4ID4gMykg fHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTG9nUG9ydEluZGV4ID09IDAgJiYg VmFsOCA+IDQpKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwTGVuID0gMDsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDMpOwogICAgICAgICAgICAg ICAgICAgICAgICB9CgoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFjdGlvbiA9PSAxKSB7 CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCk7CiAgICAgICAgICAg ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChMb2dQb3J0SW5kZXgg PT0gMCkgewoKCgoKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoUGh5c1Bv cnRJbmRleCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaHlz UG9ydEluZGV4IDwgUGh5c1BvcnRNYXg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQaHlzUG9ydEluZGV4ICsrKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKCFwQUMtPlBubWkuUG9ydFtQaHlzUG9ydEluZGV4XS4KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZlRmxhZykgewoKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnRQYXJhbS5QYXJhMzJbMF0gPSBQaHlzUG9ydElu ZGV4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnRQYXJhbS5Q YXJhMzJbMV0gPSAodTMyKVZhbDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpZiAoU2tHZVNpcnFFdmVudChwQUMsIElvQywKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRXZlbnRQYXJhbSkgPiAwKSB7CgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa0Vycm9yTG9nKHBBQywgKDFMPDwzKSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNDAw ICsgNDIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJNYWNQcml2YXRlQ29uZjogU0tfSFdFVl9TRVRfUk9MRSByZXR1cm5lZCBub3QgMCIp OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnBMZW4g PSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1 cm4gKDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgICAgICAgICAgICBlbHNlIHsKCgoKCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRXZlbnRQYXJhbS5QYXJhMzJbMF0gPSAoKHVuc2lnbmVkIGludCkoTG9nUG9ydEluZGV4 KSAtIDEpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFdmVudFBhcmFtLlBhcmEz MlsxXSA9ICh1MzIpVmFsODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoU2tH ZVNpcnFFdmVudChwQUMsIElvQywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDgsIEV2ZW50UGFyYW0pID4gMCkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFNrRXJyb3JMb2cocEFDLCAoMUw8PDMpLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoNDAwICsgNDIpLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWFjUHJpdmF0ZUNvbmY6IFNLX0hXRVZfU0VU X1JPTEUgcmV0dXJuZWQgbm90IDAiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqcExlbiA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4gKDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgT2Zmc2V0ICs9IHNpemVv ZihjaGFyKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAg Y2FzZSAweEZGMDEwMTcxOgoKICAgICAgICAgICAgICAgICAgICAgICAgVmFsOCA9ICoocEJ1ZiAr IE9mZnNldCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChWYWw4ID09IDApIHsKCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgT2Zmc2V0ICs9IHNpemVvZihjaGFyKTsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAg fQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoVmFsOCA8ICgxKSB8fAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChMb2dQb3J0SW5kZXggIT0gMCAmJiBWYWw4ID4gKDQpKSB8fAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChMb2dQb3J0SW5kZXggPT0gMCAmJiBWYWw4 ID4gKDUpKSkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcExlbiA9IDA7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgzKTsKICAgICAgICAgICAgICAg ICAgICAgICAgfQoKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBY3Rpb24gPT0gMSkgewoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDApOwogICAgICAgICAgICAg ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoTG9nUG9ydEluZGV4ID09 IDApIHsKCgoKCgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFBoeXNQb3J0 SW5kZXggPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGh5c1Bv cnRJbmRleCA8IFBoeXNQb3J0TWF4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUGh5c1BvcnRJbmRleCArKykgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGlmICghcEFDLT5Qbm1pLlBvcnRbUGh5c1BvcnRJbmRleF0uQWN0aXZlRmxhZykg ewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu dWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnRQYXJhbS5QYXJhMzJbMF0gPSBQaHlz UG9ydEluZGV4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnRQ YXJhbS5QYXJhMzJbMV0gPSAodTMyKVZhbDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpZiAoU2tHZVNpcnFFdmVudChwQUMsIElvQywKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnRQYXJhbSkgPiAwKSB7CgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa0Vycm9yTG9nKHBBQywgKDFMPDwz KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoNDAwICsgNDUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJNYWNQcml2YXRlQ29uZjogU0tfSFdFVl9TRVRfU1BFRUQgcmV0dXJuZWQg bm90IDAiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICpwTGVuID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuICgxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CgoKCgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEV2ZW50UGFyYW0uUGFyYTMyWzBdID0gKCh1bnNpZ25lZCBpbnQpKExvZ1Bv cnRJbmRleCkgLSAxKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnRQYXJh bS5QYXJhMzJbMV0gPSAodTMyKVZhbDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aWYgKFNrR2VTaXJxRXZlbnQocEFDLCBJb0MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXZl bnRQYXJhbSkgPiAwKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg U2tFcnJvckxvZyhwQUMsICgxTDw8MyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICg0MDAgKyA0NSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJNYWNQcml2YXRlQ29uZjogU0tfSFdFVl9TRVRfU1BFRUQgcmV0 dXJuZWQgbm90IDAiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq cExlbiA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g KDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBPZmZzZXQgKz0gc2l6ZW9mKGNoYXIpOwog ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIDB4RkYw MTAxMUYgOgoKICAgICAgICAgICAgICAgICAgICAgICAgVmFsMzIgPSAqKHUzMiopKHBCdWYgKyBP ZmZzZXQpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoVmFsMzIgPT0gMCkgewoKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBPZmZzZXQgKz0gc2l6ZW9mKHUzMik7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDAgIT0gMCkgewogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICpwTGVuID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gKDMpOwogICAgICAgICAgICAgICAgICAgICAgICB9CgoKICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKEFjdGlvbiA9PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cmV0dXJuICgwKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKDAgIT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy biAoMSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAg IE9mZnNldCArPSBzaXplb2YodTMyKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cgog ICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAg ICAgICAgICpwTGVuID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgxKTsKICAg ICAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAoMCk7Cn0KIyA2MjE1ICJz a2dlcG5taS5jIgpzdGF0aWMgaW50IE1vbml0b3IoClNLX0FDICpwQUMsCmNoYXIqIElvQywKaW50 IEFjdGlvbiwKdTMyIElkLApjaGFyICpwQnVmLAp1bnNpZ25lZCBpbnQgKnBMZW4sCnUzMiBJbnN0 YW5jZSwKdW5zaWduZWQgaW50IFRhYmxlSW5kZXgsCnUzMiBOZXRJbmRleCkKewogICAgICAgIHVu c2lnbmVkIGludCBJbmRleDsKICAgICAgICB1bnNpZ25lZCBpbnQgTGltaXQ7CiAgICAgICAgdW5z aWduZWQgaW50IE9mZnNldDsKICAgICAgICB1bnNpZ25lZCBpbnQgRW50cmllczsKCgoKCgoKICAg ICAgICBFbnRyaWVzID0gMDsKCiAgICAgICAgaWYgKChJbnN0YW5jZSAhPSAodTMyKSgtMSkpKSB7 CgogICAgICAgICAgICAgICAgaWYgKChJbnN0YW5jZSA8IDEpIHx8IChJbnN0YW5jZSA+IEVudHJp ZXMpKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAqcExlbiA9IDA7CiAgICAgICAgICAgICAg ICAgICAgICAgIHJldHVybiAoNik7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg SW5kZXggPSAodW5zaWduZWQgaW50KUluc3RhbmNlIC0gMTsKICAgICAgICAgICAgICAgIExpbWl0 ID0gKHVuc2lnbmVkIGludClJbnN0YW5jZTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAg ICAgICAgICAgICBJbmRleCA9IDA7CiAgICAgICAgICAgICAgICBMaW1pdCA9IEVudHJpZXM7CiAg ICAgICAgfQoKCgoKICAgICAgICBpZiAoQWN0aW9uID09IDApIHsKCiAgICAgICAgICAgICAgICBm b3IgKE9mZnNldD0wOyBJbmRleCA8IExpbWl0OyBJbmRleCArKykgewoKICAgICAgICAgICAgICAg ICAgICAgICAgc3dpdGNoIChJZCkgewoKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEZG MDEwMTUxOgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4RkYwMTAxNTI6CiAgICAgICAg ICAgICAgICAgICAgICAgIGNhc2UgMHhGRjAxMDE1MzoKICAgICAgICAgICAgICAgICAgICAgICAg Y2FzZSAweEZGMDEwMTU0OgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4RkYwMTAxNTU6 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAg ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrRXJyb3JM b2cocEFDLCAoMUw8PDMpLCAoNDAwICsgNDYpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIk1vbml0b3I6IFVua25vd24gT0lEIik7CgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICpwTGVuID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gKDEpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgICAgICAqcExlbiA9IE9mZnNldDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7Cgog ICAgICAgICAgICAgICAgaWYgKElkICE9IDB4RkYwMTAxNTUpIHsKCiAgICAgICAgICAgICAgICAg ICAgICAgICpwTGVuID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICg0KTsKICAg ICAgICAgICAgICAgIH0KCgogICAgICAgICAgICAgICAgaWYgKCpwTGVuIDwgKExpbWl0IC0gSW5k ZXgpKSB7CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDIpOwogICAgICAgICAgICAg ICAgfQoKICAgICAgICAgICAgICAgIGlmICgqcExlbiAhPSAoTGltaXQgLSBJbmRleCkpIHsKCiAg ICAgICAgICAgICAgICAgICAgICAgICpwTGVuID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAg cmV0dXJuICgzKTsKICAgICAgICAgICAgICAgIH0KIyA2MzA3ICJza2dlcG5taS5jIgogICAgICAg ICAgICAgICAgKnBMZW4gPSAwOwogICAgICAgICAgICAgICAgcmV0dXJuICgzKTsKICAgICAgICB9 CgogICAgICAgIHJldHVybiAoMCk7Cn0KIyA2MzMwICJza2dlcG5taS5jIgpzdGF0aWMgdm9pZCBW aXJ0dWFsQ29uZigKU0tfQUMgKnBBQywKY2hhciogSW9DLAp1MzIgSWQsCmNoYXIgKnBCdWYpCnsK ICAgICAgICB1bnNpZ25lZCBpbnQgUGh5c1BvcnRNYXg7CiAgICAgICAgdW5zaWduZWQgaW50IFBo eXNQb3J0SW5kZXg7CiAgICAgICAgdTggVmFsODsKICAgICAgICB1OCBQb3J0QWN0aXZlRmxhZzsK CgogICAgICAgICpwQnVmID0gMDsKICAgICAgICBQb3J0QWN0aXZlRmxhZyA9IDA7CiAgICAgICAg UGh5c1BvcnRNYXggPSBwQUMtPkdJbmkuR0lNYWNzRm91bmQ7CgogICAgICAgIGZvciAoUGh5c1Bv cnRJbmRleCA9IDA7IFBoeXNQb3J0SW5kZXggPCBQaHlzUG9ydE1heDsKICAgICAgICAgICAgICAg IFBoeXNQb3J0SW5kZXggKyspIHsKCgogICAgICAgICAgICAgICAgaWYgKCFwQUMtPlBubWkuUG9y dFtQaHlzUG9ydEluZGV4XS5BY3RpdmVGbGFnKSB7CgogICAgICAgICAgICAgICAgICAgICAgICBj b250aW51ZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBQb3J0QWN0aXZlRmxh ZyA9ICghMCk7CgogICAgICAgICAgICAgICAgc3dpdGNoIChJZCkgewoKICAgICAgICAgICAgICAg IGNhc2UgMHhGRjAxMDEyNDoKCgoKCgoKCiAgICAgICAgICAgICAgICAgICAgICAgICpwQnVmIHw9 IHBBQy0+R0luaS5HUFtQaHlzUG9ydEluZGV4XS5QTGlua0NhcDsKICAgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSAweEZGMDEwMTI1OgoKICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKCpwQnVmID09IDApIHsKCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKnBCdWYgPSBwQUMtPkdJbmkuR1BbUGh5c1BvcnRJbmRleF0uUExpbmtNb2RlQ29u ZjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg ICAgICAgICAgICAgfQoKCgoKCgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoKnBCdWYgIT0g cEFDLT5HSW5pLkdQW1BoeXNQb3J0SW5kZXhdLlBMaW5rTW9kZUNvbmYKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnBC dWYgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgMHhGRjAxMDEyNjoKCiAgICAgICAgICAgICAg ICAgICAgICAgIFZhbDggPSBDYWxjdWxhdGVMaW5rTW9kZVN0YXR1cyhwQUMsIElvQywgUGh5c1Bv cnRJbmRleCk7CgoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCpwQnVmID09IDApIHsKCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnBCdWYgPSBWYWw4OwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9CgoK CgoKCgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoKnBCdWYgIT0gVmFsOCkgewoKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAqcEJ1ZiA9IDY7CiAgICAgICAgICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2Fz ZSAweEZGMDEwMTI3OgoKICAgICAgICAgICAgICAgICAgICAgICAgVmFsOCA9IENhbGN1bGF0ZUxp bmtTdGF0dXMocEFDLCBJb0MsIFBoeXNQb3J0SW5kZXgpOwoKCiAgICAgICAgICAgICAgICAgICAg ICAgIGlmICgqcEJ1ZiA9PSAwKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpw QnVmID0gVmFsODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg ICAgICAgICAgICAgICAgICAgICAgfQoKCgoKCgoKICAgICAgICAgICAgICAgICAgICAgICAgaWYg KCpwQnVmICE9IFZhbDgpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnBCdWYg PSA1OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgMHhGRjAxMDEyODoKCiAgICAgICAgICAgICAgICAg ICAgICAgIGlmICgqcEJ1ZiA9PSAwKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICpwQnVmID0gcEFDLT5HSW5pLkdQW1BoeXNQb3J0SW5kZXhdLlBGbG93Q3RybENhcDsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAg ICAgfQoKCgoKCiAgICAgICAgICAgICAgICAgICAgICAgICpwQnVmIHw9IHBBQy0+R0luaS5HUFtQ aHlzUG9ydEluZGV4XS5QRmxvd0N0cmxDYXA7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OwoKICAgICAgICAgICAgICAgIGNhc2UgMHhGRjAxMDEyOToKCiAgICAgICAgICAgICAgICAgICAg ICAgIGlmICgqcEJ1ZiA9PSAwKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpw QnVmID0gcEFDLT5HSW5pLkdQW1BoeXNQb3J0SW5kZXhdLlBGbG93Q3RybE1vZGU7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAg IH0KCgoKCgoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCpwQnVmICE9IHBBQy0+R0luaS5H UFtQaHlzUG9ydEluZGV4XS5QRmxvd0N0cmxNb2RlKSB7CgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICpwQnVmID0gNTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg ICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIDB4RkYwMTAxMkE6Cgog ICAgICAgICAgICAgICAgICAgICAgICBpZiAoKnBCdWYgPT0gMCkgewoKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqcEJ1ZiA9IHBBQy0+R0luaS5HUFtQaHlzUG9ydEluZGV4XS5QRmxv d0N0cmxTdGF0dXM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAg ICAgICAgICAgICAgICAgICAgICAgIH0KCgoKCgoKCiAgICAgICAgICAgICAgICAgICAgICAgIGlm ICgqcEJ1ZiAhPSBwQUMtPkdJbmkuR1BbUGh5c1BvcnRJbmRleF0uUEZsb3dDdHJsU3RhdHVzKSB7 CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwQnVmID0gNTsKICAgICAgICAgICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAg ICAgICBjYXNlIDB4RkYwMTAxMkI6CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoKnBCdWYg PT0gMCkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcEJ1ZiA9IHBBQy0+R0lu aS5HUFtQaHlzUG9ydEluZGV4XS5QTVNDYXA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCgoKCgogICAgICAgICAgICAg ICAgICAgICAgICAqcEJ1ZiB8PSBwQUMtPkdJbmkuR1BbUGh5c1BvcnRJbmRleF0uUE1TQ2FwOwog ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIDB4RkYw MTAxMkM6CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoKnBCdWYgPT0gMCkgewoKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAqcEJ1ZiA9IHBBQy0+R0luaS5HUFtQaHlzUG9ydElu ZGV4XS5QTVNNb2RlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog ICAgICAgICAgICAgICAgICAgICAgICB9CgoKCgoKCiAgICAgICAgICAgICAgICAgICAgICAgIGlm ICgqcEJ1ZiAhPSBwQUMtPkdJbmkuR1BbUGh5c1BvcnRJbmRleF0uUE1TTW9kZSkgewoKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAqcEJ1ZiA9IDQ7CiAgICAgICAgICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2Fz ZSAweEZGMDEwMTJEOgoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCpwQnVmID09IDApIHsK CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnBCdWYgPSBwQUMtPkdJbmkuR1BbUGh5 c1BvcnRJbmRleF0uUE1TU3RhdHVzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9CgoKCgoKCgogICAgICAgICAgICAgICAg ICAgICAgICBpZiAoKnBCdWYgIT0gcEFDLT5HSW5pLkdQW1BoeXNQb3J0SW5kZXhdLlBNU1N0YXR1 cykgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcEJ1ZiA9IDU7CiAgICAgICAg ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAg ICAgICAgICAgY2FzZSAweEZGMDEwMTcxOgoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCpw QnVmID09IDApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnBCdWYgPSBwQUMt PkdJbmkuR1BbUGh5c1BvcnRJbmRleF0uUExpbmtTcGVlZDsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKCgoKCgogICAg ICAgICAgICAgICAgICAgICAgICBpZiAoKnBCdWYgIT0gcEFDLT5HSW5pLkdQW1BoeXNQb3J0SW5k ZXhdLlBMaW5rU3BlZWQpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnBCdWYg PSA1OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgMHhGRjAxMDE3MjoKCiAgICAgICAgICAgICAgICAg ICAgICAgIGlmICgqcEJ1ZiA9PSAwKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICpwQnVmID0gcEFDLT5HSW5pLkdQW1BoeXNQb3J0SW5kZXhdLlBMaW5rU3BlZWRVc2VkOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAg ICAgICB9CgoKCgoKCgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoKnBCdWYgIT0gcEFDLT5H SW5pLkdQW1BoeXNQb3J0SW5kZXhdLlBMaW5rU3BlZWRVc2VkKSB7CgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICpwQnVmID0gNTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgoK CgogICAgICAgIGlmICghUG9ydEFjdGl2ZUZsYWcpIHsKCiAgICAgICAgICAgICAgICBzd2l0Y2gg KElkKSB7CgogICAgICAgICAgICAgICAgY2FzZSAweEZGMDEwMTI0OgogICAgICAgICAgICAgICAg ICAgICAgICAqcEJ1ZiA9ICgxPDw0KTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cgog ICAgICAgICAgICAgICAgY2FzZSAweEZGMDEwMTI1OgogICAgICAgICAgICAgICAgICAgICAgICAq cEJ1ZiA9IDc7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAg IGNhc2UgMHhGRjAxMDEyNjoKICAgICAgICAgICAgICAgICAgICAgICAgKnBCdWYgPSA2OwogICAg ICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIDB4RkYwMTAx Mjc6CiAgICAgICAgICAgICAgICAgICAgICAgICpwQnVmID0gNTsKICAgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSAweEZGMDEwMTI4OgogICAgICAgICAg ICAgICAgY2FzZSAweEZGMDEwMTI5OgogICAgICAgICAgICAgICAgICAgICAgICAqcEJ1ZiA9IDU7 CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgMHhG RjAxMDEyQToKICAgICAgICAgICAgICAgICAgICAgICAgKnBCdWYgPSA1OwogICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIDB4RkYwMTAxMkI6CiAgICAg ICAgICAgICAgICAgICAgICAgICpwQnVmID0gKDE8PDMpOwogICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIDB4RkYwMTAxMkM6CiAgICAgICAgICAgICAg ICAgICAgICAgICpwQnVmID0gNDsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAg ICAgICAgICAgICAgY2FzZSAweEZGMDEwMTJEOgogICAgICAgICAgICAgICAgICAgICAgICAqcEJ1 ZiA9IDU7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2Fz ZSAweEZGMDEwMTcwOgogICAgICAgICAgICAgICAgICAgICAgICAqcEJ1ZiA9ICgxPDw0KTsKICAg ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSAweEZGMDEw MTcxOgogICAgICAgICAgICAgICAgICAgICAgICAqcEJ1ZiA9IDU7CiAgICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgMHhGRjAxMDE3MjoKICAgICAgICAg ICAgICAgICAgICAgICAgKnBCdWYgPSA1OwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK ICAgICAgICAgICAgICAgIH0KICAgICAgICB9Cn0KIyA2NjU4ICJza2dlcG5taS5jIgpzdGF0aWMg dTggQ2FsY3VsYXRlTGlua1N0YXR1cygKU0tfQUMgKnBBQywKY2hhciogSW9DLAp1bnNpZ25lZCBp bnQgUGh5c1BvcnRJbmRleCkKewogICAgICAgIHU4IFJlc3VsdDsKCgogICAgICAgIGlmICghcEFD LT5HSW5pLkdQW1BoeXNQb3J0SW5kZXhdLlBIV0xpbmtVcCkgewoKICAgICAgICAgICAgICAgIFJl c3VsdCA9IDE7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKHBBQy0+R0luaS5HUFtQaHlzUG9y dEluZGV4XS5QQXV0b05lZ0ZhaWwgPiAwKSB7CgogICAgICAgICAgICAgICAgUmVzdWx0ID0gMjsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoIXBBQy0+ UmxtdC5Qb3J0W1BoeXNQb3J0SW5kZXhdLlBvcnREb3duKSB7CgogICAgICAgICAgICAgICAgUmVz dWx0ID0gNDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBSZXN1bHQg PSAzOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIChSZXN1bHQpOwp9CiMgNjY5OCAic2tnZXBu bWkuYyIKc3RhdGljIHU4IENhbGN1bGF0ZUxpbmtNb2RlU3RhdHVzKApTS19BQyAqcEFDLApjaGFy KiBJb0MsCnVuc2lnbmVkIGludCBQaHlzUG9ydEluZGV4KQp7CiAgICAgICAgdTggUmVzdWx0OwoK CgogICAgICAgIFJlc3VsdCA9IHBBQy0+R0luaS5HUFtQaHlzUG9ydEluZGV4XS5QTGlua01vZGVT dGF0dXM7CgoKICAgICAgICBpZiAoUmVzdWx0IDwgMikgewoKICAgICAgICAgICAgICAgIFJlc3Vs dCA9IDE7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKHBBQy0+R0luaS5HUFtQaHlzUG9ydElu ZGV4XS5QTGlua01vZGUgPj0gMykgewoKCgoKCgogICAgICAgICAgICAgICAgaWYgKFJlc3VsdCA9 PSAyKSB7CgogICAgICAgICAgICAgICAgICAgICAgICBSZXN1bHQgPSA0OwogICAgICAgICAgICAg ICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZiAoUmVzdWx0ID09IDMpIHsKCiAgICAgICAgICAg ICAgICAgICAgICAgIFJlc3VsdCA9IDU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKICAg ICAgICByZXR1cm4gKFJlc3VsdCk7Cn0KIyA2NzQ2ICJza2dlcG5taS5jIgpzdGF0aWMgaW50IEdl dFZwZEtleUFycigKU0tfQUMgKnBBQywKY2hhciogSW9DLApjaGFyICpwS2V5QXJyLAp1bnNpZ25l ZCBpbnQgS2V5QXJyTGVuLAp1bnNpZ25lZCBpbnQgKnBLZXlObykKewogICAgICAgIHVuc2lnbmVk IGludCBCdWZLZXlzTGVuID0gKDUxMik7CiAgICAgICAgY2hhciBCdWZLZXlzWyg1MTIpXTsKICAg ICAgICB1bnNpZ25lZCBpbnQgU3RhcnRPZmZzZXQ7CiAgICAgICAgdW5zaWduZWQgaW50IE9mZnNl dDsKICAgICAgICBpbnQgSW5kZXg7CiAgICAgICAgaW50IFJldDsKCgogICAgICAgIChfX2J1aWx0 aW5fY29uc3RhbnRfcCgwKSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCgoS2V5QXJyTGVuKSkgPyBf X2NvbnN0YW50X2NfYW5kX2NvdW50X21lbXNldCgoKHBLZXlBcnIpKSwoKDB4MDEwMTAxMDFVTCoo dW5zaWduZWQgY2hhcikoMCkpKSwoKEtleUFyckxlbikpKSA6IF9fY29uc3RhbnRfY19tZW1zZXQo KChwS2V5QXJyKSksKCgweDAxMDEwMTAxVUwqKHVuc2lnbmVkIGNoYXIpKDApKSksKChLZXlBcnJM ZW4pKSkpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wKChLZXlBcnJMZW4pKSA/IF9fbWVtc2V0X2dl bmVyaWMoKCgocEtleUFycikpKSwoKCgwKSkpLCgoKEtleUFyckxlbikpKSkgOiBfX21lbXNldF9n ZW5lcmljKCgocEtleUFycikpLCgoMCkpLCgoS2V5QXJyTGVuKSkpKSk7CgoKCgogICAgICAgIFJl dCA9IFZwZEtleXMocEFDLCBJb0MsIChjaGFyICopJkJ1ZktleXMsIChpbnQgKikmQnVmS2V5c0xl biwKICAgICAgICAgICAgICAgIChpbnQgKilwS2V5Tm8pOwogICAgICAgIGlmIChSZXQgPiAwKSB7 CgogICAgICAgICAgICAgICAgU2tFcnJvckxvZyhwQUMsICgxTDw8MyksICg0MDAgKyAxNCksCiAg ICAgICAgICAgICAgICAgICAgICAgICJWcGQ6IENhbm5vdCByZWFkIFZQRCBrZXlzIik7CgogICAg ICAgICAgICAgICAgcmV0dXJuICgxKTsKICAgICAgICB9CgogICAgICAgIGlmICgqcEtleU5vID09 IDAgfHwgQnVmS2V5c0xlbiA9PSAwKSB7CgogICAgICAgICAgICAgICAgcmV0dXJuICgwKTsKICAg ICAgICB9CgoKCgoKICAgICAgICBpZiAoKnBLZXlObyA+ICg1MTIgLyA0KSkgewoKICAgICAgICAg ICAgICAgIFNrRXJyb3JMb2cocEFDLCAoMUw8PDMpLCAoNDAwICsgMTUpLAogICAgICAgICAgICAg ICAgICAgICAgICAiVnBkOiBJbnRlcm5hbCBhcnJheSBmb3IgVlBEIGtleXMgdG8gc21hbGwiKTsK CiAgICAgICAgICAgICAgICAqcEtleU5vID0gKDUxMiAvIDQpOwogICAgICAgIH0KCgoKCgogICAg ICAgIGZvciAoSW5kZXggPSAwLCBTdGFydE9mZnNldCA9IDAsIE9mZnNldCA9IDA7IE9mZnNldCA8 IEJ1ZktleXNMZW47CiAgICAgICAgICAgICAgICBPZmZzZXQgKyspIHsKCiAgICAgICAgICAgICAg ICBpZiAoQnVmS2V5c1tPZmZzZXRdICE9IDApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIGNv bnRpbnVlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChPZmZzZXQgLSBT dGFydE9mZnNldCA+IDUpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIFNrRXJyb3JMb2cocEFD LCAoMUw8PDMpLCAoNDAwICsgMTYpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJW cGQ6IEtleSBzdHJpbmcgdG9vIGxvbmciKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu ICgxKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBzdHJuY3B5KChjaGFyKiko cEtleUFyciArIEluZGV4ICogNSksKGNoYXIqKSgmQnVmS2V5c1tTdGFydE9mZnNldF0pLDUpOwoK CiAgICAgICAgICAgICAgICBJbmRleCArKzsKICAgICAgICAgICAgICAgIFN0YXJ0T2Zmc2V0ID0g T2Zmc2V0ICsgMTsKICAgICAgICB9CgoKICAgICAgICBpZiAoU3RhcnRPZmZzZXQgPCBPZmZzZXQp IHsKCiAgICAgICAgICAgICAgICBzdHJuY3B5KChjaGFyKikocEtleUFyciArIEluZGV4ICogNSks KGNoYXIqKSgmQnVmS2V5c1tTdGFydE9mZnNldF0pLDUpOwoKICAgICAgICB9CgogICAgICAgIHJl dHVybiAoMCk7Cn0KIyA2ODQyICJza2dlcG5taS5jIgpzdGF0aWMgaW50IFNpcnFVcGRhdGUoClNL X0FDICpwQUMsCmNoYXIqIElvQykKewogICAgICAgIFNLX0VWUEFSQSBFdmVudFBhcmFtOwoKCgog ICAgICAgIGlmIChwQUMtPlBubWkuU2lycVVwZGF0ZWRGbGFnID4gMCkgewoKICAgICAgICAgICAg ICAgIHJldHVybiAoMCk7CiAgICAgICAgfQoKCiAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9w KDApID8gKF9fYnVpbHRpbl9jb25zdGFudF9wKChzaXplb2YoRXZlbnRQYXJhbSkpKSA/IF9fY29u c3RhbnRfY19hbmRfY291bnRfbWVtc2V0KCgoKGNoYXIgKikmRXZlbnRQYXJhbSkpLCgoMHgwMTAx MDEwMVVMKih1bnNpZ25lZCBjaGFyKSgwKSkpLCgoc2l6ZW9mKEV2ZW50UGFyYW0pKSkpIDogX19j b25zdGFudF9jX21lbXNldCgoKChjaGFyICopJkV2ZW50UGFyYW0pKSwoKDB4MDEwMTAxMDFVTCoo dW5zaWduZWQgY2hhcikoMCkpKSwoKHNpemVvZihFdmVudFBhcmFtKSkpKSkgOiAoX19idWlsdGlu X2NvbnN0YW50X3AoKHNpemVvZihFdmVudFBhcmFtKSkpID8gX19tZW1zZXRfZ2VuZXJpYygoKCgo Y2hhciAqKSZFdmVudFBhcmFtKSkpLCgoKDApKSksKCgoc2l6ZW9mKEV2ZW50UGFyYW0pKSkpKSA6 IF9fbWVtc2V0X2dlbmVyaWMoKCgoY2hhciAqKSZFdmVudFBhcmFtKSksKCgwKSksKChzaXplb2Yo RXZlbnRQYXJhbSkpKSkpKTsKICAgICAgICBpZiAoU2tHZVNpcnFFdmVudChwQUMsIElvQywgNSwg RXZlbnRQYXJhbSkgPiAwKSB7CgogICAgICAgICAgICAgICAgU2tFcnJvckxvZyhwQUMsICgxTDw8 MyksICg0MDAgKyA0NyksCiAgICAgICAgICAgICAgICAgICAgICAgICJTaXJxVXBkYXRlOiBFdmVu dCBmdW5jdGlvbiByZXR1cm5zIG5vdCAwIik7CgogICAgICAgICAgICAgICAgcmV0dXJuICgxKTsK ICAgICAgICB9CgogICAgICAgIHJldHVybiAoMCk7Cn0KIyA2ODgxICJza2dlcG5taS5jIgpzdGF0 aWMgaW50IFJsbXRVcGRhdGUoClNLX0FDICpwQUMsCmNoYXIqIElvQywKdTMyIE5ldEluZGV4KQp7 CiAgICAgICAgU0tfRVZQQVJBIEV2ZW50UGFyYW07CgoKCiAgICAgICAgaWYgKHBBQy0+UG5taS5S bG10VXBkYXRlZEZsYWcgPiAwKSB7CgogICAgICAgICAgICAgICAgcmV0dXJuICgwKTsKICAgICAg ICB9CgoKICAgICAgICAoX19idWlsdGluX2NvbnN0YW50X3AoMCkgPyAoX19idWlsdGluX2NvbnN0 YW50X3AoKHNpemVvZihFdmVudFBhcmFtKSkpID8gX19jb25zdGFudF9jX2FuZF9jb3VudF9tZW1z ZXQoKCgoY2hhciAqKSZFdmVudFBhcmFtKSksKCgweDAxMDEwMTAxVUwqKHVuc2lnbmVkIGNoYXIp KDApKSksKChzaXplb2YoRXZlbnRQYXJhbSkpKSkgOiBfX2NvbnN0YW50X2NfbWVtc2V0KCgoKGNo YXIgKikmRXZlbnRQYXJhbSkpLCgoMHgwMTAxMDEwMVVMKih1bnNpZ25lZCBjaGFyKSgwKSkpLCgo c2l6ZW9mKEV2ZW50UGFyYW0pKSkpKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCgoc2l6ZW9mKEV2 ZW50UGFyYW0pKSkgPyBfX21lbXNldF9nZW5lcmljKCgoKChjaGFyICopJkV2ZW50UGFyYW0pKSks KCgoMCkpKSwoKChzaXplb2YoRXZlbnRQYXJhbSkpKSkpIDogX19tZW1zZXRfZ2VuZXJpYygoKChj aGFyICopJkV2ZW50UGFyYW0pKSwoKDApKSwoKHNpemVvZihFdmVudFBhcmFtKSkpKSkpOwogICAg ICAgIEV2ZW50UGFyYW0uUGFyYTMyWzBdID0gTmV0SW5kZXg7CiAgICAgICAgRXZlbnRQYXJhbS5Q YXJhMzJbMV0gPSAodTMyKS0xOwogICAgICAgIGlmIChTa1JsbXRFdmVudChwQUMsIElvQywgMjAw NSwgRXZlbnRQYXJhbSkgPiAwKSB7CgogICAgICAgICAgICAgICAgU2tFcnJvckxvZyhwQUMsICgx TDw8MyksICg0MDAgKyA0OCksCiAgICAgICAgICAgICAgICAgICAgICAgICJSbG10VXBkYXRlOiBF dmVudCBmdW5jdGlvbiByZXR1cm5zIG5vdCAwIik7CgogICAgICAgICAgICAgICAgcmV0dXJuICgx KTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAoMCk7Cn0KIyA2OTIzICJza2dlcG5taS5jIgpz dGF0aWMgaW50IE1hY1VwZGF0ZSgKU0tfQUMgKnBBQywKY2hhciogSW9DLAp1bnNpZ25lZCBpbnQg Rmlyc3RNYWMsCnVuc2lnbmVkIGludCBMYXN0TWFjKQp7CiAgICAgICAgdW5zaWduZWQgaW50IE1h Y0luZGV4OwoKCgoKCiAgICAgICAgaWYgKHBBQy0+UG5taS5NYWNVcGRhdGVkRmxhZyA+IDApIHsK CiAgICAgICAgICAgICAgICByZXR1cm4gKDApOwogICAgICAgIH0KCgogICAgICAgIGZvciAoTWFj SW5kZXggPSBGaXJzdE1hYzsgTWFjSW5kZXggPD0gTGFzdE1hYzsgTWFjSW5kZXggKyspIHsKCgoK CgoKCiAgICAgICAgICAgICAgICBpZiAocEFDLT5HSW5pLkdJTWFjVHlwZSA9PSAwKSB7CiAgICAg ICAgICAgICAgICAgICAgICAgIHBBQy0+UG5taS5CdWZQb3J0W01hY0luZGV4XSA9IHBBQy0+UG5t aS5Qb3J0W01hY0luZGV4XTsKICAgICAgICAgICAgICAgIH0KCgogICAgICAgICAgICAgICAgaWYg KHBBQy0+R0luaS5HSUZ1bmMucEZuTWFjVXBkYXRlU3RhdHMocEFDLCBJb0MsIE1hY0luZGV4KSAh PSAwKSB7CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDEpOwogICAgICAgICAgICAg ICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICgwKTsKfQojIDY5NzkgInNrZ2Vwbm1pLmMi CnN0YXRpYyB1NjQgR2V0U3RhdFZhbCgKU0tfQUMgKnBBQywKY2hhciogSW9DLAp1bnNpZ25lZCBp bnQgTG9nUG9ydEluZGV4LAp1bnNpZ25lZCBpbnQgU3RhdEluZGV4LAp1MzIgTmV0SW5kZXgpCnsK ICAgICAgICB1bnNpZ25lZCBpbnQgUGh5c1BvcnRJbmRleDsKICAgICAgICB1bnNpZ25lZCBpbnQg UGh5c1BvcnRNYXg7CiAgICAgICAgdTY0IFZhbCA9IDA7CgoKICAgICAgICBpZiAocEFDLT5Qbm1p LkR1YWxOZXRBY3RpdmVGbGFnID09ICghMCkpIHsKCiAgICAgICAgICAgICAgICBQaHlzUG9ydElu ZGV4ID0gTmV0SW5kZXg7CiAgICAgICAgICAgICAgICBWYWwgPSBHZXRQaHlzU3RhdFZhbChwQUMs IElvQywgUGh5c1BvcnRJbmRleCwgU3RhdEluZGV4KTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7 CgogICAgICAgICAgICAgICAgaWYgKExvZ1BvcnRJbmRleCA9PSAwKSB7CgogICAgICAgICAgICAg ICAgICAgICAgICBQaHlzUG9ydE1heCA9IHBBQy0+R0luaS5HSU1hY3NGb3VuZDsKCgogICAgICAg ICAgICAgICAgICAgICAgICBmb3IgKFBoeXNQb3J0SW5kZXggPSAwOyBQaHlzUG9ydEluZGV4IDwg UGh5c1BvcnRNYXg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGh5c1BvcnRJbmRl eCArKykgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocEFDLT5Qbm1pLlBv cnRbUGh5c1BvcnRJbmRleF0uQWN0aXZlRmxhZykgewoKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFZhbCArPSBHZXRQaHlzU3RhdFZhbChwQUMsIElvQywgUGh5c1BvcnRJ bmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3Rh dEluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg ICAgICAgICAgIH0KCgogICAgICAgICAgICAgICAgICAgICAgICBWYWwgKz0gcEFDLT5Qbm1pLlZp cnR1YWxDb3VudGVyT2Zmc2V0W1N0YXRJbmRleF07CiAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIFBoeXNQb3J0SW5kZXggPSAo KHVuc2lnbmVkIGludCkoTG9nUG9ydEluZGV4KSAtIDEpOwogICAgICAgICAgICAgICAgICAgICAg ICBWYWwgPSBHZXRQaHlzU3RhdFZhbChwQUMsIElvQywgUGh5c1BvcnRJbmRleCwgU3RhdEluZGV4 KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIChWYWwpOwp9CiMg NzA0MSAic2tnZXBubWkuYyIKc3RhdGljIHU2NCBHZXRQaHlzU3RhdFZhbCgKU0tfQUMgKnBBQywK Y2hhciogSW9DLAp1bnNpZ25lZCBpbnQgUGh5c1BvcnRJbmRleCwKdW5zaWduZWQgaW50IFN0YXRJ bmRleCkKewogICAgICAgIHU2NCBWYWwgPSAwOwogICAgICAgIHUzMiBMb3dWYWwgPSAwOwogICAg ICAgIHUzMiBIaWdoVmFsID0gMDsKICAgICAgICB1MTYgV29yZDsKICAgICAgICBpbnQgTWFjVHlw ZTsKCiAgICAgICAgU0tfUE5NSV9QT1JUICpwUG5taVBydDsKICAgICAgICBTS19HRU1BQ0ZVTkMg KnBGbk1hYzsKCiAgICAgICAgTWFjVHlwZSA9IHBBQy0+R0luaS5HSU1hY1R5cGU7CgoKICAgICAg ICBpZiAocEFDLT5HSW5pLkdJTWFjVHlwZSA9PSAwKSB7CiAgICAgICAgICAgICAgICBwUG5taVBy dCA9ICZwQUMtPlBubWkuQnVmUG9ydFtQaHlzUG9ydEluZGV4XTsKICAgICAgICB9CiAgICAgICAg ZWxzZSB7CiAgICAgICAgICAgICAgICBwUG5taVBydCA9ICZwQUMtPlBubWkuUG9ydFtQaHlzUG9y dEluZGV4XTsKICAgICAgICB9CgogICAgICAgIHBGbk1hYyA9ICZwQUMtPkdJbmkuR0lGdW5jOwoK ICAgICAgICBzd2l0Y2ggKFN0YXRJbmRleCkgewogICAgICAgIGNhc2UgU0tfUE5NSV9IVFg6CiAg ICAgICAgY2FzZSBTS19QTk1JX0hSWDoKCiAgICAgICAgICAgICAgICBpZiAoTWFjVHlwZSA9PSAx KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoVmFsKTsKICAgICAgICAgICAgICAg IH0KCiAgICAgICAgICAgICAgICAodm9pZClwRm5NYWMtPnBGbk1hY1N0YXRpc3RpYyhwQUMsIElv QywgUGh5c1BvcnRJbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0QWRkcltTdGF0SW5kZXhdW01h Y1R5cGVdLlJlZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmTG93VmFsKTsKICAgICAgICAgICAgICAgIEhp Z2hWYWwgPSBwUG5taVBydC0+Q291bnRlckhpZ2hbU3RhdEluZGV4XTsKICAgICAgICAgICAgICAg IGJyZWFrOwoKICAgICAgICBjYXNlIFNLX1BOTUlfSFRYX09DVEVUOgogICAgICAgIGNhc2UgU0tf UE5NSV9IUlhfT0NURVQ6CiAgICAgICAgICAgICAgICAodm9pZClwRm5NYWMtPnBGbk1hY1N0YXRp c3RpYyhwQUMsIElvQywgUGh5c1BvcnRJbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0QWRkcltT dGF0SW5kZXhdW01hY1R5cGVdLlJlZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSGlnaFZhbCk7CiAgICAg ICAgICAgICAgICAodm9pZClwRm5NYWMtPnBGbk1hY1N0YXRpc3RpYyhwQUMsIElvQywgUGh5c1Bv cnRJbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0QWRkcltTdGF0SW5kZXggKyAxXVtNYWNUeXBl XS5SZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJkxvd1ZhbCk7CiAgICAgICAgICAgICAgICBicmVhazsK CiAgICAgICAgY2FzZSBTS19QTk1JX0hUWF9CVVJTVDoKICAgICAgICBjYXNlIFNLX1BOTUlfSFRY X0VYQ0VTU19ERUY6CiAgICAgICAgY2FzZSBTS19QTk1JX0hUWF9DQVJSSUVSOgoKICAgICAgICAg ICAgICAgIGlmIChNYWNUeXBlID09IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu IChWYWwpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICh2b2lkKXBGbk1hYy0+ cEZuTWFjU3RhdGlzdGljKHBBQywgSW9DLCBQaHlzUG9ydEluZGV4LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFN0YXRBZGRyW1N0YXRJbmRleF1bTWFjVHlwZV0uUmVnLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZMb3dW YWwpOwogICAgICAgICAgICAgICAgSGlnaFZhbCA9IHBQbm1pUHJ0LT5Db3VudGVySGlnaFtTdGF0 SW5kZXhdOwogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgU0tfUE5NSV9IVFhf TUFDQzoKCiAgICAgICAgICAgICAgICBpZiAoTWFjVHlwZSA9PSAxKSB7CiAgICAgICAgICAgICAg ICAgICAgICAgIFZhbCA9IEdldFBoeXNTdGF0VmFsKHBBQywgSW9DLCBQaHlzUG9ydEluZGV4LCBT S19QTk1JX0hUWF9QTUFDQyk7CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFZhbCk7 CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgKHZvaWQpcEZuTWFjLT5wRm5NYWNT dGF0aXN0aWMocEFDLCBJb0MsIFBoeXNQb3J0SW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdEFk ZHJbU3RhdEluZGV4XVtNYWNUeXBlXS5SZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkxvd1ZhbCk7CiAg ICAgICAgICAgICAgICBIaWdoVmFsID0gcFBubWlQcnQtPkNvdW50ZXJIaWdoW1N0YXRJbmRleF07 CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBTS19QTk1JX0hUWF9DT0w6CiAg ICAgICAgY2FzZSBTS19QTk1JX0hSWF9VTkRFUlNJWkU6CgogICAgICAgICAgICAgICAgaWYgKE1h Y1R5cGUgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFZhbCk7CiAgICAg ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgKHZvaWQpcEZuTWFjLT5wRm5NYWNTdGF0aXN0 aWMocEFDLCBJb0MsIFBoeXNQb3J0SW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdEFkZHJbU3Rh dEluZGV4XVtNYWNUeXBlXS5SZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkxvd1ZhbCk7CiAgICAgICAg ICAgICAgICBIaWdoVmFsID0gcFBubWlQcnQtPkNvdW50ZXJIaWdoW1N0YXRJbmRleF07CiAgICAg ICAgICAgICAgICBicmVhazsKCgoKICAgICAgICBjYXNlIFNLX1BOTUlfSFRYX0RFRkZFUkFMOgoK ICAgICAgICAgICAgICAgIGlmIChNYWNUeXBlID09IDEpIHsKICAgICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIChWYWwpOwogICAgICAgICAgICAgICAgfQoKCgoKCgoKICAgICAgICAgICAgICAg IGlmICgocEFDLT5HSW5pLkdQW1BoeXNQb3J0SW5kZXhdLlBMaW5rTW9kZVN0YXR1cyA9PSA1KSB8 fAogICAgICAgICAgICAgICAgICAgICAgICAocEFDLT5HSW5pLkdQW1BoeXNQb3J0SW5kZXhdLlBM aW5rTW9kZVN0YXR1cyA9PSAzKSkgewoKICAgICAgICAgICAgICAgICAgICAgICAgTG93VmFsID0g MDsKICAgICAgICAgICAgICAgICAgICAgICAgSGlnaFZhbCA9IDA7CiAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKXBG bk1hYy0+cEZuTWFjU3RhdGlzdGljKHBBQywgSW9DLCBQaHlzUG9ydEluZGV4LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgU3RhdEFkZHJbU0tfUE5NSV9IVFhfREVGRkVSQUxdW01hY1R5cGVdLlJl ZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZMb3dWYWwpOwogICAgICAgICAgICAgICAgICAg ICAgICBIaWdoVmFsID0gcFBubWlQcnQtPkNvdW50ZXJIaWdoW1N0YXRJbmRleF07CiAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBTS19QTk1JX0hS WF9CQURPQ1RFVDoKCiAgICAgICAgICAgICAgICBpZiAoTWFjVHlwZSA9PSAwKSB7CiAgICAgICAg ICAgICAgICAgICAgICAgIHJldHVybiAoVmFsKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAg ICAgICAgICAodm9pZClwRm5NYWMtPnBGbk1hY1N0YXRpc3RpYyhwQUMsIElvQywgUGh5c1BvcnRJ bmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBTdGF0QWRkcltTdGF0SW5kZXhdW01hY1R5cGVdLlJlZywK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmSGlnaFZhbCk7CiAgICAgICAgICAgICAgICAodm9pZClwRm5NYWMt PnBGbk1hY1N0YXRpc3RpYyhwQUMsIElvQywgUGh5c1BvcnRJbmRleCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBTdGF0QWRkcltTdGF0SW5kZXggKyAxXVtNYWNUeXBlXS5SZWcsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJkxvd1ZhbCk7CiAgICAgICAgICAgICAgICBicmVhazsKCiAg ICAgICAgY2FzZSBTS19QTk1JX0hUWF9PQ1RFVExPVzoKICAgICAgICBjYXNlIFNLX1BOTUlfSFJY X09DVEVUTE9XOgogICAgICAgIGNhc2UgU0tfUE5NSV9IUlhfQkFET0NURVRMT1c6CiAgICAgICAg ICAgICAgICByZXR1cm4gKFZhbCk7CgogICAgICAgIGNhc2UgU0tfUE5NSV9IUlhfTE9OR0ZSQU1F UzoKCiAgICAgICAgICAgICAgICBpZiAoTWFjVHlwZSA9PSAwKSB7CiAgICAgICAgICAgICAgICAg ICAgICAgIHJldHVybiAocFBubWlQcnQtPlN0YXRSeExvbmdGcmFtZUN0cyk7CiAgICAgICAgICAg ICAgICB9CgogICAgICAgICAgICAgICAgKHZvaWQpcEZuTWFjLT5wRm5NYWNTdGF0aXN0aWMocEFD LCBJb0MsIFBoeXNQb3J0SW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdEFkZHJbU3RhdEluZGV4 XVtNYWNUeXBlXS5SZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkxvd1ZhbCk7CiAgICAgICAgICAgICAg ICBIaWdoVmFsID0gcFBubWlQcnQtPkNvdW50ZXJIaWdoW1N0YXRJbmRleF07CiAgICAgICAgICAg ICAgICBicmVhazsKCiAgICAgICAgY2FzZSBTS19QTk1JX0hSWF9UT09fTE9ORzoKICAgICAgICAg ICAgICAgICh2b2lkKXBGbk1hYy0+cEZuTWFjU3RhdGlzdGljKHBBQywgSW9DLCBQaHlzUG9ydElu ZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0 QWRkcltTdGF0SW5kZXhdW01hY1R5cGVdLlJlZywKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZMb3dWYWwpOwogICAgICAgICAg ICAgICAgSGlnaFZhbCA9IHBQbm1pUHJ0LT5Db3VudGVySGlnaFtTdGF0SW5kZXhdOwoKICAgICAg ICAgICAgICAgIFZhbCA9ICgoKHU2NClIaWdoVmFsIDw8IDMyKSB8ICh1NjQpTG93VmFsKTsKCiAg ICAgICAgICAgICAgICBzd2l0Y2ggKE1hY1R5cGUpIHsKICAgICAgICAgICAgICAgIGNhc2UgMToK CiAgICAgICAgICAgICAgICAgICAgICAgIFZhbCArPSBwUG5taVBydC0+U3RhdFJ4RnJhbWVUb29M b25nQ3RzOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBj YXNlIDA6CgoKCgoKCiAgICAgICAgICAgICAgICAgICAgICAgIFZhbCAtPSBwUG5taVBydC0+U3Rh dFJ4TG9uZ0ZyYW1lQ3RzOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAg ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg ICAgICAgIH0KCiAgICAgICAgICAgICAgICBMb3dWYWwgPSAodTMyKVZhbDsKICAgICAgICAgICAg ICAgIEhpZ2hWYWwgPSAodTMyKShWYWwgPj4gMzIpOwogICAgICAgICAgICAgICAgYnJlYWs7Cgog ICAgICAgIGNhc2UgU0tfUE5NSV9IUlhfU0hPUlRTOgoKICAgICAgICAgICAgICAgIGlmIChNYWNU eXBlID09IDEpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoVmFsKTsKICAgICAg ICAgICAgICAgIH0KCgoKCgoKICAgICAgICAgICAgICAgIGlmIChwQUMtPkdJbmkuR1BbUGh5c1Bv cnRJbmRleF0uUExpbmtNb2RlU3RhdHVzICE9IDEpIHsKCgogICAgICAgICAgICAgICAgICAgICAg ICAodm9pZClwRm5NYWMtPnBGbk1hY1N0YXRpc3RpYyhwQUMsIElvQywgUGh5c1BvcnRJbmRleCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRBZGRyW1N0YXRJbmRleF1bTWFjVHlwZV0uUmVn LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJkxvd1ZhbCk7CiAgICAgICAgICAgICAgICAgICAg ICAgIEhpZ2hWYWwgPSBwUG5taVBydC0+Q291bnRlckhpZ2hbU3RhdEluZGV4XTsKCiAgICAgICAg ICAgICAgICAgICAgICAgIFZhbCA9ICgoKHU2NClIaWdoVmFsIDw8IDMyKSB8ICh1NjQpTG93VmFs KTsKICAgICAgICAgICAgICAgICAgICAgICAgVmFsIC09IHBQbm1pUHJ0LT5SeFNob3J0WmVyb01h cms7CgogICAgICAgICAgICAgICAgICAgICAgICBMb3dWYWwgPSAodTMyKVZhbDsKICAgICAgICAg ICAgICAgICAgICAgICAgSGlnaFZhbCA9ICh1MzIpKFZhbCA+PiAzMik7CiAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBTS19QTk1JX0hSWF9NQUND OgogICAgICAgIGNhc2UgU0tfUE5NSV9IUlhfTUFDQ19VTktXTjoKICAgICAgICBjYXNlIFNLX1BO TUlfSFJYX0JVUlNUOgogICAgICAgIGNhc2UgU0tfUE5NSV9IUlhfTUlTU0VEOgogICAgICAgIGNh c2UgU0tfUE5NSV9IUlhfRlJBTUlORzoKICAgICAgICBjYXNlIFNLX1BOTUlfSFJYX0NBUlJJRVI6 CiAgICAgICAgY2FzZSBTS19QTk1JX0hSWF9JUkxFTkdUSDoKICAgICAgICBjYXNlIFNLX1BOTUlf SFJYX1NZTUJPTDoKICAgICAgICBjYXNlIFNLX1BOTUlfSFJYX0NFWFQ6CgogICAgICAgICAgICAg ICAgaWYgKE1hY1R5cGUgPT0gMSkgewoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChW YWwpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICh2b2lkKXBGbk1hYy0+cEZu TWFjU3RhdGlzdGljKHBBQywgSW9DLCBQaHlzUG9ydEluZGV4LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0 YXRBZGRyW1N0YXRJbmRleF1bTWFjVHlwZV0uUmVnLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZMb3dWYWwp OwogICAgICAgICAgICAgICAgSGlnaFZhbCA9IHBQbm1pUHJ0LT5Db3VudGVySGlnaFtTdGF0SW5k ZXhdOwogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgU0tfUE5NSV9IUlhfUE1B Q0NfRVJSOgoKICAgICAgICAgICAgICAgIGlmIChNYWNUeXBlID09IDEpIHsKICAgICAgICAgICAg ICAgICAgICAgICAgcmV0dXJuIChwUG5taVBydC0+U3RhdFJ4UE1hY2NFcnIpOwogICAgICAgICAg ICAgICAgfQoKICAgICAgICAgICAgICAgICh2b2lkKXBGbk1hYy0+cEZuTWFjU3RhdGlzdGljKHBB QywgSW9DLCBQaHlzUG9ydEluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRBZGRyW1N0YXRJbmRl eF1bTWFjVHlwZV0uUmVnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZMb3dWYWwpOwogICAgICAgICAgICAg ICAgSGlnaFZhbCA9IHBQbm1pUHJ0LT5Db3VudGVySGlnaFtTdGF0SW5kZXhdOwogICAgICAgICAg ICAgICAgYnJlYWs7CgoKICAgICAgICBjYXNlIFNLX1BOTUlfSFRYX1NZTkM6CiAgICAgICAgICAg ICAgICBMb3dWYWwgPSAodTMyKXBQbm1pUHJ0LT5TdGF0U3luY0N0czsKICAgICAgICAgICAgICAg IEhpZ2hWYWwgPSAodTMyKShwUG5taVBydC0+U3RhdFN5bmNDdHMgPj4gMzIpOwogICAgICAgICAg ICAgICAgYnJlYWs7CgoKICAgICAgICBjYXNlIFNLX1BOTUlfSFRYX1NZTkNfT0NURVQ6CiAgICAg ICAgICAgICAgICBMb3dWYWwgPSAodTMyKXBQbm1pUHJ0LT5TdGF0U3luY09jdGV0c0N0czsKICAg ICAgICAgICAgICAgIEhpZ2hWYWwgPSAodTMyKShwUG5taVBydC0+U3RhdFN5bmNPY3RldHNDdHMg Pj4gMzIpOwogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgU0tfUE5NSV9IUlhf RkNTOgoKCgoKICAgICAgICAgICAgICAgIGlmIChwQUMtPkdJbmkuR1BbUGh5c1BvcnRJbmRleF0u UGh5VHlwZSA9PSAxKSB7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAocEFDLT5HSW5pLkdQ W1BoeXNQb3J0SW5kZXhdLlBTdGF0ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHsgdTE2IE1tdTsgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikgKCh2b2lkICopKCgoKChJ b0MpKSkrKCgoMHgyMDAwICsgKCgoUGh5c1BvcnRJbmRleCkpKSAqICgweDMwMDAgLSAweDIwMDAp KSB8ICgoKDB4MDAzNCkpIDw8IDEpKSkpKSkgPSAoKCgoMHgxMikgfCAoJnBBQy0+R0luaS5HUFtQ aHlzUG9ydEluZGV4XSktPlBoeUFkZHIpKSkpOyAoKigoKCZXb3JkKSkpID0gKCoodm9sYXRpbGUg dW5zaWduZWQgc2hvcnQgKikgKCh2b2lkICopKCgoKElvQykpKSsoKCgweDIwMDAgKyAoKChQaHlz UG9ydEluZGV4KSkpICogKDB4MzAwMCAtIDB4MjAwMCkpIHwgKCgoMHgwMDM4KSkgPDwgMSkpKSkp KSk7IGlmICgoJnBBQy0+R0luaS5HUFtQaHlzUG9ydEluZGV4XSktPlBoeVR5cGUgIT0gMCkgeyBk byB7ICgqKCgmTW11KSkgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSAoKHZvaWQgKiko KCgoSW9DKSkpKygoKDB4MjAwMCArICgoKFBoeXNQb3J0SW5kZXgpKSkgKiAoMHgzMDAwIC0gMHgy MDAwKSkgfCAoKCgweDAwMDApKSA8PCAxKSkpKSkpKTsgfSB3aGlsZSAoKE1tdSAmICgxPDwxMikp ID09IDApOyAoKigoKCZXb3JkKSkpID0gKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikgKCh2 b2lkICopKCgoKElvQykpKSsoKCgweDIwMDAgKyAoKChQaHlzUG9ydEluZGV4KSkpICogKDB4MzAw MCAtIDB4MjAwMCkpIHwgKCgoMHgwMDM4KSkgPDwgMSkpKSkpKSk7IH0gfTsKCgoKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBMb3dWYWwgPSBXb3JkOwogICAgICAgICAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIEhpZ2hWYWwgPSBwUG5taVBydC0+Q291bnRl ckhpZ2hbU3RhdEluZGV4XTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2Ug ewogICAgICAgICAgICAgICAgICAgICAgICAodm9pZClwRm5NYWMtPnBGbk1hY1N0YXRpc3RpYyhw QUMsIElvQywgUGh5c1BvcnRJbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRBZGRy W1N0YXRJbmRleF1bTWFjVHlwZV0uUmVnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkxvd1Zh bCk7CiAgICAgICAgICAgICAgICAgICAgICAgIEhpZ2hWYWwgPSBwUG5taVBydC0+Q291bnRlckhp Z2hbU3RhdEluZGV4XTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwoK ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgKHZvaWQpcEZuTWFjLT5wRm5NYWNTdGF0 aXN0aWMocEFDLCBJb0MsIFBoeXNQb3J0SW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdEFkZHJb U3RhdEluZGV4XVtNYWNUeXBlXS5SZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkxvd1ZhbCk7CiAgICAg ICAgICAgICAgICBIaWdoVmFsID0gcFBubWlQcnQtPkNvdW50ZXJIaWdoW1N0YXRJbmRleF07CiAg ICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CgogICAgICAgIFZhbCA9ICgoKHU2NClIaWdo VmFsIDw8IDMyKSB8ICh1NjQpTG93VmFsKTsKCgogICAgICAgIFZhbCArPSBwUG5taVBydC0+Q291 bnRlck9mZnNldFtTdGF0SW5kZXhdOwoKICAgICAgICByZXR1cm4gKFZhbCk7Cn0KIyA3MzQ5ICJz a2dlcG5taS5jIgpzdGF0aWMgdm9pZCBSZXNldENvdW50ZXIoClNLX0FDICpwQUMsCmNoYXIqIElv QywKdTMyIE5ldEluZGV4KQp7CiAgICAgICAgdW5zaWduZWQgaW50IFBoeXNQb3J0SW5kZXg7CiAg ICAgICAgU0tfRVZQQVJBIEV2ZW50UGFyYW07CgoKICAgICAgICAoX19idWlsdGluX2NvbnN0YW50 X3AoMCkgPyAoX19idWlsdGluX2NvbnN0YW50X3AoKHNpemVvZihFdmVudFBhcmFtKSkpID8gX19j b25zdGFudF9jX2FuZF9jb3VudF9tZW1zZXQoKCgoY2hhciAqKSZFdmVudFBhcmFtKSksKCgweDAx MDEwMTAxVUwqKHVuc2lnbmVkIGNoYXIpKDApKSksKChzaXplb2YoRXZlbnRQYXJhbSkpKSkgOiBf X2NvbnN0YW50X2NfbWVtc2V0KCgoKGNoYXIgKikmRXZlbnRQYXJhbSkpLCgoMHgwMTAxMDEwMVVM Kih1bnNpZ25lZCBjaGFyKSgwKSkpLCgoc2l6ZW9mKEV2ZW50UGFyYW0pKSkpKSA6IChfX2J1aWx0 aW5fY29uc3RhbnRfcCgoc2l6ZW9mKEV2ZW50UGFyYW0pKSkgPyBfX21lbXNldF9nZW5lcmljKCgo KChjaGFyICopJkV2ZW50UGFyYW0pKSksKCgoMCkpKSwoKChzaXplb2YoRXZlbnRQYXJhbSkpKSkp IDogX19tZW1zZXRfZ2VuZXJpYygoKChjaGFyICopJkV2ZW50UGFyYW0pKSwoKDApKSwoKHNpemVv ZihFdmVudFBhcmFtKSkpKSkpOwoKCiAgICAgICAgU2tFdmVudFF1ZXVlKHBBQywgMywgMywgRXZl bnRQYXJhbSk7CgoKICAgICAgICBFdmVudFBhcmFtLlBhcmEzMlswXSA9IE5ldEluZGV4OwogICAg ICAgIEV2ZW50UGFyYW0uUGFyYTMyWzFdID0gKHUzMiktMTsKICAgICAgICBTa0V2ZW50UXVldWUo cEFDLCAyLCAyMDA0LCBFdmVudFBhcmFtKTsKICAgICAgICBFdmVudFBhcmFtLlBhcmEzMlsxXSA9 IDA7CgoKICAgICAgICBTa0V2ZW50UXVldWUocEFDLCA2LCA0LCBFdmVudFBhcmFtKTsKCgoKICAg ICAgICBFdmVudFBhcmFtLlBhcmEzMlswXSA9IE5ldEluZGV4OwogICAgICAgIEV2ZW50UGFyYW0u UGFyYTMyWzFdID0gKHUzMiktMTsKICAgICAgICBTa0V2ZW50UXVldWUocEFDLCA1LCAxLAogICAg ICAgICAgICAgICAgRXZlbnRQYXJhbSk7CgoKCiAgICAgICAgZm9yIChQaHlzUG9ydEluZGV4ID0g MDsgUGh5c1BvcnRJbmRleCA8CiAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50KXBBQy0+R0lu aS5HSU1hY3NGb3VuZDsgUGh5c1BvcnRJbmRleCArKykgewoKICAgICAgICAgICAgICAgICh2b2lk KXBBQy0+R0luaS5HSUZ1bmMucEZuTWFjUmVzZXRDb3VudGVyKHBBQywgSW9DLCBQaHlzUG9ydElu ZGV4KTsKCiAgICAgICAgICAgICAgICAoX19idWlsdGluX2NvbnN0YW50X3AoMCkgPyAoX19idWls dGluX2NvbnN0YW50X3AoKHNpemVvZihwQUMtPlBubWkuUG9ydFtQaHlzUG9ydEluZGV4XS5Db3Vu dGVySGlnaCkpKSA/IF9fY29uc3RhbnRfY19hbmRfY291bnRfbWVtc2V0KCgoKGNoYXIgKikmcEFD LT5Qbm1pLlBvcnRbUGh5c1BvcnRJbmRleF0uQ291bnRlckhpZ2gpKSwoKDB4MDEwMTAxMDFVTCoo dW5zaWduZWQgY2hhcikoMCkpKSwoKHNpemVvZihwQUMtPlBubWkuUG9ydFtQaHlzUG9ydEluZGV4 XS5Db3VudGVySGlnaCkpKSkgOiBfX2NvbnN0YW50X2NfbWVtc2V0KCgoKGNoYXIgKikmcEFDLT5Q bm1pLlBvcnRbUGh5c1BvcnRJbmRleF0uQ291bnRlckhpZ2gpKSwoKDB4MDEwMTAxMDFVTCoodW5z aWduZWQgY2hhcikoMCkpKSwoKHNpemVvZihwQUMtPlBubWkuUG9ydFtQaHlzUG9ydEluZGV4XS5D b3VudGVySGlnaCkpKSkpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wKChzaXplb2YocEFDLT5Qbm1p LlBvcnRbUGh5c1BvcnRJbmRleF0uQ291bnRlckhpZ2gpKSkgPyBfX21lbXNldF9nZW5lcmljKCgo KChjaGFyICopJnBBQy0+UG5taS5Qb3J0W1BoeXNQb3J0SW5kZXhdLkNvdW50ZXJIaWdoKSkpLCgo KDApKSksKCgoc2l6ZW9mKHBBQy0+UG5taS5Qb3J0W1BoeXNQb3J0SW5kZXhdLkNvdW50ZXJIaWdo KSkpKSkgOiBfX21lbXNldF9nZW5lcmljKCgoKGNoYXIgKikmcEFDLT5Qbm1pLlBvcnRbUGh5c1Bv cnRJbmRleF0uQ291bnRlckhpZ2gpKSwoKDApKSwoKHNpemVvZihwQUMtPlBubWkuUG9ydFtQaHlz UG9ydEluZGV4XS5Db3VudGVySGlnaCkpKSkpKTsKCiAgICAgICAgICAgICAgICAoX19idWlsdGlu X2NvbnN0YW50X3AoMCkgPyAoX19idWlsdGluX2NvbnN0YW50X3AoKHNpemVvZihwQUMtPlBubWku UG9ydFsgUGh5c1BvcnRJbmRleF0uQ291bnRlck9mZnNldCkpKSA/IF9fY29uc3RhbnRfY19hbmRf Y291bnRfbWVtc2V0KCgoKGNoYXIgKikmcEFDLT5Qbm1pLlBvcnRbUGh5c1BvcnRJbmRleF0uIENv dW50ZXJPZmZzZXQpKSwoKDB4MDEwMTAxMDFVTCoodW5zaWduZWQgY2hhcikoMCkpKSwoKHNpemVv ZihwQUMtPlBubWkuUG9ydFsgUGh5c1BvcnRJbmRleF0uQ291bnRlck9mZnNldCkpKSkgOiBfX2Nv bnN0YW50X2NfbWVtc2V0KCgoKGNoYXIgKikmcEFDLT5Qbm1pLlBvcnRbUGh5c1BvcnRJbmRleF0u IENvdW50ZXJPZmZzZXQpKSwoKDB4MDEwMTAxMDFVTCoodW5zaWduZWQgY2hhcikoMCkpKSwoKHNp emVvZihwQUMtPlBubWkuUG9ydFsgUGh5c1BvcnRJbmRleF0uQ291bnRlck9mZnNldCkpKSkpIDog KF9fYnVpbHRpbl9jb25zdGFudF9wKChzaXplb2YocEFDLT5Qbm1pLlBvcnRbIFBoeXNQb3J0SW5k ZXhdLkNvdW50ZXJPZmZzZXQpKSkgPyBfX21lbXNldF9nZW5lcmljKCgoKChjaGFyICopJnBBQy0+ UG5taS5Qb3J0W1BoeXNQb3J0SW5kZXhdLiBDb3VudGVyT2Zmc2V0KSkpLCgoKDApKSksKCgoc2l6 ZW9mKHBBQy0+UG5taS5Qb3J0WyBQaHlzUG9ydEluZGV4XS5Db3VudGVyT2Zmc2V0KSkpKSkgOiBf X21lbXNldF9nZW5lcmljKCgoKGNoYXIgKikmcEFDLT5Qbm1pLlBvcnRbUGh5c1BvcnRJbmRleF0u IENvdW50ZXJPZmZzZXQpKSwoKDApKSwoKHNpemVvZihwQUMtPlBubWkuUG9ydFsgUGh5c1BvcnRJ bmRleF0uQ291bnRlck9mZnNldCkpKSkpKTsKCgogICAgICAgICAgICAgICAgKF9fYnVpbHRpbl9j b25zdGFudF9wKDApID8gKF9fYnVpbHRpbl9jb25zdGFudF9wKChzaXplb2YocEFDLT5Qbm1pLlBv cnRbUGh5c1BvcnRJbmRleF0uU3RhdFN5bmNDdHMpKSkgPyBfX2NvbnN0YW50X2NfYW5kX2NvdW50 X21lbXNldCgoKChjaGFyICopJnBBQy0+UG5taS5Qb3J0W1BoeXNQb3J0SW5kZXhdLlN0YXRTeW5j Q3RzKSksKCgweDAxMDEwMTAxVUwqKHVuc2lnbmVkIGNoYXIpKDApKSksKChzaXplb2YocEFDLT5Q bm1pLlBvcnRbUGh5c1BvcnRJbmRleF0uU3RhdFN5bmNDdHMpKSkpIDogX19jb25zdGFudF9jX21l bXNldCgoKChjaGFyICopJnBBQy0+UG5taS5Qb3J0W1BoeXNQb3J0SW5kZXhdLlN0YXRTeW5jQ3Rz KSksKCgweDAxMDEwMTAxVUwqKHVuc2lnbmVkIGNoYXIpKDApKSksKChzaXplb2YocEFDLT5Qbm1p LlBvcnRbUGh5c1BvcnRJbmRleF0uU3RhdFN5bmNDdHMpKSkpKSA6IChfX2J1aWx0aW5fY29uc3Rh bnRfcCgoc2l6ZW9mKHBBQy0+UG5taS5Qb3J0W1BoeXNQb3J0SW5kZXhdLlN0YXRTeW5jQ3RzKSkp ID8gX19tZW1zZXRfZ2VuZXJpYygoKCgoY2hhciAqKSZwQUMtPlBubWkuUG9ydFtQaHlzUG9ydElu ZGV4XS5TdGF0U3luY0N0cykpKSwoKCgwKSkpLCgoKHNpemVvZihwQUMtPlBubWkuUG9ydFtQaHlz UG9ydEluZGV4XS5TdGF0U3luY0N0cykpKSkpIDogX19tZW1zZXRfZ2VuZXJpYygoKChjaGFyICop JnBBQy0+UG5taS5Qb3J0W1BoeXNQb3J0SW5kZXhdLlN0YXRTeW5jQ3RzKSksKCgwKSksKChzaXpl b2YocEFDLT5Qbm1pLlBvcnRbUGh5c1BvcnRJbmRleF0uU3RhdFN5bmNDdHMpKSkpKSk7CgogICAg ICAgICAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKDApID8gKF9fYnVpbHRpbl9jb25zdGFu dF9wKChzaXplb2YocEFDLT5Qbm1pLlBvcnRbIFBoeXNQb3J0SW5kZXhdLlN0YXRTeW5jT2N0ZXRz Q3RzKSkpID8gX19jb25zdGFudF9jX2FuZF9jb3VudF9tZW1zZXQoKCgoY2hhciAqKSZwQUMtPlBu bWkuUG9ydFtQaHlzUG9ydEluZGV4XS4gU3RhdFN5bmNPY3RldHNDdHMpKSwoKDB4MDEwMTAxMDFV TCoodW5zaWduZWQgY2hhcikoMCkpKSwoKHNpemVvZihwQUMtPlBubWkuUG9ydFsgUGh5c1BvcnRJ bmRleF0uU3RhdFN5bmNPY3RldHNDdHMpKSkpIDogX19jb25zdGFudF9jX21lbXNldCgoKChjaGFy ICopJnBBQy0+UG5taS5Qb3J0W1BoeXNQb3J0SW5kZXhdLiBTdGF0U3luY09jdGV0c0N0cykpLCgo MHgwMTAxMDEwMVVMKih1bnNpZ25lZCBjaGFyKSgwKSkpLCgoc2l6ZW9mKHBBQy0+UG5taS5Qb3J0 WyBQaHlzUG9ydEluZGV4XS5TdGF0U3luY09jdGV0c0N0cykpKSkpIDogKF9fYnVpbHRpbl9jb25z dGFudF9wKChzaXplb2YocEFDLT5Qbm1pLlBvcnRbIFBoeXNQb3J0SW5kZXhdLlN0YXRTeW5jT2N0 ZXRzQ3RzKSkpID8gX19tZW1zZXRfZ2VuZXJpYygoKCgoY2hhciAqKSZwQUMtPlBubWkuUG9ydFtQ aHlzUG9ydEluZGV4XS4gU3RhdFN5bmNPY3RldHNDdHMpKSksKCgoMCkpKSwoKChzaXplb2YocEFD LT5Qbm1pLlBvcnRbIFBoeXNQb3J0SW5kZXhdLlN0YXRTeW5jT2N0ZXRzQ3RzKSkpKSkgOiBfX21l bXNldF9nZW5lcmljKCgoKGNoYXIgKikmcEFDLT5Qbm1pLlBvcnRbUGh5c1BvcnRJbmRleF0uIFN0 YXRTeW5jT2N0ZXRzQ3RzKSksKCgwKSksKChzaXplb2YocEFDLT5Qbm1pLlBvcnRbIFBoeXNQb3J0 SW5kZXhdLlN0YXRTeW5jT2N0ZXRzQ3RzKSkpKSkpOwoKCiAgICAgICAgICAgICAgICAoX19idWls dGluX2NvbnN0YW50X3AoMCkgPyAoX19idWlsdGluX2NvbnN0YW50X3AoKHNpemVvZihwQUMtPlBu bWkuUG9ydFsgUGh5c1BvcnRJbmRleF0uU3RhdFJ4TG9uZ0ZyYW1lQ3RzKSkpID8gX19jb25zdGFu dF9jX2FuZF9jb3VudF9tZW1zZXQoKCgoY2hhciAqKSZwQUMtPlBubWkuUG9ydFtQaHlzUG9ydElu ZGV4XS4gU3RhdFJ4TG9uZ0ZyYW1lQ3RzKSksKCgweDAxMDEwMTAxVUwqKHVuc2lnbmVkIGNoYXIp KDApKSksKChzaXplb2YocEFDLT5Qbm1pLlBvcnRbIFBoeXNQb3J0SW5kZXhdLlN0YXRSeExvbmdG cmFtZUN0cykpKSkgOiBfX2NvbnN0YW50X2NfbWVtc2V0KCgoKGNoYXIgKikmcEFDLT5Qbm1pLlBv cnRbUGh5c1BvcnRJbmRleF0uIFN0YXRSeExvbmdGcmFtZUN0cykpLCgoMHgwMTAxMDEwMVVMKih1 bnNpZ25lZCBjaGFyKSgwKSkpLCgoc2l6ZW9mKHBBQy0+UG5taS5Qb3J0WyBQaHlzUG9ydEluZGV4 XS5TdGF0UnhMb25nRnJhbWVDdHMpKSkpKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCgoc2l6ZW9m KHBBQy0+UG5taS5Qb3J0WyBQaHlzUG9ydEluZGV4XS5TdGF0UnhMb25nRnJhbWVDdHMpKSkgPyBf X21lbXNldF9nZW5lcmljKCgoKChjaGFyICopJnBBQy0+UG5taS5Qb3J0W1BoeXNQb3J0SW5kZXhd LiBTdGF0UnhMb25nRnJhbWVDdHMpKSksKCgoMCkpKSwoKChzaXplb2YocEFDLT5Qbm1pLlBvcnRb IFBoeXNQb3J0SW5kZXhdLlN0YXRSeExvbmdGcmFtZUN0cykpKSkpIDogX19tZW1zZXRfZ2VuZXJp YygoKChjaGFyICopJnBBQy0+UG5taS5Qb3J0W1BoeXNQb3J0SW5kZXhdLiBTdGF0UnhMb25nRnJh bWVDdHMpKSwoKDApKSwoKHNpemVvZihwQUMtPlBubWkuUG9ydFsgUGh5c1BvcnRJbmRleF0uU3Rh dFJ4TG9uZ0ZyYW1lQ3RzKSkpKSkpOwoKCiAgICAgICAgICAgICAgICAoX19idWlsdGluX2NvbnN0 YW50X3AoMCkgPyAoX19idWlsdGluX2NvbnN0YW50X3AoKHNpemVvZihwQUMtPlBubWkuUG9ydFsg UGh5c1BvcnRJbmRleF0uU3RhdFJ4RnJhbWVUb29Mb25nQ3RzKSkpID8gX19jb25zdGFudF9jX2Fu ZF9jb3VudF9tZW1zZXQoKCgoY2hhciAqKSZwQUMtPlBubWkuUG9ydFtQaHlzUG9ydEluZGV4XS4g U3RhdFJ4RnJhbWVUb29Mb25nQ3RzKSksKCgweDAxMDEwMTAxVUwqKHVuc2lnbmVkIGNoYXIpKDAp KSksKChzaXplb2YocEFDLT5Qbm1pLlBvcnRbIFBoeXNQb3J0SW5kZXhdLlN0YXRSeEZyYW1lVG9v TG9uZ0N0cykpKSkgOiBfX2NvbnN0YW50X2NfbWVtc2V0KCgoKGNoYXIgKikmcEFDLT5Qbm1pLlBv cnRbUGh5c1BvcnRJbmRleF0uIFN0YXRSeEZyYW1lVG9vTG9uZ0N0cykpLCgoMHgwMTAxMDEwMVVM Kih1bnNpZ25lZCBjaGFyKSgwKSkpLCgoc2l6ZW9mKHBBQy0+UG5taS5Qb3J0WyBQaHlzUG9ydElu ZGV4XS5TdGF0UnhGcmFtZVRvb0xvbmdDdHMpKSkpKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCgo c2l6ZW9mKHBBQy0+UG5taS5Qb3J0WyBQaHlzUG9ydEluZGV4XS5TdGF0UnhGcmFtZVRvb0xvbmdD dHMpKSkgPyBfX21lbXNldF9nZW5lcmljKCgoKChjaGFyICopJnBBQy0+UG5taS5Qb3J0W1BoeXNQ b3J0SW5kZXhdLiBTdGF0UnhGcmFtZVRvb0xvbmdDdHMpKSksKCgoMCkpKSwoKChzaXplb2YocEFD LT5Qbm1pLlBvcnRbIFBoeXNQb3J0SW5kZXhdLlN0YXRSeEZyYW1lVG9vTG9uZ0N0cykpKSkpIDog X19tZW1zZXRfZ2VuZXJpYygoKChjaGFyICopJnBBQy0+UG5taS5Qb3J0W1BoeXNQb3J0SW5kZXhd LiBTdGF0UnhGcmFtZVRvb0xvbmdDdHMpKSwoKDApKSwoKHNpemVvZihwQUMtPlBubWkuUG9ydFsg UGh5c1BvcnRJbmRleF0uU3RhdFJ4RnJhbWVUb29Mb25nQ3RzKSkpKSkpOwoKCiAgICAgICAgICAg ICAgICAoX19idWlsdGluX2NvbnN0YW50X3AoMCkgPyAoX19idWlsdGluX2NvbnN0YW50X3AoKHNp emVvZihwQUMtPlBubWkuUG9ydFsgUGh5c1BvcnRJbmRleF0uU3RhdFJ4UE1hY2NFcnIpKSkgPyBf X2NvbnN0YW50X2NfYW5kX2NvdW50X21lbXNldCgoKChjaGFyICopJnBBQy0+UG5taS5Qb3J0W1Bo eXNQb3J0SW5kZXhdLiBTdGF0UnhQTWFjY0VycikpLCgoMHgwMTAxMDEwMVVMKih1bnNpZ25lZCBj aGFyKSgwKSkpLCgoc2l6ZW9mKHBBQy0+UG5taS5Qb3J0WyBQaHlzUG9ydEluZGV4XS5TdGF0UnhQ TWFjY0VycikpKSkgOiBfX2NvbnN0YW50X2NfbWVtc2V0KCgoKGNoYXIgKikmcEFDLT5Qbm1pLlBv cnRbUGh5c1BvcnRJbmRleF0uIFN0YXRSeFBNYWNjRXJyKSksKCgweDAxMDEwMTAxVUwqKHVuc2ln bmVkIGNoYXIpKDApKSksKChzaXplb2YocEFDLT5Qbm1pLlBvcnRbIFBoeXNQb3J0SW5kZXhdLlN0 YXRSeFBNYWNjRXJyKSkpKSkgOiAoX19idWlsdGluX2NvbnN0YW50X3AoKHNpemVvZihwQUMtPlBu bWkuUG9ydFsgUGh5c1BvcnRJbmRleF0uU3RhdFJ4UE1hY2NFcnIpKSkgPyBfX21lbXNldF9nZW5l cmljKCgoKChjaGFyICopJnBBQy0+UG5taS5Qb3J0W1BoeXNQb3J0SW5kZXhdLiBTdGF0UnhQTWFj Y0VycikpKSwoKCgwKSkpLCgoKHNpemVvZihwQUMtPlBubWkuUG9ydFsgUGh5c1BvcnRJbmRleF0u U3RhdFJ4UE1hY2NFcnIpKSkpKSA6IF9fbWVtc2V0X2dlbmVyaWMoKCgoY2hhciAqKSZwQUMtPlBu bWkuUG9ydFtQaHlzUG9ydEluZGV4XS4gU3RhdFJ4UE1hY2NFcnIpKSwoKDApKSwoKHNpemVvZihw QUMtPlBubWkuUG9ydFsgUGh5c1BvcnRJbmRleF0uU3RhdFJ4UE1hY2NFcnIpKSkpKSk7CgoKICAg ICAgICB9CgoKCgogICAgICAgIChfX2J1aWx0aW5fY29uc3RhbnRfcCgwKSA/IChfX2J1aWx0aW5f Y29uc3RhbnRfcCgoc2l6ZW9mKHBBQy0+UG5taS5WaXJ0dWFsQ291bnRlck9mZnNldCkpKSA/IF9f Y29uc3RhbnRfY19hbmRfY291bnRfbWVtc2V0KCgoKGNoYXIgKikmcEFDLT5Qbm1pLlZpcnR1YWxD b3VudGVyT2Zmc2V0KSksKCgweDAxMDEwMTAxVUwqKHVuc2lnbmVkIGNoYXIpKDApKSksKChzaXpl b2YocEFDLT5Qbm1pLlZpcnR1YWxDb3VudGVyT2Zmc2V0KSkpKSA6IF9fY29uc3RhbnRfY19tZW1z ZXQoKCgoY2hhciAqKSZwQUMtPlBubWkuVmlydHVhbENvdW50ZXJPZmZzZXQpKSwoKDB4MDEwMTAx MDFVTCoodW5zaWduZWQgY2hhcikoMCkpKSwoKHNpemVvZihwQUMtPlBubWkuVmlydHVhbENvdW50 ZXJPZmZzZXQpKSkpKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCgoc2l6ZW9mKHBBQy0+UG5taS5W aXJ0dWFsQ291bnRlck9mZnNldCkpKSA/IF9fbWVtc2V0X2dlbmVyaWMoKCgoKGNoYXIgKikmcEFD LT5Qbm1pLlZpcnR1YWxDb3VudGVyT2Zmc2V0KSkpLCgoKDApKSksKCgoc2l6ZW9mKHBBQy0+UG5t aS5WaXJ0dWFsQ291bnRlck9mZnNldCkpKSkpIDogX19tZW1zZXRfZ2VuZXJpYygoKChjaGFyICop JnBBQy0+UG5taS5WaXJ0dWFsQ291bnRlck9mZnNldCkpLCgoMCkpLCgoc2l6ZW9mKHBBQy0+UG5t aS5WaXJ0dWFsQ291bnRlck9mZnNldCkpKSkpKTsKCiAgICAgICAgcEFDLT5Qbm1pLlJsbXRDaGFu Z2VDdHMgPSAwOwogICAgICAgIHBBQy0+UG5taS5SbG10Q2hhbmdlVGltZSA9IDA7CiAgICAgICAg KF9fYnVpbHRpbl9jb25zdGFudF9wKDApID8gKF9fYnVpbHRpbl9jb25zdGFudF9wKChzaXplb2Yo cEFDLT5Qbm1pLlJsbXRDaGFuZ2VFc3RpbWF0ZS5Fc3RWYWx1ZSkpKSA/IF9fY29uc3RhbnRfY19h bmRfY291bnRfbWVtc2V0KCgoKGNoYXIgKikmcEFDLT5Qbm1pLlJsbXRDaGFuZ2VFc3RpbWF0ZS5F c3RWYWx1ZVswXSkpLCgoMHgwMTAxMDEwMVVMKih1bnNpZ25lZCBjaGFyKSgwKSkpLCgoc2l6ZW9m KHBBQy0+UG5taS5SbG10Q2hhbmdlRXN0aW1hdGUuRXN0VmFsdWUpKSkpIDogX19jb25zdGFudF9j X21lbXNldCgoKChjaGFyICopJnBBQy0+UG5taS5SbG10Q2hhbmdlRXN0aW1hdGUuRXN0VmFsdWVb MF0pKSwoKDB4MDEwMTAxMDFVTCoodW5zaWduZWQgY2hhcikoMCkpKSwoKHNpemVvZihwQUMtPlBu bWkuUmxtdENoYW5nZUVzdGltYXRlLkVzdFZhbHVlKSkpKSkgOiAoX19idWlsdGluX2NvbnN0YW50 X3AoKHNpemVvZihwQUMtPlBubWkuUmxtdENoYW5nZUVzdGltYXRlLkVzdFZhbHVlKSkpID8gX19t ZW1zZXRfZ2VuZXJpYygoKCgoY2hhciAqKSZwQUMtPlBubWkuUmxtdENoYW5nZUVzdGltYXRlLkVz dFZhbHVlWzBdKSkpLCgoKDApKSksKCgoc2l6ZW9mKHBBQy0+UG5taS5SbG10Q2hhbmdlRXN0aW1h dGUuRXN0VmFsdWUpKSkpKSA6IF9fbWVtc2V0X2dlbmVyaWMoKCgoY2hhciAqKSZwQUMtPlBubWku UmxtdENoYW5nZUVzdGltYXRlLkVzdFZhbHVlWzBdKSksKCgwKSksKChzaXplb2YocEFDLT5Qbm1p LlJsbXRDaGFuZ2VFc3RpbWF0ZS5Fc3RWYWx1ZSkpKSkpKTsKCiAgICAgICAgcEFDLT5Qbm1pLlJs bXRDaGFuZ2VFc3RpbWF0ZS5Fc3RWYWx1ZUluZGV4ID0gMDsKICAgICAgICBwQUMtPlBubWkuUmxt dENoYW5nZUVzdGltYXRlLkVzdGltYXRlID0gMDsKICAgICAgICBwQUMtPlBubWkuUG9ydFtOZXRJ bmRleF0uVHhTd1F1ZXVlTWF4ID0gMDsKICAgICAgICBwQUMtPlBubWkuUG9ydFtOZXRJbmRleF0u VHhSZXRyeUN0cyA9IDA7CiAgICAgICAgcEFDLT5Qbm1pLlBvcnRbTmV0SW5kZXhdLlJ4SW50ckN0 cyA9IDA7CiAgICAgICAgcEFDLT5Qbm1pLlBvcnRbTmV0SW5kZXhdLlR4SW50ckN0cyA9IDA7CiAg ICAgICAgcEFDLT5Qbm1pLlBvcnRbTmV0SW5kZXhdLlJ4Tm9CdWZDdHMgPSAwOwogICAgICAgIHBB Qy0+UG5taS5Qb3J0W05ldEluZGV4XS5UeE5vQnVmQ3RzID0gMDsKICAgICAgICBwQUMtPlBubWku UG9ydFtOZXRJbmRleF0uVHhVc2VkRGVzY3JObyA9IDA7CiAgICAgICAgcEFDLT5Qbm1pLlBvcnRb TmV0SW5kZXhdLlJ4RGVsaXZlcmVkQ3RzID0gMDsKICAgICAgICBwQUMtPlBubWkuUG9ydFtOZXRJ bmRleF0uUnhPY3RldHNEZWxpdmVyZWRDdHMgPSAwOwogICAgICAgIHBBQy0+UG5taS5Qb3J0W05l dEluZGV4XS5FcnJSZWNvdmVyeUN0cyA9IDA7Cn0KIyA3NDQ1ICJza2dlcG5taS5jIgpzdGF0aWMg Y2hhciogR2V0VHJhcEVudHJ5KApTS19BQyAqcEFDLAp1MzIgVHJhcElkLAp1bnNpZ25lZCBpbnQg U2l6ZSkKewogICAgICAgIHVuc2lnbmVkIGludCBCdWZQYWQgPSBwQUMtPlBubWkuVHJhcEJ1ZlBh ZDsKICAgICAgICB1bnNpZ25lZCBpbnQgQnVmRnJlZSA9IHBBQy0+UG5taS5UcmFwQnVmRnJlZTsK ICAgICAgICB1bnNpZ25lZCBpbnQgQmVnID0gcEFDLT5Qbm1pLlRyYXBRdWV1ZUJlZzsKICAgICAg ICB1bnNpZ25lZCBpbnQgRW5kID0gcEFDLT5Qbm1pLlRyYXBRdWV1ZUVuZDsKICAgICAgICBjaGFy ICpwQnVmID0gJnBBQy0+UG5taS5UcmFwQnVmWzBdOwogICAgICAgIGludCBXcmFwOwogICAgICAg IHVuc2lnbmVkIGludCBOZWVkZWRTcGFjZTsKICAgICAgICB1bnNpZ25lZCBpbnQgRW50cnlTaXpl OwogICAgICAgIHUzMiBWYWwzMjsKICAgICAgICB1NjQgVmFsNjQ7CgoKCiAgICAgICAgU2l6ZSAr KzsKCgoKICAgICAgICBpZiAoQmVnID49IFNpemUpIHsKCiAgICAgICAgICAgICAgICBOZWVkZWRT cGFjZSA9IFNpemU7CiAgICAgICAgICAgICAgICBXcmFwID0gMDsKICAgICAgICB9CiAgICAgICAg ZWxzZSB7CiAgICAgICAgICAgICAgICBOZWVkZWRTcGFjZSA9IEJlZyArIFNpemU7CiAgICAgICAg ICAgICAgICBXcmFwID0gKCEwKTsKICAgICAgICB9CgoKCgoKCgogICAgICAgIHdoaWxlIChCdWZG cmVlIDwgTmVlZGVkU3BhY2UgKyAxKSB7CgogICAgICAgICAgICAgICAgaWYgKEVuZCA9PSAwKSB7 CgogICAgICAgICAgICAgICAgICAgICAgICBFbmQgPSA1MTI7CiAgICAgICAgICAgICAgICB9Cgog ICAgICAgICAgICAgICAgRW50cnlTaXplID0gKHVuc2lnbmVkIGludCkqKCh1bnNpZ25lZCBjaGFy ICopcEJ1ZiArIEVuZCAtIDEpOwogICAgICAgICAgICAgICAgQnVmRnJlZSArPSBFbnRyeVNpemU7 CiAgICAgICAgICAgICAgICBFbmQgLT0gRW50cnlTaXplOwoKCgogICAgICAgICAgICAgICAgaWYg KEVuZCA9PSBCdWZQYWQpIHsKCgoKICAgICAgICAgICAgICAgICAgICAgICAgQnVmRnJlZSArPSBF bmQ7CiAgICAgICAgICAgICAgICAgICAgICAgIEVuZCA9IDA7CiAgICAgICAgICAgICAgICAgICAg ICAgIEJ1ZlBhZCA9IDA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKCgoKCiAgICAgICAg aWYgKFdyYXApIHsKCiAgICAgICAgICAgICAgICBCdWZQYWQgPSBCZWc7CiAgICAgICAgICAgICAg ICBCZWcgPSA1MTIgLSBTaXplOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAg ICAgIEJlZyA9IEJlZyAtIFNpemU7CiAgICAgICAgfQogICAgICAgIEJ1ZkZyZWUgLT0gTmVlZGVk U3BhY2U7CgoKICAgICAgICBwQUMtPlBubWkuVHJhcFF1ZXVlQmVnID0gQmVnOwogICAgICAgIHBB Qy0+UG5taS5UcmFwUXVldWVFbmQgPSBFbmQ7CiAgICAgICAgcEFDLT5Qbm1pLlRyYXBCdWZQYWQg PSBCdWZQYWQ7CiAgICAgICAgcEFDLT5Qbm1pLlRyYXBCdWZGcmVlID0gQnVmRnJlZTsKCgogICAg ICAgICoocEJ1ZiArIEJlZyArIFNpemUgLSAxKSA9IChjaGFyKVNpemU7CiAgICAgICAgKihwQnVm ICsgQmVnKSA9IChjaGFyKVNpemU7CiAgICAgICAgVmFsMzIgPSAocEFDLT5Qbm1pLlRyYXBVbmlx dWUpICsrOwogICAgICAgIChfX2J1aWx0aW5fY29uc3RhbnRfcCg0KSA/IF9fY29uc3RhbnRfbWVt Y3B5KCgoY2hhciopKHBCdWYgKyBCZWcgKyAxKSksKChjaGFyKikmKFZhbDMyKSksKDQpKSA6IF9f bWVtY3B5KCgoY2hhciopKHBCdWYgKyBCZWcgKyAxKSksKChjaGFyKikmKFZhbDMyKSksKDQpKSk7 CiAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKDQpID8gX19jb25zdGFudF9tZW1jcHkoKChj aGFyKikocEJ1ZiArIEJlZyArIDEgKyBzaXplb2YodTMyKSkpLCgoY2hhciopJihUcmFwSWQpKSwo NCkpIDogX19tZW1jcHkoKChjaGFyKikocEJ1ZiArIEJlZyArIDEgKyBzaXplb2YodTMyKSkpLCgo Y2hhciopJihUcmFwSWQpKSwoNCkpKTsKICAgICAgICBWYWw2NCA9IChTa09zR2V0VGltZShwQUMp KTsKICAgICAgICAoX19idWlsdGluX2NvbnN0YW50X3AoOCkgPyBfX2NvbnN0YW50X21lbWNweSgo KGNoYXIqKShwQnVmICsgQmVnICsgMSArIDIgKiBzaXplb2YodTMyKSkpLCgoY2hhciopJihWYWw2 NCkpLCg4KSkgOiBfX21lbWNweSgoKGNoYXIqKShwQnVmICsgQmVnICsgMSArIDIgKiBzaXplb2Yo dTMyKSkpLCgoY2hhciopJihWYWw2NCkpLCg4KSkpOwoKICAgICAgICByZXR1cm4gKHBCdWYgKyBC ZWcpOwp9CiMgNzU1MCAic2tnZXBubWkuYyIKc3RhdGljIHZvaWQgQ29weVRyYXBRdWV1ZSgKU0tf QUMgKnBBQywKY2hhciAqcERzdEJ1ZikKewogICAgICAgIHVuc2lnbmVkIGludCBCdWZQYWQgPSBw QUMtPlBubWkuVHJhcEJ1ZlBhZDsKICAgICAgICB1bnNpZ25lZCBpbnQgVHJhcCA9IHBBQy0+UG5t aS5UcmFwUXVldWVCZWc7CiAgICAgICAgdW5zaWduZWQgaW50IEVuZCA9IHBBQy0+UG5taS5UcmFw UXVldWVFbmQ7CiAgICAgICAgY2hhciAqcEJ1ZiA9ICZwQUMtPlBubWkuVHJhcEJ1ZlswXTsKICAg ICAgICB1bnNpZ25lZCBpbnQgTGVuOwogICAgICAgIHVuc2lnbmVkIGludCBEc3RPZmYgPSAwOwoK CiAgICAgICAgd2hpbGUgKFRyYXAgIT0gRW5kKSB7CgogICAgICAgICAgICAgICAgTGVuID0gKHVu c2lnbmVkIGludCkqKHBCdWYgKyBUcmFwKTsKCgoKCgogICAgICAgICAgICAgICAgKihwRHN0QnVm ICsgRHN0T2ZmKSA9IChjaGFyKShMZW4gLSAxKTsKICAgICAgICAgICAgICAgIChfX2J1aWx0aW5f Y29uc3RhbnRfcChMZW4gLSAyKSA/IF9fY29uc3RhbnRfbWVtY3B5KChwRHN0QnVmICsgRHN0T2Zm ICsgMSksKHBCdWYgKyBUcmFwICsgMSksKExlbiAtIDIpKSA6IF9fbWVtY3B5KChwRHN0QnVmICsg RHN0T2ZmICsgMSksKHBCdWYgKyBUcmFwICsgMSksKExlbiAtIDIpKSk7CiAgICAgICAgICAgICAg ICBEc3RPZmYgKz0gTGVuIC0gMTsKCiAgICAgICAgICAgICAgICBUcmFwICs9IExlbjsKICAgICAg ICAgICAgICAgIGlmIChUcmFwID09IDUxMikgewoKICAgICAgICAgICAgICAgICAgICAgICAgVHJh cCA9IEJ1ZlBhZDsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9Cn0KIyA3NTkzICJza2dlcG5t aS5jIgpzdGF0aWMgdm9pZCBHZXRUcmFwUXVldWVMZW4oClNLX0FDICpwQUMsCnVuc2lnbmVkIGlu dCAqcExlbiwKdW5zaWduZWQgaW50ICpwRW50cmllcykKewogICAgICAgIHVuc2lnbmVkIGludCBC dWZQYWQgPSBwQUMtPlBubWkuVHJhcEJ1ZlBhZDsKICAgICAgICB1bnNpZ25lZCBpbnQgVHJhcCA9 IHBBQy0+UG5taS5UcmFwUXVldWVCZWc7CiAgICAgICAgdW5zaWduZWQgaW50IEVuZCA9IHBBQy0+ UG5taS5UcmFwUXVldWVFbmQ7CiAgICAgICAgY2hhciAqcEJ1ZiA9ICZwQUMtPlBubWkuVHJhcEJ1 ZlswXTsKICAgICAgICB1bnNpZ25lZCBpbnQgTGVuOwogICAgICAgIHVuc2lnbmVkIGludCBFbnRy aWVzID0gMDsKICAgICAgICB1bnNpZ25lZCBpbnQgVG90YWxMZW4gPSAwOwoKCiAgICAgICAgd2hp bGUgKFRyYXAgIT0gRW5kKSB7CgogICAgICAgICAgICAgICAgTGVuID0gKHVuc2lnbmVkIGludCkq KHBCdWYgKyBUcmFwKTsKICAgICAgICAgICAgICAgIFRvdGFsTGVuICs9IExlbiAtIDE7CiAgICAg ICAgICAgICAgICBFbnRyaWVzICsrOwoKICAgICAgICAgICAgICAgIFRyYXAgKz0gTGVuOwogICAg ICAgICAgICAgICAgaWYgKFRyYXAgPT0gNTEyKSB7CgogICAgICAgICAgICAgICAgICAgICAgICBU cmFwID0gQnVmUGFkOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgKnBFbnRy aWVzID0gRW50cmllczsKICAgICAgICAqcExlbiA9IFRvdGFsTGVuOwp9CiMgNzYzNSAic2tnZXBu bWkuYyIKc3RhdGljIHZvaWQgUXVldWVTaW1wbGVUcmFwKApTS19BQyAqcEFDLAp1MzIgVHJhcElk KQp7CiAgICAgICAgR2V0VHJhcEVudHJ5KHBBQywgVHJhcElkLCAxNyk7Cn0KIyA3NjUzICJza2dl cG5taS5jIgpzdGF0aWMgdm9pZCBRdWV1ZVNlbnNvclRyYXAoClNLX0FDICpwQUMsCnUzMiBUcmFw SWQsCnVuc2lnbmVkIGludCBTZW5zb3JJbmRleCkKewogICAgICAgIGNoYXIgKnBCdWY7CiAgICAg ICAgdW5zaWduZWQgaW50IE9mZnNldDsKICAgICAgICB1bnNpZ25lZCBpbnQgRGVzY3JMZW47CiAg ICAgICAgdTMyIFZhbDMyOwoKCgogICAgICAgIERlc2NyTGVuID0gc3RybGVuKChjaGFyKikocEFD LT5JMmMuU2VuVGFibGVbU2Vuc29ySW5kZXhdLlNlbkRlc2MpKTsKICAgICAgICBwQnVmID0gR2V0 VHJhcEVudHJ5KHBBQywgVHJhcElkLAogICAgICAgICAgICAgICAgNDYgKyBEZXNjckxlbik7CiAg ICAgICAgT2Zmc2V0ID0gMTc7CgoKICAgICAgICBWYWwzMiA9IDB4RkYwMjAxMDE7CiAgICAgICAg KF9fYnVpbHRpbl9jb25zdGFudF9wKDQpID8gX19jb25zdGFudF9tZW1jcHkoKChjaGFyKikocEJ1 ZiArIE9mZnNldCkpLCgoY2hhciopJihWYWwzMikpLCg0KSkgOiBfX21lbWNweSgoKGNoYXIqKShw QnVmICsgT2Zmc2V0KSksKChjaGFyKikmKFZhbDMyKSksKDQpKSk7CiAgICAgICAgKihwQnVmICsg T2Zmc2V0ICsgNCkgPSA0OwogICAgICAgIFZhbDMyID0gKHUzMilTZW5zb3JJbmRleDsKICAgICAg ICAoX19idWlsdGluX2NvbnN0YW50X3AoNCkgPyBfX2NvbnN0YW50X21lbWNweSgoKGNoYXIqKShw QnVmICsgT2Zmc2V0ICsgNSkpLCgoY2hhciopJihWYWwzMikpLCg0KSkgOiBfX21lbWNweSgoKGNo YXIqKShwQnVmICsgT2Zmc2V0ICsgNSkpLCgoY2hhciopJihWYWwzMikpLCg0KSkpOwogICAgICAg IE9mZnNldCArPSA5OwoKICAgICAgICBWYWwzMiA9ICh1MzIpMHhGRjAyMDEwMjsKICAgICAgICAo X19idWlsdGluX2NvbnN0YW50X3AoNCkgPyBfX2NvbnN0YW50X21lbWNweSgoKGNoYXIqKShwQnVm ICsgT2Zmc2V0KSksKChjaGFyKikmKFZhbDMyKSksKDQpKSA6IF9fbWVtY3B5KCgoY2hhciopKHBC dWYgKyBPZmZzZXQpKSwoKGNoYXIqKSYoVmFsMzIpKSwoNCkpKTsKICAgICAgICAqKHBCdWYgKyBP ZmZzZXQgKyA0KSA9IChjaGFyKURlc2NyTGVuOwogICAgICAgIChfX2J1aWx0aW5fY29uc3RhbnRf cChEZXNjckxlbikgPyBfX2NvbnN0YW50X21lbWNweSgocEJ1ZiArIE9mZnNldCArIDUpLChwQUMt PkkyYy5TZW5UYWJsZVtTZW5zb3JJbmRleF0uU2VuRGVzYyksKERlc2NyTGVuKSkgOiBfX21lbWNw eSgocEJ1ZiArIE9mZnNldCArIDUpLChwQUMtPkkyYy5TZW5UYWJsZVtTZW5zb3JJbmRleF0uU2Vu RGVzYyksKERlc2NyTGVuKSkpOwoKICAgICAgICBPZmZzZXQgKz0gRGVzY3JMZW4gKyA1OwoKICAg ICAgICBWYWwzMiA9IDB4RkYwMjAxMDM7CiAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKDQp ID8gX19jb25zdGFudF9tZW1jcHkoKChjaGFyKikocEJ1ZiArIE9mZnNldCkpLCgoY2hhciopJihW YWwzMikpLCg0KSkgOiBfX21lbWNweSgoKGNoYXIqKShwQnVmICsgT2Zmc2V0KSksKChjaGFyKikm KFZhbDMyKSksKDQpKSk7CiAgICAgICAgKihwQnVmICsgT2Zmc2V0ICsgNCkgPSAxOwogICAgICAg ICoocEJ1ZiArIE9mZnNldCArIDUpID0gKGNoYXIpcEFDLT5JMmMuU2VuVGFibGVbU2Vuc29ySW5k ZXhdLlNlblR5cGU7CiAgICAgICAgT2Zmc2V0ICs9IDY7CgogICAgICAgIFZhbDMyID0gMHhGRjAy MDEwNDsKICAgICAgICAoX19idWlsdGluX2NvbnN0YW50X3AoNCkgPyBfX2NvbnN0YW50X21lbWNw eSgoKGNoYXIqKShwQnVmICsgT2Zmc2V0KSksKChjaGFyKikmKFZhbDMyKSksKDQpKSA6IF9fbWVt Y3B5KCgoY2hhciopKHBCdWYgKyBPZmZzZXQpKSwoKGNoYXIqKSYoVmFsMzIpKSwoNCkpKTsKICAg ICAgICAqKHBCdWYgKyBPZmZzZXQgKyA0KSA9IDQ7CiAgICAgICAgVmFsMzIgPSAodTMyKXBBQy0+ STJjLlNlblRhYmxlW1NlbnNvckluZGV4XS5TZW5WYWx1ZTsKICAgICAgICAoX19idWlsdGluX2Nv bnN0YW50X3AoNCkgPyBfX2NvbnN0YW50X21lbWNweSgoKGNoYXIqKShwQnVmICsgT2Zmc2V0ICsg NSkpLCgoY2hhciopJihWYWwzMikpLCg0KSkgOiBfX21lbWNweSgoKGNoYXIqKShwQnVmICsgT2Zm c2V0ICsgNSkpLCgoY2hhciopJihWYWwzMikpLCg0KSkpOwp9CiMgNzcwOCAic2tnZXBubWkuYyIK c3RhdGljIHZvaWQgUXVldWVSbG10TmV3TWFjVHJhcCgKU0tfQUMgKnBBQywKdW5zaWduZWQgaW50 IEFjdGl2ZU1hYykKewogICAgICAgIGNoYXIgKnBCdWY7CiAgICAgICAgdTMyIFZhbDMyOwoKCiAg ICAgICAgcEJ1ZiA9IEdldFRyYXBFbnRyeShwQUMsIDUyMSwKICAgICAgICAgICAgICAgIDIzKTsK CiAgICAgICAgVmFsMzIgPSAweEZGMDEwMTQyOwogICAgICAgIChfX2J1aWx0aW5fY29uc3RhbnRf cCg0KSA/IF9fY29uc3RhbnRfbWVtY3B5KCgoY2hhciopKHBCdWYgKyAxNykpLCgoY2hhciopJihW YWwzMikpLCg0KSkgOiBfX21lbWNweSgoKGNoYXIqKShwQnVmICsgMTcpKSwoKGNoYXIqKSYoVmFs MzIpKSwoNCkpKTsKICAgICAgICAqKHBCdWYgKyAxNyArIDQpID0gMTsKICAgICAgICAqKHBCdWYg KyAxNyArIDUpID0gKGNoYXIpQWN0aXZlTWFjOwp9CiMgNzczNSAic2tnZXBubWkuYyIKc3RhdGlj IHZvaWQgUXVldWVSbG10UG9ydFRyYXAoClNLX0FDICpwQUMsCnUzMiBUcmFwSWQsCnVuc2lnbmVk IGludCBQb3J0SW5kZXgpCnsKICAgICAgICBjaGFyICpwQnVmOwogICAgICAgIHUzMiBWYWwzMjsK CgogICAgICAgIHBCdWYgPSBHZXRUcmFwRW50cnkocEFDLCBUcmFwSWQsIDIzKTsKCiAgICAgICAg VmFsMzIgPSAweEZGMDIwMTY0OwogICAgICAgIChfX2J1aWx0aW5fY29uc3RhbnRfcCg0KSA/IF9f Y29uc3RhbnRfbWVtY3B5KCgoY2hhciopKHBCdWYgKyAxNykpLCgoY2hhciopJihWYWwzMikpLCg0 KSkgOiBfX21lbWNweSgoKGNoYXIqKShwQnVmICsgMTcpKSwoKGNoYXIqKSYoVmFsMzIpKSwoNCkp KTsKICAgICAgICAqKHBCdWYgKyAxNyArIDQpID0gMTsKICAgICAgICAqKHBCdWYgKyAxNyArIDUp ID0gKGNoYXIpUG9ydEluZGV4Owp9CiMgNzc2MiAic2tnZXBubWkuYyIKc3RhdGljIHZvaWQgQ29w eU1hYygKY2hhciAqcERzdCwKU0tfTUFDX0FERFIgKnBNYWMpCnsKICAgICAgICBpbnQgaTsKCgog ICAgICAgIGZvciAoaSA9IDA7IGkgPCBzaXplb2YoU0tfTUFDX0FERFIpOyBpICsrKSB7CgogICAg ICAgICAgICAgICAgKihwRHN0ICsgaSkgPSBwTWFjLT5hW2ldOwogICAgICAgIH0KfQojIDc5ODYg InNrZ2Vwbm1pLmMiCnN0YXRpYyBpbnQgVmN0KApTS19BQyAqcEFDLApjaGFyKiBJb0MsCmludCBB Y3Rpb24sCnUzMiBJZCwKY2hhciAqcEJ1ZiwKdW5zaWduZWQgaW50ICpwTGVuLAp1MzIgSW5zdGFu Y2UsCnVuc2lnbmVkIGludCBUYWJsZUluZGV4LAp1MzIgTmV0SW5kZXgpCnsKICAgICAgICBTS19H RVBPUlQgKnBQcnQ7CiAgICAgICAgU0tfUE5NSV9WQ1QgKnBWY3RCYWNrdXBEYXRhOwogICAgICAg IHUzMiBMb2dQb3J0TWF4OwogICAgICAgIHUzMiBQaHlzUG9ydE1heDsKICAgICAgICB1MzIgUGh5 c1BvcnRJbmRleDsKICAgICAgICB1MzIgTGltaXQ7CiAgICAgICAgdTMyIE9mZnNldDsKCiAgICAg ICAgdTggTGluazsKICAgICAgICB1MzIgUmV0Q29kZSA9IDE7CiAgICAgICAgaW50IGk7CiAgICAg ICAgU0tfRVZQQVJBIFBhcmE7CiAgICAgICAgdTMyIENhYmxlTGVuZ3RoOwoKCgoKICAgICAgICBQ aHlzUG9ydE1heCA9IHBBQy0+R0luaS5HSU1hY3NGb3VuZDsKICAgICAgICBMb2dQb3J0TWF4ID0g KCh1bnNpZ25lZCBpbnQpKFBoeXNQb3J0TWF4KSArIDEpOwoKCiAgICAgICAgaWYgKHBBQy0+UG5t aS5EdWFsTmV0QWN0aXZlRmxhZyA9PSAoITApKSB7CiAgICAgICAgICAgICAgICBMb2dQb3J0TWF4 LS07CiAgICAgICAgfQoKICAgICAgICBpZiAoKEluc3RhbmNlICE9ICh1MzIpICgtMSkpKSB7Cgog ICAgICAgICAgICAgICAgaWYgKChJbnN0YW5jZSA8IDIpIHx8IChJbnN0YW5jZSA+IExvZ1BvcnRN YXgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICpwTGVuID0gMDsKICAgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuICg2KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBp ZiAocEFDLT5Qbm1pLkR1YWxOZXRBY3RpdmVGbGFnID09ICghMCkpIHsKICAgICAgICAgICAgICAg ICAgICAgICAgUGh5c1BvcnRJbmRleCA9IE5ldEluZGV4OwogICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIFBoeXNQb3J0SW5kZXgg PSBJbnN0YW5jZSAtIDI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBMaW1pdCA9 IFBoeXNQb3J0SW5kZXggKyAxOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKCgoKCiAgICAgICAg ICAgICAgICBQaHlzUG9ydEluZGV4ID0gMDsKICAgICAgICAgICAgICAgIExpbWl0ID0gUGh5c1Bv cnRNYXg7CiAgICAgICAgfQoKICAgICAgICBwUHJ0ID0gJnBBQy0+R0luaS5HUFtQaHlzUG9ydElu ZGV4XTsKICAgICAgICBpZiAocFBydC0+UEhXTGlua1VwKSB7CiAgICAgICAgICAgICAgICBMaW5r ID0gKCEwKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBMaW5rID0g MDsKICAgICAgICB9CgoKCgogICAgICAgIGlmIChwUHJ0LT5QaHlUeXBlICE9IDQpIHsKICAgICAg ICAgICAgICAgICpwTGVuID0gMDsKICAgICAgICAgICAgICAgIHJldHVybiAoMSk7CiAgICAgICAg fQoKCiAgICAgICAgcFZjdEJhY2t1cERhdGEgPSAmcEFDLT5Qbm1pLlZjdEJhY2t1cFtQaHlzUG9y dEluZGV4XTsKCgoKCiAgICAgICAgaWYgKEFjdGlvbiA9PSAwKSB7CgoKCiAgICAgICAgICAgICAg ICBzd2l0Y2ggKElkKSB7CgogICAgICAgICAgICAgICAgY2FzZSAweEZGMDIwMjAwOgogICAgICAg ICAgICAgICAgICAgICAgICBpZiAoKnBMZW4gPCAoTGltaXQgLSBQaHlzUG9ydEluZGV4KSAqIHNp emVvZihTS19QTk1JX1ZDVCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcExl biA9IChMaW1pdCAtIFBoeXNQb3J0SW5kZXgpICogc2l6ZW9mKFNLX1BOTUlfVkNUKTsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDIpOwogICAgICAgICAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNh c2UgMHhGRjAyMDIwMjoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCpwTGVuIDwgKExpbWl0 IC0gUGh5c1BvcnRJbmRleCkgKiBzaXplb2YodTgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKnBMZW4gPSAoTGltaXQgLSBQaHlzUG9ydEluZGV4KSAqIHNpemVvZih1OCk7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgyKTsKICAgICAgICAgICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAg ICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAqcExlbiA9IDA7CiAgICAgICAgICAg ICAgICAgICAgICAgIHJldHVybiAoMSk7CiAgICAgICAgICAgICAgICB9CgoKCgogICAgICAgICAg ICAgICAgT2Zmc2V0ID0gMDsKICAgICAgICAgICAgICAgIGZvciAoOyBQaHlzUG9ydEluZGV4IDwg TGltaXQ7IFBoeXNQb3J0SW5kZXgrKykgewogICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2gg KElkKSB7CgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4RkYwMjAyMDA6CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChMaW5rID09IDApICYmCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAocEFDLT5Qbm1pLlZjdFN0YXR1c1tQaHlzUG9ydElu ZGV4XSAmIDMyKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmV0 Q29kZSA9IFNrR21DYWJsZURpYWdTdGF0dXMocEFDLCBJb0MsIFBoeXNQb3J0SW5kZXgsIDApOwog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFJldENvZGUgPT0gMCkg ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQUMtPlBu bWkuVmN0U3RhdHVzW1BoeXNQb3J0SW5kZXhdICY9IH4zMjsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFDLT5Qbm1pLlZjdFN0YXR1c1tQaHlzUG9ydElu ZGV4XSB8PQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICgyIHwgNjQpOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocFBydC0+UE1kaVBhaXJTdHNb aV0gPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKChwUHJ0LT5QTWRpUGFpckxlbltpXSA+IDM1KSAmJiAocFBy dC0+UE1kaVBhaXJMZW5baV0gPCAweGZmKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwUHJ0LT5QTWRpUGFp clN0c1tpXSA9IDQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGlmICgocFBydC0+UE1kaVBhaXJMZW5baV0gPiAzNSkgJiYg KHBQcnQtPlBNZGlQYWlyTGVuW2ldICE9IDB4ZmYpKSB7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYWJsZUxlbmd0aCA9IDEw MDAgKiAoKCgxNzUgKiBwUHJ0LT5QTWRpUGFpckxlbltpXSkgLyAyMTApIC0gMjgpOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIENhYmxlTGVuZ3RoID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcFZjdEJhY2t1cERhdGEtPlBNZGlQYWlyTGVuW2ldID0g Q2FibGVMZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcFZjdEJhY2t1cERhdGEtPlBNZGlQYWlyU3RzW2ldID0gcFBydC0+UE1kaVBh aXJTdHNbaV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcmEu UGFyYTMyWzBdID0gUGh5c1BvcnRJbmRleDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUGFyYS5QYXJhMzJbMV0gPSAtMTsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tFdmVudFF1ZXVlKHBBQywgMSwgMSwgUGFy YSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrRXZl bnREaXNwYXRjaGVyKHBBQywgSW9DKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ugewog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfQoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hlY2tWY3RTdGF0 dXMocEFDLCBJb0MsIHBCdWYsIE9mZnNldCwgUGh5c1BvcnRJbmRleCk7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgT2Zmc2V0ICs9IHNpemVvZih1OCk7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKihwQnVmICsgT2Zmc2V0KSA9IHBQcnQtPlBDYWJsZUxlbjsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBPZmZzZXQgKz0gc2l6ZW9mKHU4KTsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19idWlsdGluX2NvbnN0YW50X3AoNCkg PyBfX2NvbnN0YW50X21lbWNweSgoKGNoYXIqKSgocEJ1ZiArIE9mZnNldCkpKSwoKGNoYXIqKSYo cFZjdEJhY2t1cERhdGEtPlBNZGlQYWlyTGVuW2ldKSksKDQpKSA6IF9fbWVtY3B5KCgoY2hhciop KChwQnVmICsgT2Zmc2V0KSkpLCgoY2hhciopJihwVmN0QmFja3VwRGF0YS0+UE1kaVBhaXJMZW5b aV0pKSwoNCkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9mZnNl dCArPSBzaXplb2YodTMyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihwQnVmICsgT2Zmc2V0KSA9IHBW Y3RCYWNrdXBEYXRhLT5QTWRpUGFpclN0c1tpXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE9mZnNldCArPSBzaXplb2YodTgpOwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmV0Q29kZSA9IDA7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAg ICAgICAgICBjYXNlIDB4RkYwMjAyMDI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Q2hlY2tWY3RTdGF0dXMocEFDLCBJb0MsIHBCdWYsIE9mZnNldCwgUGh5c1BvcnRJbmRleCk7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2Zmc2V0ICs9IHNpemVvZih1OCk7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUmV0Q29kZSA9IDA7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Ogog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwTGVuID0gMDsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICByZXR1cm4gKDEpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAqcExlbiA9IE9mZnNldDsKICAgICAgICAg ICAgICAgIHJldHVybiAoUmV0Q29kZSk7CgogICAgICAgIH0KIyA4MTc3ICJza2dlcG5taS5jIgog ICAgICAgIHN3aXRjaCAoSWQpIHsKICAgICAgICBjYXNlIDB4RkYwMjAyMDE6CiAgICAgICAgICAg ICAgICBpZiAoKnBMZW4gPCAoTGltaXQgLSBQaHlzUG9ydEluZGV4KSAqIHNpemVvZih1MzIpKSB7 CiAgICAgICAgICAgICAgICAgICAgICAgICpwTGVuID0gKExpbWl0IC0gUGh5c1BvcnRJbmRleCkg KiBzaXplb2YodTMyKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgyKTsKICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBkZWZhdWx0OgogICAg ICAgICAgICAgICAgKnBMZW4gPSAwOwogICAgICAgICAgICAgICAgcmV0dXJuICgxKTsKICAgICAg ICB9CgoKCgoKCiAgICAgICAgaWYgKEFjdGlvbiA9PSAxKSB7CiAgICAgICAgICAgICAgICByZXR1 cm4gKDApOwogICAgICAgIH0KCiAgICAgICAgT2Zmc2V0ID0gMDsKICAgICAgICBmb3IgKDsgUGh5 c1BvcnRJbmRleCA8IExpbWl0OyBQaHlzUG9ydEluZGV4KyspIHsKICAgICAgICAgICAgICAgIHN3 aXRjaCAoSWQpIHsKICAgICAgICAgICAgICAgIGNhc2UgMHhGRjAyMDIwMToKICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKExpbmsgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFNrR2VTdG9wUG9ydChwQUMsIElvQywgUGh5c1BvcnRJbmRleCwgMywgMSk7CgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFJldENvZGUgPSBTa0dtQ2FibGVEaWFnU3RhdHVzKHBB QywgSW9DLCBQaHlzUG9ydEluZGV4LCAoITApKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpZiAoUmV0Q29kZSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwQUMtPlBubWkuVmN0U3RhdHVzW1BoeXNQb3J0SW5kZXhdIHw9IDMyOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFDLT5Qbm1pLlZjdFN0YXR1c1tQaHlz UG9ydEluZGV4XSAmPSB+MjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHBBQy0+UG5taS5WY3RTdGF0dXNbUGh5c1BvcnRJbmRleF0gJj0gfjEyODsKCgoKCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19idWlsdGluX2NvbnN0YW50X3AoMCkg PyAoX19idWlsdGluX2NvbnN0YW50X3AoKHNpemVvZihQYXJhKSkpID8gX19jb25zdGFudF9jX2Fu ZF9jb3VudF9tZW1zZXQoKCgoY2hhciAqKSAmUGFyYSkpLCgoMHgwMTAxMDEwMVVMKih1bnNpZ25l ZCBjaGFyKSgwKSkpLCgoc2l6ZW9mKFBhcmEpKSkpIDogX19jb25zdGFudF9jX21lbXNldCgoKChj aGFyICopICZQYXJhKSksKCgweDAxMDEwMTAxVUwqKHVuc2lnbmVkIGNoYXIpKDApKSksKChzaXpl b2YoUGFyYSkpKSkpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wKChzaXplb2YoUGFyYSkpKSA/IF9f bWVtc2V0X2dlbmVyaWMoKCgoKGNoYXIgKikgJlBhcmEpKSksKCgoMCkpKSwoKChzaXplb2YoUGFy YSkpKSkpIDogX19tZW1zZXRfZ2VuZXJpYygoKChjaGFyICopICZQYXJhKSksKCgwKSksKChzaXpl b2YoUGFyYSkpKSkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBh cmEuUGFyYTMyWzBdID0gUGh5c1BvcnRJbmRleDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFBhcmEuUGFyYTMyWzFdID0gLTE7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBTa1RpbWVyU3RhcnQocEFDLCBJb0MsICZwQUMtPlBubWkuVmN0VGlt ZW91dFtQaHlzUG9ydEluZGV4XS5WY3RUaW1lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgNDAwMDAwMCwgNCwgMTcsIFBhcmEpOwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKDQpID8gX19j b25zdGFudF9tZW1jcHkoKChjaGFyKikoKHBCdWYgKyBPZmZzZXQpKSksKChjaGFyKikmKFJldENv ZGUpKSwoNCkpIDogX19tZW1jcHkoKChjaGFyKikoKHBCdWYgKyBPZmZzZXQpKSksKChjaGFyKikm KFJldENvZGUpKSwoNCkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFJldENvZGUgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChfX2J1aWx0aW5fY29uc3RhbnRfcCg0KSA/IF9fY29uc3RhbnRfbWVtY3B5 KCgoY2hhciopKChwQnVmICsgT2Zmc2V0KSkpLCgoY2hhciopJihSZXRDb2RlKSksKDQpKSA6IF9f bWVtY3B5KCgoY2hhciopKChwQnVmICsgT2Zmc2V0KSkpLCgoY2hhciopJihSZXRDb2RlKSksKDQp KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXRDb2RlID0gMDsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUmV0Q29kZSA9IDQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9f YnVpbHRpbl9jb25zdGFudF9wKDQpID8gX19jb25zdGFudF9tZW1jcHkoKChjaGFyKikoKHBCdWYg KyBPZmZzZXQpKSksKChjaGFyKikmKFJldENvZGUpKSwoNCkpIDogX19tZW1jcHkoKChjaGFyKiko KHBCdWYgKyBPZmZzZXQpKSksKChjaGFyKikmKFJldENvZGUpKSwoNCkpKTsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBSZXRDb2RlID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAg fQogICAgICAgICAgICAgICAgICAgICAgICBPZmZzZXQgKz0gc2l6ZW9mKHUzMik7CiAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg ICAgICAgICAgICAgICAgICpwTGVuID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu ICgxKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgKnBMZW4gPSBPZmZzZXQ7 CiAgICAgICAgcmV0dXJuIChSZXRDb2RlKTsKCn0KCgpzdGF0aWMgdm9pZCBDaGVja1ZjdFN0YXR1 cygKU0tfQUMgKnBBQywKY2hhciogSW9DLApjaGFyICpwQnVmLAp1MzIgT2Zmc2V0LAp1MzIgUGh5 c1BvcnRJbmRleCkKewogICAgICAgIFNLX0dFUE9SVCAqcFBydDsKICAgICAgICBTS19QTk1JX1ZD VCAqcFZjdERhdGE7CiAgICAgICAgdTMyIFJldENvZGU7CiAgICAgICAgdTggTGlua1NwZWVkVXNl ZDsKCiAgICAgICAgcFBydCA9ICZwQUMtPkdJbmkuR1BbUGh5c1BvcnRJbmRleF07CgogICAgICAg IHBWY3REYXRhID0gKFNLX1BOTUlfVkNUICopIChwQnVmICsgT2Zmc2V0KTsKICAgICAgICBwVmN0 RGF0YS0+VmN0U3RhdHVzID0gMDsKCiAgICAgICAgaWYgKCFwUHJ0LT5QSFdMaW5rVXApIHsKCgog ICAgICAgICAgICAgICAgaWYgKHBBQy0+UG5taS5WY3RTdGF0dXNbUGh5c1BvcnRJbmRleF0gJiA2 NCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHBBQy0+UG5taS5WY3RTdGF0dXNbUGh5 c1BvcnRJbmRleF0gJiAxMjgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFZj dERhdGEtPlZjdFN0YXR1cyB8PSAxOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBW Y3REYXRhLT5WY3RTdGF0dXMgfD0gMjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgfQoKCiAgICAgICAgICAgICAgICBSZXRDb2RlID0gU2tHbUNhYmxlRGlhZ1N0YXR1 cyhwQUMsSW9DLCBQaHlzUG9ydEluZGV4LCAwKTsKICAgICAgICAgICAgICAgIGlmIChSZXRDb2Rl ID09IDIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcFZjdERhdGEtPlZjdFN0YXR1cyB8PSAx NjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAg ICAgICAgICAgICBpZiAocEFDLT5Qbm1pLlZjdFN0YXR1c1tQaHlzUG9ydEluZGV4XSAmIDMyKSB7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFZjdERhdGEtPlZjdFN0YXR1cyB8PSAy OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAg ICAgICAgaWYgKHBQcnQtPlBDYWJsZUxlbiAhPSAweGZmKSB7CiAgICAgICAgICAgICAgICAgICAg ICAgIHBWY3REYXRhLT5WY3RTdGF0dXMgfD0gNDsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9 CiAgICAgICAgZWxzZSB7CgoKICAgICAgICAgICAgICAgIGlmIChwQUMtPlBubWkuVmN0U3RhdHVz W1BoeXNQb3J0SW5kZXhdICYgNjQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcFZjdERhdGEt PlZjdFN0YXR1cyAmPSB+MjsKICAgICAgICAgICAgICAgICAgICAgICAgcFZjdERhdGEtPlZjdFN0 YXR1cyB8PSAxOwogICAgICAgICAgICAgICAgfQoKCiAgICAgICAgICAgICAgICBMaW5rU3BlZWRV c2VkID0gcEFDLT5HSW5pLkdQW1BoeXNQb3J0SW5kZXhdLlBMaW5rU3BlZWRVc2VkOwogICAgICAg ICAgICAgICAgaWYgKExpbmtTcGVlZFVzZWQgIT0gMikgewogICAgICAgICAgICAgICAgICAgICAg ICBwVmN0RGF0YS0+VmN0U3RhdHVzIHw9IDg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoK fQo=