delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2023/12/31/01:58:14

X-Recipient: archive-cygwin AT delorie DOT com
DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E87783858C36
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cygwin.com;
s=default; t=1704005891;
bh=0gwfovsbl4NRip4G2napvRMcJG6GbCKdxuMX5Sv8BEE=;
h=Date:To:Subject:In-Reply-To:References:List-Id:List-Unsubscribe:
List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:
From;
b=vyhgcgr1ezK7KuCmwV9p5x1/eigCFZ1DHhMAQFqHyvWxaZqw72uMzy2lW8CbdDhcx
az+bMkS/5fwVogswS+UVZ6ELpL4FqjIezGhyCjuOwZzEnhFSHcZ2t+YmFg6MMxvh8p
lmB7zCUOsQE8MUhyX/k2WWmS4B//L7mfTzfAtaXQ=
X-Original-To: cygwin AT cygwin DOT com
Delivered-To: cygwin AT cygwin DOT com
DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 6D8FB3858D1E
ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 6D8FB3858D1E
ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1704005838; cv=none;
b=FfCoZT6SoJ0BmEx7avS+TU8chz2YYAcjgcTDeI8LOLJ5WILpBjj6RhTbksbaX2So24/Wod+jfJHK6Hxh9HWW8ZN2ABwy2X51ViZlSKzXd5/LrKrQFF4fIqaSVoXJK0V8WY5m6GuneFR7Yocfp9p+PpQcxW7fWH4gQ720spv+nm0=
ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key;
t=1704005838; c=relaxed/simple;
bh=tFfpuF7lqigKNXtV8QbqaqBkgGhO+QkALjjK1WjLLOY=;
h=Date:From:To:Subject:Message-Id:Mime-Version;
b=vyGTVz0/8wRI8qKI9Ho4GfrPgZPfvF3QtdRkLZZ+bWTfEemwyOV34oHanJamjk0dqtQEkaYBBfWufORj5UKrpzyXnz+xOW01L2dgzssUFCP86ASkqkm/TEt+5H/5XVRvziJJHmnEP1EJY5twbHtTVIfJEtu3xgiDz0D0w6VB7LM=
ARC-Authentication-Results: i=1; server2.sourceware.org
Date: Sun, 31 Dec 2023 15:57:12 +0900
To: cygwin AT cygwin DOT com
Subject: Re: std::runtime_error on std::locale("")
Message-Id: <20231231155712.918066b5bbad233fca2c08a2@nifty.ne.jp>
In-Reply-To: <20230927195039.e62f7482898ab5615cc1605b@nifty.ne.jp>
References: <20230922011204 DOT bb166498090e6cbe163349f3 AT nifty DOT ne DOT jp>
<87o7huzos2 DOT fsf AT Otto DOT invalid>
<20230923172359 DOT d854a5a98afbc44beaf50c78 AT nifty DOT ne DOT jp>
<20230927195039 DOT e62f7482898ab5615cc1605b AT nifty DOT ne DOT jp>
X-Mailer: Sylpheed 3.7.0 (GTK+ 2.24.30; i686-pc-mingw32)
Mime-Version: 1.0
X-Spam-Status: No, score=-4.7 required=5.0 tests=BAYES_00, KAM_DMARC_STATUS,
NICE_REPLY_A, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS, SPF_PASS, TXREP,
T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on
server2.sourceware.org
X-BeenThere: cygwin AT cygwin DOT com
X-Mailman-Version: 2.1.30
List-Id: General Cygwin discussions and problem reports <cygwin.cygwin.com>
List-Unsubscribe: <https://cygwin.com/mailman/options/cygwin>,
<mailto:cygwin-request AT cygwin DOT com?subject=unsubscribe>
List-Archive: <https://cygwin.com/pipermail/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-request AT cygwin DOT com?subject=help>
List-Subscribe: <https://cygwin.com/mailman/listinfo/cygwin>,
<mailto:cygwin-request AT cygwin DOT com?subject=subscribe>
From: Takashi Yano via Cygwin <cygwin AT cygwin DOT com>
Reply-To: Takashi Yano <takashi DOT yano AT nifty DOT ne DOT jp>
Errors-To: cygwin-bounces+archive-cygwin=delorie DOT com AT cygwin DOT com
Sender: "Cygwin" <cygwin-bounces+archive-cygwin=delorie DOT com AT cygwin DOT com>

This is a multi-part message in MIME format.

--Multipart=_Sun__31_Dec_2023_15_57_12_+0900_78LTqiKq6qcPKu_f
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit

On Wed, 27 Sep 2023 19:50:39 +0900
Takashi Yano via Cygwin <cygwin AT cygwin DOT com> wrote:
> Hi Achim,
> 
> On Sat, 23 Sep 2023 17:23:59 +0900
> Takashi Yano via Cygwin <cygwin AT cygwin DOT com> wrote:
> > On Fri, 22 Sep 2023 08:48:45 +0200
> > ASSI  wrote:
> > > Takashi Yano via Cygwin writes:
> > > > I wonder why the following code throws std::runtime_error
> > > > even though the LC_ALL is set to valid locale other than "C".
> > > > This does not occur only when LC_ALL is set to "C".
> > > 
> > > This functionality is currently only supported for Glibc targets in
> > > libstdc++.  I seem to remember that I've looked into this some time ago,
> > > but there didn't seem to be an easy way of enabling it for Cygwin at
> > > that time.
> > 
> > Thanks for the answer.
> > 
> > It might not be an easy way, but I tried to enabling the locale
> > feature for libstdc++.
> > 
> > Please try:
> > 
> > 1) Run cygport gcc prep
> > 2) Remove libstdc++-v3/config/locale/generic
> > 3) Copy libstdc++-v3/config/locale/gnu to libstdc++-v3/config/locale/generic
> > 4) Apply patches attached to the working source directory.
> > 5) Run cygport gcc compile
> > 
> > I also tried to automate above steps in gcc.cygport.
> > 
> > Further, I tested and confirmed that a few test cases works as expected.
> > 
> > What do you think of this idea?
> 
> I have a new revised draft patch. The patch attached is against
> the HEAD of upstream gcc repository. However, it can be applied
> to 11.4.0 as well if s/c++11/c++98/g.
> 
> This is not a last-minute job like last time, but a full rework.
> 
> Any advice or comment would be appreciated.

Some bugs have been fixed. Please review v3 patch attached.

-- 
Takashi Yano <takashi DOT yano AT nifty DOT ne DOT jp>

--Multipart=_Sun__31_Dec_2023_15_57_12_+0900_78LTqiKq6qcPKu_f
Content-Type: application/octet-stream;
 name="v3-0001-libstdc-Implement-most-of-locale-features-for-new.patch"
Content-Disposition: attachment;
 filename="v3-0001-libstdc-Implement-most-of-locale-features-for-new.patch"
Content-Transfer-Encoding: base64

