Mail Archives: djgpp-workers/1998/12/23/11:30:18
--=====================_914426891==_
Content-Type: text/plain; charset="us-ascii"
Following Eli Zaretskii proposals I send you
I context diff for
include/debug/dbgcom.h
and
src/debug/common/dbgcom.c
After a question from Hans-Bernhard Broeker ,
I quicky wrote something to enable FPU inspection
this is in two commands :
"info all-registers" will show the current FPU stack if not empty
and
"info float" will print out FPU control and status information !
You can normally change the value of a fpu register, but you can not yet
change the stack ( no push nor pop !)
These fixes explain why also the dbgcom.h is changed !!
(NOTE these are relative to version 2.02 !!)
Concerning the diffs for the GDB sources these are quite big
and are in the second file
(note that this patch has been made by cvs
using cvs rdiff -r official-v4.16-version-of-gdb > allgdb.dif
(the base directory is gnu/gdb-4.16 for patching !
I don't have the whole DJGPP tree on cvs, sorry !)
NOTE : running "make" in gdb-4.16/gdb after my patch will create
gdbpas.exe file (not gdb)
this is because it supports pascal language also (remember that this is
my first goal !)
make gdb.exe will probably fail miserabily !!
Apart from pascal specific stuff,
the following features are modified :
- attempts to read unallowed memory region are stated instead of writing
random values
(in FPC the cs and ds selectors limits are not -1 by default !)
- exceptions are redirected according to cs selector,
this allows gdb to debug itself quite correctly
(One remaining bug is that sometimes the second level program
finished without gdb (level2) cleaning up correctly thus
you get a message like
program ended without ... further excution probably impossible !)
But you can run the same program again without problems
If you wan to try debugging gdb with itself
remember to change the prompt in one level to know very you are if you set
breakpoints inside gdb !!
- xx command
" xx $ss:$esp" will allow you to look at the stack even if outside
program data segment
(this is useful for exceptions mainly !)
I don't garanty you that all works correctly
and I several times froze Windows95 during debugging of gdbpas !!
(One funny thin was that sometimes the was apparently a hardware breakpoint
leftover
from an interrupted gdb session :
this created Trap exceptions in other programs (like GNU ld)
even after closing the Dos window and opening it again !!
Only a restart could remove this trap !!
If anybody uses GPC I would be very interested to know if
debugging works also with this pascal compiler
(I am codevelopper of FPC and I never really had time to try seriously GPC !)
Any comments on my modifications are very welcome, but
please note that I am leaving for chrismas holidays in one hour
and I will touch no computer before january 4th !!
I wish you all a mery chrismas and a happy new year !
--=====================_914426891==_
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: attachment; filename="debug.dif"
*** include/debug/dbgcomh.ori Tue Aug 13 01:08:04 1996
--- include/debug/dbgcom.h Tue Dec 22 13:12:54 1998
***************
*** 23,28 ****
--- 23,46 ----
extern ExternalDebuggerInfo edi;
+ /* structure of FPU env */
+ /* plus space from the FPU stack */
+
+ #define FPU_TOP_MASK 0x3800
+ #define FPU_TOP_SHIFT 11
+
+ typedef struct {
+ unsigned short control,res1,status,res2,tag,res3;
+ unsigned long instofs;
+ unsigned short instsel,opcode;
+ unsigned long operandofs;
+ unsigned short operandsel,res4;
+ char isvalid[8];
+ long double st[8];
+ } FPUEnvironment;
+
+ extern FPUEnvironment fpue;
+
void run_child(void);
int read_child(unsigned child_addr, void *buf, unsigned len);
int write_child(unsigned child_addr, void *buf, unsigned len);
*** src/debug/common/dbgcomc.ori Sun Jun 28 22:37:44 1998
--- src/debug/common/dbgcom.c Wed Dec 23 14:52:46 1998
***************
*** 1,3 ****
--- 1,6 ----
+ /* $Id: dbgcom.c,v 1.3 1998/12/21 11:03:01 pierre Exp $ */
+ /* modified for use with FPC and */
+ /* exception handling support by Pierre Muller */
/* Copyright (C) 1998 DJ Delorie, see COPYING.DJ for details */
/* Copyright (C) 1997 DJ Delorie, see COPYING.DJ for details */
/* Copyright (C) 1996 DJ Delorie, see COPYING.DJ for details */
***************
*** 12,18 ****
#include <go32.h>
#include <signal.h>
#include <setjmp.h>
! #include <debug/dbgcom.h>
#include <sys/exceptn.h>
#include <stubinfo.h>
#include <sys/farptr.h>
--- 15,21 ----
#include <go32.h>
#include <signal.h>
#include <setjmp.h>
! #include /* <debug/dbgcom.h> */ "dbgcom.h"
#include <sys/exceptn.h>
#include <stubinfo.h>
#include <sys/farptr.h>
***************
*** 25,35 ****
--- 28,65 ----
#define MEM_HANDLE_COUNT 256
#define DESCRIPTOR_COUNT 128
#define DOS_DESCRIPTOR_COUNT 128
+ #define DPMI_EXCEPTION_COUNT 18
+
+ #define USE_FSEXT
+ #define CLOSE_UNREGISTERED_FILES
+
+ #ifdef FPC
+ #undef CLOSE_UNREGISTERED_FILES
+ #endif
+ /* debug splitted into 3 parts */
+ #define DEBUG_ALL_DBGCOM
+
+ #ifdef DEBUG_ALL_DBGCOM
+ /* general debug infos */
+ #define DEBUG_DBGCOM
+ /* files open/close infos */
+ #define DEBUG_DBGCOM_FILES
+ /* exceptions infos */
+ #define DEBUG_EXCEPTIONS
+ #endif /* DEBUG_ALL_DBGCOM */
long mem_handles[MEM_HANDLE_COUNT];
unsigned short descriptors[DESCRIPTOR_COUNT];
unsigned short dos_descriptors[DOS_DESCRIPTOR_COUNT];
+ /* these all need to be static because
+ ss can be different from ds in dbgsig !! */
+ static int excep_stack[1000];
+ static int errcode,cs,eflags,eip,ss,esp,ret_cs,ret_eip;
+ static void *cur_pos;
+ static int child_exception_level;
+
+
/* ARGSUSED */
char **
__crt0_glob_function(char *foo)
***************
*** 40,52 ****
ExternalDebuggerInfo edi;
TSS a_tss;
static jmp_buf jumper;
! static int my_ds,my_cs,app_cs;
static jmp_buf load_state;
static int nset, breakhandle[4];
static int _DPMIsetBreak(unsigned short sizetype, unsigned vaddr)
{
int handle;
--- 70,151 ----
ExternalDebuggerInfo edi;
TSS a_tss;
+ FPUEnvironment fpue;
+
static jmp_buf jumper;
! static int my_ds,my_cs,app_cs,app_exit_cs,app_ds;
static jmp_buf load_state;
static int nset, breakhandle[4];
+ static __dpmi_paddr our_handler[DPMI_EXCEPTION_COUNT],app_handler[DPMI_EXCEPTION_COUNT];
+
+ #ifdef DEBUG_EXCEPTIONS
+ typedef
+ struct {
+ short excp_cs;
+ int excp_eip;
+ short excp_nb;
+ } texcp_info;
+
+ static texcp_info excp_info[20];
+ static int excp_index;
+ static int excp_count;
+ static int redir_excp_count;
+ #endif
+
+ static void store_fpu_env (void)
+ {
+ unsigned char top;
+ int i;
+ int valid_nb = 0;
+ long double d;
+ asm("fstenv %0" : "=g" (fpue));
+ top = (fpue.status & FPU_TOP_MASK) >> FPU_TOP_SHIFT;
+ for (i=0;i<8;i++)
+ {
+ /* tag is a array of 8 2 bits that contain info about FPU registers
+ st(0) is register(top) and st(1) is register (top+1) ... */
+ fpue.isvalid[i] = ((fpue.tag >> ((((8+top)+i) & 7) << 1)) & 3) != 3;
+ }
+ /* to store the fpu registers we use fstpt and push them again after */
+ /* this code assumes that the only valid regs are
+ from top to base, is this allways true ?
+ for me it is the very definition of a stack */
+ for (i=0;i<8;i++)
+ if (fpue.isvalid[i])
+ {
+ asm("fstpt %0" : "=g" (d));
+ fpue.st[i]=d;
+ }
+ for (i=7;i>=0;i--)
+ if (fpue.isvalid[i])
+ {
+ d=fpue.st[i];
+ asm("fldt %0" : : "g" (d));
+ }
+ }
+
+ static void restore_fpu_env (void)
+ {
+ int i;
+ long double d;
+ /* to store the fpu registers we use fstpt and push them again after */
+ for (i=0;i<8;i++)
+ if (fpue.isvalid[i])
+ {
+ asm("fstpt %0" : "=g" (d));
+ }
+ for (i=7;i>=0;i--)
+ if (fpue.isvalid[i])
+ {
+ d=fpue.st[i];
+ asm("fldt %0" : : "g" (d));
+ }
+ asm("fldenv %0" : : "g" (fpue));
+ }
+
static int _DPMIsetBreak(unsigned short sizetype, unsigned vaddr)
{
int handle;
***************
*** 145,156 ****
edi.dr[6] = bt;
}
! static __dpmi_paddr old_i31,old_i21;
static int user_int_set = 0;
static __dpmi_paddr my_i9,user_i9,my_i8,user_i8;
static void hook_dpmi(void)
{
__dpmi_paddr new_int;
extern void i21_hook(void),i31_hook(void);
--- 244,256 ----
edi.dr[6] = bt;
}
! static __dpmi_paddr old_i31,old_i21,user_i31,user_i21;
static int user_int_set = 0;
static __dpmi_paddr my_i9,user_i9,my_i8,user_i8;
static void hook_dpmi(void)
{
+ int i;
__dpmi_paddr new_int;
extern void i21_hook(void),i31_hook(void);
***************
*** 172,180 ****
--- 272,367 ----
{
__dpmi_set_protected_mode_interrupt_vector(0x09, &user_i9);
__dpmi_set_protected_mode_interrupt_vector(0x08, &user_i8);
+ __dpmi_set_protected_mode_interrupt_vector(0x21, &user_i21);
+ __dpmi_set_protected_mode_interrupt_vector(0x31, &user_i31);
+ }
+ for (i=0;i<DPMI_EXCEPTION_COUNT;i++)
+ {
+ __dpmi_get_processor_exception_handler_vector(i,&our_handler[i]);
+ /*
+ if (app_handler[i].offset32 && app_handler[i].selector)
+ __dpmi_set_processor_exception_handler_vector(i,&app_handler[i]);
+ */
}
}
+ /* Set an exception handler */
+ /* stores it into app_handler if selector is app_cs */
+
+ asm("\n\
+ .text \n\
+ .align 2,0x90 \n\
+ _change_exception_handler: \n\
+ pushl %eax \n\
+ push %es \n\
+ push %ds \n\
+ .byte 0x2e \n\
+ movw _my_ds,%ax \n\
+ movw %ax,%ds \n\
+ movw %ax,%es \n\
+ movzbl %bl,%eax \n\
+ imull $8,%eax \n\
+ addl $_app_handler,%eax /* only retain handlers */ \n\
+ cmpw _app_cs,%cx /* for the main app */ \n\
+ jne _not_in_current_app \n\
+ movl %ecx,4(%eax) \n\
+ movl %edx,(%eax) \n\
+ _not_in_current_app: \n\
+ subl $_app_handler,%eax /* allways restore our handler */ \n\
+ addl $_our_handler,%eax \n\
+ movl 4(%eax),%ecx \n\
+ movl (%eax),%edx \n\
+ pop %ds \n\
+ pop %es \n\
+ popl %eax \n\
+ ret \n"
+ );
+
+ /* Get an exception handler */
+ /* (returns app_handler if set disabled because creates problems (PM)) */
+
+ asm("\n\
+ .text \n\
+ .align 2,0x90 \n\
+ _get_exception_handler: \n\
+ .byte 0x2e \n\
+ ljmp _old_i31 \n\
+ ");
+
+ /* this creates problems ! WHY ??
+ asm("\n\
+ .text \n\
+ .align 2,0x90 \n\
+ _get_exception_handler: \n\
+ pushl %eax \n\
+ push %es \n\
+ push %ds \n\
+ .byte 0x2e \n\
+ movw _my_ds,%ax \n\
+ movw %ax,%ds \n\
+ movw %ax,%es \n\
+ movzbl %bl,%eax \n\
+ imull $8,%eax \n\
+ addl $_app_handler,%eax only retain handlers \n\
+ cmpw $0,4(%eax) for the main app \n\
+ je _app_exception_not_set \n\
+ cmpl $0,(%eax) \n\
+ je _app_exception_not_set \n\
+ movl (%eax),%edx \n\
+ movw 4(%eax),%cx \n\
+ pop %ds \n\
+ pop %es \n\
+ popl %eax \n\
+ ret \n\
+ _app_exception_not_set: \n\
+ pop %ds \n\
+ pop %es \n\
+ popl %eax \n\
+ .byte 0x2e \n\
+ ljmp _old_i31 \n\
+ ret \n"
+ ); */
+
/* Change a handle in the list: EAX is the old handle, EDX is the new */
/* for changing a value, we need our ds, because cs has no write access */
asm( "\n\
***************
*** 300,314 ****
/* Watch set selector base, if it is __djgpp_app_DS then reset breakpoints */
! /* Watch the following DPMI-functions: (added by RH)
0x0000 : __dpmi_allocate_ldt_descriptors
0x0001 : __dpmi_free_ldt_descriptor
0x000A : __dpmi_create_alias_descriptor
0x0100 : __dpmi_allocate_dos_memory
0x0101 : __dpmi_free_dos_memory
0x0501 : __dpmi_allocate_memory
0x0501 : __dpmi_free_memory
0x0503 : __dpmi_resize_memory
--- 487,516 ----
/* Watch set selector base, if it is __djgpp_app_DS then reset breakpoints */
! /* Watch the following DPMI-functions: (added by RH) (some by PM)
0x0000 : __dpmi_allocate_ldt_descriptors
0x0001 : __dpmi_free_ldt_descriptor
+ 0x0007 : __dpmi_set_selector_base_address
+ hooked because the hardware breakpoints need to be reset
+ if we change the base address of __djgpp_app_DS
0x000A : __dpmi_create_alias_descriptor
0x0100 : __dpmi_allocate_dos_memory
0x0101 : __dpmi_free_dos_memory
+ 0x0202 : __dpmi_get_processor_exception_handler_vector
+ 0x0203 : __dpmi_set_processor_exception_handler_vector
+ 0x0205 : __dpmi_set_protected_mode_interrupt
+ (int 0x09 and 0x75 rejected)
+ Ctrl-C will thus create a SIGINT in the top level
+ program but cont will directly return to
+ the code before interruption no matter at which level)
+ (passing to next would be possible but then we would get a
+ interruption in all levels !!)
+ 0x0210 : __dpmi_get_extended_exception_handler_vector_pm
+ 0x0212 : __dpmi_set_extended_exception_handler_vector_pm
+
0x0501 : __dpmi_allocate_memory
0x0501 : __dpmi_free_memory
0x0503 : __dpmi_resize_memory
***************
*** 317,356 ****
asm( "\n\
.text \n\
.align 2,0x90 \n\
_i31_hook: \n\
cmpw $0x0000,%ax \n\
je Lc31_alloc_descriptors \n\
cmpw $0x0001,%ax \n\
je Lc31_free_descriptor \n\
cmpw $0x000A,%ax \n\
je Lc31_create_alias_descriptor \n\
cmpw $0x0100,%ax \n\
je Lc31_allocate_dos_memory \n\
cmpw $0x0101,%ax \n\
je Lc31_free_dos_memory \n\
cmpw $0x0501,%ax \n\
je Lc31_alloc_mem \n\
cmpw $0x0502,%ax \n\
je Lc31_free_mem \n\
cmpw $0x0503,%ax \n\
je Lc31_resize_mem \n\
! cmpw $0x0203,%ax \n\
! je Lc31a \n\
! cmpw $0x0007,%ax \n\
! je Lc31b \n\
! cmpw $0x0205,%ax \n\
! je Lc31d \n\
! Lc31c: .byte 0x2e \n\
ljmp _old_i31 \n\
! Lc31a_: pushl %eax \n\
pushf \n\
popl %eax /* store the right flags for iret */ \n\
movl %eax,12(%esp) \n\
popl %eax \n\
! Lc31a: iret \n\
! Lc31b: .byte 0x2e \n\
cmpw ___djgpp_app_DS,%bx \n\
! jne Lc31c \n\
pushf \n\
.byte 0x2e \n\
lcall _old_i31 \n\
--- 519,570 ----
asm( "\n\
.text \n\
.align 2,0x90 \n\
+ .globl _dbgcom_hook_i31 \n\
+ _dbgcom_hook_i31: \n\
_i31_hook: \n\
cmpw $0x0000,%ax \n\
je Lc31_alloc_descriptors \n\
cmpw $0x0001,%ax \n\
je Lc31_free_descriptor \n\
+ cmpw $0x0007,%ax \n\
+ je Lc31_set_selector_base_address \n\
cmpw $0x000A,%ax \n\
je Lc31_create_alias_descriptor \n\
cmpw $0x0100,%ax \n\
je Lc31_allocate_dos_memory \n\
cmpw $0x0101,%ax \n\
je Lc31_free_dos_memory \n\
+ cmpw $0x0202,%ax \n\
+ je _get_exception_handler \n\
+ cmpw $0x0203,%ax \n\
+ je Lc31_set_exception_handler \n\
+ cmpw $0x0205,%ax \n\
+ je Lc31_set_protected_mode_interrupt \n\
+ cmpw $0x0210,%ax \n\
+ je _get_exception_handler \n\
+ cmpw $0x0212,%ax \n\
+ je Lc31_set_exception_handler \n\
cmpw $0x0501,%ax \n\
je Lc31_alloc_mem \n\
cmpw $0x0502,%ax \n\
je Lc31_free_mem \n\
cmpw $0x0503,%ax \n\
je Lc31_resize_mem \n\
! L_jmp_to_old_i31: \n\
! .byte 0x2e \n\
ljmp _old_i31 \n\
! Lc31_set_flags_and_iret: \n\
! pushl %eax \n\
pushf \n\
popl %eax /* store the right flags for iret */ \n\
movl %eax,12(%esp) \n\
popl %eax \n\
! Lc31_iret: \n\
! iret \n\
! Lc31_set_selector_base_address: \n\
! .byte 0x2e \n\
cmpw ___djgpp_app_DS,%bx \n\
! jne L_jmp_to_old_i31 \n\
pushf \n\
.byte 0x2e \n\
lcall _old_i31 \n\
***************
*** 361,374 ****
pushl (%eax) \n\
pushl %eax \n\
call _longjmp \n\
! Lc31d: cmpb $0x75,%bl \n\
! je Lc31a \n\
! jmp Lc31c \n\
Lc31_alloc_mem: \n\
pushf \n\
.byte 0x2e \n\
lcall _old_i31 \n\
! jc Lc31a_ \n\
pushf \n\
pushl %edx \n\
pushw %si \n\
--- 575,591 ----
pushl (%eax) \n\
pushl %eax \n\
call _longjmp \n\
! Lc31_set_protected_mode_interrupt: \n\
! cmpb $0x75,%bl \n\
! je Lc31_iret \n\
! cmpb $0x09,%bl \n\
! je Lc31_iret \n\
! jmp L_jmp_to_old_i31 \n\
Lc31_alloc_mem: \n\
pushf \n\
.byte 0x2e \n\
lcall _old_i31 \n\
! jc Lc31_set_flags_and_iret \n\
pushf \n\
pushl %edx \n\
pushw %si \n\
***************
*** 379,385 ****
popl %edx \n\
popf \n\
clc \n\
! jmp Lc31a_ \n\
Lc31_free_mem: \n\
pushw %si \n\
pushw %di \n\
--- 596,602 ----
popl %edx \n\
popf \n\
clc \n\
! jmp Lc31_set_flags_and_iret \n\
Lc31_free_mem: \n\
pushw %si \n\
pushw %di \n\
***************
*** 391,397 ****
xorl %edx,%edx \n\
call _change_handle \n\
xorl %eax,%eax \n\
! jmp Lc31a_ \n\
Lc31_resize_mem: \n\
pushw %si \n\
pushw %di \n\
--- 608,614 ----
xorl %edx,%edx \n\
call _change_handle \n\
xorl %eax,%eax \n\
! jmp Lc31_set_flags_and_iret \n\
Lc31_resize_mem: \n\
pushw %si \n\
pushw %di \n\
***************
*** 402,408 ****
Lc31_resize_mem_error: \n\
addl $4,%esp \n\
stc \n\
! jmp Lc31a_ \n\
Lc31_resize_mem_ok: \n\
popl %eax \n\
pushw %si \n\
--- 619,625 ----
Lc31_resize_mem_error: \n\
addl $4,%esp \n\
stc \n\
! jmp Lc31_set_flags_and_iret \n\
Lc31_resize_mem_ok: \n\
popl %eax \n\
pushw %si \n\
***************
*** 410,483 ****
popl %edx \n\
call _change_handle \n\
xorl %eax,%eax \n\
! jmp Lc31a_ \n\
Lc31_alloc_descriptors: \n\
pushl %ecx \n\
pushf \n\
.byte 0x2e \n\
lcall _old_i31 \n\
popl %ecx \n\
! jc Lc31a_ \n\
call _add_descriptors \n\
clc \n\
! jmp Lc31a_ \n\
Lc31_free_descriptor: \n\
pushl %ebx \n\
pushf \n\
.byte 0x2e \n\
lcall _old_i31 \n\
! popl %edx \n\
! jc Lc31a_ \n\
! xorw %ax,%ax \n\
call _change_descriptor \n\
clc \n\
! jmp Lc31a_ \n\
Lc31_create_alias_descriptor: \n\
pushf \n\
.byte 0x2e \n\
lcall _old_i31 \n\
! jc Lc31a_ \n\
pushl %eax \n\
movw %ax,%dx \n\
xorw %ax,%ax \n\
call _change_descriptor \n\
popl %eax \n\
clc \n\
! jmp Lc31a_ \n\
Lc31_allocate_dos_memory: \n\
pushf \n\
.byte 0x2e \n\
lcall _old_i31 \n\
! jc Lc31a_ \n\
pushl %eax \n\
xorl %eax,%eax \n\
call _change_dos_descriptor \n\
popl %eax \n\
clc \n\
! jmp Lc31a_ \n\
Lc31_free_dos_memory: \n\
pushl %edx \n\
pushf \n\
.byte 0x2e \n\
lcall _old_i31 \n\
popl %eax \n\
! jc Lc31a_ \n\
xorw %dx,%dx \n\
call _change_dos_descriptor \n\
clc \n\
! jmp Lc31a_ \n\
.align 2,0x90 \n\
_i21_hook: \n\
cmpb $0x4c,%ah \n\
je Lc21 \n\
! Lc21j: .byte 0x2e \n\
ljmp _old_i21 \n\
Lc21: push %eax \n\
movl 8(%esp),%eax \n\
cs \n\
! cmpw _app_cs,%ax \n\
pop %eax \n\
! jg Lc21j \n\
call ___djgpp_save_interrupt_regs \n\
movl ___djgpp_exception_state_ptr,%esi \n\
movl $0x21,56(%esi) \n\
--- 627,721 ----
popl %edx \n\
call _change_handle \n\
xorl %eax,%eax \n\
! jmp Lc31_set_flags_and_iret \n\
Lc31_alloc_descriptors: \n\
pushl %ecx \n\
pushf \n\
.byte 0x2e \n\
lcall _old_i31 \n\
popl %ecx \n\
! jc Lc31_set_flags_and_iret \n\
call _add_descriptors \n\
clc \n\
! jmp Lc31_set_flags_and_iret \n\
Lc31_free_descriptor: \n\
pushl %ebx \n\
pushf \n\
.byte 0x2e \n\
lcall _old_i31 \n\
! popl %eax \n\
! jc Lc31_set_flags_and_iret \n\
! xorw %dx,%dx \n\
call _change_descriptor \n\
clc \n\
! jmp Lc31_set_flags_and_iret \n\
Lc31_create_alias_descriptor: \n\
pushf \n\
.byte 0x2e \n\
lcall _old_i31 \n\
! jc Lc31_set_flags_and_iret \n\
pushl %eax \n\
movw %ax,%dx \n\
xorw %ax,%ax \n\
call _change_descriptor \n\
popl %eax \n\
clc \n\
! jmp Lc31_set_flags_and_iret \n\
Lc31_allocate_dos_memory: \n\
pushf \n\
.byte 0x2e \n\
lcall _old_i31 \n\
! jc Lc31_set_flags_and_iret \n\
pushl %eax \n\
xorl %eax,%eax \n\
call _change_dos_descriptor \n\
popl %eax \n\
clc \n\
! jmp Lc31_set_flags_and_iret \n\
Lc31_free_dos_memory: \n\
pushl %edx \n\
pushf \n\
.byte 0x2e \n\
lcall _old_i31 \n\
popl %eax \n\
! jc Lc31_set_flags_and_iret \n\
xorw %dx,%dx \n\
call _change_dos_descriptor \n\
clc \n\
! jmp Lc31_set_flags_and_iret \n\
! Lc31_set_exception_handler: \n\
! pushl %eax \n\
! pushl %ebx \n\
! pushl %ecx \n\
! pushl %edx \n\
! pushf \n\
! .byte 0x2e \n\
! lcall _old_i31 \n\
! jc Lc31_set_flags_and_iret \n\
! popl %edx \n\
! popl %ecx \n\
! popl %ebx \n\
! popl %eax \n\
! call _change_exception_handler \n\
! pushf \n\
! .byte 0x2e \n\
! lcall _old_i31 \n\
! jmp Lc31_set_flags_and_iret \n\
.align 2,0x90 \n\
+ .globl _dbgcom_hook_i21 \n\
+ _dbgcom_hook_i21: \n\
_i21_hook: \n\
cmpb $0x4c,%ah \n\
je Lc21 \n\
! Lc21_jmp_to_old: \n\
! .byte 0x2e \n\
ljmp _old_i21 \n\
Lc21: push %eax \n\
movl 8(%esp),%eax \n\
cs \n\
! cmpw _app_exit_cs,%ax \n\
pop %eax \n\
! jne Lc21_jmp_to_old \n\
call ___djgpp_save_interrupt_regs \n\
movl ___djgpp_exception_state_ptr,%esi \n\
movl $0x21,56(%esi) \n\
***************
*** 495,502 ****
--- 733,753 ----
.byte 0x64 \n\
movw $0x7021,0xb0f00 \n\ */
+ /* simple code to return from an exception */
+ asm ( ".text
+ .align 2,0x90
+ _exception_return: /* remove errorcode from stack */
+ addl $4,%esp
+ lret
+ ");
+
static void unhook_dpmi(void)
{
+ int i;
+ /* save app i31 and i21 if changed */
+ __dpmi_get_protected_mode_interrupt_vector(0x31, &user_i31);
+ __dpmi_get_protected_mode_interrupt_vector(0x21, &user_i21);
+ /* restore i31 and i21 */
__dpmi_set_protected_mode_interrupt_vector(0x31, &old_i31);
__dpmi_set_protected_mode_interrupt_vector(0x21, &old_i21);
***************
*** 511,524 ****
/* Now restore our interrupt vectors */
__dpmi_set_protected_mode_interrupt_vector(0x09, &my_i9);
__dpmi_set_protected_mode_interrupt_vector(0x08, &my_i8);
}
static void dbgsig(int sig)
{
! if(__djgpp_exception_state->__cs != my_cs || sig == SIGTRAP) {
*load_state = *__djgpp_exception_state; /* exception was in other process */
longjmp(jumper, 1);
}
}
void run_child(void)
--- 762,859 ----
/* Now restore our interrupt vectors */
__dpmi_set_protected_mode_interrupt_vector(0x09, &my_i9);
__dpmi_set_protected_mode_interrupt_vector(0x08, &my_i8);
+ for (i=0;i<DPMI_EXCEPTION_COUNT;i++)
+ {
+ if (i!=2)
+ __dpmi_set_processor_exception_handler_vector(i,&our_handler[i]);
+ }
}
static void dbgsig(int sig)
{
! #ifdef DEBUG_EXCEPTIONS
! excp_info[excp_index].excp_eip=__djgpp_exception_state->__eip;
! excp_info[excp_index].excp_cs=__djgpp_exception_state->__cs;
! excp_info[excp_index].excp_nb=__djgpp_exception_state->__signum;
! excp_index++;
! excp_count++;
! if (excp_index==20)
! excp_index=0;
! #endif
! if(__djgpp_exception_state->__cs == app_cs /* || sig == SIGTRAP */)
! {
*load_state = *__djgpp_exception_state; /* exception was in other process */
longjmp(jumper, 1);
}
+ else
+ {
+ extern int invalid_sel_addr(short sel, unsigned a, unsigned len, char for_write);
+
+ int signum = __djgpp_exception_state->__signum;
+ if (
+ (app_handler[signum].offset32) &&
+ (app_handler[signum].selector) &&
+ !invalid_sel_addr(app_handler[signum].selector,
+ app_handler[signum].offset32,1,0) &&
+ ((app_handler[signum].offset32 !=
+ our_handler[signum].offset32) ||
+ (app_handler[signum].selector !=
+ our_handler[signum].selector)))
+ {
+ extern void exception_return(void);
+ #ifdef DEBUG_EXCEPTIONS
+ redir_excp_count++;
+ #endif
+ *load_state = *__djgpp_exception_state; /* exception was in other process */
+ eip = load_state->__eip;
+ cs = load_state->__cs;
+ esp = load_state->__esp;
+ /* reset the debug trace bit */
+ /* we should only do this under certain specific conditions
+ but which ones ?? */
+ eflags = load_state->__eflags;
+ /* if (signum!=1)
+ eflags &= 0xfffffeff; */
+ /* we don't want to step inside the exception_table code */
+ load_state->__eflags &= 0xfffffeff;
+ ss = load_state->__ss;
+ errcode = load_state->__sigmask;
+ load_state->__eip=app_handler[signum].offset32;
+ load_state->__cs=app_handler[signum].selector;
+ /* use our own exception stack */
+ child_exception_level++;
+ memset(&excep_stack,0xAB,sizeof(excep_stack));
+ cur_pos = &excep_stack[1000-40];
+ cur_pos -= 8*4;
+ load_state->__ss = my_ds;
+ load_state->__esp= (int) cur_pos;
+ /* where to return */
+ ret_cs = my_cs;
+ ret_eip = (int) &exception_return;
+ memcpy(cur_pos,&ret_eip,4);
+ cur_pos+=4;
+ memcpy(cur_pos,&ret_cs,4);
+ cur_pos+=4;
+ memcpy(cur_pos,&errcode,4);
+ cur_pos+=4;
+ memcpy(cur_pos,&eip,4);
+ cur_pos+=4;
+ memcpy(cur_pos,&cs,4);
+ cur_pos+=4;
+ memcpy(cur_pos,&eflags,4);
+ cur_pos+=4;
+ memcpy(cur_pos,&esp,4);
+ cur_pos+=4;
+ memcpy(cur_pos,&ss,4);
+ cur_pos+=4;
+ longjmp(load_state, load_state->__eax);
+ }
+ /* else
+ {
+ *load_state = *__djgpp_exception_state;
+ longjmp(jumper, 1);
+ } */
+ }
}
void run_child(void)
***************
*** 543,548 ****
--- 878,884 ----
/* jump to tss */
_set_break_DPMI();
hook_dpmi();
+ restore_fpu_env();
longjmp(load_state, load_state->__eax);
/* we never return here, execption routine will longjump */
}
***************
*** 565,570 ****
--- 901,907 ----
a_tss.tss_ebp = load_state->__ebp;
a_tss.tss_irqn = load_state->__signum;
a_tss.tss_error = load_state->__sigmask;
+ store_fpu_env();
unhook_dpmi();
_clear_break_DPMI();
}
***************
*** 604,609 ****
--- 941,1007 ----
return 0;
}
+ int invalid_sel_addr(short sel, unsigned a, unsigned len, char for_write)
+ {
+ /* Here we assume expand up writable code. We could check the rights to
+ be sure, but that's a waste unless *_child routines fixed to know about
+ different selectors. */
+
+ unsigned limit;
+ char read_allowed = 0;
+ char write_allowed = 0;
+
+ asm("
+ movw %2,%%ax
+ verr %%ax
+ jnz .Ldoes_not_has_read_right
+ movb $1,%0
+ .Ldoes_not_has_read_right:
+ verrw %%ax
+ jnz .Ldoes_not_has_write_right
+ movb $1,%1
+ .Ldoes_not_has_write_right: "
+ : "=g" (read_allowed), "=g" (write_allowed)
+ : "g" (sel)
+ );
+ if (for_write)
+ {
+ if (!write_allowed)
+ return 1;
+ }
+ else
+ if (!read_allowed)
+ return 1;
+
+ limit = __dpmi_get_segment_limit(sel);
+ /* some selectors don't have zero page protection
+ like the protected interrupt stack */
+ if(/*a >= 4096 && */ (a+len-1) <= limit)
+ return 0;
+ /* printf("Invalid access to child, address %#x length %#x limit: %#x\n", a, len, limit);
+ if (can_longjmp)
+ longjmp(debugger_jmpbuf, 1); */
+ return 1;
+ }
+
+ int read_sel_addr(unsigned child_addr, void *buf, unsigned len, unsigned sel)
+ {
+ /* first clear memory */
+ memcpy(buf,0,len);
+ if (invalid_sel_addr(sel, child_addr, len, 0))
+ return 1;
+ movedata(sel, child_addr, my_ds, (int)buf, len);
+ return 0;
+ }
+
+ int write_sel_addr(unsigned sel, unsigned child_addr, void *buf, unsigned len)
+ {
+ if (invalid_sel_addr(sel, child_addr, len, 1))
+ return 1;
+ movedata(my_ds, (int)buf, sel, child_addr, len);
+ return 0;
+ }
+
static _GO32_StubInfo si;
static void (*oldTRAP)(int);
***************
*** 613,623 ****
--- 1011,1027 ----
void edi_init(jmp_buf start_state)
{
+ int i;
my_ds = 0;
asm("mov %%ds,%0" : "=g" (my_ds) );
my_cs = 0;
asm("mov %%cs,%0" : "=g" (my_cs) );
+ for (i=0;i<DPMI_EXCEPTION_COUNT;i++)
+ {
+ app_handler[i].offset32 = 0;
+ app_handler[i].selector = 0;
+ }
*load_state = *start_state;
a_tss.tss_cs = load_state->__cs;
a_tss.tss_ss = load_state->__ss;
***************
*** 632,637 ****
--- 1036,1042 ----
__djgpp_app_DS = a_tss.tss_ds;
app_cs = a_tss.tss_cs;
edi.app_base = 0;
+ memset(&fpue,0,sizeof(fpue));
/* Save all the changed signal handlers */
oldTRAP = signal(SIGTRAP, dbgsig);
oldSEGV = signal(SIGSEGV, dbgsig);
***************
*** 645,650 ****
--- 1050,1056 ----
descriptors[1] = si.ds_selector;
descriptors[2] = __djgpp_app_DS;
descriptors[3] = app_cs;
+ app_exit_cs=si.cs_selector;
memset(dos_descriptors,0,sizeof(dos_descriptors));
dos_descriptors[0] = _farpeekw(si.psp_selector,0x2c);
dos_descriptors[1] = si.psp_selector;
***************
*** 656,664 ****
--- 1062,1110 ----
{
int i;
+ /* restore __djgpp_app_DS for Ctrl-C !! */
+ __djgpp_app_DS = __djgpp_our_DS;
+ #ifdef DEBUG_EXCEPTIONS
+ fprintf(stderr,"excp_count = %d\n",excp_count);
+ fprintf(stderr,"redir_excp_count = %d\n",redir_excp_count);
+ fprintf(stderr,"excp_index = %d\n",excp_index);
+ fprintf(stderr,"app_cs %04x\tapp_ds %04x\n",app_cs,app_ds);
+ fprintf(stderr,"my_cs %04x\tmy_ds %04x\n",my_cs,my_ds);
+ for (i=0;i<excp_count;i++)
+ {
+ fprintf(stderr," excep %04x:%08x\tsignal %08x\n",
+ excp_info[i].excp_cs,
+ excp_info[i].excp_eip,
+ excp_info[i].excp_nb);
+ excp_info[i].excp_eip=0;
+ excp_info[i].excp_cs=0;
+ excp_info[i].excp_nb=0;
+ }
+ excp_count=0;
+ redir_excp_count=0;
+ excp_index=0;
+ for (i=0;i<DPMI_EXCEPTION_COUNT;i++)
+ {
+ fprintf(stderr," app %d handler = %04x:%08lx\n",
+ i,app_handler[i].selector,app_handler[i].offset32);
+ }
+ for (i=0;i<DESCRIPTOR_COUNT;i++)
+ {
+ if (descriptors[i])
+ {
+ fprintf(stderr,"used descriptor: %08x\n",descriptors[i]);
+ }
+ }
+ #endif
+ for (i=0;i<DPMI_EXCEPTION_COUNT;i++)
+ {
+ app_handler[i].offset32 = 0;
+ app_handler[i].selector = 0;
+ }
/* Set the flag, that the user interrupt vectors are no longer valid */
user_int_set = 0;
+ memset(&fpue,0,sizeof(fpue));
/* Close all handles, which may be left open */
close_handles();
for (i=0;i<DOS_DESCRIPTOR_COUNT;i++)
***************
*** 698,703 ****
--- 1144,1156 ----
signal(SIGINT, oldINT);
}
+ #ifndef USE_FSEXT
+
+ static void close_handles(void)
+ {
+ }
+
+ #else /* USE_FSEXT */
/*
Now the FSEXT function for watching files being opened. This is needed,
because the debuggee can open files which are not closed and if you
***************
*** 747,756 ****
&& handles[handle] == 0xff /* but not recorded by the fsext function */
)
{ /* it was opened by the debuggee */
! #ifdef DEBUG_DBGCOM
fprintf(stderr,"closing %d\n",handle);
#endif
_close(handle);
}
}
--- 1200,1215 ----
&& handles[handle] == 0xff /* but not recorded by the fsext function */
)
{ /* it was opened by the debuggee */
! #ifdef CLOSE_UNREGISTERED_FILES
! #ifdef DEBUG_DBGCOM_FILES
fprintf(stderr,"closing %d\n",handle);
#endif
_close(handle);
+ #else /* not CLOSE_UNREGISTERED_FILES */
+ #ifdef DEBUG_DBGCOM_FILES
+ fprintf(stderr,"unknown open file %d\n",handle);
+ #endif
+ #endif /* CLOSE_UNREGISTERED_FILES */
}
}
***************
*** 775,782 ****
attrib = va_arg(_args,int);
in_dbg_fsext++;
retval = _creat(filename,attrib);
! #ifdef DEBUG_DBGCOM
! fprintf(stderr,"_creat() => %d\n",retval);
#endif
in_dbg_fsext--;
if (retval != -1)
--- 1234,1241 ----
attrib = va_arg(_args,int);
in_dbg_fsext++;
retval = _creat(filename,attrib);
! #ifdef DEBUG_DBGCOM_FILES
! fprintf(stderr,"_creat(%s) => %d\n",filename,retval);
#endif
in_dbg_fsext--;
if (retval != -1)
***************
*** 790,796 ****
oflag = va_arg(_args,int);
in_dbg_fsext++;
retval = _open(filename,oflag);
! #ifdef DEBUG_DBGCOM
fprintf(stderr,"_open(%s) => %d\n",filename,retval);
#endif
in_dbg_fsext--;
--- 1249,1255 ----
oflag = va_arg(_args,int);
in_dbg_fsext++;
retval = _open(filename,oflag);
! #ifdef DEBUG_DBGCOM_FILES
fprintf(stderr,"_open(%s) => %d\n",filename,retval);
#endif
in_dbg_fsext--;
***************
*** 803,809 ****
case __FSEXT_close:
handle = va_arg(_args,int);
in_dbg_fsext++;
! #ifdef DEBUG_DBGCOM
fprintf(stderr,"_close(%d)\n",handle);
#endif
retval = _close(handle);
--- 1262,1268 ----
case __FSEXT_close:
handle = va_arg(_args,int);
in_dbg_fsext++;
! #ifdef DEBUG_DBGCOM_FILES
fprintf(stderr,"_close(%d)\n",handle);
#endif
retval = _close(handle);
***************
*** 853,855 ****
--- 1312,1322 ----
/* enable the fsext function */
in_dbg_fsext = 0;
}
+ #endif /* def USE_FSEXT */
+
+ /*
+ $Log: dbgcom.c,v $
+ Revision 1.3 1998/12/21 11:03:01 pierre
+ * problems of FSEXT_dbg solved
+
+ */
\ No newline at end of file
--=====================_914426891==_
Content-Type: application/octet-stream; name="gdbdif.dif";
x-mac-type="42494E41"; x-mac-creator="5843454C"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="gdbdif.dif"
SW5kZXg6IGdkYi9jLXR5cGVwci5jDQpkaWZmIC1jIGdkYi9jLXR5cGVwci5jOjEuMS4xLjEgZ2Ri
L2MtdHlwZXByLmM6MS4yDQoqKiogZ2RiL2MtdHlwZXByLmM6MS4xLjEuMQlGcmkgRGVjIDA0IDEw
OjUxOjAyIDE5OTgNCi0tLSBnZGIvYy10eXBlcHIuYwlGcmkgRGVjIDA0IDExOjMxOjM0IDE5OTgN
CioqKioqKioqKioqKioqKg0KKioqIDg1LDkwICoqKioNCi0tLSA4NSwxMDAgLS0tLQ0KICAgICAg
ICB0eXBlX3ByaW50KHR5cGUsIiIsc3RyZWFtLDApOw0KICAgICAgICBicmVhazsNCiAgI2VuZGlm
DQorICNpZmRlZiBfTEFOR19wYXNjYWwNCisgICAgY2FzZSBsYW5ndWFnZV9wYXNjYWw6DQorICAg
ICAgIGZwcmludGZfZmlsdGVyZWQoc3RyZWFtLCAiVHlwZSAiKTsNCisgICAgICAgaWYgKChTWU1C
T0xfU09VUkNFX05BTUUobmV3KSAhPSAwKSAmJg0KKyAgICAgICAgICAoKFRZUEVfTkFNRSAoKFNZ
TUJPTF9UWVBFIChuZXcpKSkgPT0gMA0KKyAJIHx8ICFTVFJFUSAoVFlQRV9OQU1FICgoU1lNQk9M
X1RZUEUgKG5ldykpKSwgU1lNQk9MX05BTUUgKG5ldykpKSkpDQorIAlmcHJpbnRmX2ZpbHRlcmVk
KHN0cmVhbSwgICIgJXMgPSAiLCBTWU1CT0xfU09VUkNFX05BTUUobmV3KSk7DQorICAgICAgIHR5
cGVfcHJpbnQodHlwZSwiIixzdHJlYW0sMCk7DQorICAgICAgIGJyZWFrOw0KKyAjZW5kaWYNCiAg
I2lmZGVmIF9MQU5HX2NoaWxsDQogICAgIGNhc2UgbGFuZ3VhZ2VfY2hpbGw6DQogICAgICAgIGZw
cmludGZfZmlsdGVyZWQoc3RyZWFtLCAiU1lOTU9ERSAiKTsNCkluZGV4OiBnZGIvY29uZmlnLmgN
CmRpZmYgLWMgZ2RiL2NvbmZpZy5oOjEuMS4xLjEgZ2RiL2NvbmZpZy5oOjEuMg0KKioqIGdkYi9j
b25maWcuaDoxLjEuMS4xCUZyaSBEZWMgMDQgMTA6NTE6MDQgMTk5OA0KLS0tIGdkYi9jb25maWcu
aAlXZWQgRGVjIDIzIDE2OjUzOjA0IDE5OTgNCioqKioqKioqKioqKioqKg0KKioqIDEsOTAgKioq
Kg0KISAvKiBjb25maWcuaW4uICBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBmcm9tIGNvbmZpZ3Vy
ZS5pbiBieSBhdXRvaGVhZGVyLiAgKi8NDQohIA0NCiEgLyogRGVmaW5lIGlmIG9uIEFJWCAzLg0N
CiEgICAgU3lzdGVtIGhlYWRlcnMgc29tZXRpbWVzIGRlZmluZSB0aGlzLg0NCiEgICAgV2UganVz
dCB3YW50IHRvIGF2b2lkIGEgcmVkZWZpbml0aW9uIGVycm9yIG1lc3NhZ2UuICAqLw0NCiEgI2lm
bmRlZiBfQUxMX1NPVVJDRQ0NCiEgLyogI3VuZGVmIF9BTExfU09VUkNFICovDQ0KISAjZW5kaWYN
DQohIA0NCiEgLyogRGVmaW5lIGlmIHRoZSBgbG9uZyBkb3VibGUnIHR5cGUgd29ya3MuICAqLw0N
CiEgLyogI3VuZGVmIEhBVkVfTE9OR19ET1VCTEUgKi8NDQohIA0NCiEgLyogRGVmaW5lIGlmIHlv
dSBoYXZlIGEgd29ya2luZyBgbW1hcCcgc3lzdGVtIGNhbGwuICAqLw0NCiEgLyogI3VuZGVmIEhB
VkVfTU1BUCAqLw0NCiEgDQ0KISAvKiBEZWZpbmUgaWYgb24gTUlOSVguICAqLw0NCiEgLyogI3Vu
ZGVmIF9NSU5JWCAqLw0NCiEgDQ0KISAvKiBEZWZpbmUgaWYgdGhlIHN5c3RlbSBkb2VzIG5vdCBw
cm92aWRlIFBPU0lYLjEgZmVhdHVyZXMgZXhjZXB0DQ0KISAgICB3aXRoIHRoaXMgZGVmaW5lZC4g
ICovDQ0KISAvKiAjdW5kZWYgX1BPU0lYXzFfU09VUkNFICovDQ0KISANDQohIC8qIERlZmluZSBp
ZiB5b3UgbmVlZCB0byBpbiBvcmRlciBmb3Igc3RhdCBhbmQgb3RoZXIgdGhpbmdzIHRvIHdvcmsu
ICAqLw0NCiEgLyogI3VuZGVmIF9QT1NJWF9TT1VSQ0UgKi8NDQohIA0NCiEgLyogRGVmaW5lIGlm
IHRoZSBgU19JUyonIG1hY3JvcyBpbiA8c3lzL3N0YXQuaD4gZG8gbm90IHdvcmsgcHJvcGVybHku
ICAqLw0NCiEgLyogI3VuZGVmIFNUQVRfTUFDUk9TX0JST0tFTiAqLw0NCiEgDQ0KISAvKiBEZWZp
bmUgaWYgeW91IGhhdmUgdGhlIEFOU0kgQyBoZWFkZXIgZmlsZXMuICAqLw0NCiEgLyogI3VuZGVm
IFNURENfSEVBREVSUyAqLw0NCiEgDQ0KISAvKiBEZWZpbmUgaWYgZnByZWdzZXRfdCB0eXBlIGlz
IGF2YWlsYWJsZS4gKi8NDQohIC8qICN1bmRlZiBIQVZFX0ZQUkVHU0VUX1QgKi8NDQohIA0NCiEg
LyogRGVmaW5lIGlmIGdyZWdzZXRfdCB0eXBlIGlzIGF2YWlsYWJsZS4gKi8NDQohIC8qICN1bmRl
ZiBIQVZFX0dSRUdTRVRfVCAqLw0NCiEgDQ0KISAvKiBEZWZpbmUgaWYgdGhlICIlTGciIGZvcm1h
dCB3b3JrcyB0byBwcmludCBsb25nIGRvdWJsZXMuICovDQ0KISAvKiAjdW5kZWYgUFJJTlRGX0hB
U19MT05HX0RPVUJMRSAqLw0NCiEgDQ0KISAvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGdldHBh
Z2VzaXplIGZ1bmN0aW9uLiAgKi8NDQohICNkZWZpbmUgSEFWRV9HRVRQQUdFU0laRSAxDQ0KISAN
DQohIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc2JyayBmdW5jdGlvbi4gICovDQ0KISAjZGVm
aW5lIEhBVkVfU0JSSyAxDQ0KISANDQohIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc2V0cGdp
ZCBmdW5jdGlvbi4gICovDQ0KISAvKiAjdW5kZWYgSEFWRV9TRVRQR0lEICovDQ0KISANDQohIC8q
IERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgdmFsbG9jIGZ1bmN0aW9uLiAgKi8NDQohIC8qICN1bmRl
ZiBIQVZFX1ZBTExPQyAqLw0NCiEgDQ0KISAvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxlbmRp
YW4uaD4gaGVhZGVyIGZpbGUuICAqLw0NCiEgLyogI3VuZGVmIEhBVkVfRU5ESUFOX0ggKi8NDQoh
IA0NCiEgLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8bGltaXRzLmg+IGhlYWRlciBmaWxlLiAg
Ki8NDQohICNkZWZpbmUgSEFWRV9MSU1JVFNfSCAxDQ0KISANDQohIC8qIERlZmluZSBpZiB5b3Ug
aGF2ZSB0aGUgPGxpbmsuaD4gaGVhZGVyIGZpbGUuICAqLw0NCiEgLyogI3VuZGVmIEhBVkVfTElO
S19IICovDQ0KISANDQohIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPG1lbW9yeS5oPiBoZWFk
ZXIgZmlsZS4gICovDQ0KISAjZGVmaW5lIEhBVkVfTUVNT1JZX0ggMQ0NCiEgDQ0KISAvKiBEZWZp
bmUgaWYgeW91IGhhdmUgdGhlIDxzZ3R0eS5oPiBoZWFkZXIgZmlsZS4gICovDQ0KISAvKiAjdW5k
ZWYgSEFWRV9TR1RUWV9IICovDQ0KISANDQohIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN0
ZGRlZi5oPiBoZWFkZXIgZmlsZS4gICovDQ0KISAjZGVmaW5lIEhBVkVfU1REREVGX0ggMQ0NCiEg
DQ0KISAvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmcuaD4gaGVhZGVyIGZpbGUuICAq
Lw0NCiEgI2RlZmluZSBIQVZFX1NUUklOR19IIDENDQohIA0NCiEgLyogRGVmaW5lIGlmIHlvdSBo
YXZlIHRoZSA8c3RyaW5ncy5oPiBoZWFkZXIgZmlsZS4gICovDQ0KISAvKiAjdW5kZWYgSEFWRV9T
VFJJTkdTX0ggKi8NDQohIA0NCiEgLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3Byb2Nm
cy5oPiBoZWFkZXIgZmlsZS4gICovDQ0KISAvKiAjdW5kZWYgSEFWRV9TWVNfUFJPQ0ZTX0ggKi8N
DQohIA0NCiEgLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8dGVybWlvLmg+IGhlYWRlciBmaWxl
LiAgKi8NDQohIC8qICN1bmRlZiBIQVZFX1RFUk1JT19IICovDQ0KISANDQohIC8qIERlZmluZSBp
ZiB5b3UgaGF2ZSB0aGUgPHRlcm1pb3MuaD4gaGVhZGVyIGZpbGUuICAqLw0NCiEgI2RlZmluZSBI
QVZFX1RFUk1JT1NfSCAxDQ0KISANDQohIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHVuaXN0
ZC5oPiBoZWFkZXIgZmlsZS4gICovDQ0KISAjZGVmaW5lIEhBVkVfVU5JU1REX0ggMQ0NCiEgDQ0K
ISAvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGRsIGxpYnJhcnkgKC1sZGwpLiAgKi8NDQohIC8q
ICN1bmRlZiBIQVZFX0xJQkRMICovDQ0KLS0tIDEsOTIgLS0tLQ0KISAvKiBjb25maWcuaW4uICBH
ZW5lcmF0ZWQgYXV0b21hdGljYWxseSBmcm9tIGNvbmZpZ3VyZS5pbiBieSBhdXRvaGVhZGVyLiAg
Ki8NCiEgDQohIC8qIERlZmluZSBpZiBvbiBBSVggMy4NCiEgICAgU3lzdGVtIGhlYWRlcnMgc29t
ZXRpbWVzIGRlZmluZSB0aGlzLg0KISAgICBXZSBqdXN0IHdhbnQgdG8gYXZvaWQgYSByZWRlZmlu
aXRpb24gZXJyb3IgbWVzc2FnZS4gICovDQohICNpZm5kZWYgX0FMTF9TT1VSQ0UNCiEgLyogI3Vu
ZGVmIF9BTExfU09VUkNFICovDQohICNlbmRpZg0KISANCiEgLyogRGVmaW5lIGlmIHRoZSBgbG9u
ZyBkb3VibGUnIHR5cGUgd29ya3MuICAqLw0KISAjZGVmaW5lIEhBVkVfTE9OR19ET1VCTEUgDQoh
IA0KISAjZGVmaW5lIFRBUkdFVF9MT05HX0RPVUJMRV9CSVQgKDEyKjgpDQohIA0KISAvKiBEZWZp
bmUgaWYgeW91IGhhdmUgYSB3b3JraW5nIGBtbWFwJyBzeXN0ZW0gY2FsbC4gICovDQohIC8qICN1
bmRlZiBIQVZFX01NQVAgKi8NCiEgDQohIC8qIERlZmluZSBpZiBvbiBNSU5JWC4gICovDQohIC8q
ICN1bmRlZiBfTUlOSVggKi8NCiEgDQohIC8qIERlZmluZSBpZiB0aGUgc3lzdGVtIGRvZXMgbm90
IHByb3ZpZGUgUE9TSVguMSBmZWF0dXJlcyBleGNlcHQNCiEgICAgd2l0aCB0aGlzIGRlZmluZWQu
ICAqLw0KISAvKiAjdW5kZWYgX1BPU0lYXzFfU09VUkNFICovDQohIA0KISAvKiBEZWZpbmUgaWYg
eW91IG5lZWQgdG8gaW4gb3JkZXIgZm9yIHN0YXQgYW5kIG90aGVyIHRoaW5ncyB0byB3b3JrLiAg
Ki8NCiEgLyogI3VuZGVmIF9QT1NJWF9TT1VSQ0UgKi8NCiEgDQohIC8qIERlZmluZSBpZiB0aGUg
YFNfSVMqJyBtYWNyb3MgaW4gPHN5cy9zdGF0Lmg+IGRvIG5vdCB3b3JrIHByb3Blcmx5LiAgKi8N
CiEgLyogI3VuZGVmIFNUQVRfTUFDUk9TX0JST0tFTiAqLw0KISANCiEgLyogRGVmaW5lIGlmIHlv
dSBoYXZlIHRoZSBBTlNJIEMgaGVhZGVyIGZpbGVzLiAgKi8NCiEgLyogI3VuZGVmIFNURENfSEVB
REVSUyAqLw0KISANCiEgLyogRGVmaW5lIGlmIGZwcmVnc2V0X3QgdHlwZSBpcyBhdmFpbGFibGUu
ICovDQohIC8qICN1bmRlZiBIQVZFX0ZQUkVHU0VUX1QgKi8NCiEgDQohIC8qIERlZmluZSBpZiBn
cmVnc2V0X3QgdHlwZSBpcyBhdmFpbGFibGUuICovDQohIC8qICN1bmRlZiBIQVZFX0dSRUdTRVRf
VCAqLw0KISANCiEgLyogRGVmaW5lIGlmIHRoZSAiJUxnIiBmb3JtYXQgd29ya3MgdG8gcHJpbnQg
bG9uZyBkb3VibGVzLiAqLw0KISAvKiAjdW5kZWYgUFJJTlRGX0hBU19MT05HX0RPVUJMRSAqLw0K
ISANCiEgLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBnZXRwYWdlc2l6ZSBmdW5jdGlvbi4gICov
DQohICNkZWZpbmUgSEFWRV9HRVRQQUdFU0laRSAxDQohIA0KISAvKiBEZWZpbmUgaWYgeW91IGhh
dmUgdGhlIHNicmsgZnVuY3Rpb24uICAqLw0KISAjZGVmaW5lIEhBVkVfU0JSSyAxDQohIA0KISAv
KiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHNldHBnaWQgZnVuY3Rpb24uICAqLw0KISAvKiAjdW5k
ZWYgSEFWRV9TRVRQR0lEICovDQohIA0KISAvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHZhbGxv
YyBmdW5jdGlvbi4gICovDQohIC8qICN1bmRlZiBIQVZFX1ZBTExPQyAqLw0KISANCiEgLyogRGVm
aW5lIGlmIHlvdSBoYXZlIHRoZSA8ZW5kaWFuLmg+IGhlYWRlciBmaWxlLiAgKi8NCiEgLyogI3Vu
ZGVmIEhBVkVfRU5ESUFOX0ggKi8NCiEgDQohIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGxp
bWl0cy5oPiBoZWFkZXIgZmlsZS4gICovDQohICNkZWZpbmUgSEFWRV9MSU1JVFNfSCAxDQohIA0K
ISAvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxsaW5rLmg+IGhlYWRlciBmaWxlLiAgKi8NCiEg
LyogI3VuZGVmIEhBVkVfTElOS19IICovDQohIA0KISAvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhl
IDxtZW1vcnkuaD4gaGVhZGVyIGZpbGUuICAqLw0KISAjZGVmaW5lIEhBVkVfTUVNT1JZX0ggMQ0K
ISANCiEgLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c2d0dHkuaD4gaGVhZGVyIGZpbGUuICAq
Lw0KISAvKiAjdW5kZWYgSEFWRV9TR1RUWV9IICovDQohIA0KISAvKiBEZWZpbmUgaWYgeW91IGhh
dmUgdGhlIDxzdGRkZWYuaD4gaGVhZGVyIGZpbGUuICAqLw0KISAjZGVmaW5lIEhBVkVfU1REREVG
X0ggMQ0KISANCiEgLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5nLmg+IGhlYWRlciBm
aWxlLiAgKi8NCiEgI2RlZmluZSBIQVZFX1NUUklOR19IIDENCiEgDQohIC8qIERlZmluZSBpZiB5
b3UgaGF2ZSB0aGUgPHN0cmluZ3MuaD4gaGVhZGVyIGZpbGUuICAqLw0KISAvKiAjdW5kZWYgSEFW
RV9TVFJJTkdTX0ggKi8NCiEgDQohIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9wcm9j
ZnMuaD4gaGVhZGVyIGZpbGUuICAqLw0KISAvKiAjdW5kZWYgSEFWRV9TWVNfUFJPQ0ZTX0ggKi8N
CiEgDQohIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHRlcm1pby5oPiBoZWFkZXIgZmlsZS4g
ICovDQohIC8qICN1bmRlZiBIQVZFX1RFUk1JT19IICovDQohIA0KISAvKiBEZWZpbmUgaWYgeW91
IGhhdmUgdGhlIDx0ZXJtaW9zLmg+IGhlYWRlciBmaWxlLiAgKi8NCiEgI2RlZmluZSBIQVZFX1RF
Uk1JT1NfSCAxDQohIA0KISAvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDx1bmlzdGQuaD4gaGVh
ZGVyIGZpbGUuICAqLw0KISAjZGVmaW5lIEhBVkVfVU5JU1REX0ggMQ0KISANCiEgLyogRGVmaW5l
IGlmIHlvdSBoYXZlIHRoZSBkbCBsaWJyYXJ5ICgtbGRsKS4gICovDQohIC8qICN1bmRlZiBIQVZF
X0xJQkRMICovDQpJbmRleDogZ2RiL2NvbmZpZy5oLW4NCmRpZmYgLWMgZ2RiL2NvbmZpZy5oLW46
MS4xLjEuMSBnZGIvY29uZmlnLmgtbjoxLjINCioqKiBnZGIvY29uZmlnLmgtbjoxLjEuMS4xCUZy
aSBEZWMgMDQgMTA6NTE6MDQgMTk5OA0KLS0tIGdkYi9jb25maWcuaC1uCVdlZCBEZWMgMjMgMTY6
NTM6MDQgMTk5OA0KKioqKioqKioqKioqKioqDQoqKiogMSw5MCAqKioqDQohIC8qIGNvbmZpZy5p
bi4gIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGZyb20gY29uZmlndXJlLmluIGJ5IGF1dG9oZWFk
ZXIuICAqLw0NCiEgDQ0KISAvKiBEZWZpbmUgaWYgb24gQUlYIDMuDQ0KISAgICBTeXN0ZW0gaGVh
ZGVycyBzb21ldGltZXMgZGVmaW5lIHRoaXMuDQ0KISAgICBXZSBqdXN0IHdhbnQgdG8gYXZvaWQg
YSByZWRlZmluaXRpb24gZXJyb3IgbWVzc2FnZS4gICovDQ0KISAjaWZuZGVmIF9BTExfU09VUkNF
DQ0KISAvKiAjdW5kZWYgX0FMTF9TT1VSQ0UgKi8NDQohICNlbmRpZg0NCiEgDQ0KISAvKiBEZWZp
bmUgaWYgdGhlIGBsb25nIGRvdWJsZScgdHlwZSB3b3Jrcy4gICovDQ0KISAvKiAjdW5kZWYgSEFW
RV9MT05HX0RPVUJMRSAqLw0NCiEgDQ0KISAvKiBEZWZpbmUgaWYgeW91IGhhdmUgYSB3b3JraW5n
IGBtbWFwJyBzeXN0ZW0gY2FsbC4gICovDQ0KISAvKiAjdW5kZWYgSEFWRV9NTUFQICovDQ0KISAN
DQohIC8qIERlZmluZSBpZiBvbiBNSU5JWC4gICovDQ0KISAvKiAjdW5kZWYgX01JTklYICovDQ0K
ISANDQohIC8qIERlZmluZSBpZiB0aGUgc3lzdGVtIGRvZXMgbm90IHByb3ZpZGUgUE9TSVguMSBm
ZWF0dXJlcyBleGNlcHQNDQohICAgIHdpdGggdGhpcyBkZWZpbmVkLiAgKi8NDQohIC8qICN1bmRl
ZiBfUE9TSVhfMV9TT1VSQ0UgKi8NDQohIA0NCiEgLyogRGVmaW5lIGlmIHlvdSBuZWVkIHRvIGlu
IG9yZGVyIGZvciBzdGF0IGFuZCBvdGhlciB0aGluZ3MgdG8gd29yay4gICovDQ0KISAvKiAjdW5k
ZWYgX1BPU0lYX1NPVVJDRSAqLw0NCiEgDQ0KISAvKiBEZWZpbmUgaWYgdGhlIGBTX0lTKicgbWFj
cm9zIGluIDxzeXMvc3RhdC5oPiBkbyBub3Qgd29yayBwcm9wZXJseS4gICovDQ0KISAvKiAjdW5k
ZWYgU1RBVF9NQUNST1NfQlJPS0VOICovDQ0KISANDQohIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0
aGUgQU5TSSBDIGhlYWRlciBmaWxlcy4gICovDQ0KISAvKiAjdW5kZWYgU1REQ19IRUFERVJTICov
DQ0KISANDQohIC8qIERlZmluZSBpZiBmcHJlZ3NldF90IHR5cGUgaXMgYXZhaWxhYmxlLiAqLw0N
CiEgLyogI3VuZGVmIEhBVkVfRlBSRUdTRVRfVCAqLw0NCiEgDQ0KISAvKiBEZWZpbmUgaWYgZ3Jl
Z3NldF90IHR5cGUgaXMgYXZhaWxhYmxlLiAqLw0NCiEgLyogI3VuZGVmIEhBVkVfR1JFR1NFVF9U
ICovDQ0KISANDQohIC8qIERlZmluZSBpZiB0aGUgIiVMZyIgZm9ybWF0IHdvcmtzIHRvIHByaW50
IGxvbmcgZG91Ymxlcy4gKi8NDQohIC8qICN1bmRlZiBQUklOVEZfSEFTX0xPTkdfRE9VQkxFICov
DQ0KISANDQohIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0cGFnZXNpemUgZnVuY3Rpb24u
ICAqLw0NCiEgI2RlZmluZSBIQVZFX0dFVFBBR0VTSVpFIDENDQohIA0NCiEgLyogRGVmaW5lIGlm
IHlvdSBoYXZlIHRoZSBzYnJrIGZ1bmN0aW9uLiAgKi8NDQohICNkZWZpbmUgSEFWRV9TQlJLIDEN
DQohIA0NCiEgLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzZXRwZ2lkIGZ1bmN0aW9uLiAgKi8N
DQohIC8qICN1bmRlZiBIQVZFX1NFVFBHSUQgKi8NDQohIA0NCiEgLyogRGVmaW5lIGlmIHlvdSBo
YXZlIHRoZSB2YWxsb2MgZnVuY3Rpb24uICAqLw0NCiEgLyogI3VuZGVmIEhBVkVfVkFMTE9DICov
DQ0KISANDQohIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGVuZGlhbi5oPiBoZWFkZXIgZmls
ZS4gICovDQ0KISAvKiAjdW5kZWYgSEFWRV9FTkRJQU5fSCAqLw0NCiEgDQ0KISAvKiBEZWZpbmUg
aWYgeW91IGhhdmUgdGhlIDxsaW1pdHMuaD4gaGVhZGVyIGZpbGUuICAqLw0NCiEgI2RlZmluZSBI
QVZFX0xJTUlUU19IIDENDQohIA0NCiEgLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8bGluay5o
PiBoZWFkZXIgZmlsZS4gICovDQ0KISAvKiAjdW5kZWYgSEFWRV9MSU5LX0ggKi8NDQohIA0NCiEg
LyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8bWVtb3J5Lmg+IGhlYWRlciBmaWxlLiAgKi8NDQoh
ICNkZWZpbmUgSEFWRV9NRU1PUllfSCAxDQ0KISANDQohIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0
aGUgPHNndHR5Lmg+IGhlYWRlciBmaWxlLiAgKi8NDQohIC8qICN1bmRlZiBIQVZFX1NHVFRZX0gg
Ki8NDQohIA0NCiEgLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3RkZGVmLmg+IGhlYWRlciBm
aWxlLiAgKi8NDQohICNkZWZpbmUgSEFWRV9TVERERUZfSCAxDQ0KISANDQohIC8qIERlZmluZSBp
ZiB5b3UgaGF2ZSB0aGUgPHN0cmluZy5oPiBoZWFkZXIgZmlsZS4gICovDQ0KISAjZGVmaW5lIEhB
VkVfU1RSSU5HX0ggMQ0NCiEgDQ0KISAvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmdz
Lmg+IGhlYWRlciBmaWxlLiAgKi8NDQohIC8qICN1bmRlZiBIQVZFX1NUUklOR1NfSCAqLw0NCiEg
DQ0KISAvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvcHJvY2ZzLmg+IGhlYWRlciBmaWxl
LiAgKi8NDQohIC8qICN1bmRlZiBIQVZFX1NZU19QUk9DRlNfSCAqLw0NCiEgDQ0KISAvKiBEZWZp
bmUgaWYgeW91IGhhdmUgdGhlIDx0ZXJtaW8uaD4gaGVhZGVyIGZpbGUuICAqLw0NCiEgLyogI3Vu
ZGVmIEhBVkVfVEVSTUlPX0ggKi8NDQohIA0NCiEgLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8
dGVybWlvcy5oPiBoZWFkZXIgZmlsZS4gICovDQ0KISAjZGVmaW5lIEhBVkVfVEVSTUlPU19IIDEN
DQohIA0NCiEgLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8dW5pc3RkLmg+IGhlYWRlciBmaWxl
LiAgKi8NDQohICNkZWZpbmUgSEFWRV9VTklTVERfSCAxDQ0KISANDQohIC8qIERlZmluZSBpZiB5
b3UgaGF2ZSB0aGUgZGwgbGlicmFyeSAoLWxkbCkuICAqLw0NCiEgLyogI3VuZGVmIEhBVkVfTElC
REwgKi8NDQotLS0gMSw5MCAtLS0tDQohIC8qIGNvbmZpZy5pbi4gIEdlbmVyYXRlZCBhdXRvbWF0
aWNhbGx5IGZyb20gY29uZmlndXJlLmluIGJ5IGF1dG9oZWFkZXIuICAqLw0KISANCiEgLyogRGVm
aW5lIGlmIG9uIEFJWCAzLg0KISAgICBTeXN0ZW0gaGVhZGVycyBzb21ldGltZXMgZGVmaW5lIHRo
aXMuDQohICAgIFdlIGp1c3Qgd2FudCB0byBhdm9pZCBhIHJlZGVmaW5pdGlvbiBlcnJvciBtZXNz
YWdlLiAgKi8NCiEgI2lmbmRlZiBfQUxMX1NPVVJDRQ0KISAvKiAjdW5kZWYgX0FMTF9TT1VSQ0Ug
Ki8NCiEgI2VuZGlmDQohIA0KISAvKiBEZWZpbmUgaWYgdGhlIGBsb25nIGRvdWJsZScgdHlwZSB3
b3Jrcy4gICovDQohIC8qICN1bmRlZiBIQVZFX0xPTkdfRE9VQkxFICovDQohIA0KISAvKiBEZWZp
bmUgaWYgeW91IGhhdmUgYSB3b3JraW5nIGBtbWFwJyBzeXN0ZW0gY2FsbC4gICovDQohIC8qICN1
bmRlZiBIQVZFX01NQVAgKi8NCiEgDQohIC8qIERlZmluZSBpZiBvbiBNSU5JWC4gICovDQohIC8q
ICN1bmRlZiBfTUlOSVggKi8NCiEgDQohIC8qIERlZmluZSBpZiB0aGUgc3lzdGVtIGRvZXMgbm90
IHByb3ZpZGUgUE9TSVguMSBmZWF0dXJlcyBleGNlcHQNCiEgICAgd2l0aCB0aGlzIGRlZmluZWQu
ICAqLw0KISAvKiAjdW5kZWYgX1BPU0lYXzFfU09VUkNFICovDQohIA0KISAvKiBEZWZpbmUgaWYg
eW91IG5lZWQgdG8gaW4gb3JkZXIgZm9yIHN0YXQgYW5kIG90aGVyIHRoaW5ncyB0byB3b3JrLiAg
Ki8NCiEgLyogI3VuZGVmIF9QT1NJWF9TT1VSQ0UgKi8NCiEgDQohIC8qIERlZmluZSBpZiB0aGUg
YFNfSVMqJyBtYWNyb3MgaW4gPHN5cy9zdGF0Lmg+IGRvIG5vdCB3b3JrIHByb3Blcmx5LiAgKi8N
CiEgLyogI3VuZGVmIFNUQVRfTUFDUk9TX0JST0tFTiAqLw0KISANCiEgLyogRGVmaW5lIGlmIHlv
dSBoYXZlIHRoZSBBTlNJIEMgaGVhZGVyIGZpbGVzLiAgKi8NCiEgLyogI3VuZGVmIFNURENfSEVB
REVSUyAqLw0KISANCiEgLyogRGVmaW5lIGlmIGZwcmVnc2V0X3QgdHlwZSBpcyBhdmFpbGFibGUu
ICovDQohIC8qICN1bmRlZiBIQVZFX0ZQUkVHU0VUX1QgKi8NCiEgDQohIC8qIERlZmluZSBpZiBn
cmVnc2V0X3QgdHlwZSBpcyBhdmFpbGFibGUuICovDQohIC8qICN1bmRlZiBIQVZFX0dSRUdTRVRf
VCAqLw0KISANCiEgLyogRGVmaW5lIGlmIHRoZSAiJUxnIiBmb3JtYXQgd29ya3MgdG8gcHJpbnQg
bG9uZyBkb3VibGVzLiAqLw0KISAvKiAjdW5kZWYgUFJJTlRGX0hBU19MT05HX0RPVUJMRSAqLw0K
ISANCiEgLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBnZXRwYWdlc2l6ZSBmdW5jdGlvbi4gICov
DQohICNkZWZpbmUgSEFWRV9HRVRQQUdFU0laRSAxDQohIA0KISAvKiBEZWZpbmUgaWYgeW91IGhh
dmUgdGhlIHNicmsgZnVuY3Rpb24uICAqLw0KISAjZGVmaW5lIEhBVkVfU0JSSyAxDQohIA0KISAv
KiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHNldHBnaWQgZnVuY3Rpb24uICAqLw0KISAvKiAjdW5k
ZWYgSEFWRV9TRVRQR0lEICovDQohIA0KISAvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHZhbGxv
YyBmdW5jdGlvbi4gICovDQohIC8qICN1bmRlZiBIQVZFX1ZBTExPQyAqLw0KISANCiEgLyogRGVm
aW5lIGlmIHlvdSBoYXZlIHRoZSA8ZW5kaWFuLmg+IGhlYWRlciBmaWxlLiAgKi8NCiEgLyogI3Vu
ZGVmIEhBVkVfRU5ESUFOX0ggKi8NCiEgDQohIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGxp
bWl0cy5oPiBoZWFkZXIgZmlsZS4gICovDQohICNkZWZpbmUgSEFWRV9MSU1JVFNfSCAxDQohIA0K
ISAvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxsaW5rLmg+IGhlYWRlciBmaWxlLiAgKi8NCiEg
LyogI3VuZGVmIEhBVkVfTElOS19IICovDQohIA0KISAvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhl
IDxtZW1vcnkuaD4gaGVhZGVyIGZpbGUuICAqLw0KISAjZGVmaW5lIEhBVkVfTUVNT1JZX0ggMQ0K
ISANCiEgLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c2d0dHkuaD4gaGVhZGVyIGZpbGUuICAq
Lw0KISAvKiAjdW5kZWYgSEFWRV9TR1RUWV9IICovDQohIA0KISAvKiBEZWZpbmUgaWYgeW91IGhh
dmUgdGhlIDxzdGRkZWYuaD4gaGVhZGVyIGZpbGUuICAqLw0KISAjZGVmaW5lIEhBVkVfU1REREVG
X0ggMQ0KISANCiEgLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5nLmg+IGhlYWRlciBm
aWxlLiAgKi8NCiEgI2RlZmluZSBIQVZFX1NUUklOR19IIDENCiEgDQohIC8qIERlZmluZSBpZiB5
b3UgaGF2ZSB0aGUgPHN0cmluZ3MuaD4gaGVhZGVyIGZpbGUuICAqLw0KISAvKiAjdW5kZWYgSEFW
RV9TVFJJTkdTX0ggKi8NCiEgDQohIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9wcm9j
ZnMuaD4gaGVhZGVyIGZpbGUuICAqLw0KISAvKiAjdW5kZWYgSEFWRV9TWVNfUFJPQ0ZTX0ggKi8N
CiEgDQohIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHRlcm1pby5oPiBoZWFkZXIgZmlsZS4g
ICovDQohIC8qICN1bmRlZiBIQVZFX1RFUk1JT19IICovDQohIA0KISAvKiBEZWZpbmUgaWYgeW91
IGhhdmUgdGhlIDx0ZXJtaW9zLmg+IGhlYWRlciBmaWxlLiAgKi8NCiEgI2RlZmluZSBIQVZFX1RF
Uk1JT1NfSCAxDQohIA0KISAvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDx1bmlzdGQuaD4gaGVh
ZGVyIGZpbGUuICAqLw0KISAjZGVmaW5lIEhBVkVfVU5JU1REX0ggMQ0KISANCiEgLyogRGVmaW5l
IGlmIHlvdSBoYXZlIHRoZSBkbCBsaWJyYXJ5ICgtbGRsKS4gICovDQohIC8qICN1bmRlZiBIQVZF
X0xJQkRMICovDQpJbmRleDogZ2RiL2NvbmZpZy5zZWQNCmRpZmYgLWMgZ2RiL2NvbmZpZy5zZWQ6
MS4xLjEuMSBnZGIvY29uZmlnLnNlZDoxLjINCioqKiBnZGIvY29uZmlnLnNlZDoxLjEuMS4xCUZy
aSBEZWMgMDQgMTA6NTE6MDQgMTk5OA0KLS0tIGdkYi9jb25maWcuc2VkCVdlZCBEZWMgMjMgMTY6
NTM6MDQgMTk5OA0KKioqKioqKioqKioqKioqDQoqKiogMSw0MSAqKioqDQohIHMvI3VuZGVmIFVT
RV9CSU5BUllfRk9QRU4vI2RlZmluZSBVU0VfQklOQVJZX0ZPUEVOIDEvDQ0KISBzLyN1bmRlZiBI
QVZFX0dFVFBBR0VTSVpFLyNkZWZpbmUgSEFWRV9HRVRQQUdFU0laRSAxLw0NCiEgcy8jdW5kZWYg
SEFWRV9GQ05UTF9ILyNkZWZpbmUgSEFWRV9GQ05UTF9IIDEvDQ0KISBzLyN1bmRlZiBIQVZFX1NU
RERFRl9ILyNkZWZpbmUgSEFWRV9TVERERUZfSCAxLw0NCiEgcy8jdW5kZWYgSEFWRV9TVERMSUJf
SC8jZGVmaW5lIEhBVkVfU1RETElCX0ggMS8NDQohIHMvI3VuZGVmIEhBVkVfU1RSSU5HX0gvI2Rl
ZmluZSBIQVZFX1NUUklOR19IIDEvDQ0KISBzLyN1bmRlZiBIQVZFX1NZU19GSUxFX0gvI2RlZmlu
ZSBIQVZFX1NZU19GSUxFX0ggMS8NDQohIHMvI3VuZGVmIEhBVkVfU1lTX1RJTUVfSC8jZGVmaW5l
IEhBVkVfU1lTX1RJTUVfSCAxLw0NCiEgcy8jdW5kZWYgSEFWRV9USU1FX0gvI2RlZmluZSBIQVZF
X1RJTUVfSCAxLw0NCiEgcy8jdW5kZWYgSEFWRV9VTklTVERfSC8jZGVmaW5lIEhBVkVfVU5JU1RE
X0ggMS8NDQohIHMvI3VuZGVmIEhBVkVfVEVSTUlPU19ILyNkZWZpbmUgSEFWRV9URVJNSU9TX0gg
MS8NDQohIHMvI3VuZGVmIEhBVkVfU1lTX1dBSVRfSC8jZGVmaW5lIEhBVkVfU1lTX1dBSVRfSCAx
Lw0NCiEgcy8jdW5kZWYgSEFWRV9USU1FX1RfSU5fVElNRV9ILyNkZWZpbmUgSEFWRV9USU1FX1Rf
SU5fVElNRV9IIDEvDQ0KISBzLyN1bmRlZiBIQVZFX1ZBUkFSR1NfSC8jZGVmaW5lIEhBVkVfVkFS
QVJHU19IIDEvDQ0KISBzLyN1bmRlZiBIQVZFX1VOSVNURF9ILyNkZWZpbmUgSEFWRV9VTklTVERf
SCAxLw0NCiEgcy8jdW5kZWYgSEFWRV9BTExPQ0FfSC8jZGVmaW5lIEhBVkVfQUxMT0NBX0ggMS8N
DQohIHMvI3VuZGVmIEhBVkVfQUxMT0NBLyNkZWZpbmUgSEFWRV9BTExPQ0EgMS8NDQohIHMvI3Vu
ZGVmIEhBVkVfUkVNT1ZFLyNkZWZpbmUgSEFWRV9SRU1PVkUgMS8NDQohIHMvI3VuZGVmIEhBVkVf
U0JSSy8jZGVmaW5lIEhBVkVfU0JSSyAxLw0NCiEgcy8jdW5kZWYgSEFWRV9VTkxJTksvI2RlZmlu
ZSBIQVZFX1VOTElOSyAxLw0NCiEgcy8jdW5kZWYgSEFWRV9FUlJOT19ILyNkZWZpbmUgSEFWRV9F
UlJOT19IIDEvDQ0KISBzLyN1bmRlZiBIQVZFX01FTU9SWV9ILyNkZWZpbmUgSEFWRV9NRU1PUllf
SCAxLw0NCiEgcy8jdW5kZWYgSEFWRV9TVERBUkdfSC8jZGVmaW5lIEhBVkVfU1REQVJHX0ggMS8N
DQohIHMvI3VuZGVmIEhBVkVfVlBSSU5URi8jZGVmaW5lIEhBVkVfVlBSSU5URiAxLw0NCiEgcy8j
dW5kZWYgSEFWRV9HRVRDV0QvI2RlZmluZSBIQVZFX0dFVENXRCAxLw0NCiEgcy8jdW5kZWYgSEFW
RV9MT0NBTEVfSC8jZGVmaW5lIEhBVkVfTE9DQUxFX0ggMS8NDQohIHMvI3VuZGVmIEhBVkVfTElN
SVRTX0gvI2RlZmluZSBIQVZFX0xJTUlUU19IIDEvDQ0KISBzLyN1bmRlZiBIQVZFX01BTExPQ19I
LyNkZWZpbmUgSEFWRV9NQUxMT0NfSCAxLw0NCiEgcy8jdW5kZWYgSEFWRV9WQUxVRVNfSC8jZGVm
aW5lIEhBVkVfVkFMVUVTX0ggMS8NDQohIHMvI3VuZGVmIEhBVkVfU1RQQ1BZLyNkZWZpbmUgSEFW
RV9TVFBDUFkgMS8NDQohIHMvI3VuZGVmIEhBVkVfTUVNQ1BZLyNkZWZpbmUgSEFWRV9NRU1DUFkg
MS8NDQohIHMvI3VuZGVmIEhBVkVfU0VURU5WLyNkZWZpbmUgSEFWRV9TRVRFTlYgMS8NDQohIHMv
I3VuZGVmIEhBVkVfR0VURU5WLyNkZWZpbmUgSEFWRV9HRVRFTlYgMS8NDQohIHMvI3VuZGVmIEhB
VkVfUFVURU5WLyNkZWZpbmUgSEFWRV9QVVRFTlYgMS8NDQohIHMvI3VuZGVmIEhBVkVfU1RSQ0hS
LyNkZWZpbmUgSEFWRV9TVFJDSFIgMS8NDQohIHMvI3VuZGVmIEhBVkVfU1RSQ0FTRUNNUC8jZGVm
aW5lIEhBVkVfU1RSQ0FTRUNNUCAxLw0NCiEgcy8jdW5kZWYgSEFWRV9TRVRMT0NBTEUvI2RlZmlu
ZSBIQVZFX1NFVExPQ0FMRSAxLw0NCiEgcy8jdW5kZWYgSEFWRV9TVFJFUlJPUi8jZGVmaW5lIEhB
VkVfU1RSRVJST1IgMS8NDQohIHMvI3VuZGVmIEhBVkVfVU5BTUUvI2RlZmluZSBIQVZFX1VOQU1F
IDEvDQ0KISANDQohIHMsXiN1bmRlZiAuKiQsLyogJiAqLywNDQotLS0gMSw0MSAtLS0tDQohIHMv
I3VuZGVmIFVTRV9CSU5BUllfRk9QRU4vI2RlZmluZSBVU0VfQklOQVJZX0ZPUEVOIDEvDQohIHMv
I3VuZGVmIEhBVkVfR0VUUEFHRVNJWkUvI2RlZmluZSBIQVZFX0dFVFBBR0VTSVpFIDEvDQohIHMv
I3VuZGVmIEhBVkVfRkNOVExfSC8jZGVmaW5lIEhBVkVfRkNOVExfSCAxLw0KISBzLyN1bmRlZiBI
QVZFX1NURERFRl9ILyNkZWZpbmUgSEFWRV9TVERERUZfSCAxLw0KISBzLyN1bmRlZiBIQVZFX1NU
RExJQl9ILyNkZWZpbmUgSEFWRV9TVERMSUJfSCAxLw0KISBzLyN1bmRlZiBIQVZFX1NUUklOR19I
LyNkZWZpbmUgSEFWRV9TVFJJTkdfSCAxLw0KISBzLyN1bmRlZiBIQVZFX1NZU19GSUxFX0gvI2Rl
ZmluZSBIQVZFX1NZU19GSUxFX0ggMS8NCiEgcy8jdW5kZWYgSEFWRV9TWVNfVElNRV9ILyNkZWZp
bmUgSEFWRV9TWVNfVElNRV9IIDEvDQohIHMvI3VuZGVmIEhBVkVfVElNRV9ILyNkZWZpbmUgSEFW
RV9USU1FX0ggMS8NCiEgcy8jdW5kZWYgSEFWRV9VTklTVERfSC8jZGVmaW5lIEhBVkVfVU5JU1RE
X0ggMS8NCiEgcy8jdW5kZWYgSEFWRV9URVJNSU9TX0gvI2RlZmluZSBIQVZFX1RFUk1JT1NfSCAx
Lw0KISBzLyN1bmRlZiBIQVZFX1NZU19XQUlUX0gvI2RlZmluZSBIQVZFX1NZU19XQUlUX0ggMS8N
CiEgcy8jdW5kZWYgSEFWRV9USU1FX1RfSU5fVElNRV9ILyNkZWZpbmUgSEFWRV9USU1FX1RfSU5f
VElNRV9IIDEvDQohIHMvI3VuZGVmIEhBVkVfVkFSQVJHU19ILyNkZWZpbmUgSEFWRV9WQVJBUkdT
X0ggMS8NCiEgcy8jdW5kZWYgSEFWRV9VTklTVERfSC8jZGVmaW5lIEhBVkVfVU5JU1REX0ggMS8N
CiEgcy8jdW5kZWYgSEFWRV9BTExPQ0FfSC8jZGVmaW5lIEhBVkVfQUxMT0NBX0ggMS8NCiEgcy8j
dW5kZWYgSEFWRV9BTExPQ0EvI2RlZmluZSBIQVZFX0FMTE9DQSAxLw0KISBzLyN1bmRlZiBIQVZF
X1JFTU9WRS8jZGVmaW5lIEhBVkVfUkVNT1ZFIDEvDQohIHMvI3VuZGVmIEhBVkVfU0JSSy8jZGVm
aW5lIEhBVkVfU0JSSyAxLw0KISBzLyN1bmRlZiBIQVZFX1VOTElOSy8jZGVmaW5lIEhBVkVfVU5M
SU5LIDEvDQohIHMvI3VuZGVmIEhBVkVfRVJSTk9fSC8jZGVmaW5lIEhBVkVfRVJSTk9fSCAxLw0K
ISBzLyN1bmRlZiBIQVZFX01FTU9SWV9ILyNkZWZpbmUgSEFWRV9NRU1PUllfSCAxLw0KISBzLyN1
bmRlZiBIQVZFX1NUREFSR19ILyNkZWZpbmUgSEFWRV9TVERBUkdfSCAxLw0KISBzLyN1bmRlZiBI
QVZFX1ZQUklOVEYvI2RlZmluZSBIQVZFX1ZQUklOVEYgMS8NCiEgcy8jdW5kZWYgSEFWRV9HRVRD
V0QvI2RlZmluZSBIQVZFX0dFVENXRCAxLw0KISBzLyN1bmRlZiBIQVZFX0xPQ0FMRV9ILyNkZWZp
bmUgSEFWRV9MT0NBTEVfSCAxLw0KISBzLyN1bmRlZiBIQVZFX0xJTUlUU19ILyNkZWZpbmUgSEFW
RV9MSU1JVFNfSCAxLw0KISBzLyN1bmRlZiBIQVZFX01BTExPQ19ILyNkZWZpbmUgSEFWRV9NQUxM
T0NfSCAxLw0KISBzLyN1bmRlZiBIQVZFX1ZBTFVFU19ILyNkZWZpbmUgSEFWRV9WQUxVRVNfSCAx
Lw0KISBzLyN1bmRlZiBIQVZFX1NUUENQWS8jZGVmaW5lIEhBVkVfU1RQQ1BZIDEvDQohIHMvI3Vu
ZGVmIEhBVkVfTUVNQ1BZLyNkZWZpbmUgSEFWRV9NRU1DUFkgMS8NCiEgcy8jdW5kZWYgSEFWRV9T
RVRFTlYvI2RlZmluZSBIQVZFX1NFVEVOViAxLw0KISBzLyN1bmRlZiBIQVZFX0dFVEVOVi8jZGVm
aW5lIEhBVkVfR0VURU5WIDEvDQohIHMvI3VuZGVmIEhBVkVfUFVURU5WLyNkZWZpbmUgSEFWRV9Q
VVRFTlYgMS8NCiEgcy8jdW5kZWYgSEFWRV9TVFJDSFIvI2RlZmluZSBIQVZFX1NUUkNIUiAxLw0K
ISBzLyN1bmRlZiBIQVZFX1NUUkNBU0VDTVAvI2RlZmluZSBIQVZFX1NUUkNBU0VDTVAgMS8NCiEg
cy8jdW5kZWYgSEFWRV9TRVRMT0NBTEUvI2RlZmluZSBIQVZFX1NFVExPQ0FMRSAxLw0KISBzLyN1
bmRlZiBIQVZFX1NUUkVSUk9SLyNkZWZpbmUgSEFWRV9TVFJFUlJPUiAxLw0KISBzLyN1bmRlZiBI
QVZFX1VOQU1FLyNkZWZpbmUgSEFWRV9VTkFNRSAxLw0KISANCiEgcyxeI3VuZGVmIC4qJCwvKiAm
ICovLA0KSW5kZXg6IGdkYi9kYmdjb20uYw0KZGlmZiAtYyBudWwgZ2RiL2RiZ2NvbS5jOjEuMQ0K
KioqIG51bAlXZWQgRGVjIDIzIDE3OjAyOjE2IDE5OTgNCi0tLSBnZGIvZGJnY29tLmMJV2VkIERl
YyAyMyAxNjo1MzowNCAxOTk4DQoqKioqKioqKioqKioqKioNCioqKiAwICoqKioNCi0tLSAxLDEz
MjUgLS0tLQ0KKyAvKiAkSWQ6IGRiZ2NvbS5jLHYgMS4xIDE5OTgvMTIvMjMgMTU6NTM6MDUgUGll
cnJlIEV4cCAkICovDQorIC8qIG1vZGlmaWVkIGZvciB1c2Ugd2l0aCBGUEMgYW5kICovDQorIC8q
IGV4Y2VwdGlvbiBoYW5kbGluZyBzdXBwb3J0IGJ5IFBpZXJyZSBNdWxsZXIgKi8NCisgLyogQ29w
eXJpZ2h0IChDKSAxOTk4IERKIERlbG9yaWUsIHNlZSBDT1BZSU5HLkRKIGZvciBkZXRhaWxzICov
DQorIC8qIENvcHlyaWdodCAoQykgMTk5NyBESiBEZWxvcmllLCBzZWUgQ09QWUlORy5ESiBmb3Ig
ZGV0YWlscyAqLw0KKyAvKiBDb3B5cmlnaHQgKEMpIDE5OTYgREogRGVsb3JpZSwgc2VlIENPUFlJ
TkcuREogZm9yIGRldGFpbHMgKi8NCisgLyogQ29weXJpZ2h0IChDKSAxOTk1IERKIERlbG9yaWUs
IHNlZSBDT1BZSU5HLkRKIGZvciBkZXRhaWxzICovDQorICNpbmNsdWRlIDxsaWJjL3N0dWJzLmg+
DQorICNpbmNsdWRlIDxzdGRpby5oPg0KKyAjaW5jbHVkZSA8c3RkbGliLmg+DQorICNpbmNsdWRl
IDxzdHJpbmcuaD4NCisgI2luY2x1ZGUgPHVuaXN0ZC5oPg0KKyAjaW5jbHVkZSA8ZHBtaS5oPg0K
KyAjaW5jbHVkZSA8Y3J0MC5oPg0KKyAjaW5jbHVkZSA8Z28zMi5oPg0KKyAjaW5jbHVkZSA8c2ln
bmFsLmg+DQorICNpbmNsdWRlIDxzZXRqbXAuaD4NCisgI2luY2x1ZGUgLyogPGRlYnVnL2RiZ2Nv
bS5oPiAqLyAiZGJnY29tLmgiDQorICNpbmNsdWRlIDxzeXMvZXhjZXB0bi5oPg0KKyAjaW5jbHVk
ZSA8c3R1YmluZm8uaD4NCisgI2luY2x1ZGUgPHN5cy9mYXJwdHIuaD4NCisgI2luY2x1ZGUgPHN5
cy9mc2V4dC5oPg0KKyAjaW5jbHVkZSA8aW8uaD4NCisgDQorIGV4dGVybiBjaGFyIF9fbGliZGJn
X2lkZW50X3N0cmluZ1tdOw0KKyBzdGF0aWMgY2hhciAqaWQgPSBfX2xpYmRiZ19pZGVudF9zdHJp
bmc7DQorIA0KKyAjZGVmaW5lIE1FTV9IQU5ETEVfQ09VTlQJMjU2DQorICNkZWZpbmUgREVTQ1JJ
UFRPUl9DT1VOVAkxMjgNCisgI2RlZmluZSBET1NfREVTQ1JJUFRPUl9DT1VOVAkxMjgNCisgI2Rl
ZmluZSBEUE1JX0VYQ0VQVElPTl9DT1VOVCAgICAgMTgNCisgDQorICNkZWZpbmUgVVNFX0ZTRVhU
DQorICNkZWZpbmUgQ0xPU0VfVU5SRUdJU1RFUkVEX0ZJTEVTDQorIA0KKyAjaWZkZWYgRlBDDQor
ICN1bmRlZiBDTE9TRV9VTlJFR0lTVEVSRURfRklMRVMNCisgI2VuZGlmDQorIC8qIGRlYnVnIHNw
bGl0dGVkIGludG8gMyBwYXJ0cyAqLw0KKyAjZGVmaW5lIERFQlVHX0FMTF9EQkdDT00NCisgDQor
ICNpZmRlZiBERUJVR19BTExfREJHQ09NDQorIC8qIGdlbmVyYWwgZGVidWcgaW5mb3MgKi8NCisg
I2RlZmluZSBERUJVR19EQkdDT00NCisgLyogZmlsZXMgb3Blbi9jbG9zZSBpbmZvcyAqLw0KKyAj
ZGVmaW5lIERFQlVHX0RCR0NPTV9GSUxFUw0KKyAvKiBleGNlcHRpb25zIGluZm9zICovDQorICNk
ZWZpbmUgREVCVUdfRVhDRVBUSU9OUw0KKyAjZW5kaWYgLyogREVCVUdfQUxMX0RCR0NPTSAqLw0K
KyANCisgbG9uZyBtZW1faGFuZGxlc1tNRU1fSEFORExFX0NPVU5UXTsNCisgdW5zaWduZWQgc2hv
cnQgZGVzY3JpcHRvcnNbREVTQ1JJUFRPUl9DT1VOVF07DQorIHVuc2lnbmVkIHNob3J0IGRvc19k
ZXNjcmlwdG9yc1tET1NfREVTQ1JJUFRPUl9DT1VOVF07DQorIA0KKyAvKiB0aGVzZSBhbGwgbmVl
ZCB0byBiZSBzdGF0aWMgYmVjYXVzZQ0KKyAgIHNzIGNhbiBiZSBkaWZmZXJlbnQgZnJvbSBkcyBp
biBkYmdzaWcgISEgKi8NCisgc3RhdGljIGludCBleGNlcF9zdGFja1sxMDAwXTsNCisgc3RhdGlj
IGludCBlcnJjb2RlLGNzLGVmbGFncyxlaXAsc3MsZXNwLHJldF9jcyxyZXRfZWlwOw0KKyBzdGF0
aWMgdm9pZCAqY3VyX3BvczsNCisgc3RhdGljIGludCBjaGlsZF9leGNlcHRpb25fbGV2ZWw7DQor
IA0KKyANCisgLyogQVJHU1VTRUQgKi8NCisgY2hhciAqKg0KKyBfX2NydDBfZ2xvYl9mdW5jdGlv
bihjaGFyICpmb28pDQorIHsNCisgICBpZCA9IDA7DQorICAgcmV0dXJuIDA7DQorIH0NCisgDQor
IEV4dGVybmFsRGVidWdnZXJJbmZvIGVkaTsNCisgVFNTIGFfdHNzOw0KKyBGUFVFbnZpcm9ubWVu
dCBmcHVlOw0KKyANCisgc3RhdGljIGptcF9idWYganVtcGVyOw0KKyANCisgc3RhdGljIGludCBt
eV9kcyxteV9jcyxhcHBfY3MsYXBwX2V4aXRfY3MsYXBwX2RzOw0KKyBzdGF0aWMgam1wX2J1ZiBs
b2FkX3N0YXRlOw0KKyANCisgc3RhdGljIGludCBuc2V0LCBicmVha2hhbmRsZVs0XTsNCisgDQor
IHN0YXRpYyBfX2RwbWlfcGFkZHIgb3VyX2hhbmRsZXJbRFBNSV9FWENFUFRJT05fQ09VTlRdLGFw
cF9oYW5kbGVyW0RQTUlfRVhDRVBUSU9OX0NPVU5UXTsNCisgDQorICNpZmRlZiBERUJVR19FWENF
UFRJT05TDQorIHR5cGVkZWYNCisgICBzdHJ1Y3Qgew0KKyAgICBzaG9ydCBleGNwX2NzOw0KKyAg
ICBpbnQgICBleGNwX2VpcDsNCisgICAgc2hvcnQgZXhjcF9uYjsNCisgICAgfSB0ZXhjcF9pbmZv
Ow0KKyANCisgc3RhdGljIHRleGNwX2luZm8gZXhjcF9pbmZvWzIwXTsNCisgc3RhdGljIGludCBl
eGNwX2luZGV4Ow0KKyBzdGF0aWMgaW50IGV4Y3BfY291bnQ7DQorIHN0YXRpYyBpbnQgcmVkaXJf
ZXhjcF9jb3VudDsNCisgI2VuZGlmDQorIA0KKyBzdGF0aWMgdm9pZCBzdG9yZV9mcHVfZW52ICh2
b2lkKQ0KKyB7DQorICAgdW5zaWduZWQgY2hhciB0b3A7DQorICAgaW50IGk7DQorICAgaW50IHZh
bGlkX25iID0gMDsNCisgICBsb25nIGRvdWJsZSBkOw0KKyAgIGFzbSgiZnN0ZW52ICUwIiA6ICI9
ZyIgKGZwdWUpKTsNCisgICB0b3AgPSAoZnB1ZS5zdGF0dXMgJiBGUFVfVE9QX01BU0spID4+IEZQ
VV9UT1BfU0hJRlQ7DQorICAgZm9yIChpPTA7aTw4O2krKykNCisgICAgIHsNCisgICAgIC8qIHRh
ZyBpcyBhIGFycmF5IG9mIDggMiBiaXRzIHRoYXQgY29udGFpbiBpbmZvIGFib3V0IEZQVSByZWdp
c3RlcnMNCisgICAgICAgIHN0KDApIGlzIHJlZ2lzdGVyKHRvcCkgYW5kIHN0KDEpIGlzIHJlZ2lz
dGVyICh0b3ArMSkgLi4uICovDQorICAgICAgZnB1ZS5pc3ZhbGlkW2ldID0gKChmcHVlLnRhZyA+
PiAoKCgoOCt0b3ApK2kpICYgNykgPDwgMSkpICYgMykgIT0gMzsNCisgICAgIH0NCisgICAvKiB0
byBzdG9yZSB0aGUgZnB1IHJlZ2lzdGVycyB3ZSB1c2UgZnN0cHQgYW5kIHB1c2ggdGhlbSBhZ2Fp
biBhZnRlciAqLw0KKyAgIC8qIHRoaXMgY29kZSBhc3N1bWVzIHRoYXQgdGhlIG9ubHkgdmFsaWQg
cmVncyBhcmUNCisgICAgICBmcm9tIHRvcCB0byBiYXNlLCBpcyB0aGlzIGFsbHdheXMgdHJ1ZSA/
DQorICAgICAgZm9yIG1lIGl0IGlzIHRoZSB2ZXJ5IGRlZmluaXRpb24gb2YgYSBzdGFjayAqLw0K
KyAgIGZvciAoaT0wO2k8ODtpKyspDQorICAgICBpZiAoZnB1ZS5pc3ZhbGlkW2ldKQ0KKyAgICAg
ICB7DQorICAgICAgICBhc20oImZzdHB0ICUwIiA6ICI9ZyIgKGQpKTsNCisgICAgICAgIGZwdWUu
c3RbaV09ZDsNCisgICAgICAgfQ0KKyAgIGZvciAoaT03O2k+PTA7aS0tKQ0KKyAgICAgaWYgKGZw
dWUuaXN2YWxpZFtpXSkNCisgICAgICAgew0KKyAgICAgICAgZD1mcHVlLnN0W2ldOw0KKyAgICAg
ICAgYXNtKCJmbGR0ICUwIiA6ICA6ICJnIiAoZCkpOw0KKyAgICAgICB9DQorIH0NCisgDQorIHN0
YXRpYyB2b2lkIHJlc3RvcmVfZnB1X2VudiAodm9pZCkNCisgew0KKyAgIGludCBpOw0KKyAgIGxv
bmcgZG91YmxlIGQ7DQorICAgLyogdG8gc3RvcmUgdGhlIGZwdSByZWdpc3RlcnMgd2UgdXNlIGZz
dHB0IGFuZCBwdXNoIHRoZW0gYWdhaW4gYWZ0ZXIgKi8NCisgICBmb3IgKGk9MDtpPDg7aSsrKQ0K
KyAgICAgaWYgKGZwdWUuaXN2YWxpZFtpXSkNCisgICAgICAgew0KKyAgICAgICAgYXNtKCJmc3Rw
dCAlMCIgOiAiPWciIChkKSk7DQorICAgICAgIH0NCisgICBmb3IgKGk9NztpPj0wO2ktLSkNCisg
ICAgIGlmIChmcHVlLmlzdmFsaWRbaV0pDQorICAgICAgIHsNCisgICAgICAgIGQ9ZnB1ZS5zdFtp
XTsNCisgICAgICAgIGFzbSgiZmxkdCAlMCIgOiAgOiAiZyIgKGQpKTsNCisgICAgICAgfQ0KKyAg
IGFzbSgiZmxkZW52ICUwIiA6ICA6ICJnIiAoZnB1ZSkpOw0KKyB9DQorIA0KKyBzdGF0aWMgaW50
IF9EUE1Jc2V0QnJlYWsodW5zaWduZWQgc2hvcnQgc2l6ZXR5cGUsIHVuc2lnbmVkIHZhZGRyKQ0K
KyB7DQorIAlpbnQgaGFuZGxlOw0KKyANCisgCWFzbSB2b2xhdGlsZSgJCQkJCQkgICAgICAgIlxu
XA0KKyAJICAgIG1vdncgICAlMSwlJWR4CQkJCQkJXG5cDQorIAkgICAgbW92bCAgICUyLCUlZWN4
CQkJCQkJXG5cDQorIAkgICAgbW92bCAgICUlZWN4LCUlZWJ4CQkJCQkJXG5cDQorIAkgICAgc2hy
bCAgICQxNiwlJWVieAkJCQkJCVxuXA0KKyAJICAgIG1vdncgICAkMHgwYjAwLCUlYXgJCQkJCQlc
blwNCisgCSAgICBpbnQgICAgJDB4MzEJCQkJCQlcblwNCisgCSAgICBqbmMgICAgM2YJCQkJCQkJ
XG5cDQorIAkgICAgeG9ybCAgICUlZWJ4LCUlZWJ4CQkJCQkJXG5cDQorIAkgICAgZGVjbCAgICUl
ZWJ4CQkJCQkJXG5cDQorIAkgICAgam1wICAgIDFmCQkJCQkJCVxuXA0KKyAzOiAgICAgICAgICBt
b3Z6d2wgJSVieCwlJWVieAkJCQkJCVxuXA0KKyAxOgkgICAgbW92bCAgICUlZWJ4LCUwCQkJCQkJ
XG5cDQorIAkgICAgIg0KKyAJICAgIDogIj1nIiAoaGFuZGxlKQkJCS8qIG91dHB1dHMgKi8NCisg
CSAgICA6ICJnIiAoc2l6ZXR5cGUpLCAiZyIgICh2YWRkcikJLyogaW5wdXRzICovDQorIAkgICAg
OiAiYXgiLCAiYngiLCAiY3giLCAiZHgiCQkvKiByZWdzIHVzZWQgKi8NCisgCSk7DQorIAlyZXR1
cm4gaGFuZGxlOw0KKyB9DQorIA0KKyBzdGF0aWMgaW50IF9EUE1JY2FuY2VsQnJlYWsoaW50IGhh
bmRsZSkNCisgew0KKyAJdW5zaWduZWQgc3RhdGU7DQorIA0KKyAJYXNtIHZvbGF0aWxlKAkJCQkJ
CSAgICAgICAiXG5cDQorIAkgICAgbW92bCAgICUxLCUlZWJ4CQkJCQkJXG5cDQorIAkgICAgbW92
dyAgICQweDBiMDIsJSVheAkJCQkJCVxuXA0KKyAJICAgIGludCAgICAkMHgzMQkJCQkJCVxuXA0K
KyAJICAgIGpuYyAgICAyZgkJCQkJCQlcblwNCisgCSAgICB4b3JsICAgJSVlYXgsJSVlYXggICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblwNCisgMjoJICAgIGFuZGwg
ICAkMSwlJWVheAkJCQkJCVxuXA0KKyAJICAgIHB1c2hsICAlJWVheAkJCQkJCVxuXA0KKyAJICAg
IG1vdncgICAkMHgwYjAxLCUlYXgJCQkJCQlcblwNCisgCSAgICBpbnQgICAgJDB4MzEJCQkJCQlc
blwNCisgCSAgICBwb3BsICAgJTAJCQkJCQkJXG5cDQorIAkgICAgIg0KKyAJICAgIDogIj1nIiAo
c3RhdGUpCQkJLyogb3V0cHV0cyAqLw0KKyAJICAgIDogImciICAoaGFuZGxlKQkJCS8qIGlucHV0
cyAqLw0KKyAJICAgIDogImF4IiwgImJ4IgkJCS8qIHJlZ3MgdXNlZCAqLw0KKyAJKTsNCisgCXJl
dHVybiBzdGF0ZTsNCisgfQ0KKyANCisgLyogQ2FuJ3QgYmUgc3RhdGljIGJlY2F1c2UgY2FsbGVk
IGluIGFzbSBiZWxvdzsgLU8zIGlubGluZXMgaWYgc3RhdGljICovDQorIHZvaWQgX3NldF9icmVh
a19EUE1JKHZvaWQpOw0KKyB2b2lkIF9zZXRfYnJlYWtfRFBNSSh2b2lkKQ0KKyB7DQorICAgaW50
IGk7DQorICAgdW5zaWduZWQgZXh0cmFjdDsNCisgICB1bnNpZ25lZCBzaG9ydCBzaXpldHlwZTsN
CisgICB1bnNpZ25lZCBsb25nIHZiYXNlOw0KKyAgIA0KKyAgIGlmKF9fZHBtaV9nZXRfc2VnbWVu
dF9iYXNlX2FkZHJlc3MoX19kamdwcF9hcHBfRFMsICZ2YmFzZSkgPT0gLTEpDQorICAgICByZXR1
cm47DQorICAgZXh0cmFjdCA9IGVkaS5kcls3XSA+PiAxNjsNCisgICBuc2V0ID0gMDsNCisgDQor
ICAgZm9yKGk9MDtpPDQ7aSsrKQ0KKyAgICAgaWYoIChlZGkuZHJbN10gPj4gKGkqMikpJjMgKSB7
CQkvKiBlbmFibGVkPyAqLw0KKyAgICAgICBzaXpldHlwZSA9IChleHRyYWN0ID4+IChpKjQpKSAm
IDM7ICAgIC8qIGV4dHJhY3QgdGhlIHR5cGUgKi8NCisgICAgICAgaWYoc2l6ZXR5cGUgPT0gMykg
c2l6ZXR5cGUgPSAyOyAgICAgICAvKiBjb252ZXJ0IGZvciBEUE1JIGJyYWluIGRhbWFnZSAqLw0K
KyAgICAgICBzaXpldHlwZSA9IChzaXpldHlwZSA8PCA4KSArICgoZXh0cmFjdCA+PiAoaSo0KzIp
KSAmIDMpICsgMTsgLyogJiBzaXplICovDQorICAgICAgIGJyZWFraGFuZGxlW2ldID0gX0RQTUlz
ZXRCcmVhayhzaXpldHlwZSwgZWRpLmRyW2ldK3ZiYXNlKTsNCisgICAgICAgaWYoYnJlYWtoYW5k
bGVbaV0gPT0gLTEpDQorICAgICAgICAgcHJpbnRmKCJFcnJvciBhbGxvY2F0aW5nIERQTUkgYnJl
YWtwb2ludCBhdCBhZGRyZXNzIDB4JTA4bHhcbiIsZWRpLmRyW2ldKTsNCisgICAgICAgZWxzZQ0K
KyAgICAgICAgIG5zZXQrKzsNCisgICAgIH0gZWxzZQ0KKyAgICAgICBicmVha2hhbmRsZVtpXSA9
IC0xOw0KKyAgIHJldHVybjsNCisgfQ0KKyANCisgLyogQ2FuJ3QgYmUgc3RhdGljIGJlY2F1c2Ug
Y2FsbGVkIGluIGFzbSBiZWxvdzsgLU8zIGlubGluZXMgaWYgc3RhdGljICovDQorIHZvaWQgX2Ns
ZWFyX2JyZWFrX0RQTUkodm9pZCk7DQorIHZvaWQgX2NsZWFyX2JyZWFrX0RQTUkodm9pZCkNCisg
ew0KKyAgIGludCBpLGJ0Ow0KKyANCisgICBpZighbnNldCkgew0KKyAgICAgZWRpLmRyWzZdID0g
MDsNCisgICAgIHJldHVybjsNCisgICB9DQorIA0KKyAgIGJ0ID0gMDsNCisgICBmb3IoaT0zO2k+
PTA7aS0tKSB7DQorICAgICBidCA9IGJ0IDw8IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvKiBTaGlmdCBmb3IgbmV4dCBiaXQgKi8NCisgICAgIGlmKGJyZWFraGFuZGxlW2ldICE9IC0x
KQ0KKyAgICAgICBidCB8PSBfRFBNSWNhbmNlbEJyZWFrKGJyZWFraGFuZGxlW2ldKTsgIC8qIFNl
dCBsb3cgYml0IGlmIGFjdGl2ZSAqLw0KKyAgIH0NCisgDQorICAgZWRpLmRyWzZdID0gYnQ7DQor
IH0NCisgDQorIHN0YXRpYyBfX2RwbWlfcGFkZHIgb2xkX2kzMSxvbGRfaTIxLHVzZXJfaTMxLHVz
ZXJfaTIxOw0KKyBzdGF0aWMgaW50IHVzZXJfaW50X3NldCA9IDA7DQorIHN0YXRpYyBfX2RwbWlf
cGFkZHIgbXlfaTksdXNlcl9pOSxteV9pOCx1c2VyX2k4Ow0KKyANCisgc3RhdGljIHZvaWQgaG9v
a19kcG1pKHZvaWQpDQorIHsNCisgICBpbnQgaTsNCisgICBfX2RwbWlfcGFkZHIgbmV3X2ludDsN
CisgICBleHRlcm4gdm9pZCBpMjFfaG9vayh2b2lkKSxpMzFfaG9vayh2b2lkKTsNCisgDQorICAg
X19kcG1pX2dldF9wcm90ZWN0ZWRfbW9kZV9pbnRlcnJ1cHRfdmVjdG9yKDB4MjEsICZvbGRfaTIx
KTsNCisgICBfX2RwbWlfZ2V0X3Byb3RlY3RlZF9tb2RlX2ludGVycnVwdF92ZWN0b3IoMHgzMSwg
Jm9sZF9pMzEpOw0KKyAgIC8qIFNhdmUgb3VyIGN1cnJlbnQgaW50ZXJydXB0IHZlY3RvcnMgZm9y
IHRoZSBrZXlib2FyZCBhbmQgdGhlIHRpbWVyICovDQorICAgX19kcG1pX2dldF9wcm90ZWN0ZWRf
bW9kZV9pbnRlcnJ1cHRfdmVjdG9yKDB4MDksICZteV9pOSk7DQorICAgX19kcG1pX2dldF9wcm90
ZWN0ZWRfbW9kZV9pbnRlcnJ1cHRfdmVjdG9yKDB4MDgsICZteV9pOCk7DQorIA0KKyAgIGFzbSgi
bW92ICUlY3MsJTAiIDogIj1nIiAobmV3X2ludC5zZWxlY3RvcikgKTsNCisgICBuZXdfaW50Lm9m
ZnNldDMyID0gKHVuc2lnbmVkIGxvbmcpaTIxX2hvb2s7DQorICAgX19kcG1pX3NldF9wcm90ZWN0
ZWRfbW9kZV9pbnRlcnJ1cHRfdmVjdG9yKDB4MjEsICZuZXdfaW50KTsNCisgICBuZXdfaW50Lm9m
ZnNldDMyID0gKHVuc2lnbmVkIGxvbmcpaTMxX2hvb2s7DQorICAgX19kcG1pX3NldF9wcm90ZWN0
ZWRfbW9kZV9pbnRlcnJ1cHRfdmVjdG9yKDB4MzEsICZuZXdfaW50KTsNCisgDQorICAgLyogSWYg
d2UgaGF2ZSBjYWxsZWQgYWxyZWFkeSB1bmhvb2tfZHBtaSwgdGhlIHVzZXIgaW50ZXJydXB0DQor
ICAgICAgdmVjdG9ycyBmb3IgdGhlIGtleWJvYXJkIGFuZCB0aGUgdGltZXIgYXJlIHZhbGlkLiAq
Lw0KKyAgIGlmICh1c2VyX2ludF9zZXQpDQorICAgew0KKyAgICAgX19kcG1pX3NldF9wcm90ZWN0
ZWRfbW9kZV9pbnRlcnJ1cHRfdmVjdG9yKDB4MDksICZ1c2VyX2k5KTsNCisgICAgIF9fZHBtaV9z
ZXRfcHJvdGVjdGVkX21vZGVfaW50ZXJydXB0X3ZlY3RvcigweDA4LCAmdXNlcl9pOCk7DQorICAg
ICBfX2RwbWlfc2V0X3Byb3RlY3RlZF9tb2RlX2ludGVycnVwdF92ZWN0b3IoMHgyMSwgJnVzZXJf
aTIxKTsNCisgICAgIF9fZHBtaV9zZXRfcHJvdGVjdGVkX21vZGVfaW50ZXJydXB0X3ZlY3Rvcigw
eDMxLCAmdXNlcl9pMzEpOw0KKyAgIH0NCisgICBmb3IgKGk9MDtpPERQTUlfRVhDRVBUSU9OX0NP
VU5UO2krKykNCisgICAgIHsNCisgICAgICAgX19kcG1pX2dldF9wcm9jZXNzb3JfZXhjZXB0aW9u
X2hhbmRsZXJfdmVjdG9yKGksJm91cl9oYW5kbGVyW2ldKTsNCisgICAgICAgLyoNCisgICAgICAg
ICBpZiAoYXBwX2hhbmRsZXJbaV0ub2Zmc2V0MzIgJiYgYXBwX2hhbmRsZXJbaV0uc2VsZWN0b3Ip
DQorICAgICAgICAgX19kcG1pX3NldF9wcm9jZXNzb3JfZXhjZXB0aW9uX2hhbmRsZXJfdmVjdG9y
KGksJmFwcF9oYW5kbGVyW2ldKTsNCisgICAgICAgKi8NCisgICAgIH0NCisgfQ0KKyANCisgLyog
U2V0IGFuIGV4Y2VwdGlvbiBoYW5kbGVyICovDQorIC8qIHN0b3JlcyBpdCBpbnRvIGFwcF9oYW5k
bGVyIGlmIHNlbGVjdG9yIGlzIGFwcF9jcyAgKi8NCisgDQorIGFzbSgiXG5cDQorICAgICAgICAg
LnRleHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFxuXA0KKyAgICAgICAgIC5hbGlnbiAgMiwweDkwICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblwNCisgX2NoYW5nZV9leGNlcHRpb25faGFu
ZGxlcjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cDQor
ICAgICAgICAgcHVzaGwgICAlZWF4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFxuXA0KKyAgICAgICAgIHB1c2ggICAgJWVzICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblwNCisgICAgICAgICBwdXNo
ICAgICVkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXG5cDQorICAgICAgICAgLmJ5dGUgICAweDJlICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFxuXA0KKyAgICAgICAgIG1vdncgICAgX215X2RzLCVh
eCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblwNCisgICAg
ICAgICBtb3Z3ICAgICVheCwlZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXG5cDQorICAgICAgICAgbW92dyAgICAlYXgsJWVzICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXA0KKyAgICAgICAgIG1vdnpibCAl
YmwsJWVheCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
blwNCisgICAgICAgICBpbXVsbCAgJDgsJWVheCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXG5cDQorICAgICAgICAgYWRkbCAgJF9hcHBfaGFuZGxlciwl
ZWF4ICAvKiBvbmx5IHJldGFpbiBoYW5kbGVycyAqLyAgICAgICAgICAgIFxuXA0KKyAgICAgICAg
IGNtcHcgICBfYXBwX2NzLCVjeCAvKiBmb3IgdGhlIG1haW4gYXBwICAgICAqLyAgICAgICAgICAg
ICAgICAgICBcblwNCisgICAgICAgICBqbmUgICAgX25vdF9pbl9jdXJyZW50X2FwcCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cDQorICAgICAgICAgbW92bCAgJWVjeCw0
KCVlYXgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXA0K
KyAgICAgICAgIG1vdmwgICVlZHgsKCVlYXgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcblwNCisgX25vdF9pbl9jdXJyZW50X2FwcDogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cDQorICAgICAgICAgc3Vi
bCAgJF9hcHBfaGFuZGxlciwlZWF4IC8qIGFsbHdheXMgcmVzdG9yZSBvdXIgaGFuZGxlciAqLyAg
ICAgIFxuXA0KKyAgICAgICAgIGFkZGwgICRfb3VyX2hhbmRsZXIsJWVheCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cDQorICAgICAgICAgbW92bCAgNCglZWF4KSwl
ZWN4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXA0KKyAg
ICAgICAgIG1vdmwgKCVlYXgpLCVlZHggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcblwNCisgICAgICAgICBwb3AgICAlZHMgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cDQorICAgICAgICAgcG9wICAg
JWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFxuXA0KKyAgICAgICAgIHBvcGwgICVlYXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcblwNCisgICAgICAgICByZXQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iDQorICk7DQor
IA0KKyAvKiBHZXQgYW4gZXhjZXB0aW9uIGhhbmRsZXIgKi8NCisgLyogKHJldHVybnMgYXBwX2hh
bmRsZXIgaWYgc2V0IGRpc2FibGVkIGJlY2F1c2UgY3JlYXRlcyBwcm9ibGVtcyAoUE0pKSAgKi8N
CisgDQorIGFzbSgiXG5cDQorICAgICAgICAgLnRleHQgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXA0KKyAgICAgICAgIC5hbGlnbiAg
MiwweDkwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
blwNCisgX2dldF9leGNlcHRpb25faGFuZGxlcjogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXG5cDQorICAgICAgICAgLmJ5dGUgMHgyZSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXA0KKyAgICAgICAg
IGxqbXAgX29sZF9pMzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcblwNCisgICAgICAgICAiKTsNCisgDQorIC8qIHRoaXMgY3JlYXRlcyBwcm9ibGVt
cyAhIFdIWSA/Pw0KKyBhc20oIlxuXA0KKyAgICAgICAgIC50ZXh0ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblwNCisgICAgICAgICAu
YWxpZ24gIDIsMHg5MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXG5cDQorIF9nZXRfZXhjZXB0aW9uX2hhbmRsZXI6ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXA0KKyAgICAgICAgIHB1c2hsICAgJWVheCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblwNCisg
ICAgICAgICBwdXNoICAgICVlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXG5cDQorICAgICAgICAgcHVzaCAgICAlZHMgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXA0KKyAgICAgICAgIC5ieXRl
ICAgMHgyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcblwNCisgICAgICAgICBtb3Z3ICAgIF9teV9kcywlYXggICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXG5cDQorICAgICAgICAgbW92dyAgICAlYXgsJWRzICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXA0KKyAgICAg
ICAgIG1vdncgICAgJWF4LCVlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcblwNCisgICAgICAgICBtb3Z6YmwgJWJsLCVlYXggICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cDQorICAgICAgICAgaW11bGwgICQ4
LCVlYXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxu
XA0KKyAgICAgICAgIGFkZGwgICRfYXBwX2hhbmRsZXIsJWVheCAgIG9ubHkgcmV0YWluIGhhbmRs
ZXJzICAgICAgICAgICAgIFxuXA0KKyAgICAgICAgIGNtcHcgICQwLDQoJWVheCkgICAgICAgICAg
IGZvciB0aGUgbWFpbiBhcHAgICAgICAgICAgICAgICAgIFxuXA0KKyAgICAgICAgIGplICAgIF9h
cHBfZXhjZXB0aW9uX25vdF9zZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
blwNCisgICAgICAgICBjbXBsICAkMCwoJWVheCkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXG5cDQorICAgICAgICAgamUgICAgX2FwcF9leGNlcHRpb25f
bm90X3NldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXA0KKyAgICAgICAg
IG1vdmwgICglZWF4KSwlZWR4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcblwNCisgICAgICAgICBtb3Z3ICA0KCVlYXgpLCVjeCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cDQorICAgICAgICAgcG9wICAgICVkcyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXA0K
KyAgICAgICAgIHBvcCAgICAlZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcblwNCisgICAgICAgICBwb3BsICAgJWVheCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cDQorICAgICAgICAgcmV0
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFxuXA0KKyBfYXBwX2V4Y2VwdGlvbl9ub3Rfc2V0OiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcblwNCisgICAgICAgICBwb3AgICAlZHMgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cDQorICAg
ICAgICAgcG9wICAgJWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFxuXA0KKyAgICAgICAgIHBvcGwgICVlYXggICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblwNCisgICAgICAgICAuYnl0ZSAw
eDJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XG5cDQorICAgICAgICAgbGptcCBfb2xkX2kzMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFxuXA0KKyAgICAgICAgIHJldCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiINCisgKTsgKi8N
CisgDQorIC8qIENoYW5nZSBhIGhhbmRsZSBpbiB0aGUgbGlzdDogRUFYIGlzIHRoZSBvbGQgaGFu
ZGxlLCBFRFggaXMgdGhlIG5ldyAqLw0KKyAvKiBmb3IgY2hhbmdpbmcgYSB2YWx1ZSwgd2UgbmVl
ZCBvdXIgZHMsIGJlY2F1c2UgY3MgaGFzIG5vIHdyaXRlIGFjY2VzcyAqLw0KKyBhc20oCQkJCQkJ
ICAgICAgIAkJCSJcblwNCisgCS50ZXh0CQkJCQkJCQlcblwNCisgCS5hbGlnbiAgMiwweDkwCQkJ
CQkJCVxuXA0KKyBfY2hhbmdlX2hhbmRsZToJCQkJCQkJCVxuXA0KKyAJcHVzaGwJJWVjeAkJCQkJ
CQlcblwNCisgCXhvcmwJJWVjeCwlZWN4CQkJCQkJXG5cDQorIENMMToJCQkJCQkJCQlcblwNCisg
CS5ieXRlCTB4MmUgCQkJCQkJCVxuXA0KKyAJY21wbAklZWF4LF9tZW1faGFuZGxlcygsJWVjeCw0
KQkJCQlcblwNCisgCWpuZQlDTDIJCQkJCQkJXG5cDQorIAlwdXNoCSVkcwkJCQkJCQlcblwNCisg
CS5ieXRlCTB4MmUJCQkJCQkJXG5cDQorIAltb3Z3CV9teV9kcywlYXgJCQkJCQlcblwNCisgCW1v
dncJJWF4LCVkcwkJCQkJCQlcblwNCisgCW1vdmwJJWVkeCxfbWVtX2hhbmRsZXMoLCVlY3gsNCkJ
CQkJXG5cDQorIAlwb3AJJWRzCQkJCQkJCVxuXA0KKyAJcG9wbAklZWN4CQkJCQkJCVxuXA0KKyAJ
cmV0CQkJCQkJCQlcblwNCisgQ0wyOgkJCQkJCQkJCVxuXA0KKyAJaW5jbAklZWN4CQkJCQkJCVxu
XA0KKyAJY21wbAkkMjU2LCVlY3gJLyogTUVNX0hBTkRMRV9DT1VOVCAqLwkJCVxuXA0KKyAJamwJ
Q0wxCQkJCQkJCVxuXA0KKyAJcG9wbAklZWN4CQkJCQkJCVxuXA0KKyAJcmV0CQkJCQkJCQlcbiIN
CisgKTsNCisgDQorIC8qIENoYW5nZSBhIGRlc2NyaXB0b3IgaW4gdGhlIGxpc3Q6IEFYIGlzIHRo
ZSBvbGQsIERYIGlzIHRoZSBuZXcgKi8NCisgLyogZm9yIGNoYW5naW5nIGEgdmFsdWUsIHdlIG5l
ZWQgb3VyIGRzLCBiZWNhdXNlIGNzIGhhcyBubyB3cml0ZSBhY2Nlc3MgKi8NCisgYXNtKAkJCQkJ
CSAgICAgICAJCQkiXG5cDQorIAkudGV4dAkJCQkJCQkJXG5cDQorIAkuYWxpZ24gIDIsMHg5MAkJ
CQkJCQlcblwNCisgX2NoYW5nZV9kZXNjcmlwdG9yOgkJCQkJCQlcblwNCisgCXB1c2hsCSVlY3gJ
CQkJCQkJXG5cDQorIAlwdXNobAklZWF4CQkJCQkJCVxuXA0KKyAJeG9ybAklZWN4LCVlY3gJCQkJ
CQlcblwNCisgQ0wzOgkJCQkJCQkJCVxuXA0KKyAJLmJ5dGUJMHgyZSAJCQkJCQkJXG5cDQorIAlj
bXB3CSVheCxfZGVzY3JpcHRvcnMoLCVlY3gsMikJCQkJXG5cDQorIAlqbmUJQ0w0CQkJCQkJCVxu
XA0KKyAJcHVzaAklZHMJCQkJCQkJXG5cDQorIAkuYnl0ZQkweDJlCQkJCQkJCVxuXA0KKyAJbW92
dwlfbXlfZHMsJWF4CQkJCQkJXG5cDQorIAltb3Z3CSVheCwlZHMJCQkJCQkJXG5cDQorIAltb3Z3
CSVkeCxfZGVzY3JpcHRvcnMoLCVlY3gsMikJCQkJXG5cDQorIAlwb3AJJWRzCQkJCQkJCVxuXA0K
KyAJcG9wbAklZWF4CQkJCQkJCVxuXA0KKyAJcG9wbAklZWN4CQkJCQkJCVxuXA0KKyAJcmV0CQkJ
CQkJCQlcblwNCisgQ0w0OgkJCQkJCQkJCVxuXA0KKyAJaW5jbAklZWN4CQkJCQkJCVxuXA0KKyAJ
Y21wbAkkMTI4LCVlY3gJLyogREVTQ1JJUFRPUl9DT1VOVCAqLwkJCVxuXA0KKyAJamwJQ0wzCQkJ
CQkJCVxuXA0KKyAJcG9wbAklZWF4CQkJCQkJCVxuXA0KKyAJcG9wbAklZWN4CQkJCQkJCVxuXA0K
KyAJcmV0CQkJCQkJCQlcbiINCisgKTsNCisgDQorIC8qIEFkZCBkZXNjcmlwdG9ycyB0byB0aGUg
bGlzdDogQVggaXMgdGhlIGZpcnN0LCBDWCBpcyB0aGUgY291bnQgKi8NCisgYXNtKAkJCQkJCQkJ
CSJcblwNCisgCS50ZXh0CQkJCQkJCQlcblwNCisgCS5hbGlnbiAgMiwweDkwCQkJCQkJCVxuXA0K
KyBfYWRkX2Rlc2NyaXB0b3JzOgkJCQkJCQlcblwNCisgCXB1c2hsCSVlZHgJCQkJCQkJXG5cDQor
IAlwdXNobAklZWN4CQkJCQkJCVxuXA0KKyAJcHVzaGwJJWVieAkJCQkJCQlcblwNCisgCXB1c2hs
CSVlYXgJCQkJCQkJXG5cDQorIAltb3Z3CSQweDAwMDMsJWF4CQkJCQkJXG5cDQorIAlwdXNoZgkJ
CQkJCQkJXG5cDQorIAkuYnl0ZQkweDJlCQkJCQkJCVxuXA0KKyAJbGNhbGwJX29sZF9pMzEJCQkJ
CQlcblwNCisgCW1vdncJJWF4LCVieAkJCQkJCQlcblwNCisgCXBvcGwJJWVheAkJCQkJCQlcblwN
CisgCXB1c2hsCSVlYXgJCQkJCQkJXG5cDQorIAltb3Z3CSVheCwlZHgJCQkJCQkJXG5cDQorIAl4
b3J3CSVheCwlYXgJCQkJCQkJXG5cDQorIENMNToJCQkJCQkJCQlcblwNCisgCWNhbGwJX2NoYW5n
ZV9kZXNjcmlwdG9yCQkJCQlcblwNCisgCWFkZHcJJWJ4LCVkeAkJCQkJCQlcblwNCisgCWxvb3AJ
Q0w1CQkJCQkJCVxuXA0KKyAJcG9wbAklZWF4CQkJCQkJCVxuXA0KKyAJcG9wbAklZWJ4CQkJCQkJ
CVxuXA0KKyAJcG9wbAklZWN4CQkJCQkJCVxuXA0KKyAJcG9wbAklZWR4CQkJCQkJCVxuXA0KKyAJ
cmV0CQkJCQkJCQlcbiINCisgKTsNCisgDQorIC8qIENoYW5nZSBhIGRvc19kZXNjcmlwdG9yIGlu
IHRoZSBsaXN0OiBBWCBpcyB0aGUgb2xkLCBEWCBpcyB0aGUgbmV3ICovDQorIC8qIGZvciBjaGFu
Z2luZyBhIHZhbHVlLCB3ZSBuZWVkIG91ciBkcywgYmVjYXVzZSBjcyBoYXMgbm8gd3JpdGUgYWNj
ZXNzICovDQorIGFzbSgJCQkJCQkgICAgICAgCQkJIlxuXA0KKyAJLnRleHQJCQkJCQkJCVxuXA0K
KyAJLmFsaWduICAyLDB4OTAJCQkJCQkJXG5cDQorIF9jaGFuZ2VfZG9zX2Rlc2NyaXB0b3I6CQkJ
CQkJCVxuXA0KKyAJcHVzaGwJJWVheAkJCQkJCQlcblwNCisgCXB1c2hsCSVlY3gJCQkJCQkJXG5c
DQorIAl4b3JsCSVlY3gsJWVjeAkJCQkJCVxuXA0KKyBDTDY6CQkJCQkJCQkJXG5cDQorIAkuYnl0
ZQkweDJlIAkJCQkJCQlcblwNCisgCWNtcHcJJWF4LF9kb3NfZGVzY3JpcHRvcnMoLCVlY3gsMikJ
CQkJXG5cDQorIAlqbmUJQ0w3CQkJCQkJCVxuXA0KKyAJcHVzaAklZHMJCQkJCQkJXG5cDQorIAku
Ynl0ZQkweDJlCQkJCQkJCVxuXA0KKyAJbW92dwlfbXlfZHMsJWF4CQkJCQkJXG5cDQorIAltb3Z3
CSVheCwlZHMJCQkJCQkJXG5cDQorIAltb3Z3CSVkeCxfZG9zX2Rlc2NyaXB0b3JzKCwlZWN4LDIp
CQkJCVxuXA0KKyAJcG9wCSVkcwkJCQkJCQlcblwNCisgCXBvcGwJJWVjeAkJCQkJCQlcblwNCisg
CXBvcGwJJWVheAkJCQkJCQlcblwNCisgCXJldAkJCQkJCQkJXG5cDQorIENMNzoJCQkJCQkJCQlc
blwNCisgCWluY2wJJWVjeAkJCQkJCQlcblwNCisgCWNtcGwJJDEyOCwlZWN4CS8qIERPU19ERVND
UklQVE9SX0NPVU5UICovCQlcblwNCisgCWpsCUNMNgkJCQkJCQlcblwNCisgCXBvcGwJJWVjeAkJ
CQkJCQlcblwNCisgCXBvcGwJJWVheAkJCQkJCQlcblwNCisgCXJldAkJCQkJCQkJXG4iDQorICk7
DQorIA0KKyAvKiBCVUdTOiBXZSBpZ25vcmUgdGhlIGV4Y2VwdGlvbiBoYW5kbGVycyBmb3IgdGhl
IGNoaWxkIHByb2Nlc3MsIHNvIHNpZ25hbHMNCisgICAgZG8gbm90IHdvcmsuICBXZSBhbHNvIGRp
c2FibGUgdGhlIGhvb2tpbmcgb2YgdGhlIG51bWVyaWMgY29wcm9jZXNzb3INCisgICAgSFcgaW50
ZXJydXB0LiAqLw0KKyANCisgLyogV2F0Y2ggc2V0IHNlbGVjdG9yIGJhc2UsIGlmIGl0IGlzIF9f
ZGpncHBfYXBwX0RTIHRoZW4gcmVzZXQgYnJlYWtwb2ludHMgKi8NCisgDQorIC8qIFdhdGNoIHRo
ZSBmb2xsb3dpbmcgRFBNSS1mdW5jdGlvbnM6IChhZGRlZCBieSBSSCkgIChzb21lIGJ5IFBNKQ0K
KyANCisgICAweDAwMDAgICA6IF9fZHBtaV9hbGxvY2F0ZV9sZHRfZGVzY3JpcHRvcnMNCisgICAw
eDAwMDEgICA6IF9fZHBtaV9mcmVlX2xkdF9kZXNjcmlwdG9yDQorICAgMHgwMDA3ICAgOiBfX2Rw
bWlfc2V0X3NlbGVjdG9yX2Jhc2VfYWRkcmVzcw0KKyAgICAgICAgICAgICAgaG9va2VkIGJlY2F1
c2UgdGhlIGhhcmR3YXJlIGJyZWFrcG9pbnRzIG5lZWQgdG8gYmUgcmVzZXQNCisgICAgICAgICAg
ICAgIGlmIHdlIGNoYW5nZSB0aGUgYmFzZSBhZGRyZXNzIG9mIF9fZGpncHBfYXBwX0RTDQorICAg
MHgwMDBBICAgOiBfX2RwbWlfY3JlYXRlX2FsaWFzX2Rlc2NyaXB0b3INCisgICANCisgICAweDAx
MDAgICA6IF9fZHBtaV9hbGxvY2F0ZV9kb3NfbWVtb3J5DQorICAgMHgwMTAxICAgOiBfX2RwbWlf
ZnJlZV9kb3NfbWVtb3J5DQorICAgDQorICAgMHgwMjAyICAgOiBfX2RwbWlfZ2V0X3Byb2Nlc3Nv
cl9leGNlcHRpb25faGFuZGxlcl92ZWN0b3INCisgICAweDAyMDMgICA6IF9fZHBtaV9zZXRfcHJv
Y2Vzc29yX2V4Y2VwdGlvbl9oYW5kbGVyX3ZlY3Rvcg0KKyAgIDB4MDIwNSAgIDogX19kcG1pX3Nl
dF9wcm90ZWN0ZWRfbW9kZV9pbnRlcnJ1cHQNCisgICAgICAgICAgICAgIChpbnQgMHgwOSBhbmQg
MHg3NSByZWplY3RlZCkNCisgICAgICAgICAgICAgIEN0cmwtQyB3aWxsIHRodXMgY3JlYXRlIGEg
U0lHSU5UIGluIHRoZSB0b3AgbGV2ZWwNCisgICAgICAgICAgICAgIHByb2dyYW0gYnV0IGNvbnQg
d2lsbCBkaXJlY3RseSByZXR1cm4gdG8NCisgICAgICAgICAgICAgIHRoZSBjb2RlIGJlZm9yZSBp
bnRlcnJ1cHRpb24gbm8gbWF0dGVyIGF0IHdoaWNoIGxldmVsKQ0KKyAgICAgICAgICAgICAgKHBh
c3NpbmcgdG8gbmV4dCB3b3VsZCBiZSBwb3NzaWJsZSBidXQgdGhlbiB3ZSB3b3VsZCBnZXQgYQ0K
KyAgICAgICAgICAgICAgIGludGVycnVwdGlvbiBpbiBhbGwgbGV2ZWxzICEhKQ0KKyAgIDB4MDIx
MCAgIDogX19kcG1pX2dldF9leHRlbmRlZF9leGNlcHRpb25faGFuZGxlcl92ZWN0b3JfcG0NCisg
ICAweDAyMTIgICA6IF9fZHBtaV9zZXRfZXh0ZW5kZWRfZXhjZXB0aW9uX2hhbmRsZXJfdmVjdG9y
X3BtDQorICAgDQorICAgMHgwNTAxICAgOiBfX2RwbWlfYWxsb2NhdGVfbWVtb3J5DQorICAgMHgw
NTAxICAgOiBfX2RwbWlfZnJlZV9tZW1vcnkNCisgICAweDA1MDMgICA6IF9fZHBtaV9yZXNpemVf
bWVtb3J5DQorICAgDQorICovIA0KKyBhc20oCQkgICAgICAgIAkJICAgICAgIAkJCSAgICAgICAg
IlxuXA0KKyAJLnRleHQJCQkJCQkJCVxuXA0KKyAJLmFsaWduICAyLDB4OTAJCQkJCQkJXG5cDQor
ICAgICAgICAgLmdsb2JsICBfZGJnY29tX2hvb2tfaTMxICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFxuXA0KKyBfZGJnY29tX2hvb2tfaTMxOiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblwNCisgX2kzMV9ob29rOgkJ
CQkJCQkJXG5cDQorIAljbXB3CSQweDAwMDAsJWF4CQkJCQkJXG5cDQorIAlqZQlMYzMxX2FsbG9j
X2Rlc2NyaXB0b3JzCQkJCQlcblwNCisgCWNtcHcJJDB4MDAwMSwlYXgJCQkJCQlcblwNCisgCWpl
CUxjMzFfZnJlZV9kZXNjcmlwdG9yCQkJCQlcblwNCisgCWNtcHcJJDB4MDAwNywlYXgJCQkJCQlc
blwNCisgCWplCUxjMzFfc2V0X3NlbGVjdG9yX2Jhc2VfYWRkcmVzcwkJCQlcblwNCisgCWNtcHcJ
JDB4MDAwQSwlYXgJCQkJCQlcblwNCisgCWplCUxjMzFfY3JlYXRlX2FsaWFzX2Rlc2NyaXB0b3IJ
CQkJXG5cDQorIAljbXB3CSQweDAxMDAsJWF4CQkJCQkJXG5cDQorIAlqZQlMYzMxX2FsbG9jYXRl
X2Rvc19tZW1vcnkJCQkJXG5cDQorIAljbXB3CSQweDAxMDEsJWF4CQkJCQkJXG5cDQorIAlqZQlM
YzMxX2ZyZWVfZG9zX21lbW9yeQkJCQkJXG5cDQorICAgICAgICAgY21wdyAgICAkMHgwMjAyLCVh
eCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXA0KKyAgICAg
ICAgIGplICAgICAgX2dldF9leGNlcHRpb25faGFuZGxlciAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcblwNCisgICAgICAgICBjbXB3ICAgICQweDAyMDMsJWF4ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cDQorICAgICAgICAgamUgICAgICBM
YzMxX3NldF9leGNlcHRpb25faGFuZGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxu
XA0KKyAJY21wdwkkMHgwMjA1LCVheAkJCQkJCVxuXA0KKyAJamUJTGMzMV9zZXRfcHJvdGVjdGVk
X21vZGVfaW50ZXJydXB0CQkJXG5cDQorICAgICAgICAgY21wdyAgICAkMHgwMjEwLCVheCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXA0KKyAgICAgICAgIGpl
ICAgICAgX2dldF9leGNlcHRpb25faGFuZGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcblwNCisgICAgICAgICBjbXB3ICAgICQweDAyMTIsJWF4ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cDQorICAgICAgICAgamUgICAgICBMYzMxX3Nl
dF9leGNlcHRpb25faGFuZGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXA0KKyAJ
Y21wdwkkMHgwNTAxLCVheAkJCQkJCVxuXA0KKyAJamUJTGMzMV9hbGxvY19tZW0JCQkJCQlcblwN
CisgCWNtcHcJJDB4MDUwMiwlYXgJCQkJCQlcblwNCisgCWplCUxjMzFfZnJlZV9tZW0JCQkJCQlc
blwNCisgCWNtcHcJJDB4MDUwMywlYXgJCQkJCQlcblwNCisgCWplCUxjMzFfcmVzaXplX21lbQkJ
CQkJCVxuXA0KKyBMX2ptcF90b19vbGRfaTMxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcblwNCisgICAgICAgICAuYnl0ZQkweDJlCQkJCQkJ
CVxuXA0KKyAJbGptcAlfb2xkX2kzMQkJCQkJCVxuXA0KKyBMYzMxX3NldF9mbGFnc19hbmRfaXJl
dDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblwNCisg
ICAgICAgICBwdXNobAklZWF4CQkJCSAgICAgICAgICAgICAgICAgICAgICAgIFxuXA0KKyAJcHVz
aGYJCQkJCQkJCVxuXA0KKyAJcG9wbAklZWF4CQkvKiBzdG9yZSB0aGUgcmlnaHQgZmxhZ3MgZm9y
IGlyZXQgKi8JXG5cDQorIAltb3ZsCSVlYXgsMTIoJWVzcCkJCQkJCQlcblwNCisgCXBvcGwJJWVh
eAkJCQkJCQlcblwNCisgTGMzMV9pcmV0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cDQorICAgICAgICAgaXJldAkJCQkJCQkJ
XG5cDQorIExjMzFfc2V0X3NlbGVjdG9yX2Jhc2VfYWRkcmVzczogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFxuXA0KKyAJLmJ5dGUJMHgyZQkJCQkJCQlcblwNCisgCWNt
cHcJX19fZGpncHBfYXBwX0RTLCVieAkJCQkJXG5cDQorIAlqbmUJTF9qbXBfdG9fb2xkX2kzMQkJ
CQkJXG5cDQorIAlwdXNoZgkJCQkJCQkJXG5cDQorIAkuYnl0ZQkweDJlCQkJCQkJCVxuXA0KKyAJ
bGNhbGwJX29sZF9pMzEJCQkJCQlcblwNCisgCWNhbGwJX19fZGpncHBfc2F2ZV9pbnRlcnJ1cHRf
cmVncwkJCQlcblwNCisgCWNhbGwJX19jbGVhcl9icmVha19EUE1JCQkJCQlcblwNCisgCWNhbGwJ
X19zZXRfYnJlYWtfRFBNSQkJCQkJXG5cDQorIAltb3ZsCV9fX2RqZ3BwX2V4Y2VwdGlvbl9zdGF0
ZV9wdHIsJWVheAkJCVxuXA0KKyAJcHVzaGwJKCVlYXgpCQkJCQkJCVxuXA0KKyAJcHVzaGwJJWVh
eAkJCQkJCQlcblwNCisgCWNhbGwJX2xvbmdqbXAJCQkJCQlcblwNCisgTGMzMV9zZXRfcHJvdGVj
dGVkX21vZGVfaW50ZXJydXB0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XG5cDQorIAljbXBiCSQweDc1LCVibAkJCQkJCVxuXA0KKyAJamUJTGMzMV9pcmV0CQkJCQkJXG5c
DQorIAljbXBiCSQweDA5LCVibCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIAlcblwNCisgCWplCUxjMzFfaXJldAkJCQkJCVxuXA0KKyAJam1wCUxfam1wX3RvX29s
ZF9pMzEJCQkJCVxuXA0KKyBMYzMxX2FsbG9jX21lbToJCQkJCQkJCVxuXA0KKyAJcHVzaGYJCQkJ
CQkJCVxuXA0KKyAJLmJ5dGUJMHgyZQkJCQkJCQlcblwNCisgCWxjYWxsCV9vbGRfaTMxCQkJCQkJ
XG5cDQorIAlqYwlMYzMxX3NldF9mbGFnc19hbmRfaXJldAkJCQkJXG5cDQorIAlwdXNoZgkJCQkJ
CQkJXG5cDQorIAlwdXNobAklZWR4CQkJCQkJCVxuXA0KKyAJcHVzaHcJJXNpCQkJCQkJCVxuXA0K
KyAJcHVzaHcJJWRpCQkJCQkJCVxuXA0KKyAJcG9wbAklZWR4CQkJCQkJCVxuXA0KKyAJeG9ybAkl
ZWF4LCVlYXgJCQkJCQlcblwNCisgCWNhbGwJX2NoYW5nZV9oYW5kbGUJCQkJCQlcblwNCisgCXBv
cGwJJWVkeAkJCQkJCQlcblwNCisgCXBvcGYJCQkJCQkJCVxuXA0KKyAJY2xjCQkJCQkJCQlcblwN
CisgCWptcAlMYzMxX3NldF9mbGFnc19hbmRfaXJldAkJCQkJXG5cDQorIExjMzFfZnJlZV9tZW06
CQkJCQkJCQlcblwNCisgCXB1c2h3CSVzaQkJCQkJCQlcblwNCisgCXB1c2h3CSVkaQkJCQkJCQlc
blwNCisgCXB1c2hmCQkJCQkJCQlcblwNCisgCS5ieXRlCTB4MmUJCQkJCQkJXG5cDQorIAlsY2Fs
bAlfb2xkX2kzMQkJCQkJCVxuXA0KKyAJamMJTGMzMV9yZXNpemVfbWVtX2Vycm9yCQkJCQlcblwN
CisgCXBvcGwJJWVheAkJCQkJCQlcblwNCisgCXhvcmwJJWVkeCwlZWR4CQkJCQkJXG5cDQorIAlj
YWxsCV9jaGFuZ2VfaGFuZGxlCQkJCQkJXG5cDQorIAl4b3JsCSVlYXgsJWVheAkJCQkJCVxuXA0K
KyAJam1wCUxjMzFfc2V0X2ZsYWdzX2FuZF9pcmV0CQkJCQlcblwNCisgTGMzMV9yZXNpemVfbWVt
OgkJCQkJCQlcblwNCisgCXB1c2h3CSVzaQkJCQkJCQlcblwNCisgCXB1c2h3CSVkaQkJCQkJCQlc
blwNCisgCXB1c2hmCQkJCQkJCQlcblwNCisgCS5ieXRlCTB4MmUJCQkJCQkJXG5cDQorIAlsY2Fs
bAlfb2xkX2kzMQkJCQkJCVxuXA0KKyAJam5jCUxjMzFfcmVzaXplX21lbV9vawkJCQkJXG5cDQor
IExjMzFfcmVzaXplX21lbV9lcnJvcjoJCQkJCQkJXG5cDQorIAlhZGRsCSQ0LCVlc3AJCQkJCQkJ
XG5cDQorIAlzdGMJCQkJCQkJCVxuXA0KKyAJam1wCUxjMzFfc2V0X2ZsYWdzX2FuZF9pcmV0CQkJ
CQlcblwNCisgTGMzMV9yZXNpemVfbWVtX29rOgkJCQkJCQlcblwNCisgCXBvcGwJJWVheAkJCQkJ
CQlcblwNCisgCXB1c2h3CSVzaQkJCQkJCQlcblwNCisgCXB1c2h3CSVkaQkJCQkJCQlcblwNCisg
CXBvcGwJJWVkeAkJCQkJCQlcblwNCisgCWNhbGwJX2NoYW5nZV9oYW5kbGUJCQkJCQlcblwNCisg
CXhvcmwJJWVheCwlZWF4CQkJCQkJXG5cDQorIAlqbXAJTGMzMV9zZXRfZmxhZ3NfYW5kX2lyZXQJ
CQkJCVxuXA0KKyBMYzMxX2FsbG9jX2Rlc2NyaXB0b3JzOgkJCQkJCQlcblwNCisgCXB1c2hsCSVl
Y3gJCQkJCQkJXG5cDQorIAlwdXNoZgkJCQkJCQkJXG5cDQorIAkuYnl0ZQkweDJlCQkJCQkJCVxu
XA0KKyAJbGNhbGwJX29sZF9pMzEJCQkJCQlcblwNCisgCXBvcGwJJWVjeAkJCQkJCQlcblwNCisg
CWpjCUxjMzFfc2V0X2ZsYWdzX2FuZF9pcmV0CQkJCQlcblwNCisgCWNhbGwJX2FkZF9kZXNjcmlw
dG9ycwkJCQkJXG5cDQorIAljbGMJCQkJCQkJCVxuXA0KKyAJam1wCUxjMzFfc2V0X2ZsYWdzX2Fu
ZF9pcmV0CQkJCQlcblwNCisgTGMzMV9mcmVlX2Rlc2NyaXB0b3I6CQkJCQkJCVxuXA0KKyAJcHVz
aGwJJWVieAkJCQkJCQlcblwNCisgCXB1c2hmCQkJCQkJCQlcblwNCisgCS5ieXRlCTB4MmUJCQkJ
CQkJXG5cDQorIAlsY2FsbAlfb2xkX2kzMQkJCQkJCVxuXA0KKyAJcG9wbAklZWF4CQkJCQkJCVxu
XA0KKyAJamMJTGMzMV9zZXRfZmxhZ3NfYW5kX2lyZXQJCQkJCVxuXA0KKyAJeG9ydwklZHgsJWR4
CQkJCQkJCVxuXA0KKyAJY2FsbAlfY2hhbmdlX2Rlc2NyaXB0b3IJCQkJCVxuXA0KKyAJY2xjCQkJ
CQkJCQlcblwNCisgCWptcAlMYzMxX3NldF9mbGFnc19hbmRfaXJldAkJCQkJXG5cDQorIExjMzFf
Y3JlYXRlX2FsaWFzX2Rlc2NyaXB0b3I6CQkJCQkJXG5cDQorIAlwdXNoZgkJCQkJCQkJXG5cDQor
IAkuYnl0ZQkweDJlCQkJCQkJCVxuXA0KKyAJbGNhbGwJX29sZF9pMzEJCQkJCQlcblwNCisgCWpj
CUxjMzFfc2V0X2ZsYWdzX2FuZF9pcmV0CQkJCQlcblwNCisgCXB1c2hsCSVlYXgJCQkJCQkJXG5c
DQorIAltb3Z3CSVheCwlZHgJCQkJCQkJXG5cDQorIAl4b3J3CSVheCwlYXgJCQkJCQkJXG5cDQor
IAljYWxsCV9jaGFuZ2VfZGVzY3JpcHRvcgkJCQkJXG5cDQorIAlwb3BsCSVlYXgJCQkJCQkJXG5c
DQorIAljbGMJCQkJCQkJCVxuXA0KKyAJam1wCUxjMzFfc2V0X2ZsYWdzX2FuZF9pcmV0CQkJCQlc
blwNCisgTGMzMV9hbGxvY2F0ZV9kb3NfbWVtb3J5OgkJCQkJCVxuXA0KKyAJcHVzaGYJCQkJCQkJ
CVxuXA0KKyAJLmJ5dGUJMHgyZQkJCQkJCQlcblwNCisgCWxjYWxsCV9vbGRfaTMxCQkJCQkJXG5c
DQorIAlqYwlMYzMxX3NldF9mbGFnc19hbmRfaXJldAkJCQkJXG5cDQorIAlwdXNobAklZWF4CQkJ
CQkJCVxuXA0KKyAJeG9ybAklZWF4LCVlYXgJCQkJCQlcblwNCisgCWNhbGwJX2NoYW5nZV9kb3Nf
ZGVzY3JpcHRvcgkJCQkJXG5cDQorIAlwb3BsCSVlYXgJCQkJCQkJXG5cDQorIAljbGMJCQkJCQkJ
CVxuXA0KKyAJam1wCUxjMzFfc2V0X2ZsYWdzX2FuZF9pcmV0CQkJCQlcblwNCisgTGMzMV9mcmVl
X2Rvc19tZW1vcnk6CQkJCQkJCVxuXA0KKyAJcHVzaGwJJWVkeAkJCQkJCQlcblwNCisgCXB1c2hm
CQkJCQkJCQlcblwNCisgCS5ieXRlCTB4MmUJCQkJCQkJXG5cDQorIAlsY2FsbAlfb2xkX2kzMQkJ
CQkJCVxuXA0KKyAJcG9wbAklZWF4CQkJCQkJCVxuXA0KKyAJamMJTGMzMV9zZXRfZmxhZ3NfYW5k
X2lyZXQJCQkJCVxuXA0KKyAJeG9ydwklZHgsJWR4CQkJCQkJCVxuXA0KKyAJY2FsbAlfY2hhbmdl
X2Rvc19kZXNjcmlwdG9yCQkJCQlcblwNCisgCWNsYwkJCQkJCQkJXG5cDQorIAlqbXAJTGMzMV9z
ZXRfZmxhZ3NfYW5kX2lyZXQJCQkJCVxuXA0KKyBMYzMxX3NldF9leGNlcHRpb25faGFuZGxlcjog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblwNCisgICAgICAg
ICBwdXNobCAgJWVheCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXG5cDQorICAgICAgICAgcHVzaGwgICVlYnggICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXA0KKyAgICAgICAgIHB1c2hsICAlZWN4
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblwN
CisgICAgICAgICBwdXNobCAgJWVkeCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXG5cDQorICAgICAgICAgcHVzaGYgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXA0KKyAgICAgICAgIC5i
eXRlICAweDJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcblwNCisgICAgICAgICBsY2FsbCAgIF9vbGRfaTMxICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cDQorICAgICAgICAgamMgICBMYzMxX3NldF9m
bGFnc19hbmRfaXJldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXA0KKyAg
ICAgICAgIHBvcGwgICAlZWR4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcblwNCisgICAgICAgICBwb3BsICAgJWVjeCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cDQorICAgICAgICAgcG9wbCAg
ICVlYnggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFxuXA0KKyAgICAgICAgIHBvcGwgICAlZWF4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcblwNCisgICAgICAgICBjYWxsICAgX2NoYW5nZV9leGNl
cHRpb25faGFuZGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cDQorICAgICAg
ICAgcHVzaGYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFxuXA0KKyAgICAgICAgIC5ieXRlICAweDJlICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblwNCisgICAgICAgICBsY2FsbCAgIF9v
bGRfaTMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5c
DQorICAgICAgICAgam1wIExjMzFfc2V0X2ZsYWdzX2FuZF9pcmV0ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFxuXA0KKyAgICAgICAgIC5hbGlnbiAgMiwweDkwICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblwNCisgICAgICAgICAu
Z2xvYmwgIF9kYmdjb21faG9va19pMjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXG5cDQorIF9kYmdjb21faG9va19pMjE6ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXA0KKyBfaTIxX2hvb2s6CQkJCQkJCQlcblwN
CisgCWNtcGIJJDB4NGMsJWFoCQkJCQkJXG5cDQorIAlqZQlMYzIxCQkJCQkJCVxuXA0KKyBMYzIx
X2ptcF90b19vbGQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcblwNCisgICAgICAgICAuYnl0ZQkweDJlCQkJCQkJCVxuXA0KKyAJbGptcAlf
b2xkX2kyMQkJCQkJCVxuXA0KKyBMYzIxOglwdXNoCSVlYXgJCQkJCQkJXG5cDQorIAltb3ZsCTgo
JWVzcCksJWVheAkJCQkJCVxuXA0KKyAJY3MJCQkJCQkJCVxuXA0KKyAJY21wdwlfYXBwX2V4aXRf
Y3MsJWF4CQkJCQlcblwNCisgCXBvcAklZWF4CQkJCQkJCVxuXA0KKyAJam5lCUxjMjFfam1wX3Rv
X29sZAkJCQkJCVxuXA0KKyAJY2FsbAlfX19kamdwcF9zYXZlX2ludGVycnVwdF9yZWdzCQkJCVxu
XA0KKyAJbW92bAlfX19kamdwcF9leGNlcHRpb25fc3RhdGVfcHRyLCVlc2kJCQlcblwNCisgCW1v
dmwJJDB4MjEsNTYoJWVzaSkJCQkJCQlcblwNCisgCW1vdmwJJF9sb2FkX3N0YXRlLCVlZGkJCQkJ
CVxuXA0KKyAJbW92bAkkNDMsJWVjeAkJCQkJCVxuXA0KKyAJcmVwCQkJCQkJCQlcblwNCisgCW1v
dnNsCQkJCQkJCQlcblwNCisgCXB1c2hsCSQxCQkJCQkJCVxuXA0KKyAJcHVzaGwJJF9qdW1wZXIJ
CQkJCQlcblwNCisgCWNhbGwJX2xvbmdqbXAJCQkJCQlcblwNCisgCSINCisgCSk7DQorIA0KKyAv
Kgltb3Z3CSVjczpfX2dvMzJfaW5mb19ibG9jaysyNiwgJWZzCQkJCVxuXA0KKyAJLmJ5dGUJMHg2
NAkJCQkJCQlcblwNCisgCW1vdncJJDB4NzAyMSwweGIwZjAwCQkJCQkJXG5cICovDQorIA0KKyAv
KiBzaW1wbGUgY29kZSB0byByZXR1cm4gZnJvbSBhbiBleGNlcHRpb24gKi8NCisgYXNtICggICIu
dGV4dA0KKyAgICAgICAgLmFsaWduIDIsMHg5MA0KKyBfZXhjZXB0aW9uX3JldHVybjogICAgICAg
LyogcmVtb3ZlIGVycm9yY29kZSBmcm9tIHN0YWNrICovDQorICAgICAgICBhZGRsICQ0LCVlc3AN
CisgICAgICAgIGxyZXQNCisgICAgICIpOw0KKyAgICAgDQorIHN0YXRpYyB2b2lkIHVuaG9va19k
cG1pKHZvaWQpDQorIHsNCisgICBpbnQgaTsNCisgICAvKiBzYXZlIGFwcCBpMzEgYW5kIGkyMSBp
ZiBjaGFuZ2VkICovDQorICAgX19kcG1pX2dldF9wcm90ZWN0ZWRfbW9kZV9pbnRlcnJ1cHRfdmVj
dG9yKDB4MzEsICZ1c2VyX2kzMSk7DQorICAgX19kcG1pX2dldF9wcm90ZWN0ZWRfbW9kZV9pbnRl
cnJ1cHRfdmVjdG9yKDB4MjEsICZ1c2VyX2kyMSk7DQorICAgLyogcmVzdG9yZSBpMzEgYW5kIGky
MSAqLw0KKyAgIF9fZHBtaV9zZXRfcHJvdGVjdGVkX21vZGVfaW50ZXJydXB0X3ZlY3RvcigweDMx
LCAmb2xkX2kzMSk7DQorICAgX19kcG1pX3NldF9wcm90ZWN0ZWRfbW9kZV9pbnRlcnJ1cHRfdmVj
dG9yKDB4MjEsICZvbGRfaTIxKTsNCisgDQorICAgLyogU2F2ZSB0aGUgaW50ZXJydXB0IHZlY3Rv
cnMgZm9yIHRoZSBrZXlib2FyZCBhbmQgdGhlIHRoZQ0KKyAgICAgIHRpbWUsIGJlY2F1c2UgdGhl
IGRlYnVnZ2VlIG1heSBoYXZlIGNoYW5nZWQgaXQuICovDQorICAgX19kcG1pX2dldF9wcm90ZWN0
ZWRfbW9kZV9pbnRlcnJ1cHRfdmVjdG9yKDB4MDksICZ1c2VyX2k5KTsNCisgICBfX2RwbWlfZ2V0
X3Byb3RlY3RlZF9tb2RlX2ludGVycnVwdF92ZWN0b3IoMHgwOCwgJnVzZXJfaTgpOw0KKyANCisg
ICAvKiBBbmQgcmVtZW1iZXIgaXQgZm9yIGhvb2tfZHBtaSAqLw0KKyAgIHVzZXJfaW50X3NldCA9
IDE7DQorIA0KKyAgIC8qIE5vdyByZXN0b3JlIG91ciBpbnRlcnJ1cHQgdmVjdG9ycyAqLw0KKyAg
IF9fZHBtaV9zZXRfcHJvdGVjdGVkX21vZGVfaW50ZXJydXB0X3ZlY3RvcigweDA5LCAmbXlfaTkp
Ow0KKyAgIF9fZHBtaV9zZXRfcHJvdGVjdGVkX21vZGVfaW50ZXJydXB0X3ZlY3RvcigweDA4LCAm
bXlfaTgpOw0KKyAgIGZvciAoaT0wO2k8RFBNSV9FWENFUFRJT05fQ09VTlQ7aSsrKQ0KKyAgICAg
ew0KKyAgICAgICBpZiAoaSE9MikNCisgICAgICAgICBfX2RwbWlfc2V0X3Byb2Nlc3Nvcl9leGNl
cHRpb25faGFuZGxlcl92ZWN0b3IoaSwmb3VyX2hhbmRsZXJbaV0pOw0KKyAgICAgfQ0KKyB9DQor
IA0KKyBzdGF0aWMgdm9pZCBkYmdzaWcoaW50IHNpZykNCisgew0KKyAjaWZkZWYgREVCVUdfRVhD
RVBUSU9OUw0KKyAgICAgZXhjcF9pbmZvW2V4Y3BfaW5kZXhdLmV4Y3BfZWlwPV9fZGpncHBfZXhj
ZXB0aW9uX3N0YXRlLT5fX2VpcDsNCisgICAgIGV4Y3BfaW5mb1tleGNwX2luZGV4XS5leGNwX2Nz
PV9fZGpncHBfZXhjZXB0aW9uX3N0YXRlLT5fX2NzOw0KKyAgICAgZXhjcF9pbmZvW2V4Y3BfaW5k
ZXhdLmV4Y3BfbmI9X19kamdwcF9leGNlcHRpb25fc3RhdGUtPl9fc2lnbnVtOw0KKyAgICAgZXhj
cF9pbmRleCsrOw0KKyAgICAgZXhjcF9jb3VudCsrOw0KKyAgICAgaWYgKGV4Y3BfaW5kZXg9PTIw
KQ0KKyAgICAgICBleGNwX2luZGV4PTA7DQorICNlbmRpZg0KKyAgIGlmKF9fZGpncHBfZXhjZXB0
aW9uX3N0YXRlLT5fX2NzID09IGFwcF9jcyAvKiB8fCBzaWcgPT0gU0lHVFJBUCAqLykNCisgICB7
DQorICAgICAqbG9hZF9zdGF0ZSA9ICpfX2RqZ3BwX2V4Y2VwdGlvbl9zdGF0ZTsgICAgIC8qIGV4
Y2VwdGlvbiB3YXMgaW4gb3RoZXIgcHJvY2VzcyAqLw0KKyAgICAgbG9uZ2ptcChqdW1wZXIsIDEp
Ow0KKyAgIH0NCisgICBlbHNlDQorICAgew0KKyAgICAgZXh0ZXJuIGludCBpbnZhbGlkX3NlbF9h
ZGRyKHNob3J0IHNlbCwgdW5zaWduZWQgYSwgdW5zaWduZWQgbGVuLCBjaGFyIGZvcl93cml0ZSk7
DQorICAgICANCisgICAgIGludCBzaWdudW0gPSAgX19kamdwcF9leGNlcHRpb25fc3RhdGUtPl9f
c2lnbnVtOw0KKyAgIGlmICgNCisgICAgICAoYXBwX2hhbmRsZXJbc2lnbnVtXS5vZmZzZXQzMikg
JiYNCisgICAgICAoYXBwX2hhbmRsZXJbc2lnbnVtXS5zZWxlY3RvcikgJiYNCisgICAgICAgIWlu
dmFsaWRfc2VsX2FkZHIoYXBwX2hhbmRsZXJbc2lnbnVtXS5zZWxlY3RvciwNCisgICAgICAgICBh
cHBfaGFuZGxlcltzaWdudW1dLm9mZnNldDMyLDEsMCkgJiYNCisgICAgICAoKGFwcF9oYW5kbGVy
W3NpZ251bV0ub2Zmc2V0MzIgIT0NCisgICAgICAgb3VyX2hhbmRsZXJbc2lnbnVtXS5vZmZzZXQz
MikgfHwNCisgICAgICAoYXBwX2hhbmRsZXJbc2lnbnVtXS5zZWxlY3RvciAhPQ0KKyAgICAgICBv
dXJfaGFuZGxlcltzaWdudW1dLnNlbGVjdG9yKSkpDQorICAgICB7DQorICAgICBleHRlcm4gdm9p
ZCBleGNlcHRpb25fcmV0dXJuKHZvaWQpOw0KKyAjaWZkZWYgREVCVUdfRVhDRVBUSU9OUw0KKyAg
ICAgcmVkaXJfZXhjcF9jb3VudCsrOw0KKyAjZW5kaWYNCisgICAgICpsb2FkX3N0YXRlID0gKl9f
ZGpncHBfZXhjZXB0aW9uX3N0YXRlOyAgICAgLyogZXhjZXB0aW9uIHdhcyBpbiBvdGhlciBwcm9j
ZXNzICovDQorICAgICBlaXAgPSBsb2FkX3N0YXRlLT5fX2VpcDsNCisgICAgIGNzICA9IGxvYWRf
c3RhdGUtPl9fY3M7DQorICAgICBlc3AgPSBsb2FkX3N0YXRlLT5fX2VzcDsNCisgICAgIC8qIHJl
c2V0IHRoZSBkZWJ1ZyB0cmFjZSBiaXQgKi8NCisgICAgIC8qIHdlIHNob3VsZCBvbmx5IGRvIHRo
aXMgdW5kZXIgY2VydGFpbiBzcGVjaWZpYyBjb25kaXRpb25zDQorICAgICAgICBidXQgd2hpY2gg
b25lcyA/PyAqLw0KKyAgICAgZWZsYWdzID0gbG9hZF9zdGF0ZS0+X19lZmxhZ3M7DQorICAgICAv
KiBpZiAoc2lnbnVtIT0xKQ0KKyAgICAgIGVmbGFncyAmPSAweGZmZmZmZWZmOyAqLw0KKyAgICAg
Lyogd2UgZG9uJ3Qgd2FudCB0byBzdGVwIGluc2lkZSB0aGUgZXhjZXB0aW9uX3RhYmxlIGNvZGUg
Ki8NCisgICAgIGxvYWRfc3RhdGUtPl9fZWZsYWdzICY9IDB4ZmZmZmZlZmY7DQorICAgICBzcyAg
PSBsb2FkX3N0YXRlLT5fX3NzOw0KKyAgICAgZXJyY29kZSA9IGxvYWRfc3RhdGUtPl9fc2lnbWFz
azsNCisgICAgIGxvYWRfc3RhdGUtPl9fZWlwPWFwcF9oYW5kbGVyW3NpZ251bV0ub2Zmc2V0MzI7
DQorICAgICBsb2FkX3N0YXRlLT5fX2NzPWFwcF9oYW5kbGVyW3NpZ251bV0uc2VsZWN0b3I7DQor
ICAgICAvKiB1c2Ugb3VyIG93biBleGNlcHRpb24gc3RhY2sgKi8NCisgICAgIGNoaWxkX2V4Y2Vw
dGlvbl9sZXZlbCsrOw0KKyAgICAgbWVtc2V0KCZleGNlcF9zdGFjaywweEFCLHNpemVvZihleGNl
cF9zdGFjaykpOw0KKyAgICAgY3VyX3BvcyA9ICZleGNlcF9zdGFja1sxMDAwLTQwXTsNCisgICAg
IGN1cl9wb3MgLT0gOCo0Ow0KKyAgICAgbG9hZF9zdGF0ZS0+X19zcyA9IG15X2RzOw0KKyAgICAg
bG9hZF9zdGF0ZS0+X19lc3A9IChpbnQpIGN1cl9wb3M7DQorICAgICAvKiB3aGVyZSB0byByZXR1
cm4gKi8NCisgICAgIHJldF9jcyA9IG15X2NzOw0KKyAgICAgcmV0X2VpcCA9IChpbnQpICZleGNl
cHRpb25fcmV0dXJuOw0KKyAgICAgbWVtY3B5KGN1cl9wb3MsJnJldF9laXAsNCk7DQorICAgICBj
dXJfcG9zKz00Ow0KKyAgICAgbWVtY3B5KGN1cl9wb3MsJnJldF9jcyw0KTsNCisgICAgIGN1cl9w
b3MrPTQ7DQorICAgICBtZW1jcHkoY3VyX3BvcywmZXJyY29kZSw0KTsNCisgICAgIGN1cl9wb3Mr
PTQ7DQorICAgICBtZW1jcHkoY3VyX3BvcywmZWlwLDQpOw0KKyAgICAgY3VyX3Bvcys9NDsNCisg
ICAgIG1lbWNweShjdXJfcG9zLCZjcyw0KTsNCisgICAgIGN1cl9wb3MrPTQ7DQorICAgICBtZW1j
cHkoY3VyX3BvcywmZWZsYWdzLDQpOw0KKyAgICAgY3VyX3Bvcys9NDsNCisgICAgIG1lbWNweShj
dXJfcG9zLCZlc3AsNCk7DQorICAgICBjdXJfcG9zKz00Ow0KKyAgICAgbWVtY3B5KGN1cl9wb3Ms
JnNzLDQpOw0KKyAgICAgY3VyX3Bvcys9NDsNCisgICAgIGxvbmdqbXAobG9hZF9zdGF0ZSwgbG9h
ZF9zdGF0ZS0+X19lYXgpOw0KKyAgICAgfQ0KKyAgICAvKiAgZWxzZQ0KKyAgICAgIHsNCisgICAg
ICAgKmxvYWRfc3RhdGUgPSAqX19kamdwcF9leGNlcHRpb25fc3RhdGU7DQorICAgICAgIGxvbmdq
bXAoanVtcGVyLCAxKTsNCisgICAgICB9ICAqLw0KKyAgIH0NCisgfQ0KKyANCisgdm9pZCBydW5f
Y2hpbGQodm9pZCkNCisgew0KKyAgIGxvYWRfc3RhdGUtPl9fY3MgPSBhX3Rzcy50c3NfY3M7DQor
ICAgbG9hZF9zdGF0ZS0+X19zcyA9IGFfdHNzLnRzc19zczsNCisgICBsb2FkX3N0YXRlLT5fX2Rz
ID0gYV90c3MudHNzX2RzOw0KKyAgIGxvYWRfc3RhdGUtPl9fZXMgPSBhX3Rzcy50c3NfZXM7DQor
ICAgbG9hZF9zdGF0ZS0+X19mcyA9IGFfdHNzLnRzc19mczsNCisgICBsb2FkX3N0YXRlLT5fX2dz
ID0gYV90c3MudHNzX2dzOw0KKyAgIGxvYWRfc3RhdGUtPl9fZWlwID0gYV90c3MudHNzX2VpcDsN
CisgICBsb2FkX3N0YXRlLT5fX2VmbGFncyA9IGFfdHNzLnRzc19lZmxhZ3M7DQorICAgbG9hZF9z
dGF0ZS0+X19lYXggPSBhX3Rzcy50c3NfZWF4Ow0KKyAgIGxvYWRfc3RhdGUtPl9fZWJ4ID0gYV90
c3MudHNzX2VieDsNCisgICBsb2FkX3N0YXRlLT5fX2VjeCA9IGFfdHNzLnRzc19lY3g7DQorICAg
bG9hZF9zdGF0ZS0+X19lZHggPSBhX3Rzcy50c3NfZWR4Ow0KKyAgIGxvYWRfc3RhdGUtPl9fZXNw
ID0gYV90c3MudHNzX2VzcDsNCisgICBsb2FkX3N0YXRlLT5fX2VicCA9IGFfdHNzLnRzc19lYnA7
DQorICAgbG9hZF9zdGF0ZS0+X19lc2kgPSBhX3Rzcy50c3NfZXNpOw0KKyAgIGxvYWRfc3RhdGUt
Pl9fZWRpID0gYV90c3MudHNzX2VkaTsNCisgICBpZighc2V0am1wKGp1bXBlcikpew0KKyAgICAg
LyoganVtcCB0byB0c3MgKi8NCisgICAgIF9zZXRfYnJlYWtfRFBNSSgpOw0KKyAgICAgaG9va19k
cG1pKCk7DQorICAgICByZXN0b3JlX2ZwdV9lbnYoKTsNCisgICAgIGxvbmdqbXAobG9hZF9zdGF0
ZSwgbG9hZF9zdGF0ZS0+X19lYXgpOw0KKyAgICAgLyogd2UgbmV2ZXIgcmV0dXJuIGhlcmUsIGV4
ZWNwdGlvbiByb3V0aW5lIHdpbGwgbG9uZ2p1bXAgKi8NCisgICB9DQorICAgLyogZXhjZXB0aW9u
IHJvdXRpbmU6ICBzYXZlIHN0YXRlLCBjb3B5IHRvIHRzcywgcmV0dXJuICovDQorICAgYV90c3Mu
dHNzX2NzID0gbG9hZF9zdGF0ZS0+X19jczsNCisgICBhX3Rzcy50c3Nfc3MgPSBsb2FkX3N0YXRl
LT5fX3NzOw0KKyAgIGFfdHNzLnRzc19kcyA9IGxvYWRfc3RhdGUtPl9fZHM7DQorICAgYV90c3Mu
dHNzX2VzID0gbG9hZF9zdGF0ZS0+X19lczsNCisgICBhX3Rzcy50c3NfZnMgPSBsb2FkX3N0YXRl
LT5fX2ZzOw0KKyAgIGFfdHNzLnRzc19ncyA9IGxvYWRfc3RhdGUtPl9fZ3M7DQorICAgYV90c3Mu
dHNzX2VpcCA9IGxvYWRfc3RhdGUtPl9fZWlwOw0KKyAgIGFfdHNzLnRzc19lc3AgPSBsb2FkX3N0
YXRlLT5fX2VzcDsNCisgICBhX3Rzcy50c3NfZWZsYWdzID0gbG9hZF9zdGF0ZS0+X19lZmxhZ3M7
DQorICAgYV90c3MudHNzX2VheCA9IGxvYWRfc3RhdGUtPl9fZWF4Ow0KKyAgIGFfdHNzLnRzc19l
YnggPSBsb2FkX3N0YXRlLT5fX2VieDsNCisgICBhX3Rzcy50c3NfZWN4ID0gbG9hZF9zdGF0ZS0+
X19lY3g7DQorICAgYV90c3MudHNzX2VkeCA9IGxvYWRfc3RhdGUtPl9fZWR4Ow0KKyAgIGFfdHNz
LnRzc19lc2kgPSBsb2FkX3N0YXRlLT5fX2VzaTsNCisgICBhX3Rzcy50c3NfZWRpID0gbG9hZF9z
dGF0ZS0+X19lZGk7DQorICAgYV90c3MudHNzX2VicCA9IGxvYWRfc3RhdGUtPl9fZWJwOw0KKyAg
IGFfdHNzLnRzc19pcnFuID0gbG9hZF9zdGF0ZS0+X19zaWdudW07DQorICAgYV90c3MudHNzX2Vy
cm9yID0gbG9hZF9zdGF0ZS0+X19zaWdtYXNrOw0KKyAgIHN0b3JlX2ZwdV9lbnYoKTsNCisgICB1
bmhvb2tfZHBtaSgpOw0KKyAgIF9jbGVhcl9icmVha19EUE1JKCk7DQorIH0NCisgDQorIHN0YXRp
YyBpbnQgaW52YWxpZF9hZGRyKHVuc2lnbmVkIGEsIHVuc2lnbmVkIGxlbikNCisgew0KKyAgIC8q
IEhlcmUgd2UgYXNzdW1lIGV4cGFuZCB1cCB3cml0YWJsZSBjb2RlLiAgV2UgY291bGQgY2hlY2sg
dGhlIHJpZ2h0cyB0bw0KKyAgICAgIGJlIHN1cmUsIGJ1dCB0aGF0J3MgYSB3YXN0ZSB1bmxlc3Mg
Kl9jaGlsZCByb3V0aW5lcyBmaXhlZCB0byBrbm93IGFib3V0DQorICAgICAgZGlmZmVyZW50IHNl
bGVjdG9ycy4gKi8NCisgDQorICAgdW5zaWduZWQgbGltaXQ7DQorICAgbGltaXQgPSBfX2RwbWlf
Z2V0X3NlZ21lbnRfbGltaXQoX19kamdwcF9hcHBfRFMpOw0KKyAgIGlmKDQwOTYgPD0gYSAgICAg
ICAgICAgICAvKiBGaXJzdCBwYWdlIGlzIHVzZWQgZm9yIE5VTEwgcG9pbnRlciBkZXRlY3Rpb24u
ICovDQorICAgJiYgYSA8PSBsaW1pdCAgICAgICAgICAgIC8qIFRvIGd1YXJkIGFnYWluc3QgbGlt
aXQgPCBsZW4uICovDQorICAgJiYgYSAtIDEgPD0gbGltaXQgLSBsZW4gIC8qIFRvIGd1YXJkIGFn
YWluc3QgbGltaXQgPD0gYSArIGxlbiAtIDEuICovDQorICAgICAgKQ0KKyAgICAgcmV0dXJuIDA7
DQorIC8qICBwcmludGYoIkludmFsaWQgYWNjZXNzIHRvIGNoaWxkLCBhZGRyZXNzICUjeCBsZW5n
dGggJSN4ICBsaW1pdDogJSN4XG4iLCBhLCBsZW4sIGxpbWl0KTsNCisgICBpZiAoY2FuX2xvbmdq
bXApDQorICAgICBsb25nam1wKGRlYnVnZ2VyX2ptcGJ1ZiwgMSk7ICovDQorICAgcmV0dXJuIDE7
DQorIH0NCisgDQorIGludCByZWFkX2NoaWxkKHVuc2lnbmVkIGNoaWxkX2FkZHIsIHZvaWQgKmJ1
ZiwgdW5zaWduZWQgbGVuKQ0KKyB7DQorICAgaWYgKGludmFsaWRfYWRkcihjaGlsZF9hZGRyLCBs
ZW4pKQ0KKyAgICAgcmV0dXJuIDE7DQorICAgbW92ZWRhdGEoX19kamdwcF9hcHBfRFMsIGNoaWxk
X2FkZHIsIG15X2RzLCAoaW50KWJ1ZiwgbGVuKTsNCisgICByZXR1cm4gMDsNCisgfQ0KKyANCisg
aW50IHdyaXRlX2NoaWxkKHVuc2lnbmVkIGNoaWxkX2FkZHIsIHZvaWQgKmJ1ZiwgdW5zaWduZWQg
bGVuKQ0KKyB7DQorICAgaWYgKGludmFsaWRfYWRkcihjaGlsZF9hZGRyLCBsZW4pKQ0KKyAgICAg
cmV0dXJuIDE7DQorICAgbW92ZWRhdGEobXlfZHMsIChpbnQpYnVmLCBfX2RqZ3BwX2FwcF9EUywg
Y2hpbGRfYWRkciwgbGVuKTsNCisgICByZXR1cm4gMDsNCisgfQ0KKyANCisgaW50IGludmFsaWRf
c2VsX2FkZHIoc2hvcnQgc2VsLCB1bnNpZ25lZCBhLCB1bnNpZ25lZCBsZW4sIGNoYXIgZm9yX3dy
aXRlKQ0KKyB7DQorICAgLyogSGVyZSB3ZSBhc3N1bWUgZXhwYW5kIHVwIHdyaXRhYmxlIGNvZGUu
ICBXZSBjb3VsZCBjaGVjayB0aGUgcmlnaHRzIHRvDQorICAgICAgYmUgc3VyZSwgYnV0IHRoYXQn
cyBhIHdhc3RlIHVubGVzcyAqX2NoaWxkIHJvdXRpbmVzIGZpeGVkIHRvIGtub3cgYWJvdXQNCisg
ICAgICBkaWZmZXJlbnQgc2VsZWN0b3JzLiAqLw0KKyANCisgICB1bnNpZ25lZCBsaW1pdDsNCisg
ICBjaGFyIHJlYWRfYWxsb3dlZCA9IDA7DQorICAgY2hhciB3cml0ZV9hbGxvd2VkID0gMDsNCisg
ICANCisgICBhc20oIg0KKyAgICAgICBtb3Z3ICAlMiwlJWF4DQorICAgICAgIHZlcnIgICUlYXgN
CisgICAgICAgam56ICAgLkxkb2VzX25vdF9oYXNfcmVhZF9yaWdodA0KKyAgICAgICBtb3ZiICAk
MSwlMA0KKyAuTGRvZXNfbm90X2hhc19yZWFkX3JpZ2h0Og0KKyAgICAgICB2ZXJydyAlJWF4DQor
ICAgICAgIGpueiAgIC5MZG9lc19ub3RfaGFzX3dyaXRlX3JpZ2h0DQorICAgICAgIG1vdmIgICQx
LCUxDQorIC5MZG9lc19ub3RfaGFzX3dyaXRlX3JpZ2h0OiAiDQorICAgICAgOiAiPWciIChyZWFk
X2FsbG93ZWQpLCAiPWciICh3cml0ZV9hbGxvd2VkKQ0KKyAgICAgIDogImciIChzZWwpDQorICAg
ICAgKTsNCisgICBpZiAoZm9yX3dyaXRlKQ0KKyAgICAgew0KKyAgICAgIGlmICghd3JpdGVfYWxs
b3dlZCkNCisgICAgICAgIHJldHVybiAxOw0KKyAgICAgfQ0KKyAgIGVsc2UNCisgICAgIGlmICgh
cmVhZF9hbGxvd2VkKQ0KKyAgICAgICByZXR1cm4gMTsNCisgICAgICAgDQorICAgbGltaXQgPSBf
X2RwbWlfZ2V0X3NlZ21lbnRfbGltaXQoc2VsKTsNCisgICAvKiBzb21lIHNlbGVjdG9ycyBkb24n
dCBoYXZlIHplcm8gcGFnZSBwcm90ZWN0aW9uDQorICAgICAgbGlrZSB0aGUgcHJvdGVjdGVkIGlu
dGVycnVwdCBzdGFjayAqLw0KKyAgIGlmKC8qYSA+PSA0MDk2ICYmICovIChhK2xlbi0xKSA8PSBs
aW1pdCkNCisgICAgIHJldHVybiAwOw0KKyAvKiAgcHJpbnRmKCJJbnZhbGlkIGFjY2VzcyB0byBj
aGlsZCwgYWRkcmVzcyAlI3ggbGVuZ3RoICUjeCAgbGltaXQ6ICUjeFxuIiwgYSwgbGVuLCBsaW1p
dCk7DQorICAgaWYgKGNhbl9sb25nam1wKQ0KKyAgICAgbG9uZ2ptcChkZWJ1Z2dlcl9qbXBidWYs
IDEpOyAqLw0KKyAgIHJldHVybiAxOw0KKyB9DQorIA0KKyBpbnQgcmVhZF9zZWxfYWRkcih1bnNp
Z25lZCBjaGlsZF9hZGRyLCB2b2lkICpidWYsIHVuc2lnbmVkIGxlbiwgdW5zaWduZWQgc2VsKQ0K
KyB7DQorICAgLyogZmlyc3QgY2xlYXIgbWVtb3J5ICovDQorICAgbWVtY3B5KGJ1ZiwwLGxlbik7
DQorICAgaWYgKGludmFsaWRfc2VsX2FkZHIoc2VsLCBjaGlsZF9hZGRyLCBsZW4sIDApKQ0KKyAg
ICAgcmV0dXJuIDE7DQorICAgbW92ZWRhdGEoc2VsLCBjaGlsZF9hZGRyLCBteV9kcywgKGludCli
dWYsIGxlbik7DQorICAgcmV0dXJuIDA7DQorIH0NCisgDQorIGludCB3cml0ZV9zZWxfYWRkcih1
bnNpZ25lZCBzZWwsIHVuc2lnbmVkIGNoaWxkX2FkZHIsIHZvaWQgKmJ1ZiwgdW5zaWduZWQgbGVu
KQ0KKyB7DQorICAgaWYgKGludmFsaWRfc2VsX2FkZHIoc2VsLCBjaGlsZF9hZGRyLCBsZW4sIDEp
KQ0KKyAgICAgcmV0dXJuIDE7DQorICAgbW92ZWRhdGEobXlfZHMsIChpbnQpYnVmLCBzZWwsIGNo
aWxkX2FkZHIsIGxlbik7DQorICAgcmV0dXJuIDA7DQorIH0NCisgDQorIHN0YXRpYyBfR08zMl9T
dHViSW5mbyBzaTsNCisgDQorIHN0YXRpYyB2b2lkICgqb2xkVFJBUCkoaW50KTsNCisgc3RhdGlj
IHZvaWQgKCpvbGRTRUdWKShpbnQpOw0KKyBzdGF0aWMgdm9pZCAoKm9sZEZQRSkoaW50KTsNCisg
c3RhdGljIHZvaWQgKCpvbGRJTlQpKGludCk7DQorIA0KKyB2b2lkIGVkaV9pbml0KGptcF9idWYg
c3RhcnRfc3RhdGUpDQorIHsNCisgICBpbnQgaTsNCisgICBteV9kcyA9IDA7DQorICAgYXNtKCJt
b3YgJSVkcywlMCIgOiAiPWciIChteV9kcykgKTsNCisgICBteV9jcyA9IDA7DQorICAgYXNtKCJt
b3YgJSVjcywlMCIgOiAiPWciIChteV9jcykgKTsNCisgDQorICAgZm9yIChpPTA7aTxEUE1JX0VY
Q0VQVElPTl9DT1VOVDtpKyspDQorICAgICB7DQorICAgICAgIGFwcF9oYW5kbGVyW2ldLm9mZnNl
dDMyID0gMDsNCisgICAgICAgYXBwX2hhbmRsZXJbaV0uc2VsZWN0b3IgPSAwOw0KKyAgICAgfQ0K
KyAgICpsb2FkX3N0YXRlID0gKnN0YXJ0X3N0YXRlOw0KKyAgIGFfdHNzLnRzc19jcyA9IGxvYWRf
c3RhdGUtPl9fY3M7DQorICAgYV90c3MudHNzX3NzID0gbG9hZF9zdGF0ZS0+X19zczsNCisgICBh
X3Rzcy50c3NfZHMgPSBsb2FkX3N0YXRlLT5fX2RzOw0KKyAgIGFfdHNzLnRzc19lcyA9IGxvYWRf
c3RhdGUtPl9fZXM7DQorICAgYV90c3MudHNzX2ZzID0gbG9hZF9zdGF0ZS0+X19mczsNCisgICBh
X3Rzcy50c3NfZ3MgPSBsb2FkX3N0YXRlLT5fX2dzOw0KKyAgIGFfdHNzLnRzc19laXAgPSBsb2Fk
X3N0YXRlLT5fX2VpcDsNCisgICBhX3Rzcy50c3NfZXNwID0gbG9hZF9zdGF0ZS0+X19lc3A7DQor
ICAgYV90c3MudHNzX2VmbGFncyA9IGxvYWRfc3RhdGUtPl9fZWZsYWdzOw0KKyANCisgICBfX2Rq
Z3BwX2FwcF9EUyA9IGFfdHNzLnRzc19kczsNCisgICBhcHBfY3MgPSBhX3Rzcy50c3NfY3M7DQor
ICAgZWRpLmFwcF9iYXNlID0gMDsNCisgICBtZW1zZXQoJmZwdWUsMCxzaXplb2YoZnB1ZSkpOw0K
KyAgIC8qIFNhdmUgYWxsIHRoZSBjaGFuZ2VkIHNpZ25hbCBoYW5kbGVycyAqLw0KKyAgIG9sZFRS
QVAgPSBzaWduYWwoU0lHVFJBUCwgZGJnc2lnKTsNCisgICBvbGRTRUdWID0gc2lnbmFsKFNJR1NF
R1YsIGRiZ3NpZyk7DQorICAgb2xkRlBFID0gc2lnbmFsKFNJR0ZQRSwgZGJnc2lnKTsNCisgICBv
bGRJTlQgPSBzaWduYWwoU0lHSU5ULCBkYmdzaWcpOw0KKyAgIG1vdmVkYXRhKGFfdHNzLnRzc19m
cywwLG15X2RzLCh1bnNpZ25lZCkmc2ksc2l6ZW9mKHNpKSk7DQorICAgbWVtc2V0KG1lbV9oYW5k
bGVzLDAsc2l6ZW9mKG1lbV9oYW5kbGVzKSk7DQorICAgbWVtX2hhbmRsZXNbMF0gPSBzaS5tZW1v
cnlfaGFuZGxlOw0KKyAgIG1lbXNldChkZXNjcmlwdG9ycywwLHNpemVvZihkZXNjcmlwdG9ycykp
Ow0KKyAgIGRlc2NyaXB0b3JzWzBdID0gc2kuY3Nfc2VsZWN0b3I7DQorICAgZGVzY3JpcHRvcnNb
MV0gPSBzaS5kc19zZWxlY3RvcjsNCisgICBkZXNjcmlwdG9yc1syXSA9IF9fZGpncHBfYXBwX0RT
Ow0KKyAgIGRlc2NyaXB0b3JzWzNdID0gYXBwX2NzOyANCisgICBhcHBfZXhpdF9jcz1zaS5jc19z
ZWxlY3RvcjsNCisgICBtZW1zZXQoZG9zX2Rlc2NyaXB0b3JzLDAsc2l6ZW9mKGRvc19kZXNjcmlw
dG9ycykpOw0KKyAgIGRvc19kZXNjcmlwdG9yc1swXSA9IF9mYXJwZWVrdyhzaS5wc3Bfc2VsZWN0
b3IsMHgyYyk7DQorICAgZG9zX2Rlc2NyaXB0b3JzWzFdID0gc2kucHNwX3NlbGVjdG9yOyANCisg
fQ0KKyANCisgc3RhdGljIHZvaWQgY2xvc2VfaGFuZGxlcyh2b2lkKTsgLyogRm9yd2FyZCBkZWNs
YXJhdGlvbiAqLw0KKyANCisgdm9pZCBjbGVhbnVwX2NsaWVudCh2b2lkKQ0KKyB7DQorICAgaW50
IGk7DQorIA0KKyAgIC8qIHJlc3RvcmUgX19kamdwcF9hcHBfRFMgZm9yIEN0cmwtQyAhISAqLw0K
KyAgIF9fZGpncHBfYXBwX0RTID0gX19kamdwcF9vdXJfRFM7DQorICNpZmRlZiBERUJVR19FWENF
UFRJT05TDQorICAgICBmcHJpbnRmKHN0ZGVyciwiZXhjcF9jb3VudCA9ICVkXG4iLGV4Y3BfY291
bnQpOw0KKyAgICAgZnByaW50ZihzdGRlcnIsInJlZGlyX2V4Y3BfY291bnQgPSAlZFxuIixyZWRp
cl9leGNwX2NvdW50KTsNCisgICAgIGZwcmludGYoc3RkZXJyLCJleGNwX2luZGV4ID0gJWRcbiIs
ZXhjcF9pbmRleCk7DQorICAgICBmcHJpbnRmKHN0ZGVyciwiYXBwX2NzICUwNHhcdGFwcF9kcyAl
MDR4XG4iLGFwcF9jcyxhcHBfZHMpOw0KKyAgICAgZnByaW50ZihzdGRlcnIsIm15X2NzICUwNHhc
dG15X2RzICUwNHhcbiIsbXlfY3MsbXlfZHMpOw0KKyAgICAgZm9yIChpPTA7aTxleGNwX2NvdW50
O2krKykNCisgICAgICAgew0KKyAgICAgICAgZnByaW50ZihzdGRlcnIsIiBleGNlcCAlMDR4OiUw
OHhcdHNpZ25hbCAlMDh4XG4iLA0KKyAgICAgICAgICBleGNwX2luZm9baV0uZXhjcF9jcywNCisg
ICAgICAgICAgZXhjcF9pbmZvW2ldLmV4Y3BfZWlwLA0KKyAgICAgICAgICBleGNwX2luZm9baV0u
ZXhjcF9uYik7DQorICAgICAgICAgIGV4Y3BfaW5mb1tpXS5leGNwX2VpcD0wOw0KKyAgICAgICAg
ICBleGNwX2luZm9baV0uZXhjcF9jcz0wOw0KKyAgICAgICAgICBleGNwX2luZm9baV0uZXhjcF9u
Yj0wOw0KKyAgICAgICB9DQorICAgICBleGNwX2NvdW50PTA7DQorICAgICByZWRpcl9leGNwX2Nv
dW50PTA7DQorICAgICBleGNwX2luZGV4PTA7DQorICAgZm9yIChpPTA7aTxEUE1JX0VYQ0VQVElP
Tl9DT1VOVDtpKyspDQorICAgICB7DQorICAgICAgIGZwcmludGYoc3RkZXJyLCIgYXBwICVkIGhh
bmRsZXIgPSAlMDR4OiUwOGx4XG4iLA0KKyAgICAgICAgICAgICAgIGksYXBwX2hhbmRsZXJbaV0u
c2VsZWN0b3IsYXBwX2hhbmRsZXJbaV0ub2Zmc2V0MzIpOw0KKyAgICAgfQ0KKyAgIGZvciAoaT0w
O2k8REVTQ1JJUFRPUl9DT1VOVDtpKyspDQorICAgew0KKyAgICAgaWYgKGRlc2NyaXB0b3JzW2ld
KQ0KKyAgICAgew0KKyAgICAgICBmcHJpbnRmKHN0ZGVyciwidXNlZCBkZXNjcmlwdG9yOiAlMDh4
XG4iLGRlc2NyaXB0b3JzW2ldKTsNCisgICAgIH0NCisgICB9DQorICNlbmRpZg0KKyAgIGZvciAo
aT0wO2k8RFBNSV9FWENFUFRJT05fQ09VTlQ7aSsrKQ0KKyAgICAgew0KKyAgICAgICBhcHBfaGFu
ZGxlcltpXS5vZmZzZXQzMiA9IDA7DQorICAgICAgIGFwcF9oYW5kbGVyW2ldLnNlbGVjdG9yID0g
MDsNCisgICAgIH0NCisgICAvKiBTZXQgdGhlIGZsYWcsIHRoYXQgdGhlIHVzZXIgaW50ZXJydXB0
IHZlY3RvcnMgYXJlIG5vIGxvbmdlciB2YWxpZCAqLw0KKyAgIHVzZXJfaW50X3NldCA9IDA7DQor
IA0KKyAgIG1lbXNldCgmZnB1ZSwwLHNpemVvZihmcHVlKSk7DQorICAgLyogQ2xvc2UgYWxsIGhh
bmRsZXMsIHdoaWNoIG1heSBiZSBsZWZ0IG9wZW4gKi8NCisgICBjbG9zZV9oYW5kbGVzKCk7DQor
ICAgZm9yIChpPTA7aTxET1NfREVTQ1JJUFRPUl9DT1VOVDtpKyspDQorICAgew0KKyAgICAgaWYg
KGRvc19kZXNjcmlwdG9yc1tpXSkNCisgICAgIHsNCisgI2lmZGVmIERFQlVHX0RCR0NPTQ0KKyAg
ICAgICBmcHJpbnRmKHN0ZGVyciwiZnJlZSBkb3MgbWVtb3J5OiAlMDh4XG4iLGRvc19kZXNjcmlw
dG9yc1tpXSk7DQorICNlbmRpZg0KKyAgICAgICBfX2RwbWlfZnJlZV9kb3NfbWVtb3J5KGRvc19k
ZXNjcmlwdG9yc1tpXSk7DQorICAgICB9DQorICAgfQ0KKyAgIGZvciAoaT0wO2k8TUVNX0hBTkRM
RV9DT1VOVDtpKyspDQorICAgew0KKyAgICAgaWYgKG1lbV9oYW5kbGVzW2ldKQ0KKyAgICAgew0K
KyAjaWZkZWYgREVCVUdfREJHQ09NDQorICAgICAgIGZwcmludGYoc3RkZXJyLCJmcmVlIG1lbSA6
ICUwOGx4XG4iLG1lbV9oYW5kbGVzW2ldKTsNCisgI2VuZGlmDQorICAgICAgIF9fZHBtaV9mcmVl
X21lbW9yeShtZW1faGFuZGxlc1tpXSk7DQorICAgICB9DQorICAgfQ0KKyAgIGZvciAoaT0wO2k8
REVTQ1JJUFRPUl9DT1VOVDtpKyspDQorICAgew0KKyAgICAgaWYgKGRlc2NyaXB0b3JzW2ldKQ0K
KyAgICAgew0KKyAjaWZkZWYgREVCVUdfREJHQ09NDQorICAgICAgIGZwcmludGYoc3RkZXJyLCJm
cmVlIGRlc2NyaXB0b3I6ICUwOHhcbiIsZGVzY3JpcHRvcnNbaV0pOw0KKyAjZW5kaWYNCisgICAg
ICAgX19kcG1pX2ZyZWVfbGR0X2Rlc2NyaXB0b3IoZGVzY3JpcHRvcnNbaV0pOw0KKyAgICAgfQ0K
KyAgIH0NCisgICAvKiBSZXN0b3JlIGFsbCBjaGFuZ2VkIHNpZ25hbCBoYW5kbGVycyAqLw0KKyAg
IHNpZ25hbChTSUdUUkFQLCBvbGRUUkFQKTsNCisgICBzaWduYWwoU0lHU0VHViwgb2xkU0VHVik7
DQorICAgc2lnbmFsKFNJR0ZQRSwgb2xkRlBFKTsNCisgICBzaWduYWwoU0lHSU5ULCBvbGRJTlQp
Ow0KKyB9DQorIA0KKyAjaWZuZGVmIFVTRV9GU0VYVA0KKyANCisgc3RhdGljIHZvaWQgY2xvc2Vf
aGFuZGxlcyh2b2lkKQ0KKyB7DQorIH0NCisgDQorICNlbHNlIC8qIFVTRV9GU0VYVCAqLw0KKyAv
Kg0KKyAgICBOb3cgdGhlIEZTRVhUIGZ1bmN0aW9uIGZvciB3YXRjaGluZyBmaWxlcyBiZWluZyBv
cGVuZWQuIFRoaXMgaXMgbmVlZGVkLA0KKyAgICBiZWNhdXNlIHRoZSBkZWJ1Z2dlZSBjYW4gb3Bl
biBmaWxlcyB3aGljaCBhcmUgbm90IGNsb3NlZCBhbmQgaWYgeW91DQorICAgIGRvIHRoaXMgbXVs
dGlwbGUgdGltZXMsIHRoZSBsaW1pdCBvZiBtYXggb3BlbmVkIGZpbGVzIGlzIHJlYWNoZWQuDQor
IA0KKyAgICBUaGUgd2F0Y2hpbmcgaXMgZG9uZSBieSB0aGUgRlNFWFQgZnVuY3Rpb24gYnkgaG9v
a2luZyB0aGUgX29wZW4oKSwNCisgICAgX2NyZWF0KCkgYW5kIF9jbG9zZSgpIGNhbGxzIGZyb20g
dGhlIGxpYmMgZnVuY3Rpb25zLiBUaGUgb25seSB0aGluZ3MNCisgICAgd2hpY2ggYXJlIGFkZGVk
IGlzIHJlY29yZGluZyBmaWxlcyB3aGljaCBhcmUgb3BlbmVkIChhbmQgY2xvc2VkKSBieQ0KKyAg
ICB0aGUgZGVidWdnZXIuIFdoZW4gY2xlYW51cF9jbGllbnQoKSBpcyBjYWxsZWQsIHRoaXMgbGlz
dCBpcyBjb21wYXJlZA0KKyAgICB3aXRoIGFjdHVhbCBvcGVuIGZpbGVzIGFuZCBldmVyeSBmaWxl
LCB3aGljaCB3YXMgbm90IHNlZW4gYnkgZGJnX2ZzZXh0KCkNCisgICAgaXMgY2xvc2VkLg0KKyAN
CisgICAgVGhpcyB0ZWNobmlxdWUgZG9lcyBub3Qgd29yayBjb3JyZWN0bHkgd2hlbiB0aGUgZGVi
dWdnZXIgdXNlcyB0aGUgbG93ZXN0DQorICAgIHJvdXRpbmVzIGZvciBvcGVuaW5nL2NyZWF0aW5n
L2Nsb3NpbmcgZmlsZXMgd2hpY2ggYXJlDQorICAgIF9kb3Nfb3BlbigpLCBfZG9zX2NyZWF0KCks
IF9kb3NfY3JlYXRuZXcoKSBhbmQgX2Rvc19jbG9zZSgpLg0KKyAqLw0KKyANCisgc3RhdGljIHVu
c2lnbmVkIGNoYXIgaGFuZGxlc1syNTZdOw0KKyBzdGF0aWMgaW50IGluX2RiZ19mc2V4dCA9IDA7
DQorIA0KKyBzdGF0aWMgdm9pZCBjbG9zZV9oYW5kbGVzKHZvaWQpDQorIHsNCisgICBfX2RwbWlf
cmVncyByOw0KKyAgIGludCBwc3BfbGE7DQorICAgaW50IGpmdF9vZnM7DQorICAgaW50IGpmdF9j
b3VudDsNCisgICBpbnQgaGFuZGxlOw0KKyANCisgICAvKiBHZXQgb3VyIFBTUCBhZGRyZXNzLiAg
Ki8NCisgICByLnguYXggPSAweDYyMDA7DQorICAgX19kcG1pX2ludCAoMHgyMSwgJnIpOw0KKyAg
IHBzcF9sYSA9ICggKGludClyLnguYnggKSA8PCA0Ow0KKyANCisgICAvKiBHZXQgdGhlIG9mZnNl
dCBvZiB0aGUgSkZUIHRhYmxlIGJ5IChzZWcgPDwgNCkgKyBvZmZzZXQgKi8NCisgICBqZnRfb2Zz
ID0gKF9mYXJwZWVrdyhfZG9zX2RzLCBwc3BfbGEgKyAweDM2KSA8PCA0KSArDQorICAgICAgICAg
ICAgIF9mYXJwZWVrdyhfZG9zX2RzLCBwc3BfbGEgKyAweDM0KTsNCisgDQorICAgLyogTnVtYmVy
IG9mIHVzZWQgZW50cmllcyBpbiB0aGUgSkZUIHRhYmxlICovDQorICAgamZ0X2NvdW50ID0gX2Zh
cnBlZWt3KF9kb3NfZHMsIHBzcF9sYSArIDB4MzIpOw0KKyANCisgICAvKiBEaXNhYmxlIHRoZSBm
c2V4dCBmdW5jdGlvbiAqLw0KKyAgIGluX2RiZ19mc2V4dCsrOw0KKyANCisgICBmb3IgKGhhbmRs
ZT0wO2hhbmRsZTxqZnRfY291bnQ7aGFuZGxlKyspDQorICAgew0KKyAgICAgaWYgKF9mYXJwZWVr
YihfZG9zX2RzLGpmdF9vZnMrKykgIT0gMHhmZiAvKiBpdCBpcyBhbiBvcGVuZWQgaGFuZGxlICov
DQorICAgICAgICAgJiYgaGFuZGxlc1toYW5kbGVdID09IDB4ZmYgLyogYnV0IG5vdCByZWNvcmRl
ZCBieSB0aGUgZnNleHQgZnVuY3Rpb24gKi8NCisgICAgICAgICkNCisgICAgIHsgLyogaXQgd2Fz
IG9wZW5lZCBieSB0aGUgZGVidWdnZWUgKi8NCisgI2lmZGVmIENMT1NFX1VOUkVHSVNURVJFRF9G
SUxFUw0KKyAjaWZkZWYgREVCVUdfREJHQ09NX0ZJTEVTDQorICAgICAgIGZwcmludGYoc3RkZXJy
LCJjbG9zaW5nICVkXG4iLGhhbmRsZSk7DQorICNlbmRpZg0KKyAgICAgICBfY2xvc2UoaGFuZGxl
KTsNCisgI2Vsc2UgIC8qIG5vdCBDTE9TRV9VTlJFR0lTVEVSRURfRklMRVMgKi8NCisgI2lmZGVm
IERFQlVHX0RCR0NPTV9GSUxFUw0KKyAgICAgICBmcHJpbnRmKHN0ZGVyciwidW5rbm93biBvcGVu
IGZpbGUgJWRcbiIsaGFuZGxlKTsNCisgI2VuZGlmDQorICNlbmRpZiAvKiBDTE9TRV9VTlJFR0lT
VEVSRURfRklMRVMgKi8NCisgICAgIH0NCisgICB9DQorIA0KKyAgIC8qIEVuYWJsZSB0aGUgZnNl
eHQgZnVuY3Rpb24gKi8NCisgICBpbl9kYmdfZnNleHQtLTsNCisgfQ0KKyANCisgDQorIHN0YXRp
YyBpbnQgZGJnX2ZzZXh0KF9fRlNFWFRfRm51bWJlciBfZnVuY3Rpb25fbnVtYmVyLA0KKyAgICAg
ICAgICAgICAgICAgICAgICAgaW50ICpfcnYsIHZhX2xpc3QgX2FyZ3MpDQorIHsNCisgICBpbnQg
YXR0cmliLG9mbGFnLHJldHZhbCA9IDAsaGFuZGxlOw0KKyAgIGNvbnN0IGNoYXIgKmZpbGVuYW1l
Ow0KKyAgIC8qIFdlIGFyZSBjYWxsZWQgZnJvbSB0aGlzIGZ1bmN0aW9uICovDQorICAgaWYgKGlu
X2RiZ19mc2V4dCkgcmV0dXJuIDA7DQorICAgc3dpdGNoIChfZnVuY3Rpb25fbnVtYmVyKQ0KKyAg
IHsNCisgICAgIGRlZmF1bHQ6DQorICAgICAgIHJldHVybiAwOw0KKyAgICAgY2FzZSBfX0ZTRVhU
X2NyZWF0Og0KKyAgICAgICBmaWxlbmFtZSA9IHZhX2FyZyhfYXJncyxjb25zdCBjaGFyICopOw0K
KyAgICAgICBhdHRyaWIgPSB2YV9hcmcoX2FyZ3MsaW50KTsNCisgICAgICAgaW5fZGJnX2ZzZXh0
Kys7DQorICAgICAgIHJldHZhbCA9IF9jcmVhdChmaWxlbmFtZSxhdHRyaWIpOw0KKyAjaWZkZWYg
REVCVUdfREJHQ09NX0ZJTEVTDQorICAgICAgIGZwcmludGYoc3RkZXJyLCJfY3JlYXQoJXMpID0+
ICVkXG4iLGZpbGVuYW1lLHJldHZhbCk7DQorICNlbmRpZg0KKyAgICAgICBpbl9kYmdfZnNleHQt
LTsNCisgICAgICAgaWYgKHJldHZhbCAhPSAtMSkNCisgICAgICAgew0KKyAgICAgICAgIGhhbmRs
ZXNbcmV0dmFsXSA9IHJldHZhbDsNCisgICAgICAgICBfX0ZTRVhUX3NldF9mdW5jdGlvbihyZXR2
YWwsZGJnX2ZzZXh0KTsNCisgICAgICAgfQ0KKyAgICAgICBicmVhazsNCisgICAgIGNhc2UgX19G
U0VYVF9vcGVuOg0KKyAgICAgICBmaWxlbmFtZSA9IHZhX2FyZyhfYXJncyxjb25zdCBjaGFyICop
Ow0KKyAgICAgICBvZmxhZyA9IHZhX2FyZyhfYXJncyxpbnQpOw0KKyAgICAgICBpbl9kYmdfZnNl
eHQrKzsNCisgICAgICAgcmV0dmFsID0gX29wZW4oZmlsZW5hbWUsb2ZsYWcpOw0KKyAjaWZkZWYg
REVCVUdfREJHQ09NX0ZJTEVTDQorICAgICAgIGZwcmludGYoc3RkZXJyLCJfb3BlbiglcykgPT4g
JWRcbiIsZmlsZW5hbWUscmV0dmFsKTsNCisgI2VuZGlmDQorICAgICAgIGluX2RiZ19mc2V4dC0t
Ow0KKyAgICAgICBpZiAocmV0dmFsICE9IC0xKQ0KKyAgICAgICB7DQorICAgICAgICAgaGFuZGxl
c1tyZXR2YWxdID0gcmV0dmFsOw0KKyAgICAgICAgIF9fRlNFWFRfc2V0X2Z1bmN0aW9uKHJldHZh
bCxkYmdfZnNleHQpOw0KKyAgICAgICB9DQorICAgICAgIGJyZWFrOw0KKyAgICAgY2FzZSBfX0ZT
RVhUX2Nsb3NlOg0KKyAgICAgICBoYW5kbGUgPSB2YV9hcmcoX2FyZ3MsaW50KTsNCisgICAgICAg
aW5fZGJnX2ZzZXh0Kys7DQorICNpZmRlZiBERUJVR19EQkdDT01fRklMRVMNCisgICAgICAgZnBy
aW50ZihzdGRlcnIsIl9jbG9zZSglZClcbiIsaGFuZGxlKTsNCisgI2VuZGlmDQorICAgICAgIHJl
dHZhbCA9IF9jbG9zZShoYW5kbGUpOw0KKyAgICAgICBpbl9kYmdfZnNleHQtLTsNCisgICAgICAg
aWYgKHJldHZhbCA9PSAwKQ0KKyAgICAgICB7DQorICAgICAgICAgaGFuZGxlc1toYW5kbGVdID0g
MHhmZjsNCisgICAgICAgICBfX0ZTRVhUX3NldF9mdW5jdGlvbihoYW5kbGUsTlVMTCk7DQorICAg
ICAgIH0NCisgICAgICAgYnJlYWs7DQorICAgfQ0KKyAgICpfcnYgPSByZXR2YWw7DQorICAgcmV0
dXJuIDE7DQorIH0NCisgDQorIC8qIFdpdGggYXR0cmlidXRlIGNvbnN0cnVjdG9yIHRvIGJlIGNh
bGxlZCBhdXRvbWF0aWNhbHkgYmVmb3JlIG1haW4gKi8NCisgDQorIHN0YXRpYyB2b2lkIF9fYXR0
cmlidXRlX18oKF9fY29uc3RydWN0b3JfXykpDQorIF9pbml0X2RiZ19mc2V4dCh2b2lkKQ0KKyB7
DQorICAgX19kcG1pX3JlZ3MgcjsNCisgICBpbnQgcHNwX2xhOw0KKyAgIGludCBqZnRfb2ZzOw0K
KyAgIGludCBqZnRfY291bnQ7DQorIA0KKyAgIC8qIEdldCBvdXIgUFNQIGFkZHJlc3MuICAqLw0K
KyAgIHIueC5heCA9IDB4NjIwMDsNCisgICBfX2RwbWlfaW50ICgweDIxLCAmcik7DQorICAgcHNw
X2xhID0gKCAoaW50KXIueC5ieCApIDw8IDQ7DQorIA0KKyAgIC8qIEdldCB0aGUgb2Zmc2V0IG9m
IHRoZSBKRlQgdGFibGUgYnkgKHNlZyA8PCA0KSArIG9mZnNldCAqLw0KKyAgIGpmdF9vZnMgPSAo
X2ZhcnBlZWt3KF9kb3NfZHMsIHBzcF9sYSArIDB4MzYpIDw8IDQpICsNCisgICAgICAgICAgICAg
X2ZhcnBlZWt3KF9kb3NfZHMsIHBzcF9sYSArIDB4MzQpOw0KKyANCisgICAvKiBOdW1iZXIgb2Yg
dXNlZCBlbnRyaWVzIGluIHRoZSBKRlQgdGFibGUgKi8NCisgICBqZnRfY291bnQgPSBfZmFycGVl
a3coX2Rvc19kcywgcHNwX2xhICsgMHgzMik7DQorIA0KKyAgIC8qIEFkZCB0aGUgaGFuZGxlciBm
b3Igb3BlbmluZy9jcmVhdGluZyBmaWxlcyAqLw0KKyAgIF9fRlNFWFRfYWRkX29wZW5faGFuZGxl
cihkYmdfZnNleHQpOw0KKyANCisgICAvKiBJbml0aWFsaXplIGFsbCB0aGUgaGFuZGxlcyB0byAw
eGZmICovDQorICAgbWVtc2V0KGhhbmRsZXMsMHhmZixzaXplb2YoaGFuZGxlcykpOw0KKyANCisg
ICAvKiBHZXQgYSBjb3B5IG9mIGFsbCBhbHJlYWR5IG9wZW5lZCBoYW5kbGVzICovDQorICAgbW92
ZWRhdGEoX2Rvc19kcyxqZnRfb2ZzLF9teV9kcygpLChpbnQpaGFuZGxlcyxqZnRfY291bnQpOw0K
KyANCisgICAvKiBlbmFibGUgdGhlIGZzZXh0IGZ1bmN0aW9uICovDQorICAgaW5fZGJnX2ZzZXh0
ID0gMDsNCisgfQ0KKyAjZW5kaWYgLyogZGVmIFVTRV9GU0VYVCAqLw0KKyANCisgLyogDQorICAg
JExvZzogZGJnY29tLmMsdiAkDQorICAgUmV2aXNpb24gMS4xICAxOTk4LzEyLzIzIDE1OjUzOjA1
ICBQaWVycmUNCisgICBleGNlcHRpb25zIGFuZCBmbG9hdGluZm8NCisgDQorICAgUmV2aXNpb24g
MS4zICAxOTk4LzEyLzIxIDExOjAzOjAxICBwaWVycmUNCisgICAgKiBwcm9ibGVtcyBvZiBGU0VY
VF9kYmcgc29sdmVkDQorICANCisgKi8NClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQ0KSW5k
ZXg6IGdkYi9kYmdjb20uaA0KZGlmZiAtYyBudWwgZ2RiL2RiZ2NvbS5oOjEuMQ0KKioqIG51bAlX
ZWQgRGVjIDIzIDE3OjAyOjE2IDE5OTgNCi0tLSBnZGIvZGJnY29tLmgJV2VkIERlYyAyMyAxNjo1
MzowNCAxOTk4DQoqKioqKioqKioqKioqKioNCioqKiAwICoqKioNCi0tLSAxLDYxIC0tLS0NCisg
LyogQ29weXJpZ2h0IChDKSAxOTk2IERKIERlbG9yaWUsIHNlZSBDT1BZSU5HLkRKIGZvciBkZXRh
aWxzICovDQorIC8qIENvcHlyaWdodCAoQykgMTk5NSBESiBEZWxvcmllLCBzZWUgQ09QWUlORy5E
SiBmb3IgZGV0YWlscyAqLw0KKyAjaWZuZGVmIF9fZGpfaW5jbHVkZV9kZWJ1Z19kYmdjb21faF8N
CisgI2RlZmluZSBfX2RqX2luY2x1ZGVfZGVidWdfZGJnY29tX2hfDQorIA0KKyAjaWZkZWYgX19j
cGx1c3BsdXMNCisgZXh0ZXJuICJDIiB7DQorICNlbmRpZg0KKyANCisgI2lmbmRlZiBfX2RqX0VO
Rk9SQ0VfQU5TSV9GUkVFU1RBTkRJTkcNCisgDQorICNpZm5kZWYgX19TVFJJQ1RfQU5TSV9fDQor
IA0KKyAjaWZuZGVmIF9QT1NJWF9TT1VSQ0UNCisgDQorICNpbmNsdWRlIDxzZXRqbXAuaD4NCisg
I2luY2x1ZGUgPGRlYnVnL3Rzcy5oPg0KKyANCisgdHlwZWRlZiBzdHJ1Y3Qgew0KKyAgIHVuc2ln
bmVkIGxvbmcgYXBwX2Jhc2U7CS8qIGxpbmVhciBiYXNlIGFkZHJlc3Mgb2YgYXBwbGljYXRpb24g
Ki8NCisgICB1bnNpZ25lZCBsb25nIGRyWzhdOwkJLyogZGVidWcgcmVnaXN0ZXJzLCBzZXQgd2hl
biBhX3RzcyBydW5zICovDQorIH0gRXh0ZXJuYWxEZWJ1Z2dlckluZm87DQorIA0KKyBleHRlcm4g
RXh0ZXJuYWxEZWJ1Z2dlckluZm8gZWRpOw0KKyANCisgLyogc3RydWN0dXJlIG9mIEZQVSBlbnYg
Ki8NCisgLyogcGx1cyBzcGFjZSBmcm9tIHRoZSBGUFUgc3RhY2sgKi8NCisgDQorICNkZWZpbmUg
RlBVX1RPUF9NQVNLIDB4MzgwMA0KKyAjZGVmaW5lIEZQVV9UT1BfU0hJRlQgMTENCisgDQorIHR5
cGVkZWYgc3RydWN0IHsNCisgICB1bnNpZ25lZCBzaG9ydCBjb250cm9sLHJlczEsc3RhdHVzLHJl
czIsdGFnLHJlczM7DQorICAgdW5zaWduZWQgbG9uZyBpbnN0b2ZzOw0KKyAgIHVuc2lnbmVkIHNo
b3J0IGluc3RzZWwsb3Bjb2RlOw0KKyAgIHVuc2lnbmVkIGxvbmcgb3BlcmFuZG9mczsNCisgICB1
bnNpZ25lZCBzaG9ydCBvcGVyYW5kc2VsLHJlczQ7DQorICAgY2hhciBpc3ZhbGlkWzhdOw0KKyAg
IGxvbmcgZG91YmxlIHN0WzhdOw0KKyB9IEZQVUVudmlyb25tZW50Ow0KKyANCisgZXh0ZXJuIEZQ
VUVudmlyb25tZW50IGZwdWU7DQorIA0KKyB2b2lkIHJ1bl9jaGlsZCh2b2lkKTsNCisgaW50IHJl
YWRfY2hpbGQodW5zaWduZWQgY2hpbGRfYWRkciwgdm9pZCAqYnVmLCB1bnNpZ25lZCBsZW4pOw0K
KyBpbnQgd3JpdGVfY2hpbGQodW5zaWduZWQgY2hpbGRfYWRkciwgdm9pZCAqYnVmLCB1bnNpZ25l
ZCBsZW4pOw0KKyB2b2lkIGVkaV9pbml0KGptcF9idWYgc3RhcnRfc3RhdGUpOw0KKyB2b2lkIGNs
ZWFudXBfY2xpZW50KHZvaWQpOw0KKyANCisgI2VuZGlmIC8qICFfUE9TSVhfU09VUkNFICovDQor
ICNlbmRpZiAvKiAhX19TVFJJQ1RfQU5TSV9fICovDQorICNlbmRpZiAvKiAhX19kal9FTkZPUkNF
X0FOU0lfRlJFRVNUQU5ESU5HICovDQorIA0KKyAjaWZuZGVmIF9fZGpfRU5GT1JDRV9GVU5DVElP
Tl9DQUxMUw0KKyAjZW5kaWYgLyogIV9fZGpfRU5GT1JDRV9GVU5DVElPTl9DQUxMUyAqLw0KKyAN
CisgI2lmZGVmIF9fY3BsdXNwbHVzDQorIH0NCisgI2VuZGlmDQorIA0KKyAjZW5kaWYgLyogIV9f
ZGpfaW5jbHVkZV9kZWJ1Z19kYmdjb21faF8gKi8NCkluZGV4OiBnZGIvZGVmcy5oDQpkaWZmIC1j
IGdkYi9kZWZzLmg6MS4xLjEuMSBnZGIvZGVmcy5oOjEuMg0KKioqIGdkYi9kZWZzLmg6MS4xLjEu
MQlGcmkgRGVjIDA0IDEwOjUxOjA0IDE5OTgNCi0tLSBnZGIvZGVmcy5oCUZyaSBEZWMgMDQgMTE6
MzE6MzggMTk5OA0KKioqKioqKioqKioqKioqDQoqKiogMTI4LDEzNCAqKioqDQogICAgIGxhbmd1
YWdlX2ZvcnRyYW4sCQkvKiBGb3J0cmFuICovDQogICAgIGxhbmd1YWdlX20yLAkJCS8qIE1vZHVs
YS0yICovDQogICAgIGxhbmd1YWdlX2FzbSwJCS8qIEFzc2VtYmx5IGxhbmd1YWdlICovDQohICAg
IGxhbmd1YWdlX3NjbQkJCS8qIFNjaGVtZSAvIEd1aWxlICovDQogIH07DQogIA0KICAvKiB0aGUg
Y2xlYW51cCBsaXN0IHJlY29yZHMgdGhpbmdzIHRoYXQgaGF2ZSB0byBiZSB1bmRvbmUNCi0tLSAx
MjgsMTM1IC0tLS0NCiAgICAgbGFuZ3VhZ2VfZm9ydHJhbiwJCS8qIEZvcnRyYW4gKi8NCiAgICAg
bGFuZ3VhZ2VfbTIsCQkJLyogTW9kdWxhLTIgKi8NCiAgICAgbGFuZ3VhZ2VfYXNtLAkJLyogQXNz
ZW1ibHkgbGFuZ3VhZ2UgKi8NCiEgICAgbGFuZ3VhZ2Vfc2NtLAkJLyogU2NoZW1lIC8gR3VpbGUg
Ki8NCiEgICAgbGFuZ3VhZ2VfcGFzY2FsCQkvKiBQYXNjYWwgRlBDIEdOVSA/PyAqLw0KICB9Ow0K
ICANCiAgLyogdGhlIGNsZWFudXAgbGlzdCByZWNvcmRzIHRoaW5ncyB0aGF0IGhhdmUgdG8gYmUg
dW5kb25lDQpJbmRleDogZ2RiL2V2YWwuYw0KZGlmZiAtYyBnZGIvZXZhbC5jOjEuMS4xLjEgZ2Ri
L2V2YWwuYzoxLjINCioqKiBnZGIvZXZhbC5jOjEuMS4xLjEJRnJpIERlYyAwNCAxMDo1MTowNCAx
OTk4DQotLS0gZ2RiL2V2YWwuYwlXZWQgRGVjIDIzIDE2OjUzOjA0IDE5OTgNCioqKioqKioqKioq
KioqKg0KKioqIDEwMjQsMTAyOSAqKioqDQotLS0gMTAyNCwxMDMwIC0tLS0NCiAgDQogICAgICBj
YXNlIEJJTk9QX01VTDoNCiAgICAgIGNhc2UgQklOT1BfRElWOg0KKyAgICAgY2FzZSBCSU5PUF9J
TlRESVY6DQogICAgICBjYXNlIEJJTk9QX1JFTToNCiAgICAgIGNhc2UgQklOT1BfTU9EOg0KICAg
ICAgY2FzZSBCSU5PUF9MU0g6DQpJbmRleDogZ2RiL2ZpbmR2YXIuYw0KZGlmZiAtYyBnZGIvZmlu
ZHZhci5jOjEuMS4xLjEgZ2RiL2ZpbmR2YXIuYzoxLjINCioqKiBnZGIvZmluZHZhci5jOjEuMS4x
LjEJRnJpIERlYyAwNCAxMDo1MTowNCAxOTk4DQotLS0gZ2RiL2ZpbmR2YXIuYwlXZWQgRGVjIDIz
IDE2OjUzOjA2IDE5OTgNCioqKioqKioqKioqKioqKg0KKioqIDMyLDM3ICoqKioNCi0tLSAzMiw0
MSAtLS0tDQogICNkZWZpbmUgQ0FOTk9UX1NUT1JFX1JFR0lTVEVSKHJlZ25vKSAwDQogICNlbmRp
Zg0KICANCisgI2lmICFkZWZpbmVkIChBTFRFUk5BVEVfTE9OR19ET1VCTEVfU0laRSkNCisgI2Rl
ZmluZSBBTFRFUk5BVEVfTE9OR19ET1VCTEVfU0laRSAoc2l6ZW9mKERPVUJMRVNUKSkNCisgI2Vu
ZGlmDQorIA0KICBzdGF0aWMgdm9pZCB3cml0ZV9yZWdpc3Rlcl9waWQgUEFSQU1TICgoaW50IHJl
Z25vLCBMT05HRVNUIHZhbCwgaW50IHBpZCkpOw0KICANCiAgLyogQmFzaWMgYnl0ZS1zd2FwcGlu
ZyByb3V0aW5lcy4gIEdEQiBoYXMgbmVlZGVkIHRoZXNlIGZvciBhIGxvbmcgdGltZS4uLg0KKioq
KioqKioqKioqKioqDQoqKiogMjk5LDMwNSAqKioqDQogICAgICAgIFNXQVBfRkxPQVRJTkcgKCZy
ZXR2YWwsIHNpemVvZiAocmV0dmFsKSk7DQogICAgICAgIHJldHVybiByZXR2YWw7DQogICAgICB9
DQohICAgZWxzZSBpZiAobGVuID09IHNpemVvZiAoRE9VQkxFU1QpKQ0KICAgICAgew0KICAgICAg
ICBET1VCTEVTVCByZXR2YWw7DQogICAgICAgIG1lbWNweSAoJnJldHZhbCwgYWRkciwgc2l6ZW9m
IChyZXR2YWwpKTsNCi0tLSAzMDMsMzA5IC0tLS0NCiAgICAgICAgU1dBUF9GTE9BVElORyAoJnJl
dHZhbCwgc2l6ZW9mIChyZXR2YWwpKTsNCiAgICAgICAgcmV0dXJuIHJldHZhbDsNCiAgICAgIH0N
CiEgICBlbHNlIGlmICgobGVuID09IHNpemVvZiAoRE9VQkxFU1QpKSB8fCAobGVuID09IEFMVEVS
TkFURV9MT05HX0RPVUJMRV9TSVpFKSkNCiAgICAgIHsNCiAgICAgICAgRE9VQkxFU1QgcmV0dmFs
Ow0KICAgICAgICBtZW1jcHkgKCZyZXR2YWwsIGFkZHIsIHNpemVvZiAocmV0dmFsKSk7DQoqKioq
KioqKioqKioqKioNCioqKiAzMzEsMzM3ICoqKioNCiAgICAgICAgU1dBUF9GTE9BVElORyAoJmRv
dWJsZXZhbCwgc2l6ZW9mIChkb3VibGV2YWwpKTsNCiAgICAgICAgbWVtY3B5IChhZGRyLCAmZG91
YmxldmFsLCBzaXplb2YgKGRvdWJsZXZhbCkpOw0KICAgICAgfQ0KISAgIGVsc2UgaWYgKGxlbiA9
PSBzaXplb2YgKERPVUJMRVNUKSkNCiAgICAgIHsNCiAgICAgICAgU1dBUF9GTE9BVElORyAoJnZh
bCwgc2l6ZW9mICh2YWwpKTsNCiAgICAgICAgbWVtY3B5IChhZGRyLCAmdmFsLCBzaXplb2YgKHZh
bCkpOw0KLS0tIDMzNSwzNDEgLS0tLQ0KICAgICAgICBTV0FQX0ZMT0FUSU5HICgmZG91YmxldmFs
LCBzaXplb2YgKGRvdWJsZXZhbCkpOw0KICAgICAgICBtZW1jcHkgKGFkZHIsICZkb3VibGV2YWws
IHNpemVvZiAoZG91YmxldmFsKSk7DQogICAgICB9DQohICAgZWxzZSBpZiAoKGxlbiA9PSBzaXpl
b2YgKERPVUJMRVNUKSkgfHwgKGxlbiA9PSBBTFRFUk5BVEVfTE9OR19ET1VCTEVfU0laRSkpDQog
ICAgICB7DQogICAgICAgIFNXQVBfRkxPQVRJTkcgKCZ2YWwsIHNpemVvZiAodmFsKSk7DQogICAg
ICAgIG1lbWNweSAoYWRkciwgJnZhbCwgc2l6ZW9mICh2YWwpKTsNCkluZGV4OiBnZGIvZ28zMnRh
cmcuYw0KZGlmZiAtYyBnZGIvZ28zMnRhcmcuYzoxLjEuMS4xIGdkYi9nbzMydGFyZy5jOjEuMg0K
KioqIGdkYi9nbzMydGFyZy5jOjEuMS4xLjEJRnJpIERlYyAwNCAxMDo1MTowNCAxOTk4DQotLS0g
Z2RiL2dvMzJ0YXJnLmMJV2VkIERlYyAyMyAxNjo1MzowNiAxOTk4DQoqKioqKioqKioqKioqKioN
CioqKiAxLDY4NCAqKioqDQohIC8qIFRhcmdldC12ZWN0b3Igb3BlcmF0aW9ucyBmb3IgY29udHJv
bGxpbmcgZ28zMiBwcm9jZXNzZXMsIGZvciBHREIuDQ0KISAgICBDb3B5cmlnaHQgMTk5NCBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4NDQohICAgIENvbnRyaWJ1dGVkIGJ5IERKIERlbG9y
aWUuDQ0KISAgICBNb2RpZmllZCBmb3IgVjIgYnkgQ1cgU2FuZG1hbm4uDQ0KISANDQohIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIEdEQi4NDQohIA0NCiEgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNDQohIGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
DQ0KISB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvcg0NCiEgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NDQoh
IA0NCiEgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsDQ0KISBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZg0NCiEgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0NCiEgR05VIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NDQohIA0NCiEgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UNDQohIGFsb25nIHdpdGgg
dGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQ0KISBGb3Vu
ZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4gICov
DQ0KISANDQohICNpbmNsdWRlIDxmY250bC5oPg0NCiEgDQ0KISAjaW5jbHVkZSAiZGVmcy5oIg0N
CiEgI2luY2x1ZGUgImZyYW1lLmgiICAvKiByZXF1aXJlZCBieSBpbmZlcmlvci5oICovDQ0KISAj
aW5jbHVkZSAiaW5mZXJpb3IuaCINDQohICNpbmNsdWRlICJ0YXJnZXQuaCINDQohICNpbmNsdWRl
ICJ3YWl0LmgiDQ0KISAjaW5jbHVkZSAiZ2RiY29yZS5oIg0NCiEgI2luY2x1ZGUgImNvbW1hbmQu
aCINDQohIA0NCiEgZXh0ZXJuIGNoYXIgKiplbnZpcm9uOw0NCiEgDQ0KISAvKiBGb3J3YXJkIGRl
Y2xhcmF0aW9uICovDQ0KISBleHRlcm4gc3RydWN0IHRhcmdldF9vcHMgZ28zMl9vcHM7DQ0KISAN
DQohIC8qIMnNzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N
zc3Nzc3Nzc3Nzc3Nzc3Nzc3NzbsNDQohICAgILogIEdvMzIncyBleHRlcm5hbCBkZWJ1Z2dlciBp
bnRlcmZhY2Ugcm91dGluZXMJCQm6DQ0KISAgICDIzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N
zc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc28ICovDQ0KISANDQohICNk
ZWZpbmUgU09NRV9QSUQgNDINDQohIA0NCiEgc3RhdGljIGludCBwcm9nX2hhc19zdGFydGVkID0g
MDsNDQohIA0NCiEgI2luY2x1ZGUgPHN0ZGlvLmg+DQ0KISAjaW5jbHVkZSA8c3RkbGliLmg+DQ0K
ISAjaW5jbHVkZSA8c3RyaW5nLmg+DQ0KISAjaW5jbHVkZSA8dW5pc3RkLmg+DQ0KISAjaW5jbHVk
ZSA8ZGVidWcvdjJsb2FkLmg+DQ0KISAjaW5jbHVkZSA8ZGVidWcvZGJnY29tLmg+DQ0KISANDQoh
IHZvaWQgY2xlYW51cF9jbGllbnQoKTsNDQohIA0NCiEgI2RlZmluZSByX29mcyh4KSAoKGludCko
JigoKFRTUyAqKTApLT54KSkpDQ0KISBzdGF0aWMgc3RydWN0IHsNDQohICAgaW50IHRzc19vZnM7
DQ0KISAgIGludCBzaXplOw0NCiEgfSByZWdub19tYXBwaW5nW10gPSB7DQ0KISAgIHJfb2ZzKHRz
c19lYXgpLCA0LA0NCiEgICByX29mcyh0c3NfZWN4KSwgNCwNDQohICAgcl9vZnModHNzX2VkeCks
IDQsDQ0KISAgIHJfb2ZzKHRzc19lYngpLCA0LA0NCiEgICByX29mcyh0c3NfZXNwKSwgNCwNDQoh
ICAgcl9vZnModHNzX2VicCksIDQsDQ0KISAgIHJfb2ZzKHRzc19lc2kpLCA0LA0NCiEgICByX29m
cyh0c3NfZWRpKSwgNCwNDQohICAgcl9vZnModHNzX2VpcCksIDQsDQ0KISAgIHJfb2ZzKHRzc19l
ZmxhZ3MpLCA0LA0NCiEgICByX29mcyh0c3NfY3MpLCAyLA0NCiEgICByX29mcyh0c3Nfc3MpLCAy
LA0NCiEgICByX29mcyh0c3NfZHMpLCAyLA0NCiEgICByX29mcyh0c3NfZXMpLCAyLA0NCiEgICBy
X29mcyh0c3NfZnMpLCAyLA0NCiEgICByX29mcyh0c3NfZ3MpLCAyDQ0KISB9Ow0NCiEgDQ0KISBz
dGF0aWMgc3RydWN0IHsNDQohICAgaW50IGdvMzJfc2lnOw0NCiEgICBpbnQgZ2RiX3NpZzsNDQoh
IH0gc2lnX21hcFtdID0gew0NCiEgICAwLCBUQVJHRVRfU0lHTkFMX0ZQRSwNDQohICAgMSwgVEFS
R0VUX1NJR05BTF9UUkFQLA0NCiEgICAyLCBUQVJHRVRfU0lHTkFMX1VOS05PV04sDQ0KISAgIDMs
IFRBUkdFVF9TSUdOQUxfVFJBUCwNDQohICAgNCwgVEFSR0VUX1NJR05BTF9GUEUsDQ0KISAgIDUs
IFRBUkdFVF9TSUdOQUxfU0VHViwNDQohICAgNiwgVEFSR0VUX1NJR05BTF9JTEwsDQ0KISAgIDcs
IFRBUkdFVF9TSUdOQUxfRlBFLA0NCiEgICA4LCBUQVJHRVRfU0lHTkFMX1NFR1YsDQ0KISAgIDks
IFRBUkdFVF9TSUdOQUxfU0VHViwNDQohICAgMTAsIFRBUkdFVF9TSUdOQUxfQlVTLA0NCiEgICAx
MSwgVEFSR0VUX1NJR05BTF9TRUdWLA0NCiEgICAxMiwgVEFSR0VUX1NJR05BTF9TRUdWLA0NCiEg
ICAxMywgVEFSR0VUX1NJR05BTF9TRUdWLA0NCiEgICAxNCwgVEFSR0VUX1NJR05BTF9TRUdWLA0N
CiEgICAxNiwgVEFSR0VUX1NJR05BTF9GUEUsDQ0KISAgIDMxLCBUQVJHRVRfU0lHTkFMX0lMTCwN
DQohIDB4NzUsIFRBUkdFVF9TSUdOQUxfRlBFLA0NCiEgMHg3OSwgVEFSR0VUX1NJR05BTF9JTlQs
DQ0KISAweDFiLCBUQVJHRVRfU0lHTkFMX0lOVCwNDQohICAgLTEsLTENDQohIH07DQ0KISANDQoh
IHZvaWQNDQohIGluaXRfZ28zMl9leHRkZWJ1ZyhpbnQgKmFyZ2MsIGNoYXIgKioqYXJndngpDQ0K
ISB7DQ0KISAgIGludCBpOw0NCiEgICBjaGFyICoqYXJndjsNDQohICAgY2hhciBjbWRsaW5lWzEy
OF07DQ0KISB9DQ0KISANDQohIC8qIMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE
xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEICovDQ0KISANDQohIHN0
YXRpYyB2b2lkDQ0KISBnbzMyX29wZW4oY2hhciAqbmFtZSwgaW50IGZyb21fdHR5KQ0NCiEgew0N
CiEgICBwcmludGZfdW5maWx0ZXJlZCgiVXNlIHRoZSBgcnVuJyBjb21tYW5kIHRvIHJ1biBnbzMy
IHByb2dyYW1zXG4iKTsNDQohIH0NDQohIA0NCiEgLyogxMTExMTExMTExMTExMTExMTExMTExMTE
xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQgKi8N
DQohIA0NCiEgc3RhdGljIHZvaWQgZ28zMl9jbG9zZShpbnQgcXVpdHRpbmcpDQ0KISB7DQ0KISAg
IC8qcHJpbnRmX3VuZmlsdGVyZWQoImdvMzJfY2xvc2UgY2FsbGVkXG4iKTsqLw0NCiEgfQ0NCiEg
DQ0KISAvKiDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE
xMTExMTExMTExMTExMTExMTExMTExMTExMTExCAqLw0NCiEgDQ0KISBzdGF0aWMgdm9pZA0NCiEg
Z28zMl9hdHRhY2goY2hhciAqYXJncywgaW50IGZyb21fdHR5KQ0NCiEgew0NCiEgICBwcmludGZf
dW5maWx0ZXJlZCgiVXNlIHRoZSBgcnVuJyBjb21tYW5kIHRvIHJ1biBnbzMyIHByb2dyYW1zXG4i
KTsNDQohIH0NDQohIA0NCiEgLyogxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE
xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQgKi8NDQohIA0NCiEgc3Rh
dGljIHZvaWQNDQohIGdvMzJfZGV0YWNoKGNoYXIgKmFyZ3MsIGludCBmcm9tX3R0eSkNDQohIHsN
DQohICAgLypwcmludGZfdW5maWx0ZXJlZCgiZ28zMl9kZXRhY2ggY2FsbGVkXG4iKTsqLw0NCiEg
fQ0NCiEgDQ0KISAvKiDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE
xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCAqLw0NCiEgDQ0KISBzdGF0aWMgaW50
IHJlc3VtZV9pc19zdGVwOw0NCiEgDQ0KISBzdGF0aWMgdm9pZA0NCiEgZ28zMl9yZXN1bWUoaW50
IHBpZCwgaW50IHN0ZXAsIGVudW0gdGFyZ2V0X3NpZ25hbCBzaWdnbmFsKQ0NCiEgew0NCiEgI2lm
IDANDQohICAgcHJpbnRmX3VuZmlsdGVyZWQoImdvMzJfcmVzdW1lIGNhbGxlZFxuIik7DQ0KISAj
ZW5kaWYNDQohICAgcmVzdW1lX2lzX3N0ZXAgPSBzdGVwOw0NCiEgfQ0NCiEgDQ0KISAvKiDExMTE
xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE
xMTExMTExMTExMTExMTExCAqLw0NCiEgDQ0KISBzdGF0aWMgaW50DQ0KISBnbzMyX3dhaXQoaW50
IHBpZCwgc3RydWN0IHRhcmdldF93YWl0c3RhdHVzICpzdGF0dXMpDQ0KISB7DQ0KISAjaWYgMA0N
CiEgICBwcmludGZfdW5maWx0ZXJlZCgiZ28zMl93YWl0ICVkXG4iLCBwaWQpOw0NCiEgI2VuZGlm
DQ0KISAgIGlmIChyZXN1bWVfaXNfc3RlcCkNDQohICAgICBhX3Rzcy50c3NfZWZsYWdzIHw9IDB4
MDEwMDsNDQohICAgZWxzZQ0NCiEgICAgIGFfdHNzLnRzc19lZmxhZ3MgJj0gMHhmZWZmOw0NCiEg
ICBydW5fY2hpbGQoKTsNDQohICAgaWYgKGFfdHNzLnRzc19pcnFuID09IDB4MjEpDQ0KISAgIHsN
DQohICAgICBzdGF0dXMtPmtpbmQgPSBUQVJHRVRfV0FJVEtJTkRfRVhJVEVEOw0NCiEgICAgIHN0
YXR1cy0+dmFsdWUuaW50ZWdlciA9IGFfdHNzLnRzc19lYXggJiAweGZmOw0NCiEgICB9DQ0KISAg
IGVsc2UNDQohICAgew0NCiEgICAgIGludCBpOw0NCiEgICAgIHN0YXR1cy0+dmFsdWUuc2lnID0g
VEFSR0VUX1NJR05BTF9VTktOT1dOOw0NCiEgICAgIGZvciAoaT0wOyBzaWdfbWFwW2ldLmdvMzJf
c2lnICE9IC0xOyBpKyspDQ0KISAgICAgICBpZiAoYV90c3MudHNzX2lycW4gPT0gc2lnX21hcFtp
XS5nbzMyX3NpZykNDQohICAgICAgIHsNDQohICAgICAgICAgc3RhdHVzLT52YWx1ZS5zaWcgPSBz
aWdfbWFwW2ldLmdkYl9zaWc7DQ0KISAgICAgICAgIGJyZWFrOw0NCiEgICAgICAgfQ0NCiEgICAg
IHN0YXR1cy0+a2luZCA9IFRBUkdFVF9XQUlUS0lORF9TVE9QUEVEOw0NCiEgICB9DQ0KISAgIHJl
dHVybiBTT01FX1BJRDsNDQohIH0NDQohIA0NCiEgLyogxMTExMTExMTExMTExMTExMTExMTExMTE
xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQgKi8N
DQohIA0NCiEgc3RhdGljIHZvaWQNDQohIGdvMzJfZmV0Y2hfcmVnaXN0ZXJzKGludCByZWdubykN
DQohIHsNDQohIC8qSkhXKi8NDQohICAgaW50IGVuZF9yZWc9cmVnbm8rMTsJLypqdXN0IG9uZSBy
ZWcgaW5pdGlhbGx5Ki8NDQohICNpZiAwDQ0KISAgIHByaW50Zl91bmZpbHRlcmVkKCJnbzMyX2Zl
dGNoX3JlZ2lzdGVycyBjYWxsZWRcbiIpOw0NCiEgI2VuZGlmDQ0KISAgIGlmIChyZWdubyA8IDAp
IHsJLypkbyB0aGUgYWxsIHJlZ2lzdGVycyovDQ0KISAgICAgIHJlZ25vPTA7CS8qc3RhcnQgYXQg
Zmlyc3QgcmVnaXN0ZXIqLw0NCiEgICAgICBlbmRfcmVnPXNpemVvZihyZWdub19tYXBwaW5nKS9z
aXplb2YocmVnbm9fbWFwcGluZ1swXSk7CS8qIyByZWdzIGluIHRhYmxlKi8NDQohICAgfQ0NCiEg
ICBmb3IgKDsgcmVnbm88ZW5kX3JlZzsgcmVnbm8rKykgew0NCiEgICAgICBzd2l0Y2ggKHJlZ25v
X21hcHBpbmdbcmVnbm9dLnNpemUpDQ0KISAgICAgIHsNDQohICAgICAgICBjYXNlIDQ6DQ0KISAg
ICAgICAgY2FzZSAyOg0NCiEgICAgICAgICAgc3VwcGx5X3JlZ2lzdGVyKHJlZ25vLCAoY2hhciAq
KSZhX3RzcyArIHJlZ25vX21hcHBpbmdbcmVnbm9dLnRzc19vZnMpOw0NCiEgICAgICAgICAgYnJl
YWs7DQ0KISAgICAgICBkZWZhdWx0OgkvKnVua25vd24gcmVnaXN0ZXIgc2l6ZSovDQ0KISAgICAg
ICAgICBwcmludGZfdW5maWx0ZXJlZCgiSW52YWxpZCByZWdpc3RlciBzaXplICVkIGJ5dGVzIGlu
IGdvMzJfZmV0Y2hfcmVnaXN0ZXIoKSIsIHJlZ25vX21hcHBpbmdbcmVnbm9dLnNpemUpOw0NCiEg
ICAgICAgICAgZXhpdCgxKTsNDQohICAgICAgfQ0NCiEgICB9DQ0KISB9DQ0KISANDQohIC8qIMTE
xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE
xMTExMTExMTExMTExMTExMTEICovDQ0KISANDQohIHN0YXRpYyB2b2lkIHN0b3JlX3JlZ2lzdGVy
KGludCByZWdubykNDQohIHsNDQohICAgY2hhciAqcnAgPSAoY2hhciAqKSZhX3RzcyArIHJlZ25v
X21hcHBpbmdbcmVnbm9dLnRzc19vZnM7DQ0KISAgIGludCB2ID0gKihpbnQgKikoJnJlZ2lzdGVy
c1tSRUdJU1RFUl9CWVRFKHJlZ25vKV0pOw0NCiEgICBzd2l0Y2ggKHJlZ25vX21hcHBpbmdbcmVn
bm9dLnNpemUpDQ0KISAgIHsNDQohICAgICBjYXNlIDQ6DQ0KISAgICAgICAqKGludCAqKXJwID0g
djsNDQohICAgICAgIGJyZWFrOw0NCiEgICAgIGNhc2UgMjoNDQohICAgICAgICooc2hvcnQgKily
cCA9IHY7DQ0KISAgICAgICBicmVhazsNDQohICAgIGRlZmF1bHQ6CS8qdW5rbm93biByZWdpc3Rl
ciBzaXplKi8NDQohICAgICAgIHByaW50Zl91bmZpbHRlcmVkKCJJbnZhbGlkIHJlZ2lzdGVyIHNp
emUgJWQgYnl0ZXMgaW4gc3RvcmVfcmVnaXN0ZXIoKSIsIHJlZ25vX21hcHBpbmdbcmVnbm9dLnNp
emUpOw0NCiEgICAgICAgZXhpdCgxKTsNDQohICAgfQ0NCiEgfQ0NCiEgDQ0KISBzdGF0aWMgdm9p
ZA0NCiEgZ28zMl9zdG9yZV9yZWdpc3RlcnMoaW50IHJlZ25vKQ0NCiEgew0NCiEgI2lmIDANDQoh
ICAgcHJpbnRmX3VuZmlsdGVyZWQoImdvMzJfc3RvcmVfcmVnaXN0ZXJzIGNhbGxlZFxuIik7DQ0K
ISAjZW5kaWYNDQohICAgaWYgKHJlZ25vID49IDApDQ0KISAgICAgc3RvcmVfcmVnaXN0ZXIocmVn
bm8pOw0NCiEgICBlbHNlDQ0KISAgIHsNDQohICAgICBpbnQgcjsNDQohICAgICBmb3IgKHI9MDsg
cjxzaXplb2YocmVnbm9fbWFwcGluZykvc2l6ZW9mKHJlZ25vX21hcHBpbmdbMF0pOyByKyspDQ0K
ISAgICAgICBzdG9yZV9yZWdpc3RlcihyKTsNDQohICAgfQ0NCiEgfQ0NCiEgDQ0KISAvKiDExMTE
xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE
xMTExMTExMTExMTExMTExCAqLw0NCiEgDQ0KISBzdGF0aWMgdm9pZA0NCiEgZ28zMl9wcmVwYXJl
X3RvX3N0b3JlKHZvaWQpDQ0KISB7DQ0KISAjaWYgMA0NCiEgICBwcmludGZfdW5maWx0ZXJlZCgi
Z28zMl9wcmVwYXJlX3RvX3N0b3JlIGNhbGxlZFxuIik7DQ0KISAjZW5kaWYNDQohIH0NDQohIA0N
CiEgLyogxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE
xMTExMTExMTExMTExMTExMTExMTExMTExMQgKi8NDQohIA0NCiEgc3RhdGljIGludA0NCiEgZ28z
Ml94ZmVyX21lbW9yeShDT1JFX0FERFIgbWVtYWRkciwgY2hhciAqbXlhZGRyLCBpbnQgbGVuLCBp
bnQgd3JpdGUsDQ0KISAJCSBzdHJ1Y3QgdGFyZ2V0X29wcyAqdGFyZ2V0KQ0NCiEgew0NCiEgI2lm
IDANDQohICAgcHJpbnRmX3VuZmlsdGVyZWQoImdvMzJfeGZlcl9tZW1vcnkgJXggJXggJWQgJWRc
biIsIG1lbWFkZHIsIG15YWRkciwgbGVuLCB3cml0ZSk7DQ0KISAjZW5kaWYNDQohICAgaWYgKHdy
aXRlKQ0NCiEgICAgIHdyaXRlX2NoaWxkKG1lbWFkZHIsIG15YWRkciwgbGVuKTsNDQohICAgZWxz
ZQ0NCiEgICAgIHJlYWRfY2hpbGQobWVtYWRkciwgbXlhZGRyLCBsZW4pOw0NCiEgICByZXR1cm4g
bGVuOw0NCiEgfQ0NCiEgDQ0KISAvKiDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE
xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCAqLw0NCiEgDQ0KISBz
dGF0aWMgdm9pZA0NCiEgZ28zMl9maWxlc19pbmZvKHN0cnVjdCB0YXJnZXRfb3BzICp0YXJnZXQp
DQ0KISB7DQ0KISAgIHByaW50Zl91bmZpbHRlcmVkKCJZb3UgYXJlIHJ1bm5pbmcgYSBESkdQUCBW
MiBwcm9ncmFtXG4iKTsNDQohIH0NDQohIA0NCiEgLyogxMTExMTExMTExMTExMTExMTExMTExMTE
xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQgKi8N
DQohIA0NCiEgc3RhdGljIHZvaWQgZ28zMl9zdG9wKCkNDQohIHsNDQohICAgLypwcmludGZfdW5m
aWx0ZXJlZCgiZ28zMl9zdG9wIGNhbGxlZFxuIik7Ki8NDQohICAgbm9ybWFsX3N0b3AoKTsNDQoh
ICAgY2xlYW51cF9jbGllbnQoKTsNDQohICAgaW5mZXJpb3JfcGlkID0gMDsNDQohICAgcHJvZ19o
YXNfc3RhcnRlZCA9IDA7DQ0KISB9DQ0KISANDQohIHN0YXRpYyB2b2lkDQ0KISBnbzMyX2tpbGxf
aW5mZXJpb3Iodm9pZCkNDQohIHsNDQohICAgLypwcmludGZfdW5maWx0ZXJlZCgiZ28zMl9raWxs
X2luZmVyaW9yIGNhbGxlZFxuIik7Ki8NDQohICAgZ28zMl9zdG9wKCk7DQ0KISAgIHVucHVzaF90
YXJnZXQoJmdvMzJfb3BzKTsNDQohIH0NDQohIA0NCiEgLyogxMTExMTExMTExMTExMTExMTExMTE
xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQg
Ki8NDQohIA0NCiEgZXh0ZXJuIGNoYXIgKiplbnZpcm9uOw0NCiEgDQ0KISBzdGF0aWMgdm9pZA0N
CiEgZ28zMl9jcmVhdGVfaW5mZXJpb3IoY2hhciAqZXhlY19maWxlLCBjaGFyICphcmdzLCBjaGFy
ICoqZW52KQ0NCiEgew0NCiEgICBqbXBfYnVmIHN0YXJ0X3N0YXRlOw0NCiEgICBjaGFyICpjbWRs
aW5lOw0NCiEgICBjaGFyICoqZW52X3NhdmUgPSBlbnZpcm9uOw0NCiEgICAvKnByaW50Zl91bmZp
bHRlcmVkKCJnbzMyX2NyZWF0ZV9pbmZlcmlvciBjYWxsZWRcbiIpOyovDQ0KISAgIGlmIChwcm9n
X2hhc19zdGFydGVkKQ0NCiEgICB7DQ0KISAgICAgZ28zMl9raWxsX2luZmVyaW9yKCk7DQ0KISAg
IH0NDQohIA0NCiEgICBjbWRsaW5lID0gKGNoYXIgKilhbGxvY2Eoc3RybGVuKGFyZ3MpKzQpOw0N
CiEgICBjbWRsaW5lWzBdID0gc3RybGVuKGFyZ3MpOw0NCiEgICBzdHJjcHkoY21kbGluZSsxLCBh
cmdzKTsNDQohICAgY21kbGluZVtzdHJsZW4oYXJncykrMV0gPSAxMzsNDQohIA0NCiEgICBlbnZp
cm9uID0gZW52Ow0NCiEgDQ0KISAgIGlmICh2MmxvYWRpbWFnZShleGVjX2ZpbGUsIGNtZGxpbmUs
IHN0YXJ0X3N0YXRlKSkNDQohICAgew0NCiEgICAgIGVudmlyb24gPSBlbnZfc2F2ZTsNDQohICAg
ICBwcmludGZfdW5maWx0ZXJlZCgiTG9hZCBmYWlsZWQgZm9yIGltYWdlICVzXG4iLCBleGVjX2Zp
bGUpOw0NCiEgICAgIGV4aXQoMSk7DQ0KISAgIH0NDQohICAgZW52aXJvbiA9IGVudl9zYXZlOw0N
CiEgDQ0KISAgIGVkaV9pbml0KHN0YXJ0X3N0YXRlKTsNDQohIA0NCiEgICBpbmZlcmlvcl9waWQg
PSBTT01FX1BJRDsNDQohICAgcHVzaF90YXJnZXQoJmdvMzJfb3BzKTsNDQohICAgY2xlYXJfcHJv
Y2VlZF9zdGF0dXMoKTsNDQohICAgaW5zZXJ0X2JyZWFrcG9pbnRzKCk7DQ0KISAgIHByb2NlZWQo
KENPUkVfQUREUikgLTEsIFRBUkdFVF9TSUdOQUxfMCwgMCk7DQ0KISB9DQ0KISANDQohIC8qIMTE
xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE
xMTExMTExMTExMTExMTExMTEICovDQ0KISANDQohIHN0YXRpYyB2b2lkDQ0KISBnbzMyX21vdXJu
X2luZmVyaW9yKHZvaWQpDQ0KISB7DQ0KISAgIC8qcHJpbnRmX2ZpbHRlcmVkKCJnbzMyX21vdXJu
X2luZmVyaW9yIGNhbGxlZFxuIik7Ki8NDQohICAgZ28zMl9raWxsX2luZmVyaW9yKCk7DQ0KISAg
IGdlbmVyaWNfbW91cm5faW5mZXJpb3IoKTsNDQohIH0NDQohIA0NCiEgLyogxMTExMTExMTExMTE
xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE
xMTExMTExMQgKi8NDQohIA0NCiEgc3RhdGljIGludCBnbzMyX2Nhbl9ydW4odm9pZCkNDQohIHsN
DQohICAgcmV0dXJuIDE7DQ0KISB9DQ0KISANDQohIC8qIMTExMTExMTExMTExMTExMTExMTExMTE
xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEICov
DQ0KISANDQohIHN0YXRpYyB2b2lkIGlnbm9yZSh2b2lkKSB7fQ0NCiEgc3RhdGljIHZvaWQgaWdu
b3JlMihjaGFyICphLGludCBiKSB7fQ0NCiEgDQ0KISAvKiDNzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N
zc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzSAq
Lw0NCiEgDQ0KISBzdHJ1Y3QgdGFyZ2V0X29wcyBnbzMyX29wcyA9IHsNDQohICAgImdvMzIiLAkJ
CS8qIHRvX3Nob3J0bmFtZSAqLw0NCiEgICAiZ28zMiB0YXJnZXQgcHJvY2VzcyIsCS8qIHRvX2xv
bmduYW1lICovDQ0KISAgICJQcm9ncmFtIGxvYWRlZCBieSBnbzMyLCB3aGVuIGdkYiBpcyB1c2Vk
IGFzIGFuIGV4dGVybmFsIGRlYnVnZ2VyIiwJLyogdG9fZG9jICovDQ0KISAgIGdvMzJfb3BlbiwJ
CQkvKiB0b19vcGVuICovDQ0KISAgIGdvMzJfY2xvc2UsCQkJLyogdG9fY2xvc2UgKi8NDQohICAg
Z28zMl9hdHRhY2gsCQkJLyogdG9fYXR0YWNoICovDQ0KISAgIGdvMzJfZGV0YWNoLCAJCQkvKiB0
b19kZXRhY2ggKi8NDQohICAgZ28zMl9yZXN1bWUsCQkJLyogdG9fcmVzdW1lICovDQ0KISAgIGdv
MzJfd2FpdCwJCQkvKiB0b193YWl0ICovDQ0KISAgIGdvMzJfZmV0Y2hfcmVnaXN0ZXJzLAkJLyog
dG9fZmV0Y2hfcmVnaXN0ZXJzICovDQ0KISAgIGdvMzJfc3RvcmVfcmVnaXN0ZXJzLAkJLyogdG9f
c3RvcmVfcmVnaXN0ZXJzICovDQ0KISAgIGdvMzJfcHJlcGFyZV90b19zdG9yZSwJLyogdG9fcHJl
cGFyZV90b19zdG9yZSAqLw0NCiEgICBnbzMyX3hmZXJfbWVtb3J5LAkJLyogdG9feGZlcl9tZW1v
cnkgKi8NDQohICAgZ28zMl9maWxlc19pbmZvLAkJLyogdG9fZmlsZXNfaW5mbyAqLw0NCiEgICBt
ZW1vcnlfaW5zZXJ0X2JyZWFrcG9pbnQsCS8qIHRvX2luc2VydF9icmVha3BvaW50ICovDQ0KISAg
IG1lbW9yeV9yZW1vdmVfYnJlYWtwb2ludCwJLyogdG9fcmVtb3ZlX2JyZWFrcG9pbnQgKi8NDQoh
ICAgaWdub3JlLAkJCS8qIHRvX3Rlcm1pbmFsX2luaXQgKi8NDQohICAgaWdub3JlLAkgCQkvKiB0
b190ZXJtaW5hbF9pbmZlcmlvciAqLw0NCiEgICBpZ25vcmUsCQkJLyogdG9fdGVybWluYWxfb3Vy
c19mb3Jfb3V0cHV0ICovDQ0KISAgIGlnbm9yZSwJCQkvKiB0b190ZXJtaW5hbF9vdXJzICovDQ0K
ISAgIGlnbm9yZTIsCQkJLyogdG9fdGVybWluYWxfaW5mbyAqLw0NCiEgICBnbzMyX2tpbGxfaW5m
ZXJpb3IsCQkvKiB0b19raWxsICovDQ0KISAgIDAsCQkJCS8qIHRvX2xvYWQgKi8NDQohICAgMCwJ
CQkJLyogdG9fbG9va3VwX3N5bWJvbCAqLw0NCiEgICBnbzMyX2NyZWF0ZV9pbmZlcmlvciwJCS8q
IHRvX2NyZWF0ZV9pbmZlcmlvciAqLw0NCiEgICBnbzMyX21vdXJuX2luZmVyaW9yLAkJLyogdG9f
bW91cm5faW5mZXJpb3IgKi8NDQohICAgZ28zMl9jYW5fcnVuLAkJCS8qIHRvX2Nhbl9ydW4gKi8N
DQohICAgMCwgCQkJCS8qIHRvX25vdGljZV9zaWduYWxzICovDQ0KISAgIDAsCQkJCS8qIHRvX3Ro
cmVhZF9hbGl2ZSAqLw0NCiEgICBnbzMyX3N0b3AsCQkJLyogdG9fc3RvcCAqLw0NCiEgICBwcm9j
ZXNzX3N0cmF0dW0sCQkvKiB0b19zdHJhdHVtICovDQ0KISAgIDAsCQkJCS8qIHRvX25leHQgKi8N
DQohICAgMSwJCQkJLyogdG9faGFzX2FsbF9tZW1vcnkgKi8NDQohICAgMSwJCQkJLyogdG9faGFz
X21lbW9yeSAqLw0NCiEgICAxLAkJCQkvKiB0b19oYXNfc3RhY2sgKi8NDQohICAgMSwJCQkJLyog
dG9faGFzX3JlZ2lzdGVycyAqLw0NCiEgICAxLAkJCQkvKiB0b19oYXNfZXhlY3V0aW9uICovDQ0K
ISAgIDAsCQkJCS8qIHNlY3Rpb25zICovDQ0KISAgIDAsCQkJCS8qIHNlY3Rpb25zX2VuZCAqLw0N
CiEgICBPUFNfTUFHSUMJCQkvKiB0b19tYWdpYyAqLw0NCiEgfTsNDQohIA0NCiEgdm9pZA0NCiEg
X2luaXRpYWxpemVfaW5mdGFyZyAoKQ0NCiEgew0NCiEgICBhZGRfdGFyZ2V0ICgmZ28zMl9vcHMp
Ow0NCiEgfQ0NCiEgDQ0KISAjaWZkZWYgVEFSR0VUX0hBU19IQVJEV0FSRV9XQVRDSFBPSU5UUw0N
CiEgDQ0KISAjZGVmaW5lIERSX1NUQVRVUyA2DQ0KISAjZGVmaW5lIERSX0NPTlRST0wgNw0NCiEg
I2RlZmluZSBEUl9FTkFCTEVfU0laRSAyDQ0KISAjZGVmaW5lIERSX0xPQ0FMX0VOQUJMRV9TSElG
VCAwDQ0KISAjZGVmaW5lIERSX0dMT0JBTF9FTkFCTEVfU0hJRlQgMQ0NCiEgI2RlZmluZSBEUl9M
T0NBTF9TTE9XRE9XTiAweDEwMA0NCiEgI2RlZmluZSBEUl9HTE9CQUxfU0xPV0RPV04gMHgyMDAN
DQohICNkZWZpbmUgRFJfQ09OVFJPTF9TSElGVCAxNg0NCiEgI2RlZmluZSBEUl9DT05UUk9MX1NJ
WkUgNA0NCiEgI2RlZmluZSBEUl9SV19SRUFEIDB4Mw0NCiEgI2RlZmluZSBEUl9SV19XUklURSAw
eDENDQohICNkZWZpbmUgRFJfQ09OVFJPTF9NQVNLIDB4Zg0NCiEgI2RlZmluZSBEUl9FTkFCTEVf
TUFTSyAweDMNDQohICNkZWZpbmUgRFJfTEVOXzEgMHgwDQ0KISAjZGVmaW5lIERSX0xFTl8yIDB4
NA0NCiEgI2RlZmluZSBEUl9MRU5fNCAweGMNDQohIA0NCiEgI2RlZmluZSBEX1JFR1MgZWRpLmRy
DQ0KISAjZGVmaW5lIENPTlRST0wgRF9SRUdTW0RSX0NPTlRST0xdDQ0KISAjZGVmaW5lIFNUQVRV
UyBEX1JFR1NbRFJfU1RBVFVTXQ0NCiEgDQ0KISAjZGVmaW5lIElTX1JFR19GUkVFKGluZGV4KSBc
DQ0KISAgICghKENPTlRST0wgJiAoMyA8PCAoRFJfRU5BQkxFX1NJWkUgKiBpbmRleCkpKSkNDQoh
ICNkZWZpbmUgTE9DQUxfRU5BQkxFX1JFRyhpbmRleCkgXA0NCiEgICAoQ09OVFJPTCB8PSAoMSA8
PCAoRFJfTE9DQUxfRU5BQkxFX1NISUZUICsgRFJfRU5BQkxFX1NJWkUgKiBpbmRleCkpKQ0NCiEg
I2RlZmluZSBHTE9CQUxfRU5BQkxFX1JFRyhpbmRleCkgXA0NCiEgICAoQ09OVFJPTCB8PSAoMSA8
PCAoRFJfR0xPQkFMX0VOQUJMRV9TSElGVCArIERSX0VOQUJMRV9TSVpFICogaW5kZXgpKSkNDQoh
ICNkZWZpbmUgRElTQUJMRV9SRUcoaW5kZXgpIFwNDQohICAgKENPTlRST0wgJj0gfigzIDw8IChE
Ul9FTkFCTEVfU0laRSAqIGluZGV4KSkpDQ0KISAjZGVmaW5lIFNFVF9MT0NBTF9FWEFDVCgpIFwN
DQohICAgKENPTlRST0wgfD0gRFJfTE9DQUxfU0xPV0RPV04pDQ0KISAjZGVmaW5lIFNFVF9HTE9C
QUxfRVhBQ1QoKSBcDQ0KISAgIChDT05UUk9MIHw9IERSX0dMT0JBTF9TTE9XRE9XTikNDQohICNk
ZWZpbmUgU0VUX0JSRUFLKGluZGV4LGFkZHJlc3MpIFwNDQohICAgZG8ge1wNDQohICAgICBDT05U
Uk9MICY9IH4oRFJfQ09OVFJPTF9NQVNLIDw8IChEUl9DT05UUk9MX1NISUZUICsgRFJfQ09OVFJP
TF9TSVpFICogaW5kZXgpKTtcDQ0KISAgICAgRF9SRUdTW2luZGV4XSA9IGFkZHJlc3M7XA0NCiEg
ICB9IHdoaWxlKDApDQ0KISAjZGVmaW5lIFNFVF9XQVRDSChpbmRleCxhZGRyZXNzLHJ3LGxlbikg
XA0NCiEgICBkbyB7XA0NCiEgICAgIFNFVF9CUkVBSyhpbmRleCxhZGRyZXNzKTtcDQ0KISAgICAg
Q09OVFJPTCB8PSAobGVuIHwgcncpIDw8IChEUl9DT05UUk9MX1NISUZUICsgRFJfQ09OVFJPTF9T
SVpFICogaW5kZXgpO1wNDQohICAgfSB3aGlsZSAoMCkNDQohICAgDQ0KISAjZGVmaW5lIFdBVENI
X0hJVChpbmRleCkgXA0NCiEgICAoXA0NCiEgICAgKFNUQVRVUyAmICgxIDw8IGluZGV4KSkgJiYg
XA0NCiEgICAgKENPTlRST0wgJiAoRFJfQ09OVFJPTF9NQVNLIDw8IChEUl9DT05UUk9MX1NISUZU
ICsgRFJfQ09OVFJPTF9TSVpFICogaW5kZXgpKSlcDQ0KISAgICkNDQohIA0NCiEgc3RhdGljIGlu
dA0NCiEgZ28zMl9pbnNlcnRfYWxpZ25lZF93YXRjaHBvaW50IFBBUkFNUyAoKGludCwgQ09SRV9B
RERSLCBDT1JFX0FERFIsIGludCwNDQohIAkJCQkJICAgaW50KSk7DQ0KISANDQohIHN0YXRpYyBp
bnQNDQohIGdvMzJfaW5zZXJ0X25vbmFsaWduZWRfd2F0Y2hwb2ludCBQQVJBTVMgKChpbnQsIENP
UkVfQUREUiwgQ09SRV9BRERSLCBpbnQsDQ0KISAJCQkJCSAgIGludCkpOw0NCiEgDQ0KISAvKiBJ
bnNlcnQgYSB3YXRjaHBvaW50LiAgKi8NDQohIA0NCiEgI2RlZmluZSBTSE9XX0RSKHRleHQpIFwN
DQohIGRvIHtcDQ0KISAgIGZwcmludGYoc3RkZXJyLCIlMDh4ICUwOHggIixlZGkuZHJbN10sZWRp
LmRyWzZdKTtcDQ0KISAgIGZwcmludGYoc3RkZXJyLCIlMDh4ICUwOHggIixlZGkuZHJbMF0sZWRp
LmRyWzFdKTtcDQ0KISAgIGZwcmludGYoc3RkZXJyLCIlMDh4ICUwOHggIixlZGkuZHJbMl0sZWRp
LmRyWzNdKTtcDQ0KISAgIGZwcmludGYoc3RkZXJyLCIoJXMpXG4iLCN0ZXh0KTtcDQ0KISB9IHdo
aWxlICgwKQ0NCiEgDQ0KISAjZGVmaW5lIF9TSE9XX0RSKHgpIGRvIHt9IHdoaWxlKDApDQ0KISAN
DQohIGludA0NCiEgZ28zMl9pbnNlcnRfd2F0Y2hwb2ludCAocGlkLCBhZGRyLCBsZW4sIHJ3KQ0N
CiEgICAgICBpbnQgcGlkOw0NCiEgICAgICBDT1JFX0FERFIgYWRkcjsNDQohICAgICAgaW50IGxl
bjsNDQohICAgICAgaW50IHJ3Ow0NCiEgew0NCiEgICBpbnQgcmV0ID0gZ28zMl9pbnNlcnRfYWxp
Z25lZF93YXRjaHBvaW50IChwaWQsIGFkZHIsIGFkZHIsIGxlbiwgcncpOw0NCiEgX1NIT1dfRFIo
aW5zZXJ0X3dhdGNoKTsNDQohICAgcmV0dXJuIHJldDsNDQohIH0NDQohIA0NCiEgc3RhdGljIGlu
dA0NCiEgZ28zMl9pbnNlcnRfYWxpZ25lZF93YXRjaHBvaW50IChwaWQsIHdhZGRyLCBhZGRyLCBs
ZW4sIHJ3KQ0NCiEgICAgICBpbnQgcGlkOw0NCiEgICAgICBDT1JFX0FERFIgd2FkZHI7DQ0KISAg
ICAgIENPUkVfQUREUiBhZGRyOw0NCiEgICAgICBpbnQgbGVuOw0NCiEgICAgICBpbnQgcnc7DQ0K
ISB7DQ0KISAgIGludCBpOw0NCiEgICBpbnQgcmVhZF93cml0ZV9iaXRzLCBsZW5fYml0czsNDQoh
ICAgDQ0KISAgIC8qIExvb2sgZm9yIGEgZnJlZSBkZWJ1ZyByZWdpc3Rlci4gICovDQ0KISAgIGZv
ciAoaSA9IDA7IGkgPD0gMzsgaSsrKQ0NCiEgICAgIHsNDQohICAgICAgIGlmIChJU19SRUdfRlJF
RShpKSkNDQohIAlicmVhazsNDQohICAgICB9DQ0KISANDQohICAgLyogTm8gbW9yZSBkZWJ1ZyBy
ZWdpc3RlcnMhICAqLw0NCiEgICBpZiAoaSA+IDMpDQ0KISAgICAgcmV0dXJuIC0xOw0NCiEgDQ0K
ISAgIHJlYWRfd3JpdGVfYml0cyA9ICgocncgJiAxKSA/IERSX1JXX1JFQUQgOiAwKSB8ICgocncg
JiAyKSA/IERSX1JXX1dSSVRFIDogMCk7DQ0KISANDQohICAgaWYgKGxlbiA9PSAxKQ0NCiEgICAg
IGxlbl9iaXRzID0gRFJfTEVOXzE7DQ0KISAgIGVsc2UgaWYgKGxlbiA9PSAyKQ0NCiEgICAgIHsN
DQohICAgICAgIGlmIChhZGRyICUgMikNDQohIAlyZXR1cm4gZ28zMl9pbnNlcnRfbm9uYWxpZ25l
ZF93YXRjaHBvaW50IChwaWQsIHdhZGRyLCBhZGRyLCBsZW4sIHJ3KTsNDQohICAgICAgIGxlbl9i
aXRzID0gRFJfTEVOXzI7DQ0KISAgICAgfQ0NCiEgDQ0KISAgIGVsc2UgaWYgKGxlbiA9PSA0KQ0N
CiEgICAgIHsNDQohICAgICAgIGlmIChhZGRyICUgNCkNDQohIAlyZXR1cm4gZ28zMl9pbnNlcnRf
bm9uYWxpZ25lZF93YXRjaHBvaW50IChwaWQsIHdhZGRyLCBhZGRyLCBsZW4sIHJ3KTsNDQohICAg
ICAgIGxlbl9iaXRzID0gRFJfTEVOXzQ7DQ0KISAgICAgfQ0NCiEgICBlbHNlDQ0KISAgICAgcmV0
dXJuIGdvMzJfaW5zZXJ0X25vbmFsaWduZWRfd2F0Y2hwb2ludCAocGlkLCB3YWRkciwgYWRkciwg
bGVuLCBydyk7DQ0KISAgIA0NCiEgICBTRVRfV0FUQ0goaSxhZGRyLHJlYWRfd3JpdGVfYml0cyxs
ZW5fYml0cyk7DQ0KISAgIExPQ0FMX0VOQUJMRV9SRUcoaSk7DQ0KISAgIFNFVF9MT0NBTF9FWEFD
VCgpOw0NCiEgfQ0NCiEgDQ0KISBzdGF0aWMgaW50DQ0KISBnbzMyX2luc2VydF9ub25hbGlnbmVk
X3dhdGNocG9pbnQgKHBpZCwgd2FkZHIsIGFkZHIsIGxlbiwgcncpDQ0KISAgICAgIGludCBwaWQ7
DQ0KISAgICAgIENPUkVfQUREUiB3YWRkcjsNDQohICAgICAgQ09SRV9BRERSIGFkZHI7DQ0KISAg
ICAgIGludCBsZW47DQ0KISAgICAgIGludCBydzsNDQohIHsNDQohICAgaW50IGFsaWduOw0NCiEg
ICBpbnQgc2l6ZTsNDQohICAgaW50IHJ2Ow0NCiEgDQ0KISAgIHN0YXRpYyBpbnQgc2l6ZV90cnlf
YXJyYXlbMTZdID0gew0NCiEgICAgIDEsIDEsIDEsIDEsCQkJLyogdHJ5aW5nIHNpemUgb25lICov
DQ0KISAgICAgMiwgMSwgMiwgMSwJCQkvKiB0cnlpbmcgc2l6ZSB0d28gKi8NDQohICAgICAyLCAx
LCAyLCAxLAkJCS8qIHRyeWluZyBzaXplIHRocmVlICovDQ0KISAgICAgNCwgMSwgMiwgMQkJCS8q
IHRyeWluZyBzaXplIGZvdXIgKi8NDQohICAgfTsNDQohIA0NCiEgICBydiA9IDA7DQ0KISAgIHdo
aWxlIChsZW4gPiAwKQ0NCiEgICAgIHsNDQohICAgICAgIGFsaWduID0gYWRkciAlIDQ7DQ0KISAg
ICAgICAvKiBGb3VyIGlzIHRoZSBtYXhpbXVtIGxlbmd0aCBmb3IgMzg2LiAgKi8NDQohICAgICAg
IHNpemUgPSAobGVuID4gNCkgPyAzIDogbGVuIC0gMTsNDQohICAgICAgIHNpemUgPSBzaXplX3Ry
eV9hcnJheVtzaXplICogNCArIGFsaWduXTsNDQohIA0NCiEgICAgICAgcnYgPSBnbzMyX2luc2Vy
dF9hbGlnbmVkX3dhdGNocG9pbnQgKHBpZCwgd2FkZHIsIGFkZHIsIHNpemUsIHJ3KTsNDQohICAg
ICAgIGlmIChydikNDQohIAl7DQ0KISAJICBnbzMyX3JlbW92ZV93YXRjaHBvaW50IChwaWQsIHdh
ZGRyLCBzaXplKTsNDQohIAkgIHJldHVybiBydjsNDQohIAl9DQ0KISAgICAgICBhZGRyICs9IHNp
emU7DQ0KISAgICAgICBsZW4gLT0gc2l6ZTsNDQohICAgICB9DQ0KISAgIHJldHVybiBydjsNDQoh
IH0NDQohIA0NCiEgLyogUmVtb3ZlIGEgd2F0Y2hwb2ludC4gICovDQ0KISANDQohIGludA0NCiEg
Z28zMl9yZW1vdmVfd2F0Y2hwb2ludCAocGlkLCBhZGRyLCBsZW4pDQ0KISAgICAgIGludCBwaWQ7
DQ0KISAgICAgIENPUkVfQUREUiBhZGRyOw0NCiEgICAgICBpbnQgbGVuOw0NCiEgew0NCiEgICBp
bnQgaTsNDQohICAgZm9yIChpID0gMDsgaSA8PSAzOyBpKyspDQ0KISAgICAgew0NCiEgICAgICAg
aWYgKERfUkVHU1tpXSA9PSBhZGRyKQ0NCiEgCXsNDQohIAkgIERJU0FCTEVfUkVHKGkpOw0NCiEg
CX0NDQohICAgICB9DQ0KISBfU0hPV19EUihyZW1vdmVfd2F0Y2gpOw0NCiEgICByZXR1cm4gMDsN
DQohIH0NDQohIA0NCiEgLyogQ2hlY2sgaWYgc3RvcHBlZCBieSBhIHdhdGNocG9pbnQuICAqLw0N
CiEgDQ0KISBDT1JFX0FERFINDQohIGdvMzJfc3RvcHBlZF9ieV93YXRjaHBvaW50IChwaWQpDQ0K
ISAgICAgaW50IHBpZDsNDQohIHsNDQohICAgaW50IGkscmV0PTA7DQ0KISAgIGludCBzdGF0dXM7
DQ0KISANDQohICAgc3RhdHVzID0gZWRpLmRyW0RSX1NUQVRVU107DQ0KISBfU0hPV19EUihzdG9w
cGVkX2J5KTsNDQohICAgZm9yIChpID0gMDsgaSA8PSAzOyBpKyspDQ0KISAgICAgew0NCiEgICAg
ICAgaWYgKFdBVENIX0hJVChpKSkNDQohICAgICAgIHsNDQohIF9TSE9XX0RSKEhJVCk7DQ0KISAJ
cmV0ID0gRF9SRUdTW2ldOw0NCiEgICAgICAgfQ0NCiEgICAgIH0NDQohIC8qIHRoaXMgaXMgYSBo
YWNrIHRvIEdEQi4gSWYgd2Ugc3RvcHBlZCBhdCBhIGhhcmR3YXJlIGJyZWFrcG9pbnQsDQ0KISAg
ICB0aGUgc3RvcF9wYyBtdXN0IGluY3JlbWVudGVkIGJ5IERFQ1JfUENfQUZURVJfQlJFQUsuIEkg
dHJpZWQgZXZlcnl0aGluZw0NCiEgICAgd2l0aCB0aGUgREVDUl9QQ19BRlRFUl9IV19CUkVBSywg
YnV0IG5vdGhpbmcgd29ya3MuICovDQ0KISAgIGlmIChTVEFUVVMgJiYgIXJldCkNDQohICAgICBz
dG9wX3BjICs9IERFQ1JfUENfQUZURVJfQlJFQUs7DQ0KISAgIFNUQVRVUyA9IDA7DQ0KISAgIHJl
dHVybiByZXQ7DQ0KISB9DQ0KISANDQohIC8qIFJlbW92ZSBhIGJyZWFrcG9pbnQuICAqLw0NCiEg
DQ0KISBpbnQNDQohIGdvMzJfcmVtb3ZlX2h3X2JyZWFrcG9pbnQgKGFkZHIsIHNoYWRvdykNDQoh
ICAgICAgQ09SRV9BRERSIGFkZHI7DQ0KISAgICAgIENPUkVfQUREUiBzaGFkb3c7DQ0KISB7DQ0K
ISAgIGludCBpOw0NCiEgICBmb3IgKGkgPSAwOyBpIDw9IDM7IGkrKykNDQohICAgICB7DQ0KISAg
ICAgICBpZiAoRF9SRUdTW2ldID09IGFkZHIpDQ0KISAJew0NCiEgCSAgRElTQUJMRV9SRUcoaSk7
DQ0KISAJfQ0NCiEgICAgIH0NDQohIF9TSE9XX0RSKHJlbW92ZV9odyk7DQ0KISAgIHJldHVybiAw
Ow0NCiEgfQ0NCiEgDQ0KISBpbnQNDQohIGdvMzJfaW5zZXJ0X2h3X2JyZWFrcG9pbnQgKGFkZHIs
IHNoYWRvdykNDQohICAgICBDT1JFX0FERFIgYWRkcjsNDQohICAgICBDT1JFX0FERFIgc2hhZG93
Ow0NCiEgew0NCiEgICBpbnQgaTsNDQohICAgaW50IHJlYWRfd3JpdGVfYml0cywgbGVuX2JpdHM7
DQ0KISAgIGludCBmcmVlX2RlYnVnX3JlZ2lzdGVyOw0NCiEgICBpbnQgcmVnaXN0ZXJfbnVtYmVy
Ow0NCiEgICANDQohICAgLyogTG9vayBmb3IgYSBmcmVlIGRlYnVnIHJlZ2lzdGVyLiAgKi8NDQoh
ICAgZm9yIChpID0gMDsgaSA8PSAzOyBpKyspDQ0KISAgICAgew0NCiEgICAgICAgaWYgKElTX1JF
R19GUkVFKGkpKQ0NCiEgCWJyZWFrOw0NCiEgICAgIH0NDQohIA0NCiEgICAvKiBObyBtb3JlIGRl
YnVnIHJlZ2lzdGVycyEgICovDQ0KISAgIGlmIChpID4gMykNDQohICAgICByZXR1cm4gLTE7DQ0K
ISANDQohICAgU0VUX0JSRUFLKGksYWRkcik7DQ0KISAgIExPQ0FMX0VOQUJMRV9SRUcoaSk7DQ0K
ISBfU0hPV19EUihpbnNlcnRfaHcpOw0NCiEgICByZXR1cm4gMDsNDQohIH0NDQohIA0NCiEgI2Vu
ZGlmIC8qIFRBUkdFVF9IQVNfSEFSRFdBUkVfV0FUQ0hQT0lOVFMgKi8NDQohIA0NCi0tLSAxLDc2
MiAtLS0tDQohIC8qIFRhcmdldC12ZWN0b3Igb3BlcmF0aW9ucyBmb3IgY29udHJvbGxpbmcgZ28z
MiBwcm9jZXNzZXMsIGZvciBHREIuDQohICAgIENvcHlyaWdodCAxOTk0IEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLg0KISAgICBDb250cmlidXRlZCBieSBESiBEZWxvcmllLg0KISAgICBN
b2RpZmllZCBmb3IgVjIgYnkgQ1cgU2FuZG1hbm4uDQohIA0KISBUaGlzIGZpbGUgaXMgcGFydCBv
ZiBHREIuDQohIA0KISBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQ0KISBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KISB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcg0KISAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KISANCiEgVGhpcyBwcm9ncmFtIGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQohIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
DQohIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUNCiEgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4N
CiEgDQohIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlDQohIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRl
IHRvIHRoZSBGcmVlIFNvZnR3YXJlDQohIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwg
Q2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLiAgKi8NCiEgDQohICNpbmNsdWRlIDxmY250bC5oPg0K
ISANCiEgI2luY2x1ZGUgImRlZnMuaCINCiEgI2luY2x1ZGUgImZyYW1lLmgiICAvKiByZXF1aXJl
ZCBieSBpbmZlcmlvci5oICovDQohICNpbmNsdWRlICJpbmZlcmlvci5oIg0KISAjaW5jbHVkZSAi
dGFyZ2V0LmgiDQohICNpbmNsdWRlICJ3YWl0LmgiDQohICNpbmNsdWRlICJnZGJjb3JlLmgiDQoh
ICNpbmNsdWRlICJjb21tYW5kLmgiDQohIA0KISBleHRlcm4gY2hhciAqKmVudmlyb247DQohIA0K
ISAvKiBGb3J3YXJkIGRlY2xhcmF0aW9uICovDQohIGV4dGVybiBzdHJ1Y3QgdGFyZ2V0X29wcyBn
bzMyX29wczsNCiEgDQohIC8qIMnNzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N
zc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzbsNCiEgICAguiAgR28zMidzIGV4dGVybmFs
IGRlYnVnZ2VyIGludGVyZmFjZSByb3V0aW5lcwkJCboNCiEgICAgyM3Nzc3Nzc3Nzc3Nzc3Nzc3N
zc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NvCAqLw0K
ISANCiEgI2RlZmluZSBTT01FX1BJRCA0Mg0KISANCiEgc3RhdGljIGludCBwcm9nX2hhc19zdGFy
dGVkID0gMDsNCiEgDQohICNpbmNsdWRlIDxzdGRpby5oPg0KISAjaW5jbHVkZSA8c3RkbGliLmg+
DQohICNpbmNsdWRlIDxzdHJpbmcuaD4NCiEgI2luY2x1ZGUgPHVuaXN0ZC5oPg0KISAjaW5jbHVk
ZSA8ZGVidWcvdjJsb2FkLmg+DQohICNpbmNsdWRlIC8qIDxkZWJ1Zy9kYmdjb20uaD4gKi8gImRi
Z2NvbS5oIg0KISANCiEgdm9pZCBjbGVhbnVwX2NsaWVudCgpOw0KISANCiEgI2RlZmluZSByX29m
cyh4KSAoKGludCkoJigoKFRTUyAqKTApLT54KSkpDQohIHN0YXRpYyBzdHJ1Y3Qgew0KISAgIGlu
dCB0c3Nfb2ZzOw0KISAgIGludCBzaXplOw0KISB9IHJlZ25vX21hcHBpbmdbXSA9IHsNCiEgICBy
X29mcyh0c3NfZWF4KSwgNCwNCiEgICByX29mcyh0c3NfZWN4KSwgNCwNCiEgICByX29mcyh0c3Nf
ZWR4KSwgNCwNCiEgICByX29mcyh0c3NfZWJ4KSwgNCwNCiEgICByX29mcyh0c3NfZXNwKSwgNCwN
CiEgICByX29mcyh0c3NfZWJwKSwgNCwNCiEgICByX29mcyh0c3NfZXNpKSwgNCwNCiEgICByX29m
cyh0c3NfZWRpKSwgNCwNCiEgICByX29mcyh0c3NfZWlwKSwgNCwNCiEgICByX29mcyh0c3NfZWZs
YWdzKSwgNCwNCiEgICByX29mcyh0c3NfY3MpLCAyLA0KISAgIHJfb2ZzKHRzc19zcyksIDIsDQoh
ICAgcl9vZnModHNzX2RzKSwgMiwNCiEgICByX29mcyh0c3NfZXMpLCAyLA0KISAgIHJfb2ZzKHRz
c19mcyksIDIsDQohICAgcl9vZnModHNzX2dzKSwgMg0KISB9Ow0KISANCiEgc3RhdGljIHN0cnVj
dCB7DQohICAgaW50IGdvMzJfc2lnOw0KISAgIGludCBnZGJfc2lnOw0KISB9IHNpZ19tYXBbXSA9
IHsNCiEgICAwLCBUQVJHRVRfU0lHTkFMX0ZQRSwNCiEgICAxLCBUQVJHRVRfU0lHTkFMX1RSQVAs
DQohICAgMiwgVEFSR0VUX1NJR05BTF9VTktOT1dOLA0KISAgIDMsIFRBUkdFVF9TSUdOQUxfVFJB
UCwNCiEgICA0LCBUQVJHRVRfU0lHTkFMX0ZQRSwNCiEgICA1LCBUQVJHRVRfU0lHTkFMX1NFR1Ys
DQohICAgNiwgVEFSR0VUX1NJR05BTF9JTEwsDQohICAgNywgVEFSR0VUX1NJR05BTF9GUEUsDQoh
ICAgOCwgVEFSR0VUX1NJR05BTF9TRUdWLA0KISAgIDksIFRBUkdFVF9TSUdOQUxfU0VHViwNCiEg
ICAxMCwgVEFSR0VUX1NJR05BTF9CVVMsDQohICAgMTEsIFRBUkdFVF9TSUdOQUxfU0VHViwNCiEg
ICAxMiwgVEFSR0VUX1NJR05BTF9TRUdWLA0KISAgIDEzLCBUQVJHRVRfU0lHTkFMX1NFR1YsDQoh
ICAgMTQsIFRBUkdFVF9TSUdOQUxfU0VHViwNCiEgICAxNiwgVEFSR0VUX1NJR05BTF9GUEUsDQoh
ICAgMzEsIFRBUkdFVF9TSUdOQUxfSUxMLA0KISAweDc1LCBUQVJHRVRfU0lHTkFMX0ZQRSwNCiEg
MHg3OSwgVEFSR0VUX1NJR05BTF9JTlQsDQohIDB4MWIsIFRBUkdFVF9TSUdOQUxfSU5ULA0KISAg
IC0xLC0xDQohIH07DQohIA0KISB2b2lkDQohIGluaXRfZ28zMl9leHRkZWJ1ZyhpbnQgKmFyZ2Ms
IGNoYXIgKioqYXJndngpDQohIHsNCiEgICBpbnQgaTsNCiEgICBjaGFyICoqYXJndjsNCiEgICBj
aGFyIGNtZGxpbmVbMTI4XTsNCiEgfQ0KISANCiEgLyogxMTExMTExMTExMTExMTExMTExMTExMTE
xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQgKi8N
CiEgDQohIHN0YXRpYyB2b2lkDQohIGdvMzJfb3BlbihjaGFyICpuYW1lLCBpbnQgZnJvbV90dHkp
DQohIHsNCiEgICBwcmludGZfdW5maWx0ZXJlZCgiVXNlIHRoZSBgcnVuJyBjb21tYW5kIHRvIHJ1
biBnbzMyIHByb2dyYW1zXG4iKTsNCiEgfQ0KISANCiEgLyogxMTExMTExMTExMTExMTExMTExMTE
xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQg
Ki8NCiEgDQohIHN0YXRpYyB2b2lkIGdvMzJfY2xvc2UoaW50IHF1aXR0aW5nKQ0KISB7DQohICAg
LypwcmludGZfdW5maWx0ZXJlZCgiZ28zMl9jbG9zZSBjYWxsZWRcbiIpOyovDQohIH0NCiEgDQoh
IC8qIMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE
xMTExMTExMTExMTExMTExMTExMTExMTEICovDQohIA0KISBzdGF0aWMgdm9pZA0KISBnbzMyX2F0
dGFjaChjaGFyICphcmdzLCBpbnQgZnJvbV90dHkpDQohIHsNCiEgICBwcmludGZfdW5maWx0ZXJl
ZCgiVXNlIHRoZSBgcnVuJyBjb21tYW5kIHRvIHJ1biBnbzMyIHByb2dyYW1zXG4iKTsNCiEgfQ0K
ISANCiEgLyogxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE
xMTExMTExMTExMTExMTExMTExMTExMTExMTExMQgKi8NCiEgDQohIHN0YXRpYyB2b2lkDQohIGdv
MzJfZGV0YWNoKGNoYXIgKmFyZ3MsIGludCBmcm9tX3R0eSkNCiEgew0KISAgIC8qcHJpbnRmX3Vu
ZmlsdGVyZWQoImdvMzJfZGV0YWNoIGNhbGxlZFxuIik7Ki8NCiEgfQ0KISANCiEgLyogxMTExMTE
xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE
xMTExMTExMTExMTExMQgKi8NCiEgDQohIHN0YXRpYyBpbnQgcmVzdW1lX2lzX3N0ZXA7DQohIA0K
ISBzdGF0aWMgdm9pZA0KISBnbzMyX3Jlc3VtZShpbnQgcGlkLCBpbnQgc3RlcCwgZW51bSB0YXJn
ZXRfc2lnbmFsIHNpZ2duYWwpDQohIHsNCiEgI2lmIDANCiEgICBwcmludGZfdW5maWx0ZXJlZCgi
Z28zMl9yZXN1bWUgY2FsbGVkXG4iKTsNCiEgI2VuZGlmDQohICAgcmVzdW1lX2lzX3N0ZXAgPSBz
dGVwOw0KISB9DQohIA0KISAvKiDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE
xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCAqLw0KISANCiEgc3RhdGlj
IGludA0KISBnbzMyX3dhaXQoaW50IHBpZCwgc3RydWN0IHRhcmdldF93YWl0c3RhdHVzICpzdGF0
dXMpDQohIHsNCiEgI2lmIDANCiEgICBwcmludGZfdW5maWx0ZXJlZCgiZ28zMl93YWl0ICVkXG4i
LCBwaWQpOw0KISAjZW5kaWYNCiEgICBpZiAocmVzdW1lX2lzX3N0ZXApDQohICAgICBhX3Rzcy50
c3NfZWZsYWdzIHw9IDB4MDEwMDsNCiEgICBlbHNlDQohICAgICBhX3Rzcy50c3NfZWZsYWdzICY9
IDB4ZmVmZjsNCiEgICBydW5fY2hpbGQoKTsNCiEgICBpZiAoYV90c3MudHNzX2lycW4gPT0gMHgy
MSkNCiEgICB7DQohICAgICBzdGF0dXMtPmtpbmQgPSBUQVJHRVRfV0FJVEtJTkRfRVhJVEVEOw0K
ISAgICAgc3RhdHVzLT52YWx1ZS5pbnRlZ2VyID0gYV90c3MudHNzX2VheCAmIDB4ZmY7DQohICAg
fQ0KISAgIGVsc2UNCiEgICB7DQohICAgICBpbnQgaTsNCiEgICAgIHN0YXR1cy0+dmFsdWUuc2ln
ID0gVEFSR0VUX1NJR05BTF9VTktOT1dOOw0KISAgICAgZm9yIChpPTA7IHNpZ19tYXBbaV0uZ28z
Ml9zaWcgIT0gLTE7IGkrKykNCiEgICAgICAgaWYgKGFfdHNzLnRzc19pcnFuID09IHNpZ19tYXBb
aV0uZ28zMl9zaWcpDQohICAgICAgIHsNCiEgICAgICAgICBzdGF0dXMtPnZhbHVlLnNpZyA9IHNp
Z19tYXBbaV0uZ2RiX3NpZzsNCiEgICAgICAgICBicmVhazsNCiEgICAgICAgfQ0KISAgICAgc3Rh
dHVzLT5raW5kID0gVEFSR0VUX1dBSVRLSU5EX1NUT1BQRUQ7DQohICAgfQ0KISAgIHJldHVybiBT
T01FX1BJRDsNCiEgfQ0KISANCiEgLyogxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE
xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQgKi8NCiEgDQohIHN0
YXRpYyB2b2lkDQohIGdvMzJfZmV0Y2hfcmVnaXN0ZXJzKGludCByZWdubykNCiEgew0KISAvKkpI
VyovDQohICAgaW50IGVuZF9yZWc9cmVnbm8rMTsJLypqdXN0IG9uZSByZWcgaW5pdGlhbGx5Ki8N
CiEgI2lmIDANCiEgICBwcmludGZfdW5maWx0ZXJlZCgiZ28zMl9mZXRjaF9yZWdpc3RlcnMgY2Fs
bGVkXG4iKTsNCiEgI2VuZGlmDQohICAgaWYgKHJlZ25vIDwgMCkgewkvKmRvIHRoZSBhbGwgcmVn
aXN0ZXJzKi8NCiEgICAgICByZWdubz0wOwkvKnN0YXJ0IGF0IGZpcnN0IHJlZ2lzdGVyKi8NCiEg
ICAgICBlbmRfcmVnPXNpemVvZihyZWdub19tYXBwaW5nKS9zaXplb2YocmVnbm9fbWFwcGluZ1sw
XSk7CS8qIyByZWdzIGluIHRhYmxlKi8NCiEgICB9DQohICAgLyogRlBVIHRyZWF0ZWQgc2VwYXJh
dGVseSAqLw0KISAgIGlmICgocmVnbm8+MTUpIHx8IChlbmRfcmVnPjE2KSkgew0KISAgICAgaW50
IGZyZWc7DQohICAgICBmb3IgKGZyZWc9cmVnbm87IGZyZWc8ZW5kX3JlZzsgZnJlZysrKQ0KISAg
ICAgIGlmIChmcHVlLmlzdmFsaWRbZnJlZy0xNl0pDQohICAgICAgICB7DQohICAgICAgICAgIGxv
bmcgZG91YmxlIGQgPSBmcHVlLnN0W2ZyZWctMTZdOw0KISAgICANCiEgICAgICAgICAgcmVnaXN0
ZXJfdmFsaWRbZnJlZ10gPSAxOw0KISANCiEgICAgICAgICAgbWVtY3B5ICgmcmVnaXN0ZXJzW1JF
R0lTVEVSX0JZVEUgKHJlZ25vKV0sICZkLCBSRUdJU1RFUl9SQVdfU0laRSAocmVnbm8pKTsNCiEg
ICAgICAgIH0NCiEgICAgICBlbHNlDQohICAgICAgICB7DQohICAgICAgICAgIGxvbmcgZG91Ymxl
IGQgPSAwOw0KISAgICAgICAgICAvKiBzaG91bGQgYmUgemVybyBidXQgdGhpcyBpcyB1c2VkIGZv
ciBzb21ldGhpbmcgZWxzZSAqLw0KISAgICAgICAgICByZWdpc3Rlcl92YWxpZFtyZWdub10gPSAx
Ow0KISAgICAgICAgICBtZW1jcHkgKCZyZWdpc3RlcnNbUkVHSVNURVJfQllURSAocmVnbm8pXSwg
JmQsIFJFR0lTVEVSX1JBV19TSVpFIChyZWdubykpOw0KISAgICAgICAgICBpZiAoZW5kX3JlZz09
cmVnbm8rMSkNCiEgICAgICAgICAgICB7DQohICAgICAgICAgICAgIHByaW50Zl91bmZpbHRlcmVk
KCJzdCglZCkgYWJvdmUgc3RhY2sgZW5kIiwgcmVnbm8tMTYpOw0KISAgICAgICAgICAgIH0NCiEg
ICAgICAgIH0NCiEgICAgICBpZiAocmVnbm8+MTUpDQohICAgICAgICByZXR1cm47DQohICAgICB9
DQohIA0KISAgIGZvciAoOyByZWdubzxlbmRfcmVnOyByZWdubysrKSB7DQohICAgICAgc3dpdGNo
IChyZWdub19tYXBwaW5nW3JlZ25vXS5zaXplKQ0KISAgICAgIHsNCiEgICAgICAgIGNhc2UgNDoN
CiEgICAgICAgIGNhc2UgMjoNCiEgICAgICAgICAgc3VwcGx5X3JlZ2lzdGVyKHJlZ25vLCAoY2hh
ciAqKSZhX3RzcyArIHJlZ25vX21hcHBpbmdbcmVnbm9dLnRzc19vZnMpOw0KISAgICAgICAgICBi
cmVhazsNCiEgICAgICAgZGVmYXVsdDoJLyp1bmtub3duIHJlZ2lzdGVyIHNpemUqLw0KISAgICAg
ICAgICBwcmludGZfdW5maWx0ZXJlZCgiSW52YWxpZCByZWdpc3RlciBzaXplICVkIGJ5dGVzIGlu
IGdvMzJfZmV0Y2hfcmVnaXN0ZXIoKSIsIHJlZ25vX21hcHBpbmdbcmVnbm9dLnNpemUpOw0KISAg
ICAgICAgICBleGl0KDEpOw0KISAgICAgIH0NCiEgICB9DQohIH0NCiEgDQohIC8qIMTExMTExMTE
xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE
xMTExMTExMTExMTEICovDQohIA0KISBzdGF0aWMgdm9pZCBzdG9yZV9yZWdpc3RlcihpbnQgcmVn
bm8pDQohIHsNCiEgICBjaGFyICpycCA9IChjaGFyICopJmFfdHNzICsgcmVnbm9fbWFwcGluZ1ty
ZWdub10udHNzX29mczsNCiEgICBpbnQgdiA9ICooaW50ICopKCZyZWdpc3RlcnNbUkVHSVNURVJf
QllURShyZWdubyldKTsNCiEgICAvKiBGUFUgdHJlYXRlZCBzZXBhcmF0ZWx5ICovDQohICAgaWYg
KHJlZ25vPjE1KSB7DQohIA0KISAgICAgIGxvbmcgZG91YmxlIGQgPSAqKGxvbmcgZG91YmxlICop
ICgmcmVnaXN0ZXJzW1JFR0lTVEVSX0JZVEUocmVnbm8pXSk7DQohICAgICAgZnB1ZS5zdFtyZWdu
by0xNl09ZDsNCiEgICAgICByZXR1cm47DQohICAgICB9DQohIA0KISAgIHN3aXRjaCAocmVnbm9f
bWFwcGluZ1tyZWdub10uc2l6ZSkNCiEgICB7DQohICAgICBjYXNlIDQ6DQohICAgICAgICooaW50
ICopcnAgPSB2Ow0KISAgICAgICBicmVhazsNCiEgICAgIGNhc2UgMjoNCiEgICAgICAgKihzaG9y
dCAqKXJwID0gdjsNCiEgICAgICAgYnJlYWs7DQohICAgIGRlZmF1bHQ6CS8qdW5rbm93biByZWdp
c3RlciBzaXplKi8NCiEgICAgICAgcHJpbnRmX3VuZmlsdGVyZWQoIkludmFsaWQgcmVnaXN0ZXIg
c2l6ZSAlZCBieXRlcyBpbiBzdG9yZV9yZWdpc3RlcigpIiwgcmVnbm9fbWFwcGluZ1tyZWdub10u
c2l6ZSk7DQohICAgICAgIGV4aXQoMSk7DQohICAgfQ0KISB9DQohIA0KISBzdGF0aWMgdm9pZA0K
ISBnbzMyX3N0b3JlX3JlZ2lzdGVycyhpbnQgcmVnbm8pDQohIHsNCiEgI2lmIDANCiEgICBwcmlu
dGZfdW5maWx0ZXJlZCgiZ28zMl9zdG9yZV9yZWdpc3RlcnMgY2FsbGVkXG4iKTsNCiEgI2VuZGlm
DQohICAgaWYgKHJlZ25vID49IDApDQohICAgICBzdG9yZV9yZWdpc3RlcihyZWdubyk7DQohICAg
ZWxzZQ0KISAgIHsNCiEgICAgIGludCByOw0KISAgICAgZm9yIChyPTA7IHI8c2l6ZW9mKHJlZ25v
X21hcHBpbmcpL3NpemVvZihyZWdub19tYXBwaW5nWzBdKTsgcisrKQ0KISAgICAgICBzdG9yZV9y
ZWdpc3RlcihyKTsNCiEgICB9DQohIH0NCiEgDQohIC8qIMTExMTExMTExMTExMTExMTExMTExMTE
xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEICov
DQohIA0KISBzdGF0aWMgdm9pZA0KISBnbzMyX3ByZXBhcmVfdG9fc3RvcmUodm9pZCkNCiEgew0K
ISAjaWYgMA0KISAgIHByaW50Zl91bmZpbHRlcmVkKCJnbzMyX3ByZXBhcmVfdG9fc3RvcmUgY2Fs
bGVkXG4iKTsNCiEgI2VuZGlmDQohIH0NCiEgDQohIC8qIMTExMTExMTExMTExMTExMTExMTExMTE
xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEICov
DQohIA0KISBzdGF0aWMgaW50DQohIGdvMzJfeGZlcl9tZW1vcnkoQ09SRV9BRERSIG1lbWFkZHIs
IGNoYXIgKm15YWRkciwgaW50IGxlbiwgaW50IHdyaXRlLA0KISAJCSBzdHJ1Y3QgdGFyZ2V0X29w
cyAqdGFyZ2V0KQ0KISB7DQohICAgaW50IHJlczsNCiEgI2lmIDANCiEgICBwcmludGZfdW5maWx0
ZXJlZCgiZ28zMl94ZmVyX21lbW9yeSAleCAleCAlZCAlZFxuIiwgbWVtYWRkciwgbXlhZGRyLCBs
ZW4sIHdyaXRlKTsNCiEgI2VuZGlmDQohICAgaWYgKHdyaXRlKQ0KISAgICAgcmVzPXdyaXRlX2No
aWxkKG1lbWFkZHIsIG15YWRkciwgbGVuKTsNCiEgICBlbHNlDQohICAgICByZXM9cmVhZF9jaGls
ZChtZW1hZGRyLCBteWFkZHIsIGxlbik7DQohICAgaWYgKCFyZXMpDQohICAgICByZXR1cm4gbGVu
Ow0KISAgIGVsc2UNCiEgICAgIHJldHVybiAtMTsNCiEgfQ0KISANCiEgLyogxMTExMTExMTExMTE
xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE
xMTExMTExMQgKi8NCiEgDQohIHN0YXRpYyB2b2lkDQohIGdvMzJfZmlsZXNfaW5mbyhzdHJ1Y3Qg
dGFyZ2V0X29wcyAqdGFyZ2V0KQ0KISB7DQohICAgcHJpbnRmX3VuZmlsdGVyZWQoIllvdSBhcmUg
cnVubmluZyBhIERKR1BQIFYyIHByb2dyYW1cbiIpOw0KISB9DQohIA0KISAvKiDExMTExMTExMTE
xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE
xMTExMTExMTExCAqLw0KISANCiEgc3RhdGljIHZvaWQgZ28zMl9zdG9wKCkNCiEgew0KISAgIC8q
cHJpbnRmX3VuZmlsdGVyZWQoImdvMzJfc3RvcCBjYWxsZWRcbiIpOyovDQohICAgbm9ybWFsX3N0
b3AoKTsNCiEgICBjbGVhbnVwX2NsaWVudCgpOw0KISAgIGluZmVyaW9yX3BpZCA9IDA7DQohICAg
cHJvZ19oYXNfc3RhcnRlZCA9IDA7DQohIH0NCiEgDQohIHN0YXRpYyB2b2lkDQohIGdvMzJfa2ls
bF9pbmZlcmlvcih2b2lkKQ0KISB7DQohICAgLypwcmludGZfdW5maWx0ZXJlZCgiZ28zMl9raWxs
X2luZmVyaW9yIGNhbGxlZFxuIik7Ki8NCiEgICBnbzMyX3N0b3AoKTsNCiEgICB1bnB1c2hfdGFy
Z2V0KCZnbzMyX29wcyk7DQohIH0NCiEgDQohIC8qIMTExMTExMTExMTExMTExMTExMTExMTExMTE
xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEICovDQoh
IA0KISBleHRlcm4gY2hhciAqKmVudmlyb247DQohIA0KISBzdGF0aWMgdm9pZA0KISBnbzMyX2Ny
ZWF0ZV9pbmZlcmlvcihjaGFyICpleGVjX2ZpbGUsIGNoYXIgKmFyZ3MsIGNoYXIgKiplbnYpDQoh
IHsNCiEgICBqbXBfYnVmIHN0YXJ0X3N0YXRlOw0KISAgIGNoYXIgKmNtZGxpbmU7DQohICAgY2hh
ciAqKmVudl9zYXZlID0gZW52aXJvbjsNCiEgICAvKnByaW50Zl91bmZpbHRlcmVkKCJnbzMyX2Ny
ZWF0ZV9pbmZlcmlvciBjYWxsZWRcbiIpOyovDQohICAgaWYgKHByb2dfaGFzX3N0YXJ0ZWQpDQoh
ICAgew0KISAgICAgZ28zMl9raWxsX2luZmVyaW9yKCk7DQohICAgfQ0KISANCiEgICBjbWRsaW5l
ID0gKGNoYXIgKilhbGxvY2Eoc3RybGVuKGFyZ3MpKzQpOw0KISAgIGNtZGxpbmVbMF0gPSBzdHJs
ZW4oYXJncyk7DQohICAgc3RyY3B5KGNtZGxpbmUrMSwgYXJncyk7DQohICAgY21kbGluZVtzdHJs
ZW4oYXJncykrMV0gPSAxMzsNCiEgDQohICAgZW52aXJvbiA9IGVudjsNCiEgDQohICAgaWYgKHYy
bG9hZGltYWdlKGV4ZWNfZmlsZSwgY21kbGluZSwgc3RhcnRfc3RhdGUpKQ0KISAgIHsNCiEgICAg
IGVudmlyb24gPSBlbnZfc2F2ZTsNCiEgICAgIHByaW50Zl91bmZpbHRlcmVkKCJMb2FkIGZhaWxl
ZCBmb3IgaW1hZ2UgJXNcbiIsIGV4ZWNfZmlsZSk7DQohICAgICBleGl0KDEpOw0KISAgIH0NCiEg
ICBlbnZpcm9uID0gZW52X3NhdmU7DQohIA0KISAgIGVkaV9pbml0KHN0YXJ0X3N0YXRlKTsNCiEg
DQohICAgaW5mZXJpb3JfcGlkID0gU09NRV9QSUQ7DQohICAgcHVzaF90YXJnZXQoJmdvMzJfb3Bz
KTsNCiEgICBjbGVhcl9wcm9jZWVkX3N0YXR1cygpOw0KISAgIGluc2VydF9icmVha3BvaW50cygp
Ow0KISAgIHByb2NlZWQoKENPUkVfQUREUikgLTEsIFRBUkdFVF9TSUdOQUxfMCwgMCk7DQohIH0N
CiEgDQohIC8qIMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE
xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEICovDQohIA0KISBzdGF0aWMgdm9pZA0KISBn
bzMyX21vdXJuX2luZmVyaW9yKHZvaWQpDQohIHsNCiEgICAvKnByaW50Zl9maWx0ZXJlZCgiZ28z
Ml9tb3Vybl9pbmZlcmlvciBjYWxsZWRcbiIpOyovDQohICAgZ28zMl9raWxsX2luZmVyaW9yKCk7
DQohICAgZ2VuZXJpY19tb3Vybl9pbmZlcmlvcigpOw0KISB9DQohIA0KISAvKiDExMTExMTExMTE
xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE
xMTExMTExMTExCAqLw0KISANCiEgc3RhdGljIGludCBnbzMyX2Nhbl9ydW4odm9pZCkNCiEgew0K
ISAgIHJldHVybiAxOw0KISB9DQohIA0KISAvKiDExMTExMTExMTExMTExMTExMTExMTExMTExMTE
xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCAqLw0KISAN
CiEgdm9pZCBnbzMyX3NlbF9pbmZvKGludCBzZWwpDQohIHsNCiEgICBjaGFyIHJlYWRfYWxsb3dl
ZCA9IDA7DQohICAgY2hhciB3cml0ZV9hbGxvd2VkID0gMDsNCiEgICB1bnNpZ25lZCBsb25nIGxp
bWl0LHZiYXNlOw0KISAgIA0KISAgIGFzbSgiDQohICAgICAgIG1vdncgICUyLCUlYXgNCiEgICAg
ICAgdmVyciAgJSVheA0KISAgICAgICBqbnogICAuTGRvZXNfbm90X2hhc19yZWFkX3JpZ2h0DQoh
ICAgICAgIG1vdmIgICQxLCUwDQohIC5MZG9lc19ub3RfaGFzX3JlYWRfcmlnaHQ6DQohICAgICAg
IHZlcnJ3ICUlYXgNCiEgICAgICAgam56ICAgLkxkb2VzX25vdF9oYXNfd3JpdGVfcmlnaHQNCiEg
ICAgICAgbW92YiAgJDEsJTENCiEgLkxkb2VzX25vdF9oYXNfd3JpdGVfcmlnaHQ6ICINCiEgICAg
ICA6ICI9ZyIgKHJlYWRfYWxsb3dlZCksICI9ZyIgKHdyaXRlX2FsbG93ZWQpDQohICAgICAgOiAi
ZyIgKHNlbCkNCiEgICAgICApOw0KISAgIGlmICghcmVhZF9hbGxvd2VkICYmICF3cml0ZV9hbGxv
d2VkKQ0KISAgICAgew0KISAgICAgICBwcmludGZfdW5maWx0ZXJlZCgiSW52YWxpZCBzZWxlY3Rv
ciAlMDR4XG4iLCBzZWwpOw0KISAgICAgICByZXR1cm47DQohICAgICB9DQohICAgaWYgKHJlYWRf
YWxsb3dlZCkNCiEgICAgIHByaW50Zl91bmZpbHRlcmVkKCJSIik7DQohICAgZWxzZQ0KISAgICAg
cHJpbnRmX3VuZmlsdGVyZWQoIiAiKTsNCiEgICBpZiAod3JpdGVfYWxsb3dlZCkNCiEgICAgIHBy
aW50Zl91bmZpbHRlcmVkKCJXICIpOw0KISAgIGVsc2UNCiEgICAgIHByaW50Zl91bmZpbHRlcmVk
KCIgICIpOw0KISAgIF9fZHBtaV9nZXRfc2VnbWVudF9iYXNlX2FkZHJlc3Moc2VsLCAmdmJhc2Up
Ow0KISAgIGxpbWl0PV9fZHBtaV9nZXRfc2VnbWVudF9saW1pdChzZWwpOw0KISAgIHByaW50Zl91
bmZpbHRlcmVkKCIgYmFzZSAlMDh4XHQgbGltaXQgJTA4eFxuIix2YmFzZSxsaW1pdCk7DQohIH0N
CiEgDQohIC8qIMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE
xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEICovDQohIA0KISBzdGF0aWMgdm9pZCBpZ25v
cmUodm9pZCkge30NCiEgc3RhdGljIHZvaWQgaWdub3JlMihjaGFyICphLGludCBiKSB7fQ0KISAN
CiEgLyogzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N
zc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc0gKi8NCiEgDQohIHN0cnVjdCB0YXJnZXRfb3BzIGdv
MzJfb3BzID0gew0KISAgICJnbzMyIiwJCQkvKiB0b19zaG9ydG5hbWUgKi8NCiEgICAiZ28zMiB0
YXJnZXQgcHJvY2VzcyIsCS8qIHRvX2xvbmduYW1lICovDQohICAgIlByb2dyYW0gbG9hZGVkIGJ5
IGdvMzIsIHdoZW4gZ2RiIGlzIHVzZWQgYXMgYW4gZXh0ZXJuYWwgZGVidWdnZXIiLAkvKiB0b19k
b2MgKi8NCiEgICBnbzMyX29wZW4sCQkJLyogdG9fb3BlbiAqLw0KISAgIGdvMzJfY2xvc2UsCQkJ
LyogdG9fY2xvc2UgKi8NCiEgICBnbzMyX2F0dGFjaCwJCQkvKiB0b19hdHRhY2ggKi8NCiEgICBn
bzMyX2RldGFjaCwgCQkJLyogdG9fZGV0YWNoICovDQohICAgZ28zMl9yZXN1bWUsCQkJLyogdG9f
cmVzdW1lICovDQohICAgZ28zMl93YWl0LAkJCS8qIHRvX3dhaXQgKi8NCiEgICBnbzMyX2ZldGNo
X3JlZ2lzdGVycywJCS8qIHRvX2ZldGNoX3JlZ2lzdGVycyAqLw0KISAgIGdvMzJfc3RvcmVfcmVn
aXN0ZXJzLAkJLyogdG9fc3RvcmVfcmVnaXN0ZXJzICovDQohICAgZ28zMl9wcmVwYXJlX3RvX3N0
b3JlLAkvKiB0b19wcmVwYXJlX3RvX3N0b3JlICovDQohICAgZ28zMl94ZmVyX21lbW9yeSwJCS8q
IHRvX3hmZXJfbWVtb3J5ICovDQohICAgZ28zMl9maWxlc19pbmZvLAkJLyogdG9fZmlsZXNfaW5m
byAqLw0KISAgIG1lbW9yeV9pbnNlcnRfYnJlYWtwb2ludCwJLyogdG9faW5zZXJ0X2JyZWFrcG9p
bnQgKi8NCiEgICBtZW1vcnlfcmVtb3ZlX2JyZWFrcG9pbnQsCS8qIHRvX3JlbW92ZV9icmVha3Bv
aW50ICovDQohICAgaWdub3JlLAkJCS8qIHRvX3Rlcm1pbmFsX2luaXQgKi8NCiEgICBpZ25vcmUs
CSAJCS8qIHRvX3Rlcm1pbmFsX2luZmVyaW9yICovDQohICAgaWdub3JlLAkJCS8qIHRvX3Rlcm1p
bmFsX291cnNfZm9yX291dHB1dCAqLw0KISAgIGlnbm9yZSwJCQkvKiB0b190ZXJtaW5hbF9vdXJz
ICovDQohICAgaWdub3JlMiwJCQkvKiB0b190ZXJtaW5hbF9pbmZvICovDQohICAgZ28zMl9raWxs
X2luZmVyaW9yLAkJLyogdG9fa2lsbCAqLw0KISAgIDAsCQkJCS8qIHRvX2xvYWQgKi8NCiEgICAw
LAkJCQkvKiB0b19sb29rdXBfc3ltYm9sICovDQohICAgZ28zMl9jcmVhdGVfaW5mZXJpb3IsCQkv
KiB0b19jcmVhdGVfaW5mZXJpb3IgKi8NCiEgICBnbzMyX21vdXJuX2luZmVyaW9yLAkJLyogdG9f
bW91cm5faW5mZXJpb3IgKi8NCiEgICBnbzMyX2Nhbl9ydW4sCQkJLyogdG9fY2FuX3J1biAqLw0K
ISAgIDAsIAkJCQkvKiB0b19ub3RpY2Vfc2lnbmFscyAqLw0KISAgIDAsCQkJCS8qIHRvX3RocmVh
ZF9hbGl2ZSAqLw0KISAgIGdvMzJfc3RvcCwJCQkvKiB0b19zdG9wICovDQohICAgcHJvY2Vzc19z
dHJhdHVtLAkJLyogdG9fc3RyYXR1bSAqLw0KISAgIDAsCQkJCS8qIHRvX25leHQgKi8NCiEgICAx
LAkJCQkvKiB0b19oYXNfYWxsX21lbW9yeSAqLw0KISAgIDEsCQkJCS8qIHRvX2hhc19tZW1vcnkg
Ki8NCiEgICAxLAkJCQkvKiB0b19oYXNfc3RhY2sgKi8NCiEgICAxLAkJCQkvKiB0b19oYXNfcmVn
aXN0ZXJzICovDQohICAgMSwJCQkJLyogdG9faGFzX2V4ZWN1dGlvbiAqLw0KISAgIDAsCQkJCS8q
IHNlY3Rpb25zICovDQohICAgMCwJCQkJLyogc2VjdGlvbnNfZW5kICovDQohICAgT1BTX01BR0lD
CQkJLyogdG9fbWFnaWMgKi8NCiEgfTsNCiEgDQohIHZvaWQNCiEgX2luaXRpYWxpemVfaW5mdGFy
ZyAoKQ0KISB7DQohICAgYWRkX3RhcmdldCAoJmdvMzJfb3BzKTsNCiEgfQ0KISANCiEgI2lmZGVm
IFRBUkdFVF9IQVNfSEFSRFdBUkVfV0FUQ0hQT0lOVFMNCiEgDQohICNkZWZpbmUgRFJfU1RBVFVT
IDYNCiEgI2RlZmluZSBEUl9DT05UUk9MIDcNCiEgI2RlZmluZSBEUl9FTkFCTEVfU0laRSAyDQoh
ICNkZWZpbmUgRFJfTE9DQUxfRU5BQkxFX1NISUZUIDANCiEgI2RlZmluZSBEUl9HTE9CQUxfRU5B
QkxFX1NISUZUIDENCiEgI2RlZmluZSBEUl9MT0NBTF9TTE9XRE9XTiAweDEwMA0KISAjZGVmaW5l
IERSX0dMT0JBTF9TTE9XRE9XTiAweDIwMA0KISAjZGVmaW5lIERSX0NPTlRST0xfU0hJRlQgMTYN
CiEgI2RlZmluZSBEUl9DT05UUk9MX1NJWkUgNA0KISAjZGVmaW5lIERSX1JXX1JFQUQgMHgzDQoh
ICNkZWZpbmUgRFJfUldfV1JJVEUgMHgxDQohICNkZWZpbmUgRFJfQ09OVFJPTF9NQVNLIDB4Zg0K
ISAjZGVmaW5lIERSX0VOQUJMRV9NQVNLIDB4Mw0KISAjZGVmaW5lIERSX0xFTl8xIDB4MA0KISAj
ZGVmaW5lIERSX0xFTl8yIDB4NA0KISAjZGVmaW5lIERSX0xFTl80IDB4Yw0KISANCiEgI2RlZmlu
ZSBEX1JFR1MgZWRpLmRyDQohICNkZWZpbmUgQ09OVFJPTCBEX1JFR1NbRFJfQ09OVFJPTF0NCiEg
I2RlZmluZSBTVEFUVVMgRF9SRUdTW0RSX1NUQVRVU10NCiEgDQohICNkZWZpbmUgSVNfUkVHX0ZS
RUUoaW5kZXgpIFwNCiEgICAoIShDT05UUk9MICYgKDMgPDwgKERSX0VOQUJMRV9TSVpFICogaW5k
ZXgpKSkpDQohICNkZWZpbmUgTE9DQUxfRU5BQkxFX1JFRyhpbmRleCkgXA0KISAgIChDT05UUk9M
IHw9ICgxIDw8IChEUl9MT0NBTF9FTkFCTEVfU0hJRlQgKyBEUl9FTkFCTEVfU0laRSAqIGluZGV4
KSkpDQohICNkZWZpbmUgR0xPQkFMX0VOQUJMRV9SRUcoaW5kZXgpIFwNCiEgICAoQ09OVFJPTCB8
PSAoMSA8PCAoRFJfR0xPQkFMX0VOQUJMRV9TSElGVCArIERSX0VOQUJMRV9TSVpFICogaW5kZXgp
KSkNCiEgI2RlZmluZSBESVNBQkxFX1JFRyhpbmRleCkgXA0KISAgIChDT05UUk9MICY9IH4oMyA8
PCAoRFJfRU5BQkxFX1NJWkUgKiBpbmRleCkpKQ0KISAjZGVmaW5lIFNFVF9MT0NBTF9FWEFDVCgp
IFwNCiEgICAoQ09OVFJPTCB8PSBEUl9MT0NBTF9TTE9XRE9XTikNCiEgI2RlZmluZSBTRVRfR0xP
QkFMX0VYQUNUKCkgXA0KISAgIChDT05UUk9MIHw9IERSX0dMT0JBTF9TTE9XRE9XTikNCiEgI2Rl
ZmluZSBTRVRfQlJFQUsoaW5kZXgsYWRkcmVzcykgXA0KISAgIGRvIHtcDQohICAgICBDT05UUk9M
ICY9IH4oRFJfQ09OVFJPTF9NQVNLIDw8IChEUl9DT05UUk9MX1NISUZUICsgRFJfQ09OVFJPTF9T
SVpFICogaW5kZXgpKTtcDQohICAgICBEX1JFR1NbaW5kZXhdID0gYWRkcmVzcztcDQohICAgfSB3
aGlsZSgwKQ0KISAjZGVmaW5lIFNFVF9XQVRDSChpbmRleCxhZGRyZXNzLHJ3LGxlbikgXA0KISAg
IGRvIHtcDQohICAgICBTRVRfQlJFQUsoaW5kZXgsYWRkcmVzcyk7XA0KISAgICAgQ09OVFJPTCB8
PSAobGVuIHwgcncpIDw8IChEUl9DT05UUk9MX1NISUZUICsgRFJfQ09OVFJPTF9TSVpFICogaW5k
ZXgpO1wNCiEgICB9IHdoaWxlICgwKQ0KISAgIA0KISAjZGVmaW5lIFdBVENIX0hJVChpbmRleCkg
XA0KISAgIChcDQohICAgIChTVEFUVVMgJiAoMSA8PCBpbmRleCkpICYmIFwNCiEgICAgKENPTlRS
T0wgJiAoRFJfQ09OVFJPTF9NQVNLIDw8IChEUl9DT05UUk9MX1NISUZUICsgRFJfQ09OVFJPTF9T
SVpFICogaW5kZXgpKSlcDQohICAgKQ0KISANCiEgc3RhdGljIGludA0KISBnbzMyX2luc2VydF9h
bGlnbmVkX3dhdGNocG9pbnQgUEFSQU1TICgoaW50LCBDT1JFX0FERFIsIENPUkVfQUREUiwgaW50
LA0KISAJCQkJCSAgIGludCkpOw0KISANCiEgc3RhdGljIGludA0KISBnbzMyX2luc2VydF9ub25h
bGlnbmVkX3dhdGNocG9pbnQgUEFSQU1TICgoaW50LCBDT1JFX0FERFIsIENPUkVfQUREUiwgaW50
LA0KISAJCQkJCSAgIGludCkpOw0KISANCiEgLyogSW5zZXJ0IGEgd2F0Y2hwb2ludC4gICovDQoh
IA0KISAjZGVmaW5lIFNIT1dfRFIodGV4dCkgXA0KISBkbyB7XA0KISAgIGZwcmludGYoc3RkZXJy
LCIlMDh4ICUwOHggIixlZGkuZHJbN10sZWRpLmRyWzZdKTtcDQohICAgZnByaW50ZihzdGRlcnIs
IiUwOHggJTA4eCAiLGVkaS5kclswXSxlZGkuZHJbMV0pO1wNCiEgICBmcHJpbnRmKHN0ZGVyciwi
JTA4eCAlMDh4ICIsZWRpLmRyWzJdLGVkaS5kclszXSk7XA0KISAgIGZwcmludGYoc3RkZXJyLCIo
JXMpXG4iLCN0ZXh0KTtcDQohIH0gd2hpbGUgKDApDQohIA0KISAjZGVmaW5lIF9TSE9XX0RSKHgp
IGRvIHt9IHdoaWxlKDApDQohIA0KISBpbnQNCiEgZ28zMl9pbnNlcnRfd2F0Y2hwb2ludCAocGlk
LCBhZGRyLCBsZW4sIHJ3KQ0KISAgICAgIGludCBwaWQ7DQohICAgICAgQ09SRV9BRERSIGFkZHI7
DQohICAgICAgaW50IGxlbjsNCiEgICAgICBpbnQgcnc7DQohIHsNCiEgICBpbnQgcmV0ID0gZ28z
Ml9pbnNlcnRfYWxpZ25lZF93YXRjaHBvaW50IChwaWQsIGFkZHIsIGFkZHIsIGxlbiwgcncpOw0K
ISBfU0hPV19EUihpbnNlcnRfd2F0Y2gpOw0KISAgIHJldHVybiByZXQ7DQohIH0NCiEgDQohIHN0
YXRpYyBpbnQNCiEgZ28zMl9pbnNlcnRfYWxpZ25lZF93YXRjaHBvaW50IChwaWQsIHdhZGRyLCBh
ZGRyLCBsZW4sIHJ3KQ0KISAgICAgIGludCBwaWQ7DQohICAgICAgQ09SRV9BRERSIHdhZGRyOw0K
ISAgICAgIENPUkVfQUREUiBhZGRyOw0KISAgICAgIGludCBsZW47DQohICAgICAgaW50IHJ3Ow0K
ISB7DQohICAgaW50IGk7DQohICAgaW50IHJlYWRfd3JpdGVfYml0cywgbGVuX2JpdHM7DQohICAg
DQohICAgLyogTG9vayBmb3IgYSBmcmVlIGRlYnVnIHJlZ2lzdGVyLiAgKi8NCiEgICBmb3IgKGkg
PSAwOyBpIDw9IDM7IGkrKykNCiEgICAgIHsNCiEgICAgICAgaWYgKElTX1JFR19GUkVFKGkpKQ0K
ISAJYnJlYWs7DQohICAgICB9DQohIA0KISAgIC8qIE5vIG1vcmUgZGVidWcgcmVnaXN0ZXJzISAg
Ki8NCiEgICBpZiAoaSA+IDMpDQohICAgICByZXR1cm4gLTE7DQohIA0KISAgIHJlYWRfd3JpdGVf
Yml0cyA9ICgocncgJiAxKSA/IERSX1JXX1JFQUQgOiAwKSB8ICgocncgJiAyKSA/IERSX1JXX1dS
SVRFIDogMCk7DQohIA0KISAgIGlmIChsZW4gPT0gMSkNCiEgICAgIGxlbl9iaXRzID0gRFJfTEVO
XzE7DQohICAgZWxzZSBpZiAobGVuID09IDIpDQohICAgICB7DQohICAgICAgIGlmIChhZGRyICUg
MikNCiEgCXJldHVybiBnbzMyX2luc2VydF9ub25hbGlnbmVkX3dhdGNocG9pbnQgKHBpZCwgd2Fk
ZHIsIGFkZHIsIGxlbiwgcncpOw0KISAgICAgICBsZW5fYml0cyA9IERSX0xFTl8yOw0KISAgICAg
fQ0KISANCiEgICBlbHNlIGlmIChsZW4gPT0gNCkNCiEgICAgIHsNCiEgICAgICAgaWYgKGFkZHIg
JSA0KQ0KISAJcmV0dXJuIGdvMzJfaW5zZXJ0X25vbmFsaWduZWRfd2F0Y2hwb2ludCAocGlkLCB3
YWRkciwgYWRkciwgbGVuLCBydyk7DQohICAgICAgIGxlbl9iaXRzID0gRFJfTEVOXzQ7DQohICAg
ICB9DQohICAgZWxzZQ0KISAgICAgcmV0dXJuIGdvMzJfaW5zZXJ0X25vbmFsaWduZWRfd2F0Y2hw
b2ludCAocGlkLCB3YWRkciwgYWRkciwgbGVuLCBydyk7DQohICAgDQohICAgU0VUX1dBVENIKGks
YWRkcixyZWFkX3dyaXRlX2JpdHMsbGVuX2JpdHMpOw0KISAgIExPQ0FMX0VOQUJMRV9SRUcoaSk7
DQohICAgU0VUX0xPQ0FMX0VYQUNUKCk7DQohIH0NCiEgDQohIHN0YXRpYyBpbnQNCiEgZ28zMl9p
bnNlcnRfbm9uYWxpZ25lZF93YXRjaHBvaW50IChwaWQsIHdhZGRyLCBhZGRyLCBsZW4sIHJ3KQ0K
ISAgICAgIGludCBwaWQ7DQohICAgICAgQ09SRV9BRERSIHdhZGRyOw0KISAgICAgIENPUkVfQURE
UiBhZGRyOw0KISAgICAgIGludCBsZW47DQohICAgICAgaW50IHJ3Ow0KISB7DQohICAgaW50IGFs
aWduOw0KISAgIGludCBzaXplOw0KISAgIGludCBydjsNCiEgDQohICAgc3RhdGljIGludCBzaXpl
X3RyeV9hcnJheVsxNl0gPSB7DQohICAgICAxLCAxLCAxLCAxLAkJCS8qIHRyeWluZyBzaXplIG9u
ZSAqLw0KISAgICAgMiwgMSwgMiwgMSwJCQkvKiB0cnlpbmcgc2l6ZSB0d28gKi8NCiEgICAgIDIs
IDEsIDIsIDEsCQkJLyogdHJ5aW5nIHNpemUgdGhyZWUgKi8NCiEgICAgIDQsIDEsIDIsIDEJCQkv
KiB0cnlpbmcgc2l6ZSBmb3VyICovDQohICAgfTsNCiEgDQohICAgcnYgPSAwOw0KISAgIHdoaWxl
IChsZW4gPiAwKQ0KISAgICAgew0KISAgICAgICBhbGlnbiA9IGFkZHIgJSA0Ow0KISAgICAgICAv
KiBGb3VyIGlzIHRoZSBtYXhpbXVtIGxlbmd0aCBmb3IgMzg2LiAgKi8NCiEgICAgICAgc2l6ZSA9
IChsZW4gPiA0KSA/IDMgOiBsZW4gLSAxOw0KISAgICAgICBzaXplID0gc2l6ZV90cnlfYXJyYXlb
c2l6ZSAqIDQgKyBhbGlnbl07DQohIA0KISAgICAgICBydiA9IGdvMzJfaW5zZXJ0X2FsaWduZWRf
d2F0Y2hwb2ludCAocGlkLCB3YWRkciwgYWRkciwgc2l6ZSwgcncpOw0KISAgICAgICBpZiAocnYp
DQohIAl7DQohIAkgIGdvMzJfcmVtb3ZlX3dhdGNocG9pbnQgKHBpZCwgd2FkZHIsIHNpemUpOw0K
ISAJICByZXR1cm4gcnY7DQohIAl9DQohICAgICAgIGFkZHIgKz0gc2l6ZTsNCiEgICAgICAgbGVu
IC09IHNpemU7DQohICAgICB9DQohICAgcmV0dXJuIHJ2Ow0KISB9DQohIA0KISAvKiBSZW1vdmUg
YSB3YXRjaHBvaW50LiAgKi8NCiEgDQohIGludA0KISBnbzMyX3JlbW92ZV93YXRjaHBvaW50IChw
aWQsIGFkZHIsIGxlbikNCiEgICAgICBpbnQgcGlkOw0KISAgICAgIENPUkVfQUREUiBhZGRyOw0K
ISAgICAgIGludCBsZW47DQohIHsNCiEgICBpbnQgaTsNCiEgICBmb3IgKGkgPSAwOyBpIDw9IDM7
IGkrKykNCiEgICAgIHsNCiEgICAgICAgaWYgKERfUkVHU1tpXSA9PSBhZGRyKQ0KISAJew0KISAJ
ICBESVNBQkxFX1JFRyhpKTsNCiEgCX0NCiEgICAgIH0NCiEgX1NIT1dfRFIocmVtb3ZlX3dhdGNo
KTsNCiEgICByZXR1cm4gMDsNCiEgfQ0KISANCiEgLyogQ2hlY2sgaWYgc3RvcHBlZCBieSBhIHdh
dGNocG9pbnQuICAqLw0KISANCiEgQ09SRV9BRERSDQohIGdvMzJfc3RvcHBlZF9ieV93YXRjaHBv
aW50IChwaWQpDQohICAgICBpbnQgcGlkOw0KISB7DQohICAgaW50IGkscmV0PTA7DQohICAgaW50
IHN0YXR1czsNCiEgDQohICAgc3RhdHVzID0gZWRpLmRyW0RSX1NUQVRVU107DQohIF9TSE9XX0RS
KHN0b3BwZWRfYnkpOw0KISAgIGZvciAoaSA9IDA7IGkgPD0gMzsgaSsrKQ0KISAgICAgew0KISAg
ICAgICBpZiAoV0FUQ0hfSElUKGkpKQ0KISAgICAgICB7DQohIF9TSE9XX0RSKEhJVCk7DQohIAly
ZXQgPSBEX1JFR1NbaV07DQohICAgICAgIH0NCiEgICAgIH0NCiEgLyogdGhpcyBpcyBhIGhhY2sg
dG8gR0RCLiBJZiB3ZSBzdG9wcGVkIGF0IGEgaGFyZHdhcmUgYnJlYWtwb2ludCwNCiEgICAgdGhl
IHN0b3BfcGMgbXVzdCBpbmNyZW1lbnRlZCBieSBERUNSX1BDX0FGVEVSX0JSRUFLLiBJIHRyaWVk
IGV2ZXJ5dGhpbmcNCiEgICAgd2l0aCB0aGUgREVDUl9QQ19BRlRFUl9IV19CUkVBSywgYnV0IG5v
dGhpbmcgd29ya3MuICovDQohICAgaWYgKFNUQVRVUyAmJiAhcmV0KQ0KISAgICAgc3RvcF9wYyAr
PSBERUNSX1BDX0FGVEVSX0JSRUFLOw0KISAgIFNUQVRVUyA9IDA7DQohICAgcmV0dXJuIHJldDsN
CiEgfQ0KISANCiEgLyogUmVtb3ZlIGEgYnJlYWtwb2ludC4gICovDQohIA0KISBpbnQNCiEgZ28z
Ml9yZW1vdmVfaHdfYnJlYWtwb2ludCAoYWRkciwgc2hhZG93KQ0KISAgICAgIENPUkVfQUREUiBh
ZGRyOw0KISAgICAgIENPUkVfQUREUiBzaGFkb3c7DQohIHsNCiEgICBpbnQgaTsNCiEgICBmb3Ig
KGkgPSAwOyBpIDw9IDM7IGkrKykNCiEgICAgIHsNCiEgICAgICAgaWYgKERfUkVHU1tpXSA9PSBh
ZGRyKQ0KISAJew0KISAJICBESVNBQkxFX1JFRyhpKTsNCiEgCX0NCiEgICAgIH0NCiEgX1NIT1df
RFIocmVtb3ZlX2h3KTsNCiEgICByZXR1cm4gMDsNCiEgfQ0KISANCiEgaW50DQohIGdvMzJfaW5z
ZXJ0X2h3X2JyZWFrcG9pbnQgKGFkZHIsIHNoYWRvdykNCiEgICAgIENPUkVfQUREUiBhZGRyOw0K
ISAgICAgQ09SRV9BRERSIHNoYWRvdzsNCiEgew0KISAgIGludCBpOw0KISAgIGludCByZWFkX3dy
aXRlX2JpdHMsIGxlbl9iaXRzOw0KISAgIGludCBmcmVlX2RlYnVnX3JlZ2lzdGVyOw0KISAgIGlu
dCByZWdpc3Rlcl9udW1iZXI7DQohICAgDQohICAgLyogTG9vayBmb3IgYSBmcmVlIGRlYnVnIHJl
Z2lzdGVyLiAgKi8NCiEgICBmb3IgKGkgPSAwOyBpIDw9IDM7IGkrKykNCiEgICAgIHsNCiEgICAg
ICAgaWYgKElTX1JFR19GUkVFKGkpKQ0KISAJYnJlYWs7DQohICAgICB9DQohIA0KISAgIC8qIE5v
IG1vcmUgZGVidWcgcmVnaXN0ZXJzISAgKi8NCiEgICBpZiAoaSA+IDMpDQohICAgICByZXR1cm4g
LTE7DQohIA0KISAgIFNFVF9CUkVBSyhpLGFkZHIpOw0KISAgIExPQ0FMX0VOQUJMRV9SRUcoaSk7
DQohIF9TSE9XX0RSKGluc2VydF9odyk7DQohICAgcmV0dXJuIDA7DQohIH0NCiEgDQohICNlbmRp
ZiAvKiBUQVJHRVRfSEFTX0hBUkRXQVJFX1dBVENIUE9JTlRTICovDQohIA0KSW5kZXg6IGdkYi9p
bmZjbWQuYw0KZGlmZiAtYyBnZGIvaW5mY21kLmM6MS4xLjEuMSBnZGIvaW5mY21kLmM6MS4yDQoq
KiogZ2RiL2luZmNtZC5jOjEuMS4xLjEJRnJpIERlYyAwNCAxMDo1MTowNCAxOTk4DQotLS0gZ2Ri
L2luZmNtZC5jCVdlZCBEZWMgMjMgMTY6NTM6MDYgMTk5OA0KKioqKioqKioqKioqKioqDQoqKiog
OTU1LDk2MCAqKioqDQotLS0gOTU1LDk2MyAtLS0tDQogIA0KICAjZGVmaW5lIERPX1JFR0lTVEVS
U19JTkZPKHJlZ251bSwgZnApIGRvX3JlZ2lzdGVyc19pbmZvKHJlZ251bSwgZnApDQogIA0KKyAj
ZW5kaWYgLyogbm8gRE9fUkVHSVNURVJTX0lORk8uICAqLw0KKyANCisgLyogd2Ugd2FudCB0byBo
YXZlIHRoaXMgZXZlbiBpZiB3ZSBvdmVycmlkZSBET19SRUdJU1RFUlNfSU5GTyAqLw0KICBzdGF0
aWMgdm9pZA0KICBkb19yZWdpc3RlcnNfaW5mbyAocmVnbnVtLCBmcHJlZ3MpDQogICAgICAgaW50
IHJlZ251bTsNCioqKioqKioqKioqKioqKg0KKioqIDEwNTMsMTA1OSAqKioqDQogICAgICAgIHBy
aW50Zl9maWx0ZXJlZCAoIlxuIik7DQogICAgICB9DQogIH0NCi0gI2VuZGlmIC8qIG5vIERPX1JF
R0lTVEVSU19JTkZPLiAgKi8NCiAgDQogIHN0YXRpYyB2b2lkDQogIHJlZ2lzdGVyc19pbmZvIChh
ZGRyX2V4cCwgZnByZWdzKQ0KLS0tIDEwNTYsMTA2MSAtLS0tDQpJbmRleDogZ2RiL2luaXQuYw0K
ZGlmZiAtYyBnZGIvaW5pdC5jOjEuMS4xLjEgZ2RiL2luaXQuYzpyZW1vdmVkDQoqKiogZ2RiL2lu
aXQuYzoxLjEuMS4xCUZyaSBEZWMgMDQgMTA6NTE6MDQgMTk5OA0KLS0tIGdkYi9pbml0LmMJV2Vk
IERlYyAyMyAxNzowMjoxNiAxOTk4DQoqKioqKioqKioqKioqKioNCioqKiAxLDU1ICoqKioNCi0g
LyogRG8gbm90IG1vZGlmeSB0aGlzIGZpbGUuICAqLw0KLSAvKiBJdCBpcyBjcmVhdGVkIGF1dG9t
YXRpY2FsbHkgYnkgdGhlIE1ha2VmaWxlLiAgKi8NCi0gdm9pZCBpbml0aWFsaXplX2FsbF9maWxl
cyAoKSB7DQotICAge2V4dGVybiB2b2lkIF9pbml0aWFsaXplX2Jsb2NrZnJhbWUgKCk7IF9pbml0
aWFsaXplX2Jsb2NrZnJhbWUgKCk7fQ0KLSAgIHtleHRlcm4gdm9pZCBfaW5pdGlhbGl6ZV9icmVh
a3BvaW50ICgpOyBfaW5pdGlhbGl6ZV9icmVha3BvaW50ICgpO30NCi0gICB7ZXh0ZXJuIHZvaWQg
X2luaXRpYWxpemVfc3RhY2sgKCk7IF9pbml0aWFsaXplX3N0YWNrICgpO30NCi0gICB7ZXh0ZXJu
IHZvaWQgX2luaXRpYWxpemVfdGhyZWFkICgpOyBfaW5pdGlhbGl6ZV90aHJlYWQgKCk7fQ0KLSAg
IHtleHRlcm4gdm9pZCBfaW5pdGlhbGl6ZV9zb3VyY2UgKCk7IF9pbml0aWFsaXplX3NvdXJjZSAo
KTt9DQotICAge2V4dGVybiB2b2lkIF9pbml0aWFsaXplX3ZhbHVlcyAoKTsgX2luaXRpYWxpemVf
dmFsdWVzICgpO30NCi0gICB7ZXh0ZXJuIHZvaWQgX2luaXRpYWxpemVfdmFsb3BzICgpOyBfaW5p
dGlhbGl6ZV92YWxvcHMgKCk7fQ0KLSAgIHtleHRlcm4gdm9pZCBfaW5pdGlhbGl6ZV92YWxhcml0
aCAoKTsgX2luaXRpYWxpemVfdmFsYXJpdGggKCk7fQ0KLSAgIHtleHRlcm4gdm9pZCBfaW5pdGlh
bGl6ZV92YWxwcmludCAoKTsgX2luaXRpYWxpemVfdmFscHJpbnQgKCk7fQ0KLSAgIHtleHRlcm4g
dm9pZCBfaW5pdGlhbGl6ZV9wcmludGNtZCAoKTsgX2luaXRpYWxpemVfcHJpbnRjbWQgKCk7fQ0K
LSAgIHtleHRlcm4gdm9pZCBfaW5pdGlhbGl6ZV9zeW10YWIgKCk7IF9pbml0aWFsaXplX3N5bXRh
YiAoKTt9DQotICAge2V4dGVybiB2b2lkIF9pbml0aWFsaXplX3N5bWZpbGUgKCk7IF9pbml0aWFs
aXplX3N5bWZpbGUgKCk7fQ0KLSAgIHtleHRlcm4gdm9pZCBfaW5pdGlhbGl6ZV9zeW1taXNjICgp
OyBfaW5pdGlhbGl6ZV9zeW1taXNjICgpO30NCi0gICB7ZXh0ZXJuIHZvaWQgX2luaXRpYWxpemVf
aW5mY21kICgpOyBfaW5pdGlhbGl6ZV9pbmZjbWQgKCk7fQ0KLSAgIHtleHRlcm4gdm9pZCBfaW5p
dGlhbGl6ZV9pbmZydW4gKCk7IF9pbml0aWFsaXplX2luZnJ1biAoKTt9DQotICAge2V4dGVybiB2
b2lkIF9pbml0aWFsaXplX2NvbW1hbmQgKCk7IF9pbml0aWFsaXplX2NvbW1hbmQgKCk7fQ0KLSAg
IHtleHRlcm4gdm9pZCBfaW5pdGlhbGl6ZV9nZGJ0eXBlcyAoKTsgX2luaXRpYWxpemVfZ2RidHlw
ZXMgKCk7fQ0KLSAgIHtleHRlcm4gdm9pZCBfaW5pdGlhbGl6ZV9jb3B5aW5nICgpOyBfaW5pdGlh
bGl6ZV9jb3B5aW5nICgpO30NCi0gICB7ZXh0ZXJuIHZvaWQgX2luaXRpYWxpemVfaTM4Nl90ZGVw
ICgpOyBfaW5pdGlhbGl6ZV9pMzg2X3RkZXAgKCk7fQ0KLSAgIHtleHRlcm4gdm9pZCBfaW5pdGlh
bGl6ZV9pbmZ0YXJnICgpOyBfaW5pdGlhbGl6ZV9pbmZ0YXJnICgpO30NCi0gICB7ZXh0ZXJuIHZv
aWQgX2luaXRpYWxpemVfc2VyX2RvcyAoKTsgX2luaXRpYWxpemVfc2VyX2RvcyAoKTt9DQotICAg
e2V4dGVybiB2b2lkIF9pbml0aWFsaXplX3JlbW90ZSAoKTsgX2luaXRpYWxpemVfcmVtb3RlICgp
O30NCi0gICB7ZXh0ZXJuIHZvaWQgX2luaXRpYWxpemVfZGNhY2hlICgpOyBfaW5pdGlhbGl6ZV9k
Y2FjaGUgKCk7fQ0KLSAgIHtleHRlcm4gdm9pZCBfaW5pdGlhbGl6ZV9zcl9zdXBwb3J0ICgpOyBf
aW5pdGlhbGl6ZV9zcl9zdXBwb3J0ICgpO30NCi0gICB7ZXh0ZXJuIHZvaWQgX2luaXRpYWxpemVf
cGFyc2UgKCk7IF9pbml0aWFsaXplX3BhcnNlICgpO30NCi0gICB7ZXh0ZXJuIHZvaWQgX2luaXRp
YWxpemVfbGFuZ3VhZ2UgKCk7IF9pbml0aWFsaXplX2xhbmd1YWdlICgpO30NCi0gICB7ZXh0ZXJu
IHZvaWQgX2luaXRpYWxpemVfYnVpbGRzeW0gKCk7IF9pbml0aWFsaXplX2J1aWxkc3ltICgpO30N
Ci0gICB7ZXh0ZXJuIHZvaWQgX2luaXRpYWxpemVfZXhlYyAoKTsgX2luaXRpYWxpemVfZXhlYyAo
KTt9DQotICAge2V4dGVybiB2b2lkIF9pbml0aWFsaXplX21haW50X2NtZHMgKCk7IF9pbml0aWFs
aXplX21haW50X2NtZHMgKCk7fQ0KLSAgIHtleHRlcm4gdm9pZCBfaW5pdGlhbGl6ZV9kZW1hbmds
ZXIgKCk7IF9pbml0aWFsaXplX2RlbWFuZ2xlciAoKTt9DQotICAge2V4dGVybiB2b2lkIF9pbml0
aWFsaXplX2RieHJlYWQgKCk7IF9pbml0aWFsaXplX2RieHJlYWQgKCk7fQ0KLSAgIHtleHRlcm4g
dm9pZCBfaW5pdGlhbGl6ZV9jb2ZmcmVhZCAoKTsgX2luaXRpYWxpemVfY29mZnJlYWQgKCk7fQ0K
LSAgIHtleHRlcm4gdm9pZCBfaW5pdGlhbGl6ZV9lbGZyZWFkICgpOyBfaW5pdGlhbGl6ZV9lbGZy
ZWFkICgpO30NCi0gICB7ZXh0ZXJuIHZvaWQgX2luaXRpYWxpemVfbWlwc3JlYWQgKCk7IF9pbml0
aWFsaXplX21pcHNyZWFkICgpO30NCi0gICB7ZXh0ZXJuIHZvaWQgX2luaXRpYWxpemVfc3RhYnNy
ZWFkICgpOyBfaW5pdGlhbGl6ZV9zdGFic3JlYWQgKCk7fQ0KLSAgIHtleHRlcm4gdm9pZCBfaW5p
dGlhbGl6ZV9jb3JlICgpOyBfaW5pdGlhbGl6ZV9jb3JlICgpO30NCi0gICB7ZXh0ZXJuIHZvaWQg
X2luaXRpYWxpemVfY19sYW5ndWFnZSAoKTsgX2luaXRpYWxpemVfY19sYW5ndWFnZSAoKTt9DQot
ICAge2V4dGVybiB2b2lkIF9pbml0aWFsaXplX2NoaWxsX2xhbmd1YWdlICgpOyBfaW5pdGlhbGl6
ZV9jaGlsbF9sYW5ndWFnZSAoKTt9DQotICAge2V4dGVybiB2b2lkIF9pbml0aWFsaXplX2ZfbGFu
Z3VhZ2UgKCk7IF9pbml0aWFsaXplX2ZfbGFuZ3VhZ2UgKCk7fQ0KLSAgIHtleHRlcm4gdm9pZCBf
aW5pdGlhbGl6ZV9tMl9sYW5ndWFnZSAoKTsgX2luaXRpYWxpemVfbTJfbGFuZ3VhZ2UgKCk7fQ0K
LSAgIHtleHRlcm4gdm9pZCBfaW5pdGlhbGl6ZV9zY2hlbWVfbGFuZ3VhZ2UgKCk7IF9pbml0aWFs
aXplX3NjaGVtZV9sYW5ndWFnZSAoKTt9DQotICAge2V4dGVybiB2b2lkIF9pbml0aWFsaXplX2Nv
bXBsYWludHMgKCk7IF9pbml0aWFsaXplX2NvbXBsYWludHMgKCk7fQ0KLSAgIHtleHRlcm4gdm9p
ZCBfaW5pdGlhbGl6ZV90eXBlcHJpbnQgKCk7IF9pbml0aWFsaXplX3R5cGVwcmludCAoKTt9DQot
ICAge2V4dGVybiB2b2lkIF9pbml0aWFsaXplX2NwX3ZhbHByaW50ICgpOyBfaW5pdGlhbGl6ZV9j
cF92YWxwcmludCAoKTt9DQotICAge2V4dGVybiB2b2lkIF9pbml0aWFsaXplX2ZfdmFscHJpbnQg
KCk7IF9pbml0aWFsaXplX2ZfdmFscHJpbnQgKCk7fQ0KLSAgIHtleHRlcm4gdm9pZCBfaW5pdGlh
bGl6ZV9ubG1yZWFkICgpOyBfaW5pdGlhbGl6ZV9ubG1yZWFkICgpO30NCi0gICB7ZXh0ZXJuIHZv
aWQgX2luaXRpYWxpemVfc2VyaWFsICgpOyBfaW5pdGlhbGl6ZV9zZXJpYWwgKCk7fQ0KLSAgIHtl
eHRlcm4gdm9pZCBfaW5pdGlhbGl6ZV9tZGVidWdyZWFkICgpOyBfaW5pdGlhbGl6ZV9tZGVidWdy
ZWFkICgpO30NCi0gICB7ZXh0ZXJuIHZvaWQgX2luaXRpYWxpemVfb3M5a3JlYWQgKCk7IF9pbml0
aWFsaXplX29zOWtyZWFkICgpO30NCi0gICB7ZXh0ZXJuIHZvaWQgX2luaXRpYWxpemVfYW5ub3Rh
dGUgKCk7IF9pbml0aWFsaXplX2Fubm90YXRlICgpO30NCi0gICB7ZXh0ZXJuIHZvaWQgX2luaXRp
YWxpemVfaW5mbG93ICgpOyBfaW5pdGlhbGl6ZV9pbmZsb3cgKCk7fQ0KLSB9DQotLS0gMCAtLS0t
DQpJbmRleDogZ2RiL2luaXQuYy10DQpkaWZmIC1jIGdkYi9pbml0LmMtdDoxLjEuMS4xIGdkYi9p
bml0LmMtdDpyZW1vdmVkDQoqKiogZ2RiL2luaXQuYy10OjEuMS4xLjEJRnJpIERlYyAwNCAxMDo1
MTowNCAxOTk4DQotLS0gZ2RiL2luaXQuYy10CVdlZCBEZWMgMjMgMTc6MDI6MTYgMTk5OA0KKioq
KioqKioqKioqKioqDQoqKiogMSw1NSAqKioqDQotIC8qIERvIG5vdCBtb2RpZnkgdGhpcyBmaWxl
LiAgKi8NCi0gLyogSXQgaXMgY3JlYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBNYWtlZmlsZS4g
ICovDQotIHZvaWQgaW5pdGlhbGl6ZV9hbGxfZmlsZXMgKCkgew0KLSAgIHtleHRlcm4gdm9pZCBf
aW5pdGlhbGl6ZV9ibG9ja2ZyYW1lICgpOyBfaW5pdGlhbGl6ZV9ibG9ja2ZyYW1lICgpO30NCi0g
ICB7ZXh0ZXJuIHZvaWQgX2luaXRpYWxpemVfYnJlYWtwb2ludCAoKTsgX2luaXRpYWxpemVfYnJl
YWtwb2ludCAoKTt9DQotICAge2V4dGVybiB2b2lkIF9pbml0aWFsaXplX3N0YWNrICgpOyBfaW5p
dGlhbGl6ZV9zdGFjayAoKTt9DQotICAge2V4dGVybiB2b2lkIF9pbml0aWFsaXplX3RocmVhZCAo
KTsgX2luaXRpYWxpemVfdGhyZWFkICgpO30NCi0gICB7ZXh0ZXJuIHZvaWQgX2luaXRpYWxpemVf
c291cmNlICgpOyBfaW5pdGlhbGl6ZV9zb3VyY2UgKCk7fQ0KLSAgIHtleHRlcm4gdm9pZCBfaW5p
dGlhbGl6ZV92YWx1ZXMgKCk7IF9pbml0aWFsaXplX3ZhbHVlcyAoKTt9DQotICAge2V4dGVybiB2
b2lkIF9pbml0aWFsaXplX3ZhbG9wcyAoKTsgX2luaXRpYWxpemVfdmFsb3BzICgpO30NCi0gICB7
ZXh0ZXJuIHZvaWQgX2luaXRpYWxpemVfdmFsYXJpdGggKCk7IF9pbml0aWFsaXplX3ZhbGFyaXRo
ICgpO30NCi0gICB7ZXh0ZXJuIHZvaWQgX2luaXRpYWxpemVfdmFscHJpbnQgKCk7IF9pbml0aWFs
aXplX3ZhbHByaW50ICgpO30NCi0gICB7ZXh0ZXJuIHZvaWQgX2luaXRpYWxpemVfcHJpbnRjbWQg
KCk7IF9pbml0aWFsaXplX3ByaW50Y21kICgpO30NCi0gICB7ZXh0ZXJuIHZvaWQgX2luaXRpYWxp
emVfc3ltdGFiICgpOyBfaW5pdGlhbGl6ZV9zeW10YWIgKCk7fQ0KLSAgIHtleHRlcm4gdm9pZCBf
aW5pdGlhbGl6ZV9zeW1maWxlICgpOyBfaW5pdGlhbGl6ZV9zeW1maWxlICgpO30NCi0gICB7ZXh0
ZXJuIHZvaWQgX2luaXRpYWxpemVfc3ltbWlzYyAoKTsgX2luaXRpYWxpemVfc3ltbWlzYyAoKTt9
DQotICAge2V4dGVybiB2b2lkIF9pbml0aWFsaXplX2luZmNtZCAoKTsgX2luaXRpYWxpemVfaW5m
Y21kICgpO30NCi0gICB7ZXh0ZXJuIHZvaWQgX2luaXRpYWxpemVfaW5mcnVuICgpOyBfaW5pdGlh
bGl6ZV9pbmZydW4gKCk7fQ0KLSAgIHtleHRlcm4gdm9pZCBfaW5pdGlhbGl6ZV9jb21tYW5kICgp
OyBfaW5pdGlhbGl6ZV9jb21tYW5kICgpO30NCi0gICB7ZXh0ZXJuIHZvaWQgX2luaXRpYWxpemVf
Z2RidHlwZXMgKCk7IF9pbml0aWFsaXplX2dkYnR5cGVzICgpO30NCi0gICB7ZXh0ZXJuIHZvaWQg
X2luaXRpYWxpemVfY29weWluZyAoKTsgX2luaXRpYWxpemVfY29weWluZyAoKTt9DQotICAge2V4
dGVybiB2b2lkIF9pbml0aWFsaXplX2kzODZfdGRlcCAoKTsgX2luaXRpYWxpemVfaTM4Nl90ZGVw
ICgpO30NCi0gICB7ZXh0ZXJuIHZvaWQgX2luaXRpYWxpemVfaW5mdGFyZyAoKTsgX2luaXRpYWxp
emVfaW5mdGFyZyAoKTt9DQotICAge2V4dGVybiB2b2lkIF9pbml0aWFsaXplX3Nlcl9kb3MgKCk7
IF9pbml0aWFsaXplX3Nlcl9kb3MgKCk7fQ0KLSAgIHtleHRlcm4gdm9pZCBfaW5pdGlhbGl6ZV9y
ZW1vdGUgKCk7IF9pbml0aWFsaXplX3JlbW90ZSAoKTt9DQotICAge2V4dGVybiB2b2lkIF9pbml0
aWFsaXplX2RjYWNoZSAoKTsgX2luaXRpYWxpemVfZGNhY2hlICgpO30NCi0gICB7ZXh0ZXJuIHZv
aWQgX2luaXRpYWxpemVfc3Jfc3VwcG9ydCAoKTsgX2luaXRpYWxpemVfc3Jfc3VwcG9ydCAoKTt9
DQotICAge2V4dGVybiB2b2lkIF9pbml0aWFsaXplX3BhcnNlICgpOyBfaW5pdGlhbGl6ZV9wYXJz
ZSAoKTt9DQotICAge2V4dGVybiB2b2lkIF9pbml0aWFsaXplX2xhbmd1YWdlICgpOyBfaW5pdGlh
bGl6ZV9sYW5ndWFnZSAoKTt9DQotICAge2V4dGVybiB2b2lkIF9pbml0aWFsaXplX2J1aWxkc3lt
ICgpOyBfaW5pdGlhbGl6ZV9idWlsZHN5bSAoKTt9DQotICAge2V4dGVybiB2b2lkIF9pbml0aWFs
aXplX2V4ZWMgKCk7IF9pbml0aWFsaXplX2V4ZWMgKCk7fQ0KLSAgIHtleHRlcm4gdm9pZCBfaW5p
dGlhbGl6ZV9tYWludF9jbWRzICgpOyBfaW5pdGlhbGl6ZV9tYWludF9jbWRzICgpO30NCi0gICB7
ZXh0ZXJuIHZvaWQgX2luaXRpYWxpemVfZGVtYW5nbGVyICgpOyBfaW5pdGlhbGl6ZV9kZW1hbmds
ZXIgKCk7fQ0KLSAgIHtleHRlcm4gdm9pZCBfaW5pdGlhbGl6ZV9kYnhyZWFkICgpOyBfaW5pdGlh
bGl6ZV9kYnhyZWFkICgpO30NCi0gICB7ZXh0ZXJuIHZvaWQgX2luaXRpYWxpemVfY29mZnJlYWQg
KCk7IF9pbml0aWFsaXplX2NvZmZyZWFkICgpO30NCi0gICB7ZXh0ZXJuIHZvaWQgX2luaXRpYWxp
emVfZWxmcmVhZCAoKTsgX2luaXRpYWxpemVfZWxmcmVhZCAoKTt9DQotICAge2V4dGVybiB2b2lk
IF9pbml0aWFsaXplX21pcHNyZWFkICgpOyBfaW5pdGlhbGl6ZV9taXBzcmVhZCAoKTt9DQotICAg
e2V4dGVybiB2b2lkIF9pbml0aWFsaXplX3N0YWJzcmVhZCAoKTsgX2luaXRpYWxpemVfc3RhYnNy
ZWFkICgpO30NCi0gICB7ZXh0ZXJuIHZvaWQgX2luaXRpYWxpemVfY29yZSAoKTsgX2luaXRpYWxp
emVfY29yZSAoKTt9DQotICAge2V4dGVybiB2b2lkIF9pbml0aWFsaXplX2NfbGFuZ3VhZ2UgKCk7
IF9pbml0aWFsaXplX2NfbGFuZ3VhZ2UgKCk7fQ0KLSAgIHtleHRlcm4gdm9pZCBfaW5pdGlhbGl6
ZV9jaGlsbF9sYW5ndWFnZSAoKTsgX2luaXRpYWxpemVfY2hpbGxfbGFuZ3VhZ2UgKCk7fQ0KLSAg
IHtleHRlcm4gdm9pZCBfaW5pdGlhbGl6ZV9mX2xhbmd1YWdlICgpOyBfaW5pdGlhbGl6ZV9mX2xh
bmd1YWdlICgpO30NCi0gICB7ZXh0ZXJuIHZvaWQgX2luaXRpYWxpemVfbTJfbGFuZ3VhZ2UgKCk7
IF9pbml0aWFsaXplX20yX2xhbmd1YWdlICgpO30NCi0gICB7ZXh0ZXJuIHZvaWQgX2luaXRpYWxp
emVfc2NoZW1lX2xhbmd1YWdlICgpOyBfaW5pdGlhbGl6ZV9zY2hlbWVfbGFuZ3VhZ2UgKCk7fQ0K
LSAgIHtleHRlcm4gdm9pZCBfaW5pdGlhbGl6ZV9jb21wbGFpbnRzICgpOyBfaW5pdGlhbGl6ZV9j
b21wbGFpbnRzICgpO30NCi0gICB7ZXh0ZXJuIHZvaWQgX2luaXRpYWxpemVfdHlwZXByaW50ICgp
OyBfaW5pdGlhbGl6ZV90eXBlcHJpbnQgKCk7fQ0KLSAgIHtleHRlcm4gdm9pZCBfaW5pdGlhbGl6
ZV9jcF92YWxwcmludCAoKTsgX2luaXRpYWxpemVfY3BfdmFscHJpbnQgKCk7fQ0KLSAgIHtleHRl
cm4gdm9pZCBfaW5pdGlhbGl6ZV9mX3ZhbHByaW50ICgpOyBfaW5pdGlhbGl6ZV9mX3ZhbHByaW50
ICgpO30NCi0gICB7ZXh0ZXJuIHZvaWQgX2luaXRpYWxpemVfbmxtcmVhZCAoKTsgX2luaXRpYWxp
emVfbmxtcmVhZCAoKTt9DQotICAge2V4dGVybiB2b2lkIF9pbml0aWFsaXplX3NlcmlhbCAoKTsg
X2luaXRpYWxpemVfc2VyaWFsICgpO30NCi0gICB7ZXh0ZXJuIHZvaWQgX2luaXRpYWxpemVfbWRl
YnVncmVhZCAoKTsgX2luaXRpYWxpemVfbWRlYnVncmVhZCAoKTt9DQotICAge2V4dGVybiB2b2lk
IF9pbml0aWFsaXplX29zOWtyZWFkICgpOyBfaW5pdGlhbGl6ZV9vczlrcmVhZCAoKTt9DQotICAg
e2V4dGVybiB2b2lkIF9pbml0aWFsaXplX2Fubm90YXRlICgpOyBfaW5pdGlhbGl6ZV9hbm5vdGF0
ZSAoKTt9DQotICAge2V4dGVybiB2b2lkIF9pbml0aWFsaXplX2luZmxvdyAoKTsgX2luaXRpYWxp
emVfaW5mbG93ICgpO30NCi0gfQ0KLS0tIDAgLS0tLQ0KSW5kZXg6IGdkYi9pbml0Yy5zZWQNCmRp
ZmYgLWMgZ2RiL2luaXRjLnNlZDoxLjEuMS4xIGdkYi9pbml0Yy5zZWQ6MS4yDQoqKiogZ2RiL2lu
aXRjLnNlZDoxLjEuMS4xCUZyaSBEZWMgMDQgMTA6NTE6MDQgMTk5OA0KLS0tIGdkYi9pbml0Yy5z
ZWQJV2VkIERlYyAyMyAxNjo1MzowNiAxOTk4DQoqKioqKioqKioqKioqKioNCioqKiAxLDIwICoq
KioNCiEgJS5fX186ICUuYw0NCiEgCXJlZGlyIC1pICQ8IC1vYSBpbml0LmMtdG1wIFwNDQohIAkg
IHNlZCAtbiAtZSAnL15faW5pdGlhbGl6ZV9bYS16XzAtOUEtWl0qICooL3MvXlwoW2Etel8wLTlB
LVpdKlwpLiovICB7ZXh0ZXJuIHZvaWQgXDEgKCk7IFwxICgpO30vcCcNDQohIA0NCiEgaW5pdC5j
LnN0YXJ0Og0NCiEgCWVjaG8uZXhlIE1ha2luZyBpbml0LmMNDQohIAllY2hvLmV4ZSAtbyBpbml0
LmMtdG1wICcvKiBEbyBub3QgbW9kaWZ5IHRoaXMgZmlsZS4gICovJw0NCiEgCXJlZGlyIC1vYSBp
bml0LmMtdG1wIGVjaG8uZXhlICcvKiBJdCBpcyBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhl
IE1ha2VmaWxlLiAgKi8nDQ0KISAJcmVkaXIgLW9hIGluaXQuYy10bXAgZWNoby5leGUgdm9pZCBp
bml0aWFsaXplX2FsbF9maWxlcyAoKSB7DQ0KISANDQohIHN0bXAtaW5pdGM6ICQoc3Vic3QgLm8s
LmMsJChPQlMpICQoVFNPQlMpKQ0NCiEgCSQoTUFLRSkgc3RtcC1pbml0Yy5mb3JjZQ0NCiEgCXRv
dWNoIHN0bXAtaW5pdGMNDQohIA0NCiEgc3RtcC1pbml0Yy5mb3JjZTogaW5pdC5jLnN0YXJ0ICQo
c3Vic3QgLm8sLl9fXywkKE9CUykgJChUU09CUykpDQ0KISAJcmVkaXIgLW9hIGluaXQuYy10bXAg
ZWNoby5leGUgfQ0NCiEgDQ0KISBpbml0LmM6IHN0bXAtaW5pdGMNDQohIAl1cGRhdGUgaW5pdC5j
LXRtcCBpbml0LmMNDQohIA0NCi0tLSAxLDIwIC0tLS0NCiEgJS5fX186ICUuYw0KISAJcmVkaXIg
LWkgJDwgLW9hIGluaXQuYy10bXAgXA0KISAJICBzZWQgLW4gLWUgJy9eX2luaXRpYWxpemVfW2Et
el8wLTlBLVpdKiAqKC9zL15cKFthLXpfMC05QS1aXSpcKS4qLyAge2V4dGVybiB2b2lkIFwxICgp
OyBcMSAoKTt9L3AnDQohIA0KISBpbml0LmMuc3RhcnQ6DQohIAllY2hvLmV4ZSBNYWtpbmcgaW5p
dC5jDQohIAllY2hvLmV4ZSAtbyBpbml0LmMtdG1wICcvKiBEbyBub3QgbW9kaWZ5IHRoaXMgZmls
ZS4gICovJw0KISAJcmVkaXIgLW9hIGluaXQuYy10bXAgZWNoby5leGUgJy8qIEl0IGlzIGNyZWF0
ZWQgYXV0b21hdGljYWxseSBieSB0aGUgTWFrZWZpbGUuICAqLycNCiEgCXJlZGlyIC1vYSBpbml0
LmMtdG1wIGVjaG8uZXhlIHZvaWQgaW5pdGlhbGl6ZV9hbGxfZmlsZXMgKCkgew0KISANCiEgc3Rt
cC1pbml0YzogJChzdWJzdCAubywuYywkKE9CUykgJChUU09CUykpDQohIAkkKE1BS0UpIHN0bXAt
aW5pdGMuZm9yY2UNCiEgCXRvdWNoIHN0bXAtaW5pdGMNCiEgDQohIHN0bXAtaW5pdGMuZm9yY2U6
IGluaXQuYy5zdGFydCAkKHN1YnN0IC5vLC5fX18sJChPQlMpICQoVFNPQlMpKQ0KISAJcmVkaXIg
LW9hIGluaXQuYy10bXAgZWNoby5leGUgfQ0KISANCiEgaW5pdC5jOiBzdG1wLWluaXRjDQohIAl1
cGRhdGUgaW5pdC5jLXRtcCBpbml0LmMNCiEgDQpJbmRleDogZ2RiL2xhbmd1YWdlLmMNCmRpZmYg
LWMgZ2RiL2xhbmd1YWdlLmM6MS4xLjEuMSBnZGIvbGFuZ3VhZ2UuYzoxLjINCioqKiBnZGIvbGFu
Z3VhZ2UuYzoxLjEuMS4xCUZyaSBEZWMgMDQgMTA6NTE6MDQgMTk5OA0KLS0tIGdkYi9sYW5ndWFn
ZS5jCUZyaSBEZWMgMDQgMTE6MzE6NDIgMTk5OA0KKioqKioqKioqKioqKioqDQoqKiogNjUxLDY1
NiAqKioqDQotLS0gNjUxLDY1NyAtLS0tDQogICAgIHsNCiAgICAgY2FzZSBsYW5ndWFnZV9jOg0K
ICAgICBjYXNlIGxhbmd1YWdlX2NwbHVzOg0KKyAgICBjYXNlIGxhbmd1YWdlX3Bhc2NhbDoNCiAg
ICAgICAgcmV0dXJuIChUWVBFX0NPREUodHlwZSkgIT0gVFlQRV9DT0RFX0lOVCkgJiYNCiAgCSAo
VFlQRV9DT0RFKHR5cGUpICE9IFRZUEVfQ09ERV9FTlVNKSA/IDAgOiAxOw0KICAgICBjYXNlIGxh
bmd1YWdlX20yOg0KKioqKioqKioqKioqKioqDQoqKiogNjkyLDY5NyAqKioqDQotLS0gNjkzLDY5
OSAtLS0tDQogIA0KICAgICBjYXNlIGxhbmd1YWdlX2M6DQogICAgIGNhc2UgbGFuZ3VhZ2VfY3Bs
dXM6DQorICAgIGNhc2UgbGFuZ3VhZ2VfcGFzY2FsOg0KICAgICAgICByZXR1cm4gKFRZUEVfQ09E
RSh0eXBlKSA9PSBUWVBFX0NPREVfSU5UKSAmJg0KICAJIFRZUEVfTEVOR1RIKHR5cGUpID09IHNp
emVvZihjaGFyKQ0KICAJID8gMSA6IDA7DQoqKioqKioqKioqKioqKioNCioqKiA3MTAsNzE1ICoq
KioNCi0tLSA3MTIsNzE4IC0tLS0NCiAgICAgew0KICAgICBjYXNlIGxhbmd1YWdlX2NoaWxsOg0K
ICAgICBjYXNlIGxhbmd1YWdlX20yOg0KKyAgICBjYXNlIGxhbmd1YWdlX3Bhc2NhbDoNCiAgICAg
ICAgcmV0dXJuIFRZUEVfQ09ERSh0eXBlKSAhPSBUWVBFX0NPREVfU1RSSU5HID8gMCA6IDE7DQog
IA0KICAgICBjYXNlIGxhbmd1YWdlX2M6DQoqKioqKioqKioqKioqKioNCioqKiA3MzMsNzM4ICoq
KioNCi0tLSA3MzYsNzQyIC0tLS0NCiAgICAgIHsNCiAgICAgIGNhc2UgbGFuZ3VhZ2VfYzoNCiAg
ICAgIGNhc2UgbGFuZ3VhZ2VfY3BsdXM6DQorICAgICBjYXNlIGxhbmd1YWdlX3Bhc2NhbDoNCiAg
ICAgICAgLyogTWlnaHQgYmUgbW9yZSBjbGVhbmx5IGhhbmRsZWQgYnkgaGF2aW5nIGEgVFlQRV9D
T0RFX0lOVF9OT1RfQk9PTA0KICAJIGZvciBDSElMTCBhbmQgc3VjaCBsYW5ndWFnZXMsIG9yIGEg
VFlQRV9DT0RFX0lOVF9PUl9CT09MIGZvciBDLiAgKi8NCiAgICAgICAgaWYgKFRZUEVfQ09ERSAo
dHlwZSkgPT0gVFlQRV9DT0RFX0lOVCkNCioqKioqKioqKioqKioqKg0KKioqIDc3NCw3NzkgKioq
Kg0KLS0tIDc3OCw3ODggLS0tLQ0KICAgICAgICByZXR1cm4gKFRZUEVfQ09ERSh0eXBlKSA9PSBU
WVBFX0NPREVfU1RSVUNUKSB8fA0KICAJIChUWVBFX0NPREUodHlwZSkgPT0gVFlQRV9DT0RFX1VO
SU9OKSB8fA0KICAJICAgIChUWVBFX0NPREUodHlwZSkgPT0gVFlQRV9DT0RFX0FSUkFZKTsNCisg
ICAgY2FzZSBsYW5ndWFnZV9wYXNjYWw6DQorICAgICAgIHJldHVybiAoVFlQRV9DT0RFKHR5cGUp
ID09IFRZUEVfQ09ERV9TVFJVQ1QpIHx8DQorIAkgKFRZUEVfQ09ERSh0eXBlKSA9PSBUWVBFX0NP
REVfVU5JT04pIHx8DQorIAkgKFRZUEVfQ09ERSh0eXBlKSA9PSBUWVBFX0NPREVfU0VUKSB8fA0K
KyAJICAgIChUWVBFX0NPREUodHlwZSkgPT0gVFlQRV9DT0RFX0FSUkFZKTsNCiAgICAgY2FzZSBs
YW5ndWFnZV9tMjoNCiAgICAgICAgcmV0dXJuIChUWVBFX0NPREUodHlwZSkgPT0gVFlQRV9DT0RF
X1NUUlVDVCkgfHwNCiAgCSAoVFlQRV9DT0RFKHR5cGUpID09IFRZUEVfQ09ERV9TRVQpIHx8DQoq
KioqKioqKioqKioqKioNCioqKiA4MDUsODExICoqKioNCiAgCX0NCiAgICAgICAgcmV0dXJuIGJ1
aWx0aW5fdHlwZV9mX2xvZ2ljYWxfczI7DQogICAgICBjYXNlIGxhbmd1YWdlX2NwbHVzOg0KISAg
ICAgICBzeW0gPSBsb29rdXBfc3ltYm9sICgiYm9vbCIsIE5VTEwsIFZBUl9OQU1FU1BBQ0UsIE5V
TEwsIE5VTEwpOw0KICAgICAgICBpZiAoc3ltKQ0KICAJew0KICAJICB0eXBlID0gU1lNQk9MX1RZ
UEUgKHN5bSk7DQotLS0gODE0LDgyNCAtLS0tDQogIAl9DQogICAgICAgIHJldHVybiBidWlsdGlu
X3R5cGVfZl9sb2dpY2FsX3MyOw0KICAgICAgY2FzZSBsYW5ndWFnZV9jcGx1czoNCiEgICAgIGNh
c2UgbGFuZ3VhZ2VfcGFzY2FsOg0KISAgICAgICBpZiAoY3VycmVudF9sYW5ndWFnZS0+bGFfbGFu
Z3VhZ2U9PWxhbmd1YWdlX2NwbHVzKQ0KISAgICAgICAgIHtzeW0gPSBsb29rdXBfc3ltYm9sICgi
Ym9vbCIsIE5VTEwsIFZBUl9OQU1FU1BBQ0UsIE5VTEwsIE5VTEwpO30NCiEgICAgICAgZWxzZQ0K
ISAgICAgICAgIHtzeW0gPSBsb29rdXBfc3ltYm9sICgiYm9vbGVhbiIsIE5VTEwsIFZBUl9OQU1F
U1BBQ0UsIE5VTEwsIE5VTEwpO30NCiAgICAgICAgaWYgKHN5bSkNCiAgCXsNCiAgCSAgdHlwZSA9
IFNZTUJPTF9UWVBFIChzeW0pOw0KKioqKioqKioqKioqKioqDQoqKiogOTg2LDk5MSAqKioqDQot
LS0gOTk5LDEwMTkgLS0tLQ0KICANCiAgI2lmZGVmIF9MQU5HX20yDQogICAgICAgIGNhc2UgbGFu
Z3VhZ2VfbTI6DQorIAkgc3dpdGNoKG9wKQ0KKyAJIHsNCisgCSBjYXNlIEJJTk9QX0RJVjoNCisg
CSAgICBpZiAoIWZsb2F0X3R5cGUodDEpIHx8ICFmbG9hdF90eXBlKHQyKSkNCisgCSAgICAgICB0
eXBlX29wX2Vycm9yICgiQXJndW1lbnRzIHRvICVzIG11c3QgYmUgZmxvYXRpbmcgcG9pbnQgbnVt
YmVycy4iLG9wKTsNCisgCSAgICBicmVhazsNCisgCSBjYXNlIEJJTk9QX0lOVERJVjoNCisgCSAg
ICBpZiAoIWludGVncmFsX3R5cGUodDEpIHx8ICFpbnRlZ3JhbF90eXBlKHQyKSkNCisgCSAgICAg
ICB0eXBlX29wX2Vycm9yICgiQXJndW1lbnRzIHRvICVzIG11c3QgYmUgb2YgaW50ZWdyYWwgdHlw
ZS4iLG9wKTsNCisgCSAgICBicmVhazsNCisgCSB9DQorICNlbmRpZg0KKyANCisgI2lmZGVmIF9M
QU5HX3Bhc2NhbA0KKyAgICAgICBjYXNlIGxhbmd1YWdlX3Bhc2NhbDoNCiAgCSBzd2l0Y2gob3Ap
DQogIAkgew0KICAJIGNhc2UgQklOT1BfRElWOg0KSW5kZXg6IGdkYi9sYW5ndWFnZS5oDQpkaWZm
IC1jIGdkYi9sYW5ndWFnZS5oOjEuMS4xLjEgZ2RiL2xhbmd1YWdlLmg6MS4yDQoqKiogZ2RiL2xh
bmd1YWdlLmg6MS4xLjEuMQlGcmkgRGVjIDA0IDEwOjUxOjA0IDE5OTgNCi0tLSBnZGIvbGFuZ3Vh
Z2UuaAlGcmkgRGVjIDA0IDExOjMxOjQyIDE5OTgNCioqKioqKioqKioqKioqKg0KKioqIDM2LDQx
ICoqKioNCi0tLSAzNiw0MiAtLS0tDQogICNkZWZpbmUJX0xBTkdfbTINCiAgI2RlZmluZQlfTEFO
R19jaGlsbA0KICAjZGVmaW5lIF9MQU5HX2ZvcnRyYW4NCisgI2RlZmluZSBfTEFOR19wYXNjYWwN
CiAgDQogICNkZWZpbmUgTUFYX0ZPUlRSQU5fRElNUyAgNyAgIC8qIE1heGltdW0gbnVtYmVyIG9m
IEY3NyBhcnJheSBkaW1zICovIA0KICANCkluZGV4OiBnZGIvbGliZ2RiLWYNCmRpZmYgLWMgZ2Ri
L2xpYmdkYi1mOjEuMS4xLjEgZ2RiL2xpYmdkYi1mOjEuMg0KKioqIGdkYi9saWJnZGItZjoxLjEu
MS4xCUZyaSBEZWMgMDQgMTA6NTE6MDQgMTk5OA0KLS0tIGdkYi9saWJnZGItZglXZWQgRGVjIDIz
IDE2OjUzOjA2IDE5OTgNCioqKioqKioqKioqKioqKg0KKioqIDEgKioqKg0KISB2ZXJzaW9uLm8g
YmxvY2tmcmFtZS5vIGJyZWFrcG9pbnQubyBmaW5kdmFyLm8gc3RhY2subyB0aHJlYWQubyBzb3Vy
Y2UubyB2YWx1ZXMubyBldmFsLm8gdmFsb3BzLm8gdmFsYXJpdGgubyB2YWxwcmludC5vIHByaW50
Y21kLm8gc3ltdGFiLm8gc3ltZmlsZS5vIHN5bW1pc2MubyBpbmZjbWQubyBpbmZydW4ubyBjb21t
YW5kLm8gZXhwcHJpbnQubyBlbnZpcm9uLm8gZ2RidHlwZXMubyBjb3B5aW5nLm8gaTM4Ni10ZGVw
Lm8gaTM4Ny10ZGVwLm8gZ28zMnRhcmdldC5vIHNlci1nbzMyLm8gcmVtb3RlLm8gZGNhY2hlLm8g
cmVtb3RlLXV0aWxzLm8gbWVtLWJyZWFrLm8gdGFyZ2V0Lm8gcGFyc2UubyBsYW5ndWFnZS5vIGMt
ZXhwX3RhYi5vIGYtZXhwX3RhYi5vIG0yLWV4cF90YWIubyBidWlsZHN5bS5vIGV4ZWMubyBiY2Fj
aGUubyBvYmpmaWxlcy5vIG1pbnN5bXMubyBtYWludC5vIGRlbWFuZ2xlLm8gZGJ4cmVhZC5vIGNv
ZmZyZWFkLm8gZWxmcmVhZC5vIGR3YXJmcmVhZC5vIG1pcHNyZWFkLm8gc3RhYnNyZWFkLm8gY29y
ZWZpbGUubyBjLWxhbmcubyBjaC1leHAubyBjaC1sYW5nLm8gZi1sYW5nLm8gbTItbGFuZy5vIHNj
bS1leHAubyBzY20tbGFuZy5vIHNjbS12YWxwcmludC5vIGNvbXBsYWludHMubyB0eXBlcHJpbnQu
byBjLXR5cGVwcmludC5vIGNoLXR5cGVwcmludC5vIGYtdHlwZXByaW50Lm8gbTItdHlwZXByaW50
Lm8gYy12YWxwcmludC5vIGNwLXZhbHByaW50Lm8gY2gtdmFscHJpbnQubyBmLXZhbHByaW50Lm8g
bTItdmFscHJpbnQubyBubG1yZWFkLm8gc2VyaWFsLm8gbWRlYnVncmVhZC5vIG9zOWtyZWFkLm8g
dG9wLm8gdXRpbHMubyBjYWxsYmFjay5vIGluZmxvdy5vIGdudS1yZWdleC5vIC4uL2JmZC9saWJi
ZmQuYSAuLi9yZWFkbGluZS9saWJyZWFkbGluZS5hIC4uL29wY29kZXMvbGlib3Bjb2Rlcy5hIC4u
L2xpYmliZXJ0eS9saWJpYmVydHkuYSBpbml0Lm8NDQotLS0gMSAtLS0tDQohIHZlcnNpb24ubyBi
bG9ja2ZyYW1lLm8gYnJlYWtwb2ludC5vIGZpbmR2YXIubyBzdGFjay5vIHRocmVhZC5vIHNvdXJj
ZS5vIHZhbHVlcy5vIGV2YWwubyB2YWxvcHMubyB2YWxhcml0aC5vIHZhbHByaW50Lm8gcHJpbnRj
bWQubyBzeW10YWIubyBzeW1maWxlLm8gc3ltbWlzYy5vIGluZmNtZC5vIGluZnJ1bi5vIGNvbW1h
bmQubyBleHBwcmludC5vIGVudmlyb24ubyBnZGJ0eXBlcy5vIGNvcHlpbmcubyBpMzg2LXRkZXAu
byBpMzg3LXRkZXAubyBnbzMydGFyZ2V0Lm8gc2VyLWdvMzIubyByZW1vdGUubyBkY2FjaGUubyBy
ZW1vdGUtdXRpbHMubyBtZW0tYnJlYWsubyB0YXJnZXQubyBwYXJzZS5vIGxhbmd1YWdlLm8gYy1l
eHBfdGFiLm8gZi1leHBfdGFiLm8gbTItZXhwX3RhYi5vIHAtZXhwX3RhYi5vIGJ1aWxkc3ltLm8g
ZXhlYy5vIGJjYWNoZS5vIG9iamZpbGVzLm8gbWluc3ltcy5vIG1haW50Lm8gZGVtYW5nbGUubyBk
YnhyZWFkLm8gY29mZnJlYWQubyBlbGZyZWFkLm8gZHdhcmZyZWFkLm8gbWlwc3JlYWQubyBzdGFi
c3JlYWQubyBjb3JlZmlsZS5vIGMtbGFuZy5vIGNoLWV4cC5vIGNoLWxhbmcubyBmLWxhbmcubyBt
Mi1sYW5nLm8gc2NtLWV4cC5vIHNjbS1sYW5nLm8gc2NtLXZhbHByaW50Lm8gY29tcGxhaW50cy5v
IHR5cGVwcmludC5vIGMtdHlwZXByaW50Lm8gY2gtdHlwZXByaW50Lm8gZi10eXBlcHJpbnQubyBt
Mi10eXBlcHJpbnQubyBjLXZhbHByaW50Lm8gY3AtdmFscHJpbnQubyBjaC12YWxwcmludC5vIGYt
dmFscHJpbnQubyBtMi12YWxwcmludC5vIG5sbXJlYWQubyBzZXJpYWwubyBtZGVidWdyZWFkLm8g
b3M5a3JlYWQubyB0b3AubyB1dGlscy5vIGNhbGxiYWNrLm8gcC1sYW5nLm8gcC12YWxwcmludC5v
IHAtdHlwZXByaW50Lm8gaW5mbG93Lm8gZ251LXJlZ2V4Lm8gLi4vYmZkL2xpYmJmZC5hIC4uL3Jl
YWRsaW5lL2xpYnJlYWRsaW5lLmEgLi4vb3Bjb2Rlcy9saWJvcGNvZGVzLmEgLi4vbGliaWJlcnR5
L2xpYmliZXJ0eS5hIGluaXQubw0KSW5kZXg6IGdkYi9tYWtlZmlsZQ0KZGlmZiAtYyBnZGIvbWFr
ZWZpbGU6MS4xLjEuMSBnZGIvbWFrZWZpbGU6MS4zDQoqKiogZ2RiL21ha2VmaWxlOjEuMS4xLjEJ
RnJpIERlYyAwNCAxMDo1MTowNiAxOTk4DQotLS0gZ2RiL21ha2VmaWxlCVdlZCBEZWMgMjMgMTY6
NTM6MDYgMTk5OA0KKioqKioqKioqKioqKioqDQoqKiogMSwzICoqKioNCi0tLSAxLDUgLS0tLQ0K
KyAjICRJZDogbWFrZWZpbGUsdiAxLjMgMTk5OC8xMi8yMyAxNTo1MzowNiBQaWVycmUgRXhwICQN
CisgIyBtb2RpZmllZCBmb3IgRlBDDQogICMgICAgICAgVGhpcyBtYWtlZmlsZSBpcyBkZXNpZ25l
ZCBmb3IgREpHUFANCiAgU1JDRElSPS4NCiAgIyBDb3B5cmlnaHQgMTk4OSwgMTk5MCwgMTk5MSwg
MTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5Ng0KKioqKioqKioqKioqKioqDQoqKiogMTQwLDE0
NiAqKioqDQogICMgSXQgaXMgYWxzbyBwb3NzaWJsZSB0aGF0IHlvdSB3aWxsIG5lZWQgdG8gYWRk
IC1JL3Vzci9pbmNsdWRlL3N5cyBpZg0KICAjIHlvdXIgc3lzdGVtIGRvZXNuJ3QgaGF2ZSBmY250
bC5oIGluIC91c3IvaW5jbHVkZSAod2hpY2ggaXMgd2hlcmUgaXQNCiAgIyBzaG91bGQgYmUgYWNj
b3JkaW5nIHRvIFBvc2l4KS4NCiEgREVGUyA9IA0KICBHREJfQ0ZMQUdTID0gLUkuIC1JJChzcmNk
aXIpIC1JJChzcmNkaXIpL2NvbmZpZyAkKERFRlMpDQogIA0KICAjIE17SCxUfV9DRkxBR1MsIGlm
IGRlZmluZWQsIGhhdmUgaG9zdC0gYW5kIHRhcmdldC1kZXBlbmRlbnQgQ0ZMQUdTDQotLS0gMTQy
LDE0OCAtLS0tDQogICMgSXQgaXMgYWxzbyBwb3NzaWJsZSB0aGF0IHlvdSB3aWxsIG5lZWQgdG8g
YWRkIC1JL3Vzci9pbmNsdWRlL3N5cyBpZg0KICAjIHlvdXIgc3lzdGVtIGRvZXNuJ3QgaGF2ZSBm
Y250bC5oIGluIC91c3IvaW5jbHVkZSAod2hpY2ggaXMgd2hlcmUgaXQNCiAgIyBzaG91bGQgYmUg
YWNjb3JkaW5nIHRvIFBvc2l4KS4NCiEgREVGUyA9IC1Eb3RoZXJfc2VsDQogIEdEQl9DRkxBR1Mg
PSAtSS4gLUkkKHNyY2RpcikgLUkkKHNyY2RpcikvY29uZmlnICQoREVGUykNCiAgDQogICMgTXtI
LFR9X0NGTEFHUywgaWYgZGVmaW5lZCwgaGF2ZSBob3N0LSBhbmQgdGFyZ2V0LWRlcGVuZGVudCBD
RkxBR1MNCioqKioqKioqKioqKioqKg0KKioqIDE1MCwxNTYgKioqKg0KICANCiAgIyBDRkxBR1Mg
aXMgc3BlY2lmaWNhbGx5IHJlc2VydmVkIGZvciBzZXR0aW5nIGZyb20gdGhlIGNvbW1hbmQgbGlu
ZQ0KICAjIHdoZW4gcnVubmluZyBtYWtlLiAgSS5FLiAgIm1ha2UgQ0ZMQUdTPS1XbWlzc2luZy1w
cm90b3R5cGVzIi4NCiEgQ0ZMQUdTID0gLWcNCiAgDQogICMgTmVlZCB0byBwYXNzIHRoaXMgdG8g
dGVzdHN1aXRlIGZvciAibWFrZSBjaGVjayIuICBQcm9iYWJseSBzaG91bGQgYmUNCiAgIyBjb25z
aXN0ZW50IHdpdGggdG9wLWxldmVsIE1ha2VmaWxlLmluIGFuZCBnZGIvdGVzdHN1aXRlL01ha2Vm
aWxlLmluDQotLS0gMTUyLDE1OCAtLS0tDQogIA0KICAjIENGTEFHUyBpcyBzcGVjaWZpY2FsbHkg
cmVzZXJ2ZWQgZm9yIHNldHRpbmcgZnJvbSB0aGUgY29tbWFuZCBsaW5lDQogICMgd2hlbiBydW5u
aW5nIG1ha2UuICBJLkUuICAibWFrZSBDRkxBR1M9LVdtaXNzaW5nLXByb3RvdHlwZXMiLg0KISBD
RkxBR1MgPSAtZ3N0YWJzDQogIA0KICAjIE5lZWQgdG8gcGFzcyB0aGlzIHRvIHRlc3RzdWl0ZSBm
b3IgIm1ha2UgY2hlY2siLiAgUHJvYmFibHkgc2hvdWxkIGJlDQogICMgY29uc2lzdGVudCB3aXRo
IHRvcC1sZXZlbCBNYWtlZmlsZS5pbiBhbmQgZ2RiL3Rlc3RzdWl0ZS9NYWtlZmlsZS5pbg0KKioq
KioqKioqKioqKioqDQoqKiogMjM1LDI0NCAqKioqDQotLS0gMjM3LDI0OSAtLS0tDQogIENFWFBU
QUI9Yy1leHBfdGFiDQogIEZFWFBUQUI9Zi1leHBfdGFiDQogIE0yRVhQVEFCPW0yLWV4cF90YWIN
CisgUEVYUFRBQj1wLWV4cF90YWINCiAgZWxzZQ0KICBDRVhQVEFCPWMtZXhwLnRhYg0KICBGRVhQ
VEFCPWYtZXhwLnRhYg0KICBNMkVYUFRBQj1tMi1leHAudGFiDQorIA0KKyBQRVhQVEFCPXAtZXhw
LnRhYg0KICBlbmRpZg0KICANCiAgRkxBR1NfVE9fUEFTUyA9IFwNCioqKioqKioqKioqKioqKg0K
KioqIDQ2OCw0NzQgKioqKg0KICAJc2NtLWV4cC5vIHNjbS1sYW5nLm8gc2NtLXZhbHByaW50Lm8g
Y29tcGxhaW50cy5vIHR5cGVwcmludC5vIFwNCiAgCWMtdHlwZXByaW50Lm8gY2gtdHlwZXByaW50
Lm8gZi10eXBlcHJpbnQubyBtMi10eXBlcHJpbnQubyBcDQogIAljLXZhbHByaW50Lm8gY3AtdmFs
cHJpbnQubyBjaC12YWxwcmludC5vIGYtdmFscHJpbnQubyBtMi12YWxwcmludC5vIFwNCiEgCW5s
bXJlYWQubyBzZXJpYWwubyBtZGVidWdyZWFkLm8gb3M5a3JlYWQubyB0b3AubyB1dGlscy5vIGNh
bGxiYWNrLm8NCiAgDQogIE9CUyA9ICQoQ09NTU9OX09CUykgJChBTk5PVEFURV9PQlMpIG1haW4u
bw0KICANCi0tLSA0NzMsNDgwIC0tLS0NCiAgCXNjbS1leHAubyBzY20tbGFuZy5vIHNjbS12YWxw
cmludC5vIGNvbXBsYWludHMubyB0eXBlcHJpbnQubyBcDQogIAljLXR5cGVwcmludC5vIGNoLXR5
cGVwcmludC5vIGYtdHlwZXByaW50Lm8gbTItdHlwZXByaW50Lm8gXA0KICAJYy12YWxwcmludC5v
IGNwLXZhbHByaW50Lm8gY2gtdmFscHJpbnQubyBmLXZhbHByaW50Lm8gbTItdmFscHJpbnQubyBc
DQohIAlubG1yZWFkLm8gc2VyaWFsLm8gbWRlYnVncmVhZC5vIG9zOWtyZWFkLm8gdG9wLm8gdXRp
bHMubyBjYWxsYmFjay5vIFwNCiEgCXAtbGFuZy5vIHAtdmFscHJpbnQubyBwLXR5cGVwcmludC5v
DQogIA0KICBPQlMgPSAkKENPTU1PTl9PQlMpICQoQU5OT1RBVEVfT0JTKSBtYWluLm8NCiAgDQoq
KioqKioqKioqKioqKioNCioqKiA0ODMsNDkwICoqKioNCiAgU1VCRElSUz1kb2MNCiAgDQogICMg
Rm9yIG5vdywgc2hvcnRjdXQgdGhlICJjb25maWd1cmUgR0RCIGZvciBmZXdlciBsYW5ndWFnZXMi
IHN0dWZmLg0KISBZWUZJTEVTID0gJChDRVhQVEFCKS5jICQoRkVYUFRBQikuYyAkKE0yRVhQVEFC
KS5jDQohIFlZT0JKID0gJChDRVhQVEFCKS5vICQoRkVYUFRBQikubyAkKE0yRVhQVEFCKS5vDQog
IA0KICAjIFRoaW5ncyB3aGljaCBuZWVkIHRvIGJlIGJ1aWx0IHdoZW4gbWFraW5nIGEgZGlzdHJp
YnV0aW9uLg0KICANCi0tLSA0ODksNDk2IC0tLS0NCiAgU1VCRElSUz1kb2MNCiAgDQogICMgRm9y
IG5vdywgc2hvcnRjdXQgdGhlICJjb25maWd1cmUgR0RCIGZvciBmZXdlciBsYW5ndWFnZXMiIHN0
dWZmLg0KISBZWUZJTEVTID0gJChDRVhQVEFCKS5jICQoRkVYUFRBQikuYyAkKE0yRVhQVEFCKS5j
ICQoUEVYUFRBQikuYw0KISBZWU9CSiA9ICQoQ0VYUFRBQikubyAkKEZFWFBUQUIpLm8gJChNMkVY
UFRBQikubyAkKFBFWFBUQUIpLm8NCiAgDQogICMgVGhpbmdzIHdoaWNoIG5lZWQgdG8gYmUgYnVp
bHQgd2hlbiBtYWtpbmcgYSBkaXN0cmlidXRpb24uDQogIA0KKioqKioqKioqKioqKioqDQoqKiog
NDk0LDUwMSAqKioqDQogICMgVEFSR0VUX0FSQ0ggdG8gbm90aGluZyB3b3JrcyBmb3IgU3VuT1Mg
MywgNC4wLCBidXQgbm90IGZvciA0LjEuDQogIC5jLm86DQogIAkkKENDKSAtYyAkKElOVEVSTkFM
X0NGTEFHUykgJDwNCiAgDQohIGFsbDogZ2RiDQogIA0KICBpbnN0YWxsY2hlY2s6DQogIA0KLS0t
IDUwMCw1MTAgLS0tLQ0KICAjIFRBUkdFVF9BUkNIIHRvIG5vdGhpbmcgd29ya3MgZm9yIFN1bk9T
IDMsIDQuMCwgYnV0IG5vdCBmb3IgNC4xLg0KICAuYy5vOg0KICAJJChDQykgLWMgJChJTlRFUk5B
TF9DRkxBR1MpICQ8DQorIA0KKyAuYy5TOg0KKyAJJChDQykgLVMgJChJTlRFUk5BTF9DRkxBR1Mp
ICQ8DQogIA0KISBhbGw6IGdkYnBhcw0KICANCiAgaW5zdGFsbGNoZWNrOg0KICANCioqKioqKioq
KioqKioqKg0KKioqIDU1OSw1ODMgKioqKg0KICANCiAgDQogICUuX19fOiAlLmMNCiEgCXJlZGly
IC1pICQ8IC1vYSBpbml0LmMtdG1wIFwNCiAgCSAgc2VkIC1uIC1lICcvXl9pbml0aWFsaXplX1th
LXpfMC05QS1aXSogKigvcy9eXChbYS16XzAtOUEtWl0qXCkuKi8gIHtleHRlcm4gdm9pZCBcMSAo
KTsgXDEgKCk7fS9wJw0KICANCiAgaW5pdC5jLnN0YXJ0Og0KISAJZWNoby5leGUgTWFraW5nIGlu
aXQuYw0KISAJZWNoby5leGUgLW8gaW5pdC5jLXRtcCAnLyogRG8gbm90IG1vZGlmeSB0aGlzIGZp
bGUuICAqLycNCiEgCXJlZGlyIC1vYSBpbml0LmMtdG1wIGVjaG8uZXhlICcvKiBJdCBpcyBjcmVh
dGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIE1ha2VmaWxlLiAgKi8nDQohIAlyZWRpciAtb2EgaW5p
dC5jLXRtcCBlY2hvLmV4ZSB2b2lkIGluaXRpYWxpemVfYWxsX2ZpbGVzICgpIHsNCiAgDQogIHN0
bXAtaW5pdGM6ICQoc3Vic3QgLm8sLmMsJChPQlMpICQoVFNPQlMpKQ0KICAJJChNQUtFKSBzdG1w
LWluaXRjLmZvcmNlDQogIAl0b3VjaCBzdG1wLWluaXRjDQogIA0KICBzdG1wLWluaXRjLmZvcmNl
OiBpbml0LmMuc3RhcnQgJChzdWJzdCAubywuX19fLCQoT0JTKSAkKFRTT0JTKSkNCiEgCXJlZGly
IC1vYSBpbml0LmMtdG1wIGVjaG8uZXhlIH0NCiAgDQogIGluaXQuYzogc3RtcC1pbml0Yw0KICAJ
dXBkYXRlIGluaXQuYy10bXAgaW5pdC5jDQogIA0KICAuUFJFQ0lPVVM6IGluaXQuYw0KICANCiAg
IyBSZW1vdmluZyB0aGUgb2xkIGdkYiBmaXJzdCB3b3JrcyBiZXR0ZXIgaWYgaXQgaXMgcnVubmlu
ZywgYXQgbGVhc3Qgb24gU3VuT1MuDQotLS0gNTY4LDU5NiAtLS0tDQogIA0KICANCiAgJS5fX186
ICUuYw0KISAJcmVkaXIuZXhlIC1pICQ8IC1vYSBpbml0LmMtdG1wIFwNCiAgCSAgc2VkIC1uIC1l
ICcvXl9pbml0aWFsaXplX1thLXpfMC05QS1aXSogKigvcy9eXChbYS16XzAtOUEtWl0qXCkuKi8g
IHtleHRlcm4gdm9pZCBcMSAoKTsgXDEgKCk7fS9wJw0KICANCiAgaW5pdC5jLnN0YXJ0Og0KISAJ
Z2VjaG8uZXhlIE1ha2luZyBpbml0LmMNCiEgCS1ybSBpbml0LmMtdG1wDQohIAktcm0gaW5pdC5j
LXQNCiEgCWVjaG8gLW8gaW5pdC5jLXRtcCAnLyogRG8gbm90IG1vZGlmeSB0aGlzIGZpbGUuICAq
LycNCiEgCXJlZGlyLmV4ZSAtb2EgaW5pdC5jLXRtcCBnZWNoby5leGUgJy8qIEl0IGlzIGNyZWF0
ZWQgYXV0b21hdGljYWxseSBieSB0aGUgTWFrZWZpbGUuICAqLycNCiEgCXJlZGlyLmV4ZSAtb2Eg
aW5pdC5jLXRtcCBnZWNoby5leGUgdm9pZCBpbml0aWFsaXplX2FsbF9maWxlcyAoKSB7DQogIA0K
ICBzdG1wLWluaXRjOiAkKHN1YnN0IC5vLC5jLCQoT0JTKSAkKFRTT0JTKSkNCiAgCSQoTUFLRSkg
c3RtcC1pbml0Yy5mb3JjZQ0KICAJdG91Y2ggc3RtcC1pbml0Yw0KICANCiAgc3RtcC1pbml0Yy5m
b3JjZTogaW5pdC5jLnN0YXJ0ICQoc3Vic3QgLm8sLl9fXywkKE9CUykgJChUU09CUykpDQohIAly
ZWRpci5leGUgLW9hIGluaXQuYy10bXAgZ2VjaG8uZXhlIH0NCiAgDQogIGluaXQuYzogc3RtcC1p
bml0Yw0KICAJdXBkYXRlIGluaXQuYy10bXAgaW5pdC5jDQogIA0KKyBpbml0Lm8gOiBpbml0LmMN
CisgDQogIC5QUkVDSU9VUzogaW5pdC5jDQogIA0KICAjIFJlbW92aW5nIHRoZSBvbGQgZ2RiIGZp
cnN0IHdvcmtzIGJldHRlciBpZiBpdCBpcyBydW5uaW5nLCBhdCBsZWFzdCBvbiBTdW5PUy4NCioq
KioqKioqKioqKioqKg0KKioqIDYwMyw2MTcgKioqKg0KICAgICQoQUREX0RFUFMpICQoQ0RFUFMp
IGluaXQubw0KICANCiAgbGliZ2RiLWZpbGVzOiAkKExJQkdEQkRFUFMpIE1ha2VmaWxlLmluDQoh
IAllY2hvLmV4ZSAtbyBsaWJnZGItZmlsZXMgJChMSUJHREJGSUxFUykNCiAgDQogIHNhYmVyX2dk
YjogJChTRklMRVMpICQoREVQRklMRVMpIENPUFlJTkcuYyB2ZXJzaW9uLmMNCiAgCSNzZXRvcHQg
bG9hZF9mbGFncyAkKENGTEFHUykgJChCRkRfQ0ZMQUdTKSAtREhPU1RfU1lTPVNVTjRfU1lTDQog
IAkjbG9hZCAuL2luaXQuYyAkKFNGSUxFUykNCiEgCSN1bmxvYWQgJChzcmNkaXIpL2MtZXhwLnkg
JChzcmNkaXIpL20yLWV4cC55DQogIAkjdW5sb2FkIHZ4LXNoYXJlLyouaA0KICAJI3VubG9hZCBu
aW5keS1zaGFyZS9bQS1aXSoNCiEgCSNsb2FkICQoQ0VYUFRBQikuYyAkKE0yRVhQVEFCKS5jDQog
IAkjbG9hZCBDT1BZSU5HLmMgdmVyc2lvbi5jDQogIAkjbG9hZCAuLi9vcGNvZGVzL2xpYm9wY29k
ZXMuYQ0KICAJI2xvYWQgLi4vbGliaWJlcnR5L2xpYmliZXJ0eS5hDQotLS0gNjE2LDYzMCAtLS0t
DQogICAgJChBRERfREVQUykgJChDREVQUykgaW5pdC5vDQogIA0KICBsaWJnZGItZmlsZXM6ICQo
TElCR0RCREVQUykgTWFrZWZpbGUuaW4NCiEgCWdlY2hvLmV4ZSAtbyBsaWJnZGItZmlsZXMgJChM
SUJHREJGSUxFUykNCiAgDQogIHNhYmVyX2dkYjogJChTRklMRVMpICQoREVQRklMRVMpIENPUFlJ
TkcuYyB2ZXJzaW9uLmMNCiAgCSNzZXRvcHQgbG9hZF9mbGFncyAkKENGTEFHUykgJChCRkRfQ0ZM
QUdTKSAtREhPU1RfU1lTPVNVTjRfU1lTDQogIAkjbG9hZCAuL2luaXQuYyAkKFNGSUxFUykNCiEg
ICAgICAgICAjdW5sb2FkICQoc3JjZGlyKS9jLWV4cC55ICQoc3JjZGlyKS9tMi1leHAueSAkKHNy
Y19kaXIpL3AtZXhwLnkNCiAgCSN1bmxvYWQgdngtc2hhcmUvKi5oDQogIAkjdW5sb2FkIG5pbmR5
LXNoYXJlL1tBLVpdKg0KISAJI2xvYWQgJChDRVhQVEFCKS5jICQoTTJFWFBUQUIpLmMgJChQRVhQ
VEFCKS5jDQogIAkjbG9hZCBDT1BZSU5HLmMgdmVyc2lvbi5jDQogIAkjbG9hZCAuLi9vcGNvZGVz
L2xpYm9wY29kZXMuYQ0KICAJI2xvYWQgLi4vbGliaWJlcnR5L2xpYmliZXJ0eS5hDQoqKioqKioq
KioqKioqKioNCioqKiA3MTUsNzIxICoqKioNCiAgCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50
ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZTsiDQogIAlAZWNobyAiaXQgZGVsZXRlcyBmaWxl
cyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iDQogIAlAJChNQUtF
KSAkKEZMQUdTX1RPX1BBU1MpIERPPW1haW50YWluZXItY2xlYW4gJ0RPRElSUz0kKFNVQkRJUlMp
JyBzdWJkaXJfZG8NCiEgCXJtIC1mICQoQ0VYUFRBQikuYyAkKEZFWFBUQUIpLmMgJChNMkVYUFRB
QikuYw0KICAJcm0gLWYgVEFHUyAkKElORk9GSUxFUykNCiAgCXJtIC1mIG5tLmggdG0uaCB4bS5o
IGNvbmZpZy5zdGF0dXMNCiAgCXJtIC1mIHkub3V0cHV0IHlhY2MuYWN0cyB5YWNjLnRtcA0KLS0t
IDcyOCw3MzQgLS0tLQ0KICAJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFp
bnRhaW5lcnMgdG8gdXNlOyINCiAgCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJl
cXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiINCiAgCUAkKE1BS0UpICQoRkxBR1NfVE9f
UEFTUykgRE89bWFpbnRhaW5lci1jbGVhbiAnRE9ESVJTPSQoU1VCRElSUyknIHN1YmRpcl9kbw0K
ISAJcm0gLWYgJChDRVhQVEFCKS5jICQoRkVYUFRBQikuYyAkKE0yRVhQVEFCKS5jICQoUEVYUFRB
QikuYw0KICAJcm0gLWYgVEFHUyAkKElORk9GSUxFUykNCiAgCXJtIC1mIG5tLmggdG0uaCB4bS5o
IGNvbmZpZy5zdGF0dXMNCiAgCXJtIC1mIHkub3V0cHV0IHlhY2MuYWN0cyB5YWNjLnRtcA0KKioq
KioqKioqKioqKioqDQoqKiogNzM0LDc0MCAqKioqDQogIA0KICBjb25maWcuaDogc3RhbXAtaCAN
CiAgc3RhbXAtaDogY29uZmlnLmluIGNvbmZpZy5zdGF0dXMgY29uZmlnLnNlZA0KISAJcmVkaXIg
LW8gY29uZmlnLmgtbmV3IHNlZCAtZiBjb25maWcuc2VkICQoc3JjZGlyKS9jb25maWcuaW4NCiAg
CXVwZGF0ZSBjb25maWcuaC1uZXcgY29uZmlnLmgNCiAgCXRvdWNoIHN0YW1wLWgNCiAgDQotLS0g
NzQ3LDc1MyAtLS0tDQogIA0KICBjb25maWcuaDogc3RhbXAtaCANCiAgc3RhbXAtaDogY29uZmln
LmluIGNvbmZpZy5zdGF0dXMgY29uZmlnLnNlZA0KISAJcmVkaXIuZXhlIC1vIGNvbmZpZy5oLW5l
dyBzZWQgLWYgY29uZmlnLnNlZCAkKHNyY2RpcikvY29uZmlnLmluDQogIAl1cGRhdGUgY29uZmln
LmgtbmV3IGNvbmZpZy5oDQogIAl0b3VjaCBzdGFtcC1oDQogIA0KKioqKioqKioqKioqKioqDQoq
KiogNzY1LDc3MyAqKioqDQogICMJYXdrIC1mICQoc3JjZGlyKS9jb3B5aW5nLmF3ayA8ICQoc3Jj
ZGlyKS9DT1BZSU5HID4gQ09QWUlORy5jDQogIA0KICB2ZXJzaW9uLmM6IE1ha2VmaWxlDQohIAll
Y2hvLmV4ZSAtbyB2ZXJzaW9uLnRtcCBjaGFyICp2ZXJzaW9uID0gXCIkKFZFUlNJT04pXCI7DQoh
IAlyZWRpciAtb2EgdmVyc2lvbi50bXAgZWNoby5leGUgY2hhciAqaG9zdF9uYW1lID0gXCIkKGhv
c3RfYWxpYXMpXCI7DQohIAlyZWRpciAtb2EgdmVyc2lvbi50bXAgZWNoby5leGUgY2hhciAqdGFy
Z2V0X25hbWUgPSBcIiQodGFyZ2V0X2FsaWFzKVwiOw0KICAJdXBkYXRlIHZlcnNpb24udG1wIHZl
cnNpb24uYw0KICANCiAgIyAkKENFWFBUQUIpLmMgaXMgZ2VuZXJhdGVkIGluIG9iamRpciBmcm9t
IGMtZXhwLnkgaWYgaXQgZG9lc24ndCBleGlzdA0KLS0tIDc3OCw3ODcgLS0tLQ0KICAjCWF3ayAt
ZiAkKHNyY2RpcikvY29weWluZy5hd2sgPCAkKHNyY2RpcikvQ09QWUlORyA+IENPUFlJTkcuYw0K
ICANCiAgdmVyc2lvbi5jOiBNYWtlZmlsZQ0KISAJLXJtIHZlcnNpb24udG1wIA0KISAJcmVkaXIg
LW8gdmVyc2lvbi50bXAgZWNobyAnY2hhciAqdmVyc2lvbiA9ICIkKFZFUlNJT04pIjsnDQohIAly
ZWRpciAtb2EgdmVyc2lvbi50bXAgZWNobyAnY2hhciAqaG9zdF9uYW1lID0gIiQoaG9zdF9hbGlh
cykiOycNCiEgCXJlZGlyIC1vYSB2ZXJzaW9uLnRtcCBlY2hvICdjaGFyICp0YXJnZXRfbmFtZSA9
ICIkKHRhcmdldF9hbGlhcykiOycNCiAgCXVwZGF0ZSB2ZXJzaW9uLnRtcCB2ZXJzaW9uLmMNCiAg
DQogICMgJChDRVhQVEFCKS5jIGlzIGdlbmVyYXRlZCBpbiBvYmpkaXIgZnJvbSBjLWV4cC55IGlm
IGl0IGRvZXNuJ3QgZXhpc3QNCioqKioqKioqKioqKioqKg0KKioqIDc5Miw3OTcgKioqKg0KLS0t
IDgwNiw4MjQgLS0tLQ0KICAJLXJtIHkudGFiLmMNCiAgCW12IGMtZXhwLm5ldyAuLyQoQ0VYUFRB
QikuYw0KICANCisgJChQRVhQVEFCKS5vOiAkKFBFWFBUQUIpLmMNCisgJChQRVhQVEFCKS5jOiBw
LWV4cC55DQorIAllY2hvICQoWUFDQykgJChZRkxBR1MpICQoc3JjZGlyKS9wLWV4cC55DQorIAkt
c2VkIC1lICcvZXh0ZXJuLiptYWxsb2MvZCcgXA0KKyAJICAgICAtZSAnL2V4dGVybi4qcmVhbGxv
Yy9kJyBcDQorIAkgICAgIC1lICcvZXh0ZXJuLipmcmVlL2QnIFwNCisgCSAgICAgLWUgJy9pbmNs
dWRlLiptYWxsb2MuaC9kJyBcDQorIAkgICAgIC1lICdzL21hbGxvYy94bWFsbG9jL2cnIFwNCisg
CSAgICAgLWUgJ3MvcmVhbGxvYy94cmVhbGxvYy9nJyBcDQorIAkgICAgIDwgcC15X3RhYi5jID4g
cC1leHAubmV3DQorIAktcm0geS50YWIuYw0KKyAJbXYgcC1leHAubmV3IC4vJChQRVhQVEFCKS5j
DQorIA0KICAkKEZFWFBUQUIpLm86ICQoRkVYUFRBQikuYw0KICAkKEZFWFBUQUIpLmM6IGYtZXhw
LnkgJChDRVhQVEFCKS5jDQogIAkkKFlBQ0MpICQoWUZMQUdTKSAkKHNyY2RpcikvZi1leHAueQ0K
KioqKioqKioqKioqKioqDQoqKiogMTUyOCwxNTMzICoqKioNCi0tLSAxNTU1LDE1NjQgLS0tLQ0K
ICAJJChnZGJ0eXBlc19oKSBsYW5ndWFnZS5oIHBhcnNlci1kZWZzLmggJChzeW10YWJfaCkgJCh2
YWx1ZV9oKSBcDQogIAkkKGJmZF9oKSBvYmpmaWxlcy5oIHN5bWZpbGUuaA0KICANCisgJChQRVhQ
VEFCKS5vOiAkKFBFWFBUQUIpLmMgcC1sYW5nLmggJChkZWZzX2gpICQoZXhwcmVzc2lvbl9oKSBc
DQorIAkkKGdkYnR5cGVzX2gpIGxhbmd1YWdlLmggcGFyc2VyLWRlZnMuaCAkKHN5bXRhYl9oKSAk
KHZhbHVlX2gpIFwNCisgCSQoYmZkX2gpIG9iamZpbGVzLmggc3ltZmlsZS5oDQorIA0KICAkKEZF
WFBUQUIpLm86ICQoRkVYUFRBQikuYyBmLWxhbmcuaCAkKGRlZnNfaCkgJChleHByZXNzaW9uX2gp
IFwNCiAgCWxhbmd1YWdlLmggcGFyc2VyLWRlZnMuaCAkKHZhbHVlX2gpICQoYmZkX2gpIG9iamZp
bGVzLmggc3ltZmlsZS5oDQogIA0KKioqKioqKioqKioqKioqDQoqKiogMTUzNSwxNTM4ICoqKioN
Ci0tLSAxNTY2LDE1ODUgLS0tLQ0KICAJbGFuZ3VhZ2UuaCBtMi1sYW5nLmggcGFyc2VyLWRlZnMu
aCAkKHN5bXRhYl9oKSAkKHZhbHVlX2gpIFwNCiAgCSQoYmZkX2gpIG9iamZpbGVzLmggc3ltZmls
ZS5oDQogIA0KKyBkYmdjb20ubyA6IGRiZ2NvbS5jDQorIA0KKyBnZGJwYXMgOiAkKE9CUykgJChU
U09CUykgZGJnY29tLm8gJChBRERfREVQUykgJChDREVQUykgaW5pdC5vDQorIAlybSAtZiBnZGJw
YXMuZXhlDQorIAkkKENDX0xEKSAkKElOVEVSTkFMX0xERkxBR1MpIC1vIGdkYnBhcyBcDQorIAkg
IGluaXQubyBkYmdjb20ubyAkKE9CUykgJChUU09CUykgJChBRERfRklMRVMpICQoQ0xJQlMpICQo
TE9BRExJQkVTKQ0KKyANCiAgIyMjIGVuZCBvZiB0aGUgZ2RiIE1ha2VmaWxlLmluLg0KKyAjDQor
ICMgJExvZzogbWFrZWZpbGUsdiAkDQorICMgUmV2aXNpb24gMS4zICAxOTk4LzEyLzIzIDE1OjUz
OjA2ICBQaWVycmUNCisgIyBleGNlcHRpb25zIGFuZCBmbG9hdGluZm8NCisgIw0KKyAjIFJldmlz
aW9uIDEuMyAgMTk5OC8xMi8yMSAxMTowMjo1OSAgcGllcnJlDQorICMgICogcHJvYmxlbXMgb2Yg
RlNFWFRfZGJnIHNvbHZlZA0KKyAjDQorICMNCkluZGV4OiBnZGIvbm0uaA0KZGlmZiAtYyBnZGIv
bm0uaDoxLjEuMS4xIGdkYi9ubS5oOjEuMg0KKioqIGdkYi9ubS5oOjEuMS4xLjEJRnJpIERlYyAw
NCAxMDo1MTowNiAxOTk4DQotLS0gZ2RiL25tLmgJV2VkIERlYyAyMyAxNjo1MzowNiAxOTk4DQoq
KioqKioqKioqKioqKioNCioqKiAxLDMyICoqKioNCiEgI2RlZmluZSBOT19QVFJBQ0VfSA0NCiEg
DQ0KISAjaW5jbHVkZSA8aTM4Ni9ubS1pMzg2di5oPg0NCiEgDQ0KISAjZGVmaW5lIFRBUkdFVF9I
QVNfSEFSRFdBUkVfV0FUQ0hQT0lOVFMNDQohIA0NCiEgI2RlZmluZSBUQVJHRVRfQ0FOX1VTRV9I
QVJEV0FSRV9XQVRDSFBPSU5UKHR5cGUsIGNudCwgb3QpIDENDQohIA0NCiEgLyogQWZ0ZXIgYSB3
YXRjaHBvaW50IHRyYXAsIHRoZSBQQyBwb2ludHMgdG8gdGhlIGluc3RydWN0aW9uIGFmdGVyDQ0K
ISAgICB0aGUgb25lIHRoYXQgY2F1c2VkIHRoZSB0cmFwLiAgVGhlcmVmb3JlIHdlIGRvbid0IG5l
ZWQgdG8gc3RlcCBvdmVyIGl0Lg0NCiEgICAgQnV0IHdlIGRvIG5lZWQgdG8gcmVzZXQgdGhlIHN0
YXR1cyByZWdpc3RlciB0byBhdm9pZCBhbm90aGVyIHRyYXAuICAqLw0NCiEgI2RlZmluZSBIQVZF
X0NPTlRJTlVBQkxFX1dBVENIUE9JTlQNDQohIA0NCiEgI2RlZmluZSBTVE9QUEVEX0JZX1dBVENI
UE9JTlQoVykgIFwNDQohICAgZ28zMl9zdG9wcGVkX2J5X3dhdGNocG9pbnQgKGluZmVyaW9yX3Bp
ZCkNDQohIA0NCiEgLyogVXNlIHRoZXNlIG1hY3JvcyBmb3Igd2F0Y2hwb2ludCBpbnNlcnRpb24v
cmVtb3ZhbC4gICovDQ0KISANDQohICNkZWZpbmUgdGFyZ2V0X2luc2VydF93YXRjaHBvaW50KGFk
ZHIsIGxlbiwgdHlwZSkgIFwNDQohICAgZ28zMl9pbnNlcnRfd2F0Y2hwb2ludCAoaW5mZXJpb3Jf
cGlkLCBhZGRyLCBsZW4sIDIpDQ0KISANDQohICNkZWZpbmUgdGFyZ2V0X3JlbW92ZV93YXRjaHBv
aW50KGFkZHIsIGxlbiwgdHlwZSkgIFwNDQohICAgZ28zMl9yZW1vdmVfd2F0Y2hwb2ludCAoaW5m
ZXJpb3JfcGlkLCBhZGRyLCBsZW4pDQ0KISANDQohIA0NCiEgI2RlZmluZSB0YXJnZXRfaW5zZXJ0
X2h3X2JyZWFrcG9pbnQoYWRkciwgc2hhZG93KSAgXA0NCiEgICBnbzMyX2luc2VydF9od19icmVh
a3BvaW50KGFkZHIsIHNoYWRvdykNDQohICAgDQ0KISAjZGVmaW5lIHRhcmdldF9yZW1vdmVfaHdf
YnJlYWtwb2ludChhZGRyLCBzaGFkb3cpICBcDQ0KISAgIGdvMzJfcmVtb3ZlX2h3X2JyZWFrcG9p
bnQoYWRkciwgc2hhZG93KQ0NCiEgDQ0KISAjZGVmaW5lIERFQ1JfUENfQUZURVJfSFdfQlJFQUsg
MA0NCi0tLSAxLDMyIC0tLS0NCiEgI2RlZmluZSBOT19QVFJBQ0VfSA0KISANCiEgI2luY2x1ZGUg
PGkzODYvbm0taTM4NnYuaD4NCiEgDQohICNkZWZpbmUgVEFSR0VUX0hBU19IQVJEV0FSRV9XQVRD
SFBPSU5UUw0KISANCiEgI2RlZmluZSBUQVJHRVRfQ0FOX1VTRV9IQVJEV0FSRV9XQVRDSFBPSU5U
KHR5cGUsIGNudCwgb3QpIDENCiEgDQohIC8qIEFmdGVyIGEgd2F0Y2hwb2ludCB0cmFwLCB0aGUg
UEMgcG9pbnRzIHRvIHRoZSBpbnN0cnVjdGlvbiBhZnRlcg0KISAgICB0aGUgb25lIHRoYXQgY2F1
c2VkIHRoZSB0cmFwLiAgVGhlcmVmb3JlIHdlIGRvbid0IG5lZWQgdG8gc3RlcCBvdmVyIGl0Lg0K
ISAgICBCdXQgd2UgZG8gbmVlZCB0byByZXNldCB0aGUgc3RhdHVzIHJlZ2lzdGVyIHRvIGF2b2lk
IGFub3RoZXIgdHJhcC4gICovDQohICNkZWZpbmUgSEFWRV9DT05USU5VQUJMRV9XQVRDSFBPSU5U
DQohIA0KISAjZGVmaW5lIFNUT1BQRURfQllfV0FUQ0hQT0lOVChXKSAgXA0KISAgIGdvMzJfc3Rv
cHBlZF9ieV93YXRjaHBvaW50IChpbmZlcmlvcl9waWQpDQohIA0KISAvKiBVc2UgdGhlc2UgbWFj
cm9zIGZvciB3YXRjaHBvaW50IGluc2VydGlvbi9yZW1vdmFsLiAgKi8NCiEgDQohICNkZWZpbmUg
dGFyZ2V0X2luc2VydF93YXRjaHBvaW50KGFkZHIsIGxlbiwgdHlwZSkgIFwNCiEgICBnbzMyX2lu
c2VydF93YXRjaHBvaW50IChpbmZlcmlvcl9waWQsIGFkZHIsIGxlbiwgMikNCiEgDQohICNkZWZp
bmUgdGFyZ2V0X3JlbW92ZV93YXRjaHBvaW50KGFkZHIsIGxlbiwgdHlwZSkgIFwNCiEgICBnbzMy
X3JlbW92ZV93YXRjaHBvaW50IChpbmZlcmlvcl9waWQsIGFkZHIsIGxlbikNCiEgDQohIA0KISAj
ZGVmaW5lIHRhcmdldF9pbnNlcnRfaHdfYnJlYWtwb2ludChhZGRyLCBzaGFkb3cpICBcDQohICAg
Z28zMl9pbnNlcnRfaHdfYnJlYWtwb2ludChhZGRyLCBzaGFkb3cpDQohICAgDQohICNkZWZpbmUg
dGFyZ2V0X3JlbW92ZV9od19icmVha3BvaW50KGFkZHIsIHNoYWRvdykgIFwNCiEgICBnbzMyX3Jl
bW92ZV9od19icmVha3BvaW50KGFkZHIsIHNoYWRvdykNCiEgDQohICNkZWZpbmUgREVDUl9QQ19B
RlRFUl9IV19CUkVBSyAwDQpJbmRleDogZ2RiL3AtZXhwLnkNCmRpZmYgLWMgbnVsIGdkYi9wLWV4
cC55OjEuMg0KKioqIG51bAlXZWQgRGVjIDIzIDE3OjAyOjE2IDE5OTgNCi0tLSBnZGIvcC1leHAu
eQlXZWQgRGVjIDIzIDE2OjUzOjA2IDE5OTgNCioqKioqKioqKioqKioqKg0KKioqIDAgKioqKg0K
LS0tIDEsMTQ0NiAtLS0tDQorIC8qDQorICAgTW9kaWZpY2F0aW9ucyBmb3IgRlBDIHN1cHBvcnQN
CisgICAkSWQ6IHAtZXhwLnksdiAxLjIgMTk5OC8xMi8yMyAxNTo1MzowNiBQaWVycmUgRXhwICQN
CisgKi8NCisgLyogWUFDQyBwYXJzZXIgZm9yIEMgZXhwcmVzc2lvbnMsIGZvciBHREIuDQorICAg
IENvcHlyaWdodCAoQykgMTk4NiwgMTk4OSwgMTk5MCwgMTk5MSwgMTk5MywgMTk5NCwgMTk5Niwg
MTk5Nw0KKyAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4NCisgDQorIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIEdEQi4NCisgDQorIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQorIGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQorIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yDQorIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQorIA0KKyBUaGlz
IHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwNCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YNCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZQ0KKyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLg0KKyANCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCisgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlm
IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCisgRm91bmRhdGlvbiwgSW5jLiwgNTkg
VGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICov
DQorIA0KKyAvKiBQYXJzZSBhIEMgZXhwcmVzc2lvbiBmcm9tIHRleHQgaW4gYSBzdHJpbmcsDQor
ICAgIGFuZCByZXR1cm4gdGhlIHJlc3VsdCBhcyBhICBzdHJ1Y3QgZXhwcmVzc2lvbiAgcG9pbnRl
ci4NCisgICAgVGhhdCBzdHJ1Y3R1cmUgY29udGFpbnMgYXJpdGhtZXRpYyBvcGVyYXRpb25zIGlu
IHJldmVyc2UgcG9saXNoLA0KKyAgICB3aXRoIGNvbnN0YW50cyByZXByZXNlbnRlZCBieSBvcGVy
YXRpb25zIHRoYXQgYXJlIGZvbGxvd2VkIGJ5IHNwZWNpYWwgZGF0YS4NCisgICAgU2VlIGV4cHJl
c3Npb24uaCBmb3IgdGhlIGRldGFpbHMgb2YgdGhlIGZvcm1hdC4NCisgICAgV2hhdCBpcyBpbXBv
cnRhbnQgaGVyZSBpcyB0aGF0IGl0IGNhbiBiZSBidWlsdCB1cCBzZXF1ZW50aWFsbHkNCisgICAg
ZHVyaW5nIHRoZSBwcm9jZXNzIG9mIHBhcnNpbmc7IHRoZSBsb3dlciBsZXZlbHMgb2YgdGhlIHRy
ZWUgYWx3YXlzDQorICAgIGNvbWUgZmlyc3QgaW4gdGhlIHJlc3VsdC4NCisgDQorICAgIE5vdGUg
dGhhdCBtYWxsb2MncyBhbmQgcmVhbGxvYydzIGluIHRoaXMgZmlsZSBhcmUgdHJhbnNmb3JtZWQg
dG8NCisgICAgeG1hbGxvYyBhbmQgeHJlYWxsb2MgcmVzcGVjdGl2ZWx5IGJ5IHRoZSBzYW1lIHNl
ZCBjb21tYW5kIGluIHRoZQ0KKyAgICBtYWtlZmlsZSB0aGF0IHJlbWFwcyBhbnkgb3RoZXIgbWFs
bG9jL3JlYWxsb2MgaW5zZXJ0ZWQgYnkgdGhlIHBhcnNlcg0KKyAgICBnZW5lcmF0b3IuICBEb2lu
ZyB0aGlzIHdpdGggI2RlZmluZXMgYW5kIHRyeWluZyB0byBjb250cm9sIHRoZSBpbnRlcmFjdGlv
bg0KKyAgICB3aXRoIGluY2x1ZGUgZmlsZXMgKDxtYWxsb2MuaD4gYW5kIDxzdGRsaWIuaD4gZm9y
IGV4YW1wbGUpIGp1c3QgYmVjYW1lDQorICAgIHRvbyBtZXNzeSwgcGFydGljdWxhcmx5IHdoZW4g
c3VjaCBpbmNsdWRlcyBjYW4gYmUgaW5zZXJ0ZWQgYXQgcmFuZG9tDQorICAgIHRpbWVzIGJ5IHRo
ZSBwYXJzZXIgZ2VuZXJhdG9yLiAgKi8NCisgICAgDQorICV7DQorIA0KKyAjaW5jbHVkZSAiZGVm
cy5oIg0KKyAjaW5jbHVkZSAiZ2RiX3N0cmluZy5oIg0KKyAjaW5jbHVkZSA8Y3R5cGUuaD4NCisg
I2luY2x1ZGUgImV4cHJlc3Npb24uaCINCisgI2luY2x1ZGUgInZhbHVlLmgiDQorICNpbmNsdWRl
ICJwYXJzZXItZGVmcy5oIg0KKyAjaW5jbHVkZSAibGFuZ3VhZ2UuaCINCisgI2luY2x1ZGUgInAt
bGFuZy5oIg0KKyAjaW5jbHVkZSAiYmZkLmgiIC8qIFJlcXVpcmVkIGJ5IG9iamZpbGVzLmguICAq
Lw0KKyAjaW5jbHVkZSAic3ltZmlsZS5oIiAvKiBSZXF1aXJlZCBieSBvYmpmaWxlcy5oLiAgKi8N
CisgI2luY2x1ZGUgIm9iamZpbGVzLmgiIC8qIEZvciBoYXZlX2Z1bGxfc3ltYm9scyBhbmQgaGF2
ZV9wYXJ0aWFsX3N5bWJvbHMgKi8NCisgDQorIC8qIHdvcmthcm91bmQgZm9yIHY0LjE2IERKR1BQ
IChQTSkgKi8NCisgI2lmbmRlZiBVTE9OR0VTVA0KKyAjICBpZmRlZiBDQ19IQVNfTE9OR19MT05H
DQorICMgICAgZGVmaW5lIFVMT05HRVNUIHVuc2lnbmVkIGxvbmcgbG9uZw0KKyAjICBlbHNlDQor
ICMgICAgZGVmaW5lIFVMT05HRVNUIHVuc2lnbmVkIGxvbmcNCisgIyAgZW5kaWYNCisgI2VuZGlm
DQorIA0KKyAvKiBSZW1hcCBub3JtYWwgeWFjYyBwYXJzZXIgaW50ZXJmYWNlIG5hbWVzICh5eXBh
cnNlLCB5eWxleCwgeXllcnJvciwgZXRjKSwNCisgICAgYXMgd2VsbCBhcyBncmF0dWl0aW91c2x5
IGdsb2JhbCBzeW1ib2wgbmFtZXMsIHNvIHdlIGNhbiBoYXZlIG11bHRpcGxlDQorICAgIHlhY2Mg
Z2VuZXJhdGVkIHBhcnNlcnMgaW4gZ2RiLiAgTm90ZSB0aGF0IHRoZXNlIGFyZSBvbmx5IHRoZSB2
YXJpYWJsZXMNCisgICAgcHJvZHVjZWQgYnkgeWFjYy4gIElmIG90aGVyIHBhcnNlciBnZW5lcmF0
b3JzIChiaXNvbiwgYnlhY2MsIGV0YykgcHJvZHVjZQ0KKyAgICBhZGRpdGlvbmFsIGdsb2JhbCBu
YW1lcyB0aGF0IGNvbmZsaWN0IGF0IGxpbmsgdGltZSwgdGhlbiB0aG9zZSBwYXJzZXINCisgICAg
Z2VuZXJhdG9ycyBuZWVkIHRvIGJlIGZpeGVkIGluc3RlYWQgb2YgYWRkaW5nIHRob3NlIG5hbWVz
IHRvIHRoaXMgbGlzdC4gKi8NCisgDQorICNkZWZpbmUJeXltYXhkZXB0aCBwYXNfbWF4ZGVwdGgN
CisgI2RlZmluZQl5eXBhcnNlCXBhc19wYXJzZQ0KKyAjZGVmaW5lCXl5bGV4CXBhc19sZXgNCisg
I2RlZmluZQl5eWVycm9yCXBhc19lcnJvcg0KKyAjZGVmaW5lCXl5bHZhbAlwYXNfbHZhbA0KKyAj
ZGVmaW5lCXl5Y2hhcglwYXNfY2hhcg0KKyAjZGVmaW5lCXl5ZGVidWcJcGFzX2RlYnVnDQorICNk
ZWZpbmUJeXlwYWN0CXBhc19wYWN0CQ0KKyAjZGVmaW5lCXl5cjEJcGFzX3IxCQkJDQorICNkZWZp
bmUJeXlyMglwYXNfcjIJCQkNCisgI2RlZmluZQl5eWRlZglwYXNfZGVmCQkNCisgI2RlZmluZQl5
eWNoawlwYXNfY2hrCQkNCisgI2RlZmluZQl5eXBnbwlwYXNfcGdvCQkNCisgI2RlZmluZQl5eWFj
dAlwYXNfYWN0CQkNCisgI2RlZmluZQl5eWV4Y2EJcGFzX2V4Y2ENCisgI2RlZmluZSB5eWVycmZs
YWcgcGFzX2VycmZsYWcNCisgI2RlZmluZSB5eW5lcnJzCXBhc19uZXJycw0KKyAjZGVmaW5lCXl5
cHMJcGFzX3BzDQorICNkZWZpbmUJeXlwdglwYXNfcHYNCisgI2RlZmluZQl5eXMJcGFzX3MNCisg
I2RlZmluZQl5eV95eXMJcGFzX3l5cw0KKyAjZGVmaW5lCXl5c3RhdGUJcGFzX3N0YXRlDQorICNk
ZWZpbmUJeXl0bXAJcGFzX3RtcA0KKyAjZGVmaW5lCXl5dglwYXNfdg0KKyAjZGVmaW5lCXl5X3l5
dglwYXNfeXl2DQorICNkZWZpbmUJeXl2YWwJcGFzX3ZhbA0KKyAjZGVmaW5lCXl5bGxvYwlwYXNf
bGxvYw0KKyAjZGVmaW5lIHl5cmVkcwlwYXNfcmVkcwkJLyogV2l0aCBZWURFQlVHIGRlZmluZWQg
Ki8NCisgI2RlZmluZSB5eXRva3MJcGFzX3Rva3MJCS8qIFdpdGggWVlERUJVRyBkZWZpbmVkICov
DQorICNkZWZpbmUgeXlsaHMJcGFzX3l5bGhzDQorICNkZWZpbmUgeXlsZW4JcGFzX3l5bGVuDQor
ICNkZWZpbmUgeXlkZWZyZWQgcGFzX3l5ZGVmcmVkDQorICNkZWZpbmUgeXlkZ290bwlwYXNfeXlk
Z290bw0KKyAjZGVmaW5lIHl5c2luZGV4IHBhc195eXNpbmRleA0KKyAjZGVmaW5lIHl5cmluZGV4
IHBhc195eXJpbmRleA0KKyAjZGVmaW5lIHl5Z2luZGV4IHBhc195eWdpbmRleA0KKyAjZGVmaW5l
IHl5dGFibGUJIHBhc195eXRhYmxlDQorICNkZWZpbmUgeXljaGVjawkgcGFzX3l5Y2hlY2sNCisg
DQorICNpZm5kZWYgWVlERUJVRw0KKyAjZGVmaW5lCVlZREVCVUcJMAkJLyogRGVmYXVsdCB0byBu
byB5eWRlYnVnIHN1cHBvcnQgKi8NCisgI2VuZGlmDQorIA0KKyBpbnQNCisgeXlwYXJzZSBQQVJB
TVMgKCh2b2lkKSk7DQorIA0KKyBzdGF0aWMgaW50DQorIHl5bGV4IFBBUkFNUyAoKHZvaWQpKTsN
CisgDQorIHZvaWQNCisgeXllcnJvciBQQVJBTVMgKChjaGFyICopKTsNCisgDQorICV9DQorIA0K
KyAvKiBBbHRob3VnaCB0aGUgeWFjYyAidmFsdWUiIG9mIGFuIGV4cHJlc3Npb24gaXMgbm90IHVz
ZWQsDQorICAgIHNpbmNlIHRoZSByZXN1bHQgaXMgc3RvcmVkIGluIHRoZSBzdHJ1Y3R1cmUgYmVp
bmcgY3JlYXRlZCwNCisgICAgb3RoZXIgbm9kZSB0eXBlcyBkbyBoYXZlIHZhbHVlcy4gICovDQor
IA0KKyAldW5pb24NCisgICB7DQorICAgICBMT05HRVNUIGx2YWw7DQorICAgICBzdHJ1Y3Qgew0K
KyAgICAgICBMT05HRVNUIHZhbDsNCisgICAgICAgc3RydWN0IHR5cGUgKnR5cGU7DQorICAgICB9
IHR5cGVkX3ZhbF9pbnQ7DQorICAgICBzdHJ1Y3Qgew0KKyAgICAgICBET1VCTEVTVCBkdmFsOw0K
KyAgICAgICBzdHJ1Y3QgdHlwZSAqdHlwZTsNCisgICAgIH0gdHlwZWRfdmFsX2Zsb2F0Ow0KKyAg
ICAgc3RydWN0IHN5bWJvbCAqc3ltOw0KKyAgICAgc3RydWN0IHR5cGUgKnR2YWw7DQorICAgICBz
dHJ1Y3Qgc3Rva2VuIHN2YWw7DQorICAgICBzdHJ1Y3QgdHR5cGUgdHN5bTsNCisgICAgIHN0cnVj
dCBzeW10b2tlbiBzc3ltOw0KKyAgICAgaW50IHZvaWR2YWw7DQorICAgICBzdHJ1Y3QgYmxvY2sg
KmJ2YWw7DQorICAgICBlbnVtIGV4cF9vcGNvZGUgb3Bjb2RlOw0KKyAgICAgc3RydWN0IGludGVy
bmFsdmFyICppdmFyOw0KKyANCisgICAgIHN0cnVjdCB0eXBlICoqdHZlYzsNCisgICAgIGludCAq
aXZlYzsNCisgICB9DQorIA0KKyAlew0KKyAvKiBZWVNUWVBFIGdldHMgZGVmaW5lZCBieSAldW5p
b24gKi8NCisgc3RhdGljIGludA0KKyBwYXJzZV9udW1iZXIgUEFSQU1TICgoY2hhciAqLCBpbnQs
IGludCwgWVlTVFlQRSAqKSk7DQorICV9DQorIA0KKyAldHlwZSA8dm9pZHZhbD4gZXhwIGV4cDEg
dHlwZV9leHAgc3RhcnQgdmFyaWFibGUgcXVhbGlmaWVkX25hbWUNCisgJXR5cGUgPHR2YWw+IHR5
cGUgdHlwZWJhc2UNCisgLyogJXR5cGUgPGJ2YWw+IGJsb2NrICovDQorIA0KKyAvKiBGYW5jeSB0
eXBlIHBhcnNpbmcuICAqLw0KKyAldHlwZSA8dHZhbD4gcHR5cGUNCisgDQorICV0b2tlbiA8dHlw
ZWRfdmFsX2ludD4gSU5UDQorICV0b2tlbiA8dHlwZWRfdmFsX2Zsb2F0PiBGTE9BVA0KKyANCisg
LyogQm90aCBOQU1FIGFuZCBUWVBFTkFNRSB0b2tlbnMgcmVwcmVzZW50IHN5bWJvbHMgaW4gdGhl
IGlucHV0LA0KKyAgICBhbmQgYm90aCBjb252ZXkgdGhlaXIgZGF0YSBhcyBzdHJpbmdzLg0KKyAg
ICBCdXQgYSBUWVBFTkFNRSBpcyBhIHN0cmluZyB0aGF0IGhhcHBlbnMgdG8gYmUgZGVmaW5lZCBh
cyBhIHR5cGVkZWYNCisgICAgb3IgYnVpbHRpbiB0eXBlIG5hbWUgKHN1Y2ggYXMgaW50IG9yIGNo
YXIpDQorICAgIGFuZCBhIE5BTUUgaXMgYW55IG90aGVyIHN5bWJvbC4NCisgICAgQ29udGV4dHMg
d2hlcmUgdGhpcyBkaXN0aW5jdGlvbiBpcyBub3QgaW1wb3J0YW50IGNhbiB1c2UgdGhlDQorICAg
IG5vbnRlcm1pbmFsICJuYW1lIiwgd2hpY2ggbWF0Y2hlcyBlaXRoZXIgTkFNRSBvciBUWVBFTkFN
RS4gICovDQorIA0KKyAldG9rZW4gPHN2YWw+IFNUUklORw0KKyAldG9rZW4gPHNzeW0+IE5BTUUg
LyogQkxPQ0tOQU1FIGRlZmluZWQgYmVsb3cgdG8gZ2l2ZSBpdCBoaWdoZXIgcHJlY2VkZW5jZS4g
Ki8NCisgJXRva2VuIDx0c3ltPiBUWVBFTkFNRQ0KKyAldHlwZSA8c3ZhbD4gbmFtZQ0KKyAldHlw
ZSA8c3N5bT4gbmFtZV9ub3RfdHlwZW5hbWUNCisgDQorIC8qIEEgTkFNRV9PUl9JTlQgaXMgYSBz
eW1ib2wgd2hpY2ggaXMgbm90IGtub3duIGluIHRoZSBzeW1ib2wgdGFibGUsDQorICAgIGJ1dCB3
aGljaCB3b3VsZCBwYXJzZSBhcyBhIHZhbGlkIG51bWJlciBpbiB0aGUgY3VycmVudCBpbnB1dCBy
YWRpeC4NCisgICAgRS5nLiAiYyIgd2hlbiBpbnB1dF9yYWRpeD09MTYuICBEZXBlbmRpbmcgb24g
dGhlIHBhcnNlLCBpdCB3aWxsIGJlDQorICAgIHR1cm5lZCBpbnRvIGEgbmFtZSBvciBpbnRvIGEg
bnVtYmVyLiAgKi8NCisgDQorICV0b2tlbiA8c3N5bT4gTkFNRV9PUl9JTlQgDQorIA0KKyAldG9r
ZW4gU1RSVUNUIENMQVNTIFNJWkVPRiBDT0xPTkNPTE9ODQorICV0b2tlbiBFUlJPUg0KKyANCisg
LyogU3BlY2lhbCB0eXBlIGNhc2VzLCBwdXQgaW4gdG8gYWxsb3cgdGhlIHBhcnNlciB0byBkaXN0
aW5ndWlzaCBkaWZmZXJlbnQNCisgICAgbGVnYWwgYmFzZXR5cGVzLiAgKi8NCisgDQorICV0b2tl
biA8dm9pZHZhbD4gVkFSSUFCTEUNCisgDQorIA0KKyAvKiBDKysgKi8NCisgJXRva2VuIFRISVMN
CisgJXRva2VuIDxsdmFsPiBUUlVFIEZBTFNFDQorIA0KKyAlbGVmdCAnLCcNCisgJWxlZnQgQUJP
VkVfQ09NTUENCisgJXJpZ2h0IEFTU0lHTg0KKyAlbGVmdCBOT1QNCisgJWxlZnQgT1INCisgJWxl
ZnQgWE9SDQorICVsZWZ0IEFOREFORA0KKyAlbGVmdCAnPScgTk9URVFVQUwNCisgJWxlZnQgJzwn
ICc+JyBMRVEgR0VRDQorICVsZWZ0IExTSCBSU0ggRElWIE1PRA0KKyAlbGVmdCAnQCcNCisgJWxl
ZnQgJysnICctJw0KKyAlbGVmdCAnKicgJy8nDQorICVyaWdodCBVTkFSWSBJTkNSRU1FTlQgREVD
UkVNRU5UDQorICVyaWdodCBBUlJPVyAnLicgJ1snICcoJw0KKyAldG9rZW4gPHNzeW0+IEJMT0NL
TkFNRSANCisgJXR5cGUgPGJ2YWw+IGJsb2NrDQorICVsZWZ0IENPTE9OQ09MT04NCisgDQorIAwN
CisgJSUNCisgDQorIHN0YXJ0ICAgOglleHAxDQorIAl8CXR5cGVfZXhwDQorIAk7DQorIA0KKyB0
eXBlX2V4cDoJdHlwZQ0KKyAJCQl7IHdyaXRlX2V4cF9lbHRfb3Bjb2RlKE9QX1RZUEUpOw0KKyAJ
CQkgIHdyaXRlX2V4cF9lbHRfdHlwZSgkMSk7DQorIAkJCSAgd3JpdGVfZXhwX2VsdF9vcGNvZGUo
T1BfVFlQRSk7fQ0KKyAJOw0KKyANCisgLyogRXhwcmVzc2lvbnMsIGluY2x1ZGluZyB0aGUgY29t
bWEgb3BlcmF0b3IuICAqLw0KKyBleHAxCToJZXhwDQorIAl8CWV4cDEgJywnIGV4cA0KKyAJCQl7
IHdyaXRlX2V4cF9lbHRfb3Bjb2RlIChCSU5PUF9DT01NQSk7IH0NCisgCTsNCisgDQorIC8qIEV4
cHJlc3Npb25zLCBub3QgaW5jbHVkaW5nIHRoZSBjb21tYSBvcGVyYXRvci4gICovDQorIGV4cAk6
CWV4cCAnXicgICAlcHJlYyBVTkFSWQ0KKyAJCQl7IHdyaXRlX2V4cF9lbHRfb3Bjb2RlIChVTk9Q
X0lORCk7IH0NCisgDQorIGV4cAk6CSdAJyBleHAgICAgJXByZWMgVU5BUlkNCisgCQkJeyB3cml0
ZV9leHBfZWx0X29wY29kZSAoVU5PUF9BRERSKTsgfQ0KKyANCisgZXhwCToJJy0nIGV4cCAgICAl
cHJlYyBVTkFSWQ0KKyAJCQl7IHdyaXRlX2V4cF9lbHRfb3Bjb2RlIChVTk9QX05FRyk7IH0NCisg
CTsNCisgDQorIGV4cAk6CU5PVCBleHAgICAgJXByZWMgVU5BUlkNCisgCQkJeyB3cml0ZV9leHBf
ZWx0X29wY29kZSAoVU5PUF9MT0dJQ0FMX05PVCk7IH0NCisgCTsNCisgDQorIGV4cAk6CUlOQ1JF
TUVOVCAnKCcgZXhwICcpJyAgICVwcmVjIFVOQVJZDQorIAkJCXsgd3JpdGVfZXhwX2VsdF9vcGNv
ZGUgKFVOT1BfUFJFSU5DUkVNRU5UKTsgfQ0KKyAJOw0KKyANCisgZXhwCToJREVDUkVNRU5UICAn
KCcgZXhwICcpJyAgICVwcmVjIFVOQVJZDQorIAkJCXsgd3JpdGVfZXhwX2VsdF9vcGNvZGUgKFVO
T1BfUFJFREVDUkVNRU5UKTsgfQ0KKyAJOw0KKyANCisgZXhwCToJZXhwICcuJyBuYW1lDQorIAkJ
CXsgd3JpdGVfZXhwX2VsdF9vcGNvZGUgKFNUUlVDVE9QX1NUUlVDVCk7DQorIAkJCSAgd3JpdGVf
ZXhwX3N0cmluZyAoJDMpOw0KKyAJCQkgIHdyaXRlX2V4cF9lbHRfb3Bjb2RlIChTVFJVQ1RPUF9T
VFJVQ1QpOyB9DQorIAk7DQorIA0KKyBleHAJOglleHAgJ1snIGV4cDEgJ10nDQorIAkJCXsgd3Jp
dGVfZXhwX2VsdF9vcGNvZGUgKEJJTk9QX1NVQlNDUklQVCk7IH0NCisgCTsNCisgDQorIGV4cAk6
CWV4cCAnKCcgDQorIAkJCS8qIFRoaXMgaXMgdG8gc2F2ZSB0aGUgdmFsdWUgb2YgYXJnbGlzdF9s
ZW4NCisgCQkJICAgYmVpbmcgYWNjdW11bGF0ZWQgYnkgYW4gb3V0ZXIgZnVuY3Rpb24gY2FsbC4g
ICovDQorIAkJCXsgc3RhcnRfYXJnbGlzdCAoKTsgfQ0KKyAJCWFyZ2xpc3QgJyknCSVwcmVjIEFS
Uk9XDQorIAkJCXsgd3JpdGVfZXhwX2VsdF9vcGNvZGUgKE9QX0ZVTkNBTEwpOw0KKyAJCQkgIHdy
aXRlX2V4cF9lbHRfbG9uZ2NzdCAoKExPTkdFU1QpIGVuZF9hcmdsaXN0ICgpKTsNCisgCQkJICB3
cml0ZV9leHBfZWx0X29wY29kZSAoT1BfRlVOQ0FMTCk7IH0NCisgCTsNCisgDQorIGFyZ2xpc3QJ
Og0KKyAgICAgICAgICB8IGV4cA0KKyAJCQl7IGFyZ2xpc3RfbGVuID0gMTsgfQ0KKyAJIHwgYXJn
bGlzdCAnLCcgZXhwICAgJXByZWMgQUJPVkVfQ09NTUENCisgCQkJeyBhcmdsaXN0X2xlbisrOyB9
DQorIAk7DQorIA0KKyBleHAJOgl0eXBlICcoJyBleHAgJyknICVwcmVjIFVOQVJZDQorIAkJCXsg
d3JpdGVfZXhwX2VsdF9vcGNvZGUgKFVOT1BfQ0FTVCk7DQorIAkJCSAgd3JpdGVfZXhwX2VsdF90
eXBlICgkMSk7DQorIAkJCSAgd3JpdGVfZXhwX2VsdF9vcGNvZGUgKFVOT1BfQ0FTVCk7IH0NCisg
CTsNCisgDQorIGV4cAk6CScoJyBleHAxICcpJw0KKyAJCQl7IH0NCisgCTsNCisgDQorIC8qIEJp
bmFyeSBvcGVyYXRvcnMgaW4gb3JkZXIgb2YgZGVjcmVhc2luZyBwcmVjZWRlbmNlLiAgKi8NCisg
DQorIGV4cAk6CWV4cCAnKicgZXhwDQorIAkJCXsgd3JpdGVfZXhwX2VsdF9vcGNvZGUgKEJJTk9Q
X01VTCk7IH0NCisgCTsNCisgDQorIGV4cAk6CWV4cCAnLycgZXhwDQorIAkJCXsgd3JpdGVfZXhw
X2VsdF9vcGNvZGUgKEJJTk9QX0RJVik7IH0NCisgCTsNCisgDQorIGV4cAk6CWV4cCBESVYgZXhw
DQorIAkJCXsgd3JpdGVfZXhwX2VsdF9vcGNvZGUgKEJJTk9QX0lOVERJVik7IH0NCisgCTsNCisg
DQorIGV4cAk6CWV4cCBNT0QgZXhwDQorIAkJCXsgd3JpdGVfZXhwX2VsdF9vcGNvZGUgKEJJTk9Q
X1JFTSk7IH0NCisgCTsNCisgDQorIGV4cAk6CWV4cCAnKycgZXhwDQorIAkJCXsgd3JpdGVfZXhw
X2VsdF9vcGNvZGUgKEJJTk9QX0FERCk7IH0NCisgCTsNCisgDQorIGV4cAk6CWV4cCAnLScgZXhw
DQorIAkJCXsgd3JpdGVfZXhwX2VsdF9vcGNvZGUgKEJJTk9QX1NVQik7IH0NCisgCTsNCisgDQor
IGV4cAk6CWV4cCBMU0ggZXhwDQorIAkJCXsgd3JpdGVfZXhwX2VsdF9vcGNvZGUgKEJJTk9QX0xT
SCk7IH0NCisgCTsNCisgDQorIGV4cAk6CWV4cCBSU0ggZXhwDQorIAkJCXsgd3JpdGVfZXhwX2Vs
dF9vcGNvZGUgKEJJTk9QX1JTSCk7IH0NCisgCTsNCisgDQorIGV4cAk6CWV4cCAnPScgZXhwDQor
IAkJCXsgd3JpdGVfZXhwX2VsdF9vcGNvZGUgKEJJTk9QX0VRVUFMKTsgfQ0KKyAJOw0KKyANCisg
ZXhwCToJZXhwIE5PVEVRVUFMIGV4cA0KKyAJCQl7IHdyaXRlX2V4cF9lbHRfb3Bjb2RlIChCSU5P
UF9OT1RFUVVBTCk7IH0NCisgCTsNCisgDQorIGV4cAk6CWV4cCBMRVEgZXhwDQorIAkJCXsgd3Jp
dGVfZXhwX2VsdF9vcGNvZGUgKEJJTk9QX0xFUSk7IH0NCisgCTsNCisgDQorIGV4cAk6CWV4cCBH
RVEgZXhwDQorIAkJCXsgd3JpdGVfZXhwX2VsdF9vcGNvZGUgKEJJTk9QX0dFUSk7IH0NCisgCTsN
CisgDQorIGV4cAk6CWV4cCAnPCcgZXhwDQorIAkJCXsgd3JpdGVfZXhwX2VsdF9vcGNvZGUgKEJJ
Tk9QX0xFU1MpOyB9DQorIAk7DQorIA0KKyBleHAJOglleHAgJz4nIGV4cA0KKyAJCQl7IHdyaXRl
X2V4cF9lbHRfb3Bjb2RlIChCSU5PUF9HVFIpOyB9DQorIAk7DQorIA0KKyBleHAJOglleHAgQU5E
QU5EIGV4cA0KKyAJCQl7IHdyaXRlX2V4cF9lbHRfb3Bjb2RlIChCSU5PUF9CSVRXSVNFX0FORCk7
IH0NCisgCTsNCisgDQorIGV4cAk6CWV4cCBYT1IgZXhwDQorIAkJCXsgd3JpdGVfZXhwX2VsdF9v
cGNvZGUgKEJJTk9QX0JJVFdJU0VfWE9SKTsgfQ0KKyAJOw0KKyANCisgZXhwCToJZXhwIE9SIGV4
cA0KKyAJCQl7IHdyaXRlX2V4cF9lbHRfb3Bjb2RlIChCSU5PUF9CSVRXSVNFX0lPUik7IH0NCisg
CTsNCisgDQorIGV4cAk6CWV4cCBBU1NJR04gZXhwDQorIAkJCXsgd3JpdGVfZXhwX2VsdF9vcGNv
ZGUgKEJJTk9QX0FTU0lHTik7IH0NCisgCTsNCisgDQorIGV4cAk6CVRSVUUNCisgCQkJeyB3cml0
ZV9leHBfZWx0X29wY29kZSAoT1BfQk9PTCk7DQorIAkJCSAgd3JpdGVfZXhwX2VsdF9sb25nY3N0
ICgoTE9OR0VTVCkgJDEpOw0KKyAJCQkgIHdyaXRlX2V4cF9lbHRfb3Bjb2RlIChPUF9CT09MKTsg
fQ0KKyAJOw0KKyANCisgZXhwCToJRkFMU0UNCisgCQkJeyB3cml0ZV9leHBfZWx0X29wY29kZSAo
T1BfQk9PTCk7DQorIAkJCSAgd3JpdGVfZXhwX2VsdF9sb25nY3N0ICgoTE9OR0VTVCkgJDEpOw0K
KyAJCQkgIHdyaXRlX2V4cF9lbHRfb3Bjb2RlIChPUF9CT09MKTsgfQ0KKyAJOw0KKyANCisgZXhw
CToJSU5UDQorIAkJCXsgd3JpdGVfZXhwX2VsdF9vcGNvZGUgKE9QX0xPTkcpOw0KKyAJCQkgIHdy
aXRlX2V4cF9lbHRfdHlwZSAoJDEudHlwZSk7DQorIAkJCSAgd3JpdGVfZXhwX2VsdF9sb25nY3N0
ICgoTE9OR0VTVCkoJDEudmFsKSk7DQorIAkJCSAgd3JpdGVfZXhwX2VsdF9vcGNvZGUgKE9QX0xP
TkcpOyB9DQorIAk7DQorIA0KKyBleHAJOglOQU1FX09SX0lOVA0KKyAJCQl7IFlZU1RZUEUgdmFs
Ow0KKyAJCQkgIHBhcnNlX251bWJlciAoJDEuc3Rva2VuLnB0ciwgJDEuc3Rva2VuLmxlbmd0aCwg
MCwgJnZhbCk7DQorIAkJCSAgd3JpdGVfZXhwX2VsdF9vcGNvZGUgKE9QX0xPTkcpOw0KKyAJCQkg
IHdyaXRlX2V4cF9lbHRfdHlwZSAodmFsLnR5cGVkX3ZhbF9pbnQudHlwZSk7DQorIAkJCSAgd3Jp
dGVfZXhwX2VsdF9sb25nY3N0ICgoTE9OR0VTVCl2YWwudHlwZWRfdmFsX2ludC52YWwpOw0KKyAJ
CQkgIHdyaXRlX2V4cF9lbHRfb3Bjb2RlIChPUF9MT05HKTsNCisgCQkJfQ0KKyAJOw0KKyANCisg
DQorIGV4cAk6CUZMT0FUDQorIAkJCXsgd3JpdGVfZXhwX2VsdF9vcGNvZGUgKE9QX0RPVUJMRSk7
DQorIAkJCSAgd3JpdGVfZXhwX2VsdF90eXBlICgkMS50eXBlKTsNCisgCQkJICB3cml0ZV9leHBf
ZWx0X2RibGNzdCAoJDEuZHZhbCk7DQorIAkJCSAgd3JpdGVfZXhwX2VsdF9vcGNvZGUgKE9QX0RP
VUJMRSk7IH0NCisgCTsNCisgDQorIGV4cAk6CXZhcmlhYmxlDQorIAk7DQorIA0KKyBleHAJOglW
QVJJQUJMRQ0KKyAJCQkvKiBBbHJlYWR5IHdyaXR0ZW4gYnkgd3JpdGVfZG9sbGFyX3ZhcmlhYmxl
LiAqLw0KKyAJOw0KKyANCisgZXhwCToJU0laRU9GICcoJyB0eXBlICcpJwklcHJlYyBVTkFSWQ0K
KyAJCQl7IHdyaXRlX2V4cF9lbHRfb3Bjb2RlIChPUF9MT05HKTsNCisgCQkJICB3cml0ZV9leHBf
ZWx0X3R5cGUgKGJ1aWx0aW5fdHlwZV9pbnQpOw0KKyAJCQkgIENIRUNLX1RZUEVERUYgKCQzKTsN
CisgCQkJICB3cml0ZV9leHBfZWx0X2xvbmdjc3QgKChMT05HRVNUKSBUWVBFX0xFTkdUSCAoJDMp
KTsNCisgCQkJICB3cml0ZV9leHBfZWx0X29wY29kZSAoT1BfTE9ORyk7IH0NCisgCTsNCisgDQor
IGV4cAk6CVNUUklORw0KKyAJCQl7IC8qIEMgc3RyaW5ncyBhcmUgY29udmVydGVkIGludG8gYXJy
YXkgY29uc3RhbnRzIHdpdGgNCisgCQkJICAgICBhbiBleHBsaWNpdCBudWxsIGJ5dGUgYWRkZWQg
YXQgdGhlIGVuZC4gIFRodXMNCisgCQkJICAgICB0aGUgYXJyYXkgdXBwZXIgYm91bmQgaXMgdGhl
IHN0cmluZyBsZW5ndGguDQorIAkJCSAgICAgVGhlcmUgaXMgbm8gc3VjaCB0aGluZyBpbiBDIGFz
IGEgY29tcGxldGVseSBlbXB0eQ0KKyAJCQkgICAgIHN0cmluZy4gKi8NCisgCQkJICBjaGFyICpz
cCA9ICQxLnB0cjsgaW50IGNvdW50ID0gJDEubGVuZ3RoOw0KKyAJCQkgIHdoaWxlIChjb3VudC0t
ID4gMCkNCisgCQkJICAgIHsNCisgCQkJICAgICAgd3JpdGVfZXhwX2VsdF9vcGNvZGUgKE9QX0xP
TkcpOw0KKyAJCQkgICAgICB3cml0ZV9leHBfZWx0X3R5cGUgKGJ1aWx0aW5fdHlwZV9jaGFyKTsN
CisgCQkJICAgICAgd3JpdGVfZXhwX2VsdF9sb25nY3N0ICgoTE9OR0VTVCkoKnNwKyspKTsNCisg
CQkJICAgICAgd3JpdGVfZXhwX2VsdF9vcGNvZGUgKE9QX0xPTkcpOw0KKyAJCQkgICAgfQ0KKyAJ
CQkgIHdyaXRlX2V4cF9lbHRfb3Bjb2RlIChPUF9MT05HKTsNCisgCQkJICB3cml0ZV9leHBfZWx0
X3R5cGUgKGJ1aWx0aW5fdHlwZV9jaGFyKTsNCisgCQkJICB3cml0ZV9leHBfZWx0X2xvbmdjc3Qg
KChMT05HRVNUKSdcMCcpOw0KKyAJCQkgIHdyaXRlX2V4cF9lbHRfb3Bjb2RlIChPUF9MT05HKTsN
CisgCQkJICB3cml0ZV9leHBfZWx0X29wY29kZSAoT1BfQVJSQVkpOw0KKyAJCQkgIHdyaXRlX2V4
cF9lbHRfbG9uZ2NzdCAoKExPTkdFU1QpIDApOw0KKyAJCQkgIHdyaXRlX2V4cF9lbHRfbG9uZ2Nz
dCAoKExPTkdFU1QpICgkMS5sZW5ndGgpKTsNCisgCQkJICB3cml0ZV9leHBfZWx0X29wY29kZSAo
T1BfQVJSQVkpOyB9DQorIAk7DQorIA0KKyAvKiBDKysuICAqLw0KKyBleHAJOglUSElTDQorIAkJ
CXsgd3JpdGVfZXhwX2VsdF9vcGNvZGUgKE9QX1RISVMpOw0KKyAJCQkgIHdyaXRlX2V4cF9lbHRf
b3Bjb2RlIChPUF9USElTKTsgfQ0KKyAJOw0KKyANCisgLyogZW5kIG9mIEMrKy4gICovDQorIA0K
KyBibG9jawk6CUJMT0NLTkFNRQ0KKyAJCQl7DQorIAkJCSAgaWYgKCQxLnN5bSAhPSAwKQ0KKyAJ
CQkgICAgICAkJCA9IFNZTUJPTF9CTE9DS19WQUxVRSAoJDEuc3ltKTsNCisgCQkJICBlbHNlDQor
IAkJCSAgICB7DQorIAkJCSAgICAgIHN0cnVjdCBzeW10YWIgKnRlbSA9DQorIAkJCQkgIGxvb2t1
cF9zeW10YWIgKGNvcHlfbmFtZSAoJDEuc3Rva2VuKSk7DQorIAkJCSAgICAgIGlmICh0ZW0pDQor
IAkJCQkkJCA9IEJMT0NLVkVDVE9SX0JMT0NLIChCTE9DS1ZFQ1RPUiAodGVtKSwgU1RBVElDX0JM
T0NLKTsNCisgCQkJICAgICAgZWxzZQ0KKyAJCQkJZXJyb3IgKCJObyBmaWxlIG9yIGZ1bmN0aW9u
IFwiJXNcIi4iLA0KKyAJCQkJICAgICAgIGNvcHlfbmFtZSAoJDEuc3Rva2VuKSk7DQorIAkJCSAg
ICB9DQorIAkJCX0NCisgCTsNCisgDQorIGJsb2NrCToJYmxvY2sgQ09MT05DT0xPTiBuYW1lDQor
IAkJCXsgc3RydWN0IHN5bWJvbCAqdGVtDQorIAkJCSAgICA9IGxvb2t1cF9zeW1ib2wgKGNvcHlf
bmFtZSAoJDMpLCAkMSwNCisgCQkJCQkgICAgIFZBUl9OQU1FU1BBQ0UsIChpbnQgKikgTlVMTCwN
CisgCQkJCQkgICAgIChzdHJ1Y3Qgc3ltdGFiICoqKSBOVUxMKTsNCisgCQkJICBpZiAoIXRlbSB8
fCBTWU1CT0xfQ0xBU1MgKHRlbSkgIT0gTE9DX0JMT0NLKQ0KKyAJCQkgICAgZXJyb3IgKCJObyBm
dW5jdGlvbiBcIiVzXCIgaW4gc3BlY2lmaWVkIGNvbnRleHQuIiwNCisgCQkJCSAgIGNvcHlfbmFt
ZSAoJDMpKTsNCisgCQkJICAkJCA9IFNZTUJPTF9CTE9DS19WQUxVRSAodGVtKTsgfQ0KKyAJOw0K
KyANCisgdmFyaWFibGU6CWJsb2NrIENPTE9OQ09MT04gbmFtZQ0KKyAJCQl7IHN0cnVjdCBzeW1i
b2wgKnN5bTsNCisgCQkJICBzeW0gPSBsb29rdXBfc3ltYm9sIChjb3B5X25hbWUgKCQzKSwgJDEs
DQorIAkJCQkJICAgICAgIFZBUl9OQU1FU1BBQ0UsIChpbnQgKikgTlVMTCwNCisgCQkJCQkgICAg
ICAgKHN0cnVjdCBzeW10YWIgKiopIE5VTEwpOw0KKyAJCQkgIGlmIChzeW0gPT0gMCkNCisgCQkJ
ICAgIGVycm9yICgiTm8gc3ltYm9sIFwiJXNcIiBpbiBzcGVjaWZpZWQgY29udGV4dC4iLA0KKyAJ
CQkJICAgY29weV9uYW1lICgkMykpOw0KKyANCisgCQkJICB3cml0ZV9leHBfZWx0X29wY29kZSAo
T1BfVkFSX1ZBTFVFKTsNCisgCQkJICAvKiBibG9ja19mb3VuZCBpcyBzZXQgYnkgbG9va3VwX3N5
bWJvbC4gICovDQorIAkJCSAgd3JpdGVfZXhwX2VsdF9ibG9jayAoYmxvY2tfZm91bmQpOw0KKyAJ
CQkgIHdyaXRlX2V4cF9lbHRfc3ltIChzeW0pOw0KKyAJCQkgIHdyaXRlX2V4cF9lbHRfb3Bjb2Rl
IChPUF9WQVJfVkFMVUUpOyB9DQorIAk7DQorIA0KKyBxdWFsaWZpZWRfbmFtZToJdHlwZWJhc2Ug
Q09MT05DT0xPTiBuYW1lDQorIAkJCXsNCisgCQkJICBzdHJ1Y3QgdHlwZSAqdHlwZSA9ICQxOw0K
KyAJCQkgIGlmIChUWVBFX0NPREUgKHR5cGUpICE9IFRZUEVfQ09ERV9TVFJVQ1QNCisgCQkJICAg
ICAgJiYgVFlQRV9DT0RFICh0eXBlKSAhPSBUWVBFX0NPREVfVU5JT04pDQorIAkJCSAgICBlcnJv
ciAoImAlcycgaXMgbm90IGRlZmluZWQgYXMgYW4gYWdncmVnYXRlIHR5cGUuIiwNCisgCQkJCSAg
IFRZUEVfTkFNRSAodHlwZSkpOw0KKyANCisgCQkJICB3cml0ZV9leHBfZWx0X29wY29kZSAoT1Bf
U0NPUEUpOw0KKyAJCQkgIHdyaXRlX2V4cF9lbHRfdHlwZSAodHlwZSk7DQorIAkJCSAgd3JpdGVf
ZXhwX3N0cmluZyAoJDMpOw0KKyAJCQkgIHdyaXRlX2V4cF9lbHRfb3Bjb2RlIChPUF9TQ09QRSk7
DQorIAkJCX0NCisgCTsNCisgDQorIHZhcmlhYmxlOglxdWFsaWZpZWRfbmFtZQ0KKyAJfAlDT0xP
TkNPTE9OIG5hbWUNCisgCQkJew0KKyAJCQkgIGNoYXIgKm5hbWUgPSBjb3B5X25hbWUgKCQyKTsN
CisgCQkJICBzdHJ1Y3Qgc3ltYm9sICpzeW07DQorIAkJCSAgc3RydWN0IG1pbmltYWxfc3ltYm9s
ICptc3ltYm9sOw0KKyANCisgCQkJICBzeW0gPQ0KKyAJCQkgICAgbG9va3VwX3N5bWJvbCAobmFt
ZSwgKGNvbnN0IHN0cnVjdCBibG9jayAqKSBOVUxMLA0KKyAJCQkJCSAgIFZBUl9OQU1FU1BBQ0Us
IChpbnQgKikgTlVMTCwNCisgCQkJCQkgICAoc3RydWN0IHN5bXRhYiAqKikgTlVMTCk7DQorIAkJ
CSAgaWYgKHN5bSkNCisgCQkJICAgIHsNCisgCQkJICAgICAgd3JpdGVfZXhwX2VsdF9vcGNvZGUg
KE9QX1ZBUl9WQUxVRSk7DQorIAkJCSAgICAgIHdyaXRlX2V4cF9lbHRfYmxvY2sgKE5VTEwpOw0K
KyAJCQkgICAgICB3cml0ZV9leHBfZWx0X3N5bSAoc3ltKTsNCisgCQkJICAgICAgd3JpdGVfZXhw
X2VsdF9vcGNvZGUgKE9QX1ZBUl9WQUxVRSk7DQorIAkJCSAgICAgIGJyZWFrOw0KKyAJCQkgICAg
fQ0KKyANCisgCQkJICBtc3ltYm9sID0gbG9va3VwX21pbmltYWxfc3ltYm9sIChuYW1lLCBOVUxM
LCBOVUxMKTsNCisgCQkJICBpZiAobXN5bWJvbCAhPSBOVUxMKQ0KKyAJCQkgICAgew0KKyAJCQkg
ICAgICB3cml0ZV9leHBfbXN5bWJvbCAobXN5bWJvbCwNCisgCQkJCQkJIGxvb2t1cF9mdW5jdGlv
bl90eXBlIChidWlsdGluX3R5cGVfaW50KSwNCisgCQkJCQkJIGJ1aWx0aW5fdHlwZV9pbnQpOw0K
KyAJCQkgICAgfQ0KKyAJCQkgIGVsc2UNCisgCQkJICAgIGlmICghaGF2ZV9mdWxsX3N5bWJvbHMg
KCkgJiYgIWhhdmVfcGFydGlhbF9zeW1ib2xzICgpKQ0KKyAJCQkgICAgICBlcnJvciAoIk5vIHN5
bWJvbCB0YWJsZSBpcyBsb2FkZWQuICBVc2UgdGhlIFwiZmlsZVwiIGNvbW1hbmQuIik7DQorIAkJ
CSAgICBlbHNlDQorIAkJCSAgICAgIGVycm9yICgiTm8gc3ltYm9sIFwiJXNcIiBpbiBjdXJyZW50
IGNvbnRleHQuIiwgbmFtZSk7DQorIAkJCX0NCisgCTsNCisgDQorIHZhcmlhYmxlOgluYW1lX25v
dF90eXBlbmFtZQ0KKyAJCQl7IHN0cnVjdCBzeW1ib2wgKnN5bSA9ICQxLnN5bTsNCisgDQorIAkJ
CSAgaWYgKHN5bSkNCisgCQkJICAgIHsNCisgCQkJICAgICAgaWYgKHN5bWJvbF9yZWFkX25lZWRz
X2ZyYW1lIChzeW0pKQ0KKyAJCQkJew0KKyAJCQkJICBpZiAoaW5uZXJtb3N0X2Jsb2NrID09IDAg
fHwNCisgCQkJCSAgICAgIGNvbnRhaW5lZF9pbiAoYmxvY2tfZm91bmQsIA0KKyAJCQkJCQkgICAg
aW5uZXJtb3N0X2Jsb2NrKSkNCisgCQkJCSAgICBpbm5lcm1vc3RfYmxvY2sgPSBibG9ja19mb3Vu
ZDsNCisgCQkJCX0NCisgDQorIAkJCSAgICAgIHdyaXRlX2V4cF9lbHRfb3Bjb2RlIChPUF9WQVJf
VkFMVUUpOw0KKyAJCQkgICAgICAvKiBXZSB3YW50IHRvIHVzZSB0aGUgc2VsZWN0ZWQgZnJhbWUs
IG5vdA0KKyAJCQkJIGFub3RoZXIgbW9yZSBpbm5lciBmcmFtZSB3aGljaCBoYXBwZW5zIHRvDQor
IAkJCQkgYmUgaW4gdGhlIHNhbWUgYmxvY2suICAqLw0KKyAJCQkgICAgICB3cml0ZV9leHBfZWx0
X2Jsb2NrIChOVUxMKTsNCisgCQkJICAgICAgd3JpdGVfZXhwX2VsdF9zeW0gKHN5bSk7DQorIAkJ
CSAgICAgIHdyaXRlX2V4cF9lbHRfb3Bjb2RlIChPUF9WQVJfVkFMVUUpOw0KKyAJCQkgICAgfQ0K
KyAJCQkgIGVsc2UgaWYgKCQxLmlzX2FfZmllbGRfb2ZfdGhpcykNCisgCQkJICAgIHsNCisgCQkJ
ICAgICAgLyogQysrOiBpdCBoYW5ncyBvZmYgb2YgYHRoaXMnLiAgTXVzdA0KKyAJCQkgICAgICAg
ICBub3QgaW5hZHZlcnRlbnRseSBjb252ZXJ0IGZyb20gYSBtZXRob2QgY2FsbA0KKyAJCQkJIHRv
IGRhdGEgcmVmLiAgKi8NCisgCQkJICAgICAgaWYgKGlubmVybW9zdF9ibG9jayA9PSAwIHx8IA0K
KyAJCQkJICBjb250YWluZWRfaW4gKGJsb2NrX2ZvdW5kLCBpbm5lcm1vc3RfYmxvY2spKQ0KKyAJ
CQkJaW5uZXJtb3N0X2Jsb2NrID0gYmxvY2tfZm91bmQ7DQorIAkJCSAgICAgIHdyaXRlX2V4cF9l
bHRfb3Bjb2RlIChPUF9USElTKTsNCisgCQkJICAgICAgd3JpdGVfZXhwX2VsdF9vcGNvZGUgKE9Q
X1RISVMpOw0KKyAJCQkgICAgICB3cml0ZV9leHBfZWx0X29wY29kZSAoU1RSVUNUT1BfUFRSKTsN
CisgCQkJICAgICAgd3JpdGVfZXhwX3N0cmluZyAoJDEuc3Rva2VuKTsNCisgCQkJICAgICAgd3Jp
dGVfZXhwX2VsdF9vcGNvZGUgKFNUUlVDVE9QX1BUUik7DQorIAkJCSAgICB9DQorIAkJCSAgZWxz
ZQ0KKyAJCQkgICAgew0KKyAJCQkgICAgICBzdHJ1Y3QgbWluaW1hbF9zeW1ib2wgKm1zeW1ib2w7
DQorIAkJCSAgICAgIHJlZ2lzdGVyIGNoYXIgKmFyZyA9IGNvcHlfbmFtZSAoJDEuc3Rva2VuKTsN
CisgDQorIAkJCSAgICAgIG1zeW1ib2wgPQ0KKyAJCQkJbG9va3VwX21pbmltYWxfc3ltYm9sIChh
cmcsIE5VTEwsIE5VTEwpOw0KKyAJCQkgICAgICBpZiAobXN5bWJvbCAhPSBOVUxMKQ0KKyAJCQkJ
ew0KKyAJCQkJICB3cml0ZV9leHBfbXN5bWJvbCAobXN5bWJvbCwNCisgCQkJCQkJICAgICBsb29r
dXBfZnVuY3Rpb25fdHlwZSAoYnVpbHRpbl90eXBlX2ludCksDQorIAkJCQkJCSAgICAgYnVpbHRp
bl90eXBlX2ludCk7DQorIAkJCQl9DQorIAkJCSAgICAgIGVsc2UgaWYgKCFoYXZlX2Z1bGxfc3lt
Ym9scyAoKSAmJiAhaGF2ZV9wYXJ0aWFsX3N5bWJvbHMgKCkpDQorIAkJCQllcnJvciAoIk5vIHN5
bWJvbCB0YWJsZSBpcyBsb2FkZWQuICBVc2UgdGhlIFwiZmlsZVwiIGNvbW1hbmQuIik7DQorIAkJ
CSAgICAgIGVsc2UNCisgCQkJCWVycm9yICgiTm8gc3ltYm9sIFwiJXNcIiBpbiBjdXJyZW50IGNv
bnRleHQuIiwNCisgCQkJCSAgICAgICBjb3B5X25hbWUgKCQxLnN0b2tlbikpOw0KKyAJCQkgICAg
fQ0KKyAJCQl9DQorIAk7DQorIA0KKyANCisgcHR5cGUJOgl0eXBlYmFzZQ0KKyAJOw0KKyANCisg
LyogV2UgdXNlZCB0byB0cnkgdG8gcmVjb2duaXplIG1vcmUgcG9pbnRlciB0byBtZW1iZXIgdHlw
ZXMgaGVyZSwgYnV0DQorICAgIHRoYXQgZGlkbid0IHdvcmsgKHNoaWZ0L3JlZHVjZSBjb25mbGlj
dHMgbWVhbnQgdGhhdCB0aGVzZSBydWxlcyBuZXZlcg0KKyAgICBnb3QgZXhlY3V0ZWQpLiAgVGhl
IHByb2JsZW0gaXMgdGhhdA0KKyAgICAgIGludCAoZm9vOjpiYXI6OmJhejo6Yml6emxlKQ0KKyAg
ICBpcyBhIGZ1bmN0aW9uIHR5cGUgYnV0DQorICAgICAgaW50IChmb286OmJhcjo6YmF6OjpiaXp6
bGU6OiopDQorICAgIGlzIGEgcG9pbnRlciB0byBtZW1iZXIgdHlwZS4gIFN0cm91c3RydXAgbG9z
ZXMgYWdhaW4hICAqLw0KKyANCisgdHlwZQk6CXB0eXBlDQorIAl8CXR5cGViYXNlIENPTE9OQ09M
T04gJyonDQorIAkJCXsgJCQgPSBsb29rdXBfbWVtYmVyX3R5cGUgKGJ1aWx0aW5fdHlwZV9pbnQs
ICQxKTsgfQ0KKyAJOw0KKyANCisgdHlwZWJhc2UgIC8qIEltcGxlbWVudHMgKGFwcHJveGltYXRl
bHkpOiAodHlwZS1xdWFsaWZpZXIpKiB0eXBlLXNwZWNpZmllciAqLw0KKyAJOglUWVBFTkFNRQ0K
KyAJCQl7ICQkID0gJDEudHlwZTsgfQ0KKyAJfAlTVFJVQ1QgbmFtZQ0KKyAJCQl7ICQkID0gbG9v
a3VwX3N0cnVjdCAoY29weV9uYW1lICgkMiksDQorIAkJCQkJICAgICAgZXhwcmVzc2lvbl9jb250
ZXh0X2Jsb2NrKTsgfQ0KKyAJfAlDTEFTUyBuYW1lDQorIAkJCXsgJCQgPSBsb29rdXBfc3RydWN0
IChjb3B5X25hbWUgKCQyKSwNCisgCQkJCQkgICAgICBleHByZXNzaW9uX2NvbnRleHRfYmxvY2sp
OyB9DQorIAkvKiAiY29uc3QiIGFuZCAidm9sYXRpbGUiIGFyZSBjdXJlbnRseSBpZ25vcmVkLiAg
QSB0eXBlIHF1YWxpZmllcg0KKyAJICAgYWZ0ZXIgdGhlIHR5cGUgaXMgaGFuZGxlZCBpbiB0aGUg
cHR5cGUgcnVsZS4gIEkgdGhpbmsgdGhlc2UgY291bGQNCisgCSAgIGJlIHRvby4gICovDQorIAk7
DQorIA0KKyBuYW1lCToJTkFNRSB7ICQkID0gJDEuc3Rva2VuOyB9DQorIAl8CUJMT0NLTkFNRSB7
ICQkID0gJDEuc3Rva2VuOyB9DQorIAl8CVRZUEVOQU1FIHsgJCQgPSAkMS5zdG9rZW47IH0NCisg
CXwJTkFNRV9PUl9JTlQgIHsgJCQgPSAkMS5zdG9rZW47IH0NCisgCTsNCisgDQorIG5hbWVfbm90
X3R5cGVuYW1lIDoJTkFNRQ0KKyAJfAlCTE9DS05BTUUNCisgLyogVGhlc2Ugd291bGQgYmUgdXNl
ZnVsIGlmIG5hbWVfbm90X3R5cGVuYW1lIHdhcyB1c2VmdWwsIGJ1dCBpdCBpcyBqdXN0DQorICAg
IGEgZmFrZSBmb3IgInZhcmlhYmxlIiwgc28gdGhlc2UgY2F1c2UgcmVkdWNlL3JlZHVjZSBjb25m
bGljdHMgYmVjYXVzZQ0KKyAgICB0aGUgcGFyc2VyIGNhbid0IHRlbGwgd2hldGhlciBOQU1FX09S
X0lOVCBpcyBhIG5hbWVfbm90X3R5cGVuYW1lICg9dmFyaWFibGUsDQorICAgID1leHApIG9yIGp1
c3QgYW4gZXhwLiAgSWYgbmFtZV9ub3RfdHlwZW5hbWUgd2FzIGV2ZXIgdXNlZCBpbiBhbiBsdmFs
dWUNCisgICAgY29udGV4dCB3aGVyZSBvbmx5IGEgbmFtZSBjb3VsZCBvY2N1ciwgdGhpcyBtaWdo
dCBiZSB1c2VmdWwuDQorICAgCXwJTkFNRV9PUl9JTlQNCisgICovDQorIAk7DQorIA0KKyAlJQ0K
KyANCisgLyogVGFrZSBjYXJlIG9mIHBhcnNpbmcgYSBudW1iZXIgKGFueXRoaW5nIHRoYXQgc3Rh
cnRzIHdpdGggYSBkaWdpdCkuDQorICAgIFNldCB5eWx2YWwgYW5kIHJldHVybiB0aGUgdG9rZW4g
dHlwZTsgdXBkYXRlIGxleHB0ci4NCisgICAgTEVOIGlzIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVy
cyBpbiBpdC4gICovDQorIA0KKyAvKioqIE5lZWRzIHNvbWUgZXJyb3IgY2hlY2tpbmcgZm9yIHRo
ZSBmbG9hdCBjYXNlICoqKi8NCisgDQorIHN0YXRpYyBpbnQNCisgcGFyc2VfbnVtYmVyIChwLCBs
ZW4sIHBhcnNlZF9mbG9hdCwgcHV0aXRoZXJlKQ0KKyAgICAgIHJlZ2lzdGVyIGNoYXIgKnA7DQor
ICAgICAgcmVnaXN0ZXIgaW50IGxlbjsNCisgICAgICBpbnQgcGFyc2VkX2Zsb2F0Ow0KKyAgICAg
IFlZU1RZUEUgKnB1dGl0aGVyZTsNCisgew0KKyAgIC8qIEZJWE1FOiBTaG91bGRuJ3QgdGhlc2Ug
YmUgdW5zaWduZWQ/ICBXZSBkb24ndCBkZWFsIHdpdGggbmVnYXRpdmUgdmFsdWVzDQorICAgICAg
aGVyZSwgYW5kIHdlIGRvIGtpbmQgb2Ygc2lsbHkgdGhpbmdzIGxpa2UgY2FzdCB0byB1bnNpZ25l
ZC4gICovDQorICAgcmVnaXN0ZXIgTE9OR0VTVCBuID0gMDsNCisgICByZWdpc3RlciBMT05HRVNU
IHByZXZuID0gMDsNCisgICBVTE9OR0VTVCB1bjsNCisgDQorICAgcmVnaXN0ZXIgaW50IGkgPSAw
Ow0KKyAgIHJlZ2lzdGVyIGludCBjOw0KKyAgIHJlZ2lzdGVyIGludCBiYXNlID0gaW5wdXRfcmFk
aXg7DQorICAgaW50IHVuc2lnbmVkX3AgPSAwOw0KKyANCisgICAvKiBOdW1iZXIgb2YgIkwiIHN1
ZmZpeGVzIGVuY291bnRlcmVkLiAgKi8NCisgICBpbnQgbG9uZ19wID0gMDsNCisgDQorICAgLyog
V2UgaGF2ZSBmb3VuZCBhICJMIiBvciAiVSIgc3VmZml4LiAgKi8NCisgICBpbnQgZm91bmRfc3Vm
Zml4ID0gMDsNCisgDQorICAgVUxPTkdFU1QgaGlnaF9iaXQ7DQorICAgc3RydWN0IHR5cGUgKnNp
Z25lZF90eXBlOw0KKyAgIHN0cnVjdCB0eXBlICp1bnNpZ25lZF90eXBlOw0KKyANCisgICBpZiAo
cGFyc2VkX2Zsb2F0KQ0KKyAgICAgew0KKyAgICAgICAvKiBJdCdzIGEgZmxvYXQgc2luY2UgaXQg
Y29udGFpbnMgYSBwb2ludCBvciBhbiBleHBvbmVudC4gICovDQorICAgICAgIGNoYXIgYzsNCisg
ICAgICAgaW50IG51bSA9IDA7CS8qIG51bWJlciBvZiB0b2tlbnMgc2Nhbm5lZCBieSBzY2FuZiAq
Lw0KKyAgICAgICBjaGFyIHNhdmVkX2NoYXIgPSBwW2xlbl07DQorIA0KKyAgICAgICBwW2xlbl0g
PSAwOwkvKiBudWxsLXRlcm1pbmF0ZSB0aGUgdG9rZW4gKi8NCisgICAgICAgaWYgKHNpemVvZiAo
cHV0aXRoZXJlLT50eXBlZF92YWxfZmxvYXQuZHZhbCkgPD0gc2l6ZW9mIChmbG9hdCkpDQorIAlu
dW0gPSBzc2NhbmYgKHAsICIlZyVjIiwgKGZsb2F0ICopICZwdXRpdGhlcmUtPnR5cGVkX3ZhbF9m
bG9hdC5kdmFsLCZjKTsNCisgICAgICAgZWxzZSBpZiAoc2l6ZW9mIChwdXRpdGhlcmUtPnR5cGVk
X3ZhbF9mbG9hdC5kdmFsKSA8PSBzaXplb2YgKGRvdWJsZSkpDQorIAludW0gPSBzc2NhbmYgKHAs
ICIlbGclYyIsIChkb3VibGUgKikgJnB1dGl0aGVyZS0+dHlwZWRfdmFsX2Zsb2F0LmR2YWwsJmMp
Ow0KKyAgICAgICBlbHNlDQorIAl7DQorICNpZmRlZiBTQ0FORl9IQVNfTE9OR19ET1VCTEUNCisg
CSAgbnVtID0gc3NjYW5mIChwLCAiJUxnJWMiLCAmcHV0aXRoZXJlLT50eXBlZF92YWxfZmxvYXQu
ZHZhbCwmYyk7DQorICNlbHNlDQorIAkgIC8qIFNjYW4gaXQgaW50byBhIGRvdWJsZSwgdGhlbiBh
c3NpZ24gaXQgdG8gdGhlIGxvbmcgZG91YmxlLg0KKyAJICAgICBUaGlzIGF0IGxlYXN0IHdpbnMg
d2l0aCB2YWx1ZXMgcmVwcmVzZW50YWJsZSBpbiB0aGUgcmFuZ2UNCisgCSAgICAgb2YgZG91Ymxl
cy4gKi8NCisgCSAgZG91YmxlIHRlbXA7DQorIAkgIG51bSA9IHNzY2FuZiAocCwgIiVsZyVjIiwg
JnRlbXAsJmMpOw0KKyAJICBwdXRpdGhlcmUtPnR5cGVkX3ZhbF9mbG9hdC5kdmFsID0gdGVtcDsN
CisgI2VuZGlmDQorIAl9DQorICAgICAgIHBbbGVuXSA9IHNhdmVkX2NoYXI7CS8qIHJlc3RvcmUg
dGhlIGlucHV0IHN0cmVhbSAqLw0KKyAgICAgICBpZiAobnVtICE9IDEpIAkJLyogY2hlY2sgc2Nh
bmYgZm91bmQgT05MWSBhIGZsb2F0IC4uLiAqLw0KKyAJcmV0dXJuIEVSUk9SOw0KKyAgICAgICAv
KiBTZWUgaWYgaXQgaGFzIGBmJyBvciBgbCcgc3VmZml4IChmbG9hdCBvciBsb25nIGRvdWJsZSku
ICAqLw0KKyANCisgICAgICAgYyA9IHRvbG93ZXIgKHBbbGVuIC0gMV0pOw0KKyANCisgICAgICAg
aWYgKGMgPT0gJ2YnKQ0KKyAJcHV0aXRoZXJlLT50eXBlZF92YWxfZmxvYXQudHlwZSA9IGJ1aWx0
aW5fdHlwZV9mbG9hdDsNCisgICAgICAgZWxzZSBpZiAoYyA9PSAnbCcpDQorIAlwdXRpdGhlcmUt
PnR5cGVkX3ZhbF9mbG9hdC50eXBlID0gYnVpbHRpbl90eXBlX2xvbmdfZG91YmxlOw0KKyAgICAg
ICBlbHNlIGlmIChpc2RpZ2l0IChjKSB8fCBjID09ICcuJykNCisgCXB1dGl0aGVyZS0+dHlwZWRf
dmFsX2Zsb2F0LnR5cGUgPSBidWlsdGluX3R5cGVfZG91YmxlOw0KKyAgICAgICBlbHNlDQorIAly
ZXR1cm4gRVJST1I7DQorIA0KKyAgICAgICByZXR1cm4gRkxPQVQ7DQorICAgICB9DQorIA0KKyAg
IC8qIEhhbmRsZSBiYXNlLXN3aXRjaGluZyBwcmVmaXhlcyAweCwgMHQsIDBkLCAwICovDQorICAg
aWYgKHBbMF0gPT0gJzAnKQ0KKyAgICAgc3dpdGNoIChwWzFdKQ0KKyAgICAgICB7DQorICAgICAg
IGNhc2UgJ3gnOg0KKyAgICAgICBjYXNlICdYJzoNCisgCWlmIChsZW4gPj0gMykNCisgCSAgew0K
KyAJICAgIHAgKz0gMjsNCisgCSAgICBiYXNlID0gMTY7DQorIAkgICAgbGVuIC09IDI7DQorIAkg
IH0NCisgCWJyZWFrOw0KKyANCisgICAgICAgY2FzZSAndCc6DQorICAgICAgIGNhc2UgJ1QnOg0K
KyAgICAgICBjYXNlICdkJzoNCisgICAgICAgY2FzZSAnRCc6DQorIAlpZiAobGVuID49IDMpDQor
IAkgIHsNCisgCSAgICBwICs9IDI7DQorIAkgICAgYmFzZSA9IDEwOw0KKyAJICAgIGxlbiAtPSAy
Ow0KKyAJICB9DQorIAlicmVhazsNCisgDQorICAgICAgIGRlZmF1bHQ6DQorIAliYXNlID0gODsN
CisgCWJyZWFrOw0KKyAgICAgICB9DQorIA0KKyAgIHdoaWxlIChsZW4tLSA+IDApDQorICAgICB7
DQorICAgICAgIGMgPSAqcCsrOw0KKyAgICAgICBpZiAoYyA+PSAnQScgJiYgYyA8PSAnWicpDQor
IAljICs9ICdhJyAtICdBJzsNCisgICAgICAgaWYgKGMgIT0gJ2wnICYmIGMgIT0gJ3UnKQ0KKyAJ
biAqPSBiYXNlOw0KKyAgICAgICBpZiAoYyA+PSAnMCcgJiYgYyA8PSAnOScpDQorIAl7DQorIAkg
IGlmIChmb3VuZF9zdWZmaXgpDQorIAkgICAgcmV0dXJuIEVSUk9SOw0KKyAJICBuICs9IGkgPSBj
IC0gJzAnOw0KKyAJfQ0KKyAgICAgICBlbHNlDQorIAl7DQorIAkgIGlmIChiYXNlID4gMTAgJiYg
YyA+PSAnYScgJiYgYyA8PSAnZicpDQorIAkgICAgew0KKyAJICAgICAgaWYgKGZvdW5kX3N1ZmZp
eCkNCisgCQlyZXR1cm4gRVJST1I7DQorIAkgICAgICBuICs9IGkgPSBjIC0gJ2EnICsgMTA7DQor
IAkgICAgfQ0KKyAJICBlbHNlIGlmIChjID09ICdsJykNCisgCSAgICB7DQorIAkgICAgICArK2xv
bmdfcDsNCisgCSAgICAgIGZvdW5kX3N1ZmZpeCA9IDE7DQorIAkgICAgfQ0KKyAJICBlbHNlIGlm
IChjID09ICd1JykNCisgCSAgICB7DQorIAkgICAgICB1bnNpZ25lZF9wID0gMTsNCisgCSAgICAg
IGZvdW5kX3N1ZmZpeCA9IDE7DQorIAkgICAgfQ0KKyAJICBlbHNlDQorIAkgICAgcmV0dXJuIEVS
Uk9SOwkvKiBDaGFyIG5vdCBhIGRpZ2l0ICovDQorIAl9DQorICAgICAgIGlmIChpID49IGJhc2Up
DQorIAlyZXR1cm4gRVJST1I7CQkvKiBJbnZhbGlkIGRpZ2l0IGluIHRoaXMgYmFzZSAqLw0KKyAN
CisgICAgICAgLyogUG9ydGFibHkgdGVzdCBmb3Igb3ZlcmZsb3cgKG9ubHkgd29ya3MgZm9yIG5v
bnplcm8gdmFsdWVzLCBzbyBtYWtlDQorIAkgYSBzZWNvbmQgY2hlY2sgZm9yIHplcm8pLiAgRklY
TUU6IENhbid0IHdlIGp1c3QgbWFrZSBuIGFuZCBwcmV2bg0KKyAJIHVuc2lnbmVkIGFuZCBhdm9p
ZCB0aGlzPyAgKi8NCisgICAgICAgaWYgKGMgIT0gJ2wnICYmIGMgIT0gJ3UnICYmIChwcmV2biA+
PSBuKSAmJiBuICE9IDApDQorIAl1bnNpZ25lZF9wID0gMTsJCS8qIFRyeSBzb21ldGhpbmcgdW5z
aWduZWQgKi8NCisgDQorICAgICAgIC8qIFBvcnRhYmx5IHRlc3QgZm9yIHVuc2lnbmVkIG92ZXJm
bG93Lg0KKyAJIEZJWE1FOiBUaGlzIGNoZWNrIGlzIHdyb25nOyBmb3IgZXhhbXBsZSBpdCBkb2Vz
bid0IGZpbmQgb3ZlcmZsb3cNCisgCSBvbiAweDEyMzQ1Njc4OSB3aGVuIExPTkdFU1QgaXMgMzIg
Yml0cy4gICovDQorICAgICAgIGlmIChjICE9ICdsJyAmJiBjICE9ICd1JyAmJiBuICE9IDApDQor
IAl7CQ0KKyAJICBpZiAoKHVuc2lnbmVkX3AgJiYgKFVMT05HRVNUKSBwcmV2biA+PSAoVUxPTkdF
U1QpIG4pKQ0KKyAJICAgIGVycm9yICgiTnVtZXJpYyBjb25zdGFudCB0b28gbGFyZ2UuIik7DQor
IAl9DQorICAgICAgIHByZXZuID0gbjsNCisgICAgIH0NCisgDQorICAgLyogQW4gaW50ZWdlciBj
b25zdGFudCBpcyBhbiBpbnQsIGEgbG9uZywgb3IgYSBsb25nIGxvbmcuICBBbiBMDQorICAgICAg
c3VmZml4IGZvcmNlcyBpdCB0byBiZSBsb25nOyBhbiBMTCBzdWZmaXggZm9yY2VzIGl0IHRvIGJl
IGxvbmcNCisgICAgICBsb25nLiAgSWYgbm90IGZvcmNlZCB0byBhIGxhcmdlciBzaXplLCBpdCBn
ZXRzIHRoZSBmaXJzdCB0eXBlIG9mDQorICAgICAgdGhlIGFib3ZlIHRoYXQgaXQgZml0cyBpbi4g
IFRvIGZpZ3VyZSBvdXQgd2hldGhlciBpdCBmaXRzLCB3ZQ0KKyAgICAgIHNoaWZ0IGl0IHJpZ2h0
IGFuZCBzZWUgd2hldGhlciBhbnl0aGluZyByZW1haW5zLiAgTm90ZSB0aGF0IHdlDQorICAgICAg
Y2FuJ3Qgc2hpZnQgc2l6ZW9mIChMT05HRVNUKSAqIEhPU1RfQ0hBUl9CSVQgYml0cyBvciBtb3Jl
IGluIG9uZQ0KKyAgICAgIG9wZXJhdGlvbiwgYmVjYXVzZSBtYW55IGNvbXBpbGVycyB3aWxsIHdh
cm4gYWJvdXQgc3VjaCBhIHNoaWZ0DQorICAgICAgKHdoaWNoIGFsd2F5cyBwcm9kdWNlcyBhIHpl
cm8gcmVzdWx0KS4gIFNvbWV0aW1lcyBUQVJHRVRfSU5UX0JJVA0KKyAgICAgIG9yIFRBUkdFVF9M
T05HX0JJVCB3aWxsIGJlIHRoYXQgYmlnLCBzb21ldGltZXMgbm90LiAgVG8gZGVhbCB3aXRoDQor
ICAgICAgdGhlIGNhc2Ugd2hlcmUgaXQgaXMgd2UganVzdCBhbHdheXMgc2hpZnQgdGhlIHZhbHVl
IG1vcmUgdGhhbg0KKyAgICAgIG9uY2UsIHdpdGggZmV3ZXIgYml0cyBlYWNoIHRpbWUuICAqLw0K
KyANCisgICB1biA9IChVTE9OR0VTVCluID4+IDI7DQorICAgaWYgKGxvbmdfcCA9PSAwDQorICAg
ICAgICYmICh1biA+PiAoVEFSR0VUX0lOVF9CSVQgLSAyKSkgPT0gMCkNCisgICAgIHsNCisgICAg
ICAgaGlnaF9iaXQgPSAoKFVMT05HRVNUKTEpIDw8IChUQVJHRVRfSU5UX0JJVC0xKTsNCisgDQor
ICAgICAgIC8qIEEgbGFyZ2UgZGVjaW1hbCAobm90IGhleCBvciBvY3RhbCkgY29uc3RhbnQgKGJl
dHdlZW4gSU5UX01BWA0KKyAJIGFuZCBVSU5UX01BWCkgaXMgYSBsb25nIG9yIHVuc2lnbmVkIGxv
bmcsIGFjY29yZGluZyB0byBBTlNJLA0KKyAJIG5ldmVyIGFuIHVuc2lnbmVkIGludCwgYnV0IHRo
aXMgY29kZSB0cmVhdHMgaXQgYXMgdW5zaWduZWQNCisgCSBpbnQuICBUaGlzIHByb2JhYmx5IHNo
b3VsZCBiZSBmaXhlZC4gIEdDQyBnaXZlcyBhIHdhcm5pbmcgb24NCisgCSBzdWNoIGNvbnN0YW50
cy4gICovDQorIA0KKyAgICAgICB1bnNpZ25lZF90eXBlID0gYnVpbHRpbl90eXBlX3Vuc2lnbmVk
X2ludDsNCisgICAgICAgc2lnbmVkX3R5cGUgPSBidWlsdGluX3R5cGVfaW50Ow0KKyAgICAgfQ0K
KyAgIGVsc2UgaWYgKGxvbmdfcCA8PSAxDQorIAkgICAmJiAodW4gPj4gKFRBUkdFVF9MT05HX0JJ
VCAtIDIpKSA9PSAwKQ0KKyAgICAgew0KKyAgICAgICBoaWdoX2JpdCA9ICgoVUxPTkdFU1QpMSkg
PDwgKFRBUkdFVF9MT05HX0JJVC0xKTsNCisgICAgICAgdW5zaWduZWRfdHlwZSA9IGJ1aWx0aW5f
dHlwZV91bnNpZ25lZF9sb25nOw0KKyAgICAgICBzaWduZWRfdHlwZSA9IGJ1aWx0aW5fdHlwZV9s
b25nOw0KKyAgICAgfQ0KKyAgIGVsc2UNCisgICAgIHsNCisgICAgICAgaGlnaF9iaXQgPSAoKChV
TE9OR0VTVCkxKQ0KKyAJCSAgPDwgKFRBUkdFVF9MT05HX0xPTkdfQklUIC0gMzIgLSAxKQ0KKyAJ
CSAgPDwgMTYNCisgCQkgIDw8IDE2KTsNCisgICAgICAgaWYgKGhpZ2hfYml0ID09IDApDQorIAkv
KiBBIGxvbmcgbG9uZyBkb2VzIG5vdCBmaXQgaW4gYSBMT05HRVNULiAgKi8NCisgCWhpZ2hfYml0
ID0NCisgCSAgKFVMT05HRVNUKTEgPDwgKHNpemVvZiAoTE9OR0VTVCkgKiBIT1NUX0NIQVJfQklU
IC0gMSk7DQorICAgICAgIHVuc2lnbmVkX3R5cGUgPSBidWlsdGluX3R5cGVfdW5zaWduZWRfbG9u
Z19sb25nOw0KKyAgICAgICBzaWduZWRfdHlwZSA9IGJ1aWx0aW5fdHlwZV9sb25nX2xvbmc7DQor
ICAgICB9DQorIA0KKyAgICBwdXRpdGhlcmUtPnR5cGVkX3ZhbF9pbnQudmFsID0gbjsNCisgDQor
ICAgIC8qIElmIHRoZSBoaWdoIGJpdCBvZiB0aGUgd29ya2VkIG91dCB0eXBlIGlzIHNldCB0aGVu
IHRoaXMgbnVtYmVyDQorICAgICAgIGhhcyB0byBiZSB1bnNpZ25lZC4gKi8NCisgDQorICAgIGlm
ICh1bnNpZ25lZF9wIHx8IChuICYgaGlnaF9iaXQpKSANCisgICAgICB7DQorICAgICAgICBwdXRp
dGhlcmUtPnR5cGVkX3ZhbF9pbnQudHlwZSA9IHVuc2lnbmVkX3R5cGU7DQorICAgICAgfQ0KKyAg
ICBlbHNlIA0KKyAgICAgIHsNCisgICAgICAgIHB1dGl0aGVyZS0+dHlwZWRfdmFsX2ludC50eXBl
ID0gc2lnbmVkX3R5cGU7DQorICAgICAgfQ0KKyANCisgICAgcmV0dXJuIElOVDsNCisgfQ0KKyAN
Cisgc3RydWN0IHRva2VuDQorIHsNCisgICBjaGFyICpvcGVyYXRvcjsNCisgICBpbnQgdG9rZW47
DQorICAgZW51bSBleHBfb3Bjb2RlIG9wY29kZTsNCisgfTsNCisgDQorIHN0YXRpYyBjb25zdCBz
dHJ1Y3QgdG9rZW4gdG9rZW50YWIzW10gPQ0KKyAgIHsNCisgICAgIHsic2hyIiwgUlNILCBCSU5P
UF9FTkR9LA0KKyAgICAgeyJzaGwiLCBMU0gsIEJJTk9QX0VORH0sDQorICAgICB7ImFuZCIsIEFO
REFORCwgQklOT1BfRU5EfSwNCisgICAgIHsiZGl2IiwgRElWLCBCSU5PUF9FTkR9LA0KKyAgICAg
eyJub3QiLCBOT1QsIEJJTk9QX0VORH0sDQorICAgICB7Im1vZCIsIE1PRCwgQklOT1BfRU5EfSwN
CisgICAgIHsiaW5jIiwgSU5DUkVNRU5ULCBCSU5PUF9FTkR9LA0KKyAgICAgeyJkZWMiLCBERUNS
RU1FTlQsIEJJTk9QX0VORH0sDQorICAgICB7InhvciIsIFhPUiwgQklOT1BfRU5EfQ0KKyAgIH07
DQorIA0KKyBzdGF0aWMgY29uc3Qgc3RydWN0IHRva2VuIHRva2VudGFiMltdID0NCisgICB7DQor
ICAgICB7Im9yIiwgT1IsIEJJTk9QX0VORH0sDQorICAgICB7Ijw+IiwgTk9URVFVQUwsIEJJTk9Q
X0VORH0sDQorICAgICB7Ijw9IiwgTEVRLCBCSU5PUF9FTkR9LA0KKyAgICAgeyI+PSIsIEdFUSwg
QklOT1BfRU5EfSwNCisgICAgIHsiOj0iLCBBU1NJR04sIEJJTk9QX0VORH0NCisgICB9Ow0KKyAN
CisgLyogUmVhZCBvbmUgdG9rZW4sIGdldHRpbmcgY2hhcmFjdGVycyB0aHJvdWdoIGxleHB0ci4g
ICovDQorIA0KKyBzdGF0aWMgaW50DQorIHl5bGV4ICgpDQorIHsNCisgICBpbnQgYzsNCisgICBp
bnQgbmFtZWxlbjsNCisgICB1bnNpZ25lZCBpbnQgaTsNCisgICBjaGFyICp0b2tzdGFydDsNCisg
ICBjaGFyICp1cHRva3N0YXJ0Ow0KKyAgIGNoYXIgKnRva3B0cjsNCisgICBjaGFyICpwOw0KKyAg
IGludCB0ZW1wYnVmaW5kZXg7DQorICAgc3RhdGljIGNoYXIgKnRlbXBidWY7DQorICAgc3RhdGlj
IGludCB0ZW1wYnVmc2l6ZTsNCisgICANCisgIHJldHJ5Og0KKyANCisgICB0b2tzdGFydCA9IGxl
eHB0cjsNCisgICAvKiBTZWUgaWYgaXQgaXMgYSBzcGVjaWFsIHRva2VuIG9mIGxlbmd0aCAzLiAg
Ki8NCisgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mIHRva2VudGFiMyAvIHNpemVvZiB0b2tlbnRh
YjNbMF07IGkrKykNCisgICAgIGlmIChTVFJFUU4gKHRva3N0YXJ0LCB0b2tlbnRhYjNbaV0ub3Bl
cmF0b3IsIDMpKQ0KKyAgICAgICB7DQorIAlsZXhwdHIgKz0gMzsNCisgCXl5bHZhbC5vcGNvZGUg
PSB0b2tlbnRhYjNbaV0ub3Bjb2RlOw0KKyAJcmV0dXJuIHRva2VudGFiM1tpXS50b2tlbjsNCisg
ICAgICAgfQ0KKyANCisgICAvKiBTZWUgaWYgaXQgaXMgYSBzcGVjaWFsIHRva2VuIG9mIGxlbmd0
aCAyLiAgKi8NCisgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mIHRva2VudGFiMiAvIHNpemVvZiB0
b2tlbnRhYjJbMF07IGkrKykNCisgICAgIGlmIChTVFJFUU4gKHRva3N0YXJ0LCB0b2tlbnRhYjJb
aV0ub3BlcmF0b3IsIDIpKQ0KKyAgICAgICB7DQorIAlsZXhwdHIgKz0gMjsNCisgCXl5bHZhbC5v
cGNvZGUgPSB0b2tlbnRhYjJbaV0ub3Bjb2RlOw0KKyAJcmV0dXJuIHRva2VudGFiMltpXS50b2tl
bjsNCisgICAgICAgfQ0KKyANCisgICBzd2l0Y2ggKGMgPSAqdG9rc3RhcnQpDQorICAgICB7DQor
ICAgICBjYXNlIDA6DQorICAgICAgIHJldHVybiAwOw0KKyANCisgICAgIGNhc2UgJyAnOg0KKyAg
ICAgY2FzZSAnXHQnOg0KKyAgICAgY2FzZSAnXG4nOg0KKyAgICAgICBsZXhwdHIrKzsNCisgICAg
ICAgZ290byByZXRyeTsNCisgDQorICAgICBjYXNlICdcJyc6DQorICAgICAgIC8qIFdlIGVpdGhl
ciBoYXZlIGEgY2hhcmFjdGVyIGNvbnN0YW50ICgnMCcgb3IgJ1wxNzcnIGZvciBleGFtcGxlKQ0K
KyAJIG9yIHdlIGhhdmUgYSBxdW90ZWQgc3ltYm9sIHJlZmVyZW5jZSAoJ2ZvbyhpbnQsaW50KScg
aW4gQysrDQorIAkgZm9yIGV4YW1wbGUpLiAqLw0KKyAgICAgICBsZXhwdHIrKzsNCisgICAgICAg
YyA9ICpsZXhwdHIrKzsNCisgICAgICAgaWYgKGMgPT0gJ1xcJykNCisgCWMgPSBwYXJzZV9lc2Nh
cGUgKCZsZXhwdHIpOw0KKyAgICAgICBlbHNlIGlmIChjID09ICdcJycpDQorIAllcnJvciAoIkVt
cHR5IGNoYXJhY3RlciBjb25zdGFudC4iKTsNCisgDQorICAgICAgIHl5bHZhbC50eXBlZF92YWxf
aW50LnZhbCA9IGM7DQorICAgICAgIHl5bHZhbC50eXBlZF92YWxfaW50LnR5cGUgPSBidWlsdGlu
X3R5cGVfY2hhcjsNCisgDQorICAgICAgIGMgPSAqbGV4cHRyKys7DQorICAgICAgIGlmIChjICE9
ICdcJycpDQorIAl7DQorIAkgIG5hbWVsZW4gPSBza2lwX3F1b3RlZCAodG9rc3RhcnQpIC0gdG9r
c3RhcnQ7DQorIAkgIGlmIChuYW1lbGVuID4gMikNCisgCSAgICB7DQorIAkgICAgICBsZXhwdHIg
PSB0b2tzdGFydCArIG5hbWVsZW47DQorIAkgICAgICBpZiAobGV4cHRyWy0xXSAhPSAnXCcnKQ0K
KyAJCWVycm9yICgiVW5tYXRjaGVkIHNpbmdsZSBxdW90ZS4iKTsNCisgCSAgICAgIG5hbWVsZW4g
LT0gMjsNCisgCSAgICAgIHRva3N0YXJ0Kys7DQorIAkgICAgICBnb3RvIHRyeW5hbWU7DQorIAkg
ICAgfQ0KKyAJICBlcnJvciAoIkludmFsaWQgY2hhcmFjdGVyIGNvbnN0YW50LiIpOw0KKyAJfQ0K
KyAgICAgICByZXR1cm4gSU5UOw0KKyANCisgICAgIGNhc2UgJygnOg0KKyAgICAgICBwYXJlbl9k
ZXB0aCsrOw0KKyAgICAgICBsZXhwdHIrKzsNCisgICAgICAgcmV0dXJuIGM7DQorIA0KKyAgICAg
Y2FzZSAnKSc6DQorICAgICAgIGlmIChwYXJlbl9kZXB0aCA9PSAwKQ0KKyAJcmV0dXJuIDA7DQor
ICAgICAgIHBhcmVuX2RlcHRoLS07DQorICAgICAgIGxleHB0cisrOw0KKyAgICAgICByZXR1cm4g
YzsNCisgDQorICAgICBjYXNlICcsJzoNCisgICAgICAgaWYgKGNvbW1hX3Rlcm1pbmF0ZXMgJiYg
cGFyZW5fZGVwdGggPT0gMCkNCisgCXJldHVybiAwOw0KKyAgICAgICBsZXhwdHIrKzsNCisgICAg
ICAgcmV0dXJuIGM7DQorIA0KKyAgICAgY2FzZSAnLic6DQorICAgICAgIC8qIE1pZ2h0IGJlIGEg
ZmxvYXRpbmcgcG9pbnQgbnVtYmVyLiAgKi8NCisgICAgICAgaWYgKGxleHB0clsxXSA8ICcwJyB8
fCBsZXhwdHJbMV0gPiAnOScpDQorIAlnb3RvIHN5bWJvbDsJCS8qIE5vcGUsIG11c3QgYmUgYSBz
eW1ib2wuICovDQorICAgICAgIC8qIEZBTEwgVEhSVSBpbnRvIG51bWJlciBjYXNlLiAgKi8NCisg
DQorICAgICBjYXNlICcwJzoNCisgICAgIGNhc2UgJzEnOg0KKyAgICAgY2FzZSAnMic6DQorICAg
ICBjYXNlICczJzoNCisgICAgIGNhc2UgJzQnOg0KKyAgICAgY2FzZSAnNSc6DQorICAgICBjYXNl
ICc2JzoNCisgICAgIGNhc2UgJzcnOg0KKyAgICAgY2FzZSAnOCc6DQorICAgICBjYXNlICc5JzoN
CisgICAgICAgew0KKyAJLyogSXQncyBhIG51bWJlci4gICovDQorIAlpbnQgZ290X2RvdCA9IDAs
IGdvdF9lID0gMCwgdG9rdHlwZTsNCisgCXJlZ2lzdGVyIGNoYXIgKnAgPSB0b2tzdGFydDsNCisg
CWludCBoZXggPSBpbnB1dF9yYWRpeCA+IDEwOw0KKyANCisgCWlmIChjID09ICcwJyAmJiAocFsx
XSA9PSAneCcgfHwgcFsxXSA9PSAnWCcpKQ0KKyAJICB7DQorIAkgICAgcCArPSAyOw0KKyAJICAg
IGhleCA9IDE7DQorIAkgIH0NCisgCWVsc2UgaWYgKGMgPT0gJzAnICYmIChwWzFdPT0ndCcgfHwg
cFsxXT09J1QnIHx8IHBbMV09PSdkJyB8fCBwWzFdPT0nRCcpKQ0KKyAJICB7DQorIAkgICAgcCAr
PSAyOw0KKyAJICAgIGhleCA9IDA7DQorIAkgIH0NCisgDQorIAlmb3IgKDs7ICsrcCkNCisgCSAg
ew0KKyAJICAgIC8qIFRoaXMgdGVzdCBpbmNsdWRlcyAhaGV4IGJlY2F1c2UgJ2UnIGlzIGEgdmFs
aWQgaGV4IGRpZ2l0DQorIAkgICAgICAgYW5kIHRodXMgZG9lcyBub3QgaW5kaWNhdGUgYSBmbG9h
dGluZyBwb2ludCBudW1iZXIgd2hlbg0KKyAJICAgICAgIHRoZSByYWRpeCBpcyBoZXguICAqLw0K
KyAJICAgIGlmICghaGV4ICYmICFnb3RfZSAmJiAoKnAgPT0gJ2UnIHx8ICpwID09ICdFJykpDQor
IAkgICAgICBnb3RfZG90ID0gZ290X2UgPSAxOw0KKyAJICAgIC8qIFRoaXMgdGVzdCBkb2VzIG5v
dCBpbmNsdWRlICFoZXgsIGJlY2F1c2UgYSAnLicgYWx3YXlzIGluZGljYXRlcw0KKyAJICAgICAg
IGEgZGVjaW1hbCBmbG9hdGluZyBwb2ludCBudW1iZXIgcmVnYXJkbGVzcyBvZiB0aGUgcmFkaXgu
ICAqLw0KKyAJICAgIGVsc2UgaWYgKCFnb3RfZG90ICYmICpwID09ICcuJykNCisgCSAgICAgIGdv
dF9kb3QgPSAxOw0KKyAJICAgIGVsc2UgaWYgKGdvdF9lICYmIChwWy0xXSA9PSAnZScgfHwgcFst
MV0gPT0gJ0UnKQ0KKyAJCSAgICAgJiYgKCpwID09ICctJyB8fCAqcCA9PSAnKycpKQ0KKyAJICAg
ICAgLyogVGhpcyBpcyB0aGUgc2lnbiBvZiB0aGUgZXhwb25lbnQsIG5vdCB0aGUgZW5kIG9mIHRo
ZQ0KKyAJCSBudW1iZXIuICAqLw0KKyAJICAgICAgY29udGludWU7DQorIAkgICAgLyogV2Ugd2ls
bCB0YWtlIGFueSBsZXR0ZXJzIG9yIGRpZ2l0cy4gIHBhcnNlX251bWJlciB3aWxsDQorIAkgICAg
ICAgY29tcGxhaW4gaWYgcGFzdCB0aGUgcmFkaXgsIG9yIGlmIEwgb3IgVSBhcmUgbm90IGZpbmFs
LiAgKi8NCisgCSAgICBlbHNlIGlmICgoKnAgPCAnMCcgfHwgKnAgPiAnOScpDQorIAkJICAgICAm
JiAoKCpwIDwgJ2EnIHx8ICpwID4gJ3onKQ0KKyAJCQkJICAmJiAoKnAgPCAnQScgfHwgKnAgPiAn
WicpKSkNCisgCSAgICAgIGJyZWFrOw0KKyAJICB9DQorIAl0b2t0eXBlID0gcGFyc2VfbnVtYmVy
ICh0b2tzdGFydCwgcCAtIHRva3N0YXJ0LCBnb3RfZG90fGdvdF9lLCAmeXlsdmFsKTsNCisgICAg
ICAgICBpZiAodG9rdHlwZSA9PSBFUlJPUikNCisgCSAgew0KKyAJICAgIGNoYXIgKmVycl9jb3B5
ID0gKGNoYXIgKikgYWxsb2NhIChwIC0gdG9rc3RhcnQgKyAxKTsNCisgDQorIAkgICAgbWVtY3B5
IChlcnJfY29weSwgdG9rc3RhcnQsIHAgLSB0b2tzdGFydCk7DQorIAkgICAgZXJyX2NvcHlbcCAt
IHRva3N0YXJ0XSA9IDA7DQorIAkgICAgZXJyb3IgKCJJbnZhbGlkIG51bWJlciBcIiVzXCIuIiwg
ZXJyX2NvcHkpOw0KKyAJICB9DQorIAlsZXhwdHIgPSBwOw0KKyAJcmV0dXJuIHRva3R5cGU7DQor
ICAgICAgIH0NCisgDQorICAgICBjYXNlICcrJzoNCisgICAgIGNhc2UgJy0nOg0KKyAgICAgY2Fz
ZSAnKic6DQorICAgICBjYXNlICcvJzoNCisgICAgIGNhc2UgJ3wnOg0KKyAgICAgY2FzZSAnJic6
DQorICAgICBjYXNlICdeJzoNCisgICAgIGNhc2UgJ34nOg0KKyAgICAgY2FzZSAnISc6DQorICAg
ICBjYXNlICdAJzoNCisgICAgIGNhc2UgJzwnOg0KKyAgICAgY2FzZSAnPic6DQorICAgICBjYXNl
ICdbJzoNCisgICAgIGNhc2UgJ10nOg0KKyAgICAgY2FzZSAnPyc6DQorICAgICBjYXNlICc6JzoN
CisgICAgIGNhc2UgJz0nOg0KKyAgICAgY2FzZSAneyc6DQorICAgICBjYXNlICd9JzoNCisgICAg
IHN5bWJvbDoNCisgICAgICAgbGV4cHRyKys7DQorICAgICAgIHJldHVybiBjOw0KKyANCisgICAg
IGNhc2UgJyInOg0KKyANCisgICAgICAgLyogQnVpbGQgdGhlIGdkYiBpbnRlcm5hbCBmb3JtIG9m
IHRoZSBpbnB1dCBzdHJpbmcgaW4gdGVtcGJ1ZiwNCisgCSB0cmFuc2xhdGluZyBhbnkgc3RhbmRh
cmQgQyBlc2NhcGUgZm9ybXMgc2Vlbi4gIE5vdGUgdGhhdCB0aGUNCisgCSBidWZmZXIgaXMgbnVs
bCBieXRlIHRlcm1pbmF0ZWQgKm9ubHkqIGZvciB0aGUgY29udmVuaWVuY2Ugb2YNCisgCSBkZWJ1
Z2dpbmcgZ2RiIGl0c2VsZiBhbmQgcHJpbnRpbmcgdGhlIGJ1ZmZlciBjb250ZW50cyB3aGVuDQor
IAkgdGhlIGJ1ZmZlciBjb250YWlucyBubyBlbWJlZGRlZCBudWxscy4gIEdkYiBkb2VzIG5vdCBk
ZXBlbmQNCisgCSB1cG9uIHRoZSBidWZmZXIgYmVpbmcgbnVsbCBieXRlIHRlcm1pbmF0ZWQsIGl0
IHVzZXMgdGhlIGxlbmd0aA0KKyAJIHN0cmluZyBpbnN0ZWFkLiAgVGhpcyBhbGxvd3MgZ2RiIHRv
IGhhbmRsZSBDIHN0cmluZ3MgKGFzIHdlbGwNCisgCSBhcyBzdHJpbmdzIGluIG90aGVyIGxhbmd1
YWdlcykgd2l0aCBlbWJlZGRlZCBudWxsIGJ5dGVzICovDQorIA0KKyAgICAgICB0b2twdHIgPSAr
K3Rva3N0YXJ0Ow0KKyAgICAgICB0ZW1wYnVmaW5kZXggPSAwOw0KKyANCisgICAgICAgZG8gew0K
KyAJLyogR3JvdyB0aGUgc3RhdGljIHRlbXAgYnVmZmVyIGlmIG5lY2Vzc2FyeSwgaW5jbHVkaW5n
IGFsbG9jYXRpbmcNCisgCSAgIHRoZSBmaXJzdCBvbmUgb24gZGVtYW5kLiAqLw0KKyAJaWYgKHRl
bXBidWZpbmRleCArIDEgPj0gdGVtcGJ1ZnNpemUpDQorIAkgIHsNCisgCSAgICB0ZW1wYnVmID0g
KGNoYXIgKikgcmVhbGxvYyAodGVtcGJ1ZiwgdGVtcGJ1ZnNpemUgKz0gNjQpOw0KKyAJICB9DQor
IAlzd2l0Y2ggKCp0b2twdHIpDQorIAkgIHsNCisgCSAgY2FzZSAnXDAnOg0KKyAJICBjYXNlICci
JzoNCisgCSAgICAvKiBEbyBub3RoaW5nLCBsb29wIHdpbGwgdGVybWluYXRlLiAqLw0KKyAJICAg
IGJyZWFrOw0KKyAJICBjYXNlICdcXCc6DQorIAkgICAgdG9rcHRyKys7DQorIAkgICAgYyA9IHBh
cnNlX2VzY2FwZSAoJnRva3B0cik7DQorIAkgICAgaWYgKGMgPT0gLTEpDQorIAkgICAgICB7DQor
IAkJY29udGludWU7DQorIAkgICAgICB9DQorIAkgICAgdGVtcGJ1Zlt0ZW1wYnVmaW5kZXgrK10g
PSBjOw0KKyAJICAgIGJyZWFrOw0KKyAJICBkZWZhdWx0Og0KKyAJICAgIHRlbXBidWZbdGVtcGJ1
ZmluZGV4KytdID0gKnRva3B0cisrOw0KKyAJICAgIGJyZWFrOw0KKyAJICB9DQorICAgICAgIH0g
d2hpbGUgKCgqdG9rcHRyICE9ICciJykgJiYgKCp0b2twdHIgIT0gJ1wwJykpOw0KKyAgICAgICBp
ZiAoKnRva3B0cisrICE9ICciJykNCisgCXsNCisgCSAgZXJyb3IgKCJVbnRlcm1pbmF0ZWQgc3Ry
aW5nIGluIGV4cHJlc3Npb24uIik7DQorIAl9DQorICAgICAgIHRlbXBidWZbdGVtcGJ1ZmluZGV4
XSA9ICdcMCc7CS8qIFNlZSBub3RlIGFib3ZlICovDQorICAgICAgIHl5bHZhbC5zdmFsLnB0ciA9
IHRlbXBidWY7DQorICAgICAgIHl5bHZhbC5zdmFsLmxlbmd0aCA9IHRlbXBidWZpbmRleDsNCisg
ICAgICAgbGV4cHRyID0gdG9rcHRyOw0KKyAgICAgICByZXR1cm4gKFNUUklORyk7DQorICAgICB9
DQorIA0KKyAgIGlmICghKGMgPT0gJ18nIHx8IGMgPT0gJyQnDQorIAl8fCAoYyA+PSAnYScgJiYg
YyA8PSAneicpIHx8IChjID49ICdBJyAmJiBjIDw9ICdaJykpKQ0KKyAgICAgLyogV2UgbXVzdCBo
YXZlIGNvbWUgYWNyb3NzIGEgYmFkIGNoYXJhY3RlciAoZS5nLiAnOycpLiAgKi8NCisgICAgIGVy
cm9yICgiSW52YWxpZCBjaGFyYWN0ZXIgJyVjJyBpbiBleHByZXNzaW9uLiIsIGMpOw0KKyANCisg
ICAvKiBJdCdzIGEgbmFtZS4gIFNlZSBob3cgbG9uZyBpdCBpcy4gICovDQorICAgbmFtZWxlbiA9
IDA7DQorICAgZm9yIChjID0gdG9rc3RhcnRbbmFtZWxlbl07DQorICAgICAgICAoYyA9PSAnXycg
fHwgYyA9PSAnJCcgfHwgKGMgPj0gJzAnICYmIGMgPD0gJzknKQ0KKyAJfHwgKGMgPj0gJ2EnICYm
IGMgPD0gJ3onKSB8fCAoYyA+PSAnQScgJiYgYyA8PSAnWicpIHx8IGMgPT0gJzwnKTspDQorICAg
ICB7DQorICAgICAgIC8qIFRlbXBsYXRlIHBhcmFtZXRlciBsaXN0cyBhcmUgcGFydCBvZiB0aGUg
bmFtZS4NCisgCSBGSVhNRTogVGhpcyBtaXNoYW5kbGVzIGBwcmludCAkYTw0JiYkYT4zJy4gICov
DQorICAgICAgIGlmIChjID09ICc8JykNCisgCXsNCisgCSAgaW50IGkgPSBuYW1lbGVuOw0KKyAJ
ICBpbnQgbmVzdGluZ19sZXZlbCA9IDE7DQorIAkgIHdoaWxlICh0b2tzdGFydFsrK2ldKQ0KKyAJ
ICAgIHsNCisgCSAgICAgIGlmICh0b2tzdGFydFtpXSA9PSAnPCcpDQorIAkJbmVzdGluZ19sZXZl
bCsrOw0KKyAJICAgICAgZWxzZSBpZiAodG9rc3RhcnRbaV0gPT0gJz4nKQ0KKyAJCXsNCisgCQkg
IGlmICgtLW5lc3RpbmdfbGV2ZWwgPT0gMCkNCisgCQkgICAgYnJlYWs7DQorIAkJfQ0KKyAJICAg
IH0NCisgCSAgaWYgKHRva3N0YXJ0W2ldID09ICc+JykNCisgCSAgICBuYW1lbGVuID0gaTsNCisg
CSAgZWxzZQ0KKyAJICAgIGJyZWFrOw0KKyAJfQ0KKyANCisgICAgICAgLyogZG8gTk9UIHVwcGVy
Y2FzZSBpbnRlcm5hbHMgYmVjYXVzZSBvZiByZWdpc3RlcnMgISEhICovDQorICAgICAgIGMgPSB0
b2tzdGFydFsrK25hbWVsZW5dOw0KKyAgICAgfQ0KKyANCisgICAvKiBtYWtlIGFuIHVwcGVyY2Fz
ZWQgY29weSBvZiB0b2tzdGFydCAqLw0KKyANCisgICB1cHRva3N0YXJ0ID0gKGNoYXIgKiltYWxs
b2MobmFtZWxlbisxKTsNCisgICBmb3IgKGkgPSAwO2kgPD0gbmFtZWxlbjtpKyspDQorICAgICB7
DQorICAgICAgIGlmICgodG9rc3RhcnRbaV0+PSdhJyAmJiB0b2tzdGFydFtpXTw9J3onKSkNCisg
ICAgICAgICB1cHRva3N0YXJ0W2ldID0gdG9rc3RhcnRbaV0tKCdhJy0nQScpOw0KKyAgICAgICBl
bHNlDQorICAgICAgICAgdXB0b2tzdGFydFtpXSA9IHRva3N0YXJ0W2ldOw0KKyAgICAgfQ0KKyAg
IC8qIFRoZSB0b2tlbiAiaWYiIHRlcm1pbmF0ZXMgdGhlIGV4cHJlc3Npb24gYW5kIGlzIE5PVCAN
CisgICAgICByZW1vdmVkIGZyb20gdGhlIGlucHV0IHN0cmVhbS4gICovDQorICAgaWYgKG5hbWVs
ZW4gPT0gMiAmJiB1cHRva3N0YXJ0WzBdID09ICdJJyAmJiB1cHRva3N0YXJ0WzFdID09ICdGJykN
CisgICAgIHsNCisgICAgICAgcmV0dXJuIDA7DQorICAgICB9DQorIA0KKyAgIGxleHB0ciArPSBu
YW1lbGVuOw0KKyANCisgICB0cnluYW1lOg0KKyANCisgICAvKiBDYXRjaCBzcGVjaWZpYyBrZXl3
b3Jkcy4gIFNob3VsZCBiZSBkb25lIHdpdGggYSBkYXRhIHN0cnVjdHVyZS4gICovDQorICAgc3dp
dGNoIChuYW1lbGVuKQ0KKyAgICAgew0KKyAgICAgY2FzZSA2Og0KKyAgICAgICBpZiAoU1RSRVFO
ICh1cHRva3N0YXJ0LCAiT0JKRUNUIiwgNikpDQorIAlyZXR1cm4gQ0xBU1M7DQorICAgICAgIGlm
IChTVFJFUU4gKHVwdG9rc3RhcnQsICJSRUNPUkQiLCA2KSkNCisgCXJldHVybiBTVFJVQ1Q7DQor
ICAgICAgIGlmIChTVFJFUU4gKHVwdG9rc3RhcnQsICJTSVpFT0YiLCA2KSkNCisgCXJldHVybiBT
SVpFT0Y7DQorICAgICAgIGJyZWFrOw0KKyAgICAgY2FzZSA1Og0KKyAgICAgICBpZiAoU1RSRVFO
ICh1cHRva3N0YXJ0LCAiQ0xBU1MiLCA1KSkNCisgCXJldHVybiBDTEFTUzsNCisgICAgICAgaWYg
KFNUUkVRTiAodXB0b2tzdGFydCwgIkZBTFNFIiwgNSkpDQorIAl7DQorICAgICAgICAgICB5eWx2
YWwubHZhbCA9IDA7DQorICAgICAgICAgICByZXR1cm4gRkFMU0U7DQorICAgICAgICAgfQ0KKyAg
ICAgICBicmVhazsNCisgICAgIGNhc2UgNDoNCisgICAgICAgaWYgKFNUUkVRTiAodXB0b2tzdGFy
dCwgIlRSVUUiLCA0KSkNCisgCXsNCisgICAgICAgICAgIHl5bHZhbC5sdmFsID0gMTsNCisgICAJ
ICByZXR1cm4gVFJVRTsNCisgICAgICAgICB9DQorICAgICAgIGlmIChTVFJFUU4gKHVwdG9rc3Rh
cnQsICJTRUxGIiwgNCkpDQorIAl7DQorIAkgIHN0YXRpYyBjb25zdCBjaGFyIHRoaXNfbmFtZVtd
ID0NCisgCQkJCSB7IENQTFVTX01BUktFUiwgJ3QnLCAnaCcsICdpJywgJ3MnLCAnXDAnIH07DQor
IA0KKyAJICBpZiAobG9va3VwX3N5bWJvbCAodGhpc19uYW1lLCBleHByZXNzaW9uX2NvbnRleHRf
YmxvY2ssDQorIAkJCSAgICAgVkFSX05BTUVTUEFDRSwgKGludCAqKSBOVUxMLA0KKyAJCQkgICAg
IChzdHJ1Y3Qgc3ltdGFiICoqKSBOVUxMKSkNCisgCSAgICByZXR1cm4gVEhJUzsNCisgCX0NCisg
ICAgICAgYnJlYWs7DQorICAgICBjYXNlIDM6DQorICAgICAgIGJyZWFrOw0KKyAgICAgZGVmYXVs
dDoNCisgICAgICAgYnJlYWs7DQorICAgICB9DQorIA0KKyAgIHl5bHZhbC5zdmFsLnB0ciA9IHRv
a3N0YXJ0Ow0KKyAgIHl5bHZhbC5zdmFsLmxlbmd0aCA9IG5hbWVsZW47DQorIA0KKyAgIGlmICgq
dG9rc3RhcnQgPT0gJyQnKQ0KKyAgICAgew0KKyAgICAgICB3cml0ZV9kb2xsYXJfdmFyaWFibGUg
KHl5bHZhbC5zdmFsKTsNCisgICAgICAgcmV0dXJuIFZBUklBQkxFOw0KKyAgICAgfQ0KKyANCisg
ICAvKiBVc2UgdG9rZW4tdHlwZSBCTE9DS05BTUUgZm9yIHN5bWJvbHMgdGhhdCBoYXBwZW4gdG8g
YmUgZGVmaW5lZCBhcw0KKyAgICAgIGZ1bmN0aW9ucyBvciBzeW10YWJzLiAgSWYgdGhpcyBpcyBu
b3Qgc28sIHRoZW4gLi4uDQorICAgICAgVXNlIHRva2VuLXR5cGUgVFlQRU5BTUUgZm9yIHN5bWJv
bHMgdGhhdCBoYXBwZW4gdG8gYmUgZGVmaW5lZA0KKyAgICAgIGN1cnJlbnRseSBhcyBuYW1lcyBv
ZiB0eXBlczsgTkFNRSBmb3Igb3RoZXIgc3ltYm9scy4NCisgICAgICBUaGUgY2FsbGVyIGlzIG5v
dCBjb25zdHJhaW5lZCB0byBjYXJlIGFib3V0IHRoZSBkaXN0aW5jdGlvbi4gICovDQorICAgew0K
KyAgICAgY2hhciAqdG1wID0gY29weV9uYW1lICh5eWx2YWwuc3ZhbCk7DQorICAgICBzdHJ1Y3Qg
c3ltYm9sICpzeW07DQorICAgICBpbnQgaXNfYV9maWVsZF9vZl90aGlzID0gMDsNCisgICAgIGlu
dCBoZXh0eXBlOw0KKyANCisgICAgIHN5bSA9IGxvb2t1cF9zeW1ib2wgKHRtcCwgZXhwcmVzc2lv
bl9jb250ZXh0X2Jsb2NrLA0KKyAJCQkgVkFSX05BTUVTUEFDRSwNCisgCQkJICZpc19hX2ZpZWxk
X29mX3RoaXMsDQorIAkJCSAoc3RydWN0IHN5bXRhYiAqKikgTlVMTCk7DQorICAgICAvKiBzZWNv
bmQgY2hhbmNlIHVwcGVyY2FzZWQgISAqLw0KKyAgICAgaWYgKCFzeW0pDQorICAgICAgIHsNCisg
ICAgICAgIGZvciAoaSA9IDA7aSA8PSBuYW1lbGVuO2krKykNCisgICAgICAgICAgew0KKyAgICAg
ICAgICAgIGlmICgodG1wW2ldPj0nYScgJiYgdG1wW2ldPD0neicpKQ0KKyAgICAgICAgICAgICAg
dG1wW2ldIC09ICgnYSctJ0EnKTsNCisgICAgICAgICAgICAvKiBJIGFtIG5vdCBzdXJlIHRoYXQg
Y29weV9uYW1lIGdpdmVzIGV4Y2F0bHkgdGhlIHNhbWUgcmVzdWx0ICEgKi8NCisgICAgICAgICAg
ICBpZiAoKHRva3N0YXJ0W2ldPj0nYScgJiYgdG9rc3RhcnRbaV08PSd6JykpDQorICAgICAgICAg
ICAgICB0b2tzdGFydFtpXSAtPSAoJ2EnLSdBJyk7DQorICAgICAgICAgIH0NCisgICAgICAgICBz
eW0gPSBsb29rdXBfc3ltYm9sICh0bXAsIGV4cHJlc3Npb25fY29udGV4dF9ibG9jaywNCisgCQkJ
IFZBUl9OQU1FU1BBQ0UsDQorIAkJCSAmaXNfYV9maWVsZF9vZl90aGlzLA0KKyAJCQkgKHN0cnVj
dCBzeW10YWIgKiopIE5VTEwpOw0KKyAgICAgICB9DQorICAgICAvKiBDYWxsIGxvb2t1cF9zeW10
YWIsIG5vdCBsb29rdXBfcGFydGlhbF9zeW10YWIsIGluIGNhc2UgdGhlcmUgYXJlDQorICAgICAg
ICBubyBwc3ltdGFicyAoY29mZiwgeGNvZmYsIG9yIHNvbWUgZnV0dXJlIGNoYW5nZSB0byBibG93
IGF3YXkgdGhlDQorICAgICAgICBwc3ltdGFicyBvbmNlIG9uY2Ugc3ltYm9scyBhcmUgcmVhZCku
ICAqLw0KKyAgICAgaWYgKChzeW0gJiYgU1lNQk9MX0NMQVNTIChzeW0pID09IExPQ19CTE9DSykg
fHwNCisgICAgICAgICBsb29rdXBfc3ltdGFiICh0bXApKQ0KKyAgICAgICB7DQorIAl5eWx2YWwu
c3N5bS5zeW0gPSBzeW07DQorIAl5eWx2YWwuc3N5bS5pc19hX2ZpZWxkX29mX3RoaXMgPSBpc19h
X2ZpZWxkX29mX3RoaXM7DQorIAlyZXR1cm4gQkxPQ0tOQU1FOw0KKyAgICAgICB9DQorICAgICBp
ZiAoc3ltICYmIFNZTUJPTF9DTEFTUyAoc3ltKSA9PSBMT0NfVFlQRURFRikNCisgICAgICAgICB7
DQorICNpZiAxDQorIAkgIC8qIERlc3BpdGUgdGhlIGZvbGxvd2luZyBmbGF3LCB3ZSBuZWVkIHRv
IGtlZXAgdGhpcyBjb2RlIGVuYWJsZWQuDQorIAkgICAgIEJlY2F1c2Ugd2UgY2FuIGdldCBjYWxs
ZWQgZnJvbSBjaGVja19zdHViX21ldGhvZCwgaWYgd2UgZG9uJ3QNCisgCSAgICAgaGFuZGxlIG5l
c3RlZCB0eXBlcyB0aGVuIGl0IHNjcmV3cyBtYW55IG9wZXJhdGlvbnMgaW4gYW55DQorIAkgICAg
IHByb2dyYW0gd2hpY2ggdXNlcyBuZXN0ZWQgdHlwZXMuICAqLw0KKyAJICAvKiBJbiAiQTo6eCIs
IGlmIHggaXMgYSBtZW1iZXIgZnVuY3Rpb24gb2YgQSBhbmQgdGhlcmUgaGFwcGVucw0KKyAJICAg
ICB0byBiZSBhIHR5cGUgKG5lc3RlZCBvciBub3QsIHNpbmNlIHRoZSBzdGFicyBkb24ndCBtYWtl
IHRoYXQNCisgCSAgICAgZGlzdGluY3Rpb24pIG5hbWVkIHgsIHRoZW4gdGhpcyBjb2RlIGluY29y
cmVjdGx5IHRoaW5rcyB3ZQ0KKyAJICAgICBhcmUgZGVhbGluZyB3aXRoIG5lc3RlZCB0eXBlcyBy
YXRoZXIgdGhhbiBhIG1lbWJlciBmdW5jdGlvbi4gICovDQorIA0KKyAJICBjaGFyICpwOw0KKyAJ
ICBjaGFyICpuYW1lc3RhcnQ7DQorIAkgIHN0cnVjdCBzeW1ib2wgKmJlc3Rfc3ltOw0KKyANCisg
CSAgLyogTG9vayBhaGVhZCB0byBkZXRlY3QgbmVzdGVkIHR5cGVzLiAgVGhpcyBwcm9iYWJseSBz
aG91bGQgYmUNCisgCSAgICAgZG9uZSBpbiB0aGUgZ3JhbW1hciwgYnV0IHRyeWluZyBzZWVtZWQg
dG8gaW50cm9kdWNlIGEgbG90DQorIAkgICAgIG9mIHNoaWZ0L3JlZHVjZSBhbmQgcmVkdWNlL3Jl
ZHVjZSBjb25mbGljdHMuICBJdCdzIHBvc3NpYmxlDQorIAkgICAgIHRoYXQgaXQgY291bGQgYmUg
ZG9uZSwgdGhvdWdoLiAgT3IgcGVyaGFwcyBhIG5vbi1ncmFtbWFyLCBidXQNCisgCSAgICAgbGVz
cyBhZCBob2MsIGFwcHJvYWNoIHdvdWxkIHdvcmsgd2VsbC4gICovDQorIA0KKyAJICAvKiBTaW5j
ZSB3ZSBkbyBub3QgY3VycmVudGx5IGhhdmUgYW55IHdheSBvZiBkaXN0aW5ndWlzaGluZw0KKyAJ
ICAgICBhIG5lc3RlZCB0eXBlIGZyb20gYSBub24tbmVzdGVkIG9uZSAodGhlIHN0YWJzIGRvbid0
IHRlbGwNCisgCSAgICAgdXMgd2hldGhlciBhIHR5cGUgaXMgbmVzdGVkKSwgd2UganVzdCBpZ25v
cmUgdGhlDQorIAkgICAgIGNvbnRhaW5pbmcgdHlwZS4gICovDQorIA0KKyAJICBwID0gbGV4cHRy
Ow0KKyAJICBiZXN0X3N5bSA9IHN5bTsNCisgCSAgd2hpbGUgKDEpDQorIAkgICAgew0KKyAJICAg
ICAgLyogU2tpcCB3aGl0ZXNwYWNlLiAgKi8NCisgCSAgICAgIHdoaWxlICgqcCA9PSAnICcgfHwg
KnAgPT0gJ1x0JyB8fCAqcCA9PSAnXG4nKQ0KKyAJCSsrcDsNCisgCSAgICAgIGlmICgqcCA9PSAn
OicgJiYgcFsxXSA9PSAnOicpDQorIAkJew0KKyAJCSAgLyogU2tpcCB0aGUgYDo6Jy4gICovDQor
IAkJICBwICs9IDI7DQorIAkJICAvKiBTa2lwIHdoaXRlc3BhY2UuICAqLw0KKyAJCSAgd2hpbGUg
KCpwID09ICcgJyB8fCAqcCA9PSAnXHQnIHx8ICpwID09ICdcbicpDQorIAkJICAgICsrcDsNCisg
CQkgIG5hbWVzdGFydCA9IHA7DQorIAkJICB3aGlsZSAoKnAgPT0gJ18nIHx8ICpwID09ICckJyB8
fCAoKnAgPj0gJzAnICYmICpwIDw9ICc5JykNCisgCQkJIHx8ICgqcCA+PSAnYScgJiYgKnAgPD0g
J3onKQ0KKyAJCQkgfHwgKCpwID49ICdBJyAmJiAqcCA8PSAnWicpKQ0KKyAJCSAgICArK3A7DQor
IAkJICBpZiAocCAhPSBuYW1lc3RhcnQpDQorIAkJICAgIHsNCisgCQkgICAgICBzdHJ1Y3Qgc3lt
Ym9sICpjdXJfc3ltOw0KKyAJCSAgICAgIC8qIEFzIGJpZyBhcyB0aGUgd2hvbGUgcmVzdCBvZiB0
aGUgZXhwcmVzc2lvbiwgd2hpY2ggaXMNCisgCQkJIGF0IGxlYXN0IGJpZyBlbm91Z2guICAqLw0K
KyAJCSAgICAgIGNoYXIgKm5jb3B5ID0gYWxsb2NhIChzdHJsZW4gKHRtcCkrc3RybGVuIChuYW1l
c3RhcnQpKzMpOw0KKyAJCSAgICAgIGNoYXIgKnRtcDE7DQorIA0KKyAJCSAgICAgIHRtcDEgPSBu
Y29weTsNCisgCQkgICAgICBtZW1jcHkgKHRtcDEsIHRtcCwgc3RybGVuICh0bXApKTsNCisgCQkg
ICAgICB0bXAxICs9IHN0cmxlbiAodG1wKTsNCisgCQkgICAgICBtZW1jcHkgKHRtcDEsICI6OiIs
IDIpOw0KKyAJCSAgICAgIHRtcDEgKz0gMjsNCisgCQkgICAgICBtZW1jcHkgKHRtcDEsIG5hbWVz
dGFydCwgcCAtIG5hbWVzdGFydCk7DQorIAkJICAgICAgdG1wMVtwIC0gbmFtZXN0YXJ0XSA9ICdc
MCc7DQorIAkJICAgICAgY3VyX3N5bSA9IGxvb2t1cF9zeW1ib2wgKG5jb3B5LCBleHByZXNzaW9u
X2NvbnRleHRfYmxvY2ssDQorIAkJCQkJICAgICAgIFZBUl9OQU1FU1BBQ0UsIChpbnQgKikgTlVM
TCwNCisgCQkJCQkgICAgICAgKHN0cnVjdCBzeW10YWIgKiopIE5VTEwpOw0KKyAJCSAgICAgIGlm
IChjdXJfc3ltKQ0KKyAJCQl7DQorIAkJCSAgaWYgKFNZTUJPTF9DTEFTUyAoY3VyX3N5bSkgPT0g
TE9DX1RZUEVERUYpDQorIAkJCSAgICB7DQorIAkJCSAgICAgIGJlc3Rfc3ltID0gY3VyX3N5bTsN
CisgCQkJICAgICAgbGV4cHRyID0gcDsNCisgCQkJICAgIH0NCisgCQkJICBlbHNlDQorIAkJCSAg
ICBicmVhazsNCisgCQkJfQ0KKyAJCSAgICAgIGVsc2UNCisgCQkJYnJlYWs7DQorIAkJICAgIH0N
CisgCQkgIGVsc2UNCisgCQkgICAgYnJlYWs7DQorIAkJfQ0KKyAJICAgICAgZWxzZQ0KKyAJCWJy
ZWFrOw0KKyAJICAgIH0NCisgDQorIAkgIHl5bHZhbC50c3ltLnR5cGUgPSBTWU1CT0xfVFlQRSAo
YmVzdF9zeW0pOw0KKyAjZWxzZSAvKiBub3QgMCAqLw0KKyAJICB5eWx2YWwudHN5bS50eXBlID0g
U1lNQk9MX1RZUEUgKHN5bSk7DQorICNlbmRpZiAvKiBub3QgMCAqLw0KKyAJICByZXR1cm4gVFlQ
RU5BTUU7DQorICAgICAgICAgfQ0KKyAgICAgaWYgKCh5eWx2YWwudHN5bS50eXBlID0gbG9va3Vw
X3ByaW1pdGl2ZV90eXBlbmFtZSAodG1wKSkgIT0gMCkNCisgCXJldHVybiBUWVBFTkFNRTsNCisg
DQorICAgICAvKiBJbnB1dCBuYW1lcyB0aGF0IGFyZW4ndCBzeW1ib2xzIGJ1dCBBUkUgdmFsaWQg
aGV4IG51bWJlcnMsDQorICAgICAgICB3aGVuIHRoZSBpbnB1dCByYWRpeCBwZXJtaXRzIHRoZW0s
IGNhbiBiZSBuYW1lcyBvciBudW1iZXJzDQorICAgICAgICBkZXBlbmRpbmcgb24gdGhlIHBhcnNl
LiAgTm90ZSB3ZSBzdXBwb3J0IHJhZGl4ZXMgPiAxNiBoZXJlLiAgKi8NCisgICAgIGlmICghc3lt
ICYmIA0KKyAgICAgICAgICgodG9rc3RhcnRbMF0gPj0gJ2EnICYmIHRva3N0YXJ0WzBdIDwgJ2En
ICsgaW5wdXRfcmFkaXggLSAxMCkgfHwNCisgICAgICAgICAgKHRva3N0YXJ0WzBdID49ICdBJyAm
JiB0b2tzdGFydFswXSA8ICdBJyArIGlucHV0X3JhZGl4IC0gMTApKSkNCisgICAgICAgew0KKyAg
CVlZU1RZUEUgbmV3bHZhbDsJLyogSXRzIHZhbHVlIGlzIGlnbm9yZWQuICAqLw0KKyAJaGV4dHlw
ZSA9IHBhcnNlX251bWJlciAodG9rc3RhcnQsIG5hbWVsZW4sIDAsICZuZXdsdmFsKTsNCisgCWlm
IChoZXh0eXBlID09IElOVCkNCisgCSAgew0KKyAJICAgIHl5bHZhbC5zc3ltLnN5bSA9IHN5bTsN
CisgCSAgICB5eWx2YWwuc3N5bS5pc19hX2ZpZWxkX29mX3RoaXMgPSBpc19hX2ZpZWxkX29mX3Ro
aXM7DQorIAkgICAgcmV0dXJuIE5BTUVfT1JfSU5UOw0KKyAJICB9DQorICAgICAgIH0NCisgDQor
ICAgICBmcmVlKHVwdG9rc3RhcnQpOw0KKyAgICAgLyogQW55IG90aGVyIGtpbmQgb2Ygc3ltYm9s
ICovDQorICAgICB5eWx2YWwuc3N5bS5zeW0gPSBzeW07DQorICAgICB5eWx2YWwuc3N5bS5pc19h
X2ZpZWxkX29mX3RoaXMgPSBpc19hX2ZpZWxkX29mX3RoaXM7DQorICAgICByZXR1cm4gTkFNRTsN
CisgICB9DQorIH0NCisgDQorIHZvaWQNCisgeXllcnJvciAobXNnKQ0KKyAgICAgIGNoYXIgKm1z
ZzsNCisgew0KKyAgIGVycm9yICgiQSAlcyBpbiBleHByZXNzaW9uLCBuZWFyIGAlcycuIiwgKG1z
ZyA/IG1zZyA6ICJlcnJvciIpLCBsZXhwdHIpOw0KKyB9DQorIC8qDQorICAgJExvZzogcC1leHAu
eSx2ICQNCisgICBSZXZpc2lvbiAxLjIgIDE5OTgvMTIvMjMgMTU6NTM6MDYgIFBpZXJyZQ0KKyAg
IGV4Y2VwdGlvbnMgYW5kIGZsb2F0aW5mbw0KKyANCisgICBSZXZpc2lvbiAxLjEgIDE5OTgvMTIv
MTggMTg6MjU6NDkgIHBpZXJyZQ0KKyAgIGZpcnN0IERKR1BQIHY0LjE2IGZvciBwYXNjYWwgd2l0
aCBleGNlcHRpb24gZGVidWdnaW5nIGNhcGFiaWxpdGllcw0KKyANCisgICBSZXZpc2lvbiAxLjEg
IDE5OTgvMDkvMTggMTI6Mzc6MzkgIHBpZXJyZQ0KKyAgIGZpcnN0IG5ldyBmaWxlcw0KKyANCisg
Ki8NCkluZGV4OiBnZGIvcC1sYW5nLmMNCmRpZmYgLWMgbnVsIGdkYi9wLWxhbmcuYzoxLjINCioq
KiBudWwJV2VkIERlYyAyMyAxNzowMjoxNiAxOTk4DQotLS0gZ2RiL3AtbGFuZy5jCVdlZCBEZWMg
MjMgMTY6NTM6MDYgMTk5OA0KKioqKioqKioqKioqKioqDQoqKiogMCAqKioqDQotLS0gMSw0NDEg
LS0tLQ0KKyAvKg0KKyAgIE1vZGlmaWNhdGlvbnMgZm9yIEZQQyBzdXBwb3J0DQorICAgJElkOiBw
LWxhbmcuYyx2IDEuMiAxOTk4LzEyLzIzIDE1OjUzOjA2IFBpZXJyZSBFeHAgJA0KKyAqLw0KKyAv
KiBDIGxhbmd1YWdlIHN1cHBvcnQgcm91dGluZXMgZm9yIEdEQiwgdGhlIEdOVSBkZWJ1Z2dlci4N
CisgICAgQ29weXJpZ2h0IDE5OTIsIDE5OTMsIDE5OTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuDQorIA0KKyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHREIuDQorIA0KKyBUaGlzIHByb2dy
YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm
eQ0KKyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieQ0KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcg0KKyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLg0KKyANCisgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQorIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCisgR05VIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCisgDQorIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQorIGFsb25n
IHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQor
IEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBN
QSAwMjExMS0xMzA3LCBVU0EuICAqLw0KKyANCisgI2luY2x1ZGUgImRlZnMuaCINCisgI2luY2x1
ZGUgInN5bXRhYi5oIg0KKyAjaW5jbHVkZSAiZ2RidHlwZXMuaCINCisgI2luY2x1ZGUgImV4cHJl
c3Npb24uaCINCisgI2luY2x1ZGUgInBhcnNlci1kZWZzLmgiDQorICNpbmNsdWRlICJsYW5ndWFn
ZS5oIg0KKyAjaW5jbHVkZSAicC1sYW5nLmgiDQorIA0KKyBzdGF0aWMgdm9pZCBlbWl0X2NoYXIg
UEFSQU1TICgoaW50LCBHREJfRklMRSAqLCBpbnQpKTsNCisgDQorIC8qIFByaW50IHRoZSBjaGFy
YWN0ZXIgQyBvbiBTVFJFQU0gYXMgcGFydCBvZiB0aGUgY29udGVudHMgb2YgYSBsaXRlcmFsDQor
ICAgIHN0cmluZyB3aG9zZSBkZWxpbWl0ZXIgaXMgUVVPVEVSLiAgTm90ZSB0aGF0IHRoYXQgZm9y
bWF0IGZvciBwcmludGluZw0KKyAgICBjaGFyYWN0ZXJzIGFuZCBzdHJpbmdzIGlzIGxhbmd1YWdl
IHNwZWNpZmljLiAqLw0KKyANCisgc3RhdGljIHZvaWQNCisgZW1pdF9jaGFyIChjLCBzdHJlYW0s
IHF1b3RlcikNCisgICAgICByZWdpc3RlciBpbnQgYzsNCisgICAgICBHREJfRklMRSAqc3RyZWFt
Ow0KKyAgICAgIGludCBxdW90ZXI7DQorIHsNCisgDQorICAgYyAmPSAweEZGOwkJCS8qIEF2b2lk
IHNpZ24gYml0IGZvbGxpZXMgKi8NCisgDQorICAgaWYgKFBSSU5UX0xJVEVSQUxfRk9STSAoYykp
DQorICAgICB7DQorICAgICAgIGlmIChjID09ICdcXCcgfHwgYyA9PSBxdW90ZXIpDQorIAl7DQor
IAkgIGZwdXRzX2ZpbHRlcmVkICgiXFwiLCBzdHJlYW0pOw0KKyAJfQ0KKyAgICAgICBmcHJpbnRm
X2ZpbHRlcmVkIChzdHJlYW0sICIlYyIsIGMpOw0KKyAgICAgfQ0KKyAgIGVsc2UNCisgICAgIHsN
CisgICAgICAgc3dpdGNoIChjKQ0KKyAJew0KKyAJY2FzZSAnXG4nOg0KKyAJICBmcHV0c19maWx0
ZXJlZCAoIlxcbiIsIHN0cmVhbSk7DQorIAkgIGJyZWFrOw0KKyAJY2FzZSAnXGInOg0KKyAJICBm
cHV0c19maWx0ZXJlZCAoIlxcYiIsIHN0cmVhbSk7DQorIAkgIGJyZWFrOw0KKyAJY2FzZSAnXHQn
Og0KKyAJICBmcHV0c19maWx0ZXJlZCAoIlxcdCIsIHN0cmVhbSk7DQorIAkgIGJyZWFrOw0KKyAJ
Y2FzZSAnXGYnOg0KKyAJICBmcHV0c19maWx0ZXJlZCAoIlxcZiIsIHN0cmVhbSk7DQorIAkgIGJy
ZWFrOw0KKyAJY2FzZSAnXHInOg0KKyAJICBmcHV0c19maWx0ZXJlZCAoIlxcciIsIHN0cmVhbSk7
DQorIAkgIGJyZWFrOw0KKyAJY2FzZSAnXDAzMyc6DQorIAkgIGZwdXRzX2ZpbHRlcmVkICgiXFxl
Iiwgc3RyZWFtKTsNCisgCSAgYnJlYWs7DQorIAljYXNlICdcMDA3JzoNCisgCSAgZnB1dHNfZmls
dGVyZWQgKCJcXGEiLCBzdHJlYW0pOw0KKyAJICBicmVhazsNCisgCWRlZmF1bHQ6DQorIAkgIGZw
cmludGZfZmlsdGVyZWQgKHN0cmVhbSwgIlxcJS4zbyIsICh1bnNpZ25lZCBpbnQpIGMpOw0KKyAJ
ICBicmVhazsNCisgCX0NCisgICAgIH0NCisgfQ0KKyANCisgdm9pZA0KKyBwYXNfcHJpbnRjaGFy
IChjLCBzdHJlYW0pDQorICAgICAgaW50IGM7DQorICAgICAgR0RCX0ZJTEUgKnN0cmVhbTsNCisg
ew0KKyAgIGZwdXRzX2ZpbHRlcmVkICgiJyIsIHN0cmVhbSk7DQorICAgZW1pdF9jaGFyIChjLCBz
dHJlYW0sICdcJycpOw0KKyAgIGZwdXRzX2ZpbHRlcmVkICgiJyIsIHN0cmVhbSk7DQorIH0NCisg
DQorIC8qIFByaW50IHRoZSBjaGFyYWN0ZXIgc3RyaW5nIFNUUklORywgcHJpbnRpbmcgYXQgbW9z
dCBMRU5HVEggY2hhcmFjdGVycy4NCisgICAgUHJpbnRpbmcgc3RvcHMgZWFybHkgaWYgdGhlIG51
bWJlciBoaXRzIHByaW50X21heDsgcmVwZWF0IGNvdW50cw0KKyAgICBhcmUgcHJpbnRlZCBhcyBh
cHByb3ByaWF0ZS4gIFByaW50IGVsbGlwc2VzIGF0IHRoZSBlbmQgaWYgd2UNCisgICAgaGFkIHRv
IHN0b3AgYmVmb3JlIHByaW50aW5nIExFTkdUSCBjaGFyYWN0ZXJzLCBvciBpZiBGT1JDRV9FTExJ
UFNFUy4gICovDQorIA0KKyB2b2lkDQorIHBhc19wcmludHN0ciAoc3RyZWFtLCBzdHJpbmcsIGxl
bmd0aCwgZm9yY2VfZWxsaXBzZXMpDQorICAgICAgR0RCX0ZJTEUgKnN0cmVhbTsNCisgICAgICBj
aGFyICpzdHJpbmc7DQorICAgICAgdW5zaWduZWQgaW50IGxlbmd0aDsNCisgICAgICBpbnQgZm9y
Y2VfZWxsaXBzZXM7DQorIHsNCisgICByZWdpc3RlciB1bnNpZ25lZCBpbnQgaTsNCisgICB1bnNp
Z25lZCBpbnQgdGhpbmdzX3ByaW50ZWQgPSAwOw0KKyAgIGludCBpbl9xdW90ZXMgPSAwOw0KKyAg
IGludCBuZWVkX2NvbW1hID0gMDsNCisgICBleHRlcm4gaW50IGluc3BlY3RfaXQ7DQorICAgZXh0
ZXJuIGludCByZXBlYXRfY291bnRfdGhyZXNob2xkOw0KKyAgIGV4dGVybiBpbnQgcHJpbnRfbWF4
Ow0KKyANCisgICAvKiBJZiB0aGUgc3RyaW5nIHdhcyBub3QgdHJ1bmNhdGVkIGR1ZSB0byBgc2V0
IHByaW50IGVsZW1lbnRzJywgYW5kDQorICAgICAgdGhlIGxhc3QgYnl0ZSBvZiBpdCBpcyBhIG51
bGwsIHdlIGRvbid0IHByaW50IHRoYXQsIGluIHRyYWRpdGlvbmFsIEMNCisgICAgICBzdHlsZS4g
ICovDQorICAgaWYgKCghZm9yY2VfZWxsaXBzZXMpICYmIGxlbmd0aCA+IDAgJiYgc3RyaW5nW2xl
bmd0aC0xXSA9PSAnXDAnKQ0KKyAgICAgbGVuZ3RoLS07DQorIA0KKyAgIGlmIChsZW5ndGggPT0g
MCkNCisgICAgIHsNCisgICAgICAgZnB1dHNfZmlsdGVyZWQgKCJcIlwiIiwgc3RyZWFtKTsNCisg
ICAgICAgcmV0dXJuOw0KKyAgICAgfQ0KKyANCisgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoICYm
IHRoaW5nc19wcmludGVkIDwgcHJpbnRfbWF4OyArK2kpDQorICAgICB7DQorICAgICAgIC8qIFBv
c2l0aW9uIG9mIHRoZSBjaGFyYWN0ZXIgd2UgYXJlIGV4YW1pbmluZw0KKyAJIHRvIHNlZSB3aGV0
aGVyIGl0IGlzIHJlcGVhdGVkLiAgKi8NCisgICAgICAgdW5zaWduZWQgaW50IHJlcDE7DQorICAg
ICAgIC8qIE51bWJlciBvZiByZXBldGl0aW9ucyB3ZSBoYXZlIGRldGVjdGVkIHNvIGZhci4gICov
DQorICAgICAgIHVuc2lnbmVkIGludCByZXBzOw0KKyANCisgICAgICAgUVVJVDsNCisgDQorICAg
ICAgIGlmIChuZWVkX2NvbW1hKQ0KKyAJew0KKyAJICBmcHV0c19maWx0ZXJlZCAoIiwgIiwgc3Ry
ZWFtKTsNCisgCSAgbmVlZF9jb21tYSA9IDA7DQorIAl9DQorIA0KKyAgICAgICByZXAxID0gaSAr
IDE7DQorICAgICAgIHJlcHMgPSAxOw0KKyAgICAgICB3aGlsZSAocmVwMSA8IGxlbmd0aCAmJiBz
dHJpbmdbcmVwMV0gPT0gc3RyaW5nW2ldKQ0KKyAJew0KKyAJICArK3JlcDE7DQorIAkgICsrcmVw
czsNCisgCX0NCisgDQorICAgICAgIGlmIChyZXBzID4gcmVwZWF0X2NvdW50X3RocmVzaG9sZCkN
CisgCXsNCisgCSAgaWYgKGluX3F1b3RlcykNCisgCSAgICB7DQorIAkgICAgICBpZiAoaW5zcGVj
dF9pdCkNCisgCQlmcHV0c19maWx0ZXJlZCAoIlxcXCIsICIsIHN0cmVhbSk7DQorIAkgICAgICBl
bHNlDQorIAkJZnB1dHNfZmlsdGVyZWQgKCJcIiwgIiwgc3RyZWFtKTsNCisgCSAgICAgIGluX3F1
b3RlcyA9IDA7DQorIAkgICAgfQ0KKyAJICBwYXNfcHJpbnRjaGFyIChzdHJpbmdbaV0sIHN0cmVh
bSk7DQorIAkgIGZwcmludGZfZmlsdGVyZWQgKHN0cmVhbSwgIiA8cmVwZWF0cyAldSB0aW1lcz4i
LCByZXBzKTsNCisgCSAgaSA9IHJlcDEgLSAxOw0KKyAJICB0aGluZ3NfcHJpbnRlZCArPSByZXBl
YXRfY291bnRfdGhyZXNob2xkOw0KKyAJICBuZWVkX2NvbW1hID0gMTsNCisgCX0NCisgICAgICAg
ZWxzZQ0KKyAJew0KKyAJICBpZiAoIWluX3F1b3RlcykNCisgCSAgICB7DQorIAkgICAgICBpZiAo
aW5zcGVjdF9pdCkNCisgCQlmcHV0c19maWx0ZXJlZCAoIlxcXCIiLCBzdHJlYW0pOw0KKyAJICAg
ICAgZWxzZQ0KKyAJCWZwdXRzX2ZpbHRlcmVkICgiXCIiLCBzdHJlYW0pOw0KKyAJICAgICAgaW5f
cXVvdGVzID0gMTsNCisgCSAgICB9DQorIAkgIGVtaXRfY2hhciAoc3RyaW5nW2ldLCBzdHJlYW0s
ICciJyk7DQorIAkgICsrdGhpbmdzX3ByaW50ZWQ7DQorIAl9DQorICAgICB9DQorIA0KKyAgIC8q
IFRlcm1pbmF0ZSB0aGUgcXVvdGVzIGlmIG5lY2Vzc2FyeS4gICovDQorICAgaWYgKGluX3F1b3Rl
cykNCisgICAgIHsNCisgICAgICAgaWYgKGluc3BlY3RfaXQpDQorIAlmcHV0c19maWx0ZXJlZCAo
IlxcXCIiLCBzdHJlYW0pOw0KKyAgICAgICBlbHNlDQorIAlmcHV0c19maWx0ZXJlZCAoIlwiIiwg
c3RyZWFtKTsNCisgICAgIH0NCisgDQorICAgaWYgKGZvcmNlX2VsbGlwc2VzIHx8IGkgPCBsZW5n
dGgpDQorICAgICBmcHV0c19maWx0ZXJlZCAoIi4uLiIsIHN0cmVhbSk7DQorIH0NCisgDQorIC8q
IENyZWF0ZSBhIGZ1bmRhbWVudGFsIEMgdHlwZSB1c2luZyBkZWZhdWx0IHJlYXNvbmFibGUgZm9y
IHRoZSBjdXJyZW50DQorICAgIHRhcmdldCBtYWNoaW5lLg0KKyANCisgICAgU29tZSBvYmplY3Qv
ZGVidWdnaW5nIGZpbGUgZm9ybWF0cyAoRFdBUkYgdmVyc2lvbiAxLCBDT0ZGLCBldGMpIGRvIG5v
dA0KKyAgICBkZWZpbmUgZnVuZGFtZW50YWwgdHlwZXMgc3VjaCBhcyAiaW50IiBvciAiZG91Ymxl
Ii4gIE90aGVycyAoc3RhYnMgb3INCisgICAgRFdBUkYgdmVyc2lvbiAyLCBldGMpIGRvIGRlZmlu
ZSBmdW5kYW1lbnRhbCB0eXBlcy4gIEZvciB0aGUgZm9ybWF0cyB3aGljaA0KKyAgICBkb24ndCBw
cm92aWRlIGZ1bmRhbWVudGFsIHR5cGVzLCBnZGIgY2FuIGNyZWF0ZSBzdWNoIHR5cGVzIHVzaW5n
IHRoaXMNCisgICAgZnVuY3Rpb24uDQorIA0KKyAgICBGSVhNRTogIFNvbWUgY29tcGlsZXJzIGRp
c3Rpbmd1aXNoIGV4cGxpY2l0bHkgc2lnbmVkIGludGVncmFsIHR5cGVzDQorICAgIChzaWduZWQg
c2hvcnQsIHNpZ25lZCBpbnQsIHNpZ25lZCBsb25nKSBmcm9tICJyZWd1bGFyIiBpbnRlZ3JhbCB0
eXBlcw0KKyAgICAoc2hvcnQsIGludCwgbG9uZykgaW4gdGhlIGRlYnVnZ2luZyBpbmZvcm1hdGlv
bi4gIFRoZXJlIGlzIHNvbWUgZGlzLQ0KKyAgICBhZ3JlZW1lbnQgYXMgdG8gaG93IHVzZWZ1bCB0
aGlzIGZlYXR1cmUgaXMuICBJbiBwYXJ0aWN1bGFyLCBnY2MgZG9lcw0KKyAgICBub3Qgc3VwcG9y
dCB0aGlzLiAgQWxzbywgb25seSBzb21lIGRlYnVnZ2luZyBmb3JtYXRzIGFsbG93IHRoZQ0KKyAg
ICBkaXN0aW5jdGlvbiB0byBiZSBwYXNzZWQgb24gdG8gYSBkZWJ1Z2dlci4gIEZvciBub3csIHdl
IGFsd2F5cyBqdXN0DQorICAgIHVzZSAic2hvcnQiLCAiaW50Iiwgb3IgImxvbmciIGFzIHRoZSB0
eXBlIG5hbWUsIGZvciBib3RoIHRoZSBpbXBsaWNpdA0KKyAgICBhbmQgZXhwbGljaXRseSBzaWdu
ZWQgdHlwZXMuICBUaGlzIGFsc28gbWFrZXMgbGlmZSBlYXNpZXIgZm9yIHRoZQ0KKyAgICBnZGIg
dGVzdCBzdWl0ZSBzaW5jZSB3ZSBkb24ndCBoYXZlIHRvIGFjY291bnQgZm9yIHRoZSBkaWZmZXJl
bmNlcw0KKyAgICBpbiBvdXRwdXQgZGVwZW5kaW5nIHVwb24gd2hhdCB0aGUgY29tcGlsZXIgYW5k
IGRlYnVnZ2luZyBmb3JtYXQNCisgICAgc3VwcG9ydC4gIFdlIHdpbGwgcHJvYmFibHkgaGF2ZSB0
byByZS1leGFtaW5lIHRoZSBpc3N1ZSB3aGVuIGdkYg0KKyAgICBzdGFydHMgdGFraW5nIGl0J3Mg
ZnVuZGFtZW50YWwgdHlwZSBpbmZvcm1hdGlvbiBkaXJlY3RseSBmcm9tIHRoZQ0KKyAgICBkZWJ1
Z2dpbmcgaW5mb3JtYXRpb24gc3VwcGxpZWQgYnkgdGhlIGNvbXBpbGVyLiAgZm5mQGN5Z251cy5j
b20gKi8NCisgDQorIHN0cnVjdCB0eXBlICoNCisgcGFzX2NyZWF0ZV9mdW5kYW1lbnRhbF90eXBl
IChvYmpmaWxlLCB0eXBlaWQpDQorICAgICAgc3RydWN0IG9iamZpbGUgKm9iamZpbGU7DQorICAg
ICAgaW50IHR5cGVpZDsNCisgew0KKyAgIHJlZ2lzdGVyIHN0cnVjdCB0eXBlICp0eXBlID0gTlVM
TDsNCisgDQorICAgc3dpdGNoICh0eXBlaWQpDQorICAgICB7DQorICAgICAgIGRlZmF1bHQ6DQor
IAkvKiBGSVhNRTogIEZvciBub3csIGlmIHdlIGFyZSBhc2tlZCB0byBwcm9kdWNlIGEgdHlwZSBu
b3QgaW4gdGhpcw0KKyAJICAgbGFuZ3VhZ2UsIGNyZWF0ZSB0aGUgZXF1aXZhbGVudCBvZiBhIEMg
aW50ZWdlciB0eXBlIHdpdGggdGhlDQorIAkgICBuYW1lICI8P3R5cGU/PiIuICBXaGVuIGFsbCB0
aGUgZHVzdCBzZXR0bGVzIGZyb20gdGhlIHR5cGUNCisgCSAgIHJlY29uc3RydWN0aW9uIHdvcmss
IHRoaXMgc2hvdWxkIHByb2JhYmx5IGJlY29tZSBhbiBlcnJvci4gKi8NCisgCXR5cGUgPSBpbml0
X3R5cGUgKFRZUEVfQ09ERV9JTlQsDQorIAkJCSAgVEFSR0VUX0lOVF9CSVQgLyBUQVJHRVRfQ0hB
Ul9CSVQsDQorIAkJCSAgMCwgIjw/dHlwZT8+Iiwgb2JqZmlsZSk7DQorICAgICAgICAgd2Fybmlu
ZyAoImludGVybmFsIGVycm9yOiBubyBDL0MrKyBmdW5kYW1lbnRhbCB0eXBlICVkIiwgdHlwZWlk
KTsNCisgCWJyZWFrOw0KKyAgICAgICBjYXNlIEZUX1ZPSUQ6DQorIAl0eXBlID0gaW5pdF90eXBl
IChUWVBFX0NPREVfVk9JRCwNCisgCQkJICBUQVJHRVRfQ0hBUl9CSVQgLyBUQVJHRVRfQ0hBUl9C
SVQsDQorIAkJCSAgMCwgInZvaWQiLCBvYmpmaWxlKTsNCisgCWJyZWFrOw0KKyAgICAgICBjYXNl
IEZUX0NIQVI6DQorIAl0eXBlID0gaW5pdF90eXBlIChUWVBFX0NPREVfSU5ULA0KKyAJCQkgIFRB
UkdFVF9DSEFSX0JJVCAvIFRBUkdFVF9DSEFSX0JJVCwNCisgCQkJICAwLCAiY2hhciIsIG9iamZp
bGUpOw0KKyAJYnJlYWs7DQorICAgICAgIGNhc2UgRlRfU0lHTkVEX0NIQVI6DQorIAl0eXBlID0g
aW5pdF90eXBlIChUWVBFX0NPREVfSU5ULA0KKyAJCQkgIFRBUkdFVF9DSEFSX0JJVCAvIFRBUkdF
VF9DSEFSX0JJVCwNCisgCQkJICAwLCAic2hvcnRpbnQiLCBvYmpmaWxlKTsNCisgCWJyZWFrOw0K
KyAgICAgICBjYXNlIEZUX1VOU0lHTkVEX0NIQVI6DQorIAl0eXBlID0gaW5pdF90eXBlIChUWVBF
X0NPREVfSU5ULA0KKyAJCQkgIFRBUkdFVF9DSEFSX0JJVCAvIFRBUkdFVF9DSEFSX0JJVCwNCisg
CQkJICBUWVBFX0ZMQUdfVU5TSUdORUQsICJieXRlIiwgb2JqZmlsZSk7DQorIAlicmVhazsNCisg
ICAgICAgY2FzZSBGVF9TSE9SVDoNCisgCXR5cGUgPSBpbml0X3R5cGUgKFRZUEVfQ09ERV9JTlQs
DQorIAkJCSAgVEFSR0VUX1NIT1JUX0JJVCAvIFRBUkdFVF9DSEFSX0JJVCwNCisgCQkJICAwLCAi
aW50ZWdlciIsIG9iamZpbGUpOw0KKyAJYnJlYWs7DQorICAgICAgIGNhc2UgRlRfU0lHTkVEX1NI
T1JUOg0KKyAJdHlwZSA9IGluaXRfdHlwZSAoVFlQRV9DT0RFX0lOVCwNCisgCQkJICBUQVJHRVRf
U0hPUlRfQklUIC8gVEFSR0VUX0NIQVJfQklULA0KKyAJCQkgIDAsICJpbnRlZ2VyIiwgb2JqZmls
ZSk7CS8qIEZJWE1FLWZuZiAqLw0KKyAJYnJlYWs7DQorICAgICAgIGNhc2UgRlRfVU5TSUdORURf
U0hPUlQ6DQorIAl0eXBlID0gaW5pdF90eXBlIChUWVBFX0NPREVfSU5ULA0KKyAJCQkgIFRBUkdF
VF9TSE9SVF9CSVQgLyBUQVJHRVRfQ0hBUl9CSVQsDQorIAkJCSAgVFlQRV9GTEFHX1VOU0lHTkVE
LCAid29yZCIsIG9iamZpbGUpOw0KKyAJYnJlYWs7DQorICAgICAgIGNhc2UgRlRfSU5URUdFUjoN
CisgCXR5cGUgPSBpbml0X3R5cGUgKFRZUEVfQ09ERV9JTlQsDQorIAkJCSAgVEFSR0VUX0lOVF9C
SVQgLyBUQVJHRVRfQ0hBUl9CSVQsDQorIAkJCSAgMCwgImxvbmdpbnQiLCBvYmpmaWxlKTsNCisg
CWJyZWFrOw0KKyAgICAgICBjYXNlIEZUX1NJR05FRF9JTlRFR0VSOg0KKyAJdHlwZSA9IGluaXRf
dHlwZSAoVFlQRV9DT0RFX0lOVCwNCisgCQkJICBUQVJHRVRfSU5UX0JJVCAvIFRBUkdFVF9DSEFS
X0JJVCwNCisgCQkJICAwLCAibG9uZ2ludCIsIG9iamZpbGUpOyAvKiBGSVhNRSAtZm5mICovDQor
IAlicmVhazsNCisgICAgICAgY2FzZSBGVF9VTlNJR05FRF9JTlRFR0VSOg0KKyAJdHlwZSA9IGlu
aXRfdHlwZSAoVFlQRV9DT0RFX0lOVCwNCisgCQkJICBUQVJHRVRfSU5UX0JJVCAvIFRBUkdFVF9D
SEFSX0JJVCwNCisgCQkJICBUWVBFX0ZMQUdfVU5TSUdORUQsICJjYXJkaW5hbCIsIG9iamZpbGUp
Ow0KKyAJYnJlYWs7DQorICAgICAgIGNhc2UgRlRfTE9ORzoNCisgCXR5cGUgPSBpbml0X3R5cGUg
KFRZUEVfQ09ERV9JTlQsDQorIAkJCSAgVEFSR0VUX0xPTkdfQklUIC8gVEFSR0VUX0NIQVJfQklU
LA0KKyAJCQkgIDAsICJsb25nIiwgb2JqZmlsZSk7DQorIAlicmVhazsNCisgICAgICAgY2FzZSBG
VF9TSUdORURfTE9ORzoNCisgCXR5cGUgPSBpbml0X3R5cGUgKFRZUEVfQ09ERV9JTlQsDQorIAkJ
CSAgVEFSR0VUX0xPTkdfQklUIC8gVEFSR0VUX0NIQVJfQklULA0KKyAJCQkgIDAsICJsb25nIiwg
b2JqZmlsZSk7IC8qIEZJWE1FIC1mbmYgKi8NCisgCWJyZWFrOw0KKyAgICAgICBjYXNlIEZUX1VO
U0lHTkVEX0xPTkc6DQorIAl0eXBlID0gaW5pdF90eXBlIChUWVBFX0NPREVfSU5ULA0KKyAJCQkg
IFRBUkdFVF9MT05HX0JJVCAvIFRBUkdFVF9DSEFSX0JJVCwNCisgCQkJICBUWVBFX0ZMQUdfVU5T
SUdORUQsICJ1bnNpZ25lZCBsb25nIiwgb2JqZmlsZSk7DQorIAlicmVhazsNCisgICAgICAgY2Fz
ZSBGVF9MT05HX0xPTkc6DQorIAl0eXBlID0gaW5pdF90eXBlIChUWVBFX0NPREVfSU5ULA0KKyAJ
CQkgIFRBUkdFVF9MT05HX0xPTkdfQklUIC8gVEFSR0VUX0NIQVJfQklULA0KKyAJCQkgIDAsICJs
b25nIGxvbmciLCBvYmpmaWxlKTsNCisgCWJyZWFrOw0KKyAgICAgICBjYXNlIEZUX1NJR05FRF9M
T05HX0xPTkc6DQorIAl0eXBlID0gaW5pdF90eXBlIChUWVBFX0NPREVfSU5ULA0KKyAJCQkgIFRB
UkdFVF9MT05HX0xPTkdfQklUIC8gVEFSR0VUX0NIQVJfQklULA0KKyAJCQkgIDAsICJzaWduZWQg
bG9uZyBsb25nIiwgb2JqZmlsZSk7DQorIAlicmVhazsNCisgICAgICAgY2FzZSBGVF9VTlNJR05F
RF9MT05HX0xPTkc6DQorIAl0eXBlID0gaW5pdF90eXBlIChUWVBFX0NPREVfSU5ULA0KKyAJCQkg
IFRBUkdFVF9MT05HX0xPTkdfQklUIC8gVEFSR0VUX0NIQVJfQklULA0KKyAJCQkgIFRZUEVfRkxB
R19VTlNJR05FRCwgInVuc2lnbmVkIGxvbmcgbG9uZyIsIG9iamZpbGUpOw0KKyAJYnJlYWs7DQor
ICAgICAgIGNhc2UgRlRfRkxPQVQ6DQorIAl0eXBlID0gaW5pdF90eXBlIChUWVBFX0NPREVfRkxU
LA0KKyAJCQkgIFRBUkdFVF9GTE9BVF9CSVQgLyBUQVJHRVRfQ0hBUl9CSVQsDQorIAkJCSAgMCwg
ImZsb2F0Iiwgb2JqZmlsZSk7DQorIAlicmVhazsNCisgICAgICAgY2FzZSBGVF9EQkxfUFJFQ19G
TE9BVDoNCisgCXR5cGUgPSBpbml0X3R5cGUgKFRZUEVfQ09ERV9GTFQsDQorIAkJCSAgVEFSR0VU
X0RPVUJMRV9CSVQgLyBUQVJHRVRfQ0hBUl9CSVQsDQorIAkJCSAgMCwgImRvdWJsZSIsIG9iamZp
bGUpOw0KKyAJYnJlYWs7DQorICAgICAgIGNhc2UgRlRfRVhUX1BSRUNfRkxPQVQ6DQorIAl0eXBl
ID0gaW5pdF90eXBlIChUWVBFX0NPREVfRkxULA0KKyAJCQkgIFRBUkdFVF9MT05HX0RPVUJMRV9C
SVQgLyBUQVJHRVRfQ0hBUl9CSVQsDQorIAkJCSAgMCwgImV4dGVuZGVkIiwgb2JqZmlsZSk7DQor
IAlicmVhazsNCisgICAgICAgfQ0KKyAgIHJldHVybiAodHlwZSk7DQorIH0NCisgDQorIAwNCisg
LyogVGFibGUgbWFwcGluZyBvcGNvZGVzIGludG8gc3RyaW5ncyBmb3IgcHJpbnRpbmcgb3BlcmF0
b3JzDQorICAgIGFuZCBwcmVjZWRlbmNlcyBvZiB0aGUgb3BlcmF0b3JzLiAgKi8NCisgDQorIGNv
bnN0IHN0cnVjdCBvcF9wcmludCBwYXNfb3BfcHJpbnRfdGFiW10gPQ0KKyAgIHsNCisgICAgIHsi
LCIsICBCSU5PUF9DT01NQSwgUFJFQ19DT01NQSwgMH0sDQorICAgICB7Ijo9IiwgIEJJTk9QX0FT
U0lHTiwgUFJFQ19BU1NJR04sIDF9LA0KKyAgICAgeyJvciIsICBCSU5PUF9CSVRXSVNFX0lPUiwg
UFJFQ19CSVRXSVNFX0lPUiwgMH0sDQorICAgICB7InhvciIsICBCSU5PUF9CSVRXSVNFX1hPUiwg
UFJFQ19CSVRXSVNFX1hPUiwgMH0sDQorICAgICB7ImFuZCIsICBCSU5PUF9CSVRXSVNFX0FORCwg
UFJFQ19CSVRXSVNFX0FORCwgMH0sDQorICAgICB7Ij0iLCBCSU5PUF9FUVVBTCwgUFJFQ19FUVVB
TCwgMH0sDQorICAgICB7Ijw+IiwgQklOT1BfTk9URVFVQUwsIFBSRUNfRVFVQUwsIDB9LA0KKyAg
ICAgeyI8PSIsIEJJTk9QX0xFUSwgUFJFQ19PUkRFUiwgMH0sDQorICAgICB7Ij49IiwgQklOT1Bf
R0VRLCBQUkVDX09SREVSLCAwfSwNCisgICAgIHsiPiIsICBCSU5PUF9HVFIsIFBSRUNfT1JERVIs
IDB9LA0KKyAgICAgeyI8IiwgIEJJTk9QX0xFU1MsIFBSRUNfT1JERVIsIDB9LA0KKyAgICAgeyJz
aHIiLCBCSU5PUF9SU0gsIFBSRUNfU0hJRlQsIDB9LA0KKyAgICAgeyJzaGwiLCBCSU5PUF9MU0gs
IFBSRUNfU0hJRlQsIDB9LA0KKyAgICAgeyIrIiwgIEJJTk9QX0FERCwgUFJFQ19BREQsIDB9LA0K
KyAgICAgeyItIiwgIEJJTk9QX1NVQiwgUFJFQ19BREQsIDB9LA0KKyAgICAgeyIqIiwgIEJJTk9Q
X01VTCwgUFJFQ19NVUwsIDB9LA0KKyAgICAgeyIvIiwgIEJJTk9QX0RJViwgUFJFQ19NVUwsIDB9
LA0KKyAgICAgeyJkaXYiLCAgQklOT1BfSU5URElWLCBQUkVDX01VTCwgMH0sDQorICAgICB7Im1v
ZCIsICBCSU5PUF9SRU0sIFBSRUNfTVVMLCAwfSwNCisgICAgIHsiQCIsICBCSU5PUF9SRVBFQVQs
IFBSRUNfUkVQRUFULCAwfSwNCisgICAgIHsiLSIsICBVTk9QX05FRywgUFJFQ19QUkVGSVgsIDB9
LA0KKyAgICAgeyJub3QiLCAgVU5PUF9MT0dJQ0FMX05PVCwgUFJFQ19QUkVGSVgsIDB9LA0KKyAg
ICAgeyJeIiwgIFVOT1BfSU5ELCBQUkVDX1NVRkZJWCwgMX0sDQorICAgICB7IkAiLCAgVU5PUF9B
RERSLCBQUkVDX1BSRUZJWCwgMH0sDQorICAgICB7InNpemVvZiIsIFVOT1BfU0laRU9GLCBQUkVD
X1BSRUZJWCwgMH0sDQorICAgICAvKiBDKysgICovDQorICAgICB7Ijo6IiwgQklOT1BfU0NPUEUs
IFBSRUNfUFJFRklYLCAwfSwNCisgICAgIHtOVUxMLCAwLCAwLCAwfQ0KKyB9Ow0KKyAMDQorIHN0
cnVjdCB0eXBlICoqIGNvbnN0IC8qIENPTlNUX1BUUiB2IDQuMTcgKi8gKHBhc19idWlsdGluX3R5
cGVzW10pID0gDQorIHsNCisgICAmYnVpbHRpbl90eXBlX2ludCwNCisgICAmYnVpbHRpbl90eXBl
X2xvbmcsDQorICAgJmJ1aWx0aW5fdHlwZV9zaG9ydCwNCisgICAmYnVpbHRpbl90eXBlX2NoYXIs
DQorICAgJmJ1aWx0aW5fdHlwZV9mbG9hdCwNCisgICAmYnVpbHRpbl90eXBlX2RvdWJsZSwNCisg
ICAmYnVpbHRpbl90eXBlX3ZvaWQsDQorICAgJmJ1aWx0aW5fdHlwZV9sb25nX2xvbmcsDQorICAg
JmJ1aWx0aW5fdHlwZV9zaWduZWRfY2hhciwNCisgICAmYnVpbHRpbl90eXBlX3Vuc2lnbmVkX2No
YXIsDQorICAgJmJ1aWx0aW5fdHlwZV91bnNpZ25lZF9zaG9ydCwNCisgICAmYnVpbHRpbl90eXBl
X3Vuc2lnbmVkX2ludCwNCisgICAmYnVpbHRpbl90eXBlX3Vuc2lnbmVkX2xvbmcsDQorICAgJmJ1
aWx0aW5fdHlwZV91bnNpZ25lZF9sb25nX2xvbmcsDQorICAgJmJ1aWx0aW5fdHlwZV9sb25nX2Rv
dWJsZSwNCisgICAmYnVpbHRpbl90eXBlX2NvbXBsZXgsDQorICAgJmJ1aWx0aW5fdHlwZV9kb3Vi
bGVfY29tcGxleCwNCisgICAwDQorIH07DQorIA0KKyBjb25zdCBzdHJ1Y3QgbGFuZ3VhZ2VfZGVm
biBwYXNfbGFuZ3VhZ2VfZGVmbiA9IHsNCisgICAicGFzY2FsIiwJCQkvKiBMYW5ndWFnZSBuYW1l
ICovDQorICAgbGFuZ3VhZ2VfcGFzY2FsLA0KKyAgIHBhc19idWlsdGluX3R5cGVzLA0KKyAgIHJh
bmdlX2NoZWNrX29uLA0KKyAgIHR5cGVfY2hlY2tfb24sDQorICAgcGFzX3BhcnNlLA0KKyAgIHBh
c19lcnJvciwNCisgICBldmFsdWF0ZV9zdWJleHBfc3RhbmRhcmQsDQorICAgcGFzX3ByaW50Y2hh
ciwJCS8qIFByaW50IGEgY2hhcmFjdGVyIGNvbnN0YW50ICovDQorICAgcGFzX3ByaW50c3RyLAkJ
CS8qIEZ1bmN0aW9uIHRvIHByaW50IHN0cmluZyBjb25zdGFudCAqLw0KKyAgIHBhc19jcmVhdGVf
ZnVuZGFtZW50YWxfdHlwZSwJLyogQ3JlYXRlIGZ1bmRhbWVudGFsIHR5cGUgaW4gdGhpcyBsYW5n
dWFnZSAqLw0KKyAgIHBhc19wcmludF90eXBlLAkJLyogUHJpbnQgYSB0eXBlIHVzaW5nIGFwcHJv
cHJpYXRlIHN5bnRheCAqLw0KKyAgIHBhc192YWxfcHJpbnQsCQkvKiBQcmludCBhIHZhbHVlIHVz
aW5nIGFwcHJvcHJpYXRlIHN5bnRheCAqLw0KKyAgIHBhc192YWx1ZV9wcmludCwJCS8qIFByaW50
IGEgdG9wLWxldmVsIHZhbHVlICovDQorICAgeyIiLCAgICAgIiUiLCAgICAiYiIsICAiIn0sCS8q
IEJpbmFyeSBmb3JtYXQgaW5mbyAqLw0KKyAgIHsiMCVsbyIsICAiMCIsICAgIm8iLCAiIn0sCS8q
IE9jdGFsIGZvcm1hdCBpbmZvICovDQorICAgeyIlbGQiLCAgICIiLCAgICAiZCIsICIifSwJLyog
RGVjaW1hbCBmb3JtYXQgaW5mbyAqLw0KKyAgIHsiJCVseCIsICIkIiwgICJ4IiwgIiJ9LAkvKiBI
ZXggZm9ybWF0IGluZm8gKi8NCisgICBwYXNfb3BfcHJpbnRfdGFiLAkJLyogZXhwcmVzc2lvbiBv
cGVyYXRvcnMgZm9yIHByaW50aW5nICovDQorICAgMSwJCQkJLyogYy1zdHlsZSBhcnJheXMgKi8N
CisgICAwLAkJCQkvKiBTdHJpbmcgbG93ZXIgYm91bmQgKi8NCisgICAmYnVpbHRpbl90eXBlX2No
YXIsCQkvKiBUeXBlIG9mIHN0cmluZyBlbGVtZW50cyAqLyANCisgICBMQU5HX01BR0lDDQorIH07
DQorIA0KKyB2b2lkDQorIF9pbml0aWFsaXplX3Bhc19sYW5ndWFnZSAoKQ0KKyB7DQorICAgYWRk
X2xhbmd1YWdlICgmcGFzX2xhbmd1YWdlX2RlZm4pOw0KKyB9DQorIC8qDQorICAgJExvZzogcC1s
YW5nLmMsdiAkDQorICAgUmV2aXNpb24gMS4yICAxOTk4LzEyLzIzIDE1OjUzOjA2ICBQaWVycmUN
CisgICBleGNlcHRpb25zIGFuZCBmbG9hdGluZm8NCisgDQorICAgUmV2aXNpb24gMS4xICAxOTk4
LzEyLzE4IDE4OjI1OjUwICBwaWVycmUNCisgICBmaXJzdCBESkdQUCB2NC4xNiBmb3IgcGFzY2Fs
IHdpdGggZXhjZXB0aW9uIGRlYnVnZ2luZyBjYXBhYmlsaXRpZXMNCisgDQorICAgUmV2aXNpb24g
MS4xICAxOTk4LzEyLzA0IDEwOjMxOjQ3ICBkb3N1c2VyDQorICAgICsgZmlyc3QgdmVyc2lvbiB3
aXRoIHBhc2NhbCBzeW50YXgNCisgDQorICAgUmV2aXNpb24gMS4xICAxOTk4LzA5LzE4IDEyOjM3
OjM5ICBwaWVycmUNCisgICBmaXJzdCBuZXcgZmlsZXMNCisgDQorICovDQpJbmRleDogZ2RiL3At
bGFuZy5oDQpkaWZmIC1jIG51bCBnZGIvcC1sYW5nLmg6MS4yDQoqKiogbnVsCVdlZCBEZWMgMjMg
MTc6MDI6MTYgMTk5OA0KLS0tIGdkYi9wLWxhbmcuaAlXZWQgRGVjIDIzIDE2OjUzOjA2IDE5OTgN
CioqKioqKioqKioqKioqKg0KKioqIDAgKioqKg0KLS0tIDEsODQgLS0tLQ0KKyAvKiBDIGxhbmd1
YWdlIHN1cHBvcnQgZGVmaW5pdGlvbnMgZm9yIEdEQiwgdGhlIEdOVSBkZWJ1Z2dlci4NCisgICAg
Q29weXJpZ2h0IDE5OTIsIDE5OTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuDQorIA0K
KyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHREIuDQorIA0KKyBUaGlzIHByb2dyYW0gaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQ0KKyBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieQ0KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvcg0KKyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0K
KyANCisgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsDQorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCisgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4NCisgDQorIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQorIGFsb25nIHdpdGggdGhpcyBw
cm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQorIEZvdW5kYXRpb24s
IEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3
LCBVU0EuICAqLw0KKyANCisgI2lmZGVmIF9fU1REQ19fCQkvKiBGb3J3YXJkIGRlY2xzIGZvciBw
cm90b3R5cGVzICovDQorIHN0cnVjdCB2YWx1ZTsNCisgI2VuZGlmDQorIA0KKyBleHRlcm4gaW50
DQorIHBhc19wYXJzZSBQQVJBTVMgKCh2b2lkKSk7CS8qIERlZmluZWQgaW4gcC1leHAueSAqLw0K
KyANCisgZXh0ZXJuIHZvaWQNCisgcGFzX2Vycm9yIFBBUkFNUyAoKGNoYXIgKikpOwkvKiBEZWZp
bmVkIGluIHAtZXhwLnkgKi8NCisgDQorIGV4dGVybiB2b2lkCQkJLyogRGVmaW5lZCBpbiBwLXR5
cGVwcmludC5jICovDQorIHBhc19wcmludF90eXBlIFBBUkFNUyAoKHN0cnVjdCB0eXBlICosIGNo
YXIgKiwgR0RCX0ZJTEUgKiwgaW50LCBpbnQpKTsNCisgDQorIGV4dGVybiBpbnQNCisgcGFzX3Zh
bF9wcmludCBQQVJBTVMgKChzdHJ1Y3QgdHlwZSAqLCBjaGFyICosIENPUkVfQUREUiwgR0RCX0ZJ
TEUgKiwgaW50LCBpbnQsDQorIAkJICAgICBpbnQsIGVudW0gdmFsX3ByZXR0eXByaW50KSk7DQor
IA0KKyBleHRlcm4gaW50DQorIHBhc192YWx1ZV9wcmludCBQQVJBTVMgKChzdHJ1Y3QgdmFsdWUg
KiwgR0RCX0ZJTEUgKiwgaW50LCBlbnVtIHZhbF9wcmV0dHlwcmludCkpOw0KKyANCisgZXh0ZXJu
IHZvaWQNCisgcGFzX3R5cGVfcHJpbnRfbWV0aG9kX2FyZ3MgUEFSQU1TICgoY2hhciAqLCBjaGFy
ICosDQorIAkJCQkgICBHREJfRklMRSAqKSk7DQorIA0KKyAvKiBUaGVzZSBhcmUgaW4gcC1sYW5n
LmM6ICovDQorIA0KKyBleHRlcm4gdm9pZCBwYXNfcHJpbnRjaGFyIFBBUkFNUyAoKGludCwgR0RC
X0ZJTEUqKSk7DQorIA0KKyBleHRlcm4gdm9pZCBwYXNfcHJpbnRzdHIgUEFSQU1TICgoR0RCX0ZJ
TEUgKiwgY2hhciAqLCB1bnNpZ25lZCBpbnQsIGludCkpOw0KKyANCisgZXh0ZXJuIHN0cnVjdCB0
eXBlICogcGFzX2NyZWF0ZV9mdW5kYW1lbnRhbF90eXBlIFBBUkFNUyAoKHN0cnVjdCBvYmpmaWxl
KiwgaW50KSk7DQorIA0KKyBleHRlcm4gc3RydWN0IHR5cGUgKiogY29uc3QgKHBhc19idWlsdGlu
X3R5cGVzW10pOw0KKyAvKiBleHRlcm4gc3RydWN0IHR5cGUgKiogY29uc3QgKGNfYnVpbHRpbl90
eXBlc1tdKTsgKi8NCisgDQorIC8qIFRoZXNlIGFyZSBpbiBwLXR5cGVwcmludC5jOiAqLw0KKyAN
CisgZXh0ZXJuIHZvaWQNCisgcGFzX3R5cGVfcHJpbnRfYmFzZSBQQVJBTVMgKChzdHJ1Y3QgdHlw
ZSAqLCBHREJfRklMRSAqLCBpbnQsIGludCkpOw0KKyANCisgZXh0ZXJuIHZvaWQNCisgcGFzX3R5
cGVfcHJpbnRfdmFyc3BlY19wcmVmaXggUEFSQU1TICgoc3RydWN0IHR5cGUgKiwgR0RCX0ZJTEUg
KiwgaW50LCBpbnQpKTsNCisgDQorIC8qIFRoZXNlIGFyZSBpbiBjcC12YWxwcmludC5jICovDQor
IA0KKyBleHRlcm4gaW50IHZ0YmxwcmludDsJCS8qIENvbnRyb2xzIHByaW50aW5nIG9mIHZ0Ymwn
cyAqLw0KKyANCisgZXh0ZXJuIGludCBzdGF0aWNfZmllbGRfcHJpbnQ7DQorIA0KKyBleHRlcm4g
dm9pZA0KKyBwYXNfY3BfcHJpbnRfY2xhc3NfbWVtYmVyIFBBUkFNUyAoKGNoYXIgKiwgc3RydWN0
IHR5cGUgKiwgR0RCX0ZJTEUgKiwgY2hhciAqKSk7DQorIA0KKyBleHRlcm4gdm9pZA0KKyBwYXNf
Y3BfcHJpbnRfY2xhc3NfbWV0aG9kIFBBUkFNUyAoKGNoYXIgKiwgc3RydWN0IHR5cGUgKiwgR0RC
X0ZJTEUgKikpOw0KKyANCisgZXh0ZXJuIHZvaWQNCisgcGFzX2NwX3ByaW50X3ZhbHVlX2ZpZWxk
cyBQQVJBTVMgKChzdHJ1Y3QgdHlwZSAqLCBjaGFyICosIENPUkVfQUREUiwNCisgCQkJICAgICAg
IEdEQl9GSUxFICosIGludCwgaW50LCBlbnVtIHZhbF9wcmV0dHlwcmludCwNCisgCQkJICAgICAg
IHN0cnVjdCB0eXBlKiosIGludCkpOw0KKyANCisgZXh0ZXJuIGludA0KKyBwYXNfY3BfaXNfdnRi
bF9wdHJfdHlwZSBQQVJBTVMgKChzdHJ1Y3QgdHlwZSAqKSk7DQorIA0KKyBleHRlcm4gaW50DQor
IHBhc19jcF9pc192dGJsX21lbWJlciBQQVJBTVMgKChzdHJ1Y3QgdHlwZSAqKSk7DQpJbmRleDog
Z2RiL3AtdHlwZXByLmMNCmRpZmYgLWMgbnVsIGdkYi9wLXR5cGVwci5jOjEuMg0KKioqIG51bAlX
ZWQgRGVjIDIzIDE3OjAyOjE2IDE5OTgNCi0tLSBnZGIvcC10eXBlcHIuYwlXZWQgRGVjIDIzIDE2
OjUzOjA2IDE5OTgNCioqKioqKioqKioqKioqKg0KKioqIDAgKioqKg0KLS0tIDEsODk0IC0tLS0N
CisgLyoNCisgICBNb2RpZmljYXRpb25zIGZvciBGUEMgc3VwcG9ydA0KKyAgICRJZDogcC10eXBl
cHIuYyx2IDEuMiAxOTk4LzEyLzIzIDE1OjUzOjA2IFBpZXJyZSBFeHAgJA0KKyAqLw0KKyAvKiBT
dXBwb3J0IGZvciBwcmludGluZyBDIGFuZCBDKysgdHlwZXMgZm9yIEdEQiwgdGhlIEdOVSBkZWJ1
Z2dlci4NCisgICAgQ29weXJpZ2h0IDE5ODYsIDE5ODgsIDE5ODksIDE5OTEsIDE5OTMsIDE5OTQs
IDE5OTUsIDE5OTYNCisgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuDQorIA0KKyBU
aGlzIGZpbGUgaXMgcGFydCBvZiBHREIuDQorIA0KKyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQ0KKyBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eQ0KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvcg0KKyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KKyAN
CisgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsDQorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mDQorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCisgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4NCisgDQorIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQorIGFsb25nIHdpdGggdGhpcyBwcm9n
cmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQorIEZvdW5kYXRpb24sIElu
Yy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBV
U0EuICAqLw0KKyANCisgI2luY2x1ZGUgImRlZnMuaCINCisgI2luY2x1ZGUgIm9ic3RhY2suaCIN
CisgI2luY2x1ZGUgImJmZC5oIgkJLyogQmluYXJ5IEZpbGUgRGVzY3JpcHRpb24gKi8NCisgI2lu
Y2x1ZGUgInN5bXRhYi5oIg0KKyAjaW5jbHVkZSAiZ2RidHlwZXMuaCINCisgI2luY2x1ZGUgImV4
cHJlc3Npb24uaCINCisgI2luY2x1ZGUgInZhbHVlLmgiDQorICNpbmNsdWRlICJnZGJjb3JlLmgi
DQorICNpbmNsdWRlICJ0YXJnZXQuaCINCisgI2luY2x1ZGUgImNvbW1hbmQuaCINCisgI2luY2x1
ZGUgImdkYmNtZC5oIg0KKyAjaW5jbHVkZSAibGFuZ3VhZ2UuaCINCisgI2luY2x1ZGUgImRlbWFu
Z2xlLmgiDQorICNpbmNsdWRlICJwLWxhbmcuaCINCisgI2luY2x1ZGUgInR5cGVwcmludC5oIg0K
KyANCisgI2luY2x1ZGUgImdkYl9zdHJpbmcuaCINCisgI2luY2x1ZGUgPGVycm5vLmg+DQorICNp
bmNsdWRlIDxjdHlwZS5oPg0KKyANCisgc3RhdGljIHZvaWQNCisgcGFzX3R5cGVfcHJpbnRfYXJn
cyBQQVJBTVMgKChzdHJ1Y3QgdHlwZSAqLCBHREJfRklMRSAqKSk7DQorIA0KKyBzdGF0aWMgdm9p
ZA0KKyBwYXNfdHlwZV9wcmludF92YXJzcGVjX3N1ZmZpeCBQQVJBTVMgKChzdHJ1Y3QgdHlwZSAq
LCBHREJfRklMRSAqLCBpbnQsIGludCwgaW50KSk7DQorIA0KKyBzdGF0aWMgdm9pZA0KKyBwY3Bh
c190eXBlX3ByaW50X2Rlcml2YXRpb25faW5mbyBQQVJBTVMgKChHREJfRklMRSAqLCBzdHJ1Y3Qg
dHlwZSAqKSk7DQorIA0KKyB2b2lkDQorIHBhc190eXBlX3ByaW50X3ZhcnNwZWNfcHJlZml4IFBB
UkFNUyAoKHN0cnVjdCB0eXBlICosIEdEQl9GSUxFICosIGludCwgaW50KSk7DQorIA0KKyAMDQor
IC8qIExFVkVMIGlzIHRoZSBkZXB0aCB0byBpbmRlbnQgbGluZXMgYnkuICAqLw0KKyANCisgdm9p
ZA0KKyBwYXNfcHJpbnRfdHlwZSAodHlwZSwgdmFyc3RyaW5nLCBzdHJlYW0sIHNob3csIGxldmVs
KQ0KKyAgICAgIHN0cnVjdCB0eXBlICp0eXBlOw0KKyAgICAgIGNoYXIgKnZhcnN0cmluZzsNCisg
ICAgICBHREJfRklMRSAqc3RyZWFtOw0KKyAgICAgIGludCBzaG93Ow0KKyAgICAgIGludCBsZXZl
bDsNCisgew0KKyAgIHJlZ2lzdGVyIGVudW0gdHlwZV9jb2RlIGNvZGU7DQorICAgaW50IGRlbWFu
Z2xlZF9hcmdzOw0KKyANCisgICBpZiAoc2hvdyA+IDApDQorICAgICBDSEVDS19UWVBFREVGICh0
eXBlKTsNCisgDQorICAgLyogZmlyc3QgcHJlZml4ICovDQorICAgDQorICAgY29kZSA9IFRZUEVf
Q09ERSAodHlwZSk7DQorICAgaWYgKCh2YXJzdHJpbmcgIT0gTlVMTCAmJiAqdmFyc3RyaW5nICE9
ICdcMCcpDQorICAgICAgIHx8DQorICAgICAgIC8qIE5lZWQgYSBzcGFjZSBpZiBnb2luZyB0byBw
cmludCBzdGFycyBvciBicmFja2V0czsNCisgCSBidXQgbm90IGlmIHdlIHdpbGwgcHJpbnQganVz
dCBhIHR5cGUgbmFtZS4gICovDQorICAgICAgICgoc2hvdyA+IDAgfHwgVFlQRV9OQU1FICh0eXBl
KSA9PSAwKQ0KKyAgICAgICAgJiYNCisgICAgICAgICggICBjb2RlID09IFRZUEVfQ09ERV9QVFIN
CisgICAgICAgICB8fCBjb2RlID09IFRZUEVfQ09ERV9GVU5DDQorIAl8fCBjb2RlID09IFRZUEVf
Q09ERV9NRVRIT0QNCisgCXx8IGNvZGUgPT0gVFlQRV9DT0RFX0FSUkFZDQorIAl8fCBjb2RlID09
IFRZUEVfQ09ERV9NRU1CRVINCisgCXx8IGNvZGUgPT0gVFlQRV9DT0RFX1JFRikpKQ0KKyAgICAg
ZnB1dHNfZmlsdGVyZWQgKCIgIiwgc3RyZWFtKTsNCisgICBwYXNfdHlwZV9wcmludF92YXJzcGVj
X3ByZWZpeCAodHlwZSwgc3RyZWFtLCBzaG93LCAwKTsNCisgDQorICAgLyogc2Vjb25kIHRoZSBu
YW1lICovDQorICAgZnB1dHNfZmlsdGVyZWQgKHZhcnN0cmluZywgc3RyZWFtKTsNCisgDQorICAg
aWYgKCh2YXJzdHJpbmcgIT0gTlVMTCAmJiAqdmFyc3RyaW5nICE9ICdcMCcpICYmDQorICAgICAg
ICEoY29kZSA9PSBUWVBFX0NPREVfRlVOQyB8fA0KKyAgICAgICAgIGNvZGUgPT0gVFlQRV9DT0RF
X01FVEhPRCkpDQorICAgICB7DQorICAgICBmcHV0c19maWx0ZXJlZCAoIiA6ICIsIHN0cmVhbSk7
DQorICAgICB9DQorICAgcGFzX3R5cGVfcHJpbnRfYmFzZSAodHlwZSwgc3RyZWFtLCBzaG93LCBs
ZXZlbCk7DQorICAgLyogRm9yIGRlbWFuZ2xlZCBmdW5jdGlvbiBuYW1lcywgd2UgaGF2ZSB0aGUg
YXJnbGlzdCBhcyBwYXJ0IG9mIHRoZSBuYW1lLA0KKyAgICAgIHNvIGRvbid0IHByaW50IGFuIGFk
ZGl0aW9uYWwgcGFpciBvZiAoKSdzICovDQorIA0KKyAgIGRlbWFuZ2xlZF9hcmdzID0gc3RyY2hy
KHZhcnN0cmluZywgJygnKSAhPSBOVUxMOw0KKyAgIHBhc190eXBlX3ByaW50X3ZhcnNwZWNfc3Vm
Zml4ICh0eXBlLCBzdHJlYW0sIHNob3csIDAsIGRlbWFuZ2xlZF9hcmdzKTsNCisgDQorIH0NCisg
ICANCisgLyogSWYgVFlQRSBpcyBhIGRlcml2ZWQgdHlwZSwgdGhlbiBwcmludCBvdXQgZGVyaXZh
dGlvbiBpbmZvcm1hdGlvbi4NCisgICAgUHJpbnQgb25seSB0aGUgYWN0dWFsIGJhc2UgY2xhc3Nl
cyBvZiB0aGlzIHR5cGUsIG5vdCB0aGUgYmFzZSBjbGFzc2VzDQorICAgIG9mIHRoZSBiYXNlIGNs
YXNzZXMuICBJLkUuICBmb3IgdGhlIGRlcml2YXRpb24gaGllcmFyY2h5Og0KKyANCisgCWNsYXNz
IEEgeyBpbnQgYTsgfTsNCisgCWNsYXNzIEIgOiBwdWJsaWMgQSB7aW50IGI7IH07DQorIAljbGFz
cyBDIDogcHVibGljIEIge2ludCBjOyB9Ow0KKyANCisgICAgUHJpbnQgdGhlIHR5cGUgb2YgY2xh
c3MgQyBhczoNCisgDQorICAgIAljbGFzcyBDIDogcHVibGljIEIgew0KKyAJCWludCBjOw0KKyAJ
fQ0KKyANCisgICAgTm90IGFzIHRoZSBmb2xsb3dpbmcgKGxpa2UgZ2RiIHVzZWQgdG8pLCB3aGlj
aCBpcyBub3QgbGVnYWwgQysrIHN5bnRheCBmb3INCisgICAgZGVyaXZlZCB0eXBlcyBhbmQgbWF5
IGJlIGNvbmZ1c2VkIHdpdGggdGhlIG11bHRpcGxlIGluaGVyaXRhbmNlIGZvcm06DQorIA0KKyAJ
Y2xhc3MgQyA6IHB1YmxpYyBCIDogcHVibGljIEEgew0KKyAJCWludCBjOw0KKyAJfQ0KKyANCisg
ICAgSW4gZ2VuZXJhbCwgZ2RiIHNob3VsZCB0cnkgdG8gcHJpbnQgdGhlIHR5cGVzIGFzIGNsb3Nl
bHkgYXMgcG9zc2libGUgdG8NCisgICAgdGhlIGZvcm0gdGhhdCB0aGV5IGFwcGVhciBpbiB0aGUg
c291cmNlIGNvZGUuICovDQorIA0KKyBzdGF0aWMgdm9pZA0KKyBwY3Bhc190eXBlX3ByaW50X2Rl
cml2YXRpb25faW5mbyAoc3RyZWFtLCB0eXBlKQ0KKyAgICAgIEdEQl9GSUxFICpzdHJlYW07DQor
ICAgICAgc3RydWN0IHR5cGUgKnR5cGU7DQorIHsNCisgICBjaGFyICpuYW1lOw0KKyAgIGludCBp
Ow0KKyANCisgICBmb3IgKGkgPSAwOyBpIDwgVFlQRV9OX0JBU0VDTEFTU0VTICh0eXBlKTsgaSsr
KQ0KKyAgICAgew0KKyAgICAgICBmcHV0c19maWx0ZXJlZCAoaSA9PSAwID8gIjogIiA6ICIsICIs
IHN0cmVhbSk7DQorICAgICAgIGZwcmludGZfZmlsdGVyZWQgKHN0cmVhbSwgIiVzJXMgIiwNCisg
CQkJQkFTRVRZUEVfVklBX1BVQkxJQyAodHlwZSwgaSkgPyAicHVibGljIiA6ICJwcml2YXRlIiwN
CisgCQkJQkFTRVRZUEVfVklBX1ZJUlRVQUwodHlwZSwgaSkgPyAiIHZpcnR1YWwiIDogIiIpOw0K
KyAgICAgICBuYW1lID0gdHlwZV9uYW1lX25vX3RhZyAoVFlQRV9CQVNFQ0xBU1MgKHR5cGUsIGkp
KTsNCisgICAgICAgZnByaW50Zl9maWx0ZXJlZCAoc3RyZWFtLCAiJXMiLCBuYW1lID8gbmFtZSA6
ICIobnVsbCkiKTsNCisgICAgIH0NCisgICBpZiAoaSA+IDApDQorICAgICB7DQorICAgICAgIGZw
dXRzX2ZpbHRlcmVkICgiICIsIHN0cmVhbSk7DQorICAgICB9DQorIH0NCisgDQorIC8qIFByaW50
IHRoZSBGUEMgbWV0aG9kIGFyZ3VtZW50cyBBUkdTIHRvIHRoZSBmaWxlIFNUUkVBTS4gICovDQor
IA0KKyB2b2lkDQorIHBhc190eXBlX3ByaW50X21ldGhvZF9hcmdzIChwaHlzbmFtZSwgbWV0aG9k
bmFtZSwgc3RyZWFtKQ0KKyAgICAgIGNoYXIgKnBoeXNuYW1lOw0KKyAgICAgIGNoYXIgKm1ldGhv
ZG5hbWU7DQorICAgICAgR0RCX0ZJTEUgKnN0cmVhbTsNCisgew0KKyAgIGludCBpc19jb25zdHJ1
Y3RvciA9IFNUUkVRTiAocGh5c25hbWUsICJfX2N0X18iLCA2KTsNCisgICBpbnQgaXNfZGVzdHJ1
Y3RvciA9IFNUUkVRTiAocGh5c25hbWUsICJfX2R0X18iLCA2KTsNCisgDQorICAgaWYgKGlzX2Nv
bnN0cnVjdG9yIHx8IGlzX2Rlc3RydWN0b3IpDQorICAgICB7DQorICAgICAgcGh5c25hbWUrPTY7
DQorICAgICB9DQorIA0KKyAgIGZwdXRzX2ZpbHRlcmVkIChtZXRob2RuYW1lLCBzdHJlYW0pOw0K
KyANCisgICBpZiAocGh5c25hbWUgJiYgKCpwaHlzbmFtZSAhPSAwKSkNCisgICAgIHsNCisgICAg
ICAgaW50IGkgPSAwOw0KKyAgICAgICBpbnQgbGVuID0gMDsNCisgICAgICAgY2hhciBzdG9yZWM7
DQorICAgICAgIGNoYXIgKmFyZ25hbWU7DQorICAgICAgIGZwdXRzX2ZpbHRlcmVkICgiICgiLCBz
dHJlYW0pOw0KKyAgICAgICAvKiB3ZSBtdXN0IGRlbWFuZ2xlIHRoaXMgKi8NCisgICAgICAgd2hp
bGUgaXNkaWdpdChwaHlzbmFtZVswXSkNCisgICAgICAgICB7DQorICAgICAgICAgIHdoaWxlIGlz
ZGlnaXQgKHBoeXNuYW1lW2xlbl0pDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICBsZW4r
KzsNCisgICAgICAgICAgICB9DQorICAgICAgICAgIGkgPSBzdHJ0b2wocGh5c25hbWUsJmFyZ25h
bWUsMCk7DQorICAgICAgICAgIHBoeXNuYW1lKz1sZW47DQorICAgICAgICAgIHN0b3JlYyA9IHBo
eXNuYW1lW2ldOw0KKyAgICAgICAgICBwaHlzbmFtZVtpXSA9IDA7DQorICAgICAgICAgIGZwdXRz
X2ZpbHRlcmVkIChwaHlzbmFtZSwgc3RyZWFtKTsNCisgICAgICAgICAgcGh5c25hbWVbaV0gPSBz
dG9yZWM7DQorICAgICAgICAgIHBoeXNuYW1lKz1pOw0KKyAgICAgICAgICBpZiAocGh5c25hbWVb
MF0gIT0gMCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgIGZwdXRzX2ZpbHRlcmVkICgi
LCAiLCBzdHJlYW0pOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICB9DQorICAgICAgIGZwdXRz
X2ZpbHRlcmVkICgiKSIsIHN0cmVhbSk7DQorICAgICB9DQorIH0NCisgICANCisgLyogUHJpbnQg
YW55IGFzdGVyaXNrcyBvciBvcGVuLXBhcmVudGhlc2VzIG5lZWRlZCBiZWZvcmUgdGhlDQorICAg
IHZhcmlhYmxlIG5hbWUgKHRvIGRlc2NyaWJlIGl0cyB0eXBlKS4NCisgDQorICAgIE9uIG91dGVy
bW9zdCBjYWxsLCBwYXNzIDAgZm9yIFBBU1NFRF9BX1BUUi4NCisgICAgT24gb3V0ZXJtb3N0IGNh
bGwsIFNIT1cgPiAwIG1lYW5zIHNob3VsZCBpZ25vcmUNCisgICAgYW55IHR5cGVuYW1lIGZvciBU
WVBFIGFuZCBzaG93IGl0cyBkZXRhaWxzLg0KKyAgICBTSE9XIGlzIGFsd2F5cyB6ZXJvIG9uIHJl
Y3Vyc2l2ZSBjYWxscy4gICovDQorIA0KKyB2b2lkDQorIHBhc190eXBlX3ByaW50X3ZhcnNwZWNf
cHJlZml4ICh0eXBlLCBzdHJlYW0sIHNob3csIHBhc3NlZF9hX3B0cikNCisgICAgICBzdHJ1Y3Qg
dHlwZSAqdHlwZTsNCisgICAgICBHREJfRklMRSAqc3RyZWFtOw0KKyAgICAgIGludCBzaG93Ow0K
KyAgICAgIGludCBwYXNzZWRfYV9wdHI7DQorIHsNCisgICBjaGFyICpuYW1lOw0KKyAgIGlmICh0
eXBlID09IDApDQorICAgICByZXR1cm47DQorIA0KKyAgIGlmIChUWVBFX05BTUUgKHR5cGUpICYm
IHNob3cgPD0gMCkNCisgICAgIHJldHVybjsNCisgDQorICAgUVVJVDsNCisgDQorICAgc3dpdGNo
IChUWVBFX0NPREUgKHR5cGUpKQ0KKyAgICAgew0KKyAgICAgY2FzZSBUWVBFX0NPREVfUFRSOg0K
KyAgICAgICBmcHJpbnRmX2ZpbHRlcmVkIChzdHJlYW0sICJeIik7DQorICAgICAgIHBhc190eXBl
X3ByaW50X3ZhcnNwZWNfcHJlZml4IChUWVBFX1RBUkdFVF9UWVBFICh0eXBlKSwgc3RyZWFtLCAw
LCAxKTsNCisgICAgICAgYnJlYWs7IC8qIHBvaW50ZXIgc2hvdWxkIGJlIGhhbmRsZWQgbm9ybWFs
bHkgaW4gcGFzY2FsICovDQorIA0KKyAgICAgY2FzZSBUWVBFX0NPREVfTUVNQkVSOg0KKyAgICAg
ICBpZiAocGFzc2VkX2FfcHRyKQ0KKyAJZnByaW50Zl9maWx0ZXJlZCAoc3RyZWFtLCAiKCIpOw0K
KyAgICAgICBwYXNfdHlwZV9wcmludF92YXJzcGVjX3ByZWZpeCAoVFlQRV9UQVJHRVRfVFlQRSAo
dHlwZSksIHN0cmVhbSwgMCwgMCk7DQorICAgICAgIGZwcmludGZfZmlsdGVyZWQgKHN0cmVhbSwg
IiAiKTsNCisgICAgICAgbmFtZSA9IHR5cGVfbmFtZV9ub190YWcgKFRZUEVfRE9NQUlOX1RZUEUg
KHR5cGUpKTsNCisgICAgICAgaWYgKG5hbWUpDQorIAlmcHV0c19maWx0ZXJlZCAobmFtZSwgc3Ry
ZWFtKTsNCisgICAgICAgZWxzZQ0KKyAgICAgICAgIHBhc190eXBlX3ByaW50X2Jhc2UgKFRZUEVf
RE9NQUlOX1RZUEUgKHR5cGUpLCBzdHJlYW0sIDAsIHBhc3NlZF9hX3B0cik7DQorICAgICAgIGZw
cmludGZfZmlsdGVyZWQgKHN0cmVhbSwgIjo6Iik7DQorICAgICAgIGJyZWFrOw0KKyANCisgICAg
IGNhc2UgVFlQRV9DT0RFX01FVEhPRDoNCisgICAgICAgaWYgKHBhc3NlZF9hX3B0cikNCisgCWZw
cmludGZfZmlsdGVyZWQgKHN0cmVhbSwgIigiKTsNCisgICAgICAgaWYgKCBUWVBFX0NPREUoVFlQ
RV9UQVJHRVRfVFlQRSAodHlwZSkpICE9IFRZUEVfQ09ERV9WT0lEKQ0KKyAgICAgICAgICB7DQor
ICAgICAgICAgICBmcHJpbnRmX2ZpbHRlcmVkIChzdHJlYW0sICJmdW5jdGlvbiAgIik7DQorICAg
ICAgICAgIH0NCisgICAgICAgZWxzZQ0KKyAgICAgICAgICB7DQorICAgICAgICAgICBmcHJpbnRm
X2ZpbHRlcmVkIChzdHJlYW0sICJwcm9jZWR1cmUgIik7DQorICAgICAgICAgIH0NCisgICAgICAg
DQorICAgICAgIGlmIChwYXNzZWRfYV9wdHIpDQorIAl7DQorIAkgIGZwcmludGZfZmlsdGVyZWQg
KHN0cmVhbSwgIiAiKTsNCisgCSAgcGFzX3R5cGVfcHJpbnRfYmFzZSAoVFlQRV9ET01BSU5fVFlQ
RSAodHlwZSksIHN0cmVhbSwgMCwgcGFzc2VkX2FfcHRyKTsNCisgCSAgZnByaW50Zl9maWx0ZXJl
ZCAoc3RyZWFtLCAiOjoiKTsNCisgCX0NCisgICAgICAgYnJlYWs7DQorIA0KKyAgICAgY2FzZSBU
WVBFX0NPREVfUkVGOg0KKyAgICAgICBwYXNfdHlwZV9wcmludF92YXJzcGVjX3ByZWZpeCAoVFlQ
RV9UQVJHRVRfVFlQRSAodHlwZSksIHN0cmVhbSwgMCwgMSk7DQorICAgICAgIGZwcmludGZfZmls
dGVyZWQgKHN0cmVhbSwgIiYiKTsNCisgICAgICAgYnJlYWs7DQorIA0KKyAgICAgY2FzZSBUWVBF
X0NPREVfRlVOQzoNCisgICAgICAgaWYgKHBhc3NlZF9hX3B0cikNCisgCWZwcmludGZfZmlsdGVy
ZWQgKHN0cmVhbSwgIigiKTsNCisgDQorICAgICAgIGlmICggVFlQRV9DT0RFKFRZUEVfVEFSR0VU
X1RZUEUgKHR5cGUpKSAhPSBUWVBFX0NPREVfVk9JRCkNCisgICAgICAgICAgew0KKyAgICAgICAg
ICAgZnByaW50Zl9maWx0ZXJlZCAoc3RyZWFtLCAiZnVuY3Rpb24gICIpOw0KKyAgICAgICAgICB9
DQorICAgICAgIGVsc2UNCisgICAgICAgICAgew0KKyAgICAgICAgICAgZnByaW50Zl9maWx0ZXJl
ZCAoc3RyZWFtLCAicHJvY2VkdXJlICIpOw0KKyAgICAgICAgICB9DQorICAgICAgIA0KKyAgICAg
ICBicmVhazsNCisgDQorICAgICBjYXNlIFRZUEVfQ09ERV9BUlJBWToNCisgICAgICAgaWYgKHBh
c3NlZF9hX3B0cikNCisgCWZwcmludGZfZmlsdGVyZWQgKHN0cmVhbSwgIigiKTsNCisgICAgICAg
ZnByaW50Zl9maWx0ZXJlZCAoc3RyZWFtLCAiYXJyYXkgIik7DQorICAgICAgIGlmIChUWVBFX0xF
TkdUSCAodHlwZSkgPj0gMCAmJiBUWVBFX0xFTkdUSCAoVFlQRV9UQVJHRVRfVFlQRSAodHlwZSkp
ID4gMA0KKyAJICAmJiBUWVBFX0FSUkFZX1VQUEVSX0JPVU5EX1RZUEUodHlwZSkgIT0gQk9VTkRf
Q0FOTk9UX0JFX0RFVEVSTUlORUQpDQorIAlmcHJpbnRmX2ZpbHRlcmVkIChzdHJlYW0sICJbJWQu
LiVkXSAiLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgVFlQRV9BUlJBWV9MT1dFUl9CT1VO
RF9WQUxVRSh0eXBlKSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgIFRZUEVfQVJSQVlfVVBQ
RVJfQk9VTkRfVkFMVUUodHlwZSkNCisgCQkJICk7DQorICAgICAgIGZwcmludGZfZmlsdGVyZWQg
KHN0cmVhbSwgIm9mICIpOw0KKyAgICAgICBicmVhazsNCisgDQorICAgICBjYXNlIFRZUEVfQ09E
RV9VTkRFRjoNCisgICAgIGNhc2UgVFlQRV9DT0RFX1NUUlVDVDoNCisgICAgIGNhc2UgVFlQRV9D
T0RFX1VOSU9OOg0KKyAgICAgY2FzZSBUWVBFX0NPREVfRU5VTToNCisgICAgIGNhc2UgVFlQRV9D
T0RFX0lOVDoNCisgICAgIGNhc2UgVFlQRV9DT0RFX0ZMVDoNCisgICAgIGNhc2UgVFlQRV9DT0RF
X1ZPSUQ6DQorICAgICBjYXNlIFRZUEVfQ09ERV9FUlJPUjoNCisgICAgIGNhc2UgVFlQRV9DT0RF
X0NIQVI6DQorICAgICBjYXNlIFRZUEVfQ09ERV9CT09MOg0KKyAgICAgY2FzZSBUWVBFX0NPREVf
U0VUOg0KKyAgICAgY2FzZSBUWVBFX0NPREVfUkFOR0U6DQorICAgICBjYXNlIFRZUEVfQ09ERV9T
VFJJTkc6DQorICAgICBjYXNlIFRZUEVfQ09ERV9CSVRTVFJJTkc6DQorICAgICBjYXNlIFRZUEVf
Q09ERV9DT01QTEVYOg0KKyAgICAgY2FzZSBUWVBFX0NPREVfVFlQRURFRjoNCisgICAgICAgLyog
VGhlc2UgdHlwZXMgbmVlZCBubyBwcmVmaXguICBUaGV5IGFyZSBsaXN0ZWQgaGVyZSBzbyB0aGF0
DQorIAkgZ2NjIC1XYWxsIHdpbGwgcmV2ZWFsIGFueSB0eXBlcyB0aGF0IGhhdmVuJ3QgYmVlbiBo
YW5kbGVkLiAgKi8NCisgICAgICAgYnJlYWs7DQorICAgICB9DQorIH0NCisgDQorIHN0YXRpYyB2
b2lkDQorIHBhc190eXBlX3ByaW50X2FyZ3MgKHR5cGUsIHN0cmVhbSkNCisgICAgICBzdHJ1Y3Qg
dHlwZSAqdHlwZTsNCisgICAgICBHREJfRklMRSAqc3RyZWFtOw0KKyB7DQorICAgaW50IGk7DQor
ICAgc3RydWN0IHR5cGUgKiphcmdzOw0KKyANCisgICAvKiAgZnByaW50Zl9maWx0ZXJlZCAoc3Ry
ZWFtLCAiKCIpOw0KKyAgICAgbm8gKCkgZm9yIHByb2NlZHVyZXMgISEgKi8NCisgICBhcmdzID0g
VFlQRV9BUkdfVFlQRVMgKHR5cGUpOw0KKyAgIGlmIChhcmdzICE9IE5VTEwpDQorICAgICB7DQor
ICAgICAgIGlmICgoYXJnc1sxXSAhPSBOVUxMICYmIGFyZ3NbMV0tPmNvZGUgIT0gVFlQRV9DT0RF
X1ZPSUQpIHx8DQorICAgICAgICAgIChhcmdzWzJdICE9IE5VTEwpKQ0KKyAgICAgICAgew0KKyAg
ICAgICAgIGZwcmludGZfZmlsdGVyZWQgKHN0cmVhbSwgIigiKTsNCisgICAgICAgIH0NCisgICAg
ICAgaWYgKGFyZ3NbMV0gPT0gTlVMTCkNCisgCXsNCisgCSAgZnByaW50Zl9maWx0ZXJlZCAoc3Ry
ZWFtLCAiLi4uIik7DQorIAl9DQorICAgICAgIGVsc2UNCisgCXsNCisgCSAgZm9yIChpID0gMTsN
CisgCSAgICAgICBhcmdzW2ldICE9IE5VTEwgJiYgYXJnc1tpXS0+Y29kZSAhPSBUWVBFX0NPREVf
Vk9JRDsNCisgCSAgICAgICBpKyspDQorIAkgICAgew0KKyAJICAgICAgcGFzX3ByaW50X3R5cGUg
KGFyZ3NbaV0sICIiLCBzdHJlYW0sIC0xLCAwKTsNCisgCSAgICAgIGlmIChhcmdzW2krMV0gPT0g
TlVMTCkNCisgCQl7DQorIAkJICBmcHJpbnRmX2ZpbHRlcmVkIChzdHJlYW0sICIuLi4iKTsNCisg
CQl9DQorIAkgICAgICBlbHNlIGlmIChhcmdzW2krMV0tPmNvZGUgIT0gVFlQRV9DT0RFX1ZPSUQp
DQorIAkJew0KKyAJCSAgZnByaW50Zl9maWx0ZXJlZCAoc3RyZWFtLCAiLCIpOw0KKyAJCSAgd3Jh
cF9oZXJlICgiICAgICIpOw0KKyAJCX0NCisgCSAgICB9DQorIAl9DQorICAgICAgIGlmICgoYXJn
c1sxXSAhPSBOVUxMICYmIGFyZ3NbMV0tPmNvZGUgIT0gVFlQRV9DT0RFX1ZPSUQpIHx8DQorICAg
ICAgICAgIChhcmdzWzJdICE9IE5VTEwpKQ0KKyAgICAgICAgew0KKyAgICAgICAgIGZwcmludGZf
ZmlsdGVyZWQgKHN0cmVhbSwgIikiKTsNCisgICAgICAgIH0NCisgICAgIH0NCisgfQ0KKyANCisg
c3RhdGljIHZvaWQNCisgcGFzX3ByaW50X2Z1bmNfYXJncyAoc3RydWN0IHR5cGUgKnR5cGUsIEdE
Ql9GSUxFICpzdHJlYW0pDQorICAgICAgeyBpbnQgaSwgbGVuID0gVFlQRV9ORklFTERTICh0eXBl
KTsNCisgICAgICAgIGlmIChsZW4pDQorICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAg
ICAgICAgZnByaW50Zl9maWx0ZXJlZCAoc3RyZWFtLCAiKCIpOw0KKyAgICAgICAgICAgICAgICAg
fQ0KKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQ0KKyAgICAgICAgICB7DQorICAg
ICAgICAgICAgaWYgKGkgPiAwKQ0KKyAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgZnB1
dHNfZmlsdGVyZWQgKCIsICIsIHN0cmVhbSk7DQorICAgICAgICAgICAgICAgd3JhcF9oZXJlICgi
ICAgICIpOw0KKyAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgIC8qICBjYW4gd2Ug
ZmluZCBpZiBpdCBpcyBhIHZhciBwYXJhbWV0ZXIgPz8NCisgICAgICAgICAgICAgICAgICAgaWYg
KCBUWVBFX0ZJRUxEKHR5cGUsIGkpID09ICkNCisgICAgICAgICAgICAgICAgICAgICB7DQorICAg
ICAgICAgICAgICAgICAgICAgIGZwcmludGZfZmlsdGVyZWQgKHN0cmVhbSwgInZhciAiKTsNCisg
ICAgICAgICAgICAgICAgICAgICB9ICovDQorICAgICAgICAgICAgcGFzX3ByaW50X3R5cGUgKFRZ
UEVfRklFTERfVFlQRSAodHlwZSwgaSksICIiIC8qIFRZUEVfRklFTERfTkFNRSBzZWVtcyBpbnZh
bGlkICEgKi8NCisgICAgICAgICAgICAgICwgc3RyZWFtLCAtMSwgMCk7DQorICAgICAgICAgIH0N
CisgICAgICAgIGlmIChsZW4pDQorICAgICAgICAgIHsNCisgICAgICAgICAgICBmcHJpbnRmX2Zp
bHRlcmVkIChzdHJlYW0sICIpIik7DQorICAgICAgICAgIH0NCisgICAgICB9DQorICAgICAgDQor
IC8qIFByaW50IGFueSBhcnJheSBzaXplcywgZnVuY3Rpb24gYXJndW1lbnRzIG9yIGNsb3NlIHBh
cmVudGhlc2VzDQorICAgIG5lZWRlZCBhZnRlciB0aGUgdmFyaWFibGUgbmFtZSAodG8gZGVzY3Jp
YmUgaXRzIHR5cGUpLg0KKyAgICBBcmdzIHdvcmsgbGlrZSBwYXNfdHlwZV9wcmludF92YXJzcGVj
X3ByZWZpeC4gICovDQorIA0KKyBzdGF0aWMgdm9pZA0KKyBwYXNfdHlwZV9wcmludF92YXJzcGVj
X3N1ZmZpeCAodHlwZSwgc3RyZWFtLCBzaG93LCBwYXNzZWRfYV9wdHIsIGRlbWFuZ2xlZF9hcmdz
KQ0KKyAgICAgIHN0cnVjdCB0eXBlICp0eXBlOw0KKyAgICAgIEdEQl9GSUxFICpzdHJlYW07DQor
ICAgICAgaW50IHNob3c7DQorICAgICAgaW50IHBhc3NlZF9hX3B0cjsNCisgICAgICBpbnQgZGVt
YW5nbGVkX2FyZ3M7DQorIHsNCisgICBpZiAodHlwZSA9PSAwKQ0KKyAgICAgcmV0dXJuOw0KKyAN
CisgICBpZiAoVFlQRV9OQU1FICh0eXBlKSAmJiBzaG93IDw9IDApDQorICAgICByZXR1cm47DQor
IA0KKyAgIFFVSVQ7DQorIA0KKyAgIHN3aXRjaCAoVFlQRV9DT0RFICh0eXBlKSkNCisgICAgIHsN
CisgICAgIGNhc2UgVFlQRV9DT0RFX0FSUkFZOg0KKyAgICAgICBpZiAocGFzc2VkX2FfcHRyKQ0K
KyAJZnByaW50Zl9maWx0ZXJlZCAoc3RyZWFtLCAiKSIpOw0KKyAgICAgICBicmVhazsNCisgDQor
ICAgICBjYXNlIFRZUEVfQ09ERV9NRU1CRVI6DQorICAgICAgIGlmIChwYXNzZWRfYV9wdHIpDQor
IAlmcHJpbnRmX2ZpbHRlcmVkIChzdHJlYW0sICIpIik7DQorICAgICAgIHBhc190eXBlX3ByaW50
X3ZhcnNwZWNfc3VmZml4IChUWVBFX1RBUkdFVF9UWVBFICh0eXBlKSwgc3RyZWFtLCAwLCAwLCAw
KTsNCisgICAgICAgYnJlYWs7DQorIA0KKyAgICAgY2FzZSBUWVBFX0NPREVfTUVUSE9EOg0KKyAg
ICAgICBpZiAocGFzc2VkX2FfcHRyKQ0KKyAJZnByaW50Zl9maWx0ZXJlZCAoc3RyZWFtLCAiKSIp
Ow0KKyAgICAgICBwYXNfdHlwZV9wcmludF9tZXRob2RfYXJncyAoIiIsDQorIAkJCQkJICAgICAg
ICIiLA0KKyAJCQkJCSAgICAgICBzdHJlYW0pOw0KKyAgICAgICAvKiBwYXNfdHlwZV9wcmludF9h
cmdzICh0eXBlLCBzdHJlYW0pOyAqLw0KKyAgICAgICBpZiAoIFRZUEVfQ09ERShUWVBFX1RBUkdF
VF9UWVBFICh0eXBlKSkgIT0gVFlQRV9DT0RFX1ZPSUQpDQorICAgICAgICAgIHsNCisgICAgICAg
ICAgIGZwcmludGZfZmlsdGVyZWQgKHN0cmVhbSwgIiA6ICIpOw0KKyAgICAgICAgICAgcGFzX3R5
cGVfcHJpbnRfdmFyc3BlY19wcmVmaXggKFRZUEVfVEFSR0VUX1RZUEUgKHR5cGUpLCBzdHJlYW0s
IDAsIDApOw0KKyAgICAgICAgICAgcGFzX3R5cGVfcHJpbnRfYmFzZSAoVFlQRV9UQVJHRVRfVFlQ
RSAodHlwZSksIHN0cmVhbSwgc2hvdywgMCk7DQorICAgICAgICAgICBwYXNfdHlwZV9wcmludF92
YXJzcGVjX3N1ZmZpeCAoVFlQRV9UQVJHRVRfVFlQRSAodHlwZSksIHN0cmVhbSwgMCwNCisgCQkJ
CSAgIHBhc3NlZF9hX3B0ciwgMCk7DQorICAgICAgICAgIH0NCisgICAgICAgYnJlYWs7DQorIA0K
KyAgICAgY2FzZSBUWVBFX0NPREVfUFRSOg0KKyAgICAgY2FzZSBUWVBFX0NPREVfUkVGOg0KKyAg
ICAgICBwYXNfdHlwZV9wcmludF92YXJzcGVjX3N1ZmZpeCAoVFlQRV9UQVJHRVRfVFlQRSAodHlw
ZSksIHN0cmVhbSwgMCwgMSwgMCk7DQorICAgICAgIGJyZWFrOw0KKyANCisgICAgIGNhc2UgVFlQ
RV9DT0RFX0ZVTkM6DQorICAgICAgIGlmIChwYXNzZWRfYV9wdHIpDQorIAlmcHJpbnRmX2ZpbHRl
cmVkIChzdHJlYW0sICIpIik7DQorICAgICAgIGlmICghZGVtYW5nbGVkX2FyZ3MpDQorICAgICAg
ICAgcGFzX3ByaW50X2Z1bmNfYXJncyAodHlwZSwgc3RyZWFtKTsNCisgICAgICAgaWYgKCBUWVBF
X0NPREUoVFlQRV9UQVJHRVRfVFlQRSAodHlwZSkpICE9IFRZUEVfQ09ERV9WT0lEKQ0KKyAgICAg
ICAgICB7DQorICAgICAgICAgICBmcHJpbnRmX2ZpbHRlcmVkIChzdHJlYW0sICIgOiAiKTsNCisg
ICAgICAgICAgIHBhc190eXBlX3ByaW50X3ZhcnNwZWNfcHJlZml4IChUWVBFX1RBUkdFVF9UWVBF
ICh0eXBlKSwgc3RyZWFtLCAwLCAwKTsNCisgICAgICAgICAgIHBhc190eXBlX3ByaW50X2Jhc2Ug
KFRZUEVfVEFSR0VUX1RZUEUgKHR5cGUpLCBzdHJlYW0sIHNob3csIDApOw0KKyAgICAgICAgICAg
cGFzX3R5cGVfcHJpbnRfdmFyc3BlY19zdWZmaXggKFRZUEVfVEFSR0VUX1RZUEUgKHR5cGUpLCBz
dHJlYW0sIDAsDQorIAkJCQkgICBwYXNzZWRfYV9wdHIsIDApOw0KKyAgICAgICAgICB9DQorICAg
ICAgIGJyZWFrOw0KKyANCisgICAgIGNhc2UgVFlQRV9DT0RFX1VOREVGOg0KKyAgICAgY2FzZSBU
WVBFX0NPREVfU1RSVUNUOg0KKyAgICAgY2FzZSBUWVBFX0NPREVfVU5JT046DQorICAgICBjYXNl
IFRZUEVfQ09ERV9FTlVNOg0KKyAgICAgY2FzZSBUWVBFX0NPREVfSU5UOg0KKyAgICAgY2FzZSBU
WVBFX0NPREVfRkxUOg0KKyAgICAgY2FzZSBUWVBFX0NPREVfVk9JRDoNCisgICAgIGNhc2UgVFlQ
RV9DT0RFX0VSUk9SOg0KKyAgICAgY2FzZSBUWVBFX0NPREVfQ0hBUjoNCisgICAgIGNhc2UgVFlQ
RV9DT0RFX0JPT0w6DQorICAgICBjYXNlIFRZUEVfQ09ERV9TRVQ6DQorICAgICBjYXNlIFRZUEVf
Q09ERV9SQU5HRToNCisgICAgIGNhc2UgVFlQRV9DT0RFX1NUUklORzoNCisgICAgIGNhc2UgVFlQ
RV9DT0RFX0JJVFNUUklORzoNCisgICAgIGNhc2UgVFlQRV9DT0RFX0NPTVBMRVg6DQorICAgICBj
YXNlIFRZUEVfQ09ERV9UWVBFREVGOg0KKyAgICAgICAvKiBUaGVzZSB0eXBlcyBkbyBub3QgbmVl
ZCBhIHN1ZmZpeC4gIFRoZXkgYXJlIGxpc3RlZCBzbyB0aGF0DQorIAkgZ2NjIC1XYWxsIHdpbGwg
cmVwb3J0IHR5cGVzIHRoYXQgbWF5IG5vdCBoYXZlIGJlZW4gY29uc2lkZXJlZC4gICovDQorICAg
ICAgIGJyZWFrOw0KKyAgICAgfQ0KKyB9DQorIA0KKyAvKiBQcmludCB0aGUgbmFtZSBvZiB0aGUg
dHlwZSAob3IgdGhlIHVsdGltYXRlIHBvaW50ZXIgdGFyZ2V0LA0KKyAgICBmdW5jdGlvbiB2YWx1
ZSBvciBhcnJheSBlbGVtZW50KSwgb3IgdGhlIGRlc2NyaXB0aW9uIG9mIGENCisgICAgc3RydWN0
dXJlIG9yIHVuaW9uLg0KKyANCisgICAgU0hPVyBwb3NpdGl2ZSBtZWFucyBwcmludCBkZXRhaWxz
IGFib3V0IHRoZSB0eXBlIChlLmcuIGVudW0gdmFsdWVzKSwNCisgICAgYW5kIHByaW50IHN0cnVj
dHVyZSBlbGVtZW50cyBwYXNzaW5nIFNIT1cgLSAxIGZvciBzaG93Lg0KKyAgICBTSE9XIG5lZ2F0
aXZlIG1lYW5zIGp1c3QgcHJpbnQgdGhlIHR5cGUgbmFtZSBvciBzdHJ1Y3QgdGFnIGlmIHRoZXJl
IGlzIG9uZS4NCisgICAgSWYgdGhlcmUgaXMgbm8gbmFtZSwgcHJpbnQgc29tZXRoaW5nIHNlbnNp
YmxlIGJ1dCBjb25jaXNlIGxpa2UNCisgICAgInN0cnVjdCB7Li4ufSIuDQorICAgIFNIT1cgemVy
byBtZWFucyBqdXN0IHByaW50IHRoZSB0eXBlIG5hbWUgb3Igc3RydWN0IHRhZyBpZiB0aGVyZSBp
cyBvbmUuDQorICAgIElmIHRoZXJlIGlzIG5vIG5hbWUsIHByaW50IHNvbWV0aGluZyBzZW5zaWJs
ZSBidXQgbm90IGFzIGNvbmNpc2UgbGlrZQ0KKyAgICAic3RydWN0IHtpbnQgeDsgaW50IHk7fSIu
DQorIA0KKyAgICBMRVZFTCBpcyB0aGUgbnVtYmVyIG9mIHNwYWNlcyB0byBpbmRlbnQgYnkuDQor
ICAgIFdlIGluY3JlYXNlIGl0IGZvciBzb21lIHJlY3Vyc2l2ZSBjYWxscy4gICovDQorIA0KKyB2
b2lkDQorIHBhc190eXBlX3ByaW50X2Jhc2UgKHR5cGUsIHN0cmVhbSwgc2hvdywgbGV2ZWwpDQor
ICAgICAgc3RydWN0IHR5cGUgKnR5cGU7DQorICAgICAgR0RCX0ZJTEUgKnN0cmVhbTsNCisgICAg
ICBpbnQgc2hvdzsNCisgICAgICBpbnQgbGV2ZWw7DQorIHsNCisgICByZWdpc3RlciBpbnQgaTsN
CisgICByZWdpc3RlciBpbnQgbGVuOw0KKyAgIHJlZ2lzdGVyIGludCBsYXN0dmFsOw0KKyAgIGVu
dW0ge3Nfbm9uZSwgc19wdWJsaWMsIHNfcHJpdmF0ZSwgc19wcm90ZWN0ZWR9IHNlY3Rpb25fdHlw
ZTsNCisgICBRVUlUOw0KKyANCisgICB3cmFwX2hlcmUgKCIgICAgIik7DQorICAgaWYgKHR5cGUg
PT0gTlVMTCkNCisgICAgIHsNCisgICAgICAgZnB1dHNfZmlsdGVyZWQgKCI8dHlwZSB1bmtub3du
PiIsIHN0cmVhbSk7DQorICAgICAgIHJldHVybjsNCisgICAgIH0NCisgDQorICAgLyogdm9pZCBw
b2ludGVyICovDQorICAgaWYgKChUWVBFX0NPREUgKHR5cGUpID09IFRZUEVfQ09ERV9QVFIpICYm
IChUWVBFX0NPREUgKFRZUEVfVEFSR0VUX1RZUEUgKHR5cGUpKSA9PSBUWVBFX0NPREVfVk9JRCkp
DQorICAgICB7DQorICAgICAgIGZwcmludGZfZmlsdGVyZWQgKHN0cmVhbSwNCisgICAgICAgICBU
WVBFX05BTUUgKHR5cGUpID8gVFlQRV9OQU1FICh0eXBlKSA6ICJwb2ludGVyIik7DQorICAgICAg
IHJldHVybjsNCisgICAgIH0NCisgICAvKiBXaGVuIFNIT1cgaXMgemVybyBvciBsZXNzLCBhbmQg
dGhlcmUgaXMgYSB2YWxpZCB0eXBlIG5hbWUsIHRoZW4gYWx3YXlzDQorICAgICAganVzdCBwcmlu
dCB0aGUgdHlwZSBuYW1lIGRpcmVjdGx5IGZyb20gdGhlIHR5cGUuICAqLw0KKyAgIC8qIElmIHdl
IGhhdmUgInR5cGVkZWYgc3RydWN0IGZvbyB7LiAuIC59IGJhcjsiIGRvIHdlIHdhbnQgdG8gcHJp
bnQgaXQNCisgICAgICBhcyAic3RydWN0IGZvbyIgb3IgYXMgImJhciI/ICBQaWNrIHRoZSBsYXR0
ZXIsIGJlY2F1c2UgQysrIGZvbGsgdGVuZA0KKyAgICAgIHRvIGV4cGVjdCB0aGluZ3MgbGlrZSAi
Y2xhc3M1ICpmb28iIHJhdGhlciB0aGFuICJzdHJ1Y3QgY2xhc3M1ICpmb28iLiAgKi8NCisgDQor
ICAgaWYgKHNob3cgPD0gMA0KKyAgICAgICAmJiBUWVBFX05BTUUgKHR5cGUpICE9IE5VTEwpDQor
ICAgICB7DQorICAgICAgIGZwdXRzX2ZpbHRlcmVkIChUWVBFX05BTUUgKHR5cGUpLCBzdHJlYW0p
Ow0KKyAgICAgICByZXR1cm47DQorICAgICB9DQorIA0KKyAgIENIRUNLX1RZUEVERUYgKHR5cGUp
Ow0KKyAJICANCisgICBzd2l0Y2ggKFRZUEVfQ09ERSAodHlwZSkpDQorICAgICB7DQorICAgICBj
YXNlIFRZUEVfQ09ERV9UWVBFREVGOg0KKyAgICAgY2FzZSBUWVBFX0NPREVfUFRSOg0KKyAgICAg
Y2FzZSBUWVBFX0NPREVfTUVNQkVSOg0KKyAgICAgY2FzZSBUWVBFX0NPREVfUkVGOg0KKyAgICAg
LyogY2FzZSBUWVBFX0NPREVfRlVOQzoNCisgICAgIGNhc2UgVFlQRV9DT0RFX01FVEhPRDogKi8N
CisgICAgICAgcGFzX3R5cGVfcHJpbnRfYmFzZSAoVFlQRV9UQVJHRVRfVFlQRSAodHlwZSksIHN0
cmVhbSwgc2hvdywgbGV2ZWwpOw0KKyAgICAgICBicmVhazsNCisgDQorICAgICBjYXNlIFRZUEVf
Q09ERV9BUlJBWToNCisgICAgICAgLyogcGFzX3R5cGVfcHJpbnRfdmFyc3BlY19wcmVmaXggKFRZ
UEVfVEFSR0VUX1RZUEUgKHR5cGUpLCBzdHJlYW0sIDAsIDApOw0KKyAgICAgICBwYXNfdHlwZV9w
cmludF9iYXNlIChUWVBFX1RBUkdFVF9UWVBFICh0eXBlKSwgc3RyZWFtLCBzaG93LCBsZXZlbCk7
DQorICAgICAgIHBhc190eXBlX3ByaW50X3ZhcnNwZWNfc3VmZml4IChUWVBFX1RBUkdFVF9UWVBF
ICh0eXBlKSwgc3RyZWFtLCAwLCAwLCAwKTsgKi8NCisgICAgICAgcGFzX3ByaW50X3R5cGUoVFlQ
RV9UQVJHRVRfVFlQRSAodHlwZSksIE5VTEwsIHN0cmVhbSwgMCwgMCk7DQorICAgICAgIGJyZWFr
Ow0KKyANCisgICAgIGNhc2UgVFlQRV9DT0RFX0ZVTkM6DQorICAgICBjYXNlIFRZUEVfQ09ERV9N
RVRIT0Q6DQorICAgICAgIC8qDQorICAgICAgIHBhc190eXBlX3ByaW50X2Jhc2UgKFRZUEVfVEFS
R0VUX1RZUEUgKHR5cGUpLCBzdHJlYW0sIHNob3csIGxldmVsKTsNCisgICAgICAgIG9ubHkgYWZ0
ZXIgYXJncyAhISAqLw0KKyAgICAgICBicmVhazsNCisgICAgIGNhc2UgVFlQRV9DT0RFX1NUUlVD
VDoNCisgICAgICAgaWYgKFRZUEVfVEFHX05BTUUgKHR5cGUpICE9IE5VTEwpDQorIAl7DQorIAkg
IGZwdXRzX2ZpbHRlcmVkIChUWVBFX1RBR19OQU1FICh0eXBlKSwgc3RyZWFtKTsNCisgICAgICAg
ICAgIGZwdXRzX2ZpbHRlcmVkICgiID0gIiwgc3RyZWFtKTsNCisgCX0NCisgICAgICAgaWYgKEhB
VkVfQ1BMVVNfU1RSVUNUICh0eXBlKSkNCisgCXsNCisgCSAgZnByaW50Zl9maWx0ZXJlZCAoc3Ry
ZWFtLCAiY2xhc3MgIik7DQorIAl9DQorICAgICAgIGVsc2UNCisgCXsNCisgCSAgZnByaW50Zl9m
aWx0ZXJlZCAoc3RyZWFtLCAicmVjb3JkICIpOw0KKyAJfQ0KKyAgICAgICBnb3RvIHN0cnVjdF91
bmlvbjsNCisgDQorICAgICBjYXNlIFRZUEVfQ09ERV9VTklPTjoNCisgICAgICAgaWYgKFRZUEVf
VEFHX05BTUUgKHR5cGUpICE9IE5VTEwpDQorIAl7DQorIAkgIGZwdXRzX2ZpbHRlcmVkIChUWVBF
X1RBR19OQU1FICh0eXBlKSwgc3RyZWFtKTsNCisgICAgICAgICAgIGZwdXRzX2ZpbHRlcmVkICgi
ID0gIiwgc3RyZWFtKTsNCisgCX0NCisgICAgICAgZnByaW50Zl9maWx0ZXJlZCAoc3RyZWFtLCAi
Y2FzZSA8Pz4gb2YgIik7DQorIA0KKyAgICAgc3RydWN0X3VuaW9uOg0KKyAgICAgICB3cmFwX2hl
cmUgKCIgICAgIik7DQorICAgICAgIGlmIChzaG93IDwgMCkNCisgCXsNCisgCSAgLyogSWYgd2Ug
anVzdCBwcmludGVkIGEgdGFnIG5hbWUsIG5vIG5lZWQgdG8gcHJpbnQgYW55dGhpbmcgZWxzZS4g
ICovDQorIAkgIGlmIChUWVBFX1RBR19OQU1FICh0eXBlKSA9PSBOVUxMKQ0KKyAJICAgIGZwcmlu
dGZfZmlsdGVyZWQgKHN0cmVhbSwgInsuLi59Iik7DQorIAl9DQorICAgICAgIGVsc2UgaWYgKHNo
b3cgPiAwIHx8IFRZUEVfVEFHX05BTUUgKHR5cGUpID09IE5VTEwpDQorIAl7DQorIAkgIHBjcGFz
X3R5cGVfcHJpbnRfZGVyaXZhdGlvbl9pbmZvIChzdHJlYW0sIHR5cGUpOw0KKyAJICANCisgCSAg
ZnByaW50Zl9maWx0ZXJlZCAoc3RyZWFtLCAiXG4iKTsNCisgCSAgaWYgKChUWVBFX05GSUVMRFMg
KHR5cGUpID09IDApICYmIChUWVBFX05GTl9GSUVMRFMgKHR5cGUpID09IDApKQ0KKyAJICAgIHsN
CisgCSAgICAgIGlmIChUWVBFX0ZMQUdTICh0eXBlKSAmIFRZUEVfRkxBR19TVFVCKQ0KKyAJCWZw
cmludGZpX2ZpbHRlcmVkIChsZXZlbCArIDQsIHN0cmVhbSwgIjxpbmNvbXBsZXRlIHR5cGU+XG4i
KTsNCisgCSAgICAgIGVsc2UNCisgCQlmcHJpbnRmaV9maWx0ZXJlZCAobGV2ZWwgKyA0LCBzdHJl
YW0sICI8bm8gZGF0YSBmaWVsZHM+XG4iKTsNCisgCSAgICB9DQorIA0KKyAJICAvKiBTdGFydCBv
ZmYgd2l0aCBubyBzcGVjaWZpYyBzZWN0aW9uIHR5cGUsIHNvIHdlIGNhbiBwcmludA0KKyAJICAg
ICBvbmUgZm9yIHRoZSBmaXJzdCBmaWVsZCB3ZSBmaW5kLCBhbmQgdXNlIHRoYXQgc2VjdGlvbiB0
eXBlDQorIAkgICAgIHRoZXJlYWZ0ZXIgdW50aWwgd2UgZmluZCBhbm90aGVyIHR5cGUuICovDQor
IA0KKyAJICBzZWN0aW9uX3R5cGUgPSBzX25vbmU7DQorIA0KKyAJICAvKiBJZiB0aGVyZSBpcyBh
IGJhc2UgY2xhc3MgZm9yIHRoaXMgdHlwZSwNCisgCSAgICAgZG8gbm90IHByaW50IHRoZSBmaWVs
ZCB0aGF0IGl0IG9jY3VwaWVzLiAgKi8NCisgDQorIAkgIGxlbiA9IFRZUEVfTkZJRUxEUyAodHlw
ZSk7DQorIAkgIGZvciAoaSA9IFRZUEVfTl9CQVNFQ0xBU1NFUyAodHlwZSk7IGkgPCBsZW47IGkr
KykNCisgCSAgICB7DQorIAkgICAgICBRVUlUOw0KKyAJICAgICAgLyogRG9uJ3QgcHJpbnQgb3V0
IHZpcnR1YWwgZnVuY3Rpb24gdGFibGUuICAqLw0KKyAJICAgICAgaWYgKFNUUkVRTiAoVFlQRV9G
SUVMRF9OQU1FICh0eXBlLCBpKSwgIl92cHRyIiwgNSkNCisgCQkgICYmIGlzX2NwbHVzX21hcmtl
ciAoKFRZUEVfRklFTERfTkFNRSAodHlwZSwgaSkpWzVdKSkNCisgCQljb250aW51ZTsNCisgDQor
IAkgICAgICAvKiBJZiB0aGlzIGlzIGEgQysrIGNsYXNzIHdlIGNhbiBwcmludCB0aGUgdmFyaW91
cyBDKysgc2VjdGlvbg0KKyAJCSBsYWJlbHMuICovDQorIA0KKyAJICAgICAgaWYgKEhBVkVfQ1BM
VVNfU1RSVUNUICh0eXBlKSkNCisgCQl7DQorIAkJICBpZiAoVFlQRV9GSUVMRF9QUk9URUNURUQg
KHR5cGUsIGkpKQ0KKyAJCSAgICB7DQorIAkJICAgICAgaWYgKHNlY3Rpb25fdHlwZSAhPSBzX3By
b3RlY3RlZCkNCisgCQkJew0KKyAJCQkgIHNlY3Rpb25fdHlwZSA9IHNfcHJvdGVjdGVkOw0KKyAJ
CQkgIGZwcmludGZpX2ZpbHRlcmVkIChsZXZlbCArIDIsIHN0cmVhbSwNCisgCQkJCQkgICAgICJw
cm90ZWN0ZWRcbiIpOw0KKyAJCQl9DQorIAkJICAgIH0NCisgCQkgIGVsc2UgaWYgKFRZUEVfRklF
TERfUFJJVkFURSAodHlwZSwgaSkpDQorIAkJICAgIHsNCisgCQkgICAgICBpZiAoc2VjdGlvbl90
eXBlICE9IHNfcHJpdmF0ZSkNCisgCQkJew0KKyAJCQkgIHNlY3Rpb25fdHlwZSA9IHNfcHJpdmF0
ZTsNCisgCQkJICBmcHJpbnRmaV9maWx0ZXJlZCAobGV2ZWwgKyAyLCBzdHJlYW0sICJwcml2YXRl
XG4iKTsNCisgCQkJfQ0KKyAJCSAgICB9DQorIAkJICBlbHNlDQorIAkJICAgIHsNCisgCQkgICAg
ICBpZiAoc2VjdGlvbl90eXBlICE9IHNfcHVibGljKQ0KKyAJCQl7DQorIAkJCSAgc2VjdGlvbl90
eXBlID0gc19wdWJsaWM7DQorIAkJCSAgZnByaW50ZmlfZmlsdGVyZWQgKGxldmVsICsgMiwgc3Ry
ZWFtLCAicHVibGljXG4iKTsNCisgCQkJfQ0KKyAJCSAgICB9DQorIAkJfQ0KKyANCisgCSAgICAg
IHByaW50X3NwYWNlc19maWx0ZXJlZCAobGV2ZWwgKyA0LCBzdHJlYW0pOw0KKyAJICAgICAgaWYg
KFRZUEVfRklFTERfU1RBVElDICh0eXBlLCBpKSkNCisgCQl7DQorIAkJICBmcHJpbnRmX2ZpbHRl
cmVkIChzdHJlYW0sICJzdGF0aWMgIik7DQorIAkJfQ0KKyAJICAgICAgcGFzX3ByaW50X3R5cGUg
KFRZUEVfRklFTERfVFlQRSAodHlwZSwgaSksDQorIAkJCSAgICBUWVBFX0ZJRUxEX05BTUUgKHR5
cGUsIGkpLA0KKyAJCQkgICAgc3RyZWFtLCBzaG93IC0gMSwgbGV2ZWwgKyA0KTsNCisgCSAgICAg
IGlmICghVFlQRV9GSUVMRF9TVEFUSUMgKHR5cGUsIGkpDQorIAkJICAmJiBUWVBFX0ZJRUxEX1BB
Q0tFRCAodHlwZSwgaSkpDQorIAkJew0KKyAJCSAgLyogSXQgaXMgYSBiaXRmaWVsZC4gIFRoaXMg
Y29kZSBkb2VzIG5vdCBhdHRlbXB0DQorIAkJICAgICB0byBsb29rIGF0IHRoZSBiaXRwb3MgYW5k
IHJlY29uc3RydWN0IGZpbGxlciwNCisgCQkgICAgIHVubmFtZWQgZmllbGRzLiAgVGhpcyB3b3Vs
ZCBsZWFkIHRvIG1pc2xlYWRpbmcNCisgCQkgICAgIHJlc3VsdHMgaWYgdGhlIGNvbXBpbGVyIGRv
ZXMgbm90IHB1dCBvdXQgZmllbGRzDQorIAkJICAgICBmb3Igc3VjaCB0aGluZ3MgKEkgZG9uJ3Qg
a25vdyB3aGF0IGl0IGRvZXMpLiAgKi8NCisgCQkgIGZwcmludGZfZmlsdGVyZWQgKHN0cmVhbSwg
IiA6ICVkIiwNCisgCQkJCSAgICBUWVBFX0ZJRUxEX0JJVFNJWkUgKHR5cGUsIGkpKTsNCisgCQl9
DQorIAkgICAgICBmcHJpbnRmX2ZpbHRlcmVkIChzdHJlYW0sICI7XG4iKTsNCisgCSAgICB9DQor
IA0KKyAJICAvKiBJZiB0aGVyZSBhcmUgYm90aCBmaWVsZHMgYW5kIG1ldGhvZHMsIHB1dCBhIHNw
YWNlIGJldHdlZW4uICovDQorIAkgIGxlbiA9IFRZUEVfTkZOX0ZJRUxEUyAodHlwZSk7DQorIAkg
IGlmIChsZW4gJiYgc2VjdGlvbl90eXBlICE9IHNfbm9uZSkNCisgCSAgICAgZnByaW50Zl9maWx0
ZXJlZCAoc3RyZWFtLCAiXG4iKTsNCisgDQorIAkgIC8qIEMrKzogcHJpbnQgb3V0IHRoZSBtZXRo
b2RzICovDQorIA0KKyAJICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspDQorIAkgICAgew0KKyAJ
ICAgICAgc3RydWN0IGZuX2ZpZWxkICpmID0gVFlQRV9GTl9GSUVMRExJU1QxICh0eXBlLCBpKTsN
CisgCSAgICAgIGludCBqLCBsZW4yID0gVFlQRV9GTl9GSUVMRExJU1RfTEVOR1RIICh0eXBlLCBp
KTsNCisgCSAgICAgIGNoYXIgKm1ldGhvZF9uYW1lID0gVFlQRV9GTl9GSUVMRExJU1RfTkFNRSAo
dHlwZSwgaSk7DQorIAkgICAgICBjaGFyICpuYW1lID0gdHlwZV9uYW1lX25vX3RhZyAodHlwZSk7
DQorICAgICAgICAgICAgICAgLyogdGhpcyBpcyBDKysgc3BlY2lmaWMNCisgICAgICAgICAgICAg
ICAgIGhvdyBjYW4gd2Uga25vdyBjb25zdHJ1Y3Rvci9kZXN0cnVjdG9yID8/ICovDQorIAkgICAg
ICBmb3IgKGogPSAwOyBqIDwgbGVuMjsgaisrKQ0KKyAJCXsNCisgCQkgIGNoYXIgKnBoeXNuYW1l
ID0gVFlQRV9GTl9GSUVMRF9QSFlTTkFNRSAoZiwgaik7DQorIA0KKyAJCSAgaW50IGlzX2NvbnN0
cnVjdG9yID0gU1RSRVFOIChwaHlzbmFtZSwgIl9fY3RfXyIsIDYpOw0KKyAJCSAgaW50IGlzX2Rl
c3RydWN0b3IgPSBTVFJFUU4gKHBoeXNuYW1lLCAiX19kdF9fIiwgNik7DQorIA0KKyAJCSAgUVVJ
VDsNCisgCQkgIGlmIChUWVBFX0ZOX0ZJRUxEX1BST1RFQ1RFRCAoZiwgaikpDQorIAkJICAgIHsN
CisgCQkgICAgICBpZiAoc2VjdGlvbl90eXBlICE9IHNfcHJvdGVjdGVkKQ0KKyAJCQl7DQorIAkJ
CSAgc2VjdGlvbl90eXBlID0gc19wcm90ZWN0ZWQ7DQorIAkJCSAgZnByaW50ZmlfZmlsdGVyZWQg
KGxldmVsICsgMiwgc3RyZWFtLA0KKyAJCQkJCSAgICAgInByb3RlY3RlZFxuIik7DQorIAkJCX0N
CisgCQkgICAgfQ0KKyAJCSAgZWxzZSBpZiAoVFlQRV9GTl9GSUVMRF9QUklWQVRFIChmLCBqKSkN
CisgCQkgICAgew0KKyAJCSAgICAgIGlmIChzZWN0aW9uX3R5cGUgIT0gc19wcml2YXRlKQ0KKyAJ
CQl7DQorIAkJCSAgc2VjdGlvbl90eXBlID0gc19wcml2YXRlOw0KKyAJCQkgIGZwcmludGZpX2Zp
bHRlcmVkIChsZXZlbCArIDIsIHN0cmVhbSwgInByaXZhdGVcbiIpOw0KKyAJCQl9DQorIAkJICAg
IH0NCisgCQkgIGVsc2UNCisgCQkgICAgew0KKyAJCSAgICAgIGlmIChzZWN0aW9uX3R5cGUgIT0g
c19wdWJsaWMpDQorIAkJCXsNCisgCQkJICBzZWN0aW9uX3R5cGUgPSBzX3B1YmxpYzsNCisgCQkJ
ICBmcHJpbnRmaV9maWx0ZXJlZCAobGV2ZWwgKyAyLCBzdHJlYW0sICJwdWJsaWNcbiIpOw0KKyAJ
CQl9DQorIAkJICAgIH0NCisgDQorIAkJICBwcmludF9zcGFjZXNfZmlsdGVyZWQgKGxldmVsICsg
NCwgc3RyZWFtKTsNCisgCQkgIGlmIChUWVBFX0ZOX0ZJRUxEX1NUQVRJQ19QIChmLCBqKSkNCisg
CQkgICAgZnByaW50Zl9maWx0ZXJlZCAoc3RyZWFtLCAic3RhdGljICIpOw0KKyAJCSAgaWYgKFRZ
UEVfVEFSR0VUX1RZUEUgKFRZUEVfRk5fRklFTERfVFlQRSAoZiwgaikpID09IDApDQorIAkJICAg
IHsNCisgCQkgICAgICAvKiBLZWVwIEdEQiBmcm9tIGNyYXNoaW5nIGhlcmUuICAqLw0KKyAJCSAg
ICAgIGZwcmludGZfZmlsdGVyZWQgKHN0cmVhbSwgIjx1bmRlZmluZWQgdHlwZT4gJXM7XG4iLA0K
KyAJCQkgICAgICAgVFlQRV9GTl9GSUVMRF9QSFlTTkFNRSAoZiwgaikpOw0KKyAJCSAgICAgIGJy
ZWFrOw0KKyAJCSAgICB9DQorIA0KKyAgICAgICAgICAgICAgICAgICBpZiAoaXNfY29uc3RydWN0
b3IpDQorICAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ZnByaW50Zl9maWx0ZXJlZChzdHJlYW0sImNvbnN0cnVjdG9yICIpOw0KKyAgICAgICAgICAgICAg
ICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNfZGVzdHJ1Y3RvcikNCisg
ICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRm
X2ZpbHRlcmVkKHN0cmVhbSwiZGVzdHJ1Y3RvciAgIik7DQorICAgICAgICAgICAgICAgICAgICAg
fQ0KKyAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChUWVBFX1RBUkdFVF9UWVBFIChUWVBFX0ZO
X0ZJRUxEX1RZUEUgKGYsIGopKSAhPSAwICYmDQorICAgICAgICAgICAgICAgICAgICAgICAgIFRZ
UEVfQ09ERShUWVBFX1RBUkdFVF9UWVBFIChUWVBFX0ZOX0ZJRUxEX1RZUEUgKGYsIGopKSkgIT0g
VFlQRV9DT0RFX1ZPSUQpDQorICAgICAgICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZwcmludGZfZmlsdGVyZWQoc3RyZWFtLCJmdW5jdGlvbiAgIik7DQor
ICAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgZWxzZQ0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJp
bnRmX2ZpbHRlcmVkKHN0cmVhbSwicHJvY2VkdXJlICIpOw0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICB9DQorICAgICAgICAgICAgICAgICAgIC8qIHRoaXMgZG9lcyBub3Qgd29yaywgbm8gaWRl
YSB3aHkgISEgKi8NCisgICAgICAgICAgICAgICAgICAgDQorICAgICAgICAgICAgICAgICAgIHBh
c190eXBlX3ByaW50X21ldGhvZF9hcmdzIChwaHlzbmFtZSwNCisgCQkJCQkgICAgICAgbWV0aG9k
X25hbWUsDQorIAkJCQkJICAgICAgIHN0cmVhbSk7DQorICAgICAgICAgICAgICAgICAgIA0KKyAg
ICAgICAgICAgICAgICAgICBpZiAoVFlQRV9UQVJHRVRfVFlQRSAoVFlQRV9GTl9GSUVMRF9UWVBF
IChmLCBqKSkgIT0gMCAmJg0KKyAgICAgICAgICAgICAgICAgICAgICAgICBUWVBFX0NPREUoVFlQ
RV9UQVJHRVRfVFlQRSAoVFlQRV9GTl9GSUVMRF9UWVBFIChmLCBqKSkpICE9IFRZUEVfQ09ERV9W
T0lEKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICB7DQorICAgCQkgICAgICAgICBmcHV0c19m
aWx0ZXJlZCAoIiA6ICIsIHN0cmVhbSk7DQorIAkJICAgICAgICAgdHlwZV9wcmludCAoVFlQRV9U
QVJHRVRfVFlQRSAoVFlQRV9GTl9GSUVMRF9UWVBFIChmLCBqKSksDQorIAkJCQkgICIiLCBzdHJl
YW0sIC0xKTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAJCSAgaWYgKFRZUEVfRk5f
RklFTERfVklSVFVBTF9QIChmLCBqKSkNCisgCQkgICAgZnByaW50Zl9maWx0ZXJlZCAoc3RyZWFt
LCAiOyB2aXJ0dWFsIik7DQorIA0KKyAJCSAgZnByaW50Zl9maWx0ZXJlZCAoc3RyZWFtLCAiO1xu
Iik7DQorIAkJfQ0KKyAJICAgIH0NCisgCSAgZnByaW50ZmlfZmlsdGVyZWQgKGxldmVsLCBzdHJl
YW0sICJlbmQiKTsNCisgCX0NCisgICAgICAgYnJlYWs7DQorIA0KKyAgICAgY2FzZSBUWVBFX0NP
REVfRU5VTToNCisgICAgICAgaWYgKFRZUEVfVEFHX05BTUUgKHR5cGUpICE9IE5VTEwpDQorIAl7
DQorIAkgIGZwdXRzX2ZpbHRlcmVkIChUWVBFX1RBR19OQU1FICh0eXBlKSwgc3RyZWFtKTsNCisg
CSAgaWYgKHNob3cgPiAwKQ0KKyAJICAgIGZwdXRzX2ZpbHRlcmVkICgiICIsIHN0cmVhbSk7DQor
IAl9DQorICAgICAgIC8qIGVudW0gaXMganVzdCBkZWZpbmVkIGJ5DQorICAgICAgICAgIHR5cGUg
ZW51bWVfbmFtZSA9IChlbnVtX21lbWJlcjEsZW51bV9tZW1iZXIyLC4uLikgKi8NCisgICAgICAg
ZnByaW50Zl9maWx0ZXJlZCAoc3RyZWFtLCAiID0gIik7DQorICAgICAgIHdyYXBfaGVyZSAoIiAg
ICAiKTsNCisgICAgICAgaWYgKHNob3cgPCAwKQ0KKyAJew0KKyAJICAvKiBJZiB3ZSBqdXN0IHBy
aW50ZWQgYSB0YWcgbmFtZSwgbm8gbmVlZCB0byBwcmludCBhbnl0aGluZyBlbHNlLiAgKi8NCisg
CSAgaWYgKFRZUEVfVEFHX05BTUUgKHR5cGUpID09IE5VTEwpDQorIAkgICAgZnByaW50Zl9maWx0
ZXJlZCAoc3RyZWFtLCAiKC4uLikiKTsNCisgCX0NCisgICAgICAgZWxzZSBpZiAoc2hvdyA+IDAg
fHwgVFlQRV9UQUdfTkFNRSAodHlwZSkgPT0gTlVMTCkNCisgCXsNCisgCSAgZnByaW50Zl9maWx0
ZXJlZCAoc3RyZWFtLCAiKCIpOw0KKyAJICBsZW4gPSBUWVBFX05GSUVMRFMgKHR5cGUpOw0KKyAJ
ICBsYXN0dmFsID0gMDsNCisgCSAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQ0KKyAJICAgIHsN
CisgCSAgICAgIFFVSVQ7DQorIAkgICAgICBpZiAoaSkgZnByaW50Zl9maWx0ZXJlZCAoc3RyZWFt
LCAiLCAiKTsNCisgCSAgICAgIHdyYXBfaGVyZSAoIiAgICAiKTsNCisgCSAgICAgIGZwdXRzX2Zp
bHRlcmVkIChUWVBFX0ZJRUxEX05BTUUgKHR5cGUsIGkpLCBzdHJlYW0pOw0KKyAJICAgICAgaWYg
KGxhc3R2YWwgIT0gVFlQRV9GSUVMRF9CSVRQT1MgKHR5cGUsIGkpKQ0KKyAJCXsNCisgCQkgIGZw
cmludGZfZmlsdGVyZWQgKHN0cmVhbSwgIiA6PSAlZCIsIFRZUEVfRklFTERfQklUUE9TICh0eXBl
LCBpKSk7DQorIAkJICBsYXN0dmFsID0gVFlQRV9GSUVMRF9CSVRQT1MgKHR5cGUsIGkpOw0KKyAJ
CX0NCisgCSAgICAgIGxhc3R2YWwrKzsNCisgCSAgICB9DQorIAkgIGZwcmludGZfZmlsdGVyZWQg
KHN0cmVhbSwgIikiKTsNCisgCX0NCisgICAgICAgYnJlYWs7DQorIA0KKyAgICAgY2FzZSBUWVBF
X0NPREVfVk9JRDoNCisgICAgICAgZnByaW50Zl9maWx0ZXJlZCAoc3RyZWFtLCAidm9pZCIpOw0K
KyAgICAgICBicmVhazsNCisgDQorICAgICBjYXNlIFRZUEVfQ09ERV9VTkRFRjoNCisgICAgICAg
ZnByaW50Zl9maWx0ZXJlZCAoc3RyZWFtLCAicmVjb3JkIDx1bmtub3duPiIpOw0KKyAgICAgICBi
cmVhazsNCisgDQorICAgICBjYXNlIFRZUEVfQ09ERV9FUlJPUjoNCisgICAgICAgZnByaW50Zl9m
aWx0ZXJlZCAoc3RyZWFtLCAiPHVua25vd24gdHlwZT4iKTsNCisgICAgICAgYnJlYWs7DQorIA0K
KyAgICAgIC8qIHRoaXMgcHJvYmFibHkgZG9lcyBub3Qgd29yayBmb3IgZW51bXMgKi8NCisgICAg
ICBjYXNlIFRZUEVfQ09ERV9SQU5HRToNCisgICAgICAgew0KKyAgICAgICAgc3RydWN0IHR5cGUg
KnRhcmdldCA9IFRZUEVfVEFSR0VUX1RZUEUgKHR5cGUpOw0KKyAgICAgICAgaWYgKHRhcmdldCA9
PSBOVUxMKQ0KKyAgICAgICAgICB0YXJnZXQgPSBidWlsdGluX3R5cGVfbG9uZzsNCisgICAgICAg
IHByaW50X3R5cGVfc2NhbGFyICh0YXJnZXQsIFRZUEVfTE9XX0JPVU5EICh0eXBlKSwgc3RyZWFt
KTsNCisgICAgICAgIGZwdXRzX2ZpbHRlcmVkICgiLi4iLCBzdHJlYW0pOw0KKyAgICAgICAgcHJp
bnRfdHlwZV9zY2FsYXIgKHRhcmdldCwgVFlQRV9ISUdIX0JPVU5EICh0eXBlKSwgc3RyZWFtKTsN
CisgICAgICAgfQ0KKyAgICAgICBicmVhazsNCisgDQorICAgICBjYXNlIFRZUEVfQ09ERV9TRVQ6
DQorICAgICAgIGZwdXRzX2ZpbHRlcmVkICgic2V0IG9mICIsIHN0cmVhbSk7DQorICAgICAgIHBh
c19wcmludF90eXBlIChUWVBFX0lOREVYX1RZUEUgKHR5cGUpLCAiIiwgc3RyZWFtLA0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2hvdyAtIDEsIGxldmVsKTsNCisgICAgICAgYnJlYWs7DQor
IA0KKyAgICAgZGVmYXVsdDoNCisgICAgICAgLyogSGFuZGxlIHR5cGVzIG5vdCBleHBsaWNpdGx5
IGhhbmRsZWQgYnkgdGhlIG90aGVyIGNhc2VzLA0KKyAJIHN1Y2ggYXMgZnVuZGFtZW50YWwgdHlw
ZXMuICBGb3IgdGhlc2UsIGp1c3QgcHJpbnQgd2hhdGV2ZXINCisgCSB0aGUgdHlwZSBuYW1lIGlz
LCBhcyByZWNvcmRlZCBpbiB0aGUgdHlwZSBpdHNlbGYuICBJZiB0aGVyZQ0KKyAJIGlzIG5vIHR5
cGUgbmFtZSwgdGhlbiBjb21wbGFpbi4gKi8NCisgICAgICAgaWYgKFRZUEVfTkFNRSAodHlwZSkg
IT0gTlVMTCkNCisgCXsNCisgCSAgZnB1dHNfZmlsdGVyZWQgKFRZUEVfTkFNRSAodHlwZSksIHN0
cmVhbSk7DQorIAl9DQorICAgICAgIGVsc2UNCisgCXsNCisgCSAgLyogQXQgbGVhc3QgZm9yIGR1
bXBfc3ltdGFiLCBpdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGlzIG5vdCBiZQ0KKyAJICAgICBhbiBl
cnJvciAoKS4gICovDQorIAkgIGZwcmludGZfZmlsdGVyZWQgKHN0cmVhbSwgIjxpbnZhbGlkIHR5
cGUgY29kZSAlZD4iLA0KKyAJCQkgICAgVFlQRV9DT0RFICh0eXBlKSk7DQorIAl9DQorICAgICAg
IGJyZWFrOw0KKyAgICAgfQ0KKyB9DQorIA0KKyAvKg0KKyAgICRMb2c6IHAtdHlwZXByLmMsdiAk
DQorICAgUmV2aXNpb24gMS4yICAxOTk4LzEyLzIzIDE1OjUzOjA2ICBQaWVycmUNCisgICBleGNl
cHRpb25zIGFuZCBmbG9hdGluZm8NCisgDQorICAgUmV2aXNpb24gMS4xICAxOTk4LzEyLzE4IDE4
OjI1OjUwICBwaWVycmUNCisgICBmaXJzdCBESkdQUCB2NC4xNiBmb3IgcGFzY2FsIHdpdGggZXhj
ZXB0aW9uIGRlYnVnZ2luZyBjYXBhYmlsaXRpZXMNCisgDQorICAgUmV2aXNpb24gMS4xICAxOTk4
LzEyLzA0IDEwOjMxOjQ5ICBkb3N1c2VyDQorICAgICsgZmlyc3QgdmVyc2lvbiB3aXRoIHBhc2Nh
bCBzeW50YXgNCisgDQorICAgUmV2aXNpb24gMS4xICAxOTk4LzA5LzE4IDEyOjM3OjM5ICBwaWVy
cmUNCisgICBmaXJzdCBuZXcgZmlsZXMNCisgDQorICovDQpJbmRleDogZ2RiL3ByaW50Y21kLmMN
CmRpZmYgLWMgZ2RiL3ByaW50Y21kLmM6MS4xLjEuMSBnZGIvcHJpbnRjbWQuYzoxLjINCioqKiBn
ZGIvcHJpbnRjbWQuYzoxLjEuMS4xCUZyaSBEZWMgMDQgMTA6NTE6MDggMTk5OA0KLS0tIGdkYi9w
cmludGNtZC5jCVdlZCBEZWMgMjMgMTY6NTM6MDYgMTk5OA0KKioqKioqKioqKioqKioqDQoqKiog
MzQsMzkgKioqKg0KLS0tIDM0LDQ2IC0tLS0NCiAgI2luY2x1ZGUgInZhbHByaW50LmgiDQogICNp
bmNsdWRlICJhbm5vdGF0ZS5oIg0KICANCisgI2lmZGVmIG90aGVyX3NlbA0KKyANCisgaW50IHVz
ZV9zZWw7DQorIGludCBsYXN0X3NlbDsNCisgDQorICNlbmRpZiAvKiBvdGhlcl9zZWwgKi8NCisg
DQogIGV4dGVybiBpbnQgYXNtX2RlbWFuZ2xlOwkvKiBXaGV0aGVyIHRvIGRlbWFuZ2xlIHN5bXMg
aW4gYXNtIHByaW50b3V0cyAqLw0KICBleHRlcm4gaW50IGFkZHJlc3NwcmludDsJLyogV2hldGhl
ciB0byBwcmludCBoZXggYWRkcmVzc2VzIGluIEhMTCAiICovDQogIA0KKioqKioqKioqKioqKioq
DQoqKiogMTM5LDE0NCAqKioqDQotLS0gMTQ2LDE1NSAtLS0tDQogIA0KICBzdGF0aWMgdm9pZCBk
aXNwbGF5X2NvbW1hbmQgUEFSQU1TICgoY2hhciAqLCBpbnQpKTsNCiAgDQorICNpZmRlZiBvdGhl
cl9zZWwNCisgc3RhdGljIHZvaWQgeHhfY29tbWFuZCBQQVJBTVMgKChjaGFyICosIGludCkpOw0K
KyAjZW5kaWYgLyogb3RoZXJfc2VsICovDQorIA0KICBzdGF0aWMgdm9pZCB4X2NvbW1hbmQgUEFS
QU1TICgoY2hhciAqLCBpbnQpKTsNCiAgDQogIHN0YXRpYyB2b2lkIGFkZHJlc3NfaW5mbyBQQVJB
TVMgKChjaGFyICosIGludCkpOw0KKioqKioqKioqKioqKioqDQoqKiogNjA0LDYwOSAqKioqDQot
LS0gNjE1LDYyNSAtLS0tDQogICAgICAgR0RCX0ZJTEUgKnN0cmVhbTsNCiAgew0KICAgIHByaW50
X2FkZHJlc3NfbnVtZXJpYyAoYWRkciwgMSwgc3RyZWFtKTsNCisgI2lmZGVmIG90aGVyX3NlbA0K
KyAgIC8qIG5vIHN5bWJvbHMgZm9yIG90aGVyIHNlbGVjdG9ycyAqLw0KKyAgIGlmICh1c2Vfc2Vs
KQ0KKyAgICAgcmV0dXJuOw0KKyAjZW5kaWYgLyogb3RoZXJfc2VsICovDQogICAgcHJpbnRfYWRk
cmVzc19zeW1ib2xpYyAoYWRkciwgc3RyZWFtLCBhc21fZGVtYW5nbGUsICIgIik7DQogIH0NCiAg
DQoqKioqKioqKioqKioqKioNCioqKiAxMDQ2LDEwNTEgKioqKg0KLS0tIDEwNjIsMTE2MSAtLS0t
DQogICAgcHJpbnRmX2ZpbHRlcmVkICgiLlxuIik7DQogIH0NCiAgDA0KKyAjaWZkZWYgb3RoZXJf
c2VsDQorICAgLyogbm8gc3ltYm9scyBmb3Igb3RoZXIgc2VsZWN0b3JzICovDQorIHN0YXRpYyB2
b2lkDQorIHh4X2NvbW1hbmQgKGV4cCwgZnJvbV90dHkpDQorICAgICAgY2hhciAqZXhwOw0KKyAg
ICAgIGludCBmcm9tX3R0eTsNCisgew0KKyAgIHN0cnVjdCBleHByZXNzaW9uICpleHByOw0KKyAg
IHN0cnVjdCBmb3JtYXRfZGF0YSBmbXQ7DQorICAgc3RydWN0IGNsZWFudXAgKm9sZF9jaGFpbjsN
CisgICBzdHJ1Y3QgdmFsdWUgKnZhbDsNCisgICBzdHJ1Y3QgdmFsdWUgKnNlbHZhbDsNCisgICBz
aG9ydCBzZWw7DQorICAgQ09SRV9BRERSICBhZGRyOw0KKyAgIA0KKyAgIHVzZV9zZWw9MTsNCisg
ICBmbXQuZm9ybWF0ID0gbGFzdF9mb3JtYXQ7DQorICAgZm10LnNpemUgPSBsYXN0X3NpemU7DQor
ICAgZm10LmNvdW50ID0gMTsNCisgDQorICAgaWYgKGV4cCAmJiAqZXhwID09ICcvJykNCisgICAg
IHsNCisgICAgICAgZXhwKys7DQorICAgICAgIGZtdCA9IGRlY29kZV9mb3JtYXQgKCZleHAsIGxh
c3RfZm9ybWF0LCBsYXN0X3NpemUpOw0KKyAgICAgfQ0KKyANCisgICAvKiBJZiB3ZSBoYXZlIGFu
IGV4cHJlc3Npb24sIGV2YWx1YXRlIGl0IGFuZCB1c2UgaXQgYXMgdGhlIGFkZHJlc3MuICAqLw0K
KyANCisgICBpZiAoZXhwICE9IDAgJiYgKmV4cCAhPSAwKQ0KKyAgICAgew0KKyAgICAgICBjaGFy
ICogcCA9IHN0cmNocihleHAsJzonKTsNCisgICAgICAgaWYgKCpwPT0wKQ0KKyAgICAgICAgIHJl
dHVybjsNCisgICAgICAgKnAgPSAwOw0KKyAgICAgICBleHByID0gcGFyc2VfZXhwcmVzc2lvbiAo
ZXhwKTsNCisgICAgICAgLyogQ2F1c2UgZXhwcmVzc2lvbiBub3QgdG8gYmUgdGhlcmUgYW55IG1v
cmUNCisgCSBpZiB0aGlzIGNvbW1hbmQgaXMgcmVwZWF0ZWQgd2l0aCBOZXdsaW5lLg0KKyAJIEJ1
dCBkb24ndCBjbG9iYmVyIGEgdXNlci1kZWZpbmVkIGNvbW1hbmQncyBkZWZpbml0aW9uLiAgKi8N
CisgICAgICAgaWYgKGZyb21fdHR5KQ0KKyAJKmV4cCA9IDA7DQorICAgICAgIG9sZF9jaGFpbiA9
IG1ha2VfY2xlYW51cCAoZnJlZV9jdXJyZW50X2NvbnRlbnRzLCAmZXhwcik7DQorICAgICAgIHNl
bHZhbCA9IGV2YWx1YXRlX2V4cHJlc3Npb24gKGV4cHIpOw0KKyAgICAgICBpZiAoVFlQRV9DT0RF
IChWQUxVRV9UWVBFIChzZWx2YWwpKSA9PSBUWVBFX0NPREVfUkVGKQ0KKyAJc2VsdmFsID0gdmFs
dWVfaW5kIChzZWx2YWwpOw0KKyAgICAgICBzZWwgPSB2YWx1ZV9hc19wb2ludGVyIChzZWx2YWwp
Ow0KKyAgICAgICBpZiAoc2VsIT1sYXN0X3NlbCkNCisgICAgICAgICBnbzMyX3NlbF9pbmZvKHNl
bCk7DQorICAgICAgIGxhc3Rfc2VsID0gc2VsOw0KKyAgICAgICBleHAgPSBwKzE7DQorICAgICAg
IGV4cHIgPSBwYXJzZV9leHByZXNzaW9uIChleHApOw0KKyAgICAgICAvKiBDYXVzZSBleHByZXNz
aW9uIG5vdCB0byBiZSB0aGVyZSBhbnkgbW9yZQ0KKyAJIGlmIHRoaXMgY29tbWFuZCBpcyByZXBl
YXRlZCB3aXRoIE5ld2xpbmUuDQorIAkgQnV0IGRvbid0IGNsb2JiZXIgYSB1c2VyLWRlZmluZWQg
Y29tbWFuZCdzIGRlZmluaXRpb24uICAqLw0KKyAgICAgICBpZiAoZnJvbV90dHkpDQorIAkqZXhw
ID0gMDsNCisgICAgICAgb2xkX2NoYWluID0gbWFrZV9jbGVhbnVwIChmcmVlX2N1cnJlbnRfY29u
dGVudHMsICZleHByKTsNCisgICAgICAgdmFsID0gZXZhbHVhdGVfZXhwcmVzc2lvbiAoZXhwcik7
DQorICAgICAgIGlmIChUWVBFX0NPREUgKFZBTFVFX1RZUEUgKHZhbCkpID09IFRZUEVfQ09ERV9S
RUYpDQorIAl2YWwgPSB2YWx1ZV9pbmQgKHZhbCk7DQorICAgICAgIC8qIEluIHJ2YWx1ZSBjb250
ZXh0cywgc3VjaCBhcyB0aGlzLCBmdW5jdGlvbnMgYXJlIGNvZXJjZWQgaW50bw0KKyAJIHBvaW50
ZXJzIHRvIGZ1bmN0aW9ucy4gIFRoaXMgbWFrZXMgIngvaSBtYWluIiB3b3JrLiAgKi8NCisgICAg
ICAgaWYgKC8qIGxhc3RfZm9ybWF0ID09ICdpJw0KKyAJICAmJiAqLyBUWVBFX0NPREUgKFZBTFVF
X1RZUEUgKHZhbCkpID09IFRZUEVfQ09ERV9GVU5DDQorIAkgICYmIFZBTFVFX0xWQUwgKHZhbCkg
PT0gbHZhbF9tZW1vcnkpDQorIAlhZGRyID0gVkFMVUVfQUREUkVTUyAodmFsKTsNCisgICAgICAg
ZWxzZQ0KKyAJYWRkciA9IHZhbHVlX2FzX3BvaW50ZXIgKHZhbCk7DQorICAgICAgIGRvX2NsZWFu
dXBzIChvbGRfY2hhaW4pOw0KKyAgICAgfQ0KKyANCisgICBkb19leGFtaW5lIChmbXQsIGFkZHIp
Ow0KKyAgIHVzZV9zZWw9MDsNCisgDQorICAgLyogSWYgdGhlIGV4YW1pbmUgc3VjY2VlZHMsIHdl
IHJlbWVtYmVyIGl0cyBzaXplIGFuZCBmb3JtYXQgZm9yIG5leHQgdGltZS4gICovDQorICAgbGFz
dF9zaXplID0gZm10LnNpemU7DQorICAgbGFzdF9mb3JtYXQgPSBmbXQuZm9ybWF0Ow0KKyANCisg
ICAvKiBTZXQgYSBjb3VwbGUgb2YgaW50ZXJuYWwgdmFyaWFibGVzIGlmIGFwcHJvcHJpYXRlLiAq
Lw0KKyAgIGlmIChsYXN0X2V4YW1pbmVfdmFsdWUpDQorICAgICB7DQorICAgICAgIC8qIE1ha2Ug
bGFzdCBhZGRyZXNzIGV4YW1pbmVkIGF2YWlsYWJsZSB0byB0aGUgdXNlciBhcyAkXy4gIFVzZQ0K
KyAJIHRoZSBjb3JyZWN0IHBvaW50ZXIgdHlwZS4gICovDQorICAgICAgIHNldF9pbnRlcm5hbHZh
ciAobG9va3VwX2ludGVybmFsdmFyICgiXyIpLA0KKyAJICAgICAgIHZhbHVlX2Zyb21fbG9uZ2Vz
dCAoDQorIAkJIGxvb2t1cF9wb2ludGVyX3R5cGUgKFZBTFVFX1RZUEUgKGxhc3RfZXhhbWluZV92
YWx1ZSkpLA0KKyAJCQkJICAgKExPTkdFU1QpIGxhc3RfZXhhbWluZV9hZGRyZXNzKSk7DQorICAg
ICAgIA0KKyAgICAgICAvKiBNYWtlIGNvbnRlbnRzIG9mIGxhc3QgYWRkcmVzcyBleGFtaW5lZCBh
dmFpbGFibGUgdG8gdGhlIHVzZXIgYXMgJF9fLiovDQorICAgICAgIHNldF9pbnRlcm5hbHZhciAo
bG9va3VwX2ludGVybmFsdmFyICgiX18iKSwgbGFzdF9leGFtaW5lX3ZhbHVlKTsNCisgICAgIH0N
CisgDQorIH0NCisgDQorICNlbmRpZiAvKiBvdGhlcl9zZWwgKi8NCiAgc3RhdGljIHZvaWQNCiAg
eF9jb21tYW5kIChleHAsIGZyb21fdHR5KQ0KICAgICAgIGNoYXIgKmV4cDsNCioqKioqKioqKioq
KioqKg0KKioqIDIxMTQsMjExOSAqKioqDQotLS0gMjIyNCwyMjQ1IC0tLS0NCiAgRGVmYXVsdHMg
Zm9yIGZvcm1hdCBhbmQgc2l6ZSBsZXR0ZXJzIGFyZSB0aG9zZSBwcmV2aW91c2x5IHVzZWQuXG5c
DQogIERlZmF1bHQgY291bnQgaXMgMS4gIERlZmF1bHQgYWRkcmVzcyBpcyBmb2xsb3dpbmcgbGFz
dCB0aGluZyBwcmludGVkXG5cDQogIHdpdGggdGhpcyBjb21tYW5kIG9yIFwicHJpbnRcIi4iLCBO
VUxMKSk7DQorIA0KKyAjaWZkZWYgb3RoZXJfc2VsDQorICAgYWRkX2NvbSAoInh4IiwgY2xhc3Nf
dmFycywgeHhfY29tbWFuZCwNCisgCSAgIGNvbmNhdCAoIkV4YW1pbmUgbWVtb3J5IHdpdGggc2Vs
ZWN0b3JzIDogeC9GTVQgU0VMOkFERFJFU1MuXG5cDQorIEFERFJFU1MgaXMgYW4gZXhwcmVzc2lv
biBmb3IgdGhlIG1lbW9yeSBhZGRyZXNzIHRvIGV4YW1pbmUuXG5cDQorIFNFTCBpcyB0aGUgc2Vs
ZWN0b3IgZm9yIEFERFJFU1NcblwNCisgRk1UIGlzIGEgcmVwZWF0IGNvdW50IGZvbGxvd2VkIGJ5
IGEgZm9ybWF0IGxldHRlciBhbmQgYSBzaXplIGxldHRlci5cblwNCisgRm9ybWF0IGxldHRlcnMg
YXJlIG8ob2N0YWwpLCB4KGhleCksIGQoZGVjaW1hbCksIHUodW5zaWduZWQgZGVjaW1hbCksXG5c
DQorICAgdChiaW5hcnkpLCBmKGZsb2F0KSwgYShhZGRyZXNzKSwgaShpbnN0cnVjdGlvbiksIGMo
Y2hhcikgYW5kIHMoc3RyaW5nKS5cbiIsDQorICJTaXplIGxldHRlcnMgYXJlIGIoYnl0ZSksIGgo
aGFsZndvcmQpLCB3KHdvcmQpLCBnKGdpYW50LCA4IGJ5dGVzKS5cblwNCisgVGhlIHNwZWNpZmll
ZCBudW1iZXIgb2Ygb2JqZWN0cyBvZiB0aGUgc3BlY2lmaWVkIHNpemUgYXJlIHByaW50ZWRcblwN
CisgYWNjb3JkaW5nIHRvIHRoZSBmb3JtYXQuXG5cblwNCisgRGVmYXVsdHMgZm9yIGZvcm1hdCBh
bmQgc2l6ZSBsZXR0ZXJzIGFyZSB0aG9zZSBwcmV2aW91c2x5IHVzZWQuXG5cDQorIERlZmF1bHQg
Y291bnQgaXMgMS4gIERlZmF1bHQgYWRkcmVzcyBpcyBmb2xsb3dpbmcgbGFzdCB0aGluZyBwcmlu
dGVkXG5cDQorIHdpdGggdGhpcyBjb21tYW5kIG9yIFwicHJpbnRcIi4iLCBOVUxMKSk7DQorICNl
bmRpZiAvKiBvdGhlcl9zZWwgKi8NCiAgDQogICAgYWRkX2NvbSAoImRpc2Fzc2VtYmxlIiwgY2xh
c3NfdmFycywgZGlzYXNzZW1ibGVfY29tbWFuZCwNCiAgCSAgICJEaXNhc3NlbWJsZSBhIHNwZWNp
ZmllZCBzZWN0aW9uIG9mIG1lbW9yeS5cblwNCkluZGV4OiBnZGIvc2VyLWdvMzIuYw0KZGlmZiAt
YyBnZGIvc2VyLWdvMzIuYzoxLjEuMS4xIGdkYi9zZXItZ28zMi5jOjEuMg0KKioqIGdkYi9zZXIt
Z28zMi5jOjEuMS4xLjEJRnJpIERlYyAwNCAxMDo1MTowOCAxOTk4DQotLS0gZ2RiL3Nlci1nbzMy
LmMJV2VkIERlYyAyMyAxNjo1MzowNiAxOTk4DQoqKioqKioqKioqKioqKioNCioqKiAxLDk2NCAq
KioqDQohIC8qIFJlbW90ZSBzZXJpYWwgaW50ZXJmYWNlIGZvciBsb2NhbCAoaGFyZHdpcmVkKSBz
ZXJpYWwgcG9ydHMgZm9yDQ0KISAgICBHTzMyLiAgQ29weXJpZ2h0IDE5OTIsIDE5OTMgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuDQ0KISANDQohICAgIENvbnRyaWJ1dGVkIGJ5IE5pZ2Vs
IFN0ZXBoZW5zLCBBbGdvcml0aG1pY3MgTHRkLiAobmlnZWxAYWxnb3IuY28udWspLg0NCiEgDQ0K
ISAgICBUaGlzIHZlcnNpb24gdXNlcyBEUE1JIGludGVycnVwdHMgdG8gaGFuZGxlIGJ1ZmZlcmVk
IGkvbyANDQohICAgIHdpdGhvdXQgdGhlIHNlcGFyYXRlICJhc3luY3RzciIgcHJvZ3JhbS4NDQoh
IA0NCiEgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0RCLiAgDQ0KISANDQohICAgIFRoaXMgcHJv
Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k
aWZ5DQ0KISAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0NCiEgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3INDQohICAgIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQ0KISANDQohICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0NCiEgICAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YN
DQohICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUNDQohICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuDQ0KISANDQohICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQ0KISAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3Jh
bTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0NCiEgICAgRm91bmRhdGlvbiwg
SW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcs
IFVTQS4gICovDQ0KISANDQohICNpbmNsdWRlICJkZWZzLmgiDQ0KISAjaW5jbHVkZSAiZ2RiY21k
LmgiDQ0KISAjaW5jbHVkZSAic2VyaWFsLmgiDQ0KISANDQohIA0NCiEgLyoNDQohICAqIE5TMTY1
NTAgVUFSVCByZWdpc3RlcnMNDQohICAqLw0NCiEgDQ0KISAjZGVmaW5lIENPTTFBRERSCTB4M2Y4
DQ0KISAjZGVmaW5lIENPTTJBRERSCTB4MmY4DQ0KISAjZGVmaW5lIENPTTNBRERSCTB4M2U4DQ0K
ISAjZGVmaW5lIENPTTRBRERSCTB4M2UwDQ0KISANDQohICNkZWZpbmUJY29tX2RhdGEJMAkvKiBk
YXRhIHJlZ2lzdGVyIChSL1cpICovDQ0KISAjZGVmaW5lCWNvbV9kbGJsCTAJLyogZGl2aXNvciBs
YXRjaCBsb3cgKFcpICovDQ0KISAjZGVmaW5lCWNvbV9pZXIJCTEJLyogaW50ZXJydXB0IGVuYWJs
ZSAoVykgKi8NDQohICNkZWZpbmUJY29tX2RsYmgJMQkvKiBkaXZpc29yIGxhdGNoIGhpZ2ggKFcp
ICovDQ0KISAjZGVmaW5lCWNvbV9paXIJCTIJLyogaW50ZXJydXB0IGlkZW50aWZpY2F0aW9uIChS
KSAqLw0NCiEgI2RlZmluZQljb21fZmlmbwkyCS8qIEZJRk8gY29udHJvbCAoVykgKi8NDQohICNk
ZWZpbmUJY29tX2xjdGwJMwkvKiBsaW5lIGNvbnRyb2wgcmVnaXN0ZXIgKFIvVykgKi8NDQohICNk
ZWZpbmUJY29tX2NmY3IJMwkvKiBsaW5lIGNvbnRyb2wgcmVnaXN0ZXIgKFIvVykgKi8NDQohICNk
ZWZpbmUJY29tX21jcgkJNAkvKiBtb2RlbSBjb250cm9sIHJlZ2lzdGVyIChSL1cpICovDQ0KISAj
ZGVmaW5lCWNvbV9sc3IJCTUJLyogbGluZSBzdGF0dXMgcmVnaXN0ZXIgKFIvVykgKi8NDQohICNk
ZWZpbmUJY29tX21zcgkJNgkvKiBtb2RlbSBzdGF0dXMgcmVnaXN0ZXIgKFIvVykgKi8NDQohIA0N
CiEgLyoNDQohICAqIENvbnN0YW50cyBmb3IgY29tcHV0aW5nIDE2IGJpdCBiYXVkIHJhdGUgZGl2
aXNvciAobG93ZXIgYnl0ZQ0NCiEgICogaW4gY29tX2RsYmwsIHVwcGVyIGluIGNvbV9kbGJoKSBm
cm9tIDEuODQzMk1IeiBjcnlzdGFsLiAgRGl2aXNvciBpcw0NCiEgICogMS44NDMyIE1IeiAvICgx
NiAqIFgpIGZvciBYIGJwcy4gIElmIHRoZSBiYXVkIHJhdGUgY2FuJ3QgYmUgc2V0DQ0KISAgKiB0
byB3aXRoaW4gKy0gKGRlc2lyZWRfcmF0ZSpTUEVFRF9UT0xFUkFOQ0UvMTAwMCkgYnBzLCB3ZSBm
YWlsLg0NCiEgICovDQ0KISAjZGVmaW5lIENPTVRJQ0sJCSgxODQzMjAwLzE2KQ0NCiEgI2RlZmlu
ZSBTUEVFRF9UT0xFUkFOQ0UJMzAJLyogdGhvdXNhbmR0aHM7IHJlYWwgPT0gZGVzaXJlZCArLSAz
LjAlICovDQ0KISANDQohIC8qIGludGVycnVwdCBlbmFibGUgcmVnaXN0ZXIgKi8NDQohICNkZWZp
bmUJSUVSX0VSWFJEWQkweDEJLyogaW50IG9uIHJ4IHJlYWR5ICovDQ0KISAjZGVmaW5lCUlFUl9F
VFhSRFkJMHgyCS8qIGludCBvbiB0eCByZWFkeSAqLw0NCiEgI2RlZmluZQlJRVJfRVJMUwkweDQJ
LyogaW50IG9uIGxpbmUgc3RhdHVzIGNoYW5nZSAqLw0NCiEgI2RlZmluZQlJRVJfRU1TQwkweDgJ
LyogaW50IG9uIG1vZGVtIHN0YXR1cyBjaGFuZ2UgKi8NDQohIA0NCiEgLyogaW50ZXJydXB0IGlk
ZW50aWZpY2F0aW9uIHJlZ2lzdGVyICovDQ0KISAjZGVmaW5lCUlJUl9GSUZPX01BU0sJMHhjMAkv
KiBzZXQgaWYgRklGT3MgYXJlIGVuYWJsZWQgKi8NDQohICNkZWZpbmUJSUlSX0lNQVNLCTB4Zgkv
KiBpbnRlcnJ1cHQgY2F1c2UgbWFzayAqLw0NCiEgI2RlZmluZQlJSVJfTk9QRU5ECTB4MQkvKiBu
b3RoaW5nIHBlbmRpbmcgKi8NDQohICNkZWZpbmUJSUlSX1JMUwkJMHg2CS8qIHJlY2VpdmUgbGlu
ZSBzdGF0dXMgKi8NDQohICNkZWZpbmUJSUlSX1JYUkRZCTB4NAkvKiByZWNlaXZlIHJlYWR5ICov
DQ0KISAjZGVmaW5lCUlJUl9SWFRPVVQJMHhjCS8qIHJlY2VpdmUgdGltZW91dCAqLw0NCiEgI2Rl
ZmluZQlJSVJfVFhSRFkJMHgyCS8qIHRyYW5zbWl0IHJlYWR5ICovDQ0KISAjZGVmaW5lCUlJUl9N
TFNDCTB4MAkvKiBtb2RlbSBzdGF0dXMgKi8NDQohIA0NCiEgDQ0KISAvKiBmaWZvIGNvbnRyb2wg
cmVnaXN0ZXIgKi8NDQohICNkZWZpbmUJRklGT19FTkFCTEUJMHgwMQkvKiBlbmFibGUgZmlmbyAq
Lw0NCiEgI2RlZmluZQlGSUZPX1JDVl9SU1QJMHgwMgkvKiByZXNldCByZWNlaXZlIGZpZm8gKi8N
DQohICNkZWZpbmUJRklGT19YTVRfUlNUCTB4MDQJLyogcmVzZXQgdHJhbnNtaXQgZmlmbyAqLw0N
CiEgI2RlZmluZQlGSUZPX0RNQV9NT0RFCTB4MDgJLyogZW5hYmxlIGRtYSBtb2RlICovDQ0KISAj
ZGVmaW5lCUZJRk9fVFJJR0dFUl8xCTB4MDAJLyogdHJpZ2dlciBhdCAxIGNoYXIgKi8NDQohICNk
ZWZpbmUJRklGT19UUklHR0VSXzQJMHg0MAkvKiB0cmlnZ2VyIGF0IDQgY2hhcnMgKi8NDQohICNk
ZWZpbmUJRklGT19UUklHR0VSXzgJMHg4MAkvKiB0cmlnZ2VyIGF0IDggY2hhcnMgKi8NDQohICNk
ZWZpbmUJRklGT19UUklHR0VSXzE0CTB4YzAJLyogdHJpZ2dlciBhdCAxNCBjaGFycyAqLw0NCiEg
DQ0KISAvKiBjaGFyYWN0ZXIgZm9ybWF0IGNvbnRyb2wgcmVnaXN0ZXIgKi8NDQohICNkZWZpbmUJ
Q0ZDUl9ETEFCCTB4ODAJLyogZGl2aXNvciBsYXRjaCAqLw0NCiEgI2RlZmluZQlDRkNSX1NCUkVB
SwkweDQwCS8qIHNlbmQgYnJlYWsgKi8NDQohICNkZWZpbmUJQ0ZDUl9QWkVSTwkweDMwCS8qIHpl
cm8gcGFyaXR5ICovDQ0KISAjZGVmaW5lCUNGQ1JfUE9ORQkweDIwCS8qIG9uZSBwYXJpdHkgKi8N
DQohICNkZWZpbmUJQ0ZDUl9QRVZFTgkweDEwCS8qIGV2ZW4gcGFyaXR5ICovDQ0KISAjZGVmaW5l
CUNGQ1JfUE9ERAkweDAwCS8qIG9kZCBwYXJpdHkgKi8NDQohICNkZWZpbmUJQ0ZDUl9QRU5BQgkw
eDA4CS8qIHBhcml0eSBlbmFibGUgKi8NDQohICNkZWZpbmUJQ0ZDUl9TVE9QQgkweDA0CS8qIDIg
c3RvcCBiaXRzICovDQ0KISAjZGVmaW5lCUNGQ1JfOEJJVFMJMHgwMwkvKiA4IGRhdGEgYml0cyAq
Lw0NCiEgI2RlZmluZQlDRkNSXzdCSVRTCTB4MDIJLyogNyBkYXRhIGJpdHMgKi8NDQohICNkZWZp
bmUJQ0ZDUl82QklUUwkweDAxCS8qIDYgZGF0YSBiaXRzICovDQ0KISAjZGVmaW5lCUNGQ1JfNUJJ
VFMJMHgwMAkvKiA1IGRhdGEgYml0cyAqLw0NCiEgDQ0KISAvKiBtb2RlbSBjb250cm9sIHJlZ2lz
dGVyICovDQ0KISAjZGVmaW5lCU1DUl9MT09QQkFDSwkweDEwCS8qIGxvb3BiYWNrICovDQ0KISAj
ZGVmaW5lCU1DUl9JRU5BQkxFCTB4MDgJLyogb3V0cHV0IDIgPSBpbnQgZW5hYmxlICovDQ0KISAj
ZGVmaW5lCU1DUl9EUlMJCTB4MDQJLyogb3V0cHV0IDEgPSB4eHggKi8NDQohICNkZWZpbmUJTUNS
X1JUUwkJMHgwMgkvKiBlbmFibGUgUlRTICovDQ0KISAjZGVmaW5lCU1DUl9EVFIJCTB4MDEJLyog
ZW5hYmxlIERUUiAqLw0NCiEgDQ0KISAvKiBsaW5lIHN0YXR1cyByZWdpc3RlciAqLw0NCiEgI2Rl
ZmluZQlMU1JfUkNWX0ZJRk8JMHg4MAkvKiBlcnJvciBpbiByZWNlaXZlIGZpZm8gKi8NDQohICNk
ZWZpbmUJTFNSX1RTUkUJMHg0MAkvKiB0cmFuc21pdHRlciBlbXB0eSAqLw0NCiEgI2RlZmluZQlM
U1JfVFhSRFkJMHgyMAkvKiB0cmFuc21pdHRlciByZWFkeSAqLw0NCiEgI2RlZmluZQlMU1JfQkkJ
CTB4MTAJLyogYnJlYWsgZGV0ZWN0ZWQgKi8NDQohICNkZWZpbmUJTFNSX0ZFCQkweDA4CS8qIGZy
YW1pbmcgZXJyb3IgKi8NDQohICNkZWZpbmUJTFNSX1BFCQkweDA0CS8qIHBhcml0eSBlcnJvciAq
Lw0NCiEgI2RlZmluZQlMU1JfT0UJCTB4MDIJLyogb3ZlcnJ1biBlcnJvciAqLw0NCiEgI2RlZmlu
ZQlMU1JfUlhSRFkJMHgwMQkvKiByZWNlaXZlciByZWFkeSAqLw0NCiEgI2RlZmluZQlMU1JfUkNW
X01BU0sJMHgxZg0NCiEgDQ0KISAvKiBtb2RlbSBzdGF0dXMgcmVnaXN0ZXIgKi8NDQohICNkZWZp
bmUJTVNSX0RDRAkJMHg4MA0NCiEgI2RlZmluZQlNU1JfUkkJCTB4NDANDQohICNkZWZpbmUJTVNS
X0RTUgkJMHgyMA0NCiEgI2RlZmluZQlNU1JfQ1RTCQkweDEwDQ0KISAjZGVmaW5lCU1TUl9ERENE
CTB4MDgNDQohICNkZWZpbmUJTVNSX1RFUkkJMHgwNA0NCiEgI2RlZmluZQlNU1JfRERTUgkweDAy
DQ0KISAjZGVmaW5lCU1TUl9EQ1RTCTB4MDENDQohIA0NCiEgI2lmIChESkdQUCA+IDEpDQ0KISAj
ICBpbmNsdWRlIDxkb3MuaD4NDQohICMgIGluY2x1ZGUgPGdvMzIuaD4NDQohICMgIGluY2x1ZGUg
PGRwbWkuaD4NDQohICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyB1X2xvbmc7DQ0KISAjZWxzZQ0N
CiEgIyAgaW5jbHVkZSA8c3lzL2Rvcy5oPg0NCiEgIyAgaW5jbHVkZSA8c3lzL2dvMzIuaD4NDQoh
ICMgIGluY2x1ZGUgPHN5cy9kcG1pLmg+DQ0KISAjZW5kaWYNDQohIA0NCiEgLyogRFBNSSBDb21t
dW5pY2F0aW9uICovDQ0KISBzdGF0aWMgdW5pb24gUkVHUyBkcG1pX3JlZ3M7DQ0KISBzdGF0aWMg
c3RydWN0IFNSRUdTIGRwbWlfc3JlZ3M7DQ0KISANDQohIC8qIDE2NTUwIHJ4IGZpZm8gdHJpZ2dl
ciBwb2ludCAqLw0NCiEgI2RlZmluZSBGSUZPX1RSSUdHRVIJRklGT19UUklHR0VSXzQNDQohIA0N
CiEgLyogaW5wdXQgYnVmZmVyIHNpemUgKi8NDQohICNkZWZpbmUgQ0JTSVpFCTQwOTYNDQohIA0N
CiEgLyogcmV0dXJuIHJhdyAxOEh6IGNsb2NrIGNvdW50ICovDQ0KISBleHRlcm4gbG9uZyByYXdj
bG9jayAodm9pZCk7DQ0KISANDQohICNkZWZpbmUgUkFXSFoJMTgNDQohIA0NCiEgI2lmZGVmIERP
U19TVEFUUw0NCiEgI2RlZmluZSBDTlRfUlgJCTE2DQ0KISAjZGVmaW5lIENOVF9UWAkJMTcNDQoh
ICNkZWZpbmUgQ05UX1NUUkFZCTE4DQ0KISAjZGVmaW5lIENOVF9PUlVOCTE5DQ0KISAjZGVmaW5l
IE5DTlQJCTIwDQ0KISANDQohIHN0YXRpYyBpbnQJaW50cmNudDsNDQohIHN0YXRpYyBpbnQJY250
c1tOQ05UXTsNDQohIHN0YXRpYyBjaGFyCSpjbnRuYW1lc1tOQ05UXSA9IHsNDQohICAgLyogaC93
IGludGVycnVwdCBjb3VudHMuICovDQ0KISAgICJtbHNjIiwJIm5vcGVuZCIsCSJ0eHJkeSIsCSI/
MyIsDQ0KISAgICJyeHJkeSIsCSI/NSIsCQkicmxzIiwgCQkiPzciLCANDQohICAgIj84IiwgCSI/
OSIsIAkJIj9hIiwgCQkiP2IiLCANDQohICAgInJ4dG91dCIsIAkiP2QiLCAJCSI/ZSIsCQkiP2Yi
LCANDQohICAgLyogcy93IGNvdW50cy4gKi8NDQohICAgInJ4Y250IiwJInR4Y250IiwJInN0cmF5
IiwJInN3b2ZsbyINDQohIH07DQ0KISANDQohICNkZWZpbmUgQ09VTlQoeCkgY250c1t4XSsrDQ0K
ISAjZWxzZQ0NCiEgI2RlZmluZSBDT1VOVCh4KSANDQohICNlbmRpZg0NCiEgDQ0KISAvKiBNYWlu
IGludGVycnVwdCBjb250cm9sbGVyIHBvcnQgYWRkcmVzc2VzLiAqLw0NCiEgI2RlZmluZSBJQ1Vf
QkFTRQkweDIwDQ0KISAjZGVmaW5lIElDVV9PQ1cyCShJQ1VfQkFTRSArIDApDQ0KISAjZGVmaW5l
IElDVV9NQVNLCShJQ1VfQkFTRSArIDEpDQ0KISANDQohIC8qIE9yaWdpbmFsIGludGVycnVwdCBj
b250cm9sbGVyIG1hc2sgcmVnaXN0ZXIuICovDQ0KISB1bnNpZ25lZCBjaGFyCWljdV9vbGRtYXNr
Ow0NCiEgDQ0KISAvKiBNYXhpbXVtIG9mIDggaW50ZXJydXB0cyAod2UgZG9uJ3QgaGFuZGxlIHRo
ZSBzbGF2ZSBpY3UgeWV0KS4gKi8NDQohICNkZWZpbmUgTklOVFIJOA0NCiEgDQ0KISBzdGF0aWMg
c3RydWN0IGludHJ1cHQNDQohIHsgIA0NCiEgICBjaGFyCQkJaW51c2U7DQ0KISAgIHN0cnVjdCBk
b3NfdHR5c3RhdGUJKnBvcnQ7DQ0KISAgIF9nbzMyX2RwbWlfc2VnaW5mbwlvbGRfcm1oYW5kbGVy
Ow0NCiEgICBfZ28zMl9kcG1pX3NlZ2luZm8Jb2xkX3BtaGFuZGxlcjsNDQohICAgX2dvMzJfZHBt
aV9zZWdpbmZvCW5ld19ybWhhbmRsZXI7DQ0KISAgIF9nbzMyX2RwbWlfc2VnaW5mbwluZXdfcG1o
YW5kbGVyOw0NCiEgICBfZ28zMl9kcG1pX3JlZ2lzdGVycwlyZWdzOw0NCiEgfSBpbnRydXB0c1tO
SU5UUl07DQ0KISANDQohIA0NCiEgc3RhdGljIHN0cnVjdCBkb3NfdHR5c3RhdGUNDQohIHsNDQoh
ICAgaW50CQliYXNlOw0NCiEgICBpbnQJCWlycTsNDQohICAgaW50CQlyZWZjbnQ7DQ0KISAgIHN0
cnVjdCBpbnRydXB0ICppbnRydXB0Ow0NCiEgICBpbnQJCWZpZm87DQ0KISAgIGludAkJYmF1ZHJh
dGU7DQ0KISAgIHVuc2lnbmVkIGNoYXIJY2J1ZltDQlNJWkVdOw0NCiEgICB1bnNpZ25lZCBpbnQJ
Zmlyc3Q7DQ0KISAgIHVuc2lnbmVkIGludAljb3VudDsNDQohICAgaW50CQl0eGJ1c3k7DQ0KISAg
IHVuc2lnbmVkIGNoYXIJb2xkX21jcjsNDQohICAgaW50CQlmZXJyOw0NCiEgICBpbnQJCXBlcnI7
DQ0KISAgIGludAkJb2ZsbzsNDQohICAgaW50CQltc3I7DQ0KISB9IHBvcnRzWzRdID0gew0NCiEg
ICB7Q09NMUFERFIsIDR9LCANDQohICAge0NPTTJBRERSLCAzfSwgDQ0KISAgIHtDT00zQUREUiwg
NH0sIA0NCiEgICB7Q09NNEFERFIsIDN9DQ0KISB9Ow0NCiEgDQ0KISBzdGF0aWMgaW50IGRvc19v
cGVuIFBBUkFNUyAoKHNlcmlhbF90IHNjYiwgY29uc3QgY2hhciAqbmFtZSkpOw0NCiEgc3RhdGlj
IHZvaWQgZG9zX3JhdyBQQVJBTVMgKChzZXJpYWxfdCBzY2IpKTsNDQohIHN0YXRpYyBpbnQgZG9z
X3JlYWRjaGFyIFBBUkFNUyAoKHNlcmlhbF90IHNjYiwgaW50IHRpbWVvdXQpKTsNDQohIHN0YXRp
YyBpbnQgZG9zX3NldGJhdWRyYXRlIFBBUkFNUyAoKHNlcmlhbF90IHNjYiwgaW50IHJhdGUpKTsN
DQohIHN0YXRpYyBpbnQgZG9zX3dyaXRlIFBBUkFNUyAoKHNlcmlhbF90IHNjYiwgY29uc3QgY2hh
ciAqc3RyLCBpbnQgbGVuKSk7DQ0KISBzdGF0aWMgdm9pZCBkb3NfY2xvc2UgUEFSQU1TICgoc2Vy
aWFsX3Qgc2NiKSk7DQ0KISBzdGF0aWMgc2VyaWFsX3R0eXN0YXRlIGRvc19nZXRfdHR5X3N0YXRl
IFBBUkFNUyAoKHNlcmlhbF90IHNjYikpOw0NCiEgc3RhdGljIGludCBkb3Nfc2V0X3R0eV9zdGF0
ZSBQQVJBTVMgKChzZXJpYWxfdCBzY2IsIHNlcmlhbF90dHlzdGF0ZSBzdGF0ZSkpOw0NCiEgc3Rh
dGljIGludCBkb3NfYmF1ZGNvbnYgUEFSQU1TICgoaW50IHJhdGUpKTsNDQohIA0NCiEgI2RlZmlu
ZSBpbmIocCxhKQlpbnBvcnRiKChwKS0+YmFzZSArIChhKSkNDQohICNkZWZpbmUgb3V0YihwLGEs
dikJb3V0cG9ydGIoKHApLT5iYXNlICsgKGEpLCAodikpDQ0KISAjZGVmaW5lIGRpc2FibGUoKQlh
c20gdm9sYXRpbGUgKCJjbGkiKTsNDQohICNkZWZpbmUgZW5hYmxlKCkJYXNtIHZvbGF0aWxlICgi
c3RpIik7DQ0KISANDQohIA0NCiEgc3RhdGljIGludA0NCiEgZG9zX2dldGMgKHBvcnQpDQ0KISAg
ICAgIHZvbGF0aWxlIHN0cnVjdCBkb3NfdHR5c3RhdGUgKnBvcnQ7DQ0KISB7DQ0KISAgICAgaW50
IGM7DQ0KISANDQohICAgICBpZiAocG9ydC0+Y291bnQgPT0gMCkNDQohICAgICAgIHJldHVybiAt
MTsNDQohIA0NCiEgICAgIGMgPSBwb3J0LT5jYnVmW3BvcnQtPmZpcnN0XTsNDQohICAgICBkaXNh
YmxlICgpOw0NCiEgICAgIHBvcnQtPmZpcnN0ID0gKHBvcnQtPmZpcnN0ICsgMSkgJiAoQ0JTSVpF
IC0gMSk7DQ0KISAgICAgcG9ydC0+Y291bnQtLTsNDQohICAgICBlbmFibGUgKCk7DQ0KISAgICAg
cmV0dXJuIGM7DQ0KISB9DQ0KISAgICAgDQ0KISANDQohIHN0YXRpYyBpbnQgDQ0KISBkb3NfcHV0
YyAoYywgcG9ydCkNDQohICAgICAgaW50IGM7DQ0KISAgICAgIHN0cnVjdCBkb3NfdHR5c3RhdGUg
KnBvcnQ7DQ0KISB7DQ0KISAgICAgaWYgKHBvcnQtPmNvdW50ID49IENCU0laRSAtIDEpDQ0KISAJ
cmV0dXJuIC0xOw0NCiEgICAgIHBvcnQtPmNidWZbKHBvcnQtPmZpcnN0ICsgcG9ydC0+Y291bnQp
ICYgKENCU0laRSAtIDEpXSA9IGM7DQ0KISAgICAgcG9ydC0+Y291bnQrKzsNDQohICAgICByZXR1
cm4gMDsNDQohIH0NDQohIA0NCiEgDA0NCiEgDQ0KISBzdGF0aWMgdm9pZA0NCiEgZG9zX2NvbWlz
ciAoaXJxKQ0NCiEgICAgICBpbnQgaXJxOw0NCiEgew0NCiEgICBzdHJ1Y3QgZG9zX3R0eXN0YXRl
ICpwb3J0Ow0NCiEgICB1bnNpZ25lZCBjaGFyIGlpciwgbHNyLCBjOw0NCiEgDQ0KISAgIGRpc2Fi
bGUgKCk7CQkJLyogUGFyYW5vaWEgKi8NDQohICAgb3V0cG9ydGIgKElDVV9PQ1cyLCAweDIwKTsJ
LyogRW5kLU9mLUludGVycnVwdCAqLw0NCiEgI2lmZGVmIERPU19TVEFUUw0NCiEgICArK2ludHJj
bnQ7DQ0KISAjZW5kaWYNDQohIA0NCiEgICBwb3J0ID0gaW50cnVwdHNbaXJxXS5wb3J0Ow0NCiEg
ICBpZiAoIXBvcnQpIA0NCiEgICAgIHsNDQohICAgICAgIENPVU5UIChDTlRfU1RSQVkpOw0NCiEg
ICAgICAgcmV0dXJuOwkJLyogbm90IG9wZW4gKi8NDQohICAgICB9DQ0KISANDQohICAgd2hpbGUg
KDEpDQ0KISAgICAgew0NCiEgICAgICAgaWlyID0gaW5iIChwb3J0LCBjb21faWlyKSAmIElJUl9J
TUFTSzsNDQohICAgICAgIHN3aXRjaCAoaWlyKSANDQohIAl7DQ0KISAJICANDQohIAljYXNlIElJ
Ul9STFM6DQ0KISAJICBsc3IgPSBpbmIgKHBvcnQsIGNvbV9sc3IpOw0NCiEgCSAgZ290byByeDsN
DQohIAkgIA0NCiEgCWNhc2UgSUlSX1JYVE9VVDoNDQohIAljYXNlIElJUl9SWFJEWToNDQohIAkg
IGxzciA9IDA7DQ0KISAJICANDQohICAgICAgIHJ4Og0NCiEgCSAgZG8gDQ0KISAJICAgIHsNDQoh
IAkgICAgICBjID0gaW5iIChwb3J0LCBjb21fZGF0YSk7DQ0KISAJICAgICAgaWYgKGxzciAmIChM
U1JfQkkgfCBMU1JfRkUgfCBMU1JfUEUgfCBMU1JfT0UpKQ0NCiEgCQl7DQ0KISAJCSAgaWYgKGxz
ciAmIChMU1JfQkkgfCBMU1JfRkUpKQ0NCiEgCQkgICAgcG9ydC0+ZmVycisrOw0NCiEgCQkgIGVs
c2UgaWYgKGxzciAmIExTUl9QRSkNDQohIAkJICAgIHBvcnQtPnBlcnIrKzsNDQohIAkJICBpZiAo
bHNyICYgTFNSX09FKQ0NCiEgCQkgICAgcG9ydC0+b2ZsbysrOw0NCiEgCQl9DQ0KISANDQohIAkg
ICAgICBpZiAoZG9zX3B1dGMgKGMsIHBvcnQpIDwgMCkNDQohIAkJew0NCiEgCQkgIENPVU5UIChD
TlRfT1JVTik7DQ0KISAJCX0NDQohIAkgICAgICBlbHNlDQ0KISAJCXsNDQohIAkJICBDT1VOVCAo
Q05UX1JYKTsNDQohIAkJfQ0NCiEgCSAgICB9DQ0KISAJICB3aGlsZSAoKGxzciA9IGluYiAocG9y
dCwgY29tX2xzcikpICYgTFNSX1JYUkRZKTsNDQohIAkgIGJyZWFrOw0NCiEgCSAgDQ0KISAJY2Fz
ZSBJSVJfTUxTQzoNDQohIAkgIC8qIGNvdWxkIGJlIHVzZWQgdG8gZmxvd2NvbnRyb2wgVHggKi8N
DQohIAkgIHBvcnQtPm1zciA9IGluYiAocG9ydCwgY29tX21zcik7DQ0KISAJICBicmVhazsNDQoh
IAkgIA0NCiEgCWNhc2UgSUlSX1RYUkRZOg0NCiEgCSAgcG9ydC0+dHhidXN5ID0gMDsNDQohIAkg
IGJyZWFrOw0NCiEgDQ0KISAJY2FzZSBJSVJfTk9QRU5EOg0NCiEgCSAgLyogbm8gbW9yZSBwZW5k
aW5nIGludGVycnVwdHMsIGFsbCBkb25lICovDQ0KISAJICByZXR1cm47DQ0KISANDQohIAlkZWZh
dWx0Og0NCiEgCSAgLyogdW5leHBlY3RlZCBpbnRlcnJ1cHQsIGlnbm9yZSAqLw0NCiEgCSAgYnJl
YWs7DQ0KISAJfQ0NCiEgICAgICAgQ09VTlQgKGlpcik7DQ0KISAgICAgfSANDQohIH0NDQohIA0N
CiEgI2lmZGVmIF9fU1REQ19fDQ0KISAjZGVmaW5lIElTUk5BTUUoeCkgZG9zX2NvbWlzciMjeA0N
CiEgI2Vsc2UNDQohICNkZWZpbmUgSVNSTkFNRSh4KSBkb3NfY29taXNyLyoqL3gNDQohICNlbmRp
Zg0NCiEgI2RlZmluZSBJU1IoeCkgc3RhdGljIHZvaWQgSVNSTkFNRSh4KSgpIHtkb3NfY29taXNy
KHgpO30NDQohIA0NCiEgSVNSKDApIElTUigxKSBJU1IoMikgSVNSKDMpDQ0KISBJU1IoNCkgSVNS
KDUpIElTUig2KSBJU1IoNykNDQohIA0NCiEgdHlwZWRlZiB2b2lkICgqaXNyX3QpKCk7DQ0KISAN
DQohIHN0YXRpYyBpc3JfdCBpc3JzW05JTlRSXSA9IHsNDQohICAgSVNSTkFNRSgwKSwgSVNSTkFN
RSgxKSwgSVNSTkFNRSgyKSwgSVNSTkFNRSgzKSwNDQohICAgSVNSTkFNRSg0KSwgSVNSTkFNRSg1
KSwgSVNSTkFNRSg2KSwgSVNSTkFNRSg3KQ0NCiEgfTsNDQohIA0NCiEgDA0NCiEgDQ0KISBzdGF0
aWMgc3RydWN0IGludHJ1cHQgKg0NCiEgZG9zX2hvb2tpcnEgKGlycSkNDQohICAgICAgdW5zaWdu
ZWQgaW50IGlycTsNDQohIHsNDQohICAgc3RydWN0IGludHJ1cHQgKmludHI7DQ0KISAgIHVuc2ln
bmVkIGludCB2ZWM7DQ0KISAgIGlzcl90IGlzcjsNDQohIA0NCiEgICBpZiAoaXJxID49IE5JTlRS
KQ0NCiEgICAgIHJldHVybiAwOw0NCiEgDQ0KISAgIGludHIgPSAmaW50cnVwdHNbaXJxXTsNDQoh
ICAgaWYgKGludHItPmludXNlKQ0NCiEgICAgIHJldHVybiAwOw0NCiEgICANDQohICAgdmVjID0g
MHgwOCArIGlycTsNDQohICAgaXNyID0gaXNyc1tpcnFdOw0NCiEgDQ0KISAgIC8qIHNldHVwIHJl
YWwgbW9kZSBoYW5kbGVyICovDQ0KISAgIF9nbzMyX2RwbWlfZ2V0X3JlYWxfbW9kZV9pbnRlcnJ1
cHRfdmVjdG9yICh2ZWMsICZpbnRyLT5vbGRfcm1oYW5kbGVyKTsNDQohIA0NCiEgICBpbnRyLT5u
ZXdfcm1oYW5kbGVyLnBtX3NlbGVjdG9yID0gX2dvMzJfbXlfY3MoKTsNDQohICAgaW50ci0+bmV3
X3JtaGFuZGxlci5wbV9vZmZzZXQgPSAodV9sb25nKWlzcjsNDQohICAgaWYgKF9nbzMyX2RwbWlf
YWxsb2NhdGVfcmVhbF9tb2RlX2NhbGxiYWNrX2lyZXQgKCZpbnRyLT5uZXdfcm1oYW5kbGVyLA0N
CiEgCQkJCQkJICAgJmludHItPnJlZ3MpKQ0NCiEgICAgIHsNDQohICAgICAgIHJldHVybiAwOw0N
CiEgICAgIH0NDQohIA0NCiEgICBpZiAoX2dvMzJfZHBtaV9zZXRfcmVhbF9tb2RlX2ludGVycnVw
dF92ZWN0b3IgKHZlYywgJmludHItPm5ld19ybWhhbmRsZXIpKQ0NCiEgICAgIHsNDQohICAgICAg
IHJldHVybiAwOw0NCiEgICAgIH0NDQohICAgICAgIA0NCiEgICAvKiBzZXR1cCBwcm90ZWN0ZWQg
bW9kZSBoYW5kbGVyICovDQ0KISAgIF9nbzMyX2RwbWlfZ2V0X3Byb3RlY3RlZF9tb2RlX2ludGVy
cnVwdF92ZWN0b3IodmVjLCAmaW50ci0+b2xkX3BtaGFuZGxlcik7DQ0KISANDQohICAgaW50ci0+
bmV3X3BtaGFuZGxlci5wbV9zZWxlY3RvciA9IF9nbzMyX215X2NzKCk7DQ0KISAgIGludHItPm5l
d19wbWhhbmRsZXIucG1fb2Zmc2V0ID0gKHVfbG9uZylpc3I7DQ0KISAgIF9nbzMyX2RwbWlfYWxs
b2NhdGVfaXJldF93cmFwcGVyICgmaW50ci0+bmV3X3BtaGFuZGxlcik7DQ0KISANDQohICAgaWYg
KF9nbzMyX2RwbWlfc2V0X3Byb3RlY3RlZF9tb2RlX2ludGVycnVwdF92ZWN0b3IodmVjLCAmaW50
ci0+bmV3X3BtaGFuZGxlcikpDQ0KISAgICAgew0NCiEgICAgICAgcmV0dXJuIDA7DQ0KISAgICAg
fQ0NCiEgDQ0KISAgIC8qIHNldHVwIGludGVycnVwdCBjb250cm9sbGVyIG1hc2sgKi8NDQohICAg
ZGlzYWJsZSAoKTsNDQohICAgb3V0cG9ydGIgKElDVV9NQVNLLCBpbnBvcnRiIChJQ1VfTUFTSykg
JiB+KDEgPDwgaXJxKSk7DQ0KISAgIGVuYWJsZSAoKTsNDQohIA0NCiEgICBpbnRyLT5pbnVzZSA9
IDE7DQ0KISAgIHJldHVybiBpbnRyOw0NCiEgfQ0NCiEgDQ0KISANDQohIHN0YXRpYyB2b2lkDQ0K
ISBkb3NfdW5ob29raXJxIChpbnRyKQ0NCiEgICAgICBzdHJ1Y3QgaW50cnVwdCAqaW50cjsNDQoh
IHsNDQohICAgdW5zaWduZWQgaW50IGlycSwgdmVjOw0NCiEgICB1bnNpZ25lZCBjaGFyIG1hc2s7
DQ0KISANDQohICAgaXJxID0gaW50ciAtIGludHJ1cHRzOw0NCiEgICB2ZWMgPSAweDA4ICsgaXJx
Ow0NCiEgDQ0KISAgIC8qIHJlc3RvcmUgb2xkIGludGVycnVwdCBtYXNrIGJpdCAqLw0NCiEgICBt
YXNrID0gMSA8PCBpcnE7DQ0KISAgIGRpc2FibGUgKCk7DQ0KISAgIG91dHBvcnRiIChJQ1VfTUFT
SywgaW5wb3J0YiAoSUNVX01BU0spIHwgKG1hc2sgJiBpY3Vfb2xkbWFzaykpOw0NCiEgICBlbmFi
bGUgKCk7DQ0KISANDQohICAgLyogcmVtb3ZlIHJlYWwgbW9kZSBoYW5kbGVyICovDQ0KISAgIF9n
bzMyX2RwbWlfc2V0X3JlYWxfbW9kZV9pbnRlcnJ1cHRfdmVjdG9yICh2ZWMsICZpbnRyLT5vbGRf
cm1oYW5kbGVyKTsNDQohICAgX2dvMzJfZHBtaV9mcmVlX3JlYWxfbW9kZV9jYWxsYmFjayAoJmlu
dHItPm5ld19ybWhhbmRsZXIpOw0NCiEgICAgICAgDQ0KISAgIC8qIHJlbW92ZSBwcm90ZWN0ZWQg
bW9kZSBoYW5kbGVyICovDQ0KISAgIF9nbzMyX2RwbWlfc2V0X3Byb3RlY3RlZF9tb2RlX2ludGVy
cnVwdF92ZWN0b3IgKHZlYywgJmludHItPm9sZF9wbWhhbmRsZXIpOw0NCiEgICBfZ28zMl9kcG1p
X2ZyZWVfaXJldF93cmFwcGVyICgmaW50ci0+bmV3X3BtaGFuZGxlcik7DQ0KISAgIGludHItPmlu
dXNlID0gMDsNDQohIH0NDQohIA0NCiEgDA0NCiEgDQ0KISBzdGF0aWMgaW50DQ0KISBkb3Nfb3Bl
biAoc2NiLCBuYW1lKQ0NCiEgICAgICBzZXJpYWxfdCBzY2I7DQ0KISAgICAgIGNvbnN0IGNoYXIg
Km5hbWU7DQ0KISB7DQ0KISAgIHN0cnVjdCBkb3NfdHR5c3RhdGUgKnBvcnQ7DQ0KISAgIGludCBm
ZCwgaTsNDQohIA0NCiEgICBpZiAoc3RybmNhc2VjbXAgKG5hbWUsICIvZGV2LyIsIDUpID09IDAp
DQ0KISAgICAgbmFtZSArPSA1Ow0NCiEgICBlbHNlIGlmIChzdHJuY2FzZWNtcCAobmFtZSwgIlxc
ZGV2XFwiLCA1KSA9PSAwKQ0NCiEgICAgIG5hbWUgKz0gNTsNDQohIA0NCiEgICBpZiAoc3RybGVu
IChuYW1lKSAhPSA0IHx8IHN0cm5jYXNlY21wIChuYW1lLCAiY29tIiwgMykgIT0gMCkNDQohICAg
ICB7DQ0KISAgICAgICBlcnJubyA9IEVOT0VOVDsNDQohICAgICAgIHJldHVybiAtMTsNDQohICAg
ICB9DQ0KISANDQohICAgaWYgKG5hbWVbM10gPCAnMScgfHwgbmFtZVszXSA+ICc0JykNDQohICAg
ICB7DQ0KISAgICAgICBlcnJubyA9IEVOT0VOVDsNDQohICAgICAgIHJldHVybiAtMTsNDQohICAg
ICB9DQ0KISANDQohICAgZmQgPSBuYW1lWzNdIC0gJzEnOw0NCiEgICBwb3J0ID0gJnBvcnRzW2Zk
XTsNDQohICAgaWYgKHBvcnQtPnJlZmNudCsrID4gMCkNDQohICAgICB7DQ0KISAgICAgICAvKiBE
ZXZpY2UgYWxyZWFkeSBvcGVuZWQgYW5vdGhlciB1c2VyLiAgSnVzdCBwb2ludCBhdCBpdC4gKi8N
DQohICAgICAgIHNjYi0+ZmQgPSBmZDsNDQohICAgICAgIHJldHVybiAwOw0NCiEgICAgIH0NDQoh
IA0NCiEgICAvKiBmb3JjZSBhY2Nlc3MgdG8gSUQgcmVnICovDQ0KISAgIG91dGIocG9ydCwgY29t
X2NmY3IsIDApOw0NCiEgICBvdXRiKHBvcnQsIGNvbV9paXIsIDApOw0NCiEgICBmb3IgKGkgPSAw
OyBpIDwgMTc7IGkrKykgew0NCiEgICAgIGlmICgoaW5iKHBvcnQsIGNvbV9paXIpICYgMHgzOCkg
PT0gMCkNDQohICAgICAgIGdvdG8gb2s7DQ0KISAgICAgKHZvaWQpIGluYihwb3J0LCBjb21fZGF0
YSk7IC8qIGNsZWFyIHJlY3YgKi8NDQohICAgfQ0NCiEgICBlcnJubyA9IEVOT0RFVjsNDQohICAg
cmV0dXJuIC0xOw0NCiEgDQ0KISBvazoNDQohICAgLyogZGlzYWJsZSBhbGwgaW50ZXJydXB0cyBp
biBjaGlwICovDQ0KISAgIG91dGIocG9ydCwgY29tX2llciwgMCk7DQ0KISANDQohICAgLyogdGVu
dGF0aXZlbHkgZW5hYmxlIDE2NTUwIGZpZm8sIGFuZCBzZWUgaWYgaXQgcmVzcG9uZHMgKi8NDQoh
ICAgb3V0Yihwb3J0LCBjb21fZmlmbywgRklGT19FTkFCTEV8RklGT19SQ1ZfUlNUfEZJRk9fWE1U
X1JTVHxGSUZPX1RSSUdHRVIpOw0NCiEgICBzbGVlcCgxKTsNDQohICAgcG9ydC0+ZmlmbyA9ICgo
aW5iKHBvcnQsIGNvbV9paXIpICYgSUlSX0ZJRk9fTUFTSykgPT0gSUlSX0ZJRk9fTUFTSyk7DQ0K
ISANDQohICAgLyogY2xlYXIgcGVuZGluZyBzdGF0dXMgcmVwb3J0cy4gKi8NDQohICAgKHZvaWQp
IGluYihwb3J0LCBjb21fbHNyKTsNDQohICAgKHZvaWQpIGluYihwb3J0LCBjb21fbXNyKTsNDQoh
IA0NCiEgICAvKiBlbmFibGUgZXh0ZXJuYWwgaW50ZXJydXB0IGdhdGUgKHRvIGF2b2lkIGZsb2F0
aW5nIElSUSkgKi8NDQohICAgb3V0Yihwb3J0LCBjb21fbWNyLCBNQ1JfSUVOQUJMRSk7DQ0KISAN
DQohICAgLyogaG9vayB1cCBpbnRlcnJ1cHQgaGFuZGxlciBhbmQgaW5pdGlhbGlzZSBpY3UgKi8N
DQohICAgcG9ydC0+aW50cnVwdCA9IGRvc19ob29raXJxIChwb3J0LT5pcnEpOw0NCiEgICBpZiAo
IXBvcnQtPmludHJ1cHQpDQ0KISAgICAgew0NCiEgICAgICAgb3V0Yihwb3J0LCBjb21fbWNyLCAw
KTsNDQohICAgICAgIG91dGIocG9ydCwgY29tX2ZpZm8sIDApOw0NCiEgICAgICAgZXJybm8gPSBF
Tk9ERVY7DQ0KISAgICAgICByZXR1cm4gLTE7DQ0KISAgICAgfQ0NCiEgDQ0KISAgIGRpc2FibGUg
KCk7DQ0KISANDQohICAgLyogcmVjb3JkIHBvcnQgKi8NDQohICAgcG9ydC0+aW50cnVwdC0+cG9y
dCA9IHBvcnQ7IA0NCiEgICBzY2ItPmZkID0gZmQ7DQ0KISANDQohICAgLyogY2xlYXIgcnggYnVm
ZmVyLCB0eCBidXN5IGZsYWcgYW5kIG92ZXJmbG93IGNvdW50ICovDQ0KISAgIHBvcnQtPmZpcnN0
ID0gcG9ydC0+Y291bnQgPSAwOw0NCiEgICBwb3J0LT50eGJ1c3kgPSAwOw0NCiEgICBwb3J0LT5v
ZmxvID0gMDsNDQohIA0NCiEgICAvKiBzZXQgZGVmYXVsdCBiYXVkIHJhdGUgYW5kIG1vZGU6IDk2
MDAsOCxuLDEgKi8NDQohICAgaSA9IGRvc19iYXVkY29udiAocG9ydC0+YmF1ZHJhdGUgPSA5NjAw
KTsNDQohICAgb3V0Yihwb3J0LCBjb21fY2ZjciwgQ0ZDUl9ETEFCKTsNDQohICAgb3V0Yihwb3J0
LCBjb21fZGxibCwgaSAmIDB4ZmYpOw0NCiEgICBvdXRiKHBvcnQsIGNvbV9kbGJoLCBpID4+IDgp
Ow0NCiEgICBvdXRiKHBvcnQsIGNvbV9jZmNyLCBDRkNSXzhCSVRTKTsNDQohIA0NCiEgICAvKiBl
bmFibGUgYWxsIGludGVycnVwdHMgKi8NDQohICAgb3V0Yihwb3J0LCBjb21faWVyLCBJRVJfRVRY
UkRZIHwgSUVSX0VSWFJEWSB8IElFUl9FUkxTIHwgSUVSX0VNU0MpOw0NCiEgDQ0KISAgIC8qIGVu
YWJsZSBEVFIgJiBSVFMgKi8NDQohICAgb3V0Yihwb3J0LCBjb21fbWNyLCBNQ1JfRFRSIHwgTUNS
X1JUUyB8IE1DUl9JRU5BQkxFKTsNDQohIA0NCiEgICBlbmFibGUgKCk7DQ0KISANDQohICAgcmV0
dXJuIDA7DQ0KISB9DQ0KISANDQohIA0NCiEgc3RhdGljIHZvaWQNDQohIGRvc19jbG9zZSAoc2Ni
KQ0NCiEgICAgICBzZXJpYWxfdCBzY2I7DQ0KISB7DQ0KISAgICAgc3RydWN0IGRvc190dHlzdGF0
ZSAqcG9ydDsNDQohICAgICBzdHJ1Y3QgaW50cnVwdCAqaW50cnVwdDsNDQohIA0NCiEgICAgIGlm
ICghc2NiKQ0NCiEgICAgICAgcmV0dXJuOw0NCiEgDQ0KISAgICAgcG9ydCA9ICZwb3J0c1tzY2It
PmZkXTsNDQohIA0NCiEgICAgIGlmIChwb3J0LT5yZWZjbnQtLSA+IDEpDQ0KISAgICAgICByZXR1
cm47DQ0KISANDQohICAgICBpZiAoIShpbnRydXB0ID0gcG9ydC0+aW50cnVwdCkpDQ0KISAgICAg
ICByZXR1cm47DQ0KISANDQohICAgICAvKiBkaXNhYmxlIGludGVycnVwdHMsIGZpZm8sIGZsb3cg
Y29udHJvbCAqLw0NCiEgICAgIGRpc2FibGUgKCk7DQ0KISAgICAgcG9ydC0+aW50cnVwdCA9IDA7
DQ0KISAgICAgaW50cnVwdC0+cG9ydCA9IDA7DQ0KISAgICAgb3V0Yihwb3J0LCBjb21fZmlmbywg
MCk7DQ0KISAgICAgb3V0Yihwb3J0LCBjb21faWVyLCAwKTsNDQohICAgICBlbmFibGUgKCk7DQ0K
ISANDQohICAgICAvKiB1bmhvb2sgaGFuZGxlciwgYW5kIGRpc2FibGUgaW50ZXJydXB0IGdhdGUg
Ki8NDQohICAgICBkb3NfdW5ob29raXJxIChpbnRydXB0KTsNDQohICAgICBvdXRiKHBvcnQsIGNv
bV9tY3IsIDApOw0NCiEgDQ0KISAgICAgLyogQ2hlY2sgZm9yIG92ZXJmbG93IGVycm9ycyAqLw0N
CiEgICAgIGlmIChwb3J0LT5vZmxvKQ0NCiEgICAgICAgew0NCiEgCWZwcmludGZfdW5maWx0ZXJl
ZCAoZ2RiX3N0ZGVyciwNDQohIAkJCSAgICAiU2VyaWFsIGlucHV0IG92ZXJydW5zIG9jY3VycmVk
LlxuIik7DQ0KISAJZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkZXJyLCAiVGhpcyBzeXN0ZW0g
JXMgaGFuZGxlICVkIGJhdWQuXG4iLA0NCiEgCQkJICAgIHBvcnQtPmZpZm8gPyAiY2Fubm90IiA6
ICJuZWVkcyBhIDE2NTUwIHRvIiwNDQohIAkJCSAgICBwb3J0LT5iYXVkcmF0ZSk7DQ0KISAgICAg
ICB9DQ0KISB9DQ0KISANDQohIAwNDQohIA0NCiEgc3RhdGljIGludA0NCiEgZG9zX25vb3AgKHNj
YikNDQohICAgICAgc2VyaWFsX3Qgc2NiOw0NCiEgew0NCiEgICByZXR1cm4gMDsNDQohIH0NDQoh
IA0NCiEgc3RhdGljIHZvaWQNDQohIGRvc19yYXcgKHNjYikNDQohICAgICAgc2VyaWFsX3Qgc2Ni
Ow0NCiEgew0NCiEgICAvKiBBbHdheXMgaW4gcmF3IG1vZGUgKi8NDQohIH0NDQohIA0NCiEgc3Rh
dGljIGludA0NCiEgZG9zX3JlYWRjaGFyIChzY2IsIHRpbWVvdXQpDQ0KISAgICAgIHNlcmlhbF90
IHNjYjsNDQohICAgICAgaW50IHRpbWVvdXQ7DQ0KISB7DQ0KISAgIHN0cnVjdCBkb3NfdHR5c3Rh
dGUgKnBvcnQgPSAmcG9ydHNbc2NiLT5mZF07DQ0KISAgIGxvbmcgdGhlbjsNDQohICAgaW50IGM7
DQ0KISANDQohICAgdGhlbiA9IHJhd2Nsb2NrKCkgKyAodGltZW91dCAqIFJBV0haKTsNDQohICAg
d2hpbGUgKChjID0gZG9zX2dldGMgKHBvcnQpKSA8IDApDQ0KISAgICAgew0NCiEgICAgICAgaWYg
KHRpbWVvdXQgPj0gMCAmJiAocmF3Y2xvY2sgKCkgLSB0aGVuKSA+PSAwKQ0NCiEgCXJldHVybiBT
RVJJQUxfVElNRU9VVDsNDQohICAgICAgIG5vdGljZV9xdWl0ICgpOw0NCiEgICAgIH0NDQohIA0N
CiEgICByZXR1cm4gYzsNDQohIH0NDQohIA0NCiEgDQ0KISBzdGF0aWMgc2VyaWFsX3R0eXN0YXRl
DQ0KISBkb3NfZ2V0X3R0eV9zdGF0ZSAoc2NiKQ0NCiEgICAgICBzZXJpYWxfdCBzY2I7DQ0KISB7
DQ0KISAgIHN0cnVjdCBkb3NfdHR5c3RhdGUgKnBvcnQgPSAmcG9ydHNbc2NiLT5mZF07DQ0KISAg
IHN0cnVjdCBkb3NfdHR5c3RhdGUgKnN0YXRlOw0NCiEgDQ0KISAgIHN0YXRlID0gKHN0cnVjdCBk
b3NfdHR5c3RhdGUgKikgeG1hbGxvYyAoc2l6ZW9mICpzdGF0ZSk7DQ0KISAgICpzdGF0ZSA9ICpw
b3J0Ow0NCiEgICByZXR1cm4gKHNlcmlhbF90dHlzdGF0ZSkgc3RhdGU7DQ0KISB9DQ0KISANDQoh
IHN0YXRpYyBpbnQNDQohIGRvc19zZXRfdHR5X3N0YXRlIChzY2IsIHR0eXN0YXRlKQ0NCiEgICAg
ICBzZXJpYWxfdCBzY2I7DQ0KISAgICAgIHNlcmlhbF90dHlzdGF0ZSB0dHlzdGF0ZTsNDQohIHsN
DQohICAgc3RydWN0IGRvc190dHlzdGF0ZSAqc3RhdGU7DQ0KISANDQohICAgc3RhdGUgPSAoc3Ry
dWN0IGRvc190dHlzdGF0ZSAqKSB0dHlzdGF0ZTsNDQohICAgZG9zX3NldGJhdWRyYXRlIChzY2Is
IHN0YXRlLT5iYXVkcmF0ZSk7DQ0KISAgIHJldHVybiAwOw0NCiEgfQ0NCiEgDQ0KISBzdGF0aWMg
aW50DQ0KISBkb3Nfbm9mbHVzaF9zZXRfdHR5X3N0YXRlIChzY2IsIG5ld190dHlzdGF0ZSwgb2xk
X3R0eXN0YXRlKQ0NCiEgICAgICBzZXJpYWxfdCBzY2I7DQ0KISAgICAgIHNlcmlhbF90dHlzdGF0
ZSBuZXdfdHR5c3RhdGU7DQ0KISAgICAgIHNlcmlhbF90dHlzdGF0ZSBvbGRfdHR5c3RhdGU7DQ0K
ISB7DQ0KISAgIHN0cnVjdCBkb3NfdHR5c3RhdGUgKnN0YXRlOw0NCiEgDQ0KISAgIHN0YXRlID0g
KHN0cnVjdCBkb3NfdHR5c3RhdGUgKikgbmV3X3R0eXN0YXRlOw0NCiEgICBkb3Nfc2V0YmF1ZHJh
dGUgKHNjYiwgc3RhdGUtPmJhdWRyYXRlKTsNDQohICAgcmV0dXJuIDA7DQ0KISB9DQ0KISANDQoh
IHN0YXRpYyBpbnQNDQohIGRvc19mbHVzaF9pbnB1dCAoc2NiKQ0NCiEgICAgICBzZXJpYWxfdCBz
Y2I7DQ0KISB7DQ0KISAgIHN0cnVjdCBkb3NfdHR5c3RhdGUgKnBvcnQgPSAmcG9ydHNbc2NiLT5m
ZF07DQ0KISAgIGRpc2FibGUoKTsNDQohICAgcG9ydC0+Zmlyc3QgPSBwb3J0LT5jb3VudCA9IDA7
DQ0KISAgIGlmIChwb3J0LT5maWZvKQ0NCiEgICAgIG91dGIocG9ydCwgY29tX2ZpZm8sIEZJRk9f
RU5BQkxFfEZJRk9fUkNWX1JTVHxGSUZPX1RSSUdHRVIpOw0NCiEgICBlbmFibGUoKTsNDQohIH0N
DQohIA0NCiEgc3RhdGljIHZvaWQNDQohIGRvc19wcmludF90dHlfc3RhdGUgKHNjYiwgdHR5c3Rh
dGUpDQ0KISAgICAgIHNlcmlhbF90IHNjYjsNDQohICAgICAgc2VyaWFsX3R0eXN0YXRlIHR0eXN0
YXRlOw0NCiEgew0NCiEgICAvKiBOb3RoaW5nIHRvIHByaW50ICovDQ0KISAgIHJldHVybjsNDQoh
IH0NDQohIA0NCiEgc3RhdGljIGludA0NCiEgZG9zX2JhdWRjb252IChyYXRlKQ0NCiEgICAgICBp
bnQgcmF0ZTsNDQohIHsNDQohICAgbG9uZyB4LCBlcnI7DQ0KISAgIA0NCiEgICBpZiAocmF0ZSA8
PSAwKSANDQohICAgICByZXR1cm4gLTE7DQ0KISANDQohICNkZWZpbmUgZGl2cm5kKG4sIHEpCSgo
KG4pICogMiAvIChxKSArIDEpIC8gMikgLyogZGl2aWRlIGFuZCByb3VuZCBvZmYgKi8NDQohICAg
eCA9IGRpdnJuZChDT01USUNLLCByYXRlKTsNDQohICAgaWYgKHggPD0gMCkNDQohICAgICByZXR1
cm4gLTE7DQ0KISAgIA0NCiEgICBlcnIgPSBkaXZybmQoMTAwMCAqIENPTVRJQ0ssIHggKiByYXRl
KSAtIDEwMDA7DQ0KISAgIGlmIChlcnIgPCAwKQ0NCiEgICAgIGVyciA9IC1lcnI7DQ0KISAgIGlm
IChlcnIgPiBTUEVFRF9UT0xFUkFOQ0UpDQ0KISAgICAgcmV0dXJuIC0xOw0NCiEgI3VuZGVmIGRp
dnJuZA0NCiEgICByZXR1cm4geDsNDQohIH0NDQohIA0NCiEgDQ0KISBzdGF0aWMgaW50DQ0KISBk
b3Nfc2V0YmF1ZHJhdGUgKHNjYiwgcmF0ZSkNDQohICAgICAgc2VyaWFsX3Qgc2NiOw0NCiEgICAg
ICBpbnQgcmF0ZTsNDQohIHsNDQohICAgICBzdHJ1Y3QgZG9zX3R0eXN0YXRlICpwb3J0ID0gJnBv
cnRzW3NjYi0+ZmRdOw0NCiEgDQ0KISAgICAgaWYgKHBvcnQtPmJhdWRyYXRlICE9IHJhdGUpIA0N
CiEgICAgICAgew0NCiEgCWludCB4Ow0NCiEgCXVuc2lnbmVkIGNoYXIgY2ZjcjsNDQohIA0NCiEg
CXggPSBkb3NfYmF1ZGNvbnYgKHJhdGUpOw0NCiEgCWlmICh4IDw9IDApDQ0KISAJICB7DQ0KISAJ
ICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGVyciwgIiVkOiBpbXBvc3NpYmxlIGJhdWRy
YXRlXG4iLCByYXRlKTsNDQohIAkgICAgZXJybm8gPSBFSU5WQUw7DQ0KISAJICAgIHJldHVybiAt
MTsNDQohIAkgIH0NDQohIA0NCiEgCWRpc2FibGUgKCk7DQ0KISAJY2ZjciA9IGluYiAocG9ydCwg
Y29tX2NmY3IpOw0NCiEgDQ0KISAJb3V0Yihwb3J0LCBjb21fY2ZjciwgQ0ZDUl9ETEFCKTsNDQoh
IAlvdXRiKHBvcnQsIGNvbV9kbGJsLCB4ICYgMHhmZik7DQ0KISAJb3V0Yihwb3J0LCBjb21fZGxi
aCwgeCA+PiA4KTsNDQohIAlvdXRiKHBvcnQsIGNvbV9jZmNyLCBjZmNyKTsNDQohIAlwb3J0LT5i
YXVkcmF0ZSA9IHJhdGU7DQ0KISAJZW5hYmxlICgpOw0NCiEgICAgICAgfQ0NCiEgDQ0KISAgICAg
cmV0dXJuIDA7DQ0KISB9DQ0KISANDQohIHN0YXRpYyBpbnQNDQohIGRvc19zZXRzdG9wYml0cyAo
c2NiLCBudW0pDQ0KISAgICAgIHNlcmlhbF90IHNjYjsNDQohICAgICAgaW50IG51bTsNDQohIHsN
DQohICAgICBzdHJ1Y3QgZG9zX3R0eXN0YXRlICpwb3J0ID0gJnBvcnRzW3NjYi0+ZmRdOw0NCiEg
ICAgIHVuc2lnbmVkIGNoYXIgY2ZjcjsNDQohIA0NCiEgICAgIGRpc2FibGUgKCk7DQ0KISAgICAg
Y2ZjciA9IGluYiAocG9ydCwgY29tX2NmY3IpOw0NCiEgDQ0KISAgICAgc3dpdGNoIChudW0pDQ0K
ISAgICAgICB7DQ0KISAgICAgICBjYXNlIFNFUklBTF8xX1NUT1BCSVRTOg0NCiEgCW91dGIgKHBv
cnQsIGNvbV9jZmNyLCBjZmNyICYgfkNGQ1JfU1RPUEIpOw0NCiEgCWJyZWFrOw0NCiEgICAgICAg
Y2FzZSBTRVJJQUxfMV9BTkRfQV9IQUxGX1NUT1BCSVRTOg0NCiEgICAgICAgY2FzZSBTRVJJQUxf
Ml9TVE9QQklUUzoNDQohIAlvdXRiIChwb3J0LCBjb21fY2ZjciwgY2ZjciB8IENGQ1JfU1RPUEIp
Ow0NCiEgCWJyZWFrOw0NCiEgICAgICAgZGVmYXVsdDoNDQohIAllbmFibGUgKCk7DQ0KISAJcmV0
dXJuIDE7DQ0KISAgICAgICB9DQ0KISAgICAgZW5hYmxlICgpOw0NCiEgDQ0KISAgICAgcmV0dXJu
IDA7DQ0KISB9DQ0KISANDQohIHN0YXRpYyBpbnQNDQohIGRvc193cml0ZSAoc2NiLCBzdHIsIGxl
bikNDQohICAgICAgc2VyaWFsX3Qgc2NiOw0NCiEgICAgICBjb25zdCBjaGFyICpzdHI7DQ0KISAg
ICAgIGludCBsZW47DQ0KISB7DQ0KISAgIHZvbGF0aWxlIHN0cnVjdCBkb3NfdHR5c3RhdGUgKnBv
cnQgPSAmcG9ydHNbc2NiLT5mZF07DQ0KISAgIGludCBmaWZvc2l6ZSA9IHBvcnQtPmZpZm8gPyAx
NiA6IDE7DQ0KISAgIGxvbmcgdGhlbjsNDQohICAgaW50IGNudDsNDQohIA0NCiEgICAgd2hpbGUg
KGxlbiA+IDApIA0NCiEgICAgICB7DQ0KISAJLyogc2VuZCB0aGUgZGF0YSwgZmlmb3NpemUgYnl0
ZXMgYXQgYSB0aW1lICovDQ0KISAJY250ID0gZmlmb3NpemUgPiBsZW4gPyBsZW4gOiBmaWZvc2l6
ZTsNDQohIAlwb3J0LT50eGJ1c3kgPSAxOw0NCiEgCW91dHBvcnRzYiAocG9ydC0+YmFzZSArIGNv
bV9kYXRhLCBzdHIsIGNudCk7DQ0KISAJc3RyICs9IGNudDsNDQohIAlsZW4gLT0gY250Ow0NCiEg
I2lmZGVmIERPU19TVEFUUw0NCiEgCWNudHNbQ05UX1RYXSArPSBjbnQ7DQ0KISAjZW5kaWYNDQoh
IAkvKiB3YWl0IGZvciB0cmFuc21pc3Npb24gdG8gY29tcGxldGUgKG1heCAxIHNlYykgKi8NDQoh
IAl0aGVuID0gcmF3Y2xvY2soKSArIFJBV0haOw0NCiEgCXdoaWxlIChwb3J0LT50eGJ1c3kpDQ0K
ISAJICB7DQ0KISAJICAgIGlmICgocmF3Y2xvY2sgKCkgLSB0aGVuKSA+PSAwKQ0NCiEgCSAgICAg
IHsNDQohIAkJICBlcnJubyA9IEVJTzsNDQohIAkJICByZXR1cm4gU0VSSUFMX0VSUk9SOw0NCiEg
CSAgICAgIH0NDQohIAkgIH0NDQohICAgICB9DQ0KISAgIHJldHVybiAwOw0NCiEgfQ0NCiEgDQ0K
ISANDQohIHN0YXRpYyBpbnQNDQohIGRvc19zZW5kYnJlYWsgKHNjYikNDQohICAgICAgc2VyaWFs
X3Qgc2NiOw0NCiEgew0NCiEgICB2b2xhdGlsZSBzdHJ1Y3QgZG9zX3R0eXN0YXRlICpwb3J0ID0g
JnBvcnRzW3NjYi0+ZmRdOw0NCiEgICB1bnNpZ25lZCBjaGFyIGNmY3I7DQ0KISAgIGxvbmcgdGhl
bjsNDQohIA0NCiEgICBjZmNyID0gaW5iKHBvcnQsIGNvbV9jZmNyKTsNDQohICAgb3V0Yihwb3J0
LCBjb21fY2ZjciwgY2ZjciB8IENGQ1JfU0JSRUFLKTsNDQohIA0NCiEgICAvKiAwLjI1IHNlYyBk
ZWxheSAqLw0NCiEgICB0aGVuID0gcmF3Y2xvY2sgKCkgKyBSQVdIWiAvIDQ7DQ0KISAgIHdoaWxl
ICgocmF3Y2xvY2sgKCkgLSB0aGVuKSA8IDApDQ0KISAgICAgY29udGludWU7DQ0KISANDQohICAg
b3V0Yihwb3J0LCBjb21fY2ZjciwgY2Zjcik7DQ0KISAgIHJldHVybiAwOw0NCiEgfQ0NCiEgDQ0K
ISANDQohIHN0YXRpYyBzdHJ1Y3Qgc2VyaWFsX29wcyBkb3Nfb3BzID0NDQohIHsNDQohICAgImhh
cmR3aXJlIiwNDQohICAgMCwNDQohICAgZG9zX29wZW4sDQ0KISAgIGRvc19jbG9zZSwNDQohICAg
ZG9zX3JlYWRjaGFyLA0NCiEgICBkb3Nfd3JpdGUsDQ0KISAgIGRvc19ub29wLAkJCS8qIGZsdXNo
IG91dHB1dCAqLw0NCiEgICBkb3NfZmx1c2hfaW5wdXQsDQ0KISAgIGRvc19zZW5kYnJlYWssDQ0K
ISAgIGRvc19yYXcsDQ0KISAgIGRvc19nZXRfdHR5X3N0YXRlLA0NCiEgICBkb3Nfc2V0X3R0eV9z
dGF0ZSwNDQohICAgZG9zX3ByaW50X3R0eV9zdGF0ZSwNDQohICAgZG9zX25vZmx1c2hfc2V0X3R0
eV9zdGF0ZSwNDQohICAgZG9zX3NldGJhdWRyYXRlLA0NCiEgICBkb3Nfc2V0c3RvcGJpdHMsDQ0K
ISB9Ow0NCiEgDQ0KISANDQohIHN0YXRpYyB2b2lkDQ0KISBkb3NfaW5mbyAoYXJnLCBmcm9tX3R0
eSkNDQohICAgICAgY2hhciAqYXJnOw0NCiEgICAgICBpbnQgZnJvbV90dHk7DQ0KISB7DQ0KISAg
IHN0cnVjdCBkb3NfdHR5c3RhdGUgKnBvcnQ7DQ0KISAgIGludCBpOw0NCiEgDQ0KISAgIGZvciAo
cG9ydCA9IHBvcnRzOyBwb3J0IDwgJnBvcnRzWzRdOyBwb3J0KyspIA0NCiEgICAgIHsNDQohICAg
ICAgIGlmIChwb3J0LT5iYXVkcmF0ZSA9PSAwKQ0NCiEgCWNvbnRpbnVlOw0NCiEgICAgICAgcHJp
bnRmX2ZpbHRlcmVkICgiUG9ydDpcdENPTSVkICglc2FjdGl2ZSlcbiIsIHBvcnQgLSBwb3J0cyAr
IDEsDQ0KISAJCSAgICAgICBwb3J0LT5pbnRydXB0ID8gIiIgOiAibm90ICIpOw0NCiEgICAgICAg
cHJpbnRmX2ZpbHRlcmVkICgiQWRkcjpcdDB4JTAzeCAoaXJxICVkKVxuIiwgcG9ydC0+YmFzZSwg
cG9ydC0+aXJxKTsNDQohICAgICAgIHByaW50Zl9maWx0ZXJlZCAoIjE2NTUwOlx0JXNcbiIsIHBv
cnQtPmZpZm8gPyAieWVzIiA6ICJubyIpOw0NCiEgICAgICAgcHJpbnRmX2ZpbHRlcmVkICgiU3Bl
ZWQ6XHQlZCBiYXVkXG4iLCBwb3J0LT5iYXVkcmF0ZSk7DQ0KISAgICAgICBwcmludGZfZmlsdGVy
ZWQgKCJFcnJzOlx0ZnJhbWluZyAlZCBwYXJpdHkgJWQgb3ZlcmZsb3cgJWRcblxuIiwgDQ0KISAJ
CSAgICAgICBwb3J0LT5mZXJyLCBwb3J0LT5wZXJyLCBwb3J0LT5vZmxvKTsNDQohICAgICB9DQ0K
ISANDQohICNpZmRlZiBET1NfU1RBVFMNDQohICAgcHJpbnRmX2ZpbHRlcmVkICgiXG5Ub3RhbCBp
bnRlcnJ1cHRzOiAlZFxuIiwgaW50cmNudCk7DQ0KISAgIGZvciAoaSA9IDA7IGkgPCBOQ05UOyBp
KyspDQ0KISAgICAgaWYgKGNudHNbaV0pDQ0KISAgICAgICBwcmludGZfZmlsdGVyZWQgKCIlczpc
dCVkXG4iLCBjbnRuYW1lc1tpXSwgY250c1tpXSk7DQ0KISAjZW5kaWYNDQohIH0NDQohIA0NCiEg
DQ0KISB2b2lkDQ0KISBfaW5pdGlhbGl6ZV9zZXJfZG9zICgpDQ0KISB7DQ0KISAgIHN0cnVjdCBj
bWRfbGlzdF9lbGVtZW50ICpjOw0NCiEgDQ0KISAgIHNlcmlhbF9hZGRfaW50ZXJmYWNlICgmZG9z
X29wcyk7DQ0KISANDQohICAgLyogU2F2ZSBvcmlnaW5hbCBpbnRlcnJ1cHQgbWFzayByZWdpc3Rl
ci4gKi8NDQohICAgaWN1X29sZG1hc2sgPSBpbnBvcnRiIChJQ1VfTUFTSyk7DQ0KISANDQohICAg
LyogTWFyayBmaXhlZCBtb3RoZXJib2FyZCBpcnFzIGFzIGludXNlLiAqLw0NCiEgICBpbnRydXB0
c1swXS5pbnVzZSA9CQkvKiB0aW1lciB0aWNrICovDQ0KISAgICAgaW50cnVwdHNbMV0uaW51c2Ug
PQkJLyoga2V5Ym9hcmQgKi8NDQohICAgICAgIGludHJ1cHRzWzJdLmludXNlID0gMTsJLyogc2xh
dmUgaWN1ICovDQ0KISAgICAgDQ0KISAgIGFkZF9zaG93X2Zyb21fc2V0ICgNDQohICAgICBhZGRf
c2V0X2NtZCAoImNvbTFiYXNlIiwgY2xhc3Nfb2JzY3VyZSwgdmFyX3ppbnRlZ2VyLA0NCiEgCQkg
KGNoYXIgKikgJnBvcnRzWzBdLmJhc2UsDQ0KISAJCSAiU2V0IENPTTEgYmFzZSBpL28gcG9ydCBh
ZGRyZXNzLiIsDQ0KISAJCSAmc2V0bGlzdCksDQ0KISAJJnNob3dsaXN0KTsNDQohIA0NCiEgICBh
ZGRfc2hvd19mcm9tX3NldCAoDQ0KISAgICAgYWRkX3NldF9jbWQgKCJjb20xaXJxIiwgY2xhc3Nf
b2JzY3VyZSwgdmFyX3ppbnRlZ2VyLA0NCiEgCQkgKGNoYXIgKikgJnBvcnRzWzBdLmlycSwNDQoh
IAkJICJTZXQgQ09NMSBpbnRlcnJ1cHQgcmVxdWVzdC4iLA0NCiEgCQkgJnNldGxpc3QpLA0NCiEg
CSZzaG93bGlzdCk7DQ0KISANDQohICAgYWRkX3Nob3dfZnJvbV9zZXQgKA0NCiEgICAgIGFkZF9z
ZXRfY21kICgiY29tMmJhc2UiLCBjbGFzc19vYnNjdXJlLCB2YXJfemludGVnZXIsDQ0KISAJCSAo
Y2hhciAqKSAmcG9ydHNbMV0uYmFzZSwNDQohIAkJICJTZXQgQ09NMiBiYXNlIGkvbyBwb3J0IGFk
ZHJlc3MuIiwNDQohIAkJICZzZXRsaXN0KSwNDQohIAkmc2hvd2xpc3QpOw0NCiEgDQ0KISAgIGFk
ZF9zaG93X2Zyb21fc2V0ICgNDQohICAgICBhZGRfc2V0X2NtZCAoImNvbTJpcnEiLCBjbGFzc19v
YnNjdXJlLCB2YXJfemludGVnZXIsDQ0KISAJCSAoY2hhciAqKSAmcG9ydHNbMV0uaXJxLA0NCiEg
CQkgIlNldCBDT00yIGludGVycnVwdCByZXF1ZXN0LiIsDQ0KISAJCSAmc2V0bGlzdCksDQ0KISAJ
JnNob3dsaXN0KTsNDQohIA0NCiEgICBhZGRfc2hvd19mcm9tX3NldCAoDQ0KISAgICAgYWRkX3Nl
dF9jbWQgKCJjb20zYmFzZSIsIGNsYXNzX29ic2N1cmUsIHZhcl96aW50ZWdlciwNDQohIAkJIChj
aGFyICopICZwb3J0c1syXS5iYXNlLA0NCiEgCQkgIlNldCBDT00zIGJhc2UgaS9vIHBvcnQgYWRk
cmVzcy4iLA0NCiEgCQkgJnNldGxpc3QpLA0NCiEgCSZzaG93bGlzdCk7DQ0KISANDQohICAgYWRk
X3Nob3dfZnJvbV9zZXQgKA0NCiEgICAgIGFkZF9zZXRfY21kICgiY29tM2lycSIsIGNsYXNzX29i
c2N1cmUsIHZhcl96aW50ZWdlciwNDQohIAkJIChjaGFyICopICZwb3J0c1syXS5pcnEsDQ0KISAJ
CSAiU2V0IENPTTMgaW50ZXJydXB0IHJlcXVlc3QuIiwNDQohIAkJICZzZXRsaXN0KSwNDQohIAkm
c2hvd2xpc3QpOw0NCiEgDQ0KISAgIGFkZF9zaG93X2Zyb21fc2V0ICgNDQohICAgICBhZGRfc2V0
X2NtZCAoImNvbTRiYXNlIiwgY2xhc3Nfb2JzY3VyZSwgdmFyX3ppbnRlZ2VyLA0NCiEgCQkgKGNo
YXIgKikgJnBvcnRzWzNdLmJhc2UsDQ0KISAJCSAiU2V0IENPTTQgYmFzZSBpL28gcG9ydCBhZGRy
ZXNzLiIsDQ0KISAJCSAmc2V0bGlzdCksDQ0KISAJJnNob3dsaXN0KTsNDQohIA0NCiEgICBhZGRf
c2hvd19mcm9tX3NldCAoDQ0KISAgICAgYWRkX3NldF9jbWQgKCJjb200aXJxIiwgY2xhc3Nfb2Jz
Y3VyZSwgdmFyX3ppbnRlZ2VyLA0NCiEgCQkgKGNoYXIgKikgJnBvcnRzWzNdLmlycSwNDQohIAkJ
ICJTZXQgQ09NNCBpbnRlcnJ1cHQgcmVxdWVzdC4iLA0NCiEgCQkgJnNldGxpc3QpLA0NCiEgCSZz
aG93bGlzdCk7DQ0KISANDQohICAgYWRkX2luZm8gKCJzZXJpYWwiLCBkb3NfaW5mbywNDQohIAkg
ICAgIlByaW50IERPUyBzZXJpYWwgcG9ydCBzdGF0dXMuIik7DQ0KISB9DQ0KLS0tIDEsOTY0IC0t
LS0NCiEgLyogUmVtb3RlIHNlcmlhbCBpbnRlcmZhY2UgZm9yIGxvY2FsIChoYXJkd2lyZWQpIHNl
cmlhbCBwb3J0cyBmb3INCiEgICAgR08zMi4gIENvcHlyaWdodCAxOTkyLCAxOTkzIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLg0KISANCiEgICAgQ29udHJpYnV0ZWQgYnkgTmlnZWwgU3Rl
cGhlbnMsIEFsZ29yaXRobWljcyBMdGQuIChuaWdlbEBhbGdvci5jby51aykuDQohIA0KISAgICBU
aGlzIHZlcnNpb24gdXNlcyBEUE1JIGludGVycnVwdHMgdG8gaGFuZGxlIGJ1ZmZlcmVkIGkvbyAN
CiEgICAgd2l0aG91dCB0aGUgc2VwYXJhdGUgImFzeW5jdHNyIiBwcm9ncmFtLg0KISANCiEgICAg
VGhpcyBmaWxlIGlzIHBhcnQgb2YgR0RCLiAgDQohIA0KISAgICBUaGlzIHByb2dyYW0gaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQ0KISAgICBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieQ0KISAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcg0KISAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLg0KISANCiEgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQohICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQohICAgIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCiEgICAg
R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiEgDQohICAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlDQohICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlDQohICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAt
IFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLw0KISANCiEgI2luY2x1
ZGUgImRlZnMuaCINCiEgI2luY2x1ZGUgImdkYmNtZC5oIg0KISAjaW5jbHVkZSAic2VyaWFsLmgi
DQohIA0KISANCiEgLyoNCiEgICogTlMxNjU1MCBVQVJUIHJlZ2lzdGVycw0KISAgKi8NCiEgDQoh
ICNkZWZpbmUgQ09NMUFERFIJMHgzZjgNCiEgI2RlZmluZSBDT00yQUREUgkweDJmOA0KISAjZGVm
aW5lIENPTTNBRERSCTB4M2U4DQohICNkZWZpbmUgQ09NNEFERFIJMHgzZTANCiEgDQohICNkZWZp
bmUJY29tX2RhdGEJMAkvKiBkYXRhIHJlZ2lzdGVyIChSL1cpICovDQohICNkZWZpbmUJY29tX2Rs
YmwJMAkvKiBkaXZpc29yIGxhdGNoIGxvdyAoVykgKi8NCiEgI2RlZmluZQljb21faWVyCQkxCS8q
IGludGVycnVwdCBlbmFibGUgKFcpICovDQohICNkZWZpbmUJY29tX2RsYmgJMQkvKiBkaXZpc29y
IGxhdGNoIGhpZ2ggKFcpICovDQohICNkZWZpbmUJY29tX2lpcgkJMgkvKiBpbnRlcnJ1cHQgaWRl
bnRpZmljYXRpb24gKFIpICovDQohICNkZWZpbmUJY29tX2ZpZm8JMgkvKiBGSUZPIGNvbnRyb2wg
KFcpICovDQohICNkZWZpbmUJY29tX2xjdGwJMwkvKiBsaW5lIGNvbnRyb2wgcmVnaXN0ZXIgKFIv
VykgKi8NCiEgI2RlZmluZQljb21fY2ZjcgkzCS8qIGxpbmUgY29udHJvbCByZWdpc3RlciAoUi9X
KSAqLw0KISAjZGVmaW5lCWNvbV9tY3IJCTQJLyogbW9kZW0gY29udHJvbCByZWdpc3RlciAoUi9X
KSAqLw0KISAjZGVmaW5lCWNvbV9sc3IJCTUJLyogbGluZSBzdGF0dXMgcmVnaXN0ZXIgKFIvVykg
Ki8NCiEgI2RlZmluZQljb21fbXNyCQk2CS8qIG1vZGVtIHN0YXR1cyByZWdpc3RlciAoUi9XKSAq
Lw0KISANCiEgLyoNCiEgICogQ29uc3RhbnRzIGZvciBjb21wdXRpbmcgMTYgYml0IGJhdWQgcmF0
ZSBkaXZpc29yIChsb3dlciBieXRlDQohICAqIGluIGNvbV9kbGJsLCB1cHBlciBpbiBjb21fZGxi
aCkgZnJvbSAxLjg0MzJNSHogY3J5c3RhbC4gIERpdmlzb3IgaXMNCiEgICogMS44NDMyIE1IeiAv
ICgxNiAqIFgpIGZvciBYIGJwcy4gIElmIHRoZSBiYXVkIHJhdGUgY2FuJ3QgYmUgc2V0DQohICAq
IHRvIHdpdGhpbiArLSAoZGVzaXJlZF9yYXRlKlNQRUVEX1RPTEVSQU5DRS8xMDAwKSBicHMsIHdl
IGZhaWwuDQohICAqLw0KISAjZGVmaW5lIENPTVRJQ0sJCSgxODQzMjAwLzE2KQ0KISAjZGVmaW5l
IFNQRUVEX1RPTEVSQU5DRQkzMAkvKiB0aG91c2FuZHRoczsgcmVhbCA9PSBkZXNpcmVkICstIDMu
MCUgKi8NCiEgDQohIC8qIGludGVycnVwdCBlbmFibGUgcmVnaXN0ZXIgKi8NCiEgI2RlZmluZQlJ
RVJfRVJYUkRZCTB4MQkvKiBpbnQgb24gcnggcmVhZHkgKi8NCiEgI2RlZmluZQlJRVJfRVRYUkRZ
CTB4MgkvKiBpbnQgb24gdHggcmVhZHkgKi8NCiEgI2RlZmluZQlJRVJfRVJMUwkweDQJLyogaW50
IG9uIGxpbmUgc3RhdHVzIGNoYW5nZSAqLw0KISAjZGVmaW5lCUlFUl9FTVNDCTB4OAkvKiBpbnQg
b24gbW9kZW0gc3RhdHVzIGNoYW5nZSAqLw0KISANCiEgLyogaW50ZXJydXB0IGlkZW50aWZpY2F0
aW9uIHJlZ2lzdGVyICovDQohICNkZWZpbmUJSUlSX0ZJRk9fTUFTSwkweGMwCS8qIHNldCBpZiBG
SUZPcyBhcmUgZW5hYmxlZCAqLw0KISAjZGVmaW5lCUlJUl9JTUFTSwkweGYJLyogaW50ZXJydXB0
IGNhdXNlIG1hc2sgKi8NCiEgI2RlZmluZQlJSVJfTk9QRU5ECTB4MQkvKiBub3RoaW5nIHBlbmRp
bmcgKi8NCiEgI2RlZmluZQlJSVJfUkxTCQkweDYJLyogcmVjZWl2ZSBsaW5lIHN0YXR1cyAqLw0K
ISAjZGVmaW5lCUlJUl9SWFJEWQkweDQJLyogcmVjZWl2ZSByZWFkeSAqLw0KISAjZGVmaW5lCUlJ
Ul9SWFRPVVQJMHhjCS8qIHJlY2VpdmUgdGltZW91dCAqLw0KISAjZGVmaW5lCUlJUl9UWFJEWQkw
eDIJLyogdHJhbnNtaXQgcmVhZHkgKi8NCiEgI2RlZmluZQlJSVJfTUxTQwkweDAJLyogbW9kZW0g
c3RhdHVzICovDQohIA0KISANCiEgLyogZmlmbyBjb250cm9sIHJlZ2lzdGVyICovDQohICNkZWZp
bmUJRklGT19FTkFCTEUJMHgwMQkvKiBlbmFibGUgZmlmbyAqLw0KISAjZGVmaW5lCUZJRk9fUkNW
X1JTVAkweDAyCS8qIHJlc2V0IHJlY2VpdmUgZmlmbyAqLw0KISAjZGVmaW5lCUZJRk9fWE1UX1JT
VAkweDA0CS8qIHJlc2V0IHRyYW5zbWl0IGZpZm8gKi8NCiEgI2RlZmluZQlGSUZPX0RNQV9NT0RF
CTB4MDgJLyogZW5hYmxlIGRtYSBtb2RlICovDQohICNkZWZpbmUJRklGT19UUklHR0VSXzEJMHgw
MAkvKiB0cmlnZ2VyIGF0IDEgY2hhciAqLw0KISAjZGVmaW5lCUZJRk9fVFJJR0dFUl80CTB4NDAJ
LyogdHJpZ2dlciBhdCA0IGNoYXJzICovDQohICNkZWZpbmUJRklGT19UUklHR0VSXzgJMHg4MAkv
KiB0cmlnZ2VyIGF0IDggY2hhcnMgKi8NCiEgI2RlZmluZQlGSUZPX1RSSUdHRVJfMTQJMHhjMAkv
KiB0cmlnZ2VyIGF0IDE0IGNoYXJzICovDQohIA0KISAvKiBjaGFyYWN0ZXIgZm9ybWF0IGNvbnRy
b2wgcmVnaXN0ZXIgKi8NCiEgI2RlZmluZQlDRkNSX0RMQUIJMHg4MAkvKiBkaXZpc29yIGxhdGNo
ICovDQohICNkZWZpbmUJQ0ZDUl9TQlJFQUsJMHg0MAkvKiBzZW5kIGJyZWFrICovDQohICNkZWZp
bmUJQ0ZDUl9QWkVSTwkweDMwCS8qIHplcm8gcGFyaXR5ICovDQohICNkZWZpbmUJQ0ZDUl9QT05F
CTB4MjAJLyogb25lIHBhcml0eSAqLw0KISAjZGVmaW5lCUNGQ1JfUEVWRU4JMHgxMAkvKiBldmVu
IHBhcml0eSAqLw0KISAjZGVmaW5lCUNGQ1JfUE9ERAkweDAwCS8qIG9kZCBwYXJpdHkgKi8NCiEg
I2RlZmluZQlDRkNSX1BFTkFCCTB4MDgJLyogcGFyaXR5IGVuYWJsZSAqLw0KISAjZGVmaW5lCUNG
Q1JfU1RPUEIJMHgwNAkvKiAyIHN0b3AgYml0cyAqLw0KISAjZGVmaW5lCUNGQ1JfOEJJVFMJMHgw
MwkvKiA4IGRhdGEgYml0cyAqLw0KISAjZGVmaW5lCUNGQ1JfN0JJVFMJMHgwMgkvKiA3IGRhdGEg
Yml0cyAqLw0KISAjZGVmaW5lCUNGQ1JfNkJJVFMJMHgwMQkvKiA2IGRhdGEgYml0cyAqLw0KISAj
ZGVmaW5lCUNGQ1JfNUJJVFMJMHgwMAkvKiA1IGRhdGEgYml0cyAqLw0KISANCiEgLyogbW9kZW0g
Y29udHJvbCByZWdpc3RlciAqLw0KISAjZGVmaW5lCU1DUl9MT09QQkFDSwkweDEwCS8qIGxvb3Bi
YWNrICovDQohICNkZWZpbmUJTUNSX0lFTkFCTEUJMHgwOAkvKiBvdXRwdXQgMiA9IGludCBlbmFi
bGUgKi8NCiEgI2RlZmluZQlNQ1JfRFJTCQkweDA0CS8qIG91dHB1dCAxID0geHh4ICovDQohICNk
ZWZpbmUJTUNSX1JUUwkJMHgwMgkvKiBlbmFibGUgUlRTICovDQohICNkZWZpbmUJTUNSX0RUUgkJ
MHgwMQkvKiBlbmFibGUgRFRSICovDQohIA0KISAvKiBsaW5lIHN0YXR1cyByZWdpc3RlciAqLw0K
ISAjZGVmaW5lCUxTUl9SQ1ZfRklGTwkweDgwCS8qIGVycm9yIGluIHJlY2VpdmUgZmlmbyAqLw0K
ISAjZGVmaW5lCUxTUl9UU1JFCTB4NDAJLyogdHJhbnNtaXR0ZXIgZW1wdHkgKi8NCiEgI2RlZmlu
ZQlMU1JfVFhSRFkJMHgyMAkvKiB0cmFuc21pdHRlciByZWFkeSAqLw0KISAjZGVmaW5lCUxTUl9C
SQkJMHgxMAkvKiBicmVhayBkZXRlY3RlZCAqLw0KISAjZGVmaW5lCUxTUl9GRQkJMHgwOAkvKiBm
cmFtaW5nIGVycm9yICovDQohICNkZWZpbmUJTFNSX1BFCQkweDA0CS8qIHBhcml0eSBlcnJvciAq
Lw0KISAjZGVmaW5lCUxTUl9PRQkJMHgwMgkvKiBvdmVycnVuIGVycm9yICovDQohICNkZWZpbmUJ
TFNSX1JYUkRZCTB4MDEJLyogcmVjZWl2ZXIgcmVhZHkgKi8NCiEgI2RlZmluZQlMU1JfUkNWX01B
U0sJMHgxZg0KISANCiEgLyogbW9kZW0gc3RhdHVzIHJlZ2lzdGVyICovDQohICNkZWZpbmUJTVNS
X0RDRAkJMHg4MA0KISAjZGVmaW5lCU1TUl9SSQkJMHg0MA0KISAjZGVmaW5lCU1TUl9EU1IJCTB4
MjANCiEgI2RlZmluZQlNU1JfQ1RTCQkweDEwDQohICNkZWZpbmUJTVNSX0REQ0QJMHgwOA0KISAj
ZGVmaW5lCU1TUl9URVJJCTB4MDQNCiEgI2RlZmluZQlNU1JfRERTUgkweDAyDQohICNkZWZpbmUJ
TVNSX0RDVFMJMHgwMQ0KISANCiEgI2lmIChESkdQUCA+IDEpDQohICMgIGluY2x1ZGUgPGRvcy5o
Pg0KISAjICBpbmNsdWRlIDxnbzMyLmg+DQohICMgIGluY2x1ZGUgPGRwbWkuaD4NCiEgICAgdHlw
ZWRlZiB1bnNpZ25lZCBsb25nIHVfbG9uZzsNCiEgI2Vsc2UNCiEgIyAgaW5jbHVkZSA8c3lzL2Rv
cy5oPg0KISAjICBpbmNsdWRlIDxzeXMvZ28zMi5oPg0KISAjICBpbmNsdWRlIDxzeXMvZHBtaS5o
Pg0KISAjZW5kaWYNCiEgDQohIC8qIERQTUkgQ29tbXVuaWNhdGlvbiAqLw0KISBzdGF0aWMgdW5p
b24gUkVHUyBkcG1pX3JlZ3M7DQohIHN0YXRpYyBzdHJ1Y3QgU1JFR1MgZHBtaV9zcmVnczsNCiEg
DQohIC8qIDE2NTUwIHJ4IGZpZm8gdHJpZ2dlciBwb2ludCAqLw0KISAjZGVmaW5lIEZJRk9fVFJJ
R0dFUglGSUZPX1RSSUdHRVJfNA0KISANCiEgLyogaW5wdXQgYnVmZmVyIHNpemUgKi8NCiEgI2Rl
ZmluZSBDQlNJWkUJNDA5Ng0KISANCiEgLyogcmV0dXJuIHJhdyAxOEh6IGNsb2NrIGNvdW50ICov
DQohIGV4dGVybiBsb25nIHJhd2Nsb2NrICh2b2lkKTsNCiEgDQohICNkZWZpbmUgUkFXSFoJMTgN
CiEgDQohICNpZmRlZiBET1NfU1RBVFMNCiEgI2RlZmluZSBDTlRfUlgJCTE2DQohICNkZWZpbmUg
Q05UX1RYCQkxNw0KISAjZGVmaW5lIENOVF9TVFJBWQkxOA0KISAjZGVmaW5lIENOVF9PUlVOCTE5
DQohICNkZWZpbmUgTkNOVAkJMjANCiEgDQohIHN0YXRpYyBpbnQJaW50cmNudDsNCiEgc3RhdGlj
IGludAljbnRzW05DTlRdOw0KISBzdGF0aWMgY2hhcgkqY250bmFtZXNbTkNOVF0gPSB7DQohICAg
LyogaC93IGludGVycnVwdCBjb3VudHMuICovDQohICAgIm1sc2MiLAkibm9wZW5kIiwJInR4cmR5
IiwJIj8zIiwNCiEgICAicnhyZHkiLAkiPzUiLAkJInJscyIsIAkJIj83IiwgDQohICAgIj84Iiwg
CSI/OSIsIAkJIj9hIiwgCQkiP2IiLCANCiEgICAicnh0b3V0IiwgCSI/ZCIsIAkJIj9lIiwJCSI/
ZiIsIA0KISAgIC8qIHMvdyBjb3VudHMuICovDQohICAgInJ4Y250IiwJInR4Y250IiwJInN0cmF5
IiwJInN3b2ZsbyINCiEgfTsNCiEgDQohICNkZWZpbmUgQ09VTlQoeCkgY250c1t4XSsrDQohICNl
bHNlDQohICNkZWZpbmUgQ09VTlQoeCkgDQohICNlbmRpZg0KISANCiEgLyogTWFpbiBpbnRlcnJ1
cHQgY29udHJvbGxlciBwb3J0IGFkZHJlc3Nlcy4gKi8NCiEgI2RlZmluZSBJQ1VfQkFTRQkweDIw
DQohICNkZWZpbmUgSUNVX09DVzIJKElDVV9CQVNFICsgMCkNCiEgI2RlZmluZSBJQ1VfTUFTSwko
SUNVX0JBU0UgKyAxKQ0KISANCiEgLyogT3JpZ2luYWwgaW50ZXJydXB0IGNvbnRyb2xsZXIgbWFz
ayByZWdpc3Rlci4gKi8NCiEgdW5zaWduZWQgY2hhcglpY3Vfb2xkbWFzazsNCiEgDQohIC8qIE1h
eGltdW0gb2YgOCBpbnRlcnJ1cHRzICh3ZSBkb24ndCBoYW5kbGUgdGhlIHNsYXZlIGljdSB5ZXQp
LiAqLw0KISAjZGVmaW5lIE5JTlRSCTgNCiEgDQohIHN0YXRpYyBzdHJ1Y3QgaW50cnVwdA0KISB7
ICANCiEgICBjaGFyCQkJaW51c2U7DQohICAgc3RydWN0IGRvc190dHlzdGF0ZQkqcG9ydDsNCiEg
ICBfZ28zMl9kcG1pX3NlZ2luZm8Jb2xkX3JtaGFuZGxlcjsNCiEgICBfZ28zMl9kcG1pX3NlZ2lu
Zm8Jb2xkX3BtaGFuZGxlcjsNCiEgICBfZ28zMl9kcG1pX3NlZ2luZm8JbmV3X3JtaGFuZGxlcjsN
CiEgICBfZ28zMl9kcG1pX3NlZ2luZm8JbmV3X3BtaGFuZGxlcjsNCiEgICBfZ28zMl9kcG1pX3Jl
Z2lzdGVycwlyZWdzOw0KISB9IGludHJ1cHRzW05JTlRSXTsNCiEgDQohIA0KISBzdGF0aWMgc3Ry
dWN0IGRvc190dHlzdGF0ZQ0KISB7DQohICAgaW50CQliYXNlOw0KISAgIGludAkJaXJxOw0KISAg
IGludAkJcmVmY250Ow0KISAgIHN0cnVjdCBpbnRydXB0ICppbnRydXB0Ow0KISAgIGludAkJZmlm
bzsNCiEgICBpbnQJCWJhdWRyYXRlOw0KISAgIHVuc2lnbmVkIGNoYXIJY2J1ZltDQlNJWkVdOw0K
ISAgIHVuc2lnbmVkIGludAlmaXJzdDsNCiEgICB1bnNpZ25lZCBpbnQJY291bnQ7DQohICAgaW50
CQl0eGJ1c3k7DQohICAgdW5zaWduZWQgY2hhcglvbGRfbWNyOw0KISAgIGludAkJZmVycjsNCiEg
ICBpbnQJCXBlcnI7DQohICAgaW50CQlvZmxvOw0KISAgIGludAkJbXNyOw0KISB9IHBvcnRzWzRd
ID0gew0KISAgIHtDT00xQUREUiwgNH0sIA0KISAgIHtDT00yQUREUiwgM30sIA0KISAgIHtDT00z
QUREUiwgNH0sIA0KISAgIHtDT000QUREUiwgM30NCiEgfTsNCiEgDQohIHN0YXRpYyBpbnQgZG9z
X29wZW4gUEFSQU1TICgoc2VyaWFsX3Qgc2NiLCBjb25zdCBjaGFyICpuYW1lKSk7DQohIHN0YXRp
YyB2b2lkIGRvc19yYXcgUEFSQU1TICgoc2VyaWFsX3Qgc2NiKSk7DQohIHN0YXRpYyBpbnQgZG9z
X3JlYWRjaGFyIFBBUkFNUyAoKHNlcmlhbF90IHNjYiwgaW50IHRpbWVvdXQpKTsNCiEgc3RhdGlj
IGludCBkb3Nfc2V0YmF1ZHJhdGUgUEFSQU1TICgoc2VyaWFsX3Qgc2NiLCBpbnQgcmF0ZSkpOw0K
ISBzdGF0aWMgaW50IGRvc193cml0ZSBQQVJBTVMgKChzZXJpYWxfdCBzY2IsIGNvbnN0IGNoYXIg
KnN0ciwgaW50IGxlbikpOw0KISBzdGF0aWMgdm9pZCBkb3NfY2xvc2UgUEFSQU1TICgoc2VyaWFs
X3Qgc2NiKSk7DQohIHN0YXRpYyBzZXJpYWxfdHR5c3RhdGUgZG9zX2dldF90dHlfc3RhdGUgUEFS
QU1TICgoc2VyaWFsX3Qgc2NiKSk7DQohIHN0YXRpYyBpbnQgZG9zX3NldF90dHlfc3RhdGUgUEFS
QU1TICgoc2VyaWFsX3Qgc2NiLCBzZXJpYWxfdHR5c3RhdGUgc3RhdGUpKTsNCiEgc3RhdGljIGlu
dCBkb3NfYmF1ZGNvbnYgUEFSQU1TICgoaW50IHJhdGUpKTsNCiEgDQohICNkZWZpbmUgaW5iKHAs
YSkJaW5wb3J0YigocCktPmJhc2UgKyAoYSkpDQohICNkZWZpbmUgb3V0YihwLGEsdikJb3V0cG9y
dGIoKHApLT5iYXNlICsgKGEpLCAodikpDQohICNkZWZpbmUgZGlzYWJsZSgpCWFzbSB2b2xhdGls
ZSAoImNsaSIpOw0KISAjZGVmaW5lIGVuYWJsZSgpCWFzbSB2b2xhdGlsZSAoInN0aSIpOw0KISAN
CiEgDQohIHN0YXRpYyBpbnQNCiEgZG9zX2dldGMgKHBvcnQpDQohICAgICAgdm9sYXRpbGUgc3Ry
dWN0IGRvc190dHlzdGF0ZSAqcG9ydDsNCiEgew0KISAgICAgaW50IGM7DQohIA0KISAgICAgaWYg
KHBvcnQtPmNvdW50ID09IDApDQohICAgICAgIHJldHVybiAtMTsNCiEgDQohICAgICBjID0gcG9y
dC0+Y2J1Zltwb3J0LT5maXJzdF07DQohICAgICBkaXNhYmxlICgpOw0KISAgICAgcG9ydC0+Zmly
c3QgPSAocG9ydC0+Zmlyc3QgKyAxKSAmIChDQlNJWkUgLSAxKTsNCiEgICAgIHBvcnQtPmNvdW50
LS07DQohICAgICBlbmFibGUgKCk7DQohICAgICByZXR1cm4gYzsNCiEgfQ0KISAgICAgDQohIA0K
ISBzdGF0aWMgaW50IA0KISBkb3NfcHV0YyAoYywgcG9ydCkNCiEgICAgICBpbnQgYzsNCiEgICAg
ICBzdHJ1Y3QgZG9zX3R0eXN0YXRlICpwb3J0Ow0KISB7DQohICAgICBpZiAocG9ydC0+Y291bnQg
Pj0gQ0JTSVpFIC0gMSkNCiEgCXJldHVybiAtMTsNCiEgICAgIHBvcnQtPmNidWZbKHBvcnQtPmZp
cnN0ICsgcG9ydC0+Y291bnQpICYgKENCU0laRSAtIDEpXSA9IGM7DQohICAgICBwb3J0LT5jb3Vu
dCsrOw0KISAgICAgcmV0dXJuIDA7DQohIH0NCiEgDQohIAwNCiEgDQohIHN0YXRpYyB2b2lkDQoh
IGRvc19jb21pc3IgKGlycSkNCiEgICAgICBpbnQgaXJxOw0KISB7DQohICAgc3RydWN0IGRvc190
dHlzdGF0ZSAqcG9ydDsNCiEgICB1bnNpZ25lZCBjaGFyIGlpciwgbHNyLCBjOw0KISANCiEgICBk
aXNhYmxlICgpOwkJCS8qIFBhcmFub2lhICovDQohICAgb3V0cG9ydGIgKElDVV9PQ1cyLCAweDIw
KTsJLyogRW5kLU9mLUludGVycnVwdCAqLw0KISAjaWZkZWYgRE9TX1NUQVRTDQohICAgKytpbnRy
Y250Ow0KISAjZW5kaWYNCiEgDQohICAgcG9ydCA9IGludHJ1cHRzW2lycV0ucG9ydDsNCiEgICBp
ZiAoIXBvcnQpIA0KISAgICAgew0KISAgICAgICBDT1VOVCAoQ05UX1NUUkFZKTsNCiEgICAgICAg
cmV0dXJuOwkJLyogbm90IG9wZW4gKi8NCiEgICAgIH0NCiEgDQohICAgd2hpbGUgKDEpDQohICAg
ICB7DQohICAgICAgIGlpciA9IGluYiAocG9ydCwgY29tX2lpcikgJiBJSVJfSU1BU0s7DQohICAg
ICAgIHN3aXRjaCAoaWlyKSANCiEgCXsNCiEgCSAgDQohIAljYXNlIElJUl9STFM6DQohIAkgIGxz
ciA9IGluYiAocG9ydCwgY29tX2xzcik7DQohIAkgIGdvdG8gcng7DQohIAkgIA0KISAJY2FzZSBJ
SVJfUlhUT1VUOg0KISAJY2FzZSBJSVJfUlhSRFk6DQohIAkgIGxzciA9IDA7DQohIAkgIA0KISAg
ICAgICByeDoNCiEgCSAgZG8gDQohIAkgICAgew0KISAJICAgICAgYyA9IGluYiAocG9ydCwgY29t
X2RhdGEpOw0KISAJICAgICAgaWYgKGxzciAmIChMU1JfQkkgfCBMU1JfRkUgfCBMU1JfUEUgfCBM
U1JfT0UpKQ0KISAJCXsNCiEgCQkgIGlmIChsc3IgJiAoTFNSX0JJIHwgTFNSX0ZFKSkNCiEgCQkg
ICAgcG9ydC0+ZmVycisrOw0KISAJCSAgZWxzZSBpZiAobHNyICYgTFNSX1BFKQ0KISAJCSAgICBw
b3J0LT5wZXJyKys7DQohIAkJICBpZiAobHNyICYgTFNSX09FKQ0KISAJCSAgICBwb3J0LT5vZmxv
Kys7DQohIAkJfQ0KISANCiEgCSAgICAgIGlmIChkb3NfcHV0YyAoYywgcG9ydCkgPCAwKQ0KISAJ
CXsNCiEgCQkgIENPVU5UIChDTlRfT1JVTik7DQohIAkJfQ0KISAJICAgICAgZWxzZQ0KISAJCXsN
CiEgCQkgIENPVU5UIChDTlRfUlgpOw0KISAJCX0NCiEgCSAgICB9DQohIAkgIHdoaWxlICgobHNy
ID0gaW5iIChwb3J0LCBjb21fbHNyKSkgJiBMU1JfUlhSRFkpOw0KISAJICBicmVhazsNCiEgCSAg
DQohIAljYXNlIElJUl9NTFNDOg0KISAJICAvKiBjb3VsZCBiZSB1c2VkIHRvIGZsb3djb250cm9s
IFR4ICovDQohIAkgIHBvcnQtPm1zciA9IGluYiAocG9ydCwgY29tX21zcik7DQohIAkgIGJyZWFr
Ow0KISAJICANCiEgCWNhc2UgSUlSX1RYUkRZOg0KISAJICBwb3J0LT50eGJ1c3kgPSAwOw0KISAJ
ICBicmVhazsNCiEgDQohIAljYXNlIElJUl9OT1BFTkQ6DQohIAkgIC8qIG5vIG1vcmUgcGVuZGlu
ZyBpbnRlcnJ1cHRzLCBhbGwgZG9uZSAqLw0KISAJICByZXR1cm47DQohIA0KISAJZGVmYXVsdDoN
CiEgCSAgLyogdW5leHBlY3RlZCBpbnRlcnJ1cHQsIGlnbm9yZSAqLw0KISAJICBicmVhazsNCiEg
CX0NCiEgICAgICAgQ09VTlQgKGlpcik7DQohICAgICB9IA0KISB9DQohIA0KISAjaWZkZWYgX19T
VERDX18NCiEgI2RlZmluZSBJU1JOQU1FKHgpIGRvc19jb21pc3IjI3gNCiEgI2Vsc2UNCiEgI2Rl
ZmluZSBJU1JOQU1FKHgpIGRvc19jb21pc3IvKioveA0KISAjZW5kaWYNCiEgI2RlZmluZSBJU1Io
eCkgc3RhdGljIHZvaWQgSVNSTkFNRSh4KSgpIHtkb3NfY29taXNyKHgpO30NCiEgDQohIElTUigw
KSBJU1IoMSkgSVNSKDIpIElTUigzKQ0KISBJU1IoNCkgSVNSKDUpIElTUig2KSBJU1IoNykNCiEg
DQohIHR5cGVkZWYgdm9pZCAoKmlzcl90KSgpOw0KISANCiEgc3RhdGljIGlzcl90IGlzcnNbTklO
VFJdID0gew0KISAgIElTUk5BTUUoMCksIElTUk5BTUUoMSksIElTUk5BTUUoMiksIElTUk5BTUUo
MyksDQohICAgSVNSTkFNRSg0KSwgSVNSTkFNRSg1KSwgSVNSTkFNRSg2KSwgSVNSTkFNRSg3KQ0K
ISB9Ow0KISANCiEgDA0KISANCiEgc3RhdGljIHN0cnVjdCBpbnRydXB0ICoNCiEgZG9zX2hvb2tp
cnEgKGlycSkNCiEgICAgICB1bnNpZ25lZCBpbnQgaXJxOw0KISB7DQohICAgc3RydWN0IGludHJ1
cHQgKmludHI7DQohICAgdW5zaWduZWQgaW50IHZlYzsNCiEgICBpc3JfdCBpc3I7DQohIA0KISAg
IGlmIChpcnEgPj0gTklOVFIpDQohICAgICByZXR1cm4gMDsNCiEgDQohICAgaW50ciA9ICZpbnRy
dXB0c1tpcnFdOw0KISAgIGlmIChpbnRyLT5pbnVzZSkNCiEgICAgIHJldHVybiAwOw0KISAgIA0K
ISAgIHZlYyA9IDB4MDggKyBpcnE7DQohICAgaXNyID0gaXNyc1tpcnFdOw0KISANCiEgICAvKiBz
ZXR1cCByZWFsIG1vZGUgaGFuZGxlciAqLw0KISAgIF9nbzMyX2RwbWlfZ2V0X3JlYWxfbW9kZV9p
bnRlcnJ1cHRfdmVjdG9yICh2ZWMsICZpbnRyLT5vbGRfcm1oYW5kbGVyKTsNCiEgDQohICAgaW50
ci0+bmV3X3JtaGFuZGxlci5wbV9zZWxlY3RvciA9IF9nbzMyX215X2NzKCk7DQohICAgaW50ci0+
bmV3X3JtaGFuZGxlci5wbV9vZmZzZXQgPSAodV9sb25nKWlzcjsNCiEgICBpZiAoX2dvMzJfZHBt
aV9hbGxvY2F0ZV9yZWFsX21vZGVfY2FsbGJhY2tfaXJldCAoJmludHItPm5ld19ybWhhbmRsZXIs
DQohIAkJCQkJCSAgICZpbnRyLT5yZWdzKSkNCiEgICAgIHsNCiEgICAgICAgcmV0dXJuIDA7DQoh
ICAgICB9DQohIA0KISAgIGlmIChfZ28zMl9kcG1pX3NldF9yZWFsX21vZGVfaW50ZXJydXB0X3Zl
Y3RvciAodmVjLCAmaW50ci0+bmV3X3JtaGFuZGxlcikpDQohICAgICB7DQohICAgICAgIHJldHVy
biAwOw0KISAgICAgfQ0KISAgICAgICANCiEgICAvKiBzZXR1cCBwcm90ZWN0ZWQgbW9kZSBoYW5k
bGVyICovDQohICAgX2dvMzJfZHBtaV9nZXRfcHJvdGVjdGVkX21vZGVfaW50ZXJydXB0X3ZlY3Rv
cih2ZWMsICZpbnRyLT5vbGRfcG1oYW5kbGVyKTsNCiEgDQohICAgaW50ci0+bmV3X3BtaGFuZGxl
ci5wbV9zZWxlY3RvciA9IF9nbzMyX215X2NzKCk7DQohICAgaW50ci0+bmV3X3BtaGFuZGxlci5w
bV9vZmZzZXQgPSAodV9sb25nKWlzcjsNCiEgICBfZ28zMl9kcG1pX2FsbG9jYXRlX2lyZXRfd3Jh
cHBlciAoJmludHItPm5ld19wbWhhbmRsZXIpOw0KISANCiEgICBpZiAoX2dvMzJfZHBtaV9zZXRf
cHJvdGVjdGVkX21vZGVfaW50ZXJydXB0X3ZlY3Rvcih2ZWMsICZpbnRyLT5uZXdfcG1oYW5kbGVy
KSkNCiEgICAgIHsNCiEgICAgICAgcmV0dXJuIDA7DQohICAgICB9DQohIA0KISAgIC8qIHNldHVw
IGludGVycnVwdCBjb250cm9sbGVyIG1hc2sgKi8NCiEgICBkaXNhYmxlICgpOw0KISAgIG91dHBv
cnRiIChJQ1VfTUFTSywgaW5wb3J0YiAoSUNVX01BU0spICYgfigxIDw8IGlycSkpOw0KISAgIGVu
YWJsZSAoKTsNCiEgDQohICAgaW50ci0+aW51c2UgPSAxOw0KISAgIHJldHVybiBpbnRyOw0KISB9
DQohIA0KISANCiEgc3RhdGljIHZvaWQNCiEgZG9zX3VuaG9va2lycSAoaW50cikNCiEgICAgICBz
dHJ1Y3QgaW50cnVwdCAqaW50cjsNCiEgew0KISAgIHVuc2lnbmVkIGludCBpcnEsIHZlYzsNCiEg
ICB1bnNpZ25lZCBjaGFyIG1hc2s7DQohIA0KISAgIGlycSA9IGludHIgLSBpbnRydXB0czsNCiEg
ICB2ZWMgPSAweDA4ICsgaXJxOw0KISANCiEgICAvKiByZXN0b3JlIG9sZCBpbnRlcnJ1cHQgbWFz
ayBiaXQgKi8NCiEgICBtYXNrID0gMSA8PCBpcnE7DQohICAgZGlzYWJsZSAoKTsNCiEgICBvdXRw
b3J0YiAoSUNVX01BU0ssIGlucG9ydGIgKElDVV9NQVNLKSB8IChtYXNrICYgaWN1X29sZG1hc2sp
KTsNCiEgICBlbmFibGUgKCk7DQohIA0KISAgIC8qIHJlbW92ZSByZWFsIG1vZGUgaGFuZGxlciAq
Lw0KISAgIF9nbzMyX2RwbWlfc2V0X3JlYWxfbW9kZV9pbnRlcnJ1cHRfdmVjdG9yICh2ZWMsICZp
bnRyLT5vbGRfcm1oYW5kbGVyKTsNCiEgICBfZ28zMl9kcG1pX2ZyZWVfcmVhbF9tb2RlX2NhbGxi
YWNrICgmaW50ci0+bmV3X3JtaGFuZGxlcik7DQohICAgICAgIA0KISAgIC8qIHJlbW92ZSBwcm90
ZWN0ZWQgbW9kZSBoYW5kbGVyICovDQohICAgX2dvMzJfZHBtaV9zZXRfcHJvdGVjdGVkX21vZGVf
aW50ZXJydXB0X3ZlY3RvciAodmVjLCAmaW50ci0+b2xkX3BtaGFuZGxlcik7DQohICAgX2dvMzJf
ZHBtaV9mcmVlX2lyZXRfd3JhcHBlciAoJmludHItPm5ld19wbWhhbmRsZXIpOw0KISAgIGludHIt
PmludXNlID0gMDsNCiEgfQ0KISANCiEgDA0KISANCiEgc3RhdGljIGludA0KISBkb3Nfb3BlbiAo
c2NiLCBuYW1lKQ0KISAgICAgIHNlcmlhbF90IHNjYjsNCiEgICAgICBjb25zdCBjaGFyICpuYW1l
Ow0KISB7DQohICAgc3RydWN0IGRvc190dHlzdGF0ZSAqcG9ydDsNCiEgICBpbnQgZmQsIGk7DQoh
IA0KISAgIGlmIChzdHJuY2FzZWNtcCAobmFtZSwgIi9kZXYvIiwgNSkgPT0gMCkNCiEgICAgIG5h
bWUgKz0gNTsNCiEgICBlbHNlIGlmIChzdHJuY2FzZWNtcCAobmFtZSwgIlxcZGV2XFwiLCA1KSA9
PSAwKQ0KISAgICAgbmFtZSArPSA1Ow0KISANCiEgICBpZiAoc3RybGVuIChuYW1lKSAhPSA0IHx8
IHN0cm5jYXNlY21wIChuYW1lLCAiY29tIiwgMykgIT0gMCkNCiEgICAgIHsNCiEgICAgICAgZXJy
bm8gPSBFTk9FTlQ7DQohICAgICAgIHJldHVybiAtMTsNCiEgICAgIH0NCiEgDQohICAgaWYgKG5h
bWVbM10gPCAnMScgfHwgbmFtZVszXSA+ICc0JykNCiEgICAgIHsNCiEgICAgICAgZXJybm8gPSBF
Tk9FTlQ7DQohICAgICAgIHJldHVybiAtMTsNCiEgICAgIH0NCiEgDQohICAgZmQgPSBuYW1lWzNd
IC0gJzEnOw0KISAgIHBvcnQgPSAmcG9ydHNbZmRdOw0KISAgIGlmIChwb3J0LT5yZWZjbnQrKyA+
IDApDQohICAgICB7DQohICAgICAgIC8qIERldmljZSBhbHJlYWR5IG9wZW5lZCBhbm90aGVyIHVz
ZXIuICBKdXN0IHBvaW50IGF0IGl0LiAqLw0KISAgICAgICBzY2ItPmZkID0gZmQ7DQohICAgICAg
IHJldHVybiAwOw0KISAgICAgfQ0KISANCiEgICAvKiBmb3JjZSBhY2Nlc3MgdG8gSUQgcmVnICov
DQohICAgb3V0Yihwb3J0LCBjb21fY2ZjciwgMCk7DQohICAgb3V0Yihwb3J0LCBjb21faWlyLCAw
KTsNCiEgICBmb3IgKGkgPSAwOyBpIDwgMTc7IGkrKykgew0KISAgICAgaWYgKChpbmIocG9ydCwg
Y29tX2lpcikgJiAweDM4KSA9PSAwKQ0KISAgICAgICBnb3RvIG9rOw0KISAgICAgKHZvaWQpIGlu
Yihwb3J0LCBjb21fZGF0YSk7IC8qIGNsZWFyIHJlY3YgKi8NCiEgICB9DQohICAgZXJybm8gPSBF
Tk9ERVY7DQohICAgcmV0dXJuIC0xOw0KISANCiEgb2s6DQohICAgLyogZGlzYWJsZSBhbGwgaW50
ZXJydXB0cyBpbiBjaGlwICovDQohICAgb3V0Yihwb3J0LCBjb21faWVyLCAwKTsNCiEgDQohICAg
LyogdGVudGF0aXZlbHkgZW5hYmxlIDE2NTUwIGZpZm8sIGFuZCBzZWUgaWYgaXQgcmVzcG9uZHMg
Ki8NCiEgICBvdXRiKHBvcnQsIGNvbV9maWZvLCBGSUZPX0VOQUJMRXxGSUZPX1JDVl9SU1R8RklG
T19YTVRfUlNUfEZJRk9fVFJJR0dFUik7DQohICAgc2xlZXAoMSk7DQohICAgcG9ydC0+ZmlmbyA9
ICgoaW5iKHBvcnQsIGNvbV9paXIpICYgSUlSX0ZJRk9fTUFTSykgPT0gSUlSX0ZJRk9fTUFTSyk7
DQohIA0KISAgIC8qIGNsZWFyIHBlbmRpbmcgc3RhdHVzIHJlcG9ydHMuICovDQohICAgKHZvaWQp
IGluYihwb3J0LCBjb21fbHNyKTsNCiEgICAodm9pZCkgaW5iKHBvcnQsIGNvbV9tc3IpOw0KISAN
CiEgICAvKiBlbmFibGUgZXh0ZXJuYWwgaW50ZXJydXB0IGdhdGUgKHRvIGF2b2lkIGZsb2F0aW5n
IElSUSkgKi8NCiEgICBvdXRiKHBvcnQsIGNvbV9tY3IsIE1DUl9JRU5BQkxFKTsNCiEgDQohICAg
LyogaG9vayB1cCBpbnRlcnJ1cHQgaGFuZGxlciBhbmQgaW5pdGlhbGlzZSBpY3UgKi8NCiEgICBw
b3J0LT5pbnRydXB0ID0gZG9zX2hvb2tpcnEgKHBvcnQtPmlycSk7DQohICAgaWYgKCFwb3J0LT5p
bnRydXB0KQ0KISAgICAgew0KISAgICAgICBvdXRiKHBvcnQsIGNvbV9tY3IsIDApOw0KISAgICAg
ICBvdXRiKHBvcnQsIGNvbV9maWZvLCAwKTsNCiEgICAgICAgZXJybm8gPSBFTk9ERVY7DQohICAg
ICAgIHJldHVybiAtMTsNCiEgICAgIH0NCiEgDQohICAgZGlzYWJsZSAoKTsNCiEgDQohICAgLyog
cmVjb3JkIHBvcnQgKi8NCiEgICBwb3J0LT5pbnRydXB0LT5wb3J0ID0gcG9ydDsgDQohICAgc2Ni
LT5mZCA9IGZkOw0KISANCiEgICAvKiBjbGVhciByeCBidWZmZXIsIHR4IGJ1c3kgZmxhZyBhbmQg
b3ZlcmZsb3cgY291bnQgKi8NCiEgICBwb3J0LT5maXJzdCA9IHBvcnQtPmNvdW50ID0gMDsNCiEg
ICBwb3J0LT50eGJ1c3kgPSAwOw0KISAgIHBvcnQtPm9mbG8gPSAwOw0KISANCiEgICAvKiBzZXQg
ZGVmYXVsdCBiYXVkIHJhdGUgYW5kIG1vZGU6IDk2MDAsOCxuLDEgKi8NCiEgICBpID0gZG9zX2Jh
dWRjb252IChwb3J0LT5iYXVkcmF0ZSA9IDk2MDApOw0KISAgIG91dGIocG9ydCwgY29tX2NmY3Is
IENGQ1JfRExBQik7DQohICAgb3V0Yihwb3J0LCBjb21fZGxibCwgaSAmIDB4ZmYpOw0KISAgIG91
dGIocG9ydCwgY29tX2RsYmgsIGkgPj4gOCk7DQohICAgb3V0Yihwb3J0LCBjb21fY2ZjciwgQ0ZD
Ul84QklUUyk7DQohIA0KISAgIC8qIGVuYWJsZSBhbGwgaW50ZXJydXB0cyAqLw0KISAgIG91dGIo
cG9ydCwgY29tX2llciwgSUVSX0VUWFJEWSB8IElFUl9FUlhSRFkgfCBJRVJfRVJMUyB8IElFUl9F
TVNDKTsNCiEgDQohICAgLyogZW5hYmxlIERUUiAmIFJUUyAqLw0KISAgIG91dGIocG9ydCwgY29t
X21jciwgTUNSX0RUUiB8IE1DUl9SVFMgfCBNQ1JfSUVOQUJMRSk7DQohIA0KISAgIGVuYWJsZSAo
KTsNCiEgDQohICAgcmV0dXJuIDA7DQohIH0NCiEgDQohIA0KISBzdGF0aWMgdm9pZA0KISBkb3Nf
Y2xvc2UgKHNjYikNCiEgICAgICBzZXJpYWxfdCBzY2I7DQohIHsNCiEgICAgIHN0cnVjdCBkb3Nf
dHR5c3RhdGUgKnBvcnQ7DQohICAgICBzdHJ1Y3QgaW50cnVwdCAqaW50cnVwdDsNCiEgDQohICAg
ICBpZiAoIXNjYikNCiEgICAgICAgcmV0dXJuOw0KISANCiEgICAgIHBvcnQgPSAmcG9ydHNbc2Ni
LT5mZF07DQohIA0KISAgICAgaWYgKHBvcnQtPnJlZmNudC0tID4gMSkNCiEgICAgICAgcmV0dXJu
Ow0KISANCiEgICAgIGlmICghKGludHJ1cHQgPSBwb3J0LT5pbnRydXB0KSkNCiEgICAgICAgcmV0
dXJuOw0KISANCiEgICAgIC8qIGRpc2FibGUgaW50ZXJydXB0cywgZmlmbywgZmxvdyBjb250cm9s
ICovDQohICAgICBkaXNhYmxlICgpOw0KISAgICAgcG9ydC0+aW50cnVwdCA9IDA7DQohICAgICBp
bnRydXB0LT5wb3J0ID0gMDsNCiEgICAgIG91dGIocG9ydCwgY29tX2ZpZm8sIDApOw0KISAgICAg
b3V0Yihwb3J0LCBjb21faWVyLCAwKTsNCiEgICAgIGVuYWJsZSAoKTsNCiEgDQohICAgICAvKiB1
bmhvb2sgaGFuZGxlciwgYW5kIGRpc2FibGUgaW50ZXJydXB0IGdhdGUgKi8NCiEgICAgIGRvc191
bmhvb2tpcnEgKGludHJ1cHQpOw0KISAgICAgb3V0Yihwb3J0LCBjb21fbWNyLCAwKTsNCiEgDQoh
ICAgICAvKiBDaGVjayBmb3Igb3ZlcmZsb3cgZXJyb3JzICovDQohICAgICBpZiAocG9ydC0+b2Zs
bykNCiEgICAgICAgew0KISAJZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkZXJyLA0KISAJCQkg
ICAgIlNlcmlhbCBpbnB1dCBvdmVycnVucyBvY2N1cnJlZC5cbiIpOw0KISAJZnByaW50Zl91bmZp
bHRlcmVkIChnZGJfc3RkZXJyLCAiVGhpcyBzeXN0ZW0gJXMgaGFuZGxlICVkIGJhdWQuXG4iLA0K
ISAJCQkgICAgcG9ydC0+ZmlmbyA/ICJjYW5ub3QiIDogIm5lZWRzIGEgMTY1NTAgdG8iLA0KISAJ
CQkgICAgcG9ydC0+YmF1ZHJhdGUpOw0KISAgICAgICB9DQohIH0NCiEgDQohIAwNCiEgDQohIHN0
YXRpYyBpbnQNCiEgZG9zX25vb3AgKHNjYikNCiEgICAgICBzZXJpYWxfdCBzY2I7DQohIHsNCiEg
ICByZXR1cm4gMDsNCiEgfQ0KISANCiEgc3RhdGljIHZvaWQNCiEgZG9zX3JhdyAoc2NiKQ0KISAg
ICAgIHNlcmlhbF90IHNjYjsNCiEgew0KISAgIC8qIEFsd2F5cyBpbiByYXcgbW9kZSAqLw0KISB9
DQohIA0KISBzdGF0aWMgaW50DQohIGRvc19yZWFkY2hhciAoc2NiLCB0aW1lb3V0KQ0KISAgICAg
IHNlcmlhbF90IHNjYjsNCiEgICAgICBpbnQgdGltZW91dDsNCiEgew0KISAgIHN0cnVjdCBkb3Nf
dHR5c3RhdGUgKnBvcnQgPSAmcG9ydHNbc2NiLT5mZF07DQohICAgbG9uZyB0aGVuOw0KISAgIGlu
dCBjOw0KISANCiEgICB0aGVuID0gcmF3Y2xvY2soKSArICh0aW1lb3V0ICogUkFXSFopOw0KISAg
IHdoaWxlICgoYyA9IGRvc19nZXRjIChwb3J0KSkgPCAwKQ0KISAgICAgew0KISAgICAgICBpZiAo
dGltZW91dCA+PSAwICYmIChyYXdjbG9jayAoKSAtIHRoZW4pID49IDApDQohIAlyZXR1cm4gU0VS
SUFMX1RJTUVPVVQ7DQohICAgICAgIG5vdGljZV9xdWl0ICgpOw0KISAgICAgfQ0KISANCiEgICBy
ZXR1cm4gYzsNCiEgfQ0KISANCiEgDQohIHN0YXRpYyBzZXJpYWxfdHR5c3RhdGUNCiEgZG9zX2dl
dF90dHlfc3RhdGUgKHNjYikNCiEgICAgICBzZXJpYWxfdCBzY2I7DQohIHsNCiEgICBzdHJ1Y3Qg
ZG9zX3R0eXN0YXRlICpwb3J0ID0gJnBvcnRzW3NjYi0+ZmRdOw0KISAgIHN0cnVjdCBkb3NfdHR5
c3RhdGUgKnN0YXRlOw0KISANCiEgICBzdGF0ZSA9IChzdHJ1Y3QgZG9zX3R0eXN0YXRlICopIHht
YWxsb2MgKHNpemVvZiAqc3RhdGUpOw0KISAgICpzdGF0ZSA9ICpwb3J0Ow0KISAgIHJldHVybiAo
c2VyaWFsX3R0eXN0YXRlKSBzdGF0ZTsNCiEgfQ0KISANCiEgc3RhdGljIGludA0KISBkb3Nfc2V0
X3R0eV9zdGF0ZSAoc2NiLCB0dHlzdGF0ZSkNCiEgICAgICBzZXJpYWxfdCBzY2I7DQohICAgICAg
c2VyaWFsX3R0eXN0YXRlIHR0eXN0YXRlOw0KISB7DQohICAgc3RydWN0IGRvc190dHlzdGF0ZSAq
c3RhdGU7DQohIA0KISAgIHN0YXRlID0gKHN0cnVjdCBkb3NfdHR5c3RhdGUgKikgdHR5c3RhdGU7
DQohICAgZG9zX3NldGJhdWRyYXRlIChzY2IsIHN0YXRlLT5iYXVkcmF0ZSk7DQohICAgcmV0dXJu
IDA7DQohIH0NCiEgDQohIHN0YXRpYyBpbnQNCiEgZG9zX25vZmx1c2hfc2V0X3R0eV9zdGF0ZSAo
c2NiLCBuZXdfdHR5c3RhdGUsIG9sZF90dHlzdGF0ZSkNCiEgICAgICBzZXJpYWxfdCBzY2I7DQoh
ICAgICAgc2VyaWFsX3R0eXN0YXRlIG5ld190dHlzdGF0ZTsNCiEgICAgICBzZXJpYWxfdHR5c3Rh
dGUgb2xkX3R0eXN0YXRlOw0KISB7DQohICAgc3RydWN0IGRvc190dHlzdGF0ZSAqc3RhdGU7DQoh
IA0KISAgIHN0YXRlID0gKHN0cnVjdCBkb3NfdHR5c3RhdGUgKikgbmV3X3R0eXN0YXRlOw0KISAg
IGRvc19zZXRiYXVkcmF0ZSAoc2NiLCBzdGF0ZS0+YmF1ZHJhdGUpOw0KISAgIHJldHVybiAwOw0K
ISB9DQohIA0KISBzdGF0aWMgaW50DQohIGRvc19mbHVzaF9pbnB1dCAoc2NiKQ0KISAgICAgIHNl
cmlhbF90IHNjYjsNCiEgew0KISAgIHN0cnVjdCBkb3NfdHR5c3RhdGUgKnBvcnQgPSAmcG9ydHNb
c2NiLT5mZF07DQohICAgZGlzYWJsZSgpOw0KISAgIHBvcnQtPmZpcnN0ID0gcG9ydC0+Y291bnQg
PSAwOw0KISAgIGlmIChwb3J0LT5maWZvKQ0KISAgICAgb3V0Yihwb3J0LCBjb21fZmlmbywgRklG
T19FTkFCTEV8RklGT19SQ1ZfUlNUfEZJRk9fVFJJR0dFUik7DQohICAgZW5hYmxlKCk7DQohIH0N
CiEgDQohIHN0YXRpYyB2b2lkDQohIGRvc19wcmludF90dHlfc3RhdGUgKHNjYiwgdHR5c3RhdGUp
DQohICAgICAgc2VyaWFsX3Qgc2NiOw0KISAgICAgIHNlcmlhbF90dHlzdGF0ZSB0dHlzdGF0ZTsN
CiEgew0KISAgIC8qIE5vdGhpbmcgdG8gcHJpbnQgKi8NCiEgICByZXR1cm47DQohIH0NCiEgDQoh
IHN0YXRpYyBpbnQNCiEgZG9zX2JhdWRjb252IChyYXRlKQ0KISAgICAgIGludCByYXRlOw0KISB7
DQohICAgbG9uZyB4LCBlcnI7DQohICAgDQohICAgaWYgKHJhdGUgPD0gMCkgDQohICAgICByZXR1
cm4gLTE7DQohIA0KISAjZGVmaW5lIGRpdnJuZChuLCBxKQkoKChuKSAqIDIgLyAocSkgKyAxKSAv
IDIpIC8qIGRpdmlkZSBhbmQgcm91bmQgb2ZmICovDQohICAgeCA9IGRpdnJuZChDT01USUNLLCBy
YXRlKTsNCiEgICBpZiAoeCA8PSAwKQ0KISAgICAgcmV0dXJuIC0xOw0KISAgIA0KISAgIGVyciA9
IGRpdnJuZCgxMDAwICogQ09NVElDSywgeCAqIHJhdGUpIC0gMTAwMDsNCiEgICBpZiAoZXJyIDwg
MCkNCiEgICAgIGVyciA9IC1lcnI7DQohICAgaWYgKGVyciA+IFNQRUVEX1RPTEVSQU5DRSkNCiEg
ICAgIHJldHVybiAtMTsNCiEgI3VuZGVmIGRpdnJuZA0KISAgIHJldHVybiB4Ow0KISB9DQohIA0K
ISANCiEgc3RhdGljIGludA0KISBkb3Nfc2V0YmF1ZHJhdGUgKHNjYiwgcmF0ZSkNCiEgICAgICBz
ZXJpYWxfdCBzY2I7DQohICAgICAgaW50IHJhdGU7DQohIHsNCiEgICAgIHN0cnVjdCBkb3NfdHR5
c3RhdGUgKnBvcnQgPSAmcG9ydHNbc2NiLT5mZF07DQohIA0KISAgICAgaWYgKHBvcnQtPmJhdWRy
YXRlICE9IHJhdGUpIA0KISAgICAgICB7DQohIAlpbnQgeDsNCiEgCXVuc2lnbmVkIGNoYXIgY2Zj
cjsNCiEgDQohIAl4ID0gZG9zX2JhdWRjb252IChyYXRlKTsNCiEgCWlmICh4IDw9IDApDQohIAkg
IHsNCiEgCSAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRlcnIsICIlZDogaW1wb3NzaWJs
ZSBiYXVkcmF0ZVxuIiwgcmF0ZSk7DQohIAkgICAgZXJybm8gPSBFSU5WQUw7DQohIAkgICAgcmV0
dXJuIC0xOw0KISAJICB9DQohIA0KISAJZGlzYWJsZSAoKTsNCiEgCWNmY3IgPSBpbmIgKHBvcnQs
IGNvbV9jZmNyKTsNCiEgDQohIAlvdXRiKHBvcnQsIGNvbV9jZmNyLCBDRkNSX0RMQUIpOw0KISAJ
b3V0Yihwb3J0LCBjb21fZGxibCwgeCAmIDB4ZmYpOw0KISAJb3V0Yihwb3J0LCBjb21fZGxiaCwg
eCA+PiA4KTsNCiEgCW91dGIocG9ydCwgY29tX2NmY3IsIGNmY3IpOw0KISAJcG9ydC0+YmF1ZHJh
dGUgPSByYXRlOw0KISAJZW5hYmxlICgpOw0KISAgICAgICB9DQohIA0KISAgICAgcmV0dXJuIDA7
DQohIH0NCiEgDQohIHN0YXRpYyBpbnQNCiEgZG9zX3NldHN0b3BiaXRzIChzY2IsIG51bSkNCiEg
ICAgICBzZXJpYWxfdCBzY2I7DQohICAgICAgaW50IG51bTsNCiEgew0KISAgICAgc3RydWN0IGRv
c190dHlzdGF0ZSAqcG9ydCA9ICZwb3J0c1tzY2ItPmZkXTsNCiEgICAgIHVuc2lnbmVkIGNoYXIg
Y2ZjcjsNCiEgDQohICAgICBkaXNhYmxlICgpOw0KISAgICAgY2ZjciA9IGluYiAocG9ydCwgY29t
X2NmY3IpOw0KISANCiEgICAgIHN3aXRjaCAobnVtKQ0KISAgICAgICB7DQohICAgICAgIGNhc2Ug
U0VSSUFMXzFfU1RPUEJJVFM6DQohIAlvdXRiIChwb3J0LCBjb21fY2ZjciwgY2ZjciAmIH5DRkNS
X1NUT1BCKTsNCiEgCWJyZWFrOw0KISAgICAgICBjYXNlIFNFUklBTF8xX0FORF9BX0hBTEZfU1RP
UEJJVFM6DQohICAgICAgIGNhc2UgU0VSSUFMXzJfU1RPUEJJVFM6DQohIAlvdXRiIChwb3J0LCBj
b21fY2ZjciwgY2ZjciB8IENGQ1JfU1RPUEIpOw0KISAJYnJlYWs7DQohICAgICAgIGRlZmF1bHQ6
DQohIAllbmFibGUgKCk7DQohIAlyZXR1cm4gMTsNCiEgICAgICAgfQ0KISAgICAgZW5hYmxlICgp
Ow0KISANCiEgICAgIHJldHVybiAwOw0KISB9DQohIA0KISBzdGF0aWMgaW50DQohIGRvc193cml0
ZSAoc2NiLCBzdHIsIGxlbikNCiEgICAgICBzZXJpYWxfdCBzY2I7DQohICAgICAgY29uc3QgY2hh
ciAqc3RyOw0KISAgICAgIGludCBsZW47DQohIHsNCiEgICB2b2xhdGlsZSBzdHJ1Y3QgZG9zX3R0
eXN0YXRlICpwb3J0ID0gJnBvcnRzW3NjYi0+ZmRdOw0KISAgIGludCBmaWZvc2l6ZSA9IHBvcnQt
PmZpZm8gPyAxNiA6IDE7DQohICAgbG9uZyB0aGVuOw0KISAgIGludCBjbnQ7DQohIA0KISAgICB3
aGlsZSAobGVuID4gMCkgDQohICAgICAgew0KISAJLyogc2VuZCB0aGUgZGF0YSwgZmlmb3NpemUg
Ynl0ZXMgYXQgYSB0aW1lICovDQohIAljbnQgPSBmaWZvc2l6ZSA+IGxlbiA/IGxlbiA6IGZpZm9z
aXplOw0KISAJcG9ydC0+dHhidXN5ID0gMTsNCiEgCW91dHBvcnRzYiAocG9ydC0+YmFzZSArIGNv
bV9kYXRhLCBzdHIsIGNudCk7DQohIAlzdHIgKz0gY250Ow0KISAJbGVuIC09IGNudDsNCiEgI2lm
ZGVmIERPU19TVEFUUw0KISAJY250c1tDTlRfVFhdICs9IGNudDsNCiEgI2VuZGlmDQohIAkvKiB3
YWl0IGZvciB0cmFuc21pc3Npb24gdG8gY29tcGxldGUgKG1heCAxIHNlYykgKi8NCiEgCXRoZW4g
PSByYXdjbG9jaygpICsgUkFXSFo7DQohIAl3aGlsZSAocG9ydC0+dHhidXN5KQ0KISAJICB7DQoh
IAkgICAgaWYgKChyYXdjbG9jayAoKSAtIHRoZW4pID49IDApDQohIAkgICAgICB7DQohIAkJICBl
cnJubyA9IEVJTzsNCiEgCQkgIHJldHVybiBTRVJJQUxfRVJST1I7DQohIAkgICAgICB9DQohIAkg
IH0NCiEgICAgIH0NCiEgICByZXR1cm4gMDsNCiEgfQ0KISANCiEgDQohIHN0YXRpYyBpbnQNCiEg
ZG9zX3NlbmRicmVhayAoc2NiKQ0KISAgICAgIHNlcmlhbF90IHNjYjsNCiEgew0KISAgIHZvbGF0
aWxlIHN0cnVjdCBkb3NfdHR5c3RhdGUgKnBvcnQgPSAmcG9ydHNbc2NiLT5mZF07DQohICAgdW5z
aWduZWQgY2hhciBjZmNyOw0KISAgIGxvbmcgdGhlbjsNCiEgDQohICAgY2ZjciA9IGluYihwb3J0
LCBjb21fY2Zjcik7DQohICAgb3V0Yihwb3J0LCBjb21fY2ZjciwgY2ZjciB8IENGQ1JfU0JSRUFL
KTsNCiEgDQohICAgLyogMC4yNSBzZWMgZGVsYXkgKi8NCiEgICB0aGVuID0gcmF3Y2xvY2sgKCkg
KyBSQVdIWiAvIDQ7DQohICAgd2hpbGUgKChyYXdjbG9jayAoKSAtIHRoZW4pIDwgMCkNCiEgICAg
IGNvbnRpbnVlOw0KISANCiEgICBvdXRiKHBvcnQsIGNvbV9jZmNyLCBjZmNyKTsNCiEgICByZXR1
cm4gMDsNCiEgfQ0KISANCiEgDQohIHN0YXRpYyBzdHJ1Y3Qgc2VyaWFsX29wcyBkb3Nfb3BzID0N
CiEgew0KISAgICJoYXJkd2lyZSIsDQohICAgMCwNCiEgICBkb3Nfb3BlbiwNCiEgICBkb3NfY2xv
c2UsDQohICAgZG9zX3JlYWRjaGFyLA0KISAgIGRvc193cml0ZSwNCiEgICBkb3Nfbm9vcCwJCQkv
KiBmbHVzaCBvdXRwdXQgKi8NCiEgICBkb3NfZmx1c2hfaW5wdXQsDQohICAgZG9zX3NlbmRicmVh
aywNCiEgICBkb3NfcmF3LA0KISAgIGRvc19nZXRfdHR5X3N0YXRlLA0KISAgIGRvc19zZXRfdHR5
X3N0YXRlLA0KISAgIGRvc19wcmludF90dHlfc3RhdGUsDQohICAgZG9zX25vZmx1c2hfc2V0X3R0
eV9zdGF0ZSwNCiEgICBkb3Nfc2V0YmF1ZHJhdGUsDQohICAgZG9zX3NldHN0b3BiaXRzLA0KISB9
Ow0KISANCiEgDQohIHN0YXRpYyB2b2lkDQohIGRvc19pbmZvIChhcmcsIGZyb21fdHR5KQ0KISAg
ICAgIGNoYXIgKmFyZzsNCiEgICAgICBpbnQgZnJvbV90dHk7DQohIHsNCiEgICBzdHJ1Y3QgZG9z
X3R0eXN0YXRlICpwb3J0Ow0KISAgIGludCBpOw0KISANCiEgICBmb3IgKHBvcnQgPSBwb3J0czsg
cG9ydCA8ICZwb3J0c1s0XTsgcG9ydCsrKSANCiEgICAgIHsNCiEgICAgICAgaWYgKHBvcnQtPmJh
dWRyYXRlID09IDApDQohIAljb250aW51ZTsNCiEgICAgICAgcHJpbnRmX2ZpbHRlcmVkICgiUG9y
dDpcdENPTSVkICglc2FjdGl2ZSlcbiIsIHBvcnQgLSBwb3J0cyArIDEsDQohIAkJICAgICAgIHBv
cnQtPmludHJ1cHQgPyAiIiA6ICJub3QgIik7DQohICAgICAgIHByaW50Zl9maWx0ZXJlZCAoIkFk
ZHI6XHQweCUwM3ggKGlycSAlZClcbiIsIHBvcnQtPmJhc2UsIHBvcnQtPmlycSk7DQohICAgICAg
IHByaW50Zl9maWx0ZXJlZCAoIjE2NTUwOlx0JXNcbiIsIHBvcnQtPmZpZm8gPyAieWVzIiA6ICJu
byIpOw0KISAgICAgICBwcmludGZfZmlsdGVyZWQgKCJTcGVlZDpcdCVkIGJhdWRcbiIsIHBvcnQt
PmJhdWRyYXRlKTsNCiEgICAgICAgcHJpbnRmX2ZpbHRlcmVkICgiRXJyczpcdGZyYW1pbmcgJWQg
cGFyaXR5ICVkIG92ZXJmbG93ICVkXG5cbiIsIA0KISAJCSAgICAgICBwb3J0LT5mZXJyLCBwb3J0
LT5wZXJyLCBwb3J0LT5vZmxvKTsNCiEgICAgIH0NCiEgDQohICNpZmRlZiBET1NfU1RBVFMNCiEg
ICBwcmludGZfZmlsdGVyZWQgKCJcblRvdGFsIGludGVycnVwdHM6ICVkXG4iLCBpbnRyY250KTsN
CiEgICBmb3IgKGkgPSAwOyBpIDwgTkNOVDsgaSsrKQ0KISAgICAgaWYgKGNudHNbaV0pDQohICAg
ICAgIHByaW50Zl9maWx0ZXJlZCAoIiVzOlx0JWRcbiIsIGNudG5hbWVzW2ldLCBjbnRzW2ldKTsN
CiEgI2VuZGlmDQohIH0NCiEgDQohIA0KISB2b2lkDQohIF9pbml0aWFsaXplX3Nlcl9kb3MgKCkN
CiEgew0KISAgIHN0cnVjdCBjbWRfbGlzdF9lbGVtZW50ICpjOw0KISANCiEgICBzZXJpYWxfYWRk
X2ludGVyZmFjZSAoJmRvc19vcHMpOw0KISANCiEgICAvKiBTYXZlIG9yaWdpbmFsIGludGVycnVw
dCBtYXNrIHJlZ2lzdGVyLiAqLw0KISAgIGljdV9vbGRtYXNrID0gaW5wb3J0YiAoSUNVX01BU0sp
Ow0KISANCiEgICAvKiBNYXJrIGZpeGVkIG1vdGhlcmJvYXJkIGlycXMgYXMgaW51c2UuICovDQoh
ICAgaW50cnVwdHNbMF0uaW51c2UgPQkJLyogdGltZXIgdGljayAqLw0KISAgICAgaW50cnVwdHNb
MV0uaW51c2UgPQkJLyoga2V5Ym9hcmQgKi8NCiEgICAgICAgaW50cnVwdHNbMl0uaW51c2UgPSAx
OwkvKiBzbGF2ZSBpY3UgKi8NCiEgICAgIA0KISAgIGFkZF9zaG93X2Zyb21fc2V0ICgNCiEgICAg
IGFkZF9zZXRfY21kICgiY29tMWJhc2UiLCBjbGFzc19vYnNjdXJlLCB2YXJfemludGVnZXIsDQoh
IAkJIChjaGFyICopICZwb3J0c1swXS5iYXNlLA0KISAJCSAiU2V0IENPTTEgYmFzZSBpL28gcG9y
dCBhZGRyZXNzLiIsDQohIAkJICZzZXRsaXN0KSwNCiEgCSZzaG93bGlzdCk7DQohIA0KISAgIGFk
ZF9zaG93X2Zyb21fc2V0ICgNCiEgICAgIGFkZF9zZXRfY21kICgiY29tMWlycSIsIGNsYXNzX29i
c2N1cmUsIHZhcl96aW50ZWdlciwNCiEgCQkgKGNoYXIgKikgJnBvcnRzWzBdLmlycSwNCiEgCQkg
IlNldCBDT00xIGludGVycnVwdCByZXF1ZXN0LiIsDQohIAkJICZzZXRsaXN0KSwNCiEgCSZzaG93
bGlzdCk7DQohIA0KISAgIGFkZF9zaG93X2Zyb21fc2V0ICgNCiEgICAgIGFkZF9zZXRfY21kICgi
Y29tMmJhc2UiLCBjbGFzc19vYnNjdXJlLCB2YXJfemludGVnZXIsDQohIAkJIChjaGFyICopICZw
b3J0c1sxXS5iYXNlLA0KISAJCSAiU2V0IENPTTIgYmFzZSBpL28gcG9ydCBhZGRyZXNzLiIsDQoh
IAkJICZzZXRsaXN0KSwNCiEgCSZzaG93bGlzdCk7DQohIA0KISAgIGFkZF9zaG93X2Zyb21fc2V0
ICgNCiEgICAgIGFkZF9zZXRfY21kICgiY29tMmlycSIsIGNsYXNzX29ic2N1cmUsIHZhcl96aW50
ZWdlciwNCiEgCQkgKGNoYXIgKikgJnBvcnRzWzFdLmlycSwNCiEgCQkgIlNldCBDT00yIGludGVy
cnVwdCByZXF1ZXN0LiIsDQohIAkJICZzZXRsaXN0KSwNCiEgCSZzaG93bGlzdCk7DQohIA0KISAg
IGFkZF9zaG93X2Zyb21fc2V0ICgNCiEgICAgIGFkZF9zZXRfY21kICgiY29tM2Jhc2UiLCBjbGFz
c19vYnNjdXJlLCB2YXJfemludGVnZXIsDQohIAkJIChjaGFyICopICZwb3J0c1syXS5iYXNlLA0K
ISAJCSAiU2V0IENPTTMgYmFzZSBpL28gcG9ydCBhZGRyZXNzLiIsDQohIAkJICZzZXRsaXN0KSwN
CiEgCSZzaG93bGlzdCk7DQohIA0KISAgIGFkZF9zaG93X2Zyb21fc2V0ICgNCiEgICAgIGFkZF9z
ZXRfY21kICgiY29tM2lycSIsIGNsYXNzX29ic2N1cmUsIHZhcl96aW50ZWdlciwNCiEgCQkgKGNo
YXIgKikgJnBvcnRzWzJdLmlycSwNCiEgCQkgIlNldCBDT00zIGludGVycnVwdCByZXF1ZXN0LiIs
DQohIAkJICZzZXRsaXN0KSwNCiEgCSZzaG93bGlzdCk7DQohIA0KISAgIGFkZF9zaG93X2Zyb21f
c2V0ICgNCiEgICAgIGFkZF9zZXRfY21kICgiY29tNGJhc2UiLCBjbGFzc19vYnNjdXJlLCB2YXJf
emludGVnZXIsDQohIAkJIChjaGFyICopICZwb3J0c1szXS5iYXNlLA0KISAJCSAiU2V0IENPTTQg
YmFzZSBpL28gcG9ydCBhZGRyZXNzLiIsDQohIAkJICZzZXRsaXN0KSwNCiEgCSZzaG93bGlzdCk7
DQohIA0KISAgIGFkZF9zaG93X2Zyb21fc2V0ICgNCiEgICAgIGFkZF9zZXRfY21kICgiY29tNGly
cSIsIGNsYXNzX29ic2N1cmUsIHZhcl96aW50ZWdlciwNCiEgCQkgKGNoYXIgKikgJnBvcnRzWzNd
LmlycSwNCiEgCQkgIlNldCBDT000IGludGVycnVwdCByZXF1ZXN0LiIsDQohIAkJICZzZXRsaXN0
KSwNCiEgCSZzaG93bGlzdCk7DQohIA0KISAgIGFkZF9pbmZvICgic2VyaWFsIiwgZG9zX2luZm8s
DQohIAkgICAgIlByaW50IERPUyBzZXJpYWwgcG9ydCBzdGF0dXMuIik7DQohIH0NCkluZGV4OiBn
ZGIvc291cmNlLmMNCmRpZmYgLWMgZ2RiL3NvdXJjZS5jOjEuMS4xLjEgZ2RiL3NvdXJjZS5jOjEu
Mg0KKioqIGdkYi9zb3VyY2UuYzoxLjEuMS4xCUZyaSBEZWMgMDQgMTA6NTE6MDggMTk5OA0KLS0t
IGdkYi9zb3VyY2UuYwlXZWQgRGVjIDIzIDE2OjUzOjA2IDE5OTgNCioqKioqKioqKioqKioqKg0K
KioqIDQ5Myw0OTkgKioqKg0KICAgIGlmICghcGF0aCkNCiAgICAgIHBhdGggPSAiLiI7DQogIA0K
ISAjaWZkZWYgV0lOMzINCiAgICBtb2RlIHw9IE9fQklOQVJZOw0KICAjZW5kaWYNCiAgDQotLS0g
NDkzLDQ5OSAtLS0tDQogICAgaWYgKCFwYXRoKQ0KICAgICAgcGF0aCA9ICIuIjsNCiAgDQohICNp
ZiBkZWZpbmVkIChXSU4zMikgfHwgZGVmaW5lZChfX01TRE9TX18pDQogICAgbW9kZSB8PSBPX0JJ
TkFSWTsNCiAgI2VuZGlmDQogIA0KSW5kZXg6IGdkYi9zdGFic3JlYS5jDQpkaWZmIC1jIGdkYi9z
dGFic3JlYS5jOjEuMS4xLjEgZ2RiL3N0YWJzcmVhLmM6MS4zDQoqKiogZ2RiL3N0YWJzcmVhLmM6
MS4xLjEuMQlGcmkgRGVjIDA0IDEwOjUxOjA4IDE5OTgNCi0tLSBnZGIvc3RhYnNyZWEuYwlXZWQg
RGVjIDIzIDE2OjUzOjA2IDE5OTgNCioqKioqKioqKioqKioqKg0KKioqIDExMDMsMTEwOCAqKioq
DQotLS0gMTEwMywxMTEzIC0tLS0NCiAgDQogIAkJIEZvcnR1bmF0ZWx5LCB0aGlzIGNoZWNrIHNl
ZW1zIG5vdCB0byBiZSBuZWNlc3NhcnkNCiAgCQkgZm9yIGFueXRoaW5nIGV4Y2VwdCBwb2ludGVy
cyBvciBmdW5jdGlvbnMuICAqLw0KKyAJCWlmICgoVFlQRV9DT0RFIChTWU1CT0xfVFlQRSAoc3lt
KSkgPT0gVFlQRV9DT0RFX1BUUikgJiYNCisgICAgICAgICAgICAgICAgICAgIChjdXJyZW50X3N1
YmZpbGUtPmxhbmd1YWdlID09IGxhbmd1YWdlX3Bhc2NhbCkpDQorICAgICAgICAgICAgICAgICAg
ICB7DQorICAgICAgICAgICAgICAgICAgICAgVFlQRV9OQU1FIChTWU1CT0xfVFlQRSAoc3ltKSkg
PSBTWU1CT0xfTkFNRSAoc3ltKTsNCisgICAgICAgICAgICAgICAgICAgIH0NCiAgCSAgICB9DQog
IAkgIGVsc2UNCiAgCSAgICBUWVBFX05BTUUgKFNZTUJPTF9UWVBFIChzeW0pKSA9IFNZTUJPTF9O
QU1FIChzeW0pOw0KSW5kZXg6IGdkYi9zeW1maWxlLmMNCmRpZmYgLWMgZ2RiL3N5bWZpbGUuYzox
LjEuMS4xIGdkYi9zeW1maWxlLmM6MS4yDQoqKiogZ2RiL3N5bWZpbGUuYzoxLjEuMS4xCUZyaSBE
ZWMgMDQgMTA6NTE6MDggMTk5OA0KLS0tIGdkYi9zeW1maWxlLmMJRnJpIERlYyAwNCAxMTozMTo1
MiAxOTk4DQoqKioqKioqKioqKioqKioNCioqKiAxMzEzLDEzMTggKioqKg0KLS0tIDEzMTMsMTMy
MSAtLS0tDQogICAgZWxzZSBpZiAoU1RSRVEgKGMsICIuY2MiKSB8fCBTVFJFUSAoYywgIi5DIikg
fHwgU1RSRVEgKGMsICIuY3h4IikNCiAgCSAgIHx8IFNUUkVRIChjLCAiLmNwcCIpIHx8IFNUUkVR
IChjLCAiLmNwIikgfHwgU1RSRVEgKGMsICIuYysrIikpDQogICAgICByZXR1cm4gbGFuZ3VhZ2Vf
Y3BsdXM7DQorICAgZWxzZSBpZiAoU1RSRVEgKGMsICIucGFzIikgfHwgU1RSRVEgKGMsICIucCIp
IHx8IFNUUkVRIChjLCAiLnBwIikNCisgCSAgIHx8IFNUUkVRIChjLCAiLnBwaSIpIHx8IFNUUkVR
IChjLCAiLmluYyIpKQ0KKyAgICAgcmV0dXJuIGxhbmd1YWdlX3Bhc2NhbDsNCiAgICBlbHNlIGlm
IChTVFJFUSAoYywgIi5jaCIpIHx8IFNUUkVRIChjLCAiLmMxODYiKSB8fCBTVFJFUSAoYywgIi5j
Mjg2IikpDQogICAgICByZXR1cm4gbGFuZ3VhZ2VfY2hpbGw7DQogICAgZWxzZSBpZiAoU1RSRVEg
KGMsICIuZiIpIHx8IFNUUkVRIChjLCAiLkYiKSkNCkluZGV4OiBnZGIvdG0uaA0KZGlmZiAtYyBn
ZGIvdG0uaDoxLjEuMS4xIGdkYi90bS5oOjEuMg0KKioqIGdkYi90bS5oOjEuMS4xLjEJRnJpIERl
YyAwNCAxMDo1MTowOCAxOTk4DQotLS0gZ2RiL3RtLmgJV2VkIERlYyAyMyAxNjo1MzowNiAxOTk4
DQoqKioqKioqKioqKioqKioNCioqKiAxLDcgKioqKg0KISAjaW5jbHVkZSA8aTM4Ni90bS1pMzg2
di5oPg0NCiEgDQ0KISAjZGVmaW5lIERJUk5BTUVfU0VQQVJBVE9SICc7Jw0NCiEgI2RlZmluZSBT
TEFTSF9QKFgpICgoWCk9PScvJyB8fCAoWCk9PSdcXCcpDQ0KISAjZGVmaW5lIFNMQVNIX0NIQVIg
Jy8nDQ0KISAjZGVmaW5lIFNMQVNIX1NUUklORyAiLyINDQohICNkZWZpbmUgUk9PVEVEX1AoWCkg
KFNMQVNIX1AoKFgpWzBdKSB8fCAoKFgpWzBdICYmIChYKVsxXSA9PSAnOicpKQ0NCi0tLSAxLDE0
IC0tLS0NCiEgI2luY2x1ZGUgImRiZ2NvbS5oIg0KISAjaW5jbHVkZSA8aTM4Ni90bS1pMzg2di5o
Pg0KISANCiEgI2RlZmluZSBGTE9BVF9JTkZPIHtwcmludF8zODdfY29udHJvbF93b3JkKGZwdWUu
Y29udHJvbCk7IFwNCiEgICAgICAgICBwcmludF8zODdfc3RhdHVzX3dvcmQgKGZwdWUuc3RhdHVz
KTtcDQohICAgICAgICAgfQ0KISANCiEgI2RlZmluZSBESVJOQU1FX1NFUEFSQVRPUiAnOycNCiEg
I2RlZmluZSBTTEFTSF9QKFgpICgoWCk9PScvJyB8fCAoWCk9PSdcXCcpDQohICNkZWZpbmUgU0xB
U0hfQ0hBUiAnLycNCiEgI2RlZmluZSBTTEFTSF9TVFJJTkcgIi8iDQohICNkZWZpbmUgUk9PVEVE
X1AoWCkgKFNMQVNIX1AoKFgpWzBdKSB8fCAoKFgpWzBdICYmIChYKVsxXSA9PSAnOicpKQ0KISAN
CiEgDQpJbmRleDogZ2RiL3V0aWxzLmMNCmRpZmYgLWMgZ2RiL3V0aWxzLmM6MS4xLjEuMSBnZGIv
dXRpbHMuYzoxLjINCioqKiBnZGIvdXRpbHMuYzoxLjEuMS4xCUZyaSBEZWMgMDQgMTA6NTE6MDgg
MTk5OA0KLS0tIGdkYi91dGlscy5jCUZyaSBEZWMgMDQgMTE6MzE6NTQgMTk5OA0KKioqKioqKioq
KioqKioqDQoqKiogMTc4MywxNzg4ICoqKioNCi0tLSAxNzgzLDE3ODkgLS0tLQ0KICAJew0KICAJ
ICBzd2l0Y2ggKGxhbmcpDQogIAkgICAgew0KKyAJICAgIGNhc2UgbGFuZ3VhZ2VfcGFzY2FsOg0K
ICAJICAgIGNhc2UgbGFuZ3VhZ2VfY3BsdXM6DQogIAkgICAgICBkZW1hbmdsZWQgPSBjcGx1c19k
ZW1hbmdsZSAobmFtZSwgYXJnX21vZGUpOw0KICAJICAgICAgYnJlYWs7DQpJbmRleDogZ2RiL3Zh
bGFyaXRoLmMNCmRpZmYgLWMgZ2RiL3ZhbGFyaXRoLmM6MS4xLjEuMSBnZGIvdmFsYXJpdGguYzox
LjINCioqKiBnZGIvdmFsYXJpdGguYzoxLjEuMS4xCUZyaSBEZWMgMDQgMTA6NTE6MDggMTk5OA0K
LS0tIGdkYi92YWxhcml0aC5jCVdlZCBEZWMgMjMgMTY6NTM6MDYgMTk5OA0KKioqKioqKioqKioq
KioqDQoqKiogNzc5LDc4NCAqKioqDQotLS0gNzc5LDc4NSAtLS0tDQogIAkgICAgICBicmVhazsN
CiAgCSAgICAgIA0KICAJICAgIGNhc2UgQklOT1BfRElWOg0KKyAJICAgIGNhc2UgQklOT1BfSU5U
RElWOg0KICAJICAgICAgdiA9IHYxIC8gdjI7DQogIAkgICAgICBicmVhazsNCiAgCSAgICAgIA0K
KioqKioqKioqKioqKioqDQoqKiogODkzLDg5OCAqKioqDQotLS0gODk0LDkwMCAtLS0tDQogIAkg
ICAgICBicmVhazsNCiAgCSAgICAgIA0KICAJICAgIGNhc2UgQklOT1BfRElWOg0KKyAJICAgIGNh
c2UgQklOT1BfSU5URElWOg0KICAJICAgICAgdiA9IHYxIC8gdjI7DQogIAkgICAgICBicmVhazsN
CiAgCSAgICAgIA0KSW5kZXg6IGdkYi92YWxvcHMuYw0KZGlmZiAtYyBnZGIvdmFsb3BzLmM6MS4x
LjEuMSBnZGIvdmFsb3BzLmM6MS4yDQoqKiogZ2RiL3ZhbG9wcy5jOjEuMS4xLjEJRnJpIERlYyAw
NCAxMDo1MTowOCAxOTk4DQotLS0gZ2RiL3ZhbG9wcy5jCVdlZCBEZWMgMjMgMTY6NTM6MDYgMTk5
OA0KKioqKioqKioqKioqKioqDQoqKiogMzIsMzcgKioqKg0KLS0tIDMyLDQwIC0tLS0NCiAgI2lu
Y2x1ZGUgPGVycm5vLmg+DQogICNpbmNsdWRlICJnZGJfc3RyaW5nLmgiDQogIA0KKyAjaWZkZWYg
b3RoZXJfc2VsDQorICNpbmNsdWRlICJ2YWxwcmludC5oIg0KKyAjZW5kaWYNCiAgLyogRGVmYXVs
dCB0byBjb2VyY2luZyBmbG9hdCB0byBkb3VibGUgaW4gZnVuY3Rpb24gY2FsbHMgb25seSB3aGVu
IHRoZXJlIGlzDQogICAgIG5vIHByb3RvdHlwZS4gIE90aGVyd2lzZSBvbiB0YXJnZXRzIHdoZXJl
IHRoZSBkZWJ1ZyBpbmZvcm1hdGlvbiBpcyBpbmNvcnJlY3QNCiAgICAgZm9yIGVpdGhlciB0aGUg
cHJvdG90eXBlIG9yIG5vbi1wcm90b3R5cGUgY2FzZSwgd2UgY2FuIGZvcmNlIGl0IGJ5IGRlZmlu
aW5nDQoqKioqKioqKioqKioqKioNCioqKiAzNDgsMzU1ICoqKioNCiAgDQogICAgdmFsID0gYWxs
b2NhdGVfdmFsdWUgKHR5cGUpOw0KICANCiAgICByZWFkX21lbW9yeSAoYWRkciwgVkFMVUVfQ09O
VEVOVFNfUkFXICh2YWwpLCBUWVBFX0xFTkdUSCAodHlwZSkpOw0KISANCiAgICBWQUxVRV9MVkFM
ICh2YWwpID0gbHZhbF9tZW1vcnk7DQogICAgVkFMVUVfQUREUkVTUyAodmFsKSA9IGFkZHI7DQog
IA0KLS0tIDM1MSwzNjQgLS0tLQ0KICANCiAgICB2YWwgPSBhbGxvY2F0ZV92YWx1ZSAodHlwZSk7
DQogIA0KKyAjaWZuZGVmIG90aGVyX3NlbA0KICAgIHJlYWRfbWVtb3J5IChhZGRyLCBWQUxVRV9D
T05URU5UU19SQVcgKHZhbCksIFRZUEVfTEVOR1RIICh0eXBlKSk7DQohICNlbHNlDQohICAgaWYg
KCF1c2Vfc2VsKQ0KISAgICAgcmVhZF9tZW1vcnkgKGFkZHIsIFZBTFVFX0NPTlRFTlRTX1JBVyAo
dmFsKSwgVFlQRV9MRU5HVEggKHR5cGUpKTsNCiEgICBlbHNlDQohICAgICByZWFkX3NlbF9hZGRy
IChhZGRyLCBWQUxVRV9DT05URU5UU19SQVcgKHZhbCksIFRZUEVfTEVOR1RIICh0eXBlKSwgbGFz
dF9zZWwpOw0KISAjZW5kaWYNCiAgICBWQUxVRV9MVkFMICh2YWwpID0gbHZhbF9tZW1vcnk7DQog
ICAgVkFMVUVfQUREUkVTUyAodmFsKSA9IGFkZHI7DQogIA0KSW5kZXg6IGdkYi92YWxwcmludC5o
DQpkaWZmIC1jIGdkYi92YWxwcmludC5oOjEuMS4xLjEgZ2RiL3ZhbHByaW50Lmg6MS4yDQoqKiog
Z2RiL3ZhbHByaW50Lmg6MS4xLjEuMQlGcmkgRGVjIDA0IDEwOjUxOjA4IDE5OTgNCi0tLSBnZGIv
dmFscHJpbnQuaAlXZWQgRGVjIDIzIDE2OjUzOjA2IDE5OTgNCioqKioqKioqKioqKioqKg0KKioq
IDI5LDM0ICoqKioNCi0tLSAyOSw0MSAtLS0tDQogIGV4dGVybiBpbnQgb2JqZWN0cHJpbnQ7CQkv
KiBDb250cm9scyBsb29raW5nIHVwIGFuIG9iamVjdCdzIGRlcml2ZWQgdHlwZQ0KICAJCQkJICAg
dXNpbmcgd2hhdCB3ZSBmaW5kIGluIGl0cyB2dGFibGVzLiAgKi8NCiAgDQorICNpZmRlZiBvdGhl
cl9zZWwNCisgDQorIGV4dGVybiBpbnQgdXNlX3NlbDsNCisgZXh0ZXJuIGludCBsYXN0X3NlbDsN
CisgDQorICNlbmRpZiAvKiBvdGhlcl9zZWwgKi8NCisgDQogIGV4dGVybiB1bnNpZ25lZCBpbnQg
cHJpbnRfbWF4OwkvKiBNYXggIyBvZiBjaGFycyBmb3Igc3RyaW5ncy92ZWN0b3JzICovDQogIA0K
ICBleHRlcm4gaW50IG91dHB1dF9mb3JtYXQ7DQpJbmRleDogZ2RiL3ZlcnNpb24uYw0KZGlmZiAt
YyBnZGIvdmVyc2lvbi5jOjEuMS4xLjEgZ2RiL3ZlcnNpb24uYzpyZW1vdmVkDQoqKiogZ2RiL3Zl
cnNpb24uYzoxLjEuMS4xCUZyaSBEZWMgMDQgMTA6NTE6MDggMTk5OA0KLS0tIGdkYi92ZXJzaW9u
LmMJV2VkIERlYyAyMyAxNzowMjoxOCAxOTk4DQoqKioqKioqKioqKioqKioNCioqKiAxLDMgKioq
Kg0KLSBjaGFyICp2ZXJzaW9uID0gIjQuMTYiOw0KLSBjaGFyICpob3N0X25hbWUgPSAiZ28zMiI7
DQotIGNoYXIgKnRhcmdldF9uYW1lID0gImdvMzIiOw0KLS0tIDAgLS0tLQ0KSW5kZXg6IGdkYi92
ZXJzaW9uLnRtcA0KZGlmZiAtYyBnZGIvdmVyc2lvbi50bXA6MS4xLjEuMSBnZGIvdmVyc2lvbi50
bXA6MS4yDQoqKiogZ2RiL3ZlcnNpb24udG1wOjEuMS4xLjEJRnJpIERlYyAwNCAxMDo1MTowOCAx
OTk4DQotLS0gZ2RiL3ZlcnNpb24udG1wCVdlZCBEZWMgMjMgMTY6NTM6MDYgMTk5OA0KKioqKioq
KioqKioqKioqDQoqKiogMSwzICoqKioNCiEgY2hhciAqdmVyc2lvbiA9ICI0LjE2IjsNDQohIGNo
YXIgKmhvc3RfbmFtZSA9ICJnbzMyIjsNDQohIGNoYXIgKnRhcmdldF9uYW1lID0gImdvMzIiOw0N
Ci0tLSAxLDMgLS0tLQ0KISBjaGFyICp2ZXJzaW9uID0gIjQuMTYiOw0KISBjaGFyICpob3N0X25h
bWUgPSAiZ28zMiI7DQohIGNoYXIgKnRhcmdldF9uYW1lID0gImdvMzIiOw0KSW5kZXg6IGdkYi94
bS5oDQpkaWZmIC1jIGdkYi94bS5oOjEuMS4xLjEgZ2RiL3htLmg6MS4yDQoqKiogZ2RiL3htLmg6
MS4xLjEuMQlGcmkgRGVjIDA0IDEwOjUxOjA4IDE5OTgNCi0tLSBnZGIveG0uaAlXZWQgRGVjIDIz
IDE2OjUzOjA2IDE5OTgNCioqKioqKioqKioqKioqKg0KKioqIDEsMiAqKioqDQohICNpbmNsdWRl
IDxpMzg2L3htLWdvMzIuaD4NDQohICNpbmNsdWRlIDxsaW1pdHMuaD4NDQotLS0gMSwyIC0tLS0N
CiEgI2luY2x1ZGUgPGkzODYveG0tZ28zMi5oPg0KISAjaW5jbHVkZSA8bGltaXRzLmg+DQpJbmRl
eDogZ2RiL2NvbmZpZy9pMzg2L3RtLWkzODYuaA0KZGlmZiAtYyBnZGIvY29uZmlnL2kzODYvdG0t
aTM4Ni5oOjEuMS4xLjEgZ2RiL2NvbmZpZy9pMzg2L3RtLWkzODYuaDoxLjINCioqKiBnZGIvY29u
ZmlnL2kzODYvdG0taTM4Ni5oOjEuMS4xLjEJRnJpIERlYyAwNCAxMDo1MTowOCAxOTk4DQotLS0g
Z2RiL2NvbmZpZy9pMzg2L3RtLWkzODYuaAlXZWQgRGVjIDIzIDE2OjUzOjA4IDE5OTgNCioqKioq
KioqKioqKioqKg0KKioqIDgyLDg4ICoqKioNCiAgDQogIC8qIE51bWJlciBvZiBtYWNoaW5lIHJl
Z2lzdGVycyAqLw0KICANCiEgI2RlZmluZSBOVU1fRlJFR1MgMCAvKjgqLwkJLyogTnVtYmVyIG9m
IEZQIHJlZ3MgKi8NCiAgI2RlZmluZSBOVU1fUkVHUyAoMTYgKyBOVU1fRlJFR1MpCS8qIEJhc2lj
IGkqODYgcmVncyArIEZQIHJlZ3MgKi8NCiAgDQogIC8qIEluaXRpYWxpemVyIGZvciBhbiBhcnJh
eSBvZiBuYW1lcyBvZiByZWdpc3RlcnMuICBUaGVyZSBzaG91bGQgYmUgYXQgbGVhc3QNCi0tLSA4
Miw4OCAtLS0tDQogIA0KICAvKiBOdW1iZXIgb2YgbWFjaGluZSByZWdpc3RlcnMgKi8NCiAgDQoh
ICNkZWZpbmUgTlVNX0ZSRUdTIDggICAgIAkJLyogTnVtYmVyIG9mIEZQIHJlZ3MgKi8NCiAgI2Rl
ZmluZSBOVU1fUkVHUyAoMTYgKyBOVU1fRlJFR1MpCS8qIEJhc2ljIGkqODYgcmVncyArIEZQIHJl
Z3MgKi8NCiAgDQogIC8qIEluaXRpYWxpemVyIGZvciBhbiBhcnJheSBvZiBuYW1lcyBvZiByZWdp
c3RlcnMuICBUaGVyZSBzaG91bGQgYmUgYXQgbGVhc3QNCioqKioqKioqKioqKioqKg0KKioqIDEw
NywxNDcgKioqKg0KICAgICBidXQgZG8gc2VydmUgdG8gZ2V0IHRoZSBkZXNpcmVkIHZhbHVlcyB3
aGVuIHBhc3NlZCB0byByZWFkX3JlZ2lzdGVyLiAgKi8NCiAgDQogICNkZWZpbmUgRlBfUkVHTlVN
IDUJLyogKGVicCkgQ29udGFpbnMgYWRkcmVzcyBvZiBleGVjdXRpbmcgc3RhY2sgZnJhbWUgKi8N
CiEgI2RlZmluZSBTUF9SRUdOVU0gNAkvKiAodXNwKSBDb250YWlucyBhZGRyZXNzIG9mIHRvcCBv
ZiBzdGFjayAqLw0KICAjZGVmaW5lIFBDX1JFR05VTSA4CS8qIChlaXApIENvbnRhaW5zIHByb2dy
YW0gY291bnRlciAqLw0KICAjZGVmaW5lIFBTX1JFR05VTSA5CS8qIChwcykgIENvbnRhaW5zIHBy
b2Nlc3NvciBzdGF0dXMgKi8NCiAgDQogICNkZWZpbmUgRlAwX1JFR05VTSAxNiAgIC8qIChzdDAp
IDM4NyByZWdpc3RlciAqLw0KICAjZGVmaW5lIEZQQ19SRUdOVU0gMjUJLyogODAzODcgY29udHJv
bCByZWdpc3RlciAqLw0KICANCiAgLyogVG90YWwgYW1vdW50IG9mIHNwYWNlIG5lZWRlZCB0byBz
dG9yZSBvdXIgY29waWVzIG9mIHRoZSBtYWNoaW5lJ3MgcmVnaXN0ZXINCiAgICAgc3RhdGUsIHRo
ZSBhcnJheSBgcmVnaXN0ZXJzJy4gKi8NCiAgDQohICNkZWZpbmUgUkVHSVNURVJfQllURVMgKChO
VU1fUkVHUyAtIE5VTV9GUkVHUykqNCArIE5VTV9GUkVHUyoxMCkNCiAgDQogIC8qIEluZGV4IHdp
dGhpbiBgcmVnaXN0ZXJzJyBvZiB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgc3BhY2UgZm9yIHJlZ2lz
dGVyIE4uICovDQogIA0KICAjZGVmaW5lIFJFR0lTVEVSX0JZVEUoTikgXA0KISAgICgoKE4pIDwg
RlAwX1JFR05VTSkgPyAoKE4pICogNCkgOiAoKCgoTikgLSBGUDBfUkVHTlVNKSAqIDEwKSArIDY0
KSkNCiAgIA0KICAvKiBOdW1iZXIgb2YgYnl0ZXMgb2Ygc3RvcmFnZSBpbiB0aGUgYWN0dWFsIG1h
Y2hpbmUgcmVwcmVzZW50YXRpb24gZm9yDQogICAgIHJlZ2lzdGVyIE4uICBBbGwgcmVnaXN0ZXJz
IGFyZSA0IGJ5dGVzLCBleGNlcHQgMzg3IHN0KDApIC0gc3QoNyksDQogICAgIHdoaWNoIGFyZSA4
MCBiaXRzIGVhY2guICovDQogIA0KISAjZGVmaW5lIFJFR0lTVEVSX1JBV19TSVpFKE4pICgoKE4p
IDwgRlAwX1JFR05VTSkgPyA0IDogMTApDQogIA0KICAvKiBMYXJnZXN0IHZhbHVlIFJFR0lTVEVS
X1JBV19TSVpFIGNhbiBoYXZlLiAgKi8NCiAgDQohICNkZWZpbmUgTUFYX1JFR0lTVEVSX1JBV19T
SVpFIDEwDQogIA0KICAvKiBOdW1iZXIgb2YgYnl0ZXMgb2Ygc3RvcmFnZSBpbiB0aGUgcHJvZ3Jh
bSdzIHJlcHJlc2VudGF0aW9uDQogICAgIGZvciByZWdpc3RlciBOLiAqLw0KICANCiEgI2RlZmlu
ZSBSRUdJU1RFUl9WSVJUVUFMX1NJWkUoTikgKCgoTikgPCBGUDBfUkVHTlVNKSA/IDQgOiA4KQ0K
ICANCiAgLyogTGFyZ2VzdCB2YWx1ZSBSRUdJU1RFUl9WSVJUVUFMX1NJWkUgY2FuIGhhdmUuICAq
Lw0KICANCiEgI2RlZmluZSBNQVhfUkVHSVNURVJfVklSVFVBTF9TSVpFIDgNCiAgDQogIC8qIFJl
dHVybiB0aGUgR0RCIHR5cGUgb2JqZWN0IGZvciB0aGUgInN0YW5kYXJkIiBkYXRhIHR5cGUgb2Yg
ZGF0YSBpbiANCiAgICAgcmVnaXN0ZXIgTi4gIFBlcmhhcHMgc2kgYW5kIGRpIHNob3VsZCBnbyBo
ZXJlLCBidXQgcG90ZW50aWFsbHkgdGhleQ0KLS0tIDEwNywxNTEgLS0tLQ0KICAgICBidXQgZG8g
c2VydmUgdG8gZ2V0IHRoZSBkZXNpcmVkIHZhbHVlcyB3aGVuIHBhc3NlZCB0byByZWFkX3JlZ2lz
dGVyLiAgKi8NCiAgDQogICNkZWZpbmUgRlBfUkVHTlVNIDUJLyogKGVicCkgQ29udGFpbnMgYWRk
cmVzcyBvZiBleGVjdXRpbmcgc3RhY2sgZnJhbWUgKi8NCiEgI2RlZmluZSBTUF9SRUdOVU0gNAkv
KiAoZXNwKSBDb250YWlucyBhZGRyZXNzIG9mIHRvcCBvZiBzdGFjayAqLw0KICAjZGVmaW5lIFBD
X1JFR05VTSA4CS8qIChlaXApIENvbnRhaW5zIHByb2dyYW0gY291bnRlciAqLw0KICAjZGVmaW5l
IFBTX1JFR05VTSA5CS8qIChwcykgIENvbnRhaW5zIHByb2Nlc3NvciBzdGF0dXMgKi8NCiAgDQog
ICNkZWZpbmUgRlAwX1JFR05VTSAxNiAgIC8qIChzdDApIDM4NyByZWdpc3RlciAqLw0KICAjZGVm
aW5lIEZQQ19SRUdOVU0gMjUJLyogODAzODcgY29udHJvbCByZWdpc3RlciAqLw0KICANCisgI2Rl
ZmluZSBGUFVfUkVBTF9TSVpFIDEwDQorIA0KICAvKiBUb3RhbCBhbW91bnQgb2Ygc3BhY2UgbmVl
ZGVkIHRvIHN0b3JlIG91ciBjb3BpZXMgb2YgdGhlIG1hY2hpbmUncyByZWdpc3Rlcg0KICAgICBz
dGF0ZSwgdGhlIGFycmF5IGByZWdpc3RlcnMnLiAqLw0KICANCiEgI2RlZmluZSBSRUdJU1RFUl9C
WVRFUyAoKE5VTV9SRUdTIC0gTlVNX0ZSRUdTKSo0ICsgTlVNX0ZSRUdTKkZQVV9SRUFMX1NJWkUp
DQogIA0KICAvKiBJbmRleCB3aXRoaW4gYHJlZ2lzdGVycycgb2YgdGhlIGZpcnN0IGJ5dGUgb2Yg
dGhlIHNwYWNlIGZvciByZWdpc3RlciBOLiAqLw0KICANCiAgI2RlZmluZSBSRUdJU1RFUl9CWVRF
KE4pIFwNCiEgICAoKChOKSA8IEZQMF9SRUdOVU0pID8gKChOKSAqIDQpIDogKCgoKE4pIC0gRlAw
X1JFR05VTSkgKiBGUFVfUkVBTF9TSVpFKSArIDY0KSkNCiAgIA0KICAvKiBOdW1iZXIgb2YgYnl0
ZXMgb2Ygc3RvcmFnZSBpbiB0aGUgYWN0dWFsIG1hY2hpbmUgcmVwcmVzZW50YXRpb24gZm9yDQog
ICAgIHJlZ2lzdGVyIE4uICBBbGwgcmVnaXN0ZXJzIGFyZSA0IGJ5dGVzLCBleGNlcHQgMzg3IHN0
KDApIC0gc3QoNyksDQogICAgIHdoaWNoIGFyZSA4MCBiaXRzIGVhY2guICovDQogIA0KISAjZGVm
aW5lIFJFR0lTVEVSX1JBV19TSVpFKE4pICgoKE4pIDwgRlAwX1JFR05VTSkgPyA0IDogRlBVX1JF
QUxfU0laRSkNCiAgDQogIC8qIExhcmdlc3QgdmFsdWUgUkVHSVNURVJfUkFXX1NJWkUgY2FuIGhh
dmUuICAqLw0KICANCiEgI2RlZmluZSBNQVhfUkVHSVNURVJfUkFXX1NJWkUgRlBVX1JFQUxfU0la
RQ0KICANCiAgLyogTnVtYmVyIG9mIGJ5dGVzIG9mIHN0b3JhZ2UgaW4gdGhlIHByb2dyYW0ncyBy
ZXByZXNlbnRhdGlvbg0KICAgICBmb3IgcmVnaXN0ZXIgTi4gKi8NCisgDQorICNkZWZpbmUgRlBV
UkVHX1ZJUlRVQUxfU0laRSAxMg0KICANCiEgI2RlZmluZSBSRUdJU1RFUl9WSVJUVUFMX1NJWkUo
TikgKCgoTikgPCBGUDBfUkVHTlVNKSA/IDQgOiBGUFVSRUdfVklSVFVBTF9TSVpFKQ0KICANCiAg
LyogTGFyZ2VzdCB2YWx1ZSBSRUdJU1RFUl9WSVJUVUFMX1NJWkUgY2FuIGhhdmUuICAqLw0KICAN
CiEgI2RlZmluZSBNQVhfUkVHSVNURVJfVklSVFVBTF9TSVpFIEZQVVJFR19WSVJUVUFMX1NJWkUg
DQogIA0KICAvKiBSZXR1cm4gdGhlIEdEQiB0eXBlIG9iamVjdCBmb3IgdGhlICJzdGFuZGFyZCIg
ZGF0YSB0eXBlIG9mIGRhdGEgaW4gDQogICAgIHJlZ2lzdGVyIE4uICBQZXJoYXBzIHNpIGFuZCBk
aSBzaG91bGQgZ28gaGVyZSwgYnV0IHBvdGVudGlhbGx5IHRoZXkNCioqKioqKioqKioqKioqKg0K
KioqIDE1MiwxNTggKioqKg0KICAgICA/IGxvb2t1cF9wb2ludGVyX3R5cGUgKGJ1aWx0aW5fdHlw
ZV92b2lkKSBcDQogICAgIDogKCgoTikgPCBGUDBfUkVHTlVNKSBcDQogICAgICAgID8gYnVpbHRp
bl90eXBlX2ludCBcDQohICAgICAgIDogYnVpbHRpbl90eXBlX2RvdWJsZSkpDQogIA0KICAvKiBT
dG9yZSB0aGUgYWRkcmVzcyBvZiB0aGUgcGxhY2UgaW4gd2hpY2ggdG8gY29weSB0aGUgc3RydWN0
dXJlIHRoZQ0KICAgICBzdWJyb3V0aW5lIHdpbGwgcmV0dXJuLiAgVGhpcyBpcyBjYWxsZWQgZnJv
bSBjYWxsX2Z1bmN0aW9uLiAqLw0KLS0tIDE1NiwxNjIgLS0tLQ0KICAgICA/IGxvb2t1cF9wb2lu
dGVyX3R5cGUgKGJ1aWx0aW5fdHlwZV92b2lkKSBcDQogICAgIDogKCgoTikgPCBGUDBfUkVHTlVN
KSBcDQogICAgICAgID8gYnVpbHRpbl90eXBlX2ludCBcDQohICAgICAgIDogYnVpbHRpbl90eXBl
X2xvbmdfZG91YmxlKSkNCiAgDQogIC8qIFN0b3JlIHRoZSBhZGRyZXNzIG9mIHRoZSBwbGFjZSBp
biB3aGljaCB0byBjb3B5IHRoZSBzdHJ1Y3R1cmUgdGhlDQogICAgIHN1YnJvdXRpbmUgd2lsbCBy
ZXR1cm4uICBUaGlzIGlzIGNhbGxlZCBmcm9tIGNhbGxfZnVuY3Rpb24uICovDQoqKioqKioqKioq
KioqKioNCioqKiAzMDUsMzA5ICoqKioNCi0tLSAzMDksMzQ1IC0tLS0NCiAgLyogT2Zmc2V0IGZy
b20gU1AgdG8gZmlyc3QgYXJnIG9uIHN0YWNrIGF0IGZpcnN0IGluc3RydWN0aW9uIG9mIGEgZnVu
Y3Rpb24gKi8NCiAgDQogICNkZWZpbmUgU1BfQVJHMCAoMSAqIDQpDQorIA0KKyAvKiBsb25nIGRv
dWJsZSBvbmx5IHVzZSAxMCBieXRlcw0KKyAgICBidXQgYXJlIGFsaWduZWQgdG8gMTIgYnl0ZXMg
aW4gR05VIEMNCisgICAgRlBDIHVzZXMgMTAgaW5zdGVhZCAqLw0KKyAjZGVmaW5lIEFMVEVSTkFU
RV9MT05HX0RPVUJMRV9TSVpFIDEwDQorIA0KKyAjZGVmaW5lIFJFR0lTVEVSX1ZBTElEKGkpICgg
KGkgPCAxNikgPyAxIDogZnB1ZS5pc3ZhbGlkW2ktMTZdKQ0KKyANCisgI2RlZmluZSBET19SRUdJ
U1RFUlNfSU5GTyhyZWdudW0sIGZwKSBpZiAoIWZwKSBkb19yZWdpc3RlcnNfaW5mbyhyZWdudW0s
IGZwKTsgXA0KKyAgICAgICAgIGVsc2UgeyBcDQorICAgICAgICAgaW50IGk7XA0KKyAgICAgICAg
IGludCBudW1yZWdzID0gQVJDSF9OVU1fUkVHUztcDQorICAgICAgICAgY2hhciByYXdfYnVmZmVy
W01BWF9SRUdJU1RFUl9SQVdfU0laRV07IFwNCisgICAgICAgICBjaGFyIHZpcnR1YWxfYnVmZmVy
W01BWF9SRUdJU1RFUl9WSVJUVUFMX1NJWkVdOyBcDQorICAgICAgICAgZG9fcmVnaXN0ZXJzX2lu
Zm8oLTEsMCk7IFwNCisgICAgICAgICBwcmludGZfZmlsdGVyZWQgKCJcdEZQVSBzdGFja1xuIik7
IFwNCisgICAgICAgICBmb3IgKGk9MTY7aTxudW1yZWdzO2krKykgXA0KKyAgICAgICAgICBpZiAo
KGZwdWUuaXN2YWxpZFtpLTE2XSkgJiYgKChpPT1yZWdudW0pIHx8IChyZWdudW09PS0xKSkpXA0K
KyAgICAgICAgICAgeyBpbnQgajtcDQorICAgICAgICAgICAgIGZwdXRzX2ZpbHRlcmVkIChyZWdf
bmFtZXNbaV0sIGdkYl9zdGRvdXQpO1wNCisgICAgICAgICAgICAgcHJpbnRfc3BhY2VzX2ZpbHRl
cmVkICgxNSAtIHN0cmxlbiAocmVnX25hbWVzW2ldKSwgZ2RiX3N0ZG91dCk7IFwNCisgICAgICAg
ICAgICAgcmVhZF9yZWxhdGl2ZV9yZWdpc3Rlcl9yYXdfYnl0ZXMgKGksIHJhd19idWZmZXIpOyBc
DQorIAkgICAgbWVtY3B5ICh2aXJ0dWFsX2J1ZmZlciwgcmF3X2J1ZmZlciwgXA0KKyAJICAJICAg
UkVHSVNURVJfVklSVFVBTF9TSVpFIChpKSk7IFwNCisgCSAgICB2YWxfcHJpbnQgKFJFR0lTVEVS
X1ZJUlRVQUxfVFlQRSAoaSksIHZpcnR1YWxfYnVmZmVyLCAwLFwNCisgCQkgICAgICAgZ2RiX3N0
ZG91dCwgMCwgMSwgMCwgVmFsX3ByZXR0eV9kZWZhdWx0KTtcDQorICAgICAgICAgICAgIHByaW50
Zl9maWx0ZXJlZCAoIlx0KHJhdyAweCIpOyBcDQorIAkgICAgZm9yIChqID0gMDsgaiA8IFJFR0lT
VEVSX1JBV19TSVpFIChpKTsgaisrKSBcDQorIAkgICAgICBwcmludGZfZmlsdGVyZWQgKCIlMDJ4
IiwgKHVuc2lnbmVkIGNoYXIpcmF3X2J1ZmZlcltqXSk7XA0KKyAJICAgIHByaW50Zl9maWx0ZXJl
ZCAoIilcbiIpO1wNCisgICAgICAgICAgIH0gXA0KKyAgICAgICAgIH0NCiAgDQogICNlbmRpZiAv
KiBpZm5kZWYgVE1fSTM4Nl9IICovDQpJbmRleDogZ2RiL2NvbmZpZy9pMzg2L3RtLWkzODZ2LmgN
CmRpZmYgLWMgZ2RiL2NvbmZpZy9pMzg2L3RtLWkzODZ2Lmg6MS4xLjEuMSBnZGIvY29uZmlnL2kz
ODYvdG0taTM4NnYuaDoxLjINCioqKiBnZGIvY29uZmlnL2kzODYvdG0taTM4NnYuaDoxLjEuMS4x
CUZyaSBEZWMgMDQgMTA6NTE6MDggMTk5OA0KLS0tIGdkYi9jb25maWcvaTM4Ni90bS1pMzg2di5o
CVdlZCBEZWMgMjMgMTY6NTM6MDggMTk5OA0KKioqKioqKioqKioqKioqDQoqKiogMzMsMzggKioq
Kg0KLS0tIDMzLDQwIC0tLS0NCiAgDQogIC8qIE51bWJlciBvZiBtYWNoaW5lIHJlZ2lzdGVycyAq
Lw0KICANCisgI2lmZGVmIE5PVF9VU0VfMzg3X0ZQVQ0KKyANCiAgI3VuZGVmICBOVU1fUkVHUw0K
ICAjZGVmaW5lIE5VTV9SRUdTIDE2DQogIA0KKioqKioqKioqKioqKioqDQoqKiogOTQsOTkgKioq
Kg0KLS0tIDk2LDEwMyAtLS0tDQogICNkZWZpbmUgUkVHSVNURVJfVklSVFVBTF9UWVBFKE4pIFwN
CiAgICAoKE4pID09IFBDX1JFR05VTSB8fCAoTikgPT0gRlBfUkVHTlVNIHx8IChOKSA9PSBTUF9S
RUdOVU0gPyAgICAgICAgIFwNCiAgICAgbG9va3VwX3BvaW50ZXJfdHlwZSAoYnVpbHRpbl90eXBl
X3ZvaWQpIDogYnVpbHRpbl90eXBlX2ludCkNCisgDQorICNlbmRpZiAvKiBub3QgVVNFX0ZQVSAq
Lw0KICANCiAgLyogU3RvcmUgdGhlIGFkZHJlc3Mgb2YgdGhlIHBsYWNlIGluIHdoaWNoIHRvIGNv
cHkgdGhlIHN0cnVjdHVyZSB0aGUNCiAgICAgc3Vicm91dGluZSB3aWxsIHJldHVybi4gIFRoaXMg
aXMgY2FsbGVkIGZyb20gY2FsbF9mdW5jdGlvbi4gKi8NCkluZGV4OiBnZGIvY29uZmlnL2kzODYv
eG0tZ28zMi5oDQpkaWZmIC1jIGdkYi9jb25maWcvaTM4Ni94bS1nbzMyLmg6MS4xLjEuMSBnZGIv
Y29uZmlnL2kzODYveG0tZ28zMi5oOjEuMg0KKioqIGdkYi9jb25maWcvaTM4Ni94bS1nbzMyLmg6
MS4xLjEuMQlGcmkgRGVjIDA0IDEwOjUxOjA4IDE5OTgNCi0tLSBnZGIvY29uZmlnL2kzODYveG0t
Z28zMi5oCVdlZCBEZWMgMjMgMTY6NTM6MDggMTk5OA0KKioqKioqKioqKioqKioqDQoqKiogMjEs
MjcgKioqKg0KICAjaW5jbHVkZSAiZm9wZW4tYmluLmgiDQogIA0KICAvKiBEZWZpbmUgdGhpcyBs
c2VlayhuKSAhPSBudGggYnl0ZSBvZiBmaWxlICovDQohICNkZWZpbmUgTFNFRUtfTk9UX0xJTkVB
Ug0KICANCiAgI2RlZmluZSBDQU5UX0ZPUksNCiAgDQotLS0gMjEsMjcgLS0tLQ0KICAjaW5jbHVk
ZSAiZm9wZW4tYmluLmgiDQogIA0KICAvKiBEZWZpbmUgdGhpcyBsc2VlayhuKSAhPSBudGggYnl0
ZSBvZiBmaWxlICovDQohIC8qICNkZWZpbmUgTFNFRUtfTk9UX0xJTkVBUiBub3QgYW55bW9yZSAq
Lw0KICANCiAgI2RlZmluZSBDQU5UX0ZPUksNCiAgDQo=
--=====================_914426891==_
Content-Type: text/plain; charset="us-ascii"
|\ Pierre Muller
|/ Institut Charles Sadron 6, rue Boussingault
|\ F 67083 STRASBOURG CEDEX
|/ Phone : (33)(0)3-88-41-40-07 Fax : (33)(0)3-88-41-40-99
|\ e-mail : muller AT ics DOT u-strasbg DOT fr
--=====================_914426891==_--
- Raw text -