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 X-Spam-Level: X-Spam-Status: No, score=-28.3 required=3.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 54D01C433B4 for ; Thu, 6 May 2021 01:30:34 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 2AB60611AD for ; Thu, 6 May 2021 01:30:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230155AbhEFBb3 (ORCPT ); Wed, 5 May 2021 21:31:29 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44124 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229465AbhEFBbX (ORCPT ); Wed, 5 May 2021 21:31:23 -0400 Received: from mail-yb1-xb32.google.com (mail-yb1-xb32.google.com [IPv6:2607:f8b0:4864:20::b32]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C93DAC06174A for ; Wed, 5 May 2021 18:30:24 -0700 (PDT) Received: by mail-yb1-xb32.google.com with SMTP id i4so5280657ybe.2 for ; Wed, 05 May 2021 18:30:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=4jdFlQQhwcuUMaQbTiz6auX3KhbNqzXDz2dgyLefSrs=; b=nmmG/1yMLOtrzgw10l+XAcSFWXRepORPYuc0Ij0+EHiuX/Klkq1thX6nPJzyQAkHmI 35vi6rDiI0H0kSp47ul1VG1az3vWv8OzhSHAnOsj+PzvD+LTMiVVmbTg4ZyAkIAxbdzw RQ6Op05sN81agSUVXO4RRhUPhz8zD6D2dbQvOluqFH2BDUV0M/fghKKK6Y5UEHvIPpdL 2Ik6sPSeld/snHNe9BZSkHaQJTkDre3n61VbDGKwlG/USxRbeYcOpQ0CvOuO2+QLJauM zvd26lxLiH9Ppy15aW10O9BOHN5Nv9hLm47hepuOm/E39cHPckc2LHDTxA5DF+HWuHCx nBOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=4jdFlQQhwcuUMaQbTiz6auX3KhbNqzXDz2dgyLefSrs=; b=k51asaADfTOU1erBVoA8mSv56nP2uEDAQYVmGG+yJ/tdgD6LFvgK4cWd7vwYiLWSm/ eNT5TZ+ZEL7GM2CKoRMClKzGS/WQw0VX7cQBzZoWvSb34iYhwpMQvDpR9Y8hLuJowogu eNYEJKYRxguYLh/f8IPCXXLukl6XOVFPbVRBXrj6HDIfawdt7Pw+bSz0tDm/lmQUYwEv c1I2bHsDeTgylJi/nlielX0g8fuWyvf13E5IhGA/uB+XRTtZQTAuqJBPho6mcMKBJsNA Hjue0JVsky+8B9hSza9kacg/cPHNOTNEZUA1w1eQTTrZz7IBgLp/D6gu75gNCgdZ9a+E zOhg== X-Gm-Message-State: AOAM5326fyTZIhfyeEAv1Ri2xZ5V2zuIZ5PV2B2d9nVTfEvytLMLGTpi 5OnO+LrH7QEKvucqREitxTFr8A0pySRKvecxUldlkQ== X-Google-Smtp-Source: ABdhPJww73sr0mo+CEyjpgK0Mkb0Hi3aPtbFqDTjre1RvELGtO9jgcTLNFcBBq2C+7b0stZYFFhNI1db+lytEdEy7+4= X-Received: by 2002:a25:d8cc:: with SMTP id p195mr2247147ybg.170.1620264623590; Wed, 05 May 2021 18:30:23 -0700 (PDT) MIME-Version: 1.0 References: <20210416203522.2397801-1-jiancai@google.com> <20210416232341.2421342-1-jiancai@google.com> In-Reply-To: From: Jian Cai Date: Wed, 5 May 2021 18:30:12 -0700 Message-ID: Subject: Re: [PATCH v3] arm64: vdso: remove commas between macro name and arguments To: Nathan Chancellor Cc: "# 3.4.x" , Greg KH , Sasha Levin , Nick Desaulniers , Manoj Gupta , Luis Lozano , clang-built-linux , Catalin Marinas , Will Deacon , Linux ARM , Linux Kernel Mailing List Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Sorry I sent V4 but forgot to reply to specify message ID, so it is in its own thread right now: https://lore.kernel.org/stable/20210506012508.3822221-1-jiancai@google.com/= T/#u. Please let me know if I should also send it to this thread. Jian On Wed, May 5, 2021 at 6:03 PM Jian Cai wrote: > > Hi Nathan, > > Please find my comments inlined. > > Thanks, > Jian > > On Wed, May 5, 2021 at 2:07 PM Nathan Chancellor wrot= e: > > > > Hi Jian, > > > > On Fri, Apr 16, 2021 at 04:23:41PM -0700, Jian Cai wrote: > > > LLVM's integrated assembler does not support using commas separating > > > the name and arguments in .macro. However, only spaces are used in th= e > > > manual page. This replaces commas between macro names and the subsequ= ent > > > arguments with space in calls to clock_gettime_return to make it > > > compatible with IAS. > > > > > > Link: > > > https://sourceware.org/binutils/docs/as/Macro.html#Macro > > > https://github.com/ClangBuiltLinux/linux/issues/1349 > > > > > > Signed-off-by: Jian Cai > > > > The actual patch itself looks fine to me but there should be some more > > explanation in the commit message that this patch is for 4.19 only and > > why it is not applicable upstream. Additionally, I would recommend usin= g > > the '--subject-prefix=3D' flag to 'git format-patch' to clarify that as > > well, something like '--subject-prefix=3D"PATCH 4.19 ONLY"'? > > > > My explanation would be something like (take bits and pieces as you fee= l > > necessary): > > > > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > > > > [PATCH 4.19 ONLY] arm64: vdso: remove commas between macro name and > > arguments > > > > LLVM's integrated assembler does not support using a comma to separate > > a macro name and its arguments when there is only one argument with a > > default value: > > > > arch/arm64/kernel/vdso/gettimeofday.S:230:24: error: too many positiona= l > > arguments > > clock_gettime_return, shift=3D1 > > ^ > > arch/arm64/kernel/vdso/gettimeofday.S:253:24: error: too many positiona= l > > arguments > > clock_gettime_return, shift=3D1 > > ^ > > arch/arm64/kernel/vdso/gettimeofday.S:274:24: error: too many positiona= l > > arguments > > clock_gettime_return, shift=3D1 > > ^ > > > > This error is not in mainline because commit 28b1a824a4f4 ("arm64: vdso= : > > Substitute gettimeofday() with C implementation") rewrote this assemble= r > > file in C as part of a 25 patch series that is unsuitable for stable. > > Just remove the comma in the clock_gettime_return invocations in 4.19 s= o > > that GNU as and LLVM's integrated assembler work the same. > > > > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > > > > I worded the first sentence the way that I did because correct me if I > > am wrong but it seems that the integrated assembler has no issues with > > the use of commas separating the arguments in a .macro definition as > > that is done everywhere in arch/arm64, just not when there is a single > > parameter with a default value because essentially what it is evaluatin= g > > it to is "clock_gettime_return ,shift=3D1", which according to the GAS > > manual [1] means that "shift" is actually being set to 0 then there is = an > > other parameter, when it expects only one. > > > > [1]: After the definition is complete, you can call the macro either as > > =E2=80=98reserve_str a,b=E2=80=99 (with =E2=80=98\p1=E2=80=99 evaluatin= g to a and =E2=80=98\p2=E2=80=99 evaluating to > > b), or as =E2=80=98reserve_str ,b=E2=80=99 (with =E2=80=98\p1=E2=80=99 = evaluating as the default, in > > this case =E2=80=980=E2=80=99, and =E2=80=98\p2=E2=80=99 evaluating to = b). > > Ah you are right! I played with IAS a little and it did not have > problem parsing commas between the name and its arguments in a macro > expansion. However, IAS appears to assume an argument with default > value is passed whenever it sees a comma right after the macro name. > It will be fine if the number of following arguments is one less than > the number of parameters specified in the macro definition. Otherwise, > it fails with the reporter error. This happens to macros with multiple > parameters as well. For example, the following code works > > ``` > $ cat foo.s > .macro foo arg1=3D2, arg2=3D4 > ldr r0, [r1, #\arg1] > ldr r0, [r1, #\arg2] > .endm > > foo, arg2=3D8 > > $ llvm-mc -triple=3Darmv7a -filetype=3Dobj foo.s -o ias.o > arm-linux-gnueabihf-objdump -dr ias.o > > ias.o: file format elf32-littlearm > > > Disassembly of section .text: > > 00000000 <.text>: > 0: e5910001 ldr r0, [r1, #2] > 4: e5910003 ldr r0, [r1, #8] > ``` > > But the the following code fails, > > ``` > $ cat foo.s > .macro foo arg1=3D2, arg2=3D4 > ldr r0, [r1, #\arg1] > ldr r0, [r1, #\arg2] > .endm > > foo, arg1=3D2, arg2=3D8 > > $ llvm-mc -triple=3Darmv7a -filetype=3Dobj foo.s -o ias.o > foo.s:6:14: error: too many positional arguments > foo, arg1=3D2, arg2=3D8 > ``` > > I will update the commit message accordingly. > > > > Lastly, Will or Catalin should ack this as an explicitly out of mainlin= e > > patch so that Greg or Sasha can take it. I would put them on the "To:" > > line in addition to Greg and Sasha. > > > > Hopefully this is helpful! > > Thanks for the information! > > > > > Cheers, > > Nathan > > > > > --- > > > > > > Changes v1 -> v2: > > > Keep the comma in the macro definition to be consistent with other > > > definitions. > > > > > > Changes v2 -> v3: > > > Edit tags. > > > > > > arch/arm64/kernel/vdso/gettimeofday.S | 6 +++--- > > > 1 file changed, 3 insertions(+), 3 deletions(-) > > > > > > diff --git a/arch/arm64/kernel/vdso/gettimeofday.S b/arch/arm64/kerne= l/vdso/gettimeofday.S > > > index 856fee6d3512..b6faf8b5d1fe 100644 > > > --- a/arch/arm64/kernel/vdso/gettimeofday.S > > > +++ b/arch/arm64/kernel/vdso/gettimeofday.S > > > @@ -227,7 +227,7 @@ realtime: > > > seqcnt_check fail=3Drealtime > > > get_ts_realtime res_sec=3Dx10, res_nsec=3Dx11, \ > > > clock_nsec=3Dx15, xtime_sec=3Dx13, xtime_nsec=3Dx14, ns= ec_to_sec=3Dx9 > > > - clock_gettime_return, shift=3D1 > > > + clock_gettime_return shift=3D1 > > > > > > ALIGN > > > monotonic: > > > @@ -250,7 +250,7 @@ monotonic: > > > clock_nsec=3Dx15, xtime_sec=3Dx13, xtime_nsec=3Dx14, ns= ec_to_sec=3Dx9 > > > > > > add_ts sec=3Dx10, nsec=3Dx11, ts_sec=3Dx3, ts_nsec=3Dx4, nsec_t= o_sec=3Dx9 > > > - clock_gettime_return, shift=3D1 > > > + clock_gettime_return shift=3D1 > > > > > > ALIGN > > > monotonic_raw: > > > @@ -271,7 +271,7 @@ monotonic_raw: > > > clock_nsec=3Dx15, nsec_to_sec=3Dx9 > > > > > > add_ts sec=3Dx10, nsec=3Dx11, ts_sec=3Dx13, ts_nsec=3Dx14, nsec= _to_sec=3Dx9 > > > - clock_gettime_return, shift=3D1 > > > + clock_gettime_return shift=3D1 > > > > > > ALIGN > > > realtime_coarse: > > > -- > > > 2.31.1.368.gbe11c130af-goog > > > 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 X-Spam-Level: X-Spam-Status: No, score=-19.4 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_ADSP_CUSTOM_MED,DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 18524C433B4 for ; Thu, 6 May 2021 01:32:14 +0000 (UTC) Received: from desiato.infradead.org (desiato.infradead.org [90.155.92.199]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 8F6C56139A for ; Thu, 6 May 2021 01:32:13 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8F6C56139A Authentication-Results: mail.kernel.org; dmarc=fail (p=reject dis=none) header.from=google.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=desiato.20200630; h=Sender:Content-Transfer-Encoding :Content-Type:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:Cc:To:Subject:Message-ID:Date:From:In-Reply-To: References:MIME-Version:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=xVgEyOfFN0qFBXr5+Hw+LRNeGr61nprhQjT40UWUviQ=; b=LNqdh2ceNipeymd4c7ev2cmcB STzd1SKWz6fzeMLjvENPvxBNzJvrBQwcjKpTGqG2xI62Di8pf1rZ308Vd7tdjtaYxdocxhuhrNUNK ZxkQ/71yC3KSz0Au7Y/zUQSKMD2zjZqIfv1oztit3amHexvoIbrsVB+7dvZtm8yGc8rZbAmM2f8X4 ww3kGPzIPVv/mrVxoj9xCf5hZ160HfScqBT4+8Cr6QAT3+hF+GuiR1OGDv6lghijiXqLX0IlycE2A EtHJno1HLsKdXAIG1lSG6DU394/HJyJHsjLNY2mducIbod7NV2PCBBFVDrLiIkRoNLV1VU7GAScpK I0F39IKEA==; Received: from localhost ([::1] helo=desiato.infradead.org) by desiato.infradead.org with esmtp (Exim 4.94 #2 (Red Hat Linux)) id 1leSqW-002pWF-9c; Thu, 06 May 2021 01:30:32 +0000 Received: from bombadil.infradead.org ([2607:7c80:54:e::133]) by desiato.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1leSqS-002pW0-Fa for linux-arm-kernel@desiato.infradead.org; Thu, 06 May 2021 01:30:28 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20210309; h=Content-Transfer-Encoding: Content-Type:Cc:To:Subject:Message-ID:Date:From:In-Reply-To:References: MIME-Version:Sender:Reply-To:Content-ID:Content-Description; bh=4jdFlQQhwcuUMaQbTiz6auX3KhbNqzXDz2dgyLefSrs=; b=aRH7fKVPxc3/mNM12IhvAJpupW VM1cMSmvm55AMUiixItaHK9RafFj8BSEjVYtJwCJIS+OrVqr9NY4ku8vLIu2E4yh9o8Mv8nLD06is 5TfqJkKzVM2nsiVrRzSOuHyZp9NvVpqaGlegD+YLEDtv0zgPR1Lo/LzxNKRo0VlXiz/rGim5D686j lB67wdSkHJSU23ytjPB+ylPi2VYevObOWLfNTBO+49sxQzOM4T9j0ULQyMVWWR/aMkxTIeYT+cyjE O9z2BgLrqfCjrmvfVg5UWdVoGOKrfnUPvHTLIhTdErhMeLscXh/obNW1+dyMZiHts6tItPS9Waa16 Xa/LglYg==; Received: from mail-yb1-xb31.google.com ([2607:f8b0:4864:20::b31]) by bombadil.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1leSqP-005TZV-EL for linux-arm-kernel@lists.infradead.org; Thu, 06 May 2021 01:30:27 +0000 Received: by mail-yb1-xb31.google.com with SMTP id z1so5259024ybf.6 for ; Wed, 05 May 2021 18:30:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=4jdFlQQhwcuUMaQbTiz6auX3KhbNqzXDz2dgyLefSrs=; b=nmmG/1yMLOtrzgw10l+XAcSFWXRepORPYuc0Ij0+EHiuX/Klkq1thX6nPJzyQAkHmI 35vi6rDiI0H0kSp47ul1VG1az3vWv8OzhSHAnOsj+PzvD+LTMiVVmbTg4ZyAkIAxbdzw RQ6Op05sN81agSUVXO4RRhUPhz8zD6D2dbQvOluqFH2BDUV0M/fghKKK6Y5UEHvIPpdL 2Ik6sPSeld/snHNe9BZSkHaQJTkDre3n61VbDGKwlG/USxRbeYcOpQ0CvOuO2+QLJauM zvd26lxLiH9Ppy15aW10O9BOHN5Nv9hLm47hepuOm/E39cHPckc2LHDTxA5DF+HWuHCx nBOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=4jdFlQQhwcuUMaQbTiz6auX3KhbNqzXDz2dgyLefSrs=; b=E4pIsnPOrCa3Im4bicQKCTHgMSjnLbrH8NS+mZFGPBJl1ebZ2dEH1Go0pQj6F7vcdB WD9+dWtYSTgm5KgdFs0Aa+E2CGTMMWsSO+FDFETGwO/OX9P55dXkQPIegmb2gmjWgRHB j/iUTURG0RabIfZsNLDcLEuQ77mbtLhMhn5aWvm94VGNmQesxstxc3uXoe3B4vpVFTKC pK/QTWnTc3qtLV8YKRMqvpKwNZSIamCLaS3oO86/PYGGG/anQeCpTz2CtYtGmshyJPZJ R/o0lsa5zonLAAipbt2O4DwdhloO1W9eK4LNSF0TyGPHMX7bv59atwUKrAmRUPaj40+j h/TQ== X-Gm-Message-State: AOAM531XhIQwPZQK7vQ3v2i7dv7zQrlv1JAxD+dBJZus6Ct28CUc0tMB N0znj2Kr9vG8LhkR+Jfr90CMrvxLeQvyrhgPdixNeA== X-Google-Smtp-Source: ABdhPJww73sr0mo+CEyjpgK0Mkb0Hi3aPtbFqDTjre1RvELGtO9jgcTLNFcBBq2C+7b0stZYFFhNI1db+lytEdEy7+4= X-Received: by 2002:a25:d8cc:: with SMTP id p195mr2247147ybg.170.1620264623590; Wed, 05 May 2021 18:30:23 -0700 (PDT) MIME-Version: 1.0 References: <20210416203522.2397801-1-jiancai@google.com> <20210416232341.2421342-1-jiancai@google.com> In-Reply-To: From: Jian Cai Date: Wed, 5 May 2021 18:30:12 -0700 Message-ID: Subject: Re: [PATCH v3] arm64: vdso: remove commas between macro name and arguments To: Nathan Chancellor Cc: "# 3.4.x" , Greg KH , Sasha Levin , Nick Desaulniers , Manoj Gupta , Luis Lozano , clang-built-linux , Catalin Marinas , Will Deacon , Linux ARM , Linux Kernel Mailing List X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210505_183025_523477_6AA25ED8 X-CRM114-Status: GOOD ( 50.46 ) X-BeenThere: linux-arm-kernel@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-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org U29ycnkgSSBzZW50IFY0IGJ1dCBmb3Jnb3QgdG8gcmVwbHkgdG8gc3BlY2lmeSBtZXNzYWdlIElE LCBzbyBpdCBpcyBpbgppdHMgb3duIHRocmVhZCByaWdodCBub3c6Cmh0dHBzOi8vbG9yZS5rZXJu ZWwub3JnL3N0YWJsZS8yMDIxMDUwNjAxMjUwOC4zODIyMjIxLTEtamlhbmNhaUBnb29nbGUuY29t L1QvI3UuClBsZWFzZSBsZXQgbWUga25vdyBpZiBJIHNob3VsZCBhbHNvIHNlbmQgaXQgdG8gdGhp cyB0aHJlYWQuCgpKaWFuCgpPbiBXZWQsIE1heSA1LCAyMDIxIGF0IDY6MDMgUE0gSmlhbiBDYWkg PGppYW5jYWlAZ29vZ2xlLmNvbT4gd3JvdGU6Cj4KPiBIaSBOYXRoYW4sCj4KPiBQbGVhc2UgZmlu ZCBteSBjb21tZW50cyBpbmxpbmVkLgo+Cj4gVGhhbmtzLAo+IEppYW4KPgo+IE9uIFdlZCwgTWF5 IDUsIDIwMjEgYXQgMjowNyBQTSBOYXRoYW4gQ2hhbmNlbGxvciA8bmF0aGFuQGtlcm5lbC5vcmc+ IHdyb3RlOgo+ID4KPiA+IEhpIEppYW4sCj4gPgo+ID4gT24gRnJpLCBBcHIgMTYsIDIwMjEgYXQg MDQ6MjM6NDFQTSAtMDcwMCwgSmlhbiBDYWkgd3JvdGU6Cj4gPiA+IExMVk0ncyBpbnRlZ3JhdGVk IGFzc2VtYmxlciBkb2VzIG5vdCBzdXBwb3J0IHVzaW5nIGNvbW1hcyBzZXBhcmF0aW5nCj4gPiA+ IHRoZSBuYW1lIGFuZCBhcmd1bWVudHMgaW4gLm1hY3JvLiBIb3dldmVyLCBvbmx5IHNwYWNlcyBh cmUgdXNlZCBpbiB0aGUKPiA+ID4gbWFudWFsIHBhZ2UuIFRoaXMgcmVwbGFjZXMgY29tbWFzIGJl dHdlZW4gbWFjcm8gbmFtZXMgYW5kIHRoZSBzdWJzZXF1ZW50Cj4gPiA+IGFyZ3VtZW50cyB3aXRo IHNwYWNlIGluIGNhbGxzIHRvIGNsb2NrX2dldHRpbWVfcmV0dXJuIHRvIG1ha2UgaXQKPiA+ID4g Y29tcGF0aWJsZSB3aXRoIElBUy4KPiA+ID4KPiA+ID4gTGluazoKPiA+ID4gaHR0cHM6Ly9zb3Vy Y2V3YXJlLm9yZy9iaW51dGlscy9kb2NzL2FzL01hY3JvLmh0bWwjTWFjcm8KPiA+ID4gaHR0cHM6 Ly9naXRodWIuY29tL0NsYW5nQnVpbHRMaW51eC9saW51eC9pc3N1ZXMvMTM0OQo+ID4gPgo+ID4g PiBTaWduZWQtb2ZmLWJ5OiBKaWFuIENhaSA8amlhbmNhaUBnb29nbGUuY29tPgo+ID4KPiA+IFRo ZSBhY3R1YWwgcGF0Y2ggaXRzZWxmIGxvb2tzIGZpbmUgdG8gbWUgYnV0IHRoZXJlIHNob3VsZCBi ZSBzb21lIG1vcmUKPiA+IGV4cGxhbmF0aW9uIGluIHRoZSBjb21taXQgbWVzc2FnZSB0aGF0IHRo aXMgcGF0Y2ggaXMgZm9yIDQuMTkgb25seSBhbmQKPiA+IHdoeSBpdCBpcyBub3QgYXBwbGljYWJs ZSB1cHN0cmVhbS4gQWRkaXRpb25hbGx5LCBJIHdvdWxkIHJlY29tbWVuZCB1c2luZwo+ID4gdGhl ICctLXN1YmplY3QtcHJlZml4PScgZmxhZyB0byAnZ2l0IGZvcm1hdC1wYXRjaCcgdG8gY2xhcmlm eSB0aGF0IGFzCj4gPiB3ZWxsLCBzb21ldGhpbmcgbGlrZSAnLS1zdWJqZWN0LXByZWZpeD0iUEFU Q0ggNC4xOSBPTkxZIic/Cj4gPgo+ID4gTXkgZXhwbGFuYXRpb24gd291bGQgYmUgc29tZXRoaW5n IGxpa2UgKHRha2UgYml0cyBhbmQgcGllY2VzIGFzIHlvdSBmZWVsCj4gPiBuZWNlc3NhcnkpOgo+ ID4KPiA+ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQo+ID4KPiA+IFtQQVRDSCA0LjE5IE9OTFldIGFybTY0OiB2 ZHNvOiByZW1vdmUgY29tbWFzIGJldHdlZW4gbWFjcm8gbmFtZSBhbmQKPiA+IGFyZ3VtZW50cwo+ ID4KPiA+IExMVk0ncyBpbnRlZ3JhdGVkIGFzc2VtYmxlciBkb2VzIG5vdCBzdXBwb3J0IHVzaW5n IGEgY29tbWEgdG8gc2VwYXJhdGUKPiA+IGEgbWFjcm8gbmFtZSBhbmQgaXRzIGFyZ3VtZW50cyB3 aGVuIHRoZXJlIGlzIG9ubHkgb25lIGFyZ3VtZW50IHdpdGggYQo+ID4gZGVmYXVsdCB2YWx1ZToK PiA+Cj4gPiBhcmNoL2FybTY0L2tlcm5lbC92ZHNvL2dldHRpbWVvZmRheS5TOjIzMDoyNDogZXJy b3I6IHRvbyBtYW55IHBvc2l0aW9uYWwKPiA+IGFyZ3VtZW50cwo+ID4gIGNsb2NrX2dldHRpbWVf cmV0dXJuLCBzaGlmdD0xCj4gPiAgICAgICAgICAgICAgICAgICAgICAgIF4KPiA+IGFyY2gvYXJt NjQva2VybmVsL3Zkc28vZ2V0dGltZW9mZGF5LlM6MjUzOjI0OiBlcnJvcjogdG9vIG1hbnkgcG9z aXRpb25hbAo+ID4gYXJndW1lbnRzCj4gPiAgY2xvY2tfZ2V0dGltZV9yZXR1cm4sIHNoaWZ0PTEK PiA+ICAgICAgICAgICAgICAgICAgICAgICAgXgo+ID4gYXJjaC9hcm02NC9rZXJuZWwvdmRzby9n ZXR0aW1lb2ZkYXkuUzoyNzQ6MjQ6IGVycm9yOiB0b28gbWFueSBwb3NpdGlvbmFsCj4gPiBhcmd1 bWVudHMKPiA+ICBjbG9ja19nZXR0aW1lX3JldHVybiwgc2hpZnQ9MQo+ID4gICAgICAgICAgICAg ICAgICAgICAgICBeCj4gPgo+ID4gVGhpcyBlcnJvciBpcyBub3QgaW4gbWFpbmxpbmUgYmVjYXVz ZSBjb21taXQgMjhiMWE4MjRhNGY0ICgiYXJtNjQ6IHZkc286Cj4gPiBTdWJzdGl0dXRlIGdldHRp bWVvZmRheSgpIHdpdGggQyBpbXBsZW1lbnRhdGlvbiIpIHJld3JvdGUgdGhpcyBhc3NlbWJsZXIK PiA+IGZpbGUgaW4gQyBhcyBwYXJ0IG9mIGEgMjUgcGF0Y2ggc2VyaWVzIHRoYXQgaXMgdW5zdWl0 YWJsZSBmb3Igc3RhYmxlLgo+ID4gSnVzdCByZW1vdmUgdGhlIGNvbW1hIGluIHRoZSBjbG9ja19n ZXR0aW1lX3JldHVybiBpbnZvY2F0aW9ucyBpbiA0LjE5IHNvCj4gPiB0aGF0IEdOVSBhcyBhbmQg TExWTSdzIGludGVncmF0ZWQgYXNzZW1ibGVyIHdvcmsgdGhlIHNhbWUuCj4gPgo+ID4gPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Cj4gPgo+ID4gSSB3b3JkZWQgdGhlIGZpcnN0IHNlbnRlbmNlIHRoZSB3YXkgdGhh dCBJIGRpZCBiZWNhdXNlIGNvcnJlY3QgbWUgaWYgSQo+ID4gYW0gd3JvbmcgYnV0IGl0IHNlZW1z IHRoYXQgdGhlIGludGVncmF0ZWQgYXNzZW1ibGVyIGhhcyBubyBpc3N1ZXMgd2l0aAo+ID4gdGhl IHVzZSBvZiBjb21tYXMgc2VwYXJhdGluZyB0aGUgYXJndW1lbnRzIGluIGEgLm1hY3JvIGRlZmlu aXRpb24gYXMKPiA+IHRoYXQgaXMgZG9uZSBldmVyeXdoZXJlIGluIGFyY2gvYXJtNjQsIGp1c3Qg bm90IHdoZW4gdGhlcmUgaXMgYSBzaW5nbGUKPiA+IHBhcmFtZXRlciB3aXRoIGEgZGVmYXVsdCB2 YWx1ZSBiZWNhdXNlIGVzc2VudGlhbGx5IHdoYXQgaXQgaXMgZXZhbHVhdGluZwo+ID4gaXQgdG8g aXMgImNsb2NrX2dldHRpbWVfcmV0dXJuICxzaGlmdD0xIiwgd2hpY2ggYWNjb3JkaW5nIHRvIHRo ZSBHQVMKPiA+IG1hbnVhbCBbMV0gbWVhbnMgdGhhdCAic2hpZnQiIGlzIGFjdHVhbGx5IGJlaW5n IHNldCB0byAwIHRoZW4gdGhlcmUgaXMgYW4KPiA+IG90aGVyIHBhcmFtZXRlciwgd2hlbiBpdCBl eHBlY3RzIG9ubHkgb25lLgo+ID4KPiA+IFsxXTogQWZ0ZXIgdGhlIGRlZmluaXRpb24gaXMgY29t cGxldGUsIHlvdSBjYW4gY2FsbCB0aGUgbWFjcm8gZWl0aGVyIGFzCj4gPiDigJhyZXNlcnZlX3N0 ciBhLGLigJkgKHdpdGgg4oCYXHAx4oCZIGV2YWx1YXRpbmcgdG8gYSBhbmQg4oCYXHAy4oCZIGV2 YWx1YXRpbmcgdG8KPiA+IGIpLCBvciBhcyDigJhyZXNlcnZlX3N0ciAsYuKAmSAod2l0aCDigJhc cDHigJkgZXZhbHVhdGluZyBhcyB0aGUgZGVmYXVsdCwgaW4KPiA+IHRoaXMgY2FzZSDigJgw4oCZ LCBhbmQg4oCYXHAy4oCZIGV2YWx1YXRpbmcgdG8gYikuCj4KPiBBaCB5b3UgYXJlIHJpZ2h0ISBJ IHBsYXllZCB3aXRoIElBUyBhIGxpdHRsZSBhbmQgaXQgZGlkIG5vdCBoYXZlCj4gcHJvYmxlbSBw YXJzaW5nIGNvbW1hcyBiZXR3ZWVuIHRoZSBuYW1lIGFuZCBpdHMgYXJndW1lbnRzIGluIGEgbWFj cm8KPiBleHBhbnNpb24uIEhvd2V2ZXIsIElBUyBhcHBlYXJzIHRvIGFzc3VtZSBhbiBhcmd1bWVu dCB3aXRoIGRlZmF1bHQKPiB2YWx1ZSBpcyBwYXNzZWQgd2hlbmV2ZXIgaXQgc2VlcyBhIGNvbW1h IHJpZ2h0IGFmdGVyIHRoZSBtYWNybyBuYW1lLgo+IEl0IHdpbGwgYmUgZmluZSBpZiB0aGUgbnVt YmVyIG9mIGZvbGxvd2luZyBhcmd1bWVudHMgaXMgb25lIGxlc3MgdGhhbgo+IHRoZSBudW1iZXIg b2YgcGFyYW1ldGVycyBzcGVjaWZpZWQgaW4gdGhlIG1hY3JvIGRlZmluaXRpb24uIE90aGVyd2lz ZSwKPiBpdCBmYWlscyB3aXRoIHRoZSByZXBvcnRlciBlcnJvci4gVGhpcyBoYXBwZW5zIHRvIG1h Y3JvcyB3aXRoIG11bHRpcGxlCj4gcGFyYW1ldGVycyBhcyB3ZWxsLiBGb3IgZXhhbXBsZSwgdGhl IGZvbGxvd2luZyBjb2RlIHdvcmtzCj4KPiBgYGAKPiAkIGNhdCBmb28ucwo+IC5tYWNybyAgZm9v IGFyZzE9MiwgYXJnMj00Cj4gICAgICAgICBsZHIgcjAsIFtyMSwgI1xhcmcxXQo+ICAgICAgICAg bGRyIHIwLCBbcjEsICNcYXJnMl0KPiAuZW5kbQo+Cj4gZm9vLCBhcmcyPTgKPgo+ICQgbGx2bS1t YyAtdHJpcGxlPWFybXY3YSAtZmlsZXR5cGU9b2JqIGZvby5zIC1vIGlhcy5vCj4gYXJtLWxpbnV4 LWdudWVhYmloZi1vYmpkdW1wIC1kciBpYXMubwo+Cj4gaWFzLm86ICAgICBmaWxlIGZvcm1hdCBl bGYzMi1saXR0bGVhcm0KPgo+Cj4gRGlzYXNzZW1ibHkgb2Ygc2VjdGlvbiAudGV4dDoKPgo+IDAw MDAwMDAwIDwudGV4dD46Cj4gICAgMDogZTU5MTAwMDEgbGRyIHIwLCBbcjEsICMyXQo+ICAgIDQ6 IGU1OTEwMDAzIGxkciByMCwgW3IxLCAjOF0KPiBgYGAKPgo+IEJ1dCB0aGUgdGhlIGZvbGxvd2lu ZyBjb2RlIGZhaWxzLAo+Cj4gYGBgCj4gJCBjYXQgZm9vLnMKPiAubWFjcm8gIGZvbyBhcmcxPTIs IGFyZzI9NAo+ICAgICAgICAgbGRyIHIwLCBbcjEsICNcYXJnMV0KPiAgICAgICAgIGxkciByMCwg W3IxLCAjXGFyZzJdCj4gLmVuZG0KPgo+IGZvbywgYXJnMT0yLCBhcmcyPTgKPgo+ICQgbGx2bS1t YyAtdHJpcGxlPWFybXY3YSAtZmlsZXR5cGU9b2JqIGZvby5zIC1vIGlhcy5vCj4gZm9vLnM6Njox NDogZXJyb3I6IHRvbyBtYW55IHBvc2l0aW9uYWwgYXJndW1lbnRzCj4gZm9vLCBhcmcxPTIsIGFy ZzI9OAo+IGBgYAo+Cj4gSSB3aWxsIHVwZGF0ZSB0aGUgY29tbWl0IG1lc3NhZ2UgYWNjb3JkaW5n bHkuCj4KPgo+ID4gTGFzdGx5LCBXaWxsIG9yIENhdGFsaW4gc2hvdWxkIGFjayB0aGlzIGFzIGFu IGV4cGxpY2l0bHkgb3V0IG9mIG1haW5saW5lCj4gPiBwYXRjaCBzbyB0aGF0IEdyZWcgb3IgU2Fz aGEgY2FuIHRha2UgaXQuIEkgd291bGQgcHV0IHRoZW0gb24gdGhlICJUbzoiCj4gPiBsaW5lIGlu IGFkZGl0aW9uIHRvIEdyZWcgYW5kIFNhc2hhLgo+ID4KPiA+IEhvcGVmdWxseSB0aGlzIGlzIGhl bHBmdWwhCj4KPiBUaGFua3MgZm9yIHRoZSBpbmZvcm1hdGlvbiEKPgo+ID4KPiA+IENoZWVycywK PiA+IE5hdGhhbgo+ID4KPiA+ID4gLS0tCj4gPiA+Cj4gPiA+IENoYW5nZXMgdjEgLT4gdjI6Cj4g PiA+ICAgS2VlcCB0aGUgY29tbWEgaW4gdGhlIG1hY3JvIGRlZmluaXRpb24gdG8gYmUgY29uc2lz dGVudCB3aXRoIG90aGVyCj4gPiA+ICAgZGVmaW5pdGlvbnMuCj4gPiA+Cj4gPiA+IENoYW5nZXMg djIgLT4gdjM6Cj4gPiA+ICAgRWRpdCB0YWdzLgo+ID4gPgo+ID4gPiAgYXJjaC9hcm02NC9rZXJu ZWwvdmRzby9nZXR0aW1lb2ZkYXkuUyB8IDYgKysrLS0tCj4gPiA+ICAxIGZpbGUgY2hhbmdlZCwg MyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQo+ID4gPgo+ID4gPiBkaWZmIC0tZ2l0IGEv YXJjaC9hcm02NC9rZXJuZWwvdmRzby9nZXR0aW1lb2ZkYXkuUyBiL2FyY2gvYXJtNjQva2VybmVs L3Zkc28vZ2V0dGltZW9mZGF5LlMKPiA+ID4gaW5kZXggODU2ZmVlNmQzNTEyLi5iNmZhZjhiNWQx ZmUgMTAwNjQ0Cj4gPiA+IC0tLSBhL2FyY2gvYXJtNjQva2VybmVsL3Zkc28vZ2V0dGltZW9mZGF5 LlMKPiA+ID4gKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvdmRzby9nZXR0aW1lb2ZkYXkuUwo+ID4g PiBAQCAtMjI3LDcgKzIyNyw3IEBAIHJlYWx0aW1lOgo+ID4gPiAgICAgICBzZXFjbnRfY2hlY2sg ZmFpbD1yZWFsdGltZQo+ID4gPiAgICAgICBnZXRfdHNfcmVhbHRpbWUgcmVzX3NlYz14MTAsIHJl c19uc2VjPXgxMSwgXAo+ID4gPiAgICAgICAgICAgICAgIGNsb2NrX25zZWM9eDE1LCB4dGltZV9z ZWM9eDEzLCB4dGltZV9uc2VjPXgxNCwgbnNlY190b19zZWM9eDkKPiA+ID4gLSAgICAgY2xvY2tf Z2V0dGltZV9yZXR1cm4sIHNoaWZ0PTEKPiA+ID4gKyAgICAgY2xvY2tfZ2V0dGltZV9yZXR1cm4g c2hpZnQ9MQo+ID4gPgo+ID4gPiAgICAgICBBTElHTgo+ID4gPiAgbW9ub3RvbmljOgo+ID4gPiBA QCAtMjUwLDcgKzI1MCw3IEBAIG1vbm90b25pYzoKPiA+ID4gICAgICAgICAgICAgICBjbG9ja19u c2VjPXgxNSwgeHRpbWVfc2VjPXgxMywgeHRpbWVfbnNlYz14MTQsIG5zZWNfdG9fc2VjPXg5Cj4g PiA+Cj4gPiA+ICAgICAgIGFkZF90cyBzZWM9eDEwLCBuc2VjPXgxMSwgdHNfc2VjPXgzLCB0c19u c2VjPXg0LCBuc2VjX3RvX3NlYz14OQo+ID4gPiAtICAgICBjbG9ja19nZXR0aW1lX3JldHVybiwg c2hpZnQ9MQo+ID4gPiArICAgICBjbG9ja19nZXR0aW1lX3JldHVybiBzaGlmdD0xCj4gPiA+Cj4g PiA+ICAgICAgIEFMSUdOCj4gPiA+ICBtb25vdG9uaWNfcmF3Ogo+ID4gPiBAQCAtMjcxLDcgKzI3 MSw3IEBAIG1vbm90b25pY19yYXc6Cj4gPiA+ICAgICAgICAgICAgICAgY2xvY2tfbnNlYz14MTUs IG5zZWNfdG9fc2VjPXg5Cj4gPiA+Cj4gPiA+ICAgICAgIGFkZF90cyBzZWM9eDEwLCBuc2VjPXgx MSwgdHNfc2VjPXgxMywgdHNfbnNlYz14MTQsIG5zZWNfdG9fc2VjPXg5Cj4gPiA+IC0gICAgIGNs b2NrX2dldHRpbWVfcmV0dXJuLCBzaGlmdD0xCj4gPiA+ICsgICAgIGNsb2NrX2dldHRpbWVfcmV0 dXJuIHNoaWZ0PTEKPiA+ID4KPiA+ID4gICAgICAgQUxJR04KPiA+ID4gIHJlYWx0aW1lX2NvYXJz ZToKPiA+ID4gLS0KPiA+ID4gMi4zMS4xLjM2OC5nYmUxMWMxMzBhZi1nb29nCj4gPiA+CgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2Vy bmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0 cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVs Cg==