RnJvbSA2ZjRkOTM3YTc3ZDQ4YTQ3ZTc4Mjc3YjcxZWQwOWIzMTQ3N2Y2MGM2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBUYWthc2hpIFlhbm8gPHRha2FzaGkueWFub0BuaWZ0eS5uZS5q
cD4KRGF0ZTogRnJpLCAyNCBOb3YgMjAyMyAwMDozNDo0OCArMDkwMApTdWJqZWN0OiBbUEFUQ0gg
djNdIGxpYnN0ZGMrKzogSW1wbGVtZW50IG1vc3Qgb2YgbG9jYWxlIGZlYXR1cmVzIGZvciBuZXds
aWIuCgpQcmV2aW91c2x5LCBsb2NhbGUgaW1wbGVtZW50YXRpb24gZm9yIG5ld2xpYiBzdXBwb3J0
cyBvbmx5ICJDIiBsb2NhbGUuCldpdGggdGhpcyBwYXRjaCwgdGhlIGxvY2FsZSBpbXBsZW1lbnRh
dGlvbiBmb3IgbmV3bGliIGhhcyBiZWVuIG11Y2gKaW1wcm92ZWQgdXNpbmcgbmV3bGliIGZ1bmN0
aW9uYWxpdHkgY3VycmVudGx5IHN1cHBvcnRlZCBzbyB0aGF0IG1vc3QKb2YgbG9jYWxlIGZlYXR1
cmVzIGNhbiBiZSB1c2VkLiBUaGUgbW9zdCBvZiB0aGUgY29kZXMgYXJlIGJhc2VkIG9uCnRoZSBp
bXBsZW1lbnRhdGlvbiBmb3IgdGhlIEdOVSBsaWJjLgotLS0KIGdjYy9jb25maWcvaTM4Ni9jeWd3
aW4uaCAgICAgICAgICAgICAgICAgICAgICB8ICAgMiArCiBsaWJnY2MvY29uZmlnL2kzODYvdC1j
eWd3aW4gICAgICAgICAgICAgICAgICAgfCAgIDIgKy0KIGxpYnN0ZGMrKy12My9NYWtlZmlsZS5p
biAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBsaWJzdGRjKystdjMvYWNpbmNsdWRlLm00
ICAgICAgICAgICAgICAgICAgICAgfCAgMzkgKy0KIC4uLi9jb25maWcvbG9jYWxlL2RyYWdvbmZs
eS9jX2xvY2FsZS5jYyAgICAgICB8ICAgMSArCiAuLi4vY29uZmlnL2xvY2FsZS9nZW5lcmljL2Nf
bG9jYWxlLmNjICAgICAgICAgfCAgIDEgKwogbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ251
L2NfbG9jYWxlLmNjICAgIHwgICAxICsKIC4uLi9sb2NhbGUvaWVlZV8xMDAzLjEtMjAwMS9jX2xv
Y2FsZS5jYyAgICAgICB8ICAgMiArCiAuLi4vY29uZmlnL2xvY2FsZS9uZXdsaWIvYysrbG9jYWxl
X2ludGVybmFsLmggfCAgOTUgKysKIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL25ld2xpYi9j
X2xvY2FsZS5jYyB8IDQwMiArKysrKysrKwogbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvbmV3
bGliL2NfbG9jYWxlLmggIHwgMTAwICsrCiAuLi4vY29uZmlnL2xvY2FsZS9uZXdsaWIvY29kZWN2
dF9tZW1iZXJzLmNjICAgfCAyODggKysrKysrCiAuLi4vY29uZmlnL2xvY2FsZS9uZXdsaWIvY29s
bGF0ZV9tZW1iZXJzLmNjICAgfCAgNzQgKysKIC4uLi9jb25maWcvbG9jYWxlL25ld2xpYi9jdHlw
ZV9tZW1iZXJzLmNjICAgICB8ICA2MCArLQogLi4uL2NvbmZpZy9sb2NhbGUvbmV3bGliL21lc3Nh
Z2VzX21lbWJlcnMuY2MgIHwgMTc4ICsrKysKIC4uLi9jb25maWcvbG9jYWxlL25ld2xpYi9tZXNz
YWdlc19tZW1iZXJzLmggICB8IDE0OCArKysKIC4uLi9jb25maWcvbG9jYWxlL25ld2xpYi9tb25l
dGFyeV9tZW1iZXJzLmNjICB8IDk0MiArKysrKysrKysrKysrKysrKysKIC4uLi9jb25maWcvbG9j
YWxlL25ld2xpYi9udW1lcmljX21lbWJlcnMuY2MgICB8IDI3MyArKysrKwogLi4uL2NvbmZpZy9s
b2NhbGUvbmV3bGliL3RpbWVfbWVtYmVycy5jYyAgICAgIHwgMzgxICsrKysrKysKIC4uLi9jb25m
aWcvbG9jYWxlL25ld2xpYi90aW1lX21lbWJlcnMuaCAgICAgICB8ICA5MCArKwogLi4uL2NvbmZp
Zy9vcy9uZXdsaWIvY3R5cGVfY29uZmlndXJlX2NoYXIuY2MgIHwgIDMyICstCiBsaWJzdGRjKyst
djMvY29uZmlndXJlICAgICAgICAgICAgICAgICAgICAgICAgfCAgNjYgKy0KIC4uLi9pbmNsdWRl
L2JpdHMvbG9jYWxlX2ZhY2V0c19ub25pby50Y2MgICAgICB8ICAgMSArCiBsaWJzdGRjKystdjMv
c3JjL01ha2VmaWxlLmluICAgICAgICAgICAgICAgICAgfCAgIDMgKy0KIGxpYnN0ZGMrKy12My9z
cmMvYysrOTgvbG9jYWxlX2luaXQuY2MgICAgICAgICB8ICAgMyArLQogMjUgZmlsZXMgY2hhbmdl
ZCwgMzExMSBpbnNlcnRpb25zKCspLCA3NCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9uZXdsaWIvYysrbG9jYWxlX2ludGVybmFsLmgK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9uZXdsaWIvY19s
b2NhbGUuY2MKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9u
ZXdsaWIvY19sb2NhbGUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcv
bG9jYWxlL25ld2xpYi9jb2RlY3Z0X21lbWJlcnMuY2MKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJz
dGRjKystdjMvY29uZmlnL2xvY2FsZS9uZXdsaWIvY29sbGF0ZV9tZW1iZXJzLmNjCiBjcmVhdGUg
bW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvbmV3bGliL21lc3NhZ2VzX21l
bWJlcnMuY2MKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9u
ZXdsaWIvbWVzc2FnZXNfbWVtYmVycy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYz
L2NvbmZpZy9sb2NhbGUvbmV3bGliL21vbmV0YXJ5X21lbWJlcnMuY2MKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9uZXdsaWIvbnVtZXJpY19tZW1iZXJzLmNj
CiBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvbmV3bGliL3Rp
bWVfbWVtYmVycy5jYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9j
YWxlL25ld2xpYi90aW1lX21lbWJlcnMuaAoKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvaTM4Ni9j
eWd3aW4uaCBiL2djYy9jb25maWcvaTM4Ni9jeWd3aW4uaAppbmRleCBiMmM0NWFiNWY2Ny4uZDg5
NmQ1Mjc3NDcgMTAwNjQ0Ci0tLSBhL2djYy9jb25maWcvaTM4Ni9jeWd3aW4uaAorKysgYi9nY2Mv
Y29uZmlnL2kzODYvY3lnd2luLmgKQEAgLTg1LDYgKzg1LDggQEAgYWxvbmcgd2l0aCBHQ0M7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKICNkZWZpbmUgTElCX1NQRUMgIlwKICAg
JXtwZzotbGdtb259IFwKICAgJXtwdGhyZWFkOiB9IFwKKyAgLWxpbnRsIFwKKyAgLWxpY29udiBc
CiAgIC1sY3lnd2luIFwKICAgJXttd2luZG93czotbGdkaTMyIC1sY29tZGxnMzJ9IFwKICAgJXtm
dnRhYmxlLXZlcmlmeT1wcmVpbml0Oi1sdnR2IC1scHNhcGk7IFwKZGlmZiAtLWdpdCBhL2xpYmdj
Yy9jb25maWcvaTM4Ni90LWN5Z3dpbiBiL2xpYmdjYy9jb25maWcvaTM4Ni90LWN5Z3dpbgppbmRl
eCBmODVlYzI0MjIwZS4uNDRkNWUxYjI0MjUgMTAwNjQ0Ci0tLSBhL2xpYmdjYy9jb25maWcvaTM4
Ni90LWN5Z3dpbgorKysgYi9saWJnY2MvY29uZmlnL2kzODYvdC1jeWd3aW4KQEAgLTUsNyArNSw3
IEBAIExJQkdDQzJfSU5DTFVERVMgKz0gLUkkKHNyY2RpcikvLi4vd2luc3VwL2luY2x1ZGUgXAog
CS1JJChzcmNkaXIpLy4uL3dpbnN1cC9jeWd3aW4vaW5jbHVkZQogCiAjIEN5Z3dpbi1zcGVjaWZp
YyBwYXJ0cyBvZiBMSUJfU1BFQwotU0hMSUJfTEMgPSAtbGN5Z3dpbiAtbGFkdmFwaTMyIC1sc2hl
bGwzMiAtbHVzZXIzMiAtbGtlcm5lbDMyCitTSExJQl9MQyA9IC1saW50bCAtbGljb252IC1sY3ln
d2luIC1sYWR2YXBpMzIgLWxzaGVsbDMyIC1sdXNlcjMyIC1sa2VybmVsMzIKIAogIyBXZSBoYXZl
IGFscmVhZHkgaW5jbHVkZWQgb25lIG9mIHRoZSB0LXtkdzIsc2psan0tZWggZnJhZ21lbnRzIGZv
ciBFSF9NT0RFTAogU0hMSUJfRUhfRVhURU5TSU9OID0gJChzdWJzdCAtZHcyLCwtJChFSF9NT0RF
TCkpCmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvTWFrZWZpbGUuaW4gYi9saWJzdGRjKystdjMv
TWFrZWZpbGUuaW4KaW5kZXggNTAwYzBkNzUyODIuLmMwNWQyMGUyNTY4IDEwMDY0NAotLS0gYS9s
aWJzdGRjKystdjMvTWFrZWZpbGUuaW4KKysrIGIvbGlic3RkYysrLXYzL01ha2VmaWxlLmluCkBA
IC0yNDQsNiArMjQ0LDcgQEAgRVJST1JfQ09OU1RBTlRTX1NSQ0RJUiA9IEBFUlJPUl9DT05TVEFO
VFNfU1JDRElSQAogRVhFRVhUID0gQEVYRUVYVEAKIEVYVFJBX0NGTEFHUyA9IEBFWFRSQV9DRkxB
R1NACiBFWFRSQV9DWFhfRkxBR1MgPSBARVhUUkFfQ1hYX0ZMQUdTQAorRVhUUkFfTElCUyA9IEBF
WFRSQV9MSUJTQAogRkdSRVAgPSBARkdSRVBACiBGT1JNQVRfRklMRSA9IEBGT1JNQVRfRklMRUAK
IEZSRUVTVEFORElOR19GTEFHUyA9IEBGUkVFU1RBTkRJTkdfRkxBR1NACmRpZmYgLS1naXQgYS9s
aWJzdGRjKystdjMvYWNpbmNsdWRlLm00IGIvbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNAppbmRl
eCA3Yzg0MzIwNGQ3MC4uM2NmOTI3NDY3NGUgMTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy12My9hY2lu
Y2x1ZGUubTQKKysrIGIvbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNApAQCAtMjQzNCw3ICsyNDM0
LDcgQEAgQUNfREVGVU4oW0dMSUJDWFhfRU5BQkxFX0NMT0NBTEVdLCBbCiAgICAgICBkcmFnb25m
bHkqIHwgZnJlZWJzZCopCiAJZW5hYmxlX2Nsb2NhbGVfZmxhZz1kcmFnb25mbHkKIAk7OwotICAg
ICAgb3BlbmJzZCopCisgICAgICBvcGVuYnNkKiB8IGN5Z3dpbiopCiAJZW5hYmxlX2Nsb2NhbGVf
ZmxhZz1uZXdsaWIKIAk7OwogICAgICAgKikKQEAgLTI0NDYsNiArMjQ0NiwxMCBAQCBBQ19ERUZV
TihbR0xJQkNYWF9FTkFCTEVfQ0xPQ0FMRV0sIFsKIAk7OwogICAgIGVzYWMKICAgZmkKKyAgY2Fz
ZSAke3RhcmdldF9vc30gaW4gY3lnd2luKikKKyAgICBFWFRSQV9MSUJTPSItbGludGwiCisgICAg
OzsKKyAgZXNhYwogCiAgICMgU2FuaXR5IGNoZWNrIG1vZGVsLCBhbmQgdGVzdCBmb3Igc3BlY2lh
bCBmdW5jdGlvbmFsaXR5LgogICBpZiB0ZXN0ICRlbmFibGVfY2xvY2FsZV9mbGFnID0gZ251OyB0
aGVuCkBAIC0yNjEwLDE5ICsyNjE0LDMwIEBAIEFDX0RFRlVOKFtHTElCQ1hYX0VOQUJMRV9DTE9D
QUxFXSwgWwogICAgICAgOzsKICAgICBuZXdsaWIpCiAgICAgICBBQ19NU0dfUkVTVUxUKG5ld2xp
YikKKyAgICAgIEFDX0NIRUNLX0hFQURFUlMobGliaW50bC5oLCBhY19oYXNfbGliaW50bF9oPXll
cywgYWNfaGFzX2xpYmludGxfaD1ubykKKyAgICAgIEFDX0NIRUNLX0hFQURFUlMoaWNvbnYuaCwg
YWNfaGFzX2ljb252X2g9eWVzLCBhY19oYXNfaWNvbnZfaD1ubykKIAotICAgICAgQ0xPQ0FMRV9I
PWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5oCi0gICAgICBDTE9DQUxFX0NDPWNvbmZp
Zy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5jYwotICAgICAgQ0NPREVDVlRfQ0M9Y29uZmlnL2xv
Y2FsZS9nZW5lcmljL2NvZGVjdnRfbWVtYmVycy5jYwotICAgICAgQ0NPTExBVEVfQ0M9Y29uZmln
L2xvY2FsZS9nZW5lcmljL2NvbGxhdGVfbWVtYmVycy5jYworICAgICAgQ0xPQ0FMRV9IPWNvbmZp
Zy9sb2NhbGUvbmV3bGliL2NfbG9jYWxlLmgKKyAgICAgIENMT0NBTEVfQ0M9Y29uZmlnL2xvY2Fs
ZS9uZXdsaWIvY19sb2NhbGUuY2MKKyAgICAgIENDT0RFQ1ZUX0NDPWNvbmZpZy9sb2NhbGUvbmV3
bGliL2NvZGVjdnRfbWVtYmVycy5jYworICAgICAgQ0NPTExBVEVfQ0M9Y29uZmlnL2xvY2FsZS9u
ZXdsaWIvY29sbGF0ZV9tZW1iZXJzLmNjCiAgICAgICBDQ1RZUEVfQ0M9Y29uZmlnL2xvY2FsZS9u
ZXdsaWIvY3R5cGVfbWVtYmVycy5jYwotICAgICAgQ01FU1NBR0VTX0g9Y29uZmlnL2xvY2FsZS9n
ZW5lcmljL21lc3NhZ2VzX21lbWJlcnMuaAotICAgICAgQ01FU1NBR0VTX0NDPWNvbmZpZy9sb2Nh
bGUvZ2VuZXJpYy9tZXNzYWdlc19tZW1iZXJzLmNjCi0gICAgICBDTU9ORVlfQ0M9Y29uZmlnL2xv
Y2FsZS9nZW5lcmljL21vbmV0YXJ5X21lbWJlcnMuY2MKLSAgICAgIENOVU1FUklDX0NDPWNvbmZp
Zy9sb2NhbGUvZ2VuZXJpYy9udW1lcmljX21lbWJlcnMuY2MKLSAgICAgIENUSU1FX0g9Y29uZmln
L2xvY2FsZS9nZW5lcmljL3RpbWVfbWVtYmVycy5oCi0gICAgICBDVElNRV9DQz1jb25maWcvbG9j
YWxlL2dlbmVyaWMvdGltZV9tZW1iZXJzLmNjCi0gICAgICBDTE9DQUxFX0lOVEVSTkFMX0g9Y29u
ZmlnL2xvY2FsZS9nZW5lcmljL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisgICAgICBpZiB0ZXN0ICRh
Y19oYXNfbGliaW50bF9oID0geWVzOyB0aGVuCisJQ01FU1NBR0VTX0g9Y29uZmlnL2xvY2FsZS9u
ZXdsaWIvbWVzc2FnZXNfbWVtYmVycy5oCisJQ01FU1NBR0VTX0NDPWNvbmZpZy9sb2NhbGUvbmV3
bGliL21lc3NhZ2VzX21lbWJlcnMuY2MKKyAgICAgIGVsc2UKKwlDTUVTU0FHRVNfSD1jb25maWcv
bG9jYWxlL2dlbmVyaWMvbWVzc2FnZXNfbWVtYmVycy5oCisJQ01FU1NBR0VTX0NDPWNvbmZpZy9s
b2NhbGUvZ2VuZXJpYy9tZXNzYWdlc19tZW1iZXJzLmNjCisgICAgICBmaQorICAgICAgQ01PTkVZ
X0NDPWNvbmZpZy9sb2NhbGUvbmV3bGliL21vbmV0YXJ5X21lbWJlcnMuY2MKKyAgICAgIGlmIHRl
c3QgJGFjX2hhc19pY29udl9oID0geWVzOyB0aGVuCisJQ05VTUVSSUNfQ0M9Y29uZmlnL2xvY2Fs
ZS9uZXdsaWIvbnVtZXJpY19tZW1iZXJzLmNjCisgICAgICBlbHNlCisJQ05VTUVSSUNfQ0M9Y29u
ZmlnL2xvY2FsZS9nZW5lcmljL251bWVyaWNfbWVtYmVycy5jYworICAgICAgZmkKKyAgICAgIENU
SU1FX0g9Y29uZmlnL2xvY2FsZS9uZXdsaWIvdGltZV9tZW1iZXJzLmgKKyAgICAgIENUSU1FX0ND
PWNvbmZpZy9sb2NhbGUvbmV3bGliL3RpbWVfbWVtYmVycy5jYworICAgICAgQ0xPQ0FMRV9JTlRF
Uk5BTF9IPWNvbmZpZy9sb2NhbGUvbmV3bGliL2MrK2xvY2FsZV9pbnRlcm5hbC5oCiAgICAgICA7
OwogICBlc2FjCiAKZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2RyYWdv
bmZseS9jX2xvY2FsZS5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2RyYWdvbmZseS9j
X2xvY2FsZS5jYwppbmRleCBmMDI2ZTE3ZDVhMC4uMGUxMDE4OGYyMjAgMTAwNjQ0Ci0tLSBhL2xp
YnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2RyYWdvbmZseS9jX2xvY2FsZS5jYworKysgYi9saWJz
dGRjKystdjMvY29uZmlnL2xvY2FsZS9kcmFnb25mbHkvY19sb2NhbGUuY2MKQEAgLTE4OCw2ICsx
ODgsNyBAQCBuYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKIF9HTElC
Q1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAKICAgY29uc3QgY2hhciogY29uc3QqIGNvbnN0
IGxvY2FsZTo6X1NfY2F0ZWdvcmllcyA9IF9fZ251X2N4eDo6Y2F0ZWdvcnlfbmFtZXM7CisgIGNv
bnN0IF9fdHlwZW9mKHNldGxvY2FsZSkgKl9fc2V0bG9jYWxlID0gc2V0bG9jYWxlOwogCiBfR0xJ
QkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KIH0gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9s
aWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmNjIGIvbGlic3RkYysr
LXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5jYwppbmRleCA4ODQ5ZDc4ZmRmYS4u
MjdhMjQ2OTIxZTYgMTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVy
aWMvY19sb2NhbGUuY2MKKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9j
X2xvY2FsZS5jYwpAQCAtMjg0LDYgKzI4NCw3IEBAIG5hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklT
SUJJTElUWShkZWZhdWx0KQogX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KIAogICBj
b25zdCBjaGFyKiBjb25zdCogY29uc3QgbG9jYWxlOjpfU19jYXRlZ29yaWVzID0gX19nbnVfY3h4
OjpjYXRlZ29yeV9uYW1lczsKKyAgY29uc3QgX190eXBlb2Yoc2V0bG9jYWxlKSAqX19zZXRsb2Nh
bGUgPSBzZXRsb2NhbGU7CiAKIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgogfSAvLyBu
YW1lc3BhY2UKZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dudS9jX2xv
Y2FsZS5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dudS9jX2xvY2FsZS5jYwppbmRl
eCA1ZGRiZGUxZTZjYy4uNTUyNzFiNjE2MWIgMTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy12My9jb25m
aWcvbG9jYWxlL2dudS9jX2xvY2FsZS5jYworKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2Fs
ZS9nbnUvY19sb2NhbGUuY2MKQEAgLTI4Myw2ICsyODMsNyBAQCBuYW1lc3BhY2Ugc3RkIF9HTElC
Q1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9O
CiAKICAgY29uc3QgY2hhciogY29uc3QqIGNvbnN0IGxvY2FsZTo6X1NfY2F0ZWdvcmllcyA9IF9f
Z251X2N4eDo6Y2F0ZWdvcnlfbmFtZXM7CisgIGNvbnN0IF9fdHlwZW9mKHNldGxvY2FsZSkgKl9f
c2V0bG9jYWxlID0gc2V0bG9jYWxlOwogCiBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04K
IH0gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9p
ZWVlXzEwMDMuMS0yMDAxL2NfbG9jYWxlLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUv
aWVlZV8xMDAzLjEtMjAwMS9jX2xvY2FsZS5jYwppbmRleCBjOTExODNlMmY4Yy4uMjg3MjM0YThj
NjcgMTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2llZWVfMTAwMy4xLTIw
MDEvY19sb2NhbGUuY2MKKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvaWVlZV8xMDAz
LjEtMjAwMS9jX2xvY2FsZS5jYwpAQCAtMTAzLDUgKzEwMyw3IEBAIG5hbWVzcGFjZSBzdGQgX0dM
SUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQogICAgICAgX01fbmVnX2Zvcm1hdCA9IG1vbmV5X2Jh
c2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKICAgICB9CiAjZW5kaWYKKworICBjb25zdCBfX3R5cGVv
ZihzZXRsb2NhbGUpICpfX3NldGxvY2FsZSA9IHNldGxvY2FsZTsKIH0gIC8vIG5hbWVzcGFjZSBz
dGQKIApkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvbmV3bGliL2MrK2xv
Y2FsZV9pbnRlcm5hbC5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvbmV3bGliL2MrK2xv
Y2FsZV9pbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4z
NTFkNDU2NmIzYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxl
L25ld2xpYi9jKytsb2NhbGVfaW50ZXJuYWwuaApAQCAtMCwwICsxLDk1IEBACisvLyBMb2NhbGUg
aW50ZXJuYWwgaW1wbGVtZW50YXRpb24gaGVhZGVyIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdo
dCAoQykgMjAwMi0yMDIzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k
aWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24u
CisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVy
c2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3Jp
YmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4x
LCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9u
IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQg
Q09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3
dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBiaXRzL2MrK2xvY2FsZV9pbnRlcm5h
bC5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3Ro
ZXIgbGlicmFyeSBoZWFkZXJzLgorICogIERvIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3Rs
eS4gQGhlYWRlcm5hbWV7bG9jYWxlfQorICovCisKKy8vIFdyaXR0ZW4gYnkgSmFrdWIgSmVsaW5l
ayA8amFrdWJAcmVkaGF0LmNvbT4KKy8vIE1vZGlmaWVkIGJ5IFRha2FzaGkgWWFubyA8dGFrYXNo
aS55YW5vQG5pZnR5Lm5lLmpwPgorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKyNpbmNs
dWRlIDxjbG9jYWxlPgorI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5jbHVkZSA8Y3N0cmluZz4KKyNp
bmNsdWRlIDxjc3RkZGVmPgorI2luY2x1ZGUgPGxhbmdpbmZvLmg+CisKKyNpbmNsdWRlIDx2ZWN0
b3I+CisjaW5jbHVkZSA8c3RyaW5nLmg+CS8vIDo6c3RyZHVwCisKKyNpbmNsdWRlIDxleHQvY29u
Y3VycmVuY2UuaD4KKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQp
Cit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIHN0cnVjdCBDYXRhbG9n
X2luZm8KKyAgeworICAgIENhdGFsb2dfaW5mbyhtZXNzYWdlc19iYXNlOjpjYXRhbG9nIF9faWQs
IGNvbnN0IGNoYXIqIF9fZG9tYWluLAorCQkgbG9jYWxlIF9fbG9jKQorICAgICAgOiBfTV9pZChf
X2lkKSwgX01fZG9tYWluKHN0cmR1cChfX2RvbWFpbikpLCBfTV9sb2NhbGUoX19sb2MpCisgICAg
eyB9CisKKyAgICB+Q2F0YWxvZ19pbmZvKCkKKyAgICB7IGZyZWUoX01fZG9tYWluKTsgfQorCisg
ICAgbWVzc2FnZXNfYmFzZTo6Y2F0YWxvZyBfTV9pZDsKKyAgICBjaGFyKiBfTV9kb21haW47Cisg
ICAgbG9jYWxlIF9NX2xvY2FsZTsKKworICBwcml2YXRlOgorICAgIENhdGFsb2dfaW5mbyhjb25z
dCBDYXRhbG9nX2luZm8mKTsKKworICAgIENhdGFsb2dfaW5mbyYKKyAgICBvcGVyYXRvcj0oY29u
c3QgQ2F0YWxvZ19pbmZvJik7CisgIH07CisKKyAgY2xhc3MgQ2F0YWxvZ3MKKyAgeworICBwdWJs
aWM6CisgICAgQ2F0YWxvZ3MoKSA6IF9NX2NhdGFsb2dfY291bnRlcigwKSB7IH0KKyAgICB+Q2F0
YWxvZ3MoKTsKKworICAgIG1lc3NhZ2VzX2Jhc2U6OmNhdGFsb2cKKyAgICBfTV9hZGQoY29uc3Qg
Y2hhciogX19kb21haW4sIGxvY2FsZSBfX2wpOworCisgICAgdm9pZAorICAgIF9NX2VyYXNlKG1l
c3NhZ2VzX2Jhc2U6OmNhdGFsb2cgX19jKTsKKworICAgIGNvbnN0IENhdGFsb2dfaW5mbyoKKyAg
ICBfTV9nZXQobWVzc2FnZXNfYmFzZTo6Y2F0YWxvZyBfX2MpIGNvbnN0OworCisgIHByaXZhdGU6
CisgICAgbXV0YWJsZSBfX2dudV9jeHg6Ol9fbXV0ZXggX01fbXV0ZXg7CisgICAgbWVzc2FnZXNf
YmFzZTo6Y2F0YWxvZyBfTV9jYXRhbG9nX2NvdW50ZXI7CisgICAgdmVjdG9yPENhdGFsb2dfaW5m
byo+IF9NX2luZm9zOworICB9OworCisgIENhdGFsb2dzJgorICBnZXRfY2F0YWxvZ3MoKTsKKwor
X0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0
IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvbmV3bGliL2NfbG9jYWxlLmNjIGIvbGlic3Rk
YysrLXYzL2NvbmZpZy9sb2NhbGUvbmV3bGliL2NfbG9jYWxlLmNjCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iMTgxOTk5YTJkMQotLS0gL2Rldi9udWxsCisrKyBiL2xp
YnN0ZGMrKy12My9jb25maWcvbG9jYWxlL25ld2xpYi9jX2xvY2FsZS5jYwpAQCAtMCwwICsxLDQw
MiBAQAorLy8gV3JhcHBlciBmb3IgdW5kZXJseWluZyBDLWxhbmd1YWdlIGxvY2FsaXphdGlvbiAt
Ki0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAyMyBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBD
KysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRo
ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlv
bikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
CisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBV
bmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9u
YWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBF
eGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0Mg
UnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNl
ZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJ
ZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLworLy8g
SVNPIEMrKyAxNDg4MjogMjIuOCAgU3RhbmRhcmQgbG9jYWxlIGNhdGVnb3JpZXMuCisvLworCisv
LyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorLy8gTW9kaWZp
ZWQgYnkgVGFrYXNoaSBZYW5vIDx0YWthc2hpLnlhbm9AbmlmdHkubmUuanA+CisKKyNkZWZpbmUg
X0dOVV9TT1VSQ0UgMQorI2luY2x1ZGUgPGNzdGRpbz4KKyNpbmNsdWRlIDxsb2NhbGU+CisjaW5j
bHVkZSA8c3RkZXhjZXB0PgorI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDxhbGdvcml0aG0+
CisjaW5jbHVkZSA8bGFuZ2luZm8uaD4KKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5h
bC5oPgorCisjaW5jbHVkZSA8YmFja3dhcmQvYXV0b19wdHIuaD4KKworI2lmIF9fUE9TSVhfVklT
SUJMRSA8IDIwMDgwOQorc3RydWN0IF9fbG9jYWxlX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX2xvY2Fs
ZV90ICpsb2NhbGVfdDsKKworI2RlZmluZSBMQ19BTExfTUFTSwkJKDEgPDwgTENfQUxMKQorI2Rl
ZmluZSBMQ19DT0xMQVRFX01BU0sJCSgxIDw8IExDX0NPTExBVEUpCisjZGVmaW5lIExDX0NUWVBF
X01BU0sJCSgxIDw8IExDX0NUWVBFKQorI2RlZmluZSBMQ19NT05FVEFSWV9NQVNLCSgxIDw8IExD
X01PTkVUQVJZKQorI2RlZmluZSBMQ19OVU1FUklDX01BU0sJCSgxIDw8IExDX05VTUVSSUMpCisj
ZGVmaW5lIExDX1RJTUVfTUFTSwkJKDEgPDwgTENfVElNRSkKKyNkZWZpbmUgTENfTUVTU0FHRVNf
TUFTSwkoMSA8PCBMQ19NRVNTQUdFUykKKworZXh0ZXJuICJDIiBsb2NhbGVfdCBuZXdsb2NhbGUo
aW50LCBjb25zdCBjaGFyICosIGxvY2FsZV90KTsKK2V4dGVybiAiQyIgdm9pZCBmcmVlbG9jYWxl
KGxvY2FsZV90KTsKK2V4dGVybiAiQyIgbG9jYWxlX3QgZHVwbG9jYWxlKGxvY2FsZV90KTsKK2V4
dGVybiAiQyIgbG9jYWxlX3QgdXNlbG9jYWxlKGxvY2FsZV90KTsKKyNlbmRpZiAvKiBfX1BPU0lY
X1ZJU0lCTEUgPCAyMDA4MDkgKi8KKworLyogTmV3bGliIGNvbnN0YW50ICovCisjZGVmaW5lIEVO
Q09ESU5HX0xFTiAzMQorI2RlZmluZSBDQVRFR09SWV9MRU4gMTEKKyNkZWZpbmUgTlVNX0NBVEVH
T1JJRVMgNgorI2RlZmluZSB4c3RyKHMpIHN0cihzKQorI2RlZmluZSBzdHIocykgI3MKKyNkZWZp
bmUgRk1UX0xPQ0FMRSAiJSIgeHN0cihDQVRFR09SWV9MRU4pICJbXj1dPSUiIHhzdHIoRU5DT0RJ
TkdfTEVOKSAiW147XSIKKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1
bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIHRlbXBsYXRlPD4K
KyAgICB2b2lkCisgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBmbG9hdCYgX192
LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCisJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xv
YykgdGhyb3coKQorICAgIHsKKyAgICAgIGNoYXIqIF9fc2FuaXR5OworICAgICAgX192ID0gc3Ry
dG9mX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09M
VkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDIzLiBOdW1fZ2V0IG92ZXJmbG93IHJlc3VsdC4KKyAg
ICAgIGlmIChfX3Nhbml0eSA9PSBfX3MgfHwgKl9fc2FuaXR5ICE9ICdcMCcpCisJeworCSAgX192
ID0gMC4wZjsKKwkgIF9fZXJyID0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisJfQorICAgICAgZWxzZSBp
ZiAoX192ID09IG51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSkKKwl7CisJICBfX3Yg
PSBudW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpOworCSAgX19lcnIgPSBpb3NfYmFzZTo6ZmFp
bGJpdDsKKwl9CisgICAgICBlbHNlIGlmIChfX3YgPT0gLW51bWVyaWNfbGltaXRzPGZsb2F0Pjo6
aW5maW5pdHkoKSkKKwl7CisJICBfX3YgPSAtbnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKTsK
KwkgIF9fZXJyID0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisJfQorICAgIH0KKworICB0ZW1wbGF0ZTw+
CisgICAgdm9pZAorICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgZG91YmxlJiBf
X3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKKwkJICAgY29uc3QgX19jX2xvY2FsZSYgX19j
bG9jKSB0aHJvdygpCisgICAgeworICAgICAgY2hhciogX19zYW5pdHk7CisgICAgICBfX3YgPSBz
dHJ0b2RfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKworICAgICAgLy8gX0dMSUJDWFhfUkVT
T0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gMjMuIE51bV9nZXQgb3ZlcmZsb3cgcmVzdWx0Lgor
ICAgICAgaWYgKF9fc2FuaXR5ID09IF9fcyB8fCAqX19zYW5pdHkgIT0gJ1wwJykKKwl7CisJICBf
X3YgPSAwLjA7CisJICBfX2VyciA9IGlvc19iYXNlOjpmYWlsYml0OworCX0KKyAgICAgIGVsc2Ug
aWYgKF9fdiA9PSBudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpKQorCXsKKwkgIF9f
diA9IG51bWVyaWNfbGltaXRzPGRvdWJsZT46Om1heCgpOworCSAgX19lcnIgPSBpb3NfYmFzZTo6
ZmFpbGJpdDsKKwl9CisgICAgICBlbHNlIGlmIChfX3YgPT0gLW51bWVyaWNfbGltaXRzPGRvdWJs
ZT46OmluZmluaXR5KCkpCisJeworCSAgX192ID0gLW51bWVyaWNfbGltaXRzPGRvdWJsZT46Om1h
eCgpOworCSAgX19lcnIgPSBpb3NfYmFzZTo6ZmFpbGJpdDsKKwl9CisgICAgfQorCisgIHRlbXBs
YXRlPD4KKyAgICB2b2lkCisgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBsb25n
IGRvdWJsZSYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCisJCSAgIGNvbnN0IF9fY19s
b2NhbGUmIF9fY2xvYykgdGhyb3coKQorICAgIHsKKyAgICAgIGNoYXIqIF9fc2FuaXR5OworICAg
ICAgX192ID0gc3RydG9sZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworCisgICAgICAvLyBf
R0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyAyMy4gTnVtX2dldCBvdmVyZmxv
dyByZXN1bHQuCisgICAgICBpZiAoX19zYW5pdHkgPT0gX19zIHx8ICpfX3Nhbml0eSAhPSAnXDAn
KQorCXsKKwkgIF9fdiA9IDAuMGw7CisJICBfX2VyciA9IGlvc19iYXNlOjpmYWlsYml0OworCX0K
KyAgICAgIGVsc2UgaWYgKF9fdiA9PSBudW1lcmljX2xpbWl0czxsb25nIGRvdWJsZT46OmluZmlu
aXR5KCkpCisJeworCSAgX192ID0gbnVtZXJpY19saW1pdHM8bG9uZyBkb3VibGU+OjptYXgoKTsK
KwkgIF9fZXJyID0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisJfQorICAgICAgZWxzZSBpZiAoX192ID09
IC1udW1lcmljX2xpbWl0czxsb25nIGRvdWJsZT46OmluZmluaXR5KCkpCisJeworCSAgX192ID0g
LW51bWVyaWNfbGltaXRzPGxvbmcgZG91YmxlPjo6bWF4KCk7CisJICBfX2VyciA9IGlvc19iYXNl
OjpmYWlsYml0OworCX0KKyAgICB9CisKKyAgdm9pZAorICBsb2NhbGU6OmZhY2V0OjpfU19jcmVh
dGVfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCisJCQkJICAg
IF9fY19sb2NhbGUgX19vbGQpCisgIHsKKyAgICBfX2Nsb2MgPSBuZXdsb2NhbGUoMSA8PCBMQ19B
TEwsIF9fcywgX19vbGQpOworICAgIGlmIChfX2Nsb2MpCisgICAgICByZXR1cm47CisKKyAgICAv
KiBOZXdsaWIgZG9lcyBub3Qgc3VwcG9ydCBsb2NhbGUgc3RyaWcgc3VjaCBhcworICAgICAgICJM
Q19DVFlQRT1lbl9VUy5VVEY4O0xDX05VTUVSSUM9ZGVfREUuVVRGODsuLi4iICovCisgICAgY29u
c3QgY2hhciAqX19wID0gX19zOworICAgIF9fY2xvYyA9IF9fb2xkOworICAgIGNoYXIgX19jYXRb
Q0FURUdPUllfTEVOICsgMV0sIF9fbG9jW0VOQ09ESU5HX0xFTiArIDFdOworICAgIHdoaWxlICgy
ID09IHNzY2FuZihfX3AsIEZNVF9MT0NBTEUsIF9fY2F0LCBfX2xvYykpCisgICAgICB7CisJc3Ry
dWN0IHtjb25zdCBjaGFyICpfX2NhdDsgaW50IF9fbWFzazt9IF9fdGJsW05VTV9DQVRFR09SSUVT
ICsgMV0gPQorCSAgeworCSAgICAgIHsiTENfQ1RZUEUiLCBMQ19DVFlQRV9NQVNLfSwKKwkgICAg
ICB7IkxDX05VTUVSSUMiLCBMQ19OVU1FUklDX01BU0t9LAorCSAgICAgIHsiTENfVElNRSIsIExD
X1RJTUVfTUFTS30sCisJICAgICAgeyJMQ19DT0xMQVRFIiwgTENfQ09MTEFURV9NQVNLfSwKKwkg
ICAgICB7IkxDX01PTkVUQVJZIiwgTENfTU9ORVRBUllfTUFTS30sCisJICAgICAgeyJMQ19NRVNT
QUdFUyIsIExDX01FU1NBR0VTX01BU0t9LAorCSAgICAgIHtOVUxMLCAwfQorCSAgfTsKKwlmb3Ig
KGludCBfX2kgPSAwOyBfX3RibFtfX2ldLl9fY2F0OyBfX2krKykKKwkgIGlmIChzdHJjbXAoX190
YmxbX19pXS5fX2NhdCwgX19jYXQpID09IDApCisJICAgIHsKKwkgICAgICBfX2Nsb2MgPSBuZXds
b2NhbGUoX190YmxbX19pXS5fX21hc2ssIF9fbG9jLCBfX2Nsb2MpOworCSAgICAgIGJyZWFrOwor
CSAgICB9CisJaWYgKCFfX2Nsb2MpCisJICBicmVhazsKKwlpZiAoKF9fcCA9IHN0cmNocihfX3As
ICc7JykpID09IE5VTEwpCisJICBicmVhazsKKwlfX3ArKzsKKyAgICAgIH0KKyAgICBpZiAoIV9f
Y2xvYykKKyAgICAgIHsKKwkvLyBUaGlzIG5hbWVkIGxvY2FsZSBpcyBub3Qgc3VwcG9ydGVkIGJ5
IHRoZSB1bmRlcmx5aW5nIE9TLgorCV9fdGhyb3dfcnVudGltZV9lcnJvcihfX04oImxvY2FsZTo6
ZmFjZXQ6Ol9TX2NyZWF0ZV9jX2xvY2FsZSAiCisJCQkJICAibmFtZSBub3QgdmFsaWQiKSk7Cisg
ICAgICB9CisgIH0KKworICB2b2lkCisgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2Rlc3Ryb3lfY19sb2Nh
bGUoX19jX2xvY2FsZSYgX19jbG9jKQorICB7CisgICAgaWYgKF9fY2xvYyAmJiBfU19nZXRfY19s
b2NhbGUoKSAhPSBfX2Nsb2MpCisgICAgICBmcmVlbG9jYWxlKF9fY2xvYyk7CisgIH0KKworICBf
X2NfbG9jYWxlCisgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2Nsb25lX2NfbG9jYWxlKF9fY19sb2NhbGUm
IF9fY2xvYykgdGhyb3coKQorICB7IHJldHVybiBkdXBsb2NhbGUoX19jbG9jKTsgfQorCisgIF9f
Y19sb2NhbGUKKyAgbG9jYWxlOjpmYWNldDo6X1NfbGNfY3R5cGVfY19sb2NhbGUoX19jX2xvY2Fs
ZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcykKKyAgeworICAgIF9fY19sb2NhbGUgX19kdXAgPSBk
dXBsb2NhbGUoX19jbG9jKTsKKyAgICBpZiAoX19kdXAgPT0gX19jX2xvY2FsZSgwKSkKKyAgICAg
IF9fdGhyb3dfcnVudGltZV9lcnJvcihfX04oImxvY2FsZTo6ZmFjZXQ6Ol9TX2xjX2N0eXBlX2Nf
bG9jYWxlICIKKwkJCQkiZHVwbG9jYWxlIGVycm9yIikpOworICAgIF9fY19sb2NhbGUgX19jaGFu
Z2VkID0gbmV3bG9jYWxlKExDX0NUWVBFX01BU0ssIF9fcywgX19kdXApOworICAgIGlmIChfX2No
YW5nZWQgPT0gX19jX2xvY2FsZSgwKSkKKyAgICAgIHsKKwkvKiBOZXdsaWIgZG9lcyBub3Qgc3Vw
cG9ydCBsb2NhbGUgc3RyaWcgc3VjaCBhcworCSAgICJMQ19DVFlQRT1lbl9VUy5VVEY4O0xDX05V
TUVSSUM9ZGVfREUuVVRGODsuLi4iICovCisJY29uc3QgY2hhciAqX19wID0gX19zOworCWNoYXIg
X19jYXRbQ0FURUdPUllfTEVOICsgMV0sIF9fbG9jW0VOQ09ESU5HX0xFTiArIDFdOworCXdoaWxl
ICgyID09IHNzY2FuZihfX3AsIEZNVF9MT0NBTEUsIF9fY2F0LCBfX2xvYykpCisJICB7CisJICAg
IGlmIChzdHJjbXAoIkxDX0NUWVBFIiwgX19jYXQpID09IDApCisJICAgICAgeworCQlfX2NoYW5n
ZWQgPSBuZXdsb2NhbGUoTENfQ1RZUEVfTUFTSywgX19sb2MsIF9fZHVwKTsKKwkJYnJlYWs7CisJ
ICAgICAgfQorCSAgICBpZiAoKF9fcCA9IHN0cmNocihfX3AsICc7JykpID09IE5VTEwpCisJICAg
ICAgYnJlYWs7CisJICAgIF9fcCsrOworCSAgfQorICAgICAgfQorICAgIGlmIChfX2NoYW5nZWQg
PT0gX19jX2xvY2FsZSgwKSkKKyAgICAgIHsKKwlmcmVlbG9jYWxlKF9fZHVwKTsKKwlfX3Rocm93
X3J1bnRpbWVfZXJyb3IoX19OKCJsb2NhbGU6OmZhY2V0OjpfU19sY19jdHlwZV9jX2xvY2FsZSAi
CisJCQkJICAibmV3bG9jYWxlIGVycm9yIikpOworICAgICAgfQorICAgIHJldHVybiBfX2NoYW5n
ZWQ7CisgIH0KKworICBzdHJ1Y3QgX0NhdGFsb2dJZENvbXAKKyAgeworICAgIGJvb2wKKyAgICBv
cGVyYXRvcigpKG1lc3NhZ2VzX2Jhc2U6OmNhdGFsb2cgX19jYXQsIGNvbnN0IENhdGFsb2dfaW5m
byogX19pbmZvKSBjb25zdAorICAgIHsgcmV0dXJuIF9fY2F0IDwgX19pbmZvLT5fTV9pZDsgfQor
CisgICAgYm9vbAorICAgIG9wZXJhdG9yKCkoY29uc3QgQ2F0YWxvZ19pbmZvKiBfX2luZm8sIG1l
c3NhZ2VzX2Jhc2U6OmNhdGFsb2cgX19jYXQpIGNvbnN0CisgICAgeyByZXR1cm4gX19pbmZvLT5f
TV9pZCA8IF9fY2F0OyB9CisgIH07CisKKyAgQ2F0YWxvZ3M6On5DYXRhbG9ncygpCisgIHsKKyAg
ICBmb3IgKHZlY3RvcjxDYXRhbG9nX2luZm8qPjo6aXRlcmF0b3IgX19pdCA9IF9NX2luZm9zLmJl
Z2luKCk7CisJIF9faXQgIT0gX01faW5mb3MuZW5kKCk7ICsrX19pdCkKKyAgICAgIGRlbGV0ZSAq
X19pdDsKKyAgfQorCisgIG1lc3NhZ2VzX2Jhc2U6OmNhdGFsb2cKKyAgQ2F0YWxvZ3M6Ol9NX2Fk
ZChjb25zdCBjaGFyKiBfX2RvbWFpbiwgbG9jYWxlIF9fbCkKKyAgeworICAgIF9fZ251X2N4eDo6
X19zY29wZWRfbG9jayBsb2NrKF9NX211dGV4KTsKKworICAgIC8vIFRoZSBjb3VudGVyIGlzIG5v
dCBsaWtlbHkgdG8gcm9sbCB1bmxlc3MgY2F0YWxvZ3Mga2VlcCBvbiBiZWluZworICAgIC8vIG9w
ZW5lZC9jbG9zZWQgd2hpY2ggaXMgY29uc2lkZXIgYXMgYW4gYXBwbGljYXRpb24gbWlzdGFrZSBm
b3IgdGhlCisgICAgLy8gbW9tZW50LgorICAgIGlmIChfTV9jYXRhbG9nX2NvdW50ZXIgPT0gbnVt
ZXJpY19saW1pdHM8bWVzc2FnZXNfYmFzZTo6Y2F0YWxvZz46Om1heCgpKQorICAgICAgcmV0dXJu
IC0xOworCisgICAgYXV0b19wdHI8Q2F0YWxvZ19pbmZvPiBpbmZvKG5ldyBDYXRhbG9nX2luZm8o
X01fY2F0YWxvZ19jb3VudGVyKyssCisJCQkJCQkgX19kb21haW4sIF9fbCkpOworCisgICAgLy8g
Q2hlY2sgaWYgd2UgbWFuYWdlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGRvbWFpbi4KKyAgICBp
ZiAoIWluZm8tPl9NX2RvbWFpbikKKyAgICAgIHJldHVybiAtMTsKKworICAgIF9NX2luZm9zLnB1
c2hfYmFjayhpbmZvLmdldCgpKTsKKyAgICByZXR1cm4gaW5mby5yZWxlYXNlKCktPl9NX2lkOwor
ICB9CisKKyAgdm9pZAorICBDYXRhbG9nczo6X01fZXJhc2UobWVzc2FnZXNfYmFzZTo6Y2F0YWxv
ZyBfX2MpCisgIHsKKyAgICBfX2dudV9jeHg6Ol9fc2NvcGVkX2xvY2sgbG9jayhfTV9tdXRleCk7
CisKKyAgICB2ZWN0b3I8Q2F0YWxvZ19pbmZvKj46Oml0ZXJhdG9yIF9fcmVzID0KKyAgICAgIGxv
d2VyX2JvdW5kKF9NX2luZm9zLmJlZ2luKCksIF9NX2luZm9zLmVuZCgpLCBfX2MsIF9DYXRhbG9n
SWRDb21wKCkpOworICAgIGlmIChfX3JlcyA9PSBfTV9pbmZvcy5lbmQoKSB8fCAoKl9fcmVzKS0+
X01faWQgIT0gX19jKQorICAgICAgcmV0dXJuOworCisgICAgZGVsZXRlICpfX3JlczsKKyAgICBf
TV9pbmZvcy5lcmFzZShfX3Jlcyk7CisKKyAgICAvLyBKdXN0IGluIGNhc2UgY2xvc2VkIGNhdGFs
b2cgd2FzIHRoZSBsYXN0IG9wZW4uCisgICAgaWYgKF9fYyA9PSBfTV9jYXRhbG9nX2NvdW50ZXIg
LSAxKQorICAgICAgLS1fTV9jYXRhbG9nX2NvdW50ZXI7CisgIH0KKworICBjb25zdCBDYXRhbG9n
X2luZm8qCisgIENhdGFsb2dzOjpfTV9nZXQobWVzc2FnZXNfYmFzZTo6Y2F0YWxvZyBfX2MpIGNv
bnN0CisgIHsKKyAgICBfX2dudV9jeHg6Ol9fc2NvcGVkX2xvY2sgbG9jayhfTV9tdXRleCk7CisK
KyAgICB2ZWN0b3I8Q2F0YWxvZ19pbmZvKj46OmNvbnN0X2l0ZXJhdG9yIF9fcmVzID0KKyAgICAg
IGxvd2VyX2JvdW5kKF9NX2luZm9zLmJlZ2luKCksIF9NX2luZm9zLmVuZCgpLCBfX2MsIF9DYXRh
bG9nSWRDb21wKCkpOworCisgICAgaWYgKF9fcmVzICE9IF9NX2luZm9zLmVuZCgpICYmICgqX19y
ZXMpLT5fTV9pZCA9PSBfX2MpCisgICAgICByZXR1cm4gKl9fcmVzOworCisgICAgcmV0dXJuIDA7
CisgIH0KKworICBDYXRhbG9ncyYKKyAgZ2V0X2NhdGFsb2dzKCkKKyAgeworICAgIHN0YXRpYyBD
YXRhbG9ncyBfX2NhdGFsb2dzOworICAgIHJldHVybiBfX2NhdGFsb2dzOworICB9CisKK19HTElC
Q1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKKworbmFtZXNwYWNlIF9f
Z251X2N4eCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9O
QU1FU1BBQ0VfVkVSU0lPTgorCisgIGNvbnN0IGNoYXIqIGNvbnN0IGNhdGVnb3J5X25hbWVzW05V
TV9DQVRFR09SSUVTXSA9CisgICAgeworICAgICAgIkxDX0NUWVBFIiwKKyAgICAgICJMQ19OVU1F
UklDIiwKKyAgICAgICJMQ19USU1FIiwKKyAgICAgICJMQ19DT0xMQVRFIiwKKyAgICAgICJMQ19N
T05FVEFSWSIsCisgICAgICAiTENfTUVTU0FHRVMiLAorICAgIH07CisKK19HTElCQ1hYX0VORF9O
QU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKKworc3RhdGljIGNoYXIgKgorX19zZXRs
b2NhbGVfZm9yX25ld2xpYihpbnQgX19jYXRlZ29yeSwgY29uc3QgY2hhciAqX19sb2NhbGUpCit7
CisgIGNoYXIgKl9fcmV0OworICBpZiAoKF9fcmV0ID0gc2V0bG9jYWxlKF9fY2F0ZWdvcnksIF9f
bG9jYWxlKSkgPT0gTlVMTAorICAgICAgJiYgX19jYXRlZ29yeSA9PSBMQ19BTEwpCisgICAgewor
ICAgICAgLyogTmV3bGliIGRvZXMgbm90IHN1cHBvcnQgbG9jYWxlIHN0cmlnIHN1Y2ggYXMKKwkg
IkxDX0NUWVBFPWVuX1VTLlVURjg7TENfTlVNRVJJQz1kZV9ERS5VVEY4Oy4uLiIgKi8KKyAgICAg
IGNoYXIgX19idWZbTlVNX0NBVEVHT1JJRVNdW0VOQ09ESU5HX0xFTiArIDFdOworICAgICAgY29u
c3QgY2hhciAqX19wID0gX19sb2NhbGU7CisgICAgICBjaGFyIF9fY2F0W0NBVEVHT1JZX0xFTiAr
IDFdLCBfX2xvY1tFTkNPRElOR19MRU4gKyAxXTsKKyAgICAgIHdoaWxlICgyID09IHNzY2FuZihf
X3AsIEZNVF9MT0NBTEUsIF9fY2F0LCBfX2xvYykpCisJeworCSAgY29uc3QgY2hhciAqX190Ymxb
TlVNX0NBVEVHT1JJRVNdID0KKwkgICAgeworCSAgICAgICJMQ19DT0xMQVRFIiwKKwkgICAgICAi
TENfQ1RZUEUiLAorCSAgICAgICJMQ19NT05FVEFSWSIsCisJICAgICAgIkxDX05VTUVSSUMiLAor
CSAgICAgICJMQ19USU1FIiwKKwkgICAgICAiTENfTUVTU0FHRVMiCisJICAgIH07CisJICBmb3Ig
KGludCBfX2kgPSAwOyBfX2kgPCBOVU1fQ0FURUdPUklFUzsgX19pKyspCisJICAgIGlmIChzdHJj
bXAoX190YmxbX19pXSwgX19jYXQpID09IDApCisJICAgICAgeworCQlzdHJuY3B5KF9fYnVmW19f
aV0sIF9fbG9jLCBzaXplb2YoX19idWZbX19pXSkpOworCQlfX2J1ZltfX2ldW0VOQ09ESU5HX0xF
Tl0gPSAnXDAnOworCQlicmVhazsKKwkgICAgICB9CisJICBpZiAoKF9fcCA9IHN0cmNocihfX3As
ICc7JykpID09IE5VTEwpCisJICAgIGJyZWFrOworCSAgX19wICsrOworCX0KKyAgICAgIGNoYXIg
X19uZXdsb2NbKEVOQ09ESU5HX0xFTiArIDEpICogTlVNX0NBVEVHT1JJRVNdOworICAgICAgc3By
aW50ZihfX25ld2xvYywgIiVzLyVzLyVzLyVzLyVzLyVzIiwKKwkgICAgICBfX2J1ZlswXSwgX19i
dWZbMV0sIF9fYnVmWzJdLCBfX2J1ZlszXSwgX19idWZbNF0sIF9fYnVmWzVdKTsKKyAgICAgIF9f
cmV0ID0gc2V0bG9jYWxlKF9fY2F0ZWdvcnksIF9fbmV3bG9jKTsKKworICAgIH0KKyAgcmV0dXJu
IF9fcmV0OworfQorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkK
K3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgY29uc3QgY2hhciogY29u
c3QqIGNvbnN0IGxvY2FsZTo6X1NfY2F0ZWdvcmllcyA9IF9fZ251X2N4eDo6Y2F0ZWdvcnlfbmFt
ZXM7CisgIGNvbnN0IF9fdHlwZW9mKHNldGxvY2FsZSkgKl9fc2V0bG9jYWxlID0gX19zZXRsb2Nh
bGVfZm9yX25ld2xpYjsKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5h
bWVzcGFjZQorCisvLyBYWFggR0xJQkNYWF9BQkkgRGVwcmVjYXRlZAorI2lmZGVmIF9HTElCQ1hY
X0xPTkdfRE9VQkxFX0NPTVBBVAorI2RlZmluZSBfR0xJQkNYWF9MREJMX0NPTVBBVChkYmwsIGxk
YmwpIFwKKyAgZXh0ZXJuICJDIiB2b2lkIGxkYmwgKHZvaWQpIF9fYXR0cmlidXRlX18gKChhbGlh
cyAoI2RibCkpKQorX0dMSUJDWFhfTERCTF9DT01QQVQoX1pTdDE0X19jb252ZXJ0X3RvX3ZJZEV2
UEtjUlRfUlN0MTJfSW9zX0lvc3RhdGVSS1BpLCBfWlN0MTRfX2NvbnZlcnRfdG9fdkllRXZQS2NS
VF9SU3QxMl9Jb3NfSW9zdGF0ZVJLUGkpOworI2VuZGlmIC8vIF9HTElCQ1hYX0xPTkdfRE9VQkxF
X0NPTVBBVApkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvbmV3bGliL2Nf
bG9jYWxlLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9uZXdsaWIvY19sb2NhbGUuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYzE4OWFiYzg3MmIKLS0tIC9k
ZXYvbnVsbAorKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9uZXdsaWIvY19sb2NhbGUu
aApAQCAtMCwwICsxLDEwMCBAQAorLy8gV3JhcHBlciBmb3IgdW5kZXJseWluZyBDLWxhbmd1YWdl
IGxvY2FsaXphdGlvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAyMyBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUK
Ky8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9y
IChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8v
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBn
cmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1
bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBj
b3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMg
cHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSBy
ZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNl
cy8+LgorCisvKiogQGZpbGUgYml0cy9jKytsb2NhbGUuaAorICogIFRoaXMgaXMgYW4gaW50ZXJu
YWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBE
byBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le2xvY2FsZX0KKyAq
LworCisvLworLy8gSVNPIEMrKyAxNDg4MjogMjIuOCAgU3RhbmRhcmQgbG9jYWxlIGNhdGVnb3Jp
ZXMuCisvLworCisvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29t
PgorLy8gTW9kaWZpZWQgYnkgVGFrYXNoaSBZYW5vIDx0YWthc2hpLnlhbm9AbmlmdHkubmUuanA+
CisKKyNpZm5kZWYgX0dMSUJDWFhfQ1hYX0xPQ0FMRV9ICisjZGVmaW5lIF9HTElCQ1hYX0NYWF9M
T0NBTEVfSCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGNsb2Nh
bGU+CisKKyNpZiBfX1BPU0lYX1ZJU0lCTEUgPCAyMDA4MDkKK3N0cnVjdCBfX2xvY2FsZV90Owor
dHlwZWRlZiBzdHJ1Y3QgX19sb2NhbGVfdCAqbG9jYWxlX3Q7CisKKyNkZWZpbmUgTENfQUxMX01B
U0sJCSgxIDw8IExDX0FMTCkKKyNkZWZpbmUgTENfQ09MTEFURV9NQVNLCQkoMSA8PCBMQ19DT0xM
QVRFKQorI2RlZmluZSBMQ19DVFlQRV9NQVNLCQkoMSA8PCBMQ19DVFlQRSkKKyNkZWZpbmUgTENf
TU9ORVRBUllfTUFTSwkoMSA8PCBMQ19NT05FVEFSWSkKKyNkZWZpbmUgTENfTlVNRVJJQ19NQVNL
CQkoMSA8PCBMQ19OVU1FUklDKQorI2RlZmluZSBMQ19USU1FX01BU0sJCSgxIDw8IExDX1RJTUUp
CisjZGVmaW5lIExDX01FU1NBR0VTX01BU0sJKDEgPDwgTENfTUVTU0FHRVMpCisKK2V4dGVybiAi
QyIgbG9jYWxlX3QgbmV3bG9jYWxlKGludCwgY29uc3QgY2hhciAqLCBsb2NhbGVfdCk7CitleHRl
cm4gIkMiIHZvaWQgZnJlZWxvY2FsZShsb2NhbGVfdCk7CitleHRlcm4gIkMiIGxvY2FsZV90IGR1
cGxvY2FsZShsb2NhbGVfdCk7CitleHRlcm4gIkMiIGxvY2FsZV90IHVzZWxvY2FsZShsb2NhbGVf
dCk7CisjZW5kaWYgLyogX19QT1NJWF9WSVNJQkxFIDwgMjAwODA5ICovCisKKyNkZWZpbmUgX0dM
SUJDWFhfTlVNX0NBVEVHT1JJRVMgMAorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJ
VFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgdHlw
ZWRlZiBsb2NhbGVfdCBfX2NfbG9jYWxlOworCisgIC8vIENvbnZlcnQgbnVtZXJpYyB2YWx1ZSBv
ZiB0eXBlIGRvdWJsZSBhbmQgbG9uZyBkb3VibGUgdG8gc3RyaW5nIGFuZAorICAvLyByZXR1cm4g
bGVuZ3RoIG9mIHN0cmluZy4gIElmIHZzbnByaW50ZiBpcyBhdmFpbGFibGUgdXNlIGl0LCBvdGhl
cndpc2UKKyAgLy8gZmFsbCBiYWNrIHRvIHRoZSB1bnNhZmUgdnNwcmludGYgd2hpY2gsIGluIGdl
bmVyYWwsIGNhbiBiZSBkYW5nZXJvdXMKKyAgLy8gYW5kIHNob3VsZCBiZSBhdm9pZGVkLgorICBp
bmxpbmUgaW50CisgIF9fY29udmVydF9mcm9tX3YoY29uc3QgX19jX2xvY2FsZSYgX19jbG9jIF9f
YXR0cmlidXRlX18gKChfX3VudXNlZF9fKSksCisJCSAgIGNoYXIqIF9fb3V0LAorCQkgICBjb25z
dCBpbnQgX19zaXplIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSksCisJCSAgIGNvbnN0IGNo
YXIqIF9fZm10LCAuLi4pCisgIHsKKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gdXNlbG9jYWxlKF9f
Y2xvYyk7CisKKyAgICBfX2J1aWx0aW5fdmFfbGlzdCBfX2FyZ3M7CisgICAgX19idWlsdGluX3Zh
X3N0YXJ0KF9fYXJncywgX19mbXQpOworCisjaWYgX0dMSUJDWFhfVVNFX0M5OV9TVERJTworICAg
IGNvbnN0IGludCBfX3JldCA9IF9fYnVpbHRpbl92c25wcmludGYoX19vdXQsIF9fc2l6ZSwgX19m
bXQsIF9fYXJncyk7CisjZWxzZQorICAgIGNvbnN0IGludCBfX3JldCA9IF9fYnVpbHRpbl92c3By
aW50ZihfX291dCwgX19mbXQsIF9fYXJncyk7CisjZW5kaWYKKworICAgIF9fYnVpbHRpbl92YV9l
bmQoX19hcmdzKTsKKworICAgIHVzZWxvY2FsZShfX29sZCk7CisgICAgcmV0dXJuIF9fcmV0Owor
ICB9CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9uZXdsaWIvY29k
ZWN2dF9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvbmV3bGliL2NvZGVj
dnRfbWVtYmVycy5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZTQ4
MzU0MmNlYjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9u
ZXdsaWIvY29kZWN2dF9tZW1iZXJzLmNjCkBAIC0wLDAgKzEsMjg4IEBACisvLyBzdGQ6OmNvZGVj
dnQgaW1wbGVtZW50YXRpb24gZGV0YWlscywgbmV3bGliIHZlcnNpb24gLSotIEMrKyAtKi0KKwor
Ly8gQ29weXJpZ2h0IChDKSAyMDAyLTIwMjMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
CisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBU
aGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0
ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3
IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNz
aW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJz
aW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFy
eSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENP
UFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8v
IDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8KKy8vIElTTyBDKysgMTQ4ODI6
IDIyLjIuMS41IC0gVGVtcGxhdGUgY2xhc3MgY29kZWN2dAorLy8KKworLy8gV3JpdHRlbiBieSBC
ZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKy8vIE1vZGlmaWVkIGJ5IFRha2FzaGkg
WWFubyA8dGFrYXNoaS55YW5vQG5pZnR5Lm5lLmpwPgorCisjaW5jbHVkZSA8bG9jYWxlPgorI2lu
Y2x1ZGUgPGNzdGRsaWI+ICAvLyBGb3IgTUJfQ1VSX01BWAorI2luY2x1ZGUgPGNsaW1pdHM+ICAv
LyBGb3IgTUJfTEVOX01BWAorI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisK
K25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhf
QkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvLyBTcGVjaWFsaXphdGlvbnMuCisjaWZkZWYg
X0dMSUJDWFhfVVNFX1dDSEFSX1QKKyAgY29kZWN2dF9iYXNlOjpyZXN1bHQKKyAgY29kZWN2dDx3
Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKyAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUs
IGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCisJIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21f
ZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAorCSBleHRlcm5fdHlwZSogX190
bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAorCSBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29u
c3QKKyAgeworICAgIHJlc3VsdCBfX3JldCA9IG9rOworICAgIHN0YXRlX3R5cGUgX190bXBfc3Rh
dGUoX19zdGF0ZSk7CisKKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gdXNlbG9jYWxlKF9NX2NfbG9j
YWxlX2NvZGVjdnQpOworCisgICAgLy8gd2NzbnJ0b21icyBpcyAqdmVyeSogZmFzdCBidXQgc3Rv
cHMgaWYgZW5jb3VudGVycyBOVUwgY2hhcmFjdGVyczoKKyAgICAvLyBpbiBjYXNlIHdlIGZhbGwg
YmFjayB0byB3Y3J0b21iIGFuZCB0aGVuIGNvbnRpbnVlLCBpbiBhIGxvb3AuCisgICAgLy8gTkI6
IHdjc25ydG9tYnMgaXMgYSBHTlUgZXh0ZW5zaW9uCisgICAgZm9yIChfX2Zyb21fbmV4dCA9IF9f
ZnJvbSwgX190b19uZXh0ID0gX190bzsKKwkgX19mcm9tX25leHQgPCBfX2Zyb21fZW5kICYmIF9f
dG9fbmV4dCA8IF9fdG9fZW5kCisJICYmIF9fcmV0ID09IG9rOykKKyAgICAgIHsKKwljb25zdCBp
bnRlcm5fdHlwZSogX19mcm9tX2NodW5rX2VuZCA9IHdtZW1jaHIoX19mcm9tX25leHQsIEwnXDAn
LAorCQkJCQkJICAgICAgX19mcm9tX2VuZCAtIF9fZnJvbV9uZXh0KTsKKwlpZiAoIV9fZnJvbV9j
aHVua19lbmQpCisJICBfX2Zyb21fY2h1bmtfZW5kID0gX19mcm9tX2VuZDsKKworCV9fZnJvbSA9
IF9fZnJvbV9uZXh0OworCWNvbnN0IHNpemVfdCBfX2NvbnYgPSB3Y3NucnRvbWJzKF9fdG9fbmV4
dCwgJl9fZnJvbV9uZXh0LAorCQkJCQkgX19mcm9tX2NodW5rX2VuZCAtIF9fZnJvbV9uZXh0LAor
CQkJCQkgX190b19lbmQgLSBfX3RvX25leHQsICZfX3N0YXRlKTsKKwlpZiAoX19jb252ID09IHN0
YXRpY19jYXN0PHNpemVfdD4oLTEpKQorCSAgeworCSAgICAvLyBJbiBjYXNlIG9mIGVycm9yLCBp
biBvcmRlciB0byBzdG9wIGF0IHRoZSBleGFjdCBwbGFjZSB3ZQorCSAgICAvLyBoYXZlIHRvIHN0
YXJ0IGFnYWluIGZyb20gdGhlIGJlZ2lubmluZyB3aXRoIGEgc2VyaWVzIG9mCisJICAgIC8vIHdj
cnRvbWIuCisJICAgIGZvciAoOyBfX2Zyb20gPCBfX2Zyb21fbmV4dDsgKytfX2Zyb20pCisJICAg
ICAgX190b19uZXh0ICs9IHdjcnRvbWIoX190b19uZXh0LCAqX19mcm9tLCAmX190bXBfc3RhdGUp
OworCSAgICBfX3N0YXRlID0gX190bXBfc3RhdGU7CisJICAgIF9fcmV0ID0gZXJyb3I7CisJICB9
CisJZWxzZSBpZiAoX19mcm9tX25leHQgJiYgX19mcm9tX25leHQgPCBfX2Zyb21fY2h1bmtfZW5k
KQorCSAgeworCSAgICBfX3RvX25leHQgKz0gX19jb252OworCSAgICBfX3JldCA9IHBhcnRpYWw7
CisJICB9CisJZWxzZQorCSAgeworCSAgICBfX2Zyb21fbmV4dCA9IF9fZnJvbV9jaHVua19lbmQ7
CisJICAgIF9fdG9fbmV4dCArPSBfX2NvbnY7CisJICB9CisKKwlpZiAoX19mcm9tX25leHQgPCBf
X2Zyb21fZW5kICYmIF9fcmV0ID09IG9rKQorCSAgeworCSAgICBleHRlcm5fdHlwZSBfX2J1ZltN
Ql9MRU5fTUFYXTsKKwkgICAgX190bXBfc3RhdGUgPSBfX3N0YXRlOworCSAgICBjb25zdCBzaXpl
X3QgX19jb252MiA9IHdjcnRvbWIoX19idWYsICpfX2Zyb21fbmV4dCwgJl9fdG1wX3N0YXRlKTsK
KwkgICAgaWYgKF9fY29udjIgPiBzdGF0aWNfY2FzdDxzaXplX3Q+KF9fdG9fZW5kIC0gX190b19u
ZXh0KSkKKwkgICAgICBfX3JldCA9IHBhcnRpYWw7CisJICAgIGVsc2UKKwkgICAgICB7CisJCW1l
bWNweShfX3RvX25leHQsIF9fYnVmLCBfX2NvbnYyKTsKKwkJX19zdGF0ZSA9IF9fdG1wX3N0YXRl
OworCQlfX3RvX25leHQgKz0gX19jb252MjsKKwkJKytfX2Zyb21fbmV4dDsKKwkgICAgICB9CisJ
ICB9CisgICAgICB9CisKKyAgICB1c2Vsb2NhbGUoX19vbGQpOworCisgICAgcmV0dXJuIF9fcmV0
OworICB9CisKKyAgY29kZWN2dF9iYXNlOjpyZXN1bHQKKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFy
LCBtYnN0YXRlX3Q+OjoKKyAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJu
X3R5cGUqIF9fZnJvbSwKKwljb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0
ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKKwlpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUq
IF9fdG9fZW5kLAorCWludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAorICB7CisgICAgcmVz
dWx0IF9fcmV0ID0gb2s7CisgICAgc3RhdGVfdHlwZSBfX3RtcF9zdGF0ZShfX3N0YXRlKTsKKwor
ICAgIF9fY19sb2NhbGUgX19vbGQgPSB1c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7CisK
KyAgICAvLyBtYnNucnRvd2NzIGlzICp2ZXJ5KiBmYXN0IGJ1dCBzdG9wcyBpZiBlbmNvdW50ZXJz
IE5VTCBjaGFyYWN0ZXJzOgorICAgIC8vIGluIGNhc2Ugd2Ugc3RvcmUgYSBMJ1wwJyBhbmQgdGhl
biBjb250aW51ZSwgaW4gYSBsb29wLgorICAgIC8vIE5COiBtYnNucnRvd2NzIGlzIGEgR05VIGV4
dGVuc2lvbgorICAgIGZvciAoX19mcm9tX25leHQgPSBfX2Zyb20sIF9fdG9fbmV4dCA9IF9fdG87
CisJIF9fZnJvbV9uZXh0IDwgX19mcm9tX2VuZCAmJiBfX3RvX25leHQgPCBfX3RvX2VuZAorCSAm
JiBfX3JldCA9PSBvazspCisgICAgICB7CisJY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9jaHVu
a19lbmQ7CisJX19mcm9tX2NodW5rX2VuZCA9IHN0YXRpY19jYXN0PGNvbnN0IGV4dGVybl90eXBl
Kj4obWVtY2hyKF9fZnJvbV9uZXh0LCAnXDAnLAorCQkJCQkJCQkgIF9fZnJvbV9lbmQKKwkJCQkJ
CQkJICAtIF9fZnJvbV9uZXh0KSk7CisJaWYgKCFfX2Zyb21fY2h1bmtfZW5kKQorCSAgX19mcm9t
X2NodW5rX2VuZCA9IF9fZnJvbV9lbmQ7CisKKwlfX2Zyb20gPSBfX2Zyb21fbmV4dDsKKwlzaXpl
X3QgX19jb252ID0gbWJzbnJ0b3djcyhfX3RvX25leHQsICZfX2Zyb21fbmV4dCwKKwkJCQkgICBf
X2Zyb21fY2h1bmtfZW5kIC0gX19mcm9tX25leHQsCisJCQkJICAgX190b19lbmQgLSBfX3RvX25l
eHQsICZfX3N0YXRlKTsKKwlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpKQor
CSAgeworCSAgICAvLyBJbiBjYXNlIG9mIGVycm9yLCBpbiBvcmRlciB0byBzdG9wIGF0IHRoZSBl
eGFjdCBwbGFjZSB3ZQorCSAgICAvLyBoYXZlIHRvIHN0YXJ0IGFnYWluIGZyb20gdGhlIGJlZ2lu
bmluZyB3aXRoIGEgc2VyaWVzIG9mCisJICAgIC8vIG1icnRvd2MuCisJICAgIGZvciAoOzsgKytf
X3RvX25leHQsIF9fZnJvbSArPSBfX2NvbnYpCisJICAgICAgeworCQlfX2NvbnYgPSBtYnJ0b3dj
KF9fdG9fbmV4dCwgX19mcm9tLCBfX2Zyb21fZW5kIC0gX19mcm9tLAorCQkJCSAmX190bXBfc3Rh
dGUpOworCQlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpCisJCSAgICB8fCBf
X2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMikpCisJCSAgYnJlYWs7CisJICAgICAgfQor
CSAgICBfX2Zyb21fbmV4dCA9IF9fZnJvbTsKKwkgICAgX19zdGF0ZSA9IF9fdG1wX3N0YXRlOwor
CSAgICBfX3JldCA9IGVycm9yOworCSAgfQorCWVsc2UgaWYgKF9fZnJvbV9uZXh0ICYmIF9fZnJv
bV9uZXh0IDwgX19mcm9tX2NodW5rX2VuZCkKKwkgIHsKKwkgICAgLy8gSXQgaXMgdW5jbGVhciB3
aGF0IHRvIHJldHVybiBpbiB0aGlzIGNhc2UgKHNlZSBEUiAzODIpLgorCSAgICBfX3RvX25leHQg
Kz0gX19jb252OworCSAgICBfX3JldCA9IHBhcnRpYWw7CisJICB9CisJZWxzZQorCSAgeworCSAg
ICBfX2Zyb21fbmV4dCA9IF9fZnJvbV9jaHVua19lbmQ7CisJICAgIF9fdG9fbmV4dCArPSBfX2Nv
bnY7CisJICB9CisKKwlpZiAoX19mcm9tX25leHQgPCBfX2Zyb21fZW5kICYmIF9fcmV0ID09IG9r
KQorCSAgeworCSAgICBpZiAoX190b19uZXh0IDwgX190b19lbmQpCisJICAgICAgeworCQkvLyBY
WFggUHJvYmFibHkgd3JvbmcgZm9yIHN0YXRlZnVsIGVuY29kaW5ncworCQlfX3RtcF9zdGF0ZSA9
IF9fc3RhdGU7CisJCSsrX19mcm9tX25leHQ7CisJCSpfX3RvX25leHQrKyA9IEwnXDAnOworCSAg
ICAgIH0KKwkgICAgZWxzZQorCSAgICAgIF9fcmV0ID0gcGFydGlhbDsKKwkgIH0KKyAgICAgIH0K
KworICAgIHVzZWxvY2FsZShfX29sZCk7CisKKyAgICByZXR1cm4gX19yZXQ7CisgIH0KKworICBp
bnQKKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKyAgZG9fZW5jb2Rpbmco
KSBjb25zdCB0aHJvdygpCisgIHsKKyAgICAvLyBYWFggVGhpcyBpbXBsZW1lbnRhdGlvbiBhc3N1
bWVzIHRoYXQgdGhlIGVuY29kaW5nIGlzCisgICAgLy8gc3RhdGVsZXNzIGFuZCBpcyBlaXRoZXIg
c2luZ2xlLWJ5dGUgb3IgdmFyaWFibGUtd2lkdGguCisgICAgaW50IF9fcmV0ID0gMDsKKyAgICBf
X2NfbG9jYWxlIF9fb2xkID0gdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworICAgIGlm
IChNQl9DVVJfTUFYID09IDEpCisgICAgICBfX3JldCA9IDE7CisgICAgdXNlbG9jYWxlKF9fb2xk
KTsKKyAgICByZXR1cm4gX19yZXQ7CisgIH0KKworICBpbnQKKyAgY29kZWN2dDx3Y2hhcl90LCBj
aGFyLCBtYnN0YXRlX3Q+OjoKKyAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCkKKyAgewor
ICAgIF9fY19sb2NhbGUgX19vbGQgPSB1c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7Cisg
ICAgLy8gWFhYIFByb2JhYmx5IHdyb25nIGZvciBzdGF0ZWZ1bCBlbmNvZGluZ3MuCisgICAgaW50
IF9fcmV0ID0gTUJfQ1VSX01BWDsKKyAgICB1c2Vsb2NhbGUoX19vbGQpOworICAgIHJldHVybiBf
X3JldDsKKyAgfQorCisgIGludAorICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46
OgorICBkb19sZW5ndGgoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9f
ZnJvbSwKKwkgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0
CisgIHsKKyAgICBpbnQgX19yZXQgPSAwOworICAgIHN0YXRlX3R5cGUgX190bXBfc3RhdGUoX19z
dGF0ZSk7CisKKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2Nv
ZGVjdnQpOworCisgICAgLy8gbWJzbnJ0b3djcyBpcyAqdmVyeSogZmFzdCBidXQgc3RvcHMgaWYg
ZW5jb3VudGVycyBOVUwgY2hhcmFjdGVyczoKKyAgICAvLyBpbiBjYXNlIHdlIGFkdmFuY2UgcGFz
dCBpdCBhbmQgdGhlbiBjb250aW51ZSwgaW4gYSBsb29wLgorICAgIC8vIE5COiBtYnNucnRvd2Nz
IGlzIGEgR05VIGV4dGVuc2lvbgorCisgICAgLy8gQSBkdW1teSBpbnRlcm5hbCBidWZmZXIgaXMg
bmVlZGVkIGluIG9yZGVyIGZvciBtYnNucnRvY3dzIHRvIGNvbnNpZGVyCisgICAgLy8gaXRzIGZv
dXJ0aCBwYXJhbWV0ZXIgKGl0IHdvdWxkbid0IHdpdGggTlVMTCBhcyBmaXJzdCBwYXJhbWV0ZXIp
LgorICAgIHdjaGFyX3QqIF9fdG8gPSBzdGF0aWNfY2FzdDx3Y2hhcl90Kj4oX19idWlsdGluX2Fs
bG9jYShzaXplb2Yod2NoYXJfdCkKKwkJCQkJCQkgICAqIF9fbWF4KSk7CisgICAgd2hpbGUgKF9f
ZnJvbSA8IF9fZW5kICYmIF9fbWF4KQorICAgICAgeworCWNvbnN0IGV4dGVybl90eXBlKiBfX2Zy
b21fY2h1bmtfZW5kOworCV9fZnJvbV9jaHVua19lbmQgPSBzdGF0aWNfY2FzdDxjb25zdCBleHRl
cm5fdHlwZSo+KG1lbWNocihfX2Zyb20sICdcMCcsCisJCQkJCQkJCSAgX19lbmQKKwkJCQkJCQkJ
ICAtIF9fZnJvbSkpOworCWlmICghX19mcm9tX2NodW5rX2VuZCkKKwkgIF9fZnJvbV9jaHVua19l
bmQgPSBfX2VuZDsKKworCWNvbnN0IGV4dGVybl90eXBlKiBfX3RtcF9mcm9tID0gX19mcm9tOwor
CXNpemVfdCBfX2NvbnYgPSBtYnNucnRvd2NzKF9fdG8sICZfX2Zyb20sCisJCQkJICAgX19mcm9t
X2NodW5rX2VuZCAtIF9fZnJvbSwKKwkJCQkgICBfX21heCwgJl9fc3RhdGUpOworCWlmIChfX2Nv
bnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkpCisJICB7CisJICAgIC8vIEluIGNhc2Ugb2Yg
ZXJyb3IsIGluIG9yZGVyIHRvIHN0b3AgYXQgdGhlIGV4YWN0IHBsYWNlIHdlCisJICAgIC8vIGhh
dmUgdG8gc3RhcnQgYWdhaW4gZnJvbSB0aGUgYmVnaW5uaW5nIHdpdGggYSBzZXJpZXMgb2YKKwkg
ICAgLy8gbWJydG93Yy4KKwkgICAgZm9yIChfX2Zyb20gPSBfX3RtcF9mcm9tOzsgX19mcm9tICs9
IF9fY29udikKKwkgICAgICB7CisJCV9fY29udiA9IG1icnRvd2MoMCwgX19mcm9tLCBfX2VuZCAt
IF9fZnJvbSwKKwkJCQkgJl9fdG1wX3N0YXRlKTsKKwkJaWYgKF9fY29udiA9PSBzdGF0aWNfY2Fz
dDxzaXplX3Q+KC0xKQorCQkgICAgfHwgX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTIp
KQorCQkgIGJyZWFrOworCSAgICAgIH0KKwkgICAgX19zdGF0ZSA9IF9fdG1wX3N0YXRlOworCSAg
ICBfX3JldCArPSBfX2Zyb20gLSBfX3RtcF9mcm9tOworCSAgICBicmVhazsKKwkgIH0KKwlpZiAo
IV9fZnJvbSkKKwkgIF9fZnJvbSA9IF9fZnJvbV9jaHVua19lbmQ7CisKKwlfX3JldCArPSBfX2Zy
b20gLSBfX3RtcF9mcm9tOworCV9fbWF4IC09IF9fY29udjsKKworCWlmIChfX2Zyb20gPCBfX2Vu
ZCAmJiBfX21heCkKKwkgIHsKKwkgICAgLy8gWFhYIFByb2JhYmx5IHdyb25nIGZvciBzdGF0ZWZ1
bCBlbmNvZGluZ3MKKwkgICAgX190bXBfc3RhdGUgPSBfX3N0YXRlOworCSAgICArK19fZnJvbTsK
KwkgICAgKytfX3JldDsKKwkgICAgLS1fX21heDsKKwkgIH0KKyAgICAgIH0KKworICAgIHVzZWxv
Y2FsZShfX29sZCk7CisKKyAgICByZXR1cm4gX19yZXQ7CisgIH0KKyNlbmRpZgorCitfR0xJQkNY
WF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9saWJz
dGRjKystdjMvY29uZmlnL2xvY2FsZS9uZXdsaWIvY29sbGF0ZV9tZW1iZXJzLmNjIGIvbGlic3Rk
YysrLXYzL2NvbmZpZy9sb2NhbGUvbmV3bGliL2NvbGxhdGVfbWVtYmVycy5jYwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNzRhNjQ2MTQzYmUKLS0tIC9kZXYvbnVsbAor
KysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9uZXdsaWIvY29sbGF0ZV9tZW1iZXJzLmNj
CkBAIC0wLDAgKzEsNzQgQEAKKy8vIHN0ZDo6Y29sbGF0ZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxz
LCBuZXdsaWIgdmVyc2lvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAy
MyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0
aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMs
IG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
Ky8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFy
ZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0ND
IFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8g
YSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRo
aXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElN
RSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNl
bnNlcy8+LgorCisvLworLy8gSVNPIEMrKyAxNDg4MjogMjIuMi40LjEuMiAgY29sbGF0ZSB2aXJ0
dWFsIGZ1bmN0aW9ucworLy8KKworLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pA
cmVkaGF0LmNvbT4KKy8vIE1vZGlmaWVkIGJ5IFRha2FzaGkgWWFubyA8dGFrYXNoaS55YW5vQG5p
ZnR5Lm5lLmpwPgorCisjaW5jbHVkZSA8bG9jYWxlPgorI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxl
X2ludGVybmFsLmg+CisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0
KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvLyBUaGVzZSBhcmUg
YmFzaWNhbGx5IGV4dGVuc2lvbnMgdG8gY2hhcl90cmFpdHMsIGFuZCBwZXJoYXBzIHNob3VsZAor
ICAvLyBiZSBwdXQgdGhlcmUgaW5zdGVhZCBvZiBoZXJlLgorICB0ZW1wbGF0ZTw+CisgICAgaW50
CisgICAgY29sbGF0ZTxjaGFyPjo6X01fY29tcGFyZShjb25zdCBjaGFyKiBfX29uZSwKKwkJCSAg
ICAgIGNvbnN0IGNoYXIqIF9fdHdvKSBjb25zdCB0aHJvdygpCisgICAgeworICAgICAgaW50IF9f
Y21wID0gc3RyY29sbF9sKF9fb25lLCBfX3R3bywgX01fY19sb2NhbGVfY29sbGF0ZSk7CisgICAg
ICByZXR1cm4gKF9fY21wID4+ICg4ICogc2l6ZW9mIChpbnQpIC0gMikpIHwgKF9fY21wICE9IDAp
OworICAgIH0KKworICB0ZW1wbGF0ZTw+CisgICAgc2l6ZV90CisgICAgY29sbGF0ZTxjaGFyPjo6
X01fdHJhbnNmb3JtKGNoYXIqIF9fdG8sIGNvbnN0IGNoYXIqIF9fZnJvbSwKKwkJCQlzaXplX3Qg
X19uKSBjb25zdCB0aHJvdygpCisgICAgeyByZXR1cm4gc3RyeGZybV9sKF9fdG8sIF9fZnJvbSwg
X19uLCBfTV9jX2xvY2FsZV9jb2xsYXRlKTsgfQorCisjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFS
X1QKKyAgdGVtcGxhdGU8PgorICAgIGludAorICAgIGNvbGxhdGU8d2NoYXJfdD46Ol9NX2NvbXBh
cmUoY29uc3Qgd2NoYXJfdCogX19vbmUsCisJCQkJIGNvbnN0IHdjaGFyX3QqIF9fdHdvKSBjb25z
dCB0aHJvdygpCisgICAgeworICAgICAgaW50IF9fY21wID0gd2NzY29sbF9sKF9fb25lLCBfX3R3
bywgX01fY19sb2NhbGVfY29sbGF0ZSk7CisgICAgICByZXR1cm4gKF9fY21wID4+ICg4ICogc2l6
ZW9mIChpbnQpIC0gMikpIHwgKF9fY21wICE9IDApOworICAgIH0KKworICB0ZW1wbGF0ZTw+Cisg
ICAgc2l6ZV90CisgICAgY29sbGF0ZTx3Y2hhcl90Pjo6X01fdHJhbnNmb3JtKHdjaGFyX3QqIF9f
dG8sIGNvbnN0IHdjaGFyX3QqIF9fZnJvbSwKKwkJCQkgICBzaXplX3QgX19uKSBjb25zdCB0aHJv
dygpCisgICAgeyByZXR1cm4gd2NzeGZybV9sKF9fdG8sIF9fZnJvbSwgX19uLCBfTV9jX2xvY2Fs
ZV9jb2xsYXRlKTsgfQorI2VuZGlmCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgor
fSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL25l
d2xpYi9jdHlwZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvbmV3bGli
L2N0eXBlX21lbWJlcnMuY2MKaW5kZXggZWU3ZTdhNzllZmUuLjBlMGVmZTQ3Y2MxIDEwMDY0NAot
LS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9uZXdsaWIvY3R5cGVfbWVtYmVycy5jYwor
KysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9uZXdsaWIvY3R5cGVfbWVtYmVycy5jYwpA
QCAtNTgsMzcgKzU4LDM3IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAgICAg
c3dpdGNoIChfX20pCiAgICAgICB7CiAgICAgICBjYXNlIHNwYWNlOgotCV9fcmV0ID0gd2N0eXBl
KCJzcGFjZSIpOworCV9fcmV0ID0gd2N0eXBlX2woInNwYWNlIiwgX01fY19sb2NhbGVfY3R5cGUp
OwogCWJyZWFrOwogICAgICAgY2FzZSBwcmludDoKLQlfX3JldCA9IHdjdHlwZSgicHJpbnQiKTsK
KwlfX3JldCA9IHdjdHlwZV9sKCJwcmludCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKIAlicmVhazsK
ICAgICAgIGNhc2UgY250cmw6Ci0JX19yZXQgPSB3Y3R5cGUoImNudHJsIik7CisJX19yZXQgPSB3
Y3R5cGVfbCgiY250cmwiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CiAJYnJlYWs7CiAgICAgICBjYXNl
IHVwcGVyOgotCV9fcmV0ID0gd2N0eXBlKCJ1cHBlciIpOworCV9fcmV0ID0gd2N0eXBlX2woInVw
cGVyIiwgX01fY19sb2NhbGVfY3R5cGUpOwogCWJyZWFrOwogICAgICAgY2FzZSBsb3dlcjoKLQlf
X3JldCA9IHdjdHlwZSgibG93ZXIiKTsKKwlfX3JldCA9IHdjdHlwZV9sKCJsb3dlciIsIF9NX2Nf
bG9jYWxlX2N0eXBlKTsKIAlicmVhazsKICAgICAgIGNhc2UgYWxwaGE6Ci0JX19yZXQgPSB3Y3R5
cGUoImFscGhhIik7CisJX19yZXQgPSB3Y3R5cGVfbCgiYWxwaGEiLCBfTV9jX2xvY2FsZV9jdHlw
ZSk7CiAJYnJlYWs7CiAgICAgICBjYXNlIGRpZ2l0OgotCV9fcmV0ID0gd2N0eXBlKCJkaWdpdCIp
OworCV9fcmV0ID0gd2N0eXBlX2woImRpZ2l0IiwgX01fY19sb2NhbGVfY3R5cGUpOwogCWJyZWFr
OwogICAgICAgY2FzZSBwdW5jdDoKLQlfX3JldCA9IHdjdHlwZSgicHVuY3QiKTsKKwlfX3JldCA9
IHdjdHlwZV9sKCJwdW5jdCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKIAlicmVhazsKICAgICAgIGNh
c2UgeGRpZ2l0OgotCV9fcmV0ID0gd2N0eXBlKCJ4ZGlnaXQiKTsKKwlfX3JldCA9IHdjdHlwZV9s
KCJ4ZGlnaXQiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CiAJYnJlYWs7CiAgICAgICBjYXNlIGFsbnVt
OgotCV9fcmV0ID0gd2N0eXBlKCJhbG51bSIpOworCV9fcmV0ID0gd2N0eXBlX2woImFsbnVtIiwg
X01fY19sb2NhbGVfY3R5cGUpOwogCWJyZWFrOwogICAgICAgY2FzZSBncmFwaDoKLQlfX3JldCA9
IHdjdHlwZSgiZ3JhcGgiKTsKKwlfX3JldCA9IHdjdHlwZV9sKCJncmFwaCIsIF9NX2NfbG9jYWxl
X2N0eXBlKTsKIAlicmVhazsKICAgICAgIGRlZmF1bHQ6CiAJLy8gRGlmZmVyZW50IGZyb20gdGhl
IGdlbmVyaWMgdmVyc2lvbiwgeGRpZ2l0IGFuZCBwcmludCBpbgpAQCAtMTAwLDI1ICsxMDAsMjUg
QEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KIAkvLyBlcXVhbCB0byBfWCBvciBf
QiwgdGhlIHR3byBjYXNlcyBhcmUgc3BlY2lmaWNhbGx5IGhhbmRsZWQKIAkvLyBoZXJlLgogCWlm
IChfX20gJiB4ZGlnaXQpCi0JICBfX3JldCA9IHdjdHlwZSgieGRpZ2l0Iik7CisJICBfX3JldCA9
IHdjdHlwZV9sKCJ4ZGlnaXQiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CiAJZWxzZSBpZiAoX19tICYg
cHJpbnQpCi0JICBfX3JldCA9IHdjdHlwZSgicHJpbnQiKTsKKwkgIF9fcmV0ID0gd2N0eXBlX2wo
InByaW50IiwgX01fY19sb2NhbGVfY3R5cGUpOwogCWVsc2UKIAkgIF9fcmV0ID0gX193bWFza190
eXBlKCk7CiAgICAgICB9CiAgICAgcmV0dXJuIF9fcmV0OwotICB9OworICB9CiAKICAgd2NoYXJf
dAogICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG91cHBlcih3Y2hhcl90IF9fYykgY29uc3QKLSAgeyBy
ZXR1cm4gdG93dXBwZXIoX19jKTsgfQorICB7IHJldHVybiB0b3d1cHBlcl9sKF9fYywgX01fY19s
b2NhbGVfY3R5cGUpOyB9CiAKICAgY29uc3Qgd2NoYXJfdCoKICAgY3R5cGU8d2NoYXJfdD46OmRv
X3RvdXBwZXIod2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSkgY29uc3QKICAgewog
ICAgIHdoaWxlIChfX2xvIDwgX19oaSkKICAgICAgIHsKLSAgICAgICAgKl9fbG8gPSB0b3d1cHBl
cigqX19sbyk7CisJKl9fbG8gPSB0b3d1cHBlcl9sKCpfX2xvLCBfTV9jX2xvY2FsZV9jdHlwZSk7
CiAgICAgICAgICsrX19sbzsKICAgICAgIH0KICAgICByZXR1cm4gX19oaTsKQEAgLTEyNiwxNCAr
MTI2LDE0IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAKICAgd2NoYXJfdAog
ICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG9sb3dlcih3Y2hhcl90IF9fYykgY29uc3QKLSAgeyByZXR1
cm4gdG93bG93ZXIoX19jKTsgfQorICB7IHJldHVybiB0b3dsb3dlcl9sKF9fYywgX01fY19sb2Nh
bGVfY3R5cGUpOyB9CiAKICAgY29uc3Qgd2NoYXJfdCoKICAgY3R5cGU8d2NoYXJfdD46OmRvX3Rv
bG93ZXIod2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSkgY29uc3QKICAgewogICAg
IHdoaWxlIChfX2xvIDwgX19oaSkKICAgICAgIHsKLSAgICAgICAgKl9fbG8gPSB0b3dsb3dlcigq
X19sbyk7CisJKl9fbG8gPSB0b3dsb3dlcl9sKCpfX2xvLCBfTV9jX2xvY2FsZV9jdHlwZSk7CiAg
ICAgICAgICsrX19sbzsKICAgICAgIH0KICAgICByZXR1cm4gX19oaTsKQEAgLTE0NCwxMSArMTQ0
LDEwIEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAgIGRvX2lzKG1hc2sgX19t
LCB3Y2hhcl90IF9fYykgY29uc3QKICAgewogICAgIGJvb2wgX19yZXQgPSBmYWxzZTsKLSAgICAv
LyBOZXdsaWIgQyBsaWJyYXJ5IGhhcyBhIGNvbXBhY3QgZW5jb2RpbmcgdGhhdCB1c2VzIDggYml0
cyBvbmx5LgogICAgIGNvbnN0IHNpemVfdCBfX2JpdG1hc2tzaXplID0gNzsKICAgICBmb3IgKHNp
emVfdCBfX2JpdGN1ciA9IDA7IF9fYml0Y3VyIDw9IF9fYml0bWFza3NpemU7ICsrX19iaXRjdXIp
CiAgICAgICBpZiAoX19tICYgX01fYml0W19fYml0Y3VyXQotCSAgJiYgaXN3Y3R5cGUoX19jLCBf
TV93bWFza1tfX2JpdGN1cl0pKQorCSAgJiYgaXN3Y3R5cGVfbChfX2MsIF9NX3dtYXNrW19fYml0
Y3VyXSwgX01fY19sb2NhbGVfY3R5cGUpKQogCXsKIAkgIF9fcmV0ID0gdHJ1ZTsKIAkgIGJyZWFr
OwpAQCAtMTYyLDExICsxNjEsMTAgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04K
ICAgewogICAgIGZvciAoOyBfX2xvIDwgX19oaTsgKytfX3ZlYywgKytfX2xvKQogICAgICAgewot
CS8vIE5ld2xpYiBDIGxpYnJhcnkgaGFzIGEgY29tcGFjdCBlbmNvZGluZyB0aGF0IHVzZXMgOCBi
aXRzIG9ubHkuCiAJY29uc3Qgc2l6ZV90IF9fYml0bWFza3NpemUgPSA3OwogCW1hc2sgX19tID0g
MDsKIAlmb3IgKHNpemVfdCBfX2JpdGN1ciA9IDA7IF9fYml0Y3VyIDw9IF9fYml0bWFza3NpemU7
ICsrX19iaXRjdXIpCi0JICBpZiAoaXN3Y3R5cGUoKl9fbG8sIF9NX3dtYXNrW19fYml0Y3VyXSkp
CisJICBpZiAoaXN3Y3R5cGVfbCgqX19sbywgX01fd21hc2tbX19iaXRjdXJdLCBfTV9jX2xvY2Fs
ZV9jdHlwZSkpCiAJICAgIF9fbSB8PSBfTV9iaXRbX19iaXRjdXJdOwogCSpfX3ZlYyA9IF9fbTsK
ICAgICAgIH0KQEAgLTIxNSw3ICsyMTMsOSBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVS
U0lPTgogICB7CiAgICAgaWYgKF9fd2MgPj0gMCAmJiBfX3djIDwgMTI4ICYmIF9NX25hcnJvd19v
aykKICAgICAgIHJldHVybiBfTV9uYXJyb3dbX193Y107CisgICAgX19jX2xvY2FsZSBfX29sZCA9
IHVzZWxvY2FsZShfTV9jX2xvY2FsZV9jdHlwZSk7CiAgICAgY29uc3QgaW50IF9fYyA9IHdjdG9i
KF9fd2MpOworICAgIHVzZWxvY2FsZShfX29sZCk7CiAgICAgcmV0dXJuIChfX2MgPT0gRU9GID8g
X19kZmF1bHQgOiBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsKICAgfQogCkBAIC0yMjQsNiArMjI0
LDcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgZG9fbmFycm93KGNvbnN0
IHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGksIGNoYXIgX19kZmF1bHQsCiAJICAg
IGNoYXIqIF9fZGVzdCkgY29uc3QKICAgeworICAgIF9fY19sb2NhbGUgX19vbGQgPSB1c2Vsb2Nh
bGUoX01fY19sb2NhbGVfY3R5cGUpOwogICAgIGlmIChfTV9uYXJyb3dfb2spCiAgICAgICB3aGls
ZSAoX19sbyA8IF9faGkpCiAJewpAQCAtMjQ1LDEyICsyNDYsMTQgQEAgX0dMSUJDWFhfQkVHSU5f
TkFNRVNQQUNFX1ZFUlNJT04KIAkgICsrX19sbzsKIAkgICsrX19kZXN0OwogCX0KKyAgICB1c2Vs
b2NhbGUoX19vbGQpOwogICAgIHJldHVybiBfX2hpOwogICB9CiAKICAgdm9pZAogICBjdHlwZTx3
Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV9jdHlwZSgpIHRocm93KCkKICAgeworICAgIF9fY19sb2Nh
bGUgX19vbGQgPSB1c2Vsb2NhbGUoX01fY19sb2NhbGVfY3R5cGUpOwogICAgIHdpbnRfdCBfX2k7
CiAgICAgZm9yIChfX2kgPSAwOyBfX2kgPCAxMjg7ICsrX19pKQogICAgICAgewpAQCAtMjY0LDE1
ICsyNjcsMTYgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgICAgIF9NX25h
cnJvd19vayA9IHRydWU7CiAgICAgZWxzZQogICAgICAgX01fbmFycm93X29rID0gZmFsc2U7Ci0g
ICAgZm9yIChzaXplX3QgX19pID0gMDsKLQkgX19pIDwgc2l6ZW9mKF9NX3dpZGVuKSAvIHNpemVv
Zih3aW50X3QpOyArK19faSkKLSAgICAgIF9NX3dpZGVuW19faV0gPSBidG93YyhfX2kpOworICAg
IGZvciAoc2l6ZV90IF9faiA9IDA7CisJIF9faiA8IHNpemVvZihfTV93aWRlbikgLyBzaXplb2Yo
d2ludF90KTsgKytfX2opCisgICAgICBfTV93aWRlbltfX2pdID0gYnRvd2MoX19qKTsKIAotICAg
IGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8PSA3OyArK19faSkKKyAgICBmb3IgKHNpemVfdCBf
X2sgPSAwOyBfX2sgPD0gNzsgKytfX2spCiAgICAgICB7Ci0JX01fYml0W19faV0gPSBzdGF0aWNf
Y2FzdDxtYXNrPigxIDw8IF9faSk7Ci0JX01fd21hc2tbX19pXSA9IF9NX2NvbnZlcnRfdG9fd21h
c2soX01fYml0W19faV0pOworCV9NX2JpdFtfX2tdID0gc3RhdGljX2Nhc3Q8bWFzaz4oMSA8PCBf
X2spOworCV9NX3dtYXNrW19fa10gPSBfTV9jb252ZXJ0X3RvX3dtYXNrKF9NX2JpdFtfX2tdKTsK
ICAgICAgIH0KKyAgICB1c2Vsb2NhbGUoX19vbGQpOwogICB9CiAjZW5kaWYgLy8gIF9HTElCQ1hY
X1VTRV9XQ0hBUl9UCiAKZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL25l
d2xpYi9tZXNzYWdlc19tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvbmV3
bGliL21lc3NhZ2VzX21lbWJlcnMuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLjQ2MzUzM2EyNmEyCi0tLSAvZGV2L251bGwKKysrIGIvbGlic3RkYysrLXYzL2NvbmZp
Zy9sb2NhbGUvbmV3bGliL21lc3NhZ2VzX21lbWJlcnMuY2MKQEAgLTAsMCArMSwxNzggQEAKKy8v
IHN0ZDo6bWVzc2FnZXMgaW1wbGVtZW50YXRpb24gZGV0YWlscywgbmV3bGliIHZlcnNpb24gLSot
IEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMjMgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysr
IExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUg
R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24p
CisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQor
Ly8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5k
ZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFs
CisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhj
ZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1
bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUg
dGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYg
bm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8KKy8vIElT
TyBDKysgMTQ4ODI6IDIyLjIuNy4xLjIgIG1lc3NhZ2VzIHZpcnR1YWwgZnVuY3Rpb25zCisvLwor
CisvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorLy8gTW9k
aWZpZWQgYnkgVGFrYXNoaSBZYW5vIDx0YWthc2hpLnlhbm9AbmlmdHkubmUuanA+CisKKyNpbmNs
dWRlIDxsb2NhbGU+CisjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKworI2lu
Y2x1ZGUgPGNzdGRsaWI+CS8vIHN0ZDo6ZnJlZQorI2luY2x1ZGUgPHN0cmluZy5oPgkvLyA6OnN0
cmR1cAorCituYW1lc3BhY2UKK3sKKyAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworICBjb25zdCBj
aGFyKgorICBnZXRfZ2xpYmNfbXNnKF9fY19sb2NhbGUgX19sb2NhbGVfbWVzc2FnZXMgX19hdHRy
aWJ1dGVfXygodW51c2VkKSksCisJCWNvbnN0IGNoYXIqIF9fbmFtZV9tZXNzYWdlcyBfX2F0dHJp
YnV0ZV9fKCh1bnVzZWQpKSwKKwkJY29uc3QgY2hhciogX19kb21haW5uYW1lLAorCQljb25zdCBj
aGFyKiBfX2RmYXVsdCkKKyAgeworICAgIGlmIChjaGFyKiBfX3NhdiA9IHN0cmR1cChzZXRsb2Nh
bGUoTENfQUxMLCAwKSkpCisgICAgICB7CisJc2V0bG9jYWxlKExDX0FMTCwgX19uYW1lX21lc3Nh
Z2VzKTsKKwljb25zdCBjaGFyKiBfX21zZyA9IGRnZXR0ZXh0KF9fZG9tYWlubmFtZSwgX19kZmF1
bHQpOworCXNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKwlmcmVlKF9fc2F2KTsKKwlyZXR1cm4g
X19tc2c7CisgICAgICB9CisgICAgcmV0dXJuIF9fZGZhdWx0OworICB9Cit9CisKK25hbWVzcGFj
ZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFN
RVNQQUNFX1ZFUlNJT04KKworICAvLyBTcGVjaWFsaXphdGlvbnMuCisgIHRlbXBsYXRlPD4KKyAg
ICB0eXBlbmFtZSBtZXNzYWdlczxjaGFyPjo6Y2F0YWxvZworICAgIG1lc3NhZ2VzPGNoYXI+Ojpk
b19vcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYgX19zLAorCQkJICAgIGNvbnN0IGxvY2Fs
ZSYgX19sKSBjb25zdAorICAgIHsKKyAgICAgIHR5cGVkZWYgY29kZWN2dDxjaGFyLCBjaGFyLCBt
YnN0YXRlX3Q+IF9fY29kZWN2dF90OworICAgICAgY29uc3QgX19jb2RlY3Z0X3QmIF9fY29kZWN2
dCA9IHVzZV9mYWNldDxfX2NvZGVjdnRfdD4oX19sKTsKKworICAgICAgYmluZF90ZXh0ZG9tYWlu
X2NvZGVzZXQoX19zLmNfc3RyKCksCisJICBubF9sYW5naW5mb19sKENPREVTRVQsIF9fY29kZWN2
dC5fTV9jX2xvY2FsZV9jb2RlY3Z0KSk7CisgICAgICByZXR1cm4gZ2V0X2NhdGFsb2dzKCkuX01f
YWRkKF9fcy5jX3N0cigpLCBfX2wpOworICAgIH0KKworICB0ZW1wbGF0ZTw+CisgICAgdm9pZAor
ICAgIG1lc3NhZ2VzPGNoYXI+Ojpkb19jbG9zZShjYXRhbG9nIF9fYykgY29uc3QKKyAgICB7IGdl
dF9jYXRhbG9ncygpLl9NX2VyYXNlKF9fYyk7IH0KKworICB0ZW1wbGF0ZTw+CisgICAgc3RyaW5n
CisgICAgbWVzc2FnZXM8Y2hhcj46OmRvX2dldChjYXRhbG9nIF9fYywgaW50LCBpbnQsCisJCQkg
ICBjb25zdCBzdHJpbmcmIF9fZGZhdWx0KSBjb25zdAorICAgIHsKKyAgICAgIGlmIChfX2MgPCAw
IHx8IF9fZGZhdWx0LmVtcHR5KCkpCisJcmV0dXJuIF9fZGZhdWx0OworCisgICAgICBjb25zdCBD
YXRhbG9nX2luZm8qIF9fY2F0X2luZm8gPSBnZXRfY2F0YWxvZ3MoKS5fTV9nZXQoX19jKTsKKwor
ICAgICAgaWYgKCFfX2NhdF9pbmZvKQorCXJldHVybiBfX2RmYXVsdDsKKworICAgICAgcmV0dXJu
IGdldF9nbGliY19tc2coX01fY19sb2NhbGVfbWVzc2FnZXMsIF9NX25hbWVfbWVzc2FnZXMsCisJ
CQkgICBfX2NhdF9pbmZvLT5fTV9kb21haW4sCisJCQkgICBfX2RmYXVsdC5jX3N0cigpKTsKKyAg
ICB9CisKKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorICB0ZW1wbGF0ZTw+CisgICAgdHlw
ZW5hbWUgbWVzc2FnZXM8d2NoYXJfdD46OmNhdGFsb2cKKyAgICBtZXNzYWdlczx3Y2hhcl90Pjo6
ZG9fb3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywKKwkJCSAgICAgICBjb25zdCBs
b2NhbGUmIF9fbCkgY29uc3QKKyAgICB7CisgICAgICB0eXBlZGVmIGNvZGVjdnQ8d2NoYXJfdCwg
Y2hhciwgbWJzdGF0ZV90PiBfX2NvZGVjdnRfdDsKKyAgICAgIGNvbnN0IF9fY29kZWN2dF90JiBf
X2NvZGVjdnQgPSB1c2VfZmFjZXQ8X19jb2RlY3Z0X3Q+KF9fbCk7CisKKyAgICAgIGJpbmRfdGV4
dGRvbWFpbl9jb2Rlc2V0KF9fcy5jX3N0cigpLAorCSAgbmxfbGFuZ2luZm9fbChDT0RFU0VULCBf
X2NvZGVjdnQuX01fY19sb2NhbGVfY29kZWN2dCkpOworCisgICAgICByZXR1cm4gZ2V0X2NhdGFs
b2dzKCkuX01fYWRkKF9fcy5jX3N0cigpLCBfX2wpOworICAgIH0KKworICB0ZW1wbGF0ZTw+Cisg
ICAgdm9pZAorICAgIG1lc3NhZ2VzPHdjaGFyX3Q+Ojpkb19jbG9zZShjYXRhbG9nIF9fYykgY29u
c3QKKyAgICB7IGdldF9jYXRhbG9ncygpLl9NX2VyYXNlKF9fYyk7IH0KKworICB0ZW1wbGF0ZTw+
CisgICAgd3N0cmluZworICAgIG1lc3NhZ2VzPHdjaGFyX3Q+Ojpkb19nZXQoY2F0YWxvZyBfX2Ms
IGludCwgaW50LAorCQkJICAgICAgY29uc3Qgd3N0cmluZyYgX193ZGZhdWx0KSBjb25zdAorICAg
IHsKKyAgICAgIGlmIChfX2MgPCAwIHx8IF9fd2RmYXVsdC5lbXB0eSgpKQorCXJldHVybiBfX3dk
ZmF1bHQ7CisKKyAgICAgIGNvbnN0IENhdGFsb2dfaW5mbyogX19jYXRfaW5mbyA9IGdldF9jYXRh
bG9ncygpLl9NX2dldChfX2MpOworCisgICAgICBpZiAoIV9fY2F0X2luZm8pCisJcmV0dXJuIF9f
d2RmYXVsdDsKKworICAgICAgdHlwZWRlZiBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVf
dD4gX19jb2RlY3Z0X3Q7CisgICAgICBjb25zdCBfX2NvZGVjdnRfdCYgX19jb252ID0KKwl1c2Vf
ZmFjZXQ8X19jb2RlY3Z0X3Q+KF9fY2F0X2luZm8tPl9NX2xvY2FsZSk7CisKKyAgICAgIGNvbnN0
IGNoYXIqIF9fdHJhbnNsYXRpb247CisgICAgICBtYnN0YXRlX3QgX19zdGF0ZTsKKyAgICAgIF9f
YnVpbHRpbl9tZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKyAgICAgIHsK
Kwljb25zdCB3Y2hhcl90KiBfX3dkZmF1bHRfbmV4dDsKKwlzaXplX3QgX19tYl9zaXplID0gX193
ZGZhdWx0LnNpemUoKSAqIF9fY29udi5tYXhfbGVuZ3RoKCk7CisJY2hhciogX19kZmF1bHQgPQor
CSAgc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKGNoYXIpICogKF9f
bWJfc2l6ZSArIDEpKSk7CisJY2hhciogX19kZmF1bHRfbmV4dDsKKwlfX2NvbnYub3V0KF9fc3Rh
dGUsCisJCSAgIF9fd2RmYXVsdC5kYXRhKCksIF9fd2RmYXVsdC5kYXRhKCkgKyBfX3dkZmF1bHQu
c2l6ZSgpLAorCQkgICBfX3dkZmF1bHRfbmV4dCwKKwkJICAgX19kZmF1bHQsIF9fZGZhdWx0ICsg
X19tYl9zaXplLCBfX2RmYXVsdF9uZXh0KTsKKworCS8vIE1ha2Ugc3VyZSBzdHJpbmcgcGFzc2Vk
IHRvIGRnZXR0ZXh0IGlzIFwwIHRlcm1pbmF0ZWQuCisJKl9fZGZhdWx0X25leHQgPSAnXDAnOwor
CV9fdHJhbnNsYXRpb24gPSBnZXRfZ2xpYmNfbXNnKF9NX2NfbG9jYWxlX21lc3NhZ2VzLCBfTV9u
YW1lX21lc3NhZ2VzLAorCQkJCSAgICAgIF9fY2F0X2luZm8tPl9NX2RvbWFpbiwgX19kZmF1bHQp
OworCisJLy8gSWYgd2UgZW5kIHVwIGdldHRpbmcgZGVmYXVsdCB2YWx1ZSBiYWNrIHdlIGNhbiBz
aW1wbHkgcmV0dXJuIG9yaWdpbmFsCisJLy8gZGVmYXVsdCB2YWx1ZS4KKwlpZiAoX190cmFuc2xh
dGlvbiA9PSBfX2RmYXVsdCkKKwkgIHJldHVybiBfX3dkZmF1bHQ7CisgICAgICB9CisKKyAgICAg
IF9fYnVpbHRpbl9tZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKyAgICAg
IHNpemVfdCBfX3NpemUgPSBfX2J1aWx0aW5fc3RybGVuKF9fdHJhbnNsYXRpb24pOworICAgICAg
Y29uc3QgY2hhciogX190cmFuc2xhdGlvbl9uZXh0OworICAgICAgd2NoYXJfdCogX193dHJhbnNs
YXRpb24gPQorCXN0YXRpY19jYXN0PHdjaGFyX3QqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZih3
Y2hhcl90KSAqIChfX3NpemUgKyAxKSkpOworICAgICAgd2NoYXJfdCogX193dHJhbnNsYXRpb25f
bmV4dDsKKyAgICAgIF9fY29udi5pbihfX3N0YXRlLCBfX3RyYW5zbGF0aW9uLCBfX3RyYW5zbGF0
aW9uICsgX19zaXplLAorCQlfX3RyYW5zbGF0aW9uX25leHQsCisJCV9fd3RyYW5zbGF0aW9uLCBf
X3d0cmFuc2xhdGlvbiArIF9fc2l6ZSwKKwkJX193dHJhbnNsYXRpb25fbmV4dCk7CisgICAgICBy
ZXR1cm4gd3N0cmluZyhfX3d0cmFuc2xhdGlvbiwgX193dHJhbnNsYXRpb25fbmV4dCk7CisgICAg
fQorI2VuZGlmCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3Bh
Y2UKZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL25ld2xpYi9tZXNzYWdl
c19tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9uZXdsaWIvbWVzc2FnZXNf
bWVtYmVycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42NGI2NmQ5
YTdmYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL25ld2xp
Yi9tZXNzYWdlc19tZW1iZXJzLmgKQEAgLTAsMCArMSwxNDggQEAKKy8vIHN0ZDo6bWVzc2FnZXMg
aW1wbGVtZW50YXRpb24gZGV0YWlscywgbmV3bGliIHZlcnNpb24gLSotIEMrKyAtKi0KKworLy8g
Q29weXJpZ2h0IChDKSAyMDAxLTIwMjMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisv
LworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlz
IGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIg
dmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9m
IEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9u
cyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9u
CisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgor
CisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBF
eGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJ
TkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxo
dHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGJpdHMvbWVzc2FnZXNf
bWVtYmVycy5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQg
Ynkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIERvIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBk
aXJlY3RseS4gQGhlYWRlcm5hbWV7bG9jYWxlfQorICovCisKKy8vCisvLyBJU08gQysrIDE0ODgy
OiAyMi4yLjcuMS4yICBtZXNzYWdlcyBmdW5jdGlvbnMKKy8vCisKKy8vIFdyaXR0ZW4gYnkgQmVu
amFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisvLyBNb2RpZmllZCBieSBUYWthc2hpIFlh
bm8gPHRha2FzaGkueWFub0BuaWZ0eS5uZS5qcD4KKworI2luY2x1ZGUgPGxpYmludGwuaD4KKyNp
bmNsdWRlIDxjYXNzZXJ0PgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVm
YXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLy8gTm9uLXZp
cnR1YWwgbWVtYmVyIGZ1bmN0aW9ucy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAg
IG1lc3NhZ2VzPF9DaGFyVD46Om1lc3NhZ2VzKHNpemVfdCBfX3JlZnMpCisgICAgOiBmYWNldChf
X3JlZnMpLCBfTV9jX2xvY2FsZV9tZXNzYWdlcyhfU19nZXRfY19sb2NhbGUoKSksCisgICAgICBf
TV9uYW1lX21lc3NhZ2VzKF9TX2dldF9jX25hbWUoKSkKKyAgICB7IH0KKworICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQ+CisgICAgbWVzc2FnZXM8X0NoYXJUPjo6bWVzc2FnZXMoX19jX2xvY2Fs
ZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKKwkJCSAgICAgICBzaXplX3QgX19yZWZzKQorICAg
IDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfbWVzc2FnZXMoMCksIF9NX25hbWVfbWVzc2Fn
ZXMoMCkKKyAgICB7CisgICAgICBpZiAoX19idWlsdGluX3N0cmNtcChfX3MsIF9TX2dldF9jX25h
bWUoKSkgIT0gMCkKKwl7CisJICBjb25zdCBzaXplX3QgX19sZW4gPSBfX2J1aWx0aW5fc3RybGVu
KF9fcykgKyAxOworCSAgY2hhciogX190bXAgPSBuZXcgY2hhcltfX2xlbl07CisJICBfX2J1aWx0
aW5fbWVtY3B5KF9fdG1wLCBfX3MsIF9fbGVuKTsKKwkgIF9NX25hbWVfbWVzc2FnZXMgPSBfX3Rt
cDsKKwl9CisgICAgICBlbHNlCisJX01fbmFtZV9tZXNzYWdlcyA9IF9TX2dldF9jX25hbWUoKTsK
KworICAgICAgLy8gTGFzdCB0byBhdm9pZCBsZWFraW5nIG1lbW9yeSBpZiBuZXcgdGhyb3dzLgor
ICAgICAgX01fY19sb2NhbGVfbWVzc2FnZXMgPSBfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpOwor
ICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgdHlwZW5hbWUgbWVzc2Fn
ZXM8X0NoYXJUPjo6Y2F0YWxvZworICAgIG1lc3NhZ2VzPF9DaGFyVD46Om9wZW4oY29uc3QgYmFz
aWNfc3RyaW5nPGNoYXI+JiBfX3MsIGNvbnN0IGxvY2FsZSYgX19sb2MsCisJCQkgICBjb25zdCBj
aGFyKiBfX2RpcikgY29uc3QKKyAgICB7CisgICAgICBiaW5kdGV4dGRvbWFpbihfX3MuY19zdHIo
KSwgX19kaXIpOworICAgICAgcmV0dXJuIHRoaXMtPmRvX29wZW4oX19zLCBfX2xvYyk7CisgICAg
fQorCisgIC8vIFZpcnR1YWwgbWVtYmVyIGZ1bmN0aW9ucy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJUPgorICAgIG1lc3NhZ2VzPF9DaGFyVD46On5tZXNzYWdlcygpCisgICAgeworICAgICAg
aWYgKF9NX25hbWVfbWVzc2FnZXMgIT0gX1NfZ2V0X2NfbmFtZSgpKQorCWRlbGV0ZSBbXSBfTV9u
YW1lX21lc3NhZ2VzOworICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9tZXNz
YWdlcyk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICB0eXBlbmFt
ZSBtZXNzYWdlczxfQ2hhclQ+OjpjYXRhbG9nCisgICAgbWVzc2FnZXM8X0NoYXJUPjo6ZG9fb3Bl
bihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywKKwkJCSAgICAgIGNvbnN0IGxvY2FsZSYp
IGNvbnN0CisgICAgeworICAgICAgLy8gTm8gZXJyb3IgY2hlY2tpbmcgaXMgZG9uZSwgYXNzdW1l
IHRoZSBjYXRhbG9nIGV4aXN0cyBhbmQgY2FuCisgICAgICAvLyBiZSB1c2VkLgorICAgICAgdGV4
dGRvbWFpbihfX3MuY19zdHIoKSk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIHZvaWQKKyAgICBtZXNzYWdlczxfQ2hhclQ+Ojpkb19j
bG9zZShjYXRhbG9nKSBjb25zdAorICAgIHsgfQorCisgIC8vIG1lc3NhZ2VzX2J5bmFtZQorICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgbWVzc2FnZXNfYnluYW1lPF9DaGFyVD46Om1l
c3NhZ2VzX2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMpCisgICAgOiBtZXNz
YWdlczxfQ2hhclQ+KF9fcmVmcykKKyAgICB7CisgICAgICBhc3NlcnQodGhpcy0+X01fbmFtZV9t
ZXNzYWdlcyA9PSBsb2NhbGU6OmZhY2V0OjpfU19nZXRfY19uYW1lKCkpOworICAgICAgaWYgKF9f
YnVpbHRpbl9zdHJjbXAoX19zLCB0aGlzLT5fTV9uYW1lX21lc3NhZ2VzKSAhPSAwKQorCXsKKwkg
IGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fYnVpbHRpbl9zdHJsZW4oX19zKSArIDE7CisJICBjaGFy
KiBfX3RtcCA9IG5ldyBjaGFyW19fbGVuXTsKKwkgIF9fYnVpbHRpbl9tZW1jcHkoX190bXAsIF9f
cywgX19sZW4pOworCSAgdGhpcy0+X01fbmFtZV9tZXNzYWdlcyA9IF9fdG1wOworCX0KKworICAg
ICAgaWYgKF9fYnVpbHRpbl9zdHJjbXAoX19zLCAiQyIpICE9IDAKKwkgICYmIF9fYnVpbHRpbl9z
dHJjbXAoX19zLCAiUE9TSVgiKSAhPSAwKQorCXsKKwkgIHRoaXMtPl9TX2Rlc3Ryb3lfY19sb2Nh
bGUodGhpcy0+X01fY19sb2NhbGVfbWVzc2FnZXMpOworCSAgdGhpcy0+X1NfY3JlYXRlX2NfbG9j
YWxlKHRoaXMtPl9NX2NfbG9jYWxlX21lc3NhZ2VzLCBfX3MpOworCX0KKyAgICB9CisKKyAgIC8v
U3BlY2lhbGl6YXRpb25zLgorICB0ZW1wbGF0ZTw+CisgICAgdHlwZW5hbWUgbWVzc2FnZXM8Y2hh
cj46OmNhdGFsb2cKKyAgICBtZXNzYWdlczxjaGFyPjo6ZG9fb3Blbihjb25zdCBiYXNpY19zdHJp
bmc8Y2hhcj4mLAorCQkJICAgIGNvbnN0IGxvY2FsZSYpIGNvbnN0OworCisgIHRlbXBsYXRlPD4K
KyAgICB2b2lkCisgICAgbWVzc2FnZXM8Y2hhcj46OmRvX2Nsb3NlKGNhdGFsb2cpIGNvbnN0Owor
CisjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyAgdGVtcGxhdGU8PgorICAgIHR5cGVuYW1l
IG1lc3NhZ2VzPHdjaGFyX3Q+OjpjYXRhbG9nCisgICAgbWVzc2FnZXM8d2NoYXJfdD46OmRvX29w
ZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiwKKwkJCSAgICAgICBjb25zdCBsb2NhbGUmKSBj
b25zdDsKKworICB0ZW1wbGF0ZTw+CisgICAgdm9pZAorICAgIG1lc3NhZ2VzPHdjaGFyX3Q+Ojpk
b19jbG9zZShjYXRhbG9nKSBjb25zdDsKKyNlbmRpZgorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNF
X1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmln
L2xvY2FsZS9uZXdsaWIvbW9uZXRhcnlfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcv
bG9jYWxlL25ld2xpYi9tb25ldGFyeV9tZW1iZXJzLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi45YWNkMWEzOWYyNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnN0ZGMr
Ky12My9jb25maWcvbG9jYWxlL25ld2xpYi9tb25ldGFyeV9tZW1iZXJzLmNjCkBAIC0wLDAgKzEs
OTQyIEBACisvLyBzdGQ6Om1vbmV5cHVuY3QgaW1wbGVtZW50YXRpb24gZGV0YWlscywgbmV3bGli
IHZlcnNpb24gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMjMgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0
ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQg
eW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRl
ZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1l
IExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBv
ZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dy
YW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVj
dGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4K
KworLy8KKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNi4zLjIgIG1vbmV5cHVuY3QgdmlydHVhbCBm
dW5jdGlvbnMKKy8vCisKKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhh
dC5jb20+CisvLyBNb2RpZmllZCBieSBUYWthc2hpIFlhbm8gPHRha2FzaGkueWFub0BuaWZ0eS5u
ZS5qcD4KKworI2luY2x1ZGUgPGxvY2FsZT4KKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRl
cm5hbC5oPgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sK
K19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKy8vIFRoaXMgZmlsZSBtaWdodCBi
ZSBjb21waWxlZCB0d2ljZSwgYnV0IHdlIG9ubHkgd2FudCB0byBkZWZpbmUgdGhlIG1lbWJlcnMK
Ky8vIG9mIG1vbmV5X2Jhc2Ugb25jZS4KKyNpZiAhIF9HTElCQ1hYX1VTRV9DWFgxMV9BQkkKKwor
ICAvLyBDb25zdHJ1Y3QgYW5kIHJldHVybiB2YWxpZCBwYXR0ZXJuIGNvbnNpc3Rpbmcgb2Ygc29t
ZSBjb21iaW5hdGlvbiBvZjoKKyAgLy8gc3BhY2Ugbm9uZSBzeW1ib2wgc2lnbiB2YWx1ZQorICBt
b25leV9iYXNlOjpwYXR0ZXJuCisgIG1vbmV5X2Jhc2U6Ol9TX2NvbnN0cnVjdF9wYXR0ZXJuKGNo
YXIgX19wcmVjZWRlcywgY2hhciBfX3NwYWNlLAorCQkJCSAgIGNoYXIgX19wb3NuKSB0aHJvdygp
CisgIHsKKyAgICBwYXR0ZXJuIF9fcmV0OworCisgICAgLy8gVGhpcyBpbnNhbmVseSBjb21wbGlj
YXRlZCByb3V0aW5lIGF0dGVtcHRzIHRvIGNvbnN0cnVjdCBhIHZhbGlkCisgICAgLy8gcGF0dGVy
biBmb3IgdXNlIHdpdGggbW9ueWVwdW5jdC4gQSBjb3VwbGUgb2YgaW52YXJpYW50czoKKworICAg
IC8vIGlmIChfX3ByZWNlZGVzKSBzeW1ib2wgLT4gdmFsdWUKKyAgICAvLyBlbHNlIHZhbHVlIC0+
IHN5bWJvbAorCisgICAgLy8gaWYgKF9fc3BhY2UpIHNwYWNlCisgICAgLy8gZWxzZSBub25lCisK
KyAgICAvLyBub25lID09IG5ldmVyIGZpcnN0CisgICAgLy8gc3BhY2UgbmV2ZXIgZmlyc3Qgb3Ig
bGFzdAorCisgICAgLy8gQW55IGVsZWdhbnQgaW1wbGVtZW50YXRpb25zIG9mIHRoaXMgYXJlIHdl
bGNvbWUuCisgICAgc3dpdGNoIChfX3Bvc24pCisgICAgICB7CisgICAgICBjYXNlIDA6CisgICAg
ICBjYXNlIDE6CisJLy8gMSBUaGUgc2lnbiBwcmVjZWRlcyB0aGUgdmFsdWUgYW5kIHN5bWJvbC4K
KwlfX3JldC5maWVsZFswXSA9IHNpZ247CisJaWYgKF9fc3BhY2UpCisJICB7CisJICAgIC8vIFBh
dHRlcm4gc3RhcnRzIHdpdGggc2lnbi4KKwkgICAgaWYgKF9fcHJlY2VkZXMpCisJICAgICAgewor
CQlfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKKwkJX19yZXQuZmllbGRbM10gPSB2YWx1ZTsKKwkg
ICAgICB9CisJICAgIGVsc2UKKwkgICAgICB7CisJCV9fcmV0LmZpZWxkWzFdID0gdmFsdWU7CisJ
CV9fcmV0LmZpZWxkWzNdID0gc3ltYm9sOworCSAgICAgIH0KKwkgICAgX19yZXQuZmllbGRbMl0g
PSBzcGFjZTsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIC8vIFBhdHRlcm4gc3RhcnRzIHdpdGgg
c2lnbiBhbmQgZW5kcyB3aXRoIG5vbmUuCisJICAgIGlmIChfX3ByZWNlZGVzKQorCSAgICAgIHsK
KwkJX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7CisJCV9fcmV0LmZpZWxkWzJdID0gdmFsdWU7CisJ
ICAgICAgfQorCSAgICBlbHNlCisJICAgICAgeworCQlfX3JldC5maWVsZFsxXSA9IHZhbHVlOwor
CQlfX3JldC5maWVsZFsyXSA9IHN5bWJvbDsKKwkgICAgICB9CisJICAgIF9fcmV0LmZpZWxkWzNd
ID0gbm9uZTsKKwkgIH0KKwlicmVhazsKKyAgICAgIGNhc2UgMjoKKwkvLyAyIFRoZSBzaWduIGZv
bGxvd3MgdGhlIHZhbHVlIGFuZCBzeW1ib2wuCisJaWYgKF9fc3BhY2UpCisJICB7CisJICAgIC8v
IFBhdHRlcm4gZWl0aGVyIGVuZHMgd2l0aCBzaWduLgorCSAgICBpZiAoX19wcmVjZWRlcykKKwkg
ICAgICB7CisJCV9fcmV0LmZpZWxkWzBdID0gc3ltYm9sOworCQlfX3JldC5maWVsZFsyXSA9IHZh
bHVlOworCSAgICAgIH0KKwkgICAgZWxzZQorCSAgICAgIHsKKwkJX19yZXQuZmllbGRbMF0gPSB2
YWx1ZTsKKwkJX19yZXQuZmllbGRbMl0gPSBzeW1ib2w7CisJICAgICAgfQorCSAgICBfX3JldC5m
aWVsZFsxXSA9IHNwYWNlOworCSAgICBfX3JldC5maWVsZFszXSA9IHNpZ247CisJICB9CisJZWxz
ZQorCSAgeworCSAgICAvLyBQYXR0ZXJuIGVuZHMgd2l0aCBzaWduIHRoZW4gbm9uZS4KKwkgICAg
aWYgKF9fcHJlY2VkZXMpCisJICAgICAgeworCQlfX3JldC5maWVsZFswXSA9IHN5bWJvbDsKKwkJ
X19yZXQuZmllbGRbMV0gPSB2YWx1ZTsKKwkgICAgICB9CisJICAgIGVsc2UKKwkgICAgICB7CisJ
CV9fcmV0LmZpZWxkWzBdID0gdmFsdWU7CisJCV9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOworCSAg
ICAgIH0KKwkgICAgX19yZXQuZmllbGRbMl0gPSBzaWduOworCSAgICBfX3JldC5maWVsZFszXSA9
IG5vbmU7CisJICB9CisJYnJlYWs7CisgICAgICBjYXNlIDM6CisJLy8gMyBUaGUgc2lnbiBpbW1l
ZGlhdGVseSBwcmVjZWRlcyB0aGUgc3ltYm9sLgorCWlmIChfX3ByZWNlZGVzKQorCSAgeworCSAg
ICBfX3JldC5maWVsZFswXSA9IHNpZ247CisJICAgIF9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOwor
CSAgICBpZiAoX19zcGFjZSkKKwkgICAgICB7CisJCV9fcmV0LmZpZWxkWzJdID0gc3BhY2U7CisJ
CV9fcmV0LmZpZWxkWzNdID0gdmFsdWU7CisJICAgICAgfQorCSAgICBlbHNlCisJICAgICAgewor
CQlfX3JldC5maWVsZFsyXSA9IHZhbHVlOworCQlfX3JldC5maWVsZFszXSA9IG5vbmU7CisJICAg
ICAgfQorCSAgfQorCWVsc2UKKwkgIHsKKwkgICAgX19yZXQuZmllbGRbMF0gPSB2YWx1ZTsKKwkg
ICAgaWYgKF9fc3BhY2UpCisJICAgICAgeworCQlfX3JldC5maWVsZFsxXSA9IHNwYWNlOworCQlf
X3JldC5maWVsZFsyXSA9IHNpZ247CisJCV9fcmV0LmZpZWxkWzNdID0gc3ltYm9sOworCSAgICAg
IH0KKwkgICAgZWxzZQorCSAgICAgIHsKKwkJX19yZXQuZmllbGRbMV0gPSBzaWduOworCQlfX3Jl
dC5maWVsZFsyXSA9IHN5bWJvbDsKKwkJX19yZXQuZmllbGRbM10gPSBub25lOworCSAgICAgIH0K
KwkgIH0KKwlicmVhazsKKyAgICAgIGNhc2UgNDoKKwkvLyA0IFRoZSBzaWduIGltbWVkaWF0ZWx5
IGZvbGxvd3MgdGhlIHN5bWJvbC4KKwlpZiAoX19wcmVjZWRlcykKKwkgIHsKKwkgICAgX19yZXQu
ZmllbGRbMF0gPSBzeW1ib2w7CisJICAgIF9fcmV0LmZpZWxkWzFdID0gc2lnbjsKKwkgICAgaWYg
KF9fc3BhY2UpCisJICAgICAgeworCQlfX3JldC5maWVsZFsyXSA9IHNwYWNlOworCQlfX3JldC5m
aWVsZFszXSA9IHZhbHVlOworCSAgICAgIH0KKwkgICAgZWxzZQorCSAgICAgIHsKKwkJX19yZXQu
ZmllbGRbMl0gPSB2YWx1ZTsKKwkJX19yZXQuZmllbGRbM10gPSBub25lOworCSAgICAgIH0KKwkg
IH0KKwllbHNlCisJICB7CisJICAgIF9fcmV0LmZpZWxkWzBdID0gdmFsdWU7CisJICAgIGlmIChf
X3NwYWNlKQorCSAgICAgIHsKKwkJX19yZXQuZmllbGRbMV0gPSBzcGFjZTsKKwkJX19yZXQuZmll
bGRbMl0gPSBzeW1ib2w7CisJCV9fcmV0LmZpZWxkWzNdID0gc2lnbjsKKwkgICAgICB9CisJICAg
IGVsc2UKKwkgICAgICB7CisJCV9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOworCQlfX3JldC5maWVs
ZFsyXSA9IHNpZ247CisJCV9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKwkgICAgICB9CisJICB9CisJ
YnJlYWs7CisgICAgICBkZWZhdWx0OgorCV9fcmV0ID0gcGF0dGVybigpOworICAgICAgfQorICAg
IHJldHVybiBfX3JldDsKKyAgfQorI2VuZGlmCisKKyAgZXh0ZXJuIGNoYXIgX19uYXJyb3dfbXVs
dGlieXRlX2NoYXJzKGNvbnN0IGNoYXIqIHMsIGxvY2FsZV90IGNsb2MpOworCisgIHRlbXBsYXRl
PD4KKyAgICB2b2lkCisgICAgbW9uZXlwdW5jdDxjaGFyLCB0cnVlPjo6X01faW5pdGlhbGl6ZV9t
b25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLAorCQkJCQkJICAgICBjb25zdCBjaGFyKikKKyAg
ICB7CisgICAgICBpZiAoIV9NX2RhdGEpCisJX01fZGF0YSA9IG5ldyBfX21vbmV5cHVuY3RfY2Fj
aGU8Y2hhciwgdHJ1ZT47CisKKyAgICAgIGlmICghX19jbG9jKQorCXsKKwkgIC8vICJDIiBsb2Nh
bGUKKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAnLic7CisJICBfTV9kYXRhLT5fTV90
aG91c2FuZHNfc2VwID0gJywnOworCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKwkgIF9N
X2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworCSAgX01fZGF0YS0+X01fdXNlX2dyb3VwaW5n
ID0gZmFsc2U7CisJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9ICIiOworCSAgX01fZGF0YS0+
X01fY3Vycl9zeW1ib2xfc2l6ZSA9IDA7CisJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0g
IiI7CisJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOworCSAgX01fZGF0YS0+
X01fbmVnYXRpdmVfc2lnbiA9ICIiOworCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXpl
ID0gMDsKKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKKwkgIF9NX2RhdGEtPl9NX3Bv
c19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisJICBfTV9kYXRhLT5f
TV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworCisJICBmb3Ig
KHNpemVfdCBfX2kgPSAwOyBfX2kgPCBtb25leV9iYXNlOjpfU19lbmQ7ICsrX19pKQorCSAgICBf
TV9kYXRhLT5fTV9hdG9tc1tfX2ldID0gbW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXTsKKwl9Cisg
ICAgICBlbHNlCisJeworCSAgLy8gTmFtZWQgbG9jYWxlLgorCSAgX01fZGF0YS0+X01fZGVjaW1h
bF9wb2ludCA9CisJICAgICoobmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfTU9OX0RFQ0lNQUxf
UE9JTlQsIF9fY2xvYykpOworCSAgY29uc3QgY2hhciogdGhvdXNhbmRzX3NlcCA9CisJICAgIG5s
X2xhbmdpbmZvX2woX05MX01PTkVUQVJZX01PTl9USE9VU0FORFNfU0VQLCBfX2Nsb2MpOworCSAg
aWYgKHRob3VzYW5kc19zZXBbMF0gIT0gJ1wwJyAmJiB0aG91c2FuZHNfc2VwWzFdICE9ICdcMCcp
CisJICAgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX25hcnJvd19tdWx0aWJ5dGVfY2hh
cnModGhvdXNhbmRzX3NlcCwKKwkJCQkJCQkJIF9fY2xvYyk7CisJICBlbHNlCisJICAgIF9NX2Rh
dGEtPl9NX3Rob3VzYW5kc19zZXAgPSAqdGhvdXNhbmRzX3NlcDsKKworCSAgLy8gQ2hlY2sgZm9y
IE5VTEwsIHdoaWNoIGltcGxpZXMgbm8gZnJhY3Rpb25hbCBkaWdpdHMuCisJICBpZiAoX01fZGF0
YS0+X01fZGVjaW1hbF9wb2ludCA9PSAnXDAnKQorCSAgICB7CisJICAgICAgLy8gTGlrZSBpbiAi
QyIgbG9jYWxlLgorCSAgICAgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKKwkgICAgICBf
TV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gJy4nOworCSAgICB9CisJICBlbHNlCisJICAgIF9N
X2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0KKwkgICAgICAqKG5sX2xhbmdpbmZvX2woX05MX01PTkVU
QVJZX0lOVF9GUkFDX0RJR0lUUywgX19jbG9jKSk7CisKKwkgIGNvbnN0IGNoYXIqIF9fY2dyb3Vw
ID0KKwkgICAgbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfTU9OX0dST1VQSU5HLCBfX2Nsb2Mp
OworCSAgY29uc3QgY2hhciogX19jcG9zc2lnbiA9CisJICAgIG5sX2xhbmdpbmZvX2woX05MX01P
TkVUQVJZX1BPU0lUSVZFX1NJR04sIF9fY2xvYyk7CisJICBjb25zdCBjaGFyKiBfX2NuZWdzaWdu
ID0KKwkgICAgbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfTkVHQVRJVkVfU0lHTiwgX19jbG9j
KTsKKwkgIC8vIF9JbnRsID09IHRydWUKKwkgIGNvbnN0IGNoYXIqIF9fY2N1cnIgPQorCSAgICBu
bF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9JTlRfQ1VSUl9TWU1CT0wsIF9fY2xvYyk7CisKKwkg
IGNoYXIqIF9fZ3JvdXAgPSAwOworCSAgY2hhciogX19wcyA9IDA7CisJICBjaGFyKiBfX25zID0g
MDsKKwkgIGNvbnN0IGNoYXIgX19ucG9zbiA9IDA7CisJICAgIC8qICoobmxfbGFuZ2luZm9fbChf
TkxfTU9ORVRBUllfSU5UX05fU0lHTl9QT1NOLCBfX2Nsb2MpKTsgKi8KKwkgIF9fdHJ5CisJICAg
IHsKKwkgICAgICBzaXplX3QgX19sZW47CisKKwkgICAgICAvLyBDaGVjayBmb3IgTlVMTCwgd2hp
Y2ggaW1wbGllcyBubyBncm91cGluZy4KKwkgICAgICBpZiAoX01fZGF0YS0+X01fdGhvdXNhbmRz
X3NlcCA9PSAnXDAnKQorCQl7CisJCSAgLy8gTGlrZSBpbiAiQyIgbG9jYWxlLgorCQkgIF9NX2Rh
dGEtPl9NX2dyb3VwaW5nID0gIiI7CisJCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7
CisJCSAgX01fZGF0YS0+X01fdXNlX2dyb3VwaW5nID0gZmFsc2U7CisJCSAgX01fZGF0YS0+X01f
dGhvdXNhbmRzX3NlcCA9ICcsJzsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIF9fbGVuID0g
c3RybGVuKF9fY2dyb3VwKTsKKwkJICBpZiAoX19sZW4pCisJCSAgICB7CisJCSAgICAgIF9fZ3Jv
dXAgPSBuZXcgY2hhcltfX2xlbiArIDFdOworCQkgICAgICBtZW1jcHkoX19ncm91cCwgX19jZ3Jv
dXAsIF9fbGVuICsgMSk7CisJCSAgICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ncm91cDsK
KwkJICAgIH0KKwkJICBlbHNlCisJCSAgICB7CisJCSAgICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5n
ID0gIiI7CisJCSAgICAgIF9NX2RhdGEtPl9NX3VzZV9ncm91cGluZyA9IGZhbHNlOworCQkgICAg
fQorCQkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBfX2xlbjsKKwkJfQorCisJICAgICAg
X19sZW4gPSBzdHJsZW4oX19jcG9zc2lnbik7CisJICAgICAgaWYgKF9fbGVuKQorCQl7CisJCSAg
X19wcyA9IG5ldyBjaGFyW19fbGVuICsgMV07CisJCSAgbWVtY3B5KF9fcHMsIF9fY3Bvc3NpZ24s
IF9fbGVuICsgMSk7CisJCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fcHM7CisJCX0K
KwkgICAgICBlbHNlCisJCV9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSAiIjsKKwkgICAgICBf
TV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSBfX2xlbjsKKworCSAgICAgIGlmICghX19u
cG9zbikKKwkJeworCQkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiKCkiOworCQkgIF9N
X2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IDI7CisJCX0KKwkgICAgICBlbHNlCisJCXsK
KwkJICBfX2xlbiA9IHN0cmxlbihfX2NuZWdzaWduKTsKKwkJICBpZiAoX19sZW4pCisJCSAgICB7
CisJCSAgICAgIF9fbnMgPSBuZXcgY2hhcltfX2xlbiArIDFdOworCQkgICAgICBtZW1jcHkoX19u
cywgX19jbmVnc2lnbiwgX19sZW4gKyAxKTsKKwkJICAgICAgX01fZGF0YS0+X01fbmVnYXRpdmVf
c2lnbiA9IF9fbnM7CisJCSAgICB9CisJCSAgZWxzZQorCQkgICAgX01fZGF0YS0+X01fbmVnYXRp
dmVfc2lnbiA9ICIiOworCQkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IF9fbGVu
OworCQl9CisKKwkgICAgICBfX2xlbiA9IHN0cmxlbihfX2NjdXJyKTsKKwkgICAgICBpZiAoX19s
ZW4pCisJCXsKKwkJICBjaGFyKiBfX2N1cnIgPSBuZXcgY2hhcltfX2xlbiArIDFdOworCQkgIG1l
bWNweShfX2N1cnIsIF9fY2N1cnIsIF9fbGVuICsgMSk7CisJCSAgX01fZGF0YS0+X01fY3Vycl9z
eW1ib2wgPSBfX2N1cnI7CisJCX0KKwkgICAgICBlbHNlCisJCV9NX2RhdGEtPl9NX2N1cnJfc3lt
Ym9sID0gIiI7CisJICAgICAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IF9fbGVuOwor
CSAgICB9CisJICBfX2NhdGNoKC4uLikKKwkgICAgeworCSAgICAgIGRlbGV0ZSBfTV9kYXRhOwor
CSAgICAgIF9NX2RhdGEgPSAwOworCSAgICAgIGRlbGV0ZSBbXSBfX2dyb3VwOworCSAgICAgIGRl
bGV0ZSBbXSBfX3BzOworCSAgICAgIGRlbGV0ZSBbXSBfX25zOworCSAgICAgIF9fdGhyb3dfZXhj
ZXB0aW9uX2FnYWluOworCSAgICB9CisKKwkgIGNoYXIgX19wcHJlY2VkZXMgPQorCSAgICAqKG5s
X2xhbmdpbmZvX2woX05MX01PTkVUQVJZX0lOVF9QX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKwkg
IGNoYXIgX19wc3BhY2UgPQorCSAgICAqKG5sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX0lOVF9Q
X1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisJICBjaGFyIF9fcHBvc24gPQorCSAgICAqKG5sX2xh
bmdpbmZvX2woX05MX01PTkVUQVJZX0lOVF9QX1NJR05fUE9TTiwgX19jbG9jKSk7CisJICBfTV9k
YXRhLT5fTV9wb3NfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19wcHJlY2VkZXMsIF9f
cHNwYWNlLAorCQkJCQkJCV9fcHBvc24pOworCSAgY2hhciBfX25wcmVjZWRlcyA9CisJICAgICoo
bmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfSU5UX05fQ1NfUFJFQ0VERVMsIF9fY2xvYykpOwor
CSAgY2hhciBfX25zcGFjZSA9CisJICAgICoobmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfSU5U
X05fU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBf
U19jb25zdHJ1Y3RfcGF0dGVybihfX25wcmVjZWRlcywgX19uc3BhY2UsCisJCQkJCQkJX19ucG9z
bik7CisJfQorICAgIH0KKworICB0ZW1wbGF0ZTw+CisgICAgdm9pZAorICAgIG1vbmV5cHVuY3Q8
Y2hhciwgZmFsc2U+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2Ms
CisJCQkJCQkgICAgICBjb25zdCBjaGFyKikKKyAgICB7CisgICAgICBpZiAoIV9NX2RhdGEpCisJ
X01fZGF0YSA9IG5ldyBfX21vbmV5cHVuY3RfY2FjaGU8Y2hhciwgZmFsc2U+OworCisgICAgICBp
ZiAoIV9fY2xvYykKKwl7CisJICAvLyAiQyIgbG9jYWxlCisJICBfTV9kYXRhLT5fTV9kZWNpbWFs
X3BvaW50ID0gJy4nOworCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICcsJzsKKwkgIF9N
X2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0g
MDsKKwkgIF9NX2RhdGEtPl9NX3VzZV9ncm91cGluZyA9IGZhbHNlOworCSAgX01fZGF0YS0+X01f
Y3Vycl9zeW1ib2wgPSAiIjsKKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSAwOwor
CSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9ICIiOworCSAgX01fZGF0YS0+X01fcG9zaXRp
dmVfc2lnbl9zaXplID0gMDsKKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiIjsKKwkg
IF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IDA7CisJICBfTV9kYXRhLT5fTV9mcmFj
X2RpZ2l0cyA9IDA7CisJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1Nf
ZGVmYXVsdF9wYXR0ZXJuOworCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6
Ol9TX2RlZmF1bHRfcGF0dGVybjsKKworCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9u
ZXlfYmFzZTo6X1NfZW5kOyArK19faSkKKwkgICAgX01fZGF0YS0+X01fYXRvbXNbX19pXSA9IG1v
bmV5X2Jhc2U6Ol9TX2F0b21zW19faV07CisJfQorICAgICAgZWxzZQorCXsKKwkgIC8vIE5hbWVk
IGxvY2FsZS4KKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPQorCSAgICAqKG5sX2xhbmdp
bmZvX2woX05MX01PTkVUQVJZX01PTl9ERUNJTUFMX1BPSU5ULCBfX2Nsb2MpKTsKKwkgIF9NX2Rh
dGEtPl9NX3Rob3VzYW5kc19zZXAgPQorCSAgICAqKG5sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZ
X01PTl9USE9VU0FORFNfU0VQLCBfX2Nsb2MpKTsKKworCSAgLy8gQ2hlY2sgZm9yIE5VTEwsIHdo
aWNoIGltcGxpZXMgbm8gZnJhY3Rpb25hbCBkaWdpdHMuCisJICBpZiAoX01fZGF0YS0+X01fZGVj
aW1hbF9wb2ludCA9PSAnXDAnKQorCSAgICB7CisJICAgICAgLy8gTGlrZSBpbiAiQyIgbG9jYWxl
LgorCSAgICAgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKKwkgICAgICBfTV9kYXRhLT5f
TV9kZWNpbWFsX3BvaW50ID0gJy4nOworCSAgICB9CisJICBlbHNlCisJICAgIF9NX2RhdGEtPl9N
X2ZyYWNfZGlnaXRzID0KKwkgICAgICAqKG5sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX0ZSQUNf
RElHSVRTLCBfX2Nsb2MpKTsKKworCSAgY29uc3QgY2hhciogX19jZ3JvdXAgPQorCSAgICBubF9s
YW5naW5mb19sKF9OTF9NT05FVEFSWV9NT05fR1JPVVBJTkcsIF9fY2xvYyk7CisJICBjb25zdCBj
aGFyKiBfX2Nwb3NzaWduID0KKwkgICAgbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfUE9TSVRJ
VkVfU0lHTiwgX19jbG9jKTsKKwkgIGNvbnN0IGNoYXIqIF9fY25lZ3NpZ24gPQorCSAgICBubF9s
YW5naW5mb19sKF9OTF9NT05FVEFSWV9ORUdBVElWRV9TSUdOLCBfX2Nsb2MpOworCSAgLy8gX0lu
dGwgPT0gZmFsc2UKKwkgIGNvbnN0IGNoYXIqIF9fY2N1cnIgPQorCSAgICBubF9sYW5naW5mb19s
KF9OTF9NT05FVEFSWV9DVVJSRU5DWV9TWU1CT0wsIF9fY2xvYyk7CisKKwkgIGNoYXIqIF9fZ3Jv
dXAgPSAwOworCSAgY2hhciogX19wcyA9IDA7CisJICBjaGFyKiBfX25zID0gMDsKKwkgIGNvbnN0
IGNoYXIgX19ucG9zbiA9IDE7CisJICAgIC8qICoobmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllf
Tl9TSUdOX1BPU04sIF9fY2xvYykpOyAqLworCSAgX190cnkKKwkgICAgeworCSAgICAgIHNpemVf
dCBfX2xlbjsKKworCSAgICAgIC8vIENoZWNrIGZvciBOVUxMLCB3aGljaCBpbXBsaWVzIG5vIGdy
b3VwaW5nLgorCSAgICAgIGlmIChfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID09ICdcMCcpCisJ
CXsKKwkJICAvLyBMaWtlIGluICJDIiBsb2NhbGUuCisJCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcg
PSAiIjsKKwkJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKwkJICBfTV9kYXRhLT5f
TV91c2VfZ3JvdXBpbmcgPSBmYWxzZTsKKwkJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0g
JywnOworCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgX19sZW4gPSBzdHJsZW4oX19jZ3JvdXAp
OworCQkgIGlmIChfX2xlbikKKwkJICAgIHsKKwkJICAgICAgX19ncm91cCA9IG5ldyBjaGFyW19f
bGVuICsgMV07CisJCSAgICAgIG1lbWNweShfX2dyb3VwLCBfX2Nncm91cCwgX19sZW4gKyAxKTsK
KwkJICAgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX2dyb3VwOworCQkgICAgfQorCQkgIGVs
c2UKKwkJICAgIHsKKwkJICAgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKwkJICAgICAg
X01fZGF0YS0+X01fdXNlX2dyb3VwaW5nID0gZmFsc2U7CisJCSAgICB9CisJCSAgX01fZGF0YS0+
X01fZ3JvdXBpbmdfc2l6ZSA9IF9fbGVuOworCQl9CisKKwkgICAgICBfX2xlbiA9IHN0cmxlbihf
X2Nwb3NzaWduKTsKKwkgICAgICBpZiAoX19sZW4pCisJCXsKKwkJICBfX3BzID0gbmV3IGNoYXJb
X19sZW4gKyAxXTsKKwkJICBtZW1jcHkoX19wcywgX19jcG9zc2lnbiwgX19sZW4gKyAxKTsKKwkJ
ICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gX19wczsKKwkJfQorCSAgICAgIGVsc2UKKwkJ
X01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9ICIiOworCSAgICAgIF9NX2RhdGEtPl9NX3Bvc2l0
aXZlX3NpZ25fc2l6ZSA9IF9fbGVuOworCisJICAgICAgaWYgKCFfX25wb3NuKQorCQl7CisJCSAg
X01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9ICIoKSI7CisJCSAgX01fZGF0YS0+X01fbmVnYXRp
dmVfc2lnbl9zaXplID0gMjsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIF9fbGVuID0gc3Ry
bGVuKF9fY25lZ3NpZ24pOworCQkgIGlmIChfX2xlbikKKwkJICAgIHsKKwkJICAgICAgX19ucyA9
IG5ldyBjaGFyW19fbGVuICsgMV07CisJCSAgICAgIG1lbWNweShfX25zLCBfX2NuZWdzaWduLCBf
X2xlbiArIDEpOworCQkgICAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gX19uczsKKwkJ
ICAgIH0KKwkJICBlbHNlCisJCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gIiI7CisJ
CSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gX19sZW47CisJCX0KKworCSAgICAg
IF9fbGVuID0gc3RybGVuKF9fY2N1cnIpOworCSAgICAgIGlmIChfX2xlbikKKwkJeworCQkgIGNo
YXIqIF9fY3VyciA9IG5ldyBjaGFyW19fbGVuICsgMV07CisJCSAgbWVtY3B5KF9fY3VyciwgX19j
Y3VyciwgX19sZW4gKyAxKTsKKwkJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IF9fY3VycjsK
KwkJfQorCSAgICAgIGVsc2UKKwkJX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSAiIjsKKwkgICAg
ICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gX19sZW47CisJICAgIH0KKwkgIF9fY2F0
Y2goLi4uKQorCSAgICB7CisJICAgICAgZGVsZXRlIF9NX2RhdGE7CisJICAgICAgX01fZGF0YSA9
IDA7CisJICAgICAgZGVsZXRlIFtdIF9fZ3JvdXA7CisJICAgICAgZGVsZXRlIFtdIF9fcHM7CisJ
ICAgICAgZGVsZXRlIFtdIF9fbnM7CisJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJ
ICAgIH0KKworCSAgY2hhciBfX3BwcmVjZWRlcyA9CisJICAgICoobmxfbGFuZ2luZm9fbChfTkxf
TU9ORVRBUllfUF9DU19QUkVDRURFUywgX19jbG9jKSk7CisJICBjaGFyIF9fcHNwYWNlID0KKwkg
ICAgKihubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9QX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7
CisJICBjaGFyIF9fcHBvc24gPSAqKG5sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX1BfU0lHTl9Q
T1NOLCBfX2Nsb2MpKTsKKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3Rf
cGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsCisJCQkJCQkJX19wcG9zbik7CisJICBjaGFy
IF9fbnByZWNlZGVzID0KKwkgICAgKihubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9OX0NTX1BS
RUNFREVTLCBfX2Nsb2MpKTsKKwkgIGNoYXIgX19uc3BhY2UgPQorCSAgICAqKG5sX2xhbmdpbmZv
X2woX05MX01PTkVUQVJZX05fU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKwkgIF9NX2RhdGEtPl9N
X25lZ19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX25wcmVjZWRlcywgX19uc3BhY2Us
CisJCQkJCQkJX19ucG9zbik7CisJfQorICAgIH0KKworICB0ZW1wbGF0ZTw+CisgICAgbW9uZXlw
dW5jdDxjaGFyLCB0cnVlPjo6fm1vbmV5cHVuY3QoKQorICAgIHsKKyAgICAgIGlmIChfTV9kYXRh
LT5fTV9ncm91cGluZ19zaXplKQorCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9ncm91cGluZzsKKyAg
ICAgIGlmIChfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUpCisJZGVsZXRlIFtdIF9NX2Rh
dGEtPl9NX3Bvc2l0aXZlX3NpZ247CisgICAgICBpZiAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2ln
bl9zaXplCisJICAmJiBzdHJjbXAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiwgIigpIikgIT0g
MCkKKwlkZWxldGUgW10gX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbjsKKyAgICAgIGlmIChfTV9k
YXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplKQorCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9jdXJyX3N5
bWJvbDsKKyAgICAgIGRlbGV0ZSBfTV9kYXRhOworICAgIH0KKworICB0ZW1wbGF0ZTw+CisgICAg
bW9uZXlwdW5jdDxjaGFyLCBmYWxzZT46On5tb25leXB1bmN0KCkKKyAgICB7CisgICAgICBpZiAo
X01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSkKKwlkZWxldGUgW10gX01fZGF0YS0+X01fZ3JvdXBp
bmc7CisgICAgICBpZiAoX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplKQorCWRlbGV0ZSBb
XSBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduOworICAgICAgaWYgKF9NX2RhdGEtPl9NX25lZ2F0
aXZlX3NpZ25fc2l6ZQorCSAgJiYgc3RyY21wKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24sICIo
KSIpICE9IDApCisJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ247CisgICAgICBp
ZiAoX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSkKKwlkZWxldGUgW10gX01fZGF0YS0+X01f
Y3Vycl9zeW1ib2w7CisgICAgICBkZWxldGUgX01fZGF0YTsKKyAgICB9CisKKyNpZmRlZiBfR0xJ
QkNYWF9VU0VfV0NIQVJfVAorICB0ZW1wbGF0ZTw+CisgICAgdm9pZAorICAgIG1vbmV5cHVuY3Q8
d2NoYXJfdCwgdHJ1ZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xv
YywKKwkJCQkJCQljb25zdCBjaGFyKikKKyAgICB7CisgICAgICBpZiAoIV9NX2RhdGEpCisJX01f
ZGF0YSA9IG5ldyBfX21vbmV5cHVuY3RfY2FjaGU8d2NoYXJfdCwgdHJ1ZT47CisKKyAgICAgIGlm
ICghX19jbG9jKQorCXsKKwkgIC8vICJDIiBsb2NhbGUKKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxf
cG9pbnQgPSBMJy4nOworCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IEwnLCc7CisJICBf
TV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9
IDA7CisJICBfTV9kYXRhLT5fTV91c2VfZ3JvdXBpbmcgPSBmYWxzZTsKKwkgIF9NX2RhdGEtPl9N
X2N1cnJfc3ltYm9sID0gTCIiOworCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IDA7
CisJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOworCSAgX01fZGF0YS0+X01fcG9z
aXRpdmVfc2lnbl9zaXplID0gMDsKKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIiI7
CisJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOworCSAgX01fZGF0YS0+X01f
ZnJhY19kaWdpdHMgPSAwOworCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6
Ol9TX2RlZmF1bHRfcGF0dGVybjsKKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9i
YXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisKKwkgIC8vIFVzZSBjdHlwZTo6d2lkZW4gY29kZSB3
aXRob3V0IHRoZSBmYWNldC4uLgorCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlf
YmFzZTo6X1NfZW5kOyArK19faSkKKwkgICAgX01fZGF0YS0+X01fYXRvbXNbX19pXSA9CisJICAg
ICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4obW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXSk7CisJfQor
ICAgICAgZWxzZQorCXsKKwkgIC8vIE5hbWVkIGxvY2FsZS4KKwkgIF9fY19sb2NhbGUgX19vbGQg
PSB1c2Vsb2NhbGUoX19jbG9jKTsKKworCSAgdW5pb24geyBjaGFyICpfX3M7IHdjaGFyX3QgKl9f
dzsgfSBfX3U7CisJICBfX3UuX19zID0gbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfV01PTl9E
RUNJTUFMX1BPSU5ULCBfX2Nsb2MpOworCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICpf
X3UuX193OworCisJICBfX3UuX19zID0gbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfV01PTl9U
SE9VU0FORFNfU0VQLCBfX2Nsb2MpOworCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICpf
X3UuX193OworCisJICAvLyBDaGVjayBmb3IgTlVMTCwgd2hpY2ggaW1wbGllcyBubyBmcmFjdGlv
bmFsIGRpZ2l0cy4KKwkgIGlmIChfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID09IEwnXDAnKQor
CSAgICB7CisJICAgICAgLy8gTGlrZSBpbiAiQyIgbG9jYWxlLgorCSAgICAgIF9NX2RhdGEtPl9N
X2ZyYWNfZGlnaXRzID0gMDsKKwkgICAgICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gTCcu
JzsKKwkgICAgfQorCSAgZWxzZQorCSAgICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9CisJICAg
ICAgKihubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9JTlRfRlJBQ19ESUdJVFMsIF9fY2xvYykp
OworCisJICBjb25zdCBjaGFyKiBfX2Nncm91cCA9CisJICAgIG5sX2xhbmdpbmZvX2woX05MX01P
TkVUQVJZX01PTl9HUk9VUElORywgX19jbG9jKTsKKwkgIGNvbnN0IGNoYXIqIF9fY3Bvc3NpZ24g
PQorCSAgICBubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9QT1NJVElWRV9TSUdOLCBfX2Nsb2Mp
OworCSAgY29uc3QgY2hhciogX19jbmVnc2lnbiA9CisJICAgIG5sX2xhbmdpbmZvX2woX05MX01P
TkVUQVJZX05FR0FUSVZFX1NJR04sIF9fY2xvYyk7CisJICBjb25zdCBjaGFyKiBfX2NjdXJyID0K
KwkgICAgbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfSU5UX0NVUlJfU1lNQk9MLCBfX2Nsb2Mp
OworCisJICBjaGFyKiBfX2dyb3VwID0gMDsKKwkgIHdjaGFyX3QqIF9fd2NzX3BzID0gMDsKKwkg
IHdjaGFyX3QqIF9fd2NzX25zID0gMDsKKwkgIGNvbnN0IGNoYXIgX19ucG9zbiA9IDA7CisJICAg
IC8qICoobmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfSU5UX05fU0lHTl9QT1NOLCBfX2Nsb2Mp
KTsgKi8KKwkgIF9fdHJ5CisJICAgIHsKKwkgICAgICBzaXplX3QgX19sZW47CisKKwkgICAgICAv
LyBDaGVjayBmb3IgTlVMTCwgd2hpY2ggaW1wbGllcyBubyBncm91cGluZy4KKwkgICAgICBpZiAo
X01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9PSBMJ1wwJykKKwkJeworCQkgIC8vIExpa2UgaW4g
IkMiIGxvY2FsZS4KKwkJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworCQkgIF9NX2RhdGEt
Pl9NX2dyb3VwaW5nX3NpemUgPSAwOworCQkgIF9NX2RhdGEtPl9NX3VzZV9ncm91cGluZyA9IGZh
bHNlOworCQkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBMJywnOworCQl9CisJICAgICAg
ZWxzZQorCQl7CisJCSAgX19sZW4gPSBzdHJsZW4oX19jZ3JvdXApOworCQkgIGlmIChfX2xlbikK
KwkJICAgIHsKKwkJICAgICAgX19ncm91cCA9IG5ldyBjaGFyW19fbGVuICsgMV07CisJCSAgICAg
IG1lbWNweShfX2dyb3VwLCBfX2Nncm91cCwgX19sZW4gKyAxKTsKKwkJICAgICAgX01fZGF0YS0+
X01fZ3JvdXBpbmcgPSBfX2dyb3VwOworCQkgICAgfQorCQkgIGVsc2UKKwkJICAgIHsKKwkJICAg
ICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKwkJICAgICAgX01fZGF0YS0+X01fdXNlX2dy
b3VwaW5nID0gZmFsc2U7CisJCSAgICB9CisJCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9
IF9fbGVuOworCQl9CisKKwkgICAgICBtYnN0YXRlX3QgX19zdGF0ZTsKKwkgICAgICBfX2xlbiA9
IHN0cmxlbihfX2Nwb3NzaWduKTsKKwkgICAgICBpZiAoX19sZW4pCisJCXsKKwkJICBtZW1zZXQo
Jl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKwkJICBfX3djc19wcyA9IG5ldyB3Y2hh
cl90W19fbGVuICsgMV07CisJCSAgbWJzcnRvd2NzKF9fd2NzX3BzLCAmX19jcG9zc2lnbiwgX19s
ZW4gKyAxLCAmX19zdGF0ZSk7CisJCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fd2Nz
X3BzOworCQl9CisJICAgICAgZWxzZQorCQlfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIi
OworCSAgICAgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9CisJCXdjc2xlbihfTV9k
YXRhLT5fTV9wb3NpdGl2ZV9zaWduKTsKKworCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY25lZ3Np
Z24pOworCSAgICAgIGlmICghX19ucG9zbikKKwkJX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9
IEwiKCkiOworCSAgICAgIGVsc2UgaWYgKF9fbGVuKQorCQl7CisJCSAgbWVtc2V0KCZfX3N0YXRl
LCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisJCSAgX193Y3NfbnMgPSBuZXcgd2NoYXJfdFtfX2xl
biArIDFdOworCQkgIG1ic3J0b3djcyhfX3djc19ucywgJl9fY25lZ3NpZ24sIF9fbGVuICsgMSwg
Jl9fc3RhdGUpOworCQkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX3djc19uczsKKwkJ
fQorCSAgICAgIGVsc2UKKwkJX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsKKwkgICAg
ICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPQorCQl3Y3NsZW4oX01fZGF0YS0+X01f
bmVnYXRpdmVfc2lnbik7CisKKwkgICAgICAvLyBfSW50bCA9PSB0cnVlLgorCSAgICAgIF9fbGVu
ID0gc3RybGVuKF9fY2N1cnIpOworCSAgICAgIGlmIChfX2xlbikKKwkJeworCQkgIG1lbXNldCgm
X19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworCQkgIHdjaGFyX3QqIF9fd2NzID0gbmV3
IHdjaGFyX3RbX19sZW4gKyAxXTsKKwkJICBtYnNydG93Y3MoX193Y3MsICZfX2NjdXJyLCBfX2xl
biArIDEsICZfX3N0YXRlKTsKKwkJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IF9fd2NzOwor
CQl9CisJICAgICAgZWxzZQorCQlfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IEwiIjsKKwkgICAg
ICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX2N1cnJf
c3ltYm9sKTsKKwkgICAgfQorCSAgX19jYXRjaCguLi4pCisJICAgIHsKKwkgICAgICBkZWxldGUg
X01fZGF0YTsKKwkgICAgICBfTV9kYXRhID0gMDsKKwkgICAgICBkZWxldGUgW10gX19ncm91cDsK
KwkgICAgICBkZWxldGUgW10gX193Y3NfcHM7CisJICAgICAgZGVsZXRlIFtdIF9fd2NzX25zOwor
CSAgICAgIHVzZWxvY2FsZShfX29sZCk7CisJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47
CisJICAgIH0KKworCSAgY2hhciBfX3BwcmVjZWRlcyA9CisJICAgICoobmxfbGFuZ2luZm9fbChf
TkxfTU9ORVRBUllfSU5UX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworCSAgY2hhciBfX3BzcGFj
ZSA9CisJICAgICoobmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfSU5UX1BfU0VQX0JZX1NQQUNF
LCBfX2Nsb2MpKTsKKwkgIGNoYXIgX19wcG9zbiA9CisJICAgICoobmxfbGFuZ2luZm9fbChfTkxf
TU9ORVRBUllfSU5UX1BfU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKwkgIF9NX2RhdGEtPl9NX3Bvc19m
b3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsCisJCQkJ
CQkJX19wcG9zbik7CisJICBjaGFyIF9fbnByZWNlZGVzID0KKwkgICAgKihubF9sYW5naW5mb19s
KF9OTF9NT05FVEFSWV9JTlRfTl9DU19QUkVDRURFUywgX19jbG9jKSk7CisJICBjaGFyIF9fbnNw
YWNlID0KKwkgICAgKihubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9JTlRfTl9TRVBfQllfU1BB
Q0UsIF9fY2xvYykpOworCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9w
YXR0ZXJuKF9fbnByZWNlZGVzLCBfX25zcGFjZSwKKwkJCQkJCQlfX25wb3NuKTsKKworCSAgdXNl
bG9jYWxlKF9fb2xkKTsKKwl9CisgICAgfQorCisgIHRlbXBsYXRlPD4KKyAgdm9pZAorICBtb25l
eXB1bmN0PHdjaGFyX3QsIGZhbHNlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2Nh
bGUgX19jbG9jLAorCQkJCQkJICAgICAgIGNvbnN0IGNoYXIqKQorICB7CisgICAgaWYgKCFfTV9k
YXRhKQorICAgICAgX01fZGF0YSA9IG5ldyBfX21vbmV5cHVuY3RfY2FjaGU8d2NoYXJfdCwgZmFs
c2U+OworCisgICAgaWYgKCFfX2Nsb2MpCisJeworCSAgLy8gIkMiIGxvY2FsZQorCSAgX01fZGF0
YS0+X01fZGVjaW1hbF9wb2ludCA9IEwnLic7CisJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2Vw
ID0gTCcsJzsKKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisJICBfTV9kYXRhLT5fTV9n
cm91cGluZ19zaXplID0gMDsKKwkgIF9NX2RhdGEtPl9NX3VzZV9ncm91cGluZyA9IGZhbHNlOwor
CSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7CisJICBfTV9kYXRhLT5fTV9jdXJyX3N5
bWJvbF9zaXplID0gMDsKKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBMIiI7CisJICBf
TV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOworCSAgX01fZGF0YS0+X01fbmVnYXRp
dmVfc2lnbiA9IEwiIjsKKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IDA7CisJ
ICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9IDA7CisJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0
ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworCSAgX01fZGF0YS0+X01fbmVnX2Zv
cm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKworCSAgLy8gVXNlIGN0eXBl
Ojp3aWRlbiBjb2RlIHdpdGhvdXQgdGhlIGZhY2V0Li4uCisJICBmb3IgKHNpemVfdCBfX2kgPSAw
OyBfX2kgPCBtb25leV9iYXNlOjpfU19lbmQ7ICsrX19pKQorCSAgICBfTV9kYXRhLT5fTV9hdG9t
c1tfX2ldID0KKwkgICAgICBzdGF0aWNfY2FzdDx3Y2hhcl90Pihtb25leV9iYXNlOjpfU19hdG9t
c1tfX2ldKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgLy8gTmFtZWQgbG9jYWxlLgorCSAgX19j
X2xvY2FsZSBfX29sZCA9IHVzZWxvY2FsZShfX2Nsb2MpOworCisJICB1bmlvbiB7IGNoYXIgKl9f
czsgd2NoYXJfdCAqX193OyB9IF9fdTsKKwkgIF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9OTF9N
T05FVEFSWV9XTU9OX0RFQ0lNQUxfUE9JTlQsIF9fY2xvYyk7CisJICBfTV9kYXRhLT5fTV9kZWNp
bWFsX3BvaW50ID0gKl9fdS5fX3c7CisKKwkgIF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9OTF9N
T05FVEFSWV9XTU9OX1RIT1VTQU5EU19TRVAsIF9fY2xvYyk7CisJICBfTV9kYXRhLT5fTV90aG91
c2FuZHNfc2VwID0gKl9fdS5fX3c7CisKKwkgIC8vIENoZWNrIGZvciBOVUxMLCB3aGljaCBpbXBs
aWVzIG5vIGZyYWN0aW9uYWwgZGlnaXRzLgorCSAgaWYgKF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9p
bnQgPT0gTCdcMCcpCisJICAgIHsKKwkgICAgICAvLyBMaWtlIGluICJDIiBsb2NhbGUuCisJICAg
ICAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAwOworCSAgICAgIF9NX2RhdGEtPl9NX2RlY2lt
YWxfcG9pbnQgPSBMJy4nOworCSAgICB9CisJICBlbHNlCisJICAgIF9NX2RhdGEtPl9NX2ZyYWNf
ZGlnaXRzID0KKwkgICAgICAqKG5sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX0ZSQUNfRElHSVRT
LCBfX2Nsb2MpKTsKKworCSAgY29uc3QgY2hhciogX19jZ3JvdXAgPQorCSAgICBubF9sYW5naW5m
b19sKF9OTF9NT05FVEFSWV9NT05fR1JPVVBJTkcsIF9fY2xvYyk7CisJICBjb25zdCBjaGFyKiBf
X2Nwb3NzaWduID0KKwkgICAgbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfUE9TSVRJVkVfU0lH
TiwgX19jbG9jKTsKKwkgIGNvbnN0IGNoYXIqIF9fY25lZ3NpZ24gPQorCSAgICBubF9sYW5naW5m
b19sKF9OTF9NT05FVEFSWV9ORUdBVElWRV9TSUdOLCBfX2Nsb2MpOworCSAgY29uc3QgY2hhciog
X19jY3VyciA9CisJICAgIG5sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX0NVUlJFTkNZX1NZTUJP
TCwgX19jbG9jKTsKKworCSAgY2hhciogX19ncm91cCA9IDA7CisJICB3Y2hhcl90KiBfX3djc19w
cyA9IDA7CisJICB3Y2hhcl90KiBfX3djc19ucyA9IDA7CisJICBjb25zdCBjaGFyIF9fbnBvc24g
PSAxOworCSAgICAvKiAqKG5sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX05fU0lHTl9QT1NOLCBf
X2Nsb2MpKTsgKi8KKwkgIF9fdHJ5CisJICAgIHsKKwkgICAgICBzaXplX3QgX19sZW47CisKKwkg
ICAgICAvLyBDaGVjayBmb3IgTlVMTCwgd2hpY2ggaW1wbGllcyBubyBncm91cGluZy4KKwkgICAg
ICBpZiAoX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9PSBMJ1wwJykKKwkJeworCQkgIC8vIExp
a2UgaW4gIkMiIGxvY2FsZS4KKwkJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworCQkgIF9N
X2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworCQkgIF9NX2RhdGEtPl9NX3VzZV9ncm91cGlu
ZyA9IGZhbHNlOworCQkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBMJywnOworCQl9CisJ
ICAgICAgZWxzZQorCQl7CisJCSAgX19sZW4gPSBzdHJsZW4oX19jZ3JvdXApOworCQkgIGlmIChf
X2xlbikKKwkJICAgIHsKKwkJICAgICAgX19ncm91cCA9IG5ldyBjaGFyW19fbGVuICsgMV07CisJ
CSAgICAgIG1lbWNweShfX2dyb3VwLCBfX2Nncm91cCwgX19sZW4gKyAxKTsKKwkJICAgICAgX01f
ZGF0YS0+X01fZ3JvdXBpbmcgPSBfX2dyb3VwOworCQkgICAgfQorCQkgIGVsc2UKKwkJICAgIHsK
KwkJICAgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKwkJICAgICAgX01fZGF0YS0+X01f
dXNlX2dyb3VwaW5nID0gZmFsc2U7CisJCSAgICB9CisJCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdf
c2l6ZSA9IF9fbGVuOworCQl9CisKKwkgICAgICBtYnN0YXRlX3QgX19zdGF0ZTsKKwkgICAgICBf
X2xlbiA9IHN0cmxlbihfX2Nwb3NzaWduKTsKKwkgICAgICBpZiAoX19sZW4pCisJCXsKKwkJICBt
ZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKwkJICBfX3djc19wcyA9IG5l
dyB3Y2hhcl90W19fbGVuICsgMV07CisJCSAgbWJzcnRvd2NzKF9fd2NzX3BzLCAmX19jcG9zc2ln
biwgX19sZW4gKyAxLCAmX19zdGF0ZSk7CisJCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9
IF9fd2NzX3BzOworCQl9CisJICAgICAgZWxzZQorCQlfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWdu
ID0gTCIiOworCSAgICAgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9CisJCXdjc2xl
bihfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduKTsKKworCSAgICAgIF9fbGVuID0gc3RybGVuKF9f
Y25lZ3NpZ24pOworCSAgICAgIGlmICghX19ucG9zbikKKwkJX01fZGF0YS0+X01fbmVnYXRpdmVf
c2lnbiA9IEwiKCkiOworCSAgICAgIGVsc2UgaWYgKF9fbGVuKQorCQl7CisJCSAgbWVtc2V0KCZf
X3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisJCSAgX193Y3NfbnMgPSBuZXcgd2NoYXJf
dFtfX2xlbiArIDFdOworCQkgIG1ic3J0b3djcyhfX3djc19ucywgJl9fY25lZ3NpZ24sIF9fbGVu
ICsgMSwgJl9fc3RhdGUpOworCQkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX3djc19u
czsKKwkJfQorCSAgICAgIGVsc2UKKwkJX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsK
KwkgICAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPQorCQl3Y3NsZW4oX01fZGF0
YS0+X01fbmVnYXRpdmVfc2lnbik7CisKKwkgICAgICAvLyBfSW50bCA9PSB0cnVlLgorCSAgICAg
IF9fbGVuID0gc3RybGVuKF9fY2N1cnIpOworCSAgICAgIGlmIChfX2xlbikKKwkJeworCQkgIG1l
bXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworCQkgIHdjaGFyX3QqIF9fd2Nz
ID0gbmV3IHdjaGFyX3RbX19sZW4gKyAxXTsKKwkJICBtYnNydG93Y3MoX193Y3MsICZfX2NjdXJy
LCBfX2xlbiArIDEsICZfX3N0YXRlKTsKKwkJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IF9f
d2NzOworCQl9CisJICAgICAgZWxzZQorCQlfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IEwiIjsK
KwkgICAgICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9N
X2N1cnJfc3ltYm9sKTsKKwkgICAgfQorCSAgX19jYXRjaCguLi4pCisJICAgIHsKKwkgICAgICBk
ZWxldGUgX01fZGF0YTsKKwkgICAgICBfTV9kYXRhID0gMDsKKwkgICAgICBkZWxldGUgW10gX19n
cm91cDsKKwkgICAgICBkZWxldGUgW10gX193Y3NfcHM7CisJICAgICAgZGVsZXRlIFtdIF9fd2Nz
X25zOworCSAgICAgIHVzZWxvY2FsZShfX29sZCk7CisJICAgICAgX190aHJvd19leGNlcHRpb25f
YWdhaW47CisJICAgIH0KKworCSAgY2hhciBfX3BwcmVjZWRlcyA9CisJICAgICoobmxfbGFuZ2lu
Zm9fbChfTkxfTU9ORVRBUllfUF9DU19QUkVDRURFUywgX19jbG9jKSk7CisJICBjaGFyIF9fcHNw
YWNlID0KKwkgICAgKihubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9QX1NFUF9CWV9TUEFDRSwg
X19jbG9jKSk7CisJICBjaGFyIF9fcHBvc24gPQorCSAgICAqKG5sX2xhbmdpbmZvX2woX05MX01P
TkVUQVJZX1BfU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQg
PSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsCisJCQkJCQkJX19w
cG9zbik7CisJICBjaGFyIF9fbnByZWNlZGVzID0KKwkgICAgKihubF9sYW5naW5mb19sKF9OTF9N
T05FVEFSWV9OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKwkgIGNoYXIgX19uc3BhY2UgPQorCSAg
ICAqKG5sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX05fU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsK
KwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX25wcmVj
ZWRlcywgX19uc3BhY2UsCisJCQkJCQkJX19ucG9zbik7CisKKwkgIHVzZWxvY2FsZShfX29sZCk7
CisJfQorICAgIH0KKworICB0ZW1wbGF0ZTw+CisgICAgbW9uZXlwdW5jdDx3Y2hhcl90LCB0cnVl
Pjo6fm1vbmV5cHVuY3QoKQorICAgIHsKKyAgICAgIGlmIChfTV9kYXRhLT5fTV9ncm91cGluZ19z
aXplKQorCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9ncm91cGluZzsKKyAgICAgIGlmIChfTV9kYXRh
LT5fTV9wb3NpdGl2ZV9zaWduX3NpemUpCisJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX3Bvc2l0aXZl
X3NpZ247CisgICAgICBpZiAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplCisJICAmJiB3
Y3NjbXAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiwgTCIoKSIpICE9IDApCisJZGVsZXRlIFtd
IF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ247CisgICAgICBpZiAoX01fZGF0YS0+X01fY3Vycl9z
eW1ib2xfc2l6ZSkKKwlkZWxldGUgW10gX01fZGF0YS0+X01fY3Vycl9zeW1ib2w7CisgICAgICBk
ZWxldGUgX01fZGF0YTsKKyAgICB9CisKKyAgdGVtcGxhdGU8PgorICAgIG1vbmV5cHVuY3Q8d2No
YXJfdCwgZmFsc2U+Ojp+bW9uZXlwdW5jdCgpCisgICAgeworICAgICAgaWYgKF9NX2RhdGEtPl9N
X2dyb3VwaW5nX3NpemUpCisJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX2dyb3VwaW5nOworICAgICAg
aWYgKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSkKKwlkZWxldGUgW10gX01fZGF0YS0+
X01fcG9zaXRpdmVfc2lnbjsKKyAgICAgIGlmIChfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3Np
emUKKwkgICYmIHdjc2NtcChfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduLCBMIigpIikgIT0gMCkK
KwlkZWxldGUgW10gX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbjsKKyAgICAgIGlmIChfTV9kYXRh
LT5fTV9jdXJyX3N5bWJvbF9zaXplKQorCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9jdXJyX3N5bWJv
bDsKKyAgICAgIGRlbGV0ZSBfTV9kYXRhOworICAgIH0KKyNlbmRpZgorCitfR0xJQkNYWF9FTkRf
TkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9saWJzdGRjKyst
djMvY29uZmlnL2xvY2FsZS9uZXdsaWIvbnVtZXJpY19tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYz
L2NvbmZpZy9sb2NhbGUvbmV3bGliL251bWVyaWNfbWVtYmVycy5jYwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uY2JkM2MzYjlmNzMKLS0tIC9kZXYvbnVsbAorKysgYi9s
aWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9uZXdsaWIvbnVtZXJpY19tZW1iZXJzLmNjCkBAIC0w
LDAgKzEsMjczIEBACisvLyBzdGQ6Om51bXB1bmN0IGltcGxlbWVudGF0aW9uIGRldGFpbHMsIG5l
d2xpYiB2ZXJzaW9uIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMS0yMDIzIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQor
Ly8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3Ig
KGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8g
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdy
YW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVu
dGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNv
cHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBw
cm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJl
c3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2Vz
Lz4uCisKKy8vCisvLyBJU08gQysrIDE0ODgyOiAyMi4yLjMuMS4yICBudW1wdW5jdCB2aXJ0dWFs
IGZ1bmN0aW9ucworLy8KKworLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVk
aGF0LmNvbT4KKy8vIE1vZGlmaWVkIGJ5IFRha2FzaGkgWWFubyA8dGFrYXNoaS55YW5vQG5pZnR5
Lm5lLmpwPgorCisjaW5jbHVkZSA8bG9jYWxlPgorI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2lu
dGVybmFsLmg+CisjaW5jbHVkZSA8aWNvbnYuaD4KKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9W
SVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgor
CisgIGV4dGVybiBjaGFyIF9fbmFycm93X211bHRpYnl0ZV9jaGFycyhjb25zdCBjaGFyKiBzLCBs
b2NhbGVfdCBjbG9jKTsKKworLy8gVGhpcyBmaWxlIG1pZ2h0IGJlIGNvbXBpbGVkIHR3aWNlLCBi
dXQgd2Ugb25seSB3YW50IHRvIGRlZmluZSB0aGlzIG9uY2UuCisjaWYgISBfR0xJQkNYWF9VU0Vf
Q1hYMTFfQUJJCisgIGNoYXIKKyAgX19uYXJyb3dfbXVsdGlieXRlX2NoYXJzKGNvbnN0IGNoYXIq
IHMsIGxvY2FsZV90IGNsb2MpCisgIHsKKyAgICBjb25zdCBjaGFyKiBjb2Rlc2V0ID0gbmxfbGFu
Z2luZm9fbChDT0RFU0VULCBjbG9jKTsKKyAgICBpZiAoIXN0cmNtcChjb2Rlc2V0LCAiVVRGLTgi
KSkKKyAgICAgIHsKKwkvLyBvcHRpbWl6ZSBmb3Igc29tZSBrbm93biBjYXNlcworCWlmICghc3Ry
Y21wKHMsICJcdTIwMkYiKSkgLy8gTkFSUk9XIE5PLUJSRUFLIFNQQUNFCisJICByZXR1cm4gJyAn
OworCWlmICghc3RyY21wKHMsICJcdTIwMTkiKSkgLy8gUklHSFQgU0lOR0xFIFFVT1RBVElPTiBN
QVJLCisJICByZXR1cm4gJ1wnJzsKKwlpZiAoIXN0cmNtcChzLCAiXHUwNjZDIikpIC8vIEFSQUJJ
QyBUSE9VU0FORFMgU0VQQVJBVE9SCisJICByZXR1cm4gJ1wnJzsKKyAgICAgIH0KKworICAgIGlj
b252X3QgY2QgPSBpY29udl9vcGVuKCJBU0NJSS8vVFJBTlNMSVQiLCBjb2Rlc2V0KTsKKyAgICBp
ZiAoY2QgIT0gKGljb252X3QpLTEpCisgICAgICB7CisJY2hhciBjMTsKKwlzaXplX3QgaW5ieXRl
c2xlZnQgPSBzdHJsZW4ocyk7CisJc2l6ZV90IG91dGJ5dGVzbGVmdCA9IDE7CisJY2hhciogaW5i
dWYgPSBjb25zdF9jYXN0PGNoYXIqPihzKTsKKwljaGFyKiBvdXRidWYgPSAmYzE7CisJc2l6ZV90
IG4gPSBpY29udihjZCwgJmluYnVmLCAmaW5ieXRlc2xlZnQsICZvdXRidWYsICZvdXRieXRlc2xl
ZnQpOworCWljb252X2Nsb3NlKGNkKTsKKwlpZiAobiAhPSAoc2l6ZV90KS0xKQorCSAgeworCSAg
ICBjZCA9IGljb252X29wZW4oY29kZXNldCwgIkFTQ0lJIik7CisJICAgIGlmIChjZCAhPSAoaWNv
bnZfdCktMSkKKwkgICAgICB7CisJCWNoYXIgYzI7CisJCWluYnVmID0gJmMxOworCQlpbmJ5dGVz
bGVmdCA9IDE7CisJCW91dGJ1ZiA9ICZjMjsKKwkJb3V0Ynl0ZXNsZWZ0ID0gMTsKKwkJbiA9IGlj
b252KGNkLCAmaW5idWYsICZpbmJ5dGVzbGVmdCwgJm91dGJ1ZiwgJm91dGJ5dGVzbGVmdCk7CisJ
CWljb252X2Nsb3NlKGNkKTsKKwkJaWYgKG4gIT0gKHNpemVfdCktMSkKKwkJICByZXR1cm4gYzI7
CisJICAgICAgfQorCSAgfQorICAgICAgfQorICAgIHJldHVybiAnXDAnOworICB9CisjZW5kaWYK
KworICB0ZW1wbGF0ZTw+CisgICAgdm9pZAorICAgIG51bXB1bmN0PGNoYXI+OjpfTV9pbml0aWFs
aXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQorICAgIHsKKyAgICAgIGlmICghX01fZGF0
YSkKKwlfTV9kYXRhID0gbmV3IF9fbnVtcHVuY3RfY2FjaGU8Y2hhcj47CisKKyAgICAgIGlmICgh
X19jbG9jKQorCXsKKwkgIC8vICJDIiBsb2NhbGUKKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0g
IiI7CisJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKwkgIF9NX2RhdGEtPl9NX3Vz
ZV9ncm91cGluZyA9IGZhbHNlOworCisJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gJy4n
OworCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICcsJzsKKworCSAgZm9yIChzaXplX3Qg
X19pID0gMDsgX19pIDwgX19udW1fYmFzZTo6X1Nfb2VuZDsgKytfX2kpCisJICAgIF9NX2RhdGEt
Pl9NX2F0b21zX291dFtfX2ldID0gX19udW1fYmFzZTo6X1NfYXRvbXNfb3V0W19faV07CisKKwkg
IGZvciAoc2l6ZV90IF9faiA9IDA7IF9faiA8IF9fbnVtX2Jhc2U6Ol9TX2llbmQ7ICsrX19qKQor
CSAgICBfTV9kYXRhLT5fTV9hdG9tc19pbltfX2pdID0gX19udW1fYmFzZTo6X1NfYXRvbXNfaW5b
X19qXTsKKwl9CisgICAgICBlbHNlCisJeworCSAgLy8gTmFtZWQgbG9jYWxlLgorCSAgX19jX2xv
Y2FsZSBfX29sZCA9IHVzZWxvY2FsZShfX2Nsb2MpOworCSAgdW5pb24geyBjaGFyICpfX3M7IHdj
aGFyX3QgKl9fdzsgfSBfX3U7CisJICBfX3UuX19zID0gbmxfbGFuZ2luZm9fbChfTkxfTlVNRVJJ
Q19ERUNJTUFMX1BPSU5UX1dDLCBfX2Nsb2MpOworCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2lu
dCA9IHdjdG9iKCpfX3UuX193KTsKKworCSAgX191Ll9fcyA9IG5sX2xhbmdpbmZvX2woX05MX05V
TUVSSUNfVEhPVVNBTkRTX1NFUF9XQywgX19jbG9jKTsKKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5k
c19zZXAgPSB3Y3RvYigqX191Ll9fdyk7CisJICB1c2Vsb2NhbGUoX19vbGQpOworCisJICAvLyBD
aGVjayBmb3IgTlVMTCwgd2hpY2ggaW1wbGllcyBubyBncm91cGluZy4KKwkgIGlmIChfTV9kYXRh
LT5fTV90aG91c2FuZHNfc2VwID09ICdcMCcpCisJICAgIHsKKwkgICAgICAvLyBMaWtlIGluICJD
IiBsb2NhbGUuCisJICAgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKwkgICAgICBfTV9k
YXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKwkgICAgICBfTV9kYXRhLT5fTV91c2VfZ3JvdXBp
bmcgPSBmYWxzZTsKKwkgICAgICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gJywnOworCSAg
ICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBjb25zdCBjaGFyKiBfX3NyYyA9IG5sX2xhbmdp
bmZvX2woX05MX05VTUVSSUNfR1JPVVBJTkcsIF9fY2xvYyk7CisJICAgICAgY29uc3Qgc2l6ZV90
IF9fbGVuID0gc3RybGVuKF9fc3JjKTsKKwkgICAgICBpZiAoX19sZW4pCisJCXsKKwkJICBfX3Ry
eQorCQkgICAgeworCQkgICAgICBjaGFyKiBfX2RzdCA9IG5ldyBjaGFyW19fbGVuICsgMV07CisJ
CSAgICAgIG1lbWNweShfX2RzdCwgX19zcmMsIF9fbGVuICsgMSk7CisJCSAgICAgIF9NX2RhdGEt
Pl9NX2dyb3VwaW5nID0gX19kc3Q7CisJCSAgICB9CisJCSAgX19jYXRjaCguLi4pCisJCSAgICB7
CisJCSAgICAgIGRlbGV0ZSBfTV9kYXRhOworCQkgICAgICBfTV9kYXRhID0gMDsKKwkJICAgICAg
X190aHJvd19leGNlcHRpb25fYWdhaW47CisJCSAgICB9CisJCX0KKwkgICAgICBlbHNlCisJCXsK
KwkJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworCQkgIF9NX2RhdGEtPl9NX3VzZV9ncm91
cGluZyA9IGZhbHNlOworCQl9CisJICAgICAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IF9f
bGVuOworCSAgICB9CisJfQorCisgICAgICAvLyBOQjogVGhlcmUgaXMgbm8gd2F5IHRvIGV4dGFj
dCB0aGlzIGluZm8gZnJvbSBwb3NpeCBsb2NhbGVzLgorICAgICAgLy8gX01fdHJ1ZW5hbWUgPSBu
bF9sYW5naW5mb19sKFlFU1NUUiwgX19jbG9jKTsKKyAgICAgIF9NX2RhdGEtPl9NX3RydWVuYW1l
ID0gInRydWUiOworICAgICAgX01fZGF0YS0+X01fdHJ1ZW5hbWVfc2l6ZSA9IDQ7CisgICAgICAv
LyBfTV9mYWxzZW5hbWUgPSBubF9sYW5naW5mb19sKE5PU1RSLCBfX2Nsb2MpOworICAgICAgX01f
ZGF0YS0+X01fZmFsc2VuYW1lID0gImZhbHNlIjsKKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFt
ZV9zaXplID0gNTsKKyAgICB9CisKKyAgdGVtcGxhdGU8PgorICAgIG51bXB1bmN0PGNoYXI+Ojp+
bnVtcHVuY3QoKQorICAgIHsKKyAgICAgIGlmIChfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplKQor
CWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9ncm91cGluZzsKKyAgICAgIGRlbGV0ZSBfTV9kYXRhOwor
ICAgIH0KKworI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisgIHRlbXBsYXRlPD4KKyAgICB2
b2lkCisgICAgbnVtcHVuY3Q8d2NoYXJfdD46Ol9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xv
Y2FsZSBfX2Nsb2MpCisgICAgeworICAgICAgaWYgKCFfTV9kYXRhKQorCV9NX2RhdGEgPSBuZXcg
X19udW1wdW5jdF9jYWNoZTx3Y2hhcl90PjsKKworICAgICAgaWYgKCFfX2Nsb2MpCisJeworCSAg
Ly8gIkMiIGxvY2FsZQorCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKwkgIF9NX2RhdGEt
Pl9NX2dyb3VwaW5nX3NpemUgPSAwOworCSAgX01fZGF0YS0+X01fdXNlX2dyb3VwaW5nID0gZmFs
c2U7CisKKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBMJy4nOworCSAgX01fZGF0YS0+
X01fdGhvdXNhbmRzX3NlcCA9IEwnLCc7CisKKwkgIC8vIFVzZSBjdHlwZTo6d2lkZW4gY29kZSB3
aXRob3V0IHRoZSBmYWNldC4uLgorCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19udW1f
YmFzZTo6X1Nfb2VuZDsgKytfX2kpCisJICAgIF9NX2RhdGEtPl9NX2F0b21zX291dFtfX2ldID0K
KwkgICAgICBzdGF0aWNfY2FzdDx3Y2hhcl90PihfX251bV9iYXNlOjpfU19hdG9tc19vdXRbX19p
XSk7CisKKwkgIGZvciAoc2l6ZV90IF9faiA9IDA7IF9faiA8IF9fbnVtX2Jhc2U6Ol9TX2llbmQ7
ICsrX19qKQorCSAgICBfTV9kYXRhLT5fTV9hdG9tc19pbltfX2pdID0KKwkgICAgICBzdGF0aWNf
Y2FzdDx3Y2hhcl90PihfX251bV9iYXNlOjpfU19hdG9tc19pbltfX2pdKTsKKwl9CisgICAgICBl
bHNlCisJeworCSAgLy8gTmFtZWQgbG9jYWxlLgorCSAgLy8gTkI6IEluIHRoZSBHTlUgbW9kZWwg
d2NoYXJfdCBpcyBhbHdheXMgMzIgYml0IHdpZGUuCisJICB1bmlvbiB7IGNoYXIgKl9fczsgd2No
YXJfdCAqX193OyB9IF9fdTsKKwkgIF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9OTF9OVU1FUklD
X0RFQ0lNQUxfUE9JTlRfV0MsIF9fY2xvYyk7CisJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50
ID0gKl9fdS5fX3c7CisKKwkgIF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9OTF9OVU1FUklDX1RI
T1VTQU5EU19TRVBfV0MsIF9fY2xvYyk7CisJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0g
Kl9fdS5fX3c7CisKKwkgIC8vIENoZWNrIGZvciBOVUxMLCB3aGljaCBpbXBsaWVzIG5vIGdyb3Vw
aW5nLgorCSAgaWYgKF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPT0gTCdcMCcpCisJICAgIHsK
KwkgICAgICAvLyBMaWtlIGluICJDIiBsb2NhbGUuCisJICAgICAgX01fZGF0YS0+X01fZ3JvdXBp
bmcgPSAiIjsKKwkgICAgICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKwkgICAgICBf
TV9kYXRhLT5fTV91c2VfZ3JvdXBpbmcgPSBmYWxzZTsKKwkgICAgICBfTV9kYXRhLT5fTV90aG91
c2FuZHNfc2VwID0gTCcsJzsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgY29uc3Qg
Y2hhciogX19zcmMgPSBubF9sYW5naW5mb19sKF9OTF9OVU1FUklDX0dST1VQSU5HLCBfX2Nsb2Mp
OworCSAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHN0cmxlbihfX3NyYyk7CisJICAgICAgaWYg
KF9fbGVuKQorCQl7CisJCSAgX190cnkKKwkJICAgIHsKKwkJICAgICAgY2hhciogX19kc3QgPSBu
ZXcgY2hhcltfX2xlbiArIDFdOworCQkgICAgICBtZW1jcHkoX19kc3QsIF9fc3JjLCBfX2xlbiAr
IDEpOworCQkgICAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fZHN0OworCQkgICAgfQorCQkg
IF9fY2F0Y2goLi4uKQorCQkgICAgeworCQkgICAgICBkZWxldGUgX01fZGF0YTsKKwkJICAgICAg
X01fZGF0YSA9IDA7CisJCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCQkgICAgfQor
CQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKwkJ
ICBfTV9kYXRhLT5fTV91c2VfZ3JvdXBpbmcgPSBmYWxzZTsKKwkJfQorCSAgICAgIF9NX2RhdGEt
Pl9NX2dyb3VwaW5nX3NpemUgPSBfX2xlbjsKKwkgICAgfQorCX0KKworICAgICAgLy8gTkI6IFRo
ZXJlIGlzIG5vIHdheSB0byBleHRhY3QgdGhpcyBpbmZvIGZyb20gcG9zaXggbG9jYWxlcy4KKyAg
ICAgIC8vIF9NX3RydWVuYW1lID0gbmxfbGFuZ2luZm9fbChZRVNTVFIsIF9fY2xvYyk7CisgICAg
ICBfTV9kYXRhLT5fTV90cnVlbmFtZSA9IEwidHJ1ZSI7CisgICAgICBfTV9kYXRhLT5fTV90cnVl
bmFtZV9zaXplID0gNDsKKyAgICAgIC8vIF9NX2ZhbHNlbmFtZSA9IG5sX2xhbmdpbmZvX2woTk9T
VFIsIF9fY2xvYyk7CisgICAgICBfTV9kYXRhLT5fTV9mYWxzZW5hbWUgPSBMImZhbHNlIjsKKyAg
ICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZV9zaXplID0gNTsKKyAgICB9CisKKyAgdGVtcGxhdGU8
PgorICAgIG51bXB1bmN0PHdjaGFyX3Q+Ojp+bnVtcHVuY3QoKQorICAgIHsKKyAgICAgIGlmIChf
TV9kYXRhLT5fTV9ncm91cGluZ19zaXplKQorCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9ncm91cGlu
ZzsKKyAgICAgIGRlbGV0ZSBfTV9kYXRhOworICAgIH0KKyNlbmRpZgorCitfR0xJQkNYWF9FTkRf
TkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9saWJzdGRjKyst
djMvY29uZmlnL2xvY2FsZS9uZXdsaWIvdGltZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2Nv
bmZpZy9sb2NhbGUvbmV3bGliL3RpbWVfbWVtYmVycy5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uMTkwZWY0ODBlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzdGRj
KystdjMvY29uZmlnL2xvY2FsZS9uZXdsaWIvdGltZV9tZW1iZXJzLmNjCkBAIC0wLDAgKzEsMzgx
IEBACisvLyBzdGQ6OnRpbWVfZ2V0LCBzdGQ6OnRpbWVfcHV0IGltcGxlbWVudGF0aW9uLCBuZXds
aWIgdmVyc2lvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAyMyBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8v
IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChh
dCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFu
dGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRp
bWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5
IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJv
Z3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNw
ZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+
LgorCisvLworLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjEuMiAtIHRpbWVfZ2V0IHZpcnR1YWwg
ZnVuY3Rpb25zCisvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMy4yIC0gdGltZV9wdXQgdmlydHVh
bCBmdW5jdGlvbnMKKy8vCisKKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJl
ZGhhdC5jb20+CisvLyBNb2RpZmllZCBieSBUYWthc2hpIFlhbm8gPHRha2FzaGkueWFub0BuaWZ0
eS5uZS5qcD4KKworI2RlZmluZSBfR05VX1NPVVJDRSAxCisjaW5jbHVkZSA8bG9jYWxlPgorI2lu
Y2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisKK25hbWVzcGFjZSBzdGQgX0dMSUJD
WFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJ
T04KKworICB0ZW1wbGF0ZTw+CisgICAgdm9pZAorICAgIF9fdGltZXB1bmN0PGNoYXI+OjoKKyAg
ICBfTV9wdXQoY2hhciogX19zLCBzaXplX3QgX19tYXhsZW4sIGNvbnN0IGNoYXIqIF9fZm9ybWF0
LAorCSAgIGNvbnN0IHRtKiBfX3RtKSBjb25zdCB0aHJvdygpCisgICAgeworICAgICAgY29uc3Qg
c2l6ZV90IF9fbGVuID0gc3RyZnRpbWVfbChfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSwK
KwkJCQkJX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKyAgICAgIC8vIE1ha2Ugc3VyZSBfX3MgaXMg
bnVsbCB0ZXJtaW5hdGVkLgorICAgICAgaWYgKF9fbGVuID09IDApCisJX19zWzBdID0gJ1wwJzsK
KyAgICB9CisKKyAgdGVtcGxhdGU8PgorICAgIHZvaWQKKyAgICBfX3RpbWVwdW5jdDxjaGFyPjo6
X01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpCisgICAgeworICAgICAg
aWYgKCFfTV9kYXRhKQorCV9NX2RhdGEgPSBuZXcgX190aW1lcHVuY3RfY2FjaGU8Y2hhcj47CisK
KyAgICAgIGlmICghX19jbG9jKQorCXsKKwkgIC8vICJDIiBsb2NhbGUKKwkgIF9NX2NfbG9jYWxl
X3RpbWVwdW5jdCA9IF9TX2dldF9jX2xvY2FsZSgpOworCisJICBfTV9kYXRhLT5fTV9kYXRlX2Zv
cm1hdCA9ICIlbS8lZC8leSI7CisJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSAiJW0v
JWQvJXkiOworCSAgX01fZGF0YS0+X01fdGltZV9mb3JtYXQgPSAiJUg6JU06JVMiOworCSAgX01f
ZGF0YS0+X01fdGltZV9lcmFfZm9ybWF0ID0gIiVIOiVNOiVTIjsKKwkgIF9NX2RhdGEtPl9NX2Rh
dGVfdGltZV9mb3JtYXQgPSAiIjsKKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0
ID0gIiI7CisJICBfTV9kYXRhLT5fTV9hbSA9ICJBTSI7CisJICBfTV9kYXRhLT5fTV9wbSA9ICJQ
TSI7CisJICBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQgPSAiJUk6JU06JVMgJXAiOworCisJICAv
LyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgorCSAgX01fZGF0YS0+X01f
ZGF5MSA9ICJTdW5kYXkiOworCSAgX01fZGF0YS0+X01fZGF5MiA9ICJNb25kYXkiOworCSAgX01f
ZGF0YS0+X01fZGF5MyA9ICJUdWVzZGF5IjsKKwkgIF9NX2RhdGEtPl9NX2RheTQgPSAiV2VkbmVz
ZGF5IjsKKwkgIF9NX2RhdGEtPl9NX2RheTUgPSAiVGh1cnNkYXkiOworCSAgX01fZGF0YS0+X01f
ZGF5NiA9ICJGcmlkYXkiOworCSAgX01fZGF0YS0+X01fZGF5NyA9ICJTYXR1cmRheSI7CisKKwkg
IC8vIEFiYnJldmlhdGVkIGRheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW4uCisJICBf
TV9kYXRhLT5fTV9hZGF5MSA9ICJTdW4iOworCSAgX01fZGF0YS0+X01fYWRheTIgPSAiTW9uIjsK
KwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gIlR1ZSI7CisJICBfTV9kYXRhLT5fTV9hZGF5NCA9ICJX
ZWQiOworCSAgX01fZGF0YS0+X01fYWRheTUgPSAiVGh1IjsKKwkgIF9NX2RhdGEtPl9NX2FkYXk2
ID0gIkZyaSI7CisJICBfTV9kYXRhLT5fTV9hZGF5NyA9ICJTYXQiOworCisJICAvLyBNb250aCBu
YW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgorCSAgX01fZGF0YS0+X01fbW9udGgw
MSA9ICJKYW51YXJ5IjsKKwkgIF9NX2RhdGEtPl9NX21vbnRoMDIgPSAiRmVicnVhcnkiOworCSAg
X01fZGF0YS0+X01fbW9udGgwMyA9ICJNYXJjaCI7CisJICBfTV9kYXRhLT5fTV9tb250aDA0ID0g
IkFwcmlsIjsKKwkgIF9NX2RhdGEtPl9NX21vbnRoMDUgPSAiTWF5IjsKKwkgIF9NX2RhdGEtPl9N
X21vbnRoMDYgPSAiSnVuZSI7CisJICBfTV9kYXRhLT5fTV9tb250aDA3ID0gIkp1bHkiOworCSAg
X01fZGF0YS0+X01fbW9udGgwOCA9ICJBdWd1c3QiOworCSAgX01fZGF0YS0+X01fbW9udGgwOSA9
ICJTZXB0ZW1iZXIiOworCSAgX01fZGF0YS0+X01fbW9udGgxMCA9ICJPY3RvYmVyIjsKKwkgIF9N
X2RhdGEtPl9NX21vbnRoMTEgPSAiTm92ZW1iZXIiOworCSAgX01fZGF0YS0+X01fbW9udGgxMiA9
ICJEZWNlbWJlciI7CisKKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3
aXRoICJDIidzIEphbi4KKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAxID0gIkphbiI7CisJICBfTV9k
YXRhLT5fTV9hbW9udGgwMiA9ICJGZWIiOworCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSAiTWFy
IjsKKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA0ID0gIkFwciI7CisJICBfTV9kYXRhLT5fTV9hbW9u
dGgwNSA9ICJNYXkiOworCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSAiSnVuIjsKKwkgIF9NX2Rh
dGEtPl9NX2Ftb250aDA3ID0gIkp1bCI7CisJICBfTV9kYXRhLT5fTV9hbW9udGgwOCA9ICJBdWci
OworCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSAiU2VwIjsKKwkgIF9NX2RhdGEtPl9NX2Ftb250
aDEwID0gIk9jdCI7CisJICBfTV9kYXRhLT5fTV9hbW9udGgxMSA9ICJOb3YiOworCSAgX01fZGF0
YS0+X01fYW1vbnRoMTIgPSAiRGVjIjsKKwl9CisgICAgICBlbHNlCisJeworCSAgX01fY19sb2Nh
bGVfdGltZXB1bmN0ID0gX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKTsKKwkgIF9fY2xvYyA9IF9N
X2NfbG9jYWxlX3RpbWVwdW5jdDsKKworCSAgX01fZGF0YS0+X01fZGF0ZV9mb3JtYXQgPSBubF9s
YW5naW5mb19sKERfRk1ULCBfX2Nsb2MpOworCSAgX01fZGF0YS0+X01fZGF0ZV9lcmFfZm9ybWF0
ID0gbmxfbGFuZ2luZm9fbChFUkFfRF9GTVQsIF9fY2xvYyk7CisJICBfTV9kYXRhLT5fTV90aW1l
X2Zvcm1hdCA9IG5sX2xhbmdpbmZvX2woVF9GTVQsIF9fY2xvYyk7CisJICBfTV9kYXRhLT5fTV90
aW1lX2VyYV9mb3JtYXQgPSBubF9sYW5naW5mb19sKEVSQV9UX0ZNVCwgX19jbG9jKTsKKwkgIF9N
X2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSBubF9sYW5naW5mb19sKERfVF9GTVQsIF9fY2xv
Yyk7CisJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9IG5sX2xhbmdpbmZvX2wo
RVJBX0RfVF9GTVQsIF9fY2xvYyk7CisJICBfTV9kYXRhLT5fTV9hbSA9IG5sX2xhbmdpbmZvX2wo
QU1fU1RSLCBfX2Nsb2MpOworCSAgX01fZGF0YS0+X01fcG0gPSBubF9sYW5naW5mb19sKFBNX1NU
UiwgX19jbG9jKTsKKwkgIF9NX2RhdGEtPl9NX2FtX3BtX2Zvcm1hdCA9IG5sX2xhbmdpbmZvX2wo
VF9GTVRfQU1QTSwgX19jbG9jKTsKKworCSAgLy8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJD
IidzIFN1bmRheS4KKwkgIF9NX2RhdGEtPl9NX2RheTEgPSBubF9sYW5naW5mb19sKERBWV8xLCBf
X2Nsb2MpOworCSAgX01fZGF0YS0+X01fZGF5MiA9IG5sX2xhbmdpbmZvX2woREFZXzIsIF9fY2xv
Yyk7CisJICBfTV9kYXRhLT5fTV9kYXkzID0gbmxfbGFuZ2luZm9fbChEQVlfMywgX19jbG9jKTsK
KwkgIF9NX2RhdGEtPl9NX2RheTQgPSBubF9sYW5naW5mb19sKERBWV80LCBfX2Nsb2MpOworCSAg
X01fZGF0YS0+X01fZGF5NSA9IG5sX2xhbmdpbmZvX2woREFZXzUsIF9fY2xvYyk7CisJICBfTV9k
YXRhLT5fTV9kYXk2ID0gbmxfbGFuZ2luZm9fbChEQVlfNiwgX19jbG9jKTsKKwkgIF9NX2RhdGEt
Pl9NX2RheTcgPSBubF9sYW5naW5mb19sKERBWV83LCBfX2Nsb2MpOworCisJICAvLyBBYmJyZXZp
YXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuLgorCSAgX01fZGF0YS0+X01f
YWRheTEgPSBubF9sYW5naW5mb19sKEFCREFZXzEsIF9fY2xvYyk7CisJICBfTV9kYXRhLT5fTV9h
ZGF5MiA9IG5sX2xhbmdpbmZvX2woQUJEQVlfMiwgX19jbG9jKTsKKwkgIF9NX2RhdGEtPl9NX2Fk
YXkzID0gbmxfbGFuZ2luZm9fbChBQkRBWV8zLCBfX2Nsb2MpOworCSAgX01fZGF0YS0+X01fYWRh
eTQgPSBubF9sYW5naW5mb19sKEFCREFZXzQsIF9fY2xvYyk7CisJICBfTV9kYXRhLT5fTV9hZGF5
NSA9IG5sX2xhbmdpbmZvX2woQUJEQVlfNSwgX19jbG9jKTsKKwkgIF9NX2RhdGEtPl9NX2FkYXk2
ID0gbmxfbGFuZ2luZm9fbChBQkRBWV82LCBfX2Nsb2MpOworCSAgX01fZGF0YS0+X01fYWRheTcg
PSBubF9sYW5naW5mb19sKEFCREFZXzcsIF9fY2xvYyk7CisKKwkgIC8vIE1vbnRoIG5hbWVzLCBz
dGFydGluZyB3aXRoICJDIidzIEphbnVhcnkuCisJICBfTV9kYXRhLT5fTV9tb250aDAxID0gbmxf
bGFuZ2luZm9fbChNT05fMSwgX19jbG9jKTsKKwkgIF9NX2RhdGEtPl9NX21vbnRoMDIgPSBubF9s
YW5naW5mb19sKE1PTl8yLCBfX2Nsb2MpOworCSAgX01fZGF0YS0+X01fbW9udGgwMyA9IG5sX2xh
bmdpbmZvX2woTU9OXzMsIF9fY2xvYyk7CisJICBfTV9kYXRhLT5fTV9tb250aDA0ID0gbmxfbGFu
Z2luZm9fbChNT05fNCwgX19jbG9jKTsKKwkgIF9NX2RhdGEtPl9NX21vbnRoMDUgPSBubF9sYW5n
aW5mb19sKE1PTl81LCBfX2Nsb2MpOworCSAgX01fZGF0YS0+X01fbW9udGgwNiA9IG5sX2xhbmdp
bmZvX2woTU9OXzYsIF9fY2xvYyk7CisJICBfTV9kYXRhLT5fTV9tb250aDA3ID0gbmxfbGFuZ2lu
Zm9fbChNT05fNywgX19jbG9jKTsKKwkgIF9NX2RhdGEtPl9NX21vbnRoMDggPSBubF9sYW5naW5m
b19sKE1PTl84LCBfX2Nsb2MpOworCSAgX01fZGF0YS0+X01fbW9udGgwOSA9IG5sX2xhbmdpbmZv
X2woTU9OXzksIF9fY2xvYyk7CisJICBfTV9kYXRhLT5fTV9tb250aDEwID0gbmxfbGFuZ2luZm9f
bChNT05fMTAsIF9fY2xvYyk7CisJICBfTV9kYXRhLT5fTV9tb250aDExID0gbmxfbGFuZ2luZm9f
bChNT05fMTEsIF9fY2xvYyk7CisJICBfTV9kYXRhLT5fTV9tb250aDEyID0gbmxfbGFuZ2luZm9f
bChNT05fMTIsIF9fY2xvYyk7CisKKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFy
dGluZyB3aXRoICJDIidzIEphbi4KKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAxID0gbmxfbGFuZ2lu
Zm9fbChBQk1PTl8xLCBfX2Nsb2MpOworCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSBubF9sYW5n
aW5mb19sKEFCTU9OXzIsIF9fY2xvYyk7CisJICBfTV9kYXRhLT5fTV9hbW9udGgwMyA9IG5sX2xh
bmdpbmZvX2woQUJNT05fMywgX19jbG9jKTsKKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA0ID0gbmxf
bGFuZ2luZm9fbChBQk1PTl80LCBfX2Nsb2MpOworCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSBu
bF9sYW5naW5mb19sKEFCTU9OXzUsIF9fY2xvYyk7CisJICBfTV9kYXRhLT5fTV9hbW9udGgwNiA9
IG5sX2xhbmdpbmZvX2woQUJNT05fNiwgX19jbG9jKTsKKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA3
ID0gbmxfbGFuZ2luZm9fbChBQk1PTl83LCBfX2Nsb2MpOworCSAgX01fZGF0YS0+X01fYW1vbnRo
MDggPSBubF9sYW5naW5mb19sKEFCTU9OXzgsIF9fY2xvYyk7CisJICBfTV9kYXRhLT5fTV9hbW9u
dGgwOSA9IG5sX2xhbmdpbmZvX2woQUJNT05fOSwgX19jbG9jKTsKKwkgIF9NX2RhdGEtPl9NX2Ft
b250aDEwID0gbmxfbGFuZ2luZm9fbChBQk1PTl8xMCwgX19jbG9jKTsKKwkgIF9NX2RhdGEtPl9N
X2Ftb250aDExID0gbmxfbGFuZ2luZm9fbChBQk1PTl8xMSwgX19jbG9jKTsKKwkgIF9NX2RhdGEt
Pl9NX2Ftb250aDEyID0gbmxfbGFuZ2luZm9fbChBQk1PTl8xMiwgX19jbG9jKTsKKwl9CisgICAg
fQorCisjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyAgdGVtcGxhdGU8PgorICAgIHZvaWQK
KyAgICBfX3RpbWVwdW5jdDx3Y2hhcl90Pjo6CisgICAgX01fcHV0KHdjaGFyX3QqIF9fcywgc2l6
ZV90IF9fbWF4bGVuLCBjb25zdCB3Y2hhcl90KiBfX2Zvcm1hdCwKKwkgICBjb25zdCB0bSogX190
bSkgY29uc3QgdGhyb3coKQorICAgIHsKKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHdjc2Z0
aW1lX2woX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0sCisJCQkJCV9NX2NfbG9jYWxlX3Rp
bWVwdW5jdCk7CisgICAgICAvLyBNYWtlIHN1cmUgX19zIGlzIG51bGwgdGVybWluYXRlZC4KKyAg
ICAgIGlmIChfX2xlbiA9PSAwKQorCV9fc1swXSA9IEwnXDAnOworICAgIH0KKworICB0ZW1wbGF0
ZTw+CisgICAgdm9pZAorICAgIF9fdGltZXB1bmN0PHdjaGFyX3Q+OjpfTV9pbml0aWFsaXplX3Rp
bWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYykKKyAgICB7CisgICAgICBpZiAoIV9NX2RhdGEpCisJ
X01fZGF0YSA9IG5ldyBfX3RpbWVwdW5jdF9jYWNoZTx3Y2hhcl90PjsKKworICAgICAgaWYgKCFf
X2Nsb2MpCisJeworCSAgLy8gIkMiIGxvY2FsZQorCSAgX01fY19sb2NhbGVfdGltZXB1bmN0ID0g
X1NfZ2V0X2NfbG9jYWxlKCk7CisKKwkgIF9NX2RhdGEtPl9NX2RhdGVfZm9ybWF0ID0gTCIlbS8l
ZC8leSI7CisJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSBMIiVtLyVkLyV5IjsKKwkg
IF9NX2RhdGEtPl9NX3RpbWVfZm9ybWF0ID0gTCIlSDolTTolUyI7CisJICBfTV9kYXRhLT5fTV90
aW1lX2VyYV9mb3JtYXQgPSBMIiVIOiVNOiVTIjsKKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9m
b3JtYXQgPSBMIiI7CisJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9IEwiIjsK
KwkgIF9NX2RhdGEtPl9NX2FtID0gTCJBTSI7CisJICBfTV9kYXRhLT5fTV9wbSA9IEwiUE0iOwor
CSAgX01fZGF0YS0+X01fYW1fcG1fZm9ybWF0ID0gTCIlSTolTTolUyAlcCI7CisKKwkgIC8vIERh
eSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW5kYXkuCisJICBfTV9kYXRhLT5fTV9kYXkx
ID0gTCJTdW5kYXkiOworCSAgX01fZGF0YS0+X01fZGF5MiA9IEwiTW9uZGF5IjsKKwkgIF9NX2Rh
dGEtPl9NX2RheTMgPSBMIlR1ZXNkYXkiOworCSAgX01fZGF0YS0+X01fZGF5NCA9IEwiV2VkbmVz
ZGF5IjsKKwkgIF9NX2RhdGEtPl9NX2RheTUgPSBMIlRodXJzZGF5IjsKKwkgIF9NX2RhdGEtPl9N
X2RheTYgPSBMIkZyaWRheSI7CisJICBfTV9kYXRhLT5fTV9kYXk3ID0gTCJTYXR1cmRheSI7CisK
KwkgIC8vIEFiYnJldmlhdGVkIGRheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW4uCisJ
ICBfTV9kYXRhLT5fTV9hZGF5MSA9IEwiU3VuIjsKKwkgIF9NX2RhdGEtPl9NX2FkYXkyID0gTCJN
b24iOworCSAgX01fZGF0YS0+X01fYWRheTMgPSBMIlR1ZSI7CisJICBfTV9kYXRhLT5fTV9hZGF5
NCA9IEwiV2VkIjsKKwkgIF9NX2RhdGEtPl9NX2FkYXk1ID0gTCJUaHUiOworCSAgX01fZGF0YS0+
X01fYWRheTYgPSBMIkZyaSI7CisJICBfTV9kYXRhLT5fTV9hZGF5NyA9IEwiU2F0IjsKKworCSAg
Ly8gTW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFudWFyeS4KKwkgIF9NX2RhdGEt
Pl9NX21vbnRoMDEgPSBMIkphbnVhcnkiOworCSAgX01fZGF0YS0+X01fbW9udGgwMiA9IEwiRmVi
cnVhcnkiOworCSAgX01fZGF0YS0+X01fbW9udGgwMyA9IEwiTWFyY2giOworCSAgX01fZGF0YS0+
X01fbW9udGgwNCA9IEwiQXByaWwiOworCSAgX01fZGF0YS0+X01fbW9udGgwNSA9IEwiTWF5IjsK
KwkgIF9NX2RhdGEtPl9NX21vbnRoMDYgPSBMIkp1bmUiOworCSAgX01fZGF0YS0+X01fbW9udGgw
NyA9IEwiSnVseSI7CisJICBfTV9kYXRhLT5fTV9tb250aDA4ID0gTCJBdWd1c3QiOworCSAgX01f
ZGF0YS0+X01fbW9udGgwOSA9IEwiU2VwdGVtYmVyIjsKKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAg
PSBMIk9jdG9iZXIiOworCSAgX01fZGF0YS0+X01fbW9udGgxMSA9IEwiTm92ZW1iZXIiOworCSAg
X01fZGF0YS0+X01fbW9udGgxMiA9IEwiRGVjZW1iZXIiOworCisJICAvLyBBYmJyZXZpYXRlZCBt
b250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW4uCisJICBfTV9kYXRhLT5fTV9hbW9u
dGgwMSA9IEwiSmFuIjsKKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gTCJGZWIiOworCSAgX01f
ZGF0YS0+X01fYW1vbnRoMDMgPSBMIk1hciI7CisJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9IEwi
QXByIjsKKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gTCJNYXkiOworCSAgX01fZGF0YS0+X01f
YW1vbnRoMDYgPSBMIkp1biI7CisJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9IEwiSnVsIjsKKwkg
IF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gTCJBdWciOworCSAgX01fZGF0YS0+X01fYW1vbnRoMDkg
PSBMIlNlcCI7CisJICBfTV9kYXRhLT5fTV9hbW9udGgxMCA9IEwiT2N0IjsKKwkgIF9NX2RhdGEt
Pl9NX2Ftb250aDExID0gTCJOb3YiOworCSAgX01fZGF0YS0+X01fYW1vbnRoMTIgPSBMIkRlYyI7
CisJfQorICAgICAgZWxzZQorCXsKKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2Nsb25l
X2NfbG9jYWxlKF9fY2xvYyk7CisJICBfX2Nsb2MgPSBfTV9jX2xvY2FsZV90aW1lcHVuY3Q7CisK
KwkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90ICpfX3c7IH0gX191OworCisJICBfX3UuX19z
ID0gbmxfbGFuZ2luZm9fbChfTkxfVElNRV9XRF9GTVQsIF9fY2xvYyk7CisJICBfTV9kYXRhLT5f
TV9kYXRlX2Zvcm1hdCA9IF9fdS5fX3c7CisJICBfX3UuX19zID0gbmxfbGFuZ2luZm9fbChfTkxf
VElNRV9XRVJBX0RfRk1ULCBfX2Nsb2MpOworCSAgX01fZGF0YS0+X01fZGF0ZV9lcmFfZm9ybWF0
ID0gX191Ll9fdzsKKwkgIF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9OTF9USU1FX1dUX0ZNVCwg
X19jbG9jKTsKKwkgIF9NX2RhdGEtPl9NX3RpbWVfZm9ybWF0ID0gX191Ll9fdzsKKwkgIF9fdS5f
X3MgPSBubF9sYW5naW5mb19sKF9OTF9USU1FX1dFUkFfVF9GTVQsIF9fY2xvYyk7CisJICBfTV9k
YXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSBfX3UuX193OworCSAgX191Ll9fcyA9IG5sX2xhbmdp
bmZvX2woX05MX1RJTUVfV0RfVF9GTVQsIF9fY2xvYyk7CisJICBfTV9kYXRhLT5fTV9kYXRlX3Rp
bWVfZm9ybWF0ID0gX191Ll9fdzsKKwkgIF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9OTF9USU1F
X1dFUkFfRF9UX0ZNVCwgX19jbG9jKTsKKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9y
bWF0ID0gX191Ll9fdzsKKwkgIF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9OTF9USU1FX1dBTV9T
VFIsIF9fY2xvYyk7CisJICBfTV9kYXRhLT5fTV9hbSA9IF9fdS5fX3c7CisJICBfX3UuX19zID0g
bmxfbGFuZ2luZm9fbChfTkxfVElNRV9XUE1fU1RSLCBfX2Nsb2MpOworCSAgX01fZGF0YS0+X01f
cG0gPSBfX3UuX193OworCSAgX191Ll9fcyA9IG5sX2xhbmdpbmZvX2woX05MX1RJTUVfV1RfRk1U
X0FNUE0sIF9fY2xvYyk7CisJICBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQgPSBfX3UuX193Owor
CisJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgorCSAgX191Ll9f
cyA9IG5sX2xhbmdpbmZvX2woX05MX1RJTUVfV1dFRUtEQVlfMSwgX19jbG9jKTsKKwkgIF9NX2Rh
dGEtPl9NX2RheTEgPSBfX3UuX193OworCSAgX191Ll9fcyA9IG5sX2xhbmdpbmZvX2woX05MX1RJ
TUVfV1dFRUtEQVlfMiwgX19jbG9jKTsKKwkgIF9NX2RhdGEtPl9NX2RheTIgPSBfX3UuX193Owor
CSAgX191Ll9fcyA9IG5sX2xhbmdpbmZvX2woX05MX1RJTUVfV1dFRUtEQVlfMywgX19jbG9jKTsK
KwkgIF9NX2RhdGEtPl9NX2RheTMgPSBfX3UuX193OworCSAgX191Ll9fcyA9IG5sX2xhbmdpbmZv
X2woX05MX1RJTUVfV1dFRUtEQVlfNCwgX19jbG9jKTsKKwkgIF9NX2RhdGEtPl9NX2RheTQgPSBf
X3UuX193OworCSAgX191Ll9fcyA9IG5sX2xhbmdpbmZvX2woX05MX1RJTUVfV1dFRUtEQVlfNSwg
X19jbG9jKTsKKwkgIF9NX2RhdGEtPl9NX2RheTUgPSBfX3UuX193OworCSAgX191Ll9fcyA9IG5s
X2xhbmdpbmZvX2woX05MX1RJTUVfV1dFRUtEQVlfNiwgX19jbG9jKTsKKwkgIF9NX2RhdGEtPl9N
X2RheTYgPSBfX3UuX193OworCSAgX191Ll9fcyA9IG5sX2xhbmdpbmZvX2woX05MX1RJTUVfV1dF
RUtEQVlfNywgX19jbG9jKTsKKwkgIF9NX2RhdGEtPl9NX2RheTcgPSBfX3UuX193OworCisJICAv
LyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuLgorCSAgX191
Ll9fcyA9IG5sX2xhbmdpbmZvX2woX05MX1RJTUVfV1dEQVlfMSwgX19jbG9jKTsKKwkgIF9NX2Rh
dGEtPl9NX2FkYXkxID0gX191Ll9fdzsKKwkgIF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9OTF9U
SU1FX1dXREFZXzIsIF9fY2xvYyk7CisJICBfTV9kYXRhLT5fTV9hZGF5MiA9IF9fdS5fX3c7CisJ
ICBfX3UuX19zID0gbmxfbGFuZ2luZm9fbChfTkxfVElNRV9XV0RBWV8zLCBfX2Nsb2MpOworCSAg
X01fZGF0YS0+X01fYWRheTMgPSBfX3UuX193OworCSAgX191Ll9fcyA9IG5sX2xhbmdpbmZvX2wo
X05MX1RJTUVfV1dEQVlfNCwgX19jbG9jKTsKKwkgIF9NX2RhdGEtPl9NX2FkYXk0ID0gX191Ll9f
dzsKKwkgIF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9OTF9USU1FX1dXREFZXzUsIF9fY2xvYyk7
CisJICBfTV9kYXRhLT5fTV9hZGF5NSA9IF9fdS5fX3c7CisJICBfX3UuX19zID0gbmxfbGFuZ2lu
Zm9fbChfTkxfVElNRV9XV0RBWV82LCBfX2Nsb2MpOworCSAgX01fZGF0YS0+X01fYWRheTYgPSBf
X3UuX193OworCSAgX191Ll9fcyA9IG5sX2xhbmdpbmZvX2woX05MX1RJTUVfV1dEQVlfNywgX19j
bG9jKTsKKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gX191Ll9fdzsKKworCSAgLy8gTW9udGggbmFt
ZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFudWFyeS4KKwkgIF9fdS5fX3MgPSBubF9sYW5naW5m
b19sKF9OTF9USU1FX1dNT05USF8xLCBfX2Nsb2MpOworCSAgX01fZGF0YS0+X01fbW9udGgwMSA9
IF9fdS5fX3c7CisJICBfX3UuX19zID0gbmxfbGFuZ2luZm9fbChfTkxfVElNRV9XTU9OVEhfMiwg
X19jbG9jKTsKKwkgIF9NX2RhdGEtPl9NX21vbnRoMDIgPSBfX3UuX193OworCSAgX191Ll9fcyA9
IG5sX2xhbmdpbmZvX2woX05MX1RJTUVfV01PTlRIXzMsIF9fY2xvYyk7CisJICBfTV9kYXRhLT5f
TV9tb250aDAzID0gX191Ll9fdzsKKwkgIF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9OTF9USU1F
X1dNT05USF80LCBfX2Nsb2MpOworCSAgX01fZGF0YS0+X01fbW9udGgwNCA9IF9fdS5fX3c7CisJ
ICBfX3UuX19zID0gbmxfbGFuZ2luZm9fbChfTkxfVElNRV9XTU9OVEhfNSwgX19jbG9jKTsKKwkg
IF9NX2RhdGEtPl9NX21vbnRoMDUgPSBfX3UuX193OworCSAgX191Ll9fcyA9IG5sX2xhbmdpbmZv
X2woX05MX1RJTUVfV01PTlRIXzYsIF9fY2xvYyk7CisJICBfTV9kYXRhLT5fTV9tb250aDA2ID0g
X191Ll9fdzsKKwkgIF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9OTF9USU1FX1dNT05USF83LCBf
X2Nsb2MpOworCSAgX01fZGF0YS0+X01fbW9udGgwNyA9IF9fdS5fX3c7CisJICBfX3UuX19zID0g
bmxfbGFuZ2luZm9fbChfTkxfVElNRV9XTU9OVEhfOCwgX19jbG9jKTsKKwkgIF9NX2RhdGEtPl9N
X21vbnRoMDggPSBfX3UuX193OworCSAgX191Ll9fcyA9IG5sX2xhbmdpbmZvX2woX05MX1RJTUVf
V01PTlRIXzksIF9fY2xvYyk7CisJICBfTV9kYXRhLT5fTV9tb250aDA5ID0gX191Ll9fdzsKKwkg
IF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9OTF9USU1FX1dNT05USF8xMCwgX19jbG9jKTsKKwkg
IF9NX2RhdGEtPl9NX21vbnRoMTAgPSBfX3UuX193OworCSAgX191Ll9fcyA9IG5sX2xhbmdpbmZv
X2woX05MX1RJTUVfV01PTlRIXzExLCBfX2Nsb2MpOworCSAgX01fZGF0YS0+X01fbW9udGgxMSA9
IF9fdS5fX3c7CisJICBfX3UuX19zID0gbmxfbGFuZ2luZm9fbChfTkxfVElNRV9XTU9OVEhfMTIs
IF9fY2xvYyk7CisJICBfTV9kYXRhLT5fTV9tb250aDEyID0gX191Ll9fdzsKKworCSAgLy8gQWJi
cmV2aWF0ZWQgbW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFuLgorCSAgX191Ll9f
cyA9IG5sX2xhbmdpbmZvX2woX05MX1RJTUVfV01PTl8xLCBfX2Nsb2MpOworCSAgX01fZGF0YS0+
X01fYW1vbnRoMDEgPSBfX3UuX193OworCSAgX191Ll9fcyA9IG5sX2xhbmdpbmZvX2woX05MX1RJ
TUVfV01PTl8yLCBfX2Nsb2MpOworCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSBfX3UuX193Owor
CSAgX191Ll9fcyA9IG5sX2xhbmdpbmZvX2woX05MX1RJTUVfV01PTl8zLCBfX2Nsb2MpOworCSAg
X01fZGF0YS0+X01fYW1vbnRoMDMgPSBfX3UuX193OworCSAgX191Ll9fcyA9IG5sX2xhbmdpbmZv
X2woX05MX1RJTUVfV01PTl80LCBfX2Nsb2MpOworCSAgX01fZGF0YS0+X01fYW1vbnRoMDQgPSBf
X3UuX193OworCSAgX191Ll9fcyA9IG5sX2xhbmdpbmZvX2woX05MX1RJTUVfV01PTl81LCBfX2Ns
b2MpOworCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSBfX3UuX193OworCSAgX191Ll9fcyA9IG5s
X2xhbmdpbmZvX2woX05MX1RJTUVfV01PTl82LCBfX2Nsb2MpOworCSAgX01fZGF0YS0+X01fYW1v
bnRoMDYgPSBfX3UuX193OworCSAgX191Ll9fcyA9IG5sX2xhbmdpbmZvX2woX05MX1RJTUVfV01P
Tl83LCBfX2Nsb2MpOworCSAgX01fZGF0YS0+X01fYW1vbnRoMDcgPSBfX3UuX193OworCSAgX191
Ll9fcyA9IG5sX2xhbmdpbmZvX2woX05MX1RJTUVfV01PTl84LCBfX2Nsb2MpOworCSAgX01fZGF0
YS0+X01fYW1vbnRoMDggPSBfX3UuX193OworCSAgX191Ll9fcyA9IG5sX2xhbmdpbmZvX2woX05M
X1RJTUVfV01PTl85LCBfX2Nsb2MpOworCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSBfX3UuX193
OworCSAgX191Ll9fcyA9IG5sX2xhbmdpbmZvX2woX05MX1RJTUVfV01PTl8xMCwgX19jbG9jKTsK
KwkgIF9NX2RhdGEtPl9NX2Ftb250aDEwID0gX191Ll9fdzsKKwkgIF9fdS5fX3MgPSBubF9sYW5n
aW5mb19sKF9OTF9USU1FX1dNT05fMTEsIF9fY2xvYyk7CisJICBfTV9kYXRhLT5fTV9hbW9udGgx
MSA9IF9fdS5fX3c7CisJICBfX3UuX19zID0gbmxfbGFuZ2luZm9fbChfTkxfVElNRV9XTU9OXzEy
LCBfX2Nsb2MpOworCSAgX01fZGF0YS0+X01fYW1vbnRoMTIgPSBfX3UuX193OworCX0KKyAgICB9
CisjZW5kaWYKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFj
ZQpkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvbmV3bGliL3RpbWVfbWVt
YmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvbmV3bGliL3RpbWVfbWVtYmVycy5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iMGM3YzI5YmZkZQotLS0g
L2Rldi9udWxsCisrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL25ld2xpYi90aW1lX21l
bWJlcnMuaApAQCAtMCwwICsxLDkwIEBACisvLyBzdGQ6OnRpbWVfZ2V0LCBzdGQ6OnRpbWVfcHV0
IGltcGxlbWVudGF0aW9uLCBuZXdsaWIgdmVyc2lvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmln
aHQgKEMpIDIwMDEtMjAyMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFy
eSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v
ZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9u
LgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZl
cnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2Ny
aWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMu
MSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlv
biBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5k
IENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93
d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgYml0cy90aW1lX21lbWJlcnMuaAor
ICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxp
YnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBo
ZWFkZXJuYW1le2xvY2FsZX0KKyAqLworCisvLworLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjEu
MiAtIHRpbWVfZ2V0IGZ1bmN0aW9ucworLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjMuMiAtIHRp
bWVfcHV0IGZ1bmN0aW9ucworLy8KKworLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJr
b3pAcmVkaGF0LmNvbT4KKy8vIE1vZGlmaWVkIGJ5IFRha2FzaGkgWWFubyA8dGFrYXNoaS55YW5v
QG5pZnR5Lm5lLmpwPgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVs
dCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJUPgorICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KHNpemVf
dCBfX3JlZnMpCisgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKDApLCBfTV9jX2xvY2FsZV90
aW1lcHVuY3QoMCksCisgICAgICBfTV9uYW1lX3RpbWVwdW5jdChfU19nZXRfY19uYW1lKCkpCisg
ICAgeyBfTV9pbml0aWFsaXplX3RpbWVwdW5jdCgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJUPgorICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KF9fY2FjaGVfdHlw
ZSogX19jYWNoZSwgc2l6ZV90IF9fcmVmcykKKyAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEo
X19jYWNoZSksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCgwKSwKKyAgICAgIF9NX25hbWVfdGltZXB1
bmN0KF9TX2dldF9jX25hbWUoKSkKKyAgICB7IF9NX2luaXRpYWxpemVfdGltZXB1bmN0KCk7IH0K
KworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6
X190aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKKwkJCQkgICAg
IHNpemVfdCBfX3JlZnMpCisgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKDApLCBfTV9jX2xv
Y2FsZV90aW1lcHVuY3QoMCksCisgICAgICBfTV9uYW1lX3RpbWVwdW5jdCgwKQorICAgIHsKKyAg
ICAgIGlmIChfX2J1aWx0aW5fc3RyY21wKF9fcywgX1NfZ2V0X2NfbmFtZSgpKSAhPSAwKQorCXsK
KwkgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fYnVpbHRpbl9zdHJsZW4oX19zKSArIDE7CisJICBj
aGFyKiBfX3RtcCA9IG5ldyBjaGFyW19fbGVuXTsKKwkgIF9fYnVpbHRpbl9tZW1jcHkoX190bXAs
IF9fcywgX19sZW4pOworCSAgX01fbmFtZV90aW1lcHVuY3QgPSBfX3RtcDsKKwl9CisgICAgICBl
bHNlCisJX01fbmFtZV90aW1lcHVuY3QgPSBfU19nZXRfY19uYW1lKCk7CisKKyAgICAgIF9fdHJ5
CisJeyBfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2Nsb2MpOyB9CisgICAgICBfX2NhdGNoKC4u
LikKKwl7CisJICBpZiAoX01fbmFtZV90aW1lcHVuY3QgIT0gX1NfZ2V0X2NfbmFtZSgpKQorCSAg
ICBkZWxldGUgW10gX01fbmFtZV90aW1lcHVuY3Q7CisJICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2Fp
bjsKKwl9CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBfX3RpbWVw
dW5jdDxfQ2hhclQ+Ojp+X190aW1lcHVuY3QoKQorICAgIHsKKyAgICAgIGlmIChfTV9uYW1lX3Rp
bWVwdW5jdCAhPSBfU19nZXRfY19uYW1lKCkpCisJZGVsZXRlIFtdIF9NX25hbWVfdGltZXB1bmN0
OworICAgICAgZGVsZXRlIF9NX2RhdGE7CisgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2Nf
bG9jYWxlX3RpbWVwdW5jdCk7CisgICAgfQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJ
T04KK30gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL29zL25l
d2xpYi9jdHlwZV9jb25maWd1cmVfY2hhci5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvb3MvbmV3
bGliL2N0eXBlX2NvbmZpZ3VyZV9jaGFyLmNjCmluZGV4IDJmMzcyN2U1MzA5Li5jZmFiNDEzZGQ3
OCAxMDA2NDQKLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9vcy9uZXdsaWIvY3R5cGVfY29uZmln
dXJlX2NoYXIuY2MKKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9vcy9uZXdsaWIvY3R5cGVfY29u
ZmlndXJlX2NoYXIuY2MKQEAgLTQyLDQyICs0MiwzOSBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BB
Q0VfVkVSU0lPTgogICBjdHlwZTxjaGFyPjo6Y2xhc3NpY190YWJsZSgpIHRocm93KCkKICAgeyBy
ZXR1cm4gX2N0eXBlXyArIDE7IH0KIAotICBjdHlwZTxjaGFyPjo6Y3R5cGUoX19jX2xvY2FsZSwg
Y29uc3QgbWFzayogX190YWJsZSwgYm9vbCBfX2RlbCwKKyAgY3R5cGU8Y2hhcj46OmN0eXBlKF9f
Y19sb2NhbGUgX19jbG9jLCBjb25zdCBtYXNrKiBfX3RhYmxlLCBib29sIF9fZGVsLAogCQkgICAg
IHNpemVfdCBfX3JlZnMpCi0gIDogZmFjZXQoX19yZWZzKSwgX01fZGVsKF9fdGFibGUgIT0gMCAm
JiBfX2RlbCksCisgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfY3R5cGUoX1NfY2xvbmVf
Y19sb2NhbGUoX19jbG9jKSksCisgIF9NX2RlbChfX3RhYmxlICE9IDAgJiYgX19kZWwpLAogICBf
TV90b3VwcGVyKE5VTEwpLCBfTV90b2xvd2VyKE5VTEwpLAotICBfTV90YWJsZShfX3RhYmxlID8g
X190YWJsZSA6IGNsYXNzaWNfdGFibGUoKSkKKyAgX01fdGFibGUoX190YWJsZSA/IF9fdGFibGUg
OiBjbGFzc2ljX3RhYmxlKCkpLAorICBfTV93aWRlbl9vaygwKSwgX01fbmFycm93X29rKDApCiAg
IHsKICAgICBtZW1zZXQoX01fd2lkZW4sIDAsIHNpemVvZihfTV93aWRlbikpOwotICAgIF9NX3dp
ZGVuX29rID0gMDsKICAgICBtZW1zZXQoX01fbmFycm93LCAwLCBzaXplb2YoX01fbmFycm93KSk7
Ci0gICAgX01fbmFycm93X29rID0gMDsKICAgfQogCiAgIGN0eXBlPGNoYXI+OjpjdHlwZShjb25z
dCBtYXNrKiBfX3RhYmxlLCBib29sIF9fZGVsLCBzaXplX3QgX19yZWZzKQotICA6IGZhY2V0KF9f
cmVmcyksIF9NX2RlbChfX3RhYmxlICE9IDAgJiYgX19kZWwpLAorICA6IGZhY2V0KF9fcmVmcyks
IF9NX2NfbG9jYWxlX2N0eXBlKF9TX2dldF9jX2xvY2FsZSgpKSwKKyAgX01fZGVsKF9fdGFibGUg
IT0gMCAmJiBfX2RlbCksCiAgIF9NX3RvdXBwZXIoTlVMTCksIF9NX3RvbG93ZXIoTlVMTCksCi0g
IF9NX3RhYmxlKF9fdGFibGUgPyBfX3RhYmxlIDogY2xhc3NpY190YWJsZSgpKQorICBfTV90YWJs
ZShfX3RhYmxlID8gX190YWJsZSA6IGNsYXNzaWNfdGFibGUoKSksCisgIF9NX3dpZGVuX29rKDAp
LCBfTV9uYXJyb3dfb2soMCkKICAgewogICAgIG1lbXNldChfTV93aWRlbiwgMCwgc2l6ZW9mKF9N
X3dpZGVuKSk7Ci0gICAgX01fd2lkZW5fb2sgPSAwOwogICAgIG1lbXNldChfTV9uYXJyb3csIDAs
IHNpemVvZihfTV9uYXJyb3cpKTsKLSAgICBfTV9uYXJyb3dfb2sgPSAwOwogICB9CiAKICAgY2hh
cgogICBjdHlwZTxjaGFyPjo6ZG9fdG91cHBlcihjaGFyIF9fYykgY29uc3QKLSAgewotICAgIGlu
dCBfX3ggPSBfX2M7Ci0gICAgcmV0dXJuICh0aGlzLT5pcyhjdHlwZV9iYXNlOjpsb3dlciwgX19j
KSA/IChfX3ggLSAnYScgKyAnQScpIDogX194KTsKLSAgfQorICB7IHJldHVybiA6OnRvdXBwZXIo
KGludCkgX19jKTsgfQogCiAgIGNvbnN0IGNoYXIqCiAgIGN0eXBlPGNoYXI+Ojpkb190b3VwcGVy
KGNoYXIqIF9fbG93LCBjb25zdCBjaGFyKiBfX2hpZ2gpIGNvbnN0CiAgIHsKICAgICB3aGlsZSAo
X19sb3cgPCBfX2hpZ2gpCiAgICAgICB7Ci0JKl9fbG93ID0gdGhpcy0+ZG9fdG91cHBlcigqX19s
b3cpOworCSpfX2xvdyA9IDo6dG91cHBlcigoaW50KSAqX19sb3cpOwogCSsrX19sb3c7CiAgICAg
ICB9CiAgICAgcmV0dXJuIF9faGlnaDsKQEAgLTg1LDE3ICs4MiwxNCBAQCBfR0xJQkNYWF9CRUdJ
Tl9OQU1FU1BBQ0VfVkVSU0lPTgogCiAgIGNoYXIKICAgY3R5cGU8Y2hhcj46OmRvX3RvbG93ZXIo
Y2hhciBfX2MpIGNvbnN0Ci0gIHsKLSAgICBpbnQgX194ID0gX19jOwotICAgIHJldHVybiAodGhp
cy0+aXMoY3R5cGVfYmFzZTo6dXBwZXIsIF9fYykgPyAoX194IC0gJ0EnICsgJ2EnKSA6IF9feCk7
Ci0gIH0KKyAgeyByZXR1cm4gOjp0b2xvd2VyKChpbnQpIF9fYyk7IH0KIAogICBjb25zdCBjaGFy
KgogICBjdHlwZTxjaGFyPjo6ZG9fdG9sb3dlcihjaGFyKiBfX2xvdywgY29uc3QgY2hhciogX19o
aWdoKSBjb25zdAogICB7CiAgICAgd2hpbGUgKF9fbG93IDwgX19oaWdoKQogICAgICAgewotCSpf
X2xvdyA9IHRoaXMtPmRvX3RvbG93ZXIoKl9fbG93KTsKKwkqX19sb3cgPSA6OnRvbG93ZXIoKGlu
dCkgKl9fbG93KTsKIAkrK19fbG93OwogICAgICAgfQogICAgIHJldHVybiBfX2hpZ2g7CmRpZmYg
LS1naXQgYS9saWJzdGRjKystdjMvY29uZmlndXJlIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQpp
bmRleCA1Mzg4MmMzZjZiNi4uNjk2MTNmM2E2Y2EgMTAwNzU1Ci0tLSBhL2xpYnN0ZGMrKy12My9j
b25maWd1cmUKKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQpAQCAtNzIzLDYgKzcyMyw3IEBA
IENYWEZJTFQKIExUTElCSUNPTlYKIExJQklDT05WCiBPUFRfTERGTEFHUworRVhUUkFfTElCUwog
U0VDVElPTl9MREZMQUdTCiBHTElCQ1hYX0xJQlMKIEVOQUJMRV9WVEFCTEVfVkVSSUZZX0ZBTFNF
CkBAIC0xNjUxNCw3ICsxNjUxNSw3IEBAIGZpCiAgICAgICBkcmFnb25mbHkqIHwgZnJlZWJzZCop
CiAJZW5hYmxlX2Nsb2NhbGVfZmxhZz1kcmFnb25mbHkKIAk7OwotICAgICAgb3BlbmJzZCopCisg
ICAgICBvcGVuYnNkKiB8IGN5Z3dpbiopCiAJZW5hYmxlX2Nsb2NhbGVfZmxhZz1uZXdsaWIKIAk7
OwogICAgICAgKikKQEAgLTE2NTI2LDYgKzE2NTI3LDEwIEBAIGZpCiAJOzsKICAgICBlc2FjCiAg
IGZpCisgIGNhc2UgJHt0YXJnZXRfb3N9IGluIGN5Z3dpbiopCisgICAgRVhUUkFfTElCUz0iLWxp
bnRsIgorICAgIDs7CisgIGVzYWMKIAogICAjIFNhbml0eSBjaGVjayBtb2RlbCwgYW5kIHRlc3Qg
Zm9yIHNwZWNpYWwgZnVuY3Rpb25hbGl0eS4KICAgaWYgdGVzdCAkZW5hYmxlX2Nsb2NhbGVfZmxh
ZyA9IGdudTsgdGhlbgpAQCAtMTY3ODUsMTkgKzE2NzkwLDU2IEBAICRhc19lY2hvICJJRUVFIDEw
MDMuMSIgPiY2OyB9CiAgICAgbmV3bGliKQogICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNf
bGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5ld2xpYiIgPiY1CiAkYXNfZWNobyAibmV3bGliIiA+
JjY7IH0KKyAgICAgIGZvciBhY19oZWFkZXIgaW4gbGliaW50bC5oCitkbyA6CisgIGFjX2ZuX2Nf
Y2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJsaWJpbnRsLmgiICJhY19jdl9oZWFkZXJf
bGliaW50bF9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRl
cl9saWJpbnRsX2giID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YK
KyNkZWZpbmUgSEFWRV9MSUJJTlRMX0ggMQorX0FDRU9GCisgYWNfaGFzX2xpYmludGxfaD15ZXMK
K2Vsc2UKKyAgYWNfaGFzX2xpYmludGxfaD1ubworZmkKIAotICAgICAgQ0xPQ0FMRV9IPWNvbmZp
Zy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5oCi0gICAgICBDTE9DQUxFX0NDPWNvbmZpZy9sb2Nh
bGUvZ2VuZXJpYy9jX2xvY2FsZS5jYwotICAgICAgQ0NPREVDVlRfQ0M9Y29uZmlnL2xvY2FsZS9n
ZW5lcmljL2NvZGVjdnRfbWVtYmVycy5jYwotICAgICAgQ0NPTExBVEVfQ0M9Y29uZmlnL2xvY2Fs
ZS9nZW5lcmljL2NvbGxhdGVfbWVtYmVycy5jYworZG9uZQorCisgICAgICBmb3IgYWNfaGVhZGVy
IGluIGljb252LmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVO
TyIgImljb252LmgiICJhY19jdl9oZWFkZXJfaWNvbnZfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0
IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfaWNvbnZfaCIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0
ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0lDT05WX0ggMQorX0FDRU9GCisg
YWNfaGFzX2ljb252X2g9eWVzCitlbHNlCisgIGFjX2hhc19pY29udl9oPW5vCitmaQorCitkb25l
CisKKworICAgICAgQ0xPQ0FMRV9IPWNvbmZpZy9sb2NhbGUvbmV3bGliL2NfbG9jYWxlLmgKKyAg
ICAgIENMT0NBTEVfQ0M9Y29uZmlnL2xvY2FsZS9uZXdsaWIvY19sb2NhbGUuY2MKKyAgICAgIEND
T0RFQ1ZUX0NDPWNvbmZpZy9sb2NhbGUvbmV3bGliL2NvZGVjdnRfbWVtYmVycy5jYworICAgICAg
Q0NPTExBVEVfQ0M9Y29uZmlnL2xvY2FsZS9uZXdsaWIvY29sbGF0ZV9tZW1iZXJzLmNjCiAgICAg
ICBDQ1RZUEVfQ0M9Y29uZmlnL2xvY2FsZS9uZXdsaWIvY3R5cGVfbWVtYmVycy5jYwotICAgICAg
Q01FU1NBR0VTX0g9Y29uZmlnL2xvY2FsZS9nZW5lcmljL21lc3NhZ2VzX21lbWJlcnMuaAotICAg
ICAgQ01FU1NBR0VTX0NDPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy9tZXNzYWdlc19tZW1iZXJzLmNj
Ci0gICAgICBDTU9ORVlfQ0M9Y29uZmlnL2xvY2FsZS9nZW5lcmljL21vbmV0YXJ5X21lbWJlcnMu
Y2MKLSAgICAgIENOVU1FUklDX0NDPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy9udW1lcmljX21lbWJl
cnMuY2MKLSAgICAgIENUSU1FX0g9Y29uZmlnL2xvY2FsZS9nZW5lcmljL3RpbWVfbWVtYmVycy5o
Ci0gICAgICBDVElNRV9DQz1jb25maWcvbG9jYWxlL2dlbmVyaWMvdGltZV9tZW1iZXJzLmNjCi0g
ICAgICBDTE9DQUxFX0lOVEVSTkFMX0g9Y29uZmlnL2xvY2FsZS9nZW5lcmljL2MrK2xvY2FsZV9p
bnRlcm5hbC5oCisgICAgICBpZiB0ZXN0ICRhY19oYXNfbGliaW50bF9oID0geWVzOyB0aGVuCisJ
Q01FU1NBR0VTX0g9Y29uZmlnL2xvY2FsZS9uZXdsaWIvbWVzc2FnZXNfbWVtYmVycy5oCisJQ01F
U1NBR0VTX0NDPWNvbmZpZy9sb2NhbGUvbmV3bGliL21lc3NhZ2VzX21lbWJlcnMuY2MKKyAgICAg
IGVsc2UKKwlDTUVTU0FHRVNfSD1jb25maWcvbG9jYWxlL2dlbmVyaWMvbWVzc2FnZXNfbWVtYmVy
cy5oCisJQ01FU1NBR0VTX0NDPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy9tZXNzYWdlc19tZW1iZXJz
LmNjCisgICAgICBmaQorICAgICAgQ01PTkVZX0NDPWNvbmZpZy9sb2NhbGUvbmV3bGliL21vbmV0
YXJ5X21lbWJlcnMuY2MKKyAgICAgIGlmIHRlc3QgJGFjX2hhc19pY29udl9oID0geWVzOyB0aGVu
CisJQ05VTUVSSUNfQ0M9Y29uZmlnL2xvY2FsZS9uZXdsaWIvbnVtZXJpY19tZW1iZXJzLmNjCisg
ICAgICBlbHNlCisJQ05VTUVSSUNfQ0M9Y29uZmlnL2xvY2FsZS9nZW5lcmljL251bWVyaWNfbWVt
YmVycy5jYworICAgICAgZmkKKyAgICAgIENUSU1FX0g9Y29uZmlnL2xvY2FsZS9uZXdsaWIvdGlt
ZV9tZW1iZXJzLmgKKyAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvbmV3bGliL3RpbWVfbWVt
YmVycy5jYworICAgICAgQ0xPQ0FMRV9JTlRFUk5BTF9IPWNvbmZpZy9sb2NhbGUvbmV3bGliL2Mr
K2xvY2FsZV9pbnRlcm5hbC5oCiAgICAgICA7OwogICBlc2FjCiAKZGlmZiAtLWdpdCBhL2xpYnN0
ZGMrKy12My9pbmNsdWRlL2JpdHMvbG9jYWxlX2ZhY2V0c19ub25pby50Y2MgYi9saWJzdGRjKyst
djMvaW5jbHVkZS9iaXRzL2xvY2FsZV9mYWNldHNfbm9uaW8udGNjCmluZGV4IGIxOWY0NDI1MzAw
Li44N2U3ZmFmNWFiOCAxMDA2NDQKLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9sb2Nh
bGVfZmFjZXRzX25vbmlvLnRjYworKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2xvY2Fs
ZV9mYWNldHNfbm9uaW8udGNjCkBAIC03OTUsNiArNzk1LDcgQEAgX0dMSUJDWFhfRU5EX05BTUVT
UEFDRV9MREJMX09SX0NYWDExCiAJCSAgICB9CiAJCSAgYnJlYWs7CiAJCWNhc2UgJ0knOgorCQlj
YXNlICdsJzogLy8gZm9yIG5ld2xpYgogCQkgIC8vIEhvdXIgWzAxLCAxMl0uIFt0bV9ob3VyXQog
CQkgIF9fYmVnID0gX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX21lbSwgMSwgMTIsIDIs
CiAJCQkJCSBfX2lvLCBfX3RtcGVycik7CmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvc3JjL01h
a2VmaWxlLmluIGIvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5pbgppbmRleCBmNDJkOTU3YWYz
Ni4uODU3YzVlZWExY2EgMTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy12My9zcmMvTWFrZWZpbGUuaW4K
KysrIGIvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5pbgpAQCAtMzA3LDYgKzMwNyw3IEBAIEVS
Uk9SX0NPTlNUQU5UU19TUkNESVIgPSBARVJST1JfQ09OU1RBTlRTX1NSQ0RJUkAKIEVYRUVYVCA9
IEBFWEVFWFRACiBFWFRSQV9DRkxBR1MgPSBARVhUUkFfQ0ZMQUdTQAogRVhUUkFfQ1hYX0ZMQUdT
ID0gQEVYVFJBX0NYWF9GTEFHU0AKK0VYVFJBX0xJQlMgPSBARVhUUkFfTElCU0AKIEZHUkVQID0g
QEZHUkVQQAogRk9STUFUX0ZJTEUgPSBARk9STUFUX0ZJTEVACiBGUkVFU1RBTkRJTkdfRkxBR1Mg
PSBARlJFRVNUQU5ESU5HX0ZMQUdTQApAQCAtNTYxLDcgKzU2Miw3IEBAIGxpYnN0ZGNfX19sYV9E
RVBFTkRFTkNJRVMgPSBcCiAJJCh0b3BfYnVpbGRkaXIpL3NyYy9jKysyMC9saWJjKysyMGNvbnZl
bmllbmNlLmxhCiAKIGxpYnN0ZGNfX19sYV9MREZMQUdTID0gXAotCS12ZXJzaW9uLWluZm8gJChs
aWJ0b29sX1ZFUlNJT04pICR7dmVyc2lvbl9hcmd9IC1sbQorCS12ZXJzaW9uLWluZm8gJChsaWJ0
b29sX1ZFUlNJT04pICR7dmVyc2lvbl9hcmd9IC1sbSAkKEVYVFJBX0xJQlMpCiAKIGxpYnN0ZGNf
X19sYV9MSU5LID0gJChDWFhMSU5LKSAkKGxpYnN0ZGNfX19sYV9MREZMQUdTKSAkKGx0X2hvc3Rf
ZmxhZ3MpCiBAR0xJQkNYWF9MREJMX0FMVDEyOF9DT01QQVRfRkFMU0VAQEdMSUJDWFhfTERCTF9D
T01QQVRfVFJVRUBMVENYWENPTVBJTEU2NCA9ICQoTFRDWFhDT01QSUxFKQpkaWZmIC0tZ2l0IGEv
bGlic3RkYysrLXYzL3NyYy9jKys5OC9sb2NhbGVfaW5pdC5jYyBiL2xpYnN0ZGMrKy12My9zcmMv
YysrOTgvbG9jYWxlX2luaXQuY2MKaW5kZXggY2ZjMjJlYWY1YTQuLjU4MmE4MTZkYTY1IDEwMDY0
NAotLS0gYS9saWJzdGRjKystdjMvc3JjL2MrKzk4L2xvY2FsZV9pbml0LmNjCisrKyBiL2xpYnN0
ZGMrKy12My9zcmMvYysrOTgvbG9jYWxlX2luaXQuY2MKQEAgLTMwMCw4ICszMDAsOSBAQCBfR0xJ
QkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogCV9fb3RoZXIuX01faW1wbC0+X01fYWRkX3Jl
ZmVyZW5jZSgpOwogICAgICAgX1NfZ2xvYmFsID0gX19vdGhlci5fTV9pbXBsOwogICAgICAgY29u
c3Qgc3RyaW5nIF9fb3RoZXJfbmFtZSA9IF9fb3RoZXIubmFtZSgpOworICAgICAgZXh0ZXJuIGNv
bnN0IF9fdHlwZW9mKHNldGxvY2FsZSkgKl9fc2V0bG9jYWxlOwogICAgICAgaWYgKF9fb3RoZXJf
bmFtZSAhPSAiKiIpCi0Jc2V0bG9jYWxlKExDX0FMTCwgX19vdGhlcl9uYW1lLmNfc3RyKCkpOwor
CV9fc2V0bG9jYWxlKExDX0FMTCwgX19vdGhlcl9uYW1lLmNfc3RyKCkpOwogICAgIH0KIAogICAg
IC8vIFJlZmVyZW5jZSBjb3VudCBzYW5pdHkgY2hlY2s6IG9uZSByZWZlcmVuY2UgcmVtb3ZlZCBm
b3IgdGhlCi0tIAoyLjM5LjAKCg==

--Multipart=_Sun__31_Dec_2023_15_57_12_+0900_78LTqiKq6qcPKu_f
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline


-- 
Problem reports:      https://cygwin.com/problems.html
FAQ:                  https://cygwin.com/faq/
Documentation:        https://cygwin.com/docs.html
Unsubscribe info:     https://cygwin.com/ml/#unsubscribe-simple

--Multipart=_Sun__31_Dec_2023_15_57_12_+0900_78LTqiKq6qcPKu_f--

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019