From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-dy1-f178.google.com (mail-dy1-f178.google.com [74.125.82.178]) (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 8D55B37AA81 for ; Tue, 30 Jun 2026 06:14:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.178 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782800055; cv=none; b=tKZmNdqxBGQDjUU2Cs9w4AGaIKrl04hJJFXMjIvLADEOw+Hvfu3KY4XGNZVdacAJv3QkdzDYZZpDCDz0puy5rsLRtCjBC178REJ4BTuY0oo0RKjqbgGSHDQ+ZfF6h/+aAdzSxRweJ5DtqH1D6bATNsPnlTvF4iZVO46ss1qWNhE= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782800055; c=relaxed/simple; bh=BCX2akkhmmnaIZWDdudQQH9BULKqJHzDvO2oUnBo4gM=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=ryOsW+KyEWXiF4rjZmrRG1VbIB+9r4jqKwFQ49HPGA3g5A+3v2xeBkiVa/jFyRjC9BXxj2X6n2f8RsipK0/HPmB2H6fy+N89/JO6D1DnWrPmq9PrafD5HTaZHTGVFETmwSBFzOSMW7dNWDsuz6nCB/DII5lcAKEXebM6RSlzbOY= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=W/VvzIea; arc=none smtp.client-ip=74.125.82.178 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="W/VvzIea" Received: by mail-dy1-f178.google.com with SMTP id 5a478bee46e88-30df5854e1eso252927eec.0 for ; Mon, 29 Jun 2026 23:14:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1782800053; x=1783404853; 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=kQ4pwxtyxCm1G5M66xxdmEUDpbEAdNwzhoPavDK6tNs=; b=W/VvzIeaDL5z/x4oWJH9DmLoCBvoKVdXFEo54vs7MKd7DG4eVXfaYAviGkbLa1Uf1k LJ/XaPkIw/5Zke3cW2L9EqRWOMsIbbMMEt3GHXA04jp4s4Gt2CmguXuMIybMyrC1GXkL /R88k2NYAPsdPMKmBNZOBZjuGCaqIiFtJbLFKJsXeNMF4g34w7eO2zvI4z5itZNY1kCJ SvxprX9Uq2jIvIUQk7bmJ4sb2TIAZH237u0cCzy2BkpomGKc0p0MLwUQuYDtLk5YMw6m Tc5Svu27E6abYzzAzlW0c2mKxnlwhgiDDOwcyuhd3gOR1rZ2xCV1paDVihKer6BCOTag eZlA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782800053; x=1783404853; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=kQ4pwxtyxCm1G5M66xxdmEUDpbEAdNwzhoPavDK6tNs=; b=AbDh1ImiCNINYkWkV2sW3s0PdFbEMZTa4YxvMVVwHP7i+PQMQnxEqx59QxF52PqvJp CHdZEVURWx6hSeI1MvC7gt4HJHMPQqG1IUmX5PgvtutOiBIeFGw3zK5S/SXJwvOz4qJL SU6IIsKEe+yHVlt/Ixx6302uozhJLYIuIcOJHUMDxyiJP/nVW/rdTIB2wPEP4irWBYb+ 9/goLLCTmXLUWQ/p8KkzYOcbN0AtE4aFO8dDidVrtSYvVqTulqk7pQs/IYRO5+IvmIou kPU4goubXMZAZ/DQ9IGQeNdOBPoT14fEq53zwC9yzF9uwa6bm35HXGD2usT+iXNtEyI2 p5hg== X-Forwarded-Encrypted: i=1; AHgh+RrDbnioV6f7VZKBPGke5C5NbgsS15e6O+CMwwevdremxVI9sQWoxz+rFf4OivTwePju+ViGj7E82gkPtx0=@vger.kernel.org X-Gm-Message-State: AOJu0YxGQo/+KDfFWxxJyk0QocS3mrnt4BcQAOmhIjcD5oHRnwx28ltO cknZRlg9uG1N/G3jPJmJ9WT1caSA3Lt7izS4i2YlutfVpG6XFm0YM6LC X-Gm-Gg: AfdE7cl24Y98QE1+I6ebriDMEkI7+er5ypThYEhk+mwnY37rdNHDT8gBiaQP6jhD+tA h1IYNB8ABf1dtA4lLkaLmobzpvCzfUjqtnQo2VVr10xtBrVoMcylLz9LQscmFmepuNoEVwj1xJA UOKcg4lXg7LYEPbsZ+bNepCkPjZz4i1HMkwbexS6PKc7B19+aSzqdcUubivzHWclPjmf7rRrYW5 nSoauaQTT//4bhqKi/PWVk8xoF60gd0HCidBbImny5qg5oGAei8xeWIXOQrX+ynSKhcDhOuCfNa 1s9B3SWJJKdh1aGIRFbdh/1E18pSbexdVl1DOwUT2X0PjwUWI6Ahszqz1UGxW5P3woqj7RFjcFx zaSyXVcWheaFF5GTT0fBf1S2/o/3sJ0gQP4hV1TkluNPdcBrvrvDr4k0URmRhqMhvK7RkykVXUb vxeksdtjTqrfZrdZcslG5T92h9evKJAzS0 X-Received: by 2002:a05:7300:6115:b0:30c:9ca4:5cd0 with SMTP id 5a478bee46e88-30ee9f63cdamr444602eec.4.1782800052515; Mon, 29 Jun 2026 23:14:12 -0700 (PDT) Received: from blinky ([2601:647:6700:64d0::94ac]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-30ee326c7a7sm4344373eec.29.2026.06.29.23.14.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Jun 2026 23:14:11 -0700 (PDT) Date: Mon, 29 Jun 2026 23:14:09 -0700 From: Charlie Jenkins To: Jesse T Cc: Paul Walmsley , Palmer Dabbelt , Nam Cao , Alexandre Ghiti , Anup Patel , Atish Patra , Conor Dooley , Paolo Bonzini , Andrew Morton , Shuah Khan , Radim =?utf-8?B?S3LEjW3DocWZ?= , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org Subject: Re: [PATCH v2 07/16] riscv: Use generated instruction headers for misaligned loads/stores Message-ID: References: <20260621-riscv_insn_table-v2-0-7f0810ee2274@gmail.com> <20260621-riscv_insn_table-v2-7-7f0810ee2274@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@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 Mon, Jun 29, 2026 at 04:20:15PM -0400, Jesse T wrote: > On Mon, Jun 22, 2026 at 12:08 AM Charlie Jenkins via B4 Relay > wrote: > > > > From: Charlie Jenkins > > > > Migrate the misaligned loads/store code to use the generated instruction > > headers instead of the hand-written instruction composition functions. > > > > Signed-off-by: Charlie Jenkins > > > > --- > > > > Similar to the other patches of this series, I extracted out the logic > > of this function and brute forced all possible inputs to validate that > > the outputs are the same. To verify this change in the kernel, I booted > > on Spike and used the misaligned access checker which does some > > misaligned accesses. > > --- > > arch/riscv/kernel/traps_misaligned.c | 183 ++++++++++++++++------------------- > > 1 file changed, 83 insertions(+), 100 deletions(-) > > > > diff --git a/arch/riscv/kernel/traps_misaligned.c b/arch/riscv/kernel/traps_misaligned.c > > index 81b7682e6c6d..4d2a2432e0c4 100644 > > --- a/arch/riscv/kernel/traps_misaligned.c > > +++ b/arch/riscv/kernel/traps_misaligned.c > > @@ -22,15 +22,11 @@ > > > > #ifdef CONFIG_FPU > > > > -#define FP_GET_RD(insn) (insn >> 7 & 0x1F) > > - > > extern void put_f32_reg(unsigned long fp_reg, unsigned long value); > > > > -static int set_f32_rd(unsigned long insn, struct pt_regs *regs, > > +static int set_f32_rd(unsigned long fp_reg, struct pt_regs *regs, > > unsigned long val) > > { > > - unsigned long fp_reg = FP_GET_RD(insn); > > - > > put_f32_reg(fp_reg, val); > > regs->status |= SR_FS_DIRTY; > > > > @@ -39,9 +35,8 @@ static int set_f32_rd(unsigned long insn, struct pt_regs *regs, > > > > extern void put_f64_reg(unsigned long fp_reg, unsigned long value); > > > > -static int set_f64_rd(unsigned long insn, struct pt_regs *regs, u64 val) > > +static int set_f64_rd(unsigned long fp_reg, struct pt_regs *regs, u64 val) > > { > > - unsigned long fp_reg = FP_GET_RD(insn); > > unsigned long value; > > > > #if __riscv_xlen == 32 > > @@ -58,10 +53,8 @@ static int set_f64_rd(unsigned long insn, struct pt_regs *regs, u64 val) > > #if __riscv_xlen == 32 > > extern void get_f64_reg(unsigned long fp_reg, u64 *value); > > > > -static u64 get_f64_rs(unsigned long insn, u8 fp_reg_offset, > > - struct pt_regs *regs) > > +static u64 get_f64_rs(unsigned long fp_reg, struct pt_regs *regs) > > { > > - unsigned long fp_reg = (insn >> fp_reg_offset) & 0x1F; > > u64 val; > > > > get_f64_reg(fp_reg, &val); > > @@ -73,10 +66,8 @@ static u64 get_f64_rs(unsigned long insn, u8 fp_reg_offset, > > > > extern unsigned long get_f64_reg(unsigned long fp_reg); > > > > -static unsigned long get_f64_rs(unsigned long insn, u8 fp_reg_offset, > > - struct pt_regs *regs) > > +static unsigned long get_f64_rs(unsigned long fp_reg, struct pt_regs *regs) > > { > > - unsigned long fp_reg = (insn >> fp_reg_offset) & 0x1F; > > unsigned long val; > > > > val = get_f64_reg(fp_reg); > > @@ -89,10 +80,8 @@ static unsigned long get_f64_rs(unsigned long insn, u8 fp_reg_offset, > > > > extern unsigned long get_f32_reg(unsigned long fp_reg); > > > > -static unsigned long get_f32_rs(unsigned long insn, u8 fp_reg_offset, > > - struct pt_regs *regs) > > +static unsigned long get_f32_rs(unsigned long fp_reg, struct pt_regs *regs) > > { > > - unsigned long fp_reg = (insn >> fp_reg_offset) & 0x1F; > > unsigned long val; > > > > val = get_f32_reg(fp_reg); > > @@ -107,28 +96,18 @@ static void set_f32_rd(unsigned long insn, struct pt_regs *regs, > > > > static void set_f64_rd(unsigned long insn, struct pt_regs *regs, u64 val) {} > > > > -static unsigned long get_f64_rs(unsigned long insn, u8 fp_reg_offset, > > - struct pt_regs *regs) > > +static unsigned long get_f64_rs(unsigned long fp_reg, struct pt_regs *regs) > > { > > return 0; > > } > > > > -static unsigned long get_f32_rs(unsigned long insn, u8 fp_reg_offset, > > - struct pt_regs *regs) > > +static unsigned long get_f32_rs(unsigned long fp_reg, struct pt_regs *regs) > > { > > return 0; > > } > > > > #endif > > > > -#define GET_F64_RS2(insn, regs) (get_f64_rs(insn, 20, regs)) > > -#define GET_F64_RS2C(insn, regs) (get_f64_rs(insn, 2, regs)) > > -#define GET_F64_RS2S(insn, regs) (get_f64_rs(RVC_RS2S(insn), 0, regs)) > > - > > -#define GET_F32_RS2(insn, regs) (get_f32_rs(insn, 20, regs)) > > -#define GET_F32_RS2C(insn, regs) (get_f32_rs(insn, 2, regs)) > > -#define GET_F32_RS2S(insn, regs) (get_f32_rs(RVC_RS2S(insn), 0, regs)) > > - > > #define __read_insn(regs, insn, insn_addr, type) \ > > ({ \ > > int __ret; \ > > @@ -217,13 +196,13 @@ static int handle_vector_misaligned_load(struct pt_regs *regs) > > } > > #endif > > > > -static int handle_scalar_misaligned_load(struct pt_regs *regs) > > +static noinline int handle_scalar_misaligned_load(struct pt_regs *regs) > > { > > union reg_data val; > > unsigned long epc = regs->epc; > > unsigned long insn; > > unsigned long addr = regs->badaddr; > > - int fp = 0, shift = 0, len = 0; > > + int fp = 0, shift = 0, len = 0, rd = 0; > > > > perf_sw_event(PERF_COUNT_SW_ALIGNMENT_FAULTS, 1, regs, addr); > > > > @@ -240,68 +219,71 @@ static int handle_scalar_misaligned_load(struct pt_regs *regs) > > > > regs->epc = 0; > > > > - if ((insn & INSN_MASK_LW) == INSN_MATCH_LW) { > > + if (riscv_insn_is_lw(insn)) { > > len = 4; > > shift = 8 * (sizeof(unsigned long) - len); > > -#if defined(CONFIG_64BIT) > > - } else if ((insn & INSN_MASK_LD) == INSN_MATCH_LD) { > > + rd = riscv_insn_lw_extract_xd(insn); > > + } else if (riscv_insn_is_ld(insn)) { > > len = 8; > > shift = 8 * (sizeof(unsigned long) - len); > > - } else if ((insn & INSN_MASK_LWU) == INSN_MATCH_LWU) { > > + rd = riscv_insn_ld_extract_xd(insn); > > + } else if (riscv_insn_is_lwu(insn)) { > > len = 4; > > -#endif > > - } else if ((insn & INSN_MASK_FLD) == INSN_MATCH_FLD) { > > + rd = riscv_insn_lwu_extract_xd(insn); > > + } else if (riscv_insn_is_fld(insn)) { > > fp = 1; > > len = 8; > > - } else if ((insn & INSN_MASK_FLW) == INSN_MATCH_FLW) { > > + rd = riscv_insn_fld_extract_fd(insn); > > + } else if (riscv_insn_is_flw(insn)) { > > fp = 1; > > len = 4; > > - } else if ((insn & INSN_MASK_LH) == INSN_MATCH_LH) { > > + rd = riscv_insn_flw_extract_fd(insn); > > + } else if (riscv_insn_is_lh(insn)) { > > len = 2; > > shift = 8 * (sizeof(unsigned long) - len); > > - } else if ((insn & INSN_MASK_LHU) == INSN_MATCH_LHU) { > > + rd = riscv_insn_lh_extract_xd(insn); > > + } else if (riscv_insn_is_lhu(insn)) { > > len = 2; > > -#if defined(CONFIG_64BIT) > > - } else if ((insn & INSN_MASK_C_LD) == INSN_MATCH_C_LD) { > > + rd = riscv_insn_lhu_extract_xd(insn); > > + } else if (riscv_insn_is_c_ld(insn)) { > > len = 8; > > shift = 8 * (sizeof(unsigned long) - len); > > - insn = RVC_RS2S(insn) << SH_RD; > > - } else if ((insn & INSN_MASK_C_LDSP) == INSN_MATCH_C_LDSP && > > - ((insn >> SH_RD) & 0x1f)) { > > + rd = (8 + riscv_insn_c_ld_extract_xd(insn)); > > + } else if (riscv_insn_is_c_ldsp(insn)) { > > len = 8; > > shift = 8 * (sizeof(unsigned long) - len); > > -#endif > > - } else if ((insn & INSN_MASK_C_LW) == INSN_MATCH_C_LW) { > > + rd = riscv_insn_c_ldsp_extract_xd(insn); > > + } else if (riscv_insn_is_c_lw(insn)) { > > len = 4; > > shift = 8 * (sizeof(unsigned long) - len); > > - insn = RVC_RS2S(insn) << SH_RD; > > - } else if ((insn & INSN_MASK_C_LWSP) == INSN_MATCH_C_LWSP && > > - ((insn >> SH_RD) & 0x1f)) { > > + rd = (8 + riscv_insn_c_lw_extract_xd(insn)); > > + } else if (riscv_insn_is_c_lwsp(insn)) { > > len = 4; > > shift = 8 * (sizeof(unsigned long) - len); > > - } else if ((insn & INSN_MASK_C_FLD) == INSN_MATCH_C_FLD) { > > + rd = riscv_insn_c_lwsp_extract_xd(insn); > > + } else if (riscv_insn_is_c_fld(insn)) { > > fp = 1; > > len = 8; > > - insn = RVC_RS2S(insn) << SH_RD; > > - } else if ((insn & INSN_MASK_C_FLDSP) == INSN_MATCH_C_FLDSP) { > > + rd = (8 + riscv_insn_c_fld_extract_fd(insn)); > > + } else if (riscv_insn_is_c_fldsp(insn)) { > > fp = 1; > > len = 8; > > -#if defined(CONFIG_32BIT) > > - } else if ((insn & INSN_MASK_C_FLW) == INSN_MATCH_C_FLW) { > > + rd = riscv_insn_c_fldsp_extract_fd(insn); > > + } else if (riscv_insn_is_c_flw(insn)) { > > fp = 1; > > len = 4; > > - insn = RVC_RS2S(insn) << SH_RD; > > - } else if ((insn & INSN_MASK_C_FLWSP) == INSN_MATCH_C_FLWSP) { > > + rd = (8 + riscv_insn_c_flw_extract_fd(insn)); > > + } else if (riscv_insn_is_c_flwsp(insn)) { > > fp = 1; > > len = 4; > > -#endif > > - } else if ((insn & INSN_MASK_C_LHU) == INSN_MATCH_C_LHU) { > > + rd = riscv_insn_c_flwsp_extract_fd(insn); > > + } else if (riscv_insn_is_c_lhu(insn)) { > > len = 2; > > - insn = RVC_RS2S(insn) << SH_RD; > > - } else if ((insn & INSN_MASK_C_LH) == INSN_MATCH_C_LH) { > > + rd = (8 + riscv_insn_c_lhu_extract_xd(insn)); > > + } else if (riscv_insn_is_c_lh(insn)) { > > len = 2; > > - shift = 8 * (sizeof(ulong) - len); > > - insn = RVC_RS2S(insn) << SH_RD; > > + shift = 8 * (sizeof(unsigned long) - len); > > + rd = (8 + riscv_insn_c_lh_extract_xd(insn)); > > } else { > > regs->epc = epc; > > return -1; > > @@ -319,11 +301,11 @@ static int handle_scalar_misaligned_load(struct pt_regs *regs) > > } > > > > if (!fp) > > - SET_RD(insn, regs, (long)(val.data_ulong << shift) >> shift); > > + *(unsigned long *)((unsigned long *)regs + rd) = val.data_ulong << shift; > > else if (len == 8) > > - set_f64_rd(insn, regs, val.data_u64); > > + set_f64_rd(rd, regs, val.data_u64); > > else > > - set_f32_rd(insn, regs, val.data_ulong); > > + set_f32_rd(rd, regs, val.data_ulong); > > > > regs->epc = epc + INSN_LEN(insn); > > > > @@ -336,7 +318,7 @@ static int handle_scalar_misaligned_store(struct pt_regs *regs) > > unsigned long epc = regs->epc; > > unsigned long insn; > > unsigned long addr = regs->badaddr; > > - int len = 0, fp = 0; > > + int fp = 0, len = 0, rd = 0; > > > > perf_sw_event(PERF_COUNT_SW_ALIGNMENT_FAULTS, 1, regs, addr); > > > > @@ -351,67 +333,68 @@ static int handle_scalar_misaligned_store(struct pt_regs *regs) > > > > regs->epc = 0; > > > > - val.data_ulong = GET_RS2(insn, regs); > > - > > - if ((insn & INSN_MASK_SW) == INSN_MATCH_SW) { > > + if (riscv_insn_is_sw(insn)) { > > len = 4; > > -#if defined(CONFIG_64BIT) > > - } else if ((insn & INSN_MASK_SD) == INSN_MATCH_SD) { > > + rd = riscv_insn_sw_extract_xs2(insn); > > + } else if (riscv_insn_is_sd(insn)) { > > len = 8; > > -#endif > > - } else if ((insn & INSN_MASK_FSD) == INSN_MATCH_FSD) { > > + rd = riscv_insn_sd_extract_xs2(insn); > > + } else if (riscv_insn_is_fsd(insn)) { > > fp = 1; > > len = 8; > > - val.data_u64 = GET_F64_RS2(insn, regs); > > - } else if ((insn & INSN_MASK_FSW) == INSN_MATCH_FSW) { > > + rd = riscv_insn_fsd_extract_fs2(insn); > > + } else if (riscv_insn_is_fsw(insn)) { > > fp = 1; > > len = 4; > > - val.data_ulong = GET_F32_RS2(insn, regs); > > - } else if ((insn & INSN_MASK_SH) == INSN_MATCH_SH) { > > + rd = riscv_insn_fsw_extract_fs2(insn); > > + } else if (riscv_insn_is_sh(insn)) { > > len = 2; > > -#if defined(CONFIG_64BIT) > > - } else if ((insn & INSN_MASK_C_SD) == INSN_MATCH_C_SD) { > > + rd = riscv_insn_sh_extract_xs2(insn); > > + } else if (riscv_insn_is_c_sd(insn)) { > > len = 8; > > - val.data_ulong = GET_RS2S(insn, regs); > > - } else if ((insn & INSN_MASK_C_SDSP) == INSN_MATCH_C_SDSP) { > > + rd = riscv_insn_c_sd_extract_xs2(insn); > > + } else if (riscv_insn_is_c_sdsp(insn)) { > > len = 8; > > - val.data_ulong = GET_RS2C(insn, regs); > > -#endif > > - } else if ((insn & INSN_MASK_C_SW) == INSN_MATCH_C_SW) { > > + rd = riscv_insn_c_sdsp_extract_xs2(insn); > > + } else if (riscv_insn_is_c_sw(insn)) { > > len = 4; > > - val.data_ulong = GET_RS2S(insn, regs); > > - } else if ((insn & INSN_MASK_C_SWSP) == INSN_MATCH_C_SWSP) { > > + rd = riscv_insn_c_sw_extract_xs2(insn); > > + } else if (riscv_insn_is_c_swsp(insn)) { > > len = 4; > > - val.data_ulong = GET_RS2C(insn, regs); > > - } else if ((insn & INSN_MASK_C_FSD) == INSN_MATCH_C_FSD) { > > + rd = riscv_insn_c_swsp_extract_xs2(insn); > > + } else if (riscv_insn_is_c_fsd(insn)) { > > fp = 1; > > len = 8; > > - val.data_u64 = GET_F64_RS2S(insn, regs); > > - } else if ((insn & INSN_MASK_C_FSDSP) == INSN_MATCH_C_FSDSP) { > > + rd = riscv_insn_c_fsd_extract_fs2(insn); > > + } else if (riscv_insn_is_c_fsdsp(insn)) { > > fp = 1; > > len = 8; > > - val.data_u64 = GET_F64_RS2C(insn, regs); > > -#if !defined(CONFIG_64BIT) > > Shouldn't we keep this? The ifdef doesn't matter anymore because the new riscv_insn_is_*() have are all ifdef'd out so unconditionally return false if they are not supported on CONFIG_64BIT/CONFIG_32BIT. > > > - } else if ((insn & INSN_MASK_C_FSW) == INSN_MATCH_C_FSW) { > > + rd = riscv_insn_c_fsdsp_extract_fs2(insn); > > + } else if (riscv_insn_is_c_fsw(insn)) { > > fp = 1; > > len = 4; > > - val.data_ulong = GET_F32_RS2S(insn, regs); > > - } else if ((insn & INSN_MASK_C_FSWSP) == INSN_MATCH_C_FSWSP) { > > + rd = riscv_insn_c_fsw_extract_fs2(insn); > > + } else if (riscv_insn_is_c_fswsp(insn)) { > > fp = 1; > > len = 4; > > - val.data_ulong = GET_F32_RS2C(insn, regs); > > -#endif > > - } else if ((insn & INSN_MASK_C_SH) == INSN_MATCH_C_SH) { > > + rd = riscv_insn_c_fswsp_extract_fs2(insn); > > + } else if (riscv_insn_is_c_sh(insn)) { > > len = 2; > > - val.data_ulong = GET_RS2S(insn, regs); > > + rd = riscv_insn_c_sh_extract_xs2(insn); > > } else { > > - regs->epc = epc; > > This line should be kept. Oh huh I wonder why I got rid of this. Good catch, thank you! - Charlie > > Thanks, > Jesse Taube > > > return -1; > > } > > > > if (!IS_ENABLED(CONFIG_FPU) && fp) > > return -EOPNOTSUPP; > > > > + if (!fp) > > + val.data_ulong = *(unsigned long *)((unsigned long *)regs + rd); > > + else if (len == 8) > > + val.data_u64 = get_f64_rs(rd, regs); > > + else > > + val.data_ulong = get_f32_rs(rd, regs); > > + > > if (user_mode(regs)) { > > if (copy_to_user((u8 __user *)addr, &val, len)) > > return -1; > > > > -- > > 2.54.0 > > > > > > > > _______________________________________________ > > linux-riscv mailing list > > linux-riscv@lists.infradead.org > > http://lists.infradead.org/mailman/listinfo/linux-riscv 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 B9998C43458 for ; Tue, 30 Jun 2026 06:14:27 +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=6MRrqSZQJyOZuQxPVJpr3MGRuN57Tf7XUDJYA09YRNg=; b=Z9pZZaFZwVC3Vn DPpI4g7a/A4SVO+A07JsXxASc/234skNeW3KJrD4SjiADmQXNlx8T/K/xVom0y4X4iripqJ4MpRxD T/DAC/x9xVlTU6E0oxpqdhfLijxv7cMnZOdDGdQLP4vb9A/kTbpjIkgg4T9QINANBIcHE462gyLKZ DPtqJNkiuVSJKNdQgP24mtq7U6KVqGk54arCP1BH6ZK9L8erLS4AiV/3/v3g8ber0mfQxW3zo1xbN LzqAZEm01eDH4ZlMnWzVq9wfsU+JGaEqDVRFpRdZ/hexhvVdgc5v3HlY1Y2V5UXho3garsij0Kpmo hjWQ+yofA4LDWtDB2ygg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1weRjd-0000000FtHg-0Hyo; Tue, 30 Jun 2026 06:14:17 +0000 Received: from mail-dl1-x122c.google.com ([2607:f8b0:4864:20::122c]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1weRjZ-0000000FtGK-2K92 for linux-riscv@lists.infradead.org; Tue, 30 Jun 2026 06:14:16 +0000 Received: by mail-dl1-x122c.google.com with SMTP id a92af1059eb24-139f71a5201so305535c88.0 for ; Mon, 29 Jun 2026 23:14:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1782800053; x=1783404853; 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=kQ4pwxtyxCm1G5M66xxdmEUDpbEAdNwzhoPavDK6tNs=; b=XFvGl1rh8XKcKjnle7lArChs+Z6KIdS3VxOU5xpeK8zq3DAmzlbUXV7F5K07kDKwux s8jwBCK2Lx1w3cydhCnKfqqa5ctycfFkwYJcKReXi83DX7kbFTkBZjJKznqV7ARd3/JF V/w5yTB2Z94QMw0V/QL6xm5BfdVLUhlxCk/3HlEdFArTsVoUaZd29QKiCrgtLHLDvC1R oUcHz2qnFHw8U33UvdlUt2/ycBFQWKGEXLSM8VrjSr1ToTVU1sD/saMqOZNrblrMYj31 xrtfVolKB3mAavTIbtTwhCxS5pi/35qagZKtf/Q3eSxGfVMu/c01d8QzhCNvJSZJQvMn KfeA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782800053; x=1783404853; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=kQ4pwxtyxCm1G5M66xxdmEUDpbEAdNwzhoPavDK6tNs=; b=n/w61xbqKTq4ObB9S5N4NuQn3RcglP+FNhGt9R6MhgRZp1AHt3wsIBy0DBcMtUU+iq N7Kz84Hl3mTV5YCDbyHVchv/AcoFJSAgepdYvQawjSTxRJO21/UspxhoVS+K40GJLig+ Bo8oEQZkk3zn2YxnNkvPuZACaLfFwuyppc0TcJ7byy6fsp+D/3yCESP3tfe4ONe+XTk9 Z+Q3AkRFPkWl+OSqEi1yQfUj0RA8bOYw0rDKX3qqm7n4zFYtAU+97IysE8zpL0OPkjWs E8EwHxVxDFTY1g9ZLC+/j9OFFbjYFiYBDmow/2+HPLdrHi1qX81opwIYQbhsCFuwP3Ad RAHg== X-Forwarded-Encrypted: i=1; AHgh+Ronc5GVwbfOeowq599cQF2eWjRvloeh6vMgV3/tNMfugknlCXjc0CPFdKIlDzHj8KFL3Un7moj8gh1jhg==@lists.infradead.org X-Gm-Message-State: AOJu0Yx9tjZ1oTwmu0DSsGzwdTSZkp0B/oTwYmVpCMx3DkII/+YwdUGv 1MBiYVhpYtNs7gaVwTcbaDR5iN+JrxHOrqlX2szcbJ64Rd7gc57hNNPWsxeBH5iV X-Gm-Gg: AfdE7ckTgtxVUXwo2fju4PKwZVaKGGXJpbe/bCqMuwACT3MCXLJsT75YZgLnHDfKjUo 8TwBL51/fA45p+cbdwwVvTQbSpQUtgwKAOh12i5M4ze0X3yUmSJe4Jo4OW7F7+Mhc0zjJCuJy+E tjfIBbPZmYnQuPq0dzrIZGjCCcznzhgLPilsBhRrcjVx4MYDnjqhPKaCxwgbIL1L2u/QZo5S29l E3sLfiZGOoCBgdkuk808P/m9HS65lAH5pfvDbIAe+HrLWrSkL7oJgCjRy5Ec6622rmmQdQJ77Vh XypAy3km8QgYizhJpjc1UkGuNdmtcG3hvB3B/Nhn1A+j+DEU5c2ClEhjPKupRYNMjzjXrpIEZdr UpEBw92PFe4sVyukngza5HerRFIzIjZIcP3xNOZWrIl1nDMzOsKXkjTjH+yy0RQGfQW/NcAb4CD TkgbgdTBhceOWxBW0MHPv7j8r3zf0UgP8r X-Received: by 2002:a05:7300:6115:b0:30c:9ca4:5cd0 with SMTP id 5a478bee46e88-30ee9f63cdamr444602eec.4.1782800052515; Mon, 29 Jun 2026 23:14:12 -0700 (PDT) Received: from blinky ([2601:647:6700:64d0::94ac]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-30ee326c7a7sm4344373eec.29.2026.06.29.23.14.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Jun 2026 23:14:11 -0700 (PDT) Date: Mon, 29 Jun 2026 23:14:09 -0700 From: Charlie Jenkins To: Jesse T Cc: Paul Walmsley , Palmer Dabbelt , Nam Cao , Alexandre Ghiti , Anup Patel , Atish Patra , Conor Dooley , Paolo Bonzini , Andrew Morton , Shuah Khan , Radim =?utf-8?B?S3LEjW3DocWZ?= , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org Subject: Re: [PATCH v2 07/16] riscv: Use generated instruction headers for misaligned loads/stores Message-ID: References: <20260621-riscv_insn_table-v2-0-7f0810ee2274@gmail.com> <20260621-riscv_insn_table-v2-7-7f0810ee2274@gmail.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.9.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20260629_231413_617875_519B74D4 X-CRM114-Status: GOOD ( 25.88 ) 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 T24gTW9uLCBKdW4gMjksIDIwMjYgYXQgMDQ6MjA6MTVQTSAtMDQwMCwgSmVzc2UgVCB3cm90ZToK PiBPbiBNb24sIEp1biAyMiwgMjAyNiBhdCAxMjowOOKAr0FNIENoYXJsaWUgSmVua2lucyB2aWEg QjQgUmVsYXkKPiA8ZGV2bnVsbCt0aGVjaGFybGVzamVua2lucy5nbWFpbC5jb21Aa2VybmVsLm9y Zz4gd3JvdGU6Cj4gPgo+ID4gRnJvbTogQ2hhcmxpZSBKZW5raW5zIDx0aGVjaGFybGVzamVua2lu c0BnbWFpbC5jb20+Cj4gPgo+ID4gTWlncmF0ZSB0aGUgbWlzYWxpZ25lZCBsb2Fkcy9zdG9yZSBj b2RlIHRvIHVzZSB0aGUgZ2VuZXJhdGVkIGluc3RydWN0aW9uCj4gPiBoZWFkZXJzIGluc3RlYWQg b2YgdGhlIGhhbmQtd3JpdHRlbiBpbnN0cnVjdGlvbiBjb21wb3NpdGlvbiBmdW5jdGlvbnMuCj4g Pgo+ID4gU2lnbmVkLW9mZi1ieTogQ2hhcmxpZSBKZW5raW5zIDx0aGVjaGFybGVzamVua2luc0Bn bWFpbC5jb20+Cj4gPgo+ID4gLS0tCj4gPgo+ID4gU2ltaWxhciB0byB0aGUgb3RoZXIgcGF0Y2hl cyBvZiB0aGlzIHNlcmllcywgSSBleHRyYWN0ZWQgb3V0IHRoZSBsb2dpYwo+ID4gb2YgdGhpcyBm dW5jdGlvbiBhbmQgYnJ1dGUgZm9yY2VkIGFsbCBwb3NzaWJsZSBpbnB1dHMgdG8gdmFsaWRhdGUg dGhhdAo+ID4gdGhlIG91dHB1dHMgYXJlIHRoZSBzYW1lLiBUbyB2ZXJpZnkgdGhpcyBjaGFuZ2Ug aW4gdGhlIGtlcm5lbCwgSSBib290ZWQKPiA+IG9uIFNwaWtlIGFuZCB1c2VkIHRoZSBtaXNhbGln bmVkIGFjY2VzcyBjaGVja2VyIHdoaWNoIGRvZXMgc29tZQo+ID4gbWlzYWxpZ25lZCBhY2Nlc3Nl cy4KPiA+IC0tLQo+ID4gIGFyY2gvcmlzY3Yva2VybmVsL3RyYXBzX21pc2FsaWduZWQuYyB8IDE4 MyArKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLQo+ID4gIDEgZmlsZSBjaGFuZ2Vk LCA4MyBpbnNlcnRpb25zKCspLCAxMDAgZGVsZXRpb25zKC0pCj4gPgo+ID4gZGlmZiAtLWdpdCBh L2FyY2gvcmlzY3Yva2VybmVsL3RyYXBzX21pc2FsaWduZWQuYyBiL2FyY2gvcmlzY3Yva2VybmVs L3RyYXBzX21pc2FsaWduZWQuYwo+ID4gaW5kZXggODFiNzY4MmU2YzZkLi40ZDJhMjQzMmUwYzQg MTAwNjQ0Cj4gPiAtLS0gYS9hcmNoL3Jpc2N2L2tlcm5lbC90cmFwc19taXNhbGlnbmVkLmMKPiA+ ICsrKyBiL2FyY2gvcmlzY3Yva2VybmVsL3RyYXBzX21pc2FsaWduZWQuYwo+ID4gQEAgLTIyLDE1 ICsyMiwxMSBAQAo+ID4KPiA+ICAjaWZkZWYgQ09ORklHX0ZQVQo+ID4KPiA+IC0jZGVmaW5lIEZQ X0dFVF9SRChpbnNuKSAgICAgICAgICAgICAgICAoaW5zbiA+PiA3ICYgMHgxRikKPiA+IC0KPiA+ ICBleHRlcm4gdm9pZCBwdXRfZjMyX3JlZyh1bnNpZ25lZCBsb25nIGZwX3JlZywgdW5zaWduZWQg bG9uZyB2YWx1ZSk7Cj4gPgo+ID4gLXN0YXRpYyBpbnQgc2V0X2YzMl9yZCh1bnNpZ25lZCBsb25n IGluc24sIHN0cnVjdCBwdF9yZWdzICpyZWdzLAo+ID4gK3N0YXRpYyBpbnQgc2V0X2YzMl9yZCh1 bnNpZ25lZCBsb25nIGZwX3JlZywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCj4gPiAgICAgICAgICAg ICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB2YWwpCj4gPiAgewo+ID4gLSAgICAgICB1bnNpZ25l ZCBsb25nIGZwX3JlZyA9IEZQX0dFVF9SRChpbnNuKTsKPiA+IC0KPiA+ICAgICAgICAgcHV0X2Yz Ml9yZWcoZnBfcmVnLCB2YWwpOwo+ID4gICAgICAgICByZWdzLT5zdGF0dXMgfD0gU1JfRlNfRElS VFk7Cj4gPgo+ID4gQEAgLTM5LDkgKzM1LDggQEAgc3RhdGljIGludCBzZXRfZjMyX3JkKHVuc2ln bmVkIGxvbmcgaW5zbiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCj4gPgo+ID4gIGV4dGVybiB2b2lk IHB1dF9mNjRfcmVnKHVuc2lnbmVkIGxvbmcgZnBfcmVnLCB1bnNpZ25lZCBsb25nIHZhbHVlKTsK PiA+Cj4gPiAtc3RhdGljIGludCBzZXRfZjY0X3JkKHVuc2lnbmVkIGxvbmcgaW5zbiwgc3RydWN0 IHB0X3JlZ3MgKnJlZ3MsIHU2NCB2YWwpCj4gPiArc3RhdGljIGludCBzZXRfZjY0X3JkKHVuc2ln bmVkIGxvbmcgZnBfcmVnLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgdTY0IHZhbCkKPiA+ICB7Cj4g PiAtICAgICAgIHVuc2lnbmVkIGxvbmcgZnBfcmVnID0gRlBfR0VUX1JEKGluc24pOwo+ID4gICAg ICAgICB1bnNpZ25lZCBsb25nIHZhbHVlOwo+ID4KPiA+ICAjaWYgX19yaXNjdl94bGVuID09IDMy Cj4gPiBAQCAtNTgsMTAgKzUzLDggQEAgc3RhdGljIGludCBzZXRfZjY0X3JkKHVuc2lnbmVkIGxv bmcgaW5zbiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHU2NCB2YWwpCj4gPiAgI2lmIF9fcmlzY3Zf eGxlbiA9PSAzMgo+ID4gIGV4dGVybiB2b2lkIGdldF9mNjRfcmVnKHVuc2lnbmVkIGxvbmcgZnBf cmVnLCB1NjQgKnZhbHVlKTsKPiA+Cj4gPiAtc3RhdGljIHU2NCBnZXRfZjY0X3JzKHVuc2lnbmVk IGxvbmcgaW5zbiwgdTggZnBfcmVnX29mZnNldCwKPiA+IC0gICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgcHRfcmVncyAqcmVncykKPiA+ICtzdGF0aWMgdTY0IGdldF9mNjRfcnModW5zaWduZWQg bG9uZyBmcF9yZWcsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQo+ID4gIHsKPiA+IC0gICAgICAgdW5z aWduZWQgbG9uZyBmcF9yZWcgPSAoaW5zbiA+PiBmcF9yZWdfb2Zmc2V0KSAmIDB4MUY7Cj4gPiAg ICAgICAgIHU2NCB2YWw7Cj4gPgo+ID4gICAgICAgICBnZXRfZjY0X3JlZyhmcF9yZWcsICZ2YWwp Owo+ID4gQEAgLTczLDEwICs2Niw4IEBAIHN0YXRpYyB1NjQgZ2V0X2Y2NF9ycyh1bnNpZ25lZCBs b25nIGluc24sIHU4IGZwX3JlZ19vZmZzZXQsCj4gPgo+ID4gIGV4dGVybiB1bnNpZ25lZCBsb25n IGdldF9mNjRfcmVnKHVuc2lnbmVkIGxvbmcgZnBfcmVnKTsKPiA+Cj4gPiAtc3RhdGljIHVuc2ln bmVkIGxvbmcgZ2V0X2Y2NF9ycyh1bnNpZ25lZCBsb25nIGluc24sIHU4IGZwX3JlZ19vZmZzZXQs Cj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdz KQo+ID4gK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9mNjRfcnModW5zaWduZWQgbG9uZyBmcF9y ZWcsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQo+ID4gIHsKPiA+IC0gICAgICAgdW5zaWduZWQgbG9u ZyBmcF9yZWcgPSAoaW5zbiA+PiBmcF9yZWdfb2Zmc2V0KSAmIDB4MUY7Cj4gPiAgICAgICAgIHVu c2lnbmVkIGxvbmcgdmFsOwo+ID4KPiA+ICAgICAgICAgdmFsID0gZ2V0X2Y2NF9yZWcoZnBfcmVn KTsKPiA+IEBAIC04OSwxMCArODAsOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfZjY0X3Jz KHVuc2lnbmVkIGxvbmcgaW5zbiwgdTggZnBfcmVnX29mZnNldCwKPiA+Cj4gPiAgZXh0ZXJuIHVu c2lnbmVkIGxvbmcgZ2V0X2YzMl9yZWcodW5zaWduZWQgbG9uZyBmcF9yZWcpOwo+ID4KPiA+IC1z dGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfZjMyX3JzKHVuc2lnbmVkIGxvbmcgaW5zbiwgdTggZnBf cmVnX29mZnNldCwKPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHB0 X3JlZ3MgKnJlZ3MpCj4gPiArc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X2YzMl9ycyh1bnNpZ25l ZCBsb25nIGZwX3JlZywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCj4gPiAgewo+ID4gLSAgICAgICB1 bnNpZ25lZCBsb25nIGZwX3JlZyA9IChpbnNuID4+IGZwX3JlZ19vZmZzZXQpICYgMHgxRjsKPiA+ ICAgICAgICAgdW5zaWduZWQgbG9uZyB2YWw7Cj4gPgo+ID4gICAgICAgICB2YWwgPSBnZXRfZjMy X3JlZyhmcF9yZWcpOwo+ID4gQEAgLTEwNywyOCArOTYsMTggQEAgc3RhdGljIHZvaWQgc2V0X2Yz Ml9yZCh1bnNpZ25lZCBsb25nIGluc24sIHN0cnVjdCBwdF9yZWdzICpyZWdzLAo+ID4KPiA+ICBz dGF0aWMgdm9pZCBzZXRfZjY0X3JkKHVuc2lnbmVkIGxvbmcgaW5zbiwgc3RydWN0IHB0X3JlZ3Mg KnJlZ3MsIHU2NCB2YWwpIHt9Cj4gPgo+ID4gLXN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9mNjRf cnModW5zaWduZWQgbG9uZyBpbnNuLCB1OCBmcF9yZWdfb2Zmc2V0LAo+ID4gLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKPiA+ICtzdGF0aWMgdW5z aWduZWQgbG9uZyBnZXRfZjY0X3JzKHVuc2lnbmVkIGxvbmcgZnBfcmVnLCBzdHJ1Y3QgcHRfcmVn cyAqcmVncykKPiA+ICB7Cj4gPiAgICAgICAgIHJldHVybiAwOwo+ID4gIH0KPiA+Cj4gPiAtc3Rh dGljIHVuc2lnbmVkIGxvbmcgZ2V0X2YzMl9ycyh1bnNpZ25lZCBsb25nIGluc24sIHU4IGZwX3Jl Z19vZmZzZXQsCj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwdF9y ZWdzICpyZWdzKQo+ID4gK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9mMzJfcnModW5zaWduZWQg bG9uZyBmcF9yZWcsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQo+ID4gIHsKPiA+ICAgICAgICAgcmV0 dXJuIDA7Cj4gPiAgfQo+ID4KPiA+ICAjZW5kaWYKPiA+Cj4gPiAtI2RlZmluZSBHRVRfRjY0X1JT MihpbnNuLCByZWdzKSAoZ2V0X2Y2NF9ycyhpbnNuLCAyMCwgcmVncykpCj4gPiAtI2RlZmluZSBH RVRfRjY0X1JTMkMoaW5zbiwgcmVncykgKGdldF9mNjRfcnMoaW5zbiwgMiwgcmVncykpCj4gPiAt I2RlZmluZSBHRVRfRjY0X1JTMlMoaW5zbiwgcmVncykgKGdldF9mNjRfcnMoUlZDX1JTMlMoaW5z biksIDAsIHJlZ3MpKQo+ID4gLQo+ID4gLSNkZWZpbmUgR0VUX0YzMl9SUzIoaW5zbiwgcmVncykg KGdldF9mMzJfcnMoaW5zbiwgMjAsIHJlZ3MpKQo+ID4gLSNkZWZpbmUgR0VUX0YzMl9SUzJDKGlu c24sIHJlZ3MpIChnZXRfZjMyX3JzKGluc24sIDIsIHJlZ3MpKQo+ID4gLSNkZWZpbmUgR0VUX0Yz Ml9SUzJTKGluc24sIHJlZ3MpIChnZXRfZjMyX3JzKFJWQ19SUzJTKGluc24pLCAwLCByZWdzKSkK PiA+IC0KPiA+ICAjZGVmaW5lIF9fcmVhZF9pbnNuKHJlZ3MsIGluc24sIGluc25fYWRkciwgdHlw ZSkgICAgICAgXAo+ID4gICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCj4gPiAgICAgICAgIGludCBfX3JldDsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKPiA+IEBAIC0yMTcsMTMgKzE5NiwxMyBAQCBzdGF0aWMgaW50 IGhhbmRsZV92ZWN0b3JfbWlzYWxpZ25lZF9sb2FkKHN0cnVjdCBwdF9yZWdzICpyZWdzKQo+ID4g IH0KPiA+ICAjZW5kaWYKPiA+Cj4gPiAtc3RhdGljIGludCBoYW5kbGVfc2NhbGFyX21pc2FsaWdu ZWRfbG9hZChzdHJ1Y3QgcHRfcmVncyAqcmVncykKPiA+ICtzdGF0aWMgbm9pbmxpbmUgaW50IGhh bmRsZV9zY2FsYXJfbWlzYWxpZ25lZF9sb2FkKHN0cnVjdCBwdF9yZWdzICpyZWdzKQo+ID4gIHsK PiA+ICAgICAgICAgdW5pb24gcmVnX2RhdGEgdmFsOwo+ID4gICAgICAgICB1bnNpZ25lZCBsb25n IGVwYyA9IHJlZ3MtPmVwYzsKPiA+ICAgICAgICAgdW5zaWduZWQgbG9uZyBpbnNuOwo+ID4gICAg ICAgICB1bnNpZ25lZCBsb25nIGFkZHIgPSByZWdzLT5iYWRhZGRyOwo+ID4gLSAgICAgICBpbnQg ZnAgPSAwLCBzaGlmdCA9IDAsIGxlbiA9IDA7Cj4gPiArICAgICAgIGludCBmcCA9IDAsIHNoaWZ0 ID0gMCwgbGVuID0gMCwgcmQgPSAwOwo+ID4KPiA+ICAgICAgICAgcGVyZl9zd19ldmVudChQRVJG X0NPVU5UX1NXX0FMSUdOTUVOVF9GQVVMVFMsIDEsIHJlZ3MsIGFkZHIpOwo+ID4KPiA+IEBAIC0y NDAsNjggKzIxOSw3MSBAQCBzdGF0aWMgaW50IGhhbmRsZV9zY2FsYXJfbWlzYWxpZ25lZF9sb2Fk KHN0cnVjdCBwdF9yZWdzICpyZWdzKQo+ID4KPiA+ICAgICAgICAgcmVncy0+ZXBjID0gMDsKPiA+ Cj4gPiAtICAgICAgIGlmICgoaW5zbiAmIElOU05fTUFTS19MVykgPT0gSU5TTl9NQVRDSF9MVykg ewo+ID4gKyAgICAgICBpZiAocmlzY3ZfaW5zbl9pc19sdyhpbnNuKSkgewo+ID4gICAgICAgICAg ICAgICAgIGxlbiA9IDQ7Cj4gPiAgICAgICAgICAgICAgICAgc2hpZnQgPSA4ICogKHNpemVvZih1 bnNpZ25lZCBsb25nKSAtIGxlbik7Cj4gPiAtI2lmIGRlZmluZWQoQ09ORklHXzY0QklUKQo+ID4g LSAgICAgICB9IGVsc2UgaWYgKChpbnNuICYgSU5TTl9NQVNLX0xEKSA9PSBJTlNOX01BVENIX0xE KSB7Cj4gPiArICAgICAgICAgICAgICAgcmQgPSByaXNjdl9pbnNuX2x3X2V4dHJhY3RfeGQoaW5z bik7Cj4gPiArICAgICAgIH0gZWxzZSBpZiAocmlzY3ZfaW5zbl9pc19sZChpbnNuKSkgewo+ID4g ICAgICAgICAgICAgICAgIGxlbiA9IDg7Cj4gPiAgICAgICAgICAgICAgICAgc2hpZnQgPSA4ICog KHNpemVvZih1bnNpZ25lZCBsb25nKSAtIGxlbik7Cj4gPiAtICAgICAgIH0gZWxzZSBpZiAoKGlu c24gJiBJTlNOX01BU0tfTFdVKSA9PSBJTlNOX01BVENIX0xXVSkgewo+ID4gKyAgICAgICAgICAg ICAgIHJkID0gcmlzY3ZfaW5zbl9sZF9leHRyYWN0X3hkKGluc24pOwo+ID4gKyAgICAgICB9IGVs c2UgaWYgKHJpc2N2X2luc25faXNfbHd1KGluc24pKSB7Cj4gPiAgICAgICAgICAgICAgICAgbGVu ID0gNDsKPiA+IC0jZW5kaWYKPiA+IC0gICAgICAgfSBlbHNlIGlmICgoaW5zbiAmIElOU05fTUFT S19GTEQpID09IElOU05fTUFUQ0hfRkxEKSB7Cj4gPiArICAgICAgICAgICAgICAgcmQgPSByaXNj dl9pbnNuX2x3dV9leHRyYWN0X3hkKGluc24pOwo+ID4gKyAgICAgICB9IGVsc2UgaWYgKHJpc2N2 X2luc25faXNfZmxkKGluc24pKSB7Cj4gPiAgICAgICAgICAgICAgICAgZnAgPSAxOwo+ID4gICAg ICAgICAgICAgICAgIGxlbiA9IDg7Cj4gPiAtICAgICAgIH0gZWxzZSBpZiAoKGluc24gJiBJTlNO X01BU0tfRkxXKSA9PSBJTlNOX01BVENIX0ZMVykgewo+ID4gKyAgICAgICAgICAgICAgIHJkID0g cmlzY3ZfaW5zbl9mbGRfZXh0cmFjdF9mZChpbnNuKTsKPiA+ICsgICAgICAgfSBlbHNlIGlmIChy aXNjdl9pbnNuX2lzX2ZsdyhpbnNuKSkgewo+ID4gICAgICAgICAgICAgICAgIGZwID0gMTsKPiA+ ICAgICAgICAgICAgICAgICBsZW4gPSA0Owo+ID4gLSAgICAgICB9IGVsc2UgaWYgKChpbnNuICYg SU5TTl9NQVNLX0xIKSA9PSBJTlNOX01BVENIX0xIKSB7Cj4gPiArICAgICAgICAgICAgICAgcmQg PSByaXNjdl9pbnNuX2Zsd19leHRyYWN0X2ZkKGluc24pOwo+ID4gKyAgICAgICB9IGVsc2UgaWYg KHJpc2N2X2luc25faXNfbGgoaW5zbikpIHsKPiA+ICAgICAgICAgICAgICAgICBsZW4gPSAyOwo+ ID4gICAgICAgICAgICAgICAgIHNoaWZ0ID0gOCAqIChzaXplb2YodW5zaWduZWQgbG9uZykgLSBs ZW4pOwo+ID4gLSAgICAgICB9IGVsc2UgaWYgKChpbnNuICYgSU5TTl9NQVNLX0xIVSkgPT0gSU5T Tl9NQVRDSF9MSFUpIHsKPiA+ICsgICAgICAgICAgICAgICByZCA9IHJpc2N2X2luc25fbGhfZXh0 cmFjdF94ZChpbnNuKTsKPiA+ICsgICAgICAgfSBlbHNlIGlmIChyaXNjdl9pbnNuX2lzX2xodShp bnNuKSkgewo+ID4gICAgICAgICAgICAgICAgIGxlbiA9IDI7Cj4gPiAtI2lmIGRlZmluZWQoQ09O RklHXzY0QklUKQo+ID4gLSAgICAgICB9IGVsc2UgaWYgKChpbnNuICYgSU5TTl9NQVNLX0NfTEQp ID09IElOU05fTUFUQ0hfQ19MRCkgewo+ID4gKyAgICAgICAgICAgICAgIHJkID0gcmlzY3ZfaW5z bl9saHVfZXh0cmFjdF94ZChpbnNuKTsKPiA+ICsgICAgICAgfSBlbHNlIGlmIChyaXNjdl9pbnNu X2lzX2NfbGQoaW5zbikpIHsKPiA+ICAgICAgICAgICAgICAgICBsZW4gPSA4Owo+ID4gICAgICAg ICAgICAgICAgIHNoaWZ0ID0gOCAqIChzaXplb2YodW5zaWduZWQgbG9uZykgLSBsZW4pOwo+ID4g LSAgICAgICAgICAgICAgIGluc24gPSBSVkNfUlMyUyhpbnNuKSA8PCBTSF9SRDsKPiA+IC0gICAg ICAgfSBlbHNlIGlmICgoaW5zbiAmIElOU05fTUFTS19DX0xEU1ApID09IElOU05fTUFUQ0hfQ19M RFNQICYmCj4gPiAtICAgICAgICAgICAgICAgICAgKChpbnNuID4+IFNIX1JEKSAmIDB4MWYpKSB7 Cj4gPiArICAgICAgICAgICAgICAgcmQgPSAoOCArIHJpc2N2X2luc25fY19sZF9leHRyYWN0X3hk KGluc24pKTsKPiA+ICsgICAgICAgfSBlbHNlIGlmIChyaXNjdl9pbnNuX2lzX2NfbGRzcChpbnNu KSkgewo+ID4gICAgICAgICAgICAgICAgIGxlbiA9IDg7Cj4gPiAgICAgICAgICAgICAgICAgc2hp ZnQgPSA4ICogKHNpemVvZih1bnNpZ25lZCBsb25nKSAtIGxlbik7Cj4gPiAtI2VuZGlmCj4gPiAt ICAgICAgIH0gZWxzZSBpZiAoKGluc24gJiBJTlNOX01BU0tfQ19MVykgPT0gSU5TTl9NQVRDSF9D X0xXKSB7Cj4gPiArICAgICAgICAgICAgICAgcmQgPSByaXNjdl9pbnNuX2NfbGRzcF9leHRyYWN0 X3hkKGluc24pOwo+ID4gKyAgICAgICB9IGVsc2UgaWYgKHJpc2N2X2luc25faXNfY19sdyhpbnNu KSkgewo+ID4gICAgICAgICAgICAgICAgIGxlbiA9IDQ7Cj4gPiAgICAgICAgICAgICAgICAgc2hp ZnQgPSA4ICogKHNpemVvZih1bnNpZ25lZCBsb25nKSAtIGxlbik7Cj4gPiAtICAgICAgICAgICAg ICAgaW5zbiA9IFJWQ19SUzJTKGluc24pIDw8IFNIX1JEOwo+ID4gLSAgICAgICB9IGVsc2UgaWYg KChpbnNuICYgSU5TTl9NQVNLX0NfTFdTUCkgPT0gSU5TTl9NQVRDSF9DX0xXU1AgJiYKPiA+IC0g ICAgICAgICAgICAgICAgICAoKGluc24gPj4gU0hfUkQpICYgMHgxZikpIHsKPiA+ICsgICAgICAg ICAgICAgICByZCA9ICg4ICsgcmlzY3ZfaW5zbl9jX2x3X2V4dHJhY3RfeGQoaW5zbikpOwo+ID4g KyAgICAgICB9IGVsc2UgaWYgKHJpc2N2X2luc25faXNfY19sd3NwKGluc24pKSB7Cj4gPiAgICAg ICAgICAgICAgICAgbGVuID0gNDsKPiA+ICAgICAgICAgICAgICAgICBzaGlmdCA9IDggKiAoc2l6 ZW9mKHVuc2lnbmVkIGxvbmcpIC0gbGVuKTsKPiA+IC0gICAgICAgfSBlbHNlIGlmICgoaW5zbiAm IElOU05fTUFTS19DX0ZMRCkgPT0gSU5TTl9NQVRDSF9DX0ZMRCkgewo+ID4gKyAgICAgICAgICAg ICAgIHJkID0gcmlzY3ZfaW5zbl9jX2x3c3BfZXh0cmFjdF94ZChpbnNuKTsKPiA+ICsgICAgICAg fSBlbHNlIGlmIChyaXNjdl9pbnNuX2lzX2NfZmxkKGluc24pKSB7Cj4gPiAgICAgICAgICAgICAg ICAgZnAgPSAxOwo+ID4gICAgICAgICAgICAgICAgIGxlbiA9IDg7Cj4gPiAtICAgICAgICAgICAg ICAgaW5zbiA9IFJWQ19SUzJTKGluc24pIDw8IFNIX1JEOwo+ID4gLSAgICAgICB9IGVsc2UgaWYg KChpbnNuICYgSU5TTl9NQVNLX0NfRkxEU1ApID09IElOU05fTUFUQ0hfQ19GTERTUCkgewo+ID4g KyAgICAgICAgICAgICAgIHJkID0gKDggKyByaXNjdl9pbnNuX2NfZmxkX2V4dHJhY3RfZmQoaW5z bikpOwo+ID4gKyAgICAgICB9IGVsc2UgaWYgKHJpc2N2X2luc25faXNfY19mbGRzcChpbnNuKSkg ewo+ID4gICAgICAgICAgICAgICAgIGZwID0gMTsKPiA+ICAgICAgICAgICAgICAgICBsZW4gPSA4 Owo+ID4gLSNpZiBkZWZpbmVkKENPTkZJR18zMkJJVCkKPiA+IC0gICAgICAgfSBlbHNlIGlmICgo aW5zbiAmIElOU05fTUFTS19DX0ZMVykgPT0gSU5TTl9NQVRDSF9DX0ZMVykgewo+ID4gKyAgICAg ICAgICAgICAgIHJkID0gcmlzY3ZfaW5zbl9jX2ZsZHNwX2V4dHJhY3RfZmQoaW5zbik7Cj4gPiAr ICAgICAgIH0gZWxzZSBpZiAocmlzY3ZfaW5zbl9pc19jX2ZsdyhpbnNuKSkgewo+ID4gICAgICAg ICAgICAgICAgIGZwID0gMTsKPiA+ICAgICAgICAgICAgICAgICBsZW4gPSA0Owo+ID4gLSAgICAg ICAgICAgICAgIGluc24gPSBSVkNfUlMyUyhpbnNuKSA8PCBTSF9SRDsKPiA+IC0gICAgICAgfSBl bHNlIGlmICgoaW5zbiAmIElOU05fTUFTS19DX0ZMV1NQKSA9PSBJTlNOX01BVENIX0NfRkxXU1Ap IHsKPiA+ICsgICAgICAgICAgICAgICByZCA9ICg4ICsgcmlzY3ZfaW5zbl9jX2Zsd19leHRyYWN0 X2ZkKGluc24pKTsKPiA+ICsgICAgICAgfSBlbHNlIGlmIChyaXNjdl9pbnNuX2lzX2NfZmx3c3Ao aW5zbikpIHsKPiA+ICAgICAgICAgICAgICAgICBmcCA9IDE7Cj4gPiAgICAgICAgICAgICAgICAg bGVuID0gNDsKPiA+IC0jZW5kaWYKPiA+IC0gICAgICAgfSBlbHNlIGlmICgoaW5zbiAmIElOU05f TUFTS19DX0xIVSkgPT0gSU5TTl9NQVRDSF9DX0xIVSkgewo+ID4gKyAgICAgICAgICAgICAgIHJk ID0gcmlzY3ZfaW5zbl9jX2Zsd3NwX2V4dHJhY3RfZmQoaW5zbik7Cj4gPiArICAgICAgIH0gZWxz ZSBpZiAocmlzY3ZfaW5zbl9pc19jX2xodShpbnNuKSkgewo+ID4gICAgICAgICAgICAgICAgIGxl biA9IDI7Cj4gPiAtICAgICAgICAgICAgICAgaW5zbiA9IFJWQ19SUzJTKGluc24pIDw8IFNIX1JE Owo+ID4gLSAgICAgICB9IGVsc2UgaWYgKChpbnNuICYgSU5TTl9NQVNLX0NfTEgpID09IElOU05f TUFUQ0hfQ19MSCkgewo+ID4gKyAgICAgICAgICAgICAgIHJkID0gKDggKyByaXNjdl9pbnNuX2Nf bGh1X2V4dHJhY3RfeGQoaW5zbikpOwo+ID4gKyAgICAgICB9IGVsc2UgaWYgKHJpc2N2X2luc25f aXNfY19saChpbnNuKSkgewo+ID4gICAgICAgICAgICAgICAgIGxlbiA9IDI7Cj4gPiAtICAgICAg ICAgICAgICAgc2hpZnQgPSA4ICogKHNpemVvZih1bG9uZykgLSBsZW4pOwo+ID4gLSAgICAgICAg ICAgICAgIGluc24gPSBSVkNfUlMyUyhpbnNuKSA8PCBTSF9SRDsKPiA+ICsgICAgICAgICAgICAg ICBzaGlmdCA9IDggKiAoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpIC0gbGVuKTsKPiA+ICsgICAgICAg ICAgICAgICByZCA9ICg4ICsgcmlzY3ZfaW5zbl9jX2xoX2V4dHJhY3RfeGQoaW5zbikpOwo+ID4g ICAgICAgICB9IGVsc2Ugewo+ID4gICAgICAgICAgICAgICAgIHJlZ3MtPmVwYyA9IGVwYzsKPiA+ ICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Cj4gPiBAQCAtMzE5LDExICszMDEsMTEgQEAgc3Rh dGljIGludCBoYW5kbGVfc2NhbGFyX21pc2FsaWduZWRfbG9hZChzdHJ1Y3QgcHRfcmVncyAqcmVn cykKPiA+ICAgICAgICAgfQo+ID4KPiA+ICAgICAgICAgaWYgKCFmcCkKPiA+IC0gICAgICAgICAg ICAgICBTRVRfUkQoaW5zbiwgcmVncywgKGxvbmcpKHZhbC5kYXRhX3Vsb25nIDw8IHNoaWZ0KSA+ PiBzaGlmdCk7Cj4gPiArICAgICAgICAgICAgICAgKih1bnNpZ25lZCBsb25nICopKCh1bnNpZ25l ZCBsb25nICopcmVncyArIHJkKSA9IHZhbC5kYXRhX3Vsb25nIDw8IHNoaWZ0Owo+ID4gICAgICAg ICBlbHNlIGlmIChsZW4gPT0gOCkKPiA+IC0gICAgICAgICAgICAgICBzZXRfZjY0X3JkKGluc24s IHJlZ3MsIHZhbC5kYXRhX3U2NCk7Cj4gPiArICAgICAgICAgICAgICAgc2V0X2Y2NF9yZChyZCwg cmVncywgdmFsLmRhdGFfdTY0KTsKPiA+ICAgICAgICAgZWxzZQo+ID4gLSAgICAgICAgICAgICAg IHNldF9mMzJfcmQoaW5zbiwgcmVncywgdmFsLmRhdGFfdWxvbmcpOwo+ID4gKyAgICAgICAgICAg ICAgIHNldF9mMzJfcmQocmQsIHJlZ3MsIHZhbC5kYXRhX3Vsb25nKTsKPiA+Cj4gPiAgICAgICAg IHJlZ3MtPmVwYyA9IGVwYyArIElOU05fTEVOKGluc24pOwo+ID4KPiA+IEBAIC0zMzYsNyArMzE4 LDcgQEAgc3RhdGljIGludCBoYW5kbGVfc2NhbGFyX21pc2FsaWduZWRfc3RvcmUoc3RydWN0IHB0 X3JlZ3MgKnJlZ3MpCj4gPiAgICAgICAgIHVuc2lnbmVkIGxvbmcgZXBjID0gcmVncy0+ZXBjOwo+ ID4gICAgICAgICB1bnNpZ25lZCBsb25nIGluc247Cj4gPiAgICAgICAgIHVuc2lnbmVkIGxvbmcg YWRkciA9IHJlZ3MtPmJhZGFkZHI7Cj4gPiAtICAgICAgIGludCBsZW4gPSAwLCBmcCA9IDA7Cj4g PiArICAgICAgIGludCBmcCA9IDAsIGxlbiA9IDAsIHJkID0gMDsKPiA+Cj4gPiAgICAgICAgIHBl cmZfc3dfZXZlbnQoUEVSRl9DT1VOVF9TV19BTElHTk1FTlRfRkFVTFRTLCAxLCByZWdzLCBhZGRy KTsKPiA+Cj4gPiBAQCAtMzUxLDY3ICszMzMsNjggQEAgc3RhdGljIGludCBoYW5kbGVfc2NhbGFy X21pc2FsaWduZWRfc3RvcmUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCj4gPgo+ID4gICAgICAgICBy ZWdzLT5lcGMgPSAwOwo+ID4KPiA+IC0gICAgICAgdmFsLmRhdGFfdWxvbmcgPSBHRVRfUlMyKGlu c24sIHJlZ3MpOwo+ID4gLQo+ID4gLSAgICAgICBpZiAoKGluc24gJiBJTlNOX01BU0tfU1cpID09 IElOU05fTUFUQ0hfU1cpIHsKPiA+ICsgICAgICAgaWYgKHJpc2N2X2luc25faXNfc3coaW5zbikp IHsKPiA+ICAgICAgICAgICAgICAgICBsZW4gPSA0Owo+ID4gLSNpZiBkZWZpbmVkKENPTkZJR182 NEJJVCkKPiA+IC0gICAgICAgfSBlbHNlIGlmICgoaW5zbiAmIElOU05fTUFTS19TRCkgPT0gSU5T Tl9NQVRDSF9TRCkgewo+ID4gKyAgICAgICAgICAgICAgIHJkID0gcmlzY3ZfaW5zbl9zd19leHRy YWN0X3hzMihpbnNuKTsKPiA+ICsgICAgICAgfSBlbHNlIGlmIChyaXNjdl9pbnNuX2lzX3NkKGlu c24pKSB7Cj4gPiAgICAgICAgICAgICAgICAgbGVuID0gODsKPiA+IC0jZW5kaWYKPiA+IC0gICAg ICAgfSBlbHNlIGlmICgoaW5zbiAmIElOU05fTUFTS19GU0QpID09IElOU05fTUFUQ0hfRlNEKSB7 Cj4gPiArICAgICAgICAgICAgICAgcmQgPSByaXNjdl9pbnNuX3NkX2V4dHJhY3RfeHMyKGluc24p Owo+ID4gKyAgICAgICB9IGVsc2UgaWYgKHJpc2N2X2luc25faXNfZnNkKGluc24pKSB7Cj4gPiAg ICAgICAgICAgICAgICAgZnAgPSAxOwo+ID4gICAgICAgICAgICAgICAgIGxlbiA9IDg7Cj4gPiAt ICAgICAgICAgICAgICAgdmFsLmRhdGFfdTY0ID0gR0VUX0Y2NF9SUzIoaW5zbiwgcmVncyk7Cj4g PiAtICAgICAgIH0gZWxzZSBpZiAoKGluc24gJiBJTlNOX01BU0tfRlNXKSA9PSBJTlNOX01BVENI X0ZTVykgewo+ID4gKyAgICAgICAgICAgICAgIHJkID0gcmlzY3ZfaW5zbl9mc2RfZXh0cmFjdF9m czIoaW5zbik7Cj4gPiArICAgICAgIH0gZWxzZSBpZiAocmlzY3ZfaW5zbl9pc19mc3coaW5zbikp IHsKPiA+ICAgICAgICAgICAgICAgICBmcCA9IDE7Cj4gPiAgICAgICAgICAgICAgICAgbGVuID0g NDsKPiA+IC0gICAgICAgICAgICAgICB2YWwuZGF0YV91bG9uZyA9IEdFVF9GMzJfUlMyKGluc24s IHJlZ3MpOwo+ID4gLSAgICAgICB9IGVsc2UgaWYgKChpbnNuICYgSU5TTl9NQVNLX1NIKSA9PSBJ TlNOX01BVENIX1NIKSB7Cj4gPiArICAgICAgICAgICAgICAgcmQgPSByaXNjdl9pbnNuX2Zzd19l eHRyYWN0X2ZzMihpbnNuKTsKPiA+ICsgICAgICAgfSBlbHNlIGlmIChyaXNjdl9pbnNuX2lzX3No KGluc24pKSB7Cj4gPiAgICAgICAgICAgICAgICAgbGVuID0gMjsKPiA+IC0jaWYgZGVmaW5lZChD T05GSUdfNjRCSVQpCj4gPiAtICAgICAgIH0gZWxzZSBpZiAoKGluc24gJiBJTlNOX01BU0tfQ19T RCkgPT0gSU5TTl9NQVRDSF9DX1NEKSB7Cj4gPiArICAgICAgICAgICAgICAgcmQgPSByaXNjdl9p bnNuX3NoX2V4dHJhY3RfeHMyKGluc24pOwo+ID4gKyAgICAgICB9IGVsc2UgaWYgKHJpc2N2X2lu c25faXNfY19zZChpbnNuKSkgewo+ID4gICAgICAgICAgICAgICAgIGxlbiA9IDg7Cj4gPiAtICAg ICAgICAgICAgICAgdmFsLmRhdGFfdWxvbmcgPSBHRVRfUlMyUyhpbnNuLCByZWdzKTsKPiA+IC0g ICAgICAgfSBlbHNlIGlmICgoaW5zbiAmIElOU05fTUFTS19DX1NEU1ApID09IElOU05fTUFUQ0hf Q19TRFNQKSB7Cj4gPiArICAgICAgICAgICAgICAgcmQgPSByaXNjdl9pbnNuX2Nfc2RfZXh0cmFj dF94czIoaW5zbik7Cj4gPiArICAgICAgIH0gZWxzZSBpZiAocmlzY3ZfaW5zbl9pc19jX3Nkc3Ao aW5zbikpIHsKPiA+ICAgICAgICAgICAgICAgICBsZW4gPSA4Owo+ID4gLSAgICAgICAgICAgICAg IHZhbC5kYXRhX3Vsb25nID0gR0VUX1JTMkMoaW5zbiwgcmVncyk7Cj4gPiAtI2VuZGlmCj4gPiAt ICAgICAgIH0gZWxzZSBpZiAoKGluc24gJiBJTlNOX01BU0tfQ19TVykgPT0gSU5TTl9NQVRDSF9D X1NXKSB7Cj4gPiArICAgICAgICAgICAgICAgcmQgPSByaXNjdl9pbnNuX2Nfc2RzcF9leHRyYWN0 X3hzMihpbnNuKTsKPiA+ICsgICAgICAgfSBlbHNlIGlmIChyaXNjdl9pbnNuX2lzX2Nfc3coaW5z bikpIHsKPiA+ICAgICAgICAgICAgICAgICBsZW4gPSA0Owo+ID4gLSAgICAgICAgICAgICAgIHZh bC5kYXRhX3Vsb25nID0gR0VUX1JTMlMoaW5zbiwgcmVncyk7Cj4gPiAtICAgICAgIH0gZWxzZSBp ZiAoKGluc24gJiBJTlNOX01BU0tfQ19TV1NQKSA9PSBJTlNOX01BVENIX0NfU1dTUCkgewo+ID4g KyAgICAgICAgICAgICAgIHJkID0gcmlzY3ZfaW5zbl9jX3N3X2V4dHJhY3RfeHMyKGluc24pOwo+ ID4gKyAgICAgICB9IGVsc2UgaWYgKHJpc2N2X2luc25faXNfY19zd3NwKGluc24pKSB7Cj4gPiAg ICAgICAgICAgICAgICAgbGVuID0gNDsKPiA+IC0gICAgICAgICAgICAgICB2YWwuZGF0YV91bG9u ZyA9IEdFVF9SUzJDKGluc24sIHJlZ3MpOwo+ID4gLSAgICAgICB9IGVsc2UgaWYgKChpbnNuICYg SU5TTl9NQVNLX0NfRlNEKSA9PSBJTlNOX01BVENIX0NfRlNEKSB7Cj4gPiArICAgICAgICAgICAg ICAgcmQgPSByaXNjdl9pbnNuX2Nfc3dzcF9leHRyYWN0X3hzMihpbnNuKTsKPiA+ICsgICAgICAg fSBlbHNlIGlmIChyaXNjdl9pbnNuX2lzX2NfZnNkKGluc24pKSB7Cj4gPiAgICAgICAgICAgICAg ICAgZnAgPSAxOwo+ID4gICAgICAgICAgICAgICAgIGxlbiA9IDg7Cj4gPiAtICAgICAgICAgICAg ICAgdmFsLmRhdGFfdTY0ID0gR0VUX0Y2NF9SUzJTKGluc24sIHJlZ3MpOwo+ID4gLSAgICAgICB9 IGVsc2UgaWYgKChpbnNuICYgSU5TTl9NQVNLX0NfRlNEU1ApID09IElOU05fTUFUQ0hfQ19GU0RT UCkgewo+ID4gKyAgICAgICAgICAgICAgIHJkID0gcmlzY3ZfaW5zbl9jX2ZzZF9leHRyYWN0X2Zz MihpbnNuKTsKPiA+ICsgICAgICAgfSBlbHNlIGlmIChyaXNjdl9pbnNuX2lzX2NfZnNkc3AoaW5z bikpIHsKPiA+ICAgICAgICAgICAgICAgICBmcCA9IDE7Cj4gPiAgICAgICAgICAgICAgICAgbGVu ID0gODsKPiA+IC0gICAgICAgICAgICAgICB2YWwuZGF0YV91NjQgPSBHRVRfRjY0X1JTMkMoaW5z biwgcmVncyk7Cj4gPiAtI2lmICFkZWZpbmVkKENPTkZJR182NEJJVCkKPiAKPiBTaG91bGRuJ3Qg d2Uga2VlcCB0aGlzPwoKVGhlIGlmZGVmIGRvZXNuJ3QgbWF0dGVyIGFueW1vcmUgYmVjYXVzZSB0 aGUgbmV3IHJpc2N2X2luc25faXNfKigpIGhhdmUKYXJlIGFsbCBpZmRlZidkIG91dCBzbyB1bmNv bmRpdGlvbmFsbHkgcmV0dXJuIGZhbHNlIGlmIHRoZXkgYXJlIG5vdApzdXBwb3J0ZWQgb24gQ09O RklHXzY0QklUL0NPTkZJR18zMkJJVC4KCj4gCj4gPiAtICAgICAgIH0gZWxzZSBpZiAoKGluc24g JiBJTlNOX01BU0tfQ19GU1cpID09IElOU05fTUFUQ0hfQ19GU1cpIHsKPiA+ICsgICAgICAgICAg ICAgICByZCA9IHJpc2N2X2luc25fY19mc2RzcF9leHRyYWN0X2ZzMihpbnNuKTsKPiA+ICsgICAg ICAgfSBlbHNlIGlmIChyaXNjdl9pbnNuX2lzX2NfZnN3KGluc24pKSB7Cj4gPiAgICAgICAgICAg ICAgICAgZnAgPSAxOwo+ID4gICAgICAgICAgICAgICAgIGxlbiA9IDQ7Cj4gPiAtICAgICAgICAg ICAgICAgdmFsLmRhdGFfdWxvbmcgPSBHRVRfRjMyX1JTMlMoaW5zbiwgcmVncyk7Cj4gPiAtICAg ICAgIH0gZWxzZSBpZiAoKGluc24gJiBJTlNOX01BU0tfQ19GU1dTUCkgPT0gSU5TTl9NQVRDSF9D X0ZTV1NQKSB7Cj4gPiArICAgICAgICAgICAgICAgcmQgPSByaXNjdl9pbnNuX2NfZnN3X2V4dHJh Y3RfZnMyKGluc24pOwo+ID4gKyAgICAgICB9IGVsc2UgaWYgKHJpc2N2X2luc25faXNfY19mc3dz cChpbnNuKSkgewo+ID4gICAgICAgICAgICAgICAgIGZwID0gMTsKPiA+ICAgICAgICAgICAgICAg ICBsZW4gPSA0Owo+ID4gLSAgICAgICAgICAgICAgIHZhbC5kYXRhX3Vsb25nID0gR0VUX0YzMl9S UzJDKGluc24sIHJlZ3MpOwo+ID4gLSNlbmRpZgo+ID4gLSAgICAgICB9IGVsc2UgaWYgKChpbnNu ICYgSU5TTl9NQVNLX0NfU0gpID09IElOU05fTUFUQ0hfQ19TSCkgewo+ID4gKyAgICAgICAgICAg ICAgIHJkID0gcmlzY3ZfaW5zbl9jX2Zzd3NwX2V4dHJhY3RfZnMyKGluc24pOwo+ID4gKyAgICAg ICB9IGVsc2UgaWYgKHJpc2N2X2luc25faXNfY19zaChpbnNuKSkgewo+ID4gICAgICAgICAgICAg ICAgIGxlbiA9IDI7Cj4gPiAtICAgICAgICAgICAgICAgdmFsLmRhdGFfdWxvbmcgPSBHRVRfUlMy UyhpbnNuLCByZWdzKTsKPiA+ICsgICAgICAgICAgICAgICByZCA9IHJpc2N2X2luc25fY19zaF9l eHRyYWN0X3hzMihpbnNuKTsKPiA+ICAgICAgICAgfSBlbHNlIHsKPiA+IC0gICAgICAgICAgICAg ICByZWdzLT5lcGMgPSBlcGM7Cj4gCj4gVGhpcyBsaW5lIHNob3VsZCBiZSBrZXB0LgoKT2ggaHVo IEkgd29uZGVyIHdoeSBJIGdvdCByaWQgb2YgdGhpcy4gR29vZCBjYXRjaCwgdGhhbmsgeW91IQoK LSBDaGFybGllCgo+IAo+IFRoYW5rcywKPiBKZXNzZSBUYXViZQo+IAo+ID4gICAgICAgICAgICAg ICAgIHJldHVybiAtMTsKPiA+ICAgICAgICAgfQo+ID4KPiA+ICAgICAgICAgaWYgKCFJU19FTkFC TEVEKENPTkZJR19GUFUpICYmIGZwKQo+ID4gICAgICAgICAgICAgICAgIHJldHVybiAtRU9QTk9U U1VQUDsKPiA+Cj4gPiArICAgICAgIGlmICghZnApCj4gPiArICAgICAgICAgICAgICAgdmFsLmRh dGFfdWxvbmcgPSAqKHVuc2lnbmVkIGxvbmcgKikoKHVuc2lnbmVkIGxvbmcgKilyZWdzICsgcmQp Owo+ID4gKyAgICAgICBlbHNlIGlmIChsZW4gPT0gOCkKPiA+ICsgICAgICAgICAgICAgICB2YWwu ZGF0YV91NjQgPSBnZXRfZjY0X3JzKHJkLCByZWdzKTsKPiA+ICsgICAgICAgZWxzZQo+ID4gKyAg ICAgICAgICAgICAgIHZhbC5kYXRhX3Vsb25nID0gZ2V0X2YzMl9ycyhyZCwgcmVncyk7Cj4gPiAr Cj4gPiAgICAgICAgIGlmICh1c2VyX21vZGUocmVncykpIHsKPiA+ICAgICAgICAgICAgICAgICBp ZiAoY29weV90b191c2VyKCh1OCBfX3VzZXIgKilhZGRyLCAmdmFsLCBsZW4pKQo+ID4gICAgICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwo+ID4KPiA+IC0tCj4gPiAyLjU0LjAKPiA+Cj4g Pgo+ID4KPiA+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f Cj4gPiBsaW51eC1yaXNjdiBtYWlsaW5nIGxpc3QKPiA+IGxpbnV4LXJpc2N2QGxpc3RzLmluZnJh ZGVhZC5vcmcKPiA+IGh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8v bGludXgtcmlzY3YKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmxpbnV4LXJpc2N2IG1haWxpbmcgbGlzdApsaW51eC1yaXNjdkBsaXN0cy5pbmZyYWRlYWQu b3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtcmlz Y3YK 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 6D15DC43327 for ; Tue, 30 Jun 2026 06:14:17 +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=Yg/1jz8gY7hgrXS1BK4YzSluHbrLh1BqOYpfxXNrgBU=; b=RIDF6psjKf09Q/ V3nw7GLuOvDRjb/Vy9d5qip8Ol8cZN8Zg0Ts/IkAU4Q3CItn/gClUF1mj06iWnqkqksiNYPXo6sDw AtRhbpXf2vFa4OfFZ+EdmavqH0/Zykhp47pTIIKj41StM8/QLVM9ocCzT3w9EIMUz5G4OcOOm4aFV J/q1PJqE6Ark0VBSsHfcrIAn+pKie782TLtLMhtslEoGBVRXprY8yily7rxiXhFxBTFlYX8GePGEs 1BfM/HNb4RNgqX0NqFBNEe2XcpXtpALM7EuU6ZRqgOEQOPqVGrdrJfLQQMy1r+axc6FSfvkKEbxw0 5TbxHyvRrbbYvY97KKbQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1weRjc-0000000FtHc-46lp; Tue, 30 Jun 2026 06:14:17 +0000 Received: from mail-dy1-x1334.google.com ([2607:f8b0:4864:20::1334]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1weRjZ-0000000FtGL-2KQZ for kvm-riscv@lists.infradead.org; Tue, 30 Jun 2026 06:14:14 +0000 Received: by mail-dy1-x1334.google.com with SMTP id 5a478bee46e88-30df5854e1eso252928eec.0 for ; Mon, 29 Jun 2026 23:14:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1782800053; x=1783404853; 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=kQ4pwxtyxCm1G5M66xxdmEUDpbEAdNwzhoPavDK6tNs=; b=XFvGl1rh8XKcKjnle7lArChs+Z6KIdS3VxOU5xpeK8zq3DAmzlbUXV7F5K07kDKwux s8jwBCK2Lx1w3cydhCnKfqqa5ctycfFkwYJcKReXi83DX7kbFTkBZjJKznqV7ARd3/JF V/w5yTB2Z94QMw0V/QL6xm5BfdVLUhlxCk/3HlEdFArTsVoUaZd29QKiCrgtLHLDvC1R oUcHz2qnFHw8U33UvdlUt2/ycBFQWKGEXLSM8VrjSr1ToTVU1sD/saMqOZNrblrMYj31 xrtfVolKB3mAavTIbtTwhCxS5pi/35qagZKtf/Q3eSxGfVMu/c01d8QzhCNvJSZJQvMn KfeA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782800053; x=1783404853; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=kQ4pwxtyxCm1G5M66xxdmEUDpbEAdNwzhoPavDK6tNs=; b=Adk14VonVoHc0/3R4CzM7SMTzg2UpFaqwNcgJjXbvzHDYd26fpOiLRbxlvm8uDp299 nOfEfG6ldiGWBlQq1ZG2GSiSq/7bPo/5Cai1KUprwJtIQAdZhyYjEn3jshD3bROzLIbg vaDmAI8TvPWSwfv0qQnXx8VHTneC72Ba82N+w66etmXLjVOjYXoudYORfsYedNGUeOHt Sb9G3QDPJ/M+uVZwk344HTPihZRBAN6M4hBzbJK6PoTkNLddgJ/q0NwiGpycJTCSYwl2 Lddqlqt7At6i/+lwjcwDWN8jZSZ5ZjCv8ywJfMcxnmnpWobIXaNWqfa2z/lSvVBFyL6K PQaQ== X-Forwarded-Encrypted: i=1; AHgh+RoPN8IVWsctPoxKC73vMMyYbvv6tGUExLhMZPXmlMN5gbEBo5bx9zQcRZ0raSUFqSwZ28AmX8yEz8A=@lists.infradead.org X-Gm-Message-State: AOJu0YxnFgRzMMeNephbRr0F3qhURf3RiiLZ+PFrS+n1So4mPIpZJiME qoCwsJfuxbttj8fR9cYgM2W39jXPI+cb2K77Jovn0NdGs5wxYygUmLby X-Gm-Gg: AfdE7ckBB9j9mH5gObIV+EKlZf0wlkdTvajYp8fRQN71iyWeWHYZTiTLcix4OgjOfVr qeMMvjS9g35r4E06WejbN3F/hylRhKnRSoAcOCjSn0wTL3mLZ3qj/nNUhJ6dXkEavgmcWof5Wm5 t13TJCn01jLHxoNQlPbGGjWO9vH/jDgF2lfGdoMifOXZDJhQTTcccbD71dQtEYKBXE6Iv7RANIB Q+ujcuhwKeCWAtsjyY836J9z9PYqTItxSrNxWm7NPcH/16ulfq6HkQa1lmKiGl2pG5WCZvJ30l1 8QXrwxSafIbFOR05CcAFI/Co6yi8PpyW0qwXfWcQsnivxUWgV4/aAVi5xb15Y5AYN1l/7h24zGs 7hFVG7h1ArOIHTTbHWpnWkaVhoPgvClPLQm9QKstoMpNkz0wNkMmw+ODWQpM71L+7RFmWNw/iW6 KlNJMuWFNvXd3YxLLwf5IYN4XlPUYjktsp X-Received: by 2002:a05:7300:6115:b0:30c:9ca4:5cd0 with SMTP id 5a478bee46e88-30ee9f63cdamr444602eec.4.1782800052515; Mon, 29 Jun 2026 23:14:12 -0700 (PDT) Received: from blinky ([2601:647:6700:64d0::94ac]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-30ee326c7a7sm4344373eec.29.2026.06.29.23.14.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Jun 2026 23:14:11 -0700 (PDT) Date: Mon, 29 Jun 2026 23:14:09 -0700 From: Charlie Jenkins To: Jesse T Cc: Paul Walmsley , Palmer Dabbelt , Nam Cao , Alexandre Ghiti , Anup Patel , Atish Patra , Conor Dooley , Paolo Bonzini , Andrew Morton , Shuah Khan , Radim =?utf-8?B?S3LEjW3DocWZ?= , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-kselftest@vger.kernel.org Subject: Re: [PATCH v2 07/16] riscv: Use generated instruction headers for misaligned loads/stores Message-ID: References: <20260621-riscv_insn_table-v2-0-7f0810ee2274@gmail.com> <20260621-riscv_insn_table-v2-7-7f0810ee2274@gmail.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.9.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20260629_231413_618100_78630806 X-CRM114-Status: GOOD ( 25.88 ) X-BeenThere: kvm-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: "kvm-riscv" Errors-To: kvm-riscv-bounces+kvm-riscv=archiver.kernel.org@lists.infradead.org T24gTW9uLCBKdW4gMjksIDIwMjYgYXQgMDQ6MjA6MTVQTSAtMDQwMCwgSmVzc2UgVCB3cm90ZToK PiBPbiBNb24sIEp1biAyMiwgMjAyNiBhdCAxMjowOOKAr0FNIENoYXJsaWUgSmVua2lucyB2aWEg QjQgUmVsYXkKPiA8ZGV2bnVsbCt0aGVjaGFybGVzamVua2lucy5nbWFpbC5jb21Aa2VybmVsLm9y Zz4gd3JvdGU6Cj4gPgo+ID4gRnJvbTogQ2hhcmxpZSBKZW5raW5zIDx0aGVjaGFybGVzamVua2lu c0BnbWFpbC5jb20+Cj4gPgo+ID4gTWlncmF0ZSB0aGUgbWlzYWxpZ25lZCBsb2Fkcy9zdG9yZSBj b2RlIHRvIHVzZSB0aGUgZ2VuZXJhdGVkIGluc3RydWN0aW9uCj4gPiBoZWFkZXJzIGluc3RlYWQg b2YgdGhlIGhhbmQtd3JpdHRlbiBpbnN0cnVjdGlvbiBjb21wb3NpdGlvbiBmdW5jdGlvbnMuCj4g Pgo+ID4gU2lnbmVkLW9mZi1ieTogQ2hhcmxpZSBKZW5raW5zIDx0aGVjaGFybGVzamVua2luc0Bn bWFpbC5jb20+Cj4gPgo+ID4gLS0tCj4gPgo+ID4gU2ltaWxhciB0byB0aGUgb3RoZXIgcGF0Y2hl cyBvZiB0aGlzIHNlcmllcywgSSBleHRyYWN0ZWQgb3V0IHRoZSBsb2dpYwo+ID4gb2YgdGhpcyBm dW5jdGlvbiBhbmQgYnJ1dGUgZm9yY2VkIGFsbCBwb3NzaWJsZSBpbnB1dHMgdG8gdmFsaWRhdGUg dGhhdAo+ID4gdGhlIG91dHB1dHMgYXJlIHRoZSBzYW1lLiBUbyB2ZXJpZnkgdGhpcyBjaGFuZ2Ug aW4gdGhlIGtlcm5lbCwgSSBib290ZWQKPiA+IG9uIFNwaWtlIGFuZCB1c2VkIHRoZSBtaXNhbGln bmVkIGFjY2VzcyBjaGVja2VyIHdoaWNoIGRvZXMgc29tZQo+ID4gbWlzYWxpZ25lZCBhY2Nlc3Nl cy4KPiA+IC0tLQo+ID4gIGFyY2gvcmlzY3Yva2VybmVsL3RyYXBzX21pc2FsaWduZWQuYyB8IDE4 MyArKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLQo+ID4gIDEgZmlsZSBjaGFuZ2Vk LCA4MyBpbnNlcnRpb25zKCspLCAxMDAgZGVsZXRpb25zKC0pCj4gPgo+ID4gZGlmZiAtLWdpdCBh L2FyY2gvcmlzY3Yva2VybmVsL3RyYXBzX21pc2FsaWduZWQuYyBiL2FyY2gvcmlzY3Yva2VybmVs L3RyYXBzX21pc2FsaWduZWQuYwo+ID4gaW5kZXggODFiNzY4MmU2YzZkLi40ZDJhMjQzMmUwYzQg MTAwNjQ0Cj4gPiAtLS0gYS9hcmNoL3Jpc2N2L2tlcm5lbC90cmFwc19taXNhbGlnbmVkLmMKPiA+ ICsrKyBiL2FyY2gvcmlzY3Yva2VybmVsL3RyYXBzX21pc2FsaWduZWQuYwo+ID4gQEAgLTIyLDE1 ICsyMiwxMSBAQAo+ID4KPiA+ICAjaWZkZWYgQ09ORklHX0ZQVQo+ID4KPiA+IC0jZGVmaW5lIEZQ X0dFVF9SRChpbnNuKSAgICAgICAgICAgICAgICAoaW5zbiA+PiA3ICYgMHgxRikKPiA+IC0KPiA+ ICBleHRlcm4gdm9pZCBwdXRfZjMyX3JlZyh1bnNpZ25lZCBsb25nIGZwX3JlZywgdW5zaWduZWQg bG9uZyB2YWx1ZSk7Cj4gPgo+ID4gLXN0YXRpYyBpbnQgc2V0X2YzMl9yZCh1bnNpZ25lZCBsb25n IGluc24sIHN0cnVjdCBwdF9yZWdzICpyZWdzLAo+ID4gK3N0YXRpYyBpbnQgc2V0X2YzMl9yZCh1 bnNpZ25lZCBsb25nIGZwX3JlZywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCj4gPiAgICAgICAgICAg ICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB2YWwpCj4gPiAgewo+ID4gLSAgICAgICB1bnNpZ25l ZCBsb25nIGZwX3JlZyA9IEZQX0dFVF9SRChpbnNuKTsKPiA+IC0KPiA+ICAgICAgICAgcHV0X2Yz Ml9yZWcoZnBfcmVnLCB2YWwpOwo+ID4gICAgICAgICByZWdzLT5zdGF0dXMgfD0gU1JfRlNfRElS VFk7Cj4gPgo+ID4gQEAgLTM5LDkgKzM1LDggQEAgc3RhdGljIGludCBzZXRfZjMyX3JkKHVuc2ln bmVkIGxvbmcgaW5zbiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCj4gPgo+ID4gIGV4dGVybiB2b2lk IHB1dF9mNjRfcmVnKHVuc2lnbmVkIGxvbmcgZnBfcmVnLCB1bnNpZ25lZCBsb25nIHZhbHVlKTsK PiA+Cj4gPiAtc3RhdGljIGludCBzZXRfZjY0X3JkKHVuc2lnbmVkIGxvbmcgaW5zbiwgc3RydWN0 IHB0X3JlZ3MgKnJlZ3MsIHU2NCB2YWwpCj4gPiArc3RhdGljIGludCBzZXRfZjY0X3JkKHVuc2ln bmVkIGxvbmcgZnBfcmVnLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgdTY0IHZhbCkKPiA+ICB7Cj4g PiAtICAgICAgIHVuc2lnbmVkIGxvbmcgZnBfcmVnID0gRlBfR0VUX1JEKGluc24pOwo+ID4gICAg ICAgICB1bnNpZ25lZCBsb25nIHZhbHVlOwo+ID4KPiA+ICAjaWYgX19yaXNjdl94bGVuID09IDMy Cj4gPiBAQCAtNTgsMTAgKzUzLDggQEAgc3RhdGljIGludCBzZXRfZjY0X3JkKHVuc2lnbmVkIGxv bmcgaW5zbiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHU2NCB2YWwpCj4gPiAgI2lmIF9fcmlzY3Zf eGxlbiA9PSAzMgo+ID4gIGV4dGVybiB2b2lkIGdldF9mNjRfcmVnKHVuc2lnbmVkIGxvbmcgZnBf cmVnLCB1NjQgKnZhbHVlKTsKPiA+Cj4gPiAtc3RhdGljIHU2NCBnZXRfZjY0X3JzKHVuc2lnbmVk IGxvbmcgaW5zbiwgdTggZnBfcmVnX29mZnNldCwKPiA+IC0gICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgcHRfcmVncyAqcmVncykKPiA+ICtzdGF0aWMgdTY0IGdldF9mNjRfcnModW5zaWduZWQg bG9uZyBmcF9yZWcsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQo+ID4gIHsKPiA+IC0gICAgICAgdW5z aWduZWQgbG9uZyBmcF9yZWcgPSAoaW5zbiA+PiBmcF9yZWdfb2Zmc2V0KSAmIDB4MUY7Cj4gPiAg ICAgICAgIHU2NCB2YWw7Cj4gPgo+ID4gICAgICAgICBnZXRfZjY0X3JlZyhmcF9yZWcsICZ2YWwp Owo+ID4gQEAgLTczLDEwICs2Niw4IEBAIHN0YXRpYyB1NjQgZ2V0X2Y2NF9ycyh1bnNpZ25lZCBs b25nIGluc24sIHU4IGZwX3JlZ19vZmZzZXQsCj4gPgo+ID4gIGV4dGVybiB1bnNpZ25lZCBsb25n IGdldF9mNjRfcmVnKHVuc2lnbmVkIGxvbmcgZnBfcmVnKTsKPiA+Cj4gPiAtc3RhdGljIHVuc2ln bmVkIGxvbmcgZ2V0X2Y2NF9ycyh1bnNpZ25lZCBsb25nIGluc24sIHU4IGZwX3JlZ19vZmZzZXQs Cj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdz KQo+ID4gK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9mNjRfcnModW5zaWduZWQgbG9uZyBmcF9y ZWcsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQo+ID4gIHsKPiA+IC0gICAgICAgdW5zaWduZWQgbG9u ZyBmcF9yZWcgPSAoaW5zbiA+PiBmcF9yZWdfb2Zmc2V0KSAmIDB4MUY7Cj4gPiAgICAgICAgIHVu c2lnbmVkIGxvbmcgdmFsOwo+ID4KPiA+ICAgICAgICAgdmFsID0gZ2V0X2Y2NF9yZWcoZnBfcmVn KTsKPiA+IEBAIC04OSwxMCArODAsOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfZjY0X3Jz KHVuc2lnbmVkIGxvbmcgaW5zbiwgdTggZnBfcmVnX29mZnNldCwKPiA+Cj4gPiAgZXh0ZXJuIHVu c2lnbmVkIGxvbmcgZ2V0X2YzMl9yZWcodW5zaWduZWQgbG9uZyBmcF9yZWcpOwo+ID4KPiA+IC1z dGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfZjMyX3JzKHVuc2lnbmVkIGxvbmcgaW5zbiwgdTggZnBf cmVnX29mZnNldCwKPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHB0 X3JlZ3MgKnJlZ3MpCj4gPiArc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X2YzMl9ycyh1bnNpZ25l ZCBsb25nIGZwX3JlZywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCj4gPiAgewo+ID4gLSAgICAgICB1 bnNpZ25lZCBsb25nIGZwX3JlZyA9IChpbnNuID4+IGZwX3JlZ19vZmZzZXQpICYgMHgxRjsKPiA+ ICAgICAgICAgdW5zaWduZWQgbG9uZyB2YWw7Cj4gPgo+ID4gICAgICAgICB2YWwgPSBnZXRfZjMy X3JlZyhmcF9yZWcpOwo+ID4gQEAgLTEwNywyOCArOTYsMTggQEAgc3RhdGljIHZvaWQgc2V0X2Yz Ml9yZCh1bnNpZ25lZCBsb25nIGluc24sIHN0cnVjdCBwdF9yZWdzICpyZWdzLAo+ID4KPiA+ICBz dGF0aWMgdm9pZCBzZXRfZjY0X3JkKHVuc2lnbmVkIGxvbmcgaW5zbiwgc3RydWN0IHB0X3JlZ3Mg KnJlZ3MsIHU2NCB2YWwpIHt9Cj4gPgo+ID4gLXN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9mNjRf cnModW5zaWduZWQgbG9uZyBpbnNuLCB1OCBmcF9yZWdfb2Zmc2V0LAo+ID4gLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKPiA+ICtzdGF0aWMgdW5z aWduZWQgbG9uZyBnZXRfZjY0X3JzKHVuc2lnbmVkIGxvbmcgZnBfcmVnLCBzdHJ1Y3QgcHRfcmVn cyAqcmVncykKPiA+ICB7Cj4gPiAgICAgICAgIHJldHVybiAwOwo+ID4gIH0KPiA+Cj4gPiAtc3Rh dGljIHVuc2lnbmVkIGxvbmcgZ2V0X2YzMl9ycyh1bnNpZ25lZCBsb25nIGluc24sIHU4IGZwX3Jl Z19vZmZzZXQsCj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwdF9y ZWdzICpyZWdzKQo+ID4gK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9mMzJfcnModW5zaWduZWQg bG9uZyBmcF9yZWcsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQo+ID4gIHsKPiA+ICAgICAgICAgcmV0 dXJuIDA7Cj4gPiAgfQo+ID4KPiA+ICAjZW5kaWYKPiA+Cj4gPiAtI2RlZmluZSBHRVRfRjY0X1JT MihpbnNuLCByZWdzKSAoZ2V0X2Y2NF9ycyhpbnNuLCAyMCwgcmVncykpCj4gPiAtI2RlZmluZSBH RVRfRjY0X1JTMkMoaW5zbiwgcmVncykgKGdldF9mNjRfcnMoaW5zbiwgMiwgcmVncykpCj4gPiAt I2RlZmluZSBHRVRfRjY0X1JTMlMoaW5zbiwgcmVncykgKGdldF9mNjRfcnMoUlZDX1JTMlMoaW5z biksIDAsIHJlZ3MpKQo+ID4gLQo+ID4gLSNkZWZpbmUgR0VUX0YzMl9SUzIoaW5zbiwgcmVncykg KGdldF9mMzJfcnMoaW5zbiwgMjAsIHJlZ3MpKQo+ID4gLSNkZWZpbmUgR0VUX0YzMl9SUzJDKGlu c24sIHJlZ3MpIChnZXRfZjMyX3JzKGluc24sIDIsIHJlZ3MpKQo+ID4gLSNkZWZpbmUgR0VUX0Yz Ml9SUzJTKGluc24sIHJlZ3MpIChnZXRfZjMyX3JzKFJWQ19SUzJTKGluc24pLCAwLCByZWdzKSkK PiA+IC0KPiA+ICAjZGVmaW5lIF9fcmVhZF9pbnNuKHJlZ3MsIGluc24sIGluc25fYWRkciwgdHlw ZSkgICAgICAgXAo+ID4gICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCj4gPiAgICAgICAgIGludCBfX3JldDsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKPiA+IEBAIC0yMTcsMTMgKzE5NiwxMyBAQCBzdGF0aWMgaW50 IGhhbmRsZV92ZWN0b3JfbWlzYWxpZ25lZF9sb2FkKHN0cnVjdCBwdF9yZWdzICpyZWdzKQo+ID4g IH0KPiA+ICAjZW5kaWYKPiA+Cj4gPiAtc3RhdGljIGludCBoYW5kbGVfc2NhbGFyX21pc2FsaWdu ZWRfbG9hZChzdHJ1Y3QgcHRfcmVncyAqcmVncykKPiA+ICtzdGF0aWMgbm9pbmxpbmUgaW50IGhh bmRsZV9zY2FsYXJfbWlzYWxpZ25lZF9sb2FkKHN0cnVjdCBwdF9yZWdzICpyZWdzKQo+ID4gIHsK PiA+ICAgICAgICAgdW5pb24gcmVnX2RhdGEgdmFsOwo+ID4gICAgICAgICB1bnNpZ25lZCBsb25n IGVwYyA9IHJlZ3MtPmVwYzsKPiA+ICAgICAgICAgdW5zaWduZWQgbG9uZyBpbnNuOwo+ID4gICAg ICAgICB1bnNpZ25lZCBsb25nIGFkZHIgPSByZWdzLT5iYWRhZGRyOwo+ID4gLSAgICAgICBpbnQg ZnAgPSAwLCBzaGlmdCA9IDAsIGxlbiA9IDA7Cj4gPiArICAgICAgIGludCBmcCA9IDAsIHNoaWZ0 ID0gMCwgbGVuID0gMCwgcmQgPSAwOwo+ID4KPiA+ICAgICAgICAgcGVyZl9zd19ldmVudChQRVJG X0NPVU5UX1NXX0FMSUdOTUVOVF9GQVVMVFMsIDEsIHJlZ3MsIGFkZHIpOwo+ID4KPiA+IEBAIC0y NDAsNjggKzIxOSw3MSBAQCBzdGF0aWMgaW50IGhhbmRsZV9zY2FsYXJfbWlzYWxpZ25lZF9sb2Fk KHN0cnVjdCBwdF9yZWdzICpyZWdzKQo+ID4KPiA+ICAgICAgICAgcmVncy0+ZXBjID0gMDsKPiA+ Cj4gPiAtICAgICAgIGlmICgoaW5zbiAmIElOU05fTUFTS19MVykgPT0gSU5TTl9NQVRDSF9MVykg ewo+ID4gKyAgICAgICBpZiAocmlzY3ZfaW5zbl9pc19sdyhpbnNuKSkgewo+ID4gICAgICAgICAg ICAgICAgIGxlbiA9IDQ7Cj4gPiAgICAgICAgICAgICAgICAgc2hpZnQgPSA4ICogKHNpemVvZih1 bnNpZ25lZCBsb25nKSAtIGxlbik7Cj4gPiAtI2lmIGRlZmluZWQoQ09ORklHXzY0QklUKQo+ID4g LSAgICAgICB9IGVsc2UgaWYgKChpbnNuICYgSU5TTl9NQVNLX0xEKSA9PSBJTlNOX01BVENIX0xE KSB7Cj4gPiArICAgICAgICAgICAgICAgcmQgPSByaXNjdl9pbnNuX2x3X2V4dHJhY3RfeGQoaW5z bik7Cj4gPiArICAgICAgIH0gZWxzZSBpZiAocmlzY3ZfaW5zbl9pc19sZChpbnNuKSkgewo+ID4g ICAgICAgICAgICAgICAgIGxlbiA9IDg7Cj4gPiAgICAgICAgICAgICAgICAgc2hpZnQgPSA4ICog KHNpemVvZih1bnNpZ25lZCBsb25nKSAtIGxlbik7Cj4gPiAtICAgICAgIH0gZWxzZSBpZiAoKGlu c24gJiBJTlNOX01BU0tfTFdVKSA9PSBJTlNOX01BVENIX0xXVSkgewo+ID4gKyAgICAgICAgICAg ICAgIHJkID0gcmlzY3ZfaW5zbl9sZF9leHRyYWN0X3hkKGluc24pOwo+ID4gKyAgICAgICB9IGVs c2UgaWYgKHJpc2N2X2luc25faXNfbHd1KGluc24pKSB7Cj4gPiAgICAgICAgICAgICAgICAgbGVu ID0gNDsKPiA+IC0jZW5kaWYKPiA+IC0gICAgICAgfSBlbHNlIGlmICgoaW5zbiAmIElOU05fTUFT S19GTEQpID09IElOU05fTUFUQ0hfRkxEKSB7Cj4gPiArICAgICAgICAgICAgICAgcmQgPSByaXNj dl9pbnNuX2x3dV9leHRyYWN0X3hkKGluc24pOwo+ID4gKyAgICAgICB9IGVsc2UgaWYgKHJpc2N2 X2luc25faXNfZmxkKGluc24pKSB7Cj4gPiAgICAgICAgICAgICAgICAgZnAgPSAxOwo+ID4gICAg ICAgICAgICAgICAgIGxlbiA9IDg7Cj4gPiAtICAgICAgIH0gZWxzZSBpZiAoKGluc24gJiBJTlNO X01BU0tfRkxXKSA9PSBJTlNOX01BVENIX0ZMVykgewo+ID4gKyAgICAgICAgICAgICAgIHJkID0g cmlzY3ZfaW5zbl9mbGRfZXh0cmFjdF9mZChpbnNuKTsKPiA+ICsgICAgICAgfSBlbHNlIGlmIChy aXNjdl9pbnNuX2lzX2ZsdyhpbnNuKSkgewo+ID4gICAgICAgICAgICAgICAgIGZwID0gMTsKPiA+ ICAgICAgICAgICAgICAgICBsZW4gPSA0Owo+ID4gLSAgICAgICB9IGVsc2UgaWYgKChpbnNuICYg SU5TTl9NQVNLX0xIKSA9PSBJTlNOX01BVENIX0xIKSB7Cj4gPiArICAgICAgICAgICAgICAgcmQg PSByaXNjdl9pbnNuX2Zsd19leHRyYWN0X2ZkKGluc24pOwo+ID4gKyAgICAgICB9IGVsc2UgaWYg KHJpc2N2X2luc25faXNfbGgoaW5zbikpIHsKPiA+ICAgICAgICAgICAgICAgICBsZW4gPSAyOwo+ ID4gICAgICAgICAgICAgICAgIHNoaWZ0ID0gOCAqIChzaXplb2YodW5zaWduZWQgbG9uZykgLSBs ZW4pOwo+ID4gLSAgICAgICB9IGVsc2UgaWYgKChpbnNuICYgSU5TTl9NQVNLX0xIVSkgPT0gSU5T Tl9NQVRDSF9MSFUpIHsKPiA+ICsgICAgICAgICAgICAgICByZCA9IHJpc2N2X2luc25fbGhfZXh0 cmFjdF94ZChpbnNuKTsKPiA+ICsgICAgICAgfSBlbHNlIGlmIChyaXNjdl9pbnNuX2lzX2xodShp bnNuKSkgewo+ID4gICAgICAgICAgICAgICAgIGxlbiA9IDI7Cj4gPiAtI2lmIGRlZmluZWQoQ09O RklHXzY0QklUKQo+ID4gLSAgICAgICB9IGVsc2UgaWYgKChpbnNuICYgSU5TTl9NQVNLX0NfTEQp ID09IElOU05fTUFUQ0hfQ19MRCkgewo+ID4gKyAgICAgICAgICAgICAgIHJkID0gcmlzY3ZfaW5z bl9saHVfZXh0cmFjdF94ZChpbnNuKTsKPiA+ICsgICAgICAgfSBlbHNlIGlmIChyaXNjdl9pbnNu X2lzX2NfbGQoaW5zbikpIHsKPiA+ICAgICAgICAgICAgICAgICBsZW4gPSA4Owo+ID4gICAgICAg ICAgICAgICAgIHNoaWZ0ID0gOCAqIChzaXplb2YodW5zaWduZWQgbG9uZykgLSBsZW4pOwo+ID4g LSAgICAgICAgICAgICAgIGluc24gPSBSVkNfUlMyUyhpbnNuKSA8PCBTSF9SRDsKPiA+IC0gICAg ICAgfSBlbHNlIGlmICgoaW5zbiAmIElOU05fTUFTS19DX0xEU1ApID09IElOU05fTUFUQ0hfQ19M RFNQICYmCj4gPiAtICAgICAgICAgICAgICAgICAgKChpbnNuID4+IFNIX1JEKSAmIDB4MWYpKSB7 Cj4gPiArICAgICAgICAgICAgICAgcmQgPSAoOCArIHJpc2N2X2luc25fY19sZF9leHRyYWN0X3hk KGluc24pKTsKPiA+ICsgICAgICAgfSBlbHNlIGlmIChyaXNjdl9pbnNuX2lzX2NfbGRzcChpbnNu KSkgewo+ID4gICAgICAgICAgICAgICAgIGxlbiA9IDg7Cj4gPiAgICAgICAgICAgICAgICAgc2hp ZnQgPSA4ICogKHNpemVvZih1bnNpZ25lZCBsb25nKSAtIGxlbik7Cj4gPiAtI2VuZGlmCj4gPiAt ICAgICAgIH0gZWxzZSBpZiAoKGluc24gJiBJTlNOX01BU0tfQ19MVykgPT0gSU5TTl9NQVRDSF9D X0xXKSB7Cj4gPiArICAgICAgICAgICAgICAgcmQgPSByaXNjdl9pbnNuX2NfbGRzcF9leHRyYWN0 X3hkKGluc24pOwo+ID4gKyAgICAgICB9IGVsc2UgaWYgKHJpc2N2X2luc25faXNfY19sdyhpbnNu KSkgewo+ID4gICAgICAgICAgICAgICAgIGxlbiA9IDQ7Cj4gPiAgICAgICAgICAgICAgICAgc2hp ZnQgPSA4ICogKHNpemVvZih1bnNpZ25lZCBsb25nKSAtIGxlbik7Cj4gPiAtICAgICAgICAgICAg ICAgaW5zbiA9IFJWQ19SUzJTKGluc24pIDw8IFNIX1JEOwo+ID4gLSAgICAgICB9IGVsc2UgaWYg KChpbnNuICYgSU5TTl9NQVNLX0NfTFdTUCkgPT0gSU5TTl9NQVRDSF9DX0xXU1AgJiYKPiA+IC0g ICAgICAgICAgICAgICAgICAoKGluc24gPj4gU0hfUkQpICYgMHgxZikpIHsKPiA+ICsgICAgICAg ICAgICAgICByZCA9ICg4ICsgcmlzY3ZfaW5zbl9jX2x3X2V4dHJhY3RfeGQoaW5zbikpOwo+ID4g KyAgICAgICB9IGVsc2UgaWYgKHJpc2N2X2luc25faXNfY19sd3NwKGluc24pKSB7Cj4gPiAgICAg ICAgICAgICAgICAgbGVuID0gNDsKPiA+ICAgICAgICAgICAgICAgICBzaGlmdCA9IDggKiAoc2l6 ZW9mKHVuc2lnbmVkIGxvbmcpIC0gbGVuKTsKPiA+IC0gICAgICAgfSBlbHNlIGlmICgoaW5zbiAm IElOU05fTUFTS19DX0ZMRCkgPT0gSU5TTl9NQVRDSF9DX0ZMRCkgewo+ID4gKyAgICAgICAgICAg ICAgIHJkID0gcmlzY3ZfaW5zbl9jX2x3c3BfZXh0cmFjdF94ZChpbnNuKTsKPiA+ICsgICAgICAg fSBlbHNlIGlmIChyaXNjdl9pbnNuX2lzX2NfZmxkKGluc24pKSB7Cj4gPiAgICAgICAgICAgICAg ICAgZnAgPSAxOwo+ID4gICAgICAgICAgICAgICAgIGxlbiA9IDg7Cj4gPiAtICAgICAgICAgICAg ICAgaW5zbiA9IFJWQ19SUzJTKGluc24pIDw8IFNIX1JEOwo+ID4gLSAgICAgICB9IGVsc2UgaWYg KChpbnNuICYgSU5TTl9NQVNLX0NfRkxEU1ApID09IElOU05fTUFUQ0hfQ19GTERTUCkgewo+ID4g KyAgICAgICAgICAgICAgIHJkID0gKDggKyByaXNjdl9pbnNuX2NfZmxkX2V4dHJhY3RfZmQoaW5z bikpOwo+ID4gKyAgICAgICB9IGVsc2UgaWYgKHJpc2N2X2luc25faXNfY19mbGRzcChpbnNuKSkg ewo+ID4gICAgICAgICAgICAgICAgIGZwID0gMTsKPiA+ICAgICAgICAgICAgICAgICBsZW4gPSA4 Owo+ID4gLSNpZiBkZWZpbmVkKENPTkZJR18zMkJJVCkKPiA+IC0gICAgICAgfSBlbHNlIGlmICgo aW5zbiAmIElOU05fTUFTS19DX0ZMVykgPT0gSU5TTl9NQVRDSF9DX0ZMVykgewo+ID4gKyAgICAg ICAgICAgICAgIHJkID0gcmlzY3ZfaW5zbl9jX2ZsZHNwX2V4dHJhY3RfZmQoaW5zbik7Cj4gPiAr ICAgICAgIH0gZWxzZSBpZiAocmlzY3ZfaW5zbl9pc19jX2ZsdyhpbnNuKSkgewo+ID4gICAgICAg ICAgICAgICAgIGZwID0gMTsKPiA+ICAgICAgICAgICAgICAgICBsZW4gPSA0Owo+ID4gLSAgICAg ICAgICAgICAgIGluc24gPSBSVkNfUlMyUyhpbnNuKSA8PCBTSF9SRDsKPiA+IC0gICAgICAgfSBl bHNlIGlmICgoaW5zbiAmIElOU05fTUFTS19DX0ZMV1NQKSA9PSBJTlNOX01BVENIX0NfRkxXU1Ap IHsKPiA+ICsgICAgICAgICAgICAgICByZCA9ICg4ICsgcmlzY3ZfaW5zbl9jX2Zsd19leHRyYWN0 X2ZkKGluc24pKTsKPiA+ICsgICAgICAgfSBlbHNlIGlmIChyaXNjdl9pbnNuX2lzX2NfZmx3c3Ao aW5zbikpIHsKPiA+ICAgICAgICAgICAgICAgICBmcCA9IDE7Cj4gPiAgICAgICAgICAgICAgICAg bGVuID0gNDsKPiA+IC0jZW5kaWYKPiA+IC0gICAgICAgfSBlbHNlIGlmICgoaW5zbiAmIElOU05f TUFTS19DX0xIVSkgPT0gSU5TTl9NQVRDSF9DX0xIVSkgewo+ID4gKyAgICAgICAgICAgICAgIHJk ID0gcmlzY3ZfaW5zbl9jX2Zsd3NwX2V4dHJhY3RfZmQoaW5zbik7Cj4gPiArICAgICAgIH0gZWxz ZSBpZiAocmlzY3ZfaW5zbl9pc19jX2xodShpbnNuKSkgewo+ID4gICAgICAgICAgICAgICAgIGxl biA9IDI7Cj4gPiAtICAgICAgICAgICAgICAgaW5zbiA9IFJWQ19SUzJTKGluc24pIDw8IFNIX1JE Owo+ID4gLSAgICAgICB9IGVsc2UgaWYgKChpbnNuICYgSU5TTl9NQVNLX0NfTEgpID09IElOU05f TUFUQ0hfQ19MSCkgewo+ID4gKyAgICAgICAgICAgICAgIHJkID0gKDggKyByaXNjdl9pbnNuX2Nf bGh1X2V4dHJhY3RfeGQoaW5zbikpOwo+ID4gKyAgICAgICB9IGVsc2UgaWYgKHJpc2N2X2luc25f aXNfY19saChpbnNuKSkgewo+ID4gICAgICAgICAgICAgICAgIGxlbiA9IDI7Cj4gPiAtICAgICAg ICAgICAgICAgc2hpZnQgPSA4ICogKHNpemVvZih1bG9uZykgLSBsZW4pOwo+ID4gLSAgICAgICAg ICAgICAgIGluc24gPSBSVkNfUlMyUyhpbnNuKSA8PCBTSF9SRDsKPiA+ICsgICAgICAgICAgICAg ICBzaGlmdCA9IDggKiAoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpIC0gbGVuKTsKPiA+ICsgICAgICAg ICAgICAgICByZCA9ICg4ICsgcmlzY3ZfaW5zbl9jX2xoX2V4dHJhY3RfeGQoaW5zbikpOwo+ID4g ICAgICAgICB9IGVsc2Ugewo+ID4gICAgICAgICAgICAgICAgIHJlZ3MtPmVwYyA9IGVwYzsKPiA+ ICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Cj4gPiBAQCAtMzE5LDExICszMDEsMTEgQEAgc3Rh dGljIGludCBoYW5kbGVfc2NhbGFyX21pc2FsaWduZWRfbG9hZChzdHJ1Y3QgcHRfcmVncyAqcmVn cykKPiA+ICAgICAgICAgfQo+ID4KPiA+ICAgICAgICAgaWYgKCFmcCkKPiA+IC0gICAgICAgICAg ICAgICBTRVRfUkQoaW5zbiwgcmVncywgKGxvbmcpKHZhbC5kYXRhX3Vsb25nIDw8IHNoaWZ0KSA+ PiBzaGlmdCk7Cj4gPiArICAgICAgICAgICAgICAgKih1bnNpZ25lZCBsb25nICopKCh1bnNpZ25l ZCBsb25nICopcmVncyArIHJkKSA9IHZhbC5kYXRhX3Vsb25nIDw8IHNoaWZ0Owo+ID4gICAgICAg ICBlbHNlIGlmIChsZW4gPT0gOCkKPiA+IC0gICAgICAgICAgICAgICBzZXRfZjY0X3JkKGluc24s IHJlZ3MsIHZhbC5kYXRhX3U2NCk7Cj4gPiArICAgICAgICAgICAgICAgc2V0X2Y2NF9yZChyZCwg cmVncywgdmFsLmRhdGFfdTY0KTsKPiA+ICAgICAgICAgZWxzZQo+ID4gLSAgICAgICAgICAgICAg IHNldF9mMzJfcmQoaW5zbiwgcmVncywgdmFsLmRhdGFfdWxvbmcpOwo+ID4gKyAgICAgICAgICAg ICAgIHNldF9mMzJfcmQocmQsIHJlZ3MsIHZhbC5kYXRhX3Vsb25nKTsKPiA+Cj4gPiAgICAgICAg IHJlZ3MtPmVwYyA9IGVwYyArIElOU05fTEVOKGluc24pOwo+ID4KPiA+IEBAIC0zMzYsNyArMzE4 LDcgQEAgc3RhdGljIGludCBoYW5kbGVfc2NhbGFyX21pc2FsaWduZWRfc3RvcmUoc3RydWN0IHB0 X3JlZ3MgKnJlZ3MpCj4gPiAgICAgICAgIHVuc2lnbmVkIGxvbmcgZXBjID0gcmVncy0+ZXBjOwo+ ID4gICAgICAgICB1bnNpZ25lZCBsb25nIGluc247Cj4gPiAgICAgICAgIHVuc2lnbmVkIGxvbmcg YWRkciA9IHJlZ3MtPmJhZGFkZHI7Cj4gPiAtICAgICAgIGludCBsZW4gPSAwLCBmcCA9IDA7Cj4g PiArICAgICAgIGludCBmcCA9IDAsIGxlbiA9IDAsIHJkID0gMDsKPiA+Cj4gPiAgICAgICAgIHBl cmZfc3dfZXZlbnQoUEVSRl9DT1VOVF9TV19BTElHTk1FTlRfRkFVTFRTLCAxLCByZWdzLCBhZGRy KTsKPiA+Cj4gPiBAQCAtMzUxLDY3ICszMzMsNjggQEAgc3RhdGljIGludCBoYW5kbGVfc2NhbGFy X21pc2FsaWduZWRfc3RvcmUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCj4gPgo+ID4gICAgICAgICBy ZWdzLT5lcGMgPSAwOwo+ID4KPiA+IC0gICAgICAgdmFsLmRhdGFfdWxvbmcgPSBHRVRfUlMyKGlu c24sIHJlZ3MpOwo+ID4gLQo+ID4gLSAgICAgICBpZiAoKGluc24gJiBJTlNOX01BU0tfU1cpID09 IElOU05fTUFUQ0hfU1cpIHsKPiA+ICsgICAgICAgaWYgKHJpc2N2X2luc25faXNfc3coaW5zbikp IHsKPiA+ICAgICAgICAgICAgICAgICBsZW4gPSA0Owo+ID4gLSNpZiBkZWZpbmVkKENPTkZJR182 NEJJVCkKPiA+IC0gICAgICAgfSBlbHNlIGlmICgoaW5zbiAmIElOU05fTUFTS19TRCkgPT0gSU5T Tl9NQVRDSF9TRCkgewo+ID4gKyAgICAgICAgICAgICAgIHJkID0gcmlzY3ZfaW5zbl9zd19leHRy YWN0X3hzMihpbnNuKTsKPiA+ICsgICAgICAgfSBlbHNlIGlmIChyaXNjdl9pbnNuX2lzX3NkKGlu c24pKSB7Cj4gPiAgICAgICAgICAgICAgICAgbGVuID0gODsKPiA+IC0jZW5kaWYKPiA+IC0gICAg ICAgfSBlbHNlIGlmICgoaW5zbiAmIElOU05fTUFTS19GU0QpID09IElOU05fTUFUQ0hfRlNEKSB7 Cj4gPiArICAgICAgICAgICAgICAgcmQgPSByaXNjdl9pbnNuX3NkX2V4dHJhY3RfeHMyKGluc24p Owo+ID4gKyAgICAgICB9IGVsc2UgaWYgKHJpc2N2X2luc25faXNfZnNkKGluc24pKSB7Cj4gPiAg ICAgICAgICAgICAgICAgZnAgPSAxOwo+ID4gICAgICAgICAgICAgICAgIGxlbiA9IDg7Cj4gPiAt ICAgICAgICAgICAgICAgdmFsLmRhdGFfdTY0ID0gR0VUX0Y2NF9SUzIoaW5zbiwgcmVncyk7Cj4g PiAtICAgICAgIH0gZWxzZSBpZiAoKGluc24gJiBJTlNOX01BU0tfRlNXKSA9PSBJTlNOX01BVENI X0ZTVykgewo+ID4gKyAgICAgICAgICAgICAgIHJkID0gcmlzY3ZfaW5zbl9mc2RfZXh0cmFjdF9m czIoaW5zbik7Cj4gPiArICAgICAgIH0gZWxzZSBpZiAocmlzY3ZfaW5zbl9pc19mc3coaW5zbikp IHsKPiA+ICAgICAgICAgICAgICAgICBmcCA9IDE7Cj4gPiAgICAgICAgICAgICAgICAgbGVuID0g NDsKPiA+IC0gICAgICAgICAgICAgICB2YWwuZGF0YV91bG9uZyA9IEdFVF9GMzJfUlMyKGluc24s IHJlZ3MpOwo+ID4gLSAgICAgICB9IGVsc2UgaWYgKChpbnNuICYgSU5TTl9NQVNLX1NIKSA9PSBJ TlNOX01BVENIX1NIKSB7Cj4gPiArICAgICAgICAgICAgICAgcmQgPSByaXNjdl9pbnNuX2Zzd19l eHRyYWN0X2ZzMihpbnNuKTsKPiA+ICsgICAgICAgfSBlbHNlIGlmIChyaXNjdl9pbnNuX2lzX3No KGluc24pKSB7Cj4gPiAgICAgICAgICAgICAgICAgbGVuID0gMjsKPiA+IC0jaWYgZGVmaW5lZChD T05GSUdfNjRCSVQpCj4gPiAtICAgICAgIH0gZWxzZSBpZiAoKGluc24gJiBJTlNOX01BU0tfQ19T RCkgPT0gSU5TTl9NQVRDSF9DX1NEKSB7Cj4gPiArICAgICAgICAgICAgICAgcmQgPSByaXNjdl9p bnNuX3NoX2V4dHJhY3RfeHMyKGluc24pOwo+ID4gKyAgICAgICB9IGVsc2UgaWYgKHJpc2N2X2lu c25faXNfY19zZChpbnNuKSkgewo+ID4gICAgICAgICAgICAgICAgIGxlbiA9IDg7Cj4gPiAtICAg ICAgICAgICAgICAgdmFsLmRhdGFfdWxvbmcgPSBHRVRfUlMyUyhpbnNuLCByZWdzKTsKPiA+IC0g ICAgICAgfSBlbHNlIGlmICgoaW5zbiAmIElOU05fTUFTS19DX1NEU1ApID09IElOU05fTUFUQ0hf Q19TRFNQKSB7Cj4gPiArICAgICAgICAgICAgICAgcmQgPSByaXNjdl9pbnNuX2Nfc2RfZXh0cmFj dF94czIoaW5zbik7Cj4gPiArICAgICAgIH0gZWxzZSBpZiAocmlzY3ZfaW5zbl9pc19jX3Nkc3Ao aW5zbikpIHsKPiA+ICAgICAgICAgICAgICAgICBsZW4gPSA4Owo+ID4gLSAgICAgICAgICAgICAg IHZhbC5kYXRhX3Vsb25nID0gR0VUX1JTMkMoaW5zbiwgcmVncyk7Cj4gPiAtI2VuZGlmCj4gPiAt ICAgICAgIH0gZWxzZSBpZiAoKGluc24gJiBJTlNOX01BU0tfQ19TVykgPT0gSU5TTl9NQVRDSF9D X1NXKSB7Cj4gPiArICAgICAgICAgICAgICAgcmQgPSByaXNjdl9pbnNuX2Nfc2RzcF9leHRyYWN0 X3hzMihpbnNuKTsKPiA+ICsgICAgICAgfSBlbHNlIGlmIChyaXNjdl9pbnNuX2lzX2Nfc3coaW5z bikpIHsKPiA+ICAgICAgICAgICAgICAgICBsZW4gPSA0Owo+ID4gLSAgICAgICAgICAgICAgIHZh bC5kYXRhX3Vsb25nID0gR0VUX1JTMlMoaW5zbiwgcmVncyk7Cj4gPiAtICAgICAgIH0gZWxzZSBp ZiAoKGluc24gJiBJTlNOX01BU0tfQ19TV1NQKSA9PSBJTlNOX01BVENIX0NfU1dTUCkgewo+ID4g KyAgICAgICAgICAgICAgIHJkID0gcmlzY3ZfaW5zbl9jX3N3X2V4dHJhY3RfeHMyKGluc24pOwo+ ID4gKyAgICAgICB9IGVsc2UgaWYgKHJpc2N2X2luc25faXNfY19zd3NwKGluc24pKSB7Cj4gPiAg ICAgICAgICAgICAgICAgbGVuID0gNDsKPiA+IC0gICAgICAgICAgICAgICB2YWwuZGF0YV91bG9u ZyA9IEdFVF9SUzJDKGluc24sIHJlZ3MpOwo+ID4gLSAgICAgICB9IGVsc2UgaWYgKChpbnNuICYg SU5TTl9NQVNLX0NfRlNEKSA9PSBJTlNOX01BVENIX0NfRlNEKSB7Cj4gPiArICAgICAgICAgICAg ICAgcmQgPSByaXNjdl9pbnNuX2Nfc3dzcF9leHRyYWN0X3hzMihpbnNuKTsKPiA+ICsgICAgICAg fSBlbHNlIGlmIChyaXNjdl9pbnNuX2lzX2NfZnNkKGluc24pKSB7Cj4gPiAgICAgICAgICAgICAg ICAgZnAgPSAxOwo+ID4gICAgICAgICAgICAgICAgIGxlbiA9IDg7Cj4gPiAtICAgICAgICAgICAg ICAgdmFsLmRhdGFfdTY0ID0gR0VUX0Y2NF9SUzJTKGluc24sIHJlZ3MpOwo+ID4gLSAgICAgICB9 IGVsc2UgaWYgKChpbnNuICYgSU5TTl9NQVNLX0NfRlNEU1ApID09IElOU05fTUFUQ0hfQ19GU0RT UCkgewo+ID4gKyAgICAgICAgICAgICAgIHJkID0gcmlzY3ZfaW5zbl9jX2ZzZF9leHRyYWN0X2Zz MihpbnNuKTsKPiA+ICsgICAgICAgfSBlbHNlIGlmIChyaXNjdl9pbnNuX2lzX2NfZnNkc3AoaW5z bikpIHsKPiA+ICAgICAgICAgICAgICAgICBmcCA9IDE7Cj4gPiAgICAgICAgICAgICAgICAgbGVu ID0gODsKPiA+IC0gICAgICAgICAgICAgICB2YWwuZGF0YV91NjQgPSBHRVRfRjY0X1JTMkMoaW5z biwgcmVncyk7Cj4gPiAtI2lmICFkZWZpbmVkKENPTkZJR182NEJJVCkKPiAKPiBTaG91bGRuJ3Qg d2Uga2VlcCB0aGlzPwoKVGhlIGlmZGVmIGRvZXNuJ3QgbWF0dGVyIGFueW1vcmUgYmVjYXVzZSB0 aGUgbmV3IHJpc2N2X2luc25faXNfKigpIGhhdmUKYXJlIGFsbCBpZmRlZidkIG91dCBzbyB1bmNv bmRpdGlvbmFsbHkgcmV0dXJuIGZhbHNlIGlmIHRoZXkgYXJlIG5vdApzdXBwb3J0ZWQgb24gQ09O RklHXzY0QklUL0NPTkZJR18zMkJJVC4KCj4gCj4gPiAtICAgICAgIH0gZWxzZSBpZiAoKGluc24g JiBJTlNOX01BU0tfQ19GU1cpID09IElOU05fTUFUQ0hfQ19GU1cpIHsKPiA+ICsgICAgICAgICAg ICAgICByZCA9IHJpc2N2X2luc25fY19mc2RzcF9leHRyYWN0X2ZzMihpbnNuKTsKPiA+ICsgICAg ICAgfSBlbHNlIGlmIChyaXNjdl9pbnNuX2lzX2NfZnN3KGluc24pKSB7Cj4gPiAgICAgICAgICAg ICAgICAgZnAgPSAxOwo+ID4gICAgICAgICAgICAgICAgIGxlbiA9IDQ7Cj4gPiAtICAgICAgICAg ICAgICAgdmFsLmRhdGFfdWxvbmcgPSBHRVRfRjMyX1JTMlMoaW5zbiwgcmVncyk7Cj4gPiAtICAg ICAgIH0gZWxzZSBpZiAoKGluc24gJiBJTlNOX01BU0tfQ19GU1dTUCkgPT0gSU5TTl9NQVRDSF9D X0ZTV1NQKSB7Cj4gPiArICAgICAgICAgICAgICAgcmQgPSByaXNjdl9pbnNuX2NfZnN3X2V4dHJh Y3RfZnMyKGluc24pOwo+ID4gKyAgICAgICB9IGVsc2UgaWYgKHJpc2N2X2luc25faXNfY19mc3dz cChpbnNuKSkgewo+ID4gICAgICAgICAgICAgICAgIGZwID0gMTsKPiA+ICAgICAgICAgICAgICAg ICBsZW4gPSA0Owo+ID4gLSAgICAgICAgICAgICAgIHZhbC5kYXRhX3Vsb25nID0gR0VUX0YzMl9S UzJDKGluc24sIHJlZ3MpOwo+ID4gLSNlbmRpZgo+ID4gLSAgICAgICB9IGVsc2UgaWYgKChpbnNu ICYgSU5TTl9NQVNLX0NfU0gpID09IElOU05fTUFUQ0hfQ19TSCkgewo+ID4gKyAgICAgICAgICAg ICAgIHJkID0gcmlzY3ZfaW5zbl9jX2Zzd3NwX2V4dHJhY3RfZnMyKGluc24pOwo+ID4gKyAgICAg ICB9IGVsc2UgaWYgKHJpc2N2X2luc25faXNfY19zaChpbnNuKSkgewo+ID4gICAgICAgICAgICAg ICAgIGxlbiA9IDI7Cj4gPiAtICAgICAgICAgICAgICAgdmFsLmRhdGFfdWxvbmcgPSBHRVRfUlMy UyhpbnNuLCByZWdzKTsKPiA+ICsgICAgICAgICAgICAgICByZCA9IHJpc2N2X2luc25fY19zaF9l eHRyYWN0X3hzMihpbnNuKTsKPiA+ICAgICAgICAgfSBlbHNlIHsKPiA+IC0gICAgICAgICAgICAg ICByZWdzLT5lcGMgPSBlcGM7Cj4gCj4gVGhpcyBsaW5lIHNob3VsZCBiZSBrZXB0LgoKT2ggaHVo IEkgd29uZGVyIHdoeSBJIGdvdCByaWQgb2YgdGhpcy4gR29vZCBjYXRjaCwgdGhhbmsgeW91IQoK LSBDaGFybGllCgo+IAo+IFRoYW5rcywKPiBKZXNzZSBUYXViZQo+IAo+ID4gICAgICAgICAgICAg ICAgIHJldHVybiAtMTsKPiA+ICAgICAgICAgfQo+ID4KPiA+ICAgICAgICAgaWYgKCFJU19FTkFC TEVEKENPTkZJR19GUFUpICYmIGZwKQo+ID4gICAgICAgICAgICAgICAgIHJldHVybiAtRU9QTk9U U1VQUDsKPiA+Cj4gPiArICAgICAgIGlmICghZnApCj4gPiArICAgICAgICAgICAgICAgdmFsLmRh dGFfdWxvbmcgPSAqKHVuc2lnbmVkIGxvbmcgKikoKHVuc2lnbmVkIGxvbmcgKilyZWdzICsgcmQp Owo+ID4gKyAgICAgICBlbHNlIGlmIChsZW4gPT0gOCkKPiA+ICsgICAgICAgICAgICAgICB2YWwu ZGF0YV91NjQgPSBnZXRfZjY0X3JzKHJkLCByZWdzKTsKPiA+ICsgICAgICAgZWxzZQo+ID4gKyAg ICAgICAgICAgICAgIHZhbC5kYXRhX3Vsb25nID0gZ2V0X2YzMl9ycyhyZCwgcmVncyk7Cj4gPiAr Cj4gPiAgICAgICAgIGlmICh1c2VyX21vZGUocmVncykpIHsKPiA+ICAgICAgICAgICAgICAgICBp ZiAoY29weV90b191c2VyKCh1OCBfX3VzZXIgKilhZGRyLCAmdmFsLCBsZW4pKQo+ID4gICAgICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwo+ID4KPiA+IC0tCj4gPiAyLjU0LjAKPiA+Cj4g Pgo+ID4KPiA+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f Cj4gPiBsaW51eC1yaXNjdiBtYWlsaW5nIGxpc3QKPiA+IGxpbnV4LXJpc2N2QGxpc3RzLmluZnJh ZGVhZC5vcmcKPiA+IGh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8v bGludXgtcmlzY3YKCi0tIAprdm0tcmlzY3YgbWFpbGluZyBsaXN0Cmt2bS1yaXNjdkBsaXN0cy5p bmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8v a3ZtLXJpc2N2Cg==