From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f181.google.com (mail-pl1-f181.google.com [209.85.214.181]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9B4EE1E4A6 for ; Wed, 18 Dec 2024 00:02:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.181 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1734480183; cv=none; b=dJ27S2bltQ1INgOL/W0xTFJ+VTn/u1oFij4HXefGuKASaJi/btUL8QVr4B0tBCFl+TG71Vborh4gJshlHmFexojPIwNGPtDjIJugrmri/YPymAI3gP1nrI3IgJVzqPeCj+YS6rRaYzOnmEPQENQTrQeF+/iburMB7wEpVrdDm+A= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1734480183; c=relaxed/simple; bh=O4GxyQFdOIyJV1L49kn3Jem1+wqCGJGC/aFgCiOqQdw=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=PPcGOBo3wFMSJd70L8Jg6qwOUeUrzp9DfYK1KfXHRDOOv4/8GCaqO6wivmI9rOKrzLdeSqr5QCPCAn+RAVGXQN7Up8s3a9WN0zv22xvik+7cbf592JgvrI+yehxnQzikroZxZ29atObFyQhs+GadRg3Cssn/CbbF5+RaZdJyD7M= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com; spf=pass smtp.mailfrom=rivosinc.com; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b=SZf/iQd5; arc=none smtp.client-ip=209.85.214.181 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rivosinc.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=rivosinc-com.20230601.gappssmtp.com header.i=@rivosinc-com.20230601.gappssmtp.com header.b="SZf/iQd5" Received: by mail-pl1-f181.google.com with SMTP id d9443c01a7336-2163b0c09afso52396575ad.0 for ; Tue, 17 Dec 2024 16:02:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1734480179; x=1735084979; darn=vger.kernel.org; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:from:to :cc:subject:date:message-id:reply-to; bh=drYPh0vWxi017hqs04616YLxIMzEf4VG8/okhwk3080=; b=SZf/iQd5cITUBJUUcSpNrjgDbjCktFVm51uMaEq1DhYGlGlh5RLh1RJ/OBPkfbDv/Q ZlydN3ef8Mx7XdPiqPuGHMrVvfNXBsdFN/tuVpD69kgpkHr5RdBFevFHbeKEfcWf1grR Kwh4B6xwfODlUxtH4bGXC1lExdYqWrRTtYwSCFW1zjoIBz/+nuCJclbr3plAEQy6bIbT 5XHnhwVi9cXxaQUYPJtMtv5BfEVDwXG/KHy8UZji9eaj1DyHgCF0EOe5fAx4Pq5X8tyV 5bsHmVR+q6GgQcaTuHMGKfLZJth47MfFWLZaR3PT5qn3LuIQm4Zs8UsGZeyacDpA+BUw dxLQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1734480179; x=1735084979; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=drYPh0vWxi017hqs04616YLxIMzEf4VG8/okhwk3080=; b=L7m7l+JGHQm58q8xI0j80XK+GV2ZPJTYB7METU78/u9NSP5Sc9hP6ECafM30ZoC1K/ tjfqbsZ5XAZB0r07vdMd6AQ5v7NUCPk/09vjpnJZuV7iRtf3pa2I+RRVJ75suB6xTmtm qfGLM28Ew9+QtDbOtrd15fn2/Av0UB8fD332Mz2SZsUNaHuELhY+2PG81MfsYaFBf7f5 oEWJYkst7avj4ekdCTUWjSEoNsb950IZ3QARf3uOja1+h5Zk+oGBJGihKRY9A22ajCNd ykibbnWcwrIf+mqgFx24U+Csgt7AQVnMqgLi7fmmkxTY+xS0sN6dAA++8l6RAzbT5HZQ Gexw== X-Forwarded-Encrypted: i=1; AJvYcCX8OJXZnMz/XFeEnbjTKYkg1xiNapRHRr2e5VzYxTsVZUsrIhZsfn+5MiFU9TDGQn/06F0=@vger.kernel.org X-Gm-Message-State: AOJu0YySizwffPWNVb4CLX1Gyh0uxKOIIdEU5FZ4X8iqTQORoXIRBTgR r1qtScZwObdKEWWHxPsgY9KGTAVTbNArIqfxMUILCsIrmR2GLRh+O81StB+Sw00= X-Gm-Gg: ASbGncuMUOClo226u3wA6JYZfaYycIQAQ+xMqNknbQOfH8Jmb84gjbLLorxyt7ziKh1 hkGT9zXsQUWDcFhAwmGLe3Ij69rkda8I0SS/5RmkGZNO81B9cR1klV4efR1OH0iNWDCoZwUV4ep mbwkgXEYtsH4vmxap2gWa/4N170o3FbOvpfV1VycsfA0BA9kpxqPfWhjhQusncTHmxCvObPcMXB vrBT1AvAfBJ3gBRouXYgfzS+tLQ8MFXiz6mrMnekY3yZJs= X-Google-Smtp-Source: AGHT+IFo8wH+Y7PVcLF/ww50jt+0SlJoO+o2KA7iOtl/CuuZOeZAQKchvlelfffqrwKtfYEPXxVTBA== X-Received: by 2002:a17:902:ea0e:b0:216:725c:a122 with SMTP id d9443c01a7336-218d7216c88mr11861725ad.19.1734480178717; Tue, 17 Dec 2024 16:02:58 -0800 (PST) Received: from ghost ([50.145.13.30]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-218a1e5f36dsm64992675ad.210.2024.12.17.16.02.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 17 Dec 2024 16:02:57 -0800 (PST) Date: Tue, 17 Dec 2024 16:02:54 -0800 From: Charlie Jenkins To: Ian Rogers Cc: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Adrian Hunter , Paul Walmsley , Palmer Dabbelt , =?iso-8859-1?Q?Micka=EBl_Sala=FCn?= , =?iso-8859-1?Q?G=FCnther?= Noack , Christian Brauner , Guo Ren , John Garry , Will Deacon , James Clark , Mike Leach , Leo Yan , Jonathan Corbet , =?iso-8859-1?Q?Bj=F6rn_T=F6pel?= , Arnd Bergmann , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux-riscv@lists.infradead.org, linux-security-module@vger.kernel.org, bpf@vger.kernel.org, linux-csky@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-doc@vger.kernel.org Subject: Re: [PATCH v3 16/16] perf tools: Remove dependency on libaudit Message-ID: References: <20241216-perf_syscalltbl-v3-0-239f032481d5@rivosinc.com> <20241216-perf_syscalltbl-v3-16-239f032481d5@rivosinc.com> Precedence: bulk X-Mailing-List: bpf@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: On Tue, Dec 17, 2024 at 03:36:27PM -0800, Ian Rogers wrote: > On Mon, Dec 16, 2024 at 10:40 PM Charlie Jenkins wrote: > > > > All architectures now support HAVE_SYSCALL_TABLE_SUPPORT, so the flag is > > no longer needed. With the removal of the flag, the related > > GENERIC_SYSCALL_TABLE can also be removed. libaudit was only used as a > > fallback for when HAVE_SYSCALL_TABLE_SUPPORT was not defined, so > > libaudit is also no longer needed for any architecture. > > > > Signed-off-by: Charlie Jenkins > > --- > > Documentation/admin-guide/workload-tracing.rst | 2 +- > > tools/build/feature/Makefile | 4 -- > > tools/build/feature/test-libaudit.c | 11 ------ > > tools/perf/Documentation/perf-check.txt | 1 - > > tools/perf/Makefile.config | 31 +-------------- > > tools/perf/Makefile.perf | 15 -------- > > tools/perf/builtin-check.c | 1 - > > tools/perf/builtin-help.c | 2 - > > tools/perf/builtin-trace.c | 30 --------------- > > tools/perf/perf.c | 6 +-- > > tools/perf/tests/make | 7 +--- > > tools/perf/util/env.c | 4 +- > > tools/perf/util/generate-cmdlist.sh | 4 +- > > tools/perf/util/syscalltbl.c | 52 -------------------------- > > 14 files changed, 10 insertions(+), 160 deletions(-) > > > > diff --git a/Documentation/admin-guide/workload-tracing.rst b/Documentation/admin-guide/workload-tracing.rst > > index b2e254ec8ee846afe78eede74a825b51c6ab119b..6be38c1b9c5bb4be899fd261c6d2911abcf959dc 100644 > > --- a/Documentation/admin-guide/workload-tracing.rst > > +++ b/Documentation/admin-guide/workload-tracing.rst > > @@ -83,7 +83,7 @@ scripts/ver_linux is a good way to check if your system already has > > the necessary tools:: > > > > sudo apt-get build-essentials flex bison yacc > > - sudo apt install libelf-dev systemtap-sdt-dev libaudit-dev libslang2-dev libperl-dev libdw-dev > > + sudo apt install libelf-dev systemtap-sdt-dev libslang2-dev libperl-dev libdw-dev > > > > cscope is a good tool to browse kernel sources. Let's install it now:: > > > > diff --git a/tools/build/feature/Makefile b/tools/build/feature/Makefile > > index 043dfd00fce72d8f651ccd9b3265a0183f500e5c..e0b63e9d0251abe6d5eafc6d2f26b940918b16ee 100644 > > --- a/tools/build/feature/Makefile > > +++ b/tools/build/feature/Makefile > > @@ -13,7 +13,6 @@ FILES= \ > > test-gtk2.bin \ > > test-gtk2-infobar.bin \ > > test-hello.bin \ > > - test-libaudit.bin \ > > test-libbfd.bin \ > > test-libbfd-buildid.bin \ > > test-disassembler-four-args.bin \ > > @@ -228,9 +227,6 @@ $(OUTPUT)test-libunwind-debug-frame-arm.bin: > > $(OUTPUT)test-libunwind-debug-frame-aarch64.bin: > > $(BUILD) -lelf -llzma -lunwind-aarch64 > > > > -$(OUTPUT)test-libaudit.bin: > > - $(BUILD) -laudit > > - > > $(OUTPUT)test-libslang.bin: > > $(BUILD) -lslang > > > > diff --git a/tools/build/feature/test-libaudit.c b/tools/build/feature/test-libaudit.c > > deleted file mode 100644 > > index f5b0863fa1ec240795339428d8deed98a946d405..0000000000000000000000000000000000000000 > > --- a/tools/build/feature/test-libaudit.c > > +++ /dev/null > > @@ -1,11 +0,0 @@ > > -// SPDX-License-Identifier: GPL-2.0 > > -#include > > - > > -extern int printf(const char *format, ...); > > - > > -int main(void) > > -{ > > - printf("error message: %s\n", audit_errno_to_name(0)); > > - > > - return audit_open(); > > -} > > diff --git a/tools/perf/Documentation/perf-check.txt b/tools/perf/Documentation/perf-check.txt > > index 31741499e7867c9b712227f31a2958fd641d474a..e6d2ceeb2ca7de850f41b1baa0375b6f984bb08f 100644 > > --- a/tools/perf/Documentation/perf-check.txt > > +++ b/tools/perf/Documentation/perf-check.txt > > @@ -51,7 +51,6 @@ feature:: > > dwarf_getlocations / HAVE_LIBDW_SUPPORT > > dwarf-unwind / HAVE_DWARF_UNWIND_SUPPORT > > auxtrace / HAVE_AUXTRACE_SUPPORT > > - libaudit / HAVE_LIBAUDIT_SUPPORT > > libbfd / HAVE_LIBBFD_SUPPORT > > libcapstone / HAVE_LIBCAPSTONE_SUPPORT > > libcrypto / HAVE_LIBCRYPTO_SUPPORT > > diff --git a/tools/perf/Makefile.config b/tools/perf/Makefile.config > > index 3f82ba907381049213c055ab10c3fe14d9572073..a57b2364578f57e31476f5041a06a0cd22d8b27e 100644 > > --- a/tools/perf/Makefile.config > > +++ b/tools/perf/Makefile.config > > @@ -28,20 +28,7 @@ include $(srctree)/tools/scripts/Makefile.arch > > > > $(call detected_var,SRCARCH) > > > > -ifneq ($(NO_SYSCALL_TABLE),1) > > - NO_SYSCALL_TABLE := 1 > > - > > - # architectures that use the generic syscall table scripts > > - ifneq ($(filter $(SRCARCH), $(generic_syscall_table_archs)),) > > - NO_SYSCALL_TABLE := 0 > > - CFLAGS += -DGENERIC_SYSCALL_TABLE > > - CFLAGS += -I$(OUTPUT)tools/perf/arch/$(SRCARCH)/include/generated > > - endif > > - > > - ifneq ($(NO_SYSCALL_TABLE),1) > > - CFLAGS += -DHAVE_SYSCALL_TABLE_SUPPORT > > - endif > > -endif > > +CFLAGS += -I$(OUTPUT)tools/perf/arch/$(SRCARCH)/include/generated > > > > # Additional ARCH settings for ppc > > ifeq ($(SRCARCH),powerpc) > > @@ -755,21 +742,7 @@ ifndef NO_LIBUNWIND > > endif > > > > ifneq ($(NO_LIBTRACEEVENT),1) > > - ifeq ($(NO_SYSCALL_TABLE),0) > > - $(call detected,CONFIG_TRACE) > > - else > > - ifndef NO_LIBAUDIT > > - $(call feature_check,libaudit) > > - ifneq ($(feature-libaudit), 1) > > - $(warning No libaudit.h found, disables 'trace' tool, please install audit-libs-devel or libaudit-dev) > > - NO_LIBAUDIT := 1 > > - else > > - CFLAGS += -DHAVE_LIBAUDIT_SUPPORT > > - EXTLIBS += -laudit > > - $(call detected,CONFIG_TRACE) > > - endif > > - endif > > - endif > > + $(call detected,CONFIG_TRACE) > > endif > > > > ifndef NO_LIBCRYPTO > > diff --git a/tools/perf/Makefile.perf b/tools/perf/Makefile.perf > > index 2c6a509c800d3037933c9b49e5a7dafbf78fda0c..ab2d075ff3a23350a5eea12508cf0376f1d9f4e8 100644 > > --- a/tools/perf/Makefile.perf > > +++ b/tools/perf/Makefile.perf > > @@ -59,8 +59,6 @@ include ../scripts/utilities.mak > > # > > # Define NO_LIBNUMA if you do not want numa perf benchmark > > # > > -# Define NO_LIBAUDIT if you do not want libaudit support > > -# > > # Define NO_LIBBIONIC if you do not want bionic support > > # > > # Define NO_LIBCRYPTO if you do not want libcrypto (openssl) support > > @@ -119,10 +117,6 @@ include ../scripts/utilities.mak > > # > > # Define LIBBPF_DYNAMIC to enable libbpf dynamic linking. > > # > > -# Define NO_SYSCALL_TABLE=1 to disable the use of syscall id to/from name tables > > -# generated from the kernel .tbl or unistd.h files and use, if available, libaudit > > -# for doing the conversions to/from strings/id. > > -# > > # Define NO_LIBPFM4 to disable libpfm4 events extension. > > # > > # Define NO_LIBDEBUGINFOD if you do not want support debuginfod > > @@ -310,11 +304,7 @@ ifeq ($(filter feature-dump,$(MAKECMDGOALS)),feature-dump) > > FEATURE_TESTS := all > > endif > > endif > > -# architectures that use the generic syscall table > > -generic_syscall_table_archs := riscv arc csky arm sh sparc xtensa x86 alpha parisc arm64 loongarch mips powerpc s390 > > -ifneq ($(filter $(SRCARCH), $(generic_syscall_table_archs)),) > > include $(srctree)/tools/perf/scripts/Makefile.syscalls > > -endif > > include Makefile.config > > endif > > > > @@ -1099,11 +1089,6 @@ endif > > $(INSTALL) $(OUTPUT)perf-archive -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)' > > $(call QUIET_INSTALL, perf-iostat) \ > > $(INSTALL) $(OUTPUT)perf-iostat -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)' > > -ifndef NO_LIBAUDIT > > - $(call QUIET_INSTALL, strace/groups) \ > > - $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(STRACE_GROUPS_INSTDIR_SQ)'; \ > > - $(INSTALL) trace/strace/groups/* -m 644 -t '$(DESTDIR_SQ)$(STRACE_GROUPS_INSTDIR_SQ)' > > -endif > > ifndef NO_LIBPERL > > $(call QUIET_INSTALL, perl-scripts) \ > > $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/Perf-Trace-Util/lib/Perf/Trace'; \ > > diff --git a/tools/perf/builtin-check.c b/tools/perf/builtin-check.c > > index 2346536a5ee14f91ecd10bd130a64676e871e1b2..7aed7b9f4f5270527ee1d36327eb6a01f196a46a 100644 > > --- a/tools/perf/builtin-check.c > > +++ b/tools/perf/builtin-check.c > > @@ -31,7 +31,6 @@ struct feature_status supported_features[] = { > > FEATURE_STATUS("dwarf_getlocations", HAVE_LIBDW_SUPPORT), > > FEATURE_STATUS("dwarf-unwind", HAVE_DWARF_UNWIND_SUPPORT), > > FEATURE_STATUS("auxtrace", HAVE_AUXTRACE_SUPPORT), > > - FEATURE_STATUS("libaudit", HAVE_LIBAUDIT_SUPPORT), > > FEATURE_STATUS("libbfd", HAVE_LIBBFD_SUPPORT), > > FEATURE_STATUS("libcapstone", HAVE_LIBCAPSTONE_SUPPORT), > > FEATURE_STATUS("libcrypto", HAVE_LIBCRYPTO_SUPPORT), > > diff --git a/tools/perf/builtin-help.c b/tools/perf/builtin-help.c > > index 0854d3cd9f6a304cd9cb50ad430d5706d91df0e9..7be6fb6df595923c15ae51747d5bf17d867ae785 100644 > > --- a/tools/perf/builtin-help.c > > +++ b/tools/perf/builtin-help.c > > @@ -447,9 +447,7 @@ int cmd_help(int argc, const char **argv) > > #ifdef HAVE_LIBELF_SUPPORT > > "probe", > > #endif > > -#if defined(HAVE_LIBAUDIT_SUPPORT) || defined(HAVE_SYSCALL_TABLE_SUPPORT) > > "trace", > > -#endif > > NULL }; > > const char *builtin_help_usage[] = { > > "perf help [--all] [--man|--web|--info] [command]", > > diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c > > index 6a1a128fe645014d0347ad4ec3e0c9e77ec59aee..0fddf34458db4fe4896d25f427f2ae29cb3aa15f 100644 > > --- a/tools/perf/builtin-trace.c > > +++ b/tools/perf/builtin-trace.c > > @@ -2069,30 +2069,11 @@ static int trace__read_syscall_info(struct trace *trace, int id) > > const char *name = syscalltbl__name(trace->sctbl, id); > > int err; > > > > -#ifdef HAVE_SYSCALL_TABLE_SUPPORT > > if (trace->syscalls.table == NULL) { > > trace->syscalls.table = calloc(trace->sctbl->syscalls.max_id + 1, sizeof(*sc)); > > if (trace->syscalls.table == NULL) > > return -ENOMEM; > > } > > -#else > > - if (id > trace->sctbl->syscalls.max_id || (id == 0 && trace->syscalls.table == NULL)) { > > - // When using libaudit we don't know beforehand what is the max syscall id > > - struct syscall *table = realloc(trace->syscalls.table, (id + 1) * sizeof(*sc)); > > - > > - if (table == NULL) > > - return -ENOMEM; > > - > > - // Need to memset from offset 0 and +1 members if brand new > > - if (trace->syscalls.table == NULL) > > - memset(table, 0, (id + 1) * sizeof(*sc)); > > - else > > - memset(table + trace->sctbl->syscalls.max_id + 1, 0, (id - trace->sctbl->syscalls.max_id) * sizeof(*sc)); > > - > > - trace->syscalls.table = table; > > - trace->sctbl->syscalls.max_id = id; > > - } > > -#endif > > sc = trace->syscalls.table + id; > > if (sc->nonexistent) > > return -EEXIST; > > @@ -2439,18 +2420,7 @@ static struct syscall *trace__syscall_info(struct trace *trace, > > > > err = -EINVAL; > > > > -#ifdef HAVE_SYSCALL_TABLE_SUPPORT > > if (id > trace->sctbl->syscalls.max_id) { > > -#else > > - if (id >= trace->sctbl->syscalls.max_id) { > > - /* > > - * With libaudit we don't know beforehand what is the max_id, > > - * so we let trace__read_syscall_info() figure that out as we > > - * go on reading syscalls. > > - */ > > - err = trace__read_syscall_info(trace, id); > > - if (err) > > -#endif > > goto out_cant_read; > > } > > > > diff --git a/tools/perf/perf.c b/tools/perf/perf.c > > index a2987f2cfe1a3958f53239ed1a4eec3f87d7466a..f0617cc41f5fe638986e5d8316a6b3056c2c4bc5 100644 > > --- a/tools/perf/perf.c > > +++ b/tools/perf/perf.c > > @@ -84,7 +84,7 @@ static struct cmd_struct commands[] = { > > #endif > > { "kvm", cmd_kvm, 0 }, > > { "test", cmd_test, 0 }, > > -#if defined(HAVE_LIBTRACEEVENT) && (defined(HAVE_LIBAUDIT_SUPPORT) || defined(HAVE_SYSCALL_TABLE_SUPPORT)) > > +#if defined(HAVE_LIBTRACEEVENT) > > { "trace", cmd_trace, 0 }, > > #endif > > { "inject", cmd_inject, 0 }, > > @@ -514,10 +514,6 @@ int main(int argc, const char **argv) > > fprintf(stderr, > > "trace command not available: missing libtraceevent devel package at build time.\n"); > > goto out; > > -#elif !defined(HAVE_LIBAUDIT_SUPPORT) && !defined(HAVE_SYSCALL_TABLE_SUPPORT) > > - fprintf(stderr, > > - "trace command not available: missing audit-libs devel package at build time.\n"); > > - goto out; > > #else > > setup_path(); > > argv[0] = "trace"; > > diff --git a/tools/perf/tests/make b/tools/perf/tests/make > > index a7fcbd589752a90459815bd21075528c6dfa4d94..0ee94caf9ec19820a94a87dd46a7ccf1cefb844a 100644 > > --- a/tools/perf/tests/make > > +++ b/tools/perf/tests/make > > @@ -86,7 +86,6 @@ make_no_libdw_dwarf_unwind := NO_LIBDW_DWARF_UNWIND=1 > > make_no_backtrace := NO_BACKTRACE=1 > > make_no_libcapstone := NO_CAPSTONE=1 > > make_no_libnuma := NO_LIBNUMA=1 > > -make_no_libaudit := NO_LIBAUDIT=1 > > make_no_libbionic := NO_LIBBIONIC=1 > > make_no_auxtrace := NO_AUXTRACE=1 > > make_no_libbpf := NO_LIBBPF=1 > > @@ -97,7 +96,6 @@ make_no_libllvm := NO_LIBLLVM=1 > > make_with_babeltrace:= LIBBABELTRACE=1 > > make_with_coresight := CORESIGHT=1 > > make_no_sdt := NO_SDT=1 > > -make_no_syscall_tbl := NO_SYSCALL_TABLE=1 > > make_no_libpfm4 := NO_LIBPFM4=1 > > make_with_gtk2 := GTK2=1 > > make_refcnt_check := EXTRA_CFLAGS="-DREFCNT_CHECKING=1" > > @@ -122,10 +120,10 @@ make_static := LDFLAGS=-static NO_PERF_READ_VDSO32=1 NO_PERF_READ_VDSOX3 > > # all the NO_* variable combined > > make_minimal := NO_LIBPERL=1 NO_LIBPYTHON=1 NO_GTK2=1 > > make_minimal += NO_DEMANGLE=1 NO_LIBELF=1 NO_BACKTRACE=1 > > -make_minimal += NO_LIBNUMA=1 NO_LIBAUDIT=1 NO_LIBBIONIC=1 > > +make_minimal += NO_LIBNUMA=1 NO_LIBBIONIC=1 > > make_minimal += NO_LIBDW_DWARF_UNWIND=1 NO_AUXTRACE=1 NO_LIBBPF=1 > > make_minimal += NO_LIBCRYPTO=1 NO_SDT=1 NO_JVMTI=1 NO_LIBZSTD=1 > > -make_minimal += NO_LIBCAP=1 NO_SYSCALL_TABLE=1 NO_CAPSTONE=1 > > +make_minimal += NO_LIBCAP=1 NO_CAPSTONE=1 > > > > # $(run) contains all available tests > > run := make_pure > > @@ -158,7 +156,6 @@ run += make_no_libdw_dwarf_unwind > > run += make_no_backtrace > > run += make_no_libcapstone > > run += make_no_libnuma > > -run += make_no_libaudit > > run += make_no_libbionic > > run += make_no_auxtrace > > run += make_no_libbpf > > diff --git a/tools/perf/util/env.c b/tools/perf/util/env.c > > index e2843ca2edd92ea5fa1c020ae92b183c496e975e..e9a694350671910d537de599071dbe7fcc18ced4 100644 > > --- a/tools/perf/util/env.c > > +++ b/tools/perf/util/env.c > > @@ -474,13 +474,13 @@ const char *perf_env__arch(struct perf_env *env) > > > > const char *perf_env__arch_strerrno(struct perf_env *env __maybe_unused, int err __maybe_unused) > > { > > -#if defined(HAVE_SYSCALL_TABLE_SUPPORT) && defined(HAVE_LIBTRACEEVENT) > > +#if defined(HAVE_LIBTRACEEVENT) > > if (env->arch_strerrno == NULL) > > env->arch_strerrno = arch_syscalls__strerrno_function(perf_env__arch(env)); > > > > return env->arch_strerrno ? env->arch_strerrno(err) : "no arch specific strerrno function"; > > #else > > - return "!(HAVE_SYSCALL_TABLE_SUPPORT && HAVE_LIBTRACEEVENT)"; > > + return "!HAVE_LIBTRACEEVENT"; > > #endif > > } > > > > diff --git a/tools/perf/util/generate-cmdlist.sh b/tools/perf/util/generate-cmdlist.sh > > index 1b5140e5ce9975fac87b2674dc694f9d4e439a5f..6a73c903d69050df69267a8aeaeeac1ed170efe1 100755 > > --- a/tools/perf/util/generate-cmdlist.sh > > +++ b/tools/perf/util/generate-cmdlist.sh > > @@ -38,7 +38,7 @@ do > > done > > echo "#endif /* HAVE_LIBELF_SUPPORT */" > > > > -echo "#if defined(HAVE_LIBTRACEEVENT) && (defined(HAVE_LIBAUDIT_SUPPORT) || defined(HAVE_SYSCALL_TABLE_SUPPORT))" > > +echo "#if defined(HAVE_LIBTRACEEVENT)" > > sed -n -e 's/^perf-\([^ ]*\)[ ].* audit*/\1/p' command-list.txt | > > sort | > > while read cmd > > @@ -51,7 +51,7 @@ do > > p > > }' "Documentation/perf-$cmd.txt" > > done > > -echo "#endif /* HAVE_LIBTRACEEVENT && (HAVE_LIBAUDIT_SUPPORT || HAVE_SYSCALL_TABLE_SUPPORT) */" > > +echo "#endif /* HAVE_LIBTRACEEVENT */" > > > > echo "#ifdef HAVE_LIBTRACEEVENT" > > sed -n -e 's/^perf-\([^ ]*\)[ ].* traceevent.*/\1/p' command-list.txt | > > diff --git a/tools/perf/util/syscalltbl.c b/tools/perf/util/syscalltbl.c > > index 210f61b0a7a264a427ebb602185d3a9da2f426f4..928aca4cd6e9f2f26c5c4fd825b4538c064a4cc3 100644 > > --- a/tools/perf/util/syscalltbl.c > > +++ b/tools/perf/util/syscalltbl.c > > @@ -10,20 +10,12 @@ > > #include > > #include > > > > -#ifdef HAVE_SYSCALL_TABLE_SUPPORT > > #include > > #include "string2.h" > > > > -#if defined(GENERIC_SYSCALL_TABLE) > > #include > > const int syscalltbl_native_max_id = SYSCALLTBL_MAX_ID; > > static const char *const *syscalltbl_native = syscalltbl; > > -#else > > -const int syscalltbl_native_max_id = 0; > > -static const char *const syscalltbl_native[] = { > > - [0] = "unknown", > > -}; > > -#endif > > > > struct syscall { > > int id; > > @@ -131,47 +123,3 @@ int syscalltbl__strglobmatch_first(struct syscalltbl *tbl, const char *syscall_g > > *idx = -1; > > return syscalltbl__strglobmatch_next(tbl, syscall_glob, idx); > > } > > - > > -#else /* HAVE_SYSCALL_TABLE_SUPPORT */ > > - > > -#include > > - > > -struct syscalltbl *syscalltbl__new(void) > > -{ > > - struct syscalltbl *tbl = zalloc(sizeof(*tbl)); > > - if (tbl) > > - tbl->audit_machine = audit_detect_machine(); > > struct syscalltbl's audit_machine is now unused, remove? Good point, thank you! Will remove in next version. - Charlie > > Thanks, > Ian > > > - return tbl; > > -} > > - > > -void syscalltbl__delete(struct syscalltbl *tbl) > > -{ > > - free(tbl); > > -} > > - > > -const char *syscalltbl__name(const struct syscalltbl *tbl, int id) > > -{ > > - return audit_syscall_to_name(id, tbl->audit_machine); > > -} > > - > > -int syscalltbl__id(struct syscalltbl *tbl, const char *name) > > -{ > > - return audit_name_to_syscall(name, tbl->audit_machine); > > -} > > - > > -int syscalltbl__id_at_idx(struct syscalltbl *tbl __maybe_unused, int idx) > > -{ > > - return idx; > > -} > > - > > -int syscalltbl__strglobmatch_next(struct syscalltbl *tbl __maybe_unused, > > - const char *syscall_glob __maybe_unused, int *idx __maybe_unused) > > -{ > > - return -1; > > -} > > - > > -int syscalltbl__strglobmatch_first(struct syscalltbl *tbl, const char *syscall_glob, int *idx) > > -{ > > - return syscalltbl__strglobmatch_next(tbl, syscall_glob, idx); > > -} > > -#endif /* HAVE_SYSCALL_TABLE_SUPPORT */ > > > > -- > > 2.34.1 > > From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 31AE3E77184 for ; Wed, 18 Dec 2024 00:03:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=EHX4zfgqEPGs9qWrcYjAwu9zpPX/AznIkNjLZz9nMow=; b=2Jdo/vRYjYpmr4 DtsCG2WyVCacA0bby8jqX2I5vH8Xiy9C9ORzpi2V5wmwtrIpqMwZfcVZZFHKziIpWykKhpKaJOiId jpSE92mauUUsasbKL9Pw37sLtra9lDzxrLZxd+Vqm/EcehkS0edMD9qiZV4D6W9OAkMjLhLOLbeKS 1gLPD4YJ5/HSnVwOyGM/pEvICjP4nA+0T9QHEp7zgecuhj4zxvvIKUBTFynBlnUoii/WyIIZMR/iO EuLErc7WTTPQI7CeJzzO34GEySokpE7Til2ys8WIUHQfLnRQkV/USIU4ZXtxQzgf6r5wz575UgFH3 zvmSbFRa7lB2HdosJ22g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tNhXZ-0000000F9gZ-2vLJ; Wed, 18 Dec 2024 00:03:49 +0000 Received: from mail-pl1-x631.google.com ([2607:f8b0:4864:20::631]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tNhWl-0000000F9U1-3kwq for linux-riscv@lists.infradead.org; Wed, 18 Dec 2024 00:03:01 +0000 Received: by mail-pl1-x631.google.com with SMTP id d9443c01a7336-21628b3fe7dso45728475ad.3 for ; Tue, 17 Dec 2024 16:02:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1734480179; x=1735084979; darn=lists.infradead.org; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:from:to :cc:subject:date:message-id:reply-to; bh=drYPh0vWxi017hqs04616YLxIMzEf4VG8/okhwk3080=; b=mDTYD67cydx1htZPlshbfGQC98EECxijkwdv+qUr764Z7Bo5EfVlnHy4GlFjoLzTlD wMNSn4RiJPjb41WZQ3Bqh/47YfOwCNZebjqcUHENTtTm8R3lLwLeSoQWaiymyb8bvTHP xFDKh3oOpjQ1/AkKr4JIoksO4BgKrolMn3Y0U2Pa8d9vEEeq16sM7qlklcpBi9Oy+4w9 0P/ClciIAU8sLnTPicmXeDp+c5+6buRzpMnjJ0ayUGGW60Xpc8cavwvPnD1OEb+ybTPv 6iNsivc4zBGQT5JinHWyKU7CJX31HPf7gpuZDNSkBY2YgiYGwmG0UAtcTUhmxyuaFxcv Uydg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1734480179; x=1735084979; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=drYPh0vWxi017hqs04616YLxIMzEf4VG8/okhwk3080=; b=XmN77uIQlD5Mq3exWoVi7xhGOO8QVZeERu1MabbUHorULlPscFiyNI9CL/OQ7K5jxw S/2u+IJSN3D5QULDzFf4RShIX40RBwWP7TN334YxJxMa9TvztZrr4yhqRwCU/h+QNMBs F5BMkcQgDDS3XpN7tSGKTf8HmNngfoHa42mdTcBkOUgoPm4fArRYcanT4pjgHcSsZpx9 yzzyb9yeN4c+IVdfCn55Lyu9Lf33/rlmucLOdX0EajTgieoFrKsUbbv14m8s6G9HyOFR G7EbD+i+Wswy9jNY6ixUv82KnfqZtD+zbbZ80QRtCT+VA7mwgE1baccNb1QSw2rdV5fI DP9Q== X-Forwarded-Encrypted: i=1; AJvYcCWNE5a6cZHd2kfzxB8Ai4YlFjL44b8NobQbaWogMOxLkUV3I1p2lw74S45b67WYra4Xdtd81CGGTBHKlw==@lists.infradead.org X-Gm-Message-State: AOJu0Yy8NrFZ96kpl3uq73UbAvaFrmjRqiF73jLekXnR/YJ9tT4oZPCh QS/sUVIXETFxnt7K80JZmfRK214QnQcZcuTXVO5TRb8P8xfqOM6c+qrAWPvl6cg= X-Gm-Gg: ASbGncvhm3F0Azd5tiDFJfQ/Qaw8Ww99hmJ15O+x/gC47+SxU5wMw9m5AT/tYvus7ek lIA1GbEILFrXFnMRwdK/FYs7078mw5yB6dK0dISIIY0JACX3pKwNdURuqvoNh+z8A6Hr/D8pWl7 0iEiNQyqdDgdwaAKIWDBbzoSczA2HxW24HsygIv0i2kbHd5FfNy72Eu7F1XfGgJgfDhxfIgTUb9 rTt1Qu0jcoZuggrkfbzWyfCuNOOexYKrC8i4B+0kpScozc= X-Google-Smtp-Source: AGHT+IFo8wH+Y7PVcLF/ww50jt+0SlJoO+o2KA7iOtl/CuuZOeZAQKchvlelfffqrwKtfYEPXxVTBA== X-Received: by 2002:a17:902:ea0e:b0:216:725c:a122 with SMTP id d9443c01a7336-218d7216c88mr11861725ad.19.1734480178717; Tue, 17 Dec 2024 16:02:58 -0800 (PST) Received: from ghost ([50.145.13.30]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-218a1e5f36dsm64992675ad.210.2024.12.17.16.02.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 17 Dec 2024 16:02:57 -0800 (PST) Date: Tue, 17 Dec 2024 16:02:54 -0800 From: Charlie Jenkins To: Ian Rogers Cc: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Adrian Hunter , Paul Walmsley , Palmer Dabbelt , =?iso-8859-1?Q?Micka=EBl_Sala=FCn?= , =?iso-8859-1?Q?G=FCnther?= Noack , Christian Brauner , Guo Ren , John Garry , Will Deacon , James Clark , Mike Leach , Leo Yan , Jonathan Corbet , =?iso-8859-1?Q?Bj=F6rn_T=F6pel?= , Arnd Bergmann , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux-riscv@lists.infradead.org, linux-security-module@vger.kernel.org, bpf@vger.kernel.org, linux-csky@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-doc@vger.kernel.org Subject: Re: [PATCH v3 16/16] perf tools: Remove dependency on libaudit Message-ID: References: <20241216-perf_syscalltbl-v3-0-239f032481d5@rivosinc.com> <20241216-perf_syscalltbl-v3-16-239f032481d5@rivosinc.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20241217_160259_970185_F39F163E X-CRM114-Status: GOOD ( 29.84 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org T24gVHVlLCBEZWMgMTcsIDIwMjQgYXQgMDM6MzY6MjdQTSAtMDgwMCwgSWFuIFJvZ2VycyB3cm90 ZToKPiBPbiBNb24sIERlYyAxNiwgMjAyNCBhdCAxMDo0MOKAr1BNIENoYXJsaWUgSmVua2lucyA8 Y2hhcmxpZUByaXZvc2luYy5jb20+IHdyb3RlOgo+ID4KPiA+IEFsbCBhcmNoaXRlY3R1cmVzIG5v dyBzdXBwb3J0IEhBVkVfU1lTQ0FMTF9UQUJMRV9TVVBQT1JULCBzbyB0aGUgZmxhZyBpcwo+ID4g bm8gbG9uZ2VyIG5lZWRlZC4gV2l0aCB0aGUgcmVtb3ZhbCBvZiB0aGUgZmxhZywgdGhlIHJlbGF0 ZWQKPiA+IEdFTkVSSUNfU1lTQ0FMTF9UQUJMRSBjYW4gYWxzbyBiZSByZW1vdmVkLiBsaWJhdWRp dCB3YXMgb25seSB1c2VkIGFzIGEKPiA+IGZhbGxiYWNrIGZvciB3aGVuIEhBVkVfU1lTQ0FMTF9U QUJMRV9TVVBQT1JUIHdhcyBub3QgZGVmaW5lZCwgc28KPiA+IGxpYmF1ZGl0IGlzIGFsc28gbm8g bG9uZ2VyIG5lZWRlZCBmb3IgYW55IGFyY2hpdGVjdHVyZS4KPiA+Cj4gPiBTaWduZWQtb2ZmLWJ5 OiBDaGFybGllIEplbmtpbnMgPGNoYXJsaWVAcml2b3NpbmMuY29tPgo+ID4gLS0tCj4gPiAgRG9j dW1lbnRhdGlvbi9hZG1pbi1ndWlkZS93b3JrbG9hZC10cmFjaW5nLnJzdCB8ICAyICstCj4gPiAg dG9vbHMvYnVpbGQvZmVhdHVyZS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICB8ICA0IC0tCj4g PiAgdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWxpYmF1ZGl0LmMgICAgICAgICAgICB8IDExIC0t LS0tLQo+ID4gIHRvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLWNoZWNrLnR4dCAgICAgICAg fCAgMSAtCj4gPiAgdG9vbHMvcGVyZi9NYWtlZmlsZS5jb25maWcgICAgICAgICAgICAgICAgICAg ICB8IDMxICstLS0tLS0tLS0tLS0tLQo+ID4gIHRvb2xzL3BlcmYvTWFrZWZpbGUucGVyZiAgICAg ICAgICAgICAgICAgICAgICAgfCAxNSAtLS0tLS0tLQo+ID4gIHRvb2xzL3BlcmYvYnVpbHRpbi1j aGVjay5jICAgICAgICAgICAgICAgICAgICAgfCAgMSAtCj4gPiAgdG9vbHMvcGVyZi9idWlsdGlu LWhlbHAuYyAgICAgICAgICAgICAgICAgICAgICB8ICAyIC0KPiA+ICB0b29scy9wZXJmL2J1aWx0 aW4tdHJhY2UuYyAgICAgICAgICAgICAgICAgICAgIHwgMzAgLS0tLS0tLS0tLS0tLS0tCj4gPiAg dG9vbHMvcGVyZi9wZXJmLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA2ICstLQo+ ID4gIHRvb2xzL3BlcmYvdGVzdHMvbWFrZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNyAr LS0tCj4gPiAgdG9vbHMvcGVyZi91dGlsL2Vudi5jICAgICAgICAgICAgICAgICAgICAgICAgICB8 ICA0ICstCj4gPiAgdG9vbHMvcGVyZi91dGlsL2dlbmVyYXRlLWNtZGxpc3Quc2ggICAgICAgICAg ICB8ICA0ICstCj4gPiAgdG9vbHMvcGVyZi91dGlsL3N5c2NhbGx0YmwuYyAgICAgICAgICAgICAg ICAgICB8IDUyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gPiAgMTQgZmlsZXMgY2hhbmdl ZCwgMTAgaW5zZXJ0aW9ucygrKSwgMTYwIGRlbGV0aW9ucygtKQo+ID4KPiA+IGRpZmYgLS1naXQg YS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3dvcmtsb2FkLXRyYWNpbmcucnN0IGIvRG9jdW1l bnRhdGlvbi9hZG1pbi1ndWlkZS93b3JrbG9hZC10cmFjaW5nLnJzdAo+ID4gaW5kZXggYjJlMjU0 ZWM4ZWU4NDZhZmU3OGVlZGU3NGE4MjViNTFjNmFiMTE5Yi4uNmJlMzhjMWI5YzViYjRiZTg5OWZk MjYxYzZkMjkxMWFiY2Y5NTlkYyAxMDA2NDQKPiA+IC0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4t Z3VpZGUvd29ya2xvYWQtdHJhY2luZy5yc3QKPiA+ICsrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4t Z3VpZGUvd29ya2xvYWQtdHJhY2luZy5yc3QKPiA+IEBAIC04Myw3ICs4Myw3IEBAIHNjcmlwdHMv dmVyX2xpbnV4IGlzIGEgZ29vZCB3YXkgdG8gY2hlY2sgaWYgeW91ciBzeXN0ZW0gYWxyZWFkeSBo YXMKPiA+ICB0aGUgbmVjZXNzYXJ5IHRvb2xzOjoKPiA+Cj4gPiAgICBzdWRvIGFwdC1nZXQgYnVp bGQtZXNzZW50aWFscyBmbGV4IGJpc29uIHlhY2MKPiA+IC0gIHN1ZG8gYXB0IGluc3RhbGwgbGli ZWxmLWRldiBzeXN0ZW10YXAtc2R0LWRldiBsaWJhdWRpdC1kZXYgbGlic2xhbmcyLWRldiBsaWJw ZXJsLWRldiBsaWJkdy1kZXYKPiA+ICsgIHN1ZG8gYXB0IGluc3RhbGwgbGliZWxmLWRldiBzeXN0 ZW10YXAtc2R0LWRldiBsaWJzbGFuZzItZGV2IGxpYnBlcmwtZGV2IGxpYmR3LWRldgo+ID4KPiA+ ICBjc2NvcGUgaXMgYSBnb29kIHRvb2wgdG8gYnJvd3NlIGtlcm5lbCBzb3VyY2VzLiBMZXQncyBp bnN0YWxsIGl0IG5vdzo6Cj4gPgo+ID4gZGlmZiAtLWdpdCBhL3Rvb2xzL2J1aWxkL2ZlYXR1cmUv TWFrZWZpbGUgYi90b29scy9idWlsZC9mZWF0dXJlL01ha2VmaWxlCj4gPiBpbmRleCAwNDNkZmQw MGZjZTcyZDhmNjUxY2NkOWIzMjY1YTAxODNmNTAwZTVjLi5lMGI2M2U5ZDAyNTFhYmU2ZDVlYWZj NmQyZjI2Yjk0MDkxOGIxNmVlIDEwMDY0NAo+ID4gLS0tIGEvdG9vbHMvYnVpbGQvZmVhdHVyZS9N YWtlZmlsZQo+ID4gKysrIGIvdG9vbHMvYnVpbGQvZmVhdHVyZS9NYWtlZmlsZQo+ID4gQEAgLTEz LDcgKzEzLDYgQEAgRklMRVM9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAo+ID4gICAgICAgICAgIHRlc3QtZ3RrMi5iaW4gICAgICAgICAgICAgICAgICAgICAgICAg IFwKPiA+ICAgICAgICAgICB0ZXN0LWd0azItaW5mb2Jhci5iaW4gICAgICAgICAgICAgICAgICBc Cj4gPiAgICAgICAgICAgdGVzdC1oZWxsby5iaW4gICAgICAgICAgICAgICAgICAgICAgICAgXAo+ ID4gLSAgICAgICAgIHRlc3QtbGliYXVkaXQuYmluICAgICAgICAgICAgICAgICAgICAgIFwKPiA+ ICAgICAgICAgICB0ZXN0LWxpYmJmZC5iaW4gICAgICAgICAgICAgICAgICAgICAgICBcCj4gPiAg ICAgICAgICAgdGVzdC1saWJiZmQtYnVpbGRpZC5iaW4gICAgICAgICAgICAgICBcCj4gPiAgICAg ICAgICAgdGVzdC1kaXNhc3NlbWJsZXItZm91ci1hcmdzLmJpbiAgICAgICAgXAo+ID4gQEAgLTIy OCw5ICsyMjcsNiBAQCAkKE9VVFBVVCl0ZXN0LWxpYnVud2luZC1kZWJ1Zy1mcmFtZS1hcm0uYmlu Ogo+ID4gICQoT1VUUFVUKXRlc3QtbGlidW53aW5kLWRlYnVnLWZyYW1lLWFhcmNoNjQuYmluOgo+ ID4gICAgICAgICAkKEJVSUxEKSAtbGVsZiAtbGx6bWEgLWx1bndpbmQtYWFyY2g2NAo+ID4KPiA+ IC0kKE9VVFBVVCl0ZXN0LWxpYmF1ZGl0LmJpbjoKPiA+IC0gICAgICAgJChCVUlMRCkgLWxhdWRp dAo+ID4gLQo+ID4gICQoT1VUUFVUKXRlc3QtbGlic2xhbmcuYmluOgo+ID4gICAgICAgICAkKEJV SUxEKSAtbHNsYW5nCj4gPgo+ID4gZGlmZiAtLWdpdCBhL3Rvb2xzL2J1aWxkL2ZlYXR1cmUvdGVz dC1saWJhdWRpdC5jIGIvdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWxpYmF1ZGl0LmMKPiA+IGRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggZjViMDg2M2ZhMWVjMjQwNzk1MzM5NDI4 ZDhkZWVkOThhOTQ2ZDQwNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MAo+ID4gLS0tIGEvdG9vbHMvYnVpbGQvZmVhdHVyZS90ZXN0LWxpYmF1ZGl0LmMKPiA+ICsrKyAv ZGV2L251bGwKPiA+IEBAIC0xLDExICswLDAgQEAKPiA+IC0vLyBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogR1BMLTIuMAo+ID4gLSNpbmNsdWRlIDxsaWJhdWRpdC5oPgo+ID4gLQo+ID4gLWV4dGVy biBpbnQgcHJpbnRmKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKPiA+IC0KPiA+IC1pbnQgbWFp bih2b2lkKQo+ID4gLXsKPiA+IC0gICAgICAgcHJpbnRmKCJlcnJvciBtZXNzYWdlOiAlc1xuIiwg YXVkaXRfZXJybm9fdG9fbmFtZSgwKSk7Cj4gPiAtCj4gPiAtICAgICAgIHJldHVybiBhdWRpdF9v cGVuKCk7Cj4gPiAtfQo+ID4gZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9w ZXJmLWNoZWNrLnR4dCBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLWNoZWNrLnR4dAo+ ID4gaW5kZXggMzE3NDE0OTllNzg2N2M5YjcxMjIyN2YzMWEyOTU4ZmQ2NDFkNDc0YS4uZTZkMmNl ZWIyY2E3ZGU4NTBmNDFiMWJhYTAzNzViNmY5ODRiYjA4ZiAxMDA2NDQKPiA+IC0tLSBhL3Rvb2xz L3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLWNoZWNrLnR4dAo+ID4gKysrIGIvdG9vbHMvcGVyZi9E b2N1bWVudGF0aW9uL3BlcmYtY2hlY2sudHh0Cj4gPiBAQCAtNTEsNyArNTEsNiBAQCBmZWF0dXJl OjoKPiA+ICAgICAgICAgICAgICAgICAgZHdhcmZfZ2V0bG9jYXRpb25zICAgICAgLyAgSEFWRV9M SUJEV19TVVBQT1JUCj4gPiAgICAgICAgICAgICAgICAgIGR3YXJmLXVud2luZCAgICAgICAgICAg IC8gIEhBVkVfRFdBUkZfVU5XSU5EX1NVUFBPUlQKPiA+ICAgICAgICAgICAgICAgICAgYXV4dHJh Y2UgICAgICAgICAgICAgICAgLyAgSEFWRV9BVVhUUkFDRV9TVVBQT1JUCj4gPiAtICAgICAgICAg ICAgICAgIGxpYmF1ZGl0ICAgICAgICAgICAgICAgIC8gIEhBVkVfTElCQVVESVRfU1VQUE9SVAo+ ID4gICAgICAgICAgICAgICAgICBsaWJiZmQgICAgICAgICAgICAgICAgICAvICBIQVZFX0xJQkJG RF9TVVBQT1JUCj4gPiAgICAgICAgICAgICAgICAgIGxpYmNhcHN0b25lICAgICAgICAgICAgIC8g IEhBVkVfTElCQ0FQU1RPTkVfU1VQUE9SVAo+ID4gICAgICAgICAgICAgICAgICBsaWJjcnlwdG8g ICAgICAgICAgICAgICAvICBIQVZFX0xJQkNSWVBUT19TVVBQT1JUCj4gPiBkaWZmIC0tZ2l0IGEv dG9vbHMvcGVyZi9NYWtlZmlsZS5jb25maWcgYi90b29scy9wZXJmL01ha2VmaWxlLmNvbmZpZwo+ ID4gaW5kZXggM2Y4MmJhOTA3MzgxMDQ5MjEzYzA1NWFiMTBjM2ZlMTRkOTU3MjA3My4uYTU3YjIz NjQ1NzhmNTdlMzE0NzZmNTA0MWEwNmEwY2QyMmQ4YjI3ZSAxMDA2NDQKPiA+IC0tLSBhL3Rvb2xz L3BlcmYvTWFrZWZpbGUuY29uZmlnCj4gPiArKysgYi90b29scy9wZXJmL01ha2VmaWxlLmNvbmZp Zwo+ID4gQEAgLTI4LDIwICsyOCw3IEBAIGluY2x1ZGUgJChzcmN0cmVlKS90b29scy9zY3JpcHRz L01ha2VmaWxlLmFyY2gKPiA+Cj4gPiAgJChjYWxsIGRldGVjdGVkX3ZhcixTUkNBUkNIKQo+ID4K PiA+IC1pZm5lcSAoJChOT19TWVNDQUxMX1RBQkxFKSwxKQo+ID4gLSAgTk9fU1lTQ0FMTF9UQUJM RSA6PSAxCj4gPiAtCj4gPiAtICAjIGFyY2hpdGVjdHVyZXMgdGhhdCB1c2UgdGhlIGdlbmVyaWMg c3lzY2FsbCB0YWJsZSBzY3JpcHRzCj4gPiAtICBpZm5lcSAoJChmaWx0ZXIgJChTUkNBUkNIKSwg JChnZW5lcmljX3N5c2NhbGxfdGFibGVfYXJjaHMpKSwpCj4gPiAtICAgIE5PX1NZU0NBTExfVEFC TEUgOj0gMAo+ID4gLSAgICBDRkxBR1MgKz0gLURHRU5FUklDX1NZU0NBTExfVEFCTEUKPiA+IC0g ICAgQ0ZMQUdTICs9IC1JJChPVVRQVVQpdG9vbHMvcGVyZi9hcmNoLyQoU1JDQVJDSCkvaW5jbHVk ZS9nZW5lcmF0ZWQKPiA+IC0gIGVuZGlmCj4gPiAtCj4gPiAtICBpZm5lcSAoJChOT19TWVNDQUxM X1RBQkxFKSwxKQo+ID4gLSAgICBDRkxBR1MgKz0gLURIQVZFX1NZU0NBTExfVEFCTEVfU1VQUE9S VAo+ID4gLSAgZW5kaWYKPiA+IC1lbmRpZgo+ID4gK0NGTEFHUyArPSAtSSQoT1VUUFVUKXRvb2xz L3BlcmYvYXJjaC8kKFNSQ0FSQ0gpL2luY2x1ZGUvZ2VuZXJhdGVkCj4gPgo+ID4gICMgQWRkaXRp b25hbCBBUkNIIHNldHRpbmdzIGZvciBwcGMKPiA+ICBpZmVxICgkKFNSQ0FSQ0gpLHBvd2VycGMp Cj4gPiBAQCAtNzU1LDIxICs3NDIsNyBAQCBpZm5kZWYgTk9fTElCVU5XSU5ECj4gPiAgZW5kaWYK PiA+Cj4gPiAgaWZuZXEgKCQoTk9fTElCVFJBQ0VFVkVOVCksMSkKPiA+IC0gIGlmZXEgKCQoTk9f U1lTQ0FMTF9UQUJMRSksMCkKPiA+IC0gICAgJChjYWxsIGRldGVjdGVkLENPTkZJR19UUkFDRSkK PiA+IC0gIGVsc2UKPiA+IC0gICAgaWZuZGVmIE5PX0xJQkFVRElUCj4gPiAtICAgICAgJChjYWxs IGZlYXR1cmVfY2hlY2ssbGliYXVkaXQpCj4gPiAtICAgICAgaWZuZXEgKCQoZmVhdHVyZS1saWJh dWRpdCksIDEpCj4gPiAtICAgICAgICAkKHdhcm5pbmcgTm8gbGliYXVkaXQuaCBmb3VuZCwgZGlz YWJsZXMgJ3RyYWNlJyB0b29sLCBwbGVhc2UgaW5zdGFsbCBhdWRpdC1saWJzLWRldmVsIG9yIGxp YmF1ZGl0LWRldikKPiA+IC0gICAgICAgIE5PX0xJQkFVRElUIDo9IDEKPiA+IC0gICAgICBlbHNl Cj4gPiAtICAgICAgICBDRkxBR1MgKz0gLURIQVZFX0xJQkFVRElUX1NVUFBPUlQKPiA+IC0gICAg ICAgIEVYVExJQlMgKz0gLWxhdWRpdAo+ID4gLSAgICAgICAgJChjYWxsIGRldGVjdGVkLENPTkZJ R19UUkFDRSkKPiA+IC0gICAgICBlbmRpZgo+ID4gLSAgICBlbmRpZgo+ID4gLSAgZW5kaWYKPiA+ ICsgICQoY2FsbCBkZXRlY3RlZCxDT05GSUdfVFJBQ0UpCj4gPiAgZW5kaWYKPiA+Cj4gPiAgaWZu ZGVmIE5PX0xJQkNSWVBUTwo+ID4gZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvTWFrZWZpbGUucGVy ZiBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUucGVyZgo+ID4gaW5kZXggMmM2YTUwOWM4MDBkMzAzNzkz M2M5YjQ5ZTVhN2RhZmJmNzhmZGEwYy4uYWIyZDA3NWZmM2EyMzM1MGE1ZWVhMTI1MDhjZjAzNzZm MWQ5ZjRlOCAxMDA2NDQKPiA+IC0tLSBhL3Rvb2xzL3BlcmYvTWFrZWZpbGUucGVyZgo+ID4gKysr IGIvdG9vbHMvcGVyZi9NYWtlZmlsZS5wZXJmCj4gPiBAQCAtNTksOCArNTksNiBAQCBpbmNsdWRl IC4uL3NjcmlwdHMvdXRpbGl0aWVzLm1hawo+ID4gICMKPiA+ICAjIERlZmluZSBOT19MSUJOVU1B IGlmIHlvdSBkbyBub3Qgd2FudCBudW1hIHBlcmYgYmVuY2htYXJrCj4gPiAgIwo+ID4gLSMgRGVm aW5lIE5PX0xJQkFVRElUIGlmIHlvdSBkbyBub3Qgd2FudCBsaWJhdWRpdCBzdXBwb3J0Cj4gPiAt Iwo+ID4gICMgRGVmaW5lIE5PX0xJQkJJT05JQyBpZiB5b3UgZG8gbm90IHdhbnQgYmlvbmljIHN1 cHBvcnQKPiA+ICAjCj4gPiAgIyBEZWZpbmUgTk9fTElCQ1JZUFRPIGlmIHlvdSBkbyBub3Qgd2Fu dCBsaWJjcnlwdG8gKG9wZW5zc2wpIHN1cHBvcnQKPiA+IEBAIC0xMTksMTAgKzExNyw2IEBAIGlu Y2x1ZGUgLi4vc2NyaXB0cy91dGlsaXRpZXMubWFrCj4gPiAgIwo+ID4gICMgRGVmaW5lIExJQkJQ Rl9EWU5BTUlDIHRvIGVuYWJsZSBsaWJicGYgZHluYW1pYyBsaW5raW5nLgo+ID4gICMKPiA+IC0j IERlZmluZSBOT19TWVNDQUxMX1RBQkxFPTEgdG8gZGlzYWJsZSB0aGUgdXNlIG9mIHN5c2NhbGwg aWQgdG8vZnJvbSBuYW1lIHRhYmxlcwo+ID4gLSMgZ2VuZXJhdGVkIGZyb20gdGhlIGtlcm5lbCAu dGJsIG9yIHVuaXN0ZC5oIGZpbGVzIGFuZCB1c2UsIGlmIGF2YWlsYWJsZSwgbGliYXVkaXQKPiA+ IC0jIGZvciBkb2luZyB0aGUgY29udmVyc2lvbnMgdG8vZnJvbSBzdHJpbmdzL2lkLgo+ID4gLSMK PiA+ICAjIERlZmluZSBOT19MSUJQRk00IHRvIGRpc2FibGUgbGlicGZtNCBldmVudHMgZXh0ZW5z aW9uLgo+ID4gICMKPiA+ICAjIERlZmluZSBOT19MSUJERUJVR0lORk9EIGlmIHlvdSBkbyBub3Qg d2FudCBzdXBwb3J0IGRlYnVnaW5mb2QKPiA+IEBAIC0zMTAsMTEgKzMwNCw3IEBAIGlmZXEgKCQo ZmlsdGVyIGZlYXR1cmUtZHVtcCwkKE1BS0VDTURHT0FMUykpLGZlYXR1cmUtZHVtcCkKPiA+ICBG RUFUVVJFX1RFU1RTIDo9IGFsbAo+ID4gIGVuZGlmCj4gPiAgZW5kaWYKPiA+IC0jIGFyY2hpdGVj dHVyZXMgdGhhdCB1c2UgdGhlIGdlbmVyaWMgc3lzY2FsbCB0YWJsZQo+ID4gLWdlbmVyaWNfc3lz Y2FsbF90YWJsZV9hcmNocyA6PSByaXNjdiBhcmMgY3NreSBhcm0gc2ggc3BhcmMgeHRlbnNhIHg4 NiBhbHBoYSBwYXJpc2MgYXJtNjQgbG9vbmdhcmNoIG1pcHMgcG93ZXJwYyBzMzkwCj4gPiAtaWZu ZXEgKCQoZmlsdGVyICQoU1JDQVJDSCksICQoZ2VuZXJpY19zeXNjYWxsX3RhYmxlX2FyY2hzKSks KQo+ID4gIGluY2x1ZGUgJChzcmN0cmVlKS90b29scy9wZXJmL3NjcmlwdHMvTWFrZWZpbGUuc3lz Y2FsbHMKPiA+IC1lbmRpZgo+ID4gIGluY2x1ZGUgTWFrZWZpbGUuY29uZmlnCj4gPiAgZW5kaWYK PiA+Cj4gPiBAQCAtMTA5OSwxMSArMTA4OSw2IEBAIGVuZGlmCj4gPiAgICAgICAgICAgICAgICAg JChJTlNUQUxMKSAkKE9VVFBVVClwZXJmLWFyY2hpdmUgLXQgJyQoREVTVERJUl9TUSkkKHBlcmZl eGVjX2luc3RkaXJfU1EpJwo+ID4gICAgICAgICAkKGNhbGwgUVVJRVRfSU5TVEFMTCwgcGVyZi1p b3N0YXQpIFwKPiA+ICAgICAgICAgICAgICAgICAkKElOU1RBTEwpICQoT1VUUFVUKXBlcmYtaW9z dGF0IC10ICckKERFU1RESVJfU1EpJChwZXJmZXhlY19pbnN0ZGlyX1NRKScKPiA+IC1pZm5kZWYg Tk9fTElCQVVESVQKPiA+IC0gICAgICAgJChjYWxsIFFVSUVUX0lOU1RBTEwsIHN0cmFjZS9ncm91 cHMpIFwKPiA+IC0gICAgICAgICAgICAgICAkKElOU1RBTEwpIC1kIC1tIDc1NSAnJChERVNURElS X1NRKSQoU1RSQUNFX0dST1VQU19JTlNURElSX1NRKSc7IFwKPiA+IC0gICAgICAgICAgICAgICAk KElOU1RBTEwpIHRyYWNlL3N0cmFjZS9ncm91cHMvKiAtbSA2NDQgLXQgJyQoREVTVERJUl9TUSkk KFNUUkFDRV9HUk9VUFNfSU5TVERJUl9TUSknCj4gPiAtZW5kaWYKPiA+ICBpZm5kZWYgTk9fTElC UEVSTAo+ID4gICAgICAgICAkKGNhbGwgUVVJRVRfSU5TVEFMTCwgcGVybC1zY3JpcHRzKSBcCj4g PiAgICAgICAgICAgICAgICAgJChJTlNUQUxMKSAtZCAtbSA3NTUgJyQoREVTVERJUl9TUSkkKHBl cmZleGVjX2luc3RkaXJfU1EpL3NjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYv VHJhY2UnOyBcCj4gPiBkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWNoZWNrLmMgYi90 b29scy9wZXJmL2J1aWx0aW4tY2hlY2suYwo+ID4gaW5kZXggMjM0NjUzNmE1ZWUxNGY5MWVjZDEw YmQxMzBhNjQ2NzZlODcxZTFiMi4uN2FlZDdiOWY0ZjUyNzA1MjdlZTFkMzYzMjdlYjZhMDFmMTk2 YTQ2YSAxMDA2NDQKPiA+IC0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1jaGVjay5jCj4gPiArKysg Yi90b29scy9wZXJmL2J1aWx0aW4tY2hlY2suYwo+ID4gQEAgLTMxLDcgKzMxLDYgQEAgc3RydWN0 IGZlYXR1cmVfc3RhdHVzIHN1cHBvcnRlZF9mZWF0dXJlc1tdID0gewo+ID4gICAgICAgICBGRUFU VVJFX1NUQVRVUygiZHdhcmZfZ2V0bG9jYXRpb25zIiwgSEFWRV9MSUJEV19TVVBQT1JUKSwKPiA+ ICAgICAgICAgRkVBVFVSRV9TVEFUVVMoImR3YXJmLXVud2luZCIsIEhBVkVfRFdBUkZfVU5XSU5E X1NVUFBPUlQpLAo+ID4gICAgICAgICBGRUFUVVJFX1NUQVRVUygiYXV4dHJhY2UiLCBIQVZFX0FV WFRSQUNFX1NVUFBPUlQpLAo+ID4gLSAgICAgICBGRUFUVVJFX1NUQVRVUygibGliYXVkaXQiLCBI QVZFX0xJQkFVRElUX1NVUFBPUlQpLAo+ID4gICAgICAgICBGRUFUVVJFX1NUQVRVUygibGliYmZk IiwgSEFWRV9MSUJCRkRfU1VQUE9SVCksCj4gPiAgICAgICAgIEZFQVRVUkVfU1RBVFVTKCJsaWJj YXBzdG9uZSIsIEhBVkVfTElCQ0FQU1RPTkVfU1VQUE9SVCksCj4gPiAgICAgICAgIEZFQVRVUkVf U1RBVFVTKCJsaWJjcnlwdG8iLCBIQVZFX0xJQkNSWVBUT19TVVBQT1JUKSwKPiA+IGRpZmYgLS1n aXQgYS90b29scy9wZXJmL2J1aWx0aW4taGVscC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLWhlbHAu Ywo+ID4gaW5kZXggMDg1NGQzY2Q5ZjZhMzA0Y2Q5Y2I1MGFkNDMwZDU3MDZkOTFkZjBlOS4uN2Jl NmZiNmRmNTk1OTIzYzE1YWU1MTc0N2Q1YmYxN2Q4NjdhZTc4NSAxMDA2NDQKPiA+IC0tLSBhL3Rv b2xzL3BlcmYvYnVpbHRpbi1oZWxwLmMKPiA+ICsrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1oZWxw LmMKPiA+IEBAIC00NDcsOSArNDQ3LDcgQEAgaW50IGNtZF9oZWxwKGludCBhcmdjLCBjb25zdCBj aGFyICoqYXJndikKPiA+ICAjaWZkZWYgSEFWRV9MSUJFTEZfU1VQUE9SVAo+ID4gICAgICAgICAg ICAgICAgICJwcm9iZSIsCj4gPiAgI2VuZGlmCj4gPiAtI2lmIGRlZmluZWQoSEFWRV9MSUJBVURJ VF9TVVBQT1JUKSB8fCBkZWZpbmVkKEhBVkVfU1lTQ0FMTF9UQUJMRV9TVVBQT1JUKQo+ID4gICAg ICAgICAgICAgICAgICJ0cmFjZSIsCj4gPiAtI2VuZGlmCj4gPiAgICAgICAgIE5VTEwgfTsKPiA+ ICAgICAgICAgY29uc3QgY2hhciAqYnVpbHRpbl9oZWxwX3VzYWdlW10gPSB7Cj4gPiAgICAgICAg ICAgICAgICAgInBlcmYgaGVscCBbLS1hbGxdIFstLW1hbnwtLXdlYnwtLWluZm9dIFtjb21tYW5k XSIsCj4gPiBkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXRyYWNlLmMgYi90b29scy9w ZXJmL2J1aWx0aW4tdHJhY2UuYwo+ID4gaW5kZXggNmExYTEyOGZlNjQ1MDE0ZDAzNDdhZDRlYzNl MGM5ZTc3ZWM1OWFlZS4uMGZkZGYzNDQ1OGRiNGZlNDg5NmQyNWY0MjdmMmFlMjljYjNhYTE1ZiAx MDA2NDQKPiA+IC0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10cmFjZS5jCj4gPiArKysgYi90b29s cy9wZXJmL2J1aWx0aW4tdHJhY2UuYwo+ID4gQEAgLTIwNjksMzAgKzIwNjksMTEgQEAgc3RhdGlj IGludCB0cmFjZV9fcmVhZF9zeXNjYWxsX2luZm8oc3RydWN0IHRyYWNlICp0cmFjZSwgaW50IGlk KQo+ID4gICAgICAgICBjb25zdCBjaGFyICpuYW1lID0gc3lzY2FsbHRibF9fbmFtZSh0cmFjZS0+ c2N0YmwsIGlkKTsKPiA+ICAgICAgICAgaW50IGVycjsKPiA+Cj4gPiAtI2lmZGVmIEhBVkVfU1lT Q0FMTF9UQUJMRV9TVVBQT1JUCj4gPiAgICAgICAgIGlmICh0cmFjZS0+c3lzY2FsbHMudGFibGUg PT0gTlVMTCkgewo+ID4gICAgICAgICAgICAgICAgIHRyYWNlLT5zeXNjYWxscy50YWJsZSA9IGNh bGxvYyh0cmFjZS0+c2N0YmwtPnN5c2NhbGxzLm1heF9pZCArIDEsIHNpemVvZigqc2MpKTsKPiA+ ICAgICAgICAgICAgICAgICBpZiAodHJhY2UtPnN5c2NhbGxzLnRhYmxlID09IE5VTEwpCj4gPiAg ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKPiA+ICAgICAgICAgfQo+ID4g LSNlbHNlCj4gPiAtICAgICAgIGlmIChpZCA+IHRyYWNlLT5zY3RibC0+c3lzY2FsbHMubWF4X2lk IHx8IChpZCA9PSAwICYmIHRyYWNlLT5zeXNjYWxscy50YWJsZSA9PSBOVUxMKSkgewo+ID4gLSAg ICAgICAgICAgICAgIC8vIFdoZW4gdXNpbmcgbGliYXVkaXQgd2UgZG9uJ3Qga25vdyBiZWZvcmVo YW5kIHdoYXQgaXMgdGhlIG1heCBzeXNjYWxsIGlkCj4gPiAtICAgICAgICAgICAgICAgc3RydWN0 IHN5c2NhbGwgKnRhYmxlID0gcmVhbGxvYyh0cmFjZS0+c3lzY2FsbHMudGFibGUsIChpZCArIDEp ICogc2l6ZW9mKCpzYykpOwo+ID4gLQo+ID4gLSAgICAgICAgICAgICAgIGlmICh0YWJsZSA9PSBO VUxMKQo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Cj4gPiAtCj4g PiAtICAgICAgICAgICAgICAgLy8gTmVlZCB0byBtZW1zZXQgZnJvbSBvZmZzZXQgMCBhbmQgKzEg bWVtYmVycyBpZiBicmFuZCBuZXcKPiA+IC0gICAgICAgICAgICAgICBpZiAodHJhY2UtPnN5c2Nh bGxzLnRhYmxlID09IE5VTEwpCj4gPiAtICAgICAgICAgICAgICAgICAgICAgICBtZW1zZXQodGFi bGUsIDAsIChpZCArIDEpICogc2l6ZW9mKCpzYykpOwo+ID4gLSAgICAgICAgICAgICAgIGVsc2UK PiA+IC0gICAgICAgICAgICAgICAgICAgICAgIG1lbXNldCh0YWJsZSArIHRyYWNlLT5zY3RibC0+ c3lzY2FsbHMubWF4X2lkICsgMSwgMCwgKGlkIC0gdHJhY2UtPnNjdGJsLT5zeXNjYWxscy5tYXhf aWQpICogc2l6ZW9mKCpzYykpOwo+ID4gLQo+ID4gLSAgICAgICAgICAgICAgIHRyYWNlLT5zeXNj YWxscy50YWJsZSAgICAgICAgID0gdGFibGU7Cj4gPiAtICAgICAgICAgICAgICAgdHJhY2UtPnNj dGJsLT5zeXNjYWxscy5tYXhfaWQgPSBpZDsKPiA+IC0gICAgICAgfQo+ID4gLSNlbmRpZgo+ID4g ICAgICAgICBzYyA9IHRyYWNlLT5zeXNjYWxscy50YWJsZSArIGlkOwo+ID4gICAgICAgICBpZiAo c2MtPm5vbmV4aXN0ZW50KQo+ID4gICAgICAgICAgICAgICAgIHJldHVybiAtRUVYSVNUOwo+ID4g QEAgLTI0MzksMTggKzI0MjAsNyBAQCBzdGF0aWMgc3RydWN0IHN5c2NhbGwgKnRyYWNlX19zeXNj YWxsX2luZm8oc3RydWN0IHRyYWNlICp0cmFjZSwKPiA+Cj4gPiAgICAgICAgIGVyciA9IC1FSU5W QUw7Cj4gPgo+ID4gLSNpZmRlZiBIQVZFX1NZU0NBTExfVEFCTEVfU1VQUE9SVAo+ID4gICAgICAg ICBpZiAoaWQgPiB0cmFjZS0+c2N0YmwtPnN5c2NhbGxzLm1heF9pZCkgewo+ID4gLSNlbHNlCj4g PiAtICAgICAgIGlmIChpZCA+PSB0cmFjZS0+c2N0YmwtPnN5c2NhbGxzLm1heF9pZCkgewo+ID4g LSAgICAgICAgICAgICAgIC8qCj4gPiAtICAgICAgICAgICAgICAgICogV2l0aCBsaWJhdWRpdCB3 ZSBkb24ndCBrbm93IGJlZm9yZWhhbmQgd2hhdCBpcyB0aGUgbWF4X2lkLAo+ID4gLSAgICAgICAg ICAgICAgICAqIHNvIHdlIGxldCB0cmFjZV9fcmVhZF9zeXNjYWxsX2luZm8oKSBmaWd1cmUgdGhh dCBvdXQgYXMgd2UKPiA+IC0gICAgICAgICAgICAgICAgKiBnbyBvbiByZWFkaW5nIHN5c2NhbGxz Lgo+ID4gLSAgICAgICAgICAgICAgICAqLwo+ID4gLSAgICAgICAgICAgICAgIGVyciA9IHRyYWNl X19yZWFkX3N5c2NhbGxfaW5mbyh0cmFjZSwgaWQpOwo+ID4gLSAgICAgICAgICAgICAgIGlmIChl cnIpCj4gPiAtI2VuZGlmCj4gPiAgICAgICAgICAgICAgICAgZ290byBvdXRfY2FudF9yZWFkOwo+ ID4gICAgICAgICB9Cj4gPgo+ID4gZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvcGVyZi5jIGIvdG9v bHMvcGVyZi9wZXJmLmMKPiA+IGluZGV4IGEyOTg3ZjJjZmUxYTM5NThmNTMyMzllZDFhNGVlYzNm ODdkNzQ2NmEuLmYwNjE3Y2M0MWY1ZmU2Mzg5ODZlNWQ4MzE2YTZiMzA1NmMyYzRiYzUgMTAwNjQ0 Cj4gPiAtLS0gYS90b29scy9wZXJmL3BlcmYuYwo+ID4gKysrIGIvdG9vbHMvcGVyZi9wZXJmLmMK PiA+IEBAIC04NCw3ICs4NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgY21kX3N0cnVjdCBjb21tYW5kc1td ID0gewo+ID4gICNlbmRpZgo+ID4gICAgICAgICB7ICJrdm0iLCAgICAgICAgY21kX2t2bSwgICAg ICAgIDAgfSwKPiA+ICAgICAgICAgeyAidGVzdCIsICAgICAgIGNtZF90ZXN0LCAgICAgICAwIH0s Cj4gPiAtI2lmIGRlZmluZWQoSEFWRV9MSUJUUkFDRUVWRU5UKSAmJiAoZGVmaW5lZChIQVZFX0xJ QkFVRElUX1NVUFBPUlQpIHx8IGRlZmluZWQoSEFWRV9TWVNDQUxMX1RBQkxFX1NVUFBPUlQpKQo+ ID4gKyNpZiBkZWZpbmVkKEhBVkVfTElCVFJBQ0VFVkVOVCkKPiA+ICAgICAgICAgeyAidHJhY2Ui LCAgICAgIGNtZF90cmFjZSwgICAgICAwIH0sCj4gPiAgI2VuZGlmCj4gPiAgICAgICAgIHsgImlu amVjdCIsICAgICBjbWRfaW5qZWN0LCAgICAgMCB9LAo+ID4gQEAgLTUxNCwxMCArNTE0LDYgQEAg aW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQo+ID4gICAgICAgICAgICAgICAg IGZwcmludGYoc3RkZXJyLAo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgInRyYWNlIGNvbW1h bmQgbm90IGF2YWlsYWJsZTogbWlzc2luZyBsaWJ0cmFjZWV2ZW50IGRldmVsIHBhY2thZ2UgYXQg YnVpbGQgdGltZS5cbiIpOwo+ID4gICAgICAgICAgICAgICAgIGdvdG8gb3V0Owo+ID4gLSNlbGlm ICFkZWZpbmVkKEhBVkVfTElCQVVESVRfU1VQUE9SVCkgJiYgIWRlZmluZWQoSEFWRV9TWVNDQUxM X1RBQkxFX1NVUFBPUlQpCj4gPiAtICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCj4gPiAt ICAgICAgICAgICAgICAgICAgICAgICAidHJhY2UgY29tbWFuZCBub3QgYXZhaWxhYmxlOiBtaXNz aW5nIGF1ZGl0LWxpYnMgZGV2ZWwgcGFja2FnZSBhdCBidWlsZCB0aW1lLlxuIik7Cj4gPiAtICAg ICAgICAgICAgICAgZ290byBvdXQ7Cj4gPiAgI2Vsc2UKPiA+ICAgICAgICAgICAgICAgICBzZXR1 cF9wYXRoKCk7Cj4gPiAgICAgICAgICAgICAgICAgYXJndlswXSA9ICJ0cmFjZSI7Cj4gPiBkaWZm IC0tZ2l0IGEvdG9vbHMvcGVyZi90ZXN0cy9tYWtlIGIvdG9vbHMvcGVyZi90ZXN0cy9tYWtlCj4g PiBpbmRleCBhN2ZjYmQ1ODk3NTJhOTA0NTk4MTViZDIxMDc1NTI4YzZkZmE0ZDk0Li4wZWU5NGNh ZjllYzE5ODIwYTk0YTg3ZGQ0NmE3Y2NmMWNlZmI4NDRhIDEwMDY0NAo+ID4gLS0tIGEvdG9vbHMv cGVyZi90ZXN0cy9tYWtlCj4gPiArKysgYi90b29scy9wZXJmL3Rlc3RzL21ha2UKPiA+IEBAIC04 Niw3ICs4Niw2IEBAIG1ha2Vfbm9fbGliZHdfZHdhcmZfdW53aW5kIDo9IE5PX0xJQkRXX0RXQVJG X1VOV0lORD0xCj4gPiAgbWFrZV9ub19iYWNrdHJhY2UgICA6PSBOT19CQUNLVFJBQ0U9MQo+ID4g IG1ha2Vfbm9fbGliY2Fwc3RvbmUgOj0gTk9fQ0FQU1RPTkU9MQo+ID4gIG1ha2Vfbm9fbGlibnVt YSAgICAgOj0gTk9fTElCTlVNQT0xCj4gPiAtbWFrZV9ub19saWJhdWRpdCAgICA6PSBOT19MSUJB VURJVD0xCj4gPiAgbWFrZV9ub19saWJiaW9uaWMgICA6PSBOT19MSUJCSU9OSUM9MQo+ID4gIG1h a2Vfbm9fYXV4dHJhY2UgICAgOj0gTk9fQVVYVFJBQ0U9MQo+ID4gIG1ha2Vfbm9fbGliYnBmICAg ICA6PSBOT19MSUJCUEY9MQo+ID4gQEAgLTk3LDcgKzk2LDYgQEAgbWFrZV9ub19saWJsbHZtICAg ICA6PSBOT19MSUJMTFZNPTEKPiA+ICBtYWtlX3dpdGhfYmFiZWx0cmFjZTo9IExJQkJBQkVMVFJB Q0U9MQo+ID4gIG1ha2Vfd2l0aF9jb3Jlc2lnaHQgOj0gQ09SRVNJR0hUPTEKPiA+ICBtYWtlX25v X3NkdCAgICAgICAgOj0gTk9fU0RUPTEKPiA+IC1tYWtlX25vX3N5c2NhbGxfdGJsIDo9IE5PX1NZ U0NBTExfVEFCTEU9MQo+ID4gIG1ha2Vfbm9fbGlicGZtNCAgICAgOj0gTk9fTElCUEZNND0xCj4g PiAgbWFrZV93aXRoX2d0azIgICAgICA6PSBHVEsyPTEKPiA+ICBtYWtlX3JlZmNudF9jaGVjayAg IDo9IEVYVFJBX0NGTEFHUz0iLURSRUZDTlRfQ0hFQ0tJTkc9MSIKPiA+IEBAIC0xMjIsMTAgKzEy MCwxMCBAQCBtYWtlX3N0YXRpYyAgICAgICAgIDo9IExERkxBR1M9LXN0YXRpYyBOT19QRVJGX1JF QURfVkRTTzMyPTEgTk9fUEVSRl9SRUFEX1ZEU09YMwo+ID4gICMgYWxsIHRoZSBOT18qIHZhcmlh YmxlIGNvbWJpbmVkCj4gPiAgbWFrZV9taW5pbWFsICAgICAgICA6PSBOT19MSUJQRVJMPTEgTk9f TElCUFlUSE9OPTEgTk9fR1RLMj0xCj4gPiAgbWFrZV9taW5pbWFsICAgICAgICArPSBOT19ERU1B TkdMRT0xIE5PX0xJQkVMRj0xIE5PX0JBQ0tUUkFDRT0xCj4gPiAtbWFrZV9taW5pbWFsICAgICAg ICArPSBOT19MSUJOVU1BPTEgTk9fTElCQVVESVQ9MSBOT19MSUJCSU9OSUM9MQo+ID4gK21ha2Vf bWluaW1hbCAgICAgICAgKz0gTk9fTElCTlVNQT0xIE5PX0xJQkJJT05JQz0xCj4gPiAgbWFrZV9t aW5pbWFsICAgICAgICArPSBOT19MSUJEV19EV0FSRl9VTldJTkQ9MSBOT19BVVhUUkFDRT0xIE5P X0xJQkJQRj0xCj4gPiAgbWFrZV9taW5pbWFsICAgICAgICArPSBOT19MSUJDUllQVE89MSBOT19T RFQ9MSBOT19KVk1UST0xIE5PX0xJQlpTVEQ9MQo+ID4gLW1ha2VfbWluaW1hbCAgICAgICAgKz0g Tk9fTElCQ0FQPTEgTk9fU1lTQ0FMTF9UQUJMRT0xIE5PX0NBUFNUT05FPTEKPiA+ICttYWtlX21p bmltYWwgICAgICAgICs9IE5PX0xJQkNBUD0xIE5PX0NBUFNUT05FPTEKPiA+Cj4gPiAgIyAkKHJ1 bikgY29udGFpbnMgYWxsIGF2YWlsYWJsZSB0ZXN0cwo+ID4gIHJ1biA6PSBtYWtlX3B1cmUKPiA+ IEBAIC0xNTgsNyArMTU2LDYgQEAgcnVuICs9IG1ha2Vfbm9fbGliZHdfZHdhcmZfdW53aW5kCj4g PiAgcnVuICs9IG1ha2Vfbm9fYmFja3RyYWNlCj4gPiAgcnVuICs9IG1ha2Vfbm9fbGliY2Fwc3Rv bmUKPiA+ICBydW4gKz0gbWFrZV9ub19saWJudW1hCj4gPiAtcnVuICs9IG1ha2Vfbm9fbGliYXVk aXQKPiA+ICBydW4gKz0gbWFrZV9ub19saWJiaW9uaWMKPiA+ICBydW4gKz0gbWFrZV9ub19hdXh0 cmFjZQo+ID4gIHJ1biArPSBtYWtlX25vX2xpYmJwZgo+ID4gZGlmZiAtLWdpdCBhL3Rvb2xzL3Bl cmYvdXRpbC9lbnYuYyBiL3Rvb2xzL3BlcmYvdXRpbC9lbnYuYwo+ID4gaW5kZXggZTI4NDNjYTJl ZGQ5MmVhNWZhMWMwMjBhZTkyYjE4M2M0OTZlOTc1ZS4uZTlhNjk0MzUwNjcxOTEwZDUzN2RlNTk5 MDcxZGJlN2ZjYzE4Y2VkNCAxMDA2NDQKPiA+IC0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9lbnYuYwo+ ID4gKysrIGIvdG9vbHMvcGVyZi91dGlsL2Vudi5jCj4gPiBAQCAtNDc0LDEzICs0NzQsMTMgQEAg Y29uc3QgY2hhciAqcGVyZl9lbnZfX2FyY2goc3RydWN0IHBlcmZfZW52ICplbnYpCj4gPgo+ID4g IGNvbnN0IGNoYXIgKnBlcmZfZW52X19hcmNoX3N0cmVycm5vKHN0cnVjdCBwZXJmX2VudiAqZW52 IF9fbWF5YmVfdW51c2VkLCBpbnQgZXJyIF9fbWF5YmVfdW51c2VkKQo+ID4gIHsKPiA+IC0jaWYg ZGVmaW5lZChIQVZFX1NZU0NBTExfVEFCTEVfU1VQUE9SVCkgJiYgZGVmaW5lZChIQVZFX0xJQlRS QUNFRVZFTlQpCj4gPiArI2lmIGRlZmluZWQoSEFWRV9MSUJUUkFDRUVWRU5UKQo+ID4gICAgICAg ICBpZiAoZW52LT5hcmNoX3N0cmVycm5vID09IE5VTEwpCj4gPiAgICAgICAgICAgICAgICAgZW52 LT5hcmNoX3N0cmVycm5vID0gYXJjaF9zeXNjYWxsc19fc3RyZXJybm9fZnVuY3Rpb24ocGVyZl9l bnZfX2FyY2goZW52KSk7Cj4gPgo+ID4gICAgICAgICByZXR1cm4gZW52LT5hcmNoX3N0cmVycm5v ID8gZW52LT5hcmNoX3N0cmVycm5vKGVycikgOiAibm8gYXJjaCBzcGVjaWZpYyBzdHJlcnJubyBm dW5jdGlvbiI7Cj4gPiAgI2Vsc2UKPiA+IC0gICAgICAgcmV0dXJuICIhKEhBVkVfU1lTQ0FMTF9U QUJMRV9TVVBQT1JUICYmIEhBVkVfTElCVFJBQ0VFVkVOVCkiOwo+ID4gKyAgICAgICByZXR1cm4g IiFIQVZFX0xJQlRSQUNFRVZFTlQiOwo+ID4gICNlbmRpZgo+ID4gIH0KPiA+Cj4gPiBkaWZmIC0t Z2l0IGEvdG9vbHMvcGVyZi91dGlsL2dlbmVyYXRlLWNtZGxpc3Quc2ggYi90b29scy9wZXJmL3V0 aWwvZ2VuZXJhdGUtY21kbGlzdC5zaAo+ID4gaW5kZXggMWI1MTQwZTVjZTk5NzVmYWM4N2IyNjc0 ZGM2OTRmOWQ0ZTQzOWE1Zi4uNmE3M2M5MDNkNjkwNTBkZjY5MjY3YThhZWFlZWFjMWVkMTcwZWZl MSAxMDA3NTUKPiA+IC0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9nZW5lcmF0ZS1jbWRsaXN0LnNoCj4g PiArKysgYi90b29scy9wZXJmL3V0aWwvZ2VuZXJhdGUtY21kbGlzdC5zaAo+ID4gQEAgLTM4LDcg KzM4LDcgQEAgZG8KPiA+ICBkb25lCj4gPiAgZWNobyAiI2VuZGlmIC8qIEhBVkVfTElCRUxGX1NV UFBPUlQgKi8iCj4gPgo+ID4gLWVjaG8gIiNpZiBkZWZpbmVkKEhBVkVfTElCVFJBQ0VFVkVOVCkg JiYgKGRlZmluZWQoSEFWRV9MSUJBVURJVF9TVVBQT1JUKSB8fCBkZWZpbmVkKEhBVkVfU1lTQ0FM TF9UQUJMRV9TVVBQT1JUKSkiCj4gPiArZWNobyAiI2lmIGRlZmluZWQoSEFWRV9MSUJUUkFDRUVW RU5UKSIKPiA+ICBzZWQgLW4gLWUgJ3MvXnBlcmYtXChbXiAgICAgICAgXSpcKVsgICBdLiogYXVk aXQqL1wxL3AnIGNvbW1hbmQtbGlzdC50eHQgfAo+ID4gIHNvcnQgfAo+ID4gIHdoaWxlIHJlYWQg Y21kCj4gPiBAQCAtNTEsNyArNTEsNyBAQCBkbwo+ID4gICAgICAgICAgICAgcAo+ID4gICAgICAg fScgIkRvY3VtZW50YXRpb24vcGVyZi0kY21kLnR4dCIKPiA+ICBkb25lCj4gPiAtZWNobyAiI2Vu ZGlmIC8qIEhBVkVfTElCVFJBQ0VFVkVOVCAmJiAoSEFWRV9MSUJBVURJVF9TVVBQT1JUIHx8IEhB VkVfU1lTQ0FMTF9UQUJMRV9TVVBQT1JUKSAqLyIKPiA+ICtlY2hvICIjZW5kaWYgLyogSEFWRV9M SUJUUkFDRUVWRU5UICovIgo+ID4KPiA+ICBlY2hvICIjaWZkZWYgSEFWRV9MSUJUUkFDRUVWRU5U Igo+ID4gIHNlZCAtbiAtZSAncy9ecGVyZi1cKFteICAgICAgICBdKlwpWyAgIF0uKiB0cmFjZWV2 ZW50LiovXDEvcCcgY29tbWFuZC1saXN0LnR4dCB8Cj4gPiBkaWZmIC0tZ2l0IGEvdG9vbHMvcGVy Zi91dGlsL3N5c2NhbGx0YmwuYyBiL3Rvb2xzL3BlcmYvdXRpbC9zeXNjYWxsdGJsLmMKPiA+IGlu ZGV4IDIxMGY2MWIwYTdhMjY0YTQyN2ViYjYwMjE4NWQzYTlkYTJmNDI2ZjQuLjkyOGFjYTRjZDZl OWYyZjI2YzVjNGZkODI1YjQ1MzhjMDY0YTRjYzMgMTAwNjQ0Cj4gPiAtLS0gYS90b29scy9wZXJm L3V0aWwvc3lzY2FsbHRibC5jCj4gPiArKysgYi90b29scy9wZXJmL3V0aWwvc3lzY2FsbHRibC5j Cj4gPiBAQCAtMTAsMjAgKzEwLDEyIEBACj4gPiAgI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+ Cj4gPiAgI2luY2x1ZGUgPGxpbnV4L3phbGxvYy5oPgo+ID4KPiA+IC0jaWZkZWYgSEFWRV9TWVND QUxMX1RBQkxFX1NVUFBPUlQKPiA+ICAjaW5jbHVkZSA8c3RyaW5nLmg+Cj4gPiAgI2luY2x1ZGUg InN0cmluZzIuaCIKPiA+Cj4gPiAtI2lmIGRlZmluZWQoR0VORVJJQ19TWVNDQUxMX1RBQkxFKQo+ ID4gICNpbmNsdWRlIDxzeXNjYWxsX3RhYmxlLmg+Cj4gPiAgY29uc3QgaW50IHN5c2NhbGx0Ymxf bmF0aXZlX21heF9pZCA9IFNZU0NBTExUQkxfTUFYX0lEOwo+ID4gIHN0YXRpYyBjb25zdCBjaGFy ICpjb25zdCAqc3lzY2FsbHRibF9uYXRpdmUgPSBzeXNjYWxsdGJsOwo+ID4gLSNlbHNlCj4gPiAt Y29uc3QgaW50IHN5c2NhbGx0YmxfbmF0aXZlX21heF9pZCA9IDA7Cj4gPiAtc3RhdGljIGNvbnN0 IGNoYXIgKmNvbnN0IHN5c2NhbGx0YmxfbmF0aXZlW10gPSB7Cj4gPiAtICAgICAgIFswXSA9ICJ1 bmtub3duIiwKPiA+IC19Owo+ID4gLSNlbmRpZgo+ID4KPiA+ICBzdHJ1Y3Qgc3lzY2FsbCB7Cj4g PiAgICAgICAgIGludCBpZDsKPiA+IEBAIC0xMzEsNDcgKzEyMywzIEBAIGludCBzeXNjYWxsdGJs X19zdHJnbG9ibWF0Y2hfZmlyc3Qoc3RydWN0IHN5c2NhbGx0YmwgKnRibCwgY29uc3QgY2hhciAq c3lzY2FsbF9nCj4gPiAgICAgICAgICppZHggPSAtMTsKPiA+ICAgICAgICAgcmV0dXJuIHN5c2Nh bGx0YmxfX3N0cmdsb2JtYXRjaF9uZXh0KHRibCwgc3lzY2FsbF9nbG9iLCBpZHgpOwo+ID4gIH0K PiA+IC0KPiA+IC0jZWxzZSAvKiBIQVZFX1NZU0NBTExfVEFCTEVfU1VQUE9SVCAqLwo+ID4gLQo+ ID4gLSNpbmNsdWRlIDxsaWJhdWRpdC5oPgo+ID4gLQo+ID4gLXN0cnVjdCBzeXNjYWxsdGJsICpz eXNjYWxsdGJsX19uZXcodm9pZCkKPiA+IC17Cj4gPiAtICAgICAgIHN0cnVjdCBzeXNjYWxsdGJs ICp0YmwgPSB6YWxsb2Moc2l6ZW9mKCp0YmwpKTsKPiA+IC0gICAgICAgaWYgKHRibCkKPiA+IC0g ICAgICAgICAgICAgICB0YmwtPmF1ZGl0X21hY2hpbmUgPSBhdWRpdF9kZXRlY3RfbWFjaGluZSgp Owo+IAo+IHN0cnVjdCBzeXNjYWxsdGJsJ3MgYXVkaXRfbWFjaGluZSBpcyBub3cgdW51c2VkLCBy ZW1vdmU/CgpHb29kIHBvaW50LCB0aGFuayB5b3UhIFdpbGwgcmVtb3ZlIGluIG5leHQgdmVyc2lv bi4KCi0gQ2hhcmxpZQoKPiAKPiBUaGFua3MsCj4gSWFuCj4gCj4gPiAtICAgICAgIHJldHVybiB0 Ymw7Cj4gPiAtfQo+ID4gLQo+ID4gLXZvaWQgc3lzY2FsbHRibF9fZGVsZXRlKHN0cnVjdCBzeXNj YWxsdGJsICp0YmwpCj4gPiAtewo+ID4gLSAgICAgICBmcmVlKHRibCk7Cj4gPiAtfQo+ID4gLQo+ ID4gLWNvbnN0IGNoYXIgKnN5c2NhbGx0YmxfX25hbWUoY29uc3Qgc3RydWN0IHN5c2NhbGx0Ymwg KnRibCwgaW50IGlkKQo+ID4gLXsKPiA+IC0gICAgICAgcmV0dXJuIGF1ZGl0X3N5c2NhbGxfdG9f bmFtZShpZCwgdGJsLT5hdWRpdF9tYWNoaW5lKTsKPiA+IC19Cj4gPiAtCj4gPiAtaW50IHN5c2Nh bGx0YmxfX2lkKHN0cnVjdCBzeXNjYWxsdGJsICp0YmwsIGNvbnN0IGNoYXIgKm5hbWUpCj4gPiAt ewo+ID4gLSAgICAgICByZXR1cm4gYXVkaXRfbmFtZV90b19zeXNjYWxsKG5hbWUsIHRibC0+YXVk aXRfbWFjaGluZSk7Cj4gPiAtfQo+ID4gLQo+ID4gLWludCBzeXNjYWxsdGJsX19pZF9hdF9pZHgo c3RydWN0IHN5c2NhbGx0YmwgKnRibCBfX21heWJlX3VudXNlZCwgaW50IGlkeCkKPiA+IC17Cj4g PiAtICAgICAgIHJldHVybiBpZHg7Cj4gPiAtfQo+ID4gLQo+ID4gLWludCBzeXNjYWxsdGJsX19z dHJnbG9ibWF0Y2hfbmV4dChzdHJ1Y3Qgc3lzY2FsbHRibCAqdGJsIF9fbWF5YmVfdW51c2VkLAo+ ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN5c2NhbGxf Z2xvYiBfX21heWJlX3VudXNlZCwgaW50ICppZHggX19tYXliZV91bnVzZWQpCj4gPiAtewo+ID4g LSAgICAgICByZXR1cm4gLTE7Cj4gPiAtfQo+ID4gLQo+ID4gLWludCBzeXNjYWxsdGJsX19zdHJn bG9ibWF0Y2hfZmlyc3Qoc3RydWN0IHN5c2NhbGx0YmwgKnRibCwgY29uc3QgY2hhciAqc3lzY2Fs bF9nbG9iLCBpbnQgKmlkeCkKPiA+IC17Cj4gPiAtICAgICAgIHJldHVybiBzeXNjYWxsdGJsX19z dHJnbG9ibWF0Y2hfbmV4dCh0YmwsIHN5c2NhbGxfZ2xvYiwgaWR4KTsKPiA+IC19Cj4gPiAtI2Vu ZGlmIC8qIEhBVkVfU1lTQ0FMTF9UQUJMRV9TVVBQT1JUICovCj4gPgo+ID4gLS0KPiA+IDIuMzQu MQo+ID4KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxp bnV4LXJpc2N2IG1haWxpbmcgbGlzdApsaW51eC1yaXNjdkBsaXN0cy5pbmZyYWRlYWQub3JnCmh0 dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtcmlzY3YK